Я бы предложил использовать
find / '(' -iname '*.htm' -o -iname '*.html' ')' -printf '%h\n' | uniq | xargs -r -d '\n' ls -l
Первую часть, find / '(' -iname '* .htm' -o -iname ' * .html '') '-printf'% h \ n '
, находит все файлы, заканчивающиеся на .htm
или .html
в верхнем или нижнем регистре (используя glob шаблоны) и печатает каталог (% h
) для каждого такого найденного файла, по одному каталогу в строке.
Из-за того, как find
сканирует каталоги, в списке есть один или несколько последовательных идентичных каталогов; uniq
сохраняет только по одному из них.
Наконец, мы передаем список каталогов в xargs
, говоря ему не запускать команду без каталогов -r
, и что разделителем является новая строка - d '\ n'
. Команда ls -l
; доработайте по своему вкусу.
Если вам нужен только список каталогов, а не их содержимое, отбросьте часть xargs
:
find / '(' -iname '*.htm' -o -iname '*.html' ')' -printf '%h\n' | uniq
Вы можете использовать списки управления доступом, чтобы файл могли читать люди в обеих группах.
chgrp bar file
chmod 640 file
setfacl -m g:baz:r-- file
Теперь обе группы bar
и baz
могут читать файл.
Например, вот файл, принадлежащий bin: bin с режимом 640.
$ ls -l foo
-rw-r-----+ 1 bin bin 5 Aug 17 12:19 foo
+
означает, что существует набор ACL, поэтому давайте взглянем на него.
$ getfacl foo
# file: foo
# owner: bin
# group: bin
user::rw-
group::r--
group:sweh:r--
mask::r--
other::---
Мы видим строку group: sweh: r -
: это означает, что люди в группе sweh
могут ее прочитать.
Эй, это я!
$ id
uid=500(sweh) gid=500(sweh) groups=500(sweh)
И да, я могу прочитать файл.
$ cat foo
data
Я думаю, это типичное использование списков управления доступом (ACL). Добавьте обоих пользователей (или группы) в ACL конфигурационного файла:
/etc/foo root:root rw------- # Traditional Unix ownership and permission for foo
$ setfacl -m user:bar:rw- /etc/foo # Allows user bar to read and write foo $ setfacl -m user:baz:rw- /etc/foo # Allows also user baz to read and write foo
Возможно, вам сначала придется установить acl-пакет.
Я отправлю это, поскольку это еще не упомянуто. Даже если это, вероятно, не то, что вам нужно, это может быть ответом для других людей, задающих аналогичный вопрос.
«Новый» «облачный» способ состоит в том, чтобы вся конфигурация обрабатывалась системой управления конфигурациями (например, chef , puppet или ] анзиблем ). В этом случае не имеет значения, что у вас есть два разных, но идентичных файла на сервере, поскольку оба являются копией одного файла из системы управления конфигурацией.
Основное преимущество такого подхода заключается в том, что ваша конфигурация имеет версии (вместе со всеми остальными вашими конфигурациями), и что развертывание нового идентичного или почти идентичного сервера становится настолько простым, что нет можно автоматизировать.
(Для записи, поскольку вы не используете управление конфигурацией, я бы выбрал групповую систему, как в ответе @ drg).
Вы можете пересмотреть эти утверждения:
Возможное решение: Создайте новую группу barbaz, членами которой являются
bar
иbaz
. Пустьfoo
принадлежитroot: barbaz
.Мне это кажется довольно жестким решением. Нет ли более аккуратного и простого способа поделиться файлом конфигурации
foo
между двумя программами?
Почему создание новой группы - это неуклюжее? Это дает следующие преимущества перед ACL:
/ usr / bin / bar
и / usr / bin / baz
, это актуально что эти две программы могут совместно использовать файл конфигурации. Это говорит о том, что программы естественно связаны. Создание для них новой группы, казалось бы, описывает отношения, которые действительно существуют и должны вызывать поведение (например, разрешения на чтение общего файла конфигурации). Лично я считаю ACL жестким решением, а группы - более простым, традиционным для Unix способом.
Сделайте режим файла 0660
(или даже 0440
, если запись не требуется) и право собственности bar:baz
. Тогда один процесс сможет получить доступ к файлу благодаря пользовательским разрешениям, а другой - благодаря групповым. Это работает даже на файловых системах, где ACL нет.