系统配置
在上一篇内容中大家实际操作的话可能会意识到一些问题,例如为什么ifconfig
直接执行的话会显示找不到该命令,但是使用sudo ifconfig
却可以正常工作;又例如说为什么每一次sudo
命令都需要输入密码,非常麻烦。因此这里我们要修改一下系统配置,方便接下来的使用。
首先解决第一个问题,部分命令一定要在sudo
下才能找到的问题。
Linux由于历史遗留问题,bin文件夹较为混乱,例如
/bin
/sbin
/usr/bin
/usr/sbin
/usr/local/bin
/usr/local/sbin
这些文件夹中都有可执行文件,而这些bin文件夹在大多数unix系统中都存在,有的系统还会有更多其他的bin文件夹。这些bin文件夹里的文件有些是一样的,有些是软连接,而有些不一样,非常混乱。历史遗留问题目前似乎并没有个达到共识的解决方案,因此操作系统的做法是把各种乱七八糟的bin文件夹都添加到path中,这样总能找到需要执行的文件。而Longan Pi的系统默认在使用sipeed用户登录时,并没有将各种sbin文件夹添加到PATH中,导致像ifconfig这种只存在于sbin文件夹内的可执行文件就无法执行。因此我们要做的只是添加相应的PATH,这样就可以在未来直接执行sbin中的那些不需要root权限的程序,而不再需要使用sudo
前缀。
系统环境的PATH配置文件在/etc/profile
文件中,打开它,文件是这样的:
if [ "$(id -u)" -eq 0 ]; then
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi
export PATH
if [ "${PS1-}" ]; then
if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "$(id -u)" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
注意看这一段:
if [ "$(id -u)" -eq 0 ]; then
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi
export PATH
这一段就是写如果是用root用户,那么PATH是/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
这些路径;而如果是用非root用户,那么PATH是/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
这些路径。
第二个情况的路径我们可以看到没有包含sbin。为了让无论哪种登录情况都可以实现各种bin路径的访问,我们只需要将这个if判断换成如下代码,或者是在fi
和 export PATH
中添加如下代码就可以实现:
PATH="/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
添加完后整个文件看起来是这样的:
if [ "$(id -u)" -eq 0 ]; then
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi
PATH="/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
export PATH
if [ "${PS1-}" ]; then
if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "$(id -u)" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
保存文件,运行source /etc/profile
重新加载一下,就可以看到ifconfig
可以直接执行了。
接着我们来看看第二个问题,每一次sudo
都需要使用密码的问题。
我们当前用户在sudo组中,因此可以获得sudo权限,似乎再在使用sudo命令时输入密码并没有增加额外的安全性,反而让操作变得十分繁琐。因此我们可以修改配置来实现免密码使用sudo
。
网上的一系列教程都告诉我们要修改/etc/sudoers这个文件,但当我们打开这个文件后,可以看到明晃晃的一句话:
这是官方在教我们正确的打开方式。那我们就听官方的,进入这个文件夹,新建一个文件,名字随便起,然后在里面写入以下内容:
sipeed ALL=(ALL) NOPASSWD:ALL
完成后使用sudo reboot
重启,重启后发现sodo
不再要求输入密码。至此,配置完成,可以开始愉快的玩耍了。