Шпаргалки по командам

MySQL

PostgreSQL

InfluxDB

Consul

Nginx

Http

Bash

Firewalld

Iptables

Docker

Systemd

Screen

Vim

openssl

keytool

awk

postfix

ovftool

rndc

yum/apk

sed

scp

kubernetes

ldap

MySQL

Список пользователей:

SELECT User, Host, Super_priv, Create_user_priv, Grant_priv from mysql.user WHERE Create_user_priv = 'Y' AND Grant_Priv = 'Y';

Посмотреть глобальную переменную в консоли mysql:

SELECT @@GLOBAL.log_error;

Раздамп с одного сервера на другой через pipe по ssh со сжатием:

ssh -C user@terget_ip 'mysqldump source_dbname' | pv | mysql target_dbname

Раздамп с одного сервера на другой через pipe по ssh со сжатием gzip:

ssh user@remote_ip 'mysqldump source_dbname | gzip' | gunzip | pv | mysql target_dbname

Посмотреть дату в базе (timestamp может отличаться от других временных функций):

select UNIX_TIMESTAMP();

Проверка конфига на ошибки:

/usr/sbin/mysqld --help --verbose | grep ERROR

Получить список партиций таблицы “history”:

SELECT TABLE_NAME,PARTITION_NAME FROM information_schema.partitions WHERE TABLE_SCHEMA='zabbix' AND TABLE_NAME = 'history';

Партиции в таблице:

SHOW CREATE TABLE table_name

Посмотреть параметры создания таблицы (показать table schema):

show create table zabbix.history_uint;

Удаление партиции:

ALTER TABLE history_uint DROP PARTITION p2018_09;

Информация о прогрессе импорта дампа БД:

 time zcat dump.sql.gz | pv -rb | mysql database

Выбор всех таблиц в имени которых есть *b_iblock*:

show tables like "%b_iblock%";

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

grant all privileges on db_tmp.* to bitrix0@localhost identified by 'password';

Посмотреть текущие кодировки:

show variables like 'char%';

Посмотреть текущие представления:

show variables like '%colla%';

Конвертирование базы и таблицы в кодировку utf8mb4 и представление utf8mb4_unicode_ci:

ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Посмотреть кодировку конкретной базы:

SELECT default_character_set_name FROM information_schema.SCHEMATA WHERE schema_name = "db_name";

PostgreSQL

Владелец всех таблиц:

select tablename, tableowner from pg_catalog.pg_tables;

Владелец текущей БД:

SELECT
    U.rolname,
    D.datname
FROM
    pg_roles AS U JOIN pg_database AS D ON (D.datdba = U.oid)
WHERE
    D.datname = current_database();

Скопировать права имеющегося пользователя для нового:

GRANT current_user_name TO new_user_name;

Создание пользователя:

CREATE ROLE user_name WITH LOGIN ENCRYPTED PASSWORD 'm5NjNV3fBR2n8w3X';

Выборка данных (select) без лишних рамок в тихом режиме, посмотреть кол-во реплик standby (slave) серверов:

psql -qtAX -h HOST_IP -p 5432 -U zabbix -d postgres -c "SELECT count(*) FROM pg_stat_replication"

Посмотреть текущие переменные:

show all;
show statement_timeout;

Узнать расположение конфига:

SHOW config_file;

Список всех баз:

SELECT datname FROM pg_database;

Удалить БД:

drop database db_name

Дамп в текстовом формате и сжатием:

pg_dump db | gzip > db.dump.gz

Раздамп в текстовом виде:

zcat db.dump.gz | psql db || psql db_name < db.sql

Дамп в бинарном формате со сжатием (средствами pg_dump):

pg_dump -Fc db > db.bak

Раздамп в бинарном формате (-Fc для указания, что БД сжата (хотя и не обязательно указывать), -с для очистки, если БД уже есть, -j по кол-ву ядер для распараллеливания):

pg_restore -h db_address -U user_name -Fc db.bak -с -d db_name -j 2

Не генерировать команды, устанавливающие владение объектами, как в исходной базе данных (применимо и к pg_restore; удобно при переносе в уже существующую БД):

pg_dump --clean --no-owner db > db.dump

Не восстанавливать права доступа (не выполнять команды GRANT/REVOKE):

pg_restore -Fc db.dump -x -d db_name

Узнать размер БД:

SELECT pg_size_pretty( pg_database_size('DBNAME') );

Подключиться к БД из консоли:

\c DBNAME

Посмотреть таблицы и их размер:

\dt+

Список привилегий:

\l

Список пользователей (ролей):

\du

Права для схемы:

\dn+

Создание пользователя в консоли БД (сразу добавляется возможность LOGIN):

CREATE USER test WITH password 'qwerty';

Создание пользователя:

sudo -u postgres createuser --pwprompt zabbix

Дать все привилегии:

GRANT ALL ON DATABASE db_name TO test;

Дать права на все таблицы в базе:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO name_user;

Создание БД и сразу выдача прав (–owner) на неё пользователю zabbix:

sudo -u postgres createdb -O zabbix zabbix

Мягко перечитать конфигурацию pg_hba.conf:

docker exec -it -u postgres help-postgresql-1 psql -c "SELECT pg_reload_conf();"

Посмотреть статус репликации на мастере:

psql -c "select usename,application_name,client_addr,backend_start,state,sync_state from pg_stat_replication;"

InfluxDB

Аргументы для вывода запроса с экранированными кавычками в терминал:

influx -database 'db_name' -username 'grafana' -password 'password' -execute "SELECT last(\"value\") FROM \"application.\" WHERE (\"app\" = 'test'"

Consul

Создание РК:

curl -s \
    --header "X-Consul-Token: ${TOKEN}" \
    http://${SERVER_IP}:8500/v1/snapshot?dc=${DC_NAME} -o /backup/snapshot.tgz

Восстановление из РК, указывать DC:

curl \
    --request PUT \
    --data-binary @snapshot.tgz \
    --header "X-Consul-Token: ${TOKEN}" \
    http://${SERVER_IP}:8500/v1/snapshot?dc=${DC_NAME}

Nginx

Проверка конфигурации и мягкая перезагрузка без обрывов соединений:

nginx -t && nginx -s reload

Httpd

Проверка конфигурации:

httpd -t

Bash

Если нет ncdu, получить отсортированный список файлов по размеру:

ls | xargs -I {} du -shx {}

Дебаг скрипта:

trap 'echo "# $BASH_COMMAND";read' DEBUG

echo line1
echo line2

Передать явно аргумент команде через двойное тире (double dash). Без этого аргумент будет интепретироваться как ключ для mv:

mv -- -3.jpg  normal_name.jpg

Вставить строку в начало файла с помощью echo:

(echo "some text" && cat filename) > filename1 && mv filename1 filename

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

(shopt -s dotglob; mv -v old-dir/* /home/bitrix/ext_www/new-dir)

Удалить все .rpm файлы в текущей директории:

for i in *.rpm; do yum remove $(basename "$i" | sed "s/.rpm$//g"); done

Проверить все доступные версии пакета в репозитории:

yum list gitlab-runner --showduplicates | sort -r

Назначение корректных прав директориям и файлам:

find . -type d | xargs chmod -v 755 && find . -type f | xargs chmod -v 644

Посмотреть информацию о об rpm-пакете (размер, пути установки бинарников):

rpm -qli ${RPM_NAME}

Распаковка src.rpm:

rpm2cpio ../hoge.src.rpm | cpio -i

Исключить пустые строки и комментарии с grep

cat /etc/ntp.conf | egrep -v '^$|^#'

Скачивание файлов через curl:

curl https://domain.ru/tpk.tar --output tpk.tar

Вывод на экран консоли и в файл одновременно (-a — append to end like >> ) :

/opt/scripts/mfc_copy.sh | tee -a /opt/scripts/mfc_copy.log

Зависимости (библиотеки):

ldd /bin/bash

Убить все процессы по шаблону:

pkill -f <pattern>

rsync dry-run:

rsync -n ./ /home/

Проверка правильности файла fstab (dry run):

mount -f

Найти через find и удалить всё в текущей директории кроме папки nodel:

find . -name 'nodel' -prune -o -exec rm -rf {} \;

Фоновый режим процессов:

man ls &
fg &[№ процесса]
jobs # список процессов

tar директории mysql на лету:

tar cvf - mysql | ( cd /destination; tar xf - )

Список файлов в архиве верхнего уровня:

tar --exclude='*/*/*' -tvf ttt.tar.gz

Перенаправить стандартный вывод в лог-файл, а вывод ошибок – в /dev/null

command >file.log 2>&1

Посмотреть используемый MTA

alternatives --display mta

Сменить MTA:

alternatives --set mta /usr/sbin/sendmail.postfix

Обновить корневой сертификат в системе (путь /etc/pki/ca-trust/source/anchors/ в RHEL):

update-ca-trust

Очистка переменной от непечатаемых символов:

var="${var//[$'\t\r\n ']}"

Создание файла нужного размера (только на файловых системах, поддерживающих разреженные (sparse) файлы:

fallocate -l 10M out.txt

Проверка работы почты пхп в консоли:

php -r "mail('mail@google.com', 'test', 'test');"

Создание файла (или уменьшение размера):

truncate -S 10M test.txt
truncate -S 0 test.txt
truncate -s +200K test.txt

Вывод топ N процессов с сортировкой по CPU usage:

ps -Ao user,uid,comm,pid,pcpu,pmem --sort=-pcpu | head -n 30

Ручная синхронизация времени, когда ntpd уже запущен:

ntpdate -u server_name

Информация по работе ntpd (с резолвом имён):

ntpq -np

Firewalld

Вывести всю информацию:

firewall-cmd --permanent --list-all

Перезагрузить без потери соединений:

firewall-cmd --reload

Открыть порт или диапазон:

firewall-cmd --permanent --zone=public --add-port=10050-10051/tcp

Добавить маскарадинг на интерфейс:

firewall-cmd --zone=external --add-masquerade --permanent

Перенаправить входящие соединения по 80 порту на другой хост:

firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=10.16.0.3 --permanent

Перенаправить с одного порта на другой порт и узел:

firewall-cmd --zone=external --add-forward port=port=2245:proto=tcp:toport=22:toaddr=10.16.0.3 --permanent

Iptables

Перенаправить с одного порта на другой порт и узел:

iptables -t nat -A PREROUTING -p tcp -d 10.16.0.1 --dport 80 -j DNAT --to-destination 10.16.0.13:8080 --permanent

Вывод правил NAT:

iptables -t nat -L

Сохранить правила:

iptables-save

Удалить правило по номеру строки:

iptables -t nat -L POSTROUTING --line-numbers
iptables -t nat -D POSTROUTING <number>

Docker

Удаление промежуточных образов без тэгов:

docker rmi $(docker images --filter "dangling=true" -q --no-trunc)

Мягко перезапустить контейнер:

docker kill --signal="USR1" <yourcontainer_name>

Список контейнеров:

docker ps -a

Подключиться к контейнеру:

docker exec -it container_name bash

Остановить все контейнеры:

docker stop $(docker ps -a -q)

Удалить все контейнеры, из которых вышли:

docker rm -v $(docker ps -aq -f status=exited)

Удалить образ:

docker rmi image_name

Создать образ:

docker build -t image_name .

Удалить все неиспользуемые тома:

docker volume prune

Подключиться под рутом в контейнер Alpine:

docker exec -it --user root alpine-container bash

Systemd

Смена имени хоста без перезагрузки ОС:

hostnamectl set-hostname New_HostName
systemctl restart systemd-hostnamed

Screen

Прокрутка:

Ctrl+A Esc PgUp Esc

Просмотреть список сессий скрина:

screen -ls:

There are screens on:
        27617.pts-0.web-p-3     (Detached)
        2690.pts-0.web-p-3      (Attached)

Подключиться к сессии в состоянии “deattached”

screen -r 27617.pts-0.web-p-3

Подключиться к сессии в состоянии “attached”:

screen -x 27617.pts-0.web-p-3

Отключиться от сессии:

Ctrl+A D

Убить сессию:

screen -S 7617.pts-0.web-p-3 -X quit

Vim

Включить\отключить непечатаемые символы:

set list
set nolist

Включить нумерацию строк:

set num

openssl

Посмотреть все сертификаты с системе:

awk -v cmd='openssl x509 -noout -subject' ' /BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt

Посмотреть сертификат:

echo -n | openssl s_client -connect ldap.srv.ru:636 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'

Посмотреть информацию о сертификате (кем выдан и какой срок действия, например):

openssl x509 -noout -text -in /etc/letsencrypt/livermn-lux.ru/fullchain.pem

Подключение к почтовому серверу, используя SSL:

openssl s_client -starttls smtp -crlf -connect 10.89.65.20:25

Обновить корневые сертификаты:

update-ca-trust

Запустить прослушивание на 443 порту

openssl s_server -accept 443 -cert serv.pem -key cerv.key -st
ate

Проверить все корневые сертификаты в ОС:

awk -v cmd='openssl x509 -noout -subject' ' /BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt | YOUR_SUBJ

Добавить корневой сертификат в ОС Debian (имя обязательно должно быть crt):

cp cert.cert /usr/local/share/ca-certificates/cert.crt
sudo update-ca-certificates

Создать ключ и сертификат одной командой:

openssl req -newkey rsa:1024 -x509 -nodes -sha256 -days 3650 -keyout ca.key -out ca.crt -subj "/CN=.domain.ru/emailAddress=my.addr@domain.ru"

keytool

Добавить сертификат в хранилище java:

keytool -importcert -alias ldap.domain.ru -file ~/ldaps.pem -keystore /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts

# пароль по дефолту - changeit

Сгенерировать сертификат и ключ и положить в хранилище:

keytool -genkeypair -storepass password -storetype PKCS12 -keyalg RSA -keysize 2048 -dname "CN=server" -alias server -ext "SAN:c=DNS:localhost,IP:127.0.0.1" -keystore conf/server.keystore

awk

Замена второго столбца с улсовием:

awk -v REG_URI="$REG_URI" '{ if ($2 == "mcr.microsoft.com/dotnet/aspnet:5.0") {$2 = "value_for_replace"}; print }'

Суммирование значений в столбце $1 и вывод по окончании результата:

echo "$var1" | awk '{s+=$1} END {print s}'

postfix

Обновление записей о логинах\паролях:

postmap /etc/postfix/sasl_passwd 

ovftool

Экспорт виртуальной машины с ESXi в OVA (Linux):

ovftool "vi://root:pass@<ESXI-IP>/<VM-name>" /home/local-path/VM-copy-name.ova

Windows PowerShell:


& 'C:\Program Files\VMware\VMware OVF Tool\ovftool.exe' "vi://root:pass3@10.10.3.25/VM_name" fr.ova

rndc

Clear domain cache:

rndc flushname rmn-lux.ru

yum

Список зависимостей библиотек бинарника:

ldd /bin/cat

Вывод списка всех версий пакетов на примере percona:

yum -q list available --showduplicates percona-server*

Удаление старых ядер с раздела /boot:

uname -r
pm -qa | grep kernel-3
package-cleanup --oldkernels --count=2 # оставить последних 2 ядра, включая текущее

Установить пакет в alpine с указанием репозитория:

apk add swaks --update-cache --repository http://nl.alpinelinux.org/alpine/edge/testing

sed

Вывести содержимое файла в диапазоне между строкой 15 и 35:

cat file.txt | sed -n 15,35p

scp

Копирование файлов с Windows на Linux с кириллицей и пробелами в путях. 1 уровень кавычек интерпретируется scp, второй уровень позволяет использовать путь с пробелами:

scp -r user@10.10.10.1:"\"E:\Поганая винда/\"" ./

ldap

Запрос всех пользователей из группы, включая nested группы

(&(objectCategory=Person)(sAMAccountName=*)(memberOf:1.2.840.113556.1.4.1941:=cn=team,ou=Groups,ou=Resources,ou=Main,dc=hh,dc=ru))

Git

Удаленное перебазирование ветки вместо стандартного git pull origin master чтобы не было коммитов слияния:

git pull --rebase origin master

kubernetes

Вывести все API ресурсы из нужного namespace:

kubectl api-resources --verbs=list --namespaced -o name   | xargs -n 1 kubectl get --show-kind --ignore-not-found -n <stuck_namespace>

Удаление зависшего пода в состоянии “Terminating”:

kubectl delete pod NAME --grace-period=0 --force

Проверка лимитов на кол-во подов (настраиваются в параметрах запуска kubelet), можно перезагружать на проде без простоя:

kubectl get nodes -o yaml | grep pods

Получение срока окончания сертификата из secret:

kubectl -n integration get secret SECRET_NAME -o "jsonpath={.data['tls\.crt']}"  | base64 -d | openssl x509 -enddate -noout

Инфа о сертификате:

kubectl -n integration get secret SECRET_NAME -o "jsonpath={.data['tls\.crt']}"  | base64 -d | openssl x509 -text