Памятка по Linux

Содержание

Общие команды

# Проверка соединения с ya.ru по порту 443:

nc -v ya.ru 443

# Проверка конфига nginx:

nginx -t

# Debian-like удалить конфиги от деинсталленых пакетов

dpkg -l|grep -E \^rc|awk '{ print $2}'|xargs -i apt purge -y {}

# Отлов ошибок в ОС

## Сбойные демоны
systemctl --failed
## Варнинги и хуже с момента старта системы
journactl -b0 -p warning

# Выборка хостов из списка текущих подключений, исключая SSH и ZabbixAgent

sudo ss -ntua|grep -vE 10050|\:22|awk '{ print $6 }'|sort -u|grep ^10\.|sed 's|^([0-9.])\:.$|\1|'|xargs -I{} -n1 host {}
### где grep ^10\. - вырка подсетей 10.X.X.X

# Смена пароля на ключе RSA

ssh-keygen -p -f ~/.ssh/id_rsa

# проверка пакетов не из реп Дебиана

sudo aptitude search '~i(!~ODebian)'

# Посчитать соединения по статусу:

netstat --numeric --tcp | tail --lines +3 | \ awk "{n[\$6]++} END { for(k in n) { print k, n[k]; }}"

# Вытащить логи nginx за дату/время в файл:

sudo more /var/log/nginx/*.log|egrep -a1 "2018.*24.*0[89]:[0-9]|24.*2018.*0[89]:[0-9]|:::::">nginx_folder.log
(more всех *.log из папки nginx с выборкой 2018 года и ("08:num" или "09:num") времени, оставив "::::" оглавлений. -a1 - оставлять следующую строку после найденого, чтоб осталось имя файла лога. условие выборки времени дважды из-за разных форматов времени год-дата и дата-год)

# Вывести список дисков с разметкой по точке монтирования:

lsblk -sf -o MOUNTPOINT,NAME,FSTYPE,SIZE

# Закомментировать определенную строку в файле, оставив пробелы отступа:

sudo sed -i 146 s/^\([ ]*\)/\1#/g /usr/lib/python3/dist-packages/salt/roster/ansible.py

Поиск и замена значения в секции конфига (ini фомат)

sed -i "/\[PrintImagePlugin\]/,/\[.*\]/s!on = True!on = False!" some.conf

Секция /\[PrintImagePlugin\]/,/\[.*\]/ задает диапазон строк замены от начала определенной секции до произвольной следующей.

Найти файлы и линки resolve.conf и вывести инфу и содержание без коментов:

sudo find / \( -type f -o -type l \) -name *resolv.conf -print | xargs -i sh -c 'echo --------------;ls -l {}; egrep -v "^$|^#" {}'

Сочетание xargs с sh -c дают выполнение нескольких команд с одним набором аргументов

# Наблюдение за выводом команды:

watch sudo cat /var/log/openvpn-status.log
(следить за изменением файла openvpn-status.log - в реальном времени смотреть кто подключается и отключается к VPN)

# Проверить занимаемое место подкаталогами в каталоге:

du -hd1 
(h - человекочитаемый формат; d1 - задаем глубину просмотра в 1 уровень)
du -hd1|sort -rh
#Вариант с сортировкой результатов (ключи sort: r - реверсивная сортировка; h - сортировка читабельных форматов 1K, 2,5G)

# Проверка работы счётчика неудачных попыток ввода пароля пользователя:

pam_tally2 -u %username%
# вывод информации о количестве попыток ввода пароля пользователем
pam_tally2 -r - сбросить счётчик

# Заведение linux-овой машины в домен windows:

net ads join -U %adminname% -D %domainname%

# Проверка соединения с доменом:

net ads testjoin

# Выполнение команды от имени другого пользователя:

su -l %username% %cmd%
sudo -u %username% %cmd%

# Выдача прав на открытие и чтение на каталог для отдельного пользователя с использованием access control lists (ACL):

setfacl -m user:%username%:rx /%directoryname%

# Выдача прав на чтение на файл для отдельного пользователя с использованием access control lists (ACL):

setfacl -m user:%username%:r /%directoryname%/%filename%

# Выдача прав на чтение на файлы в каталоге для отдельного пользователя с использованием access control lists (ACL):

setfacl -R -m user:%username%:rX /%directoryname%

# Вывод содержимого файла за исключением закомментированных и пустых строк:

grep -Ev '^#|^$' [имя файла] 
cat [имя файла] | grep -Ev '^#|^$'
cat [имя файла] | egrep -v '^#|^$'
egrep -v "^[[:space:]]*#|^[[:space:]]$"
grep -vE '^\s*#|\s$' # более короткая запись прошлого варианта

# Исправление окончания строк в конфигах win->unix

sed $'s/\r$//'     # DOS to Unix
sed $'s/$/\r/'     # Unix to DOS
# вариант с поиском:
find [a-z]* -type f | xargs sed -i 's/\r$//'

Добавление пакета в кастомный репозиторий

reprepro -b /repo/custom-repo/ -C main includedeb xenial ~/nginx_1.15.6-1~xenial-client_amd64.deb 

Подключение HDD к Linux-based виртуальной машине «на лету»

1. Создать виртуальный HDD с требуемыми параметрами в веб-интерфейсе VMware vSphere.

2. Авторизоваться на требуемом сервере.

3. Найти необходимый идентификатор scsi_host:

ls -la /sys/class/scsi_host

4. Выполнить повторное сканирование шины SCSI, чтобы заставить виртуальную машину перечитать все прикрепленные HDD:

echo "- - -" > /sys/class/scsi_host/host#/scan

5. Отобразить добавленный HDD:

fdisk -l

6. Проверка подключения нового HDD по логам системы

tail -f /var/log/messages

должна показать в выводе команды:

sd 32:0:1:0: [sdb] 104857600 512-byte logical blocks: (53.7 GB/50.0 GiB)
sd 32:0:1:0: Attached scsi generic sg2 type 0
sd 32:0:1:0: [sdb] Write Protect is off
sd 32:0:1:0: [sdb] Cache data unavailable
sd 32:0:1:0: [sdb] Attached SCSI disk

7. На новом HDD создать таблицу разделов:

fdisk /dev/sdb
g
n
w

8. И файловую систему:

mkfs.ext4 /dev/sdb1

9. Создать точку монтирования:

mkdir /mount-point

10. Отредактировать fstab:

vi /etc/fstab

добавив в конфигурацию строку:

/dev/sdb1       /mount-point      ext4    defaults        0       2 

11. Монтировать созданный раздел:

mount /dev/sdb1 /mount-point 

Изменение размера диска LVM «на лету»

1. Увеличиваем размер диска виртуальной машины в vSphere Client

2. Делаем рескан размера всех дисков:

echo 1 > /sys/class/scsi_disk/*/device/rescan

Либо вместо * подставляем ID нужного диска.

3. Убеждаемся что размер диска изменился:

fdisk -l

4 Изменяем партишины по одному из вариантов

4.1 Вариант расширения существующих разделов:

4.1.1 Расширяем партишины:

4.1.1.1 С помощью growpart:

growpart /dev/sda 2

где 2 — номер раздела (sda2 => /dev/sda 2)

Если у нас вариант с вложенными разделами (видно через cfdisk либо fdisk -l) то сначала расширяем Extended диск, а потом внутренний раздел:

growpart /dev/sda 2
growpart /dev/sda 5

4.1.1.2 С помощью parted: Запускаем от рута parted.

Внутренние команды:

print - посмотреть статус разделов
resizepart 2 - расширить раздел 2 (если есть extended раздел - расширяем сначала его)
quit - выйти

4.1.2 Расширяем группу физических томов:

pvresize /dev/sda2 (или sda5 в случае вложенности)

4.2 Вариант добавления партишина в группу физических томов:

4.2.1 Запускаем утилиту cfdisk на нужном диске:

cfdisk /dev/sda

Видим неразмеченную область диска.

В открывшемся окне выбираем Free Space (свободное пространство) и нажимаем опцию New — создать новый раздел из свободного пространства. Будет предложен размер нового раздела, принимаем значение по умолчанию (используется все свободное место), нажав Enter.

Теперь необходимо изменить тип раздела на Linux LVM, для этого выбираем опцию Type и 8e — шестнадцатеричный код типа Linux LVM.

Далее сохраняем изменения с помощью опции Write. Запоминаем номер созданного раздела, например /dev/sda3.

Появится вопрос о записи таблицы разделов на диск, подтверждаем действие, введя слово yes.

Далее выходим из утилиты cfdisk.

4.2.2 Сообщаем ядру о внесенных изменениях:

partx -v -a /dev/sda

Помимо всего прочего видим запись:

/dev/sda: partition #3 added

4.2.3 Инициализируем раздел:

pvcreate /dev/sda3

4.2.4 Добавляем раздел к существующей VolumeGroup:

vgextend COMP-IMAG-4-vg /dev/sda3 

5. Расширяем логический том:

lvextend -l +100%FREE /dev/mapper/COMP--IMAG--4--vg-root 

6. Расширяем файловую систему:

resize2fs /dev/mapper/COMP--IMAG--4--vg-root 

7. Проверяем что размер увеличился:

df -Th

PS Все изменения можно контролировать командами:

lsblk - вывести список блочных устройств (а харды именно такие) 
vgs - информация о группах томов lvm
pvs - информация о физических томах lvm
lvs - информация о логических томах lvm
fdisk -l df -h - свободное место в человекочитаемом формате (ключ -T выведет еще и тип ФС)