总字符数: 17.62K
代码: 9.21K, 文本: 8.41K
预计阅读时间: 35 分钟
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并不会输入一个字符,而是被当作了一个命令.
以下是常用的几个命令:
i切换到输入模式,以输入字符.x删除当前光标所在处的字符.:切换到底行命令模式,在最底下一行输入命令.
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 | 包全名: httpd-2.2.15-15.el6.centos.1.i686.rpm |
每部分的具体含义如下:
- 软件包名称 (
httpd): 这是软件包的基本名称,通告了用户这是哪个软件的包. - 软件版本号 (
2.2.15): 表示该软件包含的软件版本,有助于用户了解软件的功能和兼容性. - 软件发布次数 (
15): 该数字通常代表软件包维护者的修订次数,有时候也包含安全补丁和重要更新. - 适合的Linux发行版 (
el6.centos): 这表明了软件包是为哪个Linux发行版或版本定制的,有时候包括了适合的系统版本. - 适合的硬件架构 (
i686): 告诉用户这个包是为哪种CPU架构编译的,例如i686通常指32位架构的处理器. - RPM包扩展名 (
.rpm): 明确这是一个RPM格式的软件包,告诉用户可以使用RPM兼容的包管理器进行安装和管理.
RPM包依赖性
- 树形依赖:A–>B–>C(最典型的依赖)
- 环形依赖:A–>B–>C–>A
- 模块依赖:模块依赖查询网站
包全名与包名
- 包全名:操作的包是没有安装的软件包时,使用包全名.而且要注意路径(安装)
- 包名:操作已经安装的软件包时,使用包名.是搜索`/var/lib/rpm/中的数据库(执行、卸载)
RPM安装
1 | rpm -ivh 包全名 |
1 | [root@192 Packages]# rpm -ivh httpd- #按tab键就会列出与httpd相关的安装包 |
RPM包升级
1 | rpm -Uvh 包全名 |
卸载
1 | rpm -e 包名 |
1 | [root@192 Packages]# rpm -e httpd |
RPM包管理-其他内容
查询是否安装
1 | [root@192 /]# rpm -q 包名 #查询包是否安装 |
查询软件包详细信息
1 | [root@192 /]# rpm -qi 包名 |
查询包中文件安装位置
1 | [root@192 /]# rpm -ql 包名 |
查询系统文件属于哪个RPM包
1 | [root@192 /]# rpm -qf 系统文件名 |
查询软件包的依赖性
1 | [root@192 /]# rpm -qR 包名 |
RPM包检验(查看被修改的文件)
1 | [root@192 /]# rpm -V 已安装的包名 |
RPM包中文件提取 (文件修复用的)
1 | [root@192 /]# rpm2cpio 包全名 |[\(表示换行)] cpio -idv.文件绝对路径 |
RPM包管理-yum在线管理
用来解决依赖性,自动安装
IP地址配置和网络yum源
1 | [root@192 ~]# ifconfig eth0 192.168.1.156 #临时生效一旦重启,就会失效 ,想要永久修改,查看3.8命令 |
1 | # 切换到存放yum源配置文件的目录 |
在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 | [root@192 yum.repos.d]# yum list #查询所有可用软件包列表 |
安装
1 | [root@192 yum.repos.d]# yum -y install 包名 |
升级
1 | [root@192 yum.repos.d]# yum -y update 包名 |
卸载
1 | [root@192 yum.repos.d]# yum -y remove 包名 |
YUM软件组管理命令
1 | [root@192 yum.repos.d]# yum grouplist #列出所以可用的软件组列表 |
光盘yum源搭建步骤
挂载光盘
1 | [root@192 ~]# mount /dev/cdrom /mnt/cdrom/ #挂载光盘 |
让网络yum源文件失效
1 | [root@192 ~]# cd /etc/yum.repos.d/ |
修改光盘yum源文件
1 | [root@192 yum.repos.d]# vim CentOS-Media.repo |
源码包管理
源码包和RPM包的区别
区别
- 安装之前的区别:概念上的区别
- 安装之后的区别:安装位置不同
RPM包安装位置
是安装在默认位置中:RPM包默认安装路径
| 路径 | 说明 |
|---|---|
/etc/ |
配置文件安装目录 |
/usr/bin/ |
可执行的命令安装目录 |
/usr/lib/ |
程序所使用的函数库保存位置 |
/usr/share/doc/ |
基本的软件使用手册保存位置 |
/usr/share/man/ |
帮助文件保存位置 |
1 | [root@my-think ~]# rpm -q httpd #查询httpd的安装包 |
- 源码包安装位置
安装在指定位置当中,一般是/usr/local/软件名/可以在编译的时候指定位置./configure --prefix=/usr/local/nginx - 安装位置不同带来的影响
RPM包安装的服务可以使用系统服务管理命令(service)来管理
例如的apache的启动方法是
RPM包安装的启动方法
启动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开放防火墙端口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流量(通常是网页服务器的流量)进入服务器.
访问网页服务器: 假设服务器的IP地址是192.168.1.8,您可以通过浏览器访问
http://192.168.1.8.如果httpd已经启动并且防火墙端口已开放,您应该能够看到在/var/www/html目录中的默认网页或您创建的index.html.
源码包的启动方法
启动httpd服务:如果是从源码编译安装的Apache httpd(比如安装到
/usr/local/apache2),那么您需要使用安装路径下提供的控制脚本(如apachectl)来管理服务.1
/usr/local/apache2/bin/apachectl start
开放防火墙端口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流量(通常是网页服务器的流量)进入服务器.
访问网页服务器: 假设服务器的IP地址是192.168.1.8,您可以通过浏览器访问
http://192.168.1.8.如果httpd已经启动并且防火墙端口已开放,您应该能够看到在/var/www/html目录中的默认网页或您创建的index.html.
源码包安装过程
安装准备
- 安装C语言编译器:确保系统中已经安装了C语言编译器,这是编译源码的基础.
- 下载源码包:源码包可以从官方网站下载,例如Apache服务器源码包可从这里下载.
安装注意事项
- 源代码保存位置:推荐保存在
/usr/local/src/. - 软件安装位置:推荐安装在
/usr/local/. - 确定安装过程中是否报错:
- 安装过程中断停止.
- 出现
error、warning或no的提示.
源码包安装过程
下面是基于Linux环境的Apache源码包安装示例:
1 | # 下载源码包:使用FTP或其他方式进行传输 |
源码包的卸载
源码包的卸载十分简单,不需要使用专用的卸载命令.只需直接删除安装目录即可:
1 | # 假设安装目录为/usr/local/apache2 |
- Linux操作系统中名为”sdb6”的分区代表什么意思?
scsi第二块硬盘的第二个分区
- 简述Linux操作系统的基本引导过程
- 开机自检
- MBR引导
- GRUB菜单
- 加载内核
- init进程初始化
- CentOS中第一个运行的进程是什么?
systemctl
- Systemd的常见的单元类型中service与target分表代表什么意思?
1 | service # 描述一个系统服务 |
- 用表格显示Systemd的目标与SysVinit的运行级别对应关系,并说明其含义?
| Systemd | SysVinit | 含义 |
|---|---|---|
| target | 0 | 关机 |
| rescue.target | 1 | 单用户模式 |
| multi-user.target | 3 | 字符端 |
| graphical.target | 5 | 图形化 |
| reboot.target | 6 | 重启 |
- 假如在CentOS中启动并查看apache服务的运行状态的命令分别是什么?
1 | [root@localhost ~]# systemctl start httpd |


- 在CentOS中执行哪几条命令可以将系统运行目标切换至图形化模式?
1 | # 切换到字符界面 |
- 在CentOS中执行什么命令可以将apache服务设置为开机自动启动?
1 | [root@localhost ~]# systemctl enable httpd |


- 若CentOS运行在字符界面模式,所有开机自启服务的软链接存放在什么目录下?
1 | ls /etc/systemd/multi-user.target.wants/ |
- 在CentOS中执行什么命令可以查看当前系统中所有已经激活的系统服务?
1 | systemctl list-units -t service |
- Linux操作系统通用的命令行格式是什么?
1 | 命令字 [选项] [参数] |
- 列表对比Linux操作系统下获取命令帮助的方法
1 | help |
- 操作命令选项的时候”-“和”–”的区别是什么?
1 | - # 短格式选项 |
- help和–help分别代表什么意思?
1 | help #内部命令帮助 |
- 重定向符的作用是什么?
将标准输出结果保存到文件中
- 列表对比pwd、cd、ls、du命令的作用、命令格式、常用选项
| 命令 | 作用 | 格式 | 常用选项 |
|---|---|---|---|
pwd | 显示当前所在工作目录 | pwd | pwd |
cd | 切换工作目录 | cd 目标位置 | cd 目标位置 |
ls | 列表显示目录内容 | ls | -l -a -A -d -h -R -color |
du | 统计目录及文件空间占用情况 | du [选项] [文件或目录] | -a -h -s |
- 绝对路径与相对路径的区别是什么?
1 | 参照物不同 |
- 常见相对路径的表现形式有哪几种?
1 | ./opt |
- 如何查看系统存在哪些别名命令?
alias

- 当目标文件存在时,使用touch命令创建该文件,命令执行结果是什么?
没有执行结果

- 列表比较软链接与硬链接的区别?
| 类型 | 软链接 | 硬链接 |
|---|---|---|
| 删除原始文件后 | 失效 | 依旧可用 |
| 使用范围 | 适用于文件或目录 | 只可用于文件 |
| 保存位置 | 与原始文件可以位于不同的文件系统中 | 必须与原始文件在同一个文件系统(如一个Linux分区)内 |
- 在刚装好的linux系统上使用
mkdir /test/lol/dark命令,是否会成功,原因是什么?
mkdir /test/lol/dark命令,是否会成功,原因是什么?不会成功,因为不能递归创建,如果递归创建需要加-p参数


- 列表对比cp、rm、mv命令的作用、命令格式、常用选项?
| 命令 | 作用 | 格式 | 常用选项 |
|---|---|---|---|
cp | 复制文件或目录 | cp [选项] 源文件或目录 目标文件或目录 | -f -i -p -r |
rm | 删除文件或目录 | rm [选项] 要删除的文件或目录 | -f -i -r |
mv | 移动文件或目录 | mv [选项] 源文件或目录 目标文件或目录 | 无**** |
- cp复制目录的时候总提示失败,分析原因可能有哪些?
目录里有文件需要递归复制
- rm删除目录失败,需要附加什么选项?
1 | -f/-rf |
- mv命令除了移动对象以外还有什么作用?
重命名
- find命令与which命令的区别是什么?
1 | which # 搜索范围由环境变量PATH决定 |
- find命令的语法与主要选项都有哪些?各选项的作用是什么?
1 | find [查找范围] [查找条件表达式] |
- 如何用一条命令查找出文件大小大于10k并且名字以chain开头的文件?
1 | find / -name chain* -a -size -10k |

- 在Linux命令行中按Ctrl+L组合键的作用是什么?
清屏=clear
- 获得Linux命令的在线帮助的方式有哪些?简述各自的特点和区别?
| 帮助命令 | 特点 | 区别 |
|---|---|---|
man | 提供详细的命令使用说明和选项信息. | 包含详尽的信息,适用于深入学习命令.可能不包含最新的命令选项. |
info | 提供与man类似,但可能更详细的信息,支持超链接. | 信息组织结构类似于网页,用于浏览相关命令的详细信息及其上下文. |
--help | 快速获取命令的基本用法和可用选项的简要说明. | 用于快速查阅命令的基本信息,通常在命令后直接使用. |
whatis | 显示一条命令的简短描述. | 提供命令的简单概述,适用于快速理解命令的基本功能. |
/usr/share/doc/ | 浏览特定软件包提供的文档. | 包含特定软件包的额外文档,使用文件浏览器或命令行工具查看. |
| 在线资源 | 访问互联网上的资源,如官方文档、论坛和教程. | 提供最新和最全面的信息,需要互联网连接. |
- 在Linux命令行下执行”ls -ld”命令的作用是什么?
1 | -l # 显示文件和目录的详细资料 |
- 执行什么命令可以分别统计/boot目录中所有文件、子目录各自占用的空间大小?
1 | du -sh /boot/* |

- 依次执行什么命令可以为文件/bin/bzip2 创建一个软链接文件/bin/wx/bzip2?
1 | ln -s /bin/zip2 /bin/wx/bzip2 |

- 执行什么命令可以把目录/boot/grub、文件/etc/apg.conf复制到当前目录下的public_html文件夹中?
1 | cp /boot/grub /etc/apg.conf ./public_html/ -r |

- 在Linux命令行中执行”echo $PATH”命令的作用是什么?
1 | # 输出系统环境变量 |

- 执行什么命令可以在/etc目录下查找”超过1024KB”和”名称以.conf结尾”的文件?
1 | find /etc/ -name *.conf -a -size -1024k |

- 列表对比Linux系统下可以查看文件内容命令的作用、命令格式、常用选项?
| 命令 | 作用 | 格式 | 选项 |
|---|---|---|---|
cat | 显示出文件的内容 | cat [选项] 文件名 | -n -b |
more | 全屏方式分页显示文件内容 | more [选项] 文件名 | enter 空格 q |
less | 与more命令相同,但扩展功能更多 | 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 |
- 使用grep命令过滤文件内容时”^“、”$“与”^$”分别表示什么作用?
1 | ^ # 以····开头 |
- 如何得到httpd.comf文件中除去注释和空行后的有效信息?
1 | cat /etc/httpd/conf/httpd.conf | grep -v ^$ |grep -v ^.*# |
