리눅스(Linux) 운영체제를 처음 접하는 엔지니어나 개발자가 가장 먼저 마주하는 환경은 윈도우(Windows)나 맥OS(macOS)처럼 마우스로 아이콘을 더블클릭하는 그래픽 인터페이스(GUI)가 아닙니다. 오직 텍스트와 커서만 깜빡이는 검은색의 터미널 화면, 즉 명령줄 인터페이스(CLI, Command Line Interface)입니다.
리눅스 서버 환경에 접속했을 때 가장 먼저 수행해야 하는 작업은 "내가 지금 어디에 있으며, 이 디렉토리 안에는 어떤 파일들이 있고, 원하는 곳으로 어떻게 이동할 것인가"를 파악하는 것입니다. 이를 시스템 탐색이라고 부르며, 탐색의 중심에는 pwd, ls, cd라는 세 가지 필수 명령어가 있습니다.
리눅스 파일 시스템의 독특한 구조적 특징을 이해하고, 이 세 가지 명령어를 실무 예제와 함께 상세히 풀어나가겠습니다.
윈도우는 C:\, D:\와 같이 물리적인 디스크 드라이브를 기준으로 최상위 경로가 나뉩니다. 반면 리눅스는 물리적인 하드디스크의 개수나 파티션에 상관없이, 모든 파일과 디렉토리가 단 하나의 최상위 지점인 루트(Root) 디렉토리로부터 나뭇가지처럼 뻗어나가는 단일 트리 구조를 취합니다. 이 루트 디렉토리를 나타내는 기호가 바로 슬래시(/)입니다.
이 트리 구조 안에서 특정 파일이나 디렉토리의 위치를 가리키는 방법은 크게 두 가지로 나뉩니다.
최상위 루트 디렉토리(/)를 기준으로 파일의 전체 주소를 생략 없이 모두 적는 방식입니다. 내가 현재 어떤 디렉토리에 머물고 있든 상관없이 항상 동일한 위치를 가리킵니다.
예시: /var/log/messages, /home/user01/downloads
'현재 내가 서 있는 위치(현재 작업 디렉토리)'를 기준으로 위치를 계산하는 방식입니다. 상대 경로를 사용할 때는 두 가지 특수 기호를 반드시 기억해야 합니다.
. (마침표 하나): 현재 디렉토리를 의미합니다.
.. (마침표 둘): 현재 위치에서 한 단계 위인 부모 디렉토리를 의미합니다.
예시: ../bin (현재 위치의 상위 디렉토리로 올라간 뒤 그 안에 있는 bin 디렉토리로 진입)
리눅스 터미널에 접속하면 프롬프트 규칙에 따라 현재 위치가 일부 표시되기도 하지만, 전체 경로를 명확히 알기 어려울 때가 많습니다. 특히 자동화 스크립트를 작성하거나 깊숙한 하위 디렉토리에서 작업할 때는 현재 위치를 오판하여 엉뚱한 파일을 지우는 대형 사고가 날 수 있습니다.
pwd(Print Working Directory) 명령어는 현재 작업 중인 디렉토리의 절대 경로를 화면에 고스란히 출력해 주는 나침반 같은 역할을 합니다.
일반적인 터미널 환경에서 pwd를 입력하면 다음과 같이 깔끔한 절대 경로가 반환됩니다.
Bash
pwd
# 출력 결과: /home/user01/workspace/projects
이 명령어는 시스템 관리 자동화 셸 스크립트를 작성할 때 프로그램이 실행되는 물리적 위치를 동적으로 캡처하여 로그를 남기거나 환경 변수를 설정할 때 매우 유용하게 쓰입니다.
Bash
#!/bin/bash
# 현재 스크립트가 실행되는 위치를 변수에 저장
CURRENT_DIR=$(pwd)
echo "현재 작업 디렉토리는 ${CURRENT_DIR} 입니다. 이곳에 백업을 수행합니다."
디렉토리에 진입했다면 그 안에 어떤 파일이 있고 어떤 하위 폴더가 있는지 확인해야 합니다. ls(List) 명령어는 지정한 디렉토리의 내용물 목록을 보여주는 명령어입니다. 아무런 인자 없이 ls만 치면 단순히 파일 이름만 나열되므로, 실무에서는 시스템 하드닝(보안 강화)과 상태 분석을 위해 다양한 옵션을 조합하여 사용합니다.
-l (Long format): 파일의 권한, 소유자, 크기, 수정 날짜 등 상세 정보를 세로로 정렬하여 보여줍니다.
-a (All): 리눅스에서 마침표(.)로 시작하는 파일은 숨김 파일(Hidden File)로 처리되는데, 이 숨김 파일까지 모두 표시합니다.
-h (Human-readable): 파일 크기를 바이트(Byte) 단위가 아닌 KB, MB, GB 등 사람이 직관적으로 읽기 쉬운 단위로 변환해 줍니다.
-t (Time): 파일이 생성되거나 수정된 시간 순서대로 정렬하여 보여줍니다. 최신 로그를 찾을 때 유용합니다.
ls -lah)웹 서버의 설정 디렉토리나 사용자의 홈 디렉토리에서 보안 점검을 수행할 때 가장 많이 사용하는 명령어 조합입니다.
Bash
ls -lah /home/user01
이 명령어를 실행하면 다음과 같은 정형화된 데이터 덤프가 출력됩니다. 각 열이 의미하는 바를 정확히 해석할 수 있어야 시스템 탐색의 완성도가 높아집니다.
Plaintext
drwxr-xr-x. 3 user01 user01 4.0K Jun 12 09:00 .
drwxr-xr-x. 4 root root 4.0K Jun 12 08:30 ..
-rw-------. 1 user01 user01 12K Jun 12 09:15 .bash_history
-rw-r--r--. 1 user01 user01 220 Jun 12 08:00 .bashrc
-rw-r--r--. 1 user01 user01 1.5M Jun 12 09:10 report.pdf
첫 번째 열 (drwxr-xr-x, -rw-------): 파일의 유형과 파일 권한(Permission)입니다. 맨 앞 글자가 d이면 디렉토리, -이면 일반 파일입니다.
두 번째 열 (3, 1): 링크 수(해당 파일을 가리키는 하드 링크의 개수)입니다.
세 번째 및 네 번째 열 (user01 user01): 해당 파일의 '소유자(User)'와 '소유 그룹(Group)'을 나타냅니다. 시스템 보안 가이드에 따라 인가되지 않은 계정이 소유자로 지정되어 있지 않은지 감시해야 합니다.
다섯 번째 열 (4.0K, 1.5M): -h 옵션 덕분에 파일 크기가 메가바이트(M)나 키로바이트(K) 단위로 가독성 있게 출력된 모습입니다.
여섯 번째 열 (Jun 12 09:10): 파일이 마지막으로 수정된 날짜와 시간입니다.
일곱 번째 열 (.bash_history, report.pdf): 파일이나 디렉토리의 이름입니다. .bash_history와 같이 마침표로 시작하는 파일은 사용자가 터미널에서 입력했던 명령어 흔적이 담긴 숨김 파일로, -a 옵션이 있어야만 식별할 수 있습니다.
위치를 확인하고 내부 구조를 보았다면, 이제 목적지로 이동할 차례입니다. cd(Change Directory) 명령어는 현재 작업 디렉토리를 다른 곳으로 전환합니다. 절대 경로와 상대 경로를 모두 지원하며, 실무 능률을 비약적으로 높여주는 몇 가지 내장 숏컷(Shortcut) 특수 문자가 존재합니다.
cd ~ (물결 표시) 또는 인자 없이 cd만 입력: 현재 로그인한 사용자의 홈 디렉토리로 즉시 이동합니다. (/home/사용자명)
cd - (하이픈): 바로 직전에 머물렀던 디렉토리로 순간 이동합니다. 두 개의 서로 다른 경로를 번갈아가며 작업할 때 화면 이동 속도를 극적으로 줄여줍니다.
cd /: 시스템의 최상위 루트 디렉토리로 이동합니다.
실제 웹 서버 로그를 분석하기 위해 디렉토리를 넘나드는 상황을 가정해 보겠습니다.
Bash
# 1. 시스템 로그 디렉토리로 절대 경로 이동
cd /var/log/nginx
# 2. 이동 후 위치 검증
pwd
# 출력: /var/log/nginx
# 3. 현재 위치에서 한 단계 위인 /var/log 디렉토리로 상대 경로 이동
cd ..
# 4. /var/log 디렉토리 안의 다른 하위 디렉토리(audit)로 진입
cd audit
pwd
# 출력: /var/log/audit
# 5. 작업 중 갑자기 직전 디렉토리인 /var/log로 되돌아가야 할 때
cd -
# 출력: /var/log (어디로 이동했는지 경로를 화면에 출력해 줌)
# 6. 모든 작업을 마치고 내 개인 홈 디렉토리로 복귀
cd
pwd
# 출력: /home/user01
공백(Space)이 포함된 디렉토리 이름 처리:
리눅스는 명령어와 인자를 공백으로 구분합니다. 만약 디렉토리 이름에 My Project 처럼 공백이 들어가 있다면 cd My Project 입력 시 오류가 발생합니다. 이 경우 역슬래시(\)를 이용해 공백을 이스케이프하거나 전체를 따옴표로 감싸야 합니다.
cd My\ Project
cd "My Project"
실무 팁: 리눅스 환경에서 파일이나 디렉토리를 생성할 때는 공백 대신 언더바(_)나 하이픈 -을 사용하는 것이 표준적인 관례입니다.
대소문자 구별 무조건 준수:
윈도우와 달리 리눅스 파일 시스템은 대소문자를 완전히 다른 문자로 취급합니다. Download 디렉토리와 download 디렉토리는 같은 공간에 별개로 존재할 수 있으므로, 경로를 입력할 때 대소문자 오타가 나지 않도록 주의해야 합니다.
탭(Tab) 키 자동 완성 기능 극대화:
상기 언급한 대소문자 문제나 긴 경로 입력의 불편함을 획기적으로 줄여주는 것이 탭 키입니다. cd /v까지만 치고 Tab 키를 누르면 시스템이 자동으로 cd /var/로 채워줍니다. 자동 완성을 습관화하면 오타로 인한 시간 낭비를 완벽히 차단할 수 있습니다.
리눅스 시스템 탐색의 삼총사인 pwd, ls, cd는 서버 운영의 기초 중의 기초입니다.
pwd로 나의 좌표를 명확히 찍고,
ls -lah로 보이지 않는 숨김 파일과 보안 권한까지 꼼꼼히 살피며,
cd와 경로 규칙(절대/상대)을 활용해 트리 구조 속을 막힘없이 이동하는 능력을 갖출 때,
비로소 복잡한 서버 자동화 스크립트 설계나 긴박한 시스템 장애 트러블슈팅을 완벽하게 수행할 수 있는 탄탄한 발판이 마련됩니다. 다음 회차에서는 이 탐색 능력을 바탕으로 파일과 디렉토리를 안전하게 생성하고 삭제하는 관리 전략을 다루겠습니다.