UNIX/Linux(파일시스템 응용)
2. 파일 시스템 응용
1) 파일시스템 개요
(1) 개요
- 물리적인 저장장치에 파일을 생성, 저장, 관리하기 위한 논리적인 자료구조
- 물리적인 디스크는 논리적인 파티션으로 나누어지며, 각 파티션별로 고유한 파일시스템을 생성(ex. NTFS, EXT2, EXT3, EXT4)
(2) 파일시스템 구성
① 부트 블럭(Boot block) : 운영체제를 부팅하거나 초기화하기 위한 부트스트랩 코드를 담고 있는 블럭
② 슈퍼 블럭(Super block) : 해당 파일 시스템을 관리하기 위한 정보를 담고 있는 블럭
③ 아이노드 리스트(inode list) : 파일들에 대한 속성정보를 담고 있는 inode 구조체 리스트로 구성
-속성정보
inode number : 파일시스템 내에서 해당 파일을 식별하기 위한 고유한 식별자
파일 타입 : 일반파일, 디렉터리, 장치파일 등 파일 유형
접근권한 : 파일에 대한 접근 권한
link count : 해당 inode를 참조하는 링크 개수(하드링크 count)
소유자 : 파일의 소유자(UID)
소유그룹 : 파일의 소유그룹(GID)
파일크기 : 파일의 크기
MAC TIME : last Modification Time (파일의 내용을 마지막으로 수정한 시간), last Access Time (파일을 마지막으로 접근한 시간), last Change Time (파일의 속성을 마지막으로 변경한 시간, 파일의 속성은 소유자, 접근권한 등과 같은 inode 정보)
Block index : Data blocks에 저장되어 있는 파일 내용에 대한 index 정보
- inode 에는 파일명이 없으며 파일명은 디렉터리를 통해 관리
- 침해사고 발생시 피해 시스템 파일에 대한 무결성 확인을 위해 타임라인 분석 진행, MAC Time을 점검
- 특정 파일의 inode에 대한 속성정보는 stat 명령을 통해 확인
④ Data blocks : 실제 파일의 내용이 저장되는 블록, 고정크기 블록들로 구성
2) 파일시스템과 링크(link)파일
(1) 개요
- 링크는 윈도우의 바로가기 아이콘처럼 기존 파일에 대한 또 다른 접근 포인트를 만들어주는 기능
- 링크에는 하드 링크(Hard link)와 심볼릭 링크(Symbolic link)로 구분할 수 있다.
형식 -> ln [-s] source_file | source_directory target_file
-s 옵션이 있으면 심볼릭 링크를, 없으면 하드 링크 생성
(2) 하드 링크(Hard link)
- 하드 링크는 기존 파일과 동일한 inode number를 가지는 파일을 생성하여 접근하는 방식
- inode number는 파일시스템별로 고유한 값이기 때문에 동일한 파일시스템 내에서만 하드 링크가 가능, 디렉터리는 하드링크가 불가능
- 하드 링크 파일을 생성하면 해당 inode의 링크 카운트가 1 증가, 파일 삭제 시에는 링크 카운트를 1 감소시킨 후 그 값이 0이 되었을 때 해당 파일의 inode 정보 및 데이터가 삭제
(3) 심볼릭 링크(Symbolic link)
- 동일 파일시스템 내에서만 링크가 가능한 하드링크의 단점을 보완
- 원본 파일에 대한 파일 경로를 파일 내용으로 하는 새로운 파일을 생성해서 접근하는 방식, 하드 링크와 달리 inode number가 아닌 파일 경로를 기반으로 하므로 파일시스템에 제한이 없으며 디렉터리도 가능
- 원본 파일이 삭제되거나 이동하게 되면 해당 경로가 바뀌게 되므로 심볼릭 링크 파일은 링크가 끊어짐
3) 디렉터리 관리
(1) 파일의 종류
- 일반 파일 : 일반적으로 데이터 또는 프로그램 코드에 해당하는 일련의 바이트 스트림으로 구성, 이러한 정규 파일은 표준 파일 입출력 시스템 호출을 통해 참조
- 디렉터리 : 디렉터리에 포함된 파일명과 해당 파일에 대한 정보를 담고 있는 inode number 목록을 내용으로 가지고 있는 특수한 파일, 디렉터리 파일은 디렉터리의 명시적인 시스템 호출을 통해 참조
- 특수 파일 : 특수파일은 기능에 따라 다양한 형태로 존재, 표준 입출력 시스템 호출을 통해 참조
- 프로세스 간 통신 (IPC)을 위해 파이프, 소켓 등의 파일 사용
- 주변장치를 사용하기 위한 장치파일, 블록 단위로 입출력하는 블록장치파일과 문자 단위로 입출력하는 문자장치파일로 구분
(2) 디렉터리 내용 출력(ls 명령)
- 특정 디렉터리에 있는 디렉터리와 파일목록을 보여주고 추가 옵션으로 이들에 관한 여러가지 정보(크기, 소유주, 만든시간, 변경 시간, 이름, 접근권한 등)를 알 수 있다.
- 입력 문법 -> ls [-ailFR] [file_name | directory_name]
-l : 목록 형태로 디렉터리 및 파일의 정보를 자세히 보여줌
-a : 도트(.) 파일을 포함하여 디렉터리 내에 있는 모든 디렉터리 및 파일(숨김 포함)을 보여줌
-R : 하위 디렉터리에 있는 내용까지 보여줌
-F : 디렉터리인지 어떤 종류의 파일인지를 알려줌
-i : 디렉터리 및 파일에 지정된 inode number를 보여줌
ls -l 출력 결과 예시
drwxrwx--- 2 certang group 512 Aug 3 15:12 temp/
각 필드 : 파일종류 및 접근권한, 하드링크 수, 소유주, 소유그룹, 크기, 최종 수정일, 최종 수정시간, 파일명 순
파일 종류 : d(디렉터리), b(블록 장치 파일), c(문자 장치 파일), l(심볼릭 링크 파일), p(네임드 파이프), s(유닉스 도메인 소켓), -(일반 파일)
접근권한
user : 소유자의 권한 group : 소유그룹의 권한 others : 기타 사용자의 권한
접근권한의 종류
r(4) : 파일에 대한 읽기 권한과 디렉터리 내에 있는 파일명을 읽을 수 있는 권한
w(2) : 파일에 대한 쓰기 권한과 디렉터리 내에 있는 파일을 생성하거나 삭제할 수 있는 권한
x(1) : 파일에 대한 실행 권한과 디렉터리 내에서 탐색을 위해 이동할 수 있는 권한
- : 권한 X
총 형식 -> [파일종류][user_r][user_w][user_x][group_r][group_w][group_x][others_r][others_w][others_x]
ex) -rwxrw-r--
(3) 디렉터리 간의 이동(cd)
- cd 명령어는 Change Directory의 약자, 파일시스템 내의 특정 디렉터리로 이동할 때 사용
형식 -> cd [directory_name]
(4) 새로운 디렉터리 생성(mkdir)
- mkdir은 Make Directory의 약자, 디렉터리를 새로 만들 경우에 사용
형식 -> mkdir [-m mode] [-p] directory_name
-m : 새로 만들 디렉터리의 접근권한을 명시적으로 선언
-p : 계층적인 구조를 갖는 디렉터리를 한꺼번에 만듦
(5) 기존 디렉터리 삭제(rmdir)
- rmdir 명령은 기존 디렉터리를 삭제, 삭제가 성공하기 위해서는 디렉터리 하위에 디렉터리나 파일이 없어야 함
형식 -> rmdir [-p] directory_name
-p : 계층적인 구조를 갖는 디렉터리를 한꺼번에 삭제
4) 파일 권한 관리
(1) 접근 권한 변경(chmod)
- chmod 명령은 기존 파일 또는 디렉터리에 대한 접근 권한을 변경할 때 사용
형식 -> chmod [-R] permission file_name1 | directory_name1 [file_name2 | directory_name2...]
-R : 하위 디렉터리와 파일의 권한까지 변경
permission : 기호나 8진수로 접근권한 지정
접근권한 기호로 기술
대상 : u(user), g(group), o(others), a(all)
연산자 : +(추가), -(제거), =(지정)
접근권한 : r(읽기), w(쓰기), x(실행)
접근권한 숫자로 기술
user, group, others 순
r(읽기) = 4, w(쓰기) = 2, x(실행) = 1
ex) 777 user, group, others 모두 읽기, 쓰기, 실행 가능, 만약 숫자가 6이면 읽기, 쓰기만 가능, 4이면 읽기만 가능
(2) 소유주 또는 소유그룹 변경(chown/chgrp)
- 파일이나 디렉터리의 소유주나 소유그룹을 변경할 때 사용, 명령을 실행하고 나면 파일에 대한 이전 소유주는 해당 파일에 이 명령을 다시 실행 할 수 없음
형식 -> chown [-hR] owner file_name | directory_name1 [file_name2 | directory_name2...]
chgrp [-hR] owner file_name | directory_name1 [file_name2 | directory_name2...]
-R : 하위 디렉터리와 디렉터리 하위의 모든 파일의 소유주를 변경
-h : 심볼릭 링크 파일 자체의 소유주나 그룹을 변경
(3) 접근권한 마스크(umask)
- chmod 명령은 기존 파일의 접근권한을 변경할 때 사용
- umask는 앞으로 만들어질 파일에 영향을 미치는 명령으로, 명령 시 지정한 8진수는 새로 만들어질 파일에서 제거될 권한 명시
- 일반 파일을 생성할 때 접근권한은 666에서 umask로 지정한 값을 빼고 디렉터리의 경우 777에서 umask로 지정한 값을 뺌
- 시스템 관리자는 /etc/profile 파일에 umask를 지정하여 시스템 전체 사용자에게 획일적인 umask 값을 적용
5) 파일 검색(find)
(1) find
- find 명령은 시스템 내에 있는 파일 중에서 사용자가 원하는 파일을 찾을 때 사용, 찾은 파일에 특정 명령을 실행하도록 명령 가능
- 검색 경로는 최상위 디렉터리인 루트 디렉터리(/)부터 시작하는 절대 경로나, 현재 디렉터리(.)로 표시하는 상대 경로를 이용
형식 -> find path [expression] [action]
-name file_name : 파일명 지정
-type : 파일 종류를 지정
-user uname : 소유자명 또는 UID 지정
-group gname : 소유그룹 이름 또는 GID 지정
-size [+-]num[단위] : 파일의 크기 지정
-perm mode : 파일의 접근권한 지정
-atime [+-]n : access time 지정
-ctime [+-]n : change time 지정
-mtime [+-]n : modification time 지정
6) 기타 디렉터리 및 파일 관련 명령어 요약
(1) 디렉터리 관리
ls : 디렉터리 및 파일의 정보를 나열
cd : 작업 디렉터리를 변경
pwd : 현재 작업 디렉터리의 절대경로명을 출력
mkdir : 새로운 디렉터리를 만들 때 사용
rmdir : 비어있는 디렉터리를 삭제할 때 사용
(2) 파일 관리
cat : 파일의 내용을 출력하거나 여러 파일의 내용을 병합
more : 파일의 내용을 스크롤하여 출력
head : 파일의 앞부분(디폴트는 앞 열 줄)을 출력
tail : 파일의 뒷부분(디폴트는 마지막 열 줄)을 출력
mv : 파일과 디렉터리를 이동시키거나 파일 이름을 변경
cp : 파일의 내용을 복사하고 새로운 이름을 생성
rm : 파일이나 디렉터리를 삭제
ln : 하드 링크 또는 심볼릭 링크 생성
(3) 파일 권한 관리
chmod : 파일이나 디렉터리의 접근권한을 변경
chown : 파일의 소유주를 변경
chgrp : 파일의 소유 그룹을 변경
touch : 0byte 파일 생성 또는 파일의 시간을 변경
umask : 파일 생성 시 접근권한에 영향을 미침
(4) 파일 응용
wc : 파일 내 행, 단어, 문자의 수를 출력
cut : 파일의 행으로부터 특정 바이트나 필드 추출
paste : 파일 내 행을 병합할 때 사용
tr : 파일 내 지정 문자를 치환 또는 삭제할 때 사용
sort : 파일을 정렬할 때 사용
split : 파일을 분할할 때 사용
uniq : 파일에서 인접하는 행의 내용을 비교
cmp : 파일을 비교할 때 사용(다르면 처음 발견한 라인번호와 오프셋 출력)
comm : 파일을 비교할 때 사용(한쪽에만 있거나 양쪽 모두에 있는 행 출력)
diff : 파일이 동일한지 여부를 검사
grep : 파일 내 특정 패턴이나 문자열을 검색
find : 파일을 검색할 때 사용
'자격증 > 정보보안기사' 카테고리의 다른 글
UNIX/Linux 기본(시스템 기본) (0) | 2020.06.29 |
---|---|
윈도우 인증 (0) | 2020.06.29 |