1

Я использую оболочку Bash в Ubuntu точно.

Я неравнодушен к символическим ссылкам в bash, даже когда жесткая ссылка имеет больше смысла, потому что их легче идентифицировать с помощью ls. Напротив, для жестких ссылок мне нужно визуально сравнить номера инодов. Это более громоздко по сравнению с выводом ls для мягкой ссылки, которая показывает цель с помощью «->» и может применять другую схему окраски. Есть ли способ сделать так, чтобы ls визуально отличал жесткие ссылки от "обычных файлов"? Например, возможно, по-разному раскрасить файлы со счетчиком ссылок больше 1?

Я понимаю, что вопрос сформулирован неправильно, так как концептуально жесткая ссылка - это просто другое имя для inode, и поэтому оно неотличимо от "обычного файла", и что нет понятия цели, как в символических ссылках, но вы понимаете мой вариант использования.

1 ответ1

3

Вывод 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

My (BSD/OS X) ls не имеет опций, связанных с жесткими ссылками, но вы можете написать свою собственную функцию оболочки, например, следующую, которая печатает только количество жестких ссылок, а в противном случае ls -F1 (если ls -l слишком громоздка ):

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

Вывод для двух жестких ссылок и несвязанного файла qux:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .