みねっちょのマイコン関係ブログ

組込開発系フリーソフトやハードの情報発信ブログ

Linux (UNIX) の ls コマンドの -F オプションの表示記号について調べてみた

LinuxUNIX でファイル表示をする時に使用する「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 コマンドで簡単に作成出来るらしい。次のページを参照させて頂きました。

qiita.com

 

次に、socket ファイル。これには Python コマンドが必要らしい。次のページを参照させて頂きました。

thr3a.hatenablog.com

 

最後に doors ファイル。Wikipedia によると、これは Solaris でしか実装されていないらしい。

ja.wikipedia.org

 

では早速、自分の 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@

Linux 関係の目次へ戻る