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

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


linux:overall:over

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
linux:overall:over [2022/08/09 16:08]
admin
linux:overall:over [2024/05/16 08:01] (текущий)
admin
Строка 7: Строка 7:
 :!: Это сменить только **локальное время**, сам часовой пояс хранится в **etc/timezone**, он не сменился и **в системных логах** по прежнему был другой пояс, отредактировал этот текстовый файл и все стало норм! :!: Это сменить только **локальное время**, сам часовой пояс хранится в **etc/timezone**, он не сменился и **в системных логах** по прежнему был другой пояс, отредактировал этот текстовый файл и все стало норм!
 <code bash># ln -sf /usr/share/zoneinfo/Asia/Omsk /etc/localtime</code> <code bash># ln -sf /usr/share/zoneinfo/Asia/Omsk /etc/localtime</code>
 +
 +
 +**Синхронизация времени**\\
 +NTP (Network Time Protocol), популярная утилита **chrony** это его реализация\\
 +  * **chronyc** — интерфейс командной строки для хрони
 +  * **chronyd** — демон, который можно запустить во время загрузки
 +  * **tracking / sources** - аргументы cmd
 +
  
  
 ===== Host ===== ===== Host =====
- 
 <code bash> <code bash>
 # Сменить имя хоста (но нужен ребут видимо) # Сменить имя хоста (но нужен ребут видимо)
Строка 19: Строка 26:
  
  
-===== Подстановка команд ===== 
-Подстановка команд в скрипте может быть в **конструкции- $()**, в КИ можно использовать **кавычки- ``**\\ 
-В последнем случае, символы перевода строки будут удалены, что бы этого избежать, нужно заключить команду в двойные кавычки\\ 
-<code bash>$ "`ls -l /dir`"</code> 
  
 +===== Копирование =====
 +==== rsync ====
 +[[https://www.opennet.ru/man.shtml?topic=rsyncd.conf&category=5&russian=0|Развернутая дока]]
  
-===== Приостановить/Возобновить процесс ===== 
-Системные вызовы **SIGSTOP и SIGCONT** 
-<code bash> 
-kill -s STOP 16102 
-kill -s CONT 16102 
-</code> 
- 
- 
-===== Сбор инфы из ОС ===== 
- 
-<details> 
-<summary> :!: Инфа разбита по блокам, результат в Json </summary> 
- 
-<code bash> 
-#!/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 
-</code> 
-</details> 
- 
- 
- 
-===== Transfer. Копирование ===== 
- 
- 
-==== rsync ==== 
 <code bash> <code bash>
 rsync ключи исходный_каталог пользователь@хост:/каталог_назначения rsync ключи исходный_каталог пользователь@хост:/каталог_назначения
Строка 144: Строка 70:
  
 Концепция:  Концепция: 
-  * на источнике определяем директории доступные для синхронизации, с набором параметров для каждой, создаем пользователя+  * на источнике определяем директории доступные для синхронизации, с набором параметров для каждой 
 +  * пользователь здесь **условный**, в рамках rsync'a, можно не указывать, будет анонимус
   * на приемнике делаем скрипт для единичной синхронизации, запускаем его по расписанию   * на приемнике делаем скрипт для единичной синхронизации, запускаем его по расписанию
  
Строка 209: Строка 136:
   * **-I** - выполнить для каждого элемента, в кавычках указываем условное обозначение для найденных элементов (может быть любым)   * **-I** - выполнить для каждого элемента, в кавычках указываем условное обозначение для найденных элементов (может быть любым)
   * **-P (num)** - кол-во потоков для выполнения    * **-P (num)** - кол-во потоков для выполнения 
-  * ** ** -  +  * **-i** - для замены аргумента в нужном месте 
-  * ** ** -  +
-  * ** ** - +
  
 <details> <details>
 <summary> :!: Примеры использования</summary> <summary> :!: Примеры использования</summary>
 +<code bash>
 +  # Аргументы передаются в конце команды
 +find. -name *.png -type f -print | xargs tar -cvzf images.tar.gz
  
 +  # Так в указанное место (скобки похоже по умолчанию используются)
 +ls /etc/*.conf | xargs -i cp {} /home/likegeeks/Desktop/out
  
-<code bash> +  # Добавить строку (дату в данном случае) к каждому элементу вывода 
-+ls / | xargs -I '{}' echo "$(date '+%Y-%m-%d') - {}"
-# Добавить строку (дату в данном случае) к каждому элементу вывода +
-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
-#  +
-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 ls | sed -e "p;s/.txt$/.sql/" | xargs -n2 fmv
  
-+  # Смена прав доступа
-# Смена прав доступа+
 find . -group root -print | xargs chown temp find . -group root -print | xargs chown temp
  
-+  # Удалить файлы старше 7 дней 
-# Удалить файлы старше 7 дней +
 find /tmp -type f -name '*' -mtime +7 -print0 | xargs -0 rm -f find /tmp -type f -name '*' -mtime +7 -print0 | xargs -0 rm -f
  
-+  # Можно заменить циклом, например это 
-# Можно заменить циклом, например это +
 find . -type f -and -iname "*.deb" | xargs -n 1 dpkg -I 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 for file in `find . -type f -and -iname "*.deb"`; do dpkg -I "$file"; done
 +</code>
 +</details>
  
 +
 +
 +===== watch =====
 +Запуск указанной команды с периодами\\
 +
 +  * **-d** - выделять измененные данные
 +  * **-n** - интервал в секундах
 +  * **-t (--no-title)** -
 +  * **-x (--exec)** - передать выполнение в sh -c
 +
 +<code bash>
 +  # Выполнение нескольких команд, 10 сек и показывать разницу
 +watch -n10 -d "ls -l; echo '<=======>' ls -l ../;"
 +</code>
 +
 +
 +
 +===== Подстановка команд =====
 +Подстановка команд в скрипте может быть в **конструкции- $()**, в КИ можно использовать **кавычки- ``**\\
 +В последнем случае, символы перевода строки будут удалены, что бы этого избежать, нужно заключить команду в двойные кавычки\\
 +<code bash>$ "`ls -l /dir`"</code>
 +
 +
 +
 +===== Приостановить/Возобновить процесс =====
 +Системные вызовы **SIGSTOP и SIGCONT**
 +<code bash>
 +kill -s STOP 16102
 +kill -s CONT 16102
 +</code>
 +
 +
 +
 +===== Сбор инфы из ОС =====
 +<details>
 +<summary> :!: Инфа разбита по блокам, результат в Json </summary>
 +<code bash>
 +#!/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
 </code> </code>
 </details> </details>
  
  
 +
 +===== Oчистить кэш файловой системы в Linux ядре =====
 <code bash> <code bash>
 +# Чистим 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
 </code> </code>
  
 +
 +
 +
 +===== Разное =====
 +
 +<details>
 +<summary>:!: Распаковать RPM без установки</summary>
 +
 +<code bash>
 +apt install rpm2cpio
 +rpm2cpio myFile.rpm | cpio -idmv
 +
 +</code>
 +</details>
 +
 +
 +Thread dump java\\
 +Тред дамп джава
 +<code bash>
 +jstack -l 11568 > output_thread_dump.txt
 +
 +# Для процессов запущенных из под daemon
 +sudo -u daemon jstack -l 3346175 > output_thread_dump.txt
 +
 +# Просмотр инфы процесса
 +cat /proc/1588434/environ
 +</code>
 +
 +Завершить сеанс пользователя\\
 +Сначала посмотреть его оболочку, найти процессы этой оболочки и грохнуть, все или основной\\
 +<code bash>
 +w
 +ps -ft pts/0 -t pts/2
 +kill -9 11111 2222
 +</code>
 +
 +
 +<code bash>
 +</code>
 +
 +
 +===== Сеть =====
 +
 +<details>
 +<summary>:!: Замер скорости</summary>
 +Утилита **iperf3**, кроссплатформенная, замер пропускной способности\\
 +
 +<code bash>
 +  # Винда
 +https://iperf.fr/iperf-download.php\\
 +  # Linux
 +sudo dnf install iperf3
 +
 +  # прослушивание сервером
 +iperf3 -s
 +
 +  # Запуск клиента
 +iperf3 -c host-ip
 +
 +</code>
 +</details>
  
  
linux/overall/over.1660061321.txt.gz · Последнее изменение: 2022/08/09 16:08 — admin