경로를 짧고 정확하게 쓰는 네 기호
경로를 다룰 때 가장 자주 만나는 기호는 ~, ., .., -야. 짧지만 각각 가리키는 위치와 해석하는 주체가 달라.
~는 현재 사용자의 홈 디렉터리를 뜻해. 셸이 명령을 실행하기 전에 이 기호를$HOME값으로 펼쳐..은 현재 디렉터리를 뜻해../script.sh처럼 쓰면 경로에서 찾은 명령이 아니라 지금 디렉터리에 있는 파일을 실행하겠다는 뜻이 돼...은 부모 디렉터리를 뜻해.cd ../../grandparent처럼 여러 번 이어서 상위 경로로 올라갈 수 있어.-는cd와 함께 사용해서 직전에 있던 디렉터리로 돌아갈 때 써.
사용자 이름을 붙인 물결표
~만 쓰면 현재 사용자의 홈이고, ~alice는 Alice의 홈을 가리켜. 필요한 접근 권한이 있다면 여러 사용자가 함께 쓰는 서버에서 편리해. 1인용 Mac에서는 드물지만 오래된 Linux 스크립트에서는 자주 보여.
물결표와 중괄호 확장
물결표는 실제 디렉터리 이름이 아니라 셸 문법이야. 그래서 cp ~/.zshrc ~/.zshrc.bak는 홈 경로로 펼쳐지지만, 작은따옴표로 감싼 '~/file'은 문자 그대로 남아. 따옴표가 셸 확장을 막기 때문이야.
닷파일 관례
Unix에서는 이름이 .으로 시작하는 파일을 숨김 파일로 다뤄. .zshrc, .bashrc, .git, .env가 대표적이야. 일반 ls에서는 보이지 않고 ls -A로 확인할 수 있어.
물결표는 셸이 먼저 펼쳐
~는 모든 프로그램이 알아듣는 일반 경로 문자가 아니야. 셸은 명령 실행 전에 이를 홈 경로로 바꾸지만 "~"나 설정 파일 안의 문자열은 그대로 남을 수 있어. 스크립트나 앱 설정에서는 명시적인 홈 변수를 쓰는 편이 안전해.
점 두 개도 권한을 건너뛰지는 못해
경로에 ..를 넣어 부모 디렉터리를 가리켜도 실제 경로의 각 디렉터리를 통과하려면 실행 권한이 필요해. 경로가 맞아 보이는데 접근이 거부되면 마지막 파일만 보지 말고 모든 디렉터리 구성 요소의 권한을 확인해.
짧은 기호를 만날 때마다 파일 시스템과 셸 가운데 어느 층이 해석하는지 먼저 구분해.
확장이 끝난 실제 경로를 출력해 보면 추측을 증거로 바꿀 수 있어.