다음 형식을 사용하여 화면 출력을 파일로 리디렉션할 수 있다는 것을 알고 있습니다.
$ 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
. 바라보다쓰기 권한이 없는 파일로 표준 출력을 리디렉션합니다.. 일반적으로 이 경우의 문제는 루트가 파일에 쓰기를 원한다는 것입니다. 이를 수행하는 방법은 링크된 질문을 참조하십시오.
여기서 이상한 점은 홈 디렉터리의 파일에 쓸 수 없다는 것입니다. 이전에 일부 출력을 root 에 파일로 저장했고 /home/user/errors.txt
해당 파일이 이제 존재하고 root에 속할 수 있습니다. 파일을 삭제합니다(쓰기 권한이 있는 경우 이 작업을 수행할 수 /home/user
있으며 그런 다음 사용자로 생성할 수 있습니다).
rm ~/errors.txt
sudo tail /var/log/apache2/error.log > ~/errors.txt
파일이 존재하지 않으면 홈 디렉터리에 쓰기 권한이 없는 것입니다. 기술적으로 가능하고 실제로 일부 제한된 사용자에게 유용할 때도 있지만 이는 매우 드문 일입니다.