Почему эта операция sudo mv с подстановочными знаками не работает?

Для Grub 2

известны такие пункты меню, как приведенный ниже пример для Kubuntu.

menuentry "Try kubuntu-16.04.1-desktop-amd64.iso - 64 bit live" {
 loopback loop /kubuntu-16.04.1-desktop-amd64.iso
 linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=/kubuntu-16.04.1-desktop-amd64.iso splash --
 initrd (loop)/casper/initrd.lz
}

Содержимое между кавычками в первой строке - это то, что вы увидите в меню.

Вторая строка монтирует названный ISO на устройство loopback.

В третьей строке указывается имя исполняемого файла ядра Linux.

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

Скорее всего, вам придется проверить содержимое конкретного ISO, который вы хотите загрузить, чтобы узнать имена файлов vmlinuz в строке linux и initrd в строке intird, поскольку они могут отличаться в разных дистрибутивах, а также убедиться, что вы указываете полный путь к ISO в строке loopback

.
8
21.08.2018, 02:38
2 ответа

Это почти наверняка связано с тем, что ваша учетная запись обычного пользователя не может получить доступ к каталогу, поэтому оболочка не может перечислить файлы, соответствующие подстановочному знаку.

Вы можете достаточно легко подтвердить это с помощью такой команды

ls /home/jira-plugins/installed-plugins

Если вы получили отказ в разрешении, то оболочка не сможет расширить подстановочный знак * в этом каталоге.

Почему? Рассмотрим вашу команду

sudo mv / home / jira-plugins / installed-plugins / * / var / atlassian / application-data / jira / plugins / installed-plugins /

Порядок обработки: (1) разверните подстановочные знаки, (2) выполнить команду, которая в данном случае является sudo с некоторыми аргументами, которые соответствуют оператору mv .

Вы можете решить проблему одним из двух способов.

  1. Войдите в систему и переместите файлы

     sudo -s 
    mv / home / jira-plugins / installed-plugins / * / var / atlassian / application-data / jira / plugins / installed-plugins / 
     
  2. Разверните шаблон после запуска sudo

     sudo bash -c "mv / home / jira-plugins / installed-plugins / * / var / atlassian / application-data / jira / plugins / installed-plugins / "
     
19
27.01.2020, 20:08

Когда вы делаете sudo ls для вывода списка папок, я предполагаю, что один или несколько каталогов в пути не читаются обычными пользователями. Это объяснило бы поведение. Ключевое недоразумение здесь заключается в том, когда сделано глобальное расширение * . Это выполняется оболочкой перед вызовом любой команды. Если у оболочки недостаточно разрешений, она не может ее расширить.

Более подробно в этом случае происходит следующее:

  1. Ваша оболочка пытается расширить командную строку. Поскольку вы не имеете права читать / home / jira-plugins / installed-plugins от своего имени, он не сможет расширить шаблон глобуса / home / jira-plugins / installed- плагины / * . Это оставит его без изменений. После этого этапа * больше не является особенным.
  2. Ваша оболочка вызывает команду sudo с аргументами mv / home / jira-plugins / installed-plugins / * и / var / atlassian / application-data / jira / plugins / installed-plugins /
  3. sudo вызывает mv с аргументами / home / jira-plugins / installed-plugins / * и / var / atlassian / application-data / jira / plugins / installed-plugins /
  4. mv пытается переместить файл с именем / home / jira-plugins / installed-plugins / * , но он не существует и, следовательно, сообщение об ошибке.
11
27.01.2020, 20:08

Теги

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