我经常看到人们使用如下构造:
sudo su - postgres
而不是
sudo -u postgres -i
而且我想知道为什么.同样,我见过:
sudo su - postgres -c psql
代替
sudo -u postgres psql
没有领先的sudo su版本会有一些意义,如果你在没有sudo的旧平台上.但是为什么在不太史前的UNIX或Linux上你会使用sudo su?
使用sudo su没有任何好处,这是人们习惯使用su时的一种不合时宜的习惯.当Linux发行版停止设置root密码并使sudo成为访问root帐户的唯一方法时,人们开始在前面处理sudo.他们只是使用sudo su而不是改变他们的习惯. (我是其中之一,直到最近才使用带有sudoers的盒子配置强迫我改变我的习惯).
使用sudo -u
对于登录shell,sudo -u postgres -i比sudo su – postgres更可取.它不要求用户在/ etc / sudoers中具有root访问权限,他们只需要有权成为用户postgres.它还允许您实施更好的访问控制.
用于命令执行
sudo -u postgres psql -c "SELECT 1"
优于其他选择:
sudo su - postgres -c "psql -c \"SELECT 1\""
因为你不必双重转义引号和其他shell元字符以及不需要root的其他安全优势.你可能不小心写了:
sudo su - postgres -c psql -c "SELECT 1"
有时,这将无法正常工作.
最后,通过sudo设置环境变量更容易,例如
sudo PATH=/usr/pgsql-9.3/bin:$PATH -u postgres /usr/pgsql-9.3/bin/initdb -D /var/lib/pgsql/testcluster
而不是通过su. (这里,需要PATH设置,以便initdb可以找到正确的postgres可执行文件).
所以.忘记su命令存在.你不再需要它了.为了打破习惯,将其别名为会打印错误的东西. (某些init和程序包设置脚本仍然使用su,因此您无法删除它).
也可以看看:
> What’s the difference between “sudo su -” and “sudo -i”?
> What’s the magic of the “sudo su”?
> What is the difference between sudo -i and sudo su –