리눅스에서 파일로 꼬리 프로그램 출력


9

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

$ 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 파일을 먼저 만들어야합니까?


1
입력하면 어떻게됩니까 echo hi > ~/errors.txt? /home/user올바른 홈 디렉토리 입니까 (또는 bash가 어떻게 홈 디렉토리의 위치에 혼란 스럽습니까?)
cjm

user명령을 실행하는 사용자는?
사용자가 알 수 없음

예, 사용자는 명령을 실행하는 사용자입니다.
Xianlin

이는 정상적인 동작입니다 sudo. sudo리디렉션을 허용하지 않습니다. 사람들이 그것을 사용하여 sudoers.conf파일에 포함되지 않은 나쁜 일을 할 수있는 너무 많은 방법 . 대안 sudo bash -c "tail /var/log/apache2/error.log > ~/errors.txt"으로 errors.log의 끝을 홈 디렉토리의 파일에 긁어 내도록 실행할 수 있습니다 .
팀 케네디

답변:


17

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

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

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


그렇습니다, 그것은 효과가
있었습니다

권한 문제와 관련하여 $ HOME에 rootsquash가 NFS 마운트되어 있습니까?
Ansgar Esztermann

$ HOME은 NFS로 마운트되지 않았습니다.
Xianlin

6

당신이 쓸 때 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니다.


'/home/user/errors.txt'를 삭제하고 위의 명령을 사용했습니다. 작동하지 않았지만 여전히 홈 디렉토리에 쓰는 것이 금지되었습니다. 어쨌든 나는 당신이 제공 한 링크가 내 솔루션으로 사용할 수 있다고 생각합니다. 이 게시물의 첫 번째 답변과 동일합니다. 그러나 stdout을 파일로 리디렉션하는 방법에 대한 자세한 설명을 제공했으며 감사합니다.
Xianlin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.