Подключить зашифрованный диск LUKS

Почему cd..не работает в Unix & Linux?

Оболочки Unix обрабатывают множество не -буквенно-цифровых символов (, например,@_+-{}:,./~)как если бы они были письмами, так что у вас могут быть команды с именами a@,  b_,  c+,  d- и т. д. Поэтому, когда оболочка видит cd.., она обрабатывает его как слово из четырех букв -, ничем не отличается от cdef или  cd56, поэтому он ищет команду с именем cd... 1 Это не разбивает его на два слова просто потому, что d— это буква, а.— нет. (как это делает CMD; см. ниже ).
______________
1  Как указано Бодо , вы можете определить псевдоним (или функция оболочки (или скрипт оболочки ))с именем cd... Конечно, писать сценарий оболочки с именем cd..— плохая идея. (или cdanything), потому что сценарий оболочки не может вызвать оболочку, которая его вызывает. изменить каталог.

Почему cd..работает в CMD?

Правила разбора команд CMD кажутся сложными и недостаточно документированными.

… но (примерно за час поиска )я ничего не смог найти в котором конкретно рассматривается вопрос о том, как CMD определяет что это за команда (то есть то, что мы назвали бы argv[0]в программе на C в Unix ).

Я провел несколько тестов / экспериментов (на Windows7 ). Одна закономерность, которую я заметил, заключается в том, чтопосле первого прохода токенизации (разрыв командной строки пробелами и символы высокого -приоритета, такие как <,  >,  &,  |,  , и  /), CMD смотрит на первое слово в командной строке, и разбивает его на некоторые другие не -буквенно-цифровые символы (, включая .,  +,  =, и \).

  • Если слово до первого такого не -буквенно-цифрового символа это встроенная команда, не принимающая аргументов, затем эта команда выполняется. Например, cls.,  cls..,  cls.abc,  cls.a.b.c,  cls.exe,  cls=,  cls=abc,  cls+,  cls+abc,  cls\,  cls\abc, и многие другие вариации, действуйте как обычно cls․и очистите экран. То же самое для pause.

    На первый взгляд они кажутся исключениями из вышеперечисленного:

    • cls/ и  cls/a/b/c выдают сообщение об ошибке.
    • cls/? отображает справочное сообщение.
    • pause/ и  pause/a/b/c просто пауза (т. е. они действуют как обычныеpause).
    • pause/? выдает справочное сообщение, в котором говорится: «Нажмите любую клавишу, чтобы продолжить...», но не ждет, пока вы нажмете клавишу. (Это ошибка.)
       

    Но вышеизложенное согласуется с идеей что CMD разбивает вещи на токены по /символов. Например, cls/ведет себя так же, как cls /.

  • echo это особый случай :
    • echo on включает эхо.
    • echo off выключает эхо.
    • Просто echo сообщает о состоянии флага эха.
    • Но, если за echoсразу следует не -буквенно-цифровой символ (как ,, . или  /), тогда этот символ игнорируется, но специальная обработка для остальной части команды отключается. Итак, если вы хотите напечатать слово "включено" или "выключено", используйте echo.on или  echo.off, а для печати пустой строки используйте echo.. Таким образом echo..действует как echo . [sic].
  • TL;DR
    В других случаях CMD, кажется, ищет последнюю точку. (или группа точек ), и если эта подстрока является встроенной командой, он интерпретирует это как встроенную команду. Итак, cd..,  dir..,  type..\filename.txt и  copy..\filename newnameвсе действуют так, как будто перед первой точкой был пробел.

Но это работает только для встроенных функций; например, calc.. и  find..получают «…не распознано как внутренняя или внешняя команда, исполняемая программа или пакетный файл». ошибка. Итак, несколько забавных примеров:

  • Если у вас есть программа с именем abcd.efg.exe, вы можете запустить ее, набрав abcd.efg. Но если он называется cd.efg.exe, то cd.efgне работает, потому что он анализируется как cd .efg. Вам нужно будет ввести cd.efg.exe.
  • Аналогично, если у вас есть подкаталог с именем abcdв текущем каталоге, и программа с именем efg.exeв этом подкаталоге, вы можете запустить его, набрав abcd\efg. Но если подкаталог называется cd, то cd\efgне работает, потому что он анализируется как cd \efg. Вам нужно будет ввести cd\efg.exe.
0
27.05.2021, 21:34
1 ответ

У вас установлена ​​LVM , поэтому после разблокировки устройства LUKS вам необходимо смонтировать корневой логический том, а не само разблокированное устройство. В вашем случае логические тома не были активированы автоматически -, потому что lvmetadне работает, вы можете активировать их (= сказать системе, чтобы она фактически создала устройства блокировки логических томов )с помощью vgchange -ay elementary-vg, а затем смонтировала корневой логический том /dev/elementary-vg/rootс помощью mountили udisksctl mount -b /dev/elementary-vg/root.

1
28.07.2021, 11:28

Теги

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