본문 바로가기

자격증/리눅스 마스터 1급

Part2) 리눅스 시스템 관리 - 일반 운영 관리(2) | 파일 시스템 관리

I. 파일 및 디렉터리 관리


파일 형식과 퍼미션

1) 파일의 종류

 종류 

 의미 

 일반파일 

 -일반적으로 문서 파일이나 이진 파일을 나타냄

 -문서파일: 128개의 ASCII 문자코드로 구성

 -이진파일: 문자가 아닌 0과 1로 구성된 데이터 파일(실행 파일)

 디렉터리파일 

 -디렉터리 명시적 시스템 호출을 통해서만 참조(실제 파일 포함X)

 -다른 디렉터리를 포함할 수 있는 트리(tree) 구조인 계층적 구조를 가짐

 -기본적으로 "."과 ".."이 생성되는데 "."은 자기자신, ".."은 부모 디렉터리를 가리킴 

 특수파일 

 -프린터, CD-ROM, 디스크와 같은 주변 장치, 프로세스 간 상호통신하는 파일을 일컫음(리눅스 자원 관리 디바이스)

 -하드 디스크경우 "/dev/sda1", "/dev/sda2"와 같이 사용(윈도우즈에선 "C:", "D:")




2) 퍼미션: 파일에 관한 사용자, 그룹 및 다른 사용자의 접근 권한(읽기, 쓰기, 실행), SetUID, SetGID, StickyBit 및 속성에 대한 설정들을 의미한다. 

 d

 FILE Type

  • - : 일반 파일
  • b : 블럭 구조의 특수 파일 (ex. /dev/sda)
  • c : 입출력에 사용되는 특수파일 (ex. /dev/console)
  • d : 디렉터리
  • l : 심볼릭 링크 파일
  • p : 파이프 파일
  • s : 소켓파일

 rwxr-xr-x

 허가권

 2 

 링크 수

 root 

 소유권(소유권자)

 root 

 소유권(소유그룹)

 4096 

 파일용량 

 2018-02-21 13:57

 날짜와 시간 

 test 

 파일명



*허가권: rwx와 같이 표시되며, chmod 명령어로 변경할 수있다.





 File에서의 rwx 권한

r

 문서 읽기 (vi, cat, head, tail, more)

w

 문서 수정 (vi, redirection) 

w

 실행 (일반 문서 파일에는 x권한이 없음) [ex) 명령어 파일] 

 Directory에서의 rwx 권한

r

 디렉터리 목록 보기 (ls) 

w

 파일/디렉터리 생성, 이동, 복사, 삭제 (mkdir, touch, mv, cp, rm) 

x

 접근 (cd)

 ※dir에 x권한이 없으면 대부분의 명령어가 안됨 ex) rw- 이여도 r, w 권한 없음

 ※dir에 r권한이 없어도 w권한 사용 가능 (문제발생 우려로 사용금지)


chmod: 허가권 변경 명령어

 chmod [방식] [target]

 방식 

 기능 

 예시 

 symbolic (상대 모드) 

 권한추가 / 횟수

 [test: -rwxr-xr-x]

 chmod u-x test   ▶ [test: -r-xr-xr-x]

 chmod g+w test ▶ [test: -r-xrwxr-x]

 chmod o-r test   ▶ [test: -r-xrwx--x]

 chmod a-x test   ▶ [test: -r--rw----]

 chmod ug+x test▶ [test: -r-xrwx---]

 chmod g-rx  test ▶ [test: -r-x-w----]

 chmod u+x,o+x test ▶ [test: -r-x-w---x]

 +: 권한 부여, -: 권한 제거, =: 권한 유지 / s: 소유자의 그룹만 실행, u: 소유자, g:그룹, o:다른사용자, a: 모두

 numeric (절대 모드) 

 덮어쓰기 

 chmod 755 test ▶ [test: -rwxr-xr-x]

 chmod 566 test ▶ [test: -r-xrw-rw-]




*소유권


chown: 소유권 변경 명령어

 chown [계정명] [target] //옵션: -R (하위 디렉터리까지 전부 변경)

 방식

 예시 

 : (Unix 계열) 

 chown 계정명:계정명, chown 계정명:, chown :계정명 

 . (Linux 전용) 

 chown 계정명.계정명, chown 계정명., chown .계정명 

 [test: root root] (앞: 소유권자, 뒤: 소유그룹)

 chown user1 test (소유권자만 변경) ▶ [test: user1 root]

 chown user2.user1 (둘다 변경) ▶ [test: user2 user1]

 chown .user2 (소유그룹만 변경) ▶ [test: user2 user2]

 chown user1. (둘다 변경) ▶ [test: user1 user1] 



*특수 권한


umask: file/dir생성 시 퍼미션을 자동으로 설정하기 위한 마스크값 (기본값: 022 [홈디렉터리값:077])

 종류

 최대권한 - umask = 기본권한

 디렉터리 (최대값: 777)

 777 - 022 = 755

 파일 (최대값: 666) 

 666 - 022 = 644 

 홈디렉터리 공간[계정 전용공간]

 777 - 077 = 700 (해당 계정 본인만 이용가능하도록) 


 umask 확인 

 umask

 #umask

 0022 //제일 앞 0은 무시

 umask 변경 

 umask [마스크값] (로그아웃시 초기화 되므로, /etc/profile 에서 umask값 변경을 유지시킬 수 있다.)

 #umask 002

 0002 




SetUID: 소유권자의 권한으로 대신 실행해준다.

-symbolic으로는 S나 s로 표현되며, numeric으로는 4000으로 표현된다. [S는 x권한이 없고, s는 x권한이 있음을 표현]


SetGID: 소유그룹의 권한으로 대신 실행해준다 (※거의 사용되지 않음)

-symbolic으로는 S나 s로 표현되며, numeric으로는 2000으로 표현된다.



스티키 비트(sticky bit): 이 권한이 설정된 디렉터리는 모든 유저의 file/dir의 생성은 자유롭지만, 삭제/변경 시에는 소유권자나 관리자만 가능하다. 그리고 디렉터리에만 적용되는 권한이다.(ex. 게시판, 공유폴더)

-symbolic으로는 T나 t로 표현되며, numeric으로는 1000으로 표현된다.




파일 시스템 관리 및 복구 - HDD(하드디스크) 

 

 Windows 

 Linux 

 하드장치명 

 disk

 /dev/sd[x] (x=a,b,c,d) 

 파티션 명 

 C:, D:

 /dev/sdx[n] (n=1,2,3,4) 

 파티션 도구

 disk part 

 fdisk 

 포맷 도구 

 window 탐색기 

 mkfs 

 File System 

 FAT시리즈, NTFS 

 ufs, ext시리즈 

 장치 연결

 plug&play(자동) 

 mount(수동) 

 순서: 하드장착 ▶ 파티션 ▶ 포맷 ▶ 마운트



1) 하드 장착

 종류

 이름표기

 내용 

 IDE 

 /dev/hd[x] (6.x버전부터는 /dev/sd[x])

 CPU가 하드관리 (부팅 완료 시 장착 불가) 

 SCSI

 /dev/sd[x] 

 내부의 SCSI칩이 직접 관리 (부팅 완료 시 장착 가능) 


2) 파티션: physical 최대 4개, primary(주영역) 최대 3~4개, extends(확장영역) 최대 1개, logical(논리 영역) 무한개[extends안에서만 존재]


*fdisk: 파티션 도구

 fdisk [하드장치명] //fdisk -l: 전체 하드 리스트

 fdisk 도구 옵션

 의미 

a

 부트 가능한 플래그로 변경 

b

 bsd 디스크 레이블을 편집 

c

 도스 호환 플래그로 변경 

 d 

 파티션 삭제 

 l 

 알려진 파티션 형태의 목록 

 m 

 명령어 항목 출력 

 n 

 새로운 파티션 추가 

o

 새로운 도스 파티션 테이블 생성 

 p 

 파티션 테이블 출력 

 q 

 변경을 저장하지 않고 종료 

 s 

 새로운 Sun 디스크 레이블을 생성 

 t 

 파티션 시스템 id 변경 

 u 

 표시/엔트리 단위 변경 

v

 파티션 테이블 점검 

 w 

 디스크에 테이블 기록 후 종료 

 x 

 특별한 기능, 전문가 모드(실린더 번호, 파티션순서, 헤드의 수, 트랙당 섹터수 등을 변경) 


 sbd 파티션 나누기 예시 (하드용량: 1GB)

 

 Primary 3개 구성하기

 p명령어로 3개로 구성된 Primary 영역 확인

 

 extends로 분할 (이 자체는 저장장치가 아님)

 extends영역에 4개의 logical 영역을 추가 

 p명령어로 나눠진 파티션 확인 후 w로 저장




3) 포맷: 파일시스템의 생성 및 설치이다. fdisk로 분할된 파티션들은 파일시스템으로 만들어져야 운영체제상에서 활용될 수 있다.


*mkfs(Make File System): 포맷 도구

 mkfs [옵션] [파티션명] 

옵션

 의미  

-V

 실행되는 모든 파일 시스템 명령어들을 포함하여 상세한 정보를 출력 

-t

 생성할 파일 시스템 형식을 선택 (미지정 시 기본값으로 ext2) 

 -c 

 배드블럭을 조사하고 결과에 따라 배드블럭 리스트를 초기화 

-l

 Filename이라는 파일로부터 초기 배드블럭 리스트를 읽어 들임 

-v

 현재 진행 상황에 대해 자세히 출력 


 사용법 

 mkfs -t [fstype] [파티션명] (fstype 미지정시 기본으로 ext2)

 # mkfs -t ext4 /dev/sdb1 //ext4 시스템 생성

 mkfs.[fstype] [파티션명]

 # mkfs.ext4 /dev/hda2 //ext4 시스템 생성, # mkfs.xfs /dev/hda3 //xfs 시스템 생성

 mkefs 도구

 mkefs -h /dev/hdb1 //ext3시스템 생성, # mkefs -T ext4 /dev/sdb1 //ext4 시스템 생성



*SWAP 파일 시스템 생성: 리눅스의 가상메모리를 사용하기 위한 파일 시스템


가상메모리: 시스템에 설치되어 있는 실제의 메모리보다 더 많은 메모리를 사용하기 위한 기술이다. 물리적인 메모리가 부족할 때 우선 하드디스크의 공간을 이용하고 메모리 사용이 가능해지면 하드디스크에서 메모리로 옮겨오는 방법을 사용하는데, 이 방법이 스와핑(Swapping)이다.


스와핑 사용 방법

 mkswap [옵션] [장치명] [size] (옵션= -c: 디스크 배드블록 검사, -f: 무조건 실행, size: SWAP 영역 크기 지정)

 SWAP 파티션 방식 

 나눠진 파티션 중 하나를 스와핑 영역으로 사용하는데, 파티션 단위의 처리여서 유연성은 떨어지지만, 효율이 SWAP 파일 방식에 비해 높다. 

 생성법: fdisk 도구에서 t 명령어로 id값을 82번으로 변경후 저장후 mkswap 명령어 사용

 # mkswap -c /dev/hda6 //fdisk로 swap파티션 생성 후 실행

 SWAP 파일 방식 

 일반적인 파일 시스템에 존재하는 파일을 스와핑 영역으로 사용하는 것으로, 필요시 스와핑 영역을 유연하게 늘리고 줄일 수 있으나 파티션 방식보다 효율이 떨어진다. 

 생성법: dd명령으로 파일 생성 후 mkswap 명령어 사용

 # dd if=/dev/zero of=/swapfile bs=1024 count=8192 //파일 생성

 # mkswap swapfile 8192 //swap파일 생성

 # sync

 # swapon swapfile //swap파일 활성화

 SWAP 활성화/확인

 위와 같이 swapon으로 활성화하고, 비활성화 시 swapoff 명령을 사용한다. (swapon -s: SWAP 파일 시스템 사용량 확인) 

 부팅시 자동 활성화

 /etc/fstab에 다음과 같이 추가 

 SWAP파티션: /dev/had6 swap swap  defaults 0 0

 SWAP파일: /swapfile  swap swap defaults 0 0

 디바이스 활성화: swapon -va




4) 마운트: 하드디스크 파티션이나 다른 미디어를 사용할 수 있게 디렉터리에 연결하는 명령어이다.


*하드디스크의 마운트 조건: 파티션을 나누고, 포맷이 완료된 후, 마운트 포인트 할 디렉터리가 생성되어야 한다.


*mount:/umount 마운트 설정/해제 명령어

 mount [옵션] [장치명] [마운트 포인트] (옵션= -t: 마운트할 파일 시스템 형식 지정)

 umount [장치명 or 마운트 포인트] (unmount하고 헷갈리지 말 것)

 # mount /dev/sdb1 /mp1 //mp1(마운트 포인트)에 연결

 # umount /mp1 //마운트 해제

 # mount -t nfs [IP:/EXPORT DIR] [mp] //원격 nfs 파일 시스템에 연결

※마운트 시 주의사항: 한 개의 장치는 한개의 mp를 가져야 하며, mount와 umount 작업 시 mp 밖에서 작업해야 한다.


마운트 확인

 cat /etc/mtab

 /etc/mtab 파일은 시스템에 마운트 된 파일시스템이나 디바이스 정보를 알 수 있도록 한 파일이다. 

 df -h

 가장 많이쓴다.

 df -Th

 위 목록에서 fstype까지 보여준다. 



부팅 시 자동 마운트

 /etc/fstab에 자동 마운트를 추가할 항목을 넣어준다. 

/dev/sdb1

 마운트 할 디바이스 명

/mp

 마운트 포인트 

ext4

 마운트할 파일 시스템 종류 

defaults

 마운트 옵션

 auto: 자동마운트 / noauto: 자동마운트X(-a 옵션 사용 시, noauto되어있는 줄은 제외됨)

 defaults:일반적인 파일시스템

 remount:재마운트

 ro:읽기전용 / rw: 읽기&쓰기 전용

 nouser: 일반사용자 마운트 금지 / user: 일반 사용자 마운트 허용

1

 파일 시스템의 백업 여부

 0: 파일 시스템 백업 X ▶ SWAP

 1: 백업 대상 포함 ▶ 모든 파티션

2

 재부팅 시 자동 검사 순서 (0: 부팅 시 파일 검사X[스왑,CD-ROM]

 0: 부팅 시 파일 검사 X ▶ SWAP, CD-ROM

 1: 시스템 부팅 시 해당 파일 시스템일 제일 먼저 검사 ▶ 루트 파일 시스템

 2: 1로 설정된 파일 시스템의 점검이 끝난 후 검사 ▶ 그 외의 파일 시스템



5) 파일 시스템 점검과 복구: 파일 시스템이 깨졌을때, 이를 복구하기 위한 절차이다.


*fsck/e2fsck

 fsck [옵션] [파티션] 

 fsck는 /etc/fstab 파일에 설정되어 있는 파일 시스템을 기본 작업 대상으로 하며, 반드시 마운트 해제 후 작업해야 한다.

 # umount /dev/sdb1
 # fsck -t ext4 /dev/sdb1

 실제 작업 없이 특정 파일 시스템의 점검을 시뮬레이션 돌릴 수도 있다.

 # fsck -N -t ext4 /dev/sdb1

 ▲종료코드 0:정상종료 / 1: FS복구 /2: FS복구 후 재부팅요 / 4: FS문제가 있으나 복구X / 8: 실행 에러 / 16: 사용법or문법에러

 / 32: fsck작업이 사용자에 의해 취소 / 128: 공유 라이브러리 에러

 e2fsck [옵션] [파티션]  

 ext2, ext3, ext4 파일시스템을 점검하기 위해 사용되며, 반드시 마운트 해제 후 작업해야 한다. 

 # umount /dev/sdb1

 # e2fsck /dev/sdb1

 # e2fsck -c [파티션] or # mke2fs -cj [파티션] //디스크 파티션의 배드블록 체크(badblocks 명령보다 나음)

 //즉, 배드블록 체크를 위한 명령어는 "e2fsck, mke2fs, badblocks" 들이 있다.


백업수퍼블록을 이용한 파일시스템복구: 파일 시스템을 자동복구 하지 못한 경우에 사용한다.

 # dumpe2fs /dev/sda3 | grep superblock //먼저, 백업수퍼블록이 존재하고 있는 번호를 알고 있어야한다.

 # e2fsck -b 8194 -f -y /dev/sda3 //위에서 나온 번호(8194)로 백업 수퍼블록 복구



지워진 파일 복구: 지워진 파일이 있는 파티션을 최대한 빨리 언마운트시킨 후 작업한다.

 debugfs -w /dev/sda7 //지워진 디렉토리의 inode 번호 찾기 

 debugfs : dump <inode번호> [저장될 파일명] //디스크에 덤프 

 xxd debugfs-dump | less //덤프된 inode 확인

 echo lsdel | debugfs /dev/sda7 > lsdel.out //지워진 inode 원위치  



6) quota: 사용자 계정에 디스크 및 아이노드 할당량 명령어

 quota

 설정된 각 사용자의 쿼타를 확인한다.

 edquota 

 각 사용자의 디스크 쿼타를 설정한다. 

 quotaon 

 시스템에서 쿼타를 가동한다. 

 quotaoff 

 시스템에서 쿼타가동을 중지한다. 

 quotacheck 

 시스템에서 쿼타상황을 체크한다. 

 repquota 

 사용자들의 쿼타설정내역을 확인한다.