리눅스에서 파일로 꼬리 프로그램 출력 : Permission denied”라고

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

$ your_program > /tmp/output.txt

그러나 아래 명령을 사용하면 “-bash : /home/user/errors.txt : Permission denied”라고 표시됩니다.

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

이 출력을 만드는 방법을 알 수 있습니까? ~ / errors.txt가 존재하지 않습니다. redirect 명령을 사용하기 전에이 txt 파일을 먼저 만들어야합니까?



답변

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

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

파이프 뒤에 다른 사용자가 필요할 수 있습니다. 확실히, 당신은 기존 파일이 필요하지 않습니다.


답변

당신이 쓸 때 sudo somecommand > ~/errors.txt, 호출하고 sudo(그리고 당신과 같이 실행중인) 쉘 은 리디렉션과 여는 것을 수행하는 쉘입니다 ~/errors.txt. 쓰기 권한이없는 파일로 stdout 리디렉션을 참조하십시오 . 이 경우 일반적으로 문제는 루트가 파일에 쓰려고한다는 것입니다. 이를 수행하는 방법은 연결된 질문을 참조하십시오.

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

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

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