Skip to content

Instantly share code, notes, and snippets.

@avtobys
Last active November 15, 2023 16:06
Show Gist options
  • Save avtobys/9d8a15fc6a4da8846dcc0f2d3933daad to your computer and use it in GitHub Desktop.
Save avtobys/9d8a15fc6a4da8846dcc0f2d3933daad to your computer and use it in GitHub Desktop.
linux commands cli
# ---------------------------------------- файловая система
du -s -b [dirname] # Занимаемый директорией dirname размер в байтах
du -s -b [dirname] | awk '{print $1}' # Отобразить только цифры без названия директории
du -h [dirname] # Размеры директории и всех подкаталогов
du -h [dirname] | sort -r -n # Тоже с сортировкой
du -sh [dirname] # Общий размер директории в удобочитаемом виде
du -sh ./* # Вес каталогов текущей директории
df -h # Информация о смонтированных разделах с отображением общего, доступного и используемого пространства
df -i # количество использованных inode
ls -laR | grep "^-" | wc # Количество файлов в текущей директории включая поддиректории
ls -laR | grep "^-" | wc | awk '{print $1}' # Отобразить только интересующие цифры размера в байтах awk '{print $1}' - дергает 1 столбец вывода (варианты $1, $2, $N)
ls -laRh --sort=size /var/log # рекурсивный вывод файлов и папок с сортировкой по размеру
find ./ -type f | xargs ls -alt # вывести все файлы в текущем каталоге включая подкаталоги, отсортированные по времени изменения
find . -xdev | wc -l # количество файлов и каталогов в директории(количество inode занимаемых этой директорией)
for i in /*; do echo $i; find $i -xdev | wc -l; done # количество inode занимаемых каждой директорией
tail -f filename # Просмотр последних 10 строк файла в реальном времени
tailf filename # Просмотр последних строк файла в реальном времени
e4defrag -c /dev/xxx # Проверка необходимости дефрагментации, где xxx - название раздела, который требуется дефрагментировать.
e4defrag /dev/xxx # запуск дефрагментации, где xxx - название раздела, который требуется дефрагментировать. Например, sda4.
smartctl -a /dev/nvme1 # проверка смарт состояния диска
cat /proc/mdstat # посмотреть состояние raid массива
cat /sys/block/md0/md/mismatch_cnt # количество ошибок в процессе проверки массива md0
cat /sys/block/md*/md/mismatch_cnt # просмотр всех ошибок всех массивов
cat /sys/block/md*/md/sync_action # Просмотр состояния рейдов
echo 'repair' >/sys/block/md0/md/sync_action # ресинхронизация массива md0
echo 'check' >/sys/block/md0/md/sync_action # проверка массива md0
echo 'idle' > /sys/block/md0/md/sync_action # остановить проверку
cat /proc/sys/dev/raid/speed_limit_max # макс скорость проверки
cat /proc/sys/dev/raid/speed_limit_min # минимальная скорость провреки
mdadm -D /dev/md0 # вывести детально состояние массива
ln -s элемент ссылка # создание символической ссылки
mv path{,.bak} # быстрое переименование файла или директории
mount | column -t # вывести все смонтированные фс и устройства в табличном виде
# ---------------------------------------- работа с файлами
touch file1 file2 # создает пустые файлы
fallocate -l 2G /swapfile # создаем пустой файл необходимого размера
mkdir dir1 dir2 # создает директории
rm -r dirname # удалить директорию
rm filename # удалить файл
rm *.log # удалить файлы по маске
rm -rf * .[!.]* # очистить текущий каталог включая скрытые файлы и каталоги в нем
find /path/to/dir/ -mindepth 1 -delete # очистить папку
find pathname -type f -name "*.txt" -delete # удалить файлы по маске в директории pathname
find . -type f -exec chmod 644 {} \; # выставить всем файлам в текущем каталоге права 644
find . -type d -exec chmod 755 {} \; # выставить всем директориям в текущем каталоге 755
find /home/dir -type f -mtime +365 -exec rm -rf {} \; # найти и удалить файлы старше 365 дней
find /root -type f -name "*.sql" -exec ls -als {} \; | sort -nr | awk 'BEGIN{s=0}{s+=$6;printf "size: %3sMB %s\n", int(($6/1024)/1024), $10}END{print int(((s/1024)/1024)/1024)" GB"}' # рекурсивно вывести с сортировкой по размеру файлы определённого типа
cp -R dir1/ dir2/ # скопировать директорию dir1 в dir2 со всем содержимым
mv dir1/ dir2/ # переместить/переименовать директорию dir1 в dir2
chown user:group filename # изменение владельца файла и группы
which command # Поиск файлов в каталогах, перечисленных в переменной среды PATH
ln -s элемент ссылка # создать символическую ссылку на элемент
# ---------------------------------------- пользователи
whoami # вывести текщего пользователя
cat /etc/passwd # показать всех пользователей
w # активность пользователей в данный момент
who # список подключенных пользователей
last -a # история входов в систему
lastlog # последние входы в систему
useradd -m newusername # добавление нового пользователя
passwd newusername # установка пароля пользователю
deluser --remove-home --remove-all-files username # удаление пользователя со всеми папками и файлами
apt install sudo # установка sudo
usermod -aG sudo newusername # добавить юзера в группу sudo
id # вывод идентификатора пользователя и группы. Если пользователь не указан, выдается информация о пользователе, вызвавшем команду.
less /etc/group # посмотреть все группы
groups # посмотреть группы текущего юзера
groups username # посмотреть группы username
# ---------------------------------------- процессы и система
uname -a # информация о системе
lsb_release -cs # возвращает имя дистрибутива Debian
lsb_release -a # вся инфа по дистрибутиву
top # процессы
atop # инфа по нагрузке системы
atop -r /var/log/atop/atop_20191024 # логи нагрузки системы
iotop # статистика использования ввода вывода диска
uptime # сист. время, время работы, сколько пользователей подключено, средняя нагрузка за последние одну, пять и пятнадцать минут
cat /proc/loadavg # средняя нагрузка за последние одну, пять и пятнадцать минут
lscpu # инфа о цпу
lsblk # инфа о всех блочных устройствах(жд, флешки, опт приводы)
lsblk -a # более полная инфа о блочных устройствах
fdisk -l # список всех разделов на дисках
lshw # инфа об устройствах
lshw -class network # инфа о конкретном устройстве
lsof # список всех открытых файлов
lsof -u mysql # список открытых файлов пользователем
lsof | awk '{ print $2; }' | sort | uniq -c | sort -rn | head # топ процессов по количеству открытых файлов
ls -l /proc/28841/fd # файлы открытые процессом PID = 28841
lsof -p 28841 | wc -l # файлы открытые процессом PID = 28841
cat /proc/cpuinfo # инфа о цпу
cat /proc/cpuinfo | grep processor | wc -l # количество процессоров
nproc # количество доступных процессоров
pgrep -c process_name # посмотреть количество процессов по имени process_name
ps -C process_name --no-headers | wc -l # тоже самое - посмотреть количество процессов по имени process_name
ps -Af # посмотреть процессы и максимум данных о них
ps axu # вывести список всех процессов
ps auxf # вывести дерево процессов
ps -eo pid,ppid,user,cmd,%mem,%cpu --sort=-%cpu | head # список процессов наиболее нагружающих систему отсортированный по нарузке цп
pstree # вывести дерево процессов
pstree -a # вывести дерево процессов
kill -l # показать список возможных сигналов
pidof tor # получить pid по названию процесса
kill -HUP $(pidof tor) # дает процессу отбой (меняем тор ip)
kill 1234 # программное завершение процесса с PID = 1234, то же что и kill -15 1234
kill -9 1234 # безусловное завершение(только если программное и другие способы не помогают!)
killall proccessname # убить все процессы с именем proccessname
ps aux | grep 'condition' | awk '{print $2}' | xargs kill # убить процессы по определенному найденному условию
cat /proc/<pid потомка>/status|grep PPid # узнать pid родителя процесса
which php # путь к исполняемому файлу указанной команды
cat /proc/$(pgrep mysqld)/limits # mysql лимиты
nice -n 19 ionice -c2 -n7 command # команда с низким приоритетом цп и диска
nice -n 19 ionice -c3 command # команда с самым низким приоритетом цп и диска
journalctl -p err..alert # быстрый поиск ошибок в системе
journalctl -f # слежение за ллогами системы в реальном времени
swapon -s # информация по подключенным swap
cat /proc/swaps # информация по подключенным swap
# ---------------------------------------- docker контейнеризация
docker stats -a --no-stream | (read -r header; echo "$header"; sort -k3 -rn) # вывести статистику использования ресурсов отсортировав по cpu
# ---------------------------------------- крон задания
crontab -l # просмотр заданий cron
crontab -e # редактирование заданий cron
for user in $(cut -d':' -f1 /etc/passwd); do echo "=== $user ==="; crontab -u $user -l; done # список всех задач крон для всех юзеров
cat /var/spool/cron/crontabs/* # список всех задач крон для всех юзеров
for file in /var/spool/cron/crontabs/* ; do us=`echo $file | cut -d'/' -f6` ; if [ "$us" != "root" ] ; then printf 'User: '; echo -e $us'\n' ; cat $file | grep wget ; echo -e '\n------------------------------------------------\n' ; fi ; done | tee list.txt # список wget задач без root
for us in $(ls /var/spool/cron/crontabs/[!root]* | cut -d'/' -f6) ; do crontab -e -u $us ; done # редактировать крон задачи кроме юзера root
cat /var/spool/cron/crontabs/[!root]* | less # просмотр списка крон задач кроме root
# ---------------------------------------- сеть
traceroute -I google.com # трассировка icmp пакетами вместо udp пакетов
ifconfig # информация о сетевых интерфейсах
ip a # информация о сетевых интерфейсах
ip l # информация о сетевых интерфейсах кратко
ip rout show # посмотреть маршруты в таблице маршрутизации
ip link set интерфейс down # выключение определенного интерфейса пример ip link set eth0 down
ip link set интерфейс up # включение определенного интерфейса
ip a add 10.0.2.15/24 brd 10.0.2.255 dev enp0s3 # устанавливаем ip и broadcast на интерфейсе enp0s3
hostname # показать имя хоста
hostname -f # показать полное имя хоста машины
netstat -i # состояние сетевых интерфейсов и данные счетчиков трафика
netstat # список процессов для которых установлены сетевые соединения
netstat -lpn # список процессов с более подробными данными о соединениях
netstat -r # информация о таблице маршрутизации по каждому интерфейсу
netstat -ntulp # список процессов с сетевой активностью и портами
netstat -anp |grep 'tcp\|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n # список всех tcp/udp соединений отсортированный по количеству
lsof -i # просмотр всех открытых соединений в сисетме
nethogs # просмотр процессов с сетевой активностью
iptarf-ng # мониторинг сетевых интерфейсов
iftop # мониторинг пропускной способности сети
tcpdump -i any # мониторинг всего сетевого трафика
tcpdump -i eth0 # прослушивание определенного интерфейса
tcpdump -ttttnnvvS # подробный вывод без разрешения имен хостов или номеров портов, абсолютных порядковых номеров и удобочитаемых временных меток
tcpdump host 1.2.3.4 # отфильтровать трафик по ip или хосту источника или ip назначения
tcpdump -c 100 port 80 -w dump.pcap # фильтр по порту и запись в файл 100 пакетов
tcpdump -c 50000 -i enp8s0 ip dst 192.168.1.100 and port 80 and 'tcp[32:4] = 0x47455420' -w dump.pcap # записать 50к GET запросов к серверу по порту 80
tcpdump -X host 1.2.3.4 # просмотреть содержимое пакетов
nslookup example.com # выдает сервер днс хоста и ip хоста
nslookup <IP adress> # преобразует ip в хост
nslookup -type=ns example.com # просмотр NS записей домена
nslookup example.com ns.example.com # выдает ip хоста из авторитетного источника
nslookup -type=mx example.com # получить MX запись домена
nslookup -type=soa example.com # Start Of Authority предоставляет техническую информацию о домене
dig google.com +short # ip A записей хоста кратко
dig NS google.com +short # NS записи хоста кратко
dig google.com @ns1.google.com +short # спросить у NS какие ip хоста ему известны
iptables -L # просмотр правил iptables
iptables -F # очистить все правила
iptables -I INPUT -p tcp --dport 7890 -j ACCEPT # добавить правило (открываем порт 7890)
iptables -D INPUT -p tcp --dport 7890 -j ACCEPT # удалить правило
iptables-save > /etc/iptables.conf # сохранить правила iptables в файл
iptables-restore < /etc/iptables.conf # восстановить настройки из файла после перезагрузки
wget -qO- eth0.me # проверить свой IP
wget -SO- eth0.me # посмотреть заголовки ответа сервера
curl -i eth0.me # посмотреть ответ и заголовки сервера
scp -P 2202 user@192.168.56.100:/home/user/backup.sql.gz /root/ # скопирвоать с удаленного сервера с портом 2202 на локальный
scp -P 2202 /root/backup.sql.gz user@192.168.56.100:/home/user/ # отправить с локального на удаленный с портом 2202
rsync -avzhP -e 'ssh -p 2483' root@192.168.56.100:/root/backup.tar.gz /root/ # скопирвоать с удаленного сервера с портом 2202 на локальный
rsync -avzhP /root/backup.tar.gz root@192.168.56.100:/root/ # отправить с локального на удаленный
rsync --include='/_*/' --include='/new.php' --exclude='*' -avzhP -e 'ssh -p 2222' root@111.111.111.111:/var/www/ /home/path/ # скачать с удалённого только определённые каталоги и файлы
ssh -D 1111 -p 22 root@192.168.1.100 # поднять локальный socks прокси на порту 1111
nmap -sn 192.168.1.0/24 # пинг сети на предмет доступных доступных целей
systemctl is-active systemd-resolved.service # посмотреть запущено ли кеширование днс
systemd-resolve --flush-caches # очистить кеш DNS
# ------------------------------------------ архивация
tar -xvzf archive.tar.gz # распаковать tar архив в текущую папку
gunzip # распаковать gz архив в текущую папку
unzip -l file.zip # просмотреть список файлов архива
tar -cvzf dir.tar.gz /home/dir # создать сжатый tar архив папки
tar -cvzf backup_`date '+%Y-%m-%d-%H-%M-%S'`.tar.gz /usr/share/phpmyadmin # сделать сжатый бекап папки phpmydmin с меткой времени в имени файла
tar --exclude='dir1/subdir' -cvzf 2dir.tar.gz dir1/ dir2/ # архивировать два кактолога исключив подкаталог
tar -xvf backup_2019-10-05-13-45-52.tar.gz -C / # развернуть бекап
tar -tvf file.tar.gz # просмотр содержимого архива
zip -r archive.zip /path/to/files/* # упаковать содержимое папки в архив zip
# ------------------------------------------ работа с БД
mysqladmin -uroot password '12345' # установить пароль пользователя mysql
mysqladmin -u root -ppassword -P 3310 -h 127.0.0.1 processlist # посмотреть процесслист на нестандартном порту
mysqldump -u db_user -ppassword db_name > db.sql # сделать дамп бд
mysqldump -u db_user -ppassword db_name table1 table2 > tables.sql # сдалать дамп ондной или нескольких таблиц
mysqldump --skip-lock-tables --insert-ignore db_name > # сдклать дамп бд без блокировки таблиц
mysqldump -u db_user -ppassword db_name | gzip > db.sql.gz # сделать дамп и архивировать его
gunzip -c db.sql.gz | mysql -u db_user -ppassword db_name # восстановить дамп из gz архива
unzip -p dump.sql.zip | mysql -u root -p%pass% database% # восстановить дамп из zip архива
mysql -uroot -p dbname1 < dump.sql # импорт дампа бд из обычного sql файла
mysqlcheck -o --all-databases # оптимизация всех таблиц
mysql -Nse 'show tables' DATABASE_NAME | while read table; do mysql DATABASE_NAME -e "drop table \`$table\`"; done # очистка бд от всех таблиц(удаление таблиц одной командой)
mysqldump -uuser -ppassword --add-drop-table --no-data databasename | grep ^DROP | mysql -uuser -ppassword databasename # аналогчно очистка бд от всех таблиц
mysql -Nse "show databases;" | while read db; do mysqldump --skip-lock-tables --insert-ignore $db > $db.sql; done # сделать дампы всех бд
for file in ./*.sql; do db=$(echo -n $file | cut -d/ -f2 | cut -d. -f1); mysql $db < $file; done # развернуть дампы из текущего каталога
# ----------------------------------------- рандомизация
shuf -i 2000-65000 -n 1 # случайное значение из диапозона
ls | shuf -n1 # случайный файл
cat spisok.txt | shuf -n1 # случайная строка из файла
pwgen 12 1 # генерация 1-го 12 значного пароля
# ----------------------------------------- обработка строк и файлов
sed 's/root/Admin/' # заменить подстроку в первом совпадении и вывести stdout
sed 's/root/Admin/g' # заменить все подстроки с выводом в stdout
sed '/games/d' # удалить все строки с данной подстрокой и вывести в stdout
sed '/^$/d' # удалить все пустые строки
sed -i '/^$/d' filename # удалить все пустые строки отредактировав файл на месте(ключ -i)
sed -e 1b -e '$!d' # вывести первую и последнюю строку
sed -n 8p # вывести 8 строку
sed -n 8,20p # вывести с 8 по 20 строки
sed '/John/,$d' # удалить все строки после совпадения с данным шаблоном
sed '1,/James/d' # удалить все строки до совпадения с шаблоном, включая строку с совпадением
sed -n '/от/,/до/p' # вырезать и отобразить оставшееся
sed '4,$d' # вырезать с 4 по последнюю строку
sed -n 's/.*\(successful installation marker\).*/\1/ip;T;q' # найти подстроку
cut -d':' -f1 /etc/passwd # вывести первый столбец файла по разделителю :
awk -F: '{ print $1 }' /etc/passwd # вывести первый столбец файла по разделителю :
awk '!a[$0]++' filename # удаление дубликатов строк
grep -rna "example text" / 2> /dev/null # рукурсивный поиск текста в файлах по серверу
while read LINE; do COMMAND; done < FILE # чтение файла посторочно
-----------------------------------------
sleep .5 # спать пол секунды
sleep 5 # спать 5 сек
sleep 5m # спать 5 минут
sleep 5h # спать 5 часов
# ----------------------------------------- терминал
fg # вернуться к фоновой задаче в терминале
jobs # посмотреть список заданий
bg # восстановить выполнение фоновых заданий
# ----------------------------------------- php
php -m # посмотреть все установленные модули php
# ----------------------------------------- apache
apache2ctl -V | grep -i 'Server MPM' # посмотреть версию apache
apachectl -V | grep -i mpm # посмотреть версию apache
# ----------------------------------------- nginx
nginx -T # вывести в терминал дамп всех конфигов nginx
nginx -t # проверить синтаксис конфигов
nginx -s reload # перезагрузка конфигов
# ----------------------------------------- разное
cat access.log | cut -d'"' -f 6 | grep bot | sort | uniq # посмотреть юзерагенты ботов
grep -E 'bot[^"]*"$' access.log # просмотр логов чисто ботов
find / -name *.conf | grep nginx | grep -v fail2ban | while read line; do echo -e \\n\\n------- "$line" ---------\\n\\n; cat "$line"; done # посмотреть все конфиги nginx
find / -name *.log | xargs grep -n "failed to login" # поиск подстроки в определенных типах файлов на сервере
for file in ./*.jpg;do nn=`echo $file | sed 's/prefix/new_prefix/'`; mv $file $nn;done # меняем префикс названий определенных типов файлов(jpg) в текущей папке
while true;do kill -HUP $(pidof tor); echo $(date '+%H:%M:%S') $(wget -qO- eth0.me); sleep 10;done # меняем ip tor раз в 10 сек и выводим в консоль время и ip
wget --mirror -p --convert-links -P /home/dan xyz.com # выкачиваем локальную копию сайта
wget --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.6045.163 Safari/537.36" --recursive --no-clobber --page-requisites --html-extension --convert-links --restrict-file-names=windows --domains xyz.com --no-parent https://xyz.com/html/blog-single.html # выкачиваем локальную копию сайта
for file in $(find ./ -name "*\?*"); do newfile=`echo $file | sed 's/\?.*//';`; mv $file $newfile; done; # избавляемся от вопросов в именах выкачанных файлов
[ -z "${IP:=$(curl -s -m1 checkip.amazonaws.com)}" ] && [ -z "${IP:=$(curl -s -m1 ident.me)}" ] && [ -z "${IP:=$(curl -s -m1 ipinfo.io/ip)}" ];\
nginx -T 2>/dev/null | grep -E "^[[:space:]]+server_name" | cut -d\ -f2- | rev | cut -d\; -f2- | rev | tr ' ' '\n' | sort | uniq | awk -v ip=$IP '{print ip " " $0}' # формируем hosts из nginx конфигов
KEY=`pwgen 16 1`; IP=`ip route get 8.8.8.8 | grep src | awk '{print $NF}'`; `find /usr/local/mgr5 /usr/local/ispmgr -prune 2>/dev/null | head -1`/sbin/mgrctl -m ispmgr session.newkey username=root key=$KEY sok=ok && echo "https://${IP}:1500/manager/ispmgr?func=auth&username=root&key=$KEY&checkcookie=no"; # получаем одноразовую ссылку для авторизации в ispmanager
for item in $(seq 9060 9070); do echo "SocksPort $item" >> /etc/tor/torrc ; done # дописать в torrc пул портов
curl wttr.in/Москва > прогноз погоды
# координаты wifi роутера по его mac адресу
# mobile.maps.yandex.net/cellid_location/?clid=1866854&lac=-1&cellid=-1&operatorid=null&countrycode=null&signalstrength=-1&wifinetworks=BSSID:-65&ymetro
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment