- Основы Linux от основателя Gentoo. Часть 1 (3/4): Ссылки, а также удаление файлов и директорий
- Создание ссылок и удаление файлов
- Жесткие ссылки
- Символьные ссылки
- Симлинки детально
- rmdir
- Об авторах
- Daniel Robbins
- Chris Houser
- Aron Griffis
- Команда Ln в Linux (создание символических ссылок)
- Типы ссылок
- Как использовать команду ln
- Создание символической ссылки к файлу
- Создание символических ссылок на каталог
- Замена символических ссылок
- Удаление символических ссылок
- Выводы
- linux-notes.org
- Создание ссылок (symlink) в Unix/Linux
Основы Linux от основателя Gentoo. Часть 1 (3/4): Ссылки, а также удаление файлов и директорий
Третий отрывок из перевода первой части руководства. Предыдущие: первый, второй.
В этом отрывке рассмотрены жесткие и символические ссылки, а также разобрано удаление файлов и директорий с помощью команд rm и rmdir.
Создание ссылок и удаление файлов
Жесткие ссылки
Мы уже упоминали термин «ссылка», когда рассказывали о взаимоотношениях между директориями (их именами) и инодами (индексным номерами, лежащими в основе файловой системы, которых мы не замечаем). Вообще в Linux существует два типа ссылок. Тип, о котором мы уже говорили ранее, называется «жесткие ссылки». Каждый инод может иметь произвольное число жестких ссылок. Когда уничтожается последняя жесткая ссылка, и не одна программа не держит файл открытым, то Linux автоматически удаляет его. Новые жесткие ссылки можно создать воспользовавшись командой ln:
Как видите, жесткие ссылки работают на уровне инодов, для указания конкретного файла. В Linux системах, для жестких ссылок есть несколько ограничений. В частности, можно создавать жесткие ссылки только на файлы, не на директории. Да-да, именно так; хотя «.» и «..» являются созданными системой жесткими ссылками на директории, вам (даже от имени пользователя «root») не разрешается создавать любые свои собственные. Второе ограничение жестких ссылок состоит в том, что нельзя связать ими несколько файловых систем. Это значит, что у вас не получится создать жесткую ссылку с /usr/bin/bash на /bin/bash и если ваши директории / и /usr находятся в разных файловых системах (разделах — прим. пер.).
Символьные ссылки
В практике, символьные ссылки (или символические, иногда «симлинки» — от англ.) используются гораздо чаще, чем жесткие. Симлинки — это файлы особого типа, которые ссылаются на другие файлы по имени, а не прямо по номеру инода. Они не спасают файлы от удаления; если файл, на который указывает ссылка, исчезает, то симлинк перестает работать, ломается.
Символические ссылки можно создать передав для ln опцию -s.
В выводе ls -l символьные ссылки можно отличить тремя способами. Во-первых, обратите внимание на символ l в первой колонке. Во-вторых, размер символической ссылки равен количеству символов в ней (secondlink в нашем случае). В-третьих, последняя колонка в выводе показывает куда ведет ссылка с помощью интуитивного обозначения «->».
Симлинки детально
Символические ссылки в целом более гибкие, чем жесткие. Вы можете создавать символьные ссылки на любой объект файловой системы, включая директории. И благодаря тому, что их реализация основана на путях (не инодах), можно совершенно свободно создать символьную ссылку указывающую на объект другой файловой системы. Однако, сей факт также делает их сложными в понимании.
Предположим, что мы хотим создать ссылку в /tmp, которая указывает на /usr/local/bin. Нам следует набрать:
Либо, альтернативный вариант:
Как вы видите, обе символические ссылки указывают на одну директорию. Однако, если наша вторая символьная ссылка когда-нибудь будет перемещена в другую директорию, то она может «поломаться» из-за относительности пути:
$ mkdir mynewdir
$ mv bin2 mynewdir
$ cd mynewdir
$ cd bin2
bash: cd: bin2: No such file or directory
Потому, что директории /tmp/usr/local/bin не существует, мы больше не можем переместиться в bin2; другими словами, bin2 сейчас сломана.
По этой причине, избегать создания ссылок с относительной информацией о пути, иногда будет хорошей идеей. Тем не менее, существует множество случаев, где относительные символические ссылки крайне удобны. Рассмотрим пример в котором мы хотим создать альтернативное имя для программы в /usr/bin:
От имени суперпользователя мы хотим короткий синоним для keychain, такой, как kc. В этом примере у нас есть root-доступ, о чем свидетельствует измененное на «#» приветствие bash. Нам нужен root-доступ потому, что обычные пользователи не имеют прав создавать файлы в /usr/bin. От имени суперпользователя мы можем создать альтернативное имя для keychain следующим образом:
В этом примере мы создали символьную ссылку под названием kc, которая указывает на файл /usr/bin/keychain.
Пока это решение будет работать, но создаст проблему, если мы решим переместить оба файла, /usr/bin/keychain и /usr/bin/kc в /usr/local/bin:
Поскольку мы использовали абсолютный путь для символической ссылки kc, то она все еще ссылается на /usr/bin/keychain, которого не существует с тех пор как мы переместили /usr/bin/keychain в /usr/local/bin.
Это привело к тому, что симлинк kc сейчас не работает. Как относительные, так и абсолютные пути в символьных ссылках имеют свои достоинства, и, в зависимости от вашей задачи, нужно использовать соответствующий тип пути. Часто, и относительный, и абсолютный путь, будут работать одинаково хорошо. Пример ниже будет работать, даже после перемещения обоих файлов:
# mv keychain kc /usr/local/bin
# ls -l /usr/local/bin/keychain
Теперь, мы можем запустить программу keychain набрав /usr/local/bin/kc. /usr/local/bin/kc указывает на программу keychain в той же директории, где находится kc.
Итак, мы знаем как использовать cp, mv и ln, настало время узнать о том, как можно удалять объекты из файловой системы. Обычно это делается с помощью команды rm. Чтобы удалить файлы, просто укажите их в командной строке:
$ 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, и затем выйти (logout) и войти (login) в систему вновь. После этого, всякий раз, когда вы наберете rm, оболочка bash преобразует ее автоматически в команду rm -i. Таким образом, rm будет всегда работать в интерактивном режиме:
rmdir
Для удаления директорий у вас имеется два варианта. Вы можете удалить все объекты внутри директории и затем воспользоваться rmdir для удаления самой директории:
$ mkdir mydir
$ touch mydir/file1
$ rm mydir/file1
$ rmdir mydir
Этот метод широко известен под названием «способ удаления директорий для лохов». Все реальные пацаны и админы-гуру съевшие пользователя собаку на этом деле, используют гораздо более удобную команду rm -rf, описанную далее.
Самый лучший способ удалить директорию состоит в использовании опций «рекурсивного принуждения» (recursive force) команды rm, чтобы приказать ей удалять указанную директорию, также как и объекты содержащиеся внутри:
Обычно, rm -rf является наиболее предпочтительным методом для удаления древа директорий. Будьте очень осторожны, когда пользуетесь rm -rf, так как ее мощь может быть использована по обе стороны: добра и зла. =)
Об авторах
Daniel Robbins
Дэниэль Роббинс — основатель сообщества Gentoo и создатель операционной системы Gentoo Linux. Дэниэль проживает в Нью-Мехико со свой женой Мэри и двумя энергичными дочерьми. Он также основатель и глава Funtoo, написал множество технических статей для IBM developerWorks, Intel Developer Services и C/C++ Users Journal.
Chris Houser
Крис Хаусер был сторонником UNIX c 1994 года, когда присоединился к команде администраторов университета Тэйлора (Индиана, США), где получил степень бакалавра в компьютерных науках и математике. После он работал во множестве областей, включая веб-приложения, редактирование видео, драйвера для UNIX и криптографическую защиту. В настоящий момент работает в Sentry Data Systems. Крис также сделал вклад во множество свободных проектов, таких как Gentoo Linux и Clojure, стал соавтором книги The Joy of Clojure.
Aron Griffis
Эйрон Гриффис живет на территории Бостона, где провел последнее десятилетие работая в Hewlett-Packard над такими проектами, как сетевые UNIX-драйвера для Tru64, сертификация безопасности Linux, Xen и KVM виртуализация, и самое последнее — платформа HP ePrint. В свободное от программирования время Эйрон предпочитает размыщлять над проблемами программирования катаясь на своем велосипеде, жонглируя битами, или болея за бостонскую профессиональную бейсбольную команду «Красные Носки».
Источник
Команда Ln в Linux (создание символических ссылок)
Символическая ссылка, также известная как символическая ссылка или программная ссылка, представляет собой файл особого типа, который указывает на другой файл или каталог.
В этом руководстве мы расскажем, как использовать команду ln для создания символических ссылок.
Типы ссылок
В системах Linux / UNIX есть два типа ссылок:
- Жесткие ссылки . Вы можете рассматривать жесткую ссылку как дополнительное имя для существующего файла. Жесткие ссылки связывают два или более имен файлов с одним и тем же индексом . Вы можете создать одну или несколько жестких ссылок для одного файла. Невозможно создать жесткие ссылки для каталогов и файлов в другой файловой системе или разделе.
- Мягкие ссылки . Программная ссылка — это что-то вроде ярлыка в Windows. Это косвенный указатель на файл или каталог. В отличие от жесткой ссылки, символическая ссылка может указывать на файл или каталог в другой файловой системе или разделе.
Как использовать команду ln
ln — это утилита командной строки для создания ссылок между файлами. По умолчанию команда ln создает жесткие ссылки. Чтобы создать символическую ссылку, используйте параметр -s ( —symbolic ).
Синтаксис команды ln для создания символических ссылок следующий:
- Если заданы и FILE и LINK , ln создаст ссылку из файла, указанного в качестве первого аргумента ( FILE ), на файл, указанный в качестве второго аргумента ( LINK ).
- Если в качестве аргумента указан только один файл или вторым аргументом является точка ( . ), ln создаст ссылку на этот файл в текущем рабочем каталоге . Имя символической ссылки будет таким же, как имя файла, на который она указывает.
По умолчанию в случае успеха ln не производит никакого вывода и возвращает ноль.
Создание символической ссылки к файлу
Чтобы создать символическую ссылку на данный файл, откройте терминал и введите:
Замените source_file именем существующего файла, для которого вы хотите создать символическую ссылку, а symbolic_link — именем символической ссылки.
Параметр symbolic_link необязательный. Если вы не укажете символическую ссылку, команда ln создаст новую ссылку в вашем текущем каталоге:
В следующем примере мы создаем символическую ссылку my_link.txt на файл my_file.txt :
Чтобы убедиться, что символическая ссылка была успешно создана, используйте команду ls :
Результат будет выглядеть примерно так:
Символ l — это флаг типа файла, представляющий символическую ссылку. Символ -> показывает файл, на который указывает символическая ссылка.
Создание символических ссылок на каталог
Команда для создания символической ссылки на каталог такая же, как и при создании символической ссылки на файл. Укажите имя каталога в качестве первого параметра и символическую ссылку в качестве второго параметра.
Например, если вы хотите создать символическую ссылку из /mnt/my_drive/movies каталог
/my_movies вы должны запустить:
Замена символических ссылок
Если вы попытаетесь создать уже существующую символическую ссылку , команда ln выведет сообщение об ошибке.
Чтобы перезаписать путь назначения символической ссылки, используйте параметр -f ( —force ).
Удаление символических ссылок
Чтобы удалить / удалить символические ссылки, используйте команду unlink или rm .
Синтаксис unlink очень прост:
Удаление символической ссылки с помощью команды rm такое же, как и при удалении файла:
Независимо от того , какой команды вы используете, при удалении символической ссылки не добавляет / слэша в конце его названия.
Если вы удалите или переместите исходный файл в другое место, символический файл останется висящим (сломанным), и его следует удалить.
Выводы
Чтобы создать символическую ссылку в Linux, используйте команду ln с параметром -s .
Для получения дополнительной информации о команде ln посетите страницу руководства ln или введите man ln в терминале.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Источник
linux-notes.org
Хотелось бы рассказать как можно создавать ссылки (симлинки) в ОС Unix/Linux. В своей теме «Создание ссылок (symlink) в Unix/Linux» я на готовом примере покажу как это делается. Существуют несколько видов ссылок, и я расскажу в чем разница между ними.
Симлинк или мягкая ссылка представляет собой особый тип файла, который содержит ссылку на другой файл или каталог в виде абсолютного или относительного пути.
Жёсткой ссылкой — это структурная составляющая файла которая описывает его элемент каталога.
Создание ссылок (symlink) в Unix/Linux
В этом подразделе, я расскажу какие бывают симлинки и в чем они отличаются.
Мягкая ссылка (Soft link):
- Мягкие ссылки используют различные номера инод чем основные файлы.
- Мягкие ссылки становится полезными, если исходный файл был удален.
- Мягкие ссылки могут быть созданы из каталогов.
- Мягкая ссылка может быть создана на пересечении файловых систем.
Для того чтобы создать симлинк в линукс используется следующая команда:
И так, я создал симлинк linux-notes.org.conf на на тот же файл но который будет расположен в другой директории. После создания симлинка, необходимо сменить права на него:
Для проверки номера иноды:
Я создал симлинк на файл, так же, можно создавать симлинка на целую папку, для этого используйте:
И так, я создал симлинк symlink-to-opt-dir на папку /opt/directory. После создания симлинка, необходимо сменить права на него:
Вот и все, очень просто, и полезно.
Для проверки номера иноды:
Чтобы удалить, используйте:
И аналогично для каталогов.
Если вы удалите мягкую ссылку (/home/captain/linux-notes.org-softlink.txt), то сам файл данных будет по-прежнему находится там же (/home/captain/linux-notes.org.txt). Тем не менее, если вы удалите /home/captain/linux-notes.org.txt, то /home/captain/linux-notes.org-softlink.txt станет сломанной ссылкой и данные будут потеряны.
Жесткие ссылки (Hard Links):
- Жесткие ссылки использует тот же номер иноды что и основные файлы.
- Нельзя создать жесткие ссылки на каталоги.
- Жесткие ссылки не могут быть созданы на пересечении файловых систем.
- Жесткие ссылки всегда относится к источнику, даже если они перемещаются или удаляется.
Чтобы создать «жесткую ссылку», используйте:
Проверяем номер иноды:
Оба файла имеют одинаковые иноды (одинаковое количество индексных дескрипторов). Если нужно удалить «жесткую ссылку», то используйте команду:
Если вы удалите жесткую ссылку, ваши данные будут там. Если вы удалите /home/captain/linux-notes.org.txt то файл будет по-прежнему доступен через жесткую ссылку
Жесткие ссылки (Hardlink) vs Мягкие ссылки (Softlink) в UNIX/Linux
- Как я говорил ранее, жесткие ссылки не могут быть созданы для директорий.
- Жесткие ссылки не могут использоваться на пересечении границ файловых систем ( Нельзя создать сылку /tmp и примонтированную на /tmp ко 2-му HDD который смонтирован на/harddisk2).
- Символические ссылки (мягкие ссылки) ссылаются на символичный путь с указанием абстрактного расположение другого файла.
- Жесткие ссылки, ссылаются к определенному местоположению физических данных.
На этом, моя тема «Создание ссылок (symlink) в Unix/Linux» завершена. Не сильно сложная тема, но очень полезная.
Источник