내 쉘 세션에는 ~/.bashrc
세트가 있으며 alias link='ln -sf'
내 쉘 세션에서 그에 따라 작동합니다.
sudo
그러나 명령 시작 부분에 사용해야 하는 루트 보호 위치의 경우 다음 오류가 발생합니다.link: cannot create link '<$2>' to '<$1>': Operation not permitted
무슨 일이에요? 어떻게 우회할 수 있나요?
답변1
sudo
외부 명령이므로 별칭을 알 수 없습니다. 귀하의 쉘만이 귀하의 별칭을 알고 있지만 sudo
별칭의 일부는 아닙니다.
이 경우 바이너리를 sudo
실행해 보고 싶습니다. Linux 시스템에서 이는 간단한 명령이며 항상/usr/bin/link
딱딱한link(2)
연결은 시스템 호출을 호출하여 수행됩니다.
$ link --help
Usage: link FILE1 FILE2
or: link OPTION
Call the link function to create a link named FILE2 to an existing FILE1.
--help display this help and exit
--version output version information and exit
GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
Full documentation at: <https://www.gnu.org/software/coreutils/link>
or available locally via: info '(coreutils) link invocation'
답변2
여기서 문제는 bash가 alias 명령의 첫 번째 단어만 계산하고 해당 텍스트를 해당 별칭의 텍스트로 바꾼다는 것입니다.
이렇게 하면 bash는 alias 명령을 확장하지 않고 sudo <your_alias>
첫 번째 단어 자체만 평가합니다 .sudo
해결책은 sudo 자체에 대한 별칭을 만드는 것입니다.
다음과 같은 별칭을 만들면alias='sudo '
(sudo 명령 뒤의 공백에 주의하세요)원하는 명령을 완료할 수 있습니다.