NOC online · 24/7Longview, TX · +1 323 412 0665
KinetikatechServers · Security · Websites
TH

คำสั่ง Linux และทักษะเชลล์

grep: การค้นหา Linux อย่างมืออาชีพ

grep รอดพ้นจากการรีเฟรช toolchain ทุกครั้งเพราะงานไม่เคยเปลี่ยนแปลง: ค้นหาบรรทัดที่สำคัญภายในข้อความที่ขยายเร็วกว่าใครก็ตามที่จะล้างข้อมูล พลังที่แท้จริงของมันคือคำศัพท์แฟล็กที่เปลี่ยนการค้นหาให้เป็นคำตอบ: บริบทโดยรอบ รายการชื่อไฟล์ การจับคู่แบบกลับด้าน และโค้ดทางออกที่เชลล์สคริปต์สามารถแยกย่อยได้ เมื่อเซิร์ฟเวอร์ทำงานผิดปกติ การสอบสวนจะเริ่มต้นด้วย grep และบ่อยเกินกว่าใครจะยอมรับ การสืบสวนก็จะจบลงตรงนั้นเช่นกัน

ประเด็นสำคัญ

  • ค้นหาซ้ำโดยมีวัตถุประสงค์: grep -rni 'fail2ban' /var/log --include='*.log' ข้ามไบนารีและไฟล์บีบอัดที่บีบอัดด้วยตัวเอง grep -r over เปล่า /var/log สอนบทเรียนนั้นอย่างช้าๆ
  • บริบททำให้การแข่งขันสามารถอ่านได้: -A 3 แสดงบรรทัดหลัง, -B 3 ก่อน, -C 5 ทั้งคู่; -l แสดงรายการเฉพาะชื่อไฟล์ -c นับรายการที่ตรงกันต่อไฟล์ และ -L กลับรายการเป็นสิ่งที่ขาดหายไป
  • รหัสทางออกเป็นส่วนหนึ่งของสัญญา: 0 หมายถึงตรงกัน 1 หมายถึงไม่ตรงกัน 2 หมายถึงข้อผิดพลาด สคริปต์ที่รัน grep -q และไม่สนใจว่าความแตกต่างนั้นถือว่าความสำเร็จและความเงียบเหมือนกัน
  • ไฟล์ลูกโซ่แสดงรายการ null อย่างปลอดภัย: grep -rlZ 'ssl_protocols' /etc/nginx --include='*.conf' | xargs -0 -r ls -l; วางการจับคู่ Z และ -0 และชื่อไฟล์แรกที่มีช่องว่างจะทำให้ไปป์ไลน์แตก
  • ใช้ -E เป็นระดับ regex เริ่มต้นสำหรับการสลับที่อ่านได้ และเข้าถึง -P (lookarounds, \d คลาส) เฉพาะเมื่อคุณยอมรับว่าเป็นส่วนขยาย GNU grep BSD จะไม่ดำเนินการ
  • -F ถือว่ารูปแบบเป็นข้อความตามตัวอักษร: เร็วขึ้น และมีภูมิคุ้มกันต่อเมตาคาแรคเตอร์ regex ที่แอบเข้ามาจากตัวแปรที่วางตรงจากตั๋ว
  • --exclude-dir=.git และ --exclude-dir=node_modules เก็บการค้นหาแบบเรียกซ้ำออกจากไดเร็กทอรีที่มีอยู่เพียงเพื่อทำให้การค้นหาช้าลง สะกดชื่ออย่างชัดเจนในสคริปต์เนื่องจากการขยายวงเล็บปีกกาเป็นความสะดวกสบายของ bash ไม่ใช่คุณสมบัติ grep
  • แยกนิสัยออกจากกัน: --color=auto เพื่อความสะดวกในการโต้ตอบ ไม่มีสีในสคริปต์ (หลีกเลี่ยงลำดับบันทึกที่เสียหาย) และ -n (หมายเลขบรรทัด) เพื่อให้บุคคลถัดไปสามารถค้นหาจุดที่คุณวางได้

บันทึกจากหน้างาน

ครั้งหนึ่งฉันเคยวิ่ง grep -r เปล่าๆ ไปทั่วฟาร์มไม้ของลูกค้าตอนตี 2 และได้ความเงียบเป็นเวลาสี่สิบนาทีสำหรับปัญหาของฉัน การเพิ่ม --include='*.log' และ -l สิ้นสุดตั๋วทันที ตอนนี้นิสัยของโค้ดรวมและออกจะเข้ามาก่อนที่รูปแบบจะเกิดขึ้น

คำถามที่พบบ่อย

เหตุใดบางครั้ง grep จึงพิมพ์ 'ไฟล์ไบนารีที่ตรงกัน' แทนที่จะเป็นบรรทัดของฉัน

ไบต์ NUL ใกล้กับการจับคู่ทำให้ GNU grep ถือว่าไฟล์เป็นไบนารี่ เพิ่ม -a เพื่อบังคับโหมดข้อความ หรือ -I เพื่อข้ามไบนารีทั้งหมด ซึ่งเป็นค่าเริ่มต้นที่ถูกต้องในไดเร็กทอรีบันทึกแบบผสม

ฉันควรใช้ ripgrep แทนหรือไม่

ripgrep เร็วกว่าและข้ามไฟล์ไบนารี่และไฟล์ที่ซ่อนอยู่ตามค่าเริ่มต้น แต่ grep นั้นมีอยู่ในทุกกล่องที่คุณจะใช้ SSH รวมถึงอิมเมจช่วยเหลือด้วย เรียนรู้ grep ก่อน เข้าถึง rg ที่จะติดตั้ง

ฉันจะค้นหาบันทึกที่หมุนเวียนและบีบอัดได้อย่างไร

zgrep ค้นหาไฟล์ .gz อย่างโปร่งใสและ zstdgrep ครอบคลุมการหมุนของคอมเพรสเซอร์รุ่นใหม่ที่เปลี่ยนไป เข็มของเมื่อวานมักจะอยู่ในเข็มเหล่านั้น ดังนั้นเครื่องมือจึงถือเป็นสุขอนามัยขั้นพื้นฐาน

ฉันจะจับคู่คำแต่ไม่มีคำที่ยาวกว่านั้นได้อย่างไร

ใช้ -w สำหรับการจับคู่ทั้งคำ และ -x สำหรับการจับคู่แบบเต็มบรรทัด เมื่อรูปแบบต้องการส่วนของคำ คลาสอักขระเช่น [Ss]erver จะให้การควบคุมที่แม่นยำโดยไม่ทำให้ตัวพิมพ์แบนราบในทุกที่

Kinetikatech ช่วยเรื่อง คำสั่ง linux และทักษะเชลล์ ได้อย่างไร

เราเคยรับเรื่องแบบนี้มาเป็นร้อยครั้ง: คำสั่งและพฤติกรรมการเขียนสคริปต์ที่ตัดสินใจว่าผู้ดูแลระบบจะใช้งานเซิร์ฟเวอร์หรือต่อสู้กับเซิร์ฟเวอร์: ค้นหา แปลง ถ่ายโอน และดูแลข้อความและกระบวนการด้วยเครื่องมือที่อยู่ในทุกการติดตั้งฐาน กับ ความปลอดภัยเซิร์ฟเวอร์ Linuxและการจัดการเซิร์ฟเวอร์ คุณได้วงจรครบ ตั้งแต่เราประเมิน ลงมือทำ เฝ้าดูตลอดเวลา และรับเรื่องภายใน 30 นาทีเมื่อจำเป็น

คุยกับช่างเทคนิค

เซิร์ฟเวอร์มีปัญหา? เว็บถูกแฮก? โหลดช้า?

ตอบสนองเหตุกรณ์ฉุกเฉินใน 30 นาที — ตลอด 24 ชั่วโมง ทุกวัน

ขอความช่วยเหลือฉุกเฉิน support@kinetikatech.com