파일시스템 탐색

파일시스템 탐색

1. 리눅스 디렉토리 구조

리눅스는 FHS(Filesystem Hierarchy Standard)를 따르는 트리 구조입니다.

/                           루트 (최상위)
├── bin/                    필수 실행 파일 (ls, cp, mv )
├── boot/                   부팅 관련 파일 (커널, 부트로더)
├── dev/                    장치 파일 (디스크, USB )
├── etc/                    시스템 설정 파일
├── home/                   사용자  디렉토리
   ├── user1/
   └── user2/
├── lib/                    공유 라이브러리
├── media/                  이동식 미디어 마운트
├── mnt/                    임시 마운트 포인트
├── opt/                    추가 소프트웨어 패키지
├── proc/                   프로세스 정보 (가상 파일시스템)
├── root/                   root 사용자 
├── run/                    런타임 데이터
├── sbin/                   시스템 관리 명령어
├── srv/                    서비스 데이터
├── sys/                    커널/장치 정보 (가상)
├── tmp/                    임시 파일 (재부팅  삭제)
├── usr/                    사용자 프로그램
   ├── bin/               사용자 명령어
   ├── lib/               라이브러리
   ├── local/             로컬 설치 프로그램
   └── share/             공유 데이터
└── var/                    가변 데이터
    ├── log/               로그 파일
    ├── cache/             캐시
    └── www/                서버 파일

2. 주요 디렉토리 설명

디렉토리 설명 예시
/ 루트, 모든 디렉토리의 시작점 -
/home 일반 사용자 홈 디렉토리 /home/ubuntu
/root root 사용자 홈 -
/etc 시스템 설정 파일 /etc/passwd, /etc/hosts
/var 로그, 캐시 등 가변 데이터 /var/log/syslog
/tmp 임시 파일 (모든 사용자 쓰기 가능) -
/usr 사용자 프로그램, 라이브러리 /usr/bin/python3
/opt 서드파티 소프트웨어 /opt/google/chrome
/bin, /sbin 시스템 필수 명령어 /bin/ls, /sbin/reboot
/dev 장치 파일 /dev/sda, /dev/null
/proc 프로세스/커널 정보 (가상) /proc/cpuinfo

3. 경로의 이해

절대경로 (Absolute Path)

루트(/)부터 시작하는 전체 경로입니다.

# 절대경로 예시
/home/ubuntu/documents/file.txt
/etc/nginx/nginx.conf
/var/log/syslog

상대경로 (Relative Path)

현재 위치를 기준으로 한 경로입니다.

# 현재 위치가 /home/ubuntu 일 때
documents/file.txt      # → /home/ubuntu/documents/file.txt
./documents/file.txt    # → 같은 의미 (현재 디렉토리)
../shared/data.txt      # → /home/shared/data.txt

특수 디렉토리

기호 의미 예시
. 현재 디렉토리 ./script.sh
.. 상위 디렉토리 cd ..
~ 홈 디렉토리 cd ~ = cd /home/사용자
- 이전 디렉토리 cd -
/ 루트 디렉토리 cd /
# 특수 디렉토리 활용
cd ~              # 홈 디렉토리로
cd ~/documents    # 홈/documents로
cd ..             # 상위 디렉토리로
cd ../..          # 2단계 상위로
cd -              # 직전 디렉토리로

4. pwd - 현재 위치 확인

# 현재 작업 디렉토리 출력
pwd

출력:

/home/ubuntu/projects

5. cd - 디렉토리 이동

기본 사용법

# 절대경로로 이동
cd /var/log

# 상대경로로 이동
cd documents

# 홈 디렉토리로
cd
cd ~

# 상위 디렉토리로
cd ..

# 이전 디렉토리로
cd -

활용 예시

# 현재 위치 확인
pwd                    # /home/ubuntu

# documents로 이동
cd documents
pwd                    # /home/ubuntu/documents

# 상위로 이동
cd ..
pwd                    # /home/ubuntu

# 이전 디렉토리로
cd -
pwd                    # /home/ubuntu/documents

6. ls - 디렉토리 내용 보기

기본 사용법

# 현재 디렉토리
ls

# 특정 디렉토리
ls /var/log

# 여러 디렉토리
ls /home /tmp

주요 옵션

옵션 설명
-l 상세 정보 (long format)
-a 숨김 파일 포함 (all)
-h 용량을 읽기 쉽게 (human-readable)
-R 하위 디렉토리까지 재귀적
-t 수정 시간순 정렬
-S 파일 크기순 정렬
-r 역순 정렬
-d 디렉토리 자체 정보

옵션 조합

# 상세 + 숨김 파일
ls -la

# 상세 + 용량 읽기 쉽게
ls -lh

# 최신 파일 먼저
ls -lt

# 큰 파일 먼저
ls -lS

# 자주 쓰는 조합
ls -lah

ls -l 출력 해석

-rw-r--r-- 1 ubuntu ubuntu 4096 Jan 23 14:30 file.txt
│├──┬───┤ │ │      │      │    │            │
││  │   │ │ │      │      │    │            └── 파일명
││  │   │ │ │      │      │    └── 수정 시간
││  │   │ │ │      │      └── 파일 크기 (바이트)
││  │   │ │ │      └── 그룹
││  │   │ │ └── 소유자
││  │   │ └── 하드링크 수
││  │   └── 기타 권한 (r--)
││  └── 그룹 권한 (r--)
│└── 소유자 권한 (rw-)
└── 파일 타입 (- 파일, d 디렉토리)

파일 타입 표시

문자 타입
- 일반 파일
d 디렉토리
l 심볼릭 링크
c 문자 장치
b 블록 장치
s 소켓
p 파이프

7. 파일 찾기

find - 파일 검색

# 기본 문법
find [경로] [조건] [동작]

# 이름으로 찾기
find /home -name "*.txt"

# 대소문자 무시
find /home -iname "readme*"

# 타입 지정 (f: 파일, d: 디렉토리)
find /var -type f -name "*.log"
find /home -type d -name "config"

# 크기로 찾기
find / -size +100M          # 100MB 초과
find / -size -1k            # 1KB 미만

# 수정 시간으로 찾기
find /var/log -mtime -7     # 7일 이내 수정
find /tmp -mtime +30        # 30일 이전

# 권한으로 찾기
find / -perm 777

# 소유자로 찾기
find /home -user ubuntu

find와 동작 결합

# 찾은 파일 삭제
find /tmp -name "*.tmp" -delete

# 찾은 파일에 명령 실행
find /home -name "*.sh" -exec chmod +x {} \;

# 찾은 파일 목록 출력
find /var/log -name "*.log" -print

locate - 빠른 검색

데이터베이스를 이용한 빠른 검색입니다.

# 파일 검색
locate nginx.conf

# 대소문자 무시
locate -i readme

# 데이터베이스 업데이트 (관리자)
sudo updatedb

which - 명령어 위치

# 명령어 실행 파일 위치
which python3

출력:

/usr/bin/python3

whereis - 명령어 관련 파일

# 실행 파일, 소스, 매뉴얼 위치
whereis nginx

출력:

nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx /usr/share/man/man8/nginx.8.gz

8. 파일 내용 미리보기

file - 파일 타입 확인

file document.pdf
file script.sh
file image.jpg

출력:

document.pdf: PDF document, version 1.4
script.sh: Bourne-Again shell script, ASCII text executable
image.jpg: JPEG image data, JFIF standard 1.01

stat - 파일 상세 정보

stat file.txt

출력:

  File: file.txt
  Size: 1234            Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d      Inode: 123456      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/  ubuntu)   Gid: ( 1000/  ubuntu)
Access: 2024-01-23 10:00:00.000000000 +0900
Modify: 2024-01-23 09:30:00.000000000 +0900
Change: 2024-01-23 09:30:00.000000000 +0900
 Birth: 2024-01-20 15:00:00.000000000 +0900

9. 와일드카드 (Globbing)

패턴 설명 예시
* 0개 이상의 문자 *.txt, log*
? 정확히 1개 문자 file?.txt
[abc] a, b, c 중 하나 file[123].txt
[a-z] a~z 범위 중 하나 file[a-z].txt
[!abc] a, b, c 제외 file[!0-9].txt
# 모든 txt 파일
ls *.txt

# log로 시작하는 파일
ls log*

# 한 글자 숫자 파일
ls file?.txt

# 숫자로 끝나는 파일
ls file[0-9].txt

# a-c로 시작하는 파일
ls [a-c]*.txt

10. 실습 예제

실습 1: 디렉토리 탐색

# 1. 현재 위치 확인
pwd

# 2. 루트로 이동
cd /

# 3. 디렉토리 구조 확인
ls -l

# 4. /var/log로 이동
cd /var/log

# 5. 로그 파일 확인
ls -lh

# 6. 홈으로 돌아가기
cd ~

실습 2: 상세 정보 확인

# 숨김 파일 포함 전체 목록
ls -la ~

# 최근 수정된 파일 확인
ls -lt /var/log | head -10

# 큰 파일 찾기
ls -lhS /var/log | head -5

실습 3: 파일 찾기

# 홈에서 .conf 파일 찾기
find ~ -name "*.conf" 2>/dev/null

# /etc에서 nginx 관련 파일 찾기
find /etc -name "*nginx*" 2>/dev/null

# 100MB 이상 파일 찾기
find / -size +100M 2>/dev/null | head -10

# 7일 이내 수정된 로그 찾기
find /var/log -mtime -7 -name "*.log"

실습 4: 시스템 디렉토리 탐색

# CPU 정보 확인
cat /proc/cpuinfo | head -20

# 메모리 정보
cat /proc/meminfo | head -10

# 시스템 호스트명
cat /etc/hostname

# 현재 로그인 사용자 확인
cat /etc/passwd | head -5

다음 단계

03_File_Directory_Management.md에서 파일과 디렉토리를 생성, 복사, 이동, 삭제하는 방법을 배워봅시다!

to navigate between lessons