Я хочу узнать, какие существуют ссылки на файлы, указывающие на мою /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/