리눅스 tee 명령어는 한 마디로, 입력을 받으면 표준 출력에도 입력 받은 것을 출력하고, 파일로도 출력하는 명령어입니다.
리눅스 tee 명령어
먼저, 설명과 실습에서 쓸 옵션 정도만 보고 넘어가겠습니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/08/li_te1.png)
설명을 보면, standard input에서 읽어서, standard output에 출력하고 파일들에도 출력한다고 되어 있습니다. 이를 그림으로 그리면 아래와 같습니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/08/li_te10.png)
표준 입력으로부터 1을 입력받습니다. 그러면
- 표준 출력으로 1이 출력되고
- 지정한 파일에도 1이 출력됩니다.
이 명령어가 어떤 일을 하는 것인지 이해가 되셨다면 이 글에서 쓸 옵션 하나만 더 보겠습니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/08/li_te9.png)
-a 옵션을 주면, 파일에 내용을 덮어쓰지 않고, 파일 뒤에 결과를 붙이게 됩니다. 밑에 후술하도록 하겠습니다. 이제 예제를 보겠습니다.
tee 명령어 예제
그러면 예제 몇 개를 보겠습니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/08/li_te2.png)
먼저, echo 1과 tee 1.txt를 pipe로 연결하였습니다. 이것은 무엇을 하는 것일까요? 일단, echo 1은 1을 화면에 출력하는 명령어입니다. 이를 tee 명령어와 pipe로 연결했습니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/08/li_te11.png)
echo 1은 오류가 없었으므로, 표준 출력에 1이 쓰여집니다. 이것을 tee 1.txt가 표준 입력으로 받습니다. 다음에, 이 명령어는
- 표준 출력으로도 입력받은 1을 출력하고
- 1.txt에도 출력하게 됩니다.
화면에는 1이 출력되었으니, 1.txt를 볼까요?
![](https://codingdog.pe.kr/wp-content/uploads/2023/08/li_te3.png)
1.txt에 1이 출력되어 있습니다. 이는, tee가 표준 출력 뿐만이 아니라, 파일 1.txt에도 1을 출력했기 때문입니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/08/li_te4.png)
이제 echo 2와 tee 1.txt를 pipe로 연결해 보겠습니다. 그러면 어떻게 될까요?
![](https://codingdog.pe.kr/wp-content/uploads/2023/08/li_te12.png)
echo 2의 출력 결과는 2입니다. 이것을 후행 명령어 tee가 받아요. 그러면 후행 명령어 입장에서는
- 2가 표준 입력이 됩니다.
- 이 명령어는 표준 출력과 1.txt에 2를 쓰게 되겠네요.
따라서, 해당 명령어를 수행하고 cat 1.txt를 수행하면 2가 출력됩니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/08/li_te5.png)
-a 옵션을 쓰면 어떨까요? echo 3의 결과를 후행 명령어가 표준 입력으로 받았으므로, 1.txt에는 3이 추가될 겁니다. 그런데, -a가 append 이므로, 덮어쓰는 것이 아니라, 기존에 있던 내용에 추가합니다. 기존에는 2만 있었기 때문에, cat 1.txt를 수행하면 2와 3이 출력되게 됩니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/08/li_te6.png)
파일 여러 개에 출력할 수도 있습니다. tee 옵션 뒤에 출력 결과를 저장할 파일들을 여러 개 두면 됩니다. 위 예제는 1.txt와 2.txt에 표준 입력으로 들어온 1을 출력합니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/08/li_te13.png)
2>&1과 tee를 섞어 보았습니다. 위 명령어는 무엇을 의미할까요? 2는 표준 에러, 1은 표준 출력을 의미합니다. 2>&1은 표준 에러를 표준 출력으로 보내라는 의미입니다.
- 디렉토리 c가 없었습니다.
- 표준 에러에 c가 없다는 내용이 있을 겁니다.
- 표준 에러를 표준 출력으로 보냈습니다.
- 표준 출력에 디렉토리 c가 없다는 내용이 들어갑니다.
- 이제 디렉토리 c가 없다는 내용이 tee에 들어갔네요.
따라서, cat 1.txt를 하면, 그런 파일이나 디렉토리가 없습니다: c 라는 에러 메세지가 출력됩니다. 여기까지 리눅스 명령어 tee에 대한 설명이였습니다. 2>&1은 조금 어려웠는데요. 리다이렉션 고급에서 따로 다루도록 하겠습니다.