[Linux] 엔지니어를 위한 리눅스 명령어
리눅스의 가장 기본적인 명령어를 이해하는 데 도움이 되는 간단한 가이드 문서다. 기본부터 고급 리눅스 명령어, 네트워킹 명령어, 파일 관리 명령어, 시스템 모니터링 명령어, 패키지 관리 명령어, 디스크 및 파일 시스템 명령어, 스크립팅 및 자동화 명령어, 개발 및 디버깅 명령어, 기타 유용한 명령어를 포함한다.
1. Basic Linux Commands
pwd- 현재 디렉토리 출력1 2 3 4 5
# 현재 디렉토리 경로 표시 pwd # 결과 /home/user/project
ls- 파일 및 디렉토리 리스트 출력1 2 3 4 5 6 7 8 9 10 11
# 현재 디렉토리의 항목 목록 표시 ls # 상세 파일 정보(크기, 권한) 목록 표시 ls -l # 숨김 파일을 포함한 모든 항목 목록 표시 ls -a # 숨김 파일을 포함하여 상세 정보 출력 ls -la
cd- 디렉토리 변경1 2 3 4 5 6 7 8
# /var/log 디렉토리로 이동 cd /var/log # 상위 디렉토리로 이동 cd .. # 홈 디렉토리로 이동 cd ~
touch- 빈 파일 생성1 2
# 현재 디렉토리 내 file.txt 생성 touch file.txt
mkdir- 디렉토리 생성1 2 3 4 5 6 7 8
# backups 이름의 디렉토리 생성 mkdir backups # backups 이름의 디렉토리 생성 (상위 디렉토리 포함) mkdir -p /home/user/new/project # 다수 디렉토리 생성 mkdir dir1 dir2 dir3
rm- 파일 및 디렉토리 삭제1 2 3 4 5
# 파일 삭제 rm file.txt # 디렉토리 삭제 (하위 디렉토리 포함) rm -r directory/
rmdir- 빈 디렉토리 삭제1 2
# 빈 디렉토리 삭제 rmdir test_directory
cp- 파일 및 디렉토리 복사1 2 3 4 5
# file.txt 파일을 /tmp/ 디렉토리로 복사 cp file.txt /tmp/ # 디렉토리 복사 (하위 포함) cp -r dir1/ dir_backup/
mv- 파일 및 디렉토리 이동/이름 수정1 2 3 4 5
# /tmp 디렉토리로 파일 이동 mv file.txt /tmp/ # 파일 이름 변경 mv oldname.txt newname.txt
cat- 파일 내용 출력1 2 3 4 5
# 파일 내용 출력 cat config.txt # 파일 병합 cat file1.txt file2.txt > merged.txt
echo- 텍스트 터미널 출력1 2 3 4 5 6 7 8
# 텍스트 출력 echo "Hello DevOps!" # 텍스트를 포함한 파일 생성 echo "Job Done!" > message.txt # 파일 내용 추가 echo "More data" >> message.txt
clear- 터미널 스크린 청소1 2 3 4 5
# 터미널 세션 스크린 청소 clear # 단축키 Ctrl + L
2. Intermediate Linux Commands
이러한 명령어는 파일 권한 설정부터 프로세스 모니터링, 네트워크 테스트, 데이터 전송 및 파일 관리에 이르기까지 일상적인 DevOps 운영에서 널리 사용된다.
chmod- 파일 권한 변경1 2 3 4 5 6 7 8 9 10 11
# test.txt 파일에 대한 Read(읽기), Write(쓰기), Execute(실행) 권한 제어 chmod 400 test.txt # Owner: Read+Write+Execute / Group: Read+Execute / Other: Read+Execute chmod 755 script.sh # 기존 파일에 실행 권한 추가 부여 chmod +x script.txt # 기존 파일에 실행 권한 제거 chmod -x script.txt
chown- 파일 소유권 변경1 2 3 4 5
# 소유자 변경 sudo chown user file.txt # 소유자 및 소유 그룹 변경 sudo chown user:group file.txt
find- 파일 및 디렉토리 검색1 2 3 4 5
# /var 경로에서 log로 시작하는 파일 변경 find /var -name "log*" # 현재 디렉토리에서 10MB 이상 크기의 파일 검색 find . -type f -size +10M
grep- 파일 내 텍스트 검색1 2 3 4 5 6 7 8
# app.log 파일 내 error(대소문자 구분 o)라는 문구를 포함한 행 출력 grep "error" app.log # app.log 파일 내 error(대소문자 구분 x)라는 문구를 포함한 행 출력 grep -i "error" app.log # /etc/ 하위 디렉토리 포함하여 password라는 문구를 포함한 행 출력 grep -r "password" /etc/
wc- 단어, 행, 문자 카운트1 2 3 4 5 6 7 8
# 행 수 출력 wc -l file.txt # 단어 수 출력 wc -w file.txt # 문자 수 출력 wc -c file.txt
head- 파일 내용 상위 출력1 2 3 4 5
# 파일 내용 상위 10행(Default) 출력 head file.txt # 파일 내용 상위 5행 출력 head -n 5 file.txt
tail- 파일 내용 하위 출력1 2 3 4 5 6 7 8
# 파일 내용 하위 10행(Default) 출력 tail file.log # 파일 내용 하위 5행 출력 tail -n 5 file.log # 파일 내용 실시간 출력 tail -f file.log
sort- 파일 내용 정렬1 2 3 4 5
# 알파벳 또는 숫자 순으로 정렬 sort names.txt # 숫자 정렬 sort -n numbers.txt
uniq- 중복 라인 삭제1 2
# sort 명령어와 함께 사용되어 고유 값 필터링 sort data.txt | uniq
diff- 두 파일 비교1 2
# 행 기준 두 파일 비교 diff old.conf new.conftar- Tar 압축 파일 생성 및 압축 해제1 2 3 4 5
# 압축 파일 생성 (tar) tar -czvf archive.tar folder/ # 압축 해제 (tar) tar -xzvf archive.tar
zip/unzip- Zip 압축 파일 생성 및 압축 해제1 2 3 4 5
# 압축 파일 생성 (zip) zip logs.zip *.log # 압축 해제 (zip) unzip logs.zip
df- 디스크 사용량 출력1 2 3 4 5
# 읽기 쉬운 형식으로 디스크 및 파티션 사용량 확인 df -h # 읽기 쉬운 형식으로 타입을 포함하여 디스크 및 파티션 사용량 확인 df -Th
du- 디렉토리 크기 출력1 2 3 4 5
# /var/log 디렉토리 내 전체 사이즈 출력 du -sh /var/log # 디렉토리 및 파일이 차지하는 공간 표시 du -h *
top- 실시간 프로세스 모니터링1 2 3 4 5
# 실시간 CPU/Memory 사용량 확인 top # 읽기 쉬운 형식으로 실시간 CPU/Memory 사용량 확인 htop
ps- 실행 중인 프로세스 출력1 2 3 4 5
# 전체 프로세스 출력 ps aux # 특정 프로세스 출력 ps -ef | grep nginx
kill- 프로세스 종료1 2 3 4 5
# 프로세스 종료 kill 1234 # 프로세스 강제 종료 kill -9 1234
ping- 네트워크 연결성 체크1 2
# 연결성 및 지연시간 체크 (Stop: Ctrl+C) ping google.comwget- 웹 파일 다운로드1 2
# URL 경로의 파일 다운로드 wget https://example.com/file.zipcurl- 서버로 데이터 전송 / 서버에서 데이터 다운1 2 3 4 5
# HTTP, FTP, API Calls 등 데이터 전송 curl http://example.com # 파일 다운로드 curl -O https://site.com/file.tar.gz
scp- 호스트 간 안전한 파일 전송1 2 3 4 5
# SSH 기반 파일 복사 (Local->Remote) scp file.txt user@server:/tmp/ # SSH 기반 파일 복사 (Remote->Local) scp user@server:/home/logs.zip .
rsync- 파일 동기화/백업1 2 3 4
# 증분 복사 rsync -av /data/ /backup/ rsync -avz user@server:/path/ .
3. Advanced Linux Commands
awk- 텍스트 데이터의 행/열 처리1 2 3 4 5 6 7
# 1.IP주소($1)만 뽑음 -> 2.정렬 -> 3.중복 제거 및 카운트 -> 4.많은 순 정렬 # 로그 파일의 첫 번째 칸(IP)만 뽑아서 접속 횟수 순위 지정 # (디도스(DDoS) 공격이나 크롤러를 찾을 때 활용) awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10 # 'node' 프로세스를 찾아서 -> PID($2)만 출력 ps aux | grep node | awk '{print $2}'
sed- 파일을 열지 않고 파일 내용 검색, 수정, 교체1 2 3 4 5
# nginx.conf 파일에서 80을 8080으로 변환 sed -i 's/listen 80;/listen 8080;/g' # 3행의 'foo'만 'bar'로 변경 sed -i '3s/foo/bar/' file.txt
cut- 텍스트 일부(열) 제거 및 추출1 2 3 4 5 6 7 8
# 1, 7번 필드 출력 cut -d ":" -f 1,7 /etc/passwd # 결과: root:/bin/bash # 각 줄의 1~5번째 글자까지만 출력 ls -l | cut -c 1-5 # 결과: -rw-r (권한 부분 앞쪽만 잘림)
tr- 문자 교체 및 삭제1 2 3 4 5
# 대소문자 변환 echo "hello world" | tr 'a-z' 'A-Z' # 파일 내의 캐리지 리전(\r) 문자 삭제 cat script_windows.sh | tr -d '\r' > script_linux.sh
xargs- 표준 입력으로부터 받은 데이터를 명령어로 변환1 2
# 30일 이상 된(mtime +30) .log 파일을 찾아서 삭제 find /var/log/ -name "*.log" -mtime +30 | xargs rm -f
ln- 하드링크 및 심볼릭 링크 생성1 2
# 파일 및 디렉토리 심볼릭 링크 생성 ln -s /path/original file_link
free- 메모리 사용량 확인1 2
# 읽기 쉬운 형식으로 메모리 사용량 출력 free -h
iostat- CPU 및 I/O 상태 확인1 2
# 2초마다 확장된 I/O 통계 확인 iostat -x 2
netstat(Legacy) /ss(Modern) - 열려 있는 포트 정보 확인1 2 3 4 5 6 7 8
# TCP LISTEN 상태의 포트와 프로세스 확인 (netstat) sudo netstat -nltp # UDP LISTEN 상태의 포트와 프로세스 확인 (netstat) sudo netstat -nlup # TCP/UDP LISTEN 상태의 포트와 프로세스 확인 (ss) sudo ss -nltup
ifconfig/ip- 네트워크 정보 확인1 2 3 4
# IP Address 및 Interface 확인 ip addr show ifconfigiptables- 방화벽 룰 확인1 2 3 4 5
# 현재 방화벽 룰 확인 sudo iptables -nL # 현재 방화벽 룰에 번호를 붙여서 확인 sudo iptables -nL --line-numbers
systemctl- systemd service 관리1 2
# nginx 서비스 재시작 sudo systemctl restart nginx
journalctl- systemd log 확인1 2
# nginx 서비스 로그 확인 journalctl -u nginx
crontab- 반복 작업 예약1 2 3 4 5
# cron job 설정 변경 crontab -e # 매일 01:00 /home/user/backup.sh 실행 0 1 * * * /home/user/backup.sh
at- 일회성 작업 예약1 2
# reboot 명령어 02:00 수행 echo "reboot" | at 02:00
uptime- 시스템 가동 시간 및 부하 확인1 2
# 시스템이 얼마나 오래 실행 중인지, 부하 확인 uptime
whoami- 현재 로그인 유저 확인1 2
# 현재 로그인된 유저 확인 whoami
users- 현재 로그인 된 유저 목록 확인1 2
# 현재 로그인 된 유저 목록 확인 users
hostname- 호스트 네임 확인 및 수정1 2 3 4 5
# hostname 확인 hostname # hostname 수정 sudo hostnamectl set-hostname server01
env- 환경 변수 출력1 2
# 전체 환경 변수 출력 env
export- 환경 변수 설정1 2 3 4 5 6
# 환경 변수 설정 (현재 세션) export PATH=$PATH:/opt/myapp/bin # 환경 변수 설정 (영구 설정) echo 'export PATH=$PATH:/opt/myapp/bin' >> ~/.bashrc source ~/.bashrc
4. Advanced Networking Commands
ip addr- IP Address 출력 및 설정1 2 3 4 5
# 전체 네트워크 인터페이스 및 IPs 출력 ip addr show # IP 할당 sudo ip addr add 192.168.1.10/24 dev eth0
ip route- 라우팅 테이블 출력 및 설정1 2 3 4 5
# default 및 static 라우팅 설정 출력 ip route # 라우팅 설정 sudo ip route add 10.0.0.0/24 via 192.168.1.1
traceroute- 패킷 경로 추적1 2
# 도착지까지의 패킷 경로 확인 traceroute google.comnslookup- DNS Lookup 유틸1 2 3 4 5 6 7 8
# DNS 정방향 조회 nslookup google.com # DNS 역방향 조회 nslookup 8.8.8.8 # 특정 레코드(MX) 조회 nslookup -query=mx naver.com
dig- DNS Query 도구1 2 3 4 5 6 7 8
# DNS Query 정방향 결과(IP만) 출력 dig google.com +short # DNS Query 정방향 결과(경로) 출력 dig google.com +trace # DNS Query 역방향 결과 출력 dig -x 8.8.8.8 +short
ssh- Secure 원격 로그인1 2 3 4 5
# 원격지 접속 ssh user@192.168.1.20 # 키파일을 통한 원격지 접속 ssh -i my-key.pem user@192.168.1.20
ftp- FTP 프로토콜을 통한 파일 전송 (대화형)1 2 3 4 5 6 7 8 9 10 11
# ftp 서버 접속 (SSH 기반의 SFTP로 대체) ftp 192.168.1.10 # 파일 전송 put file.txt # 파일 다운로드 get data.zip # 접속 종료 bye
nmap- 네트워크 스캔 및 감사 도구1 2 3 4 5 6 7 8 9 10 11 12 13 14
# 192.168.1.0/24 대역의 네트워크 전체 조회 sudo nmap 192.168.1.0/24 # 버전 감지 스캔 (ex. Port 외에 Apache 2.4.41 버전 스캔) sudo nmap -sV 192.168.1.10 # OS 감지 sudo nmap -O 192.168.1.10 # 모든 포트 스캔 sudo nmap -p- 192.168.1.10 # 종합 스캔 sudo nmap -A 192.168.1.10
telnet- 원격 접속 도구(특정 포트 오픈 확인 도구)1 2
# 원격지 특정 포트 오픈 확인 telnet google.com 80netcat(nc)- 네트워크 작업 도구1 2 3 4 5 6 7 8 9
# 포트 스캔 및 연결 확인(-zv) nc -zv 192.168.1.20 22 # 파일 전송 # 수신 (4444 포트로 들어오는 데이터를 received.txt로 저장) nc -l 4444 > received.txt # 송신 (4444 포트로 file.txt 내용을 전송) nc 192.168.1.10 4444 < file.txt
5. File Management & Search Commands
이 명령어들은 파일을 빠르게 확인하고, 검색하며, 디렉터리 구조를 이해하는 데 도움이 됩니다.
locate- 빠른 파일 검색1 2 3 4 5
# 시스템 전체에서 nginx.conf라는 이름이 들어간 모든 경로 출력 locate nginx.conf # 대소문자 구분 없이 검색 locate -i Nginx.conf
sudo updatedb명령을 통해 파일 목록 DB를 수동으로 갱신해야 한다.
locate명령은 방금 만든 파일은 검색할 수 없다.- 리눅스는 보통 하루에 한 번 자동으로 파일 목록 DB(mlocate.db)를 업데이트 한다.
stat- 파일 정보 및 메타데이터 확인1 2 3 4 5 6 7 8 9 10 11 12
# 정확한 파일 크기, 아이노드 번호, 타임스탬프 상세 확인 stat file.txt # 결과 File: file.txt Size: 2048 Blocks: 8 IO Block: 4096 regular file Device: 801h/2049d Inode: 131072 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ user) Gid: ( 1000/ user) Access: 2024-01-27 10:00:00.000000000 +0900 Modify: 2024-01-27 10:05:00.000000000 +0900 Change: 2024-01-27 10:10:00.000000000 +0900 Birth: -
tree- Tree 형식의 디렉토리 구조 확인1 2 3 4 5 6 7 8 9 10
# Tree 형식의 디렉토리 및 파일 구조 출력 tree /var/www/ # 결과 /var/www/ ├── index.html ├── css │ └── style.css └── js └── app.js
file- 파일 상세 타입 확인1 2 3 4 5 6 7 8 9 10 11 12
# 압축 파일 확인 file backup.tar.gz # 결과 _backup.tar.gz:_ _gzip compressed data_ # 스크립트 파일 확인 file script.sh # 결과 _script.sh:_ _Bourne-Again shell script_
basename- 절대 경로 중 파일명 출력1 2 3 4
basename /home/user/data/report.csv # 결과 report.csv
dirname- 절대 경로 중 파일 경로 출력1 2 3 4
dirname /home/user/data/report.csv # 결과 /home/user/data
6. System Monitoring Commands
vmstat- 시스템 성능 상태 확인(Memory, CPU, Paging, Process)1 2 3 4 5 6 7
# 1초 간격으로 5번 출력 vmstat 1 5 # 결과 () procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 0 120000 50000 400000 0 0 1 5 10 20 10 5 80 5 0
lsof- 프로세스가 사용하는 열려있는 모든 파일 확인1 2 3 4 5
# 8080 포트를 사용 중인 프로세스 확인 sudo lsof -i :8080 # 파일 사용자 확인 sudo lsof /var/log/messages
dmesg- 커널 메시지 확인1 2 3
# 커널 로그 확인 # 모든 하드웨어 감지, 드라이버 로딩, 파일 시스템 오류 등 sudo dmesg | tail
iotop- 실시간 Disk I/O 모니터링1 2 3 4 5 6 7 8
# 디스크의 Reading/Writing 상태 확인 sudo iotop # 현재 디스크의 I/O를 발생시키고 있는 프로세스만 출력 sudo iotop -o # 프로세스 단위로 확인 sudo iotop -P
7. Package Management Commands
apt- Debian/Ubuntu 계열의 패키지 매니저1 2 3
sudo apt update sudo apt install nginx sudo apt remove nginx
yum/dnf- 레드햇(RHEL/CentOS/Fedora) 계열의 패키지 매니저1 2 3
sudo yum install httpd sudo yum update sudo dnf remove httpd
snap- snap 패키지 매니저 (snap을 지원하는 시스템-Ubuntu 등)1 2 3 4 5 6 7 8
# 스냅 패키지 목록 및 버전 확인 sudo snap list # 도커 설치 sudo snap install docker # 업데이트 보류 (특정 시간까지 업데이트 안 함) sudo snap refresh --hold
rpm- 레드햇(RHEL/CentOS/Fedora) 계열의 rpm 매니저1 2 3 4 5 6 7 8
# 설치 sudo rpm -ivh package.rpm # java 설치 확인 sudo rpm -qa | grep -i java # 삭제 sudo rpm -e package_name
8. Disk & Filesystem Commands
mount/umount- 마운트 및 마운트 해제1 2 3 4 5
# 디스크 마운트 sudo mount /dev/sdb1 /mnt/data # 마운트 해제 sudo umount /mnt/data
fsck- 파일 시스템 체크 및 수리1 2 3 4 5 6 7 8
# 마운트 해제 sudo umount /dev/sdb1 # 검사 수행 sudo fsck /dev/sdb1 # 자동 yes 처리하여 검사 수행 sudo fsck -y /dev/sdb1
mkfs- 파일 시스템 생성 (포맷)1 2
# 수행 sudo mkfs -t xfs /dev/sdb1
blkid- Block Device 정보 확인1 2
# UUID, 파일 시스템 타입 등 확인 sudo blkid
lsblk- Block Device 목록 확인1 2
# Device name, Mount point 등 확인 lsblkparted- 파티션 관리 도구 (대화형)1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
# 디스크 선택 및 진입 sudo parted /dev/sdb # 상태 확인 print # 타입 선택 # GPT(2TB 이상 디스크에 사용) / MBR mklabel gpt mklabel msdos # 파티션 생성 mkpart # 1번 파티션 삭제 rm 1 # 종료 quit
9. Scripting & Automation Commands
bash- Bash Shell & Scripting1 2 3 4 5 6 7 8 9 10
# 해석기 직접 호출 # 실행 권한(x) 없이도 가능 bash script.sh # 직접 실행 # 쉐뱅(#!/bin/bash) 필요 ./script.sh # 디버깅 모드로 실행 bash -x script.sh
sh- 구형 Shell 인터프리터 (호환성 목적으로 사용)1
sh script.sh
alias- 단축키 및 별칭1 2 3
alias ll='ls -l' alias gs='git status' alias rm='rm -i'
source- 스크립트 내용 적용1 2 3 4 5
# source 명령어로 실행 (현재 Shell 안에서 실행) source ~/.bashrc # 실행 파일로 실행 (자식 Shell 하나 추가 실행) . ~/.bashrc
This post is licensed under CC BY 4.0 by the author.