Как узнать, является ли папка символической ссылкой и как ее исправить, если она сломана?

28

Как узнать, есть ли у меня символическая ссылка, какой-либо ярлык или папка в Linux? Пожалуйста, смотрите следующий скриншот.

символическая ссылка в оболочке Linux

Как видите, lsкоманда выводит список объектов, некоторые из которых окрашены темно-синим цветом, а другие - голубым (голубым). Что это за объекты голубого цвета? Это настоящие символические ссылки?

Как видите, я не могу cdс тем, что называется HDD.

root@dm500hd:/# cd hdd
-sh: cd: can't cd to hdd

Я думаю, что он должен перенаправить, /media/hddи я заметил, что папка жесткого диска отсутствует.

Есть ли способ это исправить?

Обновление: вот результаты ls -alкоманды.

символическая ссылка в оболочке Linux 2

Как вы можете видеть, он говорит, hdd -> /media/hddи он окрашен в красный цвет. Означает ли это, что он сломан или что он смонтирован автоматически, то есть когда подключен физический жесткий диск?

Обновление: вот результат grep media /etc/auto*команды.

символическая ссылка в оболочке Linux 3

Что они /etc/auto.master:/media/netи /etc/auto.networkзаписи делают?

Вот результаты ls -Fal /mediaкоманды.

символическая ссылка в оболочке Linux 4

Это какая-то помощь? ...

Вот результаты statи fileкоманды, а также списки / USR и / бункера.

символическая ссылка в оболочке Linux 5

Помогает ли это мне каким-либо образом? ... помогает ли это вам? ...

С другой стороны, вы должны знать, что это STB на базе Linux с BusyBox, это встроенная система. Поэтому не все команды могут поддерживаться.

Обновление: последний снимок экрана с файлами и поддерживаемыми командами в / sbin и / usr / sbin.

символическая ссылка в оболочке Linux 6

Обновление: добавлен новый ресурс ...

Теперь я удалил этот старый общий ресурс и заново создал его с тем же именем, что и раньше, а также добавил второй общий ресурс. Так что теперь у меня есть два из них.

SHARES
remote share   local share
mydream        dream1
mydream2       dream2

LOCATIONS
remote        local
C:\mydream    /media/net/dream1
C:\mydream2   /media/net/dream2

Записи находятся в / media / net / dream1 / movie.

Кроме того, для общего ресурса dream2 я решил не монтировать его в качестве замены жесткого диска в Mount Manager, так как я подозреваю, что в качестве жесткого диска нельзя использовать более одного действия. Где бы это записать? В оба места? С удвоенной скоростью передачи данных? ... Я не думаю, что это возможно.

Поэтому по этой причине нет подпапки с именем movie для общего ресурса dream2. Только те, которые указаны как замена жесткого диска при создании, получают подпапку фильма.

Если я cdк hdd от root, то он идет /media/net/dream1. Если бы я , cdчтобы ..(родитель) оно восходит к root (/).

В корне ls -alдает hdd -> media/hdd. ls -al hddдает hdd -> media/hdd. ls -al mediaдает /media/net/dream1.

Кроме того , если я cdна /mediaесть другая hddсимволическая. Я не заметил этого раньше. Я думаю, что это создается автоматически при подключении общего ресурса. И если я cdк этому жесткому диску это идет /media/net/dream1.

Символическая ссылка hdd(/ hdd), которая указывает на другую hddсимволическую ссылку (/ media / hdd), которая, в свою очередь, указывает на общую папку (/ media / net / dream1)? ..... У меня кружится голова ...

Это было не так до версии 3.2.3 или, по крайней мере, 3.2.0 образа Enigma2.

Редактировать: По настройкам второй общий ресурс, который будет заменять жесткий диск, становится активным общим ресурсом для записи. В то же время общий ресурс, который ранее был задан в качестве замены жесткого диска, больше не активен, даже если для него по-прежнему установлено значение «да» (действует как замена жесткого диска).

Если dream1 был впервые использован в качестве замены жесткого диска («да», чтобы действовать в качестве замены), а затем dream2 настроен в качестве замены жесткого диска, он становится новым ресурсом для записи. Я все еще могу видеть и просматривать видеофайлы, хранящиеся в dream1, но больше не могу записывать в него. Если я хочу вернуться к использованию dream1 для записи, мне сначала нужно установить dream2 на «no» (перестать действовать как замену жесткого диска), а затем сбросить dream1 на «yes».

Так что нет, он не может записывать до двух акций одновременно. Один из них должен идти. Так что это либо dream1, либо dream2, а не оба. Хотя я должен упомянуть, что возможно записать более одной услуги (телевизионный канал), если они оба находятся на одном транспондере, если нет, вы получаете сообщение «нет свободного тюнера». Это STB только с одним тюнером.

Samir
источник
3
пожалуйста, не вставляйте скриншоты для текста. вместо этого скопируйте и вставьте текст и используйте теги pre или code или backticks для сохранения отступа / форматирования. и отредактируйте текст до минимума, необходимого для показа того, что вы пытаетесь показать. Кстати, одна проблема со скриншотами состоит в том, что крошечные шрифты становятся еще мельче - до степени нечитаемости - при просмотре на экранах с более высоким разрешением (например, 1920x1200 или 2566x1440) ... пиксели фиксированы, текст можно масштабировать.
Cas
@CraigSanders Sanders Ты высоко ... на резолюции! ;) Страшно слышу тебя парень! Я действительно не думал об этом аспекте этого. Спасибо за совет. Я постараюсь использовать блок кода в следующий раз.
Самир,
На ls -alсамом деле он показывает все файлы (-a) в длинном (-l) списке. Да, это дает мне больше информации, но помогает ли мне идентифицировать символическую ссылку? Если у него есть стрелка справа, я так и скажу, если это символическая ссылка? Другой идентификатор - это, очевидно, цветовой код, но некоторые из вас предполагают, что цвету нельзя доверять.
Самир,
Это больше не проблема. Я подключил общий ресурс Windows CIFS через плагин Mount Manager (Dreambox, Enigma 2, выпуск 3.2.3) и решил использовать его в качестве замены жесткого диска. После этого ls -alкоманда показала hdd -> media/hdd. И теперь это возможно, cdчтобы HDD и ссылка работает. Но что интересно, это ls -al mediaпоказывает, hdd -> /media/net/mydreamи это на самом деле, где это идет, когда я cdна жесткий диск. «Mydream» - это название акции. Почему я получаю разные результаты?
Самир,
Я предполагаю, что есть какой-то механизм (возможно, правило udev), чтобы убедиться, что символьная ссылка / hdd обновлена, чтобы указывать на любое устройство или общий ресурс, так что другие программы и сценарии могут просто использовать / hdd (после проверки, что каталог это указывает на установленный фс). просто из любопытства, что произойдет, если вы смонтируете второй диск или поделитесь? Это делает / hde символическую ссылку? или Dreambox ограничен одним каталогом записи?
CAS

Ответы:

29

Вы можете использовать файл, stat или ls.

файл:

Команда file используется для классификации файлов на основе их типа (символическая ссылка, каталог, устройство) или содержимого (текст, gzip, изображение, tar, ..., независимо от их расширения):

$ file / dev / stdout
/ dev / stdout: символическая ссылка на `/ proc / self / fd / 1 '
$ file / proc / self / fd / 1
/ proc / self / fd / 1: символическая ссылка на `/ dev / pts / 0 '
$ file / dev / pts / 0
/ dev / pts / 0: специальный символ (136/0)
$ file / etc / passwd
/ etc / passwd: текст ASCII

лс

$ ls -al / dev / stdout
lrwxrwxrwx 1 корневой корень 15 января 27 07:55 / dev / stdout -> / proc / self / fd / 1

стат:

команда stat выводит метаданные файла, такие как права доступа, размер, количество блоков и т. д.

$ stat / dev / stdout
  Файл: '/ dev / stdout' -> '/ proc / self / fd / 1'
  Размер: 15 блоков: 0 блок ввода-вывода: 4096 символьная ссылка
Устройство: 5h / 5d Индекс: 1212 Ссылки: 1
Доступ: (0777 / lrwxrwxrwx) Uid: (0 / root) Gid: (0 / root)
Доступ: 2014-01-27 11: 22: 47.971187828 -0200
Изменить: 2014-01-27 07: 55: 13.996981285 -0200
Изменение: 2014-01-27 07: 55: 13.996981285 -0200
 Рождение: -
filipenf
источник
Что file hddотносится к? Я не понимаю ...
Самир
Это stat hddдает мне -sh: stat: not found.
Самир
Я думаю, что у вас нет команды stat (или ее нет в вашей переменной $ PATH). В любом случае, команда file может дать вам шанс ...
filipenf
Для bash на терминале Mac команда file по умолчанию следует символическим ссылкам. Если вы хотите посмотреть, является ли это символической ссылкой, добавьте команду -h. Который не следует за символическими ссылками.
ClintM
7

Баш:

if [[ -h dirname ]]; then
    echo "it's a symbolic link"
    if ! stat $(readlink dirname) &>/dev/null; then
        echo "link target does not exist"
    fi
fi
Гленн Джекман
источник
3

Самый простой способ увидеть, какой тип сущности в данном файле - это использовать fileкоманду. Он имеет четкий, нормальный вывод, не требуя от вас помнить, что такое lsметки классификатора, или полагаясь на цветной вывод, который может варьироваться от пользователя к пользователю и от машины к машине. Например:

mail ~ # file /test
/test: broken symbolic link to `/nonexist'
mail ~ # file /dev
/dev: directory
mail ~ # file /dev/fd
/dev/fd: symbolic link to `/proc/self/fd'

Если вы оказались в системе без нее, fileвы можете использовать statкоманду, которая скажет вам, что это за запись в файле и на что она указывает. Чтобы узнать, не сломана ли ссылка, вам нужно будет перейти stat -Lк ссылкам разыменования, что приведет к ошибке, если ссылка не работает.

Что касается второй части вашего вопроса, mediaкаталогом часто управляют автомонтирующие устройства. /media/hddЗапись может быть использована в вашей системе для USB запоминающих устройств или даже может ждать правильного вида жесткого диска (ATA против SCSI против блочных устройств Xen). Неработающие ссылки ничего не повредят, если программа не попытается их использовать, а ссылки на медиа-файлы действительно для вашего удобства. Вы можете безопасно оставить /hddссылку или удалить ее, как вам угодно.

joruffin
источник
Вы правы, похоже, файл здесь не является командой, он говорит, -sh: file: not foundкогда я делаю fileи ввожу.
Самир
Похоже, ваш $ PATH немного ограничен. Попробуйте выполнить это непосредственно вместо этого:/usr/bin/file
joruffin
Я вижу из вашего другого комментария, что вы находитесь на приставке. Это может не иметь ничего, кроме установленного Busybox, и Busybox не эмулирует fileкоманду, но имеет поддержку statкоманды, если она была скомпилирована. Она все еще может находиться за пределами вашего $ PATH или жить где-то непонятно, как / sbin / stat или / USR / SBIN / стат.
Джоруффин
Это не похоже на поддержку fileили stat. Я проверил пути, которые вы упоминаете (см. Скриншот выше). В любом случае ... вы говорите, что в идеальной системе Linux fileкоманда, за которой следует путь поиска целевого файла или папки, покажет мне, что это за сущность?
Самир
2
Что касается поддерживаемых команд в Busybox, вы можете запустить /usr/bin/busyboxего, и он покажет вам все команды, которые он поддерживает, даже если команды не установлены. Чтобы использовать команду busybox вы можете запустить /usr/bin/busybox <command> <parameters>. Так что, если он говорит, что поддерживает команду stat, вы можете запустить /usr/bin/busybox stat /hdd. Для простоты использования вы можете создать символические ссылки для Busybox с именем вызываемой команды. Если он поддерживает команду stat, вы можете упростить запуск ln -s /usr/bin/busybox /usr/bin/stat.
joruffin
1
  1. Да циан это символические ссылки
  2. Чтобы увидеть, куда они указывают: ls -Fal
  3. Выход ls -Fal /media

Вероятно, это точка автомонтирования некоторого вида.

grep media /etc/auto* может произвести удар.

Nils
источник
Что такое автомонтирование? Ты имеешь в виду, что ... когда я подключаю физический диск SATA, он подключается к этой точке? ... это Linux STB и у него нет встроенного жесткого диска, но он имеет порт eSATA на задней панели. Это может быть предназначено для этой цели.
Самир
@Sammy Yes /media- это стандартная точка монтирования для PnP-устройств.
Нильс