Intereting Posts

Обнаружение мягких ссылок

В моей собственной ОС на основе LFS я создал много программных ссылок. Софт-ссылку можно удалить без ущерба для цели.

Но есть ли способ, который, если я удалю файл или каталог, тогда я буду уведомлен о его мягкой ссылке? Чтобы не было висящего указателя софт-ссылки.

Иногда поиск обманутой софт-ссылки, а затем удаление – это путь. Но это будет статическое решение. Я ищу динамический путь

К сожалению нет. Ссылки Soft Link (aka symbolic link или symlink) не отслеживают тот факт, с которым они связаны. Это не реально, либо: symlinks может пересекать файловые системы, поэтому ссылка может быть на другой файловой системе, которая даже не установлена ​​на данный момент.

Вы могли бы, конечно, добавить работу cron для поиска сломанных ссылок в ночное время и уведомить вас. Чтобы найти неработающие ссылки, см. Раздел Как найти сломанные символические ссылки (другой вопрос на этом сайте).

Это невозможно сделать с помощью софт-ссылок, потому что в случае софт-ссылок цели не знают о существовании ссылок на них.

Однако, если ваши целевые и исходные файлы находятся на одном разделе, вместо этого вы можете использовать жесткие ссылки. С жесткими ссылками есть счетчик в inode, на который они указывают, который отслеживает, сколько жестких ссылок (файлов) связано с inode.

Вы можете увидеть этот счетчик, используя команду stat (или системный вызов). Результат выглядит так: посмотрите на поле links , он показывает, сколько ссылок / файлов указывает на inode этого файла:

 ~ $ touch testfile1 ~ $ ln testfile1 testfile2 ~ $ stat testfile1 File: 'testfile1' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 803h/2051d Inode: 7062809 Links: 2 Access: (0644/-rw-r--r--) Uid: ( 1000/ mst) Gid: ( 100/ users) Access: 2014-01-04 10:19:27.899679948 +0300 Modify: 2014-01-04 10:19:27.899679948 +0300 Change: 2014-01-04 10:19:33.149679891 +0300 Birth: - 

Поэтому, прежде чем удалять файл, вы можете проверить его статус, если поле « Links находится выше 1 , должна быть другая жесткая ссылка на него. К сожалению, найти вторую жесткую ссылку на основе inode будет дорогостоящей операцией поиска, поэтому я надеюсь, что у вас есть какая-то схема именования, чтобы найти их быстрее.