Linux와 커맨드 라인 기초
현재 디렉터리에 있는, 실행 권한이 붙은 스크립트 run.sh를 'run.sh'라고 입력하여 실행하려고 하면 'command not found'가 되고, './run.sh'라고 입력하면 실행할 수 있었다. 이유로 올바른 것은?
- Arun.sh에 실행 권한이 붙어 있지 않으며, 앞에 ./를 붙였을 때만은 권한이 없어도 실행할 수 있기 때문에
- B슬래시를 포함하지 않는 명령 이름은 환경 변수 PATH의 디렉터리에서만 찾으며, 현재 디렉터리는 일반적으로 포함되지 않기 때문에
- Crun.sh 첫 줄의 #!/bin/bash(셔뱅)는 앞에 ./를 붙여 실행했을 때만 읽히기 때문에
정답과 해설 보기
정답: B. 슬래시를 포함하지 않는 명령 이름은 환경 변수 PATH의 디렉터리에서만 찾으며, 현재 디렉터리는 일반적으로 포함되지 않기 때문에
셸(shell)은 슬래시를 포함하지 않는 명령 이름을 받으면, 환경 변수 PATH에 콜론으로 구분되어 나열된 디렉터리(/usr/local/bin:/usr/bin 등)를 순서대로 찾아 실행합니다. 현재 디렉터리는 다른 곳에 놓인 같은 이름의 악의적인 프로그램을 실수로 실행하지 않도록 일반적으로 PATH에 넣지 않습니다. ./run.sh처럼 슬래시를 포함한 경로를 쓰면 PATH를 찾지 않고 그 파일을 직접 실행합니다. 첫 줄의 #!/bin/bash(셔뱅)는 어느 방법으로 시작하든 그 스크립트를 실행할 인터프리터를 지정합니다.