美文网首页Linux
Linux-Vim 编辑器和恢复 ext4 下误删除文件-Xma

Linux-Vim 编辑器和恢复 ext4 下误删除文件-Xma

作者: 学神来啦 | 来源:发表于2021-08-02 16:26 被阅读0次

    vim 主要模式介绍

    vim 命令模式

    问:vi 和 vim 是同一个软件包安装的吗?

    答:NO,vim 是 vi 的增加版,最明显的区别就是 vim 可以语法加亮,它完全兼容 vi

    查看一个命令,是哪个软件包,安装的:

    [root@xuegod63~]# rpm-qf/usr/bin/vim[root@xuegod63~]# which vim[root@xuegod63~]# rpm-qf `which vim`    #`反引号,esc  按键下的键,反引号中可执行命令[root@xuegod63~]# rpm-qf $(which vi)#$(可执行命令)$()与`` 都可以进行命令替换,命令替换与变量替换差不多,都是用来重组命令行的,先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行

    vim 编辑器的四种操作模式

    1.Vim 常用 4 种模式.

    正常模式(Normal mode,俗称命令模式) ,命令行模式(Command-line mode)

    插入模式(Insert mode ,俗称编辑模式), 可视模式(Visual mode,俗称可视块模式)

    root@xuegod63~]# cp/etc/passwd a.txt[root@xuegod63~]# vim a.txt首次进入文件----正常模式(Normal mode,俗称命令模式)按下 I 键,出现 “Insert”----插入模式(Insert mode  ,俗称编辑模式)按 Esc 键,再输入冒号:----命令行模式(Command-line mode)

    例 1 从编辑模式到命令行模式怎样切换?

    编辑模式->esc->命令模式->: ->命令行模式

    注意在命令模式下,输入命令无效时,检查下输入法是不是中文输入法,切换为英文输入法

    例 2 字符操作(怎样进入编辑模式?)

    进入编辑模式 a i o A I O

    说明:

    i  当前字符之前插入(光标前)I  行首插入(行首)a  当前字符之后插入(光标后)A  行尾插入(行尾)o 下一行插入(另起一行)O 上一行插入(上一行插入)x  向后删除一个字符X  向前删除一个字符等同于  deleteu  撤销一步每按一次就撤销一次ctrl+r  恢复,每按一次就恢复一次r  替换

    在正常模式下做的操作

    1、光标定位

    hjkl左下上右0和 home 键表示切换到行首,  $和 end  键表示切换到行尾gg  快速定位到文档的首行,G  定位到未行3gg  或者3G    快速定位到第3行/string(字符串)-----找到或定位你要找的单词或内容然后敲回车,如果相符内容比较多,我们可以通过 N、n 来进行向上向下查找,并且 vim 会对查找到的内容进行高亮显示,取消高亮用:noh/^d----尖括号^意思表示以什么开头  ,查找以字母 d  开头的内容-----$意思表示以什么结尾,查找以字母 bash  结尾的内容/bash$vim+/etc/passwd  打开文件后,光标会自动位于文件的最后一行。  了解一下这个技巧。vim+23/etc/passwd  打开文件后,光标会自动位于文件的第23行,方便后期排错。如:服务器启动报错,第23,有语法错误。使用 vim+23/etc/passwd 可以快速定位到23行。

    分享心得:我更喜欢 vim 打开文件,然后按 G,跳到最后。 因这个 vim + a.txt

    一段时间肯定会忘。Linux 中有太多的小技巧,大家应该记那些常用的。

    2、在正常模式对文本进行编辑

    删除、复制、粘贴、撤销yy  复制整行复制 N 行: Nyy    ,比如:2yy  ,表示复制2行dd(删除,以行为单位,删除当前光标所在行)删除 N 行: Ndd    ,比如:2dd  ,表示删除2行p  : P  粘贴剪切:  ddx  删除光标所在位置的字符D  从光标处删除到行尾u撤销操作ctrl+r还原撤销过的操作,将做过的撤销操作再还原回去,也就是说撤销前是什么样,再还原成什么样r  替换,或者说用来修改一个字符总结:vim  如何进入其它模式a A  o O    i I 都是可以进行插入,编辑模式:  进入命令行模式ctrl+v  进入可视块模式R  擦除、改写,进入替换模式你进入以上模式后,想要退出  ,按  esc

    Visual mode 可视块模式

    编程或修改服务器配置文件的时候,需要进行多行注释,会使用 Visual 模式。

    1、进入 Visual 模式的批量删除,方法如下:

    删除:再按 ctrl+v 进入可视块模式;向下或向上移动光标 ;选中部分内容,然后按 d, 就会删除注

    释符号。

    例:将 sshd_config 文件中 17 行到 20 行前面的#号删除

    [root@xuegod63~]# vim/etc/ssh/sshd_config

    改:

    为:

    2、进入 Visual 模式的批量修改,方法如下:

    1)、ctrl+v 进入列编辑模式

    2)、向下或向上移动光标,把需要注释、编辑的行的开头选中起来

    4)、然后按大写的 I

    5)、再插入注释符或者你需要插入的符号,比如"#"

    6)、再按 Esc,就会全部注释或添加了

    例:在 sshd_config 文件中 17 行到 20 行前面加一个#号

    [root@xuegod63~]# vim/etc/ssh/sshd_config

    改:

    为:

    命令行模式 Command-line 操作技巧

    1、命令行模式 Command-line 操作技巧

    :w  保存 save:w!强制保存:q  没有进行任何修改,退出 quit:q!修改了,不保存,强制退出:wq  保存并退出:wq!强制保存并退出:x  保存退出:e!复原,恢复到文件打开后,没有进行修改时的状态。 修改了很多,不想保存,想复原,按:e!在正常模式下,按下大写的 ZZ,也可以保存并退出

    例: wq! 强制保存并退出

    [root@xuegod63~]# ll/etc/shadow----------.1root root11799月1912:57/etc/shadow[root@xuegod63~]# vim/etc/shadow

    例 1:调用外部文件或命令

    语法:在命令行模式下输入:!+命令例:在 vim 编辑文档写要写入 MAC  地址。[root@xuegod63~]# cp/etc/passwd a.txt[root@xuegod63~]# vim a.txt:!ifconfig#在 vim 中调用 ifconfig  命令读取其他文件。(把其他文件中的内容追加到当前文档中):r/etc/hosts

    2、文本替换

    格式 : 范围(其中%所有内容) s 分隔符 旧的内容 分隔符 新的内容(分隔符可以自定义)

    默认是每一行的第一个符合要求的词(/g 全部)

    [root@xuegod63~]# vim a.txt:1,3s/bin/xuegod:1,3s/bin/xuegod/g:3s/xue/aaaaa/g#替换第1到3行中出现的第一个 bin 进行替换为  xuegod#替换第1到3行中查找到所有的 bin 进行替换为  xuegod#只把第3行中所有 xue 替换为 aaaaa  了修改 a.txt ,先在文件中随意插入几个do和 DO  字符:%s/do/xuegod/g:%s/do/xuegod/gi#将文本中所有的do替换成  xuegod#将文本中所有的do替换成 xuegod,并且忽略do的大小写:%s@xuegod@do@g    #将文本中所有的 xuegod 替换成do,替换时,也可以使用@做分隔符

    自定义 vim 使用环境

    1、临时设置

    [root@xuegod63~]# vim a.txt:set nu设置行号:set nonu  取消设置行号:noh取消高亮显示

    2、永久设置环境

    vim/etc/vimrc  #设置后会影响到系统所有的用户~/.vimrc  #在用户的家目录下,创建一个.vimrc。这样只影响到某一个用户,没有自己建一个

    例 1:临时定制 vim 开启显示行号功能

    [root@xuegod63~]# echo"set nu">/root/.vimrc[root@xuegod63~]# vim/etc/passwd  #发现默认已经有行号了

    3、vim 打开多个文件

    方法 1:以上下形势,打开两个文档

    [root@xuegod63~]# vim-o/etc/passwd/etc/hosts

    注:输入:qa 一次退出所有打开的文件

    方法 2:以左右方式打开两个文档

    [root@xuegod63~]# vim-O/etc/passwd/etc/hosts

    注:ctrl+ww 在两文档之间进行切换编辑。大写 O 左右分屏,小写的 o 上下分屏

    比较两个文件内容

    [root@xuegod63~]# cp/etc/passwd mima.txt[root@xuegod63~]# echo aaa>>mima.txt

    方法 1:

    [root@xuegod63~]# diff/etc/passwd mima.txt40a41>aaa

    方法 2:

    [root@xuegod63~]# vimdiff/etc/passwd mima.txt

    其它编辑器

    nano 编辑器

    emacs 编辑器

    GHOME 编辑器 gedit

    例:

    [root@xuegod63~]# gedit/etc/passwd

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

    [root@xuegod63~]# rm-rf/#这个可以执行成功吗?执行不成功的,rm:在"/"进行递归操作十分危险rm:使用--no-preserve-root  选项跳过安全模式[root@xuegod63~]# rm-rf/*      #这个可以执行成功。

    ext4 文件系统上删除文件,可以恢复: extundelete ,ext3 恢复使用:ext3grep

    windows 恢复误删除的文件: final data v2.0 汉化版 和 easyrecovery

    xfs 文件系统上删除文件,暂时没有太好的办法进行完全恢复,需要找专业数据恢复公司

    扩展:

    Linux 文件系统由三部分组成:文件名,inode,blockwindows  也由这三部分组成。a.txt-->inode-->block文件名  存放文件元数据信息  真正存放数据

    查看文件文件名:

    [root@xuegod63~]# cp/etc/passwd a.txt[root@xuegod63~]# ls a.txt  a.txt

    查看 inode 号:

    常识: 每个文件,有一个 inode 号。

    [root@xuegod63~]# ls-i a.txt440266a.txt

    查看 inode 中的文件属性; 通过 stat 命令查看 inode 中包含的内容

    [root@xuegod63~]# stat a.txt    #查看 inode  信息:[root@xuegod63~]# ls-l a.txt-rw-r--r--1root root1720Oct2510:21a.txt

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

    逻辑删除:

    为什么删除比复制快?

    误删除文件后,第一件事要做什么??? 你不心删除把存了几十年的大片删除了。

    避免误删除的文件内容被覆盖。 如何避免?

    卸载需要恢复文件的分区或以只读的方式挂载

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

    下载 extundelete

    http://sourceforge.net/

    准备测试分区:

    开源软件发布中心

    先添加一块硬盘

    [root@xuegod63/]# fdisk/dev/sdb  #创建一个 sdb1  分区WARNING:DOS-compatible mode is deprecated.It's strongly recommended toswitchoff themode(command'c')and change display units tosectors(command'u').Command(mforhelp):p#查看现有分区表Disk/dev/sda:21.5GB,21474836480bytes255heads,63sectors/track,2610cylindersUnits=cylinders of16065*512=8225280bytesSectorsize(logical/physical):512bytes/512bytesI/Osize(minimum/optimal):512bytes/512bytesDisk identifier:0x000b8b35Device Boot  Start  End  Blocks  Id  System/dev/sda1*120480083LinuxPartition1does not end on cylinder boundary./dev/sda2/dev/sda3261301142810240000102400083Linux130182Linux swap/SolarisCommand(mforhelp):nCommand action#创建一个新分区eextendedpprimarypartition(1-4)p#创建一个主分区Selected partition4Firstcylinder(1428-2610,default1428):Usingdefaultvalue1428Last cylinder,+cylinders or+size{K,M,G}(1428-2610,default2610):+1G  #指定分区大小Command(mforhelp):w  #保存The partition table has been altered!Callingioctl()to re-read partition table.WARNING:Re-reading the partition table failed with error16:Device or resource busy.The kernel still uses the old table.The new table will be used atthe next reboot or after you runpartprobe(8)orkpartx(8)Syncing disks.[root@xuegod63~]#reboot或[root@xuegod63~]# partx-a/dev/sdb  #获得新分区表

    扩展:

    如果在根下删除文件了,想恢复,怎么办?

    方法 1: 立即断电,然后把磁盘以只读方式,挂载到另一个电脑中进行恢复

    方法 2:把 extundelete 在虚拟机上(虚拟机系统要和服务器版本一样),提前安装好后再复制到 U

    盘中,把 U 盘插入服务器,恢复时,恢复的文件要保存到 U 盘中,(不要让恢复的数据写到/下,那样会覆盖之前删除的文件)

    使用新的分区表:

    [root@xuegod63/]# mkdir/tmp/sdb1  #创建挂载点[root@xuegod63~]# mkfs.ext4/dev/sdb1 #格式化[root@xuegod63~]# mount/dev/sdb1/tmp/sdb1 #挂载

    准备测试环境

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

    [root@xuegod63~]# cp/etc/passwd/tmp/sdb1[root@xuegod63~]# cp/etc/hosts/tmp/sdb1[root@xuegod63~]# echo aaa>a.txt[root@xuegod63~]# mkdir-p/tmp/sdb1/a/b/c[root@xuegod63~]# cp a.txt/tmp/sdb1/a[root@xuegod63~]# cp a.txt/tmp/sdb1/a/b[root@xuegod63~]# touch/tmp/sdb1/a/b/kong.txt安装 tree  命令:[root@xuegod63~]# rpm-ivh/mnt/Packages/tree-1.5.3-2.el6.x86_64.rpm[root@xuegod63~]# tree/tmp/sdb1/tmp/sdb1/├──  a├──  a.txt└──  b├──  a.txt├──  c  #空目录└──  kong.txt  #空文件├──  hosts├──  lost+found└──  passwd

    lost+found

    使用标准的 ext3/ext4 档案系统格式才会产生的一个目录,目的在于当档案系统发生错误时, 将一

    些遗失的片段放置到这个目录下。

    可以删除  rm-rf  lost+found可以创建  mklost+found

    删除文件:

    [root@xuegod63~]# cd/tmp/sdb1/[root@xuegod63 sdb1]# lsa  hosts  lost+found    passwd[root@xuegod63 sdb1]# rm-rf a hosts passwd

    误删除文件后,第一件事要做什么???

    如何避免误删除的文件内容被覆盖???

    卸载需要恢复文件的分区:或以只读的方式挂载

    [root@localhost~]#cd/root[root@localhost~]# umount/tmp/sdb1

    安装 extundelet

    上传 extundelete 到 linux 中:

    从 windows 上传 extundelete 文件到 linux,安装  xmanager v5 或者CRT[root@xuegod63~]# rpm-ivh/mnt/Packages/lrzsz-0.12.20-27.1.el6.x86_64.rpm安装后,就有了rz命令和sz命令 rz:上传 windows 中的文件到  linuxsz  文件名 :下载,将 linux 中的文件传到  windows

    解压并安装 extundelet

    [root@centos63~]#mount/dev/sr0/mnt[root@centos63~]# vim/etc/yum.repos.d/Centos-6.repo[CentOS6]name=CentOS-serverbaseurl=file:///mntenabled=1gpgcheck=0[root@xuegod63]# yum-y install e2fsprogs-devel gcc gcc-c++gcc-g77[root@xuegod63 extundelete-0.2.4]# tar xf extundelete-0.2.4.tar.bz2[root@xuegod63~]# cd extundelete-0.2.4[root@xuegod63 extundelete-0.2.4]#./configure    #检查系统安装环境[root@xuegod63 extundelete-0.2.4]# make-j4#编译,把源代码编译成可执行的二进制文件。-j4使用4进程同时编译,提升编译速度 或  使用4核 CPU  同时编译。[root@xuegod63 extundelete-0.2.4]# make install  #安装install  和 cp 有什么区别?install  复制时可以指定权限  cp  不可以例:[root@xuegod63~]# install-m777/bin/find/opt/find[root@xuegod63~]# ll/opt/

    恢复数据

    方法 1:通过 inode 结点恢复

    方法二:通过文件名恢复

    方法三:恢复某个目录,如目录 a 下的所有文件:

    方法四:恢复所有的文件

    [root@xuegod63~]# umount/tmp/sdb1/[root@xuegod63~]# mkdir test  #创建一个目录使用于存放恢复的数据[root@xuegod63~]# cd test/

    方法 1:

    通过 inode 结点查看被删除的文件名字:

    [root@xuegod63 test]# extundelete/dev/sdb1--inode2lost+found11passwd12Deletedhosts13Deleteda7313Deleted

    扩展:ext4 文件系统的分区根目录的 inode 值为 2,xfs 分区根目录的 inode 值为 64

    [root@xuegod63 test]# ls-id/#xfs  文件系统64/[root@xuegod63 test]# mount/dev/sdb1/tmp/sdb1/[root@xuegod63 test]# ls-id/tmp/sdb1/2/tmp/sdb1/[root@xuegod63 test]# umount/tmp/sdb1/

    方法 1:通过 inode 结点恢复

    root@xuegod63 test]# extundelete/dev/sdb1--restore-inode12NOTICE:Extended attributes are not restored.Loading filesystem metadata...9groups loaded.Loading journal descriptors...63descriptors loaded.[root@xuegod63 test]# lsRECOVERED_FILES[root@xuegod63 test]# diff/etc/passwd RECOVERED_FILES/file.12#没有任何输出,说明一样

    方法二,通过文件名恢复

    [root@xuegod63 test]# extundelete/dev/sdb1--restore-file hosts[root@xuegod63 test]# diff/etc/passwd RECOVERED_FILES/hosts#没有任何输出,说明一样

    方法三:恢复某个目录,如目录 a 下的所有文件:

    [root@xuegod63 test]# extundelete/dev/sdb1--restore-directory  a[root@xuegod63 test]# tree RECOVERED_FILES/a/RECOVERED_FILES/a/├──  a.txt└──  b└──  a.txt下面是原来的目录结构:[root@xuegod63~]# tree/root/sdb1-back/a//root/sdb1-back/a/├──  a.txt└──  b├──  a.txt├──  c└──  kong.txt

    方法四:恢复所有的文件

    [root@centos6 test]# rm-rf RECOVERED_FILES/[root@xuegod63 test]# extundelete/dev/sdb1--restore-all[root@centos6 test]# tree RECOVERED_FILES/删除前后的数据:

    实战:使用 xmanager 等远程连接工具管理 Linux

    1.Linux 下常用远程连接工具介绍

    2.xmanager 使用方法

    安装以后打开

    1、xshell 使用方法

    例 1:连接一台新的服务器

    例 2:调整 xshell 字体大小

    例 3:调整 rz 和 sz 命令的默认路径

    2、xftp 使用方法

    例 1:上传一个文件夹到 Linux 服务器上

    3、xstart 使用方法

    方法 1:使用 xshell 直接运行图形界面的程序

    例 1:[root@xuegod63 ~]# gnome-terminal

    例 2:[root@xuegod63 ~]# firefox &

    方法 2:使用 xstart 调用桌面

    注:使用 MK 给的 xmangaer5 安装后,后期运行,提示更新到新版本, 你不要更新,更新,有可能

    序列号就不能使用了。

    https://www.netsarang.com/zh/free-for-home-school/

    也可以下载官方免费版

    相关文章

      网友评论

        本文标题:Linux-Vim 编辑器和恢复 ext4 下误删除文件-Xma

        本文链接:https://www.haomeiwen.com/subject/leljvltx.html