Score:2

ท่อเชลล์

ธง ng

ฉันพยายามเข้าใจบรรทัดของ Shell นี้:

grep ^x06 ssh_known_hosts |
ssh-keygen -l -f -| 
\sed -e 's/^.*\(SHA256:\S\+\).*(\([^)]\+\))/\2: \1/' >fp
  • ดังนั้นด้วย เกรป โดยพื้นฐานแล้วเรากำลังค้นหาข้อมูล ssh_unknown_hosts. คืออะไร ^x06 ใช้สำหรับ?
  • กับ ssh-keygen คำสั่งที่เรากำลังสร้างคีย์ SSH ด้วย -l. อะไร -ฉ ใช้สำหรับ?
  • บรรทัดสุดท้ายผมไม่ได้
Score:5
ธง cn
raj

เกรป กำลังค้นหาไฟล์ ssh_known_hosts สำหรับบรรทัด (หรือบรรทัด) ที่ขึ้นต้นด้วย x06 (^ ระบุจุดเริ่มต้นของบรรทัดใน นิพจน์ทั่วไป) และแสดงผลออกมา

จาก ผู้ชาย ssh-keygen:

 ssh-keygen -l [-f input_keyfile]

[...]

 -l แสดงลายนิ้วมือของไฟล์รหัสสาธารณะที่ระบุ คีย์ RSA1 ส่วนตัว
         ได้รับการสนับสนุนด้วย สำหรับคีย์ RSA และ DSA ssh-keygen พยายาม
         ค้นหาไฟล์คีย์สาธารณะที่ตรงกันและพิมพ์ลายนิ้วมือ ถ้า
         เมื่อรวมกับ -v การแสดงอักษรศิลป์ ASCII ของคีย์คือ supâ
         ด้วยลายนิ้วมือ

ดังนั้น ssh-keygen -l -f - อ่านคีย์จากอินพุตมาตรฐาน (นั่นคือจากบรรทัดที่ส่งออกโดย เกรป) และส่งออกลายนิ้วมือ (- ใช้เป็นชื่อไฟล์หมายถึงอินพุตมาตรฐาน)

เดอะ เสด ส่วนที่ยากที่สุด เราต้องเข้าใจ Regular Expression เป็นอย่างดีจึงจะเข้าใจว่ามันทำอะไร

เสด รันคำสั่ง s/รูปแบบ/การแทนที่/ ในแต่ละบรรทัดของอินพุต นั่นคือแทนที่ ลวดลาย กับ เปลี่ยน และคัดลอกบรรทัดไปยังเอาต์พุตมาตรฐาน ถ้า ลวดลาย ไม่พบในบรรทัด บรรทัดจะถูกคัดลอกไม่เปลี่ยนแปลง

เดอะ ลวดลาย เสด กำลังมองหาคือ: ^.*\(SHA256:\S\+\).*(\([^)]\+\)). เป็นนิพจน์ทั่วไปแน่นอน

แยกย่อยได้ดังนี้

  • ต้นบรรทัด (^) ตามด้วยอักขระใดก็ได้ตั้งแต่ศูนย์ขึ้นไป (.*) ตามด้วยอันดับแรก กลุ่ม (ส่วนระหว่าง \( ... \); เราจะไปดูรายละเอียดในภายหลัง) ตามด้วยอักขระใด ๆ ที่เป็นศูนย์หรือมากกว่า (.*) ตามด้วยวินาที กลุ่มซึ่งอยู่ในวงเล็บตามตัวอักษร (\( ... \)).

  • กลุ่มแรกคือ SHA256:\S\+. นี่หมายถึงสตริงตามตัวอักษร SHA256:ตามด้วยอักขระที่ไม่ใช่ช่องว่างอย่างน้อยหนึ่งตัว (\S\+) - อย่างไรก็ตาม ควรสังเกตว่าไม่ใช่ทั้งหมด เสด การใช้งานจะสนับสนุน \S เป็นการระบุอักขระที่ไม่ใช่ช่องว่าง ดังนั้นการแข่งขันของกลุ่มแรก SHA256: ตามด้วยอักขระใด ๆ จนถึงช่องว่างแรก

  • กลุ่มที่สองคือ [^)]\+นั่นคือ อักขระอย่างน้อยหนึ่งตัวที่ไม่เท่ากับวงเล็บปิด เมื่อพิจารณาว่าทั้งกลุ่มอยู่ในวงเล็บ กลุ่มที่สองจะจับคู่สตริงใดๆ ที่อยู่ในวงเล็บ จนถึงวงเล็บปิด

สรุป, เสด ค้นหาในบรรทัดสำหรับรูปแบบที่ประกอบด้วย SHA256: บวกกับอักขระที่ไม่ใช่ช่องว่าง และสตริงใดๆ ที่อยู่ในวงเล็บ โดยมีสิ่งใดอยู่ระหว่างอักขระเหล่านั้น

รูปแบบที่ตรงกันจะถูกแทนที่ด้วย \2: \1 ซึ่งเป็นข้อความที่ตรงกับกลุ่มที่สอง (\2), ทวิภาค, เว้นวรรค และข้อความที่ตรงกับกลุ่มแรก (\1).

ตัวอย่างเช่น ถ้า ssh-keygen เอาต์พุตมีบรรทัดเช่น

เริ่มต้นบางอย่าง SHA256:123456 ตรงกลางบางอย่าง (ข้อความภายในวงเล็บ) สิ้นสุดบางอย่าง

เสด จะแทนที่บรรทัดนั้นด้วย

ข้อความภายในวงเล็บ: SHA256:123456 จบบางสิ่ง

เส้นที่ไม่มีรูปแบบจะไม่เปลี่ยนแปลง

ng flag
เฮ้ คุณใจดีมากที่ช่วยฉัน ฉันเข้าใจเกือบทั้งหมด แต่ฉันสงสัย การเปลี่ยนเส้นทางอินพุตเอาต์พุตของเชลล์และไพพ์กำลังทำอะไรอยู่
ng flag
คอมพิวเตอร์บันทึกไฟล์ไว้ที่ไหน
raj avatar
cn flag
raj
@Sparta ไฟล์ใด ในโค้ดนี้ `ssh_known_hosts` เป็นไฟล์อินพุต และ `fp` เป็นไฟล์เอาต์พุตที่เขียนเอาต์พุตสุดท้ายจาก `sed` เนื่องจากไม่มีการระบุเส้นทาง ไฟล์ทั้งสองจึงอยู่ในไดเร็กทอรีปัจจุบัน
ng flag
เฮ้ ขอบคุณสำหรับความช่วยเหลือของคุณ ฉันซาบซึ้งจริงๆ
คำถามนี้เป็นภาษาอื่นๆ:

โพสต์คำตอบ

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