一、 Fedora系统配置
- 1. 【设置网卡IP】
步骤如下:
1) 用root用户登陆,打开/etc/sysconfig/network-scripts/ifcfg-eth0文件
注意:打开的文件要根据网卡来设置,如:网卡eth1的配置文件就是ifcfg-eth1。
2) 设置以下内容:
DEVICE=eth0
BOOTPROTO=static
IPADDR=10.128.32.36
NETMASK=255.0.0.0
ONBOOT=yes
GATEWAY=10.128.32.102
说明:网卡GATEWAY不一定要设置在这个网卡配置文件中,也可以配置到/etc/sysconfig/network文件中,如下所示:
NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=localhost.localdomain
GATEWAY=10.128.32.102
3) 重启network服务
[[email protected]:/etc/sysconfig]# service network restart
Shutting down interface eth0: [ OK ]
Shutting down loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface eth0: [ OK ]
- 2. 【启动telnet服务】
telnet服务是由xinetd(扩展的网络守护进程服务程序)守护的,所以很多配置都是在xinetd下进行。具体步骤如下:
1) 检测telnet、telnet-server的rpm包是否安装
[[email protected]:/etc/sysconfig]# rpm -qa | grep telnet
telnet-0.17-37
telnet-server-0.17-37
主要看telnet-server有没有安装,如果没有要先把telnet-server安装起来(具体安装方法略)。
2) 修改telnet服务配置文件
Fedora默认是不开通telnet服务的,所以需要手动配置开启:
[[email protected]:/etc/sysconfig]# vi /etc/xinetd.d/telnet
service telnet
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
disable = yes
}
将disable项屏蔽或者改为no:
disable = no
3) 修改Fedora下另一个telnet配置文件
对于Red-Hat系统,修改到telnet文件就可以了,但是Fedora对权限的管理比Red-Hat严格,还需要修改同一个目录下的krb5-telnet,不然客户端会鉴权不通过而无法连接。
[[email protected]:/etc/xinetd.d]# ls *telnet*
ekrb5-telnet krb5-telnet telnet
[[email protected]:/etc/xinetd.d]# vi krb5-telnet
service telnet
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/kerberos/sbin/telnetd
log_on_failure += USERID
disable = no
}
将disable项屏蔽或者改为no:
disable = no
注意:在权限和鉴权方面,Fedora和Red-Hat一样,都要让防火墙允许telnet连接。一般,可以直接关闭防火墙,否则就必须用setup工具配置一下。
4) 重新启动xinetd守护进程
[[email protected]:/etc/xinetd.d]# service xinetd restart
Stopping xinetd: [ OK ]
Starting xinetd: [ OK ]
- 3. 【启动FTP服务】
FTP守护进程是vsftpd,开启步骤如下:
1) 检测ftp、lftp的rpm包是否安装
[[email protected]:/etc/xinetd.d]# rpm -qa | grep ftp
gftp-2.0.18-3.2.2
lftp-3.5.1-2.fc6
vsftpd-2.0.5-8
tftp-server-0.42-3.1
ftp-0.17-33.fc6
tftp-0.42-3.1
2) 配置开启ftp服务
运行setup,在system service中选中vsftpd按空格选中,然后quit。
3) 关闭SeLinux的安全设置
和Red-Hat不同,Fedora存在一个SELinux的安全机制管理,需要撤销SELinux对ftp的安全设置,FTP才能正常登陆,不然会报“500 OOPS: cannot change directory”的错误。执行下面的语句即可:
[[email protected]:/etc/xinetd.d]# setsebool ftpd_disable_trans 1
注意:一旦重启该命令就会失效,所以最好的办法是在X界面下,点击菜单“System”à“Administration”à“Security Level and Firewall”,将选项SELinux设置为“Disable”,然后重启系统,就可以保持这个设置了。
4)重启FTP服务
[[email protected]:/etc/xinetd.d]# service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
- 4. 【设置开机自动执行】
设置方法如下:
1)用root用户登陆
2)vi /etc/rc.local
3)添加要开机执行的语句,如果是一个脚本文件,注意要绝对路径
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don‘t
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
setsebool ftpd_disable_trans 1
service vsftpd restart
- 5. 【设置自动关机】
自动关机可以在crontab中设置。假设希望每天23::50关机,设置方法如下:
1)用root登陆
2)vi /etc/crontab
3)在文件最后添加以下语句:
50 23 * * * root shutdown -h now
- 6. 【设置允许root登陆telnet】
设置方法如下:
1)用root登陆
2)vi /etc/pam.d/login
3)注释该文件第一行内容:
#%PAM-1.0
#auth required /lib/security/pam_securetty.so
auth required /lib/security/pam_stack.so service=system-auth
auth required /lib/security/pam_nologin.so
account required /lib/security/pam_stack.so service=system-auth
password required /lib/security/pam_stack.so service=system-auth
session required /lib/security/pam_stack.so service=system-auth
session optional /lib/security/pam_console.so
- 7. 【设置允许root登陆ftp】
普通方式下,如果/etc/vsftpd/vsftpd.conf文件中有如下内容:
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
pam_service_name=vsftpd
只需在/etc/vsftpd/user_list和/etc/vsftpd/ftpuser文件中删除root即可做到root用户ftp登陆。
具体方法如下:
1)用root登陆
2)vi /etc/vsftpd/user_list,注释root:
# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
#root
bin
daemon
adm
lp
sync
shutdown
halt
news
uucp
operator
games
nobody
3)vi /etc/vsftpd/ftpusers,注释root:
# Users that are not allowed to login via ftp
#root
bin
daemon
adm
lp
sync
shutdown
halt
news
uucp
operator
games
nobody
- 8. 【设置提示符】
Bash下具体设置方法如下:
1)用户登陆
2)vi .profile或者vi .bashrc
3)添加如下语句(该设置的效果是“[用户名@主机名:路径名]#”):
export PS1="[\[email protected]\h:\w]# "
(注意,如果对所有用户设定,以上语句追加到/etc/profile。)
4)重新登陆,登陆显示为:
[[email protected]:~/Documents/ftp资料]#
顺便提一下,在CSH或TCSH下,应该修改.cshrc或.tcshrc文件,修改语句是:
set prompt="[`whoami`@`hostname`:`pwd`]# "
- 9. 【设置默认语言】
设置方法如下:
1)用root用户登陆
2)vi /etc/sysconfig/i18n
该文件内容是:
LANG="zh_CN.UTF-8"
SYSFONT="latarcyrheb-sun16"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh"
3)修改为:
LANG="en_US.UTF-8"
SUPPORTED="en_US.UTF-8:en_US:en"
SYSFONT="latarcyrheb-sun16"
- 10. 【设置默认启动系统】
设置方法如下:
1)用root用户登陆
2)cp /boot/grub/menu.lst /boot/grub/menu.lst.bak
3)vi /boot/grub/menu.lst
4)从0开始数title,那个title下的操作系统是默认,就将default设置为该title对应的序数
示例,以下内容中,如果default为0,代表默认从Fedora启动;为1,代表从Windows启动:
#boot=/dev/hda
default=0
timeout=5
splashimage=(hd0,6)/boot/grub/splash.xpm.gz
hiddenmenu
title Fedora Core (2.6.18-1.2798.fc6xen)
root (hd0,6)
kernel /boot/xen.gz-2.6.18-1.2798.fc6
module /boot/vmlinuz-2.6.18-1.2798.fc6xen ro root=LABEL=/1 rhgb quiet
module /boot/initrd-2.6.18-1.2798.fc6xen.img
title Dos
rootnoverify (hd0,0)
chainloader +1
- 11. 【设置Telnet下的Vim颜色】
设置方法如下:
1)用户登陆
2)cp /usr/share/vim/vim70/vimrc_example.vim .vimrc
3)vi .vimrc,添加如下蓝色语句(最好手动敲入,^[的输入方式是Ctrl-v然后输入Esc)
if &t_Co > 2 || has("gui_running")
syntax on
set hlsearch
endif
" added by chyy
if !has("gui_running")
syntax on
set t_Co=8
set t_Sf=^[[3%p1%dm
set t_Sb=^[[4%p1%dm
colorscheme desert
endif
4)在SecureCRT的模拟终端类型选择ANSI,并钩上ANSI Color
5)如果需要更换颜色设置,更改colorscheme一句即可,例如:
colorscheme default
小窍门:如果不清楚有哪些颜色选项的话,可以用vi打开一个.c文件,键入”: colorscheme“,键入空格,然后敲TAB按钮,vi会自动切换各种颜色选项的名称。
6)注意,某些vimrc_example.vim文件中有个bug:
" In an xterm the mouse should work quite well, thus enable it.
set mouse=a
在非xterm环境(如Telnet)下,该句会导致vi无法正常运行,建议修改如下:
" In an xterm the mouse should work quite well, thus enable it.
if has("gui_running")
set mouse=a
endif
- 12. 【启动samba服务】
设置方法如下:
1)启动smb服务
service smb start
2)开启suseLinux权限
setsebool -P samba_enable_home_dirs on
注意:如果想开机自动启动smb服务,将上述两句命令加入/etc/rc.d/rc.local即可。
二、 Linux常用系统命令
- 1. 【crontab定时任务设置】
Crontab文件放在/etc/下,其内容一般是:
[[email protected]:/etc]# cat crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
格式说明如下:
第一道第五个字段的整数取值范围及意义是:
0~59 表示分
1~23 表示小时
1~31 表示日
1~12 表示月份
0~6 表示星期(其中0表示星期日)
- 2. 【shutdown关机】
用man查询命令:
[[email protected]:/etc]# man shutdown
SHUTDOWN(8) Linux System Administrator鈥檚 Manual SHUTDOWN(8)
NAME
shutdown - bring the system down
SYNOPSIS
/sbin/shutdown [-t sec] [-arkhncfFHP] time [warning-message]
DESCRIPTION
shutdown brings the system down in a secure way. All logged-in users are notified that the system is going down, and login(1) is blocked. It is possible to shut the system down immediately or after a specified delay. All processes are first notified that the system is going down by the signal SIGTERM. This gives programs like vi(1) the time to save the file being edited, mail and news pro-cessing programs a chance to exit cleanly, etc. shutdown does its job by signalling the init pro- cess, asking it to change the runlevel. Runlevel 0 is used to halt the system, runlevel 6 is used to reboot the system, and runlevel 1 is used to put to system into a state where administrative tasks can be performed; this is the default if neither the -h or -r flag is given to shutdown. To see which actions are taken on halt or reboot see the appropriate entries for these runlevels in the file /etc/inittab.
OPTIONS
-a Use /etc/shutdown.allow.
-t sec Tell init(8) to wait sec seconds between sending processes the warning and the kill signal, before changing to another runlevel.
-k Don鈥檛 really shutdown; only send the warning messages to everybody.
-r Reboot after shutdown.
-h Halt or poweroff after shutdown.
-H Halt action is to halt or drop into boot monitor on systems that support it.
-P Halt action is to turn off the power.
-n [DEPRECATED] Don鈥檛 call init(8) to do the shutdown but do it ourself. The use of this option is discouraged, and its results are not always what you鈥檇 expect.
-f Skip fsck on reboot.
-F Force fsck on reboot.
-c Cancel an already running shutdown. With this option it is of course not possible to give the time argument, but you can enter a explanatory message on the command line that will be sent to all users.
time When to shutdown.
warning-message
Message to send to all users.
The time argument can have different formats. First, it can be an absolute time in the format hh:mm, in which hh is the hour (1 or 2 digits) and mm is the minute of the hour (in two digits). Second, it can be in the format +m, in which m is the number of minutes to wait. The word now is an alias for +0.
命令示例:
shutdown -h now 立即关机
shutdown -h 50 50分钟后关机
shutdown –t 54000 15小时后自动关机
- 3. 【rpm软件安装卸载工具】
1) 查询rpm软件包:
rpm -qa | grep xxx
2) 安装rpm软件包:
rpm -ivh xxx.rpm
3) 卸载rpm软件包:
rpm -e xxx
4) 修复rpm库(执行以前先备份/var/lib/rpm目录):
rpm --rebuilddb
- 4. 【mount挂载磁盘】
1)挂载u盘:
mount -t vfat /dev/sda1 /mnt/u
2)挂载Windows磁盘:
mount -t vfat /dev/hda1 /mnt/c -o iocharset=cp936, codepage=936
3)挂载iso系统:
mount /mnt/e/linux/fc6.iso /root/iso/ -o loop
4)挂载光盘:
mount /dev/cdrom -t iso9660 /media/cdrom
4)挂载远程Windows共享目录:
mount -t cifs -o username=administrator,password=123456 192.168.1.20:Download /mnt/share
其中administrator和123456分别是用户名和密码,192.168.1.20是Win IP,Download是共享目录,/mnt/share是挂载目录(必须首先创建好)
- 5. 【date查询和设置系统时间】
用man查询命令:
NAME
date - print or set the system date and time
SYNOPSIS
date [OPTION]... [+FORMAT]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
DESCRIPTION
Display the current time in the given FORMAT, or set the system date.
-d, --date=STRING
display time described by STRING, not 鈥榥ow鈥?
-f, --file=DATEFILE
like --date once for each line of DATEFILE
-s, --set=STRING
set time described by STRING
-u, --utc, --universal
print or set Coordinated Universal Time
示例一,查询系统时间:
[chenyaya:~]# date
Mon Feb 1 11:52:33 CST 2010
示例二,设置系统时间:
[chenyaya:~]# date -s 12:31:00
Mon Feb 1 12:31:00 CST 2010
示例二,设置系统时间:
[chenyaya:~]# date -u 0201123110
Mon Feb 1 12:31:00 UTC 2010
[chenyaya:~]# date
Mon Feb 1 20:31:00 CST 2010
- 6. 【groupadd增加用户组】
语法结构是:
groupadd [-g gid] group
说明:
g 制定组的ID号
gid 组的ID号(不能与现有的组ID号重复)
group 组名
示例:
#groupadd –g 100 sun
- 7. 【netstat查询网络端口】
语法结构是:
[[email protected] ~]# netstat --help
usage: netstat [-veenNcCF] [<Af>] -r netstat {-V|--version|-h|--help}
netstat [-vnNcaeol] [<Socket> ...]
netstat { [-veenNac] -I[<Iface>] | [-veenNac] -i | [-cnNe] -M | -s } [delay]
-r, --route display routing table
-I, --interfaces=<Iface> display interface table for <Iface>
-i, --interfaces display interface table
-g, --groups display multicast group memberships
-s, --statistics display networking statistics (like SNMP)
-M, --masquerade display masqueraded connections
-v, --verbose be verbose
-n, --numeric don‘t resolve names
--numeric-hosts don‘t resolve host names
--numeric-ports don‘t resolve port names
--numeric-users don‘t resolve user names
-N, --symbolic resolve hardware names
-e, --extend display other/more information
-p, --programs display PID/Program name for sockets
-c, --continuous continuous listing
-l, --listening display listening server sockets
-a, --all, --listening display all sockets (default: connected)
-o, --timers display timers
-F, --fib display Forwarding Information Base (default)
-C, --cache display routing cache instead of FIB
-T, --notrim stop trimming long addresses
-Z, --context display SELinux security context for sockets
<Iface>: Name of interface to monitor/list.
<Socket>={-t|--tcp} {-u|--udp} {-S|--sctp} {-w|--raw} {-x|--unix} --ax25 --ipx --netrom
<AF>=Use ‘-A <af>‘ or ‘--<af>‘; default: inet
List of possible address families (which support routing):
inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25)
netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP)
x25 (CCITT X.25)
示例:查询所有端口和相应的程序,不解析主机名
[[email protected] ~]# netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 822/rpcbind
tcp 0 0 0.0.0.0:56912 0.0.0.0:* LISTEN 835/rpc.statd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1405/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 902/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1230/sendmail: acce
tcp 0 0 192.168.10.147:22 192.168.10.230:40729 ESTABLISHED 1531/0
tcp 0 0 :::111 :::* LISTEN 822/rpcbind
……
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 2 [ ACC ] STREAM LISTENING 9214 891/avahi-daemon: r /var/run/avahi-daemon/socket
unix 2 [ ACC ] STREAM LISTENING 9263 902/cupsd /var/run/cups/cups.sock
……
- 8. 【BASH提示符设置】
\a ASCII 响铃字符(也可以键入 \007)
\d "Wed Sep 06" 格式的日期
\e ASCII 转义字符(也可以键入 \033)
\h 主机名的第一部分(如 "mybox")
\H 主机的全称(如 "mybox.mydomain.com")
\j 在此 shell 中通过按 ^Z 挂起的进程数
\l 此 shell 的终端设备名(如 "ttyp4")
\n 换行符
\r 回车符
\s shell 的名称(如 "bash")
\t 24 小时制时间(如 "23:01:01")
\T 12 小时制时间(如 "11:01:01")
\@ 带有 am/pm 的 12 小时制时间
\u 用户名
\v bash 的版本(如 2.04)
\V Bash 版本(包括补丁级别) ?/td>
\w 当前工作目录(如 "/home/drobbins")
\W 当前工作目录的“基名 (basename)”(如 "drobbins")
\! 当前命令在历史缓冲区中的位置
\# 命令编号(只要您键入内容,它就会在每次提示时累加)
\$ 如果您不是超级用户 (root),则插入一个 "$";如果您是超级用户,则显示一个 "#"
\xxx 插入一个用三位数 xxx(用零代替未使用的数字,如 "\007")表示的 ASCII 字符
\\ 反斜杠
\[ 这个序列应该出现在不移动光标的字符序列(如颜色转义序列)之前。它使 bash 能够正确计算自动换行。
\] 这个序列应该出现在非打印字符序列之后。
- 9. 【常用压缩格式的压缩与解压方法】
.tar
解包: tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是压缩!)
---------------------------------------------
.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
.tar.gz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
---------------------------------------------
.bz2
解压1:bzip2 -d FileName.bz2
解压2:bunzip2 FileName.bz2
压缩: bzip2 -z FileName
.tar.bz2
解压:tar jxvf FileName.tar.bz2
压缩:tar jcvf FileName.tar.bz2 DirName
---------------------------------------------
.bz
解压1:bzip2 -d FileName.bz
解压2:bunzip2 FileName.bz
压缩:未知
.tar.bz
解压:tar jxvf FileName.tar.bz
压缩:未知
---------------------------------------------
.Z
解压:uncompress FileName.Z
压缩:compress FileName
.tar.Z
解压:tar Zxvf FileName.tar.Z
压缩:tar Zcvf FileName.tar.Z DirName
---------------------------------------------
.tgz
解压:tar zxvf FileName.tgz
压缩:未知
.tar.tgz
解压:tar zxvf FileName.tar.tgz
压缩:tar zcvf FileName.tar.tgz FileName
---------------------------------------------
.zip
解压:unzip FileName.zip
压缩:zip FileName.zip DirName
---------------------------------------------
.rar
解压:rar a FileName.rar
压缩:r ar e FileName.rar
三、 SHELL常用命令
- 1. 【find文件查找】
用man查询命令:
NAME
find - search for files in a directory hierarchy
SYNOPSIS
find [-H] [-L] [-P] [path...] [expression]
OPTIONS
-iname pattern
Like -name, but the match is case insensitive. For example, the patterns ‘fo*’ and ‘F??’ match the file names ‘Foo’, ‘FOO’, ‘foo’, ‘fOo’, etc. In these patterns, unlike file name expansion by the shell, an initial ‘.’ can be matched by ‘*’. That is, find -name *bar will match the file ‘.foobar’. Please note that you should quote patterns as a matter of course, otherwise the shell will expand any wildcard characters in them.
-type c
File is of type c:
b block (buffered) special
c character (unbuffered) special
d directory
p named pipe (FIFO)
f regular file
l symbolic link; this is never true if the -L option or the -follow option is in effect, unless the symbolic link is broken. If you want to search for symbolic links when –L is in effect, use -xtype.
s socket
D door (Solaris)
-print True; print the full file name on the standard output, followed by a newline. If you are piping the output of find into another program and there is the faintest possibility that the files which you are searching for might contain a newline, then you should seriously consider using the ‘-print0’ option instead of ’-print’. See the UNUSUAL FILENAMES section for information about how unusual characters in filenames are handled.
示例一,查找文件:
[[email protected]:~/isos/generic0429]# find . -name gateway
./system/gateway
示例二,查找非目录的文件:
[[email protected]:~/isos/generic0429]# find . ! -type d -name ‘*’
- 2. 【file文件类型查询】
用man查询命令:
NAME
file - determine file type
SYNOPSIS
file [ -bchikLnNprsvz ] [ -f namefile ] [ -F separator ] [ -m magicfiles ] file ...
file -C [ -m magicfile ]
OPTIONS
-f, --files-from namefile
Read the names of the files to be examined from namefile (one per line) before the argument list. Either namefile or at least one filename argument must be present; to test the standard input, use ‘’-‘’ as a filename argument.
示例一,查询文件类型:
[[email protected]:~/isos/generic0429/system]# file gateway
gateway: ASCII English text
示例二,查询文件类型:
[[email protected]:~/isos/generic0429]# file build.sh
build.sh: Bourne shell script text executable
- 3. 【cut裁减文件内容】
用man查询命令:
NAME
cut - remove sections from each line of files
SYNOPSIS
cut [OPTION]... [FILE]...
DESCRIPTION
-d, --delimiter=DELIM
use DELIM instead of TAB for field delimiter
-f, --fields=LIST
select only these fields; also print any line that contains no delimiter character, unless the -s option is specified
示例,分解并输出各选项:
DEVICES="ttyS0,c,4,64 console,c,4,64 null,c,1,3 mtd,b,31,0"
for dev in $DEVICES; do
name=`echo $dev |cut -d"," -f1`
type=`echo $dev |cut -d"," -f2 `
major=`echo $dev |cut -d"," -f3 `
minor=`echo $dev |cut -d"," -f4 `
mknod -m666 $RAMFSDIR/dev/$name $type $major $minor
done
- 4. 【select打印用户选择界面】
BASH 中提供了一个小的语句格式,可以让程序快速的设计出一个字符界面的用户交互选择的菜单,该功能就是由 select 语句来实现的,select 语句的语法为:
select var in [list]
do
statments use $var
done
上面的语法结构在执行后,BASH 会将 [list] 中的所有项加上数字列在屏幕上等待用户选择,在用户作出选择后,变量 $var 中就包含了那个被选中的字符串,然后就可以对该变量进行需要的操作了。
示例:
#!/bin/bash
OPTIONS="Hello Quit"
select opt in $OPTIONS; do
if [ "$opt" = "Quit" ]; then
echo done
exit
elif [ "$opt" = "Hello" ]; then
echo Hello World
else
clear
echo bad option
fi
done
exit 0
- 5. 【sed 模式匹配过滤】
用man查询命令:
NAME
sed - stream editor for filtering and transforming text
SYNOPSIS
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
DESCRIPTION
Sed is a stream editor. A stream editor is used to perform basic text transformations on an input stream (a file or input from a pipeline). While in some ways similar to an editor which permits scripted edits (such as ed), sed works by making only one pass over the input(s), and is consequently more efficient. But it is sed’s ability to filter text in a pipeline which particularly distin-guishes it from other types of editors.
-n, --quiet, --silent
suppress automatic printing of pattern space
-e script, --expression=script
add the script to the commands to be executed
-f script-file, --file=script-file
add the contents of script-file to the commands to be executed
-l N, --line-length=N
specify the desired line-wrap length for the ‘l’ command
COMMAND SYNOPSIS
This is just a brief synopsis of sed commands to serve as a reminder to those who already know sed; other documentation (such as the texinfo document) must be consulted for fuller descriptions.
= Print the current line number.
d Delete pattern space. Start next cycle.
p Print the current pattern space.
s/regexp/replacement/
Attempt to match regexp against the pattern space. If successful, replace that portion matched with replacement. The replacement may contain the special character & to refer to that portion of the pattern space which matched, and the special escapes \1 through \9 to refer to the corresponding matching sub-expressions in the regexp.
Addresses
Sed commands can be given with no addresses, in which case the command will be executed for all input lines; with one address, in which case the command will only be executed for input lines which match that address; or with two addresses, in which case the command will be executed for all input lines which match the inclusive range of lines starting from the first address and continuing to the second address. Three things to note about address ranges: the syntax is addr1,addr2 (i.e., the addresses are separated by a comma); the line which addr1 matched will always be accepted, even if addr2 selects an earlier line; and if addr2 is a regexp, it will not be tested against the line that addr1 matched.
After the address (or address-range), and before the command, a ! may be inserted, which specifies that the command shall only be executed if the address (or address-range) does not match.
The following address types are supported:
number Match only the specified line number.
/regexp/
Match lines matching the regular expression regexp.
addr1,+N
Will match addr1 and the N lines following addr1.
示例,
打印comp.flist中的某一段内容,从“bridge-utils”开始,到空行结束:
[[email protected]:~/GEPON/Src/ADK/make]# sed -n /^bridge-utils/,/^$/p comp.flist
bridge-utils:
usr/lib/libbridge.a
usr/share/man/man8/brctl.8
usr/sbin/brctl
usr/include/libbridge.h
[[email protected]:~/GEPON/Src/ADK/make]#
打印comp.flist中的第5行到7行:
[[email protected]:~/GEPON/Src/ADK/make]# sed -n 5,10p comp.flist
etc/ath/apcfg
etc/ath/apdown
etc/ath/apup
- 6. 【grep 模式匹配查询】
用man查询命令:
NAME
grep, egrep, fgrep - print lines matching a pattern
SYNOPSIS
grep [options] PATTERN [FILE...]
grep [options] [-e PATTERN | -f FILE] [FILE...]
DESCRIPTION
Grep searches the named input FILEs (or standard input if no files are named, or the file name - is given) for lines containing a match to the given PATTERN. By default, grep prints the matching lines.
In addition, two variant programs egrep and fgrep are available. Egrep is the same as grep -E. Fgrep is the same as grep -F.
OPTIONS
-H, --with-filename
Print the filename for each match.
-h, --no-filename
Suppress the prefixing of filenames on output when multiple files are searched.
-I Process a binary file as if it did not contain matching data; this is equivalent to the --binary-files=without-match option.
-i, --ignore-case
Ignore case distinctions in both the PATTERN and the input files.
-n, --line-number
Prefix each line of output with the line number within its input file.
-R, -r, --recursive
Read all files under each directory, recursively; this is equivalent to the -d recurse option.
-v, --invert-match
Invert the sense of matching, to select non-matching lines.
-w, --word-regexp
Select only those lines containing matches that form whole words. The test is that the matching substring must either be at the beginning of the line, or preceded by a non-word constituent character. Similarly, it must be either at the end of the line or followed by a non-word constituent character. Word-constituent characters are letters, digits, and the underscore.
示例
查询包含‘packages’的Makefile文件,并打印出文件名和行号:
[[email protected]:~/GEPON/Src/ADK]# grep -nwH packages Makefile
Makefile:51: make -C packages
Makefile:54: make -C packages clean
查询某个目录下所有文件,包括子目录,匹配整个单词,并且不查找二进制文件,打印出行号:
[[email protected]:~/gv8/target]# grep -RwnI sm *
查询文件comp.flist中“bridge-utils”起始的一段内容,并删除“bridge-utils”:
[[email protected]:~/GEPON/Src/ADK/make]# sed -n /^bridge-utils/,/^$/p comp.flist | grep -v bridge-utils
usr/lib/libbridge.a
usr/share/man/man8/brctl.8
usr/sbin/brctl
usr/include/libbridge.h
[[email protected]:~/GEPON/Src/ADK/make]#
- 7. 【du获取文件大小】
用man查询命令:
NAME
du - estimate file space usage
SYNOPSIS
du [OPTION]... [FILE]...
du [OPTION]... --files0-from=F
DESCRIPTION
Summarize disk usage of each FILE, recursively for directories.
Mandatory arguments to long options are mandatory for short options too.
-a, --all
write counts for all files, not just directories
-h, --human-readable
print sizes in human readable format (e.g., 1K 234M 2G)
-s, --summarize
display only a total for each argument
示例,查询某个目录下各个目录大小:
[[email protected]:~/cyytest]# du -sh *
24K countCache
84K createCode
40K dat
1.1M elf
4.3M html
- 8. 【ls列举目录内容】
用man查询命令:
NAME
ls - list directory contents
SYNOPSIS
ls [OPTION]... [FILE]...
DESCRIPTION
List information about the FILEs (the current directory by default). Sort entries alphabetically if
none of -cftuvSUX nor --sort.
Mandatory arguments to long options are mandatory for short options too.
-a, --all
do not ignore entries starting with .
--color[=WHEN]
control whether color is used to distinguish file types. WHEN may be ‘never’, ‘always’, or ‘auto’
-R, --recursive
list subdirectories recursively
-x list entries by lines instead of by columns
-1 list one file per line
By default, color is not used to distinguish types of files. That is equivalent to using --color=none. Using the --color option without the optional WHEN argument is equivalent to using --color=always. With --color=auto, color codes are output only if standard output is connected to a terminal (tty). The environment variable LS_COLORS can influence the colors, and can be set easily by the dircolors command.
示例,列举目录下的文件结构:
[[email protected]:~/isos/work_isos/source/quantum/boards]# ls -Rx
.:
default
./default:
bs_default.c quantum quantum_boards_default.module
./default/quantum:
bs
./default/quantum/bs:
bs_board.h
- 9. 【tree列举树形目录结构】
用man查询命令:
NAME
tree - list contents of directories in a tree-like format.
SYNOPSIS
tree [-adfgilnopqrstuxACDFNS] [-L level [-R]] [-H baseHREF] [-T title] [-o filename] [--nolinks] [-P pattern] [-I pattern] [--inodes] [--device] [--noreport] [--dirsfirst] [--version] [--help] [directory ...]
OPTIONS
Tree understands the following command line switches:
-d List directories only.
-f Prints the full path prefix for each file.
-s Print the size of each file along with the name.
-D Print the date of the last modification time for the file listed.
-C Turn colorization on always, using built-in color defaults if the LS_COLORS environment variable is not set. Useful to colorize output to a pipe.
-A Turn on ANSI line graphics hack when printing the indentation lines.
-L level Max display depth of the directory tree.
-R Recursively cross down the tree each level directories (see -L option), and at each of them execute tree again adding ‘00Tree.html’ as a new option.
-T title Sets the title and H1 header string in HTML output mode.
-o filename Send output to filename.
FILES
/etc/DIR_COLORS System color database.
~/.dircolors Users color database.
ENVIRONMENT
LS_COLORS Color information created by dircolors
TREE_CHARSET Character set for tree to use in HTML mode.
LC_CTYPE Locale for filename output.
示例,用树形显示目录结构:
[[email protected]:~/isos/work_isos/source/quantum/boards]# tree
.
`-- default
|-- bs_default.c
|-- quantum
| `-- bs
| `-- bs_board.h
`-- quantum_boards_default.module
3 directories, 3 files
- 10. 【df获取系统空间使用情况】
用man查询命令:
NAME
df - report file system disk space usage
SYNOPSIS
df [OPTION]... [FILE]...
OPTIONS
Show information about the file system on which each FILE resides, or all file systems by default.
Mandatory arguments to long options are mandatory for short options too.
-a, --all
include dummy file systems
-k like --block-size=1K
示例,整个各个磁盘剩余空间:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hda7 27769928 21137868 5198664 81% /
tmpfs 257616 0 257616 0% /dev/shm
df: `/root/iso/fc6‘: Permission denied
(/root/iso/fc6是由root建立的虚拟光盘系统,因为权限不够,所以该系统空间不显示。)
- 11. 【free查看系统内存】
用free查询命令:
NAME
free - Display amount of free and used memory in the system
SYNOPSIS
free [-b | -k | -m] [-o] [-s delay ] [-t] [-V]
OPTIONS
The -b switch displays the amount of memory in bytes; the -k switch (set by default) displays it in kilobytes; the -m switch displays it in megabytes.
示例,系统剩余内存:
[[email protected]:~]# free -k
total used free shared buffers cached
Mem: 515232 489492 25740 0 263696 147236
-/+ buffers/cache: 78560 436672
Swap: 642560 0 642560
- 12. 【top查看进程内存】
用top查询命令:
NAME
top - display Linux tasks
SYNOPSIS
top -hv | -bcHisS -d delay -n iterations -p pid [, pid ...]
示例:
[[email protected]:~]# top
top - 17:36:10 up 19 min, 3 users, load average: 1.74, 1.77, 1.19
Tasks: 90 total, 5 running, 85 sleeping, 0 stopped, 0 zombie
Cpu(s): 75.3%us, 23.0%sy, 0.0%ni, 0.0%id, 1.7%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 515232k total, 461436k used, 53796k free, 224048k buffers
Swap: 642560k total, 4k used, 642556k free, 153920k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
26208 ff 22 0 5440 1940 516 R 4.3 0.4 0:00.13 cpp0
26209 ff 21 0 7804 3904 1708 R 2.0 0.8 0:00.06 cc1plus
26096 chyy 15 0 2164 1004 796 R 0.3 0.2 0:00.02 top
1 root 15 0 2032 644 548 S 0.0 0.1 0:00.70 init
2 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
……
- 13. 【ps查看进程】
用ps查询命令:
NAME
ps - report a snapshot of the current processes.
SYNOPSIS
ps [options]
EXAMPLES
To see every process on the system using standard syntax:
ps -e
ps -ef
ps -eF
ps -ely
To see every process on the system using BSD syntax:
ps ax
ps axu
To print a process tree:
ps -ejH
ps axjf
To get info about threads:
ps -eLf
ps axms
To get security info:
ps -eo euser,ruser,suser,fuser,f,comm,label
ps axZ
ps -eM
To see every process running as root (real & effective ID) in user format:
ps -U root -u root u
To see every process with a user-defined format:
ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
ps -eopid,tt,user,fname,tmout,f,wchan
Print only the process IDs of syslogd:
ps -C syslogd -o pid=
Print only the name of PID 42:
ps -p 42 -o comm=
SIMPLE PROCESS SELECTION
-e Select all processes. Identical to -A.
OUTPUT FORMAT CONTROL
-f does full-format listing. This option can be combined with many other UNIX-style options to add additional columns. It also causes the command arguments to be printed. When used with -L, the NLWP (number of threads) and LWP (thread ID) columns will be added. See the c option, the format keyword args, and the format keyword comm.
-o format user-defined format.
format is a single argument in the form of a blank-separated or comma-separated list, which offers a way to specify individual output columns. The recognized keywords are described in the STANDARD FORMAT SPECIFIERS section below. Headers may be renamed (ps -o pid,ruser=RealUser -o comm=Command) as desired. If all column headers are empty (ps -o pid= -o comm=) then the header line will not be output. Column width will increase as needed for wide headers; this may be used to widen up columns such as WCHAN (ps -o pid,wchan=WIDE-WCHAN-COLUMN -o comm). Explicit width control (ps opid,wchan:42,cmd) is offered too. The behavior of ps -o pid=X,comm=Y varies with personality; output may be one column named "X,comm=Y" or two columns named "X" and "Y". Use multiple -o options when in doubt. Use the PS_FORMAT environment variable to specify a default as desired; DefSysV and DefBSD are macros that may be used to choose the default UNIX or BSD columns.
OUTPUT MODIFIERS
O order Sorting order. (overloaded)
The BSD O option can act like -O (user-defined output format with some common fields predefined) or can be used to specify sort order. Heuristics are used to determine the behavior of this option. To ensure that the desired behavior is obtained (sorting or formatting), specify the option in some other way (e.g. with -O or --sort). For sorting, obsolete BSD O option syntax is O[+|-]k1[,[+|-]k2[,...]]. It orders the processes listing according to the multilevel sort specified by the sequence of one-letter short keys k1, k2, ... described in the OBSOLETE SORT KEYS section below. The "+" is currently optional, merely re-iterating the default direction on a key, but may help to distinguish an O sort from an O format. The "-" reverses direction only on the key it precedes.
--sort spec specify sorting order. Sorting syntax is [+|-]key[,[+|-]key[,...]] Choose a multi-letter key from the STANDARD FORMAT SPECIFIERS section. The "+" is optional since default direction is increasing numerical or lexicographic order. Identical to k. For example: ps jax --sort=uid,-ppid,+pid
OBSOLETE SORT KEYS
These keys are used by the BSD O option (when it is used for sorting). The GNU --sort option doesn’t use these keys, but the specifiers described below in the STANDARD FORMAT SPECIFIERS section. Note that the values used in sorting are the internal values ps uses and not the "cooked" values used in some of the output format fields (e.g. sorting on tty will sort into device number, not according to the terminal name displayed). Pipe ps output into the sort(1) command if you want to sort the cooked values.
KEY LONG DESCRIPTION
c cmd simple name of executable
C pcpu cpu utilization
o session session ID
p pid process ID
P ppid parent process ID
s size memory size in kilobytes
t tty the device number of the controlling tty
T start_time time process was started
U uid user ID number
u user user name
……
STANDARD FORMAT SPECIFIERS
Here are the different keywords that may be used to control the output format (e.g. with option -o) or to
sort the selected processes with the GNU-style --sort option.
For example: ps -eo pid,user,args --sort user
This version of ps tries to recognize most of the keywords used in other implementations of ps.
The following user-defined format specifiers may contain spaces: args, cmd, comm, command, fname, ucmd, ucomm, lstart, bsdstart, start.
Some keywords may not be available for sorting.
CODE HEADER DESCRIPTION
%cpu %CPU cpu utilization of the process in "##.#" format. Currently, it is the CPU time used divided by the time the process has been running (cputime/realtime ratio), expressed as a percentage. It will not add up to 100% unless you are lucky. (alias pcpu).
%mem %MEM ratio of the process鈥檚 resident set size to the physical memory on the machine, expressed as a percentage. (alias pmem).
args COMMAND command with all its arguments as a string. Modifications to the arguments may be shown. The output in this column may contain spaces. A process marked <defunct> is partly dead, waiting to be fully destroyed by its parent. Sometimes the process args will be unavailable; when this happens, ps will instead print the executable name in brackets. (alias cmd, command). See also the comm format keyword, the -f option, and the c option. When specified last, this column will extend to the edge of the display. If ps can not determine display width, as when output is redirected (piped) into a file or another command, the output width is undefined. (it may be 80, unlimited, determined by the TERM variable, and so on) The COLUMNS environment variable or --cols option may be used to exactly determine the width in this case. The w or -w option may be also be used to adjust width.
cmd CMD see args. (alias args, command).
示例:
1) 查询所有进程,输出PID、用户名、命令和CPU利用率,并按照cpu利用率排序
[[email protected]:~]# ps -eo pid,user,%cpu,args --sort %cpu
PID USER %CPU COMMAND
2 root 0.0 [migration/0]
3 root 0.0 [ksoftirqd/0]
4 root 0.0 [watchdog/0]
5 root 0.0 [events/0]
6 root 0.0 [khelper]
7 root 0.0 [kthread]
10 root 0.0 [kblockd/0]
……
2185 68 0.0 hald
26293 root 0.0 make -C router install
26920 root 93.3 /home/chyy/EPON/work/ToolChain/arm-uclibc-3.4.6/bin/../libexec/gcc/arm-linux-uclibc/3.4.6/cc1 -quiet
2) 查询所有进程,输出所有,并按照cpu利用率排序
[[email protected]:~]# ps -ef O+C
UID PID PPID C STIME TTY STAT TIME CMD
root 2 1 0 09:35 ? S 0:00 [migration/0]
root 3 1 0 09:35 ? SN 0:00 [ksoftirqd/0]
……
68 2185 1 0 09:35 ? Ss 0:01 hald
root 3884 3487 0 11:27 pts/2 S+ 0:00 make -C gw_api
root 3903 3902 99 11:27 pts/2 R+ 0:00 /home/chyy/EPON/work/ToolChain/arm-uclibc-3.4.6/bin/../libexec/gcc/ar
3) 查询所有进程,输出所有,并按照cpu降序排序
[[email protected]:~]# ps -ef O-C
或者
[[email protected]:~]# ps -ef --sort -%cpu
UID PID PPID C STIME TTY TIME CMD
root 14895 14879 99 11:30 pts/2 00:00:04 /home/chyy/EPON/work/ToolChain/arm-uclibc-3.4.6/bin/../libexec/gcc/arm-l
68 2185 1 0 09:35 ? 00:00:01 hald
root 14050 14045 0 11:29 pts/2 00:00:00 make -C router all
……
root 14879 14877 0 11:30 pts/2 00:00:00 arm-linux-uclibc-gcc /home/chyy/EPON/work/src/router/tr069/cwmp/cwmpCPE.
chyy 14897 2825 0 11:30 pts/3 00:00:00 ps -ef --sort -%cpu
4) 查询所有进程,输出所有,并按照PID排序
[[email protected]:~]# ps -ef O+U
UID PID PPID C STIME TTY STAT TIME CMD
root 1 0 0 09:35 ? Ss 0:00 init [5]
root 2 1 0 09:35 ? S 0:00 [migration/0]
……
rpc 1825 1 0 09:35 ? Ss 0:00 portmap
gdm 2507 2463 0 09:36 ? Ss 0:00 /usr/libexec/gdmgreeter
xfs 2130 1 0 09:35 ? Ss 0:00 xfs -droppriv -daemon
……
chyy 2620 2606 0 10:10 pts/2 S 0:00 -bash
chyy 2825 2738 0 10:10 pts/3 S 0:00 -bash
chyy 25492 2825 0 11:33 pts/3 R+ 0:00 ps -ef O+U
ff 2546 2544 0 09:59 ? S 0:00 sshd: [email protected]/1
ff 2547 2546 0 09:59 pts/1 Ss+ 0:00 -bash
ff 2570 2546 0 10:00 ? Ss 0:00 /usr/libexec/openssh/sftp-server
5) 查询所有进程,输出所有,并按照PID升序、CPU利用率降序排序
[[email protected]:~]# ps -ef O+U-C
UID PID PPID C STIME TTY STAT TIME CMD
Root 3681 3655 27 11:43 pts/2 R+ 0:00 /home/chyy/EPON/work/ToolChain/arm-uclibc-3.4.6/bin/../libexec/gcc/ar
root 3655 3653 0 11:43 pts/2 S+ 0:00 arm-linux-uclibc-gcc /home/chyy/EPON/work/src/router/tr069/cwmp/cwmpC
……
root 3653 2828 0 11:43 pts/2 S+ 0:00 make -C tr069
rpc 1825 1 0 09:35 ? Ss 0:00 portmap
gdm 2507 2463 0 09:36 ? Ss 0:00 /usr/libexec/gdmgreeter
xfs 2130 1 0 09:35 ? Ss 0:00 xfs -droppriv -daemon
……
dbus 1887 1 0 09:35 ? Ss 0:00 dbus-daemon --system
chyy 2825 2738 0 10:10 pts/3 S 0:00 -bash
chyy 2620 2606 0 10:10 pts/2 S 0:00 -bash
chyy 3682 2825 0 11:43 pts/3 R+ 0:00 ps -ef O+U-C
ff 2547 2546 0 09:59 pts/1 Ss+ 0:00 -bash
ff 2570 2546 0 10:00 ? Ss 0:00 /usr/libexec/openssh/sftp-server
ff 2546 2544 0 09:59 ? S 0:00 sshd: [email protected]/1
- 14. 【dos2unix转换文件换行符】
用dos2unix查询命令:
NAME
dos2unix - DOS/MAC to UNIX text file format converter
SYNOPSYS
dos2unix [options] [-c convmode] [-o file ...] [-n infile outfile ...]
Options:
[-hkqV] [--help] [--keepdate] [--quiet] [--version]
OPTIONS
-k --keepdate
Keep the date stamp of output file same as input file.
-n --newfile infile outfile ...
New file mode. Convert the infile and write output to outfile. File names must be given in pairs and wildcard names should NOT be used or you WILL lost your files.
示例,转换文件:
[chenyaya:~/FrameWork-tksdk/user/sdk/tksdk]# dos2unix -k build/mklinux.sh
dos2unix: converting file build/mklinux.sh to UNIX format ...
四、 SHELL命令灵活应用
- 1. 【拷贝目录结构】
find SRC -type d | sed ‘s/SRC/mkdir -p DST/‘ | sh
说明:先利用find列出所有目录,然后用sed替换为mkdir命令格式,最后用sh执行
- 2. 【查找字段并排除不需要的项】
grep –RwnI DIR PATTERN | grep –v PATTERN
说明:第一个grep负责找到包含PATTERN的内容,第二个grep删除不需要的内容
示例:
[chenyaya:~/FrameWork/user]# grep -RwnI doswset * | grep -v .svn
eth/bcm53115/Sources/DARESWH_x_bcm_cli.c:3877:int doswset(int argc, char *cmd[])
eth/bcm53115/Sources/DARESWH_x_bcm_cli.c:3955: doswset(argc,cmd);
eth/bcm5328x/Sources/DARESWH_x_bcm_cli.c:249:int doswset(int argc, char *cmd[])
eth/bcm5328x/Sources/DARESWH_x_bcm_cli.c:328: doswset(argc,cmd);
nm_darepon.txt:1332:000548e0 T doswset
- 3. 【查找文件并删除】
find . -name FILENAME | xargs rm -rf
说明:find找到对应文件后,用xargs作为rm的参数执行
示例:
[chenyaya:~/FrameWork/user]# find . -name .svn | xargs rm -rf
- 4. 【打包目录并排除特定文件】
tar czvf TARGET SRC --exclude PATTERN1 --exclude PATTERN2 --exclude PATTERN3 …
说明:很多时候打包备份项目只需要里面的源文件,而中间文件如*.o等不需要打包,此时利用tar的--exclude的选项可以方便的排除掉不需要的文件。
示例:
[chenyaya:~]#tar czvf FrameWork.bak.r2637.20110629.tgz FrameWork --exclude \.svn --exclude *.o --exclude *.a --exclude *.P --exclude *.d --exclude *.ko --exclude *.so --exclude buildlog_*.txt --exclude sources --exclude Objects --exclude Libraries --exclude Binaries --exclude voip* --exclude transwitch --exclude utilities --exclude davinci --exclude docs --exclude *.doc --exclude *.tmp --exclude *.xls
五、 Windows系统常用命令
- 1. 【Word中转换回车符】
word中有些表记不是我们常用的回车符号,而是一个向下的箭头,这个箭头在word中可以用“shift+Enter”键组合输入。前者叫硬回车,后者叫软回车。
软回车的标记是“^l”,硬回车的标记是“^p”,转换回车用“替换”功能即可。
六、 特殊说明
- 1. 【RIP使用的网络接口结构体interface】
h/wrn/coreip/rip/interface.h/interface.h:
/*
* An ``interface‘‘ is similar to an ifnet structure,
* except it doesn‘t contain q‘ing info, and it also
* handles ``logical‘‘ interfaces (remote gateways
* that we want to keep polling even if they go down).
* The list of interfaces which we maintain is used
* in supplying the gratuitous routing table updates.
*/
struct interface {
struct interface *int_next;
struct sockaddr int_addr; /* address on this host */
union {
struct sockaddr intu_broadaddr;
struct sockaddr intu_dstaddr;
} int_intu;
#define int_broadaddr int_intu.intu_broadaddr /* broadcast address */
#define int_dstaddr int_intu.intu_dstaddr /* other end of p-to-p link */
int int_metric; /* init‘s routing entry */
int int_flags; /* see below */
/* START INTERNET SPECIFIC */
u_long int_net; /* network # */
u_long int_netmask; /* net mask for addr */
u_long int_subnet; /* subnet # */
u_long int_subnetmask; /* subnet mask for addr */
/* END INTERNET SPECIFIC */
char *int_name; /* from kernel if structure */
u_short int_index; /* from kernel if structure */
u_short int_transitions; /* times gone up-down */
M2_RIP2_IFSTAT_ENTRY ifStat; /* MIB-II statistics. */
M2_RIP2_IFCONF_ENTRY ifConf; /* MIB-II configuration. */
FUNCPTR authHook; /* per interface authentication */
FUNCPTR leakHook; /* per interface leak hook. */
BOOL (*sendHook) (); /* per interface validation hook */
RIP_AUTH_KEY * pAuthKeys; /* list of valid authe keys */
};
重要变量说明:
1) int_flags:接口类型
具体意义参见if.h或者interface.h,前者比较全面,后者主要定义了Rip相关的定义,下面蓝色部分是出现在interface.h中的定义:
#define IFF_UP 0x1 /* interface is up */
#define IFF_BROADCAST 0x2 /* broadcast address valid */
#define IFF_DEBUG 0x4 /* turn on debugging */
#define IFF_LOOPBACK 0x8 /* software loopback net */
#define IFF_POINTOPOINT 0x10 /* interface is point-to-point link */
#define IFF_SUBNET 0x100000 /* interface on subnetted network */
#define IFF_PASSIVE 0x200000 /* can‘t tell if up/down */
#define IFF_INTERFACE 0x400000 /* hardware interface */
#define IFF_REMOTE 0x800000 /* interface isn‘t on this machine */
#define IFF_SHARED_ROUTES 0x10000000 /* shared routes may exist */
#define IFF_UP 0x1 /* interface link is up */
#define IFF_BROADCAST 0x2 /* broadcast address valid */
#define IFF_DEBUG 0x4 /* turn on debugging */
#define IFF_LOOPBACK 0x8 /* is a loopback net */
#define IFF_POINTOPOINT 0x10 /* interface is point-to-point link */
#define IFF_SMART 0x20 /* interface manages own routes */
#define IFF_RUNNING 0x40 /* resources allocated */
#define IFF_NOARP 0x80 /* no address resolution protocol */
#define IFF_PROMISC 0x100 /* receive all packets */
#define IFF_ALLMULTI 0x200 /* receive all multicast packets */
#define IFF_OACTIVE 0x400 /* transmission in progress */
#define IFF_SIMPLEX 0x800 /* can‘t hear own transmissions */
#define IFF_LINK0 0x1000 /* forwarding disabled */
#define IFF_LINK1 0x2000 /* per link layer defined bit */
#define IFF_LINK2 0x4000 /* per link layer defined bit */
#define IFF_ALTPHYS IFF_LINK2 /* use alternate physical connection */
#define IFF_MULTICAST 0x8000 /* supports multicast */
#define IFF_NOTRAILERS 0x20000 /* avoid use of trailers */
#define IFF_INET_UP 0x40000 /* interface is up for ipv4 */
#define IFF_INET6_UP 0x80000 /* interface is up for ipv6 */
#define IFF_UNNUMBERED IFF_POINTOPOINT /* supports unnumbered interfaces */
#define IFF_FPV4_ENABLE 0x100000 /* supports V4 fast forwarding */
#define IFF_FPV6_ENABLE 0x200000 /* supports V6 fast forwarding */
#define IFF_PROXY_ALL 0x400000 /* enable Cisco style proxying */
#define IFF_DONT_FORWARD IFF_LINK0 /* forwarding disabled */
#define IFF_POLLING 0x10000 /* Interface is in polling mode. */
#define IFF_PPROMISC 0x800000 /* user-requested promisc mode */
一般int_flags是由多个flag组合起来的,常用的几个int_flags的意义如下:
十进制 |
十六进制 |
意义 |
备注 |
1 |
0x1 |
IFF_UP |
|
257 |
0x101 |
IFF_PROMISC & IFF_UP |
|
294985 |
0x48049 |
IFF_INET_UP & IFF_MULTICAST & IFF_RUNNING & IFF_LOOPBACK & IFF_UP |
for lo |
393539 |
0x60143 |
IFF_INET_UP & IFF_NOTRAILERS & IFF_PROMISC & IFF_RUNNING & IFF_BROADCAST & IFF_UP |
|
426051 |
0x68043 |
IFF_INET_UP & IFF_NOTRAILERS & IFF_MULTICAST & IFF_RUNNING & IFF_BROADCAST & IFF_UP |
|
1213251 |
0x128343 |
IFF_SUBNET & IFF_NOTRAILERS & IFF_MULTICAST & IFF_ALLMULTI & IFF_PROMISC & IFF_RUNNING & IFF_BROADCAST & IFF_UP |
for wan |
1278160 |
0x1380d0 |
IFF_SUBNET & IFF_NOTRAILERS & IFF_POLLING & IFF_MULTICAST & IFF_NOARP & IFF_RUNNING & IFF_POINTOPOINT |
for ppp |
1474627 |
0x168043 |
IFF_SUBNET & IFF_INET_UP & IFF_NOTRAILERS & IFF_MULTICAST & IFF_RUNNING & IFF_BROADCAST & IFF_UP |
for lan |
- 2. 【Vx使用的网络接口变量ifnet】
h/wrn/coreip/net/if_var.h:
struct ifnet {
void *if_softc; /* pointer to driver state */
char *if_name; /* name, e.g. ``en‘‘ or ``lo‘‘ */
TAILQ_ENTRY(ifnet) if_link; /* all struct ifnets are chained */
struct ifaddrhead if_addrhead; /* linked list of addresses per if */
int if_pcount; /* number of promiscuous listeners */
struct bpf_if *if_bpf; /* packet filter structure */
UINT32 ifIndex; /* external index for this if */
u_short if_index; /* internal index for this if */
short if_unit; /* sub-unit for lower level driver */
short if_timer; /* time ‘til if_watchdog called */
long if_flags; /* up/down, broadcast, etc. */
int if_ipending; /* interrupts pending */
void *if_linkmib; /* link-type-specific MIB data */
size_t if_linkmiblen; /* length of above data */
struct if_data if_data;
struct ifmultihead if_multiaddrs; /* multicast addresses configured */
int if_amcount; /* number of all-multicast requests */
/* procedure handles */
int (*if_output) /* output routine (enqueue) */
(struct ifnet *, struct mbuf *, struct sockaddr *,
struct rtentry *);
void (*if_start) /* initiate output routine */
(struct ifnet *);
union {
int (*if_done) /* output complete routine */
(struct ifnet *); /* (XXX not used) */
int uif_capabilities; /* interface capabilities */
} _u1;
int (*if_ioctl) /* ioctl routine */
(struct ifnet *, u_long, caddr_t);
void (*if_watchdog) /* timer routine */
(struct ifnet *);
union {
int (*if_poll_recv) /* polled receive routine */
(struct ifnet *, int *);
int uif_capenable; /* enabled features */
} _u2;
int (*if_poll_xmit) /* polled transmit routine */
(struct ifnet *, int *);
void (*if_poll_intren) /* polled interrupt reenable routine */
(struct ifnet *);
void (*if_poll_slowinput) /* input routine for slow devices */
(struct ifnet *, struct mbuf *);
void (*if_init) /* Init routine */
(void *);
/* Clarinet - added this func pointer as it is used in the WRS code */
int (*if_resolve)(); /* arp resolve at driver level */
int (*if6_resolve)(); /* nd resolve at driver level */
int (*if_resolvemulti) /* validate/resolve multicast */
(struct ifnet *, struct sockaddr **, struct sockaddr *);
struct ifqueue if_snd; /* output queue */
struct ifqueue *if_poll_slowq; /* input queue for slow devices */
struct ifprefixhead if_prefixhead; /* list of prefixes per if */
/* Clarinet - added this cookie that holds the drv_ctrl pointer */
void * pCookie; /* data for IP over MUX attachment */
int if_adminstatus;
int admin_inet_status;
int admin_inet6_status; /* RFC 2465, admin status control for IPv6 */
uint32_t if_csum_flags_tx;
uint32_t if_csum_flags_rx;
#ifdef VIRTUAL_STACK
VSNUM vsNum;
#endif /* VIRTUAL_STACK */
#ifdef VLAN_TAG
void * pTagData; /* 802.1Q L2 VLAN tagging structure */
#endif /* VLAN_TAG */
};
其中if_flags意义和RIP类似。
具体定义在if.h中:
#define IFF_UP 0x1 /* interface link is up */
#define IFF_BROADCAST 0x2 /* broadcast address valid */
#define IFF_DEBUG 0x4 /* turn on debugging */
#define IFF_LOOPBACK 0x8 /* is a loopback net */
#define IFF_POINTOPOINT 0x10 /* interface is point-to-point link */
#define IFF_SMART 0x20 /* interface manages own routes */
#define IFF_RUNNING 0x40 /* resources allocated */
#define IFF_NOARP 0x80 /* no address resolution protocol */
#define IFF_PROMISC 0x100 /* receive all packets */
#define IFF_ALLMULTI 0x200 /* receive all multicast packets */
#define IFF_OACTIVE 0x400 /* transmission in progress */
#define IFF_SIMPLEX 0x800 /* can‘t hear own transmissions */
#define IFF_LINK0 0x1000 /* forwarding disabled */
#define IFF_LINK1 0x2000 /* per link layer defined bit */
#define IFF_LINK2 0x4000 /* per link layer defined bit */
#define IFF_ALTPHYS IFF_LINK2 /* use alternate physical connection */
#define IFF_MULTICAST 0x8000 /* supports multicast */
#define IFF_NOTRAILERS 0x20000 /* avoid use of trailers */
#define IFF_INET_UP 0x40000 /* interface is up for ipv4 */
#define IFF_INET6_UP 0x80000 /* interface is up for ipv6 */
#define IFF_UNNUMBERED IFF_POINTOPOINT /* supports unnumbered interfaces */
#define IFF_FPV4_ENABLE 0x100000 /* supports V4 fast forwarding */
#define IFF_FPV6_ENABLE 0x200000 /* supports V6 fast forwarding */
#define IFF_PROXY_ALL 0x400000 /* enable Cisco style proxying */
#define IFF_DONT_FORWARD IFF_LINK0 /* forwarding disabled */
/*
* The following flag(s) ought to go in if_flags, but we cannot change
* struct ifnet because of binary compatibility, so we store them in
* if_ipending, which is not used so far.
* If possible, make sure the value is not conflicting with other
* IFF flags, so we have an easier time when we want to merge them.
*/
#define IFF_POLLING 0x10000 /* Interface is in polling mode. */
#define IFF_PPROMISC 0x800000 /* user-requested promisc mode */
- 3. 【Gcc版本查询】
$ cc --version | head -1
cc (GCC) 3.3.4 (Debian 1:3.3.4-13)
$ ld --version | head -1
GNU ld version 2.15
- 4. 【SVN版本合并】
命令形式:
svn merge -r 1535:1561 http://172.16.16.34:8177/svn/DARE_MDU/trunk
此命令用来比较差异,并将差异加到本地源码中(切记在本地源码中,编译通过后,需svn ci提交到svn服务器上)
后面的url (http://172.16.16.34:8177/svn/DARE_MDU/trunk ) 是被用来合并的的分支或主干。
svn merge使用时所在的当前路径($PWD)应为要被合入的主干或分支的根目录(本地路径)
-r应该是循环的意思
1535:1561是要被合并的版本号的区间值。
若这两个值颠倒过来写(1561:1535),就是相反的意思了,是从本地源码中“去掉”1535到1561之间所修改的代码。
还有一个宏HEAD是用来表示当前最新的版本,故有下面的用法:
svn merge -r Head:1535
表示从当前源码回撤到某个版本,即回到1535之前的那一个版本。这里后面没有url地址,故就为当前本地源码所对应的分支或主干地址(也就是当前分支或主干源码回撤)。另外,-r HEAD也可不留空格,即-rHEAD.
END