UNIX/Linuxの部屋 treeコマンドの使い方

TOP UNIX/Linuxの部屋 UNIX/Linuxコマンド一覧 用語集 新版 由来/読み方辞書 環境変数マニュアル Cシェル変数 システム設定ファイル システムコール・ライブラリ ネットワークプログラミングの基礎知識 クラウドサービス徹底比較・徹底解説




コマンド tree ファイル・ディレクトリをツリー形式で表示する このエントリーをはてなブックマークに追加

tree コマンドを使うと、ファイル・ディレクトリをツリー形式で表示することができる。


tree コマンドの基本的な使い方
tree コマンドの引数にディレクトリを渡すことで、下記のようにファイル・ディレクトリのツリー表示を行う。
% tree /usr
/usr/
|-- X11R6
| |-- bin
| | |-- ccmakedep
| | |-- (略)
| | |-- xcursor-config
| | `-- xmkmf
| |-- etc
| | |-- fonts
| | | `-- fonts.dtd
| | `-- rc.d
(略)
12405 directories, 70185 files
下記のように、複数のディレクトリを指定してもよい。
% tree /bin /usr/bin
引数なしで実行した場合は、カレントディレクトリ以下をツリー表示する。

tree コマンドのオプション: 出力対象指定系
  • -a オプション: ドットから始まるファイル (ドットファイル) も出力対象とする。
  • -d オプション: ディレクトリのみ出力対象とする。
  • -L オプション: 何階層目までディレクトリを降りるかを指定する
% tree -L 1 /usr
⇒ -L オプションで、1階層目までしか降りないよう指定
/usr/
|-- X11R6
|-- bin
|-- compat
(略)
|-- share
|-- src
`-- sup

tree コマンドのオプション: 表示系
  • -f オプション: フルパスで表示する
% tree -f /
/
|-- /bin
| |-- /bin/alsaunmute
| |-- /bin/arch
| |-- /bin/awk -> gawk
| |-- /bin/basename
(略)
  • -i オプション: 罫線を表示しない
-f オプションと組み合わせると、find コマンドのような表示となる。
% tree -fi
/
/bin
/bin/alsaunmute
/bin/arch
/bin/awk -> gawk
/bin/basename

tree コマンドのオプション: ファイル情報系
  • -s オプション: ファイル・ディレクトリのサイズを表示する。
% tree -s /
/
|-- [ 4096] bin
| |-- [ 123] alsaunmute
| |-- [ 27776] arch
| |-- [ 4] awk -> gawk
| |-- [ 26264] basename
  • -h オプション: -s と同様にファイルサイズを表示するが、12K・23M・34G などとわかりやすい表示にする
% tree -h /
/
|-- [4.0K] bin
| |-- [ 123] alsaunmute
| |-- [ 27K] arch
| |-- [ 4] awk -> gawk
| |-- [ 26K] basename
  • -u オプション: ファイルオーナーを表示する
% tree -u /
/
|-- [root ] bin
| |-- [root ] alsaunmute
| |-- [root ] arch
| |-- [root ] awk -> gawk
| |-- [root ] basename
  • -g オプション: ファイルグループを表示する
% tree -g /
/
|-- [root ] bin
| |-- [root ] alsaunmute
| |-- [root ] arch
| |-- [root ] awk -> gawk
| |-- [root ] basename
  • -p オプション: パーミッションを表示する
% tree -p /
/
|-- [dr-xr-xr-x] bin
| |-- [-rwxr-xr-x] alsaunmute
| |-- [-rwxr-xr-x] arch
| |-- [lrwxrwxrwx] awk -> gawk
  • -D オプション: タイムスタンプを表示する
% tree -D /
/
|-- [Mar 29 4:17] bin
| |-- [Mar 24 2016] alsaunmute
| |-- [May 11 2016] arch
| |-- [Dec 1 13:09] awk -> gawk
| |-- [May 11 2016] basename
  • --inodes オプション: i-node を表示する
% tree --inodes /
/
|-- [4456449] bin
| |-- [4459639] alsaunmute
| |-- [4456520] arch
| |-- [4456536] awk -> gawk
| |-- [4456550] basename

以下は、i-node・ファイルサイズ・オーナー・グループ・タイムスタンプ・パーミッションを表示した例である。tree コマンドでは、例えば先頭にファイルサイズを、といった指定はできないようである。
% tree --inodes -sugDp /
/
|-- [4456449 dr-xr-xr-x root root 4096 Mar 29 4:17] bin
| |-- [4459639 -rwxr-xr-x root root 123 Mar 24 2016] alsaunmute
| |-- [4456520 -rwxr-xr-x root root 27776 May 11 2016] arch
| |-- [4456536 lrwxrwxrwx root root 4 Dec 1 13:09] awk -> gawk
| |-- [4456550 -rwxr-xr-x root root 26264 May 11 2016] basename

tree コマンドのオプション: ソート順指定
tree コマンドのデフォルトソート順は、ファイル・ディレクトリ名の ASCII 順でソート、である。変更したい場合は以下のオプションを使う。
▷ -t オプション: タイムスタンプの降順でソートする (新しいものが先)
▷ -r オプション: ファイル名の逆順でソートする (Z→A の順)

tree コマンドの文字化け対策
tree コマンドが文字化けする環境があるようだ (当ページ管理人は CentOS 6.8 で確認)。
% tree /
/
├ bin
│??├─ alsaunmute
│??├─ arch
│??├─ awk -> gawk
│??├─ basename
どうやら tree コマンドが locale を使ってよい感じの罫線を出そうとしているらしく、下記のように tree --charset オプションか、locale を C にすることで文字化けを解消できた。
% tree --charset=C /
% env LC_ALL=C tree /

UNIX における tree コマンド
当ページ管理人は、tree コマンドは MS-DOS バージョン4〜5 あたり(?) で登場した TREE.COM が起源だと認識している。一方、伝統的な UNIX には tree というコマンドは存在しなかった。その理由は「find コマンドで用が足りるから」という単純なものであろう。さらに言うと、tree コマンドのように出力内容に縦棒・横棒などが含まれると、人間にとっては見やすいが、パイプ経由で他のコマンドが処理をすることが難しくなってしまう。おおげさに表現するなら、tree は UNIX の思想とも言えるパイプを否定するコマンドと言える。

UNIX 界における tree コマンドの歴史は浅く、2004年ごろ(?) Linux 向けに tree コマンドが開発され、2007年現在では FreeBSD などでも利用可能となっている。しかし Solaris・HP-UX など商用の UNIX においては、ソースからコンパイルしない限り tree コマンドを使うことはできないと思われる。

関連コマンド
tree コマンド以外でファイルの一覧を表示するには、ls コマンドや find を使うとよい。また、stat コマンドでファイルの詳細情報を表示できる。