mkdir /tmp/kpanic && cd /tmp/kpanic && printf '#include <linux/kernel.h>\n#include <linux/module.h>\nMODULE_LICENSE("GPL");static int8_t* message = "buffer overrun at 0x4ba4c73e73acce54";int init_module(void){panic(message);return 0;}' > kpanic.c && printf 'obj-m += kpanic.o\nall:\n\tmake -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules' > Makefile && make && insmod kpanic.ko
Компилирует модуль, который вызывает сбой ядра, вызывая функцию panic
, требуется root, требуется make
и gcc
Замените «переполнение буфера по адресу 0x4ba4c73e73acce54» в команде чем-нибудь интересным для большей драматичности.
Как правило, вы должны использовать find
для рекурсивного поиска в каталогах, т.е.
find. -name '*.cpp'
Если у вас GNU find
, вы можете напрямую распечатать имя файла и размер в байтах, минуя вызовstat
find. -name '*.cpp' -printf '%f:%s\n'
Если вы не возражаете против обратного порядка, вы можете вывести результаты таким образом, чтобы их можно было однозначно сортировать -, например, сортировать по размеру в числовом порядке от большего к меньшему
find../src -name '*.cpp' -printf '%s:%f\n' | sort -t: -rn
Вы всегда можете поменять местами поля после сортировки, например. с Awk -, который также позволяет вам выбрать, например, только 5 лучших результатов:
find. -name '*.cpp' -printf '%s:%f\n' | sort -t: -rn | awk -F: 'NR==6 {exit} {print $2 " : " $1}'
Наконец, если вы хотите сделать его безопасным для любых «легальных» имен файлов (, в том числе с символами новой строки ), нуль завершает все
find. -name '*.cpp' -printf '%s:%f\0' | sort -t: -zrn | awk -vRS='\0' -F: 'NR==6 {exit} {print $2 " : " $1}'