UNIX/Linuxの部屋 コマンド:ls

TOP UNIX/Linuxの部屋 UNIX/Linuxコマンド一覧 用語集 新版 由来/読み方辞書 環境変数マニュアル Cシェル変数 システム設定ファイル システムコール・ライブラリ ネットワークプログラミングの基礎知識 クラウドサービス徹底比較・徹底解説




コマンド ls ファイル・ディレクトリを表示 このエントリーをはてなブックマークに追加

最終更新


UNIX/Linux における ls コマンドは、ファイル・ディレクトリの一覧や、詳細情報を表示するコマンドである。パーミッション・ファイルサイズ・タイムスタンプ・オーナー・グループなどの情報を表示することができる。ls コマンドは古くから存在するため、あらゆる UNIX/Linux 系 OS で使用可能である。


ls コマンドの基本的な使い方
引数を指定せず ls コマンドを実行すると、カレントディレクトリにあるファイル・ディレクトリを表示する。
% ls
file1 file2 file3 dir
引数にファイルを指定すると、指定したファイルの一覧を表示する。
% ls file? *.txt
などと、ワイルドカードを使うこともできる。

ls コマンドに -l オプションを指定すると、詳細な情報を表示する。
% ls -l file1 file2 file3

引数にファイル名ではなくディレクトリ名を指定すると、指定したディレクトリの下にあるファイル・ディレクトリを表示する。
% ls dir1 dir2 dir3
もし (ディレクトリの下ではなく) ディレクトリ自体の情報を見たいなら、
% ls -d dir1
とする。

ls は「.」から始まるファイル・ディレクトリは表示しない。-a や -A オプションを使うことで「.」から始まるファイルも表示させることができる。

必ず覚えておきたいのは、-l、-A オプション。覚えておくと便利なのは -F オプション。当ページ管理人は
% alias ls "ls -F"
% alias l "ls -lFA"
としている。これは csh・tcsh の書き方。sh・bash を使っているなら
% alias ls="ls -F"
% alias l="ls -lFA"
とすればよい。

ls コマンドのオプション
-a 「.」 から始まるファイルも表示。「.」「..」も表示する。
-A 「.」 から始まるファイルも表示。「.」「..」は表示しない。
root が ls を実行した場合、常に -A オプションが付けられたものとして動作する。
-l ファイル、ディレクトリの詳細な情報を表示する
-T タイムスタンプを年月日時分秒まで表示 (要 -l オプション)
-o ファイルフラグを表示。BSD 系のみ (要 -l オプション)
-1 (マイナスエルじゃなくてマイナスイチ) 1行につき1つのファイルの情報を表示
-C マルチカラムで表示 (-1 の逆)。
% ls | more
などとすると、ls が出力先がパイプだと判断し、自動的に -1 を指定したのと同じように動作するが、-C を付けるとそれを抑制し、1行に複数のファイルを表示する。
-F ファイルタイプの識別子を付ける。
ディレクトリの後ろに「/」、シンボリックリンクの後ろに「@」、実行形式ファイルの後ろに「*」をつける
-L シンボリックリンク自体ではなく、リンク先のファイルの情報を表示
-R 再帰的にディレクトリ以下のファイルを表示する。
つまり ls -R / で全てのファイルが表示されることになる
-c ファイルの変更日時ではなく、最後にファイルステータスを変更した日時を表示
-u ファイルの変更日時ではなく、最後にファイルにアクセスした日時を表示
-d ディレクトリを指定した場合、ディレクトリ以下のファイルではなくディレクトリ自体の情報を表示。
ls -l /usr/bin は、ls -l /usr/bin/* と同じような動作をするが、-d オプションを付けると、
% ls -ld /usr/bin
drwxr-xr-x 2 bin bin 5120 Oct 7 05:26 /usr/bin
と、ディレクトリ自体の情報を表示する
-f ファイル名をソートせずに表示
--full-time ファイルのタイムスタンプを全て表示する。
年月日時分秒・ナノ秒単位で表示する。タイムゾーンも表示される。ただし主に Linux で使われる GNU Coreutils の ls のみ使用可能であることに注意。
% ls --full-time
-rwxrwxr-x 2 user group 9282 2017-06-12 05:59:47.130527880 +0900 file1.txt
-rwxr-xr-x 6 user group 4096 2017-01-11 20:03:09.529820000 +0900 file2.txt
UTC で取得したい場合は下記のように環境変数 TZ を設定するとよい。
% env TZ=UTC+0 ls --full-time
シェルスクリプトから正確なタイムスタンプを扱う場合は stat コマンドも参照してほしい。
-r 逆順にソートして表示
-t ファイルを変更した日時の順でソートする。最近どのファイルが更新されたか調べたいときは
% ls -lt | head
最近どのファイルが参照されたかを調べたいときは
% ls -lut | head
が便利。
-i ファイルの i-node を表示
先頭にファイル・ディレクトリの i-node を表示する。
% ls -li
22328145 drwxr-xr-x 2 68user realuser 512 5 29 10:37 dir
22335070 -rw-r--r-- 1 68user realuser 2159 5 29 10:37 file1.txt
上記例だと 22328145 や 22335070 が i-node である。

-l オプションなしで ls -i とすると、下記のような表示になる。
% ls -li
22328145 dir 22335070 file1.txt
-s 各ファイルのファイルシステムブロックの使用量を表示 (512バイト単位)
たとえ1バイトのファイルでも1ブロック (512バイト) を消費している。その消費量を表示する。ブロックの単位は環境変数 BLOCKSIZE で設定できる。
-k -s オプションが指定された場合、使用量を 1K バイト単位で表示する
-x ファイルを横方向ではなく、縦方向にソートする
(-x オプションは SystemV 系と GNU の ls のみ)。
-q ファイル・ディレクトリ名の中に表示不可能な文字があった場合、`?' という文字に置き換えて表示する。このオプションはデフォルトで有効になっている。このおかげで日本語を含むファイル名を ls で表示しようとすると、???? などとなってしまう。この機能は、出力先がパイプやファイルだと抑制されるので、
% ls | less
% ls | cat
などとすると、日本語ファイル名を表示できる。

Howto: ls コマンドの出力結果を更新日時でソートする
ls -ltr をおすすめする。下記は最終変更時刻の昇順でソートしたもので、一番下に新しいものが表示される。
% ls -ltr
-rw-r--r-- 1 68user realuser 38671 May 28 15:01 sample.dat
-rw-r--r-- 1 68user realuser 22354 May 29 17:19 sample.txt
-rw-r--r-- 1 68user realuser 1269927 May 29 17:22 sample2.dat
-rw-r--r-- 1 68user realuser 83771 May 29 17:20 sample.html
drwxr-xr-x 3 68user realuser 512 May 29 19:43 sample.xxx

Howto: ls コマンドの出力結果をファイルサイズ順でソートする
ls -lSr をおすすめする。下記はファイルサイズの昇順でソートしたもので、一番下にファイルサイズが大きいものが表示される。
% ls -ltr
drwxr-xr-x 3 68user realuser 512 May 29 19:43 sample.xxx
-rw-r--r-- 1 68user realuser 22354 May 29 17:19 sample.txt
-rw-r--r-- 1 68user realuser 38671 May 28 15:01 sample.dat
-rw-r--r-- 1 68user realuser 83771 May 29 17:20 sample.html
-rw-r--r-- 1 68user realuser 1269927 May 29 17:22 sample2.dat
-S オプションは、少なくとも Linux・*BSD の ls で使用可能である。FreeBSD では 6.0-RELEASE 以降で対応している。

Howto: ls コマンドのファイルサイズ表示をわかりやすくする
ls -lh とすることで、ファイルサイズが K・M・G などの SI 接頭辞付きで表示される。
% ls -lh
-rw-r--r-- 1 68user realuser 37.7K May 28 15:01 sample.dat
-rw-r--r-- 1 68user realuser 81.8K May 29 17:20 sample.html
-rw-r--r-- 1 68user realuser 21.8K May 29 17:19 sample.txt
drwxr-xr-x 3 68user realuser 512 May 29 19:43 sample.xxx
-rw-r--r-- 1 68user realuser 1.2M May 29 17:22 sample2.dat
ls -lhS で、ファイルサイズでソートしつつ、K・M・G 表記で表示することができる。

-S オプションは、少なくとも Linux・*BSD の ls で使用可能である。FreeBSD では 6.0-RELEASE 以降で対応している。

ls 結果のソート順について (特に一部 Linux 系 OS)
ls コマンドはデフォルトでファイル名をソートして出力するが、昔は ASCII コード順にソートするものであった (ただしドットから始まるファイルは最初に表示)。近年は常にそうとは限らない。Linux で使用されている Coreutils の ls においては、ロケールと Unicode の照合順序の関係で、
  • ドットなど一部記号が存在しないものとしてソートされる (例: .abc.txt は abc.txt と同じ)
  • 英大文字と小文字を同一視する (例: aaa, abc, ABC の順でソートされる)
となる環境がある。例えば Ubuntu など一部の Linux 系 OS では標準のロケールが en_US.UTF-8 になっているため、こうなりがちである。LC_ALL=C や LC_ALL=ja_JP.UTF-8 にすれば以前の挙動のとおりになる。

関連コマンド
ファイルの詳細情報を取得したい場合、stat コマンドも参考にしてほしい。
>> Solaris10オンラインマニュアル(man) Solaris10 ls(1)
>> FreeBSDオンラインマニュアル(man) FreeBSD ls(1)
>> Linuxオンラインマニュアル(man) Linux ls(1)

読み方 ls (UNIXコマンド) [える・えす] このエントリーをはてなブックマークに追加

"LiSt" の略。