표준 스트림에서 스트림(Stream)이란, 프로그램을 드나드는 데이터를 흐름으로 표현한 단위입니다.
과거에 프로그램의 입출력은 운영체제 쪽과 얽혀 어려운 작업이었습니다.
환경설정 정보, 내부 파일 목록 정보를 일일이 지정해주어야 했고, 하드웨어 관련 설정을 세세히 해줘야 했기 때문입니다.
유닉스에서는 장치를 추상화해서 각 장치를 파일처럼 다루는 것으로 이러한 문제를 해결했습니다. 다양한 하드웨어 장치별로 입력과 출력을 위한 설치 작업을 따로 하는 것이 아니라 파일을 읽고 쓰는 한 가지 작업으로 통일하며, 이 파일에 들어오고 나가는 데이터의 흐름을 스트림으로 정의 하였습니다. 이 때 일반적으로 동작하는 프로그램은 실행 시, 세 개의 스트림이 자동으로 열리고, 이를 표준 스트림이라고 부릅니다.
실제로 리눅스의 /dev 디렉토리에서 위 세개의 표준 스트림을 앞서 언급한 파일 형태로 담고 있습니다.
리눅스에서 프로그램은 보통 세 개의 표준 스트림을 자동으로 열게 됩니다.
리다이렉션을 이러한 표준 스트림의 흐름을 바꿔 파일로 표준 입/출력을 할 수 있도록 합니다.
리다이렉션을 쓰고 싶다면 기호인 > 혹은 < 을 사용합니다.
- ps aux > ps.txt
ps aux명령의출력을ps.txt파일에 저장합니다.- head < ps.txt
head명령의입력을ps.txt파일에서 가져옵니다.- head < ps.txt > sample.txt
head명령의입력을ps.txt파일에서 가져오고,sample.txt파일에 저장합니다.
| 리다이렉션 기호 | 방향 | 의미 |
|---|---|---|
| > | 표준 출력 | 명령의 결과를 파일로 저장 (기존 파일 덮어씀) |
| >> | 표준 출력(append) | 명령의 결과를 기존 파일에 추가 |
| < | 표준 입력 | 파일의 데이터를 명령에 입력 |
파이프는 어떤 명령의 결과를 다시 어떤 명령의 입력으로 받아야 할 때 사용된다.
프로세스1의 출력 스트림을 프로세스2의 입력 스트림으로 사용할 때 파이프 기호 |를 사용하여 아래와 같은 형식으로 작성합니다.
process1 | process2
예로 들어 /bin 에 있는 디렉토리에서 ls -l의 명령어로 출력한 리스트를 grep ssh의 명령어로 ssh 단어가 포함된 것을 찾을 때, ls -l | grep ssh 를 이용하면 ssh 단어가 포함된 ls -l 리스트를 출력하게 된다.
wc -l : --lines -Print the number of lines.
wc -w : --words -Print the number of words.
wc -m : --chars -Print the number of characters.
wc -c : --bytes -Print the number of bytes.
wc -L : --max-line-length -Print the length of the longest line.