UNIXコマンドとは
まずはここから
UNIXとUnix系OS
UNIXは,1969年ごろにAT&Tのベル研究所でケン・トンプソンとデニス・リッチーらによって開発されたOSである.その後,多くの派生OSが生まれ,現在ではLinuxやmacOS,FreeBSDなど,UNIXの設計を受け継いだOSが広く使われている.これらはまとめてUnix系OS(Unix-like OS)と呼ばれる.
UNIXコマンドとは,こうしたUnix系OSで使われる,ファイル操作やテキスト処理などを行うための小さなプログラム群のことである.多くのコマンドはPOSIXという規格で仕様が定められているため,LinuxでもmacOSでも基本的には同じように使える.ただし,オプションの細かい挙動は実装(Linuxで主に使われるGNU版か,macOSなどのBSD版か)によって異なることがある.
シェルとコマンド
コマンドは,ターミナル上で動くシェルと呼ばれるプログラムを通して実行する.シェルはユーザーが入力した文字列を解釈し,対応するプログラムを起動して結果を表示する.代表的なシェルにはbash,zsh,fishなどがある.
コマンドには大きく分けて2種類ある.
- 外部コマンド:
/binや/usr/binなどに置かれた独立した実行ファイル.lsやgrepなど,多くのコマンドはこちらである - 組み込みコマンド:シェル自体に組み込まれているコマンド.
cdのように,シェル自身の状態(カレントディレクトリなど)を変更する必要があるものはこちらになる
あるコマンドがどちらなのかは type で確認できる.-a(all)を付けると,同じ名前で見つかるものをすべて表示する.
$ type cd
cd is a shell builtin
$ type ls
ls is /bin/ls
コマンドの基本的な書き方
コマンドは一般に次の形で入力する.
コマンド名 [オプション] [引数]
オプションはコマンドの動作を変えるもので,-r のようにハイフン1つと1文字で書く短い形式と,--recursive のようにハイフン2つで単語を書く長い形式がある.短い形式の多くは長い形式の頭文字になっていて,-r なら recursive(再帰的)を表す.短い形式は -l -a を -la のようにまとめて書けることが多い.なお,長い形式は主にGNU版で使えるもので,BSD版(macOS)では使えないことがある.
引数には,操作の対象となるファイル名などを渡す.
パイプとリダイレクト
UNIXには「1つのことをうまくやる小さなプログラムを作り,それらを組み合わせて使う」という設計思想がある.これを支えるのがパイプとリダイレクトである.
多くのコマンドは,標準入力からデータを受け取り,標準出力に結果を書き出し,エラーは標準エラー出力に書き出す.パイプ | を使うと,あるコマンドの標準出力を次のコマンドの標準入力につなげられる.
# ファイル一覧のうち "log" を含む行だけを表示する
$ ls -l | grep log
リダイレクトを使うと,入出力の先をファイルに切り替えられる.
>:標準出力をファイルに書き込む(既存の内容は上書きされる)>>:標準出力をファイルの末尾に追記する<:ファイルの内容を標準入力として渡す2>:標準エラー出力をファイルに書き込む
$ ls > files.txt # 一覧をファイルに保存
$ echo "hello" >> memo.txt # 末尾に追記
$ sort < data.txt # ファイルを入力にして並べ替え
最後に
今日TA業務で参加した授業で学部1年の子たちがUNIXコマンド勉強しててノスタルジックって感じでした.懐かしいな〜,学生生活ももうすぐ終わりです.