5. 파일의 구성

파일의 구성 요소

  • 리눅스 파일은 다음 세 가지 요소로 구성된다:
    • 파일명: 사용자가 접근할 때 사용하는 이름
    • inode: 파일의 메타데이터 및 위치 정보 저장
    • 데이터 블록: 실제 파일 내용이 저장되는 공간

inode란?

1. 개념

  • 파일 시스템에서 각 파일이나 디렉터리에 대한 메타데이터를 저장하는 데이터 구조체
  • inode는 파일의 실제 데이터가 저장된 블록에 대한 정보를 포함하지 않지만, 파일의 속성 및 위치 정보를 포함
  • 각 파일은 고유한 inode 번호를 갖고, 실제 데이터를 저장한 위치 정보를 간접적으로 포함한다

2. inode에 포함된 정보

  • 파일 유형 (일반 파일, 디렉터리 등)
  • 파일 크기
  • 소유자 (UID), 그룹 (GID)
  • 권한 (읽기, 쓰기, 실행)
  • 생성/수정/접근 시간
  • 데이터 블록을 가리키는 포인터 정보

3. inode 번호 확인

  • 각 inode는 파일 시스템 내에서 고유한 번호를 가진다.
  • 이 번호를 inode 번호라고 하며, 파일이나 디렉터리를 식별하는 데 사용된다.
  • inode 번호 확인 명령어. 맨 앞에 출력되는 값이 inode 번호이다.
$ ls -i
  • 파일 앞에 표시되는 숫자가 해당 파일의 inode 번호이다.

1. 개념

  • 기존 파일에 대해 추가적인 이름(경로)을 부여하는 방식
  • 두 종류의 링크가 존재:
    • 하드 링크: 동일한 inode를 참조
    • 심볼릭 링크: 경로 문자열을 참조 (바로가기 형태)

링크 구조 시각화

하드 링크 구조

하드 링크

심볼릭 링크 구조

심볼릭 링크

2. 하드 링크

  • 같은 파일 시스템 내에서만 생성 가능
  • 원본과 하드링크는 동일한 inode를 공유
  • 원본 삭제 후에도 하드링크가 존재하면 데이터는 유지됨
    • inode 는 접근하는 링크의 카운트를 가지고 있으며, 0이 되면 실제 원본 파일을 삭제한다.

하드 링크 생성

$ ln test test_h

3. 심볼릭 링크

  • 서로 다른 파일 시스템 간에도 생성 가능
  • 링크 자체가 별도 inode를 가지며, 원본 파일 경로를 문자열로 저장
  • 원본 삭제 시 링크는 깨진 상태가 됨

심볼릭 링크 생성

$ ln -s test test_s

하드 링크 vs 심볼릭 링크

하드 링크 실습

  1. 파일 생성 (echo , > 명령어는 이후 자세히 배운다)
$ echo "Hello, World!" > test
  1. 하드 링크 생성
$ ln test test_h
  1. inode 번호 확인
$ ls -li

test 와 test_h가 동일한 inode 번호를 가진 것을 확인할 수 있다.

  1. 하드 링크를 통해 내용 추가 후 원본 확인 (>>, cat 명령어는 이후 자세히 배운다)
$ echo "Hard Link!" >> test_h
$ cat test

test_h 에 추가한 내용이 test 에서도 확인된다.

  1. 원본 파일 삭제 후 하드 링크로 접근
$ rm test
$ cat test_h

심볼릭 링크 실습

  1. 파일 생성
$ echo "Hello, World!" > test
  1. 심볼릭 링크 생성
$ ln -s test test_s
  1. 링크 확인
$ ls -li

test_s 가 test 를 가리키는 것을 확인할 수 있다.

  1. 심볼릭 링크를 통해 내용 추가 후 원본 확인
$ echo "Symbolic Link!" >> test_s
$ cat test

test_s 에 추가한 내용이 test 에서도 확인된다.

  1. 원본 삭제 후 링크 확인
$ rm test
$ cat test_s

심볼릭 링크는 원본이 삭제되면 더 이상 접근할 수 없다.

[실습] 링크 실습 (10분)

파일 검색

1. find 명령어

  • 파일 시스템에서 파일이나 디렉터리를 검색하는 데 사용된다.

  • 환경 구성
    cd ~
    mkdir find
    cd find
    touch file1.txt file2.txt file3.log
    fallocate -l 2M 2M_FILE
    
  • 명령어
    1. 특정 디렉터리에서 파일 검색:

       find . -name "file1.txt"
      
      • .: 검색할 디렉터리 경로
      • name "file1.txt": 이름이 “filename”인 파일 검색
    2. 파일 유형별 검색:

       find . -type f -name "*.txt"
      
      • type f: 일반 파일 검색
      • name "*.txt": 확장자가 .txt인 파일 검색
    3. 특정 시간 이내에 수정된 파일 검색:

       find . -mmin -1
      
      • mmin -1: 1분 이내에 수정된 파일 검색
      • -mmin +1 1분 이상 전에 수정된 파일 검색
    4. 특정 크기 이상의 파일 검색:

       find . -size +1M
      
      • size -10M : 크기가 10MB 미만인 파일 검색
      • size 10k : 10KB 인 파일 검색
      • size +1M: 크기가 1MB 초과인 파일 검색

[번외] 와일드 카드와 대괄호 패턴

[실습] 파일 찾기

[실습] 파일 찾기 - 10분

요약

  1. 리눅스 파일은 파일명 + inode + 데이터 블록으로 구성된다.
  2. inode는 파일의 속성과 저장 위치 정보를 포함한 핵심 구조이다.
  3. 링크는 동일한 데이터를 다른 이름으로 참조하는 방법이며, 하드 링크와 심볼릭 링크로 나뉜다.
  4. 하드 링크는 inode를 공유하고, 심볼릭 링크는 경로 문자열을 참조한다.