리눅스는 유닉스 계열을 바탕으로 만들어진 오픈소스 운영체제이다.
그래서 유닉스와 마찬가지로 모든 것들을 파일로 관리한다.
리눅스의 경우 계층구조(트리구조)의 디렉토리를 가지고 있는데, 이것은 용도에 따라 구분되며, 이를 파일 시스템이라고 부른다.
데이터 저장에 사용되는 파일이다. 리눅스에서 사용되는 파일 대부분이 일반 파일에 속한다.
실행 파일, 데이터 파일 , 이미지 파일은 바이너리 파일이라고 부른다.
텍스트 파일은 아스키 코드로 구성되어 vi , vim 명령어 등의 문서 편집기 명령어로 내용을 보거나 수정할 수 있다. 그 외 다른 파일들은 확장자에 맞는 특정 응용 프로그램이 있어야 확인할 수 있다.
디렉토리 역시 파일 종류 중 하나이며 , 해당 디렉토리에 저장되어 있는 정보와 하위 디렉토리에 대한 정보를 담고 있다.
링크 파일은 원본 파일을 대신해서 사용하기 위해 다른 파일명으로 링크된 파일을 뜻한다.
프로그래밍에서 쓰이는 포인터나 참조 개념이 바로 이걸 말한다.
쉽게 설명하면, 윈도우 운영체제의 바로가기 기능
과 유사하다.
장치(하드웨어)들을 관리하는 파일이다.
실제로 하드 디스크나, CPU , CD_ROM과 같이 유형의 장치들을 파일화하여 관리한다.
리눅스에서 모든 것은 파일로 표현된다. 디렉토리도 파일의 한 종류로서 여러개의 하위 파일이나 디렉토리의 주소들을 담고 있다.
이러한 디렉토리들을 파일을 효율적으로 관리하기 위해 계층적으로 구성
하는데 이것을 트리구조라고 한다.
리눅스에서는 수 많은 파일을 관리하기 위해 이러한 디렉토리 개념을 사용한다.
모든 디렉토리의 최상위 디렉토리를 루트 디렉토리라고 한다. 루트 디렉토리는 /
으로 표시한다.
/bin & /sbin
bin은 user command binaries, sbin은 system command binaries를 뜻한다.
둘다 바이너리 파일로 컴파일된 실행 파일들을 포함하고 있다.
✅ 대체적으로 sbin은 system이 사용하거나 system을 컨트롤하기 위한 파일들을 포함하고
✅ bin은 커맨드 라인 인터페이스에서 우리가 자주 사용하는 명령어 실행 파일들을 포함한다.
bin은 디렉토리에 가서 ls -al
커맨드를 쳐보면 위와 같은 결과를 볼 수 있다.
우리가 흔히 사용하는 cat
, chmod
, chown
, cp
, date
, echo
, kill
, ln
, mkdir
등의 커맨드는 결국 bin 디렉토리에 포함된 해당 이름으로 된 바이너리 파일을 실행한 결과이다. 당연히 ls
도 이 디렉토리 내에 포함되어 있다.
sbin 디렉토리는 sysct1
, reboot
등과 같이 시스템을 다루는 파일들을 가지고 있다.
/bin & /sbin 연관 디렉토리
리눅스 이전 유닉스 운영체제를 만들 때 용량 문제로 bin 과 sbin 디렉토리를 여러 곳에 분산시켜 만들었다.
현대 유닉스 기반 OS에서도 이런 사상이 남아서 bin 과 sbin에 관련된 연관 디렉토리들이 파일 시스템에 남아있다.
연관된 디렉토리의 종류는 usr/bin
, usr/sbin/
, usr/local/bin
, usr/local/sbin
이다.
✅ bin : cd,ls 등의 사용자 커맨드 파일이 위치한 디렉토리 (필수적인 파일만 관리)
✅ sbin : systemcti 등의 시스템 커맨드 파일이 위치한 디렉토리 (필수적인 파일만 관리)
✅ usr/bin : 필요에 의해 설치된 사용자 커맨드 파일이 위치한 디렉토리 (yum 등 패키지 관리자가 관리)
✅ usr/sbin : 필요에 의해 설치된 시스템 커맨드 파일이 위치한 디렉토리 (yum 등 패키지 관리자가 관리)
✅ usr/local/bin : 기타 사용자 커맨드 파일이 위치한 디렉토리 (사용자 또는 설치 파일이 해당 디렉토리에 파일 설치)
✅ usr/local/sbin : 기타 시스템 커맨드 파일이 위치한 디렉토리 (사용자 또는 설치 파일이 해당 디렉토리에 파일 설치)
PATH 와 /bin & /sbin
/bin 과 /sbin은 PATH와 밀접한 연관이 있다.
/bin 과 /sbin은 실행파일들의 집합이고
PATH
는 운영체제 어디에서든 해당 위치에 접근할 수 있게 만드는 환경변수이다.
위에서 설명된 6개 bin/sbin 디렉토리는 모두 기본 PATH 환경변수에 지정
되어 있어 운영체제는 디렉토리에 있는 실행파일들을 어느 위치에서든 실행
할 수 있다.
즉 , 사용자 관점에서는 cd , ls
처럼 단순 파일이름으로 해당 커맨드 실행이 가능하다고 생각하면 된다.
/lib & /lib64
lib 와 lib64는 시스템 부팅이나 bin 과 sbin 디렉토리에 있는 바이너리 파일들 실행에 필요한 공유 라이브러리 디렉토리이다.
✅ /lib/modules : 커널 모듈 파일들 존재
✅ 대부분의 라이브러리들은 링크로 연결되어 있음
/etc
etc 폴더는 대부분의 설정 파일들이 저장된다.
네트워크 관련 설정파일 , 사용자 정보 및 암호정보, 파일 시스템 정보, 보안파일, 시스템 초기화 파일 등 중요 설정 파일들이 위치해 있다.
etc 디렉토리 ls -al 실행 결과
etc 디렉토리 내부를 보면 여러가지 디렉토리와 파일들을 볼 수 있다.
.d
를 붙여서 디렉토리인 것을 구별하기도 하고 그렇지 않기도 한다.
설정파일은 .conf
라는 이름의 형식으로 많이 관리되어 있다.
예를 들어 password
는 사용자에 관련된 내용을 담고 있다. 우리가 커맨드를 통해 사용자를 추가하거나 삭제하면 해당 파일이 변경되며 운영체제에서 사용자를 관리하게 된다.
만약 nginx와 같은 웹서버를 다루게 되면 /etc/nginx 디렉토리에서 nginx.conf
같은 파일들을 수정해야 한다.
✅ etc/CORBA : Common Object Request Broker Architecture (COBRA)에 관한 파일이 들어있음
✅ /etc/X11 : 엑스 윈도우 설정에 관련된 파일들이 있음
✅ /etc/cron.d : crontab 명령의 설정파일이 있음
✅ /etc/cron.daily : 매일 작동하게 하는 crontab 스크립트 파일이 존재
✅ /etc/gnome : GTK+ 정의파일들이 있음
✅ /etc/httpd : 아파치 웹 서버의 설정 및 로그파일이 있음
✅ /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의 서비스 영역을 설정하는 디렉토리
/var
시스템에서 사용되는 동적인 파일들이 저장 되어있다. (가변 자료 저장 디렉토리)
주로 시스템 작동기록(log)들을 저장하는 편이다. 이외에 사용자 로그인에 대한 보안기록, 그리고 메일서버를 운영한다면 전송되는 메일들을 임시로 저장한다
레드헷 7.0에서부터는 /home 디렉토리에 저장되던 /home/httpd 디렉토리가 /var/www로 변경되어 저장됨, /home/ftp는 /var/ftp로 변경
✅ /var/log : 시스템에 발생된 일들에 대한 기록 파일이 있음
✅ /var/named : 네임서버 설정 파일들 존재
✅ /var/spool/mail : 수신 메일을 사용자 명으로 기록하는 디렉토리
/home & /root
home 디렉토리는 개별 사용자의 디렉토리를 관리하는 디렉토리이다.
만약 jin이라는 이름의 사용자를 만들었다면 /home/jin 디렉토리로 jin을 위한 디렉토리가 생성된다. 해당 디렉토리에 대한 접근 권한은 기본적으로 jin으로 한정되어 관리된다.
chown 과 chmod 를 활용해 추후 접근이나 파일의 실행 권한에 대한 변경이 가능하다.
root 디렉토리는 root 계정을 위한 디렉토리로 home 말고 별도의 디렉토리로 관리된다.
/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 와 유사)
참고 : 이 글은 직접 작성한 글이 아닌 공부용 글입니다. https://inpa.tistory.com/entry/LINUX-%F0%9F%93%9A-%EB%A6%AC%EB%88%85%EC%8A%A4-%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC-%EA%B5%AC%EC%A1%B0