Устройство loop
в основном управляется с помощью команды losteup
. Итак, losetup -a
дает вам обзор используемых петлевых устройств и прикрепленных файлов. Команда mount
может монтировать только блочное устройство . Контурное устройство может создать виртуальное блочное устройство из файла (символьного устройства ).
На самом деле существует большая разница между этими командами, потому что в старых системах Linux mount
не мог распознать файл как правильное устройство для монтирования, но во время выполнения команды монтирования с большим количеством функций, поэтому теперь он может самостоятельно решить попытаться вызвать команду lossup и смонтировать результат. Но если у вас есть образ всего диска не в формате iso, а, например. с MBR в начале команда mount не смогла его распознать, и вам нужно найти пригодный для использования раздел (, например. с помощью команды parted disk_image.raw unit B print
)самостоятельно, а затем смонтируйте его с полной опцией mount comman как:
mount disk_image.raw /mntpoint/ -o loop,offset=${OFFSET_of_PARTITION}
В этом синтаксисе не указано устройство петли, и предполагается, что система выбирает первое свободное (/dev/loop0
, /dev/loop1
и т. д. )Среди других новых возможностей команды mount то, что вам не нужно указывать тип файловой системы монтируемого блочного устройства (в вашем случае -t iso9660
), если поддержка файловой системы была установлена.
Первая строка должна быть:
NAME=$(hostname)_$(date +"%FT%T")
В том виде, как он у вас есть, он будет использовать подстановку команд и обрабатывать вывод как команду, и, поскольку он не существует, вы получите сообщение об ошибке.
Последняя строка может быть вот такой:
tar -cjvf "$NAME.tar.bz2" testing testing2
В будущем вы можете использовать shellcheck.net для проверки своих скриптов.
Если это ваши первые попытки написания сценариев оболочки, я бы рекомендовал использовать shellcheck для "проверки -чтения" сценариев оболочки; она также доступна как отдельная программа во многих дистрибутивах Linux.
Что касается проблем, с которыми вы столкнулись :Похоже, вы смешиваете синтаксис оболочки и Makefile для разыменования переменных. В оболочке $NAME
— это значение переменной NAME
, тогда как $(NAME)
попытается выполнить команду NAME
и вернуть вывод этой команды -, так что -называется «подстановкой команды» (, который вы правильно использовали при заполнении NAME
в вашем обходном пути «проверки по кусочкам» ).
Итак, исправленный скрипт будет выглядеть так
NAME="$(hostname)_$(date +"%FT%T")"
tar -cjvf "$NAME.tar.bz2" testing testing2
В качестве примечания -
$PATH
. *
, ?
, символы новой строки (да, даже они разрешены в именах файлов! )и тому подобное. Я бы порекомендовал вам взглянуть на
для дальнейшего чтения.