나는 /etc/host를 사용하여 localhost를 웹 도메인에 매핑하고 있습니다. 매번 검색하고 바꾸지 않고도 이 작업을 수행할 수 있는 빠른 방법을 원합니다. 내 .bashrc 파일에 넣었습니다.
alias hostchange='
nowdir=$PWD;
cd /etc;
mv hosts hoststempname;
mv hostssecondary hosts;
mv hoststempname hostssecondary;
cd $nowdir'
이 오류가 발생합니다. y나 n이 모두 진행되지 않습니다.
mv: rename hosts to hoststempname: Permission denied
override rw-r--r-- root/wheel for hosts? (y/n [n])
sudo를 추가해서 작동하게 만들었습니다.
alias hostchange='
nowdir=$PWD;
cd /etc;
sudo mv hosts hoststempname;
sudo mv hostssecondary hosts;
sudo mv hoststempname hostssecondary;
cd $nowdir'
이것이 합법적인가요? 내가 어둠 속에서 촬영하고 있는 걸까?
답변1
당신은 올바른 길을 가고 있습니다! 이에 대한 몇 가지 의견이 있습니다. 일반적으로 이러한 여러 줄 작업은 함수에 맡기는 것이 좋습니다. 다음과 같이 쓸 수도 있습니다.
change_etc_hosts_file() {
set -e # stop running if we encounter an error
sudo \mv -f /etc/hosts /etc/hoststempname
sudo \mv -f /etc/hostssecondary /etc/hosts
sudo \mv -f /etc/hoststempname /etc/hostssecondary
set +e
}
alias changehosts=change_etc_hosts_file
또한 디렉터리를 변경하는 대신 절대 경로를 사용했음을 알 수 있습니다. 일반적으로 이것이 더 나은 생각입니다(절대 경로 사용). 친척을 계속 사용하려면 일반적으로 하위 쉘에서 이 작업을 수행하는 것이 가장 좋습니다. 그러면 디렉토리를 $PWD로 다시 변경하는 작업을 처리할 필요가 없습니다(중단하면 이상한 상태가 됩니다). 서브쉘로 실행하려면 다음과 같습니다:
change_etc_hosts_file() {
( # use subshell
cd /etc
set -e # stop running if we encounter an error
sudo \rm -f hoststempname # the \ escapes aliases which might cause prompting
sudo \cp -f hosts hoststempname
sudo \cp -f hostssecondary hosts
sudo \cp -f hoststempname hostssecondary
)
}
CD는 새로운 프로세스인 () 내부에서 발생하므로 현재 작업 디렉터리에는 영향을 미치지 않습니다.
답변2
이 명령에 대해 질문이 있다는 사실은 sudo
유닉스 사용자 개념에 대한 기본 지식 없이도 유닉스 세계에서 어떻게든 살아남았음을 시사합니다(뿌리특히). 저는 이러한 상황을 이해할 수 없지만 귀하의 질문과 의견을 통해 이것이 사실임을 분명히 알 수 있습니다.
예, 귀하가 달성한 결과는 sudo
정확히 귀하가 기대했던 것과 같습니다. 이 때문입니다:
- 유닉스 시스템에는 여러 가지가 있습니다.시스템 사용자- "가상"이라고 부를 수 있습니다.아니요인간으로 착각하다컴퓨터 사용자).
- 모든 파일과 디렉토리에는소유자, 항상 (가상) 사용자 중 한 명입니다.
- 이것뿌리사용자, 호출됨뿌리모든 Unix가 가지고 있어야 하는 특별한 시스템 계정입니다. 그는 무엇이든 할 수 있습니다. 시스템의 모든 힘을 가지고 있습니다.
sudo
"일반" 사용자 권한을 일시적으로 악용하는 데 사용되는 명령입니다.뿌리그래서 몇 가지 특별한 작업을 수행할 수 있습니다.