Unix编程/应用问答中文版 ---21.FreeBSD相关问题
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 数字
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 数字
Tags:Unix,编程,应用,问答,中文版,FreeBSD,相关,问题

