第七天 vim编辑器的使用与文件误删除恢复

时间:2024-04-17 18:47:26

1.1 查看是否安装vim
rpm -qf ‘which vim’
rpm -qf ‘which vi’ #vim不等于vi,vim是vi的加强版不是同一个包


vim语法 vim [选项] 参数(文件)

vim的几种模式与切换
命令模式 -->esc 编辑模式 -->esc 命令行模式 按esc键切换
首次进入为命令模式 按i进入编辑模式 输入:表示命令行模式

字符操作
进入编辑模式 a i o A I O
i 当前字符之前插入(光标前)
I 行首插入(行首)

a 当前字符之后插入(光标后)
A 行尾插入(行尾)

o 下一行插入(另起一行)
O 上一行插入(上一行插入)

x 向后删一个字符 等同于delete
X 向前上一个字符

u 撤销一步,每按一次就撤销一次

1.2行操作

home键或^ (shift 6) 行首
$ (shift 4)end键 行尾


删除
dd
dd 删除一行 数字+dd 删除多行

如删除5行,使用5dd

删除光标后全部内容 d+G

复制粘贴
yy 复制一行 数字+yy 复制N行
p 将复制行粘贴

扩展:剪切
先删除,再粘贴
删除到行首 d + HOME 或^ (shift+6)
删除到行尾 d + END 或$ (shift+4)

 

1.2-1 V模式
进入v模式 移动光标选择区域、
编程的时候需要进行多行注释:
1、ctrl+v 进入列编辑模式
2向下或向上移动光标
3把需要注释的行的开头标记起来
4然后按大写的I
5再插入注释符,比如"#"。
6再按Esc,就会全部注释了。


删除:再按ctrl+v 进入列编辑模式;向下或向上移动光标 ;选中注释部分,然后按d, 就会删除注释符号。

1.2-2 VIM命令行模式操作

:w 保存 save
:q 没有进行任何修改,退出 quit
:q! 修改了,不保存,强制退出
:wq 保存并退出
:wq! 强制保存并退出。

:!ifconfig 调用系统命令
!+命令

1.3替换
格式: %所有内容 s替换 旧的内容 新的内容
默认是每一行的第一个符合要求的词 (/g全部)

:% s/a/b 每一行的第一个a被替换成b
:% s/a/b/g 将文本中所有的1替换成5


:2,3 s/a/b
/g 全部
#替换2到3行 的5


我们怎么知道是第二行还是第三行呢?
:set nu #显示行号
set nonu #不显示行号


/ 正向查找 :/san n 往下查找,N 往上查找


我想要编辑写入我的网卡地址,但是我忘记了,我要查看一下,当前在vim编辑文档
怎么办呢? 要退出文档吗? 这样好麻烦.

:!ifconfig 调用系统命令
!+命令

定位:
vim中定位到某行:
gg 定位到行首
G 定位到最后一行,行首
#G 定位到某一行
:# 定位到某一行
#gg 定位到某一行
#代表行号


读取其他文件
:r /etc/passwd
保存退出 :wq
1.3-3vim打开多个文件:
[root@xuegod60 ~]# vim -o /etc/passwd /etc/hosts
[root@xuegod60 ~]# vim -O /etc/passwd /etc/hosts
ctrl+ww 在文件之间进行切换

大写O左右分屏,小写的o上下分屏

在windows中编辑好的汉字文本文档,上传到Linux下打开乱码,解决方法
安装工具iconv 安装包名glibc-common

通过iconv命令转码
输入/输出格式规范:

-f, --from-code=名称 原始文本编码
-o, --output=FILE 输出文件
-l, --list 列举所有已知的字符集
GB2312编码适用于汉字处理、
格式: Iconv -f 编码 源文件 -o 转换后文件
[root@xuegod60 ~]# iconv -f gb2312 san.txt -o new.txt¥列如

1.4 数据误删除恢复
删除文件和文件夹
rm -rf 文件名或目录名
-r 递归删除(可以删除目录和目录里面的东西)
-f 强行删除

ext4文件系统上删除文件,可以恢复: extundelete
windows恢复误删除的文件: final data v2.0 汉化版 和 easyrecovery

Linux文件系统由三部分组成:文件名,inode,block


a.txt -->inode -> block
文件名 存放文件元数据信息 真正存放数据

查看inode号:
常识: 每个文件,最少有一个inode号。
[root@xuegod63 ~]# ls -i a.txt
393788 a.txt

查看inode中的文件属性; 通过stat命令查看inode中包含的内容
[root@xuegod63 ~]# stat a.txt #查看inode信息:
File: `a.txt\'
Size: 1720 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 393788 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2015-10-25 10:21:07.368552471 +0800
Modify: 2015-10-25 10:21:02.773527478 +0800
Change: 2015-10-25 10:21:02.773527478 +0800


block块:真正存储数据的地方
块 2M 数据 101M

为什么删除比复制快?
因为删除只删除了文件名,元数据并未被删除
误删除后:为了保证数据不被覆盖丢失,可以把误删除的那个分区卸载或只读挂载(因为写入数据会占用inode号,有可能会覆盖)

stat:查看设备inode号和块大小 ls -i 文件 :查看inode号
编译安装工具 extundelete

安装tree可以查看目录结构 语法 tree 目录

extundelete 恢复方法

开始恢复:
方法1:通过inode结点恢复
方法二:通过文件名恢复
方法三:恢复某个目录,如目录a下的所有文件:
方法四:恢复所有的文件

准备测试文件后
通过inode结点查看被删除的文件名字:
[root@xuegod63 test]# extundelete /dev/sdb1 --inode 2


方法1:通过inode结点恢复
[root@xuegod63 test]# extundelete /dev/sdb1 --restore-inode 12
[root@xuegod63 test]# diff /etc/passwd RECOVERED_FILES/file.12 # 没有任何输出,说明一样

方法二,通过文件名恢复
[root@xuegod63 test]# extundelete /dev/sdb1 --restore-file passwd


方法三:恢复某个目录,如目录a下的所有文件:
[root@xuegod63 test]# extundelete /dev/sdb1 --restore-directory a
[root@xuegod63 test]# tree RECOVERED_FILES/a/
├── a.txt
└── b
└── a.txt

方法四:恢复所有的文件
[root@xuegod63 test]# extundelete /dev/sdb1 --restore-all

[root@xuegod63 test]# tree RECOVERED_FILES/
RECOVERED_FILES/
├── a
│ ├── a.txt
│ └── b
│ └── a.txt
├── hosts
└── passwd

这是删除前的数据:
[root@xuegod63 ~]# tree /tmp/sda4/
/tmp/sda4/
├── a
│ ├── a.txt
│ └── b
│ ├── a.txt
│ ├── c #空目录
│ └── kong.txt #空文件
├── hosts
├── lost+found
└── passwd

extundelete在恢复文件的时候能不能自动创建空文件和目录?
答:不能。
REHL7 xfs系统 可以的
总结:
方法1:通过inode结点恢复
方法二:通过文件名恢复
方法三:恢复某个目录,如目录a下的所有文件:
方法四:恢复所有的文件