第五章 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学习笔记整理(四)的更多相关文章

  1. deepin linux学习笔记(四)进不去图形界面怎么办?

    目录 deepin linux学习笔记(四)进不去图形界面怎么办? 前言 更换成lxde桌面 进不去图形界面怎么办? 总结 deepin linux学习笔记(四)进不去图形界面怎么办? 前言 生命不息 ...

  2. Linux学习笔记(整理记录)

    1.安装 (1):安装网址:http://www.jb51.net/os/78318.html 2.鸟哥的Linux命令学习 (1):显示系统目前所支持的语言:echo $LANG (2):修改语言成 ...

  3. linux学习笔记整理(九)

    第十章 Centos7-系统进程管理本节所讲内容:10.1 进程概述和ps查看进程工具10.2 uptime查看系统负载-top动态管理进程10.3 前后台进程切换- nice进程优先级-实战scre ...

  4. linux学习笔记整理(三)

    第四章 文件的基本管理和XFS文件系统备份恢复本节所讲内容:4.1 Linux系统目录结构和相对/绝对路径.4.2 创建/复制/删除文件,rm -rf / 意外事故4.3 查看文件内容的命令4.4 实 ...

  5. linux学习笔记整理(二)

    第三章 Linux基本命令操作本节所讲内容:3.1 Linux终端介绍 Shell提示符 Bash Shell基本语法3.2 基本命令的使用:ls.pwd.cd.history3.3 查看系统和BIO ...

  6. Python学习笔记整理(四)Python中的字符串..

    字符串是一个有序的字符集合,用于存储和表现基于文本的信息. 常见的字符串常量和表达式 T1=‘’ 空字符串 T2="diege's" 双引号 T3=""&quo ...

  7. Linux学习笔记整理

    2.1BASH命令行基本操作 [用户@主机~]$ # //$#为提示符 $代表普通用户 #代表root用户 ~代表当前目录 ls   //list相当于DOS的dir 显示当前目录列表 -a   // ...

  8. linux学习笔记整理(八)

    第九章 文件的归档和压缩本节所讲内容:9.1 tar命令进行文件的归档和压缩9.2 zip管理压缩文件9.3 了解gzip-bzip2- xz管理压缩文件-file-sort查看文件 9.1 tar命 ...

  9. linux学习笔记整理(七)

    第八章 Centos7软件包的管理与安装本节所讲内容:8.1 使用rpm命令-安装-查看-卸载-rpm软件包8.2 yum管理软件包8.3 实战tar源码包管理-srpm源码包安装方法 8.1 软件包 ...

随机推荐

  1. 从零开始学安全(二十六)●利用Nmap目标的本版进行探测

    通过对对方电脑的服务探测 对本版较低的服务 或者无补丁的服务 可以直入侵 版本探测 version  后边就是版本

  2. Spring核心——设计模式与IoC

    “Spring”——每一个Javaer开发者都绕不开的字眼,从21世纪第一个十年国内异常活跃的SSH框架,到现在以Spring Boot作为入口粘合了各种应用.Spring现在已经完成了从web入口到 ...

  3. Java简单介绍及Java生态

    核心思想:面向对象编程,继承,高兼容(代码移植性强),开源,避免重复造轮子(使用mybatis,spring,redis等技术只需要将jar包依赖添加到项目中即可,jar包内就是技术核心代码,而这些框 ...

  4. JS检测浏览器Adobe Reader插件

    Web应用中当我们希望向用户显示pdf文档时候,如果用户安装了Adobe Reader之类的pdf阅读器,就可以直接打开文档在浏览器中显示, 但是,当用户没有安装这类软件的时候,自然是打不开的,为了系 ...

  5. cordov vue项目中调用手机原生api

    cordova不仅可以把vue项目打包成app,还可以让vue借助cordova调用手机原生的api 比如拍照 比如图片上传 比如定位 比如扫描二维码 比如支付等等 Vue Cordova教程-Vue ...

  6. Ubuntu16.04下postgresql-10

      这里使用源码安装的方式进行: Linux版本:ubuntu16.04 PostgresSQL版本:postgresql-10.3 在PostgreSQL官网下载地址:https://www.pos ...

  7. .net、mono和C#

    .net wiki:en  chs .net版本 公共语言运行时(CLR) 发布时间 随同分发的Visual Studio 预装于windows系统 支持的windows系统 1.0 1.0 2002 ...

  8. mysql服务自启【Linux】

    1.复制启动脚本到资源目录 2.增加mysqld服务控制脚本执行权限 3.mysql服务添加到系统服务 4.检测mysqld服务是否生效 表明服务已经启动,以后可以使用service命令启动mysql ...

  9. 决策树ID3算法的java实现(基本适用所有的ID3)

    已知:流感训练数据集,预定义两个类别: 求:用ID3算法建立流感的属性描述决策树 流感训练数据集 No. 头痛 肌肉痛 体温 患流感 1 是(1) 是(1) 正常(0) 否(0) 2 是(1) 是(1 ...

  10. [20190306]共享服务模式与SDU.txt

    [20190306]共享服务模式与SDU.txt --//一些文档提到共享服务模式,服务端SDU=65535,测试验证看看.--//链接:https://blogs.sap.com/2013/02/0 ...