把FreeBSD5.3升级到5.4版本

本来系统装的是FreeBSD5.3,但是新版的FreeBSD5.4 Release发布了,而且改动不小,呵呵,赶紧升级吧。

先更新源码结构:
# cd /usr/share/examples/cvsup
修改一下 standard-supfile 文件:
# vi standard-supfile
把主机和版本修改掉:
把*default host=CHANGE_THIS.FreeBSD.org
改为:*default host=cvsup.jp.freebsd.org或者cvsup.freebsdchina.org,呵呵,其实日本的服务器也不慢。
把:*default release=cvs tag=RELENG_5_3
改为:*default release=cvs tag=RELENG_5_4 Continue reading

mysql中的默许的数据列修改

字符串,恐怕应该算是MYSQL里面最复杂的类型了吧?几乎目前所有的问题,都是出在与字符有关的数据列上,大致有几种
1、字符串的查询(以下如果不特指,都是指中文),搜索一个中文的时候,不管是模糊还是精确,往往结果都会有与搜索内容不一致的数据在里面
2、编码,现在大家都知道MYSQL连接上后,先执行一下mysql_query('set names GBK',$conn)这类的语句,从MYSQL4.0升级到4.1及以上版本的朋友在这上面吃的苦不少了。网上关于这类的提问也是最多的
3、索引、效率,varchar是MYSQL所特有的字段,而且长度可变,char则是固定长度的字符串。
在MYSQL所支持的几个字符串格式里面,char和varchar是用的最多的,char是定长字段,,也就是说,不管字符串的实际长度有多少,CHAR(10)将永远占用10个字节。字符串如果前端有空格,那么在存储的时候会自动被数据库去掉,相当于先执行trim($string),再进行存储,如果不满10个字节,将会采用空格填满,读取数据时,MYSQL会自动将这些空格去掉。看到这里,恐怕它的缺点之一就明显的暴露了,CHAR不能存储那些结尾确实有空格的字符串(因为读取时会被MYSQL自动去掉)。

 数据类型     含义
 char(n)  固定长度的字符串,最多255个字符
 varchar(n)   可变长度字符串,最多255个字符(MYSQL<5.0.3,n<=255 , mysql>=5.0.3,n<=65535)
 tinytext      可变长度字符串,最多255
 text      可变长度字符串,最多65535-1
 medinumtext     可变长度字符串,最多16,777,216-1
 longtext      可变长度字符串,最多4,294,967,296-1

除了char类型外,其余类型均为可变长度,实际所占空间由该字段所存的内容决定。虽然varchar与tinytext一样都是255个字节,但不同的是varchar可以指定存储的长度,而tinytext只能由存储的时候数据长度而定。
在数据表被创建的时候,MYSQL 把数据列的定义改成一种对MYSQL来说更有效率的形式。这种自动方式的修改称为默许的数据列修改(client column changes)。一般来说是对CHAR和VARCHAR数据列都有影响:如果n<4,varchar(n)将被修改为char(n),而如果n>3并且在同一个数据表里还有其他的可变长度的字段,char将被修改成varchar格式。如果数据表里只有固定长度的数据列,char列将不发生变化。也就是说,你在数据表里的字段如果有多种格式,那么你通过alter table 是无法进行修改的。
上表提到,varchar在新版本里变成了65535个字节,但最大字符个数还是要取决于具体的字符集(GBK中文占两个字节,而UTF8中文则占三个字节)。上面这些所有的数据类型都有一个BINARY属性,一旦该字段添加了这个属性,那么MYSQL就会将他们视同BLOB字段来处理。BINARY的好处是在排序时把字符视为二进制,这样就可以把字母的大小写分开,而且由于是二进制字符串,所耗费的时间也会更短。可惜,在实陆应用中我们存储的大多是中文,所以这一点对我们来说并没有太大的区别。中文,本来就没有大小写之分,再怎么二进制,还是那样。呵呵。
在MYSQL4.0及以前的版本里,各种文本字段的字符集和排序方式都由MYSQL服务器决定,默认值是latin1字符集和瑞典排序方式。虽然允许在MYSQL配置文件里指定一种字符集和排序方式,但这会导致所有的数据库受到影响,还有,对字符集和排序方式做了任何修改都必须重启数据库服务器方能生效,更可恨的是,重启后,还必须重新创建所有的索引,同时,MYSQL4.0之前的版本并不支持UNICODE字符集。
4.1后,这些问题得到了很大的改状况,可以单独为某一个数据列指定一种字符集和排序方式,而且字符集和排序方式的选择范围也大了很多,因为从4.1开始支持了UNICODE和UCS-2等。与字符集及相关排序方式相关的命令是:SHOW COLLATION(必须要注意的是,字符集和排序方式不是随意组合的,每种字符集都有该字符集对应的一些排序方式,而不能混用)。如果没有为某个数据列指定一个字符集和排序方式,它将使用数据表、数据库或MYSQL数据库的默认字符集。至于数据库应该使用哪种字符类型,还是由你的项目所决定,如果你的项目采用了GBK编码,那数据库也同样使用这种编码比较好。如果你在项目初始时对于采用哪种编码未知,那么UTF8应该算是比较好的一种解决方法,数据迁移以及对于JAVA、.net等程序的支持也是最好的,唯一的缺点就是占用数据库空间太大。
说到现在,一直在说latin1和unicode字符集,这代表了什么意思呢?
latin1:在最初的MYSQL版本里都是默认采用了这种字符集,它是符合ISO-8859-1的规范的,收录了西欧国家的常用字符,在那个年代,国内还没有多少人使用MYSQL,而真正使用这些的大多是欧美国家,所以这个字符集主要就是用于收集这些国家常用的字符。随后latin的标准 在不停的变化,有latin2,latin9等,但它们当中并没有一个能够把所有欧洲语言里所有的字符都收录齐全,也就是说latin库里并没有一个可以适用于整个欧洲。
UNICODE:正由于latin不能解决这个问题,所以人们开发出了双字节的UNICODE字符集,两个字集意味着是2的16次方,可以存储65535个字符,所以UNICODE字符集不仅涵盖了所有的欧洲语言,还覆盖了绝大多数的亚洲语言。然而UNICODE只定义了每个字符的编码,没有定义如何存储这些编码。
在这个基础上,也同样发展出了好多变体。最重要的是UCS-2和UTF8,UCS-2又称UTF-16,即每种字符都用两个字节表示,所以几乎所有的字符都被涵盖了。但是这种也是有弊端的:存储空间大了一倍,即使是ASCII字符也是这样;字节编码0会出现在字符串中(比如ASCII写出来的文本里,每一个的第2个字节都是0),可是一些程序会把0当成结束标志,而导致出错。
UTF8是UTF16的替代品,在这里所有的ASCII(7位)仍然象以前一样用第一位是0的单字节表示,所有其他的UNICODE字符用2~4个字节表示。它的缺点也同样明显:同一份文档的字节数和字符数没有任何显而易见的关系,但由于它与现有的程序高度兼容,所以UTF8几乎已经成为了一种事实上的标准,而且大多数软件都把它作为自己的默认字符集。
可惜,PHP发展到现在对于UNICODE的支持还是一般性,并没有内置,处理的时候,不是用ICONV就是mb_string库(PHP6是说内置支持了),但并不能妨碍我们使用UTF8来开发网页。

字符串就介绍到这里。太累了。。。。。这个方面的问题太多了,在以后的连载中遇到再详细说明吧。

mysql中自动修改数据表的设计(默许的数据列修改)

9.9.6 自动修改数据表的设计(默许的数据列修改)

在创建(create table)或修改(alter table)一个数据表的时候,MYSQL会在特定条件下对这个数据表的设计方案自动做出一些修改,其理由或者是那么做可以让数据表的效率更高,或者是设计思路MYSQL无法实现.
这里要特别提醒那些从期货数据库系统迁移过来的读者注意:MYSQL在对数据表设计方案自动做出勤率修改时不会给出任何提示,所以一事实上要用SHOW CREATE TABLE命令去检查一下最终的数据表设计方案是不是所想像的样子。在下面的例子里。MYSQL自做主张地把一个CHAR(2)数据列改成了一个VARCHAR(20)数据列,还给那两个数据列加上了defautl null属性.
CREATE TABLE test1(col1 VARCHAR(20), col2 CHAR(20))
show create table test1
create table test1(
col1 varchar(20) default null,
col2 varchar(20) default null
)engine=MYISAM default charset=latin1

以下是mysql会对数据表设计方案自动做出的几项重大修改:
1.如果n<4,VARCHAR(n)数据列将被修改为CHAR(n)数据列.
2.如果n>3,并且在同一个数据表里还有其他的VARCHAR,TEXT,或BLOG数据列的话,CHAR(n)将被系统自动修改为CARCHAR(n).如果数据表里只有固定长度的数据列,但CHAR(n)将不发生变化.
3.即使没有设定,MYSQL也会自动给primary key数据列自动加上NOT NULL属性.
mysql文档把这种自动方式的修改称为默许的数据列修改(client column changes),这方面的详细信息可以在HTTP://dev.mysql.com/doc/mysql/en/silent-column-changes.html网址处的文章里找到。
总之在数据库的设计和创建工作这后,一定要仔细检查数据库,数据库里的数据表,数据表里的数据列,数据列的各有关属性是不是都如所想.

以上摘自<<Mysql 5 权威指南>>第3版 第195页

php计算两个数组交集和差集

array_intersect
(PHP 4 >= 4.0.1, PHP 5)

array_intersect -- 计算数组的交集说明
array array_intersect ( array array1, array array2 [, array ...])
array_intersect() 返回一个数组,该数组包含了所有在 array1 中也同时出现在所有其它参数数组中的值。注意键名保留不变。

例子 1. array_intersect() 例子

<?php
$array1 = array ("a" => "green", "red", "blue");
$array2 = array ("b" => "green", "yellow", "red");
$result = array_intersect ($array1, $array2);
?>

这使得 $result 成为:

Array
(
   [a] => green
   [0] => red
)
注: 两个单元仅在 (string) $elem1 === (string) $elem2 时被认为是相同的。也就是说,当字符串的表达是一样的时候。

array_diff
(PHP 4 >= 4.0.1, PHP 5)

array_diff -- 计算数组的差集说明
array array_diff ( array array1, array array2 [, array ...])
array_diff() 返回一个数组,该数组包括了所有在 array1 中但是不在任何其它参数数组中的值。注意键名保留不变。

例子 1. array_diff() 例子

<?php
$array1 = array ("a" => "green", "red", "blue", "red");
$array2 = array ("b" => "green", "yellow", "red");
$result = array_diff ($array1, $array2);
?>
这使得 $result 成为 array (1 => "blue");。在 $array1 中多次出现的值同样对待。

注: 两个单元仅在 (string) $elem1 === (string) $elem2 时被认为是相同的。也就是说,当字符串的表达是一样的时候。
注: 注意此函数仅检查多维数组中的一维。当然你可以用 array_diff($array1[0], $array2[0]); 检查更深的维度。

array_diff_assoc -- 带索引检查计算数组的差集

说明
array array_diff_assoc ( array array1, array array2 [, array ...])
array_diff_assoc() 返回一个 array,返回一个数组,该数组包括了所有在 array1 中但是不在任何其它参数数组中的值。注意和 array_diff() 不同的是键名也用于比较。

例子 1. array_diff_assoc() 例子

<?php
$array1 = array ("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array ("a" => "green", "yellow", "red");
$result = array_diff_assoc($array1, $array2);

/* The result is:
Array
(
   [b] => brown
   => blue
   [0] => red
)
*/
?>
上面的例子中可以看到键值对 "a" => "green" 在两个数组中都有,因此不在本函数的输出中。与此不同,键值对 0 => "red" 出现在输出中是因为第二个参数中的 "red" 的键名是 1。

键值对 key => value 中的两个值仅在 (string) $elem1 === (string) $elem2 时被认为相等。也就是说使用了严格检查,字符串的表达必须相同。

php中的$_SERVER or $_ENV

服务器变量:$_SERVER
注: 在 PHP 4.1.0 及以后版本使用。之前的版本,使用 $HTTP_SERVER_VARS。

$_SERVER 是一个包含诸如头信息(header)、路径(path)和脚本位置(script locations)的数组。数组的实体由 web 服务器创建。不能保证所有的服务器都能产生所有的信息;服务器可能忽略了一些信息,或者产生了一些未在下面列出的新的信息。这意味着,大量的这些变量在 CGI 1.1 规范中说明,所以应该仔细研究一下。

 

环境变量:$_ENV
注: 在 PHP 4.1.0 及以后版本使用。之前的版本,使用 $HTTP_ENV_VARS。

在解析器运行时,这些变量从环境变量转变为 PHP 全局变量名称空间(namespace)。它们中的许多都是由 PHP 所运行的系统决定。完整的列表是不可能的。请查看系统的文档以确定其特定的环境变量。

其它环境变量(包括 CGI 变量),无论 PHP 是以服务器模块或是以 CGI 处理方式运行,都在这里列出了。

这是一个“superglobal”,或者可以描述为自动全局变量。这只不过意味这它在所有的脚本中都有效。在函数或方法中不需要使用 global $_ENV; 来访问它,就如同使用 $HTTP_ENV_VARS 一样。

$HTTP_ENV_VARS 包含着同样的信息,但是不是一个自动全局变量(注意:$HTTP_ENV_VARS 和 $_ENV 是不同的变量,PHP 处理它们的方式不同)。

如果设置了 register_globals 指令,这些变量也在所有脚本中可用;也就是,分离了 $_ENV 和 $HTTP_ENV_VARS 数组。相关信息,请参阅安全的相关章节使用 Register Globals。这些单独的全局变量不是自动全局变量。

FreeBSD 挂载U盘

确保内核中有如下项
device scbus
device da
device cd

在GENERIC中默认都有,如果没有,请编译内核。

大多数U盘用的是FAT 文件系统,所以用
mount -t msdos /dev/da0 /mnt

FreeBSD# mount -t msdos /dev/da0 /mnt/Mp4/
FreeBSD# cd /mnt/Mp4/
FreeBSD# ls
??.mp3 My love.mp3
????.mp3 boulevard of broken dreams.mp3
?????.mp3 data
?????.mp3 someday.mp3
BE-Girls Hold the line .mp3 take me to your heart.mp3
Beautiful World.mp3 thats why you go away.mp3
Blue Bird.mp3 you took my heart away.mp3
I lay my love on you.mp3
FreeBSD# cp *.mp3 /home/music/
FreeBSD# umount /dev/da0
====================================================
如果上面的办法不行的话,可以试一下这个办法的:
9.mount usb

确保内核中有如下项
device scbus
device da
device cd
在GENERIC中默认都有,如果没有,请编译内核。
大多数U盘用的是FAT 文件系统,所以用
mount -t msdos /dev/da0 /mnt
挂载
其余的设备mount总结可以看这里

FreeBSD常用命令110条

01.查看网络流量
a.systat -if 1 (1表示1s刷新屏幕一次)
b.netstat 1
# Traffic 流量 peak 峰值 average 平均值
02.查看硬盘信息
diskinfo -vt /dev/ad0
disklable /dev/ad0 (分区信息)
disklable /dev/ad0s2
03.查看核心信息
vmstat 1
04.查看进程
top ps auxww   ps -ef |grep xxx
05.查看硬盘详细分区信息&读写状况
gstat
06.sysctl sysctl -a 查看所有变量(/etc/sysctl.conf)
sysctl kern.maxproc 查看特定变量
sysctl kern.maxfiles=5000 设置变量
07.查看磁盘空间使用情形 df 和 du
指令df用来查看整个档案系统的使用情形,
如果您需要知道某个目录的使用情形用指令du。
df -h
du -h /etc
du -sh /etc
-s 参数来省略指定目录下的子目录
-h 表示使用GB、MB等易读的格式
08.断电后系统无法启动
a.启动到sing user模式
b.fsck
c.reboot
09.升级内核后无法启动
a.重启机器到10秒读秒时按enter以外的任意键(新版bsd按6)
b.unload
c.boot kernel.old 或其他可以启动的内核
另外一种方法
a.使用cd1启动,选择Fixit-->CDROM/DVD
b.Fixit#mount /dev/ad0s2a /mnt mount硬盘上的文件系统
c.cd /mnt/boot
d.rm -rf kernel
e.cp -R kernel.old kernel
f.reboot
修改了/boot/loader.conf以后不能正常引导系统了,当机器开始加载
/boot/defaults/loader.conf的时候(未加载完)机器停止响应,我应该怎么办?
a.使用cd1启动,选择Fixit-->CDROM/DVD
b.Fixit#mount /dev/ad0s2a /mnt mount硬盘上的文件系统
c.cd /mnt/boot
d.vi loader.conf 去掉错误的加载项
e.reboot
10.丢失root密码
启动到单用户模式,执行/sbin/mount -a, 然后用passwd更改密码
/sbin/mount -a=挂接/etc/fstab里所有列出的文件系统
如果单用户登录也需要密码
a.使用cd1启动,选择Fixit-->CDROM/DVD
b.Fixit#mount /dev/ad0s2a /mnt mount硬盘上的文件系统
c.cd /mnt/etc
d.vi /ttys 找到when going to single-user mode,更改
console none unknow off insecure为secure
e.reboot,启动到单用户模式/sbin/mount -a,passwd
启动到单用户模式后,ctrl+d进入多用户模式
####让单用户登录也需要密码
a.cd /etc
b.vi /ttys 找到when going to single-user mode,更改
console none unknow off secure为insecure
11.用win2000的引导器启动FreeBSD
我在笔记本上装了双系统,win2000 和freebsd,装完 freebsd后 系统自动设置如下:
f1 dos
f2 freebsd
先起动到dos下,fdisk /mbr,再把FreeBSD光盘上的boot\boot1复制到c:\,
再编辑c:\boot.ini 加一行c:\boot1="FreeBsd"
12.硬盘分区时shift+F -->NO可以使用全部空间
13.ctrl+alt+backspace 杀掉xwindows

14.alt+F1...F8 或 printscreensysr循环切换控制台
15.shutdown now 切换到单用户模式

shutdown -p now shutdown -hp now 关闭电源
shutdown -r now reboot 重新启动机器
shutdown -p +90 (90分钟后关机)
shutdown 0203122359(0203122359表示2002年3月12日23:59,格式是yymmddhhmm)
16.挂载ntfs,fat32分区和u盘
ntfs: mount_ntfs -C eucCN /dev/ad0s5 /mnt/d
fat32:mount_msdos -L zh_CN.eucCN /dev/ad0s6 /mnt/e
u盘(scsi盘):   mount_msdos -L zh_CN.eucCN /dev/da0s1 /mnt/u
cdrom: #mount_cd9660 /dev/acd0 /mnt/cdrom
NTFS在FreeBSD中只能只读而无法写入
17.卸载分区
umount /dev/ad0s5
umount -f /dev/ad0s5 (强制卸载)
18.在/etc/fstab中挂载fat32分区
/dev/ad0s5   /mnt/d   msdos   rw,-L=zh_CN.eucCN 2 2
19.如何在FreeBSD5.X以上加载,卸载ISO文件
mount iso文件:
mdconfig -a -t vnode -f myisofile.iso (屏幕输出md0或者类似的设备名)
mount -t cd9660 /dev/md0 /cdrom
umount:
umount /cdrom
mdconfig -d -u 0 (上面的-u后面的数字和前面的md?中的数字一致)
mdconfig -l 命令可以列出关于配置 md(4) 设备的信息
20.声卡
vi /boot/defaults/loader.conf
更改snd_ich_load="NO"->"YES" #intel ich
检测声卡 kldstat 或 dmesg |grep pcm
21.ls 命令详解
ls 显示本目录下的文件及目录
ls -a显示本目录下的所有文件及目录(包括隐藏目录和文件)
ls -l 显示本目录下所有文件的属性
ls -l | grep ^d 只显示目录
ls -l | grep ^- 只显示文件
ls -l | grep ^d | wc –l   统计当能目录下的子目录数
ls -l | grep ^- | wc –l   统计当能目录下的文件数
ls -G   以颜色显示目录名和文件名
22.查找程序或文件
which 程序名
whereis 程序名
find 文件名
locate 文件名
locate: database too small: /var/db/locate.database的一种解决方法
a.这个仅仅是因为你开机时间不够长,看看/etc/periodic/weekly/310.locate
b.试试运行/usr/libexec/locate.updatedb看
whatis xxx 要找东西但不知道它是什么
grep bpf /usr/src/sys/i386/conf/GENERIC 在文件中找指定文本
#只能对文本进行grep,如是命令,则
command |grep text
grep text filename
23.xmms乱码问题 (要拷贝simsun.ttf和taboma.ttf到/usr/X11R6/lib/X11/fonts/TrueType/)
在用户目录下建立 .gtkrc.mine 文件.代码如下
style "gtk-default-zh-cn" {
fontset = "-*-tahoma-medium-r-normal-*-12-0-0-0-p-0-iso8859-1,
-misc-simsun-medium-r-normal-*-*-120-*-*-p-*-gbk-0,*-r-*" }
class "GtkWidget" style "gtk-default-zh-cn"
修改xmms中的字体设置,将播放清单及主窗口的字体修改为下面的设置
-*-tahoma-medium-r-normal-*-12-0-0-0-p-0-iso8859-1,
-misc-simsun-medium-r-normal-*-*-120-*-*-p-*-gbk-0,*-r-*
xorg6.9+xfce4+xmms
cd /usr/ports/chineses/xmms make install clean
拷贝simsun.ttf到/usr/X11R6/lib/X11/fonts/TTF/,无需要建立.gtkrc.mine
只要修改xmms中的字体设置,字体simsun,size 12就好了。
24.停止sendmail
vi /etc/rc.conf 加入
sendmail_enable="NONE"
25.you have mail
mail 回车,输入1看第一封邮件...输入?看帮助
mail 古老的 UNIX 邮件处理程序
如果我们要寄信给非本机的使用者,可以使用的收件人格式如下:
mail -s"hi, my friend"
jack@mymail.com
mail -s "hi, my friend"
jack@mymail.com
zh_CN.eucCN
28.远程连接windows终端
rdesktop [-a 16 -f] server'IP[:port]
-a 16表示16位色,-f表示全屏
gui,grdesktop (/usr/ports/net/grdesktop)
29.播放APE格式音乐
/usr/ports/chinese/xmms/ /usr/ports/audio/xmms-mac(ape插件)xmms-wma(wma插件)
30.看图
/usr/ports/graphics/xnview
31.apache22+php5+mysql+postgresql+ZendOptimizer
a,apache22:
cd /usr/ports/www/apache22
make install clean
b,php5:
cd /usr/ports/lang/php5
make install clean
选中APACHE,就可以联编出用于与Apache web服务器配合使用的可动态加载的mod_php5模块.
勿选debug,否则不能装ZendOptimizer
c,php5扩展:
cd /usr/ports/lang/php5-extesions
make install [FORCE_PKG_REGISTER=yes] 强迫安装
make clean
(除预设项目还应选中CTYPE,EXIF,GD,ICONV,IMAP,PCRE,SESSION,ZLIB)
FreeBSD中的PHP支持是高度模块化的,因此基本安装的功能十分有限。增加其他功能非常简单,只需通过lang/php5-extensions即可完成。这个port提供了一个菜单驱动的界面来帮助完成PHP扩展的安装。另外也可以通过对应的port来单独安装扩展。例如要将对于MySQL数据库服务器的支持加入PHP5,只需简单地安装databases/php5-mysql.
d,cp /usr/local/etc/php.ini.recommended /usr/local/etc/php.ini
e,ZendOptimizer
cd /usr/ports/devel/ZendOptimizer
make install clean
f,mysql:
cd /usr/ports/databases/mysql41-server
make WITH_OPENSSL=yes BUILD_OPTIMIZED=yes WITH_CHARSET=gbk WITH_XCHARSET=all SKIP_DNS_CHECK=yes install
./work/mysql-5.0.24/scripts/mysql_install_db
cd /usr/ports/databases/php5-mysql
make install clean
g,postgresql
cd /usr/ports/databases/postgresql81-server
make install clean
/usr/local/etc/rc.d/postgresql initdb
echo 'postgresql_enable="YES"' >> /etc/rc.conf
cd /usr/ports/databases/php5-pgsql
make install clean

32.怎样刷新环境变量值,而不用退出再登陆?
a,比如要重新设置环境变量ABC的值为abcdef
bash$ export ABC=abcdef
csh% setenv ABC abcdef
b,更新了PATH变量指定目录里可执行命令
rehash
c,更新配置文件
比如你编辑了.cshrc等文件,就需要用source命令
source .cshrc
33.检视软件间的关联
cd /usr/ports/sysutils/pkg_tree
make install clean
之后我们就可以使用 pkg_tree | more 来看各个软件之间的关系了
34.使用 portupgrade 更新软件
cd /usr/ports/sysutils/portupgrade
make install clean
配置文件:/usr/local/etc/pkgtools.conf
如果您只想要升级某一个软件本身,而非所有相依的软件,只要使用portupgrade "pkgname" 即可。如果您要升级所有和该软件相依的其它软件,则可以加上参数 -r。如果您要更新包含相依软件的相依软件,则可以使用参数 -R。另外,您可以使用参数 -m 来要求编译 (make) ports 时多传入一些参数,还可以使用参数 -f 要求就算版本一样也强制更新。portupgrade在更新软件时,会保留您原本的设定档。例如,在更新 Apache 时,它会保留httpd.conf的设定。假设我们更新软件perl-5.8,我们可以用下列指令更新:
# portupgrade -rRf "perl-5.8.*" -m "ENABLE_SUIDPERL=yes"
35.ports安装失败提示
stop in /usr/ports/lang/ruby18/work
删除work目录下所有文件&文件夹再次安装即可.(make clean)
36.ntop--网络监控软件
cd /usr/ports/net/ntop
make install clean
vi /etc/rc.conf 加入
ntop_enable="YES"
在地址栏中输入
http://x.x.x.x:3000
即出来管理界面.
37.修改/etc/rc.conf不重启生效
a.sh /etc/rc
b./etc/netstart
38.freebsd启动的时候停到blanktime的解决办法
可以试试 这个参数:blanktime="NO"
etc/rc.conf 中把 default_router 注释掉
#未验证!!!
39.Bsd 下的QQ
eva不错,运行速度飞快。
/usr/ports/net-im/eva
gaim-openq
/usr/ports/net-im/gaim-openq
40.一次性把所有安装的ports删除掉
a.pkg_delete -a
以下步骤去掉配置文件,解决一些疑难问题
rm -fr /usr/local/
rm -fr /var/db/ports/
cd /usr/ports && make NOCLEANDEPENDS=yes clean
portsnap fetch update
b.安装pkg_cutleaves它会告诉你,哪些package没有人依赖,并让你决定要不要删除
c.make deinstall与pkg_delete有什麽不同?
简单来说,make deinstall会移除该port,并且不会叁照其相依相关的ports。pkg_delete在移除该port前,会叁照其相依相关的ports,并且pkg_delete
有支援 wild card,如要移除所有p开头的 ports,则:
cd /var/db/pkg/
pkg_delete p*
要注意的是,如果使用 `make deinstall',则最好确定系统目前所安装的版本,与 ports collection 中显示的版本符合,否则有可能会出现非预期性错误;而pkg_delete是因为直接删除系统中所安装的版本,所以没有此问题。
因此,换句话说,当系统所安装的版本符合ports collections中的版本,则可以使用make deinstall或pkg_delete,否则的话最好用pkg_delete。
41.pure-ftp安装
cd /usr/ports/ftp/pure-ftpd/
make WITH_LANG=simplified-chinese install clean
[X] BANNER Show pure-ftpd welcome upon session start
cd /usr/local/etc/
cp pure-ftpd.conf.sample pure-ftpd.conf
vi /etc/rc.conf -->加入pureftpd_enable="YES"
关于pureftpd的编码问题
在win下登陆ftp然后建立中文文件夹,传中文文件然后用FlashFXP登陆看到这些中文文件和文件夹名字全部是乱码.pure-ftpd.conf中强制用gbk就可以了.
FileSystemCharset    gbk
ClientCharset           gbk
42.开机自动校准时间
vi /etc/rc.conf--->加入
ntpdate_enable="YES"          # Run ntpdate to sync time on boot (or NO).
ntpdate_flags="218.75.4.130"     # cn.pool.ntp.org
43.将/usr/ports/distfiles/目录放到/data/disktfiles
cd /usr/ports
mv distfiles /data/distfiles [移动]
ln -s /data/distfiles distfiles [链接][要在/usr/ports目录下做]
ln -s source_file[_dir] target_file[_dir]
44.FreeBSD下面通过串口连接到路由器
使用cu -s speed -l line,就可以连接到COM口或者家猫的线路上,我用的是COM1口,
连接Cisco2924XL,使用cu -s 9600 -l ttyd0,即可连接上交换机配置界面。
45.电子书:CHM、PDF的查看
chmsee,kchmviewer,xpdf,xchm,Acrobat Reader...chmsee对中文支持比较好
/usr/ports/print/acroread7
46.使用axel或者prozilla加速你的port下载
a.axel(据说能搞定文件夹钳套,不错!推荐使用 )
cd /usr/ports/ftp/axel
make install clean
vi /etc/make.conf 加入
FETCH_CMD=axel -a
DISABLE_SIZE=yes
vi /usr/local/etc/axelrc 修改代码
#num_connections = 4
num_connections = 10
4改为10,num_connections前面不留空格,否则出错.
(-a 交互的进步指示器,num_connections = 10 10线程下载)
SIZE参数用来在取得文件之前检查文件的大小.而DISABLE_SIZE则是是否开启这项功能
b.prozilla(速度快,遇到欠套的文件夹会出问题)
cd /port/ftp/prozilla
make install clean
vi /etc/make.conf 加入
FETCH_CMD=proz -s -k=10 -r --no-curses
DISABLE_SIZE=yes
(-s 查找最快的境像,-k=10 10个线程下载,-r 重新开始一个被打断的下载)
c.wget(未测试)
cd /usr/ports/ftp/wget/
make install clean
vi /etc/make.conf 加入
FETCH_CMD=wget -c -t 1
DISABLE_SIZE=yes #这行是必要的
d.在其它机器上fetch
make fetch-recursive (fetch:取得recursive:递归的)
然后将/usr/ports/distfiles拿走。
###make install设置是/etc/make.conf
###pkg_add是在~/.cshrc或~/.profile
e.vi /etc/csh.cshrc
加上以下一行可以在让pkg_add先从更快的站点下载
setenv PACKAGEROOT
ftp://ftp.cn.freebsd.org
你可以先设定 PACKAGEROOT,这是用来抓取套件的位置,笔者通常设定
setenv PACKAGEROOT
ftp://ftp.tw.freebsd.org
因为这是我认为最稳定的机器,然后就可以透过pkg_add -r 套件名来安装套件,他会自动的到pub/FreeBSD/ports/i386/packages-4.9-release/Latest/底下寻找套件,而且你不需要知道版本,只要知道套件名称即可,他会自动安装当时的最新版,中文的部分只要加上 zh-,像是 zh-xcin。
你也可以直接指定 PACKAGESITE 来指向特定的位置。像是你希望安装的套件是最新的,而不是 release 时的版本。
setenv PACKAGESITE
ftp://ftp.tw.freebsd.org/pub/Fre
... ages-stable/Latest/
f.vi /etc/make.conf
加上以下一行可以在让make先从更快的站点下载ports Distfiles
MASTER_SITE_OVERRIDE?=http://ports.cn.freebsd.org/${DIST_SUBDIR}/
####http://ports.cn.freebsd.org/
Welcome to use FreeBSD Ports Distfiles Mirror.
This mirror is running on China Telecom 100Mbit network.
How to use? Set your /etc/make.conf like this:
MASTER_SITE_OVERRIDE?=http://ports.cn.freebsd.org/${DIST_SUBDIR}/
or like this:
MASTER_SITE_OVERRIDE?=http://ports.hshh.org/${DIST_SUBDIR}/
47.星际译王
辞典程序: /usr/ports/textproc/stardict2/
简体中文辞典:/usr/ports/chinese/stardict2-dict-zh_CN/
48.控制台调音量
mixer
49.How to build openoffice
cd /usr/ports/editors/openoffice.org-2.0
Building/installing/packaging a localized language package (Japanese version for example)
make LOCALIZED_LANG=ja install
去这里
ftp://ooopackages.good-day.net/pub/OpenOffice.org/FreeBSD/
里面的tbz文件,
可以直接pkg_add
50.OPERA,支持Flash浏览器
cd /usr/ports/www/linux-opera
(注意是www/linux-opera,www/opera是不支持Flash的。)
cd /usr/ports/www/opera
make config
选中[X]SHARED Use a shared Qt library(instead of static)[解决在opera中输入汉字的问题]
make install clean
安装后的美化:
A.Tools->Preference->Advanced->Fonts,把所有的字体都改成Simsun,字体大小设成12。
B.最小字体大小(像素)改为12.[解决一些网站看不清楚的问题]
51.bt客户端
/usr/ports/net-p2p/py-bittorrent 安装完成后执行bittorrent
/usr/ports/net-p2p/rtorrent 功能多,速度快,还完美支持中文编码!
52.emule客户端
/usr/ports/net-p2p/amule2
53.ipguard解决arp攻击
ipguard->Tool designed to protect LAN IP adress space by ARP spoofing
/usr/ports/security/ipguard
make install (不要clean参数,否则无ethers.sample文件)
补充:
A.以/usr/ports/security/ipguard/work/ipguard-0.04/doc/ethers.sample
文件为实例,建立/etc/ethers文件。
B.And then start ipguard:
cd /usr/local/etc/rc.d
mv ipguard.sh.sample ipguard.sh
/usr/local/etc/rc.d/ipguard.sh start
ipguard.sh启动脚本里默认有iface=fxp0,这里应该替换为你做NAT的内网网卡名称。
54.一些安装参数
make fetch 只抓取tarball
make fetch-recursive 抓取安装ports所有须要的其他ports的tarball
make fetch-list 列出port所需的文件
make clean Ports里面make clean,会附带着make clean依赖的软件的
make -DBATCH install不需要用户输入任何东西
make -DINTERACTIVE install 继续上一步
make configure
make distclean,删除不想要的distfiles
55.pkg_info
pkg_info |grep zh-fcitx (查软件版本)
#ls /var/db/pkg也可以查软件版本
pkg_info -L zh-fcitx-3.4 (查看软件安装目录和安装的文件)
pkg_info -xL zh-fcitx (加x了不需要加软件版本号)
pkg_info -r zh-fcitx-3.4 (查看软件依赖情况)
pkg_info -W fcitx (查看fcitx属于哪个软件)
56.Ports如何清除安装参数
cd /usr/ports/www/opera
make distclean移除不是port collections所期望下载的文件
make rmconfig清除用户配置的参数
make showconfig查看当前配置的参数
make config更改参数
57.一款好用的网络性能测试工具iperf
/usr/ports/benchmarks/iperf
58.FreeBSD用户帐户锁定
a.用vipw把他的shell修改成/sbin/nologin就可以了.
b.pw lock useri 解锁用pw unlock userid 59.中文locale
zh_CN.eucCN zh_CN.GBK zh_CN.GB18030 zh_CN.euc zh_CN.UTF-8
#语言代码_国家代码.字符编码
#查看环境变量:locale
#目前还是zh_CN.eucCN(使用GB2312编码)locale最为正式,也最为成熟。
60.本地化设置,以系统默认的csh为例
vi /etc/csh.cshrc 加入
setenv LANG zh_CN.eucCN (语言设为中文)
setenv LC_ALL zh_CN.eucCN (所有本地子集设为中文)
setenv XMODIFIERS @im=fcitx (X下的中文输入法)
set prompt = "%B%m"(个性化控制台%B颜色%m主机%/目录)
set autolist   (自动补齐扩展)
set nobeep (告诉应用程式避免发出哔哔声)
set filec     (使档案名称在命令列被完成)
alias ls        ls -FG (彩色化ls)61.fcitx小企鹅输入法(有关步骤见60)
/usr/ports/chineses/fcitx
vi /root/.xinitrc 添加
exec fcitx& 到最前一行
62.安装X Server xorg-6.9.0
1.cp freebsddisk1 disk2 PKG to /data/pkg61目录
2.cd /data/pkg61
3.pkg_add xorg-6.9.0.tbz
4.rehash
5.X[Xorg] -configure (生成/root/xorg.conf.new)
6.X[Xorg] -config /root/xorg.conf.new (测试xorg.conf.new配置是否正确)
7.cp /root/xorg.conf.new /etc/x11/xorg.conf
63.安装桌面环境gnome2 and xfce4 and kde3.5.1
gnome2-2.12.3
1.cd /data/pkg61
2.pkg_add gnome2-2.12.3.tbz
3.rehash
4.vi /root/.xinitrc 加入 exec gnome-session
#gnome2提示vi /etc/sysctl.conf,加入
kern.ipc.shmmax=67108864
kern.ipc.shmall=32768
kern.maxfiles=25000
xfce4
1.cd /usr/ports/x11-wm/xfce4
2.make install clean
3.rehash
4.vi /root/.xinitrc 加入 exec xfce4-session
kde-3.5.1
1.cd /data/pkg61
2.pkg_add kde-3.5.1.tbz
3.rehash
4.cd /usr/ports/chineses/kde3-i18n-zh_CN
5.make install clean (kde3汉化)
6.vi /root/.xinitrc 加入 exec startkde
pkg_add -r kde
pkg_add -r zh_CN-kde-i18n
pkg_add -r zh_CN-koffice-i18n
###more /root/.xinitrc
exec fcitx&
exec gnome-session
#exec xfce4-session
#exec startkde
#exec /usr/X11R6/bin/gnome-session
#exec /usr/local/bin/xfce4-session
#exec /usr/local/bin/startkde
64.在Xwindow中使用TrueType字体(simsun宋体,msyh雅黑,tahoma)
1.cp simsun.ttc /usr/X11R6/lib/X11/fonts/TTF/simsun.ttf
2.cp msyh.ttf tahoma.ttf /usr/X11R6/lib/X11/fonts/TTF/
3.cd /usr/X11R6/lib/X11/fonts/TTF
#下面4,5步骤更新字体信息,6重建字体缓存.
4.mkfontscale (生成fonts.scale)否则xorg报错如下:
Could not init font path element/usr/X11R6/lib/X11/fonts/TTF/,removing from list!
5.mkfontdir (生成fonts.dir)否则xorg报错如下:
(WW) `fonts.dir' not found (or not valid) in "/usr/X11R6/lib/X11/fonts/TTF/".
Entry deleted from font path.
(Run 'mkfontdir' on "/usr/X11R6/lib/X11/fonts/TTF/".
6.fc-cache -f -v (生成fonts.cache-1)
7.vi /etc/X11/xorg.conf 确认8
8.Load "freetype" (启用支持TrueType字体)
#现在X应用程序已经记住已安装的TrueType字体.
9.在gnome和其他X程序中把字体设置为宋体或雅黑.
65.xlsfonts显示系统中安装的字体
66.FreeBSD中3D加速功能的启用

a.DRI。
这是实现3D功能最重要的部分。DRI是Direct Rendering Infrastructure,可以简单的把它理解为X和硬件间的接口.但它包含很多独立的模块,负责从X到硬件的各个环节,包括内核。它最主要的工作就是将Mesa或OpenGL的函数调用转换为硬件的指令,从而指挥硬件进行渲染等工作。
b.测试你的显卡是不是能实现3D功能,可以采取以下办法:
1.dmesg | grep agp,如果出现:
agp0:  mem
0xe0000000-0xe3ffffff at device 0.0 on pci0
的字样,那么你的显卡就有可能实现3D功能.如果什么也没有的话,那么恭喜你,你再也不用为3D功能而费心了.
2.kldload drm,如果没报错的话,那么你的显卡基本上就可以实现3D功能了。
c.3D功能的确认
运行:glxinfo。在第二行或第三行,如果出现”Direct Rendering: YES“字样,那就说明已经启用3D加速了。
more /var/log/Xorg.0.log | grep "direct rendering"如果出现下面的字样,(II) I810(0): direct rendering: Enabled那么你的3D就启用的。如果没有,
那么你要仔细读/var/log/Xorg.0.log。它会在某一行告诉你没启用的原因的。
d.nvidia显卡驱动安装 cd /usr/ports/x11/nvidia-driver/
67.刷新率的问题,
将xorg.conf里的Modes行改成:Modes "1024x768"(小写的X)
选择默认的分辨率和色深。 这是在 "Screen" 小节中定义的:
Section "Screen"
Identifier "Screen0"
Device     "Card0"
Monitor "Monitor0"
DefaultDepth 24
SubSection "Display"
Viewport   0 0
Depth     24
Modes     "1024x768"
EndSubSection
EndSection
68.make world
cvsup -g -L 2 -h cvsup.freebsdchina.org standard-supfile   (升级源码树)
cp /usr/share/examples/etc/make.conf /etc/make.conf
vi /etc/make.conf,保留如下内容
CFLAGS= -O -pipe
COPTFLAGS= -O -pipe
cd /usr/src/sys/i386/conf   (更改内核配置文件)
cp GENERIC TDS
vi TDS (按需要修改其内容)
shutdown now   (重启到单用户模式)
adjkerntz -i   (确定本地时间设置)
cd /usr/src
make -j4 buildworld   (编译基本系统)
make buildkernel KERNCONF=TDS   (编译新内核)
make installkernel KERNCONF=TDS   (安装新内核)
reboot   (重新启动)
shutdown now   (重启到单用户模式)
cd /usr/src
mergemaster -p   (更新/etc目录里的文件,-p预建模式)
make installworld   (安装新的二进制)
mergemaster -Ui (更新makeinstallworld不更新的文件,-U進了6-STABLE了,這功能很讚,
就是他會看哪些/etc 的檔案,你沒有改過的,就會自動 merge,這樣子可以省下很多時間跟力氣。
shutdown -r now   (重新启动)
uname -a   (查看系统信息)
cd /usr/src
make cleanworld   (清除升级过程产生的临时文件)
#############################################
中断的 build 可以被恢复吗
cd /usr/src
make -DNOCLEAN all
这样就不会取消先前的 make buildworld 所做的工作。
##############################################
如果出现了错误我该怎么办?
删除以往的系统更新树
cd /usr/obj
chflags -R noschg *
rm -rf *
cd /usr/src
make cleandir
make cleandir
不错,make cleandir 真的要执行两次。
然后重新开始整个过程,使用 make buildworld 开始。
mergemaster -p的说明
mergemaster -p的作用是建立一个临时的根环境,把新的配置文件映射到这个环境当中,然后和系统的配置文件进行比较和处理,目的是保证系统配置文件的更新,这一点很重要!
在执行"mergemaster -p"的过程中,主要是进行以下处理:
检测系统是否存在临时的根环境,如果存在,让用户选择是利用现有的还是删除它,然后新建!
*** The directory specified for the temporary root environment,
/var/tmp/temproot, exists. This can be a security risk if untrusted
users have access to the system.
Use 'd' to delete the old /var/tmp/temproot and continue 删除旧的/var/tmp/temproot
Use 't' to select a new temporary root directory 为temproot选择新的目录
Use 'e' to exit mergemaster 退出mergemaster
Default is to use /var/tmp/temproot as is
How should I deal with this? [Use the existing /var/tmp/temproot]
一般的处理是选 "d" ,删除原有的目录,系统开始重新建立这个临时的根环境。
只要进行的不是大跨度的 FreeBSD 版本升级,可以简单地跳过这一步.
mergemaster的说明
重新编译整个系统不会使用新的或改过的配置文件更新某些目录(尤其像 /etc,/var和/usr)更新这些文件最简单的方式就是使用 mergemaster,手工去做也是可以的,只要您愿意。
不管您选择哪一种,一定记得备份/etc 以防出错。
mergemaster操作中可能会遇到以下操作提示:
Use 'd' to delete the temporary 删除文件,不更新相应的系统配置文件
Use 'i' to install the temporary 安装文件,使用新的配置文件覆盖旧文件
Use 'm' to merge the temporary and installed versions 对旧的配置文件进行合并处理,并安装
Use 'v' to view the diff results again 察看新文件与旧文件的差异
###跟踪多台机器,以A.B2个机器为例。A要启动nfs_server,B要启动nfs_client
A:/etc/rc.conf
rpcbind_enable="YES"
nfs_server_enable="YES"
/etc/exports
/usr/src /usr/obj /usr/ports   -maproot=0   192.168.0.61(B-ip)
B:/etc/rc.conf
nfs_client_enable="YES"
A.cd /usr/src
make -j4 buildworld   (编译基本系统)
make buildkernel KERNCONF=TDS   (编译新内核)
B。mount b-ip:/usr/src /usr/src
mount b-ip:/usr/obj /usr/obj
cd /usr/src
make installkernel KERNCONF=TDS   (安装新内核)
reboot   (重新启动)
shutdown now   (重启到单用户模式)
cd /usr/src
mergemaster -p   (更新/etc目录里的文件,-p预建模式)
make installworld   (安装新的二进制)
mergemaster -U   (更新makeinstallworld不更新的文件,-U進了6-STABLE了,這功能很讚,
69.freebsd上下的jdk的安装方法(FreeBSD基金会提供的diablo-jdk)
cd /usr/ports/java/diablo-jdk15
最好是通过port的diablo-jdk安装,而不是直接pkg_add,因为后者可能会出现依赖关系不对的问题。
JDK与JRE的关系
JAVA DEVELOPMENT KIT 与JAVA RUNTIME ENVIROMENT之间是什么关系?
JRE只是Java的运行环境,而JDK是Java的开发、运行和调试一体的环境。
JAVA环境变量的设置
csh 就在/etc/csh.cshrc
setenv JAVA_HOME /usr/local/diablo-jdk1.5.0
setenv CLASS_PATH .:/usr/local/diablo-jdk1.5.0/lib/dt.jar
bash就在/etc/profile
export JAVA_HOME=/usr/local/diablo-jdk1.5.0
#export CATALINA_HOME=/usr/local/jakarta-tomcat5
export CLASSPATH=.JAVA_HOME/jre/lib/rt.jarJAVA_HOME/lib/dt.jarJAVA_HOME/lib/tools.jar
70.查找最快的cvsup站点
cd /usr/ports/sysutils/fastest-cvsup
make install clean
fastest-cvsup -c jp,cn,hk,us
71.chmod 命令概解:chmod命令用于改变文件的运行级别(读=4写=2执行=1)
chmod 400 files 给某文件以只读权限
chmod 600 files 给某文件以只读、写权限
chmod 700 files 给某文件以只读、写、执行权限
chmod -R 400 directory 改变某目录下所有文件的运行权限为只读权限
chmod -R 600 directory 改变某目录下所有文件的运行权限为以只读、写权限
chmod -R 700 directory 改变某目录下所有文件的运行权限为只读、写、执行权限
72.chown概解:改变文件及文件夹的用户所属
chown root:wheel files 改变文件的用户为root用户组为wheel组
chown -R root:wheel directory 改变目录的用户为root用户组为wheel组
73.crontab 指令語法
crontab [ -u user ] file
crontab [ -u user ] { -l | -r | -e }
crontab 提供我们在固定的间隔时间执行自订的程序、系统指令或 shell secrip。时间间隔的单位可以是分钟、
小时、日、周、月及以上的任意组合。允许使用者离线执行,并且可以将执行结果以 email 通知使用者。因此,
非常设合对周期性的管理分析或数据备份等工作。
基本上,crontab 的指令格式分为六个部分,前五个为时间间隔,最后则是执行的指令。每一个部分用空格来区隔。
crontab -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定
VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
crontab -r : 删除目前的时程表
crontab -l : 列出目前的时程表
crontab file [-u user]-用指定的文件替代目前的crontab。
时程表的格式如下:
f1 f2 f3 f4 f5     program
分 时 天 月 星期几 要执行的程序
当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推
当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推
当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推
当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其馀类推
使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定时程表。
先前曾提到,crontab 的格式分成六个部分,前五个是时间参数。在上例中你会发现除了数字与英文名称,
有使用到符号"*",这个符号代表每一单位的意思,譬如30 3 * * *既代表30分3点每日每月星期的每天。
时间的指定,可以是单一的数字,或几个数字用逗号来连接。看下例
30 3,12 * * * /root/fbin/bak-web
其中的第二项为 3,12,这代表 3 以及 12 小时的意思。再来看下例
30 */6 * * * /root/fbin/bak-web
我把第二项改成 */6 这代表每 6 小时,也相当于 6,12,18,24 的作用。此外还有一个区段的做法
30 8-18/2 * * * /root/fbin/bak-web
我把第二项改成 8-18/2 这代表在 8 小时到 18 小时之间每 2 小时,也相当于 8,10,12,14,16,18 的作用
74.使用portsnap更新系统ports
portsnap从6.0开始引进系统,给与用户方便的更新系统ports,portsnap的命令比较少,fetch 获取数据,extract 释放全部ports,update 更新ports
第一次使用可以portsnap fetch extract,以后使用可以portsnap fetch update国内镜像站
portsnap.hshh.org
portsnap2.hshh.org
portsnap3.hshh.org (网通)
使用方法:
/etc/portsnap.conf 里面更改
SERVERNAME=portsnap.hshh.org
使用portupgrade 更新已安装的软件
75.清屏
clear或ctrl+L
76.freebsd 怎么安装GF4 MX 440的显卡
首先更新ports和src,到/usr/ports/x11/nvidia-driver下make install clean,要選中linux的支持。
然后到/usr/ports/x11/nvidia-xconfig下make install clean,還可以到/usr/ports/x11/nvidia-settings下安裝控制面板。
運行nvidia-xconfig會自動生成xorg.conf文件,然后根据需要自行更改。
77.如何知道一个文件属于哪个port,比如libplds4.so.1
pkg_info -W filename
78.mplayer
cd /usr/ports/multimedia/mplayer
make install clean
问题:如何让mplayer支持srt格式的字幕?
解答:首先复制一个中文ttf字体文件到 ~/.mplayer/ 目录下,并改名为 subfont.ttf ;然后在gmplayer的选项
(Preferences)->Subtitle & OSD 中将 Encoding 项选为“Simplified Chinese charset (CP936)”。如果你还使用命令行播放电影,还需要在 ~/.mplayer/config 文件中加上这么一行:subcp=cp936 。如果仍然不能显示字幕,请看看字幕文件名和电影文件名是否相配:如果avi文件是movie.avi的话,字幕文件名应该是movie.srt。
问题:怎么mplayer不能显示.idx+.rar格式的字幕?
解答:先将rar文件中的sub文件解压出来 。
问题:如何让mplayer的播放窗口保持在最前面?
解答:修改 ~/.mplayer/config 文件,加上这么一行:ontop=yes 。
问题:如何让mplayer的画面随窗口大小自动缩放呢?
解答:修改 ~/.mplayer/config 文件,加上这么一行:zoom=yes。
测试通过by tds 061119。fb61+xorg6.9+xfce4+gmplayer
79.设置控制台高分辩率
1.在内核配制文件里加入下面的编译内核
options    VESA
options    SC_PIXEL_MODE
第一行选项让內核支持VESA 2,第二行让内核支持控制台图形模式。
2.vidcontrol -i mode 查询出所有模式
......
279 (0x117) 0x0000000f G 1024x768x16 1 8x16   0xa0000 64k 64k 0xd8000000 65536k
280 (0x11 0x0000000f G 1024x768x32 1 8x16   0xa0000 64k 64k 0xd8000000 65536k
......
3.测试模式
vidcontrol MODE_280
4.vi /etc/rc.conf加入下面这条
allscreens_flags="MODE_280"
5.把console改成黑底绿字的
vidcontrol green
80.设置FreeBSD console下的字体大小
vidcontrol -f ...
81.锁住终端
lock -np
-n 永不超时,-p 使用系统密码作为开启终端的密匙
82.刻录CD ISO映像文件
burncd -f /dev/acd0 -s max data imagefile.iso fixate
刻录一个文件到CD上而不创建ISO9660文件系统
burncd -f /dev/acd1 -s 12 data archive.tar.gz fixate
生成ISO文件
mkisofs -o imagefile.iso /path/to/tree
把数据CD复制成一个与之等价的镜像文件
dd if=/dev/acd0 of=file.iso bs=2048
83.类似flashget的东东download for X,d4x
/usr/ports/ftp/downloader
84.使用watch监视终端
1.编辑核心加入pseudo-device snp或者kldload snp
2.cd /dev   ./MAKEDEV snp0 snp1
3.watch ttyp1
去换终端ctrl-x
退出watch ctrl-g
85.kldload xxx 加载xxx模块
kldstat 查看已加载的模块
kldunload xxx 从核心中移除
86.让程序读取新的配置文件
kill -HUP 199        (进称号)
killall -HUP sshd (进程名)
上述指令中的参数 -HUP 也可以使用 -1 来取代
87.登入后的讯息Message Of The Day(motd)
编辑 /etc/motd 来制作自己的画面
登入前的讯息
修改 /etc/gettytab 及 /etc/issue
编辑 /etc/gettytab,找到 default的地方。
default:\:cb:ce:ck:lc:fd#1000:im=\r\n%s/%m (%h) (%t)\r\n\r\n:sp#1200:\
:if=/etc/issue:
其中的%s %m %h %t分别对应到FreeBSD i386 example.com ttyp0,如果你不想显示FreeBSD,
就把%s拿掉。最后一行if=/etc/issue就是表如果没有issue这个档的话,就执行default。
88.变更自己所使用的Shell
chsh -s /bin/tcsh
上述指令将Shell变更成/bin/tcsh。注意!输入的shell名称一定要存在于/etc/shells中
89.Shell 的环境变量
tcsh可以使用setenv看目前所有的环境变量,也可以使用setenv来改变一个环境变量的值
setenv EDITOR ee
如果您使用的是 Bourne Shell:
export EDITOR="ee"
90./etc/master.passwd 介绍
FreeBSD使用shadow password的方式来保护密码文件,只有root才可以读取编码后的密码文件/etc/master.passwd。但是这并不是系统用来验证的档案,为了加快速度,FreeBSD将该文件做成数据库/etc/spwd.db及/etc/pwd.db,因此在修改完master.passwd后,必须使用指令pwd_mkdb来将master.passwd做成数据库档案。不过一般而言,我会使用vipw这个指令来修改master.passwd,vipw会先将master.passwd以预设的文书编辑软件打开,修改完存盘后,它会视需要自动更新数据库。
pwd_mkdb -p -d /etc /etc/master.passwd
master.passwd这个档案内容中,每个使用者都是独立的一行,每个字段使用冒号分开,格式是:
name:password:UID:GID:class:change:expire:fullname:home:shell
pwd_mkdb介绍
如果我们直接以文书编辑软件来修改/etc/master.passwd,在修改完后,必须执行pwd_mkdb来将更新的数据做成系统可以读取的数据库文件。pwd_mkdb还会自动建立/etc/passwd。
91.将使用者目录拥有者更改为所属的使用者
chown -R user:group /home/user
使用参数-R将目录user及其下所有档案及子目录的拥有人改变成user
92.记录使用者指令
修改 /etc/rc.conf,加上下列一行设定:
accounting_enable="YES"
系统会将使用者的历程记录在/var/account/acct*中,最新的记录是acct
当下达指令lastcomm时,则系统会以/var/account/acct为参考,印出所记录的数据。
也可以使用lastcomm -f acct1来查看前一天的资料。
93.sudo
如果你希望它能将执行sudo的log记下来的话,必须先编辑/usr/ports/security/sudo/Makefile,
将CONFIGURE_ARGS中的参数 --disable-log-wrap 拿掉。
cd /usr/ports/security/sudo
make install clean
安装完后,我们要先执行/usr/local/sbin/visudo以设定sudo的设定档(/usr/loca/etc/sudoers)。设定完后,使用者即可执行sudo ,使用者只要输入自己的密码即可,不必知道root密码,而且5分钟内再次执行sudo时不需再输入密码。如果你有打开log记录功能,sudo执行成功或失败的log都将被记录到/var/log/sudo.log中。
94./usr/ports/dns/ddclient动态dns更新软件
95.SCSI工具camcontrol

camcontrol devlist 查看目前所有USB装置
ATA工具
atacontrol list 查看目前所有ATA装置
96.如果我们只知道一个关键词,却不知要使用哪一个指令,我们可以使用参数k来查询。
例如我们要查询 firewall 相关的指令:man -k firewall
97.bg
将指定的程序放入背景中执行。当我们下达一个指令后,必须要等待该程序结束后才能输入下一个命令。
如果该程序必须执行一段很长的时间,我们不想等程序结束,可以把它放到背景中执行。在下达指令后,按 Ctrl+Z 来暂停程序,接着再执行 bg 即可将程序放到背景中执行。
$ sleep 1000
^Z
Suspended
$ bg
[1] sleep 1000 &
我们也可以在所要执行的指令后面加上符号 "&",就可以将该程序放到背景执行:
$ sleep 1000 &
[2] 46461
98.jobs
jobs 指令可以让我们查询目前有哪些程序在背景执行。如果加入参数 -l 可以得到 PID 的信息。
jobs -l
[1] + 46459 Running sleep 1000
[2] - 46461 Running sleep 1500
99.fg
将指定的程序放到前景中执行。我们使用jobs看到目前在背景执行的程序之后,可以使用fg把它叫回前景。
例如要叫回第一个在背景中执行的程序:
fg %1
sleep 1000
100.sync
让系统暂存的数据强制存回硬盘
101.cp -Rp sourdir tardir
-R完成递归复制(即可以复制目录以下的所有内容),-p保留文件的时间、所属等等
102.ssh
username@hostname
从远程拷贝 scp
user@host:/path/to/files
local_file_name
拷贝到远程 scp local_file_name
user@host:/path/to/files

103.使用Portaudit监视第三方安全问题
cd /usr/ports/security/portaudit && make install clean
安装完成之后更新数据库
portaudit -Fda
使用下面的命令对通过Ports Collection安装的第三方软件工具进行审计
portaudit -a
104.我要怎么从 X 切换到 virtual consoles?
请用Ctrl+Alt+Fn以切回至console。Ctrl+Alt+F1可以切回至第一个console。
当你切回至文字console后,你就可以使用一般的Alt+Fn组合键在各console之间切换了。
要回到X的话,你就可以使用Alt+F9以返回至X中。
105.FB下Free的杀毒软件
clamav (security/clamav)
man clamscan 扫描
man freshclam 更新病毒库
man clamd
man clamdscan
man sigtool
配置文件
/use/local/etc/freshclam.conf
/usr/local/etc/clamd.conf
把conf里的#Example去掉
# Comment or remove the line below.
#Example
/etc/rc.conf加入
clamav_clamd_enable="YES"
clamav_freshclam_enable="YES"
106.软件默认配置示例文件的一般存放位置
/usr/share/examples
/usr/local/share/examples
107.安装文泉驿字体
cd /usr/ports/x11-fonts/wqy/
make install clean
108.把/data/tftp打包成pxeinstfb62.tgz
cd /data/
tar zcvf pxeinstfb62.tgz tftp
解压
tar zxvf pxeinstfb62.tgz
109.ports下有没有xxx这个软件?在哪个目录下?
回答:有两种办法来查找,一是通过软件名:
make fetchindex
cd /usr/ports
make search name=xxx | grep ^Path
另一种是通过关键字,也就是在软件名和说明中只要包括这个单词的都会查找出来:
cd /usr/ports
make search key=xxx | grep ^Path
110.FreeBSD如何获得硬件信息?
sysctl -a | grep "^dev\."
pciconf -lv

FreeBSD中使用QUOTA(磁盘配额)来限制用户空间

虚拟主机中经常要限制用户空间的大小和文件的数量。这些限制在linuxFreeBSD中都是用QUOTA来实现的。这里我说下在FreeBSD下实现的方法;
开启QUOTA支持
首先需要修改内核加入对quota的支持

machine i386
cpu I686_CPU
#ident GENERIC
ident CNOSvhost
maxusers 0
options QUOTA #
就是这行了。

修改好后重新编译内核。
然后在/etc/rc.conf里加入:

enable_quotas="YES"
check_quotas="YES"

这样你的系统就起用QUOTA了,你应当通过编辑/etc/fstab的某个文件系统的属性,加入QUOTA的支持。
下面的fstab文件就设置了在/pub文件系统上起用用户配额和组配额

# See the fstab(5) manual page for important information on automatic mounts
# of network filesystems before modifying this file.
# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/ad0s1b             none            swap    sw              0       0
/dev/ad0s1a             /                ufs     rw               1       1
/dev/ad0s1h             /pub            ufs     rw,userquota,groupquota        2  2
/dev/ad0s1e             /tmp            ufs     rw              2       2
/dev/ad0s1g             /usr            ufs     rw              2       2
/dev/ad0s1f             /var            ufs     rw              2       2
/dev/acd0c              /cdrom          cd9660  ro,noauto       0       0
proc                    /proc           procfs  rw              0       0

设置完fstab文件后,执行下面的命令打开quota

# quotacheck -av
# repquota -a

基本上前期的工作都已经做完了,剩下的就是编辑用户的配额了。

编辑用户配额
# edquota c4st
将编辑用户c4st的配额设定,出现的是一个文本编辑器界面:

Quotas for user c4st:
/pub: kbytes in use: 3438, limits (soft = 100000, hard = 100020)
inodes in use: 25, limits (soft = 25, hard = 26)

我们看到设定共分为两行。
kbyters in use:3438
表示已经使用了3438kb limits限制(soft=100000软限制100Mhard=100020硬限制)
soft
表示达到此值时警告,hard表示的用户实际可以使用的大小。
inodes in use: 25, limits (soft = 25, hard = 26)
这行为可以拥有的“文件数量”限定,当然例子给出的数值不太实际,上面的设定,
用户只能创建26个文件。实际应用中,可以根据需要调整inodes的值,比如,你要装一个基于文本库的程序,如lb5000(一种webbbs),
一些cgi文章管理等系统,你就要适当的调大inodehard设定 ?

常见的quota命令
# edquota -t
quota用户使用软限制之前的时间设定,dayshoursminutesseconds都可以是此设定的单位,值只要是合理就可以。

Time units may be: days, hours, minutes, or seconds
Grace period before enforcing soft limits for users:
/pub: block grace period: 1 day, file grace period: 1 day

# repquota -a报告文件系统关于quota的信息。

                                Block  limits                    File  limits
User                   used     soft     hard  grace     used    soft    hard  grace
wheel           --        2        0        0      -        1       0       0      -
operator        --      128        0        0      -        2       0       0      -
mysql           --       18        0        0      -        9       0       0      -
vhostuser       --    36164   100000   100050      -      342    1000    1005      -
 
                                Block  limits                    File  limits
User                   used     soft     hard  grace     used    soft    hard  grace
root            --     9136        0        0      -       12       0       0      -
mysql           --       18        0        0      -        9       0       0      -
testmin         --       18     1000     1050      -        9    1000    1005      -
web             --    22152        0        0      -      122       0       0      -
coms_cn         --     1550        0        0      -      177       0       0      -
c4st            -+     3438   100000   100020      -       25      25      26  22:56

# Quota :显示用户的磁盘使用情况和上限。
-g
显示用户所在组的组配额
-l
不显示NFS系统上的配额
-u
显示用户配额
-q
显示使用情况超过配额的简要信息
-v
检查用户的quota设置

# edquota -p test c4st c4st1 c4st2.....
将把用户test的配额设定复制给用户c4st c4st1 c4st2.....

# quotacheck -a这个命令可以定期执行,用来检查全部设定是否正常(可以放到crontab里执行)

官方手册:http://www.haohtml.com/manual/freebsd-handbook/quotas.html

FireFox 3.5+ 已不再支持 -moz-opacity

安装了FireFox3.5之后,发现以前项目网页中有透明属性的一些DIV都不透明了。于是猜想,FireFox3.5难道不支持它自家的CSS透明属性-moz-opacity了?上网一查,果真如此。
https://developer.mozilla.org/En/CSS:-moz-opacity里说得很清楚了:
Note:  Firefox 3.5 and later do not support -moz-opacity.  By now, you should be using simply opacity.
现在都要改用opacity这个属性。

于是要设置一下透明度为60%的DIV就应该这样写了:
div.transp { /* make the div translucent */
opacity: 0.6;                /* Firefox, Safari(WebKit), Opera)
filter: "alpha(opacity=60)"; /* IE 8 */
filter: alpha(opacity=60);   /* IE 4-7 */
zoom: 1;                     /* needed in IE up to version 7, or set width or height to trigger "hasLayout" */
}

opacity这个是属于CSS3里面的东西了,属于CSS3的标准。然而微软IE8还不支持这一属性。

网易邮箱目前也是用-moz-opacity,因此当“清空垃圾邮件”时屏幕一片黑。

addEventListener的参数说明

我想大家对这个函数的前两个参数已经很了解了吧,主要是第三个参数不很好理解。我查了一些资料,弄明白了这个问题,所以记录下来了。下面的内容,基本上是参考别人的。

第三个参数叫做useCapture,是一个boolean值,就是true or false,如果是rue的话就是浏览器会使用Capture方式,false的话是Bubbling,只有在特定状况下才会有影响,通常建议是false,而会有影响的情形是目标元素(target element)有父元素(ancestor element),而且也有同样的事件对应函数,我想,看图比较清楚。

     

   
像這張圖所顯示的,我的範例有兩層div元素,而且都設定有click事件,一般來說,如果我在內層藍色的元素上click不只會觸發藍色元素的click事件,還會同時觸發紅色元素的click事件,而useCapture這個參數就是在控制這時候兩個click事件的先後順序。如果是false,那就會使用bubbling,他是從內而外的流程,所以會先執行藍色元素的click事件再執行紅色元素的click事件,如果是true,那就是capture,和bubbling相反是由外而內,會先執行紅色元素的click事件才執行藍色元素的click事件。

那如果不同層的元素使用的useCapture不同呢?就是會先從最外層元素往目標元素尋找設定為capture的事件,到達目標元素執行目標元素的事件後,再尋原路往外尋找設定為bubbling的事件。