bash:: визуально различая жесткие ссылки на ls
Я использую оболочку bash в Ubuntu точно.
Я неравнодушен к символическим ссылкам в bash, даже когда жесткие ссылки имеют больше смысла, потому что их легче идентифицировать с помощью ls. Напротив, для жестких ссылок мне нужно визуально сравнить номера инодов. Это более громоздко по сравнению с выводом 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 -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)