유닉스 계열의 OS를 사용하다 보면 가장 많이 쓰는 명령 중 하나가 find가 아닐까 싶습니다. 그런데 find 중에 Permission denied라는 메시지 때문에 정작 찾고자 하는 결과를 찾기가 힘들었던 경험은 없으신가요? 아래 그림처럼요.
정작 찾고자하는 workspace를 Permission denied에 가려서 찾기 어렵습니다. 바라는 결과는 이런 건데 말이죠.
저걸 걸러보고자 grep을 사용해도 결과는 마찬가지입니다.
$ find / -name workspace | grep -v Permission
결과가 걸러지지 않는 이유는 grep으로 find의 결과가 전달되기 이전에 예외가 발생했기 때문에 걸러지지 않는 것입니다. 그러면 예외를 보이지 않게 하면 원하는 결과를 얻을 수 있을 것이다라는 가정을 할 수 있습니다. 다시 말해 표준 에러를 출력하지 않게 하면 된다라는 가정이고 방법은 다음과 같습니다.
$ find / -name workspace 2>/dev/null
이렇게 명령을 내려서 드디어 원하는 결과를 얻을 수 있었습니다.
이렇게 하면 모든 에러를 표시하지 않을테니, Permission denied만 제거하고 싶을 때는 표준 에러를 표준 출력으로 리디렉션 하고 그것을 grep 하면 됩니다.
$ find / -name workspace 2>&1 | grep -v Permission
이제 명령을 수행하면 다음과 같이 Permission denied를 제외하고 다른 에러 메시지는 출력되는 것을 볼 수 있습니다.
그런데 Permission denied말고 Operation not permitted 에러도 상당히 많이 발생해서 원하는 결과를 찾기는 쉽지 않습니다. 그리고 표준 에러에 대한 리디렉션을 해서 원하는 결과만 보는 것은 grep 할 때도 동일하게 사용할 수 있습니다.
find 명령을 실행할 때, "에러메시지 때문에 원하는 결과를 찾기 어렵다면, 표준 에러 리디렉션을 이용한다."만 기억하시면 단 몇 분이라도 절약할 수 있을 겁니다.