리눅스 파일시스템 계층구조 표준(FHS : Filesystem Hierarchy Standard)

1993년 표준 파일 시스템을 구축하기 위한 노력이 시작된 이래 리눅스의 디렉토리 구조는 1994년 릴리즈된 FSSTND라는 표준을 따르게 되었다. 이 과정에서 BSD도 참여하며 FSSTND는 유닉스 전반에 대해 일반화되며, 파일시스템 계층구조 표준(FHS : Filesystem Hierarchy Standard)이라는 이름으로 정립되었다. 현재 이 표준에는 여러 벤더들이 참여하고 있으며, 제안된 표준을 100% 따르는 것은 아니지만 기본 골자는 같이 하고 있는 추세다. 따라서 이제부터 설명하려는 내용은 리눅스를 설치하고 / 에서 ls 한 번 쳐 보면 어디서나 대충 비슷하게 볼 수 있는 내용이라는 뜻이다.

이 표준이 만들어진 자세한 과정에 대해서는 http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard 를 참고하자.

  • / : 모든 파일 시스템이 연결되는 루트. 여러 파일 시스템을 연결하고 하드디스크를 추가해도 한 시스템에서 루트는 하나다. 어디에서 거슬러 올라가도 도착하는 계층구조의 최상층이다.
  • /bin/ : 주요 명령어 바이너리가 들어있다. 싱글 유저 모드일 때에도 사용할 수 있으며 모든 사용자들에게 필요한 외부 명령어들(cat, ls, cp 등등)은 거의 다 이곳에 들어있다.
  • /boot/ : 부트로더와 커널 관련 파일들이 들어있다(kernels, initrd). 종종 분리된 파티션에 두기도 한다.
  • /dev/ : 시스템의 장치 파일 디렉토리. 유닉스 계열에서는 각종 주변장치(프린터, 하드디스크 등등)도 파일과 같이 인식한다. /dev/null은 실제로 연결되는 장치는 아니지만 포함되어 있다.
  • /etc/ : 시스템 환경 전반을 설정하는 파일. 어원은 et cetera 라고 한다. 라틴어로 “기타등등”이라는 뜻.
  • /etc/opt/ : /opt/에 설치되는 파일들을 위한 설정. 추가로 설치되는 애플리케이션들의 설정을 관리한다.
  • /etc/X11/ : X윈도우 관련 설정. 이 디렉토리 아래 /etc/X11/xdm에서 XDM(X Window Display Manager)의 설정을 관리한다.
  • /etc/sgml/ :  SGML 관련 설정
  • /etc/xml/ :  XML 관련 설정
  • /home/ : 사용자 홈 디렉토리. 개인 설정이나 개인적으로 사용하는 파일들이 들어있다. 혼자 쓰는 시스템이 아니면 파티션을 따로 잡는게 낫다.
  • /lib/ : /bin이나 /sbin의 바이너리들이 참조하는 주요 공유 라이브러리들나 커널 모듈 등이 설치되어 있다.
  • /media/ :  CD-ROM 같은 끼웠다 뺐다 하는 미디어들을 마운트하는 위치. 별도로 주지 않고 그냥 mnt에 마운트하는 경우도 많다.
  • /mnt/ : 가장 일반적인 마운트 포인트 디렉토리
  • /opt/ : 추가로 설치한 어플리케이션이 설치된 디렉토리.EXT2 파일시스템 v2에서 새롭게 정해진 디렉토리로 /usr/에 설치되는 프로그램과 분리하고자 할때 사용하는 디렉토리이다..
  • /proc/ : 현재 시스템, 커널과 프로세스의 상태를 텍스트 형태로 보여주는 가상 파일 시스템
  • /root/ : root의 홈 디렉토리
  • /sbin/ : 주요 시스템 명령어 바이너리(init, route, ifup 등). 관리자용 명령어. 이곳의 파일들은 대부분 시스템과 직접적인 연관이 있어 보안이 필요하다.
  • /tmp/ : 임시 작업 디렉토리. /var/tmp도 비슷한 역할을 한다. X 윈도우 버퍼링이 일어나기도 하며 프로그램 설치시의 임시 작업공간으로도 쓰인다. 시스템이 재부팅되는 동안 보존되지 않는다.
  • /usr/ : 사용자 데이터나 공유해서 쓰는 유틸리티, 문서, 프로그램 등이 들어있다. 이 아래에서 다시 파일 시스템 계층구조가 이루어지며 유닉스 파일 시스템에서의 두번째의 큰 계층구조가 된다. 대부분의 파일들이 이 아래에 속한다.
    • /usr/bin/ : 싱글 유저 모드에서는 사용되지 않는 명령어 바이너리. 모든 사용자가 이용할 수 있다.
    • /usr/include/ : 표준 인클루드 파일
    • /usr/lib/ : /usr/bin 이나 /usr/sbin에서 참조하는 라이브러리
    • /usr/sbin/ : 네트워크 데몬 등, 시스템 전반보다는 각 서비스에 영향을 끼치는 관리자 명령어
    • /usr/share/ : 시스템 독립적인 공유 데이터
    • /usr/src/ : 커널 소스나 /usr에 설치되는 프로그램 소스 등 소스코드
    • /usr/X11R6/ : X 윈도우 시스템이 설치된 경로
    • /usr/local/ : 세번째 계층구조. 이 호스트에서 따로 설정되는 로컬 서비스들이 들어있다. bin, lib, share 등의 디렉토리등을 포함한다.
  • /var/ : 로그나 스풀 파일, 임시 이메일 파일 등 내용이 수시로 바뀌는 파일들이 위치한다.
    • /var/lib/ : 상태 정보. 현재 실행중인 프로그램에 의해 수정되는 정보들(데이터베이스, 메타데이터 등)
    • /var/lock/ : 잠금 파일. 현재 리소스를 사용하는 파일을 추절하Lock files. Files keeping track of resources currently in use.
    • /var/log/ : 각종 로그 파일
    • /var/mail/ : 사용자 메일박스
    • /var/run/ : 마지막으로 부팅한 후 실행중인 시스템에 대한 정보(로그인한 사용자, 실행중인 데몬 등)
    • /var/spool/ : 작업 시작을 기다리며 스풀링을 하는 경로. 프린트 큐나 읽지 않은 메일 등이 스풀된다
    • /var/spool/mail/ : 사용자가 읽지 않았거나 쓰다가 중단한 메일 등이 저장된다.
    • /var/tmp/ : 임시 작업 디렉토리. 이 디렉토리의 내용은 시스템이 재부팅되는 동안에도 보존된다.

    그밖에 마운트포인트마다 존재하는 lost+found가 있다. (파일 시스템에 문제가 생길 경우 fsck로 검사하는데, 이때 손상된 자료를 이 디렉토리에 연결하여 수정한다)

    아파치 로그 관련 cron 설정

    아파치 로그의 관리를 용이하게 하고, 로그파일이 너무 커지는 것을 막기 위해 매일 백업한다.
    그리고 한달치 로그를 모아 gzip으로 압축한다.

    이 과정은 다음과 같이 설정한다.

    먼저 apache_log.sh, apache_log_gz.sh를 다음과 같이 만든다

    apache_log.sh

    # Apache Web Server Stop
    YDATE=`date –date ‘1 days ago’ +%y%m%d`
    echo ” Apache Web Server Stop….”
    /usr/local/apache/bin/apachectl stop
    # Apache Log Backup
    echo “Apache Log Backup”
    /bin/cp /usr/local/apache/logs/scampus-error_log /usr/local/apache/logs/scampus-
    error.$YDATE.log
    /bin/cp /usr/local/apache/logs/scampus-access_log /usr/local/apache/logs/scampus
    -access.$YDATE.log
    /bin/cp /usr/local/apache/logs/tcampus-error_log /usr/local/apache/logs/tcampus-
    error.$YDATE.log
    /bin/cp /usr/local/apache/logs/tcampus-access_log /usr/local/apache/logs/tcampus
    -access.$YDATE.log
    /bin/cp /usr/local/apache/logs/mod_jk.log /usr/local/apache/logs/mod_jk.$YDATE.l
    og
    echo “Apache Log Null Copy”
    cat /dev/null > /usr/local/apache/logs/scampus-error_log
    cat /dev/null > /usr/local/apache/logs/scampus-access_log
    cat /dev/null > /usr/local/apache/logs/tcampus-error_log
    cat /dev/null > /usr/local/apache/logs/tcampus-access_log
    cat /dev/null > /usr/local/apache/logs/mod_jk.log
    # Apache Web Server Start
    echo “Apache Web Server Start”
    /usr/local/apache/bin/apachectl start

    apache_log_gz.sh

    # Apache Web Server Stop
    YMONTH=`date –date ‘1 month ago’ +%Y%m`
    YMONTH2=`date –date ‘1 month ago’ +%y%m`
    echo ” 지난달의 로그를 백업합니다…..”
    # Apache Log Backup
    tar cvPf /usr/local/apache/logs/$YMONTH.tar /usr/local/apache/logs/*$YMONTH2*log
    *
    /bin/rm /usr/local/apache/logs/*$YMONTH2*log.gz
    echo “백업 끝!” 

    두 파일의 퍼미션을 755로 준다.

    크론에 다음과 같이 설정한다

    [root@websvr1 root]# crontab -l
    # 아파치 로그 백업
    0 4 * * * /apache_log.sh
    15 4 1 * * /apache_log_gz.sh

    도스 외부 명령어

    ATTRIB.EXE

    유닉스의 chmod처럼 파일이나 디렉토리의 속성을 변경할 때 사용한다.

    • /D : 디렉토리의 속성을 변경한다.
    • /E : 속성 변경시 에러가 발생하더라도 메시지를 출력하지 않는다.
    • /Q : 속성 변경시 출력되는 메시지를 출력하지 않는다.
    • /S : 서브디렉토리 또는 포함된 파일까지 속성을 변경한다.
    • A : 저장 속성. +/-로 설정한다.
    • H : 숨김 속성. +/-로 설정한다.
    • R : 읽기 전용 속성. +/-로 설정한다.
    • S : 시스템 속성. +/-로 설정한다.

    CHKDSK.EXE

    FAT16 파일 시스템에서 프로그램이 실행중 강제 종료되거나 오류가 발생하면 파일들이 서로 얽히며 데이터를 읽어 논리적 오류가 발생하기도 한다. 이 명령은 이렇게 서로 얽힌 파일을 찾아 고치고 FILEnnnn.CHk라는 파일명을 만들어 논리적 에러를 수정한다. /F 옵션을 사용하면 오류를 정정한다.

    DEFRAG.EXE

    소위 “디스크 조각모음”을 수행한다. 지금은 그냥 윈도우의 디스크 조각 모음을 사용한다.

    DELTREE.EXE

    디렉토리내의 모든 파일과 서브 디렉토리를 삭제한다. 와일드 카드(*, ?)를 사용할 수 있다.

    DISKCOPY.COM

    디 스크 대 디스크로 복사한다. 서로 같은 용량의 플로피 디스크에서만 사용할 수 있고, 하드 디스크에서는 사용할 수 없으며, 만약 Drive2에 있는 디스크가 포맷되지 않았으면 Drive1에 있는 디스크와 같은 형식의 포맷을 하면서 디스크를 복사한다.

    DOSKEY.COM

    도 스에서 히스토리, 매크로 기능 등을 사용할 수 있게 지원한다. 히스토리에 저장된 명령을 볼 때에는 F7을 눌러 목록을 보고, F9를 눌러 원하는 명령을 선택한다. 명령어의 첫글자를 입력하고 F8을 누르면 해당 글자로 시작되는 명령들이 나온다.

    • /REINSTALL : 이미 DOSKEY.COM이 메모리에 설치되어 있더라도 다시 설치한다.
    • /BUFSIZE=size : DOSKEY.COM이 사용하는 버퍼 크기를 설정한다. 기본값은 512이다.
    • /MACROS 또는 /M : 등록된 모든 매크로를 보여준다.
    • /HISTORY 또는 /H : 메모리에 저장된 모든 명령들을 보여 준다.
    • macroname=매크로 이름 : 매크로 이름으로 앞으로 사용하려는 매크로를 정의한다.

    FORMAT.COM

    디스켓을 포맷할 때 사용한다.

    • /V : 최대 11자까지의 디스크의 볼륨 레이블을 설정한다. 이 스위치를 사용하지 않거나 볼륨 레이블을 설정하지 않고 이 스위치를 사용하면 MS-DOS는 디스크 포맷이 팔난 뒤에 볼륨 레이블을 설정 할 수 있도록 한다. 이 스위치는 /8스위치와 호환되지 않는다.
    • /Q : 디스크의 포맷을 빨리 한다. 이 전에 포맷된 디스크에서 사용되어야 하며 이 스위치는 디스크의 FAT와 루트 디렉토리만을 삭제하고 디스크의 표면 오류를 검사하지 않는다.
    • /U : 포맷 복구를 지원하지 않도록 한다. 이 스위치를 사용해서 포맷을 하면 UNFORMAT.COM으로 다시 복구하지 못한다.
    • /F : 포맷할 플로피 디스크의 크기를 설정한다.
    • /S : 포맷후에 디스크에 시스템 파일(IO.SYS, MSDOS.SYS, DBLSPACE.BIN, COMMAND.COM)들을 복사한다.
    • /1 : 플로피 디스크의 한쪽 면만을 포맷한다.
    • /4 : 1.2MB 디스크 드라이버에서 5.25인치 360K 양면 배밀도를 포맷할 때 사용한다.

    LABEL.EXE

    드라이브의 볼륨 레이블을 지정한다.

    MEM.EXE

    부팅 중에 메모리로 Load된 프로그램과 기본 메모리, 사용가능한 메모리 등 메모리의 사용 현황을 볼 수 있다.

    • /CLASSIFY 또는 /C : 각 프로그램이 차지하고 있는 기본 메모리와 상위 메모리를 보여주고 현재 Load된 프로그램을 보여 준다.
    • /DEBUG 또는 /D : 메모리에 Load된 현재의 내부 드라이버와 프로그램을 보여준다.
    • /FREE : 기본 메모리와 상위 메모리의 남은 영역을 보여준다.
    • /MODULE : 현재 메모리에서 사용하는 프로그램 모듈의 상태를 보여 준다.