Текущая дата/время $ date
Сменить часовой пояс: необходимо создать символическую ссылку нужного файла (/usr/share/zoneinfo)- /etc/localtime
Это сменить только локальное время, сам часовой пояс хранится в etc/timezone, он не сменился и в системных логах по прежнему был другой пояс, отредактировал этот текстовый файл и все стало норм!
# ln -sf /usr/share/zoneinfo/Asia/Omsk /etc/localtime
Синхронизация времени
NTP (Network Time Protocol), популярная утилита chrony это его реализация
# Сменить имя хоста (но нужен ребут видимо) "NewName" >> /etc/hostname && "NewName" >> /etc/hosts (тут надо заменить старое имя) # Либо так, тут вроде без ребута применяется hostnamectl set-hostname "NewName"
rsync ключи исходный_каталог пользователь@хост:/каталог_назначения
Синхронизирует указанные каталоги.
Синхронизация указанного каталога
# rsync -azP source destination (user@host:destination)
Пропускать каталоги, скопировать только файлы
таким же фокусом можно регулировать глубину вложенности рекурсивного копирования, типа «/*/*/» level 2 или что то вроде того..
rsync --exclude='*/' source/ destination/
find -type d | xargs -I '{}' -P 5 -n1 rsync -a --delete /home/old/Foto/'{}'/ /home/old/CloudDisk/'{}'/
Для CentOS ставим и запускаем rsync-daemon
Концепция:
Клиент (источник):
# /etc/rsyncd.conf max connections = 10 exclude = lost+found/ dont compress = *.gz *.tgz *.zip # use chroot = false - ??? [service1] path = /home/dn/outfolder/ comment = My service 1 read only = yes list = yes auth users = synuser secrets file = /etc/rsyncd.scrt (формат простой- логин:пароль) hosts allow = 192.168.0.100 hosts deny = *
Сервер (приемник):
#!/bin/bash password_file='/etc/rsyncd.scrt' user='synuser' ip='192.168.0.101' source='service1' destination='/var/infolder/service1/' rsync -a --delete-after --password-file=$password_file $user@$ip::$source $destination
В файле кредлов сохранен только пароль
* Возможны траблы с SELinux, его надо настроить либо отключить
* Права на файлы кредлов 600
Передать файл по ssh можно либо перенаправив вывод:
# cat .ssh/name.pub ssh user@host "cat >> .ssh/authorized_keys"
Копирование с удаленной машины, команда scp (порядок файлов мб наоборот)
# scp [-P 22] user@host:source_file desc_file
Копирование на удаленную машину, команда scp
# scp [-P 22] source_file user@host:desc_file
Для копирования открытого ключа есть специальная утилита ssh-copy-id, она сама скопирует нужный файл в нужное место
# ssh-copu-id user@host
Выполнение команды для каждого элемента
Программа берет данные из стандартного ввода или из файла, разбивает их в соответствии с указанными параметрами, а затем передает другой программе в качестве аргумента
[команда_генератор_списка] | xargs [опции_xargs] [команда]
# Аргументы передаются в конце команды find. -name *.png -type f -print | xargs tar -cvzf images.tar.gz # Так в указанное место (скобки похоже по умолчанию используются) ls /etc/*.conf | xargs -i cp {} /home/likegeeks/Desktop/out # Добавить строку (дату в данном случае) к каждому элементу вывода ls / | xargs -I '{}' echo "$(date '+%Y-%m-%d') - {}" tar -cvf $pathToBcps$nameArchive /etc/letsencrypt /var/www /etc/apache2 | xargs -I '{}' echo "$(date '+%Y-%m-%d_%H-%M') - {}" > /usr/zxbcps/bin/logs/lastBcps.log # Переименование ls | sed -e "p;s/.txt$/.sql/" | xargs -n2 fmv # Смена прав доступа find . -group root -print | xargs chown temp # Удалить файлы старше 7 дней find /tmp -type f -name '*' -mtime +7 -print0 | xargs -0 rm -f # Можно заменить циклом, например это find . -type f -and -iname "*.deb" | xargs -n 1 dpkg -I # Эквивалентно for file in `find . -type f -and -iname "*.deb"`; do dpkg -I "$file"; done
Запуск указанной команды с периодами
# Выполнение нескольких команд, 10 сек и показывать разницу watch -n10 -d "ls -l; echo '<=======>' ls -l ../;"
Подстановка команд в скрипте может быть в конструкции- $(), в КИ можно использовать кавычки- ``
В последнем случае, символы перевода строки будут удалены, что бы этого избежать, нужно заключить команду в двойные кавычки
$ "`ls -l /dir`"
Системные вызовы SIGSTOP и SIGCONT
kill -s STOP 16102 kill -s CONT 16102
#!/bin/bash # # Скрипт для сбора и вывода информации с хоста, используется в zabbix, UserParameters # Информация разбита на смысловые блоки, блоки на кейсы в свитче, # название нужного блока передается первым аргументом при запуске скрипта # каждый блок соответствует zabbix-ключу, соответствие задано уже в конфиге заббикс агента, # типа- "UserParameter=mykeys.host,/var/tmp/get-info.sh host" - ключ для получения имени хоста # case $1 in 'host') # Имя хоста echo '[{"Имя хоста": "' `hostname` '"}]';; 'os') # ОС, дистрибутив и версия ядра # Первый вариант лучше, но у Debian его нет, поэтому есть второй distrib=`cat /etc/system-release 2>/dev/null` if [[ -z $distrib ]]; then distrib=`cat /etc/os-release | grep -Po "PRETTY_NAME=\K.*" | sed -e s/\"//g` fi printf '[{"Дистрибутив": "%s", "Версия ядра": "%s"}]\n' "$distrib" `uname -r`;; 'cpu') # ЦП echo '[{"Модель":"'`lscpu | grep -Po '^Model name:\x20*\K.*'`'' x''`lscpu | grep -Po '^CPU\(s\):\x20*\K.*'`'"}]';; 'mem') # ОЗУ, объем в гб echo '[{"Объем": "' `free -th | grep 'Total:' | awk '{print $2}'` '"}]';; 'devnet') # Сетевые уст-ва # Массив доступных интерфейсов, только имена devs=( $(ip -br l | grep -vE '^lo|^docker0' | awk '{print $1}') ) result='[ ' # Проходим перечень интерфейсов, собираем инфу по каждому for dev in ${devs[@]}; do status=`ip -br a show $dev 2>/dev/null | awk '{print $2}'` # Встречаются какие то абстрактные интерфейсы, по ним нет никакой инфы, такие пропускаем if [[ -z $status || $status == 'DOWN' ]]; then continue fi speed=`cat /sys/class/net/$dev/speed 2>/dev/null` duplex=`cat /sys/class/net/$dev/duplex 2>/dev/null` ips=`ip -br a show $dev 2>/dev/null | grep -Eo '([0-9]{0,3}\.){3}[0-9]{0,3}/([0-9]{0,3})' 2>/dev/null` label=`cat /sys/class/net/$dev/device/label 2>dev/null` result+='{"Наименование": "'$dev'", "Модель": "'$label'", "Скорость": "'$speed'", "Поддержка duplex": "'$duplex'", "Статус": "'$status'", "IP-адреса": "'$ips'"},' done echo ${result::-1}']';; 'devstor') # Устройства хранения, со своими разделами res="`lsblk -Jo MODEL,SERIAL,SIZE,TYPE,TRAN | grep -E '"type":"disk"|"type": "disk"' | sed s/'model'/'Модель'/g | sed s/'serial'/'Серийный номер'/g | sed s/'size'/'Размер'/g | sed s/'tran'/'Тип'/g | sed -e s/'"type":"disk"\,'//g$ echo '['${res::-1}']';; 'location') # Расположение, исходя из IP адреса var=`curl -s ipinfo.io | grep -E 'country|region|city' | sed s/'city'/'Город'/g | sed s/'region'/'Регион'/g | sed s/'country'/'Страна'/g` echo '[{'${var::-1}'}]' esac
# Чистим pagecache: echo 1 > /proc/sys/vm/drop_caches # Чистим dentrie и inode кэши: echo 2 > /proc/sys/vm/drop_caches # Чистим pagecache, dentrie и inode кэши: echo 3 > /proc/sys/vm/drop_caches
apt install rpm2cpio rpm2cpio myFile.rpm | cpio -idmv
Thread dump java
Тред дамп джава
jstack -l 11568 > output_thread_dump.txt # Для процессов запущенных из под daemon sudo -u daemon jstack -l 3346175 > output_thread_dump.txt # Просмотр инфы процесса cat /proc/1588434/environ
Завершить сеанс пользователя
Сначала посмотреть его оболочку, найти процессы этой оболочки и грохнуть, все или основной
w ps -ft pts/0 -t pts/2 kill -9 11111 2222
Утилита iperf3, кроссплатформенная, замер пропускной способности
# Винда https://iperf.fr/iperf-download.php\\ # Linux sudo dnf install iperf3 # прослушивание сервером iperf3 -s # Запуск клиента iperf3 -c host-ip