"cd" в /sys/kernel/debug/tracing приводит к изменению разрешения

Perlпредоставляет множествоquote-ing-операторов именно для такого сценария, как у вас. В частности, операторы qw//, qq//и q//, обозначающие операторы quote word, double quote stringи single quote stringсоответственно. Вы заметите, что они полностью убрали рутинную работу с цитированием данных.

И, как уже было указано, команду system()лучше обслуживать, используя аргументы, передаваемые через list, а не через scalarsпо соображениям безопасности.

Наконец, внутри кода cshellвам нужно использовать модификатор :q, чтобы заключить переменную в кавычки.

%  cat PerlScript.pl

my @Args = (
   qw/     -stuff  /,                    # whitespace ignored
   qw/ -more_stuff /,                    # whitespace ignored
   q['-even more "*stuff" -last_stuff'], # whitespace IMPORTANT
);

my $csh_script = q[Script.csh];

system($csh_script, @Args) and
   die qq[Error: The script $csh_script has failed with exit code:], $? >> 8;

% cat Script.csh

foreach arg ( $argv[*]:q )
   echo "<$arg>"
end

Результаты

<-stuff>
<-more_stuff>
<'-even more "*stuff" -last_stuff'>

Примечания

  • Если вы считаете, что результат вас не устраивает, НЕ изменяйте ничего в сценарии csh. Лучше поиграйте с @Argsв файле PerlScript.pl.
  • Например, если вы должны были заполнить @Args, как показано:

my @Args = (
   qw/     -stuff  /,
   qw/ -more_stuff /,
   q['-even more],
   q["*stuff"],
   q[-last_stuff'],
   #q['-even more "*stuff" -last_stuff'],
);

Тогда вы увидите следующий результат:

<-stuff>
<-more_stuff>
<'-even more>
<"*stuff">
<-last_stuff'>
10
27.09.2019, 16:21
1 ответ

/систем

/sys— это sysfs, полностью виртуальное представление структур ядра в памяти, отражающее текущую конфигурацию ядра системы и оборудования и не занимающее никакого реального дискового пространства. Новые файлы и каталоги не могут быть записаны в него обычным способом.

Применение к нему мониторинга дискового пространства не дает полезной информации и является пустой тратой усилий. Он может иметь точки монтирования для других виртуальных файловых систем на основе ОЗУ -, включая...

/sys/ядро/отладка

/sys/kernel/debug— это стандартная точка монтирования для debugfs, которая является дополнительной виртуальной файловой системой для различных функций отладки и трассировки ядра.

Поскольку это функция отладки, предполагается, что она не нужна для производственного использования (, хотя вы можете использовать некоторые функции для расширенной системной статистики или чего-то подобного ).

Поскольку для использования функций, предлагаемых debugfs, в большинстве случаев в любом случае потребуется быть root, а его основная цель состоит в том, чтобы предоставить разработчикам ядра простой способ предоставления отладочной информации, он может быть немного «грубым». края».

Когда ядро ​​было загружено, процедура инициализации для подсистемы трассировки ядра зарегистрировала /sys/kernel/debug/tracingкак точку доступа debugfs для себя, откладывая любую дальнейшую инициализацию до тех пор, пока к ней не будет осуществлен первый доступ (, сводя к минимуму использование ресурсов подсистема трассировки на случай, если окажется, что она не нужна ). Когда вы cdвошли в каталог, запустилась эта отложенная инициализация, и подсистема трассировки подготовилась к использованию. По сути, оригинал /sys/kernel/debug/tracingизначально был бессодержательным миражом, и он стал «реальным» только тогда, когда (и потому, что )вы получили к нему доступ с помощью команды cd.

debugfsвообще не использует реальное дисковое пространство :вся информация, содержащаяся на нем, исчезнет при завершении работы ядра.

/sys/fs/cgroup

/sys/fs/cgroup— это файловая система на основе RAM -типа tmpfs-, используемая для группировки различных запущенных процессов в контрольные группы . Он вообще не использует реальное дисковое пространство. Но если эта файловая система по какой-то причине почти заполнена, это может быть более серьезной , чем просто нехватка места на диске :, это может означать, что

a )у вас заканчивается свободная оперативная память,

b )какой-то процесс, принадлежащий root -, записывает мусор в /sys/fs/cgroupили

c )что-то вызывает создание поистине абсурдного количества контрольных групп, возможно, в стиле классической «форк-бомбы», но сsystemd-службами на основе или подобными.

Итог

Проверка использования диска должна /sysисключать , потому что ни на одном диске не хранится ничего меньше /sys.

Если вам нужно контролировать /sys/fs/cgroup,вы должны предоставить для него специальный зонд, который будет выдавать более содержательные предупреждения, чем общий зонд дискового пространства.

20
27.01.2020, 20:00

Теги

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