Linux — это операционная система (набор дистрибутивов), подобная Windows или MacOS, но с открытым исходным кодом. При этом Linux, как правило, используется в серверных решениях, где требуется высокая надежность, отказоустойчивость и гибкость настройки.
Взаимодействие с ОС на базе Linux осуществляется посредством выполнения команд в консольном терминале. Особенно это касается управления удаленными хостами — например, облачными серверами, которые предоставляет Timeweb Cloud.
В этом руководстве будут рассмотрены самые основные команды консольного терминала, необходимые для работы с большинством известных дистрибутивов Linux:
Alt Linux
Astra Linux
Kali Linux
Debian
Ubuntu
Конкретно в этом руководстве использовался дистрибутив Ubuntu 22.04, размещенный на облачном сервере Timeweb Cloud.
Базовые команды Linux имеют разную направленность, но чаще всего необходимы для решения следующих задач:
Управление файлами и каталогами. Вы можете создавать, удалять, перемещать, копировать и изменять права доступа к файлам и каталогам.
Администрирование системы. Вы можете управлять процессами, устанавливать и удалять программы.
Работа с сетью. Вы можете управлять сетевыми соединениями, проверять состояние сети и настраивать сетевые интерфейсы.
Прежде чем перейти непосредственно к ознакомлению с командами, сперва стоит понять несколько базовых принципов, которым следует архитектура Linux по части обработки данных — результатов выполнения команд и приложений.
Каждый процесс (программа) в Linux имеет 3 стандартных потока данных:
stdin
(номер 0). Поток ввода.
stdout
(номер 1). Поток вывода.
stderr
(номер 2). Поток ошибок.
Самые основные — это stdin
и stdout
.
С помощью стандартных потоков данных Linux позволяет строить пайплайны (pipelines) обработки данных. Иными словами, вместо вывода результата работы приложения (запущенного командой) в консоль, данные можно передать в качестве входных другому приложению и так далее.
Например, вот так может выглядеть тривиальный пайплайн:
ls .. | grep 32
После выполнения этой команды в консоли появится следующий вывод:
lib32
libx32
Сначала мы выполняем команду ls
, которая выводит список всех системных файлов и папок, после чего передаем результат ее вывода команде grep
, которая выполняет поиск тех каталогов, в названии которых фигурирует 32.
В этом разделе рассмотрим основные команды для навигации по каталогам и управления файлами.
Иногда полезно наглядно увидеть, в какой директории находится пользователь в данный момент:
pwd
Например, если пользователь находится в корневой директории, то в консоли появится соответствующий вывод:
/root
Вместо указания абсолютных путей при выполнении команд в некоторых случаях удобно вручную перемещаться между директориями:
cd /usr
Конкретно в этом примере мы оказались в системном каталоге usr
. В этом можно убедиться, явно запросив текущую директорию:
pwd
В консоли появится следующий вывод:
/usr
Чтобы вернуться в корневой каталог, достаточно выполнить команду перехода без явного указания адреса:
cd
Снова запросим текущий каталог:
pwd
В консоли появится адрес корневого каталога:
/root
Давайте перейдем в другую системную директорию на два уровня ниже:
cd /sys/devices
Чтобы подняться на уровень выше, нужно указать две точки (..
):
cd ..
Теперь мы оказались в системном каталоге sys
.
Снова вернемся в корневой каталог:
cd
Сперва перейдем в системную директорию пользователя:
cd /usr
Для исследования содержимого файловой системы можно запросить список файлов и каталогов в текущей директории:
ls
В консоли появится следующий вывод:
bin games include lib lib32 lib64 libexec libx32 local sbin share src
Вернемся в корневую директорию:
cd
Для того, чтобы видеть скрытые файлы и каталоги, необходимо добавить флаг -A
:
ls -A
В консоли появится примерно такой вывод:
.ansible .bash_history .bashrc .cache .lesshst .profile resize.log snap .ssh
Есть похожая команда, которая дает немного больше информации о содержимом файловой системы, добавляя указатели на текущий и более высший уровни:
ls -a
В этом случае вывод будет таким:
. .. .ansible .bash_history .bashrc .cache .lesshst .profile resize.log snap .ssh
Тем не менее, можно узнать содержимое каталога, не переходя в него:
ls /var
Консольный вывод будет содержать список файлов и директорий указанного каталога, а не текущего местонахождения пользователя:
backups cache crash lib local lock log mail opt run snap spool tmp
Чтобы запросить список всех системных файлов и директорий, нужно добавить слэш (/
) или две точки (..
):
ls /
Либо идентичная запись:
ls ..
В консоли появится следующий вывод:
bin dev home lib32 libx32 media opt root sbin srv sys usr
boot etc lib lib64 lost+found mnt proc run snap swap.img tmp var
Как можно увидеть, корневая директория root
, к которой всегда возвращает команда cd
, являются частью обширного списка других системных директорий, расположенных на уровень выше:
cd
Теперь мы находимся в root
.
Из корневого каталога мы можем сразу перейти в любую другую системную директорию, находящуюся на одном уровне с root
, — нам не придется вручную подниматься на уровень выше:
cd /sys
Однако если подняться из системной директории на уровень выше, то мы окажемся над корневым каталогом root
:
cd ..
Проверим файловую систему:
ls
Как видно, теперь мы находимся на самом верхнем уровне:
bin dev home lib32 libx32 media opt root sbin srv sys usr
boot etc lib lib64 lost+found mnt proc run snap swap.img tmp var
Вернемся в root
:
cd
При создании директории указывается ее имя:
mkdir mywork
Убедиться в том, что каталог действительно был создан, можно, запросив состояние файловой системы:
ls
Среди консольного вывода можно наблюдать название созданной директории:
mywork resize.log snap
Директории можно сразу создавать рекурсивно одну в другой с помощью флага -p
.
Например, попробуем создать вложенные директории обычным способом:
mkdir myjob/inner
В консоли появится сообщение об ошибке:
mkdir: cannot create directory ‘myjob/inner’: No such file or directory
Однако с флагом этот каталог будет создан:
mkdir myjob/inner -p
Проверим это:
ls
Консольный вывод станет таким:
myjob mywork resize.log snap
Проверим наличие вложенного каталога:
ls ./myjob
Как видно, он действительно существует:
inner
Флаг -p
также предотвращает ошибку при создании уже существующего каталога. Например, повторно создадим директорию обычным способом:
mkdir mywork
В консоли выведется ошибка:
mkdir: cannot create directory ‘mywork’: File exists
Однако с флагом ее не будет:
mkdir mywork -p
Создание файла и наполнение его содержимым осуществляется через консольный текстовый редактор nano
:
sudo nano myfile
После терминал консоли перейдет в режим редактирования текста. По завершению работы с файлом нужно нажать Ctrl + S для его сохранения и Ctrl + X для его закрытия.
Пусть содержимое созданного файла будет следующим:
My text
Проверим наличие файла в текущей директории:
ls
Как видим, созданный файл находится рядом с ранее созданными каталогами:
myfile myjob mywork resize.log snap
Копирование создает точную копию файла или каталога по указанному адресу:
cp myfile myfile2
Проверим файловую систему:
ls
Видим, что появился новый файл:
myfile myfile2 myjob mywork resize.log snap
Проверим его содержимое:
sudo nano myfile2
Оно полностью идентично содержимому оригинального файла:
My text
Попробуем проделать то же самое с каталогом:
cp mywork mywork2
В консоли появится ошибка:
cp: -r not specified; omitting directory 'mywork'
Дело в том, что копирование каталогов требует явного указания флага рекурсивного выполнения команды -r
:
cp mywork mywork2 -r
Проверим текущую директорию:
ls
Каталог был успешно скопирован:
myfile myfile2 myjob mywork mywork2 resize.log snap
Давайте удалим ранее созданный файл:
rm myfile2
Проверим его наличие:
ls
Файл был успешно удален:
myfile myjob mywork mywork2 resize.log snap
Для удаления каталогов требуется аналогичное указание флага -r
:
rm mywork2 -r
Проверим файлы:
ls
Каталог был успешно удален:
myfile myjob mywork resize.log snap
Кстати, можно также использовать специальную команду для удаления директории:
rmdir mywork2
Перемещение файла аналогично его копированию, но при этом оригинальный файл удаляется:
mv myfile mywork
Проверим текущую директорию:
ls
Можно заметить, что оригинальный файл отсутствует:
myjob mywork resize.log snap
При этом он будет находиться в указанной директории:
ls mywork
Ее содержимое теперь будет таким:
myfile
Копирование каталогов ничем не отличается от копирования файлов:
mv myjob mywork
Проверим указанную директорию
ls mywork
Как видно, каталог был целиком перемещен:
myfile myjob
Вместо редактора nano
для просмотра файла можно сразу вывести его содержимое в консоль:
cat mywork/myfile
В консоли появится соответствующий вывод:
My text
Базовые команды для вывода данных о системе.
Через консольный терминал можно запросить системные дату и время:
date
Формат вывода выглядит следующим образом:
Sun Mar 31 09:27:16 PM MSK 2024
Можно запросить список всех пользователей, вошедших на данный момент в систему:
w
Вывод в консоли будет примерно таким:
21:31:18 up 40 min, 1 user, load average: 0.02, 0.01, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 109.225.55.152 20:51 1.00s 0.09s 0.00s w
Можно запросить список запущенных процессов:
ps
В этом случае консольный вывод будет примерно следующим:
PID TTY TIME CMD
11643 pts/1 00:00:00 bash
11671 pts/1 00:00:00 ps
Часто используемая команда для управления удаленными хостами через SSH-соединение:
ssh root@185.154.195.109
Команда выше имеет следующую схему:
ssh USER@IP
Разумеется, USER
нужно заменить на имя удаленного пользователя, а IP
на IP-адрес удаленного хоста.
После этого консольный терминал попросит ввести root-пароль:
root@185.154.195.109's password:
Обратите внимание, что в момент ввода пароль визуально не отображается. Поэтому будьте внимательны и следите за тем, какая выбрана раскладка клавиатуры и не включен ли CAPSLOCK. При этом пароль можно просто скопировать и нажать Enter.
Зачастую некоторые программы (в виде архива или скрипта) загружаются вручную из удаленных репозиториев как обычные файлы:
wget https://github.com/nginx/nginx/archive/refs/tags/release-1.25.4.tar.gz
В этом примере выполняется загрузка архива с веб-сервером Nginx с официального репозитория GitHub.
После этого можно проверить состояние текущей директории:
ls
Можно заметить, что среди прочих каталогов появился загруженный архив:
mywork release-1.25.4.tar.gz resize.log snap temp
Загруженные с удаленных серверов архивы перед использованием необходимо распаковать:
tar -xvf release-1.25.4.tar.gz
При этом флаги указывают то, как следует выполнять извлечение:
-x
сообщает об извлечении сжатых файлов их архива;
-v
сообщает о необходимости выведения в консоль подробной информации о процессе извлечения;
-f
сообщает, что переданные в команду параметры являются именами файлов архивов.
После извлечения проверим текущую директорию:
ls
Как и следовало ожидать, появилась новая папка с названием распакованного архива:
mywork nginx-release-1.25.4 release-1.25.4.tar.gz resize.log snap temp
Кстати, после распаковки архив можно удалить за ненадобностью:
rm release-1.25.4.tar.gz
Команды для управление пакетами Linux.
В дистрибутивах Linux есть стандартный пакетный менеджер APT. Он используется по умолчанию в дистрибутивах Debian, Ubuntu и AstraLinux.
Как правило, перед использованием выполняют обновление списка доступных для загрузки репозиториев:
sudo apt update
Также имеет смысл выполнять обновление уже установленных в систему пакетов:
sudo apt upgrade
Можно также просмотреть список уже установленных в системе пакетов:
sudo apt list --installed
В этом случае в консоли появится примерно такой вывод:
Listing... Done
adduser/jammy,now 3.118ubuntu5 all [installed,automatic]
amd64-microcode/jammy-updates,jammy-security,now 3.20191218.1ubuntu2.2 amd64 [installed,automatic]
apparmor/jammy-updates,now 3.0.4-2ubuntu2.3 amd64 [installed,automatic]
apport-symptoms/jammy,now 0.24 all [installed,automatic]
...
Пакеты устанавливаются следующим образом:
sudo apt install nginx
Например, таким образом мы установили веб-сервер Nginx.
Очень часто при установке пакетный менеджер задает дополнительные вопросы, на которые можно ответить yes
или no
с помощью консольных вводов y
и n
.
Чтобы APT автоматически отвечал yes
на все возникающие во время установки вопросы, необходимо добавить флаг -y
:
sudo apt install nginx -y
Удалить пакет Linux можно следующим образом:
sudo apt remove nginx
Команды для работы с самим консольным терминалом.
Чтобы не запутаться среди ранее выведенных в консоли сообщений, рекомендуется периодически очищать терминал:
clear
После этого командная строка вернется в исходное (чистое) состояние.
Вы всегда можете получить справку о любой команде Linux:
man ls
После этого в консоли появится информация о структуре команды, ее возможных флагах и параметрах.
Более короткая, но менее понятная справка по командам может быть получена так:
help
Можно просмотреть историю введенных в консольный терминал команд:
history
Вывод будет примерно таким:
...
125 cd ..
126 cd .
127 cd ..
128 ls
129 cd
130 cd /sys
131 ls
132 cd ..
133 ls
134 cd
135 clear
136 cd
...
Рассмотренные в этом руководстве команды используется в Linux чаще всего. Это самые базовые вещи, которые необходимо знать любому разработчику во время работы с ОС.
Для решения более сложных задач, связанных с DevOps, построением облачных инфраструктур или проектированием микросервисных приложений, необходимы специализированные и более сложные команды (и пакеты, их предоставляющие), флаги и параметры.
Вы можете найти полный список команд и официальную документацию (включая руководства по командам, инструкции по установке и настройке) на официальном сайте проекта ядра Linux.