[РЕШЕНО] Символическая ссылка

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Ответить
Аватара пользователя
devilr
Сообщения: 3665
ОС: Mandriva => Gentoo (~amd64)
Контактная информация:

[РЕШЕНО] Символическая ссылка

Сообщение devilr »

Доброго времени суток!
Допустим, существует некий каталог, на который существует некая символическая ссылка (а может и нет её или их, наоборот, несколько).
Можно ли найти все символические ссылки, указывающие на этот каталог? Было бы вообще чудесно, если бы можно было регенерировать их всех.
Для чего нужно: допустим существует диск, в котором есть некие каталоги, на которые указывают символические ссылки, размещённые на другом диске. Если эти диски перемонтировать к другим каталогам, то ссылки станут битыми. Можно было бы ссылки поправить и вручную, но как их найти?
Последний раз редактировалось devilr 25.05.2021 08:43, всего редактировалось 1 раз.
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Эхо разума
Спасибо сказали:
Аватара пользователя
algri14
Сообщения: 1369
ОС: Mageia 5.1 & 8 x86_64, KDE

Re: Символическая ссылка

Сообщение algri14 »

devilr писал(а):
24.05.2021 21:30
Можно было бы ссылки поправить и вручную, но как их найти?
Когда-то писал статью в вики Mageia — "никакого учёта символических ссылок в файловой системе нет. "
Спасибо сказали:
Аватара пользователя
devilr
Сообщения: 3665
ОС: Mandriva => Gentoo (~amd64)
Контактная информация:

Re: Символическая ссылка

Сообщение devilr »

algri14 писал:
24.05.2021 23:31
никакого учёта символических ссылок в файловой системе нет
Ладно. Можно по другому.
1) Создаём файл
2) Делаем символическую ссылку на него
3) Проверяем, что ссылка создалась и указывает туда, куда требовалось. Например с помощью ls.
4) Удаляем файл.
5) Опять проверяем. Видим, что ссылка "битая" но указывает туда же, куда и указывала. Даже название файла помнит правильное.
Спрашивается, где система это помнит/хранит? А, если помнит, то можно и найти, наверное.
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Эхо разума
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Символическая ссылка

Сообщение Bizdelnick »

devilr писал(а):
24.05.2021 23:43
Спрашивается, где система это помнит/хранит?
В символьной ссылке.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
algri14
Сообщения: 1369
ОС: Mageia 5.1 & 8 x86_64, KDE

Re: Символическая ссылка

Сообщение algri14 »

Поиск симлинков в текущей директории (рекурсивно):

Shell

find . -type l
Просмотр, куда ведет симлинк:

Shell

readlink /path/to/my/symlink
зы: это я нашёл в Яндексе http://barbitoff.blogspot.com/2018/04/linux.html
спасибо за тему, надо будет найти время и обновить статью в вики
Спасибо сказали:
Аватара пользователя
devilr
Сообщения: 3665
ОС: Mandriva => Gentoo (~amd64)
Контактная информация:

Re: Символическая ссылка

Сообщение devilr »

Понятно. Спасибо.
Хотя, странно, что нет штатного способа поиска подобных "битых" ссылок. Не, велосипед то написать несложно, но почему нет? Символические ссылки существуют уже 100500 лет, неужели никто на подобные грабли не наступал?
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Эхо разума
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Символическая ссылка

Сообщение Bizdelnick »

devilr писал(а):
24.05.2021 23:55
Хотя, странно, что нет штатного способа поиска подобных "битых" ссылок. Не, велосипед то написать несложно, но почему нет? Символические ссылки существуют уже 100500 лет, неужели никто на подобные грабли не наступал?
Потому что эти грабли проще обойти, не создавая ссылок на то, что может исчезнуть.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
algri14
Сообщения: 1369
ОС: Mageia 5.1 & 8 x86_64, KDE

Re: Символическая ссылка

Сообщение algri14 »

devilr писал(а):
24.05.2021 23:55
Не, велосипед то написать несложно, но почему нет?
О том история умалчивает, но если напишите "опус", то будьте так любезны выложить его сюда, вдруг пригодится, а заодно я его в нашу вики перепишу (Вы не против?)
Добавлено (00:20):
Bizdelnick писал:
25.05.2021 00:18
Потому что эти грабли проще обойти, не создавая ссылок на то, что может исчезнуть.
Эка Вы батенька хватили — "знал бы прикуп, жил бы в Сочи" :D
Добавлено (00:23):
Чтобы найти все символические ссылки, например на /etc/sysctl.conf, используйте следующую команду:

# find /путь_к_директории_начала_поиска -lname /путь_к_файлу
# find / -lname /etc/sysctl.conf

В данном примере, ‘/путь_к_файлу‘ это символическая ссылка, содержащая совпадения shell шаблона.
зы: нашёл здесь https://hamsterden.ru/symlinks/#poisk
Спасибо сказали:
Аватара пользователя
devilr
Сообщения: 3665
ОС: Mandriva => Gentoo (~amd64)
Контактная информация:

Re: Символическая ссылка

Сообщение devilr »

Bizdelnick писал:
25.05.2021 00:18
Потому что эти грабли проще обойти, не создавая ссылок на то, что может исчезнуть.
Вы живёте в каком то другом мире, да? :) Исчезнуть может всё и не обязательно по неисправности. Допустим, у меня есть папка "Фильмы" (как пример). В ней есть подпапки с категориями этих фильмов. Жена хочет посмотреть определённую категорию. Чтобы её не искать, я делаю символическую ссылку и выкладываю на "рабочий стол". Потом ещё что-то, ещё... Она позже тоже сортирует эти ссылки на столе - всё работает.
А потом уже я хочу навести порядок и перемещаю саму папку "Фильмы" в какой нибудь каталог (или вообще на новый диск, который я купил специально для фильмов)... и в результате получаю "втык" от жены, потому как она уже не может досмотреть сериал.
И не думаю, что я один такой.
algri14 писал:
25.05.2021 00:19
но если напишите "опус", то будьте так любезны выложить его сюда, вдруг пригодится
Ну, тут много любителей писать скрипты, может кто и раньше напишет. :) Но, если сподоблюсь - обязательно выложу, конечно.
Добавлено (00:32):
algri14 писал:
25.05.2021 00:19
Чтобы найти все символические ссылки, например на /etc/sysctl.conf, используйте следующую команду
Там проблема не столько в том, как найти "битые" ссылки, но и в том, чтобы отличить их от нормальных. Явно "опус" надо будет писать. :)
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Эхо разума
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Символическая ссылка

Сообщение Bizdelnick »

devilr писал(а):
25.05.2021 00:30
Вы живёте в каком то другом мире, да?
Я живу в мире, где мне всего один раз пришлось автоматически править кучу симлинков, причём ситуация была довольно специфическая, так что написанный мной для этого велосипед (от силы десяток строк на perl) вряд ли кому-то когда-то мог бы пригодиться. Не думаю, что я какой-то особенный.
devilr писал(а):
25.05.2021 00:30
А потом уже я хочу навести порядок и перемещаю саму папку "Фильмы" в какой нибудь каталог (или вообще на новый диск, который я купил специально для фильмов)... и в результате получаю "втык" от жены, потому как она уже не может досмотреть сериал.
Ну сделайте на старом месте симлинк в новое, делов-то.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
devilr
Сообщения: 3665
ОС: Mandriva => Gentoo (~amd64)
Контактная информация:

Re: Символическая ссылка

Сообщение devilr »

Bizdelnick писал:
25.05.2021 00:42
Ну сделайте на старом месте симлинк в новое, делов-то
Я вашему миру завидую. :) Проблема тут в том, что ссылок может быть много и можно о какой то не упомнить. А потом, через время, гадать, куда же она указывала и что на что я переименовывал. Вместо того, чтобы при переносе каталога/диска использовать какой-то инструмент, который бы мне сразу показал "висящие" ссылки.
И я искренне рад, что вы на подобные грабли ещё не наступали.
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Эхо разума
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Символическая ссылка

Сообщение Bizdelnick »

devilr писал(а):
25.05.2021 00:47
Проблема тут в том, что ссылок может быть много и можно о какой то не упомнить. А потом, через время, гадать, куда же она указывала и что на что я переименовывал.
Значит, Вы что-то делаете не так. Злоупотребляете и симлинками, и переименованиями, не задумываясь о последствиях. А мир не виноват.
devilr писал(а):
25.05.2021 00:47
Вместо того, чтобы при переносе каталога/диска использовать какой-то инструмент, который бы мне сразу показал "висящие" ссылки.
Не может быть такого инструмента by design. Может быть только костыль. Они и есть (symlinks, fslint, rmlint…), но поскольку это костыли, ничего подобного нет и не будет в стандартном наборе инструментов.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 900
ОС: debian, fedora (i3-wm)

Re: Символическая ссылка

Сообщение olecya »

algri14 писал:
24.05.2021 23:49
find . -type l
По моему битая ссылка находится так:

Код: Выделить всё

find -xtype l
Спасибо сказали:
Аватара пользователя
devilr
Сообщения: 3665
ОС: Mandriva => Gentoo (~amd64)
Контактная информация:

Re: Символическая ссылка

Сообщение devilr »

Спасибо.
Всё работает. Обошлись без костылей. :)
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Эхо разума
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 900
ОС: debian, fedora (i3-wm)

Re: [РЕШЕНО] Символическая ссылка

Сообщение olecya »

Проверила свой хомяк и обнаружила несколько ссылок из рантайма google-chrome. Это нормально.
Чтобы пройтись по системе, пришлось исключить /var /usr и примонтированные разделы в которые попадают /dev /sys /mnt /proc /run /tmp

Код: Выделить всё

sudo find -xdev -xtype l -not -path "./var/*" -a -not -path "./usr/*"
Наверное легче было бы указать разделы для поиска :)
Последний раз редактировалось olecya 25.05.2021 09:30, всего редактировалось 1 раз.
Спасибо сказали:
Аватара пользователя
devilr
Сообщения: 3665
ОС: Mandriva => Gentoo (~amd64)
Контактная информация:

Re: [РЕШЕНО] Символическая ссылка

Сообщение devilr »

Ну вот и приложение сим действиям нашлось. Теперь мир точно не виноват. :)
P.S. Понятно, что битые ссылки особо не мешают и ничего не рушат.
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Эхо разума
Спасибо сказали:
Аватара пользователя
s.xbatob
Сообщения: 1139
ОС: Fedora

Re: [РЕШЕНО] Символическая ссылка

Сообщение s.xbatob »

olecya писала:
25.05.2021 09:02
Проверила свой хомяк и обнаружила несколько ссылок из рантайма google-chrome. Это нормально.
Чтобы пройтись по системе, пришлось исключить /var /usr и примонтированные разделы в которые попадают /dev /sys /mnt /proc /run /tmp
В моём дистрибутиве есть утилита symlinks. Несколько дурная, и даже не несколько, но свои функции выполняет
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 900
ОС: debian, fedora (i3-wm)

Re: [РЕШЕНО] Символическая ссылка

Сообщение olecya »

s.xbatob, Спасибо

Код: Выделить всё

symlinks -r . | grep '^dangling:'
Спасибо сказали:
Аватара пользователя
devilr
Сообщения: 3665
ОС: Mandriva => Gentoo (~amd64)
Контактная информация:

Re: [РЕШЕНО] Символическая ссылка

Сообщение devilr »

s.xbatob писал:
27.05.2021 13:04
В моём дистрибутиве есть утилита symlinks.
Не только в вашем. Пакет называется app-misc/symlinks-1.4-r3
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Эхо разума
Спасибо сказали:
Ответить