Post

Ubuntu 리눅스 기본 명령어 가이드

Ubuntu 리눅스를 처음 시작하는 개발자를 위한 필수 명령어 가이드입니다. 파일 및 디렉토리 관리, 권한 설정, 프로세스 관리, 네트워크 명령어까지 실무에서 자주 사용하는 모든 기본 명령어를 예제와 함께 설명합니다. 이 가이드 하나로 Ubuntu 서버 관리의 기초를 완전히 마스터할 수 있습니다.

Ubuntu 리눅스 기본 명령어 가이드

Ubuntu 리눅스 기본 명령어 가이드

개요: 왜 명령어를 배워야 할까?

Ubuntu 리눅스는 대부분 서버 환경에서 GUI 없이 터미널(명령어 인터페이스)로 작업합니다. 웹 개발자든 데이터 분석가든, 클라우드 서버를 다루는 모든 개발자에게 리눅스 명령어는 필수 기술입니다.

터미널 vs GUI

구분GUI 환경터미널 환경
입력 방식마우스 클릭키보드 입력
인터페이스시각적 인터페이스명령어 기반
장점직관적효율적, 자동화 가능

#01. 터미널 기본 개념

1. 터미널 접속 방법

로컬 터미널

  • Ubuntu Desktop: Ctrl + Alt + T
  • SSH 원격 접속: ssh username@server_ip

프롬프트 이해하기

1
user@hostname:~$
구성 요소의미예시
user현재 사용자명ubuntu, admin
hostname컴퓨터 이름web-server, ubuntu-vm
~현재 위치~(홈), /var/log
$일반 사용자$ (user), # (root)

2. 기본 단축키

단축키기능활용
Ctrl + C명령 중단실행 중인 프로그램 강제 종료
Ctrl + D터미널 종료로그아웃
Ctrl + L화면 지우기clear 명령과 동일
Ctrl + A줄 시작으로 이동긴 명령어 편집 시 유용
Ctrl + E줄 끝으로 이동명령어 끝에 옵션 추가
Ctrl + U줄 전체 삭제잘못 입력한 명령어 지우기
/ 명령어 히스토리이전 명령어 재사용
Tab자동 완성파일명, 명령어 자동 완성

#02. 디렉토리 탐색 명령어

1. 현재 위치 확인 - pwd

Print Working Directory: 현재 작업 중인 디렉토리 경로를 출력합니다.

1
2
3
4
5
6
7
# 현재 위치 확인
$ pwd
/home/ubuntu

# 심볼릭 링크의 실제 경로 확인
$ pwd -P
/home/ubuntu

2. 디렉토리 이동 - cd

Change Directory: 디렉토리를 이동합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 홈 디렉토리로 이동
$ cd
$ cd ~
$ cd /home/ubuntu

# 특정 디렉토리로 이동
$ cd /var/log
$ pwd
/var/log

# 상위 디렉토리로 이동
$ cd ..
$ pwd
/var

# 이전 디렉토리로 이동
$ cd -
$ pwd
/var/log

# 루트 디렉토리로 이동
$ cd /
$ pwd
/

상대 경로 vs 절대 경로

1
2
3
4
5
6
7
# 절대 경로 (루트부터 시작)
$ cd /home/ubuntu/Documents

# 상대 경로 (현재 위치 기준)
$ cd Documents        # 현재 위치의 Documents 폴더
$ cd ../Downloads     # 상위 폴더의 Downloads 폴더
$ cd ../../etc        # 두 단계 상위의 etc 폴더

3. 디렉토리 내용 확인 - ls

List: 디렉토리 내용을 출력합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 기본 출력
$ ls
Desktop  Documents  Downloads  Pictures

# 상세 정보 출력
$ ls -l
total 16
drwxr-xr-x 2 ubuntu ubuntu 4096 Aug  6 10:30 Desktop
drwxr-xr-x 2 ubuntu ubuntu 4096 Aug  6 10:30 Documents
drwxr-xr-x 2 ubuntu ubuntu 4096 Aug  6 10:30 Downloads
drwxr-xr-x 2 ubuntu ubuntu 4096 Aug  6 10:30 Pictures

# 숨김 파일까지 표시
$ ls -a
.  ..  .bashrc  .profile  Desktop  Documents  Downloads

# 파일 크기를 읽기 쉽게 표시
$ ls -lh
total 16K
drwxr-xr-x 2 ubuntu ubuntu 4.0K Aug  6 10:30 Desktop
drwxr-xr-x 2 ubuntu ubuntu 4.0K Aug  6 10:30 Documents

# 숨김 파일까지 상세 정보 출력
$ ls -al

# 최신 파일 순으로 정렬
$ ls -lt

# 크기 순으로 정렬
$ ls -lS

# 확장자별로 색상 표시
$ ls --color=auto

ls -l 출력 정보 해석

1
drwxr-xr-x 2 ubuntu ubuntu 4096 Aug  6 10:30 Documents
부분의미설명
d파일 타입d(디렉토리), -(파일), l(링크)
rwxr-xr-x권한소유자/그룹/기타 사용자 권한
2링크 수하드링크 개수
ubuntu ubuntu소유자 그룹소유자명 그룹명
4096파일 크기바이트 단위
Aug 6 10:30수정 시간마지막 수정된 날짜/시간
Documents파일명파일 또는 디렉토리 이름

#03. 파일 및 디렉토리 관리

1. 디렉토리 생성 - mkdir

Make Directory: 새 디렉토리를 생성합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 단일 디렉토리 생성
$ mkdir project
$ ls
project

# 여러 디렉토리 동시 생성
$ mkdir web mobile api
$ ls
api  mobile  project  web

# 중간 경로까지 자동 생성
$ mkdir -p project/frontend/src/components
$ ls -R project/
project/:
frontend

project/frontend:
src

project/frontend/src:
components

project/frontend/src/components:

# 권한 지정하여 생성
$ mkdir -m 755 public_folder

2. 파일 생성 - touch

Touch: 빈 파일을 생성하거나 파일의 타임스탬프를 변경합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 빈 파일 생성
$ touch index.html
$ ls -l index.html
-rw-r--r-- 1 ubuntu ubuntu 0 Aug  6 10:45 index.html

# 여러 파일 동시 생성
$ touch style.css script.js README.md
$ ls
index.html  script.js  style.css  README.md

# 파일 시간 업데이트
$ touch existing_file.txt

# 특정 시간으로 설정
$ touch -t 202501010000 newfile.txt

3. 파일/디렉토리 복사 - cp

Copy: 파일이나 디렉토리를 복사합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 파일 복사
$ cp index.html backup.html
$ ls
backup.html  index.html

# 디렉토리로 복사
$ mkdir backup
$ cp index.html backup/
$ ls backup/
index.html

# 여러 파일 복사
$ cp *.html *.css backup/

# 디렉토리 전체 복사
$ cp -r project project_backup
$ ls
project  project_backup

# 원본 속성 유지하며 복사
$ cp -p original.txt copy.txt

# 대화형 복사 (덮어쓰기 확인)
$ cp -i file1.txt file2.txt
cp: overwrite 'file2.txt'? y

4. 파일/디렉토리 이동/이름변경 - mv

Move: 파일을 이동하거나 이름을 변경합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 파일 이름 변경
$ mv old_name.txt new_name.txt
$ ls
new_name.txt

# 파일 이동
$ mkdir documents
$ mv new_name.txt documents/
$ ls documents/
new_name.txt

# 여러 파일 이동
$ mv *.txt *.md documents/

# 디렉토리 이름 변경
$ mv documents docs
$ ls
docs

# 대화형 이동 (덮어쓰기 확인)
$ mv -i source.txt target.txt

5. 파일/디렉토리 삭제 - rm

Remove: 파일이나 디렉토리를 삭제합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 파일 삭제
$ rm unwanted_file.txt

# 여러 파일 삭제
$ rm file1.txt file2.txt
$ rm *.bak

# 대화형 삭제 (확인 요청)
$ rm -i important_file.txt
rm: remove regular file 'important_file.txt'? n

# 강제 삭제 (확인 없이)
$ rm -f file.txt

# 디렉토리 삭제 (재귀적)
$ rm -r old_directory
$ rm -rf unwanted_folder    # 강제 삭제

# 빈 디렉토리만 삭제
$ rmdir empty_folder

⚠️ 주의: rm -rf는 매우 강력한 명령어입니다. 특히 rm -rf / 같은 명령은 시스템을 파괴할 수 있으니 주의하세요.

#04. 파일 내용 확인 및 편집

1. 파일 전체 내용 보기 - cat

Concatenate: 파일 내용을 출력합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 파일 내용 출력
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="22.04.3 LTS (Jammy Jellyfish)"
ID=ubuntu
ID_LIKE=debian

# 여러 파일 연결하여 출력
$ cat file1.txt file2.txt

# 줄 번호와 함께 출력
$ cat -n /etc/passwd
     1	root:x:0:0:root:/root:/bin/bash
     2	daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

# 빈 줄 압축하여 출력
$ cat -s file_with_empty_lines.txt

# 탭 문자를 ^I로 표시
$ cat -T file_with_tabs.txt

2. 파일 앞부분 보기 - head

파일의 처음 몇 줄을 출력합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 기본 10줄 출력
$ head /var/log/syslog

# 특정 줄 수 출력
$ head -n 5 /etc/passwd
$ head -5 /etc/passwd        # 동일한 결과

# 바이트 단위로 출력
$ head -c 100 file.txt

# 여러 파일의 헤더 출력
$ head -3 *.txt
==> file1.txt <==
line 1
line 2
line 3

==> file2.txt <==
another line 1
another line 2
another line 3

3. 파일 뒷부분 보기 - tail

파일의 마지막 몇 줄을 출력합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 기본 10줄 출력
$ tail /var/log/syslog

# 특정 줄 수 출력
$ tail -n 20 /var/log/auth.log

# 실시간 로그 모니터링 (매우 유용!)
$ tail -f /var/log/syslog
# Ctrl+C로 중단

# 여러 파일 동시 모니터링
$ tail -f /var/log/syslog /var/log/auth.log

# 특정 줄부터 끝까지 출력
$ tail -n +10 file.txt    # 10번째 줄부터 끝까지

4. 페이지 단위로 보기 - less/more

긴 파일을 페이지 단위로 나누어 봅니다.

1
2
3
4
5
# less 사용 (권장)
$ less /var/log/syslog

# more 사용
$ more /etc/passwd

less 내부 명령어

기능
Space다음 페이지
b이전 페이지
/한 줄씩 이동
/검색어앞으로 검색
?검색어뒤로 검색
n다음 검색 결과
N이전 검색 결과
G파일 끝으로
g파일 시작으로
q종료

5. 파일에서 문자열 검색 - grep

Global Regular Expression Print: 파일에서 특정 문자열을 검색합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 기본 검색
$ grep "ubuntu" /etc/passwd
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash

# 대소문자 구분 없이 검색
$ grep -i "ubuntu" /etc/passwd

# 줄 번호와 함께 출력
$ grep -n "root" /etc/passwd
1:root:x:0:0:root:/root:/bin/bash

# 매칭되지 않는 줄 출력
$ grep -v "nologin" /etc/passwd

# 여러 파일에서 검색
$ grep "error" /var/log/*.log

# 재귀적 검색 (디렉토리 내 모든 파일)
$ grep -r "TODO" /home/ubuntu/project/

# 정확한 단어만 매칭
$ grep -w "cat" /etc/passwd

# 문자열 앞뒤 줄도 함께 출력
$ grep -A 2 -B 2 "error" /var/log/syslog
# -A: After (뒤 2줄), -B: Before (앞 2줄)

# 매칭된 파일명만 출력
$ grep -l "error" /var/log/*.log

# 매칭 개수 출력
$ grep -c "ubuntu" /etc/passwd

#05. 파일 권한 관리

1. 권한 확인

1
2
$ ls -l example.txt
-rw-r--r-- 1 ubuntu ubuntu 1024 Aug  6 10:30 example.txt

권한 표기법 해석

1
2
3
4
5
-rw-r--r--
│││ │││ │││
│││ │││ └── 기타 사용자 (others)
│││ └────── 그룹 (group)
└────────── 소유자 (owner)
문자의미수치
r읽기 (read)4
w쓰기 (write)2
x실행 (execute)1
-권한 없음0

2. 권한 변경 - chmod

Change Mode: 파일이나 디렉토리의 권한을 변경합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 수치 방식으로 권한 설정
$ chmod 755 script.sh
$ ls -l script.sh
-rwxr-xr-x 1 ubuntu ubuntu 128 Aug  6 10:30 script.sh

# 문자 방식으로 권한 설정
$ chmod u+x script.sh        # 소유자에게 실행 권한 추가
$ chmod g-w file.txt         # 그룹에서 쓰기 권한 제거
$ chmod o=r file.txt         # 기타 사용자에게 읽기 권한만 설정
$ chmod a+r file.txt         # 모든 사용자에게 읽기 권한 추가

# 재귀적으로 권한 변경
$ chmod -R 755 /var/www/html/

# 일반적인 권한 설정 예시
$ chmod 644 document.txt     # 파일: 소유자 읽기/쓰기, 기타 읽기만
$ chmod 755 directory/       # 디렉토리: 소유자 전체, 기타 읽기/실행
$ chmod 600 private_key      # 비밀키: 소유자만 읽기/쓰기

3. 소유자 변경 - chown

Change Owner: 파일이나 디렉토리의 소유자를 변경합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 소유자만 변경
$ chown newuser file.txt

# 소유자와 그룹 동시 변경
$ chown newuser:newgroup file.txt

# 그룹만 변경 (chgrp와 동일)
$ chown :newgroup file.txt

# 재귀적으로 변경
$ chown -R apache:apache /var/www/html/

# 참조 파일과 동일하게 설정
$ chown --reference=other_file.txt target_file.txt

#06. 프로세스 관리

1. 실행 중인 프로세스 확인 - ps

Process Status: 현재 실행 중인 프로세스를 확인합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 현재 터미널의 프로세스
$ ps
    PID TTY          TIME CMD
   1234 pts/0    00:00:00 bash
   1456 pts/0    00:00:00 ps

# 모든 프로세스 상세 정보
$ ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.1 167400 11904 ?        Ss   10:00   0:01 /sbin/init
ubuntu      1234  0.0  0.0  21532  5120 pts/0    Ss   10:30   0:00 -bash

# 트리 형태로 프로세스 관계 표시
$ ps auxf

# 특정 프로세스 검색
$ ps aux | grep apache
$ ps aux | grep mysql

# 실시간 프로세스 모니터링
$ top
$ htop    # 더 사용자 친화적 (설치 필요)

ps aux 출력 설명

컬럼의미
USER프로세스 소유자
PID프로세스 ID
%CPUCPU 사용률
%MEM메모리 사용률
VSZ가상 메모리 크기
RSS실제 메모리 사용량
TTY터미널
STAT프로세스 상태
START시작 시간
TIMECPU 사용 시간
COMMAND실행 명령어

2. 프로세스 종료 - kill

프로세스를 종료합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 기본 종료 시그널 (TERM)
$ kill 1234

# 강제 종료 (KILL)
$ kill -9 1234
$ kill -KILL 1234

# 프로세스명으로 종료
$ killall firefox
$ killall -9 apache2

# 패턴으로 프로세스 찾아 종료
$ pkill -f "python script.py"
$ pkill -u username    # 특정 사용자의 모든 프로세스

# 프로세스에 다양한 시그널 전송
$ kill -HUP 1234      # 재시작 시그널
$ kill -USR1 1234     # 사용자 정의 시그널

#07. 네트워크 명령어

1. 네트워크 연결 확인 - ping

1
2
3
4
5
6
7
8
9
10
11
12
13
# 기본 ping
$ ping google.com
PING google.com (172.217.175.46): 56 data bytes
64 bytes from 172.217.175.46: icmp_seq=0 time=23.123 ms

# 횟수 제한
$ ping -c 4 google.com

# IPv6 사용
$ ping6 google.com

# 큰 패킷 전송
$ ping -s 1024 google.com

2. 네트워크 정보 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# IP 주소 확인 (최신 명령어)
$ ip addr show
$ ip a

# 구버전 명령어 (호환성용)
$ ifconfig

# 라우팅 테이블 확인
$ ip route show

# DNS 정보 확인 (기본보기)
$ nslookup google.com

# DNS 정보 확인 (상세보기)
$ dig google.com

# 네트워크 연결 상태
$ ss -tuln

3. 파일 다운로드

1
2
3
# wget 사용
$ wget https://example.com/file.zip
$ wget -O custom_name.zip https://example.com/file.zip

#08. 시스템 정보 확인

1. 시스템 리소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 메모리 사용량
$ free -h
               total        used        free      shared  buff/cache   available
Mem:           3.8Gi       1.2Gi       1.8Gi       180Mi       800Mi       2.4Gi
Swap:          2.0Gi          0B       2.0Gi

# 디스크 사용량
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        20G  8.5G   11G  45% /
tmpfs           1.9G     0  1.9G   0% /dev/shm

# 디렉토리 크기
$ du -sh /var/log
156M    /var/log

$ du -h --max-depth=1 /var/
4.0K    /var/backups
156M    /var/log
8.0K    /var/mail

# CPU 정보
$ lscpu
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
CPU(s):              2

# 시스템 부하
$ uptime
 10:45:23 up  2:30,  1 user,  load average: 0.15, 0.20, 0.18

# 실시간 시스템 모니터링
$ htop
$ top

2. 시스템 정보

1
2
3
4
5
6
7
8
9
10
11
12
13
# 운영체제 정보
$ uname -a
Linux ubuntu-vm 5.15.0-78-generic #85-Ubuntu SMP Fri Jul 7 15:25:09 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

# 배포판 정보
$ lsb_release -a
$ cat /etc/os-release

# 하드웨어 정보
$ lshw -short
$ lsblk    # 블록 디바이스
$ lsusb    # USB 디바이스
$ lspci    # PCI 디바이스

#09. 압축 및 아카이브

1. tar 아카이브

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 압축 생성
$ tar -czf archive.tar.gz folder/
$ tar -czf backup_$(date +%Y%m%d).tar.gz /home/ubuntu/

# 압축 해제
$ tar -xzf archive.tar.gz

# 압축 내용 확인 (해제하지 않고)
$ tar -tzf archive.tar.gz

# 특정 디렉토리에 압축 해제
$ tar -xzf archive.tar.gz -C /tmp/

# 진행 상황 표시
$ tar -czvf archive.tar.gz folder/

2. zip 압축

zip 명령은 기본적으로 Ubuntu에 설치되어 있지 않다.

그러므로 아래 명령을 통해서 zip 명령을 설치한 후에 사용 가능하다.

1
$ sudu apt-get install -y zip

zip 압축/해제

1
2
3
4
5
6
7
8
9
10
11
# zip 압축 생성
$ zip -r archive.zip folder/

# 압축 해제
$ unzip archive.zip

# 특정 디렉토리에 해제
$ unzip archive.zip -d /tmp/

# 압축 내용 확인
$ unzip -l archive.zip
This post is licensed under CC BY 4.0 by the author.