Стивен Харрис дал очень хороший ответ
к предыдущей версии этого вопроса.
К сожалению Он не может справиться с патологическим случаем
имен файлов с новыми строками в них.
Вот небольшая адаптация его ответа, которая касается этого случая.
(Я также изменил его, чтобы использовать cat -n
вместо nl
,
и использовать параметр -y
для diff
.)
find folder1 -type f -exec bash -c 'for file1
do
file2="${file1/folder1/folder2}"
echo "Comparing $file1 to $file2"
diff -y <(cat -n "$file1") <(cat -n "$file2")
done' bash {} +
Поскольку вы попросили xargs
в комментарии к ответу Стивена,
вот вам:
find folder1 -type f -print0 | xargs -0 bash -c 'for file1
do
file2="${file1/folder1/folder2}"
echo "Comparing $file1 to $file2"
diff -y <(cat -n "$file1") <(cat -n "$file2")
done' bash
Обратите внимание, что эти команды должны выполняться в bash
,
потому что оболочка POSIX не поддерживает
${параметр/pattern/string}
,
и решение xargs
должно быть сделано в GNU-land,
поскольку POSIX не поддерживает find -print0
или xargs -0
.
(Конечно, вы можете заменить -print0
на -print
и отказаться от -0
,
но тогда вы потеряете возможность обрабатывать имена файлов
с новыми строками в них.)
SELinux — это форма обязательного контроля доступа, при которой набор меток используется для контроля того, что процессы могут или не могут делать. Метод управления доступом по умолчанию в Linux, включающий ugo
разрешения, является дискреционным -, он оставляет на усмотрение пользователя фактически выяснить, какие разрешения должны быть переданы. «Проблема» с использованием обязательного контроля доступа SELinux заключается в том, что приложения иногда могут отказываться работать так, как вы хотите, по явно загадочным причинам.
В качестве примера возьмем демона rsyslog
. Каталог и файлы в /var/log
имеют правильные метки SELinux для работы с rsyslog
. Однако, если вы попытаетесь определить файл журнала в другом месте системы, например /opt
, rsyslog
, вы не сможете записать в него из-за неправильных контекстов SELinux в этом файле. Поскольку контроль доступа является обязательным, это произойдет, даже если вы установите разрешения 777
для нового файла журнала. В этом конкретном случае контексты SELinux могут быть установлены в новом файле журнала с помощью chcon
. Но подождите, эти контексты будут потеряны при следующей перемаркировке файловой системы. Итак, что вам действительно нужно, так это semanage fcontext
.
Как я пытался проиллюстрировать приведенным выше примером,SELinux требует серьезного обучения. Даже после того, как вы поймете основы того, как это работает, вам все равно придется работать с большим количеством команд (semanage
, sestatus
, sealert
, chcon
, restorecon
,audit2allow
)для достижения намеченного результата.. Даже в этом случае документация может иногда сбивать вас с толку относительно того, где вы ошибаетесь.
Учитывая трудности, связанные с фактическим использованием SELinux, большинство людей считают более удобным его отключение. Фактически, вопрос с наибольшим количеством голосов под тегом SELinux здесь, на U&L, касается отключения SELinux.
Еще следует отметить, что дистрибутивы, относящиеся к Red Hat, поставляются с включенным SELinux (Fedora, RHEL и его производными ). Политики SELinux, поставляемые с этими системами, стали достаточно хорошими, чтобы многие люди обычно не замечали, что SELinux работает в их системах.
Да; Red Hat Enterprise Linux включает его по умолчанию для одного:
Enforcing mode is the default, and recommended, mode of operation; in enforcing mode SELinux operates normally, enforcing the loaded security policy on the entire system.