다음 명령이 있습니다.
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 매뉴얼 페이지를 살펴보면 다음과 같은 문구를 발견할 수 있습니다.
를 사용 하면
|&
명령의 표준 오류가 파이프를 통해 명령2의 표준 입력에 연결됩니다. 의 약어입니다2>&1 |
.
따라서 STDERR 및 STDOUT을 조인하려는 경우에도 이 구성을 사용할 수 있습니다.
find / -name libGL.so.1 |& grep -v 'denied'
답변2
귀하의 명령은 다음과 같아야 합니다:
find / -name libGL.so.1 2>/dev/null
Find가 표준 오류(fd2)에 대한 권한에 대해 불평하고 있습니다. 해당 줄을 제거하려면 표준을 비트 버킷(/dev/null)으로 리디렉션(>)하세요.
답변3
"권한 거부됨" 줄은 stderr(표준 오류) 스트림으로 이동하지만 grep을 통해 stdout(표준 출력)을 파이핑하고 있습니다.
다음을 사용하여 stderr를 완전히 리디렉션할 수 있습니다.
find / -name libGL.so.1 2> /dev/null
답변4
다음으로 명령을 호출해 보셨나요?sudo?
sudo find / -name libGL.so.1
여전히 메시지가 표시되면 이미 언급한 리디렉션을 사용하세요.stderr(fd=2)에서 너바나(/dev/null)로:
sudo find / -name libGL.so.1 2> /dev/null
더 많은 아이디어여기, 행운을 빌어요!