第1章 1-5 / ファイル操作の基本

困ったときの調べ方

このページで叩くコマンドと到達点

前提:1-4が完了し、ホームディレクトリにいる状態から始めます(~/practiceは空のままです)。ここまで10個以上のコマンドとオプションを覚えてきましたが、正直これから先すべてを暗記する必要はありません。Linuxには「コマンド自身に聞けば教えてくれる」仕組みが標準で備わっているからです。このページではman--helpwhichtypewhatisaproposという、いわば「調べ方を調べる」コマンドを練習します。

このページではSET 1〜3、合計30行のコマンドを上から順に叩きます。手打ち推奨(コピーは確認用)です。~/practiceは使いません。

SET 1 ― manで正式なマニュアルを読む

ubuntu@lightsail: ~
  1. $man ls
  2. (スクロール中の画面。q を押すと元のターミナルに戻る)
  3. $man cp
  4. $man man
  5. $man 5 passwd
  6. $man 1 passwd
  7. No manual entry for passwd in section 1
  8. $man passwd
  9. $man -k rm
  10. $man mkdir
  11. $man touch
  12. $man 8 useradd
解説 ― SET 1 で何をしたか

1行目のman(manualの略)は、コマンドの公式マニュアルを表示するコマンドです。man lslsの正式な説明書が開き、lessと同じページャで表示されるため、下スクロールはスペース、終了はqキーです。1-4でlessの抜け方を練習したのはこのためでもあります。最初は英語で面食らうかもしれませんが、NAME(概要)・SYNOPSIS(書式)・DESCRIPTION(説明)・OPTIONS(オプション一覧)という決まった構成で書かれているので、まずはOPTIONSだけ拾い読みする、という付き合い方で十分です。

2行目のman cpで別のコマンドのマニュアルも開いてみます。3行目のman manは「マニュアルコマンド自身のマニュアル」を読むという、少し面白い一手です。4行目のman 5 passwdのように数字を挟むと、マニュアルセクション※1を指定できます。passwdという名前は「パスワードを変更するコマンド」(セクション1)と「/etc/passwdファイルの形式の説明」(セクション5)の2つの意味で登録されており、5行目のように誤ったセクションを指定すると出力例のように見つからずエラーになります。6行目のようにセクション番号を省略すると、番号の若い方から順に検索して見つかったものを表示します。

7行目のman -k rm(keywordの意味)は、コマンド名がわからなくても、キーワードを含むマニュアルを横断検索してくれる機能です。rmという文字列を含む説明が並んで表示され、関連コマンドを見つける手がかりになります。89行目のman mkdirman touchは、1-2で覚えたコマンドの正式なマニュアルを実際に読んでみる練習です。手を動かして使えることと、マニュアルを正式に読めることは別のスキルなので、知っているコマンドほど読んでおくと知らなかったオプションに気づけます。

10行目のman 8 useraddは、セクション8(システム管理用コマンド)の例です。useradd(ユーザーを追加するコマンド)は一般ユーザーが日常的に使うものではなく管理者向けなので、セクション1ではなくセクション8に分類されています。第2章でユーザー管理を学ぶときに、このuseraddが再び登場します。

POINT

manの画面から抜けるのはいつもqキーです。全部読もうとせず、OPTIONSの欄だけ拾い読みする「辞書引き」の感覚で十分に使えます。

ゆみちゃん
ゆみ

ここまでのページでエラー見て焦った人、実は全然大丈夫だよ! Linuxのエラーって「ここが違うよ」って教えてくれる親切なメッセージなんだよね。エラーは敵じゃなくて、次にやることを教えてくれるヒント。manや次のSETで出てくる--helpに聞けば大体解決するから、赤い文字にびびらなくて平気!

SET 2 ― --helpとwhich/typeで素早く調べる

ubuntu@lightsail: ~
  1. $ls --help
  2. $mkdir --help
  3. $cp --help
  4. $which ls
  5. /usr/bin/ls
  6. $which cat less man
  7. $which nonexistcmd
  8. $type ls
  9. ls is aliased to 'ls --color=auto'
  10. $type cd
  11. cd is a shell builtin
  12. $type mkdir
  13. mkdir is /usr/bin/mkdir
  14. $rm --help
解説 ― SET 2 で何をしたか

13行目の--helpは、manよりも手短にオプションの一覧だけを知りたいときに使います。manがページャで開く読み物形式なのに対し、--helpはコマンド名の直後に付けるだけでその場にオプション一覧をパッと表示し、qを押す必要もありません。ちょっとした確認には--help、じっくり読みたいときはman、と使い分けると効率的です。

4行目のwhichは、そのコマンドの実体(プログラム本体)がファイルシステムのどこに置かれているかを調べます。出力例のようにls/usr/bin/lsという場所にある実行ファイルだとわかります。5行目のように複数のコマンド名を並べて一度に調べることもできます。6行目のように存在しないコマンド名を指定すると、whichは何も表示せずに終わります(見つからなかった、という意味です)。

7行目のtypewhichとよく似ていますが、より詳しい正体を教えてくれます。出力例のようにlsは実はls --color=autoというエイリアス※2(別名の短縮コマンド)として登録されており、ファイル名によって自動で色分け表示する設定が仕込まれています。8行目のtype cdのように、cdwhichでは実体ファイルが見つからず、出力例のとおりshell builtin(シェルに内蔵された組み込みコマンド)であることがtypeだとわかります。エイリアスは第6章で自分でも作ってみます。

9行目のtype mkdirを見ると、lsのエイリアスともcdの組み込みとも違う3つ目のパターンとして、mkdir is /usr/bin/mkdirという実体ファイルの場所がそのまま返ってきます。これはwhich mkdirで調べたときとほぼ同じ結果で、mkdirにはエイリアスも組み込みの特別扱いも無いことがわかります。10行目のrm --helpで、SET 1から練習してきた--helpをもう一度使い、man--helpのどちらも自分の手で呼び出せる状態にしてこのSETを締めくくります。

POINT

whichは「実体ファイルの場所」、typeは「エイリアスか組み込みかも含めた正体」を教えてくれます。迷ったら情報量の多いtypeを使うのがおすすめです。

SET 3 ― whatisとaproposで概要をつかむ

ubuntu@lightsail: ~
  1. $whatis ls
  2. ls (1) - list directory contents
  3. $whatis cp mv rm
  4. $whatis passwd
  5. $apropos copy
  6. $apropos "list directory"
  7. $apropos zzzznocommand
  8. zzzznocommand: nothing appropriate.
  9. $man -k directory
  10. $whatis mkdir
  11. $whatis rmdir
  12. $apropos "remove empty"
解説 ― SET 3 で何をしたか

1行目のwhatisは、コマンドが何者かを1行だけで要約してくれます。出力例のls (1) - list directory contentsのように、「セクション番号(このコマンドはマニュアルの何番に載っているか)」と「一言説明」がセットで返ってきます。manで全文を読む前に、まずwhatisで「これは何のコマンドだったか」を思い出す、という使い方が便利です。2行目のように複数のコマンドを一度に調べることもできます。3行目のwhatis passwdでは、SET 1で見たpasswdの2つの意味(コマンドとファイル形式)が両方とも一覧で返ってきます。

4行目のaproposは、コマンド名そのものではなくやりたいことの単語から関連コマンドを探せる機能です。apropos copyで「コピー」に関係するコマンド一式が見つかります。5行目のように、スペースを含む語句は引用符で囲んで検索します。6行目のように該当が無ければ、出力例のとおりnothing appropriate(該当なし)と返ってくるだけで、これもエラーではなく正常な応答です。7行目のman -k directoryのように、実はaproposman -kは同じ機能の別の呼び出し方で、どちらを使っても結果は同じです。1-5冒頭のSET 1で使ったman -k rmもこれと同じ機能でした。

89行目のwhatis mkdirwhatis rmdirのように、対になっているコマンドを並べて調べると、それぞれの役割の違いが1行の要約だけでも見えてきます。10行目のapropos "remove empty"のように、コマンド名を忘れてもやりたいこと(空のディレクトリを消す)を言葉にして検索すれば、rmdirにたどり着けます。

コマンド名を忘れたらapropos、コマンド名はわかるが何をするか一言で思い出したいならwhatis、じっくり全部読みたいならman、その場でオプションだけ見たいなら--help。この4つの使い分けができれば、知らないコマンドに出会っても自力で調べて突破できるようになります。

ゆみちゃん
ゆみ

正直に言うと、現場のエンジニアもコマンドを全部暗記なんてしてないよ! 「なんかコピーするコマンドあったよな」ってレベルの記憶からでも、apropos copyで十分たどり着けるの。覚えるべきは正解そのものより「調べ方」。このページの内容はマジで一生モノだよ。

まとめ

1-5では、コマンドを暗記していなくても自力で調べられるようになるための道具をひととおり体験しました。エラーやわからないコマンドに出会うことは、ここから先も何度もあります。そのたびにこのページの内容へ戻ってきてください。このページで叩けるようになったコマンドを一覧にまとめます。

コマンド何をするか覚え方
man <コマンド>正式なマニュアルを表示する(qで終了)manual(取扱説明書)
man N <名前>指定したセクション番号のマニュアルを開くN=1はコマンド、N=5は設定ファイル形式など
<コマンド> --helpその場でオプション一覧を手短に表示するhelp(助けて)
which <コマンド>実体ファイルの場所を調べるwhich(どれ、どこにある)
type <コマンド>エイリアス/組み込み等も含めた正体を調べる種類(type)を教えて
whatis <コマンド>コマンドの概要を1行で要約するwhat is(これは何?)
apropos <単語>やりたいことの単語から関連コマンドを探すふさわしい(apropos)ものを探す

次のページ「1-6. 履歴とショートカット」では、これまで叩いてきたコマンドをhistoryで振り返り、!!!番号、Ctrl+Rなどのショートカットで入力を高速化する方法を学び、第1章のまとめに入ります。

脚注 ─ 用語解説
  1. マニュアルセクション … Linuxのマニュアルは1〜8の番号で分類されており、1は一般コマンド、5は設定ファイルの形式、8は管理者用コマンドなどに分かれる。同じ名前でも番号が違えば別の説明が存在することがある。
  2. エイリアス … 長いコマンドや、よく使うオプション付きのコマンドに、短い別名を付けて呼び出せるようにする仕組み。第6章「エイリアスとプロンプト設定」で自分で作る方法を学ぶ。