터미널 & CLI 스킬은(는) 무엇을 하나요?
Linux 터미널에서 작업하기 위한 참고 자료로, 기본 bash부터 컨테이너 오케스트레이션과 AI 에이전트 실행까지 전 스택을 다룹니다.
이 스킬을 사용하는 방법
이 파일은 가장 일반적인 패턴을 다룹니다. 자세한 명령어 참조가 필요하면
references/에서 관련 파일을 필요에 따라 불러오세요:
| 주제 | 참조 파일 |
|---|---|
| Bash 핵심: 파이프, 스크립트, 파일 시스템, 설치, 환경 변수 | references/bash.md |
| 컨테이너: Podman, Kubernetes (kubectl), Helm | references/containers.md |
| HTTP 요청: curl | references/curl.md |
| AI 에이전트: aider-chat, claude CLI | references/agents.md |
1. bash 명령어 실행
command [options] [arguments]
# 순차적으로 실행 — 첫 번째 실패 시 중단
cmd1 && cmd2 && cmd3
# 실패 여부와 관계없이 실행
cmd1; cmd2; cmd3
# 출력을 변수에 저장
OUTPUT=$(command)
# stdout / stderr / 둘 다 리디렉션
command > out.txt
command 2> err.txt
command &> all.txt
# 모든 출력 버리기
command > /dev/null 2>&1
2. 도구 존재 여부 확인
type -a tool_name # 도구가 발견된 모든 위치
apropos keyword # 키워드와 일치하는 명령어 검색
which tool_name # PATH 상의 첫 번째 바이너리
whereis tool_name # 바이너리, 소스, man 페이지 위치
3. &&로 연결하기
# 이전 명령어가 성공한 경우에만 진행
sudo apt update && sudo apt upgrade -y
# 여러 단계를 안전하게 연결
mkdir -p build && cd build && cmake ..
4. |로 파이프 연결하기
# 한 명령어의 stdout을 다음 명령어의 stdin으로 전달
cmd1 | cmd2 | cmd3
# 일반적인 패턴
ls -la | grep ".conf"
ps aux | grep nginx
journalctl -u myservice | grep ERROR | tail -20
cat file.txt | wc -l
5. cat으로 내용 읽기
cat file.txt # 파일 전체를 stdout으로 출력
cat file1.txt file2.txt # 여러 파일 연결
head -n 20 file.txt # 처음 20줄
tail -n 20 file.txt # 마지막 20줄
tail -f /var/log/app.log # 실시간 로그 출력 추적
less file.txt # 페이지별 보기 (종료는 q)
grep "pattern" file.txt # 패턴과 일치하는 줄
grep -r "pattern" ./dir/ # 디렉토리 내 재귀 검색
grep -n "pattern" file.txt # 줄 번호 포함
grep -i "pattern" file.txt # 대소문자 구분 없음
6. 결과 정렬
sort file.txt # 알파벳 순 (오름차순)
sort -r file.txt # 역순
sort -n file.txt # 숫자 정렬
sort -k2 file.txt # 2열 기준 정렬
sort -t: -k3 -n /etc/passwd # 사용자 지정 구분자 (:), 3열, 숫자 정렬
ls -la | sort -k5 -n # ls 출력을 파일 크기(5열)로 정렬
7. 중복 제거
# uniq는 *연속된* 중복만 제거합니다 — 항상 먼저 정렬하세요
sort file.txt | uniq # 중복 제거
sort file.txt | uniq -c # 발생 횟수 세기
sort file.txt | uniq -d # 중복된 줄만 표시
sort file.txt | uniq -u # 한 번만 나타난 줄만 표시
# 일반적인 파이프라인: 로그에서 오류 유형별 개수 세기
cat app.log | grep ERROR | sort | uniq -c | sort -rn
8. heredoc으로 스크립트 작성 및 실행
# 스크립트 파일 인라인 생성
cat << 'EOF' > myscript.sh
#!/bin/bash
set -euo pipefail # 오류, 설정되지 않은 변수, 파이프 실패 시 종료
echo "Today: $(date +%Y-%m-%d)"
for i in 1 2 3; do
echo "Step $i"
done
EOF
chmod +x myscript.sh
./myscript.sh
# 또는 파일 생성 없이 직접 실행
bash << 'EOF'
echo "Inline execution"
ls -la /tmp
EOF
스크립트 모범 사례:
- 항상
#!/bin/bash로 시작 - 안전한 기본값을 위해
set -euo pipefail사용 - 항상 변수 인용:
"$VAR"($VAR아님) - 백틱 대신
$(...)사용
9. 파일 시스템 — 빠른 참조
# 탐색 및 검사
pwd && ls -lah # 현재 위치 + 여기 있는 파일
tree -L 2 # 디렉토리 트리 (2단계 깊이)
find /path -name "*.log" # 이름으로 검색
du -sh /path # 디렉토리 크기
df -h # 모든 마운트의 디스크 사용량
# 생성 / 복사 / 이동 / 삭제
mkdir -p /path/to/dir # 상위 디렉토리와 함께 생성
cp -r src/ dst/ # 디렉토리 복사
mv src dst # 이동 또는 이름 변경
rm -rf dir/ # 재귀적으로 삭제 (되돌릴 수 없음)
# 권한 및 소유권
chmod +x file # 실행 가능하게 설정
chmod 644 file # rw-r--r--
chown user:group file # 소유자 변경
# 링크
ln -s /target /link # 심볼릭 링크
readlink -f /link # 심볼릭 링크를 실제 경로로 해석
# 마운트
mount # 모든 활성 마운트 나열
lsblk # 블록 장치 트리
findmnt # 마운트 포인트 트리
→ 전체 파일 시스템 참조: references/bash.md
10. 설치 및 업데이트 — 빠른 참조
# APT
sudo apt update && sudo apt upgrade -y
sudo apt install -y package-name
# pip (Python)
pip install package --break-system-packages
# npm (Node.js)
npm install -g package-name
→ 전체 설치 참조 (snap, 소스 빌드, pip 옵션): references/bash.md
11. 명령어 도움말 보기
command --help # 인라인 도움말 (가장 빠름)
man command # 전체 매뉴얼 페이지
apropos keyword # man 페이지 요약 검색
whatis command # 한 줄 설명
info command # GNU 정보 페이지 (GNU 도구용)
help cd # 셸 내장 명령어 도움말
12. 환경 변수 — 빠른 참조
export VAR="value" # 현재 셸과 하위 프로세스에 설정
echo $VAR # 변수 읽기
unset VAR # 변수 제거
env # 모든 환경 변수 나열
VAR=value command # 단일 명령어에만 설정
→ 변수 유지, .env 파일 로드: references/bash.md
상세 참조
완전한 명령어 범위가 필요할 때 다음 파일을 불러오세요:
references/bash.md— 전체 파일 시스템, 설치/업데이트, 환경 변수, 스크립팅 패턴references/containers.md— Podman, kubectl, Helmreferences/curl.md— HTTP 요청용 curlreferences/agents.md— aider-chat 및 claude CLI