Có thể chạy ls
trên thiết bị mà không cần gắn thiết bị trước không?
Một cái gì đó như thế này:
# ls /dev/sda1
ls
.
Có thể chạy ls
trên thiết bị mà không cần gắn thiết bị trước không?
Một cái gì đó như thế này:
# ls /dev/sda1
ls
.
Câu trả lời:
Bạn có thể sử dụng debugfs
chương trình của e2fspross . Mặc dù tên lịch sử của nó, nó sẽ hoạt động trên các hệ thống tập tin ext2 / 3/4. Cách sử dụng rất đơn giản:
# 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
…
trong đó "ls -l" là một debugfs
lệnh cụ thể hoạt động chủ yếu như ls -l
; bạn không thể sử dụng bất kỳ lệnh shell tùy ý nào ở đó. Theo mặc định, debugfs mở một ổ đĩa ở chế độ chỉ đọc nên điều này tương đối an toàn; ví dụ: thử điều này trên phân vùng không ext2 / 3/4 chỉ đưa ra chẩn đoán:
# debugfs -R "ls -l" /dev/sda2
/dev/sda2: Bad magic number in super-block while opening filesystem
ls: Filesystem not open
Tôi không thể nói rằng tôi xem xét thực hành khuyến nghị này, nhưng nó sẽ làm những gì bạn yêu cầu.
Toàn bộ quan điểm của việc gắn một hệ thống tập tin là truy cập các tập tin của nó. Vì vậy, nói chung, bạn không thể truy cập các tệp của hệ thống tệp mà không cần cài đặt nó.
Có một vài tiện ích truy cập trực tiếp vào tệp mà không cần cài đặt, chẳng hạn như gỡ lỗi cho hệ thống tệp ext2 / ext3 / ext4 và mtools cho hệ thống tệp FAT.
Đối với ext2 / ext3 / ext4, thay vì gọi chương trình nguy hiểm và khó sử dụng debugfs
, bạn có thể liệt kê vị trí gắn kết cuối cùng của nó:
tune2fs -l /dev/sda1 | grep 'Last mounted'
Tuy nhiên, điều này chỉ hữu ích nếu vị trí gắn kết cuối cùng đã được ghi lại.
Hầu hết các loại hệ thống tập tin hỗ trợ cho nhãn hệ thống tập tin (ví dụ tune2fs -L foo
). Vì vậy, cung cấp cho tất cả các hệ thống tập tin của bạn một nhãn duy nhất. Sau đó gắn hệ thống tập tin theo nhãn:
mount /dev/disks/by-label/foo /media/foo
hoặc là
mount LABEL=foo /media/foo
Câu trả lời đơn giản: bạn không thể. ls
sử dụng các thường trình libc tiêu chuẩn chuyển thành các cuộc gọi hệ thống được phục vụ bởi trình điều khiển hệ thống tệp, do đó không thể sử dụng ls
(hoặc bất cứ điều gì sử dụng các cuộc gọi hệ thống đó cho vấn đề đó) mà không cần gắn hệ thống tệp.
Bạn có thể viết một tiện ích có thể phá vỡ điều này bằng cách có một bản sao riêng của một số phần của trình điều khiển hệ thống tệp (điều đó tồn tại, ví dụ như để đọc các hệ thống tệp Ext2 từ Windows), nhưng điều đó là không thực tế.
Nếu vấn đề của bạn chỉ là xác định các phân vùng, có lẽ bạn nên bắt đầu sử dụng GPT có không gian cho tên phân vùng (72 byte cho mỗi phân vùng). Một số giải pháp quá mức (ví dụ Linux MD hoặc LVM) cũng cho phép đặt tên.
Như đã mô tả trước đó, debugfs hoạt động tốt.
debugfs -R "ls -l" /dev/sda1
Đối với NTFS, có ntfsls từ ntfs-3g.
ntfsls /dev/sda2
Đối với FAT, có mdir, từ mtools.
mdir -i /dev/sdc1
Đối với exFAT tôi không chắc chắn mặc dù. Có vẻ như exfat-utils không bao gồm bất kỳ công cụ nào tương tự như các công cụ được mô tả ở trên. Mặc dù có dumpexfat, nhưng tôi không nghĩ nó sẽ cung cấp thông tin được yêu cầu.
Để tìm hiểu thêm chi tiết về các ổ đĩa đính kèm, có lsblk.
lsblk
Cá nhân tôi thích điều này và đã đặt bí danh cho nó:
alias lsblk="lsblk -o MODEL,TRAN,NAME,FSTYPE,LABEL,MOUNTPOINT,SIZE,MAJ:MIN"