Tak, możesz grep
/dev/sda1
i /proc
ale prawdopodobnie nie chcesz. Bardziej szczegółowo:
Tak, możesz uruchomić grep zawartość binarną /dev/sda1
. Jednak w przypadku nowoczesnych dużych dysków twardych zajmie to bardzo dużo czasu, a wynik prawdopodobnie nie będzie przydatny.
Tak, możesz grep zawartość /proc
ale pamiętaj, że pamięć twojego komputera jest tam odwzorowana jako pliki. Na nowoczesnym komputerze z gigabajtami pamięci RAM zajmie to dużo czasu grep, a wynik prawdopodobnie nie będzie przydatny.
Wyjątkowo, jeśli szukasz danych na dysku twardym z uszkodzonym systemem plików, możesz uruchomić grep something /dev/sda1
jako część próby odzyskania danych pliku.
Inne problematyczne pliki w /dev
Dyski twarde i partycje dysku twardego pod /dev
może być, jeśli ma się dość cierpliwości, grepped. Inne pliki (wskazówka: użytkownik2313067 ) może jednak powodować problemy:
/dev/zero
jest plikiem o nieskończonej długości. Na szczęście, grep
(przynajmniej wersja GNU) jest wystarczająco inteligentna, aby ją pominąć:
$ grep something /dev/zero
grep: input is too large to count
/dev/random
i /dev/urandom
są także nieskończone. Komenda grep something /dev/random
będzie działać wiecznie, chyba że grep
jest sygnalizowane zatrzymaniem.
Może to być przydatne do grep /dev/urandom
podczas generowania haseł. Aby uzyskać na przykład pięć losowych znaków alfanumerycznych:
$ grep --text -o '[[:alnum:]]' /dev/urandom | head -c 10
G
4
n
X
2
To nie jest nieskończone, ponieważ po otrzymaniu wystarczającej liczby znaków head
zamyka potok powodujący zakończenie grep.
Nieskończone pętle
„... linki ... tworzą nieskończone pętle po przejściu ...”
Grep (przynajmniej wersja GNU) jest wystarczająco inteligentny, aby tego nie robić. Rozważmy dwa przypadki:
Z -r
opcja, grep nie podążaj za dowiązaniami symbolicznymi, chyba że są wyraźnie określone w linii poleceń. Stąd nieskończone pętle nie są możliwe.
Z -R
opcja, grep robi podążaj za dowiązaniami symbolicznymi, ale sprawdza je i odmawia złapania w pętlę. Ilustrować:
$ mkdir a
$ ln -s ../ a/b
$ grep -R something .
grep: warning: ./a/b: recursive directory loop
Wykluczenie problematycznych katalogów grep -r
Tak na marginesie, grep
zapewnia ograniczoną możliwość zatrzymania grep w wyszukiwaniu określonych plików lub katalogów. Na przykład możesz wykluczyć wszystkie nazwane katalogi proc
, sys
, i dev
z rekurencyjnego wyszukiwania grep za pomocą:
grep --exclude-dir proc --exclude-dir sys --exclude-dir dev -r something /
Alternatywnie możemy wykluczyć proc
, sys
, i dev
używając rozszerzonych globów basha:
shopt -s extglob
grep -r something /!(proc|sys|dev)
grep
przeszukuje plik w/proc
co prowadzi do zmapowanej pamięci, może się tak zdarzyćgrep
uderza w EOF w (losowej) pamięci i interpretuje następujące dane jako nową nazwę do wyszukania? Zacząłem czytaćgrep
kod źródłowy, ale chyba nie zobaczę w nim zbyt wiele./dev
może nigdy się nie skończy, gdy grep zacznie skanować/dev/zero
lub podobne. Nie jesteś pewien, czy takie pliki istnieją/proc
lub/sys
./dev/zero
, będzie szukać/dev/random
na zawsze, chyba że się zatrzyma. Aktualizacja odpowiedzi.