В Bash Script, как мне попасть в каталог внутри моей текущей директории?

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» в команде чем-нибудь интересным для большей драматичности.

0
08.10.2018, 02:05
1 ответ

Как правило, вы должны использовать 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}'
0
28.01.2020, 04:12

Теги

Похожие вопросы