为什么使用 su – 而不是仅仅使用 su
介绍
Linux 操作系统是一个强大的工具,为其用户提供了广泛的功能和特性。系统管理员在 Linux 系统上执行的最常见任务之一是使用 su 命令切换到 root 用户帐户。但是,在某些情况下,建议使用 su – 而不是仅仅使用 su。在本文中,我们将探讨使用 su – 的原因,并提供一些关于其如何有益的示例。
su 和 su – 之间有什么区别?
su 命令用于切换到系统上的另一个用户帐户,通常是 root 帐户。当您键入 su 后跟要切换到的用户的名称时,系统会提示您输入该用户的密码。输入正确的密码后,您将被授予访问该用户帐户的权限。
另一方面,su – 命令不仅切换到目标用户帐户,还使用该用户的环境变量创建一个新的 shell 环境。这意味着对环境变量(例如 PATH 或 HOME)所做的任何更改都将应用于新的 shell。
为什么使用 su – 而不是仅仅使用 su?
使用 su – 比仅仅使用 su 更为有利的原因有很多。让我们在下面探讨其中的一些原因。
环境变量
如上所述,su – 使用目标用户的环境变量创建一个新的 shell 环境。如果您需要运行依赖于特定环境变量的命令,这将非常有用。例如,假设您需要运行一个位于系统 PATH 变量中不存在的目录中的命令。如果您只使用 su,则找不到该命令,因为 PATH 变量尚未更新以包含该目录。但是,如果您使用 su –,新的 shell 环境将具有更新的 PATH 变量,并且可以找到该命令。
主目录
当您使用 su – 时,新的 shell 环境将以目标用户的主目录作为其当前工作目录。如果您需要执行需要访问目标用户主目录的操作,这将非常有用。例如,如果您需要编辑位于目标用户主目录中的文件,只需使用 su – 并将主目录设置为当前工作目录即可。
资源分配
当您使用 su – 时,新的 shell 环境还将具有目标用户的资源限制和 ulimit 值。如果您需要运行一个比当前用户帐户允许的资源更多的命令,这将非常有用。例如,如果您需要运行一个需要比当前用户帐户允许的打开文件更多的进程,则可以使用 su – 切换到 root 帐户并访问更多资源。
示例
让我们来看一些使用 su – 比仅仅使用 su 更为有利的示例。
示例 1:使用更新的环境变量运行命令
假设您需要运行一个位于系统 PATH 变量中不存在的目录中的命令。如果您只使用 su,则找不到该命令,因为 PATH 变量尚未更新以包含该目录。但是,如果您使用 su –,新的 shell 环境将具有更新的 PATH 变量,并且可以找到该命令。
为了说明这一点,假设您有一个名为 mycommand 的命令,位于 /opt/myapp/bin 目录中。如果您只使用 su,则无法运行该命令,因为系统的 PATH 变量不包含 /opt/myapp/bin 目录。但是,如果您使用 su –,新的 shell 环境将具有更新的 PATH 变量,并且您可以像这样运行命令:
su - root password: mycommand
示例 2:访问目标用户的主目录中的文件
假设您需要编辑位于目标用户主目录中的文件。只需使用 su – 并将主目录设置为当前工作目录即可。
为了说明这一点,假设您需要编辑一个名为 myconfig.txt 的文件,该文件位于用户“user1”的主目录中。如果您只使用 su,则会切换到“user1”帐户,但当前工作目录将与先前用户的当前工作目录相同。但是,如果您使用 su –,新的 shell 环境将以“user1”的主目录作为当前工作目录,并且您可以像这样编辑文件:
su - user1 password: cd ~ vi myconfig.txt
示例 3:使用更多资源运行进程
假设您需要运行一个比当前用户帐户允许的资源更多的进程。您可以使用 su – 切换到 root 帐户并访问更多资源。
为了说明这一点,假设您需要运行一个需要比当前用户帐户允许的打开文件更多的进程。如果您只使用 su,则会切换到 root 帐户,但资源限制和 ulimit 值将与先前用户的帐户相同。但是,如果您使用 su –,新的 shell 环境将具有 root 帐户的资源限制和 ulimit 值,并且您可以像这样运行进程:
su - password: ulimit -n 5000 myprocess
使用 su 的最佳实践
虽然 su – 非常有用,但在使用时务必小心。以下是在使用 su – 时应遵循的一些最佳实践:
仅在必要时使用 su – 虽然 su – 可能会有帮助,但并非总是必要的。如果您只需要以 root 用户身份运行命令,则使用 su 就足够了。
使用 sudo 代替 su – 在许多情况下,最好使用 sudo 命令而不是 su –。sudo 允许您以提升的权限运行命令,而无需切换到 root 用户帐户。
谨慎使用 su – 当您使用 su – 时,您实际上是以 root 用户身份运行命令。如果您不小心,这可能很危险。请确保仔细检查您使用 su – 运行的任何命令,以确保它们是安全的。
跟踪环境变化 当您使用 su – 时,环境变量可能会发生变化,这可能会导致意外行为。请务必跟踪对环境变量所做的任何更改,并确保它们不会造成问题。
注销 root 用户帐户 完成使用 root 用户帐户后,请务必注销。这将防止在您不注意时发生任何意外更改。
不应使用 su 的示例
虽然 su – 可能有用,但在某些情况下最好不要使用它。以下是一些不应使用 su – 的示例:
运行简单命令 如果您只需要运行一个具有提升权限的简单命令,则使用 su 就足够了。如果您不需要更改环境变量或访问 root 用户的主目录,则无需使用 su –。
使用特定环境运行命令 如果您需要使用特定环境运行命令,最好使用 env 命令而不是 su –。这允许您设置环境变量而无需更改用户帐户。
运行不需要提升权限的命令 如果您需要运行的命令不需要提升权限,则使用 su – 是不必要的。
结论
总之,su – 命令在多种情况下比仅仅使用 su 更为有利,因为它使用目标用户的环境变量、主目录和资源限制创建一个新的 shell 环境。这对于使用更新的环境变量运行命令、访问目标用户的主目录中的文件以及使用更多资源运行进程非常有用。作为系统管理员,必须了解 su 和 su – 之间的区别,以及何时使用每个命令来有效地执行您的任务。