UNIXの基本コマンド

提供: MacWiki
2009年1月17日 (土) 18:00時点における219.97.41.191 (トーク)による版

移動: 案内検索

UNIXターミナルで利用できる、代表的なコマンドを紹介します。 (⇒UNIX入門に戻る)

  • 他にはkillやpsですか?
  • パーミッションや chmod の解説もあれば良いですね。
  • 引数(オプション)とは?

man …各種コマンドのオンラインマニュアルを読む

例えば man man を実行すると man コマンドのマニュアルが表示される。 矢印キー(または j、k キー)で画面がスクロールする。q キーで終了。 なお、h キーを押すとキー操作法(less の操作法)が表示される。 基本的なものは g(ファイルの先頭へ移動)、G(ファイルの末尾へ移動)、SPACE(次の画面)、w(前の画面)など。 また、/ に続けて「文字列」を入力し enter キーを押すと「文字列」を検索する。 n と N でそれぞれ「次を検索」、「前を検索」する。

cd …ディレクトリ間を移動する

例えば cd ~/Documents を実行すると、カレントディレクトリが「Documents(書類)」に移動する。 また、直前にいたディレクトリに戻る cd - もよく使われる。 なお、引数を与えず cd を実行することは cd $HOME を実行したことと同値である。

ls …ディレクトリ内のファイル・ディレクトリ(のリスト)を表示する

例えば ls /usr/bin を実行すると、「/usr/bin」内にあるファイルが表示される。 標準では .bashrc のように . で始まるファイルは表示されないが、a オプションを付けると全てのファイル・ディレクトリが表示される(ex. ls -a ~)。 また、l(エル)オプションを付けると、ファイルサイズ等の詳細情報が表示される(ex. ls -al ~)。

cp …ファイルやディレクトリを複製する

ファイル hoge を複製するには cp hoge geho ようにする。 このとき、ファイル geho が既に存在する場合は上書きされる(それを抑制するオプションとして、i(yes/no で応答)、n(上書きしない)がある)。 geho がディレクトリの場合は、ディレクトリ geho の中にファイル hoge が同名で複製される。なお、ディレクトリを複製する場合は R オプションを付ける(cp -R Documents backup)。

mv …ファイルやディレクトリを移動する

mv hoge geho のように使う。geho が存在しない場合は hoge(ファイルでもディレクトリでもよい)を geho とリネームしたことになる。geho が(存在する)ディレクトリの場合、hoge が geho の中に移動する。geho が既に存在するファイルの場合(このとき hoge もファイルでなければならない)は上書きされる(それを抑制するオプションとして、i(yes/no で応答)、n(上書きしない)がある)。 なお、mv file1 file2 dir1 のようにして、複数のファイル file1 と file2 を一気にディレクトリ dir1 へ移動することも出来る。

rm …ファイルの削除 (正しくはファイル名削除)

rm hogeのように使う。Trashに移動する訳ではないので、削除したら回復できないと思った方がよい。実際にはデータはそのまま残っている。完全に削除したければsrmを使用する。 ハードリンクを利用してファイル名が複数ある場合は削除していないファイル名から参照できる。

mkdir …ディレクトリの作成

mkdir hogeで新規にディレクトリが作成できる。

rmdir …空ディレクトリの削除

rmdir hogeで空のhogeディレクトリが削除できる。rm -r hogeで再起的にファイルを消してディレクトリを削除できる。

more, less …標準出力の表示を抑制する(ページャー)

出力が 1 画面に収まらないような場合に、more や less を併用すると、最初の 1 画面分のみ表示され、SPACE キーや ENTER キーで続きが表示されるようになる。 例えば、gzip 圧縮されたテキストファイルを表示したり、たくさんのファイルがあるディレクトリのリストを表示する場合に、zcat file.txt.gz | morels -alF /usr/bin | more のようにして使う。 テキストファイルであれば more file.txt ように使うことも出来る。ただし、日本語が通らないので、別途 lv 等をインストールすることが推奨される。

  • less は環境変数 LESSCHARSET を utf-8 に設定すれば日本語が通るようです。ただし、行の折り返し部分で文字化けすることがあります。
  • lv : http://www.ff.iij4u.or.jp/~nrt/lv/
    • なお lv をコンパイルする際には、private byte *gz_filter = "gzcat"; (in stream.c) などとすると良いようです。("zcat" にするのではなくて)

gzip …ファイルを圧縮・展開(解凍)する

例えば gzip file.txt を実行すると、file.txt が圧縮され file.txt.gz という名前のファイルになる。 展開(解凍)するには、d オプションを付けて gzip -d file.txt.gz、あるいは gunzip コマンドを使って、gunzip file.txt.gz を実行する。

tar …書庫の作成・展開をする

複数のファイルやディレクトリをまとめて 1 つのファイルにしたり、それを元の状態に展開したりする。多くの場合、圧縮コマンド gzip や bzip2 と併用する。 例えば、ディレクトリ Documents(内のすべてのファイル・ディレクトリ)を丸ごと固めて gzip で圧縮するには tar -zcf mydoc.tar.gz Documents を実行する。gzip ではなく bzip2 で圧縮する場合は tar -jcf mydoc.tar.bz2 Documents を実行する(ファイル名や拡張子はもちろん何でもよい)。 逆に、展開するには tar -zxf mydoc.tar.gztar -jxf mydoc.tar.bz2 を実行する。なお、オプション引数において、x の代わりに t を使うと、(展開はされず代わりに)内容物のリストが表示される。なお、歴史的な経緯もあり、引数の - をなしで使うことも多い。

find …ファイルやディレクトリを検索する

基本形は「find 探す場所 -name 名前」。 例えば find /usr/local -name ptex を実行すると、/usr/local 内にある ptex という名前のファイル・ディレクトリを検索して表示する。また、-delete オプションを付けると、見つかったファイル(と空のディレクトリ)が削除される。例えば、find Documents -name .DS_Store -delete を実行すると、Documents 内にあるファイル .DS_Store がすべて削除される。

grep …ファイルの全文検索をする

例えば grep -irn hoge Documents を実行すると、「Documents」中から文字列「hoge」を含むファイルを検索して表示する。なお、i オプションは大文字・小文字を無視する(hoge のほか Hoge や HOGE も検索する)設定、r はサブディレクトリを検索する設定、n はファイル名だけでなく行番号も出力する設定。

  • Grep

http://www.joar.com/grep/index.html

diff …2つのファイル・ディレクトリを比較する

diff file1 file2 を実行すると file1 と file2 の差異を出力する。また、パッチファイルの作成にも用いられる。例えば、diff -c file1 file2 > mypatch のように実行する。生成されたパッチファイル mypatch を当てるには、patch コマンドを用いて、patch -b -p0 < mypatch のように実行する。このとき、(b オプションを付けたため)もとの file1 は file1.orig という名前でバックアップされ、file1 が file2 と同じ内容になる。

ソースコードツリー全体の差分をみる場合は -r オプションをつける。

diff -Ncr emacs.org emacs
diff -aurN old-dir new-dir
diff -cr FROM_DIRECTORY TO_DORECTORY > PATCH_FILE

ln …リンクを作成する

標準ではハードリンク(同じファイルに複数の名前を付ける)を作成し、s オブションを付けるとシンボリックリンク(ファイル名やディレクトリ名へのエイリアス)を作成する。例えば、source というファイル(またはディレクトリ)に target という名前のリンクを作成するには ln -s source target を実行する。注:普通はシンボリックリンクを使うと思いますが、ハードリンクとシンボリックリンクの違いについては Google で検索して下さい。

ハードリンクとシンボリックリンクの違い

ハードリンクは、ファイルの実体への参照を新たに作成します。ハードリンクされたファイルは参照カウントが増加し、参照しているファイル名を全て消さない限りファイルが消えることはありません。また、ファイルの実体を記憶しているため、どちらかを移動しても参照情報が残ります。シンボリックリンクは、ファイル名へのパス(絶対、相対を選択可)参照を新たに作成します。シンボリックリンクを削除しても元のファイルが消えることはありませんが、ファイルを消したり、移動したりするとシンボリックリンクがファイルを参照できなくなります。Finder から作成するエイリアスは、シンボリックリンクの要素が強いですが、ファイルの移動を追跡できるなどより柔軟な構造になっています。

エイリアス シンボリックリンク ハードリンク
元ファイルの移動 ×
元ファイルの削除 × ×
リンクの移動 ×(絶対パスは○)
元ファイルを消して新たなファイルを作成 ×
ディレクトリへのリンク ×
UNIXコマンド(cd/cp/find等)対応 ×

cat …ファイルの中身を出力する

他のコマンドと併用することが多いが、 cat ~/.bashrc のように比較的短いファイルの中身を覗くのに使える。 また、編集の必要がないような簡単なメモをターミナル(Terminal.app)上で作成する場合、cat > memo.txt を実行し、数行のメモを入力した後、Ctrl+c で終了すれば記述した内容が memo.txt に保存される。

ヒアドキュメント?

cat <<END > test.txt
a
END

tr …文字を置換する

基本的な使い方は tr A B(A を B に置換)と tr -d X(X を削除)。 例えば、tr -d "¥n" < file.w > file.m を実行すると、Windows で作った(標準的な)ファイル file.w(Shift_JIS/CR+LF)の行末コードを CR に変換したもの(つまり標準的な MacOS ファイル)が file.m として作成される(cat コマンドと併用して、cat file.w | tr -d "¥n" > file.m を実行したことと同等)。 また、tr "[:lower:]" "[:upper:]" < file.txt を実行すると、file.txt の中身の小文字を全て大文字に変換したものが出力される。試しに、ls | tr "[:lower:]" "[:upper:]" を実行してみるとこのコマンドの意味が分かるであろう。

行末コード変換色々

(Win -> Mac ) : tr -d "¥n" < file.w > file.m
(Win -> Unix) : tr -d "¥r" < file.w > file.u
(Mac -> Unix) : tr "¥r" "¥n" < file.m > file.u
  • tr のこの用法は Win → Unix の変換ですね。他の改行コードの変換はどうするのでしょう?
    • 上にまとめました。多分 tr では CR+LF への変換は出来ないのではないかと思いますので、やはり nkf 等を使うのが普通でしょう。どうしても Mac OS X に付属のコマンドで実行したい場合は awk、perl、sed 等を使います。(例 sed 's/\r/\r\n/g' < file.m > file.w)
  • nkf -Lw などで改行コードが変換できますよね。

iconv …文字コードを変換する

l(エル)オブションを付けて iconv -l を実行すると、利用可能な文字コードの一覧が表示される。主なものは UTF-8(or UTF8)、EUC-JP(or EUCJP etc)、SHIFT_JIS(or SJIS etc)。 例えば、iconv -f SHIFT_JIS -t EUC-JP file.w を実行すると、Windows で作った(標準的な)ファイル file.w(Shift_JIS/CR+LF)を EUC に変換した結果が出力される。文字コードの部分は小文字でもOK。 ただし、iconv に行末コード変換機能はないので、(標準的な)UNIX 用ファイル file.u(EUC/LF)へ変換するには、tr コマンドと併用して iconv -f SHIFT_JIS -t EUC-JP file.w | tr -d "¥r" > file.u を実行しなければならない。文字コードや行末コードの変換には別途 nkf や qkc をインストールすることが推奨される。

UTF-8(or UTF8)の他に UTF-8-MAC(or UTF8-MAC)というエンコーディング形式があります。これはおそらく、Mac OS X のファイルシステムで使われている NFD 形式の Unicode だと思われます。(※)ls の出力をパイプで利用するときは、utf8-mac を使って ls | iconv -f utf8-mac -t euc-jp | ... としましょう。

sudo …superuserでコマンド実行

sudo hoge で root 権限でコマンド hoge を実行する。ソフトのインストール時などに用いる管理者用のコマンドである。パスワードの入力が必要。rootのパスワードではないので複数の管理者がいる環境ではパスワードの管理が楽。パスワードを入力してからしばらくはパスワードの入力を求められない。sudo -sでほぼsuと同様?

file …ファイルの情報を表示

$ file a.out
a.out: Mach-O 64-bit executable x86_64
$ 

そのほか

MacOSX の zcat は .gz を伸張しないようです。( gzip -dc もしくは gzcat を用いると可能のようです)

  • MacOSX 10.4 の下で試してみたのですが下記のようになりました。(MacOSX 10.5 も同様)
$ zcat file.obs.gz
zcat: file.obs.gz.Z: No such file or directory
$ lv file.obs.gz
zcat: file.obs.gz.Z: No such file or directory
    • zcat は .Z のみを伸張するのが本来のようです。しかしこれでは不便なので .gz も伸張できるようにさせていることが多くの通例になっているようです。(ということはMacOSX 10.4は通例派ではなくて本来派?)
    • 10.3.9 では .gz を指定しても動作しますので、バグとみなした方がよさそうです。man page にも使えると書いてありますね。-- saiki

Wiki内の関連ページ