Linux中目录的x权限

直接放结论:

x权限对于目录来说是非常重要的,当用户对某个目录没有x权限时,则不管用户对该目录下的子目录拥有什么样的权限,都将无法对子目录进行任何操作。

举例:

通常/root缺省是没有x权限的,因此mysql导出文件(SELECT … INTO OUTFILE)到/root下的任何目录都会提示无法写入,不论这个目录的owner是谁,也不论这个目录是否777权限:

ERROR 1 (HY000) at line 1: Can't create/write to file '/root/my/out.csv' (Errcode: 13)

而/home缺省是有x权限的,因此在这个目录下mysql用户的文件夹,是可以用于mysql导出到文件的。

linux-directory-x

Shell脚本编程中的若干注意事项

几个特殊变量

变量 含义
$$ Shell本身的PID(ProcessID)
$! Shell最后运行的后台Process的PID
$? 最后运行的命令的结束代码(返回值)
$- 使用Set命令设定的Flag一览
$* 所有参数列表。如”$*”用「”」括起来的情况、以”$1 $2 … $n”的形式输出所有参数。
$@ 所有参数列表。如”$@”用「”」括起来的情况、以”$1″ “$2” … “$n” 的形式输出所有参数。
$# 添加到Shell的参数个数
$0 Shell本身的文件名
$1~$n 添加到Shell的各参数值。$1是第1参数、$2是第2参数…。如果大于等于10序号要用花括号包起来,例如${10}

test命令

test命令用于检查文件类型和表达式(check file types and compare values),返回的结果放在“$?”里,结果为0表示true,结果不为0表示false。例如:

$ test "a" = "b"
$ echo $?
1

test命令可以用“[]”简写(注意[]里面要带有空格,否则提示command not found),后面加上&&符号则表示当表达式成立时执行后续操作。例如:

$ [ "a" = "a" ] && echo yes
yes

类似的,后面加上“||”则表示当表达式不成立时执行后续操作。

-z参数用来判断字符串是否为空,例如:

$ [ -z "" ] && echo yes
yes

还有一些类似的其他表达式参数,以及与文件相关的参数,可以man test查看。

参考链接:

 

在Debian里不重启切换两块声卡

在电磁干扰严重的狭小空间里,笔记本的内置声卡表现一般比较差,至少我的n600c底噪就很明显。要获得更好的效果或者需要数字输出时只能借助外置声卡了,包括pcmcia接口和usb接口两种,前者如创新的Audigy2 ZS Notebook,当然很贵了;后者如我的玲珑II,性价比还不错。

在Linux里不像Windows那样可以简单的在控制面板里选择使用哪个声卡作为首选设备,经过一段时间的研究,我找到一个还可以接受的办法,至少不需要重启系统。首先 将以下的文本保存为/etc/modutils/sound_cards,然后sudo update-modules,这个命令会处理/etc/modutils里的所有文件,合成/etc/modules.conf文件。

alias snd-card-0 snd-maestro
alias snd-card-1 snd-usb-audio
options snd-maestro index=0
options snd-usb-audio index=1
options snd-usb-audio enable="1"

要切换到usb声卡时:

sudo /etc/init.d/alsa force-unload
sudo modprobe snd-usb-audio

类似的,要切换到内置声卡(使用maestro3芯片)时:

/etc/init.d/alsa force-unload
modprobe snd-maestro3

注意force-unload的时候会先自动杀掉所有使用声卡的进程,如firefox、音量控制和bmp等等,如果没有这样的进程在运行,可以直接unload,或者rmmod snd-maestro3这样卸载模块。

另外一种方法是在应用程序里切换,例如bmp,在“首选项->插件->输出”里把输出插件选为ALSA,然后在ALSA的配置里选择希望使用的音频设备和混音设备即可。其他应用程序类似,其实如果只关心某个应用程序,这样更省事。

最后,Gentoo用户请参考这个Tip,感谢acura提供。

Windows分区转换为Debian分区

我的机器上是Debian和win2000双系统,今天把原来window的e盘转换成linux的分区了(因为PQMagic划分空间有一定的危险性),相当于给linux增加了10G容量,这下宽裕多了。

我是把/home放在了新分区上,因为用户要下载一些比较大的文件都放在这里面,方法如下:

1、在windows里把e盘上有用的东西移到其它盘上

2、重新启动进入Debian的recovery mode,即single模式

3、#mv /home /home2

4、#mkdir /home

5、#mkfs.ext3 /dev/hda6

6、#mount /dev/hda6 /home

7、#cp -ar /home2/* /home

最后再重启即可。

Debian里编译内核

以2.6.8版本为例:

1、Debian.org上关于编译内核的说明;另一篇看起来不错的文章:Creating custom kernels with Debian’s kernel-package system

2、下载内核源代码apt-get install kernel-source-2.6.8,在/usr/src下得到kernel-source-2.6.8.tar.bz2文件,用tar xfj命令展开;

3、下载需要的patch,比如休眠功能的patch是kernel-patch-suspend2,注意目前在experimental里才有,所以要在/etc/apt/sources.list里加上必要的源;

4、执行以下操作,如果当前语言是中文,执行前最好zhcon进入中文环境:

#cd /usr/src/kernel-source-2.6.8
#cp /boot/config* .
#make-kpkg clean
#make-kpkg --append_to_version -2 --added_patches suspend2 --config menuconfig
#make-kpkg --append_to_version -2 --initrd kernel_image
#cd ..
#dpkg -i kernel-image-2.6.8-2.i386.deb

注意在menuconfig的时候先载入原来的配置文件,即上面第二行复制过来的/usr/source/config-xxx文件,然后在这个配置上进行修改;另外,我如果不加–initrd参数,则新内核无法启动。

5、重启电脑用新内核启动。

Update(2005/12/23)

不加–initrd参数可以启动了,关键是在menuconfig的时候要把ext2,ext3等文件类型加入内核,同时要把对ide设备的支持直接加入内核,我以前只注意了前者。

Debian安装配置常用软件

1、安装j2sdk,下载j2sdk-1_4_2_09-linux-i586-rpm.bin文件,chmod 755 j2sdk-1_4_2_09-linux-i586-rpm.bin,运行后得到.rpm文件,用alien转换为.deb包,然后dpkg -i  xxx.deb即可,安装后的文件在/usr/java目录;

Update: 在debian里用上面rpm包安装jdk有问题,一些jar文件没有被展开,所以下载非rpm的那个包比较好,chmod +x后解压到想要的目录即可。在~/bash_profile里设置JAVA_HOME和PATH=$PATH:$JAVA_HOME/bin, gnome的shell要在菜单里设置为登录shell。

2、安装eclipse,下载后直接tar zxvf即可,然后在桌面建立一个快捷方式,vm参数指向刚才安装的jdk下的bin/java;特别要注意一个问题,在windows下开发的插件项目 拿到linux下,META-INF目录和里面的MANIFEST.MF是小写的,这样会造成编译时出现很多错误,所以一定要保证它们是全部小写的。

图1 运行在Linux下的Tree

3、字体和美化问题真是有够麻烦。字体的美化(毕竟眼睛健康很重要),暂时使用这个方案,比较省事吧;解决xmms乱码问题,最简单的方法,卸掉xmms装beep-media-player。

4、设置gnome里的环境变量,//todo,修改.bash_profile后在gnome里竟然不起作用,但在console里就有用;

5、查看deb包安装后的位置,dpkg -L xxx;

6、屏幕截图用printscreen即可,可以截全屏或一个窗口区域;或者scrot -d 5延迟5秒截图,适合截菜单界面,因为gnome里打开菜单后热键会失效;

7、安装gnome主题(gnome-looks.org),要在~/.themes和~/.icons下分别放不同的主题文件;模拟mac的 start bar要装gdesklets,我感觉不太实用;安装gdm主题,运行gdmsetup;安装xmms主题,似乎要重启gnome才可生效;

8、gnome下的音量控制用gnome-media;gnome下的apt用gnome-apt(alpha版,小心使用);安装deborphan可以找到不被任何包使用的库,然后apt-get remove之就可以节省出一些空间;

9、其他很多软件,推荐:Windows软件的Liunx版本替换表,俄国人写的;

10、解压缩.tar.gz文件的方法:tar zxvf a.tar.gz;解压缩.tar.bz2文件:tar xfj a.tar.bz2;

11、关于网卡的配置:apt-get install etherconf,然后dpkg-reconfigure etherconf;如果无线网络需要密码,iwconfig eth1 key xxxxxx就可以了 ,或者在/etc/network/interfaces里加上wireless_key xxxxxx的配置;要改为自动获得ip时,执行dhclient eth1;

12、从www.rssowl.org下载rssowl阅读blog,但我发现rssowl在linux下内置的浏览器有些问题,很多格式丢失了,看起来会比较费力;

13、要在linux里远程桌面到windows xp系统,apt-get install grdesktop;

14、在gaim里用代理服务器上msn,直接在首选项里设置http代理会提示“访问被禁止:代理服务器禁止端口1863流过”,应该在msn帐号里选择使用http方式,并设置代理服务器;

15、安装mysql很简单,直接apt-get install mysql-server-4.1就可以了,使用上比windows的gui方式稍微麻烦些,见这篇文章;另外,从windows版本的mysql里直接拷出来的库不能拿来用,因为表名和字段名在linux里区分大小写。

16、安装teTex:在sources.list里添加ustc的源deb http://debian.ustc.edu.cn/debian-uo/ sid marillat rareware misc ustc,然后apt-get install tetex-bin tetex-base tetex-extra cjk-latex dvipdfmx dvipdfm-cjk ttf-arphic* tfm-arphic*

为了能使用中文,在这个网站下载gbkfonts工具,静态的那个即可。用下面的命令配置一下:

mkdir ~/texmf
cd ~/texmf
gbkfonts /usr/share/fonts/zh/simsun.ttf song 
gbkfonts /usr/share/fonts/zh/simkai.ttf kai
mv cid-x.map dvipdfm/config/
mkdir dvips/config
mv cjk.map dvips/config/

cp /usr/share/texmf-tetex/dvips/config/config.ps dvips/config/
echo "p +cjk.map" >> dvips/config/config.ps
mv pdftex.cfg pdftex/config/
mktexlsr

配置中文的部分来自这个网页,修改了一些地方。在.tex文件里像下面这样写就可以显示中文了

\documentclass{article}
\usepackage{CJK}
\begin{document}
\begin{CJK}{GBK}{song}
这是 latex
\end{CJK}
\end{document}

17、apt安装samba,然后修改/etc/samba/smb.conf,把 security = user前的分号去掉; touch /etc/samba/smbpassword 生成smbpassword文件,再smbpassword -a username添加一个user。显示中文,在smb.conf里边的[global] 栏目下添加一行:client code page 936(用windows访问正常,但用palm上的wifile访问时文件名的中文部分都是空白)

Debian安装备忘

对linux的兴趣时断时续,以前用的都是redhat,这次换用Debian吧,希望能坚持一直用下去,直到完全替代windows。这是安装Debian的过程,遇到的问题和解决方法,备忘。

1、用分区工具如PQMagic划出一块空闲分区,我给的大小是4G;

2、下载debian当前版本的第一张光盘映像,刻成光盘;

3、用这张光盘启动,在boot时输入linux26用2.6内核启动,选择语言为中文,其余按提示操作,注意分区时选择最大空闲空间,自动分区即 可。安装时曾遇到过无法dhcp连接的问题,后来把网线插在无线路由器上就解决了,原来一直是插在歌华有线送的cable-modem上,很奇怪在 win2000下这样是可以得到IP地址的;

4、无线网卡的配置。我用的是Netgear WG511网卡,方法是在http://prism54.org/%7Emcgrof/firmware/下 载最新的firmware版本,更名为isl3890和isl3877各一份放在/usr/lib/hotplug/firmware下面(用grep FIRMWARE_DIR /etc/hotplug/firmware.agent命令找到),对于2.6版本的内核需要mount sysfs,方法如下:

mkdir /sys 
Add "none /sys sysfs defaults 0 0" to /etc/fstab 
mount /sys

再在/etc/network/interfaces里添加这样两句(假设无线网卡的代号是eth1),

auto eth1 
iface eth1 inet dhcp

这样用ifup就可以启动无线网卡并通过dhcp获取ip地址了:

ifup eth1

这个是关于prism(WG511所使用的芯片)驱动的wiki网站http://prism54.org/phpwiki

4、apt-get install gdm gnome-core x-window-system-core ttf-arphic-uming,其中ttf-arphic-uming字体是为了让gnome显示中文(虽然不是非常好看);安装小企鹅输入法, apt-get install fcitx,完成后要做一些设置:把下面的内容保存为/etc/X11/Xsessin.d/25chinput-start,然后重新启动X或重新启动 系统:

export XMODIFIERS="@im=fcitx" 
export XIM=fcitx 
export XIM_PROGRAM=fcitx 
fcitx&

如果需要配置fcitx的参数,可以修改/root/.fticx/config文件;

5、因为屏幕1400×1050算非标准分辨率,所以在/etc/X11/XF86Config-4里添加这个值,然后在gnome里就可以把桌面设置为这个分辨率了;

6、(从现在开始是在Debian里写了;)要在面板上显示电池电量,先要安装acpid,然后在面板上添加电池电量监视器即可;

7、这时的声音不正常,用mpg123播放mp3发出刺耳的噪音,apt-get install alsa后,执行alsaconf检测声卡,然后重新启动就好了;

8、安装应用软件:msn用gaim,画图用gimp,收信用evolution,浏览器mozilla firefox,听歌xmms,媒体播放器totem,等等;

9、用优盘mount /mnt/sda1,同时用第二个优盘mount /mnt/sdb1,用pcmcia的读卡器mount /mnt/sde1。写到/etc/fstab里可以简化命令,iocharset=cp936选项可以显示中文文件名。

10、网卡如果要使用静态ip地址(在实验室就是这种情况),/etc/network/interfaces里这样写:

iface eth1 inet static
        address 162.105.131.205
        netmask 255.255.255.128
        broadcast 162.105.131.255
        gateway 162.105.131.129
        dns-nameservers 162.105.129.27

要转换为dhcp时运行$dhclient eth1即可。

11、让cpu支持降频,装cpufreqd,在/etc/modules里添加speedstep-ich;可用的模块列表在这里 /lib/modules/[你的内核版本]/kernel/arch/i386/kernel/cpu/cpufreq;重启服务sudo /etc/init.d/cpufreqd restart。

12、若usb设备不能停止,用这个命令杀掉使用它的所有进程:sync && fuser -m /dev/sda1 -k