Linux

Linux 파일 시스템 #2

Namiz_IT 2024. 7. 18. 23:19

 

 리눅스를 사용하다보면 여러 가지 디렉토리(폴더)를 보게 된다. 처음에는 이런 이름들이 어디에 무엇이 있는지 헷갈릴 수도 있다. 오늘은 리눅스 시스템의 핵심적인 몇가지 디렉토리들을 살펴본다.

 

리눅스 기본 폴더들

1. /bin

 /bin 디렉토리는 실행 가능한 프로그램인 **바이너리(binaries)**를 저장하는 곳이다. 터미널에서 사용하는 ls 명령어도 바로 이 디렉토리 안에 위치해 있다. 파일이나 디렉토리 만들기, 삭제, 이동 등 기본적인 파일 관리 작업에 필요한 도구들이 여기 있다. 파일 시스템 다른 곳에도 bin 디렉토리가 있지만, 여기서 언급하고 있는 /bin 폴더는 root 바로 아래에 있는 것이다.

 

2. /boot

 시스템 부팅에 필요한 파일들이 저장되어 있는 디렉토리이다. 말할 것도 없이 이 곳은 절대 건드리지 말아야 한다! 여기 있는 파일을 손상시키면 리눅스가 실행 되지 않을 수도 있고 복구하기도 무척 복잡합니다. 하지만 실수로 시스템을 파괴하는 것에 대해서는 너무 걱정할 필요가 없다. 이런 작업은 일반 사용자 권한으로는 불가능하기 때문이다.

 

3. /dev

 장치 파일들이 모여 있는 디렉토리이다. 이 파일들 중 많은 부분은 시스템 부팅 시 또는 장치를 연결할 때 생성된다. 예를 들어 웹캠이나 USB 메모리를 컴퓨터에 연결하면 이 디렉토리에 해당 장치를 나타내는 파일이 자동으로 생성된다.

 

4. /etc

 이름부터 좀 어려운 디렉토리죠? /etc는 초기 유닉스 시스템에서 유래된 이름이다. 관리자가 어디에 둘지 정의하기 어려운 시스템 파일들을 모아둔 곳이었기 때문에 "기타 등등"을 의미하는 etc로 정하였다.

 하지만 요즘에는 "Everything to configure"의 약어라고 생각하는 게 더 정확하다. 시스템 이름, 사용자 정보, 네트워크 설정, 하드디스크 파티션 연결 방법 등 대부분의 시스템 설정 파일들이 여기에 저장되어 있다. 리눅스를 처음 사용한다면 이 디렉토리는 건드리지 않고 시스템 작동 방식에 대한 이해를 깊이 하는 것이 좋다.

 

5. /home

 사용자의 개인 디렉토리가 위치하는 곳이다. 보통 /home 디렉토리 안에는 각 사용자마다 별도의 디렉토리가 생성되어 있으며, 개인 파일들을 저장할 수 있다.

 

6. /lib

 응용 프로그램들이 사용하는 코드를 담고 있는 라이브러리 파일들이 저장되어 있는 디렉토리이다. 이 라이브러리 파일들은 프로그램 창을 표시하거나, 프린터와 같은 장치를 제어하는 데 필요한 코드 조각들을 포함하고 있다. 파일 시스템 상에는 여러 개의 라이브러리 디렉토리가 있지만, 루트 디렉토리(/) 바로 아래에 있는 이 디렉토리는 특히 중요하다. 여기에는 커널 모듈이라는 파일들이 있는데요, 이 모듈들은 그래픽 카드, 사운드 카드, 무선랜 카드 등 하드웨어를 사용할 수 있게 해주는 드라이버 역할을 한다.

 

7. /media

 외부 저장 장치를 연결하고 컴퓨터에서 사용하려고 할 때 자동으로 연결되는 곳이야. 이 폴더는 다른 대부분의 것들과 달리 1970년대와는 별 관계가 없다. 컴퓨터가 실행 중일 때 플래시 드라이브, USB 하드 디스크, SD 카드 외  SSD 등을 삽입하고 인식하는 기능은 비교적 최근에 나왔기 때문이다.

 

8. /mnt

하지만 /mnt 폴더는 옛날 컴퓨터 시대의 흔적이라고 할 수 있다. 이 폴더는 수동으로 저장 장치 또는 파티션을 연결하는 데 사용되었지만, 요즘에는 거의 사용되지 않는다.

 

9. /opt

 직접 소스 코드에서 컴파일(빌드)한 프로그램, 즉 패키지 관리 시스템을 통해 설치하지 않고 직접 만든 프로그램들이 저장되는 곳이다. 이 프로그램들의 실행 파일은 보통 /opt/bin 디렉토리에, 라이브러리 파일은 /opt/lib 디렉토리에 위치하게 된다.

또한, 프로그램과 라이브러리가 저장될 수 있는 또 다른 곳은 /usr/local이라는 폴더이다. 이 곳에 소프트웨어가 설치되면 마찬가지로 /usr/local/bin/usr/local/lib 디렉토리도 함께 생성된다. 어떤 소프트웨어가 어디에 설치되는지는 개발자가 컴파일 및 설치 프로세스를 제어하는 파일에 설정한 내용에 따라 달라질 수 있다.

 

10. /proc

 /dev와 마찬가지로 /proc도 가상 디렉토리다. 이 폴더는 CPU, 커널 등 컴퓨터에 대한 정보를 포함하고 있다. /dev와 마찬가지로 파일과 디렉토리는 컴퓨터를 시작할 때 또는 시스템이 실행되고 변경 사항이 발생할 때 생성된다.

 

11. /root

 루트(/) 디렉토리 하위에 있는 /root 디렉토리는 시스템의 최고 관리자(또는 "관리자")의 홈 디렉토리이다. 이 폴더는 다른 사용자들의 홈 디렉토리와 완전히 분리되어 있어 함부로 건드리지 말아야 한다. 개인 파일은 항상 개인 폴더에 저장하는 것이 중요하다.

 

12. /run

 /run 또한 최근에 생긴 새로운 디렉토리다. 시스템 프로세스들이 일시적인 데이터를 저장하는 데 사용돼. 역시 함부로 건드리지 말아야 하는 폴더 중 하나이다.

 

13. /sbin

 /sbin/bin과 비슷하지만, 최고 관리자만 필요로 하는 프로그램들이 저장되어 있는 디렉토리이다. (따라서 이름 앞에 's'가 붙음) 많은 배포판에서 sudo 명령어를 사용하면 임시로 최고 관리자 권한을 얻을 수 있고, 이 권한으로 /sbin 디렉토리에 있는 프로그램들을 실행할 수 있다. 보통 /sbin에는 시스템 설치, 삭제, 포맷과 관련된 도구들이 포함되어 있다. 잘못 사용하면 심각한 문제가 발생할 수 있기 때문에 신중하게 다뤄야 한다.

 

14. /usr

 예전 초기 유닉스 시스템에서는 사용자의 홈 디렉토리가 /usr에 있었지만, 지금은 우리가 이미 알아본 대로 /home 폴더에 사용자의 파일들이 저장된다. 오늘날 /usr 폴더는 응용 프로그램, 라이브러리, 설명서, 배경 이미지, 아이콘 등 다양한 프로그램과 서비스가 공유해야 하는 모든 것들의 혼합물이라고 할 수 있다.

 또한, /usr 디렉토리 안에는 우리가 이미 본 루트 디렉토리 아래에 있던 /bin, /sbin, /lib 디렉토리와 비슷한 디렉토리가 존재한다. 하지만 요즘에는 큰 차이가 없다.

 원래 루트 디렉토리에 있던 /bin 디렉토리는 ls, mv, rm와 같은 기본적인 명령어들을 포함하고 있었다. 이 명령어들은 모든 유닉스/리눅스 설치 시 기본적으로 포함되어 있는 시스템 운영 및 유지 보수에 필요한 최소한 명령어들이었다. 반면에 /usr/bin 디렉토리는 사용자가 시스템을 워크스테이션으로 사용하기 위해 설치하고 실행하는 프로그램들, 즉 워드 프로세서, 웹 브라우저 등의 응용 프로그램들이 위치했다.

 하지만 최신 리눅스 배포판들 중 많은 경우에는 모든 것을 한꺼번에 /usr/bin 디렉토리에 넣고, /bin 디렉토리는 이 디렉토리를 완전히 지우면 문제가 생길까봐 /usr/bin을 가리키도록 설정한다. 따라서 데비안, 우분투, Mint 등의 경우에는 여전히 /bin/usr/bin (그리고 /sbin/usr/sbin) 디렉토리를 따로 유지 관리하지만, 아치 리눅스와 같은 다른 배포판들은 하나의 "실제" 바이너리 디렉토리인 /usr/bin만 가지고 있으며, 나머지 *bin 디렉토리들은 모두 /usr/bin을 가리키는 "가짜" 디렉토리들이다.

 

15. /srv

 /srv 디렉토리는 서버 데이터를 저장하는 곳이다. 리눅스 시스템에서 웹 서버를 실행하고 있다면, 웹사이트의 HTML 파일들은 /srv/http (또는 /srv/www) 디렉토리에 저장될 것이다. FTP 서버를 실행하고 있다면 파일들은 /srv/ftp 디렉토리에 저장될 것이다.

 

16. /sys

 /sys/proc/dev와 마찬가지로 가상 디렉토리이며 컴퓨터에 연결된 장치에 대한 정보를 포함하고 있다. 경우에 따라 이러한 장치를 조작할 수도 있다. 예를 들어, 내 노트북 화면의 밝기를 /sys/devices/pci0000:00/0000:00:02.0/drm/card1/card1-eDP-1/intel_backlight/brightness 파일(사용자의 시스템에서는 다른 파일 이름일 수 있음)의 값을 수정하여 변경할 수 있다. 하지만 이 작업을 위해서는 최고 관리자 권한이 필요하다. 다른 많은 가상 디렉토리와 마찬가지로 /sys 디렉토리의 내용과 파일을 함부로 변경하면 시스템을 손상시킬 수 있기 때문에 주의해야 한다. 무엇을 하는지 확실히 알 때까지는 건드리지 말아야 한다.

 

17. /tmp

 /tmp 디렉토리는 현재 실행 중인 응용 프로그램들이 만든 임시 파일들을 저장하는 곳이다. 보통 이 디렉토리의 파일과 폴더들은 프로그램에서 당장 필요하지 않지만 나중에 필요할 수 있는 데이터를 포함하고 있다.

 /tmp를 개인적인 임시 파일 저장에도 사용할 수 있다. 사실 루트 디렉토리(/) 하위 디렉토리들 중에서 최고 관리자 권한 없이도 사용자들이 직접 다룰 수 있는 몇 안 되는 디렉토리 중 하나이다.

 

18. /var

 /var 디렉토리 이름은 원래 이 디렉토리의 내용이 자주 변하기 때문에 "가변적이다"는 의미에서 지어졌다. 하지만 요즘에는 앞서 살펴본 가상 디렉토리들처럼 다른 많은 디렉토리도 자주 변하는 데이터를 포함하기 때문에 이 이름은 약간 어울리지 않게 되었다.

 그래도 /var 디렉토리에는 여전히 로그 파일과 같은 것들이 저장되어 있다. 로그 파일은 시스템에서 발생하는 이벤트들을 기록하는 파일이다. 커널에서 문제가 발생하면 /var/log 디렉토리의 파일에 기록되고, 누군가 외부에서 컴퓨터를 해킹하려고 시도하면 방화벽도 이 시도를 여기에 로그로 남기게 된다. 또한 이 디렉토리는 작업을 위한 "스풀" 큐(queue)도 포함하고 있어. 예를 들어 공유 프린터에 lengthy(긴) 문서를 출력 요청하면 다른 사용자가 인쇄를 마치기 전까지 대기해야 하는데, 이 대기 작업 정보도 여기에 저장된다. 사용자에게 전달될 메일 메시지들이 배달을 기다리는 것도 마찬가지이다.

시스템에 따라 여기 설명하지 않은 다른 디렉토리들이 있을 수도 있다. 예를 들어 스크린샷에는 /snap 디렉토리가 있는데, 이는 스크린샷이 우분투 시스템에서 캡처되었기 때문이다. 우분투는 최근 소프트웨어 배포 방법 중 하나로 snap 패키지를 도입했고, /snap 디렉토리는 snap으로 설치된 모든 파일과 소프트웨어를 포함하고 있다.

 

 

문서 참조

https://www.oreilly.com/library/view/linux-pocket-guide/9781098157951

반응형

'Linux' 카테고리의 다른 글

Linux 디렉토리 명령어  (0) 2024.07.20
Linux 파일 명령어  (0) 2024.07.20
Linux의 Bash에 대하여  (0) 2024.07.17
Linux 파일 시스템 #1  (0) 2024.07.16
Linux 사용자  (0) 2024.07.16