zoukankan      html  css  js  c++  java
  • linux学习笔记整理(四)

    第五章 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在恢复文件的时候能不能自动创建空文件和目录?
    答:不能。

    5.3 实战:使用xmanager等远程连接工具管理Linux
    5.3.1 Linux下常用远程连接工具介绍

    5.3.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调用桌面

  • 相关阅读:
    Linux 设置core dump
    ffmpeg取rtsp流时av_read_frame阻塞的解决办法
    Qt 防多开
    Linux环境中Qt程序的手工发布
    [技术选型] SSH/SSI框架替代品
    [maven] settings 文件 国内镜像站
    [Intellij] 在IntelliJ IDEA 中创建运行web项目
    [Intellij] Intellij IDEA 使用中遇见的问题
    [spark 快速大数据分析读书笔记] 第一章 导论
    [hbase] 查询数据
  • 原文地址:https://www.cnblogs.com/apesplan/p/10478429.html
Copyright © 2011-2022 走看看