1. 引子

根据前几章的教学搭建了一个 Linux 的学习环境后,下面就要开始进行 Linux 系统环境的配置了。这部分可是不能跳过的哦!虽然网上有自动化配置的脚本,但只有自己尝试过配置,后续遇到问题才能 “不求人”。

后续所有的操作都将在 CentOS8 系统中,使用 tabby 终端进行操作。tabby 终端 ssh 连接虚拟机 / 云服务器的方式前文配置环节都已介绍过,这里就不赘述了。

小 TIPS:在 Linux 的 ssh 终端中,复制的键盘快捷键是 CTRL+INSERT,粘贴的键盘快捷键是 SHIFT+INSERT;在终端下,不能使用 CTRL+C/V 来进行复制和粘贴。

2. 更新软件源和包

2.1. 什么是软件源?

刚开始安装的系统只有基础的允许环境,缺少我们需要的开发软件。这时候就需要用软件源来进行软件的下载与安装。

你可以简单理解为,软件源就是 Linux 下的软件商店。这可不是 windows 中那个没多少人用的软件商店,在 Linux 下,除非系统需要在大内网中隔离执行(为了安全缘故),一般都会使用软件源来配置 / 安装各类软件。

在我们使用的 CentOS 系列 Linux 中,软件包管理器是 yum,基本的命令如下,用途参考#之后的注释。因为这些命令需要修改系统变量,所以都需要在 root 下才有权限执行。

bash
1
2
3
4
yum install 软件包名     # 安装软件包
yum install -y 软件包名 # 安装软件包,并跳过确认安装提示
yum remove 软件包名 # 删除软件包
yum list | grep 软件包名 # 查看是否存在某个软件包

2.2. 更新系统软件源

我们的新系统,需要执行一次更新操作,命令如下。

plaintext
1
yum -y update && yum -y upgrade

2.3. 安装必要开发软件

更新完毕软件源后,就可以下载一些我们需要的软件包了。yum install 命令后可以带多个软件包,用空格分开每个软件包名即可。

plaintext
text
1
2
3
yum -y install openssl openssl-devel libffi-devel bzip2-devel sqlite-devel
yum -y install gcc gcc-c++ make automake
yum -y install git vim net-tools wget openssh-server openssh-clients

第一行是必要的依赖项以及一些常用的开发包:openssl 用于 https 网络协议,sqlite-devel 是 sqlite 便携数据库的开发库,libffi 库是一个用于调用 C 语言编写的动态库的开源软件库,bzip2-devel 是用于数据压缩相关处理的库。

第二行是 C/C++ 学习中需要用到的 gcc/g++ 编译器,和用于 makefile 支持的 make 软件。

第三行是编程学习中常用的工具:包括 git 版本管理工具,vim 文本编辑工具(你可以理解为是 Linux 下的记事本,功能强大),net-tools 是网络管理相关命令,wget 是通过网络链接下载软件的命令,openssh-server 和 openssh-clients 都是和 ssh 链接相关的依赖项(这两个 openssh 相关的系统应该自带了)

这里的命令较长,复制了命令后,用 STIFT+INSERT 粘贴到终端中后回车就可以执行了。

用户管理也是 Linux 下需要了解的知识之一。在多人共用一台 Linux 服务器时,正确的用户 / 权限管理能避免误操作带来的数据丢失 / 配置错误问题。

3. 创建子用户

3.1. 为什么需要子用户?

linux 虚拟机和云服务器中,我们默认使用的用户都是 root 用户,又叫超级用户

在 root 用户下,所有命令都拥有完整的执行权限,所有文件都拥有完整的访问权限,对于日常使用来说,其实是非常之危险的。因为一不小心,你就有可能修改到 Linux 的系统文件,而导致整个系统出现崩溃,软件无法使用,命令无法使用。

简而言之,如果误操作,很容易出现对于初学者,包括我在内,无法解决的问题。这时候你的 Linux 和无法使用就没区别了,大概率得重新配置一个新的系统,劳心伤时。

所以,我们日常的学习,都需要在非 root 用户下进行,这时候就需要创建一个子用户了。

3.2. 创建子用户的命令

tabby 链接到 Linux 虚拟机 / 云服务后,在 root 用户下执行如下命令,创建一个新的用户。用户名不要使用中文。

bash
1
useradd 用户名

如果想彻底删除用户,使用如下命令

bash
1
userdel -r 用户名

默认创建的用户是没有设置密码的,执行如下命令,设置用户的密码。

bash
1
passwd 用户名

在 Linux,键入密码是不会有回显的(我们在网页上键入密码,一般都会出现 * 回显告知你输入了几位)但在 Linux 下什么都不会显示。盲打密码就行了。

plaintext
1
2
3
4
5
6
7
[root@localhost ~]# useradd muxue
[root@localhost ~]# passwd muxue
Changing password for user muxue.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@localhost ~]#

输入两次相同的密码后,会弹出 all authentication tokens updated successfully,即我们成功设置了子用户的密码。

如果你想修改 root 用户的密码,使用如下命令即可,命令后不带用户名,就可以修改 root 用户的密码。

plaintext
1
passwd

3.3. root 和子用户之间的切换

在 root 用户下,可以用 su 命令切换到任意子用户,不需要输入密码。这也体现了 root 用户作为最高权限用户的牛逼之处。

plaintext
1
su - 用户名

子用户如果想切换到 root 用户,则使用 su - 即可,需要键入 root 用户的密码,才能正常切换到 root 用户。

3.4. tabby 连接子用户

进入 tabby 的设置-配置和链接界面,点击下图所示的图标,就可以复制我们原先配置好的 root 链接。

在复制的链接配置中,将 root 用户名改成刚刚创建的子用户的用户名,点击确定后,就在 tabby 中创建了一个新的针对子用户的链接配置。

点击该配置的开始按钮,就能 ssh 链接到子用户上了。

3.5. 设置终端用户名和路径的回显颜色

3.5.1. 为什么要修改?

默认情况下,Linux 会在终端中按如下格式回显你的用户名和当前所处的文件路径。

plaintext
1
[用户名@主机名 当前路径]#

比如在 root 用户和子用户下,默认的回显长如下模样。

plaintext
1
2
[root@localhost ~]# 
[muxue@localhost ~]$

每次输入命令之后,都会出现一个新的用户名回显,用于分割不同命令。出现这个回显就代表当前的终端已经准备好接受我们的下一个命令了。

在终端中,我们会执行大量的命令,这些命令都会有返回值和执行效果(在终端中打印文字),最终终端中会布满大量字符。如果不修改这个回显的颜色,那么他就和命令的输出结果是同样的暗底白字,命令一多,直接眼花缭乱啦!

修改命令行回显的颜色,就能让终端的命令输入位置和命令的输出结果,通过颜色区分开来,方便我们定位命令之间的分界!

3.5.2. 怎么修改?

需要修改的是用户家目录下的.bashrc 文件,在文件末尾追加如下配置项。写了这个配置项后,可以将回显的用户名改为绿色,文件路径改为蓝色。

bash
1
PS1='[\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]]\$ '

为了区分普通用户和 root 用户,root 用户请使用如下配置,会将回显的用户名改为黄色

bash
1
PS1='[\[\033[01;33m\]\u@\h\[\033[00m\]:\[\033[01;32m\]\w\[\033[00m\]]\$ '

如果你会使用 vim,可以用 vim 来修改。但是为了新手的方便,我们直接用 echo 命令将上述内容通过重定向追加到.bashrc 文件末尾就可以了。

3.5.2.1. 在 root 用户下用如下命令修改

bash
1
2
3
echo -e >> /root/.bashrc
echo "PS1='[\[\033[01;33m\]\u@\h\[\033[00m\]:\[\033[01;32m\]\w\[\033[00m\]]\$ '" >> /root/.bashrc
source /root/.bashrc

3.5.2.2. 在子用户下用如下命令修改

bash
1
2
3
echo -e >> ~/.bashrc
echo "PS1='[\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]]\$ '" >> ~/.bashrc
source ~/.bashrc

最后一行的 source 命令的作用是使我们对.bashrc 配置文件的修改生效。键入命令后回车,就能看到终端的颜色变化。

3.5.3. 修改后效果

下图是子用户和 root 用户分别修改后的效果,看上去是不是舒服多了?

3.5.4. tabby 终端 sftp 额外配置项

tabby 终端自带 sftp 文件传输的功能,链接上虚拟机后,点击右上角的文件夹图标,就能看到虚拟机中 Linux 的文件。你可以在这个界面里面上传 / 下载文件。

但是,不管你的命令行是在什么路径下,点击这个文件夹图标默认只会打开 / 根路径,如果想要找到当前路径,就得自己找具体位置。对于新手来说很不友好。

为此,tabby 可以通过修改.bashrc 的方式来让它的 sftp 定位到当前命令行所处的目录 👉 官方文档

bash
1
2
echo "PS1=\"$PS1\[\e]1337;CurrentDir=\"'$(pwd)\a\]'" >> ~/.bashrc
source ~/.bashrc

修改后,每次点击 sftp,都能成功定位到当前文件路径。

3.6. 进阶:安装 zsh 终端

相比默认的 bash 终端,zsh 终端可以提供命令补全,命令查询,历史命令补全等等能帮助我们使用 Linux 的功能,如果你对 zsh 的安装和配置感兴趣,可以自行阅读下文

【Linux】ubuntu/centos8 安装 zsh 终端

请注意,此项为进阶操作,并非必做。

4. sudo 命令

4.1. 什么是 sudo 命令

sudo 是 linux 下的一个用于提权的命令,他能让子用户短暂使用 root 权限执行部分命令。比如往子用户没有权限访问的文件夹中创建 / 写入 / 修改文件。

使用方法很简单,就是用 sudo 再带上原本的命令就可以了。

plaintext
1
sudo 原本的命令

但是在默认的情况下,我们新创建的子用户是没有执行 sudo 命令的权限的。此时执行 sudo 命令,会出现如下提示,执行失败。

plaintext
1
muxue is not in the sudoers file.

这就导致需要配置一些东西的时候,必须要切换到 root 用户下来处理。

4.2. 修改 sudo 配置文件

所以我们需要在 root 用户下,修改 sudo 的配置文件,给子用户添加 sudo 的权限。

bash
1
vim /etc/sudoers

4.2.1. 提前备份

这里是我们第一次使用 vim,但不用担心,根据我的步骤一步一步来,就不会出错。如果你担心自己改错,可以先执行一下如下命令备份一下此文件

bash
1
cp /etc/sudoers ~/sudoers.bak

如果不小心改错了,用如下命令还原回去便是

bash
1
cp ~/sudoers.bak /etc/sudoers

4.2.2. 开始修改

执行如下命令,进入 vim 的界面

bash
1
vim /etc/sudoers

此时我们看到的就是 /etc/sudoers 文件里面的内容。

我们使用方向键,向下滑动光标,找到如下文字所在位置

bash
1
2
3
4
5
6
7
8
9
10
11
12
## Next comes the main part: which users can run what software on 
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
## user MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL

我们需要做的,是在这一段文字的后面,按它 root 那个用户一样的格式追加一行子用户

plaintext
1
用户名  ALL=(ALL)       ALL

先将你的键盘输入法切换到英文半角,然后按下键盘上的 i 键,进入 vim 的编辑模式。此时右下角会出现 INSERT 字样,代表当前所处编辑模式下,并且警告我们当前正在修改一个只读文件。

我们不需要管这个警告,还是使用方向键找到对应位置,写入上文提到的配置项即可。

比如我的子用户名是 muxue,写入后,这一段就变成了如下模样

plaintext
1
2
3
4
5
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
muxue ALL=(ALL) ALL

随后,我们按键盘左上角的 ESC 键,退出编辑模式,依旧是在英文半角下,输入:wq! 后回车,就可以保存并退出当前文件。

4.3. 完成!

这时候,子用户就成功拥有了 sudo 命令的执行权限!你现在可以尝试在子用户里面执行 sudo 来进行提权了。会提示让你键入子用户的密码。

注意,sudo 操作是以 root 身份执行你当前需要执行的命令,请一定要检查好你的命令没有问题,才可以用 sudo 去执行!否则极其容易破坏你的 Linux 系统环境。