В этой главе вы изучите команды Linux и их использование.
Цели
В этой статье будущие администраторы Linux научатся:
- Перемещаться по дереву файловой системы.
- Создавать текстовые файлы, отображать их содержимое и изменять их.
- Использовать наиболее полезные команды Linux.
Команды пользователя, Linux
Общие сведения
Современные Linux-системы имеют графические утилиты для работы администратора. Однако важно уметь использовать интерфейс командной строки по нескольким причинам:
- Большинство системных команд являются общими для всех дистрибутивов Linux, что не всегда верно для графических инструментов.
- Может случиться, что система не запускается корректно, но резервный интерпретатор команд остается доступным.
- Удаленное администрирование выполняется через командную строку с использованием SSH-терминала.
- Для экономии ресурсов сервера графический интерфейс либо не устанавливается, либо запускается по запросу.
- Администрирование выполняется с помощью скриптов.
Изучение этих команд позволяет администратору подключаться к терминалу Linux, управлять его ресурсами и файлами, идентифицировать станцию, терминал и подключенных пользователей и т.д.
Пользователи
Пользователь Linux-системы определяется в файле /etc/passwd следующими параметрами:
- Имя пользователя (логин), которое не содержит пробелов.
- Числовой идентификатор: UID (User Identifier).
- Идентификатор группы: GID (Group Identifier).
- Командный интерпретатор, например, оболочка (shell), которая может отличаться для разных пользователей.
- Домашний каталог (home directory).
В других файлах пользователь определяется:
- Паролем, который шифруется перед сохранением (
/etc/shadow). - Приглашением командной строки (prompt), которое обозначается символом
#для администраторов и$для других пользователей (/etc/profile).
В зависимости от политики безопасности, пароль должен соответствовать определенным требованиям сложности.
Среди существующих командных интерпретаторов чаще всего используется Bourne-Again Shell (/bin/bash), который назначается новым пользователям по умолчанию. Продвинутые пользователи могут выбрать альтернативные оболочки, такие как Korn Shell (ksh), C Shell (csh) и другие.
Домашний каталог пользователя по умолчанию хранится в директории /home. Он содержит личные данные пользователя и конфигурационные файлы его приложений. По умолчанию при входе в систему домашний каталог становится текущим каталогом.
Установка рабочей станции (с графическим интерфейсом) запускает этот интерфейс на терминале 1. Linux поддерживает многопользовательский режим, поэтому возможно подключение нескольких пользователей одновременно на разных физических терминалах (TTY) или виртуальных терминалах (PTS). Виртуальные терминалы доступны в графической среде. Пользователь может переключаться между физическими терминалами с помощью комбинации клавиш Alt+Fx или Ctrl+Alt+Fx.
Оболочка (Shell)
После подключения пользователя к консоли оболочка отображает приглашение командной строки. Она ведет себя как бесконечный цикл, повторяя один и тот же шаблон для каждой введенной команды:
- Отображает приглашение командной строки.
- Читает команду.
- Анализирует синтаксис.
- Заменяет специальные символы.
- Выполняет команду.
- Отображает приглашение командной строки.
- И так далее.
Комбинация клавиш Ctrl+C используется для прерывания выполняемой команды.
Использование команды обычно следует следующей последовательности:
bashкопироватькоманда [опция(и)] [аргумент(ы)]Имя команды обычно пишется в нижнем регистре.
Каждый элемент отделяется пробелом.
Короткие опции начинаются с одного дефиса (
-l), а длинные опции — с двух дефисов (--list). Двойной дефис (--) указывает на конец списка опций.Некоторые короткие опции можно объединять:
bashкопироватьls -l -i -aэквивалентно:
bashкопироватьls -liaПосле опции может быть несколько аргументов:
bashкопироватьls -lia /etc /home /varВ литературе термин "опция" эквивалентен термину "параметр", который чаще используется в программировании. Необязательность опции или аргумента обозначается заключением в квадратные скобки
[и]. Если возможно несколько опций, они разделяются вертикальной чертой (pipe)[a|e|i].Общие команды
Команды
apropos,whatisиmanНевозможно знать все команды и опции наизусть. Для всех установленных команд обычно доступно руководство.
Команда
aproposКоманда
aproposпозволяет искать по ключевым словам в руководствах:
Опция Описание -s,--sections listили--section listОграничивает поиск указанными разделами руководства. -aили--andОтображает только элементы, соответствующие всем предоставленным ключевым словам. Пример:
bashкопировать$ apropos clear clear (1) - очистить экран терминала clear_console (1) - очистить консоль clearenv (3) - очистить окружение clearerr (3) - проверить и сбросить статус потока clearerr_unlocked (3) - неблокирующие функции stdio feclearexcept (3) - обработка исключений и округления с плавающей точкой fwup_clear_status (3) - библиотека для управления обновлениями системного ПО klogctl (3) - чтение и/или очистка буфера сообщений ядра sgt-samegame (6) - головоломка с очисткой блоков syslog (2) - чтение и/или очистка буфера сообщений ядра timerclear (3) - операции с timeval XClearArea (3) - очистка области или окна XClearWindow (3) - очистка области или окна XSelectionClearEvent (3) - структура события SelectionClearЧтобы найти команду для изменения пароля учетной записи:
bashкопировать$ apropos --exact password -a change chage (1) - изменить информацию о сроке действия пароля пользователя passwd (1) - изменить пароль пользователяКоманда
whatisКоманда
whatisотображает описание команды, переданной в качестве аргумента:bashкопироватьwhatis clearПример:
bashкопировать$ whatis clear clear (1) - очистить экран терминалаКоманда
manПосле того как команда найдена с помощью
aproposилиwhatis, руководство можно прочитать с помощью командыman("Man — ваш друг").Этот набор руководств разделен на 8 разделов, группирующих информацию по темам, по умолчанию используется раздел 1:
- Исполняемые программы или команды.
- Системные вызовы (функции, предоставляемые ядром).
- Вызовы библиотек (функции, предоставляемые библиотекой).
- Специальные файлы (обычно находятся в
/dev).- Форматы файлов и соглашения (например, конфигурационные файлы, такие как
/etc/passwd).- Игры (например, текстовые приложения).
- Разное (например,
man (7)).- Команды системного администрирования (обычно только для root).
- Подпрограммы ядра (нестандартные).
Информацию о каждом разделе можно получить, набрав
man x intro, гдеx— номер раздела.Команда:
bashкопироватьman passwdрасскажет администратору о команде
passwd, ее опциях и т.д. А команда:bashкопироватьman 5 passwdпредоставит информацию о файлах, связанных с этой командой.
Навигация по руководству осуществляется с помощью стрелок ↑ и ↓. Выход из руководства — клавиша Q.
Команда
shutdownКоманда
shutdownпозволяет электронно выключить сервер Linux, либо немедленно, либо через определенное время.bashкопироватьshutdown [-h] [-r] время [сообщение]Укажите время выключения в формате
hh:mmдля точного времени или+mmдля задержки в минутах.Для немедленного выключения используйте слово
nowвместо времени. В этом случае дополнительное сообщение не отправляется другим пользователям системы.Примеры:
bashкопировать[root]# shutdown -h 0:30 "Выключение сервера в 0:30" [root]# shutdown -r +5Опции:
Опция Описание -hВыключает систему. -rПерезагружает систему. Команда
historyКоманда
historyотображает историю команд, введенных пользователем.Команды хранятся в файле
.bash_historyв домашнем каталоге пользователя.Пример команды
history:bashкопировать$ history 147 man ls 148 man historyОпции:
Опция Описание -wЗаписывает текущую историю в файл истории. -cУдаляет историю текущей сессии (но не содержимое файла .bash_history).Управление историей
Для управления историей можно использовать следующие команды:
Клавиши Функция !! Повторяет последнюю введенную команду. !N Повторяет команду по ее номеру в списке. !строка Повторяет последнюю команду, начинающуюся с указанной строки. ↑ Перемещается по истории в обратном порядке. ↓ Перемещается по истории в прямом порядке. Автодополнение
Автодополнение — это полезная функция.
- Завершает команды, введенные пути или имена файлов.
- Нажмите клавишу Tab, чтобы завершить ввод, если есть только одно решение.
- Если есть несколько решений, нажмите Tab второй раз, чтобы увидеть варианты.
Если двойное нажатие Tab не показывает вариантов, значит, нет решения для текущего автодополнения.
Отображение и идентификация
Команда
clearКоманда
clearочищает содержимое экрана терминала. Точнее, она сдвигает отображение так, чтобы приглашение командной строки находилось на первой строке экрана.На физическом терминале отображение будет скрыто, тогда как в графическом интерфейсе полоса прокрутки позволит вернуться к истории виртуального терминала.
Совет: Комбинация клавиш Ctrl+L имеет тот же эффект, что и команда
clear.Команда
echoКоманда
echoиспользуется для отображения строки символов.Эта команда чаще всего используется в административных скриптах для информирования пользователя во время выполнения.
Опция
-nуказывает на отсутствие перевода строки в выходной строке (по умолчанию строка завершается переводом строки).bashкопироватьshell > echo -n "123"; echo "456" 123456 shell > echo "123"; echo "456" 123 456По разным причинам разработчику скрипта может потребоваться использование специальных последовательностей (начинающихся с символа
\). В этом случае указывается опция-e, позволяющая интерпретировать последовательности.Среди часто используемых последовательностей можно упомянуть:
Последовательность Результат \aИздает звуковой сигнал. \bВозврат на один символ. \nДобавляет перевод строки. \tДобавляет горизонтальную табуляцию. \vДобавляет вертикальную табуляцию. Команда
dateКоманда
dateотображает дату и время. Синтаксис команды:bashкопироватьdate [-d yyyyMMdd] [формат]Примеры:
bashкопировать$ date Mon May 24 16:46:53 CEST 2021 $ date -d 20210517 +%j 137В последнем примере опция
-dотображает указанную дату. Опция+%jформатирует эту дату, чтобы показать только день года.Предупреждение: Формат даты может изменяться в зависимости от значения переменной окружения
$LANG.Отображение даты может следовать следующим форматам:
Опция Формат +%AПолное название дня недели (например, Sunday). +%BПолное название месяца (например, January). +%cДата и время в локали (например, Thu Mar 3 23:05:25 2005). +%dДень месяца (например, 01). +%FДата в формате YYYY-MM-DD.+%GГод. +%HЧас (00..23). +%jДень года (001..366). +%mНомер месяца (01..12). +%MМинуты (00..59). +%RВремя в формате hh:mm.+%sСекунды с 1 января 1970 года. +%SСекунды (00..60). +%TВремя в формате hh:mm:ss.+%uДень недели ( 1для понедельника).+%VНомер недели ( +%V).+%xДата в формате DD/MM/YYYY.Команда
dateтакже позволяет изменить системную дату и время. В этом случае используется опция-s.bashкопировать[root]# date -s "2021-05-24 10:19"Формат, используемый после опции
-s, следующий:bashкопироватьdate -s "yyyy-MM-dd hh:mm[:ss]"Команды
id,whoиwhoamiКоманда
idиспользуется для отображения информации о пользователях и группах. По умолчанию, если параметр пользователя не указан, отображается информация о текущем пользователе и группе.bashкопировать$ id rockstar uid=1000(rockstar) gid=1000(rockstar) groups=1000(rockstar),10(wheel)Опции
-g,-G,-nи-uотображают основной GID группы, GID подгрупп, имена вместо числовых идентификаторов и UID пользователя соответственно.Команда
whoamiотображает логин текущего пользователя.Команда
whoбез аргументов отображает имена вошедших пользователей:bashкопировать$ who rockstar tty1 2021-05-24 10:30 root pts/0 2021-05-24 10:31Поскольку Linux поддерживает многопользовательский режим, возможно, что несколько сессий открыты на одной станции, либо физически, либо по сети. Полезно знать, какие пользователи вошли в систему, чтобы общаться с ними, отправляя сообщения.
tty: представляет терминал.pts/: представляет виртуальную консоль в графической среде, где число после обозначает экземпляр виртуальной консоли (0, 1, 2...).Опция
-rтакже отображает уровень выполнения (см. главу "Запуск системы").Файловая система
В Linux файловая система представляет собой перевернутое дерево, называемое единой иерархической файловой системой, корень которой — каталог
/.Текущий каталог — это каталог, в котором находится пользователь.
Домашний каталог — это рабочий каталог, связанный с пользователем. Домашние каталоги по умолчанию хранятся в директории
/home.При входе в систему текущим каталогом становится домашний каталог.
Абсолютный путь ссылается на файл от корня, проходя через все дерево до уровня файла:
/home/groupA/alice/fileОтносительный путь ссылается на тот же файл, начиная с текущего каталога:
../alice/fileВ приведенном выше примере
..ссылается на родительский каталог текущего каталога.Каталог, даже если он пуст, обязательно содержит как минимум две ссылки:
.: ссылка на себя...: ссылка на родительский каталог текущего каталога.Относительный путь может начинаться с
./или../. Если относительный путь ссылается на подкаталог или файл в текущем каталоге, то./часто опускается. Упоминание первого./в дереве потребуется только для запуска исполняемого файла.Ошибки в путях могут вызывать множество проблем: создание папок или файлов в неправильных местах, непреднамеренное удаление и т.д. Поэтому настоятельно рекомендуется использовать автодополнение при вводе путей.
В приведенном выше примере мы пытаемся указать расположение файла
myfileиз каталогаbob.
- Абсолютный путь: текущий каталог не имеет значения. Мы начинаем с корня и спускаемся через каталоги
home,groupA,aliceи, наконец, файлmyfile:/home/groupA/alice/myfile.- Относительный путь: наша отправная точка — текущий каталог
bob, мы поднимаемся на один уровень через..(т.е. в каталогgroupA), затем спускаемся в каталогaliceи, наконец, файлmyfile:../alice/myfile.Команда
pwdКоманда
pwd(Print Working Directory) отображает абсолютный путь текущего каталога.bashкопировать$ pwd /home/rockstarДля использования относительного пути или команды
cdдля перехода в другой каталог необходимо знать его расположение в файловой системе.В зависимости от типа оболочки и различных параметров ее конфигурационного файла, приглашение терминала (также известное как командная строка) будет отображать абсолютный или относительный путь текущего каталога.
Команда
cdКоманда
cd(Change Directory) позволяет изменить текущий каталог — другими словами, перемещаться по дереву.bashкопировать$ cd /tmp $ pwd /tmp $ cd ../ $ pwd / $ cd $ pwd /home/rockstarКак видно из последнего примера, команда
cdбез аргументов перемещает текущий каталог в домашний каталог.Команда
lsКоманда
lsотображает содержимое каталога.bashкопироватьls [-a] [-i] [-l] [каталог1] [каталог2] [...]Пример:
bashкопировать$ ls /home . .. rockstarОсновные опции команды
ls:
Опция Описание -aОтображает все файлы, включая скрытые. Скрытые файлы в Linux начинаются с ..-iОтображает номера inode. -lИспользует длинный формат списка, то есть каждая строка отображает подробную информацию о файле или каталоге. Команда
lsимеет множество опций (см.man):
Опция Описание -dОтображает информацию о каталоге вместо его содержимого. -gКак опция -l, но не отображает владельца.-hОтображает размеры файлов в наиболее подходящем формате (байты, килобайты, мегабайты, гигабайты и т.д.). hозначает Human Readable. Должна использоваться с опцией-l.-sОтображает выделенный размер каждого файла в блоках. В команде lsразмер одного блока по умолчанию составляет 1024 байта. В операционной системе GNU/Linux "блок" — это наименьшая единица хранения в файловой системе, и, как правило, один блок равен 4096 байтам. В операционной системе Windows, например, в файловой системе NTFS, минимальная единица хранения называется "кластер". Определение минимальной единицы хранения может варьироваться в зависимости от файловой системы.-AОтображает все файлы в каталоге, кроме .и...-RРекурсивно отображает содержимое подкаталогов. -FОтображает тип файлов. Печатает /для каталога,*для исполняемых файлов,@для символических ссылок и ничего для текстовых файлов.-XСортирует файлы по их расширениям. Описание столбцов, создаваемых командой
ls -lia:bashкопировать$ ls -lia /home 78489 drwx------ 4 rockstar rockstar 4096 25 oct. 08:10 rockstar
Значение Описание 78489Номер inode. drwx------Тип файла ( d) и права доступа (rwx------).4Количество подкаталогов (включая .и..). Для файла это количество жестких ссылок, где 1 представляет сам файл.rockstarВладелец файла. rockstarГруппа-владелец. 4096Для файлов отображается размер файла. Для каталогов отображается фиксированное значение 4096 байт, занимаемое именованием файлов. Для расчета общего размера каталога используйте команду du -sh rockstar/.25 oct. 08:10Дата последнего изменения. rockstarИмя файла (или каталога). Примечание: Алиасы часто используются в распространенных дистрибутивах.
Например, алиас
ll:bashкопироватьalias ll='ls -l --color=auto'Команда
lsимеет множество опций. Вот несколько продвинутых примеров использования:
- Список файлов в
/etcв порядке последнего изменения:bashкопировать$ ls -ltr /etc total 1332 -rw-r--r--. 1 root root 662 29 may 2021 logrotate.conf -rw-r--r--. 1 root root 272 17 may. 2021 mailcap -rw-------. 1 root root 122 12 may. 2021 securetty ... -rw-r--r--. 2 root root 85 18 may. 17:04 resolv.conf -rw-r--r--. 1 root root 44 18 may. 17:04 adjtime -rw-r--r--. 1 root root 283 18 may. 17:05 mtab
- Список файлов в
/varразмером более 1 мегабайта, но менее 1 гигабайта. В этом примере используются продвинутые командыgrepс регулярными выражениями. Новичкам не стоит слишком беспокоиться, в будущем будет специальный урок по этим регулярным выражениям.bashкопировать$ ls -lhR /var/ | grep ^\- | grep -E "[1-9]*\.[0-9]*M" ... -rw-r--r--. 1 apache apache 1.2M 10 may. 13:02 XB RiyazBdIt.ttf -rw-r--r--. 1 apache apache 1.2M 10 may. 13:02 XB RiyazBd.ttf -rw-r--r--. 1 apache apache 1.1M 10 may. 13:02 XB RiyazIt.ttf ...Конечно, мы настоятельно рекомендуем использовать команду
find.bashкопироватьfind /var -size +1M -a -size -1024M -a -type f -exec ls -lh {} \;
- Показать права на папку:
Чтобы узнать права на папку, в нашем примере
/etc, следующая команда не будет подходящей:bashкопировать$ ls -l /etc total 1332 -rw-r--r--. 1 root root 44 18 nov. 17:04 adjtime -rw-r--r--. 1 root root 1512 12 janv. 2010 aliases -rw-r--r--. 1 root root 12288 17 nov. 17:41 aliases.db drwxr-xr-x. 2 root root 4096 17 nov. 17:48 alternatives ...Эта команда по умолчанию отображает содержимое папки (внутри). Для самой папки можно использовать опцию
-d.bashкопироватьls -ld /etc drwxr-xr-x. 69 root root 4096 18 nov. 17:05 /etc
- Сортировка по размеру файла, начиная с наибольшего:
bashкопироватьls -lhS
- Формат времени/даты с
-l:bashкопировать$ ls -l --time-style="+%Y-%m-%d %m-%d %H:%M" / total 12378 dr-xr-xr-x. 2 root root 4096 2014-11-23 11-23 03:13 bin dr-xr-xr-x. 5 root root 1024 2014-11-23 11-23 05:29 boot
- Добавление завершающего слеша к папкам:
По умолчанию команда
lsне отображает последний слеш папки. В некоторых случаях, например, для скриптов, полезно отображать их:bashкопировать$ ls -dF /etc /etc/
- Скрытие некоторых расширений:
bashкопироватьls /etc --hide=*.confКоманда
mkdirКоманда
mkdirсоздает каталог или дерево каталогов.bashкопироватьmkdir [-p] каталог [каталог] [...]Пример:
bashкопироватьmkdir /home/rockstar/workКаталог "rockstar" должен существовать для создания каталога "work".
В противном случае следует использовать опцию
-p. Опция-pсоздает родительские каталоги, если они не существуют.Опасность: Не рекомендуется использовать имена команд Linux в качестве имен каталогов или файлов.
Команда
touchКоманда
touchизменяет временную метку файла или создает пустой файл, если файл не существует.bashкопироватьtouch [-t дата] файлПример:
bashкопироватьtouch /home/rockstar/myfile
Опция Описание -t датаИзменяет дату последнего изменения файла на указанную дату. Формат даты:
[AAAA]MMJJhhmm[ss]Совет: Команда
touchв основном используется для создания пустого файла, но она может быть полезна для инкрементных или дифференциальных резервных копий. Действительно, единственный эффект выполненияtouchна файл — это принудительное его сохранение во время следующего резервного копирования.Команда
rmdirКоманда
rmdirудаляет пустой каталог.Пример:
bashкопироватьrmdir /home/rockstar/work
Опция Описание -pУдаляет родительский каталог или каталоги, если они пусты. Совет: Для удаления непустого каталога и его содержимого используйте команду
rm.Команда
rmКоманда
rmудаляет файл или каталог.bashкопироватьrm [-f] [-r] файл [файл] [...]Опасность: Любое удаление файла или каталога является окончательным.
Опции Описание -fНе запрашивает подтверждение удаления. -iЗапрашивает подтверждение удаления. -rУдаляет каталог и рекурсивно удаляет его подкаталоги. Примечание: Сама команда
rmне запрашивает подтверждение при удалении файлов. Однако в дистрибутивах Red Hat/Rocky командаrmзапрашивает подтверждение удаления, потому что командаrmявляется алиасом командыrm -i. Не удивляйтесь, если в другом дистрибутиве, например Debian, вы не получите запроса на подтверждение.Удаление папки с помощью команды
rm, независимо от того, пуста она или нет, потребует добавления опции-r.Конец опций обозначается двойным дефисом
--.В примере:
bashкопировать$ >-hard-hard # Создать пустой файл с именем -hard-hard hard-hard [CTRL+C] Прервать создание файла $ rm -f -- -hard-hardИмя файла
-hard-hardначинается с-. Без использования--оболочка интерпретировала бы-dв-hard-hardкак опцию.Команда
mvКоманда
mvперемещает и переименовывает файл.bashкопироватьmv файл [файл ...] назначениеПримеры:
bashкопироватьmv /home/rockstar/file1 /home/rockstar/file2 mv /home/rockstar/file1 /home/rockstar/file2 /tmp
Опции Описание -fНе запрашивает подтверждение, если перезаписывает файл назначения. -iЗапрашивает подтверждение, если перезаписывает файл назначения (по умолчанию). Несколько конкретных случаев помогут вам понять возможные трудности:
bashкопироватьmv /home/rockstar/file1 /home/rockstar/file2Переименовывает
file1вfile2. Еслиfile2уже существует, заменяет его содержимое на содержимоеfile1.bashкопироватьmv /home/rockstar/file1 /home/rockstar/file2 /tmpПеремещает
file1иfile2в каталог/tmp.bashкопироватьmv file1 /repexist/file2Перемещает
file1вrepexistи переименовывает его вfile2.bashкопироватьmv file1 file2
file1переименовывается вfile2.bashкопироватьmv file1 /repexistЕсли каталог назначения существует,
file1перемещается в/repexist.bashкопироватьmv file1 /wrongrepЕсли каталог назначения не существует,
file1переименовывается вwrongrepв корневом каталоге.Команда
cpКоманда
cpкопирует файл.bashкопироватьcp файл [файл ...] назначениеПример:
bashкопироватьcp -r /home/rockstar /tmp
Опции Описание -iЗапрашивает подтверждение, если перезаписывает (по умолчанию). -fНе запрашивает подтверждение, если перезаписывает файл назначения. -pСохраняет владельца, права доступа и временную метку скопированного файла. -rКопирует каталог с его файлами и подкаталогами. -sСоздает символическую ссылку вместо копирования. bashкопироватьcp file1 /repexist/file2
file1копируется в/repexistпод именемfile2.bashкопироватьcp file1 file2
file1копируется какfile2в этот каталог.bashкопироватьcp file1 /repexistЕсли каталог назначения существует,
file1копируется в/repexist.bashкопироватьcp file1 /wrongrepЕсли каталог назначения не существует,
file1копируется под именемwrongrepв корневой каталог.Визуализация
Команда
fileКоманда
fileотображает тип файла.bashкопироватьfile файл1 [файлы]Пример:
bashкопировать$ file /etc/passwd /etc /etc/passwd: ASCII text /etc: directoryКоманда
moreКоманда
moreотображает содержимое одного или нескольких файлов постранично.bashкопироватьmore файл1 [файлы]Пример:
bashкопировать$ more /etc/passwd root:x:0:0:root:/root:/bin/bash ...Используя клавишу Enter, перемещение происходит построчно. Используя клавишу Пробел, перемещение происходит постранично.
/текстпозволяет искать вхождение в файле.Команда
lessКоманда
lessотображает содержимое одного или нескольких файлов. Командаlessинтерактивна и имеет свои собственные команды для использования.bashкопироватьless файл1 [файлы]Команды, специфичные для
less:
Команда Действие h или H Помощь. ↑ ↓ → ← Перемещение вверх, вниз на строку или вправо, влево. Enter Перемещение вниз на строку. Пробел Перемещение вниз на страницу. Page Up и Page Down Перемещение вверх или вниз на страницу. g и G Переход к первой и последней страницам. /текстПоиск текста. q или Q Выход из команды less.Команда
catКоманда
catобъединяет содержимое нескольких файлов и отображает результат на стандартный вывод.bashкопироватьcat файл1 [файлы]Пример 1 — Отображение содержимого файла на стандартный вывод:
bashкопироватьcat /etc/passwdПример 2 — Отображение содержимого нескольких файлов на стандартный вывод:
bashкопироватьcat /etc/passwd /etc/groupПример 3 — Объединение содержимого нескольких файлов в один файл с использованием перенаправления вывода:
bashкопироватьcat /etc/passwd /etc/group > usersAndGroups.txtПример 4 — Отображение нумерации строк:
bashкопировать$ cat -n /etc/profile 1 # /etc/profile: system-wide .profile file for the Bourne shell (sh(1)) 2 # and Bourne compatible shells (bash(1), ksh(1), ash(1), ...). 3 4 if [ "`id -u`" -eq 0 ]; then 5 PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" 6 else …Пример 5 — Отображение нумерации непустых строк:
bashкопировать$ cat -b /etc/profile 1 # /etc/profile: system-wide .profile file for the Bourne shell (sh(1)) 2 # and Bourne compatible shells (bash(1), ksh(1), ash(1), ...). 3 if [ "`id -u`" -eq 0 ]; then 4 PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" 5 else …Команда
tacКоманда
tacделает почти противоположное командеcat. Она отображает содержимое файла, начиная с конца (что особенно интересно для чтения логов!).Пример: Отображение лог-файла, начиная с последней строки:
bashкопировать[root]# tac /var/log/messages | lessКоманда
headКоманда
headотображает начало файла.bashкопироватьhead [-n x] файл
Опция Описание -n xОтображает первые xстрок файла.По умолчанию (без опции
-n) командаheadотображает первые 10 строк файла.Команда
tailКоманда
tailотображает конец файла.bashкопироватьtail [-f] [-n x] файл
Опция Описание -n xОтображает последние xстрок файла.-fОтображает изменения файла в реальном времени. Пример:
bashкопироватьtail -n 3 /etc/passwd sshd:x:74:74:Privilege-separeted sshd:/var/empty /sshd:/sbin/nologin tcpdump::x:72:72::/:/sbin/nologin user1:x:500:500:grp1:/home/user1:/bin/bashС опцией
-fинформация об изменениях файла будет постоянно выводиться, пока пользователь не выйдет из режима мониторинга с помощью Ctrl+C. Эта опция часто используется для отслеживания лог-файлов (логов) в реальном времени.Без опции
-nкомандаtailотображает последние 10 строк файла.Команда
sortКоманда
sortсортирует строки файла.Она позволяет упорядочить результат команды или содержимое файла в заданном порядке, численно, алфавитно, по размеру (KB, MB, GB) или в обратном порядке.
bashкопироватьsort [-k] [-n] [-u] [-o файл] [-t] файлПример:
bashкопировать$ sort -k 3,4 -t ":" -n /etc/passwd root:x:0:0:root:/root:/bin/bash adm:x:3:4:adm:/var/adm/:/sbin/nologin
Опция Описание -kУказывает столбцы для разделения. Можно указать несколько столбцов. -nЗапрашивает числовую сортировку. -o файлСохраняет результат сортировки в указанный файл. -tУказывает разделитель, что требует, чтобы содержимое соответствующего файла было регулярно разделено на столбцы, иначе сортировка будет некорректной. -rОбратный порядок результата. Используется вместе с опцией -nдля сортировки от большего к меньшему.-uУдаляет дубликаты после сортировки. Эквивалентно команде `sort ФАЙЛ Команда
sortсортирует файл только на экране. Файл не изменяется сортировкой. Чтобы сохранить результат сортировки, используйте опцию-oили перенаправление вывода>.По умолчанию числа сортируются по их символам. Таким образом, "110" будет перед "20", который сам будет перед "3". Опция
-nдолжна быть указана, чтобы числовые блоки сортировались по их значению.Команда
sortобращает порядок результатов с опцией-r:bashкопировать$ sort -k 3 -t ":" -n -r /etc/passwd nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin polkitd:x:998:996:User for polkitd:/:/sbin/nologinВ этом примере команда
sortотсортирует содержимое файла/etc/passwdна этот раз от наибольшего uid (идентификатора пользователя) к наименьшему.Некоторые продвинутые примеры использования команды
sort:
- Перемешивание значений
Команда
sortтакже позволяет перемешивать значения с опцией-R:bashкопироватьsort -R /etc/passwd
- Сортировка IP-адресов
Системный администратор быстро сталкивается с обработкой IP-адресов из логов своих сервисов, таких как SMTP, VSFTP или Apache. Эти адреса обычно извлекаются с помощью команды
cut.Вот пример с файлом
dns-client.txt:bashкопировать192.168.1.10 192.168.1.200 5.1.150.146 208.128.150.98 208.128.150.99bashкопировать$ sort -nr dns-client.txt 208.128.150.99 208.128.150.98 192.168.1.200 192.168.1.10 5.1.150.146
- Сортировка файла с удалением дубликатов
Команда
sortумеет удалять дубликаты из вывода файла с помощью опции-u.Вот пример с файлом
colours.txt:bashкопироватьRed Green Blue Red Pinkbashкопировать$ sort -u colours.txt Blue Green Pink Red
- Сортировка файла по размерам
Команда
sortумеет распознавать размеры файлов, например, из командыlsс опцией-h.Вот пример с файлом
size.txt:bashкопировать1.7G 18M 69K 2.4M 1.2M 4.2G 6M 124M 12.4M 4Gbashкопировать$ sort -hr size.txt 4.2G 4G 1.7G 124M 18M 12.4M 6M 2.4M 1.2M 69KКоманда
wcКоманда
wcподсчитывает количество строк, слов и/или байтов в файле.bashкопироватьwc [-l] [-m] [-w] файл [файлы]
Опция Описание -cПодсчитывает количество байтов. -mПодсчитывает количество символов. -lПодсчитывает количество строк. -wПодсчитывает количество слов. Поиск
Команда
findКоманда
findищет файлы или каталоги.bashкопироватьfind каталог [-name имя] [-type тип] [-user логин] [-date дата]Поскольку у команды
findмного опций, лучше обратиться к руководству (man).Если каталог поиска не указан, команда
findбудет искать с текущего каталога.
Опция Описание -perm праваИщет файлы по их правам доступа. -size размерИщет файлы по размеру. Опция
-execкомандыfindМожно использовать опцию
-execкомандыfindдля выполнения команды на каждой строке результата:bashкопироватьfind /tmp -name *.txt -exec rm -f {} \;Предыдущая команда ищет все файлы в каталоге
/tmpс именем*.txtи удаляет их.Совет: Понимание опции
-execВ приведенном выше примере команда
findпостроит строку, представляющую команду для выполнения.Если команда
findнайдет три файла с именамиlog1.txt,log2.txtиlog3.txt, то командаfindпостроит строку, заменяя в строкеrm -f {} \;фигурные скобки одним из результатов поиска, и сделает это столько раз, сколько есть результатов.Это даст нам:
bashкопироватьrm -f /tmp/log1.txt ; rm -f /tmp/log2.txt ; rm -f /tmp/log3.txt ;Символ
;— это специальный символ оболочки, который должен быть защищен с помощью\, чтобы предотвратить его слишком раннюю интерпретацию командойfind(а не в-exec).Совет:
$ find /tmp -name *.txt -deleteделает то же самое.Команда
whereisКоманда
whereisищет файлы, связанные с командой.bashкопироватьwhereis [-b] [-m] [-s] командаПример:
bashкопировать$ whereis -b ls ls: /bin/ls
Опция Описание -bИщет только исполняемый файл. -mИщет только страницы руководства. -sИщет только исходные файлы. Команда
grepКоманда
grepищет строку в файле.bashкопироватьgrep [-w] [-i] [-v] "строка" файлПример:
bashкопировать$ grep -w "root:" /etc/passwd root:x:0:0:root:/root:/bin/bash
Опция Описание -iИгнорирует регистр искомой строки. -vИсключает строки, содержащие строку. -wИщет точное слово. Команда
grepвозвращает полную строку, содержащую искомую строку.
- Специальный символ
^используется для поиска строки в начале строки.- Специальный символ
$ищет строку в конце строки.bashкопироватьgrep -w "^root" /etc/passwdПримечание: Эта команда очень мощная, и настоятельно рекомендуется ознакомиться с ее руководством. У нее много производных.
Можно искать строку в дереве файлов с опцией
-R.bashкопироватьgrep -R "Virtual" /etc/httpdМетасимволы (wildcards)
Метасимволы заменяют один или несколько символов (или даже отсутствие символов) во время поиска. Эти метасимволы также известны как wildcards.
Они могут комбинироваться.
Символ
*заменяет строку, состоящую из любых символов. Символ*также может представлять отсутствие символов.bashкопировать$ find /home -name "test*" /home/rockstar/test /home/rockstar/test1 /home/rockstar/test11 /home/rockstar/tests /home/rockstar/test362Метасимволы позволяют выполнять более сложные поиски, заменяя все или часть слова. Просто замените неизвестные этими специальными символами.
Символ
?заменяет один символ, независимо от того, какой он.bashкопировать$ find /home -name "test?" /home/rockstar/test1 /home/rockstar/testsКвадратные скобки
[и]используются для указания значений, которые может принимать один символ.bashкопировать$ find /home -name "test[123]*" /home/rockstar/test1 /home/rockstar/test11 /home/rockstar/test362Примечание: Всегда заключайте слова, содержащие метасимволы, в
", чтобы предотвратить их замену именами файлов, соответствующих критериям.Предупреждение: Не путайте метасимволы оболочки с метасимволами регулярных выражений. Команда
grepиспользует метасимволы регулярных выражений.Перенаправления и каналы
Стандартный ввод и вывод
В UNIX и Linux системах есть три стандартных потока. Они позволяют программам, через библиотеку
stdio.h, вводить или выводить информацию.Эти потоки называются каналом X или файловым дескриптором X.
По умолчанию:
- клавиатура — это устройство ввода для канала 0, называемого stdin;
- экран — это устройство вывода для каналов 1 и 2, называемых stdout и stderr.
stderr получает потоки ошибок, возвращаемые командой. Другие потоки направляются в stdout.
Эти потоки указывают на файлы устройств, но поскольку в UNIX/Linux все является файлом, потоки ввода/вывода могут быть легко перенаправлены в другие файлы. Этот принцип — сила оболочки.
Перенаправление ввода
Можно перенаправить входной поток из другого файла с помощью символа
<или<<. Команда будет читать файл вместо клавиатуры:bashкопироватьftp -in serverftp << ftp-commands.txtПримечание: Только команды, требующие ввода с клавиатуры, смогут обрабатывать перенаправление ввода.
Перенаправление ввода также может использоваться для имитации интерактивности пользователя. Команда будет читать входной поток до тех пор, пока не встретит определенное ключевое слово после перенаправления ввода.
Эта функция используется для скриптов интерактивных команд:
bashкопировать$ ftp -in serverftp << END user alice password put file bye ENDКлючевое слово
ENDможет быть заменено любым словом.bashкопировать$ ftp -in serverftp << STOP user alice password put file bye STOPОболочка выходит из команды
ftp, когда получает строку, содержащую только ключевое слово.Предупреждение: Ключевое слово, здесь
ENDилиSTOP, должно быть единственным словом в строке и должно находиться в начале строки.Перенаправление стандартного ввода редко используется, так как большинство команд принимают имя файла в качестве аргумента.
Команда
wcможет быть использована следующим образом:bashкопировать$ wc -l .bash_profile 27 .bash_profile # количество строк сопровождается именем файла $ wc -l < .bash_profile 27 # возвращает только количество строкПеренаправление вывода
Стандартный вывод может быть перенаправлен в другие файлы с помощью символов
>или>>.Простое перенаправление
>перезаписывает содержимое выходного файла:bashкопироватьdate +%F > date_fileКогда используется символ
>>, это указывает на то, что результат команды добавляется к содержимому файла.bashкопироватьdate +%F >> date_fileВ обоих случаях файл автоматически создается, если он не существует.
Стандартный вывод ошибок также может быть перенаправлен в другой файл. В этом случае необходимо указать номер канала (который может быть опущен для каналов 0 и 1):
bashкопироватьls -R / 2> errors_file ls -R / 2>> errors_fileПримеры перенаправления
Перенаправление 2 выводов в 2 файла:
bashкопироватьls -R / >> ok_file 2>> nok_fileПеренаправление 2 выводов в один файл:
bashкопироватьls -R / >> log_file 2>&1Перенаправление stderr в "бездонную яму" (
/dev/null):bashкопироватьls -R / 2>> /dev/nullКогда оба потока вывода перенаправлены, никакая информация не отображается на экране. Чтобы использовать перенаправление вывода и сохранить отображение, нужно использовать команду
tee.Каналы (pipes)
Канал — это механизм, позволяющий связать стандартный вывод первой команды со стандартным вводом второй команды.
Это общение однонаправленное и осуществляется с помощью символа
|. Символ канала|получается одновременным нажатием клавиш Shift+|.Все данные, отправленные командой слева от канала через стандартный вывод, отправляются на стандартный ввод команды справа.
Команды, особенно используемые после канала, — это фильтры.
- Примеры:
Отображение только начала:
bashкопироватьls -lia / | headОтображение только конца:
bashкопироватьls -lia / | tailСортировка результата:
bashкопироватьls -lia / | sortПодсчет количества слов / символов:
bashкопироватьls -lia / | wcПоиск строки в результате:
bashкопироватьls -lia / | grep файлОсобые моменты
Команда
teeКоманда
teeиспользуется для перенаправления стандартного вывода команды в файл с сохранением отображения на экране.Она сочетается с каналом
|, чтобы получить на вход вывод команды для перенаправления:bashкопироватьls -lia / | tee файл cat файлОпция
-aдобавляет в файл вместо перезаписи.Команды
aliasиunaliasИспользование алиасов — это способ попросить оболочку запомнить определенную команду с ее опциями и дать ей имя.
Например:
bashкопироватьllзаменит команду:
bashкопироватьls -lКоманда
aliasперечисляет алиасы для текущей сессии. Алиасы по умолчанию установлены в дистрибутивах Linux. Вот алиасы для сервера Rocky:bashкопировать$ alias alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias vi='vim' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'Алиасы определены временно, только на время сессии пользователя.
Для постоянного использования они должны быть созданы в:
- файле
.bashrcв домашнем каталоге пользователя;- файле
/etc/bashrcдля всех пользователей.Предупреждение: Особое внимание должно быть уделено использованию алиасов, которые могут быть потенциально опасными! Например, алиас, установленный без ведома администратора:
bashкопироватьalias cd='rm -Rf'Команда
unaliasпозволяет удалять алиасы.Для удаления одного алиаса:
bashкопироватьunalias llДля удаления всех алиасов:
bashкопироватьunalias -aДля временного отключения алиаса используется комбинация
\<имя алиаса>.Например, если мы сделаем:
bashкопироватьtype lsэто может вернуть следующее:
bashкопироватьls is an alias to « ls -rt »Теперь, когда это известно, мы можем увидеть результаты использования алиаса или его временного отключения с помощью
\, выполнив следующее:bashкопировать$ ls file* # сортировка по времени file3.txt file2.txt file1.txt $ \ls file* # сортировка по имени file1.txt file2.txt file3.txtАлиасы и полезные функции
- Алиас
grep.Подсветка результата команды
grep:alias grep='grep --color=auto'
- Функция
mcdЧасто создается папка, а затем перемещение в нее:
mcd() { mkdir -p "$1"; cd "$1"; }
- Функция
clsПереход в папку и вывод ее содержимого:
cls() { cd "$1"; ls; }
- Функция
backupСоздание резервной копии файла:
backup() { cp "$1"{,.bak}; }
- Функция
extractИзвлечение любого типа архива:
bashкопироватьextract () { if [ -f $1 ] ; then case $1 in *.tar.bz2) tar xjf $1 ;; *.tar.gz) tar xzf $1 ;; *.bz2) bunzip2 $1 ;; *.rar) unrar e $1 ;; *.gz) gunzip $1 ;; *.tar) tar xf $1 ;; *.tbz2) tar xjf $1 ;; *.tgz) tar xzf $1 ;; *.zip) unzip $1 ;; *.Z) uncompress $1 ;; *.7z) 7z x $1 ;; *) echo "'$1' cannot be extracted via extract()" ;; esac else echo "'$1' is not a valid file" fi }
- Если
alias cmountвозвращает следующее:alias cmount="mount | column -t"Тогда мы можем использовать
cmount, чтобы показать все смонтированные файловые системы в столбцах, как это:[root]# cmountчто вернет наши смонтированные файловые системы в следующем формате:
bashкопировать/dev/simfs on / type simfs (rw,relatime,usrquota,grpquota) proc on /proc type proc (rw,relatime) sysfs on /sys type sysfs (rw,relatime) none on /dev type devtmpfs (rw,relatime,mode=755) none on /dev/pts type devpts (rw,relatime,mode=600,ptmxmode=000) none on /dev/shm type tmpfs (rw,relatime) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,relatime)Символ
;Символ
;связывает команды.Команды будут выполняться последовательно в порядке ввода после нажатия пользователем Enter.
bashкопироватьls /; cd /home; ls -lia; cd /Проверка знаний
- Что определяет пользователя в Linux? (7 ответов)
- Что характеризует длинную опцию для команды?
- Какие команды позволяют искать справку по команде?
chuck --norrisinfoaproposwhatis- Какая команда позволяет просмотреть историю пользователя?
- Какая команда позволяет искать текст в файле?
findgrep- Какая команда позволяет искать файл?
findgrep- Какая команда перенаправляет поток ошибок команды в новый файл
errors.log?
ls -R / 2> errors.logls -R / 2>> errors.logls -R / 2> errors.log 2>&1

