Файлы в / sys
не являются физическими файлами на диске. Это виртуальные файлы, которые позволяют вам получить доступ к информации в вашем активном ядре. Практическое влияние этого заключается в том, что выполнение на них chown
, chmod
и т. Д. Является эфемерной операцией, как вы обнаружили. Полное представление файловой системы в / sys
создается ядром при загрузке системы, поэтому нет возможности вносить постоянные изменения.
Самое простое решение - запустить ваш скрипт от имени пользователя root. Обычным решением является использование sudo
. Вам нужно будет дать вашему пользователю возможность запускать ваш скрипт от имени пользователя root. Так, например, если ваш сценарий установлен как / usr / local / bin / configure-Brightness
, вы можете создать /etc/sudoers.d/brightness
со следующим содержимым:
yourusername ALL=(ALL) NOPASSWD:/usr/local/bin/configure-brightness
Этот файл ( /etc/sudoers.d/brightness
) должен принадлежать root
и иметь режим 440
.
Имея эту конфигурацию, вы можете запустить:
sudo /usr/local/bin/configure-brightness
... и сценарий будет работать как root
, что означает, что он сможет читать / записывать файлы в / sys
.
Да, Perl - ваш друг. В данном случае, в частности, Perl Regexp :: Common. Он предоставляет предопределенные определения регулярных выражений (дополнительные сведения см. В документации: http://search.cpan.org/~abigail/Regexp-Common-2016020301/lib/Regexp/Common.pm ).
Пример IPv4:
$ perl -MRegexp::Common -lne 'print $1 if /($RE{net}{IPv4})/g' file
172.18.0.1
172.17.0.1
127.0.0.1