2009年12月29日星期二

更改centos的主机名

编辑:/etc/sysconfig/network里的HOSTNAME=newhost

如何在CentOS 5下安装VirtualBox客户端增强功能

如何在CentOS 5下安装VirtualBox客户端增强功能
转自:http://www.080909.com/wordpress/2009/02/how-to-install-centos-5-under-virtualbox-client-enhancements/

VirtualBox是SUN公司开发的虚拟系统软件,可安装于各种系统平台上,虚拟机也支持多种操作系统的模拟。而CentOS是 The Community ENTerprise Operating System 的缩写,中文是社区企业操作系统。它是Redhat Enterprise Linux(下称RHEL)的重发行版,并且提供免费的yum升级服务。版本跟随RHEL,在使用上跟RHEL没有大区别。最新版本是5.2。

当在VirtualBox中安装好CentOS好,如果直接安装VirtualBox的Guest Additions时,会提示“Please install the build and header files for your current Linux kernel.”。需要安装内核开发包和gcc包。

在CentOS下安装内核开发包和gcc包的方法如下,在终端中输入

yum install kernel-devel
yum install gcc

这样就已安装好内核开发包。但当再次安装Guest Additions时,还是会提示需要安装内核开发包。只有给当前内核创建个链接后才能正常安装VirtualBox的Guest Additions。
ln -s /usr/src/kernels/2.6.18-92.1.18.el5-i686 /usr/src/linux
sh VBoxLinuxAdditions-x86.run

2009年12月27日星期日

putty用ras自动登录ssh服务器

OpenSSH 密钥管理,第 3 部分
1、SSH服务器
$ vi /etc/ssh/sshd_config
PermitRootLogin no (不允许root登录)
AllowUsers sshuser user1 user2 (只允许user1 user1登录)
PasswordAuthentication no (对于是否能用密码登录的设定)
KerberosAuthentication no (同上)
UsePAM no

2、PuTTY生成密钥(Window)
生成KEY:
运行 puttygen.exe 在最下方先择你要的加密算法及位数,如:SSH-2 DSA 2048
点击 "Generate" 生成密钥
"Save public key" 保存公钥如:wsshtest
"Save private key" 保存私钥如:wsshtest.ppk
(注意:这里最好不要关闭窗口,复制窗口上面的公钥的内容。以便粘贴到ssh主机中。)

3、putty设置公钥
用putty登录(密码方式):
#mkdir .ssh
$chmod 700 .ssh
$touch .ssh/authorized_keys
$chmod 600 .ssh/authorized_keys
$vi .ssh/authorized_keys
(粘贴第二步复制的内容)

4、启动puttyagent添加公钥

5、putty设置密钥
Connection -> SSH -> Auth > Private key file for authentication 中选择生成的密钥。

about tmpfs

转自:http://www.ibm.com/developerworks/cn/linux/filesystem/l-fs3/index.html

参考:

http://forums.gentoo.org/viewtopic-t-371889-highlight-tmpfs.html

http://forums.debian.net/viewtopic.php?t=16450


介绍 tmpfs

如果我必须一下子说清楚 tmpfs,我会说 tmpfs 就象虚拟磁盘(ramdisk),但不一样。象虚拟磁盘一样,tmpfs 可以使用您的 RAM,但它也可以使用您的交换分区来存储。而且传统的虚拟磁盘是个块设备,并需要一个 mkfs 之类的命令才能真正地使用它,tmpfs 是一个文件系统,而不是块设备;您只是安装它,它就可以使用了。总而言之,这让 tmpfs 成为我有机会遇到的最好的基于 RAM 的文件系统。

tmpfs 和 VM

让我们来看看 tmpfs 更有趣的一些特性吧。正如我前面提到的一样,tmpfs 既可以使用 RAM, 可 以使用交换分区。刚开始这看起来可能有点武断,但请记住 tmpfs 也是我们知道的“虚拟内存文件系统”。而且,您可能也知道,Linux 内核的虚拟内存资源同时来源于您的 RAM 和交换分区。内核中的 VM 子系统将这些资源分配到系统中的其它部分,并负责在后台管理这些资源,通常是透明地将 RAM 页移动到交换分区或从交换分区到 RAM 页。

tmpfs 文件系统需要 VM 子系统的页面来存储文件。tmpfs 自己并不知道这些页面是在交换分区还是在 RAM 中;做这种决定是 VM 子系统的工作。tmpfs 文件系统所知道的就是它正在使用某种形式的虚拟内存。

不是块设备

这 里是 tmpfs 文件系统另一个有趣的特性。不同于大多数“标准的”文件系统,如 ext3、ext2、XFS、JFS、ReiserFS 和其它一些系统,tmpfs 并不是存在于一个底层块设备上面。因为 tmpfs 是直接建立在 VM 之上的,您用一个简单的 mount 命令就可以创建 tmpfs 文件系统了。

# mount tmpfs /mnt/tmpfs -t tmpfs

执行这个命令之后,一个新的 tmpfs 文件系统就安装在 /mnt/tmpfs,随时可以使用。注意,不需运行 mkfs.tmpfs ;事实上,那是不可能的,因为没有这样的命令存在。在 mount 命令执行之后,文件系统立即就被安装并且可以使用了,类型是 tmpfs 。这和 Linux 虚拟磁盘如何使用大相径庭;标准的 Linux 虚拟磁盘是 块设备,所以在使用它们之前必须用您选择的文件系统将其格式化。相反,tmpfs 一个文件系统。所以,您可以简单地安装它就可以使用了。

Tmpfs 的优势

动态文件系统的大小

您可能想知道我们前面在 /mnt/tmpfs 安装的 tmpfs 文件系统有多大。这个问题的答案有点意外,特别是在和基于磁盘的文件系统比较的时候。/mnt/tmpfs 最初会只有很小的空间,但随着文件的复制和创建,tmpfs 文件系统驱动程序会分配更多的 VM,并按照需求动态地增加文件系统的空间。而且,当 /mnt/tmpfs 中的文件被删除时,tmpfs 文件系统驱动程序会动态地减小文件系统并释放 VM 资源,这样做可以将 VM 返回到循环当中以供系统中其它部分按需要使用。因为 VM 是宝贵的资源,所以您一定不希望任何东西浪费超出它实际所需的 VM,tmpfs 的好处之一就在于这些都是自动处理的。 请参阅 参考资料

速度

tmpfs 的另一个主要的好处是它闪电般的速度。因为典型的 tmpfs 文件系统会完全驻留在 RAM 中,读写几乎可以是瞬间的。即使用了一些交换分区,性能仍然是卓越的,当更多空闲的 VM 资源可以使用时,这部分 tmpfs 文件系统会被移动到 RAM 中去。让 VM 子系统自动地移动部分 tmpfs 文件系统到交换分区实际上对性能上是 的,因为这样做可以让 VM 子系统为需要 RAM 的进程释放空间。这一点连同它动态调整大小的能力,比选择使用传统的 RAM 磁盘可以让操作系统有好得多的整体性能和灵活性。

没有持久性

这 看起来可能不象是个积极因素,tmpfs 数据在重新启动之后不会保留,因为虚拟内存本质上就是易失的。我想您可能猜到了 tmpfs 被称为“tmpfs”的一个原因,不是吗?然而,这实际上可以是一件好事。它让 tmpfs 成为一个保存您不需保留的数据(如临时文件,可以在 /tmp 中找到,还有 /var 文件系统树的某些部分)的卓越的文件系统。


使用 tmpfs

为了使用 tmpfs,您所需要的就是启用了“Virtual memory file system support(以前是 shm fs)”选项的 2.4 系列内核;这个选项在内核配置选项的“File systems”部分。一旦您有了一个启用了 tmpfs 的内核,您就可以开始安装 tmpfs 文件系统了。其实,在您所有的 2.4 内核中都打开 tmpfs 选项是个好主意,不管您是否计划使用 tmpfs。这是因为您需要内核 tmpfs 支持来使用 POSIX 共享的内存。然而, System V共享的内存不需要内核中有 tmpfs 就 可以工作。注意,您 需要为了让 POSIX 共享的内存工作而安装 tmpfs 文件系统;您只需要在内核中支持 tmpfs 就可以了。POSIX 共享的内存现在使用得不太多,但这种情况可能会随着时间而改变。

避免低 VM 情况

tmpfs 根据需要动态增大或减小的事实让人疑惑:如果您的 tmpfs 文件系统增大到它耗尽了 所有虚 拟内存的程度,而您没有剩余的 RAM 或交换分区,这时会发生什么?一般来说,这种情况是有点讨厌。如果是 2.4.4 内核,内核会立即锁定。如果是 2.4.6 内核,VM 子系统已经以很多种方式得到了修正,虽然耗尽 VM 并不是一个美好的经历,事情也不会完全地失败。如果 2.4.6 内核到了无法分配更多 VM 的程度,您显然不愿意不能向 tmpfs 文件系统写任何新数据。另外,可能会发生其他一些事情。首先,系统的其他一些进程会无法分配更多的内存;通常,这意味着系统多半会变得 极度缓慢而且几乎没有响应。这样,超级用户要采取必要的步骤来缓解这种低 VM 的情况就会很困难,或异常地耗时。

另 外,内核有一个内建的最终防线系统,用来在没有可用内存的时候释放内存,它会找到占用 VM 资源的进程并终止该进程。不幸的是,这种“终止进程”的解决方案在 tmpfs 的使用增加引起 VM 耗尽的情况下通常会导致不良后果。以下是原因。tmpfs 本身不能(也不应该)被终止,因为它是内核的一部分而非一个用户进程,而且也没有容易的方法可以让内核找出是那个进程占满了 tmpfs 文件系统。所以,内核会错误地攻击它能找到的最大的占用 VM 的进程,通常会是 X 服务器(X server),如果您碰巧在使用它。所以,您的 X 服务器会被终止,而引起低 VM 情况的根本原因(tmpfs)却没有被解决。Ick.

低 VM:解决方案

幸运的是,tmpfs 允许您在安装或重新安装文件系统的时候指定文件系统容量的最大值上限。实际上,从 2.4.6 内核到 2.11g 内核,这些参数只能在 安装时 设置,而不是重新安装时,但我们可以期望在不久的将来可以在重新安装时设置这些参数。tmpfs 容量最大值的最佳设置依赖于资源和您特定的 Linux 主机的使用模式;这个想法是要防止一个完全使用资源的 tmpfs 文件系统耗尽所有虚拟内存结果导致我们前面谈到的糟糕的低 VM 情况。寻找好的 tmpfs 上限值的一个好方法是使用 top 来监控您系统的交换分区在高峰使用阶段的使用情况。然后,确保指定的 tmpfs 上限稍小于所有这些高峰使用时间内空闲交换分区和空闲 RAM 的总和。

创建有最大容量的 tmpfs 文件系统很容易。要创建一个新的最大 32 MB 的 tmpfs 文件系统,请键入:

# mount tmpfs /dev/shm -t tmpfs -o size=32m

这次,我们没有把 tmpfs 文件系统安装在 /mnt/tmpfs,而是创建在 /dev/shm,这正好是 tmpfs 文件系统的“正式”安装点。如果您正好在使用 devfs,您会发现这个目录已经为您创建好了。

还有,如果我们想将文件系统的容量限制在 512 KB 或 1 GB 以内,我们可以分别指定 size=512ksize=1g 。除了限制容量,我们还可以通过指定 nr_inodes=x 参数限制索引节点(文件系统对象)。在使用 nr_inodes 时, x 可以是一个简单的整数,后面还可以跟一个 kmg 指定千、百万或十亿(!)个索引节点。

而且,如果您想把上面的 mount tmpfs 命令的等价功能添加到 /etc/fstab,应该是这样:

tmpfs /dev/shm tmpfs size=32m 0 0


在现存的安装点上安装

在以前使用 2.2 的时候,试图在 已经安 装了东西的安装点再次安装任何东西都会引发错误。然而,重写后的内核安装代码使多次使用安装点不再成为问题。这里是一个示例的情况:假设我们有一个现存的 文件系统安装在 /tmp。然而,我们决定要开始使用 tmpfs 进行 /tmp 的存储。过去,您唯一的选择就是卸载 /tmp 并在其位置重新安装您新的 tmpfs/tmp 文件系统,如下所示:

#  umount /tmp
# mount tmpfs /tmp -t tmpfs -o size=64m

可是,这种解决方案也许对您不管用。可能有很多正在运行的进程在 /tmp 中有打开的文件;如果是这样,在试图卸载 /tmp 时,您就会遇到如下的错误:

umount: /tmp: device is busy

然而,使用最近的 2.4 内核,您可以安装您新的 /tmp 文件系统,而不会遇到“device is busy”错误:

# mount tmpfs /tmp -t tmpfs -o size=64m

用一条命令,您新的 tmpfs /tmp 文件系统就被安装在 /tmp,并安装在已经安装的不能再被直接访问的分区 之上。然而,虽然您不能访问原来的 /tmp,任何在原文件系统上还有打开文件的进程都可以继续访问它们。而且,如果您 unmount 基于 tmpfs 的 /tmp,原来安装的 /tmp 文件系统会重新出现。实际上,您在相同的安装点上可以安装任意数目的文件系统,安装点就象一个堆栈;卸载当前的文件系统,上一个最近安装的文件系统就会重新出现。



绑定安装

使用绑定安装,我们可以将所有甚至 部分已经安装的文件系统安装到另一个位置,而在两个安装点可以同时访问该文件系统。例如,您可以使用绑定安装来安装您现存的根文件系统到 /home/drobbins/nifty,如下所示:

#  mount --bind / /home/drobbins/nifty

现 在,如果您观察 /home/drobbins/nifty 的内部,您就会看到您的根文件系统(/home/drobbins/nifty/etc、/home/drobbins/nifty/opt 等)。而且,如果您在根文件系统修改文件,您在 /home/drobbins/nifty 中也可以看到所作的改动。这是因为它们是同一个文件系统;内核只是简单地为我们将该文件系统映射到两个不同的安装点。注意,当您在另一处安装文件系统时, 任何安装在绑定安装文件系统 内部的安装点的文件系统都不会随之移动。换句话说,如果您在单独的文件系统上有 /usr,我们前面执行的绑定安装就会让 /home/drobbins/nifty/usr 为空。您会需要附加的绑定安装命令来使您能够浏览位于 /home/drobbins/nifty/usr 的 /usr 的内容:

#  mount --bind /usr /home/drobbins/nifty/usr

绑定安装部分文件系统

绑定安装让更妙的事情成为可能。假设您有一个 tmpfs 文件系统安装在它的传统位置 /dev/shm,您决定要开始在当前位于根文件系统的 /tmp 使用 tmpfs。虽然可以在 /tmp(这是可能的)安装一个新的 tmpfs 文件系统,您也可以决定让新的 /tmp 共享当前安装的 /dev/shm 文件系统。然而,虽然您可以在 /tmp 绑定安装 /dev/shm 就完成了,但您的 /dev/shm 还包含一些您不想在 /tmp 出现的目录。所以,您怎么做呢?这样如何:

# mkdir /dev/shm/tmp
# chmod 1777 /dev/shm/tmp
# mount --bind /dev/shm/tmp /tmp

在这个示例中,我们首先创建了一个 /dev/shm/tmp 目录,然后给它 1777 权限,对 /tmp 适当的许可。既然我们的目录已经准备好了,我们可以安装,也只能安装 /dev/shm/tmp 到 /tmp。所以,虽然 /tmp/foo 会映射到 /dev/shm/tmp/foo,但您没有办法从 /tmp 访问 /dev/shm/bar 文件。

正如您所见,绑定安装非常强大,让您可以轻易地修改文件系统设计,丝毫不必忙乱。下一篇文章,我们会谈到 devfs,至于现在,您也许会想看看下面的参考资料。

Linux启动

# 转自:http://blog.chinaunix.net/u/23204/showart_199920.html
# 参考:Linux启动过程综述
, man init

(1) 从BIOS到内核

BIOS自检

计算机在接通电源之后首先由BIOS进行自检,即进行所谓的POST(Power On Self
Test), 然后依据BIOS内设置的引导顺序从硬盘、软盘或CDROM中读入“引导块”。 在 PC 中,引导 Linux 是从 BIOS 中的地址 0xFFFF0 处开始的。BIOS 的第一个步骤是加电自检(POST)。POST 的工作是对硬件进行检测。BIOS 的第二个步骤是进行本地设备的枚举和初始化。给定 BIOS 功能的不同用法之后,BIOS 由两部分组成:POST 代码和运行时服务。当 POST 完成之后,它被从内存中清理了出来,但是 BIOS 运行时服务依然保留在内存中,目标操作系统可以使用这些服务。

要引导一个操作系统,BIOS 运行时会按照 CMOS 的设置定义的顺序来搜索处于活动状态并且可以引导的设备。引导设备可以是软盘、CD-ROM、硬盘上的某个分区、网络上的某个设备,甚至是 USB 闪存。通常,Linux 都是从硬盘上引导的,其中主引导记录(MBR)中包含主引导加载程序。MBR 是一个 512 字节大小的扇区,位于磁盘上的第一个扇区中(0 道 0 柱面 1 扇区)。当 MBR 被加载到 RAM 中之后,BIOS 就会将控制权交给 MBR。

提取 MBR 的信息

要查看 MBR 的内容,请使用下面的命令:

# dd if=/dev/hda of=mbr.bin bs=512 count=1 # od -xa mbr.bin

这个 dd 命令需要以 root 用户的身份运行,它从 /dev/hda(第一个 IDE 盘) 上读取前 512 个字节的内容,并将其写入 mbr.bin 文件中。od 命令会以十六进制和 ASCII 码格式打印这个二进制文件的内容。
(2)启动GRUB/LILO

GRUB和LILO都是引导加载程序。最简单地 讲,引导加载程序(boot loader) 会引导操作系统。当机器引导它的操作系统时,BIOS 会读取引导介质上最前面的 512 字节(即人们所知的 主引导记录(master boot record,MBR))。在单一的 MBR 中只能存储一个操作系统的引导记录,所以当需要多个操作系统时就会出现问题。所以需要更灵活的引导加载程序。

GRUB 与 LILO 的比较

如本文开始处所述,所有引导加载程序都以类似的方式工作,满足共同的目的。不过,LILO 和 GRUB 之间有很多不同之处:

  • LILO 没有交互式命令界面,而 GRUB 拥有。
  • LILO 不支持网络引导,而 GRUB 支持。
  • LILO 将关于可以引导的操作系统位置的信息物理上存储在 MBR 中。如果修改了 LILO 配置文件,必须将 LILO 第一阶段引导加载程序重写到 MBR。相对于 GRUB,这是一个更为危险的选择,因为错误配置的 MBR 可能会让系统无法引导。使用 GRUB,如果配置文件配置错误,则只是默认转到 GRUB 命令行界面。

安全提示:

关于安全性,任何可以接触到引导磁盘/CD 的人,只需要使用没有设置安全性的 grub.conf 或 lilo.conf,就可以绕过本文中提及的所有安全措施。特别是使用 GRUB 时,因为能够引导到单用户模式,所以是一个严重的安全漏洞。解决此问题的一个简单方法是在机器的 BIOS 中禁止通过 CD 和软盘进行引导,并确保为 BIOS 设置了一个口令,使得其他人不能修改这些设置。
(3)加载内核

当内核映像被加载到内存之后,内核阶段就开始了。 内核映像并不是一个可执行的内核,而是一个压缩过的内核映像。通常它是一个 zImage(压缩映像,小于 512KB)或一个 bzImage(较大的压缩映像,大于 512KB),它是提前使用 zlib 进行压缩过的。在这个内核映像前面是一个例程,它实现少量硬件设置,并对内核映像中包含的内核进行解压,然后将其放入高端内存中,如果有初始 RAM 磁盘映像,就会将它移动到内存中,并标明以后使用。然后该例程会调用内核,并开始启动内核引导的过程。

GRUB 中的手工引导

在 GRUB 命令行中,我们可以使用 initrd 映像引导一个特定的内核,方法如下:

grub> kernel /bzImage-2.6.14.2
[Linux-bzImage, setup=0x1400, size=0x29672e]

grub> initrd /initrd-2.6.14.2.img
[Linux-initrd @ 0x5f13000, 0xcc199 bytes]

grub> boot

Uncompressing Linux... Ok, booting the kernel.
如果您不知道要引导的内核的名称,只需使用斜线(/)然后按下 Tab 键即可。GRUB 会显示内核和 initrd 映像列表。
(4)执行init进程

init进程是系统所有进程的起点,内核在完成核内引导以后,即在本线程(进程)空间内加载init程序,它的进程号是1。init进程是所有进程的发起 者和控制者。因为在任何基于Unix的系统(比如Linux)中,它都是第一个运行的进程,所以init进程的编号(Process ID,PID)永远是1。如果init出现了问题,系统的其余部分也就随之而垮掉了。

init进程有两个作用。第一个作用是扮演终结父进程的角色。因为init进程永远不会被终止,所以系统总是可以确信它的存在,并在必要的时候以它为参 照。如果某个进程在它衍生出来的全部子进程结束之前被终止,就会出现必须以init为参照的情况。此时那些失去了父进程的子进程就都会以init作为它们 的父进程。快速执行一下ps -af 命令,可以列出许多父进程ID(Parent Process ID,PPID)为1的进程来。

init的第二个角色是在进入某个特定的运行级别(Runlevel)时运行相应的程序,以此对各种运行级别进行管理。它的这个作用是由/etc/inittab文件定义的。
(5)通过/etc/inittab文件进行初始化

init的工作是根据/etc/inittab来执行相应的脚本进行系统初始化,如设置键盘、字体, 装载模块,设置网络,等等。

对于RedhatLinux来说,执行的顺序为:

  • /etc/rc.d/rc.sysinit # 由init执行的第一个脚本
    /etc/rc.d/rc.sysinit主要做在各个运行模式中相同的初始化工作,包括:
    设置初始的$PATH变量。
    配置网络。
    为虚拟内存启动交换。
    设置系统的主机名。
    检查root文件系统,以进行必要的修复。
    检查root文件系统的配额。
    为root文件系统打开用户和组的配额。
    以读/写的方式重新装载root文件系统。
    清除被装载的文件系统表/etc/mtab。
    把root文件系统输入到mtab。
    使系统为装入模块做准备。
    查找模块的相关文件。
    检查文件系统,以进行必要的修复。
    加载所有其他文件系统。
    清除几个/etc文件:/etc/mtab、/etc/fastboot和/etc/nologin。
    删除UUCP的lock文件。
    删除过时的子系统文件。
    删除过时的pid文件。
    设置系统时钟。
    打开交换。
    初始化串行端口。
    装入模块。
  • /etc/rc.d/rcX.d/[KS]

    首先终止“K”开头的服务,然后启动“S”开头的服务。

    对每一个运行级别来说,在/etc/rc.d子目录中都有一个对应的下级目录。这些运行级别的下级子目录的命名方法是rcX.d,其中的X就是代表运行级 别的数字。比如说,运行级别3的全部命令脚本程序都保存在/etc/rc.d/rc3.d子目录中。在各个运行级别的子目录中,都建立有到/etc /rc.d/init.d子目录中命令脚本程序的符号链接,但是,这些符号链接并不使用命令脚本程序在 /etc/rc.d/init.d子目录中原来的名字。如果命令脚本程序是用来启动一个服务的,其符号链接的名字就以字母S打头;如果命令脚本程序是用来 关闭一个服务的,其符号链接的名字就以字母K打头。许多情况下,这些命令脚本程序的执行顺序都很重要。如果没有先配置网络接口,就没有办法使用DNS服务 解析主机名!为了安排它们的执行顺序,在字母S或者 K的后面紧跟着一个两位数字,数值小的在数值大的前面执行。比如:/etc/rc.d/rc3.d/S50inet就会在 /etc/rc.d/rc3.d/S55named之前执行。存放在/etc/rc.d/init.d子目录中的、被符号链接上的命令脚本程序是真正的实 干家,是它们完成了启动或者停止各种服务的操作过程。当 /etc/rc.d/rc运行通过每个特定的运行级别子目录的时候,它会根据数字的顺序依次调用各个命令脚本程序执行。它先运行以字母K打头的命令脚本程 序,然后再运行以字母S打头的命令脚本程序。对以字母K打头的命令脚本程序来说,会传递Stop参数;类似地对以字母S打头的命令脚本程序来说,会传递 Start参数。
  • 执行/etc/ec.d/rc.local
    Redhat Linux中的运行模式2、3、5都把/etc/rc.d/rc.local做为初始化脚本中的最后一个,所以用户可以自己在这个文件中添加一些需要在其 他初始化工作之后,登录之前执行的命令。在维护Linux系统运转的日子里,肯定会遇到需要系统管理员对开机或者关机命令脚本进行修改的情况。如果所做的 修改只在引导开机的时候起作用,并且改动不大的话,可以考虑简单地编辑一下/etc/rc.d/rc.local脚本。这个命令脚本程序是在引导过程的最 后一步被执行的。
  • 执行 /bin/login 程式

    login 程序会提示使用者需输入账号及密码, 接着编码并确认密码的正确性, 若二者相合, 则为使用者进行初始化环境, 并将控制权交给 shell,即等待用户登录。
    多次为止Linux启动过程全部结束。

最后笔者使用图1解释全部过程。

图1 Linux启动流程

总结:与 Linux 本身非常类似,Linux 的启动引导过程也非常灵活,可以支持众多的处理器和硬件平台。LILO 引导加载程序对引导能力进行了扩充,但是它却缺少文件系统的感知能力。最新一代的引导加载程序,例如 GRUB将更加灵活。

debian 触摸板的设置

打字的时候总是碰到触摸板,很是讨厌,下面是禁用它的办法:
1。查看触摸板是哪个设备:
$ cat /proc/bus/input/devices
I: Bus=0017 Vendor=0001 Product=0001 Version=0100
N: Name="Macintosh mouse button emulation"
P: Phys=
S: Sysfs=/class/input/input0
U: Uniq=
H: Handlers=mouse0 event0
B: EV=7
B: KEY=70000 0 0 0 0
B: REL=3

I: Bus=0011 Vendor=0001 Product=0001 Version=ab41
N: Name="AT Translated Set 2 keyboard"
P: Phys=isa0060/serio0/input0
S: Sysfs=/class/input/input1
U: Uniq=
H: Handlers=kbd event1
B: EV=120013
B: KEY=402000000 3803078f800d001 feffffdfffefffff fffffffffffffffe
B: MSC=10
B: LED=7

I: Bus=0003 Vendor=04f3 Product=0214 Version=0111
N: Name="PS/2+USB Mouse"
P: Phys=usb-0000:00:1d.1-1/input0
S: Sysfs=/class/input/input2
U: Uniq=
H: Handlers=mouse1 event2
B: EV=17
B: KEY=1f0000 0 0 0 0
B: REL=103
B: MSC=10

I: Bus=0019 Vendor=0000 Product=0002 Version=0000
N: Name="Power Button (FF)"
P: Phys=LNXPWRBN/button/input0
S: Sysfs=/class/input/input3
U: Uniq=
H: Handlers=kbd event3
B: EV=3
B: KEY=10000000000000 0

I: Bus=0019 Vendor=0000 Product=0001 Version=0000
N: Name="Power Button (CM)"
P: Phys=PNP0C0C/button/input0
S: Sysfs=/class/input/input4
U: Uniq=
H: Handlers=kbd event4
B: EV=3
B: KEY=10000000000000 0

I: Bus=0019 Vendor=0000 Product=0003 Version=0000
N: Name="Sleep Button (CM)"
P: Phys=PNP0C0E/button/input0
S: Sysfs=/class/input/input5
U: Uniq=
H: Handlers=kbd event5
B: EV=3
B: KEY=4000 0 0

I: Bus=0019 Vendor=0000 Product=0005 Version=0000
N: Name="Lid Switch"
P: Phys=PNP0C0D/button/input0
S: Sysfs=/class/input/input6
U: Uniq=
H: Handlers=event6
B: EV=21
B: SW=1

I: Bus=0019 Vendor=0000 Product=0006 Version=0000
N: Name="Video Bus"
P: Phys=/video/input0
S: Sysfs=/class/input/input7
U: Uniq=
H: Handlers=kbd event7
B: EV=3
B: KEY=3f000b00000000 0 0 0

I: Bus=0010 Vendor=001f Product=0001 Version=0100
N: Name="PC Speaker"
P: Phys=isa0061/input0
S: Sysfs=/class/input/input8
U: Uniq=
H: Handlers=kbd event8
B: EV=40001
B: SND=6

I: Bus=0003 Vendor=0c45 Product=63eb Version=8923
N: Name="Laptop_Integrated_Webcam_2M"
P: Phys=usb-0000:00:1a.7-6
S: Sysfs=/class/input/input9
U: Uniq=
H: Handlers=event9
B: EV=3
B: KEY=1 0 0 0 0

I: Bus=0011 Vendor=0002 Product=0007 Version=01b1
N: Name="SynPS/2 Synaptics TouchPad"
P: Phys=isa0060/serio1/input0
S: Sysfs=/class/input/input10
U: Uniq=
H: Handlers=mouse2 event10
B: EV=b
B: KEY=6420 70000 0 0 0 0
B: ABS=11000003

这样就可以看到,触摸板的设备是:mouse2(/dev/mouse2)上面红字部分。

2。安装调整触摸板软件(gsynaptics)这是一个图形前端,用的是synclient命令,可以用命令行但是麻烦。
$ sudo apt-get install gsynaptics

3。修改xorg.conf(这是为了启用shm选项)
修改xorg.conf已经不被推荐了,但是我现用了这个方法,懒得去弄,反正已经好用了。另一个方法可以参考:
  1. gentoo文档(Synaptics Touchpad/Xorg 7.3)
  2. http://www.linuxquestions.org/questions/slackware-14/cant-access-shared-memory-area.-shmconfig-disabled-692073/
修改方法是:在xorg.conf里添加:
Section "InputDevice"
Identifier "Synaptics Touchpad"
Driver "synaptics"
Option "SendCoreEvents" "true"
Option "Device" "/dev/mouse2"
Option "Protocol" "auto-dev"
Option "HorizScrollDelta" "0"
# 添加下面一行,可以移动,触击无效
Option "MaxTapTime" "0"
Option "SHMConfig" "on"
EndSection
主要的就是红色的那句,就是启用了shm。要注意的还有设备要对,就是第一部找到的设备(绿字)。

2009年12月23日星期三

LANG,LC_ALL,local详解(转)

本文转自:http://www.linuxsir.org/bbs/thread312372.html
----------------------------------------------------------------------

什么是字符集?

字符集就是字符,尤其是非英语字符在系统内的编码方式,也就是通常所说的内码,所有的字符集都放在 /usr/share/i18n/charmaps,所有的字符集也都是用Unicode编号索引的。Unicode用统一的编号来索引目前已知的全部的符号。而字符集则是这些符号的编码方式,或者说是在网络传输,计算机内部通信的时候,对于不同字符的表达方式,Unicode是一个静态的概念,字符集是一个动态的概念,是每一个字符传递或传输的具体形式。就像 Unicode编号U59D0是代表姐姐的“姐”字,但是具体的这个字是用两个字节表示,三个字节,还是四个字节表示,是字符集的问题。例如:UTF-8 字符集就是目前流行的对字符的编码方式,UTF-8用一个字节表示常用的拉丁字母,用两个字节表示常用的符号,包括常用的中文字符,用三个表示不常用的字符,用四个字节表示其他的古灵精怪的字符。而GB2312字符集就是用两个字节表示所有的字符。需要提到一点的是Unicode除了用编号索引全部字符以外,本身是用四个字节存储全部字符,这一点在谈到挂载windows分区的时候是非常重要的一个概念。所以说你也可以把Unicode看作是一种字符集(我不知道它和UTF-32的关系,反正UTF-32就是用四个字节表示所有的字符的),但是这样表述符号是非常浪费资源的,因为在计算机世界绝大部分时候用到的是一个字节就可以搞定的 26个字母而已。所以才会有UTF-8,UTF-16等等,要不然大同世界多好,省了这许多麻烦。

zh_CN.GB2312到底是在说什么?
Locale 是软件在运行时的语言环境, 它包括语言(Language), 地域 (Territory) 和字符集(Codeset)。一个locale的书写格式为: 语言[_地域[.字符集]]. 所以说呢,locale总是和一定的字符集相联系的。下面举几个例子:

1、我说中文,身处中华人民共和国,使用国标2312字符集来表达字符。 zh_CN.GB2312=中文_中华人民共和国+国标2312字符集。
2、我说中文,身处中华人民共和国,使用国标18030字符集来表达字符。 zh_CN.GB18030=中文_中华人民共和国+国标18030字符集。
3、我说中文,身处中华人民共和国台湾省,使用国标Big5字符集来表达字符。 zh_TW.BIG5=中文_台湾.大五码字符集
4、我说英文,身处大不列颠,使用ISO-8859-1字符集来表达字符。 en_GB.ISO-8859-1=英文_大不列颠.ISO-8859-1字符集
5、我说德语,身处德国,使用UTF-8字符集,习惯了欧洲风格。 de_DE.UTF-8@euro=德语_德国.UTF-8字符集@按照欧洲习惯加以修正
注意不是de_DE@euro.UTF-8,所以完全的locale表达方式是 [语言[_地域][.字符集] [@修正值]


怎样设定locale呢?

设定locale就是设定12大类的locale分类属性,即 12个LC_*:
1、语言符号及其分类(LC_CTYPE)
2、数字(LC_NUMERIC)
3、比较和排序习惯(LC_COLLATE)
4、时间显示格式(LC_TIME)
5、货币单位(LC_MONETARY)
6、信息主要是提示信息,错误信息, 状态信息, 标题, 标签, 按钮和菜单等(LC_MESSAGES)
7、姓名书写方式(LC_NAME)
8、地址书写方式(LC_ADDRESS)
9、电话号码书写方式(LC_TELEPHONE)
10、度量衡表达方式(LC_MEASUREMENT)
11、默认纸张尺寸大小(LC_PAPER)
12、对locale自身包含信息的概述(LC_IDENTIFICATION)。
除了这12个变量可以设定以外,为了简便起见,还有两个变量: LC_ALL和LANG。它们之间有一个优先级的关系: LC_ALL>LC_*>LANG 可以这么说,LC_ALL是最上级设定或者强制设定,而LANG是默认设定值。
1、如果你设定了LC_ALL=zh_CN.UTF-8,那么不管LC_*和LANG设定成什么值,它们都会被强制服从 LC_ALL的设定,成为 zh_CN.UTF-8。
2、假如你设定了LANG=zh_CN.UTF-8,而其他的LC_*=en_US.UTF-8,并且没有设定LC_ALL的话,那么系统的locale 设定以LC_*=en_US.UTF-8。
3、假如你设定了LANG=zh_CN.UTF-8,而其他的LC_*,和LC_ALL均未设定的话,系统会将LC_*设定成默认值,也就是LANG的值 zh_CN.UTF-8 。
4、假如你设定了 LANG=zh_CN.UTF-8,而其他的LC_CTYPE=en_US.UTF-8,其他的LC_*,和LC_ALL均未设定的话,那么系统的 locale设定将是:LC_CTYPE=en_US.UTF-8,其余的 LC_COLLATE,LC_MESSAGES等等均会采用默认值,也就是 LANG的值,也就是LC_COLLATE=LC_MESSAGES=……= LC_PAPER=LANG=zh_CN.UTF-8。

所以,locale是这样设定的:
1、如果你需要一个纯中文的系统的话,设定LC_ALL= zh_CN.XXXX,或者LANG= zh_CN.XXXX都可以,当然你可以两个都设定,但正如上面所讲,LC_ALL的值将覆盖所有其他的locale设定,不要作无用功。
2、如果你只想要一个可以输入中文的环境,而保持菜单、标题,系统信息等等为英文界面,那么只需要设定 LC_CTYPE=zh_CN.XXXX,LANG= en_US.XXXX就可以了。这样LC_CTYPE=zh_CN.XXXX,而LC_COLLATE=LC_MESSAGES=……= LC_PAPER=LANG=en_US.XXXX。
3、假如你高兴的话,可以把12个LC_*一一设定成你需要的值,打造一个古灵精怪的系统: LC_CTYPE=zh_CN.GBK/GBK(使用中文编码内码GBK字符集); LC_NUMERIC=en_GB.ISO-8859-1(使用大不列颠的数字系统) LC_MEASUREMEN=de_DE@euro.ISO-8859-15(德国的度量衡使用ISO-8859-15字符集) 罗马的地址书写方式,美国的纸张设定……。估计没人这么干吧。
4、假如你什么也不做的话,也就是LC_ALL,LANG和LC_*均不指定特定值的话,系统将采用POSIX作为lcoale,也就是C locale。

2009年12月20日星期日

perror会修改errno吗?

程序如下:
-----------------------------------------
#include
int main(){
perror("first");
perror("next");
return 0;
}
-----------------------------------------
执行结果:
-----------------------------------------
first: Success
next: Illegal seek
-----------------------------------------
man手册页中的解释是:
-----------------------------------------
Note that errno is undefined after a successful library call: this call may well change this variable, even though it succeeds, for example because it internally used some other library function that failed. Thus, if a failing call is not immediately followed by a call to perror(), the value of errno should be saved.
-----------------------------------------
第一:在成功返回的前提下,errno是未定义的(因为两条源代码之间可能会好多其他的系统调用/库调用被执行)。
第二:如果在函数调用失败的时候,不立即调用perror()的话,则需要保存errno的值。

debian下的manpages

默认不会安装开发用的手册页,如:
-------------------------------------------
$ man errno
没有 errno 的手册页条目
-------------------------------------------
需要手动安装:
-------------------------------------------
$ sudo apt-get install manpages
$ sudo apt-get install manpages-posix
$ sudo apt-get install manpages-posix-dev
-------------------------------------------
其中:
* manpages 包含 GNU/Linux 的基本操作。
* manpages-posix 包含 POSIX 所定义公用程序的方法。
* manpages-posix-dev 包含 POSIX 的 header files 和 library calls 的用法。如果你是开发者,要查API,就需要这个。

2009年12月18日星期五

cat引起的一个奇怪的问题,bug?

今天,在gnome里面cat /var/run/utmp
就因为这个,gnome崩溃了,现象如下:
登录gnome的时候,只有桌面,没有任何菜单,和图标之类的东西,同时在主目录下面生成了一个文件:[.xsession-errors]内容如下:
/etc/gdm/Xsession: Beginning session setup...
Setting IM through im-switch for locale=zh_CN.
Start IM through /etc/X11/xinit/xinput.d/zh_CN linked to /etc/X11/xinit/xinput.d/scim.
Smart Common Input Method 1.4.7

Launching a SCIM process with x11...
Loading simple Config module ...
Creating backend ...
Loading x11 FrontEnd module ...
GTK Panel of SCIM 1.4.7

Starting SCIM as daemon ...
SCIM has been successfully launched.

** (seahorse-agent:8599): WARNING **: Wrong permissions for /tmp/orbit-bjn


** (gconf-sanity-check-2:8685): WARNING **: Wrong permissions for /tmp/orbit-bjn


** (x-session-manager:8599): WARNING **: Wrong permissions for /tmp/orbit-bjn

SESSION_MANAGER=local/ggjd:/tmp/.ICE-unix/8599

** (gnome-settings-daemon:8687): WARNING **: Wrong permissions for /tmp/orbit-bjn

Warning: Key not found in xfree86(jp106)+aliases(qwerty) keycodes
Symbols ignored
Warning: Key not found in xfree86(jp106)+aliases(qwerty) keycodes
Symbols ignored
Warning: No symbols defined for (keycode 92)
Warning: No symbols defined for (keycode 101)
Warning: No symbols defined for (keycode 114)
Warning: No symbols defined for (keycode 118)
Warning: No symbols defined for (keycode 119)
Warning: No symbols defined for (keycode 120)
Warning: No symbols defined for (keycode 121)
Warning: No symbols defined for (keycode 122)
Warning: No symbols defined for (keycode 123)
Warning: No symbols defined for (keycode 130)
Warning: No symbols defined for (keycode 132)
Warning: No symbols defined for (keycode 134)
Warning: No symbols defined for (keycode 135)
Warning: No symbols defined for (keycode 136)
Warning: No symbols defined for (keycode 137)
Warning: No symbols defined for (keycode 138)
Warning: No symbols defined for (keycode 139)
Warning: No symbols defined for (keycode 140)
Warning: No symbols defined for (keycode 141)
Warning: No symbols defined for (keycode 142)
Warning: No symbols defined for (keycode 143)
Warning: No symbols defined for (keycode 144)
Warning: No symbols defined for (keycode 145)
Warning: No symbols defined for (keycode 146)
Warning: No symbols defined for (keycode 147)
Warning: No symbols defined for (keycode 148)
Warning: No symbols defined for (keycode 149)
Warning: No symbols defined for (keycode 150)
Warning: No symbols defined for (keycode 151)
Warning: No symbols defined for (keycode 152)
Warning: No symbols defined for (keycode 153)
Warning: No symbols defined for (keycode 154)
Warning: No symbols defined for (keycode 155)
Warning: No symbols defined for (keycode 157)
Warning: No symbols defined for (keycode 158)
Warning: No symbols defined for (keycode 159)
Warning: No symbols defined for (keycode 160)
Warning: No symbols defined for (keycode 161)
Warning: No symbols defined for (keycode 162)
Warning: No symbols defined for (keycode 163)
Warning: No symbols defined for (keycode 164)
Warning: No symbols defined for (keycode 165)
Warning: No symbols defined for (keycode 166)
Warning: No symbols defined for (keycode 167)
Warning: No symbols defined for (keycode 168)
Warning: No symbols defined for (keycode 169)
Warning: No symbols defined for (keycode 170)
Warning: No symbols defined for (keycode 171)
Warning: No symbols defined for (keycode 172)
Warning: No symbols defined for (keycode 173)
Warning: No symbols defined for (keycode 174)
Warning: No symbols defined for (keycode 175)
Warning: No symbols defined for (keycode 176)
Warning: No symbols defined for (keycode 177)
Warning: No symbols defined for (keycode 178)
Warning: No symbols defined for (keycode 179)
Warning: No symbols defined for (keycode 180)
Warning: No symbols defined for (keycode 181)
Warning: No symbols defined for (keycode 182)
Warning: No symbols defined for (keycode 183)
Warning: No symbols defined for (keycode 184)
Warning: No symbols defined for (keycode 185)
Warning: No symbols defined for (keycode 186)
Warning: No symbols defined for (keycode 187)
Warning: No symbols defined for (keycode 188)
Warning: No symbols defined for (keycode 189)
Warning: No symbols defined for (keycode 190)
Warning: No symbols defined for (keycode 191)
Warning: No symbols defined for (keycode 192)
Warning: No symbols defined for (keycode 193)
Warning: No symbols defined for (keycode 194)
Warning: No symbols defined for (keycode 195)
Warning: No symbols defined for (keycode 196)
Warning: No symbols defined for (keycode 197)
Warning: No symbols defined for (keycode 198)
Warning: No symbols defined for (keycode 199)
Warning: No symbols defined for (keycode 200)
Warning: No symbols defined for (keycode 201)
Warning: No symbols defined for (keycode 202)
Warning: No symbols defined for (keycode 203)
Warning: No symbols defined for (keycode 204)
Warning: No symbols defined for (keycode 205)
Warning: No symbols defined for (keycode 206)
Warning: No symbols defined for (keycode 207)
Warning: No symbols defined for (keycode 212)
Warning: No symbols defined for (keycode 213)
Warning: No symbols defined for (keycode 218)
Warning: No symbols defined for (keycode 219)
Warning: No symbols defined for (keycode 220)
Warning: No symbols defined for (keycode 221)
Warning: No symbols defined for (keycode 222)
Warning: No symbols defined for (keycode 223)
Warning: No symbols defined for (keycode 224)
Warning: No symbols defined for (keycode 225)
Warning: No symbols defined for (keycode 226)
Warning: No symbols defined for (keycode 227)
Warning: No symbols defined for (keycode 228)
Warning: No symbols defined for (keycode 229)
Warning: No symbols defined for (keycode 230)
Warning: No symbols defined for (keycode 231)
Warning: No symbols defined for (keycode 232)
Warning: No symbols defined for (keycode 233)
Warning: No symbols defined for (keycode 234)
Warning: No symbols defined for (keycode 235)
Warning: No symbols defined for (keycode 236)
Warning: No symbols defined for (keycode 237)
Warning: No symbols defined for (keycode 238)
Warning: No symbols defined for (keycode 239)
Warning: No symbols defined for (keycode 240)
Warning: No symbols defined for (keycode 241)
Warning: No symbols defined for (keycode 242)
Warning: No symbols defined for (keycode 243)
Warning: No symbols defined for (keycode 244)
Warning: No symbols defined for (keycode 245)
Warning: No symbols defined for (keycode 246)
Warning: No symbols defined for (keycode 247)
Warning: No symbols defined for (keycode 248)
Warning: No symbols defined for (keycode 249)
Warning: No symbols defined for (keycode 250)
Warning: No symbols defined for (keycode 251)
Warning: No symbols defined for (keycode 252)
Warning: No symbols defined for (keycode 253)
Warning: No symbols defined for (keycode 254)
Warning: No symbols defined for (keycode 255)

** (gnome-screensaver:8707): WARNING **: Wrong permissions for /tmp/orbit-bjn


** (gconftool-2:8716): WARNING **: Wrong permissions for /tmp/orbit-bjn


** (gnome-settings-daemon:8687): WARNING **: Failed to open file '/etc/gnome/config/General.ad': 没有那个文件或目录

** (gnome-panel:8709): WARNING **: Wrong permissions for /tmp/orbit-bjn


** (nautilus:8712): WARNING **: Wrong permissions for /tmp/orbit-bjn


** (x-session-manager:8599): WARNING **: Host name lookup failure on localhost.

** (metacity:8708): WARNING **: Wrong permissions for /tmp/orbit-bjn

窗口管理器警告:无法读取保存的会话文件 /home/bjn/.metacity/sessions/default0.ms:Failed to open file '/home/bjn/.metacity/sessions/default0.ms': 没有那个文件或目录

** (bluetooth-applet:8726): WARNING **: Wrong permissions for /tmp/orbit-bjn


** (gconftool-2:8729): WARNING **: Wrong permissions for /tmp/orbit-bjn


** (update-notifier:8732): WARNING **: Wrong permissions for /tmp/orbit-bjn

Initializing gnome-mount extension
seahorse nautilus module initialized

** (gconftool-2:8733): WARNING **: Wrong permissions for /tmp/orbit-bjn


** (gnome-power-manager:8734): WARNING **: Wrong permissions for /tmp/orbit-bjn


** (gconftool-2:8738): WARNING **: Wrong permissions for /tmp/orbit-bjn


** (gconftool-2:8740): WARNING **: Wrong permissions for /tmp/orbit-bjn


** (gnome-volume-manager:8739): WARNING **: Wrong permissions for /tmp/orbit-bjn


** (nm-applet:8746): WARNING **: Wrong permissions for /tmp/orbit-bjn


(gnome-panel:8709): Gtk-WARNING **: gtk_widget_size_allocate(): attempt to allocate widget with width -13 and height 24

(qq:8786): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: 错误 ELF 类: ELFCLASS64

(qq:8786): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: 错误 ELF 类: ELFCLASS64

(qq:8786): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: 错误 ELF 类: ELFCLASS64

(qq:8786): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: 错误 ELF 类: ELFCLASS64

(qq:8786): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: 错误 ELF 类: ELFCLASS64

(qq:8786): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: 错误 ELF 类: ELFCLASS64

(qq:8786): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: 错误 ELF 类: ELFCLASS64

(qq:8786): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: 错误 ELF 类: ELFCLASS64

(qq:8786): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: 错误 ELF 类: ELFCLASS64

(qq:8786): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: 错误 ELF 类: ELFCLASS64

(qq:8786): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: 错误 ELF 类: ELFCLASS64

(qq:8786): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: 错误 ELF 类: ELFCLASS64

(qq:8786): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: 错误 ELF 类: ELFCLASS64

(qq:8786): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: 错误 ELF 类: ELFCLASS64

(qq:8786): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: 错误 ELF 类: ELFCLASS64

(qq:8786): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: 错误 ELF 类: ELFCLASS64

** (firefox-bin:8793): WARNING **: Wrong permissions for /tmp/orbit-bjn


** (firefox-bin:8793): WARNING **: Wrong permissions for /tmp/orbit-bjn

窗口管理器警告:Buggy client sent a _NET_ACTIVE_WINDOW message with a timestamp of 0 for 0x2e000cb (Iceweasel)
窗口管理器警告:meta_window_activate called by a pager with a 0 timestamp; the pager needs to be fixed.
LoadPlugin: failed to initialize shared library /usr/lib/iceweasel/plugins/nppdf.so [/usr/lib/iceweasel/plugins/nppdf.so: 错误 ELF 类: ELFCLASS32]
LoadPlugin: failed to initialize shared library /usr/lib/mozilla/plugins/nppdf.so [/usr/lib/mozilla/plugins/nppdf.so: 错误 ELF 类: ELFCLASS32]
LoadPlugin: failed to initialize shared library /opt/real/RealPlayer/mozilla/nphelix.so [/opt/real/RealPlayer/mozilla/nphelix.so: 错误 ELF 类: ELFCLASS32]
** Message: GetValue variable 1 (1)
** Message: GetValue variable 2 (2)
** Message: GetValue variable 1 (1)
** Message: GetValue variable 2 (2)
** Message: GetValue variable 1 (1)
** Message: GetValue variable 2 (2)
** Message: GetValue variable 1 (1)
** Message: GetValue variable 2 (2)
** Message: GetValue variable 1 (1)
** Message: GetValue variable 2 (2)

** (gnome-terminal:8856): WARNING **: Wrong permissions for /tmp/orbit-bjn

窗口管理器警告:last_user_time (27537568) is greater than comparison timestamp (1554746). This most likely represents a buggy client sending inaccurate timestamps in messages such as _NET_ACTIVE_WINDOW. Trying to work around...
窗口管理器警告:0x2e000cb (Blogger: J) appears to be one of the offending windows with a timestamp of 27537568. Working around...


------------------------------------------------------------------
上面最关键的内容是最面:
** (gnome-terminal:8856): WARNING **: Wrong permissions for /tmp/orbit-bjn
就是/tmp的权限问题,解决办法:
chmod 1777 -R /tmp
rm /tmp/.X0-lock

2009年12月14日星期一

convert bin,cue to iso

# Install
sudo apt-get install ccd2iso

# convert the bin file to iso
ccd2iso file.bin file.iso

# mount the iso image generated from conversion
sudo mkdir -p /mnd/disk
sudo mount -o loop file.iso /mnt/file

另一个方法没试过:bchunk

2009年12月13日星期日

ext4文件系统的挂载

# tune2fs -E test_fs /dev/sda6
tune2fs 1.41.3 (12-Oct-2008)
Setting test filesystem flag
# mount -t ext4dev /dev/sda6 /mnt/sda6
# ls /mnt/sda6
lost+found

md5sum

用md5sum可以生成一个校验和文件,命令如下:
md5sum aaa.iso > aaa.sum
如果想比较两个文件是否一样可以生成两个文件的校验和,然后比较两个校验和文件。
应为校验和文件中保存有文件的名字和校验和,所以也可以把想要比较的文件明改成和校验和文件中一样,然后用下面的命令校验:
md5sum -c aaa.sum

2009年12月4日星期五

debian 字体

windows被格式化了。就装了一个windowsxp,vista没有装上,在xp下到网上下了一个字体安上。(exe文件)然后把文件拷贝到linux(用vituralbox的共享数据空间)。
然后做以下步骤:
sudo mkdir /usr/share/fonts/truetype/yahei # 当然你也可以直接在/usr/share/fonts下建立
sudo cp *.ttf /usr/share/fonts/truetype/yahei #*.ttf为你想安装的任意字体


# 刷新缓存
sudo chmod 644 /usr/share/fonts/truetype/yahei/*
cd /usr/share/fonts/truetype/yahei
sudo mkfontscale && sudo mkfontdir && sudo fc-cache -fv

经过以上几步就可以在你的任一应用程序字体选项里找到该字体了 .

Debian ATI HD4570显卡驱动

直接到amd网站上下载,然后执行 :
sh [驱动名字]