ターミナルで作業を始めると、まず打つことになるのが ls コマンドです。いま自分がいる場所にどんなファイルやディレクトリがあるのかを一覧で表示してくれる、もっとも基本的で、もっとも使用頻度の高いコマンドと言っても過言ではありません。ただ引数なしで打つだけでも役に立ちますが、ls はオプションを組み合わせることで「詳しい情報を見る」「隠しファイルも表示する」「新しい順に並べる」といった具合に、表示の仕方を自在に変えられます。この記事では、ls の基本から、-l で表示される詳細情報の読み方、日常的によく使うオプションと組み合わせ、そしてワイルドカードとの併用までを、実際の出力例とともに解説します。GNU 版(Linux の標準)を前提に、macOS の BSD 版との違いにも触れていきます。
目次
まずは打ってみる:ls の基本
ls は「list(一覧表示する)」に由来する名前です。引数を何も付けずに実行すると、現在いるディレクトリ(カレントディレクトリ)にあるファイルとディレクトリの名前が、名前順(アルファベット順)に並んで表示されます。
# カレントディレクトリの中身を一覧表示する
$ ls
Documents Downloads index.html script.sh style.css
特定の場所の中身を見たいときは、引数にパスを渡します。パスはカレントディレクトリからの相対パス(src/js など)でも、ルートからの絶対パス(/etc など)でも構いません。さらに、パスは複数並べて渡すこともでき、その場合はそれぞれのディレクトリの中身が、どのディレクトリのものかが分かる見出し付きで表示されます。
# 指定したディレクトリの中身を表示する
$ ls /etc
# 相対パスで指定する
$ ls src/js
# 複数のパスをまとめて渡す(それぞれ見出し付きで表示される)
$ ls Documents Downloads
Documents:
report.pdf memo.txt
Downloads:
image.png setup.dmg
引数にディレクトリではなくファイル名を渡すと、そのファイルが存在すれば名前がそのまま表示されます。ワイルドカードと組み合わせて「特定の種類のファイルがあるか」を確認する使い方もよく行いますが、これについては記事の後半で扱います。
-l で詳しい情報を表示する
ls でおそらくもっともよく使うオプションが -l(long の頭文字)です。これを付けると、ファイルごとに1行ずつ、パーミッション(権限)・所有者・サイズ・更新日時といった詳細な情報が表形式で並びます。名前だけでは分からない「そのファイルが何者なのか」を知るための基本形です。
# 詳細情報付きで一覧表示する
$ ls -l
total 24
drwxr-xr-x 4 taro staff 128 7 1 09:12 src
-rw-r--r-- 1 taro staff 2048 7 3 18:30 index.html
-rwxr-xr-x 1 taro staff 512 6 28 11:05 deploy.sh
lrwxr-xr-x 1 taro staff 11 7 4 14:20 latest -> index.html
-l の出力を1つずつ読み解く
この1行には多くの情報が詰まっています。index.html の行 -rw-r--r-- 1 taro staff 2048 7 3 18:30 index.html を例に、左から順に何を表しているのかを見ていきましょう。まず先頭の1文字はファイルの種類を表します。ふつうのファイルなら -、ディレクトリなら d、シンボリックリンクなら l になります。上の例で src の行が d で始まっているのはディレクトリだから、latest の行が l で始まっているのはリンクだから、というわけです。
先頭1文字に続く9文字(rw-r--r-- の部分)はパーミッション、つまりこのファイルに対して誰が何をできるかを表しています。この9文字は3文字ずつ3つのグループに分かれていて、順に「所有者(user)」「グループ(group)」「その他のユーザー(other)」の権限を示します。各グループの3文字は左から r(読み取り)・w(書き込み)・x(実行)を意味し、その権限があれば対応する文字が、なければ - が入ります。rw-r--r-- なら「所有者は読み書きでき、グループとその他は読み取りだけできる」という意味になります。
パーミッションのあとに続く数字(この行では 1)は、そのファイルへのハードリンクの数です。ディレクトリの場合はこの数がサブディレクトリの数などによって変わりますが、ふだんの利用ではあまり気にする必要はありません。その次の taro がファイルの所有者、staff が所属グループです。続く 2048 はファイルサイズで、単位はバイトです。そのあとの 7 3 18:30 が最終更新日時(この例では7月3日18時30分)、そして最後にファイル名 index.html が来ます。各列の意味を表にまとめておきます。
| 列(左から) | 意味 |
|---|---|
| 先頭1文字 | ファイルの種類(- 通常ファイル / d ディレクトリ / l シンボリックリンク) |
| 続く9文字 | 所有者・グループ・その他の順に r(読)w(書)x(実行)の権限 |
| 数字 | ハードリンクの数 |
| 1つ目の名前 | ファイルの所有者(ユーザー名) |
| 2つ目の名前 | 所属するグループ名 |
| 数字(サイズ) | ファイルサイズ(バイト単位) |
| 日付・時刻 | 最終更新日時 |
| 末尾 | ファイル名・ディレクトリ名 |
隠しファイルを表示する -a と -A
Linux や macOS では、名前が .(ドット)で始まるファイル・ディレクトリは「隠しファイル」として扱われ、通常の ls では表示されません。.gitignore や .env、設定ファイルの多くがこれに当たります。これらを含めてすべて表示したいときは -a(all の頭文字)を付けます。
# 隠しファイルも含めてすべて表示する
$ ls -a
. .. .env .gitignore index.html src
出力の先頭に現れる . と .. は、それぞれ「カレントディレクトリ自身」と「1つ上の親ディレクトリ」を指す特別なエントリです。この2つは表示されても実用上あまり意味がないことが多く、隠しファイルだけを見たい場合は -A(大文字)を使うと . と .. を除いて表示してくれます。設定ファイルの有無を確認したいときは -A のほうがすっきりします。
# . と .. を除いて隠しファイルを表示する
$ ls -A
.env .gitignore index.html src
サイズを読みやすくする -h
-l で表示されるサイズはバイト単位のため、大きなファイルだと桁が多くて直感的に把握しづらくなります。そこで -h(human-readable、人間が読みやすい形式)を組み合わせると、1.5K や 2.3M、4.0G のように、キロ・メガ・ギガといった単位付きで表示してくれます。-h は単独では効果がなく、サイズを表示する -l と一緒に -lh の形で使うのが基本です。この -h は GNU 版・BSD(macOS)版のどちらでも使えます。
# サイズを単位付きの読みやすい形式で表示する
$ ls -lh
total 24
-rw-r--r-- 1 taro staff 2.0K 7 3 18:30 index.html
-rw-r--r-- 1 taro staff 1.5M 7 4 10:00 photo.jpg
-rw-r--r-- 1 taro staff 4.0G 7 2 22:15 archive.zip
並び順を変える -t・-r・-S
ls は既定では名前順に並べますが、並び順を変えるオプションも用意されています。よく使うのは更新時刻順の -t(time)で、これを付けると新しく更新されたファイルほど上に来ます。「さっき編集したファイルはどれだったか」を探すときに便利です。-r(reverse)は並び順を逆にするオプションで、単独では名前の降順(Z→A)になりますが、他の並び替えオプションと組み合わせるとその逆順になります。-S(大文字、Size)はファイルサイズの大きい順に並べ、容量を食っているファイルを探すのに向いています。
| オプション | 並び順 |
|---|---|
-t | 更新時刻の新しい順 |
-S | ファイルサイズの大きい順 |
-r | 並び順を逆にする(他の並び替えと組み合わせて使うことが多い) |
| (なし) | 名前順(アルファベット順) |
実際には -t と -r を組み合わせた ls -ltr という形が定番です。これは「更新時刻順に、しかも逆順で(=古い順に)詳細表示する」という意味で、いちばん新しく更新されたファイルが画面の一番下に来ます。ログのように次々と追記・更新されるファイルを扱うディレクトリでは、最新のものがスクロールせずに見える位置に来るため重宝します。
# 更新時刻の新しい順(上ほど新しい)
$ ls -lt
# 更新時刻順を逆にして、一番新しいものを最下部に表示する(定番)
$ ls -ltr
# サイズの大きい順に読みやすい単位付きで表示する
$ ls -lhS
表示の形を変えるオプション
並び順以外にも、表示のされ方そのものを変えるオプションがいくつかあります。-R(大文字、Recursive)はサブディレクトリの中まで再帰的にたどって、階層全体のファイルを一覧表示します。ディレクトリ構造をまとめて把握したいときに使えますが、深い階層だと出力が膨大になるので注意が必要です。-1(数字のイチ)は1行につき1件だけ表示するオプションで、出力を他のコマンドにパイプで渡すときや、ファイル名を縦一列で確認したいときに便利です。
# サブディレクトリの中まで再帰的に表示する
$ ls -R
# 1行に1件ずつ表示する
$ ls -1
deploy.sh
index.html
src
style.css
ディレクトリ自体の情報を見る -d
ls にディレクトリ名を渡すと、通常はその「中身」が表示されます。しかし -d(directory)を付けると、中身ではなくディレクトリそのものの情報が表示されます。ls -ld ディレクトリ名 とすれば、そのディレクトリ自体のパーミッションや所有者を確認できます。ディレクトリの権限を調べたいときの定番の形です。
# src ディレクトリの中身ではなく、src 自体の情報を表示する
$ ls -ld src
drwxr-xr-x 4 taro staff 128 7 1 09:12 src
種類を記号で示す -F と inode を見る -i
-F(classify)を付けると、名前の末尾にファイルの種類を示す記号が付きます。ディレクトリには /、実行可能ファイルには *、シンボリックリンクには @ が付くため、-l を使わなくてもパッと種類を見分けられます。また -i(inode)を付けると、各ファイルに割り当てられた inode 番号(ファイルシステム上でファイルを識別する内部的な番号)が先頭に表示されます。ふだんはあまり使いませんが、ハードリンクで同じ実体を指しているファイルを見分けたいときなどに役立ちます。
# 種類を示す記号を付けて表示する(/ はディレクトリ、* は実行可能)
$ ls -F
deploy.sh* index.html src/ style.css
# inode 番号を先頭に付けて表示する
$ ls -i
8412345 deploy.sh 8412346 index.html 8412300 src
ここまでに出てきたオプションを、あらためて一覧にまとめておきます。ls のオプションは大文字と小文字で意味が違うもの(-a と -A、-s と -S など)があるため、そこだけ注意してください。
| オプション | 意味 |
|---|---|
-l | パーミッション・所有者・サイズ・日時などの詳細を1行ずつ表示する |
-a | 隠しファイル(. で始まる名前)も含めてすべて表示する |
-A | . と .. を除いて隠しファイルを表示する |
-h | サイズを K・M・G 付きの読みやすい形式にする(-l と併用) |
-t | 更新時刻の新しい順に並べる |
-r | 並び順を逆にする |
-S | ファイルサイズの大きい順に並べる |
-R | サブディレクトリの中まで再帰的に表示する |
-1 | 1行につき1件だけ表示する |
-d | ディレクトリの中身ではなく、ディレクトリ自体の情報を表示する |
-F | 名前の末尾に種類を示す記号(/ * @ など)を付ける |
-i | inode 番号を表示する |
よく使う組み合わせとエイリアス
ls のオプションは、ls -l -a のように別々に書くだけでなく、ls -la のようにまとめて1つにつなげて書けます。日常でよく使う組み合わせはだいたい決まっていて、覚えておくと入力が速くなります。とくに ls -la(詳細+隠しファイル)と ls -lh(詳細+読みやすいサイズ)、そして先ほど紹介した ls -ltr(新しい順で最下部に最新)は、使う場面が多い代表的な組み合わせです。
| 組み合わせ | 意味 |
|---|---|
ls -la | 隠しファイルも含めて詳細表示する |
ls -lh | サイズを読みやすい単位付きで詳細表示する |
ls -ltr | 更新の古い順に詳細表示(最新が一番下に来る) |
ls -lah | 隠しファイルも含め、読みやすいサイズで詳細表示する |
よく使う組み合わせは、シェルのエイリアスとして短い名前に登録しておくと便利です。エイリアスはコマンドに別名を付ける仕組みで、~/.bashrc や ~/.zshrc といった設定ファイルに書いておくと、ターミナルを起動するたびに有効になります。たとえば ll と打つだけで ls -la が実行されるようにする、といった具合です。多くの Linux ディストリビューションでは、ll が最初から登録されていることもあります。
# ll と打つと ls -la が実行されるようにする
alias ll='ls -la'
# lt で更新順に見られるようにする
alias lt='ls -ltrh'
設定ファイルを書き換えたあとは、source ~/.bashrc のように読み込み直すか、ターミナルを開き直すと反映されます。自分がよく打つ組み合わせを見つけたら、エイリアスにしておくと日々の作業がぐっと快適になります。
ワイルドカードで絞り込む
ls はワイルドカードと組み合わせると、特定のパターンに一致するファイルだけを一覧表示できます。ワイルドカードのうちもっともよく使う *(アスタリスク)は「任意の文字列(0文字以上)」を表します。たとえば *.txt と書けば「.txt で終わるすべてのファイル」に一致します。? は「任意の1文字」を表し、[abc] のように角かっこで囲むと「その中のいずれか1文字」に一致します。
# 拡張子が .txt のファイルだけを一覧表示する
$ ls *.txt
memo.txt todo.txt
# img で始まるファイルを詳細表示する
$ ls -l img*
# 1文字だけ違うファイルをまとめて見る(file1.log, file2.log ...)
$ ls file?.log
ここで一つ知っておきたいのは、このワイルドカードを展開しているのは ls 自身ではなくシェルだということです。ls *.txt と打つと、シェルがまず *.txt を実際のファイル名(memo.txt todo.txt)に置き換えてから ls に渡します。つまり ls から見ればファイル名を直接並べて渡されたのと同じことになります。この仕組みは ls に限らず多くのコマンドで共通なので、覚えておくと応用が利きます。
GNU(Linux)と BSD(macOS)の違い
ここまで紹介した基本的なオプション(-l・-a・-t・-r・-S・-R・-d・-F・-i・-1)や、サイズを読みやすくする -h は、Linux で使われる GNU 版でも、macOS で使われる BSD 版でも共通して使えます。そのため日常的な用途では、どちらの環境でもほぼ同じ感覚で ls を使えます。
細かい違いとして分かりやすいのが、ファイルの種類を色分けして表示するオプションです。GNU 版では --color オプション(--color=auto のように指定)を使いますが、BSD(macOS)版にはこの --color はなく、代わりに -G を付けると色付き表示になります。多くの環境では、この色付けが最初からエイリアスとして設定されていて意識せずに使えていますが、自分で設定するときはこの違いに注意が必要です。また、日付の表示形式や桁揃えなど、細かな出力の見た目も両者で少しずつ異なります。
# GNU(Linux)で色付き表示にする
$ ls --color=auto
# BSD(macOS)で色付き表示にする
$ ls -G
もし macOS で GNU 版の ls を使いたい場合は、Homebrew で coreutils を導入すると gls という名前で GNU 版を利用できます。とはいえ、多くの人にとっては標準の ls で十分事足りるはずです。手元の ls がどのオプションに対応しているかは、man ls でマニュアルを開いて確認するのが確実です。
まとめ
ls はファイル一覧を表示するだけのシンプルなコマンドですが、オプションを組み合わせることで「詳しく見る」「隠しファイルも出す」「新しい順に並べる」といった多彩な表示ができます。まずは引数なしの ls と、詳細表示の ls -l、そして -l の出力で先頭の種類とパーミッションを読めるようになることが第一歩です。そこから ls -la・ls -lh・ls -ltr といった定番の組み合わせを手に馴染ませ、よく使う形はエイリアスに登録していくと、ターミナルでの作業効率は着実に上がっていきます。オプションの正確な仕様や環境ごとの違いに迷ったら、man ls で手元のマニュアルを確認する習慣をつけておくと安心です。