東京工業大学大学院理工学研究科基礎物理学専攻中村研究室メンバー

ホームページおぼえがき > Linuxコマンド

Linuxコマンド

Linuxコマンドおぼえがき。Debian etch での使用が主。なぜおぼえがきとして書き残すかと言えば、コマンドすぐ忘れちゃうんだもん。
(制作中。本おぼえがきに間違いがないはずはない。)

コマンド

■ コマンド概要

Linuxのコマンドは、シェルと呼ばれるプログラムによって起動/制御され、カーネルと呼ばれるプログラムによって実行/管理される。シェルは、端末(ターミナル)と呼ばれるプログラム内で動作する。端末、シェル、カーネルの概要と例は以下。

項目概要
端末キーボードなどによって入力された文字列(?)をシェルに渡す。xterm, kterm, GNOME 端末
シェル端末から渡される文字列を解釈し、コマンドとしてカーネルに実行するようにお願いする。sh, bash, csh, tcsh, ksh, pdksh, zsh, ash
カーネルコンピュータの中核。CPU、メモリ、ハードディスクとかハードウェアを管理し、シェルからの要求に答える。Linuxカーネル, UNIXのカーネル達

ユーザーは上記のうち好きなもの選び使用することが出来る。よって、xterm内でbashを用いたり、GNOME 端末内でcshを用いたりすることが出来る。以下では、bash, Linuxカーネル, GNOME 端末を使用することを考える。

Linuxコマンドの実体は、主にC言語などで書かれコンパイルされたプログラムであり、/binといったディレクトリ内に置いてある。シェルは、入力されたコマンドと同じ名前のプログラムを、/binといったディレクトリ内から探し出し、起動する。よって、実行できるコマンドは、使用するシェルの種類とは無関係である(?)。すなわち、bashもcshも実行できるコマンドは変わらない(?)。シェルの種類の違いが顕著に現れるのは、シェルスクリプトなどを書いたときである(?)。ただし、シェル固有の内部コマンドというものが存在し、このコマンドはシェルによって異なる。

メモ) ここで言う端末とは、正式には端末エミュレータと呼ぶ?コマンドがどのディレクトリにあるかを探すコマンドは以下

$ which コマンド名

シェルがコマンドを探してくるディレクトリ、すなわちパスの確認は以下の様に打つ。

$ echo $PATH
bash: /usr/local/bin:/usr/bin:/bin

■ コマンド実行の流れ

例えば、lsというコマンドが端末に入力された場合のコマンド実行の流れを予想する。(勘。おそらく間違っている。これはソフトの面から見た解釈?)

  1. 端末からシェルへ入力文字列(ls)が渡される。
  2. シェルが入力を解釈し、lsという名のプログラムを/binといったディレクトリから探す。
  3. /binディレクトリ内で見つかったら、そのプログラム/bin/lsをカーネルに実行するようにお願いする。
  4. カーネルが実行する。(カーネルはプログラムをロードし、プログラムの「メモリ使いたい」とか言う要求に答える?)
  5. 実行されたプログラムは実行結果をシェルとかに出力する。
  6. シェルはその出力を端末に渡す。
  7. 端末はその出力を表示する。
  8. これあってるんだろうか。

マニュアル/ヘルプ

コマンドについてのマニュアル/ヘルプの読み方を書く。マニュアル/ヘルプを表示するには、以下のように打つ。

$ man コマンド         # manコマンドで、コマンドのマニュアルを表示。
$ コマンド --help      # コマンドのヘルプを表示。

■ 書式(SYNOPSIS)

$ man ln と打つと、lnのマニュアルが以下のように表示される。

NAME
       ln - make links between files

SYNOPSIS
       ln [options] source [dest]
       ln [options] source... directory

       POSIX options: [-f][--]

       GNU  options  (shortest form): [-bdfinsvF][-S backup-suffix][-V{num-
       bered,existing,simple}][--help][--version][--]
...続く

上記のSYNOPSISのところに、コマンドの使い方の決まり、すなわち書式が書かれている。上記の例では、lnの書式は2種あることがわかる。

[ ]で囲まれた部分は書かなくもよいことを示す。逆に[ ]で囲まれていない部分を書かないとエラーになる。souce... の"..."は引数を2個以上書いてもよいことを示す。すなわち、

$ ln source_1 source_2 source_3 directory_1

のように書いてもよい。

メモ)gftpのマニュアルには、

 SYNOPSIS
       gftp  [options] [[proto://][ user : [pass] @] site [: port
       ][/ directory ]]

とあるが、実際にコマンドを書くときは、スペースを入れてはならない。

$ gftp  ssh2:// user_1 : pass_1 @ site_1/ directory_1   # これはうまくいかない。
$ gftp  ssh2://user_1:pass_1@site_1/directory_1         # これはうまくいく。

コマンド逆引き

網羅しない。

■ ディレクトリ移動

ディレクトリを移動には、cdコマンドを使う。

$ cd directory # directoryに移動したいディレクトリの相対/絶対パスを指定する。
$ cd          # ホームディレクトリに移動する。
$ cd /        # ルートディレクトリに移動する。
$ cd ..       # 一つ上位のディレクトリに移動する。
$ cd ../../.. # 三つ上位のディレクトリに移動する。

■ ディレクトリ内のファイルを表示

ディレクトリ内のファイル一覧を表示するには、lsコマンドを使う。

$ ls     # カレントディレクトリにあるファイル名一覧を表示。
$ ls -la # カレントディレクトリにあるファイルをその付加情報を含め一覧表示。

ファイルが多くlsコマンドの出力がたくさんになりそうなときは、以下のように出力をlessコマンドに渡してファイル一覧を表示させる。終了するときは、qを入力する。

$ ls -la | less

■ ファイルをコピー

ファイルまたはディレクトリをコピーするには、cpコマンドを使う。

■ ファイルを削除

ファイルまたはディレクトリを削除するには、rmコマンドを使う。

■ パーミッション変更

ファイルのパーミッションを変更するには、chmodコマンドを使う。ここで、user: ファイル所有者, group: 所有者の属するグループ, others: 他のグループの人, read: 読み込み, write: 書き込み, execute: 実行である。

$ chmod ugo+rwx ファイル名   # user, group, othersの、read、write、executeを許可する。
$ chmod    +rwx ファイル名   # 上記と同じ。
$ chmod   o-rx  ファイル名   # othersの、read, executeを許可しない。

■ 所有者/グループ変更

ファイルの所有者/グループを変更するには、chownコマンドを使う。

$ chmod [OPTION]... [OWNER][:[GROUP]] FILE... # 書式
$ chmod ユーザー名 ファイル名 # ファイルの所有者をユーザー名に変更。
$ chmod :グループ名 ファイル名 # ファイルのグループをグループ名に変更。

■ パスワード変更

パスワードを変更するには、passwdコマンドを使う。例えば、ユーザー: username_1がパスワードを変更するとき。username_1としてログインしたら、以下のコマンドを打つ。

$ passwd
Changing password for username_1
(current) UNIX password: 現在のパスワード入力
Enter new UNIX password: 新しいパスワード入力
Retype new UNIX password: 新しいパスワードをもっかい入力

■ リンクを張る

ファイルにリンクを張るには、lnコマンドを使う。

$ ln -s TARGET LINK_NAME   # TARGETへのシンボリックリンクをLINK_NAMEと名づけてカレントディレクトに作る。
                            # TARGETはリンクを張りたいファイルのパスを示す。
                            # LINK_NAMEを省略すると、TARGETと同名のリンクがカレントディレクトに出来る。

メモ) リンクにはシンボリックとハードリンクの2種類あるが、ハードリンクはあまり利用しない。シンボリックリンクを張るときは、-sオプションをつけ、ハードリンクを張るときは、-s オプションをつけない。リンクを消しても元のファイルは消えない。シンボリックリンクを張った場合、元のファイルを消すと、シンボリックリンクは意味をなさなくなる。一方ハードリンクを張った場合、元のファイルを消してもハードリンクを消さぬ限り、ファイルは存在する。すなわち、ハードリンクはあるファイルのファイルパスを二つ(または多重)に増やす操作である?

■ ファイル内検索

ファイル内の文字列を検索するには、grepコマンドを用いる。

$ grep 検索文字列 ファイル名 # ファイル内で検索文字列を検索し、あったらその行を表示する。
$ grep 検索文字列            # ファイル名が省略され場合、標準入力から検索文字列を検索し、あったらその行を表示する。

二行目の例は以下のような使い方が可能。lsコマンドの出力するファイル名の中から、文字列"abc"を含むファイル名を探し、表示する。

$ ls -la | grep abc

■ 書庫解凍

書庫解凍にはtarコマンドを用いる。オプションのfは書庫ファイルを使用、x (extract?)は書庫からファイルを抽出(解凍、展開)という意味?拡張子が.tar.gzまたは.tgzの時はzオプションを、拡張子が.tar.bz2または.tbzの時はjオプションをつける。

$ tar zxf filename.tar.gz
$ tar zxf filename.tgz
$ tar jxf filename.tar.bz2
$ tar jxf filename.tbz
$ tar zxvf filename.tar.gz # vオプションは進行状況を長々表示。なくても良い。

メモ1) tarコマンドの種類によっては、zオプションとかが使えないときがあるかも?$ tar --versionでバージョンを確認し、GNU tarであれば大丈夫かも。

メモ2) z,jオプションがなくても.tar.gzやtar.bz2が解凍できたかも。z,jオプションて必要なんだろうか。最小限のオプションは、以下のとおりかも?

$ tar xf filename.tar.gz
$ tar xf filename.tar.bz2

コマンド一覧

網羅しない。

■ cat

短いファイルを端末内で見たいときに用いる。長いファイルはlessで見ると便利。

$ cat ファイル名      # ファイルの内容を表示。

■ less

長いファイルを端末内で1ページずつ読みたいときに用いる。短いファイルはcatで手軽に見れる。

$ less ファイル名     # ファイルの内容を1ページずつ表示。
$ ls -la | less       # lessコマンドは引数を省略すると、標準入力の内容を表示する。

メモ1) 終了はqを入力。/文字列で末尾方向に検索し、移動。?文字列で文字列を先頭方向に検索し、移動。nで末尾方向にさらに検索し、移動していく。スペースまたはfで次のページ、bで前のページ。矢印キーや、Page Up/Page Downキーも使える。

メモ2) moreコマンドより高機能なのがlessコマンド、lessコマンドの日本語対応版がlvコマンドらしい。more, less, lv などをpagerというらしい。moreは前のページに戻れない(?)ので不便かも?moreはいらない子?manコマンドの出力はlvをつかってるかも?

本おぼえがきの書体について

書体意味
AaBbCc123端末の表示する文字。またはコードなど。$ You have mail.
AaBbCc123ユーザーが入力する文字。
端末の表示する文字と区別する。
$ su
password:
AaBbCc123コマンドの引数やコードの可変部分。
実際の名前や値と置き換える。
$ rm filename

参考文献・webページ


ページ制作履歴
2007/12/24 作成開始
2007/12/24 webにアップ
2008/01/19 間違い修正
2008/01/21 コマンド追加
2008/05/04 tar,chown追加