리눅스
제1장. 리눅스란 무엇인가?
제1장. 리눅스란 무엇인가?
1. 운영체제란?
운영체제(OS, Operating System)는 컴퓨터를 켰을 때 가장 먼저 작동하는 소프트웨어입니다. 하드웨어(메모리, CPU, 저장장치 등)와 사용자 사이를 중개하며, 우리가 실행하는 프로그램이 원활히 동작하도록 도와줍니다. 대표적인 운영체제로는 Windows, macOS, 그리고 리눅스가 있습니다.
2. 리눅스란?
리눅스는 1991년 핀란드의 대학생 리누스 토르발스(Linus Torvalds)가 만든 운영체제 커널을 바탕으로 한 오픈소스 운영체제입니다. 처음에는 개인 프로젝트였지만, 전 세계 개발자들이 협력하여 지금은 서버, 클라우드, 스마트폰, IoT 기기, 슈퍼컴퓨터에 이르기까지 폭넓게 사용되고 있습니다.
리눅스는 안정성, 유연성, 보안성이 뛰어나고, 누구나 자유롭게 사용할 수 있어 기업 서버, 데이터센터, 클라우드 플랫폼에서 가장 널리 쓰이는 운영체제입니다.
3. 유닉스와 리눅스의 관계
리눅스는 유닉스(UNIX)를 모델로 삼아 개발된 운영체제로, 유닉스와 비슷한 구조와 철학을 따르기 때문에 “유닉스 계열(Unix-like)” 운영체제로 불립니다. 유닉스는 1969년 미국 AT&T 벨 연구소에서 개발된 상용 운영체제로, 멀티유저, 멀티태스킹 기능을 갖추고 있어 학계와 기업 환경에서 오랫동안 사용되었습니다.
하지만 유닉스는 상용 소프트웨어로 누구나 자유롭게 사용할 수 없었기에, 리누스 토르발스는 유닉스와 유사하면서도 자유롭게 사용할 수 있는 운영체제인 리눅스를 만들게 되었습니다.
4. 오픈소스와 GPL 라이선스
리눅스는 오픈소스 소프트웨어입니다. 오픈소스란 소스코드가 공개되어 누구나 자유롭게 보고, 수정하고, 배포할 수 있는 소프트웨어를 말합니다. 리눅스 커널은 GNU GPL(General Public License)이라는 라이선스를 따릅니다.
GPL의 핵심 철학은 “누구나 자유롭게 소프트웨어를 사용하고, 수정하고, 공유할 수 있어야 한다“는 것입니다. 단, 소스를 수정하거나 재배포할 경우 그 결과물 역시 같은 라이선스로 공개해야 한다는 조건이 있습니다. 이로 인해 리눅스는 협업과 공유를 통해 빠르게 발전해 왔습니다.
5. 리눅스의 구성: 커널 + GNU 도구 + 패키지 관리자
리눅스 시스템은 크게 세 가지 구성 요소로 이루어져 있습니다:
- 리눅스 커널: 하드웨어와 직접 소통하며 리소스를 제어하는 핵심 프로그램
- GNU 도구: 쉘(bash), 컴파일러(gcc), 파일 관리 명령어(ls, cp 등) 등 사용자용 도구
- 패키지 관리자: 소프트웨어 설치/업데이트를 자동으로 처리해주는 도구 (예:
apt,dnf,pacman등)
이 세 가지가 합쳐져 우리가 사용하는 하나의 완성된 리눅스 운영체제가 됩니다.
6. 리눅스 배포판이란?
리눅스는 커널과 도구들이 조합되어 있어야 운영체제로 사용할 수 있기 때문에, 이를 사용하기 쉽게 구성해서 배포하는 형태를 “배포판(Distro)“이라고 합니다. 각 배포판은 커널, GNU 도구, 패키지 관리자, 설정 파일, 그래픽 환경 등을 조합해 특징을 만듭니다.
대표적인 배포판에는 다음과 같은 것들이 있습니다:
- Ubuntu: 데스크탑과 서버 모두에서 널리 사용됨 (Debian 계열)
- Debian: 안정성과 자유 소프트웨어 철학 중심의 배포판
- Rocky Linux: RHEL과 호환되는 무료 서버용 배포판 (Red Hat 계열)
- Fedora: 최신 기술 테스트를 위한 Red Hat 기반 배포판
- Arch Linux: 고급 사용자용, 심플하고 최신 중심의 롤링 릴리즈
각 배포판은 사용 목적, 운영 환경, 철학에 따라 선택할 수 있으며, 내부는 모두 동일한 리눅스 커널을 기반으로 합니다.
정리
리눅스는 유닉스 철학을 바탕으로 만들어진 자유롭고 유연한 운영체제입니다. 오픈소스 커널과 GNU 도구들, 그리고 다양한 배포판 덕분에 오늘날 리눅스는 서버부터 스마트폰까지 광범위하게 사용되며 계속 발전하고 있습니다. 이 장에서는 리눅스의 개념과 배경을 이해하고, 앞으로 실습할 리눅스 시스템이 어떻게 구성되어 있는지를 큰 틀에서 정리해보았습니다.
제2장. 리눅스 기본 명령어와 파일 시스템 이해하기
제2장. 리눅스 기본 명령어와 파일 시스템 이해하기
1. CLI와 GUI의 차이 이해하기
리눅스를 배우기 전에 먼저 사용자 인터페이스의 차이를 이해하는 것이 중요합니다.
- GUI (Graphical User Interface): 마우스로 클릭하고 창을 조작하는 방식입니다. 우리가 흔히 사용하는 Windows나 macOS가 대표적입니다.
- CLI (Command Line Interface): 텍스트 기반의 명령어를 입력하여 조작하는 방식입니다. 리눅스는 CLI 환경에서 운영하는 경우가 많으며, 서버나 개발 환경에서 특히 널리 사용됩니다.
CLI는 처음에는 익숙하지 않을 수 있지만, 단순하고 강력하며, 리모트 환경에서도 사용 가능하다는 장점이 있습니다.
2. 명령어의 첫걸음: Hello World
많은 프로그래밍과 운영체제 학습이 그렇듯, 리눅스에서도 가장 기본이 되는 명령어는 “Hello World” 출력입니다.
echo 'hello world'
실행 결과
hello world
echo: 뒤에 입력한 문자열을 화면에 그대로 출력하는 명령어입니다.
이처럼 리눅스 CLI에서는 문자를 입력해서 컴퓨터에게 직접 명령을 내립니다. 하나하나 입력하면서 결과를 확인하는 방식입니다.
3. 현재 디렉토리 확인과 목록 조회
모든 명령어는 “현재 디렉토리” 기준으로 실행됩니다. 먼저 내가 어떤 위치에 있는지 확인해볼까요?
현재 디렉토리 경로 확인
pwd
실행 결과 예시
/home/user
pwd: “Print Working Directory“의 약자로, 현재 위치를 출력합니다.
디렉토리 안의 내용 확인
ls
실행 결과 예시
documents downloads hello_linux
ls: 현재 디렉토리에 있는 파일과 폴더 목록을 보여줍니다.
ls -l
실행 결과 예시
drwxr-xr-x 2 user user 4096 May 18 10:32 hello_linux
-rw-r--r-- 1 user user 0 May 18 10:35 hello.txt
-l옵션을 사용하면 각 항목의 상세 정보(종류, 권한, 소유자, 크기, 수정 시간 등)를 함께 볼 수 있습니다.
ls -al
-a: 숨겨진 파일까지 모두 표시-l: 상세 정보 보기
참고: 대부분의 리눅스 명령어는
명령어 -옵션형태로 옵션을 붙여서 동작을 확장하거나 결과를 조정할 수 있습니다.
4. 디렉토리 만들기
새로운 폴더를 만들고 확인해 봅시다.
mkdir hello_linux
mkdir: “make directory“의 약자로, 폴더(디렉토리)를 새로 생성합니다.
생성 확인
ls
실행 결과 예시
hello_linux
- 방금 만든
hello_linux디렉토리가 목록에 표시됩니다.
5. 빈 파일 만들기
이번에는 비어 있는 파일을 하나 만들어 봅시다.
touch hello.txt
touch: 비어 있는 파일을 생성하거나, 기존 파일의 수정 시간을 갱신하는 명령어입니다.
확인
ls -l
실행 결과 예시
-rw-r--r-- 1 user user 0 May 18 10:35 hello.txt
drwxr-xr-x 2 user user 4096 May 18 10:32 hello_linux
-로 시작하는 줄은 일반 파일,d로 시작하는 줄은 디렉토리를 나타냅니다.- 각 항목의 종류, 권한, 소유자, 파일 크기, 수정 시간 등을 확인할 수 있습니다.
6. 디렉토리 이동 (cd 명령어)
디렉토리를 만들었으면 이제 그 디렉토리 안으로 들어가 볼까요?
cd hello_linux
cd: change directory, 디렉토리를 이동하는 명령어입니다.
현재 위치 확인
pwd
/home/user/hello_linux
팁: 디렉토리 이름을 전부 다 치지 않아도 됩니다.
- 예:
cd hel입력 후Tab키를 누르면 자동완성 됩니다. (cd hel[TAB] → cd hello_linux)
상위(부모) 디렉토리로 이동하는 방법
cd ..: 한 단계 위 디렉토리로 이동cd /home/user: 절대경로를 이용한 이동
경로의 개념
.: 현재 디렉토리..: 부모 디렉토리- 절대경로:
/로 시작, 최상위 루트부터의 전체 경로 (/home/user/hello_linux) - 상대경로: 현재 위치 기준 (
../,./파일명등)
7. 파일 및 디렉토리 삭제 (rm 명령어)
이제 우리가 만든 파일과 디렉토리를 삭제해 봅시다.
rm hello.txt
rm: 파일 삭제 명령어입니다.
성공 시에는 아무 메시지도 출력되지 않습니다.
ls
(hello.txt가 사라진 상태)
디렉토리 삭제 시도
rm hello_linux
rm: cannot remove 'hello_linux': Is a directory
- 오류 메시지가 나타납니다. 리눅스에서는 디렉토리를 삭제할 때는 특별한 옵션이 필요합니다.
디렉토리 삭제 (옵션 사용)
rm -r hello_linux
-r또는--recursive: 디렉토리 내부까지 모두 삭제하는 옵션
리눅스 명령어는 성공하면 조용히 넘어가고, 실패 시에만 오류 메시지를 출력하는 경우가 많습니다.
정리
이번 장에서는 CLI 환경에서 디렉토리와 파일을 만들고, 이동하고, 삭제하는 실습을 진행했습니다.
cd,pwd,rm,rm -r,Tab 자동완성, 경로 개념(절대/상대)까지 익혔습니다. 다음 장에서는 파일 복사, 이동, 사용자 계정 및 권한 개념을 다룰 예정입니다.
제3장. 파일 복사와 이동, 파일 내용 확인 및 편집하기
제3장. 파일 복사와 이동, 파일 내용 확인 및 편집하기
1. 파일 복사 (cp 명령어)
파일을 복사하려면 cp 명령어를 사용합니다. 원본 파일을 다른 이름으로 복사하거나 다른 위치로 복사할 수 있습니다.
먼저 연습용으로 복사할 파일을 하나 만들어보겠습니다.
touch hello.txt
- 빈 텍스트 파일을 생성합니다.
echo "Hello Linux!" > hello.txt
- 파일에 간단한 내용을 추가합니다.
동일한 디렉토리 안에서 복사
cp hello.txt backup.txt
hello.txt파일을 같은 디렉토리에backup.txt라는 이름으로 복사합니다.
다른 디렉토리로 복사
mkdir backup_folder
cp hello.txt backup_folder/
backup_folder디렉토리를 만든 후, 그 안으로 파일을 복사합니다.
디렉토리 전체 복사
디렉토리는 -r 옵션을 추가해야 복사할 수 있습니다.
cp -r hello_linux backup_dir
2. 파일 이동 및 이름 변경 (mv 명령어)
mv 명령어는 파일을 이동하거나 이름을 바꾸는 데 사용됩니다.
mv hello.txt hello_linux/
hello.txt파일을hello_linux폴더로 이동합니다.
mv old.txt new.txt
- 파일 이름을
old.txt에서new.txt로 변경합니다.
참고:
mv는 복사와 달리 원본을 지우고 새 위치로 옮깁니다.
3. 파일 내용 출력 (cat, tail)
파일 내용을 확인하고 싶을 때는 cat, tail 같은 명령어를 사용할 수 있습니다.
cat: 파일 전체 내용 출력
cat hello.txt
- 텍스트 파일의 전체 내용을 한 번에 출력합니다.
실습용 시스템 정보 파일 확인
리눅스에는 시스템 정보를 담고 있는 파일들이 있습니다. 그 중 /etc/os-release 파일은 현재 사용 중인 리눅스 배포판 정보를 담고 있습니다.
cat /etc/os-release
- 운영체제 이름, 버전, 홈페이지 주소 등 정보를 확인할 수 있습니다.
tail: 파일의 마지막 몇 줄만 출력
tail /etc/os-release
- 기본적으로 마지막 10줄을 보여줍니다. 보통 이 파일은 짧기 때문에 전체가 출력됩니다.
tail -n 5 /etc/os-release
- 마지막 5줄만 출력합니다.
tail -f: 파일에 내용이 추가되는 것을 실시간으로 보기
파일이 계속해서 갱신되는 로그 파일을 실시간으로 보고 싶을 때는 -f 옵션을 사용합니다.tail -f 명령어는 출력이 계속 유지되기 때문에, 실시간으로 로그를 관찰할 수 있습니다. 이 모드에서 빠져나가려면 키보드에서 Ctrl + C를 눌러야 합니다.
tail -f /var/log/dmesg
- 시스템 부팅 시 커널 메시지를 기록하는 로그입니다. 커널 관련 메시지가 추가되면 실시간으로 화면에 출력됩니다.
참고: 배포판에 따라
/var/log/dmesg,/var/log/messages,/var/log/auth.log등이 존재합니다. 먼저ls /var/log로 확인해보세요.
4. 파일 내용 편집 (vi 편집기)
리눅스에서 가장 기본적인 편집기 중 하나는 vi입니다.
vi hello.txt
hello.txt파일을 편집기로 엽니다.
vi 기본 사용법
- 명령 모드 → 입력 모드 전환:
i입력 (insert) - 입력 모드 → 명령 모드 전환:
Esc키 - 저장 후 종료:
:wq입력 후 Enter - 저장 없이 종료:
:q!입력 후 Enter
처음에는 어려울 수 있지만, 서버 환경에서 많이 사용되므로 익숙해질 필요가 있습니다.
참고: 다른 편집기로는
nano,vim,gedit등이 있습니다. 시스템에 따라 설치되어 있지 않을 수도 있습니다.
정리
이번 장에서는 리눅스에서 자주 사용하는 파일 복사(cp), 이동 및 이름 변경(mv), 파일 내용 출력(cat, tail, tail -f), 그리고 편집(vi) 명령어를 익혔습니다.
/etc/os-release 파일을 활용해 시스템 정보도 확인해보았고, 실시간 로그 확인을 위해 tail -f 예제를 /var/log/dmesg로 구성했습니다.
이제 파일을 다루는 기본적인 작업을 직접 해보면서 익숙해지면,
다음 장에서는 리눅스 시스템의 중심인 커널과 쉘에 대해 알아보겠습니다.
제4장. 커널과 쉘 이해하기
제4장. 커널과 쉘 이해하기
1. 하드웨어와 커널, 쉘, 사용자
리눅스 시스템은 크게 네 가지 주요 구성 요소로 나눌 수 있습니다:
[사용자] ↔ [쉘] ↔ [커널] ↔ [하드웨어]
- 하드웨어: 실제 물리 장치 (CPU, 메모리, 디스크 등)
- 커널: 하드웨어를 직접 제어하는 리눅스의 핵심 (운영체제의 심장)
- 쉘: 사용자의 명령어를 해석해서 커널에 전달하고, 결과를 사용자에게 출력
- 사용자: 터미널이나 GUI를 통해 시스템을 조작하는 사람
리눅스에서 우리는 보통 쉘(Shell) 을 통해 시스템을 조작합니다. 이전 장에서 사용했던 명령어들도 전부 쉘을 통해 입력한 것입니다.
2. 쉘(Shell)이란 무엇인가?
쉘은 커널과 사용자 사이의 명령어 인터페이스 역할을 합니다. 사용자가 입력한 명령을 커널이 이해할 수 있도록 번역하고, 커널의 출력을 사람이 읽을 수 있도록 가공해 보여줍니다.
쉘은 보통 터미널에서 실행되며, 우리가 입력한 명령어 한 줄 한 줄을 해석하고 실행합니다.
3. 쉘의 종류
리눅스에는 다양한 종류의 쉘이 존재합니다. 그 중 가장 널리 사용되는 몇 가지는 다음과 같습니다:
| 쉘 이름 | 설명 |
|---|---|
sh | Bourne Shell. 전통적인 유닉스 기본 셸 |
bash | Bourne Again SHell. 대부분 리눅스에서 기본 채택된 쉘 |
zsh | 기능이 강력하고 사용자 친화적인 쉘 |
fish | 자동 완성, 구문 강조 등 편의 기능이 많은 쉘 |
dash | 매우 가벼운 쉘. 일부 시스템 스크립트에 사용 |
4. 다양한 쉘을 사용하는 이유
쉘마다 문법, 기능, 성능 특성이 다르기 때문에 용도에 맞게 선택할 수 있습니다.
bash: 범용 사용에 적합, 대부분의 리눅스 배포판에서 기본값zsh: 테마와 자동완성 기능이 풍부해 개발자들에게 인기dash: 부팅 속도에 유리한 경량 쉘
장점 요약:
- 사용자 경험 향상 (예: zsh의 자동완성)
- 스크립트 호환성 확보 (POSIX 호환용으로 dash 사용)
- 특정 작업 최적화 (예: 경량 쉘로 빠른 실행)
5. 우리는 지금 어떤 쉘을 쓰고 있을까?
현재 사용하는 쉘 확인
echo $SHELL
사용자 기본 로그인 쉘 확인
getent passwd $USER
출력 예시:
user:x:1000:1000::/home/user:/bin/bash
→ /bin/bash 가 현재 로그인 시 사용하는 기본 쉘입니다.
6. 지금까지는 bash 기반 실습
이 책에서는 기본적으로 bash를 사용해 실습하고 있습니다. 하지만 이후에는 다양한 쉘을 경험하고, 본인의 작업 스타일에 맞는 쉘을 선택해볼 수 있습니다.
향후 쉘 스크립트를 배울 때도 어떤 쉘을 기반으로 작성하는지가 중요하니, 지금부터 ’쉘’이라는 개념을 명확히 이해해두는 것이 중요합니다.
정리
이번 장에서는 리눅스의 구조를 구성하는 주요 요소인 하드웨어 ↔ 커널 ↔ 쉘 ↔ 사용자의 관계를 살펴보았고, 우리가 명령어를 입력하는 창인 쉘이 어떤 역할을 하는지 이해했습니다. 또한 여러 쉘의 종류와 차이점, 우리가 사용 중인 쉘을 확인하는 방법도 함께 배웠습니다.
다음 장에서는 파일 권한과 사용자 계정에 대해 본격적으로 학습합니다.
제5장. 파일 권한과 사용자 계정 이해하기
제5장. 파일 권한과 사용자 계정 이해하기
1. 리눅스의 권한 구조
리눅스는 다중 사용자 환경이기 때문에, 파일과 디렉토리에 대한 권한 설정이 매우 중요합니다. 권한이란 “누가 무엇을 할 수 있는가“를 정의하는 규칙입니다.
ls -l hello.txt
예시 출력:
-rw-r--r-- 1 user user 1234 May 18 10:00 hello.txt
| 구분 | 설명 |
|---|---|
- | 파일 종류 (-: 일반 파일, d: 디렉토리) |
rw- | 사용자(user)의 권한: 읽기(r), 쓰기(w), 실행(x) |
r-- | 그룹(group)의 권한 |
r-- | 기타 사용자(other)의 권한 |
2. 권한 변경 (chmod)
파일이나 디렉토리의 권한을 변경하려면 chmod 명령어를 사용합니다.
숫자 방식
chmod 755 hello.txt
- 사용자: 읽기(r=4) + 쓰기(w=2) + 실행(x=1) = 7
- 그룹: 읽기 + 실행 = 5
- 기타: 읽기 + 실행 = 5
기호 방식
chmod u+x hello.txt
- 사용자(user)에게 실행 권한(x) 추가
추가 기호:
u: 사용자(user),g: 그룹(group),o: 기타(other),a: 전체(all)+: 권한 추가,-: 권한 제거,=: 권한 지정
3. 소유자와 그룹 변경 (chown, chgrp)
파일은 소유 사용자와 소유 그룹을 가질 수 있습니다. 이를 변경하려면 chown, chgrp 명령어를 사용합니다.
sudo chown newuser:newgroup hello.txt
hello.txt의 소유자를newuser, 그룹을newgroup으로 변경
sudo chgrp newgroup hello.txt
- 그룹만 변경할 경우에는
chgrp사용 가능
참고: chown 명령은 보통 root 권한이 필요하기 때문에
sudo를 붙입니다.
4. 사용자 계정 정보 확인
리눅스는 사용자 정보를 /etc/passwd와 /etc/group 파일에 저장합니다.
현재 로그인한 사용자 확인
whoami
현재 사용자의 ID 정보 확인
id
예시 출력
uid=1000(user) gid=1000(user) groups=1000(user),27(sudo)
- uid: 사용자 ID
- gid: 기본 그룹 ID
- groups: 속한 그룹 목록
모든 사용자 목록 보기
cat /etc/passwd
모든 그룹 목록 보기
cat /etc/group
5. 사용자 생성 및 비밀번호 설정 (선택 실습)
관리자 권한이 있는 경우, 사용자 계정을 추가하는 명령도 간단히 소개할 수 있습니다.
sudo useradd newuser
sudo passwd newuser
useradd: 새로운 사용자 생성passwd: 사용자 비밀번호 설정
이 실습은 루트 권한이 필요하므로, 개인 테스트 환경에서만 시도하세요.
정리
이번 장에서는 리눅스의 파일 권한 구조와 사용자 계정 시스템에 대해 배웠습니다.
ls -l을 통해 파일 권한을 해석하고,chmod,chown,chgrp를 통해 권한과 소유자를 조정하며,whoami,id로 사용자 정보를 확인하고/etc/passwd파일도 확인해보았습니다.
다음 장에서는 프로세스 관리, 실행 중인 프로그램 확인, 종료 명령어 등을 배워보겠습니다.