
1편에서는 파일 탐색, 관리, 내용 확인을 다뤘습니다. 2편에서는 나머지 네 가지 카테고리를 정리합니다. 권한과 소유자, 프로세스 관리, 네트워크, 그리고 검색 & 파이프입니다.
파이프 부분은 특히 리눅스 터미널의 진가가 드러나는 곳이라 마지막에 좀 더 길게 썼습니다.
권한 & 소유자
리눅스에서 파일마다 "누가 어떤 행동을 할 수 있는지"가 지정되어 있습니다. ls -l로 목록을 보면 맨 앞에 -rwxr-xr-x 같은 문자열이 붙어 있는데, 이게 권한 정보입니다.
구조는 이렇습니다.
- rwx r-x r-x
↑ ↑ ↑ ↑
타입 소유자 그룹 기타
r(읽기)=4, w(쓰기)=2, x(실행)=1이고, 이 세 값을 더한 숫자로 권한을 표현합니다. 7=rwx, 6=rw-, 5=r-x, 4=r-- 이렇게 됩니다.
chmod
파일 권한을 변경합니다.
chmod 755 script.sh # 소유자 rwx, 그룹/기타 r-x
chmod 644 config.yaml # 소유자 rw-, 그룹/기타 r--
chmod +x script.sh # 실행 권한만 추가 (기호 방식)
chmod -R 755 directory/ # 디렉토리 내 전체에 재귀 적용
스크립트 파일에 실행 권한 줄 때 chmod +x나 chmod 755가 가장 자주 씁니다.
chown
파일 소유자와 그룹을 변경합니다.
chown user file.txt # 소유자만 변경
chown user:group file.txt # 소유자와 그룹 같이 변경
chown -R user:group directory/ # 재귀 적용
서버에서 nginx나 www-data 같은 서비스 계정으로 파일 소유를 맞춰야 할 때 씁니다.
sudo
관리자(root) 권한으로 명령어를 실행합니다.
sudo apt update
sudo systemctl restart nginx
sudo vim /etc/hosts
sudo -i나 sudo su로 아예 root 쉘로 전환할 수도 있는데, 개인 서버라도 필요한 명령어만 sudo로 실행하는 게 안전합니다.
whoami / id
현재 로그인된 사용자를 확인합니다. whoami는 이름만, id는 UID, GID, 소속 그룹까지 상세하게 보여줍니다.
whoami
id
id username # 특정 사용자 정보 확인
프로세스 관리
ps
현재 실행 중인 프로세스 목록을 출력합니다. aux 옵션 조합이 가장 많이 쓰입니다.
ps aux # 모든 프로세스 전체 목록
ps aux | grep nginx # 특정 프로세스 찾기
a=다른 사용자 프로세스 포함, u=사용자 기준 상세 출력, x=터미널 없는 프로세스 포함.
top / htop
실시간으로 프로세스 현황과 CPU·메모리 사용량을 모니터링합니다. top은 기본 내장이고, htop은 설치가 필요하지만 훨씬 보기 편합니다.
top
htop
htop에서는 마우스도 쓸 수 있고, 프로세스를 선택해서 바로 kill도 됩니다. 설치 가능한 환경이면 htop을 씁니다.
kill / pkill
프로세스를 종료합니다. kill은 PID(프로세스 ID)로, pkill은 이름으로 종료합니다.
kill 1234 # PID로 종료 (정상 종료 신호)
kill -9 1234 # PID로 강제 종료
pkill -f "python app.py" # 이름으로 종료
killall nginx # 같은 이름의 프로세스 전체 종료
kill만 쓰면 프로세스가 정상 종료할 기회를 줍니다. 안 죽을 때 -9를 씁니다. -9는 프로세스가 무시할 수 없는 강제 신호입니다.
& / nohup / jobs / fg / bg
백그라운드 실행과 관련된 것들입니다.
python app.py & # 백그라운드로 실행
nohup python app.py & # 터미널 닫아도 계속 실행
nohup ./server > server.log 2>&1 & # 출력을 파일로 저장
jobs는 현재 쉘에서 실행 중인 백그라운드 작업 목록, fg %1은 1번 작업을 포그라운드로 전환, bg %1은 정지된 작업을 백그라운드에서 재개합니다.
jobs # 백그라운드 작업 목록
fg %1 # 1번 작업 포그라운드로 전환
bg %1 # 정지된 작업 백그라운드 재개
네트워크
ping
호스트에 ICMP 패킷을 보내서 연결 상태와 응답 속도를 확인합니다.
ping google.com
ping google.com -c 4 # 4번만 보내고 종료
Linux에서는 횟수 제한 없이 계속 돌기 때문에 -c로 횟수를 지정하거나 Ctrl+C로 중단합니다.
curl
HTTP 요청을 보내는 명령줄 도구입니다. API 테스트, 파일 다운로드, 헤더 확인 등 다양하게 씁니다.
curl https://api.example.com/data # GET 요청
curl -I https://example.com # 헤더만 확인 (-I = HEAD 요청)
curl -X POST -H "Content-Type: application/json" \
-d '{"key":"value"}' https://api.example.com # POST 요청
curl -O https://example.com/file.tar.gz # 파일 다운로드 (원본 파일명 유지)
curl -o output.tar.gz https://... # 파일 다운로드 (저장 이름 지정)
wget
파일 다운로드에 특화된 도구입니다. curl -O와 비슷하지만 연속 다운로드나 미러링 같은 것은 wget이 더 편합니다.
wget https://example.com/file.tar.gz
wget -c https://... # 중단된 다운로드 이어받기
ss
소켓 상태와 열린 포트를 확인합니다. 예전엔 netstat을 많이 썼는데 요즘은 ss를 씁니다.
ss -tulpn # 열린 포트 전체 목록
ss -tulpn | grep 3000 # 특정 포트 확인
-tTCP,-uUDP,-l리스닝 중인 것만,-p프로세스 이름,-n숫자 표시
ip
네트워크 인터페이스 정보를 확인합니다. 예전의 ifconfig를 대체합니다.
ip addr # IP 주소 확인
ip addr show # 같은 것, 더 명시적
ip route # 라우팅 테이블
ssh
원격 서버에 접속합니다.
ssh user@192.168.1.100
ssh -p 2222 user@host # 포트 지정
ssh -i ~/.ssh/key.pem user@host # 키 파일 지정
scp
SSH를 통해 파일을 복사합니다.
scp file.txt user@host:~/ # 로컬 → 원격
scp user@host:~/file.txt ./ # 원격 → 로컬
scp -r directory/ user@host:~/backup/ # 디렉토리 복사
검색 & 파이프
파이프(|)는 앞 명령어의 출력을 다음 명령어의 입력으로 넘기는 것입니다. 리눅스 명령어들이 각자 작은 역할만 하도록 설계된 이유가 여기 있는데, 파이프로 연결하면 조합해서 복잡한 작업을 할 수 있습니다.
grep
텍스트에서 패턴을 검색합니다. 파이프와 함께 쓰는 빈도가 가장 높은 명령어 중 하나입니다.
grep "error" app.log # 파일에서 검색
grep -i "error" app.log # 대소문자 구분 없이
grep -n "error" app.log # 줄 번호 포함
grep -r "TODO" ./src # 하위 디렉토리 재귀 검색
grep -rn "TODO" ./src # 줄 번호 포함 재귀 검색
grep -v "DEBUG" app.log # 해당 패턴 제외하고 출력
grep -E "error|warning" app.log # 정규식 패턴 (OR 조건)
find
파일이나 디렉토리를 조건으로 검색합니다. 이름, 확장자, 수정 시각, 용량 등 다양한 조건을 쓸 수 있습니다.
find . -name "*.log" # 확장자로 찾기
find . -name "config.yaml" # 파일명으로 찾기
find . -type d -name "node_modules" # 타입이 디렉토리인 것
find . -mtime -7 # 최근 7일 내 수정된 파일
find . -size +100M # 100MB 이상인 파일
find . -name "*.tmp" -delete # 찾아서 바로 삭제
awk
텍스트를 컬럼 단위로 처리합니다. CSV나 공백 구분 데이터에서 특정 열만 뽑아낼 때 씁니다.
awk '{print $1}' file.txt # 첫 번째 컬럼만 출력
awk '{print $1, $3}' file.txt # 1, 3번째 컬럼
awk -F',' '{print $2}' data.csv # 구분자를 쉼표로 지정
awk 'NR>1 {print $0}' file.txt # 첫 줄(헤더) 제외하고 출력
sed
스트림 편집기로, 주로 텍스트 치환에 씁니다.
sed 's/old/new/g' file.txt # old를 new로 전체 치환 (출력만)
sed -i 's/old/new/g' file.txt # 파일 직접 수정
sed '/pattern/d' file.txt # 패턴 포함된 줄 삭제
sed -n '10,20p' file.txt # 10~20번째 줄만 출력
sort / uniq
sort는 정렬, uniq는 연속된 중복 제거입니다. 보통 같이 씁니다.
sort file.txt # 사전순 정렬
sort -n file.txt # 숫자 기준 정렬
sort -r file.txt # 역순
sort | uniq # 정렬 후 중복 제거
sort | uniq -c # 중복 개수 포함
sort | uniq -c | sort -rn # 빈도 높은 순으로 정렬
리다이렉션
파이프가 명령어 간 연결이라면, 리다이렉션은 파일과 연결입니다.
ls > list.txt # 출력을 파일로 저장 (덮어쓰기)
ls >> list.txt # 출력을 파일에 이어쓰기
grep "error" log 2>&1 # 표준 에러도 표준 출력으로 합치기
command > /dev/null # 출력을 버림 (조용히 실행)
xargs
파이프 결과를 다음 명령어의 인수로 넘깁니다. 파이프는 stdin으로 넘기는 것이고, xargs는 명령줄 인수로 넘기는 것입니다.
find . -name "*.tmp" | xargs rm # tmp 파일 전체 삭제
find . -name "*.log" | xargs grep "ERROR" # 찾은 파일들에서 검색
echo "file1 file2 file3" | xargs -n 1 touch # 공백 구분으로 하나씩 처리
파이프 조합 예시
각각의 명령어가 작동하는 건 아는데 조합이 어렵다면, 실제로 자주 쓰는 패턴을 몇 가지 보는 게 도움이 됩니다.
# 접근 로그에서 IP별 접속 횟수 상위 5개
cat access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -5
# 현재 디렉토리에서 가장 큰 파일 10개
du -sh * | sort -rh | head -10
# 특정 포트 쓰는 프로세스 찾기
ss -tulpn | grep 8080
# Python 파일에서 import 목록 추출 (중복 제거)
grep -rh "^import\|^from" ./src | sort | uniq
# 로그 파일에서 에러만 실시간으로 보기
tail -f app.log | grep --line-buffered "ERROR\|CRITICAL"
정리 표
| 카테고리 | 명령어 | 주요 옵션 | 용도 |
|---|---|---|---|
| 권한 | chmod |
755 +x -R |
권한 변경 |
| 권한 | chown |
user:group -R |
소유자 변경 |
| 권한 | sudo |
— | 관리자 권한 실행 |
| 권한 | whoami / id |
— | 사용자 확인 |
| 프로세스 | ps aux |
| grep |
프로세스 목록/검색 |
| 프로세스 | htop |
— | 실시간 모니터 |
| 프로세스 | kill |
-9 |
PID로 종료 |
| 프로세스 | pkill |
-f |
이름으로 종료 |
| 프로세스 | nohup ... & |
— | 백그라운드 유지 실행 |
| 네트워크 | ping |
-c |
연결 확인 |
| 네트워크 | curl |
-I -X -d |
HTTP 요청/다운로드 |
| 네트워크 | wget |
-c |
파일 다운로드 |
| 네트워크 | ss |
-tulpn |
열린 포트 확인 |
| 네트워크 | ip addr |
— | IP 주소 확인 |
| 네트워크 | ssh |
-p -i |
원격 접속 |
| 네트워크 | scp |
-r |
SSH 파일 복사 |
| 검색 | grep |
-rn -i -v |
텍스트 패턴 검색 |
| 검색 | find |
-name -mtime |
파일 검색 |
| 검색 | awk |
-F |
컬럼 기반 처리 |
| 검색 | sed |
s/old/new/g -i |
텍스트 치환 |
| 검색 | sort / uniq |
-rn -c |
정렬 / 중복 제거 |
| 파이프 | | > >> |
— | 연결 / 저장 / 이어쓰기 |
| 파이프 | xargs |
-n |
결과를 인수로 전달 |
'블로그, 컴퓨터 > Cheatsheets' 카테고리의 다른 글
| Neovim 설정 정리 (2편) — lazy.nvim, LSP, 주요 플러그인 (0) | 2026.05.25 |
|---|---|
| Neovim 설정 정리 (1편) — init.lua 구조와 Lua 기초 (0) | 2026.05.25 |
| Vim 명령어 정리 (2편) — 검색/치환, Visual 모드, 분할 화면, 설정 (0) | 2026.05.24 |
| Vim 명령어 정리 (1편) — 모드, 이동, 편집, 저장 (0) | 2026.05.24 |
| 리눅스 터미널 명령어 정리 (1편) — 파일 탐색, 관리, 내용 확인 (0) | 2026.05.23 |