liminfo

Bash 명령어 치트시트

bash 명령어 모음 · 리눅스 쉘 스크립트 치트시트 · bash 문법 정리

파일 조작

ls -la

모든 파일 상세 목록

drwxr-xr-x 2 user group 4096 Jan 1 file.txt
find . -name "*.log" -mtime +7 -delete

7일 이상 된 .log 삭제

du -sh *

디렉토리별 용량 확인

1.2G  node_modules
 48K  src
tar -czf archive.tar.gz dir/

디렉토리 gzip 압축

rsync -avz src/ dest/

변경된 파일만 동기화

텍스트 처리

grep -rn 'pattern' .

재귀적으로 패턴 검색

./src/app.js:42: pattern found
sed -i 's/old/new/g' file

파일 내 문자열 전체 치환

awk '{print $1, $3}' file

1번, 3번 열 출력

sort file | uniq -c | sort -rn

빈도순 정렬

   42 error
   17 warning
    3 info
cut -d: -f1 /etc/passwd

구분자로 필드 추출

네트워크

curl -s https://api.example.com | jq .

API 호출 후 JSON 포맷

ss -tlnp

리스닝 포트 확인

LISTEN 0 128 *:80 *:* users:(("nginx",pid=1234))
wget -q -O - https://example.com

URL 내용을 stdout으로

scp file user@host:/path/

원격 서버로 파일 전송

dig +short example.com

DNS 조회

93.184.216.34

프로세스/시스템

ps aux | grep node

node 프로세스 찾기

kill -9 $(lsof -t -i:3000)

포트 3000 사용 프로세스 종료

top -bn1 | head -5

CPU/메모리 요약

df -h

디스크 사용량

/dev/sda1  50G  32G  16G  67% /
free -h

메모리 사용량

Mem:  15Gi  8.2Gi  4.1Gi

Git

git log --oneline -10

최근 커밋 10개 요약

git diff --stat HEAD~1

마지막 커밋 변경 요약

git stash && git pull && git stash pop

변경사항 보존하고 pull

git log --author='name' --since='1 week ago'

특정 작성자 최근 커밋

git branch -d $(git branch --merged | grep -v main)

머지된 브랜치 삭제

권한

chmod 755 script.sh

실행 권한 부여 (rwxr-xr-x)

chown -R user:group dir/

소유권 재귀 변경

chmod +x *.sh

모든 .sh에 실행 권한

umask 022

기본 파일 권한 설정

쉘 스크립트

#!/usr/bin/env bash set -euo pipefail

견고한 스크립트 헤더

trap "rm -f /tmp/lock" EXIT

종료 시 정리 작업

readonly DIR="$(cd "$(dirname "$0")" && pwd)"

스크립트 디렉토리 절대 경로

logger -t myscript "Started at $(date)"

syslog에 기록

exec 2>/tmp/err.log

에러 출력을 파일로 리다이렉트

디버깅

bash -x script.sh

실행 추적 모드로 스크립트 실행

+ echo Hello
Hello
set -x; some_command; set +x

특정 구간만 디버그

strace -e trace=file cmd

파일 시스템 호출 추적

time command

명령어 실행 시간 측정

real 0m1.234s
user 0m0.012s

Bash 명령어 치트시트 소개

bash 명령어 모음과 리눅스 쉘 스크립트 치트시트를 한 곳에서 검색하고 복사할 수 있습니다. 개발자, 시스템 관리자, DevOps 엔지니어가 매일 쓰는 bash 문법 정리 레퍼런스입니다. 변수 섹션은 쉘 스크립트 기초인 변수 할당(= 양쪽 공백 없이), ${VAR} 참조, 기본값 확장(${VAR:-default}, ${VAR:=default}), 문자열 길이(${#VAR}), readonly·export 선언, 위치 매개변수($0~$9), 인자 개수($#), 종료 코드($?), PID($$)를 다룹니다. bash 스크립트 입문자와 실무자 모두에게 필요한 핵심 내용입니다.

bash if else 구문과 테스트 연산자를 완전히 정리했습니다. POSIX [ ]와 Bash [[ ]] 확장 테스트의 차이, 숫자 비교(-eq -ne -gt -lt -ge -le), 문자열 비교(== != < >), 파일 테스트(-f -d -e -r -w -x), 빈 문자열 확인(-z -n), case/esac 다중 분기까지 모두 포함합니다. 반복문은 bash for 루프(for-in, C 스타일), while, until, break/continue를 예제와 함께 다룹니다. 함수는 정의 구문, return 코드, local 변수 스코프를 설명합니다.

리눅스 쉘 스크립트 치트시트의 핵심인 배열과 문자열 처리를 상세히 설명합니다. 인덱스 배열 선언, 요소 접근(${arr[i]}), 전체 확장(${arr[@]}), 길이(${#arr[@]}), 요소 추가(arr+=()), declare -A 연관 배열(해시맵)을 다룹니다. bash 문자열 처리 파라미터 확장 치트시트: 접두사/접미사 패턴 제거(# ## % %%), 치환(/ //), 슬라이싱(:offset:length), 대소문자 변환(^^ ,,). 리다이렉션(> >> 2> &>), 히어 도큐먼트(<<), 파이프, 명령 치환($())까지. 실무에서 바로 쓸 수 있는 bash 원라이너 모음도 제공합니다.

주요 기능

  • Quick Cheatsheet: 카테고리별 bash 명령어 모음 검색 (파일, 텍스트, 네트워크, 시스템, Git, 권한)
  • Syntax Reference: 복사 가능한 예제를 포함한 bash 문법 정리 — 변수, 조건문, 반복문, 함수, 배열
  • Try It: 명령어와 실행 결과를 나란히 보여주는 인터랙티브 예제
  • One-Liners: 파일 처리, 로그 분석, CSV, 병렬 처리 등 실무 bash 원라이너 모음
  • 변수: ${VAR:-default}, ${VAR:=default}, ${#VAR}, readonly, export, $0/$#/$?/$$
  • 조건문: [ ] vs [[ ]], 숫자/문자열/파일 테스트 연산자, bash if else 구문, case 문
  • 문자열: # ## % %% 접두사/접미사 제거, / // 치환, :offset:length 슬라이싱, ^^ ,, 대소문자 변환
  • 프로세스: & 백그라운드, && || 체인, trap 시그널 핸들러, wait, nohup, set -euo pipefail

자주 묻는 질문

Bash에서 [ ]와 [[ ]]의 차이는 무엇인가요?

[ ]는 모든 POSIX 호환 쉘에서 사용 가능한 POSIX test 명령어입니다. [[ ]]는 Bash의 확장 테스트 구문으로, == 패턴 매칭, =~ 정규식 매칭, 괄호 내부에서 && 및 || 논리 연산자를 지원합니다. [ ]에서는 단어 분리를 막기 위해 변수를 따옴표로 묶어야 하지만, [[ ]]에서는 덜 중요합니다. Bash 스크립트에서는 더 안전하고 강력한 조건문을 위해 [[ ]]를 사용하는 것이 좋습니다.

Bash 스크립트에서 set -euo pipefail은 무엇을 하나요?

set -e는 명령어가 0이 아닌 종료 코드를 반환하면 스크립트를 즉시 종료합니다. set -u는 정의되지 않은 변수 참조를 오류로 처리합니다(빈 문자열로 묵시적으로 처리하는 대신). set -o pipefail은 파이프의 어떤 명령어라도 실패하면 파이프라인 전체를 실패로 처리합니다(없으면 마지막 명령어의 종료 코드만 중요). 스크립트 상단에 set -euo pipefail을 추가하는 것이 운영 수준의 쉘 스크립트 작성을 위한 모범 사례입니다.

Bash의 ${VAR:-default} 구문은 어떻게 동작하나요?

${VAR:-default}는 VAR이 설정되어 있고 비어 있지 않으면 VAR의 값을 반환하고, 그렇지 않으면 VAR을 변경하지 않고 "default"를 반환합니다. ${VAR:=default}는 같은 동작이지만 VAR이 비어 있으면 "default"를 VAR에도 할당합니다. ${VAR:+alt}는 VAR이 설정되어 있고 비어 있지 않으면 "alt"를 반환하고 그렇지 않으면 빈 값을 반환합니다. ${VAR:?오류 메시지}는 VAR이 설정되지 않았거나 비어 있으면 오류 메시지와 함께 종료합니다.

Bash에서 연관 배열(해시맵)을 어떻게 사용하나요?

declare -A mymap으로 연관 배열을 선언합니다. mymap[키]="값"으로 값을 설정합니다. ${mymap[키]}로 값에 접근합니다. ${!mymap[@]}로 모든 키를, ${mymap[@]}로 모든 값을 나열합니다. 연관 배열은 Bash 4.0 이상이 필요합니다. macOS의 기본 /bin/bash는 버전 3이므로 Homebrew로 Bash 5를 설치하고 #!/usr/local/bin/bash나 #!/opt/homebrew/bin/bash를 사용하세요.

Bash에서 파일 확장자나 경로 접두사를 제거하는 방법은?

Bash 파라미터 확장으로 외부 명령어 없이 처리할 수 있습니다. ${f##*/}는 마지막 슬래시까지 모든 것을 제거합니다(경로에서 파일명 추출). ${f%.*}는 .* 패턴과 일치하는 최단 접미사를 제거합니다(마지막 확장자 제거). ${f%%.*}는 가장 긴 접미사를 제거합니다(모든 확장자 제거). ${f#*/}는 첫 번째 경로 구성 요소를 제거합니다. basename, dirname, sed보다 빠릅니다.

Bash의 trap 명령어는 어떻게 동작하나요?

trap은 스크립트가 시그널을 받거나 종료될 때 실행할 명령어나 함수를 등록합니다. 자주 쓰는 패턴: trap "rm -f /tmp/잠금파일" EXIT는 스크립트가 어떤 이유로든 종료될 때 정리 작업을 실행합니다. trap "echo 인터럽트됨" INT는 Ctrl+C를 잡습니다. trap "cleanup_func" TERM는 kill 시그널을 처리합니다. trap "" SIGPIPE는 broken pipe 시그널을 무시합니다. 운영 스크립트에서 임시 파일, 잠금 파일, 백그라운드 프로세스 정리에는 항상 trap을 사용하세요.

Bash에서 $@와 $*의 차이는 무엇인가요?

둘 다 모든 위치 매개변수(스크립트 인자)를 나타냅니다. 핵심 차이는 따옴표 처리에 있습니다. "$@"는 각각 따옴표로 묶인 별도 문자열로 확장됩니다("$1" "$2" "$3"). 공백이 포함된 인자를 올바르게 처리합니다. "$*"는 IFS의 첫 번째 문자(보통 공백)로 모든 인자를 합친 단일 문자열로 확장됩니다. 다른 명령어에 인자를 전달할 때는 공백이 포함된 인자를 올바르게 처리하기 위해 항상 "$@"를 사용하세요.

Bash에서 명령어를 백그라운드에서 실행하고 완료를 기다리는 방법은?

&를 붙여 백그라운드로 실행합니다(task1 & task2 &). wait로 모든 백그라운드 작업이 완료될 때까지 대기합니다. wait $!로 가장 최근에 실행된 백그라운드 작업을 기다립니다. 선택적 대기를 위해 PID를 저장합니다. task1 & pid1=$!; task2 & pid2=$!; wait $pid1; wait $pid2. 로그아웃 후에도 계속 실행하려면 nohup command &를 사용합니다(출력은 기본적으로 nohup.out으로 저장).

리눅스 bash에서 자주 쓰는 원라이너 명령어는 무엇인가요?

실무에서 자주 쓰는 bash 원라이너 모음: (1) N일 이상 된 파일 삭제: find /path -mtime +7 -delete. (2) 패턴 일치 줄 수 세기: grep -c "error" logfile. (3) 특정 포트 프로세스 종료: kill -9 $(lsof -t -i:3000). (4) 파일 일괄 이름 변경: for f in *.JPG; do mv "$f" "${f%.JPG}.jpg"; done. (5) CSV 열 합계: awk -F, '{sum+=$2} END {print sum}' data.csv. (6) 파일 실시간 감시: tail -f /var/log/syslog. (7) 디렉토리 압축: tar -czf archive.tar.gz dir/. 이 bash 치트시트에서 이 모든 패턴을 찾아볼 수 있습니다.