IT·테크/인프라

리눅스 기본기 — 디렉터리 구조와 명령어, 권한 관리

레루루 2026. 7. 21. 20:41
반응형

리눅스 기본기 — 디렉터리 구조와 명령어, 권한 관리

이 글은 2021년 4월 기준 기록입니다.

Linux는 운영체제의 한 종류입니다. 흔히 쓰는 Windows와 달리 무료로 사용할 수 있고, GUI를 지원하는 추세이기는 하지만 주로 CLI 환경에서 다룹니다.

리눅스는 커널과 셸과 패키지의 묶음이다

Linux는 Kernel + Shell + 패키지의 구조를 가집니다. 이 셋을 묶어 놓은 것을 리눅스 배포판이라고 부릅니다.

 

이런 구조 덕분에 몇 가지 성격이 따라옵니다. 여러 사용자가 동시에 접속하는 다중 접속 환경을 지원하고, 패키지 설치가 편리하며, 그래서 서버 운영체제로 적합합니다. Shell Script를 이용한 프로그래밍 기능도 제공하고, 뒤에서 볼 디렉터리 구조 자체가 하나의 특징입니다.

셸은 명령을 받는 입구다

Shell은 명령어 입력기입니다. 터미널에서는 계정명@호스트 작업위치 $ 형태의 프롬프트로 입력을 기다립니다.

 

여기서 프롬프트의 마지막 글자를 눈여겨볼 만합니다. 일반 사용자는 $, 슈퍼 유저는 #로 표시되므로, 프롬프트만 보고도 지금 어떤 권한으로 작업 중인지 구별할 수 있습니다.

디렉터리는 최상위 하나에서 갈라진다

리눅스의 모든 경로는 최상위 디렉터리 /에서 시작합니다. 이 /는 root(슈퍼유저) 계정의 홈 디렉터리와는 다른 것이므로 구별해야 합니다.

디렉터리 용도
home 사용자들의 home 디렉터리(개인 공간)
root root(슈퍼유저) 계정의 home 디렉터리
etc 대부분의 설정 파일이 존재
var 로그, 메일 등의 정보
usr 설치한 패키지들의 실제 위치
bin 명령어 디렉터리

경로는 두 가지 방식으로 말할 수 있다

절대 경로/로 시작하며 대상 위치까지 모든 경로를 포함합니다. 현재 작업 위치와 상관없이 원하는 대상을 찾을 수 있다는 것이 장점입니다.

 

상대 경로/ 없이 시작하며 현재 작업 위치를 기준으로 작성합니다. 그래서 현재 작업 위치가 결과에 영향을 줍니다. 여기서 쓰이는 기호가 .(현재 위치), ..(상위 위치), ~(현재 사용자의 home 디렉터리)입니다.

 

둘 중 하나만 알아서는 부족하고, 두 방식 모두 능숙하게 다룰 필요가 있습니다.

명령어는 형식이 정해져 있다

셸 입력기에 명령을 작성하면 /bin이나 /sbin 등 PATH에 등록된 명령어 디렉터리에서 해당하는 명령이 실행됩니다.

형식은 명령어 옵션 대상 대상2 …이고, 옵션에는 주로 -를 붙입니다.

 

막힐 때 볼 것은 도움말입니다. man(MANual)은 해당 파일 혹은 명령어에 대한 도움말 페이지를 출력합니다.

브라우징 — 지금 어디에 무엇이 있는가

ls(LiSt)는 파일 목록을 출력합니다.

ubuntu@sw-instance2:/$ ls
bin   dev  home  lib32  libx32      media  opt   root  sbin  srv  tmp  var
boot  etc  lib   lib64  lost+found  mnt    proc  run   snap  sys  usr

 

-l 옵션을 붙이면 자세히 표시합니다.

ubuntu@sw-instance2:/$ ls -l
total 72
lrwxrwxrwx   1 root root     7 Jun 11  2020 bin -> usr/bin
drwxr-xr-x   4 root root  4096 Apr 18 06:59 boot
drwxr-xr-x  18 root root  3960 Mar 22 16:51 dev
drwxr-xr-x 107 root root  4096 Apr 15 06:04 etc
drwxr-xr-x   5 root root  4096 Jul 17  2020 home
lrwxrwxrwx   1 root root     7 Jun 11  2020 lib -> usr/lib
lrwxrwxrwx   1 root root     9 Jun 11  2020 lib32 -> usr/lib32
lrwxrwxrwx   1 root root     9 Jun 11  2020 lib64 -> usr/lib64

 

-a 옵션은 숨김 파일까지 표시합니다.

ubuntu@sw-instance2:/$ ls -a
.   bin   dev  home  lib32  libx32      media  opt   root  sbin  srv  tmp  var
..  boot  etc  lib   lib64  lost+found  mnt    proc  run   snap  sys  usr

 

pwd(Print Working Directory)는 현재 작업 위치를 출력합니다.

ubuntu@sw-instance2:/$ pwd
/

 

cd(Change Directory)는 지정한 디렉터리로 이동합니다. 대상 없이 cd만 입력하면 사용자의 home 디렉터리로 이동하므로 cd ~와 같습니다.

ubuntu@sw-instance2:/$ cd
ubuntu@sw-instance2:~$

경로를 지정하면 그 경로로 이동합니다.

ubuntu@sw-instance2:/home$ cd /etc
ubuntu@sw-instance2:/etc$

cd ..은 상위 디렉터리로 이동합니다.

ubuntu@sw-instance2:~$ cd ..
ubuntu@sw-instance2:/home$

파일 조작 — 리눅스에는 휴지통이 없다

복사·이동·삭제는 각각 cp(CoPy), mv(MoVe), rm(ReMove)입니다. cp -r은 하위 파일과 디렉터리까지 모두 복사하고, rm -r은 하위 파일과 디렉터리까지 모두 삭제합니다.

 

여기서 주의할 것이 rm -i입니다. 삭제 전 확인을 받는 옵션인데, 리눅스에는 휴지통이 없기 때문에 지운 것을 되돌릴 수단이 없습니다. touch는 크기가 0인 파일을 생성합니다.

 

파일 내용을 보는 명령은 목적에 따라 나뉩니다. cat(conCATenate)은 파일 내용을 standard output(terminal)으로 출력하고, head는 앞부분을, tail은 끝부분을 출력합니다. 파일이 길면 moreless로 페이지 단위로 봅니다.

 

디렉터리는 mkdir(MaKe DIRectory)로 만들고 rmdir(ReMove DIRectory)로 지웁니다. rmdir은 빈 디렉터리만 제거합니다.

vi는 모드가 나뉜 편집기다

vi는 텍스트 편집기이고, 명령 모드와 입력 모드로 구분된다는 점이 다른 편집기와 가장 크게 다릅니다. 명령 모드에서 a 또는 i를 누르면 입력 모드로 들어가고, [esc]를 누르면 명령 모드로 돌아옵니다.

나머지는 전부 명령 모드에서의 조작입니다.

조작 입력
저장하고 닫기 :wq
닫기 :q
변경 사항을 저장하지 않고 닫기 :q!
행 번호 표시 :set number
한 행 삭제 dd
한 행 복사 yy
붙여넣기 p

사용자와 그룹은 권한 관리를 위해 있다

사용자는 adduser(= useradd)로 추가하고 userdel로 제거하며 usermod로 정보를 변경합니다. 비밀번호 변경은 passwd입니다.

 

그룹도 같은 구조입니다. groupadd·groupdel·groupmod로 추가·삭제·변경하고 groups로 확인합니다.

사용자와 그룹을 나누는 이유는 하나입니다. 권한 관리를 위해서입니다.

자원 관리 — 지금 서버가 어떤 상태인가

메모리 정보는 free로 봅니다. free -h는 사용자 친화적 단위로 표시합니다.

 

프로세스는 ps(ProceSs)로 표시하며 ps -ef를 주로 사용합니다. 종료는 kill이고, kill -9는 강제 종료입니다. 자원을 종합해서 보려면 top을 씁니다.

 

디스크 쪽은 둘로 나뉩니다. df(Disk Free)는 파일 시스템 정보를, du(Disk Usage)는 디스크 사용량 정보를 보여 줍니다. 각각 df -h, du -sh를 주로 사용합니다.

링크는 두 종류다

ln(LiNk)은 링크를 생성하며 기본값은 하드링크입니다. ln -s를 쓰면 심볼릭(소프트)링크가 만들어집니다.

 

둘의 차이는 무엇을 가리키느냐에 있습니다. 하드링크는 물리 디스크 상의 데이터 위치값을 동일하게 참조하고, 심볼릭(소프트)링크는 바로가기와 동일합니다.

패키지 관리는 배포판마다 다르다

데비안 계열(데비안, 우분투 등)은 dpkgapt를, 레드햇 계열(RHEL, 페도라, CentOS 등)은 rpmyum을 씁니다.

이 도구들이 갈라진 배경에는 의존성 문제가 있습니다. 기존 패키지 설치 방식은 의존성 문제를 발생시켰고, 이를 네트워크 저장소(repository)를 활용해 해결했습니다. 저장소 정보는 파일에 기록되어 있으며 변경할 수 있습니다.

압축과 묶기는 다른 일이다

파일 압축과 파일 묶기는 서로 다른 작업입니다. tar는 이 둘을 한 번에 사용할 수 있는 명령어이며, 옵션으로 묶기·풀기·압축 방식 등을 설정합니다.

검색과 시스템 제어

find는 특정 파일을 검색하고 옵션으로 검색 조건을 추가할 수 있습니다. which는 명령어 파일의 위치를 검색합니다.

systemctl은 옵션으로 특정 프로세스의 시작·중지·재시작·사용·미사용을 제어합니다.

파이프와 리디렉션이 명령을 잇는다

|는 명령어와 명령어를 연결합니다. grep은 결과에서 키워드를 추출하는 필터이고, >·<·>>·<< 등은 표준 입출력을 바꾸는 리디렉션입니다.

 

전체 범위에서 .conf로 끝나는 파일을 찾아 list라는 파일로 저장하려면 다음과 같이 씁니다.

find / -name "*.conf" > list

전체 프로세스 목록 중 mysql 글자가 포함된 결과만 필터링하려면 이렇게 씁니다.

ps -ef | grep mysql

권한은 열 자리로 표시된다

사용자와 그룹 정보는 파일에 들어 있다

사용자 정보는 /etc/passwd에 있습니다.

ubuntu@sw-instance2:/etc$ head /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin

한 줄은 계정:비밀번호:사용자ID:그룹ID:설명:홈디렉토리:셸의 구조입니다. 비밀번호 자리에 x가 보이는 이유는, 실제 비밀번호가 암호화되어 /etc/shadow 파일에 별도로 기록되기 때문입니다.

 

그룹 정보는 /etc/group에 있습니다.

ubuntu@sw-instance2:/etc$ head /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog,ubuntu
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:

구조는 그룹명:그룹암호:그룹ID:보조사용자입니다.

ls -l의 앞 열 자리를 네 조각으로 자른다

파일에 대한 정보는 ls -l로 확인할 수 있고, 권한은 그중 가장 앞의 10자리에 담겨 있습니다.

 

-rw-r--r--를 예로 들면 이것을 네 개의 영역으로 자릅니다. - / rw- / r-- / r-- 으로 나누고 각 자리에 번호를 붙이면 1 234 567 890이 됩니다.

첫 자리는 파일의 유형입니다.

표시 유형
- 일반 파일
d 디렉터리
b 블록 장치
c 캐릭터 장치
l 링크 파일

 

나머지 아홉 자리는 셋씩 끊어 읽습니다. 234는 파일에 대한 소유자의 권한, 567은 소유그룹의 권한, 890은 기타 사용자의 권한입니다. 소유자와 소유그룹의 이름은 권한 표시 뒤에 이어서 차례대로 나옵니다.

권한을 숫자로도 쓴다

권한의 종류는 세 가지이고, 각각 수가 정해져 있습니다.

권한 의미
r 읽기 4
w 쓰기 2
x 실행 1

각 권한에 해당하는 수를 더해서 8진수로 권한을 표시하기도 합니다. 777은 소유자·그룹·기타에 대해 모든(4+2+1) 권한을 준 것이고, 644는 소유자에게 4+2, 그룹에 4, 기타에 4를 준 것입니다.

 

리눅스를 다루는 일은 결국 이 세 가지로 정리됩니다. 어디에 있는지 알고(경로), 무엇을 할지 지시하고(명령어), 누가 할 수 있는지 정하는 것(권한)입니다.

 

반응형