- Remove a symlink to a directory
- 12 Answers 12
- Как удалить (удалить) символические ссылки в Linux
- Подготовка
- Удалите символические ссылки с помощью rm
- Удалить символические ссылки с помощью unlink
- Найти и удалить битые символические ссылки
- Выводы
- Команда Ln: как создавать символические ссылки в Linux
- Команда Ln для создания символических ссылок
- Создать символическую ссылку на каталог Linux
- Принудительно перезаписать символические ссылки
- Удаление ссылок
- Soft Links против Hard Links
- Символические ссылки (Soft Links)
- Жесткие ссылки (Hard Links)
- How to remove symbolic link
- Explanation
- Extra
Remove a symlink to a directory
I have a symlink to an important directory. I want to get rid of that symlink, while keeping the directory behind it. I tried rm and get back rm: cannot remove ‘foo’ .
I tried rmdir and got back rmdir: failed to remove ‘foo’: Directory not empty
I then progressed through rm -f , rm -rf and sudo rm -rf Then I went to find my back-ups. Is there a way to get rid of the symlink with out throwing away the baby with the bathwater?
what’s wrong with asking linux-related questions? last time i checked, stack overflow was not os-specific
@mwfearnley It would be, but check the date. Super User wasn’t a thing yet back then. It’s been ported, so it’s there too. Not sure why it’s still here, but it’s my highest scoring question and I’m not gonna look gift karma in the mouth.
12 Answers 12
# this works: rm foo # versus this, which doesn't: rm foo/
Basically, you need to tell it to delete a file, not delete a directory. I believe the difference between rm and rmdir exists because of differences in the way the C library treats each.
At any rate, the first should work, while the second should complain about foo being a directory.
If it doesn’t work as above, then check your permissions. You need write permission to the containing directory to remove files.
This does not always work. Occasionally you need to run rm -rf folderName (without trailing /) in order to remove the symlink. Amazon Linux behaves this way under certain circumstances, for example.
@r3mus: Never use -r with a symlink unless you want to lose everything inside it. -f shouldn’t be needed either, except perhaps to override file permissions.
Specifically, unlink has no relation to the ln AKA ‘link’ operation. The name unlink refers to the process of unlinking/removing a file from the file system’s file table so that the contents become detached from any reference to them — they are unlinked. It’s a confusing name that’s downright misleading when applied to links and symlinks in particular. unlink will work with symlinks because it works with any file regardless of type.
If you’re ever actually worried about doing something silly, alias rm=»rm -i» has saved more hides than just about anything else out there I think.
use the «unlink» command and make sure not to have the / at the end
unlink() deletes a name from the file system. If that name was the last link to a file and no processes have the file open the file is deleted and the space it was using is made available for reuse. If the name was the last link to a file but any processes still have the file open the file will remain in existence until the last file descriptor referring to it is closed.
I think this may be problematic if I’m reading it correctly.
If the name referred to a symbolic link the link is removed.
If the name referred to a socket, fifo, or device the name for it is removed but processes that have the object open may continue to use it.
Как удалить (удалить) символические ссылки в Linux
Символическая ссылка, также известная как символическая ссылка, представляет собой файл особого типа, который указывает на другой файл или каталог. Это что-то вроде ярлыка в Windows. Символическая ссылка может указывать на файл или каталог в той же или в другой файловой системе или разделе.
В этом руководстве мы покажем вам, как удалить (удалить) символические ссылки в системах Linux / UNIX с помощью команд rm , unlink и find .
Подготовка
Чтобы удалить символическую ссылку, вам необходимо иметь права на запись в каталог, который содержит символическую ссылку. В противном случае вы получите ошибку «Операция запрещена».
Когда вы удаляете символическую ссылку, файл, на который она указывает, не изменяется.
Используйте команду ls -l чтобы проверить, является ли данный файл символической ссылкой, и найти файл или каталог, на который указывает символическая ссылка.
lrwxrwxrwx 1 root root 9 Apr 16 2018 /usr/bin/python -> python2.7
Первый символ «l» указывает на то, что файл является символической ссылкой. Символ «->» показывает файл, на который указывает символическая ссылка.
Удалите символические ссылки с помощью rm
Команда rm удаляет указанные файлы и каталоги.
Чтобы удалить символическую ссылку, вызовите команду rm за которой следует имя символической ссылки в качестве аргумента:
В случае успеха команда завершается с нулем и не выводит никаких результатов.
С помощью rm вы можете удалить более одной символической ссылки одновременно. Для этого передайте имена символических ссылок в качестве аргументов, разделенных пробелом:
Чтобы получить запрос перед удалением символической ссылки, используйте параметр -i :
Для подтверждения введите y и нажмите Enter .
rm: remove symbolic link 'symlink_name'?
Если символическая ссылка на каталог, не добавляйте к / слэш в конце. В противном случае вы получите ошибку:
rm: cannot remove 'symlink_to_dir/': Is a directory
Если имя аргумента заканчивается на / , команда rm предполагает, что файл является каталогом. Ошибка возникает из-за того, что при использовании без опции -d или -r rm не может удалять каталоги.
На всякий случай никогда не используйте параметр -r при удалении символических ссылок с помощью rm . Например, если вы наберете:
Содержимое целевого каталога будет удалено.
Удалить символические ссылки с помощью unlink
Команда unlink удаляет указанный файл. В отличие от rm , unlink принимает только один аргумент.
Чтобы удалить символическую ссылку, запустите команду unlink за которой следует имя символической ссылки в качестве аргумента:
Если команда выполняется успешно, она не выводит никаких результатов.
Не добавляйте к / слэш в конце имени SYMLINK потому unlink не может удалить каталоги.
Найти и удалить битые символические ссылки
Если вы удалите или переместите исходный файл в другое место, символический файл останется висящим (сломанным).
Чтобы найти все неработающие символические ссылки в данном каталоге, выполните следующую команду:
find /path/to/directory -xtype l
/path/to/directory/symlink1 /path/to/directory/subdir/symlink2
Команда выведет список всех неработающих ссылок в каталоге и его подкаталогах.
Если вы хотите исключить символические ссылки, содержащиеся в подкаталогах, передайте параметр -maxdepth 1 чтобы find :
find /path/to/directory -maxdepth 1 -xtype l
Как только вы найдете неработающие символические ссылки, вы можете вручную удалить их с помощью rm или unlink либо использовать параметр -delete команды find :
find /path/to/directory -xtype l -delete
Выводы
Чтобы удалить символическую ссылку, используйте команду rm или unlink за которой следует имя символической ссылки в качестве аргумента. При удалении символической ссылки, указывающей на каталог, не добавляйте косую черту в конце имени символической ссылки.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Команда Ln: как создавать символические ссылки в Linux
Символические ссылки используются в Linux для управления файлами и их сопоставления.
В этом руководстве вы узнаете, как использовать команду ln для создания символических ссылок в Linux.
Команда Ln для создания символических ссылок
Чтобы использовать команду ln, откройте окно терминала и введите команду в следующем формате:
- По умолчанию команда ln создает hard link (жесткая ссылка).
- Используйте параметр -s , чтобы создать символическую ссылку, она же soft link.
- Параметр -f заставит команду перезаписать уже существующий файл.
- Source — это файл или каталог, на который делается ссылка.
- Destination — это место для сохранения ссылки — если это поле не заполнено, символическая ссылка сохраняется в текущем рабочем каталоге.
Например, создайте символическую ссылку с помощью:
ln -s test_file.txt link_file.txt
Это создает символическую ссылку link file.text , которая указывает на testfile.txt .
Чтобы проверить, создана ли символическая ссылка, используйте команду ls :
Создать символическую ссылку на каталог Linux
Символическая ссылка может относиться к каталогу. Чтобы создать символическую ссылку на каталог в Linux:
ln -s /mnt/external_drive/stock_photos ~/stock_photos
В этом примере создается символическая ссылка с именем stock_photos в домашнем каталоге ~ / . Ссылка относится к каталогу stock_photos на внешнем диске external_drive .
Примечание. Если система подключена к другому компьютеру, например к корпоративной сети или удаленному серверу, символические ссылки могут быть связаны с ресурсами в этих удаленных системах.
Принудительно перезаписать символические ссылки
Вы можете получить сообщение об ошибке, как показано на изображении ниже:
Сообщение об ошибке означает, что в месте назначения уже есть файл с именем link_file.txt . Используйте параметр -f , чтобы система перезаписывала целевую ссылку:
ln -sf test_file.txt link_file.txt
Удаление ссылок
Если исходный файл будет перемещен, удален или станет недоступным (например, сервер отключится), ссылку нельзя будет использовать. Чтобы удалить символическую ссылку, используйте команду rm (remove) или unlink :
rm link_file.txt unlink link_file.txt
Soft Links против Hard Links
Команду ln можно использовать для создания двух разных типов ссылок:
Символические ссылки (Soft Links)
Символическая ссылка, иногда называемая мягкой ссылкой или soft link, указывает на расположение или путь к исходному файлу. Она работает как гиперссылка в Интернете.
Вот несколько важных аспектов символической ссылки:
- Если файл символьной ссылки удаляется, исходные данные остаются.
- Если исходный файл будет перемещен или удален, символическая ссылка работать не будет.
- Символическая ссылка может относиться к файлу в другой файловой системе.
- Символические ссылки часто используются для быстрого доступа к часто используемым файлам без ввода всего местоположения.
Жесткие ссылки (Hard Links)
Когда файл хранится на жестком диске, происходит несколько вещей:
- Данные физически записываются на диск.
- Создается справочный файл, называемый индексом, который указывает на расположение данных.
- Имя файла создается для ссылки на данные inode.
Жесткая ссылка работает путем создания другого имени файла, которое ссылается на данные inode исходного файла. На практике это похоже на создание копии файла.
Вот несколько важных аспектов жестких ссылок:
- Если исходный файл удален, к данным файла все равно можно будет получить доступ через другие жесткие ссылки.
- Если исходный файл перемещен, жесткие ссылки по-прежнему работают.
- Жесткая ссылка может относиться только к файлу в той же файловой системе.
- Если количество жестких ссылок равно нулю, индексный дескриптор и данные файла удаляются безвозвратно.
How to remove symbolic link
permission denied: You do know you need sudo if you want to use it in a situation you do not own the file? That goes for ‘rm’ too.
@RaheelKhan no you did -not- You removed a SYMLINK. Python relies on this symlink though. If you recreate that symlink python will be back.
You can try the unlink command as well.
unlink is a similar command to rm . Therefore rm will work same as unlink
While you are correct that unlink will remove the symlink, it is not an alias of rm . They are different, if ever so slightly. For one you cannot pass multiple arguments to unlink
Suppose you were trying to do:
sudo ln -s /usr/share/phpmyadmin /var/www/phpmyadmin/
sudo ln -s /usr/share/somethingelse /var/www/phpmyadmin/
To correct it simply navigate to the folder where the link is and unlink
cd /var/www/phpmyadmin/ ~:# unlink somethingelse
You can use the following to remove the symbolic link
Explanation
- rm is the terminal command to remove a file. See rm —help for more options that it can take.
- sudo is used because the symbolic link was created with sudo . The file therefore belongs to root and your normal user will not have permission to edit/remove it (you would be able to force this if you had write permission on the directory, which would not be the case here).
Extra
Also see this post and my comment to the first answer to access phpmyadmin when getting a not found error after install.
A small caveat I found was that I was trying to run rm and unlink on a symlink and I was getting an error that it was a directory.
$ rm folder_name/ rm: cannot remove ‘folder_name/’: Is a directory $ unlink folder_name/ unlink: cannot unlink ‘folder_name/’: Not a directory
To remove the symlink, I used unlink folder_name . It was failing as there was a trailing / which causes the file to appear to be a directory.