notes/linux_usefull.md

505 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Linux useful
- [Linux useful](#linux-useful)
- [Текущая директория сервера в браузере по адресу `http://server_ip:8000/`](#текущая-директория-сервера-в-браузере-по-адресу-httpserver_ip8000)
- [Запустить графическое приложение через ssh соединение `-Y`](#запустить-графическое-приложение-через-ssh-соединение--y)
- [Отобразить все группы пользователя\*\*](#отобразить-все-группы-пользователя)
- [SSH соединение через промежуточный хост\*\*](#ssh-соединение-через-промежуточный-хост)
- [SSH соединение без проверки подлинности ключа и его сохранения](#ssh-соединение-без-проверки-подлинности-ключа-и-его-сохранения)
- [Изменить первичную группу пользователя в текщем сеансе](#изменить-первичную-группу-пользователя-в-текщем-сеансе)
- [Сохранить man в pdf](#сохранить-man-в-pdf)
- [Прервать выполнение команды через 5 секунд](#прервать-выполнение-команды-через-5-секунд)
- [Инфо об ОС](#инфо-об-ос)
- [Выполнить команду несколько раз в цикле](#выполнить-команду-несколько-раз-в-цикле)
- [Конвертировать изоражения heic в jpg](#конвертировать-изоражения-heic-в-jpg)
- [Конвертировать jpg в pdf](#конвертировать-jpg-в-pdf)
- [получить UUID диска для монтирования](#получить-uuid-диска-для-монтирования)
- [Сброс пароля root](#сброс-пароля-root)
- [Проверить доступность диапазона хостов](#проверить-доступность-диапазона-хостов)
- [Конвертировать pdf в png](#конвертировать-pdf-в-png)
- [Узнать загрузку процессора определённым процессом](#узнать-загрузку-процессора-определённым-процессом)
- [Определить страну, город и др. детали по IP](#определить-страну-город-и-др-детали-по-ip)
- [Отобразить файл без комментариев и путых строк](#отобразить-файл-без-комментариев-и-путых-строк)
- [Изменить консольный редактор по-умолчанию](#изменить-консольный-редактор-по-умолчанию)
- [Перенос строк в nano](#перенос-строк-в-nano)
***
## Текущая директория сервера в браузере по адресу `http://server_ip:8000/`
```bash
python -m SimpleHTTPServer
```
[вверх](#linux-useful)
***
## Запустить графическое приложение через ssh соединение `-Y`
*для текущей сессии*
```bash
ssh -Y pi@server_ip
```
*для всех подключений*
`ForwardX11 yes` в файле `/etc/ssh/ssh_config`
[вверх](#linux-useful)
***
## Отобразить все группы пользователя**
```bash
da2001@Metromint:~$ groups da2001
da2001 : da2001 adm cdrom sudo dip plugdev kvm lpadmin sambashare wireshark libvirt
```
[вверх](#linux-useful)
***
## SSH соединение через промежуточный хост**
```bash
ssh -t pi@192.168.89.2 ssh da2001@192.168.1.8
```
*сначала будет запрошен пароль от 192.168.89.2, затем от 192.168.1.8*
[вверх](#linux-useful)
***
## SSH соединение без проверки подлинности ключа и его сохранения
```bash
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no admin@192.168.2.1
```
[вверх](#linux-useful)
***
## Изменить первичную группу пользователя в текщем сеансе
```bash
[lisa@server1 ~]$ groups
lisa account sales
[lisa@server1 ~]$ newgrp sales
[lisa@server1 ~]$ groups
sales lisa account
[lisa@server1 ~]$ touch file1
[lisa@server1 ~]$ ls -l
total 0
-rw-r--r--. 1 lisa sales 0 Feb 6 10:06 file1
```
*теперь все новые файлы будут принадлежать группе sales*
[вверх](#linux-useful)
***
## Сохранить man в pdf
```bash
man -t <программа> | ps2pdf - <filename>.pdf
```
```bash
man -t tar | ps2pdf - tar_man.pdf
```
[вверх](#linux-useful)
***
## Прервать выполнение команды через 5 секунд
```bash
timeout 5s command
```
[вверх](#linux-useful)
***
## Инфо об ОС
```bash
cat /etc/*release
```
```bash
cat /etc/issue
```
```bash
uname -a
```
```bash
cat /etc/lsb-release
```
```bash
da2001@Metromint:~$ neofetch
...-:::::-... da2001@Metromint
.-MMMMMMMMMMMMMMM-. ----------------
.-MMMM`..-:::::::-..`MMMM-. OS: Linux Mint 20.1 x86_64
.:MMMM.:MMMMMMMMMMMMMMM:.MMMM:. Host: VivoBook_ASUSLaptop X570DD_M570DD 1.0
-MMM-M---MMMMMMMMMMMMMMMMMMM.MMM- Kernel: 5.8.0-59-generic
`:MMM:MM` :MMMM:....::-...-MMMM:MMM:` Uptime: 1 day, 1 hour, 41 mins
:MMM:MMM` :MM:` `` `` `:MMM:MMM: Packages: 2750 (dpkg)
.MMM.MMMM` :MM. -MM. .MM- `MMMM.MMM. Shell: bash 5.0.17
:MMM:MMMM` :MM. -MM- .MM: `MMMM-MMM: Resolution: 1920x1080
:MMM:MMMM` :MM. -MM- .MM: `MMMM:MMM: DE: Cinnamon
:MMM:MMMM` :MM. -MM- .MM: `MMMM-MMM: WM: Mutter (Muffin)
.MMM.MMMM` :MM:--:MM:--:MM: `MMMM.MMM. WM Theme: Mint-Y-Dark (Mint-Y-Dark)
:MMM:MMM- `-MMMMMMMMMMMM-` -MMM-MMM: Theme: Mint-Y-Darker [GTK2/3]
:MMM:MMM:` `:MMM:MMM: Icons: Papirus-Dark [GTK2/3]
.MMM.MMMM:--------------:MMMM.MMM. Terminal: gnome-terminal
'-MMMM.-MMMMMMMMMMMMMMM-.MMMM-' CPU: AMD Ryzen 5 3500U with Radeon Vega Mobile Gfx (8) @ 2.100GHz
'.-MMMM``--:::::--``MMMM-.' GPU: NVIDIA GeForce GTX 1050 Mobile
'-MMMMMMMMMMMMM-' GPU: AMD ATI 05:00.0 Picasso
``-:::::-`` Memory: 4924MiB / 5952MiB
```
[вверх](#linux-useful)
***
## Выполнить команду несколько раз в цикле
```bash
da2001@Metromint:~$ for i in {1..5}; do echo $i; done
1
2
3
4
5
```
*выполнение скрипта с параметрами в цикле*
```bash
for i in {1..20}; do ./wlt_start.py -c config_m716.cfg; done
```
[вверх](#linux-useful)
***
## Конвертировать изоражения heic в jpg
```bash
sudo apt-get install libheif-examples
```
*для конвертации одного изображения*
```bash
heif-convert IMG_1234.HEIC IMG_1234.jpg
```
*для конвертации всех изображений в папке*
```bash
mkdir jpg
for file in *.heic; do heif-convert $file ./jpg/${file/%.heic/.jpg}; done
```
[вверх](#linux-useful)
***
## Конвертировать jpg в pdf
*необходим установленный ImageMagick*
```bash
sudo apt install imagemagick
```
*для конвертации одного изображения*
```bash
convert image.jpg out.pdf
```
*для конвертации нескольких изображений*
```bash
convert image1.jpg image2.jpg image3.jpg out.pdf
```
***если в процессе конвертации будет получено сообщение об ошибке***
```bash
convert: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/408.
```
в файле `/etc/ImageMagick-7/policy.xml` необходимо изменить директиву доступа
*название папки ImageMagick-7 может отличаться в зависимости от установленной версии*
между тегами `<policymap>` и `</policymap>`
добавить/отредактировать
```bash
<policy domain="coder" rights="read | write" pattern="PDF" />
```
[вверх](#linux-useful)
***
## получить UUID диска для монтирования
**Вариант 1**
```bash
lsblk -n -o uuid /dev/sda1
```
-n - не выводить заголовки
-o - отображаемое поле
*таким образом, для раздела с ФС ext4, запись в fstab можно добавить таким образом*
```bash
mkdir /mntdir
UUID=`lsblk -n -o uuid /dev/sda1`
sudo bash -c 'echo "UUID=$UUID /mntdir ext4 defaults 0 0" >> /etc/fstab'
```
**Вариант 2**
```bash
[root@server1 ~]# blkid -o export /dev/sda2 | grep '^UUID'
UUID=d056212f-b1ea-4bc5-ba4e-99d036e5531e
```
*таким образом, можно перенаправить вывод в `/etc/fstab` и руками дополнить параметры монтирования*
```bash
blkid -o export /dev/sda2 | grep '^UUID' >> /etc/fstab
```
[вверх](#linux-useful)
***
## Сброс пароля root
**CentOS/RedHat Linux**
1. В самом начале загрузки системы, когда появляется меню GRUB, необходимо нажать `e`, чтобы попасть в настройку загрузки
2. В строке загрузки ядра, которая начинается со слова `linux` в конец добавить `rd.break`, затем нажать Ctrl+x, для применения сделанных настроек и загрузки системы (внесенные изменения действуют только в текущей сессии загрузки)
3. После появления приглашения консоли необходимо получить доступ к образу системы
```bash
mount -o remount,rw /sysroot
```
- Изменить корневой каталог
```bash
chroot /sysroot
```
- Теперь можно изменить пароль root
```bash
passwd
```
будет предложено ввести новый пароль дважды.
Поскольку на ранней стадии загрузки SELinux еще не был активирован, тип контекста в `/etc/shadow` будет перепутан. Если сейчас перезагрузиться, никто не сможет войти в систему. Поэтому необходимо убедиться, что тип контекста установлен правильно. Для этого на этом этапе нужно загрузить политику SELinux с помощью команды
```bash
load_policy -i
```
- Теперь нужно вручную установить правильный тип контекста в `/etc/shadow`.
```bash
chcon -t shadow_t /etc/shadow
```
**вместо 6,7 пунктов можно просто в корне создать файл `.autorelabel`**
```bash
touch /.autorelabel
```
Всё, после перезагрузки, у root будет новый пароль.
*для перезагрузки в данном режиме необходимо дважды ввести `reboot -f` или Ctrl+d*
```bash
reboot -f
```
**Debian**
1. В самом начале загрузки системы, когда появляется меню GRUB, необходимо нажать `e`, чтобы попасть в настройку загрузки
2. В строке загрузки ядра, которая начинается со слова `linux` в конец добавить `rd.break`, затем нажать Ctrl+x, для применения сделанных настроек и загрузки системы (внесенные изменения действуют только в текущей сессии загрузки)
3. После появления приглашения консоли необходимо получить доступ к образу системы
```bash
mount -o remount,rw /
```
Теперь можно изменить пароль root
```bash
passwd
```
будет предложено ввести новый пароль дважды.
Всё, после перезагрузки, у root будет новый пароль.
*для перезагрузки в данном режиме необходимо дважды ввести `reboot -f` или Ctrl+d*
```bash
reboot -f
```
[вверх](#linux-useful)
***
## Проверить доступность диапазона хостов
```bash
for i in {10..13}; do ping -c 2 192.168.1.$i > /dev/null && echo 192.168.1.$i - доступен || echo 192.168.1.$i - НЕ доступен; done
```
```bash
[da2001@co1 ~]$ for i in {10..13}; do ping -c 2 192.168.1.$i > /dev/null && echo 192.168.1.$i - доступен || echo 192.168.1.$i - НЕ доступен; done
192.168.1.10 - доступен
192.168.1.11 - доступен
192.168.1.12 - доступен
192.168.1.13 - НЕ доступен
```
[вверх](#linux-useful)
***
## Конвертировать pdf в png
```bash
pdftoppm input.pdf outputname -png
```
*в результате каждая страница в PDF будет сохранена в формате outputname-01.png, где 01 будет номером страницы*
**Конвертировать одну страницу или диапазон**
```bash
pdftoppm input.pdf outputname -png -f {page} -singlefile
```
*Измените `{page}` на номер страницы. Он проиндексирован как 1, поэтому `-f 1` будет первой страницей.*
*Если вы хотите работать с диапазоном страниц, вы также можете указать номер для флага `-l` (последняя страница), поэтому при использовании `-f 1 -l 30` будут указаны страницы от 1 до 30.*
**Указать разрешение преобразованного изображения**
*Разрешение по умолчанию для этой команды составляет 150 точек на дюйм.*
*Чтобы увеличить разрешение преобразованного PDF-файла, добавьте параметры `-rx` {разрешение} и `-ry` {разрешение}.*
```bash
pdftoppm input.pdf outputname -png -rx 300 -ry 300
```
[вверх](#linux-useful)
***
## Узнать загрузку процессора определённым процессом
**ps**
*по имени процесса*
```bash
ps -C iperf -o %cpu=
```
*по номеру процесса*
```bash
ps -p 23635 -o %cpu=
```
или
```bash
ps -p $(pgrep iperf) -o %cpu=
```
**top**
```bash
top -b -n 2 -d 0.2 -p PID_ID | tail -1 | awk '{print $9}'
```
**Нагрузить процессор для проверки**
```bash
cat /dev/zero > /dev/null
```
[вверх](#linux-useful)
***
## Определить страну, город и др. детали по IP
```bash
curl -s "https://ifconfig.co/json?ip=$1" | jq -r '.country, .city, .hostname, .asn_org'
```
или функция
```bash
getip() {
curl -s "https://ifconfig.co/json?ip=$1" | jq -r '.country, .city, .hostname, .asn_org'
}
```
[вверх](#linux-useful)
## Отобразить файл без комментариев и путых строк
```bash
grep -vE '(^[[:space:]]*([#;!].*)?$)' file
```
[вверх](#linux-useful)
## Изменить консольный редактор по-умолчанию
```shell
which nano
/usr/bin/nano
export EDITOR=/usr/bin/nano
```
[вверх](#linux-useful)
## Перенос строк в nano
Для включения переноса строк в текщум редакторе необходимо нажать `Esc` + `$`.
обозначение `Esc` + `$` означает нажатие и отпускание `Esc`, а затем нажатие `$`.
Тогда полная последовательность нажатий клавиш будет `Esc`, `Shift+4`
[вверх](#linux-useful)