2

Я хочу узнать, какие существуют ссылки на файлы, которые указывают на мою папку /tmp в Ubuntu.

Фон:
У меня была проблема, что мои права доступа к папке /tmp были случайно изменены на 755. Система работала некорректно, как пользователь, отличный от пользователя root.

Может быть, где-то есть ссылка на /tmp и команда

chmod 755 . -Rf 

вызов там в той папке влиял на основную папку /tmp .

Я должен был восстановить это с:

chmod 777 /tmp
chmod +t /tmp
sudo chown root:root /tmp

У меня только одна файловая система, поэтому проблем с этим не должно быть.

3 ответа3

2

попробуй это:

find / -path /proc -prune -o \( -lname '*/tmp' -o -lname '*/tmp/' \) -exec ls -l {} \;

Образец вывода:

# find / -path /proc -prune -o -lname '*/tmp' -exec ls -l {} \;
lrwxrwxrwx. 1 sergey sergey 4 Sep 22 11:27 /home/sergey/xxx/tmp -> /tmp
lrwxrwxrwx. 1 root root 10 Jun 20 10:28 /usr/tmp -> ../var/tmp
find: `/run/user/sergey/gvfs': Permission denied
1

Насколько я знаю, нет простого способа перечислить все символические ссылки, указывающие на индекс. Поэтому я бы рекомендовал использовать стандартную утилиту поиска с ключами -L и -samefile :

  • -samefile будет сравнивать в зависимости от inode вашего целевого файла,
  • -L будет включать в поиск символические ссылки, что вы и ищете.

Вот пример с /bin /dash в /bin:

$ find -L  /bin -samefile /bin/dash -exec ls -lhi {} \;
786515 lrwxrwxrwx 1 root root 4 Mar 29  2012 /bin/sh -> dash
786436 -rwxr-xr-x 1 root root 108K Mar 29  2012 /bin/dash

Из этого вывода вы можете видеть как номер индекса (первый столбец), так и стрелку (последний), которая /bin /sh в символической ссылке на /bin /dash. Если бы это были жесткие ссылки, номер инода был бы одинаковым для разных файлов, и в последнем столбце не было бы стрелки.

Наконец, если бы мне нужно было искать эти ссылки во всей файловой системе, я бы исключил из поиска некоторые каталоги, такие как /dev, /proc и /sys . Это будет сделано с -Path и -prune swicthes (вы можете добавить столько , сколько вы хотите с помощью ключа -o значения или), 2>/ DEV / нуля здесь , чтобы скрыть возможные ошибки:

$ sudo find -L  / \( -path /dev -o -path /proc -o -path /sys \) -prune -samefile /bin/dash -exec ls -lhi {} \; 2>/dev/null

Поскольку поиск во всей файловой системе может занять много времени (в основном в зависимости от ее размера), я буду рассматривать этот вариант в качестве последнего средства. Это все равно что искать иголку в стоге сена: это не невозможно, но требует много усилий ...

0

Я нашел ответ, благодаря этому вопросу: Linux: Найти все символические ссылки данного «оригинального» файла?(обратная ссылка "readlink")

find / -exec ls -ald {} ';' 2>/dev/null | grep '\-> /tmp' |grep -v /proc/

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