Полностью обновленное 10-е издание «Библии Linux» поможет как начинающим, так и опытным пользователям приобрести знания и навыки, которые выведут на новый уровень владения Linux. Известный эксперт и автор бестселлеров Кристофер Негус делает акцент на инструментах командной строки и новейших версиях Red Hat Enterprise Linux, Fedora и Ubuntu. Шаг за шагом на подробных примерах и упражнениях вы досконально поймете операционную систему Linux и пустите знания в дело. Кроме того, в 10-м издании содержатся материалы для подготовки к экзаменам на различные сертификаты по Linux.
Linux — основа большинства технологических прорывов в облачных вычислениях, поэтому вы должны как следует понимать эту систему, чтобы эффективно работать в дата-центрах будущего. Азы Linux, изложенные в начале книги, пригодятся в дальнейших главах, где автор рассказывает, как развертывать системы Linux в качестве гипервизоров, облачных контроллеров и виртуальных машин, а также как управлять виртуальными сетями и сетевыми хранилищами данных.
«Библия Linux» рассказывает, как:
• приступить к работе с Linux;
• защитить системы и сети с Linux;
• реализовать автоматизацию дата-центра с помощью Ansible;
• упростить системное администрирование с помощью Cockpit;
• получить доступ к командной оболочке и писать простые скрипты;
• изучить контейнеризацию с применением Docker и Podman и, в частности, оркестрацию контейнеров с использованием Kubernetes и OpenShift;
• конфигурировать различные серверы и устранять распространенные проблемы;
• создавать виртуальные машины Linux, работающие на гипервизорах и облачных платформах.
В этой главе
Файловая система Linux — это структура, в которой хранится вся информация на компьютере. Фактически одним из определяющих свойств систем UNIX, на которых основана Linux, является то, что почти все, что находится в вашем компьютере (данные, команды, символические ссылки, устройства и каталоги), представлено элементами файловых систем. Для работы с Linux очень важно знать, где что находится и как задействовать файловую систему из оболочки.
В Linux организована иерархия каталогов. В каждом каталоге находятся файлы и другие каталоги. Можно создать ссылку на любой файл или каталог, используя либо полный путь (например, /home/joe/myfile.txt), либо относительный путь (например, если /home/joe — это текущий каталог, то можно просто ссылаться на файл через myfile.txt).
Если составить карту файлов и каталогов в Linux, то она будет выглядеть как перевернутое дерево. Вверху находится корневой каталог (также называемый каталогом root), который представлен одной косой чертой (/). Ниже располагается список общих каталогов системы Linux, таких как bin, dev, home, lib и tmp. Каждый из них, а также каталоги, добавленные в корневой, могут содержать подкаталоги.
На рис. 4.1 показано, как организована файловая система Linux. В качестве примера связи каталогов здесь приведен каталог /home, содержащий подкаталог для пользователя joe. В каталоге joe находятся подкаталоги Desktop, Documents и др. Чтобы добраться до файла memo1.doc, находящегося в каталоге memos, нужно ввести полный путь к нему: /home/joe/Documents/memos/memo1.doc. Если текущий каталог — /home/joe/, то можно ввести Documents/memos/memo1.doc.
Некоторые из этих каталогов Linux могут вас заинтересовать.
Файловые системы в операционных системах DOS или Microsoft Windows отличаются от файловой структуры Linux (см. далее врезку «Файловые системы Linux и Windows»).
Файловые системы Linux и Windows
Хотя файловая система Linux во многом схожа с системами MS-DOS и Windows, у нее есть поразительные отличия, например следующие.
Я хочу познакомить вас с несколькими простыми командами, чтобы вы могли начать работать с файловой системой. Можете пробовать их сразу, параллельно с чтением. При запуске системы Linux и открытии оболочки пользователь входит в свой домашний каталог. Большинство файлов, которые вы сохраняете и с которыми работаете, вероятно, будут находиться в этом каталоге или в подкаталогах, созданных вручную. В табл. 4.1 показаны команды для создания и применения файлов и каталогов.
Одна из самых простых команд — это cd. Она может использоваться без каких-либо параметров (чтобы перенести пользователя в домашний каталог) или с полными или относительными путями. Рассмотрим следующие команды:
$ cd /usr/share/
$ pwd
/usr/share
$ cd doc
$ pwd
/usr/share/doc
$ cd
$ pwd
/home/chris
Параметр /usr/share представляет абсолютный путь к каталогу в системе. Поскольку он начинается с косой черты (/), этот путь указывает оболочке начать с корневого каталога файловой системы и привести к каталогу share, находящемуся в каталоге usr. Параметр doc для команды cd ищет каталог с именем doc, который относится к текущему каталогу. Таким образом, эта команда открывает /usr/share/doc и делает его текущим каталогом.
После этого, введя только cd, вы вернетесь в домашний каталог. Если необходимо узнать, где вы находитесь в файловой системе, команда pwd поможет. Вот еще несколько интересных вариантов использования команды cd:
$ cd ~
$ pwd
/home/chris
$ cd ~/Music
$ pwd
/home/chris/Music
$ cd ../../../usr
$ pwd
/usr
Тильда (~) ссылается на ваш домашний каталог. С помощью команды cd ~ к нему можно перейти. Можно также применять тильду для ссылки на каталоги относительно вашего домашнего каталога, например, /home/chris/Music с помощью ~/Music. Ввод имени в качестве параметра приведет вас в каталог ниже текущего каталога, а две точки (..) можно использовать, чтобы перейти в каталог уровнем выше текущего. В приведенном примере вы подниметесь на три уровня (до /), а затем перейдете в каталог /usr.
Далее рассмотрим, как создавать каталоги в домашнем каталоге, перемещаться между ними и устанавливать соответствующие права доступа.
1. Перейдите в домашний каталог. Для этого введите cd в интерпретаторе и нажмите клавишу Enter. (Другие способы перехода в домашний каталог см. во врезке «Обозначения каталогов» далее.)
2. Чтобы убедиться, что вы находитесь в домашнем каталоге, введите pwd. Далее появится такая строка:
$ pwd
/home/joe
3. Создайте в домашнем каталоге новый каталог с именем test:
$ mkdir test
4. Проверьте права доступа каталога:
$ ls -ld test
drwxr-xr-x 2 joe sales 1024 Jan 24 12:17 test
Список показывает, что test — это каталог (d). После буквы d указаны права доступа (rwxr-xr-x), которые мы рассмотрим далее, в разделе «Владельцы и права доступа к файлам». Прочие сведения указывают на владельца (joe), группу (sales) и дату последнего изменения файлов в каталоге (24 января в 12:17).
ПРИМЕЧАНИЕ
Новый пользователь системы Fedora или Red Hat Enterprise Linux по умолчанию назначается в группу с тем же именем. В предыдущем примере пользователь joe назначен в группу joe. Данный подход к управлению группами называется личной группой пользователя (user private group, UPG).
Введите:
$ chmod 700 test
Таким образом дается право на предоставление полного доступа вам и никакого — всем остальным. (Новые права доступа читаются как rwx------.)
5. Сделайте каталог test своим текущим каталогом следующим образом:
$ cd test
$ pwd
/home/joe/test
Теперь подкаталог test домашнего каталога является вашим текущим рабочим каталогом. В каталог test можно добавлять файлы и каталоги, следуя инструкциям, приведенным далее в этой главе.
Независимо от того, перечисляете вы, перемещаете, копируете, удаляете или иным образом воздействуете на файлы в системе Linux, определенные специальные символы, называемые метасимволами и операторами, помогают работать с файлами более эффективно. Метасимволы помогают обработать один или несколько файлов, не вводя полностью имя каждого. Операторы позволяют направлять информацию из одной команды в другую или из одного файла в другой.
Чтобы экономить время и быстрее ссылаться на группу файлов, оболочка bash позволяет применять метасимволы. Всякий раз, когда нужно обратиться к файлу или каталогу, например, чтобы перечислить, открыть или удалить его, используйте соответствующие файлам метасимволы. Примеры полезных метасимволов:
Чтобы обработать файлы с помощью метасимволов, сначала перейдите в пустой каталог (например, в каталог test, описанный в предыдущем разделе) и создайте несколько пустых файлов:
$ touch apple banana grape grapefruit watermelon
Команда touch создает пустые файлы. Далее показано, как использовать метасимволы с командой ls для пакетной обработки файлов. Выполните следующие команды и проанализируйте результаты:
$ ls a*
apple
$ ls g*
grape grapefruit
$ ls g*t
grapefruit
$ ls *e*
apple grape grapefruit watermelon
$ ls *n*
banana watermelon
Первый пример соответствует любому файлу, имя которого начинается с a (apple). Следующий соответствует всем файлам, имена которых начинается с g (grape, grapefruit). Далее обрабатываются файлы, имена которых начинаются с буквы g и заканчиваются на букву t (grapefruit). Затем обрабатываются файлы, содержащие в именах букву e (apple, grape, grapefruit, watermelon). Наконец, обрабатываются все файлы, имена которых в любом месте содержат букву n (banana, watermelon).
Примеры выборки файлов с вопросительным знаком (?):
$ ls ????e
apple grape
$ ls g???e*
grape grapefruit
Первый пример соответствует любому файлу из пяти символов, имена которых заканчиваются на букву e (apple, grape). Второй соответствует любому файлу, имя которого начинается с буквы g и в пятой позиции есть буква e (grape, grapefruit).
Примеры выборки с квадратными скобками:
$ ls [abw]*
apple banana watermelon
$ ls [agw]*[ne]
apple grape watermelon
В первом примере ищется любой файл, имя которого начинается с буквы a, b или w. Во втором берется любой файл, имя которого начинается с буквы a, g или w и заканчивается либо на n, либо на e. В скобки можно включать и диапазоны букв, например:
$ ls [a-g]*
apple banana grape grapefruit
В таком случае сопоставляются любые файлы, имена которых начинаются с букв от a до g.
Команды получают данные после стандартного ввода и передают их на стандартный вывод. С помощью конвейеров (описаны ранее) можно направлять стандартный вывод одной команды на стандартный ввод другой. Для направления данных в файлы и из файлов используются знаки «меньше» (<) и «больше» (>). Символы перенаправления файлов:
Далее приведены примеры, в которых информация направляется в файлы и из файлов:
$ mail root < ~/.bashrc
$ man chmod | col -b > /tmp/chmod
$ echo "I finished the project on $(date)" >> ~/projects
В первом примере содержимое файла .bashrc, находящегося в домашнем каталоге, отправляется в виде сообщения на почту суперпользователю. Вторая командная строка форматирует справочную страницу chmod (с помощью команды man), удаляет лишние пробелы (col -b) и отправляет выходные данные в файл /tmp/chmod (стирая предыдущий файл /tmp/chmod, если он существует). После выполнения последней команды в файл проекта пользователя добавляется следующий текст:
I finished the project on Sat Jun 15 13:46:49 EDT 2019
Другой тип перенаправления, называемый встроенным документом (here-документом), позволяет вводить текст, который используется в качестве стандартного ввода для команды. Встроенные документы включают в себя ввод двух символов «меньше» (<<) после команды, за которой следует слово. Весь текст, набранный после этого слова, принимается в качестве пользовательского ввода до тех пор, пока слово не повторится в строке само по себе, например:
$ mail root cnegus rjones bdecker << thetext
> I want to tell everyone that there will be a 10 a.m.
> meeting in conference room B. Everyone should attend.
>
> -- James
> thetext
$
В этом примере сообщения отправляются на имена пользователей root, cnegus, rjones и bdecker. Текст, введенный между <<thetex и thetex, становится содержанием сообщения. Обычно встроенный документ используется в текстовом редакторе для создания или добавления информации в файл из скрипта:
/bin/ed /etc/resolv.conf <<resendit
a
nameserver 100.100.100.100
.
w
q
resendit
С помощью этих строк в скрипте, выполняемом суперпользователем, текстовый редактор ed добавляет IP-адрес DNS-сервера в файл /etc/resolv.conf.
С помощью фигурных скобок ({}) можно использовать группу символов для имен файлов, каталогов и других аргументов, которые даются командам. Например, группа файлов с именами от memo1 до memo5 создается так:
$ touch memo{1,2,3,4,5}
$ ls
memo1 memo2 memo3 memo4 memo5
Значения в скобках не обязательно должны быть числами или даже однозначными цифрами. Например, можно применять диапазоны чисел или цифр, а также любую строку символов, разделив их запятыми, например:
$ touch {John,Bill,Sally}-{Breakfast,Lunch,Dinner}
$ ls
Bill-Breakfast Bill-Lunch John-Dinner Sally-Breakfast Sally-Lunch
Bill-Dinner John-Breakfast John-Lunch Sally-Dinner
$ rm -f {John,Bill,Sally}-{Breakfast,Lunch,Dinner}
$ touch {a..f}{1..5}
$ ls
a1 a3 a5 b2 b4 c1 c3 c5 d2 d4 e1 e3 e5 f2 f4
a2 a4 b1 b3 b5 c2 c4 d1 d3 d5 e2 e4 f1 f3 f5
В первом примере два набора фигурных скобок означают, что у пользователей
John, Bill и Sally есть свои файлы, связанные с файлами Breakfast, Lunch и Dinner.
Если бы я ошибся, то легко вспомнил бы команду и изменил touch на rm -f — и уда-
лил все файлы. В следующем примере две точки между буквами и цифрами ука-
зывают на диапазоны, которые будут применяться. Обратите внимание на файлы,
которые были созданы из этих нескольких символов.
Более подробно с книгой можно ознакомиться на сайте издательства
» Оглавление
» Отрывок
Linux — основа большинства технологических прорывов в облачных вычислениях, поэтому вы должны как следует понимать эту систему, чтобы эффективно работать в дата-центрах будущего. Азы Linux, изложенные в начале книги, пригодятся в дальнейших главах, где автор рассказывает, как развертывать системы Linux в качестве гипервизоров, облачных контроллеров и виртуальных машин, а также как управлять виртуальными сетями и сетевыми хранилищами данных.
«Библия Linux» рассказывает, как:
• приступить к работе с Linux;
• защитить системы и сети с Linux;
• реализовать автоматизацию дата-центра с помощью Ansible;
• упростить системное администрирование с помощью Cockpit;
• получить доступ к командной оболочке и писать простые скрипты;
• изучить контейнеризацию с применением Docker и Podman и, в частности, оркестрацию контейнеров с использованием Kubernetes и OpenShift;
• конфигурировать различные серверы и устранять распространенные проблемы;
• создавать виртуальные машины Linux, работающие на гипервизорах и облачных платформах.
Файловая система
В этой главе
- Файловая система Linux.
- Атрибуты файлов и каталогов.
- Создание файлов и каталогов.
- Изменение владельца и прав доступа.
- Копирование и перемещение файлов.
Файловая система Linux — это структура, в которой хранится вся информация на компьютере. Фактически одним из определяющих свойств систем UNIX, на которых основана Linux, является то, что почти все, что находится в вашем компьютере (данные, команды, символические ссылки, устройства и каталоги), представлено элементами файловых систем. Для работы с Linux очень важно знать, где что находится и как задействовать файловую систему из оболочки.
В Linux организована иерархия каталогов. В каждом каталоге находятся файлы и другие каталоги. Можно создать ссылку на любой файл или каталог, используя либо полный путь (например, /home/joe/myfile.txt), либо относительный путь (например, если /home/joe — это текущий каталог, то можно просто ссылаться на файл через myfile.txt).
Если составить карту файлов и каталогов в Linux, то она будет выглядеть как перевернутое дерево. Вверху находится корневой каталог (также называемый каталогом root), который представлен одной косой чертой (/). Ниже располагается список общих каталогов системы Linux, таких как bin, dev, home, lib и tmp. Каждый из них, а также каталоги, добавленные в корневой, могут содержать подкаталоги.
На рис. 4.1 показано, как организована файловая система Linux. В качестве примера связи каталогов здесь приведен каталог /home, содержащий подкаталог для пользователя joe. В каталоге joe находятся подкаталоги Desktop, Documents и др. Чтобы добраться до файла memo1.doc, находящегося в каталоге memos, нужно ввести полный путь к нему: /home/joe/Documents/memos/memo1.doc. Если текущий каталог — /home/joe/, то можно ввести Documents/memos/memo1.doc.
Некоторые из этих каталогов Linux могут вас заинтересовать.
- /bin — содержит общие пользовательские команды Linux, такие как ls, sort, date и chmod.
- /boot — включает в себя загрузочное ядро Linux, диск начальной инициализации и файлы конфигурации загрузчика (GRUB).
- /dev — содержит файлы, представляющие точки доступа к устройствам в системах пользователя. К ним относятся устройства терминала (tty*), жесткие диски (hd* и sd*), оперативная память (ram*) и CD-ROM (cd*). Пользователи могут получить доступ к этим устройствам непосредственно через файлы устройств, однако приложения часто скрывают фактические имена устройств от конечных пользователей.
- /etc — содержит файлы конфигурации администратора. Большинство этих файлов являются обычными текстовыми файлами, которые, если у пользователя есть соответствующие права доступа, можно отредактировать с помощью любого текстового редактора.
- /home — содержит каталоги, назначенные каждому обычному пользователю с учетной записью входа. (Суперпользователь — исключение, он использует /root в качестве домашнего каталога.)
- /lib — содержит общие библиотеки, необходимые приложениям в /bin и /sbin для загрузки системы.
- /media — стандартное расположение для автоматически монтируемых устройств, в частности съемных носителей. Если у тома носителя есть имя, то оно обычно используется в качестве точки монтирования. Например, USB-накопитель с именем myusb будет смонтирован как /media/myusb.
- /mnt — общая точка монтирования для многих устройств до того, как она была вытеснена стандартным каталогом /media. Некоторые загрузочные системы Linux еще задействуют этот каталог для монтирования разделов жесткого диска и удаленных файловых систем. Многие все еще применяют его для временного монтирования локальных или удаленных файловых систем, которые не монтируются постоянно.
- /misc — каталог, который иногда используется для автоматического монтирования файловых систем по запросу.
- /opt — структура каталогов, доступная для хранения дополнительного прикладного программного обеспечения.
- /proc — содержит информацию о системных ресурсах.
- /root — домашний каталог суперпользователя. Этот домашний каталог не находится ниже /home из соображений безопасности.
- /sbin — содержит административные команды и демонические процессы.
- /sys — содержит параметры для настройки хранения блоков и управления контрольными группами.
- /tmp — содержит временные файлы приложений.
- /usr — содержит пользовательскую документацию, игры, графические файлы (X11), библиотеки (lib) и множество других команд и файлов, не требующихся в процессе загрузки. Каталог /usr предназначен для файлов, которые не изменяются после установки (теоретически /usr может быть смонтирован только для чтения).
- /var — содержит каталоги данных приложений. В частности, именно здесь размещаются файлы, которые передаются через FTP-сервер (/var/ftp) или веб-сервер (/var/www). Он также содержит все файлы системного журнала (/var/log) и файлы, находящиеся в очереди на обработку в /var/spool (такие как mail, cups, news). Каталог /var содержит каталоги и файлы, которые часто изменяются. На серверных компьютерах он обычно создается как отдельная файловая система, которую можно легко расширить.
Файловые системы в операционных системах DOS или Microsoft Windows отличаются от файловой структуры Linux (см. далее врезку «Файловые системы Linux и Windows»).
Файловые системы Linux и Windows
Хотя файловая система Linux во многом схожа с системами MS-DOS и Windows, у нее есть поразительные отличия, например следующие.
- В файловых системах MS-DOS и Windows буквы дисков представляют различные устройства хранения. В Linux все устройства хранения данных подключены к иерархии файловой системы. Таким образом, то, что весь файл /usr может находиться на отдельном жестком диске или что файл /mnt/remote1 является файловой системой с другого компьютера, пользователю не видно.
- В Linux для разделения имен каталогов используется прямая, а не обратная косая черта (слеш). Поэтому путь в системе Microsoft выглядит таким образом: C:\home\joe, а в системе Linux — /home/joe.
- В DOS имена файлов почти всегда имеют суффиксы (например, .txt для текстовых файлов или .docx для файлов Word). Трехсимвольные суффиксы иногда можно применять и в Linux, однако они не имеют особого значения. Они полезны скорее для идентификации типа файла. Многие приложения и окружения Linux используют суффиксы файлов для определения содержимого последних. Однако в Linux расширения команд DOS, такие как .com, .exe и .bat, не всегда означают исполняемый файл. (Исполняемость файлов в Linux определяют флаги прав доступа.)
- Каждый файл и каталог в системе Linux имеют владельцев и права доступа, связанные с ним. Их безопасность варьируется в зависимости от системы Microsoft. Поскольку DOS и Microsoft Windows создавались как однопользовательские системы, принадлежность файлов в них не была встроена изначально. Чтобы решить эту проблему, в более поздние версии были добавлены такие функции, как атрибуты файлов и папок.
Базовые команды файловой системы
Я хочу познакомить вас с несколькими простыми командами, чтобы вы могли начать работать с файловой системой. Можете пробовать их сразу, параллельно с чтением. При запуске системы Linux и открытии оболочки пользователь входит в свой домашний каталог. Большинство файлов, которые вы сохраняете и с которыми работаете, вероятно, будут находиться в этом каталоге или в подкаталогах, созданных вручную. В табл. 4.1 показаны команды для создания и применения файлов и каталогов.
Одна из самых простых команд — это cd. Она может использоваться без каких-либо параметров (чтобы перенести пользователя в домашний каталог) или с полными или относительными путями. Рассмотрим следующие команды:
$ cd /usr/share/
$ pwd
/usr/share
$ cd doc
$ pwd
/usr/share/doc
$ cd
$ pwd
/home/chris
Параметр /usr/share представляет абсолютный путь к каталогу в системе. Поскольку он начинается с косой черты (/), этот путь указывает оболочке начать с корневого каталога файловой системы и привести к каталогу share, находящемуся в каталоге usr. Параметр doc для команды cd ищет каталог с именем doc, который относится к текущему каталогу. Таким образом, эта команда открывает /usr/share/doc и делает его текущим каталогом.
После этого, введя только cd, вы вернетесь в домашний каталог. Если необходимо узнать, где вы находитесь в файловой системе, команда pwd поможет. Вот еще несколько интересных вариантов использования команды cd:
$ cd ~
$ pwd
/home/chris
$ cd ~/Music
$ pwd
/home/chris/Music
$ cd ../../../usr
$ pwd
/usr
Тильда (~) ссылается на ваш домашний каталог. С помощью команды cd ~ к нему можно перейти. Можно также применять тильду для ссылки на каталоги относительно вашего домашнего каталога, например, /home/chris/Music с помощью ~/Music. Ввод имени в качестве параметра приведет вас в каталог ниже текущего каталога, а две точки (..) можно использовать, чтобы перейти в каталог уровнем выше текущего. В приведенном примере вы подниметесь на три уровня (до /), а затем перейдете в каталог /usr.
Далее рассмотрим, как создавать каталоги в домашнем каталоге, перемещаться между ними и устанавливать соответствующие права доступа.
1. Перейдите в домашний каталог. Для этого введите cd в интерпретаторе и нажмите клавишу Enter. (Другие способы перехода в домашний каталог см. во врезке «Обозначения каталогов» далее.)
2. Чтобы убедиться, что вы находитесь в домашнем каталоге, введите pwd. Далее появится такая строка:
$ pwd
/home/joe
3. Создайте в домашнем каталоге новый каталог с именем test:
$ mkdir test
4. Проверьте права доступа каталога:
$ ls -ld test
drwxr-xr-x 2 joe sales 1024 Jan 24 12:17 test
Список показывает, что test — это каталог (d). После буквы d указаны права доступа (rwxr-xr-x), которые мы рассмотрим далее, в разделе «Владельцы и права доступа к файлам». Прочие сведения указывают на владельца (joe), группу (sales) и дату последнего изменения файлов в каталоге (24 января в 12:17).
ПРИМЕЧАНИЕ
Новый пользователь системы Fedora или Red Hat Enterprise Linux по умолчанию назначается в группу с тем же именем. В предыдущем примере пользователь joe назначен в группу joe. Данный подход к управлению группами называется личной группой пользователя (user private group, UPG).
Введите:
$ chmod 700 test
Таким образом дается право на предоставление полного доступа вам и никакого — всем остальным. (Новые права доступа читаются как rwx------.)
5. Сделайте каталог test своим текущим каталогом следующим образом:
$ cd test
$ pwd
/home/joe/test
Теперь подкаталог test домашнего каталога является вашим текущим рабочим каталогом. В каталог test можно добавлять файлы и каталоги, следуя инструкциям, приведенным далее в этой главе.
Метасимволы и операторы
Независимо от того, перечисляете вы, перемещаете, копируете, удаляете или иным образом воздействуете на файлы в системе Linux, определенные специальные символы, называемые метасимволами и операторами, помогают работать с файлами более эффективно. Метасимволы помогают обработать один или несколько файлов, не вводя полностью имя каждого. Операторы позволяют направлять информацию из одной команды в другую или из одного файла в другой.
Метасимволы для пакетной обработки файлов
Чтобы экономить время и быстрее ссылаться на группу файлов, оболочка bash позволяет применять метасимволы. Всякий раз, когда нужно обратиться к файлу или каталогу, например, чтобы перечислить, открыть или удалить его, используйте соответствующие файлам метасимволы. Примеры полезных метасимволов:
- * — соответствует любому количеству символов;
- ? — соответствует любому одному символу;
- [...] — соответствует любому из символов между скобками, которые могут включать диапазон букв или цифр, разделенных дефисом.
Чтобы обработать файлы с помощью метасимволов, сначала перейдите в пустой каталог (например, в каталог test, описанный в предыдущем разделе) и создайте несколько пустых файлов:
$ touch apple banana grape grapefruit watermelon
Команда touch создает пустые файлы. Далее показано, как использовать метасимволы с командой ls для пакетной обработки файлов. Выполните следующие команды и проанализируйте результаты:
$ ls a*
apple
$ ls g*
grape grapefruit
$ ls g*t
grapefruit
$ ls *e*
apple grape grapefruit watermelon
$ ls *n*
banana watermelon
Первый пример соответствует любому файлу, имя которого начинается с a (apple). Следующий соответствует всем файлам, имена которых начинается с g (grape, grapefruit). Далее обрабатываются файлы, имена которых начинаются с буквы g и заканчиваются на букву t (grapefruit). Затем обрабатываются файлы, содержащие в именах букву e (apple, grape, grapefruit, watermelon). Наконец, обрабатываются все файлы, имена которых в любом месте содержат букву n (banana, watermelon).
Примеры выборки файлов с вопросительным знаком (?):
$ ls ????e
apple grape
$ ls g???e*
grape grapefruit
Первый пример соответствует любому файлу из пяти символов, имена которых заканчиваются на букву e (apple, grape). Второй соответствует любому файлу, имя которого начинается с буквы g и в пятой позиции есть буква e (grape, grapefruit).
Примеры выборки с квадратными скобками:
$ ls [abw]*
apple banana watermelon
$ ls [agw]*[ne]
apple grape watermelon
В первом примере ищется любой файл, имя которого начинается с буквы a, b или w. Во втором берется любой файл, имя которого начинается с буквы a, g или w и заканчивается либо на n, либо на e. В скобки можно включать и диапазоны букв, например:
$ ls [a-g]*
apple banana grape grapefruit
В таком случае сопоставляются любые файлы, имена которых начинаются с букв от a до g.
Метасимволы перенаправления файлов
Команды получают данные после стандартного ввода и передают их на стандартный вывод. С помощью конвейеров (описаны ранее) можно направлять стандартный вывод одной команды на стандартный ввод другой. Для направления данных в файлы и из файлов используются знаки «меньше» (<) и «больше» (>). Символы перенаправления файлов:
- < — направляет содержимое файла в команду. В большинстве случаев по умолчанию команда ожидает этого действия, и здесь символ необязателен, то есть less bigfile — то же самое, что less < bigfile;
- > — направляет стандартный вывод команды в файл. Если файл существует, то его содержимое перезаписывается;
- 2> — направляет стандартную ошибку (сообщение об ошибках) в файл;
- &> — направляет в файл как стандартный вывод, так и стандартную ошибку;
- >> — направляет в файл вывод команды, добавляя его в конец существующего файла.
Далее приведены примеры, в которых информация направляется в файлы и из файлов:
$ mail root < ~/.bashrc
$ man chmod | col -b > /tmp/chmod
$ echo "I finished the project on $(date)" >> ~/projects
В первом примере содержимое файла .bashrc, находящегося в домашнем каталоге, отправляется в виде сообщения на почту суперпользователю. Вторая командная строка форматирует справочную страницу chmod (с помощью команды man), удаляет лишние пробелы (col -b) и отправляет выходные данные в файл /tmp/chmod (стирая предыдущий файл /tmp/chmod, если он существует). После выполнения последней команды в файл проекта пользователя добавляется следующий текст:
I finished the project on Sat Jun 15 13:46:49 EDT 2019
Другой тип перенаправления, называемый встроенным документом (here-документом), позволяет вводить текст, который используется в качестве стандартного ввода для команды. Встроенные документы включают в себя ввод двух символов «меньше» (<<) после команды, за которой следует слово. Весь текст, набранный после этого слова, принимается в качестве пользовательского ввода до тех пор, пока слово не повторится в строке само по себе, например:
$ mail root cnegus rjones bdecker << thetext
> I want to tell everyone that there will be a 10 a.m.
> meeting in conference room B. Everyone should attend.
>
> -- James
> thetext
$
В этом примере сообщения отправляются на имена пользователей root, cnegus, rjones и bdecker. Текст, введенный между <<thetex и thetex, становится содержанием сообщения. Обычно встроенный документ используется в текстовом редакторе для создания или добавления информации в файл из скрипта:
/bin/ed /etc/resolv.conf <<resendit
a
nameserver 100.100.100.100
.
w
q
resendit
С помощью этих строк в скрипте, выполняемом суперпользователем, текстовый редактор ed добавляет IP-адрес DNS-сервера в файл /etc/resolv.conf.
Применение фигурных скобок
С помощью фигурных скобок ({}) можно использовать группу символов для имен файлов, каталогов и других аргументов, которые даются командам. Например, группа файлов с именами от memo1 до memo5 создается так:
$ touch memo{1,2,3,4,5}
$ ls
memo1 memo2 memo3 memo4 memo5
Значения в скобках не обязательно должны быть числами или даже однозначными цифрами. Например, можно применять диапазоны чисел или цифр, а также любую строку символов, разделив их запятыми, например:
$ touch {John,Bill,Sally}-{Breakfast,Lunch,Dinner}
$ ls
Bill-Breakfast Bill-Lunch John-Dinner Sally-Breakfast Sally-Lunch
Bill-Dinner John-Breakfast John-Lunch Sally-Dinner
$ rm -f {John,Bill,Sally}-{Breakfast,Lunch,Dinner}
$ touch {a..f}{1..5}
$ ls
a1 a3 a5 b2 b4 c1 c3 c5 d2 d4 e1 e3 e5 f2 f4
a2 a4 b1 b3 b5 c2 c4 d1 d3 d5 e2 e4 f1 f3 f5
В первом примере два набора фигурных скобок означают, что у пользователей
John, Bill и Sally есть свои файлы, связанные с файлами Breakfast, Lunch и Dinner.
Если бы я ошибся, то легко вспомнил бы команду и изменил touch на rm -f — и уда-
лил все файлы. В следующем примере две точки между буквами и цифрами ука-
зывают на диапазоны, которые будут применяться. Обратите внимание на файлы,
которые были созданы из этих нескольких символов.
Более подробно с книгой можно ознакомиться на сайте издательства
» Оглавление
» Отрывок
Книга «Библия Linux. 10-е издание»
Привет, Хаброжители! Полностью обновленное 10-е издание «Библии Linux» поможет как начинающим, так и опытным пользователям приобрести знания и навыки, которые выведут на новый уровень владения Linux....
habr.com