나는 새 컴퓨터에서 일부 작업을 자동화하는 작은 bash 스크립트를 만들고 싶습니다.
내가 아직도 수동으로 하는 유일한 일은 파일을 만들고 vi
파일에 텍스트를 붙여넣는 것뿐입니다.
Bash에서 "필요한 텍스트"가 포함된 파일 X를 어떻게 생성합니까? Enter 키를 누르고, 필요한 경우 파일을 덮어쓰고, 필요에 따라 디렉토리를 생성할 필요가 없습니까?
감사해요
예: 기본 sshd_config 파일을 내 버전으로 바꾸고 내 공개 SSH 키가 포함된 파일을 만듭니다. 즉석에서 다른 .sh 파일을 생성합니다. 이 같은.
답변1
텍스트 콘텐츠의 경우 가장 쉬운 방법은 여기에서 문서를 사용하는 것입니다. 특히 텍스트에 여러 줄이 포함된 경우 더욱 그렇습니다. 스크립트에 다음 줄을 추가하세요. 예를 들어 스크립트에서 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
and tar
(POSIX 명령이 아니라 공통)가 있다고 가정).
tar
또한 소유권이나 액세스 권한, 수정 시간(ACL 및 확장 속성, 일부 구현과의 하드 링크 관계 와 유사)과 같은 다른 파일 메타데이터를 인코딩할 수 있다는 이점도 있습니다 . 또한 디렉토리, 심볼릭 링크, 장치 등과 같은 비전통적인 파일을 쉽게 생성할 수 있습니다.
또한보십시오shar
유용휴대용 자동 추출 아카이브를 만드는 데 도움이 됩니다.
답변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 컨테이너를 설정합니다.