내 환경을 배포 가능하게 만들기 위해 가끔 편리한 파일과 스크립트를 압축합니다.
tar -czvf env.tgz .vimrc .vim/ bin/lsl bin/s
여기에 추가하고 싶지만 .bashrc
그 안에 민감한 정보가 있으므로 .bashrc-deploy
해당 정보를 유지한 다음 새 서버에 타르볼이 있으면 간단히 이름을 바꿀 수 있습니다. 하지만 저는 타르볼이 .bashrc
처음부터 올바른 이름을 가지길 원하므로 이름을 바꿀 필요가 없습니다. 나는 일시적으로 파일 이름을 바꾸고 다음과 같이 타르볼을 만드는 스크립트를 작성하는 것을 고려했습니다.
#!/bin/bash
mv .bashrc .bashrc-real
mv .bashrc-deploy .bashrc
tar -czvf env.tgz .bashrc .vimrc .vim/ bin/lsl bin/s
mv .bashrc .bashrc-deploy
mv .bashrc-real .bashrc
하지만 이름을 타르볼에 저장 tar
하는 내부 방법이 있나요 ?someFile
anotherName
답변1
pax
( tar
표준(POSIX) 명령을 사용하여 아카이브 생성)을 사용 하고 옵션을 bsdtar
확인합니다 .-s
pax -s '/\.bashrc-deploy/.bashrc/' -w -x ustar . | gzip > a.tar.gz
bsdtar -s '/\.bashrc-deploy/.bashrc/' -zcf a.tar.gz .
그러나 위 코드는 .bashrc-deploy
문자열을 .bashrc
아카이브에 추가하려는 멤버의 파일 경로로 대체한다는 점에 유의하십시오. ./.bashrc-deploy
현재 디렉토리에 있는 것만 바꾸려면 다음과 같이 작성해야 합니다.
pax -s '|^\./\.bashrc-deploy$|./.bashrc|' -w -x ustar .
(POSIX pax 사양을 읽어보았지만 모든 pax 구현이 이런 방식으로 작동한다고 보장할 수는 없습니다. 구현이 하나뿐이므로 bsdtar에서도 작동해야 합니다.)
답변2
이를 달성하는 한 가지 방법은 체인 로딩입니다.
존재하다 .bashrc
:
#!/bin/bash
# ...
# Non-private information
# ...
[[ -r ~/.bashrc-private ]] && . ~/.bashrc-private
그런 다음 개인 콘텐츠 ~/.bashrc-private
와 그 밖의 모든 콘텐츠를 넣으 십시오 ~/.bashrc
.~/.bashrc
답변3
GNU tar 사용(비임베디드 Linux 및 Cygwin의 기본 tar 구현):
tar czf env.tgz --transform 's/-deploy$//' .bashrc-deploy .profile …
이는 불행하게도 BSD tar와 마찬가지로 많은 기본 Linux 설치에 포함되지 않는 pax(cpio 및 tar의 POSIX 대체)를 사용하여도 가능합니다.
pax -w -x ustar '-s/-deploy$//' .bashrc-deploy .profile … | gzip >env.tgz
bsdtar -czf env.tgz '-s/-deploy$//' .bashrc-deploy .profile …
세 가지 경우 모두 구문은 s/REGEX/REPLACEMENT/
or와 동일합니다.ed
sed
나는 당신의 접근 방식에 의문을 제기합니다. 이름은 같지만 내용이 다른 파일을 다른 컴퓨터에 두는 것은 유지하기 어렵습니다. 또한 특정 파일을 비공개로 유지해야 하는 경우 실수하기 쉽습니다. 내 제안은 구성 파일을 하위 디렉터리에 저장하고 기호 링크를 사용하는 것입니다. 예를 들어, if는 .bashrc
비공개이고 사이트별이어야 하며, .profile
공개되어야 하며 모든 곳에서 동일해야 합니다.
.bashrc -> etc/local/private/.bashrc
.profile -> etc/.profile
귀하의 사이트와 관련된 이름(예: 또는 ) etc/local
을 가진 디렉토리에 대한 심볼릭 링크를 생성하고 및 귀하만 액세스할 수 있는지 확인하면 작업이 완료됩니다. 전체 디렉토리를 배포하고 아카이브의 압축을 푼 후(또는 더 나은 방법은 다음에서 심볼릭 링크를 설정할 수 있습니다)~/etc/home
~/etc/work
~/etc/private
~/etc/*/private
~/etc
etc/local
버전 관리).
유사한 파일 .bashrc
(주로 사이트에 구애받지 않고 공개될 수 있음)의 경우 파일을 공개 부분과 비공개 부분(필요한 경우 사이트별 파일 포함)의 두 부분(또는 최대 4개)으로 분할합니다. 주요 부분에는 로컬 부분이 포함됩니다.
if [ -e ~/etc/private/.bashrc ]; then . ~/etc/private/.bashrc; fi
if [ -e ~/etc/local/.bashrc ]; then . ~/etc/local/.bashrc; fi
if [ -e ~/etc/local/private/.bashrc ]; then . ~/etc/local/private/.bashrc; fi
프로그래밍 언어로 작성된 파일에서 호스트 이름이나 도메인 이름 또는 기타 사이트 관련 특성을 동적으로 테스트할 수 있으므로 단일 파일을 유지할 수 있습니다.
case $HOSTNAME in
darkstar) alias foo=some-local-command;;
esac
거기에 기밀 내용이 있다는 게 좀 놀랍습니다 .bashrc
. 환경 변수를 정의하는 경우그들은 속해있다~/.profile
.