Список из самых больших открытых файлов
Список из самых больших файлов (включая размер), открытых в данный момент
lsof -X | sort -k7 -n | awk '{print $9}' | uniq | tail | xargs -n1 ls -lh | grep -v "^d"
Хаки и трюки, подсмотренные на просторах Интернета или «выстраданные» мною самим.
Список из самых больших файлов (включая размер), открытых в данный момент
lsof -X | sort -k7 -n | awk '{print $9}' | uniq | tail | xargs -n1 ls -lh | grep -v "^d"
Стандартные консольные утилиты Linux не показывают количество памяти процесса, выгруженной в файл подкачки (swapped out).
Но есть достаточно простой способ узнать это. Всё, что для этого нужно — взять идентификатор процесса (PID) и просмотреть файл smaps, относящийся к этому процессу:
sudo cat /proc/<pid процесса>/smaps | grep Swap
Эта команда выдаст кучу строк, относящихся к разным сегментам памяти. Чтобы просуммировать всё, можно воспользоваться командой awk:
sudo cat /proc/<pid процесса>/smaps | grep Swap | awk '{ SUM += $2 } END { print SUM }'
Выведенное число — размер использованного свопа в килобайтах.
du -sk ./* | sort -nr | awk 'BEGIN{ pref[1]="K"; pref[2]="M"; pref[3]="G";} { total = total + $1; x = $1; y = 1; while( x > 1024 ) { x = (x + 1023)/1024; y++; } printf("%g%s\t%s\n",int(x*10)/10,pref[y],$2); } END { y = 1; while( total > 1024 ) { total = (total + 1023)/1024; y++; } printf("Total: %g%s\n",int(total*10)/10,pref[y]); }'
Меряет только реальные файлы и директории, симлинки будут нулевого размера.
Так же могут быть полезны пакеты типа ncdu или pydf...
(* точнее — по SFTP, надстройкой над протоколом SSH)
Требуется установленный пакет sshfs. В общем виде команда выглядит так:
sshfs user@remotehost:/path/to/directory /local/path -p port
Показать
Реализация:
sudo modprobe fuse mkdir ~/music sshfs insect@192.168.1.234:/home/insect/music ~/music
Размонтировать так:
sudo umount ~/music
или (для ранних версий) так:
sudo fusermount -u ~/music
dd if=/dev/zero of=./big_file bs=1024k seek=400000 count=0
Данная команда создаёт файл размером 40 гигабайт.
Для работы скрипта требуются установленные в системе пакеты dialog и screen.
Показать
В конец ~/.bashrc дописать:
if [ "$SSH_TTY" ]; then if [ ! "$STY" ] ; then CHOICE=`~/SCREEN/choose` if [ "$CHOICE" ]; then exec screen -dr $CHOICE; fi fi fi
При логине по ssh-протоколу откроется меню с выбором работы в существующих сессиях screen’а или возможностью остаться в консоли ssh-клиента. Если запущенных сессий screen’а нет — меню не откроется.
Содержимое файла ~/SCREEN/choose:
#!/usr/bin/env bash i=0 declare -ax SCREENS SOCKETS=`find /var/run/screen/S-$(whoami) -type p 2>/dev/null` if [ -z "$SOCKETS" ]; then exit 0; fi for S in $SOCKETS; do ((i=$i+1)); S=`basename $S`; SCREENS[$i]=`screen -ls | grep $S | perl -e '$s=<>; $s =~ s/^\\t(.*)\s/$1/; $s =~ s/\s/_/g; print $s'`; done MENU="" for ((j=1; j<=$i; j=$j+1)); do MENU="$MENU $j ${SCREENS[$j]}"; done MENU="$MENU $j Отменить" WHICH=`dialog --stdout --menu Select: 0 0 0 $MENU` if [ "$WHICH" != "$j" ]; then echo ${SCREENS[$WHICH]} | sed -e 's/_(.*)$//'; fi
Должен быть доступен ifconfig (в Debian 9 по умолчанию не установлен пакет net-tools), конфиг-файл апача лежит по пути /etc/apache/httpd.conf.
Показать
#!/usr/bin/env bash APACHECONFFILE=/etc/apache/httpd.conf if test $(id -u) != 0 then echo "You must be root to run this script! Aborting." exit 1 fi if ! type /sbin/ifconfig>/dev/null 2>&1 then echo "ifconfig required but not installed! Aborting." exit 1 fi LC_ALL=C export LC_ALL ALL=$(ifconfig -a | sed -n 's/^\([^ ]\+\):.*/\1/p' | paste -sd ' ') IF="" for if in $ALL; do test "$if" == "ppp0" -a "$IF" == "" && IF=$if done for if in $ALL; do test "$if" == "ippp0" -a "$IF" == "" && IF=$if done for if in $ALL; do test "${if/#eth*/eth}" == "eth" -a "$IF" == "" && IF=$if done for if in $ALL; do test "${if/#enp*/enp}" == "enp" -a "$IF" == "" && IF=$if done for if in $ALL; do test "${if/#wlan*/wlan}" == "wlan" -a "$IF" == "" && IF=$if done test "$IF" == "" && IF=lo echo Using $IF IP=$(ifconfig $IF|awk '/inet/{print $2}'|cut -d: -f2) SERVERNAME=$(awk '/^ServerName/{print $2}' $APACHECONFFILE) echo ServerName changed from $SERVERNAME to $IP perl -pi -e "s/(^ServerName).*/\1 $IP/" $APACHECONFFILE /etc/init.d/apache reload
Всё, о чем так долго говорили большевики, свершилось! Линукс под скайп всьо!!! Тьфу ты, то есть скайп под Линук всьо!.. Но есть довольно грязный хак: поменять строку с версией в самом бинарнике отжившего скайпа.
Показать
Если Скайп установлен из DEB-пакета для Debian:
echo -n 8 | dd of=/usr/bin/skype bs=1 seek=23370360 conv=notrunc
Хак любой весии:
sed -i 's/4\.3\.0\.37/8\.3\.0\.37/' /usr/bin/skype
В генте путь поменять на /opt/bin/skype, или более универсальный способ:
sed -i 's/4\.3\.0\.37/8\.3\.0\.37/' $(which skype)
Простейший portknock’ер, работающий по icmp.
Показать
iptables -A INPUT -p icmp --icmp-type 8 -m length --length 153 -m recent --name portknock --rsource --set -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -m length --length 154 -m recent --name portknock --rsource --update --hitcount 1 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -m length --length 155 -m recent --name portknock --rsource --update --hitcount 2 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m recent --seconds 10 --name portknock --rsource --rcheck --hitcount 3 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
Для открытия порта SSH необходимо пустить три определённых пинга на адрес целевой системы:
ping -s 125 -c 1 [адрес]
ping -s 126 -c 1 [адрес]
ping -s 127 -c 1 [адрес]
Пользователям системы Microsoft ® Шindoшs ™ придётся использовать такой синтаксис:
ping -l 125 -n 1 [адрес]
ping -l 126 -n 1 [адрес]
ping -l 127 -n 1 [адрес]
Количество ASN’ок, зареганных в мире, можно получить так:
wget -q http://www.cidr-report.org/as2.0/ -O - \ | sed -r 's/[\<][\/]?[a-zA-Z0-9\=\"\-\#\.\& ]+[\/]?[\>]//g' $1 \ | grep "Number of ASes in routing system" | cut -f1 -d"&"
Показать
Небольшой разбор.
Командой
wget -q http://www.cidr-report.org/as2.0/ -O -
получаем в консоль (ключ -O -) страницу с сайта www.cidr-report.org (нужная нам строка будет в тексте страницы представлена приблизительно таким текстом: <tr><td align=right><tt>59222 </tt></td><td>Number of ASes in routing system</td></tr>), затем по конвейеру с помощью построчного редактора sed и простейшего регулярного выражения (см. постскриптум)
sed -r 's/[\<][\/]?[a-zA-Z0-9\=\"\-\#\.\& ]+[\/]?[\>]//g' $1
очищаем текст от HTML-тегов, потом командой
grep "Number of ASes in routing system"
печатаем только строку, содержащую текст «Number of ASes in routing system». Вывод получается приблизительно такой: 59222 Number of ASes in routing system
Заключительной командой
cut -f1 -d"&"
из полученной строки печатаются только символы до первого знака «&».
Quod erat faciendum.
P. S. Регулярка
s/[\<][\/]?[a-zA-Z0-9\=\"\-\#\.\& ]+[\/]?[\>]//g
заменяет (действие s, substitute) фрагменты, содержащие условие
(строка [\<][\/]?[a-zA-Z0-9\=\«\-\#\.\& ]+[\/]?[\>] между первым и вторым слешами)
на пустую строку (пустая строка определяется отсутствием символов между вторым и третьим слешами //) во всём тексте (флаг g, global — теперь условие сработает везде). Под условие подпадают все подстроки, ограниченные символами < или </ в начале и > или /> в конце и (обязательно) содержащиеся между ними буквы от a до z и от A до Z, цифры от 0 до 9, символы = (равно), " (двойную кавычку), ‐ (минус), # (октоторп), . (точку), & (амперсанд) или (пробел) в любой последовательности. Строки, удовлетворяющие этому регэкспу:
<html>
<head>
<title>ASNs</title>
<link href="../common.css" type="text/css" rel="stylesheet" />
</head>
<body>
<table>
<tbody>
<tr>
<td align="left">Autonomous Sysmem Number</td>
<td align="center">
<img src="../image.png" />
</td>
</tr>
</tbody>
</table>
</body>
</html>
Из примера видно, что регулярка срабатывает на строках вида <тег>...</тег> и <тег ... />, а строки вида <тег .../... /> пропускает. Вообще говоря, этот regexp сработает и на такие строки: </ 1 />, < 2 />, </ 3 >, < 4 >. Если регулярное выражение заменить на
s/[\<][\/]?[a-zA-Z0-9\=\"\-\#\.\&\/ ]+[\/]?[\>]//g
(добавить \/ в квадратных скобках с плюсом), то срабатывать оно будет и на строки вида <тег .../... />,
т. е. строки определения стиля страницы и вывода изображения в таблице заменятся на пустые (удалятся).
P. P. S. Цветовое выделение добавлено для лучшей читаемости (и понимаемости) регулярного выражения.