Linux에서 파일로 tail 프로그램 출력

Linux에서 파일로 tail 프로그램 출력

아래 형식을 사용하여 화면 출력을 파일로 리디렉션할 수 있다는 것을 알고 있습니다.

$ your_program > /tmp/output.txt

그러나 아래 명령을 사용하면 다음과 같이 나타납니다."-bash: /home/user/errors.txt: 권한이 거부되었습니다."

sudo tail /var/log/apache2/error.log > ~/errors.txt

이 출력을 작동시키는 방법을 알 수 있습니까? ~/errors.txt가 존재하지 않습니다. 리디렉션 명령을 사용하기 전에 먼저 이 txt 파일을 생성해야 합니까?

답변1

파이프 뒤에서 sudo가 작동하지 않습니다. 왜 집에 쓸 수 없는지 모르겠습니다. 파일이 루트에 속해 있는 것 아닐까요?

 sudo tail /var/log/apache2/error.log | sudo tee ~/errors.txt

어쩌면 파이프 뒤에 다른 사용자가 필요할 수도 있습니다. 물론 기존 파일이 필요하지 않습니다.

답변2

를 작성할 때 sudo somecommand > ~/errors.txt호출하는 sudo(그리고 사용자로 실행되는) 쉘은 리디렉션 및 열기를 수행하는 쉘입니다 ~/errors.txt. 보다쓰기 권한이 없는 파일로 stdout 리디렉션. 일반적으로 이 경우의 문제는 루트가 파일에 쓰기를 원한다는 것입니다. 이를 수행하는 방법은 연결된 질문을 참조하십시오.

여기서는 홈 디렉토리의 파일에 쓸 수 없다는 것이 이상합니다. 이전에 일부 출력을 에 루트로 저장했고 /home/user/errors.txt해당 파일이 이제 존재하고 루트에 속할 가능성이 있습니다 . 파일을 제거합니다. 에 대한 쓰기 권한이 있으면 파일을 제거할 수 있으며 /home/user그런 다음 사용자로 해당 파일을 생성할 수 있습니다.

rm ~/errors.txt
sudo tail /var/log/apache2/error.log > ~/errors.txt

파일이 실제로 존재하지 않으면 홈 디렉터리에 쓰기 권한이 없는 것입니다. 기술적으로 가능하고 실제로 일부 제한된 사용자에게 유용할 때도 있지만 매우 드문 경우입니다.

관련 정보