Linux--vim编辑器和文件恢复

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

本节所讲内容:

5.1  vim的使用

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

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

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

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

[[email protected] ~]# rpm -qf `which vim`

[[email protected] ~]# 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!
强制保存并退出

[[email protected]
~]# ll /etc/shadow

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

[[email protected]
~]# 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的大小写

:% [email protected]@[email protected]          
将文本中所有的a替换成b

5.1.5 自定义vim使用环境

临时设置

:set nu  设置行号

:set nonu 取消设置行号

:noh   取消高亮显示

永久设置环境

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

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

例:

[[email protected]
~]# cat  /root/.vimrc

set nu

[[email protected]
~]# vim  /root/.vimrc

vim打开多个文件

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

[[email protected]
~]# vim -o /etc/passwd /etc/hosts

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

[[email protected]
~]# vim -O /etc/passwd /etc/hosts

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

比较两个文件内容

[[email protected]
~]# cp /etc/passwd mima.txt

[[email protected]
~]# echo aaa >> mima.txt

[[email protected]
~]# diff /etc/passwd mima.txt

40a41

> aaa

[[email protected]
~]# vimdiff /etc/passwd mima.txt

5.1.6  其它编辑器

nano编辑器

emacs编辑器

GHOME编辑器gedit

例:

[[email protected]
~]# 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 输出文件名

[[email protected] ~]# mkdir test  #创建一个测试目录

[[email protected] ~]# cd
test/

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

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

[[email protected] ~]# cat aa.txt

#!/bin/bash

echo "学神IT"

信息:

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

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

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

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

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

在window 上打开显示:

解决方法:

[[email protected] ~]#
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。

[[email protected] test]# unix2dos b在Linux编辑的文档到windows下没有换行.sh

[[email protected] test]# sz b在Linux编辑的文档到windows下没有换行.sh   #发送到windows本地 
显示正常。

注:dos2unix 这个命令是把windows下的回车转成linux类型。

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

[[email protected]
~]# rm -Rf /    #执行不成功的,

rm: 在"/" 进行递归操作十分危险

rm: 使用 --no-preserve-root 选项跳过安全模式

[[email protected]
~]# rm -rf /*    #这个可以执行成功。 呵呵。。。

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

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

扩展:

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

windows也由这三部分组成。

a.txt          -->inode              --> block

文件名       存放文件元数据信息       真正存放数据

查看文件文件名:

[[email protected]
~]# cp /etc/passwd a.txt

[[email protected]
~]# ls a.txt

a.txt

查看inode号:

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

[[email protected]
~]# ls -i a.txt

440266
a.txt

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

[[email protected]
~]# stat a.txt   #查看inode信息:

[[email protected]
~]# 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/    开源软件发布中心

准备测试分区:

[[email protected]
/]# 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.

[[email protected]
~]#reboot

[[email protected]
~]# partx -a /dev/sda  #获得新分区表

扩展:

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

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

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

使用新的分区表:

[[email protected]
/]# mkdir /tmp/sda4     #创建挂载点

[[email protected]
~]# mkfs.ext4 /dev/sda4    #格式化

[[email protected]
~]# mount /dev/sda4 /tmp/sda4/   #挂载

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

[[email protected]
~]# cp /etc/passwd /tmp/sda4/

[[email protected]
~]# cp /etc/hosts /tmp/sda4/

[[email protected]
~]# echo aaa > a.txt

[[email protected]
~]# mkdir -p /tmp/sda4/a/b/c

[[email protected]
~]# cp a.txt /tmp/sda4/a/

[[email protected]
~]# cp a.txt /tmp/sda4/a/b/

[[email protected]
~]# touch /tmp/sda4/a/b/kong.txt

安装tree命令:

[[email protected]
~]# rpm -ivh /mnt/Packages/tree-1.5.3-2.el6.x86_64.rpm

[[email protected]
~]# tree /tmp/sda4/

/tmp/sda4/

├── a

│  
├── a.txt

│  
└── b

│       ├── a.txt

│       ├── c  #空目录

│       └── kong.txt  #空文件

├──
hosts

├──
lost+found

└──
passwd

删除文件:

[[email protected]
~]# cd /tmp/sda4/

[[email protected]
sda4]# ls

a  hosts 
lost+found  passwd

[[email protected]
sda4]# rm -rf a hosts passwd

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

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

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

[[email protected]
~]#cd /root

[[email protected]
~]# umount /tmp/sda4

5.2.4  安装extundelet

上传extundelete到linux中:

从windows上传extundelete文件到linux,安装xmanager  v5   或者CRT

[[email protected]
~]# rpm -ivh /mnt/Packages/lrzsz-0.12.20-27.1.el6.x86_64.rpm

安装后,就有了rz命令和sz命令

rz : 上传windows中的文件到linux

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

解压并安装extundelet

[[email protected]
extundelete-0.2.4]# tar jxvf extundelete-0.2.4.tar.bz2

[[email protected]
~]# cd extundelete-0.2.4

[[email protected]]#
yum install e2fsprogs-devel

[[email protected]
extundelete-0.2.4]# ./configure   #检查系统安装环境

[[email protected]
extundelete-0.2.4]# make  -j 4  #编译,把源代码编译成可执行的二进制文件。

-j
4   使用4进程同时编译,提升编译速度 或 使用4核CPU同时编译。

[[email protected]
extundelete-0.2.4]# make install  #安装

install
和cp 有什么区别?

install
复制时可以指定权限  cp不可以

例:

[[email protected]
~]# install -m 777 /bin/find /opt/a.sh

[[email protected]
~]# ll /opt/

5.2.5  开始恢复:

方法1:通过inode结点恢复

方法二:通过文件名恢复

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

方法四:恢复所有的文件

[[email protected]
~]# umount /tmp/sda4/

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

[[email protected]
~]# cd test/

方法1:

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

[[email protected]
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

[[email protected]
test]# ls -id /boot/   #xfs文件系统

64 /boot/

[[email protected]
test]# mount /dev/sda4 /tmp/sda4/

[[email protected]
test]# ls -id /tmp/sda4/

2 /tmp/sda4/

[[email protected]
test]# umount /tmp/sda4/

方法1:通过inode结点恢复

[[email protected] 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.

[[email protected] test]# ls

RECOVERED_FILES

[[email protected] test]# diff /etc/passwd
RECOVERED_FILES/file.12  # 没有任何输出,说明一样

方法二,通过文件名恢复

[[email protected] test]#
extundelete /dev/sda4 --restore-file passwd

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

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

[[email protected] test]# extundelete /dev/sda4 --restore-directory a

[[email protected] test]#
tree RECOVERED_FILES/a/

RECOVERED_FILES/a/

├──
a.txt

└──
b

└──
a.txt

下面是原来的目录结构:

[[email protected] ~]#
tree /root/sda4-back/a/

/root/sda4-back/a/

├──
a.txt

└──
b

├──
a.txt

├── c

└── kong.txt

方法四:恢复所有的文件

[[email protected] test]# extundelete /dev/sda4 --restore-all

删除前后的数据:

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

答:不能。

原文地址:https://www.cnblogs.com/fqfanqi/p/10035657.html

时间: 2024-11-08 16:01:17

Linux--vim编辑器和文件恢复的相关文章

16、自学——Linux的学习进度与任务【vim编辑器及文件测试】

vim编辑器及文件测试 vim编辑器 在Linux中,使用文本文件来保存配置文件 1.几种基本的模式: 编辑模式:键盘操作通常被解析为编辑命令: 输入模式:输入模式 末行模式:vim的内置的命令行接口,执行vim内置命令 2.模式之间的切换: 编辑模式-->输入模式(从编辑模式进入到输入模式) i:当前光标所在处输入内容 I: 在当前光标所在行的行首 a:在当前光标所在处的后面 A:在当前光标所在行的行尾输入 o:在光标所在行的下方新增一行空白行输入 O:在光标所在行的上方新增一行空白行输入 输

Linux(RadHat)基础学习—vim编辑器及文件的输入输出

1.vim编辑器 Vim是一个类似于Vi的著名的功能强大.高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性. 1.初识神器:vim (1).vim的注意事项 编辑文件时 a.当文件名称存在,那么进入文件直接编辑 b.当文件名称不存在,vim会在退出保存时自动建立文件 c.当vim命令后没有跟任何文件名称时,时无法实现":wq"退出保存的那么可以用":wq filename"(给新建文件命名并保存) (2).当vim异常退出时,系统会建立.file.swp这

linux   vim编辑器总结

vim编辑器总结 目录 一 vi/vim 使用... 2 1. vi/vim 工作模式... 2 1.1 打开文件... 2 2 普通模式... 2 2.1 读文件... 2 3 编辑模式... 3 4 末行模式... 4 5 vim中的查找和替换命令... 4 6 vim环境设置... 5 7 高级功能... 6 8 打开多个文件... 7 9 文件恢复功能... 7 10 vim多行注释... 8 一 vi/vim 使用 vi/vim 工作模式 vim 的三种工作模式 普通模式 编辑模式 末

Linux Vim编辑器的使用技巧

vi 编辑器  (vim 增强版) 一.vim模式 编辑模式(命令模式) 输入模式 末行模式 打开文件时默认处于编辑模式 模式转换 编辑模式-->输入模式 i:在当前光标所在文字的前面转换为输入模式 a:在.........后面....... o:在......行的下方新建一行并转为输入模式 O:在........上方........... I:在......行的行首转换为... A:..........尾...... 输入模式-->编辑模式 ESC 编辑模式-->末行模式 : 末行模式

linux vim编辑器

1.工作模式 命令模式(a,i,o等键)——>输入模式 输入模式(Esc键)——>命令模式 命令模式(:键)——>末行模式 末行模式(Esc键)——>命令模式 2.vim使用命令 1)光标移动 光标方向移动 ↑.↓.←.→ 上.下.左.右 翻页 Page Down或Ctrl+F 向下翻动一整页内容 翻页 Page Up或Ctrl+B 向上翻动一整页内容 行内快速跳转 Home或数字“0” 跳转至行首 行内快速跳转 End或"$" 跳转至行首 行间快速跳转 1G或

Linux vim编辑器使用详解

在Linux中,主要编辑器为vi或者vim,本文围绕vim做简单的讲解说明: Linux默认自带vi(vim)编辑器,其程序包为: [[email protected] ~]# rpm -qf `which vi` vim-minimal-7.2.411-1.8.el6.x86_64 [[email protected] ~]# rpm -qf `which vim` vim-enhanced-7.2.411-1.8.el6.x86_64 vim 编辑器模式切换: 命令模式 .命令行模式.编辑模

Linux Vim编辑器使用简单讲解

在Linux中,主要编辑器为vi或者vim,本文围绕vim做简单的讲解说明:Linux默认自带vi(vim)编辑器,其程序包为:[[email protected] ~]# rpm -qf `which vi` vim-minimal-7.2.411-1.8.el6.x86_64 [[email protected] ~]# rpm -qf `which vim` vim-enhanced-7.2.411-1.8.el6.x86_64vim 编辑器模式切换:命令模式 .命令行模式.编辑模式命令模

Linux Vim编辑器小结

Vim编辑器使用小结 vim编辑器的模式切换: 命令模式下的光标快捷移动键 字符级移动 h 左移一个字符 l 右移一个字符 单词级移动 w 移到下个单词首 e 移到本单词尾 b 移到本单词首 行级移动 $ 移到行尾 0 移到行首 j 下移一行 k 上移一行 段级移动 { 上移一段 } 下移一段 屏级移动 H 移到本屏幕第一行 L 移到本屏幕最后一行 文章级移动 G 移到文章末尾 1G 移到文章开头 命令模式下的快捷删除 d+光标快捷移动键 x 删除当前字符 dd 删除一行 命令模式下的复制 v+

Linux vim编辑器常用命令

vim文本编辑打开文件vim 文件名如果文件存在会直接打开改文件:如果文件不存在会创建一个文件后再打开三种模式命令模式:文件打开后的默认模式,只能查看文件内容不能修改输入模式:可以编辑和修改末行模式:保存退出 切换命令模式 --> 输入模式 按i键命令模式 --> 末行模式 按:键输入模式和末行模式 --> 命令模式 按Esc键备注:输入模式和末行模式不能直接切换,需要经过命令模式 命令模式操作光标行间的调整h:左移一个字符j:下移一行k:上移一行l:右移一行gg :跳转到文件的第一行G