Как записать что-нибудь в файл в файловой системе /sys?

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Аватара пользователя
жучара
Сообщения: 1171
ОС: Debian 12

Как записать что-нибудь в файл в файловой системе /sys?

Сообщение жучара »

Друзья! Вот в этот файл (права пользователя на запись я добавил сам):

Shell

$ ls -l "/sys/devices/pci0000:00/0000:00:0b.0/usb1/1-1/bDeviceClass"
-rw-r--r-- 1 root root 4096 июн 5 13:48 /sys/devices/pci0000:00/0000:00:0b.0/usb1/1-1/bDeviceClass
$
$ echo 0 | sudo tee "/sys/devices/pci0000:00/0000:00:0b.0/usb1/1-1/bDeviceClass"
0
tee: '/sys/devices/pci0000:00/0000:00:0b.0/usb1/1-1/bDeviceClass': Ошибка ввода/вывода
$
Ну допустим. Виртуальная файловая система, о которой нет упоминания в FHS и всё такое. Но вот в этот файл (который тоже в /sys) записывается на раз:

Shell

$ ls -l "/sys/devices/pci0000:00/0000:00:03.0/net/enp0s3/mtu"
-rw-r--r-- 1 root root 4096 июн 5 13:37 /sys/devices/pci0000:00/0000:00:03.0/net/enp0s3/mtu
$
$ echo 1200 | sudo tee -a "/sys/devices/pci0000:00/0000:00:03.0/net/enp0s3/mtu"
1200
$
В чём же дело? Тогда я решил исследовать все права роодительских папок у обоих файлов- они оказались одинаковы. Вот эти права. Вот на папки, которрые содержат файл "/sys/devices/pci0000:00/0000:00:03.0/net/enp0s3/mtu"

Shell

$ ls -ld "/sys/devices/pci0000:00/0000:00:03.0/net/enp0s3/mtu"
-rw-r--r-- 1 root root 4096 июн 5 13:37 /sys/devices/pci0000:00/0000:00:03.0/net/enp0s3/mtu
$
$ ls -ld "/sys/devices/pci0000:00/0000:00:03.0/net/enp0s3"
drwxr-xr-x 5 root root 0 июн 5 13:38 /sys/devices/pci0000:00/0000:00:03.0/net/enp0s3
$
$ ls -ld "/sys/devices/pci0000:00/0000:00:03.0/net"
drwxr-xr-x 3 root root 0 июн 5 13:38 /sys/devices/pci0000:00/0000:00:03.0/net
$
$ ls -ld "/sys/devices/pci0000:00/0000:00:03.0"
drwxr-xr-x 5 root root 0 июн 5 13:38 /sys/devices/pci0000:00/0000:00:03.0
$
$ ls -ld "/sys/devices/pci0000:00"
drwxr-xr-x 16 root root 0 июн 5 13:38 /sys/devices/pci0000:00
$
$ ls -ld "/sys/devices"
drwxr-xr-x 14 root root 0 июн 5 13:38 /sys/devices
$
$ ls -ld "/sys"
dr-xr-xr-x 13 root root 0 июн 5 13:38 /sys
$
$ ls -ld "/"
drwxr-xr-x 19 root root 4096 июн 5 13:38 /
$
Вот так на файл "/sys/devices/pci0000:00/0000:00:0b.0/usb1/1-1/bDeviceClass"

Shell

$ ls -ld "/sys/devices/pci0000:00/0000:00:0b.0/usb1/1-1/bDeviceClass"
-rw-r--r-- 1 root root 4096 июн 5 13:48 /sys/devices/pci0000:00/0000:00:0b.0/usb1/1-1/bDeviceClass
$
$ ls -ld "/sys/devices/pci0000:00/0000:00:0b.0/usb1/1-1"
drwxr-xr-x 6 root root 0 июн 5 11:43 /sys/devices/pci0000:00/0000:00:0b.0/usb1/1-1
$
$ ls -ld "/sys/devices/pci0000:00/0000:00:0b.0/usb1"
drwxr-xr-x 6 root root 0 июн 5 10:48 /sys/devices/pci0000:00/0000:00:0b.0/usb1
$
$ ls -ld "/sys/devices/pci0000:00/0000:00:0b.0"
drwxr-xr-x 6 root root 0 июн 5 10:48 /sys/devices/pci0000:00/0000:00:0b.0
$
$ ls -ld "/sys/devices/pci0000:00"
drwxr-xr-x 16 root root 0 июн 5 13:38 /sys/devices/pci0000:00
$
$ ls -ld "/sys/devices"
drwxr-xr-x 14 root root 0 июн 5 13:38 /sys/devices
$
$ ls -ld "/sys"
dr-xr-xr-x 13 root root 0 июн 5 13:38 /sys
$
$ ls -ld "/"
drwxr-xr-x 19 root root 4096 июн 5 13:38 /
$

То есть с точки зрения прав на запись, файлы "/sys/devices/pci0000:00/0000:00:03.0/net/enp0s3/mtu" и "/sys/devices/pci0000:00/0000:00:0b.0/usb1/1-1/bDeviceClass" абсолютно-преабсолютно идентичны. Я вам больше скажу- в их иерархии нет ссылок. То есть все папки, которые я проверял на права, действительно папки (насколько можно быть папками в папке /sys, а не ссылки на них)

Но почему-то так. В один файл пишется в лёгкую, а в другой вообще не пишется. А надо чтобы писалось. Спасибо, кто откликнется
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21509
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как записать что-нибудь в файл в файловой системе /sys?

Сообщение Bizdelnick »

жучара писал(а):
05.06.2026 13:44
А надо чтобы писалось.
Мало ли что Вам надо. Не предусмотрена его запись, как и большей части файлов в sysfs.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1171
ОС: Debian 12

Re: Как записать что-нибудь в файл в файловой системе /sys?

Сообщение жучара »

Bizdelnick писал:
05.06.2026 16:19
жучара писал(а):
05.06.2026 13:44
А надо чтобы писалось.
Мало ли что Вам надо.
не более написанного. А написано, что запись в него разрешена.

Shell

$ ls -l "/sys/devices/pci0000:00/0000:00:0b.0/usb1/1-1/bDeviceClass"
-rw-r--r-- 1 root root 4096 июн 5 13:48 /sys/devices/pci0000:00/0000:00:0b.0/usb1/1-1/bDeviceClass
$
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 1082
ОС: BSD/LINUX

Re: Как записать что-нибудь в файл в файловой системе /sys?

Сообщение bars »

жучара писал(а):
05.06.2026 18:15
не более написанного. А написано, что запись в него разрешена.
Запись не получается потому, что файлы в /sys/ — это не настоящие файлы на диске, а прямые каналы связи с ядром Linux и драйверами.Права -rw-r--r-- показывают лишь то, что ядро теоретически готово принять от вас данные. Однако при самой попытке записи вступают в силу внутренние ограничения ядра, о которых обычная команда ls -l ничего не знает.

Директория /sys/ — это не жесткий диск. Это виртуальная файловая система sysfs, создаваемая ядром Linux в оперативной памяти для управления устройствами.

Понятно?
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1171
ОС: Debian 12

Re: Как записать что-нибудь в файл в файловой системе /sys?

Сообщение жучара »

bars, то, что sysfs какая-то не такая файловая система, написано на всех заборах. В первом сообщении я написал:
В один файл пишется в лёгкую, а в другой вообще не пишется.
А если этих файлов какие-то другие права на запись, то хотелось бы их увидеть, эти права. Пока что стандартное

Shell

$ ls -ld "/sys/devices/pci0000:00/0000:00:0b.0/usb1/1-1/bDeviceClass"
-rw-r--r-- 1 root root 4096 июн 5 13:48 /sys/devices/pci0000:00/0000:00:0b.0/usb1/1-1/bDeviceClass
$
Больше ориентироваться не на что, увы.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 3249
ОС: Gentoo

Re: Как записать что-нибудь в файл в файловой системе /sys?

Сообщение ormorph »

жучара писал(а):
05.06.2026 19:54
А если этих файлов какие-то другие права на запись, то хотелось бы их увидеть, эти права. Пока что стандартное
Попробуйте воспринимать это как интерфейс получения информации и её изменения. Если какой то параметр не поддерживается этим интерфейсом, то запись не пройдёт. Для примера режим работы процессора:

Shell

# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
Попробуйте под рутом записать параметр который отсутствует в:

Shell

# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
А так же можете сменить режим работы для ядра(потока) процессора используя один из режимов указанных в scaling_available_governors. Кроме того некоторые файлы используются только для получения информации, а изменение можно делать например через sysctl -a. Это не та фс к которой вы привыкли в общем смысле, если драйвер не поддерживает какую то операцию, то она не будет выполнена, несмотря на то, что к файлам можно применять операции open(r,w).
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21509
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как записать что-нибудь в файл в файловой системе /sys?

Сообщение Bizdelnick »

жучара писал(а):
05.06.2026 19:54
Больше ориентироваться не на что, увы.
Ориентироваться можно на те разрешения, которые были после монтирования. Поменять их Вы можете, но от этого операция записи никакого смысла не приобретёт.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали: