[리눅스] 파일 시스템

Woonil·2025년 6월 6일
0

리눅스

목록 보기
3/4

리눅스에서 파일 시스템이란 '컴퓨터에서 파일이나 자료를 쉽게 탐색, 관리, 보관할 수 있게 도와주는 프로그램'이라고 생각하면 쉽다.

  • 파일 시스템 유형: cat /proc/filesystems 명령으로 파일 시스템 종류를 확인할 수 있다.
    • ext4 (eXtended File System): 다수의 개발자가 개발했으며, 1EB 이상의 볼륨과 16TB까지의 파일을 지원한다.
    • xfs: CentOS 7 부터 기본으로 사용하고 있으며, ext4 파일도 기본으로 사용
      • 파일명: 사용자가 파일에 접근할 때 사용하는 파일의 이름
      • inode: 파일 또는 디렉토리에 대한 정보를 가지고 있는 특별한 구조체
        - 파일 또는 디렉토리 상세 정보 (파일의 종류와 크기, 소유자, 파일 변경 시간, 파일명 등)
        - 데이터 블록의 주소를 가진다.
      • 데이터 블록: 실제 데이터가 저장된 블록
        - 직접 접근 데이터 블록과 간접 접근 데이터 블록으로 나뉜다.
        • 파일을 효율적으로 관리할 수 있다.
  • 리눅스 파일 속성

    • ls -l 명령으로 보는 파일의 속성

      표기설명
      d, -, l파일의 종류
      rw-r--r-- 등파일을 읽고 쓰고 실행할 수 있는 접근 권한 표시
      51, 7, 56 등하드 링크의 개수
      dev파일 소유자의 로그인 ID
      devs파일 소유자의 그룹 이름
      1632B 등파일의 크기(바이트)
      22 Sep 16:11파일이 마지막으로 수정된 날짜
      Desktop파일명
  • 파일 소유자: 리눅스에서 모든 파일은 소유자가 존재하고, 해당 소유자는 해당 파일에 대한 권한을 가진다. 시스템과 관련된 파일은 대부분 루트(root) 계정이 소유자이고, 일반 파일은 그 파일을 생성한 사용자가 소유자이다.
  • 그룹: 리눅스에서 사용자는 하나 이상의 그룹에 속한다.
    • ls -l 명령에서 출력되는 그룹명은 파일이 속한 그룹의 이름
    • 해당 그룹명에 속한 사용자들에게 권한을 부여하여 파일 공유가 가능
    • 사용자가 속한 그룹은 시스템 관리자가 사용자를 등록할 때 결정된다.
    • 사용자는 자신의 그룹을 변경할 수 없고, 시스템 관리자에게 변경을 요청해야 한다.
    • /etc/group : 그룹이 정의된 파일로, 시스템 관리자만 수정이 가능하다.
    • groups : 사용자가 속한 그룹을 알려주는 명령어로, 인자를 지정하지 않으면, 현재 로그인한 사용자의 그룹을 표시하고, 인자로 다른 사용자명을 지정하면 지정한 사용자가 속한 그룹을 표시한다.

🤔개념

파일 종류

file 명령어로 파일의 종류를 알 수 있다.

종류설명
-일반(정규) 파일
d디렉터리
l심벌릭 링크 파일
b블록 단위로 읽고 쓰는 블록 장치 파일
c섹터 단위로 읽고 쓰는 문자 장치 파일
p파이프 파일(프로세스 간 통신에 사용되는 특수 파일)
s소켓(네트워크 통신에 사용되는 특수 파일)

디렉터리

  • 일반 파일: 텍스트, 문서, 이미지, 동영상, 실행 파일 등과 같은 대부분의 파일로 크게 텍스트 파일과 바이너리 파일로 다시 분류된다.
  • 디렉터리: 리눅스에서는 디렉터리도 파일로 취급하며, 디렉터리의 파일이나 하위 디렉터리에 대한 정보를 저장한다.

링크 파일

원본 파일을 대신 사용하기 위해 다른 파일명으로 링크된 파일이며, 프로그래밍에서 포인터의 개념을 생각하면 이해에 도움이 될 수 있다. 링크 파일 생성 시 하드 링크 또는 심볼릭 링크(소프트 링크) 형식으로 만들 수 있다.

  • 하드 링크 파일: 원본 파일과 같은 inode를 공유한다.
    • 원본 파일의 내용이 변경되면 링크 파일의 내용도 자동으로 변경된다.
    • 원본 파일, 링크 파일 둘 중 하나를 삭제하더라도 나머지 하나는 그대로 남아있다.
    • ln 파일명 hardlink : 해당 파일에 대한 하드링크를 생성

      하드 링크
      특정 파일 또는 디렉터리에 접근을 쉽게 할 수 있도록 하는 방법으로, 파일 시스템이 물리적인 장치인 하드 디스크 상에 저장되어 있는 특정 파일의 위치를 가리키는 것이다.

  • 심볼릭 링크(소프트 링크) 파일: 원본 파일의 inode와 별도의 inode를 가지며, 해당 inode는 원본 파일의 포인터를 저장하고 있는 데이터블록을 가리킨다.
    • 원본 파일의 포인터 역할(원본 파일의 크기와 무관)

    • 원본 파일 삭제 시 링크 파일이 깜빡거리며 원본 파일이 없음을 알린다.

    • ln -s 파일명 softlink : 해당 파일에 대한 소프트 링크를 생성

      심볼릭 링크

      윈도우의 바로가기 개념과 비슷하며, 실질적인 디스크 상의 파일을 가리키는 것이 아니라 파일 시스템 상의 특정 파일을 가리키는 것

      하드 vs 심볼릭 vs (단순)복사

      원본 내용 수정 시, 하드 링크와 심볼릭 링크 파일 내부 내용은 수정되지만, 복사한 파일의 내부 내용은 수정되지 않는다. 또한, 원본 파일 삭제 시, 하드링크와 복사 파일은 그대로 존재하지만, 심볼릭 링크 파일은 접근할 수 없다.

특수 파일

  • 장치 파일: 리눅스에서는 마우스, 키보드, 프린터, 하드 디스크, CPU 등의 하드웨어 장치들도 파일화하여 관리한다.
    • 블록형 장치 파일 (b) : CD/DVD, 하드 디스크 등의 저장 장치 파일
    • 문자형 장치 파일 (c) : 터미널, 키보드 등의 문자 기반 장치 파일
  • 소켓 파일 (s): 네트워크의 입출력을 담당하는 API로 컴퓨터 사이의 정보를 전달하는 역할을 수행한다.
  • 파이프 파일 (p): 특정 프로그램의 출력을 다른 파일의 입력으로 보내는 파일

디렉터리 계층구조

리눅스에서는 파일을 효율적으로 관리하기 위해 계층적인 구조로 구성한다.

디렉터리기능예시
bin (binaries)기본적인 실행 가능한 명령 파일들을 포함cat , mkdir
sbin (system binaries)시스템 관리 명령어 저장systemctl , reboot
etc (et cetera)시스템 전역 설정 파일들을 포함
usr공유 가능한 파일들을 포함
tmp (temporary)시스템 사용중 발생하는 임시데이터(파일)를 저장하며, 재부팅시 삭제
dev (device)장치 파일들이 있는 디렉터리 (시스템의 모든 입출력 파일을 가지고 있음)
lib (libraries)시스템 라이브러리(기본적인 프로그램 모듈)들을 포함
boot운영체제 부팅에 필요한 파일들을 포함
dev (devices)장치 파일들을 포함
home사용자별 개인 파일과 설정과 관련한 파일들을 포함, 사용자 추가시 사용자의 id와 동일한 디렉토리가 home 하위에 자동으로 생성
opt (optional)추가로 설치한 소프트웨어 패키지들을 포함
mnt (mount)임시 파일 시스템의 마운트 지점으로, 관리자가 임시로(직접) 파일 시스템을 마운트할 때 사용하는 디렉토리
proc (processes)프로세스 및 시스템 정보를 포함하는 가상 파일 시스템으로, 현재 실행 중인 프로세스와 커널 정보에 대한 가상 파일들을 포함하며 메모리에 존재cpuinfo(CPU 정보), meminfo(메모리정보)
run런타임(애플리케이션 실행 중)에 필요한 일시적인 파일들을 포함PID 파일, 소켓 파일
srv (service)서버에서 제공하는 서비스 관련 데이터 저장웹 서버 데이터
usr (user)사용자 명령어, 라이브러리, 매뉴얼 등 저장bin(사용자 명령어), lib(사용자 라이브러리)
var (variable)시스템 운영중 발생하는 데이터, 로그 등의 가변 데이터 파일들을 포함로그 파일, 캐시 파일
mediaCD, USB 같은 외부 장치를 연결하는 곳
sys리눅스 커널 관련 정보와 관련된 파일들을 포함
root관리자계정 root 사용자의 홈 디렉토리

경로

파일 시스템에서 디렉터리 계층 구조에 있는 특정 파일의 위치

  • 경로 작성 특수 문자

    특수 문자정의
    /루트와 경로를 구분하는 구분자
    ~홈 디렉터리
    .현재 디렉터리
    ..상위 디렉터리
    -이전 디렉터리
  • 절대 경로: 항상 /(루트) 디렉터리부터 시작하는 경로로, 특정 파일에 대한 절대 경로는 / 디렉터리부터 시작해서 특정 파일까지 이동하면서 거치게 되는 중간 디렉터리 이름을 표시한다.

    ex) /usr/bin

  • 상대 경로: 현재 디렉터리를 기준으로 시작하는 경로로, 특정 파일에 대한 상대 경로는 현재 디렉터리부터 시작하여 특정 파일까지 이동하면서 거치게 되는 중간 디렉터리의 이름을 표시한다.

    ex) ../../usr/bin

파일 접근 권한

파일의 소유자, 그룹, 기타 사용자들의 파일에 대한 접근 권한을 표시할 수 있으며, 파일의 소유자가 chmod 명령을 사용하여 변경 가능하다.

  • 접근 권한 변경 chmod : 파일 또는 디렉터리의 접근 권한을 변경하는 명령어
    • 심볼릭(기호) 모드: 문자와 기호를 사용하여 권한을 표시
      구분문자/기호의미
      사용자 카테고리 문자u파일 소유자
      g소유자가 속한 그룹
      o소유자와 그룹 이외 기타사용자
      a전체 사용자
      연산자 기호+권한 부여
      -권한 회수
      =접근 권한 설정
      접근 권한 문자r읽기 권한
      w쓰기 권한
      x실행 권한
    • 숫자 모드: 숫자를 사용하여 권한 표시
      접근권한2진수8진수의미
      rwx1117읽기, 쓰기, 실행
      rw-1106읽기, 쓰기
      r-x1015읽기, 실행
      r--1004읽기
      -wx0113쓰기, 실행
      -w-0102쓰기
      --x0011실행
      ---0000권한 없음

일반 접근 권한

권한파일디렉터리
읽기파일 읽기, 복사에 대한 권한 ex) more, cat, head, taills (ls 명령의 옵션은 실행 권한 필요)
쓰기파일 수정, 이동, 삭제에 대한 권한. 해당 디렉터리에 쓰기 권한 필요 ex) vi 편집기로 내용 수정 후 저장파일의 생성 또는 삭제 가능 ex) touch, mkdir, mv, cp, rm
실행파일 실행 권한. 쉘 스크립트나 실행파일 등cd , 파일을 디렉터리로 이동/복사 가능
  • 기본 접근 권한: 파일이나 디렉터리 생성 시 기본으로 적용되는 접근 권한으로, 일반 파일은 664이고 디렉터리는 775이다. umask : 기본 접근 권한을 출력하거나 변경하는 명령어
  • 최대 접근 권한: 일반 파일은 666, 실행 파일과 디렉터리는 777이다.
  • 접근 권한 표기법 예시: -rw -r- -r- - 1 root root 218 Sep 9 10:41 /etc/hosts 읽기 권한, 쓰기 권한, 실행 권한을 각각 r, w, x 로 나타내며, 각각의 권한에서 권한이 없는 경우 - 로 표기한다. 그리고 사용자, 그룹, 기타 사용자별로 세가지 권한을 rwx 세문자를 묶어서 표기한다.

특수 접근 권한

리눅스에서는 일반 접근 권한 외에 특별한 접근 권한을 제공한다. umask 명령어 입력 시 4자리의 숫자가 출력되는데, 맨 앞자리가 특수 접근 권한을 나타낸다. (0이면 일반 접근 권한)

SetUID

![](https://velog.velcdn.com/images/one1_programmer/post/75383fee-d19a-4aa3-8551-3e664a7ca9d4/image.png)[출처: 유튜브 따라學IT 리눅스 기초(개정판)]

chmod 4xxx 또는 chmod u+s [파일명]
SetUID가 설정된 파일을 실행하면 해당 파일이 실행되는 동안 만큼은 파일을 실행한 사용자의 권한이 아닌 파일의 소유자의 권한이 적용된다. 즉, 나머지 사용자가 파일 실행 시 소유자의 권한으로 접근할 수 있게 한다. 또한 SetUID를 설정하면 소유자의 실행 권한에 ‘x’ 대신 ‘s’ 로 표시된다.
ex) passwd(/usr/bin/passwd) 명령(비밀번호 변경)의 경우, SetUID가 설정되어 일반 사용자가 root 권한으로 실행을 하여 암호 변경을 할 수 있다.

/etc/shadow vs /etc/passwd

/etc/shadow 파일은 시스템에 등록된 모든 계정의 비밀번호가 암호화된 형태로 저장 및 관리되는 파일로, 해당 파일에서는 root 계정으로만 수정이 가능하므로 본인의 권한으로 암호 변경 시도 시 암호 변경이 불가능하다. /etc/passwd 파일은 시스템의 모든 사용자 계정에 대한 정보를 포함하는 일반 텍스트 기반 데이터베이스로, root 계정 또는 sudo 권한이 있는 사용자만 수정할 수 있으며 모든 시스템 사용자가 읽을 수 있다.

SetGID


[출처: 유튜브 따라學IT 리눅스 기초(개정판)]
chmod 2xxx 또는 chmod g+s [파일명]
SetGID가 설정된 파일을 실행 시, 일시적으로 소유 그룹의 권한을 얻어 실행할 수 있다. 즉, 나머지 사용자가 파일 실행 시 관리 그룹의 권한으로 접근할 수 있게 해주는 권한이다. SetGID를 설정하면 그룹의 실행 권한에 ‘x’ 대신 ‘s’ 로 표시된다.

Sticky Bit

chmod 1xxx 또는 chmod o+t [파일명]
Sticky Bit가 설정된 디렉터리에는 누구나 파일 생성이 가능하다. 기타 사용자의 실행 권한에 ‘x’ 대신 ‘t’로 표시된다. 생성한 파일은 파일을 생성한 계정으로 소유자가 설정되고, 다른 사용자가 생성한 파일은 삭제 불가능하다. 따라서 디렉터리를 마치 자유 게시판처럼 사용할 수 있게 된다.
ex) /tmp 디렉터리

특수 접근 권한 오류

특수 권한을 설정하는 파일이나 디렉터리는 모두 실행 권한이 있어야 한다. 따라서 실행 권한이 없는 파일에 SetUID, SetGID를 설정하면 ‘s’가 아닌 ‘S’로 표시된다. 마찬가지로 실행 권한이 없는 디렉터리에 Sticky Bit를 설정하면 ‘T’로 표시된다.

profile
프론트 개발과 클라우드 환경에 관심이 많습니다:)

0개의 댓글