シェルの基本的な使い方

シェルとは、命令を読み込んでコマンドを実行するプログラムです。 ほとんどのコマンドは、シェルの外部にあるプログラムを呼び出します。 コマンドが使えるかどうかはマシンや環境に依存するので、 あるマシンで使えたコマンドが別のマシンでは使えないという状況が多々あるということに注意してください。 以下に、基本的なコマンドを抜粋しておくので、参考にしてください。 実際に実行する際には、引数を適切に与える必要があります。 引数を渡すには、空白区切りでコマンド名に続けて入力します。

プログラムを強制的に終了させるには、『[Control]-c』とタイプします。 『[Control]-z』だと、プログラムは中断されますが、終了しません。

mkdir ディレクトリを作る。
cp ファイルをコピーする。
mv ファイルの名前を変更したり、ファイルを移動したりする。
rm ファイルを削除する。
rmdir ディレクトリを削除する。ディレクトリの中身は空でなければならない。
cd 現在のディレクトリを変更する。
ls ディレクトリの中身をリストアップする。
cat ファイルの内容を表示する。
less ファイルの内容を見易く表示する。
w3m ウェブページを表示する。ファイルの内容を見易く表示する。
man コマンドのマニュアルをlessを使って表示する。 Cの関数の説明を見ることもできる。
echo 引数を表示する。
date 現在の時刻を表示する。
tee 入力をファイルに保存しつつ表示する。
diff 2つのファイルの違いを表示する。
grep 特定のパターンが含まれる行をファイルから抽出し、表示する。
ed テキストファイルを編集する。
vi 視覚的なテキストエディッタを起動する。中でedのコマンドが使える。
sed 入力をフィルタして出力する。
sort 入力をソートして出力する。
wc テキストファイルの文字数を数える。
time コマンドの実行時間を測定する。
ps 実行中のプロセスを表示する。
top プロセスの実行状況をリアルタイムに表示する。
kill 実行中のプロセスを停止させる。
cc Cのコードをコンパイルする。
zip ZIPアーカイブを作る。
unzip ZIPアーカイブを解凍する。

grepsortでは、 引数でファイル名を指定した場合には、そのファイルの内容に対して、 指定しなかった場合には、標準入力に対して操作が実行されます。 テキストを操作するコマンドの多くは、このような挙動をするように設計されています。

コマンド名として絶対パスまたは相対パスでプログラムを指定すれば、 任意のプログラムを実行させることができます。 ただし、現在のディレクトリにあるプログラムを指定するときには、 頭に「./」をつけなければなりません。

コマンドと引数のみの簡単な命令以外に、シェルでよく使う構文を紹介します。 構文の構成要素を赤く表示しておくので、適当に応用してください。 デバッグ中に何度も同じ入力をする場合や、 入力や出力のサイズが大きい場合に便利です。

input.txtの内容を入力として、 ./progを実行する。

./prog arg < input.txt

./progを実行し、その出力をoutput.txtに書き込む。 (output.txtが実行前から存在する場合、その内容は失われる。)

./prog arg > output.txt

./progを実行し、その出力をlog.txtの末尾に付け足す。

./prog arg >> log.txt

ccを実行し、そのエラー出力をerror.txtに書き込む。

cc -Wall -o prog prog.c 2> error.txt

input.txtgrepし、 その出力を入力として、./progを実行する。

grep 'something' input.txt | ./prog

以上で構文の紹介は終わりですが、 競合しない構文は複数同時に使用することもできます。 この場合、「|」は「>」や「<」 よりも結合力が弱いものとして解釈されます。 例えば、以下の命令は、input.txtを入力として、./progを実行し、 その出力をソートしてoutput.txtに保存します。

./prog arg < input.txt | sort -c > output.txt

また、「|」は多段に実行することもできます。 以下では、./progの出力をソートし、重複を省いた上で行数を数えます。

./prog arg | sort | uniq | wc -l