Linux や UNIX でファイル表示をする時に使用する「ls」コマンドですが、私はずっと alias で「-F」オプションを付けて来ました。このオプションを付けると、表示名称の最後に、ディレクトリなら「/」、シンボリックリンクなら「@」、実行可能 (x 属性) ファイルなら「*」等の記号表示が付くので便利な為です。
他にはどんな記号が有るのか ubuntu の man コマンドで調べたところ、つれない答え。
-F, --classify append indicator (one of */=>@|) to entries
Google 検索しても答が出て来ないので、ソースコードを読むことに。結論から書くと、次の通り。
記号 | ファイルシステム |
---|---|
* | 実行可能属性 (x) の付いた通常ファイル |
/ | ディレクトリ |
= | ソケット |
> | Door (現状で実装されているのは Solaris のみ) |
@ | シンボリックリンク |
| | FIFO |
ソースコードには GNU 版と BSD 版が有るそうですが、今回は GNU 版を読むことに。早速ソースコードのダウンロードです。
git clone git://git.sv.gnu.org/coreutils
coreutils/src の下に ls.c というファイルが有ります。「filetype」の文字列で検索すると有りました。4825行目の「get_type_indicator」関数の中。
分からなかった「|」は fifo、「=」は socket、「>」は door でした。
まず、fifo は mkfifo コマンドで簡単に作成出来るらしい。次のページを参照させて頂きました。
次に、socket ファイル。これには Python コマンドが必要らしい。次のページを参照させて頂きました。
最後に doors ファイル。Wikipedia によると、これは Solaris でしか実装されていないらしい。
では早速、自分の WSL 上の ubuntu 環境で実験です。
touch myexecutable chmod +x myexecutable mkdir mydirectory python -c "import socket as s; sock = s.socket(s.AF_UNIX); sock.bind('mysocket')" ln -s ../ mysymboliclink mkfifo myfifo /usr/bin/ls -F
おぉぉ、確かに。次の通り表示されました。
mydirectory/ myexecutable* myfifo| mysocket= mysymboliclink@