В этой главе вы изучите команды 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.99
bashкопировать$ 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 Pink
bashкопировать$ 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 4G
bashкопировать$ 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 --norris
info
apropos
whatis
- Какая команда позволяет просмотреть историю пользователя?
- Какая команда позволяет искать текст в файле?
find
grep
- Какая команда позволяет искать файл?
find
grep
- Какая команда перенаправляет поток ошибок команды в новый файл
errors.log
?
ls -R / 2> errors.log
ls -R / 2>> errors.log
ls -R / 2> errors.log 2>&1