티스토리 뷰

Study/Linux

[Linux] FHS를 이루는 폴더들 (1)

생각많은 소심남 2016. 4. 27. 00:28


2016/04/25 - [About Study/Linux] - [Linux] Filesystem Hierarachy Standard(FHS)

이전 글에서 다뤘던 FHS의 구성 폴더와 그 목적에 대해서 조금더 다뤄보고자 한다.


/ (or /root)

root partition, 혹은 root directory는 시스템이 booting하는데 필요한 필수적인 utility들을 가지고 있어야 하며, 정상적으로 부팅이 된 이후에는 하위 directory나 partition들을 mount시켜야 한다. 그렇기 때문에 여기에는 앞에서 이야기 했던 utility들, booting시 필요한 configuration 파일들, 또한 이미지를 일정한 memory address에 load시켜주는 bootloader 같은 startup과 관련된 data들이 들어있다고 보면 될거 같다.


/bin

보통 여기에는 시스템 관리자나 그외 권한이 없는 사람이 시스템을 구동하는데 필요한 프로그램이나 스크립트가 들어있는 폴더이다. 그리고 일반적으로 이 폴더에는 또 다른 subdirectory가 존재하지 않는다. 그런데 아마 안드로이드나 리눅스를 많이 살펴본 사람이라면 /bin 뿐만 아니라 /sbin도 있고, /usr/bin 도 있는 것을 볼수 있었을텐데 폴더마다 또 차이가 있다.

- /bin : 일반적으로 single user mode나 뭔가의 오류가 발생해 repair해야 될 상황이 있을때 root내에서 필요한 프로그램들이 담겨있는 directory이다.

- /sbin : sbin이란 system bin이라는 말인데, 일반 사용자들을 잘 쓰지 않을 boot 관련 프로그램들이 담겨있는 directory이다.

- /usr/bin : 일반적으로 많이 사용하는 프로그램들이 주로 담기 폴더이며, 딱히 권한이 있지 않더라도 유저들이 자유롭게 실행시킬 수 있는 프로그램들이 담겨 있다.

이외에도 /usr/local 하위에도 bin 혹은 sbin 폴더가 존재할 수도 있는데, 이는 locally하게 존재하냐 아니냐의 차이일 뿐 바로 위에서 설명한 각 폴더의 개념과 거의 동일하다. 참고로 /bin에도 있고, /usr/bin에도 있는 프로그램이 있을 수도 있는데, 이는 그 실체가 두개 다 존재하는 것이 아니라 보통 하나의 symbolic link, 다시 말해 바로가기식으로 되어 있는 경우가 있다. 

 일반적으로 /bin에 들어있는 프로그램으로는

cat, chgrp, chmod, chown, cp, date, dd, df, dmesg, echo, false, hostname, kill, ln, login, ls, mkdir, mknod, more, mount, mv, ps, pwd, rm, rmdir, sed, sh, stty, su, sync, true, umount, and uname.

들이 있고, 아마 linux를 많이 사용한 사람이라면 익숙할만한 command일 것이다.


/boot

여기에는 시스템이 booting하는데 필요한 필수적인 파일들이 들어있는데, 물론 여러가지가 있을 수도 있겠지만, 가장 기억해야 될게 두가지 있다. 일단 ubuntu에는 이렇게 되어 있다.

 

내가 이야기 하는 두가지는 initramfs(혹은 initrd) 라고 불리는 ramdisk와 vmlinuz 라는 것이다. initramfs도 일종의 file system인데, system이 startup되는 동안 memory로 load되어야 할 데이터들이 저장되어 있는 뭉텅이다. 물론 정상적으로 booting이 끝난 후에는 우리가 알고 있는 root directory로 mount되는 것으로 알면 좋을거 같다.

 vmlinuz란 일종의 linux kernel image다 아마 위 그림을 봐도 좀 의아한 사람이 있을 수 있다. 생각보다 linux kernel이 명색에 비해서 size가 작아 보이기 때문이다. 그도 그럴것이 vmlinuz 자체가 compressed된 형태, 즉 압축된 형태로 존재하는 kernel image이기 때문이다. kernel code내에는 decompress_kernel()이라는 함수가 존재하는데 그곳에서 이 vmlinuz이 풀린다. 그걸 보고 싶으면 booting시 kernel log를 살펴보면 된다. 그러면 제일 처음 line에

Decompressing Linux... done 

Booting the kernel.

라고 뜨는 것을 볼 수 있는데, 바로 여기서 vmlinuz의 압축이 풀리게 된다.

물론 이것 이외에도 kernel compile시 설정값들이 저장되는 config 파일이나, kernel내에서 쓰이고 있는 variable이나 function에 대한 정보, 보통 symbol이라고 하는데, 이 symbol table이 담겨 있는 System.map도 존재한다. 지금 소개한 두가지 파일은 booting시 쓰이는게 아니라 kernel debugging시 쓰는 파일이다. 이밖에도 distribution에 따라서는 master boot sector같은 정보도 이 /boot에 담겨 있을 수 있다.

 

/dev

/dev 폴더에는 special device file(혹은 device node) 들이 들어 있는 이 파일 각각은 kernel이 빌드됬을때 생성된 device나 system에 연결되어 있는 device를 의마한다. 가령 SD 카드가 삽입되었을 경우 정상적으로 해당 device driver가 load되었다면 이 폴더 밑에 mmcblkxxxx 라고 file이 생성되기도 하고, serial port가 연결되어 있는 경우 ttySx 라고 device node가 이 폴더 밑에 생성된다. device node에서의 I/O가 어떤식으로 이뤄지느냐에 따라서 character (byte-stream), block I/O 라고 구분짓기도 한다. 참고로 I/O가 발생하더라도 device node로 생성되지 않는 경우가 있는 Network device 같은 게 그런 예이다.

 사실 /dev 밑에 각 device node가 생성되는 이유는 이런 Linux distribution들이 udev라고 하는 형식을 사용하기 때문이다.

 

/etc

 이 폴더에는 보통 local로 configuration 하는데 필요한 설정 파일 몇 startup 관련 script들이 들어있다. 아마 이전포스트에서 잠깐 다룬적도 있지만 system startup 시에도 제일 먼저 user level에서 실행되는 script가 바로 /etc/init.d/rcS 인데, 이것도 cat을 해서 살펴보면 일종의 shell syntax로 된 script임을 알수 있다. 어차피 rcS 이름 자체도 풀어 쓰면 run control script이기도 하다. 그리고 보통 ls를 통해서 파일을 살펴보면 확장자가 .conf로 되어 있는데 이게 일종의 configuration 파일이다. 물론 cat을 해서 살펴보면 어떤 환경이 설정되는지를 확인할 수 있다.

 

/home

어쩌면 가장 익숙한 폴더이며, 사용자가 제일 처음 login을 했을때 접근하게 되는 일종의 user directory이다. 여기에는 개인적인 configuration, data, 실행 파일들이 여기에 들어 있다. 예를 들어 bash shell의 configuration file인 bashrc나 vim configuration인 vimrc, ssh의 public key 같은 경우는 개개인마다 다를 수 있으므로 이런 내용들이 그런 폴더에 저장된다. 그런데 이 home의 개념은 보는 사람의 관점에서 조금 다르게 볼 수 있다. 예를 들어 root로 login한 사람이라면, root 하위에 있는 /home은 단순히 /home이라는 subdirectory일 뿐이고, root의 home directory는 /root (혹은 /) 가 된다. 반대로 일반 user로 login을 했다면 이사람에게 home directory는 /home 하위에 자신의 ID로 정의된 directory이다.  또한 이런 home directory에 대한 정의는 보통 $HOME 이라는 환경변수에 정의되어 있다. 만약 자기의 home directory를 바꾸고 싶으면 자신이 원하는 directory를 해당 환경변수에 대입해주면 된다.

'Study > Linux' 카테고리의 다른 글

[Linux] Device node  (6) 2016.05.03
[Linux] Kernel Modules  (0) 2016.04.29
[Linux] FHS를 이루는 폴더들 (2)  (0) 2016.04.27
[Linux] Filesystem Hierarachy Standard(FHS)  (0) 2016.04.25
[Linux] Service  (0) 2016.04.24
[Linux] SysVinit runlevel  (0) 2016.04.22
[Linux] init process  (0) 2016.04.21
댓글