Linux使用笔记: 更改RPM包的安装目录

大多数人安装RPM包,都是使用下面的命令来安装:

rpm -i xxxx.rpm 

这是最简单的安装方式,RPM包中的文件将被安装到打包时所指定的默认目录中。

但在有的时候,我们没有系统的root权限不能写入根目录,或者因为某种原因(比如在进行文件恢复时)想改变一下RPM的默认安装路径。这时可以用下面的小技巧。

首先用下面的命令查看一下该RPM包的默认安装目录,例如:

easwy:~$ rpm -qpl ext3grep-0.10.0-1.el5.rf.i386.rpm 
/usr/bin/ext3grep
/usr/share/doc/ext3grep-0.10.0
/usr/share/doc/ext3grep-0.10.0/INSTALL
/usr/share/doc/ext3grep-0.10.0/LICENSE.GPL2
/usr/share/doc/ext3grep-0.10.0/NEWS
/usr/share/doc/ext3grep-0.10.0/README 

上面的命令列出了每一个文件即将被安装的位置,现在我们只需要重新用–relocate参数把安装目录定位一下就可以了:

rpm -i --relocate /usr/bin=/home/easwy/bin --relocate /usr/share/doc=/home/easwy/doc ext3grep-0.10.0-1.el5.rf.i386.rpm 

现在,ext3grep就会被安装到/home/easwy/bin目录中了。

更多内容,请阅读Easwy的博客上的其它文章。

[ 参考文档 ]

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/change-rpm-package-installation-directories/

文章的脚注信息由WordPress的wp-posturl插件自动生成

Linux使用笔记: 实用ext3grep恢复目录及文件指南(ext3文件系统)

一个同事不小心使用rm -rf命令误删了自己的代码,这意味着一个月的工作丢失了(一个月没有备份过代码,看来他以前一定没经历计算机崩溃的灾难)。我们知道rm命令无法撤销,那么有没有办法恢复这个被删除的目录以及其中的全部文件呢?

在网上搜索了一下,找到一个名为ext3grep的工具,以及它的作者的一篇文章(见参考文档)。在这个工具出现以前,恢复ext3文件系统中被删除的数据是不可能的。因为ext3文件系统不同于ext2文件系统,它在删除一个文件后,会把文件inode结点中扇区指针清为0,而这让文件恢复看起来不太可能。不过,正如ext3grep工具作者所说的,因为ext3是一个日志型的文件系统,通过分析日志信息,有很大的可能重新解析出块指针,从而恢复出目录和文件。

以下是Easwy恢复文件所采用的步骤,希望对大家有帮助。

[ 卸载被误删除文件所在的分区,或以只读方式mount ]

当你发现你误删除了文件后,要做的第一件事是马上卸载被误删除文件所在的分区,或者以只读的方式来挂载该分区。原因大家都很清楚,文件被删除后,文件中的数据还存在磁盘上,除非存放这些数据的数据块又被操作系统分配出去了。我们这一步就是尽量降低数据块中数据被覆盖的风险,以提高恢复数据成功的比率。

如果被误删的文件在根分区,那么你最好重启计算机,进入单用户模式,以只读的方式挂载根分区,然后再进行恢复。要进行单用户模式,请看Grub中进入单用户模式的方法

进入单用户模式后,根分区还是以读写方式mount的,用下面的命令,把挂载方式由读写(rw)改为只读(ro):

mount -o ro,remount / 

如果被删除的文件不是根分区,也可以用unmount的方式将该分区卸载。假设文件在分区/dev/sda3中,该分区挂载到/home,那么我们用下面的命令来卸载:

    umount /dev/sda3 

或者命令:

    umount /home 

当然,在卸载前要保证没有程序在访问该分区,否则卸载会失败。所以,Easwy一般推荐进入单用户模式来恢复文件。

[ 安装ext3grep工具 ]

恢复的第一步当然是安装ext3grep工具。对于Debian/Ubuntu用户来说,安装ext3grep工具非常简单,只需要执行下面的命令:

aptitude install ext3grep 

不过Easwy公司所使用的Linux版本是Centos,所以需要自己手工编译ext3grep工具,其实这也很简单,首先到ext3grep主页上下载它的源代码,然后用下面的命令解压/编译/安装这个工具。


tar zxf ext3grep-0.10.1.tar.gz
cd /home/easwy/ext3grep-0.10.1
./configure
make
make install 

注:在网上搜了一下,ext3grep也有rpm包可以下载,比如,RHEL/CentOS的RPM包可以在这里下载。其它Linux发行版的RPM也可以在rpmfind.net上找到。

Easwy前面说过,发现误删除后,要卸载掉该分区,或者进入单用户模式。所以最好在另外一台计算机上来编译或安装这个工具,然后把ext3grep这个可执行文件拷贝到U盘中再进行恢复。这也正是Easwy所用的方法,因为同事的文件恰好在根分区中。如果你也是这种情况,那么在用RPM包安装时,则需要把RPM包安装到你你指定的目录中,然后再把它拷贝到U盘中。

U盘里只需要拷贝ext3grep一个文件即可,它不需要动态加载库就可以执行。接下来把U盘插到待恢复的电脑上,用下面的命令加载:

mount -t vfat /dev/sdb1 /mnt 

把上面的设备号和安装点换成你自己的。如果你的设备文件还不存在的话(这也刚好是Easwy的情况),用mknod命令创建一下吧。

现在,我们可以开始文件恢复了。

[ 恢复文件 ]

在开始恢复前,选择一个目录来存放被恢复的文件。ext3grep程序会在当前目录下创建一个名为RESTORED_FILES的目录来存放被恢复的文件。因此在运行ext3grep命令前,先要切换到一个你可读写的目录中。

对Easwy来讲,因为进入了单用户模式,并且将根分区设成了只读,那么只能把恢复出来的文件放在U盘中了。因此,先cd /mnt进入U盘目录。

如果你有幸记得你误删除的文件名及其路径的话,就可以直接用下面的命令进行恢复了:

    ext3grep /dev/your-device --restore-file path/to/your/file/filename 

需要注意的是,上面的文件路径,是在该分区上文件路径。假设我们要恢复/dev/sda3分区上文件,这个分区原来的安装点是/home,现在想恢复文件/home/easwy/vi/tips.xml,那么输入的命令应该是:

    ext3grep /dev/sda3 --restore-file easwy/vi/tips.xml 

如果你忘记了文件名,或者你误删除的是一个目录而你无法记全该目录中的文件,你可以先用下面的命令查询一下文件名:

ext3grep /dev/sda3 --dump-names | tee filename.txt

上面的命令把ext3grep命令的输出记录到文件filename.txt中,你可以慢慢查看,或者使用grep命令过滤出你需要的信息。

当你知道了目录/文件的信息后,就可以用上面说的命令进行恢复了。

在ext3grep命令中有一个–depth参数,应该是用来恢复目录以及其中的所有子目录和文件的,不过Easwy用这个参数无法恢复出任何文件,只好采用笨办法,写了个脚本,一个个文件的恢复。

经过几个小时的折磨(中间走了一些弯路),同事的文件终于恢复成功了!

请阅读Easwy的博客上的其它文章获取更多信息。

[ 参考文档 ]

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/undelete-directories-files-on-ext3-filesystem-via-ext3grep/

文章的脚注信息由WordPress的wp-posturl插件自动生成

Linux使用笔记: Grub中进入单用户模式的方法

在恢复root密码,或者解决系统中严重故障时,往往需要进行单用户模式。本文介绍一下进行单用户模式的方法。Easwy在恢复误删除文件 时,就使用此方法进入了单用户模式。

进入单用户模式的方式:

  1. 重启计算机,在grub的启动菜单显示时,用上下光标键中断自动启动。

  2. 用上下键移动到所需要的启动菜单上,输入命令e来编辑该菜单项。
  3. 找到kernel所在的行,再输入命令e来编辑。
  4. 在这一行的最后加上一个单词:single,按回车结束编辑。
  5. 现在按b命令,开始启动计算机。

更多内容,请阅读Easwy的博客上的其它文章。

在恢复root密码,或者解决系统中严重故障时,往往需要进行单用户模式。本文介绍一下进行单用户模式的方法。Easwy在恢复误删除文件 时,就使用此方法进入了单用户模式。

进入单用户模式的方式:

  1. 重启计算机,在grub的启动菜单显示时,用上下光标键中断自动启动。

  2. 用上下键移动到所需要的启动菜单上,输入命令e来编辑该菜单项。
  3. 找到kernel所在的行,再输入命令e来编辑。
  4. 在这一行的最后加上一个单词:single,按回车结束编辑。
  5. 现在按b命令,开始启动计算机。

更多内容,请阅读Easwy的博客上的其它文章。

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/switch-to-single-user-mode-in-grub/

文章的脚注信息由WordPress的wp-posturl插件自动生成

Linux使用笔记: 解决Subversion提交时提示svn客户端版本太旧的问题

从另外一台计算机上拷贝了一份subversion的版本库,完成修改后提交时,出现如下错误:

$ svn ci -m "commit a new version"
subversion/libsvn_wc/questions.c:126: (apr_err=155021)
svn: This client is too old to work with working copy '/home/easwy/subversion/'; please get a newer Subversion client 

以前也遇到过这个问题,当时是升级了subversion的版本。这次因为升级计算机比较麻烦,所以打算用其它的方法绕过。

在网上搜索了一下,找到了subversion的FAQ,里面提到有时svn的工作拷贝在不同subversion版本间会存在不兼容,所以由新版本svn导出的版本库,就不能使用旧版本svn来提交,此时就会提交客户端版本太老。不过subversion的开发人员提供了一个python脚本,可以对工作拷贝的格式进行转换,转换后就可以commit了。

这个脚本在这里下载:http://svn.collab.net/repos/svn/trunk/tools/client-side/change-svn-wc-format.py

下载后,在工作拷贝所在的目录中执行:

   change-svn-wc-format.py . 1.4 

上面的命令,会把working copy的格式转换成subversion 1.4的格式,转换后再提交就可以成功了。

更多内容,请阅读Easwy的博客上的其它文章。

[ 参考文档 ]

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/subversion-client-too-old-error/

文章的脚注信息由WordPress的wp-posturl插件自动生成

Linux使用笔记: 设置Samba服务器中新建文件/目录的权限

通过Samba服务器实现windows和Linux之间的文件共享,相信是绝大多数人的选择。通常我们都会使用Samba的缺省配置,这样,每次通过Samba从Windows向Linux中拷贝文件时,文件都会被加上”可执行”的属性。对Easwy来说,这是很让人头疼的问题,每次都要通过chmod去修改文件的权限很是麻烦。

今天仔细看了一下Samba的手册,发现只要把下面的配置加入/etc/samba/smb.conf就可以解决这个问题:

create mode = 0644
force create mode = 0644
directory mode = 0755
force directory mode = 0755 

下面简单介绍一下这几个参数的含义:

  • create mode – 这个配置定义新创建文件的属性。Samba在新建文件时,会把dos文件的权限映射成对应的unix权限,在映射后所得的权限,会与这个参数所定义的值进行与操作。然后再和下面的force create mode进行或操作,这样就得到最终linux下的文件权限。
  • force create mode – 见上面的描述。相当于此参数所设置的权限位一定会出现在文件属性中。
  • directory mode – 这个配置与create mode参数类似,只是它是应用在新创建的目录上。Samba在新建目录时,会把dos–>linux映射后的文件属性,与此参数所定义的值相与,再和force directory mode相或,然后按这个值去设置目录属性。
  • force directory mode – 见上面的描述。相当于此参数中所设置的权限位一定会出现在目录的属性中。

说明一点,上面的create modecreate mask参数是同义词,用哪个都可以;而directory modedirectory mask参数是相同的。

当你发现Samba中新建的目录/文件权限不正确,例如无法访问某个目录、无法更改文件,就需要检查上面几个值的设置。

另外需要说明的是,上面几个配置项,会和security maskforce security modedirectory security maskforce directory security mode这几个配置项相互作用。这几个带”security”的配置项会影响Windows NT/2000的ACL功能,一般我们不需要设置。

更多关于Linux的内容,请关注Easwy的其它文章。

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/set-file-directory-attribute-for-linux-samba/

文章的脚注信息由WordPress的wp-posturl插件自动生成

Linux使用笔记: subversion本地拷贝和版本库不一致错误

今天在subversion中遇到一个很奇怪的问题。

我准备向版本库增加一些文件,但是遇到了几个问题,一是不小心把trunk目录中的.svn子目录删除了,不过马上又使用svn update将其恢复。另外还从其它目录拷贝了一些文件,恰好所拷贝的文件中有一个test目录和版本库已有的test文件重名。用svn rm test把原有的test文件删除,然后再用svn add把test目录加进来。

经过这些操作后,再向版本库中提交,总是显示失败信息。于是打算重新用svn update命令更新一下版本库,但这个命令也执行失败了,显示如下信息:

easwy:~/trunk$ svn update

svn: Two top-level reports with no target

在网上搜索了一下,似乎出现这个错误是由于本地的拷贝和版本库上状态不一致造成的,不过并找没有一个很好的解决方法。

没有办法,只好再次checkout一下版本库,然后按步就班的重新操作了一遍,问题就解决了。

更多内容,请阅读Easwy的博客上的其它文章。

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/subversion-two-top-level-error/

文章的脚注信息由WordPress的wp-posturl插件自动生成

Linux使用笔记: 修改putty的缺省值设置

从windows访问Linux的命令行,putty + screen是非常棒的组合。不过正如之前Easwy倍受screen闪屏的困扰一样,putty也有一个让Easwy很困扰的问题,那就是无法更改它的缺省配置。

每次使用putty命令ssh到一个远程Linux时,都要手动修改一些配置,例如将屏幕卷回的大小由200改成9999,将编码改成UTF-8以避免某些命令的输出乱码,或者缺省使能putty的log功能之类。每次都去修改设置很是麻烦。

虽然我们可以保存会话的设置,不过很多时间,我们无法为所有要访问的Linux设备都创建一个会话。很多时候还是希望能够修改缺省配置。

今天在网上搜索了一下,终于找到修改putty缺省值的方法了。这个方法和创建会话其实是一样的。所以下面先介绍创建会话的方法。

我们在创建会话时,一般先选择”新建会话”菜单(new session…),然后会弹出一个窗口,在此窗口中添入你要ssh的Linux主机、端口,然后修改其它类别的配置。完成全部配置修改后,再回到”会话”(session)类别,在”保存的会话”(saved sessions)一栏中添入一个会话的名字,然后点击保存,把这个会话保存下来。

这样创建好会话后,以后每次打开putty,直接选择”保存的会话”菜单中的会话,就可直接访问相应的主机。putty会使用你所保存的设置来访问这台主机。

现在该讲如何修改putty的缺省配置了。首先还是选择”新建会话”菜单(new session…),在弹出的窗口中修改你的配置,Easwy是修改了屏幕卷回的行数、编码等内容。完成修改后,回到”会话”类别中,在”保存的会话”(saved sessions)一栏中,添入”Default Settings”,然后点击保存。Yes, That is it!

现在你再新打开一个putty窗口,选择”新建会话”,然后看一下putty的设置,应该就是你所保存的缺省配置了。

注:由于Easwy没有使用putty中文版,所以上述菜单的中文名可能与putty中文版中的不符,请自行对照操作。

更多关于putty和screen的技巧,请关注Easwy的其它文章。

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/change-default-configuration-of-putty/

文章的脚注信息由WordPress的wp-posturl插件自动生成

Linux使用笔记: 定制core dump文件的文件名

在开发过程中,当一个Linux程序异常退出时,我们可以通过core文件来分析它异常的详细原因。缺省情况下,Linux在程序异常时不产生core文件,要想让程序异常退出时产生core dump文件,需要使用ulimit命令更改coredump的设置:

ulimit -c unlimited 

上面的命令表示在程序异常时产生core dump文件,并且不对core dump文件的大小进行限制。

上述设置只是使能了core dump功能,缺省情况下,内核在coredump时所产生的core文件放在与该程序相同的目录中,并且文件名固定为core。很显然,如果有多个程序产生core文件,或者同一个程序多次崩溃,就会重复覆盖同一个core文件。

我们通过修改kernel的参数,可以指定内核所生成的coredump文件的文件名。例如,Easwy使用下面的命令使kernel生成名字为core.filename.pid格式的core dump文件:

echo 'core.%e.%p' > /proc/sys/kernel/core_pattern 

这样配置后,产生的core文件中将带有崩溃的程序名、以及它的进程ID。上面的%e%p会被替换成程序文件名以及进程ID。

可以在core_pattern模板中使用变量还很多,见下面的列表:

  • %% 单个%字符
  • %p 所dump进程的进程ID
  • %u 所dump进程的实际用户ID
  • %g 所dump进程的实际组ID
  • %s 导致本次core dump的信号
  • %t core dump的时间 (由1970年1月1日计起的秒数)
  • %h 主机名
  • %e 程序文件名

如果在上述文件名中包含目录分隔符”/“,那么所生成的core文件将会被放到指定的目录中。

需要说明的是,在内核中还有一个与coredump相关的设置,就是/proc/sys/kernel/core_uses_pid。如果这个文件的内容被配置成1,那么即使core_pattern中没有设置%p,最后生成的core dump文件名仍会加上进程ID。

对所生成的core dump进程分析,需要使用调试工具,例如GDB等。可以参见Easwy的其它文章。

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/customize-filename-of-core-dump/

文章的脚注信息由WordPress的wp-posturl插件自动生成

祝杨乐盈生日快乐!

今天是杨乐盈三岁生日,爸爸在此祝她生日快乐!希望她永远都能像现在这样健健康康、快快乐乐!!

快乐的杨美丫

快乐的杨美丫

杨美丫和她的速写,是不是有几分神似? :-)

杨美丫和她的速写

杨美丫,爸爸妈妈永远爱你!

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/yangleying-is-three-years-old-today/

文章的脚注信息由WordPress的wp-posturl插件自动生成

Linux使用笔记: 关闭Linux下screen的闪屏功能

从windows访问Linux命令行,最佳工具组合是putty + screen。这两个工具都是非常出色的开源软件。

在IBM网站上的linux 技巧:使用 screen 管理你的远程会话是一篇很好的介绍screen的文章。本文不再重复介绍screen这个工具,而主要介绍如何关闭screen的闪屏功能。

在最初使用screen时,感觉最不舒服的就是它的闪屏。当移动到行首或者行尾时,再尝试移动屏幕就会闪烁一下,让人很不适应。关闭screen屏幕闪动的方法其实很简单,你只需要使用CTRL-a CTRL-g,也就是先输入CTRL + a,再输入CTRL + g。

如果想永远关闭screen的闪屏功能,需要修改配置文件。在CentOS中可以修改/etc/screenrc,修改这个文件将对所有用户生效。Easwy一般只修改自己的配置文件。在$HOME/.screenrc中加入下面的话:


vbell off 

其实这与vi中的visualbell功能很是类似。在vi中关闭闪屏,是使用:set novisualbell命令。

关于putty和screen的其它使用技巧,参见Easwy的其它文章。

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/disable-vbell-of-screen/

文章的脚注信息由WordPress的wp-posturl插件自动生成