다음 명령이 있습니다.
find / -name libGL.so.1
"권한 거부"가 포함된 많은 행을 반환합니다. 이 줄을 제외하고 싶었기 때문에 다음을 추가했습니다.
find / -name libGL.so.1 | grep -v 'denied'
그러나 출력은 동일합니다. my grep -v 'denied'
는 Permission denied
. 다양한 변형을 시도하고 grep 튜토리얼을 살펴보았지만 문제를 파악할 수 없습니다. 어떤 제안이 있으십니까?
답변1
이는 관련이 없습니다 grep
. 파이프가 |
표준 출력 스트림을 리디렉션하는 stdout
반면 Permission denied
메시지는 표준 오류 스트림에 있기 때문입니다 stderr
. 입력을 grep 명령으로 파이프하기 위해 결합된 스트림 2>&1
(파일 설명자가 있는 스트림을 2
파일 설명자가 있는 스트림으로 리디렉션) 을 사용하여 원하는 것을 얻을 수 있습니다.1
stderr
stdout
find / -name libGL.so.1 2>&1 | grep -v 'denied'
그러나 보다 일반적인 접근 방식은 stderr
직접 리디렉션하여 완전히 삭제하는 것 입니다./dev/null
find / -name libGL.so.1 2>/dev/null
2>&1 | 대신 |&를 사용하세요.
Bash 매뉴얼 페이지를 보면 다음 소개를 볼 수 있습니다.
사용되는 경우
|&
명령의 표준 오류는 command2의 표준 입력으로 파이프됩니다2>&1 |
.
따라서 STDERR과 STDOUT을 연결하려는 경우 다음 구문을 사용할 수도 있습니다.
find / -name libGL.so.1 |& grep -v 'denied'
답변2
귀하의 명령은 다음과 같아야 합니다:
find / -name libGL.so.1 2>/dev/null
표준 오류(fd2)에 대한 권한에 대한 불만 사항을 찾아보세요. 이러한 줄을 제거하려면 표준 출력(>)을 비트 버킷(/dev/null)으로 리디렉션합니다.
답변3
"Permission Denied" 줄은 stderr(표준 오류) 스트림으로 이동하지만 grep을 통해 stdout(표준 출력)을 파이핑하고 있습니다.
stderr를 완전히 리디렉션할 수 있습니다.
find / -name libGL.so.1 2> /dev/null
답변4
다음을 사용하여 명령을 호출해 보셨습니까?스도?
sudo find / -name libGL.so.1
여전히 메시지가 표시되면 이미 언급한 리디렉션을 사용하세요.stderr(fd=2)에서 너바나(/dev/null)로:
sudo find / -name libGL.so.1 2> /dev/null
더 많은 아이디어여기, 행운을 빌어요!