"/proc", "/sys" 및 유사한 디렉터리를 건너뛰고 "find /"를 사용하세요.

"/proc", "/sys" 및 유사한 디렉터리를 건너뛰고 "find /"를 사용하세요.

특히 검색 문제를 일으킬 수 있는 일부 디렉터리는 find /운영 체제가 실제로 파일이 아닌 파일을 생성하는 디렉터리입니다. 이 디렉토리에는 /proc /sys /run.

문제는 그런 일을 하다가 find / -exec grep이러한 시스템 중 일부를 크롤링하면 시스템이 엉망이 될 수 있다는 것입니다.

그렇다면 find에게 디렉토리를 나열하지 않고 건너뛰도록 지시하려면 어떻게 해야 할까요? 누군가가 이와 같은 새 디렉터리를 만들기로 결정할 수도 있기 때문입니다. 목록에 의존하기보다는 디렉터리를 테스트하고 이 테스트에 실패한 디렉터리를 제외하도록 선택합니다.

답변1

좋습니다. 제외된 파일 목록에 의존하고 싶지 않으므로 너무 적은 수의 디렉터리를 제외할 위험이 없습니다.

따라서 어떤 파일을 포함할지 명시해 보겠습니다.

이러한 "실제 파일이 아님"은 거의 항상 별도의 파일 시스템에 있습니다.
이것은 "실제로 파일 시스템이 아닌" 것과 비슷하며 단지 비슷해 보입니다.

우리가 말할 수 있는 것은 그것들이 우리의 "실제" 파일 시스템에 있지 않다는 것입니다. `/home'
에 마운트된 두 개의 파티션이 있다고 가정해 보겠습니다 ./

options 를 사용하면 다음과 같이 알려진 좋은 장소에서만 실행할 -xdev수 있습니다 .find

find / /home -xdev -exec grep ...

일부 이상한 파일은 여전히 ​​일반 파일과 혼합될 수 있습니다(위의 "거의 모든" 참조).

문제가 발생합니다. 잊어버린 fifo파일이 있고 해당 파일에 대해 grep을 실행하면 grep은 해당 파일을 읽으려고 시도하고 영원히 기다리게 됩니다.

모든 위험한 유형을 제외할 수 있지만 가능한 파일 유형을 살펴보면 , 및 심볼릭 링크와 같이 -type실제로 필요한 유형은 많지 않습니다 . 입력된 , 및 의 일부 또는 전체 를 포함하거나 , , 및 제외하는 데만 주의하면 됩니다 .fdl
fdlbcpsD

find / /home -xdev -type f -exec grep ...

또는 심볼릭 링크를 포함하고 싶다면:

find /home/me/dirWithSomeLinksToFiles -xdev \( -type f -or -type d \) -exec grep ...

답변2

디렉토리에 대해서는 걱정하지 마세요. find에게 실제 파일을 grep에 공급하도록 지시하는 것은 어떨까요?

find / -type f -exec grep .... {} +

나에게는 잘 작동하는 것 같습니다(kmem을 잡아도 상자가 죽지 않습니다 ;D).

관련 정보