Один из подходов заключается в использовании параллельного сжатия, чтобы использовать все ядра вашей системы и, следовательно, уменьшить время сжатия. Это не снизит нагрузку на вашу систему, но она будет загружена в течение наименьшего количества времени!
Вы можете найти, как это сделать, например, в этом Q/A : utilizing-multi-core-for-targzip-bzip-compression-decompression
Например:
tar cf - paths-to-archive | pigz > archive.tar.gz
Сценарий может сделать
sudo mv /etc/ssh/sshd_config /etc/ssh/sshd_config.orig
sudo cp "$HOME/my_configs/sshd_config" /etc/ssh/
sudo chmod go-w /etc/ssh/sshd_config
или
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.orig
cat "$HOME/my_configs/sshd_config" | sudo tee /etc/ssh/sshd_config >/dev/null
, чтобы создать резервную копию любого старого sshd_config
, а затем установить новый.
Я имею в виду, что нужно просто где-то собрать коллекцию файлов, затем скопировать их в нужные места и убедиться, что установленные файлы имеют правильные разрешения. Это можно автоматизировать скриптом.
Однако существует специализированное программное обеспечение для автоматической подготовки и управления конфигурацией, например Ansible и Puppet.
Эти типы программного обеспечения могут стать более интересными, как только вам потребуется настроить более пары машин. Мы, например, используем Ansible для настройки частных контейнеров Docker для наших клиентов в нашем вычислительном кластере -.
Для текстового содержимого проще всего, особенно если текст состоит из нескольких строк, использовать документ здесь -. Добавьте эти строки в свой скрипт, например, чтобы ваш скрипт создал file.txt
с этим текстом:
cat << 'EOF' > file.txt
Here is some text
or other
EOF
(вы можете использовать что угодно вместо EOF
выше в качестве маркера конца файла, если оно не встречается в тексте для вставки. Первый EOF
должен быть заключен в кавычки, чтобы предотвратить любое расширение внутри здесь -документа ).
Для файлов с произвольным содержимым можно использовать uudecode
. Он также позволяет указать разрешения для создаваемого файла. Например, чтобы сценарий создал файл foo
с содержимым и разрешениями /bin/ls
, выполните:
(echo 'uudecode << "_EOF_"'
uuencode -m /bin/ls foo
echo _EOF_) >> your-script
Это добавит соответствующий код в ваш скрипт. Что-то вроде:
uudecode << "_EOF_"
begin-base64 755 foo
f0VMRgIBAQAAAAAAAAAAAAMAPgABAAAAMFQAAAAAAABAAAAAAAAAADD3AQAA
[...]
AAAAAAAAAAAAAAA=
====
_EOF_
С содержимым /bin/ls
, закодированным в base64.
Это предполагает, что uudecode
доступен на машине, на которой вы собираетесь запустить эту команду. Но обычно так и должно быть, поскольку uudecode
— это команда POSIX.
Вы можете расширить это, чтобы создать несколько файлов, закодировав сжатый архив tar:
(echo 'uudecode << "_EOF_" | gunzip | tar xpf -'
tar cf - file1 file2 file3 dir/file4 | uuencode -m -
echo '_EOF_') >> your-script
(при условии, что целевая система имеет gunzip
иtar
(не POSIX-команды, а довольно распространенные )).
Преимущество этого также заключается в том, что вы можете кодировать дополнительные метаданные файла, такие как право собственности или доступ и время модификации (и многое другое, например, списки управления доступом и расширенные атрибуты, а также жесткую связь с некоторыми tar
реализациями ). Это также позволяет вам легко создавать не -обычные файлы, такие как каталоги, символические ссылки, устройства...
См. также утилитуshar
, которая поможет вам создавать портативные самораспаковывающиеся -архивы.