이 작업의 차이점은 무엇입니까?
echo "hahaha" >> file1
그리고
echo "hahaha" |tee -a file1
?
예, 보호된 파일에는 aith 에도 쓸 수 없다는 것을 알았습니다 sudo echo
. 하지만 가능하다면 쓸 수도 있습니다 sudo tee
. 감사해요.
답변1
데이터 의미에는 차이가 없습니다파일에echo
성공적으로 실행되고 현재 사용자가 파일을 쓸 수 있으면 tee
동일합니다 .
이 tee
명령은 추가 출력도 생성합니다.그것은표준 출력에는 파일에도 추가될 텍스트가 표시됩니다. 첫 번째 명령에서는 이런 일이 발생하지 않습니다.
또 다른 차이점은 파일이아니요라고 쓰여지면 리디렉션이 포함된 첫 번째 명령은 실행되지도 않습니다 echo
.echo
회의tee
파일에 쓸 때 두 번째 명령 실행이 실패합니다( tee
단, 터미널에는 여전히 텍스트가 생성됩니다).
출력을 생성하는 일부 장기 실행 프로세스를 실행하는 경우 이는 중요할 수 있습니다.
long_running_thing >>file
long_running_thing
쓰기 가능하지 않으면 file
시작조차 되지 않습니다.
long_running_thing | tee -a file
long_running_thing
이것은 끝까지 실행 되고 실행되지만 file
쓰기 가능하지 않은 경우 출력이 저장되지 않습니다(그리고 출력은 터미널에서 추가로 기록됩니다 tee
).
질문 끝부분에서 힌트를 주셨는데 다음으로 주목해야 할 점은
sudo echo hello >>file
file
쓸 수 없으면 효과가 없습니다.현재의사용자. 리디렉션이 처리되기 때문입니다.앞으로명령이 실행됩니다(위 참조).
루트가 소유한 파일에 추가하려면 다음을 사용하십시오.
echo hello | sudo tee -a file
여기서는 tee
루트로 실행 중입니다. 루트로 실행할 필요는 없지만 echo
현재 사용자가 실제로 파일을 쓰는 유틸리티를 소유하지 않은 경우 루트(또는 파일을 소유한 사용자)로 실행해야 합니다.
또 다른 가능성은 다음을 사용하는 것입니다.
sudo sh -c 'echo hello >>file'
또는
echo hello | sudo sh -c 'cat >>file'
이렇게 하면 리디렉션을 사용하여 파일에 데이터가 추가되지만 이 경우 리디렉션을 수행하는 셸은 루트로 실행되므로 제한적인 권한/소유권으로 인해 파일을 추가/생성할 때 실패하지 않습니다(여전히 실패할 수 있음) file
. 디렉토리 이름).
답변2
티셔츠는 주로출력을 여러 파일로 리디렉션복사 명령을 별도로 호출하는 대신.
예를 들어:
wc -l | tee -a file1.txt file2.txt file3.txt
전체 프로세스가 아닌 tee 명령만으로 권한을 승격할 수 있습니다. >> 이는 승격된 권한이 시작되기 전에 시작됩니다.