January 8

Справочник по терминалу. Терминал Linux

Linux — это работа в терминале. Процессу обучения этому навыку может помочь данная серия статей.

Введение

Содержание статей:

  1. Горячие клавиши и переменные окружения.
  2. Группы команд: справочная информация, пакетный менеджер, файловая система.
  3. Группы команд: архивы, пользователи, текст.
  4. Группы команд: информация о системе, сеть, прочее.
  5. Операторы, запуск скриптов, а также описание скриптов нашей команды.

⠀Вся информация применима к Ubuntu 20.04. Она может быть неприменима частично к другим версиям и неприменима совершенно к другим дистрибутивам.

В статьях с командами описываются наиболее используемые команды. Описание команд упрощено, где это возможно, поскольку статьи рассчитаны в первую очередь на новичков. За подробным описанием и кучей технических терминов обращаться в поисковик.

Горячие клавиши

⠀Горячие клавиши в Linux — это, как и везде, очень удобная вещь, экономящая время, силы и нервы. Желательно попробовать воспользоваться на практике всеми ими несколько десятков раз для первичного запоминания, а затем внедрять в свою жизнь наиболее полезные, попутно запоминая их надолго.

Команды

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

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

 — перейти влево на один символ.

Ctrl + ← — перейти влево на одно слово.

 — перейти вправо на один символ.

Ctrl + → — перейти вправо на одно слово.

Home / Ctrl+A — перейти к началу строки.

End / Ctrl+E  — перейти к концу строки.

Ctrl+XX — перемещение между началом строки и текущим положением курсора. Одно нажатие сочетания — в начало строки, второе — обратно.

Процессы и экран

Ctrl+L — очистить экран, аналог команды clean.

Ctrl+C — прервать (убить) текущий процесс, запущенный в терминале на переднем плане.

Ctrl+Z — приостановить текущий процесс, отправив его в фоновый режим (для возобновления его работы служит команда fg).

Ctrl+S — остановить вывод на экран (например вывод лога).

Ctrl+Q — возобновить вывод на экран.

Прочее

Tab — автоматически дописать название вводимого файла, директории, команды или переменной.

chmod +x scri → chmod +x script.sh
cd dire → cd directory
tou → touch
echo $vari → echo $variable

Ctrl+R — поиск команды в истории выполнения.

Enter / Ctrl+O — выполнить найденную команду.

Ctrl+C / Ctrl+G — выйти из режима поиска без выполнения команды.

Переменные окружения

⠀Переменные окружения, переменные среды или просто переменные — это объекты, имеющие значение, т.е. содержащие в себе какую-то информацию, и использующиеся программами в процессе выполнения каких-либо действий.

Виды

Локальные

⠀Определены только для текущей сессии — после её завершения такие переменные перестанут существовать. Создаются и удаляются при помощи команд.

Пользовательские

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

  • .bash_profile
  • .bash_login (используется, если не существует .bash_profile)
  • .profile (используется, если не существует .bash_login)
  • .bashrc

⠀Для вступления в силу изменений, внесённых в данные файлы, необходимо выполнить команду

. путь_к_файлу
# Или
source путь_к_файлу
# Например
. $HOME/.bash_profile

Системные

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

  • /etc/environment
  • /etc/profile
  • /etc/profile.d/
  • /etc/bash.bashrc

Alias

⠀Alias — это ещё одно представление какой-либо команды. В роли команды может выступать любая команда или группа команд, в том числе вместе с опциями и аргументами.

⠀Alias не является переменной окружения, однако в связи со схожим принципом работы находится в данном разделе.

Создание

Локальные

  • Переменная
variable="value"
# Или
export variable="value"
  • Alias
alias update="sudo apt update && sudo apt upgrade"

Пользовательские

сделать вручную:

  • Переменная
export variable="value" >> $HOME/.bash_profile
. $HOME/.bash_profile
  • Alias
alias update="sudo apt update && sudo apt upgrade" >> $HOME/.bash_profile
. $HOME/.bash_profile

Использование

Переменная

⠀Чаще всего переменные используются в качестве текста в различных командах. Для использования переменной необходимо поставить знак $, а затем название переменной. Зачастую название заключается в фигурные скобки для того, чтобы переменная не сливалась с последующим текстом

variable="value"
echo "$variable"
value
umee_wallet_name="umee"
umeed keys show "$umee_wallet_name"
# Аналогично
umeed keys show "umee"
dir="dir1/dir2/"
cd "$HOME/${dir}my_dir"

Alias

⠀Alias используется в терминале или скрипте как обычная команда

update

Удаление

Локальные

  • Переменная
unset variable variable2 variable3
  • Alias
# Определённые
unalias update alias2 alias3
# Все
unalias -a

Зарезервированные системой

⠀Помимо задаваемых пользователем переменных существуют зарезервированные системой.

⠀Наиболее полезные из них:

  • HOME — домашняя директория текущего пользователя (перезаписывать не рекомендуется).
echo "$HOME"
# Возможные варианты
/root
/home/user
/home/user2
  • PATH — список директорий, разделенных двоеточиями, в которых командная оболочка ищет команды (например mkdir, wget и т. д.).
echo "$PATH"
# Возможные варианты
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
/root/.local/share/solana/install/active_release/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
  • HOSTNAME — название текущего хоста.
echo "$HOSTNAME"
# Возможные варианты
vmi666999.contaboserver.net
n8531eb
Ubuntu-2004-focal-64-minimal
  • PWD — путь к текущей рабочей директории.
echo "$PWD"
# Возможные варианты
/root
/root/dir1
/etc
  • RANDOM — случайное целое число в диапазоне от 0 до 32767.
echo "$RANDOM"
# Возможные варианты
12463
45
32466
  • EUID — числовой идентификатор текущего пользователя.
echo "$EUID"
# Возможные варианты
0
100
40
  • GROUPS — список идентификаторов групп, к которым принадлежит текущий пользователь.
echo "$GROUPS"
# Возможные варианты
0
100



Часть 2. Терминал Linux

⠀В данной статье рассматриваются следующие группы команд: справочная информация, пакетный менеджер, файловая система.

Справочная информация

⠀Самые лучшие способы узнать подробнее о команде:

  1. Воспользоваться поисковиком (желательно Google на английском языке);
  2. Воспользоваться командами из данного раздела.

--help / -h

⠀В подавляющем большинстве команд, при добавлении данной опции в конец, выводит страницу помощи, на которой может быть:

  • Описание команды;
  • Подкоманды и их описание;
  • Опции и их описание;
  • Примеры использования;
  • Прочая полезная информация.

⠀В некоторых случаях опция -h имеет аналогичный функционал.

Синтаксис

команда --help
команда -h

Примеры

du --help
wget -h

man

⠀Отображает справочную страницу команды, если таковая была предусмотрена. Для выхода используется клавиша q.

Синтаксис

man команда

Полезные опции:

  • -f — выводит краткое описание команды.

Примеры

man man
man echo
man wget

man -f wget
wget (1)             - The non-interactive network downloader.
man -f printf
printf (1)           - format and print data
printf (3)           - formatted output conversion

help

⠀Редко встречающийся аналог опции --help / -h применимый в основном к командам, где эти опции не работают.

Синтаксис

help команда

Примеры

help echo
help printf

Пакетный менеджер

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

Пакет — это какое-либо программное обеспечение, готовое к установке на компьютер с Linux. Он содержит собранную программу, информацию о том, какие требуется совершить действия для её установки, информацию о зависимостях, а также другие данные.

Репозиторий — это хранилище пакетов, принадлежащих одному дистрибутиву (например, Ubuntu), одной его версии (например, 20.04), находящееся в открытом доступе и готовое к использованию.

Синтаксис

sudo apt команда пакеты опции

⠀Также существует более старая утилита apt-get, которая менее удобная для конечного пользователя. apt включает в себя все основные функции apt-get, поэтому последняя понадобится в редких случаях, если вообще понадобится.

Полезные глобальные опции:

  • -y — отвечать утвердительно на все возникающие вопросы;
  • -q — выводить минимум информации при выполнении действий.

update

Обновляет информацию о пакетах (например версию), проходясь по спискам репозиториев, хранящимся в:

  • Текстовом файле /etc/apt/sources.list;
  • В текстовых файлах директории /etc/apt/sources.list.d/.

Примеры

sudo apt update

upgrade

⠀Обновляет пакеты до последней версии, полученной при выполнении команды sudo apt update.

Примеры

sudo apt upgrade

install

⠀Устанавливает пакеты.

Примеры

sudo apt install curl -y
sudo apt install curl jq bc -y
# Определённая версия
sudo apt install jq=1.6-1 -y

remove

⠀Удаляет пакеты.

Примеры

sudo apt remove curl -y
sudo apt remove curl jq bc -y

purge

⠀Удаляет пакеты вместе с настройками или настройки удалённых пакетов.

Примеры

sudo apt purge curl -y
sudo apt purge curl jq bc -y

autoremove

⠀Удаляет неиспользуемые зависимости (дополнительные пакеты для устанавливаемого пакета)

Примеры

sudo apt autoremove

Файловая система

⠀Существует несколько видов путей к файлу или директории, используемых в командах:

  • Абсолютный — это путь от корня, описывающий весь путь к файлу или папке.
/root/text.txt
/etc/systemd/system/
/home/user/Downloads/file
  • Относительный — это путь относительно директории, из которой выполняется команда.
# Находясь в /root/
text.txt
./text.txt
# Находясь в /home/user/
Downloads/file
./Downloads/file
  • Относительно домашней папки текущего пользователя.
~/text.txt
$HOME/Downloads/file
  • Исходя из шаблона.
text*

# Подходящие под шаблон файлы
text
text.txt
text.html
/root/f*.json

# Подходящие под шаблон файлы
/root/f.json
/root/f1.json
/root/file.json
$HOME/Downloads/*

# Попадающие под шаблон файлы
$HOME/Downloads/file1
$HOME/Downloads/text.txt
$HOME/Downloads/archive.tar.gz

pwd

⠀Выводит путь к текущей рабочей директории.

Примеры

pwd

cd

⠀Изменяет текущую рабочую директорию.

Синтаксис

cd путь_к_директории

Примеры

# Домашняя директория
cd
# Конкретная директория
cd $HOME/dir
cd /etc/systemd/system/
# Директория уровнем выше
cd ..
# Директория, находящаяся в директории уровнем выше
cd ../dir
# Директория, находящаяся в директории 2 уровнями выше
cd ../../dir

ls

⠀Выводит список файлов и папок в указанной директории.

Синтаксис

ls опции путь_к_директории

Полезные опции:

  • -a — вывести скрытые файлы;
  • -l — вывести подробную информацию о файлах.

Примеры

ls
ls dir1
ls $HOME
ls -a $HOME
ls -al

du

⠀Отображает размер файлов и директорий.

Синтаксис

du опции путь_к_директории

Полезные опции:

  • -h — вывести размер в привычных человеку единицах измерения (КБ, МБ, ГБ);
  • -a — вывести размер как для папок, так и для файлов;
  • -d — максимальная глубина отображения файлов в директориях. Например:
    • 0 — размер указанной директории;
    • 1 — размер указанной директории и всех файлов и папок внутри неё.

Примеры

# Указанная папка
du -had 0 `pwd` 2>/dev/null
du -had 0 $HOME/dir 2>/dev/null
# Все файлы и папки в директории в порядке возрастания размера
du -had 1 `pwd` 2>/dev/null | sort -h

find

⠀Ищет файлы и директории на основе условий.

Синтаксис

find путь_к_директории опции 

Полезные опции:

  • -name — поиск по имени с учётом регистра;
  • -iname — поиск по имени без учёта регистра;
  • -type — тип искомого объекта:
    • f — файл;
    • d — директория;
    • l — ссылка.
  • -size — поиск по размеру объекта;
  • -maxdepth — максимальная глубина поиска;
  • -depth — начать поиск из самой глубокой директории;
  • -user — поиск по владельцу;
  • -group — поиск по группе.

⠀Можно использовать логические операторы:

  • -a — И;
  • -o — ИЛИ;
  • ! — НЕ.

Примеры

find . -name "file"
# Подходящие варианты
file
find $HOME -name "file*"
# Подходящие варианты
file
file.txt
file32434324324.txt
find $HOME -iname "file*"
find $HOME -iname "FiLe*"
# Подходящие варианты
file
FILE.txt
FiLe32434324324.txt
find / -size 20M
# Подходящие варианты
Файлы размером ровно 20 Мб
find $HOME -size +20M
# Подходящие варианты
Файлы размером 20+ Мб
find $HOME -size +20M -size -30M
# Подходящие варианты
Файлы размером 20-30 Мб
find $HOME -iname "file*" -a -iname "*.txt"
# Подходящие варианты
File.txt
filE_1.txt
fiLe32434324324.txt
find $HOME -iname "scr*" -o -iname "*.sh"
# Подходящие варианты
scr
script
script.sh
install.sh
Launcher.sh
find $HOME ! -iname "*.txt"
# Подходящие варианты
Все файлы не имеющие расширение .txt

mkdir

⠀Создаёт директорию. В одной команде можно создать несколько папок. При существовании создаваемой директории или отсутствии какой-то в пути выдаёт ошибку.

Синтаксис

mkdir опции путь_к_директори_1 путь_к_директори_2 ...

Полезные опции:

  • -p — создать все указанные в пути папки и не выдавать ошибку при существовании какой-либо из них.

Примеры

mkdir dir1
mkdir $HOME/dir1 dir2 ~/dir3
mkdir -p $HOME/dir1/dir2/dir3
mkdir -p $HOME/dir1/dir2 $HOME/dir3/dir4/dir5

touch

⠀В основном используется для создания пустых файлов.

Синтаксис

touch путь_к_файлу

Примеры

touch text.txt
touch $HOME/.bash_profile

wget

⠀Скачивает файлы, веб-страниц и другие ресурсы из интернета. Обычно установлена по умолчанию. По умолчанию скачивает файл с названием, заданным на конечном сервере.

Может требоваться установка

sudo apt install wget -y

Синтаксис

wget опции URL

Полезные опции:

  • -q — не выводить информацию о процессе скачивания;
  • -O — файл, в который будут сохранены полученные данные (указать -O- для вывода на экран);
  • -t — количество попыток подключения к URL (по умолчанию бесконечно);
  • -T — время ожидания подключения к URL;
  • --post-data — JSON словарь с данными для POST запроса;
  • -b — загрузить файл в фоновом режиме.

Примеры

wget https://raw.githubusercontent.com/SecorD0/utils/main/logo.sh
wget -qO l.sh  https://raw.githubusercontent.com/SecorD0/utils/main/logo.sh

curl

⠀Аналог wget с бо́льшим функционалом. По умолчанию выводит содержимое страницы на экран.

Требуется установка

sudo apt install curl -y

Синтаксис

curl опции URL

Полезные опции:

  • -s — не выводить информацию о процессе скачивания;
  • -o — файл, в который будут сохранены полученные данные;
  • -O — сохранить данные в файл с именем страницы или файла на конечном сервере;
  • -d — данные для POST запроса;
  • -f — не выводить сообщения об ошибках;
  • -H — заголовки для передачи на сервер;
  • -x — использовать прокси.

Примеры

curl https://raw.githubusercontent.com/SecorD0/utils/main/logo.sh
curl -O https://raw.githubusercontent.com/SecorD0/utils/main/logo.sh
curl -so l.sh https://raw.githubusercontent.com/SecorD0/utils/main/logo.sh

cat

⠀Выводит содержимое файла в терминал. При несуществующем файле выдаёт ошибку.

Синтаксис

cat путь_к_файлу

Примеры

cat text.txt
cat $HOME/.bash_profile

tail

⠀Выводит содержимое файла начиная с конца (по умолчанию последние 10 строк).

Синтаксис

tail опции файл

Полезные опции:

  • -n — вывести последнее указанное число строк;
  • -f — обновлять информацию по мере появления новых строк в файле.

Примеры

tail $HOME/dir/log.txt
tail -fn 100 $HOME/solana/solana.log

chmod

⠀Изменяет права доступа для файлов и директорий.

Синтаксис

chmod разрешения путь_1 путь_2 ...

⠀Права можно записать трёхзначным числом.

chmod 000 путь_1 путь_2 ...

⠀Где:

  • Первая цифра — права для владельца файла или директории;
  • Вторая — права для группы владельца;
  • Третья — права для всех остальных.

⠀Разрешения:

  • 0 — разрешения отсутствуют;
  • 1 — выполнение;
  • 2 — изменение;
  • 3 — выполнение и изменение;
  • 4 — чтение;
  • 5 — выполнение и чтение;
  • 6 — изменение и чтение;
  • 7 — выполнение, изменение и чтение.

Примеры

chmod 700 $HOME/file1 $HOME/file2
chmod 110 script.sh
chmod 664 $HOME/text.txt

⠀Также права можно записать символами.

chmod aaa путь_1 путь_2 ...

⠀Символьная часть состоит из трёх групп:

  • Категория пользователей:
    • u — владелец файла;
    • g — группа владельца файла;
    • o — все остальные;
    • a — абсолютно все (по умолчанию, если не указать какую-либо другую).
  • Действие:
    • + — добавить к текущим правам доступа указанные разрешения;
    • - — удалить из текущих прав доступа указанные разрешения;
    • = — установить полностью новые разрешения.
  • Права:
    • x — выполнение;
    • w — изменение;
    • r — чтение.

Примеры

# Владелец может выполнять, изменять и читать
chmod u=xwr $HOME/file
# Владелец и группа могут выполнять
chmod ug=x $HOME/script.sh
# Владелец и группа, вдобавок к имеющимся правам, могут выполнять,
# остальные больше не могут читать
chmod ug+x,o-r text.txt
# Любой, вдобавок к имеющимся правам, может выполнять
chmod +x script.sh
chmod a+x script.sh

chown

⠀Изменяет владельца и/или группу указанных файлов и директорий.

Синтаксис

chown опции пользователь:группа путь

Полезные опции:

  • -R — изменить владельца для всех подкаталогов.

Примеры

chown bob $HOME/dir/text.txt
chown bob:family $HOME/dir/text.txt
chown -R bob $HOME/dir

ln

⠀Создаёт ссылку (указатель) на файл или директорию (далее объект), схожую с ярлыком в Windows.

Синтаксис

ln опции путь_к_объекту путь_к_ярлыку

⠀Ссылка может быть символической (мягкой):

  • Указывает на объект;
  • Содержит в себе только путь к объекту;
  • Удаление, переименование, перемещение объекта не обновляет автоматически ссылку;
  • Может указывать на несуществующий объект;
  • Имеет собственные права доступа, которые не распространяются на объект;
  • Изменение прав доступа у объекта не обновляет права доступа у ссылки.

Примеры

ln -s $HOME/my_service.service /etc/systemd/system/
ln -s text.txt link_to_text
ln -s $HOME/programs/site/ $HOME/my_site

⠀Также ссылка может быть жёсткой:

  • Указывает на файл и является своего рода ещё одним его именем;
  • Не может указывать на директорию;
  • Содержит в себе ту же информацию, что и файл;
  • Не может указывать на несуществующий файл;
  • Имеет те же права доступа, что и файл.

Примеры

ln text.txt link_to_text

which

⠀Осуществляет поиск исполняемого файла указанной команды в пути оболочки (переменная $PATH) и отображает его при нахождении.

Синтаксис

which команда

Примеры

which wget
/usr/bin/wget
which solana
/root/.local/share/solana/install/active_release/bin/solana

cp

⠀Копирует файлы и директории. Можно скопировать несколько файлов и/или директорий в одну конечную. Перезаписывает существующий объект.

Синтаксис

cp опции путь_к_объекту_1 путь_к_объекту_2 ... путь_куда

Полезные опции:

  • -r — копировать директорию;
  • -b — сделать резервную копию при существовании объекта (резервная копия имеет название имя_файла~).

Примеры

cp text.txt text_1.txt
cp $HOME/text.txt $HOME/dir1/
cp -r $HOME/dir1 $HOME/dir2
cp -r $HOME/text.txt $HOME/dir1 $HOME/text_1.txt $HOME/target

mv

⠀Перемещает файлы и директории. В частности используется для переименования объектов. Можно переместить несколько файлов и/или директорий в одну конечную. Перезаписывает существующий объект.

Синтаксис

mv опции путь_к_объекту_1 путь_к_объекту_2 ... путь_куда

Полезные опции:

  • -b — сделать резервную копию при существовании объекта.

Примеры

mv $HOME/text.txt $HOME/dir1/dir2/text_1.txt
mv $HOME/text.txt $HOME/dir
mv $HOME/text_1.txt $HOME/dir $HOME/text_2.txt $HOME/target
# Переименовать объект
mv text.txt text_1.txt
mv $HOME/dir1 $HOME/dir2

rm

⠀Удаляет файлы (в т. ч. ссылки) и директории. Без опций удаляются только файлы.

Синтаксис

rm опции путь_1 путь_2 ...

Полезные опции:

  • -r — удалить директорию;
  • -f — не выдавать ошибку при несуществующем объекте.

Примеры

rm file
rm file script.sh
rm -rf file script.sh $HOME/dir

Часть 3. Терминал Linux

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


Архивы

tar

⠀Создаёт и распаковывает архивы.

Синтаксис

tar опции -f архив объекты_для_архивации

Полезные опции:

  • -f — применить действия к архиву с указанным названием;
  • -x — распаковать архив;
  • -v — вывести подробную информацию о процессе;
  • -t — показать содержимое архива;
  •  — выполнить действия в указанной директории;
  • -c — создать архив;
  • -z — выполнить сжатие с помощью gzip;
  • -r — присоединить файлы к концу архива.

Примеры

# Создать архив, сжатый с помощью gzip
tar -czvf archive.tar.gz file1 $HOME/file2 file3
# Посмотреть содержимое архива
tar -tf archive.tar.gz
# Распаковать архив
tar -xvf archive.tar.gz

zip / unzip

zip создаёт, unzip распаковывает архивы. Совместима с Windows.

Требуется установка

sudo apt install zip unzip -y

Синтаксис zip

zip опции архив объекты_для_архивации

Полезные опции:

  • -r — сжать все файлы и подпапки.

Примеры

# Создать архив, содержащий файлы
zip archive.zip file1 $HOME/file2 file3
# Содержащий директорию dir
zip -r archive.zip $HOME/dir/
# Содержащий все файлы папки dir
zip -r archive.zip $HOME/dir/*

Синтаксис unzip

unzip опции архив

Полезные опции:

  • -d — распаковать архив в указанную директорию;
  • -l — показать содержимое архива.

Примеры

# Показать содержимое архива
unzip -l archive.zip
# Распаковать архив в текущую директорию
unzip archive.zip
# В папку dir
unzip -d $HOME/dir archive.zip

Пользователи

whoami

⠀Выводит имя текущего пользователя.

Примеры

whoami

useradd

⠀Добавляет пользователя.

Синтаксис

sudo useradd опции имя_пользователя

Полезные опции:

  • -s — командная оболочка (по умолчанию /bin/sh);
  • -d — путь к домашней директории (по умолчанию /home/имя_пользователя);
  • -m — создать домашнюю директорию, указанную в опции -d;
  • -g — имя или идентификатор (GID) основной группы пользователя (по умолчанию users, 100);
  • -G — сделать пользователя участником указанных групп;
  • -u — числовой идентификатор пользователя (UID);
  • -o — разрешить создание пользователя с уже имеющимся UID (используется с опцией -u).

Примеры

# Обычный пользователь
sudo useradd -m -s /bin/bash user
sudo passwd user
# Пользователь, состоящий в группах adm и games
sudo useradd -m -G adm,games -s /bin/bash user
sudo passwd user
# Пользователь с root правами
sudo useradd -m -G sudo -s /bin/bash user
sudo passwd user

passwd

⠀Изменяет пароль пользователя.

Синтаксис

passwd
sudo passwd имя_пользователя

Примеры

# Текущий пользователь
passwd
# Другой пользователь (только из-под root)
sudo passwd user

usermod

⠀Изменяет параметры пользователя.

Синтаксис

sudo usermod опции имя_пользователя

Полезные опции:

  • -s — командная оболочка;
  • -d — путь к домашней директории;
  • -m — переместить содержимое домашней директории в новое место, указанное в опции -d;
  • -g — имя или идентификатор (GID) основной группы пользователя;
  • -a — добавить пользователя в дополнительные группы;
  • -G — добавить (с опцией -a) или изменить дополнительные группы;
  • -u — числовой идентификатор пользователя (UID);
  • -o — разрешить изменение UID пользователя на уже имеющееся (используется с опцией -u).

Примеры

sudo usermod -g adm user
sudo usermod -s /bin/bash -a -G games user
sudo usermod -o -u 0 -g 0 -s /bin/bash user

userdel

⠀Удаляет пользователя.

Синтаксис

sudo userdel опции имя_пользователя

Полезные опции:

  • -r — удалить домашнюю директорию и файлы пользователя;
  • -f — удалить пользователя, даже если он залогинен.

Примеры

sudo userdel user
sudo userdel -rf user

Текст

nano

⠀Текстовый редактор.

Может требоваться установка

sudo apt install nano -y

Синтаксис

nano опции путь_к_файлу

Полезные опции:

  • -m — включить поддержку мыши (в MobaXterm становится проблематично копировать и перестаёт работать вставка на ПКМ);
  • -P — запоминать и восстанавливать позицию курсора во время последнего редактирования;
  • -B — создать резервную копию файла при сохранении (резервная копия имеет название имя_файла~).

⠀Для удобства управления, помимо поддержки мыши, присутствуют горячие клавиши.

Горячие клавиши:

  • Alt+U — отменить изменения;
  • Alt+E — повторить изменения;
  • Ctrl+K — удалить строку, на которой находится курсор;
  • Ctrl+C — показать (снизу по центру редактора) на какой строке и символе находится курсор;
  • Ctrl+W — найти в файле:
    • Ввести текст;
    • Нажать Enter;
    • Alt+W — перейти к следующему совпадению найденного текста;
    • Ctrl+C — прекратить поиск.
  • Ctrl+\ — поиск и замена текста:
    • Ввести текст для поиска;
    • Нажать Enter;
    • Ввести текст, на который заменить найденный;
    • Нажать Enter:
      • Просматривать каждое совпадение и выбирать, делать ли замену — Y (Yes) или N (No);
      • Нажать A для замены всего.
  • Ctrl+S — сохранить изменения;
  • Ctrl+O — сохранить как (необходимо ввести название);
  • Ctrl+X — сохранить как (пропускается, если уже сохранено) и выйти.

Примеры

# Открытие файла без поддержки мыши
nano -P $HOME/text.txt

# Открытие файла с поддержкой мыши
nano -mP $HOME/text.txt
# При сохранении сделать резервную копию файла
nano -mBP $HOME/text.txt

grep

⠀Находит строки на основе фрагмента, шаблона или регулярного выражения.

Синтаксис

grep опции поисковый_запрос путь_к_файлу
grep опции поисковый_запрос <<< "текст"
команда | grep опции поисковый_запрос

Полезные опции:

  • -c — вывести количество найденных строк;
  • -r — искать внутри всех файлов указанной директории;
  • -q — не выводить найденную строку (зачастую используется в скриптах);
  • -B — показать вхождение и указанное количество строк до него;
  • -A — показать вхождение и указанное количество строк после него;
  • -C — показать вхождение и указанное количество строк до и после него;
  • -i — не учитывать регистр.

Пример работы с файлом

grep user $HOME/file.txt
# Подходящие варианты
user
user_1
_user_
Current user
grep -i user $HOME/file.txt
# Подходящие варианты
User
uSEr_1
_uSer_
Current USER
grep "Hello wo" $HOME/file.txt
# Подходящие варианты
Hello wo
Hello world
Hello wod42334

Пример работы с текстом

grep user <<< "Current user"
# Вывод
Current user
text="root
user:user
user_1
bob"
grep user <<< "$text"
# Вывод
user:user
user_1

Пример работы с командой

lscpu | grep "Model name"
# Вывод
Model name:                      AMD Ryzen 9 5950X 16-Core Processor

⠀Прочие примеры

# Вывести вхождение, 10 строк до и 5 после него
grep -B10 -A5 user $HOME/file.txt

# Вывести вхождение, а также 5 строк до и после него
grep -C5 user $HOME/file.txt
# Посчитать количество найденных строк
text="root
user:user
user_1
bob"
grep -c user <<< "$text"
# Вывод
2
# Поиск во всех файлах директории dir
grep -r user $HOME/dir
# Вывод
/root/dir/users: user
/root/dir/text.txt: Current user
# Найти подстроку
grep -oPm1 "(?<=^variable = \")([^%]+)(?=\"$)" <<< 'variable = "value"'
# Вывод
value

jq

⠀Утилита для работы с JSON.

Требуется установка

sudo apt install jq -y

Синтаксис

jq опции поисковый_запрос путь_к_файлу
jq опции поисковый_запрос <<< "текст"
команда | jq опции поисковый_запрос

Полезные опции:

  • -r — не выводить скобки у текстовых значений.

Примеры

json='{"username":"Bob","balance":102034.1,"friends":2,"property":["car","house","farm"]}'
jq <<< "$json"
jq "." <<< "$json"
{
  "username": "Bob",
  "balance": 102034.1,
  "friends": 2,
  "property": [
    "car",
    "house",
    "farm"
  ]
}
jq ".username" <<< "$json"
"Bob"
jq -r ".username" <<< "$json"
Bob
jq ".balance" <<< "$json"
102034.1
jq ".friends, .balance" <<< "$json"
2
102034.1
jq "[.friends, .balance]" <<< "$json"
[
  2,
  102034.1
]
jq ".property" <<< "$json"
[
  "car",
  "house",
  "farm"
]
jq ".property | length" <<< "$json"
3
jq -r ".property[0]" <<< "$json"
car
jq -r ".property[-1]" <<< "$json"
farm
jq ". | keys" <<< "$json"
[
  "balance",
  "friends",
  "property",
  "username"
]
jq ". | to_entries[]" <<< "$json"
{
  "key": "username",
  "value": "Bob"
}
{
  "key": "balance",
  "value": 102034.1
}
{
  "key": "friends",
  "value": 2
}
{
  "key": "property",
  "value": [
    "car",
    "house",
    "farm"
  ]
}

sed

⠀Заменяет, удаляет, вставляет и ищет фрагменты текста. По умолчанию обрабатывает одну команду и выводит результат выполнения на экран.

Синтаксис

sed опции -e "команда_1; команда_2; ..." путь_к_файлу
sed опции -e "команда_1; команда_2; ..." <<< "текст"
команда | sed опции -e "команда_1; команда_2; ..."

Полезные опции:

  • -e — выполнить несколько команд.
  • -i — внести изменения в файл. При указании каких-либо символов после опции создаёт резервную копию с названием файла плюс указанные символы, например, команда с опцией -i~ создаст резервную копию с названием file_name~.

Полезные команды:

  • s%фрагмент_1%фрагмент_2% — заменить первый в строке фрагмент_1 во всех строках, где он встретился, на фрагмент_2;
  • s%фрагмент_1%фрагмент_2%g — заменить все фрагмент_1 в строке во всех строках, где он встретился, на фрагмент_2;
  • 0,/фрагмент/{/фрагмент/d;} — удалить первую строку, в которой найден фрагмент;
  • /фрагмент/d — удалить все строки, в которых найден фрагмент.

Специальные символы:

  • ^ — начало строки;
  • $ — конец строки;
  • . — один любой символ;
  • .* — любое количество любых символов.

Примеры

echo "Hello, world!" | sed "s%Hello%Bye%"
Bye, world!
echo "Hello, world! Bye, world!" | sed "s%world%WORLD%"
Hello, WORLD! Bye, world!
echo "Hello, world! Bye, world!" | sed "s%world%WORLD%g"
Hello, WORLD! Bye, WORLD!
echo 'delay = 10
  variable = "text"
delay = "124124"' > config.toml
sed -e "s%delay%d%; s%variable%v%" config.toml
cat config.toml
d = 10
  v = "text"
d = "124124"

delay = 10
  variable = "text"
delay = "124124"
sed -i -e "s%delay%d%; s%variable%v%" config.toml
cat config.toml
d = 10
  v = "text"
d = "124124"
echo 'delay = 10
  variable = "text"
delay = "124124"' > config.toml
sed -i -e "s%variable *=.*%variable = \"new text\"%" config.toml
cat config.toml
delay = 10
  variable = "new text"
delay = "124124"
sed -i -e "0,/delay/{/delay/d;}" config.toml
cat config.toml
  variable = "text"
delay = "124124"
echo 'delay = 10
  variable = "text"
delay = "124124"' > config.toml
sed -i -e "/delay/d" config.toml
cat config.toml
  variable = "new text"

awk

⠀Построчно разбирает и обрабатывает текст по заданным шаблонам.

Синтаксис

awk опции команды путь_к_файлу
awk опции команды <<< "текст"
команда | awk опции команды

Полезные опции:

  • -F — символ-разделитель для полей (по умолчанию пробел).

Зарезервированные переменные:

  • NF — количество столбцов в тексте;
  • NR — номер текущей строки.

Примеры

table="Name Price Number
Tea 1.5 20
Bread 0.5 44
Cucumber 0.4 17
Potato 0.2 44"
# Названия продуктов
awk '{print $1}' <<< "$table"
Name
Tea
Bread
Cucumber
Potato
# Колисчество продуктов
awk '{print $3}' <<< "$table"
Number
20
44
17
44
# Названия и цены
awk '{print $1 "\t" $2}' <<< "$table"
Name    Price
Tea     1.5
Bread   0.5
Cucumber        0.4
Potato  0.2
# Продукты, количество которых равно 44
awk '$3 == 44 { print $0 }' <<< "$table"
Bread 0.5 44
Potato 0.2 44
# Продукты, количество которых равно 44 и цена больше 0.4
awk '$3 == 44 && $2 > 0.4 {print $0}' <<< "$table"
Bread 0.5 44
# 4-ая строка
awk 'NR == 4 {print $0}' <<< "$table"
Cucumber 0.4 17
# 2-ой столбец с конца
awk '{print $(NF-1)}' <<< "$table"
Price
1.5
0.5
0.4
0.2
# Печать при помощи printf
awk '{ printf "%3d %s\n", NR, $0 }' <<< "$table"
  1 Name Price Number
  2 Tea 1.5 20
  3 Bread 0.5 44
  4 Cucumber 0.4 17
  5 Potato 0.2 44

tr

⠀Заменяет, замещает или удаляет символы.

Синтаксис

tr опции "набор_1" "набор_2" <<< "текст"
команда | tr опции "набор_1" "набор_2"

Полезные опции:

  • -d — удалить из текста знаки из набор_2;
  • -s — заменить последовательность одинаковых символов из набор_1 одним символом, а затем на символ из набор_2, если он указан.

Примеры

echo "Hello, world!" | tr "el" "ab"
Habbo, worbd!
echo -e "Hello,\nworld!" | tr -d "\n"
Hello,world!...~#
echo -e "He\rllo,\nwor\rld!" | tr -d "\r\n"
Hello,world!...~#
# Удаление дублирующихся пробелов
echo "Hello,                world!" | tr -s " "
echo "Hello,                world!" | tr -s "[:space:]"
Hello, world!
echo "Hello,                world!" | tr -s " " "_"
Hello,_world!

sort

⠀Сортирует строки.

Синтаксис

sort опции путь_к_файлу
sort опции <<< "текст"
команда | sort опции

Полезные опции:

  • -n — сортировать числа;
  • -r — сортировать в обратном направлении;
  • -u — пропускать повторяющиеся строки.

⠀Логика сортировки строк (начиная с первого символа):

  • Специальные символы (!, ", # и т. п.) в порядке возрастания ASCII кода;
  • Цифры в порядке возрастания;
  • Буквы в алфавитном порядке:
    • В нижнем регистре;
    • В верхнем регистре.
  • Аналогичная логика для следующего символа.

Примеры

text="market
Basket
FIRE
fire
Yacht
appropriation
basket"
numbers="
9
120
1
0
354235
10"
sort <<< "$text"
appropriation
basket
Basket
fire
FIRE
market
Yacht
sort -r <<< "$text"
Yacht
market
FIRE
fire
Basket
basket
appropriation
sort <<< "$numbers"
0
1
10
120
354235
9
sort -n <<< "$numbers"
0
1
9
10
120
354235
sort <<< "${text}${numbers}"
0
1
10
120
354235
9
appropriation
basket
Basket
fire
FIRE
market
Yacht

wc

⠀Подсчитывает число строк, слов, символов и байтов в указанных файлах.

Синтаксис

wc опции путь_к_файлу_1 путь_к_файлу_2 ...
wc опции <<< "текст"
команда | wc опции

Полезные опции:

  • -l — вывести количество строк (исходя из количества переводов строк \n);
  • -w — вывести количество слов;
  • -m — вывести количество символов (включая новую строку).

Примеры

text="market
Basket
FIRE
fire
Yacht
appropriation
basket
"
wc <<< "$text"
 8  7 52
wc -l <<< "$text"
8
wc -w <<< "$text"
7
wc -m <<< "$text"
52

Часть 4. Терминал Linux

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

bash <(wget -qO- -o /dev/null yabs.sh)

⠀Скрипт отображает основную информацию о системе и проверяет скорость чтения и записи дисков, пропускную способность интернет соединения и производительность системы. По умолчанию тестируется всё.

Синтаксис

bash <(wget -qO- yabs.sh) опции

Полезные опции:

  • -f / -d — пропустить тестирование дисков;
  • -i — пропустить тестирование скорости интернета;
  • -g — пропустить тестирование производительности системы;
  • -4 — при тестировании производительности использовать Geekbench 4, вместо Geekbench 5.

Примеры

# Полное тестирование
bash <(wget -qO- -o /dev/null yabs.sh)
# Протестировать только диски
bash <(wget -qO- -o /dev/null yabs.sh) -ig
# Протестировать только скорость интернета
bash <(wget -qO- -o /dev/null yabs.sh) -dg
# Протестировать только производительность системы
bash <(wget -qO- -o /dev/null yabs.sh) -di

df

⠀Отображает информацию об использовании дискового пространства.

Синтаксис

df опции устройство

Полезные опции:

  • -h — вывести размер в привычных человеку единицах измерения (КБ, МБ, ГБ).

Примеры

df -h

nvme

⠀Позволяет контролировать и управлять NVMe накопителями. Наиболее полезная и часто используемая функция — чтение SMART (состояние накопителя).

Требуется установка

sudo apt install nvme-cli -y

Синтаксис

nvme команда диск 

Полезные команды:

  • list — список NVMe дисков;
  • smart-log — прочитать SMART указанного диска.

Примеры

# Список NVMe дисков
nvme list
# Чтение SMART жирнала 1-ого диска
nvme smart-log /dev/nvme0

free

⠀Отображает информацию об использовании оперативной памяти.

Синтаксис

df опции

Полезные опции:

  • -h — вывести размер в привычных человеку единицах измерения (КБ, МБ, ГБ).

Примеры

free -h

lscpu

⠀Отображает информацию о характеристиках процессора.

Примеры

lscpu

cat /etc/*-release

⠀Отображает информацию об операционной системе.

Примеры

cat /etc/*-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.3 LTS"
NAME="Ubuntu"
VERSION="20.04.3 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.3 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

htop

⠀Отображает информацию о потреблении системных ресурсов и позволяет управлять процессами.

Требуется установка

sudo apt install htop -y

Примеры

htop

⠀В верхней части отображена информация о системе:

  • 1-… — нагрузка на каждый поток процессора:
    • Синий цвет — процессы низкого приоритета;
    • Зелёный — процессы обычных пользователей;
    • Красный — системные процессы;
    • Голубой — процессы виртуализации.
  • Mem — общий и используемый объём оперативной памяти:
    • Зелёный цвет — используемая память;
    • Синий — память, используемая буферами;
    • Жёлтый — память, выделенная под кэш.
  • Swp — размер файла подкачки и используемый объём;
  • Tasks — статистика по процессам;
  • Load average — средние значения нагрузки за последние 1, 5, 15 минут;
  • Uptime — время работы системы с момента запуска.

⠀В нижней части отображена информация о каждом процессе:

  • PID — ID процесса;
  • USER — владелец процесса;
  • PRI — внутренний приоритет ядра;
  • NI — NICE приоритет от 19 (низкий приоритет) до -20 (высокий приоритет);
  • VIRT — потребляемая виртуальную память;
  • RES — потребляемая физическая память;
  • SHR — потребляемая общая память;
  • S — состояние:
    • S — спящий;
    • R — запущенный.
  • CPU% — сумма потреблений каждого потока процессора (максимально 100*количество_потоков);
  • MEM% — потребляемый в текущий момент процент оперативной памяти;
  • TIME+ — время работы процесса с момента запуска;
  • Command — команда, запустившая процесс.

⠀Для удобства управления утилитой и процессами, помимо поддержки мыши, присутствуют горячие клавиши.

Горячие клавиши:

  • Ctrl+C / q / F10 — закрыть htop;
  • H (Shift+h) — скрыть потоки процессов, оставить только сами процессы;
  • /  — перемещение по списку процессов;
  • F9 / k — завершить процесс, на котором находится курсор, или помеченные процессы (необходимо выбрать сигнал выхода, обычно 2 SIGINT);
  • F4 / \ — сортировка процессов (скрыть все, кроме найденных);
  • F3 / / — поиск процессов (подсвечивать по очереди найденные);
  • F6 — выбрать по какому столбцу сортировать;
  • P — сортировка по задействованию процессора;
  • M — сортировка по задействованию оперативной памяти;
  • I — инвертировать сортировку;
  • u — сортировать процессы исходя из выбранного пользователя;
  • Пробел — пометить/снять пометку с процесса;
  • U (Shift+u) — снять все пометки с процессов.

uptime

⠀Отображает:

  • Текущее время;
  • Время работы системы с момента запуска;
  • Количество залогиненных пользователей;
  • Средние значения нагрузки за последние 1, 5, 15 минут.

Примеры

uptime
 00:00:00 up 91 days,  9:24,  1 user,  load average: 0.13, 0.23, 0.36

Сеть

ss

⠀Отображает статистику сетевых подключений.

Синтаксис

ss опции
ss опции | grep шаблон

Полезные опции:

  • -p — вывести информацию о процессах, использующих сокеты (порты);
  • -n — использовать цифровые представления сокетов вместо имён служб (например 22 вместо ssh);
  • -t — TCP сокеты;
  • -u — UPD сокеты;
  • -l — показать только прослушиваемые сокеты.

Примеры

# Открытые порты
ss -tulpn
# Найти среди открытых портов начинающиеся на 3303
ss -tulpn | grep :3303

iptables, iptables-persistent

iptablesуправляет сетевым трафиком. iptables-persistent сохраняет правила (по умолчанию правила сбрасываются при перезагрузке сервера).

Требуется установка

sudo apt install iptables iptables-persistent -y

Синтаксис

iptables команда цепочка условие -j действие

Полезные команды:

  • -L — вывести все правила;
  • -A— добавить правило;
  • -D— удалить правило;
  • -F — очистить все правила.

Цепочки:

  • INPUT — входящие пакеты (когда кто-то обращается к серверу);
  • OUTPUT — исходящие пакеты (когда сервер обращается к кому-то);
  • FORWARD — проходящие пакеты (когда проходят через сервер, но не предназначены ему).

Полезные условия:

  • -p — сетевой протокол (TCP, UDP, ICMP или ALL);
  • -s — адрес отправителя пакетов;
  • -d — адрес источника назначения;
  • --dport — порт назначения;
  • --sport — порт источника.

Полезные действия:

  • ACCEPT — разрешить пакеты;
  • DROP — запретить пакеты.

Примеры

# Все правила
iptables -L
# Открыть один порт
iptables -A INPUT -p tcp --dport 9091 -j ACCEPT
# Открыть диапазон портов
iptables -A INPUT -p tcp --dport 9001:9004 -j ACCEPT# Сохранить все правила
sudo netfilter-persistent save
# Очистить все правила
iptables -F

ufw

⠀Брандмауэр, фильтрующий сетевой трафик.

Синтаксис

sudo ufw команда аргументы

Полезные команды:

  • status — посмотреть состояние и действующие правила;
  • enable — включить брандмауэр и добавить его в автозагрузку;
  • reload — перезапустить брандмауэр;
  • reset — сбросить все настройки до состояния по умолчанию;
  • allow — добавить разрешающее правило;
  • deny — добавить запрещающее правило (отправителю отправляется пакет с уведомлением об ошибке);
  • reject — добавить отбрасывающее правило (входящий пакет отбрасывается, а отправителю ничего не отсылается);
  • delete — удалить правило;
  • disable — отключить брандмауэр и удалить его из автозагрузки.

Примеры

# Проверить состояние
sudo ufw status
# Выключен
Status: inactive

# Включен
Status: active
...
# Включить брандмауэр
sudo ufw enable

⠀Чтобы избежать потерю подключения к серверу, необходимо открыть 22 порт командой ниже.

# Открыть порт для любого протокола
sudo ufw allow 22
sudo ufw allow 9090
# Открыть порт только для TCP протокола
sudo ufw allow 9090/tcp
# Открыть порт только для UPD протокола
sudo ufw allow 9090/upd
# Разрешить исходящий и запретить входящий трафик
sudo ufw allow out 9090/upd
sudo ufw deny in 9090/upd
# Удалить правило
sudo ufw delete allow out 9090/upd
sudo ufw delete deny in 9090/upd
# Перезапустить брандмауэр
sudo ufw reload
# Отключить брандмауэр
sudo ufw disable

speedtest-cli

⠀Проверяет пропускную способность интернет соединения.

Требуется установка

sudo apt install speedtest-cli -y

Синтаксис

speedtest-cli опции

Полезные опции:

  • --simple — отобразить только пинг, скорость скачивания и отдачи.

Примеры

speedtest-cli --simple
Ping: 14.596 ms
Download: 789.05 Mbit/s
Upload: 534.10 Mbit/s

ping

⠀Проверяет доступность удалённого узла (IP или домен) в сети. В частности используется для проверки подключения интернета.

Синтаксис

ping опции адрес_узла

Полезные опции:

  • -6 — использовать только ipv6.

Примеры

ping www.google.com

Прочее

echo

⠀Выводит текст в терминал.

Синтаксис

echo опции текст

Полезные опции:

  • -n — не делать перевод строки в конце текста;
  • -e — обрабатывать символы, экранированные обратной косой чертой (новая строка, табуляция, цвета и т. д.).

Примеры

echo "Hello world!"
Hello world!
echo "Hello\nworld!"
Hello\nworld!
echo -e "Hello\nworld!"
Hello
world!
echo "Hello
world!"
Hello
world!
text="world!
..."
echo "Hello $text"
Hello world!
...

printf

⠀Выводит текст в терминал по аналогии с printf() из языка программирования C. Имеет больший функционал по сравнению с echo. В отличие от echo по умолчанию не делает перевод строки в конце текста.

Синтаксис

printf формат аргументы

Формат может содержать:

  • Обычные символы — просто выводятся как есть;
  • Символы с обратной косой чертой — обрабатываются и выводятся:
    • \\ — символ обратной косой черты;
    • \n — новая строка;
    • \t — горизонтальная табуляция.
  • Преобразования типов — заменяются аргументами и выводятся:
    • %s — строка;
    • %d / %i — десятичное целое число;
    • %f — число с плавающей точкой;
    • %x — восьмеричное число;
    • %o — шестнадцатиричное число;
    • %% — символ %.

Примеры

printf "Hello world!\n"
Hello world!
printf "%s\n" "Hello world!"
Hello world!
printf "%d\n" "666"
666
# Округлить число с плавающей точкой
printf "%.2f\n" 3.1415926535
3.14
printf "%.1f\n" "6.66"
6.7
# Округление до целого числа
printf "%.0f\n" 6.66
7
printf "%s\t%d\t%.2f\n" "Hello world!" "666" 3.1415926535
Hello world!    666     3.14
text="Hello world!"
int="666"
pi=3.1415926535
printf "%s\n%d\n%.2f\n" "$text" "$int" "$pi"
Hello world!
666
3.14

git

⠀Система контроля версий и совместной разработки проектов. В основном используется для работы с GitHub.

Требуется установка

sudo apt install git -y

Синтаксис

git опции команда аргументы

Полезные опции:

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

Полезные команды:

  • clone — скачать указанный репозиторий на сервер;
  • pull — обновить локальный проект на основе внесённых изменений в источнике;
  • branch — управление ветками проекта;
  • checkout — переключиться между ветками;
  • clean — удалить неиспользуемые проектом файлы.

Примеры

# Клонировать репозиторий
git clone https://github.com/SecorD0/utils.git
# Клонировать репозиторий в папку с другим названием
git clone https://github.com/SecorD0/utils.git pack_of_utils
# Для использования команд ниже необходимо перейти в директорию
# с проектом или указывать для каждой путь в опции -C
cd utils
# Посмотреть текущую ветку
git branch
* main
# Посмотреть все ветки
git branch -a
* main
  remotes/origin/HEAD -> origin/main
  remotes/origin/main
# Обновить локальные файлы
git pull# Переключиться на другую ветку
git checkout test
# Удалить неиспользуемые проектом файлы
git clean

tmux

⠀Позволяет запускать несколько сессий на одном сервере. Можно провести аналогию с несколькими окнами в Windows. При отключении от сервера активные процессы в сессиях не прекращают работу.

Понятия:

  • Сессия — ещё один терминал сервера (1 сервер = 1+ сессии);
  • Окно — ещё один «рабочий стол» сессии (1 сессия = 1+ окно);
  • Панель — область для работы в окне (1 окно = 1+ панелей).

Требуется установка

sudo apt install tmux -y

Синтаксис

tmux команда опции аргументы

Полезные команды:

  • new — создать новую сессию;
  • attach — подключиться к существующей сессии;
  • detach — отключиться от текущей сессии;
  • ls — список открытых сессий;
  • rename-session — переименовать сессию;
  • kill-session — завершить сессию;
  • kill-server — завершить все сессии.

Полезные опции:

  • -t — название или часть названия сессии, к которой будет применяться действие;
  • -s — название создаваемой сессии.

⠀Для управления активными окнами существуют горячие клавиши, для их использования необходимо нажать сочетание клавиш Ctrl+B с включённой английской раскладкой, а затем нажать горячую клавишу.

Горячие клавиши:

  • d — отключиться от текущей сессии (аналог команды tmux detach);
  • % — разделить текущую панель по горизонтали;
  • " — разделить текущую панель по вертикали;
  • / / /  — перейти на панель, находящуюся в стороне, куда указывает стрелка;
  • Ctrl+стрелка — изменить размер текущей панели;
  • o — перейти на следующую панель;
  • ; — переключаться между текущей и предыдущей панелью;
  • x — закрыть текущую панель;
  • c — открыть новое окно;
  • w — выбрать окно из списка;
  • 0-9 — открыть окно по его номеру;
  • , — переименовать текущее окно.

Примеры

# Создать сессию
tmux new -s session
# Отключиться командой от текущей сессии
tmux detach
# Список сессий
tmux ls
# Переименовать сессию
tmux rename-session -t session session1
# Подключиться к сессии
tmux attach -t sess
tmux attach -t session1
# Закрыть активную панель (закрывает окно и сессию, если панель одна) 
exit
# Завершить последнюю сессию
tmux kill-session
# Завершить определённую сессию
tmux kill-session -t session1
# Завершить все сессии
tmux kill-server

date

⠀Позволяет работать с датой и временем. По умолчанию используется часовой пояс, установленный на сервере.

Синтаксис

date опции +формат

Полезные опции:

  • -d — вывод даты и времени исходя из указанных условий;
  • -u — вывод даты и времени в UTC формате.

Полезные форматы:

  • %H — часы (00…23);
  • %M — минуты (00…59);
  • %S — секунды (00…59);
  • %a — день недели словом в короткой форме (Mon);
  • %A — день недели словом в длинной форме (Monday);
  • %b — месяц словом в короткой форме (Jan);
  • %B — месяц словом в длинной форме (January);
  • %d — день месяца (01…31);
  • %m — месяц числом (01…12);
  • %y — две последних цифры года (22);
  • %Y — полный год (2022);
  • %j — день года (001...366);
  • %q — квартал года (1…4);
  • %Z — аббревиатура временной зоны (UTC, CET, MSK);
  • %n — новая строка;
  • %t — знак табуляции;
  • %D — дата в формате %m/%d/%y;
  • %T — время в формате %H:%M:%S.

Примеры

date
Sat 01 Jan 2022 12:00:00 AM CET
date -u
Fri 31 Dec 2021 11:00:00 PM UTC
# UNIX Timestamp to DATE
date -d "@1640991600"
Sat 01 Jan 2022 12:00:00 AM CET
date +"%H:%M:%S %d.%m.%y"
00:00:00 01.01.22
date -d "@1640991665" +"%H:%M:%S %d.%m.%y"
00:01:05 01.01.22
date -d "2 days" +"%H:%M:%S %d.%m.%y"
00:00:00 03.01.22
# Изменить часовой пояс
TZ="Europe/Moscow" date -d "@1640991665" +"%H:%M:%S %d.%m.%y"
02:01:05 01.01.22

Часть 5. Терминал Linux

В данной статье рассматриваются операторы, запуск скриптов, а также скрипты нашей команды.

Операторы

;

⠀Выполняет последовательно несколько команд. Если текущая команда выполнится неуспешно, то следующая всё равно выполнится.

Синтаксис

команда_1; команда_2; команда_3; ...

Примеры

sudo apt-get update; sudo apt-get upgrade

&&

⠀Выполняет последовательно несколько команд. Если текущая команда выполнится неуспешно, то следующая не выполнится.

Синтаксис

команда_1 && команда_2 && команда_3 && ...

Примеры

sudo apt-get update && sudo apt-get upgrade

||

⠀Выполняет следующую команду, если предыдущая выполнилась неуспешно.

Синтаксис

команда_1 || команда_2 || команда_2 || ...

Примеры

ls -a /there_is_no_dir || echo "error"

&

⠀Запускает выполнение команды в фоновом режиме.

Синтаксис

команда_1 & команда_2 & команда_3 & ...

Примеры

sudo apt-get update & sudo apt-get upgrade &

\

⠀Выполняет две функции:

  • Отменяет специальное назначение (экранирует) символов, таких как $, \, &, *, [, ], ^, .;
  • «Склеивает» несколько строк команды в одну.

Синтаксис

команда_1; \
команда_2; \
команда_3
...

Примеры

echo "Hello,"\
" world!"
Hello, world!
sudo apt-get update; \
sudo apt-get upgrade

|

⠀Перенаправляет данные из одной команды в другую.

Синтаксис

команда_1 | команда_2 | команда_3 | ...

Примеры

echo '!{"json": ["one", "two"]}' | tr -d '!' | jq -r "." | grep json
  "json": [

>

⠀Перенаправляет вывод команды в файл. Перезаписывает файл при существовании. Для скрытия вывода команды можно использовать конструкцию > /dev/null.

Синтаксис

команда > файл

Примеры

echo "Hello, world!" > /dev/null
echo "Hello, world!" > hi.txt
cat hi.txt
Hello, world!

| tee

⠀Оставляет вывод команды на экран, при этом записывает его в файл. Перезаписывает файл при существовании.

Синтаксис

команда | tee файл

Примеры

echo "Hello, world!" | tee hi.txt
cat hi.txt
Hello, world!

Hello, world!

>>

⠀Перенаправляет вывод команды в файл. При существовании файла дописывает в конец.

Синтаксис

команда >> файл

Примеры

cat hi.txt
echo "Hi" >> hi.txt
cat hi.txt
Hello, world!

Hello, world!
Hi

| tee -a

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

Синтаксис

команда | tee -a файл

Примеры

cat hi.txt
echo "hello" | tee -a hi.txt
cat hi.txt
Hello, world!
Hi

hello

Hello, world!
Hi
hello

2>, 2>>

⠀Перенаправляет вывод ошибок команды в файл:

  • 2> перезаписывает файл при существовании. Для скрытия ошибок можно использовать конструкцию 2> /dev/null.
  • 2>> при существовании файла дописывает в конец.

Синтаксис

команда 2> файл
команда 2>> файл

Примеры

ls -a /there_is_no_dir 2> /dev/null
ls -a /there_is_no_dir 2> errors.txt
cat errors.txt
ls: cannot access '/there_is_no_dir': No such file or directory
ls -a /there_is_no_dir2 2>> errors.txt
cat errors.txt
ls: cannot access '/there_is_no_dir': No such file or directory
ls: cannot access '/there_is_no_dir2': No such file or directory

&>, &>>

⠀Перенаправляет вывод команды и ошибок в файл:

  • &> перезаписывает файл при существовании. Для полного скрытия вывода можно использовать конструкцию &> /dev/null.
  • &>> при существовании файла дописывает в конец.

Синтаксис

команда &> файл
команда &>> файл

Примеры

printf "%d\n" 2.22 &> /dev/null
printf "%d\n" 2.22 &> output.txt
cat output.txt
-bash: printf: 2.22: invalid number
2
printf "%d\n" 4.76 &>> output.txt
cat output.txt
-bash: printf: 2.22: invalid number
2
-bash: printf: 4.76: invalid number
4

<

⠀Использует данные из файла в качестве источника ввода в команду вместо клавиатуры.

Синтаксис

команда < файл

Примеры

echo "2*2+2" > calc.txt
cat calc.txt
2*2+2
bc < calc.txt
6

<<EOF...EOF

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

Синтаксис

команда <<EOF
многострочный
текст
EOF

Примеры

cat <<EOF
многострочный
текст
EOF
многострочный
текст

<<<

⠀Передаёт указанный текст в команду вместо ввода с клавиатуры.

Синтаксис

команда <<< "текст"

Примеры

bc <<< "2*2+2"
6
jq -r ".json[1]" <<< '{
	"json": ["one", "two"]
}'
two
json='{
	"json": ["one", "two"]
}'
jq -r ".json[1]" <<< "$json"
two

<(команды)

⠀Возвращает путь к созданному временному файлу, содержащему результат выполнения одной или нескольких объединённых внутри конструкции команд.

Синтаксис

команда <(команда_1; команда_2 && команда_3; ...)

Примеры

# Путь к временному файлу
echo <(uptime)
/dev/fd/63
# Содержимое временного файла
cat <(uptime)
 00:00:00 up 5 days,  7:25,  2 users,  load average: 0.00, 0.00, 0.00
cat <(uptime; date)
 00:00:00 up 5 days,  7:27,  2 users,  load average: 0.00, 0.00, 0.00
Tue 01 Jan 2022 12:00:00 AM CET

Запуск скриптов

Локальные

⠀Для выполнения скрипта, находящегося на сервере, необходимо:

  • Сделать его исполняемым;
  • Запустить его при помощи:
    • bash — для выполнения скрипта запускается ещё один сеанс Bash терминала, в следствии чего, например, не получиться использовать и обновлять переменные пользователя;
    • source / . — скрипт выполняется в сеансе Bash терминала, из которого был запущен скрипт.

Синтаксис

# Bash
chmod +x путь_к_скрипту; \
./путь_к_скрипту аргументы
# Source
chmod +x путь_к_скрипту; \
. ./путь_к_скрипту аргументы

Примеры

# Bash
chmod +x script.sh; \
./script.sh -u -t "hi" "text" 666
# Source
chmod +x script.sh; \
. ./script.sh -u -t "hi" "text" 666

По ссылке

⠀Скрипты по ссылке, например из GitHub можно выполнять тремя способами:

  • Для эстетов

Синтаксис

# Bash
bash <(wget -qO- ссылка) аргументы
bash <(curl -s ссылка) аргументы
# Source
. <(wget -qO- ссылка) аргументы
. <(curl -s ссылка) аргументы

Примеры

# Bash
bash <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/colors.sh) -h
bash <(curl -s https://raw.githubusercontent.com/SecorD0/utils/main/colors.sh) -h
# Source
. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/colors.sh) -h
. <(curl -s https://raw.githubusercontent.com/SecorD0/utils/main/colors.sh) -h
  • Для тех, кто может позволить себе «И так сойдёт!»

Синтаксис

# Bash
wget -q ссылка; \
chmod +x путь_к_скрипту; \
./путь_к_скрипту аргументы

curl -sO ссылка; \
chmod +x путь_к_скрипту; \
./путь_к_скрипту аргументы

# Source
wget -q ссылка; \
chmod +x путь_к_скрипту; \
. ./путь_к_скрипту аргументы

curl -sO ссылка; \
chmod +x путь_к_скрипту; \
. ./путь_к_скрипту аргументы

Примеры

# Bash
wget -q https://raw.githubusercontent.com/SecorD0/utils/main/colors.sh
chmod +x colors.sh; \
./colors.sh -h

curl -sO https://raw.githubusercontent.com/SecorD0/utils/main/colors.sh
chmod +x colors.sh; \
./colors.sh -h
# Source
wget -q https://raw.githubusercontent.com/SecorD0/utils/main/colors.sh
chmod +x colors.sh; \
. ./colors.sh -h

curl -sO https://raw.githubusercontent.com/SecorD0/utils/main/colors.sh
chmod +x colors.sh; \
. ./colors.sh -h

Цвета

⠀Для красивого вывода в командах echo и printf можно использовать цвета, каждый из которых имеет свой код. С целью заменить непонятные некрасивые коды на что-то элегантное был создан данный скрипт.

Посмотреть цвета

. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/colors.sh) -h

Примеры

. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/colors.sh) --; \
echo -e "${C_LGn}I'm Light Green${RES}"

Работа с переменными

⠀Для упрощения работы с переменными был создан скрипт, который может:

  • Добавить переменную;
  • Переименовать;
  • Удалить первое или все совпадения.

Синтаксис

. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/miscellaneous/insert_variable.sh) \
опции

Опции:

  • -n * — название переменной;
  • -v — значение переменной (если не указать значение, то появится ручной ввод);
  • -a — добавить alias;
  • -r — сменить указанное название переменной на указанное в опции -n;
  • -d — удалить первое вхождение переменной, указанной в опции -n;
  • -da — удалить все вхождения переменной, указанной в опции -n.

Примеры

# Ручной ввод значения
. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/miscellaneous/insert_variable.sh) \
-n variable
Enter the value:
# Добавить переменную
. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/miscellaneous/insert_variable.sh) \
-n variable -v "text text"
# Добавить alias
. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/miscellaneous/insert_variable.sh) \
-n update -v "sudo apt update \&\& sudo apt upgrade" -a
# Переименовать переменную
. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/miscellaneous/insert_variable.sh) \
-n var -r variable
# Удалить первое вхождение переменной
. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/miscellaneous/insert_variable.sh) \
-n var -d
# Удалить все вхождения переменной
. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/miscellaneous/insert_variable.sh) \
-n var -da

Открытие портов

В зависимости от того, включён ли брандмауэр, осуществляется выбор алгоритма открытия портов. Чтобы не заниматься выбором вручную, был создан этот скрипт, принимающий в качестве аргументов один или несколько портов.

Синтаксис

. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/miscellaneous/ports_opening.sh) \
порт_1 порт_2 порт_3 ...

Примеры

. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/miscellaneous/ports_opening.sh) \
9090 9091



Ну вот собственно и всё! Это далеко не все конечно, но мы постарались включить наиболее распространенные команды и описания к ним, в процессе изучения и установки нод вы сможете справочно изучать по каждой команде что она из себя представляет и у вас будет складываться потихоньку это все в один единый пазл. Конечно с нуля это сложно но терпение и труд в изучении приведут к хорошим результатам. Удачи в изучении.