udev создает правильные правила, но права исчезают, как только я пытаюсь получить доступ к файлам через C ++

Я обычно стираю блочные USB-устройства следующим образом:

Используя lsblk -f , определите, где в дереве устройств находится устройство и посмотрите, установлены ли где-нибудь какие-либо его части.

Используйте umount -l / path / to / partition , чтобы размонтировать все разделы, смонтированные на устройстве, если таковые имеются.

Используйте dd if = / dev / zero of = / dev / sdX bs = 8M && sync , чтобы полностью стереть данные с устройства (где «X» - расположение блочного устройства). {{1 }} Будьте очень осторожны , чтобы случайно не запустить это на основном диске вашего компьютера!

Отключите устройство, а затем снова подключите его, чтобы удалить всю оставшуюся информацию о mtab.

Снова проверьте устройство с помощью lsblk -f , чтобы убедиться, что оно пусто, затем перестройте разделы или восстановите файл образа на устройстве, чтобы вернуть его в рабочее состояние.

1
13.04.2017, 15:36
1 ответ

/ sys / class / gpio / gpio60 - это символическая ссылка . Это особый тип файла, который указывает на другой файл. При доступе к содержимому файла символические ссылки прозрачны: они действуют как их цель (файл, на который они указывают Но при перечислении каталогов символические ссылки появляются сами по себе; ls -l показывает их с l в крайнем левом столбце и показывает их цель после -> справа. При доступе к метаданным это зависит.

chmod -R… / sys / class / gpio влияет на дерево каталогов, начиная с / sys / class / gpio . Сюда входят такие записи как / sys / class / gpio / gpio60 . Но / sys / class / gpio / gpio60 - это символическая ссылка, указывающая на другое место в дереве каталогов; chmod команда не влияет на Цель символьной ссылки.

Когда вы пытаетесь получить доступ к файлам в / sys / class / gpio / gpio60 , или когда вы запускаете cd / sys / class / gpio / gpio60 , это обращается к каталогу, который символическая ссылка указывает на (доступ к содержимому каталога). Это работает как root, но не как root, потому что этот каталог доступен только root.

Чтобы сделать этот каталог доступным для других пользователей, вам нужно запустить chmod… /sys/devices/platform/ocp/4804c000.gpio/gpio/gpio60.

Однако вместо смены владельца было бы проще добавить своего пользователя в группу gpio :

adduser dave gpio
2
27.01.2020, 23:36

Теги

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