远去的烟花,远去的童年-FreeBSD下华丽的转身 - [感悟]
这不是一篇严格的技术文档,夹杂着对童年的怀念,以及对未来的憧憬,逐渐的,慢慢长大。
今天正月十五,FreeBSD配置的差不多了,已经可以正常的使用了,mp3用xmms,输入法用fcitx,看电影用Totem(mplayer没有装上,明天继续解决。realplayer不是从官网下载的,直接的用ports安装的,到现在还没装完,大概已经过去5个小时了。),浏览器就是现在用的opera,最顺手的浏览器。
配置中文和...
这不是一篇严格的技术文档,夹杂着对童年的怀念,以及对未来的憧憬,逐渐的,慢慢长大。
今天正月十五,FreeBSD配置的差不多了,已经可以正常的使用了,mp3用xmms,输入法用fcitx,看电影用Totem(mplayer没有装上,明天继续解决。realplayer不是从官网下载的,直接的用ports安装的,到现在还没装完,大概已经过去5个小时了。),浏览器就是现在用的opera,最顺手的浏览器。
配置中文和...
# vi /etc/ttys
ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm on secure
# vi ~/.xsession
export LC_ALL=zh_CN.eucCN
export XMODIFIERS='@im=fcitx'
export LANG=zh_CN.eucCN
export LC_CTYPE=zh_CN.eucCN
fcitx &
gnome-session
Xorg的配置就是:
#Xorg -configure
然后把生成的文件copy到/etc/X11目录中,并去掉.new的后缀。
强烈推荐以ports安装,下面把安装和一些简单的设置贴一下,其他比较高级的功能请大家发贴讨论(请google先,很多问题别人早已问过的)。
1:安装apache
cd /usr/ports/www/apache2
make install clean;
2:安装php4
cd /usr/ports/www/mod_php4
make install clean;
注意不要选择debug选项,否则Zend不管用的
5.4release版带的是 4.4.0
3:安装php4-extensions
本步骤一定不能省略,否则打开php文件的时候会发现提示有Fatal error:call to undefined function:preg_match() in *** on line ***,安装上php4-extensions即可
cd /usr/ports/lang/php4-extensions/
make install clean;
cd /usr/local/etc
cp php.ini-recommended php.ini
4:httpd.conf的一些简单设置
ee /usr/local/etc/apache2/httpd.conf
##DocumentRoot "/usr/local/www/data"
DocumentRoot "/usr/www"
##这个是apache的主目录,可根据实际情况修改
##
##要根据DocumentRoot作相应修改
Options Indexes FollowSymLinks
为了安全起见,请把上面的“Indexes”删掉。否则别人可以浏览到您网站里的所有文件。
Options FollowSymLinks
DirectoryIndex index.html index.html.var
添加index.php进去,为:
DirectoryIndex index.php index.html index.htm
##我的只想让它支持php、htm、html所以就只写了这么几个,可根据实际情况修改
在AddType application/x-gzip .gz .tgz后面加上下面2行:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
##这样才能支持php
在Apache2.0中新加入了ServerLimit指令,使得无须重编译Apache就可以加大MaxClients。我的就改成了:
StartServers 10
MinSpareServers 10
MaxSpareServers 15
ServerLimit 2000
MaxClients 1500
MaxRequestsPerChild 10000
BTW: ServerLimit的最大值是20000,这对于大多数站点是足够了,但如果你一定要再加大的话,那么这个值位于源代码树下的server/mpm/prefork/prefork.c中。里面的
#define DEFAULT_SERVER_LIMIT 256
#define MAX_SERVER_LIMIT 20000
这两行就对应着MaxClients和ServerLimit的限制值。但我相信很少有人可以用到20000的并发连接数。
5:启动apache
ee /etc/rc.conf加入:
apache2_enable="YES"
这样开机apache就会启动。
/usr/local/etc/rc.d/apache2.sh start可以启动
/usr/local/etc/rc.d/apache2.sh stop可以启动
当然/usr/local/sbin/apachectl start也是可以的,不过推荐用系统已经生成的sh。
6:查看apache+php是否能正常使用
cd /usr/www
ee index.php
phpinfo();
?>;
浏览器内输入http://******你的域名或ip
7:安装ZendOptimizer
首先要执行以下命令,否则会提示错误的
ln -s /lib/libm.so.3 /lib/libm.so.2
或者用以下方法:
ee /etc/libmap.conf
libm.so.2 libm.so.3
然后下载最新的Zend,上传至机器上,通过ftp、sftp等均可
tar zxvf ZendOptimizer-2.5.10a-freebsd5.1-i386.tar.gz
cd ZendOptimizer-2.5.10a-freebsd5.1-i386
./install
后面的几个选项可均用默认的,安装完毕以后重启apache后再用phpinfo()看,应该可以看见:
This program makes use of the Zend Scripting Language Engine:
Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies with Zend Extension Manager v1.0.8, Copyright (c) 2003-2005, by Zend Technologies with Zend Optimizer v2.5.10, Copyright (c) 1998-2005, by Zend Technologies
另外安装ZendOptimizer也最好用ports安装,不过我是习惯了直接装了,呵呵,ports安装的话方法是:
下载ZendOptimizer-2.5.10a-freebsd5.1-i386.tar.gz后,置于/usr/ports/distfiles目录下,
cd /usr/ports/devel/ZendOptimizer
make install clean;
好了,简单的过程就这样就可以了,至于要设置比较高级的功能,可参考其他帖子,按照这个过程应该就可以建好一个web站点了,当然还需要考虑后续的安全等等问题,这不是本贴的讨论范围了。
转载于ChinaUnix,原文链接:http://bbs.chinaunix.net/viewthread.php?tid=591042&extra=page%3D2
找到gdm的设置文件:/usr/X11R6/etc/gdm/gdm.conf
“AllowRoot=true”
对于许多电脑用户来说,FreeBSD还是一个比较陌生的系统。本文将以FreeBSD 4.7 Release为例,一步一步地带您安装一份完整的FreeBSD操作系统。
安装前的准备
FreeBSD对于系统的硬件适应能力比较强(相比Lin ux可能稍差,特别是对于新的显示卡的支持;但对于服务器常用的硬件,包括SCSI设备的支持是相当完善的)。IA平台的多数处理器,下至386,上至 Pentium-4及其兼容的CPU,都能够运行FreeBSD。为了有效地安装、运行FreeBSD,我个人推荐安装FreeBSD的系统至少要有 2GB的剩余硬盘空间,以及至少64MB内存。这样配置的电脑在今天是很容易找到的。考虑到FreeBSD一般都被配置作为服务器使用,上面的配置要求显然是很容易做到的。
对于服务器来说,双启动是不合适的(服务器往往要求持续、长时间工作,而切换操作系统无疑需要停止服务。此外,双启动的系统稳定性比较差,某个操作系统的崩溃很可能破坏另一个操作系统)。FreeBSD支持和其他操作系统并存、并在开机时通过菜单选择使用的操作系统,但我个人非常反对以这种方式使用FreeBSD。
那么,让我来从头到尾地安装一台FreeBSD服务器,并说明FreeBSD的安装。为了安装FreeBSD,我准备了这样一台电脑:
CPU: Pentium II-233, 内存64MB, 硬盘(IDE)6GB, PS/2键盘、鼠标,20x光驱、无软驱、RealTek8139网卡(TP-LINK)。
上述配置在今天是很容易做到的。当然,就服务器而言,这个配置确实惨了点,不过FreeBSD在上面运行,并承担数据库、动态网页等服务是完全没有问题的。
首先是准备FreeBSD的安装盘。FreeBSD有许多种安装方式,最简单易行的方式就是使用光盘安装;不过尽管如此,在没有软驱、光驱的计算机上也是可以通过BOOTP服务采用远程引导的方式来安装的。考虑到这种情况比较少见(笔者曾经在一台没有软驱、光驱的计算机上成功安装过FreeBSD,但方法是将硬盘挂接在另一台计算机上,而不是通常的BOOTP),在此不介绍。
为了安装FreeBSD,我准备了一张空的CD-R。安装 FreeBSD最少只需要2张1.44MB的空白软盘(其余文件使用FTP获得),而安装FreeBSD只需要第一张光盘就够了。除非你的计算机很慢,或无法接入Internet,否则一般情况只需要下载第一张光盘的镜像。由于网络中心的FTP上提供了FreeBSD 4.6全部四张光盘的镜像,以及4.6.2的前两张光盘,因此我直接下载并刻了后者的第一张光盘。
打开计算机,进入BIOS Setup。在其中选择让计算机从光盘启动(这是关键步骤,虽然FreeBSD也可以从DOS环境中启动安装过程,但那可能会有一些问题)、禁用一切用不到的设备,包括串口、并口、软驱控制器(这么做主要是为了提高性能,因为外围设备可能会向主机发送中断请求,而用不到的设备发送请求除了浪费CPU的时间之外没有什么其他作用)。
FreeBSD安装光盘上的系统使用的是GENERIC内核,这个内核可以适应绝大多数系统的情况。当然,正如他的名字“GENERIC(通用)”,这也带来的较低的性能,例如,这个内核不能够发挥双CPU的能力,等等。不过既然安装过程只会进行一次,我们也不必过分地在意它。
安装光盘启动(对于软盘启动来说,是根据提示将两张软盘的内容全部加载到内存中)完成后,首先出现的是配置内核。
配置内核通常不是必需的,因为FreeBSD能够自动识别硬件。然而,如果你的硬件配置比较特殊(例如,有两块网卡,使用特殊的IRQ,比较古老,等等),那么可能需要手工配置一下内核。对于绝大多数情况来说,只要删除那些用不到的设备,就能够正常完成FreeBSD的安装;如果你对于自己的硬件不熟悉,这一过程甚至可以跳过。
我个人比较喜欢删除不用的设备,于是选择Visual方式,将不需要的设备统统删除。最后,按Q保存配置,进入FreeBSD的安装程序sysinstall(8)。
FreeBSD基本系统的安装
作为一个服务器管理员,经常性的服务器软件更新是必不可少的。FreeBSD提供了非常便捷的升级方式——cvsup,它可以从FreeBSD中央 cvsup服务器,或某个cvsup镜像上获取FreeBSD的部分或全部源代码,而且,它只下载那些修改过的源代码,并且可以根据需要选择适合你的版本 (使用-STABLE可以提供较好的稳定性以及操作系统的最新特性,多数管理员都会选择这个;使用-RELEASE能够获得成熟产品的品质,尽管话是这样说,但实际上选择这一分支的人很少;使用-CURRENT的用户主要是参与FreeBSD开发的人员,这个分支包含了所有即将进入-STABLE分支的新特性,但不要指望这个分支能够提供必要的稳定性保证,也不要指望它能够带来很好的性能,但所有的安全问题都是首先在这个分支内修正的。我将在后面详细介绍这些)。
一旦最初的内核配置完成,它就会立即启动,并根据配置文件启动sysinstall(8)。我们将看到一个标准的文字模式配置界面,这有点类似于早期Visual Basic For MS-DOS编写的应用程序的界面。
选择Standard进入标准的FreeBSD安装过程。首先是对磁盘进行分区。
FreeBSD对于磁盘的管理和Windows有比较大的差别。一个磁盘上通常有一个Partition就够了,而一个Partition又可以分成若干个slice,并加以标记(label)。实际上,FreeBSD的slice基本上可以等同于Windows的磁盘分区,或卷的概念。
为了保证与FreeBSD共存的系统能够启动,默认情况下FreeBSD会保留一部分磁盘空间(64 cyl)。对于单一操作系统的计算机来说,这是完全没有必要的。分区时按Shift+F可以选择不使用这个特性,不过这种情况下,除了彻底毁掉这套 FreeBSD之外,恐怕就没有其他方法能够从这块硬盘上引导其他操作系统了。为了完全使用磁盘空间,我选择了不保留预留空间。
随后是在这个Partition上创建slice。和Linux的情况类似,FreeBSD也使用单独的交换区。这种设计可以避免碎片,也防止了对文件系统的影响,性能较好。通常情况下交换分区是内存的2-2.5倍,这足以应付日常的突发事件。/var用于保存那些不在集群中共享的文件,/tmp用来保存临时文件,而/usr用来保存那些需要在集群中同步的文件。/就不用说了,它保存的是启动系统需要的文件。
通常给/分配的空间是 128MB,/tmp和/var各256MB,剩下的都分给/usr。不过也有例外,如果打算做一个大型的邮件系统,则/var要大一些(通常邮件系统依赖/var来保存邮件)。当然,各个slice可以mount到不同的地方(例如,你可以把曾经的/usr变成/var),不过最开始配置好可以减少很多麻烦。
当然,偷懒的方法也是有的。在没有slice,或没有完全配完slice的情况下按A,系统会给出一组(或对剩下的label)默认的配置。如果你打算单纯提供Web+数据库这样的服务,完全可以直接接受这组配置。
从FreeBSD 4.x开始,ufs支持了一个叫做SoftUpdates的技术。SoftUpdates的主要设计目标是提高文件系统性能。除了/所在的slice之外,所有的ufs slice都应打开SoftUpdates,这样对于提高系统整体性能很有好处。(/虽然也是ufs slice,但打开SoftUpdates会造成系统不稳定——FreeBSD文档如此警告,而笔者确实也吃过这个亏。不过,由于/的内容不需要经常变化,不打开SoftUpdates和打开了SoftUpdates几乎没有性能上的差别) 。SoftUpdates可以随时通过tunefs(8)来打开或关闭。在label(8)程序中,打开SoftUpdates的标志是文件系统显示为 ufs+s。
之后是选择安装介质和要装的Distribution。它提供了几组常见的情况。Minium安装最小系统,包括一些基本的Unix程序。Developer包括了一些开发工具;X-Developer和Kernel-Developer分别是X和内核开发人员用的。此外还有可选的ports,它可以帮助我们来安装应用程序。
我通常使用的是Custom(定制安装),不安装源代码、ports(因为这些可以从 cvsup同步得到最新的,安装一遍浪费时间),只安装XFree86(主要是为了运行cvsup,因为编译不需要X的cvsup需要很长时间,而且很多其他的东西,如php要用到的gd等等,需要XFree86的库文件的支持)、基本系统以及一部分库文件。当然,您也可以根据需要选择安装其他组件。
完成之后系统就开始安装了。注意,一旦安装开始,所有前面做的分区、建立文件系统等操作就结结实实地写到了硬盘上,再没有反悔的机会了。如果您的硬盘上包含重要数据,那么请在这之前备份。
根据计算机速度的不同,这个过程可能持续10分钟到数小时不等。在此过程中,除了光盘或硬盘出问题之外,基本上不会出现节外生枝的情况。按Alt+F2 可以切换到用于调试sysinstall(8)的控制台,Alt+F4可以切换到一个命令行控制台,这些都是调试FreeBSD安装过程,或应付紧急情况的,通常用不到。
全部系统文件安装完成之后,sysinstall(8)会给出一个祝贺画面。同时,它也告诉你如何在以后运行sysinstall(8)进行其他操作,如配置等等。实际上,在FreeBSD中sysinstall(8)基本上相当于Windows控制面板的作用。
随后可以根据自己的情况配置网络、设置时区、显示字体、XWindow等等,并且创建新的用户(FreeBSD中的内建管理员叫做root,但由于它拥有一切特权,因此完全靠它来做日常工作有时会不太方便,笔者自己就曾不慎以root身分删除了modules,然后战战兢兢地重新编译内核)。
FreeBSD安装盘上还提供了一些packages。这些packages是预先遍一号的应用程序。对于一台拥有很好的Internet连接的、速度足够快的机器来说,并不需要安装packages(KDE和X除外,编译它们各需要花上一天一夜的功夫)。这台机器速度还称不上“足够快”,所以我安装了 cvsup,它在devel中。
到目前为止,我们已经安装了FreeBSD的基本系统。由于FreeBSD基本系统中包括很多库文件,并且,这些库文件可能已经被发现存在问题,因此现在立刻安装应用程序或服务(如Apache等等)是不合适的。此后我们将讲解FreeBSD的在线升级 (cvsup)、应用程序的安装,以及优化。
更新FreeBSD
完成了安装、配置,FreeBSD基本上就算装完了。不过,目前为止没有哪个通用操作系统能够保证“bug-free”,FreeBSD也一样。在重新启动之后,我们需要做一些调整;并且,通过重新配置内核,我们可以得到一个更小、更快的操作系统。
第一步要做的是同步源代码。FreeBSD是一套开放源代码的操作系统,它的全部源代码都可以通过cvsup与中央cvsup服务器,或它的某个镜像同步。
cvsup是一个可选的package,同样的,它也可以从ports里面安装(/usr/ports/devel/cvsup和 /usr/ports/devel/cvsup-nogui)。考虑到许多应用程序都依赖X的库文件,在前面安装的部分我安装了它,并且直接安装了 cvsup的package。不过,如果你有足够的耐心去一个一个地make需要的ports,那么先安装ports collection,然后make cvsup-nogui也是一个不错的主意,尽管这需要比较长的时间。
创建一个用于cvsup(1)的supfile,命名为stable-supfile:
(default host中选定的cvsup服务器——ftp.bjpu.edu.cn对访问的IP进行了限制,笔者只在北京工业大学校内使用过,因此如果您无法连接这个服务器,请尝试www.cn.freebsd.org,或cvsup.freebsd.org)
*default host=ftp.bjpu.edu.cn
*default base=/usr
*default prefix=/usr
*default release=cvs tag=RELENG_4
*default delete use-rel-suffix
src-all
ports-all tag=.
随后执行
cvsup -g -L 2 stable-supfile
这里需要稍微解释一下FreeBSD的几种版本。
FreeBSD包括3类分支:-RELEASE,-STABLE和-CURRENT。FreeBSD 3.x、4.x和5.0是目前受到维护的版本,如果你期待稳定运行,那么,可以选择的最新版本将是FreeBSD 4.6-STABLE(如果你是在4.6.2-RELEASE发行之后更新的,那么它实际上比4.6.2-RELEASE新,并且,它正式的CVS tag是RELENG_4,即FreeBSD 4-STABLE)。
那么,三类分支有什么区别呢?
FreeBSD的开发是非常活跃的。系统中可能会随时引入一些新的特性。最新的代码是在-CURRENT分支中引入的。-CURRENT的修改非常频繁,每天都可能有数百处修改。使用-CURRENT分支的FreeBSD需要耐心和勇气,因为你的系统随时可能崩溃(随着FreeBSD 5.0开发尾声的接近,这种现象已经越来越少),make world也可能空手而归(没有人保证-CURRENT分支能够正常编译),此外,这个分支的性能也不好(因为调试的原因,这个分支引入了大量的调试选项,这意味着运行速度不会太快)。当然,正像它的名字那样,-CURRENT分支的版本也是最新的5.0,而且,一切FreeBSD的错误和漏洞的修正都是首先在-CURRENT分支引入的。目前,-CURRENT分支硕果仅存的只有FreeBSD 5-CURRENT(指定cvs tag时写“.”),这个分支包括了FreeBSD 5.0开发的最新进展。
FreeBSD 5中将引入大量的新特性,包括核心级线程(目前FreeBSD中的线程支持仅限于用户级线程,这在多处理器的环境下性能不够好,当然,目前使用fork ()来支持的多进程线程模拟能够提供类似核心级线程的功能,但并不是所有的程序员都知道如何使用fork)、完整的Soft Updates(这一变化将提供更好的文件系统性能,同时提供更好的稳定性),等等。如果你有快速的Internet连接,一台或一些空余的机器(当然,不是生产用的服务器),并且希望为FreeBSD的开发作贡献,或者你关心操作系统的最新发展,那么,-CURRENT分支是最好的选择。
此外,由于-CURRENT分支性能不好、稳定性不够等这些缺点,对于生产的服务器来说,通常运行的应该是FreeBSD-STABLE。如同它的名字那样,FreeBSD-STABLE的目的是“稳定地运行”。-CURRENT分支中的代码,在经过一段时间(通常是7到90天,但安全更新属于特例,通常会在几个小时)的验证之后,符合版本条件(有些新特性只能用于FreeBSD 5.0)的代码会被FreeBSD-STABLE吸收,这个操作称作MFC(Merge From -CURRENT,不是Microsoft Foundation Classes:P)。
由于FreeBSD 5.0的第一个RELEASE至今仍然没有发布,因此,目前还没有5.0-STABLE。目前,FreeBSD-STABLE有两个版本,FreeBSD 3-STABLE和FreeBSD 4-STABLE,分别对应3.x和4.x的最新稳定版代码(对应的cvs tag分别是RELENG_3和RELENG_4)。由于版本的更新换代,其中3.x的-STABLE正在逐渐消亡。FreeBSD-STABLE每天平均会修改10个左右的文件。
每隔一段时间,FreeBSD的发行工程组(Release Engineering Team)会对FreeBSD-STABLE的源代码树进行锁定。这段时间(目前的规定是30天,之前还有30天准备)内,所有的MFC操作都需要发行工程组的批准,因此,FreeBSD-STABLE在这个阶段基本不会引入任何新的特性。经过这段时间之后,发行工程组会在最后锁定ports树,并 build一份所有的package,之后,这份锁定的-STABLE,可能经过若干RC(Release Candidate),被命名为RELEASE,并制作光盘发行。
顾名思义,-RELEASE的设计目标是“发行”。一个版本一旦 RELEASE,那么他的功能就不会再增加了。此后的所有维护的目标都只有一个,那就是绝对稳定。如果你和-RELEASE分支同步,那么绝不会出现 make无法通过的情况,而且,通常这也可以保证你的系统“绝对”稳定,因为它不会引入任何新功能(例如,4.6就是4.6,如果你想要4.6.2的功能,必须明确地指定4.6.2)。
目前,FreeBSD有很多RELEASE版本,它们的cvs tag如下。我个人建议使用最新的4.6.2-RELEASE。
对于多数人来说,-RELEASE是一个比较极端的选择。无论何时出现版本升级,如果你想跟进,那都必须修改supfile,如果你选择不跟进,那么就可能造成ports工作异常。如果经常更新,-RELEASE可以保证操作系统本身的安全性,但同其他分支一样,如果ports出了问题,那么也得一块 make,而既然这样,还不如使用-STABLE。
如果你符合下面的条件,那么RELEASE分支可能比-STABLE分支更适合你
你使用的软件对于操作系统的变化非常敏感,比如,它只能FreeBSD 4.5,而无法在4.6上运行;同时,你不打算采用它的更新版本,或者它的作者拒绝更新
操作系统的更新对于你来说没有任何意义,比如,你打算把FreeBSD当作一个相对固定的嵌入式操作系统来使用,例如,作为防火墙的一部分
更新会对你造成困扰,操作系统的绝大多数新特性对于你来说除了增加烦恼之外,不能带来任何其他东西。
-并且,符合以下的全部条件-
你每天察看FreeBSD,以及使用的全部软件的安全公告
你的Internet连接比较通畅
目前我本人维护的所有主机,除了作为防火墙的那台之外,使用的都是FreeBSD-STABLE。
一旦同步完源代码,就应该对整个系统进行更新。如果你没有每天察看安全公告的习惯,那就应该关心一下cvsup到底更新了哪些代码。nectar是目前 FreeBSD的Security Officer。如果你发现他一下子更新了许多代码,那么对你来说立即make world和kernel很可能是必需的。
为了更新整个系统,在/usr/src中执行
make world
以及
make kernel KERNCONF=内核配置文件名
当然,也可以连起来执行:
make world kernel KERNCONF=内核配置文件名
如果你的计算机运行速度较慢,那么,对于基本系统的更新(相当于不包括库的一次world),可以用
make most
替代make world,但make world是一个不错的主意,因为它能够保证对C运行环境的改变应用到所有的程序中,如果修正的不是动态连接的C函数库,那么make world可以保证代码的一致性。
make kernel是一个需要重新启动的操作。如果你的make world修改了系统的关键服务,那么最好也重新启动一下。我很少有耐心看完make world和kernel的执行,根据系统的运行速度不同,这需要一个小时到一天的时间,而且,不是所有的SSH客户端都能够长时间正确的执行,例如, SecureCRT的多个版本都有内存泄漏问题。
为了解决这个问题,我用下面的命令来完成更新:
make world kernel KERNCONF=内核配置文件名 clean > /var/log/world,out && reboot &
这个命令能够记录更新的全过程,如果在什么地方编译失败,你可以很快地找到原因。对于多数人来说,由于后面的&&,只需要察看uptime就能知道便以是否成功。
需要说明的是,FreeBSD的make world并不总能成功。有时需要修改一些环境变量才能成功完成make。为了保证make成功,在/usr/src中执行任何make操作之前,建议你看一眼UPDATING中是否有特殊的要求(这种要求并不是在FreeBSD Release的时候才会出现,很多时候他会在某个CURRENT中引入,然后随着MFC进入-STABLE分支),并且,在进行大的版本升级之前(跨 RELEASE,甚至主版本号),首先执行下面的命令
mergemaster -p
并在make world之后执行
mergemaster -i
运行mergemaster脚本需要一定的Unix配置知识,不过,由于配置文件中包含很多帮助信息,因此,只要master.passwd、 group这样的文件不出大问题(如果cvsup更新了master.passwd,那么就需要留神,因为master.passwd标准配置是root 口令为空,这时需要用m来合并,而不是使用i安装),mergemaster并不会引入什么新的问题。
前一条命令是更新make的配置(/etc/defaults/make.conf和/etc/make.conf)。对于多数人来说,除非进行跨版本升级,否则一般情况下是不需要这样做的。后一条命令是同步全部配置,并安装以前不存在的配置文件,而不进行提示。
笔者曾经遇到过FreeBSD因为系统日期不正确而无法make的情况,因此,再次特别提醒大家,如果你的系统日期不正确,最好是用date命令修改一下,或者干脆用ntpdate或ntpd来同步时间。关于如何使用ntp,将在以后说明。
以后我们将讲解FreeBSD内核的配置,以及如何配置make.conf来优化FreeBSD的编译结果。
“简单的东西不容易出问题。”
至理名言!事实上,削减操作系统中那些对你没用的功能是一件非常重要的事情。这不仅仅意味着一个更小的操作系统,占用更少的磁盘空间(现在的硬盘少说也有几十GB,几兆的空间根本就是九牛一毛),而且意味着你被攻击的可能性也更低——简而言之,你不需要担心操作系统中没有安装的模块存在问题会对你造成影响。
这篇文章中,我们将一起对FreeBSD-i386的内核进行优化配置。这篇文章是针对FreeBSD4.7-STABLE写的,并且,FreeBSD 4.x的配置不会和这篇文章有太大出入。如果你要优化FreeBSD 5或FreeBSD 2/3的内核的话,则需要仔细参考它们的LINT文件了(后面将会提到)。
[注意:FreeBSD 5.0预定将于2002年11月20日发布。FreeBSD的开发组非常重视发行版本的质量,并认为这比发行版本的计划还重要,但由于同样的原因,我们往往会发现FreeBSD实际发行的版本比预定计划晚一些,通常在半个月之内。FreeBSD 5.0作为FreeBSD近期最为重要的发行版本,很可能也会延后发表,但笔者个人认为无论如何我们在今年年底之前肯定是可以看到最终的发行版本的。 FreeBSD 5.0对系统进行了大量的修改,这一系列的文章将在FreeBSD 5.0发布当天发表针对5.0的修订版本,而现有版本将保留,但进入维护阶段,不再引入新的内容。]
FreeBSD的源代码可以直接从中央cvsup服务器同步,也可以作为系统的一部分在安装的时候一兵装上。前面已经说过如何同步源代码,在此不再赘述。FreeBSD的源代码(通常在 /usr/src)包含建造基本系统的全部代码,而在/usr/src/sys中则有若干个目录,对应不同的计算机体系结构(4.x只支持i386和 alpha)。i386是一个泛指的名字,包含了与Intel 80386兼容的所有机器,并不是特指80386。
简单介绍一下 FreeBSD的内核文件。在4.x系统中,/kernel这个文件是默认的内核,通常正常启动使用的就是它。 /kernel.GENERIC这个文件是兼容性较强的内核,如果/kernel无法引导系统,就得靠这个文件来引导。/kernel.old是本次make kernel之前的内核,通常如果你的kernel坏掉,也可以考虑使用/kernel.old来引导系统。
/modules/是内核的模块,而/modules.old/是对应/kernel.old的模块。这些文件在每次替换kernel的时候都会同时替换。
在5.0中,内核以及内核的模块都被保存在/boot/kernel中。
在/usr/src/sys/i386/conf中有两个配置文件,GENERIC和LINT。其中GENERIC是make kernel的默认配置文件,直接make kernel生成的是GENERIC内核,但安装时命名为/kernel。系统在安装时会安装一个kernel.GENERIC,以后,这个文件不会跟随系统的make kernel更新,因此,如果你认为这个文件有必要更新的话,需要手工make kernel,并把/kernel改名为kernel.GENERIC。当然,通常并不需要这样做。
LINT是包括几乎所有内核编译配置详细信息的文件。这个配置并不是用来真正建立kernel的,他的主要用途是向用户展示可用的内核编译配置。在修改内核编译配置时,最好先参考这个文件。
为了配置自己的内核,应将GENERIC复制为一个另外的文件。习惯上这个文件和主机名相同。例如,我把自己的这台Web机器命名为apache.intranet.frontfree.net,就把配置文件命名为APACHE:
cd /usr/src/sys/i386/conf
cp GENERIC APACHE
随后,用ee APACHE编辑它。我们拿一个实际的GENERIC文件来说明。
为了节省篇幅,这个文件头上的注释被删掉了一部分。
machine i386 # 体系模型为i386
cpu I386_CPU # 支持80386
cpu I486_CPU # 支持80486
cpu I586_CPU # 支持Pentium
cpu I686_CPU # 支持Pentium Pro以及更高
ident GENERIC # 内核文件的名字
maxusers 0 # 自动检测同时允许的最大用户数
#makeoptions DEBUG=-g # 包含调试符号。通常只有current版本打开
options MATH_EMULATE #支持协处理器模拟
options INET #支持互联网
options INET6 #IPv6通讯协议
options FFS #伯克利快速文件系统
options FFS_ROOT #FFS作为根设备[必须保留]
options SOFTUPDATES #打开FFS soft updates支持
options UFS_DIRHASH #提高大型目录的支持
options MFS #内存文件系统
options MD_ROOT #MD作为根设备
options NFS #Network Filesystem
options NFS_ROOT #NFS作为根设备(需要NFS)
options MSDOSFS #MSDOS文件系统
options CD9660 #ISO 9660文件系统(光盘)
options CD9660_ROOT #CD-ROM作为根设备(需要CD9660)
options PROCFS #进程文件系统
options COMPAT_43 #兼容4.3BSD[必须保留]
options SCSI_DELAY=15000 #检测SCSI设备前的延时(ms)
options UCONSOLE #用户可以夺取控制台
options USERCONFIG #boot -c编辑器 editor
options VISUAL_USERCONFIG #菜单式boot -c编辑器
options KTRACE #ktrace(1)支持
options SYSVSHM #SYSV-风格的共享内存
options SYSVMSG #SYSV-风格的消息队列
options SYSVSEM #SYSV-风格的信号量(semaphores)
options P1003_1B #Posix P1003_1B实时扩展
options _KPOSIX_PRIORITY_SCHEDULING
options ICMP_BANDLIM #对恶意ICMP请求进行限制
options KBD_INSTALL_CDEV # 在/dev安装一个CDEV设备
# 下面两项在制作对称多处理器(SMP)内核时需要
#options SMP #对称多处理器内核
#options APIC_IO #对称(APIC) I/O
device isa
device eisa
device pci
# 软驱
device fdc0 at isa? port IO_FD1 irq 6 drq 2
device fd0 at fdc0 drive 0
device fd1 at fdc0 drive 1
#
# 如果使用东芝Libretto以及他的Y-E Y-E Data PCMCIA软驱
# 不要使用上面的fdc0,而应使用
#device fdc0
# ATA以及ATAPI设备
device ata0 at isa? port IO_WD1 irq 14
device ata1 at isa? port IO_WD2 irq 15
device ata
device atadisk # ATA 磁盘驱动器(IDE硬盘)
device atapicd # ATAPI 光驱
device atapifd # ATAPI 软驱
device atapist # ATAPI 磁带机
options ATA_STATIC_ID #静态设备编号
# SCSI控制器
device ahb # EISA AHA1742 family
device ahc # AHA2940 板载AIC7xxx设备
device amd # AMD 53C974 (Tekram DC-390(T))
device isp # Qlogic family
device ncr # NCR/Symbios Logic
device sym # NCR/Symbios Logic (较新的芯片组)
options SYM_SETUP_LP_PROBE_MAP=0x40
# 使用ncr可以在配置了sym和ncr的情况下挂接旧的NCR设备
device adv0 at isa?
device adw
device bt0 at isa?
device aha0 at isa?
device aic0 at isa?
device ncv # NCR 53C500
device nsp # Workbit Ninja SCSI-3
device stg # TMC 18C30/18C50
# SCSI 外设
device scbus # SCSI 总线(如果使用SCSI设备,必须有)
device da # Direct Access (硬盘)
device sa # Sequential Access (磁带,等等)
device cd # CD
device pass # Passthrough device (直接 SCSI 访问)
# 通过SCSI子系统接口的RAID控制器
device asr # DPT SmartRAID V, VI and Adaptec SCSI RAID
device dpt # DPT Smartcache - See LINT for options!
device iir # Intel Integrated RAID
device mly # Mylex AcceleRAID/eXtremeRAID
device ciss # Compaq SmartRAID 5* series
# RAID控制器
device aac # Adaptec FSA RAID, Dell PERC2/PERC3
device aacp # SCSI passthrough for aac (requires CAM)
device ida # Compaq Smart RAID
device amr # AMI MegaRAID
device mlx # Mylex DAC960 family
device twe # 3ware Escalade
# atkbdc0 控制键盘和PS/2鼠标
device atkbdc0 at isa? port IO_KBD
device atkbd0 at atkbdc? irq 1 flags 0x1
device psm0 at atkbdc? irq 12
device vga0 at isa?
# 启动画面和屏幕保护程序
pseudo-device splash
# syscons 是默认的控制台驱动,类似SCO控制台
device sc0 at isa? flags 0x100
# 对于pcvt vt220控制台,启用这个和PCVT_FREEBSD
#device vt0 at isa?
#options XSERVER # 在vt控制台支持X服务器
#options FAT_CURSOR # 使用大光标
# 如果你是用ThinkPad,将下面的一行和其他PCVT相关设备的注释去掉
#options PCVT_SCANSET=2 # IBM使用非标准键盘
# 浮点运算支持 - 请勿禁用
device npx0 at nexus? port IO_NPX irq 13
# 电源管理支持
device apm0 at nexus? disable flags 0x20 # Advanced Power Management
# PCCARD (PCMCIA) 支持
device card
device pcic0 at isa? irq 0 port 0x3e0 iomem 0xd0000
device pcic1 at isa? irq 0 port 0x3e2 iomem 0xd4000 disable
# 串口(COM)
device sio0 at isa? port IO_COM1 flags 0x10 irq 4
device sio1 at isa? port IO_COM2 irq 3
device sio2 at isa? disable port IO_COM3 irq 5
device sio3 at isa? disable port IO_COM4 irq 9
# 并口
device ppc0 at isa? irq 7
device ppbus # 并口总线 (所有并口设备都需要)
device lpt # 打印机
device plip # 并口TCP/IP
device ppi # 并口接口设备
#device vpo # 需要scbus和da
# PCI 以太网适配器
device de # DEC/Intel DC21x4x (``Tulip'')
device em # Intel PRO/1000 adapter Gigabit Ethernet Card (``Wiseman'')
device txp # 3Com 3cR990 (``Typhoon'')
device vx # 3Com 3c590, 3c595 (``Vortex'')
# 使用公共的MII总线控制器代码的PCI以太网适配器
# 注意:一定要保留'device miibus'以确保可用
device miibus # MII总线支持
device dc # DEC/Intel 21143 and various workalikes
device fxp # Intel EtherExpress PRO/100B (82557, 82558)
device pcn # AMD Am79C97x PCI 10/100 NICs
device rl # RealTek 8129/8139
device sf # Adaptec AIC-6915 (``Starfire'')
device sis # Silicon Integrated Systems SiS 900/SiS 7016
device ste # Sundance ST201 (D-Link DFE-550TX)
device tl # Texas Instruments ThunderLAN
device tx # SMC EtherPower II (83c170 ``EPIC'')
device vr # VIA Rhine, Rhine II
device wb # Winbond W89C840F
device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')
device bge # Broadcom BCM570x (``Tigon III'')
# ISA以太网适配器
# 'device ed' 需要 'device miibus'
device ed0 at isa? port 0x280 irq 10 iomem 0xd8000
device ex
device ep
device fe0 at isa? port 0x300
# Xircom Ethernet
device xe
# PRISM I IEEE 802.11b wireless NIC.
device awi
# WaveLAN/IEEE 802.11 wireless NICs. Note: the WaveLAN/IEEE really
# exists only as a PCMCIA device, so there is no ISA attachment needed
# and resources will always be dynamically assigned by the pccard code.
device wi
# Aironet 4500/4800 802.11 wireless NICs. Note: the declaration below will
# work for PCMCIA and PCI cards, as well as ISA cards set to ISA PnP
# mode (the factory default). If you set the switches on your ISA
# card for a manually chosen I/O address and IRQ, you must specify
# those parameters here.
device an
# The probe order of these is presently determined by i386/isa/isa_compat.c.
device ie0 at isa? port 0x300 irq 10 iomem 0xd0000
#device le0 at isa? port 0x300 irq 5 iomem 0xd0000
device lnc0 at isa? port 0x280 irq 10 drq 0
device cs0 at isa? port 0x300
device sn0 at isa? port 0x300 irq 10
# 伪设备 - 数字表示分配多少个
pseudo-device loop # 环回网络
pseudo-device ether # 以太网支持
pseudo-device sl 1 # 核心级SLIP
pseudo-device ppp 1 # 核心级PPP
pseudo-device tun # 数据包隧道
pseudo-device pty # 伪-tty(telnet等等)
pseudo-device md # 内存虚拟盘
pseudo-device gif # IPv6和IPv4隧道
pseudo-device faith 1 # IPv6-to-IPv4转发(翻译)
# `bpf'伪设备将启用伯克利数据包过滤器。
# 小心由此带来的管理问题
pseudo-device bpf #Berkeley packet filter
# USB支持
device uhci # UHCI PCI->USB interface
device ohci # OHCI PCI->USB interface
device usb # USB Bus (required)
device ugen # Generic
device uhid # "Human Interface Devices"
device ukbd # Keyboard
device ulpt # Printer
device umass # Disks/Mass storage - Requires scbus and da
device ums # Mouse
device uscanner # Scanners
device urio # Diamond Rio MP3 Player
# USB 以太网,需要mii
device aue # ADMtek USB ethernet
device cue # CATC USB ethernet
device kue # Kawasaki LSI USB ethernet
现在要做的是去掉我们不需要的任何设备。(红色、中划线表示删除,红色无修饰表示修改,蓝色表示增加)。这份配置是生产服务器上的配置文件。
LINT中对于配置有更详细的说明。由于时间关系,这里不给出LINT的完整翻译。对于常用的LINT配置(蓝色,但被注释的部分),我做了一点说明。
需要说明的是,我个人的经验,在较旧的AMD处理器上运行FreeBSD服务器不是一个明智的选择。我个人的经验是,在K6上运行FreeBSD,只要 CPU占用超过98%,系统就会死机。这可能是由于FreeBSD的设计过分地挖掘了系统的性能(按FreeBSD.org自己的说法,榨干服务器的每一滴油:),旧的AMD处理器可能会吃不消;但我在双AMD Athlon MP 1900+上运行FreeBSD没有出现类似的情况。与AMD不同,在Intel的全系列处理器上(包括存在F00F bug的Pentium处理器,486,Pentium-III, Pentium 4, Celeron-II 667等等)我从未遇到过任何问题。
这台服务器的网卡使用的是Realtek-8139芯片,这样的网卡在市场上非常常见。为了确认你的网卡型号,请运行ifconfig(8)。
编辑完配置文件,是用下面的命令编译、安装内核:
cd /usr/src
make kernel KERNCONF=APACHE
注意,实际应用中,请将APACHE换成你自己的配置文件名。
重新编译内核需要重新启动系统才能够生效。
上面的配置文件是我根据LINT以及经验编写的配置文件,其编写目标在于尽可能避免不必要的代码,尽可能高效,尽可能安全,并且,在崩溃(注意, FreeBSD事实上很少会崩溃,我管理的FreeBSD机器的崩溃原因目前为止只有硬件故障或停电)之后尽可能快地恢复。(FreeBSD4.x目前还不支持后台fsck,因此启用softupdates只是改善运行性能和文件系统可靠性,而不保证重新启动速度的提高)
由于在内核中屏蔽掉了大量的设备,因此,休想以这个内核启动去操作软盘或光盘,或者使用并口,以及SCSI设备(虽然这可能不是你想要的)。此外,这个内核在没有 root允许的情况下,是不能在控制台上按Ctrl+Alt+Del启动的。如果你希望其他工作人员在停电(总之,或类似肯定引起系统关机的情况)之前能够帮助你关闭系统,你可能需要其他方法,比如告诉他root口令(假如那个人可以信任),sudo(比较好的方法,只允许他做reboot),或者去掉禁用Ctrl+Alt+Del的设置。此外,经过这样处理的内核只支持Realtek-8139芯片的网卡,因此,如果你的情况和我不同,应该做适当的修改。 如果您对这个配置有什么建议,欢迎给我写信。
如此编译的内核大约是GENERIC内核大小的一半,当然,由于节省了一些内存,它的性能肯定会更好。
# $OpenBSD: sshd_config,v 1.72 2005/07/25 11:59:40 markus Exp $
# $FreeBSD: src/crypto/openssh/sshd_config,v 1.42.2.1 2005/09/11 16:50:35 des Exp $
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options change a
# default value.
# Note that some of FreeBSD's defaults differ from OpenBSD's, and
# FreeBSD has a few additional options.
#VersionAddendum FreeBSD-20050903
Port 22
Protocol 2
AddressFamily any
ListenAddress 172.16.8.95
#ListenAddress ::
#HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
#HostKeys for protocol version 2
#HostKey /etc/ssh/ssh_host_dsa_key
# Lifetime and size of ephemeral version 1 server key
#KeyRegenerationInterval 1h
#ServerKeyBits 768
# Logging
# obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
#LogLevel INFO
# Authentication:
#LoginGraceTime 2m
PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys
# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#RhostsRSAAuthentication no
# similar for protocol version 2
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# RhostsRSAAuthentication and HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes
# Change to yes to enable built-in password authentication.
PasswordAuthentication yes
PermitEmptyPasswords yes
UseDNS no
# Change to no to disable PAM authentication
ChallengeResponseAuthentication yes
# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no
# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
# Set this to 'no' to disable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication mechanism.
# Depending on your PAM configuration, this may bypass the setting of
# PasswordAuthentication, PermitEmptyPasswords, and
# "PermitRootLogin without-password". If you just want the PAM account and
# session checks to run without PAM authentication, then enable this but set
# ChallengeResponseAuthentication=no
#UsePAM no
#AllowTcpForwarding yes
#GatewayPorts no
#X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#UsePrivilegeSeparation yes
PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS yes
#PidFile /var/run/sshd.pid
#MaxStartups 10
# no default banner path
#Banner /some/path
# override default of no subsystems
Subsystem sftp /usr/libexec/sftp-server
====================================================================
中文解释:
#服务器端配置 /etc/ssh/sshd_config
#只考虑协议版本2
#全局配置
VersionAddendum TecZm-20050505 #在telnet ip 22时只能看出openssh的版本,看不出OS
Protocol 2 #使用协议版本2
Port 22 #sshd监听22端口
ListenAddress 192.168.7.1 #sshd只监听目标ip为192.168.7.1的请求
AllowGroups wheel myguest #允许wheel组和myguest组的用户登录
AllowUsers teczm authen@192.168.8.5 #允许来自以上组的teczm用户和authen用户登录,
#且authen用户只能从主机192.168.8.5登录
#DenyGroups #拒绝登录的组,参数设置和AllowGroups一样
#DenyUsers #拒绝登录的用户,参数设置和AllowUsers一样
#AllowTcpForwarding yes #是否转发的TCP包都被允许。默认是 ``yes''。
LoginGraceTime 60 #60秒内客户端不能登录即登录超时,sshd切断连接。
KeyRegenerationInterval 1800 #1800秒(30分钟)后自动重新生成服务器的密匙。
MaxStartups 3 #设置同时发生的未验证的并发量,即同时可以有几个
UseDNS no #不使用DNS查询客户端。
PermitRootLogin no #不允许root登录,root可由wheel组用户登录后su。
X11Forwarding no #禁止用户运行远程主机上的X程序,我没有X,所以无所谓。
UseLogin yes #禁止X11Forwarding
#认证配置(口令认证、PAM认证、非对称密钥认证任选其一)
#口令认证
PubkeyAuthentication no #不使用非对称密钥认证
PasswordAuthentication yes #使用口令认证
PermitEmptyPasswords no #不允许使用空密码的用户登录
#非对称密钥认证
PasswordAuthentication no #不使用口令认证
PubkeyAuthentication yes #使用非对称密钥认证
UsePam no #yes的话非对称密钥验证失败,仍然可用口令登录
AuthorizedKeysFile .ssh/authorized_keys #用户认证使用的公钥。
Subsystem sftp /usr/libexec/sftp-server
作者:tahaomei
主页:www.dragonson.org
邮箱:tahaomei@163.com
QQ:4831404
完成时间:2003.8.9
(如果您想转载这篇文章,请不要去掉以上的版权信息,欢迎分享)
刚接触linux是今年4月的事情,装过不少linux发行版本,最终还是选择了unix中的freebsd,喜欢它的简洁。不过我也是初学者,将这10多天学freebsd的经验总结给大家分享,希望大家能够少走当初我的一些弯路。感谢www.chinaunix.net和www.linuxsir.com众多热心的朋友。这两个地方丰富宝贵的资料足够学一辈子。参考了两个论坛的若干帖子,都不记得帖子来源了,以下内容如果没提到作者以及来源,请见谅。
本文档chm格式下载地址:http://www.dragonson.org/jiaocheng/apache/apache.chm
本文档pdf格式下载地址:http://www.dragonson.org/jiaocheng/apache/apache.pdf
本文档网络在线阅读地址:http://www.dragonson.org/jiaocheng/apache/index.html
1. 安装freebsd5.1-minidisk 因为我有两台电脑,打算将实验室那台配置成FREEBSD服务器,然后在宿舍通过SSH远程登陆管理,所以FREEBSD服务器不装X-WINDOWS,选择最小安装盘安装,可以从 http://community.freebsdchina.or ... c=3273&forum=45 下载5.1-RELEASE-i386-miniinst.iso刻录后进行安装,详细安装步骤请参考如下文档 http://community.freebsdchina.or ... c=1772&forum=34 最好买几本书来参考。
推荐如下教材:
(1) FREEBSD使用大全,王波编著,机械工业出版社,75元(附光盘一张)
(2) FREEBSD技术内幕,(美)Michael Urban Brian Tiemann著,机械工业出版社,88元(附光盘两张)
(3) FREEBSD中文手册
PS1='\u@\w$'
alias ls="gnuls --color --show-control-chars"
alias ll="ls -l"
export XMODIFIERS='@im=fcitx'
export LANG=zh_CN.EUC
export LC_CTYPE=zh_CN.EUC
export JAVA_HOME=/usr/local/java
export CLASSPATH=.
指令名称 : chmod
使用权限 : 所有使用者
使用方式 : chmod [-cfvR] [--help] [--version] mode file...
说明 : Linux/Unix 的档案存取权限分为三级 : 档案拥有者、群组、其他。利用 chmod 可以藉以控制档案如何被他人所存取。
把计 :
mode : 权限设定字串,格式如下 : [ugoa...][[+-=][rwxX]...][,...],其中u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。
-c : 若该档案权限确实已经更改,才显示其更改动作
-f : 若该档案权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)
--help : 显示辅助说明
--version : 显示版本
范例 :将档案 file1.txt 设为所有人皆可读取 :
chmod ugo+r file1.txt
chmod a+r file1.txt
将档案 file1.txt 与 file2.txt 设为该档案拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :
chmod ug+w,o-w file1.txt file2.txt
将 ex1.py 设定为只有该档案拥有者可以执行 :
chmod u+x ex1.py
将目前目录下的所有档案与子目录皆设为任何人可读取 :
chmod -R a+r *
此外chmod也可以用数字来表示权限如 chmod 777 file 语法为
chmod abc file
其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。
r=4,w=2,x=1
若要rwx属性则4+2+1=7;
若要rw-属性则4+2=6;
若要r-x属性则4+1=7。
范例:
chmod a=rwx file 和 chmod 777 file 效果相同
chmod ug=rwx,o=x file 和 chmod 771 file 效果相同
若用chmod 4755 filename可使此程式具有root的权限
指令名称 : chown 使用权限 : root
范例 :
将档案 file1.txt 的拥有者设为 users 群体的使用者 jessie :
chown jessie:users file1.txt
将目前目录下的所有档案与子目录的拥有者皆设为 users 群体的使用者 lamport :
chmod -R lamport:users *
-rw------- (600) -- 只有属主有读写权限。
-rw-r--r-- (644) -- 只有属主有读写权限;而属组用户和其他用户只有读权限。
-rwx------ (700) -- 只有属主有读、写、执行权限。
-rwxr-xr-x (755) -- 属主有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
-rwx--x--x (711) -- 属主有读、写、执行权限;而属组用户和其他用户只有执行权限。
-rw-rw-rw- (666) -- 所有用户都有文件读、写权限。这种做法不可取。
-rwxrwxrwx (777) -- 所有用户都有读、写、执行权限。更不可取的做法。
以下是对目录的两个普通设定:
drwx------ (700) - 只有属主可在目录中读、写。
drwxr-xr-x (755) - 所有用户可读该目录,但只有属主才能改变目录中的内容。
suid的代表数字是4,比如4755的结果是-rwsr-xr-x
sgid的代表数字是2,比如6755的结果是-rwsr-sr-x
sticky位代表数字是1,比如7755的结果是-rwsr-sr-t
当然7755这个chmod设置没多大意义
chmod xxxx
四位数是标准写法,在有些语言编程里比如php里0755和755的意义就可能不一样