分类: BSD
2006-04-30 14:00:13
FreeBSD全能服务器安装手册之基础篇
更新记录:
2006-3-26修改了一些安装错误,并对文章版式进行了调整
2006-3-29增加相应基础知识
############################### BSD基础知识######################################
BSD基础知识
问:如何将 man 文件转为文本文件?
答:如要将 ls 的 man 手册转为文本文件,命令如下:
man ls | col -b > outfile
问:如何快速切换当前目录?
答:在 UNIX 下要在切换目录是非常方便的,以下列出各个快速切换当前目录的命令。
cd .. 返回上级目录
cd ../.. 进入上二级目录
cd - 返回上一次进入的目录
cd 进入用户自己的主目录
cd ~ 进入用户自己的主目录
注意:因为 UNIX 下的命令输入格式非常严格,所以不能像在 DOS 下那样将命令和参数连在一起输入,如要进行上级目录,在 DOS 下可能这样输入 cd.., 但在 UNIX 下,系统会说找不到 cd.. 这个命令,正确的输入是要在命令和参数之间有一个空格 cd ..。
问:让 ls 只显示目录名
答:ls -l | grep ^d
问:让 ls 只显示文件名
答:ls -l | grep ^f
问:让 ls 以颜色显示目录名和文件名
答:ls --color=auto ( under linux )。
要在 FreeBSD 下让 ls 以颜色显示目录名和文件名,需要安装 colorls 这个程序。可用 pkg_add 来进行安装,安装完成后,在 /etc/profile 或用户主目录下的 .bash_profile 文件中加入:
alias ls=ls -G
以后运行 ls 时,即会以颜色显示目录名和文件名。
问:修改 FreeBSD 的登录提示信息
答:每一次登录系统,系统都会派生一个 gettty 进行来响应用户的登录请求,此时 gettty 会向用户显示登录提示信息,而这些提示信息是由 gettty 的配置文件 /etc/gettytab 指定的,我们可以对 /etc/gettytab 进行修改来修改登录的提示信息。
问:如何加快 FreeBSD 的启动速度?
答:将 autoboot 0 加入到 /boot/loader.rc 里,可以不用等 10 秒
问:如何以 root 的身份远程登录系统?
答:要对远程的系统进行管理就需要用到远程登录。但在安全上的考虑,root 是不能直接远程登录系统,所以要以 root 的身份远程登录系统就要另想办法。我们可以先以一个普通用户的身份来登录系统,然后利用 su 功能将自身变成 root 的身份。这样就基本上同以 root 登录的效果是一样的。但有一些问题是要注意的:1、用 su 是,如果指定 - 参数,将会在转换身份时执行转换后用户的环境变量设置,即读即用户目录下的 .bash_profile (bash),如果只用 su 命令,则不会读取该文件的内容。2、要转换身份的普通用户必须是 wheel 组的成员,否则不能使用 su 命令转换成超级用户的身份。
问:如何快速引用主目录的文件?
答:~ 是指用户自己的主目录,所以如果用户要在其它目录引用自己的目录时,可以用以下的快捷方式。
cp ~/myfile /tmp 将用户的主目录下的 myfile 文件拷贝到 /tmp 目录下。
问:如何只显示子目录?
答:ls -l | grep ^d
问:如何只显示文件?
答:ls -l | grep ^-
问:如何统计当能目录下的子目录数?
答:ls -l | grep ^d | wc -l
问:如何统计当能目录下的文件数?
答:ls -l | grep ^- | wc -l
问:为什么不能进行象“pub-mail”这样的目录?
答:在 UNIX 下,shell 是用 - 来指参数的,所以要进行象“pub-mail”的目录时,shell 会认为 pub 是一个目录而 mail 是一个参数,所以是不能进行正确操作的。要进行这样的目录,只要在输入时在 - 前面加入 \ 即可。
cd pub\-mail
或用 "" 括起来:
cd "pub-mail"
问:如何解压扩展名为的 .tgz 和 .tar.gz文件?
答:以扩展名 .tgz 或 .tar.gz 结尾的文件是 tar 命令和 gzip 命令的结晶品。所以要解开以 .tgz 结尾的文件时,就需要用到 tar 和 gzip 命令。 假如要解压的文件名为 myTGZfile.tgz,操作方法如下:
gzip -D myTGZfile.tgz | tar xvf -
也可以直接用 tar 命令解压
tar zxvf myTGZfile.tgz
还可以用 tar 的 -C 参数指定解压后的目标目录。即如果要将文件解压到 /usr/local 目录下,不必将文件拷贝到 /usr/local 下再解压,可以在任何一个目录将该文件解压,然后用 -C 参数指定解压的目标目录 /usr/local,操作如下:
tar zxvf myTGZfile.tgz -C /usr/local
问:如何查找指定的正在运行的进程?
答:如要找名为 httpd 的进程,操作如下:
ps -auwx | grep httpd
问:用 mail 发送带附件的邮件
答:用重定向的方法可使 mail 发送带附件的邮件,操作如下:
mail charles@netease.com -s "Hi,friend!" < attach.file
问:如何重启一个进程?
答:如果刚刚修改了 httpd 的配置文件,可以用重启 httpd 进程的方法来让 httpd 重读 httpd 的配置文件,使新设置的内容生效。操作如下:
首先找出 httpd 的进程 ID(PID)
ps -auwx | grep httpd
kill -HUP httpd's PID
问:用 nohup 命令让用户退出后,用户的进程也可以继续运行
答:当用户退出登录后,用户所运行的程序会被自动 kill 掉,因为这些进程是承继用户的 shell 运行的,如果用户退出后,用户的 shell 也会被 kill 掉,那么那些由 shell 派生的进程自然会被 kill 掉。要让用户的进程在用户退出后也可以一直运行,可用 nohup 命令,操作如下:
nohup myProgram &
这样用户的 myProgram 进程会在后台运行。并且,当用户退出后,该进程也会一直运行,直至被用户或 root kill 掉或关机。
注意:因为用 nohup 运行的程序不会在显示器上显示运行信息,所以所有的信息会被保存在一个以进程 + .output 命名的文件里。
问:最近装了台FreeBSD4.0,两块网卡, 配置网卡的时候提示什么 no duplicate,到是不影响使用,但屏幕老提示: /kernel : arp : xxx.xxx.xxx.xxx is on 网卡一 but got reply from 00:a 0:24:26:ab:a0 on 网卡2 ,两块网卡在同一个网段.我想知道我如何禁止掉它? 如果必须修改内核源代码,那请问在什么地方修改?
答 1 :它仅仅是个log信息,不是错误,如果你一定要去掉这个信息的话,它在 /usr/src/sys/netinet/if_ehter.c 中
log(LOG_ERR, "arp: %s is on %s%d but got reply from %6D on %s%d\n",...);
去掉这句就可以了.
(由 phj 发表)
答 2 :使用arp命令进行静态arp映射,可能会防止这种错误信息。
(由 wb 发表)
(摘自 的 maillist)
问:如何将文件容量变为 0 字节?
答:如何要将文件 access_log 文件的容量变为 0 字节,可用以下命令:
cp /dev/null access_log
或
cat /dev/null > access_log
问:如何让启动脚本的设置生效?
答:我们通常会在 .bash_profile 等启动脚本里加入常用的设置,以免每次登录都要设置一次,但这个脚本只在用户登录时才会被读取。那么有没有办法让里面设置的内容即时生效呢?用以下方法即可:
source .bash_profile
也可以直接运行它一次:
sh .bash_profile
问:如何查看已输入的命令?(以 bash 为例)
答:当用户登录后,用户所输入的命令都会记录在用户目录下的 .bash_history 这个文件里。用 cat .bash_history 即可查看已输入的命令。
问:程序出错导致“死机”了怎办?
答:有时程序出现错误,可能会导致控制台不响应,出现死机现象。其实这时并不是机器的硬件出错,而只是程序不响应而已。只要从另外一个控制台登录(alt + Fx),然后用 ps auwx 查出出错程序的 PID,然后用 kill -9 PID 将其进程杀死即可。这样系统又可以继续进行各方面的操作了。
###################################基本设置#######################################
setenv PACKAGEROOT "ftp://ftp.tw.freebsd.org"
设置环境变量使pkg_add –r 源代码安装方式选择较快的服务器下载二进制软件安装
pkg_add -r cvsup-without-gui
下载并安装二进制代码程序cvsup-without-gui(cvsup-without-gui无图形支持在文本方式下工作的软件,用来同步代码及ports用。)
编辑/etc/rc.conf
ee /etc/rc.conf
增加以下(用来停止sendmail)
sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
mkdir /usr/home/chb/pkg_info
rehash
pkg_info | col -b > /usr/home/chb/pkg_info/pkg_info_cvsup-without-gui.txt
(主要是记录安装的软件,用来以后分析软件包的关联性)
################################同步系统代码###################################
cvsup -g -L 2 -h cvsup.tw.FreeBSD.org /usr/share/examples/cvsup/standard-supfile
(注意:standard-supfile这个文件同步前一定要查看里面内容是否正确!即:[*default release=cvs tag= ] 默认的情况下可能会把代码同步到当前的最新版本,当然这个最新版本可能是current版!所以一定要指定!
我的写法是:
*default release=cvs tag=RELENG_5_4 意思是同步到FreeBSD5.4的当前稳定版代码
还有就是值得注意的是:
目前同步代码可以选择两个文件
一是:stable-supfile
二是:standard-supfile
stable-supfile 一般已经指定了同步代码的版本,一般也不需要设定!但是用FreeBSD5.2.1的朋友们就需要注意了因为FreeBSD5.2.1会把代码同步到4系的最新版,我一直没明白FreeBSD开发小组为什么会这么做!一旦没有修改就同步的话,轻则造成部分软件无法使用重则造成内核错误根本就无法进入系统!我可亲身经历过
standard-supfile 我认为同步前最好核对一下里面关于同步代码版本的部分。
至于为什么选择standard-supfile而不选择stable-supfile我可是经过N次的重做才确定用standard-supfile
登陆系统后运行uname –v查看系统版本号你会发现
以standard-supfile同步的系统显示的是FreeBSD 5.4-RELEASE-p4 #0: Sat Jul 16 09:29:22 CST 2005 chb@ns1.tjhaina.net:/usr/obj/usr/src/sys/GENERIC
注意这里的5.4-RELEASE-p4用stable-supfile是不会出现p4的!
当然这只是我个人的做法!)
rehash
##############################同步ports软件包##################################
cvsup -g -L 2 -h cvsup.tw.FreeBSD.org /usr/share/examples/cvsup/ports-supfile
rehash
################################编译系统内核###################################
进入内核编辑区域
cd /usr/src
多线程支持加快编译速度(注意:cpu的占用率会升高)
make -j4 buildworld
备份原有内核
cd /usr/src/sys/i386/conf
cp GENERIC /root/GENERIC.OLD
编辑内核
ee NS1
建立内核
cd /usr/src
make buildkernel
安装内核
make installkernel
重新启动计算机
shutdown -r now
mergemaster -p
更新系统配置文件。这个命令后会跟随多个提示问题建议仔细阅读后做出选择,如果是安装系统后第一次同步代码,并是在没有安装任何软件的情况下,可以考虑执行mergemaster –ai
“跳过询问信息选择全部更新”
提示如下:
www# mergemaster -p
*** Creating the temporary root environment in /var/tmp/temproot
*** /var/tmp/temproot ready for use
*** Creating and populating directory structure in /var/tmp/temproot
*** Beginning comparison
*** Temp ./etc/master.passwd and installed have the same CVS Id, deleting
*** Temp ./etc/group and installed have the same CVS Id, deleting
*** Comparison complete
Do you wish to delete what is left of /var/tmp/temproot? [no] yes
//我选择了yes删除/var/tmp/temproot
//将会有以下显示结果
*** /var/tmp/temproot has been deleted
grep: /etc/make.conf: No such file or directory
*** Comparing make variables
*** From /etc/make.conf
*** From /usr/src/share/examples/etc/make.conf
更新系统配置文件
cd /usr/src
make installworld
mergemaster
shutdown -r now
删除/usr/obj(以防影响下一次编译内核)
cd /usr/obj
chflags -R noschg *
rm -rf *