Linuxコマンドの操作方法を説明します。前回は,ファイルやディレクトリの操作,コマンド履歴や入力補完を紹介しました。今回はコマンドを実行するときに知っておくべき,パス指定,ユーザー権限,パーミッションを中心に説明します。

 前回に引き続き,Linuxコマンドの操作方法を説明します。前回は,ファイルやディレクトリの操作,コマンド履歴や入力補完を紹介しました。

 今回はコマンドを実行するときに知っておくべき,パス指定,ユーザー権限,パーミッションを中心に説明します。

コマンドとパス

 ユーザーがコマンドを入力して[Enter]キーを押すと,コマンドが実行され,処理結果が表示されます。コマンド入力を受け付けて処理を実行するプログラムを「シェル(shell)」といいます。

 UbuntuやFedoraをはじめとする多くのLinuxディストリビューションでは,「bash」というシェルが標準的に使われています。

 コマンドには,bash自体に内蔵されている「組み込みコマンド」と,実行ファイルとしてシステム内に存在している「外部コマンド」があります。外部コマンドの多くは実行プログラムであり,/bin(図1),/sbin,/usr/bin,/usr/sbinといったディレクトリに格納されています。

$ ls /bin
bash          df             loadkeys        ping        touch
bunzip2       dir            login           ping6       true
bzcat         dmesg          ls              ps          ulockmgr_server
bzcmp         dnsdomainname  lsmod           pwd         umount
bzdiff        echo           lspci           rbash       uname
bzegrep       ed             mkdir           readlink    uncompress
bzexe         egrep          mknod           rm          vdir
bzfgrep       false          mktemp          rmdir       which
bzgrep        fgconsole      more            rnano       zcat
bzip2         fgrep          mount           run-parts   zcmp
bzip2recover  fuser          mountpoint      sed         zdiff
bzless        fusermount     mt              setpci      zegrep
bzmore        grep           mt-gnu          setupcon    zfgrep
cat           gunzip         mv              sh          zforce
chgrp         gzexe          nano            sh.distrib  zgrep
chmod         gzip           nc              sleep       zless
chown         hostname       nc.traditional  stty        zmore
cp            ip             netcat          su          znew
cpio          kbd_mode       netstat         sync
dash          kill           ntfs-3g         tailf
date          ld_static      ntfs-3g.probe   tar
dd            ln             pidof           tempfile
図1●/binディレクトリ内のファイル一覧(例)

 lsやcatなどの前回に紹介した多くのコマンドが,/binディレクトリ以下にあるのが見てとれます。ディレクトリの場所を表す方法は,絶対パスと相対パスの2つがあると前回説明しました。コマンドの絶対パスを調べるには,whichコマンドを使います(図2)。

$ which ls
/bin/ls
図2●lsコマンドの絶対パスを調べる

 コマンドが配置されているディレクトリは,環境変数PATHに格納されています(これをコマンドサーチパスと呼びます)。環境変数には,システムで利用される各種パラメータが格納されています。環境変数PATHの内容は,図3のようにして調べることが可能です。

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/games
図3●環境変数PATHの内容を表示する

 ユーザーがコマンドを入力すると,シェルはPATHに列挙されたディレクトリ内を順に調べていき,コマンド名と同じ名前のファイルがあれば,それを実行します。つまり,PATHに列挙されていない(パスが通っていない)ディレクトリ内にあるコマンドは,そのままではコマンドとして認識されません。

 パスが通っていなくて認識されないコマンドを実行するには,絶対パスを使って指定します。例えば,PATH内に/sbinディレクトリが登録されていない場合,/sbin/ifconfigを実行するには図4のようにします。

$ /sbin/ifconfig
図4●絶対パスを使ってifconfigコマンドを指定する

リダイレクトとパイプ

 コマンドの実行結果は画面上に表示されますが,出力先をファイルに切り替えることもできます。これをリダイレクト(リダイレクション)といいます。

 出力先のリダイレクトには,「>(実際には,半角)」記号を使います。図5の例では,calコマンドの実行結果をcalendar.txtファイルに保存しています。calendar.txtファイルがない場合は新しく作成されます。

$ cal > calendar.txt
図5●calコマンドの実行結果をcalendar.txtファイルに保存する

 calコマンドの実行結果はcalendar.txtファイルに書き込まれ,画面上には何も表示されません。ファイルの中を確認してみます(図6)。

$ cat calendar.txt
      6月 2008
日 月 火 水 木 金 土
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
図6●calendar.txtファイルの内容を表示する

 なお,リダイレクトで指定したファイルがすでに存在する場合は,ファイルの内容は上書きされてしまいます。ファイルの内容を消さずに,コマンドの実行結果を追記したい場合は,「>(実際には,半角)」の代わりに「>>(同)」を使ってください。ファイルの末尾に追記されます。

 コマンドの実行結果を別のコマンドに渡して処理をすることもできます。そのためにはパイプ「|」を使います。図7に示す例を見てみましょう。

$ ls -l /etc | less
合計 1252
drwxr-xr-x  3 root root      4096 2008-04-23 02:51 ConsoleKit
drwxr-xr-x  3 root root      4096 2008-04-23 02:54 NetworkManager
drwxr-xr-x  2 root root      4096 2008-04-23 03:07 PolicyKit
drwxr-xr-x 10 root root      4096 2008-04-23 03:12 X11
drwxr-xr-x  8 root root      4096 2008-04-23 03:01 acpi

(中略)

:
図7●パイプの使用例

 /etcディレクトリ内にはファイルがたくさんあるので,lsコマンドの実行結果はスクロールしてしまいます。そこでパイプを利用して実行結果をlessコマンドに送ると,1画面ずつ表示できるわけです。

 LinuxなどのUNIX系OSでは,シンプルな動作のコマンドをパイプで任意に組み合わせることで,目的とする処理を実現しています。なお,リダイレクトやパイプは,シェルが備えている機能です。