サーバー上で「直近に変わったファイルはどれか」「バックアップログを古い順に確認したい」という場面は多くあります。ls のソートオプションを適切に選べば、目的のファイルを素早く絞り込めます。まず、よく使うパターンをまとめて示します。
# 更新日時の新しい順(最近変わったファイルを探す)
ls -lt
# 更新日時の古い順(最初に作られたものから見る)
ls -lrt
# バージョン番号順(自然順ソート)
ls -lv
# アクセス日時の新しい順(最近参照されたファイルを探す)
ls -lut
更新日時で並べ替えてデプロイ後の変更を確認する
デプロイ作業や設定変更のあとに「どのファイルが書き換わったか」を素早く確認するには ls -lt が便利です。タイムスタンプの新しいものが先頭に来るため、変更されたファイルが一目でわかります。
ls -lt /etc/nginx/
出力例:
合計 32
-rw-r--r-- 1 root root 1234 Jul 18 14:22 nginx.conf
-rw-r--r-- 1 root root 512 Jul 15 09:10 default.conf
drwxr-xr-x 2 root root 4096 Jul 10 11:00 conf.d/
-rw-r--r-- 1 root root 800 Jun 30 08:45 mime.types
古い順(昇順)にしたい場合は -r(逆順)を加えます。ある運用現場では、定期バッチが正しく動いているかを確認するため ls -lrt /var/log/batch/ を使い、最後に実行されたログファイルを末尾で確認する運用が定着しています。
# 最も古いファイルが先頭、最新が末尾に来る
ls -lrt /var/log/batch/
番号付きファイルをバージョン順に正しく並べる
デフォルトのアルファベット順ソートでは、log9.txt が log10.txt より後ろに来てしまいます。これは文字コード順(辞書順)の問題で、数字が2桁になると並び順が崩れます。
# デフォルトの並び(辞書順 ─ 9が10より後ろになる)
ls -l
# log1.txt log10.txt log2.txt log9.txt
# バージョン順(自然順ソート)で正しく並ぶ
ls -lv
# log1.txt log2.txt log9.txt log10.txt
-v オプションは GNU coreutils の ls が持つ「バージョン番号順ソート(自然順ソート)」で、数字部分を数値として比較します。ログローテーションで生成される syslog.1〜syslog.9 や、番号付きバックアップファイルを扱う現場でよく使われます。
注意:-v は GNU coreutils の機能です。macOS 標準の ls(BSD版)では動作しません。macOS で同じ結果を得るには brew install coreutils で gls を導入してください。
アクセス日時で並べ替えてキャッシュや設定ファイルの参照状況を確認する
ls -lut はファイルの最終アクセス日時(atime)を基準にソートします。「どの設定ファイルが最近読まれたか」「キャッシュが実際に参照されているか」の確認に使えます。
# アクセス日時の新しい順
ls -lut /var/cache/
# アクセス日時を表示しつつ更新日時順に並べる(比較したい場合)
ls -l --time=atime /etc/
注意:近年のLinuxシステムでは、ディスクI/Oを減らすために noatime や relatime マウントオプションが使われているケースがあります。その場合、アクセス日時が更新されないため -u での確認が意味を持ちません。事前に /proc/mounts でマウントオプションを確認してから使ってください。
# ルートパーティションのマウントオプションを確認する
grep ' / ' /proc/mounts
他のコマンドと組み合わせた実務パターン
ソートオプション単独だけでなく、head や tail と組み合わせると効率が大きく上がります。
# 最近更新された上位10ファイルだけ確認する(ヘッダー行を含め11行)
ls -lt /var/log/ | head -n 11
# 最も古いファイルを末尾3件確認する
ls -lt /var/log/ | tail -n 3
# サブディレクトリを含め更新日時順に探したい場合は find と組み合わせる
find /etc/ -maxdepth 2 -type f -printf '%T@ %p\n' | sort -rn | head -20 | awk '{print $2}'
ある運用現場では、デプロイスクリプトの末尾に ls -lt /app/releases/ | head -n 6 を仕込み、最新5世代のリリースディレクトリが正しく存在するかをワンラインで確認する運用が定着しています。ファイル数が多いディレクトリで ls -lt だけ実行すると出力が流れてしまうため、head との組み合わせは必須といえます。
よくある落とし穴と環境ごとの注意点
ファイル数が多いとソートに時間がかかる
ファイル数が数万を超えるディレクトリでは ls -lt の応答が遅くなります。その場合は find に -mtime を組み合わせて先に絞り込むほうが速いです。
# 過去1日以内に更新されたファイルだけ探す
find /var/log/ -maxdepth 1 -type f -mtime -1 -ls | sort -k8,9
シンボリックリンクのタイムスタンプに注意ls -lt はシンボリックリンク自体のタイムスタンプを見るため、リンク先ファイルが更新されてもシンボリックリンクの日時は変わりません。実体ファイルの更新日時を確認するには -L(リンクを辿る)を追加します。
# シンボリックリンク先ファイルの更新日時で並べ替える
ls -ltL /etc/alternatives/
macOS(BSD ls)との違い
macOS の標準 ls は GNU coreutils ではなく BSD 版のため、-v(バージョン順ソート)は使えません。LinuxサーバーとMacの両方で作業する場合は、macOS に brew install coreutils で gls を導入し、alias ls='gls --color=auto' を設定しておくと環境差を吸収できます。
「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。
ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。
>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)
※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。
