ls на устройстве, не монтируя его

Эта строка

var1='more ods2.sql | egrep -e "test" | cut -c 5-7'

должен быть

var1=`more ods2.sql | egrep -e "test" | cut -c 5-7`

т.е. необходимо использовать обратные галочки вместо одинарных кавычек (апострофы).

9
17.09.2013, 09:52
3 ответа

Вы можете с помощью 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" a 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

Я не могу сказать, что рассматриваю эту рекомендуемую практику, но она сделает то, что Вы спрашиваете.

11
27.01.2020, 20:05

Смысл монтирования файловой системы должен получить доступ к своим файлам. Так не, в целом, Вы не можете получить доступ к файлам файловой системы, не монтируя его.

Существует несколько утилит, которые получают доступ к файлу непосредственно без монтирования, такого как 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
3
27.01.2020, 20:05

Простой ответ: Вы не можете. ls стандарт использования libc стандартные программы, которые переводят в системные вызовы, которые подаются драйвером файловой системы, следовательно не возможно использовать ls (или что-либо с помощью тех системных вызовов в этом отношении), не монтируя файловую систему.

Вы могли записать утилиту, которая обойдет это при наличии ее собственной копии некоторых частей драйвера файловой системы (такая вещь существует, например, для чтения файловых систем Ext2 из Windows), но это довольно непрактично.

Если Ваша проблема просто определяет разделы, вероятно, необходимо начать использовать GPT, который имеет пространство для имен раздела (72 байта за раздел). Некоторые лежащие решения (Linux MD или LVM, например) позволяют называть также.

2
27.01.2020, 20:05

Теги

Похожие вопросы