2023年8月2日发(作者:)

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可以语法加亮,它完全兼容vi5.1.1 vim编辑器模式

⾸次进⼊⽂件 ---- 命令模式出现 “Insert” ---- 编辑模式输⼊: ---- 命令⾏模式A:从编辑模式到命令⾏模式怎样切换?

编辑模式->esc->命令模式->: ->命令⾏模式B:字符操作(怎样进⼊编辑模式?) 进⼊编辑模式 a i o A I O说明:i 当前字符之前插⼊ (光标前)I ⾏⾸插⼊ (⾏⾸)a 当前字符之后插⼊ (光标后)A ⾏尾插⼊(⾏尾)o下⼀⾏插⼊ (另起⼀⾏)O上⼀⾏插⼊(上⼀⾏插⼊)x 向后删除⼀个字符 等同于deleteX 向前删除⼀个字符

u 撤销⼀步 每按⼀次就撤销⼀次r 替换

5.1.2 在命令模式下做的操作:光标定位hjkl 左下上右0 和 home键表⽰切换到⾏⾸, $和end键表⽰切换到⾏尾gg 快速定位到⽂档的⾸⾏ , G定位到未⾏3gg 或者 3G 快速定位到第3⾏/string(字符串) -----找到或定位你要找的单词或内容,如果相符内容⽐较多,我们可以通过N、n来进⾏向上向下查找,并且vi会对查找到的内容进⾏⾼亮显⽰,取消⽤ :noh/^d ----^意思表⽰以什么开头 ,,查找以字母d开头的内容/t$ -----$意思表⽰以什么结尾,,查找以字母t结尾的内容vim + 打开⽂件后,光标会⾃动位于⽂件的最后⼀⾏

如何对⽂本进⾏编辑删除、复制、粘贴、撤销y 复制(以字符为单位) :表⽰对单个字符进⾏复制,如果要复制整⾏,⽤yy(以⾏为单位)

复制N⾏: Nyy ,⽐如: 2yy ,表⽰复制2⾏dd(删除,以⾏为单位,删除当前光标所在⾏)删除N⾏: Ndd ,⽐如: 2dd ,表⽰删除2⾏p : P粘贴剪切: ddx 删除光标所在位置的字符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 [root@xuegod63 ~]# echo aaa >> [root@xuegod63 ~]# diff /etc/passwd 40a41> aaa[root@xuegod63 ~]# vimdiff /etc/passwd

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 [root@xuegod63 ~]# cat #!/bin/bashecho "学神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/7.x86_注: 在centos7上,unix2dos这个命令已经被集成到7.x86_包中。在centos6下需要安装。[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恢复使⽤:ext3grepwindows恢复误删除的⽂件: final data v2.0 汉化版 和 easyrecovery

扩展:Linux⽂件系统由三部分组成:⽂件名,inode,blockwindows也由这三部分组成。 -->inode --> block⽂件名 存放⽂件元数据信息 真正存放数据查看⽂件⽂件名:[root@xuegod63 ~]# cp /etc/passwd [root@xuegod63 ~]# ls

查看inode号:常识: 每个⽂件,有⼀个inode号。[root@xuegod63 ~]# ls -i 440266 查看inode中的⽂件属性; 通过stat命令查看inode中包含的内容[root@xuegod63 ~]# stat #查看inode信息:[root@xuegod63 ~]# ls -l -rw-r--r-- 1 root root 1720 Oct 25 10:21

block块:真正存储数据的地⽅逻辑删除:为什么删除⽐复制快?

误删除⽂件后,第⼀件事要做什么 你不⼼删除把存了⼏⼗年的⼤⽚删除了。避免误删除的⽂件内容被覆盖。 如何避免?卸载需要恢复⽂件的分区或以只读的⽅式挂载

5.2.2 实战:在ext4⽂件系统上恢复被误删除的⽂件下载extundelete准备测试分区:[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 bytes255 heads, 63 sectors/track, 2610 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x000b8b35

Device Boot Start End Blocks Id System/dev/sda1 * 1 26 204800 83 LinuxPartition 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 4First cylinder (1428-2610, default 1428):Using default value 1428Last 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 kernel still uses the old table. The new table will be used atthe 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 ~]# 4 /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 > [root@xuegod63 ~]# mkdir -p /tmp/sda4/a/b/c[root@xuegod63 ~]# cp /tmp/sda4/a/[root@xuegod63 ~]# cp /tmp/sda4/a/b/[root@xuegod63 ~]# touch /tmp/sda4/a/b/安装tree命令:[root@xuegod63 ~]# rpm -ivh /mnt/Packages/6.x86_[root@xuegod63 ~]# tree /tmp/sda4//tmp/sda4/├── a│ ├── │ └── b│ ├── │ ├── c #空⽬录│ └── #空⽂件├── hosts├── lost+found└── passwd

删除⽂件:[root@xuegod63 ~]# cd /tmp/sda4/[root@xuegod63 sda4]# lsa hosts lost+found passwd[root@xuegod63 sda4]# rm -rf a hosts passwd 误删除⽂件后,第⼀件事要做什么如何避免误删除的⽂件内容被覆盖卸载需要恢复⽂件的分区:或以只读的⽅式挂载[root@localhost ~]#cd /root[root@localhost ~]# umount /tmp/sda45.2.4 安装extundelet

上传extundelete到linux中:从windows上传extundelete⽂件到linux,安装xmanager v5 或者CRT[root@xuegod63 ~]# rpm -ivh /mnt/Packages/6.x86_

安装后,就有了rz命令和sz命令rz : 上传windows中的⽂件到linuxsz :下载,将linux中的⽂件传到windows

解压并安装extundelet[root@xuegod63 extundelete-0.2.4]# tar jxvf 2[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/[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. 2lost+found 11passwd 12 Deletedhosts 13 Deleteda 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 12NOTICE: Extended attributes are not g filesystem metadata ... 9 groups g journal descriptors ... 63 descriptors loaded.[root@xuegod63 test]# lsRECOVERED_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/├── └── b└── 下⾯是原来的⽬录结构:[root@xuegod63 ~]# tree /root/sda4-back/a//root/sda4-back/a/├── └── b ├── ├── c└──

⽅法四:恢复所有的⽂件[root@xuegod63 test]# extundelete /dev/sda4 --restore-all删除前后的数据:

extundelete在恢复⽂件的时候能不能⾃动创建空⽂件和⽬录?答:不能。

2023年8月2日发(作者:)

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可以语法加亮,它完全兼容vi5.1.1 vim编辑器模式

⾸次进⼊⽂件 ---- 命令模式出现 “Insert” ---- 编辑模式输⼊: ---- 命令⾏模式A:从编辑模式到命令⾏模式怎样切换?

编辑模式->esc->命令模式->: ->命令⾏模式B:字符操作(怎样进⼊编辑模式?) 进⼊编辑模式 a i o A I O说明:i 当前字符之前插⼊ (光标前)I ⾏⾸插⼊ (⾏⾸)a 当前字符之后插⼊ (光标后)A ⾏尾插⼊(⾏尾)o下⼀⾏插⼊ (另起⼀⾏)O上⼀⾏插⼊(上⼀⾏插⼊)x 向后删除⼀个字符 等同于deleteX 向前删除⼀个字符

u 撤销⼀步 每按⼀次就撤销⼀次r 替换

5.1.2 在命令模式下做的操作:光标定位hjkl 左下上右0 和 home键表⽰切换到⾏⾸, $和end键表⽰切换到⾏尾gg 快速定位到⽂档的⾸⾏ , G定位到未⾏3gg 或者 3G 快速定位到第3⾏/string(字符串) -----找到或定位你要找的单词或内容,如果相符内容⽐较多,我们可以通过N、n来进⾏向上向下查找,并且vi会对查找到的内容进⾏⾼亮显⽰,取消⽤ :noh/^d ----^意思表⽰以什么开头 ,,查找以字母d开头的内容/t$ -----$意思表⽰以什么结尾,,查找以字母t结尾的内容vim + 打开⽂件后,光标会⾃动位于⽂件的最后⼀⾏

如何对⽂本进⾏编辑删除、复制、粘贴、撤销y 复制(以字符为单位) :表⽰对单个字符进⾏复制,如果要复制整⾏,⽤yy(以⾏为单位)

复制N⾏: Nyy ,⽐如: 2yy ,表⽰复制2⾏dd(删除,以⾏为单位,删除当前光标所在⾏)删除N⾏: Ndd ,⽐如: 2dd ,表⽰删除2⾏p : P粘贴剪切: ddx 删除光标所在位置的字符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 [root@xuegod63 ~]# echo aaa >> [root@xuegod63 ~]# diff /etc/passwd 40a41> aaa[root@xuegod63 ~]# vimdiff /etc/passwd

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 [root@xuegod63 ~]# cat #!/bin/bashecho "学神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/7.x86_注: 在centos7上,unix2dos这个命令已经被集成到7.x86_包中。在centos6下需要安装。[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恢复使⽤:ext3grepwindows恢复误删除的⽂件: final data v2.0 汉化版 和 easyrecovery

扩展:Linux⽂件系统由三部分组成:⽂件名,inode,blockwindows也由这三部分组成。 -->inode --> block⽂件名 存放⽂件元数据信息 真正存放数据查看⽂件⽂件名:[root@xuegod63 ~]# cp /etc/passwd [root@xuegod63 ~]# ls

查看inode号:常识: 每个⽂件,有⼀个inode号。[root@xuegod63 ~]# ls -i 440266 查看inode中的⽂件属性; 通过stat命令查看inode中包含的内容[root@xuegod63 ~]# stat #查看inode信息:[root@xuegod63 ~]# ls -l -rw-r--r-- 1 root root 1720 Oct 25 10:21

block块:真正存储数据的地⽅逻辑删除:为什么删除⽐复制快?

误删除⽂件后,第⼀件事要做什么 你不⼼删除把存了⼏⼗年的⼤⽚删除了。避免误删除的⽂件内容被覆盖。 如何避免?卸载需要恢复⽂件的分区或以只读的⽅式挂载

5.2.2 实战:在ext4⽂件系统上恢复被误删除的⽂件下载extundelete准备测试分区:[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 bytes255 heads, 63 sectors/track, 2610 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x000b8b35

Device Boot Start End Blocks Id System/dev/sda1 * 1 26 204800 83 LinuxPartition 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 4First cylinder (1428-2610, default 1428):Using default value 1428Last 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 kernel still uses the old table. The new table will be used atthe 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 ~]# 4 /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 > [root@xuegod63 ~]# mkdir -p /tmp/sda4/a/b/c[root@xuegod63 ~]# cp /tmp/sda4/a/[root@xuegod63 ~]# cp /tmp/sda4/a/b/[root@xuegod63 ~]# touch /tmp/sda4/a/b/安装tree命令:[root@xuegod63 ~]# rpm -ivh /mnt/Packages/6.x86_[root@xuegod63 ~]# tree /tmp/sda4//tmp/sda4/├── a│ ├── │ └── b│ ├── │ ├── c #空⽬录│ └── #空⽂件├── hosts├── lost+found└── passwd

删除⽂件:[root@xuegod63 ~]# cd /tmp/sda4/[root@xuegod63 sda4]# lsa hosts lost+found passwd[root@xuegod63 sda4]# rm -rf a hosts passwd 误删除⽂件后,第⼀件事要做什么如何避免误删除的⽂件内容被覆盖卸载需要恢复⽂件的分区:或以只读的⽅式挂载[root@localhost ~]#cd /root[root@localhost ~]# umount /tmp/sda45.2.4 安装extundelet

上传extundelete到linux中:从windows上传extundelete⽂件到linux,安装xmanager v5 或者CRT[root@xuegod63 ~]# rpm -ivh /mnt/Packages/6.x86_

安装后,就有了rz命令和sz命令rz : 上传windows中的⽂件到linuxsz :下载,将linux中的⽂件传到windows

解压并安装extundelet[root@xuegod63 extundelete-0.2.4]# tar jxvf 2[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/[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. 2lost+found 11passwd 12 Deletedhosts 13 Deleteda 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 12NOTICE: Extended attributes are not g filesystem metadata ... 9 groups g journal descriptors ... 63 descriptors loaded.[root@xuegod63 test]# lsRECOVERED_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/├── └── b└── 下⾯是原来的⽬录结构:[root@xuegod63 ~]# tree /root/sda4-back/a//root/sda4-back/a/├── └── b ├── ├── c└──

⽅法四:恢复所有的⽂件[root@xuegod63 test]# extundelete /dev/sda4 --restore-all删除前后的数据:

extundelete在恢复⽂件的时候能不能⾃动创建空⽂件和⽬录?答:不能。