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'>
@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'>
/sys
— это sysfs
, полностью виртуальное представление структур ядра в памяти, отражающее текущую конфигурацию ядра системы и оборудования и не занимающее никакого реального дискового пространства. Новые файлы и каталоги не могут быть записаны в него обычным способом.
Применение к нему мониторинга дискового пространства не дает полезной информации и является пустой тратой усилий. Он может иметь точки монтирования для других виртуальных файловых систем на основе ОЗУ -, включая...
/sys/kernel/debug
— это стандартная точка монтирования для debugfs
, которая является дополнительной виртуальной файловой системой для различных функций отладки и трассировки ядра.
Поскольку это функция отладки, предполагается, что она не нужна для производственного использования (, хотя вы можете использовать некоторые функции для расширенной системной статистики или чего-то подобного ).
Поскольку для использования функций, предлагаемых debugfs
, в большинстве случаев в любом случае потребуется быть root
, а его основная цель состоит в том, чтобы предоставить разработчикам ядра простой способ предоставления отладочной информации, он может быть немного «грубым». края».
Когда ядро было загружено, процедура инициализации для подсистемы трассировки ядра зарегистрировала /sys/kernel/debug/tracing
как точку доступа debugfs для себя, откладывая любую дальнейшую инициализацию до тех пор, пока к ней не будет осуществлен первый доступ (, сводя к минимуму использование ресурсов подсистема трассировки на случай, если окажется, что она не нужна ). Когда вы cd
вошли в каталог, запустилась эта отложенная инициализация, и подсистема трассировки подготовилась к использованию. По сути, оригинал /sys/kernel/debug/tracing
изначально был бессодержательным миражом, и он стал «реальным» только тогда, когда (и потому, что )вы получили к нему доступ с помощью команды cd
.
debugfs
вообще не использует реальное дисковое пространство :вся информация, содержащаяся на нем, исчезнет при завершении работы ядра.
/sys/fs/cgroup
— это файловая система на основе RAM -типа tmpfs
-, используемая для группировки различных запущенных процессов в контрольные группы . Он вообще не использует реальное дисковое пространство. Но если эта файловая система по какой-то причине почти заполнена, это может быть более серьезной , чем просто нехватка места на диске :, это может означать, что
a )у вас заканчивается свободная оперативная память,
b )какой-то процесс, принадлежащий root -, записывает мусор в /sys/fs/cgroup
или
c )что-то вызывает создание поистине абсурдного количества контрольных групп, возможно, в стиле классической «форк-бомбы», но сsystemd
-службами на основе или подобными.
Проверка использования диска должна /sys
исключать , потому что ни на одном диске не хранится ничего меньше /sys
.
Если вам нужно контролировать /sys/fs/cgroup
,вы должны предоставить для него специальный зонд, который будет выдавать более содержательные предупреждения, чем общий зонд дискового пространства.