강좌
클라우드/리눅스에 관한 강좌입니다.
자격증 분류

리눅스마스터1급 : 리눅스 디렉토리 구조

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

리눅스마스터1: 리눅스 디렉토리 구조







디렉토리 구조

 

리눅스 시스템의 디렉토리 구조는 전체적으로 역 트리(tree) 구조를 하고 있다.

 

 

 

 

루트(/)에서 크게 몇 가지의 주요한 디렉토리로 분할이 되고 특정한 디렉토리 하위에는 해당 디렉토리의 분류 기준에 따라 여러 가지 디렉토리들이 놓이게 된다.

 

 

 

 

이러한 디렉토리 구조를 파일체제(filesystem)라 한다.

 

 

 

 

그리고 다양한 리눅스 배포판들이 다양하게 발전함에 따라 파일체제를 체계화하여 1994214일에 처음으로 리눅스 파일체제 표준(Linux Filesystem Standard, FSSTND)”을 제정하였다.

 

 

 

 

그리고 1995년 초, BSD 개발 커뮤니티 구성원들의 도움으로 리눅스 뿐만 아니라 유닉스와 유사한(UNIX-like) 시스템들을 아우르는 보다 포괄적인 버전을 개발하는 목표가 채택되어 개발 끝에 19971026일부터 파일체제 계층 표준(Filesystem Hierarchy Standard, FHS)이라는 이름으로 표준의 개발이 지속되고 있는데, 이것은 리눅스 외에도 유닉스와 유사한 운영체제들을 위한 것이다.

 

 

 

 

그렇지만 이것에서도 리눅스에 대해서는 별도의 장을 두어 특이 사항들을 기술하고 있다.

 

 

 

 

현재 대부분의 리눅스 배포판들은 2004129일에 발표된 2.3 버전(현재 최종 버전)FHS를 준수하여 개발되고 있다.

 

 

 

 

이 표준은 각 디렉토리의 용도에 대한 기준을 준비해 두고서 그 용도에 맞도록 사용하자는 리눅스 파일 체계 구성의 기준이 되는 표준안이라고 할 수 있다.

 

 

 

 

예를 들어 /etc 디렉토리에는 설정 파일에 관련된 파일들을 저장하도록 하고, /var/spool 디렉토리에는 장래의 작업을 기다리는 자료들의 임시 저장 공간의 용도로 사용하며, /var/log에는 로그파일을 저장하는 용도로 사용한다.

 

 

루트(/)

 

 

리눅스 파일체제의 최상위 디렉토리는 루트(/)이다.

 

 

 

 

따라서 이것은 리눅스의 모든 디렉토리들의 시작점이다.

 

 

 

 

, 모든 디렉토리들을 절대 경로로 표기할 때에 이 디렉토리부터 시작한다(여기에서 /rootroot 사용자의 홈 디렉토리를 의미한다). 리눅스의 경우에는 커널이 / 에 위치하는 경우가 있는데, 이 때 파일명을 vmlinux 또는 vmlinuz로 하는 것이 권장된다.

 

 

 

 

그리고 루트 이하에는 반드시 다음과 같은 디렉토리들을 포함한다.

 

 

 

 

 

 

/bin : 주요 명령 바이너리

 

/boot : 부트로더의 고정 파일들

 

/dev : 장치 파일들

 

/etc : 시스템 설정

 

/lib : 주요 공유 라이브러리와 커널 모듈

 

/media : 착탈 가능한 미디어에 대한 마운트 포인트(mount point)

 

/opt : 추가 애플리케이션 소프트웨어 패키지

 

/sbin : 주요 시스템 바이너리들

 

/srv : 시스템에 의해 제공되는 서비스들에 대한 자료

 

/tmp : 임시 파일들

 

/usr : 2차적 디렉토리 체계

 

/var : 가변 자료

 

 

 

다음 디렉토리들도 상응하는 서브 시스템이 설치된다면 루트 이하에 포함되어야 한다.

 

 

 

 

home : 사용자의 홈 디렉토리들(옵션)

 

lib(qual) : 대체 형식의 주요 공유 라이브러리(옵션)

 

root : 루트(root) 사용자를 위한 홈 디렉토리(옵션)

 

 

 

다음은 SULinux의 루트(/) 이하의 디렉토리들을 확인한 것이다.

 

 

 

 

여기에서 상기한 디렉토리들을 모두 확인할 수 있다.

 

 

 

/bin

 

 

기본적인 명령어가 저장된 디렉토리이다.

 

 

 

 

, 리눅스 시스템 사용에 있어 가장 기본적이라고 할 수 있는 mv, cp, rm, rmdir, df, sync 등과 같은 명령어들이 이 디렉토리에 존재한다.

 

 

 

 

또한 이 디렉토리에 존재하는 거의 모든 명령어들은 root 사용자 뿐만 아니라 일반 사용자들도 사용할 수 있다.

 

 

 

 

이것은 /sbin 디렉토리에 존재하는 명령어들이 대부분 root 사용자용인 것과 달리, /bin 디렉토리에 존재하는 명령어들은 root 사용자와 일반 사용자들이 공동으로 사용하는 디렉토리이다.

 

 

 

/boot

 

 

리눅스 부트로더(Boot Loader)가 존재하는 디렉토리이다.

 

 

 

 

, GRUB와 같은 부트로더에 관한 파일들(예를 들어 grub.conf)이 이 디렉토리에 존재한다.

 

 

 

 

리눅스 커널은 / 디렉토리나 /boot 디렉토리에 존재해야 한다.

 

/dev

 

 

시스템 장치(device) 파일을 저장하고 있는 디렉토리이다.

 

 

 

 

, 하드디스크 장치파일(/dev/sda), CD-ROM 장치파일(/dev/cdrom) 등과 같은 장치 파일들이 존재하는 디렉토리이다.

 

 

 

 

한때는 /dev 위치에 백도어 파일이 숨겨져 있는 장소로도 유명했다.

 

 

 

 

/dev 디렉토리는 MAKEDEV 명령을 포함하고 있는데, 이 명령어에 의해 /dev 디렉토리에 장치 파일을 생성할 수 있다.

 

 

 

 

그런데 리눅스에는 /dev/null, /dev/zero /dev/tty라고 한 특유의 장치들이 존재한다.

 

 

 

 

특히 /dev/null/dev/zero에 쓰여지는 모든 자료들은 버려지며, /dev/tty는 가상 콘솔을 말한다.

 

/etc

 

 

시스템의 거의 모든 설정 파일이 존재하는 디렉토리이며, 바이너리 파일은 존재하지 않도록 한다.

 

 

 

 

/etc/passwd(패스워드 파일), /etc/group(그룹 파일), yum 설정 파일, xinetd 설정 파일, vsftpd 설정 파일, /etc/sysconfig(시스템 제어판용 설정 파일) 등과 같이 거의 모든 시스템 관련 설정 파일이 이곳에 존재한다.

 

 

 

 

 

 

이 디렉토리 아래에는 소프트웨어의 설치에 따라 csh.login, exports, fstab, ftpusers, gateways, gettydefs, group, host.conf, hosts, hosts.allow, hosts.deny, hosts.equiv, hosts.lpd, inetd.conf, inittab, issue, ld.so.conf, motd, mtab, mtools.conf, networks, passwd, printcap, profile, protocols, resolv.conf, rpc, securetty, services, shells, syslog.conf이 존재하게 된다.

 

 

 

 

따라서 배포판에 따라 일부 파일이 없거나 약간 다를 수 있다.

 

 

 

csh.login

C 쉘 로그인을 위한 시스템 전역 설정 파일

exports

NFS 파일 시스템 접속을 위한 제어 파일

fstab

파일 시스템에 대한 정적(static) 정보

ftpusers

FTP 데몬 사용자 접속 제어 파일

gateways

라우트 되는 게이트웨이를 목록화한 파일

gettydefs

Getty에 의한 속도 및 터미널 설정

group

사용자 그룹 파일

host.conf

리졸버(resolver), 즉 도메인 이름 참조 프로그램을 설정하는 파일

hosts

호스트 이름들에 대한 정적 정보

hosts.allow

TCP wrapper에 의한 호스트 접근 파일

hosts.deny

TCP wrapper에 의한 호스트 접근 파일

hosts.equiv

rlogin, rsh, rcp에 대한 신뢰받는 호스트 목록

hosts.lpd

ldp에 대한 신뢰받는 호스트 목록

inetd.conf

inetd에 대한 설정 파일

inittab

init에 대한 설정 파일

issue

로그인 전에 표시되는 메시지 및 확인 파일

ld.so.conf

공유 라이브러리를 찾기 위한 extra 디렉토리들의 목록

motd

로그인 후 나타나는 메시지

mtab

파일 시스템들에 대한 동적 정보(마운트된 파일 시스템 정보)

mtools.conf

Mtools에 대한 설정 파일

networks

네트워크 이름들에 대한 정적 정보

passwd

패스워드 설정 파일. 홈 디렉토리 및 쉘 등에 대한 설정 포함

printcap

ldp 프린터 설정 파일

profile

sh 쉘 로그인에 대한 시스템 전역 설정 파일

protocols

IP 프로토콜 목록

resolv.conf

리졸버 설정 파일

rpc

RPC 프로토콜 목록

securetty

root 사용자 로그인에 대한 TTY 접근 통제

services

네트워크 서비스를 위한 포트(port) 이름들

shells

유효한 로그인 쉘들의 경로를 포함한 이름들

syslog.conf

syslogd에 대한 설정 파일

 

 

 

 

그리고 이곳에는 기본적으로 /etc/opt, /etc/X11, /etc/sgml, /etc/xml 디렉토리들이 있다.

 

 

 

 

 

 

/etc/opt : 추가 애플리케이션을 위한 설정 파일이 위치하는 디렉토리이다.

 

/etc/X11 : X 윈도우 시스템(X Window System)을 위한 설정 파일들이 존재하는 디렉토리이다(X 윈도우가 설치된 경우).

 

/etc/sgml : SGML을 위한 설정 파일들이 존재하는 디렉토리이다(SGML이 설치된 경우).

 

/etc/xml : XML을 위한 설정 파일들이 존재하는 디렉토리이다(XML이 설치된 경우).

 

 

 

또한 /etc 디렉토리 아래에는 FHS에 기술되어 있지는 않지만 리눅스 시스템에서 필요에 의해 존재하는 디렉토리나, 주요 서비스 소프트웨어의 설정 파일들의 저장을 위한 디렉토리가 존재하기도 한다.

 

 

 

 

이에 대해 /usr/local 디렉토리에 개별 소프트웨어를 설치하면서 /usr/local 디렉토리 아래에 해당 소프트웨어의 파일들과 함께 해당 소프트웨어의 설정 파일을 함께 설치하기도 한다.

 

 

/etc/mail : 이 디렉토리는 sendmail.cf.access 파일 등 sendmail 프로그램의 설정 파일들이 존재하는 디렉토리이다.

 

/etc/ssh : SSH 서비스를 위한 각종 설정 파일들이 존재하는 디렉토리이다.

 

/etc/squid : Squid 프락시 서버의 설정 파일들이 저장된 디렉토리이다.

 

/etc/skel : 계정 사용자 생성 시의 초기화 파일들이 저장된 디렉토리이다(useradd에서 사용된다).

 

 

/etc/rc.d : 실행 레벨별 부팅 스크립트 파일들이 존재하는 디렉토리이다.

 

/etc/rc.d/init.d : 시스템 초기화 파일들의 실제 파일들이 존재한다.

 

 

 

 

/etc/rc.d 아래에는 이외에도 각 실행 레벨별로 /etc/rc.d/rc3.d와 같은 디렉토리가 있고 이 디렉토리에 시스템 부팅 시에 실행하거나 실행하지 않을 서비스들에 대한 파일들을 저장한다.

/etc/pam.d : PAM 설정 정보파일들이 저장된 디렉토리이다.

/etc/httpd : RPM으로 설치된 Apache(아파치) 설정 파일들(httpd.conf )이 저장된 디렉토리이다.

 

/etc/cron.d, /etc/cron.daily, /etc/cron.hourly, /etc/cron.monthy, /etc/cron.weekly : 모두 cron 프로그램의 설정 파일들이 존재하는 디렉토리이다.

 

/etc/xinetd.d : xinetd 수퍼 데몬에 의해 서비스되는 서비스 설정 파일이 존재한다.

 

/etc/yum: yum : 설정 관련 파일들이 존재한다.

 

/etc/sysconfig : 시스템 제어판 설정 파일들이 존재한다.

 

/lib

 

커널 모듈 파일과 라이브러리 파일들이 존재한다.

 

 

 

 

, 커널이 필요로 하는 커널 모듈 파일들과 프로그램(C, C++ )에 필요한 각종 라이브러리 파일들이 존재하는 디렉토리이다.

 

 

 

 

리눅스의 경우에는 /lib64/lib32로 하드웨어 아키텍처에 따라 구분하여 공유 라이브러리를 저장한다.

 

 

 

 

보통 64비트 라이브러리는 /lib64 디렉토리에 저장하고 32비트 라이브러리는 /lib 디렉토리에 저장한다.

 

 

/media

 

DVD, CD-ROM, USB 메모리 스틱과 같은 탈부착이 가능한 장치들의 마운트 포인트로 사용되는 디렉토리이다.

 

 

 

 

이에 대해 리눅스 운영체제는 /mnt 디렉토리가 비슷한 용도로 사용된다.

 

 

 

 

, /mnt 디렉토리도 탈부착이 가능한 장치들의 마운트 포인트로 사용된다.

 

 

 

 

 

/opt

 

추가적인 소프트웨어를 설치하는 디렉토리이다.

 

 

 

 

그러나 실제로는 대부분의 추가적인 소프트웨어들이 /usr 디렉토리 아래에 설치된다.

 

 

/sbin

 

 

시스템 관리를 위해 사용되는 유틸리티들과 기타 root만을 위한 명령어들은 /sbin, /usr/sbin /usr/local/sbin에 저장된다.

 

 

 

 

이 중에서 /sbin 디렉토리는 /bin 디렉토리의 바이너리들에 더하여 시스템을 부팅, 복원, 복구 및 수리하기 위해 중요한 바이너리들을 포함한다.

 

 

 

 

/usr 디렉토리가 마운트 된 이후에 실행되는 프로그램은 일반적으로 /usr/sbin에 위치한다.

 

 

 

 

 

/usr/local/sbin 디렉토리에는 관리자에 의해 현재 관리 컴퓨터에만 설치하는 시스템 관리 프로그램인 경우에 해당 바이너리가 설치된다.

 

 

 

 

/sbin 디렉토리에는 dumpe2fs, e2fsck, ldconfig, ifconfig, ethtool, halt, shutdown 등과 같은 시스템 명령어들이 존재하며, 이 명령어들은 주로 시스템 관리자들이 사용한다.

 

 

/tmp

 

일명 공용 디렉토리”, 즉 시스템을 사용하는 모든 사용자들이 공동으로 사용하는 디렉토리이다.

 

 

 

 

예를 들어 mysql에서 사용하는 mysql.sock 등과 같은 소켓 파일, 아파치에서 사용하는 세션 파일(session file) 등이 생성되기도 한다.

 

 

 

 

, 시스템의 일반적인 사용자 또는 각종 프로세스에서 사용하는 파일들이 생성되는 위치이다.

 

 

/usr

 

/usr 디렉토리는 파일 체계의 2차적인 주요 부분인데, 시스템이 아닌 일반 사용자들이 주로 사용하는 디렉토리이다.

 

 

 

 

/usr 디렉토리에는 다음과 같은 디렉토리들이 존재한다.

 

/usr/bin : 대부분의 사용자 명령어가 포함되어 있다.

 

 

 

 

perl, python, tclsh, wish, expect, chsh, cpp, crontab, du, find 등과 같이 일반 사용자들이 사용할 수 있는 명령어들은 /usr/bin에 위치한다.

 

 

 

 

시스템 관리자 전용 명령어를 제외한 거의 모든 일반적인 리눅스 명령어들이 존재하는 위치가 /usr/bin 디렉토리이다.

 

 

 

/usr/include : C 또는 C++ 프로그램에 의해 포함되는 헤더 파일들, 즉 시스템이 일반적으로 사용하는 include 파일들이 존재한다.

 

 

/usr/lib : 프로그래밍과 패키지들을 위한 라이브러리들이 존재하는 디렉토리이다.

 

 

 

 

이것은 사용자들이나 쉘 스크립트에 의해서 직접적으로 실행되는 것으로 의도되지 않는 오브젝트 파일, 라이브러리 및 내부 바이너리들을 포함한다.

 

 

 

 

 

/usr/local : 로컬 디렉토리 체계이며, 해당 컴퓨터에서 사용할 소프트웨어를 시스템 관리자가 설치하는 디렉토리이다.

 

 

 

 

/usr의 소프트웨어를 대체하거나 업그레이드하기 위해 설치하는 것이 아니라면 시스템에 설치되는 소프트웨어는 이 디렉토리에 설치되어야 한다.

 

 

 

 

이 디렉토리는 호스트의 한 그룹에 대해 공유가 가능한 프로그램들과 자료를 위해 사용된다.

 

 

 

 

예를 들어 이 디렉토리는 MySQL, Apache, proftpd, PHP 등과 같은 어플리케이션들의 소스 코드를 컴파일하여 설치할 때 사용된다.

 

 

 

 

그리고 이 디렉토리에는 bin, etc, games, include, lib, man, sbin, share, src의 하위 디렉토리가 존재한다.

 

 

 

 

 

/usr/sbin : 시스템 관리자에 의해서 사용되는 비중요 시스템 바이너리들이 존재한다.

 

 

 

 

시스템 수리, 시스템 복구, /usr 마운팅을 위해 필요한 시스템 관리 프로그램들 또는 다른 주요한 기능들이 /sbin을 대신하여 존재한다.

 

 

 

 

/usr/share : 모든 읽기만 가능한 아키텍처 비의존 자료들이 존재한다.

 

 

 

 

manmisc 디렉토리를 포함하고 있고, 관련 소프트웨어의 설치 여부에 따라 dict, doc, games, info, locale, nls, sgml, terminfo, tmac, xml zoneinfo 디렉토리가 포함된다.

 

 

 

 

/usr/share/man 디렉토리는 명령어들의 도움말을 주는 매뉴얼(manual) 페이지 디렉토리이며, 이 디렉토리에는 시스템에서 사용하는 모든 맨 페이지(man page) 파일이 존재한다.

 

 

 

 

이외에도 /usr/share/info/usr/share/doc도 문서 자료들이 저장되는 디렉토리이다.

 

 

 

 

 

이외에도 다음과 같은 디렉토리들이 존재할 수 있다.

 

/usr/X11R6 : X 윈도우 시스템 버전 116번째 릴리즈 및 관련 파일들이 존재한다(최근 리눅스 배포판에는 사용하지 않는 디렉토리이다.

 

 

 

 

X 윈도우 시스템을 위해 /usr/share/X11 디렉토리가 존재한다).

/usr/games : 게임 및 교육 라이브러리들이 포함되어 있다.

 

 

 

 

 

/lib<qual> : 대체 형식의 라이브러리들로서, /usr/lib와 동일한 역할을 수행한다.

/usr/src : 소스코드가 포함된 디렉토리이다.

 

 

 

 

리눅스의 경우에 리눅스 커널의 소스코드가 /usr/src/linux 디렉토리에 존재한다.

 

 

/var

/var 디렉토리는 시스템 운용 중에 생성되었다가 삭제되는 자료, 즉 가변 자료 파일들을 저장하기 위한 디렉토리인데, 이것들은 스풀 디렉토리와 파일, 관리 및 로깅 자료 및 일시적이고 순간적인 파일들이다.

 

 

 

 

거의 모든 시스템 로그 파일은 /var/log에 저장되고, DNSzone 설정 파일은 /var/named에 저장되며, 메일 파일은 /var/spool/mail에 저장되고, cron의 설정 파일은 /var/spool/cron 디렉토리에 각각 저장된다.

 

 

 

 

/var 디렉토리 하위에는 cache, lib, local, lock, log, opt, run, spool, tmp 디렉토리가 포함된다.

 

 

 

 

그리고 account, crash, games, mail, yp는 관련 소프트웨어가 설치되는 경우에 존재한다.

 

/var/tmp : /tmp 디렉토리와 같은 공용 디렉토리, /tmp 디렉토리와 /var/tmp 디렉토리의 퍼미션은 1777로서 sticky bit가 설정되어 있다.

 

 

 

 

리눅스 운영체제에서 공용 디렉토리는 이 둘 뿐이다.

 

 

/var/log : 시스템 로그 파일(messages, secure, xferlog 파일 등)이 저장되는 디렉토리이다.

 

/var/ftp : vsftp 등과 같은 FTP 서비스를 홈 디렉토리이다.

 

/var/named : BIND, DNS에서 사용하는 zone 파일들이 저장되는 디렉토리이다.

 

/var/spool/mail : 각 계정 사용자들의 메일 파일이 저장되는 디렉토리이다.

 

/var/spool/lpd : 프린트를 하기 위한 임시 디렉토리(스풀링 디렉토리)이다.

 

/var/spool/mqueue : 발송을 위한 메일 임시 저장 디렉토리이다.

 

/var/spool/cron : 각 사용자들의 cron 설정 파일들이 저장된 디렉토리이다.

 

/var/spool/at : atd, 즉 예약작업에 관한 파일들이 저장되는 디렉토리이다.

 

 

 

/home

 

사용자의 홈 디렉토리이다.

 

 

 

 

useradd 명령어로 새로운 사용자를 생성하면 대부분 사용자의 아이디(ID)와 동일한 이름의 디렉토리가 /home 디렉토리 아래에 생성된다.

 

 

 

 

 

예를 들어 /home/kgbkgb라는 사용자의 홈 디렉토리이다.

 

 

 

 

이에 대해 시스템의 최고 관리자인 root 사용자의 홈 디렉토리는 /root 디렉토리이다.

 

/proc

 

커널과 프로세스 정보를 위한 가상 파일 시스템이다.

 

 

 

 

리눅스 운영체제는 /dev/kmem이나 다른 유사한 방법들 보다는 proc 파일 시스템을 프로세스와 시스템 정보를 다루기 위한 사실상 표준적 방법으로 사용한다.

 

 

 

 

 

이 디렉토리 아래에는 현재 메모리에 존재하는 모든 작업들이 파일 형태로 존재한다.

 

 

 

 

디스크상에 실제 존재하는 것이 아니라 메모리상에 존재하기 때문에 가상 파일 시스템이라고 한다.

 

 

 

 

실제 운용상태를 정확하게 파악할 수 있는 중요한 정보를 제공하기도 한다.

 

 

 

 

여기에 존재하는 파일들 가운데 현재 실행중인 커널의 옵션값을 즉시 변경할 수 있는 파라미터 파일들이 존재하기도 한다.

 

 

/lost+found

 

이것은 FHS에 포함되는 디렉토리는 아니지만, ext2, ext3, ext4 등의 파일 시스템을 사용하는 경우에 해당 파티션에 자동으로 생성된다.

 

 

 

 

따라서 이것은 최상위 디렉토리인 / 디렉토리에만 존재하는 것이 아니라 파일 시스템마다 존재할 수 있다.

 

 

 

 

이 디렉토리는 fsck, e2fsck 등과 같은 파일 시스템 체크 및 복구 유틸리티 실행 후에 주로 생성되는 것으로서 복구되지 않은 채로 블록(block)만 존재하는 파일, 즉 연결이 끊어진 inode 들이 숫자 파일 형태로 존재하는 곳이다.

 

 

 

 

 

숫자 형태로 존재하는 파일들은 mv 명령어로 파일 이름만 바꾸면 바로 복구될 수 있다.

 

 

 

 

, 이 위치에 존재하는 텍스트 파일의 경우에는 file, cat, vi 등의 명령어로 파일의 내용 등을 확인한 후에 복구가 가능하다.

 

 

 

 

이 디렉토리를 삭제해도 시스템에는 아무런 영향이 없기는 하지만, 꼭 필요한 파일이 이 디렉토리에 복구되지 않은 채로 남아 있을 수 있으므로 반드시 확인 후에 삭제하도록 한다.

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,035 명
  • 현재 강좌수 :  35,791 개
  • 현재 접속자 :  181 명