echo를 사용할 때 tee와 >>의 차이점이 있나요?

echo를 사용할 때 tee와 >>의 차이점이 있나요?

이 작업의 차이점은 무엇입니까?

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 명령만으로 권한을 승격할 수 있습니다. >> 이는 승격된 권한이 시작되기 전에 시작됩니다.

관련 정보