Ubuntu 리눅스 기본 명령어 가이드
개요: 왜 명령어를 배워야 할까?
Ubuntu 리눅스는 대부분 서버 환경에서 GUI 없이 터미널(명령어 인터페이스)로 작업합니다. 웹 개발자든 데이터 분석가든, 클라우드 서버를 다루는 모든 개발자에게 리눅스 명령어는 필수 기술입니다.
터미널 vs GUI
구분 | GUI 환경 | 터미널 환경 |
---|
입력 방식 | 마우스 클릭 | 키보드 입력 |
인터페이스 | 시각적 인터페이스 | 명령어 기반 |
장점 | 직관적 | 효율적, 자동화 가능 |
#01. 터미널 기본 개념
1. 터미널 접속 방법
로컬 터미널
- Ubuntu Desktop:
Ctrl + Alt + T
- SSH 원격 접속:
ssh username@server_ip
프롬프트 이해하기
구성 요소 | 의미 | 예시 |
---|
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 |
%CPU | CPU 사용률 |
%MEM | 메모리 사용률 |
VSZ | 가상 메모리 크기 |
RSS | 실제 메모리 사용량 |
TTY | 터미널 |
STAT | 프로세스 상태 |
START | 시작 시간 |
TIME | CPU 사용 시간 |
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
|