Давайте дружить в Телеграме: рассказываем про новые фичи, общаемся в комментах, прислушиваемся к вашим идеям Подписаться

Основные команды Linux

Миша Курушин
Миша Курушин
Технический писатель
02 мая 2024 г.
44
13 минут чтения
Средний рейтинг статьи: 5

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)

Иногда полезно наглядно увидеть, в какой директории находится пользователь в данный момент:

pwd

Например, если пользователь находится в корневой директории, то в консоли появится соответствующий вывод:

/root

Переход в конкретную директорию (cd)

Вместо указания абсолютных путей при выполнении команд в некоторых случаях удобно вручную перемещаться между директориями:

cd /usr

Конкретно в этом примере мы оказались в системном каталоге usr. В этом можно убедиться, явно запросив текущую директорию:

pwd

В консоли появится следующий вывод:

/usr

Чтобы вернуться в корневой каталог, достаточно выполнить команду перехода без явного указания адреса:

cd

Снова запросим текущий каталог:

pwd

В консоли появится адрес корневого каталога:

/root

Давайте перейдем в другую системную директорию на два уровня ниже:

cd /sys/devices

Чтобы подняться на уровень выше, нужно указать две точки (..):

cd ..

Теперь мы оказались в системном каталоге sys.

Снова вернемся в корневой каталог:

cd

Список файлов и каталогов текущей директории (ls)

Сперва перейдем в системную директорию пользователя:

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)

При создании директории указывается ее имя:

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)

Создание файла и наполнение его содержимым осуществляется через консольный текстовый редактор nano:

sudo nano myfile

После терминал консоли перейдет в режим редактирования текста. По завершению работы с файлом нужно нажать Ctrl + S для его сохранения и Ctrl + X для его закрытия.

Пусть содержимое созданного файла будет следующим:

My text

Проверим наличие файла в текущей директории:

ls

Как видим, созданный файл находится рядом с ранее созданными каталогами:

myfile  myjob  mywork  resize.log  snap

Копирование файла или директории (cp)

Копирование создает точную копию файла или каталога по указанному адресу:

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)

Давайте удалим ранее созданный файл:

rm myfile2

Проверим его наличие:

ls

Файл был успешно удален:

myfile  myjob  mywork  mywork2  resize.log  snap

Для удаления каталогов требуется аналогичное указание флага -r:

rm mywork2 -r

Проверим файлы:

ls

Каталог был успешно удален:

myfile  myjob  mywork  resize.log  snap

Кстати, можно также использовать специальную команду для удаления директории:

rmdir mywork2

Перемещение файла или директории (mv)

Перемещение файла аналогично его копированию, но при этом оригинальный файл удаляется:

mv myfile mywork

Проверим текущую директорию:

ls

Можно заметить, что оригинальный файл отсутствует:

myjob  mywork  resize.log  snap

При этом он будет находиться в указанной директории:

ls mywork

Ее содержимое теперь будет таким:

myfile

Копирование каталогов ничем не отличается от копирования файлов:

mv myjob mywork

Проверим указанную директорию

ls mywork

Как видно, каталог был целиком перемещен:

myfile  myjob

Быстрый просмотр содержимого файла (cat)

Вместо редактора nano для просмотра файла можно сразу вывести его содержимое в консоль:

cat mywork/myfile

В консоли появится соответствующий вывод:

My text

Информация о системе и сети

Базовые команды для вывода данных о системе.

Системные часы (date)

Через консольный терминал можно запросить системные дату и время:

date

Формат вывода выглядит следующим образом:

Sun Mar 31 09:27:16 PM MSK 2024

Список активных пользователей (w)

Можно запросить список всех пользователей, вошедших на данный момент в систему:

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)

Можно запросить список запущенных процессов:

ps

В этом случае консольный вывод будет примерно следующим:

  PID TTY          TIME CMD
11643 pts/1    00:00:00 bash
11671 pts/1    00:00:00 ps

Подключение к удаленному серверу по SSH (ssh)

Часто используемая команда для управления удаленными хостами через SSH-соединение:

ssh root@185.154.195.109

Команда выше имеет следующую схему:

ssh USER@IP

Разумеется, USER нужно заменить на имя удаленного пользователя, а IP на IP-адрес удаленного хоста.

После этого консольный терминал попросит ввести root-пароль:

root@185.154.195.109's password:

Обратите внимание, что в момент ввода пароль визуально не отображается. Поэтому будьте внимательны и следите за тем, какая выбрана раскладка клавиатуры и не включен ли CAPSLOCK. При этом пароль можно просто скопировать и нажать Enter.

Загрузка файлов по URL (wget)

Зачастую некоторые программы (в виде архива или скрипта) загружаются вручную из удаленных репозиториев как обычные файлы:

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

Распаковка архивов (wget)

Загруженные с удаленных серверов архивы перед использованием необходимо распаковать:

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)

Чтобы не запутаться среди ранее выведенных в консоли сообщений, рекомендуется периодически очищать терминал:

clear

После этого командная строка вернется в исходное (чистое) состояние.

Справка по команде (man)

Вы всегда можете получить справку о любой команде Linux:

man ls

После этого в консоли появится информация о структуре команды, ее возможных флагах и параметрах.

Более короткая, но менее понятная справка по командам может быть получена так:

help

История использованных команд (history)

Можно просмотреть историю введенных в консольный терминал команд:

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.

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону