[리마1급] 파일시스템 관리

rodusik·2023년 12월 1일
0

리눅스마스터1급

목록 보기
1/2

{1} 파일 및 디렉터리 관리

[1] 소유권과 허가권

1) 소유권과 허가권 확인

소유권과 허가권 확인은 ls -l 또는 -n 옵션 사용

❯ ls -l
-rw-r--r--  1 user  staff       301  8 29 16:03 api_test.py

❯ ls -n
-rw-r--r--  1 501  20       301  8 29 16:03 api_test.py

2) 파일 유형

- rw- r-- r-- 1 user staff 301 8 29 16:03 api_test.py
|   |      |     |                  | 
|   |      |     |                그룹 소유권
|   |      |     다른 사용자 허가권(r--) -> 사용자 소유권
|   |     그룹 허가권
|   소유자 허가권
파일유형

3) 허가권

  • 허가권의 종류

    • 사용자 허가권
    • 그룹 허가권
    • 다른 사용자 허가권
  • 권한

    • 읽기(r)
    • 쓰기(w)
    • 실행(x)

4) 소유권

  • 사용자 소유권
  • 그룹 소유권

5) 허가권 변경

chmod 명렁어 사용(-R 옵션을 통해 특정 디렉터리 내의 파일과 디렉터리에 대하여 재귀적으로 허가권 변경 가능)

$ chmod [option] mode file(s)

$ chmod 644 test.sh
$ chmod r+x test.sh
$ chmod 755 -R abc/ # abc 디렉터리 및 하위 디렉터리/파일 허가권 변경

6) 사용자 및 그룹 소유권 변경

chown 명령어 사용(root 사용자만 가능함)

$ chown [options] owner[:group] file(s)

$ chown user1:user1 test.sh
$ chown -R user1:user2 abc/ # abc 디렉터리 및 하위 파일/디렉터리 소유권 변경

7) 그룹 소유권 변경

chgrp 명령어 사용(본인이 소유한 파일에 대해 본인이 속한 그룹 내에서 소유권 변경 가능)

8) 기본 허가권 변경

시스템상에 파일 및 디렉터리 생성 시 기본 허가권 지정을 위해 umask 사용
리눅스의 기본 허가권 값은 파일 666(rw-rw-rw-), 디렉터리 777(rwxrwxrwx)
파일 디렉터리 생성 시 umask 값을 뺀 결과값을 허가권으로 지정

$ umask 022 # 파일 644, 디렉터리 755 로 생성
$ umask u=rwx,g=rwx,o=rx # 파일/디렉터리 776 으로 생성

[2] 특수 권한

1) 특수권한 종류

  • Set-UID 권한 비트

    • 파일 실행 시 파일 소유자의 권한으로 실행됨
    • 소유자 허가권에 x 대신 s 로 표기
    • $ chmod u+s 또는 $ chmod '4'744 와 같이 권한 추가
  • Set-GID 권한 비트

    • 파일 실행 시 파일의 그룹으로 실행됨
    • 그룹 허가권에 x 대신 s 로 표기
    • $ chmod g+s 또는 $ chmod '2'744 와 같이 권한 추가
  • 스티키 비트

    • 누구나 접근 가능한 디렉터리이지만 삭제는 원하지 않을 때 사용(파일 소유자만 가능)
    • 디렉터리만 적용 가능
    • $ chmod o+t 또는 chmod '1'744 와 같이 권한 추가

[3] 파일 링크

리눅스에서 윈도우의 바로가기 기능과 같이 시스템에 이미 존재하는 파일에 대한 포인터를 갖는 파일 링크 기능 제공

  • 파일 링크의 종류
    • 하드 링크
      • 대상 파일이 사라지더라도 실제 파일에 접근 가능
      • 해당 파일의 아이노드를 가리킴
      • 디렉터리 링크 불가능
      • 대상 파일 허가권 변경 시 하드 링크의 허가권도 변경됨
    • 심볼릭 링크(소프트 링크)
      • 해당 파일의 경로를 가리킴
      • 단순히 경로만을 참조하므로 대상 파일 삭제 시 심볼릭 링크는 존재하지 않는 파일을 가리키게 됨
$ echo "link test" > source # 원본 파일 생성
$ ln -s source target_soft # 심볼릭 링크 생성
$ ln source target_hard # 하드 링크 생성

$ ls -li
 67124166 -rw-r--r-- 2 irteam irteam       10 Oct 24 11:24 source
 67124166 -rw-r--r-- 2 irteam irteam       10 Oct 24 11:24 target_hard # 원본 파일과 동일한 아이노드를 가리킴
 76745769 lrwxrwxrwx 1 irteam irteam        6 Oct 24 11:24 target_soft -> source

$ rm source
$ ls -li
 67124166 -rw-r--r-- 1 irteam irteam       10 Oct 24 11:24 target_hard
 76745769 lrwxrwxrwx 1 irteam irteam        6 Oct 24 11:24 target_soft -> source

$ cat target_hard # 원본 파일이 삭제되어도 하드 링크의 파일은 존재함
link test

[4] 디렉터리 관리

  • pwd : 현재 어떤 디렉터리에 있는지 출력
  • cd : 작업 디렉터리 변경
    • $ cd / : 루트 디렉터리로 이동
    • $ cd ~ : 사용자 홈 디렉터리로 이동
    • $ cd - : 이전 디렉터리로 이동
  • mkdir : 디렉터리 생성
    • $ mkdir -p : 상위 디렉터리도 생성이 필요하다면 생성함
  • rmdir : 빈 디렉터리 삭제

[5] 파일 관리

  • ls : 지정 경로에 존재하는 파일과 디렉터리의 리스트 출력
  • cp : 파일 및 디렉터리 복사
  • rm : 파일 삭제
    • $ rm -r : 디렉터리 삭제
    • $ rm -f : 파일이 없어도 무시함
  • mv : 파일 및 디렉터리 이동 또는 이름 변경
  • touch : 파일의 파일스탬프(마지막 접근 시간, 수정 시간, 변경 시간) 정보 수정, 파일이 없는 경우 빈 파일 생성
  • atime : 접근 시간
  • mtime : 수정 시간(파일 내용 변경)
  • ctime : 변경 시간(허가권과 같은 상태 변경, atime/ctime도 파일의 상태가 포함되므로 이들 변경 시 ctime도 변경됨)
  • file : 파일 유형 확인
  • find : 지정한 조건에 부합하는 파일 및 디렉터리 검색
    • 옵션
      • name
      • user
      • group
      • uid/gid
      • perm
      • type
      • exec
      • print
      • iname
예제
# 현재 디렉터리에서 확장자가 zip인 파일 검색
$ find . -name '*.zip' 

# 사용자 소유권이 user1인 파일 검색
$ find . -user user1

# 파일 접근 시간이 5일 이상된 파일과 디렉터리를 찾아 홈 디렉터리의 dir1 경로로 이동
$ find . -atime +5 -exec mv '{}' ~/dir1 \;

# 이름이 .log로 끝나는 파일을 찾아 삭제
$ find . -name '*.log' -print0 | xargs -0 rm -f

[6] 텍스트 관련 명령어

  • cat : 텍스트 파일의 내용을 보거나 다른 새로운 파일로 복사 또는 기존의 텍스트 파일과 합치는 기능 수행
  • head : 파일의 앞 부분 출력
    • $ head -n 10 test.txt : 10줄 출력
  • tail : 파일의 끝 부분 출력
    • $ tail -n 10 test.txt : 마지막 10줄 출력
    • $ tail -f test.txt : 새로운 데이터 추가 시 출력 반복(로그 모니터링에 용이함)
  • more : 텍스트 파일의 내용이 많을 때 한 페이지씩 출력
  • less : 텍스트 파일 내용을 페이지 단위로 출력. 다양한 옵션 제공
  • grep : 텍스트 파일을 한 줄씩 읽어서 지정한 패턴과 일치하는 문자열 출력
  • wc : 단어, 개행문자, 문자의 개수 등 카운트
    • $ wc -l : 줄 수 출력
  • sort : 텍스트 파일을 한 줄씩 읽어서 정렬
    • $ sort -r : 정렬 결과를 역순으로 출력
    • $ sort -o : 정렬 결과를 파일에 저장
  • cut : 텍스트 파일을 한 줄 또는 여러 줄을 잘라냄
    • $ cut -d '/' test.txt : '/' 를 구분자로 잘라냄
  • split : 파일을 고정 크기의 여러 파일로 분할
    • $ split -l 10 test.txt : 10줄씩 나눠서 파일 분리

{2} 파일 시스템 관리 및 복구

1) 파일 시스템 생성의 개요

하드디스크를 새롭게 추가하거나 기존의 하드디스크 중 아직 사용하지 않은 영역이 있다면 파일 시스템을 설정하여 정보를 저장하는 데 사용

  1. 하드디스크가 시스템에 정상적으로 인식되었는지 확인($ fdisk -l)
  2. 파티션 생성($ fdisk)
  3. 파일 시스템 생성($ mkfs)
  4. 마운트($ mount)
  5. 시스템 재부팅 시에도 마운트가 유지되도록 파일 시스템 등록(/etc/fstab)

2) 파티션 관리

fdisk 명령을 통해 파티션 생성, 삭제, 수정

  • -n : 파티션 생성
  • -d : 파티션 삭제
  • -p : 파티션 정보 확인

3) 파일 시스템 생성

  • mkfs : 하드디스크를 사용할 수 있도록 파일 시스템 생성
  • mke2fs : 파일 시스템을 실제로 생성
    • -j : ext3로 생성
    • -t : 파일 시스템 유형 설정
    • -b : 블록 사이즈 지정
    • -E : 확장 옵션(stride=stride-size..)
    • -T : 파일 시스템의 파라미터 지정

4) 마운트

mount 명령을 통해 하드디스크 전체나 특정 파티션을 현재 존재하는 파일 시스템의 디렉터리 구조에 붙여서 접근 가능하게 함

  • -t : 파일 유형 지정, 유형에 'no'라고 붙이면(nomsdos,ext) 해당 파일 시스템 제외
  • -o : 마운트 시 옵션 추가

5) 언마운트

unmount를 통해 마운트했던 파일 시스템 해제

  • -a : 모든 파일 시스템 해제

6) 영구 마운트 설정

리눅스 부팅 시 /etc/fstab 파일의 정보에 따라 파일 시스템을 자동으로 마운트함

$ cat /etc/fstab

UUID=b19c1d29-808c-4c60-9104-8925466654bd /                       xfs     defaults,noatime,nodev,inode64        0 0
UUID=45830359-4821-4a18-ad29-7c7a0069da1b /home1                  xfs     defaults,noatime,nodev,inode64        0 0
UUID=1ce0113b-9294-4561-935e-7b56c8078392 none                    swap    defaults        0 0
/home1  /home   none    defaults,bind   0       0
# 블록 디바이스 | 마운트 위치 | 파일 시스템 유형 | 마운트 옵션 | 덤프 여부(1: 백업) | 파일 시스템 점검 순서

[2] 파일 시스템 점검

  • fsck : 파일 시스템 점검 및 복구(언마운트 상태에서 수행)
  • e2fsck : ext2, ext3, ext4 파일 시스템 점검
  • df : 파일 시스템에 대한 자세한 정보 출력
  • du : 파일 및 디렉터리가 차지하는 공간 정보 출력

{3} 스왑

[1] 스왑의 개요

시스템이 물리 메모리를 모두 소진하고 더 많은 메모리 공간이 필요할 때 메모리상의 비활성화된 메모리를 스왑 공간으로 이동하여 메모리 공간을 확보하는 기술

[2] 스왑 파일 생성

  1. 스왑 목적으로 사용할 파일 생성($ dd)
  2. 스왑 파일의 허가권 설정($ chmod)
  3. 스왑 파일 초기화($ mkswap)
  4. 스왑 파일을 시스템에 인식($ swapon)
  5. 스왑 상태 확인($ swapon -s)
  6. 스왑 파일 설정을 영구 저장(/etc/fstab)

[3] 스왑 파일 삭제

  • 스왑 파일 해제($ swapoff)
  • 영구 저장 해제(/etc/fstab)
  • 스왑 파일 삭제($ rm)

[4] 스왑 파티션 생성

  1. 새 파티션 생성($ fdisk | n > p > 1 > enter > enter)
  2. 파티션 타입 변경(t > 82 > w)
  3. 스왑 파티션 초기화($ mkswap)
  4. 스왑 파티션 활성화($ swapon)
  5. 스왑 파티션 영구 저장(/etc/fstab)

[5] 스왑 명령어

  • mkswap : 스왑 영역 설정
  • swapon : 스왑 기능 활성화
  • swapoff : 스왑 기능 비활성화
  • free : 메모리의 사용 상태 출력

{4} 디스크 쿼터

[1] 디스크 쿼터 개요 및 설정 방법

1) 디스크 쿼터 개요

디스크는 한정된 자원이기 때문에 사용자 또는 그룹별 디스크 사용량을 할당하여 관리

2) 디스크 쿼터 설정 방법

  • 디스크 쿼터 기능 활성화(/etc/fstab)
  • 해당 파일 시스템 재마운트($ mount)
  • SELinux 비활성화($ setenforce 0)
  • 사용자용 쿼터 파일 생성 및 디스크 사용량 설정($ quotacheck)
  • 그룹용 쿼터 파일 생성 및 디스크 사용량 설정($ quotacheck)
  • 사용자에 대한 쿼터 정책 설정($ edquota)
  • 그룹에 대한 쿼터 정책 설정($ edquota)
  • 디스크 쿼터 기능 시작($ quotaon)
  • 설정 확인($ repquota)

[2] 디스크 쿼터 관련 명령어

  • quotacheck : 파일 시스템에 대한 사용량을 체크하여 쿼터 기록 파일 생성 또는 기존 파일 갱신
  • edquota : 사용자 또는 그룹을 위한 쿼터 편집(vi에디터)
  • repquota : 사용자 및 그룹의 파일 시스템 사용량 및 쿼터의 정보 출력
  • quota : 사용자의 디스크 사용량 및 쿼터 정보 출력
  • quotaon/off : 쿼터 설정 활성화/비활성화
  • setquota : 사용자 및 그룹의 쿼터 설정 수행(cli)

0개의 댓글