Чи можливо запустити ls
на пристрої, не встановивши його спочатку?
Щось на зразок цього:
# ls /dev/sda1
ls
.
Чи можливо запустити ls
на пристрої, не встановивши його спочатку?
Щось на зразок цього:
# ls /dev/sda1
ls
.
Відповіді:
Можна використовувати 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
; ви не можете використовувати будь-яку довільну команду оболонки там. За замовчуванням налагодження відкриває диск у режимі лише для читання, тому це відносно безпечно; наприклад, спроба цього на не-ext2 / 3/4 розділі просто дає діагностику:
# debugfs -R "ls -l" /dev/sda2
/dev/sda2: Bad magic number in super-block while opening filesystem
ls: Filesystem not open
Я не можу сказати, що вважаю цю рекомендовану практику, але вона зробить те, що ви попросите.
Вся справа в монтажі файлової системи - це доступ до її файлів. Тож ні, загалом, ви не можете отримати доступ до файлів файлової системи, не встановивши її.
Є кілька утиліт, які отримують доступ до файлу безпосередньо без монтажу, наприклад, налагодження файлових систем 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
Проста відповідь: ви не можете. ls
використовує стандартні підпрограми libc, які перетворюють на системні виклики, які обслуговуються драйвером файлової системи, отже, неможливо використовувати ls
(або що-небудь, використовуючи ці системні виклики для цього питання) без монтажу файлової системи.
Ви можете написати утиліту, яка б обходила це, маючи власну копію деяких частин драйвера файлової системи (така річ існує, наприклад, для читання файлових систем Ext2 з Windows), але це зовсім недоцільно.
Якщо ваша проблема полягає лише в ідентифікації розділів, ви, мабуть, повинні почати використовувати GPT, у якому є простір для імен розділів (72 байти на розділ). Деякі вищезазначені рішення (наприклад, Linux MD або LVM) дозволяють також називати.
Як було описано раніше, налагодження працює добре.
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"