sudo 和 echo 一起使用时提示 Permition denied.

这样一条命令:

sudo echo "something" >> /etc/sudoer

看上去感觉应该没有问题,使用sudo提权执行echo,重定向输入到文件中,但是在实际执行的时候会提示”Permission denied”(没有权限)。

为什么会这样?很简单,真正执行重定向的是 shell,也就是说 “>> /etc/sudoer” 这块是有当前输入命令的shell来执行的,并不是 sudo 或者 echo 命令,而当前shell并没有root权限。

两种方法来解决这个问题。

第一种:

sudo sh -c "echo 'something' >> /etc/sudoer"

这种方法直接重新启用一个shell来执行 “echo ‘something’ >> /etc/sudoer”命令,并通过sudo给sh赋权限。

第二种:

echo "something" | sudo tee --append /etc/sudoer

这种方法是使用管道(’|’)和 tee 命令来接管原来由shell执行的重定向功能,并通过sudo给tee命令赋予权限。

至于tee命令,可以查看其 man page。

tee – read from standard input and write to standard output and files

参考链接:

  1. https://stackoverflow.com/questions/84882/sudo-echo-something-etc-privilegedfile-doesnt-work-is-there-an-alterna

Ubuntu 通过脚本安装 MySQL

Ubuntu (包括 Debian)在安装MySQL Server 会提示输入root的密码,这样在使用脚本安装MySQL的时候会暂停再输入密码的阶段。下面的方法通过预先设置MySQL的默认root密码,在安装的时候自动完成密码的设置。

sudo debconf-set-selections <<< 'mysql-server mysql-server/root_password password vagrant'
sudo debconf-set-selections <<< 'mysql-server mysql-server/root_password_again password vagrant'
sudo apt -y install mysql-server

该方法只对应于MySQL,对于 MariaDB(MySQL的分支),在安装的时候并不设置默认的root密码。

参考链接:

  1. https://stackoverflow.com/questions/7739645/install-mysql-on-ubuntu-without-password-prompt

Linux通过脚本检查用户是否存在

Linux下可以用id命令检查某个用户是否存在。

id -u username

下面的脚本可以检查用户是否存在,并且创建不存在的用户。

$user_exists=`id -u username > /dev/null 2>&1; echo $?`
if [ "$user_exits" = "1" ]; then
    sudo adduser username --gecos "" --disabled-password
    echo "username:newpassword" | sudo chpasswd
fi