Обнаружить все существующие ссылки, указывающие на /tmp?

Обнаружить все существующие ссылки, указывающие на /tmp?

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

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

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

chmod 755 . -Rf 

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

Мне пришлось его ремонтировать с помощью:

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

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

решение1

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

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

решение2

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

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

Вот пример с /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,/проци/сисиз поиска. Это будет сделано с помощью-путьи-черносливпереключатели (вы можете добавить столько, сколько захотите)переключить значениеили),2>/dev/nullздесь для маскировки потенциальных ошибок:

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

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

решение3

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

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

Связанный контент