Linuxコマンド「ls」

lsコマンドとは

lsコマンドはディレクトリにあるコンテンツの情報を表示するコマンドである。なにもオプションを付けずに指定すると、現在位置にあるファイルとフォルダの名前をリストで表示する。

ls
backup  dir        file2.txt  file4.txt
delete  file1.txt  file3.txt  file5.txt

基本的な構文

lsコマンドの基本的なコマンドは以下の通りである。ディレクトリおよびファイルに一致するファイルの情報を表示する。

ls [オプション] [ディレクトリおよびファイル ...]

大きく以下の4点をオプションで指定する。

  • どのディレクトリを表示するか
  • どのファイルを表示するか
  • どのような並び順で表示するか
  • どのような形式で表示するか

表示するディレクトリの指定

以下のディレクトリ構造の場合に、lsコマンドで表示するディレクトリを指定する例を示す。

tree
.
├── .secret
├── backup~
├── dir1
│   ├── command.sh
│   ├── dirA
│   │   └── file3.txt
│   ├── dirB
│   ├── file1.txt
│   └── file2.txt
├── dir2
│   └── file6.txt
├── dirText
├── file4.txt
├── file5.txt
└── program.sh

何も指定しない場合、カレントディレクトリの全ての通常ファイル・ディレクトリを出力する。

ls
backup~  dir1  dir2  file4.txt  program.sh

ディレクトリを指定すると、そのディレクトリのファイル・ディレクトリを出力する。

ls dir1
command.sh  dirA  dirB  file1.txt  file2.txt

なお、シェル形式のワイルドカードが使用できる。

複数のディレクトリ

複数のディレクトリが指定された場合、ディレクトリごとに情報が表示される。

ls dir1 dir*
dirText   # dir*で引っかかったカレントディレクトリにあるコンテンツ

dir1:  # dir1のコンテンツ
command.sh  dirA  dirB  file1.txt  file2.txt

dir1:  # dir*で引っかかったdir1のコンテンツ
command.sh  dirA  dirB  file1.txt  file2.txt

dir2:  # dir*で引っかかったdir2のコンテンツ
file6.txt

ディレクトリの表示

ディレクトリのコンテンツではなく、ディレクトリを表示するには-dまたは--directoryオプションを使う。

表示するファイルの指定

名前の指定

ディレクトリと同様にファイルを指定すると、そのファイルの情報を出力する。こちらもシェル形式のワイルドカードが使用できる。

ls file4.txt
file4.txt
ls nofile.txt
ls: cannot access 'nofile.txt': No such file or directory

特定のディレクトリにある特定のファイルの情報を表示する例を示す。

ls dir?/file*
dir1/file1.txt  dir1/file2.txt  dir2/file6.txt

名前の除外

-Iオプションを使用すると名前がパターンに一致するものを除外できる。

ls
backup~  dir1  dir2  dirText  file4.txt  file5.txt  program.sh
ls -I '*file*'
backup~  dir1  dir2  dirText  program.sh
ls -I \*file\*
backup~  dir1  dir2  dirText  program.sh

ただし、名前の指定と併用する場合、名前の指定に一致したものを除外する動作とはならない。あくまで、ディレクトリ名が指定されその配下のアイテムを全て表示するときに、名前の除外が適用される。以下は末尾が1のものを除外することを想定したlsコマンドの実行例である。dir1はディレクトリ名のみ指定しており、dir2はディレクトリ名に加えて名前として*を指定している。dir1/file1-1は除外されているが、dir2/file2-1は除外されていない。

tree
.
├── dir1
│   ├── file1-1
│   └── file1-2
└── dir2
    ├── file2-1
    └── file2-2
ls -I '*1' dir1 dir2/*
dir2/file2-1  dir2/file2-2

dir1:
file1-2

特殊なファイルの表示

隠しファイルなどの表示に関するオプションを示す。実行例は.secret、backup~、command.sh、normalという名前のファイルがあるディレクトリでコマンドを実行した結果である。

オプション意味実行例
オプションなし(デフォルト).で始まるファイルを表示しないbackup~ command.sh normal
-a
--all
.で始まる隠しファイルを表示する
.(カレントディレクトリ)、..(親ディレクトリ)も含む
. .. .secret backup~ command.sh normal
-A
--almost-all
.で始まる隠しファイルを表示する
.(カレントディレクトリ)、..(親ディレクトリ)は含まない
.secret backup~ command.sh normal
-B
--ignore-backups
~で終わるバックアップファイルを表示しないcommand.sh normal

再帰探索

デフォルトでは指定されたディレクトリ直下のみを表示する。-R (--recursive)オプションを付けると、再帰的に配下の全てのファイルを表示する。

ls -R
.:
backup~  dir1  dir2  dirText  file4.txt  file5.txt  program.sh

./dir1:
command.sh  dirA  dirB  file1.txt  file2.txt

./dir1/dirA:
file3.txt

./dir1/dirB:

./dir2:
file6.txt

並び順の指定

コンテンツの表示順を指定するオプションを示す。デフォルトでは名前昇順である。

分類オプション表示順
名前(デフォルト)名前昇順
拡張子-X拡張子昇順
時刻-t時刻が新しい順にする
使用する時刻のデフォルトは最終更新日時だが、--timeで変更可能
--time=keyキーとして使用する日時の種類を指定
・最終アクセス日時 atime、access、use
・最終変更日時 ctime、status
・最終更新日時 mtime,、odification
・作成日時 birth、creation
-u他のオプションとの組み合わせにより動作が変わる。
-ltuのとき
・リストで表示する時刻にatime(アクセス時刻)を使う
・atimeが新しい順にする
-luのとき
・リストで表示する時刻にatime(アクセス時刻)を使う
-lと併用しない場合
・atimeが新しい順にする
-c他のオプションとの組み合わせにより動作が変わる。
-ltcのとき
・リストで表示する時刻にctime(変更時刻)を使う
・ctimeが新しい順にする
-lcのとき
・リストで表示する時刻にctime(変更時刻)を使う
-lと併用しない場合
・ctimeが新しい順にする
ディレクトリ--group-directories-firstディレクトリが先、ファイルが後
その他-Uソートしない
(ファイルシステム上の順番)
-rキーの並び順を逆順にする
-vキーの並び替えでナチュラルソートを使う
総合--sort=WORD指定のキーでソート
none (ソートしない、-Uと等しい)
size (サイズ、-Sと等しい)
time (時刻、-tと等しい)
version (ナチュラルソート、-vと等しい)
extension (拡張子、-Xと等しい)
width (名前の文字数)

ナチュラルソートの例

ファイル名をナチュラルソートで並び替える例を示す。

ls
(out)file1.10.4.txt  file1.5.2.txt  file100.txt  file9.txt
ls -v
(out)file1.5.2.txt  file1.10.4.txt  file9.txt  file100.txt

続いて、拡張子をナチュラルソートで並び替える例を示す。

ls
(out)file.10  file.100  file.5  file.9
ls -vx
(out)file.5  file.9  file.10  file.100
ls --sort=extension --sort=version
(out)file.5  file.9  file.10  file.100

表示形式の指定

主な表示形式を以下に示す。

表示形式意味オプション
vertical縦に並べる(デフォルト)-Cfile1 file4 file7
file2 file5 file8
file3 file6 file9
across
horizontal
横に並べる-xfile1 file2 file3
file4 file5 file6
file7 file8 file9
single-column行区切り-1file1
file2
file3
...
commasコンマ区切り-mfile1, file2, file3,
file4, file5, file6,
file7, file8, file9
long
verbose
リスト-l-rw-r--r-- 1 user user 114 Feb 28 20:18 file1
-rw-r--r-- 1 user user 105 Feb 28 20:18 file2
-rw-r--r-- 1 user user 35 Feb 28 20:18 file3
...

表中に示したオプション以外に--format=表示形式という指定もできる。

ls -m
(out)backup~, dir1, dir2, dirText, file4.txt, file5.txt, program.sh
ls --format=commas
(out)backup~, dir1, dir2, dirText, file4.txt, file5.txt, program.sh

デフォルトの表示形式

デフォルトでは名前だけが縦に表示されるvertical形式である。コンソール幅で折り返しされるように列数が調節される。折り返し幅をwオプションで指定できる。

ls
(out)backup~  dir1  dir2  dirText  file4.txt  file5.txt  program.sh
ls -w 50
(out)backup~  dir2     file4.txt  program.sh
(out)dir1     dirText  file5.txt

ただし、lsコマンドの出力結果をパイプで他のコマンドへ渡す場合、1つずつ改行コードで区切られて渡されるsingle-column形式となる。

ls | hexdump -C
00000000  62 61 63 6b 75 70 7e 0a  64 69 72 31 0a 64 69 72  |backup~.dir1.dir|
00000010  32 0a 64 69 72 54 65 78  74 0a 66 69 6c 65 34 2e  |2.dirText.file4.|
00000020  74 78 74 0a 66 69 6c 65  35 2e 74 78 74 0a 70 72  |txt.file5.txt.pr|
00000030  6f 67 72 61 6d 2e 73 68  0a                       |ogram.sh.|
00000039

リスト表示のカスタマイズ

リスト表示ではパーミッション、リンクの数、所有者名、所有グループ名、サイズ、更新日時(mtime)、名前の順に表示される。表示内容はカスタマイズ可能である。

分類コマンド意味実行例
サイズ-h
--human-readable
単位付きでサイズを表示する-rw-r--r-- 1 user user 9.8K Feb 28 20:04 file4.txt
--siSI接頭辞に準拠(10^3=k、10^6=M、...)する
※本オプションのみで可読性が高い状態になる
-rw-r--r-- 1 user user 10K Feb 28 20:04 file4.txt
--block=SIZE独自のサイズ単位(ブロック)を使う
※単位としてSI接頭辞(K、M、...)または2進接頭辞(KB、MB、...)が使用可能
※10KBのような指定も可能
※ブロックは小数点切り上げとなる
block=128のとき
-rw-r--r-- 1 user user 79 Feb 28 20:04 file4.txt
block=Mのとき
-rw-r--r-- 1 user user 1M Feb 28 20:04 file4.txt
-sブロック割り当てサイズを表示する
時刻--time-style=FORMAT時刻形式を指定する
long-iso: yyyy-mm-dd HH:MM
-rw-r--r-- 1 user user 1M 2025-02-28 20:04 file4.txt
所有者-nuid/gidで表示する-rw-r--r-- 1 1000 1000 9.8K Feb 28 20:04 file4.txt
-G所有グループを表示しない-rw-r--r-- 1 user 9.8K Feb 28 20:04 file4.txt
分類-F分類を示すインジケータを付ける
*実行可能ファイル
/ディレクトリ
@シンボリックリンク
drwxr-xr-x 2 user user 4096 Feb 28 20:24 dir2/
-rwxr----- 1 user user 1431 Feb 28 20:06 program.sh*

他の表示形式のカスタマイズ

本表で示したオプションの一部はリスト表示でなくても使用できる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です