본문 바로가기
my_lesson/_Linux

Linux - 경로(Path)의 의미와 경로 활용

by boolean 2016. 3. 17.
728x90
10.3.경로(Path)의 의미와 경로 활용



10.3.1.경로(Path) 표시 방법과 경로 디렉토리 구분 기호 /



경로는 파일의 위치를 알려주는 주소입니다.


가지가 뻗어나가는 것 같은 위의 트리 구조를 문자로 표현할 때는 경로이름(패스이름, Path Name)으로 표시합니다. 경로는 파일이 있는 곳을 찾아가는 경로를 말합니다. 다시 말해 파일의 위치를 알려주는 문장입니다. 인터넷으로 비유하자면 파일이 있는 곳을 알려주는 주소(URL)에 해당합니다. 

경로 이름은 다음과 같은 방식으로 표시됩니다. 

/GAME/PUZZLE/TETRIS/TETRIS.EXE 

경로는 루트 디렉토리부터 적으며, 각 디렉토리는 / 기호로 구분합니다.


위의 문장을 해석하면 다음과 같습니다. 

하드디스크의 루트 디렉토리 밑에 GAME 디렉토리가 있고, 그 밑에는 또 PUZZLE 디렉토리가 있고, PUZZLE 디렉토리 밑에는 또 TETRIS 디렉토리가 있으며, TETRIS 디렉토리 밑에(안에) 있는 TETRIS.EXE라는 파일. 

그러니까 결국 위의 문장은 TETRIS.EXE라는 파일이 어디에 있는지를 알려주는 문장입니다. 이처럼 TETRIS.EXE라는 파일이 어디 있는지를 알려주는 문장을 경로 이름이라고 합니다. 


/ 기호만 나오거나 첫 번째로 적는 / 기호는 루트 디렉토리를 뜻합니다.


/ 기호는 디렉토리 구분 기호로 제일 첫 글자에 나오는 / 기호는 루트 디렉토리를 뜻합니다. 혹은 단독으로 사용할 때도 루트 디렉토리를 뜻합니다. 

C:뒤에 붙은 역빗금 기호인 / 기호는 모 디렉토리와 자식 디렉토리를 구분하는 디렉토리 구분자입니다. 이때 드라이브 이름 뒤에 제일 먼저 나온 것은 루트 디렉토리를 뜻합니다. 또한 어떤 경로명을 뜻할 때 / 기호가 제일 먼저 나왔다면 이는 루트 디렉토리를 뜻하는 것으로 약속을 정했습니다. 

예를 들어 '/GAME/PUZZLE' 라는 문장은 루트 디렉토리 밑에 있는 GAME이라는 디렉토리 밑에 있는 PUZZLE이라는 디렉토리임을 뜻합니다.
그러나 GAME과 PUZZLE 사이의 / 기호는 두 디렉토리를 구별해주는 단순한 디렉토리 구분자입니다. 따라서 아래의 두 문장은 다른 의미를 담고 있습니다. 

[루트 디렉토리에 있을 때] 
(1) /GAME/PUZZLE 
(2) GAME/PUZZLE 

(1)번의 '/GAME/PUZZLE'는 루트 디렉토리 밑에 있는 GAME 디렉토리 밑의 PUZZLE 디렉토리임을 나타냅니다. 

(2)번의 'GAME/PUZZLE'는 현재 디렉토리 밑에 있는 GAME이라는 디렉토리 밑의 PUZZLE 디렉토리임을 나타냅니다. 이때 GAME이라는 디렉토리가 어느 디렉토리 밑에 있는지 알 수 없습니다. 루트 디렉토리 밑에 포함된 것일 수도 있지만 다른 서브 디렉토리 밑에 포함된 디렉토리일 수도 있습니다. 따라서 (2)번 문장의 GAME 디렉토리가 루트 밑에 있는 디렉토리라는 보장이 없습니다. 

이처럼 / 기호 하나에 의하여 디렉토리를 지정하는 문장의 의미는 큰 차이를 보입니다. 그래서 프로그램을 실행시키거나 인터넷에서 문서를 검색할 때는 정확한 경로명이 필요한 것입니다. 

도스나 윈도98은 \ 기호를, 인터넷에서는 / 기호를 디렉토리 구분자로 사용합니다.


그리고 다시 한 번 말씀 드리지만 도스나 윈도98에서는 디렉토리 구분자로 \ 기호를 사용하지만 인터넷에서는 / 기호를 사용한다는 사실입니다. 그 까닭은 인터넷용 컴퓨터는 운영체제를 리눅스나 유닉스를 많이 사용하는데 그들 운영체제가 디렉토리 구분자로 / 기호를 사용하기 때문입니다. 


10.3.2.디렉토리 기호인 / . .. ~ 기호의 의미



.는 자신을 ..는 부모디렉토리를 뜻합니다.


cd .. 명령은 현재 작업 중인 디렉토리의 바로 위 디렉토리로 즉시 이동하라고 지시합니다. 두 단계 위 디렉토리로 이동하기 위해서는 cd ../.. 명령을 사용하시면 됩니다.


서브 디렉토리에서 파일 목록을 보여주는 ls 명령을 이용하면 맨 처음에 . 기호와 .. 기호가 표시됩니다. 마침표 하나와 마침표 두 개는 왜 표시되며 무슨 의미를 담고 있는 것일까요? 

파일 이름을 보여줄 때 사용하는 마침표 기호는 파일 이름과 확장자를 구별하는 특수기호로 사용합니다. 그러나 디렉토리 목록을 보여줄 때 사용하는 마침표 하나인 . 기호는 자식 디렉토리임을 뜻합니다. 다시 말해서 자신이 서브 디렉토리임을 알려주는 기호입니다. 


따라서 다음 명령은 현재의 디렉토리로 이동하라는 명령이므로 아무런 효과가 없는 명령이 됩니다. 

[보기1] 현재 디렉토리로 이동하는 명령어 
cd . 

그리고 현재 디렉토리 밑에 있는 tetris라는 프로그램을 실행시키고자 한다면 다음과 같이 명령을 주면 됩니다. 

[보기2] 현재 디렉토리 안의 tetris 실행시키는 명령어 
./tetris 

그리고 .. 기호는 부모 디렉토리가 있다는 뜻입니다. 그러니까 .. 디렉토리에서 . 디렉토리가 생겼다는 뜻입니다. 두 점이 결합하여 하나의 점을 생산했다는 점은 엄마와 아빠라는 두 점이 만나 자식이라는 한 점을 낳는다는 인생과 같습니다. 


/ 기호가 단독으로 사용되면 루트 디렉토리를 뜻합니다.


/ 기호는 디렉토리를 구분하는 문자로 사용하지만 단독으로 사용하면 루트 디렉토리를 뜻합니다. 즉 /GAME/PUZZLE/TETRIS/에서 각각의 / 기호는 디렉토리를 구분하는 디렉토리 지정자 역할을 하지만 맨 앞에 있는 / 하나만 달랑 사용하면 루트 디렉토리를 뜻합니다. 

이는 / 기호 하나만 사용했을 때도 어떤 디렉토리인지 알 수 있는 유일한 디렉토리이기 때문입니다. /GAME/PUZZLE/TETRIS/에는 / 기호가 4번 사용되는데, 중간의 / 기호를 생략하거나 / 기호 없는 상태로는 어떤 디렉토리인지 알 수 없습니다. / 기호만 보고 PUZZLE 디렉토리인지 TETRIS 디렉토리인지 알 수 있는 사람은 없습니다. 그렇지만 모든 것을 다 생략하고 / 기호만 남으면 루트 디렉토리를 뜻하는 것이라고 생각할 수 있습니다. 그래서 / 기호만 사용할 경우에는 루트 디렉토리라는 뜻이 됩니다. 

따라서 다음 명령을 사용하면 어느 곳에 있더라도 항상 루트 디렉토리로 이동할 수 있습니다. 

[보기3] 루트 디렉토리로 이동하는 명령어 
cd / 


~ 기호는 홈디렉토리를 뜻합니다.


~ 기호는 홈디렉토리를 뜻합니다. 홈디렉토리는 로그인 사용자가 사용할 수 있는 디렉토리를 뜻합니다. 이 중에서 최상위 디렉토리를 뜻하는 기호입니다. hangul 이라는 사용자가 서버 컴퓨터의 하드디스크에서 /user/www3/hangul 이라는 디렉토리를 배정받았다고 합시다. 이때 hangul 사용자의 홈페이지는 '/user/www3/hangul'이 됩니다. 따라서 hangul로 로그인 사용자가 ~를 사용하면 이는 곧 '/user/www3/hangul'와 동일한 의미를 지닙니다. 

예컨대 디렉토리 사이를 이동하는 명령어는 cd인데 hangul 사용자가 어떤 디렉토리에 있건간에 'cd ~'이라고 명령을 내리면 hangul 사용자의 홈디렉토리로 이동할 수 있습니다. 

[보기4] 홈디렉토리로 이동하는 명령어 
cd ~ 


10.3.3.절대경로와 상대경로의 차이점



경로를 지정하는 방법은 상대경로와 절대경로 지정법이 있습니다.


프로그램을 실행시키기 위해서는 해당 프로그램의 이름을 적어주어야 합니다. 즉 실행 파일의 이름을 적고 [Enter]키를 눌러주면 됩니다. 이때 실행 파일의 경로를 적어주어야 하는데 경로를 지정하는 방법은 두 가지로 구분합니다. 상대경로를 지정하는 방법과 절대경로를 지정하는 방법입니다. 

절대경로는 루트 디렉토리부터 지정하는 경로 지정법입니다.


상대경로란 현재 와있는 디렉토리를 기준으로 지정하는 경로 지정법입니다. 절대경로란 무조건 루트 디렉토리부터 지정하는 방법입니다. 

그러니까 '/GAME/PUZZLE/TETRIS' 또는 '/GAME/PUZZLE/TETRIS/TETRIS.EXE'와 같이 루트 디렉토리부터 디렉토리나 파일의 경로를 적어주는 것이 절대경로 지정방법입니다. 

상대경로는 현재 디렉토리를 기준으로 지정하는 방식입니다.


그리고 'TETRIS.EXE'나 'TETRIS/TETRIS.EXE'와 같이 루트 디렉토리를 뜻하는 디렉토리 구분자가 없을 경우에는 상대경로 지정방법입니다. 'TETRIS.EXE'는 현재의 디렉토리에 있는 'TETRIS.EXE'파일을 뜻하고, 'TETRIS/TETRIS.EXE'는 현재의 디렉토리 밑에 있는 TETRIS라는 디렉토리에 있는 TETRIS.EXE를 뜻합니다. 

상대경로를 이용할 때는 현재의 디렉토리를 기준으로 하므로 적습니다. 이때 현재의 디렉토리를 뜻하는 기호로는 점 하나인 . 기호를 사용합니다. 그리고 자신의 바로 한 단계 위인 모 디렉토리를 가리키는 기호로는 점 두 개인 .. 기호를 사용합니다. 그러니까 두 사람의 엄마아빠 밑에서 한 명의 자식이 태어났다는 뜻입니다. 


10.3.4.디렉토리 기호를 이용한 경로 지정방법



.. 기호는 현재의 디렉토리 바로 한 단계 위의 디렉토리를 뜻합니다.


점 기호를 이용해 상대경로를 지정하는 방법을 한 번 보겠습니다. 어떤 디렉토리를 이동해야 한다고 합시다. 현재 사용자가 PUZZLE 디렉토리 밑의 BADUK 디렉토리에 와있는 상태라고 합시다. BADUK 디렉토리에 와있는 상태란 사용자가 CD 명령을 이용하여 프롬프트에 표시되는 경로명을 BADUK이라는 디렉토리로 바꾸었다는 뜻입니다. 


이제 CD 명령을 이용하여 PUZZLE 디렉토리 밑에 있는 TETRIS 디렉토리로 이동해야 한다고 합시다. 이럴 경우 루트부터 경로를 지정하는 절대경로 지정방법을 사용하면 다음과 같이 명령어를 줍니다. 

[보기1] 절대경로 지정 방법 
CD /GAME/PUZZLE/TETRIS 

그리고 상대적으로 지정할 때는 다음과 같이 적습니다. 

[보기2] 상대경로 지정 방법 
CD ../TETRIS 

'CD ../TETRIS' 현재 디렉토리의 모디렉토리 밑에 있는 TETRIS로 이동하라는 뜻입니다.


절대경로 지정방법은 쉽게 이해할 수 있으리라 생각합니다. 상대경로 지정방법은 절대경로 지정방법보다 짧습니다. 예문은 현재의 디렉토리의 모 디렉토리(..)로 이동한 다음에 그 밑에 있는(/) TETRIS라는 디렉토리로 이동하겠다는 뜻입니다. 그러니까 CD ..까지는 BADUK 디렉토리의 모디렉토리인 PUZZLE 디렉토리로 이동하라는 뜻입니다. 따라서 한 줄로 쓴 예문은 다음의 두 예문을 합쳐놓은 것과 같습니다. 

[보기3] CD ../TETRIS의 의미 
CD .. 
CD TETRIS 

먼저 'CD .. ' 명령으로 모디렉토리로 이동합니다. BADUK의 모디렉토리는 PUZZLE입니다. 그 다음에 PUZZLE 디렉토리에서 밑에 속한 TETRIS로 이동하는 것입니다. 'CD ../TETRIS'는 이 두 명령어를 하나로 합친 것과 같습니다. 



댓글