- 표준 입력(stdin): 프로그램에 데이터를 입력하는 채널
- 표준 출력(stdout): 프로그램의 실행 결과가 출력되는 채널
- 표준 에러 출력(stderr): 프로그램 실행 중 발생하는 에러 메시지가 출력되는 채널
- 리다이렉션: 표준 입출력을 어디로 연결할지 변경하는 것
표준 입력의 리다이렉션
- cat 명령어를 실행할 때 인자를 지정하지 않으면 키보드로 입력될 때까지 커서가 정지됨
→ cat 명령어가 표준 입력으로 입력한 내용을 읽어서 그대로 표준 출력에 출력하는 명령어이기 때문
→ 이 방식을 지원하도록 구현하는 것이 좋음
$ cat < /etc/crontab # 입력 리다이렉션 사용 (/etc/crontab 파일을 cat 명령어에 전달)
$ cat /etc/crontab # 인자로 파일 지정
표준 출력의 리다이렉션
$ ls -l > list.txt # 출력 리다이렉션 사용 (명령어의 실행 결과를 파일에 저장)
표준 에러 출력
- 표준 출력을 파일에 리다이렉션해도 에러 메시지는 콘솔에 출력됨
→ 표준 출력과 표준 에러 출력이 별도의 채널을 사용하기 때문
$ ls /xxxxx > list.txt
ls: '/xxxxx'에 접근할 수 없습니다: 그런 파일이나 디렉터리가 없습니다
$ ls /xxxxx 2> error.txt # 에러 메시지를 파일에 저장
# 콘솔에 아무것도 출력되지 않음
$ ls /xxxxx > list.txt 2> error.txt # 표준 출력과 에러 출력을 각각 다른 파일에 리다이렉션
# 콘솔에 아무것도 출력되지 않음
표준 출력과 표준 에러 출력을 함께 리다이렉션
$ ls /xxxxx > result.txt 2>&1
- 표준 입출력에 매핑된 숫자
입출력 채널 | 숫자 |
표준 입력 | 0 |
표준 출력 | 1 |
표준 에러 출력 | 2 |
- 이미 존재하는 파일에 표준 출력을 리다이렉션하면 기존 파일을 지우고 덮어쓰게 되므로 방지해야 함
# 1. >> 사용
$ echo 123 > number.txt
$ echo 456 >> number.txt
# 2. noclobber 지정
$ set -o noclobber
$ ls -l > list.txt
-bash: list.txt: 이미 있는 파일을 덮어쓸 수 없음
/dev/null
- 입출력 파일로 지정해도 아무 내용도 입출력 되지 않는 특수 파일
- 표준 입력으로 /dev/null을 리다이렉션하면 아무 내용도 입력되지 않아 아무것도 출력되지 않음
- 표준 출력을 /dev/null로 리다이렉션하면 표준 출력이 콘솔에 출력되지 않음
- 표준 에러는 출력되므로 표준 에러 출력만 확인할 때 자주 사용하는 방식
- 확인하지 않아도 되는 에러 메시지가 너무 많이 출력되는 경우 표준 에러 출력을 /dev/null로 리다이렉션 하기도 함
파이프라인
- 파이프라인을 사용하면 명령어의 표준 출력을 다른 명령어의 표준 입력으로 연결 가능
- <명령어 1> | <명령어 2> | <명령어 3> … → 첫 번째 명령어의 표준 출력이 두 번째 명령어의 표준 입력으로 전달
# 파이프라인 사용 전
$ ls -l / > temp_list.txt
$ less temp_list.txt
# 파이프라인 사용 후
$ ls -l / | less
- 기본적으로 표준 출력만 다음 명령어에 연결하며, 표준 에러 출력도 함께 보내려면 2>&1 사용
$ ls -l / /xxxxx 2>&1 | less
필터 명령어
- 표준 입력을 받아들여 표준 출력으로 출력하는 명령어 e.g. cat
$ head /etc/crontab # 출력할 행 수 지정하지 않으면 첫 10행 출력
$ history | head # 명령어 이력의 첫 10행만 출력
- 대표적인 필터 명령어
명령어 | 역할 |
cat | 입력 내용을 그대로 출력 |
head | 파일 앞부분을 출력 |
tail | 파일 뒷부분을 출력 |
grep | 검색 패턴에 일치하는 행을 출력 |
sort | 정렬 |
uniq | 중복된 행을 제거하여 출력 |
tac | 역순으로 출력 |
wc | 행 수나 바이트 수를 출력 |
- 필터 명령어는 파이프라인을 사용하여 다른 명령어와 조합할 때 진가가 발휘됨
# /bin 디렉터리 아래의 모든 파일의 크기(바이트) 출력
$ du -b /bin/*
# 결과를 크기 순으로 정렬하여 출력
$ du -b /bin/* | sort -n
# 파일 크기가 큰 순으로 정렬하여 출력
$ du -b /bin/* | sort -n | tac
# 파일 크기가 큰 상위 5개의 파일만 출력
$ du -b /bin/* | sort -n | tac | head -n 5
'books > Linux' 카테고리의 다른 글
[모두의 리눅스] 셸 스크립트 (4) 검색 명령어 (0) | 2024.08.09 |
---|---|
[모두의 리눅스] 셸 스크립트 (3) IFS (0) | 2024.08.09 |
[모두의 리눅스] 셸 스크립트 (1) (0) | 2024.08.08 |
[모두의 리눅스] 프로세스와 잡 (0) | 2024.07.30 |
[모두의 리눅스] 퍼미션과 슈퍼 사용자 (0) | 2024.07.30 |