이번에는 리눅스(Linix) O/S 필수 명령어의 사용법 및 예시를 알아보고자 한다. 아래의 기본적인 명령어만 알아도 리눅스 사용이 훨씬 수월해 질 것이다.
1. 기본 파일 시스템 명령어
ls (List Directory)
파일 시스템의 내용을 나열하는 명령어. 디렉토리 내용을 확인하고 파일의 상세 정보를 볼 수 있습니다.
기본 문법
명령어 : ls [옵션] [디렉토리/파일]
주요 옵션과 의미
-l # (long listing) 자세한 파일 정보 표시 (권한, 소유자, 크기 등)
-a # (all) 숨김 파일을 포함한 모든 파일 표시
-h # (human readable) 파일 크기를 읽기 쉬운 단위로 표시 (KB, MB, GB)
-R # (recursive) 하위 디렉토리까지 재귀적으로 표시
-t # (time) 최근 수정 시간 순으로 정렬
-S # (size) 파일 크기 순으로 정렬
-d # (directory) 디렉토리 자체의 정보만 표시
-i # (inode) 각 파일의 inode 번호 표시
실제 사용 예시
ls -lah /home # /home 디렉토리의 모든 파일을 자세히, 사람이 읽기 쉽게 표시
ls -lt /var/log # /var/log의 파일들을 시간순으로 정렬하여 자세히 표시
ls -lS /usr/bin # /usr/bin의 파일들을 크기순으로 정렬하여 자세히 표시
ls -R /etc/nginx # nginx 설정 디렉토리의 모든 하위 내용을 표시```
cd (Change Directory)
현재 작업 디렉토리를 변경하는 명령어. 파일 시스템 내에서 이동할 때 사용합니다.
기본 문법
명령어 : cd [경로]
특수 경로 기호
~ # 현재 사용자의 홈 디렉토리
– # 이전 작업 디렉토리
.. # 상위 디렉토리
. # 현재 디렉토리
/ # 루트 디렉토리
실제 사용 예시
cd /var/www/html # 웹 루트 디렉토리로 이동
cd ~/Documents # 홈 디렉토리 내 Documents로 이동
cd ../.. # 두 단계 상위 디렉토리로 이동
cd - # 이전 작업 디렉토리로 이동
pwd (Print Working Directory)
현재 작업 중인 디렉토리의 전체 경로를 출력하는 명령어.
기본 문법
명령어 : pwd [옵션]
주요 옵션
-L # (logical) 심볼릭 링크는 그대로 표시 (기본값)
-P # (physical) 심볼릭 링크의 실제 물리적 경로 표시
실제 사용 예시
pwd # 현재 디렉토리 경로 출력
pwd -P # 심볼릭 링크의 실제 경로 출력
mkdir (Make Directory)
새로운 디렉토리를 생성하는 명령어.
기본 문법
명령어 : mkdir [옵션] 디렉토리명
주요 옵션
-p # (parents) 필요한 상위 디렉토리도 함께 생성
-m # (mode) 생성할 디렉토리의 권한 설정
-v # (verbose) 생성 과정을 자세히 출력
실제 사용 예시
mkdir test # test 디렉토리 생성
mkdir -p a/b/c # 경로상의 모든 디렉토리 생성
mkdir -m 755 secure_dir # 권한이 755인 디렉토리 생성
mkdir -pv project/{src,doc} # 프로젝트 구조 생성
2. 파일 조작 명령어
cp (Copy)
파일이나 디렉토리를 복사하는 명령어.
기본 문법
명령어 : cp [옵션] 원본 대상
주요 옵션
-r # (recursive) 디렉토리 복사
-i # (interactive) 덮어쓰기 전 확인
-p # (preserve) 원본 파일의 속성 유지
-v # (verbose) 복사 과정 자세히 출력
-u # (update) 대상이 없거나 더 새로운 경우만 복사
-l # (link) 하드 링크 생성
-s # (symbolic) 심볼릭 링크 생성
-f # (force) 강제 복사
실제 사용 예시
cp -rp /home/user/docs/* /backup/ # 모든 문서를 속성 유지하며 백업
cp -i important.txt backup.txt # 덮어쓰기 전 확인하며 복사
cp -ru /source/* /target/ # 새로운 파일만 업데이트
cp -al source/ snapshot/ # 하드링크로 스냅샷 생성
mv (Move)
파일이나 디렉토리를 이동하거나 이름을 변경하는 명령어.
기본 문법
명령어 : mv [옵션] 원본 대상
주요 옵션
-i # (interactive) 덮어쓰기 전 확인
-f # (force) 강제 이동
-v # (verbose) 이동 과정 자세히 출력
-u # (update) 대상이 없거나 더 새로운 경우만 이동
-n # (no-clobber) 기존 파일 덮어쓰지 않음
-b # (backup) 덮어쓰기 전 백업 생성
실제 사용 예시
mv -i old.txt new.txt # 파일 이름 변경
mv -v *.jpg /home/user/Photos/ # 모든 jpg 파일 이동
mv -u source/* target/ # 새로운 파일만 이동
mv -b important.txt archive/ # 백업 생성 후 이동
rm (Remove)
파일이나 디렉토리를 삭제하는 명령어.
기본 문법
명령어 : rm [옵션] 파일/디렉토리
주요 옵션
-r # (recursive) 디렉토리와 그 내용 삭제
-f # (force) 강제 삭제
-i # (interactive) 삭제 전 확인
-v # (verbose) 삭제 과정 자세히 출력
-d # (directory) 빈 디렉토리 삭제
–preserve-root # 루트 디렉토리 보호
실제 사용 예시
rm -rf directory/ # 디렉토리 강제 삭제
rm -i *.tmp # 임시 파일 삭제 전 확인
rm -rv old_files/ # 삭제 과정 표시
rm -f !(*.txt|*.jpg) # txt와 jpg 외 모든 파일 삭제
3. 파일 내용 조작 명령어
cat (Concatenate)
파일의 내용을 출력하거나 여러 파일을 연결하는 명령어.
기본 문법
명령어 : cat [옵션] [파일…]
주요 옵션
-n # (number) 모든 줄에 번호 표시
-b # (number-nonblank) 비어있지 않은 줄에만 번호 표시
-A # (show-all) 모든 특수문자 표시
-s # (squeeze-blank) 연속된 빈 줄을 하나로 압축
-E # (show-ends) 각 줄 끝에 $ 표시
-T # (show-tabs) 탭을 ^I로 표시
실제 사용 예시
cat file.txt # 파일 내용 출력
cat -n file.txt # 줄 번호와 함께 출력
cat file1.txt file2.txt > combined.txt # 파일 합치기
cat > newfile.txt # 새 파일 생성 및 내용 입력
grep (Global Regular Expression Print)
텍스트 패턴을 검색하는 명령어.
기본 문법
명령어 : grep [옵션] 패턴 [파일…]
주요 옵션
-i # (ignore-case) 대소문자 구분 없이 검색
-r # (recursive) 디렉토리 내 재귀적 검색
-n # (line-number) 줄 번호 표시
-v # (invert-match) 패턴과 일치하지 않는 줄 출력
-c # (count) 일치하는 줄의 수만 출력
-w # (word-regexp) 단어 단위로 일치하는 것만 검색
-A n # (after-context) 일치하는 줄 이후 n줄 표시
-B n # (before-context) 일치하는 줄 이전 n줄 표시
-E # (extended-regexp) 확장 정규표현식 사용
-F # (fixed-strings) 패턴을 일반 문자열로 처리
실제 사용 예시
grep -in "error" /var/log/* # 로그 파일에서 에러 검색
grep -r "TODO" /project/ # 프로젝트에서 TODO 검색
grep -v "^#" config.conf # 주석이 아닌 줄만 표시
grep -w "word" file.txt # "word"라는 단어만 검색
sed (Stream Editor)
텍스트를 변환하고 수정하는 스트림 편집기.
기본 문법
명령어 : sed [옵션] ‘명령’ [파일…]
주요 옵션
-i # (in-place) 파일 직접 수정
-e # (expression) 여러 명령 실행
-n # (quiet) 자동 출력 억제
-r # (regexp-extended) 확장 정규표현식 사용
-f # (file) 명령어 파일에서 읽기
주요 명령
s/pattern/replacement/ # 치환
d # 삭제
p # 출력
i # 줄 앞에 삽입
a # 줄 뒤에 추가
c # 줄 변경
y # 문자 변환
실제 사용 예시
sed 's/ERROR/WARN/g' log.txt # ERROR를 WARN으로 치환
sed -i '/^#/d' config.txt # 주석 라인 삭제
sed '1,5d' file.txt # 1-5줄 삭제
sed '/pattern/i\new line' file # pattern 앞에 줄 삽입
awk (텍스트 처리 도구)
패턴 검색과 텍스트 처리를 위한 프로그래밍 언어.
기본 문법
명령어 : awk [옵션] ‘pattern { action }’ [파일…]
주요 옵션
-F # (field separator) 필드 구분자 지정
-v # (variable) 변수 설정
-f # (file) 스크립트 파일에서 읽기
내장 변수
$0 # 전체 레코드
$1,$2.. # 각 필드
NR # 현재 레코드 번호
NF # 현재 레코드의 필드 수
FS # 입력 필드 구분자
OFS # 출력 필드 구분자
RS # 레코드 구분자
실제 사용 예시
awk '{print $1,$3}' file.txt # 1번, 3번 필드 출력
awk -F: '{print $1}' /etc/passwd # 사용자 목록 출력
awk 'NR>1{sum+=$3}END{print sum}' # 3번 필드 합계
awk '$3 > 1000' # 3번 필드가 1000 초과인 행
4. 프로세스 관리 명령어
ps (Process Status)
실행 중인 프로세스 정보를 표시하는 명령어.
기본 문법
명령어 : ps [옵션]
주요 옵션
-e # (everything) 모든 프로세스 표시
-f # (full-format) 자세한 정보 표시
-u # (user) 특정 사용자의 프로세스
-p # (process) 특정 PID의 프로세스
-C # (command) 특정 명령어의 프로세스
–sort # 정렬 기준 지정
aux # BSD 스타일로 모든 프로세스 표시
출력 필드 의미
PID # 프로세스 ID
TTY # 터미널 타입
STAT # 프로세스 상태
TIME # CPU 사용 시간
CMD # 실행 명령어
실제 사용 예시
ps aux # 모든 프로세스 상세 정보
ps -ef | grep nginx # nginx 관련 프로세스 검색
ps -u username # 특정 사용자의 프로세스
ps --sort=-pcpu # CPU 사용률 기준 정렬
top (Table of Processes)
시스템 성능과 프로세스를 실시간 모니터링하는 명령어.
기본 문법
명령어 : top [옵션]
주요 옵션
-b # (batch) 배치 모드로 실행
-n # (iterations) 업데이트 횟수 지정
-p # (pid) 특정 프로세스만 모니터링
-u # (user) 특정 사용자의 프로세스만
-H # (threads) 스레드 모드로 표시
실행 중 명령어
k # 프로세스 종료 (kill)
r # 우선순위 변경 (renice)
c # 전체 명령줄 토글
M # 메모리 사용량 기준 정렬
P # CPU 사용량 기준 정렬
t # 작업/CPU 상태 토글
W # 설정 저장
실제 사용 예시
top -b -n 1 > top.txt # 현재 상태를 파일로 저장
top -p 1234,5678 # 특정 프로세스만 모니터링
top -u mysql # MySQL 프로세스 모니터링
kill (프로세스 제어)
프로세스에 시그널을 보내는 명령어.
기본 문법
명령어 : kill [옵션] PID
주요 시그널
1 (SIGHUP) # 설정 리로드
2 (SIGINT) # 인터럽트 (Ctrl+C)
9 (SIGKILL) # 강제 종료
15 (SIGTERM) # 정상 종료 (기본값)
18 (SIGCONT) # 프로세스 재개
19 (SIGSTOP) # 프로세스 중지
주요 옵션
-l # 사용 가능한 시그널 목록
-s # 시그널 이름으로 지정
-9 # SIGKILL 시그널 전송
실제 사용 예시
kill -9 1234 # 프로세스 강제 종료
kill -SIGTERM 5678 # 프로세스 정상 종료
kill -l # 시그널 목록 보기
killall apache2 # 특정 이름의 모든 프로세스 종료
5. 네트워크 관련 명령어
netstat (Network Statistics)
네트워크 연결, 라우팅 테이블, 인터페이스 통계를 보여주는 명령어.
기본 문법
명령어 : netstat [옵션]
주요 옵션
-a # (all) 모든 소켓 표시
-t # (tcp) TCP 연결만 표시
-u # (udp) UDP 연결만 표시
-l # (listening) 리스닝 소켓만 표시
-n # (numeric) 주소와 포트를 숫자로 표시
-p # (program) 프로세스 ID와 이름 표시
-r # (routing) 라우팅 테이블 표시
-i # (interfaces) 네트워크 인터페이스 통계
실제 사용 예시
netstat -tulpn # TCP/UDP 리스닝 포트
netstat -an | grep :80 # 80포트 연결 확인
netstat -rn # 라우팅 테이블
netstat -i # 인터페이스 통계
ss (Socket Statistics)
소켓 통계를 보여주는 명령어 (netstat의 현대적 대체).
기본 문법
명령어 : ss [옵션] [필터]
주요 옵션
-a # 모든 소켓 표시
-l # 리스닝 소켓만
-t # TCP 소켓만
-u # UDP 소켓만
-n # 포트번호를 숫자로
-p # 프로세스 정보
-i # 내부 TCP 정보
-s # 소켓 통계
실제 사용 예시
ss -tulpn # TCP/UDP 리스닝 포트
ss -ta state established # 연결된 TCP 소켓
ss sport = :http # HTTP 포트 소켓
ss dst 192.168.1.1 # 특정 목적지 소켓
ping (Packet Internet Groper)
네트워크 연결을 테스트하는 명령어.
기본 문법
명령어 : ping [옵션] 호스트
주요 옵션
-c # 보낼 패킷 수 지정
-i # 패킷 전송 간격 (초)
-s # 패킷 크기 지정
-t # TTL 값 지정
-W # 타임아웃 시간 지정
-f # flood ping 실행
-4 # IPv4만 사용
-6 # IPv6만 사용
실제 사용 예시
ping -c 4 google.com # 4번만 ping 테스트
ping -i 0.2 localhost # 0.2초 간격으로 ping
ping -s 1000 server # 1000바이트 패킷으로 ping
ping -W 1 192.168.1.1 # 1초 타임아웃
traceroute
네트워크 패킷의 경로를 추적하는 명령어.
기본 문법
명령어 : traceroute [옵션] 호스트
주요 옵션
-> n # 호스트명을 숫자로 표시
-w # 타임아웃 시간 설정
-q # 프로브 패킷 수 설정
-m # 최대 홉 수 설정
-T # TCP 사용
-I # ICMP 사용
-U # UDP 사용
실제 사용 예시
traceroute google.com # 구글까지의 경로 추적
traceroute -n 8.8.8.8 # DNS 조회 없이 추적
traceroute -w 1 server # 1초 타임아웃으로 추적
traceroute -m 15 destination # 최대 15홉까지 추적
6. 파일 검색 명령어
find
파일 시스템에서 파일을 검색하는 강력한 명령어.
기본 문법
명령어 : find [경로] [옵션] [표현식]
주요 옵션
-name # 파일명으로 검색
-type # 파일 타입으로 검색 (f:파일, d:디렉토리)
-size # 크기로 검색
-mtime # 수정 시간으로 검색
-user # 소유자로 검색
-perm # 권한으로 검색
-exec # 찾은 파일에 명령 실행
실제 사용 예시
find / -name "*.log" -type f # 모든 로그 파일 검색
find /home -size +100M # 100MB 이상 파일 검색
find . -mtime -7 -type f # 7일 이내 수정된 파일
find /var -user nginx -type f # nginx 소유 파일 검색
find . -type f -exec chmod 644 {} \; # 모든 파일 권한 변경
locate
데이터베이스를 이용한 빠른 파일 검색 명령어.
기본 문법
명령어 : locate [옵션] 패턴
주요 옵션
-i # 대소문자 구분 없음
-n # 결과 개수 제한
-e # 존재하는 파일만
-c # 일치하는 파일 수만 표시
-b # 기본명만 표시
실제 사용 예시
locate -i "*.pdf" # PDF 파일 검색
locate -n 10 "*.jpg" # 상위 10개 jpg 파일
locate -c "*.conf" # conf 파일 개수
updatedb # 데이터베이스 업데이트
7. 디스크 관리 명령어
df (Disk Free)
파일 시스템의 디스크 공간 사용량을 표시.
기본 문법
명령어 : df [옵션] [파일시스템]
주요 옵션
-h # 사람이 읽기 쉬운 형식
-T # 파일시스템 유형 표시
-i # inode 정보 표시
-l # 로컬 파일시스템만
–total # 전체 합계 표시
실제 사용 예시
df -h # 모든 마운트의 사용량
df -T /dev/sda1 # 특정 파티션 정보
df -i / # 루트의 inode 사용량
df --total -h # 전체 디스크 사용량
du (Disk Usage)
파일과 디렉토리의 디스크 사용량을 표시.
기본 문법
명령어 : du [옵션] [경로]
주요 옵션
-h # 사람이 읽기 쉬운 형식
-s # 총합만 표시
-c # 총합 포함
-a # 모든 파일 표시
–max-depth=N # 깊이 제한
실제 사용 예시
du -sh * # 현재 디렉토리 내용 크기
du -h --max-depth=1 / # 루트 직계 디렉토리 크기
du -ac /var/log # 로그 디렉토리 상세 사용량
du -sh /var/* | sort -h # 크기순 정렬
8. 시스템 모니터링 명령어
iostat (Input/Output Statistics)
CPU 및 디스크 I/O 통계를 보여주는 명령어.
기본 문법
명령어 : iostat [옵션] [간격 [횟수]]
주요 옵션
-c # CPU 통계만
-d # 디스크 통계만
-x # 확장 통계
-k # KB 단위로 표시
-m # MB 단위로 표시
-p # 특정 장치 통계
실제 사용 예시
iostat -x 2 5 # 2초 간격으로 5회 확장 통계
iostat -d -k /dev/sda # 특정 디스크 KB 단위 통계
iostat -c # CPU 통계만 표시
iostat -mx # MB 단위 확장 통계
vmstat (Virtual Memory Statistics)
가상 메모리 통계를 보여주는 명령어.
기본 문법
명령어 : vmstat [옵션] [간격 [횟수]
주요 옵션
-a # 활성/비활성 메모리
-f # 포크 수 표시
-s # 메모리 통계 요약
-d # 디스크 통계
-t # 타임스탬프 표시
-w # 넓은 출력
실제 사용 예시
vmstat 1 5 # 1초 간격으로 5회 표시
vmstat -s # 상세 메모리 통계
vmstat -d # 디스크 통계
vmstat -t 2 # 타임스탬프와 함께 2초 간격
9. 사용자 관리 명령어
useradd
새로운 사용자를 생성하는 명령어.
기본 문법
명령어 : useradd [옵션] 사용자명
주요 옵션
-m # 홈 디렉토리 생성
-s # 기본 쉘 지정
-g # 기본 그룹 지정
-G # 보조 그룹 지정
-c # 설명 추가
-d # 홈 디렉토리 경로 지정
실제 사용 예시
useradd -m -s /bin/bash newuser # 기본 설정으로 사용자 생성
useradd -m -G sudo -s /bin/bash admin # 관리자 사용자 생성
useradd -r -s /bin/false serviceuser # 시스템 사용자 생성
usermod
기존 사용자의 속성을 수정하는 명령어.
기본 문법
명령어 : usermod [옵션] 사용자명
주요 옵션
-l # 로그인명 변경
-L # 계정 잠금
-U # 계정 잠금 해제
-g # 기본 그룹 변경
-G # 보조 그룹 설정
-a # -G 옵션과 함께 그룹 추가
실제 사용 예시
usermod -aG docker username # docker 그룹에 사용자 추가
usermod -L username # 사용자 계정 잠금
usermod -s /bin/bash username # 기본 쉘 변경
10. 파일 압축/아카이브 명령어
tar (Tape Archive)
여러 파일을 하나의 아카이브로 묶는 명령어.
기본 문법
명령어 : tar [옵션] [아카이브명] [파일…]
주요 옵션
c # 아카이브 생성
x # 아카이브 추출
t # 내용 확인
f # 파일 지정
v # 상세 출력
z # gzip 압축
j # bzip2 압축
p # 권한 유지
실제 사용 예시
tar -cvzf archive.tar.gz /dir # gzip으로 압축
tar -xvf archive.tar # 아카이브 추출
tar -tvf archive.tar.gz # 내용 확인
tar -cjf backup.tar.bz2 /home # bzip2로 압축
gzip/gunzip
파일을 압축/해제하는 명령어.
기본 문법
명령어 : gzip [옵션] [파일…]
명령어 : gunzip [옵션] [파일…]
주요 옵션
-d # 압축 해제
-r # 재귀적 처리
-1 ~ -9 # 압축 레벨
-k # 원본 유지
-l # 압축 정보 표시
실제 사용 예시
gzip -9 file.txt # 최대 압축
gzip -r directory/ # 디렉토리 전체 압축
gunzip file.gz # 압축 해제
gzip -l *.gz # 압축 파일 정보
11. 시스템 정보 명령어
uname
시스템 정보를 표시하는 명령어.
기본 문법
명령어 : uname [옵션]
주요 옵션
-a # 모든 정보
-s # 커널 이름
-r # 커널 릴리스
-v # 커널 버전
-m # 하드웨어 이름
-p # 프로세서 종류
-o # 운영체제
실제 사용 예시
uname -a # 전체 시스템 정보
uname -r # 커널 버전
uname -m # 시스템 아키텍처
uname -s -r # 커널 이름과 릴리스
lsof (List Open Files)
열린 파일 목록을 보여주는 명령어.
기본 문법
명령어 : lsof [옵션]
주요 옵션
-u # 특정 사용자의 파일
-p # 특정 프로세스의 파일
-i # 네트워크 연결
-P # 포트 번호로 표시
-n # IP 주소로 표시
-t # PID만 출력
실제 사용 예시
lsof -i :80 # 80포트 사용 프로세스
lsof -u username # 사용자의 열린 파일
lsof /var/log/syslog # 특정 파일 사용 프로세스
lsof -p 1234 # 특정 PID의 열린 파일
12. 네트워크 모니터링 명령어
tcpdump
네트워크 패킷을 캡처하고 분석하는 명령어.
기본 문법
명령어 : tcpdump [옵션] [표현식]
주요 옵션
-i # 인터페이스 지정
-n # 호스트명 변환 안 함
-X # 패킷 내용 출력
-w # 파일로 저장
-r # 파일에서 읽기
-c # 패킷 수 제한
-v # 상세 출력
실제 사용 예시
tcpdump -i eth0 # 특정 인터페이스 모니터링
tcpdump port 80 # HTTP 트래픽 캡처
tcpdump host 192.168.1.1 # 특정 호스트 트래픽
tcpdump -w capture.pcap # 파일로 저장
iptables
리눅스 방화벽 설정 명령어.
기본 문법
명령어 : iptables [옵션] [체인] [규칙]
주요 옵션
-A # 규칙 추가
-D # 규칙 삭제
-I # 규칙 삽입
-L # 규칙 목록
-F # 규칙 초기화
-P # 기본 정책 설정
실제 사용 예시
iptables -L # 현재 규칙 표시
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP 허용
iptables -P INPUT DROP # 기본 정책을 DROP으로
iptables -F # 모든 규칙 삭제