liminfo

Shell Commands

Linux/Unix 셸 명령어 레퍼런스

33개 결과

Shell Commands 소개

이 Shell 스크립트 레퍼런스는 Bash 셸 스크립팅을 위한 검색 가능한 치트시트로, 변수, 조건문, 반복문, 함수, 파일처리, 프로세스의 여섯 가지 카테고리로 구성되어 있습니다. 모든 항목에는 터미널이나 스크립트 파일에 바로 붙여넣어 실행할 수 있는 코드 스니펫이 포함됩니다. 배포 스크립트 작성, 로그 분석 원라이너, 시스템 관리 자동화 등 어떤 작업이든 매일 사용하는 구문 패턴을 즉시 참조할 수 있습니다.

Bash는 대부분의 Linux 배포판과 macOS에서 기본 셸로 사용되므로 셸 스크립팅은 개발자, 시스템 관리자, DevOps 엔지니어에게 필수 기술입니다. 이 레퍼런스는 거의 모든 스크립트에 등장하는 구문을 다룹니다: ${VAR:-default}를 이용한 변수 확장, [ ]와 [[ ]]를 이용한 조건 테스트, 파일 존재 확인(-f, -d, -x), 줄 단위 처리를 위한 while-read 반복문, 암묵적 실패를 명시적 에러로 전환하는 set -euo pipefail 엄격 모드 조합까지 포함합니다.

파일처리 섹션에서는 Unix 텍스트 처리의 핵심 도구들을 한데 모았습니다: 패턴 검색을 위한 grep, 스트림 편집과 인플레이스 치환을 위한 sed, 컬럼 추출과 필드 기반 연산을 위한 awk, 재귀적 파일 탐색을 위한 find, 결과를 다른 명령에 전달하는 xargs가 있습니다. 프로세스 섹션에서는 백그라운드 실행, trap을 통한 시그널 처리, 파이프 체이닝, 명령 치환, AND/OR 논리 체인을 다루며, 이들은 개별 명령을 견고한 자동화 워크플로로 묶는 접착제 역할을 합니다.

주요 기능

  • 변수 할당, 확장, 기본값(${VAR:-default}), 특수 변수($1, $#, $@, $?), export, readonly
  • [ ]를 이용한 조건식, 정규식과 글로브 매칭을 위한 확장 테스트 [[ ]], 숫자 비교 연산자
  • 존재 여부, 타입, 권한을 확인하는 파일 테스트 연산자(-f, -d, -e, -r, -w, -x, -s)
  • 반복 구조 — for-in, C 스타일 for(()), 파일 처리를 위한 while-read, until, break/continue
  • 로컬 변수, 반환 코드, 명령 치환을 통한 값 캡처를 포함한 함수 정의
  • 텍스트 처리 파이프라인 — grep(패턴 검색), sed(스트림 편집), awk(컬럼 처리), find(파일 검색), xargs(stdin을 인자로 변환)
  • 백그라운드 실행(&), 시그널 처리를 위한 trap, set -euo pipefail 엄격 모드를 포함한 프로세스 관리
  • 다단계 데이터 처리 파이프라인을 구성하는 파이프 체이닝과 명령 치환 패턴

자주 묻는 질문

이 레퍼런스는 어떤 셸을 기준으로 하나요?

대부분의 Linux 배포판과 Catalina 이전 macOS의 기본 셸인 Bash(Bourne Again Shell)를 기준으로 합니다. [[ ]], 배열, 브레이스 확장 {1..10} 같은 Bash 전용 기능을 제외하면 sh(POSIX 셸)과 대체로 호환됩니다.

set -euo pipefail은 무엇이고 항상 사용해야 하나요?

set -e는 명령이 0이 아닌 종료 코드를 반환하면 즉시 스크립트를 종료합니다. set -u는 미정의 변수를 빈 문자열로 확장하는 대신 에러로 처리합니다. set -o pipefail은 파이프라인이 마지막 명령이 아닌 실패한 마지막 명령의 종료 코드를 반환하게 합니다. 함께 사용하면 일반적인 스크립팅 버그를 조기에 잡아내며 대부분의 프로덕션 스크립트 상단에 권장됩니다.

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

[ ]는 POSIX 호환 테스트 명령으로 sh와 모든 Bourne 호환 셸에서 동작합니다. [[ ]]는 Bash 내장 기능으로 패턴 매칭(== glob*), 정규식 매칭(=~ regex), 논리 연산자(&&, ||)를 추가하며 변수 인용에 덜 주의해도 됩니다. Bash 스크립트에서는 안전성과 가독성을 위해 [[ ]]를, POSIX 호환이 필요하면 [ ]를 사용하세요.

Bash에서 파일을 줄 단위로 읽으려면 어떻게 하나요?

while IFS= read -r line; do ... done < file.txt를 사용합니다. IFS=는 앞뒤 공백이 잘리는 것을 방지하고, -r은 백슬래시 해석을 방지합니다. 각 줄마다 서브셸을 생성하지 않고 파일을 줄 단위로 처리하는 표준 관용구입니다.

텍스트 처리에서 awk와 sed는 어떻게 구분해서 사용하나요?

sed는 간단한 찾기-바꾸기(s/old/new/g)와 줄 범위 추출에 사용합니다. awk는 줄을 필드로 분리하여 컬럼 기반 연산, 산술, 조건 로직이 필요할 때 사용합니다. awk는 본질적으로 구조화된 텍스트 데이터를 위한 작은 프로그래밍 언어이고, sed는 패턴 기반 변환에 최적화된 스트림 편집기입니다.

한 명령의 출력을 다른 명령의 인자로 전달하려면 어떻게 하나요?

xargs를 사용하여 표준 입력을 명령 인자로 변환합니다. 예를 들어 find . -name "*.log" | xargs grep "ERROR"는 모든 로그 파일에서 ERROR를 검색합니다. -n 1로 인자를 하나씩 전달하거나, 공백이 포함된 파일명을 처리하려면 find -print0과 함께 -0을 사용합니다.

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

인용 부호 안에서 "$@"는 각 위치 매개변수를 별도의 단어로 확장하여 공백이 포함된 인자를 보존합니다. "$*"는 모든 매개변수를 IFS의 첫 문자(보통 공백)로 연결한 하나의 단어로 확장합니다. 다른 명령에 인자를 전달할 때는 거의 항상 "$@"를 사용해야 합니다.

trap을 사용하여 에러를 깔끔하게 처리하려면 어떻게 하나요?

trap은 스크립트가 시그널을 받거나 종료될 때 정리 함수를 실행할 수 있게 합니다. trap cleanup EXIT는 정상 종료와 대부분의 종료 시그널에서 cleanup을 실행합니다. trap "echo Interrupted" INT는 Ctrl+C를 잡습니다. 임시 파일 삭제, 잠금 해제, 스크립트 종료 전 에러 메시지 출력에 필수적입니다.