Как неагрессивно протестировать на доступ для записи к файлу?

Необходимо обновить систему, или можно столкнуться с несовместимостями ядра. Серьезно рассмотрите обновление. Если Fedora обновляет слишком много для Ваших потребностей, рассмотрите использование CentOS или Научного Linux. Fedora 19 находится в состоянии Raw Hide в данный момент. Текущая стабильная версия является Fedora 18

21
07.10.2014, 00:29
2 ответа

Просто используйте -w флаг test utillity:

[ -w /path/to/file ] && echo "writeable" || echo "write permission denied"

Обратите внимание, что если вы собираетесь позже записывать в файл, то все равно возможно, что вы не сможете в него записать. Файл мог переместиться, разрешения могли измениться и т.д. Также может случиться, что -w обнаруживает разрешения на запись, но вмешивается какой-то другой фактор, который делает файл недоступным для записи .

29
27.01.2020, 19:43

Другой подход:

if >> /path/to/file
then
    echo "writeable"
else
    echo "write permission denied"
fi

Попробуем открыть файл для добавления, и, если это удастся, выполните ни одной команды (т.е. выполните нулевую команду ) с выводом в файл. 

Остерегайтесь, что это создаст пустой файл, если его не существовало.

Оператор -w команды test может просто сделать stat а потом попробуй выяснить, похоже ли это на то, что у тебя должен быть доступ.  Моя альтернатива (выше) более надежна, чем подход test. в некоторых особых условиях, потому что это заставляет проверять доступ не оболочку, а ядро.  Например,

  • если файл находится на неUnix-файловой системе - особенно если он удалённо смонтирован с неUnix-файлового сервера. - потому что stat может вернуть вводящее в заблуждение значение режима.
  • , если файл находится в файловой системе, смонтированной только для чтения.
  • если файл имеет ACL, и режим делает его похожим на то, что у вас должен быть доступ, но ACL отрицает это, или наоборот.
  • если какая-либо структура безопасности (AppArmor, SELinux, ...) отказывает в доступе к файлу.
11
27.01.2020, 19:43

Теги

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