Справочник по терминалу. Терминал Linux
Linux — это работа в терминале. Процессу обучения этому навыку может помочь данная серия статей.
- Горячие клавиши и переменные окружения.
- Группы команд: справочная информация, пакетный менеджер, файловая система.
- Группы команд: архивы, пользователи, текст.
- Группы команд: информация о системе, сеть, прочее.
- Операторы, запуск скриптов, а также описание скриптов нашей команды.
⠀Вся информация применима к 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
⠀Определены для всех пользователей и загружаются при запуске системы. Такие переменные обычно хранятся в следующих местах:
Alias
⠀Alias — это ещё одно представление какой-либо команды. В роли команды может выступать любая команда или группа команд, в том числе вместе с опциями и аргументами.
⠀Alias не является переменной окружения, однако в связи со схожим принципом работы находится в данном разделе.
Создание
variable="value" # Или export variable="value"
alias update="sudo apt update && sudo apt upgrade"
export variable="value" >> $HOME/.bash_profile . $HOME/.bash_profile
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 используется в терминале или скрипте как обычная команда
update
Удаление
unset variable variable2 variable3
# Определённые unalias update alias2 alias3 # Все unalias -a
Зарезервированные системой
⠀Помимо задаваемых пользователем переменных существуют зарезервированные системой.
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
echo "$HOSTNAME"
# Возможные варианты vmi666999.contaboserver.net n8531eb Ubuntu-2004-focal-64-minimal
echo "$PWD"
# Возможные варианты /root /root/dir1 /etc
echo "$RANDOM"
# Возможные варианты 12463 45 32466
echo "$EUID"
# Возможные варианты 0 100 40
echo "$GROUPS"
# Возможные варианты 0 100
Часть 2. Терминал Linux
⠀В данной статье рассматриваются следующие группы команд: справочная информация, пакетный менеджер, файловая система.
Справочная информация
⠀Самые лучшие способы узнать подробнее о команде:
- Воспользоваться поисковиком (желательно Google на английском языке);
- Воспользоваться командами из данного раздела.
--help / -h
⠀В подавляющем большинстве команд, при добавлении данной опции в конец, выводит страницу помощи, на которой может быть:
- Описание команды;
- Подкоманды и их описание;
- Опции и их описание;
- Примеры использования;
- Прочая полезная информация.
⠀В некоторых случаях опция -h
имеет аналогичный функционал.
команда --help команда -h
du --help wget -h
man
⠀Отображает справочную страницу команды, если таковая была предусмотрена. Для выхода используется клавиша q
.
man команда
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
Обновляет информацию о пакетах (например версию), проходясь по спискам репозиториев, хранящимся в:
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 опции путь_к_директории
ls
ls dir1 ls $HOME ls -a $HOME
ls -al
du
⠀Отображает размер файлов и директорий.
du опции путь_к_директории
-h
— вывести размер в привычных человеку единицах измерения (КБ, МБ, ГБ);-a
— вывести размер как для папок, так и для файлов;-d
— максимальная глубина отображения файлов в директориях. Например:
# Указанная папка 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
— тип искомого объекта:-size
— поиск по размеру объекта;-maxdepth
— максимальная глубина поиска;-depth
— начать поиск из самой глубокой директории;-user
— поиск по владельцу;-group
— поиск по группе.
⠀Можно использовать логические операторы:
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 ...
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
— абсолютно все (по умолчанию, если не указать какую-либо другую).- Действие:
+
— добавить к текущим правам доступа указанные разрешения;-
— удалить из текущих прав доступа указанные разрешения;=
— установить полностью новые разрешения.- Права:
# Владелец может выполнять, изменять и читать 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 опции пользователь:группа путь
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 ... путь_куда
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 ...
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 archive.zip file1 $HOME/file2 file3 # Содержащий директорию dir zip -r archive.zip $HOME/dir/ # Содержащий все файлы папки dir zip -r archive.zip $HOME/dir/*
unzip опции архив
# Показать содержимое архива 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+\
— поиск и замена текста: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
sudo apt install jq -y
jq опции поисковый_запрос путь_к_файлу jq опции поисковый_запрос <<< "текст" команда | jq опции поисковый_запрос
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 опции команды
⠀Зарезервированные переменные:
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 опции устройство
df -h
nvme
⠀Позволяет контролировать и управлять NVMe накопителями. Наиболее полезная и часто используемая функция — чтение SMART (состояние накопителя).
sudo apt install nvme-cli -y
nvme команда диск
# Список NVMe дисков nvme list
# Чтение SMART жирнала 1-ого диска nvme smart-log /dev/nvme0
free
⠀Отображает информацию об использовании оперативной памяти.
df опции
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
— состояние: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
сохраняет правила (по умолчанию правила сбрасываются при перезагрузке сервера).
sudo apt install iptables iptables-persistent -y
iptables команда цепочка условие -j действие
INPUT
— входящие пакеты (когда кто-то обращается к серверу);OUTPUT
— исходящие пакеты (когда сервер обращается к кому-то);FORWARD
— проходящие пакеты (когда проходят через сервер, но не предназначены ему).
-p
— сетевой протокол (TCP, UDP, ICMP или ALL);-s
— адрес отправителя пакетов;-d
— адрес источника назначения;--dport
— порт назначения;--sport
— порт источника.
# Все правила 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 опции
speedtest-cli --simple
Ping: 14.596 ms Download: 789.05 Mbit/s Upload: 534.10 Mbit/s
ping
⠀Проверяет доступность удалённого узла (IP или домен) в сети. В частности используется для проверки подключения интернета.
ping опции адрес_узла
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 формат аргументы
- Обычные символы — просто выводятся как есть;
- Символы с обратной косой чертой — обрабатываются и выводятся:
- Преобразования типов — заменяются аргументами и выводятся:
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 опции команда аргументы
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 опции +формат
%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 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
Ну вот собственно и всё! Это далеко не все конечно, но мы постарались включить наиболее распространенные команды и описания к ним, в процессе изучения и установки нод вы сможете справочно изучать по каждой команде что она из себя представляет и у вас будет складываться потихоньку это все в один единый пазл. Конечно с нуля это сложно но терпение и труд в изучении приведут к хорошим результатам. Удачи в изучении.