리눅스에서 프로그램은 보통 3개의 표준 스트림인 stdin, stdout, stderr 를 자동으로 열게된다.
리다이렉션은 이러한 표준 스트림의 흐름을 바꿔 파일로 표준 입/출력 할 수 있도록 한다. 리다이렉션을 쓰고 싶다면 기호인 > 혹은 < 를 사용한다.
$ps aux > ps. txt
#명령어 > 파일
위와 같이 입력하게 되면, ps aux 명령의 출력 결과를 ps. txt 파일에 저장하게 된다. 좀더 상세하게 설명하면 ps aux 의 출력 스트림을 ps.txt 라는 파일로 전환하여 저장하라는 것이다.
반대의 경우도 가능하다.
$head < ps.txt
#명령어 < 파일
head 명령은 파일의 처음 부분을 설명한 라인(line)만큼 출력하는 명령어이며, 따로 줄 수를 정하지 않으면 기본적으로 10줄이 출력된다.
조금 더 응용하자면
$ head < ps.txt > sample.txt
# 명령어 1 < 들어오는 파일 > 나가는 파일
위의 코드를 설명하자면.
1. ps.txt 의 내용을 head 명령의 입력스트림으로 전환하여 전송.
2. head 명령은 입력 받은 ps.txt 의 내용에서 처음 10줄만 출력.
3. head 명령의 출력 스트림은 sample.txt 파일에 연결한다.
4. head 명령의 출력 스트림의 결과를 sample.txt 파일에 저장한다.
리다이렉션 기호 | 방향 | 의미 |
---|---|---|
> | 표준 출력 | 명령의 결과를 파일로 저장 (기존 파일 덮어씀) |
>> | 표준 출력(append) | 명령의 결과를 기존 파일에 추가 |
< | 표준 입력 | 파일의 데이터를 명령에 입력 |
📌 파이프는 어떤 명령의 결과를 다시 어떤 명령의 입력으로 받아야 할 때 사용된다. 프로세스 1 의 출력 스트림을 프로세스 2 의 입력 스트림으로 사용할때 파이프 기호 | 를 사용하여 연결한다.
$ process1 | process2
예를 들어 터미널에서 /bin 으로 이동 후 ls -l 명령을 타이핑 하면 많은 파일이 나타나는데 이 중에서 z
sh 라는 문자열만 포함이 된 것을 보려고 한다면? grap 명령어와의 조합으로 가능하다.
$ls -l | grep zsh