zoukankan      html  css  js  c++  java
  • Linux--vim编辑器和文件恢复

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

    本节所讲内容:

    5.1  vim的使用

    5.2  实战:恢复ext4文件系统下误删除的文件

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

     

    5.1  vim主要模式介绍,vim命令模式。

    确保系统已经安装了VIM工具

    [root@panda ~]# rpm -qf `which vim`

    [root@panda ~]# rpm -qf `which vi`

    扩展:

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

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

    5.1.1  vim编辑器模式

     

    首次进入文件    ---- 命令模式

    出现 “Insert” ---- 编辑模式

    输入:          ---- 命令行模式

    A:从编辑模式到命令行模式怎样切换?         

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

    B:字符操作(怎样进入编辑模式?)

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

    说明:

    i 当前字符之前插入 (光标前)

    I 行首插入  (行首)

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

    A 行尾插入(行尾)

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

    O上一行插入(上一行插入)

    x 向后删除一个字符         等同于delete

    X 向前删除一个字符            

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

    r 替换

     

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

    光标定位

    hjkl  左下上右

    0 和 home键表示切换到行首, $和end键表示切换到行尾

    gg 快速定位到文档的首行 ,  G定位到未行

    3gg 或者 3G  快速定位到第3行

    /string(字符串)   -----找到或定位你要找的单词或内容,如果相符内容比较多,我们可以通过N、n来进行向上向下查找,并且vi会对查找到的内容进行高亮显示,取消用 :noh

    /^d  ----^意思表示以什么开头 ,,查找以字母d开头的内容

    /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可以进行补全操作,所需要的内容必须是在当前打开的文件内存在的,它只针对当前文件

     

    5.1..3 V模式(列)

    进入v模式 移动光标选择区域、

    编程的时候需要进行多行注释:
            1)、ctrl+v 进入列编辑模式

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

            4)、然后按大写的I

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

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

     

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

     

    5.1.4 命令行模式操作

    :w 保存 save

    :w! 强制保存

    :q 没有进行任何修改,退出 quit

    :q! 修改了,不保存,强制退出

    :wq 保存并退出

    :wq! 强制保存并退出

    :x 保存退出

    例: wq! 强制保存并退出

    [root@xuegod63 ~]# ll /etc/shadow

    ----------. 1 root root 1179 9月  19 12:57 /etc/shadow

    [root@xuegod63 ~]# 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

     

    5.1.5 自定义vim使用环境

    临时设置

    :set nu  设置行号

    :set nonu 取消设置行号

    :noh   取消高亮显示

    永久设置环境

    vim /etc/vimrc  设置后会影响到系统所有的用户

    ~/.vimrc   #在用户的家目录下,创建一个.vimrc。这样只影响到某一个用户,没有自己建一个

    例:

    [root@xuegod63 ~]# cat  /root/.vimrc 

    set nu

    [root@xuegod63 ~]# vim  /root/.vimrc

     

    vim打开多个文件

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

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

     

    方法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

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

    40a41

    > aaa

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

     

    5.1.6  其它编辑器

    nano编辑器

    emacs编辑器

    GHOME编辑器gedit

    例:

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

     

    5.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@xuegod63 ~]# mkdir test  #创建一个测试目录

    [root@xuegod63 ~]# cd test/

    将测试的文件上传到Linux服务器上:

     

    [root@xuegod63 ~]# iconv -f gb2312  -t utf8 a此文件在windows下打开正常-到linux下vim打开是乱码.txt  -o aa.txt

    [root@xuegod63 ~]# cat aa.txt

    #!/bin/bash

    echo "学神IT"

    信息:
    -l, --list 列举所有已知的字符集

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

    原因:因为windows和linux处理回车方法不同。

    上传” b在Linux编辑的文档到windows下没有换行.sh” 到Linux上,打开后正常显示

    [root@localhost test]# sz b在Linux编辑的文档到windows下没有换行.sh   #发送到本地

    在window 上打开显示:

     

    解决方法:

    [root@xuegod63 ~]# 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类型。

     

    5.2  实战:在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 

     

    扩展:

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

    windows也由这三部分组成。

    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.txt

    440266 a.txt

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

    [root@xuegod63 ~]# stat a.txt   #查看inode信息:

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

    -rw-r--r-- 1 root root 1720 Oct 25 10:21 a.txt

     

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

    逻辑删除:

    为什么删除比复制快?

     

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

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

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

     

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

    下载extundelete

    http://sourceforge.net/    开源软件发布中心

    准备测试分区:

    [root@xuegod63 /]# 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@xuegod63 ~]#reboot

    [root@xuegod63 ~]# partx -a /dev/sda  #获得新分区表

    扩展:

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

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

    方法2:把extundelete在虚拟机上(虚拟机系统要和服务器版本一样),提前安装好后再复制到U盘中,把U盘插入服务器,恢复时,恢复的文件要保存到U盘中,(不要让恢复的数据写到/下,那样会覆盖之前删除的文件)

     

    使用新的分区表:

    [root@xuegod63 /]# mkdir /tmp/sda4     #创建挂载点

    [root@xuegod63 ~]# mkfs.ext4 /dev/sda4    #格式化

    [root@xuegod63 ~]# mount /dev/sda4 /tmp/sda4/   #挂载

     

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

    [root@xuegod63 ~]# cp /etc/passwd /tmp/sda4/

    [root@xuegod63 ~]# cp /etc/hosts /tmp/sda4/

    [root@xuegod63 ~]# echo aaa > a.txt

    [root@xuegod63 ~]# mkdir -p /tmp/sda4/a/b/c

    [root@xuegod63 ~]# cp a.txt /tmp/sda4/a/

    [root@xuegod63 ~]# cp a.txt /tmp/sda4/a/b/

    [root@xuegod63 ~]# touch /tmp/sda4/a/b/kong.txt

    安装tree命令:

    [root@xuegod63 ~]# rpm -ivh /mnt/Packages/tree-1.5.3-2.el6.x86_64.rpm

    [root@xuegod63 ~]# tree /tmp/sda4/

    /tmp/sda4/

    ├── a

    │   ├── a.txt

    │   └── b

    │       ├── a.txt

    │       ├── c  #空目录

    │       └── kong.txt  #空文件

    ├── hosts

    ├── lost+found

    └── passwd

     

    删除文件:

    [root@xuegod63 ~]# cd /tmp/sda4/

    [root@xuegod63 sda4]# ls

    a  hosts  lost+found  passwd

    [root@xuegod63 sda4]# rm -rf a hosts passwd

     

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

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

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

    [root@localhost ~]#cd /root

    [root@localhost ~]# umount /tmp/sda4

    5.2.4  安装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中的文件到linux

    sz :下载,将linux中的文件传到windows

     

    解压并安装extundelet

    [root@xuegod63 extundelete-0.2.4]# tar jxvf extundelete-0.2.4.tar.bz2

    [root@xuegod63 ~]# cd extundelete-0.2.4

    [root@xuegod63]# yum install e2fsprogs-devel

    [root@xuegod63 extundelete-0.2.4]# ./configure   #检查系统安装环境

    [root@xuegod63 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@xuegod63 ~]# install -m 777 /bin/find /opt/a.sh

    [root@xuegod63 ~]# ll /opt/

    5.2.5  开始恢复:

    方法1:通过inode结点恢复

    方法二:通过文件名恢复

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

    方法四:恢复所有的文件

     

    [root@xuegod63 ~]# umount /tmp/sda4/

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

    [root@xuegod63 ~]# cd test/

     

    方法1:

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

    [root@xuegod63 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@xuegod63 test]# ls -id /boot/   #xfs文件系统

    64 /boot/

    [root@xuegod63 test]# mount /dev/sda4 /tmp/sda4/

    [root@xuegod63 test]# ls -id /tmp/sda4/

    2 /tmp/sda4/

    [root@xuegod63 test]# umount /tmp/sda4/

     

    方法1:通过inode结点恢复

    [root@xuegod63 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@xuegod63 test]# diff /etc/passwd RECOVERED_FILES/file.12  # 没有任何输出,说明一样

    方法二,通过文件名恢复

    [root@xuegod63 test]# extundelete /dev/sda4 --restore-file passwd

    [root@xuegod63 test]# diff /etc/passwd RECOVERED_FILES/passwd  # 没有任何输出,说明一样

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

    [root@xuegod63 test]# extundelete /dev/sda4 --restore-directory a

    [root@xuegod63 test]# tree RECOVERED_FILES/a/

    RECOVERED_FILES/a/

    ├── a.txt

    └── b

    └── a.txt

    下面是原来的目录结构:

    [root@xuegod63 ~]# tree /root/sda4-back/a/

    /root/sda4-back/a/

    ├── a.txt

    └── b

        ├── a.txt

        ├── c

    └── kong.txt

     

    方法四:恢复所有的文件

    [root@xuegod63 test]# extundelete /dev/sda4 --restore-all

    删除前后的数据:

     

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

    答:不能。

     

  • 相关阅读:
    How to alter department in PMS system
    Can't create new folder in windows7
    calculate fraction by oracle
    Long Wei information technology development Limited by Share Ltd interview summary.
    ORACLE BACKUP AND RECOVERY
    DESCRIBE:When you mouse click right-side is open an application and click left-side is attribution.
    ORACLE_TO_CHAR Function
    电脑BOIS设置
    JSP点击表头排序
    jsp+js实现可排序表格
  • 原文地址:https://www.cnblogs.com/fqfanqi/p/10035657.html
Copyright © 2011-2022 走看看