cmod.ify
[LINUX] FILE SYSTEM 본문
1. 리눅스 파일 시스템 개요
- 유닉스 철학 계승: "모든 것은 파일이다(Everything is a file)"라는 원칙 하에 마우스, 키보드, 디스크 등 모든 장치를 파일로 관리함.
- 싱글 루트 트리 구조: 윈도우(C:, D:)와 달리 뿌리(/, 루트)가 하나인 계층형 트리 구조임.
- 추가 디스크는 특정 디렉토리에 연결(마운트)하여 사용함.
- 경로 구분:
- 절대 경로: /부터 시작하는 전체 경로.
- 상대 경로: 현재 위치(.)나 상위 위치(..)를 기준으로 하는 경로.
- 홈 디렉토리: 사용자별 할당 공간. ~ 기호로 표시함.
2. 주요 디렉토리 구성 및 역할
| 디렉토리 | 주요 역할 및 특징 |
| /dev | 디바이스 파일: 하드디스크, 마우스 등 하드웨어를 파일 형태로 관리하는 곳. |
| /home | 사용자 홈 디렉토리: 일반 사용자들의 개인 작업 공간 (예: /home/user1). |
| /root | 관리자 홈 디렉토리: 시스템 최고 관리자(root) 전용 홈 디렉토리. |
| /etc | 설정 파일: 시스템의 부팅, 네트워크, 서비스 관련 설정 파일들이 모여 있음. |
| /usr | 사용자 프로그램: 기본 실행 파일, 라이브러리, 헤더 파일 등이 저장됨. |
| /boot | 부팅 관련: 리눅스 커널, 부트로더(GRUB) 등 부팅에 필수적인 파일 저장. |
| /var | 가변 데이터: 로그(log), 메일, 데이터베이스 등 내용이 수시로 변하는 데이터 관리. |
| /tmp | 임시 파일: 누구나 쓸 수 있는 임시 저장소. 재시작 시 모든 내용 삭제됨. |
| /proc | 프로세스 정보: 실행 중인 프로세스와 커널 정보를 담은 가상 파일 시스템. |
| /sys | 커널 정보: 리눅스 커널 및 장치 드라이버 관련 정보 저장. |
| /mnt | 임시 마운트: 다른 파일 시스템이나 하드디스크를 임시로 연결할 때 사용. |
| /media | 탈착식 매체: USB, DVD 등 외부 장치가 자동으로 연결(마운트)되는 지점. |
| /opt | 추가 패키지: 타사 애플리케이션이나 추가 패키지가 설치되는 경로. |
| /run | 런타임 데이터: 시스템 부팅 이후 실행 중인 서비스와 관련된 데이터 저장. |
| /srv | 서비스 데이터: FTP, Web 등 시스템이 외부로 제공하는 서비스의 데이터 저장. |
| /lost+found | 복구 파일: 파일 시스템 오류 발생 시 체크포인트에서 복구된 파일들이 저장됨. |
3. 디렉토리 관리 및 이동 명령어
| 명령어 | 기능 및 특징 |
| pwd | Print Working Directory: 현재 작업 중인 디렉토리의 절대 경로를 출력함. |
| cd | Change Directory: 디렉토리 이동. 경로 미지정 시 홈 디렉토리(~)로 바로 이동함. |
4. 디렉토리 내용 확인 (ls)
파일 및 디렉토리 목록을 확인하는 명령어로, 다양한 옵션을 조합하여 사용함.
- 기본 형식: ls [옵션] [경로]
주요 옵션
- -a: 숨김 파일(마침표로 시작)을 포함하여 모든 파일 출력.
- -A: .(현재)과 ..(상위)을 제외한 모든 내용 출력.
- -l: 파일의 상세 정보(권한, 소유자, 크기, 수정일 등) 출력.
- -d: 디렉토리 내부가 아닌 디렉토리 자체의 정보를 출력.
- -i: 파일의 고유 번호인 i-node 번호를 첫 번째 행에 표시.
- -F: 파일의 종류를 기호로 표시 (* 실행파일, / 디렉토리, @ 심볼릭 링크).
- -L: 심볼릭 링크일 경우 연결된 원본 파일의 정보를 출력.
- -R: 하위 디렉토리의 목록까지 재귀적으로 모두 출력.
5. 파일 상세 정보 해석 (ls -al)
ls -al 명령 실행 시 출력되는 행의 구성 요소는 다음과 같음.
예시: drwxr-xr-x 23 root root 4096 Jan 6 02:36 /
- 파일 종류: d(디렉토리), -(일반 파일), l(링크 파일).
- 접근 권한(Permission): r(읽기), w(쓰기), x(실행) 권한을 소유자/그룹/기타 사용자 순으로 표시.
- 링크 수: 해당 파일에 연결된 하드 링크의 개수.
- 소유자: 파일을 만든 사용자 계정명.
- 그룹: 파일이 속한 그룹명.
- 파일 크기: 바이트(Byte) 단위의 용량.
- 수정 시간: 파일이 마지막으로 변경된 날짜와 시간.
- 파일 이름: 파일 또는 디렉토리의 이름.
6. 디렉토리 생성 및 삭제
디렉토리 작업은 원칙적으로 본인의 홈 디렉토리나 /tmp(공용 쓰기 권한)에서 가능함.
디렉토리 생성 (mkdir)
- 기본 사용: mkdir [디렉토리명] (여러 개 동시 생성 가능).
- -p 옵션: 중간 단계의 디렉토리가 없어도 자동으로 계층 전체를 생성함.
- 예: mkdir -p tmp/mid/han (mid 디렉토리가 없어도 에러 없이 생성).
디렉토리 삭제 (rmdir 및 rm)
- rmdir [디렉토리]: 비어 있는 디렉토리만 삭제 가능.
- rmdir -p: 하위 디렉토리를 지우면서 상위 디렉토리가 비게 되면 함께 삭제.
- rm -rf [디렉토리]: 디렉토리 안에 파일이 있어도 강제로(Recursive + Force) 모두 삭제함. (주의해서 사용 필요)
팁: ls 명령어로 특정 파일명을 입력했을 때 이름이 나오면 존재하는 것이고, No such file or directory 에러가 뜨면 존재하지 않는 것임.
7. 파일의 구성 요소와 i-node
리눅스 파일은 크게 세 가지 요소로 구성됨.
- 파일명: 사용자가 파일을 식별하기 위한 이름. 대소문자를 구분하며 /를 제외한 문자 사용 가능. (마침표 .로 시작하면 숨김 파일)
- i-node (Index Node): 파일을 설명하는 핵심 데이터 구조.
- 파일 종류, 소유권, 권한, 타임스탬프 등 메타데이터 저장.
- 실제 데이터가 디스크 어디에 있는지(데이터 블록 주소) 기록함.
- 처음에 0으로 생성되고 정보를 저장하면 1로 수정 됨.
- 데이터 블록: 파일의 실제 내용이 저장되는 물리적 공간.
8. 링크 파일 상세 비교 (Hard vs Symbolic)
리눅스는 i-node를 다루는 방식에 따라 두 가지 링크 방식을 제공함.
| 구분 | 하드 링크 (Hard Link) | 심볼릭 링크 (Symbolic/Soft Link) |
| 원리 | 원본과 동일한 i-node를 공유함. | 원본의 **경로명(주소)**을 별도 파일로 저장함. |
| 수정 | 한쪽 수정 시 양쪽 모두 반영됨. | 동일함 (결국 원본을 수정하는 구조). |
| 원본 삭제 | 링크 파일의 데이터가 유지됨. | 링크가 깨짐 (윈도우 '바로가기'와 동일). |
| 특징 | 복사본 같으나 용량을 차지하지 않음. | 파일뿐만 아니라 디렉토리도 연결 가능. |
9. 파일 종류 확인 (file 명령어)
리눅스 파일은 확장자(exe, txt 등)보다 파일 내부의 실제 데이터를 분석하여 종류를 판단하는 것이 정확함.
- 명령어 형식: file [옵션] [파일 및 디렉토리 경로]
- 작동 방식: /usr/share/file/magic 디렉토리의 매직 파일을 참조하여 파일의 종류를 표시함.
주요 옵션
| 옵션 | 설명 |
| -C | 매직 파일의 포맷을 검사함. |
| -f 목록파일 | 많은 파일을 한꺼번에 검사할 때 파일 리스트를 만들어 사용함. |
| -m 매직파일 | 지정된 매직 파일로 대상 파일을 확인함. |
확인 예시
- file .profile: ASCII text (일반 텍스트 파일)
- file /usr/bin/pwd: ELF 64-bit LSB executable (64비트 바이너리 실행 파일)
- file /bin: symbolic link to usr/bin (다른 경로를 가리키는 심볼릭 링크)
- file /usr/bin: directory (디렉토리 파일)
10. 파일 내용 확인 명령어
파일의 내부 텍스트를 터미널에서 바로 확인하는 명령어들임.
| 명령어 | 기능 및 특징 |
| cat | Concatenate: 파일 내용을 화면에 연속 출력함. - -n: 행 번호를 함께 표시함. - 인자 없이 사용 시 키보드 입력을 그대로 출력함. - 여러 파일을 인자로 주면 순서대로 이어서 출력함. |
| more | 화면 단위 출력: 내용이 많을 때 페이지 단위로 끊어서 보여줌. - Spacebar: 다음 페이지 / b: 이전 페이지 / q: 종료. - /문자열: 특정 문자열 검색 가능. - +숫자: 지정한 행 번호부터 출력 시작. |
| less | more의 개선판: more와 비슷하나 기능이 더 강력함. - 화살표 키나 j, k를 이용해 위아래 자유로운 스크롤이 가능함. |
| head | 파일의 앞부분을 출력함. (기본 10행, 숫자를 지정해 조절 가능) |
| tail | 파일의 뒷부분을 출력함. - -f 옵션: 파일 끝에 추가되는 내용을 실시간으로 출력함. (로그 확인 시 필수) |
11. 파일 및 디렉토리 복사 (cp)
파일이나 디렉토리를 다른 경로로 복제함. 이미 존재하는 파일일 경우 기본적으로 덮어씌움.
- 기본 형식: cp [옵션] [원본] [대상]
- 주요 옵션:
- -i: 대상이 이미 존재할 경우 덮어쓸지 물어봄 (대화식).
- -r: 디렉토리를 복사할 때 사용함 (하위 내용 포함).
- 특이 사항: 여러 파일을 동시에 복사할 수 있으며, 이 경우 마지막 인자는 반드시 디렉토리 경로여야 함.
- 예시:
- cp /etc/hosts text1: hosts 파일을 현재 디렉토리에 text1로 복사.
- cp text1 /tmp: text1 파일을 /tmp 디렉토리로 복사.
- cp -i /etc/hosts text1: 기존 text1이 있으면 확인 후 복사.
12. 파일 이동 및 이름 변경 (mv)
파일의 위치를 옮기거나 이름을 바꿀 때 사용함.
- 기본 형식: mv [옵션] [원본] [대상]
- 주요 옵션:
- -i: 이동하려는 위치에 이름이 같은 파일이 있으면 확인 후 이동.
- 기능 구분:
- 이름 변경: 원본과 대상의 경로가 같고 이름만 다를 때. (예: mv text1 date1)
- 위치 이동: 대상이 디렉토리 경로일 때.
13. 파일 및 디렉토리 삭제 (rm)
파일이나 디렉토리를 시스템에서 제거함.
- 기본 형식: rm [옵션] [파일 및 디렉토리]
- 주요 옵션:
- -i: 삭제 전 사용자에게 확인을 요청함.
- -r: 디렉토리를 삭제할 때 사용함 (비어 있지 않은 디렉토리도 가능).
- 디렉토리 삭제 비교:
- rmdir test: 내부에 파일이 있으면 삭제 실패함.
- rm -r test: 내부 파일 및 하위 디렉토리를 포함하여 강제 삭제함.
💡 참고: 로그 파일 분석 시 tail -f 명령어를 활용하면 시스템에서 발생하는 실시간 변경 사항을 놓치지 않고 확인할 수 있음.
14. 링크 파일 생성 (ln)
리눅스에서 파일에 대한 연결 통로를 만드는 명령임. 연결 방식에 따라 하드 링크와 심볼릭 링크로 나뉨.
- 기본 형식: ln [옵션] <원본파일> <링크이름>
① 하드 링크 (Hard Link)
- 특징: 동일한 i-node를 가리키는 파일 이름을 하나 더 생성함.
- 동작: 한 쪽 내용을 수정하면 양쪽 모두 반영되지만, 한 쪽을 삭제해도 하드 링크 수가 남아있다면 데이터는 유지됨.
- 삭제 원리: rm 명령은 데이터를 바로 지우는 게 아니라 하드 링크 수를 1 감소시킴. 이 숫자가 0이 될 때 i-node와 데이터 블록이 실제 삭제됨.
- 제약: 서로 다른 디스크(파일 시스템) 사이에는 생성할 수 없음.
- 실행 예시:
- ln data1 data1.ln: 하드 링크 생성.
- ls -i: 두 파일의 i-node 번호가 동일함을 확인 가능.
② 심볼릭 링크 (Symbolic Link / Soft Link)
- 특징: 윈도우의 '바로가기'와 같은 역할. 원본 파일의 경로 주소를 담고 있는 특수 파일임.
- 옵션: -s 옵션을 사용하여 생성함.
- 동작: 원본 파일과 i-node 번호가 다르며, 원본 파일이 삭제되면 링크가 깨져서 사용할 수 없게 됨.
- 하드 링크는 데이터 안정성이 높지만 같은 디스크 내에서만 가능하고, 심볼릭 링크는 관리와 사용이 유연하여(디렉토리 연결 등) 실무에서 더 자주 쓰이는 편임.
- 실행 예시:
- ln -s data1 data1.sl: 심볼릭 링크 생성.
15. 링크 종류별 상세 비교
| 구분 | 하드 링크 (Hard Link) | 심볼릭 링크 (Symbolic Link) |
| 생성 명령 | ln [원본] [링크] | ln -s [원본] [링크] |
| i-node 번호 | 원본과 동일함 | 원본과 다름 |
| 원본 삭제 시 | 데이터 유지됨 (링크 수 감소) | 링크 사용 불가 (깨짐) |
| 파일 크기 | 원본과 동일하게 표시됨 | 매우 작음 (경로 정보만 저장) |
| 수정 반영 | 수정 시 양쪽 모두 반영 | 수정 시 원본이 수정됨 |
16. 빈 파일 생성 (touch)
내용이 없는 빈 파일을 새로 만들거나, 기존 파일의 타임스탬프(최종 수정 시간)를 현재 시간으로 갱신할 때 사용함.
- 기본 형식: touch [파일경로]
- 주요 활용:
- touch newfile: newfile이라는 이름의 0바이트 크기 파일 생성.
- 기존 파일에 사용 시 내용은 유지하면서 수정 시간만 현재로 업데이트함.
17. 문자열 검색 도구 (grep)
grep (Global Regular Expression Print)은 파일 내에서 특정 패턴을 찾아 해당 행을 출력하는 명령어임. 리눅스 환경에서 가장 많이 쓰이는 명령어 중 하나임.
- 기본 형식: grep [옵션] [패턴] [파일경로]
- 주요 옵션:
- -i: 대소문자 구분 없이 검색.
- -n: 검색 결과의 행 번호를 함께 출력.
- -v: 패턴이 포함되지 않은 행만 출력 (반전 검색).
- -r: 하위 디렉토리까지 모두 뒤져서 검색.
- -w: 단어 단위로 정확히 일치할 때만 출력.
- -c: 패턴과 일치하는 행의 개수만 출력.
💡 활용 예시
- 프로세스 확인: ps -ef | grep "python" (실행 중인 파이썬 프로세스 찾기)
- 포트 확인: netstat -an | grep "LISTEN" (대기 중인 포트 확인)
- 실시간 로그 모니터링: tail -f access.log | grep --color "404" (에러 코드 강조)
- 컨택스트 매핑 (전후 맥락 확인):
- grep -A 3 "Error" log.txt: 에러 발생 행과 뒤(After) 3줄 출력.
- grep -B 3 "Error" log.txt: 에러 발생 행과 앞(Before) 3줄 출력.
- grep -C 3 "Error" log.txt: 에러 발생 행의 앞뒤(Context) 3줄 출력.
정규표현식 활용
- grep "^Start" file.txt: "Start"로 시작하는 행 검색.
- grep "End$" file.txt: "End"로 끝나는 행 검색.
- grep "[0-9]" file.txt: 숫자가 포함된 행 검색.
18. 파일 찾기 및 작업 수행 (find)
다양한 조건으로 파일을 검색하고, 찾은 파일에 대해 특정 명령을 실행할 수 있음.
- 기본 형식: find [경로] [검색조건] [동작]
- 검색 조건:
- -name: 파일명으로 검색 (와일드카드 * 사용 가능).
- -type: 파일 종류 지정 (f 파일, d 디렉토리, l 링크).
- -user / -group: 소유자나 그룹으로 검색.
- -size: 파일 크기로 검색.
- 동작 (Action):
- -print: 절대 경로 출력 (기본).
- `-exec [명령어] {} ;**: 찾은 파일들에 대해 명령어를 실행함.
- 실습 예시:
- find . -name "*.txt": 현재 디렉토리에서 확장자가 txt인 파일 찾기.
- find ~ -name "*.swp" -exec rm {} \;: 홈 디렉토리의 모든 스왑 파일(.swp)을 찾아 삭제.
19. 텍스트 통계 및 정렬 (wc, sort)
① wc (Word Count): 파일의 분량을 측정함. we [옵션] [파일경로]
- -l: 전체 라인 수 / -w: 단어 수 / -m: 문자 수. / -c 바이트 수 / -L 가장 긴 줄의 길이
- 예: ls -l | wc -l (현재 디렉토리의 항목 개수 확인)
② sort: 내용을 정렬하여 출력함. sort [옵션][파일경로]
- r 내림차순
- k 특정 필드를 기준으로
- t 필드 구분자 지정
- b 공백을 무시하고 정렬
- M 월을 기준으로
- u 중복 제거
- n 숫자 크기 순으로 정렬
20. 데이터 가공 및 편집 (awk, sed)
텍스트 데이터를 정교하게 처리할 때 사용하는 도구임.
① awk (텍스트 처리 도구): 패턴 기반으로 데이터를 조작함.
- 형식: awk [옵션] 'pattern {action}' 파일
- 예시: awk /이/ {print $0} t.txt (t.txt에서 '이'가 포함된 행 전체를 출력)
- 기능: 특정 필드만 뽑아내거나 계산하는 용도로 강력함.
② sed (스트림 편집기): 파일을 열지 않고 텍스트를 치환하거나 삭제함.
- 형식: sed [옵션] '스크립트' 파일
- 예시: sed 's/27/37/' file.txt (파일 내의 첫 번째 '27'을 '37'로 치환해서 출력)
- 옵션: -i 사용 시 원본 파일을 직접 수정함.
21. 파일 접근 권한 (Permission) 개요
리눅스는 다중 사용자 시스템이므로 파일에 대한 보안이 매우 중요함. 모든 파일과 디렉토리는 고유한 접근 권한 속성을 가짐.
- 권한 확인: ls -l 명령어로 확인 가능.
- 사용자 그룹: 사용자는 하나 이상의 그룹에 속하며, 그룹을 통해 파일 공유 범위를 지정함.
- 사용자 그룹 정보는 /etc/group에 저장됨 (관리자만 수정 가능).
- 내 그룹 확인 명령어: groups [사용자명]
22. 권한의 종류와 표기법
권한은 크게 읽기(r), 쓰기(w), 실행(x) 세 가지로 나뉘며, 대상에 따라 의미가 다름.
| 구분 | 파일(File)에서의 의미 | 디렉토리(Directory)에서의 의미 |
| 읽기 (r) | 파일 내용 읽기 및 복사 가능 | ls 명령으로 목록 확인 가능 |
| 쓰기 (w) | 파일 내용 수정 가능 | 파일/디렉토리 생성 및 삭제 가능 |
| 실행 (x) | 프로그램을 실행 가능 | cd 명령으로 디렉토리 진입 가능 |
- 표기 순서: 소유자(u) / 그룹(g) / 기타 사용자(o) 순으로 각 3비트씩 총 9비트로 표기함.
23. 접근 권한 변경 (chmod)
파일이나 디렉토리의 권한을 수정할 때 사용함.
- 형식: chmod [옵션] 권한 [경로]
- 옵션: -R (하위 디렉토리와 파일까지 한꺼번에 변경).
① 기호 모드 (Symbolic Mode)
기호를 사용하여 특정 대상에게 권한을 부여하거나 제거함.
- 대상: u(소유자), g(그룹), o(기타), a(전체)
- 연산자: +(부여), -(제거), =(설정)
- 실습:
- chmod g+wx test.txt: 그룹에 쓰기 및 실행 권한 추가.
- chmod o+x test.txt: 기타 사용자에게 실행 권한 추가.
② 숫자 모드 (Absolute Mode)
8진수 숫자의 합을 이용하여 3자리 숫자로 한 번에 설정함.
- 값 할당: 읽기(4), 쓰기(2), 실행(1)
- 조합 예시:
- 7 (4+2+1): 모든 권한 (rwx)
- 6 (4+2): 읽기 및 쓰기 (rw-)
- 4 (4): 읽기 전용 (r--)
- 실습:
- chmod 444 test.txt: 모든 사용자에게 읽기 권한만 부여.
- chmod 474 test.txt: 그룹 사용자에게만 모든 권한 부여.
24. 기본 접근 권한과 마스크 (umask)
파일이나 디렉토리가 생성될 때 자동으로 부여되는 권한을 제어함.
- 기본 권한: 일반적인 시스템 설정에서 파일은 664, 디렉토리는 775로 생성됨.
- umask 확인: umask (숫자), umask -S (문자 표기).
- 원리: 최대 권한 값에서 마스크 값을 뺀 결과가 실제 생성 권한이 됨.
- 변경: umask 022와 같이 설정하여 보안 수준을 높일 수 있음.
25. 특수 접근 권한 (Special Permissions)
일반적인 권한 외에 특수한 목적으로 사용되는 권한임. ls -l 시 x 자리에 다른 문자로 표기됨.
① SetUID (4000)
- 특징: 실행하는 동안 파일 소유자의 권한으로 동작함.
- 표기: 소유자 실행 권한 자리에 s로 표시됨. (예: rws------)
- 실습: chmod 4755 set.exe 실행 시 소유자 권한에 s가 붙음.
② SetGID (2000)
- 특징: 실행하는 동안 소유 그룹의 권한으로 동작함.
③ Sticky Bit (1000)
- 특징: 누구나 파일을 만들 수 있지만, 본인이 만든 파일만 삭제할 수 있도록 제한함. 공용 디렉토리에 주로 사용됨.
- 표기: 기타 사용자 실행 권한 자리에 t로 표시됨. (예: rwxrwxrwt)
- 대표 사례: /tmp 디렉토리.
'BASIC > LINUX' 카테고리의 다른 글
| [LINUX] 소프트웨어 (0) | 2026.01.09 |
|---|---|
| [LINUX] 프로세스 (1) | 2026.01.08 |
| Shell (0) | 2026.01.07 |
| Vim 편집기 및 단축키 (1) | 2026.01.06 |
| 리눅스 쉘(Shell) 기본 명령어 (0) | 2026.01.06 |