Linux講座にようこそ。このページは「Linuxの使い方 - 第3章 ファイル操作のコマンド1」です。

Linuxの使い方

3. ファイル操作のコマンド1(2/2)

3.2 コマンドのご紹介1

ディレクトリやファイルを取り扱うコマンドのうち、ここでは次のコマンドをご紹介します。前にも述べましたが、コマンドの全ての引数をご紹介しているわけではありませんので、詳細内容をお知りになりたい場合はmanコマンドで調べてください。

3.2.1 カレントディレクトリの変更と表示(cdコマンドとpwdコマンド)

ホームディレクトリとカレントディレクトリ
【図3-2】ホームディレクトリとカレントディレクトリ
ユーザー名merryのホームディレクトリは/home/merry/です

図3-2でユーザー名merryのホームディレクトリを/home/merry/とすると、ログイン時には、ここがカレントディレクトリになっていますのでパス名指定は非常に簡単です。しかし、ホームディレクトリ以外のディレクトリの下のファイルを取り扱う場合は、パス名が長くなってしまいキータッチが多くなりますので作業がしにくくなります。

例えば、data1ファイルの相対パス名はdata1または./data1のように簡単に指定できますが、etcディレクトリの下のファイルは次のようになります。

../../etc/fstab

このような場合は、カレントディレクトリを変更したほうがパス名が短くなり作業がしやすくなります。

cdコマンドはカレントディレクトリの変更を行い、pwdコマンドはカレントディレクトリの絶対パス名を標準出力に出力します。

一般形式

cdコマンドは引数に指定したディレクトリにカレントディレクトリを変更します。引数を省略した場合はカレントディレクトリをホームディレクトリに変更します。

$ cd ディレクトリパス名
$ pwd

実行例

図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.2.2 ディレクトリとファイルの情報表示(lsコマンド)

ユーザーmerryのホームディレクトリ
【図3-3】ユーザーmerryのホームディレクトリ
ホームディレクトリのパス名は/home/merry/です

ファイルシステム上のディレクトリやファイルの名前や作成日等を調べたいことが多々あります。例えば、図3-3のmeiboディレクトリの下のファイルの名前を調べたい、というような場合です。

lsコマンドはファイルやディレクトリの名前や属性(更新日付や容量等)を標準出力に出力します。

一般形式

引数にディレクトリパス名を指定した場合は、その下のファイルやディレクトリを標準出力に出力し、省略した場合はカレントディレクトリを仮定します。ファイルパス名を指定した場合は、そのファイルがあればファイル名を出力します。

$ ls -FRadlx1 ディレクトリパス名1 ディレクトリパス名2 …
$ ls ファイルパス名1 ファイルパス名2 …
【表3-1】lsコマンド・オプション
オプション意味
-F, --classifyディレクトリには/記号を、実行可能ファイルには*記号を付加します。
-R, --recursive指定したディレクトリ以下を全て出力します。
-a, --all先頭が.(ピリオド)記号のファイルやディレクトリも出力します。
-d, --directoryディレクトリ自身の名前や詳細情報(-lと併用)を出力します。
-l名前の他に詳細情報(更新日時や容量等)も出力します。
-x1行に複数出力します。(ターミナルに出力するときの標準です)
-11行に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 datals -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 -Rls -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
(以下省略)
$

3.2.3 ディレクトリとファイルの木構造表示(treeコマンド)

lsコマンドでディレクトリ以下の全てのファイルやディレクトリを調べる場合は、-R又は--recursiveオプションを指定すれば表示することができます。しかし、この表示結果から木(ツリー)構造をイメージすることは難しいと思います。そこで、ディレクトリ以下の木構造を視覚的に表示したい、というような場合はtreeコマンドを使うと良いでしょう。また、結果をHTML形式で出力することもできますので、木構造をWebブラウザに表示することもできます。

一般形式

引数にディレクトリパス名を指定した場合は、その下のファイルやディレクトリを標準出力に出力し、省略した場合はカレントディレクトリを仮定します。

$ tree -DFadph -H ベースHREF -T HTMLタイトル -o 出力ファイルパス名 ディレクトリパス名1 ディレクトリパス名2 …
【表3-2】treeコマンド・オプション
オプション意味
-D更新日時も出力します。
-Fディレクトリには/記号を、実行可能ファイルには*記号を付加します。
-a先頭が.(ピリオド)記号のファイルやディレクトリも出力します。
-dディレクトリのみを出力します。
-p保護モード(パーミッション)も出力します。(保護モードに付いては次章で説明します)
-hファイルの容量も出力します。
-H ベースHREFHTML形式で出力する場合の、ファイルやディレクトリのベースとなるパス名を指定します。
-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の内容です。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <meta name="viewport" content="width=device-width,initialscale=1.0">
 <meta name="Author" content="Made by 'tree'">
 <meta name="GENERATOR" content="$Version: $ tree v1.6.0 (c) 1996 - 2011 by Steve Baker, Thomas Moore, Francesc Rocher, Kyosuke Tokoro $">
 <title>meiboディレクトリ</title>
 <style type="text/css">
  <!--
 BODY { font-family : ariel, monospace, sans-serif; }
 P { font-weight: normal; font-family : ariel, monospace, sans-serif; color: black; background-color: transparent;}
 B { font-weight: normal; color: black; background-color: transparent;}
 A:visited { font-weight : normal; text-decoration : none; background-color : transparent; margin : 0px 0px 0px 0px; padding : 0px 0px 0px 0px; display: inline; }
 A:link    { font-weight : normal; text-decoration : none; margin : 0px 0px 0px 0px; padding : 0px 0px 0px 0px; display: inline; }
 A:hover   { color : #000000; font-weight : normal; text-decoration : underline; background-color : yellow; margin : 0px 0px 0px 0px; padding : 0px 0px 0px 0px; display: inline; }
 A:active  { color : #000000; font-weight: normal; background-color : transparent; margin : 0px 0px 0px 0px; padding : 0px 0px 0px 0px; display: inline; }
 .VERSION { font-size: small; font-family : arial, sans-serif; }
 .NORM  { color: black;  background-color: transparent;}
 .FIFO  { color: purple; background-color: transparent;}
 .CHAR  { color: yellow; background-color: transparent;}
 .DIR   { color: blue;   background-color: transparent;}
 .BLOCK { color: yellow; background-color: transparent;}
 .LINK  { color: aqua;   background-color: transparent;}
 .SOCK  { color: fuchsia;background-color: transparent;}
 .EXEC  { color: green;  background-color: transparent;}
 -->
 </style>
</head>
<body>
    <h1>meiboディレクトリ</h1><p>
    <a href="../../error_mess.html">/home/merry/meibo</a><br>
    ├── <a href="../../error_mess.html">data</a><br>
    │ ├── <a href="../../error_mess.html">data1</a><br>
    │ └── <a href="../../error_mess.html">data2</a><br>
    ├── <a href="../../error_mess.html">meibo1</a><br>
    ├── <a href="../../error_mess.html">meibo2</a><br>
    └── <a href="../../error_mess.html">meiboA</a><br>
    <br><br>
    </p>
    <p>

1 directory, 5 files
    <br><br>
    </p>
    <hr>
    <p class="VERSION">
         tree v1.6.0 © 1996 - 2011 by Steve Baker and Thomas Moore <br>
         HTML output hacked and copyleft © 1998 by Francesc Rocher <br>
         Charsets / OS/2 support © 2001 by Kyosuke Tokoro
    </p>
</body>
</html>

Webブラウザに表示した結果はmeibo_tree.htmlをご覧ください。ただし、例題のファイルやディレクトリは用意してありませんので、リンクをクリックするとエラーになります。

3.2.4 テキストファイルの連結(catコマンド)

catコマンドは複数のファイルを連結して標準出力に出力します。標準出力は出力先を変えない限りターミナルに割り当ててありますので、ファイルの内容はターミナルに出力されます。catという名前がおぼえやすいと言うこともあって、小さなテキストファイルの内容を見たいときによく使用します。

一般形式

引数には複数のファイルパス名を指定できます。ファイルパス名の指定が無い場合は標準入力(通常はキーボード)からの入力となります。また、ファイルパス名として-(負記号)記号を指定すると標準入力から入力します。

$ cat -Tn ファイルパス名1 ファイルパス名2 …
【表3-3】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

$

3.2.5 テキストファイルの内容表示(moreコマンドとlessコマンド)

moreコマンドとlessコマンドはページャーと呼ばれているものの一種で、ターミナルの最終行の前まで出力した状態でサブコマンド入力待ちになります。例えば、catコマンドで少し大きめのファイルの内容を表示するとターミナルから溢れてしまいますが、このような場合はmoreコマンド或は、lessコマンドを使用すると便利です。機能は両方ともほとんど同じです。

一般形式

引数には複数のファイルパス名を指定できます。

$ more ファイルパス名1 ファイルパス名2 …
$ less ファイルパス名1 ファイルパス名2 …

ターミナルの最終行はサブコマンド入力行で、スクロールの指示などを行います。

moreコマンドには次のようなサブコマンドがあります。

【表3-4】moreコマンドのサブコマンド
サブコマンド意味
hまたは?サブコマンドの説明を表示します。
Enter1行スクロールします。
スペース1画面分スクロールします。
qまたはQ終了します。
b1画面分戻ります。
:n引数でファイルを複数指定した場合、次のファイルを表示します。

lessコマンドには次のようなサブコマンドがあります。

【表3-5】lessコマンド・オプション
サブコマンド意味
hまたはHサブコマンドの説明を表示します。
Enter1画面分スクロールします。(moreコマンドとキーの割当が異なります)
スペース1行スクロールします。(moreコマンドとキーの割当が異なります)
qまたはQ終了します。
b1画面分戻ります。
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の下のファイルを表示)
$

3.2.6 テキストファイルの行数指定表示(headコマンドとtailコマンド)

ファイルの全体ではなく一部分だけを見たい場合が有ります。例えばログファイルの先頭或は、最後の数行だけを見たいというようなことです。このような場合はheadコマンド或は、tailコマンドを使用します。

一般形式

出力行数を省略した場合は、headコマンドはファイルの先頭からの10行を、tailコマンドはファイルの最後の10行を標準出力に出力します。ファイルを指定しない場合は標準入力から入力します。

$ head -n 行数 ファイルパス名1 ファイルパス名2 …
$ tail -n 行数 ファイルパス名1 ファイルパス名2 …
【表3-6】headコマンドとtailコマンド・オプション
オプション意味
-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.
$