Назад | Перейти на главную страницу

Чтобы понять sudo и «.»

я читаю Руководства по MySQL.

Они предлагают мне, чтобы команда

cd /usr/local/mysql
sudo ./bin/mysqld_safe          // it seems that sudo = . + master rights

такой же как

. /usr/local/mysql/bin/mysql    // only ., no master rights

Две команды одинаковы в действии?

Нет, это совершенно разные команды. У вас может быть опечатка - следующие две команды являются эквивалент:

cd /usr/local/mysql
sudo ./bin/mysqld_safe

И:

sudo /usr/local/mysql/bin/mysqld_safe
. /some/path

выполняет [или включает - что является выполнением] указанного вами сценария оболочки.

./some/path

[обратите внимание на нехватку места после точки] выполняет программу / сценарий с использованием относительного пути [из текущего каталога, а не из верхней части файловой системы]

sudo выполняет данную команду с правами другого [обычно root] пользователя.

есть разница между

cd /usr/local/mysql
./bin/mysqld_safe

и

/usr/local/mysql/bin/mysqld_safe

разница в текущем рабочем каталоге. для mysql, вероятно, это не счетчик, но для других / плохо написанных программ, которые используют относительные пути - он может измерять.

Из Свежее мясо:

Sudo (su "do") позволяет системному администратору делегировать полномочия, чтобы дать определенным пользователям (или группам пользователей) возможность запускать некоторые (или все) команды от имени пользователя root или другого пользователя, обеспечивая при этом контрольный журнал команд и их аргументов. .

Я не уверен, что вас это смущает, но, возможно, вы основаны на этом вопросе.

Если вы не понимаете, почему

cd /usr/local/mysql
./bin/mysqld_safe

Такой же как

/usr/local/mysql/bin/mysqld_safe

Это связано с тем, что в UNIX расширение. означает текущий каталог. Таким образом, вы не будете искать в своей переменной PATH ближайший mysqld_safe и запускать его, вы будете специально запускать переменную в / usr / local / mysql / bin /.

В этой команде:

cd /usr/local/mysql
sudo ./bin/mysqld_safe

начинает mysql сервер. Как говорили другие, точка обозначает текущий каталог. Он используется таким образом, например, для переопределения $ PATH или для выполнения программы, не входящей в $ PATH. Помните, что в bash и т. Д. Текущий каталог не находится в $ PATH, если вы не добавите "." к нему (не рекомендуется из соображений безопасности).

Затем эта команда позволяет получить доступ mysql:

/usr/local/mysql/bin/mysql

Обратите внимание, что в этой команде нет точки (".").