System/OS
2013.04.23 15:17
[linux] 리눅스 파일시스템과 디렉토리 설명
Views 26943 Comment 0
1. 파일 시스템
파일 시스템이란 운영제제가 파일을 시스템의 디스크상에 구성하는 방식을 말한다. 운영체제는 시스템의 디스크 파티션상에 파일들을 연속적이고 일정한 규칙을 가지고 저장하는데 파일 시스템은 이러한 규칙들의 방식을 제시하는 역할을 한다. 또한 파일 시스템은 시스템 디스크나 파티션 그라고 파일 시스템의 형식을 말할 경우에도 쓰일 수 있다. 파티션과 파일 시스템은 다른 것이다. 파일 시스템은 파티션을 구성해 주는 역할을 한다. 파일 시스템을 포함하지 못한 파티션은 파일 시스템을 사용될 수 있도록 초기화되고 파일 정보를 기록하기 위한 형식을 만들어야 한다. 이 과정을 거쳐야 파티션은 파일 시스템으로 사용될 수 있다.
1.1 파일 시스템의 구조
◎ 슈퍼블록(super block)
슈퍼블록(Super Block)은 파일 시스템에 의존하는 정보를 가지며 파일 시스템의 크기 등과 같은 파일 시스템의 전체 적인 정보를 가지고 있다.
◎ 아이노드(inode)
아이노드(inode)는 파일의 이름을 제외한 해당 파일의 모든 정보를 가지고 있다. 파일 이름은 inode 번호와 함께 디렉토리 안에 저장된다.
◎ 테이터 블록(data block)
데이터 블록(data block)은 inode에 포함된다. inode가 몇 개의 데이터 블록을 포함하고 있다. 데이터 블록은 파일에서 테이터를 저장하기 위해서 사용된다.
◎ 디렉토리 블록(Directory Block)
파일 이름과 inode번호를 저장하기 위해서 사용된다.
◎ 간접 블록(Indirection Block)
간접블록은 추가적인 테이터 블록을 위한 포인터들이 사용할 동작으로 할당되는 공간이다. 실제적으로 inode는 적은 수의 테이터 블록을 가지고 있다. 그러므로 더 많은 데이터 블록이 필요할 경우 이를 지정할 포인터가 필요하게 되는데 그때 포인터들이 사용할 동적인 블록이 간접 블록이다.
◎ 홀 (Hole)
홀은 inode나 간접 블록안의 테이터 블록의 주소로 특별한 값을 저장한다.홀은 파일 시스템에 의해서 파일안에 자리하게 된다. 하지만 이 홀을 위해 실질적으로 디스크 상에 공간은 할당되지 않는다. 단지 0바이트가 파일 안에서 특정 공간을 차지하고 있더라고 가정하는 것이다.
@ EXT2
◎ EXT2 아이노드
inode는 파일시스템의 가장 기본되는 단위이다. 또한 각각을 구분할 수 있는 고유 번호를 가지고 파일의 테이터가 어느 블록에 어느 위치에 저장되어 있는지, 파일에 대한 접근 권한, 파일의 최종 수정시간 그리고 파일의 종류등의 정보를 inode 테이블에 저장한다. 저장되는 정보는 모드, 소유자 정보, 크기, 타임 스템프, 테이터 블록이다. 모드(mode)에는 inode가 속한 파일에 대한 정보와 파일에 대한 접근 권한 정보가 저장된다. EXT2 에서 inode는 단지 하나의 파일, 디렉토리, 심볼릭 링크, 블록 장치, 문자 장치 등만을 나타낸다. 소유자 정보 (Owner Information)는 파일과 디렉토리에 대한 소유자와 그룹에 대한 식별자를 나타낸다. 소유자 정보를 사용하여 파일이나 디렉 토리에 대한 접근 권한을 관리 할 수 있다. 크기(size)는 파일의 크기 정보를 저장한다. 파일에 대한 크기 정보는 바이트 단위로 저장된다. 타임 스템프 (timestamps)는 inode가 생성된 시간과 최종적으로 수정을 가한 시간에 대한 정보를 저장한다. 데이터 블록(Data Blocks)은 inode가 지정하고 있는 데이터 블록에 대한 포인터를 저장한다. 데이터블록에는 총 15개의 포인터가 존재하는데 이 포인터들 중에서 선행의 12개 포인터는 해당 inode가 지정하고 잇는 데이터에 대한 실제 블록에 대한 포인터 정보를 가지고 있다. 나머지 3개의 포인터는 높은 수준의 간접 연결에 대한 정보를 가지고 있다. inode 또한 실제로 존재하지는 않지만 시스템의 장치에 접근할 수 있는 특별한 장치 파일의 표현에도 사용된다. 리눅스 시스템의 /dev 디렉토리 안에 위치하는 파일들이 그것들이다.
◎ EXT2 슈퍼블록
슈퍼블록(Super Block)은 해당 파일 시스템의 기본적인 크기나 형태에 대한 정보를 저장한다. 파일 시스템 관리자는 이 슈퍼 블록의 정보를 이용하여 파일 시스템을 활용하고 유지할 수 있다. 슈퍼 블록에 저장되는 정보의 항목은 다음과 같다. 매직 넘버(Magic Number)는 마운트하는 소프트웨어에게 EXT2파일 시스템의 슈퍼 블록임을 확인 하게 하는 값이다. 개정 래벨(Revision Level)개정 래벨은 메이저 레벨과 마이너 래벨로 구성되어 있음 개정 래벨의 역할은 마운트 프로그램이 어떤 특정한 버전에서만 지원되는 기능이 이 파일 시스템에서 지원되는지에 대한 확인을 위해 사용된다. 또한 개정 레벨은 기능 호환성 항목을 포함하여 마운트 프로그램이 해당 파일 시스템에서 안정적으로 사용할 수 있는 기능이 무엇인지를 판단할 수 있는 기준을 제공한다.파운트 횟수(Mount Count)와 최대 마운트 횟수(Maximum Mount Count)의 두 가지 정보를 이용하여 파일 시스템 전체를 검사할 필요가 있는지를 확인할 수 있다. 마운트 횟수는 마운트가 실행될 때마다 1씩 그 값이 증가하여 만약 마운트 횟수가 최대 마운트 횟수에 도달하게 되면 시스템은 e2fsck를 실행하라는 메시지를 내보낸다.블록 그룹 번호(block Group Number)는 슈퍼 블록 복제본을 가지고 있는 블록 그룹의 번호를 나타낸다.블록 크기(Block size)는 파일 시스템의 블록 크기를 바이트 단위로 표시한다.그룹 당 블록수(Blocks per Grop)는 하나의 그룹에 속한 블록의 수를 나타낸다.이 수는 블록의 크기와 마찬가지로 파일 시스템을 만들 때 결정된다. 프리 블록(Free Block)파일 시스템 내부적으로 존재하는 프리 블록의 수를 나타낸다. Free inode 파일 시스템 내부적으로 존재하는 Free inode 수를 나타낸다. 첫 inode (Frist inode)파일 시스템 내부적으로 존재하는 첫번째 inode 번호를 나타낸다. 리눅스 시스템에서 첫 번째 inode는 "/"디렉토리에 디렉토리 엔트리를 나타낸다.
◎ EXT2 그룹 기술자(Group Descriptor)
그룹기술자는 블록 그룹에서 블록의 할당 상태를 나타내주는 비트맵으로 그 수는 블록의 수와 동일하다.블록 비트맵은 블록을 할당하거나 해제할 경우 참고 되는 정보다.그룹 기술자에 저장되는 항목은 블록비트맵, inode 비트맵, inode 테이블이다.블록 비트맵(Block Bitmap)은 블록 그룹에서 블록의 할당 상태를 나타내주는 비트맵으로 그 수는 블록의 수와 동일하다 블록 비트맵은 블록을 할당하거가 해제 할 경우 참고되는 정보다. inode 비트맵(inode Bitmap)은 블록 그룹에서 블록의 inode 할당상태를 나타내 주는 비트맵으로 그 수는 블록 비트맵과 같이 블록의 수와 동일하다. inode 비트맵은 inode를 할당하거나 해제할 경우 참고 되는 정보이다. inode 테이블(inode Table)은 블록 그룹의 inode 테이블에서 시작 블록을 나타내며 그 수는 블록의 수와 동일하다.이외에도 프리 블록 개수,프리 inode 개수,사용된 디렉토리 개수가 있다.그룹 기술자는 연속적으로 나타나서 전체적으로 하나의 그룹 기술자 테이블을 형성하게 된다. 각 블록 그룹에는 슈퍼블록 바로뒤에 그룹 기술자 테이블 전체가 위치 하게 된다.하지만 실제로 EXT2 파일 시스템에서 사용되는 블록 그룹이'0'인 첫 번째 복사본이다. 나머지는 예상치 못한 시스템의 손상에 대비해 시스템 복구를 위해 준비하고 있을 뿐이다.
◎ EXT2 디렉토리
EXT2파일 시스템에서 디렉토리는 파일에 대한 접근 경로를 생성하고 저장하는 특별한 의미의 파일로 취급된다.
디렉토리는 엔트리의 리스트로 나타내어 지며,엔트리 리스트에 저장되는 정보는 inode,이름길이,이름이다.
inode는 디렉토리 엔트리에 해당하는 inode를 나타낸다. inode 값은 블록 그룹의 inode 테이블에 저장되어 잇는 inode 배열에 대한 인텍스 값이다.이름 길이(Name Length)는 디렉토리 엔트리의 길이를 바이트로 나타낸것을 의미한다.이름(name)은 디렉토리의 이름을 나타낸다. EXT2파일 시스템에서 모든 디렉토리에서 처음 두 엔트리는 항상 "."과".."으로 시작한다 "."은 현재 디렉토리를 의미하며,".."은 상위 디렉토리인 부모 디렉토리를 의미한다.
@ EXT3
◎ EXT3로 포팅 동기
기존의 EXT2는 캐시에 저장되어 있는 테이터들을 디스크로 저장하는 도중 만약 시스템이 다운되거나 여러 가지 문제가 발생할 경우 파일 시스템이 손상되는 단점을 가지고 있었다. 이를 위해 EXT2는 fsck(File System Check)라는 파일 시스템 복구 기능을 제공한다. 하지만 이 복구 방법은 복구하는데 시간이 만이 소요되는 문제점을 가지고 있다. 파일 시스템의 크기가 크다면 복구하는데 오랜 시간이 걸릴 뿐만 아니라 복구하는 동안시스템을 사용하지 못한다. 또한 슈퍼 블록에 마운트 횟수를 저장하는 영역이 있어서 마운트 횟수가 일정횟수 이상이 될경우에도 자동으로 fsck를 실행하게 된다. EXT3파일 시스템은 이러한 단점을 보안하기 위해서 저널링(Journaling)이라는 기능을 추가 해서 소개된 파일 시스템이다. 시스템의 무결성은 물론 뛰어난 복구 기능까지 가질수 있게 되었다. 또한 EXT2는 기능적인 측면보다는 파일 시스템의 휴율과 퍼포먼스에 중점을 두고 디지안된 파일 시스템이다. 그래서 EXT2는 파일의 내용과 파일에 대한 허가권, 소유권, 생성과 접근 시간과 같은 메타 데이터를 동기화 하지 않는다. 이럴경우 방생하는 문제는 파일의 내용을 수정도중 시스템의 문제가 생길 경우 해당 파일의 메타 데이터와 내용이 일치 하지 않는 문제점이 발생한다. 이것을 보안한 것이 저널링 기술을 이용한 EXT3 파일 시스템이 대두한 것이다.
◎ 저널링(Journaling)기술이란?
데이터를 디스크에 쓰기 전에 로그에 데이터를 남겨 시스템의 비정상적인 셧다운에도 로그를 사용해 fsck보다 빠르고 안정적인 복구기능을 제공하는 기술이다. 기존 EXT2 파일 시스템의 경우에는 시스템이 동작을 멈추기 바로 직전에 파일 시스템에 어떤한 수정을 가하고 있었는지 전혀 알 수 없다. 때문에 복구하기 위해서는 fsck에 의해서 관리되는 슈퍼 블록, 비트맵, inode 등을 모두 검사해야 하기 때문에 시간이 오래 걸렸다. 저널링 기술은 사용한 파일 시스템의 경우 파일을 실제로 수정하기 전에 우선 로그에 그 수정된 내용을 저장하기 때문에 복구하기 위해서 로그만 검사하면된다. 로그를 바탕으로 다시 실제 파일 시스템에 수정 내용을 적용하기 때문에. 속도와 복구 안정성이 더욱 뛰어나다. 이런한 동작 수행을 리플레이(Replay)이라고 한다. 만약 해당 로그에 저장된 내용이 불안정할 경우에는 복구 자체를 포기하기 때문에 파일 시스템이 불안정한 상태로 되지 않는다. 파일 시스템에 수정을 가하기 전에 우선 로그에 저장하는 이러한 파일 시스템의 특성 때문에 Log-Ging 파일 시스템이라 부르기도 한다.
◎ 저널링 파일 시스템의 구조
저널링 파일 시스템의 구조는 로그 영역과 일반적인 파일 시스템 영역으로 나눌 수 있다. 로그 영역은 파일 시스템에 대한 수정을 위한 로그 데이터를 저장하기 위해 그리고 파일 시스템영역은 관리 영력과 테이터 영역으로 구성되어 있다. 저널링 파일 시스템은 일반 적인 파일 시스템에 로그 영역을 추가 한 구조이므로, 저널링 기능을 제거하고 일반적인 파일 시스템과 같이 사용할 수도 있다. 로그(Log)는 원형의 버퍼 구조 형태로 순환적으로 데이터들이 저장된다. 버퍼의 끝에 도달하면 데이터들은 다시 버퍼의 가장 앞쪽에 저장되는 구조이다. 로그상에는 테이터를 지정하는 포인터가 존재하여 테이터를 구분할 수 있다. 로그의 내용은 계속해서 수정되는 파일 시스템에 대한 로그 레코드가 추가되어 갈 뿐 일반적인 파일 시스템운영에서는 로그에 대한 읽기와 쓰기 같은 접근은 이루어 지지 않는다. 로그는 원형의 버퍼와 같은 구조로 되어 있기 때문에 시간이 지나면 포화 상태가 된다. 그러므로 로그 영역이 포화가 되면 가장 오래된 로그 레코드 순으로 삭제하는 동작을 수행해야 한다. 삭제의 수행은 실제 파일 시스템에 적용되 레코드들이 포함된다. 로그 레코드에 대한 삭제를 위한 전용 스레드에 의존한다. 적잘한 관리가 이루어지지 않으면 로그의 빈공간을 찾아 기다리게 되어 I/O수행이 느려질 수도 있다. 트랜잭션은 저널링 파일 시스템에서 로그에 내용을 저장하는 수행단위다. 파일 시스템의 일정한 조작에 대한 파일 시스템 내부적인 일련의 동작 수행이다. 저널링 파일 시스템은 디스크의 빈 블록 비트맵이나 inode가 포함된 블록에 대한 수정을 하기 전에 반드시 로그에 대한 트랜잭션을 수행한다.
트랜잭션의 수행을 단계별로 보면
트랜잭션 할당 단계 - 수행할 파일 작성 트랜잭션에 대한 ID를 획득하기 위해서 새로운 트랜잭션 할당을 수행한다.
트랜잭션 추가 단계 - 디스크상의 블록을 변경하기 전에 반드시 로그에 기록해야하기 때문에 트랜잭션별로 할당되어 있는 관리 데이터와 링크되어 메모리에 저장된다. 이 단계는 아직 로그에 저장된 상태는 아니다. 단지 트랜잭션에 로컬로 저장된 상태이다.
트랜잭션 위탁 단계 - 트랜잭션 추가 단계에서 만들어진 트랜잭션의 내용을 로그에 저장하는 동작을 수행한다. 위탁과 함께 롤백이라는 동작도 수행되는데 롤백은 트랜잭션 중에서 수행한 수정을 취소할 경우 수행되는 것으로 에러가 발생했을 경우에도 수행된다.
1.2 파일 시스템의 종류
리눅스는 다양한 파일 시스템을 지원한다. ext2, ext3, minix, xiats, umsdos, hpfs OS/2, isofs, CD-ROM, msdos, nfs, sysv 등이 있다. 이 파일 시스템들은 각각 다음과 같은 특징을 가지고 있다.
◎ minix
과거 미닉스에서 사용되어졌던 파일 시스템으로 리눅스 파일 시스템 대부분의 기능을 제공하는 파일 시스템이다.
◎ xiafs
미닉스의 제한이 이었던 파일 이름과 파일 시스템에 대한 제한을 보안한 미닉스 파일 시스템의 수정 버전이다. 이 파일 시스템에는 추가된 새로운 기능은 없다. 한때 ext2와 함께 사용되었던 파일 시스템이었으나 현재는 많이 사용되지 않는다.
◎ msdos
도스의 FAT파일 시스템과 호환을 지원하는 파일 시스템이다. 또한 msdos와 OS/2와 윈도NT FAT파일 시스템과도 호환된다
◎ hpfs OS/2
OS/2의 파일 시스템이다. 하지만 현재는 읽기 전용인 파일 시스템으로 파일 시스템에 대한 읽기만이 가능하다.
◎ isofs CD-ROM
ISO기준을 따르는 표준 CD-ROM의 파일 시스템이다. isofs CD-ROM은 CD-ROM에 좀더 긴 파일명을 사용할 수 있도록 확장된 록 브릿지가 기본으로 지원된다.
◎ umsdos
MS-DOS 파일 시스템을 리눅스 상에서도 긴 파일명과 소유자, 접근 허가, 링크와 장치 파일 등을 사용할 수 있도록 확장한 파일 시스템이다. umsdos는 일반적으로 DOS 파일 시스쳄이 마치 리눅스 파일 시스템인 것처럼 보이도록 하는 기능을 제공하므로 따로 리눅스를 위한 파티션은 필요하지 않는다.
◎ nfs
네트워크 파일 시스템이다. 네트워크 상의 많은 컴퓨터들이 각각의 시스템에 가진 파일들을 서로 쉽게 공유하기 위해 제공되는 상호간의 파일 시스템 공유 파일시스템이다.
◎ sysv
System V/386, Xenix 그리고 Coherent 파일 시스템이다.
◎ ext
리눅스 초기에 사용되던 파일 시스템으로 호환성이 없던 ext2의 구 버전이다. 지금은 대부분 하지 않는다.
◎ ext2
리눅스는 미닉스 파일시스템을 처음으로 사용했다. 그러나 여러가지 제약 조건과 성능이 뛰어나지 못하였다. 이를 보안 하기 위해 EXT(Extened File System)이 제시 되었다. 이 파일 시스템은 리눅스 전용으로 설계되어 1992년 4월에 소개 되었다. 또한 1993년에는 2차 확장 파일 시스템인 EXT2가 ext의 여러가지 문제점을 보안하여 나왔다.
2. 디렉토리 구조
리눅스의 기본 디렉토리 구조는 트리 구조를 하고 있다. 그리고 디렉토리 구조는 기본구조를 제외하고 사용자의 설정에 따라 달라질 수 있다. 리눅스의 디렉토리 구조는 파일 시스템 표준안 (FSSTND, Linux File System Standard)을 기반으로 하는 것이 바람직하다. 파일 시스템 표준안은 리눅스상에서 어떻게 파일 시스템을 구성할 것인지에 대한 표준안을 제정하기 위해서 만들어진 문서이다. 표준안을 무조건 따르라는 강제력은 없지만 파일의 위치가 일관된게 유지되어 프로그램 작성, 포딩은 물론 시스템 관리도 쉬워지는 이점이 있기에 배포판들은 이 표준안을 지키고 있다.
2.1 디렉토리 기능 및 내용
대부분의 리눅스는 FHS(Filesystem Hierarchy Standard) 표준 파일 시스템 계층을 사용하고 같은 목적의 파일들은 같은 장소에 일관되게 모아 관리하므로 시스템에 자원이나 프로그램들을 쉽게 찾을 수 있다.
◎ /
루트 디렉토리라고 부르는 리눅스 시스템에서 가장 최상위 디렉토리며 디렉토리 구조의 시작이다. 시스템관리자의 홈인 /root와는 다르다. / 디렉토리 아래에 /bin, /etc, /boot, /mnt, /usr, /lib, /home, /dev, /proc, /var, /sbin, /tmp, /root, /lost+found 등의 디렉토리가 존재한다.
◎ /bin
binaries의 약어로 이진 파일들이며 리눅스에서 가장 기본이 되는 명령어들이 모여 있는 디렉토리이다. 디렉토리의 파일들을 보면 대부분이 실행 파일임을 알 수 있다. 또한 이곳에는 부팅에 필요한 명령어들이 위치하여 부팅후에 시스템의 계정 사용자들이 사용할 수 있는 일반적인 명령어들도 위치 하고 있다.
◎ /etc
이 디렉토리는 리눅스 시스템에 관한 각종 환경 설정에 연관된 파일들과 디렉토리들을 가진 디렉토리이다. 대부분의 이 디렉토리의 파일들은 시스템 관리자에 의해 관리되는 파일들이다. 웹 서버 환경 설정, 시스템 계정 사용자 정보, 패스 워드 관리, 시스템의 파일 시스템 관리 파일, 여러가지 시스템 보안에 관련된 파일들, 시스템 초기화 설정 파일, TCP/IP 설정 파일 등 시스쳄 전반에 걸친 거의 모든 환경 설정 파일들이 모두 이 디렉토리에 있다.
◎ /etc/rc.d
시스템의 부팅과 시스템 실행 레벨 변경시에 실행되는 스크립트들이 저장되어 있는 디렉토리이다. 리눅스의 6가지 실행 레벨로 각각의 해당 디렉토리가 있다.
◎ /etc/shadow
파일에서 패스워드 부분만을 따로 저장하는 파일이다. 이 파일에 패스워드는 암호화 되어 셰도우 패스워드 형태로 저장되어 있으며 시스템 관리자만이 접근할 수 있기 때문에 크래킹 등에 대한 우려가 상대적으로 적다.
◎ /etc/group
시스템의 그룹에 대한 정보를 저장하고 있는 파일이다.
◎ /etc/inittab
init를 설정하는 파일이다.
◎ /etc/issue, /etc/issue.net
getty에 의해서 로그인을 위한 프롬프트가 뜨기 전에 출력되는 메시지를 설정하는 파일이다. 리눅스 시스템으로 접속할 경우 가장 처음으로 볼 수 있는 메시지이다. 보통 시스템에 대한 설명과 각종 환영 메시지를 전달하기 위해서 사용된다. issue 파일의 내용은 보통 시스템의 터미널에서 볼 수 있다. 그리고 /etc/issue.net 파일의 내용은 리모트상에서 시스템으로 접속할 경우 볼 수 있다.
◎ /etc/motd
'Message of the day'의 약자로 시스템으로의 접속에 성공할 경우 쉘이 뜨기 전에 출력되는 메세지를 설정하는 파일이다.
◎ /etc/profile, /etc/csh.login, /etc/csh.cshrc
시스템이 시작될 때 사용자가 로그인을 할 때 본쉘이나 C쉘에 의해서 실행되는 스크립트 파일이다. 일반적으로 사용자들에 대한 기본 환경 설정에 사용된다.
◎ /etc/securetty
시스템 관리자가 시스템에 로그인할 수 있는 안전한 터미널에 대한 정보가 저장되어 있다. 일반적으로 가상콘솔이 설정되어 있다. 이것은 네트워크를 통해 시스템으로 침입해 시스템 관리자의 권한을 획득하는 크랙킹을 막기 위해서이다.
◎ /ete/shell
시스템에서 안정적으로 사용할 수 있는 쉘에 대한 정보를 저장하고 있는 파일이다. 만약 chsh명령을 사용해 사용중인 쉘을 바꾸려면 이 파일에 저장되어 있는 쉘중에 선택해야한다. 또한 ftp데몬의 경우 사용자의 쉘을 검사하여 /etc/shell에 저장되어 있지 않은 쉘을 사용한다면 로그인을 허용하지 않는다.
◎ /boot
리눅스 커널이 저장되어 있는 디렉토리로서 각종 리눅스 boot에 필요한 booting지원 파일들이 저장되어 있는 디렉토리이다.
◎ /mnt
외부 장치인 플로피 디스크, 시디롬, 삼바등을 마운트하기 위해서 제공되는 디렉토리이다. 임시로 사용되는 디렉토리이므로 프로그램들은 /mnt에 어떤 파일 시스템이 마운트 되었는지 자동으로 인식하지 않는다. 또한 /mnt는 보통 여러 개의 하위 디렉토리로 나누어 사용되고, 평소에는 각 디렉토리들은 비어 있다.
◎ /usr
시스템에 사용되는 각종 프로그램들이 설치되는 디렉토리이다. 프로그램과 관련된 명령어 미치 라이브러리들이 이 디렉토리에 위치 하게 된다. 또한 X 시스템관련 파일들과 리눅스 커널 소스, 각종 C언어 과련 해더 파일 등도 이 디렉토리 안에 저장되어 있다.
◎ /usr/bin
리눅스 시스템에서 사용되는 각종 프로그램들이 저장되어 있으며 /bin 디텍토리에 없는 다양한 실행 파일들이 저장되어 있는 디렉토리이다.
◎ /usr/X11R6
X 윈도우 시스템에 사용되는 모든 파일들이 이 디렉토리 안에 저장된다. 이 디렉토리는 X 윈도우 시스템의 개발과 설치를 좀더 쉽게 하기 위해서 전체 시스템 디렉토리 구조에 통합되지 않고 독자적인 구조를 가진다.
◎ /usr/etc
/etc 디렉토리에는 각종 환경 설정 파일들이 있듯이 이곳에도 여러 가지 시스템 환경 설정 파일들이 저장되어 있다./usr/etc의 파일들은 /etc디렉토리 안의 파일들과 달리 꼭 팔요한 파일들은 아니다.
◎ /usr/sbin
시스템 관리자를 위한 명령어들이 저장되는 디렉토리이다. 보통 이 디렉토리의 명령어들은 루트 파일 시스템에는 필요가 없는 서버 프로그램들이 저장된다.
◎ /usr/include
C언어 관련 해더 파일드이 저장되어 있는 디렉토리이다.
◎ /usr/lib
각종 라이브러리들이 저장되어 있는 디렉토리이다. 만약 사용자가 직접 작성한 프로그램을 컴파일한다면 해당 프로그램은 /usr/lib 디렉토리의 파일에 link된다. 또한 이 라이브러리 안에 실행 코드가 필요하다면 /lib 디렉토리를 참조한다.
◎ /usr/local
시스템의 특정적인 프로그램들이 저장되는 디렉토리이다.특정적인이란 시스템 관리자에 의해서 따로 설치되는 프로그램들을 말한다.
◎ /usr/man
man페이지의 실제 내용들이 저장되어 있는 디렉토리이다. 디렉토리를 살펴보면 man1, man2, man3, 등과 같이 여러개의 디렉토리들로 나누어져 있는 모습을 볼수 있다.man1 디렉토리는 섹션 1의 man 페이지 소스를 위한 디렉토리를 말한다.
◎ /usr/src
시스템에서 사용하는 각종 프로그램들의 컴파일되지 않은 소스 파일들이 저장되어 있다./usr/src/linux 디렉토리가 바로 리눅스의 커널소스를 저장하고 있는 디렉토리이기 때문이다.
◎ /usr/X386
/usr/X11R6 디렉토리와 유사한 티렉토리로 X11 Release 5를 위한 디렉토리이다.
◎ /usr/info
GNU info문서들을 저장하고 있는 디렉토리이다.
◎ /usr/doc
각종 문서들이 저장되어 있는 디렉토리이다
◎ /lib
프로그램들의 각종 라이브러리들이 존재한다. 대부분 공유 라이브러리로 더 편하게 사용할 수 있으며,파일의 크기를 줄여서 실행할 때 불러 사용하게 된다. /lib/modules 디렉토리에는 커널로 로딩 사능한 커널 모듀들이 저장되어 있다.
◎ /home
시스템 계정 사용자들의 홈 디렉토리와 ftp,www,등과 같은 서비스 디렉토리들이 저장된다. 이곳의 디렉토리와 파일들은 시스템에서 상용되지 않는다. 단지 리모트상에서 시스템으로 접속하는 사용자들을 위한 공간이다.
◎ /dev
디렉토리에는 시스템의 각종 디바이스들에 접근하기 위한 디바이스 드라이버들이 자장되어 있는 디렉토리이다. 이 디렉토리는 물리적인 용량은 갖지 않는 가상 디렉토리이다. 대표적으로는 하드 드라이브,플로피, 씨디롬 그리고 루프팩장치 등이 존재한다. 리눅스 시스템은 윈도우와 달리 각종 디바이스 장치들을 하나의 파일로 취급한다. 따라서 시스템은 각각의 장치들로부터의 정보를 /dev 디렉토리에 존해하는 해당 장치 파일로 부터 가지고 온다.
◎ /dev/console
시스템의 콘솔이다.
◎ /dev/hda
시스템의 하드 디스크이다. 여기서 /dev/hda는 첫 번째 하드 디스크를 의미하는 것이다./dev/hda1은 첫번째 하드 디스크의 첫번째파티션,/dev/hda2 두 번째 파티션등을 의미한다.만약 시스템에 여러 개의 하드 디스크가 부착되어 있다면 /dev/hdb,/dev/hdc 등의 파일도 /dev/hdb1,/dev/hdb2등과 같은형식으로 저장되어 있다.
◎ /dev/lp
시스템의 병렬 포트 장치들이다.
◎ /dev/null
이 디렉토리는 블랙홀이라고도 부르는 특별한 장치이다. 이 장치로 데이터 등을 보내면 모두 폐기되므로 주의해야 할 것이다.
◎ /dev/pty
시스템으로의 원격 접속을 위한 'pesudo-terminal'들이다. 만약 시스템 계정 사용자드이 원격지에서 시스템으로 텔넷등을 이용하여 시스쳄에 접속을 시도한다면 이들은 /dev/pty 디바이스들을 사용하게 되는 것이다.
◎ /dev/sda
SCSI 장치들이다. 만약 시스템에 스카시 하드 디스크를 장착했다면 시스템은 /dev/sda파일에서 정보를 얻어 장치에 접근할 것이다.
◎ /dev/ttyS,/dev/cuaS
/dev/ttyS은 직렬포트 장치들이고, /dev/cauS는 Callout. 장치이다.
◎ /dev/tty
시스템의 가상콘솔들이다. 이 가상 콘솔의 기능은 하나의 화면에 여러 개의 콘솔들을 만든다. 만약 사용자가 시스템 앞에 앉을 수 있다면,Alt + F1, Alt + F2등을 이용하여 리눅스에 제공한 여러개의 가상 콘솔을 직접 볼수 있을 것이다.
◎/proc
시스템의 각종 프로세서, 프로그램 정보 그리고 하드웨어적인 정보들이 저장된다. 이 티렉토리는 가상 파일 시스템으로 가상 파일 /dev와 마찬가지로 하드 디스크상에 물리적인 용량을 갖지 않는다. 즉 디렉토리에 존재하는 파일들은 실제 하드 디스크에 저장되지 않고 커널에 의해 메모리에 적재 된다. 디렉토리 안의 파일들은 현재의 시스템 설정을 보여 주는 것이다.
◎ /proc/1
프로세스 번호가 1인 프로세스에 대한 정보를 저장하는 디렉토리이다. 다른 프로세스들도 자신의 고유한 프로세스 번호의 디렉토리를 가진다는 것을 의미한다.
◎ /proc/cpuinfo
프로세서의정보를 저장하고 있는 파일이다. cpu의 타입, 모델, 제조회사, 각종 성능 등의 정보를 제공하여 준다.
◎ /proc/devices
현재 시스템 커널에 설정되어 있는 장치들에 대한 정보를 저장하고 있다.파일등의 정보로 모든 시스템의 장치 목록에 대한 정보를 얻을 수 있다.
◎ /proc/dma
현재 시스템에서 사용하고 있는 DMA 채널에 대한 정보를 저장하고 있다.
◎ /proc/filesystem
시스템에 설정되어 있는 파일 시스템에 대한 정보를 저장하고 잇는 파일이다.
◎ /proc/interrupts
현재 사용중인 인터럽트와 인터럽트의 사용량에 대한 정보를 저장하고 있는 파일이다.
◎ /proc/ioports
현재 사용중인 I/O 포트에 대한 정보를 저장하고 있는 파일이다.
◎ /proc/kcore
현재 시스템에서 사용중인 메로리의 실제 이미지이다. 이 파일은 실제 메모리의 내용을 모두 가진 것처럼 보이지만 프로그램이 필요로 하는 부분의 이미지만을 필요할 때 만들어 제공한다.
◎ /proc/kmsg
커널에 의해서 출력되는 메시지들을 저장하고 있는 파일이다.이것은 또한 syslog파일에도 저장된다.
◎ /proc/loadavg
현재 시스템의 평균 부하량(Load Average)에 대한 정보를 저장하고 있는 파일이다.이 파일을 통해서 시스템이 현재 수행해야 하는 일이 얼마나 많은지를 알려주는 3가지 지표에 대한 정보를 얻을 수 있다.
◎ /proc/ksyms
시스템 커널이 사용하고 있는 심볼들에 대한 정보를 저장하고 있는 파일이다.
◎ /proc/meminfo
현재 시스템이 사용중인 메모리의 사용량을 저장하고 있는 파일이다./proc/meminfo에서 실제 메모리는 물론 가상 메모리에 대한 정보도 얻으 수 있다.
◎ /proc/self
이 디렉토리를 보고 있는 프로그램 자시의 프로세스 디렉토리로 링크도어 있다. 만약 서로 다른 2개의 프로세스가 /proc 디렉토리를 보고 있다면 두 프로세스는 서로 다른 링크를 보게 된다. 이를 통해서 프로그램들이 자신의 프로세스 디렉토리를 쉽게 찾을 수 있다.
◎ /proc/stat
시스템의 현재 상태에 대한 다양한 정보를 저장하고 있는 파일이다.
◎ /proc/uptime
시스템이 얼마나 오래 동작했는지에 대한 정보를 저장하고 있는 파일이다.
◎ /proc/version
시스템이 현재 사용중인 커널 버전에 대한 정보를 저장하고 있는 파일이다.
◎ var
시스템에서 사용되는 동적인 파일들이 저장된다. 각종 시스템 로그 파일, 사용자 로그인에 대한 보안기록,메일서버를 운영한다면 사용자들에게 전송된 메일들을 임시로 저장한다.
◎ /var/cache
포멧된 메뉴얼 페이지들이 잠시 대기(Cache)하기 위한 디렉토리이다.
◎ /var/lib
시스테이 동작하면서 계속 수정되고 변경되는 파일들을 위한 디렉토리이다.
◎ /var/local
/usr/local 디렉토리에 설치된 프로그램들의 각종 데이터들이 저장되는 디렉토리이다.
◎ /var/lock
잠금 파일들이 저장되는 디렉토리이다.프로그램들이 특정한 장치나 파일들을 프로그램 자신이 독점적으로 사용하려 할 때 /var/lock 디렉토리에 잠금 파일을 만들어 사용하게 된다. 그렇기 때문에 다른 프로그램들은 장치나 파일을 사용하기 전에 우선 이 디렉토리의 내용을 조사하여 해당 장치나 파일들이 사용중인지 확인하게 된다.
◎ /var/log
프로그램들의 로그 파일들이 저장되는 디렉토리이다. 이 디렉토리에 wtmp파일은 login 파일과 messages파일은 syslog의 로그 파일이다.wtmp는 시스쳄의 모든 사용자 로그인과 로그 아웃에 대한 정보르 저장하고 있는 파일이고,messages는 커널과 시스템의 모든 출력 메세지를 저장하고 있는 파일이다./var/log 안의 파일들은 시스템의 사용량에 따라 그 크기가 무한대로 증가할 있으므로 정기적으로 파이들을 삭제하는 등 디렉토리 관리가 필요하다
◎ /var/run
시스템의 현재 정보들을 저장하고 있는 디렉토리이다./var/run/xinetd.pid 파일의 경우 현재 사용중인 xinetd 데몬의 프로세스 번호를 저장하고 있다.
◎ /var/spool
메일이나 뉴스, 프린터 큐 등고 같은 시스템상에서 대기 상태에 있는 작업들을 위한 디렉토리이다. 각각의 대기 작업들은 모두 /var/spool 아래 고유의 디렉토리에 위치하게 된다. 예를 들어 시스템의 계정 사용자들의 메일은 /var/spool/mail 에 저장된다.
◎ /var/tmp
/tmp에 저장된 임시 파일들중에 오래 보관되어야 할 임시 파일들이 저장되는 디렉토리이다.
◎ /tmp
이름에도 알 수 있듯이 임시 파일들을 위한 디렉토리이다.
◎ /root
시스템 관리자의 홈 디렉토리이다
파일 시스템이란 운영제제가 파일을 시스템의 디스크상에 구성하는 방식을 말한다. 운영체제는 시스템의 디스크 파티션상에 파일들을 연속적이고 일정한 규칙을 가지고 저장하는데 파일 시스템은 이러한 규칙들의 방식을 제시하는 역할을 한다. 또한 파일 시스템은 시스템 디스크나 파티션 그라고 파일 시스템의 형식을 말할 경우에도 쓰일 수 있다. 파티션과 파일 시스템은 다른 것이다. 파일 시스템은 파티션을 구성해 주는 역할을 한다. 파일 시스템을 포함하지 못한 파티션은 파일 시스템을 사용될 수 있도록 초기화되고 파일 정보를 기록하기 위한 형식을 만들어야 한다. 이 과정을 거쳐야 파티션은 파일 시스템으로 사용될 수 있다.
1.1 파일 시스템의 구조
◎ 슈퍼블록(super block)
슈퍼블록(Super Block)은 파일 시스템에 의존하는 정보를 가지며 파일 시스템의 크기 등과 같은 파일 시스템의 전체 적인 정보를 가지고 있다.
◎ 아이노드(inode)
아이노드(inode)는 파일의 이름을 제외한 해당 파일의 모든 정보를 가지고 있다. 파일 이름은 inode 번호와 함께 디렉토리 안에 저장된다.
◎ 테이터 블록(data block)
데이터 블록(data block)은 inode에 포함된다. inode가 몇 개의 데이터 블록을 포함하고 있다. 데이터 블록은 파일에서 테이터를 저장하기 위해서 사용된다.
◎ 디렉토리 블록(Directory Block)
파일 이름과 inode번호를 저장하기 위해서 사용된다.
◎ 간접 블록(Indirection Block)
간접블록은 추가적인 테이터 블록을 위한 포인터들이 사용할 동작으로 할당되는 공간이다. 실제적으로 inode는 적은 수의 테이터 블록을 가지고 있다. 그러므로 더 많은 데이터 블록이 필요할 경우 이를 지정할 포인터가 필요하게 되는데 그때 포인터들이 사용할 동적인 블록이 간접 블록이다.
◎ 홀 (Hole)
홀은 inode나 간접 블록안의 테이터 블록의 주소로 특별한 값을 저장한다.홀은 파일 시스템에 의해서 파일안에 자리하게 된다. 하지만 이 홀을 위해 실질적으로 디스크 상에 공간은 할당되지 않는다. 단지 0바이트가 파일 안에서 특정 공간을 차지하고 있더라고 가정하는 것이다.
@ EXT2
◎ EXT2 아이노드
inode는 파일시스템의 가장 기본되는 단위이다. 또한 각각을 구분할 수 있는 고유 번호를 가지고 파일의 테이터가 어느 블록에 어느 위치에 저장되어 있는지, 파일에 대한 접근 권한, 파일의 최종 수정시간 그리고 파일의 종류등의 정보를 inode 테이블에 저장한다. 저장되는 정보는 모드, 소유자 정보, 크기, 타임 스템프, 테이터 블록이다. 모드(mode)에는 inode가 속한 파일에 대한 정보와 파일에 대한 접근 권한 정보가 저장된다. EXT2 에서 inode는 단지 하나의 파일, 디렉토리, 심볼릭 링크, 블록 장치, 문자 장치 등만을 나타낸다. 소유자 정보 (Owner Information)는 파일과 디렉토리에 대한 소유자와 그룹에 대한 식별자를 나타낸다. 소유자 정보를 사용하여 파일이나 디렉 토리에 대한 접근 권한을 관리 할 수 있다. 크기(size)는 파일의 크기 정보를 저장한다. 파일에 대한 크기 정보는 바이트 단위로 저장된다. 타임 스템프 (timestamps)는 inode가 생성된 시간과 최종적으로 수정을 가한 시간에 대한 정보를 저장한다. 데이터 블록(Data Blocks)은 inode가 지정하고 있는 데이터 블록에 대한 포인터를 저장한다. 데이터블록에는 총 15개의 포인터가 존재하는데 이 포인터들 중에서 선행의 12개 포인터는 해당 inode가 지정하고 잇는 데이터에 대한 실제 블록에 대한 포인터 정보를 가지고 있다. 나머지 3개의 포인터는 높은 수준의 간접 연결에 대한 정보를 가지고 있다. inode 또한 실제로 존재하지는 않지만 시스템의 장치에 접근할 수 있는 특별한 장치 파일의 표현에도 사용된다. 리눅스 시스템의 /dev 디렉토리 안에 위치하는 파일들이 그것들이다.
◎ EXT2 슈퍼블록
슈퍼블록(Super Block)은 해당 파일 시스템의 기본적인 크기나 형태에 대한 정보를 저장한다. 파일 시스템 관리자는 이 슈퍼 블록의 정보를 이용하여 파일 시스템을 활용하고 유지할 수 있다. 슈퍼 블록에 저장되는 정보의 항목은 다음과 같다. 매직 넘버(Magic Number)는 마운트하는 소프트웨어에게 EXT2파일 시스템의 슈퍼 블록임을 확인 하게 하는 값이다. 개정 래벨(Revision Level)개정 래벨은 메이저 레벨과 마이너 래벨로 구성되어 있음 개정 래벨의 역할은 마운트 프로그램이 어떤 특정한 버전에서만 지원되는 기능이 이 파일 시스템에서 지원되는지에 대한 확인을 위해 사용된다. 또한 개정 레벨은 기능 호환성 항목을 포함하여 마운트 프로그램이 해당 파일 시스템에서 안정적으로 사용할 수 있는 기능이 무엇인지를 판단할 수 있는 기준을 제공한다.파운트 횟수(Mount Count)와 최대 마운트 횟수(Maximum Mount Count)의 두 가지 정보를 이용하여 파일 시스템 전체를 검사할 필요가 있는지를 확인할 수 있다. 마운트 횟수는 마운트가 실행될 때마다 1씩 그 값이 증가하여 만약 마운트 횟수가 최대 마운트 횟수에 도달하게 되면 시스템은 e2fsck를 실행하라는 메시지를 내보낸다.블록 그룹 번호(block Group Number)는 슈퍼 블록 복제본을 가지고 있는 블록 그룹의 번호를 나타낸다.블록 크기(Block size)는 파일 시스템의 블록 크기를 바이트 단위로 표시한다.그룹 당 블록수(Blocks per Grop)는 하나의 그룹에 속한 블록의 수를 나타낸다.이 수는 블록의 크기와 마찬가지로 파일 시스템을 만들 때 결정된다. 프리 블록(Free Block)파일 시스템 내부적으로 존재하는 프리 블록의 수를 나타낸다. Free inode 파일 시스템 내부적으로 존재하는 Free inode 수를 나타낸다. 첫 inode (Frist inode)파일 시스템 내부적으로 존재하는 첫번째 inode 번호를 나타낸다. 리눅스 시스템에서 첫 번째 inode는 "/"디렉토리에 디렉토리 엔트리를 나타낸다.
◎ EXT2 그룹 기술자(Group Descriptor)
그룹기술자는 블록 그룹에서 블록의 할당 상태를 나타내주는 비트맵으로 그 수는 블록의 수와 동일하다.블록 비트맵은 블록을 할당하거나 해제할 경우 참고 되는 정보다.그룹 기술자에 저장되는 항목은 블록비트맵, inode 비트맵, inode 테이블이다.블록 비트맵(Block Bitmap)은 블록 그룹에서 블록의 할당 상태를 나타내주는 비트맵으로 그 수는 블록의 수와 동일하다 블록 비트맵은 블록을 할당하거가 해제 할 경우 참고되는 정보다. inode 비트맵(inode Bitmap)은 블록 그룹에서 블록의 inode 할당상태를 나타내 주는 비트맵으로 그 수는 블록 비트맵과 같이 블록의 수와 동일하다. inode 비트맵은 inode를 할당하거나 해제할 경우 참고 되는 정보이다. inode 테이블(inode Table)은 블록 그룹의 inode 테이블에서 시작 블록을 나타내며 그 수는 블록의 수와 동일하다.이외에도 프리 블록 개수,프리 inode 개수,사용된 디렉토리 개수가 있다.그룹 기술자는 연속적으로 나타나서 전체적으로 하나의 그룹 기술자 테이블을 형성하게 된다. 각 블록 그룹에는 슈퍼블록 바로뒤에 그룹 기술자 테이블 전체가 위치 하게 된다.하지만 실제로 EXT2 파일 시스템에서 사용되는 블록 그룹이'0'인 첫 번째 복사본이다. 나머지는 예상치 못한 시스템의 손상에 대비해 시스템 복구를 위해 준비하고 있을 뿐이다.
◎ EXT2 디렉토리
EXT2파일 시스템에서 디렉토리는 파일에 대한 접근 경로를 생성하고 저장하는 특별한 의미의 파일로 취급된다.
디렉토리는 엔트리의 리스트로 나타내어 지며,엔트리 리스트에 저장되는 정보는 inode,이름길이,이름이다.
inode는 디렉토리 엔트리에 해당하는 inode를 나타낸다. inode 값은 블록 그룹의 inode 테이블에 저장되어 잇는 inode 배열에 대한 인텍스 값이다.이름 길이(Name Length)는 디렉토리 엔트리의 길이를 바이트로 나타낸것을 의미한다.이름(name)은 디렉토리의 이름을 나타낸다. EXT2파일 시스템에서 모든 디렉토리에서 처음 두 엔트리는 항상 "."과".."으로 시작한다 "."은 현재 디렉토리를 의미하며,".."은 상위 디렉토리인 부모 디렉토리를 의미한다.
@ EXT3
◎ EXT3로 포팅 동기
기존의 EXT2는 캐시에 저장되어 있는 테이터들을 디스크로 저장하는 도중 만약 시스템이 다운되거나 여러 가지 문제가 발생할 경우 파일 시스템이 손상되는 단점을 가지고 있었다. 이를 위해 EXT2는 fsck(File System Check)라는 파일 시스템 복구 기능을 제공한다. 하지만 이 복구 방법은 복구하는데 시간이 만이 소요되는 문제점을 가지고 있다. 파일 시스템의 크기가 크다면 복구하는데 오랜 시간이 걸릴 뿐만 아니라 복구하는 동안시스템을 사용하지 못한다. 또한 슈퍼 블록에 마운트 횟수를 저장하는 영역이 있어서 마운트 횟수가 일정횟수 이상이 될경우에도 자동으로 fsck를 실행하게 된다. EXT3파일 시스템은 이러한 단점을 보안하기 위해서 저널링(Journaling)이라는 기능을 추가 해서 소개된 파일 시스템이다. 시스템의 무결성은 물론 뛰어난 복구 기능까지 가질수 있게 되었다. 또한 EXT2는 기능적인 측면보다는 파일 시스템의 휴율과 퍼포먼스에 중점을 두고 디지안된 파일 시스템이다. 그래서 EXT2는 파일의 내용과 파일에 대한 허가권, 소유권, 생성과 접근 시간과 같은 메타 데이터를 동기화 하지 않는다. 이럴경우 방생하는 문제는 파일의 내용을 수정도중 시스템의 문제가 생길 경우 해당 파일의 메타 데이터와 내용이 일치 하지 않는 문제점이 발생한다. 이것을 보안한 것이 저널링 기술을 이용한 EXT3 파일 시스템이 대두한 것이다.
◎ 저널링(Journaling)기술이란?
데이터를 디스크에 쓰기 전에 로그에 데이터를 남겨 시스템의 비정상적인 셧다운에도 로그를 사용해 fsck보다 빠르고 안정적인 복구기능을 제공하는 기술이다. 기존 EXT2 파일 시스템의 경우에는 시스템이 동작을 멈추기 바로 직전에 파일 시스템에 어떤한 수정을 가하고 있었는지 전혀 알 수 없다. 때문에 복구하기 위해서는 fsck에 의해서 관리되는 슈퍼 블록, 비트맵, inode 등을 모두 검사해야 하기 때문에 시간이 오래 걸렸다. 저널링 기술은 사용한 파일 시스템의 경우 파일을 실제로 수정하기 전에 우선 로그에 그 수정된 내용을 저장하기 때문에 복구하기 위해서 로그만 검사하면된다. 로그를 바탕으로 다시 실제 파일 시스템에 수정 내용을 적용하기 때문에. 속도와 복구 안정성이 더욱 뛰어나다. 이런한 동작 수행을 리플레이(Replay)이라고 한다. 만약 해당 로그에 저장된 내용이 불안정할 경우에는 복구 자체를 포기하기 때문에 파일 시스템이 불안정한 상태로 되지 않는다. 파일 시스템에 수정을 가하기 전에 우선 로그에 저장하는 이러한 파일 시스템의 특성 때문에 Log-Ging 파일 시스템이라 부르기도 한다.
◎ 저널링 파일 시스템의 구조
저널링 파일 시스템의 구조는 로그 영역과 일반적인 파일 시스템 영역으로 나눌 수 있다. 로그 영역은 파일 시스템에 대한 수정을 위한 로그 데이터를 저장하기 위해 그리고 파일 시스템영역은 관리 영력과 테이터 영역으로 구성되어 있다. 저널링 파일 시스템은 일반 적인 파일 시스템에 로그 영역을 추가 한 구조이므로, 저널링 기능을 제거하고 일반적인 파일 시스템과 같이 사용할 수도 있다. 로그(Log)는 원형의 버퍼 구조 형태로 순환적으로 데이터들이 저장된다. 버퍼의 끝에 도달하면 데이터들은 다시 버퍼의 가장 앞쪽에 저장되는 구조이다. 로그상에는 테이터를 지정하는 포인터가 존재하여 테이터를 구분할 수 있다. 로그의 내용은 계속해서 수정되는 파일 시스템에 대한 로그 레코드가 추가되어 갈 뿐 일반적인 파일 시스템운영에서는 로그에 대한 읽기와 쓰기 같은 접근은 이루어 지지 않는다. 로그는 원형의 버퍼와 같은 구조로 되어 있기 때문에 시간이 지나면 포화 상태가 된다. 그러므로 로그 영역이 포화가 되면 가장 오래된 로그 레코드 순으로 삭제하는 동작을 수행해야 한다. 삭제의 수행은 실제 파일 시스템에 적용되 레코드들이 포함된다. 로그 레코드에 대한 삭제를 위한 전용 스레드에 의존한다. 적잘한 관리가 이루어지지 않으면 로그의 빈공간을 찾아 기다리게 되어 I/O수행이 느려질 수도 있다. 트랜잭션은 저널링 파일 시스템에서 로그에 내용을 저장하는 수행단위다. 파일 시스템의 일정한 조작에 대한 파일 시스템 내부적인 일련의 동작 수행이다. 저널링 파일 시스템은 디스크의 빈 블록 비트맵이나 inode가 포함된 블록에 대한 수정을 하기 전에 반드시 로그에 대한 트랜잭션을 수행한다.
트랜잭션의 수행을 단계별로 보면
트랜잭션 할당 단계 - 수행할 파일 작성 트랜잭션에 대한 ID를 획득하기 위해서 새로운 트랜잭션 할당을 수행한다.
트랜잭션 추가 단계 - 디스크상의 블록을 변경하기 전에 반드시 로그에 기록해야하기 때문에 트랜잭션별로 할당되어 있는 관리 데이터와 링크되어 메모리에 저장된다. 이 단계는 아직 로그에 저장된 상태는 아니다. 단지 트랜잭션에 로컬로 저장된 상태이다.
트랜잭션 위탁 단계 - 트랜잭션 추가 단계에서 만들어진 트랜잭션의 내용을 로그에 저장하는 동작을 수행한다. 위탁과 함께 롤백이라는 동작도 수행되는데 롤백은 트랜잭션 중에서 수행한 수정을 취소할 경우 수행되는 것으로 에러가 발생했을 경우에도 수행된다.
1.2 파일 시스템의 종류
리눅스는 다양한 파일 시스템을 지원한다. ext2, ext3, minix, xiats, umsdos, hpfs OS/2, isofs, CD-ROM, msdos, nfs, sysv 등이 있다. 이 파일 시스템들은 각각 다음과 같은 특징을 가지고 있다.
◎ minix
과거 미닉스에서 사용되어졌던 파일 시스템으로 리눅스 파일 시스템 대부분의 기능을 제공하는 파일 시스템이다.
◎ xiafs
미닉스의 제한이 이었던 파일 이름과 파일 시스템에 대한 제한을 보안한 미닉스 파일 시스템의 수정 버전이다. 이 파일 시스템에는 추가된 새로운 기능은 없다. 한때 ext2와 함께 사용되었던 파일 시스템이었으나 현재는 많이 사용되지 않는다.
◎ msdos
도스의 FAT파일 시스템과 호환을 지원하는 파일 시스템이다. 또한 msdos와 OS/2와 윈도NT FAT파일 시스템과도 호환된다
◎ hpfs OS/2
OS/2의 파일 시스템이다. 하지만 현재는 읽기 전용인 파일 시스템으로 파일 시스템에 대한 읽기만이 가능하다.
◎ isofs CD-ROM
ISO기준을 따르는 표준 CD-ROM의 파일 시스템이다. isofs CD-ROM은 CD-ROM에 좀더 긴 파일명을 사용할 수 있도록 확장된 록 브릿지가 기본으로 지원된다.
◎ umsdos
MS-DOS 파일 시스템을 리눅스 상에서도 긴 파일명과 소유자, 접근 허가, 링크와 장치 파일 등을 사용할 수 있도록 확장한 파일 시스템이다. umsdos는 일반적으로 DOS 파일 시스쳄이 마치 리눅스 파일 시스템인 것처럼 보이도록 하는 기능을 제공하므로 따로 리눅스를 위한 파티션은 필요하지 않는다.
◎ nfs
네트워크 파일 시스템이다. 네트워크 상의 많은 컴퓨터들이 각각의 시스템에 가진 파일들을 서로 쉽게 공유하기 위해 제공되는 상호간의 파일 시스템 공유 파일시스템이다.
◎ sysv
System V/386, Xenix 그리고 Coherent 파일 시스템이다.
◎ ext
리눅스 초기에 사용되던 파일 시스템으로 호환성이 없던 ext2의 구 버전이다. 지금은 대부분 하지 않는다.
◎ ext2
리눅스는 미닉스 파일시스템을 처음으로 사용했다. 그러나 여러가지 제약 조건과 성능이 뛰어나지 못하였다. 이를 보안 하기 위해 EXT(Extened File System)이 제시 되었다. 이 파일 시스템은 리눅스 전용으로 설계되어 1992년 4월에 소개 되었다. 또한 1993년에는 2차 확장 파일 시스템인 EXT2가 ext의 여러가지 문제점을 보안하여 나왔다.
2. 디렉토리 구조
리눅스의 기본 디렉토리 구조는 트리 구조를 하고 있다. 그리고 디렉토리 구조는 기본구조를 제외하고 사용자의 설정에 따라 달라질 수 있다. 리눅스의 디렉토리 구조는 파일 시스템 표준안 (FSSTND, Linux File System Standard)을 기반으로 하는 것이 바람직하다. 파일 시스템 표준안은 리눅스상에서 어떻게 파일 시스템을 구성할 것인지에 대한 표준안을 제정하기 위해서 만들어진 문서이다. 표준안을 무조건 따르라는 강제력은 없지만 파일의 위치가 일관된게 유지되어 프로그램 작성, 포딩은 물론 시스템 관리도 쉬워지는 이점이 있기에 배포판들은 이 표준안을 지키고 있다.
2.1 디렉토리 기능 및 내용
대부분의 리눅스는 FHS(Filesystem Hierarchy Standard) 표준 파일 시스템 계층을 사용하고 같은 목적의 파일들은 같은 장소에 일관되게 모아 관리하므로 시스템에 자원이나 프로그램들을 쉽게 찾을 수 있다.
◎ /
루트 디렉토리라고 부르는 리눅스 시스템에서 가장 최상위 디렉토리며 디렉토리 구조의 시작이다. 시스템관리자의 홈인 /root와는 다르다. / 디렉토리 아래에 /bin, /etc, /boot, /mnt, /usr, /lib, /home, /dev, /proc, /var, /sbin, /tmp, /root, /lost+found 등의 디렉토리가 존재한다.
◎ /bin
binaries의 약어로 이진 파일들이며 리눅스에서 가장 기본이 되는 명령어들이 모여 있는 디렉토리이다. 디렉토리의 파일들을 보면 대부분이 실행 파일임을 알 수 있다. 또한 이곳에는 부팅에 필요한 명령어들이 위치하여 부팅후에 시스템의 계정 사용자들이 사용할 수 있는 일반적인 명령어들도 위치 하고 있다.
◎ /etc
이 디렉토리는 리눅스 시스템에 관한 각종 환경 설정에 연관된 파일들과 디렉토리들을 가진 디렉토리이다. 대부분의 이 디렉토리의 파일들은 시스템 관리자에 의해 관리되는 파일들이다. 웹 서버 환경 설정, 시스템 계정 사용자 정보, 패스 워드 관리, 시스템의 파일 시스템 관리 파일, 여러가지 시스템 보안에 관련된 파일들, 시스템 초기화 설정 파일, TCP/IP 설정 파일 등 시스쳄 전반에 걸친 거의 모든 환경 설정 파일들이 모두 이 디렉토리에 있다.
◎ /etc/rc.d
시스템의 부팅과 시스템 실행 레벨 변경시에 실행되는 스크립트들이 저장되어 있는 디렉토리이다. 리눅스의 6가지 실행 레벨로 각각의 해당 디렉토리가 있다.
◎ /etc/shadow
파일에서 패스워드 부분만을 따로 저장하는 파일이다. 이 파일에 패스워드는 암호화 되어 셰도우 패스워드 형태로 저장되어 있으며 시스템 관리자만이 접근할 수 있기 때문에 크래킹 등에 대한 우려가 상대적으로 적다.
◎ /etc/group
시스템의 그룹에 대한 정보를 저장하고 있는 파일이다.
◎ /etc/inittab
init를 설정하는 파일이다.
◎ /etc/issue, /etc/issue.net
getty에 의해서 로그인을 위한 프롬프트가 뜨기 전에 출력되는 메시지를 설정하는 파일이다. 리눅스 시스템으로 접속할 경우 가장 처음으로 볼 수 있는 메시지이다. 보통 시스템에 대한 설명과 각종 환영 메시지를 전달하기 위해서 사용된다. issue 파일의 내용은 보통 시스템의 터미널에서 볼 수 있다. 그리고 /etc/issue.net 파일의 내용은 리모트상에서 시스템으로 접속할 경우 볼 수 있다.
◎ /etc/motd
'Message of the day'의 약자로 시스템으로의 접속에 성공할 경우 쉘이 뜨기 전에 출력되는 메세지를 설정하는 파일이다.
◎ /etc/profile, /etc/csh.login, /etc/csh.cshrc
시스템이 시작될 때 사용자가 로그인을 할 때 본쉘이나 C쉘에 의해서 실행되는 스크립트 파일이다. 일반적으로 사용자들에 대한 기본 환경 설정에 사용된다.
◎ /etc/securetty
시스템 관리자가 시스템에 로그인할 수 있는 안전한 터미널에 대한 정보가 저장되어 있다. 일반적으로 가상콘솔이 설정되어 있다. 이것은 네트워크를 통해 시스템으로 침입해 시스템 관리자의 권한을 획득하는 크랙킹을 막기 위해서이다.
◎ /ete/shell
시스템에서 안정적으로 사용할 수 있는 쉘에 대한 정보를 저장하고 있는 파일이다. 만약 chsh명령을 사용해 사용중인 쉘을 바꾸려면 이 파일에 저장되어 있는 쉘중에 선택해야한다. 또한 ftp데몬의 경우 사용자의 쉘을 검사하여 /etc/shell에 저장되어 있지 않은 쉘을 사용한다면 로그인을 허용하지 않는다.
◎ /boot
리눅스 커널이 저장되어 있는 디렉토리로서 각종 리눅스 boot에 필요한 booting지원 파일들이 저장되어 있는 디렉토리이다.
◎ /mnt
외부 장치인 플로피 디스크, 시디롬, 삼바등을 마운트하기 위해서 제공되는 디렉토리이다. 임시로 사용되는 디렉토리이므로 프로그램들은 /mnt에 어떤 파일 시스템이 마운트 되었는지 자동으로 인식하지 않는다. 또한 /mnt는 보통 여러 개의 하위 디렉토리로 나누어 사용되고, 평소에는 각 디렉토리들은 비어 있다.
◎ /usr
시스템에 사용되는 각종 프로그램들이 설치되는 디렉토리이다. 프로그램과 관련된 명령어 미치 라이브러리들이 이 디렉토리에 위치 하게 된다. 또한 X 시스템관련 파일들과 리눅스 커널 소스, 각종 C언어 과련 해더 파일 등도 이 디렉토리 안에 저장되어 있다.
◎ /usr/bin
리눅스 시스템에서 사용되는 각종 프로그램들이 저장되어 있으며 /bin 디텍토리에 없는 다양한 실행 파일들이 저장되어 있는 디렉토리이다.
◎ /usr/X11R6
X 윈도우 시스템에 사용되는 모든 파일들이 이 디렉토리 안에 저장된다. 이 디렉토리는 X 윈도우 시스템의 개발과 설치를 좀더 쉽게 하기 위해서 전체 시스템 디렉토리 구조에 통합되지 않고 독자적인 구조를 가진다.
◎ /usr/etc
/etc 디렉토리에는 각종 환경 설정 파일들이 있듯이 이곳에도 여러 가지 시스템 환경 설정 파일들이 저장되어 있다./usr/etc의 파일들은 /etc디렉토리 안의 파일들과 달리 꼭 팔요한 파일들은 아니다.
◎ /usr/sbin
시스템 관리자를 위한 명령어들이 저장되는 디렉토리이다. 보통 이 디렉토리의 명령어들은 루트 파일 시스템에는 필요가 없는 서버 프로그램들이 저장된다.
◎ /usr/include
C언어 관련 해더 파일드이 저장되어 있는 디렉토리이다.
◎ /usr/lib
각종 라이브러리들이 저장되어 있는 디렉토리이다. 만약 사용자가 직접 작성한 프로그램을 컴파일한다면 해당 프로그램은 /usr/lib 디렉토리의 파일에 link된다. 또한 이 라이브러리 안에 실행 코드가 필요하다면 /lib 디렉토리를 참조한다.
◎ /usr/local
시스템의 특정적인 프로그램들이 저장되는 디렉토리이다.특정적인이란 시스템 관리자에 의해서 따로 설치되는 프로그램들을 말한다.
◎ /usr/man
man페이지의 실제 내용들이 저장되어 있는 디렉토리이다. 디렉토리를 살펴보면 man1, man2, man3, 등과 같이 여러개의 디렉토리들로 나누어져 있는 모습을 볼수 있다.man1 디렉토리는 섹션 1의 man 페이지 소스를 위한 디렉토리를 말한다.
◎ /usr/src
시스템에서 사용하는 각종 프로그램들의 컴파일되지 않은 소스 파일들이 저장되어 있다./usr/src/linux 디렉토리가 바로 리눅스의 커널소스를 저장하고 있는 디렉토리이기 때문이다.
◎ /usr/X386
/usr/X11R6 디렉토리와 유사한 티렉토리로 X11 Release 5를 위한 디렉토리이다.
◎ /usr/info
GNU info문서들을 저장하고 있는 디렉토리이다.
◎ /usr/doc
각종 문서들이 저장되어 있는 디렉토리이다
◎ /lib
프로그램들의 각종 라이브러리들이 존재한다. 대부분 공유 라이브러리로 더 편하게 사용할 수 있으며,파일의 크기를 줄여서 실행할 때 불러 사용하게 된다. /lib/modules 디렉토리에는 커널로 로딩 사능한 커널 모듀들이 저장되어 있다.
◎ /home
시스템 계정 사용자들의 홈 디렉토리와 ftp,www,등과 같은 서비스 디렉토리들이 저장된다. 이곳의 디렉토리와 파일들은 시스템에서 상용되지 않는다. 단지 리모트상에서 시스템으로 접속하는 사용자들을 위한 공간이다.
◎ /dev
디렉토리에는 시스템의 각종 디바이스들에 접근하기 위한 디바이스 드라이버들이 자장되어 있는 디렉토리이다. 이 디렉토리는 물리적인 용량은 갖지 않는 가상 디렉토리이다. 대표적으로는 하드 드라이브,플로피, 씨디롬 그리고 루프팩장치 등이 존재한다. 리눅스 시스템은 윈도우와 달리 각종 디바이스 장치들을 하나의 파일로 취급한다. 따라서 시스템은 각각의 장치들로부터의 정보를 /dev 디렉토리에 존해하는 해당 장치 파일로 부터 가지고 온다.
◎ /dev/console
시스템의 콘솔이다.
◎ /dev/hda
시스템의 하드 디스크이다. 여기서 /dev/hda는 첫 번째 하드 디스크를 의미하는 것이다./dev/hda1은 첫번째 하드 디스크의 첫번째파티션,/dev/hda2 두 번째 파티션등을 의미한다.만약 시스템에 여러 개의 하드 디스크가 부착되어 있다면 /dev/hdb,/dev/hdc 등의 파일도 /dev/hdb1,/dev/hdb2등과 같은형식으로 저장되어 있다.
◎ /dev/lp
시스템의 병렬 포트 장치들이다.
◎ /dev/null
이 디렉토리는 블랙홀이라고도 부르는 특별한 장치이다. 이 장치로 데이터 등을 보내면 모두 폐기되므로 주의해야 할 것이다.
◎ /dev/pty
시스템으로의 원격 접속을 위한 'pesudo-terminal'들이다. 만약 시스템 계정 사용자드이 원격지에서 시스템으로 텔넷등을 이용하여 시스쳄에 접속을 시도한다면 이들은 /dev/pty 디바이스들을 사용하게 되는 것이다.
◎ /dev/sda
SCSI 장치들이다. 만약 시스템에 스카시 하드 디스크를 장착했다면 시스템은 /dev/sda파일에서 정보를 얻어 장치에 접근할 것이다.
◎ /dev/ttyS,/dev/cuaS
/dev/ttyS은 직렬포트 장치들이고, /dev/cauS는 Callout. 장치이다.
◎ /dev/tty
시스템의 가상콘솔들이다. 이 가상 콘솔의 기능은 하나의 화면에 여러 개의 콘솔들을 만든다. 만약 사용자가 시스템 앞에 앉을 수 있다면,Alt + F1, Alt + F2등을 이용하여 리눅스에 제공한 여러개의 가상 콘솔을 직접 볼수 있을 것이다.
◎/proc
시스템의 각종 프로세서, 프로그램 정보 그리고 하드웨어적인 정보들이 저장된다. 이 티렉토리는 가상 파일 시스템으로 가상 파일 /dev와 마찬가지로 하드 디스크상에 물리적인 용량을 갖지 않는다. 즉 디렉토리에 존재하는 파일들은 실제 하드 디스크에 저장되지 않고 커널에 의해 메모리에 적재 된다. 디렉토리 안의 파일들은 현재의 시스템 설정을 보여 주는 것이다.
◎ /proc/1
프로세스 번호가 1인 프로세스에 대한 정보를 저장하는 디렉토리이다. 다른 프로세스들도 자신의 고유한 프로세스 번호의 디렉토리를 가진다는 것을 의미한다.
◎ /proc/cpuinfo
프로세서의정보를 저장하고 있는 파일이다. cpu의 타입, 모델, 제조회사, 각종 성능 등의 정보를 제공하여 준다.
◎ /proc/devices
현재 시스템 커널에 설정되어 있는 장치들에 대한 정보를 저장하고 있다.파일등의 정보로 모든 시스템의 장치 목록에 대한 정보를 얻을 수 있다.
◎ /proc/dma
현재 시스템에서 사용하고 있는 DMA 채널에 대한 정보를 저장하고 있다.
◎ /proc/filesystem
시스템에 설정되어 있는 파일 시스템에 대한 정보를 저장하고 잇는 파일이다.
◎ /proc/interrupts
현재 사용중인 인터럽트와 인터럽트의 사용량에 대한 정보를 저장하고 있는 파일이다.
◎ /proc/ioports
현재 사용중인 I/O 포트에 대한 정보를 저장하고 있는 파일이다.
◎ /proc/kcore
현재 시스템에서 사용중인 메로리의 실제 이미지이다. 이 파일은 실제 메모리의 내용을 모두 가진 것처럼 보이지만 프로그램이 필요로 하는 부분의 이미지만을 필요할 때 만들어 제공한다.
◎ /proc/kmsg
커널에 의해서 출력되는 메시지들을 저장하고 있는 파일이다.이것은 또한 syslog파일에도 저장된다.
◎ /proc/loadavg
현재 시스템의 평균 부하량(Load Average)에 대한 정보를 저장하고 있는 파일이다.이 파일을 통해서 시스템이 현재 수행해야 하는 일이 얼마나 많은지를 알려주는 3가지 지표에 대한 정보를 얻을 수 있다.
◎ /proc/ksyms
시스템 커널이 사용하고 있는 심볼들에 대한 정보를 저장하고 있는 파일이다.
◎ /proc/meminfo
현재 시스템이 사용중인 메모리의 사용량을 저장하고 있는 파일이다./proc/meminfo에서 실제 메모리는 물론 가상 메모리에 대한 정보도 얻으 수 있다.
◎ /proc/self
이 디렉토리를 보고 있는 프로그램 자시의 프로세스 디렉토리로 링크도어 있다. 만약 서로 다른 2개의 프로세스가 /proc 디렉토리를 보고 있다면 두 프로세스는 서로 다른 링크를 보게 된다. 이를 통해서 프로그램들이 자신의 프로세스 디렉토리를 쉽게 찾을 수 있다.
◎ /proc/stat
시스템의 현재 상태에 대한 다양한 정보를 저장하고 있는 파일이다.
◎ /proc/uptime
시스템이 얼마나 오래 동작했는지에 대한 정보를 저장하고 있는 파일이다.
◎ /proc/version
시스템이 현재 사용중인 커널 버전에 대한 정보를 저장하고 있는 파일이다.
◎ var
시스템에서 사용되는 동적인 파일들이 저장된다. 각종 시스템 로그 파일, 사용자 로그인에 대한 보안기록,메일서버를 운영한다면 사용자들에게 전송된 메일들을 임시로 저장한다.
◎ /var/cache
포멧된 메뉴얼 페이지들이 잠시 대기(Cache)하기 위한 디렉토리이다.
◎ /var/lib
시스테이 동작하면서 계속 수정되고 변경되는 파일들을 위한 디렉토리이다.
◎ /var/local
/usr/local 디렉토리에 설치된 프로그램들의 각종 데이터들이 저장되는 디렉토리이다.
◎ /var/lock
잠금 파일들이 저장되는 디렉토리이다.프로그램들이 특정한 장치나 파일들을 프로그램 자신이 독점적으로 사용하려 할 때 /var/lock 디렉토리에 잠금 파일을 만들어 사용하게 된다. 그렇기 때문에 다른 프로그램들은 장치나 파일을 사용하기 전에 우선 이 디렉토리의 내용을 조사하여 해당 장치나 파일들이 사용중인지 확인하게 된다.
◎ /var/log
프로그램들의 로그 파일들이 저장되는 디렉토리이다. 이 디렉토리에 wtmp파일은 login 파일과 messages파일은 syslog의 로그 파일이다.wtmp는 시스쳄의 모든 사용자 로그인과 로그 아웃에 대한 정보르 저장하고 있는 파일이고,messages는 커널과 시스템의 모든 출력 메세지를 저장하고 있는 파일이다./var/log 안의 파일들은 시스템의 사용량에 따라 그 크기가 무한대로 증가할 있으므로 정기적으로 파이들을 삭제하는 등 디렉토리 관리가 필요하다
◎ /var/run
시스템의 현재 정보들을 저장하고 있는 디렉토리이다./var/run/xinetd.pid 파일의 경우 현재 사용중인 xinetd 데몬의 프로세스 번호를 저장하고 있다.
◎ /var/spool
메일이나 뉴스, 프린터 큐 등고 같은 시스템상에서 대기 상태에 있는 작업들을 위한 디렉토리이다. 각각의 대기 작업들은 모두 /var/spool 아래 고유의 디렉토리에 위치하게 된다. 예를 들어 시스템의 계정 사용자들의 메일은 /var/spool/mail 에 저장된다.
◎ /var/tmp
/tmp에 저장된 임시 파일들중에 오래 보관되어야 할 임시 파일들이 저장되는 디렉토리이다.
◎ /tmp
이름에도 알 수 있듯이 임시 파일들을 위한 디렉토리이다.
◎ /root
시스템 관리자의 홈 디렉토리이다
-
[java] 입출력 스트림 3부 (오브젝트)
-
[json] 종결자 (설명과 웹, C/C++/C# 프로그램 샘플 코드)
-
[js] 웹페이지에서 특정 엘리먼트 드래그, 복사, 컨텍스트메뉴, 키보드 막기
-
[lego] 세그웨이 이것만 볼것.. ㅎㅎ
-
[linux] 리눅스 파일시스템과 디렉토리 설명
-
[linux] 리눅스, 유닉스 CPU 이용률 확인..
-
[linux] 리눅스,유닉스 /proc/stat 파일 보는 법
-
[linux] 초간단 Postfix, Covecot, SSL/TLS (SMTP)
-
[linux] 특정 문자열 포함된 파일 찾는 명령어
-
[mac] Mac OS에서 재생되는 사운드를 녹음하는 방법
-
[mac] Mac에서 Mac으로 원격제어하기 (맥에서 맥으로)
-
[mac] OS X 엘 캐피탄에서 Soudflower 사용하기