Шпаргалка 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

если необходимо примомнтировать папку без возможности изменения, т.е. в read-only, то при монтировании необходимо добавить ключ -o ro

sshfs $USER@remote.example.com:/home/$USER/code ~/remote_code -o ro

Запуск команд на 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

Автоподстановка команды из истории (autocomplete from history)

Для поиска можно пользоваться CTRL+R но можно дополнительно добавить автодополение из истории

добавляет поведение на кнопки вверх и вниз

cat >> ~/.inputrc <<'EOF'
"\e[A": history-search-backward
"\e[B": history-search-forward
EOF

перезагружаем текущую сессию терминала

bind -f ~/.inputrc

Создать папку, если её нет

Вариант 1

[[ -d dir ]] || mkdir dir

Вариант 2

mkdir -p dir

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) просмотреть содержимое архива.

Поиск

Поиск файла с именем thisfile.txt в текущей директории

find . -name thisfile.txt

Поиск всех файлов с расширением *.jpg в папке /home

find /home -name ""*.jpg"

Поиск пустых файлов в текущей директории

find . -type f -empty

Поиск всех .db файлов (без учета регистра) измененные в течении предыдущих 6 дней пользователем randomperson

find /home -user randomperson -mtime 6 -iname ".db"

другие варианты можно посмотреть на сайте plesk

Циклы

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

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

Поиск файлов в папке, в названиях которых могут быть пробелы

IFS=$'\n' # разделитель
for file in $(find . -name "*" -printf "%p\n") 
do
   echo "${file}"
done 

Строки

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

Формат sed

sed "s/AAAA/BBBB/options"

Поиск в строках в файлах

grep -rnw ./ -e "string-to-search"
`-r` - рекурсивно, в поддиректориях (не следовать по ссылкам в отличии от  `-R`)
`-n` - номер строки
`-w` - искать целое слово
`-e` - следовать паттерну

Вывести окружающих строк для grep: -B (--before-context), -A (--after-context), -C (--context)

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

less path/to/file

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

find . -type f -exec sed -i 's/string-to-find/replacement-string/g' {} +

Удаление строк содержащих определенное слово в файлах *.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

Команда подсчитывает количество слов, строк или символов в файле:

wc -l path/to/file # количетсво строк

-c — bytes
-m — chars
-l — lines
-L — longest line length
w — words

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

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

Подтверждение выполнения скрипта

read -p "Are you sure? " -n 1 -r
echo    # (optional) move to a new line
if [[ $REPLY =~ ^[Yy]$ ]]
then
    # do dangerous stuff
fi

Вывод дат в строке

echo $(date +"<строка форматирования>")

Пример:

echo dump$(date +%Y%m%d_%H%M%S).gz

Выведет: dump20210721_075853.gz

Базы данных

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

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

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

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

Потоки

0 - STDIN
1 - STDOUT
2 - STDERR

обычный поток (результат) отправится в файл output

ls > output

Отправить поток STDOUT в output, и поток 2 (STDERR) в первый &1

ls lala > output 2>&1

Перенаправить конкретный поток, указать номер потока перед >

cd lala 2> output
cat output

в output окажется ошибка при выполнении строки 1

перенаправление обоих потоков в файл:

cd lala &> output

теперь все из STDOUT и из STDERR будет перенаправлено в output

Источники

  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
  14. bash: smart autocomplete based on history? — Super User
  15. Команда date — Linux FAQ
  16. How do I prompt a user for confirmation in bash script? — Stack Overflow
  17. Потоки | Основы командной строки
  18. How To Find a File In Linux From the Command Line — Plesk Tips
  19. bash — Only mkdir if it does not exist — Stack Overflow

Leave a comment

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