总字符数: 29.14K

代码: 13.36K, 文本: 6.51K

预计阅读时间: 1.44 小时

Linux的文本编辑器VI/VIM

VI编辑器是UNIX和Linux系统下标准的文本编辑器,而且对于所有UNIX及Linux系统的版本而言,vi编辑器都是完全相同的.Vim是vi的升级版本,它在vi的基础上增加了一些功能,但在基础命令上两者是完全兼容的.

VI/VIM主要用于建立、编辑、显示文本文件.它与其他编辑器不同,因为它没有菜单,只有命令.在Linux系统下,vi编辑器是全屏幕文本编辑的代表,提供了丰富的编辑功能.虽然vi编辑器相对来说比较简陋,对初学者来说可能不太友好,但在Linux中,vi编辑器的作用非常重要,特别是在配置各种服务器时,修改配置文件时非常实用.在这些场景中,熟练使用vi编辑器可以提高工作效率.

Vim编辑器三种模式

  • 命令模式(command mode)
  • 插入模式(Insert mode)/[输入模式]、
  • 底线命令模式(last line mode)/[编辑模式 ]

1. 命令模式

只要启动 vi/vim [文件名],便进入了命令模式.在这个状态下,敲击键盘动作会被Vim识别为命令,而非输入字符.例如,此时按下i并不会输入一个字符,而是被当作了一个命令.

以下是常用的几个命令:

  1. i 切换到输入模式,以输入字符.
  2. x 删除当前光标所在处的字符.
  3. : 切换到底行命令模式,在最底下一行输入命令.

2. 输入模式

命令模式下按下i就进入了输入模式.

输入模式中,可以使用以下按键:

  • 字符按键以及Shift组合,输入字符
  • ENTER,回车键,换行
  • BACKSPACE,退格键,删除光标前一个字符
  • DEL,删除键,删除光标后一个字符
  • 方向键,在文本中移动光标
  • HOME/END,移动光标到行首/行尾
  • Page Up/Page Down,上/下翻页
  • Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
  • ESC,退出输入模式,切换到命令模式

3. 底线模式/编辑模式

命令模式下按下冒号(:)就进入了底线命令模式.

底线命令模式可以输入单个或多个字符的命令,可用的命令非常多.

底线命令模式中,基本的命令有(已经省略了冒号):

  • q 退出程序
  • w 保存文件

ESC键可随时退出底线命令模式.

VI常规操作

1. vi的启动和退出

直接输入命令 vi 不指定文件名,由于这是一个没有命名的空文件,会显示 vi 的版本信息.

或者直接使用 vi 打开文件,如果文件存在,则打开该存在的文件;如果文件不存在的话,将以我们指定的参数作为文件名.

输入 q! 是强制退出,同时没有保存当前文件内容.如果文件没有进行修改,或者已经保存完毕,也可以使用 q 退出.保存退出使用 wq,保存强制退出使用 wq!.

命令 描述
vi filename 打开或者新建一个文件,并将光标置于第一行的首部
vi -r filename 恢复上次VI打开时崩溃的文件
vi -R filename 把指定的文件以只读方式放入编辑器中
vi + filename 打开文件并将光标置于最后一行的首部
vi +n filename 打开文件,并将光标置于第n行的首部
vi +/pattern filename 打开文件,并将光标置于第一个与pattern匹配的位置
vi –c command filename 在对文件进行编辑前,先执行指定的命令

VIM常用操作

1. 插入命令

命令 作用 模式
a 在光标所在字符后插入 命令模式
A 在光标所在行尾插入 命令模式
i 在光标所在字符前插入 命令模式
I 在光标所在行行首插入 命令模式
o 在光标下插入新行 命令模式
O 在光标上插入新行 命令模式

2. 定位命令

命令 作用 模式
:set nu 显示行号 底线模式
:set nonu 取消行号 底线模式
gg | G 到第一行 | 到最后一行 命令模式
nG 到第n行 命令模式
:n 到第n行 底线模式
$ 移至行尾 命令模式
0 移至行首 命令模式

光标方向的移动,除了可以使用方向键,还可以使用以下命令:

向上移动光标:k
向左移动光标:h 
向右移动光标:l
向下移动光标:j

翻页命令

  Ctrl+F向前翻整页 Ctrl+U向前翻半页

  Ctrl+B向后翻整页 Ctrl+D向后翻半页

3. 删除命令

命令 作用 模式
x 删除光标所在处字符 命令模式
nx 删除光标所在处后n个字符 命令模式
dd 删除光标所在行,ndd删除n行 命令模式
dG 删除光标所在行到文件末尾内容 命令模式
D 删除光标所在处到行尾内容 命令模式
:n1,n2d 删除指定范围的行 例如:10,12d 底线模式

4. 复制和剪切命令

命令 作用 模式
yy 复制当前行 命令模式
nyy 复制当前行以下n行 例如 3yy 命令模式
dd 剪切当前行 命令模式
ndd 剪切当前行以下n行 命令模式
p、P 粘贴在当前光标所在行下或行上 命令模式

5. 替换和取消命令

命令 作用 模式
r 取代光标所在处字符 ,按r后输入替换的字符 命令模式、底线模式
R 从光标所在处开始替换字符,按Esc结束 命令模式
u 取消上一步操作 命令模式

底线模式下

: r 文件名 可以导入文件中的内容到光标位置
r /etc/issue
: !命令 可以在不退出VIM的情况下输入命令
!which ls

: r !date 把时间插入到vim中

6. 搜索和搜索替换命令

命令 作用 模式
/ 要查找的字符窜 搜索指定字符串 搜索时忽略大小写 :set ic 、set noic 命令模式
n(按键) 搜索指定字符串的下一个出现位置 命令模式
:%s/old/new/g 全文替换指定字符串 底线模式
:n1,n2s/old/new/g 在一定范围内替换指定字符串 底线模式

替换范围

  • %s 全文替换
  • 起始行,终止行s /要替换的字符串/替换的新的字符串/g(g不询问,c询问操作)

7. 保存和退出命令

命令 作用 模式
:w 保存修改 底线模式
:w new_filename 另存为指定文件 底线模式
:wq 保存修改并退出 底线模式
ZZ 快捷键,保存修改并退出或shift+zz 命令模式
:q! 不保存修改退出 底线模式
:wq! 强行保存修改并退出(文件所有者及root可使用) 底线模式

Linux软件包管理

软件包管理简介

    软件包在Linux系统中是程序安装和管理的基础.根据软件包的类型,可以分为源码包和二进制包,下面是对这两种包的详细介绍及其优缺点.
源码包
    源码包通常包含C语言或其他编程语言的源代码,允许用户阅读和修改代码.源码包的安装过程比较慢,因为它需要在本地系统上编译成二进制文件才能运行,类似于Windows系统的安装过程.

优点:

  • 开源:用户可以自由修改源代码.
  • 可定制化:用户可以根据需求选择需要的功能.
  • 系统适配性高:编译安装可优化软件性能,提高系统稳定性.
  • 卸载方便:通常可以通过简单的命令来完全卸载.

缺点:

  • 安装步骤繁琐:尤其是安装大型软件集合时,容易出错.
  • 安装时间长:编译过程可能需要较长时间.
  • 错误处理困难:新手可能难以解决编译过程中的错误.
二进制包
    二进制包是经过编译的包,其中最常见的类型是RPM包,它是许多Linux发行版的默认包格式.

优点:

  • 简单快速:包管理系统允许通过简单的命令快速安装、升级、查询和卸载软件.
  • 安装速度快:比源码包安装快很多,因为不需要编译.

缺点:

  • 源代码不可见:用户无法查看或修改源代码.
  • 功能选择不如源码包灵活:用户不能自定义功能和选项.
  • 依赖问题:软件之间的依赖关系可能导致一系列的依赖性安装问题.

RPM包管理-rpm命令管理

RPM包命名原则

RPM包的命名遵循一定的原则,以确保用户可以从文件名中快速得到关于软件包的详细信息.以下是RPM包命名原则的详细解析:

1
2
3
4
5
6
7
8
包全名: httpd-2.2.15-15.el6.centos.1.i686.rpm
包分解:
- httpd 软件包名称
- 2.2.15 软件版本号
- 15 软件发布的次数(修订版本)
- el6.centos 适合的Linux发行版(el6代表Enterprise Linux 6,centos表明是为CentOS定制)
- i686 适合的硬件架构(i686为32位系统)
- .rpm 文件扩展名,表示这是一个RPM包

每部分的具体含义如下:

  • 软件包名称 (httpd): 这是软件包的基本名称,通告了用户这是哪个软件的包.
  • 软件版本号 (2.2.15): 表示该软件包含的软件版本,有助于用户了解软件的功能和兼容性.
  • 软件发布次数 (15): 该数字通常代表软件包维护者的修订次数,有时候也包含安全补丁和重要更新.
  • 适合的Linux发行版 (el6.centos): 这表明了软件包是为哪个Linux发行版或版本定制的,有时候包括了适合的系统版本.
  • 适合的硬件架构 (i686): 告诉用户这个包是为哪种CPU架构编译的,例如i686通常指32位架构的处理器.
  • RPM包扩展名 (.rpm): 明确这是一个RPM格式的软件包,告诉用户可以使用RPM兼容的包管理器进行安装和管理.

RPM包依赖性

包全名与包名

  • 包全名:操作的包是没有安装的软件包时,使用包全名.而且要注意路径(安装)
  • 包名:操作已经安装的软件包时,使用包名.是搜索/var/lib/rpm/中的数据库(执行、卸载)

RPM安装

1
2
3
4
5
6
rpm  -ivh  包全名
选项:
-i(install) 安装
-v(verbose) 显示详细信息
-h(hash) 显示进度
--nodeps 不检测依赖性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
[root@192 Packages]# rpm -ivh httpd-   #按tab键就会列出与httpd相关的安装包
httpd-2.4.6-95.el7.centos.x86_64.rpm httpd-manual-2.4.6-95.el7.centos.noarch.rpm
httpd-devel-2.4.6-95.el7.centos.x86_64.rpm httpd-tools-2.4.6-95.el7.centos.x86_64.rpm

[root@192 Packages]# rpm -ivh httpd-2.4.6-95.el7.centos.x86_64.rpm #安装httpd
错误:依赖检测失败:
/etc/mime.types 被 httpd-2.4.6-95.el7.centos.x86_64 需要
httpd-tools = 2.4.6-95.el7.centos 被 httpd-2.4.6-95.el7.centos.x86_64 需要
[root@192 Packages]# rpm -ivh httpd-tools-2.4.6-95.el7.centos.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:httpd-tools-2.4.6-95.el7.centos ################################# [100%]

我们主要看第2个100%

[root@192 Packages]# rpm -ivh httpd-2.4.6-95.el7.centos.x86_64.rpm
错误:依赖检测失败:
/etc/mime.types 被 httpd-2.4.6-95.el7.centos.x86_64 需要
[root@192 Packages]# yum deplist httpd #检查依赖性
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.huaweicloud.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
软件包:httpd.x86_64 2.4.6-97.el7.centos.2
依赖:/bin/sh
provider: bash.x86_64 4.2.46-35.el7_9
依赖:/etc/mime.types
provider: mailcap.noarch 2.1.41-2.el7
依赖:/usr/sbin/groupadd
provider: shadow-utils.x86_64 2:4.6-5.el7
依赖:/usr/sbin/useradd
provider: shadow-utils.x86_64 2:4.6-5.el7
依赖:httpd-tools = 2.4.6-97.el7.centos.2
[root@192 Packages]# rpm -ivh mailcap-2.1.41-2.el7.noarch.rpm
准备中... ################################# [100%]
正在升级/安装...
1:mailcap-2.1.41-2.el7 ################################# [100%]
[root@192 Packages]# rpm -ivh httpd-
httpd-2.4.6-95.el7.centos.x86_64.rpm httpd-manual-2.4.6-95.el7.centos.noarch.rpm
httpd-devel-2.4.6-95.el7.centos.x86_64.rpm httpd-tools-2.4.6-95.el7.centos.x86_64.rpm
[root@192 Packages]# rpm -ivh httpd-2.4.6-95.el7.centos.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:httpd-2.4.6-95.el7.centos ################################# [100%]

我在安装htppd升级包的时候奔溃了,依赖的包太多了!需要用到yum在处理依赖性的方法

RPM包升级

1
2
3
rpm  -Uvh  包全名
选项:
-U(upgrade) 升级

卸载

1
2
3
4
rpm  -e  包名
选项:
-e(erase) 卸载
--nodeps 不检测依赖性
1
2
3
4
5
6
[root@192 Packages]# rpm -e httpd
错误:依赖检测失败:
httpd = 2.4.6-95.el7.centos 被 (已安裝) httpd-manual-2.4.6-95.el7.centos.noarch 需要

[root@192 Packages]# rpm -e httpd-manual
[root@192 Packages]# rpm -e httpd

RPM包管理-其他内容

查询是否安装

1
2
3
4
5
6
7
8
9
[root@192 /]# rpm -q  包名   #查询包是否安装
选项:
-q 查询(query)
[root@192 /]# rpm -qa #查询所有已经安装的RPM包
选项:
-a 所有(all)

[root@192 /]# rpm -qa | grep httpd
httpd-tools-2.4.6-95.el7.centos.x86_64

查询软件包详细信息

1
2
3
4
[root@192 /]# rpm -qi 包名
选项:
-i 查询软件信息(information)
-p 查询未安装包信息(package)[包全名]

查询包中文件安装位置

1
2
3
4
[root@192 /]# rpm -ql 包名
选项:
-l 列表(list)
-p 查询未安装包信息(package)

查询系统文件属于哪个RPM包

1
2
3
[root@192 /]# rpm -qf 系统文件名
选项:
-f 查询系统文件属于哪个软件包(file)

查询软件包的依赖性

1
2
3
4
[root@192 /]# rpm -qR 包名
选项:
-R 查询软件包的依赖性(requires)
-p 查询未安装包信息(package)

RPM包检验(查看被修改的文件)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@192 /]# rpm -V 已安装的包名
选项:
-V 校验指定RPM包中的文件(verify)

验证内容中的8个信息的具体内容如下:
S 文件大小是否改变
M 文件的类型或文件的权限(rwx)是否被改变
5 文件MD5校验和是否改变(可以看成文件内容是否改变)
D 设备中,从代码是否改变
L 文件路径是否改变
U 文件的属主(所有者)是否改变
G 文件的属组是否改变
T 文件的修改时间是否改变
文件类型
c 配置文件(config file)
d 普通文档(documentation)
g "鬼"文件(ghost file),很少见,就是该文件不应该被这个RPM包包含
l 授权文件(license file)
r 描述文件(read me)

RPM包中文件提取 (文件修复用的)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@192 /]# rpm2cpio 包全名 |[\(表示换行)]  cpio -idv.文件绝对路径
rpm2cpio #将rpm包转换为cpio格式的命令
cpio #是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件

[root@192 /]# cpio 选项 <[文件|设备]
选项:
-i: copy-in模式,还原
-d: 还原时自动新建目录
-v: 显示还原过程

范例:测试文件修改功能

[root@192 ~]# rpm -qf /bin/ls #查询ls命令属于哪个软件包
coreutils-8.22-24.el7_9.2.x86_64
[root@192 ~]# mv /bin/ls /tmp/ #造成ls命令误删除假象
[root@192 ~]# ls
bash: ls: 未找到命令...
相似命令是: 'lz'
[root@192 ~]# rpm2cpio /mnt/cdrom/Packages/coreutils-8.22-24.el7.x86_64.rpm |cpio -idv ./bin/ls #提取RP包中ls命令到当前目录的/bin/ls下
28603 块
[root@192 ~]# cp /root/bin/ls /bin/ #把ls命令复制会/bin/目录,修复文件丢失

RPM包管理-yum在线管理

用来解决依赖性,自动安装

IP地址配置和网络yum源

1
2
3
4
5
6
[root@192 ~]# ifconfig eth0 192.168.1.156  #临时生效一旦重启,就会失效 ,想要永久修改,查看3.8命令 
[root@192 ~]# ping www.sina.com.cn
PING ww1.sinaimg.cn.w.alikunlun.com (124.165.216.217) 56(84) bytes of data.
64 bytes from 217.216.165.124.adsl-pool.sx.cn (124.165.216.217): icmp_seq=1 ttl=57 time=6.73 ms
64 bytes from 217.216.165.124.adsl-pool.sx.cn (124.165.216.217): icmp_seq=2 ttl=57 time=7.03 ms
64 bytes from 217.216.165.124.adsl-pool.sx.cn (124.165.216.217): icmp_seq=3 ttl= 57 time=6.94 ms< /FONT>

网络yum源(linux的官方网络)

1
2
3
4
5
6
7
8
# 切换到存放yum源配置文件的目录
[root@192 ~]# cd /etc/yum.repos.d/

# 列出当前目录下的所有文件,这些是不同的yum源配置文件
[root@192 yum.repos.d]# ls

# 编辑CentOS的基础yum源配置文件
[root@192 yum.repos.d]# vim /etc/yum.repos.d/CentOS-Base.repo

CentOS-Base.repo文件中,各项配置的意义如下:

  • [base]:容器名称或标识符,必须置于方括号[]内.在yum配置中,它定义了一个仓库的唯一标识.
  • name:仓库的说明,可以是任意描述性文本,方便用户识别.
  • mirrorlist:软件包镜像站点的URL.通常是一个服务器列表,yum会根据这个列表找到最好的服务器进行软件包下载.这一行可以被注释掉,如果你打算直接使用baseurl.
  • baseurl:定义yum源服务器的地址,即软件包的实际下载位置.默认指向CentOS官方源,可以修改为其他高速或本地镜像地址.
  • enabled:指定该仓库是否被启用.1或省略表示启用,而0表示禁用.
  • gpgcheck:决定是否进行GPG密钥检查.1表示启用RPM包的数字签名验证,0表示关闭验证,这样可能会增加系统安全风险.
  • gpgkey:GPG密钥的公钥文件位置,用于验证软件包的完整性和出版商的可靠性.通常不需要修改.

yum命令

查询

1
2
[root@192 yum.repos.d]# yum list   #查询所有可用软件包列表
[root@192 yum.repos.d]# yum search 关键字(包名) #搜索服务器上所有和关键字相关的包

安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
[root@192 yum.repos.d]# yum  -y install  包名
选项:
install 安装
-y 自动回答yes

[root@192 yum.repos.d]# yum -y install httpd #安装apache服务
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.huaweicloud.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
base | 3.6 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
正在解决依赖关系
--> 正在检查事务
---> 软件包 httpd.x86_64.0.2.4.6-97.el7.centos.2 将被 安装
--> 正在处理依赖关系 httpd-tools = 2.4.6-97.el7.centos.2,它被软件包 httpd-2.4.6-97.el7.centos.2.x86_64 需要
--> 正在检查事务
---> 软件包 httpd-tools.x86_64.0.2.4.6-95.el7.centos 将被 升级
---> 软件包 httpd-tools.x86_64.0.2.4.6-97.el7.centos.2 将被 更新
--> 解决依赖关系完成

依赖关系解决

==========================================================================================================================================
Package 架构 版本 源 大小
==========================================================================================================================================
正在安装:
httpd x86_64 2.4.6-97.el7.centos.2 updates 2.7 M
为依赖而更新:
httpd-tools x86_64 2.4.6-97.el7.centos.2 updates 94 k

事务概要
==========================================================================================================================================
安装 1 软件包
升级 ( 1 依赖软件包)

总下载量:2.8 M
Downloading packages:
No Presto metadata available for updates
(1/2): httpd-tools-2.4.6-97.el7.centos.2.x86_64.rpm | 94 kB 00:00:00
(2/2): httpd-2.4.6-97.el7.centos.2.x86_64.rpm | 2.7 MB 00:00:00
------------------------------------------------------------------------------------------------------------------------------------------
总计 3.6 MB/s | 2.8 MB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
警告:RPM 数据库已被非 yum 程序修改.
正在更新 : httpd-tools-2.4.6-97.el7.centos.2.x86_64 1/3
正在安装 : httpd-2.4.6-97.el7.centos.2.x86_64 2/3
清理 : httpd-tools-2.4.6-95.el7.centos.x86_64 3/3
验证中 : httpd-2.4.6-97.el7.centos.2.x86_64 1/3
验证中 : httpd-tools-2.4.6-97.el7.centos.2.x86_64 2/3
验证中 : httpd-tools-2.4.6-95.el7.centos.x86_64 3/3

已安装:
httpd.x86_64 0:2.4.6-97.el7.centos.2

作为依赖被升级:
httpd-tools.x86_64 0:2.4.6-97.el7.centos.2

完毕!

[root@192 yum.repos.d]# yum -y install gcc #c语言的编辑器

升级

1
2
3
4
[root@192 yum.repos.d]# yum  -y update  包名
选项:
update 升级
-y 自动回答yes

卸载

1
2
3
4
5
6
[root@192 yum.repos.d]# yum  -y remove  包名
选项:
remove 卸载
-y 自动回答yes

强调服务器安装原理:安装最小化安装不安装多余软件,使用什么软件安装什么软件,尽量不卸载,尤其是yum卸载,尽量不用

YUM软件组管理命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[root@192 yum.repos.d]# yum grouplist  #列出所以可用的软件组列表
已加载插件:fastestmirror, langpacks
没有安装组信息文件
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
* base: mirrors.huaweicloud.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
可用的环境分组:
最小安装
基础设施服务器
计算节点
文件及打印服务器
基本网页服务器
虚拟化主机
带 GUI 的服务器
GNOME 桌面
KDE Plasma Workspaces
开发及生成工作站
可用组:
传统 UNIX 兼容性
兼容性程序库
图形管理工具
安全性工具
开发工具
控制台互联网工具
智能卡支持
科学记数法支持
系统管理
系统管理工具
完成

[root@192 yum.repos.d]#yum groupinstall 软件组名 #安装指定软件组,组名可以由grouplist查询出来(安装英文)

[root@192 yum.repos.d]#yum groupremove 软件组名 #卸载指定软件组

光盘yum源搭建步骤

挂载光盘

1
[root@192 ~]# mount /dev/cdrom /mnt/cdrom/  #挂载光盘

让网络yum源文件失效

1
2
3
4
5
[root@192 ~]# cd /etc/yum.repos.d/
[root@192 yum.repos.d]# ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo CentOS-x86_64-kernel.repo
[root@192 yum.repos.d]# mv CentOS-Basc.repo CentOS-Base.repo.bak #改名字就会失效

修改光盘yum源文件

1
2
3
4
5
6
7
8
9
10
11
[root@192 yum.repos.d]# vim CentOS-Media.repo
[c7-media]
name=CentOS-$releasever - Media
baseurl=file:///mnt/cdrom/
#地址为你自己的光盘挂载地址
# file:///media/cdrom/
# file:///media/cdrecorder/
#注释这两个不存在的地址
gpgcheck=1
enabled=1 #把enable=0改为enable=1,让这个yum源配置文件生效
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

源码包管理

源码包和RPM包的区别

区别

  • 安装之前的区别:概念上的区别
  • 安装之后的区别:安装位置不同

RPM包安装位置
是安装在默认位置中:RPM包默认安装路径

/etc/ 配置文件安装目录
/usr/bin/ 可执行的命令安装目录
/usr/lib/ 程序所使用的函数库保存位置
/usr/share/doc/ 基本的软件使用手册保存位置
usr/share/man 帮助文件保存位置
1
2
3
4
5
6
7
8
9
10
11
[root@my-think ~]# rpm -q httpd  #查询httpd的安装包
httpd-2.4.6-97.el7.centos.2.x86_64
[root@my-think ~]# rpm -ql httpd #查询httpd的安装路径
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.d/README
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf.modules.d ...

源码包安装位置
安装在指定位置当中,一般是/usr/local/软件名/可以在编译的时候指定位置./configure --prefix=/usr/local/nginx
安装位置不同带来的影响
RPM包安装的服务可以使用系统服务管理命令(service)来管理

例如的apache的启动方法是:

RPM包安装的启动方法
  1. 启动httpd服务: 使用service命令是传统的方法,但在新版的Red Hat系列系统中(使用systemd作为init系统的版本),service命令会被重定向到systemctl命令.

    1
    2
    [root@my-think init.d]# service httpd start
    Redirecting to /bin/systemctl start httpd.service
  2. 开放防火墙端口80: 通过firewall-cmd命令可以管理firewalld服务,它是Red Hat系列系统中默认的防火墙管理工具.这两条命令成功地将TCP端口80添加到了公共区域(public zone)并且永久生效,然后重新加载了防火墙的配置.

    1
    2
    3
    4
    [root@my-think bin]# firewall-cmd  --zone=public --add-port=80/tcp --permanent
    success
    [root@my-think bin]# firewall-cmd --reload
    success

    开放端口80是为了允许HTTP流量(通常是网页服务器的流量)进入服务器.

  3. 访问网页服务器: 假设服务器的IP地址是192.168.1.8,您可以通过浏览器访问http://192.168.1.8.如果httpd已经启动并且防火墙端口已开放,您应该能够看到在/var/www/html目录中的默认网页或您创建的index.html.

源码包的启动方法
  1. 启动httpd服务:如果是从源码编译安装的Apache httpd(比如安装到/usr/local/apache2),那么您需要使用安装路径下提供的控制脚本(如apachectl)来管理服务.

    1
    /usr/local/apache2/bin/apachectl start
  2. 开放防火墙端口80: 通过firewall-cmd命令可以管理firewalld服务,它是Red Hat系列系统中默认的防火墙管理工具.这两条命令成功地将TCP端口80添加到了公共区域(public zone)并且永久生效,然后重新加载了防火墙的配置.

    1
    2
    3
    4
    [root@my-think bin]# firewall-cmd  --zone=public --add-port=80/tcp --permanent
    success
    [root@my-think bin]# firewall-cmd --reload
    success

    开放端口80是为了允许HTTP流量(通常是网页服务器的流量)进入服务器.

  3. 访问网页服务器: 假设服务器的IP地址是192.168.1.8,您可以通过浏览器访问http://192.168.1.8.如果httpd已经启动并且防火墙端口已开放,您应该能够看到在/var/www/html目录中的默认网页或您创建的index.html.

源码包安装过程

安装准备
  • 安装C语言编译器:确保系统中已经安装了C语言编译器,这是编译源码的基础.
  • 下载源码包:源码包可以从官方网站下载,例如Apache服务器源码包可从这里下载.
安装注意事项
  • 源代码保存位置:推荐保存在/usr/local/src/.
  • 软件安装位置:推荐安装在/usr/local/.
  • 确定安装过程中是否报错:
    • 安装过程中断停止.
    • 出现errorwarningno的提示.
源码包安装过程

下面是基于Linux环境的Apache源码包安装示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 下载源码包:使用FTP或其他方式进行传输
# 解压缩下载的源码包
tar -zxvf httpd-2.4.51.tar.gz # 解压

# 查看文件大小
[root@my-think src]# du -sh httpd-2.4.51
48M httpd-2.4.51

# 进入解压缩后的目录(这一步不能省略)

# 安装前重要的文件阅读
# INSTALL文件包含了安装步骤
# README文件包含了使用说明

# 使用./configure进行软件配置和系统环境检查
[root@my-think httpd-2.4.51]# ./configure --prefix=/usr/local/apache2

# 如果出现错误,根据提示进行解决,如下例:
configure: error: APR-util not found. Please read the documentation.

# 编译源代码
$ make

# 如果编译过程中出现错误,可使用以下命令清空临时文件:
make clean

# 安装编译后的软件
$ make install

# 启动安装后的服务
$ /usr/local/apache2/bin/apachectl start
源码包的卸载

源码包的卸载十分简单,不需要使用专用的卸载命令.只需直接删除安装目录即可:

1
2
# 假设安装目录为/usr/local/apache2
rm -rf /usr/local/apache2

测验

1. Linux操作系统中名为"sdb6"的分区代表什么意思?

scsi第二块硬盘的第二个分区

2. 简述Linux操作系统的基本引导过程
  1. 开机自检
  2. MBR引导
  3. GRUB菜单
  4. 加载内核
  5. init进程初始化
3. CentOS中第一个运行的进程是什么?

systemctl

4. Systemd的常见的单元类型中service与target分表代表什么意思?
1
2
service # 描述一个系统服务
target # 描述一组systemd的单元
5. 用表格显示Systemd的目标与SysVinit的运行级别对应关系,并说明其含义?
SystemdSysVinit含义
target0关机
rescue.target1单用户模式
multi-user.target3字符端
graphical.target5图形化
reboot.target6重启
6. 假如在CentOS中启动并查看apache服务的运行状态的命令分别是什么?
1
2
3
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl status httpd
[root@localhost ~]# ps -ef | grep apache
7. 在CentOS中执行哪几条命令可以将系统运行目标切换至图形化模式?
1
2
3
4
# 切换到字符界面
systemctl set-default multi-user.target
# 切换到图形化
systemctl set-default graphical.target
8. 在CentOS中执行什么命令可以将apache服务设置为开机自动启动?
1
2
3
[root@localhost ~]# systemctl enable httpd
[root@localhost ~]# vim /etc/rc.d/rc.local
/usr/sbin/httpd
9. 若CentOS运行在字符界面模式,所有开机自启服务的软链接存放在什么目录下?
1
ls /etc/systemd/multi-user.target.wants/
10. 在CentOS中执行什么命令可以查看当前系统中所有已经激活的系统服务?
1
systemctl list-units -t service
11. Linux操作系统通用的命令行格式是什么?
1
命令字   [选项]   [参数]
12. 列表对比Linux操作系统下获取命令帮助的方法
1
2
3
help
--help
man
13. 操作命令选项的时候"-"和"--"的区别是什么?
1
2
-  # 短格式选项
-- # 长格式选项
14. help和--help分别代表什么意思?
1
2
help #内部命令帮助
--help # 外部命令帮助
15. 重定向符的作用是什么?
1
将标准输出结果保存到文件中
16. 列表对比pwd、cd、ls、du命令的作用、命令格式、常用选项
命令作用格式常用选项
pwd显示当前所在工作目录pwdpwd
cd切换工作目录cd 目标位置cd 目标位置
ls列表显示目录内容ls-l -a -A -d -h -R -color
du统计目录及文件空间占用情况du [选项] [文件或目录]-a -h -s
17. 绝对路径与相对路径的区别是什么?
1
2
3
4
5
参照物不同
# 绝对路径 --以根目录为参照物
/opt/clash
# 相对路径 --以opt目录为参照物
./clash
18. 常见相对路径的表现形式有哪几种?
1
2
3
./opt
../opt
~opt
19. 如何查看系统存在哪些别名命令?
1
alias
20. 当目标文件存在时,使用touch命令创建该文件,命令执行结果是什么?
1
没有执行结果
21. 列表比较软链接与硬链接的区别
软链接硬链接
删除原始文件后失效依旧可用
使用范围适用于文件或目录只可用于文件
保存位置与原始文件可以位于不同的文件系统中必须与原始文件在同一个文件系统(如一个Linux分区)内
22. 在刚装好的linux系统上使用`mkdir /test/lol/dark`命令,是否会成功,原因是什么?
1
不会成功,因为不能递归创建,如果递归创建需要加-p参数
23. 列表对比cp、rm、mv命令的作用、命令格式、常用选项
命令作用格式常用选项
cp复制文件或目录cp [选项] 源文件或目录 目标文件或目录-f -i -p -r
rm删除文件或目录rm [选项] 要删除的文件或目录-f -i -r
mv移动文件或目录mv [选项] 源文件或目录 目标文件或目录
24. cp复制目录的时候总提示失败,分析原因可能有哪些?
1
目录里有文件需要递归复制
25. rm删除目录失败,需要附加什么选项?
1
-f/-rf
26. mv命令除了移动对象以外还有什么作用?
1
重命名
27. find命令与which命令的区别是什么?
1
2
which # 搜索范围由环境变量PATH决定
find # 采用递归方式,根据目标的名称,类型,大小等不同属性进行精细查找
28. find命令的语法与主要选项都有哪些?各选项的作用是什么?
1
2
3
4
find [查找范围] [查找条件表达式]
-name # 名称
-type # 类型
-size # 大小
29. 如何用一条命令查找出文件大小大于10k并且名字以chain开头的文件
1
find / -name chain* -a -size -10k
30. 在Linux命令行中按Ctrl+L组合键的作用是什么?
1
清屏=clear
31. 获得Linux命令的在线帮助的方式有哪些?简述各自的特点和区别?
帮助命令特点区别
man提供详细的命令使用说明和选项信息.包含详尽的信息,适用于深入学习命令.可能不包含最新的命令选项.
info提供与man类似,但可能更详细的信息,支持超链接.信息组织结构类似于网页,用于浏览相关命令的详细信息及其上下文.
--help快速获取命令的基本用法和可用选项的简要说明.用于快速查阅命令的基本信息,通常在命令后直接使用.
whatis显示一条命令的简短描述.提供命令的简单概述,适用于快速理解命令的基本功能.
/usr/share/doc/浏览特定软件包提供的文档.包含特定软件包的额外文档,使用文件浏览器或命令行工具查看.
在线资源访问互联网上的资源,如官方文档、论坛和教程.提供最新和最全面的信息,需要互联网连接.
32. 在Linux命令行下执行"ls -ld"命令的作用是什么?
1
2
-l # 显示文件和目录的详细资料
-d # 将目录名像其它文件一样列出,而不是列出它们的内容
33. 执行什么命令可以分别统计/boot目录中所有文件、子目录各自占用的空间大小?
1
du -sh /boot/*
34. 依次执行什么命令可以为文件/bin/bzip2 创建一个软链接文件/bin/wx/bzip2 ?
1
ln -s /bin/zip2 /bin/wx/bzip2
35. 执行什么命令可以把目录/boot/grub、文件/etc/apg.conf复制到当前目录下的public_html文件夹中?
1
cp /boot/grub /etc/apg.conf ./public_html/ -r
36. 在Linux命令行中执行"echo $PATH"命令的作用是什么?
1
2
# 输出系统环境变量
echo $PATH
37. 执行什么命令可以在/etc目录下查找"超过1024KB"和"名称以.conf结尾"的文件?
1
find /etc/ -name *.conf -a -size -1024k
38. 列表对比Linux系统下可以查看文件内容命令的作用、命令格式、常用选项
命令作用格式选项
cat显示出文件的内容cat [选项] 文件名-n -b
more全屏方式分页显示文件内容more [选项] 文件名enter 空格 q
lessmore命令相同,但扩展功能更多less [选项] 文件名page up/page down/ "/"/n/N
wc统计文件中的单词数量等信息wc [选项] 目标文件-l -w -c
head查看文件开头的一部分内容(默认为10行)head -n 文件名-n
tail查看文件结尾的少部分内容(默认为10行)tail [选项] [文件名]-n -f
grep在文件中查找并显示包含指定字符串的行grep [选项] 查找条件 目标文件-i -v
39. 使用grep命令过滤文件内容时"\^"、"\$"与"\^$"分别表示什么作用?
1
2
3
^  # 以····开头
$ # 以····结尾
^$ # 表示空行
40. 如何得到httpd.comf文件中除去注释和空行后的有效信息?
1
cat /etc/httpd/conf/httpd.conf | grep -v ^$ |grep -v ^.*#