
LINUX / KOZLOV2_1
.pdfЧтобы переместить файл из одного каталога в другой, нужно в качестве первого параметра при команде 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 |
|
|
|
41 |
PDF created with pdfFactory Pro trial version www.pdffactory.com
-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 могут использовать имя каталога, позволяя копировать и перемещать подкаталоги из одного каталога в другой (см. табл.2.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 –опция имена_файлов.
42
PDF created with pdfFactory Pro trial version www.pdffactory.com
Вследующем примере пользователь 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 ~]$
43
PDF created with pdfFactory Pro trial version www.pdffactory.com
Ссылки – команда 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
44
PDF created with pdfFactory Pro trial version www.pdffactory.com
[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
45
PDF created with pdfFactory Pro trial version www.pdffactory.com
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.
46
PDF created with pdfFactory Pro trial version www.pdffactory.com
Таким образом, мы можем дальше работать с содержимым исходного файла через его ссылки даже при отсутствии данного исходного файла.
[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 ~]$
47
PDF created with pdfFactory Pro trial version www.pdffactory.com
Контрольные вопросы
1.Назовите основные особенности ОС Linux. В чем заключаются преимущества данной платформы перед другими операционными системами?
2.Покажите назначение основных аппаратных компонентов электронно- вычислительной системы и их связь с командным интерпретатором ОС Linux.
3.Назначение командного интерпретатора. Перечислите командные интерпретаторы ОС Linux. Покажите их отличия друг от друга.
4.Дайте определения следующим терминам: команда, опция, параметр.
5.Перечислите общие и групповые символы. Приведите примеры использования общих и групповых символов. Как их можно применять в повседневной работе разработчика?
6.Дайте определения терминам: стандартный поток ввода; стандартный поток вывода; стандартный поток вывода об ошибках.
7.Дайте определение программного канала. В чем заключается его назначение? Приведите примеры.
8.Перечислите известные вам команды. Приведите примеры.
48
PDF created with pdfFactory Pro trial version www.pdffactory.com
3. Работа в файловой системе ОС Linux
3.1. Особенности файловой системы
Основным отличием ОС Linux от операционных систем семейства Windows является качественно другой тип организации файловой системы. Если в ОС Windows пользователь имеет дело с дисковой файловой системой, т.е. обращается к логическим дискам C, D, E… и использует типы файловых систем, такие как FAT16, FAT32, NTFS, то в операционных системах UNIX-семейства, в том числе в Linux, нет логических дисков. Организация файловой системы в Linux построена на разграничении так называемых партиций (partitions) – частей общего пространства жесткого диска (винчестера), обращение к данным на которых возможно путем выбора назначенного каталога файловой системы, при этом типами файловых систем являются EXT2 и EXT3. Различие между
приведенными файловыми системами заключается в разном уровне безопасности сохранения данных. Гибкий способ назначения разделов Linux реализует эффективное управление безопасностью операционной системы, одним пользователям позволяя назначать доступ к данным, а другим – нет. Это важное различие, однако, далеко не единственное.
Файловая структура Linux представляет собой корневой и некоторые другие разделы, на которых организованы различные каталоги с ОФС. Каждый из каталогов предназначен в основном для хранения файлов и подкаталогов, зарезервированных операционной системой. Корневой каталог обозначается символом «/» и служит отправной точкой при обращении к любым ОФС. Основными каталогами файловой структуры являются: /home (содержит начальные каталоги пользователей); /bin (содержит все стандартные команды и утилиты); /usr (содержит файлы и команды, используемые системой, разбит на несколько подкаталогов); /usr/bin (содержит команды и утилиты, применяемые пользователем); /usr/sbin (содержит команды системного администрирования); /usr/lib (содержит библиотеки языков программирования); /usr/doc (содержит документацию ОС Linux); /usr/man (содержит файлы справочных руководств); /usr/spool (содержит буферные файлы, например, создаваемые для заданий печати и пересылок по сети); /sbin (содержит команды администрирования системы для начальной загрузки); /var (содержит изменяющиеся файлы, например файлы почтовых ящиков); /dev (содержит файлы, обеспечивающие взаимодействие пользователя с устройствами, например с терминалами и принтерами); /etc (содержит файлы конфигурации системы и прочие системные файлы) и т.д.
49
PDF created with pdfFactory Pro trial version www.pdffactory.com
3.2. Cоглашение по именованию файлов и каталогов
При создании файлов и каталогов существуют определенные правила, которые регламентируются соглашением по именованию файлов и каталогов:
∙длина имен каталогов и файлов может достигать 255 символов. Символы могут быть как буквами и цифрами, так и спецсимволами, такими как знак подчеркивания (_), точка (.) и дефис (-);
∙специальные символы, такие как звездочка (*), амперсанд (&), конвейер (|), кавычки (“«) и знак доллара ($), использовать не следует. Эти символы имеют специальное значение для командного интерпретатора;
∙пробелы также не следует использовать в именах каталогов и файлов;
∙имена файлов и каталогов, как правило, не содержат расширений, но при необходимости использовать их можно.
3.3. Вывод информации о типах файлов
Команда ls -l отображает подробную информацию о файле. Вначале отображаются права доступа, за ними следуют ссылки, имя владельца файла, имя группы, в которую входит пользователь, размер файла в байтах, дата и время последнего обновления файла и его имя. Права доступа указывают, кто может иметь доступ к файлу: пользователь, члены группы или остальные пользователи.
Из рис. 3.1 видно, что файл new_command относится к числу обычных файлов. Количество ссылок равно 1; это значит, что файл не имеет других имен и на него нет других ссылок. Имя владельца и имя группы antonk совпадают с регистрационными именем и группой. В группу antonk входят и другие пользователи. Размер файла – 18 байтов. Файл был создан или обновлялся последний раз 21 сентября, в 18:20. Имя файла – new_command.
50
PDF created with pdfFactory Pro trial version www.pdffactory.com