Основы Linux От Основателя Gentoo. Часть 1 (3/4): Ссылки, А Также Удаление Файлов И Каталогов

Третий отрывок из перевода первой части мануала.

Предыдущий: первый , второй .

В этом отрывке рассматриваются жесткие и символические ссылки, а также рассматривается удаление файлов и каталогов с помощью команд rm и rmdir.



Создание ссылок и удаление файлов



Жесткие ссылки

Мы уже упоминали термин «ссылка», когда говорили о взаимосвязи между каталогами (их именами) и инодами (индексными номерами, лежащими в основе файловой системы, которые мы не замечаем).

В общем, в Linux есть два типа ссылок.

Тип, о котором мы говорили ранее, называется «жесткими ссылками».

Каждый индексный дескриптор может иметь произвольное количество жестких ссылок.

Когда последняя жесткая ссылка уничтожается и ни одна программа не удерживает файл открытым, Linux автоматически удаляет его.

Новые жесткие ссылки можно создать с помощью команды ln:

  
  
  
  
  
  
  
  
  
  
  
  


$ cd /tmp $ touch firstlink $ ln firstlink secondlink $ ls -i firstlink secondlink 15782 firstlink 15782 secondlink

Как видите, жесткие ссылки работают на уровне индексного дескриптора, указывая на определенный файл.

В системах Linux существует несколько ограничений на жесткие ссылки.

В частности, вы можете создавать жесткие ссылки только на файлы, а не на каталоги.

Да да именно так; Хотя ".

" и «.

» — это жесткие ссылки на каталоги, генерируемые системой, вам (даже как пользователю «root») не разрешается создавать свои собственные.

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

Это означает, что вы не сможете создать жесткую ссылку с /usr/бин/баш на /бин/баш и если ваши каталоги / И /usr расположены в разных файловых системах (разделах - прим.

пер.

).



Символические ссылки

На практике символические ссылки (или символические, иногда «симлинки» — с англ.

) используются гораздо чаще, чем жёсткие.

Символические ссылки — это особый тип файлов, который ссылается на другие файлы по имени, а не напрямую по номеру индексного дескриптора.

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

Символические ссылки можно создать, передав параметр -s в ln.

$ ln -s secondlink thirdlink $ ls -l firstlink secondlink thirdlink -rw-rw-r-- 2 agriffis agriffis 0 Dec 31 19:08 firstlink -rw-rw-r-- 2 agriffis agriffis 0 Dec 31 19:08 secondlink lrwxrwxrwx 1 agriffis agriffis 10 Dec 31 19:39 thirdlink -> secondlink

В выводе команды ls -l символические ссылки можно отличить тремя способами.

Во-первых, обратите внимание на символ l в первом столбце.

Во-вторых, размер символической ссылки равен количеству символов в ней ( вторая ссылка в нашем случае).

В-третьих, последний столбец вывода показывает, куда ведет ссылка, используя интуитивно понятное обозначение «-> ».



Симлинки в деталях

Символические ссылки обычно более гибкие, чем жесткие ссылки.

Вы можете создавать символические ссылки на любой объект файловой системы, включая каталоги.

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

Однако этот факт также затрудняет их понимание.

Допустим, мы хотим создать ссылку в /tmp , что указывает на /usr/локальный/бен .

Мы должны ввести:

$ ln -s /usr/local/bin bin1 $ ls -l bin1 lrwxrwxrwx 1 root root 14 Jan 1 15:42 bin1 -> /usr/local/bin

Или, альтернативно:

$ ln -s .

/usr/local/bin bin2 $ ls -l bin2 lrwxrwxrwx 1 root root 16 Jan 1 15:43 bin2 -> .

/usr/local/bin

Как видите, обе символические ссылки указывают на один и тот же каталог.

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

$ ls -l bin2 lrwxrwxrwx 1 root root 16 Jan 1 15:43 bin2 -> .

/usr/local/bin



$ mkdir mynewdir $ mv bin2 mynewdir $ cd mynewdir $ cd bin2 bash: cd: bin2: No such file or directory

Потому что каталоги /tmp/usr/локальный/бен не существует, мы больше не можем перейти в бункер2 ; другими словами, бункер2 теперь сломан.

По этой причине иногда полезно избегать создания ссылок с информацией об относительном пути.

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

Рассмотрим пример, в котором мы хотим создать альтернативное имя для программы в /usr/бен :

# ls -l /usr/bin/keychain -rwxr-xr-x 1 root root 10150 Dec 12 20:09 /usr/bin/keychain

От имени суперпользователя нам нужен короткий синоним для Брелок , такой как кс .

В этом примере у нас есть root-доступ, о чем свидетельствует изменение приветствия bash на «#».

Нам нужен root-доступ, потому что обычные пользователи не имеют прав на создание файлов в /usr/бен .

От имени суперпользователя мы можем создать альтернативное имя для Брелок следующим образом:

# cd /usr/bin # ln -s /usr/bin/keychain kc # ls -l keychain -rwxr-xr-x 1 root root 10150 Dec 12 20:09 /usr/bin/keychain



# ls -l kc



lrwxrwxrwx 1 root root 17 Mar 27 17:44 kc -> /usr/bin/keychain

В этом примере мы создали символическую ссылку kc, которая указывает на файл.

/usr/bin/брелок .

Это решение пока будет работать, но создаст проблему, если мы решим переместить оба файла.

/usr/bin/брелок И /usr/bin/kc В /usr/локальный/бен :

# mv /usr/bin/keychain /usr/bin/kc /usr/local/bin # ls -l /usr/local/bin/keychain -rwxr-xr-x 1 root root 10150 Dec 12 20:09 /usr/local/bin/keychain



# ls -l /usr/local/bin/kc



lrwxrwxrwx 1 root root 17 Mar 27 17:44 kc -> /usr/bin/keychain

Поскольку мы использовали абсолютный путь для символической ссылки кс , то она еще ссылается на /usr/bin/брелок , которого не существует с тех пор, как мы переехали /usr/bin/брелок В /usr/локальный/бен .

Это привело к тому, что символическая ссылка kc теперь не работает. Как относительные, так и абсолютные пути в символических ссылках имеют свои преимущества, и в зависимости от вашей задачи вам следует использовать соответствующий тип пути.

Часто как относительные, так и абсолютные пути работают одинаково хорошо.

Пример ниже будет работать даже после перемещения обоих файлов:

# cd /usr/bin # ln -s keychain kc # ls -l kc lrwxrwxrwx 1 root root 8 Jan 5 12:40 kc -> keychain



# mv keychain kc /usr/local/bin # ls -l /usr/local/bin/keychain



-rwxr-xr-x 1 root root 10150 Dec 12 20:09 /usr/local/bin/keychain



# ls -l /usr/local/bin/kc



lrwxrwxrwx 1 root root 17 Mar 27 17:44 kc -> keychain

Теперь мы можем запустить программу Брелок печатание /usr/local/bin/kc .

/usr/local/bin/kc указывает на программу Брелок в том же каталоге, где он находится кс .



РМ

Итак, мы умеем пользоваться cp, mv и ln, пришло время узнать, как можно удалять объекты из файловой системы.

Обычно это делается с помощью команды rm. Чтобы удалить файлы, просто укажите их в командной строке:

$ cd /tmp $ touch file1 file2 $ ls -l file1 file2 -rw-r--r-- 1 root root 0 Jan 1 16:41 file1 -rw-r--r-- 1 root root 0 Jan 1 16:41 file2



$ rm file1 file2 $ ls -l file1 file2 ls: file1: No such file or directory ls: file2: No such file or directory

Имейте в виду, что в Linux после удаления файла он обычно исчезает на века.

Поэтому многие начинающие системные администраторы при удалении файлов используют опцию -i. Опция -i указывает rm удалять файлы в интерактивном режиме — это означает запрос перед удалением любого файла.

Например:

$ rm -i file1 file2 rm: remove regular empty file `file1'? y rm: remove regular empty file `file2'? y

В приведенном выше примере команда rm запрашивает подтверждение удаления каждого из указанных файлов.

Если я соглашался, мне приходилось набирать «y» и дважды нажимать Enter. Если бы я ввел «n», файл остался бы нетронутым.

Или, если я сделал что-то не так, я мог нажать Control-C и сбросить всю команду rm -i, прежде чем она нанесет какой-либо ущерб моей системе.

Если вы все еще учитесь использовать команду rm, возможно, будет полезно добавить в файл следующую строку с помощью вашего любимого текстового редактора: ~/.

bashrc , а затем выйдите из системы и войдите снова.

После этого всякий раз, когда вы вводите rm, оболочка bash автоматически преобразует его в команду rm -i. Таким образом, rm всегда будет работать в интерактивном режиме:

alias rm="rm -i"



rmdir

Чтобы удалить каталоги, у вас есть два варианта.

Вы можете удалить все объекты внутри каталога, а затем использовать rmdir для удаления самого каталога:

$ mkdir mydir $ touch mydir/file1 $ rm mydir/file1 $ rmdir mydir

Этот метод широко известен как «метод удаления каталогов для лохов».

Все настоящие пацаны и гуру админа, убившие пользователя в этом вопросе, используют гораздо более удобную команду rm -rf, описанную ниже.

Лучший способ удалить каталог — использовать рекурсивные параметры команды rm, чтобы указать ей удалить указанный каталог, а также объекты, содержащиеся в нем:

$ rm -rf mydir

Обычно rm -rf является наиболее предпочтительным методом удаления дерева каталогов.

Будьте очень осторожны при использовании rm -rf, так как его сила может быть использована обеими сторонами: добром и злом.

"=" Продолжение.






Об авторах



Дэниел Роббинс

Дэниел Роббинс — основатель сообщества Gentoo и создатель операционной системы Gentoo Linux. Дэниел проживает в Нью-Мексико со своей женой Мэри и двумя энергичными дочерьми.

Он также является основателем и главой Funtoo написал множество технических статей для IBM DeveloperWorks , Службы разработчиков Intel и журнал пользователей C/C++.



Крис Хаузер

Крис Хаузер является сторонником UNIX с 1994 года, когда он присоединился к административной команде Университета Тейлора (Индиана, США), где получил степень бакалавра в области компьютерных наук и математики.

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

В настоящее время работает в Sentry Data Systems. Крис также участвовал во многих бесплатных проектах, таких как Gentoo Linux и Clojure, и был соавтором книги.

Радость Clojure .



Арон Гриффис

Айрон Гриффис живет в Бостоне, где последние десять лет он работал в Hewlett-Packard над такими проектами, как сетевые драйверы UNIX для Tru64, сертификация безопасности Linux, виртуализация Xen и KVM, а в последнее время — над платформой.

HP ePrint .

Когда он не занимается программированием, Айрон любит думать о проблемах программирования, катаясь на велосипеде, жонглируя битами или болеея за профессиональную бейсбольную команду Boston Red Sox. Теги: #linux #console #настройка Linux #bash #для начинающих #для чайников #ln #rm #rmdir #symlinks #symlinks #hardlinks #symlinks

Вместе с данным постом часто просматривают: