일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 도커컴포즈
- server
- minikube mac 설치
- zshrc
- docker-compose
- terraform 문법
- test
- customize
- Shell
- 파이썬
- iterm2 shortcuts
- AWS
- iterm2 단축키
- BIG-O NOTATION
- sftp란
- nosql
- python
- DynamoDB
- minikube 설치 방법
- 테라폼 문법
- terraform
- docker
- Django
- 컨테이너
- linux
- Bash
- 도커
- 테라폼 기본 문법
- zsh
- 빅오노테이션
- Today
- Total
sklass의 s-class 프로그래밍 blog
linux tee 명령어 본문
개요
tee는 표준 입력(standard input)에서 읽어서 표준 출력(standard output)과 파일에 쓰는 명령어입니다.
다음 명령어를 실행하면 OUTFILE에 hello라는 내용이 기록됩니다. (단, 이 명령어는 OUTFILE에 hello라는 내용이 덮어씌어지는 것으로, 전에 있던 내용물은 사라지게 됩니다.)
$ echo "hello" | tee OUTFILE
다음 명령어는 OUTFILE을 NEWFILE로 복사합니다.
$ cat OUTFILE | tee NEWFILE
echo 사용시 shell의 append 연산자인 >> 를 사용하려면, -a 나 --append 옵션을 사용하면 됩니다.
$ echo "hello" | tee -a OUTFILE
표준 출력에는 쓰지 않으려면 tee의 맨 마지막에 널 디바이스인 /dev/null을 연결해 주면 표준 출력 장치(예: 터미널)에는 표시되지 않습니다.
$ echo "hello world" | tee -a OUTFILE >/dev/null
왜 tee 를 써야 하는가?
tee 를 사용하지 않고 아래와 같이 echo 의 IO redirection 연산자를 사용하여도 파일에 append 할 수 있습니다.
$ echo "hello world" >> OUTFILE
그렇다면 왜 tee를 쓰는 걸까요?
답은 권한에 대한 문제를 보면 알 수 있습니다.
shell에서 출력을 redirection 할 경우, sudo를 사용해도 일반 사용자로 전환되므로 root 권한으로 파일에 쓰거나 내용 추가가 필요한 경우 제대로 작동하지 않습니다.
그래서 아래와 같이 root 소유인 파일에 sudo echo 를 실행하면 "permsission denied" 에러가 나고 내용 추가에 실패합니다.
$ sudo echo "hello" >> /etc/zshrc
>> zsh: permission denied: zshrc
이럴 경우 echo를 받아서 sudo tee를 하면 정상적으로 동작합니다.
$ echo "hello" | sudo tee -a zshrc
이와 같이 tee는 shell script에서 root 권한으로 특정 파일을 쓰거나 append 할 때 주로 사용합니다.
다수의 문장 추가할 경우
$ tee -a multiple.txt <<EOF
Hello World.
It is such a beautiful day!
EOF
'shell' 카테고리의 다른 글
iTerm2 단축키 정리 (0) | 2021.12.20 |
---|---|
rsync (0) | 2021.10.12 |
Visual Studio Code에서 code 명령어 영구적으로 설정하는 법(MacOS) (0) | 2021.08.21 |
.bash_profile VS .zshrc (0) | 2021.08.21 |
Interactive Shell & Login Shell (0) | 2021.08.21 |