리눅스 파일 실행할 때 ./를 쓰는 이유

리눅스에서 파일을 실행할 때 ./ 뒤에 파일명을 붙여서 명령어를 입력합니다. 습관처럼 사용하다보면 ./가 마치 리눅스에서 파일을 실행하는 기호(?)처럼 느껴지기도 합니다. 결과적으로는 맞는 말이지만, 정확히 말하면 ./는 상대경로로 현재 디렉토리를 나타내는 표시일 뿐입니다. 리눅스에서 파일을 실행하는 방법은 파일의 전체 경로(full-path)를 입력하는 것입니다.

파일 실행

예시) 리눅스 기본 명령어들

pwd 명령어는 현재 위치를 알려줍니다.

[root@localhost ~]# pwd
/root

 

터미널에 pwd를 입력하는 건 "pwd"라는 명령을 내리는 개념이 아닙니다. pwd라는 파일을 실행하는 것입니다. pwd 파일의 경로는 /usr/bin/pwd입니다. 파일의 전체 경로를 출력하는 which로 확인이 됩니다. 

[root@localhost ~]# which pwd
/usr/bin/pwd

 

pwd의 전체 경로를 입력해 보겠습니다. pwd를 입력하는 것과 동일한 결과를 출력합니다.

[root@localhost ~]# /usr/bin/pwd
/root

 

이처럼 pwd, cd, ls, cat 같은 리눅스 기본 명령어들이 경로를 입력하지 않아도 실행되는 이유는 경로가 리눅스 환경변수에 등록되어 있기 때문입니다.

[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

 

환경변수에 등록되면 어느 위치에서 cd, pwd, ls를 입력하더라도 리눅스가 알아서 환경변수에 등록된 경로에서 해당 파일이 있는지 확인하고 있으면 그 파일을 실행합니다.

예시) startup.sh 실행

다시 돌아와서, startup.sh라는 쉘 파일을 실행한다고 가정해 보겠습니다. startup.sh 파일의 위치는 /root입니다. pwd 명령어를 실행하는 단순한 파일입니다.

[root@localhost ~]# cat startup.sh
pwd

 

./는 상대경로로 현재 디렉토리를 의미합니다. 그러니 현재 사용자가 위치한 /root 디렉토리에서 startup.sh 파일의 상대경로인 ./startup.sh는 해당 파일을 실행합니다.

[root@localhost ~]# ./startup.sh
/root

 

절대경로로 startup.sh를 입력해도 동일하게 실행됩니다.

[root@localhost ~]# /root/startup.sh
/root

 

정리하면, 리눅스에서 파일을 실행하는 방법은 파일의 전체경로를 입력하는 것입니다. 일반적인 실행 파일을 실행하기 위해 경로를 환경변수에 등록하거나 전체 경로를 매번 적는 것은 번거롭습니다. 가장 효율적인 방법이 상대경로로 위치를 표시하고 실행하는 것입니다. 때문에 ./가 마치 파일 실행 명령어처럼 인식되기도 합니다.

반응형

댓글

Designed by JB FACTORY