Поиск в 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
ncdu / - удобный просмотр сколько занимает места файлы/папки и поддиректории, ключ -x исключит из поиска смаунтированные директории
Архивирование в 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 root@server.ru:/backups/ - скопировать по scp папку photos в директорию backups на сервере
scp -r root@server.ru:/backups/photos /home/lepkov/ - скопировать по scp папку photos с сервера в директорию /home/lepkov/ на локальном хосте
rsync -avr /source/folder/ /target/folder - копирование/синхронизация файлов локально и удаленно
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
>>>>> Настройка 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 {} \;
Многозадачность в SSH сессии Linux
ssh username@ip_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 с нумерацией
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 30.03.2022
Свежие комментарии