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

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

Мы уже разобрали команды терминала 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-туннелирования:

Пример 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.

Ксения Широкова
Перевод материала из GitHub-репозитория