본문 바로가기
리눅스/Part 1 - Learning The Shell

리눅스 기초 | 2. 탐색 (Navigation)

by 객잔주인 2024. 5. 13.

해당 포스팅은 William E. Shotts, Jr.의 오픈소스 저서 The Linux Command Line(링크)를 번역한 내용입니다


가장 먼저 배워야 할 것은 Linux 시스템에서 파일 시스템을 탐색하는 방법입니다. 이번 챕터에서는 아래 3개의 커맨드에 대해 배워보겠습니다:

  • `pwd` - 현재 작업 디렉토리의 이름을 출력합니다
  • `cd` - Change Directory의 약자. 디렉토리를 변경합니다
  • `ls` - 디렉토리 내부의 항목들을 표시합니다

(역자: Windows에서 '폴더'라고 부르는 것을 Linux에서는 '디렉토리'라고 부릅니다)

Understanding the File System Tree

Windows와 마찬가지로 Linux와 같은 유닉스 계열 운영체제는 계층적 디렉토리 구조(hierarchical directory structure)로 파일을 구성합니다. 즉, 파일과 다른 디렉토리(directory)를 포함할 수 있는 디렉토리가 트리와 유사한 패턴으로 구성되어 있습니다. 파일 시스템의 첫 번째 디렉토리를 루트 디렉토리(root directory)라고 합니다. 루트 디렉토리에는 파일과 하위 디렉토리가 있고, 하위 디렉토리에는 다시 더 많은 파일과 하위 디렉토리가 포함되어있습니다.

 

각 저장 장치마다 분리된 파일 시스템을 가지는 Windows와 다르게 Linux와 같은 유닉스 계열 시스템에서는 저장 장치의 개수와 무관하게 하나의 파일 시스템 트리를 가집니다. 저장 장치는 시스템의 유지 관리를 담당하는 시스템 관리자에 따라 트리의 여러 지점에 마운트 됩니다.

The Current Working Directory

대부분의 사람들은 Figure 1과 같이 파일 시스템 트리를 나타내는 그래픽 파일 관리자에 익숙할 것입니다. 일반적으로 트리가 거꾸로, 즉, 루트가 가장 위에 있고 여러 가지들이 아래로 내려오는 형태로 표시되는 것을 볼 수 있습니다.

 

그러나 command line에서는 시각적으로 확인 할 수 없으므로 파일 시스템 트리를 탐색하기 위해서는 다른 방법을 찾아야 합니다.

 

파일 시스템이 거꾸로 뒤집힌 나무 모양의 미로이고 우리가 그 한가운데에 서 있다고 상상해보세요. 우리가 어떤 디렉토리 안에 있을 때 언제들지 현재 디렉토리 내부의 파일들을 볼 수 있고 상위 디렉토리(부모 디렉토리, parent directory)나 하위 디렉토리로 가는 경로를 볼 수 있습니다. 우리가 서 있는 디렉토리를 현재 작업 디렉토리(current working directory)라고 합니다. 현재 작업 디렉토리를 표시하기 위해 `pwd`(print working directory) 커맨드를 사용합니다.

 

맨 처임 시스템에 로그인 하면(혹은 터미널 에뮬레이터 세션을 시작하면), 현재 작업 디렉토리는 우리의 홈 디렉토리(home directory)로 설정됩니다. 각 사용자 계정에는 고유의 홈 디렉토리가 제공되며 일반 사용자가 파일을 작성할 수 있는 유일한 장소입니다.

Listing the Contents of a Directory

현재 작업 디렉토리의 파일과 디렉토리를 나열하기 위해서 우리는 `ls` 커맨드를 사용합니다.

 

사실 `ls` 커맨드를 사용하여 현재 작업 디렉토리 외에도 어느 디렉토리나 내용물을 표시할 수 있고, 그 외에도 여러 가지 재미있는 작업을 수행할 수 있습니다. 다음 장에서 `ls`에 대해 자세히 살펴보겠습니다.

Changing the Current Working Directory

작업 디렉터리를 바꾸기 위해서는 `cd` 커맨드를 사용합니다. `cd` 뒤에 옮기고 싶은 경로명을 입력해주면 됩니다. 경로명은 원하는 디렉토리로 가기 위해 트리의 브랜치를 따라 이동하는 경로입니다. 우리는 두 가지 방법으로 경로명을 제시할 수 있습니다. 첫 번째는 절대 경로(absolute pathnames), 두 번째는 상대 경로(relative pathnames)입니다. 먼저 절대 경로에 대해 알아보겠습니다.

Absolute Pathnames

절대 경로는 루트 디렉토리로 시작하여 원하는 디렉토리나 파일까지의 트리 브랜치를 입력합니다. 예를 들어, 우리 시스템에는 대부분의 프로그램이 설치되어 있는 디렉토리가 있습니다. 그 디렉토리의 경로명은 `/usr/bin`입니다. 이는 루트 디렉토리(경로명 앞의 슬래시로 표시됨)에서 시작하여 그 아래 "usr"라는 디렉토리가 있고 그 아래 "bin"이라는 디렉토리가 있다는 의미입니다.

 

이제 우리는 현재 작업 디렉토리를 `/usr/bin`으로 옮겼습니다. 쉘 프롬프트의 변화가 보이시나요? 편의를 위해서 자동으로 작업 디렉토리의 이름을 표시하도록 설정되어있습니다.

Relative Pathnames

절대 경로가 루트 디렉토리에서 출발해 목적 파일이나 디렉토리까지 이어지는 반면, 상대 경로는 현재 작업 디렉토리에서 출발 합니다. 이를 위해 몇가지 특수한 표기법 사용하여 파일 시스템 트리의 상대적인 위치를 표현합니다. 이러한 특수 표기법은 "."(점)과 ".."(점 점)입니다.

 

"." 표기는 작업 디렉토리를 의미하고 ".."은 작업 디렉토리의 부모 디렉토리를 의미합니다. 작동 방식은 다음과 같습니다. 작업 디렉토리를 다시 `/usr/bin`으로 옮겨보죠.

 

이제 작업 디렉토리를 `/usr/bin`의 부모 디렉토리인 `/usr`로 바꾸고 싶다고 해보겠습니다. 우리는 이를 두 가지 방법으로 수행할 수 있습니다. 절대 경로를 사용하거나

 

상대 경로를 사용할 수 있습니다.

 

두 가지 다른 방법은 같은 결과를 만듭니다. 어떤 것을 사용해야 할까요? 타이핑이 더 적게 필요한 것을 사용하면 됩니다!

 

비슷하게, `/usr` 디렉토리에서 `/usr/bin`으로 이동하는 것도 두 가지 방법이 있습니다. 절대 경로를 사용하거나

 

상대 경로를 사용할 수 있습니다.

 

여기서 중요한 한 가지를 짚고 가겠습니다. 거의 모든 상황에서 "./"를 생략해도 됩니다. 이는 암시적으로 이미 표현되어 있습니다. 따라서 `cd bin` 커맨드는 `cd ./bin`와 같은 일을 수행합니다. 일반적으로 경로명을 지정하지 않으면 작업 디렉토리를 가정합니다.

Some Helpful Shortcuts

Table 2-1에 현재 작업 디렉토리를 빠르게 변경하는 단축어들을 볼 수 있습니다.

 

Table 2-1: `cd` 단축어

단축어 결과
`cd` 작업 디렉토리를 홈 디렉토리로 옮깁니다
`cd -` 작업 디렉토리를 이전 디렉토리로 옮깁니다
`cd ~user_name` 작업 디렉토리를 user_name의 홈 디렉토리로 옮깁니다. 예를 들어 `cd ~bob`은 작업 디렉토리를 사용자 "bob"의 홈 디렉토리로 옮깁니다

 

Important Facts About Filenames

Linux 시스템에서 파일들은 Windows와 같은 다른 시스템과 비슷하게 파일명이 지어지지만 몇 가지 주요한 차이들이 있습니다.

1. 파일명이 마침표로 시작하는 파일은 숨겨집니다. `ls` 명령에서는 보이지 않으며 `ls -a` 명령을 사용해야 보여집니다. 계정이 만들어질 때 계정 설정을 위한 여러 개의 숨겨진 파일들이 홈 디렉토리에 배치됩니다. 11장에서는 이런 파일들을 자세히 살펴보며 여러분의 환경을 커스터마이징 하는 방법을 알아볼 것입니다. 또, 어떤 애플리케이션들은 구성 및 설정 파일을 홈 디렉토리에 숨겨진 형태로 배치합니다.

2. Linux의 파일명과 커맨드는 Unix와 마찬가지로 대소문자를 엄격히 구분합니다. "File1"이라는 파일과 "file1"이라는 파일은 다른 파일을 가리킵니다

3. Linux는 다른 운영 체제와 다르게 "파일 확장자(file extension)"라는 개념이 없습니다. 여러분 마음대로 파일 명을 지어도 됩니다. 파일의 내용 및/또는 용도는 다른 방법으로 결정됩니다. 유닉스 계열 운영체제는 파일의 내용/용도를 결정하는 데에 파일 확장자를 사용하지 않으나 많은 애플리케이션은 파일 확장자를 사용합니다.

4. Linux는 공백과 구두점이 포함된 긴 파일명을 지원하지만 파일명에 사용하는 구두점은 마침표, 대시, 밑줄로 제한하세요. 무엇보다도 파일명에 공백을 넣지 마세요. 파일명에서 단어 사이에 공백을 넣고 싶다면 대신 밑줄을 넣으세요. 나중에 스스로에게 감사하게 될 것입니다.

Summing Up

이번 장에서는 쉘이 시스템의 디렉토리 구조를 처리하는 방법을 설명했습니다. 절대 경로와 상대 경로, 그리고 해당 구조에서 이동하는 데에 사용하는 기본적인 명령어에 대해 배웠습니다. 다음 장에서는 이 지식을 사용해 최신 Linux 시스템을 둘러보겠습니다.