以下の解説のコマンド起動例の部分で、大括弧 [ ]
で括っ
た部分は省略可能であることを示している。
chdir (cd)
- ディレクトリの移動(CHange DIRectory)
chdir
コマンドはシェルで作業する上での作業ディレク
トリ(カレントディレクトリ)を変更する。直感的にいうと、「今いるディ
レクトリ」を変更する。普通は短縮形の cd
コマンドを
使う。
% cd [移動したいディレクトリ]
とすることで、目的のディレクトリに移動する。引数を省略すると
ホームディレクトリ(~
)に移動する。
pushd popd
- ディレクトリの一時移動と復帰
(PUSH/POP Directory)
現在の作業ディレクトリをディレクトリスタック(ディレク トリの保存棚)に保存して、別のディレクトリに移動する。
% pushd [移動先ディレクトリ]
とすると、「移動先ディレクトリ」に移動する。元々いたディレク トリには
% popd
で戻れる。pushd
は何個でもディレクトリスタックに
積むことができる。pushd
の引数を省略すると、ディレク
トリスタックのトップ(最近いたディレクトリ)とカレントディレクトリを
交換する。つまり、pushd
を繰り返すことで、二つのディ
レクトリを往復できる。
dirs
- ディレクトリスタックの表示
現在のディレクトリスタックの値を表示する。
pwd
- 作業ディレクトリの表示
(Print Working Directory)
現在の作業ディレクトリを表示する。ただ、101教室環境で利用している
シェル(Z-Shell)では、設定によってプロンプトの一部として作業ディレ
クトリが表示されているので、pwd
コマンドを呼ぶ必要性が
低くなっている。
mkdir
- ディレクトリの作成
ディレクトリを作成する。もちろん書き込み権限のあるディレクト リに限る。
% mkdir 新ディレクトリ
とすると、「新ディレクトリ」を作成する。よく使うものとして、 以下のオプションがある。
-m モード
新規ディレクトリの属性を「モード」に指定する。属性に関 しては後述する。
-p
存在しない親ディレクトリを全て作成してから「新ディレクト
リ」を作成する。たとえば、カレントディレクトリに
foo
がない場合、
% mkdir foo/bar
は foo
がないので bar
を作成で
きずエラーになるが、-p
オプションを指定して
% mkdir -p foo/bar
とすると先に foo
を作成してから
bar
を作成してくれる。
rmdir
- ディレクトリの削除
ディレクトリを削除する。
% rmdir ディレクトリ
とすると「ディレクトリ」の中味が空の場合にディレクトリを削除す る。
ls
- ファイルのリスト表示(LiSt)
ファイルを一覧表示する。
% ls [オプション」 [file]
全て引数を省略すると、カレントディレクトリのファイル一覧を表示
する。引数に「file」を指定した場合、それがディレクトリであればそ
のディレクトリに含まれるファイル一覧を表示する。それが普通のファ
イルであればそのファイルを表示する。ディレクトリに含まれる一覧を
表示する場合、ファイル名が .
(ピリオド)で始まるファイ
ル(ドットファイル)は表示されない。よく使うオプションを列挙する。
-a
通常表示されない「ドットファイル」も表示する。
-F
各ファイル名の末尾に、ファイルの種別を意味する1文字の記号
をつけて表示する。実行ファイルを表す *
と、ディ
レクトリを表す /
と、シンボリックリンク(後述)を
表す @
を覚えておくとよい。
-l
ロングフォーマット表示する。
% ls -lF /usr/koeki/ruby/bin
合計 3602
-rwxr-xr-x 1 root other 359 3月 2日 11:16 irb*
-rwxr-xr-x 1 root other 1828188 3月 2日 11:16 ruby*
一番左の10字の記号文字列は、ファイルの種別と属性を表して いる。先頭の文字で代表的なものは
d
l
-
続く9文字の記号は3文字ずつが組の、ファイルのアクセス権を
意味するものとなっている。たとえば、
drwxr-xr-x
は、次のような意味を持っている。
ユーザ グループ 他人 読
み書
き実
行読
み書
き実
行読
み書
き実
行r
w
x
r
-
x
r
-
x
rは読み取り可能であること、wは書き込み可能であること、xは 実行可能であることを示している。一番左の3桁はファイルの所 有者本人、次の3桁は同一グループに属するユーザ、最後の3桁はど ちらでもない他人に対するアクセス権を意味する。
-d
ディレクトリを与えた場合に、そのディレクトリのファイル一 覧ではなく、ディレクトリ自身の情報を表示する。
-C
lsの出力をパイプで別コマンド(lessやmoreなどを含む)に繋ぐ
と、一行に一つのファイルを表示する。-C
オプショ
ンは、これを抑止し、必ず複数カラムで表示する。
-t
通常はファイル名で並べ換えて一覧表示するが、ファイルの タイムスタンプ(新しい順)で並べ換えて表示する。
-u
-t
に似ているが、ファイルのタイムスタンプで
はなく、最終アクセス時刻で並べ換える。
-r
ファイル一覧の並べ換え順序を逆にする。
-R
指定したディレクトリ以下、全てのサブディレクトリの中味を 再帰的に下って表示する。
cp
- ファイルのコピー (CoPy)
ファイルのコピーを行なう。二つの使い方がある。
% cp ファイル1 ファイル2
「ファイル1」を「ファイル2」で示される宛 先パスにコピーする。
% cp ファイル1…… ディレクトリ
のように最後の引数にディレクトリを指定した場合は、一つ以上のファ イルをそのディレクトリにコピーする。よく使うオプションには以下の ものがある。
-i
コピー先のファイルが既に存在した場合に、上書きしてもよい かの確認を求める。
-p
コピー先ファイルの属性やファイル更新時刻などもコピー元と 同じものにする。
-r
コピー元がディレクトリであった場合、そのディレクトリを再 帰的に読み込んで、コピー先ディレクトリにまるごとコピーする。
mv
- ファイルの移動 (MoVe)
ファイルの名前変更、または移動を行なう。
% mv ファイル1 ファイル2
とした場合、「ファイル1」を「ファイル2」 で示されるパス名に変更する。
% mv ファイル1 …… ディレクトリ
のように最後の引数にディレクトリを指定した場合は、一つ以上のファ イルをそのディレクトリに移動する。よく使うオプションとして、以下 のものがある。
-i
移動先のファイルが既に存在した場合に、上書きしてもよい かの確認を求める。
-f
移動先にファイルが既に存在した場合でも、 確認を求めない。
-r
コピー元がディレクトリであった場合、そのディレクトリを再 帰的に読み込んで、コピー先ディレクトリにまるごとコピーする。
rm
- ファイルの削除(ReMove)
ファイル(群)を削除する。
以下のオプションが利用できる。
-f
書き込み禁止属性のあるファイルなどの場合も、ユーザに確認 を求めずに強制的に削除する。
-i
消してよいかどうか、ファイルごとにユーザに確認を求める。
-r
引数にディレクトリを指定した場合、そのディレクトリ以下全 てのファイルを消すことを試みる。
tar
- アーカイブファイルの処理(Tape ARchive)
圧縮ファイルを展開したり作成したりするときに利用する。 オプションは多数あるが使う操作によって c t x の3つの組み合わせを覚 えておけばよい。
c
アーカイブを作る(Create)。
x
アーカイブからファイルを取り出す(eXtract)。
t
アーカイブ内にあるファイル一覧を表示する(Table)。
v
情報を詳細表示する(Verbose)。
z
アーカイブを圧縮ファイルとして扱う(gZip)。
これらを念頭に以下の操作を見ていこう。以下の例では、アー カイブファイルを圧縮ファイルとして利用する。
% gtar vzcf アーカイブ.tar.gz ファイル群……
「ファイル群」をまとめて「アーカイブ.tar.gz」圧縮ファイル に格納する。「ファイル群」の中にディレクトリがある場合は、 そのディレクトリ以下全てのファイルをまとめて格納する。
% gtar vztf アーカイブ.tar.gz
「アーカイブ.tar.gz」の中に格納されているファイル一覧が表 示される。ファイルがたくさん格納されている場合は、画面が流 れていってしまうので、
% gtar vztf アーカイブ.tar.gz | less
とするとよい(lessに関しては後述)。
% gtar vzxpf アーカイブ.tar.gz
「アーカイブ.tar.gz」圧縮ファイルから、中に含まれているファ イルを取り出す。取り出す操作のことを「展開」という。
du
- ディレクトリ使用量の表示
ディレクトリを指定して、そのディレクトリ以下でのディスク使用量
を表示する。よく利用するのは -s
と -k
オプションで、
% du -sk ディレクトリ
とすると、「ディレクトリ」以下全てのファイル容量をKB単位(1024バ イト単位)で表示する。
% du -sh ディレクトリ
-h
オプションは、人間が見て分かりやすい単位で
表示する。「ディレクトリ」を省略するとカレントディレクトリ以下
全てのファイル容量を調べる。
ファイルの中味を見たり、中味を処理するために利用するコマンド。
cat
- ファイルの連結と表示(conCATenate)
% cat ファイル……
とすることで、指定したファイル(複数指定した場合はそれら全てを連 結したもの)の中味を標準出力に出力する。よく使うオプションには以 下のものがある。
-n
各出力行の前に、行番号を付加する。
-v
ファイル中に印字不能文字がある場合、それらを代替表現で表 示する。
catは、ファイルの内容を一気に出力するので、通常は、シェルのパイ
プラインを利用して別のプロセスに渡す場合に利用する。ファイルの
中味そのものを自分が読みたい場合は、次項で説明するless
コマンドを利用する。
nkf
- ファイルの漢字コード変換(Network
Kanji-code Filter)
日本語を含むテキストを読み込み、指定した漢字コードに変換する。 SJIS/JIS/EUCコードに対応している。
% nkf [オプション] [ファイル]…
「オプション」は、変換したい漢字コードに応じて以下のどれかを指 定する。
-j
JISコードに変換する
-e
EUCコードに変換する
-s
Shift JIS コードに変換する
less (jless)
- ファイルの中味の表示(対話的)
ファイルの中味を画面に出力し、一画面表示したところで止まる。
次の一画面分を見たい場合は、SPCキーを押して順次読み進め
ることができる。less
でファイルの中を読んでいるとき
は、画面最下行に、
ファイル名 (END)
のようなプロンプトが表示される。これは、less
のコ
マンドモードに入っていることを示す。less
コマンド
モードで利用できるキー操作としては、以下のものが重要である。
head
- ファイルの先頭部分表示
指定した行数だけ、ファイルの先頭部分を表示する。
% head -行数 ファイル……
とすることで、指定した「行数」だけ表示する。「-行数」を省略す ると、10行だけ表示する。
tail
- ファイルの末尾部分表示
指定した行数だけ、ファイルの末尾部分を表示する。
% tail -行数 ファイル……
とすることで、指定した「行数」だけ表示する。「-行数」を省略す ると、10行だけ表示する。
grep
- ファイルからのパターン検索
正規表現により検索パターンを指定して、そのパターンにマッ チする行を表示する。
% grep [オプション] パターン [ファイル]
とすると、「ファイル」(ファイルを省略した場合は標準入力)から 「パターン」にマッチするものを含む行を検索してその行を標準出力に書 き出す。よく使うオプションには以下のものがある。
-h
複数のファイルを指定した場合でも、マッチした行のファイル 名を表示しない
-i
アルファベットを検索する場合に大文字小文字を同一視する
-l
一致した行ではなく、一致したものがあるファイル名を表示する
-v
そのパターンを含まない行を表示する(反転)
-w
検索パターンを「単語」だと見す
いくつか例を示そう。
% grep abc *
カレントディレクトリにある全てのファイルから "abc" という文字列 を含む行を表示する。ファイルが複数ある場合はマッチする行の先頭に ファイル名も表示する。
% grep -i abc *
上と同様だが、"abc" というパターンでアルファベット大文字小文 字を同一視して検索する。"ABC", "Abc" などの行もマッチする。
% grep -w abc access_log | grep -v xyz
access_log
というファイルから "abc" という単語を含
む行を選んでパイプラインに渡す。パイプラインの先の次のgrepでは、
受け取った行のうち、xyzというパターンを含まない行だけを選
んで表示する。
ls
コマンドの説明のところで触れたように、Unixファイルシス
テムに存在するファイルやディレクトリには属性という、ファイルの
アクセス許可情報が付加されている。「誰」に対して「何」を認めるかによっ
て組み合わせがあり、「誰に対して」の部分は
の3通りあり、「何を認めるか」の部分は
の3通りがある。3×3の組み合わせで、9通りの許可情報がある。
この、ファイルアクセスの許可情報を変えるコマンドが chmod
である。通常、何かのファイルを作成すると「自分は読み書きできるが、他人は読
むことだけしかできない」という属性が設定される。chmod
コ
マンドでは、この属性を変えることができる。
% chmod 属性 ファイル………
とすると、指定した「ファイル」を新しい「属性」に設定する。 属性は誰(u, g, o)に対して何(r, w, x)を許可(+)または拒否(-)するかという記 号列で指定する。たとえば、他人でもファイルを書き込みできるようにしたい 場合は、
% chmod o+w file
のようにする。同一グループの人に実行権限を与えたいときは
% chmod g+x file
とする。また、u g o 全て、を表す記号として a を使うこともできる。
chmod
で利用できるオプションのうち-R
を覚えて
おくとよい。
-R
指定したファイルがディレクトリだった場合、そのディレクトリを再 帰的に下降して全てのファイルの属性を変更する
Unixを利用する大きなメリットとして、どこからでもネットワークを 越えて利用できるという点がある。たとえ、海外出張に行こうと、ネットワーク にさえつながっていれば、普段利用しているコンピュータを利用できる。このと きに別のコンピュータにログインすることをリモートログインという。 現在ではリモートログインにはSSHを利用する。
ssh
- リモートホストへの安全なログインやコマンド実行
% ssh [オプション] リモートホスト [コマンド]
のように利用し、「リモートホスト」にログインする。「コマンド」 を指定すると、「リモートホスト」でそのコマンドを実行して終了する。 よく使うオプションとしては、次のものがある。
-l ログイン
リモートホストでのログイン名として「ログイン」を利用する。 ローカルホスト(現在利用しているホスト)とはログイン名が違 う場合に利用する。
-C
通信を圧縮する。遅い回線で利用すると快適になる。
-X
Xのパケットをフォワードする。これにより、リモートホスト でのXプログラムを起動したウィンドウがローカルホストに開ける ようになる。
scp
- リモートホストへの安全なファイルコピー
% scp [オプション] [[ユーザ@]ホスト1:]ファイル1 [[ユーザ@]ホスト2:]ファイル2
リモートホスト間でファイルコピーする。コピー元とコピー先には
ホスト名:パス名
という指定を利用する。たとえば、こちらのホストの
foo.txt
というファイルを、ホスト acchi の
/tmp
ディレクトリにコピーしたいときは、
% scp foo.txt acchi:/tmp
とし、逆にホスト acchi の、bar.html
をこちらのホス
トのカレントディレクトリにコピーしたいときは
% scp acchi:foo.txt .
とする。ユーザ名を省略すると現在のユーザ名(ログイン名)になる。 よく利用するものとして以下のオプションがある。
-p
属性やタイムスタンプを同一にする(cpコマンドの-pと同じ)
-C
通信を圧縮してコピーする
-r
ディレクトリを再帰的に下ってまるごとコピーする(あまり
使わない→rsync
を使う)
rsync
- sshを利用した安全なリモートコピー
scp
は少数のファイルをコピーするのに使う。
ディレクトリごとまとめてコピーしたいときは rsync
が便利。ホスト1にある ~/foo
ディレクトリを
ホスト2の ~/hoge/foo にコピーしたいときには以下のようにする。
host1% rsync -auvzH ~/foo host2:hoge
ホスト1の方で更新されたファイルだけがコピーされる。
ホスト1の ~/foo
の下で消したファイルは
ホスト2のからも消したいときは --delete
オプションを
追加して、
host1% rsync -auvzH --delete ~/foo host2:hoge
とする。こうすることで、二つのホストの指定したディレクトリが 全く同じ内容になる。
ホスト2でのユーザ名が違うときは、host2:
の部分を「ホスト2でのユーザ名@host2:
」
とする。
ps
- 起動中プロセスの表示
% ps [オプション]
システム内で起動中のプロセスの情報を表示する。オプションは 多数。よく使うものは
a
全ユーザのプロセスを表示する。
u
資源使用率などの情報も表示する。
x
制御端末を持たないものも表示する。
w
132桁まで表示する。
ww
桁数制限なく表示する。
で、
% ps ux
% ps aux
% ps auxww
とすればよい。
top
- 上位プロセスの表示自動更新つき
top
を起動するとCPU使用率の高いプロセスが
表示され、(標準で)2秒ごとに情報が更新される。
kill
- プロセスの停止またはシグナル送信
% kill [-シグナル] プロセスID
指定したプロセスIDを持つプロセスにシグナルを送る。シグナルを
省略すると中断シグナルを送り、プロセスが終了する。
例:
% ps aux (プロセスIDを調べる) % kill 550 % ps aux (プロセスが消えたか調べる。残っていたらKILLシグナルを送る) % kill -KILL 550
シェルプロセスは中断シグナルでは終了しないようになっているので 止めたいときはKILLシグナルを送る。
diff
- テキストファイルの差分作成
% diff -u ファイル1 ファイル2
ファイル1とファイル2のunified diffを作成する。 バージョンがすこし違うテキストファイル同士を比較するために利用する。 ファイル1からファイル2で足された行には + 記号を、 削られた行には - 記号が付加して、どの行が変わったか分かりやすく示す。
生成された差分情報と、古い方のファイルに適用して新しいファイル に更新することができる。これには次のpatchを使う。
patch
- diff差分(パッチ)の適用
% patch < パッチファイル
手元に古いバージョンのテキストファイルと、更新情報を持った 差分ファイル(パッチファイル)があるときに、パッチファイルを元に テキストファイルを新しいバージョンに更新する。
diffとpatchは、次々と更新するファイルを色々な人に配布するときには 不可欠である。利用例を示す。
- Aさんは書いたプログラム(文書でもよい)をみんなに配った。
- Bさん、Cさん…が受け取った。
「10000行もあるや、すごいなあ」
- Aさんは少し修正した。
修正したものを全部送ったのでは無駄なので、差分のみを送ることにする。
% diff -u file.old file.new > file.diff
ファイルの中味は例えば以下のようになる。
--- file.old 2006-03-01 10:55:50.000000000 +0900 +++ file.new 2006-03-01 10:55:34.000000000 +0900 @@ -608,6 +608,8 @@ テキストファイルを新しいバージョンに更新する。</p> </ul> +<p>diffとpatchは、次々と更新するファイルを色々な人に +配布するときには不可欠である。利用例を示す。</p> <blockquote> <ol> <li> Aさんは書いたプログラム(文書でもよい)をみんなに配った。BさんとCさんは以下のように実行する。
% cd fileのあるディレクトリ % patch < file.diffこれで、手元のファイルが最新版になる。なおかつ、どこが変わったか目で 見て分かるので、いちいち全体を読み返さなくて済む。
→ 目次へ