1. 표준 입력, 출력, 에러
code | 이름 | 용도 | 표준장치 |
0 | stdin(표준 입력,standard input) | 명령어에 입력 내용을 가져옴 | 키보드 |
1 | stdout(표준 출력) | 명령어에서 결과 출력 | 화면 |
2 | stderr(표준 에러) | 명령어에서 에러메시지 출력 | 화면 |
표준 입력(stdin) : 표준 입력 장치에서 입력 내용을 가져옴
표준 출력(stdout) : 명령이나 프로그램 등의 실행 결과를 표준 출력 장치에 전송
표준 에러(stderr) : 명령이나 프로그램 등의 상태 및 오류 메시지를 표준 에러 장치에 전송
2. 리다이렉션(redirection)
1) 입출력 리다이렉션
- 일반적인 입력, 출력을 사용하지 않고 파일로 입출력 변경
2) 표준 입력 리다이렉션
- < 연산자 사용
- cat 명령어를 사용하는 것과 동일한 결과를 냄
program < file_name # file_name의 파일 내용을 program의 표준 입력으로 사용하겠다 라는 의미
# ex)
echo "표준 입력 재지정" > aaa.txt # "표준 입력 재지정" 문자를 echo를 통해 표준 출력하고,
# 출력된 문자를 aaa.txt 파일을 생성하고 저장 (출력 재지정)
ls aaa.txt # 디렉토리에 파일 생성됬는지 확인
aaa.txt
cat < aaa.txt # 입력 재지정 == cat aaa.txt와 같다고 보면 된다.
# 출력값 : 표준 입력 재지정
3) 표준 출력 리다이렉션
- > 연산자, >> 연산자 등을 사용
- > 연산자 : 파일을 덮어써서 출력값을 저장
- >> 연산자 : 파일에 이어쓰면서 출력값을 저장
program > file_name # program에서 출력하는 것을 file_name이라는 파일에 새로 기록
program >> file_name # program에서 출력하는 것을 file_name이라는 파일에 이어서 기록
# ex)
ls
# 출력값 : 다운로드 문서 바탕화면
ls > list_output.txt # 표준 출력값을 list_output.txt에 저장
cat list_output.txt
# 출력값 : 다운로드
# 문서
# 바탕화면
ls >> list_output.txt
# 출력값 : 다운로드
# 문서
# 바탕화면
# list_output.txt
# 다운로드
# 문서
# 바탕화면
- 그 밖의 리다이렉션
명령 >& 파일명 # 명령이 실행된 표준 출력의 결과와 에러를 파일로 출력
명령 >>& 파일명 # 명령이 실행된 표준 출력의 결과와 에러를 파일로 덧붙여 출력
명령 >! 파일명 # 파일의 존재 유무와 상관없이 생성하고 명령이 실행된 표준 출력의 결과를 파일로 출력
명령 >&! 파일명 # 파일의 존재 유무와 상관없이 생성하고 명령이 실행된 표준 출력의 결과와 에러를 파일로 출력
명령 >>! 파일명 # 파일의 존재 유무와 상관없이 생성하고 파일에 덧붙여 출력
명령 >>&! 파일명 # 파일의 존재 유무와 상관없이 생성하고 명령이 실행된 표준 출력의 결과와 에러를 파일에 덧붙여 출력
4) 표준 에러 리다이렉션
- 2> 연산자 사용
- 앞의 리다이렉션들에서도 숫자를 붙여도 되는데 0, 1은 기본값이어서 생략가능
# nullfile이 디렉토리에 없는 경우
ls -l nullfile 2> err.txt # 그러한 실패를 표준에러(2) 지정을 통해 err.txt파일에 저장한다
5) 리다이렉션을 통한 Copy
echo "hello" > file.txt # hello문자열을 file.txt에 저장
cat < file.txt > file_copied.txt # file.txt내용을 cat하고 그걸 출력리다이렉션하여 file_copied.txt에 저장
cat file_copied.txt # 결국 복사를 한것 과 같아진다.
# 출력값 : hello
3. 파이프
- 앞의 명령어의 표준 출력을 다음 명령어의 표준입력으로 사용
- | 기호 : 명령어와 명령어의 연결
cat /etc/passwd | grep "root" # grep "root" /etc/passwd와 같은 결과
# /etc/passwd의 내용이 grep의 입력값으로 받아 root를 필터링
# 디렉토리 개수 확인하기
ll | grep "^d" | wc -l
# ll = ls -l : List 형태로 출력
# grep "^d" : d로 시작하는 행 필터링 (행의 앞글자 d는 directory를 의미)
# wc -l은 행의 개수를 출력
# ll로 디렉토리 파일들을 출력하고, 그 출력 내용을 d로 시작되는 파일만 필터링하고, 필터링 된 내용의 개수를 출력