2013-12

grep恢复误删除文件内容(转)

在 Linux 上如果事先没有用别名(alias)修改默认的 rm 功能,rm 后文件就会丢失,幸运的是,在一般的删除文件操作中,Linux 并不会立即清空存储该文件的 block 内容,而只会释放该文件所占用的 inode 和 data block,Linux 上 rm 的过程其实就是将 inode bitmap 和 data block bitmap 中的相应标识设为空闲状态的过程,并不涉及到真正的数据,这也是为什么在 Linux 下删除大文件这么快速的原因,因为大文件所占的磁盘根本就没有清空。所以,如果我们能找到文件对应的 inode,由此查到相应的 data block,就可能从磁盘上把已删除的文件恢复出来,很多文件/磁盘恢复工具都是这么做的。

一般来说二进制文件、库文件等删除后都可以从其他 Linux 拷贝恢复,不是很要紧,如果自己辛苦写的脚本或者配置文件误删了就杯具了。误删这种蠢事经常在 VPSee 身上发生,最近一次是在今年年初的时候,开了 screen 多次 ssh 到不同服务器上,在前后切换的过程中删除了一个很肯定的配置文件,后来发现删的文件是对的,可惜在一台错误的服务器上,本来应该在 A 服务器上删除 file.txt 结果在 B 服务器上删除了 file.txt,多个 screen 和 ssh 把自己搞晕了,而且主机名没有安排好,多台机器都是用的 localhost,不利于识别当时的环境。如果使用 Linux 的时候不幸误删了一个文本文件怎么办呢?

先临时建一个文本文件 vpsee.log 做测试,然后删除这个文件:

$ echo "important log file for vpsee.com" > vpsee.log 

$ cat vpsee.log 
important log file for vpsee.com 

$ rm vpsee.log如果能记住刚才删除文件中的某个关键字的话可以用 grep 搜索整个 /dev/sda1,-a 标志位的意思是把 /dev/sda1 这个分区看成是文本形式的(分区本身是二进制形式的),-B 10 -A 100 的意思是如果找到关键字就打印出其前10行和后100行的内容:

grep -a -B 10 -A 100 'vpsee.com' /dev/sda1 > tmp.txt

在一堆 @ 之间可以找到我们刚才删除的内容:

$ vi tmp.txt 


@$^@^@^@^@^@^@^@^@^@^@^@^A^@^@^@^@^@^@^@Ç^@^@^@^A^@^@^@^@^@^@^@^@^@^@^@È^K^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^A^@^@^@^@^@^@^@^Q^@^@^@^C^@^@^@^@^@^@^@^@^@^@^@È^K^@^@×^@
^@^@important log file for vpsee.com
@
@

当然,如果误删了二进制、doc、png/jpg/gif 之类的文件,可以用一些第三方 ext2/ext3 文件恢复工具帮助恢复文件,比如 TestDisk, PhotoRec 等。

shell编程基础练习

shell作为一个人机交互的接口,在Linux中发挥着很大的作用,而shell编程则是减轻系统工程师工作的利器,这里总结一下shell编程的主要内容(趁着程序运行的空档).

本文的基本结构是shell编程的基本命令和常用的实例。

命令篇

环境变量

环境变量指的是当shell运行后,系统默认给shell传递的变量。

$pwd:显示当前路径    
$HOME:当前用户的主目录
$#:shell中参数的个数
$0:shell文件名
$1-$n:参数值
具体还有部分预设参数列表,见(此链接)[http://www.cnblogs.com/fhefh/archive/2011/04/15/2017613.html]。

文件和目录操作

文件操作的主要命令有:

cd:切换目录
ls:列出目录下文件 通常含有 -a(隐藏文件) -l(文件权限)
mkdir,rmdir:创建,删除目录
cp,mv,rm:拷贝,移动,删除文件或者目录(rm在删除目录时需要加-rf)
ln:建立硬链接(ln -s可以建立符号链接)
chmod:改变文件权限
//chmod 对文件权限的改变方式有两种:符号方法和八进制方法
//所谓符号方法就是采用(who)(action)(permissions)来描述对对权限的操作
//这里who的选择有:u g o a,分别表示属主,组,其他和所有用户
//这里action的选择有:+ - =,分别表示增加,减少和设定文件权限。
//这里permision的选择有:r w x t s,分别表示读,写,执行,粘滞位和SGID位
//所以给个例子 chmod a+x hello.c 意思就是对hello文件的所有人增加执行权限
//而所谓八进制的方法则是对每种权限用一个数字进行表示,读4写2执行1,对所有用户生效。
//同样举个例子 chmod 777 hello.c 意思是任何人可以进行任何操作
chown:改变文件的属主 -R(递归改变该文件夹内多有文件的属主)
//这里给出用法 chown *user:group files*
chgrp:改变文件所属的组 同样可以使用上述的-R
//这里给出用户 chgrp *group files*

module graceful-fs for npm

问题:

今天使用hexo时发现错误,hexo:command not found.于是重新安装hexo.但是在安装好npm后,却发现运行

npm

出现错误,没有找到模块graceful-fs,在纠结了半天之后,发现这是node的版本问题,导致了npm不能正确安装express.

解决方案:

于是,在node的包管理器中重新安装node至高版本,再去运行npm安装hexo,就可以解决问题了。命令:

nvm install v0.8
nvm use 0.8
sudo npm install hexo -g //这一句有没有都没关系

现在再使用hexo命令就可以了。

ps:不知道为什么我的虚拟机每次重启后都不能使用hexo命令,于是我在/etc/rc.local文件下加入了

nvm use 0.8

这样,每次重启后后自动切换node.js的版本,从而就可以顺利使用hexo命令了。

over!