## Linux useful

###### top
[Текущая директория сервера в браузере по адресу `http://server_ip:8000/`](#tip001)  
[Запустить графическое приложение через ssh соединение `-Y`](#tip002)  
[Отобразить все группы пользователя](#tip003)  
[SSH соединение через промежуточный хост](#tip004)  
[SSH соединение без проверки подлинности ключа и его сохранения](#tip005)  
[Изменить первичную группу пользователя в текщем сеансе](#tip006)  
[Сохранить man в pdf](#tip007)  
[Прервать выполнение команды через 5 секунд](#tip008)  
[Инфо об ОС](#tip009)  
[Выполнить команду несколько раз в цикле](#tip010)  
[Конвертировать изоражения heic в jpg](#tip011)  
[Конвертировать jpg в pdf](#tip012)  
[получить UUID диска для монтирования](#tip013)  
[Сброс пароля root](#tip014)  
[Проверить доступность диапазона хостов](#tip015)  
[Конвертировать pdf в png](#tip016)  
[Узнать загрузку процессора определённым процессом](#tip017)  

***

###### tip001
:large_blue_circle: **Текущая директория сервера в браузере по адресу `http://server_ip:8000/`**  
```bash  
python -m SimpleHTTPServer  
```  

[вверх](#top)

***

###### tip002
:large_blue_circle: **Запустить графическое приложение через ssh соединение `-Y`**    
*для текущей сессии*    
```bash  
ssh -Y pi@server_ip  
```  
*для всех подключений*    
`ForwardX11 yes` в файле `/etc/ssh/ssh_config`    

[вверх](#top)

***

###### tip003
:large_blue_circle: **Отобразить все группы пользователя**  
```bash  
da2001@Metromint:~$ groups da2001  
da2001 : da2001 adm cdrom sudo dip plugdev kvm lpadmin sambashare wireshark libvirt  
```  

[вверх](#top)

***

###### tip004
:large_blue_circle: **SSH соединение через промежуточный хост**    
```bash  
ssh -t pi@192.168.89.2 ssh da2001@192.168.1.8  
```  
*сначала будет запрошен пароль от 192.168.89.2, затем от 192.168.1.8*  

[вверх](#top)

***

###### tip005
:large_blue_circle: **SSH соединение без проверки подлинности ключа и его сохранения**  
```bash  
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no admin@192.168.2.1  
```  

[вверх](#top)

***

###### tip006
:large_blue_circle: **Изменить первичную группу пользователя в текщем сеансе**  
```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*  

[вверх](#top)

***

###### tip007
:large_blue_circle: **Сохранить man в pdf**  
```bash  
man -t <программа> | ps2pdf - <filename>.pdf  
```  
  
```bash  
man -t tar | ps2pdf - tar_man.pdf  
```  

[вверх](#top)

***

###### tip008
:large_blue_circle: **Прервать выполнение команды через 5 секунд**  
```bash  
timeout 5s command  
```  

[вверх](#top)

***

###### tip009
:large_blue_circle: **Инфо об ОС**  
```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   
  
```  

[вверх](#top)

***

###### tip010
:large_blue_circle: **Выполнить команду несколько раз в цикле**  
```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  
```  

[вверх](#top)

***

###### tip011
:large_blue_circle: **Конвертировать изоражения 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  
```  

[вверх](#top)

***

###### tip012
:large_blue_circle: **Конвертировать 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" />  
```  

[вверх](#top)

***

###### tip013
:large_blue_circle: **получить 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
```

[вверх](#top)

***


###### tip014
:large_blue_circle: **Сброс пароля root**  
  
**CentOS/RedHat Linux**  
1. В самом начале загрузки системы, когда появляется меню GRUB, необходимо нажать `e`, чтобы попасть в настройку загрузки  
2. В строке загрузки ядра, которая начинается со слова `linux` в конец добавить `rd.break`, затем нажать Ctrl+x, для применения сделанных настроек и загрузки системы (внесенные изменения действуют только в текущей сессии загрузки)  
3. После появления приглашения консоли необходимо получить доступ к образу системы  
```bash  
mount -o remount,rw /sysroot  
```  
4. Изменить корневой каталог  
```bash  
chroot /sysroot  
```  
5. Теперь можно изменить пароль root  
```bash  
passwd  
```  
будет предложено ввести новый пароль дважды.  
6. Поскольку на ранней стадии загрузки SELinux еще не был активирован, тип контекста в `/etc/shadow` будет перепутан. Если сейчас перезагрузиться, никто не сможет войти в систему. Поэтому необходимо убедиться, что тип контекста установлен правильно. Для этого на этом этапе нужно загрузить политику SELinux с помощью команды  
```bash  
load_policy -i  
```  
7. Теперь нужно вручную установить правильный тип контекста в `/etc/shadow`.  
```bash  
chcon -t shadow_t /etc/shadow  
```  
**вместо 6,7 пунктов можно просто в корне создать файл `.autorelabel`**  
```bash  
touch /.autorelabel  
```  
  
8. Всё, после перезагрузки, у root будет новый пароль.  
*для перезагрузки в данном режиме необходимо дважды ввести `reboot -f` или Ctrl+d*  
```bash  
reboot -f  
```  
  
**Debian**  
1. В самом начале загрузки системы, когда появляется меню GRUB, необходимо нажать `e`, чтобы попасть в настройку загрузки  
2. В строке загрузки ядра, которая начинается со слова `linux` в конец добавить `rd.break`, затем нажать Ctrl+x, для применения сделанных настроек и загрузки системы (внесенные изменения действуют только в текущей сессии загрузки)  
3. После появления приглашения консоли необходимо получить доступ к образу системы  
```bash  
mount -o remount,rw /  
```  
4. Теперь можно изменить пароль root  
```bash  
passwd  
```  
будет предложено ввести новый пароль дважды.  
5. Всё, после перезагрузки, у root будет новый пароль.  
*для перезагрузки в данном режиме необходимо дважды ввести `reboot -f` или Ctrl+d*  
```bash  
reboot -f  
```  

[вверх](#top)

***

###### tip015
:large_blue_circle: **Проверить доступность диапазона хостов**  
```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 - НЕ доступен  
```  

[вверх](#top)

***

###### tip016
:large_blue_circle: **Конвертировать 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
```

[вверх](#top)

***

###### tip017
:large_blue_circle: **Узнать загрузку процессора определённым процессом**  
**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
```

[вверх](#top)
