Sipeed矽速科技
直播中

裸奔小耗子

6年用户 31经验值
擅长:嵌入式技术 处理器/DSP 控制/MCU
私信 关注
[经验]

【Longan Pi 3H 开发板试用连载体验】给ChatGPT装上眼睛,并且还可以语音对话:3,系统基础配置

系统配置

在上一篇内容中大家实际操作的话可能会意识到一些问题,例如为什么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文件中,打开它,文件是这样的:

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

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
    # The file bash.bashrc already sets the default PS1.
    # PS1='\h:\w\$ '
    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"

添加完后整个文件看起来是这样的:

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

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
    # The file bash.bashrc already sets the default PS1.
    # PS1='\h:\w\$ '
    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这个文件,但当我们打开这个文件后,可以看到明晃晃的一句话:
image.png

这是官方在教我们正确的打开方式。那我们就听官方的,进入这个文件夹,新建一个文件,名字随便起,然后在里面写入以下内容:

sipeed ALL=(ALL) NOPASSWD:ALL

完成后使用sudo reboot重启,重启后发现sodo不再要求输入密码。至此,配置完成,可以开始愉快的玩耍了。

更多回帖

发帖
×
20
完善资料,
赚取积分