[Linux群常见问题整理]坚持整理到了第三期,是个不错的开头。自我鼓励下,希望以后能一直坚持下去。哈哈!这次整理的一些小技巧都还是挺实用的。在发布到这里的同时,打算以后在CU上也发一份,把一些有用的知识点分享给更多学习Linux的朋友们。
Q:Linux终端下同时输入ctrl+v,ctrl+n回车后产生乱码?(提供人:Neil)
A:如果终端显示16进制字符E就会出现乱码,只要输入16进制F就能恢复。
1 | echo -e '\xf' |
Q:bash中如何取得当前进程的pid(提供人:galf)
A:用$$来取。
1 | echo $$ |
Q:内核升级后重启内核失败的panic kill的问题(提供人:土猪一号)
重启内核失败的现象如下
1 | mount: could not find filesystem '/dev/root' |
A:产生问题的主要原因:是由于无法加载磁盘硬件的模块驱动。解决方式主要是通过make menuconfig中加载sata sici的devices设备模块驱动。常用的驱动模块如下:
1 | insmod /lib/uhci-hcd.ko |
如果你initrd中已包含了相应的SATA驱动,出现这种现象的原因就可能是因为initrd是旧版本mkinitrd生成的。
解决方法就是加入对旧版sysfs路径的支持,方法如下:
a)、通过make menuconfig选中以下对应的选项
1 | General setup--> [*] enable deprecated sysfs features to support old userspace tools |
b)、修改.config文件
修改.config文件中CONFIG_SYSFS_DEPRECATED_V2
1 | CONFIG_SYSFS_DEPRECATED_V2=y #默认该选项为not set,被注释掉的。 |
注:修改这项是因为旧版的mkinitrd及其nash在内核没有CONFIG_SYSFS_DEPRECATED_V2参数时默认使用旧版sysfs路径格式,从而在新内核下无法正确访问/sys内的硬盘信息节点。
Q:如何快速编译内核模块(提供人:枪炮)
A:常用的方法有以下两种:
方法一:
格式:
1 | make -C $KDIR M=$PWD modules |
例子:
如在内核源码树内
1 | make CONFIG_REISER4_FS=m M=fs/reiser4 modules |
如在内核源码树外
1 | make CONFIG_FUSE_FS=m -C /home/blue/linux/linux-2.6.24.3 M=/home/blue/linux/linux-2.6.24.3/drivers/char/mydriver/ modules |
方法二
格式:
1 | make -C $KDIR SUBDIRS=$PWD modules |
例子:
如在内核源码树外
1 | # cd /home/usb/usb-2.6.21.5/ |
如在内核源码树内
1 | make CONFIG_REISER4_FS=m SUBDIRS=fs/reiser4 modules |
注:make -C $KDIR用来指定内核源代码的路径。’$KDIR’描述内核源代码的目录。Make会进入实际指定的目录执行,但是完成执行时会返回当前的目录。M=用来告诉kbuild正在构建一个外部模块,M=是外部模块(kbuild文件)所在的目录。和M=选项一样,SUBDIRS=的效果一样,是旧的语法。保证向后兼容的。
Q:kill指令的一些小技巧(提供人:土猪一号,Mike)
A:关闭当前shell下产生的所有进程
1 | kill -9 0 |
注:PID 0表同一进程组的进程
关闭大于1所有进程
1 | kill -9 -1 |
注:man中的解释
-1 All processes with pid larger than 1 will be signaled。
Kill all processes you can kill。
检查PID是否存在
1 | kill -0 pid |
注:对于信号“0”MAN中的解释:exit code indicates if a signal may be sent
Q:用phpize编译动态扩展模块?
A:phpize命令是用来准备PHP扩展模块的编译环境,通过phpize可以建立php的扩展模块。phpize是属于php-devel包中(档案预设存放于/usr/bin/phpize)。
整个过程和动态编译apache的模块非常相似,类似于apache的apxs
下面是一个例子,扩展模組的源程序位于extname目录中:
1 | $ cd extname |
注意:如在执行./configure时出现"configure: error: Cannot find php-config. Please use --with-php-config=PATH"时,说明你的配置文件位置可能不在缺省目录(–with-php-config预设在/usr/bin/php-config)。可重下类似以下指令调整:
1 | ./configure --with-php-config=/usr/local/php/bin/php-config |
这个文件通常是在php安装目录的bin目录下的一个文件名叫做php-config或者php-config5的文件。
然后把该目录下的extname.so复制到你php.ini中的extension_dir指向的目录中,最后需要调整php.ini文件,加入extension=extname.so这一行之后才能使用此扩展库。
重启web服务器,使你的php配置更新。用phpinfo()检查新模块是否生效。
任意建一个PHP页面,加入以下代码:
1 | <?php phpinfo(); ?> |
访问这个页面,如果增加了你刚刚添加的模块,基本上就证明OK了。
Q:一个不会kill shell自身的指令(提供人:竹)
A:killall5是SystemV中的一个killall(杀死所有进程)命令.它会向所有进程发送一个信号,但调用killall5命令的shell自身不会被kill(杀掉)。
命令格式
1 | killall5 -signalnumber |
Q:什么是dmraid?(提供人:金雕,Mike)
dmraid 全名为设备对应器磁盘阵列(Device Mapper RAID),利用Linux内核提供的设备对应器(Device Mapper)机制,为多种磁盘阵列设备提供磁盘阵列的设备文件,让用户可以在Red Hat Enterprise Linux系统中使用硬件磁盘阵列设备。
dmraid主要针对BIOS RAID(Fake RAID)。
更详细的资料可见:dmraid介绍Linux上应用ATA/SATA RAID技术(原文)#需翻墙
dmraid介绍Linux上应用ATA/SATA RAID技术(转载)#墙内可访问