ใช่คุณสามารถgrep
/dev/sda1
และ/proc
แต่คุณอาจไม่ต้องการ รายละเอียดเพิ่มเติม:
ใช่คุณสามารถเรียกใช้ grep /dev/sda1
เนื้อหาไบนารีของ แต่ด้วยฮาร์ดดิสก์ขนาดใหญ่ที่ทันสมัยจะใช้เวลานานมากและผลลัพธ์ไม่น่าจะมีประโยชน์
ใช่คุณสามารถ grep เนื้อหาของ/proc
แต่ระวังว่าหน่วยความจำของคอมพิวเตอร์ของคุณถูกแมปในนั้นเป็นไฟล์ บนคอมพิวเตอร์สมัยใหม่ที่มี RAM ขนาดกิกะไบต์จะใช้เวลานานในการ grep และอีกครั้งผลลัพธ์ไม่น่าจะมีประโยชน์
เป็นข้อยกเว้นถ้าคุณกำลังค้นหาข้อมูลบนฮาร์ดดิสก์ที่มีระบบไฟล์ที่เสียหายคุณอาจเรียกใช้grep something /dev/sda1
เป็นส่วนหนึ่งของความพยายามในการกู้คืนข้อมูลของไฟล์
ไฟล์ที่มีปัญหาอื่น ๆ ใน /dev
ฮาร์ดดิสก์และพาร์ติชั่นฮาร์ดดิสก์ที่อยู่ด้านล่าง/dev
นั้นสามารถทำได้หากมีความอดทนมากพอ อย่างไรก็ตามไฟล์อื่น ๆ (หมวก: user2313067 ) อาจทำให้เกิดปัญหา:
/dev/zero
เป็นไฟล์ที่มีความยาวไม่ จำกัด โชคดีที่grep
(อย่างน้อยรุ่น GNU) ฉลาดพอที่จะข้ามได้:
$ grep something /dev/zero
grep: input is too large to count
/dev/random
และ/dev/urandom
ยังไม่มีที่สิ้นสุด คำสั่งgrep something /dev/random
จะทำงานตลอดไปจนกว่าgrep
จะมีสัญญาณให้หยุด
มันจะมีประโยชน์ในการ grep /dev/urandom
เมื่อสร้างรหัสผ่าน ในการรับตัวอย่างเช่นตัวอักษรและตัวเลขห้าตัว:
$ grep --text -o '[[:alnum:]]' /dev/urandom | head -c 10
G
4
n
X
2
สิ่งนี้ไม่สิ้นสุดเนื่องจากหลังจากได้รับอักขระเพียงพอhead
ปิดไปป์ที่ทำให้ grep สิ้นสุดลง
ลูปไม่มีที่สิ้นสุด
"... ลิงก์ ... สร้างลูปแบบไม่มีที่สิ้นสุดเมื่อสำรวจ ... "
Grep (อย่างน้อยรุ่น GNU) นั้นฉลาดพอที่จะไม่ทำเช่นนั้น ลองพิจารณาสองกรณี:
ด้วย-r
ตัวเลือก grep จะไม่ติดตามลิงก์สัญลักษณ์ยกเว้นว่าระบุไว้อย่างชัดเจนในบรรทัดคำสั่ง ดังนั้นจึงเป็นไปไม่ได้ที่จะวนซ้ำ
ด้วย-R
ตัวเลือก grep จะติดตามลิงก์สัญลักษณ์ แต่จะตรวจสอบและปฏิเสธที่จะติดเป็นวง เพื่อแสดง:
$ mkdir a
$ ln -s ../ a/b
$ grep -R something .
grep: warning: ./a/b: recursive directory loop
ไม่รวมไดเรกทอรีที่มีปัญหาจาก grep -r
โปรดgrep
เตรียมสิ่งอำนวยความสะดวกที่ จำกัด เพื่อหยุดการ grep จากการค้นหาไฟล์หรือไดเรกทอรีบางอย่าง ตัวอย่างเช่นคุณสามารถยกเว้นไดเรกทอรีทั้งหมดชื่อproc
, sys
และdev
จากการค้นหา recursive grep กับ:
grep --exclude-dir proc --exclude-dir sys --exclude-dir dev -r something /
หรืออีกวิธีหนึ่งที่เราสามารถแยกproc
, sys
และdev
ใช้ globs ขยายทุบตีของ:
shopt -s extglob
grep -r something /!(proc|sys|dev)
grep
ค้นหาไฟล์/proc
ที่นำไปสู่หน่วยความจำที่ถูกแมปมันอาจเกิดขึ้นที่grep
กระทบ EOF ในหน่วยความจำ (สุ่ม) และตีความข้อมูลต่อไปนี้เป็น ชื่อไฟล์ใหม่ที่จะค้นหา? ฉันเริ่มอ่านgrep
ซอร์สโค้ด แต่ฉันเดาว่าฉันจะไม่เห็นมันมากเกินไป