@ninjalj가 말한 것처럼 -D skip
을 사용하지 않으면 grep
은 모든 장치 파일, 소켓 파일 및 FIFO 파일을 읽으려고 시도합니다. 특히 Linux 시스템 (및 많은 Unix 시스템)에서는 무한히 긴 것으로 보이는 /dev/zero
을 읽으려고 시도합니다.
당신은 잠시 기다릴 것입니다.
시스템 로그를 찾으려면 /var/log
에서 시작하는 것이 가장 좋은 방법 일 것입니다.
당신이 정말로 당신의 파일 시스템에 어디서든 할 수있는 일을 찾고 있다면,이 같은 작업을 수행 할 수 있습니다
find/-xdev -type f -print0 | xargs -0 grep -H pattern
find
에 -xdev
인수는 단일 파일 시스템 내에서 체류를 알려줍니다; 이렇게하면 /proc
및 /dev
(및 마운트 된 파일 시스템)을 피할 수 있습니다. -type f
은 검색을 일반 파일로 제한합니다.-print0
은 개행 문자 대신 널 문자로 분리 된 파일 이름을 인쇄합니다. 이렇게하면 파일에 공백이나 다른 재미있는 문자가 포함 된 파일에 문제가 발생하지 않습니다.
xargs
은 표준 입력에서 파일 이름 목록 (또는 다른 것)을 읽고 목록의 모든 항목에 대해 지정된 명령을 호출합니다. -0
옵션은 find
의 -print0
에서 작동합니다.
에 대한 -H
옵션은 각 일치 앞에 파일 이름을 붙이도록 지시합니다. 기본적으로 grep
은 명령 줄에 둘 이상의 파일 이름이있는 경우에만이 작업을 수행합니다. xargs
은 인수를 일괄 처리로 나누기 때문에 마지막 일괄 처리에 파일이 하나만있을 수 있으므로 결과가 일관되지 않을 수 있습니다.
(예 : 이름이 로그 파일을 가정) .log
로 끝나는 이름을 가진 파일에 대한 검색을 제한 할 find ... -name '*.log'
를 사용하여, 및/또는 바이너리 파일을 건너 뛸 grep -I ...
을 사용하는 것이 좋습니다.
모든 사항은 GNU 특정 기능에 따라 달라집니다. 이 옵션 중 일부는 MacOS (BSD 기반) 나 다른 Unix 시스템에서는 사용할 수 없습니다. 로컬 설명서를 참조하고 GNU findutils (find
및 xargs
) 및/또는 GNU grep 설치를 고려하십시오.
이 중 하나를 시도하기 전에 df
을 사용하여 루트 파일 시스템의 크기를 확인하십시오. 현재 광산은 268 기가 바이트입니다. 모두 검색하는 데 몇 시간이 걸릴 것입니다. 몇 분 동안 (a) 검색 한 파일을 제한하고 (b) 명령이 올바른지 확인하는 데 지출하는 시간은 충분할 것입니다.
grep이 (가) 걸려 있지 않은 경우, -r은 시스템의 모든 재귀 적 파일을 의미합니다. 얼마나 많은 기가 바이트입니까? 또한 NFS 마운트 파일은 네트워크 연결 속도로 처리되고 CPU에 직접 연결된 디스크의 로컬 파일로 처리되지 않습니다. 그것은 오랜 시간이 걸릴 것입니다. 행운을 빕니다. – shellter