linux 命令总结(转载)

linux 命令总结(转载)php

一、 永久更改ip ifconfig eth0 新ip 而后编辑/etc/sysconfig/network-scripts/ifcfg-eth0,修改iphtml

二、从Linux上远程显示Windows桌面java

安装rdesktop包node

三、 手动添加默认网关 以root用户,mysql

执行: route add default gw 网关的IP 想更改网关 linux

  • vi /etc/sysconfig/network-scripts/ifcfg-eth0 更改GATEWAY ios

  •  /etc/init.d/network restartweb

四、 查出22端口如今运行什么程序 正则表达式

lsof -i :22 sql

五、查看本机的IP,gateway, dns

IP: 以root用户登陆,执行ifconfig。

其中eth0是第一块网卡,lo是默认的设备

Gateway: 以root用户登陆,执行netstat -rn,

0.0.0.0开头的一行的Gateway即为默认网关

也能够查看/etc/sysconfig/network文件,里面有指定的地址!

DNS: more /etc/reslov.conf,内容指定以下: nameserver 202.206.32.1 nameserver 202.206.32.1

 

六、RH8.0命令行下轻松改变ping 的TTL值

#sysctl -w net.ipv4.ip_default_ttl=N (N=0~255),若N>255,则ttl=0

七、RH8.0命令行下轻松改变系统配置默认值

编辑/etc/sysctl.conf, 例如,将 net.ipv4.ip_forward = 0 变为 net.ipv4.ip_forward = 1 重启后生效,用sysctl -a查看可知

八、mount局域网上其余windows机器共享出的目录

mount -t smbfs -o username=guest,password=guest //machine/path /mnt/cdrom

九、容许|禁止root经过SSH登录

修改sshd_config:PermitRootLogin no|yes

十、 让root直接telnet登录

编辑/etc/pam.d/login,去掉 auth required /lib/security/pam_securetty.so 这句话

十一、 改变telnet的端口

/etc/services这个文件里可修改想要的端口号.重启守护进程

 

十二、终端模式有问题

export TERM=vt100

1三、模仿超级终端,LINUX里什么程序链接路由器和交换机(alstone) minicom

1四、 ssh上来能不能不自动断线

那是timetou的设置,修改TMOUT变量值

1五、用什么工具作入侵检测

snort

1六、Linux下检测程序内存泄漏的工具

cchecker或是efence库均可以

1七、linux下如何监视全部经过本机网卡的数据

tcpdump iptraf

1八、为何root执行好多命令都说command not found 必定是telnet上来的,而后su成root的,修改su命令格式,应该是su - root 0025 关闭用户的POP3权限(tiansgx) 把POP3的端口关了就能够了。 在文件/etc/services中找到这一行 pop-3 110/tcp 把这一行前加个'#',把它注释掉就能够了。

1九、锁定wu-ftp用户目录(wangla) 编辑ftpaccess文件 restricted-uid * 这一句很重要,限制了ftp用户在本身的目录里。

20、服务器怎么不让telnet

服务器上必须启动telnet服务 && 服务器的防火墙优先级应该设为低

2一、防止任何人使用su命令成为root

  • vi /etc/pam.d/su auth sufficient /lib/security/pam_rootok.so debug auth required /lib/security/pam_wheel.so group=wheel

  • 在/etc/pam. d/su配置文件中定义了wheel组.

2二、网卡激活了,却上不了网,怎么办?

trace一下,看看究竟是在那一块被阻住的。

  • Ping本身

  • Ping网关

  • Ping DNS

  • trace DNS If All=ok then nslookup www.sina.com.cn

 

Ping sina's address Tra sina' address 基本上就能够知道结果了

2三、在redhat9下配samba,win2000能访问,win98不能访问?

若是是wind98必需修改注册表:

HKEY_LOCAL_MACHINE/system/correntcontrolset/services/Vxd/VNETSUP下建个D值:EnablePlainTextpasswd,键值1

2四、如何获得网卡的MAC地址

arp -a | awk '{print $4}'

2五、如何获得网卡的IP地址

ifconfig eth0 |awk '/inet addr/ {split($2,x,":");print x[2]}'

2六、如何全面卸载Linux?如何删除它的分区?

  • 进入linux, 用fdisk删除linux分区和swap区。

  • 从新启动,在dos下运行fdisk /mbr,恢复主引导记录。

2七、修改主机名

vi /etc/sysconfig/network

修改HOSTNAME一行为HOSTNAME=主机名,重启后也能生效

2八、启动环境设置

Ret Hat Linux启动到文字界面(不启动xwindow)

将/etc/inittab中 id:5:initdefault: 一行中的5改成3

2九、redhat的自动升级更新问题

www.redhat.com/corp/support/errata/找到补丁,6.1之后的版本带有一个工具up2date,它可以测定哪些rpm包须要升级,而后自动从redhat的站点下载并完成安装。 升级除kernel外的rpm: up2date -u 升级包括kernel在内的rpm: up2date -u -f

30、windows下看linux分区的软件

Paragon.Ext2FS.Anywhere.2.5.rarexplore2fs-1.00-pre4.zip

3一、mount用法

fat32的分区

mount -o codepage=936,iocharset=cp936 /dev/hda7 /mnt/cdrom

ntfs的分区

mount -o iocharset=cp936 /dev/hda7 /mnt/cdrom

iso文件

mount -o loop /abc.iso /mnt/cdrom

软盘

mount /dev/fd0 /mnt/floppy

USB闪存

mount /dev/sda1 /mnt/cdrom

全部/etc/fstab内容

mount -a 能够指定文件格式"-t 格式", 格式能够为vfat, ext2, ext3等.

 

 32.a 删除名为-a的文件

rm ./-a

rm -- -a 告诉rm这是最后一个选项,

参见getopt ls -i 列出inum,

而后用find . -inum inum_of_thisfile -exec rm '{}' \;

32.b 删除名为\a的文件

rm \\a

32.c 删除名字带的/和‘\0'文件

这些字符是正常文件系统所不容许的字符,但可能在文件名中产生,如unix下的NFS文件系统在Mac系统上使用 1.解决的方法,把NFS文件系统在挂到不过滤'/'字符的系统下删除含特殊文件名的文件。 2.也可将错误文件名的目录其它文件移走,ls -id 显示含该文件目录的inum,umount 文件系统, clri清除该目录的inum,fsck,mount,check your lost+found,rename the file in it. 最好是经过WINDOWS FTP过去就能够删除任何文件名的文件了!

32.d 删除名字带不可见字符的文件

列出文件名并转储到文件:ls -l >aaa 而后编辑文件的内容加入rm命令使其内容成为删除上述文件的格式:

vi aaa [rm -r ******* ]

把文件加上执行权限 chmod +x aaa 执行 $aaa

32.e 删除文件大小为零的文件

rm -i `find ./ -size 0` find ./ -size 0 -exec rm {} \; find ./ -size |xargs rm -f

&很是有效 for file in *

#本身定义须要删除的文件类型 do if [ ! -s ${file} ] then rm ${file} echo "rm $file Success!" fi done

3三、加装xwindow

用linux光盘启动,选择升级,而后单独选择包,安装便可

3四、删除linux分区

作一张partition magic的启动软盘,启动后删除. 或者用win2000的启动光盘启动,而后删除.

3五、如何退出man    

q

3六、 找回忘记了的root口令(lilo/grub) 三种办法:

1.在系统进入单用户状态,直接用passwd root去更改

2.用安装光盘引导系统,进行linux rescue状态,将原来/分区挂接上来,做法以下: cd /mnt mkdir hd mount -t auto /dev/hdaX(原来/分区所在的分区号) hd cd hd chroot ./ passwd root 这样能够搞定

3.将本机的硬盘拿下来,挂到其余的linux系统上,采用的办法与第二种相同 rh8中

一. lilo

1. 在出现 lilo: 提示时键入 linux single 画面显示 lilo: linux single

2. 回车可直接进入linux命令行

3. #vi /etc/shadow 将第一行,即以root开头的一行中root:后和下一个:前的内容删除, 第一行将相似于 root::...... 保存

4. #reboot重启,root密码为空

二. grub

1. 在出现grub画面时,用上下键选中平时启动linux的那一项(别选dos),而后按e键 2. 再次用上下键选中平时启动linux的那一项(相似于kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/),而后按e键

3. 修改如今见到的命令行,加入single,结果以下: kernel /boot/vmlinuz-2.4.18-14 single ro root=LABEL=/

4. 回车返回,而后按b键启动,便可直接进入linux命令行

5. #vi /etc/shadow 将第一行,即以root开头的一行中root:后和下一个:前的内容删除, 第一行将相似于 root::...... 保存

6. #reboot重启,root密码为空 0015 使ctrl + alt + del失效 vi /etc/inittab 将ca::ctrlaltdel:/sbin/shutdown -t3 -r now这行注释掉,就能够了

3七、如何看出redhat的版本是7仍是8

cat /proc/version或者cat /etc/redhat-release或者cat /etc/issue

3八、文件在哪一个rpm中

www.rpmfind.net上搜,或者rpm -qf 文件名获得

3九、把man或info的信息存为文本文件

tcsh 为例: man tcsh | col -b > tcsh.txt info tcsh -o tcsh.txt -s

40、利用现存两个文件,生成一个新的文件

1. 取出两个文件的并集(重复的行只保留一份)

2. 取出两个文件的交集(只留下同时存在于两个文件中的文件)

3. 删除交集,留下其余的行

  • 1. cat file1 file2 | sort | uniq

  • 2. cat file1 file2 | sort | uniq -d

  • 3. cat file1 file2 | sort | uniq -u

4一、设置com1口,让超级终端经过com1口进行登陆 确认有/sbin/agetty,编辑/etc/inittab,添加 7:2345:respawn:/sbin/agetty /dev/ttyS0 9600 9600bps是由于联路由器缺省通常都是这种速率,也能够设成 19200、38400、57600、115200 修改/etc/securetty,添加一行:ttyS0,确保root用户能登陆 重启机器,就能够拔掉鼠标键盘显示器(启动时最好仍是要看看输出信息)了

4二、 删除目录下全部文件包括子目录

rm -rf 目录名

4三、查看系统信息

cat /proc/cpuinfo - CPU (i.e. vendor, Mhz, flags like mmx)

cat /proc/interrupts - 中断

cat /proc/ioports - 设备IO端口

cat /proc/meminfo - 内存信息(i.e. mem used, free, swap size)

cat /proc/partitions - 全部设备的全部分区

cat /proc/pci - PCI设备的信息

cat /proc/swaps - 全部Swap分区的信息

cat /proc/version - Linux的版本号 至关于 uname -r uname -a - 看系统内核等信息

4四、去掉多余的回车符 sed 's/^M//' test.sh > back.sh, 注意^M是敲ctrl_v ctrl-m获得的 或者 dos2unix filename

4五、切换X桌面

switchdesk KDE或者switchdesk GNOME

4六、通用的声卡驱动程序

OSS www.opensound.com/ ALSA www.alsa-project.org/

4七、改变redhat的系统语言/字符集

修改 /etc/sysconfig/i18n 文件,如 LANG="en_US",xwindow会显示英文界面, LANG="zh_CN.GB18030",xwindow会显示中文界面。

还有一种方法 cp /etc/sysconfig/i18n $HOME/.i18n 修改 $HOME/.i18n 文件,如 LANG="en_US",xwindow会显示英文界面, LANG="zh_CN.GB18030",xwindow会显示中文界面。 这样就能够改变我的的界面语言,而不影响别的用户

4八、把屏幕设置为90列

stty cols 90

4九、使用md5sum文件 md5sum isofile > hashfile, 将 md5sum 档案与 hashfile 档案内容比对, 验证杂凑值 是否一致 md5sum –c hashfile

50、一次解压多个zip文件

unzip "*",注意引号不能少

5一、看pdf文件

使用xpdf或者安装acrobat reader for linux

5二、查找权限位为S的文件

find . -type f \( -perm -04000 -o -perm -02000 \) -exec ls -lg {} \;

5三、装中文输入法 以redhat8为例

xwindow及其终端下的不用说了吧,缺省就安装了,用ctrl-space呼出。 如今讨论纯console,请下载zhcon.gnuchina.org/download/src/zhcon-0.2.1.tar.gz , 放在任一目录中,tar xvfz zhcon-0.2.1.tar.gz, cd zhcon-0.2.1, ./configure, make, make install。安装结束,要想使用,请运行zhcon,想退出,运行exit。

5四、把弹出的光盘收回来

#eject t

5五、cd光盘作成iso文件

cp /dev/cdrom xxxx.iso

5六、快速观看开机的硬件检测

dmesg | more

5七、查看硬盘的使用状况

df -k 以K为单位显示

df -h 以人性化单位显示,能够是b,k,m,g,t..

5八、查看目录的大小

du -sh dirname -s 仅显示总计 -h 以K、M、G为单位,提升信息的可读性。KB、MB、GB是以1024为换算单 位, -H以1000为换算单位。

5九、查找或删除正在使用某文件的进程

fuser filename fuser -k filename

60、安装软件

rpm -ivh aaa.rpm

tar xvfz aaa.tar.gz;

cd aaa;

./configure;

make;

make install

6一、字符模式下设置/删除环境变量

bash下

设置:export 变量名=变量值

删除:unset 变量名

csh下

设置:setenv 变量名 变量值

删除:unsetenv 变量名

6二、ls如何看到.开头的文件

ls -a

6三、rpm中的文件安装到哪里去了

rpm -qpl aaa.rpm

6四、使用src.rpm rpmbuild --rebuild *.src.rpm

6五、vim中显示颜色或不显示颜色 vi ~/.vimrc; 若是有syntax on,则显示颜色,syntax off,则不显示颜色

6六、linux是实时仍是分时操做系统

分时

6七、 make bzImage -j的j是什么意思

-j主要是用在系统硬件资源比较大的时候,比较富裕的时候,用这个能够来加快编译的速度,如-j 3

6八、源码包怎么没有

没有安装源代码,把光盘上rpm -i *kernel*source*.rpm装上,就能够看到源代码了。

6九、修改系统时间

date -s “2003-04-14 cst”,cst指时区,时间设定用date -s 18:10

70、开机就mount上windows下的分区

自动将windows的d盘挂到/mnt/d上,用vi打开/etc/fstab,加入如下一行 /dev/hda5 /mnt/d vfat defaults,codepage=936,iocharset=cp936 0 0 注意,先得手工创建一个/mnt/d目录

7一、linux怎么用这么多内存

为了提升系统性能和不浪费内存,linux把多的内存作了cache,以提升io速度

7二、FSTAB 最后的配置项里边最后两个数字是什么意思

第一个叫fs_freq,用来决定哪个文件系统须要执行dump操做,0就是不须要;

第二个叫fs_passno,是系统重启时fsck程序检测磁盘的顺序号 1 是root文件系统,2 是别的文件系统。fsck按序号检测磁盘,0表示该文件系统不被检测 dump 执行ext2的文件系统的备份操做 fsck 检测和修复文件系统

7三、linux中让用户的密码必须有必定的长度,而且符合复杂度(eapass) vi /etc/login.defs,改PASS_MIN_LEN

7四、linux中的翻译软件

星际译王 xdict

7五、不让显示器休眠

setterm -blank 0 setterm -blank n (n为等待时间)

7六、用date查询昨天的日期

date --date='yesterday'

7七、xwindow下如何截屏

Ksnapshot或者gimp

7八、解压小全

tar xvfj example.tar.bz2

tar xvfz example.tar.gz

tar xvfz example.tgz

tar xvf example.tar

unzip example.zip

7九、在多级目录中查找某个文件的方法

find /dir -name filename.ext du -a | grep filename.ext locate filename.ext

80、不让普通用户本身改密码

[root@xin_fc etc]# chmod 511 /usr/bin/passwd

又想让普通用户本身改密码

[root@xin_fc etc]# chmod 4511 /usr/bin/passwd

8一、显卡实在配不上怎么办

http://www.redflag-linux.com/,下了xfree86 4.3安装就能够了.

8二、超强删除格式化工具

PQMagic安全的、创建删除格式化的小工具:

sfdisk.exe for msdos  http://www.wushuang.net/soft/sfdisk.zip

8三、如何让xmms播放列表里显示正确的中文

 -*-*-*-*-*-iso8859-1,-misc-simsun-medium-r-normal--12-*-*-*-*-*-gbk-0,*-r-

把这个东西彻底拷贝到字体里面

操做方法: 右键单击xmms播放工具的任何地方 会看到一个"选项",而后选择"功能设定"选择"fonts" 而后把上面的字体完整的拷贝到"播放清单"和 "user x font

8四、linux下听MP3

redhat光盘原带的xmms不能播放MP3(无声), 要下载安装一个RPM包:xmms-mp3-1.2.7-13.p.i386.rpm安装便可.

打开xmms,ctl-p,在font栏中 先在上半部的小框内打勾,再选择 “fixed(misc) gbk-0 13”号字 体便可显示中文歌曲名。在音频输出插件中选择 "开放音频系统驱动 程序 1.2.7 [lioOSS.so]便可正常播放MP3文件.

8五、安装中文字体

先下载http://freshair.netchina.com.cn/~George/sm.sh

(参考文献: http://www.linuxeden.com/edu/doctext.php?docid=2679 )

 SimSun18030.ttc在微软网站可下载,

http://www.microsoft.com/china/windows2000/downloads/18 030.asp 它是个msi文件,在 mswindows中安装,装好后在windows目录下的fonts 目录里面就能够找到它。把simsun.ttc,SimSun18030.ttc,tahoma.ttf,tahomabd.ttf 拷贝到/usr/local/temp,而后下载的shell文件也放到这个目录里,而后打开终端 cd /usr/local/temp chmod 755 sm.sh ./sm.sh

8六、装载windows分区的FAT3二、FAT16文件系统

root身份进入KDE,点击桌面上的“起点”图标,在/mnt目录下创建以下文件夹:c,d,e,f,g,usb.分别用做windows下各分区和usb闪盘。   

用文本编辑器打开/etc/fstab 文件.加入以下:

/dev/hda1 /mnt/c vfat iocharset=gb2312,umask=0,codepage=936 0 0

/dev/hda5 /mnt/d vfat iocharset=gb2312,umask=0,codepage=936 0 0

/dev/hda6 /mnt/e vfat iocharset=gb2312,umask=0,codepage=936 0 0

/dev/hda7 /mnt/f vfat iocharset=gb2312,umask=0,codepage=936 0 0

/dev/hda8 /mnt/g vfat iocharset=gb2312,umask=0,codepage=936 0 0

/dev/cdrom /mnt/cdrom udf,iso9660 noauto,iocharset=gb2312,owner,kudzu,ro 0 0

/dev/sda1 /mnt/usb vfat iocharset=gb2312,umask=0,codepage=936 0 0

存盘退出. 从新启动后便可正常访问FAT32或FAT16格式分区,解决显示WINDOWS分区下和光盘中文文件名乱码 问题.其中共六列,每列用Tab键分开。注意此方法只能mount上Fat 分区格式.sda1是闪盘。

8七、在X下使用五笔和拼音,区位输入法

http://www.fcitx.org/ 上下载fcitx的rpm包安装便可

8七、在Linux下如何解压RAR文件

http://www.linuxeden.com/download/softdeta....php?softid=883下载RAR for Linux 3.2.0,解压后make 而后能够用unrar e youfilename.rar解压rar文件

8八、硬盘安装后怎么添加/删除rpm包

redhat-config-packages --isodir= 能够指定iso文件所在的目录

8九、字符下控制音量

aumix

90、用dd作iso

dd if=/dev/cdrom of=/tmp/aaa.iso

9一、 删除几天之前的全部东西(包括目录名和目录中的文件)

find . -ctime +3 -exec rm -rf {} \; find ./ -mtime +3 -print|xargs rm -f -r

9二、用户的crontab在哪里

/var/spool/cron/下以用户名命名的文件

9三、以不一样的用户身份运行程序

su - username -c "/path/to/command" 有时候须要运行特殊身份的程序, 就可让su来作

9四、如何清空一个文件

> filename

9五、为何OpenOffice下不能显示中文

更改字体设置 tools->options->font replacement Andale Sans UI -> simsun

9六、如何备份Linux系统

Symantec Ghost 7.5之后的版本支持Ext3 native复制

9七、linux上的partition magic

Linux下一个有用的分区工具: parted 能够实时修改分区大小, 删除/创建分区.

9八、/proc/sys/sem中每项表明什么意思?

 /proc/sys/sem内容以下 250 32000 32 128 这4个参数依次为

SEMMSL(每一个用户拥有信号量最大数量),

SEMMNS(系统信号量最大数量),

SEMOPM(每次semop系统调用操做数),

SEMMNI(系统信号量集最大数量)

9九、 Grub 引导菜单里 bigmem smp up 都是什么意思?

smp: (symmetric multiple processor)对称多处理器模式

bigmem: 支持1G 以上内存的优化内核

up:(Uni processor) 单处理器的模式

100、Oracle的安装程序为何显示乱码?

如今Oracle的安装程序对中文的支持有问题,只能使用英文界面来安装,在执行runinstaller以前,执行:export LANG=C;export LC_ALL=C

10一、 linux下文件和目录的颜色表明什么

蓝色表示目录;绿色表示可执行文件;红色表示压缩文件;浅蓝 色表示连接文件;灰色表示其它文件;红色闪烁表示连接的文件有问题了;黄色是设备文件,包括block, char, fifo。 用dircolors -p看到缺省的颜色设置,包括各类颜色和“粗体”,下划线,闪烁等定义。

10二、mysql的数据库存放在什么地方

1. 若是使用rpm包安装,应该在/var/lib/mysql目录下,以数据库名为目录名

2. 若是源码安装在/usr/local/mysql中,应该在/usr/local/mysql/var中,以数据库名为目录名

10三、如何新增一块硬盘

1、关机,物理链接硬盘 若是是IDE硬盘,注意主、从盘的设置;若是是SCSI硬盘,注意选择一个没有被使用的ID号。

2、开机,检查硬盘有没有被linux检测到 dmesg |grep hd*(ide硬盘) dmesg |grep sd*(SCSI硬盘) 或者 less /var/log/dmesg 若是没有检测到新硬盘,重启,检查连线,看看bios有没有认出它来。

3、分区 能够使用fdisk,Sfdisk或者parted(GNU分区工具,linux下的partition magic) 4、格式化 mkfs 5、修改fstab vi /etc/fstab

 

10四、linux下怎么看分区的卷标

e2label /dev/hdxn, where x=a,b,c,d....; n=1,2,3...

10五、RH8,9中安装后如何添加新的语言包

.8.0中

1.放入第一张光盘

2.cd /mnt/cdrom/Redhat/RPMS

3.rpm -ivh ttfonts-ZH_CN-2.11-29.noarch.rpm(简体中文,能够用tab键来补齐后面的部分,以避免输入有误)

4.rpm -ivh ttfonts-ZH_TW-2.11-15.noarch.rpm(繁体中文) 若是还想装日文、韩文,试试第二张光盘上的ttfonts*.rpm.

.9.0中

9.0不在第一张盘上,在第三张盘上.rpm包名分别为: ttfonts-zh_CN-2.12-1.noarch.rpm(简体中文) ttfonts-zh_TW-2.11-19.noarch.rpm

 

106 配置telnet服务

1. 安装telnet-server软件包。(略)
2. 设置telnet-server的启动运行
   telnet server不做为独立的服务器程序运行,而是受xinetd程序的控制,启动配置文件为/etc/xinetd.d/telnet,默认xinetd程 序并不启动该服务,可在chkconfig --list看出telnet是关闭的,/etc/xinetd.d/telnet中disable=yes可经过下面的方式启动telnet server:
 1) chkconfig telnet on  //该命令修改了/etc/xinetd.d/telnet的配置,设置disable=no
 2) service xinetd restart
 再次chkconfig --list看到telnet server已经启动。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
107 让bash命令行能够输入汉字,

编辑~/.inputrc,添加:
set meta-flag on
set convert-meta off
set output-meta on

让less命令显示汉字,在~\.bashrc中加入:
export LESSCHARSET=latin1

让ls命令显示汉字文件和目录名,在~\.bashrc中加入:
alias ls='ls --show-control-chars --color=auto'
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
108 Linux下配置DHCP服务器

配置DHCP

   Redhat使用dhcpd进程提供DHCP服务,启动时dhcpd自动读它的配置文件/etc/dhcpd.conf。dhcpd将客户的租用信息保 存在/var/lib/dhcp/dhcpd.leases文件中,该文件不断被更新,从这里面能够查到IP地址分配的状况。

  dhcpd为了向一个子网提供服务,须要知道子网的网络地址和网络掩码,而且还要知道地址分配的范围,下面给出一个简单的dhcpd.conf文件:

  subnet 192.168.100.0 netmask 255.255.255.0 {

  range 192.168.100.10 192.168.100.253;

  }

  此例中,dhcpd将给192.168.100.0网络分配192.168.100.10到192.168.100.253的IP地址。

  租期时间能够从0秒到无限长,能够根据须要来定。缺省的租期时间为一天,即86400秒。能够为主机定义两个租期长度:

  default-lease-time 默认租期时间;

  max-lease-time 用户能够得到的最长租期时间。

  下面的配置将缺省的租期时间设置为10分钟,最长租用时间为1小时:

  subnet 192.168.100.0 netmask 255.255.255.0 {

   range 192.168.100.10 192.168.100.253;

   default-lease-time 600;

   max-lease-time 3600;

  }

  DHCP还能够向客户提供更多的参数,这些参数能够用option来指定,例如:

  subnet 192.168.100.0 netmask 255.255.255.0 {

  range 192.168.100.10 192.168.100.253;

   default-lease-time 600;

   max-lease-time 3600;

   option subnet-mask 255.255.255.0;

   option routers 192.168.100.254; 默认路由

   option domain-name-servers 202.102.134.68; DNS服务器

  }

如今你们对DHCP配置应该有个了解了,其实过程就是这么简单,中间就隔了一层窗户纸。

  实际演练

  接下来给你们一个示例,把个人redhat9.0配置成一台DHCP服务器。

  vi /etc/dhcpd.conf

  配置后,个人机器的该文件内容以下(注释的部分都已经删除掉了,至于原文,你们能够对照/usr/share/doc/dhcp-3.0pl1/dhcpd.conf.sample文件):

  [root@rh9 test]# more /etc/dhcpd.conf

  ddns-update-style interim;

  ignore client-updates;

  subnet 192.168.0.0 netmask 255.255.255.0 {

   option routers 192.168.0.1;

   option subnet-mask 255.255.255.0;

   option broadcast-address 192.168.0.255;

   option domain-name-servers

  202.96.199.133, 202.96.133.134;

   range dynamic-bootp 192.168.0.1 192.168.0.255;

   default-lease-time 21600;

   max-lease-time 43200;

  }


解释一下配置部分:

首先subnet定义了网络的地址,而后option routers定义了网关地址;

subnet-mask定义子网掩码;

broadcast-address定义广播地址;

domain-name-servers定义DNS NAMESERVER的地址;

dynamic-bootp是给客户端分配的地址,定义的是192.168.0.1-- 192.168.0.255整个网段地址;

最后2行是讲分配出的地址的缺省租期时间设置为10分钟,最长租用时间为1小时。

这样,一个DHCP服务器就配置好了。

  咱们能够测试一下结果:在另一个redhat linux7.2上,把IP设置成DHCP主机的IP地址,经过netconfig命令配置。

  检查配置:

  [root@rh72 root]# more /etc/sysconfig/ network-scripts/ifcfg-eth0

  DEVICE=eth0

  ONBOOT=yes

  BOOTPROTO=dhcp

  [root@rh72 root]#

  肯定网卡已是DHCP的了。

  [root@rh72 root]# ifconfig

  eth0 Link encap:Ethernet HWaddr 00:0C:29:A3:C6:71

   inet addr:192.168.0.254 Bcast:192.168.0.255 Mask:255.255.255.0

  查看地址,发现ETH0已经分配了一个254的地址,说明DHCP服务器配置成功。

  小结

  至此,咱们已经完成了一台Linux DHCP服务器的安装和配置工做。在实际的使用过程当中,上述操做步骤应该能够知足通常应用的需求,可是咱们还须要常常研究具体的命令参数,让DHCP服务器能更好地为咱们服务

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
109  VNC 虚拟网络计算

  VNC(Virtual Network Computing,虚拟网络计算),是用来显示远程计算机整个桌面的轻量型远程控制程序。
1. 下载:http://www.uk.research.att.com/vnc
2. 使用方法:
1) 服务器端:
#vncserver
$vncserver
注意到每一个用户均可以启动本身的vncserver,每一个用户能够启动多个vncserver,用显示端口号:1,:2,:3等等来标识。
2) 客户端:
a)在linux下,运行vncviewer命令便可,服务器地址的写法形如192.168.3.119:1
b)在windows下,运行windows版本的vncviewer便可,用法与linux下相近。
c)用浏览器(平台无关),做为java applet来实现,以形如http://192.168.3.119:5801的方式来启动
3) 密码修改:
第一次启动vncserver会提示输入密码,之后要修改的话,运行:
#vncpassword
4) 中止vnc server:
#vncserver -kill :1
#vncserver -kill :2
注意到vncserver只能由启动它的用户来关闭,即时是root也不能关闭其它用户开启的vncserver,除非用kill命令暴力杀死进程。
5) 指定显示端口号启动VNC server:
#vncserver :3
$vncserver :6
6) 设置VNC server分辨率:
#vncserver -geometry 800x600
#vncserver -geometry 640x480
7) 设置vncserver的色深:
8位为256色,16位为64k色
#vncserver -depth 8
#vncserver -depth 16
8) 稳定性设置:
vncserver默认在多个客户机链接同一个vncserver的显示端口时,vncserver端口旧链接,而为新链接服务,可经过-dontdisconnect拒绝新链接请求而保持旧的链接。
9) 设置vncserver的同一个显示端口能够链接多个客户机
#vncserver -alwaysshared
10) vnc的反向链接
大多数状况下,vncserver总处于监听状态,vnc client主动向服务器发出请求从而创建链接。然而在一些特殊的场合,须要让vnc客户机处于监听状态,vncsrever主动向客户机发出链接请求,此谓vnc的反向链接。主要步骤:
a) 启动vnc client,使vncviewer处于监听状态
#vncviewer -listen
b) 启动vncserver
#vncserver
c) 在vncserver端执行vncconnect命令,发起server到client的请求
#vncconnect -display :1 192.168.3.69
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
110 linux下操做光盘的几条命令
1. 从光盘中制做iso文件:
#cp /dev/cdrom ISO文件名
同理能够把上面的/dev/cdrom换成/dev/fd0、/dev/sda1等移动存储设备的设备文件名制做软盘、U盘的iso映象文件
2. 使用目录文件制做iso文件
#mkisofs -r -o ISO文件名 路径名
3. 刻录光盘
先检测光盘刻录机的参数:
#cdrecord -scanbus
……
scsibus0:
  0,0,0 0)'SAMSUNG' 'CDRW/DVD DATA-348B' 'T501' Removable CDROM
……
而后刻录:
#cdrecord -v speed=刻录速度 dev=刻录机设备号 ISO文件名
如:
#cdrecord -v speed=8 dev=0,0 /home/share/data.iso

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
111 GRUB入门
LILO 须要知道你的内核在驱动器上的实际位置,可是GRUB却不须要,它不只能读文件系统还能识别内核映像,并且它还支持最新的 2.4.1 内核所带的 Reiser 日志文件系统。这意味着你没必要在更新内核或者改变配置文件以后从新安装GRUB。若是BIOS 支持LBA 的话,也没有1024 柱面的问题。另外还支持网络启动和无盘客户机。

然而,或许咱们对LILO 太熟悉了吧,也或许GRUB 还有不少须要完善?总之,安装 GRUB 看起来并非一件很轻松的事情。下面咱们就详细介绍GRUB 的安装和配置。


安装

在 /tmp 目录下解开文件:

# tar zxvf grub-0.5.96.1.tar.gz

进入 "grub-0.5.96.1" 目录,编译程序:

# ./configure
# make
# make install

配置:

和许多咱们日常看到的多重启动管理程序同样,GRUB 供一个菜单界面(LILO 不是菜单界面的)。GRUB的
缺省安装位置为 /boot/grub ,配置文件也放在这个目录下。缺省的配置文件名为 menu.lst,这个文件的功能就像和 lilo.conf同样,定义多重启动选项以及磁盘映像。

咱们来看一个 menu.lst 文件的示范例子:

timeout 5
color black/yellow yellow/black
default 0
password freeos

title My Mandrake
kernel (hd0,1)/vmlinuz root=/dev/hda3 idebus=66

title My Red Hat
kernel (hd0,6)/boot/vmlinuz root=/dev/hda7 idebus=66

title W2K Pro
root (hd0,0)
makeactive
chainloader +1

让咱们详细分析一下各个选项的含义:

timeout - 缺省入口的显示延迟时间(秒)
color - 菜单显示的颜色组合,第一组颜色为前景色和背景色,
第二组为高亮时的组合。
default - 定义缺省的启动入口,这里的 0 就是使用定义的第一个入口。
password - 定义进入GRUB 高级特性时须要的口令。GRUB 利用其能读取文件系统的特点,提供十分强大的功能。例如用户能够在grub 的启动提示符下输 'cat /etc/shadow' 来读包含加密口令的文件,而不须要进入你的系统!因此,为你的系统设置一个口令十分重要。

下面分析启动入口,每个入口都应该以一个 'title' 的关键字开始,后面跟上对该启动入口的描述。接下来就是 'kernel' 入口,

kernel (hd0,1)/vmlinuz root=/dev/hda3 hdc=ide-scsi

根 据 GRUB 对设备的命名规则,咱们能够很容易的理解上面这行的含义:软驱设备名为 fdx ,硬盘为 hdx,须要记住的是 GRUB 从0 开始计数,因此第一台硬盘为 hd0 而不是 hd1。设备名用括号括起来,硬盘上的分区用逗号链接。例如 (hd0,1) 表示第一台硬盘上的第二个分区,而 (hd1,5) 就表示第二台硬盘上的第一个逻辑分区。

GRUB 能读取大多数文件系统,上面这一行指定 GRUB 寻找
位 于第一台硬盘上第二基本分区上的 /vmlinuz 文件,你也须要指定 'root=/dev/hda3' (假设你的根文件系统位于/dev/hda3),不然内核就不能挂接上根文件系统,以后就是你本身想加入的其余参数了。这些参数就和LILO 启动时传递给内核的参数同样,或者说和 lilo.conf 中 append 后面的参数同样。

另一个比较特别的入口是启动Windows 2000 的入口,root 入口指向 Windows 2000 的安装位置(C:\),接下来的入口设置分区的激活标志,最后的入口告诉 GRUB 搜索分区的第一个扇区来启动那里的操做系统。

以上是对GRUB 的一个典型的多重启动设置的分析,在正式开始安装GRUB 以前,建议你手头有一张LILO 启动盘或者一张应急启动盘,以防不测。

以root 登陆,输入"grub"命令之后,就会看到以下的画面:

GRUB version 0.5.96.1 (640K lower / 3072K upper memory)

[ Minimal BASH-like line editing is supported. For the first word, TAB lists possible command completions. Anywhere else TAB lists the possible completions of a device/filename. ]

grub>

以上看到的就是 grub 提示符,咱们要在这个提示符下面安装GRUB。

grub> install (hd0,1)/boot/grub/stage1 d (hd0) (hd0,1)/boot/grub/stage2 p (hd0,1)/boot/grub/menu.lst

GRUB 分为两个主要的步骤, stage1 和 stage2。Stage1 是一段嵌入MBR 的迷你代码。Stage2 是主要部分,在 stage1 把控制权传递给它后,就由它来接管全部事情。

install 后面指定stage1 的位置,咱们不只说明了其分区
位置:(hd0,1),由于 GRUB 能读取文件系统,因此还说
明 了分区上目录位置:/boot/grub/stage1,d 参数表示 stage1 将寻找 stage2 所在的磁盘。接着就是 GRUB 的安装位置:(hd0) ,这里就是指安装在MBR。后面的参数指定 stage2 的位置:(hd0,1),和 stage1 的定义同样。p 参数指定 menu.lst 文件的位置。

对于 /boot 做为单独的分区的例子,须要采用下面的命令行:

grub> install (hd0,1)/grub/stage1 d (hd0) (hd0,1)/boot/grub/stage2 p (hd0,1)/grub/menu.lst

以 上例子假设 /boot 位于 (hd0,1) (也就是hda2),而 / 位于(hd0,2) (也就是 hda3) ,咱们不能用 '(hd0,2)/boot/grub/stage1' ,由于GRUB 不知道 (hd0,1) 是 /boot ,因此必须首先指向挂接为 /boot 的分区,而后把目录指向那里。

从新启动系统之后,就能够看到 GRUB 菜单了。看起来彷佛很繁琐,这么长的命令行,是的!对于那些 LILO 能正常使用的人来讲,或许没有必要来玩这个危险游戏。可是,对于那些想使用 GRUB 加强功能的人来讲,试一下 GRUB 或许会有意想不到的惊喜。个人朋友告诉我说他不能用 LILO 识别 1G 内存,但愿 GRUB 能帮助办到。本文旨在抛砖引玉,
GRUB 还有不少的功能有待您的开发。

若是在配置和安装中遇到了麻烦,为何不使用 info grub 或者 man grub 来寻求帮助呢?或者干脆上
GRUB 的官方网站

http://www.gnu.org/software/grub/

寻找 FAQ 和其余文档呢?

GRUB 的下载地点:
ftp://alpha.gnu.org:/gnu/grub/


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
112 rpm命令参数列表
1.安装一个包
    # rpm -ivh
2.升级一个包
    # rpm -Uvh
3.移走一个包
    # rpm -e
4.安装参数
    --force 即便覆盖属于其它包的文件也强迫安装
    --nodeps 若是该RPM包的安装依赖其它包,即便其它包没装,也强迫安装。
5.查询一个包是否被安装
    # rpm -q < rpm package name>
6.获得被安装的包的信息
    # rpm -qi < rpm package name>
7.列出该包中有哪些文件
    # rpm -ql < rpm package name>
8.列出服务器上的一个文件属于哪个RPM包
    #rpm -qf
9.可综合好几个参数一块儿用
    # rpm -qil < rpm package name>
10.列出全部被安装的rpm package
    # rpm -qa
11.列出一个未被安装进系统的RPM包文件中包含有哪些文件?
    # rpm -qilp < rpm package name>
   
RPM命令手册
1、安装

命令格式:

rpm -i ( or --install) options file1.rpm ... fileN.rpm

参数:

file1.rpm ... fileN.rpm 将要安装的RPM包的文件名

详细选项:

-h (or --hash) 安装时输出hash记号 (``#'')
--test 只对安装进行测试,并不实际安装。
--percent 以百分比的形式输出安装的进度。
--excludedocs 不安装软件包中的文档文件
--includedocs 安装文档
--replacepkgs 强制从新安装已经安装的软件包
--replacefiles 替换属于其它软件包的文件
--force 忽略软件包及文件的冲突
--noscripts 不运行预安装和后安装脚本
--prefix 将软件包安装到由 指定的路径下
--ignorearch 不校验软件包的结构
--ignoreos 不检查软件包运行的操做系统
--nodeps 不检查依赖性关系
--ftpproxy 用 做为 FTP代理
--ftpport 指定FTP的端口号为

通用选项

-v 显示附加信息
-vv 显示调试信息
--root 让RPM将指定的路径作为"根目录",这样预安装程序和后安
装程序都会安装到这个目录下
--rcfile 设置rpmrc文件为
--dbpath 设置RPM 资料库存所在的路径为

2、删除

命令格式:

rpm -e ( or --erase) options pkg1 ... pkgN

参数

pkg1 ... pkgN :要删除的软件包

详细选项

--test 只执行删除的测试
--noscripts 不运行预安装和后安装脚本程序
--nodeps 不检查依赖性

通用选项

-vv 显示调试信息
--root 让RPM将指定的路径作为"根目录",这样预安装程序和后安装
程序都会安装到这个目录下
--rcfile 设置rpmrc文件为
--dbpath 设置RPM 资料库存所在的路径为

3、升级

命令格式

rpm -U ( or --upgrade) options file1.rpm ... fileN.rpm

参数

file1.rpm ... fileN.rpm 软件包的名字

详细选项

-h (or --hash) 安装时输出hash记号 (``#'')
--oldpackage 容许"升级"到一个老版本
--test 只进行升级测试
--excludedocs 不安装软件包中的文档文件
--includedocs 安装文档
--replacepkgs 强制从新安装已经安装的软件包
--replacefiles 替换属于其它软件包的文件
--force 忽略软件包及文件的冲突
--percent 以百分比的形式输出安装的进度。
--noscripts 不运行预安装和后安装脚本
--prefix 将软件包安装到由 指定的路径下
--ignorearch 不校验软件包的结构
--ignoreos 不检查软件包运行的操做系统
--nodeps 不检查依赖性关系
--ftpproxy 用 做为 FTP代理
--ftpport 指定FTP的端口号为

通用选项

-v 显示附加信息
-vv 显示调试信息
--root 让RPM将指定的路径作为"根目录",这样预安装程序和后安装程序都会安装到这个目录下
--rcfile 设置rpmrc文件为
--dbpath 设置RPM 资料库存所在的路径为

4、查询

命令格式:

rpm -q ( or --query) options

参数:

pkg1 ... pkgN :查询已安装的软件包

详细选项

-p (or ``-'') 查询软件包的文件
-f 查询属于哪一个软件包
-a 查询全部安装的软件包
--whatprovides 查询提供了 功能的软件包
-g 查询属于 组的软件包
--whatrequires 查询全部须要 功能的软件包

信息选项

显示软件包的所有标识
-i 显示软件包的概要信息
-l 显示软件包中的文件列表
-c 显示配置文件列表
-d 显示文档文件列表
-s 显示软件包中文件列表并显示每一个文件的状态
--scripts 显示安装、卸载、校验脚本
--queryformat (or --qf) 以用户指定的方式显示查询信息
--dump 显示每一个文件的全部已校验信息
--provides 显示软件包提供的功能
--requires (or -R) 显示软件包所需的功能

通用选项

-v 显示附加信息
-vv 显示调试信息
--root 让RPM将指定的路径作为"根目录",这样预安装程序和后安装程序都会安装到这个目录下
--rcfile 设置rpmrc文件为
--dbpath 设置RPM 资料库存所在的路径为

5、校验已安装的软件包

命令格式:

rpm -V ( or --verify, or -y) options

参数

pkg1 ... pkgN 将要校验的软件包名

软件包选项

-p Verify against package file
-f 校验所属的软件包
-a Verify 校验全部的软件包
-g 校验全部属于组 的软件包

详细选项

--noscripts 不运行校验脚本
--nodeps 不校验依赖性
--nofiles 不校验文件属性

通用选项

-v 显示附加信息
-vv 显示调试信息
--root 让RPM将指定的路径作为"根目录",这样预安装程序和后安装程序都会安装到这个目录下
--rcfile 设置rpmrc文件为
--dbpath 设置RPM 资料库存所在的路径为

6、校验软件包中的文件

语法:

rpm -K ( or --checksig) options file1.rpm ... fileN.rpm

参数:

file1.rpm ... fileN.rpm 软件包的文件名

Checksig--详细选项

--nopgp 不校验PGP签名

通用选项

-v 显示附加信息
-vv 显示调试信息
--rcfile 设置rpmrc文件为


7、其它RPM选项

--rebuilddb 重建RPM资料库
--initdb 建立一个新的RPM资料库
--quiet 尽量的减小输出
--help 显示帮助文件
--version 显示RPM的当前版本
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%55
113 chsh 更换你登入时所用的shell
名称
chsh - 更换你登入时所用的shell

语法
chsh [ -s shell ] [ -l ] [ -u ] [ -v ] [ username ]


描述
chsh 用来更换你登入时所用的shell 。在命令列没指定shell。 chsh 会提示一个给你。

有效的shell

chsh
可用指定路径全名的方式来指定任何一个可执行的档案。 然而,若是此 shell并没纪录在 /etc/shells 档上,则chsh会提出警告讯息。

选项
-s, --shell 变动你的登入shell.
-l, --list-shells
列出纪录在 /etc/shells 的shell。
-u, --help
使用短讯。
-v, --version
版本资讯

相关文件
login(1) , passwd(5) , shells(5)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
114 在linux下一些经常使用的关机/重启命令

有shutdown、halt、reboot、及init,它们均可以达到重启系统的目的,但每一个命令的内部工做过程是不一样的。

   1.shutdown

   shutdown命令安全地将系统关机。 有些用户会使用直接断掉电源的方式来关闭linux,这是十分危险的。由于linux与windows不一样,其后台运行着许多进程,因此强制关机可能会导 致进程的数据丢失﹐使系统处于不稳定的状态﹐甚至在有的系统中会损坏硬件设备。

  而在系统关机前使用shutdown命令﹐系统管理员会通知全部登陆的用户系统将要关闭。而且login指令会被冻结﹐即新的用户不能再登陆。直接关机或 者延迟必定的时间才关机都是可能的﹐还可能重启。这是由全部进程〔process〕都会收到系统所送达的信号〔signal〕决定的。这让像vi之类的程 序有时间储存目前正在编辑的文档﹐而像处理邮件〔mail〕和新闻〔news〕的程序则能够正常地离开等等。

  shutdown执行它的工做是送信号〔signal〕给init程序﹐要求它改变runlevel。Runlevel 0被用来停机〔halt〕﹐runlevel 6是用来从新激活〔reboot〕系统﹐而runlevel 1则是被用来让系统进入管理工做能够进行的状态﹔这是预设的﹐假定没有-h也没有-r参数给shutdown。要想了解在停机〔halt〕或者从新开机 〔reboot〕过程当中作了哪些动做﹐你能够在这个文件/etc/inittab里看到这些runlevels相关的资料。

   shutdown 参数说明:
   [-t] 在改变到其它runlevel以前﹐告诉init多久之后关机。
   [-r] 重启计算器。
   [-k] 并不真正关机﹐只是送警告信号给每位登陆者〔login〕。
   [-h] 关机后关闭电源〔halt〕。
   [-n] 不用init﹐而是本身来关机。不鼓励使用这个选项﹐并且该选项所产生的后果每每不老是你所预期获得的。
   [-c] cancel current process取消目前正在执行的关机程序。因此这个选项固然没有时间参数﹐可是能够输入一个用来解释的讯息﹐而这信息将会送到每位使用者。
   [-f] 在重启计算器〔reboot〕时忽略fsck。
[-F] 在重启计算器〔reboot〕时强迫fsck。
   [-time] 设定关机〔shutdown〕前的时间。
     

2.halt----最简单的关机命令
   其实halt就是调用shutdown -h。halt执行时﹐杀死应用进程﹐执行sync系统调用﹐文件系统写操做完成后就会中止内核。
   参数说明:
   [-n] 防止sync系统调用﹐它用在用fsck修补根分区以后﹐以阻止内核用老版本的超级块〔superblock〕覆盖修补过的超级块。
   [-w] 并非真正的重启或关机﹐只是写wtmp〔/var/log/wtmp〕纪录。
   [-d] 不写wtmp纪录〔已包含在选项[-n]中〕。
   [-f] 没有调用shutdown而强制关机或重启。
   [-i] 关机〔或重启〕前﹐关掉全部的网络接口。
   [-p] 该选项为缺省选项。就是关机时调用poweroff。
  
3.reboot
reboot的工做过程差很少跟halt同样﹐不过它是引起主机重启﹐而halt是关机。它的参数与halt相差很少。

4.init
    init是全部进程的祖先﹐它的进程号始终为1﹐因此发送TERM信号给init会终止全部的用户进程﹑守护进程等。shutdown 就是使用这种机制。init定义了8个运行级别(runlevel),init 0为关机﹐init 1为重启。关于init能够长篇大论﹐这里就再也不叙述。另外还有telinit命令能够改变init的运行级别﹐好比﹐telinit -iS可以使系统进入单用户模式﹐而且得不到使用shutdown时的信息和等待时间。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
115 Linux服务器的一些基本应用

现就以以下网络架构为例,来讲一下linux服务器的配置。在正式配置以前先说一下这个服务器所要实现的功能:

1. 数据共享
2. 打印共享
3. 模拟NT域
4. ADSL共享
5. 内部DNS服务
6. DHCP服务
7. FTP服务
8. WWW服务
9. OPENSSH
10. 磁盘配额
11. 动态域名

网络架构配置以下:

Network:10.10.0.0
Server IP:10.10.1.1
Server Subnet-mask:255.255.0.0
Client IP:10.10.1.10-10.10.1.100
Client Subnet-mask:255.255.0.0
Client getway:10.10.1.1
Client DNS:10.10.1.2,202.96.134.133

1、准备工做:

1. RedHat linux 7.2光盘一套
2. 以太ADSL拔号器及您的ADSL接入账号
3. 两块网卡,最好是即插即用的,免跳线的请察明irq和io。
4. 除本机之外的其它机器

2、 RedHat linux 7.2安装:

1.初学者建议用图形界面,请用定制安装。

2系统分区以下(10G):
swap:500M
/:2G
/var:1G
/home:2G
/tools:500M
/data:4G
分区的合理化请参考网上相关文章。

3.如果即插用网卡,系统能检测到,请设置好ip地址,子网掩码等,请分别设为10.10.1.1和10.10.1.2,subnet-mask为255.255.0.0;如果免跳线网卡,那就等装好系统再设置。

4.软件包选择,要全选上也不要紧,只要有空间,如果空间有限有话,不妨定制一下软件包,下面是个人选择,仅供参考:
Printing Support
Network Support
Dialup Support
SMB:windows file server
WWW:web server
DNS:DNS name server
Software Development

5.如今就一路next安装下去,最后不要忘了作一张启动盘。

3、linux网络环境配置

[1]重启机器进入系统之后,去掉一些没必要要的服务吧,留着它们启动速度慢,并且也不安全,下面是我机器刚安装好之后所保留的一些服务:
gpm/iptables/netfs/network/nfs/nfslock/portmap/syslog/xfs/xinetd
至其它的服务,等咱们配置好再加载吧。

[2]安装linuxconf,配置网络。
放入光盘1
mount /dev/cdrom /mnt/cdrom
cd /mnt/cdrom/RedHat/RPMS
rpm –ivh linuxconf-1.25r7-3.i386.rpm
请用setup/system services或是chkconfig –levlel 3 linuxconf on将linuxconf设置为系统自启动服务。
netconf选择Host name and IP network devices进行主机名及网络设置:
Host name + domain:cxserver
------第一张网卡----------
config mode:Manual
primary name + domain:abc
Ip address:10.10.1.2
Netmask:255.255.0.0
Net device:eth0
Kernel Module:ne
I/O port:0x300
Irq:3
------第二张网卡----------
config mode:Manual
primary name + domain:cxserver
Ip address:10.10.1.1
Netmask:255.255.0.0
Net device:eth0
Kernel Module:ne
I/O port:0x320
Irq:5
选择Accept退出,从新启动就会看到eth0和eth1两网卡启动成功,进入系统后可用ifconfig命令查看状态,用ping命令测试其连通性,好比ping一部windows机器。

4、DNS服务器配置

为了让局域网内部用户访问服务器方便一点,配置一个DNS服务器是十分有必要的,毕竟一个名字总比一串数字好记,下面将服务器10.10.1.1配一个域名www.cx.com,ftp.cx.com:
须要配置的文件:
/etc/named.conf
/etc/resolv.conf
/var/named/named.hosts
/var/named/named.local
/var/named/named.10.10

[1]配置/etc/named.conf文件。此文件是dns引导文件,named进程在启动时要读取它。
vi /etc/named.conf
// generated by named-bootconf.pl
options {
directory "/var/named";
// query-source address * port 53;
};

zone "." IN {
type hint;
file "named.ca";
};
//----------------------手工添加以下两节------------------------------
zone "cx.com" IN {
type master;
file "named.hosts";
};

zone "10.10.in-addr.arpa" IN {
type master;
file "named.10.10";
};
//------------------------------------------------------------------------------
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
};

// include "/etc/rndc.key";

如下的三个文件是DNS数据库文件,具体参数不做详解,请参考相关资料。

[2]vi /var/named/named.local

$TTL 86400
@ IN SOA ns.cx.com. root.ns.cx.com. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ns.cx.com.

1 IN PTR localhost.

3]vi /var/named/named.hosts
@ IN SOA ns.cx.com. root.ns.cx.com. (
2002042302; serial
28800; refresh
14400; retry
3600000; expire
86400; minimu
)
IN NS ns.cx.com.
cx IN A 10.10.1.1
cx1 IN A 10.10.1.223
www IN CNAME ns.cx.com.
ftp IN CNAME cx

4]vi /var/named/named.10.10
@ IN SOA ns.cx.com. root.ns.cx.com. (
2002042302; serial
28800; refresh
14400; retry
3600000; expire
86400; minimu
)
IN NS ns.cx.com.
1 IN PTR ns.cx.com.
2 IN PTR ns1.cx.com.

5]编辑/etc/resolv.conf文件
vi /etc/resolv.conf
domain cx.com
nameserver 10.10.1.1

启动服务:
/etc/rc.d/init.d/named start
chkconfig –level 3 named on #将dns服务设置成系统服务,开机自启动
测试:ping cx.cx.com
ping www.cx.com
ping ftp.cx.com
或用nslookup,用法请参考nslookup –help。

5、 DHCP服务器配置

1]安装dhcp。
放入光盘1或是光盘2
mount /dev/cdrom /mnt/cdrom
cd /mnt/cdrom/RedHat/RPMS
rpm –ivh dhcp-2.0p15-8.i386.rpm
请用setup/system services或是chkconfig –levlel 3 linuxconf on将linuxconf设置为系统自启动服务。

2]配置dhcpd.conf文件。
Vi /etc/dhcpd.conf
subnet 10.10.0.0 netmask 255.255.0.0{
range dynamic-bootp 10.10.2.0 10.10.2.100; #IP地址分配范围
option routers 10.10.1.1; #默认网关
option subnet-mask 255.255.0.0; #默认子网掩码
option domain-name "cx.com"; #默认域名
option domain-name-servers 10.10.1.1,202.X.X.X;
}
#最后一行:DNS服务器设置,之因此把10.10.1.1放在前面是想让客户机在做域名解析的时候优先选择内部dns服务器,若域名不能解析,则用下一个dns服务器解析,202.X.X.X是石家庄地区ADSL上网用户主DNS服务器.

3]启动服务:/etc/rc.d/init.d/dhcpd start

4]使用:不论Win9x仍是2K都使用自动获取IP地址,其它什么都不用设。

6、 ADSL及防火墙配置

1]下载软件:http://www.roaringpenguin.com/pppoe/rp-pppoe-3.5.tar.gz

2]安装软件:
tar zxvf rp-pppoe-3.5.tar.gz
cd rp-pppoe-3.5
./go #开始安装软件

3]软件安装好后,会运行设置程序adsl-setup

USER NAME
>>> Enter your PPPoE user name (XXX):________ #此处填写ADSL用户账号

INTERFACE
(default eth0):_____ #以太接口,eth0或者eth1

>>> Enter the demand value (default no): #能够不填

DNS
>>> Enter the DNS information here: 202.X.X.X #本地电信提供的主域名服务器
>>> Enter the secondary DNS server address here: #本地电信提供的辅助域名服务器

PASSWORD
>>> Please enter your PPPoE password:
>>> Please re-enter your PPPoE password: #密码

FIREWALLING
0 - NONE: This script will not set any firewall rules. You are responsible
for ensuring the security of your machine. You are STRONGLY
recommended to use some kind of firewall rules.
1 - STANDALONE: Appropriate for a basic stand-alone web-surfing workstation
2 - MASQUERADE: Appropriate for a machine acting as an Internet gateway
for a LAN
>>> Choose a type of firewall (0-2): 0
防 火墙设置,选择2可以使主机设成局域网的internet网关,将客户机网关设为本机IP,DNS设为电信提供的DNS服务器IP便可上网了,它是由 ipchains之ip假装实现的,而rh7.2中的ipchains已经没有了ip_masq_ftp模块,因此客户机没法使用FTP服务,所以咱们在 这里不用防火墙,选择0。在rh72中已经有了iptables,它是ipchains的替代品,功能也更为强大了,后面将写一个脚本,用它来实现 ADSL共享。

>>> Accept these settings and adjust configuration files (y/n)? y #保存设置

4]接下来,编写一个脚本/etc/rc.d/firewall
vi /etc/rc.d/firewall
#!/bin/sh
echo "Start iptables rules..."
/etc/rc.d/init.d/iptables stop
echo 1 > /proc/sys/net/ipv4/ip_forward
modprobe ip_tables
modprobe ip_nat_ftp
modprobe ip_conntrack
modprobe ip_conntrack_ftp

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

iptables -N mine
iptables -A mine -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A mine -m state --state NEW -i ! ppp0 -j ACCEPT
//容许外部访问www服务器
iptables -A mine -p tcp --dport 80 -i ppp0 -j ACCEPT
//容许外部使用openssh服务,openssh至关于telnet,可是它的数据传输是加密的,
//因此更安全,强烈推荐使用。
iptables -A mine -p tcp --dport 22 -i ppp0 -j ACCEPT
//容许外部访问个人ftp服务器
iptables -A mine -p tcp --dport ftp -i ppp0 -j ACCEPT
iptables -A mine -p tcp --dport ftp-data -i ppp0 -j ACCEPT
//禁止外部ping我
iptables -A mine -p icmp --icmp-type echo-request -i ppp0 -j DROP
//
iptables -A mine -i ppp0 -m limit -j LOG --log-prefix "Bad packet from ppp0:"
iptables -A mine -i ! ppp0 -m limit -j LOG --log-prefix "Bad packet not from ppp0:"
iptables -A mine -j DROP

iptables -A INPUT -j mine
iptables -A FORWARD -j mine

//iptables功能十分强大,这里不做详解,使用方法请参考相关资料。

5]将这个脚加入到/etc/rc.d/rc.local里去,让它开机时自动运行。
chmod 700 /etc/rc.d/firewall #将firewall设为可执行文件
echo firewall >> /etc/rc.d/rc.local
固然也能够用vi编辑/etc/rc.d/rc.local文件,在尾部加入一行firewall便可。

6]chkconfig –level 3 iptables on #开机时启动iptables

7]好,重启,用root登陆系统
用 adsl-start命令链接网络,几秒之后出现.Connected,OK,网络已经连通,测试一下:前提:前面写的防火墙脚本已经运行,内部局域网已 经连通,DHCP服务已经运行,将客户端tcp/ip设置为自动获取IP地址,其它的什么都不用填,重启登陆之后,试试www/ftp/qq等服务,应该 都能使用。

8]存在的问题:
ping一下前面咱们设置的域名服务器吧,ping [urlwww.cx.com[/url],你会发现ping不通,为何呢?在安装设置adsl的时候,填入了本地电信dns服务器地址。咱们在运行 adsl-start的时候,会调用adsl-connect脚本,而它会重写/etc/resolv.conf文件:
原来的:cat /etc/resolv.conf
domain cx.com
nameserver 10.10.1.0
如今的:cat /etc/resolv.conf
nameserver 202.X.X.X
在这种状况下DNS服务器要是运行起来是不可能的。
解决方法:
修改/etc/resolv.conf文件:
vi /etc/resolv.conf
domain cx.com
nameserver 10.10.1.1
nameserver 202.X.X.X
修改/usr/sbin/adsl-connect脚本文件:
vi /usr/sbin/adsl-connect
找到下面几行,并将其注释掉:
---------------------------------------------------------------------------
if test "$DNSTYPE" = "SERVER" ; then
# Sorry, dude...
rm -f /etc/resolv.conf
ln -s /etc/ppp/resolv.conf /etc/resolv.conf
elif test "$DNSTYPE" = "SPECIFY" ; then
# Sorry, dude...
rm -f /etc/resolv.conf
echo "nameserver $DNS1" > /etc/resolv.conf
if test -n "$DNS2" ; then
echo "nameserver $DNS2" >> /etc/resolv.conf
fi
fi
-----------------------------------------------------------------------------

9]重启,ADSL链接成功,DNS服务器正常.

7、文件(打印)服务器、模拟NT域的实现。

1]编辑/etc/samba/smb.conf文件
vi /etc/samba/smb.conf
[global]
workgroup = CX #把它当成NT登陆域
server string = Samba Server
netbios name = cxserver #服务器的netbios名字
hosts allow = 10.10.1. 10.10.2. 127. #只容许10.10.1.0、10.10.2.0网段访问
printcap name = /etc/printcap
load printers = yes
printing = lprng
log file = /var/log/samba/%m.log
max log size = 0
security = user #安全等级为user级,访问资源须要身份验证
encrypt passwords = yes
smb passwd file = /etc/samba/smbpasswd
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
domain master = yes
preferred master = yes
domain logons = yes #能够登陆
dns proxy = no

[homes] #登陆后能够看到用户home目录
comment = Home Directories
browseable = no
writable = yes
valid users = %S
create mode = 0664
directory mode = 0775

[printers] #如有打印机,在\\mineserver中可看到打印机,右键安装
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes

[public] #共享/mnt/data/public文件夹,共享名为public,admin组有写权限
comment = software
path = /mnt/data/public
public = yes
wirte list = @admin

2]用testparm测试/etc/samba/smb.conf文件中语法是否正确

3]/etc/rc.d/init.d/smb start启动服务,并用smbclient –L localhost测试服务器是否正常,如果提示输入密码,回车之后看到服务器信息,则服务器正常。

4]添加用户和组
useradd test
groupadd admin
gpasswd –a test admin

5]设置smb用户密码
smbpasswd –a test
输入密码并验证

6]用setup之Printer configuration配置一本地打印机,其过程请参考相关资料,这里不过多赘述。

7]测试:
请设置windows机器的网络属性,登陆方式为网络用户登陆,直接登陆到NT域,NT域为cx,重启后用前面添加的test账号登陆,密码为smbpasswd –a test时设置的密码,进行系统后用控制面板之”用户及密码”可修改登陆密码。
打开网上邻居,看是否能浏览到cxserver,亦可用\\cxserver访问。
最后设置:chkconfig –level 3 smb on #让smb开机自动运行

8、磁盘配额

前面咱们在配置文件共享的时候,有一个共享资源为homes,如aa登陆,在\\cxserver中有一个aa文件夹,aa用户对这个文件夹具读写权限,

如若咱们不限制aa的话,他有可能会将硬盘塞满,任何一个管理员都不但愿看到这种事情,下面咱们用quota来实现对用户使用磁盘空间的限制。

1]首先明白一个概念,quota是针对分区的,因此咱们在前面安装linux的时候单独分了一个/home区。

2]而全部的用户home目录都在/home下,如今开始在home目录下创建两个文件:
cd /home
touch quota.user
touch quota.group
chmod 600 quota.user //只容许root对这两个文件读写
chmod 600 quota.group

3]在/etc/rc.d/rc.local文件尾部加入quota启动脚本:
if [ -x /sbin/quotacheck ]
then
echo "Checking quotas. This may take some time..."
/sbin/quotacheck -avug
echo "Done"
fi
if [ -x /sbin/quotaon ]
then
echo "Turning on quota"
/sbin/quotaon -avug
echo "OK"
fi

4]修改/etc/fstab文件中定义/home分区的那一行:
原内容: /dev/hda3 /home ext3 defaults 1 2
新内容: /dev/hda3 /home ext3 defaults,usrquota,grpquota 1 2
看得出来只是在defaults后面加了usrquota,grpquota而已。
注意啊,是usrquota而不是userquota,如果错了,后果难以预料。

5]重启,在启动过程当中会出错,主要是由于quota在/home目录下打不到aquota.user和aquota.group两个文件,不要紧,我们进了系统以再慢慢收拾它。

6]用root登陆,而后咱们生成aquota.user和aquota.group两个文件:
convertquota -u /home
convertquota –g /home
若以上步骤不出错的话,咱们用ls /home –al就会看到aquota.user,aquota.group两
个文件了

7]再重启,注意观察,不会再出错了。进入系统后就能够对用户home目录进行限制了。好比如今有一个test用户,咱们对他进行限制:
edquota –u test #此命令将进入一个vi编辑模式,其内容以下:
Filesystem blocks soft hard inodes soft hard
/dev/hda3 0 0 0 0 0 0
注解标识: A B C D E F
在讲解各参数以前先说说限制的两种方式:soft,hard
soft:又称软限制,当用户到达这个限制之后,系统会给予警告,但仍可写入。
hard:又称硬限制,到达这个限制,就彻底禁止任何写入啦。
ABC为磁盘空间的限制设置,而DEF为总文件个数的限制
A:已使用空间,无须要设置
B:用户空间使用限制,为软限制,须要设置。
C:用户空间使用限制,为硬限制,须要设置。
D:已有文件总数,无须要设置。
E:文件总数限制,为软限制,须要设置。
F:文件总数限制,为硬限制,须要设置。

咱们要限制test用户使用空间100M,最多不能超过120M,文件总数为2000个,
最多不能超过2500个,设置以下:
Filesystem blocks soft hard inodes soft hard
/dev/hda3 0 102400 122880 0 2000 2500
注:空间限制是以k为单位的。

8]测试:进入本身的home目录,而后拷贝文件,如果超过120M,就不容许再写入了。

9]其它命令的使用:
复制相同调协至其它用户:
edquota –p test –u username1 username2 username3 username4……
显示某个用户当前磁盘使用状况:
quota –v username
显示全部用户当前磁盘使用状况:
repquota –a
其它的一些命令请参考相关资料。

9、FTP服务器:

Rh72自带了wu_ftp,可是因为其毛病很多,因此咱们不用它,咱们用性能及安全性能均优于它的proftpd来代替它。

1]下载软件:ftp://ftp.proftpd.org/distrib/sourc...pd-1.2.5.tar.gz

2]安装:
tar zxvf proftpd-1.2.5.tar.gz
cd proftpd-1.2.5
./configure –prefix=/usr/local/proftpd //指定安装在/usr/local/proftpd目录下
make
make install
cp contrib/dist/rpm/proftpd.init.d /etc/rc.d/init.d/proftpd
chmod 700 /etc/rc.d/init.d/proftpd
chkconfig –level 3 proftpd on //设置为系统自启动服务
cp /usr/local/proftpd/sbin/proftpd /usr/sbin //将proftpd拷至/usr/sbin目录下,让系
统能自动搜索到,也省得再去加一个搜索路径

3]配置/usr/local/proftpd/etc/proftpd.conf文件:
vi /usr/local/proftpd.conf
ServerName "Xchen FTP server" //服务器登陆提示
ServerType standalone
DefaultServer on
Port 21
Umask 022
MaxInstances 30
User nobody
Group nobody //原来为nogroup,请改为nobody
RequireValidShell off //手动添加此名,重要
//限定test组用户只能访问本身的home目录,而不能向上浏览
DefaultRoot ~ test
//限定test组用户只能访问本身的/home/ftp目录,不能向上浏览
DefaultRoot ~/ftp test
//限定music组用户只能访问/home/music目录,不能向上浏览
DefaultRoot /home/ftp music
//除music组中bb用户外都能访问/home/music目录,不能向上浏览
DefaultRoot /home/ftp music,!bb
//上面组须要本身创建:groupadd test,gpasswd –a username test
ServerIdent off //登陆时不显示版本信息

AllowOverwrite on

// /home/ftp为匿名用户登陆目录
User ftp
Group ftp
UserAlias anonymous ftp
MaxClients 10
DisplayLogin welcome.msg
DisplayFirstChdir .message

DenyAll



4]启动服务:/etc/rc.d/init.d/proftpd start

5]测试,在客户端用FTP软件或命令行FTP程序进行访问ftp.cx.com。

6]proftpd还有不少高级应用,请参考相关资料,这里就很少赘述。

10、WWW服务

www服务用apache来实现,步骤极其简单,固然,这里说的是初级应用。由于咱们要实现的是简单的www服务,因此只需更改下面几个参数便可:

1]Vi /etc/httpd/conf/httpd.conf
ServerName www.cx.com
DocumentRoot ”/var/www”

2]拷贝网页文件到/var/www目录

3]启动服务:/etc/rc.d/init.d/httpd start
将httpd设置为系统自启动服务:chkconfig –level 3 httpd on

4]测试:在ie中用http://www.cx.com测试。

为何把www服务讲得这么简单呢,主要是由于这种单一类型的网页文件服务用得较少,如今大多数都要用cgi,asp,php,还有数据库等,关于这方面配置还请参考相关资料,这里不做详解。

11、动态域名服务
  动态域名这个叫法不大稳当,应该叫动态ip for 域名才对。到如今为止,ftp和www服务咱们都实现了,在局域网内能够用www.cx.com来访问,可是咱们已经用ADSL连通了internet, 咱们怎样让外部访问咱们的ftp,www服务器呢,总不成每都通知对方服务器的IP吧,因此就要用到动态域名服务,大体原理是每次ADSL拔号时将自身 IP更新到外部DNS服务器数据库中所对应的那个域名,因此咱们每次访问这个域名就能够了,在这里讨论一下www.3322.org提供的动态服务的实 现。
1]登陆www.3322.org网站,注册一个用户,并申请一个动态域名xxxx.3322.org。
2]下载linux客户端软件:
http://www.3322.org/dyndnspage/ez-i...-linux-i386.tgz
3]安装软件:
tar zxvf ez-ipupdate-3.0.10-linux-i386.tgz
mv ez-ipupdate-3.0.10-linux-i386 /usr/local/ezip
4]编辑/usr/local/ezip/qdns.conf文件:
vi /usr/local/qdns.conf
service-type=qdns
user=username:password //用户名及密码,用冒号隔开
host=xxxxx.3322.org //你申请的域名
interface=ppp0 //接口为ppp0
max-interval=2073600
cache-file=/tmp/ez-ipupdate.cache

5]将当前ip现新到咱们申请的域名:
cd /usr/local/ezip
ez-ipupdate –c qdns.conf
系统会提示数据更新成功,好,咱们来ping一下xxxx.3322.org,是ppp0的IP,再用http://xxx.3322.org试一下,成功!!!。

6]问题又来了,难道咱们每次启动ADSL都要用手动更新一次吗,你可能会想到用crontab让它每隔几分钟更新一次,不过为了ip更新而启用crond服务彷佛有点小题大作,个人方法,修改/usr/sbin/adsl-start脚本:
vi /usr/sbin/adsl-start
找到倒数25行”tty –s && $ECHO “ Connected ! “,在其下增长一行:
/usr/local/ezip/ez-ipupdate –c /usr/local/ezip/qdns.conf
存盘退出,咱们让ADSL拔号完成之后自动更新!

7]测试一下:
adsl-start
. Connected!
ez-ipupdate Version 3.0.10
Copyright (C) 1999-2000 Angus Mackay.
connected to members.3322.org (202.X.X.X) on port 80.
request successful
OK,数据更新成功。

好,如今你随时随地均可以用xxxx.3322.org访问你的服务了,不错吧。


12、openssh的设置
  若是你在家里或者其它地方,怎样控制你的服务器,你可能会想到用telnet,原本是能够的,可是因为telnet用的是明码传输,容易给那些不怀好意者可乘之机,因此咱们用openssh来代替telnet。

1]卸载原来的2.9x版,2.9x版有bug,不安全:
rpm –e openssh

2]最新软件包下载:

ftp://ftp.openbsd.org/pub/OpenBSD/O...sh-3.4p1.tar.gz

3]安装软件:
tar zxvf openssh-3.4p1.tar.gz
cd openssh-3.41
./configure --prefix=/usr/local/ssh \
--sysconfdir=/etc/ssh \
--with-tcp-wrappers \
--with-ipv4-default \
--with-md5-passwords
make
make install
注:安装完成之后,会自动生成主机密钥,还会提示须要sshd用户账号,可用useradd加一个sshd用户。
install /contrib/redhat/sshd.pam /etc/pam.d/sshd
cp contrib/redhat/sshd.init /etc/rc.d/init.d/sshd
chkconfig --level 3 sshd on ;配置成系统服务

4]配置openssh之/etc/ssh/ssh_config文件
vi /etc/ssh/ssh_config
Host *
ForwardAgent no
ForwardX11 no
RhostsAuthentication no
RhostsRSAAuthentication no
RSAAuthentication yes
PasswordAuthentication yes
BatchMode no
CheckHostIP yes
StrictHostKeyChecking ask
IdentityFile ~/.ssh/identity
Port 22
Cipher 3des
EscapeChar ~

5]配置openssh之/etc/ssh/sshd_config文件
vi /etc/ssh/sshd_config
Port 22
ListenAddress 0.0.0.0
ListenAddress ::
HostKey /etc/ssh/ssh_host_key
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
KeyRegenerationInterval 3600
ServerKeyBits 768
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 600
#PermitRootLogin yes #仍是不要让root直接登陆为妙!
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
RhostsAuthentication no
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
IgnoreUserKnownHosts no
PasswordAuthentication yes
PermitEmptyPasswords no
Subsystem sftp /usr/local/ssh/libexec/sftp-server

6]配置用户的加密密钥
useradd test
passwd test
su test
ssh-keygen -d
出现提示请回车并输入passwd,再次输入passwd。
注:这个密码是系统加密运算时用到的,登陆时还用原来密码。

7]启动服务
/etc/rc.d/init.d/sshd start

8]在客户端用test账号进行测试。



%%%%%%%%%%%%%%%%%%%%%%%%%%%%55
116 linux几条命令的基本用法
提示符为#表示须要root权限,$表示通常用户权限便可

1. linux下面命令行查找文件的两个方法
1) find

$ find 路径 -name 待查找文件 -print

-xdev参数把查询操做限制在当前的文件系统之中:

$ find /mnt/dos -name *.sys -print -xdev

2) locate + updatedb:

# updatedb
$ locate 待查找文件

2. 使用whatis和apropos命令获取命令简介

# makewhatis //更新whatis数据库
$ whatis w //查看命令w的功能
$ apropos search //查找有search功能的有哪些命令

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
117 在RedHat Linux环境中实现双网卡绑定
 

用于双网卡在同一网段内的状况,能够实现流量均衡或者备份

1. #cd /etc/sysconfig/network-scripts
# cp ifcfg-eth0 ifcfg-bond0
----------------------------------------------------------------

2 #vi ifcfg-bond0
将第一行改为 DEVICE=bond0
----------------------------------------------------------------

3 # vi /etc/modules.conf
加入两行
alias bond0 bonding
options bond0 miimon=100 mode=1

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

4 # vi /etc/rc.d/rc.local
加入两行
ifenslave bond0 eth0 eth1
route add -net 192.168.0.0 netmask 255.255.255.0 bond0

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

5 reboot

重启会看见:
................
Bringing up interface bond0 OK
Bringing up interface eth0 OK
Bringing up interface bond1 OK
----------------------------------------------------------------

6. 检查:
#netstat -r
192.168.0.0 255.255.255.0 0 40 0 0 bond0
192.168.0.0 255.255.255.0 0 40 0 0 eth0
192.168.0.0 255.255.255.0 0 40 0 0 eth1
这时候看看你的网卡后面的灯, 他们闪的频率是同样的..
当#ifdown eth0 时, 转换有5-6秒的延时.
----------------------------------------------------------------
注意:
若是网络不通须要从启bind
# ifdown bind0
#ifup bind0
网卡绑定用在vncserver 或scp中就不灵了

118 route命令使用方法

route命令主要用于手动配置静态路由表
例:增长一条经过网关到达令一子网的路由
#route add net remote_net_ip gateway_ip 1
  其中add表明要增长路由,net表示路由到达的是一个网络而不是一台主机,1表明远端网络需经过网关才能到达
(直接经过网络接口相连时,该参数用0)
命令格式:
#route add -net remote_net_ip gateway_ip -netmask netmask
#route add -host host_ip local_interface_ip -interface
使用"delete","change"命令参数能够对路由表中的路由信息进行删除和修改
使用"netstat -rn"命令查看当前的路由信息

过修改文件/etc/defaultrouter能够设置一些默认路由
$$$$$$$$$$$$$$$$$$$$$$$$$$$$

122   find命令详细用法

名称 : find
用法 : find
使用说明 :
将文件系统内符合 expression 的文件列出来。你能够指要文件的名称、类别、时间、大小、
权限等不一样资讯的组合,只有彻底相符的才会被列出来。
find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 以前的部份为 path
,以后的是 expression。若是 path 是空字串则使用目前路径,若是 expression 是空字串则使用
-print 为预设 expression。
expression 中可以使用的选项有二三十个之多,在此只介绍最经常使用的部份。
-mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
-amin n : 在过去 n 分钟内被读取过
-anewer file : 比文件 file 更晚被读取过的文件
-atime n : 在过去 n 天过读取过的文件
-cmin n : 在过去 n 分钟内被修改过
-cnewer file :比文件 file 更新的文件
-ctime n : 在过去 n 天过修改过的文件
-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name
-ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
-name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
-size n : 文件大小 是 n 单位,b 表明 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w
是二个位元组。-type c : 文件类型是 c 的文件。
d: 目录
c: 字型装置文件
b: 区块装置文件
p: 具名贮列
f: 通常文件
l: 符号连结
s: socket
-pid n : process id 是 n 的文件
你能够使用 ( ) 将运算式分隔,并使用下列运算。
exp1 -and exp2
! expr
-not expr
exp1 -or exp2
exp1, exp2
范例:
将目前目录及其子目录下全部延伸档名是 c 的文件列出来。
# find . -name "*.c"
将目前目录其其下子目录中全部通常文件列出
# find . -ftype f
将目前目录及其子目录下全部最近 20 分钟内更新过的文件列出
# find . -ctime -20
find . -name "*" -exec grep xxx {} ; -print |morexxx为你想要找的字符串
 

121 Grep的用法

Grep的内容
Grep 打印出文件中符合指定模式的行。
安装下列程序: egrep (指向grep的连接), fgrep (指向grep的连接) 和 grep
简短说明
egrep 打印出匹配扩展规则表达式模式的行。
fgrep 对固定字符串列表进行匹配。
grep 对基本规则表达式进行匹配。
Grep 安装依赖关系
Grep 依赖于: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Make, Sed, Texinfo.

Grep的用法
Grep : g (globally) search for a re (regular expression ) and p (print ) the results.

一、参数:
-I :忽略大小写
-c :打印匹配的行数
-l :从多个文件中查找包含匹配项
-v :查找不包含匹配项的行
-n:打印包含匹配项的行和行标

二、RE(正则表达式)
\ 忽略正则表达式中特殊字符的原有含义
^ 匹配正则表达式的开始行
$ 匹配正则表达式的结束行
\< 从匹配正则表达式的行开始
\> 到匹配正则表达式的行结束
[ ] 单个字符;如[A] 即A符合要求
[ - ] 范围 ;如[A-Z]即A,B,C一直到Z都符合要求
. 全部的单个字符
* 全部字符,长度能够为0

三、举例
# ps -ef | grep in.telnetd
root 19955 181 0 13:43:53 ? 0:00 in.telnetd

# more size.txt size文件的内容
b124230
b034325
a081016
m7187998
m7282064
a022021
a061048
m9324822
b103303
a013386
b044525
m8987131
B081016
M45678
B103303
BADc2345

# more size.txt | grep '[a-b]' 范围 ;如[A-Z]即A,B,C一直到Z都符合要求
b124230
b034325
a081016
a022021
a061048
b103303
a013386
b044525
# more size.txt | grep '[a-b]'*
b124230
b034325
a081016
m7187998
m7282064
a022021
a061048
m9324822
b103303
a013386
b044525
m8987131
B081016
M45678
B103303
BADc2345

# more size.txt | grep '' 单个字符;如[A] 即A符合要求
b124230
b034325
b103303
b044525
# more size.txt | grep '[bB]'
b124230
b034325
b103303
b044525
B081016
B103303
BADc2345

# grep 'root' /etc/group
root::0:root
bin::2:root,bin,daemon
sys::3:root,bin,sys,adm
adm::4:root,adm,daemon
uucp::5:root,uucp
mail::6:root
tty::7:root,tty,adm
lp::8:root,lp,adm
nuucp::9:root,nuucp
daemon::12:root,daemon

# grep '^root' /etc/group 匹配正则表达式的开始行
root::0:root


# grep 'uucp' /etc/group
uucp::5:root,uucp
nuucp::9:root,nuucp

# grep '\uucp::5:root,uucp


# grep 'root$' /etc/group 匹配正则表达式的结束行
root::0:root
mail::6:root


# more size.txt | grep -i 'b1..*3' -i :忽略大小写

b124230
b103303
B103303

# more size.txt | grep -iv 'b1..*3' -v :查找不包含匹配项的行

b034325
a081016
m7187998
m7282064
a022021
a061048
m9324822
a013386
b044525
m8987131
B081016
M45678
BADc2345

# more size.txt | grep -in 'b1..*3'
1:b124230
9:b103303
15:B103303

# grep '$' /etc/init.d/nfs.server | wc -l
128
# grep '\$' /etc/init.d/nfs.server | wc –l 忽略正则表达式中特殊字符的原有含义

15
# grep '\$' /etc/init.d/nfs.server
case "$1" in
>/tmp/sharetab.$$
[ "x$fstype" != xnfs ] && \
echo "$path\t$res\t$fstype\t$opts\t$desc" \
>>/tmp/sharetab.$$
/usr/bin/touch -r /etc/dfs/sharetab /tmp/sharetab.$$
/usr/bin/mv -f /tmp/sharetab.$$ /etc/dfs/sharetab
if [ -f /etc/dfs/dfstab ] && /usr/bin/egrep -v '^[ ]*(#|$)' \
if [ $startnfsd -eq 0 -a -f /etc/rmmount.conf ] && \
if [ $startnfsd -ne 0 ]; then
elif [ ! -n "$_INIT_RUN_LEVEL" ]; then
while [ $wtime -gt 0 ]; do
wtime=`expr $wtime - 1`
if [ $wtime -eq 0 ]; then
echo "Usage: $0 { start | stop }"


# more size.txt

the test file
their are files
The end

# grep 'the' size.txt
the test file
their are files

# grep '\the test file
their are files

# grep 'the\>' size.txt
the test file

# grep '\' size.txt
the test file

# grep '\<[Tt]he\>' size.txt
the test file
The end

119 Emacs 安装

1. 得到 Emacs
http://ftp.gnu.org/pub/gnu/emacs/
http://savannah.gnu.org/projects/emacs/
ftp://soft.eeatech.org:11021/incoming/other/

2. 安装方法
PATH=%emacs%/bin

3. 基本配置
Emacs 的配置文件 .emacs or _emacs
HOME=%path%

120 UNIX awk使用手册
什么是awk?

你 可能对UNIX比较熟悉,但你可能对awk很陌生,这一点也不奇怪,的确,与其优秀的功能相比,awk还远没达到它应有的知名度。awk是什么?与其它大 多数UNIX命令不一样的是,从名字上看,咱们不可能知道awk的功能:它既不是具备独立意义的英文单词,也不是几个相关单词的缩写。事实上,awk是三个 人名的缩写,他们是:Aho、(Peter) Weinberg和(Brain)Kernighan。正是这三我的创造了awk---一个优秀的样式扫描与处理工具。

AWK的功能是 什么?与sed和grep很类似,awk是一种样式扫描与处理工具。但其功能却大大强于sed和grep。awk提供了极其强大的功能:它几乎能够完成 grep和sed所能完成的所有工做,同时,它还能够能够进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具有了一个完整的语 言所应具备的几乎全部精美特性。实际上,awk的确拥有本身的语言:awk程序设计语言,awk的三位建立者已将它正式定义为:样式扫描和处理语言。

为何使用awk?

使 用awk的第一个理由是基于文本的样式扫描和处理是咱们常常作的工做,awk所作的工做有些象数据库,但与数据库不一样的是,它处理的是文本文件,这些文件 没有专门的存储格式,普通的人们就能编辑、阅读、理解和处理它们。而数据库文件每每具备特殊的存储格式,这使得它们必须用数据库处理程序来处理它们。既然 这种相似于数据库的处理工做咱们常常会遇到,咱们就应当找处处理它们的简便易行的方法,UNIX有不少这方面的工具,例如sed 、grep、sort以及find等等,awk是其中十分优秀的一种。

使用awk的第二个理由是awk是一个简单的工具,固然这是相对 于其强大的功能来讲的。的确,UNIX有许多优秀的工具,例如UNIX自然的开发工具C语言及其延续C++就很是的优秀。但相对于它们来讲,awk完成同 样的功能要方便和简捷得多。这首先是由于awk提供了适应多种须要的解决方案:从解决简单问题的awk命令行到复杂而精巧的awk程序设计语言,这样作的 好处是,你能够没必要用复杂的方法去解决原本很简单的问题。例如,你能够用一个命令行解决简单的问题,而C不行,即便一个再简单的程序,C语言也必须通过编 写、编译的全过程。其次,awk自己是解释执行的,这就使得awk程序没必要通过编译的过程,同时,这也使得它与shell script程序可以很好的契合。最后,awk自己较C语言简单,虽然awk吸取了C语言不少优秀的成分,熟悉C语言会对学习awk有很大的帮助,但 awk自己不需要会使用C语言——一种功能强大但须要大量时间学习才能掌握其技巧的开发工具。

使用awk的第三个理由是awk是一个容 易得到的工具。与C和C++语言不一样,awk只有一个文件(/bin/awk),并且几乎每一个版本的UNIX都提供各自版本的awk,你彻底没必要费心去想 如何得到awk。但C语言却不是这样,虽然C语言是UNIX自然的开发工具,但这个开发工具倒是单独发行的,换言之,你必须为你的UNIX版本的C语言开 发工具单独付费(固然使用D版者除外),得到并安装它,而后你才能够使用它。

基于以上理由,再加上awk强大的功能,咱们有理由说,如 果你要处理与文本样式扫描相关的工做,awk应该是你的第一选择。在这里有一个可遵循的通常原则:若是你用普通的shell工具或shell script有困难的话,试试awk,若是awk仍不能解决问题,则便用C语言,若是C语言仍然失败,则移至C++。

awk的调用方式

前面曾经说过,awk提供了适应多种须要的不一样解决方案,它们是:

1、 awk命令行,你能够象使用普通UNIX命令同样使用awk,在命令行中你也能够使用awk程序设计语言,虽然awk支持多行的录入,可是录入长长的命令 行并保证其正确无误倒是一件使人头疼的事,所以,这种方法通常只用于解决简单的问题。固然,你也能够在shell script程序中引用awk命令行甚至awk程序脚本。

2、使用-f选项调用awk程序。awk容许将一段awk程序写入一个文本文件,而后在awk命令行中用-f选项调用并执行这段程序。具体的方法咱们将在后面的awk语法中讲到。

3、利用命令解释器调用awk程序:利用UNIX支持的命令解释器功能,咱们能够将一段awk程序写入文本文件,而后在它的第一行加上:
#!/bin/awk -f
并赋予这个文本文件以执行的权限。这样作以后,你就能够在命令行中用相似于下面这样的方式调用并执行这段awk程序了。

awk脚本文本名 待处理文件

awk的语法:

与其它UNIX命令同样,awk拥有本身的语法:

awk [ -F re] [parameter...] ['prog'] [-f progfile][in_file...]

参数说明:

-F re:容许awk更改其字段分隔符。

parameter: 该参数帮助为不一样的变量赋值。

'prog': awk的程序语句段。这个语句段必须用单拓号:'和'括起,以防被shell解释。这个程序语句段的标准形式为:

'pattern {action}'

其 中pattern参数能够是egrep正则表达式中的任何一个,它能够使用语法/re/再加上一些样式匹配技巧构成。与sed相似,你也能够使用","分 开两样式以选择某个范围。关于匹配的细节,你能够参考附录,若是仍不懂的话,找本UNIX书学学grep和sed(本人是在学习ed时掌握匹配技术的)。 action参数老是被大括号包围,它由一系统awk语句组成,各语句之间用";"分隔。awk解释它们,并在pattern给定的样式匹配的记录上执行 其操做。与shell相似,你也能够使用“#”做为注释符,它使“#”到行尾的内容成为注释,在解释执行时,它们将被忽略。你能够省略pattern和 action之一,但不能二者同时省略,当省略pattern时没有样式匹配,表示对全部行(记录)均执行操做,省略action时执行缺省的操做——在 标准输出上显示。

-f progfile:容许awk调用并执行progfile指定有程序文件。progfile是一个文本文件,他必须符合awk的语法。

in_file:awk的输入文件,awk容许对多个输入文件进行处理。值得注意的是awk不修改输入文件。若是未指定输入文件,awk将接受标准输入,并将结果显示在标准输出上。awk支持输入输出重定向。

awk的记录、字段与内置变量:

前 面说过,awk处理的工做与数据库的处理方式有相同之处,其相同处之一就是awk支持对记录和字段的处理,其中对字段的处理是grep和sed不能实现 的,这也是awk优于两者的缘由之一。在awk中,缺省的状况下老是将文本文件中的一行视为一个记录,而将一行中的某一部分做为记录中的一个字段。为了操 做这些不一样的字段,awk借用shell的方法,用1,2,3...这样的方式来顺序地表示行(记录)中的不一样字段。特殊地,awk用0表示整个行(记 录)。不一样的字段之间是用称做分隔符的字符分隔开的。系统默认的分隔符是空格。awk容许在命令行中用-F re的形式来改变这个分隔符。事实上,awk用一个内置的变量FS来记忆这个分隔符。awk中有好几个这样的内置变量,例如,记录分隔符变量RS、当前工 做的记录数NR等等,本文后面的附表列出了所有的内置变量。这些内置的变量能够在awk程序中引用或修改,例如,你能够利用NR变量在模式匹配中指定工做 范围,也能够经过修改记录分隔符RS让一个特殊字符而不是换行符做为记录的分隔符。

例:显示文本文件myfile中第七行到第十五行中以字符%分隔的第一字段,第三字段和第七字段:

awk -F % 'NR==7,NR==15 {printf 1 3 7}'

awk的内置函数

awk 之因此成为一种优秀的程序设计语言的缘由之一是它吸取了某些优秀的程序设计语言(例如C)语言的许多优势。这些优势之一就是内置函数的使用,awk定义并 支持了一系列的内置函数,因为这些函数的使用,使得awk提供的功能更为完善和强大,例如,awk使用了一系列的字符串处理内置函数(这些函数看起来与C 语言的字符串处理函数类似,其使用方式与C语言中的函数也相差无几),正是因为这些内置函数的使用,使awk处理字符串的功能更增强大。本文后面的附录中 列有通常的awk所提供的内置函数,这些内置函数也许与你的awk版本有些出入,所以,在使用以前,最好参考一下你的系统中的联机帮助。

做 为内置函数的一个例子,咱们将在这里介绍awk的printf函数,这个函数使得awk与c语言的输出相一致。实际上,awk中有许多引用形式都是从C语 言借用过来的。若是你熟悉C语言,你也许会记得其中的printf函数,它提供的强大格式输出功能曾经带咱们许多的方便。幸运的是,咱们在awk中又和它 重逢了。awk中printf几乎与C语言中如出一辙,若是你熟悉C语言的话,你彻底能够照C语言的模式使用awk中的printf。所以在这里,咱们只 给出一个例子,若是你不熟悉的话,请随便找一本C语言的入门书翻翻。

例:显示文件myfile中的行号和第3字段:

awk '{printf"%03d%s\n",NR,1}' myfile

在命令行使用awk

按 照顺序,咱们应当讲解awk程序设计的内容了,但在讲解以前,咱们将用一些例子来对前面的知识进行回顾,这些例子都是在命令行中使用的,由此咱们能够知道 在命令行中使用awk是多么的方便。这样作的缘由一方面是为下面的内容做铺垫,另外一方面是介绍一些解决简单问题的方法,咱们彻底没有必要用复杂的方法来解 决简单的问题----既然awk提供了较为简单的方法的话。

例:显示文本文件mydoc匹配(含有)字符串"sun"的全部行。

awk '/sun/{print}' mydoc

因为显示整个记录(全行)是awk的缺省动做,所以能够省略action项。

awk '/sun/' mydoc

例:下面是一个较为复杂的匹配的示例:

awk '/[Ss]un/,/[Mm]oon/ {print}' myfile

它将显示第一个匹配Sun或sun的行与第一个匹配Moon或moon的行之间的行,并显示到标准输出上。

例:下面的示例显示了内置变量和内置函数length()的使用:

awk 'length(0)>80 {print NR}' myfile

该命令行将显示文本myfile中全部超过80个字符的行号,在这里,用0表示整个记录(行),同时,内置变量NR不使用标志符''。

例: 做为一个较为实际的例子,咱们假设要对UNIX中的用户进行安全性检查,方法是考察/etc下的passwd文件,检查其中的passwd字段(第二字 段)是否为"*",如不为"*",则表示该用户没有设置密码,显示出这些用户名(第一字段)。咱们能够用以下语句实现:

#awk -F: '2=="" {printf("%s no password!\n",1' /etc/passwd

在这个示例中,passwd文件的字段分隔符是“:”,所以,必须用-F:来更改默认的字段分隔符,这个示例中也涉及到了内置函数printf的使用。

awk的变量

如同其它程序设计语言同样,awk容许在程序语言中设置变量,事实上,提供变量的功能是程序设计语言的其本要求,不提供变量的程序设计语言本人还从未见过。

awk 提供两种变量,一种是awk内置的变量,这前面咱们已经讲过,须要着重指出的是,与后面提到的其它变量不一样的是,在awk程序中引用内置变量不须要使用标 志符""(回忆一下前面讲过的NR的使用)。awk提供的另外一种变量是自定义变量。awk容许用户在awk程序语句中定义并调用自已的变量。固然这种变量 不能与内置变量及其它awk保留字相同,在awk中引用自定义变量必须在它前面加上标志符""。与C语言不一样的是,awk中不须要对变量进行初始化, awk根据其在awk中第一次出现的形式和上下文肯定其具体的数据类型。当变量类型不肯定时,awk默认其为字符串类型。这里有一个技巧:若是你要让你的 awk程序知道你所使用的变量的明确类型,你应当在在程序中给它赋初值。在后面的实例中,咱们将用到这一技巧。

运算与判断:

做 为一种程序设计语言所应具备的特色之一,awk支持多种运算,这些运算与C语言提供的几本相同:如+、-、*、/、%等等,同时,awk也支持C语言中类 似++、--、+=、-=、=+、=-之类的功能,这给熟悉C语言的使用者编写awk程序带来了极大的方便。做为对运算功能的一种扩展,awk还提供了一 系列内置的运算函数(如log、sqr、cos、sin等等)和一些用于对字符串进行操做(运算)的函数(如length、substr等等)。这些函数 的引用大大的提升了awk的运算功能。

做为对条件转移指令的一部分,关系判断是每种程序设计语言都具有的功能,awk也不例外。awk 中容许进行多种测试,如经常使用的==(等于)、!=(不等于)、>(大于)、<(小于)、>=(大于等于)、>=(小于等于)等 等,同时,做为样式匹配,还提供了~(匹配于)和!~(不匹配于)判断。

做为对测试的一种扩充,awk也支持用逻辑运算符:!(非)、&&(与)、||(或)和括号()进行多重判断,这大大加强了awk的功能。本文的附录中列出了awk所容许的运算、判断以及操做符的优先级。

awk的流程控制

流程控制语句是任何程序设计语言都不能缺乏的部分。任何好的语言都有一些执行流程控制的语句。awk提供的完备的流程控制语句相似于C语言,这给咱们编程带来了极大的方便。

一、BEGIN和END:

在awk 中两个特别的表达式,BEGIN和END,这二者均可用于pattern中(参考前面的awk语法),提供BEGIN和END的做用是给程序赋予初始状态 和在程序结束以后执行一些扫尾的工做。任何在BEGIN以后列出的操做(在{}内)将在awk开始扫描输入以前执行,而END以后列出的操做将在扫描彻底 部的输入以后执行。所以,一般使用BEGIN来显示变量和预置(初始化)变量,使用END来输出最终结果。

例:累计销售文件xs中的销售金额(假设销售金额在记录的第三字段):

awk
>'BEGIN { FS=":";print "统计销售金额";total=0}
>{print 3;total=total+3;}
>END {printf "销售金额总计:%.2f",total}' sx
(注:>是shell提供的第二提示符,如要在shell程序awk语句和awk语言中换行,则需在行尾加反斜杠\)

在这里,BEGIN预置了内部变量FS(字段分隔符)和自定义变量total,同时在扫描以前显示出输出行头。而END则在扫描完成后打印出总合计。

二、流程控制语句
awk提供了完备的流程控制语句,其用法与C语言相似。下面咱们一一加以说明:

2.一、if...else语句:

格式:
if(表达式)
语句1
else
语句2

格式中"语句1"能够是多个语句,若是你为了方便awk判断也方便你自已阅读,你最好将多个语句用{}括起来。awk分枝结构容许嵌套,其格式为:

if(表达式1)
{if(表达式2)
语句1
else
语句2
}
语句3
else {if(表达式3)
语句4
else
语句5
}
语句6

固然实际操做过程当中你可能不会用到如此复杂的分枝结构,这里只是为了给出其样式罢了。

2.二、while语句

格式为:

while(表达式)
语句

2.三、do-while语句

格式为:

do
{
语句
}while(条件判断语句)

2.四、for语句

格式为:

for(初始表达式;终止条件;步长表达式)
{语句}

在awk 的 while、do-while和for语句中容许使用break,continue语句来控制流程走向,也容许使用exit这样的语句来退出。break 中断当前正在执行的循环并跳到循环外执行下一条语句。continue从当前位置跳到循环开始处执行。对于exit的执行有两种状况:当exit语句不在 END中时,任何操做中的exit命令表现得如同到了文件尾,全部模式或操做执行将中止,END模式中的操做被执行。而出如今END中的exit将致使程 序终止。

例:为了

awk中的自定义函数

定义和调用用户本身的函数是几乎每一个高级语言都具备的功能,awk也不例外,但原始的awk并不提供函数功能,只有在nawk或较新的awk版本中才能够增长函数。

函数的使用包含两部分:函数的定义与函数调用。其中函数定义又包括要执行的代码(函数自己)和从主程序代码传递到该函数的临时调用。

awk函数的定义方法以下:

function 函数名(参数表){
函数体
}

在gawk中容许将function省略为func,但其它版本的awk不容许。函数名必须是一个合法的标志符,参数表中能够不提供参数(但在调用函数时函数名后的一对括号仍然是不可缺乏的),也能够提供一个或多个参数。与C语言类似,awk的参数也是经过值来传递的。

在awk 中调用函数比较简单,其方法与C语言类似,但awk比C语言更为灵活,它不执行参数有效性检查。换句话说,在你调用函数时,能够列出比函数预计(函数定义 中规定)的多或少的参数,多余的参数会被awk所忽略,而不足的参数,awk将它们置为缺省值0或空字符串,具体置为什么值,将取决于参数的使用方式。

awk函数有两种返回方式:隐式返回和显式返回。当awk执行到函数的结尾时,它自动地返回到调用程序,这是函数是隐式返回的。若是须要在结束以前退出函数,能够明确地使用返回语句提早退出。方法是在函数中使用形如:return 返回值 格式的语句。

例: 下面的例子演示了函数的使用。在这个示例中,定义了一个名为print_header的函数,该函数调用了两个参数FileName和PageNum, FileName参数传给函数当前使用的文件名,PageNum参数是当前页的页号。这个函数的功能是打印(显示)出当前文件的文件名,和当前页的页号。 完成这个功能后,这个函数将返回下一页的页号。

nawk
>'BEGIN{pageno=1;file=FILENAME
>pageno=print_header(file,pageno);#调用函数print_header
>printf("当前页页号是:%d\n",pageno);
>}

>#定义函数print_header
>function print_header(FileName,PageNum){
>printf("%s %d\n",FileName,PageNum); >PageNum++;return PageNUm;
>}
>}' myfile

执行这个程序将显示以下内容:

myfile 1
当前页页号是:2

awk高级输入输出

1.读取下一条记录:

awk的next语句致使awk读取下一个记录并完成模式匹配,而后当即执行相应的操做。一般它用匹配的模式执行操做中的代码。next致使这个记录的任何额外匹配模式被忽略。

2.简单地读取一条记录

awk 的 getline语句用于简单地读取一条记录。若是用户有一个数据记录相似两个物理记录,那么getline将尤为有用。它完成通常字段的分离(设置字段变 量0 FNR NF NR)。若是成功则返回1,失败则返回0(到达文件尾)。若是需简单地读取一个文件,则能够编写如下代码:

例:示例getline的使用

{while(getline==1)
{
#process the inputted fields
}
}

也能够使getline保存输入数据在一个字段中,而不是经过使用getline variable的形式处理通常字段。当使用这种方式时,NF被置成0,FNR和NR被增值。

用 户也能够使用getline<"filename"方式从一个给定的文件中输入数据,而不是从命令行所列内容输入数据。此时,getline将完成 通常字段分离(设置字段变量0和NF)。若是文件不存在,返回-1,成功,返回1,返回0表示失败。用户能够从给定文件中读取数据到一个变量中,也能够用 stdin(标准输入设备)或一个包含这个文件名的变量代替filename。值得注意的是当使用这种方式时不修改FNR和NR。

另外一种使用getline语句的方法是从UNIX命令接受输入,例以下面的例子:

例:示例从UNIX命令接受输入

{while("who -u"|getline)
{
#process each line from the who command
}
}

固然,也能够使用以下形式:

"command" | getline variable

3.关闭文件:

awk中容许在程序中关闭一个输入或输出文件,方法是使用awk的close语句。

close("filename"

filename能够是getline打开的文件(也能够是stdin,包含文件名的变量或者getline使用的确切命令)。或一个输出文件(能够是stdout,包含文件名的变量或使用管道的确切命令)。

4.输出到一个文件:

awk中容许用以下方式将结果输出到一个文件:

printf("hello word!\n">"datafile"

printf("hello word!\n">>"datafile"

5.输出到一个命令

awk中容许用以下方式将结果输出到一个命令:

printf("hello word!\n"|"sort-t','"

awk与shell script混合编程

因 为awk能够做为一个shell命令使用,所以awk能与shell批处理程序很好的融合在一块儿,这给实现awk与shell程序的混合编程提供了可能。 实现混合编程的关键是awk与shell script之间的对话,换言之,就是awk与shell script之间的信息交流:awk从shell script中获取所需的信息(一般是变量的值)、在awk中执行shell命令行、shell script将命令执行的结果送给awk处理以及shell script读取awk的执行结果等等。

1.awk读取Shell script程序变量

在awk中咱们能够经过“'变量名'”的方式读取sell scrpit程序中的变量。

例:在下面的示例中,咱们将读取sell scrpit程序中的变量Name,该变量存放的是文本myfile的撰写者,awk将打印出这我的名。

cat writename
:
# @(#)
#
.
.
.
Name="张三" nawk 'BEGIN {name="'Name'";\ printf("\t%s\t撰写者%s\n",FILENAME,name";}\
{...}END{...}' myfile
.
.
.

2.将shell命令的执行结果送给awk处理

做为信息传送的一种方法,咱们能够将一条shell命令的结果经过管道线(|)传递给awk处理:

例:示例awk处理shell命令的执行结果

who -u | awk '{printf("%s正在执行%s\n",2,1)}'

该命令将打印出注册终端正在执行的程序名。

3.shell script程序读awk的执行结果

为 了实现shell script程序读取awk执行的结果,咱们能够采起一些特殊的方法,例如咱们能够用变量名=`awk语句`的形式将awk执行的结果存放入一个 shell script变量。固然也能够用管道线的方法将awk执行结果传递给shell script程序处理。

例:做为传送消息 的机制之一,UNIX提供了一个向其全部用户传送消息的命令wall(意思是write to all写给全部用户),该命令容许向全部工做中的用户(终端)发送消息。为此,咱们能够经过一段shell批处理程序wall.shell来模拟这一程序 (事实上比较老的版本中wall就是一段shell批处理程序:

cat wall.shell
:
# @(#) wall.shell:发送消息给每一个已注册终端
#
cat >/tmp/
#用户录入消息文本 who -u | awk '{print 2}' | while read tty
do
cat /tmp/>tty
done

在 这个程序里,awk接受who -u命令的执行结果,该命令打印出全部已注册终端的信息,其中第二个字段是已注册终端的设备名,所以用awk命令析出该设备名,而后用while read tty语句循环读出这些文件名到变量(shell script变量)tty中,做为信息传送的终结地址。

4.在awk中执行shell命令行----嵌入函数system()

system()是一个不适合字符或数字类型的嵌入函数,该函数的功能是处理做为参数传递给它的字符串。system对这个参数的处理就是将其做为命令处理,也就是说将其看成命令行同样加以执行。这使得用户在本身的awk程序须要时能够灵活地执行命令或脚本。

例:下面的程序将使用system嵌入函数打印用户编制好的报表文件,这个文件存放在名为myreport.txt的文件中。为简约起见,咱们只列出了其END部分:

.
.
.
END {close("myreport.txt";system("lp myreport.txt";}

在这个示例中,咱们首先使用close语句关闭了文件myreport.txt文件,而后使用system嵌入函数将myreport.txt送入打印机打印。

写 到这里,我不得不跟朋友们说再见了,实在地说,这些内容仍然是awk的初步知识,电脑永远是前进的科学,awk也不例外,本篇所能作的只是在你前行的漫漫 长途中铺平一段小小开端,剩下的路还得靠你本身去走。老实说,若是本文真能给你前行的路上带来些许的方便,那本人就满足了!

如对本篇有任何疑问,请E-mail To:Chizlong@yeah.net或到主页http://chizling.yeah.net中留言。


附录:

1.awk的常规表达式元字符

\ 换码序列
^ 在字符串的开头开始匹配
在字符串的结尾开始匹配
. 与任何单个字符串匹配
[ABC] 与[]内的任一字符匹配
[A-Ca-c] 与A-C及a-c范围内的字符匹配(按字母表顺序)
[^ABC] 与除[]内的全部字符之外的任一字符匹配
Desk|Chair 与Desk和Chair中的任一个匹配
[ABC][DEF] 关联。与A、B、C中的任一字符匹配,且其后要跟D、E、F中的任一个字符。
* 与A、B或C中任一个出现0次或屡次的字符相匹配
+ 与A、B或C中任何一个出现1次或屡次的字符相匹配
? 与一个空串或A、B或C在任何一个字符相匹配
(Blue|Black)berry 合并常规表达式,与Blueberry或Blackberry相匹配

2.awk算术运算符

运算符 用途
------------------
x^y x的y次幂
x**y 同上
x%y 计算x/y的余数(求模)
x+y x加y
x-y x减y
x*y x乘y
x/y x除y
-y 负y(y的开关符号);也称一目减
++y y加1后使用y(前置加)
y++ 使用y值后加1(后缀加)
--y y减1后使用y(前置减)
y-- 使用后y减1(后缀减)
x=y 将y的值赋给x
x+=y 将x+y的值赋给x
x-=y 将x-y的值赋给x
x*=y 将x*y的值赋给x
x/=y 将x/y的值赋给x x%=y 将x%y的值赋给x
x^=y 将x^y的值赋给x
x**=y 将x**y的值赋给x

3.awk容许的测试:

操做符 含义

x==y x等于y
x!=y x不等于y
x>y x大于y
x>=y x大于或等于y
xx<=y x小于或等于y?
x~re x匹配正则表达式re?
x!~re x不匹配正则表达式re?

4.awk的操做符(按优先级升序排列)

= 、+=、 -=、 *= 、/= 、 %=
||
&&
> >= < <= == != ~ !~
xy (字符串连结,'x''y'变成"xy")
+ -
* / %
++ --

5.awk内置变量(预约义变量)

说明:表中v项表示第一个支持变量的工具(下同):A=awk,N=nawk,P=POSIX awk,G=gawk

V 变量 含义 缺省值
--------------------------------------------------------
N ARGC 命令行参数个数
G ARGIND 当前被处理文件的ARGV标志符
N ARGV 命令行参数数组
G CONVFMT 数字转换格式 %.6g
P ENVIRON UNIX环境变量
N ERRNO UNIX系统错误消息
G FIELDWIDTHS 输入字段宽度的空白分隔字符串
A FILENAME 当前输入文件的名字
P FNR 当前记录数
A FS 输入字段分隔符 空格
G IGNORECASE 控制大小写敏感0(大小写敏感)
A NF 当前记录中的字段个数
A NR 已经读出的记录数
A OFMT 数字的输出格式 %.6g
A OFS 输出字段分隔符 空格
A ORS 输出的记录分隔符 新行
A RS 输入的记录他隔符 新行
N RSTART 被匹配函数匹配的字符串首
N RLENGTH 被匹配函数匹配的字符串长度
N SUBSEP 下标分隔符 "\034"

6.awk的内置函数

V 函数 用途或返回值
------------------------------------------------
N gsub(reg,string,target) 每次常规表达式reg匹配时替换target中的string
N index(search,string) 返回string中search串的位置
A length(string) 求串string中的字符个数
N match(string,reg) 返回常规表达式reg匹配的string中的位置
N printf(format,variable) 格式化输出,按format提供的格式输出变量variable。
N split(string,store,delim) 根据分界符delim,分解string为store的数组元素
N sprintf(format,variable) 返回一个包含基于format的格式化数据,variables是要放到串中的数据
G strftime(format,timestamp) 返回一个基于format的日期或者时间串,timestmp是systime()函数返回的时间
N sub(reg,string,target) 第一次当常规表达式reg匹配,替换target串中的字符串
A substr(string,position,len) 返回一个以position开始len个字符的子串
P totower(string) 返回string中对应的小写字符
P toupper(string) 返回string中对应的大写字符
A atan(x,y) x的余切(弧度)
N cos(x) x的余弦(弧度)
A exp(x) e的x幂
A int(x) x的整数部分
A log(x) x的天然对数值
N rand() 0-1之间的随机数
N sin(x) x的正弦(弧度)
A sqrt(x) x的平方根
A srand(x) 初始化随机数发生器。若是忽略x,则使用system()
G system() 返回自1970年1月1日以来通过的时间(按秒计算)

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

linux 操做技巧 96例


1. 查看man文件...
nroff -man man/libnet.3 | less
有时候man文件不在系统目录..这时候就能够用上面的方式来查看非标准的man文件

2. 以不一样的用户身份运行程序...
su - username -c "where/is/command/line"
有时候须要运行特殊身份的程序...就可让su来作...

3. 解压bz文件
tar -jvxf some.bz
就是把tar的zvxf 改为jvxf

4. 编辑/etc/inittab后直接生效的方法..
执行init q

5. 让linux连续执行几个命令,出错中止
command1 && command2 && command3 ....

6. linux中的bg和fg管理
当咱们打ctrl+z的时候一个任务就被挂起(就是暂停),同时屏幕上返回一个数字,这时候能够用 "bg %数字" 来把这个进程放到后台执行...这个很适合在你忘了加&的时候进行补救...一样 " fg %数字 "就能让这个进程放到前台来执行了...
job命令用来查看当前的被bg的进程...

7. ctrl+s与ctrl+q
ctrl-s 好象是从终端时代遗传过来的东东, 流量控制, 用来暂停向终端发送数据的. ctrl-q 用来恢复恢复

8. 目录统计教本
保存成total.sh ,而后用total.sh 绝对路径,就会统计路径下目录的大小了
#!/bin/sh
du 1 --max-depth=1 | sort -n|awk '{printf "%7.2fM ----> %s\n",1/1024,2}'|sed 's:/.*/\([^/]\{1,\}\):\1:g'

9. grep不显示自己进程
ps -aux|grep httpd|grep -v grep
经过再一次grep -v grep就能够取消显示你所执行的grep自己这个进程,-v参数是不显示所列出的进程名.

10. 本身用的一个统计httpd的脚本
#!/bin/sh
while (true)
do
pstree |grep "*\[httpd\]"|sed 's/.*-\([0-9][0-9]*\)\*\[httpd\]/\1/'
sleep 3
done

11. 解压rpm包中的文件
cat gnome-libs-1.4.1.2.90.22.i386.rpm | rpm2cpio | pax -r

12. 去掉apache的manual目录中的全部.en的后缀名
进入到manual目录
find ./ -regex .*\.en|awk -F. '{ printf "mv %s.%s.%s.%s %s.%s.%s\n",1,2,3,4,1,2,3}'|sh

13. linux里如何映射windows里的硬盘
mount -t smbfs -o username=xxx,password=xxx //winxp_ip_or_hostname/sharename /local_path
fc2中已经不须要-t smbfs这个参数了.

14. linux里如何查看可用的硬盘设备
fdisk -l

15. 命令行下制做ISO
用法: mkisofs -a -I -J -r -o filename.iso /目录
用途: 将linux下某个目录中的全部文件作成iso镜像.并且我加上了参数,能够保证你作出来的光盘是在windows下也能够用的 (iso是有文件大小限制的...具体多少偶忘记了)

16. Linux下ISO的虚拟方法
步骤以下:
1. 把 /dev/cdrom 删除,而后运行 ln -s /dev/loop7 /dev/cdrom
2. losetup /dev/loop7 xxx.iso
3. mount /mnt/cdrom
如何换盘:
1. losetup -d /dev/loop7 ;目的是取消这个设备
2. losetup /dev/loop7 yyy.iso ;新的iso文件

17. hosts的用法
host 可以用来查询域名,然而它能够获得更多的信息.host -t mx linux.com能够查询出linux.com的MX记录,以及处理mail的host的名字.host -l linux.com会返回全部注册在linux.com下的域名.host -a linux.com则会显示这个主机的全部域名信息.

18. *.bz2文件如何解压缩
使用tar -I 或者bunzip2命令均可以.

19. RPM常见用法
安装rpm包时显示进度并校验包的正确性
用-vh参数:
如 rpm -ivh ipchains-1.3.6-1.i386.rpm 若是用glint或xrpm则没必要.
直接经过ftp来安装rpm包 如 rpm -i ftp://ftp.xxx.xxx
校验全部的rpm包,查找丢失的文件 rpm -Va
查找一个文件属于哪一个rpm包 如 rpm -qf /usr/bin/who
列出一个rpm包的描述信息 如 rpm -qpi mon-0.37j-1.i386.rpm
列出一个rpm包的文件信息 如 rpm -qpl mon-0.37j-1.i386.rpm

20. 查看系统监听的服务
用法: netstat -ln
解释: "l"表示显示当前系统监听的端口信息;"n"表示端口按照端口号来显示,而不转换为service文件中定义的端口名;若但愿了解各个端口都是由哪些进程监听则能够使用p参数.

21. 查看系统运行的进程
用法: ps -auxw
解释: 其中参数"a"表示显示系统中全部用户的的进程;"u"表示输出进程用户所属信息;"x"表示也显示没有控制台的进程;若显示行太长而被截断则能够使用f参数.

22. Linux账号搬家
对于新帐号->
保证将要加入系统的新账号放在新的位置上,这经过修改/etc/default/useradd文件中的HOME值来实现. 如: HOME=/home2 使新增账号的主目录建在/home2下.
将已有账号移至新的位置->
首先,将已有账号的主目录连带目录属性拷至新位置,可用下面命令:
cp -a /home /home2或cp -rpd /home /home2
而后,修改/etc/passwd文件中相应记录的home_directory域为/home2/username.
这样两步已将旧账号移至新位置.确保无误后,可删去旧账号的旧主目录以腾出原文件系统的空间.

23. 启动时屏幕显示的信息
Linux 启动时屏幕显示的信息来不及看清就一闪而过,若是对这些信息感兴趣的话能够在启动完后用命令 dmesg 查看.

24. GRUB引导恢复小法
用启动盘或安装盘(linux rescue)进linux
sh# grub
grub> root (hdx,y)
grub> setup (hd0)
重启
说 明: 若是成功会有一个successful......这里的x,若是是一个盘,就是0.若是你所安装的linux的根分区在第二个硬盘上,那x就是1了;y 就是装有linux系统所在的根分区.setup (hd0)就是把GRUB写到硬盘的MBR上.若是我知道个人linux装在第一个硬盘上,但我不知道装在哪一个分区上,就能够先输入root (hd0,而后用[TAB]键来补齐,而后就明白了.

25. 测试磁盘性能
用法: hdparm -tT /dev/hd?
例如: hdparm -tT /dev/hda (测试第一个物理硬盘的速度)

26. 将内网的服务对外开放
将192.168.1.2上的8888端口映射到192.168.1.3的8888端口
#iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8888 -j DNAT --to-destination 192.168.1.2:8888
#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 192.168.1.2 -p tcp -m tcp --dport 8888 -j SNAT --to-source 192.168.1.3
#iptables -A INPUT -p tcp --dport 8888 -i eth0 -j ACCEPT (视状况而加)

27. 关闭"讨厌"的Linux按键Beep声
vi /etc/.inputrc 增长下面一行
set bell-style none

28. 开机进入图形/文本登录方式
vi /etc/inittab
id:x:initdefault:
x=3:文本方式 x=5:图形方式

29. 在GRUB中限制系统可以使用的内存数量
限制Linux只能使用120MB内存
title Red Hat Linux (2.4.19)
root (hd0,1)
kernel /boot/vmlinuz-2.4.19 ro root=/dev/hda2 mem=120M
initrd /boot/initrd-2.4.18-14.img

30. 如何查找某条命令的相关库文件
在Linux环境下经过ldd命令便可实现,在控制台执行:
ldd /bin/ls
便可获得/bin/ls命令的相关库文件列表.

31. 只列子目录(文件)
ls -F | grep /
你也能够在.bashrc(针对bash)中把该命令做成alias,之后只要敲入sub就能够实现只列子目录的功能.  alias sub = "ls -F | grep /" 一样,ls -l | grep ^-则是只列普通文件.

32. 计算目录下的文件及子目录
ls -al | wc -l

33. RedHat 下显示彩色目录列表
ls -color 能够显示彩色目录列表,其中:  蓝色→目录  绿色→可执行文件  红色→压缩文件  浅蓝色→连接文件  灰色→其余文件
一样你还能够试试ls --color(比前面多-),看看二者的差异吧

34. 列目录时显示中文文件名
在没有打补丁的Linux系统中,咱们用ls列目录,发现中文文件名都成了?号.咱们能够使用--show-control-chars命令选项来显示.
ls --show-control-chars

35. 改变当前路径下全部目录和文件的全部权
chown -R owner[.group] *
也能够用find命令来实现: find . -exec chown owner[.group] {} ;

36. 改变全部子目录及文件的属性
在你要改变属性的目录下,输入命令:chmod -R 777 *
就能够改变下面全部子目录及文件的属性,不过使用这个命令的时候要特别当心,要是在根目录下打入这个命令,你全部文件的属性都将改变,这就会引发很大的安全性问题.

37. 使用nohup命令
若是你想进程在你退出系统后还能执行,能够使用nohup命令.
如:  nohup tar cf /dev/tape /home &
你退出后再从新登陆的话,使用ps命令会发现进程还在执行.

38. 从新启动
Ctrl+Alt+Del 或 init 6 或 shutdown -r now

39. 快速查找文件
查找文件能够用find,但最好是用locate.速度快,参数少.
locate filename
它是在一个数据库里面查找.因此,要记得常常用updatedb命令更新数据库.通常地,咱们是在crontab里面加一句,让机子在天天深夜更新数据库.
另外,快速查找命令文件,能够使用whereis.
例如:  whereis rpm

40. 查找Linux命令
若是你想实现某种功能,可是不知道该使用什么命令.你能够试试apropos命令,它也许能帮你找到你想要的命令.例如: 你要"查找"文件,又不知道用什么命令,你能够敲入下面的命令:
apropos search

41. 在同一个命令行上同时执行多条命令
用分号分隔.如编译一个源文件:
#./configure ; make ; make install

42. 用gzip(gunzip)压缩(解压)同一目录下的多个文件
gzip * 或者 gunzip *

43. 在使用less或more时,直接启动vi
在less或者more中打入v键,会当即启动vi编辑器,能够对文件进行编辑.

44. 在使用mail中启动vi
若是你以为用mail发送邮件编辑起来很不方便,你能够在正文的顶格输入~v,启动vi进行编辑,编辑完后退出vi,回到mail.

45. 观察文件大小变化
使用watch命令,能够反复执行命令.和ls配合,能够达到观察某文件大小变化的效果.
watch ls -| file.name

46. 观看binary文件中的字符串
strings binaryfile

47. 重装Win 9x后lilo失效没法启动Linux
只须先用软盘启动Linux而后运行一次lilo便可.对于RedHat能够用命令mkbootdisk来制做启动盘,例如:  mkbootdisk --device /dev/fd0 2.4.20
其中2.4.20是/lib/modules下的一个目录.

48. 去掉引导区内的lilo信息
安装lilo后若是硬盘数量或分区状况有改变的话将致使硬盘不能启动,这时只需用软盘启动DOS再运行fdisk/mbr便可.

49. 把DOS/Windows改成缺省操做系统
RedHat 把Linux做为lilo缺省操做系统,即出现 boot: 提示符后直接回车启动Linux.若是想改成DOS/Windows,修改文件/etc/lilo.conf,把有关启动DOS的部分放在前面,再运行一 次lilo便可.也能够在lilo.conf的配置文件前面加上 Default=dos 其中DOS是DOS/Windows的label

50. 如何使用.iso文件
许多Linux发行版本都有.iso的光盘镜像文件,能够用来刻录光盘.咱们也能够在Linux系统下直接使用.  mount -t iso9660 xxxxx.iso /any/path/if/u/like -o loop

51. 显示文件的类型
用命令 file 能够使你知道某个文件到底是ELF格式的可执行文件,仍是shell script文件或是其余的什么格式.  file filename

52. 解压.tar.gz文件
xxxx.tar.gz文件使用tar带zxvf参数,能够一次解压开.  tar zxvf xxxx.tar.gz

53. 后台运行程序
能够在程序后面加"&"符号,让程序在后台运行.例如: 你想用updatedb更新文件路径数据库,又不影响你其余的工做.能够:  updatedb &

54. 强行退出 X
有时候在 X 里因为程序出错鼠标键盘都不起做用,这时候不用着急,由于在Linux下几乎不会像在Win 95里那样恶性死机,你只须同时按下Ctrl+Alt+BackSpace键就能够回到字符界面下了.

55. 压缩可执行文件
能够使用gzexe压缩可执行文件,压缩后的可执行文件仍然能够直接执行.使用本方法能够达到节省磁盘空间的目的(若是你真的须要的话).  gzexe gawk

56. 处理文件名内含有特殊字符的文件
如 果有一个文件名叫-file,若是想删除它,键入 rm -file 会显示invalid option,原来因为文件名的第一个字符为"-",Linux把文件名当作选项了,能够加--解决这个问题,如rm -- -file.若是是其余特殊字符的话能够在特殊字符前加一个\,或者用双引号把整个文件名括起来.

57. 快速进入目录
键入 cd ~ 可进入用户的home目录;键入 cd - 可进入上一个进入的目录.

想所有删除以.开头的file或dir时你会如何干?
Wrong-> rm -r /tmp/.*
Correct-> rm -r /tmp/\.*

58. 修改网卡MAC地址
ifconfig eth0 down
ifconfig eth0 hw ether 00:AA:BB:CCD:EE
ifconfig eth0 up
上面的是临时性的你能够加入rc.local让它开机自动执行

59. 查看网卡工做状态
#mii-tool -v
eth0: no link
product info: vendor 00:00:00, model 0 rev 0
basic mode: autonegotiation enabled
basic status: no link
capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
advertising: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
SIOCGMIIPHY on 'eth1' failed: Operation not supported

60. 如何解决sendmail和sm-client启动爆慢的问题!
形成sendmail和sm-client启动慢是由于解析的问题,解决方法将本身的主机名加入/etc/hosts中便可,例如个人主机名是linuxbox.localdomain则/etc/hosts中应该有一条
192.168.100.1 linuxbox.localdomain linuxbox

61. 信息加蓝色标记的sed语法...
sed -e "s/^-.*/[color=blue]&[\/color]/g" tip>./new

62. 将一个服务加到自启动运行等级中
chkconfig --add httpd
chkconfig --level 3 httpd on
就是把httpd加到chkconfig管理中,并加在第三层启动

63. 在终端下调音量
aumix

64. 将man文件导出为文件并去掉控制符
man command | col -b >col.txt

65. col -b就是去掉控制符的

66. 查看文件夹大小
du ./ --max-depth=1
--max-depth=1是控制显示深度

67. 光驱弹出,弹入
eject -r 弹出
eject -t 弹入

68. 显示最近登入用户
last

69. chkconfig 能够设置系统启动配置
chkconfig httpd on
chkconfig vsftpd on
.......

70. service 能够控制服务的起停
service vsftpd restart
service sendmail stop
......

71. 禁止文件写(包括root)
chattr +i filename

72. 以实时滚动方式查看系统syslog
tail -f /var/log/messages

73. 清空日志:
cat /dev/null > *.log
可加在crontab中完成日志的清空做业。

74. 杀死全部俱指定名字的进程
killall processname

75. 查找含特定字符串的文件
例如查找当前目录下含有"the string you want find..."字符串的文件
find <路径> [-name xxx] | xargs grep "字串" ...

76. 查看进程
ps -e
ps -ef
是不一样的.你会发现不一样的当前run的name.若是发现不一样,就说明有可能有人在你的机器做了一些动做

77. 利用xargs对管道输出的信息使用特定程序进行处理
find ~root|xargs chmod a-x

78. 列出远程主机(windows)的共享目录
smbclient -L X.X.X.X(IP) -U 用户名

79. 把远程主机的共享目录temp挂到/mnt
mount -t smbfs -o username=用户名 //X.X.X.X(IP)/temp /mnt

80. 查看win32(fat)分区
fdisk -l (列出分区)(例)/dev/hda6 5000000 fat32
咱们要看到这个分区,则:
mkdir win_fat
mount -t vfat /dev/hda6 /win_fat

81. 查找
文件夹
find /path/ \( -type d -name ".*" -exec mv {} ./path \; \)
文件
find /path/ \( -type f -name ".*" -exec mv {} /path/ \; \)

82. 显示该进程打开的文件
lsof -p pid

83. 显示链接打开的文件
lsof -i ◎[ip|hostname] port

84. 显示打开这个目录的文件
lsof directory
(能够在想umount某一目录不成功的时候,查看是否是被别的文件打开了)

85. 显示打开这个文件的进程
lsof file

86. 在ksh下用vi来编辑全部执行过的命令
ksh下执行set -o vi
或者在别的shell下执行ksh -o vi

87. more或者man的时候能够直接使用vi中的一些操做
好比j,k,CTRL+f CTRL+b,/ 等等

88. 想把man的内容导出到文本么?
man ls | col -b >a.txt

89. csh下"^"的一个小用法
% touch 11
% ^11^22
touch 22
%
不过只能替换第一个匹配到的字符串,第二个就匹配不到了

90. tar+compress
tar cvf - ./dir | compress -c >dir.tar.Z
uncompress -c dir.tar.Z|tar xvf -

91. 当前目录下文件太多,用grep会报参数超长...
ls -al|wc -l
12323
grep 123123123 *
Arguments too long.
find . -name "*" | xargs grep 123123123

92. 搜索两个字符串(AAA 与 BBB)很简单, 用管道就成
grep AAA file |grep BBB = cat file|grep AAA|grep BBB
搜索两个字符串(AAA 或 BBB),能够作两次 grep AAA file, grep BBB file
也能够一鼓作气:cat file |fgrep 'AAA (回车!)
grep -E 'AAA|BBB' file-name

93. 查看系统中已有的用户
cut -f1 -d: /etc/passwd

94. touch filename
若是filename已存在,则改变文件的日期、时间;
若是filename不存在,则建立一个新的空文件。

95. du -sm 察看目录大小

96. num-lock default on
any of /etc/rc.d/*
for t in 1 2 3 4 5 6 7 8
do
setleds +num < /dev/ttyt > /dev/null
done
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

122 一些奇怪的Unix 指令名字的由来awk = "Aho Weinberger and Kernighan"   这个语言以做者 Al Aho, Peter Weinberger 和 Brian Kernighan 的姓来命名。   grep = "Global Regular Expression Print"   grep 来自 ed 的列印全部符合某 pattern 指令   g/re/p   "re" 表明 regular expression   fgrep = "Fixed GREP".   fgrep □找固定的字串。"f" 不是表明 "fast" - 事实上, "fgrep foobar *.c" 一般比 "egrep foobar *.c" 来得慢(有点意外吧, 不信的话, 本身试试喽)。   尽管如此,Fgrep 仍然有可取之处,在档案中搜寻字串的时候,Fgrep 能处理的字串数目较 egrep 多。   egrep = "Extended GREP"   egrep 用比 grep 更 fancy 的 regular rexpression。许多人始终只用 egrep,由于它用的 algorithm 比 grep 或 fgrep 用的高级,并且一般是三个程式中最快的。   cat = "CATenate"   catenate 是一个艰深难懂的单字,意思是"把它连成一串", 这就是"cat" 这个指令对一个或多个档案所作的处理。   请不要跟 C/A/T 混淆了,C/A/T 是指电脑辅助排版系统(Computer Aided Typesetter)。   gecos = "General Electric Comprehensive Operating Supervisor"   不过,当通用电器 (GE) 的大型系统部门卖给 Honeywell 的时候,Honeywell 就把 GECOS 的 E 拿掉了。   目前 Unix 的密码档里面仍保有 "pw_gecos" 这个栏位。这个名字是从古早的年代沿用过来的。   Dennis Ritchie 曾经说过:   "有时候咱们会把印表输出或整批工做丢到 GCOS 机器。密码档里面的 gcos 栏位是用来隐藏 $IDENT 卡片上的资讯,这样作不够优雅"。   nroff = "New ROFF"   troff = "Typesetter new ROFF"   这些字都是从"roff"衍生的, roff 是重写 Multics 上的 runoff 程式得来的 (runoff 的意思就是"印出文件")。  tee = T   这是管线工人的术语,表明 T 型的管线分叉器。   bss = "Block Started by Symbol" (由符号启始的区块)   Dennis Ritchie 曾说过:    这个缩写也许有其余说法,但事实上咱们采用这个缩写的本意是"Block Started by Symbol"。它是 FAP 上的虚拟指令,FAP (Fortran Assembly [-er?] Program) 是指 IBM 704-709-7090-7094   这种机型的组译器。这个指令可定义本身的标号,而且预留必定数目的字组空间。还有另外一个虚拟指令 BES,是 "Block Ended by Symbol",跟 BSS 指令几乎同样,不一样点在於标号是定义在预留字组   空间尾端的位址 + 1 的地方。在这些机器上,Fortran 的阵列是以反方向储存,并且阵列的索引是从 1 算起。   这种用法是合理的,由于这跟 UNIX 上标准的程式载入器同样,程式码当中并不是真的放入这一整块预留空间,而是先用一个数目表示,在载入时才真的把所需的预留空间定出来。   biff = "BIFF"   这个指令是用来设定当您有新邮件进来时,是否要通知您。这是柏克莱大学校园内一只狗的名字。   我能够肯定这个名称的起源,若是您有兴趣的话,Biff 是 HeidiStettner 养的宠物,想当年 Heidi (还有我,跟 Bill Joy) 都仍是UCB 的研究生时,早期的 BSD 版本还在发展中。Biff 受到流连於   Evans Halls 这些人的喜好,也由于它会对前来的邮差吠叫而闻名;所以就以 biff 看成指令的名称。   (这是卡内基美浓大学的 Eric Cooper 证明的)  rc (像是 ".cshrc" 或 "/etc/rc" 中的 rc 这两个字母) = "RunCom"    "rc" 是取自 "runcom", 来自麻省理工学院在 1965 年发展的 CTSS系统。相关文献曾记载这一段话: '具备从档案中取出一系列命令来执行的功能;这称为 "run commands" 又称为 "runcom",而这种档案又称为一个 runcom (a runcom)。'   Brian Kernighan 与 Dennis Ritchie 告诉 Vicki Brown 说: "rc" 也是Plan 9 做业系统 shell 的名字。   Perl = "Practical Extraction and Report Language"   Perl = "Pathologically Eclectic Rubbish Lister"   Perl是 Larry Wall 所发展的一种至关受欢迎的语言, Perl 在处文字,   process,与档案时很是便利,能够说是兼得 shell 与 C 之长。