csatblogspotdotcom

Sunday, November 30, 2008

glibc与/usr/include

glibc即GNU C library,它分散于系统的各个文件夹中,下面是官方解释:
Any Unix-like operating system needs a C library: the library which defines the "system calls" and other basic facilities such as open, malloc, printf, exit...
The GNU C library is used as the C library in the GNU system and most systems with the Linux kernel.
from: http://www.gnu.org/software/libc/#Resources
而/usr/include/包含的是一些系统头文件,glibc在其中也放置了头文件。

以下是库文件和头文件的区别:
1. 函数的定义在头文件中进行,函数的实现在CPP文件或者LIB库中;
2. 库文件是链接器在链接时加入的,而头文件是编译时处理;
3. 搜索路径也不一样:库文件一般在*/lib/*中,而头文件一般在*/include/*中

记得以前研一在做项目时,使用已有库函数时直接在编译时把所有需要的".c"文件和一两个库文件放在g++编译命令中就可以了。
而头文件显然在文件内部声明。

Labels: ,

Saturday, November 29, 2008

vncserver的配置

今天在rhel5下配置了vncserver。
刚开始连接时怎么都连不上,后来发现是防火墙的原因,
用iptables -F把所有规则清零后终于连上,但这样并不安全,
于是在/etc/sysconfig/iptables中加上
-A RH-Firewall-1-INPUT -p tcp --dport 5800:5810 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp --dport 5900:5910 -j ACCEPT
(后来在图形界面中修改时/etc/sysconfig/iptables被修改为:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 580n(590n) -j ACCEPT)
注:
1. vncserver使用tcp协议,用vncviewer访问http://IP:580n/时,其服务端口为5900,访问端口为5900+n;用浏览器访问时,启用一个JAVA版的viewer,服务端口为5800,访问端口为5800+n(实际上在服务器上ps -e查看时开了一个590n的端口和几个580n端口,过一会儿就只剩一个590n的端口了)
2. iptables -F把所有规则清零,而iptables -L把所有规则显示出来
3. 在 ~/.vnc/xstartup中加上"gnome-session &"则启动时加载gnome桌面管理器;加"startkde &"加载KDE桌面管理器;加"fvwm2 &"加载fvwm2窗口管理器;默认是使用twm。
4. # Uncomment the following two lines for normal desktop:
unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc
去掉这两行的注释后,每次登录就不会出现那个丑陋原始的终端了,也不会出现那个有三个复选框的丑陋原始的窗口了。
5.from wikipedia:
VNC by default uses TCP ports 5900 through 5906, each port corresponding to a separate screen (:0 to :6). A Java viewer is available in many implementations such as RealVNC on ports 5800 through 5806, allowing clients to interact through, among other things, a Java-enabled web browser. Other ports can be used as long as both client and server are configured accordingly.


后记:vncserver有个参数geometry,用来设置屏幕大小,如:
vncserver -geometry 800x600
注意:800和600中间是小写字母x
在 ~/.bashrc 中设置
alias vncserver='vncserver -geometry 800x600'
即可使之默认为800x600

后记1:
昨天配置时发现root用户一点问题都没有,但普通用户就什么都没有,只有个十字形的叉叉,搞了半天,临走时突然发现"$HOME/"文件夹下面有个.ICEauthority的文件居然是root的,而且所在组也是root,更重要的是权限设置为600,估计就是这个问题了。
今天2点来,把$HOME/里属于root的文件夹全删,重新启动vnc,结果就OK了。估计以前用了sudo完成的命令,所以把相应文件的属性搞成了root。
p.s. VNC启动后会自动生成 ~/.ICEauthority 和 ~./Xauthority两个文件,这两个文件是和安全相关的。
据网上的说法:$
1. XAUTHORITY (通常是 ~/.Xauthority) 是紀錄誰可以連線到你目前的 X server。
X server可以通过利用"magic cookie"来控制用户级的对X server的访问。这是一个机器可以识别的、随机产生的代码。一个X client必须在被X server允许访问之前向X server提供相同的"magic cookie"值。这个值被存在文件".Xauthority"中,它既可以在每次会话的开始由xdm产生,又可以由用户产生。
3. .ICEauthority is a file that coordinates some basic security and function permissions. It can be damaged to a point where it is impossible to log on normally. Most famously, this can happen by launching a graphical application using sudo instead of gksudo (or kdesu with KDE). While it will not cause a problem with every graphical app or even every time, it is a real concern.



后记2:
今天配置samba时又碰到了防火墙问题,在图形界面中解决了问题。顺便试了下在图形界面中设置防火墙,结果发现
/etc/sysconfig/iptables被修改为:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 580n(590n) -j ACCEPT
看来以后可以直接往里面加这条语句

Labels: ,

Friday, November 28, 2008

locale的设定

Linux和Windows交互时经常出现乱码,原因就是字符集不一样,这也涉及到一个服务器端和客户端两端的字符集的设定:例如,ssh登录要涉及远程服务器字符集和ssh客户端显示的字符集。只要两边的字符集一致,一般的话就不会有问题。

客户端软件的字符集设置就不说了,下面只说服务器端。
如果只是临时改变,那么可以直接用export命令,例如:export LANG="zh_CN.GB18030"
如果想一劳永逸,则:
在Ubuntu的/etc/environment文件中(redhat系的是/etc/sysconfig/i18n,其中i18n代表internationalization,国际化i和n中间有18个字母)加入:
LANG="zh_CN.GB18030"
LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"
SYSFONT="latarcyrheb-sun16"
SYSFONTACM="8859-15"
.或source或重新登录后就可以了。
注:如果/etc/environment或/etc/sysconfig/i18n中什么都没有,则会使用默认locale:
C locale(或被叫做POSIX locale)。

顺便说一下,locale出的几个变量的区别
(sun的这篇文章中有详细介绍
http://docs.sun.com/app/docs/doc/817-2521/6mi67tj36?a=view)
其优先级是:LC_ALL > LC_* >LANG,LANG的优先级最低
而LANG和LANGUAGE的区别:
LANG - Specifies the default locale for all unset locale variables
LANGUAGE - Most programs use this for the language of its interface
前者是所有未赋值的locale变量的默认值,而后者是应用程序的接口语言

后记:今天发现SYSFONTACM这个选项够烦的,启动时老是提示没文件或文件夹,以前就注意到了SYSFONTACM=8859-15时启动过程老是报错:8859-15:No such file or directory,现在SYSFONTACM=utf8时又这样,改成utf-8还这样,于是干脆在i18n中删相应行,再重启就没这个问题了。

下面是我的i18n文件的内容:

LANG="en_US.UTF-8"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh:zh_CN.GB18030:zh_CN.GB2312:zh_CN.GBK:en_US.UTF-8:en_US:en"
SYSFONT="latarcyrheb-sun16"
#SYSFONTACM="utf8"

后记1:
今天配vnc时按这个配置,桌面及菜单又出现了乱码,真是麻烦,于是把语言改为英语,支持的语言包括中文,
/etc/sysconfig/i18n内容如下

LANG=C

SUPPORTED="zh_CN.UTF-8:zh_CN:zh:zh_CN.GB18030:zh_CN.GB2312:zh_CN.GBK:en_US.UTF-8:en_US:en"

SYSFONT="latarcyrheb-sun16"

SYSFONTACM="8859-15"

后记2:
今天把中文输入法搞好后,发现还是无法显示中文,当然也输入不了中文,无论怎么修改
/etc/sysconfig/i18n文件都不管用,后来搜了一下,有可能是系统中文包没装,
rpm -qa|grep fonts-chinese后果然没有,于是
yum install fonts-chinese
终于支持中文了

后记3:
对了,忘把相应的
/etc/sysconfig/i18n
贴出来了:

LANG="en_US.UTF-8"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh:zh_CN.GB18030:zh_CN.GB2312:zh_CN.GBK:en_US.UTF-8:en_US:en"
SYSFONT="latarcyrheb-sun16"
SYSFONTACM="8859-15"

注意:"LANG=C"(最原始的!)是不行的,这样仍然会出现乱码,而且输入中文时虽然输入法列出了汉字但敲空格后没反应。

后记4:
今天又装了一次rhel5,英文方式安装,装好后再安装中文字体fonts-chinese和输入发scim,发现居然不行,所有中文全为方块,但putty登录的终端中可以输入中文,后来把所有的
*font*
都装上了
scim*
也装了,结果还是不行,重启也不行
花了我好半天时间,搞死我了,最后发现居然是字体缓存的原因,运行命令
fc-cache -fv
后就正常了;不过也有可能是某个服务的原因,因为之前关闭了几个没用的服务。


BTW,字体文件夹是/usr/share/fonts/
安装新字体只需把字体拷贝到字体文件夹就可以了,不行的话再更新字体缓存。

Labels: ,

Thursday, November 27, 2008

打印终端前/背景色表的脚本

打印终端前/背景色表的脚本,方便在Script中控制文字、背景的色彩
#!/bin/sh
############################################################
# Print the ASCII Color Table
############################################################
# originally by AntiGenX
# from: [url]http://forums.macosxhints.com/showthread.php?t=17068[/url]
#
# edits and cleanup by catfish
#
for i in 0 1 4 5 7; do
case $i in
0) MODE="Normal";;
1) MODE="Bold";;
4) MODE="Underline";;
5) MODE="Blink";;
7) MODE="Inverse";;
*) MODE="undefined";;
esac
echo
echo "----------------------------------------------------------------"
printf " Mode: %-12s Code: ESC[%s;Foreground;Background\n" ${MODE} $i
echo "----------------------------------------------------------------"
for fore in 30 31 32 33 34 35 36 37; do
for back in 40 41 42 43 44 45 46 47; do
printf '\033[%s;%s;%sm %02s;%02s ' $i $fore $back $fore $back
done
printf '\033[0m'
echo
done
done
echo

Labels: ,

自动连接脚本autotelnet

#!/bin/bash
username="yourname"
passwd="yourpasswd"
ip="192.168.1.18"
cmd="hostname"
(sleep 1;echo "$username";sleep 1;echo "$passwd";sleep 1;echo "$cmd";sleep 1;echo "exit") | telnet $ip
p.s. 脚本结束后连接立即断开

Labels: ,

xen的安装

1. apt-get或yum安装
2. 下载deb或rpm包安装
3. 源码安装

如果从xen网站上下载的xen和Linux内核都是同一个版本的,例如3.1,
则直接"make dist"或"make world"后"make install"即可,这在README中都有,"make help"命令也有提示。
昨天我没有这样安装,因为想装xen-3.3,而相应的Linux内核据说下载下来后不能用,而且xen邮件列表中给出的用hg(类似CVS和svn的工具)到官网实时下载安装的方法也不行(网速问题),所以只能用kernel.org上提供的内核,通过xen自己编译(只能通过xen-3.1编译,xen-3.2或3.3都不行:别人的经验之谈)。我选择通过xen-3.1来编译Linux内核2.6.18-8,编译时,xen可以修改内核,最后编译出来的内核可以作为domain 0的内核。

第一步
在xen-3.3的文件夹中用make install-xen && make install-tools && make install-docs(注意权限问题)安装了xen、tools等。

第二步
把从kernel.org下载的内核(不要解压)放到xen-3.1的文件夹中,按照README中"Quick-Start Guide - Source Release"部分的第五点,运行
"make linux-2.6-xen-config CONFIGMODE=menuconfig"
注:
1. 本来这一步和下面两步可以"make kernels"一个命令搞定,但开始用的是kernel.org上最新版本内核,出了问题,于是到buildconfigs/mk.linux-2.6-xen中,修改相应版本号(默认是2.6.18),结果运行时还是识别不了,最后不得不下载了默认版本内核:2.6.18
2. 编译内核需要很长时间,之前会有一些选项让你选,选完开始编译

第三步
"make linux-2.6-xen-config CONFIGMODE=menuconfig"之后,
"make linux-2.6-xen-build"

第四步
"make linux-2.6-xen-install",内核生成并被拷贝到相应目录

第五步
"mkinitrd",生成"initrd-2.6.18.8-xen.img"并将其拷贝到/boot下

最后
修改grub并重启



后记1:
由于xen-3.1.4中编译出的Domain0的内核默认并没有把loop设备部分当作模块来编译,而是内核的一部分来编译,于是不得不重新编译一次xen,让其支持loop设备模块。

p.s.
1. linux默认只支持8个loop设备(/dev/loop0-/dev/loop7),如果有loop设备模块的话就可以改变支持的loop设备的上限。
2. 系统中那些部分作为内核一部分,那些作为模块形式加载,这些都在config文件中定义。在编译xen之前,config配置文件是xen- 3.1.4/build-linux-2.6.18.8-xen_x86_64/.config,编译时会按照这个文件来编译,编译并安装后会把该配置文件放到/boot/config-2.6.18.8-xen。文件中等号右边的y表示编译进内核,m表示以模块形式编译。

重装xen的过程如下:
首先config,然后build,然后install,接下来depmod(可有可无)和mkinitrd。
其中config这一步既可以按make help中的命令make prep-kernels,也可以按照README中make linux-2.6-xen-config CONFIGMODE=menuconfig (or xconfig),两个命令在屏幕上的输出基本上是一样的;config文件就是该命令产生的,具体位置为xen-3.1.4/build-linux- 2.6.18.8-xen_x86_64/.config;在menuconfig中用菜单手动设置CONFIG_BLK_DEV_LOOP=m,而对于 make prep-kernels,需要在 .config 文件中把CONFIG_BLK_DEV_LOOP手动设置为m。

p.s. 查看/boot/config-2.6.18-8.el5,可以看到物理机的内核默认把loop设备以模块方式编译,而在xen-3.1.4中编译Domain0内核时,默认把loop设备当成内核一部分来编译。

在build这一步,可以利用make命令的-j选项来增加编译速度:sudo make -j 8 linux-2.6-xen-build:这样编译时同时运行8个编译任务,速度快了很多。

接下来的make linux-2.6-xen-install据说会做两件事情:把编译好的内核放到/boot/vmlinuz-2.6.18.8-xen,以及把编译好的模块放到/lib/modules/2.6.18.8-xen/中。

sudo depmod 2.6.18.8-xen这一步没输出。

最后的sudo mkinitrd -v -f --with=aacraid --with=sd_mod --with=scsi_mod initrd-2.6.18.8-xen.img 2.6.18.8-xen命令在当前目录生成initrd-2.6.18.8-xen.img,把这个文件拷贝到/boot/下面就可以了。

后记2:
make linux-2.6-xen-config CONFIGMODE=menuconfig命令可以用
cd build-linux-2.6.18-xen_x86_64
后make menuconfig。

后记3:
在xenXXX/buildYYY/.config中修改CONFIG_BLK_DEV_LOOP为CONFIG_BLK_DEV_LOOP=m;
而当用menuconfig时,修改Device Drivers ---> Block devices ---> Loopback device support为M即可。

后记4:
刚装好xen后重启,运行 xm list 命令出现错误:
Error: Unable to connect to xend: Connection refused. Is xend running?
原因是xend没有运行,用命令
chkconfig --add xend
把xend添加进服务,重启或手动启动xend即可。

后记5:
今天发现原来装xen时docs以前从来没有装上去过,这次终于解决:
开始提示说是没装latex,但rhel5的源中没有latex,只有 tetex,于是装上了tetex,接下来又提示fig2dev这个包没装上,搞了半天,找不着这个包,最后在rpmfind上找到了,原来真正的名字是 transfig,装上后终于把xen的docs搞定了

Labels: ,

Windows命令提示符出现乱码的解决

今天进命令提示符登录bbs,结果全乱码。
后来发现只在Win+R再cmd后会出现乱码,但如果直接运行命令提示符或直接运行
C:\windows\system32\cmd.exe则不会有乱码。
查看了命令提示符窗口默认选项,确实是GBK,但当前窗口属性为437(OEM-美国)
后来上网查了下,用命令chcp 936即可解决(chcp应该表示change code page),刚才输入chcp提示活动的代码页为437而chcp 936后为936。
但这样只是改变当前窗口的属性,想彻底解决需要到注册表修改:
HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe中CodePage项值改为十进制"936"或 十六进制"000003a8"。

ps. codepage在wikipedia中有解释

Labels: ,

Wednesday, November 26, 2008

wget对断点续传的支持

想暂停直接Ctrl+C
恢复时进入原下载文件夹,在上次下载命令的基础上加一个-c选项即可(表示continue)。
如果不加该选项则会保存为一个新的文件,文件名为"原文件名.1"。

Labels: ,

echo出系统信息

echo $LANG (echo $LANGUAGE 在有的系统上可以) (系统字符编码)
ps. locale命令比"echo $LANG"显示的更全
echo $OSTYPE (操作系统名)
echo $PATH (环境变量)

Labels: ,

Linux环境下增加开机启动项

今天装了个xen,想开机即加载,方法有一下3个:
1. 在/etc/rc.local中直接写上启动命令
2. runlevel命令显示运行级别,例如3,则在/etc/rc3.d/ 中直接加上一个指向
/etc/init.d/xend的软链接S99xend,直接搞定。
3. 用chkconfig命令加载,这个命令比起方法2,我想其好处是安全性更好。具体命令是执行
sudo chkconfig --add xend,结果是在/etc/rc3.d/、/etc/rc4.d/、/etc/rc5.d/中都自动加了一个软链接:S98xend,在/etc/rc1.d/、/etc/rc2.d/、/etc/rc6.d/都中加了个软连接K01xend,也是指向/etc/init.d/xend。如果要全部删除,可以运行chkconfig --del xend。此外还有一个--level选项,表示运行级别,可以用chkconfig --level 3 xend on/off 来单独对运行级别3的xend服务进行开关。

ps. 几个/etc/rcX.d/文件夹中的内容都是指向/etc/init.d/中文件的软连接,命名方式是以K或S开头:K代表kill,开机时不启动,S代表start,开机时启动,而后面的数字代表优先级别,数字小的先执行。对比了一下rhel5和Ubuntu,前者有很多K开头的,后者除rc6(重启)和rc1外几乎没有,可以看出rhel5考虑的周到一些,安全性确实高一些。

Labels: ,

locate命令及其更新

locate命令可以很快的定位文件,速度很快,其原理和find不同:find是实时搜索,而locate是将系统信息保存在数据库中,然后在查找时直接检索数据库,二者各有优缺点:
find:具有实时性但速度慢
locate:速度快但实时性稍差
locate有其升级版:slocate,s代表安全security
若要对locate的数据库进行更新,则可以执行 locate -u,更新完毕后,就可以用locate进行实时定位了。但是今天在rhel5中,locate没有-u选项(而且也没有slocate命令),这样就需要用updatedb命令来更新。

Labels: ,

dos与unix的fileformat的相互转换

在unix平台和dos平台下,换行符是不一样的,因此在一个系统下解析另一个系统的文件是会出现问题的,因此需要进行文件格式的转换。
实现方法有很多,可以用sed等命令对换行符进行替换,也可以用Linux平台下的unix2dos和dos2unix命令完成,也可以安装tofrodos(tofromdos),(unix2dos and dos2unix depend on tofrodos package)最后vim编辑器中也可以完成。
vim中有s替换命令,也可以直接set fileformat unix或set fileformat dos,若直接运行
set fileformat 或 set fileformat? 则显示该文件的文件格式(fileformat可简写为ff)。
此外,还有另外一种格式是mac,在Fedora系统上默认有mac2unix命令。
这三种格式的换行符区别是
unix:< LF > 或 \n
dos: < CR > < LF > 或 \r\n
mac: < CR > 或 \r
ps. vim能对3种格式进行自由转换

Labels: ,

使不同系统共用的.bash_profile

不同系统共用一个磁盘空间,这是 ~/ 下的 .bash_profile 就是不同系统共用的,如果不对系统进行判断,就很可能在不同系统里出现不同的问题。

最开始是想让ls命令支持color,有的系统默认就支持,但有的默认不支持,这可以通过ls --color或ls --color=auto解决,但每次输入多麻烦啊,于是可以在 ~/.bash_profile中加上 alias ls='ls --color=auto',对其文件 . 或 source,就OK了。但接下来问题又来了,AIX上又不行,不支持这个参数,只能ls -G,于是可以先判断$OSTYPE,代码如下:
if [ $OSTYPE == 'freebsd6.2' ]; then
alias ls='ls -G'
else
alias ls='ls --color=auto'
fi

今天又在FreeBSD上发现其vi并不是vim的一个软链接,而是分开的,于是在 ~/.bash_profile中加上了 alias vi='vim';但这样问题又来了:AIX上提示找不着vim,因为AIX上虽有vim,但只能是输入vi继而进入vim,而直接输入vim就提示无此命令。所以又想起了上面的方法。
if [ $OSTYPE != 'aix5.1' ]; then
alias vi='vim'
else
alias vim='vi'
fi
这样就OK了!

Labels: ,

Linux环境变量的设置

环境变量的好处是运行一个命令时无需输入全路径,系统自动在环境变量描述的文件夹中搜索,如果环境变量中没设置相应文件夹,则在执行命令时要输入绝对路径。
今天碰到的情况就是ifcon后Tab无效,而且在su后以root运行也是无效(以root直接登录就可以,su进入虽有root权限但环境变量还是以前用户的),后来发现是自己环境变量中没有/sbin,/usr/sbin,以及/usr/local/sbin。在 ~/.bash_profile中添加这3个路径,然后重新登录
或 . .bash_profile 或 source .bash_profile 就OK了:执行命令时,Tab补全可用了,而且无需输入绝对路径。

后记:
PATH=$PATH:$HOME/bin
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/lib
$PATH是可执行文件的搜索路径
$LD_LIBRARY_PATH是库文件的搜索路径

Labels: ,

Tuesday, November 25, 2008

sudo和su

sudo仅仅以root身份执行一条命令,输入sudo *** 后要求输入自己的密码,而且这之后连续的几分钟之内若再次运行sudo则不需要密码;
若是sudo *** && *** 则第一条语句以root身份执行,而后面一条语句仍以普通用户身份执行
注:在/etc/sudoers中设置用户的sudo权限
该命令发源于Debian,现在估计一般系统上都有了

su完全切换到root身份,输入su时要求输入root密码。
当然su也可以切换到任意其它的用户身份,而且不需要输入密码
该命令所有系统上都有

p.s. 若是"sudo su"的话只需输入普通用户的密码即可切换到root,
而"sudo su alex"则只需输入普通用户密码即可切换到alex。

Labels: ,

ssh登录慢的解决方法

ssh在登录时,把用户名和密码送过去后要等好一会儿才登上
以前好像在Linux平台下解决过,是在被登录机器的/etc/hosts里加上自己机器IP和主机名
但今天在Windows下不管用了,网上说是DNS反查的缘故,它现在file即/etc/hosts中查你的主机名,没查到再通过DNS查,通过DNS查的话就很慢了,解决方法有:
1. 在/etc/nsswitch.conf中的hosts一行把dns去掉,这样整个机子就用不了DNS了。这样做的弊病也很大:上网只能用IP,不能用域名!
2. 在/etc/ssh/sshd_config中将UseDNS设为no,这样只有ssh用不了DNS。今天在rhel5中这个选项被注释了,后来设为no后就好了。

Labels: ,

Monday, November 24, 2008

关于增加用户的sudo权限

普通用户若要以root权限执行命令
1. 首先可以修改/etc/group,在第一行root对应的组后加上你的用户名
2. 将你的GID改为0,即root组ID。可以修改/etc/passwd相应的行,也可以用usermod -g实现。
3. 用visudo修改/etc/sudoers。在其中加上一行
yourname ALL=(ALL) ALL 或 yourgroup ALL=(ALL) ALL
其中的ALL都是可以替换的,还可以设置为不需要密码,具体设置网上都有

/etc/sudoers可以用vi直接编辑,而用visudo命令的原因是为了安全,会检查sudoers文件的合法性,如果直接改动,万一出现语法错误,sudo就被锁死了。
其实/etc/passwd和/etc/group也有相应的命令:vipw和vigr。
ps: /etc/sudoers、/etc/passwd、/etc/group默认文件属性也有区别:440、644、644.

Labels: ,

/etc/group和/etc/passwd

/etc/group
group_name:passwd:GID:user_list
group_name 组名。
password 组口令。此域中的口令是加密的。如果此域为空,表明该组不需要口令。
gid 指定 GID。
user_list 该组的所有用户,用户名之间用逗号隔开。
/etc/group文件含有关于小组的信息,/etc/passwd中的每个GID在本文件中应当有相应的入口项,入口项中列出了小组名和小组中的用户。这样可方便地了解每个小组的用户,否则必须根据GID在/etc/passwd文件中从头至尾地寻找同组用户。/etc/group文件对小组的许可权限的控制并不是必要的,因为系统用UID,GID (取自/etc/passwd)决定文件存取权限,即使/etc/group文件不存在于系统中,具有相同的GID用户也可以小组的存取许可权限共享文件。

/etc/passwd
name:password:uid:gid:comment:home:shell
name 用户登录名
password 用户口令。此域中的口令是加密的。当用户登录系统时,系统对输入的口令采取相同 的算法,与此域中的内容进行比较。如果此域为空,表明该用户登录时不需要口令。
uid 指定用户的 UID。用户登录进系统后,系统通过该值,而不是用户名来识别用户。
gid GID。如果系统要对相同的一群人赋予相同的权利,则使用该值。
comment 用来保存用户的真实姓名和个人细节。
home 指定用户的主目录的绝对路径。
shell 如果用户登录成功,则要执行的命令的绝对路径放在这一区域中。它可以是任何命令。
/etc/passwd中UID信息很重要,系统使用UID而不是登录名区别用户。一般来说,用户的UID应当是独一无二的,其他用户不应当有相同的UID数值。根据惯例,从0到99的UID保留用作系统用户的 UI(root,bin,uucp等)。 如果在/etc/passwd文件中有两个不同的入口项有相同的UID,则这两个用户对相互的文件具有相同的存取权限。



修改用户组属性时可以用usermod命令的-g选项,其实就是修改了/etc/passwd相应的行,把对应的组号给改了,当然手动修改是一样的。如果是手动修改/etc/group,在相应的组后加上用户,也可以达到同样的效果。

Labels: ,

各种代理技术使用心得及其比较

教育网到公网,以及国内网到国外网,网关都进行了限制,所以不得不使用代理。
于是这几天一直在研究翻墙和打洞。

1. ssh port forwarding
首先是ssh端口转发技术,刚把这项技术试用成功时,着实让我兴奋了好久。
它的大致原理就是先建立一个到远程服务器的连接,这个ssh连接就相当于一个隧道,
或者对于防火墙来说就是被打了一个洞。把本地某应用程序入firefox的代理设置为本机IP和一个给定的port,例如127.0.0.1:4444. 那么firefox发包时就全扔给了127.0.0.1:4444. 而对于这个ssh连接来说,只要有数据包来自本地的4444端口则把它传送给远端,远端再发送给目的地址(注意:远端的sshd_config中如果把转发选项设为no则不能实现端口转发)。返回的数据包过程相反。这样做的好处就在于本地和远程服务器之间用的是ssh连接,数据已经加密,中间经过的任何一个地方都看不到隧道中传输的内容。只要保证远程ssh服务器访问网络的安全性,就可以保证整个链路的安全。
具体地说,要找一个支持tunneling的ssh登录工具如PuTTY,再选一个特定端口号,很轻松的就能实现该技术,当然命令行也行。ssh命令有L、R、D选项。L对应本地端口转发,它可以建一个单向隧道,入口在本地,出口在远端;R对应远程端口转发,建立的隧道的入口在远端,出口在本地;而D表示动态建立,按我的理解是双向的。在PuTTY中就是选的dynamic。
如果把连接设置为允许本地之外的机器访问隧道,则本地的机子就做成了一个代理:其它机子把包扔到自己机子上的那个特定端口,通过隧道发送出去。
这种方法需要你找一台可供ssh登录的服务器,而且服务器的端口转发要打开,这两天想登sourceforge上的服务器,还特意申请了账号,建了项目,结果每次登上去后马上就被退出了,后来根据提示用-t选项,但连接速度很慢,所以没做成功偶就放弃了,sourceforge的shell搞死偶了。不过UC的服务器确实很爽!
(国外的DreamHost主机不错)
优点:本地到远端的通信安全性高;而且支持https;适用于所有能设置代理的应用程序
缺点:远端到外部的安全性不能保证;需要找到一台提供用户ssh登录的远程服务器;登录界面要常开(当然如果用ssh命令也可以作为后台程序运行)

2. TOR
按偶的理解,这个技术的思想就是在应用层上再建立一个TOR网络,每个用户都是TOR网络的一个节点,每个用户都在本地运行一个TOR代理,你发出的包在TOR网络中的传输是透明的,而且是被加密的。
优点:TOR网络内的传输的安全性高;支持https;适用于所有能设置代理的应用程序
缺点:速度确实不咋地;需要客户端

3. CoDeeN
这是普林斯顿搞的一个CDN网络,世界不同国家的大学(为主)和研究机构都贡献节点作为CoDeeN代理,是一个实验性网络。
优点:教育网内的速度很快;代理服务器很多,如果选用外国大学服务器则很方便访问世界各地网络;配置最方便,不需客户端
缺点:仅能作为浏览器的代理;不支持https;服务器经常挂掉

4. GAppProxy
google code上的一个项目,利用Google AppEngine的虚拟服务器做代理,可以用自己的AppEngine,也可以是别人的。估计以前没写用户界面,只有几个脚本,按照那个方法,搞得偶配了半天还是有问题,脚本包含的一个头文件找不着;运行时还要把那个窗口一直打开着。不过现在的版本有用户界面,可以很方便的配置代理地址了,直接用他提供的地址也很快。当然也可以不开用户界面,作为后台程序运行,很方便。
优点:速度快,稳定(用的可是Google的服务器哦);可作为后台程序运行(当然也有客户端)
缺点:不支持443端口的https(虽然宣称安装python 2.6 后就OK,但偶试过,还是不行); 仅支持http;仅支持80端口

5. 花刺等软件
仅仅是一个管理代理地址的软件,省了手动设置的功夫。需要把搜集到的代理地址(如学校网站上公布的代理)添加进地址列表(其实这类软件就是对这个列表进行处理,然后对软件进行代理设置,一点技术含量都没有!)。
优点:可以处理大量的地址并对地址有效性进行验证,不用手动设置代理地址
缺点:实质上不是代理软件,只能说是为代理过程提供服务的软件


后记:
今天又发现了另一个类似于tor的软件ultrasurf,不过比tor配置方便,只有几百K,默认针对IE,而firefox也有xpi插件,速度还可以,在Google中搜索ultrasurf会被GFW封掉,而搜索tor就不会,从这点就可以看出ultrasurf有多牛了。

。。。
刚才发现原来ultrasurf是个反华网站搞的软件,怪不得被封掉。。。


后记2:
今天想起还有个好东西:迅雷。把下载链接贴给迅雷,一般都可以下,而且速度很快!
此外,还可以在 ~/.bashrc 中设置代理




后记3:
刚发现在图形界面中,system选项里面就有代理设置:System --> Preferences --> Network Proxy,这个其实是修改了环境变量 $http_proxy ,和在 ~/.bashrc 中设置 $http_proxy是一样的,注意:是针对http的代理,而不是socks,所以用putty通过ssh建立的代理是不能用在这儿的。

同时,对于tor,还有与之配套使用的几个东西:vidalia、privoxy、firefox。ff就不说了,至于vidalia,它是tor的图形界面,最后是privoxy:(一下一段摘自http://blog.sina.com.cn/s/blog_4fe29ac90100bi8l.html)
Privoxy是一种Web代理,为了浏览HTTP必不可少。Privoxy是支持HTTP、SOCKS代理以及HTTP转换为SOCKS代理,Tor支持SOCKS。所以要通过tor浏览HTTP就要通过Privoxy的转换。同时,Privoxy 会删除 Web 请求中危险的报头并且阻挡 Doubleclick 之类的令人厌恶的广告站点,经过调试各种广告、弹出窗口啊都可以过滤。
(下面一段摘自wiki)
Privoxy is a non-caching web proxy with advanced filtering capabilities for enhancing privacy, modifying web page data, managing HTTP cookies, controlling access, and removing ads, banners, pop-ups and other obnoxious Internet junk. Privoxy has a flexible configuration and can be customized to suit individual needs and tastes. Privoxy has application for both stand-alone systems and multi-user networks.



还有:NAT,应该勉强算是一种代理技术吧,可以让多台机器通过一台机器上网。
(NAT在网络层或传输层,socks在会话层,应用层代理如http代理、ftp代理当然在应用层)
ssh用-D选项的话可以这样:
ssh -D port user@host
详细的说:ssh -CNfgD port user@host
其中的C表示对传输的数据进行压缩,这个在网络环境差时有用,但在网速快时反而影响速度
f让ssh在后台运行
N通常和f连用,表示不执行远程命令
g可以让其它机子也连到这个隧道上
D指定dynamic类型的端口

6 ultrasurf(类似于tor)
7 迅雷
8 修改系统设置,如修改Linux系统的环境变量 $http_proxy $ftp_proxy(Linux下好像只支持http和ftp)或直接在System --> Preferences --> Network Proxy中改。
9 NAT
10 TOR+Vidalia+Privoxy+Firefox


后记4:
Windows下强大的代理软件:ccproxy,Linux下代理软件:squid
Linux的实用代理软件:tsocks能让应用软件透明的使用socks代理,能把socks代理转化为http等代理,很不错的说。

《开源》杂志第二期:
http://bbs.linuxpk.com/attachment.php?aid=3090&k=e5e2b2132af7f5d98504271af5661200&t=1232518139&fid=101&sid=89f3s6Qud85luFAgD8A3XQXpMdjNezZi4roqnsMRjQtUypE
介绍了几个不错的代理软件以及http代理获取设计

后记5:
在bbs上看到的:
和GAppProxy一样基于google AppEngine的web代理:http://go2.appspot.com/
http://quick-proxy.appspot.com/也是,并且可以直接把地址加在http://quick-proxy.appspot.com后面,如http://quick-proxy.appspot.com/www.baidu.com/;
类似的还有:
http://proxypy.appspot.com
http://web-proxy.appspot.com
http://fly-proxy.appspot.com
另外还有“99宿舍加速器”
火狐有gladder插件,自动搜集代理列表,并使用之。

后记5:google自己的web代理(好像是)
http://www.google.com/gwt/n

后记6:
科大代理:
类型:scok5
地址:202.38.76.238
端口:1080

Labels:

Saturday, November 22, 2008

网络爬虫和robots.txt

一般每个网站的目录下都有一个robots.txt文件,这个文件告诉了搜索引擎的网络爬虫可以访问该网站的哪些目录和文件以及不可以访问该网站的哪些目录和文件。
每个网站的网址的斜线后加一个robots.txt即可直接读取该文件内容,例如:
www.google.com/robots.txt

ps. google的这个robots.txt很多内容,一般网站的robots.txt内容很短,只有几行

Labels:

Friday, November 21, 2008

关于不同系统中ls命令的彩色显示问题

今天解决了UC机子上ls命令的彩色显示问题。
以前只有fc的机子ls后可以彩显,其它都是黑白的。
后来配置了一下.bashrc和.bash_profile
从自己机子上把~/.bashrc上传到自己目录,
如果是.bashrc,每次都要手动source才行
后来我又mv .bashrc .bash_profile
这样就OK了,每次登录后ls能显示彩色
但这样还是有问题:在FreeBSD上ls后会出现
ls: illegal option -- -
usage: ls [-ABCFGHILPRSTUWZabcdfghiklmnopqrstuwx1] [file ...]
在UC的shell版发了一贴,结果galf立马回了一个:
CODE:
if [ $OSTYPE == "freebsd6.2" ]; then
alias ls="ls -G"
else
alias ls="ls --color=auto"
fi
在中心测试有效。
按照这个改了一下,就OK了
注意:语句中的空格。

Labels: ,

Thursday, November 13, 2008

appengine.google.com被GFW后如何设置

首先要感谢落雁小屋http://blog.lijiangt.cn/2008/10/appenginegooglecom.html
今天想看看我的google appengine,结果appengine.google.com登录不上,上网一查才知道可能是被GFW掉了。后来又看到了落雁小屋的这篇文章,决定试试看。
首先在C:\windows\system32\drivers\etc下修改etc文件(Windows下也有像Linux一样的配置文件,估计是Windows在开发时借鉴了很多Linux的东西,比如文件系统架构等)。在文件的后面加上一行“203.208.35.100 appengine.google.com”,表示在解析appengine.google.com时解析成203.208.35.100这个IP,即google.cn的IP,这样不直接访问国外的google.com,而是通过google.cn来间接访问。这样就OK了!后来我用nslookup查询了一下google.cn和g.cn这两个域名,其IP是一样的:203.208.35.100和203.208.35.101,看来这两个IP就是google在中国的入口。
顺便说一句,C:\windows\system32\drivers\etc这个文件夹下面除了hosts文件外,还有networks、protocol和services等文件,和Linux差不多。services里包含了机器已有服务的端口设置,和Linux一样,平时想查询哪个服务用哪个端口号就可以看这个文件。
最后,还是要感谢落雁小屋,这个方法很牛!

Labels: