Сборка: незаконная команда TASM

Также стоит помнить, что, несмотря на то, что статус cd является встроенной оболочкой или внешним двоичным файлом, sudo работает, создавая новый процесс для запуска указанной команды.

Почему это важно? Поскольку основной поток выполнения sudo становится чем-то очень похожим на это:

Оболочка запускает подпроцесс для запуска sudo с заданными параметрами sudo аутентифицирует пользователя и подтверждает их право на выполнение указанной команды sudo spawns off подпроцесс для выполнения указанной команды sudo ждет подпроцесса, порожденного на шаге 3, для выхода из sudo-выходов, возврата в оболочку. Подпроцесс, отложенный на шаге 1, завершается, возвращая пользователя в приглашение оболочки

(This может быть технически неверно, есть системный вызов, который фактически заменяет запущенный процесс новым (это библиотека C execve()). Однако для целей этого объяснения эти два эквивалентны.)

Это становится важным, если учесть, что текущий рабочий каталог является свойством каждого процесса и может . Поэтому, если процесс A запускает новый процесс B, процесс B начинается с того же рабочего каталога, в котором находился процесс A. (Вот почему что-то такое же обыденное, как ls ./ делает то, что вы ожидаете.) Но если процесс B изменяется его рабочий каталог, тогда, если процесс А не будет искать его, А совершенно не знает об этом изменении. (Это, в свою очередь, является причиной того, что если вы запускаете что-то вроде find / и прервите его на полпути, вы не попадете в какое-то, казалось бы, случайное место в файловой системе, просто потому, что находка, похоже, там была там он был прерван.)

Таким образом, даже если sudo cd /somewhere сделал именно то, что он говорит на жестяне, к тому времени, когда sudo выйдет, вы вернетесь туда, где вы начали. Следовательно, эффективно с точки зрения пользователя, он становится не-оператором. Тот факт, что cd, в то время как он выполнял, называл функцию библиотечной системы chdir() для установки нового рабочего каталога, не помогает вам, пользователю.

Как указал Уоррен Хилл sudo работает, создавая новый процесс для запуска указанной команды (я бы на самом деле не называл это обходным путем) заключается в использовании sudo -i, который бросает вас в корневую оболочку, где вы можете свободно перемещаться по файловой системе и выполнять любые команды, которые вы чувствуете. Однако обратите внимание, что когда вы выходите из этой оболочки, вы ее вернули назад, где вы начали в иерархии каталогов, по той же причине, что и я описал выше.

1
задан 23 November 2014 в 19:55

0 ответов

Другие вопросы по тегам:

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