Шпаргалка Linux команд (пополняется)

Список команд, которые иногда вылетают из головы, но которыми так или иначе приходится часто пользоваться.

  • ssh-keygen
  • scp
  • tar gz

Команды

Добавить ssh ключ

Как не вводить пароль при подключении к ssh

Генерация ключа

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

ssh-keygen -t rsa

После создаются два ключа: приватный (/home/username/.ssh/id_rsa), публичный (/home/username/.ssh/id_rsa.pub)

Добавление ключа не сервер

Вариант 1
ssh-copy-id demo@198.51.100.0

(для MacOS может потребоваться установить ssh-copy-id)

Вариант 2
cat ~/.ssh/id_rsa.pub | ssh demo@198.51.100.0 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >>  ~/.ssh/authorized_keys"

Редактирование файлов через SSH

sudo apt install sshfs

mkdir ~/remote_code
sshfs $USER@remote.example.com:/home/$USER/code ~/remote_code

Запуск команд на SSH из файла

cat script.sh | ssh user@server /bin/bash

SCP — копирование файлов через ssh

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

Скопировать локальный файл на сервер:

scp file.gz root@server.my:/home/dir

Скопировать всё содержимое папки на сервере (рекурсивно) в локальную папку (с подробным выводом):

scp -r root@server.my:/home/dir/ /home/local/my/

Между серверами:

scp -r root@server1.my:/home/dir/ root@server2.my:/home/dir/

С указанием порта:

scp -P 9999 file.zip user@server.my:~/

Копирование с удаленного сервера через несколько ssh:

scp -r -oProxyJump=user@host user@host2:/path/to/source/folder/ /path/to/destination/folder/

scp -oProxyJump=userB@hostB,userC@hostC infile.txt userD@hostD:"~/outfile.txt"

Копирование на удаленный север hostC (используя выполнение команды):

scp -oProxyCommand="ssh hostB socat stdio tcp:%h:%p" thefile hostC:destination

Дополнительные флаги

-r — рекурсивное копирование (для директорий)
-C — использовать сжатие при передачи
-P — порт ssh

TAR GZ — Создание архива

Как создать архив .tar.gz

tar -cvf file.tar /full/path - создать .tar
tar -czvf file.tar.gz /full/path - создать .tar.gz (архив)
tar -cjvf file.tar.bz2 /full/path - создать .tar.bz2 (архив)

Синтаксис этих примеров:

tar [-ключи] [название архива] [путь, что запаковать]

Как открыть (распаковать) .tar

Чтобы распаковать запаковывай .tar: tar -xvf file.tar.gz

Синтаксис: tar [-ключи] [название архива]

Распаковка всех файлов

бывает так, что структура вся правильная, но во всех папках лежат отдельные архивы каждого файла. В этом случае можно воспользоваться утилитой find
в этом случае команда будет выглядеть так (правда тут используется gunzip в качестве распаковщика):

find . -name '*.gz' -exec gunzip '{}' \;

Ключи архиватора

с — (Create) создать архив.
z – создает архив .tar.gz
j — создает архив .tar.bz2
x — (eXtract) позволяет вам извлекать файлы из архива.
v — делает вывод tar подробным. Это означает, что на экран будут выведены все найденные в архиве файлы. Если эта опция опущена, информация, выводимая в процессе обработки, будет ограничена.
f — является обязательной опцией. Без неё tar пытается использовать магнитную ленту вместо файла архива.
z — позволяет вам обрабатывать архив, сжатый gzip’ом (с расширением .gz). Если вы забудете указать эту опцию, tar выдаст ошибку. И наоборот, эта опция не должна использоваться для несжатых архивов.
t — (Test) просмотреть содержимое архива.

Циклы

Создание 100 пустых файлов размером 10кб

for (( i = 0; i < 100; i++ )) { fallocate -l 10k empty$i.txt; }

Строки

Замена в строке

Формат sed

sed "s/AAAA/BBBB/options"

Удаление строк содержащих определенное слово в файлах *.txt

sed -i '/\<keyword\>/d' *.txt

Удаление одинарных кавычек в строке

tr -d \''\\'

Удаление двойных кавычек или замена текста

awk '{gsub("\"", "", $1); print $1}'

Считывание элементов из строки
Строка будет разделена пробелами, где каждое значение будет размещено в соответствующие индекса переменные $0, $1..$n. При указание директивы -F будет работать с файлом

 awk -F'"' '{print "set", $4, "\""$6"\""}' testme.csv

Проверка является ли строка цифровой

re='^[0-9]+$'
if ! [[ $yournumber =~ $re ]] ; then
   echo "error: Not a number" >&2; exit 1
fi

Базы данных

Использование файла паролей для логирования в БД без указания параметров через командную строку

создаем файл ~/.pgpass (по умолчанию в домашней директории, но через переменную окружения можно изменить точку чтения)

содержимое файла: сервер:порт:база_данных:имя_пользователя:пароль

Подробнее Postgres Pro Standard : Документация: 9.5: 31.15. Файл паролей : Компания Postgres Professional


Источники

  1. How To Set Up SSH Keys
  2. scp — копирование файлов через ssh
  3. Как создать архив .tar.gz в Linux
  4. scp files via intermediate host
  5. How to scp through two intermediate servers to a third-hop server
  6. Quickly create a large file on a Linux system — Stack Overflow
  7. Bash-скрипты, часть 2: циклы / Блог компании RUVDS.com / Хабр
  8. linux — How do I test if a variable is a number in Bash? — Stack Overflow
  9. coding style — How do you edit files over SSH? — Stack Overflow
  10. Postgres Pro Standard : Документация: 9.5: 31.15. Файл паролей : Компания Postgres Professional
  11. PostgreSQL: Documentation: 9.0: Environment Variables
  12. Remove Quotes (double or single) with Awk — Unix & Linux Stack Exchange
  13. configuration — How do I run a local bash script on remote machines via ssh? — Server Fault

Leave a comment

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.