Как с помощью bash создать файл с предварительно вставленным внутри него текстом? [duplicate]

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

Вы можете найти, как это сделать, например, в этом Q/A : utilizing-multi-core-for-targzip-bzip-compression-decompression

Например:

tar cf - paths-to-archive | pigz > archive.tar.gz

-3
29.08.2017, 12:14
2 ответа

Сценарий может сделать

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 для наших клиентов в нашем вычислительном кластере -.

2
28.01.2020, 05:18

Для текстового содержимого проще всего, особенно если текст состоит из нескольких строк, использовать документ здесь -. Добавьте эти строки в свой скрипт, например, чтобы ваш скрипт создал 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, которая поможет вам создавать портативные самораспаковывающиеся -архивы.

2
28.01.2020, 05:18

Теги

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