Archive for 2008 年 5 月 13 日
Linux Shell下的后台运行及其前台的转换
0当用bash启动一个程序,你可以用在程序后加&,实现程序在后台运行;
例如: emacs &
但如果你忘了输入&;但你又不想把程序停止后重新启动;
你可以这么做:
按Ctrl + Z暂停前台工作,比如前面提到的Emacs;
然后用jobs命令查看当前bash一共启动了多少程序,你可以看到你的emacs在其中,它的状态是Stoped的; 并且它的jobID也可以看,比如是2
然后用命令bg 2
这样你就可以达到和emacs &一样的效果了。
当你有些工作比如updatedb, find等需要一定时间,这些工作可以考虑让它在后台运行,而你可以用bash做其它工作。
如果需要把任务回到前台,只需要fg 2。
Shell运算,计算值保留两位小数
0SHELL下是没有小数处理的,能进行运算的只能是-2^30到2^30-1范围的整数,否则溢出。
具体可以用的运算方式有:
[root@root ~]$ i=$[9 / 2]; echo i=$i;
i=4
[root@root ~]$ i=$((9 / 2)); echo i=$i;
i=4
[root@root ~]$ i=`expr 9 / 2` ; echo i=$i;
i=4
很多最小安装的系统不会有expr,可以使用内置命令:
[root@root ~]$ i=let i=9/2 ; echo i=$i;
i=4
如果需要保留小数,比如两位小数,可以使用awk实现,awk真是强大:
[root@root ~]$ i=`awk BEGIN'{printf "%.2fn", 9/2 }'` ; echo i=$i;
i=4.50
[root@root ~]$ i=`awk BEGIN'{ x=9 ; y=4 ; printf "%.2fn", x/y }'` ; echo i=$i;
i=4.50
运算符类型
按位运算符
~, < <, >>, &, |, ^
$[]表示形式告诉 shell 对方括号中的表达式求值

表达式替换
$[ ] 和 $(())
两种格式功能一样,所有的 shell 的求值都是用整数完成
$[ ] 可以接受不同基数的数字
赋值运算符
=、+=、-=、*=、/=、%=、&=、^=、|=、< <=、>>=
geomview~编译错误及~NVIDIA~驱动~bug!
0昨晚看~MAXIMA,提到了画二维图最好用~GnuPlot,而画三维图的时候最好用~Geomview,于是下载其源码,接着编译安装,但在~make~的时候出现下面的错误:
/usr/X11R6/include/GL/glext.h:6952: error: redefinition of typedef 'PFNGLGETUNIFORMUIVEXTPROC' /usr/X11R6/include/GL/glext.h:6941: error: previous declaration of 'PFNGLGETUNIFORMUIVEXTPROC' was here
到网上搜了下,是~NVIDIA~显卡驱动的一个~bug,于是想下载最新版本,到~NVIDIA~网站下载了最新的~1.0-9755~版本,直接运行~.run~文件,先是提示我的显卡跟这个驱动不匹配,不过是个警告,没太注意,继续,接着后来提示:
ERROR: Unable to load the kernel module 'nvidia.ko'. This is most likely because the kernel module was built using the wrong kernel source files. Please make sure you have installed the kernel source files for your kernel; on Red Hat Linux systems, for example, be sure you have the 'kernel-source' rpm installed. If you know the correct kernel source files are installed, you may specify the kernel source path with the< br /> '--kernel-source-path' commandline option.
搜索了一下,用下面的命令就好了:
#./NVIDIA-xxx.run -k $(uname -r)
安装后,重启~X,但找不到设备,查看~/var/log/Xorg.0.log,原来的确是开始的警告,这个驱动根本与我的显卡不匹配,我的显卡是:
nVidia Corporation NV11 [GeForce2 MX/MX 400]
提示说只能用~96xx,系列的驱动,然后找个系列的驱动安装,一切顺利!然而再重新编译~Geomview~的时候仍然是那个错误,最后只好手动的修改了那个文件~/usr/X11R6/include/GL/glext.h,把里面的~6941~和~6952~两行注释掉了,然后再编译安装,一切顺利。
据说~NVIDIA~的这个~bug~在最新的~97xx~系列中已经修正,可是我的显卡却只能用~96xx~系列的,可能我的显卡太老了吧
。
Ubuntu 8.04 下编译安装 Nvidia 169.07 驱动
0编译安装驱动的好处是可以用到最新的驱动。可惜网上教程无数,没有一个能简洁的介 绍如何编译安装Nvidia显卡驱动的。即便有一些教程能指导你如何安装,重启后又立刻出现问题,这时候该怎么办?以下是我研究总结的精华方法,嘿嘿 ^_^。注意:理论上本文适用于任何版本的Ubuntu和Nvidia驱动,不过未经严格测试,希望小白鼠们能够发扬雷锋精神,勇敢测试,在本文之后回复 测试结果!
0 要先装好编译必备的软件,配制好源之后在终端输入:
sudo apt-get install build-essential
1 根据硬件软件平台在这里下载相应驱动,这里Rainking下载的是最新的NVIDIA-Linux-x86-169.07-pkg1.run,Rainking将此文件保存在了主目录下
2 按下ctrl+alt+F1,在文本状态下重新登陆
3 关闭x,在终端输入:
sudo /etc/init.d/gdm stop
4 在终端输入:
sudo sh ./NVIDIA-Linux-x86-169.07-pkg1.run (文件名和路径可能会不同)
5 进入安装向导以后选项分别是:选择Accept,选择No,选择OK,选择Yes,选择OK,选择OK,选择OK
6 在终端输入:
sudo /etc/init.d/gdm start
重新开启x,你会发现显卡驱动已经安装成功了,一般情况下不需要再调分辨率和再配置x server,因为Nvidia已经自动配置好了。
7 在终端输入:
sudo gedit /etc/default/linux-restricted-modules-common
将其中的DISABLED_MODULES=”"改为DISABLED_MODULES=”nv nvidia_new”。如果不这么修改,重新启动以后,驱动就会失败。
如果没有配置好,或者显卡驱动安装以后出了问题,还可以通过以下方法解决。
修改分辨率:
sudo gedit /etc/X11/xorg.conf
去掉logo(最新版本的驱动没有logo)
在Driver “nvidia” 后面加上 Option “NoLogo”
重新配置x server:
sudo apt-get install pkg-config xserver-xorg-dev3
sudo dpkg-reconfigure xserver-xorg