Linux进程的层次关系 (Linux/Unix)
发布于 2009-02-16 19:40 阅读:39662 评论:0 标签: Linux 进程

    前段时间在看清华大学出版社出版的《Linux教程》(05年6月第一版)。在248页第十三章《进程》有一节是简述Linux进程的层次关系的,把操作系统自启动后都做了什么,说得比较清晰,看过后受益匪浅。

    就是喜欢看这种能把整个框架说得比较清楚的文章!特抄来以共享:

    当打开Linux系统,LILO(LInux LOader)找到Linux内核把它加载到内存。它初始化各种硬件,包括磁盘控制器。然后转到保护模式,加载操作系统,执行初始化各种内核数据结构的代码,例如inode和文件表。此进程的PID为0。它启动初试进程(init进程,PID为1)完成引导过程的其余工作。init进程启动守护进程kflushd、kupdate、kpiod和kswapd,其PID分别为2、3、4、5。Init进程然后初始化文件系统,安装根文件系统。接下来试着执行/sbin/init程序,在每一个激活的终端上执行minegetty进程(经常被称为getty进程)。getty进程设置终端属性,如波特率,这些属性在/etc/termcap文件中都有定义。它显示login:提示符,等待用户登录。

    在login:提示符下,输入登录名并按回车键,getty进程产生一个子进程。它转变为以登录名为参数的登录进程。登录进程提示输入密码,并检查输入名和密码的有效性。如果两者均正确,登录进程产生一个子进程,它将转变为登录shell。如果登录进程没有在/etc/passwd文件中找到登录名或者输入的密码与/etc/passwd文件中(或者/etc/shadow文件)存放的密码不匹配,他将显示错误提示信息然后终止。控制权又回到getty进程,重新显示login:提示符。一旦进入登录shell,就可以完成自己的工作,还可以按<ctrl-D>键终止当前shell。如果这样做了,shell进程会终止,控制权又回到getty进程,再次显示login:提示符,又开始循环。

    就是说,当登录到Linux系统,系统产生第一个进程,称为登录进程,它又创建登录shell。登录shell为所输入的命令创建进程,用以解释/执行命令。

    两个Linux进程贯穿系统生命周期:swapper和init进程。监视终端行的getty进程,只要终端与系统关联上就会一直存在。登录进程和登录shell进程只有在登录时才存在。所有其它进程生存期较短,只在命令或者程序执行时短暂存在。

    ps -ef 命令或者pstree命令可以用图的形式显示当前系统中执行进程的进程树,勾勒出进程间的父子关系。pstree命令显示的图比ps -ef命令更简洁。pstree显示的结果,前有“+”的是当前的后台进程,而前面的有“-”的是后续后台进程。pstree命令使用-h参数,输出用粗体(加亮)显示当前进程。使用“-a”选项,pstree显示带参数的命令。如“pstree 402 -a”可以显示PID为402的进程的那个的层次关系。

    Bash shell可以使用ulimit显示用户可以同时执行的最大进程个数。TC shell下为limit。两个命令都可以用来显示硬件和操作系统资源的使用限制。

展开全文  
收起全文  
SYN Flood攻击、SYN Cookie防御和Linux/FreeBSD的内核参数修改 (Linux/Unix)
发布于 2008-11-28 22:30 阅读:75181 评论:0 标签: FreeBSD Linux SYN

    黑客是个令人向往、有前途的职业。我欣赏好黑客,讨厌坏黑客。所谓坏黑客,就是导致对方有人要加班的那种家伙。

    SYN Flood攻击是一种典型的拒绝服务型(Denial of Service)攻击。所谓拒绝服务型攻击就是通过进行攻击,使受害主机或网络不能够良好的提供服务,从而间接达到攻击的目的。黑客喜欢玩这个,以让对方加班而显示自己有水平、有能力、有魄力,其实呢,啥都不是。

    一:什么是SYN Flood攻击

    SYN Flood攻击利用的是IPv4中TCP协议的三次握手(Three-Way Handshake)过程进行的攻击。这个协议规定,如果一端想向另一端发起TCP连接,它需要首先发送TCP SYN (synchronize)包到对方,对方收到后发送一个TCP SYN+ACK包回来,发起方再发送TCP ACK (ACKnowledge Character)包回去,这样三次握手就结束了。

    在上述过程中,还有一些重要的概念:

    未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。或者说TCP服务器收到TCP SYN request包时,在发送TCP SYN+ACK包回TCP客户机前,TCP服务器要先分配好一个数据区专门服务于这个即把形成的TCP连接。一般把收到SYN包而还未收到ACK包时的连接状态成为半开连接(Half-open Connection)。

    Backlog参数:表示未连接队列的最大容纳数目。

    SYN-ACK 重传次数:服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。

    半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。有时我们也称半连接存活时间为Timeout时间、SYN_RECV存活时间。

    在最常见的SYN Flood攻击中,攻击者在短时间内发送大量的TCP SYN包给受害者,这时攻击者是TCP客户机,受害者是TCP服务器。根据上面的描述,受害者会为每个TCP SYN包分配一个特定的数据区,只要这些SYN包具有不同的源地址(这一点对于攻击者来说是很容易伪造的)。这把给TCP服务器系统造成很大的系统负担,最终导致系统不能正常工作。

    二:SYN Cookie原理

    能够有效防范SYN Flood攻击的手段之一,就是SYN Cookie。SYN Cookie原理由D. J. Bernstain和 Eric Schenk发明。

    SYN Cookie是对TCP服务器端的三次握手协议作一些修改,专门用来防范SYN Flood攻击的一种手段。它的原理是,在TCP服务器收到TCP SYN包并返回TCP SYN+ACK包时,不分配一个专门的数据区,而是根据这个SYN包计算出一个cookie值。在收到TCP ACK包时,TCP服务器在根据那个cookie值检查这个TCP ACK包的合法性。如果合法,再分配专门的数据区进行处理未来的TCP连接。

    下面分Linux和FreeBSD来说说如何配置内核参数来实现SYN Cookie

    三:Linux下设置

    如果你的服务器配置不太好,TCP TIME_WAIT套接字数量达到两、三万,服务器很容易被拖死。通过修改Linux内核参数,可以减少服务器的TIME_WAIT套接字数量。

    TIME_WAIT可以通过以下命令查看:

以下是代码片段:
netstat -an | grep "TIME_WAIT" | wc -l

    在Linux下,如CentOS,可以通过修改/etc/sysctl.conf文件来达到目的。

    增加以下几行:

以下是代码片段:
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 1024    65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2


     说明:

  net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies,这是个BOOLEAN。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
  net.ipv4.tcp_tw_reuse = 1 表示开启重用,这是个BOOLEAN。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
  net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,这是个BOOLEAN,默认为0,表示关闭。
  net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。单位为秒。
  net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。单位为秒。
  net.ipv4.ip_local_port_range = 1024    65000 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
  net.ipv4.tcp_max_syn_backlog = 8192 表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
  net.ipv4.tcp_max_tw_buckets = 5000 表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。
  net.ipv4.tcp_synack_retries和net.ipv4.tcp_syn_retries是定义SYN重试次数。

  执行以下命令使配置生效:

以下是代码片段:
 /sbin/sysctl -p

    如果你不想修改/etc/sysctl.conf,你也可以直接使用命令修改:

以下是代码片段:
/sbin/sysctl -w key=value

    四:FreeBSD下设置

    yayu个人学习的观点:FreeBSD中对syn的防御和Linux下可能不一样,配置的参数也不完全相同,相关配置和理解可能不对:)

    TCP链接中有一个MSL(max segment lifetime)的概念,也就是最大生成时间,MSL的值在一般的实现中取30s,有些实现采用2分钟。在TCP的状态机中的“被动关闭”:从CLOSE_WAIT到LAST_ACK中有一个如下的规则:当TCP执行一个主动关闭,并发回最后一个ACK,该连接必须在TIME_WAIT状态停留的时间为2倍的MSL。这样可让TCP再次发送最后的ACK以防这个ACK丢失(另一端超时并重发最后的 FIN)。

    存在这个规则导致一个后果就是在这个2*MSL的时间内,该地址上的链接(客户端地址、端口和服务器端的地址、端口)不能被使用。比如我们在建立一个链接后关闭链接然后迅速重启链接,那么就会出现端口不可用的情况。 

    TIME_WAIT时间是2*MSL。因此可以通过调整net.inet.tcp.msl来减少TIME_WAIT时间。对于Web服务器完全可以将这个值调整为7500或2000(访问一个web,超过4~15秒页面还刷不出来,就可以考虑放弃了-_-)

    参数设置参考:

以下是引用片段:

net.inet.tcp.syncookies=1
防止DOS攻击

net.inet.tcp.msl=7500
防止DOS攻击,默认为30000

net.inet.tcp.blackhole=2
接收到一个已经关闭的端口发来的所有包,直接drop,如果设置为1则是只针对TCP包

net.inet.udp.blackhole=1
接收到一个已经关闭的端口发来的所有UDP包直接drop

    FreeBSD下,yayu没看见“/sbin/sysctl -p”这样的命令可以使/etc/sysctl.conf的内容生效,所以直接使用命令了:

以下是代码片段:
sysctl net.inet.tcp.syncookies=1 net.inet.tcp.msl=7500 net.inet.tcp.blackhole=2 net.inet.udp.blackhole=1

    五:其他

    除了修改服务器的内核参数,还可以修改apache的配置文件中的Timeout、KeepAlive、MaxClients等参数来防止Dos攻击,如果有接口调用,还要注意控制一下调用的时间。请听下文分解。

    六:总结

    我讨厌让人加班的坏黑客,不过这也促进了我的学习。

    如果哪位看见上面有不对的地方,还请留意告知,谢谢!

    七:参考文章:

以下是引用片段:

SYN Cookie原理及在Linux内核中的实现
http://www.linux-cn.com/html/linux/kernel/20070411/1630.html

减少Linux下Squid服务器的TIME_WAIT套接字数量
http://blog.s135.com/post/338.htm

TCP协议三次握手
http://www.blogjava.net/hallywang/archive/2007/03/12/103327.html

Tcp三次握手与四次挥手
http://skyyue.bokee.com/viewdiary.15883132.html

linux服务器历险之sysctl优化linux网络
http://blog.csdn.net/chinalinuxzend/archive/2007/09/20/1792184.aspx

中国最完整的sysctl.conf优化方案
http://www.bsdlover.cn/html/38/n-138.html

Linux 反 DDOS的几个设置
http://www.pgsqldb.org/mwiki/index.php/Linux_%E5%8F%8D_DDOS%E7%9A%84%E5%87%A0%E4%B8%AA%E8%AE%BE%E7%BD%AE

FreeBSD系统优化部分内核参数调整中文注释
http://fanqiang.chinaunix.net/system/bsd/2005-04-06/3101.shtml

linux系统优化sysctl
http://bbs.linuxsky.org/thread-7161-1-1.html

SYN,ACK的英文全拼是什么?
http://ks.cn.yahoo.com/question/1407072302504.html

展开全文  
收起全文  
让你的vim显示颜色 (Linux/Unix)
发布于 2008-08-06 23:22 阅读:54892 评论:0 标签: export linux term vim

    使用vim编辑你的程序,如php、c、c++程序,如果没有颜色,相信你会在linux下使用文本编辑程序而感到厌烦。

    这时可更改linux下的终端环境变量TERM,可以使用命令“env”查看TERM的值:

以下是代码片段:
[root@login testing]# env
......
TERM=vt100
......

    更改它的值为“linux”:

以下是代码片段:
[root@login testing]# export TERM=linux

    对于TERM的说法,我也不甚了解。不过你可以man一下看看。对于它可能的值,从网上一篇文章看到可以从这个目录下的文件看到:

以下是引用片段:
/usr/share/terminfo/v/v

    对于“export”,说明如下:

以下是引用片段:

export

语  法:export [-fnp][变量名称]=[变量设置值]

补充说明:在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该此登陆操作。

参  数
 -f  代表[变量名称]中为函数名称。
 -n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
 -p  列出所有的shell赋予程序的环境变量。


展开全文  
收起全文  
crontab命令的使用介绍及我的体会 (Linux/Unix)
发布于 2008-07-09 13:21 阅读:201665 评论:3 标签: crontab Linux

    一:前言

    cron 是一个可以用来根据时间、日期、月份、星期的组合来调度对重复任务的执行的守护进程。简而言之,如果你想让系统自动在你指定的时间执行某命令,你需要了解crontab这个命令。它不是一个单纯的命令,而是引发一个脚本,具体执行的是这个脚本里面的命令。

    在要判定该服务是否在运行,使用 /sbin/service crond status 命令。
    要启动 cron 服务,使用 /sbin/service crond start 命令。
    要停止该服务,使用 /sbin/service crond stop 命令。
    一般推荐你在引导时启动该服务。

    二:了解 cron 任务

    cron 的主配置文件是 /etc/crontab,它包括下面几行:

以下是引用片段:
[root@login mobile]# cat /etc/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 3 * * * root /var/cfengine/bin/cfexecd -F

    前四行是用来配置 cron 任务运行环境的变量。SHELL 变量的值告诉系统要使用哪个 shell 环境(在这个例子里是 bash shell);PATH 变量定义用来执行命令的路径。cron 任务的输出被邮寄给 MAILTO 变量定义的用户名。如果 MAILTO 变量被定义为空白字符串(MAILTO=""),电子邮件就不会被寄出。HOME 变量可以用来设置在执行命令或脚本时使用的主目录。

    值得注意的是:

    1:上面的PATH 变量定义用来执行命令的路径,这么一来,如果你在crontab里执行的命令不再这个路径中,请使用命令的全路径,否则crontab并不会为你去寻找。如php命令,你可能是安装到了你指定的路径,那你应该使用which命令找到php命令的全路径。

    2:MAILTO 变量可能会给你带来麻烦,因为它可能会不断的发信,而使你的磁盘臃肿,使用率达到100%,一般是:/var/spool/clientmqueue/ 这个夹,而且里面的文件及其多,并且都是小文件,使用rm命令会提示你文件太多而无法删除,这时你需要了解“ls | xargs rm -f”这个命令的含义。

    与其日积月累,非常的多,甚至会撑爆整个系统。不如每条命令后面进行重定向处理,这是非常必要的: >/dev/null 2>&1 。前提是对 Job 中的命令需要正常输出已经作了一定的处理, 比如追加到某个特定日志文件。

    三:crontab 相关的文件

    如你在 /etc/crontab 文件中所见,它使用 run-parts 脚本来执行 /etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 和 /etc/cron.monthly 目录中的脚本,这些脚本被相应地每小时、每日、每周、或每月执行。这些目录中的文件应该是 shell 脚本。

    如果某 cron 任务需要根据调度来执行,而不是每小时、每日、每周、或每月地执行,它可以被添加到 /etc/cron.d 目录中。该目录中的所有文件使用和 /etc/crontab 中一样的语法。

以下是引用片段:
# record the memory usage of the system every monday
            # at 3:30AM in the file /tmp/meminfo
            30 3 * * mon cat /proc/meminfo >> /tmp/meminfo
            # run custom script the first day of every month at 4:10AM
            10 4 1 * * /root/scripts/backup.sh

    四:crontab命令语法

    格式为:

以下是代码片段:
crontab [ -e [UserName] | -l [UserName] | -r [UserName] | -v [UserName] | File ]

    解释如下:

以下是引用片段:
-e    UserName 编辑用户的 crontab 文件的拷贝,或者,如果一个有效的 UserName 的 crontab 文件不存在则创建一个空的文件进行编辑。当编辑完成后,文件被拷贝到 crontab 目录作为用户的crontab 文件。
-l    UserName 列出用户的 crontab 文件。
-r    UserName 从 crontab 目录除去用户的 crontab 文件。
-v    UserName 列出用户 cron 作业的状态。
File    以File做为crontab的任务列表文件并载入

    五:crontab文件命令使用格式

    /etc/crontab 文件中的每一行都代表一项任务,它的格式是:

以下是代码片段:
minute   hour   day   month   dayofweek   command

    ● minute ― 分钟,从 0 到 59 之间的任何整数
    ● hour ― 小时,从 0 到 23 之间的任何整数
    ● day ― 日期,从 1 到 31 之间的任何整数(如果指定了月份,必须是该月份的有效日期)
    ● month ― 月份,从 1 到 12 之间的任何整数(或使用月份的英文简写如 jan、feb 等等)
    ● dayofweek ― 星期,从 0 到 7 之间的任何整数,这里的 0 或 7 代表星期日(或使用星期的英文简写如 sun、mon 等等)
    ● command ― 要执行的命令(命令可以是 ls /proc >> /tmp/proc 之类的命令,也可以是执行你自行编写的脚本的命令。)

    在以上任何值中,星号(*)可以用来代表所有有效的值。譬如,月份值中的星号意味着在满足其它制约条件后每月都执行该命令。

    整数间的短线(-)指定一个整数范围。譬如,1-4 意味着整数 1、2、3、4。

    用逗号(,)隔开的一系列值指定一个列表。譬如,3, 4, 6, 8 标明这四个指定的整数。

    正斜线(/)可以用来指定间隔频率。在范围后加上 / 意味着在范围内可以跳过 integer。譬如,0-59/2 可以用来在分钟字段定义每两分钟。间隔频率值还可以和星号一起使用。例如,*/3 的值可以用在月份字段中表示每三个月运行一次任务。

    开头为井号(#)的行是注释,不会被处理。

    六:安全性:控制使用 crontab 命令

    /var/adm/cron/cron.allow 和 /var/adm/cron/cron.deny 文件控制哪一个用户可以使用 crontab 命令。root 用户可以创建、编辑或删除这些文件。这些文件的条目是用户登录名称,每个名称占一行。两个文件都不允许空格。如果登录标识和多个的登录名称相关联,这个crontab 命令采用第一个在 /etc/passwd 文件中的登录名称,而不管当前实际使用哪一个登录名称。而且,要允许用户启动 cron 作业,应该使用 chuser 命令将 /etc/security/user 文件中的守护进程属性设置为 TRUE。

    以下关于 cron.allow 文件的一个示例:

以下是引用片段:
root
nick
dee
sarah

    如果 cron.allow 文件存在,只有在文件中出现其登录名称的用户可以使用 crontab 命令。root 用户的登录名必须出现在 cron.allow 文件中,如果这个文件存在的话。系统管理员可以明确的停止一个用户,通过使用 crontab 命令,同时在cron.deny 文件中列出用户的登录名。如果只有 cron.deny 文件存在,任一名称没有出现在这个文件中的用户可以使用 crontab 命令。

    如果以下一个条件成立,用户将不能使用 crontab 命令:

    ● cron.allow 文件和 cron.deny 文件不存在(只允许 root 用户)。 
    ● cron.allow 文件存在,但用户的登录名并不列在其中。 
    ● cron.deny 文件存在,并且用户的登录名列在其中。
    ● 如果 cron.allow 和 cron.deny 文件都不存在,只有被 root 用户授权的人可以用 crontab 命令提交一个作业。

    七:用户与crontab文件的关联

    根用户以外的用户可以使用 crontab 工具来配置 cron 任务。所有用户定义的 crontab 都被保存在 /var/spool/cron 目录中,并使用创建它们的用户身份来执行。要以某用户身份创建一个 crontab 项目,登录为该用户,然后键入 crontab -e 命令,使用由 VISUAL 或 EDITOR 环境变量指定的编辑器来编辑该用户的 crontab。该文件使用的格式和 /etc/crontab 相同。当对 crontab 所做的改变被保存后,该 crontab 文件就会根据该用户名被保存,并写入文件 /var/spool/cron/username 中。

    cron 守护进程每分钟都检查 /etc/crontab 文件、etc/cron.d/ 目录、以及 /var/spool/cron 目录中的改变。如果发现了改变,它们就会被载入内存。这样,当某个 crontab 文件改变后就不必重新启动守护进程了。

    八:示例

    1:拷贝一个名为 mycronjobs 的文件,到 /var/admn/cron/crontabs 目录下,输入以下内容:

以下是代码片段:
crontab mycronjobs

    2:将时间以小时的形式把每个小时写到 console 中,输入:

以下是代码片段:
0 * * * * echo The hour is `date` 。>/dev/console

    3:要在每个星期一、星期三和星期五的 6:30 a.m. 运行 calendar 命令,输入:

以下是代码片段:
30 6 * * 1,3,5 /usr/bin/calendar

    4:要在一年的每一天的 6:30 运行 calendar 命令,输入:

以下是代码片段:
30 6 * * * /usr/bin/calendar

    5:要在八月的每天午夜运行一个称为 maintenance 的脚本,输入:

以下是代码片段:
0 0 * 8 * /u/harry/bin/maintenance

    6:为命令的标准输入定义文本,输入:

以下是代码片段:
0 16 * 12 5 /usr/sbin/wall%HAPPY HOLIDAY!%Remember to turn in your time card.

在 %(百分号)之后定义 wall 命令的标准输入的文本:

HAPPY HOLIDAY!
 
Remember to turn in your time card.

    7:每天早上6点10分

以下是代码片段:
10 6 * * * date

    8:每两个小时  

以下是代码片段:
0 */2 * * * date (solaris 5.8似乎不支持此种写法)

    9:晚上11点到早上8点之间每两个小时,早上8点

以下是代码片段:
0 23-7/2,8 * * * date

    10:每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点

以下是代码片段:
0 11 4 * mon-wed date

    九:参考和感谢

    本文参考、大多抄袭了以下文章,特此感谢。

以下是引用片段:
Linux crontab-自动化的任务:http://www.eygle.com/digest/2006/01/hwoto_linux_crontab.html

crontab 命令:http://study.chyangwa.com/IT/AIX/aixcmds1/crontab.htm

Crontab 笔记:http://www.dbanotes.net/techmemo/crontab_tips.html

展开全文  
收起全文  
[翻译]What is Linux? -- 什么是Linux (Linux/Unix)
发布于 2008-04-15 18:18 阅读:56564 评论:0 标签: Linux 翻译

  原文:What is Linux?   同时发布:译言

  也许你已经听过很多关于Linux的事情,而且决定体验一下它。如果你是个Linux新手,或者你对电脑都是陌生的,那在最开始的的可能会有点迷惑。但是不要当心这个,事实上这是相当简单的事情。放松一下继续阅读下去吧,我们会为你解释所有的问题。

  在本文中,“Linux”这个单词描述的是一组东西。精确地讲,“Linux”代表着一个操作系统内核 -- 也就是说,它是一个操作系统的底层,所有的艰苦的工作,如与计算机的硬件对话,管理内存和驱动程序,都是由它完成。除非你是一个计算机高级用户,或者你要深入进去解决一些硬件或软件问题,否则你将永远不会接触到它,甚至不需要考虑到它的存在。

  尽管它对于计算机系统来说是非常重要的,但是对用户来说是不会直接接触到它的。相反的是,你会工作在一个被称为“用户平台”的程序中 -- 如此称呼是因为用户是直接工作在这些程序之上的。当一个发行商或项目组把Linux内核和一些对用户有用的用户平台上的程序捆绑在一起,我们将之称为Linux分发版,或简称为“Linux” -- 因为Linux在其中处于核心地位,而且每次称作“Linux分发版”会使人喘气太困难了。一般来说,当有人和你说“我使用Linux”,或“你用过Linux吗?”,他们不仅是在说内核,他们说的是整个Linux分发版。

什么是分发版,哪一个是我应该选择的?

  谈及Linux分发版,你可能会奇怪的觉得究竟什么是分发版。这个是相当简单的。在我们上面的讨论中,我们知道这个Linux内核本身对终端用户是很难有用的。你不能用它玩俄罗斯方块、写文档、开通网页服务,或者发送邮件 -- 如果你不能做这些事情,它怎么能称之为计算机呢?

  所以,很多的发行商和项目组们决定把Linux内核和一些有用的软件整合在一起,于是你就可以很有亲切感的做很多事情了。同时,他们也提供了安装步骤,这样你就可以在电脑上安装Linux了和管理应用程序:如添加和管理驱动、管理用户、无需在命令行环境下使用文本编辑器和指令工作。当你把Linux内核和有用的软件、安装程序、软件管理工具整合在一起,你就拥有一个Linux分发版了。

  下一个问题是,哪一个分发版 -- 或发行套件 -- 是你该选择的?不幸的是,这个问题不像分发版那样好解释。基于很多的因素,我们无法告诉你该选择哪个分发版,这完全取决于你的个人经历,和你想用来做什么。

  一些发行套件,像Rad Hat企业版SUSE企业版主要是为一些使用Linux作服务器的企业使用的。一些如Fedora CoreUbuntuopenSUSE的发行套件有着不同的外观,它们适合使用桌面或用作服务器的用户。

  如果你问20个Linux的使用者他们该选择那个发行套件,你可能会得到很多不同的答案 -- 而且他们都是对的,至少对他们自己而言。

  非常好的是大多是Linux分发版都是免费的,你可以下载每一种,然后试试看哪一种能满足你的需要。可以看看我们的套件中心来得到最流行的发行套件和更多信息。

它们都是免费的吗?

  这个消息是真的吗?微软、苹果以及其他的公司都对他们的软件进行收费,你能够免费下载与Windows或Mac  OS  X旗鼓相当的软件,这听起来有点奇怪。这是怎么回事呢?

  简而言之,一些人认为这些软件应该自由和开源的分发,这样软件就可以自由的分享了 -- 而且你甚至可以修改它!这个行动已经存在很长时间了。GNU项目于1984年由Richard Stallman创建,这个时间早于微软公司发行他的第一版Windows操作系统,同年,苹果公司发布他第一版经典的Mac OS操作系统。

  这个项目一直在聚集着力量,在1991年的时候Linus Torvalds发布了Linux的第一个公开的发行版。Linus Torvald也把Bash Shell和GCC加进了Linux,以使它更有使用价值。最终Torvalds决定采用GPL作为内核的许可协议。

  GPL,是由GNU组织发展起来的,他允许你根据GPL把软件分享给你任何你愿意的人。你可以依据GPL修改这些软件,并分发出新的版本。一旦你在这些许可协议下分享了这些软件,你就接受了这个协议。

GNU/Linux包含了什么?

  一些人乐意把Linux称作GNU/Linxu,因为他们想用这种方式来强调GNU组织对Linux分发版的贡献。Linxu内核在任何Linux分发版都扮演着巨大作用,而这离不开GNU组织所贡献出的软件。例如,如何没有GNU Compiler Collection (GCC),你如何编译内核或者其它运行在Linux下的程序?大多数Linux分发版把GNU Bash作为默认的Shell,GNOME、GTK+使用着GNU glib,还有其它很多的程序在Linux全天候运行着。

  没有必要列出所有的由GNU组织开发运行在Linux的软件,这实在是太多了。没有GNU,我们将错过许多精彩的软件。

  从Linux的分发版中,GNU组织获得了很大影响力的认可。但是,GNU组织并不是唯一的主要贡献者。值得记载的是,Linux分发版所的软件来自许多其他的组织--比如GNOME、KDE、OpenOffice.org、Mozilla基金会等等。

  Linux还是GNU/Linux,这就取决于你了。

自由软件和开源软件的区别

  自由软件和开源软件是有区别的。需要注意的是,所有的自由软件都是开源软件 -- 因为它符合Open Source Initiative (OSI)对开源的定义,其简称为OSI

  然而,并不是所有的开源软件符合GNU组织或Debian组织自由软件的定义。那他们有什么区别呢?基本上,他们存在哲学上的差异。在GNU组织的世界中,自由软件事关自由,而不是价钱。

  而另一方面,开源软件最初起源于它的开发模式。它的开源软件模式 -- 分布式的开发,透明的开发过程,可修改的代码 -- 比私有软件开发模式要好点。因此,开源许可协议可能在某些方面对用户有所限制,而自由软件却不一定会。

  并非所有运行在Linux的软件都是自由或者免费的。很多公司为Linux开发了私有性的软件,你可以付出一点钱来得到它。例如,Oracle有产品运行在Linux上,但他们并没有开放它 -- 他们出售运行在Linux上的Oracle数据库和其它软件来获取利益。

  尽管GPL和其他许可协议要求其下的衍生产品执行相同的许可协议,但他们没有要求非其衍生的产品执行相同的许可协议,所以很多公司可以出售运行在Linux上的软件,这不会破坏任何规定和许可协议。

  事实上,的确有一些公司在出售Linux并做售后服务,而且做得也很不错。红帽子分发版、红帽子企业版,它们包含了自由和开源软件(FOSS),他们从中获取利益已经一段时间了。他们并不是依靠出售许可协议而获取利益,而是在对分发版的技术支持上得到收益,因为很多公司愿意在遇到问题或需要新的功能时付出酬劳。

我可以在Linux下运行Windows程序吗?

  如果你曾经是一个Windows用户,当然大多数人都是这样的,你可能在使用Linux时也能支持你所需要的Windows程序。原本上,Windows程序是不能运行在Linux上的,但是你在Linux上找到替代方法,或者你的确需要的话,你可以使用一些Linux插件来帮助你。

  Wine就是这样的一个选择。Wine是一个开源的软件,它可以让Windows程序运行在Linux或Unix操作系统上。它对Windows程序是兼容的,所以你可以不改变程序的前提下在Linux运行它。另一个选择是CodeWeavers CrossOver,它是基于Wine的,但并不是完全开源的。它拥有一些Wine不具备的功能,使得其在Linux下更加容易安装和运行Windows程序。

  还有一个选择是虚拟机。虚拟机和VMware、VMware工作平台、ParallelsQemu一样,可以让你在Linux下像在处于Windows环境中一样运行程序 -- 所以你可以在Linux下无需修改的运行几乎所有的Windows程序,这就好像在Windows下运行一样。(一些要求3D支持的应用可能在虚拟机无法运行,因为虚拟机不支持3D图形环境)。

  在不远的未来,你可能更愿意使用Linux下程序来取代你在Windows下的程序了。下一章中,我们将讨论如何找到Linux下的程序,并安装它们。

展开全文  
收起全文  
[翻译]What is Linux? -- Linux从这里开始 (Linux/Unix)
发布于 2008-04-03 15:35 阅读:42069 评论:0 标签: Linux start 翻译

      想从现在开始,每周翻译一篇英语文章。请广大网友监督!

  原文: Linux starts here  同时发布:译言

开始了解Linux

  Linux(发音:LIH-nuks)是一个类似Windows或Mac的计算机操作系统。一般认为Linux是由芬兰的程序员Linus (发音:LEE-nus) Torvalds于1991年在遍及全球的开发者帮助下起源的。Linux类似早期的操作系统Unix,但与Unix不同的是,Linux是一种自由和开源的软件 -- 也就是说,你不仅可以下载并在你的电脑上运行,而且还可以下载它的源代码。你可以修改或扩展这些源代码以适应你的需求。

  Linux广泛运行在多种硬件平台上,从大型的主机到个人电脑,甚至手机上。Linux遵循自由软件基金会GNU项目GNU General Public License第二版规定,它允许用户改变和分发这个操作系统。

  你可以认为Linux由两部分组成 -- 一个被称为内核,它是连接硬件和系统软件系统的基本接口。二是在内核之上运行的各种程序,比如图形用户界面(GUI)和应用程序。

  没有专门的公司销售Linux。因为它是开源的软件,任何人都可以把一些程序和应用与Linux打包为一个整体,并分发它。这种不同的“味道”的Linux被称为分发版。你可以从我们的分发版页面上得到大部分流行的分发版的资料。分发版的一些丰富的资源可以在DistroWatch.com上找到。

  许多Linux的分发版被设计成在你电脑的硬盘上安装,它可以作为一个唯一的操作系统,也可以和其它的操作系统共同存在,这样你可以在每次电脑启动时选择使用哪个操作系统。还有一些分发版可以作为Live CD在你的移动媒体上引导运行,典型的如CD,当然也有Live DVD分发版,甚至有一些分发版可以从软盘或者USB上引导启动。Live类型的分发版是非常有用的,因为这样可以让你在不影响目前的硬盘上的东西的基础上运行不同的操作系统。

  如果你是一个对Linux完全不了解的Windows用户,请丢弃那些令人听起来对Linux沮丧的声音。为了你们,我们写了另一篇文章,可以让你在不改变你的Windows系统情况下测试Linux,也可以让你保留Windows程序和文件情况下安装Linux,你也可以根据你的需要选择适合你的分发版。

Linux桌面

  能让Linux对你电脑有用的一方面是它的图形用户界面(GUI)。这个GUI使用可点击的图标、由屏幕面板、滚动条组成的小窗口让Linux秀色可餐(“look and feel”),而且用户使用的菜单和图标等是可以设置和改变的。这种可视可点击的环境,不依赖于命令行的可视化布局,让操作系统更加的直观可用。如果没有GUI,Linux(或其它任何操作系统)会要求用户依次输入各种命令,也就是命令行模式(CLI)。

  当大多数操作系统没有提供能让你选择你想要的用户界面的功能时,Linux却给你很多的选择。这些用户界面中的大多数不仅仅是提供了图形界面 -- 它们提供了一个具有多种工具、应用程序、游戏和其他应用的桌面环境,这样可以让用户的电脑体验可以更丰富一点。Linux下最流行的两种桌面环境是KDE和GNOME。

  KDE是K桌面环境的代表。KDE可以运行任何Unix操作系统下,包括Linux。KDE所有的源代码是遵循GNU General Public License的,这也意味着任何人能得到和改变KDE以适应自己的应用。KDE集成在大多数的Linux分发版里,包括一些标准化的菜单、工具条、配色方案,同时提供了完整的帮助系统,网络工具、图形和多媒体应用,以及完整的办公系统解决方案和其他多种软件工具。KDE项目是被自由软件开发社区支持的,对于Linux使用者来说是无需任何费用的。

  GNOME (发音:guh-NOME),全称是GNU Network Object Model Environment,是Linux另一种非常普及的GUI或桌面环境。它也是遵循GNU General Public License,这也意味着对于任何Unix操作系统的用户,包括它的源代码都是自由可用的。GNOME集成在每一种Linux分发版上。这也是GNU项目的一部分,GNU项目开发了GNU操作系统,其中的一部分包含在所有的标准Linux分发版中。

  正如KDE,GNOME桌面环境包含的不止是工具条、图标和菜单。整套自由软件包里还包括帮助文件、网络工具以及GNOME  Office办公套件。其它在Linux下的GUI有:

  XPDE desktop environment
    “让Windows XP用户更容易的使用Linux”

  Xfce
    “多种*NIX系统下的轻量级桌面环境。它设计得很有效率,它能快速加载和执行程序,而不耗用太多系统资源”

  Enlightenment
    “高级的图形库、工具和环境”

  IceWM
    “IceWM的目标是快速、简单,不阻碍用户使用”

  Blackbox 
    “Blackbox是一种你所寻找的X窗口系统的快速、轻量级的窗口管理工具,而且它不依赖于那些繁琐的资源库”

  Window Maker 
    “Window Maker是一个X11窗口管理工具,最初是为了综合的支持GNUstep桌面环境”

  FluxBox 
    “建立在Blackbox基础上的快速、紧凑的窗口管理工具,它还具有更多的功能”

命令行

  这些所有的桌面环境的共同点之一是让用户可以使用Linux命令行;你没有必要使用鼠标去执行每一次操作。输入一条或几条命令可能会让一些操作更为快速和容易,这就好像是用户在20年前使用DOS操作计算机一样。

  每个桌面环境进入命令行模式的方式是不一样的。通常会提供一个窗口让你输入命令。在GNOME下,这个窗口叫GNOME终端;KDE下,叫做Konsole。

  我们为你准备了一篇文章:命令行基本介绍。一个更进一步学习的网站是LinuxCommand.org

桌面应用

  和所有操作系统一样,Linux也提供了广泛的桌面应用程序的支持。典型的程序包括电子邮件、办公软件、音乐盒电影播放、个人信息处理、诸如即时和聊天室的网络通讯,以及文件共享。

游戏

  Linux对游戏并不陌生。Linux的分发版总是包含着游戏;例如,GNOME游戏包里面包含了16款街机游戏和智力游戏;KDE游戏中心包含的游戏有街机、棋、牌、骰子、逻辑推理、谋略游戏,和一些小玩具。如果你的分发版没有你想要的游戏,你可以到一些商业性的网站,如Linux Game PublishingTux Games,或者你也可以直接到一些小的公司、独立出版人,个人爱好者手中直接购买。如果这个游戏是为微软的Windows操作系统或者家庭游戏而设计的,那么你可以通过模拟器得到帮助。有关Linux游戏的更多信息,你可以去下面的网站看看:Enjoying games with GNU/Linux

文章并未结束

  不久的将来,我们会提供更多的篇幅来介绍不同种类的桌面和服务方面的应用、编程工具、练习和支持方面的内容。我们非常欢迎你给我们来信提出一个Linux初学者应该知道的内容:editors@linux.com。如果你现在想提问题,可以到这个版面来:http://www.linux.com/forums/forum/1

展开全文  
收起全文  
uniq和sort对汉字的识别差异 (Linux/Unix)
发布于 2008-03-29 22:56 阅读:74615 评论:1 标签: Linux sort uniq

  在处理文本文件中经常会使用的到sort和uniq命令,组合使用时通常是为了得到文本中共有多少行不同的信息。
 
  比如“sort a.txt | uniq”。这个命令的意识是说先对文本进行行排序,然后把相邻中的相同行的内容只取一行。
 
  然而在实践中发现这两个命令对汉字的支持不一样,解决方法如下:

以下是引用片段:

[yayu@login log_result]$ echo $LANG
en_US.UTF-8
[yayu@login log_result]$ LANG=zh_cn

展开全文  
收起全文  
eAccelerator 0.9.5.2 安装 (Linux/Unix)
发布于 2008-01-24 18:53 阅读:45546 评论:0 标签: eAccelerator Linux 安装

    有关eAccelerator的资料请看本站我翻译的:PHP加速器eAccelerator文档翻译

    一:eAccelerator把编译好的PHP程序存储在共享内存里面,并直接在这里面执行程序。不适合放入共享内存的文件将被缓存到硬盘上。所以先建立eAccelera缓存目录:

以下是引用片段:

[shengting@login sso]$ pwd
/data1/apache/sso
[shengting@login sso]$ mkdir cache-eaccelerator
[shengting@login sso]$ chmod 777 cache-eaccelerator/
[root@login sso]# chown nobody:nobody cache-eaccelerator/

    二:下载文件:

以下是引用片段:

[shengting@login sso_front_soft]$ cd /home/sso_front_soft/
[shengting@login sso_front_soft]$ pwd
/home/sso_front_soft
[shengting@login sso_front_soft]$ su
Password:
[root@login sso_front_soft]# wget "http://bart.eaccelerator.net/source/0.9.5.2/eaccelerator-0.9.5.2.tar.bz2"
--10:31:00--  http://bart.eaccelerator.net/source/0.9.5.2/eaccelerator-0.9.5.2.tar.bz2
     => `eaccelerator-0.9.5.2.tar.bz2'
 Resolving bart.eaccelerator.net... 193.190.253.234
 Connecting to bart.eaccelerator.net[193.190.253.234]:80... connected.
 HTTP request sent, awaiting response... 200 OK
 Length: 121,935 [application/x-tar]

 100%[===================================================================>] 121,935       55.29K/s            

 10:31:03 (55.23 KB/s) - `eaccelerator-0.9.5.2.tar.bz2' saved [121,935/121,935]

    三:解压并进入文件

以下是引用片段:

[root@login sso_front_soft]# tar -jxvf eaccelerator-0.9.5.2.tar.bz2
[root@login sso_front_soft]# cd eaccelerator-0.9.5.2
[root@login eaccelerator-0.9.5.2]# pwd
/home/sso_front_soft/eaccelerator-0.9.5.2

    四:which一下phpize得到phpize地址:/usr/local/bin/phpize
phpize 命令是用来准备 PHP 扩展库的编译环境的,成功的安装将创建 extname.so 并放置于 PHP 的扩展库目录中。需要调整 php.ini,加入 extension=extname.so 这一行之后才能使用此扩展库。

    而eaccelerator的编译需要使用这个命令:

以下是引用片段:

[root@login eaccelerator-0.9.5.2]# /usr/local/bin/phpize
Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20050922
Zend Extension Api No:   220051025

    五:编译eaccelerator

以下是引用片段:

[root@login eaccelerator-0.9.5.2]# ./configure --enable-eaccelerator=shared --with-php-config=/usr/local/bin/php-config
[root@login eaccelerator-0.9.5.2]# make
[root@login eaccelerator-0.9.5.2]# make install
Installing shared extensions:     /usr/local/lib/php/extensions/no-debug-non-zts-20050922/

    注意上面的“Installing shared extensions”的地址,这是phpize告诉我们的扩展库的地址。如下:

以下是引用片段:

[root@login eaccelerator-0.9.5.2]# ls -l  /usr/local/lib/php/extensions/no-debug-non-zts-20050922/
total 768
-rwxr-xr-x  1 root root 425775 Oct 26 11:28 eaccelerator.so
-rwxr-xr-x  1 root root  78031 Jan 22  2007 memcache.so
-rwxr-xr-x  1 root root  26273 Oct 10 11:55 String2Int.so

    六:以下安装为PHP扩展

以下是引用片段:

[root@login eaccelerator-0.9.5.2]# find / -name php.ini
/usr/local/lib/php.ini

    修改php.ini文件,加入:(注意extension的地址)

以下是引用片段:

[eaccelerator]
extension="/usr/local/lib/php/extensions/no-debug-non-zts-20050922/eaccelerator.so"
eaccelerator.shm_size="32"
eaccelerator.cache_dir="/data1/apache/sso/cache-eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="0"
eaccelerator.compress_level="9"

    七:重启apache

以下是引用片段:

[root@login eaccelerator-0.9.5.2]# /data1/apache/bin/apachectl stop
/data1/apache/bin/apachectl stop: httpd stopped
[root@login eaccelerator-0.9.5.2]# /data1/apache/bin/apachectl startssl
/data1/apache/bin/apachectl start: httpd started

    注意:
    1 : 使用ssl 443端口,启动时:/data1/apache/bin/apachectl startssl
    2 : 定期清理cache-eaccelerator,如果是把cache-eaccelerator下的目录也删除,则需要重启apache,否则会出现异常。(具体什么异常需要测试)

展开全文  
收起全文  
cut命令学习 (Linux/Unix)
发布于 2008-01-23 10:35 阅读:86851 评论:0 标签: cut linux

    链接:http://www.ifpubs.com/books/aix52/cut.htm

    cut命令用途:从文件的每个行中写出选定的字节、字符或字段。

    语法:

以下是引用片段:
cut {  -b List [  -n ] |  -c List |  -f List [  -s ] [  -d Character ] } [ File ... ]

    必须指定 -b、-c 或 -f 标志之一。List 参数为一个以逗号分隔、以空格分隔或连字符分隔的整数的列表(顺序递增)。连字符分隔符表示范围。以下条目是 List 参数的一些示例,它可以用来指代字节、字符或字段:

以下是引用片段:
1,4,7
1-3,8
-5,10
3-

    其中 -5 为从第一个到第五个的简写形式,3- 为从第三个到最后一个的简写形式。

    参数:

以下是引用片段:

-b List 指定字节位置。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c List 指定字符位置。例如,如果您指定 -c 1-72,cut 命令将写出文件每一行的头 72 个字符。
-d Character 使用 Character 变量指定的字符作为指定 -f 标志时的字段定界符。您必须在对 shell 有特殊意义的字符(比如空格字符)上加上引号。
-f List 指定文件中设想被定界符(缺省情况下为制表符)隔开的字段的列表。例如,如果您指定 -f 1,7,cut 命令将仅写出每个行的第一和第七个字段。如果行中不包含字段定界符,cut 命令将通过它们而不对其进行任何操作(对表格的副标题有用),除非指定了 -s 标志。
-n 取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的范围之内,该字符将被写出;否则,该字符将被排除。
-s 取消不包含定界符的行。仅和 -f 标志一起使用。

    该命令返回以下退出值:

以下是引用片段:
0 所有输入文件被成功输出。
>0 发生一个错误。

    遇到的例子:找出服务器的ip地址。

    在FreeBSD中:

以下是引用片段:
/sbin/ifconfig | grep "inet 172" | cut -d " " -f2

    其中的"inet 172"为显示ip那一行的一个标志,目的是取出这一行。

    在CentOS中:

以下是引用片段:
/sbin/ifconfig | grep "inet addr:10.55" | cut -d ":" -f 2 | cut -d " " -f 1

    同上,"inet addr:10.55"目的是取出这一行。这个使用两次cut,因为偶使用一次时死活取不出来,晕死。

    可能根据自己的情况,上面的数字需要自己确定。

    注:使用“-d”参数时,需要注意只能是单个字符。否则会报错:

以下是引用片段:
cut: the delimiter must be a single character

展开全文  
收起全文  
linux和freebsd下的路由操作的区别 (Linux/Unix)
发布于 2008-01-16 15:31 阅读:103175 评论:1 标签: FreeBSD Linux 路由

    添加路由时如果想服务器重启时也能有效,则同时将命令写到/etc/rc.local中。但路由操作在linux和freebsd中是不一样的,区别如下:

    linux:

以下是代码片段:

查看路由:
 /sbin/route
增加路由:
 /sbin/route add -host 172.16.78.226 gw 10.55.40.1
 /sbin/route add -net 172.16.20.0/24 gw 10.55.40.1
删除路由
 /sbin/route del -host 172.16.78.226 gw 10.55.40.1
 /sbin/route del -net 172.16.20.0/24 gw 10.55.40.1

    freebsd:

以下是代码片段:

查看路由:
 netstat -nr
增加路由
 /sbin/route add -host 172.16.78.226 10.55.40.1
 /sbin/route add -net 172.16.20.0/24 10.55.40.1
删除路由
 /sbin/route delete -host 172.16.78.226 10.55.40.1
 /sbin/route delete -net 172.16.20.0/24 10.55.40.1

展开全文  
收起全文