Как я могу найти разницу между папкой и ссылкой на папку в Ubuntu?
Ранее я создал несколько ссылок на другую папку, используя следующую команду.
sudo ln -s path_name link_name
Эти ссылки похожи на папки. Я не могу отличить папку от ссылки. Есть ли способ найти разницу между папкой и ссылкой на другую папку?
4 ответа
Вы можете узнать ссылку по маленькой стрелке (->
) на выходе ls -l
:
или по выделенному цвету, также появляющемуся на выходе ls
как описано в этом ответе (test2
это ссылка):
Есть много способов увидеть это. Прежде всего, это указано в выводе ls -l
, Обратите внимание, что каталог имеет d
в начале поля разрешений, в то время как ссылка имеет l
:
$ ls -l
drwxr-xr-x 2 terdon terdon 4096 Feb 13 14:12 bar
lrwxrwxrwx 1 terdon terdon 3 Feb 13 14:12 foo -> bar
Вы также можете использовать file
:
$ file bar foo
bar: directory
foo: symbolic link to `bar'
Другой выбор readlink
который следует за символическими ссылками на их цели:
$ readlink foo
bar
Бег readlink bar
не вернет никакого вывода (он завершится неудачно, вернет код выхода, отличный от 0), так что вы можете сделать что-то вроде:
readlink bar || echo "Not a link!"
или же
readlink foo && "Echo this is a link"
Наконец, вы также можете использовать find
или сама оболочка для перечисления всех ссылок:
find . -type l
или же
for f in *; do [ -L "$f" ] && echo "$f is a link"; done
Читать man [
(или же man test
) и вы увидите, что вы можете сделать:
for theDir in path_name link_name ; do
if [ -L $theDir ] ; then
echo "$theDir exists and is a symbolic link"
elif [ -d $theDir ] ; then
echo "$theDir exists and is a directory"
fi
done
Я изменил порядок тестов, поэтому проверка каталога выполняется только в том случае, если $theDir
это не ссылка.
Использование ls -F
,
это заставит ls добавлять символы в имена файлов
*
для исполняемых файлов
/
для каталогов
@
для символических ссылок **
|
для FIFO
>
для дверей (что бы это ни значило)
=
для розеток
обычные файлы не имеют классификатора в конце. Так что в вашем случае вы увидите @
в конце каждого имени символической ссылки и /
в конце реального каталога.
Однако, если вы используете ls -l
вы не увидите классификаторы для символических ссылок, а вместо этого вы увидите ->
и связать цель после этого.
Вы также можете использовать stat
а также file
различать dirs/ символические ссылки, например:
$ file a
a: directory
$ file b
b: symbolic link to a
$ stat a
File: 'a'
Size: 40 Blocks: 0 IO Block: 4096 directory
[...]
$ stat b
File: 'b' -> 'a'
Size: 1 Blocks: 0 IO Block: 4096 symbolic link
[...]