Post

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

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

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

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

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

터미널 vs GUI

graph LR
    A[사용자] --> B[GUI 환경]
    A --> C[터미널 환경]

    B --> B1[마우스 클릭]
    B --> B2[시각적 인터페이스]
    B --> B3[직관적]

    C --> C1[키보드 입력]
    C --> C2[명령어 기반]
    C --> C3[효율적]
    C --> C4[자동화 가능]

#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
# 기본 출력
$ 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 -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
# 소유자만 변경
$ sudo chown newuser file.txt

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

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

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

# 참조 파일과 동일하게 설정
$ sudo 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     # 사용자 정의 시그널

3. 백그라운드 실행

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 명령어를 백그라운드에서 실행
$ python long_script.py &
[1] 2345

# 실행 중인 작업 확인
$ jobs
[1]+  Running    python long_script.py &

# 백그라운드 작업을 포어그라운드로
$ fg %1

# 실행 중인 프로세스를 백그라운드로
# Ctrl+Z로 일시정지 후
$ bg %1

# nohup: 터미널 종료 후에도 계속 실행
$ nohup python long_script.py > output.log 2>&1 &

#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
$ route -n

# DNS 정보 확인
$ nslookup google.com
$ dig google.com

# 네트워크 연결 상태
$ netstat -tuln
$ ss -tuln    # 최신 명령어

3. 파일 다운로드

1
2
3
4
5
6
7
8
9
10
11
12
13
# wget 사용
$ wget https://example.com/file.zip
$ wget -O custom_name.zip https://example.com/file.zip

# curl 사용
$ curl -O https://example.com/file.zip
$ curl -o custom_name.zip https://example.com/file.zip

# 재귀적 다운로드
$ wget -r -np https://example.com/folder/

# 백그라운드 다운로드
$ wget -b https://example.com/large_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 압축

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

#10. 텍스트 처리 유틸리티

1. 텍스트 정렬 및 중복 제거

1
2
3
4
5
6
7
8
9
10
11
# 파일 내용 정렬
$ sort names.txt
$ sort -n numbers.txt    # 숫자 정렬
$ sort -r names.txt      # 역순 정렬

# 중복 제거
$ sort names.txt | uniq
$ sort names.txt | uniq -c    # 개수와 함께

# 직접 중복 제거
$ sort -u names.txt

2. 텍스트 변환

1
2
3
4
5
6
7
8
9
10
11
12
# 문자 변환
$ tr 'a-z' 'A-Z' < file.txt    # 소문자를 대문자로
$ tr -d ' ' < file.txt          # 공백 제거

# 열 추출
$ cut -d: -f1 /etc/passwd       # : 구분자로 첫 번째 필드
$ cut -c1-10 file.txt           # 1-10번째 문자

# 워드 카운트
$ wc file.txt                   # 줄, 단어, 문자 수
$ wc -l file.txt                # 줄 수만
$ wc -w file.txt                # 단어 수만

#11. 실무 활용 예제

1. 로그 분석

1
2
3
4
5
6
7
8
9
10
11
# 에러 로그 실시간 모니터링
$ tail -f /var/log/apache2/error.log | grep "ERROR"

# 특정 날짜의 로그 추출
$ grep "2025-08-06" /var/log/syslog

# 가장 많이 접속한 IP 찾기
$ awk '{print $1}' /var/log/apache2/access.log | sort | uniq -c | sort -nr | head -10

# 로그 파일 크기별 정렬
$ du -h /var/log/*.log | sort -hr

2. 시스템 관리

1
2
3
4
5
6
7
8
9
10
11
# 디스크 사용량이 많은 디렉토리 찾기
$ du -h / 2>/dev/null | sort -hr | head -20

# 메모리를 많이 사용하는 프로세스
$ ps aux --sort=-%mem | head -10

# 오래된 파일 찾기 및 삭제
$ find /tmp -type f -mtime +7 -delete

# 대용량 파일 찾기
$ find / -size +100M -type f 2>/dev/null

3. 백업 스크립트

1
2
3
4
5
# 일일 백업 스크립트
#!/bin/bash
DATE=$(date +%Y%m%d)
tar -czf /backup/website_$DATE.tar.gz /var/www/html/
find /backup -name "website_*.tar.gz" -mtime +7 -delete

#12. 명령어 조합 (파이프라인)

1. 파이프(|) 활용

1
2
3
4
5
6
7
8
9
10
11
# 프로세스 검색 및 종료
$ ps aux | grep apache | grep -v grep | awk '{print $2}' | xargs kill

# 디렉토리별 파일 개수
$ find /home -type f | cut -d/ -f1-3 | sort | uniq -c

# 로그에서 IP별 접속 횟수
$ cat access.log | awk '{print $1}' | sort | uniq -c | sort -nr

# 시스템 리소스 요약
$ df -h | grep -v tmpfs | tail -n +2 | awk '{sum+=$3} END {print "Total used: " sum "KB"}'

2. 리다이렉션 활용

1
2
3
4
5
6
7
8
9
10
11
# 출력을 파일로 저장
$ ls -la > file_list.txt
$ ps aux >> process_list.txt    # 추가 모드

# 에러 출력 처리
$ find / -name "*.conf" 2>/dev/null > config_files.txt
$ command > output.txt 2>&1     # 표준출력과 에러를 모두 파일로

# 입력 리다이렉션
$ sort < unsorted_list.txt
$ mysql -u user -p database < backup.sql

#13. 자주 사용하는 명령어 조합

1. 시스템 상태 체크

1
2
3
4
5
6
7
8
9
# 원라이너 시스템 체크
$ echo "=== 시스템 정보 ===" && uname -a && echo "=== 메모리 ===" && free -h && echo "=== 디스크 ===" && df -h && echo "=== 부하 ===" && uptime

# 서비스 상태 확인
$ systemctl status apache2 mysql nginx

# 포트 사용 현황
$ netstat -tuln | grep :80
$ ss -tuln | grep :3306

2. 개발 환경 설정

1
2
3
4
5
6
7
8
# 프로젝트 디렉토리 생성
$ mkdir -p ~/projects/{frontend,backend,database}/{src,docs,tests}

# Git 저장소 초기화
$ cd ~/projects/frontend && git init && touch README.md .gitignore

# 개발 서버 로그 모니터링
$ tail -f /var/log/nginx/access.log /var/log/php7.4-fpm.log

#14. 도움말 및 매뉴얼

1. 명령어 도움말

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 간단한 도움말
$ ls --help
$ grep --help

# 상세 매뉴얼
$ man ls
$ man grep
$ man bash

# 매뉴얼 검색
$ man -k network    # 네트워크 관련 명령어 검색
$ apropos file      # 파일 관련 명령어 검색

# 명령어 타입 확인
$ type ls           # ls는 별칭인지 함수인지 바이너리인지
$ which python3     # python3 실행파일 위치
$ whereis ls        # ls 관련 모든 파일 위치

2. 명령어 히스토리

1
2
3
4
5
6
7
8
9
10
11
12
13
# 명령어 히스토리 확인
$ history
$ history | grep grep

# 특정 명령어 재실행
$ !123              # 123번째 명령어 실행
$ !!                # 마지막 명령어 재실행
$ !grep             # 'grep'으로 시작하는 마지막 명령어

# 히스토리 설정
$ export HISTSIZE=1000          # 메모리 히스토리 크기
$ export HISTFILESIZE=2000      # 파일 히스토리 크기
$ export HISTCONTROL=ignoredups # 중복 명령어 무시

#15. 실습 문제

이제 배운 명령어들을 실습해보세요!

문제 1: 기본 파일 관리

1
2
3
4
5
# 1. 홈 디렉토리에 'practice' 폴더 생성
# 2. practice 폴더 안에 'projects', 'docs', 'backup' 폴더 생성
# 3. projects 폴더에 'index.html', 'style.css', 'script.js' 파일 생성
# 4. 생성된 파일들을 backup 폴더에 복사
# 5. backup 폴더의 내용을 tar.gz로 압축

문제 2: 시스템 정보 수집

1
2
3
4
# 1. 현재 시스템의 OS 정보를 system_info.txt 파일에 저장
# 2. 메모리 사용량 정보를 같은 파일에 추가
# 3. 디스크 사용량 정보를 같은 파일에 추가
# 4. 현재 실행 중인 프로세스 수를 파일에 추가

문제 3: 로그 분석

1
2
3
# 1. /var/log/syslog 파일에서 'error' 단어가 포함된 줄을 찾아 error_log.txt에 저장
# 2. 해당 파일에서 오늘 날짜의 로그만 추출
# 3. 추출된 로그의 줄 수를 계산

마무리

축하합니다! 이제 Ubuntu 리눅스의 기본 명령어를 모두 익혔습니다.

다음 학습 단계

  1. VI 에디터 사용법: 서버에서 파일 편집을 위한 필수 도구
  2. 셸 스크립팅: 반복 작업 자동화
  3. 시스템 서비스 관리: Apache, MySQL, Nginx 등 서비스 관리
  4. 보안 설정: SSH, 방화벽, 사용자 권한 관리

꼭 기억할 핵심 명령어

분류핵심 명령어
탐색pwd, ls, cd
파일 관리cp, mv, rm, mkdir
내용 확인cat, less, head, tail, grep
권한chmod, chown
프로세스ps, top, kill
시스템df, free, uname

이제 다른 Ubuntu 관련 포스팅을 실습할 준비가 완료되었습니다! 🎉

This post is licensed under CC BY 4.0 by the author.