MENU

ファイル一覧を更新日時・バージョン順に並べ替えて素早く確認する方法

サーバー上で「直近に変わったファイルはどれか」「バックアップログを古い順に確認したい」という場面は多くあります。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.txtlog10.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.1syslog.9 や、番号付きバックアップファイルを扱う現場でよく使われます。

注意:-v は GNU coreutils の機能です。macOS 標準の ls(BSD版)では動作しません。macOS で同じ結果を得るには brew install coreutilsgls を導入してください。

アクセス日時で並べ替えてキャッシュや設定ファイルの参照状況を確認する

ls -lut はファイルの最終アクセス日時(atime)を基準にソートします。「どの設定ファイルが最近読まれたか」「キャッシュが実際に参照されているか」の確認に使えます。

# アクセス日時の新しい順
ls -lut /var/cache/

# アクセス日時を表示しつつ更新日時順に並べる(比較したい場合)
ls -l --time=atime /etc/

注意:近年のLinuxシステムでは、ディスクI/Oを減らすために noatimerelatime マウントオプションが使われているケースがあります。その場合、アクセス日時が更新されないため -u での確認が意味を持ちません。事前に /proc/mounts でマウントオプションを確認してから使ってください。

# ルートパーティションのマウントオプションを確認する
grep ' / ' /proc/mounts

他のコマンドと組み合わせた実務パターン

ソートオプション単独だけでなく、headtail と組み合わせると効率が大きく上がります。

# 最近更新された上位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 coreutilsgls を導入し、alias ls='gls --color=auto' を設定しておくと環境差を吸収できます。

<PR>この記事に関連するおすすめ書籍

[試して理解]Linuxのしくみ 増補改訂版

プロセス・ファイルシステム・権限などLinuxの内部構造を図解で理解できる一冊。運用判断の勘所が腑に落ちます。

「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。

ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。

>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)

※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次