要理解 sudo 和“。”

要理解 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

这两个命令的作用相同吗?

答案1

. /some/path

执行 [ 或包括-即执行 ] 您所指向的 shell 脚本。

./some/path

[ 注意点后没有空格 ] 使用相对路径执行程序/脚本 [ 从当前目录执行,而不是从文件系统顶部执行 ]

sudo 使用其他用户(通常是 root 用户)的权限执行给定的命令。

有区别

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

/usr/local/mysql/bin/mysqld_safe

区别在于当前工作目录。对于 mysql 来说,这可能不会计量,但对于使用相对路径的其他/编写不良的程序 - 它可能会计量。

答案2

不,这些命令完全不同。你可能打错了——以下两个命令相等的:

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

和:

sudo /usr/local/mysql/bin/mysqld_safe

答案3

鲜肉

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/ 中的那个。

答案4

在此命令中:

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

启动mysql服务器。正如其他人所说,句点表示当前目录。它以这种方式使用,例如,覆盖 $PATH 或执行不在 $PATH 中的程序。请记住,在 bash 等中,当前目录不在 $PATH 中,除非您在其中添加“。”(出于安全原因不建议这样做)。

然后此命令允许您访问mysql

/usr/local/mysql/bin/mysql

请注意,此命令中根本没有点(“.”)。

相关内容