Vim编辑器和恢复ext4下误删除的文件-Xmanager工具

it2026-02-11  13

Vim编译器和Xmanager工具的使用

1 vim主要模式介绍,vim命令模式1.1 vim编辑器模式1.2 在命令模式下做的操作:1.3 V模式(列)1.4 命令行模式操作1.5 自定义vim使用环境1.6 其它编辑器1.7 实战1:在windows中编辑好的汉字文本文档,上传到Linux下打开乱码。1.8 实战2:解决将公司Linux服务器上脚本导到windows上打开串行的问题 2 实战:在Centos6/RHEL6上恢复ext4文件系统下误删除的文件2.2 实战:在ext4文件系统上恢复被误删除的文件2.3 复制一些测试文件,然后把这些文件再删除,然后演示恢复:2.4 安装extundelet2.5 开始恢复:

1 vim主要模式介绍,vim命令模式

确保系统已经安装了VIM工具 [root@localhost ~]# rpm -qf `which vim` [root@localhost ~]# rpm -qf `which vi` 扩展: 问:vi和vim是同一个软件包安装的吗? 答:NO,vim是vi的增加版,最明显的区别就是vim可以语法加亮,它完全兼容vi

1.1 vim编辑器模式

首次进入文件 ---- 命令模式 出现 “Insert” ---- 编辑模式 输入: ---- 命令行模式 A:从编辑模式到命令行模式怎样切换? 编辑模式->esc->命令模式->: ->命令行模式 B:字符操作(怎样进入编辑模式?) 进入编辑模式 a i o A I O 说明: i 当前字符之前插入 (光标前) I 行首插入 (行首) a 当前字符之后插入 (光标后) A 行尾插入(行尾) o下一行插入 (另起一行) O上一行插入(上一行插入) x 向后删除一个字符 等同于delete X 向前删除一个字符 u 撤销一步 每按一次就撤销一次 r 替换

1.2 在命令模式下做的操作:

光标定位 hjkl 左下上右 0 和 home键表示切换到行首, 和 e n d 键 表 示 切 换 到 行 尾 g g 快 速 定 位 到 文 档 的 首 行 , G 定 位 到 未 行 3 g g 或 者 3 G 快 速 定 位 到 第 3 行 / s t r i n g ( 字 符 串 ) − − − − − 找 到 或 定 位 你 要 找 的 单 词 或 内 容 , 如 果 相 符 内 容 比 较 多 , 我 们 可 以 通 过 N 、 n 来 进 行 向 上 向 下 查 找 , 并 且 v i 会 对 查 找 到 的 内 容 进 行 高 亮 显 示 , 取 消 用 : n o h / d − − − − 意 思 表 示 以 什 么 开 头 , , 查 找 以 字 母 d 开 头 的 内 容 / t 和end键表示切换到行尾 gg 快速定位到文档的首行 , G定位到未行 3gg 或者 3G 快速定位到第3行 /string(字符串) -----找到或定位你要找的单词或内容,如果相符内容比较多,我们可以通过N、n来进行向上向下查找,并且vi会对查找到的内容进行高亮显示,取消用 :noh /^d ----^意思表示以什么开头 ,,查找以字母d开头的内容 /t endgg,G3gg3G3/string()Nnvi:noh/dd/t -----$意思表示以什么结尾,,查找以字母t结尾的内容 vim + a.txt 打开文件后,光标会自动位于文件的最后一行

如何对文本进行编辑 删除、复制、粘贴、撤销 y 复制(以字符为单位) :表示对单个字符进行复制,如果要复制整行,用yy(以行为单位) 复制N行: Nyy ,比如: 2yy ,表示复制2行 dd(删除,以行为单位,删除当前光标所在行) 删除N行: Ndd ,比如: 2dd ,表示删除2行 p : P粘贴 剪切: dd x 删除光标所在位置的字符 D 从光标处删除到行尾 u 撤销操作 ctrl+r 还原撤销过的操作,将做过的撤销操作再还原回去,也就是说撤销前是什么样,再还原成什么样 r 替换,或者说用来修改一个字符

vim如何进入其它模式 a A o O i I 都是可以进行插入,编辑模式 : 进入命令行模式 v 进入可视模式 ctrl+v 进入可视块模式 V 进入可视行模式 R 擦除、改写,进入替换模式 你进入以上模式后,想要退出 ,按esc

扩展:插入模式中的操作 ctrl+p可以进行补全操作,所需要的内容必须是在当前打开的文件内存在的,它只针对当前文件

1.3 V模式(列)

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

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

1.4 命令行模式操作

:w 保存 save :w! 强制保存 :q 没有进行任何修改,退出 quit :q! 修改了,不保存,强制退出 :wq 保存并退出 :wq! 强制保存并退出 :x 保存退出 例: wq! 强制保存并退出 [root@localhost ~]# ll /etc/shadow ----------. 1 root root 1179 9月 19 12:57 /etc/shadow [root@localhost ~]# vim /etc/shadow

调用外部文件或命令 假设:我想要写入我的网卡MAC地址,我要查看一下,当前在vim编辑文档,照着写。这样好麻烦。 在命令行模式下操作: :!ifconfig 调用系统命令 !+命令 读取其他文件。(把其他文件中的内容追加到当前文档中) :r /etc/hosts

文本替换 格式 : 范围(其中%所有内容) s分隔符 旧的内容 分隔符 新的内容 (分隔符可以自定义) 默认是每一行的第一个符合要求的词 (/g全部) :1,3 s/bin/xuegod 替换第1到3行中出现的第一个bin进行替换为xuegod :1,3 s/bin/xuegod/g 替换第1到3行中查找到所有的bin进行替换为xuegod :3 s/xue/aaaaa #只把第3行中内容替换了 :% s/do/xuegod/g 将文本中所有的do替换成xuegod :% s/do/xuegod/gi 将文本中所有的do替换成xuegod, 并且忽略do的大小写 :% s@a@b@g 将文本中所有的a替换成b

1.5 自定义vim使用环境

临时设置 :set nu 设置行号 :set nonu 取消设置行号 :noh 取消高亮显示 永久设置环境 vim /etc/vimrc 设置后会影响到系统所有的用户 ~/.vimrc #在用户的家目录下,创建一个.vimrc。这样只影响到某一个用户,没有自己建一个 例: [root@localhost ~]# cat /root/.vimrc set nu [root@localhost ~]# vim /root/.vimrc

vim打开多个文件 方法1:以上下形势,打开两个文档 [root@localhost ~]# vim -o /etc/passwd /etc/hosts

方法2:以左右方式打开两个文档 [root@localhost ~]# vim -O /etc/passwd /etc/hosts 注:ctrl+ww 在两文档之间进行切换编辑。大写O左右分屏,小写的o上下分屏 比较两个文件内容 [root@localhost ~]# cp /etc/passwd mima.txt [root@localhost ~]# echo aaa >> mima.txt [root@localhost ~]# diff /etc/passwd mima.txt 40a41 > aaa [root@localhost ~]# vimdiff /etc/passwd mima.txt

1.6 其它编辑器

nano编辑器 emacs编辑器 GHOME编辑器gedit 例: [root@localhost ~]# gedit /etc/passwd

1.7 实战1:在windows中编辑好的汉字文本文档,上传到Linux下打开乱码。

实验环境:centos7.4 现在系统默认使用的语言是汉语。(系统中必须安装好中文包)。 将同目录下“a此文件在windows下打开正常-到linux下vim打开是乱码.txt”上传到Linux服务器上。使用ssh远程连接到Linux上,使用vim打开显示乱码。 原因:编码的问题 通过iconv命令转码 没有使用过:1 参数: -f, --from-code=名称 原始文本编码 -t, --to-code=输出编码 -o, --output=FILE 输出文件名 [root@localhost ~]# mkdir test #创建一个测试目录 [root@localhost ~]# cd test/ 将测试的文件上传到Linux服务器上: [root@localhost ~]# iconv -f gb2312 -t utf8 a此文件在windows下打开正常-到linux下vim打开是乱码.txt -o aa.txt [root@localhost ~]# cat aa.txt #!/bin/bash echo “我要学IT” 信息: -l, --list 列举所有已知的字符集

1.8 实战2:解决将公司Linux服务器上脚本导到windows上打开串行的问题

原因:因为windows和linux处理回车方法不同。 上传” b在Linux编辑的文档到windows下没有换行.sh” 到Linux上,打开后正常显示 [root@localhost test]# sz b在Linux编辑的文档到windows下没有换行.sh #发送到本地 在window 上打开显示:

解决方法: [root@localhost ~]# rpm -ivh /mnt/Packages/dos2unix-6.0.3-7.el7.x86_64.rpm 注: 在centos7上,unix2dos这个命令已经被集成到dos2unix-6.0.3-7.el7.x86_64.rpm包中。在centos6下需要安装unix2dos.xxx.rpm。 [root@localhost test]# unix2dos b在Linux编辑的文档到windows下没有换行.sh [root@localhost test]# sz b在Linux编辑的文档到windows下没有换行.sh #发送到windows本地 显示正常。

注:dos2unix 这个命令是把windows下的回车转成linux类型。

2 实战:在Centos6/RHEL6上恢复ext4文件系统下误删除的文件

[root@localhost ~]# rm -Rf / #执行不成功的, rm:"/" 进行递归操作十分危险 rm: 使用 --no-preserve-root 选项跳过安全模式 [root@localhost ~]# rm -rf /* #这个可以执行成功。 呵呵。。。 ext4文件系统上删除文件,可以恢复: extundelete ,ext3恢复使用:ext3grep windows恢复误删除的文件: final data v2.0 汉化版 和 easyrecovery 扩展: Linux文件系统由三部分组成:文件名,inode,block windows也由这三部分组成。 a.txt -->inode --> block 文件名 存放文件元数据信息 真正存放数据 查看文件文件名: [root@localhost ~]# cp /etc/passwd a.txt [root@localhost ~]# ls a.txt a.txt 查看inode号: 常识: 每个文件,有一个inode号。 [root@localhost ~]# ls -i a.txt 440266 a.txt 查看inode中的文件属性; 通过stat命令查看inode中包含的内容 [root@localhost ~]# stat a.txt #查看inode信息: [root@localhost ~]# ls -l a.txt -rw-r--r-- 1 root root 1720 Oct 25 10:21 a.txt block块:真正存储数据的地方 逻辑删除: 为什么删除比复制快?

误删除文件后,第一件事要做什么??? 你不心删除把存了几十年的大片删除了。 避免误删除的文件内容被覆盖。 如何避免? 卸载需要恢复文件的分区或以只读的方式挂载

2.2 实战:在ext4文件系统上恢复被误删除的文件

下载extundelete http://sourceforge.net/ 开源软件发布中心 准备测试分区: [root@localhost /]# fdisk /dev/sda #创建一个sda4分区 WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): p #查看现有分区表 Disk /dev/sda: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000b8b35 Device Boot Start End Blocks Id System /dev/sda1 * 1 26 204800 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 26 1301 10240000 83 Linux /dev/sda3 1301 1428 1024000 82 Linux swap / Solaris Command (m for help): n #创建一个新分区 Command action e extended p primary partition (1-4) p #创建一个主分区 Selected partition 4 First cylinder (1428-2610, default 1428): Using default value 1428 Last cylinder, +cylinders or +size{K,M,G} (1428-2610, default 2610): +1G #指定分区大小 Command (m for help): w #保存 The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks. [root@localhost ~]#reboot 或 [root@localhost ~]# partx -a /dev/sda #获得新分区表 扩展: 如果在根下删除文件了,想恢复,怎么办? 方法1: 立即断电,然后把磁盘以只读方式,挂载到另一个电脑中进行恢复 方法2:把extundelete在虚拟机上(虚拟机系统要和服务器版本一样),提前安装好后再复制到U盘中,把U盘插入服务器,恢复时,恢复的文件要保存到U盘中,(不要让恢复的数据写到/下,那样会覆盖之前删除的文件) 使用新的分区表: [root@localhost /]# mkdir /tmp/sda4 #创建挂载点 [root@localhost ~]# mkfs.ext4 /dev/sda4 #格式化 [root@localhost ~]# mount /dev/sda4 /tmp/sda4/ #挂载

2.3 复制一些测试文件,然后把这些文件再删除,然后演示恢复:

[root@localhost ~]# cp /etc/passwd /tmp/sda4/ [root@localhost ~]# cp /etc/hosts /tmp/sda4/ [root@localhost ~]# echo aaa > a.txt [root@localhost ~]# mkdir -p /tmp/sda4/a/b/c [root@localhost ~]# cp a.txt /tmp/sda4/a/ [root@localhost ~]# cp a.txt /tmp/sda4/a/b/ [root@localhost ~]# touch /tmp/sda4/a/b/kong.txt 安装tree命令: [root@localhost ~]# rpm -ivh /mnt/Packages/tree-1.5.3-2.el6.x86_64.rpm [root@localhost ~]# tree /tmp/sda4/ /tmp/sda4/ ├── a │ ├── a.txt │ └── b │ ├── a.txt │ ├── c #空目录 │ └── kong.txt #空文件 ├── hosts ├── lost+found └── passwd 删除文件: [root@localhost ~]# cd /tmp/sda4/ [root@localhost sda4]# ls a hosts lost+found passwd [root@localhost sda4]# rm -rf a hosts passwd 误删除文件后,第一件事要做什么??? 如何避免误删除的文件内容被覆盖??? 卸载需要恢复文件的分区:或以只读的方式挂载 [root@localhost ~]#cd /root [root@localhost ~]# umount /tmp/sda4

2.4 安装extundelet

上传extundelete到linux中: 从windows上传extundelete文件到linux,安装xmanager v5 或者CRT [root@localhost ~]# rpm -ivh /mnt/Packages/lrzsz-0.12.20-27.1.el6.x86_64.rpm 安装后,就有了rz命令和sz命令 rz : 上传windows中的文件到linux sz :下载,将linux中的文件传到windows 解压并安装extundelet [root@localhost extundelete-0.2.4]# tar jxvf extundelete-0.2.4.tar.bz2 [root@localhost ~]# cd extundelete-0.2.4 [root@localhost ~]# yum install e2fsprogs-devel [root@localhost extundelete-0.2.4]# ./configure #检查系统安装环境 [root@localhost extundelete-0.2.4]# make -j 4 #编译,把源代码编译成可执行的二进制文件。 -j 4 使用4进程同时编译,提升编译速度 或 使用4核CPU同时编译。 [root@xuegod63 extundelete-0.2.4]# make install #安装 install 和cp 有什么区别? install 复制时可以指定权限 cp不可以 例: [root@localhost ~]# install -m 777 /bin/find /opt/a.sh [root@localhost ~]# ll /opt/

2.5 开始恢复:

方法1:通过inode结点恢复 方法二:通过文件名恢复 方法三:恢复某个目录,如目录a下的所有文件: 方法四:恢复所有的文件 [root@localhost ~]# umount /tmp/sda4/ [root@localhost ~]# mkdir test #创建一个目录使用于存放恢复的数据 [[root@localhost ~]# cd test/ 方法1: 通过inode结点查看被删除的文件名字: [root@localhost test]# extundelete /dev/sda4 --inode 2 . 2 lost+found 11 passwd 12 Deleted hosts 13 Deleted a 7313 Deleted 扩展:ext4文件系统的分区根目录的inode值为2,xfs分区根目录的inode值为64 [root@localhost test]# ls -id /boot/ #xfs文件系统 64 /boot/ [root@localhost test]# mount /dev/sda4 /tmp/sda4/ [root@localhost test]# ls -id /tmp/sda4/ 2 /tmp/sda4/ [root@localhost test]# umount /tmp/sda4/ 方法1:通过inode结点恢复 [root@localhost test]# extundelete /dev/sda4 --restore-inode 12 NOTICE: Extended attributes are not restored. Loading filesystem metadata ... 9 groups loaded. Loading journal descriptors ... 63 descriptors loaded. [root@xuegod63 test]# ls RECOVERED_FILES [root@localhost test]# diff /etc/passwd RECOVERED_FILES/file.12 # 没有任何输出,说明一样 方法二,通过文件名恢复 [root@localhost test]# extundelete /dev/sda4 --restore-file passwd [root@localhost test]# diff /etc/passwd RECOVERED_FILES/passwd # 没有任何输出,说明一样 方法三:恢复某个目录,如目录a下的所有文件: [root@localhost test]# extundelete /dev/sda4 --restore-directory a [root@localhost test]# tree RECOVERED_FILES/a/ RECOVERED_FILES/a/ ├── a.txt └── b └── a.txt 下面是原来的目录结构: [root@localhost ~]# tree /root/sda4-back/a/ /root/sda4-back/a/ ├── a.txt └── b ├── a.txt ├── c └── kong.txt

方法四:恢复所有的文件 [root@localhost test]# extundelete /dev/sda4 --restore-all 删除前后的数据:

extundelete在恢复文件的时候能不能自动创建空文件和目录? 答:不能。

最新回复(0)