
KTNI_Козлов(ответы) / 27
.docx27. Базовые операции с объектами файловой системы.
Выполняя проект, разработчики постоянно сталкиваются с задачами, связанными с созданием, копированием, перемещением, переименованием и удалением некоторых файлов и каталогов. Базовые операции по работе с элементами файловой системы приходится выполнять при назначении нового проекта, добавлении файлов шаблонов, написании файлов сценария выполнения проекта, создании общих распределенных ресурсов между пользователями. Проведение таких операций невозможно без понимания основ работы с файловой системой Linux. Несмотря на связь таких функций с привычным семейством операционных систем Microsoft Windows, в Linux имеются ряд отличий.
Прежде чем мы приступим к рассмотрению основных операций с объектами файловой системы (ОФС), определим данные объекты. Ранее мы считали, что ОФС являются файл и каталог. В UNIX-системах этот перечень несколько шире. Кроме перечисленных, существуют еще файл устройства и ссылка. В свою очередь файл устройства может быть символьного или блокового типа. Таким образом, имеется четыре объекта: файл, директория (каталог, папка), файл устройства и ссылка.
Файл устройства – файл, посредством которого можно обращаться к отдельным компонентам компьютера, например, выделить и/или смонтировать (сделать доступным для чтения и записи) отдельный раздел на дисковом носителе (винчестере) либо отправить содержимое файла или потока на печать.
Ссылка – файл, посредством которого можно обращаться к любым ОФС, находящимся в любом месте данной системы. В целом ссылки немного напоминают ярлыки, но есть определенные нюансы.
Итак, базовыми операциями с ОФС являются копирование, переименование, перемещение, удаление, а также назначение ссылки, создание файла или каталога (директории) и переход из одной директории в другую.
Смена директории. После того, как пользователь зарегистрируется в ОС Linux, он попадает в домашнюю директорию пользователя. Однако по мере работы со средствами операционной системы или САПР разработчику необходимо периодически менять директорию, например, переходить от одного проекта к другому. Для этого в командном интерпретаторе предусмотрена команда cd . Синтаксис команды: cd новая_директория.
В следующем примере пользователь из своей текущей директории (по умолчанию домашняя директория пользователя antonk) переходит в директорию /etc , затем обратно. Команда pwd служит для возврата к текущему местоположению пользователя. Знак «-» в качестве параметра при команде cd позволяет вернуться в предыдущее местоположение.
[antonk@lab4236s -]$ pwd
/home/antonk
[antonk@lab4236s -]$ cd /etc
[antonk@lab4236s etc]$ pwd
/etc
[antonk@lab4236s etc]$ cd -
/home/antonk
[antonk@lab4236s -]$ pwd
/home/antonk
[antonk@lab4236s -]$
Создание нового каталога. Создание нового каталога (директории, папки) – одна из наиболее востребованных операций, которую выполняют пользователи Linux, в том числе и разработчики СБИС. Для того чтобы разделить проекты между собой, удобно хранить их и работать с ними в разных директориях. Создание новой директории осуществляется с помощью команды mkdir. Синтаксис команды: mkdir имя_новой_директории.
Имеется возможность с помощью одной команды создать целую вложенность, когда один каталог вложен в другой и т.д. Для этих целей совместно с командой mkdir используется опция –p . В следующем примере пользователь antonk в своей домашней директории создает каталог «new», а в нем подкаталог «new2» .
[antonk@lab4236s ~]$ mkdir -p new/new2
[antonk@lab4236s ~]$ cd new/new2
[antonk@lab4236s new2]$ pwd
/home/antonk/new/new2
[antonk@lab4236s new2]$
Копирование файлов. Чтобы создать копию файла, нужно указать команде ср в качестве параметров два имени файла (табл.2.3). Первое имя – имя копируемого файла, который уже существует. Этот файл часто называют исходным. Второе имя – имя, которое вы хотите присвоить копии. Это будет новый файл, содержащий копию всех данных исходного файла. Его часто называют выходным файлом. Команда ср имеет следующий синтаксис: ср исходный_файл выходной_файл.
В следующем примере пользователь antonk делает копию файла «yyyy» в новый файл «tttt»:
[antonk@lab4236s ~]$ alias lh='ls -ld /home/antonk'
[antonk@lab4236s ~]$ lh
drwx--------- 27 antonk antonk 4096 Sep 22 14:22 /home/antonk
[antonk@lab4236s ~]$
Базовые операции с объектами файловой системы
|
Может случиться так, что при копировании файла с помощью команды ср вы непреднамеренно уничтожите другой файл. При создании копии посредством этой команды сначала создается файл, а затем в него копируются данные. Если какой-нибудь файл уже имеет то же имя, которое вы указали для выходного файла, первый из них уничтожается и создается новый файл с этим именем. В некотором смысле можно сказать, что файл оригинала перекрывается новой копией. Чтобы случайно не переписать имеющийся файл, лучше совместно с командой cp использовать опцию –i (interactive). В этом случае при выполнении каждой процедуры перезаписи будет запрашиваться подтверждение. Если вы ответите «у», то существующий файл будет уничтожен и программа создаст новый файл в качестве копии. Если вы дадите другой ответ, он будет считаться отрицательным и выполнение команды ср будет прервано, а файл оригинала сохранен. В следующем примере файл «yyyy» перекрывается файлом «rrrr». Файл «yyyy» уже существует.
[antonk@lab4236s ~]$ ls -l yyyy
-rw-rw-r– 1 antonk antonk 243 Sep 22 14:22 yyyy
[antonk@lab4236s ~]$ ls -l tttt
-rw-rw-r– 1 antonk antonk 243 Sep 23 10:54 tttt
[antonk@lab4236s ~]$ cp -i tttt yyyy
cp: overwrite «yyyy'? y
[antonk@lab4236s ~]$
Чтобы скопировать файл из рабочего каталога в другой, нужно указать имя этого каталога команде ср в качестве второго параметра. Новая копия будет иметь то же имя, что и оригинал, но разместится в другом каталоге. Файлы в разных каталогах могут иметь одинаковые имена, поскольку в этом случае они считаются разными.
В следующем примере создадим новый каталог copy и скопируем в него файл «yyyy»:
[antonk@lab4236s ~]$ mkdir copy
[antonk@lab4236s ~]$ cp yyyy copy
[antonk@lab4236s ~]$
Команда ср может использовать в качестве параметров имена многих файлов, заданные в виде списка, поэтому можно одновременно копировать в каталог сразу несколько файлов. Введите имена этих файлов в командной строке, причем имя каталога должно быть последним параметром. Все эти файлы копируются в указанный каталог. В следующем примере пользователь копирует файлы «rrr», «yyyy» и «qqq» в каталог copy.
[antonk@lab4236s ~]$ cp rrr yyyy qqq copy/
При создании списка имен файлов для команды ср можно использовать любые групповые символы. Если, например, нужно скопировать в заданный каталог все файлы с исходными текстами программ, написанными на языке Perl (файлы с расширением pl), то копирование всех файлов из текущей директории без указания их имен в директорию source_perl осуществляется путем предварительного формирования списка. В следующем примере проведем копирование всех исходных файлов Perl в директорию source_perl:
[antonk@lab4236s ~]$ ls -l *.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:22 l.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:22 2.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:22 3.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:22 4.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:22 5.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:22 6.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:22 7.pl
-rwxr-xr-x 1 antonk antonk 123 Oct 24 2008 p.pl
[antonk@lab4236s ~]$ mkdir source_perl
[antonk@lab4236s ~]$ cp *.pl source_perl/
[antonk@lab4236s ~]$ ls -l source_perl/
total 4
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:23 l.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:23 2.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:23 3.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:23 4.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:23 5.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:23 6.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:23 7.pl
-rwxr-xr-x 1 antonk antonk 123 Sep 28 15:23 p.pl
[antonk@lab4236s ~]$
Наряду с символом «звездочки», можно использовать и другие групповые символы, например квадратные скобки. С использованием квадратных скобок удалим только те исходные файлы Perl в нашем перечне, имена которых находятся в диапазоне чисел от 3 до 6:
[antonk@lab4236s ~]$ ls -l *.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:22 l.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:22 2.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:22 3.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:22 4.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:22 5.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:22 6.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:22 7.pl
-rwxr-xr-x 1 antonk antonk 123 Oct 24 2008 p.pl
[antonk@lab4236s ~]$ rm [3-6].pl
[antonk@lab4236s ~]$ ls -l *.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:22 l.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:22 2.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:22 7.pl
-rwxr-xr-x 1 antonk antonk 123 Oct 24 2008 p.pl
[antonk@lab4236s ~]$
Переименование и перемещение файлов. С помощью команды mv можно либо переименовать файл, либо переместить файл из одного каталога в другой.
Используя mv для переименования файла, в качестве второго параметра нужно указать новое имя файла. Первый параметр – текущее имя файла mv текущее_имя_файла новое_имя_файла
В следующем примере имя файла «qqq» меняется на «qqq2». В качестве дополнения к команде mv установим опцию –i , которая позволит проинформировать пользователя в случае перезаписи уже существующего файла. Чтобы данная опция была применима в нашем случае, предварительно создадим файл с именем «qqq2» с помощью команды touch, которая в качестве параметра получает имя нового файла.
[antonk@lab4236s ~]S touch qqq2
[antonk@lab4236s ~]$ mv -i qqq qqq2
mv: overwrite *qqq2'? y
[antonk@lab4236s ~]$
Чтобы переместить файл из одного каталога в другой, нужно в качестве первого параметра при команде mv задать имя_файла, а в качестве второго абсолютный или относительный путь места назначения.
В следующем примере, находясь в домашнем каталоге пользователя (/home/antonk), с использованием группового символа «знака вопроса» осуществим перемещение всех командных файлов Perl, имеющих в своем названии один символ, из директории /home/antonk/source_perl в директорию /home/antonk/copy .
[antonk@lab4236s ~]$ pwd /home/antonk
[antonk@lab4236s ~]$ ls -l /home/antonk/source_perl/
total 4
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:23 l.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:23 2.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:23 3.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:23 4.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:23 5.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:23 6.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:23 7.pl
-rwxr-xr-x 1 antonk antonk 123 Sep 28 15:23 p.pl
[antonk@lab4236s ~]$ ls -l /home/antonk/copy/
total 12
-rw-rw-r– 1 antonk antonk 1962 Sep 28 15:13 qqq
-rw-rw-r– 1 antonk antonk 59 Sep 28 15:13 rrr
-rw-rw-r– 1 antonk antonk 243 Sep 28 15:13 yyyy
[antonk@lab4236s ~]$ mv ~/source_perl/?.pl ~/copy/
[antonk@lab4236s ~]$ ls -l /home/antonk/copy/
total 16
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:23 l.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:23 2.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:23 3.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:23 4.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:23 5.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:23 6.pl
-rw-rw-r– 1 antonk antonk 0 Sep 28 15:23 7.pl
-rwxr-xr-x 1 antonk antonk 123 Sep 28 15:23 p.pl
-rw-rw-r– 1 antonk antonk 1962 Sep 28 15:13 qqq
-rw-rw-r– 1 antonk antonk 59 Sep 28 15:13 rrr
-rw-rw-r– 1 antonk antonk 243 Sep 28 15:13 yyyy
[antonk@lab4236s ~]$
Команда pwd возвращает абсолютный путь текущего местоположения. Важно заметить, что домашняя директория пользователя заменяется символом «волнистой линии». В нашем случае под «волнистой линией» понимается путь /home/antonk . Конкретно в данном примере при использовании спецсимвола «знака вопроса» с указанием расширения .pl сформировался список из всех файлов, находящихся в данной директории, поэтому данный список можно было бы сформировать при использовании одной «звездочки».
В ОС Linux предусмотрена возможность копировать и перемещать целые каталоги. В качестве первого параметра команд ср и mv могут использовать имя каталога, позволяя копировать и перемещать подкаталоги из одного каталога в другой (см. табл. 3). Первый параметр – имя перемещаемого или копируемого каталога, второй – имя каталога, в который он будет помещен. При перемещении и копировании каталогов действует та же структура путевых имен, что и при соответствующих операциях с файлами.
Подкаталоги (вложенные директории) можно так же легко, как и файлы, копировать из одного каталога в другой. Для копирования каталога команду ср необходимо использовать с опцией -r (сокращение от recursive – «рекурсивный»). Эта опция дает команде ср указание копировать каталог вместе со всеми его подкаталогами. Другими словами, копируется все поддерево каталогов, начиная с указанного.
В следующем примере скопируем каталог copy со всем его содержимым в каталог source_perl.
[antonk@lab4236s ~]$ cp -r copy/ source_perl/
[antonk@lab4236s ~]$ cd source_perl/
[antonk@lab4236s source_perl]$ ls -l
total 4
drwxrwxr-x 2 antonk antonk 4096 Sep 28 17:40 copy
[antonk@lab4236s source_perl]$
Удаление файлов. В процессе работы разработчика СБИС с ОС Linux количество проектов будет неуклонно расти, часть из которых следует удалять, например, ошибочные или ненужные проекты, а также отдельные данные в этих проектах. Новые файлы появляются в этой системе очень часто. Их можно удалить посредством команды rm. Синтаксис командной строки rm выглядит следующим образом: rm –опция имена_файлов.
В следующем примере пользователь antonk удаляет в текущей директории файлы «rrr» , «qqq2» и «7.pl». Опция –i требуется для запроса подтверждения удаления каждого объекта. Если вы введете «у», файл будет удален. При любом ином ответе файл не удаляется. Совместно с командой rm также применимы групповые символы, например, символ «звездочки»:
[antonk@lab4236s ~]$ rm -i qqq2 rrr 7.pl
rm: remove regular file 'qqq2'? y
rm: remove regular file 'rrr'? y
rm: remove regular empty file '7.pl'? y
[antonk@lab4236s ~]$
Если вам требуется удалить каталог и все его подкаталоги, применяется команда rm с опцией -r. Будьте очень внимательны, при неправильном ее использовании можно легко стереть все свои файлы.
В следующем примере показано, как удалить каталог source_perl с подкаталогом copy и его содержимым:
[antonk@lab4236s ~]$ ls -l source_perl/
total 4
drwxrwxr-x 2 antonk antonk 4096 Sep 28 17:40 copy
[antonk@lab4236s ~]$ rm -ri source_perl/
rm: descend into directory «source_perl/'? y
rm: descend into directory «source_perl/copy'? y
rm: remove regular empty file «source_perl/copy/4.pl' y
rm: remove regular file «source_perl/copy/qqq'? y
rm: remove regular empty file «source_perl/copy/7.pl' y
rm: remove regular empty file «source_perl/copy/6.pl' y
rm: remove regular empty file «source_perl/copy/5.pl' y
rm: remove regular file «source_perl/copy/p.pl'? y
rm: remove regular empty file «source_perl/copy/2.pl' y
rm: remove regular empty file «source_perl/copy/l.pl' y
rm: remove regular file «source_perl/copy/yyyy'? y
rm: remove regular file «source_perl/copy/rrr'? y
rm: remove regular empty file «source_perl/copy/3.pl' y
rm: remove directory «source_perl/copy'? y
rm: remove directory «source_perl/'? y
[antonk@lab4236s ~]$
Ссылки – команда ln. Довольно часто разработчики СБИС сталкиваются с необходимостью иметь доступ к ОФС, например к файлам-комментариям своего проекта, из разных мест файловой системы или файловой структуры. Так, часто разным пользователям приходится вносить изменения в один и тот же проект, например, из домашних каталогов разных пользователей ссылаться на один общий проект в пользовательской папке одного из разработчиков или располагающийся на общем ресурсе внутри данной файловой системы, или на смонтированном внешнем сетевом ресурсе, например, с помощью системы NFS. В этом случае удобно использовать такой тип данных ОС Linux, как ссылки.
Назначение ссылок осуществляется с помощью команды ln. Команда ln принимает два параметра: имя исходного файла и новое, дополнительное, имя файла. В операции ln указываются оба имени, но в действительности существует лишь один физический файл. Синтаксис команды следующий: ln исходное_имя_файла ссылка.
Ссылки разделяются на прямые (жесткие) и символьные (мягкие). Два типа ссылок назначаются с помощью команды ln, только назначение символьной ссылки осуществляется совместно с опцией –s.
В следующем примере файлу rc, находящемуся в папке /etc, присваивается ссылка link. С его помощью также можно обратиться к файлу /etc/rc.
[antonk@lab4236s ~]$ ln -s /etc/rc link
[antonk@lab4236s ~]$ ls -l link
lrwxrwxrwx 1 antonk antonk 7 Sep 30 11:06 link -> /etc/rc
[antonk@lab4236s ~]$
У одного ОФС может быть сколько угодно ссылок. Важно, чтобы несколько ссылок с одинаковыми именами не находились в одной директории. При отображении расширенного вывода команды ls с опцией –l и параметром link отображается строка, первым символом в которой стоит буква l, сообщающая пользователю, что данный объект - ссылка. Вместо имени объекта в последней колонке показано, что link ссылается на файл /etc/rc.
Используя команду расширенного вывода ls с опцией -l можно выяснить, есть ли у файла ссылки. Эта команда позволяет получить следующую информацию: права доступа, количество ссылок, размер файла и дату последнего изменения. Первое число перед именем владельца файла – это количество ссылок, число перед датой – размер файла.
В следующем примере создадим еще одну ссылку к файлу /etc/rc и сравним сведения по ссылкам:
[antonk@lab4236s ~]$ ln -s /etc/rc link2
[antonk@lab4236s ~]$ ls -l link*
lrwxrwxrwx 1 antonk antonk 7 Sep 30 11:06 link -> /etc/rc
lrwxrwxrwx 1 antonk antonk 7 Sep 30 11:09 link2 -> /etc/rc
[antonk@lab4236s ~]$
Следует обратить внимание на то, что размеры этих двух ссылок равны, так как ссылаются они на один и тот же файл. Ранее мы создавали символьные ссылки (команда ln с опцией -s), т.е. такие ссылки, которые, с одной стороны, имеют малый размер и могут ссылаться на любой элемент не только файловой системы, но даже файловой структуры (структура объединяет разные системы), но, с другой стороны, являясь неким ярлыком, становятся бесполезными при потере оригинального объекта. Однако если необходимо создать ссылку, которая служила бы дополнительным именем объекта, требуется создание жесткой ссылки. Достоинство жесткой ссылки состоит в том, что она является тем же самым объектом, на который она ссылается.
Следует пояснить, что на уровне ядра операционной системы любой ОФС представляет собой последовательность информации (данных), имеющую начало и конец в составе файловой системы, расположенной на носителе информации. Каждая последовательность, связанная с определенным видом данных, носит название inode. А так как данных в рамках файловой системы много, то каждый inode имеет свой уникальный номер. По сути, номер inode указывает операционной системе, откуда требуется считывать данные.
Возвращаясь к жестким ссылкам следует показать, что жесткая ссылка и объект, на который она ссылается, имеют один и тот же inode, т.е. жесткая ссылка – это другое имя объекта, с помощью которого можно ссылаться на исходный объект. Ввиду того, что жесткая ссылка -это дополнительное имя объекта данных и они ссылаются на один и тот же идентификационный номер inode, они оба должны быть расположены в одной файловой системе, так как в другой системе существует своя нумерация inode.
В следующем примере попытаемся назначить жесткую ссылку link_rc в файловой системе, смонтированной в /home-раздел, к файлу rc, располагающемуся в другой системе, смонтированной в раздел /etc:
[antonk@lab4236s ~]$ ln /etc/rc link_rc
ln: creating hard link 'link_rc' to 'Vetc/rc': Invalid cross-device link
[antonk@lab4236s ~]$ ln -s /etc/rc link_rc
[antonk@lab4236s ~]$ ls -l /etc/rc
lrwxrwxrwx 1 root root 7 Feb 13 2008 /etc/rc -> rc.d/rc
[antonk@lab4236s ~]$ ls -l link_rc
lrwxrwxrwx 1 antonk antonk 7 Sep 30 13:10 link_rc -> /etc/rc
[antonk@lab4236s ~]$
Как видно, создать жесткую ссылку к файлу rc не получилось в силу вышеперечисленного ограничения, однако мягкую ссылку создать можно, и мы создали ссылку на файл rc, который сам является ссылкой на объект /etc/rc.d/rc. Таким образом, создан механизм обращения к файлу через две ссылки.
Теперь создадим жесткую ссылку cmos_link в текущей директории к файлу cmos.doc, который располагается в текущей домашней директории пользователя antonk, и убедимся, что и ссылка, и объект имеют одинаковый inode. Для отображения расширенной информации об объекте с выводом индексного дескриптора - номера inode - используется команда ls с опциями –i (inode) и –l.
[antonk@lab4236s ~]$ ln cmos.doc cmos_link
[antonk@lab4236s ~]$ ls -il cmos*
7929887 -rw-r–r– 2 antonk antonk 333312 Oct 30 2008 cmos.doc
7929887 -rw-r–r– 2 antonk antonk 333312 Oct 30 2008 cmos_link
[antonk@lab4236s ~]$
Обратим внимание, что и объект, и ссылка на него имеют полностью одинаковые параметры (даже время и дату создания), только разные имена. Номер inode находится в самом начале строки, он одинаков и для объекта, и для ссылки. Фактически жесткая ссылка – дополнительное имя объекта. Достоинство жесткой ссылки состоит в том, что, работая с ней, мы напрямую работаем с объектом. Отсюда название – прямая ссылка. Недостатком такой ссылки является невозможность ее создания в одной файловой системе на объект в другой.
Чтобы удалить файл, нужно удалить все его ссылки. Имя файла фактически рассматривается как еще одна ссылка на этот файл, т.е. с помощью команды rm удаляется именно ссылка на тот или иной файл. Если ссылок было несколько и одна из них удаляется, к файлу можно обращаться по оставшимся, даже в случае удаления исходной ссылки – первоначального имени файла. Это утверждение остается справедливым и после удаления первоначальной ссылки – исходного имени файла. Вместо него вполне могут применяться любые дополнительные ссылки.
В следующем примере создадим новый текстовый файл bmt_spisok путем копирования стандартного вывода данных списка всех файлов, начинающихся с комбинации «bmt», с одним произвольным символом в файл bmt_spisok. Далее создадим жесткую ссылку bmt_link на этот файл и сотрем файл-оригинал bmt_spisok. При чтении файла bmt_link мы видим, что он имеет точное содержимое файла-оригинала bmt_spisok. Таким образом, мы можем дальше работать с содержимым исходного файла через его ссылки даже при отсутствии данного исходного файла.
[antonk@lab4236s ~]$ ls -l bmt? > bmt_spisok
[antonk@lab4236s ~]$ cat bmt_spisok
-rw-rw-r– 1 antonk antonk 0 Sep 21 15:11 bmtl
-rw-rw-r– 1 antonk antonk 0 Sep 21 15:11 bmt2
-rw-rw-r– 1 antonk antonk 0 Sep 21 15:11 bmt3
-rw-rw-r– 1 antonk antonk 42 Sep 21 15:11 bmt?
[antonk@lab4236s ~]$ ln bmt_spisok bmt_link
[antonk@lab4236s ~]$ ls -l bmt_spisok bmt_link
-rw-rw-r– 2 antonk antonk 192 Sep 30 15:35 bmt_link
-rw-rw-r– 2 antonk antonk 192 Sep 30 15:35 bmt_spisok
[antonk@lab4236s ~]$ rm bmt_spisok
[antonk@lab4236s ~]$ cat bmt_link
-rw-rw-r– 1 antonk antonk 0 Sep 21 15:11 bmt1
-rw-rw-r– 1 antonk antonk 0 Sep 21 15:11 bmt2
-rw-rw-r– 1 antonk antonk 0 Sep 21 15:11 bmt3
-rw-rw-r– 1 antonk antonk 42 Sep 21 15:11 bmt?
[antonk@lab4236s ~]$