Как сделать путь читаемым миром?

Я запускаю Ubuntu, и по некоторым причинам, некоторые сочетания клавиш настроены в "Плагине Единицы Ubuntu". Там у меня есть установка для "ключа для выполнения команды".

Таким образом, возможно, необходимо просмотреть все compiz настройки плагинов.

2
07.03.2013, 12:58
2 ответа

Вы правы относительно полномочий: каждый компонент каталога должен быть мировым исполняемым файлом, и сам объект должен быть читаемым миром (и вероятно мировой исполняемый файл также, если это - каталог).

Дополнительная морщина - то, что, если путь включает символьные ссылки, необходимо сделать каждый промежуточный каталог, который необходим для разрешения мирового исполняемого файла символьной ссылки также.

Если у Вас есть путь без символьных ссылок, простой цикл может сделать задание:

make_directory_world_accessible () {
  dir=$1
  case $dir in /*) :;; *) dir=$PWD/$dir;; esac
  while [ -n "$dir" ]; do
    chmod a+x "$dir"
    slashes=${dir##*[!/]}; dir=${dir%$slashes}; dir=${dir%/*}
  done
}

С символьными ссылками необходимо искать все символьные ссылки вручную и рекурсивно вызвать по каждому компоненту каталога. Ядро делает это внутренне, но не выставляет процесс. Например, учитывая символьную ссылку /foo/bar -> one/two/three, мало того, что необходимо сделать /foo/one и /foo/two общественность, но также необходимо проверить ли one и two символьные ссылки и рекурсивно вызывают соответственно.

1
27.01.2020, 21:55
  • 1
    Когда был бы slashes быть непустыми? –  kjo 07.03.2013, 13:14
  • 2
    @kjo, Если там запаздывают наклонные черты или несколько наклонных черт, например. foo/ или foo//bar. –  Gilles 'SO- stop being evil' 07.03.2013, 15:18
  • 3
    Это - действительно аккуратная идиома для итерации по подпутям, Спасибо! Только из любопытства, каково его законченное преимущество dir=$(dirname "$dir") (кроме потребности к особому случаю / с последним методом)? –  kjo 07.03.2013, 16:29
  • 4
    @kjo Это быстрее на платформах с медленным запуском процесса, таких как Cygwin, который я должен был использовать в последнее время. Существует также пограничный случай, если бы у Вас есть имя файла, заканчивающееся новой строкой, которую замена команды съела бы. Необходимо выработать привычку записи dirname -- "$dir" справляться с путями, которые запускаются с - (не беспокойство здесь, потому что мы имеем дело с полным путем). Существует различие с запаздывающими наклонными чертами, но оно не имеет значения здесь. –  Gilles 'SO- stop being evil' 07.03.2013, 17:10

Вы частично правы. На каталоге x разрешение показывает разрешение использовать тот каталог для достигания объектов, на которые это ссылается. r право необходимо, чтобы прочитать каталог, то есть, перечислить названия объектов, на которые это ссылается (обратите внимание на это, если Ваше разрешение r-- можно перечислить имена, но не получить доступ к объектам; если это --x можно получить доступ к объектам, пока Вы можете дать правильное имя, но не перечислить их). w разрешение означает изменять каталог, то есть, переименовывая объекты, на которые ссылаются, удалять ссылки или добавлять новые. Снова, это абсолютно независимо от других полномочий.

Другой аспект - то, что существует 3 набора полномочий, для пользователя, группы и других (иногда названы ugo). Пользовательский набор битов для владельца файла, группы для пользователей, принадлежащих группе файла. При проверке полномочий, если пользователь, пробующий доступ, является владельцем файла, применяются полномочия пользователя. Если пользователь не является владельцем файла, но принадлежит группе файла, полномочия группы применяются. Только если ни один из предыдущих случаев не применяется, другие проверенные полномочия.

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

5
27.01.2020, 21:55

Теги

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