您的位置:首页-> 资讯中心-> .net技术-> .net-> Unix编程/应用问答中文版 ---21.FreeBSD相关问题

.net

.net

本类阅读TOP10

·C语言的lex和yacc工具说明
·C/C++语言中指向函数的指针
·C语言库函数(S类字母) - 3
·C语言库函数(I类字母)
·(新手篇)C++Builder 6操作MS SQL Server数据库的SQL集锦
·Unix编程/应用问答中文版 ---20.shell script问题
·Unix编程/应用问答中文版 ---8.Solaris内核编程相关问题
·jsp文件操作之读取篇
·C++Builder5.0调用SQLSERVER7.0驱动编程
·C++ Builder中,sql server在客户端调用存储过程向服务器端备份数据库

精品推荐
Unix编程/应用问答中文版 ---21.FreeBSD相关问题

加入时间:2005-2-22 快乐下载

21.   FreeBSD相关问题 
21.1   
21.2  如何将一个512字节的文件写入主引导扇区 
21.3   
21.4   
21.5   
21.6  x86/FreeBSD 4.x下不能cp覆盖/kernel 
21.7  x86/FreeBSD下如何设置路由 
21.8   
21.9  什么是locale 
21.10 用cvsup安装vim 
21.11 FreeBSD下vi输入中文会显示\x??\x?? 
21.12 
21.13 
21.14 
21.15 UDMA ICRC error是什么意思 
21.16 Limiting closed port RST response什么意思 
21.17 
21.18 
21.19 
21.20 
-------------------------------------------------------------------------- 

21.2 如何将一个512字节的文件写入主引导扇区 

A: All of DOS Programmers 2001-10-16 18:05 

这个问题如果在90年代初MS-DOS盛行的时候出现,是要被人砍死的,如今时过境迁, 
居然能进入这份Unix文档,权当是一种追忆吧。所谓主引导扇区就是硬盘0柱面、0磁 
头、1扇区。启动DEBUG, 

-f 0200 l 0200 0        <-- 从0200h处开始清零,长512字节 
-n mbr                  <-- 假设我们的要处理的文件名为mbr 
-l 0200                 <-- 读到0200h处 
-d 03be 03ff            <-- 检查分区表 
XXXX:03B0                                            00 00                 .. 
XXXX:03C0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................ 
XXXX:03D0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................ 
XXXX:03E0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................ 
XXXX:03F0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA   ..............U. 


-a 100                  <-- 读主引导扇区的汇编代码 
XXXX:0100 mov ax, 0201  <-- 读取一个扇区,ah=02(功能码),al=01(扇区总数) 
XXXX:0103 mov bx, 0400  <-- 读取后存放在0400h处,长512字节 
XXXX:0106 mov cx, 0001  <-- ch=00(柱面号,10bit),cl=01(扇区号,6bit) 
XXXX:0109 mov dx, 0080  <-- dh=00(磁头号),dl=80h(驱动器号) 
XXXX:010C int 13        <-- int 13h 磁盘I/O BIOS 
XXXX:010E int 3         <-- 单步中断,可以换成int 20h 
XXXX:010F 
-g=100                  <-- 从0100h处开始执行 

AX=0050  BX=0400  CX=0001  DX=0080  SP=FFEE  BP=0000  SI=0000  DI=0000 
DS=XXXX  ES=XXXX  SS=XXXX  CS=XXXX  IP=010E   NV UP EI PL NZ NA PO NC 
XXXX:010E CC            INT     3 
-d 05be 05ff            <-- 检查分区表 
XXXX:05B0                                            80 01                 .. 
XXXX:05C0  01 00 06 FE 3F 7F 3F 00-00 00 41 60 1F 00 00 00   ....?.?...A`.... 
XXXX:05D0  01 80 0F FE FF FF 80 60-1F 00 22 3C A0 01 00 00   .......`.."<.... 
XXXX:05E0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................ 
XXXX:05F0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA   ..............U. 


-m 05be l 40 03be       <-- 复制分区表 
-d 03be l 40            <-- 确认分区表复制成功 
XXXX:03B0                                            80 01                 .. 
XXXX:03C0  01 00 06 FE 3F 7F 3F 00-00 00 41 60 1F 00 00 00   ....?.?...A`.... 
XXXX:03D0  01 80 0F FE FF FF 80 60-1F 00 22 3C A0 01 00 00   .......`.."<.... 
XXXX:03E0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................ 
XXXX:03F0  00 00 00 00 00 00 00 00-00 00 00 00 00 00         .............. 
-a 100                  <-- 写主引导扇区的汇编代码 
XXXX:0100 mov ax, 0301  <-- 写一个扇区,ah=03(功能码),al=01(扇区总数) 
XXXX:0103 mov bx, 0200  <-- 待写入数据存放在0200h处,长512字节 
XXXX:0106 mov cx, 0001  <-- ch=00(柱面号,10bit),cl=01(扇区号,6bit) 
XXXX:0109 mov dx, 0080  <-- dh=00(磁头号),dl=80h(驱动器号) 
XXXX:010C int 13        <-- int 13h 磁盘I/O BIOS 
XXXX:010E int 3         <-- 单步中断,可以换成int 20h 
XXXX:010F 
-g=100                  <-- 从0100h处开始执行 
-q                      <-- 退出DEBUG 

第2个硬盘驱动器号是81h,修改DX寄存器赋值语句即可。 

A: All of Solaris/FreeBSD/Linux Users 

dd if=<path to file> of=/dev/... bs=512 count=1 
                        ^^^^^^^^ 对应要处理的物理硬盘设备 

21.6 x86/FreeBSD 4.x下不能cp覆盖/kernel 

Q: 重新编译内核后用cp命令无法覆盖/kernel 

A: deepin <deepin@nsfocus.com> 

# ls -lo /kernel 
-rwxr-xr-x  1 root  wheel  schg /kernel* 
                           ^^^^注意这里,类似Linux的chattr那些东西 
# chflags noschg /kernel 

参看CHFLAGS(1)、INSTALL(1)手册页。这样修改后可以cp覆盖/kernel了。最后恢复 
chflags设置 

# chflags schg /kernel 

21.7 x86/FreeBSD下如何设置路由 

A: backend <backend@nsfocus.com> 2001-10-25 11:33 

/etc/defaults/rc.conf或者/etc/rc.conf中会有这样的设置 

-------------------------------------------------------------------------- 
defaultrouter="NO"              # Set to default gateway (or NO). 
static_routes=""                # Set to static route list (or leave empty). 
-------------------------------------------------------------------------- 

下面分析static_routes的用法,从/etc/rc.network脚本中可以看到这样的处理 

-------------------------------------------------------------------------- 
# Configure routing 

case ${defaultrouter} in 
[Nn][Oo] | '') 
        ;; 
*) 
        static_routes="default ${static_routes}" 
        route_default="default ${defaultrouter}" 
        ;; 
esac 

# Set up any static routes.  This should be done before router discovery. 

if [ -n "${static_routes}" ]; then 
        for i in ${static_routes}; do 
                eval route_args=\$route_${i} 
                route add ${route_args} 
        done 
fi 
-------------------------------------------------------------------------- 

注意eval命令导致二次变量替换,对上述脚本分析后可知static_routes用法如下 

-------------------------------------------------------------------------- 
defaultrouter="<IP>" 
static_routes="<name1> <name2> ..." 
route_<name1>="符合route add命令的语法格式" 
route_<name2>="符合route add命令的语法格式" 
... ... 
-------------------------------------------------------------------------- 

举例说明 

-------------------------------------------------------------------------- 
defaultrouter="192.168.0.1" 
static_routes="entry1 entry2" 
route_entry1="-net 10.10.1.0 -netmask 255.255.255.0 -gateway 192.168.254.1" 
route_entry2="-net 10.10.2.0 -netmask 255.255.255.0 -gateway 192.168.254.2" 
-------------------------------------------------------------------------- 

当然,你可以不用两个rc.conf文件,而是在/etc/rc.local中直接用route命令增加 
路由。 

21.9 什么是locale 

A: Shen Chuan-Hsing <statue@freebsd.sinica.edu.tw> 

locale 指定一组C语言处理自然语言(文字)的方式,也可以简单地说,locale反映了 
一组"地区性语言"的配置信息 

LC_ALL      代表所有的locale(如下) 

LC_CTYPE    字符定义(包含字符分类与转换规则) 

LC_MESSAGES 信息显示 

LC_TIME     时间格式 

LC_NUMERIC  数字格式 

LC_MONETARY 货币格式 

LC_COLLATE  字母顺序与特殊字符比较顺序 

其中与一般使用者息息相关的是是LC_CTYPE与LC_MESSAGES。LC_CTYPE直接关系到某 
些字符或內码在目前locale下是否可显示?要如何转换编码?对应到哪一个字?等等。 
LC_MESSAGES则关系到软件的信息输出是否符合地域性,例如:我们需要的是中文。 
而一个真正完整支持locale系统,是当使用者在shell prompt下,直接设置好环境变 
量后就马上切换到那种语言了,例如: 

% export LC_CTYPE=zh_TW.Big5 

设置locale的字符定义为台湾地区的Big5繁体中文码定义。有了正确的locale定义后, 
使得任何地区的的文字,只要在加入适当的locale data之后,C Library就能正确地 
处理软件显示信息,而我们使用的[中文]当然也不例外。 

21.10 用cvsup安装vim 

A: deepin <deepin@nsfocus.com> & scz <scz@nsfocus.com> 2001-11-20 09:42 

0) vim主站在http://www.vim.org/ 

1) # which cvsup 
   /usr/local/bin/cvsup 

   如果没有,就用www.google.com去搜一个好了,以"cvsup-bin tgz"做关键字 

   # wget http://people.freebsd.org/~jdp/s1g/i386-nogui/cvsup-16.1e.tgz 
   # pkg_add cvsup-16.1e.tgz 

2) # cd /usr/share/examples/cvsup 
   # cp ports-supfile scz 
   # vi scz 
   # cvsup -g -L 2 scz 

-------------------------------------------------------------------------- 

# cvsup配置文件 

*default host=cvsup.cn.FreeBSD.org 
*default base=/usr 
*default prefix=/usr 
*default release=cvs tag=. 
*default delete use-rel-suffix 
*default compress 

#ports-all 

ports-editors 
-------------------------------------------------------------------------- 

3) # cd /usr/ports/editors/vim 
   # make -DWITHOUT_X11 install  <-- 否则必须在X下使用vim 
   # whic vim 
   /usr/local/bin/vim            <-- vim直接支持输入中文 

21.11 FreeBSD下vi输入中文会显示\x??\x?? 

A: Shen Chuan-Hsing <statue@freebsd.sinica.edu.tw> 

这通常都是设定了LC_CTYPE为zh_TW.Big5(对大陆是zh_CN.EUC)或是没设定LC_CTYPE 
才会发生的问题,在~/.cshrc中加上下面的alias即可: 

alias vi 'env LC_CTYPE=en_US.ISO_8859-1 vi' 

参看PRINTENV(1)手册页了解更多env命令细节。直接改用vim也可以支持中文。 

21.15 UDMA ICRC error是什么意思 

Q: 在console上出现错误信息"UDMA ICRC error writing... ...",什么意思 

A: tt <warning3@nsfocus.com> 

通常是使用了40线的IDE硬盘线,然而硬盘被设置成使用DMA模式,这种模式需要80线 
硬盘线。也有可能是您的硬盘不支持DMA方式。解决方法有几种 

1) 换用一根80线的IDE硬盘线(没干过) 
2) 在CMOS BIOS中关闭对UDMA的支持 
3) 在FreeBSD中关闭对UDMA的支持 

   vi /etc/sysctl.conf 
   hw.atamodes=pio,pio,pio,pio, 

这样做,可能会降低硬盘速率。 

21.16 Limiting closed port RST response什么意思 

Q: console上出现"Limiting closed port RST response",什么意思 

A: tt <warning3@nsfocus.com> 

某些主机快速访问你的主机上一些没有开放的端口,你的主机正在回复RST报文,这 
是正常反应。但FreeBSD内核限制了每秒钟回复RST报文的数量,以防止发生可能的 
DoS攻击。例如,如果攻击者通过伪造源IP来向你的未开端口发送大量连接请求,就 
可能诱使你的主机向该主机发送RST报文。这可能导致受害主机所在网络的带宽占用。 
如果你不想看到上述信息,可以打开黑洞模式来停止响应RST报文。这也可以减缓远 
程攻击者对你的主机的扫描速度。 

# sysctl -w net.inet.tcp.blackhole=2 
# sysctl -w net.inet.udp.blackhole=1 

也可以在/etc/sysctl.conf中增加下列选项使黑洞模式每次启动后都生效 

net.inet.tcp.blackhole=2 
net.inet.udp.blackhole=1 




相关文章

相关软件