Как установить sudo, если у меня нет sudo или su

tl;dr -Расширение Bash сложно для предотвращения бесконечных циклов символических ссылок (в bash >= 4.3), и вы и я неправильно истолковали, что оно делает в командах, которые вы разместили

Я предполагаю, что у вас есть bash >= 4.3, поскольку я не могу воспроизвести то, что вы описываете в bash 4.2.46, он зацикливается, пока не достигнет предела рекурсии (, как и ожидалось ).

Некоторое время смотрел на это и настроил тестовый каталог для воспроизведения, который имитировал вашу ситуацию. Суть в том, как расширение bash происходит в каждом из ваших примеров.Расширение ведет себя по-разному в зависимости от того, следует ли за ним /, и у нас, приматов, возникает некоторый когнитивный диссонанс в этом отношении, когда мы смотрим на подобные примеры.
Из документации на баш шопт:

globstar
If set, the pattern ‘**’ used in a filename expansion context will match all files and zero or more directories and subdirectories. If the pattern is followed by a ‘/’, only directories and subdirectories match.

Чтобы проиллюстрировать, вот моя тестовая установка:

$ mkdir -p test/nested
$ cd test
$ touch sneaky
$ touch nested/sneaky
$ cd nested
$ ln -s. looper
$ cd..

что приводит к такой структуре каталогов:

test/
  - sneaky
  - nested/
    - sneaky
    - looper ->./

Это дублирует ваши выводы в моем тестовом каталоге:

$ for apath in../**/sneaky; do echo "$apath"; done   
../test/nested/looper/sneaky                                                                                                                                                                 
../test/nested/sneaky
../test/sneaky

$ printf "%s\n"../** | grep sneaky
../test/nested/sneaky
../test/sneaky

В первом примере глобус расширяется до (test/nested/looper, test/nested, test), останавливаясь на looperбез перехода по ссылке, поскольку за глобусом следует/

Затем мы добавляем /sneakyк этому, в результате чего получается набор (test/nested/looper/sneaky, test/nested/sneaky, test/sneaky).

Во втором примере глобус расширяется до (test/nested/looper, test/nested/sneaky, test/nested, test/sneaky, test)(, в чем можно убедиться, удалив| grep sneaky)

Опять же, это разложение не следует за ссылкой looper, но в этом случае мы не добавляем к нему /sneaky, таким образом исключая ../test/nested/looper/sneakyиз наших результатов.

С другой стороны, мы продолжаем получать ../test/nested/sneakyи ../test/sneaky, потому что glob также захватывает файлы, когда за ним не следует/

2
16.03.2020, 16:50
1 ответ

Даже если вы sudoподключитесь к своей системе (легко ), это не поможет. Для работы необходимо установить root -. И вы не можете настроить это без root-доступа.

Если запуск команд без sudoне работает, значит, в Dockerfile есть строка USER. Если вы отредактируете Dockerfile, поместивapt-get(или команды для установкиapt-get)перед этой строкой, тогда он сможет установить (, вы все равно будете пользователем root ).

7
28.04.2021, 23:20

Теги

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