본문 바로가기

Developments/Linux

[Linux 실습] Ch4. Linux의 디렉토리(Linux Directory)

오픈 소스 비영리 기관 'Open Source Initiative'의 로고. https://opensource.org/

본 글은 학교 '오픈소스 소프트웨어 입문' 과목을 수강하며 실습(또는 공부)한 내용을 정리한 글입니다.

개인 기록 용도로 작성한 글이라, 직접 이 글을 보고 실습을 따라하기엔 어려움이 많을 것으로 예상됩니다.
혹시 본 글을 보며 Linux를 공부하실 목적이라면, 일단 키워드 위주로 AI에게 물어봐가면서, 본인의 Linux 터미널에서 직접 타이핑해가며 공부하시기를 추천드립니다.

질문이나 의견이 있다면 자유롭게 댓글 달아주세요!

**Term**
home directory - home of user account 
working directory - current directory
. - Current directory
.. - Parent directory
~ - my home directory
~user - user''s home directory

**Command and symbol**
pwd (1) - print current working directory
mkdir (1) - make directory
rmdir (1) - remove directory
cd (bash) - change directory
pushd / popd
du - disk usage

쉘에서는 우리가 명령을 내리면, 현재의 디렉토리(=current directory, working directory, current working directory)에서 작동함. 이 현재 디렉토리를 cwd라고 표현함(변수가 따로 있는 건 아님). pwd으로 cwd를 출력.

현재 우리는 /home/course/foss/foss110가 current working directory.

이건 .과 똑같음. . 또한 current working directory를 의미.

man ls를 보면, FILE가 생략되면 .(current directory)의 information을 출력함.

-a는 .로 시작하는 개체들을 무시하지 않음. 리눅스에서 .로 시작하는 파일은 hidden file(숨김 파일)임.

..상위 디렉토리(parent directory)를 의미함.

~홈 디렉토리(home directory)를 의미함. 유저가 로그인을 했을 때 거기에 들어간다는 의미. 우리의 홈 디렉토리는 /home/course/foss/foss110

/etc 에서 cat passwd 하면 아래처럼 뜸.

foss138:x:3138:3000::/home/course/foss/foss138:/bin/bash
foss139:x:3139:3000::/home/course/foss/foss139:/bin/bash
foss140:x:3140:3000::/home/course/foss/foss140:/bin/bash
foss141:x:3141:3000::/home/course/foss/foss141:/bin/bash

foss110: username

x: 암호화된 암호가 들어있는 자리. (암호화되어 /etc/shadow 파일에 저장됨)

3138: userid.

3000: groupid.

:: 다음에 오는 /home/course/foss/foss110 : 해당 사용자의 홈 디렉토리.

연결해서 로그인을 성공하고 나면, 터미널이 저 홈 디렉토리에 /bin/bash , 즉 배쉬 쉘을 실행시켜 줌.

/etc/passwd 파일에서 각 필드는 :로 구분되는데, ::는 해당 필드가 비어있다는 의미임.

아까 올 때 pushd로 여기 왔잖음? 그럼 다시 갈 때는 popd하면 돌아감.

pushd /etcpopd

Directory(Cont.)

루트 디렉토리 / → 트리 자료구조가 생각나야 함.

리눅스의 파일 시스템은 트리 자료구조를 가짐. 그래서 항상 루트 디렉토리로 시작함.

root

root는 시스템 관리자 계정(슈퍼유저)의 이름입니다. /root 디렉토리는 루트 사용자의 홈 디렉토리입니다. 일반 사용자들의 홈 디렉토리는 /home에 존재하지만, root는 따로 /root라는 디렉토리를 가집니다.

boot

이 디렉토리는 부팅에 필요한 파일들이 저장되는 곳입니다. 주로 커널 파일(예: vmlinuz)과 부트로더 설정 파일(예: grub.cfg)이 이곳에 있습니다.

home

일반 사용자들이 사용하는 홈 디렉토리들이 저장되는 곳입니다. 각 사용자마다 /home/username 경로 아래에 홈 디렉토리가 생성됩니다. 예: /home/user1, /home/user2.

sbin

시스템 관리자가 사용하는 시스템 관련 명령어들이 들어 있습니다. 예를 들어, 시스템을 부팅하거나 복구할 때 사용하는 명령어들이 여기 있습니다. (fsck, reboot, shutdown 등) bin 디렉토리와 유사하지만 일반적으로 루트유저만 실행할 수 있는 프로그램들이 있는 디렉토리입니다.

bin

ls, cp, mv 등 리눅스의 기본 명령어들이 있는 디렉토리입니다. 시스템 부팅 후, 필수적인 명령어들이 여기에서 실행됩니다. 부팅, 복구, 시스템 유지 관리 등에서 필수적인 명령어들(예: ls, cp, mv, cat 등)이 이 디렉토리에 존재합니다. /bin에 있는 명령어는 시스템이 정상적으로 작동하는 동안 언제든지 사용할 수 있어야 하므로, 시스템이 복구 불가능한 상태에서도 사용할 수 있어야 합니다.

usr

일반 사용자와 시스템이 사용하는 응용 프로그램과 라이브러리들이 들어 있는 디렉토리입니다. /usr/bin에는 사용자가 사용할 수 있는 명령어들이 들어 있고, /usr/lib에는 라이브러리 파일들이 들어 있습니다. 이 디렉토리는 시스템에 설치된 많은 프로그램과 관련된 파일들을 포함합니다.

/usr/bin 상세설명)

~~일반적으로 사용자와 관련된 명령어들이 위치하는 디렉토리입니다. 이 디렉토리에는 시스템에서 자주 사용되는 프로그램들과 응용 프로그램들이 설치됩니다. /usr/bin에는 시스템 관리자가 설치한 응용 프로그램이나 패키지 관리자에 의해 설치된 프로그램들이 저장됩니다. 예를 들어, 텍스트 편집기(예: vim, nano), 웹 브라우저(예: firefox), 개발 도구(예: gcc) 등이 여기에 들어 있습니다. /usr/bin에 있는 명령어들은 시스템 부팅 시 반드시 필요하지 않지만, 시스템 운영 중에 유용한 명령어들입니다.~~

제대로 된 설명)

https://www.quora.com/Whats-the-difference-between-bin-and-usr-bin-in-Linux

초기에는 디스크 크기가 부족하다보니, /bin은 부팅 단계에서 사용하는 최소한의 명령어들이 들어 있었고 나머지 (다중 사용자 모드가 될 때까지 덜 필요한) 명령어들은 /usr/bin에 들어 있었음.(왜 메모리가 아닌 디스크를 칭하는진 모르겠네)

https://superuser.com/a/1018649

그러나, 이후 디스크 크기가 충분해지면서, 많은 리눅스 배포판에서 그냥 모든 명령어들이 /usr/bin에 들어가고, /bin은 그냥 /usr/bin을 가리키는 심볼릭 링크로서 동작하게 설계되었음.

lrwxrwxrwx 1 root root 7 Aug 31  2022 /bin -> usr/bin

var

변동이 있는 데이터, 즉 시스템 실행 중에 변할 수 있는 파일들이 위치하는 디렉토리입니다. 로그 파일, 캐시 파일, 이메일 큐, 프린터 큐 등 다양한 동적 파일들이 이곳에 저장됩니다.

예: /var/log (로그 파일), /var/cache (캐시 파일), /var/spool (대기 중인 작업 큐) 등.

etc

시스템 설정 파일들이 들어 있는 디렉토리입니다. 운영 체제의 동작을 제어하는 설정 파일들이 이곳에 위치합니다. 예: /etc/passwd, /etc/network/interfaces, /etc/hostname 등.

dev

디바이스 파일들이 있는 디렉토리입니다. 리눅스에서는 모든 하드웨어 장치(디스크, 프린터, USB 장치 등)가 파일로 표현되므로, 이 디렉토리에는 이러한 장치들이 나타내는 파일들이 있습니다. 예: /dev/sda (첫 번째 하드디스크), /dev/tty1 (터미널).

opt

옵션 소프트웨어 패키지들이 설치되는 디렉토리입니다. 전통적으로는 서드파티 소프트웨어가 이곳에 설치됩니다. 예를 들어, 아파치 웹 서버나 다른 상용 소프트웨어들이 /opt에 설치될 수 있습니다.

media

이동식 미디어 장치(USB 드라이브, CD/DVD 등)가 자동으로 마운트되는 위치입니다. 예: /media/usb, /media/cdrom 등.

/dev 에서 ls -l 하면 파일종류 c가 보이는데, character device. b는 block device → disk일 확률이 높음. l은 symbolic link.

/dev/pts 에서 ls -l 하면 파일 허가권이 보임.

crw--w---- 1 foss108 tty  136,  87 Mar 11 11:41 87
crw--w---- 1 foss096 tty  136,  88 Mar 11 11:41 88
crw--w---- 1 foss064 tty  136,  89 Mar 11 10:40 89
crw--w---- 1 foss023 tty  136,   9 Mar 11 11:41 9
crw--w---- 1 foss030 tty  136,  90 Mar 11 11:41 90
crw--w---- 1 foss109 tty  136,  91 Mar 11 11:41 91
crw--w---- 1 foss093 tty  136,  92 Mar 11 11:41 92
crw--w---- 1 foss131 tty  136,  93 Mar 11 11:40 93
crw--w---- 1 foss058 tty  136,  94 Mar 11 11:39 94
crw--w---- 1 foss056 tty  136,  95 Mar 11 11:39 95
crw--w---- 1 foss119 tty  136,  96 Mar 11 11:41 96
crw--w---- 1 foss013 tty  136,  97 Mar 11 10:45 97
crw--w---- 1 foss041 tty  136,  98 Mar 11 11:41 98
crw--w---- 1 foss097 tty  136,  99 Mar 11 11:39 99
c--------- 1 root    root   5,   2 Feb 25 18:57 ptmx

여기서 교수가 chmod 777 0 하면 0의 권한이 rwxrwxrwx가 되는데, 그럼 echo Hi > 0 하면 교수 터미널에 나옴.