일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 네트워크
- eureka
- socket
- pthread_create()
- SD카드
- 리눅스
- position independent code
- spring cloud eureka
- 젠킨스
- pthread_join()
- Spring cloud
- 젠킨스 파이프라인
- 포맷
- spring eureka
- MSA
- 우분투
- 소켓 프로그래밍
- 라즈베리파이
- i/o schduler
- i/o scheduling
- 라즈베리파이 에러
- linux
- 소켓
- 스케줄러
- jenkins pipeline
- scheduling
- 스케줄링
- scheduler
- OS
- Jenkins
- Today
- Total
dayne의 블로그
리눅스 디렉토리 구조 파악하기 본문
목차
1. 리눅스의 디렉토리 구성 방식 & 파일 종류 설명
2. 디렉토리 별 설명
3. 추가 사항
1. 리눅스의 디렉토리 구성 방식 & 파일 종류 설명
리눅스는 유닉스는 유닉 계열의 운영체제로, 현재는 리눅스 배포판 (우분투,페도라, ...) 등의 커널단에 리눅스 커널이 사용되고 있습니다.
리눅스는 유닉스와 마찬가지로 모든 것들을 파일로 관리합니다. 계층구조(트리 구조)의 디렉토리를 가지며, 용도에 따라 구분되는데 이를 '파일 시스템'이라고 부릅니다.
파일 종류에는 '일반 파일', '디렉토리 파일', '링크 파일'이 있습니다.
1.1 일반 파일
데이터 저장에 사용되는 파일을 의미합니다. 리눅스에서 사용되는 파일의 대부분이 일반 파일에 속합니다.
실행 파일, 데이터 파일, 이미지 파일은 '바이너리 파일'이라고 부릅니다.
텍스트 파일은 아스키 코드로 구성되어, vi와 vim 등 문서 편집기의 명령어로 내용 확인 및 수정이 가능합니다.
그 외 다른 파일들은 확장자에 맞는 특정 프로그램을 사용해야 확인할 수 있습니다.
1.2 디렉토리 파일
디렉토리 또한 파일의 종류 중 한 가지이며, 해당 디렉토리에 저장 중인 여러가지 정보와 하위 디렉토리에 대한 정보를 포함하고 있습니다.
1.3 링크 파일
링크 파일은 원본 파일의 대체제로 사용하기 위해, 원본 파일과 링크되어 있으면서 다른 파일명을 가진 파일을 의미합니다.
윈도우 운영체제의 '바로가기 기능'과 유사합니다.
링크된 파일의 종류에는 '하드 링크'와 '심볼릭(소프트) 링크'가 있습니다.
하드 링크는, 원본 파일과 동일한 inode를 가리킵니다. 즉, 파일의 데이터 자체가 동일하며 이름만 다르게 표시되는 형태이기 때문에, 연결된 파일을 수정할 경우 원본 파일의 내용 또한 수정됩니다.
심볼릭 링크는 원본 파일의 경로를 저장하는 파일로, 원본 파일에 대한 경로를 참조해서 해당 파일을 열게 됩니다. 심볼릭 링크를 통해서 파일을 수정하면 원본 파일의 내용 역시 수정됩니다.
심볼릭 링크는 파일의 경로를 참조하기 때문에, 원본 파일이 이동하거나 삭제되면 심볼릭 링크는 여전히 존재하지만 해당 파일을 열 수 없고 "깨진 링크"(broken link)가 됩니다.
하지만 하드 링크는 원본 파일과 동일한 데이터 블록을 직접 참조하기 때문에 원본 파일이 삭제되어도 하드 링크가 남아 있으면 데이터가 유지됩니다. 또한, 원본 파일이름이나 위치가 변경되어도 하드 링크는 영향을 받지 않습니다.
2. 디렉토리 별 설명

2.1 /
'/'는 루트 디렉토리를 의미합니다. 모든 디렉토리의 시작이자 최상위 디렉토리입니다.
2.2 /bin (user command binaries)
바이너리 파일(실행 파일)이 보관되는 디렉터리로, 부팅에 필요한 기본 명령어들이 포함되 었습니다. ls, cat, rm, vi와 같은 기본 명령어가 /bin에 존재합니다.
바이너리 파일로 컴파일된 실행 파일들을 담고 있습니다.
커맨드 라인 인터페이스(CLI)에서 흔히 사용하는 명령어 실행 파일들을 포함하고 있습니다. ls, cat, chmod 등의 커맨드는 결국 'bin 디렉토리에 포함된 해당 이름으로 된 바이너리 파일'들을 실행한 결과인 것
※ usr/bin : 필요에 의해 설치된 사용자 커맨드 파일이 위치한 디렉토리로, 패키지 관리자(Cent OS : yum, MacOS : brew, ...)가 관리
※ usr/local/bin : 기타 사용자 커맨드 파일이 위치한 디렉토리로, 사용자 또는 설치 파일이 해당 디렉토리에 파일을 설치
2.3 /boot
리눅스의 부팅에 필요한 정보를 가진 파일들이 존재하는 디렉토리입니다.
2.4 /dev
시스템 디바이스(장치) 파일을 저장하고 있는 디렉토리입니다.
/dev/sda (하드디스크 장치 파일), /dev/cdrom(CD-ROM) 장치 파일 등의 장치 파일 들이 존재합니다. 예를 들어 마우스, 키보드 등의 디바이스와 관련된 파일들을 의미합니다.
즉, 물리적 장치가 파일화 되어 /dev 디렉토리 내부에 저장되는 것입니다.
2.5 /etc
'설정 파일'을 담고 있는 디렉토리를 말합니다.
설정 파일의 종류에는 네트워크 관련 설정 파일, 사용자 정보 및 암호 정보, 파일 시스템 정보, 시스템 초기화 파일 등이 있습니다.
뒤에 .d를 붙이는 네이밍을 통해 디렉토리 구별을 하기도 하고, 그렇지 않기도 합니다. 설정 파일은 .conf 라는 이름의 형식으로 많이 관리됩니다.
2.6 /home
사용자들의 홈 디렉토리가 있는 곳입니다.
사용자를 추가할 경우, 사용자의 id와 동일한 디렉토리가 /home에 자동으로 생성됩니다.
사용자를 위해 새로 생성된 디렉토리에 대한 접근 권한은 기본적으로 해당 사용자로 한정되어 관리되고, 추후 chown과 chmod를 통해 접근 및 실행 권한 변경이 가능합니다.
2.7 /lib
커널이 요구하는 각종 라이브러리 파일, 커널 모듈 파일 등이 존재하는 디렉토리입니다.
/lib과 /lib64는 '시스템 부팅이나 /bin, /sbin 디렉토리에 있는 바이너리 파일들 실행'에 필요한 공유 라이브러리 디렉토리입니다. 예를 들어 파이썬의 경우, usr/local/lib/python3.6/site-packages 같은 디렉토리에 라이브러리 파일이 설치되고, 이를 활용해 파이썬 커맨드가 돌아가게 되는 것입니다.
2.8 /media
DVD, CD-ROM, USB 등의 외부 장치들의 마운트 포인트(연결 지점)로 사용하는 디렉토리입니다.
2.9 /mnt
/media 디렉토리와 유사한 기능을 합니다.
차이점은
/media는 OS에서 자동으로 마운팅해주는 포인트로 주로 사용되며
/mnt는 사용자가 직접 마운트하는 경로로 사용됩니다.
예를 들어 설명하자면
컴퓨터에 USB를 꽂아 OS에 자동으로 마운팅된다면, 주로 /media 내부에 위치하게 되고,
외부에 있는 디스크 등을 직접 명령어를 사용해 마운트한다면, /mnt 디렉토리에 위치하게 됩니다.
2.10 /opt
추가 응용 프로그램 패키지를 설치하는 장소입니다. 패키지 매니저를 통해 자체적으로 설치와 삭제 작업을 수행합니다.
2.11 /proc
'가상 파일 시스템'이라는 명칭을 가진 디렉토리로, 현재 메모리에 존재하는 작업들이 파일 형태로 존재하는 디렉토리입니다.
프로세스 정보 등, 커널 관련 정보가 저장되어 있습니다.
2.12 /root
관리자 계정 root 사용자의 홈 디렉토리입니다.
'/' 디렉토리는 모든 디렉토리의 최상위 디렉토리이고, '/root' 디렉토리는 사용자 중에서 root 사용자의 홈 디렉토리이므로 서로 다른 디렉토리임을 주의해야 합니다!
2.13 /sbin (system command binaries)
시스템 이진 파일(실행 파일), ifconfig, ethtool과 같은 시스템 명령어들을 저장하고 있는 디렉토리입니다.
bin과 마찬가지로, 바이너리 파일로 컴파일된 실행 파일들을 포함하고 있습니다. sysctl, reboot 등의 '시스템을 다루는 파일'들을 포함하고 있습니다.
※ usr/sbin : 필요에 의해 설치된 시스템 커맨드 파일이 위치한 디렉토리로, yum 등의 패키지 관리자가 관리
※ usr/local/sbin : 기타 시스템 커맨드 파일이 위치한 디렉토리로, 사용자 또는 설치 파일이 해당 디렉토리에 파일을 설치
2.14 /usr
(관리자 계정 root 사용자가 아닌) 일반 사용자들이 사용하는 디렉토리입니다.
2.15 /var
기타 다용도로 사용될 수 있는 파일들의 집합인 디렉토리입니다.
로그 파일, DB 캐싱 파일, 웹서버의 이미지 파일 등이 /var 디렉토리에 위치합니다.
시스템에서 사용되는 동적인 파일들이 저장되어 있습니다. (가변 자료 저장 디렉토리)
주로 시스템 작동기록(log)들이 저장됩니다. 이외에도 사용자 로그인에 대한 보안 기록, 메일 서버 운영 시에 전송되는 메일 임시 저장 등의 역할을 합니다.
2.16 /sys
시스템의 하드웨어 장치와 커널 내부 정보에 대한 구조적 정보를 제공하는 디렉토리입니다.
시스템에 연결된 장치 정보(디바이스 트리)나 드라이버의 상태를 사용자 공간에서 확인하고 일부 설정을 조정할 수 있습니다.
※ /dev 와의 차이점
- /sys 는 시스템 하드웨어와 커널 내부 정보를 탐색하고 설정하는 데 사용되는 가상 파일 시스템으로, '하드웨어와 관련된 정보를 제공하고 일부는 변경'할 수 있습니다.
- /dev 는 실제 하드웨어 장치와 사용자 공간 프로그램이 상호작용할 수 있도록 해주는 인터페이스 파일이 위치하는 디렉토리로, 장치 파일을 통해 '실제 장치에 입출력 작업을 수행'합니다.
2.17 /run
Run-time variable data(런타임 변수 데이터)를 관리합니다. 부팅한 후의 시스템 정보를 관리하는 디렉토리입니다.
2.18 /tmp
임시 파일을 저장하기 위한 디렉토리입니다.
재부팅 시에 삭제되며, 내부의 임시 파일들은 정기적으로 10일 정도 간격으로 삭제됩니다.
2.19 /lost+found
'휴지통' 과 유사한 개념의 디렉토리입니다.
2.20 /srv
서버를 위한 디렉토리입니다.
사이트에서 생성되는 데이터들을 저장하는 공간으로, FTP, WWW, CVS 등과 같은 서비스에 의해 생성되는 데이터를 저장하는 디렉토리입니다.
주로 FTP, SFTP, RSync와 같은 프로토콜을 이용하여 외부 사용자와의 공유를 위해 사용되며 다른 디렉토리에 비해 비교적 외부 사용자들이 쉽게 접근할 수 있습니다.
※ snap
Snap 패키지 관리 시스템과 관련된 파일들이 저장되는 위치입니다. Snap은 Canonical(우분투 개발사)이 개발한 패키지 관리 시스템으로, 다양한 리눅스 배포판에서 사용할 수 있으며, 애플리케이션을 컨테이너화하여 배포하고 관리할 수 있게 해줍니다. snap 디렉토리는 이러한 Snap 패키지들이 설치되고 실행되는 환경을 제공합니다.
Snap 패키지는 애플리케이션과 그에 필요한 모든 의존성을 포함하는 일종의 컨테이너입니다. 이를 통해 다양한 리눅스 배포판에서 일관된 환경에서 애플리케이션을 실행할 수 있습니다.
하지만 디스크 공간 사용량 증가나 성능 저하 등의 단점이 존재한다는 점을 고려해야 합니다.
3. 추가 사항
PATH와 /bin & /sbin
PATH는 운영체제 어디에서든 해당 위치에 접근할 수 있게 만드는 '환경변수'입니다.
위에 제시된 /bin 과 /sbin 관련 6가지 디렉토리는 모두 기본 PATH 환경변수에 지정되어 있기 때문에, OS는 디렉토리에 있는 실행 파일들을 어느 위치에서든 실행 가능한 것입니다.
brew나 yum 등의 패키지 관리자가 설치한 파일들도 6개 디렉토리 중 하나에 직접적인 파일이나 심볼릭 링크로 존재하게 되어 커맨드 라인에서 바로 사용이 가능합니다.
하지만 별도의 installer로 설치하거나 압축 파일 해제하여 설치할 경우 실행이 안되는 경우가 있는데, 설치된 파일이 /bin 또는 /sbin에 존재하지 않기 때문입니다.
이런 문제가 발생했을 경우, brew처럼 심볼릭 링크로 실행 파일을 bin 디렉토리에 연결시키거나 bin, sbin 외에 별도의 실행 파일을 위한 PATH를 추가함으로써 해결 가능합니다.
참고
https://ko.wikipedia.org/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4
리눅스 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 리눅스(Linux)개발자리누스 토르발스 (커뮤니티 주체)프로그래밍 언어C, 어셈블리어OS 계열유닉스 계열상태사용중,개발 중소스 형태오픈 소스최초 버전 출시일19
ko.wikipedia.org
🐧 리눅스 디렉토리 구조 한눈에 정리
리눅스 파일의 종류 리눅스는 유닉스 계열을 바탕으로 만들어진 오픈소스 운영체제이다. 그래서 유닉스와 마찬가지로 모든 것들을 파일로 관리한다. 리눅스의 경우 계층구조(트리구조)의 디렉
inpa.tistory.com
[Linux 이론] 리눅스 시스템의 기본 디렉토리들
Linux 디렉토리들 리눅스는 모든 장치들을 파일화 하여 사용하는데, 어쩔 땐 편하지만 또 어쩔 땐 불편한 점이 되기도 한다. 아래는 리눅스 디렉토리들이다. / : 리눅스에서 최상위 디렉토리이다.
sean.tistory.com
[리눅스 기초] 루트디렉토리 구조
대략적으로는 어렴풋이 알고있었지만 리눅스에서 코딩하기의 일환으로 우분투 계열의 OS를 사용하면서 디렉토리들의 역활을 정리하고자 작성하였습니다.
medium.com
'시스템 프로그래밍 > 리눅스' 카테고리의 다른 글
리눅스 모듈 종류 및 모듈 적용 방법 (0) | 2024.10.14 |
---|---|
리눅스 커널 컴파일 방법 (0) | 2024.10.11 |
리눅스 I/O 스케줄러 종류 및 동작 과정 (0) | 2024.10.10 |
리눅스 프로세스 스케줄링, 프로세스 스케줄러의 종류 및 동작 방식 (0) | 2024.10.10 |
리눅스 fork와 thread의 차이점과 및 예제 (1) | 2024.10.08 |