개요: 왜 명령어를 배워야 할까?
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
프롬프트 이해하기
구성 요소 | 의미 | 예시 |
---|
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 |
%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 # 사용자 정의 시그널
|
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 리눅스의 기본 명령어를 모두 익혔습니다.
다음 학습 단계
- VI 에디터 사용법: 서버에서 파일 편집을 위한 필수 도구
- 셸 스크립팅: 반복 작업 자동화
- 시스템 서비스 관리: Apache, MySQL, Nginx 등 서비스 관리
- 보안 설정: SSH, 방화벽, 사용자 권한 관리
꼭 기억할 핵심 명령어
분류 | 핵심 명령어 |
---|
탐색 | pwd , ls , cd |
파일 관리 | cp , mv , rm , mkdir |
내용 확인 | cat , less , head , tail , grep |
권한 | chmod , chown |
프로세스 | ps , top , kill |
시스템 | df , free , uname |
이제 다른 Ubuntu 관련 포스팅을 실습할 준비가 완료되었습니다! 🎉