Вы спрашиваете о «страхе и презрении к сценариям». Это происходит из-за ситуации Q+A, где ответ часто говорит:Требуется этот шаг и это, но я также могу поместить его в одну строку (, чтобы вы могли скопировать его и использовать как длинный простая команда ).
Иногда вы можете только догадываться, лучше ли Q обслуживает быстрое и грязное решение для копирования и вставки, или «хороший» сценарий — это именно то, что Q должен понять.
Многие плюсы и минусы здесь верны, но все же они упускают суть. Я бы даже сказал, что определения в Q бесполезны.
Файлы оболочки истории являются "однострочными", но тем не менее сохраняются. Функция bash operate-and-get-next (C-o)
даже позволяет вам автоматически повторять их наполовину -.
Я почти не вижу упоминания слова функция . Таким образом можно хранить как «скрипты», так и «один лайнер». И с помощью нескольких нажатий клавиш вы можете переключаться между обоими форматами. Составная команда часто может соответствовать обоим.
history -r file
— это способ чтения одной или нескольких командных строк (и комментариев )из любого файла, а не только из файла истории по умолчанию. Это просто требует некоторой минимальной организации. Вы не должны полагаться на большой размер файла истории и поиск по истории для извлечения (некоторой )версии командной строки.
Функции должны быть определены аналогичным образом. Для начала поместите thisfunc() {...}
в файл «функции» в вашем домашнем каталоге и загрузите его. Да, это некоторые накладные расходы, но это общее решение.
Если вы храните каждую командную строку и каждый вариант скрипта в отдельном файле, это (теоретическая, но объективная )трата блоков файловой системы.
Один -лайнер сам по себе не имеет ничего быстрого и грязного. Это скорее часть копирования -вставки, которая немного не одобряется, и то, как мы просто полагаемся на историю команд, чтобы сохранить ее для нас.
@sitaram :ваш один лайнер действительно имеет un -onelinerish функции :строка shebang, новая строка, четыре служебных вызова -два из них sed "программы". Я думаю, что исходный сценарий perl выглядел лучше, работал быстрее и не терял ни одного байта, растянувшись на 60 строк. И Perl также позволяет вам немного сжимать.
Для меня это именно тот вкладыш, которого следует избегать. Хотели бы вы, чтобы (вставили )в вашу командную строку? Нет, и затем, если вы все равно сохраните его в файле (независимо от сценария или функции ), вы можете вложить два или три байта новой строки -, чтобы он выглядел ---красиво.
10 мин. позже :Я просто хотел проверить, могу ли я сказать "две программы sed" или это "две подстановки/вызова sed". Но ответа ситарама больше нет. Надеюсь, мой ответ все еще имеет смысл.
Вы правы, не желая отключать SELinux для домена rsync_t
. К сожалению, несмотря на то, что возможности настройки реализации SELinux для rsync довольно обширны, существуют пограничные случаи, когда установка rsync_export_all_ro
логического значения по-прежнему не разрешает демону rsync доступ к определенным файлам. Существует одна запись Bugzilla , которая очень похожа на ваши проблемы. Приведенное там предложение состоит в том, чтобы использовать rsync_full_access
для преодоления проблемы, хотя и с нарушением безопасности (все же лучше, чем semanage permissive -a rsync_t
, хотя ).
Итак, чтобы ответить на ваш вопрос, если вы хотите использовать более безопасный вариантrsync_export_all_ro
и иметь возможность разрешить демону rsync доступ к файлам/каталогам «пограничного случая», вам нужно создать свой собственный модуль политики..
Это достигается за счет того, что демон rsync выполняет свою работу в разрешительном режиме, перехватывая отказы AVC по мере их продвижения, а затем преобразовывая отказы AVC в политику, например:
# put SELinux in permissive mode
setenforce 0
# --- do your rsync stuff ---
# get related AVC denials
# I'm using 'recent' here, depending on the rsync run time please adjust accordingly
ausearch -m avc -ts recent --subject rsync_t
# go through the output. If you're satisfied, create the module
ausearch -m avc -ts recent --subject rsync_t | audit2allow -m roaima-rsync-custom-1 > roaima-rsync-custom-1.te
checkmodule -M -m -o roaima-rsync-custom-1.mod roaima-rsync-custom-1.te
semodule_package -o roaima-rsync-custom-1.pp -m roaima-rsync-custom-1.mod
# load the policy module
semodule -i roaima-rsync-custom-1.pp
# disable permissive mode
setenforce 1
# --- do your rsync stuff again --
Если по какой-то причине файлы «пограничного случая» по-прежнему недоступны, а команда ausearch
не дает результатов, возможно, вы сталкиваетесь с правилом «не проводить аудит».
Чтобы перестроить политику SELinux, игнорирующую все правила «dontaudit» -, запустите semodule -DB
. Опция -D
отключает правила «dontaudit»; опция -B
перестраивает политику.
Затем попробуйте инициировать события журнала аудита. Если это так, захватите их, как показано выше, создайте модуль SELinux,а затем снова -включите правила «dontaudit», выполнив:semodule -B
.
Чтобы просмотреть полный список правил «dontaudit», введите команду sesearch --dontaudit
. Сузьте поиск, используя параметр домена -s
и команду grep
. Например :sesearch --dontaudit -s rsync_t
.