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下才有权限执行。

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

2.2. 更新系统软件源

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

1
yum -y update && yum -y upgrade

2.3. 安装必要开发软件

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

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用户下执行如下命令,创建一个新的用户。用户名不要使用中文。

1
useradd 用户名

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

1
userdel -r 用户名

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

1
passwd 用户名

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

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用户的密码。

1
passwd

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

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

1
su - 用户名

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

3.4. tabby连接子用户

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

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

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

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

3.5.1. 为什么要修改?

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

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

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

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

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

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

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

3.5.2. 怎么修改?

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

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

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

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

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

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

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. 在子用户下用如下命令修改

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定位到当前命令行所处的目录 👉 官方文档

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再带上原本的命令就可以了。

1
sudo 原本的命令

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

1
muxue is not in the sudoers file.

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

4.2. 修改sudo配置文件

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

1
vim /etc/sudoers

4.2.1. 提前备份

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

1
cp /etc/sudoers ~/sudoers.bak

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

1
cp ~/sudoers.bak /etc/sudoers

4.2.2. 开始修改

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

1
vim /etc/sudoers

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

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

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那个用户一样的格式追加一行子用户

1
用户名  ALL=(ALL)       ALL

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

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

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

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系统环境。