PES
KO English 한국어 日本語 中文 हिन्दी বাংলা اردو Español Português Français Deutsch Русский العربية Bahasa Indonesia Tiếng Việt ไทย Türkçe

알림을 켜는 방법

이 브라우저 또는 주소에서는 알림을 사용할 수 없습니다. 지원되는 브라우저로 보안 연결된 PES 사이트에 접속해 주세요.

알림이 차단되어 있으면 브라우저 설정에서 허용해 주세요.

  1. 주소 표시줄 옆의 사이트 설정 또는 브라우저의 사이트 설정을 열고, 이 사이트의 알림을 허용으로 바꾸세요.
  2. 기기 설정에서 브라우저 알림을 허용하고 방해 금지 또는 집중 모드를 확인하세요.
  3. PES로 돌아와 페이지를 새로고침한 뒤 벨을 눌러 알림을 켜세요.

iPhone 또는 iPad에서는 PES를 홈 화면에 추가하고 거기에서 연 뒤 알림을 허용하세요.

나의 학습 진도
  1. 인공지능 사용법
  2. 터미널 명령어
  3. 인공지능 심화
  4. 바이브코딩
  5. 인공지능 자격증 준비 중
  6. 키보드

파이썬보다 먼저 익혀 둘 기본기, 쉘

를 배우면 파이썬을 먼저 떠올리지만, AI 도구를 설치하고 실행하는 데는 와 이 든든한 기본기가 됩니다.

쉘은 AI 을 직접 만드는 주력 언어는 아니지만, 파이썬보다 오래전부터 파일 관리와 작업 자동화에 쓰여 온 도구입니다.

깊이 공부할 필요 없이, 자주 쓰는 명령어 몇 가지만 익혀 보세요. 쉽게 시작해 평생 활용할 기본기가 됩니다.

가장 기본이 되는 언어

쉘 프로그래밍인공지능을 실제로 부리는 언어

은 프로그램 실행·파일 관리·개발 자동화에 유용해요. 는 ·앱·노트북·로도 사용할 수 있어요. 은 유용한 인터페이스 중 하나이며 모든 AI 사용자의 필수 조건은 아니에요.

커리큘럼 보기
  • 설치 없이 바로 실습
  • macOS · Linux 호환
  • 안전한
나의 학습 여정 오늘, 첫걸음을 시작해요
0 / 12단원 완료 0%
12단계 로드맵
29개 실습 미션
0번 명령 실행
단계별로

12단원으로 완성하는 쉘 로드맵

기초 부터 ·개발 도구, 파이썬·· 같은 다른 언어 실행까지 짧게 배우고 바로 실행해 보세요.

입문 → 실전
  1. 01단원 완료 다음 터미널과 첫 만남 명령어의 기본 문법과 내 위치 파악하기 미션 3개 시작하기
  2. 02단원 완료 다음 파일과 폴더 다루기 만들고, 옮기고, 지우고, 내용 들여다보기 미션 3개 시작하기
  3. 03단원 완료 다음 변수와 확장 값을 담고 꺼내 쓰기, 계산하기 미션 2개 시작하기
  4. 04단원 완료 다음 조건과 반복 if 로 판단하고 for 로 되풀이하기 미션 2개 시작하기
  5. 05단원 완료 다음 함수와 스크립트 나만의 명령어 만들기 미션 1개 시작하기
  6. 06단원 완료 다음 텍스트 처리 3대장 grep 으로 찾고 sort·uniq·wc 로 집계하기 미션 2개 시작하기
  7. 07단원 완료 다음 파이프와 리다이렉션 명령을 연결하고 결과를 파일로 보내기 미션 2개 시작하기
  8. 08단원 완료 다음 실전 스크립트 작성 진짜 쓸모 있는 자동화 만들기 미션 1개 시작하기
  9. 09단원 완료 다음 안전한 쉘 — 따옴표와 함정 방어적 스크립트로 마무리하기 미션 2개 시작하기
  10. 10단원 완료 다음 Node.js 명령어 node · npm · npx 로 자바스크립트를 터미널에서 돌리기 미션 3개 시작하기
  11. 11단원 완료 다음 개발 도구 설치 Grok · Codex · Claude Code · Firebase 등을 터미널에 올리기 미션 3개 시작하기
  12. 12단원 완료 다음 쉘로 다른 언어 실행하기 터미널에서 파이썬·awk·sed 를 직접 돌리는 법 미션 5개 시작하기
왜 쉘인가?

한 번 배우면, 평생 쓰는 컴퓨터의 공용어

AI의 답을 직접 실행

에게 "이 폴더의 파일들을 이렇게 정리해줘"라고 부탁하면 AI는 거의 항상 로 답을 줍니다. 그래서 을 읽을 줄 알아야 AI의 답이 안전한지 스스로 검증할 수 있습니다.

어디서나 통하는 기본기

쉘은 40년 넘게 거의 바뀌지 않은, 가장 안정적이고 어디에나 있는 "컴퓨터의 공용어"입니다. 한 번 배워 두면 macOS·Linux···AI 도구 어디서든 평생 써먹습니다. 인공지능 시대에 사람이 컴퓨터·AI와 대화하는 가장 기본이 되는 실전 언어가 바로 쉘입니다.

macOS 사용자도 그대로 따라오세요

macOS의 기본 쉘은 이지만, 이 과정에서 배우는 와 문법(····// 등)은 zsh 에서도 거의 100% 그대로 동작합니다. 스크립트 첫 줄에 를 적으면 macOS 에서도 정확히 bash 로 실행되며, 인덱스 시작 번호 같은 극히 일부 고급 차이를 빼면 그대로 통합니다. 그러니 안심하고 bash 기준으로 배우세요.

실전 예제

쉘 스크립트 한 장으로 웹 서버 만들기

20줄 남짓한 로, 에 실제로 페이지를 돌려주는 웹 를 띄울 수 있습니다. 가 결국 "텍스트 한 덩어리를 주고받는 약속"임을 보여 주는 예제입니다.

server.sh
#!/bin/bash

PORT=8084
PIPE=simple-web-server-pipe

rm -f "$PIPE"
mkfifo "$PIPE"

response() {
    read -r method path _
    echo "[$(date)] $method $path" >&2
    index=$(cat index.html)
    printf 'HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=utf-8\r\nConnection: close\r\n\r\n%s' \
      "$index"
}

while true; do
    response < "$PIPE" | nc -l "$PORT" > "$PIPE"
done
  1. mkfifo "$PIPE" 를 만듭니다. 가 받은 요청과 우리가 만든 응답이 이 통로로 오갑니다.
  2. nc -l "$PORT" nc(netcat) 로 8084 를 열고 브라우저 접속을 기다립니다. 소켓 서버를 한 줄로 대신합니다.
  3. response() 요청 첫 줄(메서드·)을 읽어 로그를 남기고, index.html 을 HTTP 200 응답으로 만들어 돌려줍니다.
  4. while true; do … done 응답을 마치고 연결이 끊기면 가 다시 돌아 다음 손님을 받습니다. 덕분에 서버가 계속 살아 있습니다.

같은 폴더에 index.html 을 두고 bash server.sh 로 실행한 뒤, 브라우저에서 localhost:8084 를 열어 보세요. 실서비스용은 아니지만 HTTP 의 원리를 이해하기에 좋습니다.

01단원 · 실습

터미널과 첫 만남

을 열고 를 입력하는 기본 규칙과, 지금 내가 컴퓨터의 어디에 있는지 파악하는 방법을 배웁니다.

학습 목표 4개 실습 미션 3개 약 10분
바로 실습하기
02단원 · 실습

파일과 폴더 다루기

파일과 폴더를 직접 만들고 복사·이동·삭제하며, 파일 내용을 들여다보는 실전 파일 관리를 익힙니다.

학습 목표 4개 실습 미션 3개 약 10분
바로 실습하기
03단원 · 실습

변수와 확장

값을 에 담아 재사용하고, 명령 결과나 계산 결과를 문장 속에 끼워 넣는 "확장"을 배웁니다.

학습 목표 4개 실습 미션 2개 약 10분
바로 실습하기
04단원 · 실습

조건과 반복

상황에 따라 다르게 동작하는 (if)과, 같은 일을 여러 번 반복하는 (for·while)을 배웁니다.

학습 목표 4개 실습 미션 2개 약 10분
바로 실습하기
05단원 · 실습

함수와 스크립트

자주 쓰는 명령 묶음을 로 만들고, 를 넘겨 호출하는 방법을 배웁니다. 파일과 (#!/bin/bash)의 역할도 이해합니다.

학습 목표 4개 실습 미션 1개 약 10분
바로 실습하기
06단원 · 실습

텍스트 처리 3대장

파일과 출력에서 원하는 줄을 찾고(), 정렬·중복제거·개수 세기(··)를 하는 강력한 텍스트 도구를 배웁니다.

학습 목표 4개 실습 미션 2개 약 10분
바로 실습하기
07단원 · 실습

파이프와 리다이렉션

명령의 출력을 다른 명령의 입력으로 잇는 (|)와, 결과를 파일로 보내는 (>, >>)을 배웁니다.

학습 목표 4개 실습 미션 2개 약 10분
바로 실습하기
08단원 · 실습

실전 스크립트 작성

지금까지 배운 조각들을 모아, 를 검증하고 성공·실패를 확인하며 실제 작업을 자동화하는 완성형 의 원리를 배웁니다.

학습 목표 4개 실습 미션 1개 약 10분
바로 실습하기
09단원 · 실습

안전한 쉘 — 따옴표와 함정

초보자가 가장 많이 당하는 ·· 함정을 정리하고, 오류에 강한 "방어적 " 작성법으로 과정을 마무리합니다.

학습 목표 4개 실습 미션 2개 약 10분
바로 실습하기
10단원 · 실습

Node.js 명령어

현대 웹· 도구의 기반인 를 에서 다루는 법을 배웁니다. 버전 확인, 실행, 관리, 일회 실행까지 익힙니다.

학습 목표 4개 실습 미션 3개 약 10분
바로 실습하기
11단원 · 실습

개발 도구 설치

코딩 와 배포 도구를 에 설치하는 짧은 안내입니다. Node/ 이 준비되면 대부분 한 줄 명령으로 시작할 수 있습니다.

학습 목표 4개 실습 미션 3개 약 10분
바로 실습하기
12단원 · 실습

쉘로 다른 언어 실행하기

은 모든 것을 혼자 하지 않습니다. 파이썬·· 같은 다른 언어를 불러 쓰는 지휘자입니다. 한 줄로 넘기는 -c, 여러 줄을 통째로 넘기는 , 그리고 이 가장 많이 쓰는 sed·awk 를 배웁니다.

학습 목표 6개 실습 미션 5개 약 10분
바로 실습하기
학습 목표

이번 단원에서 해낼 일

  1. 1

    명령어 [] [대상] 형태의 기본 구조로 명령을 입력할 수 있다

  2. 2

    를 확인하고 폴더 사이를 이동할 수 있다

  3. 3

    로 화면에 원하는 글자를 출력할 수 있다

  4. 4

    man 과 --help 로 모르는 명령어를 스스로 찾아볼 수 있다

핵심 개념

핵심 개념 익히기

01

터미널과 프롬프트

은 컴퓨터에게 글자로 명령을 내리는 창입니다. 명령을 기다리는 표시(보통 $ 또는 %)를 라고 부르며, 여기에 를 한 줄씩 적고 Enter 를 누르면 실행됩니다.

02

명령어의 3부분

대부분의 는 "무엇을 할지(명령어) + 어떻게 할지() + 대상()" 세 부분으로 되어 있습니다. 예를 들어 -l 문서 는 "목록 보기(ls) + 자세히(-l) + 문서 폴더"라는 뜻입니다.

03

내 위치 알기

에서는 항상 "지금 어느 폴더에 있는가"가 중요합니다. 로 를 확인하고, 로 폴더를 옮겨 다니며, 로 그 안에 무엇이 있는지 봅니다. ~ 는 내 를, .. 는 한 단계 위 폴더를 뜻합니다.

따라 해 보기

한 줄씩 실행해 보기

명령어를 누르면 오른쪽 터미널에 바로 입력돼요.

주의

처음 배울 때 자주 하는 실수

  • 와 사이에는 반드시 공백이 필요합니다. -la 처럼 붙여 쓰면 실패하고, 항상 ls -la 처럼 띄어 씁니다.
  • 은 를 구분합니다. LS 나 Cd 는 동작하지 않으며 소문자 ls, 로 입력해야 합니다.
학습 목표

이번 단원에서 해낼 일

  1. 1

    폴더와 빈 파일을 로 만들 수 있다

  2. 2

    파일을 복사·이동·이름 변경·삭제할 수 있다

  3. 3

    파일 내용을 ·· 로 확인할 수 있다

  4. 4

    삭제 명령의 위험성을 이해하고 안전하게 사용할 수 있다

핵심 개념

핵심 개념 익히기

01

만들기 — mkdir, touch

은 새 폴더를, 는 빈 파일을 만듭니다. mkdir -p a/b/c 처럼 -p 를 붙이면 중간 폴더까지 한 번에 만들어 줘서 편리합니다.

02

복사·이동·이름변경 — cp, mv

는 원본을 남기고 복사본을 만들고, 는 원본을 다른 곳으로 옮깁니다. 재미있게도 mv 옛이름 새이름 은 "이름 바꾸기"로도 쓰입니다.

03

내용 보기 — cat, head, tail

은 파일 전체를 보여 주고, 는 앞부분 몇 줄, 은 끝부분 몇 줄만 보여 줍니다. 은 파일을 삭제하는데 휴지통을 거치지 않고 즉시 영구 삭제되므로 조심해야 합니다.

따라 해 보기

한 줄씩 실행해 보기

명령어를 누르면 오른쪽 터미널에 바로 입력돼요.

주의

처음 배울 때 자주 하는 실수

  • -rf 는 확인 없이 폴더를 통째로 지웁니다. 실행 전 대상 를 눈으로 반드시 확인하세요.
  • 와 는 같은 이름의 대상이 있으면 조용히 덮어씁니다. cp -i, mv -i 로 확인 습관을 들이면 안전합니다.
학습 목표

이번 단원에서 해낼 일

  1. 1

    변수를 만들고 값을 꺼내 쓸 수 있다

  2. 2

    변수를 로 안전하게 감쌀 수 있다

  3. 3

    $(( )) 로 간단한 계산을 할 수 있다

  4. 4

    $( ) 로 명령 결과를 값처럼 가져올 수 있다

핵심 개념

핵심 개념 익히기

01

변수 만들기와 꺼내기

이름=값 형태로 를 만들고, 꺼낼 때는 앞에 $ 를 붙여 $이름 으로 씁니다. 중요한 규칙은 = 양옆에 공백을 넣지 않는 것입니다 (name=리엔 은 O, name = 리엔 은 X).

02

큰따옴표로 감싸기

를 쓸 때는 "$name" 처럼 로 감싸는 것이 안전합니다. 값에 공백이 있어도 하나의 값으로 지켜지며, 이는 9단원에서 배울 "함정 예방"의 핵심 습관입니다.

03

산술 확장과 명령 치환

숫자 계산은 $(( )) 안에서 합니다. $(( 3 + 4 )) 는 7 을 돌려줍니다. $() 를 쓰면 그 명령어의 실행 결과를 값처럼 가져와 에 담거나 문장에 끼울 수 있습니다. 예: 오늘=$(date).

따라 해 보기

한 줄씩 실행해 보기

명령어를 누르면 오른쪽 터미널에 바로 입력돼요.

주의

처음 배울 때 자주 하는 실수

  • = 주변에 공백을 넣으면(foo = bar) 이 foo 를 로 착각합니다. 반드시 foo=bar 로 붙여 씁니다.
  • $name 처럼 없이 쓰면 값에 공백이 있을 때 여러 조각으로 쪼개집니다. echo "$name" 을 기본 습관으로 삼으세요.
학습 목표

이번 단원에서 해낼 일

  1. 1

    if / elif / else 로 조건에 따라 분기할 수 있다

  2. 2

    [[ ]] 로 ·숫자·파일을 비교할 수 있다

  3. 3

    for 로 목록을 하나씩 반복 처리할 수 있다

  4. 4

    숫자 비교와 문자열 비교의 차이를 안다

핵심 개념

핵심 개념 익히기

01

if 조건문

if 조건; then ... fi 구조로, 조건이 참일 때만 안쪽 명령이 실행됩니다. elif(그밖에 이 경우)와 else(나머지 전부)를 덧붙일 수 있고, 반드시 fi 로 닫습니다.

02

비교하기 [[ ]]

조건 검사에는 [[ ]] 를 권장합니다. 은 ==·!=, 숫자는 -gt(크다)·-lt(작다)·-eq(같다), 파일 존재는 -f(파일)·-d(폴더)로 확인합니다.

03

for 반복문

for in 목록; do ... done 은 목록의 각 항목을 하나씩 변수에 넣어 반복합니다. {1..5} 처럼 범위를 쓰거나, 파일 목록을 돌 수도 있습니다.

04

seq 로 정해진 횟수만큼 반복하기

1부터 20까지처럼 "정해진 횟수"를 반복하려면 로 숫자를 만들어 for 에 넘깁니다. for i in $(seq 1 20); do ... done 처럼 쓰며, $(seq 1 20) 이 1 2 3 … 20 을 대신 만들어 줍니다. 이때 in 을 빠뜨리고 for i $(seq 1 20) 처럼 쓰면 오류가 나니, "for in 목록" 순서를 꼭 지키세요. 같은 반복을 for i in {1..20} 처럼 브레이스로도 쓸 수 있어요.

따라 해 보기

한 줄씩 실행해 보기

명령어를 누르면 오른쪽 터미널에 바로 입력돼요.

주의

처음 배울 때 자주 하는 실수

  • [[ $x > 7 ]] 의 > 는 숫자가 아니라 문자 순서로 비교해 "9"가 "10"보다 크다고 판정합니다. 숫자 비교는 -gt 를 쓰세요.
  • [[ 와 ]] 안쪽은 반드시 공백으로 띄워야 합니다. [[$x == y]] 는 오류이고 [[ $x == y ]] 가 맞습니다.
학습 목표

이번 단원에서 해낼 일

  1. 1

    함수를 정의하고 호출할 수 있다

  2. 2

    함수에 인자($1)를 넘겨 활용할 수 있다

  3. 3

    셔뱅(#!/bin/bash)의 역할을 설명할 수 있다

  4. 4

    ( +x)의 개념을 이해한다

핵심 개념

핵심 개념 익히기

01

함수 정의와 호출

이름() { 명령들; } 형태로 를 만들면, 자주 쓰는 명령 묶음을 이름 하나로 부를 수 있습니다. 함수 안에서는 $1, $2 로 넘어온 값을 받습니다.

02

스크립트 파일과 셔뱅

여러 줄을 파일(예: hello.sh)에 저장해 두면 언제든 재실행할 수 있습니다. 파일 첫 줄의 ("셔뱅")는 "이 파일을 로 실행하라"는 표시이며, macOS 의 zsh 환경에서도 이 줄 덕분에 정확히 bash 로 실행됩니다.

03

실행 권한과 인자

만든 는 +x hello.sh 로 을 준 뒤 ./hello.sh 로 실행합니다. 스크립트나 에 넘긴 값은 $1(첫째), $2(둘째), $@(전부), $#(개수)로 받습니다.

따라 해 보기

한 줄씩 실행해 보기

명령어를 누르면 오른쪽 터미널에 바로 입력돼요.

주의

처음 배울 때 자주 하는 실수

  • +x 를 안 하고 ./hello.sh 를 실행하면 "" 오류가 납니다. 실행 권한을 주거나 hello.sh 로 실행합니다.
  • greet $1 처럼 없이 를 넘기면 공백이 있을 때 쪼개집니다. greet "$1" 처럼 큰따옴표로 감싸세요.
학습 목표

이번 단원에서 해낼 일

  1. 1

    grep 으로 특정 단어가 든 줄을 찾을 수 있다

  2. 2

    grep 의 -i·-n 을 활용할 수 있다

  3. 3

    sort 로 줄을 정렬할 수 있다

  4. 4

    wc 로 줄 수·단어 수를 셀 수 있다

핵심 개념

핵심 개념 익히기

01

grep — 찾기

단어 파일 은 그 단어가 들어간 줄만 골라 보여 줍니다. -i 는 무시, -n 은 줄 번호 표시, -r 은 폴더 전체 검색으로, 로그나 코드에서 원하는 부분을 순식간에 찾습니다.

02

sed 와 awk (맛보기)

's/찾을것/바꿀것/g' 는 텍스트를 찾아 바꾸고, '{print $1}' 은 각 줄을 공백으로 나눈 뒤 첫 번째 조각만 출력합니다. 표 형태 데이터에서 특정 열만 뽑을 때 강력합니다.

03

rg (ripgrep) — 요즘 자주 보이는 찾기 도구

에서 라고 부르는 도구는 ripgrep 입니다. 이 수업의 처럼 파일에서 원하는 줄을 찾지만, 기본으로 폴더 전체를 빠르게 뒤지고 .gitignore 에 적힌 파일은 건너뜁니다. 이 grep 과 모두 같지는 않으므로, grep 을 먼저 익힌 뒤 곁들여 쓰는 편이 좋습니다. 여기 연습 터미널은 rg 를 지원하지 않으니 실제 컴퓨터에 설치해 시험해 보세요.

04

정렬·집계 — sort, uniq, wc

는 줄을 정렬하고, 는 (정렬된) 중복 줄을 하나로 합치며, -l 은 줄 수를 셉니다. 이들을 조합하면 간단한 통계를 낼 수 있습니다.

따라 해 보기

한 줄씩 실행해 보기

명령어를 누르면 오른쪽 터미널에 바로 입력돼요.

주의

처음 배울 때 자주 하는 실수

  • 's/a/b/' file > file 처럼 읽는 파일과 쓰는 파일을 같게 하면 파일이 먼저 비워져 내용이 날아갑니다. 임시 파일을 거치세요.
  • 은 찾는 단어가 없으면 아무것도 출력하지 않을 뿐 오류가 아닙니다. 존재만 판단하려면 grep -q(조용히)를 씁니다.
학습 목표

이번 단원에서 해낼 일

  1. 1

    파이프 | 로 여러 명령을 연결할 수 있다

  2. 2

    > 로 결과를 파일에 저장할 수 있다

  3. 3

    >> 로 파일 끝에 이어 붙일 수 있다

  4. 4

    의 흐름을 바꾸는 개념을 이해한다

핵심 개념

핵심 개념 익히기

01

파이프 ( | )

명령A | 명령B 는 A 의 출력을 B 의 입력으로 곧장 넘깁니다. | txt 처럼 이으면 여러 도구를 조립해 강력한 한 줄을 만들 수 있어, 의 진정한 힘이 여기서 나옵니다.

02

리다이렉션 ( >, >>, < )

> 파일 은 결과를 파일에 저장(덮어쓰기), >> 파일 은 뒤에 이어 붙이기, < 파일 은 파일 내용을 명령의 입력으로 넣습니다. 오류만 따로 저장하려면 2> 오류.txt 를 씁니다.

03

화면에도 보이고 파일에도 — tee

중간에 를 끼우면, 흘러가는 내용을 화면(또는 다음 명령)으로 그대로 보내면서 동시에 파일로도 저장합니다. 이름은 배관의 T자 이음새(tee)에서 왔어요. > 는 출력을 파일로 "돌려버려" 화면에서 사라지지만, 명령 | tee 파일 은 화면에도 보여 주면서 저장하는 점이 다릅니다. 지우지 않고 이어 붙이려면 tee -a 를 씁니다. 로그를 남기면서 결과도 눈으로 확인할 때 특히 유용합니다.

따라 해 보기

한 줄씩 실행해 보기

명령어를 누르면 오른쪽 터미널에 바로 입력돼요.

주의

처음 배울 때 자주 하는 실수

  • > 는 대상 파일을 즉시 비우고 씁니다. 이어 붙일 때는 반드시 >> 를 써야 앞 내용이 사라지지 않습니다.
  • 의 각 단계는 별도 에서 돌아, 파이프 안에서 바꾼 는 밖에 남지 않는 경우가 있습니다(고급 함정).
학습 목표

이번 단원에서 해낼 일

  1. 1

    명령의 성공·실패를 ($?)로 확인할 수 있다

  2. 2

    && 와 || 로 성공·실패에 따라 다음 명령을 이을 수 있다

  3. 3

    여러 파일을 for 반복으로 처리할 수 있다

  4. 4

    으로 정해진 시각에 자동 실행하는 개념을 안다

핵심 개념

핵심 개념 익히기

01

종료 코드와 $?

모든 명령은 끝날 때 성공(0)·실패(0이 아닌 값)를 나타내는 를 남깁니다. 바로 앞 명령의 결과는 $? 로 확인하며, 명령A && 명령B 는 A 가 성공했을 때만 B 를 실행합니다.

02

반복 자동화

파일 여러 개에 같은 작업을 하려면 for 반복과 파일 조작을 결합합니다. 예를 들어 폴더의 모든 사진을 백업 폴더로 날짜별로 복사하는 일을 몇 줄로 자동화할 수 있습니다.

03

예약 실행 — cron

-e 로 편집하는 cron 은 "매일 새벽 3시" 같은 정해진 시각에 를 자동 실행합니다. 분 시 일 월 요일 명령 다섯 칸으로 시각을 지정합니다. 예: 0 3 * * * 는 매일 새벽 3시.

따라 해 보기

한 줄씩 실행해 보기

명령어를 누르면 오른쪽 터미널에 바로 입력돼요.

주의

처음 배울 때 자주 하는 실수

  • 앞 명령이 실패했는데도 다음 줄을 그대로 실행하면 잘못된 결과가 쌓입니다. 중요한 명령은 명령 || exit 1 로 성공 여부를 확인합니다.
  • -r $src $dest 처럼 를 빼면 공백 있는 폴더명이 깨집니다. 에서는 가 홈이 아닐 수 있으니 를 씁니다.
학습 목표

이번 단원에서 해낼 일

  1. 1

    큰따옴표·작은따옴표·따옴표 없음의 차이를 설명할 수 있다

  2. 2

    단어 분리와 글로빙이 왜 위험한지 이해한다

  3. 3

    set -euo pipefail 로 오류에 강한 스크립트를 만들 수 있다

  4. 4

    는 언제나 큰따옴표로 감싸는 습관을 갖는다

핵심 개념

핵심 개념 익히기

01

따옴표 3종의 차이

"$var"()는 는 풀되 공백은 지키고, '$var'(작은따옴표)는 안의 모든 것을 글자 그대로 두며, 따옴표 없는 $var 는 공백에서 쪼개지고 * 같은 글자가 파일명으로 바뀝니다. 의심스러우면 큰따옴표로 감싸는 것이 기본 원칙입니다.

02

단어 분리와 글로빙

없는 는 공백을 기준으로 여러 조각으로 나뉘고(), *·? 가 실제 파일명으로 바뀝니다(). 이 때문에 "공백 있는 파일.txt" 하나가 두 개 로 오해되는 사고가 납니다.

03

방어적 옵션

위쪽에 set -euo pipefail 을 넣으면 오류가 나면 즉시 멈추고(-e), 정의 안 된 를 쓰면 경고하고(-u), 중간 실패도 잡아냅니다(pipefail). 도구로 미리 검사하면 대부분의 함정을 걸러낼 수 있습니다.

따라 해 보기

한 줄씩 실행해 보기

명령어를 누르면 오른쪽 터미널에 바로 입력돼요.

주의

처음 배울 때 자주 하는 실수

  • 모든 함정의 뿌리는 생략입니다. $file $target, $foo 같은 무방비 확장이 사고의 대부분입니다. "는 언제나 큰따옴표"를 몸에 배게 하세요.
  • [ "$a" = b && "$c" = d ] 처럼 다른 언어 문법을 흉내 내면 깨집니다. 에서는 [[ $a = b && $c = d ]] 로 묶습니다.
학습 목표

이번 단원에서 해낼 일

  1. 1

    -v 로 Node.js 설치 여부와 버전을 확인할 수 있다

  2. 2

    node app.js 로 파일을 실행할 수 있다

  3. 3

    npm 으로 패키지를 설치하고 스크립트를 실행할 수 있다

  4. 4

    npx 로 전역 설치 없이 도구를 한 번 실행할 수 있다

핵심 개념

핵심 개념 익히기

01

Node.js 란?

는 밖(·)에서 를 실행하는 런타임입니다. 웹 프론트(SvelteKit 등), 도구, 빌드 , 많은 코딩 가 Node 위에서 동작합니다. 을 배운 다음으로 익혀 두면 개발 도구 설치·실행이 훨씬 수월해집니다.

02

node 명령

-v(또는 node --version)로 버전을 확인합니다. node app.js 는 파일을 실행하고, node -e "console.log(1+1)" 은 한 줄 코드를 바로 실행합니다. 파일이 없거나 문법 오류면 에러 메시지가 나옵니다.

03

npm 과 package.json

(Node Manager)은 를 설치·관리하는 도구입니다. 프로젝트 루트의 package.json 에 이름·버전··dependencies 가 적혀 있습니다. npm install 로 의존성을 받고, npm run start 처럼 scripts 항목을 실행합니다. 는 패키지를 전역 설치하지 않고 한 번만 실행할 때 씁니다.

따라 해 보기

한 줄씩 실행해 보기

명령어를 누르면 오른쪽 터미널에 바로 입력돼요.

주의

처음 배울 때 자주 하는 실수

  • 와 이 " not found" 이면 가 아직 설치되지 않은 것입니다. nodejs.org 또는 으로 설치한 뒤 을 다시 여세요.
  • npm install -g 는 권한·보안 문제를 자주 일으킵니다. 가능하면 nvm 을 쓰거나 npm 의 전역 권한을 고친 뒤 sudo 없이 설치하세요.
학습 목표

이번 단원에서 해낼 일

  1. 1

    가 개발 도구 설치의 전제임을 설명할 수 있다

  2. 2

    Claude Code · Codex · Grok · 의 대표 설치 명령을 안다

  3. 3

    전역 설치(-g)와 일회 실행()의 차이를 구분할 수 있다

  4. 4

    설치 후 버전 확인 습관을 갖는다

핵심 개념

핵심 개념 익히기

01

왜 터미널에 도구를 설치하나?

현대 개발은 에디터만으로 끝나지 않습니다. 코딩 (Grok Build, OpenAI Codex, Claude Code), 배포 (Firebase tools), 관리자(pnpm 등)가 에서 동작합니다. 10단원에서 배운 · 이 그 출발점입니다.

02

대표 도구 설치 (한 줄 요약)

공식 설치 방법은 바뀔 수 있으니 항상 공식 문서를 우선하세요. 일반적인 출발점은 다음과 같습니다. Claude Code: -fsSL ://claude.ai/install.sh | (또는 install -g @anthropic-/claude-code). OpenAI Codex: curl -fsSL https://chatgpt.com/codex/install.sh | sh (또는 npm install -g @openai/codex). Grok Build: 공식 안내의 설치 또는 npm install -g @xai-official/grok. : npm install -g firebase-tools. 설치 후 claude --version, codex --version, firebase --version 처럼 버전을 확인합니다.

03

안전하게 설치하는 습관

인터넷에서 받은 ( | )는 가능하면 내용을 먼저 읽고, 신뢰할 수 있는 공식 출처만 사용하세요. 전역 설치는 권한 오류가 나면 를 쓰기보다 환경을 점검하세요. 팀·CI 에서는 에 devDependency 로 고정해 버전을 맞추는 편이 안전합니다.

따라 해 보기

한 줄씩 실행해 보기

명령어를 누르면 오른쪽 터미널에 바로 입력돼요.

주의

처음 배울 때 자주 하는 실수

  • | 한 줄 설치는 편리하지만, 출처가 불명확하면 위험합니다. 공식 인지 확인하세요.
  • 도구 이름은 비슷해도 가 다릅니다. @anthropic-/claude-code, @openai/codex, 처럼 정확한 패키지명을 쓰세요.
학습 목표

이번 단원에서 해낼 일

  1. 1

    -c 와 -e 로 다른 언어를 한 줄 실행할 수 있다

  2. 2

    프로그램을 파일로 저장해 python3 파일.py 로 실행할 수 있다

  3. 3

    히어독(<<PY)으로 여러 줄짜리 프로그램을 명령에 넘길 수 있다

  4. 4

    sed 로 파일의 텍스트를 규칙에 따라 일괄 수정할 수 있다

  5. 5

    awk 로 표 형태 데이터에서 원하는 열을 뽑고 집계할 수 있다

  6. 6

    인공지능이 준 코드를 실행하기 전에 안전하게 확인할 수 있다

핵심 개념

핵심 개념 익히기

01

쉘은 연주자가 아니라 지휘자입니다

하나로 모든 계산을 하려 들면 금방 벽에 부딪힙니다. 대신 쉘은 "누구를 언제 부를지" 정하는 지휘자 역할을 합니다. 수학·데이터는 파이썬에게, 표 계산은 에게, 텍스트 일괄 수정은 에게 시키고, 쉘은 그 결과를 이어 붙입니다. 그래서 쉘을 알면 배운 적 없는 언어도 "불러서 쓸" 수 있습니다.

02

한 줄만 넘기기 — -c 와 -e

대부분의 언어는 "코드를 로 받아 바로 실행하는" 을 가지고 있습니다. 파이썬은 -c "코드", 는 -e "코드", 펄은 perl -e, 루비는 ruby -e 입니다. 계산기 대신 python3 -c "print(2**10)" 을 치는 습관만 들여도 이 훨씬 강력해집니다.

03

파일로 저장해 실행하기

프로그램이 한 번 쓰고 버릴 것이 아니라면 파일로 저장합니다. hello.py 에 코드를 적어 두고 hello.py 라고 치면 그대로 실행됩니다. 5단원에서 배운 을 파일 첫 줄에 #!/usr/bin/env python3 로 적고 +x hello.py 로 을 주면, python3 를 앞에 붙이지 않고 ./hello.py 만으로도 돌아갑니다. 실행이 끝난 뒤 를 쳐 보면 성공(0)인지 실패(1)인지 알 수 있어, 8단원에서 배운 대로 && 로 다음 명령을 이을 수 있습니다.

04

여러 줄 넘기기 — 히어독(here document)

프로그램이 여러 줄이면 -c 로는 불편합니다. 이때 쓰는 것이 히어독입니다. - <<'PY' 라고 쓰면, 그 다음 줄부터 PY 라고 적은 줄 전까지가 통째로 파이썬에게 으로 넘어갑니다. 가운데의 - 는 "파일 대신 표준입력에서 코드를 읽어라"는 뜻입니다. 코딩 가 파일을 고칠 때 자주 쓰는 형태가 바로 이것입니다.

05

<<'PY' 와 <<PY 는 다릅니다

종료 태그를 로 감싸면(<<'PY') 본문이 글자 그대로 넘어갑니다. 감싸지 않으면(<<PY) 본문 안의 $와 $(명령) 을 이 먼저 바꿔치기합니다. 파이썬 코드에는 $ 가 거의 없지만, 이나 에 $ 가 있으면 조용히 망가지므로 코드를 넘길 때는 따옴표로 감싸는 <<'PY' 가 기본입니다.

06

sed — 찾아 바꾸는 스트림 편집기

's/찾을것/바꿀것/' 은 각 줄에서 처음 만난 하나를, 끝에 g 를 붙이면(s/…/…/g) 그 줄의 모든 곳을 바꿉니다. 앞에 줄 번호나 // 을 붙여 대상 줄을 고르고(2s/…/…/, /error/s/…/…/), -n 과 p 를 함께 쓰면 고른 줄만 출력합니다. 구분자는 / 가 아니어도 되어서, 를 바꿀 때는 s|/old/path|/new/path| 처럼 쓰면 훨씬 읽기 편합니다. 파일 자체를 고칠 때는 sed -i.bak 's/찾을것/바꿀것/' 파일 을 쓰세요. 원본을 파일.bak 으로 남기고 고치는 형태라 안전하고, macOS 와 리눅스 양쪽에서 똑같이 동작합니다. 리눅스(GNU sed)만 쓴다면 sed -i 처럼 백업 이름을 생략해도 되지만, macOS 의 sed 는 -i 뒤에 백업 이름을 반드시 요구해서 그대로 치면 오류가 납니다(백업 없이 고치려면 sed -i '' '…' 파일 형태를 씁니다).

07

awk — 표를 다루는 작은 프로그래밍 언어

는 가 아니라 그 자체로 언어입니다. 줄을 공백으로 쪼개 $1·$2·$3 으로 부르고, NF 는 열 개수, NR 은 줄 번호입니다. 기본 형태는 awk '패턴 { 할 일 }' 이며, 패턴을 생략하면 모든 줄, 할 일을 생략하면 줄 전체 출력입니다. 맨 앞에 BEGIN{}, 맨 뒤에 END{} 를 두면 시작·마무리 작업을 할 수 있어서, 합계·평균·항목별 집계를 한 줄로 끝냅니다.

08

파이프로 언어들을 잇기

으로 받아 표준출력으로 내보내도록 만들어진 프로그램끼리는 로 자유롭게 이을 수 있습니다. sales.txt | '{print $2}' | -n | -3 처럼 쓰면 "파일을 읽고 → 둘째 열만 뽑고 → 숫자로 정렬하고 → 큰 값 셋만" 이 한 줄로 완성됩니다. awk· 는 이렇게 파이프로 잇고, 파이썬은 -c 나 으로 코드를 넘기는 것이 기본입니다. 이것이 이 지휘자라는 말의 진짜 의미입니다.

09

인공지능이 준 코드를 안전하게 실행하기

는 대개 이런 형태로 답을 줍니다. 그대로 붙여 넣기 전에 세 가지만 확인하세요. ① 어떤 파일을 고치는지 를 눈으로 읽는다. ② ·> 로 덮어쓰는 부분이 있는지 본다. ③ 중요한 파일이면 원본 원본.bak 으로 백업을 먼저 만든다. 을 읽을 줄 안다는 것은, AI 의 답을 검증할 수 있다는 뜻입니다.

따라 해 보기

한 줄씩 실행해 보기

명령어를 누르면 오른쪽 터미널에 바로 입력돼요.

주의

처음 배울 때 자주 하는 실수

  • 프로그램은 반드시 로 감싸세요. 큰따옴표를 쓰면 $1 을 이 자기 로 착각해 빈 값으로 바꿔 버립니다. awk '{print $1}' 은 되지만 awk "{print $1}" 은 엉뚱하게 동작합니다.
  • 의 종료 태그는 줄 맨 앞에, 앞뒤 공백 없이 정확히 같은 글자로 적어야 끝납니다. 들여쓰기가 필요하면 <<- 를 쓰고 탭으로 들여쓰세요.
  • 코드를 넘길 때는 <<'PY' 처럼 태그를 따옴표로 감싸는 것이 기본입니다. 감싸지 않으면 코드 안의 $ 가 쉘 변수로 바뀌어 조용히 망가집니다.
  • -i 는 파일을 되돌릴 수 없게 고칩니다. 먼저 -i 없이 실행해 화면으로 결과를 확인한 뒤에 붙이세요.
  • macOS 에서 sed -i 's/…/…/' 파일 처럼 백업 이름 없이 치면 undefined label 오류가 나고 파일은 그대로입니다. macOS 의 sed 는 -i 뒤에 백업 이름을 요구하기 때문입니다. sed -i.bak 형태로 쓰면 macOS·리눅스 어디서나 같은 명령이 통합니다.
  • sed 's/a/b/' file > file 처럼 읽는 파일과 쓰는 파일을 같게 하면 파일이 먼저 비워져 내용이 통째로 사라집니다.
🚀 심화 학습 — 더 깊이 알아보기

입력받기 — read

사용자에게 값을 물어보고 에 담습니다. 변수를 미리 선언할 필요가 없습니다.

echo "이름이 뭐예요?"# 질문을 화면에 출력
read name# 입력을 받아 name 변수에 저장
echo "안녕, $name!"# 받은 값을 사용

현재 위치 $PWD 와 서브셸

명령 대신 $PWD 로도 를 알 수 있습니다. 괄호 ( )로 감싼 명령은 별도의 에서 돌아, 그 안에서 해도 원래 위치는 바뀌지 않습니다.

echo "나는 $PWD 에 있어요"# 로 현재 사용
(cd /tmp; pwd)# 서브셸 안에서만 이동 → /tmp 출력
pwd# 바깥은 원래 위치 그대로

화면 지우기와 도움말 3형제

clear(또는 Ctrl-L)로 화면을 정리합니다. 모르는 명령은 세 가지 도움말로 찾습니다: 내장 명령은 help, 매뉴얼은 man, 상세 문서는 info.

clear# 화면 비우기 (Ctrl-L 과 같음)
help for# 내장 명령(for 등)의 도움말
man ls# 의 매뉴얼 페이지 (q 로 나감)

브레이스 확장으로 한 번에 만들기

{ } 안에 값을 나열하거나 범위를 쓰면 여러 이름을 한 번에 생성합니다. 폴더 트리를 한 줄로 만들 때 특히 강력합니다.

mkdir -p project/{src,tests,docs}# 폴더 3개를 한 번에 생성
touch file{1..5}.txt# file1.txt ~ file5.txt 다섯 개 생성
cp config.yaml{,.bak}# config.yaml → config.yaml.bak 백업 트릭

안전하게 삭제하기

은 되돌릴 수 없습니다. -i(하나씩 확인)·-v(지운 것 표시)로 실수를 줄이고, trash- 를 쓰면 휴지통으로 보냅니다.

rm -i old.txt# 지우기 전에 정말 지울지 물어봄
rm -v *.tmp# 무엇을 지웠는지 보여줌
rm -r tempDir/# 폴더와 내용 전부 삭제(주의!)

ls 옵션 더 보기

는 으로 정렬·형식을 바꿉니다. 자주 쓰는 세 가지를 익혀두면 편합니다.

ls -l# 한 줄에 하나씩, 자세히
ls -t# 최근 수정순으로 정렬
ls -R# 하위 폴더까지 재귀적으로

파라미터 확장 — 값을 꺼내며 바꾸기

${ } 안에서 값을 꺼내는 동시에 잘라내거나 바꿀 수 있습니다. 값을 가공하는 가장 강력한 도구입니다.

echo "${var/Some/A}"# 첫 번째 Some 을 A 로 치환
echo "${var//Some/A}"# // 는 모든 Some 을 A 로 치환
echo "${var:0:7}"# 0번째부터 7글자만 (부분 )
echo "${#var}"# 문자열 길이

기본값과 대소문자 변환

가 비어 있을 때 기본값을 주거나, 를 한 번에 바꿀 수 있습니다.

echo "${foo:-기본값}"# foo 가 비었으면 "기본값"을 대신 사용
: "${NAME:=손님}"# NAME 이 없으면 "손님"으로 설정하고 유지
echo "${var^^}"# 모두 대문자 ( 4+)
echo "${var,,}"# 모두 소문자

경로 자르기 — basename·dirname 흉내

# 는 앞에서, % 는 뒤에서 잘라냅니다. 두 번 쓰면(##, %%) 가장 길게 잘라, 에서 파일명·폴더명만 뽑을 때 씁니다.

path="/usr/local/bin/run.sh"# 예시 경로
echo "${path##*/}"# 맨 뒤 / 까지 제거 → run.sh ()
echo "${path%/*}"# 맨 뒤 /이후 제거 → /usr/local/bin (dirname)
echo "${path%.sh}"# .sh 확장자만 제거

배열 — 여러 값을 한 변수에

괄호로 여러 값을 담고, [번호]로 하나씩, [@]로 전부 꺼냅니다. ${#array[@]} 로 개수를 셉니다.

array=(사과 바나나 포도)# 3개짜리 만들기
echo "${array[0]}"# 첫 번째 → 사과 (번호는 0부터)
echo "${array[@]}"# 전부 → 사과 바나나 포도
echo "${#array[@]}"# 개수 → 3

연관 배열(딕셔너리)

-A 로 만든 은 "이름 → 값" 짝으로 저장합니다(다른 언어의 딕셔너리/맵과 같음).

declare -A person# 연관 배열 선언
person[name]="앨리스"# 이름표 name 에 값 저장
echo "${person[name]}"# 꺼내기 → 앨리스
for k in "${!person[@]}"; do echo "$k"; done# 모든 키 순회

유용한 내장 변수와 산술

가 미리 채워 두는 들이 있습니다. 은 $(( )) 안에서 하며, 지수·나머지도 가능합니다. 소수 계산은 를 씁니다.

echo "$?"# 바로 앞 명령의 (0=성공)
echo "$RANDOM"# 0~32767 사이 난수
echo "$(( 2 ** 10 ))"# 지수 → 1024
echo "scale=2; 10/3" | bc# 소수 계산 → 3.33

printf — 서식 있는 출력

는 시스템마다 동작이 조금씩 다릅니다. 는 어디서나 똑같이 동작하고, 자릿수·정렬·소수점을 정밀하게 다룹니다.

printf "안녕, %s!\n" "세계"# %s 자리에 값을 끼움 → 안녕, 세계!
printf "%.2f\n" 3.14159# 소수 둘째 자리 → 3.14
printf "%05d\n" 42# 5자리 0채움 → 00042

case — 여러 갈래를 깔끔하게

하나의 값을 여러 패턴과 비교할 때 if 를 여러 번 쓰는 대신 case 가 깔끔합니다(다른 언어의 switch 와 비슷).

case "$x" in# x 값에 따라 갈라짐
0) echo "영";;# 0 이면
1) echo "하나";;# 1 이면
*) echo "그 외";; esac# * 는 나머지 전부

반복문 3형제 — for·while·until

for 는 목록/범위를, while 은 조건이 참인 동안, until 은 조건이 거짓인 동안 반복합니다. C 스타일 for 도 있습니다.

for ((i=1; i<=3; i++)); do echo "$i"; done# C 스타일 for
while (( count < 3 )); do ((count++)); done# 조건이 참인 동안
until (( count >= 3 )); do ((count++)); done# 조건이 거짓인 동안

정규식 매칭과 파일 검사

=~ 는 이 패턴에 맞는지 검사합니다. -e·-f·-d 등은 파일/폴더가 존재하는지, 어떤 종류인지 확인합니다.

if [[ "$email" =~ ^[a-z]+@[a-z]+\. ]]; then echo 맞음; fi# 정규식 매칭
if [[ -f "$file" ]]; then echo "파일 있음"; fi# -f: 일반 파일인가
if [[ -d "$dir" ]]; then echo "폴더 있음"; fi# -d: 폴더인가
if [[ -z "$name" ]]; then echo "비었음"; fi# -z: 비어 있는가

변수의 범위 — local·readonly·declare

local 은 안에서만 쓰는 , 는 바꿀 수 없는 상수를 만듭니다. declare 는 정수(-i)·소문자(-l)·대문자(-u) 같은 성질을 지정합니다.

greet() { local msg="안녕"; echo "$msg $1"; }# msg 는 함수 밖에서 안 보임
readonly PI=3.14# 바꿀 수 없는 상수
declare -i num=42; num+=10# 정수형 → 계산이 자동(52)
declare -u up="hi"; echo "$up"# 항상 대문자 → HI

getopts — 옵션(-v -f) 처리

에 -v, -f 파일명 같은 을 받게 하는 표준 도구입니다. 글자 뒤 콜론(:)은 "값이 필요한 옵션"을 뜻합니다.

while getopts ":vf:" opt; do# v 는 값 없음, f 는 값 필요
case $opt in# 옵션별 분기
v) verbose=true ;;# -v 면 verbose 켜기
f) file="$OPTARG" ;; esac; done# -f 의 값은

source 와 export

source(또는 .)는 다른 파일을 현재 에서 실행해 ·설정을 불러옵니다. export 는 를 자식 에도 전달합니다.

source ./lib/helpers.sh# 다른 파일의 함수·변수를 현재 셸로
. ~/.bashrc# . 은 source 의 짧은 형태
export API_KEY="abc123"# 자식 프로세스도 볼 수 있게

grep 옵션 더 알기

은 으로 훨씬 강력해집니다. 재귀 검색·줄 번호·제외·개수 세기 등을 조합합니다.

grep -r "TODO" ./src# -r: 폴더 전체를 재귀 검색
grep -n "error" app.log# -n: 줄 번호와 함께
grep -v "debug" app.log# -v: 그 단어가 없는 줄만(반대)
grep -c "error" app.log# -c: 몇 줄인지 개수만

sed — 찾아 바꾸는 스트림 편집기

는 텍스트를 흐르는 대로 편집합니다. 치환·삭제·범위 지정이 가능하고, -i 로 파일을 직접 고칠 수 있습니다(백업 권장).

sed 's/okay/great/g' file.txt# 모든 okay 를 great 로
sed '/^#/d' file.txt# # 로 시작하는 주석 줄 삭제
sed -i.bak 's/old/new/g' file.txt# 파일 직접 수정 + .bak 백업
sed -n '/error/p' log.txt# error 가 든 줄만 출력

awk — 열(칼럼) 단위 처리

는 각 줄을 공백(또는 -F 로 지정한 문자)으로 쪼개 $1, $2 … 열로 다룹니다. 합계·필터·통계에 강력합니다.

echo 'a b c' | awk '{print $2}'# 두 번째 열 → b
awk -F',' '{print $3}' data.csv# 쉼표로 나눠 3번째 열
awk -F',' '$2 > 25' people.csv# 2번째 열이 25 초과인 줄
awk '{s+=$1} END{print s}' nums.txt# 1번째 열 합계

cut·sort·uniq·xargs

작은 도구들을 로 이으면 강력한 데이터 처리가 됩니다. 는 앞 명령의 출력을 다음 명령의 로 넘깁니다.

cut -d ',' -f 1 file.csv# 쉼표 기준 첫 번째 열만
sort file.txt | uniq -c# 정렬 후 중복 개수 세기
find . -name "*.tmp" | xargs rm -f# 찾은 파일들을 에 넘겨 삭제
find . -name "*.txt" -print0 | xargs -0 rm# 공백 있는 파일명도 안전(-0)

히어 도큐먼트와 히어 스트링

<< EOF 는 여러 줄 텍스트를 명령의 입력으로 통째로 넘깁니다. <<< 는 짧은 한 줄 을 입력으로 넣는 가벼운 방법입니다.

cat << EOF# EOF 까지 여러 줄을 입력으로
여러 줄 텍스트 EOF# 두 EOF 사이가 내용
grep "바나나" <<< "사과 바나나 포도"# <<< 로 한 줄 입력

표준에러와 /dev/null

출력()과 오류(stderr)는 다른 통로입니다. 2> 는 오류만, 2>&1 은 오류를 출력과 같은 곳으로, /dev/null 은 "버리는 곳"입니다.

command 2> error.log# 오류 메시지만 파일로
command > out.log 2>&1# 출력과 오류를 함께 out.log 로
command > /dev/null 2>&1# 출력·오류 모두 버리기(조용히)

프로세스 치환 — 명령을 파일처럼

<(명령) 은 명령의 출력을 마치 파일인 것처럼 넘깁니다. 두 명령의 결과를 임시 파일 없이 바로 비교할 때 유용합니다.

diff <(ls dir1) <(ls dir2)# 두 폴더 목록을 바로 비교
while read l; do echo "$l"; done < <(ls)# 안 가 밖에도 남음

명령 치환 $( ) 조합

$(명령) 은 명령의 결과를 값처럼 문장에 끼웁니다. 백틱(`)보다 $( )를 권장합니다(중첩 가능).

echo "여기 파일 $(ls | wc -l)개"# 파일 개수를 문장에 끼움
today=$(date +%Y-%m-%d)# 오늘 날짜를 에

trap — 어떻게 끝나도 뒷정리

trap 은 가 (종료·오류·중단)를 받을 때 실행할 명령을 정합니다. 임시 파일 정리에 특히 유용합니다.

TMP=$(mktemp)# 안전한 임시 파일 만들기
cleanup() { rm -f "$TMP"; }# 정리
trap cleanup EXIT# 스크립트가 끝나면 무조건 정리
trap 'echo 중단됨; exit 1' SIGINT# Ctrl-C 눌러도 안전하게

방어적 옵션 — set

위쪽에 set 을 두면 오류에 강해집니다. -e(오류 시 중단)·-u(빈 금지)·-o pipefail( 실패 감지)을 함께 씁니다. -x 는 디버깅용.

set -euo pipefail# 견고한 스크립트의 표준 첫 줄
set -x# 실행되는 명령을 하나씩 출력()
set +x# 디버깅 끄기

백그라운드 작업과 wait

명령 뒤 & 를 붙이면 로 실행됩니다. jobs 로 목록, wait 로 끝날 때까지 기다립니다.

sleep 5 &# 백그라운드로 실행
jobs# 실행 중인 백그라운드 작업 목록
wait# 모든 백그라운드 작업이 끝날 때까지 대기
time sleep 1# 명령이 걸린 시간 측정

자주 쓰는 안전 패턴

실전에서 반복되는 방어 패턴들입니다. 필수 값 확인, 명령 존재 확인, 실패 시 즉시 종료.

: "${VAR:?VAR 가 필요합니다}"# VAR 없으면 에러 내고 종료
command -v jq && echo "jq 있음"# 명령이 설치됐는지 확인
cp a b || { echo 실패; exit 1; }# 실패하면 메시지 내고 종료

set 옵션 하나씩 이해하기

set -euo pipefail 은 세 의 결합입니다. 각각이 어떤 사고를 막는지 알면 왜 표준이 됐는지 이해됩니다.

set -e# 명령이 하나라도 실패하면 즉시 중단
set -u# 정의 안 한 를 쓰면 에러(오타 방지)
set -o pipefail# 중간이 실패해도 전체를 실패로

shopt — 글로빙 동작 바꾸기

로 파일 이름 매칭() 방식을 조절합니다. globstar 는 ** 로 하위 폴더까지, nullglob 은 매칭이 없으면 빈 값으로 처리합니다.

shopt -s globstar# ** 가 하위 폴더까지 매칭 ( 4+)
for f in **/*.sh; do echo "$f"; done# 모든 하위의 .sh 파일
shopt -s nullglob# 매칭 없으면 패턴 글자 대신 빈 값

IFS 와 안전한 줄 읽기

(내부 구분자)는 단어를 나누는 기준입니다. 파일을 한 줄씩 안전하게 읽을 때 IFS= 와 read -r 을 함께 씁니다.

IFS=',' read -ra f <<< "a,b,c"# 쉼표로 나눠 f 에
while IFS= read -r line; do# 공백·특수문자 보존하며
echo "$line"; done < file.txt# 한 줄씩 안전하게 읽기

nvm 으로 버전 관리

프로젝트마다 필요한 Node 버전이 다를 수 있습니다. 으로 여러 버전을 설치·전환합니다.

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash# nvm 설치(버전 번호는 공식 문서 확인)
nvm install 22# Node 22 설치
nvm use 22# 현재 에서 Node 22 사용
node -v# 전환된 버전 확인

npm scripts 와 로컬 바이너리

의 는 _modules/.bin 을 에 넣어 실행합니다. 전역 설치 없이도 프로젝트 도구를 쓸 수 있습니다.

npm init -y# package.json 빠르게 생성
npm install lodash# 런타임 의존성 추가
npm install -D typescript# 개발 전용 의존성
npm run build# scripts.build 실행

npx 로 일회 실행

전역 설치 없이 최신 도구를 한 번만 돌릴 때 를 씁니다. 버전이 자주 바뀌는 에 특히 유용합니다.

npx create-next-app@latest my-app# 프로젝트 스캐폴딩 예시
npx prettier --write .# 로컬/원격 prettier 실행
npx --yes cowsay hello# 확인 없이 일회 실행

AI 코딩 에이전트 설치 메모

공식 설치 또는 전역 로 올립니다. 설치 직후 버전 명령으로 확인하세요.

curl -fsSL https://claude.ai/install.sh | bash# Claude Code (Anthropic)
curl -fsSL https://chatgpt.com/codex/install.sh | sh# OpenAI Codex
npm install -g @xai-official/grok# Grok CLI (npm 대안 예시)
claude --version && codex --version# 설치 확인(예시)

Firebase 와 기타 필수 CLI

배포·인증·호스팅에 쓰는 와, 빠른 관리자 pnpm 도 자주 함께 설치합니다.

npm install -g firebase-tools# Firebase CLI
firebase login# 로 로그인
firebase projects:list# 프로젝트 목록
npm install -g pnpm# pnpm 전역 설치

PATH 와 권한 문제

설치는 됐는데 명령을 못 찾는다면 문제입니다. which 로 위치를 확인하고, 설정을 점검합니다.

which node npm# 실행 파일 위치
echo "$PATH"# 검색 확인
npm config get prefix# 전역 설치 경로
command -v firebase || echo "not found"# 설치 여부 검사

언어별 한 줄 실행 옵션

거의 모든 언어가 "코드를 로 받아 즉시 실행"하는 을 가집니다. 옵션 글자만 다를 뿐 쓰는 법은 똑같습니다.

python3 -c "import sys; print(sys.version)"# 파이썬 한 줄
node -e "console.log(1 + 1)"# 한 줄
perl -e 'print "hello\n"'# 펄 한 줄
ruby -e 'puts (1..5).to_a'# 루비 한 줄
php -r 'echo PHP_VERSION;'# PHP 는 -r

인공지능이 파일을 고칠 때 쓰는 패턴

에게 코드 수정을 부탁하면 거의 이 형태로 답이 옵니다. 파일을 읽어 을 바꿔 다시 쓰는 파이썬 조각을 으로 넘기는 방식으로, assert 로 "바꿀 대상이 정말 있는지" 먼저 확인하는 것이 핵심입니다.

python3 - <<'PY'# 여기서부터 PY 까지가 파이썬 프로그램
p = "src/app.py"# 고칠 파일
s = open(p, encoding="utf-8").read()# 통째로 읽기
old = "before text"# 찾을 문자열(이 정의가 없으면 NameError)
new = "after text"# 바꿀 문자열
assert old in s# 바꿀 대상이 없으면 여기서 멈춘다(가장 중요)
s = s.replace(old, new)# 치환
open(p, "w", encoding="utf-8").write(s)# 다시 쓰기
PY# 히어독 끝 — 줄 맨 앞에 정확히

히어독 응용 — 설정 파일 만들기

안에서 여러 줄짜리 설정·문서를 만들 때도 이 가장 깔끔합니다. 태그를 감싸지 않으면 $가 그 자리에서 채워집니다.

cat <<EOF > .env# 태그를 안 감싸면 변수가 채워진다
PORT=$PORT# $PORT 가 실제 값으로 바뀌어 저장
EOF# 여기서 끝
cat <<'EOF' > template.txt# 감싸면 $PORT 가 글자 그대로
bash <<< "echo one-liner"# 으로 한 줄만 넘기기

sed 심화 — 골라서 고치기

주소(줄 번호·)를 앞에 붙이면 원하는 줄만 고칩니다. -i 로 파일을 직접 고칠 때는 -i.bak 처럼 확장자를 붙이세요 — 백업이 남을 뿐 아니라 macOS 와 리눅스에서 똑같이 동작합니다.

sed -n '10,20p' log.txt# 10~20번째 줄만 출력
sed '/^#/d' config.txt# # 로 시작하는 주석 줄 삭제
sed -i.bak 's/3000/8080/' config.txt# 백업(.bak)을 남기고 파일 수정
sed -E 's/([a-z]+)@([a-z.]+)/\2 \/ \1/' mail.txt# 그룹으로 순서 바꾸기
sed 's/error/ERROR/gI' log.txt# 무시하고 모두 치환
printf 'appended\n' >> notes.txt# 마지막 줄 뒤에 덧붙이기(어디서나 통하는 방법)

awk 심화 — 집계와 서식

의 진가는 집계와 서식에서 드러납니다. 표를 읽어 항목별로 묶고 보기 좋게 출력하는 일이 한 줄로 끝납니다.

awk '{sum[$1] += $2} END {for (k in sum) printf "%-10s %5d\n", k, sum[k]}' sales.txt# 항목별 합계를 표로 출력
awk -F, '{print $2}' data.csv# 는 -F, 로 쉼표 구분
awk 'NF > 0' notes.txt# 빈 줄 제거(패턴만 쓰면 그 줄을 출력)
awk '{n = split($0, a, "/"); print a[n]}' paths.txt# 에서 파일명만
awk 'NR == FNR {m[$1] = $2; next} $1 in m {print $1, m[$1], $2}' a.txt b.txt# 두 파일 join
awk 'BEGIN {printf "%.2f\n", 22 / 7}'# BEGIN 만 쓰면 계산기

jq · xargs — 언어를 잇는 접착제

은 로, "찾은 결과마다 명령 실행"은 로 처리합니다. 두 도구를 알면 로 이을 수 있는 범위가 크게 넓어집니다.

curl -s https://api.example.com/u | jq '.name'# JSON 에서 필드 하나
jq -r '.items[] | .id' data.json# 을 줄 단위로 펼치기(-r 은 제거)
ls *.txt | xargs wc -l# 찾은 파일마다 명령 실행
grep -rlZ TODO . | xargs -0 sed -i.bak 's/TODO/DONE/g'# + 일괄 수정(-Z·-0 으로 공백 파일명까지 안전하게, 백업도 남긴다)

Learn X in Y Minutes (Bash, CC BY-SA)를 참고해 재구성했습니다. 일부 명령은 개념 참고용이에요.

단원 완료!멋져요, 한 단계 더 성장했어요.

가이드라인

인공지능

인공지능 자격증

공부

바이브코딩

게임 개발

연습

튜터

채팅

게시판

만들기

소통

더보기

용어 사전

모르는 말을 골라 보세요. 쉬운 설명과 관련 용어를 볼 수 있어요.

찾는 용어가 아직 없어요.

용어를 고르면 설명이 보여요.