1

У меня есть несколько команд, которые удаляют файлы и каталоги. Один из них удалил символическую ссылку, которая указывала на каталог.

Это подняло следующий вопрос: какая команда удалила это? Тот, который удаляет файлы или тот, который удаляет каталоги?

Другими словами: что такое символическая ссылка на каталог: файл или каталог?

Пример такой команды:

find www -type f ! -name ".htaccess" -delete

2 ответа2

3

Технически это файл, содержащий строку со ссылкой на другой объект файловой системы, но примечательно, что символические ссылки имеют свойства, несколько отличающиеся от большинства файлов. например, вы можете запретить запись по символической ссылке, сохраняя запись в целевом файле. привилегированная запись по ссылке позволит вам удалить ссылку, даже если у вас нет записи в целевой файл. для некоторых операций ссылка прозрачна, а для других она непрозрачна, поэтому определенно существует некоторая абстракция файловой системы, связанная с их внутренней работой.

Вы можете проверить свой журнал авторизации, чтобы определить, какая команда удалила его.

Редактировать: Так как вы так заинтересованы в команде find, обратите внимание, что find вообще не обрабатывает символические ссылки. посмотреть здесь:

Minty17 ~ $ mkdir test
Minty17 ~ $ cd test
Minty17 ~/test $ mkdir testdir
Minty17 ~/test $ touch testdir/testfile1.txt
Minty17 ~/test $ ln -s testdir testlink
Minty17 ~/test $ ls
testdir  testlink
Minty17 ~/test $ find -type f | grep testlink
Minty17 ~/test $ find -type d | grep testlink
Minty17 ~/test $ find -type d 
.
./testdir
Minty17 ~/test $ find -type f 
./testdir/testfile1.txt
Minty17 ~/test $ cd ..
Minty17 ~ $ rm -rf ./test
1

Это специальный файл, один из нескольких, которые UNIX реализовал задолго до Linux. Помимо файлов и каталогов, другие типы файлов - это ссылки, именованные каналы, сокеты, файлы устройств (далее разделенные на символьные и блочные устройства). Я говорю вам это для того, чтобы подчеркнуть, что в * Nix не все является либо каталогом, либо файлом: есть и другие забавные персонажи.

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

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

 $ whereis awk
 awk: /usr/bin/awk /usr/bin/X11/awk /usr/share/awk /usr/share/man/man1/awk.1.gz
 $ file /usr/bin/awk
 /usr/bin/awk: symbolic link to `/etc/alternatives/awk' 
 $ file /etc/alternatives/awk
 /etc/alternatives/awk: symbolic link to `/usr/bin/gawk'
 $ file /usr/bin/gawk
 /usr/bin/gawk: ELF 64-bit LSB  shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=76bb13aac7e212164bd6e0d7b8a5d92db44543c9, stripped

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

Чтобы избежать обычного TL; DR, я просто позволю вышеупомянутой ссылке предоставить дополнительную информацию, если вам это нужно.

РЕДАКТИРОВАТЬ:

Чтобы найти все символические ссылки, вы можете использовать:

  find /path/to/directory/ToBeSearched -type l

Чтобы удалить их всех,

  Find /path/to/directory/ToBeSearched -type l -exec rm {} \;

или некоторые такие вариации (есть бесконечные).

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