bash :: ls でハードリンクを視覚的に区別する

bash :: ls でハードリンクを視覚的に区別する

使っていますバッシュUbuntu のシェルは正確です。

私はシンボリックリンクバッシュたとえハードリンクより容易に識別できるため、より意味があるだろうls対照的に、ハードリンク視覚的に比較する必要があるiノード数値。これは、lsソフトリンクでは、ターゲットが「-->」で表示され、異なる色分けを適用できます。lsハードリンクを「通常のファイル」と視覚的に区別しますか? たとえば、参照カウントが 1 を超えるファイルを異なる色で表示するなどでしょうか?

ハード リンクは概念的には inode の別名に過ぎず、「通常のファイル」と区別がつかず、シンボリック リンクのようなターゲットの概念も存在しないため、質問が正しく構成されていないことは理解していますが、私の使用例はご理解いただけると思います。

答え1

ls -l出力には、権限と所有者間のファイルシステムエントリへのハードリンクの数が表示されます。

$ mkdir foo
$ ls -ld foo
drwxr-xr-x  2 danielbeck  staff  68 15 Aug 18:49 foo

2空のディレクトリの場合はデフォルトで になりますfoo/.fooサブディレクトリごとに が追加されます..。OS X を使用していて正気かどうか疑わしい場合を除き、これが取得できる唯一のディレクトリ ハード リンクです。

もちろん、ファイルには「実際の」ハード リンクのみが表示されるため、それ以外1の場合はどこかにハード リンクがあることを示します。

$ touch bar
$ ln bar baz
$ ls -l bar baz
-rw-r--r--  2 danielbeck  staff  0 15 Aug 18:52 bar
-rw-r--r--  2 danielbeck  staff  0 15 Aug 18:52 baz

私の (BSD/OS X)にはハード リンクに関連するオプションはありませんが、次のように、ハード リンクの数だけを出力し、それ以外の場合は(面倒すぎる場合は)ls出力する独自のシェル関数を作成できます。ls -F1ls -l

function lss {
    OLDIFS="$IFS"
    IFS=$'\n'
    for line in $( ls -d1 $@ )
        do stat -f '%N%T (%l)' "$line"
    done
    IFS="$OLDIFS"
}

2 つのハードリンクと無関係なファイルの出力qux:

$ lss bar baz qux
bar (2)
baz (2)
qux (1)

関連情報