리눅스에서는 cat같은 명령어를 실행하면 자동으로 표준 입출력 채널이 열린다.
채널 : 데이터가 흐르는 길
표준 입력 stdin : 프로그램에 데이터를 입력하는 채널.
키보드를 통한 입력이 대표적이다.
표준 출력 stdout : 프로그램의 실행 결과가 출력되는 채널.
단말 디스플레이에 출력된다.
표준 에러 출력 stderr : 프로그램 실행 중 발생하는 에러 메시지가 출력되는 채널.
보통 표준 출력과 동일하게 단말 디스플레이에 출력된다.

명령어는 단순히 표준 입력을 읽어 결과를 표준 출력으로 출력한다.
입력은 키보드, 파일이 될 수 있다.
출력은 모니터, 프린터, 파일이 될 수 있다.
명령어의 입출력을 표준 입출력으로 추상화한다.
명령어 내부에서는 입출력을 신경쓰지 않고 사용자가 지정할 수 있다.
redirection : 표준 입출력을 어디로 할 지 변경하는 것이다.키보드 대신 파일을 표준 입력으로 연결할 수 있다.
cat < /etc/crontab : crontab 파일을 표준 입력으로 연결하여 cat 명령어에 전달한다. 파일의 내용이 그대로 출력된다.
cat /etc/crontab : 인자로 파일을 지정한 경우
두 방식의 출력 결과는 같다.
인자로 파일을 지정하는 것은 사용자의 편의를 위해 제공하는 방식이다.
표준 입력을 읽는 방식을 지원하도록 구현하는 것이 좋다.
ls -l / > list.txt : 실행 결과를 list.txt에 리다이렉션한다.
cat list.txt로 내용을 확인할 수 있다.리다이렉션 된 파일은 list.txt 자동적으로 만들어진다.
표준 에러 출력은 표준 출력과 동일한 디스플레이에 연결되어있어 표준 출력에 의한 출력인지, 표준 에러 출력에 의한 출력인지 구분이 어렵다.
표준 출력을 파일에 리다이렉션하여 구분할 수 있다.
ls -l f1 > list.txt : 표준 출력을 list.txt 파일에 리다이렉션 한다.에러 메시지가 화면에 출력된다.
표준 출력과 에러 출력이 별도의 채널을 사용하기 때문이다.

에러 출력도 리다이렉션해준다.
2>
ls -l f1 2> error.txt : 표준 에러 출력을 error.txt 파일에 리다이렉션 한다.
에러가 콘솔에 출력되지 않고 파일에 저장된다.
명령어 실행 결과와 에러 메시지를 별도로 다루기 위해 존재한다.
ls -l f1 > list.txt 2> error.txt : stdout과 stderr을 각 다른 파일에 리다이렉션 한다.
ls -l f1 > result.txt 2>&1 : stdout과 stderr을 한 파일인 result.txt에 리다이렉션한다.
표준 출력을 리다이렉션 후 2>&1 을 붙인다.
&1 : 표준 출력을 의미한다.
&0 : 표준 입력
&2 : 표준 에러 출력
이미 존재하는 파일에 리다이렉션하면 덮어쓰게 된다.
> 대신 >> 을 사용하면 덮어쓰지 않고 파일 끝에 기록한다.
set -o noclobber : 덮어쓰기를 방지한다.

/dev/null : 특수 파일. 에러 확인으로 사용한다.
입력 파일로 지정해도 아무것도 입력되지 않는다.
출력 파일로 지정해도 아무것도 기록되지 않는다.
표준 에러 출력만 콘솔에 출력된다.
표준 출력 양이 많거나 에러만 확인할 때 사용한다.
불필요한 에러가 많은 경우 이쪽으로 리다이렉션 하기도 한다.
ls /bin > /dev/null 2>&1 : 모든 출력을 null에 한다. 명령어의 실행 시간을 확인할 때 사용한다.
여러 명령어를 연결하려면 한 명령어의 결과를 다른 명령어에 입력할 수 있어야 한다.
명령어 결과가 많을 때 사용한다.
파이프라인 : 명령어의 표준 출력을 다른 명령어의 표준 입력으로 연결한다.
명령어 실행 결과를 파일에 리다이렉션 후 less로 조회한다. --> 비효율적
ls -l / > file.txtless file.txtls -l / | less : ls -l의 결과를 less의 입력으로 전달한다. 한 페이지씩 보여준다.
history | less : 페이지 단위로 읽을 수 있다.
ls -l /etc | cat -n | less : 결과를 cat 행 번호와 함께 출력하고 한 페이지씩 표시한다.
기본적으로 표준 출력만 다음 명령어에 연결한다.
에러 출력도 보내려면 2>&1 을 사용하여 표준 출력과 동일한 곳으로 보내야 한다.
ls -l / /etc 2>&1 | less : 두 출력 모두 less로 넘겨준다.
필터 명령어 : 표준 입력을 받아 표준 출력으로 출력하는 명령어이다.
head : head /etc/crontab
지정한 파일의 첫 행부터 지정한 행까지 출력한다.
기본값으로 10행을 출력한다.
입력 파일을 지정하지 않으면 표준 입력을 받는다.
history | head : history의 결과를 head에 넘긴다. 10행이 출력된다.

cat : 입력 내용을 그대로 출력
head : 파일 앞부분을 출력
tail : 파일 뒷부분을 출력
grep : 검색 패턴에 일치하는 행을 출력
sort : 정렬
uniq : 중복된 행을 제거하여 출력
tac : 역순으로 출력
wc : 행 수나 바이트 수를 출력
du -b /bin/* : /bin 디렉터리 아래의 모든 파일의 크기를 출력한다.
du -b /bin/* | sort -n : 파일 크기가 작은 것부터 출력한다.

du -b /bin/* | sort -n | tac : 파일 크기가 큰 것부터 출력한다.

du -b /bin/* | sort -n | tac | head -n 5 : 크기가 큰 5개 파일만 출력.
