4.5 Работа со ссылками (Working with Link Files)¶
Как обсуждалось ранее в этой главе, файловая система Linux поддерживает особый тип файла — файл-ссылку (link file). Файлы-ссылки не содержат данных в том смысле, в каком их содержат обычные файлы. Вместо этого они являются перенаправителями, указывающими на другой файл или каталог в файловой системе. В Linux существует два типа ссылок:
-
Жёсткая ссылка (Hard link) — файл, который непосредственно указывает на индексный дескриптор (inode) другого файла. Индексный дескриптор хранит основную информацию о файле в файловой системе Linux: его размер, устройство, владельца и права доступа. Поскольку оба файла используют один и тот же индексный дескриптор, после создания жёсткой ссылки фактически невозможно определить, какой из файлов является указателем, а какой — целью. Эти два файла ведут себя как один и тот же файл, даже если находятся в разных местах файловой системы.
-
Символьная ссылка (Symbolic link) — файл-ссылка, также указывающий на другой файл в файловой системе. Однако символьная ссылка имеет собственный индексный дескриптор. Благодаря тому что файл-указатель обладает собственным индексным дескриптором, указатель и цель в файловой системе легко различимы. Например, в предыдущей главе вы видели, что файл
/usr/bin/viна самом деле является символьной ссылкой, указывающей на файл/bin/vim. Это показано в следующем примере:
Для создания файла-ссылки используется команда ln. Синтаксис: ln целевой_файл файл_ссылки. Вызов ln без параметров создаёт жёсткую ссылку. Для создания символьной ссылки применяется параметр -s. В следующем примере команда ln используется для создания символьной ссылки между файлом myapp в подкаталоге bin домашнего каталога пользователя и исполняемым файлом myapp, расположенным в /var/opt:
rtracy@ openSUSE:~/bin> ln -s /var/opt/myapp myapp
rtracy@ openSUSE:~/bin> ls -l
total 0
lrwxrwxrwx 1 rtracy users 14 2011-02-01 13:15 myapp -> /var/opt/myapp
rtracy@fs2:~/bin>cd ..
rtracy@fs2:~> myapp
This is my new executable script file.
С помощью команды ls -l видно, что myapp фактически указывает на исполняемый файл /var/opt/myapp. Это удобно, если программа /var/opt/myapp используется часто. Поскольку каталог /var/opt не включён в переменную окружения PATH пользователя, для каждого запуска myapp пришлось бы вводить полный путь к исполняемому файлу (либо предварительно переходить в каталог /var/opt). Однако подкаталог bin домашнего каталога автоматически добавляется в переменную окружения PATH файлами конфигурации оболочки bash. Разместив символьную ссылку в этом каталоге, можно запустить /var/opt/myapp, просто введя myapp в приглашении командной строки. Файл символьной ссылки перенаправит оболочку к нужному файлу в /var/opt и запустит его оттуда. Это показано в приведённом выше примере.
Примечание
В главе 6 мы рассмотрим ключевую роль, которую символьные ссылки играют при инициализации системы Linux процессом init.
Давайте закрепим управление файлами на практике в следующем упражнении.
Упражнение 4-3. Управление файлами и каталогами
В этом упражнении вы будете практиковать управление файлами и каталогами с помощью команд оболочки. Выполнить упражнение можно в виртуальной машине, поставляемой с этой книгой. Для подготовки правильно настроенной среды запустите снимок 4-1 (snapshot 4-1).
VIDEO Посмотрите видео к упражнению 4-3, в котором показано, как выполнить это задание.
Выполните следующие действия:
- Убедитесь, что система Linux запущена и вы вошли в систему как пользователь
student. Откройте сеанс терминала и перейдите в домашний каталог, введяcdв приглашении командной строки. - Создайте новый каталог в домашнем каталоге, введя
mkdir MyFiles. - Введите
lsи убедитесь, что новый каталог создан. - Создайте новый файл
myfile.txtв каталогеMyFiles, введяtouch ~/MyFiles/myfile.txt. - Введите
ls ~/MyFilesи убедитесь, что файл существует. - Переключитесь на учётную запись суперпользователя
root, введяsu –и указав парольstudent. - Просмотрите системный журнал, введя
cat /var/log/messages | more. - Прокрутите несколько страниц файла, затем нажмите Ctrl+C для возврата в приглашение командной строки.
- Просмотрите последние записи файла журнала, введя
tail /var/log/messages. -
Отслеживайте файл
/var/log/messagesпри остановке и запуске служб, выполнив следующее:a. В приглашении командной строки введите
tail -f /var/log/messages. Убедитесь, что файл журнала теперь отслеживается командойtail.b. Откройте новое окно терминала и переключитесь на учётную запись суперпользователя
rootс помощью командыsu –и пароля пользователяroot.c. Отключите сетевую карту системы, введя
ifdown enp0s3в приглашении командной строки.d. Переключитесь в сеанс терминала, где выполняется
tail. Вы должны увидеть новые строки, добавляемые в файл по мере отключения сетевого адаптера.e. Переключитесь обратно во второй сеанс терминала и введите
systemctl restart network. Снова должны появиться новые строки в файле по мере повторного включения сетевого адаптера в первом окне терминала.f. Дважды введите
exit, чтобы закрыть второе окно терминала.g. Переключитесь в сеанс терминала, где выполняется
tail, и нажмите Ctrl+C для выхода изtail. -
Вернитесь к своей обычной учётной записи, введя
exit. - Удалите каталог
MyFilesиз домашнего каталога, введяrm -r ~/MyFiles. - Введите
lsи убедитесь, что каталог и его содержимое удалены. - Создайте копию файлов и подкаталогов домашнего каталога в
/tmp, введяcp -R ~ /tmp. - Просмотрите содержимое
/tmp, введяls /tmp. Убедитесь, что домашний каталог скопирован. -
Поработайте с символьными ссылками, выполнив следующее:
a. Создайте символьную ссылку из каталога
docsв домашнем каталоге на каталог/usr/share/doc, введяln -s /usr/share/doc/ ~/docs.b. Введите
ls -l. Убедитесь, что файлdocsуказывает на/usr/share/doc/.c. Введите
cd docs.d. Введите
pwd. В каком каталоге вы находитесь?e. Введите
ls. Вы должны увидеть содержимое каталога/usr/share/doc/, несмотря на то что всё ещё находитесь в~/docs.