Список файлов, которые открывает команда? lsof слишком медленный

Не уверен насчет sed/gawk, но вот один сperl

$ echo '0.2rem or 0.5rem 0.6rem' | perl -pe 's/\d+(\.\d+)?(?=rem)/$&*0.5/ge'
0.1rem or 0.25rem 0.3rem
  • \d+(\.\d+)?сопоставить цифры с необязательной дробной частью
    • (?=rem), чтобы убедиться, что за номером следуетrem
  • $&*0.5умножить число на0.5-модификатор eпозволяет использовать код Perl вместо строки в секции замены


Применение к файлам:

find. -name "*.css" -exec perl -i -pe 's/\d+(\.\d+)?(?=rem)/$&*0.5/ge' {} +

См. также:Почему зацикливание вывода find является плохой практикой?

2
07.01.2020, 00:41
1 ответ

Один из способов сделать это — отследить системные вызовы, сделанные программой, и отфильтровать системные вызовы open/ openatили поиск имени.

Исходными двумя инструментами для этого были trussдля AT&T Unix System 5 и ktraceдля 4.4BSD. (Последний объединяет ktraceс kdump, что переводит машиночитаемый -вывод в удобочитаемую -форму. )Более поздним изобретением, пару десятилетий спустя, стала структура DTrace.

Итак, в настоящее время для отслеживания выполнения какой-либо командыwibble:

  • В Illumos и родственных операционных системах утилита для этогоtrussунаследована от SunOS. например.
    truss -o truss.out -t open,openat wibble
  • В OpenBSD для этого используется утилитаktraceиз 4.4BSD сkdump. например.
    ktrace -t n wibble
  • В MacOS для этого используется утилита dtruss. например.
    dtruss -t open wibble
  • В операционных системах на базе Linux -для этого используется утилитаstrace. например.
    strace -o strace.out -e open,openat wibble
  • FreeBSD и ее производные операционные системы имеют как :
    • клон AT&T truss, в котором, однако, отсутствует опция -tоригинала, а это означает, что вам придется -публиковать сообщения с помощью обычных инструментов обработки текста -; и
    • ktrace(плюсkdump)из 4.4BSD, которая поддерживает -t n.

FreeBSD и Illumos и их производные также имеют dtraceet al. как часть фреймворка DTrace, но здесь это излишне для ваших конкретных целей. MacOS dtrussна самом деле построена на платформе DTrace, поэтому для нее требуются привилегии суперпользователя — недостаток, которого нет ни у одного из других упомянутых здесь инструментов.

2
28.04.2021, 23:26

Теги

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