U E D R , A S I H C RSS

Linux/디렉토리용도


1. 서문

리눅스를 처음 설치를 하면 윈도우와 많이 다른 디렉토리 구조에 지레 겁을 먹기 마련이다.
(적어도 나의 경우에는 그랬다)

도대체 윈도우에 있던 다른 드라이브로는 어떻게 이동해야하며, 어떻게 CD를 읽어야하는지 전혀
모르던 시절이었으니 당연히 그랬다.
또 OS만 깔았는데 루트디렉토리에 왜 그렇게 디렉토리가 많은지 도저히 어떤 용도로 쓰이는지를
모르겠었다.
윈도우의 Windows, ProgramFiles 만으로 이루어진 그 구조가 왜 그렇게 그립던지 ㅠ.ㅠ

사실 윈도우도 파고들어가면 그냥 쓰면서는 모르는 기능들이 굉장히 다양하다. 그래서 서버OS인가 보다. -_-;
''(어둠의 경로를 통해서 학원 강의 파일을 들어보면 이놈의 중급 웹 서버관리 과정은 공룡책에 나오는
내용을 윈도우에서 강의하는거 같다는 기분이다. 덕분에 한 2장 보면 파일을 지우는 나 -_-;)''

draft는 웹상의 내용을 기본으로 내가 추가할 만한 부분을 추가함. (그런게 있을지나 모르겠네.. 너무 좋은 내용이 많다)

ps. 내가 아는 부분은 루트에 존재하는 디렉토리의 용도에 조금 더한 수준이라서 필요하다면 참고서적을 참고하겠다.
참고) Running Linux/매트 웰시, 라 카우프만, 칼레달하이머 저, Oreilly
''이 책은 배포판에 의존적인 내용이 아니라 말그대로 리눅스를 그냥 쓰는 방법을 위주로 나오기 때문에
그래도 기본적은 프로그램을 깔정도가 되면 보는 것이 좋을듯하다. 처음에 이걸로 보다가 미치는줄 알았다''

2. 리눅스 디렉토리

리눅스의 디렉토리 구조를 이해하기 전에 마운트라는 개념을 이해해야할 필요가 있다. 리눅스는 모든 파티션을 /(이하 루트)에 포인터를 통해 연결한 마운트의 개념을 통해서 접근을 할 수 있다. 따라서 모든 디렉토리를 각기다른 장치 각기 다른 파티션에 나누어 넣어서 따로 보관할 수 있으며 데이터가 직접 보관되는 디스크를 따로 마운트해서 나중에 시스템을 다시 설치할때에 그 파티션만 지우지 않고 후에 마운팅하는 용도로 사용이 가능하다.

2.1. /

  • 마운트 되는 리눅스 파일 시스템이 있는 최상위 디렉토리
  • 시스템의 근간을 이루는 가장 중요한 디렉토리
  • 파티션 설정 시 반드시 존재하여야 함
  • 절대경로의 기준이 되는 디렉토리
    • 절대경로 - / 디렉토리 기준 예) /usr/local
    • 상대경로 - 현재 작업 디렉토리 기준 예) ./local'''

2.2. /bin

  • 리눅스의 기본 명령어(binary)들이 들어있는 디렉토리
    • 시스템을 운영하는데 기본적인 명령어들이 들어 있음.
  • su, tar 등등의 기본적인 명령어들이 저장되어 잇는 디렉토리이다.

2.3. /sbin

  • 시스템 관리에 관련된 실행 명령어들이 들어있는 디렉토리
  • 시스템 점검 및 복구 명령, 시스템 초기 및 종료 명령 등 시스템 관리에 관련된 실행파일들 존재.'''
  • reboot, modprobe, insmod 등등의 root 가 시스템을 관리하는데 필요한 명령어들이 존재한다.

2.4. /lib

  • 프로그램들이 의존하고 있는 라이브러리 파일들 존재.
  • /lib/modules : 커널 모듈 파일들 존재.
  • 대부분의 라이브러리들은 링크로 연결되어 있음.

lib 디렉토리에는 컴파일러를 통해서 혹은 만들어진 파일들이 잠조하는 라이브러리들이 존재한다. 또한 하부에 modules 디렉토리에 존재하는 커널 모듈은 특수장치를 설치했거나 제거했을 경우 커널이 자동적으로 모듈을 올리지 못할 경우 insmod, rmmod, modprobe 명령어를 통해서 이런 모듈을 다룰때 이용된다. 커널 모듈의 경우 2.4커널에서는 *.o, 2.6 커널에서는 *.ko의 확장자를 가지고 있다.

2.5. /proc

  • 시스템에 대한 정보를 제공하는 가상 파일 시스템.
  • 커널의 어떤 기능을 제어할 수 있는 역할을 가지고 있음.
  • 대부분 읽기 전용이나, 일부 파일중에는 쓰기가 가능한 파일이 존재하는데 이러한 파일들에 특정 값을 지정하면 커널 기능이 변하게 됨.
  • 이 디렉토리 내에 있는 파일을 cat 명령을 이용하여 보면 시스템 정보를 확인 할 수 있음.
    • 예) 인터럽트 정보 확인 ---> cat /proc/interrupts'''

2.6. /etc

  • 시스템 환경 설정 파일이 있는 디렉토리
  • 네트워크 관련 설정파일, 사용자 정보 및 암호정보, 파일 시스템 정보, 보안파일, 시스템 초기화 파일등 중요 설정 파일들의 위치한 디렉토리
    • /etc/CORBA : Common Object Request Broker Architecture (COBRA)에 관한 파일이 들어있음.
    • /etc/X11 : 엑스 윈도우 설정에 관련된 파일들이 있음.
    • /etc/cron.d : crontab 명령의 설정파일이 있음.
    • /etc/cron.daily : 매일 작동하게 하는 crontab 스크립트 파일이 존재.
    • /etc/gnome : GTK+ 정의파일들이 있음.
    • /etc/httpd (/etc/apache2) : 아파치 웹 서버의 설정 및 로그파일이 있음.
    • /etc/logrotate.d : logrotate 설정 파일들이 있음.
    • /etc/mail : 센드메일과 관련된 파일이 있음.
    • /etc/ppp : ppp 설정에 관련된 파일들이 있음.
    • /etc/profile.d : 쉘 로그인 하여 프로파일의 실행되는 스크립트에 대한 정의가 있음.
    • /etc/rc.d : 시스템 초기화와 관련된 스크립트가 존재.
    • /etc/samba : 삼바에 관련된 파일들이 있음.
    • /etc/security : 터미널 보안에 관련된 설정이 있음.
    • /etc/skel : 새로운 사용자를 추가할 때 자동적으로 생성되는 디렉토리와 파일이 있음.
    • /etc/squid : squid 프록시 서버에 관련된 파일이 있음.
    • /etc/ssh : secure shell 설정 파일이 있음
    • /etc/sysconfig : 시스템과 네트워크 설정을 담고 있음.
    • /etc/xinetd.d : 슈퍼데몬 xinetd.d의 서비스 영역을 설정하는 디렉토리.

아파치를 비롯한 모든 서버의 환경설정 파일이 관리 되는 곳이다. 물론 사용자가 직접 바이너리로 설치했을 경우에는 이 곳에 위치하지 않을 수도있다. 그러나 대부분 패키지 관리자를 통해서 설치된 프로그램의 경우 이곳에서 설정이 가능하다. 직접 설치를 하는 경우라면 X11, apache2, init.d, rc.*, skel, xinitd.d 디렉토리를 많이 다루게 된다.

2.7. /var

  • 가변 자료 저장 디렉토리
  • 시스템 운영중에 시스템 자료 데이터가 변경될 때 변경된 자료들이 저장되는 곳.
  • 주로 시스템 작동기록(log)들을 저장.
  • /var/log : 시스템에 발생된 일들에 대한 기록 파일이 있음
  • /var/named : 네임서버 설정 파일들 존재
  • /var/spool/mail : 수신 메일을 사용자 명으로 기록하는 디렉토리'''

바이너리 파일의 경우가 아니라 실제 시스템이 운영되면서 변화하는 자료를 저장하는 부분이다. 웹 서버의 기본 루트디렉토리가 보통 이곳에 존재한다. (alias 된경우는 예외) 일반적으로 로그가 위치하기 때문에 중요한 곳이다. 시스템에 보안 관계된 문제나 크래쉬가 발생했을 경우 로그 분석을 통해서 원인을 분석한다.

2.8. /usr

  • 일반 사용자들을 위한 대부분의 프로그램 라이브러리 파일들이 위치.
  • /usr/bin : 응용 프로그램의 실행 파일이 위치
  • /usr/sbin : 주로 네트워크 관련 실행 명령어와 실행 데몬들을 많이 포함하고 있음.
  • /usr/X11R6 : X-window 시스템에 관련된 파일 존재.
  • /usr/include : 기본 C 라이브러리 헤더 파일과 각종 라이브러리 헤더파일들이 있음.
  • /usr/lib : /usr/bin과 /usr/sbin에 있는 실행 바이너리를 실행하기 위한 라이브러리 존재.
  • /usr/src : 프로그램소스 및 커널 소스들이 보관되어 있는 곳.
  • /usr/man : 매뉴얼 페이지가 담겨있는곳.
  • /usr/local : 새로운 프로그램들이 설치되는 곳(windows의 Program Files 와 유사)

보통 바이너리 프로그램을 설치할 경우 /usr/local 에 설치하여 일관성을 유지한다. jdk등을 설치할 때에고 관습상 /usr/local 에 설치를 해주고, 배포판이 패키지 형태로 jdk등을 제공할때에는 배포판을 통해 설치하는 것이 패키지의 통일성 및 관리의 편의성 면에서 좋다.

2.9. /mnt

'''- 다른 장치들을 마운트 할때 일반적으로 사용하는 디렉토리
- 다른 디렉토리를 사용하여도 됨.'''
다른 파티션의 장치들을 마운트하는 관례상의 디렉토리이다.

2.10. /home

'''- 일반 사용자의 홈 디렉토리가 만들어 지는 디렉토리
- 사용자 계정을 만들면 게정과 같은 이름으로 새로운 사용자 디렉토리가
/home 디렉토리의 하위 디렉토리로 생성됨.
예) test 사용자 추가 후 홈 디렉토리 확인하기.
root@test />$adduser test
root@test />$cd /home
root@test home>$ls

test <-- 디렉토리 생성
'''
root계정이외의 계정에 할당되는 곳이다. 서버의 사용자들을 이 디렉토리 및에
자신만의 디렉토리를 할당받고 웹 서비스를 이용하게된다.

2.11. /boot

  • 부팅에 핵심적인 커널 이미지와 부팅 정보 파일을 담고 있는 디렉토리
  • /etc/lilo.conf에서 지정한 커널 부팅 이미지 파일이 들어 있으며 부팅시 매우 중요한 디렉토리

이 디렉토리에는 커널의 바이너리 이미지가 위치한다. 보통은 부트로더를 /vmlinuz 로 부팅하게 설정하고, 현재 내가 쓰고 싶은 커널의 심볼릭 링크를 /vmlinuz 로 설정하여서 이용한다. 이 경우 커널의 버전업이나 테스팅을 위해서 커널의 버전이 필요할 경우 관리상 용이하다.

2.12. /root

  • 슈퍼유저(root) 사용자의 홈 디렉토리.
  • / 와 /root 디렉토리는 부르는 이름은 같지만 서로 다름.'''

3. 실제 설치할때

실제 파티션을 분할할때에는 어떤 목적으로 프로그램을 이용하는지에 대한 이해가 필요하다. 처음 설치하는 사용자의 경우에는 전체 파티션을 단일 파티션으로 잡고 설치를 해도 무방하지만 다중 사용자 계정을 지원할 용의가 있는 경우에는

/ 500M/30G 커널 이미지, 각 프로그램의 설정파일등 크지 않은 파일들이 저장된다.
/usr 8G/30G 실제 응용프로그램의 대부분이 설치되므로 넉넉하게 설정하는 것이 필요하다.
/var 5G/30G 서버 시스템의 운영 상황에 대한 로그들 (syslogd, apache etc) 을 유지해야하기 때문에 마찬가지로 넉넉하게 잡는 것이 필요하다.
/home 10G/30G 사용자가 몇명이나 이용할지에 대해서 대략적인 추정을 통해 할당한다. quota 기능을 이용하면 각 사용자별로 할당되는 공간을 지정가능
/tmp 500M/30G 임시파일들이 저장되는 곳이다. Oracle DB의 경우 이 파티션이 적을 경우 설치시 문제가 된다고 함.
swap 1.5G/30G 보통은 메인 메모리의 2배정도를 잡는 다고 하지만 적당한 수준에서 잡는 것이 좋다. 메인 메모리가 충분하다면 없어도 그만

의 5가지 항목으로 각기 다른 파티션을 분할하는 것이 좋다.
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:39
Processing time 0.0417 sec