Linux笔记 Day14---(文件特殊权限SBIT及三种特殊权限的设置;文件隐藏属性chattr,lsattr;文本编辑工具vim)

一、特殊权限SBIT

Sticky BIT,简称 SBIT 特殊权限,可意为粘着位、粘滞位、防删除位

这个就是针对others来设置的了,和 SUID、SGID 两个一样,只是功能不同而已。 SBIT 只针对目录有效,对于目录的作用是:当用户在该目录下建立文件或目录时,仅有自己与 root才有权力删除

位置:其它用户的执行权限位。如果其它用户原本有执行权限,显示为小写t; 否则,显示为大写T;

也就是说,当甲用户以目录所属组或其他人的身份进入 A 目录时,如果甲对该目录有 w、x 权限,则表示对于 A 目录中任何用户创建的文件或子目录,甲都可以进行修改甚至删除等操作。但是,如果 A 目录设定有 SBIT 权限,那就不一样了,甲用户只能操作自己创建的文件或目录,而无法修改甚至删除其他用户创建的文件或目录。

最具有代表的就是/tmp目录,任何人都可以在/tmp内增加、修改文件(因为权限全是rwx),但仅有该文件/目录建立者与 root能够删除自己的目录或文件

[dxk@admin ~]$ ll -d /tmp
drwxrwxrwt. 33 root root 4096 8月   2 09:26 /tmp

可以看到,在其他人身份的权限设定中,原来的 x 权限位被 t 权限占用了,这就表示此目录拥有 SBIT 权限

【例 】

[root@admin tmp]# ll -d /tmp
drwxrwxrwt. 31 root root 4096 8月   2 09:38 /tmp
[root@admin tmp]# su - admin001
上一次登录:六 8月  1 10:38:45 CST 2020从 192.168.126.1pts/1 上
[admin001@admin ~]$ cd /tmp
[admin001@admin tmp]$ touch 001file
[admin001@admin tmp]$ ll 001file
-rw-rw-r--. 1 admin001 admin001 0 8月   2 09:40 001file
[admin001@admin tmp]$ su - admin002
密码:
上一次登录:六 8月  1 11:04:26 CST 2020从 192.168.126.1pts/3 上
[admin002@admin ~]$ cd /tmp
[admin002@admin tmp]$ rm -rf 001file
rm: 无法删除"001file": 不允许的操作
[admin002@admin tmp]$ 

可以看到,虽然 /tmp 目录的权限设定是 777,但由于其具有 SBIT 权限,因此 admin001 用户在此目录创建的文件 001file,admin002 用户删除失败

这里要说明一点的是:如果A目录对其他人具有w、x权限,那么对于A目录来说,其他用户可以删除该目录下的所有文件(即使其他人对这些文件没有任何权限)。而不是说该目录下的文件只有其对应的属组和属主才能删除。 只和其父目录其他人组的权限信息相关

[admin002@admin tmp]$ ll -d dxkdir/    #此目录对任何人都具有r、w、x权限
drwxrwxrwx. 2 dxk dxk 29 8月   2 09:57 dxkdir/
[admin002@admin dxkdir]$ ll file       #文件file对其他人没有任何权限
-rw-rw----. 1 dxk dxk 0 8月   2 09:57 file
[admin002@admin dxkdir]$ rm -i file   #admin002用户可以删除file文件,即使该用户既不是file文件的属主,也不属于该属组
rm:是否删除有写保护的普通空文件 "file"?y

二、SUID/SGID/SBIT权限设置

和我们前面说的rwx差不多,也有两种方式,一种是以字符,一种是以数字

特殊权限位(扩展权限位)

SUID SGID SBIT 对应权限
0 0 0 0
0 0 1 1
0 1 0 2
0 1 1 3
1 0 0 4
1 0 1 5
1 1 0 6
1 1 1 7

其中: 4 为 SUID = u+s ;2 为 SGID =g+s ;1 为 SBIT = o+t

基于八进制方式赋权时,可于默认的三位八进制数字(基本权限位)左侧再加一位八进制数字(扩展权限位);

例如:chmod 1777

【例 1】

字符形式:
授权表示法:直接操作一类用户的几个权限位r,w,x

[root@admin tmp]# ll file 
-rw-r--r--. 1 root root 0 8月   2 10:08 file
[root@admin tmp]# chmod u+s file   #添加SUID
[root@admin tmp]# ll file
-rwSr--r--. 1 root root 0 8月   2 10:08 file
#如果给属主添加x权限,那么属主的x位上便显示小写s
[root@admin tmp]# chmod u+x file
[root@admin tmp]# ll file
-rwsr--r--. 1 root root 0 8月   2 10:08 file
#删除SUID权限
[root@admin tmp]# chmod u-s file     #删除SUID
[root@admin tmp]# ll file
-rwxr--r--. 1 root root 0 8月   2 10:08 file

#添加SGID

[root@admin tmp]# chmod g+x file
[root@admin tmp]# chmod g+s file
#或者 
[root@admin tmp]# chmod g+xs file

#添加SBIT

[root@admin tmp]# chmod o+x file
[root@admin tmp]# chmod o+t file
#或者 
[root@admin tmp]# chmod o+xt file

#同时添加 SUID、SGID、SBIT

[root@admin tmp]# chmod u+xs,g+xs,o+xt file

②赋权表示法:直接操作一类用户的所有权限位rwx

[root@admin tmp]# chmod u=rwxs file
[root@admin tmp]# ll file
-rwsr--r--. 1 root root 0 8月   2 10:08 file
[root@admin tmp]# chmod u=rwxs,g=xs,o=rxt file
[root@admin tmp]# ll file
-rws--sr-t. 1 root root 0 8月   2 10:08 file

删除也是一样的:

[root@admin tmp]# ll file
-rws--sr-t. 1 root root 0 8月   2 10:08 file
[root@admin tmp]# chmod u-rs,g-xs,o-t file 
[root@admin tmp]# ll file
--wx---r-x. 1 root root 0 8月   2 10:08 file

或者:

[root@admin tmp]# chmod u=wx,g=-,o=rx file 

【例 2】数字形式:

#添加SUID

[root@admin tmp]# ll file
--wx---r-x. 1 root root 0 8月   2 10:08 file
[root@admin tmp]# chmod 4305 file    
[root@admin tmp]# ll file
--ws---r-x. 1 root root 0 8月   2 10:08 file

#添加SGID

[root@admin tmp]# chmod 2305 file   

#添加SBIT

[root@admin tmp]# chmod 1305 file   

#同时添加SUID和SGID

[root@admin tmp]# chmod 6305 file   

#同时添加SUID、SGID、SBIT

[root@admin tmp]# chmod 7305 file   

SUID对二进制文件有效,SGID对文件和目录均有效,SBIT只对目录有效

三、文件隐藏属性chattr,lsattr

管理 Linux 系统中的文件和目录,除了可以设定普通权限和特殊权限外,还可以利用文件和目录具有的一些隐藏属性

(一)lsattr命令

在Linux下我们可以用stat命令查看文件的相关属性信息,除了这些属性之外,Linux下的文件还有一些隐藏的属性

用于显示文件或目录的隐藏属性

用法: lsattr [选项] 文件或目录名

常用选项

  • -a:后面不带文件或目录名,表示显示所有文件和目录(包括隐藏文件和目录)
  • -d:如果目标是目录,只会列出目录本身的隐藏属性,而不会列出所含文件或子目录的隐藏属性信息;
  • -R:和 -d 恰好相反,作用于目录时,会连同子目录的隐藏信息数据也一并显示出来。

【例 1】

显示当前目录下的所有非隐藏文件的文件隐藏属性信息

[root@admin ~]# lsattr
---------------- ./test
---------------- ./anaconda-ks.cfg
---------------- ./u.sh
---------------- ./userrecord.txt
---------------- ./UserManage.sh

显示当前目录下的所有文件的文件隐藏属性信息

[root@admin ~]# lsattr -a
---------------- ./.
---------------- ./..
---------------- ./test
---------------- ./.bash_logout
---------------- ./.bash_profile
---------------- ./.bashrc
---------------- ./.cshrc
---------------- ./.tcshrc
---------------- ./anaconda-ks.cfg
---------------- ./.bash_history
---------------- ./u.sh
---------------- ./userrecord.txt
---------------- ./.viminfo
---------------- ./.lesshst
---------------- ./UserManage.sh

【例 2】

查看指定文件的隐藏信息

#对于非目录文件,不添加选项

[root@admin ~]# lsattr file
---------------- file

#如果对于目录文件,加 -d 选项

[root@admin ~]# lsattr -d dir/
---------------- dir/

#递归查看

[root@admin dir]# tree
.
├── dir1
│   ├── d1
│   ├── d2
│   ├── f1
│   └── f2
├── dir2
├── file1
└── file2

4 directories, 4 files
[root@admin dir]# lsattr -R dir1
---------------- dir1/d1

dir1/d1:

---------------- dir1/d2

dir1/d2:

---------------- dir1/f1
---------------- dir1/f2

(二)chattr 命令

专门用来修改文件或目录的隐藏属性,只有 root 用户可以使用

用法: chattr [±=] [属性] 文件或目录名

注:文件的隐藏属性只对ext2/ext3/ext4文件系统完整有效,其他文件系统可能仅支持部分隐藏属性或者根本不支持隐藏属性

+表示给文件或目录添加属性,- 表示移除文件或目录拥有的某些属性,= 表示给文件或目录设定某些属性

下图列出了chattr 命令常用的属性选项及功能:

属性选项 功能
i 如果对文件设置 i 属性,那么不允许对文件进行删除、改名,也不能添加和修改数据,不能做硬链接,不能修改文件名; 如果对目录设置 i 属性,那么只能修改目录下文件中的数据,但不允许建立和删除文件;
a 如果对文件设置 a 属性,那么只能在文件中増加数据,但是不能删除和修改数据,不能做硬链接,不能修改文件名; 如果对目录设置 a 属性,那么只允许在目录中建立和修改文件,但是不允许删除文件;
u 设置此属性的文件或目录,在删除时,其内容会被保存,以保证后期能够恢复,常用来防止意外删除文件或目录。
s 和 u 相反,删除文件或目录时,会被彻底删除(直接从硬盘上删除,然后用 0 填充所占用的区域),不可恢复。
A 文件的atime(access time)不可被修改,这样可以减少磁盘I/O数量,对于笔记本电脑有利于提高续航能力
c 即compresse,文件会自动的经压缩后再存储,读取时会自动的解压
d 即no dump,设定文件不能成为dump程序的备份目标

【例 1】

给文件赋予 i 属性

[root@admin dir]# touch file
[root@admin dir]# chattr +i file
[root@admin dir]# lsattr file
----i----------- file
[root@admin dir]# rm -rf file
rm: 无法删除"file": 不允许的操作      #可以看到当被赋予i属性后即使是root用户也没有权力删除
[root@admin dir]# echo "123" >> file    #也无法追加信息
-bash: file: 权限不够

可以看到,设置有 i 属性的文件,即便是 root 用户,也无法删除和修改数据。

【例 2】为目录赋予 i 属性

[root@admin dir]# mkdir dtest     #创建测试目录dtest
[root@admin dir]# touch dtest/file1        #同时创建测试文件
[root@admin dir]# chattr +i dtest      #给该目录设置i属性
[root@admin dir]# lsattr -d dtest      #查看是否设置成功
----i----------- dtest
[root@admin dir]# cd dtest
[root@admin dtest]# touch file2     #无法在设置有 i 属性的目录中创建新文件
touch: 无法创建"file2": 权限不够
[root@admin dtest]# echo "123" >> file1     #但是可以修改目录下文件的内容
[root@admin dtest]# cat file1
123
[root@admin dtest]# rm -rf file1     #无法在设置有 i 属性的目录中删除文件
rm: 无法删除"file1": 权限不够

一旦给目录设置 i 属性,即使是 root 用户,也无法在目录内部新建或删除文件,但可以修改文件内容

【例 3】 a属性

当有这样的需求:每天自动实现把服务器的日志备份到指定目录。那么这时备份目录可设置 a 属性,变为只可创建文件而不可删除

[root@admin dtest]# mkdir -p /back/log    #建立备份目录
[root@admin dtest]# chattr +a /back/log    #赋予a属性
[root@admin dtest]# lsattr -d /back/log
-----a---------- /back/log
[root@admin dtest]# cp /var/log/messages /back/log		#可以复制文件和新建文件到指定目录中
[root@admin dtest]# rm -rf /back/log/messages 
rm: 无法删除"/back/log/messages": 不允许的操作		#无法删除 

注意,通常情况下,不要使用 chattr 命令修改 /、/dev/、/tmp/、/var/ 等目录的隐藏属性,很容易导致系统无法启动。另外,chatrr 命令常与 lsattr 命令合用,前者修改文件或目录的隐藏属性,后者用于查看是否修改成功

四、Linux文本编辑工具vim

vi编辑器是所有Unix及Linux系统下标准的编辑器,他就相当于windows系统中的记事本一样,它的强大不逊色于任何最新的文本编辑器。他是我们使用Linux系统不能缺少的工具。对Unix及linux系统的任何版本,vi编辑器是完全相同的。

vi/vim编辑器

①vi是Visual Interface的缩写,即可视化接口
②vim是vi iMprove的缩写,即vi的增强版(具有语法着色功能)

vi的重要性:

1)所有的Unix Like系统都会内建vi文本编辑器,其他的文本编辑器则不一定会存在;
2)很多个别软件的编辑接口都会主动呼叫vi (例如crontab, visudo, edquota等指令);
3)vim具有程序编辑的能力,可以主动的以字体颜色辨别语法癿正确性,方便程序设计;
4)因为程序简单,编辑速度相当快速。

系统自带教程:vimtutor

在我们最小化安装的系统中,默认是没有安装vim编辑器的

[root@admin ~]# yum install vim -y

vim的模式及模式间切换

简单来说vim的模式有3种,命令模式、输入模式、末行模式。如果再细分可以分为5种,多一个可视化模式和查询模式,实际上这两种包括在末行模式中了

模式之间切换:
在这里插入图片描述
命令模式:

操作 操作键 功能
光标移动 ↑,↓,←,→ 上、下、左、右
翻页 Page Down或Ctrl+F 向下翻动一整页内容
Page Up或Ctrl+B 向上翻动一整页内容
行内快速跳转 Home键或“^”或数字“0” 跳转至行首
End键或“$”键 跳转至行尾
行间快速跳转 1G或gg 跳转至文件的行首
G 跳转至文件的末行尾
#G 跳转至文件中的第#行
行号显示 :set nu 显示行号
:set nonu 取消显示行号
删除 x或者Del 删除光标处的单个字符
dd 删除当前光标所在行
#dd 删除从光标处开始的#行
d^ 删除当前光标处到行首的所有字符
d$ 删除当前光标处到行尾的所有字符
复制 yy 复制当前行整行的内容到粘贴板
#yy 复制从光标处开始的#行内容
粘贴 p 粘贴到光标处之后
P 粘贴到光标处之前
查询 /word 自上而下查找字符串word
?word 自下而上查找字符串word
n 与查询的方向一致
N 与查询的方向相反

输入模式:

  • 新增 (append)
    a :从光标所在位置后面开始新增内容,光标后的内容随新增内容向后移动。
    A: 从光标所在行的行尾开始新增内容。
  • 插入 (insert)
    i: 从光标所在位置前面开始插入内容,光标后的内容随新增内容向后移动。
    I :从光标所在行的第一个非空白字元前面开始插入内容。
  • 开始 (open)
    o :在光标所在行下新增一行并进入输入模式。
    O: 在光标所在行上方新增一行并进入输入模式

末行模式:

功能 命令 备注
保存文件 :w
:w /tmp/newfile 另存为其他文件
退出vi :q 未修改退出
:q! 放弃对文件内容的修改强制退出
保存并退出 :wq
编辑 :e ~/install 打开新的文件进行编辑
读入文件 :r /etc/passwd 在当前文件中读入其他文件
查找并替换 : s /old/new 将当前行中查找到第一个字符“old”替换为“new”
: s /old/new/g 将当前行中查找到的所有“old”字符串替换为“new”
:#,# s/old/new/g 在行号“#,#”范围内替换所有字符串“old”为“new”
:% s/old/new/g 在整个文件的范围内替换所有的字符串
: s /old/new/c 在替换命令行末尾加入c命令,将对每个替换动作提示用户进行确认

提示:在查找替换时可以使用正则进行匹配

:% s/admin\+/stream/g     

1、 打开文件

①vim /path/to/somefile

[root@admin ~]# vim /etc/passwd

②vim +# :打开文件,并定位于第#行

[root@admin ~]# vim +3 /etc/passwd 

③vim +:打开文件,定位至最后一行

④vim +/PATTERN : 打开文件,定位至第一次被PATTERN匹配到的行的行首

[root@admin ~]# vim +/ro /etc/passwd

2、关闭文件

模式 操作 说明
末行模式下: :q 退出
:wq 保存退出
:q! 强制退出
:w 保存
:w! 强制保存
命令模式下: ZZ 保存退出

3、 移动光标

命令模式下:

功能 操作键 说明
逐字符移动 h 向左
l 向右
j 向下
k 向上
#h 移动#个字符
以单词为单位移动 w 移到下一个单词的词首
e 跳至当前或下一个单词的词尾
b 跳至当前或上一个单词的词首
#w 表示移动#个单词
行内跳转 0 绝对行首
^ 行首第一个非空白字符
$ 绝对行尾
行间跳转 #G 跳转到第#行
G 最后一行

末行模式下:
行间跳转:直接输入行号 回车即可

4、 翻屏

命令模式下:
Ctrl+f:向下翻一屏
Ctrl+b:向上翻一屏
Ctrl+d:向下翻半屏
Ctrl+u:向上翻半屏

5、 删除
①删除单个字符:

  • x:删除光标所在处单个字符
  • #x:删除光标所在处及向后共#个字符

②删除命令:d

  • d命令跟 跳转命令组合使用 如:dw 表示删除光标所在位置到下一个单词词首所有字符
  • #dw,#de,#db :#dw表示 删除当前光标所在处及向后第#个单词词首所有字符
  • dd:删除当前光标所在行
  • #dd:删除包含当前光标所在行内的#行

6、 粘贴

  • p(小写p):如果删除的或复制的为整行内容,则粘贴到光标所在行的下方,如果复制或删除的内容为非整行,则粘贴至光标所在字符的后面
  • P(大写P):如果删除的或复制的为整行内容,则粘贴到光标所在行的上方,如果复制或删除的内容为非整行,则粘贴至光标所在字符的前面

7、 复制(用法同d命令)

命令模式下:

  • yy:复制当前行
  • yw (y#w,ye,y#e,yb,y#b):复制光标当前位置到下个单词词首内容.#代表数字
  • y#G:复制当前位置当#行处的所有内容

末行模式下:

  • StartADD,EndADDy:复制StartADD到EndADDd位置的所有行,例如:10,15d:复制10到15行所有内容 ;
  • +3y:复制当前位置向下3行

8、 修改

用法同删除d命令,先删除然后再改为输入模式

9、替换

  • r:单字符替换,会替换光标选中字符
  • R:替换模式,可以做字符替换。

10、 撤销操作

  • u:撤销前一次编辑操作
  • #u:直接撤销#次操作
  • Ctrl+r:恢复最近一次撤销操作

11、 重新前一次编辑操作

.:比如 上一次dd删除了一行,现在输入.就可以重复dd删除行的操作

12、 可视化操作

在图形界面的操作系统中的文字编辑器,用户可以使用鼠标来选择要操作的文本,非常方便。在 Vim 编辑器中也有类似的功能,但不是通过鼠标,而是通过键盘来选择要操作的文本。

在 Vim 中,如果想选中目标文本,就需要调整 Vim 进入可视化模式,如下图所示,通过在 Vim 命令模式下键入不同的键,可以进入不同的可视化模式。

命令 功能
v(小写) 又称字符可视化模式,此模式下目标文本的选择是以字符为单位的,也就是说,该模式下要一个字符一个字符的选中要操作的文本;键盘控制光标划过的区域被选取
V(大写) 又称行可视化模式,此模式化目标文本的选择是以行为单位的,也就是说,该模式化可以一行一行的选中要操作的文本;键盘控制光标划过的行被选取
Ctrl+v(组合键) 又称块可视化模式,该模式下可以选中文本中的一个矩形区域作为目标文本,以按下 Ctrl+v 位置作为矩形的一角,光标移动的终点位置作为它的对角。

Vim 成功进入可视化模式的标志:

①字符可视化模式:窗口底部出现 --VISUAL-- 标志
②行可视化模式:窗口底部出现 --VISUAL LINE–标志
③块可视化模式:窗口底部出现 --VISUAL BLOCK–标志

13、查找

末行模式下:

  • /PATTERN:从当前位置向后查找
  • ?PATTERN:从当前位置向前查找
  • n:向下查找
  • N:向上查找

14、查找并替换

在末行模式下使用s命令

  • ADDR1,ADDR2 s/PATTERN/String/gic
  • ADDR1,ADDR2 表示地址;比如1,$表示全文 (%也表示全文)
  • g:表示全局替换
  • i:表示忽略大小写
  • PATTERN:查找的匹配模式,可以使用正则表达式进行查找匹配
  • c :替换时显示是否替换的确认信息(交互)

15、 与shell交互

末行模式下:

! command即可

例如: ! ls /etc/:会列出/ect目录下所有文件及目录 按enter后回到vim编辑状态

16、 高级操作

在末行模式下:
在 Vim 末行模式下,通过 “:set nu” 命令可以让 Vim 显示行号,但只是临时有效,下次使用 Vim 编辑文件还是不显示行号。在编辑配置文件中设置 Vim 的方式,对 Vim 的设置是永久的

①显示或取消行号
set nu(set number):显示行号
set nonu:取消显示行号

②显示忽略或区分字符大小写
set ic (set ignorecase):忽略大小写
set noignorecase:区分大小写

③设定自动缩进
set ai(set autoindent):自动缩进
set noai:取消自动缩进

④查找到的文本高亮或取消高亮显示
set hlsearch:高亮显示搜索到的文本
set nohlsearch:取消高亮显示搜索到的文本

⑤语法高亮
syntax on:打开语法高亮显示
syntax off:关闭语法高亮显示

⑥突出显示当前行
set cursorline

⑦设置 Tab 键宽度
set tabstop=4 设置 Tab 键宽度为 4 个空格

⑧启动鼠标
set mouse=a
set selection=exclusive
set selectmode=mouse,key
Vim 编辑器里默认是不启用鼠标的,通过此设置即可启动鼠标

如果是使用vim打开文件,并在末行模式下输入以上环境设置参数,那么只对当前vim打开的文件生效。要想永久生效可以将以上Vim环境设置参数写入到以下vim配置文件中

17、 vim配置文件(CentOS 7)

  • 全局(系统)vim配置文件:/etc/vimrc
    #文件中为vim编辑器的相关设置和参数信息,若要vim编辑器的设置在全局生效则需写入该文件中
  • 用户vim配置文件:~/.viminfo
    #该文件会记录用户使用vim编辑器打开文件的各种命令和操作。可以在文件中对用户的vim编辑器进行个性化的设置;由于是在家目录下所以这些设置只对该用户生效

注意,Vim 用户配置文件比系统配置文件的优先级高,换句话说,Vim 启动时,会优先读取 Vim 用户配置文件(位于主目录中的)

[root@admin ~]# echo "set nu" >> /root/.viminfo # root用户用vim打开文件时,显示行号

vim练习:

写出下列要求要执行的命令,如果是在末行模式下执行,需写出“:”号,注意大小写。(在命令模式下输入冒号: ,便进入末行模式)

  1. 向后搜索字符串stream
    进入命令模式下,输入 :/stream 回车,按n键,向文件后跳转到下一个stream字符串处
    或者输入:?stream 回车,按N键也可以实现同样效果

    说明:查找位置是从你输入查找命令之前光标所在位置开始;/ 表示自上而下查找 ,?表示自下而上查找;执行后,查找到的字符串将高亮显示;n键表示跳转到与文件搜索顺序相同的下一个stream字符串处,N键表示跳转到与搜索相反顺序的下一个stream字符串处

  2. 向前搜索字符串uplook
    进入命令模式下,输入 :/uplook 回车,按N键,向文件首部位置跳转到上一个uplook字符串处
    或者输入:?uplook 回车,按n键也可以实现同样效果

  3. 复制10行然后粘贴

    进入命令模式下,将光标定位到要复制所在10行中的第一行(这10行必须是连续的),输入10yy,然后将光标定位到要粘贴到的地方的上一行按下 p 键(小写p,是将粘贴板的内容复制到光标所在行的下一行)即可实现

  4. 将光标移到第55行

    进入命令模式,输入 55G 即可实现 或 在命令模式下输入 :55 回车即可

  5. 将光标移到最末行

    进入命令模式,输入 G 即可实现

  6. 删除共20行

    进入命令模式,将光标定位到要删除的20行(该20行必须是连续的)中的第一行,输入 20dd 即可删除这连续的20行(包括删除光标所在行)

  7. 恢复前一步的操作

    在命令模式下输入u 即可实现撤销

  8. 将光标移到行首

    在命令模式下,按0 键或 Home 键或输入 ^

  9. 将光标移到行尾

    在命令模式下,按End 键或输入 $

  10. 将从第10行到第50行的内容写入/back/file1

    在命令模式下输入 :10,50w /back/file1 回车即可。这里会将第10行和第50行的内容也会写入,所以总共是41行

:10,50w /back/file1    #输入后回车执行
"/back/file1" [] 41L, 2009C 已写入   #这里会有提示信息,新文件file1,41行,2009个 字符
  1. 将从当前行开始,总共20行的内容存入/back/file2

    在命令模式下输入 :.,+19w /back/file2 回车即可。这里会将当前行及以后的19行(总共20行)的内容写入到file2文件中;这里的当前行是指光标所在行

:.,+19w /back/file2
"/back/file2" [] 20L, 872C 已写入       
  1. 读取/tmp/hello.txt文件的内容插入当前行后面

    在命令模式下输入 :r /tmp/hello.txt 回车即可,这里的当前行是指光标所在行(会插入到当前行的下一行)

  2. 替换第20行到第80行中的所有httpd为bind

    在命令模式下输入 :20,80 s/httpd/bind/g 回车即可

    :s /old/new 表示 将当前行中查找到第一个字符“old”替换为“new”
    :#,# s/old/new/g 表示 在行号“#,#”范围内替换所有字符串“old”为“new”
    :% s/old/new/g 表示 在整个文件的范围内替换所有的字符串
    :s /old/new/c 在替换命令行末尾加入c命令,将对每个替换动作提示用户进行确认

 在末行模式下使用s命令:
 
	:ADDR1,ADDR2 s/PATTERN/String/gi
	
	
	ADDR1,ADDR2 表示地址;比如1,$表示全文 (%也表示全文)
	PATTERN:查找的匹配模式,可以使用正则表达式进行查找匹配
	s:查找并替换操作
	g:表示全局替换,不加g表示只替换在每行查找到的第一个字符串
	i:表示忽略大小写


  1. 替换文中全部的root为admin

    在命令模式下输入:% s/root/admin/g回车即可

  2. 在每一行的行首插入字符串new

    在命令模式下输入:% s/^/new/g回车即可

  3. 在第10行到第50行的行尾插入字符串new

    在命令模式下输入:10,50 s/$/new/g回车即可

  4. 让vi显示每一行的行号

    在命令模式下输入:set nu回车即可

猜你喜欢

转载自blog.csdn.net/weixin_45880055/article/details/107740670