Macを使い始めたらとりあえずは覚えたい12のUNIXコマンド

MacといったらUNIX、UNIXといったらターミナル、ターミナルといったらスティーブ・ジョブ郎ですがみなさんおげんこ?
さて、ターミナルがどんだけのもんじゃい!プンスコ!と思われる方もいらっしゃるとは思いますが、僕がよく聞くのは「いやぁ、ターミナルを使うようになってからとはいい、女子にはモテモテだわ、ギャンブルは連勝だわ、仕事はうまくいくわで最高です!(キリッ」っていう喜びの声ばかり☆便利万歳!ラーメン大好き!つけめんよりラーメンが好き!
つーことで早稲田のターミナ郎こと僕が数あるUNIXのコマンドの中から「とりあえずこれ覚えておけばバレンタインもクリスマス怖くないっ!」っていうものを12個程チョイス!これをきっかけにお風呂はちゃんと入れよな!
お作法(構文)
コマンドの構文は、基本的に「コマンド」「オプション」「引数」の組み合わせで次のパターンがあるよ。
- コマンドのみ
- コマンド + オプション
- コマンド + 引数
- コマンド + オプション + 引数
4番目の構文なんだけど、「オプション」と「引数」の順番は必ず「オプションが先」になるよ。それとこれらは全部「半角スペース」で区切るんだ。
コマンドは打ち込んだら return(またはenter)キー を押して実行するよ。
画面の説明
重要なのは下図でいう「カレントディレクトリ」を示す部分で「現在の場所」を示しているよ。
ターミナルを立ち上げた直後はホームディレクトリがカレントディレクトリになっているよ。ホームディレクトリは「~:チルダ」で表され、~ (チルダ)はホームディレクトリへのエイリアスにもなっているよ。

※ちなみにルートディレクトリは「/:スラッシュ」で表す事ができ、/ (スラッシュ)はルートディレクトリへのエイリアスにもなっているよ
コンピュータ名、ユーザ名はわかるよね?それともう一つ、「プロンプト」っつぅーのがあるけど、これは「システムがコマンドの入力を待機している状態」を表す記号だよ。今か今かとチミのミラクル☆コマンドを入力されるのを待ってるんだ(キリッ
pwd (print working directory):作業(カレント)ディレクトリを出力
pwdは「現在の作業ディレクトリ」をルートディレクトリからのパスの形で出力するよ。(下のサンプルでは結果がわかりやすいように色を変えてあるよ!)

cd (change directory):作業(カレント)ディレクトリの変更
pwdコマンドをいろいろな場所で試す為にも、ディレクトリの移動が出来るようになりたいところだよね。そこで cd コマンドだよ。
引数には「ルートディレクトリからの位置を指し示す絶対パス」や「現在の作業ディレクトリからの位置を指し示す相対パス」で指定するよ。

絶対パスと相対パス
/ はルートディレクトリで、UNIX系OSに於ける最上位のディレクトリだよ。その / から指定したパスは絶対パスってことになるよ。
例えば、Applicationディレクトリは /Application/、ホームディレクトリは /Users/chrowa3/で絶対パス指定ってことになる

これに対し、相対パスは . (ピリオド)や、 .. で表し、 ./ はカレントディレクトリを表し、現在の作業ディレクトリになるよ。
../ はペアレントディレクトリを表し、相対的な上階層を意味するよ。下図は、ホームディレクトリから見たApplicationディレクトリへのパスを絶対パス、相対パスで指定したサンプルだよ。

tab補完:入力補完と入力候補表示
bashでは、補完対象が一つに絞り込める場合は、コマンドやパスの入力途中でtabキーを押すと入力補完が行われるよ。もし一つに絞り込めない場合は、もう一度押すと入力した文字の時点での入力候補がリスト表示されるんだ。便利だね!
補完の例1

補完の例2

ls (list segments):ファイルの一覧を表示
これまでのコマンドで現在の位置を確認することや、作業(カレント)ディレクトリの変更が理解できた!でも「何があるのか・どれに変更するのか」ってのがわからない状態。これはファイルの一覧を表示することで解決だよ
ls コマンドにはただの一覧表示だけでなく様々なオプションをつける事によって表示方法や表示内容が変わるよ。ここでは全部の例やオプションを網羅するのを割愛させていただいて、よく使うようなオプションを纏めてみた。
| ls オプション | |
| オプション | 説明 |
| ls -a | 隠しファイルを含めたファイル全て表示 |
| ls -l | ファイルの詳細も表示 |
| ls -F | ファイルタイプを表す記号をつけて表示 ※ディレクトリにはファイル名の最後に/(スラッシュ)がつく |
| ls -R | サブディレクトリの中身も表示 |

※オプションは複数指定する事もできるお
chmod (change mode):ファイルモードを変更する
chmod ではパーミッションの設定が変更できるよ。パーミッションとは「ファイルやディレクトリに対してのユーザやらグループが持つ権限」のことでこれによって行える操作が変わってくるよ。
パーミッションの設定についてはちょっとした事を覚える必要があるよ。下部の画像では、lsコマンドでオプションに l (エル)を指定。詳細情報を表示してみたんだけど、左側の drwxr-xr-x がパーミッションを示しているよ。今回はこの例で言う huga ディレクトリに焦点を当てていくことにするよ

このパーミッションの値の見方は下図の左上を見てくだせぇ。hugaディレクトリのパーミッション、 drwxr-xr-x でいうと一番左の文字はファイルの種類を表していて、d はディレクトリを表しているよ。テキストファイルなどの通常のファイルは – (ハイフン)で表示されているよ。

ファイルの種類を示す部分の後からは3文字ずつでユーザーの種類が違っていて、最初の3つが「User」で、次の3つが「Group」、最後の3つが「Other」を示しているよ。それぞれの説明は(b)をみてね
ではhugaディレクトリ、 drwxr-xr-x のUserの部分を見てみよう。Userは rwx となっているよね。それぞれの文字は意味を持っているよ。
r は Readable(読み込み許可)、w は Writable(書き込み許可)、x は eXecutable(実行許可)で、Userに対してこのhugaディレクトリは、読み込みも、書き込みも、実行も許可されていることになるよ。それぞれの値の意味は(a)で確認してね
こっからやっと、コマンドのお話だよ。コマンドの基本的な構文は以下の通り。ファイルの指定の前に3つの部位からなる文字(記号)で構成されるよ
chmod [Reference][Operator][Mode] file ...
Reference は「ユーザーの種類(d)」、Operator は「設定の種類(c)」、Mode は「モードの種類(a)」を表しているよ。(かっこの文字は上記の画像と照らし合わせてね)
じゃあ、実際に huga のパーミッションを弄ってみよう。今回は huga の group に w を付与してみた。
chmod g+w huga

実際に意味がわかっているととても簡単だね。FTPクライアントとかでもよく見るあの文字列はこういう意味だったんだね。
またパーミッションは数字でも設定できるよ。もういちど以下の画像を確認してみて欲しいんだけど、右下の(f)の部分にあたるところで、パーミッションの種類のそれぞれに r は 4 、w は 2 、x は 1 といったように数字が割り振られているよね。この数字の簡単な足し算でも設定できるんだ。

例えば、読み込みと書き込みを許可しようと思ったら、4 + 2 で 6 、全部許可しようと思ったら 4 + 2 + 1 で 7 といったように、足し算をして User、Group、Other の順で並べればよい。hugaはさっきの変更で rwxrwxr-x になっているので数字で言えば 775 ということになるね。ではいったん huga を元に戻して、再度数字で設定してみるお。

わーいやったー!さっきの状態になったー☆
てことで chmod の部分だけでダイブボリューム割いちゃったので、最後にオプションの表載っけとく。
| chmod オプション | |
| オプション | 説明 |
| chmod -f | パーミッションの変更できないファイルを指定してもエラーが発生しないようにする。変更自体は行われない |
| chmod -R | 対象をディレクトリにした時に、その中に含まれるファイルやディレクトリ全てもパーミッションを変更させる |
mkdir (make directory):ディレクトリを作成する
mkdir ではディレクトリを作成する事ができるよ。ディレクトリ作成時には「パーミッションの設定」や「経由する中間のディレクトリの作成」をオプションで設定できるよ。
-pv オプションでは創りたいディレクトリを経由するディレクトリの作成を同時に行いつつ、結果を表示する。

-m オプションではパーミッションを設定しつつディレクトリを作成する。

rm (remove):ファイルを削除する
rm はファイルを削除するコマンドだよ。ディレクトリの削除にはオプションを指定するよ。
rmdir でもディレクトリは削除できるけど、rmdir はそのディレクトリがなにかのデータを含んでいると削除できないちょっと融通のきかないコマンドなの。ってことで、rm が使えるようになればいいって寸法ってワケ!
| rm オプション | |
| オプション | 説明 |
| rm -f | 警告、エラーを発生させずに存在する対象を削除 |
| rm -i | 削除するかを(ユーザに)問い合わせながら削除 |
| rm -r | 指定したディレクトリを中身ごと削除 |
| rm -v | 削除後、処理した内容を表示 |

find:ファイル(ディレクトリ)を検索する
find はファイルやディレクトリを検索するコマンドだよ。このエントリでは、ごく簡単な使い方を載っけるよ
とりあえず構文
find [検索対象ディレクトリパス] -name filename
次のサンプルでは、hoge ディレクトリがカレントの状態で、そのディレクトリ配下から拡張子txtのつくファイルを検索し、-ls オプションにて検索結果の詳細表示をするっていう例だよ

find コマンドでの注意点として、-name オプションで対象ファイル名指定する際、* (アスタリスク)などのメタ文字を使用する際には ” (ダブルクォーテション)で囲みましょう!もうメッタメタよメッタメタ☆
* (アスタリスク)はワイルドカードとも呼ばれ、「ファイル名」を忘れちゃった時に便利な「どんな文字列にもマッチする魔法の記号」だと覚えちゃってくださいな。
findコマンドのちょっと高級な使い方はグーグル先生にでも聞いて!
grep:テキストファイル中から正規表現に一致する行を検索して出力
grep は一言でいえばファイル内検索。探したい文字列を正規表現で指定し、対象ファイル(ディレクトリの捜査もできるよ)から探してくるコマンドだよ。
正規表現がわからない方は、この機会に勉強してみるのもありだよね!正規表現超大事!大事盛り沢山!あーラーメン食べたい。あーラーメン、つけ麺はいいや、ラーメンがいい
さしあたり、このエントリでは正規表現とかそういうエロいのは抜きにして「検索したい言葉がバッチシ定義されている前提」での検索をしてみるよ///
とりあえず、構文いっとくか!
grep [option][pattern][file1]..
ついでによく使うオプションとかもぺろっちゃう!
| grep オプション | |
| オプション | 説明 |
| grep -n | 行番号を出力 |
| grep -R | 検索対象をファイルではなく、ディレクトリにした場合に指定したディレクトリ配下全てのテキストファイルを捜査する |
以下のサンプルは、デスクトップのhogeディレクトリにある全てのファイルから tsukemen という文字列を含むファイルを探し、そのパスと行番号を表示されるという例だよ


cp (copy):ファイルやディレクトリの複製をつくる
お構文
cp [option] Source Target
Sourceがコピー元で、Targetがコピー先だよ。よく使うオプションは以下の通り
| cp オプション | |
| オプション | 説明 |
| cp -f | コピー先に既に同名のファイルがあったとしても、ユーザへの確認無しにコピーが行われる(厳密にはコピー先のファイルの削除を試みる) |
| cp -i | コピー先に同名のファイルがあった場合に、ユーザへの確認をおこなう |
| cp -r | ディレクトリをまるごとまるっと複製したいときはこのオプション |
サンプル

mv (move files):ファイルやディレクトリを移動、名前変更
お構文
mv [option] Source Target mv [option] Source Path
Sourceが移動(名前変更)する元ファイル(ディレクトリ)で、Targetが変更したい名前、Pathが移動先だよ
| mv オプション | |
| オプション | 説明 |
| mv -f | 移動先に既に同名のファイルがあったとしても、ユーザへの確認無しに上書きが行われる |
| mv -i | 移動先に同名のファイルがあった場合に、ユーザへの確認をおこなう |
サンプル

history:入力したコマンドの履歴を表示
history
history コマンドでは入力履歴を表示できるよ。

man (manual):コマンドの詳しい使い方を見る
man [command]
man コマンドではコマンドのマニュアルが表示できるよ



