Новичкам
January 10, 2022

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

1package & Let's Node

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


Содержание

Часть 1

Часть 2

Часть 3

Часть 4

Часть 5


Операторы

К содержанию

;

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

Синтаксис

команда_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
  • Для любителей острых ощущений

Синтаксис

# Bash
wget -qO- ссылка | bash -s аргументы -- опции
curl -s ссылка | bash -s аргументы -- опции

Примеры

# Bash
wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/colors.sh | bash -s -- -h
curl -s https://raw.githubusercontent.com/SecorD0/utils/main/colors.sh | bash -s -- -h

Скрипты нашей команды

К содержанию

⠀Все скрипты нашей команды:

  • Имеют страницы помощи на английском языке (опция -h) со всей необходимой информацией;
  • Тестируются на нескольких серверах с ОС Ubuntu 20.04;
  • Предполагают запуск в source;
  • Приспособлены к запуску как в bash (тестирование не выполняется), так и в source.

⠀В данном разделе разбираются скрипты из раздела utils, которые упрощают работу с Ubuntu.

⠀Опции, помеченные знаком * являются обязательными.

Цвета

GitHub | Raw

⠀Для красивого вывода в командах 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}"

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

GitHub | Raw

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

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

Синтаксис

. <(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

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

GitHub | Raw

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

Синтаксис

. <(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

Установщики ПО

Директория со скриптами

⠀Существуют программы, которые устанавливаются более сложным способом, нежели при помощи пакетного менеджера. Для облегчения процесса установки некоторых из них были созданы скрипты, например:

Распространённые опции:

  • -h — страница помощи;
  • -v — установить указанную версию программы;
  • -un — удаление программы.

Парсер цены токена

GitHub | Raw

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

Синтаксис

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

Опции:

  • -ts * — название токена или проекта на CoinMarketCap, например BTC, eth, binance-coin;
  • -m — количество токенов для расчёта их стоимости, например 0.5, 1,8, "100 000";
  • -r — округлить цену или стоимость до указанного количества знаков после запятой.

Примеры

# BTC
. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/parsers/token_price.sh) \
-ts btc
46793.928696
# ETH с округлением
. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/parsers/token_price.sh) \
-ts ETH -r 2
3832.18
# BNB по названию проекта с CMC
. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/parsers/token_price.sh) \
-ts binance-coin
514.327157
# Рассчёт стоимости
. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/parsers/token_price.sh) \
-ts eth -m 0.5
. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/parsers/token_price.sh) \
-ts twt -m "1 000,45"
. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/parsers/token_price.sh) \
-ts SOL -m "75 000" -r 3
1913.114184
708.175532
12750986.827

XPath парсер

GitHub | Raw

⠀XPath — это один из мощнейших инструментов для навигации по HTML и XML документам. Для упрощения работы с ним был создан специальный скрипт.

Синтаксис

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

Опции:

  • -x * — Full XPath запрос;
  • -u — применить запрос к исходному коду сайта;
  • -f — применить запрос к исходному коду из файла;
  • -te — применить запрос к исходному коду из заранее объявленной переменной $text;
  • -ty — тип парсинга, может быть HTML (по умолчанию) или XML;
  • -sw — отображать появляющиеся при парсинге предупреждения.

Примеры

# Код сайта
. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/parsers/xpath.sh) \
-x "/html/body/div[1]/main/div[3]/div[1]/div[2]/div[1]/div" \
-u "https://etherscan.io/gastracker"
<div class="card-body mt-2">
...
</div>
. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/parsers/xpath.sh) \
-x "normalize-space(/html/body/div[1]/main/section/div/div/div[1]/h1/span[1]/text())" \
-u "https://etherscan.io/gastracker"
Ethereum Gas Tracker...~#
# Код из заранее объявленной переменной
text="
<html>
  <body>
    <h1>Example</h1>
  </body>
</html>
"
. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/parsers/xpath.sh) \
-x "/html/body/h1/text()" -te
Example...~#

Скорость выполнения команд

GitHub | Raw

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

Синтаксис

. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/miscellaneous/speed_test.sh) \
"команда_1" "команда_2" "команда_3" ...

Примеры

. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/miscellaneous/speed_test.sh) \
"df" 'ls -la' 'du -had 0 `pwd` 2>/dev/null | sort -h'

Полезные ссылки

К содержанию

Операторы объединения | Операторы перенаправления

Подстановка процессов (EN) | Скрипты нашей команды


Благодарности

К содержанию

Команда 1package — написание статьи

Выразить благодарность