Linux講座にようこそ。このページは「Linuxの使い方 - 第3章 ファイル操作のコマンド1」です。
ディレクトリやファイルを取り扱うコマンドのうち、ここでは次のコマンドをご紹介します。前にも述べましたが、コマンドの全ての引数をご紹介しているわけではありませんので、詳細内容をお知りになりたい場合はmanコマンドで調べてください。
図3-2でユーザー名merryのホームディレクトリを/home/merry/とすると、ログイン時には、ここがカレントディレクトリになっていますのでパス名指定は非常に簡単です。しかし、ホームディレクトリ以外のディレクトリの下のファイルを取り扱う場合は、パス名が長くなってしまいキータッチが多くなりますので作業がしにくくなります。
例えば、data1ファイルの相対パス名はdata1または./data1のように簡単に指定できますが、etcディレクトリの下のファイルは次のようになります。
../../etc/fstab
このような場合は、カレントディレクトリを変更したほうがパス名が短くなり作業がしやすくなります。
cdコマンドはカレントディレクトリの変更を行い、pwdコマンドはカレントディレクトリの絶対パス名を標準出力に出力します。
cdコマンドは引数に指定したディレクトリにカレントディレクトリを変更します。引数を省略した場合はカレントディレクトリをホームディレクトリに変更します。
図3-2の/home/merry/がカレントディレクトリとして設定してあるものとして、mybinディレクトリにカレントディレクトリを変更します。
$ pwd ← カレントディレクトリを表示します /home/merry ← pwdコマンドの実行結果です。カレントディレクトリは/home/merry/です $ $ cd mybin ← mybinディレクトリに変更します。cd ./mybinでも同じです $ pwd /home/merry/mybin ← 変更後のカレントディレクトリです $
mybinディレクトリから/etc/ディレクトリにカレントディレクトリを変更します。
$ cd ../../../etc ← 相対パス名での指定です または $ cd /etc ← 絶対パス名での指定です $
/etc/ディレクトリからホームディレクトリ(/home/merry/)にカレントディレクトリを変更します。
$ cd ; pwd ← 引数無しのcdコマンドとpwdコマンドの連続実行です /home/merry ← pwdコマンドの実行結果です $
ファイルシステム上のディレクトリやファイルの名前や作成日等を調べたいことが多々あります。例えば、図3-3のmeiboディレクトリの下のファイルの名前を調べたい、というような場合です。
lsコマンドはファイルやディレクトリの名前や属性(更新日付や容量等)を標準出力に出力します。
引数にディレクトリパス名を指定した場合は、その下のファイルやディレクトリを標準出力に出力し、省略した場合はカレントディレクトリを仮定します。ファイルパス名を指定した場合は、そのファイルがあればファイル名を出力します。
オプション | 意味 |
---|---|
-F, --classify | ディレクトリには/記号を、実行可能ファイルには*記号を付加します。 |
-R, --recursive | 指定したディレクトリ以下を全て出力します。 |
-a, --all | 先頭が.(ピリオド)記号のファイルやディレクトリも出力します。 |
-d, --directory | ディレクトリ自身の名前や詳細情報(-lと併用)を出力します。 |
-l | 名前の他に詳細情報(更新日時や容量等)も出力します。 |
-x | 1行に複数出力します。(ターミナルに出力するときの標準です) |
-1 | 1行に1個のみ出力します。(パイプラインで使用するときの標準です) |
図3-3でmeiboディレクトリがカレントディレクトリに設定してあるものとして、カレントディレクトリの直下のみのファイルやディレクトリを出力します。
$ pwd /home/merry/meibo ← 現在のカレントディレクトリです $ $ ls meibo ← カレントディレクトリ名を指定します ls: meibo にアクセスできません: そのようなファイルやディレクトリはありません ← エラーメッセージです $ $ ls ← パス名を省略します data meibo1 meibo2 meiboA ← 実行結果です(-xオプションが指定されたとみなしますので、1行に複数表示します) $ $ ls . ← パス名として.(カレントディレクトリ)を指定します data meibo1 meibo2 meiboA $
dataディレクトリの直下のみのファイルやディレクトリの詳細情報を出力します。
$ ls -l data ← ls -l ./dataでも同じです 合計 8 -rw-r--r-- 1 merry users 1310 8月 1 09:45 data1 -rw-r--r-- 1 merry users 843 9月 1 00:01 data2 ↑ 更新日時 ↑ 容量(バイト) $
カレントディレクトリ以下の全てのファイルやディレクトリを出力します。
$ ls -R ← ls -R .でも同じです .: data meibo1 meibo2 meiboA ← カレントディレクトリの下です ./data: data1 data2 ← dataディレクトリの下です $
dataディレクトリ自身の詳細情報を出力します。
$ ls -dl data ← -dと-lを指定します drwxr-xr-x 2 merry users 4096 12月 22 16:07 data $
/etc/issueと/etc/myfileが存在するかを調べます。
$ ls /etc/issue /etc/myfile ls: cannot access /etc/myfile: そのようなファイルやディレクトリはありません ← 存在しなかったことを示すメッセージです /etc/issue ← 存在したことを示すメッセージです $
先頭が.(ピリオド)記号のファイルやディレクトリも表示します。
$ cd ; pwd ← カレントディレクトリをホームディレクトリに戻します /home/merry $ $ ls -a .gftp .mysql_history .gimp-2.6 .orc .DCOPserver_localhost.localdomain_:0 .gnome2 .pki .DCOPserver_localhost.localdomain__0 .gnome2_private .pulse .ICEauthority .grip .pulse-cookie (以下省略) $
lsコマンドでディレクトリ以下の全てのファイルやディレクトリを調べる場合は、-R又は--recursiveオプションを指定すれば表示することができます。しかし、この表示結果から木(ツリー)構造をイメージすることは難しいと思います。そこで、ディレクトリ以下の木構造を視覚的に表示したい、というような場合はtreeコマンドを使うと良いでしょう。また、結果をHTML形式で出力することもできますので、木構造をWebブラウザに表示することもできます。
引数にディレクトリパス名を指定した場合は、その下のファイルやディレクトリを標準出力に出力し、省略した場合はカレントディレクトリを仮定します。
オプション | 意味 |
---|---|
-D | 更新日時も出力します。 |
-F | ディレクトリには/記号を、実行可能ファイルには*記号を付加します。 |
-a | 先頭が.(ピリオド)記号のファイルやディレクトリも出力します。 |
-d | ディレクトリのみを出力します。 |
-p | 保護モード(パーミッション)も出力します。(保護モードに付いては次章で説明します) |
-h | ファイルの容量も出力します。 |
-H ベースHREF | HTML形式で出力する場合の、ファイルやディレクトリのベースとなるパス名を指定します。 |
-T HTMLタイトル | HTML形式で出力する場合の、titleタグとh1タグに指定する文字列を指定します。 |
-o 出力ファイルパス名 | 結果を指定したファイルに出力します。 |
図3-3でmerryディレクトリがカレントディレクトリに設定してあるものとして、カレントディレクトリ以下のファイルやディレクトリの木構造を出力します。
$ ls -R ← lsコマンドを使います .: meibo mybin tel ./meibo: data meibo1 meibo2 meiboA ./meibo/data: data1 data2 ./mybin: $ $ tree ← treeコマンドを使います . ├── meibo │ ├── data │ │ ├── data1 │ │ └── data2 │ ├── meibo1 │ ├── meibo2 │ └── meiboA ├── mybin └── tel 3 directories, 6 files $ $ tree -ph ← 保護モードとファイル容量も出力します . ├── [drwxr-xr-x 4.0K] meibo │ ├── [drwxr-xr-x 4.0K] data │ │ ├── [-rw-r--r-- 222] data1 │ │ └── [-rw-r--r-- 573] data2 │ ├── [-rw-r--r-- 70] meibo1 │ ├── [-rw-r--r-- 91] meibo2 │ └── [-rw-r--r-- 116] meiboA ├── [drwxr-xr-x 4.0K] mybin └── [-rw-r--r-- 70] tel 3 directories, 6 files $
meiboディレクトリ以下の全てのファイルやディレクトリの木構造をファイルに出力します。
$ tree -o /tmp/tree.txt ./meibo $ $ cat /tmp/tree.txt ← 結果を確認します ./meibo ├── data │ ├── data1 │ └── data2 ├── meibo1 ├── meibo2 └── meiboA 1 directory, 5 files $
meiboディレクトリ以下の全てのファイルやディレクトリの木構造をHTML形式でファイルに出力します。
$ tree -H /home/merry/meibo -T "meiboディレクトリ" -o /tmp/meibo_tree.html ./meibo $
上記実行例の結果の/tmp/meibo_tree.htmlの内容です。
Webブラウザに表示した結果はmeibo_tree.htmlをご覧ください。ただし、例題のファイルやディレクトリは用意してありませんので、リンクをクリックするとエラーになります。
catコマンドは複数のファイルを連結して標準出力に出力します。標準出力は出力先を変えない限りターミナルに割り当ててありますので、ファイルの内容はターミナルに出力されます。catという名前がおぼえやすいと言うこともあって、小さなテキストファイルの内容を見たいときによく使用します。
引数には複数のファイルパス名を指定できます。ファイルパス名の指定が無い場合は標準入力(通常はキーボード)からの入力となります。また、ファイルパス名として-(負記号)記号を指定すると標準入力から入力します。
オプション | 意味 |
---|---|
-T, --show-tabs | タブ文字を^T で出力します。(タブ文字を見えるように表示します) |
-n, --number | 行番号を付加して出力します。 |
図3-3でmeiboディレクトリがカレントディレクトリに設定してあるものとして、meibo1とmeibo2を連結してmeibo_newを作成します。
$ cat meibo1 meibo2 > meibo_new $
/etc/issueファイルの内容に行番号を付加してターミナルに出力します。
$ cat -n /etc/issue 1 Fedora Core release 2 (Tettnang) ← ここから/etc/issueの内容です 2 Kernel \r on an \m 3 $
dateコマンドの結果と/etc/issueファイルの内容を連結して出力します。dateコマンドの結果は標準入力でcatコマンドに渡します。
$ date "+%c" | cat - /etc/issue > file1.txt $ $ cat file1.txt 2004年07月30日 17時02分25秒 Fedora Core release 2 (Tettnang) Kernel \r on an \m $
moreコマンドとlessコマンドはページャーと呼ばれているものの一種で、ターミナルの最終行の前まで出力した状態でサブコマンド入力待ちになります。例えば、catコマンドで少し大きめのファイルの内容を表示するとターミナルから溢れてしまいますが、このような場合はmoreコマンド或は、lessコマンドを使用すると便利です。機能は両方ともほとんど同じです。
引数には複数のファイルパス名を指定できます。
ターミナルの最終行はサブコマンド入力行で、スクロールの指示などを行います。
moreコマンドには次のようなサブコマンドがあります。
サブコマンド | 意味 |
---|---|
hまたは? | サブコマンドの説明を表示します。 |
Enter | 1行スクロールします。 |
スペース | 1画面分スクロールします。 |
qまたはQ | 終了します。 |
b | 1画面分戻ります。 |
:n | 引数でファイルを複数指定した場合、次のファイルを表示します。 |
lessコマンドには次のようなサブコマンドがあります。
サブコマンド | 意味 |
---|---|
hまたはH | サブコマンドの説明を表示します。 |
Enter | 1画面分スクロールします。(moreコマンドとキーの割当が異なります) |
スペース | 1行スクロールします。(moreコマンドとキーの割当が異なります) |
qまたはQ | 終了します。 |
b | 1画面分戻ります。 |
d | 半画面分スクロールします。 |
y | 半画面分戻ります。 |
:n | 引数でファイルを複数指定した場合、次のファイルを表示します。 |
図3-3でmeiboディレクトリがカレントディレクトリに設定してあるものとして、meibo1とmeibo2の内容を表示します。
$ more meibo1 meibo2 (meibo1ファイルの内容表示) ← :nサブコマンドで次のファイルを表示します (meibo2ファイルの内容表示) $ $ less meibo1 meibo2 (meibo1ファイルの内容表示) ← :nサブコマンドで次のファイルを表示します (meibo2ファイルの内容表示) $
lsコマンドの実行結果をパイプラインでmoreコマンドに送ります。
$ ls -x /usr/bin | more ← lsコマンドの-xは1行に複数表示するための指定です (/usr/binの下のファイルを表示) $ $ ls /usr/bin | more ← lsコマンドのオプション指定がないため、-1が仮定されますので1行に1パス名を表示します (/usr/binの下のファイルを表示) $
ファイルの全体ではなく一部分だけを見たい場合が有ります。例えばログファイルの先頭或は、最後の数行だけを見たいというようなことです。このような場合はheadコマンド或は、tailコマンドを使用します。
出力行数を省略した場合は、headコマンドはファイルの先頭からの10行を、tailコマンドはファイルの最後の10行を標準出力に出力します。ファイルを指定しない場合は標準入力から入力します。
オプション | 意味 |
---|---|
-n 行数, --lines 行数 | 表示する行数を指定します。省略した場合は10行を仮定します。 |
/var/log/boot.logファイルの先頭10行を表示します。
$ head /var/log/boot.log [ OK ] Started Show Plymouth Boot Screen. [ OK ] Reached target Paths. [ OK ] Reached target Basic System. [ OK ] Found device SAMSUNG_HD253GJ. [ OK ] Found device SAMSUNG_HD253GJ. [ OK ] Started dracut initqueue hook. Mounting /sysroot... [ OK ] Mounted /sysroot. [ OK ] Reached target Initrd Root File System. Starting Reload Configuration from the Real Root... $
/var/log/boot.logファイルの最後の5行を表示します。
$ tail -n 5 /var/log/boot.log Starting Authorization Manager... [ OK ] Started firewalld - dynamic firewall daemon. Starting Network Manager... [ OK ] Started Authorization Manager. [ OK ] Started Accounts Service. $