本节所讲内容:
Linux文件的基本操作
深入浅出linux文件系统详解
实战1:Linux下误删除的文件的恢复实战
实战2:四种方法恢复文件企业级项目实战
注:讲前先问一下学员,有没有基础。如果有基础,关下面文件的基本命令,使用5分钟快速看一眼就可以了。重点讲后面。
有基础1 没有基础2
创建文件、查看,删除文件
touch
作用:常用来创建空文件
语法: touch 文件名
#touch test.txt
[root@xuegod63 桌面]# touch aa
[root@xuegod63 桌面]# ls
aa
[root@xuegod63 桌面]# mkdir aa
mkdir: 无法创建目录"aa": 文件已存在
linux 一切皆为文件
mkdir
作用:创建目一切
语法:mkdir 目录名
例: mkdir /tmp/test
[root@local63 ~]# mkdir -p test/a/b/c
-p 连同父目录一起创建
查看
cat
作用:查看文件内容
语法:cat 文件名
例:
cat /etc/passwd
-n 空行也加行号
-b 遇到空行,就不加行号
-s 把连续的多行,压缩成一行
连续的多行压缩成一行然后加行号
cat -ns /etc/password
rpm -qa | grep tree
复制文件:
cp
作用:复制文件
语法:cp 源文件 目标文件
例:
[root@local63 ~]# cp /etc/passwd /tmp/test/
[root@local63 ~]# ls /tmp/test/passwd
/tmp/test/passwd
[root@local63 ~]# cp -r /boot/grub/ /tmp/test/
-r 包含子目录和文件
omitting 遗漏; 省略( omit的现在分词 ); 删掉; 忘记做
删除文件和文件夹
rm -rf 文件名或目录名
-r 递归删除(可以删除目录和目录里面的东西)
-f 强行删除
[root@local63 ~]# rm -rf /tmp/test/
注:以 这种删除后,能不能恢复。 能:1 不能:2
ext4文件系统上删除文件,可以恢复: extundelete
windows恢复误删除的文件: final data v2.0 汉化版 和 easyrecovery
联想:
黑客 -》 二手磁盘和手机 -》 艳照 理解:1
扩展:
Linux文件系统由三部分组成:文件名,inode,block
windows也由这三部分组成。
a.txt -->inode -> block
文件名 存放文件元数据信息 真正存放数据
查看文件文件名:
[root@local63 ~]# cp /etc/passwd a.txt
[root@local63 ~]# ls a.txt
a.txt
查看inode号:
常识: 每个文件,最少有一个inode号。
[root@local63 ~]# ls -i a.txt
440266 a.txt
查看inode中的文件属性; 通过stat命令查看inode中包含的内容
[root@local63 ~]# stat a.txt #查看inode信息:
File: `a.txt'
Size: 1720 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 393788 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2015-10-25 10:21:07.368552471 +0800
Modify: 2015-10-25 10:21:02.773527478 +0800
Change: 2015-10-25 10:21:02.773527478 +0800
[root@local63 ~]# ls -l a.txt
-rw-r--r-- 1 rootroot 1720 Oct 25 10:21 a.txt
block块:真正存储数据的地方
逻辑删除:
为什么删除比复制快?
懂 1 不懂2
误删除文件后,第一件事要做什么??? 你不心删除把老板,几十年的大片删除了。
哭,提交辞职报告
如何避免误删除的文件内容被覆盖???
卸载需要恢复文件的分区:或以只读的方式挂载
注:删除时,只删除了文件名。 另外,我们可以从inode中读出文件名的名字,所以通过inode可以恢复。
懂:1 ,不懂:2 上课时间: 20:30-21:30
实战:cd
下载extundelete
http://sourceforge.net/ 开源软件发布中心
测试 :
0.加一块磁盘 1.
1. 创建一个分区
2.拷贝一些数据放到分区SDB
3.删除 rm -rf
4. extundelete 安装
5.使用四种方法恢复
准备测试分区:
[root@local63 /]# fdisk /dev/sdb #创建一个sdb1分区
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@local63 ~]# partx -a /dev/sda #获得新分区表
或
[root@local63 ~]#reboot
使用新的分区表:
[root@local63 ~]# mkdir /tmp/sdb#创建挂载点
[root@local63 ~]# mkfs.ext4 /dev/sdb1#格式化
[root@local63 ~]# mount /dev/sdb1 /tmp/sdb #挂载
查看挂载情况
[root@local63 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 9.7G 3.8G 5.5G 41% /
tmpfs 569M 264K 569M 1% /dev/shm
/dev/sda1 194M 28M 157M 15% /boot
/dev/sr0 3.4G 3.4G 0 100% /mnt
/dev/sdb1 1012M 34M 928M 4% /tmp/sdb1
复制一些测试文件,然后把这些文件再删除:
[root@local63 ~]# cp /etc/passwd /tmp/sdb/
[root@local63 ~]# cp /etc/hosts /tmp/sdb/
[root@local63 ~]# echo aaa > a.txt
[root@local63 ~]# mkdir -p /tmp/sdb/a/b/c
[root@local63 ~]# cp a.txt /tmp/sdb/a/
[root@local63 ~]# cp a.txt /tmp/sdb/a/b/
[root@local63 ~]#
安装tree命令:
[root@local63 ~]# rpm -ivh /mnt/Packages/tree-1.5.3-2.el6.x86_64.rpm
[root@local63 ~]# tree /tmp/sdb/
/tmp/sda4/
├── a
│ ├── a.txt
│ └── b
│ ├── a.txt
│ ├── c #空目录
│ └── kong.txt #空文件
├── hosts
├── lost+found
└── passwd
删除文件:
[root@local63 ~]# cd /tmp/sdb/
[root@local63 sda4]# ls
a hosts lost+found passwd
[root@local63 sda4]# rm -rf a hosts passwd
误删除文件后,第一件事要做什么???
哭,提交辞职报告
如何避免误删除的文件内容被覆盖???
卸载需要恢复文件的分区:或以只读的方式挂载
[root@localhost ~]# umount /tmp/sdb
[root@local63 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 18G 3.5G 13G 22% /
tmpfs 1004M 224K 1003M 1% /dev/shm
/dev/sda1 194M 34M 151M 19% /boot
/dev/sr0 3.6G 3.6G 0 100% /mnt
上传extundelete到linux中:
从windows上传extundelete文件到linux,安装xmanager v4 或者CRT
[root@local63 ~]# rpm -ivh /mnt/Packages/lrzsz-0.12.20-27.1.el6.x86_64.rpm
安装后,就有了rz命令和sz命令
rz : 上传windows中的文件到linux
sz :将linux中的文件传到windows
解压并安装extundelet
[root@local63 extundelete-0.2.4]# tar jxvf extundelete-0.2.4.tar.bz2
[root@local63 ~]# cd extundelete-0.2.4
[root@local63 extundelete-0.2.4]# ls
acinclude.m4 autogen.sh configure depcomp LICENSE Makefile.in README
aclocal.m4 config.h.in configure.ac install-sh Makefile.am missing src
[root@local63 extundelete-0.2.4]# ./configure #检查系统安装环境
Configuring extundelete 0.2.4
configure: error: Can't find ext2fs library
源码编译出错后,常见解决方法:
方法1:[root@local63 Packages]# rpm -ivh ext2fs^C #按两下tab键。 一般情况,ext2fs就是要安装的软件包的名字开头。如果存在 自动补全
方法2:[root@local63 Packages]# ls *ext2fs* #查找关键字
方法3:[root@local63 Packages]# ls *2fs* #查找部分关键字
方法4: VIP 课程 。 终极大招
[root@local63 Packages]# ls *2fs*
e2fsprogs-1.41.12-11.el6.x86_64.rpm
e2fsprogs-devel-1.41.12-11.el6.i686.rpm
e2fsprogs-devel-1.41.12-11.el6.x86_64.rpm
e2fsprogs-libs-1.41.12-11.el6.i686.rpm
e2fsprogs-libs-1.41.12-11.el6.x86_64.rpm
[root@local63 Packages]#
[root@local63 Packages]# uname -m
x86_64
[root@local63 Packages]# rpm -ivh e2fsprogs-libs-1.41.12-11.el6.x86_64.rpm
warning: e2fsprogs-libs-1.41.12-11.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing... ########################################### [100%]
package e2fsprogs-libs-1.41.12-11.el6.x86_64 is already installed
解决:
[root@local63]# rpm -ivh /mnt/Packages/e2fsprogs-devel-1.41.12-11.el6.x86_64.rpm
warning: /mnt/Packages/e2fsprogs-devel-1.41.12-11.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing... ########################################### [100%]
1:e2fsprogs-devel ########################################### [100%]
查看安装后生成的文件:
[root@local63 Packages]#rpm -qpl e2fsprogs-devel-1.41.12-11.el6.x86_64.rpm | more
[root@local63 extundelete-0.2.4]# make #编译,把源代码编译成可执行的二进制文件。
-j 4 第一次听说:1
-j 4 使用4进程同时编译,提升编译速度 或 使用4核CPU同时编译。
-j 4 #这个参数,今天第一次知道;1
编译mysql,内核,apache ,使用 -j 4 ,会快 -j 后的数字要和你的CPU核心数一样。
使用top -》 P 查看哪个进程使用CPU最多 : cc1 (c 语言编译器)
[root@local63 extundelete-0.2.4]# make install #安装
Making install in src
/usr/bin/install -c extundelete '/usr/local/bin'
[root@local63 extundelete-0.2.4]# ls /usr/local/bin/extundelete
/usr/local/bin/extundelete
开始恢复:
方法1:通过inode结点恢复
方法二:通过文件名恢复
方法三:恢复某个目录,如目录a下的所有文件:
方法四:恢复所有的文件
懂:1 , 不懂:2
[root@local63 ~]# umount /tmp/sda4/
[root@local63 ~]# mkdir test #创建一个目录使用于存放恢复的数据
[root@local63 ~]# cd test/
方法1:
通过inode结点查看被删除的文件名字:
[root@local63 test]# extundelete /dev/sdb1 --inode 2
. 2
lost+found 11
passwd 12 Deleted
hosts 13 Deleted
a 7313 Deleted
[root@local63 ~]# mkdir test #创建一个目录使用于存放恢复的数据
方法1:通过inode结点恢复
[root@local63 test]# extundelete /dev/sdb1 --restore-inode 12
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 9 groups loaded.
Loading journal descriptors ... 63 descriptors loaded.
[root@local63 test]# ls
RECOVERED_FILES
[root@local63 test]# diff /etc/passwd RECOVERED_FILES/file.12 # 没有任何输出,说明一样
方法二,通过文件名恢复
[root@local63 test]# extundelete /dev/sdb1--restore-filepasswd
方法三:恢复某个目录,如目录a下的所有文件:
[root@local63 test]# extundelete /dev/sdb1 --restore-directory a
[root@local63 test]# tree RECOVERED_FILES/a/
RECOVERED_FILES/a/
├── a.txt
└── b
└── a.txt
下面是原来的目录结构:
[root@local63 ~]# tree /root/sda4-back/a/
/root/sda4-back/a/
├── a.txt
└── b
├── a.txt
├── c
└── kong.txt
方法四:恢复所有的文件
[root@local63 test]# extundelete /dev/sdb1 --restore-all
[root@local63 test]# tree RECOVERED_FILES/
RECOVERED_FILES/
├── a
│ ├── a.txt
│ └── b
│ └── a.txt
├── hosts
└── passwd
这是删除前的数据:
[root@local63 ~]# tree /tmp/sda4/
/tmp/sda4/
├── a
│ ├── a.txt
│ └── b
│ ├── a.txt
│ ├── c #空目录
│ └── kong.txt #空文件
├── hosts
├── lost+found
└── passwd
extundelete在恢复文件的时候能不能自动创建空文件和目录?
能1 不能2
答:不能。
REHL7 xfs系统 可以的
总结:
方法1:通过inode结点恢复
方法二:通过文件名恢复
方法三:恢复某个目录,如目录a下的所有文件:
方法四:恢复所有的文件
tree讲课风格:1