2011年9月30日星期五

还真是浪费了一天

分区

安装ubuntu时分了两个区,大部分划给/,剩下4g划给swap。后来想重新装个win7,发现已没空间。fdisk并不能调整分区大小,也就是说,它可以删除分区,在未使用空间中建新分区,但是它不能既保证原有分区正常使用,又能划出新的剩余空间建新分区。

GParted才可以满足上述需求,类似于Windows下的分区软件。其项目主页上有具体的使用方法,要点是要调整已挂载系统分区时(我面临的情况)需要使用GParted live cd,通过grub2启动GParted live cd。

安装Win7 后修复grub

主要步骤有以下几步:
  1. live cd 启动系统
  2. 在live 系统中,挂载需要修复grub的硬盘。
    这里假设硬盘为sda:
    sudo mount /dev/sda1 /mnt
  3. 修复grub
    grub-install --root-directory=/mnt /dev/sda
  4. 重启系统,不出意外grub菜单应重新出现,选择Ubuntu(但选择Ubuntu后,会提示什么参数不正确,不过仍能启动)
  5. 进入Ubuntu后,执行
    sudo grub-install /dev/sda (是的,重新执行一遍)
    sudo update-grub2 (会把windows启动一起找到的)
最后一步很重要,可以使第4步出现的参数不正确错误消除掉。

设置grub菜单timeout

修改 /etc/default/grub 中设置GRUB_TIMEOUT。

Gnome桌面显示回收站等

gconfig-editor打开配置管理器,到/apps/nautilus/desktop 中修改。

Ubuntu版本10.04,Grub2

2011年9月29日星期四

TIL:20110929

virtualbox

virtualbox 装XP,要玩魔兽可以给魔兽建立个快捷方式,添加-opengl,这样就可以运行了,不会提示需要directX。但是效果很差劲,基本没有可玩性。

mount 命令

命令格式: mount [-t vfstype] [-o options] device dir
-t vfstype 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。
-o options 主要用来描述设备或档案的挂接方式。常用的参数有:
loop:用来把一个文件当成硬盘分区挂接上系统(挂载iso时需要)
ro:采用只读方式挂接设备
rw:采用读写方式挂接设备

制作镜像文件

  1. 将光盘放入光驱,执行下面的命令
    cp /dev/cdrom /home/sunky/mydisk.iso
  2. 将文件和目录制作成光盘镜像文件
    mkisofs -r -J -V mydisk -o /home/sunky/mydisk.iso /home/sunky/ mydir
    注:这条命令将/home/sunky/mydir目录下所有的目录和文件制作成光盘镜像文件/home/sunky/mydisk.iso,光盘卷标为:mydisk, -r Generate rationalized Rock Ridge directory information(UNIX like 平台长文件名支持), -J Generate Joliet directory information(windows平台长文件名支持)

扩展阅读
CD-Recordable FAQ

2011年9月28日星期三

vim 简介

参考资料: 这里

  1. 菜鸟级
    • 移动光标
    • hjkl
    • 退出vim
    • :q!
    • 删除字符
    • x
    • 输入字符
    • a或者i,进入插入模式
    • 保存退出vim
    • :wq 或者 shift+zz
  2. 学徒级
    • 删除单词
    • dw
    • 删除到行尾
    • d$
    • 快速移动光标
    • 0 到行首 $ 到行尾 e 到下一个"单词尾" w 到下一个"单词头" 数字N+e/w 到第N个"单词头"/"单词尾"位置
    • 删除连续多个单词
    • d+数字+w  d+数字+e
    • 删除行
    • dd 数字+dd
    • 取消操作
    • u
    • 粘帖
    • p
    • 替换字符
    • r+要替换的字符
    • 快速编辑
    • ce 删除到"单词尾",并进入插入模式 c$ 删除到行尾,并进入插入模式
  3. 入门级
    • 显示行号
    • :set number
    • 跳转到文件首
    • gg
    • 跳转到文件尾
    • G
    • 跳转到第Nth行
    • nG n为数字
    • 显示行数
    • ctrl + g
    • 查找
    • / 向前查找 ? 向后查找 n 下一个匹配 N 前一个匹配
    • 替换
    • 将当前行中第一个匹配ss替换为fff, :s/ss/fff 将当前行中所有匹配ss替换为fff, :s/ss/fff/g 将所有行中第一个匹配ss替换为fff, :%s/ss/fff 将所有行中所有匹配ss替换为fff, :%s/ss/fff/g
  4. 用户级
    • 执行外部命令
    • :!ls 执行ls命令
    • 另存文件
    • :w newfile
    • 选择文本
    • v
    • 插入文件
    • :r insertfile
    • 插入新行
    • o 新建一行 O 在当前行上面新建一行
    • 复制粘帖
    • y 复制 用法与删除d类似,比如yy就是复制一行

2011年9月27日星期二

ld.so.conf ; ldconfig ; PKG_CONFIG_PATH详解

首先说下/etc/ld.so.conf:

这个文件记录了编译时使用的动态链接库的路径。
默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件
如果你安装了某些库,比如在安装gtk+-2.4.13时它会需要glib-2.0 >= 2.4.0,辛苦的安装好glib后
没有指定 --prefix=/usr 这样glib库就装到了/usr/local下,而又没有在/etc/ld.so.conf中添加/usr/local/lib这个搜索路径,所以编译gtk+-2.4.13就会出错了
对于这种情况有两种方法解决:
一:在编译glib-2.4.x时,指定安装到/usr下,这样库文件就会放在/usr/lib中,gtk就不会找不到需要的库文件了 对于安装库文件来说,这是个好办法,这样也不用设置PKG_CONFIG_PATH了

二:将/usr/local/lib加入到/etc/ld.so.conf中,这样安装gtk时就会去搜索/usr/local/lib,同样可以找到需要的库
将/usr/local/lib加入到/etc/ld.so.conf也是必须的,这样以后安装东东到local下,就不会出现这样的问题了。
将自己可能存放库文件的路径都加入到/etc/ld.so.conf中是明智的选择
添加方法也极其简单,将库文件的绝对路径直接写进去就OK了,一行一个。例如:
/usr/X11R6/lib
/usr/local/lib
/opt/lib

再来看看ldconfig :

它是一个程序,通常它位于/sbin下,是root用户使用的。具体作用及用法可以man ldconfig查到
简单的说,它的作用就是将/etc/ld.so.conf列出的路径下的库文件 缓存到/etc/ld.so.cache 以供使用
因此当安装完一些库文件,(例如刚安装好glib),或者修改ld.so.conf增加新的库路径后,需要运行一下/sbin/ldconfig
使所有的库文件都被缓存到ld.so.cache中,如果没做,即使库文件明明就在/usr/lib下的,也是不会被使用的,结果编译过程中报错,缺少xxx库
我曾经编译KDE时就犯过这个错误,(它需要每编译好一个东东,都要运行一遍),所以切记改动库文件后一定要运行一下ldconfig,在任何目录下运行都可以。

再来说说 PKG_CONFIG_PATH这个变量吧:

经常在论坛上看到有人问"为什么我已经安装了glib-2.4.x,但是编译gtk+-2.4.x 还是提示glib版本太低阿?
为什么我安装了glib-2.4.x,还是提示找不到阿?。。。。。。"都是这个变量搞的鬼。
先说说它是哪冒出来的,当安装了pkgconfig-x.x.x这个包后,就多出了pkg-config,它就是需要PKG_CONFIG_PATH的东东
pkgconfig-x.x.x又是做什么的? 来看一段说明:

The pkgconfig package contains tools for passing the include path and/or library paths to build tools during the make file execution.

pkg-config is a function that returns meta information for the specified library.

The default setting for PKG_CONFIG_PATH is /usr/lib/pkgconfig because of the prefix we use to install pkgconfig. You may add to PKG_CONFIG_PATH by exporting additional paths on your system where pkgconfig files are installed. Note that PKG_CONFIG_PATH is only needed when compiling packages, not during run-time.

其实pkg-config就是向configure程序提供系统信息的程序,比如软件的版本啦,库的版本啦,库的路径啦,等等
这些信息只是在编译其间使用。你可以 ls /usr/lib/pkgconfig 下,会看到许多的*.pc,用文本编辑器打开
会发现类似下面的信息:

prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

glib_genmarshal=glib-genmarshal
gobject_query=gobject-query
glib_mkenums=glib-mkenums

Name: GLib
Description: C Utility Library
Version: 2.4.7
Libs: -L${libdir} -lglib-2.0
Cflags: -I${includedir}/glib-2.0 -I${libdir}/glib-2.0/include

明白了吧,configure就是靠这些信息判断你的软件版本是否符合要求。并且得到这些东东所在的位置,要不去哪里找呀。
不用我说你也知道为什么会出现上面那些问题了吧。

解决的办法很简单,设定正确的PKG_CONFIG_PATH,假如将glib-2.x.x装到了/usr/local/下,那么glib-2.0.pc就会在
/usr/local/lib/pkgconfig下,将这个路径添加到PKG_CONFIG_PATH下就可以啦。并且确保configure找到的是正确的
glib-2.0.pc,就是将其他的lib/pkgconfig目录glib-2.0.pc干掉就是啦。(如果有的话 ^-^)
设定好后可以加入到~/.bashrc中,例如:
PKG_CONFIG_PATH=/opt/kde-3.3.0/lib/pkgconfig:/usr/lib/pkgconfig:/usr/local/pkgconfig:
/usr/X11R6/lib/pkgconfig
[root@NEWLFS ~]#echo $PKG_CONFIG_PATH
/opt/kde-3.3.0/lib/pkgconfig:/usr/lib/pkgconfig:/usr/local/pkgconfig:/usr/X11R6/lib/pkgconfig

从上面可以看出,安装库文件时,指定安装到/usr,是很有好处的,无论是/etc/ld.so.conf还是PKG_CONFIG_PATH
默认都会去搜索/usr/lib的,可以省下许多麻烦,不过从源码包管理上来说,都装在/usr下
管理是个问题,不如装在/usr/local下方便管理
其实只要设置好ld.so.conf,PKG_CONFIG_PATH路径后,就OK啦

重命名USB磁盘挂载分区卷标

抄袭资料: 这里

根据不同的磁盘分区类型,分别有3个程序可供选用.
  • Mtools 适用于 FAT32 格式分区.
  • ntfsprogs 适用于 NTFS 格式分区.
  • e2label适用于 ext2 和 ext3 型格式分区.

使用mtools编辑FAT32磁盘分区卷标

mtools 是gnu提供的类似于DOS命令的工具集,用于访问和修改MS-DOS文件系统,比如有mcd,mdir。这里要用的是mlabel,修改MS-DOS 磁盘的卷标。

mtools的配置文件在/etc/mtools.conf,但你也可以在你的主目录下建立.mtoolsrc(这里是把mtools.conf复制到.mtoolsrc,可以不影响其他用户的使用),优先读取你的配置。

在.mtoolsrc 中添加一句
drive i: file="/dev/sda2"
将/dev/sda2 映射为 i 盘。用mount命令查看挂载的信息。

查看i盘的卷标
sudo mlable -s i:
修改i盘卷标为my-ipod
sudo mlable i:my-ipod

使用ntfsprogs 修改NTFS分区卷标


ntfsprogs 是用于NTFS文件系统的工具集,修改卷标使用的是其中的ntfslabel 命令。用mount查看你要修改卷标的设备,比如/dev/sdb1。这里提一下,参考资料里面没注意到,在设备已挂载的情况下,ntfslabel 命令会操作失败。所以在ntfslabel之前,要先umount。

修改卷标:
sudo ntfslabel /dev/sdb1 newlabel

使用e2label更改 ext2 或ext3 分区卷标(*未实验)


  1. 设备被自动加载后,可以用如下命令查看此新设备相关信息:
    mount
    显示信息中”sda1”或与之相似的字段即是系统分配给新设备的名字。
  2. 更改原始卷标为你喜欢的新卷标名:
    sudo e2label /dev/sda1 newlabel
    用你喜欢的卷标名替换此命令中的单词”newlabel”