[Linux] File System 1

JIWON·2025년 5월 16일

Linux

목록 보기
6/20
post-thumbnail

🗂️ 파일 시스템

1️⃣ Linux의 File System

리눅스는 기본적으로 유닉스 계열의 운영체제이므로 유닉스의 많은 부분을 그대로 이어받아서 유지한다. 유닉스에서는 시스템과 관련된 정보와 하드웨어 같은 장치를 모두 파일로 관리한다.

리눅스도 유닉스처럼 시스템 관련 정보와 장치를 관리하기 위해서 파일을 사용한다. 윈도우와 다른점은 리눅스는 물리적인 디스크가 여러 개더라도 시스템 전체에 단 하나의 트리만 가진다.

cloud : 확장과 축소가 편리
디스크공간 100GB 빌림 실제 디스크공간 500GB면 문제가 없음
1TB로 늘리고 싶으면
윈도우의 경우 500GB를 하나 더 늘리면 C, D 드라이브로 따로 관리됨. 연속성 X

리눅스는 디스크를 또 갖다 붙여도 하나의 트리로 연결되어 있기 때문에 연속성이 보장된다


2️⃣ 파일의 종류

💠 일반 파일

데이터를 저장하는데 사용하는 파일

  • 텍스트 파일, 실행 파일, 이미지 파일 등 대부분의 파일
  • 실행파일이나 이미지 파일 같은 경우 데이터가 바이너리 형태로 저장되어 바이너리 파일이라고 부르기도 하는데, 바이너리 파일은 특정 응용 프로그램이 있어야 해당 내용을 확인 할 수 있다.

💠 디렉토리

  • 리눅스에서는 디렉토리파일로 취급
  • 디렉토리 파일에는 해당 디렉토리에 저장된 파일이나 하위 디렉토리에 대한 정보를 저장

💠 심볼릭 링크

  • 원본파일을 대신할 수 있도록 원본 파일을 다른 파일명으로 지정한 것
  • 유닉스 초기부터 있었던 디렉토리, 지금은 다른 디렉토리가 그 기능을 대신하는데 호환성 문제 때문에 심볼릭링크 형태로 유지를 하는 것이다.

💠 장치 파일

  • 리눅스는 하드디스크나 키보드 같은 각종 장치도 파일로 취급
  • 장치파일은 리눅스 시스템에 부착된 장치들을 관리하기 위한 특수 파일

3️⃣ file 명령

파일의 종류를 확인하는 명령

  • file .profile
  • file /bin
  • file /dev
  • file /bin/bash

4️⃣ 디렉토리 계층구조

  • 계층적 트리 구조
  • 루트 디렉토리: /로 표시

💠 루트 디렉토리

ls -F / : 루트 디렉토리에 제공되는 디렉토리 확인

  • 이름 끝에 /가 붙으면 디렉토리, @가 붙으면 심볼릭 링크

🔸루트 디렉토리에 제공되는 디렉토리

/dev : 디바이스 파일 배치되어 있는 디렉토리

/home : 사용자 별로 할당되는 홈 디렉토리가 배치되는 디렉토리.

  • jiwon 이라는 사용자의 홈 디렉토리 /home/jiwon

/media : DVD/CD 또는 USB와 같은 외부장치를 연결하는 디렉토리

/etc: 리눅스 설정 파일이 위치하는 디렉터리✅

/opt: 추가 패키지가 설치되는 디렉터리 ✅

  • apt install 해서 설치한 패키지가 저장됨

/root: root 계정의 홈 디렉터리

/sys: 리눅스 커널과 관련있는 파일이 저장된 디렉터리

/usr: 기본 실행 파일 과 라이브러리 파일, 헤더 파일 등이 저장되는 디렉터리

/boot: 부팅에 필요한 커널 파일이 저장된 디렉터리

/lost+found: 파일 시스템에 문제가 발생하여 복구할 경우 문제가 되는 파일이 저장되는 디렉터리


5️⃣ 절대경로와 상대경로

💠 절대경로

루트로부터의 경로

  • 반드시 /로 시작

💠 상대경로

현재 위치로 부터의 경로

  • / 이외의 문자로 시작
  • 현재 디렉토리에서 상위디렉토리로 갈 때는 ../
  • 현재 디렉토리 ./

6️⃣ 파일의 구성요소

  • 우분투에서는 3개의 요건(파일이름, i-node, 데이터 블록)을 충족해야만 파일로서의 가치를 가진다.

💠 파일이름

  • 사용자가 파일을 사용 목적에 맞도록 사용하고 해당 파일에 정확하게 접근할 수 있도록 구별할 수 있는 변별력을 제공

  • 우분투에서 확장자는 선택적 요소, 확장자가 없어도 상관없다

🔸파일과 디렉토리 이름 규칙

  • / 는 파일명이나 디렉토리명에 사용 못함

  • 파일과 디렉토리 이름에는 알파벳, 숫자, 마침표만 사용

  • 알파벳 대소문자 구분

  • 파일과 디렉토리 이름을 설정할 때 .으로 시작하면 숨김 파일로 간주

💠 i-node

  • Index Node 라고 불리며 파일을 기술하는 디스크 상의 데이터 구조
  • 파일의 데이터 블록이 디스크 상의 어느 위치에 해당하는지에 대한 정보를 기록
  • 파일을 생성하게 되면 i-node의 link가 0인 위치에 i-node를 생성하고 정보를 저장한 다음 link의 값이 1의 위치로 이동

🔸 i-node에 저장된 정보

  • 파일의 종류
  • 파일의 소유권 - 사용자와 그룹
  • 파일의 액세스 모드
  • 파일의 타임스탬프

💠 데이터 블록

  • 파일의 데이터를 저장하는 블록

7️⃣ 디렉토리 관련 명령어

  1. pwd : 현재 작업 디렉토리 확인

  2. cd 이동할디렉토리명 : 현재 디렉토리 변경

  3. cd ~ 또는 cd : 홈디렉토리로 이동

    • 디렉토리 경로를 입력할 때는 tab을 이용해서 자동완성 가능
  4. ls [옵션] [디렉토리나 파일] : 디렉토리 내용 확인

    • 옵션:
      a : 숨김 파일을 포함하여 모든 파일의 목록을 출력
      d : 디렉토리 자체 정보
      i : 첫번째 행에 i-node를 출력
      l : 파일의 상세 정보 출력 ✅
      A : .과 ..을 제외한 모든 파일 목록을 출력
      F : 파일의 종류 표시(* : 실행파일, / : 디렉토리, @ : 심볼릭링크)
      L : 심볼릭 링크 파일의 경우 원본 파일의 정보 출력
      R : 하위 디랙토리 목록까지 출력

    • 상세정보 출력 l

  5. dir : ls 와 유사한 명령

  6. vdir : ls 와 유사한 명령, 자세하게 나옴


💠 디렉토리 생성

mkdir [옵션] [디렉토리]

  • 옵션
    • p : 중간 디렉토리가 없을 때 생성(한 번에 생성)

💠 디렉토리 삭제

rmdir [옵션] [디렉토리]

  • 옵션
    • p : 지정한 디렉토리를 삭제하고 그 디렉토리의 부모 디렉토리가 빈 디렉토리일 경우 부모 디렉토리도 자동으로 삭제

one/tmp/test 구조 일 때:

  • rmdir one : 삭제 실패, rmdir은 내부에 파일이나 디렉토리가 존재하면 삭제하지 못함
  • rmdir -p one/tmp/test : test 디렉토리를 삭제하고, tmp가 비어있으면 tmp도 삭제, one도 비어 있으면 one도 삭제

8️⃣ 파일 관련 명령어

💠 파일 내용 출력

🔸 cat [옵션] [파일]

  • 옵션
    • n : 라인 번호를 같이 출력

ex) cat /etc/hosts : /etc/hosts 파일 내용 출력

🔸 more [옵션] [파일]

: 파일의 내용을 화면 단위로 출력

  • 옵션

    • +행번호 : 시작할 행 번호를 설정
  • 화면 출력 후 Enter를 누르면 한 행씩 이동하고 spacebar를 누르면 화면단위로 이동

  • 지나간 내용을 확인 할 수 없음

🔸 less [파일]

: 파일의 내용을 화면단위로 출력

  • 화면 이동 키는 vi 편집기 와 동일
    • j : 한 행 아래로
    • k : 한 행 위로
    • spacebar : 다음화면으로
    • CTRL + b : 이전화면으로

tail [옵션] [파일]

: 파일의 내용 뒷 부분을 출력

  • 옵션
    • +행번호 : 지정한 행부터 끝까지 출력
    • -숫자 : 화면에 출력 행의 수를 지저(기본 10)
    • -f : 파일 출력을 종료하지 않고 주기적으로 계속 출력, 로그를 확인할 때 사용함, 새로운 내용이 추가될 때마다 화면에 출력되기 때문에 로깅에서 매우 유용한 옵션

🔸 파일에서 단어 검색

  • tcp 검색 : /tcp
  • n을 눌러서 다음 내용으로 이동
  • 종료 : q

연습

less 명령으로 /etc/services 파일 출력 : less /etc/services
HTTP 검색 : /HTTP
다른 곳에도 있는지 확인 : n
명령 종료 : q


💠 파일 복사

🔸 cp [옵션] [파일1이나 디랙토리1] [파일2나 디렉토리2]
: [파일1이나 디랙토리1][파일2나 디렉토리2]에 복사

  • 옵션

    • i : 파일 2가 존재하는 경우 덮어씌울 지 물어보는 옵션 (✅ 잘 확인하기)

    • r : 디렉토리 복사

🔸 여러 개의 파일을 특정 디렉토리로 복사
여러 개의 파일을 지정할 때는 마지막이 디렉토리이어야 한다

cp [파일1] [파일2] [파일3] [파일 ..] [디렉토리]
cp -r temp temp2 # 디렉토리복사

🔸 기존에 존재하는 디렉토리에 -r 복사를 하게 되면 하위 디렉토리로 만들어진다

cp -r temp temp2 # 기존에 존재하는 디렉토리로 복사할 시 하위 디렉토리 생성

temp
|--- text1

temp2      # 처음 복사
|--- text1
|--- temp       # 두번째 복사
      |--- text1
   
#### 파일 복사 예제
```bash
cp /etc/hosts text1 # 파일 복사

cp -i /etc/services text1 # 덮어씌울 건지 물어보는 복사

mkdir temp # 디렉토리만들기
cp text1 temp # temp파일 안에 text1 복사

cp text1 temp/text2 # text1파일을 text2라는 새로운 이름으로 복사

💠 파일 이동과 이름 변경

🔸 mv [옵션] [파일1이나 디랙토리1] [파일2나 디렉토리2]

: [파일1이나 디랙토리1][파일2나 디렉토리2]로 이동 또는 이름 변경

  • 옵션

    • i : 이미 존재하는 경우 덮어씌울지 묻는 대화상자 생성

🔸 현재 디렉토리에서 이름 변경

mv [현재이름] [새로운이름]

🔸디렉토리에 파일 이름을 지정해서 이동
파일 이름을 변경할 수 있음
mv data1 temp/data2

🔸여러 파일 이동

여러 파일을 이동 시킬 수 있는데 마지막 인자는 디렉토리여야 한다

mv [파일1] [파일2] [파일3] [파일 ..] [디렉토리]

  • 이 때 . 현재 디렉토리

🔸 디렉토리 이름변경

mv temp2 temp3

디렉토리 이름 변경을 할려고 할 때 기존에 존재하는 디렉토리 이름을 뒤에 사용하면 하위 디렉토리로 이동

mv temp3 temp


💠 파일이나 디렉토리 삭제

🔸rm [옵션] [파일 또는 디렉토리]

  • 옵션

    • i : 대화형으로 삭제

    • r : 디렉토리 삭제

🔸파일 삭제

rm data2

🔸디렉토리가 비어 있지 않을 때 삭제

rm -r temp3 # 묻지 않고 삭제

rm -ir temp3 # 물어보면서 삭제


💠 실습

  1. /etc/hosts 파일을 test.org로 복사
cp /etc/hosts test.org
  1. /test 디렉터리 생성
mkdir test
  1. test.org 파일을 test 디렉터리로 복사
 cp -r test.org test
  1. test 디렉터리의 test.org 파일을 test.bak로 이름 변경
mv test/test.org test/test.bak
  1. test.org 파일 삭제
rm test.org
  1. test 디렉터리의 test.bak 파일을 test.org로 복사
cp test/test.bak test/test.org
  1. test 디렉터리 삭제
rm -ir test


9️⃣ 파일 링크

파일 링크기존파일에 새로운 이름을 붙이는 것

  • 복잡한 디렉토리 계층 구조를 포함하여 파일명이 복잡해지는 경우 짧게 줄인 다른 이름을 붙여서 간단하게 사용할 때 유용

  • 종류

    • 하드링크 : 기존파일에 새로운 파일이름을 추가로 생성

    • 심볼릭링크 : 원본 파일을 가리키는 새로운 파일을 만드는 것

  • 리눅스의 파일 시스템은 하나의 파일을 보관할 때 파일이름 + i-node + 데이터 블록 으로 구성해서 보관한다

    • i-node : 외부에서 볼 때는 번호로 표시가 되지만 내부적으로 파일의 종류, 크기, 소유자, 파일 변경 시간, 파일 이름 등 파일 상세정보와, 데이터 블록 주소가 저장되어 있다
    • i-node를 확인하는 방법은 ls -i 명령을 했을 때 나오는 번호가 i-node 번호
    • i-node 번호가 같으면 2개의 파일은 같은 파일이다.

💠 하드 링크

🔸 하드 링크 만들기
ln [옵션] [원본 파일] [링크 파일]

  • 옵션
    • s : 심볼릭 링크

🔸하드링크 생성

ln data1 data1.ln

cp data1 data1.cp
  • data1.ln 이라는 하드링크를 생성하고 data1.cp 라는 복사 파일을 생성했다
  • data1.lndata1i-node 번호는 같지만 data1.cpi-node 번호는 다르다
  • data1.ln 파일을 수정하면 data1 의 파일도 같이 수정된다.

🔸하드링크 생성

ln data1 data1.ln

🔸하드링크 생성

ln data1 data1.ln

🔸하드링크 생성

ln data1 data1.ln

💠 심볼릭 링크

  • 심볼릭 링크의 파일의 종류가 l 이다
  • 하드 링크의 개수가 1이다. 원본파일에 이름을 추가한 것은 아님
  • 파일 이름 뒤에 원본 파일의 이름이 표시된다
  • i-node 번호가 원본과 다름
  • 심볼릭 링크는 열면 원본 파일의 내용이 출력됨
  • 하드링크는 다른 파일 시스템이나 디렉토리에는 설정이 안됨
  • 심볼릭 링크는 디렉토리나 다른 파일 시스템에 설정됨
  • 심볼릭 링크는 원본이 삭제되면 링크가 깨지게 된다

🔸 심볼릭 링크 만들기
ln [옵션] [원본 파일] [링크 파일]

  • 옵션
    • s : 심볼릭 링크

🔸 심볼릭 링크 생성

ln -s data1 data1.sl


🔸 실습1

  1. test.org 파일의 하드링크로 test.ln 생성
ln test.org test.ln
  1. test.org 파일의 하드 링크로 test.ln2를 생성
ln test.org test.ln2
  1. i-node 확인

  2. test.org 와 test.ln, test.ln2의 하드 링크 개수를 확인


🔸 실습2

  1. /etc/hosts 파일을 복사하여 work 파일을 생성
cp /etc/hosts work
  1. work 파일의 하드 링크로 work.ln 생성
ln work work.ln
  1. work 파일의 심볼릭 링크로 work.sl 생성
ln -s work work.sl
  1. work 파일을 복사하여 work.cp 파일을 생성
cp work work.cp
  1. work.sl 파일을 편집기로 열어서 마지막 행을 삭제

  2. work, work.ln, work.sl, work.cp 파일의 내용을 확인

  1. 내용이 같지 않은 파일은 어느 것?
    -> work.cp

🔟 기타 명령어

💠 touch

  • 빈 파일을 만들거나 접근/수정 시간 변경할 수 있는 명령어

  • 파일이 존재하지 않으면 내용이 없는 빈 파일을 만들고 파일이 존재하면 현재 시간 또는 옵션에 지정한 시간으로 파일의 관련 시간을 변경한다

touch [옵션] [파일]

  • 옵션
    • a : 접근 시간만 변경
    • m : 수정 시간만 변경
    • t : 접근 시간을 직접 입력

test라는 빈파일 생성

touch test

tt라는 파일의 시간 변경

touch -t 12311200 tt


💠 grep

  • 파일 내에서 특정 문자열을 검색할 때 사용하는 명령
  • 정규 표현식을 이용한 복잡한 검색도 가능

grep [옵션] [패턴] [파일]

  • 옵션
    • i : 대소문자 구별하지 않고 검색
    • l : 지정한 패턴이 포함된 파일명을 출력
    • n : 행번호를 출력

실습

  1. /etc/services 파일을 data로 복사
    cp /etc/services data

  2. data 파일에서 NNTP 검색
    grep NNTP data

  3. 행번호도 같이 출력

  4. 대소문자 구별 x

grep -in tcp data

💠 find

  • 특정 파일이 어느 디렉토리에 있는지 찾아주는 명령어
    find [경로] [검색조건] [동작]

  • 검색 조건

    • name : 파일이름

    • type : 파일 종류

    • user : 로그인 아이디

    • perm : 접근권한

  • 동작

    • exec 명령 {} : 검색된 파일에 명령을 수행

    • ok 명령 {} : 사용자의 확인을 받아서 명령을 실행

    • print : 검색된 파일의 절대 경로를 출력

    • ls : 검색 결과를 목록 형식으로 출력

/usr/bin 디렉토리에서 ls 파일의 위치를 조회

find /usr/bin -name ls

/home 디렉토리에서 jiwoni라는 유저가 소유하는 파일을 조회

find /home -name jiwoni

/tmp 디렉토리에서 jiwoni라는 소유자가 가진 파일을 조회해서 모두 삭제

find /tmp -user jiwoni -exec rm {} \;

-> 허가 거부

/tmp 디렉토리에서 jiwoni라는 소유자가 가진 파일을 조회해서 하나하나 물어보면서 삭제

find /tmp -user jiwoni -ok rm {} \;

💠 실습

  • /etc/services 파일에서 문자열 NETBIOS 가 있는 행을 찾아 행번호와 함께 출력

grep -n NETBIOS /etc/services

  • 홈 디렉토리에서 data1.cp 파일이 있는지 검색
find ~ -name data1.cp

  • 홈 디렉토리에서 data1.cp 파일을 찾아서 temp 디렉토리로 이동
find ~ -name data1.cp -exec mv {} temp \;

0개의 댓글