Bashプログラミング
 Computer >> コンピューター >  >> プログラミング >> Bashプログラミング

Unixの「ls」コマンド徹底活用ガイド:効率的なファイル管理に役立つ15の実践例

Unixユーザーやシステム管理者にとって、「ls」は欠かせない基本コマンドです。1日に10回でも100回でも使う、たった2文字のコマンドですが、そのオプションを使いこなせるようになると、コマンドラインでの作業が格段に快適になります。

本記事では、強力なlsコマンドの実践的な使い方を15個の例に分けて解説します。

1. 最後に編集したファイルを開く(ls -t)

現在のディレクトリで最後に編集したファイルを素早く開くには、ls・head・viを組み合わせます。

ls -tはファイルを更新日時順に並べ替え、最も新しく編集されたファイルを先頭に表示します。head -1がその先頭行(=最新ファイル名)を取り出します。

$ vi first-long-file.txt
$ vi second-long-file.txt
$ vi `ls -t | head -1`
[補足:最後に編集したファイル(second-long-file.txt)が開きます]

2. ファイルを1行に1つずつ表示する(ls -1)

エントリを1行に1つずつ縦に並べて表示したい場合は、-1オプションを使用します。スクリプト処理や他のコマンドとの組み合わせにも便利です。

$ ls -1
bin
boot
cdrom
dev
etc
home
initrd
initrd.img
lib

3. ファイルやディレクトリの詳細情報を表示する(ls -l)

-lオプションを付けると、ロングフォーマット(長い一覧形式)で詳細情報が表示されます。

$ ls -l
-rw-r----- 1 ramesh team-dev 9275204 Jun 13 15:27 mthesaur.txt.gz
  • 先頭の1文字目 ─ ファイルタイプ: ファイルの種類を示します。上の例ではハイフン(-)なので通常ファイルです。主な種類は以下のとおりです。
    • - : 通常ファイル
    • d : ディレクトリ
    • l : シンボリックリンク
    • s : ソケットファイル
    • p : 名前付きパイプ(FIFO)
    • b / c : ブロック/キャラクタデバイス
  • フィールド1 ─ アクセス権限: 続く9文字がパーミッションを表します。3文字ずつが所有者・グループ・その他のユーザーに対する読み込み(r)・書き込み(w)・実行(x)権限です。例の-rw-r-----は、所有者は読み書き可能、グループは読み取りのみ、その他はアクセス不可という意味になります。
  • フィールド2 ─ リンク数: そのファイルへのリンク数です。例では「1」なのでリンクは1つだけです。
  • フィールド3 ─ 所有者: ファイルの所有者名です。例では「ramesh」です。
  • フィールド4 ─ グループ: ファイルが属するグループ名です。例では「team-dev」です。
  • フィールド5 ─ サイズ: ファイルサイズ(バイト単位)です。例では「9275204」バイトです。
  • フィールド6 ─ 最終更新日時: 最後に変更された日時です。例では「Jun 13 15:27」です。
  • フィールド7 ─ ファイル名: 最後のフィールドがファイル名です。例ではmthesaur.txt.gzです。

4. 人間が読みやすい単位でサイズを表示する(ls -lh)

-hオプション(human readableの略)を付けると、サイズがK(KB)・M(MB)・G(GB)といった見やすい単位で表示されます。

$ ls -l
-rw-r----- 1 ramesh team-dev 9275204 Jun 12 15:27 arch-linux.txt.gz*
$ ls -lh
-rw-r----- 1 ramesh team-dev 8.9M Jun 12 15:27 arch-linux.txt.gz

5. ディレクトリ自体の情報を表示する(ls -ld)

「ls -l」は通常、ディレクトリの中身の一覧を表示します。しかし、ディレクトリそのものの情報を確認したい場合は-dオプションを組み合わせます。例えば、ls -l /etcは/etc配下の全ファイルを表示しますが、/etcディレクトリ自身の情報を見たい場合は次のようにします。

$ ls -ld /etc
drwxr-xr-x 21 root root 4096 Jun 15 07:02 /etc

6. 更新日時の新しい順に並べる(ls -lt)

-tオプションを付けると、最終更新時刻の新しい順にソートされます。-lオプションと組み合わせて使うと実用的です。

$ ls -lt
total 76
drwxrwxrwt 14 root root 4096 Jun 22 07:36 tmp
drwxr-xr-x 121 root root 4096 Jun 22 07:05 etc
drwxr-xr-x 13 root root 13780 Jun 22 07:04 dev
drwxr-xr-x 13 root root 4096 Jun 20 23:12 root
drwxr-xr-x 12 root root 4096 Jun 18 08:31 home
drwxr-xr-x 2 root root 4096 May 17 21:21 sbin
lrwxrwxrwx 1 root root 11 May 17 20:29 cdrom -> media/cdrom
drwx------ 2 root root 16384 May 17 20:29 lost+found
drwxr-xr-x 15 root root 4096 Jul 2 2008 var

7. 更新日時の古い順に並べる(ls -ltr)

-rオプションを加えたls -ltrは、更新日時の逆順(古いものから)に表示します。こうすると、最も新しく編集したファイルが必ずリストの最終行に来るため、出力が画面を超えてスクロールする場合でもすぐに確認できて便利です。筆者も普段からlsの代わりにls -ltrを使っています。

$ ls -ltr
total 76
drwxr-xr-x 15 root root 4096 Jul 2 2008 var
drwx------ 2 root root 16384 May 17 20:29 lost+found
lrwxrwxrwx 1 root root 11 May 17 20:29 cdrom -> media/cdrom
drwxr-xr-x 2 root root 4096 May 17 21:21 sbin
drwxr-xr-x 12 root root 4096 Jun 18 08:31 home
drwxr-xr-x 13 root root 4096 Jun 20 23:12 root
drwxr-xr-x 13 root root 13780 Jun 22 07:04 dev
drwxr-xr-x 121 root root 4096 Jun 22 07:05 etc
drwxrwxrwt 14 root root 4096 Jun 22 07:36 tmp

8. 隠しファイルを表示する(ls -a または ls -A)

Unixでは、ファイル名がドット(.)で始まるものが隠しファイルとして扱われます。すべての隠しファイルを含めて表示するには-aオプションを使います。

$ ls -a
. Debian-Info.txt
.. CentOS-Info.txt
.bash_history Fedora-Info.txt
.bash_logout .lftp
.bash_profile libiconv-1.11.tar.tar
.bashrc libssh2-0.12-1.2.el4.rf.i386.rpm

-aではカレントディレクトリを表す「.」と親ディレクトリを表す「..」も一緒に表示されます。これらを除いて隠しファイルだけを表示したい場合は、-Aオプションを使用します。

$ ls -A
Debian-Info.txt Fedora-Info.txt
CentOS-Info.txt Red-Hat-Info.txt
.bash_history SUSE-Info.txt
.bash_logout .lftp
.bash_profile libiconv-1.11.tar.tar
.bashrc libssh2-0.12-1.2.el4.rf.i386.rpm
[補足:「.」と「..」は表示されません]

9. サブディレクトリまで再帰的に表示する(ls -R)

-Rオプションを使うと、サブディレクトリの中身まで再帰的に一覧表示できます。

$ ls /etc/sysconfig/networking
devices profiles
$ ls -R /etc/sysconfig/networking
/etc/sysconfig/networking:
devices profiles
/etc/sysconfig/networking/devices:
/etc/sysconfig/networking/profiles:
default
/etc/sysconfig/networking/profiles/default:

なお、ルートディレクトリ(/)で実行すると、ファイルシステム全体の非隠しファイルが再帰的に表示されるため注意してください。

10. inode番号を表示する(ls -i)

メンテナンス作業などでファイルのinode番号を知りたい場合は、-iオプションを使用します。inode番号を利用すると、findコマンドの応用例のように、特殊文字を含む名前のファイルを削除する際にも役立ちます。

$ ls -i /etc/xinetd.d/
279694 chargen 279724 cups-lpd 279697 daytime-udp
279695 chargen-udp 279696 daytime 279698 echo

11. 制御文字を疑問符で置き換えて表示する(ls -q)

グラフィカルに表示できない非印字制御文字を、疑問符(?)に置き換えて出力したい場合は-qオプションを使います。

$ ls -q

12. UIDとGIDを数値で表示する(ls -n)

-nオプションは-lと同じ形式で一覧表示しますが、所有者名とグループ名の代わりに、UID(ユーザーID)とGID(グループID)を数値で表示します。

$ ls -l ~/.bash_profile
-rw-r--r-- 1 ramesh ramesh 909 Feb 8 11:48 /home/ramesh/.bash_profile
$ ls -n ~/.bash_profile
-rw-r--r-- 1 511 511 909 Feb 8 11:48 /home/ramesh/.bash_profile
[補足:UIDとGIDがそれぞれ511と表示されています]

13. 特殊文字でファイルの種類を視覚的に判別する(ls -F)

「ls -l」の出力の先頭文字を確認してファイル種類を判断する代わりに、-Fオプションを使えば、ファイルの種類ごとに特殊文字が付加され、一目で判別できます。

$ ls -F
Desktop/ Documents/ Ubuntu-App@ firstfile Music/ Public/ Templates/

上記の出力での記号の意味は次のとおりです。

  • / : ディレクトリ
  • 記号なし : 通常ファイル
  • @ : シンボリックリンク
  • * : 実行可能ファイル

14. 色でファイルの種類を判別する(ls --color=auto)

表示色によってファイルの種類を識別する方法もあります。--color=autoオプションを付けると、ディレクトリは青、シンボリックリンクは緑、通常ファイルはデフォルト色で表示され、種類の判別が容易になります。

$ ls --color=auto
Desktop Documents Examples firstfile Music Pictures Public Templates Videos

15. 便利なlsコマンドのエイリアス設定

これまで紹介したオプションの組み合わせは、エイリアスとして登録しておくとさらに便利です。以下のような設定をおすすめします。

  • 人間が読みやすいサイズ形式でロング一覧を表示する場合:
    alias ll="ls -lh"
  • 特殊文字でファイル種類を判別できるようにする場合:
    alias lv="ls -F"
  • 色と特殊文字の両方でファイル種類を判別できるようにする場合:
    alias ls="ls -F --color=auto"

あわせて読みたい関連記事

以下の「15の実践例」シリーズ記事も参考になるでしょう。

  • Grepをマスターしよう ─ 15の実践Grepコマンド例
  • Linux Crontab入門 ─ 役立つCronジョブの15の例
  • Linux Findコマンドの実践例15選
  • Linuxコマンドライン履歴を極める15のテクニック
  1. MongoDBのパフォーマンスを監視するための6つの必須ツール

    以前、Ubuntu 18.04にMongoDBをインストールする方法をご紹介しました。データベースのデプロイが完了したら、次は運用中のパフォーマンスを継続的に監視することが重要になります。これはデータベース管理業務の中でも最も重要なタスクの一つです。 幸い、MongoDBにはパフォーマンスやアクティビティを取得するためのさまざまな手段が用意されています。本記事では、稼働中のMongoDBインスタンスの状態に関する統計情報をレポートするための監視ユーティリティとデータベースコマンドを紹介します。 1. mongostat mongostatは、Linux、FreeBSD、Solaris、macO

  2. screenFetchとNeofetchでLinuxシステム情報を美しく表示・共有する方法

    自分のLinux環境の設定を他の人と共有したい理由はさまざまです。システムのトラブルシューティングで助けを求めたい場合もあれば、自分が作り上げたデスクトップ環境を誇らしく思って、オープンソース愛好家の仲間に披露したい場合もあるでしょう。 cat /proc/cpuinfo や lscpu コマンドを使えば、一部の情報はBashプロンプトから取得できます。しかし、OS、カーネル、稼働時間(アップタイム)、シェル環境、画面解像度といったより詳細な情報をまとめて共有したいなら、「screenFetch」と「Neofetch」という2つの優れたツールがおすすめです。 ScreenFetchとは Scr