Инструменты пользователя

Инструменты сайта


linux:overall:over

Общее

Дата/Время

Текущая дата/время $ date

Сменить часовой пояс: необходимо создать символическую ссылку нужного файла (/usr/share/zoneinfo)- /etc/localtime
:!: Это сменить только локальное время, сам часовой пояс хранится в etc/timezone, он не сменился и в системных логах по прежнему был другой пояс, отредактировал этот текстовый файл и все стало норм!

# ln -sf /usr/share/zoneinfo/Asia/Omsk /etc/localtime

Синхронизация времени
NTP (Network Time Protocol), популярная утилита chrony это его реализация

  • chronyc — интерфейс командной строки для хрони
  • chronyd — демон, который можно запустить во время загрузки
  • tracking / sources - аргументы cmd

Host

# Сменить имя хоста (но нужен ребут видимо)
"NewName" >> /etc/hostname && "NewName" >> /etc/hosts (тут надо заменить старое имя)
# Либо так, тут вроде без ребута применяется
hostnamectl set-hostname "NewName"

Копирование

rsync

Развернутая дока

rsync ключи исходный_каталог пользователь@хост:/каталог_назначения

Синхронизирует указанные каталоги.

  • -a, –archive - позволяет выполнять рекурсивную синхронизацию, сохраняет символические ссылки, специальные файлы и файлы устройств, время модификации, группу, владельца и права
  • -z, –compress - сжимает все передаваемые данные файлов
  • -P, -progress - показать % выполнения во время передачи
  • -R, –relative - использовать относительные пути (чтобы сохранялся путь расположения)
  • –delete (..-before, ..-after) - удалять файлы, которых нет на передающей стороне

Синхронизация указанного каталога

# rsync -azP source destination (user@host:destination)

:!: Пропускать каталоги, скопировать только файлы таким же фокусом можно регулировать глубину вложенности рекурсивного копирования, типа «/*/*/» level 2 или что то вроде того..

rsync --exclude='*/' source/ destination/
:!: Запуск в несколько потоков
  • find -type d выводит имена всех директорий.
  • xargs -I '{}' xargs запускает для каждого файла команду rsync. Ключ -P 5 утилиты xargs задает количество одновременно запущенных команд (потоков rsync), то есть одновременно будут запущена передача 5-ти файлов. Каждый файл передается отдельно.
find -type d | xargs -I '{}' -P 5 -n1 rsync -a --delete /home/old/Foto/'{}'/ /home/old/CloudDisk/'{}'/
:!: Постоянная синхронизация каталогов

Источник

Для CentOS ставим и запускаем rsync-daemon

Концепция:

  • на источнике определяем директории доступные для синхронизации, с набором параметров для каждой
  • пользователь здесь условный, в рамках rsync'a, можно не указывать, будет анонимус
  • на приемнике делаем скрипт для единичной синхронизации, запускаем его по расписанию

Клиент (источник):

# /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

scp

Передать файл по 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

xarg

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

[команда_генератор_списка] | xargs [опции_xargs] [команда]

  • -I - выполнить для каждого элемента, в кавычках указываем условное обозначение для найденных элементов (может быть любым)
  • -P (num) - кол-во потоков для выполнения
  • -i - для замены аргумента в нужном месте
:!: Примеры использования
  # Аргументы передаются в конце команды
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

watch

Запуск указанной команды с периодами

  • -d - выделять измененные данные
  • -n - интервал в секундах
  • -t (–no-title) -
  • -x (–exec) - передать выполнение в sh -c
  # Выполнение нескольких команд, 10 сек и показывать разницу
watch -n10 -d "ls -l; echo '<=======>' ls -l ../;"

Подстановка команд

Подстановка команд в скрипте может быть в конструкции- $(), в КИ можно использовать кавычки- ``
В последнем случае, символы перевода строки будут удалены, что бы этого избежать, нужно заключить команду в двойные кавычки

$ "`ls -l /dir`"

Приостановить/Возобновить процесс

Системные вызовы SIGSTOP и SIGCONT

kill -s STOP 16102
kill -s CONT 16102

Сбор инфы из ОС

:!: Инфа разбита по блокам, результат в Json
#!/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

Oчистить кэш файловой системы в Linux ядре

# Чистим 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

Разное

:!: Распаковать RPM без установки
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
linux/overall/over.txt · Последнее изменение: 2024/05/16 08:01 — admin