empty static

Команды для пользователей Linux

администратор вводит команды

В этой главе вы изучите команды 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:

  1. Исполняемые программы или команды.
  2. Системные вызовы (функции, предоставляемые ядром).
  3. Вызовы библиотек (функции, предоставляемые библиотекой).
  4. Специальные файлы (обычно находятся в /dev).
  5. Форматы файлов и соглашения (например, конфигурационные файлы, такие как /etc/passwd).
  6. Игры (например, текстовые приложения).
  7. Разное (например, man (7)).
  8. Команды системного администрирования (обычно только для root).
  9. Подпрограммы ядра (нестандартные).

Информацию о каждом разделе можно получить, набрав 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 ответов)
  • Что характеризует длинную опцию для команды?
  • Какие команды позволяют искать справку по команде?
    • google
    • 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