Сбер AIJ 11.12.24
Сбер AIJ 11.12.24
Сбер AIJ 11.12.24

Инструменты терминала Linux для начинающих. Часть вторая

Аватар Типичный программист
Отредактировано

Рассказываем об инструментах терминала Linux, таких как мультиплексор tmux, шифровальщик GnuPG и командная оболочка Bash.

10К открытий11К показов

Мы уже разобрали команды терминала Linux, а в этой статье рассмотрим инструменты, среди которых tmux, Bash, шифровальщик GnuPG и многое другое.

Управление сеансами: tmux

Управление рабочим пространством с помощью tmux

tmux — это один из инструментов терминала Linux, а точнее терминальный мультиплексор, который позволяет создавать несколько постоянных терминалов в рамках одного входа в систему. Другими словами, tmux — это программа, которая даёт возможность вам работать с несколькими «вкладками» в одном окне терминала.

tmux будет полезен в следующих случаях:

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

Краткое руководство по tmux

Стандартный рабочий tmux-процесс:

tmux new -s s1 # запуск нового сеанса

Ctrl+B :detach — позволяет прервать сеанс, выйти из системы, вернуться домой.

Позже снова можете зайти в систему. Для того нужно:

tmux a-t s1

Дополнительные полезные команды tmux:

  • Ctrl+B ( — возврат к предыдущей сессии;
  • Ctrl+B ) — переход к следующей сессии;
  • tmux ls — получение списка всех сессий;
  • tmux kill-session -t s1 — окончание сессии.

Непосредственная коллаборация в tmux:

#user1#
tmux -S /tmp/collab
chmod 777 /tmp/collab

#user2#
tmux -S /tmp/collab attach

Создание частей окна и их синхронизация

  • tmux new -s s2 — начать новую сессию;
  • Ctrl+B " — горизонтальное разделение;
  • Ctrl+B % — вертикальное разделение;
  • Ctrl+B :setw — для включения и выключения синхронизации;
  • Ctrl+B o — прокрутить окна;
  • Ctrl+B x — убрать активные окна.

ssh-конфигурация и туннелирование

Ssh-конфигурация (~/.ssh/config)

Host login1
hostname login1.ornl.gov
User km0

Host cades
Port 22
hostname or-slurm-login.ornl.gov
ProxyJump login1
User km0
ServerAliveCountMax=3 # максимальное количество сообщений, отправленных без ack
ServerAliveInterval=15 # отправка нулевого сообщения каждые 15 секунд

Чтобы перейти на ssh/scp, необходимо использовать команду ssh/scp cades.

Преимущества ssh-конфигурации

Конфигурация облегчает запоминание ssh-команд при наличии нескольких хостов. При этом настройка подключения к отдельным хостам выполняется автоматически. Для дополнительной информации касательно данного типа конфигурации смотрите man 5 ssh_config.

Например: ssh summit достаточно для подключения к summit.olcf.ornl.gov со всеми свойствами, упомянутыми в этом разделе:

Host summit
Port 22
hostname summit.olcf.ornl.gov
User ketan2
ServerAliveCountMax=3
ServerAliveInterval=15

Переадресация порта с помощью SSH-туннелирования:

Инструменты терминала Linux для начинающих. Часть вторая 1
Пример ssh-тунелирования

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

  1. remote$ python2 -m SimpleHTTPServer 25000 OR;
  2. remote$ python3 -m http.server 25000;
  3. local$ ssh -L 8000:localhost:25000 id@remote -N;
  4. Откройте браузер на локальном компьютере и перейдите на http://localhost:8000.

Инкрементное удалённое копирование с помощью rsync

Такое копирование позволяет синхронизировать данные между локальным и удалённым хранилищем. При этом можно использовать набор опций, а именно: и -v как наиболее часто используемые.

rsync -av localdir/ remotehost:~/remotedir.

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

mkdir empty && rsync -a --delete empty/ large_dir/.

Безопасная связь через GnuPG

Основы использования GNU Privacy Guard

GnuPG — это инструмент командной строки Linux для безопасной связи. Она имеет следующие функции:

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

При всех вышеперечисленных плюсах, данная программа не предполагает:

  • концепцию криптографии с открытым ключом;
  • сложные и продвинутые варианты использования.

Создание новой пары ключей

Для начала используйте gpg --gen-key, после чего нужно будет ответить на предложенные вопросы.

  1. Укажите имя и адрес электронной почты в качестве идентификатора, потом выберите фразу-пароль.
  2. «Артефакты» ключей можете посмотреть по адресу $HOME/.gnupg dir.

Далее необходимо создать сертификат аннулирования:

gpg --output revoke.asc --gen-revoke <ID>.

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

Обмен ключами и верификация

Экспорт открытого ключа:

  • gpg --output pub.gpg --export — бинарный код;
  • gpg --armor --export > pubtxt.gpg — кодировка ASCII.

Импорт открытого ключа:

gpg --import billpub.gpg — импорт по умолчанию.

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

gpg --edit-key b@ms.us — здесь указывается ключевая информация и подсказка.

command> fpr — отпечатки пальцев, проверка по телефону.

Остаётся лишь пройти верификацию в командной строке — command> sign.

Шифрование и расшифровка документов

Ниже приведён пример шифрования документа с помощью открытого ключа пользователя (пусть это будет Билл):

gpg --output doc_pdf.gpg --encrypt --recipient.

b@ms.us doc.pdf — как вы уже поняли, у вас должен быть ключ Билла в свободном доступе.

Билл расшифровывает документ (то есть у него должен быть его персональный ключ и фраза-пароль):

gpg --output doc.pdf --decrypt doc_pdf.gpg.

Документы могут быть зашифрованы без ключа, просто посредством фразы-пароля:

gpg --output doc_pdf.gpg --symmetric doc.pdf.

Аутентификация документов с помощью цифровых подписей

Документы с цифровой подписью подтверждают тот факт, что они являются подлинными и что они не подвергались чьим-либо посторонним изменениям:

gpg-output doc.signed-sign doc.pdf.

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

Подписанный документ можно проверить и расшифровать следующим образом:

gpg --ouput doc.pdf --decrypt doc.signed.

Инструменты Bash

Это оболочка командной строки Linux. В данном случае могут быть применены такие команды и утилиты, как grep, sed, awk и определены переменные, константы, условные обозначения, циклы и функции. Bash также предполагает использование арифметических операций и логических операций: && (и) и || (или):

  • wget ...|| curl ... — выполнить curl iff wget не удается;
  • make install && make test — срабатывает команда test iff install.

Файлы Shell «Startup» устанавливают среду при запуске оболочки.

.bashrc — файл, который запускается в каждой новой создаваемой оболочке.

.bash_profile — файл, который запускается только в «оболочке входа в систему», а не во всех оболочках. Например, он не запустится, если вы вызовете сценарий оболочки, который создает «подоболочку».

Псевдонимы и функции

Псевдонимы — это короткие и удобные имена для длинных команд. Как правило, они определяются в .bashrc или отдельном файле .aliases. Чтобы временно обойти псевдоним (скажем, поменять псевдоним ls на ls -a), используйте \: \ ls.

Также необходимо помнить о том, что функции Bash обычно определяются в файле .bashrc/.bash_profile и что функции более выразительны по сравнению с псевдонимами. Поэтому, обычно, следует отдавать предпочтение именно им.

Примеры псевдонимов:

  • alias s=ssh;
  • alias c=clear;
  • alias cx='chmod +x';
  • alias ls='ls -thor‘;
  • alias more=less;
  • alias ps='ps auxf';
  • alias psg='ps aux | grep -v grep | grep -i -e USER -e';
  • alias ..='cd ..';
  • alias myp='ps -fjH -u $USER';
  • alias cleanup='rm -f *.tmp *.aux *.log'.

Примеры полезных функций:

  • mcd() { mkdir -p $1; cd $1 };
  • cdl() { cd $1; ls};
  • backup() { cp "$1"{,.bak};};
  • gfind() { find / -iname $@ 2>/dev/null };
  • lfind() { find . -iname $@ 2>/dev/null };
  • rtfm() { help $@ || man $@ || $BROWSER "http://www.google.com/search?q=$@"; };
  • Смотрите /usr/share/doc/bash-*/examples/functions для поиска дополнительных примеров функций.

Переменные и подстановка команд

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

vname = value — присвоить значение переменной vname.

$vname — прочесть значение переменной vname.

Подстановка команды:

  • curdir=$(pwd);
  • curdate=$(date +%F);
  • echo "There are $(ls -1 | wc -l) items in the current dir".

Условная инструкция

В данном случае используется конструкция if-then-else (условного оператора), а именно — управляющая структура программы с ветвлением, аналогичная языкам программирования.

Существуют две формы механизмов условной оценки:

  • $ if test $USER = 'km0'; then echo 'I know you'; else echo 'Who are you'; fi;
  • $ if [ -f /etc/yum.conf ]; then echo 'yum.conf exists'; else echo 'file do not exist'; fi.

Условные инструкции:

  • Строка-z строка — если длина строки равна 0;-n строка — если длина строки не равна 0;string1 = string2 — если строки идентичны (обратите внимание на одиночный знак =).
  • Числаint1 -eq int2 — если первое целое число равно второму;-ne, -gt, -ge, -lt, -le — если не равно; больше, чем; больше или равно.
  • Файл-r имя_файла — если файл существует и доступен для чтения;-w имя_файла — если файл существует и доступен для записи;-f, -d, -s — если файл или каталог существует и не пуст.
  • Логические операции!, -a, -o — отрицание, логическое И, логическое ИЛИ.

Циклы

Тут циклы представлены в 3 различных формах:

  • for i in {0..9}; do echo $i; done;
  • for ((i=0;i<10;i++)){ echo $i;}  # аналогично С++;
  • for var in list; do comand; done # в стиле Python.

Также такая схема может применяться при параллельной замене команд:

  • for i in $(\ls -1 *.txt); do echo "$i"; done;
  • for i in $(get_files.sh); do upload.sh "$i"; done.

Heredoc-синтаксис

Данный синтаксис позволяет создавать «встроенные» файлы.

Пример команды:

sh << END
echo "Hello World"
END <нажмите enter>

Использование heredoc позволяет:

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

В следующей части мы поговорим о сборке программ и утилитах терминала Linux.

Следите за новыми постами
Следите за новыми постами по любимым темам
10К открытий11К показов