쉘 스크립트 명령어, 사용법 정리

도람·2025년 8월 10일

쉘 스크립트 연습 사이트

리눅스 쉘 연습

리눅스 쉘 스크립트를 연습하려하니 putty를 통해 세션을 연결하고, 우분투 서버에 연결하는게 귀찮게 느껴졌다.
그러다 다양한 명령어들을 입력할 수 있는 연습 사이트를 찾았다.
실제 서버와 완전 똑같은 환경도 아니고, 실제 서버와 버전 차이로 인한 명령어 차이도 있겠지만 연습하기엔 좋은 사이트같다.


쉘 스크립트 기본 명령어

  • wc(word count): 파일이나 표준 입력의 줄 수, 단어 수, 바이트 수를 세어준다.
wc file.txt         # 줄, 단어, 바이트 수 모두 출력
wc -l file.txt      # 줄 수만 출력
wc -w file.txt      # 단어 수만 출력
wc -c file.txt      # 바이트 수만 출력
wc < file.txt       # 표준 입력으로 파일 내용 전달

  • grep(Global Regular Expression Print) : 파일이나 표준 입력에서 특정 패턴(문자열)을 검색해서 그 줄을 출력한다.
grep "error" log.txt        # log.txt에서 "error"가 포함된 줄만 출력
grep -i "error" log.txt     # 대소문자 구분 없이 검색
grep -n "error" log.txt     # 해당 줄 번호와 함께 출력
grep "error" *.log          # 여러 파일에서 검색

  • sort : 파일이나 표준 입력의 내용을 정렬한다.(기본은 알파벳 순)
sort names.txt          # 알파벳 순서로 정렬
sort -r names.txt       # 역순(내림차순) 정렬
sort -n numbers.txt     # 숫자 순서로 정렬
sort < file.txt         # 표준 입력에서 받아 정렬

  • 세 명령어 조합 예시
# log.txt에서 "error"가 들어간 줄을 찾아 정렬하고, 그 줄 개수를 셈
grep "error" log.txt | sort | wc -l

리다이렉션

표준 입출력(Standard Stream)

프로그램에서 표준 스트림은 실행을 시작할 때 컴퓨터 프로그램/환경 사이 미리 연결된 I/O 및 출력 통신 채널이다.
즉, 프로그램이 실행될 때, 운영체제는 미리 입력과 출력을 처리할 수 있는 통로(채널)를 만들어 준다. 이 통로를 표준 스트림이라 하며 in, out, error을 다루는 총 3개의 스트림이 있다.

  • 표준 입력 스트림(Standard Input Stream): stdin
  • 표준 출력 스트림(Standard Output Stream): stdout
  • 오류 출력 스트림(Standard Error Stream) : stderr

참고 사이트 : Linux man-pages : tdin, stdout, stderr - standard I/O streams
참고 사이트 : 티스토리 - Linux Kernel: 스트림이란?


리다이렉션(redirection)

표준 입출력의 흐름을 바꿔주는 것이다.
in -> out으로 들어가던 것을 out <- in으로 바꿔준다던지,
in -> out이던 결과를 다른 in에 넣는다던지 입출력 방향을 제어할 수 있게 하는 것이다.

  • 출력을 화면이 아닌, 파일에 넣어 저장할 때 등 사용한다.
  • a > b : a를 b에 입력으로 넣겠다는 의미이다.
  • a < b : b를 a의 입력으로 넣겠다는 의미이다.
  • a >> b : 기존 파일 b의 끝에 a의 출력 결과를 넣겠다는 의미이다.
  • a << b : 기존 파일 a의 끝에 b의 출력 결과를 넣겠다는 의미이다.

리다이렉션 예시 (표준 -> 파일 입력 예시)

//파일로 저장하기 전
ls -al

//파일(b.txt)로 해당 결과를 저장 , 다시 결과 확인
ls -al > b.txt
ls -al

//b.txt에 있는 내용 확인
cat b.txt

-> 처음에 ls -al 했던 내용이 b.txt에 똑같이 들어가 저장된 것을 확인할 수 있다.


리다이렉션 예시 (파일 -> 표준 입력 예시)

  • 위에는 표준을 파일에 입력으로 넣는 예시였고, 이제는 반대로 파일에 있는 것을 표준에 넣을 수 있다.
# file.txt 내용을 표준 입력으로 wc(단어·줄·바이트 수 세기) 명령어에 전달
wc < file.txt

# file.txt 내용을 표준 입력으로 sort 명령어에 전달 (정렬)
sort < file.txt

# file.txt 내용을 표준 입력으로 grep 명령어에 전달 (특정 단어 찾기)
grep "error" < file.txt
# file.txt 내용을 표준 입력으로 wc(단어·줄·바이트 수 세기) 명령어에 전달
wc < file.txt


# file.txt 내용을 표준 입력으로 sort 명령어에 전달 (정렬)
sort < file.txt


# file.txt 내용을 표준 입력으로 grep 명령어에 전달 (특정 단어 찾기)
grep "error" < file.txt

  • file.txt에 "error"라는 내용은 없으니 결과가 안 나오고,
    "b.txt"라는 내용은 존재하여 해당 줄이 결과로 반환되었다.

리다이렉션 예시 (기존 파일의 끝에 표준의 결과를 추가)

#wc < file.txt의 결과는 //11	92		660. -> 이 결과를 result.txt의 끝에 저장



파이프(pipe)

파이프는 한 명령어의 출력(stdout) 을 다른 명령어의 입력(stdin) 으로 바로 전달하는 기능이다.

  • '|' 기호를 사용한다.
# 명령어 1 -> 명령어 2
명령어1 | 명령어2

파이프 명령어 예시

# 현재 디렉토리 파일 목록 중에서 'txt' 포함된 줄만 보기
ls -al | grep "txt"

# log.txt에서 "error"가 들어간 줄의 개수 세기
grep "error" log.txt | wc -l

# /etc/passwd 파일에서 홈 디렉토리 경로 부분만 정렬하여 출력
cut -d: -f6 /etc/passwd | sort

# 현재 실행 중인 프로세스 중에서 ssh 관련 프로세스만 출력
ps aux | grep "ssh"

파이프 명령어 활용

# → HTTP 상태 코드 200만 필터링 → 정렬 → 중복 제거 후 개수 표시 → 결과를 내림차순 정렬
cat access.log | grep "200" | sort | uniq -c | sort -nr

해당 글은 다음 강의의 내용을 참고한 글임을 밝힙니다. 자세한 내용은 다음 강의에서 확인해볼 수 있습니다.
인프런, 잔재미 코딩, ⌜풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, flask 배포) [풀스택 Part3]⌟

profile
정도를 걷는 엔지니어

0개의 댓글