Skip to main content

Терминал: знакомство и базовые команды

·6 mins

Познакомимся с эмулятором терминала и базовыми действиями в нем.

Терминал #

В операционных системах на базе ядра linux, в случае с серверными версиями, существует только 1 способ управления, который дошел до нас из 70-х годов — терминал, а точнее его эмулятор, так как сами терминалы, которые использовались для многопользовательского доступа к мейнфрейму давно остались в прошлом.

У терминала есть три способо взаимодействия с пользователем (также это называют стандартным I/O терминала или же стандартными потоками):

  • STDIN — поток чтения, из которого терминал читает программный и пользовательский ввод (сюда мы передаем наши команды);
  • STDOUT — поток вывода, в который производится вывод результатов выполнения чего-либо, вывод сообщений, которые не попадают в категорию ошибок и тд;
  • STDERR — поток вывода сообщений об ошибках.

Запоминать это не нужно, это дано для понимания, как операционная система взаимодействует с нами, а мы с ней.

Над терминалом будет работать одна из трех популярных shell-утилит, через которую мы и будем работать с терминалом:

  • bash — самый старый представитель, присутствует в стандартных поставках;
  • zsh — твикнутый bash, который во многом удобнее, но он не идет в стандартной поставке;
  • fish — навороченный shell, который из-за этого становится достаточно тормозным.

Управление операционной системой происходит при помощи передачи аргументов в STDIN терминала. Базовые операции с операционной системой разберем ниже.

Общаемся с операционной системой через терминал #

Первое, что стоит знать о терминале, что мы может передавать вывод одной команды на вход другой (замечательны механизм трех стандартных стримов). Это происходит при помощи пайпа |.

# результат поиска передается в фильтр
# фильтр отобразит файлы, включающие docx 

find ~/Documents doc  | grep -i docx

Можно строить большие цепочки вызовов утилит, передавая вывод одной на вход другой, иногда без этого нельзя обойтись.

Второе, что нужно знать, что выход из практически любой утилиты, которая перехватывает управление, происходит по кнопке q, а прерывание исполнения какой-либо утилиты происходит по комбинации кнопок CTRL + c.

0. Чтение документации #

Чтобы прочитать справку или документацию по любой команде и её аргументам есть утилита man:

man <утилита_по_которой_нужна_справка>

Если забылся какой-то ключ аргумента или просто непонятно, как использовать ту или иную команду — You’re welcome, как говорят в нашем посёлке.

1. Навигация и работа с файлами #

Файловая система в *NIX-подобных операционных системах не похода на привычную в Windows. У такой файловой системы есть корень, от которой она начинает ветвиться. Вот пример:

└── /
    ├── bin
    ├── boot
    ├── dev
    ├── etc
    ├── home
    └── ...

Пример выведен при помощи утилиты tree

Для навигации по директориям (здесь нет привычных “папок” из windows), копирования или перемещения файлов, просмотра текущей директории и тд используют следующие утилиты:

CD #

cd (change directory) — перейти в другую директорию. Это самая часто используемая утилита, вот как её можно использовать:

# перейти в папку по пути
cd /home/user/Documents

# тоже самое, только короче
cd ~/Documents

# вернуться на уровень выше
cd ../

# можно и так
cd ..

# вернуться на несколько уровней выше
cd ../../../

# вернуться сразу в домашнюю папку
cd 

CP, MV и RM #

cp (copy files) — копирует указанный файл или директорию в указанную директорию.

cp /home/<user>/Documents/study/file_1 /home/<user>/Documents

mv (move files) — перемещает или переименовывает файл/директорию.

# переместить файл
mv /home/<user>/Documents/study/file_1 /home/<user>/Documents

# переименовать файл
mv /home/<user>/Documents/study/file_1 /home/<user>/Documents/study/new_file_1

rm (remove files) — удаляет файл или директорию.

# удалить файл
rm /home/<user>/Documents/study/file_1

# удалить папку
rm -rf /home/<user>/Documents/study

LS #

ls (list directory contents) — отображает список файлов и директорий в текущей директории или по заданному пути.

# простое отображение из текущей директории
ls 

# вывод:
# ➜ dir_1  dir_2  file_1  file_2

# вывод списком из текущей директории
ls -l 

# вывод:
# total 0
# drwxr-xr-x 1 <user> <group> 0 Dec 20 08:59 dir_1
# drwxr-xr-x 1 <user> <group> 0 Dec 20 08:59 dir_2
# -rw-r--r-- 1 <user> <group> 0 Dec 20 08:59 file_1
# -rw-r--r-- 1 <user> <group> 0 Dec 20 08:59 file_2

# человекочитаемый вывод списком из текущей директории
# а также отображение скрытых файлов
ls -lah

# вывод:
# total 0
# drwxr-xr-x  1 <user> <group>   68 Dec 20 08:59 .
# drwxr-xr-x. 1 <user> <group> 1.2K Dec 20 08:59 ..
# drwxr-xr-x  1 <user> <group>    0 Dec 20 08:59 dir_1
# drwxr-xr-x  1 <user> <group>    0 Dec 20 08:59 dir_2
# -rw-r--r--  1 <user> <group>    0 Dec 20 08:59 file_1
# -rw-r--r--  1 <user> <group>    0 Dec 20 08:59 file_2
# -rw-r--r--  1 <user> <group>    0 Dec 20 08:59 .sicret_file

# тоже самое, только по заданному пути
ls -lah ~/Documents

PWD #

pwd (print name of current/working directory) — отображает текущую директорию

pwd

# /home/<user>/Documents/study

Работа с текстовыми файлами #

Как правило в стандартной поставке есть множество утилит для работы с текстовыми файлами в том или ином виде. Далее мы разберем, как вывести текст файла, как открыть его для редактирования и тд.

CAT, HEAD, TAIL #

cat, head и tail выполняют по сути одну и туже функцию, но немного по-разному. Все три утилиты выводят текст в STDOUT:

  • cat — выведет всё содержимое файла;
  • head — выведет первые 10 строк содердимого файла;
  • tail — выведет последние 10 строк содержимого файла.

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

CAT, HEAD and TAIL

У этих команд куча ключей, такие, как количество выводимых строй head и tail (ключ -n) и другие. Все это стоит прочитать в man этих утилит.

LESS #

less — это так называемый пейджер, который, как и cat-head-tail- выводит содержимое файла, но в интерактивном режиме и порциями (от того такие утилиты и называют пейджерами).

В less реализовано vim-подобное управление, доступен поиск по тексту (команда /).

Текстовые редакторы #

В стандартной поставке 100% будет Vi или его обновленный собрат VIM, а также, скорее всего, nano.

Если не хочется заучивать сложные hot-keys в VIM, лучше использовать nano, он гораздо понятнее и проще, и хорошо подойдет вам, если просто нужно поправить какой-то конфигурационный файл.

В случае с VIM главное что нужно знать, это как из него выйти. Никакой магии, просто :q.

Для VIM в man есть огромная справка, а также в самом VIM есть отличный гайд по управлению этим крутым инстурментом.

Стоит отметить, что знать VIM все же стоит, потому что во многих инструментах используется vim-подобное управление.

Процессы #

PS #

ps (current processes) — отображает снимок запущенных процессов на момент вызова утилиты. Это бывает полезно, когда надо быстро глянуть, что сейчас работает на сервере.

Эта утилита может помочь узнать PID процесса, например, чтобы его прибить.

TOP и HTOP #

Две утилиты, которые отображают запущенные процессы и информацию о них.

Эти утилиты также позволяют прибить процесс, выбрав из списка сигнал, который будет оправлен для завершения работы.

KILL #

kill, как понятно из названия, прибивает процесс по его PID. С этой утилитой нужно быть осторожным и не грохнуть какой-нибудь процесс, связанный с ssh, например, или с какой-нибудь системной утилитой.

Поиск по файлам и фильтр вывода #

FIND #

find — очень мощная утилита, которая производит рекурсивный поиск по всем саб-директориям.

Использовать её очень просто:

find ~/Documents -type f -iname report.pdf

Также можно искать файл по содержимому (тут используется фильтр grep, о нем ниже):

find . -type f -exec grep -l "pattern" {} \;

Или по его размеру:

find /path/to/search -type f -size +1M

GREP #

grep поход на find, только он выполняет фильтрацию вывода по заданному правилу. При помощи grep мы можем найти файл, в котором содержится какая-то строка текста (это работает для plain text файлов), отфильтровать вывод другой утилиты и тд.

ls -lah | grep -i file_2

-rw-r--r--  1 <user> <group>    0 Dec 20 08:59 file_2

Благодарности серому волшебнику #

Если текст был полезен и ты не можешь усмирить желание быть благодарным, то можешь купить мне чашечку кофе:

Воспользоваться моей реферальной ссылкой на DigitalOcean:

Или же закинуть монету в мой кошелёк (USDT и TRX кошельки одинаковые, да, это не ошибка):

Tether (TRC-20, USDT):

TYvFYUV3h5HwqfyTxskGQK7nDbUHTcwPn2

Tron (TRX):

TYvFYUV3h5HwqfyTxskGQK7nDbUHTcwPn2

Monero (XMR):

4AbxbT9vrNQTUDCQEPwVLYZq2zTEYzNr9ZzTLaq9YcwVfdxwkWjZ6FsewuXVDXPk7x2rE6FZACmLePPgJEcY4rm1GSHkwTZ
Owls' Catcher
Author
Owls’ Catcher
Engineer at RIARa, dev. at “ARMStrong”