Поиск в Linux

Поиск в текущей директории . с максимальной вложенностью директорий 999, файла, с правами 0777, именем index.php, старше одного дня, к которым обращались более двух дней и размером меньше 2 мегабайт с обработкой каждого вхождения и добавления к нему строка Found и с выводом в лог

find . -maxdepth 999 -type f -perm 0777 -mtime +1 -atime +2 -size -2M -name 'index.php' -exec echo "Found" {} \;> /home/lepkov/result.log 

locate "*.php" - моментальный поиск по кешу файловой системы, найти все файлы, содержащие в имени "*.php". Предварительно прогнать updatedb
Не на SSD надо ставить mlocate, который делает locate легким и быстрым
whereis asterisk - выведет список мест, где находятся бинарные файлы, исходные коды и руководства с названием asterisk
which apache2 - покажет по какому пути расположен исполняемый файл apache2
type nginx - определить что из себя представляет указанная команда, алиас, файл, функция, встроенная команда или ключевое слово
grep port /etc/mysql/my.cnf - из файла отобрать и вывести в консоль строки содержащие "port"
grep ^port /etc/mysql/my.cnf - из файла отобрать и вывести в консоль строки начинающиеся на "port"
grep -r string- просканирует в текущей директории содержимое всех файлов на наличие строки string
lsof | grep sshd - узнать какие файлы использует SSH
lsof -p 98989 - список файлов, открытых процессом с указанным PID
lsof /home/lepkov - список открытых файлов из директории /home/lepkov

Архивирование в Linux

tar -cvf lepkov.tar /home/lepkov/ - Создать архив директории /home/lepkov/ в формате tar, где: c – Creates a new .tar archive file. v – Verbosely show the .tar file progress. f – File name type of the archive file.
tar -cvzf lepkov.tar.gz /home/lepkov/ - То же самое, в формате .gz
tar -xvf lepkov.tar -C /home/lepkov - Разархивировать с указанием директории, если не указывать, разархивируется в текущую
gzip -9 /home/lepkov/file - Сжать файл в .gz с максимальным сжатием
gunzip /home/lepkov/file - Разжать файл

Сервисы / Службы / Демоны в Linux

systemctl list-units --type=service - Все сервисы (юниты) в systemD
service --status-all - Все сервисы в systemV
systemctl enable|disable mysql - Разрешить или запретить автозапуск сервиса в systemD
service mysql enable|disable - Разрешить или запретить автозапуск сервиса в systemV
systemctl status|stop|start|restart|reload|force-reload php5-fpm - Управление сервисами в systemD
service php5-fpm status|stop|start|restart|reload|force-reload - Управление сервисами в systemV

Информация о пользователях и системе в Linux

whoami или echo $USER- выведем имя юзера
groups - выведет группы пользователя
id - выведет User IDentifier, его имя, Group IDentifier и группы данного юзера с их GID
(Обычно первая сотка/тысяча юзеров зарезервирована для системных)
В /etc/passwd записываются UIDs пользователей
В /etc/groups записываются GIDs пользователей
last - список последних логинов в систему
last reboot - список перезагрузок хоста по времени
last user1 - отобразить историю регистрации пользователя в системе и время его нахождения в ней
w - показывает активные сессии (дата, время, ip, простой, сколько было потреблено процессорного времени и что выполняет)
echo $XDG_CURRENT_DESKTOP - узнать какая графическая оболочка
hostname - выведет имя хоста, hostname -i - IP адреса
uname -a - выводит ОС, версию ядра, архитектуру и дату сборки, процессор, лицензию и так далее, т.е. вся информация о системе, сборке или lsb_release -a или пакет neofetch с полной информацией о системе или cat /etc/os-release
dmidecode - информация о железе
free -w -t --mega - выводит данные об использовании ОЗУ и swap в мегабайтах (поле shared значит разделенная между процессами память, кэш это то, что часто используется и хранится, буфер это то, что приготовлено для записи, кэш и буфера это условно свободная память)
date - полная дата с часовым поясом
ifconfig -a - Настройки всех сетевых адаптеров
ip addr show - Список всех сетевых интерфейсов и связанных IP-адресов
wget -qO- eth0.me - Узнать внешний IP
uptime
man ls 
- документация/инструкция по указанному пакету

Информация о дисках и директориях в Linux

lsblk -a - Информация о разделах, размерах всех дисков, типе ФС и точках монтирования
blkid - Информация о BLOCK_SIZE, UUID, LABEL, TYPE (файловая система) разделов
file -s /dev/hda1 - узнать тип файловой системы
fdisk -l - Подробно о дисках (размер сектора, тип разметки, ID) и его разделах (секторы, размер, тип ФС)
df -h (diskfree) - информация об использовании смонтированных файловых систем (смонтированное устройство, точка монтирования, размер (Всего, использовано, Доступно, %Использования))
df -i - показывает количество inode
du -sh /home/lepkov - Сколько весит директория, без указания директории покажет вес текущей
ncdu /home/lepkov - Сколько весит директория с подпапками и файлами внутри наглядно (надо устанавливать)
findmnt - показать все точки монтирования, их источники, тип ФС и их параметры
Размер установленных пакетов в килобайтах для Debian, Ubuntu:

dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -n

Размер установленных пакетов в килобайтах для Fedora, redhat, CentOS:

rpm -q -a --qf '%{SIZE}\t%{NAME}\n' | sort -n

Файловые системы и диски в Linux

badblocks -v /dev/hda1 - проверить hda1 на наличие bad блоков
mkfs -t ext4 /dev/hda1 или mkfs.ext4 /dev/hda1 - создать файловую систему ext4 (ext2 без опций, FAT*, NTFS, ext*, APFS, HFS*), ключ -c проверит перед созданием ФС на наличие bad block, ключ -v (verbose) отобразит всё подробно)
fsck.ext4 /dev/hda1 - проверить/восстановить целостность указанной файловой системы Linux
smartctl -i /dev/hda1 - проверить доступность смарта указанного диска
smartctl -А /dev/hda1 - контроль состояния смарта указанного диска

dd if=/dev/sda | dd of=/dev/sdb - посекторное клонирование диска sda на диск sdb, отличный вариант для клонирования псевдорейдов, где таже CloneZilla умывает руки, а ещё через пайп в 2 раза быстрей, объяснение тут

Монтирование файловых систем в Linux

mount -a - смонитровать все точки из файла /etc/fstab
mount /dev/hda2 /mnt/hda2 - монтирует раздел /dev/hda2 в /mnt/hda2
mount /dev/cdrom /mnt/cdrom - монтировать cd или dvd
mount -o loop file.iso /mnt/cdrom - монтировать ISO-образ
mount -t vfat /dev/hda2 /mnt/hda5 - монтировать файловую систему Windows FAT32
mount -t ntfs /dev/hda3 /mnt/hda6 - монитровать файловую систему Windows NTFS
mount -t smbfs -o username=user,password=pass //winclient/share /mnt/share - монтировать сетевую файловую систему Windows (SMB/CIFS)
mount.cifs //192.168.1.1/share /mnt -o user=user,domain=domain.local,vers=3.0,file_mode=0777,dir_mode=0777 - монтировать сетевую файловую систему Windows (SMB/CIFS) с определенными правами
mount -o bind /home/user/prg /var/ftp/user - монирует директорию в директорию, полезно, когда симлинки сделать невозможно
umount /dev/hda2 - размонтирует раздел из /mnt/hda2
umount -n /mnt/hda2 - размонтирует раздел из /mnt/hda2, не внося информацию в /etc/mtab? полезно, когда файл имеет расширение только для чтения или недостаточно места на диске
fuser -km /mnt/hda2 - принудительное размонтирование раздела, даже если он занят

Работа с файлами в Linux

Операции с файлами в Linux

pwd (print working directory) - текущая активная директория
mkdir -p /home/lepkov/photos/25.11.1993 - создать цепочку папок
cd /home/lepkov/photos - перейти в выбранную директорию, cd .. - подняться на уровень выше, cd - перейти в домашнюю директорию
ls -lha /home/lepkov/photos - отобразить все файлы, скрытые и системные, в указанной директории
lsattr - показать атрибуты файлов
cp file file.backup - скопировать файл в новый с расширением backup
cp -r /home/lepkov/photos /backups/ - скопировать рекурсивно photos в backups
time cp /home/alepkov /backups/ - замерить производительность операции, скрипта
scp -r /home/lepkov/photos [email protected]:/backups/ - скопировать по scp папку photos в директорию backups на сервере
scp -r [email protected]:/backups/photos /home/lepkov/ - скопировать по scp папку photos с сервера в директорию /home/lepkov/ на локальном хосте
rsync -avr /source/folder/ /target/folder - копирование/синхронизация файлов локально и удаленно

>>>>> Шпаргалка по RSYNC

mv file /backups/file.backup - перенести файл
rm file - удалить файл, rm -r /home/lepkov/photos - удалить рекурсивно папку rm -rf /home/lepkov/photos - принудительно удалить директорию без подтверждения
ln -s /path/to/file link_name - создать символическую ссылку (софтлинк, симлинк, ярлык) на указанный файл ln /path/to/file link_name - создать хардлинк (хардлинк это не ярлык, а новый адрес файла, изменяя атрибуты хардлинка, изменяется сам файл)
touch file или nano file - создать файл
cat file - вывести в консоль всё содержимое file, ключ -n выведет с номерами строк
tac file - вывести в консоль всё содержимое file НАОБОРОТ
more file - вывести в консоль всё содержимое file и постранично скролить пробелом
head -n 10 file - вывести первые 10 строк файла
tail -n 10 file - вывести последние 10 строк файла
paste -d '|' file1 file2 - сопоставить в двух столбцах строки из file1 и file2 и вывести в консоль
sed 's/что_заменить/чем_заменить/g' file.txt - заменить в файле указанные строки на указанные, вывести в консоль, файл не меняется
sort file1 file2 | uniq -u - отобразить только неповторяющиеся строки в обоих файлах
sort file1 file2 | uniq -d - отобразить только повторяющиеся строки в обоих файлах
wc file - посчитать количество слов, строк и байт в файле
mc - удобный псевдографический файловый менеджер
nano -l$ file- удобный текстовый редактор с переносом строк и нумерацией строк

Специальные атрибуты файлов Linux
chattr +i – сделать файл защищенным от изменений, добавив специальный бит, chattr -i – убрать защиту
chattr +a – позволяет открывать файл на запись только в режиме добавления
chattr +s – сделает невосстановимым после удаления, место заполнится нулями
chattr +u – сделает легко восстановимым после удаления
chattr +d – указывает утилите dump игнорировать этот файл во время создания резервной копии
chattr +с – позволяет ядру автоматически сжимать/разжимать содержимое файла
chattr +S – при сохранении будет произведена синхронизация, как при выполнении команды sync
Nano Hotkeys
  • Ctrl+G – Все горячие клавиши
  • Ctrl+W – Поиск
  • Alt+W – Повторный поиск без диалога
  • Ctrl+Y – Страница назад
  • Ctrl+V – Страница вперед
  • Ctrl+K – Удалить строку
  • Ctrl+O – Сохранить
  • Ctrl+X – Выход
  • Alt+| или Alt+\ – В начало файла
  • Alt+/ или Alt+? – В конец файла
  • Alt+U – Действие назад
  • Alt+E – Действие вперед

Управление пользователями и группами в Linux

>>>>> Настройка SSH авторизации по ключу / сертификату

useradd -m lepkov - создать пользователя lepkov (создаст /home/lepkov и в etc/passwd)
useradd -c "new user" -g admin -d /home/lepkov -s /bin/bash lepkov - создать пользователя lepkov, добавить в группе admin, назначить домашний каталог /home/lepkov и назначить оболочку bash
userdel -r USER - удалить пользователя и его домашний каталог
passwd lepkov - задать/изменить пароль указанному юзеру
cat /etc/passwd | grep lepkov - вывести информацию о пользователе, его группах, папках
userdel lepkov - удалить пользователя
usermod -aG sudo lepkov - добавить пользователя в группу sudoers
Можно сразу убрать запрос пароля на эскалацию привелегий:
echo "lepkov ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/lepkov
usermod -c "FTP User" -g system -d /ftp/user -s /bin/nologin USER - изменить атрибуты USER, забрать оболочку, переназначит домашнюю директорию, добавить в группу и изменить комментарий
usermod lepkov - изменение пользователя
chage -E 2022-12-31 USER - назначить время окончания действия учетной записи USER

groupadd group_name - добавить группу group_name
groupdel group_name - удалить группу group_name
groupmod -n new_group_name old_group_name - переименовать группу old_group_name в new_group_name

pwck - проверить корректность /etc/passwd и /etc/shadow
grpck - проверить корректность /etc/group

Управление правами доступа в Linux

chown lepkov: file - сделать пользователя и группу lepkov владельцами файла file (не опечатка, это сокращенный вариант)
chown -R lepkov: /home/lepkov - рекурсивно сделать пользователя и группу lepkov владельцами директории, поддиректорий и файлов /home/lepkov

CHMOD

chmod -R u+rwx /home/alepkov
chmod -R g-rwx /home/alepkov
chmod -R o-rwx /home/alepkov

или

chmod -R 700 /home/alepkov

Права 755 на все папки и подпапки текущей директории

find . -type d -exec chmod 755 {} \;

Права 644 на все файлы и файлы в подпапках текущей директории

find . -type f -exec chmod 644 {} \;
Права доступа в Linux
r – чтение;
w – запись;
x – выполнение;
s – выполнение от имени суперпользователя (дополнительный);
Категории пользователей Linux
u – владелец файла;
g – группа файла;
o – все остальные пользователи;
Примеры настройки прав доступа в Linux
u+x – разрешить выполнение для владельца;
ugo+x – разрешить выполнение для всех;
ug+w – разрешить запись для владельца и группы;
o-x – запретить выполнение для остальных пользователей;
ugo+rwx – разрешить все для всех;
Права доступа в Linux в цифрах
0 – никаких прав;
1 – только выполнение;
2 – только запись;
3 – выполнение и запись;
4 – только чтение;
5 – чтение и выполнение;
6 – чтение и запись;
7 – чтение запись и выполнение.
Примеры настройки прав доступа с цифрами в Linux
744 – разрешить все для владельца, а остальным только чтение;
755 – все для владельца, остальным только чтение и выполнение;
764 – все для владельца, чтение и запись для группы, и только чтение для остальных;
777 – всем разрешено все.

Многозадачность в SSH сессии Linux

ssh [email protected]_address -p 22 - подключиться по ssh, ключ -p опционален 
^Z (Ctrl+Z)
- остановить и увести текущую программу в фон
bg - продолжить её выполнение в фоне
fg - достать программу из фона
jobs - посмотреть список фоновых задач
fg N - достать задачу номер N

Работа с текстовыми файлами в Linux

Вывод последних 10 строк из лога каждую секунду для наблюдения в реальном времени

tail -f -s 1 -n 10 /var/log/nginx/error.log

То же самое с помощью watch

watch -n 1 tail -n 10 /var/log/nginx/error.log

Системный журнал по сервису cron в реальном времени за сегодня с выводом последних 10 строк

journalctl -u cron.service -f -n 10 --since today --no-pager

Удаляем пустые строки из файла:

sed '/^$/d' file.txt

Удаляем дубли строк (для анализа логов помогает):

awk '!seen[$0]++' file.txt > file_new.txt

Удаляем все пробелы и символы табуляции в начале каждой строки файла (помогает чистить конфиги):

sed 's/^[ \t]*//' extensions.conf > extensions.conf.new

Удаляем строки, где знак комментария ; стоит в начале строки (то же самое, помогает чистить конфиги, особенно астериска):

sed '/^;/d' sip.conf
grep -E -v ';|^$' php.ini

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

grep -ve '^[­[:space:]]*\(#\|$\|;\)' filename

Вывести строки, начиная с третьей (в костылях с мониторингом помогает):

awk 'NR > 3' file.txt

Вырезаем первую и последнюю строки (то же самое, для мониторинга обычно надо):

cat file.txt | awk 'NR > 1' | head -n-1

Выполняем команду cat file.txt 5 раз (в консоли пригождается):

for n in {1..5}; do cat file.txt; done

Удаление последнего или двух последних символов в строках (какой-то мусор в строках удобно убирать):

sed 's/.$//' file.txt
sed 's/..$//' file.txt

Удаление первого или двух первых символов в строках (то же самое):

sed 's/^.//' file.txt
sed 's/^..//' file.txt

Находим все строки с hello=какое-то значение и меняем на hello=1000:

cat file.txt | sed 's/^hello=.*/hello=1000/g' > file_new.txt

Находим все строки с admin: и удаляем их (часто пригождалось, когда менял права доступа на линуксовых шарах, предварительно выгрузив их):

sed '/admin:/d' file.acl > file_new.acl

Заменяем все вхождения строки search на replace:

sed 's/search/replace/g' file.txt > file_new.txt

Заменить рекурсивно текст во всех файлах:

grep 'надо поменять' -P -R -I -l * | xargs sed -i 's/надо_поменять/меняем_на_это/g'

Работа с процессами в Linux

htop - удобный диспетчер задач в реальном времени с нагрузкой, подсветкой, сортировкой, фильтрацией, завершением процессов

pstree -p - Вывести процессы в виде дерева c PID
kill [process id] - Убить процесс по айди, ключ -9 убьёт сразу
pkill [process name] - Убить процесс по имени
killall [process name]  - убить все процессы с указанным именем

Убить все процессы содержащие строку myProcessName

ps -ef | grep 'myProcessName' | grep -v grep | awk '{print $2}' | xargs -r kill -9

Выводим процессы астериска (или любого другого), а лучше в htop фильтр F4

ps -auxw | grep "asterisk"

Считаем количество процессов nodejs (или любого другого):

ps ax | grep "nodejs" | wc -l

Считаем количество процессов в системе и выводим 5, которые запустили больше всего экземпляров:

ps -ef | awk '{ print $8 }' | sort -n | uniq -c | sort -n | tail -5

Анализ сети в Linux

Скачать файл из интернета  в текущую директорию

wget https://download.onlyoffice.com/install/workspace-install.sh

>>>>> Шпаргалка по маршрутам в Windows и Linux

iptables -L -v -n - Все правила iptables
iptables -t nat -L -v -n - Правила NAT в iptables
(Тут будет шпаргалка по iptables)
ufw status numbered - Все правила ufw с нумерацией

>>>>> Шпаргалка по UFW

netstat -pnltu - Посмотреть какие порты слушаются
netstat -nutlp - TCP и UDP порты и их программы
host lepkov.ru - DNS записи указанного домена в удобном виде или подробней dig lepkov.ru ANY
tcpdump tcp port 80 - отобразить весь трафик на TCP порт 80 (http)
traceroute lepkov.ru - трассировка маршрута до указанного хоста, аналог tracert в Windows
curl -LI https://lepkov.ru/ - Получить ответ-заголовки от сайта
Подсчет подключений с каждого IP. Если сервер публичный и вы видите, что он тормозит, первое, что стоит проверить, это количество подключений к нему.

netstat -ntu | awk '{print $5}' | grep -vE "(Address|servers|127.0.0.1)" | cut -d: -f1 | sort | uniq -c | sort -n| sed 's/^[ \t]*//'

Чаще всего имеет смысл сразу же исключить из списка адреса с малым количеством подключений. Например, можно вывести только те ip, с которых более 10-ти подключений. Для этого к предыдущей команде надо добавить небольшое дополнение

| awk '{if ($1 > 10 ) print$2}';

Подсчет запросов к веб серверу с разных IP. Если вас какой-то бот спамит запросами к веб серверу, то похожим образом можно быстро вычислить его по записям в логе.

tail -1000 /var/log/nginx/access.log | awk '{print $1}' | sort -n | uniq -c | sort -n | tail -n100 | awk '{if ($1 > 10 ) print $2}'

Рекомендую обрабатывать только часть лога, так как если он очень большой, можете подвешивать сервер своими запросами. Здесь взяты последние 1000 строк. Если надо весь файл проанализировать, используйте вместо tail команду cat.

cat /var/log/nginx/access.log | awk '{print $1}' | sort -n | uniq -c | sort -n | tail -n100 | awk '{if ($1 > 10 ) print $2}'

Список установленных соединений с сервером. Бывает нужно, когда есть подозрения на взлом и какую-то паразитную активность. В этом примере не вычисляется количество соединений, а просто приводится список уникальных ip адресов, с которыми установлено соединение.

netstat -lantp | grep ESTABLISHED | awk '{print $5}' | awk -F: '{print $1}' | sort -u

При необходимости можно сделать подсчет соединений из примеров прошлых команд.
Список tcp соединений. Это то же самое, что было в прошлой команде, но мне вывод больше нравится. Более наглядный, если смотреть его весь.

lsof -ni

Список всех активных входящих сокетов unix. Этой командой я не видел, чтобы особо пользовались, но по факту бывает быстрее через нее посмотреть открытый сокет, нежели каким-то другим способом. Например, сразу смотрим, запустился ли нужный нам сокет php-fpm.

netstat -lx | grep php-fpm

Кстати, то же самое можно смотреть и через ss, но лично мне вывод netstat просто больше нравится, особенно если смотришь его полностью глазами. Можете сами сравнить. Те же сокеты с помощью ss:

ss -xa

Остановка работы Linux

shutdown - нормально завершение работы через минуту с уведомление других пользователей, можно добавить now или минуты, как и к другим командам
reboot (shudown -r) - перезагрузка
halt - остановить систему (устаревшее)
poweroff (shudown -r) - выключение
shutdown -c - отменит любое запланированное завершение работы

Ссылки

Незаменимый инструмент, он покажет, что будет любая команда в BASH, рекомендую
Тут можно найти самые популярные Oneliner'ы
Ещё Oneliner'ы
Много команд взято отсюда, отличный паблик btw
UPDATED 09.10.2021

Поделиться