เนื้อหาของ / dev / disk0 (/ dev / sda ฯลฯ ) สามารถใช้เป็น stdin ได้หรือไม่?


1

ฉันกำลังเรียนรู้เกี่ยวกับ /dev ระบบแฟ้ม ฉันเริ่มด้วย /dev/sd* (Linux) และ /dev/disk* (OS X) และฉันพบว่ามีพฤติกรรมที่น่าสนใจ ถ้าฉันวิ่ง:

$ sudo xxd -l 1024 /dev/disk0

ฉันได้รับผลลัพธ์ต่อไปนี้:

0000000: 33c0 8ed0 bc00 7c8e c08e d8be 007c bf00  3.....|......|..
0000010: 06b9 0002 fcf3 a450 681c 06cb fbb9 0400  .......Ph.......
0000020: bdbe 0780 7e00 007c 0b0f 850e 0183 c510  ....~..|........
0000030: e2f1 cd18 8856 0055 c646 1105 c646 1000  .....V.U.F...F..
0000040: b441 bbaa 55cd 135d 720f 81fb 55aa 7509  .A..U..]r...U.u.
0000050: f7c1 0100 7403 fe46 1066 6080 7e10 0074  ....t..F.f`.~..t
0000060: 2666 6800 0000 0066 ff76 0868 0000 6800  &fh....f.v.h..h.
0000070: 7c68 0100 6810 00b4 428a 5600 8bf4 cd13  |h..h...B.V.....
< ... >

Googling เล็กน้อยดูเหมือนจะระบุว่านี่เป็นจุดเริ่มต้นของ MBR (ฉันติดตั้ง Bootcamp)

อย่างไรก็ตามสิ่งต่อไปนี้ใช้ไม่ได้:

$ sudo xxd -l 1000 < /dev/disk0
-bash: /dev/disk0: Permission denied

คำถามของฉันคือ:

  • แอปพลิเคชันจำนวนมากซ่อนส่วนสำคัญของดิสก์ (เช่น MBR, inodes ระบบไฟล์, ขอบเขตพาร์ติชันและอื่น ๆ ) เป็นผลลัพธ์จาก xxd ถ่ายโอนข้อมูลระดับต่ำจริงของอุปกรณ์หรือไม่ ฉันเห็นทุกอย่างเป็นไบต์ต่อไบต์บนอุปกรณ์หรือไม่
  • เช่น /dev/disk0 มีข้อมูลอย่างชัดเจนเหตุใดฉันจึงไม่สามารถใช้เป็นสตรีม stdin ได้

คำตอบ:


4

แอปพลิเคชันจำนวนมากซ่อนส่วนสำคัญของดิสก์ (เช่น MBR, inodes ระบบไฟล์, ขอบเขตพาร์ติชันและอื่น ๆ )

แอปพลิเคชันใด

มันไม่ใช่แอปพลิเคชัน มักเป็นระบบปฏิบัติการที่เกี่ยวข้องกับระบบไฟล์และการแบ่งพาร์ติชันดิสก์

เอาต์พุตจาก xxd เป็นการดัมพ์ระดับต่ำจริงของอุปกรณ์หรือไม่?

ชอบมากขึ้น กลาง ระดับ แต่ใช่ คุณจะเห็นข้อมูลดิบตรงตามที่ระบบปฏิบัติการเขียนไว้และเหมือนกับที่ระบบปฏิบัติการจะอ่านกลับ โดยทั่วไปจะมี MBR ใน 512 ไบต์แรกซึ่งมักจะเป็น GPT ในอีกไม่กี่กิโลไบต์ต่อไปและจะอยู่ที่ภาค 63 (เก่า) หรือ 2048 (ใหม่) คุณจะเห็นโครงสร้างระบบแฟ้มของพาร์ติชันที่ 1

ความจริง ต่ำ การถ่ายโอนข้อมูลระดับจะหมายถึงข้อมูลเป็น ตัวควบคุมดิสก์ ได้เขียนไว้: ไม่เพียง แต่ไบต์ที่อ่านได้ของระบบปฏิบัติการเท่านั้น แต่ยังรวมถึงข้อมูลระดับการสึกหรอบันทึกความล้มเหลวของ SMART ซึ่งอาจเป็นกุญแจเข้ารหัส แต่มันมองไม่เห็นระบบปฏิบัติการและโดยทั่วไปคุณไม่สามารถเข้าถึงได้โดยตรงโดยใช้โปรแกรมใด ๆ - โดยใช้ฮาร์ดแวร์กู้คืนข้อมูลเฉพาะ

(ดังที่กล่าวไว้ว่าอุปกรณ์แฟลชบางตัวเป็นข้อยกเว้นพวกเขาไม่มีเฟิร์มแวร์ดิสก์ที่ระบบปฏิบัติการทำทุกอย่าง - เช่นระบบไฟล์ jffs2 จะจัดการระดับแฟลชสึกหรอที่ระดับ OS)

ฉันเห็นทุกอย่างเป็นไบต์ต่อไบต์บนอุปกรณ์หรือไม่

ใช่คุณเห็นมันในลักษณะเดียวกับที่ระบบปฏิบัติการเห็น

ในฐานะ / dev / disk0 มีข้อมูลชัดเจนทำไมฉันไม่สามารถใช้มันเป็นสตรีม stdin ได้?

แน่นอนคุณสามารถ. ในความเป็นจริงคุณ ไม่ ใช้เป็นสตรีมในตัวอย่างแรกของคุณ ความแตกต่างเพียงอย่างเดียวคือในตัวอย่างแรก xxd เป็นคนที่เรียก open ("/ dev / disk0"); ในขณะที่ในตัวอย่างที่สองของคุณที่ทำโดยเปลือกของคุณ ( sh, bash, zsh )

แต่ความแตกต่างนั้น คือ สิ่งที่ทำให้เกิดข้อผิดพลาด แต่มันไม่เกี่ยวอะไรกับคุณที่พยายามจะอ่านดิสก์ "การอนุญาตที่ถูกปฏิเสธ" อย่างแท้จริงหมายความว่าคุณไม่สามารถเปิดได้ /dev/disk0 เพราะ คุณต้องเป็นคนรูท ทำเช่นนั้น

(สิ่งนี้ได้รับคำตอบแล้ว หลายครั้ง บนเว็บไซต์นี้ ที่นี่ , ที่นี่ , ที่นี่ , ที่นี่ , ที่นี่ และ ที่นี่ .)

หากต้องการขยายก่อนหน้านี้การเปลี่ยนเส้นทาง stdin / stdout เกิดขึ้นโดยมี เปลือก เปิดไฟล์ก่อนที่จะเริ่มโปรแกรม ดังนั้นในตัวอย่างแรกของคุณ sudo xxd /dev/disk0 ใช้ครั้งแรก sudo วิ่ง xxd /dev/disk0 ด้วยสิทธิ์รูท

แต่เมื่อคุณวิ่ง sudo xxd < /dev/disk0การเปลี่ยนเส้นทาง < /dev/disk0 ยังคงดำเนินการโดยคุณ ด้อยโอกาส เปลือก; sudo xxd ยังไม่ได้ทำงาน

ใช้ sudo sh -c "xxd < /dev/disk0" เพื่อให้ประมวลผลคำสั่งทั้งหมดเป็นรูท


3

ฉันไม่รู้เกี่ยวกับคำถามแรกของคุณ แต่ตัดสินโดย man page สำหรับ xxdดูเหมือนว่าเป็นกรณีนี้

สำหรับคำถาม stdin คุณสามารถเปลี่ยนเส้นทางได้แน่นอน /dev/disk0 โปรแกรมที่ยอมรับ stdin ปัญหาที่คุณเห็นคือ sudo ไม่ทำการเปลี่ยนเส้นทางเองดังนั้นการเข้าถึง /dev/disk0 ขึ้นอยู่กับการอนุญาตของผู้ใช้ปกติของคุณ

ดู กองล้นมากเกินไป และ คำถามนี้ สำหรับตัวเลือก


-2

สำหรับฉันมันไม่ชัดเจนว่าคุณต้องการทำอะไร บางทีนี่อาจช่วยคุณได้ หากคุณต้องการเข้าถึงข้อมูลดิบของดิสก์โปรแกรม dd เป็นวิธีที่ถูกต้อง ด้วย dd คุณสามารถคัดลอก MBR หรือดิสก์ทั้งหมด

ciao ไรเดอร์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.