/media/kalenpw/HDD/Documents/ShellScripts
내 하드 드라이브에는 모든 디렉터리에서 액세스할 수 있는 다양한 스크립트로 가득 찬 폴더가 있습니다 . 이전 전략은 모든 파일을 이 /usr/local/bin
작업에 복사하는 것이었지만 두 곳에서 변경해야 하는 스크립트를 업데이트할 때 이는 지루한 작업이었습니다.
운 좋게도 나는 최근에 심볼릭 링크에 대해 배웠고 이것이 완벽한 선택입니다.
내 홈 폴더에 테스트 스크립트를 만들었습니다.
test.sh
print "Hello"
그런 다음 나는 그것을 했고 예상대로 ln ~/test.sh /usr/local/bin
어디에서나 실행할 수 있었습니다.test.sh
내가 가진 문제는 모든 문서를 내 하드 드라이브(앞서 제공된 디렉토리)에 보관하는 것을 선호한다는 것입니다. 하지만 드라이브 간을 연결할 수 없어서 예상대로 오류가 발생했습니다.
장치 간 링크가 작동하지 않습니다
그래서 다음과 같은 심볼릭 링크를 만들어 보았습니다. sudo ln -s ./test.sh /usr/local/bin/
예상한 대로 링크가 생성됩니다. 그러나 test.sh
원하는 대로 어떤 디렉터리(또는 전혀)에서도 실행할 수 없습니다 . 파일이 링크 권한을 잃지 않도록 하기 위해 /usr/local/bin
그렇게 했는데 sudo chmod +x ./test.sh
오류가 발생했습니다.
chmod: './test.sh'에 액세스할 수 없습니다: 심볼릭 링크 수준이 너무 많습니다.
일반적인 사용법인 것 같아서 이 작업을 수행할 방법이 없다고 상상할 수 없지만 어떻게 해야 할지 모르겠습니다.
요약: 다른 물리적 드라이브에 있는 한 파일에서 다른 파일로의 링크를 생성하고 링크된 파일을 실행하는 기능을 계속 유지하는 방법입니다.
답변1
1) 많은 수의 스크립트에 액세스하는 올바른 방법은 스크립트가 있는 디렉토리를 에 추가하는 것입니다 $PATH
. 예를 들어 에 개인 스크립트가 있으므로 ~/bin
에 .profile
다음 줄이 있습니다.
export PATH=$HOME/bin:$PATH
이것이 나를 만든다~/bin
앞에같은 이름의 스크립트로 다른 프로그램을 "덮어쓸" 수 있도록 기존 경로를 삭제합니다. 이것을 원하지 않으면 새 디렉토리를 넣으십시오뒤쪽에 $PATH
.
따라서 스크립트를 경로에 저장하는 디렉터리를 추가하면 문제가 해결됩니다. 심볼릭 링크는 전혀 없습니다.
2) 배경: 특정 파일 시스템에서 파일은 식별자로 식별됩니다.아이노드 번호. 디렉토리는 단순히 파일 이름을 inode 번호에 매핑합니다. ln
없이 (하드 링크)를 사용 하는 경우 -s
기존 파일의 inode를 사용하여 새 디렉토리 항목이 생성됩니다. 따라서 이는 동일한 파일 시스템의 파일에만 작동할 수 있습니다.
OTOH를 사용하면 ln -s
심볼릭 링크가 생성됩니다. 내용이 지정한 경로인 특수 파일이며, 해당 파일에 액세스하려고 하면 파일 대신 이 경로가 사용됩니다. 심볼릭 링크를 생성하기 위해 루트가 될 필요는 없습니다.
3) 이 작업을 수행하면 ln ~/test.sh /usr/local/bin
명령 ln
은 이것이 /usr/local/bin
디렉터리임을 감지하므로 실제로 실행을 원한다고 가정합니다 ln ~/test.sh /usr/local/bin/test.sh
. 에서도 같은 일이 발생합니다 -s
. 디렉터리에 대한 기호 링크를 만들 수도 있으므로 이를 기억하는 것이 중요합니다. 그러나 이런 방식으로 순환 디렉터리 구조를 만들 수 있으므로 루트만 디렉터리에 대한 하드 링크를 만들 수 있습니다(그리고 루트는 이 작업을 피하기 위해 충분히 알고 있어야 합니다).
4) 하드 링크에는 파일 모드 비트가 있지만 기호 링크에는 없습니다. 기호 chmod
링크를 시도하면 가리키는 파일의 파일 모드 비트만 변경됩니다.
5) 실행할 수 없을 때 무슨 일이 일어났는지 모르겠습니다 test.sh
. Too many levels of symbolic links
오류 메시지는 어딘가에 다른 심볼릭 링크가 있어서 뭔가 엉망이 되었다고 제안했습니다. 무슨 일이 일어나고 있는지 알아보려면 디렉터리 구조를 살펴봐야 합니다.
/usr/local/bin/
6) 단순히 설정하는 것 PATH
(권장하지 않음)이 아닌 스크립트 디렉토리의 모든 스크립트를 심볼릭 링크로 연결하려면 다음을 사용하는 것이 좋습니다 stow
. 이 프로그램은 한 번에 많은 심볼릭 링크를 설정합니다. man stow
더 알아보기.