lsコマンドの使い方|ls -l の読み方とオプション全解説【LinuC Level1対応】

LinuC対策

この記事はLinuC Level1 主題1.02.2「基本的なファイル管理の実行」の出題範囲のうち、lstouchfile/ワイルドカードに関する問題を解くための要点解説です。試験で問われる範囲に絞り、最短で押さえるべき知識だけをまとめました。

同じ副主題1.02.2のうち、cpmvrmmkdirなどの基本操作は「基本的なファイル管理」、targzipbzip2xzddは「アーカイブと圧縮」の記事で扱います。模擬問題は3記事共通のプール(60問)からランダムに出題されるため、本記事末尾の演習では他コマンドも混ざって出ます。

📚 LinuC Level1 完全攻略マップ(全39サブ項目)へ戻る


目次

  1. この記事で押さえる要点
  2. lsの基本と主要オプション
  3. ls -l出力の読み方
  4. 隠しファイルと-a-Aの違い
  5. -d-ld:ディレクトリ自身を表示する
  6. -F:種別記号付きで表示する
  7. -R:再帰表示(-rとの違い)
  8. fileコマンド:ファイル種別を判定する
  9. touch:空ファイル作成とタイムスタンプ更新
  10. シェルのワイルドカード(*?[]
  11. 先頭がハイフンのファイル名を扱う方法
  12. よくある質問(FAQ)
  13. まとめ
  14. 模擬問題にチャレンジ(ランダム出題)

1. この記事で押さえる要点

LinuC 主題1.02.2のうち、本記事で扱う要点:

  • lsはディレクトリ一覧表示の標準コマンド(dirlistではない)
  • ✅ 隠しファイル表示は-a(...含む)/-A(それらを除く)
  • -lで詳細表示、-lhでサイズを人間可読に、-ldでディレクトリ自身の情報
  • -Fで種別記号(/*@|=)を末尾に表示
  • -R(大文字)は再帰表示、-r(小文字)は逆順ソート → 大文字小文字で役割が違う
  • fileはファイル内容から種別(テキスト/ELF/PNGなど)を判定する
  • touchは空ファイル作成+タイムスタンプ更新。-a(atime)/-m(mtime)/-t(時刻指定)
  • ✅ ワイルドカードは*(0文字以上)/?(任意1文字)/[abc](カッコ内のいずれか1文字)
  • ✅ 先頭が-のファイル名は--(オプション終了)か./(パス化)で扱う

2. lsの基本と主要オプション

ls(list)はディレクトリ内のファイルやディレクトリを一覧表示する標準コマンドです。listshowdirなどの名前で覚えている人もいますが、Linux標準はlsのみです(dirはGNU coreutilsに同梱の別名扱いで、試験ではlsが問われます)。

2-1. 主要オプション一覧

LinuC 1.02.2で狙われるオプションは次の通り。試験では組み合わせ(-la-ld-lh-ltrなど)で問われます。

オプション 意味 備考
-l 詳細表示(権限・所有者・サイズ・日時) 最頻出
-a すべて表示(...も含む) 隠しファイル含む
-A 隠しファイル表示(...を除く) スクリプト向き
-h サイズを人間可読(K/M/G)で表示 -lと併用
-d ディレクトリ自身を対象にする 中身を展開しない
-F ファイル種別の記号を末尾に付ける /*@|=
-R(大文字) サブディレクトリを再帰表示 深い階層の把握
-r(小文字) 並び順を逆にする -Rと役割が違う
-t 更新日時で新しい順にソート -ltrで古い順
-S サイズで大きい順にソート -lShで容量チェック

⚠️ 試験の引っかけ-R(再帰)と-r(逆順)は大文字と小文字で役割が完全に違うため、選択肢で並ぶと間違えやすいポイントです。

2-2. オプションはまとめて書ける

Unix系のコマンドでは複数オプションをひと塊にでき、順番も問いません。

# どれも同じ意味
$ ls -l -a -h
$ ls -lah
$ ls -hal
$ ls -la    # よく使う
$ ls -al    # -la と同一(順不同)

ls -lals -alはまったく同じ動作です。試験でも両方を正解として扱います。


3. ls -l出力の読み方

-lを付けた時の出力行は、以下のように分解して読みます。

$ ls -l
-rwxr-xr-x 1 user group   45 Apr 10 09:10 hello.sh
│└┬┘└┬┘└┬┘ │ └┬┘ └─┬─┘   └┬┘ └────┬────┘ └──┬──┘
│ │  │  │  │  │    │     │      │        └── ファイル名
│ │  │  │  │  │    │     │      └── 最終更新日時(mtime)
│ │  │  │  │  │    │     └── ファイルサイズ(バイト)
│ │  │  │  │  │    └── 所有グループ
│ │  │  │  │  └── 所有ユーザー
│ │  │  │  └── ハードリンク数
│ │  │  └── その他ユーザーの権限(r-x)
│ │  └── 所有グループの権限(r-x)
│ └── 所有ユーザーの権限(rwx)
└── ファイル種別(-通常/dディレクトリ/lシンボリックリンク/cbデバイスなど)

先頭1文字の種別と9文字のパーミッションは主題1.02.1で詳しく解説されるため、本記事ではls -lこれらの情報が出ることを押さえてください。

3-1. -lh:サイズを人間可読に

-l単体ではサイズがバイト単位で表示されます。-h(human-readable)を併用すると1.5K3.2M7.7Gのような読みやすい表記に変換されます。

$ ls -lh /var/log
-rw-r--r-- 1 root root 1.5M Apr 22 10:00 syslog
-rw-r--r-- 1 root root 3.2M Apr 22 10:00 auth.log

⚠️ オプションの紛れ込み:サイズ人間可読化は-hだけで、-m-k-Hではありません。-sはブロック数表示で別物です。


4. 隠しファイルと-a-Aの違い

Linuxの「隠しファイル」は、ファイル名の先頭が.(ドット)であるファイルのことです。OSの属性ではなく命名規則で、lsがデフォルトで非表示にしているだけです。

4-1. -a-A

オプション 通常ファイル .bashrc ...
(なし) × ×
-a
-A(大文字) ×
$ ls -a
.  ..  .bashrc  .vimrc  hello.sh  notes.txt

$ ls -A
.bashrc  .vimrc  hello.sh  notes.txt

どちらも「隠しファイルを表示する」オプションとして正しく、試験で両方を選ばせる設問も出ます。違いは.(カレント)と..(親)を含むかどうかです。スクリプト処理で自分自身と親を混ぜたくない時は-Aが安全です。

4-2. ...の正体

  • .(ドット1つ):カレントディレクトリそのもの
  • ..(ドット2つ):1つ上の親ディレクトリ

ディレクトリ作成時にOSが自動で作るエントリで、これらがあるからcd ..で親に戻ったり、./hello.shでカレントの実行ファイルを明示できたりします。


5. -d-ld:ディレクトリ自身を表示する

通常ls ディレクトリはそのディレクトリの中身を一覧します。しかし「/homeディレクトリ自体のパーミッションや所有者を知りたい」「中身を展開せずディレクトリのエントリだけ見たい」という場合は-dを付けます。

# 中身を表示(デフォルト)
$ ls /home
user  ubuntu

# /home ディレクトリ自身を表示
$ ls -d /home
/home

# 詳細表示で /home 自身の情報
$ ls -ld /home
drwxr-xr-x 4 root root 4096 Apr 10 12:00 /home

-ld(long + directory)は実務でも頻出で、ディレクトリのパーミッション確認の定番です。試験でも「ディレクトリ自身の詳細情報」と問われたら-ldを選びます(-la-l単体は中身まで展開されるので誤答)。


6. -F:種別記号付きで表示する

ターミナルの色表示が効かない場面(パイプやログ保存、白黒出力)でも種別を見分けたい時に使うのが-Fです。ファイル名の末尾に種別記号が付きます。

記号 種別
/ ディレクトリ
* 実行可能ファイル
@ シンボリックリンク
| FIFO(名前付きパイプ)
= ソケット
(なし) 通常ファイル
$ ls -F
Documents/  hello.sh*  latest@  notes.txt

Documentsはディレクトリ(/)、hello.shは実行可能(*)、latestはシンボリックリンク(@)、notes.txtは通常ファイル(記号なし)と一目で分かります。


7. -R:再帰表示(-rとの違い)

-R(大文字)はサブディレクトリの中身まで辿って表示する再帰表示です。ディレクトリツリー全体を文字列で見たい時に使います。

$ ls -R project
project:
src  tests

project/src:
main.py  utils.py

project/tests:
test_main.py

一方-r(小文字)は並び順を逆にするだけで、再帰ではありません。-trで「更新日時が古い順」、-Srで「サイズが小さい順」といった用途で使います。

⚠️ 試験の引っかけ:「再帰表示はどれか」と問われて-rを選ぶと誤り。大文字の-Rが正解です。


8. fileコマンド:ファイル種別を判定する

fileは、ファイルの内容(先頭バイト列やマジックナンバー)から種別を判定して表示する独立したコマンドです。拡張子に依存しないので、拡張子なしのファイルやリネームされたファイルでも正しく判別できます。

$ file hello.sh
hello.sh: Bourne-Again shell script, ASCII text executable

$ file photo.jpg
photo.jpg: JPEG image data, JFIF standard 1.01

$ file /bin/ls
/bin/ls: ELF 64-bit LSB pie executable, x86-64, ...

$ file report.pdf
report.pdf: PDF document, version 1.5

⚠️ 類似コマンドとの混同statはi-nodeやアクセス時刻などメタ情報の表示、whichはコマンドのパス検索、typeはシェル組み込み/エイリアスの判定です。「ファイル種別(テキスト・バイナリ・画像等)」と問われたらfileを選びます。


9. touch:空ファイル作成とタイムスタンプ更新

touchは2つの役割を持つコマンドです。

  1. 存在しないファイル名を指定空ファイルを新規作成
  2. 既存のファイル名を指定タイムスタンプを現在時刻に更新
# 1) 空ファイルを作る
$ touch empty.txt

# 2) 既存ファイルのタイムスタンプを現在時刻に更新
$ touch file.txt

試験では「空ファイル作成の最もシンプルなコマンド」「タイムスタンプ変更コマンド」の両方でtouchが正解として問われます。

9-1. タイムスタンプの種類

Linuxのファイルには3種類のタイムスタンプがあります。touchで更新できるのは前の2つです。

略称 名前 意味
atime access time 最終アクセス時刻(読み出し時に更新)
mtime modification time 最終修正時刻(内容を書き換えた時刻)
ctime change time メタ情報変更時刻(参考・touchでは直接指定できない)

9-2. -a-m:更新対象を絞る

touchのデフォルトはatimeとmtimeの両方を更新します。どちらか一方だけを更新したい場合のオプションが次の2つ。

オプション 更新対象
(なし) atimeとmtime両方を現在時刻に
-a atimeのみ
-m mtimeのみ
# mtime だけを現在時刻に
$ touch -m file.txt

# atime だけを現在時刻に
$ touch -a file.txt

9-3. -t:任意の時刻を指定する

-tで過去・未来の任意時刻を指定できます。フォーマットは固定で[[CC]YY]MMDDhhmm[.SS]です。

# 2012年1月1日 11:22:33 にatime・mtime両方を変更
$ touch -t 201201011122.33 file.txt

# アクセス時刻だけを 2012年1月1日 11:22:33 に
$ touch -a -t 201201011122.33 file.txt

# 修正時刻だけを 2012年1月1日 11:22:33 に
$ touch -m -t 201201011122.33 file.txt

2012年1月1日 11時22分33秒 → 201201011122.33の並びを読み解けるかが試験で問われます。年4桁+月2桁+日2桁+時2桁+分2桁+.+秒2桁の並びです(秒は省略可、2桁年CCYY省略可)。

⚠️ 似て非なる書式-dは人間可読の日付文字列(例: 2012-01-01 11:22:33)を受け取るオプションで、-tとは書式が違います。touch -atimetouch -Aのようなオプションは存在しません。


10. シェルのワイルドカード(*?[]

シェル(bashなど)には、ファイル名をパターンで指定できるワイルドカードが用意されています。ls *.txtのような書き方でおなじみですが、これはlsの機能ではなくシェルが展開してからコマンドに渡す仕組みです。

10-1. 3つの基本メタ文字

記号 マッチするもの
* 0文字以上の任意の文字列 *.txta.txt report.txt .txt
? 任意の1文字 file?.txtfile1.txt fileA.txt(file10.txtは不可)
[abc] カッコ内のいずれか1文字 [abc].txta.txt b.txt c.txt のみ
[a-z] 範囲指定(a〜zのいずれか1文字) [0-9]*.log
[!abc] カッコ内のいずれでもない1文字(否定) [!abc].txt

「ファイル名がabcのいずれか1文字」と問われたら[abc]?は任意の1文字、*は長さを問わずすべて、{a,b,c}はブレース展開という別の機能で試験の文脈では区別されます。

10-2. 展開はシェルが行う

ls *.txtは、シェルが先に*.txtを実ファイル名リストに展開し、lsに渡します。

# シェルが先に展開
$ ls *.txt
 ↓
$ ls notes.txt report.txt memo.txt

そのため、マッチするファイルが1つもないと展開に失敗し、「そのようなファイルはない」というエラーになります。これはlsが悪いのではなく、シェルの動作です。


11. 先頭がハイフンのファイル名を扱う方法

-100のようにハイフンで始まるファイル名を作ったり操作したりすると、多くのコマンドが「それはオプションだ」と解釈して失敗します。これを回避する書き方を押さえます。

11-1. 回避策は2つ

# 方法1: -- でオプションの終端を明示
$ touch -- -100

# 方法2: ./ を付けてパス形式にする
$ touch ./-100

--は「これ以降の引数はオプションとして解釈しない」というPOSIX標準の区切り記号で、多くのコマンドで有効です。./-100はカレントディレクトリ配下のファイルとしてパス扱いにする方法で、先頭に-が来なくなるので安全です。

11-2. うまくいかない書き方

# NG: クォートやエスケープでは解決しない
$ touch "-100"
$ touch \-100

クォートやバックスラッシュはシェルの展開を抑えるだけで、-100という引数自体はtouchに渡った後で「オプション扱い」されてしまいます。--または./の2択が確実です。削除する時も同様で、rm -- -100またはrm ./-100とします。


12. よくある質問(FAQ)

-r-Rの違いは?

lsでは役割が完全に別です。小文字-rは「並び順を逆にする」、大文字-Rは「サブディレクトリを再帰表示する」。試験では両方を選択肢に並べて引っかけてきます。なおcprmでは-r-Rはどちらも再帰の意味で等価という別ルールがあり、コマンドごとに意味が変わる点に注意してください。

-a-Aの違いは?

どちらも隠しファイルを表示します。違いは.(カレント)と..(親)を含むかどうか:-aは含む、-Aは除く、です。スクリプトで隠しファイルだけ処理したい場合は自分自身や親を含まない-Aが安全です。

ls -ldは何に使う?

ディレクトリ自身のパーミッション・所有者・日時を確認する時に使います。-dなしだと中のファイル一覧が表示されるため、/home/varのような特定ディレクトリの属性だけ見たい場合は-ldを使います。

filestatの違いは?

file中身のデータ形式(テキスト/画像/実行ファイルなど)を判定します。statはi-node番号・サイズ・atime/mtime/ctime・権限などのメタ情報を表示します。拡張子がなくても種別を知りたい時はfile、メタ情報を詳しく見たい時はstatです。

touch -tの日時書式が覚えられない

[[CC]YY]MMDDhhmm[.SS]の順で、秒はドット区切り。2012年1月1日 11時22分33秒なら201201011122.332012-01-01T11:22:33のような書式は-d用で、-tでは受け付けません。オプションを間違えるとエラーまたは意図しない挙動になります。

ワイルドカードはlsの機能?

違います。シェルがファイル名に展開してからコマンドに渡す仕組みです。そのためls *.txtcp *.txt /tmprm *.logと、あらゆるコマンドで同じルールが使えます。マッチ0件だと展開できずエラーになる点、および-aなしでは*は隠しファイルを含まない点(隠しファイルは明示的に.*と書く)に注意。

ハイフンで始まるファイルを削除するには?

rm -- -100rm ./-100を使います。そのままrm -100と書くと、rm-100をオプションとして解釈しようとして失敗します。クォートは効きません(rm "-100"も失敗)。


13. まとめ

  • lsはLinux標準の一覧表示コマンド(dirlistshowではない)
  • 隠しファイル表示-a(...含む)/-A(それらを除く)。両方が「隠しファイルを含める」オプションとして正解
  • サイズ表示-lでバイト、-lhでK/M/G。-hはhuman-readableだけを意味する
  • ディレクトリ自身を見るのは-d(中身を展開しない)。よく-ldで詳細表示と併用する
  • 種別記号-F/(ディレクトリ)/*(実行可能)/@(シンボリックリンク)/|(FIFO)/=(ソケット)
  • 再帰と逆順-R(大文字)が再帰、-r(小文字)が逆順。混同厳禁
  • fileはファイル内容から種別判定(テキスト/ELF/PNGなど)。stat(メタ情報)と区別
  • touch:空ファイル作成+atime/mtime更新。-a(atimeのみ)/-m(mtimeのみ)/-t [[CC]YY]MMDDhhmm[.SS]で時刻指定
  • ワイルドカード*(0文字以上)/?(任意1文字)/[abc](いずれか1文字)/[!abc](否定)。展開はシェルが行う
  • 先頭-のファイル名--(オプション終端)か./(パス化)で回避。クォートでは解決しない

📚 LinuC Level1 完全攻略マップから他の副主題の記事にも進めます。


14. 模擬問題にチャレンジ(ランダム出題)

ここまでの内容を本試験に近い形で確認できます。問題数を選んで「出題スタート」を押すと、主題1.02.2の問題プール(60問、cpmvrmtar等も含む)からランダムに出題されます。選択肢をクリック/タップすると、正誤と解説がその場で表示されます。

合格ライン目安:75%以上。本記事で扱わないcpmvmkdirrmの問題が出た場合は基本ファイル操作の記事(準備中)targzipbzip2xzddの問題はアーカイブと圧縮の記事(準備中)で確認できます。もっと幅広く解きたい場合はLinuC 模擬問題ポータルから他の分野にも挑戦できます。


おすすめの教材


Linux教科書 LPICレベル1

Linux教科書 LPICレベル1 Version 5.0対応(あずき本)

LinuC/LPIC Level1 の定番参考書。出題範囲全体を網羅。


Amazonで見る →

【ウズカレ式】1週間でLinuxの基本操作と管理・運用スキルが学べる講座

累計80,000人以上受講。LinuC Level1(101+102)を1週間で網羅。


Udemyで講座を見る →


関連記事

📚 LinuC Level1 完全攻略マップへ戻る
全39サブ項目のシラバス準拠マップから他の記事を探せます

Dockerの基礎を動画で体系的に学びませんか?

実務で使う基礎だけを3時間に凝縮。環境構築から丁寧に解説しています。

Udemy Docker入門講座 クーポン割引で講座を見る →

コメント

タイトルとURLをコピーしました