从零开始快速搭建freebsd应用服务器
关键字:
以freebsd 4.10+vmware为例进行说明
本文档没有对apache,mysql
1。freebsd 的安装
我选择的是最小安装,不装图形界面,port都没安装(千万别鄙视我,虽然port是freebsd的最大特色).只安装了支持linux的那个包,其余全部选否,由于是自己用,我没考虑连到internet上,只是在主机和虚拟机构成的网络中运行,因此vmware选择host-only和nat方式都可以.这个安装估计只要10分钟左右.
安装好后,执行/stand/sysintall启动安装,选择configure-networking,获得ip地址,这样你就获得了ip地址,这个地址就是你做服务器要用到的地址.然后选择configure-packages安装一些后面要用到的包.具体如下:samba,png,gettext,gmake,jpeg,freetype,libiconv,tiff,expat,就这几个包,具体那个包在那个类下,你自己慢慢找就可以了.为什么装samba呢?很明显就是为了和linux主机共享来用的,当然你也可以借助一些工具,如ssh等来进行window和linux之间的文件传输.具体就是修改/etc/ssh/sshd_config文件,把里面PermitRootLogin置为yes就可以了,因为freebsd默认只支持普通用户ssh登录,如果要用root远程登录,必须修改这里.samba安装好后,有几个步骤执行,步骤一:生成配置文件cp /usr/local/etc/smb.conf.default smb.conf ,修改2个地方就可以了.hosts allow,encrypt passwords.如果需要更复杂的配置的,可以用testparm命令来检查配置文件是否正确。步骤二,生成开机启动samba,cp /usr/local/etc/rc.d/samba.sh.sample samba.sh,第三步,添加samba用户,首先我们在系统中添加一个用户,比如lizl,然后用smbpasswd –a lizl,按提示输入用户密码,freebsd默认不会建立/home/lizl目录,我们在根目录下手动建立,并在lizl建立public_html目录(apache中将要提到)的.为了方便使用,我们一般建立网络映射到该目录.这样就能把安装包和程序等传到我的linux主机上了
2.apache的安装
关于apache的安装,强调二点,其一,动态编译apache,这样就可以到后面扩展其模块(比如sqlite库),其二,apache版本的差异,编译选项不同.如下:
apache1版本:
apache2版本:
编译安装完成即可.修改配置文件httpd.conf,修改2个地方就可以了,增加
AddType application/x-httpd-php .php .htm;然后把/home/*/public_html所在的块的前1,2
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
# <Limit GET POST OPTIONS PROPFIND>
# Order allow,deny
# Allow from all
# </Limit>
# <LimitExcept GET POST OPTIONS PROPFIND>
# Order deny,allow
# Deny from all
# </LimitExcept>
</Directory>
配置完后,可以通过/usr/local/apache/bin/apachectl configtest 测试配置文件是否正确。
可以看到,上面的编译中有支持ssl。这需要在安装apache之前安装好openssl和mod_ssl(注意下和你php相一致的版本)
openssl的安装
./config --prefix=/usr/local/openssl
make
make install安装mod_ssl
./configure --with-apache = apache源代码路径 --with-ssl=openssl的源代码路径
#注意这里不需要安装,只要把mod_ssl编译进apache就okay接下来就可以安装apache了。但要注意apache2中才有--with-ssl选项,并且安装前需要执行make certificate 生成证书,然后再make install
3.数据库的安装
(1)mysql安装
我这里使用的是mysql-4.1.13a版本,据说从这个版本开始,mysql的数据库有了比较大的改动,有兴趣的读者可以去研究下。
编译参数说明(具体可用./configure --help|more 查看):
Prefix:安装路径
Sysconfdir:mysql配置文件my.cnf的路径;Cp /usr/local/mysql4/share/mysql/my-medium.cnf /etc/my.cnf
Localstatedir:数据库存放路径
–with-charset:字符支持
–with-isam:支持老的isam类型的表
–with-unix-socket-path:mysql.sock所在位置
mysql常见问题
问题 1:Can’t connect to mysql server through socket ‘/tmp/mysql.sock’
解决:
1.看mysqld是否启用,用top命令查看是否有mysqld进程
2.看/tmp/mysql.sock是否已经存在
3.
添加专用的mysql组和mysql用户修改用户密码:
/usr/local/mysql4/bin/mysqladmin –u root –p password 123456;
问题2:Localhost
解决:
1.如果是mysql 4.1以上版本,mysql-front版本必须用3.2
2.修改mysql数据库中user表中的host为%,允许任何主机访问(自己测试用嘛,安全性先不考虑,呵呵)
问题3:Client does not support authentication protocol requested by server; consider upgrading MySQL client cgi
解决:
1.SET PASSWORD FOR 'root'@'%' = OLD_PASSWORD('123456');
2.UPDATE mysql.user SET Password = OLD_PASSWORD('123456') where host='%' and user='root';flush privileges
(2)Postgresql的安装
注意postgresql需要用gmake编译安装,与我们用的make不同。 (3)Sqlite的安装
由于php4是不支持sqlite3版本的,因此我们需要通过编译扩展模块来安装php对sqlite的支持4.gd库的安装
如果要支持jpgraph库,非要gd2版本以上才行,这里png,jpeg的支持我们在freebsd安装的时候已经装上了,不用再重新下包安装编译完会有提示你xpm library 和font_config(gnome用到的)不可用,不用管它,继续make,这个时候会报错.我们需要编辑gdhelper.h文件,把pthread相关的部分去掉.重新make&& make install就可以了.如果要支持gif图形,可以下载gd-1.8.3-gif.tar.gz相关包安装。
6.编译支持sqlite数据库
我用的是phpize编译,用pear编译没试过,大家自己研究吧这里会提示你需要autoconf包,下载该包安装时编译autoconf时,出现
> checking for m4... /usr/bin/m4
> checking whether m4 supports frozen files... no
> configure: error: GNU M4 1.4 is required
找不到m4,但我的m4确实安装了,不过目录不对,我安装在/usr/local/bin,而freebsd在/usr/bin/下有个默认的m4,是freebsd版本的,不是gnu版本的,于是覆盖安装重新安装m4.下载安装后,发现还是编译不过,因为freebsd自带的m4 在/usr/bin 被先找到,删除该m4,就可以重新安装好autoconf了.
继续配置安装sqlite库这样就在你在php.ini中指定的extensions_dir下no_XXXX下生成sqlite3.so,将该扩展库拷贝到extensions_dir下,并在php.ini中加入
Extensions=sqlite3.so.重启apache后既支持sqlite数据库了.注意对于sqlite3以下的版本,可以不用安装单独安装sqlite2,直接编译扩展库即可,方法为
cd sqlite3-0.4
/usr/local/php4/bin/phpize
cd SQLite-1[1].0.3
/usr/local/php4/bin/phpize
./configure –with-php-config=/usr/local/php4/bin/php-config
其它操作和sqlite3的安装一样
Useradd mysql –g mysql
Chown –R mysql:mysql /usr/local/mysql4
Chown –R mysql:mysql /var/db/mysql4
Gmake
su
gmake install
adduser postgres
mkdir /usr/local/pgsql/data
chown postgres /usr/local/pgsql/
chown postgres /usr/local/pgsql/data
su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
/usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data >logfile 2>&1 &
/usr/local/pgsql/bin/createdb test
/usr/local/pgsql/bin/psql test
./configure –prefix=/usr/local/sqlite3 && make && make install
5.安装php
我用的php版本是4.4.2版本,其它版本没有测试过。注意php.ini默认安装在/usr/local/php4/lib/php.ini下,但可以添加sysconfdir编译选项到你想要的任何位置
'./configure' '--prefix=/usr/local/php4' '--with-apxs=/usr/local/apache/bin/apxs' '--with-mcrypt=/usr/local/libmcrypt' '--with-iconv' '--with-gettext' '--with-mysql=/usr/local/mysql4' '--with-pgsql=/usr/local/pgsql8' '--with-gd=/usr/local/gd2' '--with-jpeg=/usr/local' '--with-png=/usr/local' '--with-zlib' '--enable-mbstring' '--enable-gd-native-tiff' '--with-tiff=/usr/local' '--with-freetype-dir=/usr/local'
初识活动目录
活动目录只能安装装window平台上,并且只能是服务器版。
(1) 活动目录的安装很简单,网上资料很多。我碰到的问题:建立用户时提示”密码不符合系统密码复杂策略”,此时需要到管理工具-》域安全策略=》密码策略中去修改相应的设置。由于是自己测试用,所以一般都是降低安全策略。当然你也可以不改,按默认的规定,有关密码规定可参考:http://support.microsoft.com/kb/279890/zh-cn
(2) 如何从活动目录上获取自己想要的数据
活动目录安装完成后,我们可以看到系统默认有很多组,ou,用户及其机器名等。此外,为了满足自身的要求,管理员也会自定义一些组织和用户等信息。而我们感兴趣的可能仅仅是我们自定义的那些内容,比如组织和用户。
2-1:获取用户的帐号名 ------ 使用samaccountname属性
2-2:获取用户的组织名 ------ 使用dn属性中的ou ,如 cn=tom,ou=computer,dc=lizl,dc=com
2-3:如何区分机器,帐号和组 ------ 使用objectcategory属性的cn(Person:帐号;computer:机器;group:组)
2-4:如何获得帐号的中文名?
2-4-1:新建时没有设定中文名,后面再修改。使用displayname或者sn与givename属性来构成中文名
2-4-2:新建时已经设置了中文名,直接用name属性或者displayname属性获取
经本人验证,活动目录在建立新的用户的时候,必须填入姓(对应givename属性),名(对应sn属性),而全名是自动由这2者构成。添加用户成功后,自动将displayname,cn和name属性设为全名;其中cn和name属性是不能修改的(我没有找到修改的地方,如果有知道的请告知,在此谢过)。我们在修改用户时修改的只是sn,givenname和displayname等属性。因此我们要想获得帐号的中文名,最好是通过displayname来取,而不用name属性。万一没有displayname属性怎么办?事实也确实如此,系统中有些自带的对象所对应的条目的确不存在displayname这样的属性。不用担心,我们可以先通过2-1,2-2,2-3等条件过滤后就可以保证取出的数据都含有displayname属性
奇怪的AD查询限制
出于保护AD免受拒绝服务攻击和过渡搜索的负面性能影响,在返回LDAP搜索结果时,AD默认设置了一个最大不超过1000的限制。可以用ntdsutil进行修改。具体请参见http://blog.csdn.net/myanm/archive/2006/06/22/822068.aspx。(所有版权归原作者所有,偶只是转载)除了AD外,openldap也有类似的限制,可以通过修改配置文件ldap.conf来更改。
此外,如果通过php中自带的ldap函数ldap_set_option来修改此设置,只有当设置的值比AD上设置的数字小时,可以获得想要的结果。当设置的值比AD的值大时,以AD默认的值为主。
DB连接oracle10g数据库
DB是PEAR中的一个包,提供了目前市面上绝大多数数据库的连接层。我的oracle 10g安装在window xp上,因为听说oracle在linux下的安装十分麻烦,当然舍繁求简啦(不过以后有机会还是可以试试)。。一路按照向导安装就可以了,一般都没什么问题。我曾经尝试在freebsd下连接oracle 10g数据库,但屡试屡败,最终放弃。。换成linux系统。。果然一试就灵。
客户端连接oracle数据库大体有2种方法,一种是在安装oracle标准的客户端,这种方法需要配置相关的参数,如oracle_sid等。这种情况在window系统下安装也很简单,但在linux下就没那么轻松了。另外一种是通过安装instant client客户端,这个不需要任何配置相关参数,当然还是要设置几个常见的环境变量以便解决用一些工具连接oracle乱码的问题。因此,我推荐如果是linux客户端,用instant client比较方便而且简单。
首先我们去oracle的官方网站下载instant client客户端,一般来说,和你oracle服务器的版本保持一致,我就用的是
oracle-instantclient-basic-10.2.0.3-1.i386.rpm
oracle-instantclient-devel-10.2.0.3-1.i386.rpm(这个不一定需要,安装也没啥影响)
使用rpm -Uvh安装好这2个包。。
重新编译安装php,使用如下配置命令
'./configure' '--prefix=/usr/local/php4' '--with-apxs2=/usr/local/apache2/bin/apxs' '--with-mcrypt=/usr/local/libmcrypt' '--with-iconv' '--with-gettext' '--with-mysql=/usr/local/mysql4' '--with-zlib' '--enable-mbstring' '--with-oci8-instant-client'
这是最简单的配置,仅仅用来验证连接oracle用的。我用的php版本是4.4.2,因此直接支持--with-oci8-instant-client,不知道php早期的版本支持不支持该编译选项,但早期的版本是支持--with-oci8的。。,php安装好后就可以用phpinfo查看是否支持oci8,见我的
| OCI8 Support | enabled |
| Revision | $Revision: 1.183.2.18.2.3 $ |
| Oracle Version | 10.1 |
| Compile-time ORACLE_HOME | /usr/lib/oracle/10.2.0.3/client/lib |
| Libraries Used | no value |
其中/usr/lib/oracle/10.2.0.3/client/lib就是我们安装上面basic包产生的。
安装完毕后就可以用DB连接oracle数据库了。DB库的具体使用请参考pear.php.net
oracle的dsn为:oci8://username:password@myoracle,用户和密码就不用说了,myoracle是指你的数据库实例名,就和oracle默认的orcl一样,而不是你服务器的ip地址,这个地方我弄错过。。友情提醒一下。。具体调用请看下面调用代码
include_once "DB.php";
$dbconn = DB::connect($dsn, false);
if (DB::isError($dbconn))
exit;
$sql = "select * from v$parameter";
$result = $dbconn->getAll($sql,array(),DB_FETCHMODE_ASSOC);
本来以为这样就可以大功告成了,那知道当sql语句中的字段为小写时居然查不出数据。。。什么地方出毛病了?我开始以为是php少安装了某个库,但仔细查看,我用同样的配置连接mysql都没有任何问题,看来是oracle数据库的问题。。。网上有人通过改oracle的相关配置参数说可以实现大小写兼容。但我试过alert session set 参数=value还是不行。不过大多数人说通过oracle自带的lower和uper函数来实现。我觉得在每个字段加这么一个函数太麻烦。。。。于是在数据库连接层DB上动脑筋,DB提供的getall方法,如果修改一次,不就可以不必每次都加lower和uper函数了吗?于是找到DB/common.php文件,修改其中的getall方法。。将
最后谈下oracle的客户端连接工具的乱码问题。。。我用toad和PL/SQL连接oracle数据库时,中文都出现乱码。。
于是我在linux里设置了以下环境变量
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK" export LC_ALL="simplified chinese" export LANG="simplified chinese"
注意上面=号2边千万不要有空白字符,这可不是写代码的良好习惯的体现。。否则根本就不能正确设置。。我又在这上面栽了半天。。。呵呵。
ok,基本上在linux用php连接oracle数据库就没什么问题了。。。。祝大家好运
使用samba将linux主机加入AD域(一)
研究了2个星期的一点小成,写出来供大家分享。所有功能都在as3下调试通过。为了图方便,as3采用默认安装。
在研究中经常看到下面这些东东,还是先了解下理论依据
PDC:主域控制器,一般用来做验证
BDC:备份域控制器,一般用于和主域做同步帐号等操作
KDC:密钥分发中心,说白了,就是kerbrose服务器。这个需要对kerbrose有一定的了解,这里不多说了
PAM:可插拔认证模块,这玩意就是使用不同的验证方法来验证你所需要的服务,比如sshd,login,ftp等。这些服务都对应一个配置文件,这个配置文件位于/etc/pam.d/下。而支持这些验证的动态库位于/lib/security/下。
SRV:服务器定位资源记录,要使活动目录正常工作,DNS必须支持SRV。活动目录客户端和域控制器使用SRV记录决定域控制器的ip地址,具体请参见http://www.cnblogs.com/LCX/archive/2007/02/05/640843.html
下面言归正传,介绍如何将samba服务器加入到AD域中
(1)配置/etc/samba/smb.conf
workgroup = LIZL # 你要加入的域,比如你AD上建的域叫LIZL.COM,这里只需省略填入即可
# winbind
netbios name = leeldap #你的linux机器名,samba服务器
idmap uid = 15000-20000
idmap gid = 15000-20000
winbind enum groups = yes
winbind enum users = yes
winbind separator = /
; winbind use default domain = yes
template homedir = /home/%D/%U
template shell = /bin/bash
security = domain
password server = 192.168.115.128 #这里是你的安装ad的机器的ip
encrypt passwords = yeshosts allow = 192.168.1. 192.168.2. 127. 192.168.115.
[homes]
comment = Home Directories
path = /home/%D/%U
browseable = no
writable = yes
valid users = %D/%U #这里记得把域名带上,否则你用ad帐号访问samba服务器时输入正确的ad帐号和密码仍然不能访问共享目录create mode = 0777
directory mode = 0777

(2)配置/etc/nsswitch.conf
passwd: files winbind
shadow: files
group: files winbind(3)启用samba和winbind服务。
service smb reload #加这一句是用来解决有时候samba启动不了的问题 service smb start
service winbind start
(4)使用net加入AD域
[root@leeldap pam.d]# net rpc join -S lee -U administrator
Password:
Joined domain LIZL.(5)测试是否加入成功
[root@leeldap pam.d]# net rpc testjoin
Join to 'LIZL' is OK
[root@leeldap pam.d]# wbinfo -t
checking the trust secret via RPC calls succeeded
[root@leeldap pam.d]# wbinfo -u
LIZL/Administrator
LIZL/brown
LIZL/bruce
LIZL/Guest
LIZL/jet
LIZL/krbtgt
LIZL/lee
LIZL/lili
LIZL/lizl
LIZL/samba
LIZL/SUPPORT_388945a0
LIZL/test
[root@leeldap pam.d]# wbinfo -g
BUILTIN/System Operators
BUILTIN/Replicators
BUILTIN/Guests
BUILTIN/Power Users
BUILTIN/Print Operators
BUILTIN/Administrators
BUILTIN/Account Operators
BUILTIN/Backup Operators
BUILTIN/Users
[root@leeldap pam.d]# getent passwd
root:x:0:0:root:/root:/bin/bash
。。。。。。。
LIZL/administrator:x:15000:15000::/home/LIZL/administrator:/bin/bash
LIZL/brown:x:15001:15000:Brown Lee:/home/LIZL/brown:/bin/bash
LIZL/bruce:x:15002:15000:Bruce Lee:/home/LIZL/bruce:/bin/bash
LIZL/guest:x:15003:15000::/home/LIZL/guest:/bin/bash
LIZL/jet:x:15004:15000:Jet Chen:/home/LIZL/jet:/bin/bash
LIZL/krbtgt:x:15005:15000::/home/LIZL/krbtgt:/bin/bash
LIZL/lee:x:15006:15000:Jackie Lee:/home/LIZL/lee:/bin/bash
LIZL/lili:x:15007:15000:lily:/home/LIZL/lili:/bin/bash
LIZL/lizl:x:15008:15000:lizhili:/home/LIZL/lizl:/bin/bash
LIZL/samba:x:15013:15000:samba:/home/LIZL/samba:/bin/bash
LIZL/support_388945a0:x:15009:15000:CN=Microsoft Corporation,L=Redmond,S=Washington,C=US:/home/LIZL/support_388945a0:/bin/bash
LIZL/test:x:15014:15000:test:/home/LIZL/test:/bin/bash
[root@leeldap pam.d]# getent group
root:x:0:root
。。。。。
BUILTIN/System Operators:x:15009:
BUILTIN/Replicators:x:15010:
BUILTIN/Guests:x:15011:
BUILTIN/Power Users:x:15012:
BUILTIN/Print Operators:x:15013:
BUILTIN/Administrators:x:15014:
BUILTIN/Account Operators:x:15015:
BUILTIN/Backup Operators:x:15016:
BUILTIN/Users:x:15017:(5) 现在可以到ad机器上的活动目录中可以看到该机器了
接下来介绍加入AD域后的一个简单应用,要不就不知道这样加有啥子用了。既然samba服务器已经加入AD域中,那自然会想到,window域中的本地帐号是否能访问linux机器呢?答案是肯定的。这就是winbind的作用了,当window域中的本地帐号需要登录linux主机时,winbind服务去ad服务器去验证该帐号是否合法,而不是到linux本地的/etc/passwd中去验证,当然如果要用不同的验证方式,就可以用pam去进行复杂的设定.
(1)确保/etc/samba/smb.conf中配置了passwd server选项,这个折磨过我2天,一定要切记
(2)配置system-auth
auth required /lib/security/$ISA/pam_env.so
auth sufficient /lib/security/$ISA/pam_unix.so likeauth nullok
auth sufficient /lib/security/$ISA/pam_winbind.so use_first_pass
auth required /lib/security/$ISA/pam_deny.so
account required /lib/security/$ISA/pam_unix.so broken_shadow
account [default=bad success=ok user_unknown=ignore] /lib/security/$ISA/pam_winbind.so
account required /lib/security/$ISA/pam_permit.so
password required /lib/security/$ISA/pam_cracklib.so retry=3
password sufficient /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow
password sufficient /lib/security/$ISA/pam_winbind.so use_authok
password required /lib/security/$ISA/pam_deny.so
session required /lib/security/$ISA/pam_limits.so
session required /lib/security/$ISA/pam_unix.so(3)配置sshd,使用ad帐号登录时,自动创建/home/LIZL/ad帐号目录
auth required /lib/security/pam_stack.so service=system-auth
auth required /lib/security/pam_nologin.so
account sufficient /lib/security/pam_winbind.so
account required /lib/security/pam_stack.so service=system-auth
password required /lib/security/pam_stack.so service=system-auth
session required /lib/security/pam_stack.so service=system-auth
session required /lib/security/pam_limits.so
session required /lib/security/pam_mkhomedir.so
session optional /lib/security/pam_console.so
(4)顺便配置下samba这个pam
auth required pam_stack.so service=system-auth
account required pam_stack.so service=system-auth
#session required pam_stack.so service=system-auth
#session required pam_mkhomedir.so skel=/etc/skel umask=0022
#password required pam_stack.so service=system-auth
好了,接下来享受下用ad帐号登录linux主机的快乐吧。。如果要结合samba控制目录访问等权限的话,继续努力研究samba吧。。。
freebsd 基础
1.如何修改其它用户密码?passwd -l lizl。
2.freebsd的密码文件有2个,/etc/passwd 和/etc/master.passwd,同时使用/etc/pwd.db和/etc/spwd.db数据库提高性能。使用vipw可以同步修改这2个文件
3.sh的全局配置文件 /etc/profile,csh的全局配置文件/etc/csh.cshrc,csh.login和csh.logout.
常见shell定义文件 /etc/shells(比如安装bash后需要修改该文件使之生效)
/usr/bin/chsh -s bash 修改当前用户默认的shell为bash,shell的默认配置文件在/usr/share/skel下
~/.bash-history 记录sh历史命令;~/.history记录csh历史命令
4./var/log/下的文件介绍
lastlog 保存每个用户最后一次登录信息
utmp 保存当前系统用户的登录记录 (who,u命令)
wtmp 保存所有登录,退出以及系统启动,关闭等记录 (last,ap命令)
/etc/syslog.conf 配置日志保存目录等信息
5.配置sudo组用户,修改visudo /etc/sudoers
root ALL=(ALL) ALL(用户)
%wheel ALL=(ALL) ALL(组)
6.只有wheel组的用户才能使用su
7./etc/fstab 开机加载的分区(mount,df命令)
/etc/fbtab change device protection upon login
8.检查磁盘命令 /stand/fsck
9.安装向导工具 /stand/sysinstall
10./stand/zcat 查看压缩包文件
11./etc/ttys 记录了所有允许你登录的端口,类似于window中的端口的概念,比如3306端口
12./usr/sbin/kbdcontrol 更改键盘设置 /usr/share/syscons/keymaps
13./usr/sbin/vidcontrol 更改字体设置 /usr/share/syscons/fonts
14./usr/sbin/vidcontrol 更改鼠标设置
15.查看版本信息 uname -v
16./etc/rc.conf 系统启动脚本
17./usr/sbin/tzsetup 设置时区 /usr/share/zoneinfo
18./usr/bin/jobs 查看正在后台运行的进程,fg $1(%1)切换到前台工作,使用ps查找进程号并用kill pid(kill -9 pid)杀死进程
19./usr/sbin/pstat,/usr/bin/vmstat,/usr/bin/systat ,/usr/bin/fstat,/usr/sbin/iostat,/usr/bin/netstat,usr/bin/nfsstat ,/usr/bin/top查看系统状态
20./etc/crontab root的crontab文件 ,crontab -l 查看自己的crontab文件,crontab -e 编辑自己的crontab文件,crontab -r 删除自己的crontab文件
用户自己的crontab文件存放在/var/cron/tabs下( /usr/sbin/cron crontab)
21./var/at/at.allow 和/var/at/at.deny(atrm 删除at作业,atq查看没有执行的at命令)
22.pkg_info 查看所有安装的软件包(pkg_info -a查看详细)pkg_delete删除 pkg_add安装软件包
23./etc/inetd.conf 系统提供的服务,守护进程daemon为wait,非守护进程为nowait
24./etc/services端口定义应用程序类型
25./bin/hostname 设置机器名,/sbin/ifconfig IP地址用默认的掩码设置Ip地址,ifconfig (-a)查看网络信息 ifconfig lnc0 192.168.115.188 alias 设置网络别名ifconfig lnc0 delete 192.168.115.188 删除网络别名
26./sbin/route设置路由。设置默认网关route add default 192.168.115.255 设置静态路由 route add -net 192.168.10.0/24 192.168.1.253 查看路由表
/usr/bin/netstat -r
27./etc/hosts与/etc/resolv.conf计算机名字和ip的转换,/etc/host.conf定义解析的顺序
28./usr/sbin/traceroute 192.168.1.115 跟踪到达地址的所有请求,会产生大量的网络流量,慎用
29./usr/sbin/nslookup http://www.sina.com.cn/ 查找DNS服务器
30.串口设备标示sio1,sio2。光驱标示acd0c
31.BIND 服务程序/usr/sbin/named,/etc/namedb/named.conf 域名服务配置文件
32./usr/sbin/sendmail 默认安装的邮件服务器
33.NFS(/usr/bin/showmount)
34./etc/amd.map 自动安装守护进程AMD (/usr/sbin/amd)
35./usr/ports port软件包
36.tar.gz和tgz 使用gzip压缩,用/usr/bin/tar xzvf解压缩;tar.bz2使用bzip2压缩,/usr/bin/bunzip2解压缩.
37.静态链接,将库编译到可执行文件中。动态链接,库和程序分别载入,并且库是使用动态链接库实时链接;elf执行文件的动态链接库位置/usr/lib,a.out在/usr/lib/aout(/usr/bin/ldd /usr/sbin/vi 显示一个可执行程序vi使用的共享库)。
38.FreeBSD 3.x之后ELF格式成为缺省的执行文件格式
39./usr/compat/linux 兼容linux应用的根目录
40.mkdir -p /usr/compat/linux/var/local/lib/rpm嵌套生成目录,即使上级目录并不存在
41./usr/src/sys freebsd 内核源码,sys/i386/conf/为内核配置文件。注意最小化安装不会安装此项
42./usr/sbin/tcpdump
43.freebsd自带防火墙在内核中实现,需要在编译内核时打开下面选项重新定制内核options IPFIREWALL,/sbin/ipfw 设置包过滤规则,/etc/rc.firewall过滤规则文件,需要在rc.conf中用firewall_enable ="yes"启用并读取
44./sbin/natd(gateway_enable,natd_enable) 网络地址转换
45.ipfilter包过滤 规则文件/etc/ipnat.conf /sbin/ipnat
46.基于IP数据包过滤的防火墙和基于代理的防火墙
47.可以使用C这样的编译型语言来编写CGI程序,也可以使用解释型的语言来编写CGI程序
48.基于DNS的负载均衡(yahoo)和反向代理的负载均衡,基于NAT的负载均衡
49.freebsd默认支持/usr/sbin/jail。(imprison process and his descendants)
50.安装源码/stand/sysintall Configure->Distributions->src->sys
51./usr/sbin/arp ,无需安装
52.dhcp需要安装软件包,并且内核支持伪设备bpfilter。DHCP客户机和服务器软件ISC-DHCP和WIDE-DHCP,前者更常用
53./etc/ssh/sshd_config 登录设置ssh
54.环境变量的设置根据shell的种类而不同,在sh中使用export设置环境变量;在csh中使用setenv来设置环境变量;
55./bin/echo $path 查看单个环境变量,set查看全部shell变量(本地变量),/usr/bin/env查看全部系统环境变量
56. /usr/bin/whereis和/usr/bin/which的区别。whereis查二进制文件、说明文档,源文件;which只在env中设置的path中寻找可执行文件
自己搭建的超简单的ldap服务器
一个简单的ldap服务器的搭建还是很容易的,因为验证方面不用复杂的ssl和sasl验证。不考虑和邮件帐号等的整合,也不用考虑统一验证机制,只是纯粹用来熟悉php里面提供的ldap API函数,这样一个简单的服务器还是够的。说实话,我也才瞎忙活了3天左右的时间,水平有限,只能先搭建个简单的凑合着用了。
首先我们先了解下ldap的基本概念
条目(entry):条目是以树型结构组织的,一个条目类似树的一个节点。
DN(distinguish name):每个条目都有一个DN,DN的构成是由Base DN和RDN构成
RDN:类似于树的叶子节点。
Base DN:类似于树的根节点到内部节点的路径,当然路径不是安装树组织的,而是按dc=xxx,dc=xxx这样来组织的
object Class:分为结构型,辅助型和抽象型。每个条目都必须有个结构类,每个条目可以有多个object Class
Schema:是一个数据类型,用来决定数据怎样存储,被跟踪数据的类型及存储在不同条目下数据之间的关系。
1.新建目录的根节点
dn: dc=lizl,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
dc: lizl
o: lizl.com
dn: cn=Manager,dc=lizl,dc=com
objectClass: organizationalRole
cn: Manager
description: Derectory Manager
dn: ou=people,dc=lizl,dc=com
ou: people
objectClass: organizationalUnit新建时,需停止slapd进程,否则会出现问题
bdb_db_open: database already in use
backend_startup_one: bi_db_open failed! (-1)使用
kill -INT cat /usr/local/openldap/var/run/slapd.pid`
/usr/local/openldap/sbin/slapadd -v -l ./init.ldif 2.添加基础数据
dn: cn=Jack,ou=people,dc=lizl,dc=com
cn: Jack
sn: white
mail: jack@126.com
telephoneNumber: 07285230251
objectClass: inetOrgPerson# /usr/local/openldap/bin/ldapadd -D "cn=Manager,dc=lizl,dc=com" -W -x -f base.ldif
Enter LDAP Password: secret
3.sladp.conf
#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include /usr/local/openldap/etc/openldap/schema/core.schema
include /usr/local/openldap/etc/openldap/schema/cosine.schema
include /usr/local/openldap/etc/openldap/schema/inetorgperson.schema
# Define global ACLs to disable default read access.
# Do not enable referrals until AFTER you have a working directory
# service AND an understanding of referrals.
#referral ldap://root.openldap.org
pidfile /usr/local/openldap/var/run/slapd.pid
argsfile /usr/local/openldap/var/run/slapd.args
# Load dynamic backend modules:
# modulepath /usr/local/openldap/libexec/openldap
# moduleload back_bdb.la
# moduleload back_ldap.la
# moduleload back_ldbm.la
# moduleload back_passwd.la
# moduleload back_shell.la
# Sample security restrictions
# Require integrity protection (prevent hijacking)
# Require 112-bit (3DES or better) encryption for updates
# Require 63-bit encryption for simple bind
# security ssf=1 update_ssf=112 simple_bind=64
# Sample access control policy:
# Root DSE: allow anyone to read it
# Subschema (sub)entry DSE: allow anyone to read it
# Other DSEs:
# Allow self write access
# Allow authenticated users read access
# Allow anonymous users to authenticate
# Directives needed to implement policy:
# access to dn.base="" by * read
# access to dn.base="cn=Subschema" by * read
# access to *
# by self write
# by users read
# by anonymous auth
#
# if no access controls are present, the default policy
# allows anyone and everyone to read anything but restricts
# updates to rootdn. (e.g., "access to * by * read")
#
# rootdn can always read and write EVERYTHING!
#######################################################################
# BDB database definitions
#######################################################################
database bdb
suffix "dc=lizl,dc=com"
rootdn "cn=Manager,dc=lizl,dc=com"
# Cleartext passwords, especially for the rootdn, should
# be avoid. See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
rootpw secret
# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory /usr/local/openldap/var/openldap-data
# Indices to maintain
index objectClass eq安装一些ldap工具
word-wrap,word-break和nowrap的区别
个人总结的三句话:
(1)word-wrap 对中文字符始终换行
(2)word-break的keep-all可使中文不换行;normal/break-all使中文换行
normal/keep-all使英文不换行;keep-all使中文换行
(3)nowrap与td的width属性有关,并且width的优先级高,如果设置了width,nowrap失效;否则nowrap有效
FPDF中的编码
最近在用FPDF生成pdf时,用UTF-8编码的日文或者繁体文字始终都是乱码。查了相关资料后,才发现FPDF本身并不支持UTF-8,除此之外,FPDF对中,日,韩支持的扩展类中使用的是CID字体,和我们window中用到的字体的都不同。因此当你使用支持中文的扩展类时,生成pdf时对日文肯定是不支持的。而TCPDF据说是支持UTF-8,但使用后发现对中文的支持很烂,还要手工转换字体,其方式和UFPDF是一样的。而我们很难找到一种同时对中,日,韩都支持的字体。用msgothic也只是对日文和繁体支持的比较好而已,对简体中文用华文中宋等字体显示更好一些,因此我的结论是,用FPDF生成pdf时,如果文件包含中文,日文,韩文等内容时,生成的pdf肯定有乱码或者空白。除非我们确切的知道文件中哪些地方显示中文,哪些地方显示日文,那我们就可以在开始的时用addfont添加这些字体,然后在输出的时候用setfont指定要输出的内容采取哪种字体。
此外,在解决乱码问题时容易遇到的以下问题:
现象一:当修改页面字符集为UTF-8,页面出现空白,不显示任何内容
都是字符集charset惹的祸,理由在于用charset指定为UTF-8之前,已经有非UTF-8编码文字的输出。比如一般html页面都是把title标签放在meta标签前面,因此80%的可能是title内容的编码和UTF-8引起的,最好的解决方法就是把title用UTF-8编码后再输出,或者在meta之后指定title。
现象二:页面报js错误,但仔细查看源代码后,发现没有任何问题。
同样是编码不一致导致的。这时要仔细查看页面是否引用了非UTF-8编码的文件,一个典型的情况就是外部js文件中的中文(包含注释等)引起的,解决方法就是把中文去掉,或者全部改为英文即可。
Shell入门
(1)shell中的单引号比双引号的区别:单引号关闭所有有特殊作用的字符,而双引号只要求shell忽略大多数,具体的说,就是①美元符号②反引号③反斜杠,这3种特殊字符不被忽略
(2)求字符串长度 ----- (1)expr $x:‘.*’(2)${#x}
(3)求字符串子串 ----- ${x:$pos:$len},其中$pos位置,$len长度,其中$len可省略
(4)字符串替换 ----- ${x/a/b} 用b替换a ; ${x//a/b}用b替换所有的a
(5)字符串首尾截取----- ${x##*/}去掉所有/左边的字符,也可用其它匹配代替*/ ${x#*/}只去掉第一次出现/左边所有的字符。顺序为从左到右.${x%%/*}去掉所有/右边的字符,${x%/*}去掉第一次出现/右边的字符,顺序为从右到左.
(6)Shell数组定义 a=(1 2 3 4),不能有空格,比如a =(1 2 3 4)和a=(1 2 3 4)都是不允许的。
(7)数组长度: ${#a[@]}或者 ${#a[*]} ;全部数组 ${a[@]}或{$a[*]}返回1 2 3 4
(8)数组元素的长度 ${#a[i]},i为下标,和其它语言一样,从0开始,数组元素${a[i]}
(9)awk默认使用空格作为域分隔符,
"+"和"?"只适用awk而不适用sed和grep
awk条件操作符:<,<=,>=,==,!=,~,!~
awk字符串处理函数:gsub(r,s),gsub(r,s,t),index(s,t)等
awk自定义环境变量:FILENAME,FNR,FS,NF,NR等
awk -F : '{print $1}' /etc/passwd 打印第一列的值, $0 打印全部的值
awk -F : 'BEGIN {print "name passwd\n-----------------"} {print $1"\t"$5}' END {print "End of file"}' /etc/passwd 输出增加头尾
awk '{if($0~/root/) print $0}' /etc/passwd 输出匹配"root"的行,等价于awk '$0~/root/' /etc/passwd
(10)无论命令是什么?sed并不与初始化文件打交道,它操作的只是文件的一个拷贝。如果不重定向到一个文件,直接在标准输出(显示屏)显示。
搜索替换是sed的拿手好戏。
sed -n '1,$p' /etc/passwd 打印从1到最后一行的所有内容
sed -e '/root/=' /etc/passwd 打印出现"root"的行号和所有行
sed -n '/root/=' /etc/passwd 只打印行号
sed -n -e '/root/p' /etc/passwd 只打印出现"root"的匹配行
sed -n -e '/root/p' -e '/root/=' /etc/passwd 打印匹配行和行号
sed 's/^M//g' /etc/passwd 删除行尾控制字符(^M)= ctrl+v+m
sed 's/^0*//g' /etc/passwd 删除行首的多个零
(11)grep 一般用来搜索字段或字串,sed用来搜索或者替换,awk可以进行复杂的运算和定制操作
(12)先不要管Shell的版本,来看看Shell 变量,在Shell中有三种变量:系统变量,环境变量,用户变量
系统变量:
$# 传递到脚本的参数个数;
$$脚本运行的当前进程id;
$?最后命令的退出状态,0表成功;
$!上一个命令的PID ;
$@ 以"参数1" "参数2" ... 形式保存所有参数 ;
$* 以"参数1 参数2 ... " 形式保存所有参数 ;$0表示脚本名称
用户变量:用set命令查看
环境变量:用setenv查看
(13)不同的shell版本有不同数组赋值方法,而bourne shell (如bash)中不支持数组方式。
(14)查看目录或者文件,符号链接:ls -l | grep '^d' 或者 ls -l | grep '^-',ls -l | grep '^l'
(15)查看最后一列的指:ls -l | grep '^l' | awk '{print $NF}' (默认以空格分隔),在awk中,NF表示字段数,$NF表示最后一个字段