TIL/[TIL]

[TIL]Linux, Ubuntu, Vim, Docker 기초

namerong 2026. 8. 3. 15:51

1. 학습 주제

Linux와 Ubuntu의 기본 개념, 터미널 명령어, 에디터 사용법, Docker의 이미지와 컨테이너 개념을 학습했다.
서버 환경에서는 GUI보다 터미널을 많이 사용하기 때문에 기본 명령어와 파일 편집 도구에 익숙해지는 것이 중요하다.

핵심 내용은 다음과 같다.

  • Linux와 Ubuntu 개념
  • Shell과 터미널
  • Nano, vi, vim 차이
  • 절대경로와 상대경로
  • 기본 Linux 명령어
  • 리디렉션과 grep
  • Docker 이미지와 컨테이너
  • Docker 컨테이너 실행, 접속, 중지, 삭제

2. Linux란?

Linux는 운영체제의 핵심인 Kernel을 기반으로 만들어진 운영체제 계열이다.
서버, 클라우드, Docker, 안드로이드 등 다양한 환경에서 많이 사용된다.

Linux 자체는 하나의 완성된 제품이라기보다, 여러 배포판의 기반이 된다.

대표적인 Linux 배포판은 다음과 같다.

배포판 특징
Ubuntu 입문자가 사용하기 좋고 자료가 많음
Debian 안정성을 중요하게 여김
CentOS / Rocky Linux 서버 환경에서 많이 사용
Fedora 최신 기술 반영이 빠름
Alpine 가볍고 Docker 이미지에서 자주 사용

수업에서는 Ubuntu를 중심으로 Linux 환경을 다뤘다.


3. Ubuntu와 VirtualBox

Ubuntu는 Linux 배포판 중 하나이다.
데스크톱이나 서버 환경에서 많이 사용되고, 패키지 설치 자료가 많아 학습용으로도 적합하다.

VirtualBox는 내 컴퓨터 안에 가상 컴퓨터를 만들어주는 프로그램이다.

내 컴퓨터
-> VirtualBox
-> Ubuntu 가상 머신

이렇게 하면 실제 컴퓨터 운영체제를 바꾸지 않고도 Ubuntu 환경을 실습할 수 있다.


4. Shell이란?

Shell은 사용자가 입력한 명령어를 운영체제에 전달하는 프로그램이다.

사용자 명령어
-> Shell
-> OS Kernel
-> 실행 결과

예를 들어 터미널에 다음 명령어를 입력하면:

ls

Shell이 이 명령을 해석해서 현재 디렉터리의 파일 목록을 출력한다.

자주 사용하는 Shell은 다음과 같다.

Shell 특징
sh 기본적인 Shell
bash Linux에서 많이 사용
zsh macOS 기본 Shell로 많이 사용

5. Nano, vi, vim 차이

터미널 환경에서는 파일을 수정할 때 터미널용 에디터를 사용한다.

에디터 특징
Nano 사용법이 단순하고 입문자에게 쉬움
vi 대부분의 Unix/Linux 서버에 기본 포함된 에디터
vim vi의 확장판으로 기능이 더 많음

nano는 화면 아래에 단축키가 보여서 처음 쓰기 쉽다.
vi와 vim은 처음에는 어렵지만, 서버 환경에서 자주 만난다.

vim은 플러그인을 붙이면 IDE처럼 사용할 수도 있다.

자동완성
문법 강조
파일 탐색
검색
Git 연동

서버에서 설정 파일을 빠르게 고쳐야 할 때 vi 또는 vim을 사용할 일이 많다.


6. Apt

apt는 Ubuntu에서 패키지를 설치하고 관리하는 도구이다.

sudo apt update
sudo apt install vim

역할은 다음과 같다.

명령어 의미
apt update 설치 가능한 패키지 목록 갱신
apt install 패키지 설치
apt remove 패키지 삭제

Ubuntu에서 프로그램을 설치할 때 자주 사용한다.


7. 절대경로와 상대경로

경로는 파일이나 디렉터리의 위치를 나타낸다.

절대경로는 루트 디렉터리 /부터 시작하는 전체 경로이다.

/home/user/project/file.txt

상대경로는 현재 위치를 기준으로 한 경로이다.

./file.txt
../project/file.txt

자주 쓰는 기호는 다음과 같다.

기호 의미
/ 루트 디렉터리
. 현재 디렉터리
.. 상위 디렉터리
~ 현재 사용자의 홈 디렉터리

8. 기본 Linux 명령어

자주 사용하는 명령어는 다음과 같다.

명령어 역할
pwd 현재 위치 출력
ls 파일 목록 출력
cd 디렉터리 이동
mkdir 디렉터리 생성
touch 빈 파일 생성
rm 파일 또는 디렉터리 삭제
cat 파일 내용 출력
cp 파일 복사
mv 파일 이동 또는 이름 변경
find 파일 검색
which 명령어 실행 위치 확인

예시:

mkdir test
cd test
touch memo.txt
cat memo.txt

9. rm 사용 주의

rm은 삭제 명령어이다.
휴지통으로 보내는 것이 아니라 바로 삭제되기 때문에 조심해야 한다.

rm file.txt
rm -r folder

특히 다음 명령은 매우 위험하다.

rm -rf /

삭제 명령어는 실행 전 경로를 꼭 확인해야 한다.


10. 리디렉션

리디렉션은 명령어의 출력 결과를 파일로 보내는 기능이다.

echo "hello" > memo.txt

>는 기존 내용을 덮어쓴다.

echo "world" >> memo.txt

>>는 기존 내용 뒤에 추가한다.

정리하면 다음과 같다.

기호 의미
> 출력 결과를 파일에 덮어쓰기
>> 출력 결과를 파일에 이어쓰기
< 파일 내용을 입력으로 사용

11. grep과 정규 표현식

grep은 파일 내용에서 특정 문자열을 찾는 명령어이다.

grep "error" app.log

정규 표현식을 함께 사용하면 더 복잡한 패턴도 찾을 수 있다.

grep "^Error" app.log

의미는 다음과 같다.

표현식 의미
^ 줄의 시작
$ 줄의 끝
. 임의의 한 글자
* 앞 패턴이 0번 이상 반복

로그 파일에서 에러를 찾거나 설정 파일에서 특정 값을 찾을 때 많이 사용한다.


12. Docker란?

Docker는 애플리케이션을 컨테이너라는 격리된 환경에서 실행하고 관리하는 도구이다.

간단히 말하면 다음과 같다.

프로그램 실행에 필요한 것들
+ 라이브러리
+ 설정
+ 실행 환경
= 이미지로 묶음

이미지를 실행한 상태
= 컨테이너

Docker를 사용하면 내 컴퓨터, 서버, AWS 등 어디서 실행하든 비슷한 환경을 만들 수 있다.


13. 이미지와 컨테이너

Docker에는 이미지와 컨테이너가 있다.

개념 의미
이미지 실행에 필요한 파일, 라이브러리, 설정을 묶은 템플릿
컨테이너 이미지를 실제로 실행한 상태

비유하면 다음과 같다.

이미지 = 실행 설계도
컨테이너 = 설계도로 실제 실행된 프로그램

하나의 이미지로 여러 컨테이너를 만들 수 있다.


14. Docker를 사용하는 이유

Docker를 사용하면 실행 환경을 맞추기 쉽다.

예를 들어 어떤 프로젝트가 특정 버전의 Ubuntu, Java, Python, 라이브러리를 필요로 한다면 이 환경을 이미지로 묶어둘 수 있다.

장점은 다음과 같다.

  • 환경 차이로 인한 오류를 줄일 수 있다.
  • 배포가 쉬워진다.
  • 컨테이너 단위로 실행과 삭제가 가능하다.
  • 서버에 여러 서비스를 격리해서 실행할 수 있다.
  • Docker Hub, GitHub, AWS 등과 연결해 배포하기 좋다.

15. Scale Up과 Scale Out

서비스 성능을 늘리는 방식에는 Scale Up과 Scale Out이 있다.

개념 의미
Scale Up 서버 한 대의 성능을 높이는 것
Scale Out 서버나 컨테이너 수를 늘리는 것

예를 들어 CPU와 RAM을 더 좋은 것으로 바꾸는 것은 Scale Up이다.
같은 서버를 여러 대로 늘리는 것은 Scale Out이다.

Docker는 컨테이너 단위로 서비스를 여러 개 띄우기 좋아서 Scale Out 구조와 잘 맞는다.


16. Docker 기본 명령어

실행 중인 컨테이너 목록을 확인한다.

docker ps

전체 컨테이너 목록을 확인한다.

docker ps -a

Docker 명령어 도움말을 확인한다.

docker --help

컨테이너를 시작한다.

docker start ubuntu_test2

컨테이너에 접속한다.

docker attach ubuntu_test2

컨테이너를 중지한다.

docker container stop ubuntu_test2

컨테이너를 강제로 삭제한다.

docker container rm -f ubuntu_test2

중지된 컨테이너를 한 번에 정리한다.

docker container prune

17. 컨테이너에서 빠져나오기

컨테이너에 접속한 상태에서 빠져나오는 방법은 두 가지가 있다.

Ctrl + P, Q

이 방식은 컨테이너를 계속 실행한 채로 빠져나온다.

Ctrl + D
exit

이 방식은 Shell을 종료하므로 컨테이너도 종료될 수 있다.

정리하면 다음과 같다.

방법 결과
Ctrl + P, Q 컨테이너 실행 유지 후 빠져나오기
Ctrl + D Shell 종료
exit Shell 종료

18. 핵심 정리

  1. Linux는 서버와 클라우드 환경에서 많이 사용하는 운영체제 계열이다.
  2. Ubuntu는 Linux 배포판 중 하나로 학습과 서버 환경에서 자주 사용된다.
  3. VirtualBox를 사용하면 내 컴퓨터 안에서 Ubuntu 가상 머신을 실행할 수 있다.
  4. Shell은 사용자의 명령어를 운영체제에 전달하는 프로그램이다.
  5. Nano는 쉽고, vi는 기본 제공 가능성이 높고, vim은 확장성이 좋다.
  6. apt는 Ubuntu의 패키지 설치 및 관리 도구이다.
  7. 절대경로는 /부터 시작하고, 상대경로는 현재 위치를 기준으로 한다.
  8. ls, mkdir, touch, rm, cat, cp, mv, find, which는 기본 명령어로 익숙해져야 한다.
  9. 리디렉션은 명령어 출력 결과를 파일로 저장하거나 이어붙일 때 사용한다.
  10. grep은 파일 내용에서 특정 문자열이나 패턴을 찾을 때 사용한다.
  11. Docker는 애플리케이션을 컨테이너로 실행하고 관리하는 도구이다.
  12. 이미지는 실행 환경 템플릿이고, 컨테이너는 이미지를 실행한 상태이다.
  13. Docker를 사용하면 환경 차이를 줄이고 배포를 쉽게 만들 수 있다.
  14. docker ps는 실행 중인 컨테이너, docker ps -a는 전체 컨테이너를 보여준다.
  15. Ctrl + P, Q는 컨테이너를 유지한 채 빠져나오는 방법이다.
  16. docker container prune은 중지된 컨테이너를 정리할 때 사용한다.