ls บนอุปกรณ์โดยไม่ต้องติดตั้ง


9

เป็นไปได้หรือไม่ที่จะรันlsบนอุปกรณ์โดยไม่ต้องติดตั้งก่อน
บางสิ่งเช่นนี้

# ls /dev/sda1

มีวัตถุประสงค์อะไร?
dawud

ฉันไม่คิดอย่างนั้น lsแน่นอนคุณจะต้องเครื่องมือที่นอกเหนือจาก
strugee

ไม่ทำไมคุณไม่บอกเราว่าคุณพยายามทำอะไร
jasonwryan

1
สำหรับช่วงเวลาที่ฉันต้องการที่จะติดตั้งอุปกรณ์บางอย่าง แต่จำไม่ได้ว่ามัน sda1 / 2/3/4/5/6 ฯลฯ เพียงแค่ต้องการที่จะแสดงรายการไฟล์บนอุปกรณ์นั้นเพื่อให้ฉันรู้ว่าอุปกรณ์ของฉัน กำลังมองหา
ลำพูน

โดยวิธีการ: หากคุณมีภาพของดิสก์ (ไม่ใช่พาร์ติชัน) คุณอาจจะเห็นไฟล์ของมันtestdiskโดยเรียกใช้testdiskคำสั่งที่มีเส้นทางไฟล์ภาพเป็นพารามิเตอร์แรกในบรรทัดคำสั่ง
Abbafei

คำตอบ:


11

คุณสามารถใช้debugfsโปรแกรมของe2fsprogs แม้จะมีชื่อในอดีตมันจะทำงานบนระบบไฟล์ ext2 / 3/4 การใช้งานง่าย:

# debugfs -R "ls -l" /dev/sda6
  2   40755 (2)   1001   1001    4096 17-Sep-2013 04:03 .
  2   40755 (2)   1001   1001    4096 17-Sep-2013 04:03 ..
 16  100644 (1)   1001   1001    9085 17-Sep-2013 04:03 avserver.conf
 17  100644 (1)   1001   1001    2177 17-Sep-2013 04:03 bash.bashrc
 26  100644 (1)   1001   1001     722 17-Sep-2013 04:03 crontab
 …   

โดยที่ "ls -l" เป็นdebugfsคำสั่งเฉพาะที่ทำหน้าที่ส่วนใหญ่ชอบls -l; คุณไม่สามารถใช้คำสั่งเชลล์โดยพลการใด ๆ ได้ ตามค่าเริ่มต้น debugfs จะเปิดไดรฟ์ในโหมดอ่านอย่างเดียวดังนั้นจึงค่อนข้างปลอดภัย ตัวอย่างเช่นลองสิ่งนี้บนพาร์ติชั่นที่ไม่ใช่ ext2 / 3/4 จะให้การวินิจฉัย:

# debugfs -R "ls -l" /dev/sda2
/dev/sda2: Bad magic number in super-block while opening filesystem
ls: Filesystem not open

ฉันไม่สามารถพูดได้ว่าฉันพิจารณาการปฏิบัติที่แนะนำนี้ แต่จะทำในสิ่งที่คุณถาม


3

จุดรวมของการติดตั้งระบบไฟล์คือการเข้าถึงไฟล์ โดยทั่วไปแล้วคุณไม่สามารถเข้าถึงไฟล์ของระบบไฟล์โดยไม่ต้องติดตั้ง

มียูทิลิตี้บางอย่างที่เข้าถึงไฟล์โดยตรงโดยไม่ต้องเมานต์เช่นdebugfsสำหรับระบบไฟล์ ext2 / ext3 / ext4 และmtoolsสำหรับระบบไฟล์ FAT

สำหรับ ext2 / ext3 / ext4 แทนที่จะเรียกใช้โปรแกรมที่อันตรายและใช้งานยากdebugfsคุณสามารถแสดงรายการตำแหน่งการเมานต์ล่าสุด:

tune2fs -l /dev/sda1 | grep 'Last mounted'

อย่างไรก็ตามสิ่งนี้มีประโยชน์เฉพาะเมื่อมีการบันทึกตำแหน่งการเมานต์ล่าสุด

ประเภทระบบไฟล์ส่วนใหญ่รองรับการให้ป้ายชื่อระบบไฟล์ (เช่นtune2fs -L foo) ดังนั้นให้ระบบไฟล์ทั้งหมดของคุณมีป้ายกำกับที่เป็นเอกลักษณ์ จากนั้นเมานต์ระบบไฟล์ตามเลเบล:

mount /dev/disks/by-label/foo /media/foo

หรือ

mount LABEL=foo /media/foo

2

คำตอบง่ายๆ: คุณไม่สามารถ lsใช้รูทีน libc มาตรฐานซึ่งแปลเป็นการเรียกระบบที่ให้บริการโดยไดรเวอร์ระบบไฟล์ดังนั้นจึงไม่สามารถใช้ls(หรือสิ่งใดก็ตามที่ใช้การเรียกระบบเหล่านั้นสำหรับเรื่องนั้น) โดยไม่ต้องติดตั้งระบบไฟล์

คุณสามารถเขียนโปรแกรมอรรถประโยชน์ที่จะหลีกเลี่ยงสิ่งนี้ได้โดยมีสำเนาบางส่วนของตัวเองของไดรเวอร์ระบบไฟล์ (มีอยู่เช่นอ่านไฟล์ Ext2 จาก Windows) แต่มันใช้ไม่ได้เลย

หากปัญหาของคุณเป็นเพียงการระบุพาร์ติชันคุณอาจเริ่มใช้GPTซึ่งมีพื้นที่สำหรับชื่อพาร์ติชัน (72 ไบต์ต่อพาร์ติชัน) โซลูชันที่ยกตัวอย่างบางอย่าง (ตัวอย่างเช่น Linux MD หรือ LVM) อนุญาตให้ตั้งชื่อได้เช่นกัน


1

ตามที่อธิบายไว้ก่อนหน้า debugfs ทำงานได้ดี

debugfs -R "ls -l" /dev/sda1

สำหรับ NTFS มี ntfsls จาก ntfs-3g

ntfsls /dev/sda2

สำหรับ FAT นั้นมี mdir จาก mtools

mdir -i /dev/sdc1

สำหรับ exFAT ฉันไม่แน่ใจ ดูเหมือนว่า exfat-utils ไม่รวมถึงเครื่องมือใด ๆ ที่คล้ายกับเครื่องมือที่อธิบายข้างต้น แม้ว่าจะมี dumpexfat แต่ฉันไม่คิดว่ามันจะให้ข้อมูลที่ขอ

เพื่อหารายละเอียดเพิ่มเติมเกี่ยวกับไดรฟ์ที่แนบมามี lsblk

lsblk

โดยส่วนตัวแล้วฉันชอบสิ่งนี้และตั้งชื่อแทนให้:

alias lsblk="lsblk -o MODEL,TRAN,NAME,FSTYPE,LABEL,MOUNTPOINT,SIZE,MAJ:MIN"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.