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
和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可以进行补全操作,所需要的内容必须是在当前打开的文件内存在的,它只针对当前文件
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
switch
off the mode
(command
sectors
(command
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在恢复文件的时候能不能自动创建空文件和目录? 答:不能。