LinuxやUnix系OSのコマンドラインを操作する際、ディレクトリの中に何があるかを確認することは最も基本的な作業です。そのために日常的に使われるのが、ファイルやディレクトリの一覧を表示するls(list)コマンドです。
しかし、単にファイル名を表示するだけでなく、詳細な権限(パーミッション)の確認、隠しファイルの表示、更新日時順やサイズ順でのソートなど、オプションを使いこなすことで作業効率は劇的に向上します。
本記事では、lsコマンドの基本的な使い方から、実務で頻出するオプションの組み合わせ、LinuxとmacOSでの仕様の違い、指示された「よく使うオプション(-la, -lh, -t, -R)やソート・色付け」、そして安全に運用するためのベストプラクティスまでを実例付きで徹底解説します。
ls コマンド 頻出オプション早見表
実務でよく使われるlsコマンドのオプションと、その組み合わせを一覧表にまとめました。目的のコマンドがすぐ見つからない場合は、ここから該当する項目を確認してください。
| コマンド例 | 主な用途と効果 |
|---|---|
ls -l |
詳細情報(パーミッション、所有者、サイズ、更新日時)を表示する |
ls -a |
隠しファイル(.で始まるファイル)も含めてすべて表示する |
ls -la |
隠しファイルを含むすべてのファイルを詳細表示する(実務で最も頻出) |
ls -lh |
ファイルサイズをKB、MB、GBなどの分かりやすい単位で表示する(-lと併用) |
ls -lt |
最終更新日時が新しい順(降順)に並べ替えて詳細表示する |
ls -ltr |
最終更新日時が古い順(昇順)に並べ替える(最新ファイルが一番下にくる) |
ls -lS |
ファイルサイズが大きい順(降順)に並べ替えて詳細表示する |
ls -d */ |
ディレクトリの中身ではなく、ディレクトリ自体のみを表示する |
ls -R |
サブディレクトリの中身も含めて再帰的に一覧表示する |
ls -F |
ファイル名の末尾に識別記号(ディレクトリは/、実行ファイルは*など)を付与する |
ls コマンドの基本構文
lsコマンドの基本構文は以下の通りです。
ls [オプション] [ファイルまたはディレクトリ...]
1. 引数なしで実行する
オプションやパスを指定せずに実行すると、現在作業しているディレクトリ(カレントディレクトリ)内のファイルとディレクトリ名を一覧表示します。
ls
出力例:
documents downloads script.sh readme.txt
2. 対象ディレクトリを指定して実行する
lsの後に特定のディレクトリパスを指定すると、そのディレクトリの内部を表示します。
ls /var/log
-l オプションで詳細表示:各列の読み方
-l(long format)オプションを使用すると、ファイルやディレクトリの名前だけでなく、権限や所有者、ファイルサイズ、更新日時などの詳細な一覧を取得できます。
ls -l
出力例:
drwxr-xr-x 2 user group 4096 Jul 9 18:02 documents
-rwxr-xr-x 1 user group 8192 Aug 11 09:15 script.sh
-rw-r--r-- 1 user group 124 Aug 11 09:16 readme.txt
lrwxrwxrwx 1 user group 25 Aug 11 09:20 link.txt -> readme.txt
表示される各列の意味は、次の表の通りです。
| 列番号 | 表示例 | 意味・解説 |
|---|---|---|
| 1 | -rwxr-xr-x |
ファイル種別(先頭1文字) + アクセス権限(残り9文字) |
| 2 | 1 |
ハードリンクの数(ディレクトリの場合は内包するサブディレクトリ数) |
| 3 | user |
所有ユーザー名 |
| 4 | group |
所有グループ名 |
| 5 | 8192 |
ファイルサイズ(バイト単位。-hオプションで見やすく変更可能) |
| 6 | Aug 11 09:15 |
最終更新日時 |
| 7 | script.sh |
ファイル名またはディレクトリ名(シンボリックリンクの場合は矢印でリンク先を表示) |
ファイル種別(先頭の1文字)の判別
詳細表示の1列目の先頭文字は、オブジェクトの種類を表しています。
-:通常のファイルd:ディレクトリ(directory)l:シンボリックリンク(symbolic link)c:キャラクターデバイスファイル(キーボードやターミナルなど)b:ブロックデバイスファイル(HDDやSSDなどのストレージ)s:ソケット(socket)p:名前付きパイプ(named pipe)
アクセス権限(パーミッション)の読み方
種別記号に続く9文字(例:rwxr-xr-x)は、3文字ずつ区切って権限を表しています。
- 最初の3文字(
rwx):所有ユーザー(Owner)の権限 - 真ん中の3文字(
r-x):所有グループ(Group)のメンバーの権限 - 最後の3文字(
r-x):その他のユーザー(Others)の権限
アクセス権限を表す記号の意味は以下の通りです。
r(read):読み取り権限(数値では4)w(write):書き込み・編集権限(数値では2)x(execute):実行権限(ディレクトリの場合はアクセス権限、数値では1)-:権限なし(数値では0)
例えば、rwxr-xr-x は数値で表すと「755」となります。権限を数値や記号で変更したい場合は、chmodコマンドの使い方|パーミッション変更コマンドの使い方と数値一覧を参考にしてください。
実務で役立つ!主要オプション解説と実行例
1. 隠しファイルを表示する(-a / -A)
Linux環境では、ファイル名がドット(.)で始まるファイルやディレクトリは「隠しファイル(ドットファイル)」として扱われ、通常のlsでは表示されません。これらを表示するには-aオプションを使用します。
ls -a
-aを指定すると、カレントディレクトリを示す.と親ディレクトリを示す..も出力に含まれます。これらを除外して、純粋な隠しファイルと通常ファイルだけを表示したい場合は、大文字の-Aを使用します。
ls -A
詳細表示と組み合わせたls -laやls -lAは、ホームディレクトリ直下の環境設定ファイル(.bashrcや.ssh/など)を確認する際に多用されます。
2. ファイルサイズを読みやすくする(-h)
デフォルトの詳細表示(-l)では、ファイルサイズがバイト単位の整数で表示されるため、数メガバイトや数ギガバイトある大きなファイルのサイズを目視で計算するのは困難です。-h(human-readable)オプションを指定すると、自動的にKB、MB、GBといった読みやすい単位に変換して表示します。
ls -lh
出力例:
-rw-r--r-- 1 user group 1.2K Aug 11 09:16 memo.txt
-rw-r--r-- 1 user group 45M Aug 11 09:18 backup.tar.gz
なお、ディレクトリ自体の消費容量を集計したい場合は、lsではなくdf・duコマンドの使い方を活用する方が適しています。
3. 表示順序をソートする(-t / -S / -r)
デフォルトでは、ファイルは名前順(アルファベット順)に並んで表示されます。ソートオプションを使うことで、特定の属性順に表示を並べ替えることができます。
- 最終更新日時の新しい順(降順)にする場合:
-tオプションを指定します。ls -lt - ファイルサイズの大きい順(降順)にする場合:
-S(大文字)オプションを指定します。ls -lhS - 並び順を逆にする(昇順)場合:
-r(reverse)オプションを指定します。ls -lrt-ltr(または-lrt)のように-tと-rを組み合わせると、「更新日時が古い順」に並びます。この結果、最新の更新ファイルがターミナル画面の一番下に表示されるため、ログファイルや直前に出力されたファイルを確認したいときに非常に重宝します。
4. ディレクトリ構造を再帰的に確認する(-R)
-R(recursive)オプションを使用すると、指定したディレクトリ内のファイルだけでなく、その配下にあるすべてのサブディレクトリの内部も再帰的に走査して表示します。
ls -R
※配下のファイル数が膨大である場合、出力がターミナルを埋め尽くしてしまうため注意が必要です。視覚的に階層構造をわかりやすく把握したい場合は、treeコマンドの使い方|READMEに使える表示術【Linux/Mac】を使用することをおすすめします。
5. ファイルとディレクトリを見分ける(-F / –color)
出力された一覧で、どれがファイルでどれがディレクトリかを視覚的に判別したい場合に便利なオプションです。
- 色分け表示:
--color=auto(Linux)または-G(macOS)を指定します。ファイル種別(実行ファイル、ディレクトリ、シンボリックリンクなど)ごとに異なる色で出力されます。ls --color=auto - 識別記号の付与:
-Fオプションを指定すると、ファイル名の末尾に種類に応じた記号が付きます。/:ディレクトリ*:実行可能ファイル@:シンボリックリンク|:FIFOパイプ=:ソケット
ls -F
特定の用途で使う応用オプション
1. inode(アイノード)番号を表示する(-i)
Linuxのファイルシステム上で、ファイルやディレクトリを識別する管理番号である「inode番号」を表示します。
ls -i
ハードリンクが同じ実体を指しているかどうかの確認や、ファイル名が文字化けして通常のコマンドで削除できないファイルをinode番号指定で削除する場合などに使用されます。
2. 1行に1ファイルずつ表示する(-1)
出力を1列(1行に1つのファイル名のみ)で表示します。
ls -1
ターミナル上での表示だけでなく、ファイル名のリストを他のコマンド(xargsやループ処理)へパイプで引き渡す際に役立ちます。
3. ディレクトリを先頭に集めて表示する(–group-directories-first)
GNU coreutils版(Linux標準)のlsで使用できる便利なオプションで、アルファベット順のソートを維持したまま、ディレクトリをファイルよりも先にまとめて表示します。
ls -l --group-directories-first
4. 時刻表示フォーマットを統一する(–time-style)
通常、ls -lの時刻表示は「最近更新されたものは時間表示、古いものは年表示」のように動的に切り替わりますが、--time-styleを使用すると、常に指定したフォーマット(例:2026-08-11 18:00:00)で出力できます。
ls -l --time-style="+%Y-%m-%d %H:%M:%S"
ログ解析スクリプトなどで、日時の表記崩れを防ぎたい場合に非常に有効です。
Linux(GNU版)と macOS(BSD版)の違い
lsコマンドは標準的なツールですが、Linuxで採用されているGNU coreutils版と、macOSで標準採用されているBSD版では、サポートされているオプションにいくつかの相違点があります。
| 機能 | GNU/Linux (標準) | macOS (標準BSD) |
|---|---|---|
| 色分け表示の指定 | --color=auto (または --color) |
-G (または環境変数 CLICOLOR=1) |
| ディレクトリを先頭にソート | --group-directories-first (対応) |
非対応 (指定不可) |
ロングオプション (--allなど) |
対応 | 基本的に非対応 (ハイフン1つのショートオプションのみ) |
| 日付のフォーマット変更 | --time-style (対応) |
非対応 (代わりに -T オプションで詳細時間表示) |
macOS環境でLinuxと同じGNU版のlsコマンドを使いたい場合は、Homebrewからcoreutilsパッケージをインストールすることで、glsコマンドとして利用できるようになります。
brew install coreutils
gls -lh --group-directories-first --color=auto
ls コマンド使用時の注意点とベストプラクティス
1. エイリアス(Alias)の設定と確認
多くのLinuxディストリビューションでは、初期設定でlsに対してエイリアス(別名設定)が登録されています。例えば、ターミナルでlsと打っただけで自動的に色分けされるのは、alias ls='ls --color=auto' が設定されているためです。
また、よく使われる ll というコマンドも、実際は alias ll='ls -alF' などのエイリアスであることがほとんどです。自身の環境でどのようなエイリアスが設定されているかは、以下のコマンドで確認できます。
alias ls
alias ll
エイリアスを一時的に無効化し、システム標準の純粋なlsを実行したい場合は、コマンドの先頭にバックスラッシュ(\)を付けます。
\ls
2. 【重要】シェルスクリプト内で ls の出力をパースしてはいけない
シェルスクリプトを作成する際、「ディレクトリ内のファイルをループで処理したい」という目的で、以下のような書き方をしてしまう初心者が後を絶ちません。
# 非推奨のバッドノウハウ(バグの原因)
for file in $(ls); do
echo "$file"
done
この書き方は絶対に避けてください。 理由は、ファイル名に半角スペースや改行が含まれている場合、lsの出力結果がスペースで分割され、1つのファイル名が複数の要素として誤認されてしまうためです。予期せぬファイルの誤削除やデータ破損を引き起こす致命的なバグの原因になります。
スクリプト内でファイル一覧を安全に処理したい場合は、シェルのワイルドカード展開(Globbing)を使用するか、findコマンドやstatコマンドを使用するのが安全なベストプラクティスです。
# 安全な推奨パターン(ワイルドカードを使用)
for file in *; do
# ファイルが存在するか確認(空ディレクトリ対策)
[ -e "$file" ] || continue
echo "$file"
done
条件を絞り込んでファイル一覧を取得したい場合は、findコマンドの使い方と応用例を参照してください。
ls コマンドでよくあるエラーと対処法
| エラーメッセージ例 | 発生原因 | 対処方法 |
|---|---|---|
ls: cannot access 'path': No such file or directory |
指定したファイルまたはディレクトリのパスが存在しない、またはスペルミスがある。 | パスが正しいか、またはpwdコマンドで現在のカレントディレクトリを確認してください。 |
ls: cannot open directory 'path': Permission denied |
指定したディレクトリの読み取り権限、またはそこに至る親ディレクトリの実行権限がない。 | ls -ldで権限を確認し、必要に応じてsudoを実行するか、chmodで権限を付与します。 |
まとめ
lsコマンドは、コマンドライン操作において最初に出会う基本的なツールですが、その真価は豊富なオプション群にあります。
まずは、最もよく使われる ls -la(隠しファイルを含む全詳細表示)と ls -ltr(更新日時が古い順ソート)をマスターしましょう。さらに、サイズ表記を見やすくする -h、サイズ順ソートの -S などの違いを覚えておけば、ディスク容量の確認やトラブルシューティング時にも迅速に対応できるようになります。
また、シェルスクリプトで利用する際はlsのパースは避け、ワイルドカード展開やfindを使用するというプロのベストプラクティスを意識して、より安全で効率的なLinuxライフを送ってください。

コメント