ディレクトリとファイルを区別する(従来の方法)

従来、lsコマンドの説明をする際には前回紹介した「-a」と「-l」の2つのオプションと、「-F」というオプションが取り上げられることが多かった。まずは、今回初めて登場する「-F」について簡単に説明しておきたい。

例えば、次のようにlsコマンドでルートディレクトリ直下のディレクトリ/ファイルの一覧を取得したとしよう。

lsコマンドで取得したルートディレクトリ直下のディレクトリ/ファイルの一覧

ご覧のとおり、画面上では表示されたのがディレクトリなのかファイルなのかがわからない。lsコマンド実行時に-lオプションを指定すれば、これが判別できるようになるのは前回説明したとおりだ。表示されるリストの最初の文字が「d」ならディレクトリ、「-」ならファイルである。

-lオプションを指定すれば、ディレクトリ/ファイルが詳細情報とともに表示される

ただし、「-l」を指定するとファイルの所有者やサイズ、最終更新日時といったデータも表示される。ディレクトリなのかファイルなのかだけを知りたい場合には冗長だ。

そんな時に使えるオプションが「-F」である。このオプションを指定すると、対象がディレクトリの場合には名前の後ろにスラッシュ(/)が付くようになる。

-Fオプションを指定すると、ディレクトリは名前の後ろにスラッシュが付くようになる

これが、これまで一般的に紹介されていたディレクトリとファイルのシンプルな見分け方だ。しかし、白黒ディスプレイをほとんど使うことがない現在ならば、-Fオプションよりももっと良い方法がある。ディレクトリやファイルといった種類ごとに、色付けして表示させれば一目瞭然だ。

ディレクトリとファイルを区別する(”ナウい方法”)

実は、最近のlsコマンドはディレクトリやファイルごとに色を変えて表示する機能を持っている。この機能は実装によってオプションや設定方法が異なるため、OSごとに設定する必要があるのだが、ここではCentOSなどのLinuxディストリビューションで使われていることが多いGNU Coreutilsのlsコマンドと、Mac OS X/FreeBSDのlsコマンドの方法を紹介しよう(Mac OS XのUNIXコマンドのほとんどはFreeBSDから持ってきているため、同じコマンドが使えるのだ)。

まず、GNU Coreutilsのlsコマンドならば、オプション「—color」を指定することで表示の種類ごとに色が付くようになる。

GNU Coreutilsのlsコマンドならば、オプション「—color」を指定すると、表示に色が付く

Mac OS X/FreeBSDのlsコマンドならば、オプション「-G」だ。

Mac OS X/FreeBSDのlsコマンドならば、オプション「-G」を指定すると、表示に色が付く

表示する色の指定は、環境変数の設定で行う。設定値の詳細については割愛するが、GNU Coreutilsでは環境変数「LS_COLORS」の値を設定することになる。例えば、次のように設定した場合、表示色が画面のように変更される。

ここで使っている「export」は、環境変数を設定したり、表示したりするためのコマンドだ

Mac OS X/FreeBSDならば、環境変数「LSCOLORS」を次のように設定すると、画面のような配色になる。

呪文のように見えるが、前から順に2文字1セットでディレクトリ名、ファイル名などの色を指定している

ここで、「そもそも色を変更する必要があるのか?」という話なのだが、これが結構必要なケースがあるのだ。主な理由を挙げてみよう。

  • 設定色がターミナル画面上で見づらい。これは、ターミナル・アプリケーションの変更などで発生しやすい
  • ログインする環境ごとに表示される色が変わるとまぎらわしいので、同じ配色に統一しておきたい

些細なことのようだが、この2点が意外と大きな理由になる。文字が読みづらかったり、表示色がしっくりこなかったりすると、ストレスがたまるし、作業効率にも影響する。

ディレクトリ名の最後にスラッシュが付くより、表示自体が色分けされたほうが直感的でわかりやすい。標準規約がないので、環境によって指定するオプションが異なる点は残念なところだが、ぜひこの色付け機能は押さえておいてほしい。

“ナウい方法”をあらかじめ設定しておく

さて、色付けが便利なのは良いが、使用頻度の高いlsコマンドで毎回オプションを指定するのは面倒くさい。これは、インタラクティブシェルの「alias(エイリアス)」という機能を使うと解消できる。LinuxディストリビューションやMac OS Xではインタラクティブシェルとしてbashが使われているので、bashのエイリアス機能を使えばよいだろう。なお、bash以外ではzshが使われることが多い。

CentOSの場合、次の画面のように「alias ls=”ls —color”」と入力して実行する。

lsコマンド実行時、常に—colorオプションが使われるようにする(CentOSの場合)

Mac OS X/FreeBSDならば、同じ要領で「alias ls=”ls -G”」を実行すればよい。

便利になるとは言え、ログインするたびに毎回入力するのはやはり面倒なので、これらのエイリアスもログイン時に自動実行されるように設定しておきたい。そこで、インタラクティブシェルにbashを使っているなら~/.bashrcに次のような設定を追加しておく。


export LS_COLORS='di=32:ln=35:so=01:pi=33:ex=31:bd=46;34:cd=43;34:su=41;30:sg=46;30:tw=42;30:ow=43;30'
alias ls="ls --color"

もしzshを使っているなら、~/.zshrcに次のような設定を追加する。


export LSCOLORS=cxFxCxdxBxegedabagacad
alias ls="ls -G"

色の指定についてはlsコマンドのマニュアルに書いてあるので、そちらを参考にしていただきたい。色の見やすさは人によって違うので、いろいろ変えて好みの設定を見つけるとよいだろう。

今回のおさらい

今回のおさらいは次のとおりだ。

  • lsコマンドの出力には、色を付けることができる
  • Linuxディストリビューションの場合、lsコマンドで出力される表示に色を付けるにはオプション「—color」を指定する
  • Linuxディストリビューションの場合、lsコマンドで出力される表示の色を変えるには環境変数「LS_COLORS」の値を変更する
  • Mac OS X/FreeBSDの場合、lsコマンドで出力される表示に色を付けるにはオプション「-G」を指定する
  • Mac OS X/FreeBSDの場合、lsコマンドで出力される表示の色を変えるには環境変数「LSCOLORS」の値を変更する
  • エイリアスを使えば、オプションを常に有効にできる

実は、ディレクトリとファイルだけではなく、ファイルの種類(普通のファイル、特殊なファイル、シンボリックリンク・ファイルなど)も色によって区別できる。こちらについてもいずれ紹介したい。この色付けは、単純ながら一度使い始めるとやめられないくらい便利な機能なので、ぜひとも活用していただきたい。