프로그래밍/Linux

리눅스 기초 개념 정리 - 커널부터 파일 시스템, 권한, 프로세스까지

GONII 2026. 9. 22. 11:23

서버 운영이나 개발을 하다 보면 리눅스를 매일 쓰게 되지만, 정작 "커널이 뭐고 셸이 뭔지", "왜 배포판마다 명령어가 조금씩 다른지" 같은 기본 개념은 제대로 정리 안 하고 넘어가는 경우가 많습니다.

이번 글에서는 리눅스를 이루는 기본 구조와, 실무에서 꼭 알아야 하는 파일 시스템 · 권한 · 프로세스 개념을 한 번에 정리해보겠습니다.

리눅스란 무엇인가

엄밀히 말하면 "리눅스(Linux)"는 운영체제 전체가 아니라 커널(kernel)을 가리키는 이름입니다. 1991년 리누스 토르발스가 공개한 오픈소스 커널이 그 시작이고, 여기에 GNU 프로젝트의 각종 유틸리티(bash, coreutils 등)와 패키지 관리자, 설치 프로그램 등을 묶은 것이 우리가 흔히 "리눅스"라고 부르는 배포판(distribution)입니다.

그래서 Ubuntu, Debian, CentOS/RHEL, Fedora, Arch 같은 이름들은 전부 같은 리눅스 커널을 쓰지만, 그 위에 어떤 패키지 관리자(apt, yum/dnf, pacman)와 기본 도구를 얹었는지가 다른 것뿐입니다.

리눅스 시스템 구조

리눅스가 하드웨어부터 사용자 명령까지 어떤 계층으로 이루어져 있는지 그림으로 보면 이렇습니다.

  • 하드웨어: CPU, 메모리, 디스크, 네트워크 장치 등 실제 물리 자원
  • 커널: 프로세스 관리, 메모리 관리, 파일 시스템, 디바이스 드라이버, 네트워크 스택을 담당하는 핵심. 하드웨어를 직접 제어하는 유일한 계층입니다.
  • 셸: bash, zsh 같은 명령 해석기. 사용자가 입력한 명령을 커널이 이해할 수 있는 시스템 콜(system call)로 바꿔 전달합니다.
  • 응용 프로그램: 사용자가 실제로 실행하는 vim, nginx, python 같은 프로그램들.

즉 사용자는 셸을 거쳐 커널에 요청을 보내고, 커널이 실제 하드웨어를 조작한 뒤 결과를 다시 돌려주는 구조입니다.

파일 시스템 계층 구조(FHS)

리눅스는 윈도우처럼 C:\, D:\ 같은 드라이브 개념이 없고, /(루트) 하나에서 시작하는 단일 트리 구조를 씁니다. 디스크나 네트워크 저장소를 추가해도 트리의 특정 디렉토리에 "마운트"해서 붙이는 방식이에요.

디렉토리 용도
/ 루트, 모든 파일 시스템의 시작점
/bin, /usr/bin 기본 실행 명령어 (ls, cp 등)
/sbin 시스템 관리용 명령어 (root 권한 필요한 것들)
/etc 시스템 설정 파일 모음
/home 일반 사용자 홈 디렉토리
/root root 사용자의 홈 디렉토리
/var 로그, 캐시 등 자주 변하는 데이터 (/var/log 등)
/tmp 임시 파일, 재부팅 시 삭제될 수 있음
/dev 디스크, 터미널 등 장치 파일
/proc 실행 중인 프로세스 정보 (가상 파일 시스템)
/lib, /usr/lib 라이브러리 파일

파일 권한과 소유자

리눅스의 모든 파일에는 소유자(owner) · 소유 그룹(group) · 그 외(other) 세 주체에 대해 각각 읽기(r) · 쓰기(w) · 실행(x) 권한이 부여됩니다.

$ ls -l myscript.sh
-rwxr-xr-- 1 dev devteam 220 Sep 20 10:00 myscript.sh

위 예시를 해석하면 이렇습니다.

  • - : 일반 파일(디렉토리면 d)
  • rwx : 소유자(dev)는 읽기·쓰기·실행 모두 가능
  • r-x : 그룹(devteam)은 읽기·실행만 가능
  • r-- : 그 외 사용자는 읽기만 가능

이 권한은 숫자(8진수)로도 표기합니다. r=4, w=2, x=1을 더하는 방식이라 rwxr-xr--는 754가 됩니다.

chmod 754 myscript.sh    # 권한을 숫자로 변경
chmod u+x myscript.sh    # 소유자에게 실행 권한 추가
chown dev:devteam myscript.sh   # 소유자/그룹 변경

프로세스 기본 개념

실행 중인 프로그램은 각각 고유한 PID(Process ID)를 가지며, 그 프로세스를 실행시킨 부모 프로세스는 PPID로 연결됩니다.

ps aux          # 현재 실행 중인 프로세스 전체 확인
ps -ef | grep nginx   # nginx 관련 프로세스만 검색
kill -9 1234    # PID 1234 프로세스 강제 종료
top             # 실시간 리소스 사용량 확인

터미널에서 명령을 실행하면 기본적으로 foreground로 실행되어 셸을 점유합니다. 끝에 &를 붙이면 background로 돌리고 셸을 계속 쓸 수 있습니다.

long_running_task &   # 백그라운드 실행
jobs                   # 백그라운드 작업 목록
fg %1                  # 다시 foreground로 전환

사용자와 그룹

리눅스는 다중 사용자 운영체제로 설계되었기 때문에 사용자(user)와 그룹(group) 개념이 시스템 전반에 깔려 있습니다.

  • /etc/passwd : 사용자 계정 정보
  • /etc/group : 그룹 정보
  • root : 모든 권한을 가진 최상위 관리자 계정
  • sudo : 일반 사용자가 일시적으로 root 권한을 빌려 명령을 실행하는 방식
whoami          # 현재 사용자 확인
sudo apt update # root 권한으로 명령 실행
useradd -m dev  # dev 사용자 생성(홈 디렉토리 포함)

자주 쓰는 기본 명령어

명령어 설명
pwd 현재 디렉토리 경로 출력
ls -al 숨김 파일 포함 상세 목록 출력
cd 디렉토리 이동
cp, mv, rm 파일 복사·이동·삭제
cat, less 파일 내용 출력
grep 텍스트 검색
find 파일/디렉토리 검색
df -h 디스크 사용량 확인
du -sh 디렉토리 용량 확인
man <명령어> 매뉴얼(도움말) 확인

마무리

정리하면 리눅스는 커널(핵심 자원 관리) + 셸(사용자 인터페이스) + 배포판별 도구로 이루어져 있고, 그 위에서 단일 트리 파일 시스템, 소유자/권한 체계, 프로세스와 사용자 개념이 동작하는 구조입니다. 이 기본기만 잡아두면 이후 서버 운영이나 셸 스크립트, 나아가 컨테이너/오케스트레이션 관련 글들도 훨씬 수월하게 읽힐 거예요.

반응형