master
unknown 7 years ago
parent 882dc7bfcf
commit 215fb714a8

@ -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/ -->

@ -0,0 +1,29 @@
accept
===
指示打印系统接受发往指定目标打印机的打印任务
## 补充说明
**accept命令** 属于CUPS套件用于指示打印系统接受发往指定目标打印机的打印任务。
### 语法
```
accept(选项)(参数)
```
### 选项
```
-E当连接到服务器时强制加密
-U指定连接服务器时使用的用户名
-h指定连接服务器名和端口号。
```
### 参数
目标:指定目标打印机。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,112 @@
alias
===
用来设置指令的别名
## 补充说明
**alias命令** 用来设置指令的别名。我们可以使用该命令可以将一些较长的命令进行简化。使用alias时用户必须使用单引号`''`将原来的命令引起来,防止特殊字符导致错误。
alias命令的作用只局限于该次登入的操作。若要每次登入都能够使用这些命令别名则可将相应的alias命令存放到bash的初始化文件`/etc/bashrc`中。
### 语法
```
alias(选项)(参数)
```
### 选项
```
-p打印已经设置的命令别名。
```
### 参数
命令别名设置:定义命令别名,格式为“命令别名=‘实际命令’”。
### 实例
**alias 的基本使用方法为:**
```
alias 新的命令='原命令 -选项/参数'
```
例如:`alias l=ls -lsh'`将重新定义ls命令现在只需输入l就可以列目录了。直接输入 alias 命令会列出当前系统中所有已经定义的命令别名。
要删除一个别名,可以使用 unalias 命令,如 unalias l。
**查看系统已经设置的别名:**
```bash
[root@localhost ~]#
[root@localhost ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@localhost ~]#
```
### 命令别名永久生效
直接在shell里设定的命令别名在终端关闭或者系统重新启动后都会失效如何才能永久有效呢办法就是将别名的设置加入~/.bashrc文件然后重新载入下文件就可以了。
```bash
$ vim ~/.bashrc
```
在文件最后面加入别名设置alias rm=rm -i保存后重新载入
```bash
$ source ~/.bashrc
```
这样就可以永久保存命令的别名了。因为修改的是当前用户目录下的.bashrc文件所以这样的方式只对当前用户有用。如果要对所有用户都有效修改/etc目录下的bashrc文件就可以了。在CentOS7下这个文件是/etc/bash.bashrc。此外在CentOS7下细看~/.bashrc文件会发有这样一段代码
```bash
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
```
这个代码的意思就是加载.bash_aliases文件CentOS7已经帮我们考虑好了所以也可以在用户根目录下新建一个文件.bash_aliases存放命令别名设置。
### 小结
alias这个命令是shell的内建命令可以根据自己的使用习惯设置一些别名需要注意的就是和其他命令冲突的情况。
#### 一、 范例演示
在使用和维护Linux系统过程中我们常常希望根据自己的需要来定义一些命令那么这样的操作是不是很难呢其实不是系统已经为我们设置好了相关的命令下面小编就以CentOS6.4系统为例,为大家演示如何创建自己的命令。
#### 二、 自定义命令简介
CentOS系统下的创建自定义命令其实比较简单使用的命令就是alias具体使用的方法就是 alias 自定义命令名=‘命令’。但是需要注意的是,在自定义之前需要查看自定义的命令名是否是系统已经使用的命令名,否则会冲突,另外一个就是定期清理不需要的自定义命令名。
#### 三、 演示举例
假定系统操作员希望进行如下操作:
1.进入目录/root
2.查看目录下文件
3.切换回根目录
通常这需要三条命令 cd /rootlscd / ,如果需要经常使用那么我们可以通过自定义命令的方式用一条命令完成全部操作。
![](alias\01.png)
#### 四、 操作过程
首先使用命令 type 自定义命令名 查看自定义命令名是否被系统占用。从图中可以看出test命令名已被系统占用所以不能使用而loo这个命令名经查询可以使用。
![](alias\02.png)
使用命令alias创建自定义命令alias loo='cd /root;ls;cd /' 。需要注意的是命令的使用格式,分号与分号之间是没有空格的。
![](alias\03.png)
测试一下自定义命令,当输入命令 loo 时,发现系统依次完成了 cd /root、ls、cd / 三条命令,说明设置成功。同时也可直接使用命令 alias 查询系统中是否添加了loo这个自定义命令。
![](alias\04.png)
如果希望删除这个自定义命令,可以使用命令 unalias 自定义命令名 来完成。执行之后发现loo命令已不存在同时自定义命令库中也没有loo命令。
![](alias\05.png)
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,28 @@
apachectl
===
Apache服务器前端控制工具
## 补充说明
**apachectl命令** 是Apache的Web服务器前端控制工具用以启动、关闭和重新启动Web服务器进程。
### 语法
```
apachectl(参数)
```
### 参数
* configtest检查设置文件中的语法是否正确
* fullstatus显示服务器完整的状态信息
* graceful重新启动Apache服务器但不会中断原有的连接
* help显示帮助信息
* restart重新启动Apache服务器
* start启动Apache服务器
* status显示服务器摘要的状态信息
* stop停止Apache服务器。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,74 @@
apropos
===
在 whatis 数据库中查找字符串
## 补充说明
**apropos命令** 在一些特定的包含系统命令的简短描述的数据库文件里查找关键字,然后把结果送到标准输出。 
如果你不知道完成某个特定任务所需要命令的名称可以使用一个关键字通过Linux apropos实用程序来搜索它。该实用程序可以搜索关键字并且显示所有包含匹配项的man页面的简短描述。另外使用man实用程序和-k关键字选项可以得到和用Linux apropos实用程序相同的结果实际上是相同的命令
### 语法
```
apropos [-dalhvV] -e|-[w|-r] [-s section] [-m system[,...]] [-M path] [-L locale] -C [file] keyword ...
```
### 选项
```
-d, --debug输出调试信息。
-v, --verbose输出详细的警告信息。
-r, -- regex将每个keyword作为正则表达式解释。这是默认行为。每个keyword将匹配手册页和描述。
-w, --wildcard将每个keyword作为shell样式的通配符解释。
-e, --exact每个keyword将精确匹配手册页名字和描述。
-a, --and只显示匹配所有keyword的手册页和描述。默认显示匹配任何keyword的项。
-l, --long不根据终端宽度缩减输出。
-s section, --section section只查找指定的手册section。
-m system[,...], --systems=system[,...]:用于查找其它操作系统的手册页。
-M path, --manpath=path指定从其它以冒号分隔的手册页层次查找。默认使用$MANPATH环境变量。这个选项覆盖$MANPATH的内容。
-L locale, --locale=localeapropos调用C函数setlocale来得到当前本地化信息包括$LC_MESSAGE和$LANG。使用该选项提供一个locale字符串来临时更改本地化信息。
-C file, --config-file=file使用这个用户配置文件而不是默认的~/.manpath。
-h, --help打印帮助信息并退出。
-V, --version打印版本信息并退出。
```
### 返回值
返回0表示成功1表示用法、语法或配置文件错误2表示操作错误16表示没有找到匹配的内容。
### 实例
```
[root@localhost ~]# man -k who
at.allow [at] (5) - determine who can submit jobs via at or batch
at.deny [at] (5) - determine who can submit jobs via at or batch
jwhois (1) - client for the whois service
jwhois (rpm) - Internet whois/nicname client.
Net::LDAP::Extension::whoami (3pm) - LDAP Who am I? Operation
w (1) - Show who is logged on and what they are doing
who (1p) - display who is on the system
who (1) - show who is logged on
whoami (1) - print effective userid
[root@localhost ~]# apropos who
at.allow [at] (5) - determine who can submit jobs via at or batch
at.deny [at] (5) - determine who can submit jobs via at or batch
jwhois (1) - client for the whois service
jwhois (rpm) - Internet whois/nicname client.
Net::LDAP::Extension::WhoAmI (3pm) - LDAP Who am I? Operation
w (1) - Show who is logged on and what they are doing
who (1p) - display who is on the system
who (1) - show who is logged on
whoami (1) - print effective userid
```
查找手册页名字和描述中包含emacs和vi的手册页
```
apropos -a emacs vi
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,92 @@
apt-get
===
Debian Linux发行版中的APT软件包管理工具
## 补充说明
**apt-get命令** 是Debian Linux发行版中的APT软件包管理工具。所有基于Debian的发行都使用这个包管理系统。deb包可以把一个应用的文件包在一起大体就如同Windows上的安装文件。
### 语法
```
apt-get(选项)(参数)
```
### 选项
```
-c指定配置文件。
```
### 参数
* 管理指令对APT软件包的管理操作
* 软件包:指定要操纵的软件包。
### 实例
使用apt-get命令的第一步就是引入必需的软件库Debian的软件库也就是所有Debian软件包的集合它们存在互联网上的一些公共站点上。把它们的地址加入apt-get就能搜索到我们想要的软件。/etc/apt/sources.list是存放这些地址列表的配置文件其格式如下
```
deb web或[ftp地址] [发行版名字] main/contrib/non-[free]
```
我们常用的Ubuntu就是一个基于Debian的发行我们使用apt-get命令获取这个列表以下是我整理的常用命令
在修改`/etc/apt/sources.list`或者`/etc/apt/preferences`之后运行该命令。此外您需要定期运行这一命令以确保您的软件包列表是最新的:
```
apt-get update
```
安装一个新软件包:
```
apt-get install packagename
```
卸载一个已安装的软件包(保留配置文件):
```
apt-get remove packagename
```
卸载一个已安装的软件包(删除配置文件):
```
apt-get purge remove packagename
```
会把已装或已卸的软件都备份在硬盘上,所以如果需要空间的话,可以让这个命令来删除你已经删掉的软件:
```
apt-get autoclean apt
```
这个命令会把安装的软件的备份也删除,不过这样不会影响软件的使用的:
```
apt-get clean
```
更新所有已安装的软件包:
```
apt-get upgrade
```
将系统升级到新版本:
```
apt-get dist-upgrade
```
定期运行这个命令来清除那些已经卸载的软件包的.deb文件。通过这种方式您可以释放大量的磁盘空间。如果您的需求十分迫切可以使用`apt-get clean`以释放更多空间。这个命令会将已安装软件包裹的.deb文件一并删除。大多数情况下您不会再用到这些.debs文件因此如果您为磁盘空间不足 而感到焦头烂额,这个办法也许值得一试:
```
apt-get autoclean
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,30 @@
apt-key
===
管理Debian Linux系统中的软件包密钥
## 补充说明
**apt-key命令** 用于管理Debian Linux系统中的软件包密钥。每个发布的deb包都是通过密钥认证的apt-key用来管理密钥。
### 语法
```
apt-key(参数)
```
### 参数
操作指令APT密钥操作指令。
### 实例
```
apt-key list #列出已保存在系统中key。
apt-key add keyname #把下载的key添加到本地trusted数据库中。
apt-key del keyname #从本地trusted数据库删除key。
apt-key update #更新本地trusted数据库删除过期没用的key。
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,28 @@
apt-sortpkgs
===
Debian Linux下对软件包索引文件进行排序的工具
## 补充说明
**apt-sortpkgs命令** 是Debian Linux下对软件包索引文件进行排序的简单工具。
### 语法
```
apt-sortpkgs(选项)(参数)
```
### 选项
```
-s使用源索引字段排序
-h显示帮助信息。
```
### 参数
文件指定要排序的包含debian包信息的索引文件。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,51 @@
aptitude
===
Debian Linux系统中软件包管理工具
## 补充说明
**aptitude命令** 与apt-get命令一样都是Debian Linux及其衍生系统中功能极其强大的包管理工具。与apt-get不同的是aptitude在处理依赖问题上更佳一些。举例来说aptitude在删除一个包时会同时删除本身所依赖的包。这样系统中不会残留无用的包整个系统更为干净。它通过文本操作菜单和命令两种方式管理软件包。
### 语法
```
aptitude(选项)(参数)
```
### 选项
```
-h显示帮助信息
-d仅下载软件包不执行安装操作
-P每一步操作都要求确认
-y所有问题都回答“yes”
-v显示附加信息
-u启动时下载新的软件包列表。
```
### 参数
操作命令:用户管理软件包的操作命令。
### 实例
以下是我总结的一些常用aptitude命令仅供参考
```
aptitude update #更新可用的包列表
aptitude upgrade #升级可用的包
aptitude dist-upgrade #将系统升级到新的发行版
aptitude install pkgname #安装包
aptitude remove pkgname #删除包
aptitude purge pkgname #删除包及其配置文件
aptitude search string #搜索包
aptitude show pkgname #显示包的详细信息
aptitude clean #删除下载的包文件
aptitude autoclean #仅删除过期的包文件
```
当然,你也可以在文本界面模式中使用 aptitude。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,104 @@
ar
===
建立或修改备存文件,或是从备存文件中抽取文件
## 补充说明
**ar命令** 是一个建立或修改备存文件或是从备存文件中抽取文件的工具ar可让您集合许多文件成为单一的备存文件。在备存文件中所有成员文件皆保有原来的属性与权限
### 语法
```
ab(选项)(参数)
Usage: ar [emulation options] [-]{dmpqrstx}[abcDfilMNoPsSTuvV] [--plugin <name>] [member-name] [count] archive-file file...
ar -M [<mri-]
```
### 选项
```
d - 从归档文件中删除文件
m[ab] - 在归档文件中移动文件
p - 打印在归档文件中找到的文件
q[f] - 将文件快速追加到归档文件中
r[ab][f][u] - 替换归档文件中已有的文件或加入新文件
s - act as ranlib
t - 显示归档文件的内容
x[o] - 从归档文件中分解文件
特定命令修饰符:
[a] - 将文件置于 [成员名] 之后
[b] - 将文件置于 [成员名] 之前 (于 [i] 相同)
[D] - use zero for timestamps and uids/gids
[U] - use actual timestamps and uids/gids (default)
[N] - use instance [count] of name
[f] - truncate inserted file names
[P] - 在匹配时使用完整的路径名
[o] - 保留原来的日期
[u] - 只替换比当前归档内容更新的文件
通用修饰符:
[c] - 不在必须创建库的时候给出警告
[s] - 创建归档索引 (cf. ranlib)
[S] - 不要创建符号表
[T]         - 做一个压缩档案
[v] - 输出较多信息
[V] - 显示版本号
@<file> - 从<file>读取选项
--target=BFDNAME - 将目标对象格式指定为BFDNAME
```
选项参数
```
--plugin <p> - load the specified plugin
```
ar支持的目标 elf64-x86-64 elf32-i386 elf32-x86-64 a.out-i386-linux pei-i386 pei-x86-64 elf64-l1om elf64-k1om elf64-little elf64-big elf32-little elf32-big plugin srec symbolsrec verilog tekhex binary ihex
### 实例
打包文件
```
[root@localhost ~]# ls //显示当前目录文件
a.c b.c d.c install.log qte
anaconda-ks.cfg c.c Desktop
[root@localhost ~]# ar rv one.bak a.c b.c //打包 a.c b.c文件
ar: 正在创建 one.bak
a - a.c
a - b.c
```
打包多个文件
```
[root@localhost ~]# ar rv two.bak *.c //打包以.c结尾的文件
ar: 正在创建 two.bak
a - a.c
a - b.c
a - c.c
a - d.c
```
显示打包文件的内容
```
[root@localhost ~]# ar t two.bak
a.c
b.c
c.c
d.c
```
删除打包文件的成员文件
```
[root@localhost ~]# ar d two.bak a.c b.c c.c
[root@localhost ~]# ar t two.bak
d.c
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,24 @@
arch
===
显示当前主机的硬件架构类型
## 补充说明
**arch命令** 用于显示当前主机的硬件架构类型。arch命令等同于`命令name -m`在当前的Linux系统下,arch命令输出结果有:i386、i486、i586、alpha、sparc、arm、m68k、mips、ppc、i686等
### 语法
```
arch
```
### 实例
```
arch
x86_64
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,22 @@
arj
===
用于创建和管理.arj压缩包
## 补充说明
**arj命令** 是“.arj”格式的压缩文件的管理器用于创建和管理“.arj”压缩包。
### 语法
```
arj(参数)
```
### 参数
* 操作指令:对“.arj”压缩包执行的操作指令
* 压缩包名称指定要操作的arj压缩包名称。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,46 @@
arp
===
显示和修改IP到MAC转换表
## 补充说明
**arp命令** 用于操作主机的arp缓冲区它可以显示arp缓冲区中的所有条目、删除指定的条目或者添加静态的ip地址与MAC地址对应关系。
### 语法
```
arp(选项)(参数)
```
### 选项
```
-a<主机>显示arp缓冲区的所有条目
-H<地址类型>指定arp指令使用的地址类型
-d<主机>从arp缓冲区中删除指定主机的arp条目
-D使用指定接口的硬件地址
-e以Linux的显示风格显示arp缓冲区中的条目
-i<接口>指定要操作arp缓冲区的网络接口
-s<主机><MAC>设置指定的主机的IP地址与MAC地址的静态映射
-n以数字方式显示arp缓冲区中的条目
-v显示详细的arp缓冲区条目包括缓冲区条目的统计信息
-f<文件>设置主机的IP地址与MAC地址的静态映射。
```
### 参数
主机查询arp缓冲区中指定主机的arp条目。
### 实例
```
[root@localhost ~]# arp -v
Address HWtype HWaddress Flags Mask Iface
192.168.0.134 ether 00:21:5E:C7:4D:88 C eth1
115.238.144.129 ether 38:22:D6:2F:B2:F1 C eth0
Entries: 2 Skipped: 0 Found: 2
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -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/ -->

@ -0,0 +1,50 @@
arping
===
通过发送ARP协议报文测试网络
## 补充说明
**arping命令** 是用于发送arp请求到一个相邻主机的工具arping使用arp数据包通过ping命令检查设备上的硬件地址。能够测试一个ip地址是否是在网络上已经被使用并能够获取更多设备信息。功能类似于ping。
### 语法
```
arping(选项)(参数)
```
### 选项
```
-b用于发送以太网广播帧FFFFFFFFFFFF。arping一开始使用广播地址在收到响应后就使用unicast地址。
-qquiet output不显示任何信息
-f表示在收到第一个响应报文后就退出
-w timeout设定一个超时时间单位是秒。如果到了指定时间arping还没到完全收到响应则退出
-c count表示发送指定数量的ARP请求数据包后就停止。如果指定了deadline选项则arping会等待相同数量的arp响应包直到超时为止
-s source设定arping发送的arp数据包中的SPA字段的值。如果为空则按下面处理如果是DAD模式冲突地址探测则设置为0.0.0.0如果是Unsolicited ARP模式Gratutious ARP则设置为目标地址否则从路由表得出
-I interface设置ping使用的网络接口。
```
### 参数
目的主机指定发送ARP报文的目的主机。
### 实例
```
[root@localhost ~]# arping www.baidu.com
ARPING 220.181.111.147 from 173.231.43.132 eth0
Unicast reply from 220.181.111.147 00:D0:03:[bc:48:00] 1.666ms
Unicast reply from 220.181.111.147 [00:D0:03:BC:48:00] 1.677ms
Unicast reply from 220.181.111.147 [00:D0:03:BC:48:00] 1.691ms
Unicast reply from 220.181.111.147 [00:D0:03:BC:48:00] 1.728ms
Unicast reply from 220.181.111.147 [00:D0:03:BC:48:00] 1.626ms
Unicast reply from 220.181.111.147 [00:D0:03:BC:48:00] 1.292ms
Unicast reply from 220.181.111.147 [00:D0:03:BC:48:00] 1.429ms
Unicast reply from 220.181.111.147 [00:D0:03:BC:48:00] 2.042ms
Sent 8 probes (1 broadcast(s))
Received 8 response(s)
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -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/ -->

@ -0,0 +1,26 @@
arpwatch
===
监听网络上ARP的记录
## 补充说明
**arpwatch命令** 用来监听网络上arp的记录。
### 语法
```
arpwatch(选项)
```
### 选项
```
-d启动排错模式
-f<记录文件>设置存储ARP记录的文件预设为/var/arpwatch/arp.dat
-i<接口>指定监听ARP的接口预设的接口为eth0
-r<记录文件>从指定的文件中读取ARP记录而不是从网络上监听。
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,41 @@
as
===
汇编语言编译器
## 补充说明
**as命令** GNU组织推出的一款汇编语言编译器它支持多种不同类型的处理器。
### 语法
```
as(选项)(参数)
```
### 选项
```
-ac忽略失败条件
-ad忽略调试指令
-ah包括高级源
-al包括装配
-am包括宏扩展
-an忽略形式处理
-as包括符号
=file设置列出文件的名字
--alternate以交互宏模式开始
-f跳过空白和注释预处理
-g产生调试信息
-J对于有符号溢出不显示警告信息
-L在符号表中保留本地符号
-o指定要生成的目标文件
--statistics打印汇编所用的最大空间和总时间。
```
### 参数
汇编文件:指定要汇编的源文件。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -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/ -->

@ -0,0 +1,100 @@
atop
===
监控Linux系统资源与进程的工具
## 补充说明
[非内部程序,需要安装]它以一定的频率记录系统的运行状态,所采集的数据包含系统资源(CPU、内存、磁盘和网络)使用情况和进程运行情况并能以日志文件的方式保存在磁盘中服务器出现问题后我们可获取相应的atop日志文件进行分析。atop是一款开源软件我们可以从这里获得其源码和rpm安装包。
## 语法
```
atop(选项)(参数)
```
## 说明
**ATOP列**:该列显示了主机名、信息采样日期和时间点
**PRC列**:该列显示进程整体运行情况
- sys、usr字段分别指示进程在内核态和用户态的运行时间
- #proc字段指示进程总数
- #zombie字段指示僵死进程的数量
- #exit字段指示atop采样周期期间退出的进程数量
**CPU列**该列显示CPU整体(即多核CPU作为一个整体CPU资源)的使用情况我们知道CPU可被用于执行进程、处理中断也可处于空闲状态(空闲状态分两种一种是活动进程等待磁盘IO导致CPU空闲另一种是完全空闲)
- sys、usr字段指示CPU被用于处理进程时进程在内核态、用户态所占CPU的时间比例
- irq字段指示CPU被用于处理中断的时间比例
- idle字段指示CPU处在完全空闲状态的时间比例
- wait字段指示CPU处在“进程等待磁盘IO导致CPU空闲”状态的时间比例
CPU列各个字段指示值相加结果为N00%其中N为cpu核数。
cpu列该列显示某一核cpu的使用情况各字段含义可参照CPU列各字段值相加结果为100%
**CPL列**该列显示CPU负载情况
- avg1、avg5和avg15字段过去1分钟、5分钟和15分钟内运行队列中的平均进程数量
- csw字段指示上下文交换次数
- intr字段指示中断发生次数
**MEM列**:该列指示内存的使用情况
- tot字段指示物理内存总量
- free字段指示空闲内存的大小
- cache字段指示用于页缓存的内存大小
- buff字段指示用于文件缓存的内存大小
- slab字段指示系统内核占用的内存大小
**SWP列**:该列指示交换空间的使用情况
- tot字段指示交换区总量
- free字段指示空闲交换空间大小
**PAG列**:该列指示虚拟内存分页情况
swin、swout字段换入和换出内存页数
**DSK列**该列指示磁盘使用情况每一个磁盘设备对应一列如果有sdb设备那么增多一列DSK信息
- sda字段磁盘设备标识
- busy字段磁盘忙时比例
- read、write字段读、写请求数量
**NET列**多列NET展示了网络状况包括传输层(TCP和UDP)、IP层以及各活动的网口信息
- XXXi 字段指示各层或活动网口收包数目
- XXXo 字段指示各层或活动网口发包数目
## atop日志
每个时间点采样页面组合起来就形成了一个atop日志文件我们可以使用"atop -r XXX"命令对日志文件进行查看。那以什么形式保存atop日志文件呢
对于atop日志文件的保存方式我们可以这样
- 每天保存一个atop日志文件该日志文件记录当天信息
- 日志文件以"atop_YYYYMMDD"的方式命名
- 设定日志失效期限,自动删除一段时间前的日志文件
其实atop开发者已经提供了以上日志保存方式相应的atop.daily脚本可以在源码目录下找到。在atop.daily脚本中我们可以通过修改INTERVAL变量改变atop信息采样周期(默认为10分钟);通过修改以下命令中的数值改变日志保存天数(默认为28天)
```
(sleep 3; find $LOGPATH -name 'atop_*' -mtime +28 -exec rm {} \; )&
```
最后我们修改cron文件每天凌晨执行atop.daily脚本
```
0 0 * * * root /etc/cron.daily/atop.daily
```
## 相关资料
- [官方手册](http://www.atoptool.nl/download/man_atop-1.pdf)
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -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/ -->

@ -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/ -->

@ -0,0 +1,951 @@
awk
===
文本和数据进行处理的编程语言
## 补充说明
**awk** 是一种编程语言用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能是linux/unix下的一个强大编程工具。它在命令行中使用但更多是作为脚本来使用。awk有很多内建的功能比如数组、函数等这是它和C语言的相同之处灵活性是awk最大的优势。
## awk命令格式和选项
**语法形式**
```
awk [options] 'script' var=value file(s)
awk [options] -f scriptfile var=value file(s)
```
**常用命令选项**
* **-F fs   ** fs指定输入分隔符fs可以是字符串或正则表达式如-F:
* **-v var=value   ** 赋值一个用户定义变量将外部变量传递给awk
* **-f scripfile  ** 从脚本文件中读取awk命令
* **-m[fr] val   ** 对val值设置内在限制-mf选项限制分配给val的最大块数目-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能在标准awk中不适用。
## awk模式和操作
awk脚本是由模式和操作组成的。
### 模式
模式可以是以下任意一个:
* /正则表达式/:使用通配符的扩展集。
* 关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试。
* 模式匹配表达式:用运算符`~`(匹配)和`!~`(不匹配)。
* BEGIN语句块、pattern语句块、END语句块参见awk的工作原理
### 操作
操作由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内,主要部分是:
* 变量或数组赋值
* 输出命令
* 内置函数
* 控制流语句
## awk脚本基本结构
```
awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file
```
一个awk脚本通常由BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成这三个部分是可选的。任意一个部分都可以不出现在脚本中脚本通常是被 **单引号** 或 **双引号** 中,例如:
```
awk 'BEGIN{ i=0 } { i++ } END{ print i }' filename
awk "BEGIN{ i=0 } { i++ } END{ print i }" filename
```
### awk的工作原理
```
awk 'BEGIN{ commands } pattern{ commands } END{ commands }'
```
* 第一步:执行`BEGIN{ commands }`语句块中的语句;
* 第二步:从文件或标准输入(stdin)读取一行,然后执行`pattern{ commands }`语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。
* 第三步:当读至输入流末尾时,执行`END{ commands }`语句块。
**BEGIN语句块** 在awk开始从输入流中读取行 **之前** 被执行这是一个可选的语句块比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中。
**END语句块** 在awk从输入流中读取完所有的行 **之后** 即被执行比如打印所有行的分析结果这类信息汇总都是在END语句块中完成它也是一个可选语句块。
**pattern语句块** 中的通用命令是最重要的部分它也是可选的。如果没有提供pattern语句块则默认执行`{ print }`即打印每一个读取到的行awk读取的每一行都会执行该语句块。
**示例**
```
echo -e "A line 1nA line 2" | awk 'BEGIN{ print "Start" } { print } END{ print "End" }'
Start
A line 1
A line 2
End
```
当使用不带参数的`print`时,它就打印当前行,当`print`的参数是以逗号进行分隔时打印时则以空格作为定界符。在awk的print语句块中双引号是被当作拼接符使用例如
```
echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1,var2,var3; }'
v1 v2 v3
```
双引号拼接使用:
```
echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1"="var2"="var3; }'
v1=v2=v3
```
{ }类似一个循环体会对文件中的每一行进行迭代通常变量初始化语句i=0以及打印文件头部的语句放入BEGIN语句块中将打印的结果等语句放在END语句块中。
## awk内置变量预定义变量
说明:[A][N][P][G]表示第一个支持变量的工具,[A]=awk、[N]=nawk、[P]=POSIXawk、[G]=gawk
```
**$n** 当前记录的第n个字段比如n为1表示第一个字段n为2表示第二个字段。
**$0** 这个变量包含执行过程中当前行的文本内容。
[N] **ARGC** 命令行参数的数目。
[G] **ARGIND** 命令行中当前文件的位置从0开始算
[N] **ARGV** 包含命令行参数的数组。
[G] **CONVFMT** 数字转换格式(默认值为%.6g)。
[P] **ENVIRON** 环境变量关联数组。
[N] **ERRNO** 最后一个系统错误的描述。
[G] **FIELDWIDTHS** 字段宽度列表(用空格键分隔)。
[A] **FILENAME** 当前输入文件的名。
[P] **FNR** 同NR但相对于当前文件。
[A] **FS** 字段分隔符(默认是任何空格)。
[G] **IGNORECASE** 如果为真,则进行忽略大小写的匹配。
[A] **NF** 表示字段数,在执行过程中对应于当前的字段数。
[A] **NR** 表示记录数,在执行过程中对应于当前的行号。
[A] **OFMT** 数字的输出格式(默认值是%.6g)。
[A] **OFS** 输出字段分隔符(默认值是一个空格)。
[A] **ORS** 输出记录分隔符(默认值是一个换行符)。
[A] **RS** 记录分隔符(默认是一个换行符)。
[N] **RSTART** 由match函数所匹配的字符串的第一个位置。
[N] **RLENGTH** 由match函数所匹配的字符串的长度。
[N] **SUBSEP** 数组下标分隔符默认值是34
```
**示例**
```
echo -e "line1 f2 f3\nline2 f4 f5\nline3 f6 f7" | awk '{print "Line No:"NR", No of fields:"NF, "$0="$0, "$1="$1, "$2="$2, "$3="$3}'
Line No:1, No of fields:3 $0=line1 f2 f3 $1=line1 $2=f2 $3=f3
Line No:2, No of fields:3 $0=line2 f4 f5 $1=line2 $2=f4 $3=f5
Line No:3, No of fields:3 $0=line3 f6 f7 $1=line3 $2=f6 $3=f7
```
使用`print $NF`可以打印出一行中的最后一个字段,使用`$(NF-1)`则是打印倒数第二个字段,其他以此类推:
```
echo -e "line1 f2 f3n line2 f4 f5" | awk '{print $NF}'
f3
f5
```
```
echo -e "line1 f2 f3n line2 f4 f5" | awk '{print $(NF-1)}'
f2
f4
```
打印每一行的第二和第三个字段:
```
awk '{ print $2,$3 }' filename
```
统计文件中的行数:
```
awk 'END{ print NR }' filename
```
以上命令只使用了END语句块在读入每一行的时awk会将NR更新为对应的行号当到达最后一行NR的值就是最后一行的行号所以END语句块中的NR就是文件的行数。
一个每一行中第一个字段值累加的例子:
```
seq 5 | awk 'BEGIN{ sum=0; print "总和:" } { print $1"+"; sum+=$1 } END{ print "等于"; print sum }'
总和:
1+
2+
3+
4+
5+
等于
15
```
## 将外部变量值传递给awk
借助 **`-v`选项** 可以将外部值并非来自stdin传递给awk
```
VAR=10000
echo | awk -v VARIABLE=$VAR '{ print VARIABLE }'
```
另一种传递外部变量方法:
```
var1="aaa"
var2="bbb"
echo | awk '{ print v1,v2 }' v1=$var1 v2=$var2
```
当输入来自于文件时使用:
```
awk '{ print v1,v2 }' v1=$var1 v2=$var2 filename
```
以上方法中变量之间用空格分隔作为awk的命令行参数跟随在BEGIN、{}和END语句块之后。
## 查找进程pid
```
netstat -antup | grep 7770 | awk '{ print $NF NR}' | awk '{ print $1}'
```
## awk运算与判断
作为一种程序设计语言所应具有的特点之一awk支持多种运算这些运算与C语言提供的基本相同。awk还提供了一系列内置的运算函数如log、sqr、cos、sin等和一些用于对字符串进行操作运算的函数如length、substr等等。这些函数的引用大大的提高了awk的运算功能。作为对条件转移指令的一部分关系判断是每种程序设计语言都具备的功能awk也不例外awk中允许进行多种测试作为样式匹配还提供了模式匹配表达式~(匹配)和!~不匹配。作为对测试的一种扩充awk也支持用逻辑运算符。
### 算术运算符
| 运算符 | 描述 |
| ----- | ---- |
| + - | 加,减 |
| * / & | 乘,除与求余 |
| + - ! | 一元加,减和逻辑非 |
| ^ *** | 求幂 |
| ++ -- | 增加或减少,作为前缀或后缀 |
例:
```
awk 'BEGIN{a="b";print a++,++a;}'
0 2
```
注意所有用作算术运算符进行操作操作数自动转为数值所有非数值都变为0
### 赋值运算符
| 运算符 | 描述 |
| ----- | ---- |
| = += -= *= /= %= ^= **= | 赋值语句 |
例:
```
a+=5; 等价于a=a+5; 其它同类
```
### 逻辑运算符
| 运算符 | 描述 |
| ----- | ---- |
| `\|\|` | 逻辑或 |
| && | 逻辑与 |
例:
```
awk 'BEGIN{a=1;b=2;print (a>5 && b<=2),(a>5 || b<=2);}'
0 1
```
### 正则运算符
| 运算符 | 描述 |
| ----- | ---- |
| ~ !~ | 匹配正则表达式和不匹配正则表达式 |
例:
```
awk 'BEGIN{a="100testa";if(a ~ /^100*/){print "ok";}}'
ok
```
### 关系运算符
| 运算符 | 描述 |
| ----- | ---- |
| < <= > >= != == | 关系运算符 |
例:
```
awk 'BEGIN{a=11;if(a >= 9){print "ok";}}'
ok
```
注意:> < 可以作为字符串比较也可以用作数值比较关键看操作数如果是字符串就会转换为字符串比较。两个都为数字才转为数值比较。字符串比较按照ASCII码顺序比较。
### 其它运算符
| 运算符 | 描述 |
| ----- | ---- |
| $ | 字段引用 |
| 空格 | 字符串连接符 |
| ?: | C条件表达式 |
| in | 数组中是否存在某键值 |
例:
```
awk 'BEGIN{a="b";print a=="b"?"ok":"err";}'
ok
```
```
awk 'BEGIN{a="b";arr[0]="b";arr[1]="c";print (a in arr);}'
0
```
```
awk 'BEGIN{a="b";arr[0]="b";arr["b"]="c";print (a in arr);}'
1
```
### 运算级优先级表
!级别越高越优先
级别越高越优先
## awk高级输入输出
### 读取下一条记录
awk中`next`语句使用在循环逐行匹配如果遇到next就会跳过当前行直接忽略下面语句。而进行下一行匹配。next语句一般用于多行合并
```
cat text.txt
a
b
c
d
e
awk 'NR%2==1{next}{print NR,$0;}' text.txt
2 b
4 d
```
当记录行号除以2余1就跳过当前行。下面的`print NR,$0`也不会执行。下一行开始,程序有开始判断`NR%2`值。这个时候记录行号是`2` ,就会执行下面语句块:`'print NR,$0'`
分析发现需要将包含有“web”行进行跳过然后需要将内容与下面行合并为一行
```
cat text.txt
web01[192.168.2.100]
httpd ok
tomcat ok
sendmail ok
web02[192.168.2.101]
httpd ok
postfix ok
web03[192.168.2.102]
mysqld ok
httpd ok
0
awk '/^web/{T=$0;next;}{print T":t"$0;}' test.txt
web01[192.168.2.100]: httpd ok
web01[192.168.2.100]: tomcat ok
web01[192.168.2.100]: sendmail ok
web02[192.168.2.101]: httpd ok
web02[192.168.2.101]: postfix ok
web03[192.168.2.102]: mysqld ok
web03[192.168.2.102]: httpd ok
```
### 简单地读取一条记录
`awk getline`用法:输出重定向需用到`getline函数`。getline从标准输入、管道或者当前正在处理的文件之外的其他输入文件获得输入。它负责从输入获得下一行的内容并给NF,NR和FNR等内建变量赋值。如果得到一条记录getline函数返回1如果到达文件的末尾就返回0如果出现错误例如打开文件失败就返回-1。
getline语法getline var变量var包含了特定行的内容。
awk getline从整体上来说用法说明
* **当其左右无重定向符`|`或`<`时:** getline作用于当前文件读入当前文件的第一行给其后跟的变量`var`或`$0`无变量应该注意到由于awk在处理getline之前已经读入了一行所以getline得到的返回结果是隔行的。
* **当其左右有重定向符`|`或`<`时:** getline则作用于定向输入文件由于该文件是刚打开并没有被awk读入一行只是getline读入那么getline返回的是该文件的第一行而不是隔行。
**示例:**
执行linux的`date`命令,并通过管道输出给`getline`然后再把输出赋值给自定义变量out并打印它
```
awk 'BEGIN{ "date" | getline out; print out }' test
```
执行shell的date命令并通过管道输出给getline然后getline从管道中读取并将输入赋值给outsplit函数把变量out转化成数组mon然后打印数组mon的第二个元素
```
awk 'BEGIN{ "date" | getline out; split(out,mon); print mon[2] }' test
```
命令ls的输出传递给geline作为输入循环使getline从ls的输出中读取一行并把它打印到屏幕。这里没有输入文件因为BEGIN块在打开输入文件前执行所以可以忽略输入文件。
```
awk 'BEGIN{ while( "ls" | getline) print }'
```
### 关闭文件
awk中允许在程序中关闭一个输入或输出文件方法是使用awk的close语句。
```
close("filename")
```
filename可以是getline打开的文件也可以是stdin包含文件名的变量或者getline使用的确切命令。或一个输出文件可以是stdout包含文件名的变量或使用管道的确切命令。
### 输出到一个文件
awk中允许用如下方式将结果输出到一个文件
```
echo | awk '{printf("hello word!n") > "datafile"}'
echo | awk '{printf("hello word!n") >> "datafile"}'
```
## 设置字段定界符
默认的字段定界符是空格,可以使用`-F "定界符"` 明确指定一个定界符:
```
awk -F: '{ print $NF }' /etc/passwd
awk 'BEGIN{ FS=":" } { print $NF }' /etc/passwd
```
在`BEGIN语句块`中则可以用`OFS=“定界符”`设置输出字段的定界符。
## 流程控制语句
在linux awk的while、do-while和for语句中允许使用break,continue语句来控制流程走向也允许使用exit这样的语句来退出。break中断当前正在执行的循环并跳到循环外执行下一条语句。if 是流程选择用法。awk中流程控制语句语法结构与c语言类型。有了这些语句其实很多shell程序都可以交给awk而且性能是非常快的。下面是各个语句用法。
### 条件判断语句
```
if(表达式)
语句1
else
语句2
```
格式中语句1可以是多个语句为了方便判断和阅读最好将多个语句用{}括起来。awk分枝结构允许嵌套其格式为
```
if(表达式)
{语句1}
else if(表达式)
{语句2}
else
{语句3}
```
示例:
```
awk 'BEGIN{
test=100;
if(test>90){
print "very good";
}
else if(test>60){
print "good";
}
else{
print "no pass";
}
}'
very good
```
每条命令语句后面可以用`;` **分号** 结尾。
### 循环语句
#### while语句
```
while(表达式)
{语句}
```
示例:
```
awk 'BEGIN{
test=100;
total=0;
while(i<=test){
total+=i;
i++;
}
print total;
}'
5050
```
#### for循环
for循环有两种格式
格式1
```
for(变量 in 数组)
{语句}
```
示例:
```
awk 'BEGIN{
for(k in ENVIRON){
print k"="ENVIRON[k];
}
}'
TERM=linux
G_BROKEN_FILENAMES=1
SHLVL=1
pwd=/root/text
...
logname=root
HOME=/root
SSH_CLIENT=192.168.1.21 53087 22
```
ENVIRON是awk常量是子典型数组。
格式2
```
for(变量;条件;表达式)
{语句}
```
示例:
```
awk 'BEGIN{
total=0;
for(i=0;i<=100;i++){
total+=i;
}
print total;
}'
5050
```
#### do循环
```
do
{语句} while(条件)
```
例子:
```
awk 'BEGIN{
total=0;
i=0;
do {total+=i;i++;} while(i<=100)
print total;
}'
5050
```
### 其他语句
* **break** 当 break 语句用于 while 或 for 语句时,导致退出程序循环。
* **continue** 当 continue 语句用于 while 或 for 语句时,使程序循环移动到下一个迭代。
* **next** 能能够导致读入下一个输入行,并返回到脚本的顶部。这可以避免对当前输入行执行其他的操作过程。
* **exit** 语句使主输入循环退出并将控制转移到END,如果END存在的话。如果没有定义END规则或在END中应用exit语句则终止脚本的执行。
## 数组应用
数组是awk的灵魂处理文本中最不能少的就是它的数组处理。因为数组索引下标可以是数字和字符串在awk中数组叫做关联数组(associative arrays)。awk 中的数组不必提前声明也不必声明大小。数组元素用0或空字符串来初始化这根据上下文而定。
### 数组的定义
数字做数组索引(下标):
```
Array[1]="sun"
Array[2]="kai"
```
字符串做数组索引(下标):
```
Array["first"]="www"
Array"[last"]="name"
Array["birth"]="1987"
```
使用中`print Array[1]`会打印出sun使用`print Array[2]`会打印出kai使用`print["birth"]`会得到1987。
**读取数组的值**
```
{ for(item in array) {print array[item]}; } #输出的顺序是随机的
{ for(i=1;i<=len;i++) {print array[i]}; } #Len是数组的长度
```
### 数组相关函数
**得到数组长度:**
```
awk 'BEGIN{info="it is a test";lens=split(info,tA," ");print length(tA),lens;}'
4 4
```
length返回字符串以及数组长度split进行分割字符串为数组也会返回分割得到数组长度。
```
awk 'BEGIN{info="it is a test";split(info,tA," ");print asort(tA);}'
4
```
asort对数组进行排序返回数组长度。
**输出数组内容(无序,有序输出):**
```
awk 'BEGIN{info="it is a test";split(info,tA," ");for(k in tA){print k,tA[k];}}'
4 test
1 it
2 is
3 a
```
`for…in`输出,因为数组是关联数组,默认是无序的。所以通过`for…in`得到是无序的数组。如果需要得到有序数组,需要通过下标获得。
```
awk 'BEGIN{info="it is a test";tlen=split(info,tA," ");for(k=1;k<=tlen;k++){print k,tA[k];}}'
1 it
2 is
3 a
4 test
```
注意数组下标是从1开始与C数组不一样。
**判断键值存在以及删除键值:**
```
#错误的判断方法:
awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";if(tB["c"]!="1"){print "no found";};for(k in tB){print k,tB[k];}}'
no found
a a1
b b1
c
```
以上出现奇怪问题,`tB[“c”]`没有定义但是循环时候发现已经存在该键值它的值为空这里需要注意awk数组是关联数组只要通过数组引用它的key就会自动创建改序列。
```bash
#正确判断方法:
awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";if( "c" in tB){print "ok";};for(k in tB){print k,tB[k];}}'
a a1
b b1
```
`if(key in array)`通过这种方法判断数组中是否包含`key`键值。
```bash
#删除键值:
awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";delete tB["a"];for(k in tB){print k,tB[k];}}'
b b1
```
`delete array[key]`可以删除,对应数组`key`的,序列值。
### 二维、多维数组使用
awk的多维数组在本质上是一维数组更确切一点awk在存储上并不支持多维数组。awk提供了逻辑上模拟二维数组的访问方式。例如`array[2,4]=1`这样的访问是允许的。awk使用一个特殊的字符串`SUBSEP(<28>34)`作为分割字段在上面的例子中关联数组array存储的键值实际上是2<E698AF>344。
类似一维数组的成员测试,多维数组可以使用`if ( (i,j) in array)`这样的语法,但是下标必须放置在圆括号中。类似一维数组的循环访问,多维数组使用`for ( item in array )`这样的语法遍历数组。与一维数组不同的是,多维数组必须使用`split()`函数来访问单独的下标分量。
```bash
awk 'BEGIN{
for(i=1;i<=9;i++){
for(j=1;j<=9;j++){
tarr[i,j]=i*j; print i,"*",j,"=",tarr[i,j];
}
}
}'
1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
1 * 4 = 4
1 * 5 = 5
1 * 6 = 6
...
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81
```
可以通过`array[k,k2]`引用获得数组内容。
另一种方法:
```bash
awk 'BEGIN{
for(i=1;i<=9;i++){
for(j=1;j<=9;j++){
tarr[i,j]=i*j;
}
}
for(m in tarr){
split(m,tarr2,SUBSEP); print tarr2[1],"*",tarr2[2],"=",tarr[m];
}
}'
```
## 内置函数
awk内置函数主要分以下3种类似算数函数、字符串函数、其它一般函数、时间函数。
### 算术函数
| 格式 | 描述 |
| ---- | ---- |
| atan2( y, x ) | 返回 y/x 的反正切。 |
| cos( x ) | 返回 x 的余弦x 是弧度。 |
| sin( x ) | 返回 x 的正弦x 是弧度。 |
| exp( x ) | 返回 x 幂函数。 |
| log( x ) | 返回 x 的自然对数。 |
| sqrt( x ) | 返回 x 平方根。 |
| int( x ) | 返回 x 的截断至整数的值。 |
| rand( ) | 返回任意数字 n其中 0 <= n < 1 |
| srand( [expr] ) | 将 rand 函数的种子值设置为 Expr 参数的值,或如果省略 Expr 参数则使用某天的时间。返回先前的种子值。 |
举例说明:
```
awk 'BEGIN{OFMT="%.3f";fs=sin(1);fe=exp(10);fl=log(10);fi=int(3.1415);print fs,fe,fl,fi;}'
0.841 22026.466 2.303 3
```
OFMT 设置输出数据格式是保留3位小数。
获得随机数:
```
awk 'BEGIN{srand();fr=int(100*rand());print fr;}'
78
awk 'BEGIN{srand();fr=int(100*rand());print fr;}'
31
awk 'BEGIN{srand();fr=int(100*rand());print fr;}'
41
```
### 字符串函数
| 格式 | 描述 |
| ---- | ---- |
| gsub( Ere, Repl, [ In ] ) | 除了正则表达式所有具体值被替代这点,它和 sub 函数完全一样地执行。 |
| sub( Ere, Repl, [ In ] ) | 用 Repl 参数指定的字符串替换 In 参数指定的字符串中的由 Ere 参数指定的扩展正则表达式的第一个具体值。sub 函数返回替换的数量。出现在 Repl 参数指定的字符串中的 &(和符号)由 In 参数指定的与 Ere 参数的指定的扩展正则表达式匹配的字符串替换。如果未指定 In 参数,缺省值是整个记录($0 记录变量)。 |
| index( String1, String2 ) | 在由 String1 参数指定的字符串(其中有出现 String2 指定的参数)中,返回位置,从 1 开始编号。如果 String2 参数不在 String1 参数中出现,则返回 0。 |
| length [(String)] | 返回 String 参数指定的字符串的长度(字符形式)。如果未给出 String 参数,则返回整个记录的长度($0 记录变量)。 |
| blength [(String)] | 返回 String 参数指定的字符串的长度(以字节为单位)。如果未给出 String 参数,则返回整个记录的长度($0 记录变量)。 |
| substr( String, M, [ N ] ) | 返回具有 N 参数指定的字符数量子串。子串从 String 参数指定的字符串取得,其字符以 M 参数指定的位置开始。M 参数指定为将 String 参数中的第一个字符作为编号 1。如果未指定 N 参数,则子串的长度将是 M 参数指定的位置到 String 参数的末尾 的长度。 |
| match( String, Ere ) | 在 String 参数指定的字符串Ere 参数指定的扩展正则表达式出现在其中)中返回位置(字符形式),从 1 开始编号,或如果 Ere 参数不出现,则返回 0。RSTART 特殊变量设置为返回值。RLENGTH 特殊变量设置为匹配的字符串的长度,或如果未找到任何匹配,则设置为 -1负一。|
| split( String, A, [Ere] ) | 将 String 参数指定的参数分割为数组元素 A[1], A[2], . . ., A[n],并返回 n 变量的值。此分隔可以通过 Ere 参数指定的扩展正则表达式进行或用当前字段分隔符FS 特殊变量)来进行(如果没有给出 Ere 参数)。除非上下文指明特定的元素还应具有一个数字值,否则 A 数组中的元素用字符串值来创建。 |
| tolower( String ) | 返回 String 参数指定的字符串,字符串中每个大写字符将更改为小写。大写和小写的映射由当前语言环境的 LC_CTYPE 范畴定义。 |
| toupper( String ) | 返回 String 参数指定的字符串,字符串中每个小写字符将更改为大写。大写和小写的映射由当前语言环境的 LC_CTYPE 范畴定义。 |
| sprintf(Format, Expr, Expr, . . . ) | 根据 Format 参数指定的 printf 子例程格式字符串来格式化 Expr 参数指定的表达式并返回最后生成的字符串。 |
Ere都可以是正则表达式。
**gsub,sub使用**
```
awk 'BEGIN{info="this is a test2010test!";gsub(/[0-9]+/,"!",info);print info}'
this is a test!test!
```
在 info中查找满足正则表达式`/[0-9]+/` 用`””`替换并且替换后的值赋值给info 未给info值默认是`$0`
**查找字符串index使用**
```
awk 'BEGIN{info="this is a test2010test!";print index(info,"test")?"ok":"no found";}'
ok
```
未找到返回0
**正则表达式匹配查找(match使用**
```
awk 'BEGIN{info="this is a test2010test!";print match(info,/[0-9]+/)?"ok":"no found";}'
ok
```
**截取字符串(substr使用**
```
[wangsl@centos5 ~]$ awk 'BEGIN{info="this is a test2010test!";print substr(info,4,10);}'
s is a tes
```
从第 4个 字符开始截取10个长度字符串
**字符串分割split使用**
```
awk 'BEGIN{info="this is a test";split(info,tA," ");print length(tA);for(k in tA){print k,tA[k];}}'
4
4 test
1 this
2 is
3 a
```
分割info动态创建数组tA这里比较有意思`awk for …in`循环,是一个无序的循环。 并不是从数组下标1…n ,因此使用时候需要注意。
**格式化字符串输出sprintf使用**
格式化字符串格式:
其中格式化字符串包括两部分内容:一部分是正常字符,这些字符将按原样输出; 另一部分是格式化规定字符,以`"%"`开始,后跟一个或几个规定字符,用来确定输出内容格式。
| 格式 | 描述 | 格式 | 描述 |
| ---- | ---- | ---- | ---- |
| %d | 十进制有符号整数 | %u | 十进制无符号整数 |
| %f | 浮点数 | %s | 字符串 |
| %c | 单个字符 | %p | 指针的值 |
| %e | 指数形式的浮点数 | %x | %X 无符号以十六进制表示的整数 |
| %o | 无符号以八进制表示的整数 | %g | 自动选择合适的表示法 |
```
awk 'BEGIN{n1=124.113;n2=-1.224;n3=1.2345; printf("%.2f,%.2u,%.2g,%X,%on",n1,n2,n3,n1,n1);}'
124.11,18446744073709551615,1.2,7C,174
```
### 一般函数
| 格式 | 描述 |
| ---- | ---- |
| close( Expression ) | 用同一个带字符串值的 Expression 参数来关闭由 print 或 printf 语句打开的或调用 getline 函数打开的文件或管道。如果文件或管道成功关闭,则返回 0其它情况下返回非零值。如果打算写一个文件并稍后在同一个程序中读取文件则 close 语句是必需的。 |
| system(command ) | 执行 Command 参数指定的命令,并返回退出状态。等同于 system 子例程。|
| Expression `\|` getline [ Variable ] | 从来自 Expression 参数指定的命令的输出中通过管道传送的流中读取一个输入记录,并将该记录的值指定给 Variable 参数指定的变量。如果当前未打开将 Expression 参数的值作为其命令名称的流,则创建流。创建的流等同于调用 popen 子例程,此时 Command 参数取 Expression 参数的值且 Mode 参数设置为一个是 r 的值。只要流保留打开且 Expression 参数求得同一个字符串,则对 getline 函数的每次后续调用读取另一个记录。如果未指定 Variable 参数,则 $0 记录变量和 NF 特殊变量设置为从流读取的记录。|
| getline [ Variable ] < Expression | Expression Variable Expression getline Variable $0 NF |
| getline [ Variable ] | 将 Variable 参数指定的变量设置为从当前输入文件读取的下一个输入记录。如果未指定 Variable 参数,则 $0 记录变量设置为该记录的值,还将设置 NF、NR 和 FNR 特殊变量。 |
**打开外部文件close用法**
```
awk 'BEGIN{while("cat /etc/passwd"|getline){print $0;};close("/etc/passwd");}'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
```
**逐行读取外部文件(getline使用方法**
```
awk 'BEGIN{while(getline < "/etc/passwd"){print $0;};close("/etc/passwd");}'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
```
```
awk 'BEGIN{print "Enter your name:";getline name;print name;}'
Enter your name:
chengmo
chengmo
```
**调用外部应用程序(system使用方法**
```
awk 'BEGIN{b=system("ls -al");print b;}'
total 42092
drwxr-xr-x 14 chengmo chengmo 4096 09-30 17:47 .
drwxr-xr-x 95 root root 4096 10-08 14:01 ..
```
b返回值是执行结果。
### 时间函数
| 格式 | 描述 |
| ---- | ---- |
| 函数名 | 说明 |
| mktime( YYYY MM dd HH MM ss[ DST]) | 生成时间格式 |
| strftime([format [, timestamp]]) | 格式化时间输出,将时间戳转为时间字符串具体格式,见下表。 |
| systime() | 得到时间戳返回从1970年1月1日开始到当前时间(不计闰年)的整秒数 |
**建指定时间(mktime使用**
```
awk 'BEGIN{tstamp=mktime("2001 01 01 12 12 12");print strftime("%c",tstamp);}'
2001年01月01日 星期一 12时12分12秒
```
```
awk 'BEGIN{tstamp1=mktime("2001 01 01 12 12 12");tstamp2=mktime("2001 02 01 0 0 0");print tstamp2-tstamp1;}'
2634468
```
求2个时间段中间时间差介绍了strftime使用方法
```
awk 'BEGIN{tstamp1=mktime("2001 01 01 12 12 12");tstamp2=systime();print tstamp2-tstamp1;}'
308201392
```
**strftime日期和时间格式说明符**
| 格式 | 描述 |
| ---- | ---- |
| %a | 星期几的缩写(Sun) |
| %A | 星期几的完整写法(Sunday) |
| %b | 月名的缩写(Oct) |
| %B | 月名的完整写法(October) |
| %c | 本地日期和时间 |
| %d | 十进制日期 |
| %D | 日期 08/20/99 |
| %e | 日期,如果只有一位会补上一个空格 |
| %H | 用十进制表示24小时格式的小时 |
| %I | 用十进制表示12小时格式的小时 |
| %j | 从1月1日起一年中的第几天 |
| %m | 十进制表示的月份 |
| %M | 十进制表示的分钟 |
| %p | 12小时表示法(AM/PM) |
| %S | 十进制表示的秒 |
| %U | 十进制表示的一年中的第几个星期(星期天作为一个星期的开始) |
| %w | 十进制表示的星期几(星期天是0) |
| %W | 十进制表示的一年中的第几个星期(星期一作为一个星期的开始) |
| %x | 重新设置本地日期(08/20/99) |
| %X | 重新设置本地时间(12:00:00) |
| %y | 两位数字表示的年(99) |
| %Y | 当前月份 |
| %% | 百分号(%) |
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,70 @@
axel
===
多线程下载工具
## 补充说明
**axel** 是Linux下一个不错的HTTP/ftp高速下载工具。支持多线程下载、断点续传且可以从多个地址或者从一个地址的多个连接来下载同一个文件。适合网速不给力时多线程下载提高下载速度。比如在国内VPS或服务器上下载lnmp一键安装包用Axel就比wget快。
### 安装
CentOS安装Axel
目前yum源上没有Axel我们可以到http://pkgs.repoforge.org/axel/下载rpm包安装。
32位CentOS执行下面命令
```
wget -c http://pkgs.repoforge.org/axel/axel-2.4-1.el5.rf.i386.rpm
rpm -ivh axel-2.4-1.el5.rf.i386.rpm
```
64位CentOS执行下面命令
```
wget -c http://pkgs.repoforge.org/axel/axel-2.4-1.el5.rf.x86_64.rpm
rpm -ivh axel-2.4-1.el5.rf.x86_64.rpm
```
Debian/Ubuntu安装Axel
```
apt-get install axel
```
### 语法
```
axel [options] url1 [url2] [url...]
```
### 选项
```
--max-speed=x , -s x 最高速度x
--num-connections=x , -n x 连接数x
--output=f , -o f 下载为本地文件f
--search[=x] , -S [x] 搜索镜像
--header=x , -H x 添加头文件字符串x指定 HTTP header
--user-agent=x , -U x 设置用户代理(指定 HTTP user agent
--no-proxy -N 不使用代理服务器
--quiet -q 静默模式
--verbose -v 更多状态信息
--alternate -a Alternate progress indicator
--help -h 帮助
--version -V 版本信息
```
### 实例
如下载lnmp安装包指定10个线程存到/tmp/
```
axel -n 10 -o /tmp/ http://www.jsdig.com/lnmp.tar.gz
```
如果下载过程中下载中断可以再执行下载命令即可恢复上次的下载进度。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,85 @@
badblocks
===
查找磁盘中损坏的区块
## 补充说明
**badblock命令** 用于查找磁盘中损坏的区块。 硬盘是一个损耗设备当使用一段时间后可能会出现坏道等物理故障。电脑硬盘出现坏道后如果不及时更换或进行技术处理坏道就会越来越多并会造成频繁死机和数据丢失。最好的处理方式是更换磁盘但在临时的情况下应及时屏蔽坏道部分的扇区不要触动它们。badblocks就是一个很好的检查坏道位置的工具。
### 语法
```
badblock(选项)(参数)
```
### 选项
```
-b<区块大小>:指定磁盘的区块大小,单位为字节;
-o<输出文件>:将检查的结果写入指定的输出文件;
-s在检查时显示进度
-v执行时显示详细的信息
-w在检查时执行写入测试。
```
### 参数
* 磁盘装置:指定要检查的磁盘装置;
* 磁盘区块数:指定磁盘装置的区块总数;
* 启始区块:指定要从哪个区块开始检查。
### 实例
badblocks以4096的一个block每一个block检查16次将结果输出到“hda-badblocks-list”文件里。
```
badblocks -b 4096 -c 16 /dev/hda1 -o hda-badblocks-list
```
hda-badblocks-list是个文本文件内容如下
```
cat hda-badblocks-list
51249
51250
51251
51253
51254
……
61245
……
```
可以针对可疑的区块多做几次操作。下面badblocks以4096字节为一个“block”,每一个“block”检查1次, 将结果输出到“hda-badblocks-list.1”文件中由第51000 block开始到63000 block结束。
```
badblocks -b 4096 -c 1 /dev/hda1 -o hda-badblocks-list.1 63000 51000
```
这次花费的时间比较短硬盘在指定的情况下在很短的时间就产生“嘎嘎嘎嘎”的响声。由于检查条件的不同其输出的结果也不完全是相同的。重复几次同样的操作因条件多少都有些不同所以结果也有所不同。进行多次操作后直到产生最后的hda-badblock-list.final文件。
### 其他
**1、fsck使用badblocks的信息**
badblocks只会在日志文件中标记出坏道的信息但若希望在检测磁盘时也能跳过这些坏块不检测可以使用fsck的-l参数
```
fsck.ext3 -l /tmp/hda-badblock-list.final /dev/hda1
```
**2、在创建文件系统前检测坏道**
badblocks可以随e2fsck和mke2fs的-c删除一起运行对ext3文件系统也一样在创建文件系统前就先检测坏道信息
```
mkfs.ext3 -c /dev/hda1
```
代码表示使用-c在创建文件系统前检查坏道的硬盘。
这个操作已经很清楚地告知我们可以采用`mkfs.ext3 -c`选项用`read-only`方式检查硬盘。这个命令会在格式化硬盘时检查硬盘并标出错误的硬盘“block”。用这个方法格式化硬盘需要有相当大的耐心因为命令运行后会一个个用读的方式检查硬盘。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,47 @@
basename
===
打印目录或者文件的基本名称
## 补充说明
**basename命令** 用于打印目录或者文件的基本名称。basename和dirname命令通常用于shell脚本中的命令替换来指定和指定的输入文件名称有所差异的输出文件名称。
### 语法
```
basename(选项)(参数)
```
### 选项
```
--help显示帮助
--version显示版本号。
```
### 参数
* 文件:带路径信息的文件;
* 后缀:可选参数,指定要去除的文件后缀字符串。
### 实例
1、要显示一个shell变量的基本名称请输入
```
basename $WORKFILE
```
此命令显示指定给shell变量WORKFILE的值的基本名称。如果WORKFILE变量的值是`/home/jim/program.c`文件则此命令显示program.c。
要构造一个和另一个文件名称相同(除了后缀)的文件名称,请输入:
```
OFILE=`basename $1 .c`.o
```
此命令指定给 OFILE 文件第一个位置上的参数($1的值但它的 .c 后缀更改至 .o。如果 $1 是 /home/jim/program.c 文件,则 OFILE 成为 program.o。因为 program.o 仅是一个基本文件名称,它标识在当前目录中的文件。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -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/ -->

@ -0,0 +1,79 @@
bc
===
算术操作精密运算工具
## 补充说明
**bc命令** 是一种支持任意精度的交互执行的计算器语言。bash内置了对整数四则运算的支持但是并不支持浮点运算而bc命令可以很方便的进行浮点运算当然整数运算也不再话下。
### 语法
```
bc(选项)(参数)
```
### 选项
```
-i强制进入交互式模式
-l定义使用的标准数学库
-w对POSIX bc的扩展给出警告信息
-q不打印正常的GNU bc环境信息
-v显示指令版本信息
-h显示指令的帮助信息。
```
### 参数
文件:指定包含计算任务的文件。
### 实例
算术操作高级运算bc命令它可以执行浮点运算和一些高级函数
```
echo "1.212*3" | bc
3.636
```
设定小数精度(数值范围)
```
echo "scale=2;3/8" | bc
0.37
```
参数`scale=2`是将bc输出结果的小数位设置为2位。
进制转换
```
#!/bin/bash
abc=192
echo "obase=2;$abc" | bc
```
执行结果为11000000这是用bc将十进制转换成二进制。
```
#!/bin/bash
abc=11000000
echo "obase=10;ibase=2;$abc" | bc
```
执行结果为192这是用bc将二进制转换为十进制。
计算平方和平方根:
```
echo "10^10" | bc
echo "sqrt(100)" | bc
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,39 @@
bg
===
用于将作业放到后台运行
## 补充说明
**bg命令** 用于将作业放到后台运行,使前台可以执行其他任务。该命令的运行效果与在指令后面添加符号`&`的效果是相同的,都是将其放到系统后台执行。
在Linux系统中执行某些操作时候有时需要将当前任务暂停调至后台或有时须将后台暂停的任务重启开启并调至前台这一序列的操作将会使用到 jobs、bg、和 fg 三个命令以及两个快捷键来完成。
### 语法
```
bg(参数)
```
### 参数
作业标识:指定需要放到后台的作业标识号。
### 实例
使用bg命令将任务号为1的任务放到后台继续执行输入如下命令
```
bg 1 #后台执行任务号为1的任务
```
如果系统中只有一个挂起的任务时,即使不为该命令设置参数"1",也可以实现这个功能。
注意实际上使用bg命令与在指令后面添加符号"&"的效果是一样的。例如,使用`&`将`find / -name password`放到后台执行,输入如下命令:
```
find / -name password & #后台执行任务
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,59 @@
bind
===
显示或设置键盘按键与其相关的功能
## 补充说明
**bind命令** 用于显示和设置命令行的键盘序列绑定功能。通过这一命令可以提高命令行中操作效率。您可以利用bind命令了解有哪些按键组合与其功能也可以自行指定要用哪些按键组合。
### 语法
```
bind(选项)
```
### 选项
```
-d显示按键配置的内容
-f<按键配置文件>:载入指定的按键配置文件;
-l列出所有的功能
-m<按键配置>:指定按键配置;
-q<功能>:显示指定功能的按键;
-v列出目前的按键配置与其功能。
```
### 实例
```
bind -x '"\C-l":ls -l' #直接按 CTRL+L 就列出目录
```
其中keyseq可以使用`showkey -a`命令来获取:
```
[root@localhost ~]# showkey -a
Press any keys - Ctrl-D will terminate this program
^[[A 27 0033 0x1b 上
91 0133 0x5b
65 0101 0x41
^[[B 27 0033 0x1b 下
91 0133 0x5b
66 0102 0x42
^[[D 27 0033 0x1b 左
91 0133 0x5b
68 0104 0x44
^[[C 27 0033 0x1b 右
91 0133 0x5b
67 0103 0x43
32 0040 0x20
^M 13 0015 0x0d 字母M
^C 3 0003 0x03 Ctrl-C
^D 4 0004 0x04 Ctrl-D 退出
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,96 @@
blkid
===
查看块设备的文件系统类型、LABEL、UUID等信息
## 补充说明
在Linux下可以使用 **blkid命令** 对查询设备上所采用文件系统类型进行查询。blkid主要用来对系统的块设备包括交换分区所使用的文件系统类型、LABEL、UUID等信息进行查询。要使用这个命令必须安装e2fsprogs软件包。
### 语法
```
blkid -L | -U
blkid [-c ] [-ghlLv] [-o] [-s ][-t ] -[w ] [ ...]
blkid -p [-s ] [-O ] [-S ][-o] ...
blkid -i [-s ] [-o] ...
```
### 选项
```
-c <file> 指定cache文件(default: /etc/blkid.tab, /dev/null = none)
-d don't encode non-printing characters
-h 显示帮助信息
-g garbage collect the blkid cache
-o <format> 指定输出格式
-k list all known filesystems/RAIDs and exit
-s <tag> 显示指定信息,默认显示所有信息
-t <token> find device with a specific token (NAME=value pair)
-l look up only first device with token specified by -t
-L <label> convert LABEL to device name
-U <uuid> convert UUID to device name
-v 显示版本信息
-w <file> write cache to different file (/dev/null = no write)
<dev> specify device(s) to probe (default: all devices)
Low-level probing options:
-p low-level superblocks probing (bypass cache)
-i gather information about I/O limits
-S <size> overwrite device size
-O <offset> probe at the given offset
-u <list> filter by "usage" (e.g. -u filesystem,raid)
-n <list> filter by filesystem type (e.g. -n vfat,ext3)
```
### 实例
1、列出当前系统中所有已挂载文件系统的类型
```
sudo blkid
```
2、显示指定设备 UUID
```
sudo blkid -s UUID /dev/sda5
```
3、显示所有设备 UUID
```
sudo blkid -s UUID
```
4、显示指定设备 LABEL
```
sudo blkid -s LABEL /dev/sda5
```
5、显示所有设备 LABEL
```
sudo blkid -s LABEL
```
6、显示所有设备文件系统
```
sudo blkid -s TYPE
```
7、显示所有设备
```
sudo blkid -o device
```
8、以列表方式查看详细信息
```
sudo blkid -o list
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,55 @@
blockdev
===
从命令行调用区块设备控制程序
## 补充说明
**blockdev命令** 在命令调用“ioxtls”函数以实现对设备的控制。
### 语法
```
blockdev(选项)(参数)
```
选项
```
-V打印版本号并退出
-q安静模式
-v详细信息模式
--setro只读
--setrw只写
--getro打印只读状态“1”表示只读“0”表示非只读
--getss打印扇区大小。通常为521
--flushbufs刷新缓冲区
--rereadpt重新读取分区表。
```
### 参数
设备文件名:指定要操作的磁盘的设备文件名。
### 实例
设置设备为只读:
```
blockdev --setro /dev/hda4
```
读取设备是否为只读:
```
blockdev --getro /dev/hda4
```
设置设别为可读写:
```
blockdev --setrw /dev/hda4
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,50 @@
bmodinfo
===
显示给定模块的详细信息
## 补充说明
**bmodinfo命令** 用于显示给定模块的详细信息。
### 语法
```
bmodinfo(选项)(参数)
```
### 选项
```
-a显示模块作者
-d显示模块的描述信息
-l显示模块的许可信息
-p显示模块的参数信息
-n显示模块对应的文字信息
-0用ASCII码的0字符分割字段值而不使用新行。
```
### 参数
模块名:要显示详细信息的模块名称。
### 实例
显示sg模块的信息
```
[root@localhost ~]# modinfo sg
filename: /lib/modules/2.6.9-42.ELsmp/kernel/drivers/scsi/sg.ko
author: Douglas Gilbert
description: SCSI generic (sg) driver
license: GPL
version: 3.5.31 B0B0CB1BB59F0669A1F0D6B
parm: def_reserved_size:size of buffer reserved for each fd
parm: allow_dio:allow direct I/O (default: 0 (disallow))
alias: char-major-21-*
vermagic: 2.6.9-42.ELsmp SMP 686 REGPARM 4KSTACKS gcc-3.4
depends: scsi_mod
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,38 @@
builtin
===
执行shell内部命令
## 补充说明
**builtin命令** 用于执行指定的shell内部命令并返回内部命令的返回值。builtin命令在使用时将不能够再使用Linux中的外部命令。当系统中定义了与shell内部命令相同的函数时使用builtin显式地执行shell内部命令从而忽略定义的shell函数。
### 语法
```
builtin(参数)
```
### 参数
shell内部命令指定需要执行的shell内部命令。
### 实例
使用builtin命令执行shell内部命alias显示命令别名输入如下命令
```
builtin alias #执行shell内部指令
alias cp='cp -i'
alias l.='ls -d .* --color=tty'
alias ll='ls -l --color=tty'
alias ls='ls --color=tty'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
```
上面的命令执行后,将输出当前系统下的命令别名。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,41 @@
bunzip2
===
创一个bz2文件压缩包
## 补充说明
**bunzip2命令** 解压缩由bzip2指令创建的”.bz2"压缩包。对文件进行压缩与解压缩。此命令类似于“gzip/gunzip”命令只能对文件进行压缩。对于目录只能压缩目录下的所有文件压缩完成后在目录下生成以“.bz2”为后缀的压缩包。bunzip2其实是bzip2的符号链接即软链接因此压缩解压都可以通过bzip2实现。
### 语法
```
bunzip2(选项)(参数)
```
### 选项
```
-f或--force解压缩时若输出的文件与现有文件同名时预设不会覆盖现有的文件
-k或——keep在解压缩后预设会删除原来的压缩文件。若要保留压缩文件请使用此参数
-s或——small降低程序执行时内存的使用量
-v或——verbose解压缩文件时显示详细的信息
-l--license-V或——version显示版本信息。
```
### 参数
.bz2压缩包指定需要解压缩的.bz2压缩包。
### 实例
将`/opt`目录下的etc.zip、var.zip和backup.zip进行压缩设置压缩率为最高同时在压缩完毕后不删除原始文件显示压缩过程的详细信息。
```
bzip2 -9vk /opt/etc.zip /opt/var.zip /opt/backup.zip
```
压缩完毕后,在`/opt`下就会生成相应的etc.zip.bz2、var.zip.bz2和backup.zip.bz2文件。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,21 @@
bye
===
命令用于中断FTP连线并结束程序。。
## 补充说明
**bye命令** 在ftp模式下输入bye即可中断目前的连线作业并结束ftp的执行。
### 语法
```
bye
```
### 实例
```
bye
```

@ -0,0 +1,39 @@
bzcat
===
解压缩指定的.bz2文件
## 补充说明
**bzcat命令** 解压缩指定的.bz2文件并显示解压缩后的文件内容。保留原压缩文件并且不生成解压缩后的文件。
### 语法
```
bzcat(参数)
```
### 参数
.bz2压缩文件指定要显示内容的.bz2压缩文件。
### 实例
将`/tmp/man.config`以bzip2格式压缩
```
bzip2 -z man.config
```
此时man.config会变成man.config.bz2
将上面的压缩文件内容读出来:
```
bzcat man.config.bz2
```
此时屏幕上会显示 man.config.bz2 解压缩之后的文件内容。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,22 @@
bzcmp
===
比较两个压缩包中的文件
## 补充说明
**bzcmp命令** 主要功能是在不真正解压缩.bz2压缩包的情况下比较两个压缩包中的文件省去了解压缩后在调用cmp命令的过程。
### 语法
```
bzcmp(参数)
```
### 参数
* 文件1指定要比较的第一个.bz2压缩包
* 文件2指定要比较的第二个.bz2压缩包。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,22 @@
bzdiff
===
直接比较两个.bz2压缩包中文件的不同
## 补充说明
**bzdiff命令** 用于直接比较两个“.bz2”压缩包中文件的不同省去了解压缩后再调用diff命令的过程。
### 语法
```
bzdiff(参数)
```
### 参数
* 文件1指定要比较的第一个.bz2压缩包
* 文件2指定要比较的第二个.bz2压缩包。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,22 @@
bzgrep
===
使用正则表达式搜索.bz2压缩包中文件
## 补充说明
**bzgrep命令** 使用正则表达式搜索“.bz2”压缩包中文件将匹配的行显示到标注输出。
### 语法
```
bzgrep(参数)
```
### 参数
* 搜索模式:指定要搜索的模式;
* .bz2文件指定要搜索的.bz2压缩包。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,128 @@
bzip2
===
将文件压缩成bz2格式
## 补充说明
**bzip2命令** 用于创建和管理(包括解压缩)“.bz2”格式的压缩包。我们遇见Linux压缩打包方法有很多种以下讲解了Linux压缩打包方法中的Linux bzip2命令的多种范例供大家查看相信大家看完后会有很多收获。
### 语法
```
bzip2(选项)(参数)
```
### 选项
```
-c或——stdout将压缩与解压缩的结果送到标准输出
-d或——decompress执行解压缩
-f或-forcebzip2在压缩或解压缩时若输出文件与现有文件同名预设不会覆盖现有文件。若要覆盖。请使用此参数
-h或——help在线帮助
-k或——keepbzip2在压缩或解压缩后会删除原始文件。若要保留原始文件请使用此参数
-s或——small降低程序执行时内存的使用量
-t或——test测试.bz2压缩文件的完整性
-v或——verbose压缩或解压缩文件时显示详细的信息
-z或——compress强制执行压缩
-V或——version显示版本信息
--repetitive-best若文件中有重复出现的资料时可利用此参数提高压缩效果
--repetitive-fast若文件中有重复出现的资料时可利用此参数加快执行效果。
```
### 参数
文件:指定要压缩的文件。
### 实例
**压缩指定文件filename:**
```
bzip2 filename
bzip2 -z filename
```
这里压缩的时候不会输出会将原来的文件filename给删除替换成filename.bz2.如果以前有filename.bz2则不会替换并提示错误如果想要替换则指定-f选项例如`bzip2 -f filename`如果filename是目录则也提醒错误不做任何操作如果filename已经是压过的了有bz2后缀就提醒一下不再压缩没有bz2后缀会再次压缩。
**解压指定的文件filename.bz2:**
```
bzip2 -d filename.bz2
bunzip2 filename.bz2
```
这里解压的时候没标准输出会将原来的文件filename.bz2给替换成filename。如果以前有filename则不会替换并提示错误如果想要替换则指定`-f`选项,例如`bzip2 -df filename.bz2`。
**压缩解压的时候将结果也输出:**
```
$bzip2 -v filename
```
输入之后,输出如下:
```
filename: 0.119:1, 67.200 bits/byte, -740.00% saved, 5 in, 42 out.
```
这里,加上`-v`选项就会输出了,只用压缩举例了,解压的时候同理`bzip2 -dv filename.bz2`不再举例了。
**模拟解压实际并不解压:**
```
bzip2 -tv filename.bz2
```
输入之后,输出如下:
```
filename.bz2: ok
```
这里,`-t`指定要进行模拟解压,不实际生成结果,也就是说类似检查文件,当然就算目录下面有filename也不会有什么错误输出了因为它根本不会真的解压文件。为了在屏幕上输出这里加上`-v`选项了,如果是真的解压`bzip2 -dv filename.bz2`则输出的是把"ok"替换成了"done"。
**压缩解压的时候,除了生成结果文件,将原来的文件也保存:**
```
bzip2 -k filename
```
这里,加上`-k`就保存原始的文件了,否则原始文件会被结果文件替代。只用压缩举例了,解压的时候同理`$bzip2 -dk filename.bz2`不再举例了。
**解压到标准输出:**
```
bzip2 -dc filename.bz2
```
输入之后,输出如下:
```
hahahhaahahha
```
这里,使用`-c`指定到标准输出输出的是文件filename的内容不会将filename.bz2删除。
**压缩到标准输出:**
```
bzip2 -c filename
bzip2: I won't write compressed data to a terminal.
bzip2: For help, type: `bzip2 --help'.
```
这里,使用`-c`指定压缩到标准输出不删除原有文件,不同的是,压缩后的文件无法输出到标准输出。
**使用bzip2的时候将所有后面的看作文件(即使文件名以'-'开头)**
```
bzip2 -- -myfilename
```
这里主要是为了防止文件名中`-`产生以为是选项的歧义。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,23 @@
bzip2recover
===
恢复被破坏的.bz2压缩包中的文件
## 补充说明
**bzip2recover命令** 可用于恢复被破坏的“.bz2”压缩包中的文件。
bzip2是以区块的方式来压缩文件每个区块视为独立的单位。因此当某一区块损坏时便可利用bzip2recover试着将文件中的区块隔开来以便解压缩正常的区块。通常只适用在压缩文件很大的情况。
### 语法
```
bzip2recover(参数)
```
### 参数
文件:指定要恢复数据的.bz2压缩包。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,21 @@
bzless
===
增强.bz2压缩包查看器
## 补充说明
**bzless命令** 是增强“.bz2”压缩包查看器bzless比bzmore命令功能更加强大。
### 语法
```
bzless(参数)
```
### 参数
文件:指定要分屏显示的.bz2压缩包。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,21 @@
bzmore
===
查看bzip2压缩过的文本文件的内容
## 补充说明
**bzmore命令** 用于查看bzip2压缩过的文本文件的内容当下一屏显示不下时可以实现分屏显示。
### 语法
```
bzmore(参数)
```
### 参数
文件:指定要分屏显示的.bz2压缩包。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,72 @@
cal
===
显示当前日历或指定日期的日历
## 补充说明
**cal命令** 用于显示当前日历,或者指定日期的日历。
### 语法
```
cal(选项)(参数)
```
### 选项
```
-l显示单月输出
-3显示临近三个月的日历
-s将星期日作为月的第一天
-m将星期一作为月的第一天
-j显示“julian”日期
-y显示当前年的日历。
```
### 参数
```
月:指定月份;
年:指定年份。
```
### 实例
单独执行cal命令会打印出日历
```
[root@localhost ~]# cal
十二月 2013
日 一 二 三 四 五 六
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
```
```
[root@localhost ~]# cal -j
十二月 2013
日 一 二 三 四 五 六
335 336 337 338 339 340 341
342 343 344 345 346 347 348
349 350 351 352 353 354 355
356 357 358 359 360 361 362
363 364 365
```
```
[root@localhost ~]# cal -3
十一月 2013 十二月 2013 一月 2014
日 一 二 三 四 五 六 日 一 二 三 四 五 六 日 一 二 三 四 五 六
1 2 1 2 3 4 5 6 7 1 2 3 4
3 4 5 6 7 8 9 8 9 10 11 12 13 14 5 6 7 8 9 10 11
10 11 12 13 14 15 16 15 16 17 18 19 20 21 12 13 14 15 16 17 18
17 18 19 20 21 22 23 22 23 24 25 26 27 28 19 20 21 22 23 24 25
24 25 26 27 28 29 30 29 30 31 26 27 28 29 30 31
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,31 @@
cancel
===
取消已存在的打印任务
## 补充说明
**cancel命令** 用于取消已存在的打印任务。
### 语法
```
cancel(选项)(参数)
```
### 选项
```
-a取消所有打印任务
-E当连接到服务器时强制使用加密
-U指定连接服务器时使用的用户名
-u指定打印任务所属的用户
-h指定连接的服务器名和端口号。
```
### 参数
打印任务号:指定要取消的打印任务编号。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,44 @@
cat
===
连接文件并打印到标准输出设备上
## 补充说明
**cat命令** 连接文件并打印到标准输出设备上cat经常用来显示文件的内容类似于下的type命令。
注意当文件较大时文本在屏幕上迅速闪过滚屏用户往往看不清所显示的内容。因此一般用more等命令分屏显示。为了控制滚屏可以按Ctrl+S键停止滚屏按Ctrl+Q键可以恢复滚屏。按Ctrl+C中断键可以终止该命令的执行并且返回Shell提示符状态。
### 语法
```
cat(选项)(参数)
```
### 选项
```
-n或-number有1开始对所有输出的行数编号
-b或--number-nonblank和-n相似只不过对于空白行不编号
-s或--squeeze-blank当遇到有连续两行以上的空白行就代换为一行的空白行
-A显示不可打印字符行尾显示“$”;
-e等价于"-vE"选项;
-t等价于"-vT"选项;
```
### 参数
文件列表:指定要连接的文件列表。
### 实例
设ml和m2是当前目录下的两个文件
```
cat m1 在屏幕上显示文件ml的内容
cat m1 m2 同时显示文件ml和m2的内容
cat m1 m2 > file 将文件ml和m2合并后放入文件file中
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,36 @@
cd
===
切换用户当前工作目录
## 补充说明
**cd命令** 用来切换工作目录至dirname。 其中dirName表示法可为绝对路径或相对路径。若目录名称省略则变换至使用者的home directory(也就是刚login时所在的目录)。另外,`~`也表示为home directory的意思`.`则是表示目前所在的目录,`..`则表示目前目录位置的上一层目录。
### 语法
```
cd (选项) (参数)
```
### 选项
```
-p 如果要切换到的目标目录是一个符号连接,直接切换到符号连接指向的目标目录
-L 如果要切换的目标目录是一个符号的连接,直接切换到字符连接名代表的目录,而非符号连接所指向的目标目录。
- 当仅实用"-"一个选项时,当前工作目录将被切换到环境变量"OLDPWD"所表示的目录。
```
### 实例
```
cd 进入用户主目录;
cd ~ 进入用户主目录;
cd - 返回进入此目录之前所在的目录;
cd .. 返回上级目录(若当前目录为“/“,则执行完后还在“/"".."为上级目录的意思);
cd ../.. 返回上两级目录;
cd !$ 把上个命令的参数作为cd参数使用。
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,62 @@
cdrecord
===
Linux系统下光盘刻录功能命令
## 补充说明
**cdrecord命令** 用于Linux系统下光盘刻录它支持cd和DVD格式。linux下一般都带有cdrecord软件。
### 语法
```
cdrecord(选项)(参数)
```
### 选项
```
-v显示刻录光盘的详细过程
-eject刻录完成后弹出光盘
speed=<刻录倍速>:指定光盘刻录的倍速;
dev=<刻录机设备号>:指定使用“-scanbus”参数扫描到的刻录机的设备号
-scanbus扫描系统中可用的刻录机。
```
### 参数
ISO文件指定刻录光盘使用的ISO映像文件。
### 实例
查看系统所有 CD-R(w) 设备:
```
cdrecord -scanbus
scsibus0:
0,0,0 0) *
0,1,0 1) *
0,2,0 2) *
0,3,0 3) 'HP ' 'CD-Writer+ 9200 ' '1.0c' Removable CD-ROM
```
用iso文件刻录一张光盘
```
cdrecord -v -eject speed=4 dev=0,3,0 backup.iso
```
参数解释
* -v显示刻录光盘的详细过程
* -eject刻完自动弹出光盘
* speed=4 dev=0,3,0四速刻录到HP CD-writer设备上。
擦写光驱:
```
cdrecord --dev=0,3,0 --blank=fast
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,98 @@
chage
===
修改帐号和密码的有效期限
## 补充说明
**chage命令** 是用来修改帐号和密码的有效期限。
### 语法
```
chage [选项] 用户名
```
### 选项
```
-m密码可更改的最小天数。为零时代表任何时候都可以更改密码。
-M密码保持有效的最大天数。
-w用户密码到期前提前收到警告信息的天数。
-E帐号到期的日期。过了这天此帐号将不可用。
-d上一次更改的日期。
-i停滞时期。如果一个密码已过期这些天那么此帐号将不可用。
-l例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。
```
### 实例
可以编辑`/etc/login.defs`来设定几个参数,以后设置口令默认就按照参数设定为准:
```
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
```
当然在`/etc/default/useradd`可以找到如下2个参数进行设置
```
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
```
通过修改配置文件能对之后新建用户起作用而目前系统已经存在的用户则直接用chage来配置。
我的服务器root帐户密码策略信息如下
```
[root@linuxde ~]# chage -l root
最近一次密码修改时间 3月 12, 2013
密码过期时间 :从不
密码失效时间 :从不
帐户过期时间 :从不
两次改变密码之间相距的最小天数 0
两次改变密码之间相距的最大天数 99999
在密码过期之前警告的天数 7
```
我可以通过如下命令修改我的密码过期时间:
```
[root@linuxde ~]# chage -M 60 root
[root@linuxde ~]# chage -l root
最近一次密码修改时间 3月 12, 2013
密码过期时间 5月 11, 2013
密码失效时间 :从不
帐户过期时间 :从不
两次改变密码之间相距的最小天数 0
两次改变密码之间相距的最大天数 60
在密码过期之前警告的天数 9
```
然后通过如下命令设置密码失效时间:
```
[root@linuxde ~]# chage -I 5 root
[root@linuxde ~]# chage -l root
最近一次密码修改时间 3月 12, 2013
密码过期时间 5月 11, 2013
密码失效时间 5月 16, 2013
帐户过期时间 :从不
两次改变密码之间相距的最小天数 0
两次改变密码之间相距的最大天数 60
在密码过期之前警告的天数 9
```
从上述命令可以看到在密码过期后5天密码自动失效这个用户将无法登陆系统了。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,55 @@
chattr
===
用来改变文件属性
## 补充说明
**chattr命令** 用来改变文件属性。这项指令可改变存放在ext2文件系统上的文件或目录属性这些属性共有以下8种模式
```
a让文件或目录仅供附加用途
b不更新文件或目录的最后存取时间
c将文件或目录压缩后存放
d将文件或目录排除在倾倒操作之外
i不得任意更动文件或目录
s保密性删除文件或目录
S即时更新文件或目录
u预防意外删除。
```
### 语法
```
chattr(选项)
```
### 选项
```
-R递归处理将指令目录下的所有文件及子目录一并处理
-v<版本编号>:设置文件或目录版本;
-V显示指令执行过程
+<属性>:开启文件或目录的该项属性;
-<属性>:关闭文件或目录的该项属性;
=<属性>:指定文件或目录的该项属性。
```
### 实例
用chattr命令防止系统中某个关键文件被修改
```
chattr +i /etc/fstab
```
然后试一下rm、mv、rename等命令操作于该文件都是得到Operation not permitted的结果。
让某个文件只能往里面追加内容,不能删除,一些日志文件适用于这种操作:
```
chattr +a /data1/user_act.log
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,75 @@
chcon
===
修改对象(文件)的安全上下文
## 补充说明
**chcon命令** 是修改对象(文件)的安全上下文,比如:用户、角色、类型、安全级别。也就是将每个文件的安全环境变更至指定环境。使用`--reference`选项时把指定文件的安全环境设置为与参考文件相同。chcon命令位于`/usr/bin/chcon`。
### 语法
```
chcon [选项]... 环境 文件...
chcon [选项]... [-u 用户] [-r 角色] [-l 范围] [-t 类型] 文件...
chcon [选项]... --reference=参考文件 文件...
```
### 选项
```
-h, --no-dereference影响符号连接而非引用的文件。
--reference=参考文件:使用指定参考文件的安全环境,而非指定值。
-R, --recursive递归处理所有的文件及子目录。
-v, --verbose为处理的所有文件显示诊断信息。
-u, --user=用户:设置指定用户的目标安全环境。
-r, --role=角色:设置指定角色的目标安全环境。
-t, --type=类型:设置指定类型的目标安全环境。
-l, --range=范围:设置指定范围的目标安全环境。
```
以下选项是在指定了`-R`选项时被用于设置如何穿越目录结构体系。如果您指定了多于一个选项,那么只有最后一个会生效。
```
-H如果命令行参数是一个通到目录的符号链接则遍历符号链接。
-L遍历每一个遇到的通到目录的符号链接。
-P不遍历任何符号链接默认
--help显示此帮助信息并退出。
--version显示版本信息并退出。
```
### 实例
如果你想把这个ftp共享给匿名用户的话需要开启以下
```
chcon -R -t public_content_t /var/ftp
```
如果你想让你设置的FTP目录可以上传文件的话SELINUX需要设置
```
chcon -t public_content_rw_t /var/ftp/incoming
```
允许用户HHTP访问其家目录该设定限仅于用户的家目录主页
```
setsebool -P httpd_enable_homedirs 1
chcon -R -t httpd_sys_content_t ~user/public_html
```
如果你希望将samba目录共享给其他用户你需要设置
```
chcon -t samba_share_t /directory
```
共享rsync目录时
```
chcon -t public_content_t /directories
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,67 @@
chfn
===
用来改变finger命令显示的信息
## 补充说明
**chfn命令** 用来改变finger命令显示的信息。这些信息都存放在/etc目录里的passwd文件里。若不指定任何选项则chfn命令会进入问答式界面。
### 语法
```
chfn(选项)(参数)
```
### 选项
```
-f<真实姓名>或--full-name<真实姓名>:设置真实姓名;
-h<家中电话>或--home-phone<家中电话>:设置家中的电话号码;
-o<办公地址>或--office<办公地址>:设置办公室的地址;
-p<办公电话>或--office-phone<办公电话>:设置办公室的电话号码;
-u或--help在线帮助
-v或-version显示版本信息。
```
### 参数
用户名指定要改变finger信息的用户名。
### 实例
范例1改变finger信息
```
[root@localhost Desktop]# chfn
Changing finger information for root.
Name [root]: jack
Office []: hn
Office Phone []: 888888
Home Phone []: 9999999
Finger information changed.
```
范例2改变账号真实姓名
```
[root@localhost Desktop]# chfn -f jack
Changing finger information for root.
Finger information changed.
```
范例3
```
shell>> chfn
Changing finger information for user
Password: [del]
Name[]:linuxde ### 提供 finger 时的资料
Office[]:NCCU
Office Phone[]: [del]
Home Phone[]: [del]
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,52 @@
chgrp
===
用来变更文件或目录的所属群组
## 补充说明
**chgrp命令** 用来改变文件或目录所属的用户组。该命令用来改变指定文件所属的用户组。其中组名可以是用户组的id也可以是用户组的组名。文件名可以 是由空格分开的要改变属组的文件列表,也可以是由通配符描述的文件集合。如果用户不是该文件的文件主或超级用户(root),则不能改变该文件的组。
在UNIX系统家族里文件或目录权限的掌控以拥有者及所属群组来管理。您可以使用chgrp指令去变更文件与目录的所属群组设置方式采用群组名称或群组识别码皆可。
### 语法
```
chgrp [选项][组群][文件|目录]
```
### 选项
```
-R 递归式地改变指定目录及其下的所有子目录和文件的所属的组
-c或——changes效果类似“-v”参数但仅回报更改的部分
-f或--quiet或——silent不显示错误信息
-h或--no-dereference只对符号连接的文件作修改而不是该其他任何相关文件
-H如果命令行参数是一个通到目录的符号链接则遍历符号链接
-R或——recursive递归处理将指令目录下的所有文件及子目录一并处理
-L遍历每一个遇到的通到目录的符号链接
-P不遍历任何符号链接默认
-v或——verbose显示指令执行过程
--reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;
```
### 参数
* 组:指定新工作名称;
* 文件:指定要改变所属组的文件列表。多个文件或者目录之间使用空格隔开。
### 实例
将`/usr/meng`及其子目录下的所有文件的用户组改为mengxin
```
chgrp -R mengxin /usr/meng
```
更改文件ah的组群所有者为newuser
```
[root@rhel ~]# chgrp newuser ah
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,79 @@
chkconfig
===
检查或设置系统的各种服务
## 补充说明
**chkconfig命令** 检查、设置系统的各种服务。这是Red Hat公司遵循GPL规则所开发的程序它可查询操作系统在每一个执行等级中会执行哪些系统服务其中包括各类常驻服务。谨记chkconfig不是立即自动禁止或激活一个服务它只是简单的改变了符号连接。
### 语法
```bash
chkconfig(选项)
```
### 选项
```bash
--add增加所指定的系统服务让chkconfig指令得以管理它并同时在系统启动的叙述文件内增加相关数据
--del删除所指定的系统服务不再由chkconfig指令管理并同时在系统启动的叙述文件内删除相关数据
--level<等级代号>:指定读系统服务要在哪一个执行等级中开启或关毕。
```
缺省的运行级RHS用到的级别如下
* 0关机
* 1单用户模式
* 2无网络支持的多用户模式
* 3有网络支持的多用户模式
* 4保留未使用
* 5有网络支持有X-Window支持的多用户模式
* 6重新引导系统即重启
对各个运行级的详细解释:
* 0 为停机,机器关闭。
* 1 为单用户模式就像Win9x下的安全模式类似。
* 2 为多用户模式但是没有NFS支持。
* 3 为完整的多用户模式,是标准的运行级。
* 4 一般不用,在一些特殊情况下可以用它来做一些事情。例如在笔记本 电脑的电池用尽时,可以切换到这个模式来做一些设置。
* 5 就是X11进到X Window系统了。
* 6 为重启运行init 6机器就会重启。
需要说明的是level选项可以指定要查看的运行级而不一定是当前运行级。对于每个运行级只能有一个启动脚本或者停止脚本。当切换运行级时init不会重新启动已经启动的服务也不会再次去停止已经停止的服务。
运行级文件:
每个被chkconfig管理的服务需要在对应的init.d下的脚本加上两行或者更多行的注释。第一行告诉chkconfig缺省启动的运行级以及启动和停止的优先级。如果某服务缺省不在任何运行级启动那么使用`-`代替运行级。第二行对服务进行描述,可以用`\`跨行注释。
例如random.init包含三行
```bash
# chkconfig: 2345 20 80
# description: Saves and restores system entropy pool for \
# higher quality random number generation.
```
### 实例
```bash
chkconfig --list #列出所有的系统服务。
chkconfig --add httpd #增加httpd服务。
chkconfig --del httpd #删除httpd服务。
chkconfig --level httpd 2345 on #设置httpd在运行级别为2、3、4、5的情况下都是on开启的状态。
chkconfig --list # 列出系统所有的服务启动情况。
chkconfig --list mysqld # 列出mysqld服务设置情况。
chkconfig --level 35 mysqld on # 设定mysqld在等级3和5为开机运行服务--level 35表示操作只在等级3和5执行on表示启动off表示关闭。
chkconfig mysqld on # 设定mysqld在各等级为on“各等级”包括2、3、4、5等级。
chkconfig level redis 2345 on # 把redis在运行级别为2、3、4、5的情况下都是on开启的状态。
```
如何增加一个服务:
1. 服务脚本必须存放在`/etc/ini.d/`目录下;
2. `chkconfig --add servicename`在chkconfig工具服务列表中增加此服务此时服务会被在`/etc/rc.d/rcN.d`中赋予K/S入口了
3. `chkconfig --level 35 mysqld on`修改服务的默认启动等级。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,116 @@
chmod
===
用来变更文件或目录的权限
## 补充说明
**chmod命令** 用来变更文件或目录的权限。在UNIX系统家族里文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分另有3种特殊权限可供运用。用户可以使用chmod指令去变更文件与目录的权限设置方式采用文字或数字代号皆可。符号连接的权限无法变更如果用户对符号连接修改权限其改变会作用在被连接的原始文件。
权限范围的表示法如下:
`u` User即文件或目录的拥有者
`g` Group即文件或目录的所属群组
`o` Other除了文件或目录拥有者或所属群组之外其他用户皆属于这个范围
`a` All即全部的用户包含拥有者所属群组以及其他用户
`r` 读取权限数字代号为“4”;
`w` 写入权限数字代号为“2”
`x` 执行或切换权限数字代号为“1”
`-` 不具任何权限数字代号为“0”
`s` 特殊功能说明:变更文件或目录的权限。
### 语法
```
chmod(选项)(参数)
```
### 选项
```bash
u # 操作对象简称用户user文件或目录的所有者。
g # 操作对象简称同组用户group文件或目录所属群组
o # 操作对象简称其它用户others
a # 操作对象简称所有用户all系统默认使用此项
+ # 权限操作符,添加某些权限
- # 权限操作符,取消某些权限
= # 权限操作符,设置文件的权限为给定的权限
r # 权限设定(英文),表示可读权限
w # 权限设定(英文),表示可写权限
x # 权限设定(英文),表示可执行权限
- # 权限设定(英文字符),表示没有权限
X # 权限设定,如果目标文件是可执行文件或目录,可给其设置可执行权限
s # 权限设定设置权限suid和sgid使用权限组合“u+s”设定文件的用户的ID位“g+s”设置组ID位
t # 权限设定,只有目录或文件的所有者才可以删除目录下的文件
-c或——changes # 效果类似“-v”参数但仅回报更改的部分如果文件权限已经改变显示其操作信息
-f或--quiet或——silent # 操作过程中不显示任何错误信息;
-R或——recursive # 递归处理,将指令目录下的所有文件及子目录一并处理;
-v或——verbose # 显示命令运行时的详细执行过程;
--reference=<参考文件或目录> # 把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;
<权限范围>+<权限设置> # 开启权限范围的文件或目录的该选项权限设置;
<权限范围>-<权限设置> # 关闭权限范围的文件或目录的该选项权限设置;
<权限范围>=<权限设置> # 指定权限范围的文件或目录的该选项权限设置;
--help # 显示帮助信息
--version # 显示版本信息
```
### 参数
权限模式:指定文件的权限模式;
文件:要改变权限的文件。
### 知识扩展和实例
Linux用 户分为:拥有者、组群(Group)、其他otherLinux系统中预设的情況下系统中所有的帐号与一般身份使用者以及root的相关信 息, 都是记录在`/etc/passwd`文件中。每个人的密码则是记录在`/etc/shadow`文件下。 此外,所有的组群名称记录在`/etc/group`內!
linux文件的用户权限的分析图
```bash
-rw-r--r-- 1 user staff 651 Oct 12 12:53 .gitmodules
# ↑╰┬╯╰┬╯╰┬╯
# ┆ ┆ ┆ ╰┈ 0 其他人
# ┆ ┆ ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ g 属组
# ┆ ╰┈┈┈┈ u 属组
# ╰┈┈ 第一个字母 `d` 代表目录,`-` 代表普通文件
```
rwx rw- r--
r=读取属性  //值4
w=写入属性  //值2
x=执行属性  //值1
```bash
chmod u+x,g+w f01  # 为文件f01设置自己可以执行组员可以写入的权限
chmod u=rwx,g=rw,o=r f01
chmod 764 f01
chmod a+x f01   # 对文件f01的u,g,o都设置可执行属性
```
文件的属主和属组属性设置
```bash
chown user:market f01  # 把文件f01给uesr添加到market组
ll -d f1 查看目录f1的属性
```
将`/home/wwwroot/`里的所有文件和文件夹设置为`755`权限
(1)直接指定路径修改
```bash
chmod -R 755 /home/wwwroot/*
```
(2)手动进入该目录修改权限(并显示详细过程)
```bash
cd /home/wwwroot
chmod -Rv 755 * #注意:“*”表示通配符,指的是所有文件和文件
sudo chmod o+rw /shared #设置文件夹权限以保证其余用户可以访问它。
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,46 @@
chown
===
用来变更文件或目录的拥有者或所属群组
## 补充说明
**chown命令** 改变某个文件或目录的所有者和所属的组该命令可以向某个用户授权使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户D用户组可以是组名或组id。文件名可以使由空格分开的文件列表在文件名中可以包含通配符。
只有文件主和超级用户才可以便用该命令。
### 语法
```
chown(选项)(参数)
```
### 选项
```
-c或——changes效果类似“-v”参数但仅回报更改的部分
-f或--quite或——silent不显示错误信息
-h或--no-dereference只对符号连接的文件作修改而不更改其他任何相关文件
-R或——recursive递归处理将指定目录下的所有文件及子目录一并处理
-v或——version显示指令执行过程
--dereference效果和“-h”参数相同
--help在线帮助
--reference=<参考文件或目录>:把指定文件或目录的拥有者与所属群组全部设成和参考文件或目录的拥有者与所属群组相同;
--version显示版本信息。
```
### 参数
用户:组:指定所有者和所属工作组。当省略“:组”,仅改变文件所有者;
文件指定要改变所有者和工作组的文件列表。支持多个文件和目标支持shell通配符。
### 实例
将目录`/usr/meng`及其下面的所有文件、子目录的文件主改成 liu
```
chown -R liu /usr/meng
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -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/ -->

@ -0,0 +1,122 @@
chroot
===
把根目录换成指定的目的目录
## 补充说明
**chroot命令** 用来在指定的根目录下运行指令。chroot即 change root directory (更改 root 目录)。在 linux 系统中,系统默认的目录结构都是以`/`,即是以根 (root) 开始的。而在使用 chroot 之后,系统的目录结构将以指定的位置作为`/`位置。
在经过 chroot 命令之后系统读取到的目录和文件将不在是旧系统根下的而是新根下即被指定的新的位置的目录结构和文件因此它带来的好处大致有以下3个
**增加了系统的安全性,限制了用户的权力:**
在经过 chroot 之后,在新根下将访问不到旧系统的根目录结构和文件,这样就增强了系统的安全性。这个一般是在登录 (login) 前使用 chroot以此达到用户不能访问一些特定的文件。
**建立一个与原系统隔离的系统目录结构,方便用户的开发:**
使用 chroot 后,系统读取的是新根下的目录和文件,这是一个与原系统根下文件不相关的目录结构。在这个新的环境中,可以用来测试软件的静态编译以及一些与系统不相关的独立开发。
**切换系统的根目录位置,引导 Linux 系统启动以及急救系统等:**
chroot 的作用就是切换系统的根位置,而这个作用最为明显的是在系统初始引导磁盘的处理过程中使用,从初始 RAM 磁盘 (initrd) 切换系统的根位置并执行真正的 init。另外当系统出现一些问题时我们也可以使用 chroot 来切换到一个临时的系统。
### 语法
```
chroot(选项)(参数)
```
### 选项
```
--help在线帮助
--version显示版本信息。
```
### 参数
* 目录:指定新的根目录;
* 指令:指定要执行的指令。
### 实例
**将target作为根目录运行其中的`/bin/sh`:**
```
chroot target /bin/sh
```
这里,target是busybox安装好的路径类似一个文件系统包含了许多工具。这样将会进入一个shell界面这个shell以target为根。运行exit退出该shell又返回原来的本机环境了也可以使用Ctrl+D。
注意:
* 根用户才行
* 如果直接chroot target默认寻找target的/bin/bash.这会以target作为根目录
将target作为根目录(运行其中的`/bin/ls`):
```
chroot target /bin/ls
```
这里target是busybox安装好的路径类似一个文件系统包含了许多工具。这样运行的是target中的ls不是本机的`/bin/ls`),然后返回立即本机的目录环境。
注意自己在本地编译一个程序生成a.out之后拷进`target/bin/`中这样运行却不行,因为它包含了动态连接的库需要用ldd查看a.out需要那些动态库将这些库拷贝到新根的对应路径下才能执行。
**用chroot运行自己编译的一个程序**
准备chroot的根目录
```
mkdir newRoot
```
编译自己的程序:
```
gcc main.c
```
这里main.c生成a.out功能是输出hello。
查看程序需要的库:
```
ldd a.out
```
输入之后,输出如下:
```
linux-gate.so.1 = &gt; (0xb8034000)
libc.so.6 = &gt; /lib/tls/i686/cmov/libc.so.6 (0xb7eab000)
/lib/ld-linux.so.2 (0xb801a000)
```
将程序需要的库和程序拷贝到新根目录下:
```
cp a.out newRoot
mkdir newRoot/lib
cp /lib/tls/i686/cmov/libc.so.6 newRoot/lib
cp /lib/ld-linux.so.2 newRoot/lib
```
这里newRoot内容将如下
```
a.out lib/
```
使用chroot运行自己的程序
```
su
chroot newRoot /a.out
```
这样就能够正确运行a.out了因为a.out使用到了其他的动态连接库所以需要将库拷贝到newRoot中如果没有其他库那么直接拷贝a.out就能运行。例如静态编译后的busybox其安装目录中的`/bin/busybox`就没有依赖其他库。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,93 @@
chsh
===
用来更换登录系统时使用的shell
## 补充说明
**chsh命令** 用来更换登录系统时使用的shell。若不指定任何参数与用户名称则chsh会以应答的方式进行设置。
### 语法
```
chsh(选项)(参数)
```
### 选项
```
-s<shell >或--shell<shell >更改系统预设的shell环境。
-l或--list-shells列出目前系统可用的shell清单
-u或--help在线帮助
-v或-version显示版本信息。
```
### 参数
用户名要改变默认shell的用户。
### 实例
**查看系统安装了哪些shell的两种方法**
第一种:
```
[rocrocket@localhost ~]$ chsh -l
/bin/sh
/bin/bash
/sbin/nologin
/bin/zsh
```
第二种:
```
[rocrocket@localhost ~]$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/zsh
```
其实`chsh -l`也是来查看这个文件。
**查看当前正在使用的shell**
```
[rocrocket@localhost ~]$ echo $SHELL
/bin/bash
```
注意SHELL一定要是大写。可以看到目前使用的shell是`/bin/bash`
**把我的shell改成zsh**
```
[rocrocket@localhost ~]$ chsh -s /bin/zsh
Changing shell for rocrocket.
Password:
Shell changed.
[rocrocket@localhost ~]$
```
使用chsh加选项`-s`就可以修改登录的shell了你会发现你现在执行`echo $SHELL`后仍然输出为`/bin/bash`这是因为你需要重启你的shell才完全投入到zsh怀抱中去。`chsh -s`其实修改的就是`/etc/passwd`文件里和你的用户名相对应的那一行。现在来查看下:
```
[rocrocket@localhost ~]$ cat /etc/passwd|grep ^rocrocket
rocrocket:x:500:500:rocrocket,China:/rocrocket/PSB/home:/bin/zsh
```
你可以发现输出内容的最后部分已经变成了`/bin/zsh`了下次重启的时候linux就会读取这一命令来启动shell了
**把shell修改回/bin/bash**
```
[rocrocket@localhost ~]$ chsh -s /bin/bash
Changing shell for rocrocket.
Password:
Shell changed.
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,50 @@
cksum
===
检查文件的CRC是否正确
## 补充说明
**cksum命令** 是检查文件的CRC是否正确确保文件从一个系统传输到另一个系统的过程中不被损坏。这种方法要求校验和在源系统中被计算出来在目的系统中又被计算一次两个数字进行比较如果校验和相等则该文件被认为是正确传输了。
注意CRC是指一种排错检查方法即循环冗余校验法。
指定文件交由cksum命令进行校验后会返回校验结果供用户核对文件是否正确无误。若不指定任何文件名称或是所给予的文件名为"-"则cksum命令会从标准输入设备中读取数据。
### 语法
```
cksum(选项)(参数)
```
### 选项
```
--help在线帮助
--version显示版本信息。
```
### 参数
文件:指定要计算校验的版本信息。
### 实例
使用cksum命令计算文件"testfile1"的完整性,输入如下命令:
```
cksum testfile1 #对指定文件进行CRC校验
```
以上命令执行后,将输出校验码等相关的信息,具体输出信息如下所示:
```
1263453430 78 testfile1 #输出信息
```
上面的输出信息中,"1263453430"表示校验码,"78"表示字节数。
注意如果文件中有任何字符被修改都将改变计算后CRC校验码的值。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,21 @@
clear
===
清除当前屏幕终端上的任何信息
## 补充说明
**clear命令** 用于清除当前屏幕终端上的任何信息。
### 语法
```
clear
```
### 实例
直接输入clear命令当前终端上的任何信息就可被清除。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,49 @@
clock
===
用于调整 RTC 时间。
## 补充说明
**clock命令**用于调整 RTC 时间。 RTC 是电脑内建的硬件时间,执行这项指令可以显示现在时刻,调整硬件时钟的时间,将系统时间设成与硬件时钟之时间一致,或是把系统时间回存到硬件时钟。
### 语法
```
clock [--adjust][--debug][--directisa][--getepoch][--hctosys][--set --date="<日期时间>"]
[--setepoch --epoch=< >][--show][--systohc][--test][--utc][--version]
```
### 选项
```
--adjust  第一次使用"--set"或"--systohc"参数设置硬件时钟,会在/etc目录下产生一个名称为adjtime的文件。当再次使用这两个参数调整硬件时钟此文件便会记录两次调整间之差异日后执行clock指令加上"--adjust"参数时,程序会自动根 据记录文件的数值差异,计算出平均值,自动调整硬件时钟的时间。
--debug  详细显示指令执行过程,便于排错或了解程序执行的情形。
--directisa  告诉clock指令不要通过/dev/rtc设备文件直接对硬件时钟进行存取。这个参数适用于仅有ISA总线结构的老式电脑。
--getepoch  把系统核心内的硬件时钟新时代数值,呈现到标准输出设备。
--hctosys  Hardware Clock to System Time把系统时间设成和硬件时钟一致。由于这个动作将会造成系统全面更新文件的存取时间所以最好在系统启动时就执行它。
--set--date  设置硬件时钟的日期和时间。
--setepoch--epoch=<年份>  设置系统核心之硬件时钟的新时代数值,年份以四位树字表示。
--show  读取硬件时钟的时间,并将其呈现至标准输出设备。
--systohc  System Time to Hardware Clock将系统时间存回硬件时钟内。
--test  仅作测试,并不真的将时间写入硬件时钟或系统时间。
--utc  把硬件时钟上的时间时为CUT有时也称为UTC或UCT。
--version  显示版本信息。
```
### 实例
获取当前的时间
```bash
clock # 获取当前的时间
```
显示UTC时间
```bash
clock -utc #显示UTC时间
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,59 @@
clockdiff
===
检测两台linux主机的时间差
## 补充说明
在ip报文的首部和ICMP报文的首部都可以放入时间戳数据。 **clockdiff** 程序正是使用时间戳来测算目的主机和本地主机的系统时间差。
### 选项
```
-o使用IP时间戳选项来测量系统时间差。时间戳只用3个。
-o1使用IP时间戳选项来测量系统时间差。用4个时间戳。如果-o和-o1都没有设置那么就是用ICMP时间戳来测试系统时间差。
```
### 实例
```
lixi@lixi-desktop:~$ ping -T tsandaddr www.ustc.edu.cn -c 1
PING www.ustc.edu.cn (202.38.64.9) 56(124) bytes of data.
64 bytes from 202.38.64.9: icmp_seq=1 ttl=62 time=0.823 ms
TS: lixi-desktop.local (210.45.74.25) 12522473 absolute
210.45.74.1 -251
local-gw.ustc.edu.cn (202.38.64.126) 248
202.38.64.9 -857514
Unrecorded hops: 3
--- www.ustc.edu.cn ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.823/0.823/0.823/0.000 ms
```
首先由上面的得出在RRT不大的时候几个ICMP时间戳的关系。本地主机和202.38.64.9之间的时间差约为:-857514+248-251=-857517。分别用-oIP选项中时间戳和不带选项ICMP路由时间戳上述路由的系统时间进行测试。得到的结果
```
lixi@lixi-desktop:~# ./clockdiff -o 202.38.64.9
..................................................
host=202.38.64.9 rtt=1(0)ms/1ms delta=-857517ms/-857517ms Wed Dec 17 11:28:30 2008
```
```
lixi@lixi-desktop:~# ./clockdiff 202.38.64.9
.
host=202.38.64.9 rtt=750(187)ms/0ms delta=-857517ms/-857517ms Wed Dec 17 11:28:35 2008
```
两种方法测试的都比较准确。
```
lixi@lixi-desktop:~#./clockdiff gigagate1.Princeton.EDU
..................................................
host=gigagate1.Princeton.EDU rtt=307(21)ms/271ms delta=-5ms/-5ms Wed Dec 17 11:50:16 2008
```
上面是测试一个RTT较大的目的主机和本地主机的系统时间差。不过在使用clockdiff的时候需要一点运气因为很多路由会忽略ICMP或IP时间戳。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,63 @@
cmp
===
比较两个文件是否有差异
## 补充说明
**cmp命令** 用来比较两个文件是否有差异。当相互比较的两个文件完全一样时,则该指令不会显示任何信息。若发现有差异,预设会标示出第一个不通之处的字符和列数编号。若不指定任何文件名称或是所给予的文件名为“-”则cmp指令会从标准输入设备读取数据。
### 语法
```
cmp(选项)(参数)
```
### 选项
```
-c或--print-chars除了标明差异处的十进制字码之外一并显示该字符所对应字符
-i<字符数目>或--ignore-initial=<字符数目>:指定一个数目;
-l或——verbose标示出所有不一样的地方
-s或--quiet或——silent不显示错误信息
-v或——version显示版本信息
--help在线帮助。
```
### 参数
目录:比较两个文件的差异。
### 实例
使用cmp命令比较文件"testfile"和文件"testfile1"两个文件,则输入下面的命令:
```
cmp testfile testfile1 #比较两个指定的文件
```
在上述指令执行之前使用cat命令查看两个指定的文件内容如下所示
```
cat testfile #查看文件内容
Absncn 50 #显示文件“testfile”
Asldssja 60
Jslkadjls 85
cat testfile1 #查看文件内容
Absncn 50 #显示文件“testfile1”
AsldssjE 62
Jslkadjls 85
```
然后再执行cmp命令并返回比较结果具体如下所示
```
cmp testfile testfile1 #比较两个文件
testfile testfile1 #有差异第8字节第2行
```
注意:在比较结果中,只能够显示第一比较结果。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,26 @@
col
===
过滤控制字符
## 补充说明
**col命令** 是一个标准输入文本过滤器它从标注输入设备读取文本内容并把内容显示到标注输出设备。在许多UNIX说明文件里都有RLF控制字符。当我们运用shell特殊字符`>`和`>>`把说明文件的内容输出成纯文本文件时控制字符会变成乱码col命令则能有效滤除这些控制字符。
### 语法
```
col(选项)
```
### 选项
```
-b过滤掉所有的控制字符包括RLF和HRLF
-f滤掉RLF字符但允许将HRLF字符呈现出来
-x以多个空格字符来表示跳格字符
-l<缓冲区列数>预设的内存缓冲区有128列用户可以自行指定缓冲区的大小。
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,22 @@
colrm
===
删除文件中的指定列
## 补充说明
**colrm命令** 用于删除文件中的指定列。colrm命令从标准输入设备读取书记转而输出到标准输出设备。如果不加任何参数则colrm命令不会过滤任何一行。
### 语法
```
colrm(参数)
```
### 参数
* 起始列号:指定要删除的指定列;
* 结尾列号:指定要删除的结尾列。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,144 @@
comm
===
两个文件之间的比较
## 补充说明
**comm命令** 可以用于两个文件之间的比较,它有一些选项可以用来调整输出,以便执行交集、求差、以及差集操作。
* 交集:打印出两个文件所共有的行。
* 求差:打印出指定文件所包含的且不相同的行。
* 差集:打印出包含在一个文件中,但不包含在其他指定文件中的行。
### 语法
```bash
comm [选项]... 文件1 文件2
```
### 选项
```
如果不附带选项,程序会生成三列输出。
第一列包含文件1 特有的行,
第二列包含文件2 特有的行,
而第三列包含两个文件共有的行。
-1 不输出文件1 特有的行
-2 不输出文件2 特有的行
-3 不输出两个文件共有的行
--check-order 检查输入是否被正确排序,即使所有输入行均成对
--nocheck-order 不检查输入是否被正确排序
--output-delimiter=STR 依照STR 分列
```
### 参数
* 文件1指定要比较的第一个**有序**文件;
* 文件2指定要比较的第二个**有序**文件。
### 实例
文本 `aaa.txt` 内容
```
[root@localhost text]# cat aaa.txt
aaa
bbb
ccc
ddd
eee
111
222
```
文本 `bbb.txt` 内容
```
[root@localhost text]# cat bbb.txt
bbb
ccc
aaa
hhh
ttt
jjj
```
两个文件之间的比较,如果没有排序需要带上`--nocheck-order`参数
```
[root@localhost text]# comm --nocheck-order aaa.txt bbb.txt
aaa
bbb
ccc
aaa
ddd
eee
111
222
hhh
ttt
jjj
第一列 第二列 第三列
```
输出的第一列只包含在aaa.txt中出现的行第二列包含在bbb.txt中出现的行第三列包含在aaa.txt和bbb.txt中相同的行。各列是以制表符\t作为定界符。
**交集**
打印两个文件的交集,需要删除第一列和第二列:
```
[root@localhost text]# comm aaa.txt bbb.txt -1 -2
bbb
ccc
```
**求差**
打印出两个文件中不相同的行,需要删除第三列:
```
[root@localhost text]# comm aaa.txt bbb.txt -3 | sed 's/^\t//'
aaa
aaa
ddd
eee
111
222
hhh
ttt
jjj
```
`sed 's/^\t//'` 是将制表符`\t`删除,以便把两列合并成一列。
**差集**
通过删除不需要的列可以得到aaa.txt和bbb.txt的差集
aaa.txt的差集
```
[root@localhost text]# comm aaa.txt bbb.txt -2 -3
aaa
ddd
eee
111
222
```
bbb.txt的差集
```
[root@localhost text]# comm aaa.txt bbb.txt -1 -3
aaa
hhh
ttt
jjj
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,35 @@
command
===
调用并执行指定的命令
## 补充说明
**command命令** 调用指定的指令并执行命令执行时不查询shell函数。command命令只能够执行shell内部的命令。
### 语法
```
command(参数)
```
### 参数
指令:需要调用的指令及参数。
### 实例
使用command命令调用执行`echo Linux`,输入如下命令:
```
command echo Linux #调用执行shell内部指令
```
上面的命令执行后,将调用执行命令`echo Linux`,其执行结果如下:
```
Linux
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,68 @@
compress
===
使用Lempress-Ziv编码压缩数据文件
## 补充说明
**compress命令** 使用“Lempress-Ziv”编码压缩数据文件。compress是个历史悠久的压缩程序文件经它压缩后其名称后面会多出".Z"的扩展名。当要解压缩时可执行uncompress指令。事实上uncompress是指向compress的符号连接因此不论是压缩或解压缩都可通过compress指令单独完成。
### 语法
```
compress(选项)(参数)
```
### 选项
```
-f不提示用户强制覆盖掉目标文件
-c将结果送到标准输出无文件被改变
-r递归的操作方式
-b<压缩效率>压缩效率是一个介于9~16的数值预设值为"16",指定愈大的数值,压缩效率就愈高;
-d对文件进行解压缩而非压缩
-v显示指令执行过程
-V显示指令版本及程序预设值。
```
### 参数
文件:指定要压缩的文件列表。
### 实例
将`/etc/man.config`复到`/tmp` ,并加以压缩
```
[root@localhost ~]# cd /tmp
[root@localhost tmp]# cp /etc/man.config .
[root@localhost tmp]# compress man.config
[root@localhost tmp]# ls -l
```
```
-rw-r--r-- 1 root root 2605 Jul 27 11:43 man.config.Z
```
将刚刚的压缩档解开
```
[root@localhost tmp]# compress -d man.config.Z
```
将 man.config 压缩成另外一个文件来备份
```
[root@localhost tmp]# compress -c man.config > man.config.back.Z
[root@localhost tmp]# ll man.config*
```
```
-rw-r--r-- 1 root root 4506 Jul 27 11:43 man.config
-rw-r--r-- 1 root root 2605 Jul 27 11:46 man.config.back.Z
```
这个`-c`的选项比较有趣会将压缩过程的资料输出到屏幕上而不是写入成为file.Z文件。所以我们可以透过资料流重导向的方法将资料输出成为另一个档名。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,24 @@
consoletype
===
输出已连接的终端类型
## 补充说明
**consoletype命令** 用于打印已连接的终端类型到标准输出,并能够检查已连接的终端是当前终端还是虚拟终端。
### 语法
```
consoletype
```
### 实例
```
[root@localhost ~]# consoletype
pty
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,38 @@
convertquota
===
把老的配额文件转换为新的格式
## 补充说明
**convertquota命令** 用于将老的磁盘额数据文件“quota.user”和“quota.group”转换为新格式的文件“quota.user”和“quota.group”
### 语法
```
convertquota(选项)(参数)
```
### 选项
```
-u仅转换用户磁盘配额数据文件
-g仅转换组磁盘配额数据文件
-f将老的磁盘配额文件转换为新的格式
-e将新的文件格式从大字节序换为小字节序。
```
### 参数
文件系统:指定要转换磁盘配额数据文件格式的文件系统(硬盘分区)。
### 实例
使用convertquota指令转换指定文件系统`/data`的磁盘配额数据文件。在命令行中输入下面的命令:
```
convertquota -u /data //转换文件系统"/data"上的用户磁盘配额文件
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,99 @@
cp
===
将源文件或目录复制到目标文件或目录中
## 补充说明
**cp命令** 用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件当一次复制多个文件时目标文件参数必须是一个已经存在的目录否则将出现错误。
### 语法
```
cp(选项)(参数)
```
### 选项
```
-a此参数的效果和同时指定"-dpR"参数相同;
-d当复制符号连接时把目标文件或目录也建立为符号连接并指向与源文件或目录连接的原始文件或目录
-f强行复制文件或目录不论目标文件或目录是否已存在
-i覆盖既有文件之前先询问用户
-l对源文件建立硬连接而非复制文件
-p保留源文件或目录的属性
-R/r递归处理将指定目录下的所有文件与子目录一并处理
-s对源文件建立符号连接而非复制文件
-u使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时才复制文件
-S在备份文件时用指定的后缀“SUFFIX”代替文件的默认后缀
-b覆盖已存在的文件目标前将目标文件备份
-v详细显示命令执行的操作。
```
### 参数
* 源文件制定源文件列表。默认情况下cp命令不能复制目录如果要复制目录则必须使用`-R`选项;
* 目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。
### 实例
下面的第一行中是 cp 命令和具体的参数(-r 是“递归”, -u 是“更新”,-v 是“详细”)。接下来的三行显示被复制文件的信息,最后一行显示命令行提示符。这样,只拷贝新的文件到我的存储设备上,我就使用 cp 的“更新”和“详细”选项。
通常来说,参数 `-r` 也可用更详细的风格 `--recursive`。但是以简短的方式,也可以这么连用 `-ruv`
```
cp -r -u -v /usr/men/tmp ~/men/tmp
```
版本备份 `--backup=numbered` 参数意思为“我要做个备份,而且是带编号的连续备份”。所以一个备份就是 1 号,第二个就是 2 号,等等。
```bash
$ cp --force --backup=numbered test1.py test1.py
$ ls
test1.py test1.py.~1~ test1.py.~2~
```
如果把一个文件复制到一个目标文件中,而目标文件已经存在,那么,该目标文件的内容将被破坏。此命令中所有参数既可以是绝对路径名,也可以是相对路径名。通常会用到点`.`或点点`..`的形式。例如,下面的命令将指定文件复制到当前目录下:
```
cp ../mary/homework/assign .
```
所有目标文件指定的目录必须是己经存在的cp命令不能创建目录。如果没有文件复制的权限则系统会显示出错信息。
将文件file复制到目录`/usr/men/tmp`下并改名为file1
```
cp file /usr/men/tmp/file1
```
将目录`/usr/men`下的所有文件及其子目录复制到目录`/usr/zh`中
```
cp -r /usr/men /usr/zh
```
交互式地将目录`/usr/men`中的以m打头的所有.c文件复制到目录`/usr/zh`中
```
cp -i /usr/men m*.c /usr/zh
```
我们在Linux下使用cp命令复制文件时候有时候会需要覆盖一些同名文件覆盖文件的时候都会有提示需要不停的按Y来确定执行覆盖。文件数量不多还好但是要是几百个估计按Y都要吐血了于是折腾来半天总结了一个方法
```
cp aaa/* /bbb
复制目录aaa下所有到/bbb目录下这时如果/bbb目录下有和aaa同名的文件需要按Y来确认并且会略过aaa目录下的子目录。
cp -r aaa/* /bbb
这次依然需要按Y来确认操作但是没有忽略子目录。
cp -r -a aaa/* /bbb
依然需要按Y来确认操作并且把aaa目录以及子目录和文件属性也传递到了/bbb。
\cp -r -a aaa/* /bbb
成功没有提示按Y、传递了目录属性、没有略过目录。
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,96 @@
cpio
===
用来建立、还原备份档的工具程序
## 补充说明
**cpio命令** 主要是用来建立或者还原备份档的工具程序cpio命令可以复制文件到归档包中或者从归档包中复制文件。
### 语法
```
cpio(选项)
```
### 选项
```
-0或--null接受新增列控制字符通常配合find指令的“-print0”参数使用
-a或--rest-access-time重新设置文件的存取时间
-A或--append附加到已存在的备份文档中且这个备份文档必须存放在磁盘上而不能放置于磁带机里
-b或--awap此参数的效果和同时指定“-ss”参数相同
-B将输入/输出的区块大小改成5210Bytes
-c使用旧ASCII备份格式
-C<区块大小>或--io-size=<区块大小>:设置输入/输出的区块大小单位是Byte
-d或--make-directories如有需要cpio会自行建立目录
-E<范本文件>或--pattern-file=<范本文件>指定范本文件其内含有一个或多个范本样式让cpio解开符合范本条件的文件格式为每列一个范本样式
-f或--nonmatching让cpio解开所有不符合范本条件的文件
-F<备份档>或--file=<备份档>:指定备份档的名称,用来取代标准输入或输出,也能借此通过网络使用另一台主机的保存设备存取备份档;
-H<备份格式>:指定备份时欲使用的文件格式;
-i或--extract执行copy-in模式还原备份档
-l<备份档>:指定备份档的名称,用来取代标准输入,也能借此通过网络使用另一台主机的保存设备读取备份档;
-k此参数将忽略不予处理仅负责解决cpio不同版本间的兼容性问题
-l或--link以硬连接的方式取代复制文件可在copy-pass模式下运用
-L或--dereference不建立符号连接直接复制该连接所指向的原始文件
-m或preserve-modification-time不去更改文件的更改时间
-M<回传信息>或--message=<回传信息>:设置更换保存媒体的信息;
-n或--numeric-uid-gid使用“-tv”参数列出备份档的内容时若再加上参数“-n”则会以用户识别和群组识别码替代拥有者和群组名称列出文件清单
-o或--create执行copy-out模式建立备份档
-O<备份档>:指定备份档的名称,用来取代标准输出,也能借此通过网络使用另一台主机的保存设备存放备份档;
-p或--pass-through执行copy-pass模式略过备份步骤直接将文件复制到目的目录
-r或--rename当有文件名称需要更改时采用互动模式
-R<拥有者><:/.><所属群组>或----owner<拥有者><:/.><所属群组> 在copy-in模式还原备份档或copy-pass模式复制文件时可指定这些备份复制的文件的拥有者与所属群组
-s或--swap-bytes交换每队字节的内容
-S或--swap-halfwords交换每半个字节的内容
-t或--list将输入的内容呈现出来
-u或--unconditional置换所有文件不论日期时间的新旧与否皆不予询问而直接覆盖
-v或--verbose详细显示指令的执行过程
-V或--dot执行指令时。在每个文件的执行程序前面加上“.”号;
--block-size=<区块大小>:设置输入/输出的区块大小假如设置数值为5则区块大小为2500若设置成10则区块大小为5120以此类推
--force-local强制将备份档存放在本地主机
--help在线帮助
--no-absolute-filenames使用相对路径建立文件名称
--no-preserve-owner不保留文件的拥有者谁解开了备份档那些文件就归谁所有
-only-verify-crc当备份档采用CRC备份格式时可使用这项参数检查备份档内的每个文件是否正确无误
--quiet不显示复制了多少区块
--sparse倘若一个文件内含有大量的连续0字节则将此文件存在稀疏文件
--version显示版本信息。
```
### 实例
**将`/etc`下的所有普通文件都备份到`/opt/etc.cpio`,使用以下命令:**
```
find /etc type f | cpio ocvB >/opt/etc.cpio
```
**将系统上所有资料备份到磁带机内,使用以下命令:**
```
find / -print | cpio -covB > /dev/st0
```
这里的`/dev/st0`是磁带的设备名代表SCSI磁带机。
**查看上例磁带机上备份的文件,使用以下命令:**
```
cpio -icdvt < /dev/st0 > /tmp/st_content
```
有时可能因为备份的文件过多,一个屏幕无法显示完毕,此时我们利用下面命令,让磁带机的文件信息输出到文件。
**将示例1中的备份包还原到相应的位置如果有相同文件进行覆盖使用以下命令**
```
cpio icduv < /opt/etc.cpio
```
注意cpio恢复的路径如果cpio在打包备份的时候用的是绝对路径那么在恢复的时候会自动恢复到这些绝对路径下本例就会将备份文件全部还原到/etc路径下对应的目录中。同理如果在打包备份用的是相对路径还原时也将恢复到相对路径下。
通过上面的示例可以看出cpio无法直接读取文件它需要每个文件或者目录的完整路径名才能识别读取而find命令的输出刚好做到了这点因此cpio命令一般和find命令配合使用。其实上面的示例我们已经看到了它们的组合用法。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,207 @@
crontab
===
提交和管理用户的需要周期性执行的任务
## 补充说明
**crontab命令** 被用来提交和管理用户的需要周期性执行的任务与windows下的计划任务类似当安装完成操作系统后默认会安装此服务工具并且会自动启动crond进程crond进程每分钟会定期检查是否有要执行的任务如果有要执行的任务则自动执行该任务。
### 语法
```
crontab(选项)(参数)
```
### 选项
```
-e编辑该用户的计时器设置
-l列出该用户的计时器设置
-r删除该用户的计时器设置
-u<用户名称>:指定要设定计时器的用户名称。
```
### 参数
crontab文件指定包含待执行任务的crontab文件。
### 知识扩展
Linux下的任务调度分为两类 **系统任务调度** 和 **用户任务调度** 。
**系统任务调度:** 系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在`/etc`目录下有一个crontab文件这个就是系统任务调度的配置文件。
`/etc/crontab`文件包括下面几行:
```
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""HOME=/
# run-parts
51 * * * * root run-parts /etc/cron.hourly
24 7 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
```
前四行是用来配置crond任务运行的环境变量第一行SHELL变量指定了系统要使用哪个shell这里是bash第二行PATH变量指定了系统执行命令的路径第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户如果MAILTO变量的值为空则表示不发送任务执行信息给用户第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。
**用户任务调度:** 用户定期要执行的工作比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab文件都被保存在`/var/spool/cron`目录中。其文件名与用户名一致,使用者权限文件如下:
```
/etc/cron.deny 该文件中所列用户不允许使用crontab命令
/etc/cron.allow 该文件中所列用户允许使用crontab命令
/var/spool/cron/ 所有用户crontab文件存放的目录,以用户名命名
```
crontab文件的含义用户所建立的crontab文件中每一行都代表一项任务每行的每个字段代表一项设置它的格式共分为六个字段前五段是时间设定段第六段是要执行的命令段格式如下
```
minute hour day month week command 顺序:分 时 日 月 周
```
其中:
* minute 表示分钟可以是从0到59之间的任何整数。
* hour表示小时可以是从0到23之间的任何整数。
* day表示日期可以是从1到31之间的任何整数。
* month表示月份可以是从1到12之间的任何整数。
* week表示星期几可以是从0到7之间的任何整数这里的0或7代表星期日。
* command要执行的命令可以是系统命令也可以是自己编写的脚本文件。
在以上各个字段中,还可以使用以下特殊字符:
* 星号(*代表所有可能的值例如month字段如果是星号则表示在满足其它字段的制约条件后每月都执行该命令操作。
* 逗号(,可以用逗号隔开的值指定一个列表范围例如“1,2,5,7,8,9”
* 中杠(-可以用整数之间的中杠表示一个整数范围例如“2-6”表示“2,3,4,5,6”
* 正斜线(/可以用正斜线指定时间的间隔频率例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用例如*/10如果用在minute字段表示每十分钟执行一次。
**crond服务**
```
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
```
查看crontab服务状态
```
service crond status
```
手动启动crontab服务
```
service crond start
```
查看crontab服务是否已设置为开机启动执行命令
```
ntsysv
```
加入开机自动启动:
```
chkconfig level 35 crond on
```
### 实例
每1分钟执行一次command
```
* * * * * command
```
每小时的第3和第15分钟执行
```
3,15 * * * * command
```
在上午8点到11点的第3和第15分钟执行
```
3,15 8-11 * * * command
```
每隔两天的上午8点到11点的第3和第15分钟执行
```
3,15 8-11 */2 * * command
```
每个星期一的上午8点到11点的第3和第15分钟执行
```
3,15 8-11 * * 1 command
```
每晚的21:30重启smb 
```
30 21 * * * /etc/init.d/smb restart
```
每月1、10、22日的4 : 45重启smb 
```
45 4 1,10,22 * * /etc/init.d/smb restart
```
每周六、周日的1:10重启smb
```
10 1 * * 6,0 /etc/init.d/smb restart
```
每天18 : 00至23 : 00之间每隔30分钟重启smb 
```
0,30 18-23 * * * /etc/init.d/smb restart
```
每星期六的晚上11:00 pm重启smb 
```
0 23 * * 6 /etc/init.d/smb restart
```
每一小时重启smb 
```
* */1 * * * /etc/init.d/smb restart
```
晚上11点到早上7点之间每隔一小时重启smb
```
* 23-7/1 * * * /etc/init.d/smb restart
```
每月的4号与每周一到周三的11点重启smb 
```
0 11 4 * mon-wed /etc/init.d/smb restart
```
一月一号的4点重启smb
```
0 4 1 jan * /etc/init.d/smb restart
```
每小时执行`/etc/cron.hourly`目录内的脚本
```
01 * * * * root run-parts /etc/cron.hourly
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,76 @@
csplit
===
将一个大文件分割成小的碎片文件
## 补充说明
**csplit命令** 用于将一个大文件分割成小的碎片并且将分割后的每个碎片保存成一个文件。碎片文件的命名类似“xx00”“xx01”。csplit命令是split的一个变体split只能够根据文件大小或行数来分割但csplit能够根据文件本身特点来分割文件。
### 语法
```
csplit(选项)(参数)
```
### 选项
```
-b<输出格式>或--suffix-format=<输出格式>预设的输出格式其文件名称为xx00xx01等用户可以通过改变<输出格式>来改变输出的文件名;
-f<输出字首字符串>或--prefix=<输出字首字符串>预设的输出字首字符串其文件名为xx00xx01等如果制定输出字首字符串为“hello”则输出的文件名称会变成hello00hello、01......
-k或--keep-files保留文件就算发生错误或中断执行与不能删除已经输出保存的文件
-n<输出文件名位数>或--digits=<输出文件名位数>预设的输出文件名位数其文件名称为xx00xx01......如果用户指定输出文件名位数为“3”则输出的文件名称会变成xx000xx001等
-q或-s或--quiet或——silent不显示指令执行过程
-z或--elide-empty-files删除长度为0 Byte文件。
```
### 参数
* 文件:指定要分割的原文件;
* 模式:指定要分割文件时的匹配模式。
### 实例
示例测试文件 server.log
```
cat server.log
SERVER-1
[con] 10.10.10.1 suc
[con] 10.10.10.2 fai
[dis] 10.10.10.3 pen
[con] 10.10.10.4 suc
SERVER-2
[con] 10.10.10.5 suc
[con] 10.10.10.6 fai
[dis] 10.10.10.7 pen
[con] 10.10.10.8 suc
SERVER-3
[con] 10.10.10.9 suc
[con] 10.10.10.10 fai
[dis] 10.10.10.11 pen
[con] 10.10.10.12 suc
```
需要将server.log分割成server1.log、server2.log、server3.log这些文件的内容分别取自原文件中不同的SERVER部分
```
[root@localhost split]# csplit server.log /SERVER/ -n2 -s {*} -f server -b "%02d.log"; rm server00.log
[root@localhost split]# ls
server01.log server02.log server03.log server.log
```
**命令详细说明:**
```
/[正则表达式]/ #匹配文本样式,比如/SERVER/从第一行到包含SERVER的匹配行。
{*} #表示根据匹配重复执行分割,直到文件尾停止,使用{整数}的形式指定分割执行的次数。
-s #静默模式,不打印其他信息。
-n #指定分割后的文件名后缀的数字个数。比如01、02、03等。
-f #指定分割后的文件名前缀。
-b #指定后缀格式。比如%02d.log类似于C语言中的printf参数格式。
rm server00.log #是删除第一个文件,因为分割后的的第一个文件没有内容,匹配的单词就位于文件的第一行中。
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,49 @@
cu
===
用于连接另一个系统主机。
## 补充说明
**cu命令** 用于连接另一个系统主机。cu(call up)指令可连接另一台主机,并采用类似拨号终端机的接口工作,也可执行简易的文件传输作业。
### 语法
```
cu [dehnotv][-a<通信端口>][-c<电话号码>][-E<脱离字符>][-I<设置文件>][-l<外围设备代号>]
[-s<连线速率>][-x<排错模式>][-z<系统主机>][--help][-nostop][--parity=none][<系统主机>/<电话号码>]
```
### 选项
```
-a<通信端口>或-p<通信端口>或--port<通信端口> 使用指定的通信端口进行连线。
-c<电话号码>或--phone<电话号码> 拨打该电话号码。
-d 进入排错模式。
-e或--parity=even 使用双同位检查。
-E<脱离字符>或--escape<脱离字符> 设置脱离字符。
-h或--halfduple 使用半双工模式。
-I<配置文件>或--config<配置文件> 指定要使用的配置文件。
-l<外围设备代号>或--line<外围设备代号> 指定某项外围设备,作为连接的设备。
-n或--prompt 拨号时等待用户输入电话号码。
-o或--parity=odd 使用单同位检查。
-s<连线速率>或--speed<连线速率>或--baud<连线速率>或-<连线速率> 设置连线的速率,单位以鲍率计算。
-t或--maper 把CR字符置换成LF+CR字符。
-v或--version 显示版本信息。
-x<排错模式>或--debug<排错模式> 使用排错模式。
-z<系统主机>或--system<系统主机> 连接该系统主机。
--help 在线帮助。
--nostop 关闭Xon/Xoff软件流量控制。
--parity=none 不使用同位检查。
```
### 实例
与远程主机连接
```
cu -c 0102377765
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,32 @@
cupsdisable
===
停止指定的打印机
## 补充说明
**cupsdisable命令** 用于停止指定的打印机。
### 语法
```
cupsdisable(选项)(参数)
```
### 选项
```
-E当连接到服务器时强制使用加密
-U指定连接服务器时使用的用户名
-u指定打印任务所属的用户
-c取消指定打印机的所有打印任务
-h指定连接的服务器名和端口号
-r停止打印机的原因。
```
### 参数
目标:指定目标打印机。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,30 @@
cupsenable
===
启动指定的打印机
## 补充说明
**cupsenable命令** 用于启动指定的打印机。
### 语法
```
cupsenable(选项)(参数)
```
### 选项
```
-E当连接到服务器时强制使用加密
-U指定连接服务器时使用的用户名
-u指定打印任务所属的用户
-h指定连接的服务器名和端口号
```
### 参数
目标:指定目标打印机。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,260 @@
curl
===
利用URL规则在命令行下工作的文件传输工具
## 补充说明
**curl命令** 是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载所以是综合传输工具但按传统习惯称curl为下载工具。作为一款强力工具curl支持包括HTTP、HTTPS、ftp等众多协议还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化curl可以祝一臂之力。
### 语法
```
curl(选项)(参数)
```
### 选项
<table border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr><td>-a/--append</td><td>上传文件时,附加到目标文件</td></tr>
<tr><td>-A/--user-agent <string></td><td>设置用户代理发送给服务器</td></tr>
<tr><td>-anyauth</td><td>可以使用“任何”身份验证方法</td></tr>
<tr><td>-b/--cookie <name=string/file></td><td>cookie字符串或文件读取位置</td></tr>
<tr><td>     --basic</td><td>使用HTTP基本验证</td></tr>
<tr><td>-B/--use-ascii</td><td>使用ASCII /文本传输</td></tr>
<tr><td>-c/--cookie-jar <file></td><td>操作结束后把cookie写入到这个文件中</td></tr>
<tr><td>-C/--continue-at <offset></td><td>断点续传</td></tr>
<tr><td>-d/--data <data></td><td>HTTP POST方式传送数据</td></tr>
<tr><td>     --data-ascii <data></td><td>以ascii的方式post数据</td></tr>
<tr><td>     --data-binary <data></td><td>以二进制的方式post数据</td></tr>
<tr><td>     --negotiate</td><td>使用HTTP身份验证</td></tr>
<tr><td>     --digest</td><td>使用数字身份验证</td></tr>
<tr><td>     --disable-eprt</td><td>禁止使用EPRT或LPRT</td></tr>
<tr><td>     --disable-epsv</td><td>禁止使用EPSV</td></tr>
<tr><td>-D/--dump-header <file></td><td>把header信息写入到该文件中</td></tr>
<tr><td>     --egd-file <file></td><td>为随机数据(SSL)设置EGD socket路径</td></tr>
<tr><td>     --tcp-nodelay</td><td>使用TCP_NODELAY选项</td></tr>
<tr><td>-e/--referer</td><td>来源网址</td></tr>
<tr><td>-E/--cert <cert:[passwd]></td><td>客户端证书文件和密码 (SSL)</td></tr>
<tr><td>     --cert-type <type></td><td>证书文件类型 (DER/PEM/ENG) (SSL)</td></tr>
<tr><td>     --key <key></td><td>私钥文件名 (SSL)</td></tr>
<tr><td>     --key-type <type></td><td>私钥文件类型 (DER/PEM/ENG) (SSL)</td></tr>
<tr><td>     --pass <pass></td><td>私钥密码 (SSL)</td></tr>
<tr><td>     --engine <eng></td><td>加密引擎使用 (SSL). "--engine list" for list</td></tr>
<tr><td>     --cacert <file></td><td>CA证书 (SSL)</td></tr>
<tr><td>     --capath <directory></td><td>CA目录 (made using c_rehash) to verify peer against (SSL)</td></tr>
<tr><td>     --ciphers <list></td><td>SSL密码</td></tr>
<tr><td>     --compressed</td><td>要求返回是压缩的形势 (using deflate or gzip)</td></tr>
<tr><td>     --connect-timeout <seconds></td><td>设置最大请求时间</td></tr>
<tr><td>     --create-dirs</td><td>建立本地目录的目录层次结构</td></tr>
<tr><td>     --crlf</td><td>上传是把LF转变成CRLF</td></tr>
<tr><td>-f/--fail</td><td>连接失败时不显示http错误</td></tr>
<tr><td>     --ftp-create-dirs</td><td>如果远程目录不存在,创建远程目录</td></tr>
<tr><td>     --ftp-method [multicwd/nocwd/singlecwd]</td><td>控制CWD的使用</td></tr>
<tr><td>     --ftp-pasv</td><td>使用 PASV/EPSV 代替端口</td></tr>
<tr><td>     --ftp-skip-pasv-ip</td><td>使用PASV的时候,忽略该IP地址</td></tr>
<tr><td>     --ftp-ssl</td><td>尝试用 SSL/TLS 来进行ftp数据传输</td></tr>
<tr><td>     --ftp-ssl-reqd</td><td>要求用 SSL/TLS 来进行ftp数据传输</td></tr>
<tr><td>-F/--form <name=content></td><td>模拟http表单提交数据</td></tr>
<tr><td>     --form-string <name=string></td><td>模拟http表单提交数据</td></tr>
<tr><td>-g/--globoff</td><td>禁用网址序列和范围使用{}和[]</td></tr>
<tr><td>-G/--get</td><td>以get的方式来发送数据</td></tr>
<tr><td>-H/--header <line></td><td>自定义头信息传递给服务器</td></tr>
<tr><td>     --ignore-content-length</td><td>忽略的HTTP头信息的长度</td></tr>
<tr><td>-i/--include</td><td>输出时包括protocol头信息</td></tr>
<tr><td>-I/--head</td><td>只显示请求头信息</td></tr>
<tr><td>-j/--junk-session-cookies</td><td>读取文件进忽略session cookie</td></tr>
<tr><td>     --interface <interface></td><td>使用指定网络接口/地址</td></tr>
<tr><td>     --krb4 <level></td><td>使用指定安全级别的krb4</td></tr>
<tr><td>-k/--insecure</td><td>允许不使用证书到SSL站点</td></tr>
<tr><td>-K/--config</td><td>指定的配置文件读取</td></tr>
<tr><td>-l/--list-only</td><td>列出ftp目录下的文件名称</td></tr>
<tr><td>     --limit-rate <rate></td><td>设置传输速度</td></tr>
<tr><td>     --local-port<NUM></td><td>强制使用本地端口号</td></tr>
<tr><td>-m/--max-time <seconds></td><td>设置最大传输时间</td></tr>
<tr><td>     --max-redirs <num></td><td>设置最大读取的目录数</td></tr>
<tr><td>     --max-filesize <bytes></td><td>设置最大下载的文件总量</td></tr>
<tr><td>-M/--manual</td><td>显示全手动</td></tr>
<tr><td>-n/--netrc</td><td>从netrc文件中读取用户名和密码</td></tr>
<tr><td>     --netrc-optional</td><td>使用 .netrc 或者 URL来覆盖-n</td></tr>
<tr><td>     --ntlm</td><td>使用 HTTP NTLM 身份验证</td></tr>
<tr><td>-N/--no-buffer</td><td>禁用缓冲输出</td></tr>
<tr><td>-o/--output</td><td>把输出写到该文件中</td></tr>
<tr><td>-O/--remote-name</td><td>把输出写到该文件中,保留远程文件的文件名</td></tr>
<tr><td>-p/--proxytunnel</td><td>使用HTTP代理</td></tr>
<tr><td>     --proxy-anyauth</td><td>选择任一代理身份验证方法</td></tr>
<tr><td>     --proxy-basic</td><td>在代理上使用基本身份验证</td></tr>
<tr><td>     --proxy-digest</td><td>在代理上使用数字身份验证</td></tr>
<tr><td>     --proxy-ntlm</td><td>在代理上使用ntlm身份验证</td></tr>
<tr><td>-P/--ftp-port <address></td><td>使用端口地址而不是使用PASV</td></tr>
<tr><td>-q</td><td>作为第一个参数,关闭 .curlrc</td></tr>
<tr><td>-Q/--quote <cmd></td><td>文件传输前,发送命令到服务器</td></tr>
<tr><td>-r/--range <range></td><td>检索来自HTTP/1.1或FTP服务器字节范围</td></tr>
<tr><td>--range-file</td><td>读取SSL的随机文件</td></tr>
<tr><td>-R/--remote-time</td><td>在本地生成文件时,保留远程文件时间</td></tr>
<tr><td>     --retry <num></td><td>传输出现问题时,重试的次数</td></tr>
<tr><td>     --retry-delay <seconds></td><td>传输出现问题时,设置重试间隔时间</td></tr>
<tr><td>     --retry-max-time <seconds></td><td>传输出现问题时,设置最大重试时间</td></tr>
<tr><td>-s/--silent</td><td>静默模式。不输出任何东西</td></tr>
<tr><td>-S/--show-error</td><td>显示错误</td></tr>
<tr><td>     --socks4 <host[:port]></td><td>用socks4代理给定主机和端口</td></tr>
<tr><td>     --socks5 <host[:port]></td><td>用socks5代理给定主机和端口</td></tr>
<tr><td>     --stderr <file></td><td> </td></tr>
<tr><td>-t/--telnet-option <OPT=val></td><td>Telnet选项设置</td></tr>
<tr><td>     --trace <file></td><td>对指定文件进行debug</td></tr>
<tr><td>     --trace-ascii <file></td><td>Like --跟踪但没有hex输出</td></tr>
<tr><td>     --trace-time</td><td>跟踪/详细输出时,添加时间戳</td></tr>
<tr><td>-T/--upload-file <file></td><td>上传文件</td></tr>
<tr><td>     --url <URL></td><td>Spet URL to work with</td></tr>
<tr><td>-u/--user <user[:password]></td><td>设置服务器的用户和密码</td></tr>
<tr><td>-U/--proxy-user <user[:password]></td><td>设置代理用户名和密码</td></tr>
<tr><td>-w/--write-out [format]</td><td>什么输出完成后</td></tr>
<tr><td>-x/--proxy <host[:port]></td><td>在给定的端口上使用HTTP代理</td></tr>
<tr><td>-X/--request <command></td><td>指定什么命令</td></tr>
<tr><td>-y/--speed-time</td><td>放弃限速所要的时间默认为30</td></tr>
<tr><td>-Y/--speed-limit</td><td>停止传输速度的限制,速度时间</td></tr>
</tbody>
</table>
### 实例
**文件下载**
curl命令可以用来执行下载、发送各种HTTP请求指定HTTP头部等操作。如果系统没有curl可以使用`yum install curl`安装也可以下载安装。curl是将下载文件输出到stdout将进度信息输出到stderr不显示进度信息使用`--silent`选项。
```
curl URL --silent
```
这条命令是将下载文件输出到终端所有下载的数据都被写入到stdout。
使用选项`-O`将下载的数据写入到文件,必须使用文件的绝对地址:
```
curl http://man.linuxde.net/text.iso --silent -O
```
选项`-o`将下载数据写入到指定名称的文件中,并使用`--progress`显示进度条:
```
curl http://man.linuxde.net/test.iso -o filename.iso --progress
######################################### 100.0%
```
**断点续传**
curl能够从特定的文件偏移处继续下载它可以通过指定一个便宜量来下载部分文件
```
curl URL/File -C 偏移量
#偏移量是以字节为单位的整数如果让curl自动推断出正确的续传位置使用-C -
curl -C -URL
```
**使用curl设置参照页字符串**
参照页是位于HTTP头部中的一个字符串用来表示用户是从哪个页面到达当前页面的如果用户点击网页A中的某个连接那么用户就会跳转到B网页网页B头部的参照页字符串就包含网页A的URL。
使用`--referer`选项指定参照页字符串:
```
curl --referer http://www.google.com http://man.linuxde.net
```
**用curl设置cookies**
使用`--cookie "COKKIES"`选项来指定cookie多个cookie使用分号分隔
```
curl http://man.linuxde.net --cookie "user=root;pass=123456"
```
将cookie另存为一个文件使用`--cookie-jar`选项:
```
curl URL --cookie-jar cookie_file
```
**用curl设置用户代理字符串**
有些网站访问会提示只能使用IE浏览器来访问这是因为这些网站设置了检查用户代理可以使用curl把用户代理设置为IE这样就可以访问了。使用`--user-agent`或者`-A`选项:
```
curl URL --user-agent "Mozilla/5.0"
curl URL -A "Mozilla/5.0"
```
其他HTTP头部信息也可以使用curl来发送使用`-H`"头部信息" 传递多个头部信息,例如:
```
curl -H "Host:man.linuxde.net" -H "accept-language:zh-cn" URL
```
**curl的带宽控制和下载配额**
使用`--limit-rate`限制curl的下载速度
```
curl URL --limit-rate 50k
```
命令中用k千字节和m兆字节指定下载速度限制。
使用`--max-filesize`指定可下载的最大文件大小:
```
curl URL --max-filesize bytes
```
如果文件大小超出限制命令则返回一个非0退出码如果命令正常则返回0。
**用curl进行认证**
使用curl选项 -u 可以完成HTTP或者FTP的认证可以指定密码也可以不指定密码在后续操作中输入密码
```
curl -u user:pwd http://man.linuxde.net
curl -u user http://man.linuxde.net
```
**只打印响应头部信息**
通过`-I`或者`-head`可以只打印出HTTP头部信息
```
[root@localhost text]# curl -I http://man.linuxde.net
HTTP/1.1 200 OK
Server: nginx/1.2.5
date: Mon, 10 Dec 2012 09:24:34 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
X-Pingback: http://man.linuxde.net/xmlrpc.php
```
**get请求**
```bash
curl "http://www.wangchujiang.com" # 如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地
curl -i "http://www.wangchujiang.com" # 显示全部信息
curl -l "http://www.wangchujiang.com" # 只显示头部信息
curl -v "http://www.wangchujiang.com" # 显示get请求全过程解析
```
**post请求**
```bash
curl -d "param1=value1&param2=value2" "http://www.wangchujiang.com"
```
**json格式的post请求**
```bash
curl -l -H "Content-type: application/json" -X POST -d '{"phone":"13521389587","password":"test"}' http://wangchujiang.com/apis/users.json
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,162 @@
cut
===
连接文件并打印到标准输出设备上
## 补充说明
**cut命令** 用来显示行中的指定部分删除文件中指定字段。cut经常用来显示文件的内容类似于下的type命令。
说明该命令有两项功能其一是用来显示文件的内容它依次读取由参数file所指 明的文件,将它们的内容输出到标准输出上;其二是连接两个或多个文件,如`cut fl f2 > f3`将把文件fl和几的内容合并起来然后通过输出重定向符“>”的作用将它们放入文件f3中。
当文件较大时文本在屏幕上迅速闪过滚屏用户往往看不清所显示的内容。因此一般用more等命令分屏显示。为了控制滚屏可以按Ctrl+S键停止滚屏按Ctrl+Q键可以恢复滚屏。按Ctrl+C中断键可以终止该命令的执行并且返回Shell提示符状态。
### 语法
```
cut(选项)(参数)
```
### 选项
```
-b仅显示行中指定直接范围的内容
-c仅显示行中指定范围的字符
-d指定字段的分隔符默认的字段分隔符为“TAB”
-f显示指定字段的内容
-n与“-b”选项连用不分割多字节字符
--complement补足被选择的字节、字符或字段
--out-delimiter=<字段分隔符>:指定输出内容是的字段分割符;
--help显示指令的帮助信息
--version显示指令的版本信息。
```
### 参数
文件:指定要进行内容过滤的文件。
### 实例
例如有一个学生报表信息包含No、Name、Mark、Percent
```
[root@localhost text]# cat test.txt
No Name Mark Percent
01 tom 69 91
02 jack 71 87
03 alex 68 98
```
使用 **-f** 选项提取指定字段:
```
[root@localhost text]# cut -f 1 test.txt
No
01
02
03
```
```
[root@localhost text]# cut -f2,3 test.txt
Name Mark
tom 69
jack 71
alex 68
```
**--complement** 选项提取指定字段之外的列(打印除了第二列之外的列):
```
[root@localhost text]# cut -f2 --complement test.txt
No Mark Percent
01 69 91
02 71 87
03 68 98
```
使用 **-d** 选项指定字段分隔符:
```
[root@localhost text]# cat test2.txt
No;Name;Mark;Percent
01;tom;69;91
02;jack;71;87
03;alex;68;98
```
```
[root@localhost text]# cut -f2 -d";" test2.txt
Name
tom
jack
alex
```
### 指定字段的字符或者字节范围
cut命令可以将一串字符作为列来显示字符字段的记法
* **N-** 从第N个字节、字符、字段到结尾
* **N-M** 从第N个字节、字符、字段到第M个包括M在内字节、字符、字段
* **-M** 从第1个字节、字符、字段到第M个包括M在内字节、字符、字段。
上面是记法,结合下面选项将摸个范围的字节、字符指定为字段:
* **-b** 表示字节;
* **-c** 表示字符;
* **-f** 表示定义字段。
**示例**
```
[root@localhost text]# cat test.txt
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
```
打印第1个到第3个字符
```
[root@localhost text]# cut -c1-3 test.txt
abc
abc
abc
abc
abc
```
打印前2个字符
```
[root@localhost text]# cut -c-2 test.txt
ab
ab
ab
ab
ab
```
打印从第5个字符开始到结尾
```
[root@localhost text]# cut -c5- test.txt
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,156 @@
date
===
显示或设置系统时间与日期
## 补充说明
**date命令** 是显示或设置系统时间与日期。
很多shell脚本里面需要打印不同格式的时间或日期以及要根据时间和日期执行操作。延时通常用于脚本执行过程中提供一段等待的时间。日期可以以多种格式去打印也可以使用命令设置固定的格式。在类UNIX系统中日期被存储为一个整数其大小为自世界标准时间UTC1970年1月1日0时0分0秒起流逝的秒数。
### 语法
```
date(选项)(参数)
```
### 选项
```
-d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号;
-s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号;
-u显示GMT
--help在线帮助
--version显示版本信息。
```
### 参数
<+时间日期格式>:指定显示时使用的日期时间格式。
### 日期格式字符串列表
```
%H 小时24小时制00~23
%I 小时12小时制01~12
%k 小时24小时制0~23
%l 小时12小时制1~12
%M 分0059
%p 显示出上午或下午
%r 时间12小时制
%s 从1970年1月1日0点到目前经历的秒数
%S 秒0059
%T 时间24小时制hh:mm:ss
%X 显示时间的格式H时M分S秒
%Z 按字母表排序的时区缩写
%a 星期名缩写
%A 星期名全称
%b 月名缩写
%B 月名全称
%c 日期和时间
%d 按月计的日期0131
%D 日期mm/dd/yy
%h 和%b选项相同
%j 一年的第几天001~366
%m 月份0112
%w 一个星期的第几天0代表星期天
%W 一年的第几个星期0053星期一为第一天
%x 显示日期的格式mm/dd/yy
%y 年份的最后两个数字1999则是99
%Y 年份比如1970、1996等
%C 世纪,通常为省略当前年份的后两位数字
%U 一年中的第几周,以周日为每星期第一天
%e 按月计的日期,添加空格,等于%_d
```
### 实例
格式化输出:
```
date +"%Y-%m-%d"
2009-12-07
```
输出昨天日期:
```
date -d "1 day ago" +"%Y-%m-%d"
2012-11-19
```
2秒后输出
```
date -d "2 second" +"%Y-%m-%d %H:%M.%S"
2012-11-20 14:21.31
```
传说中的 1234567890 秒:
```
date -d "1970-01-01 1234567890 seconds" +"%Y-%m-%d %H:%m:%S"
2009-02-13 23:02:30
```
普通转格式:
```
date -d "2009-12-12" +"%Y/%m/%d %H:%M.%S"
2009/12/12 00:00.00
```
apache格式转换
```
date -d "Dec 5, 2009 12:00:37 AM" +"%Y-%m-%d %H:%M.%S"
2009-12-05 00:00.37
```
格式转换后时间游走:
```
date -d "Dec 5, 2009 12:00:37 AM 2 year ago" +"%Y-%m-%d %H:%M.%S"
2007-12-05 00:00.37
```
加减操作:
```
date +%Y%m%d //显示前天年月日
date -d "+1 day" +%Y%m%d //显示前一天的日期
date -d "-1 day" +%Y%m%d //显示后一天的日期
date -d "-1 month" +%Y%m%d //显示上一月的日期
date -d "+1 month" +%Y%m%d //显示下一月的日期
date -d "-1 year" +%Y%m%d //显示前一年的日期
date -d "+1 year" +%Y%m%d //显示下一年的日期
```
设定时间:
```
date -s //设置当前时间只有root权限才能设置其他只能查看
date -s 20120523 //设置成20120523这样会把具体时间设置成空00:00:00
date -s 01:01:01 //设置具体时间,不会对日期做更改
date -s "01:01:01 2012-05-23" //这样可以设置全部时间
date -s "01:01:01 20120523" //这样可以设置全部时间
date -s "2012-05-23 01:01:01" //这样可以设置全部时间
date -s "20120523 01:01:01" //这样可以设置全部时间
```
有时需要检查一组命令花费的时间,举例:
```
#!/bin/bash
start=$(date +%s)
nmap man.linuxde.net &> /dev/null
end=$(date +%s)
difference=$(( end - start ))
echo $difference seconds.
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,127 @@
dd
===
复制文件并对原文件的内容进行转换和格式化处理
## 补充说明
**dd命令** 用于复制文件并对原文件的内容进行转换和格式化处理。dd命令功能很强大的对于一些比较底层的问题使用dd命令往往可以得到出人意料的效果。用的比较多的还是用dd来备份裸设备。但是不推荐如果需要备份oracle裸设备可以使用rman备份或使用第三方软件备份使用dd的话管理起来不太方便。
建议在有需要的时候使用dd 对物理磁盘操作如果是文件系统的话还是使用tar backup cpio等其他命令更加方便。另外使用dd对磁盘操作时最好使用块设备文件。
### 语法
```
dd(选项)
```
### 选项
```
bs=<字节数>将ibs输入与欧巴桑输出设成指定的字节数
cbs=<字节数>:转换时,每次只转换指定的字节数;
conv=<关键字>:指定文件转换的方式;
count=<区块数>:仅读取指定的区块数;
ibs=<字节数>:每次读取的字节数;
obs=<字节数>:每次输出的字节数;
of=<文件>:输出到文件;
seek=<区块数>:一开始输出时,跳过指定的区块数;
skip=<区块数>:一开始读取时,跳过指定的区块数;
--help帮助
--version显示版本信息。
```
### 实例
```
[root@localhost text]# dd if=/dev/zero of=sun.txt bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.006107 seconds, 172 MB/s
[root@localhost text]# du -sh sun.txt
1.1M sun.txt
```
该命令创建了一个1M大小的文件sun.txt其中参数解释
* **if** 代表输入文件。如果不指定if默认就会从stdin中读取输入。
* **of** 代表输出文件。如果不指定of默认就会将stdout作为默认输出。
* **bs** 代表字节为单位的块大小。
* **count** 代表被复制的块数。
* **/dev/zero** 是一个字符设备会不断返回0值字节\0
块大小可以使用的计量单位表
<table>
<tbody>
<tr>
<td>单元大小</td>
<td>代码</td>
</tr>
<tr>
<td>字节1B</td>
<td>c</td>
</tr>
<tr>
<td>字节2B</td>
<td>w</td>
</tr>
<tr>
<td>512B</td>
<td>b</td>
</tr>
<tr>
<td>千字节1024B</td>
<td>k</td>
</tr>
<tr>
<td>兆字节1024KB</td>
<td>M</td>
</tr>
<tr>
<td>吉字节1024MB</td>
<td>G</td>
</tr>
</tbody>
</table>
以上命令可以看出dd命令来测试内存操作速度
```
1048576 bytes (1.0 MB) copied, 0.006107 seconds, 172 MB/s
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,51 @@
declare
===
声明或显示shell变量
## 补充说明
**declare命令** 用于声明和显示已存在的shell变量。当不提供变量名参数时显示所有shell变量。declare命令若不带任何参数选项则会显示所有shell变量及其值。declare的功能与typeset命令的功能是相同的。
### 语法
```
declare(选项)(参数)
```
### 选项
```
+/-"-"可用来指定变量的属性,"+"则是取消变量所设的属性;
-f仅显示函数
r将变量设置为只读
x指定的变量会成为环境变量可供shell以外的程序来使用
i[设置值]可以是数值,字符串或运算式。
```
### 参数
shell变量声明shell变量格式为“变量名=值”。
### 实例
首先使用declare命令定义shell变量"test",并且将其值设置为"man.linuxde.net",输入如下命令:
```
declare test='man.linuxde.net' #定义并初始化shell变量
```
上面的命令执行后再使用echo命令将该shell变量值输出输入如下命令
```
echo $test #输出shell变量的值
```
上面的指令执行后,其输出的结果如下:
```
man.linuxde.net
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,64 @@
depmod
===
分析可载入模块的相依性
## 补充说明
**depmod命令** 可产生模块依赖的映射文件在构建嵌入式系统时需要由这个命令来生成相应的文件由modprobe使用。
### 语法
```
depmod(选项)
```
### 选项
```
-a或--all分析所有可用的模块
-d或debug执行排错模式
-e输出无法参照的符号
-i不检查符号表的版本
-m<文件>或system-map<文件>:使用指定的符号表文件;
-s或--system-log在系统记录中记录错误
-v或--verbose执行时显示详细的信息
-V或--version显示版本信息
--help显示帮助。
```
### 实例
```
depmod -b /home/windsome/EMMA3PF-KernelSource-20080626/install_pos -e -F ./boot/System.map -v 2.6.18_pro500-bcm91250-mips2_fp_be -A -a
```
* `/home/windsome/EMMA3PF-KernelSource-20080626/install_pos`是我`make mod_install`后,所有模块的存放路径。
* `./boot/System.map`是`make linux`后生成,我拷贝到此目录的。
* `2.6.18_pro500-bcm91250-mips2_fp_be`是我build的linux的版本。
编译linux过程及执行depmod的例子
```
genkernel.sh (at linux-2.6.18_pro500)
#######
export INSTALL_ROOT_EMMA3PF="/home/windsome/EMMA3PF-KernelSource-20080626/install_pos"
export INSTALL_MOD_EMMA3PF="/home/windsome/EMMA3PF-KernelSource-20080626/install_pos"
rm /home/windsome/EMMA3PF-KernelSource-20080626/install_pos/lib -rf
rm /home/windsome/EMMA3PF-KernelSource-20080626/install_pos/boot/* -rf
cd <linux_src_dir>
make
make modules_install
cp vmlinux System.map /home/windsome/EMMA3PF-KernelSource-20080626/install_pos/boot/ -p
cd /home/windsome/EMMA3PF-KernelSource-20080626/install_pos
depmod -b /home/windsome/EMMA3PF-KernelSource-20080626/install_pos -e -F ./boot/System.map -v 2.6.18_pro500-bcm91250-mips2_fp_be -A -a
```
其他用法:
在linux桌面系统中当你编译了新的驱动为了能够用`modprobe ***`加载模块, 你需要先将模块拷贝到`/lib/modules /2.6.31-20-generic`目录下,然后运行`sudo depmod -a`将模块信息写入modules.dep、modules.dep.bin、modules.alias.bin、modules.alias和modules.pcimap文件中。
我编译了一个新的wifi驱动r8192se_pci.ko将其拷贝到`/lib/modules/2.6.31-20-generic/wireless`下,然后到`/lib/modules/2.6.31-20-generic`运行`depmod -a`之后可以在任意目录运行modprobe r8192se_pci。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,81 @@
df
===
显示磁盘的相关信息
## 补充说明
**df命令** 用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间目前还剩下多少空间等信息。
### 语法
```
df(选项)(参数)
```
### 选项
```
-a或--all包含全部的文件系统
--block-size=<区块大小>:以指定的区块大小来显示区块数目;
-h或--human-readable以可读性较高的方式来显示信息
-H或--si与-h参数相同但在计算时是以1000 Bytes为换算单位而非1024 Bytes
-i或--inodes显示inode的信息
-k或--kilobytes指定区块大小为1024字节
-l或--local仅显示本地端的文件系统
-m或--megabytes指定区块大小为1048576字节
--no-sync在取得磁盘使用信息前不要执行sync指令此为预设值
-P或--portability使用POSIX的输出格式
--sync在取得磁盘使用信息前先执行sync指令
-t<文件系统类型>或--type=<文件系统类型>:仅显示指定文件系统类型的磁盘信息;
-T或--print-type显示文件系统的类型
-x<文件系统类型>或--exclude-type=<文件系统类型>:不要显示指定文件系统类型的磁盘信息;
--help显示帮助
--version显示版本信息。
```
### 参数
文件:指定文件系统上的文件。
### 实例
查看系统磁盘设备默认是KB为单位
```
[root@LinServ-1 ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda2 146294492 28244432 110498708 21% /
/dev/sda1 1019208 62360 904240 7% /boot
tmpfs 1032204 0 1032204 0% /dev/shm
/dev/sdb1 2884284108 218826068 2518944764 8% /data1
```
使用`-h`选项以KB以上的单位来显示可读性高
```
[root@LinServ-1 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda2 140G 27G 106G 21% /
/dev/sda1 996M 61M 884M 7% /boot
tmpfs 1009M 0 1009M 0% /dev/shm
/dev/sdb1 2.7T 209G 2.4T 8% /data1
```
查看全部文件系统:
```
[root@LinServ-1 ~]# df -a
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda2 146294492 28244432 110498708 21% /
proc 0 0 0 - /proc
sysfs 0 0 0 - /sys
devpts 0 0 0 - /dev/pts
/dev/sda1 1019208 62360 904240 7% /boot
tmpfs 1032204 0 1032204 0% /dev/shm
/dev/sdb1 2884284108 218826068 2518944764 8% /data1
none 0 0 0 - /proc/sys/fs/binfmt_misc
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,37 @@
dhclient
===
动态获取或释放IP地址
## 补充说明
**dhclient命令** 使用动态主机配置协议动态的配置网络接口的网络参数。
### 语法
```
dhclient(选项)(参数)
```
### 选项
```
0指定dhcp客户端监听的端口号
-d总是以前台方式运行程序
-q安静模式不打印任何错误的提示信息
-r释放ip地址。
```
### 参数
网络接口:操作的网络接口。
### 实例
```
dhclient -r #释放IP
dhclient #获取IP
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,57 @@
dhcpd
===
运行DHCP服务器。
### 语法
```
dhcpd [选项] [网络接口]
```
### 选项
```
-p <端口> 指定dhcpd监听的端口
-f 作为前台进程运行dhcpd
-d 启用调试模式
-q 在启动时不显示版权信息
-t 简单地测试配置文件的语法是否正确的,但不会尝试执行任何网络操作
-T 可以用来测试租约数据库文件
-4 运行DHCP服务器
-6 运行DHCPv6服务器
-s <服务器> 指定发送回复的服务器
-cf <配置文件> 指定配置文件
-lf <租约文件> 指定租约文件
-pf <PID> 指定PID文件
-tf <跟踪输出文件> 指定文件记录DHCP服务器的整个启动状态
```
### 例子
对DHCP服务器进行排错。
```bash
[root@localhost ~]# dhcpd
InternetSystems Consortium DHCP Server 4.1.1-P1
Copyright2004-2010 Internet Systems Consortium.
All rightsreserved.
For info,please visit https://www.isc.org/software/dhcp/
Not searchingLDAP since ldap-server, ldap-port and ldap-base-dn were not specified in theconfig file
Wrote 0deleted host decls to leases file.
Wrote 0 newdynamic host decls to leases file.
Wrote 1leases to leases file.
Listening onLPF/eth0/00:0c:29:fc:2f:e5/192.168.0.0/24
Sendingon LPF/eth0/00:0c:29:fc:2f:e5/192.168.0.0/24
Sendingon Socket/fallback/fallback-net
[root@rhel~]# There's already a DHCP server running.
This versionof ISC DHCP is based on the release available
onftp.isc.org. Features have been addedand other changes
have beenmade to the base software release in order to make
it workbetter with this distribution.
exiting.
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,45 @@
dhcrelay
===
使用dhcrelay命令可以提供中继DHCP和BOOTP请求
## 补充说明
**dhcrelay命令** 使用dhcrelay命令可以提供中继DHCP和BOOTP请求从一个没有DHCP服务器的子网直接连接到其它子网内的一个或多个DHCP服务器。该命令在DHCP中继服务器上使用同时支持DHCPv4/BOOTP和DHCPv6协议。
### 语法
```
dhcrelay [选项] [DHCP服务器]
```
### 选项
```
-c <跳数> 当转发数据包时dhcrelay丢弃已经达到一个最大跳数的数据包。默认值是10最大值是255
-4 运行dhcrelay命令作为DHCPv4/BOOTP中继代理。这是默认操作模式
-6 运行dhcrelay命令作为DHCPv6中继代理
-q 安静模式
-p <端口> 监听和发送端口。DHCPv4/BOOTP默认端口是67DHCPv6默认端口是547
-A <长度> 指定发送到DHCP服务器的最大数据包大小
-d 强制dhcrelay命令作为前台进程运行
```
### 例子
指定DHCP服务器的位置。
```bash
[root@localhost ~]# dhcrelay 192.168.0.2
Internet Systems Consortium DHCP Relay Agent4.1.1-P1
Copyright 2004-2010 Internet SystemsConsortium.
All rights reserved.
For info, please visithttps://www.isc.org/software/dhcp/
Listening on LPF/eth1/00:0c:29:fc:2f:ef
Sending on LPF/eth1/00:0c:29:fc:2f:ef
Listening on LPF/eth0/00:0c:27:fc:25:ec
Sending on LPF/eth0/00:0c:27:fc:25:ec
Sending on Socket/fallback
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,81 @@
diff
===
比较给定的两个文件的不同
## 补充说明
**diff命令** 在最简单的情况下,比较给定的两个文件的不同。如果使用“-”代替“文件”参数则要比较的内容将来自标准输入。diff命令是以逐行的方式比较文本文件的异同处。如果该命令指定进行目录的比较则将会比较该目录中具有相同文件名的文件而不会对其子目录文件进行任何比较操作。
### 语法
```
diff(选项)(参数)
```
### 选项
```
-<行数>:指定要显示多少行的文本。此参数必须与-c或-u参数一并使用
-a或——textdiff预设只会逐行比较文本文件
-b或--ignore-space-change不检查空格字符的不同
-B或--ignore-blank-lines不检查空白行
-c显示全部内容并标出不同之处
-C<行数>或--context<行数>:与执行“-c-<行数>”指令相同;
-d或——minimal使用不同的演算法以小的单位来做比较
-D<巨集名称>或ifdef<巨集名称>:此参数的输出格式可用于前置处理器巨集;
-e或——ed此参数的输出格式可用于ed的script文件
-f或-forward-ed输出的格式类似ed的script文件但按照原来文件的顺序来显示不同处
-H或--speed-large-files比较大文件时可加快速度
-l<字符或字符串>或--ignore-matching-lines<字符或字符串>:若两个文件在某几行有所不同,而之际航同时都包含了选项中指定的字符或字符串,则不显示这两个文件的差异;
-i或--ignore-case不检查大小写的不同
-l或——paginate将结果交由pr程序来分页
-n或——rcs将比较结果以RCS的格式来显示
-N或--new-file在比较目录时若文件A仅出现在某个目录中预设会显示Only in目录文件A 若使用-N参数则diff会将文件A 与一个空白的文件比较;
-p若比较的文件为C语言的程序码文件时显示差异所在的函数名称
-P或--unidirectional-new-file与-N类似但只有当第二个目录包含了第一个目录所没有的文件时才会将这个文件与空白的文件做比较
-q或--brief仅显示有无差异不显示详细的信息
-r或——recursive比较子目录中的文件
-s或--report-identical-files若没有发现任何差异仍然显示信息
-S<文件>或--starting-file<文件>:在比较目录时,从指定的文件开始比较;
-t或--expand-tabs在输出时将tab字符展开
-T或--initial-tab在每行前面加上tab字符以便对齐
-u-U<列数>或--unified=<列数>:以合并的方式来显示文件内容的不同;
-v或——version显示版本信息
-w或--ignore-all-space忽略全部的空格字符
-W<宽度>或--width<宽度>:在使用-y参数时指定栏宽
-x<文件名或目录>或--exclude<文件名或目录>:不比较选项中所指定的文件或目录;
-X<文件>或--exclude-from<文件>;您可以将文件或目录类型存成文本文件,然后在=<文件>中指定此文本文件;
-y或--side-by-side以并列的方式显示文件的异同之处
--help显示帮助
--left-column在使用-y参数时若两个文件某一行内容相同则仅在左侧的栏位显示该行内容
--suppress-common-lines在使用-y参数时仅显示不同之处。
```
### 参数
* 文件1指定要比较的第一个文件
* 文件2指定要比较的第二个文件。
### 实例
将目录`/usr/li`下的文件"test.txt"与当前目录下的文件"test.txt"进行比较,输入如下命令:
```
diff /usr/li test.txt #使用diff指令对文件进行比较
```
上面的命令执行后,会将比较后的不同之处以指定的形式列出,如下所示:
```
n1 a n3,n4
n1,n2 d n3
n1,n2 c n3,n4
```
其中,字母"a"、"d"、"c"分别表示添加、删除及修改操作。而"n1"、"n2"表示在文件1中的行号"n3"、"n4"表示在文件2中的行号。
注意:以上说明指定了两个文件中不同处的行号及其相应的操作。在输出形式中,每一行后面将跟随受到影响的若干行。其中,以<开始的行属于文件1以>开始的行属于文件2。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,35 @@
diff3
===
比较3个文件不同的地方
## 补充说明
**diff3命令** 用于比较3个文件将3个文件的不同的地方显示到标准输出。
### 语法
```
diff3(选项)(参数)
```
### 选项
```
-a把所有的文件都当做文本文件按照行为单位进行比较即给定的文件不是文本文件
-A合并第2个文件和第3个文件之间的不同到第1个文件中有冲突内容用括号括起来
-B与选项“-A”功能相同但是不显示冲突的内容
-e/--ed生成一个“-ed”脚本用于将第2个文件和第3个文件之间的不同合并到第1个文件中
--easy-only除了不显示互相重叠的变化与选项“-e”的功能相同
-i为了和system V系统兼容在“ed”脚本的最后生成“w”和“q”命令。此选项必须和选项“-AeExX3”连用但是不能和“-m”连用
--initial-tab在正常格式的行的文本前输出一个TAB字符而非两个空白字符。此选项将导致在行中TAB字符的对齐方式看上去规范。
```
### 参数
* 文件1指定要比较的第1个文件
* 文件2指定要比较的第2个文件
* 文件3指定要比较的第3个文件。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,68 @@
diffstat
===
显示diff命令输出信息的柱状图
## 补充说明
**diffstat命令** 用来显示diff命令输出信息的柱状图用以显示diff命令比较两个文件的不同统计信息。用户也可以直接使用`|`将diff命令所输出的结果直接送给diffstat命令进行统计结果的显示。使用该命令时若所比较的文件或者子目录不在当前目录下则应该使用其完整路径。
### 语法
```
diffstat(选项)(参数)
```
### 选项
```
-n<文件名长度>:指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名;
-p<文件名长度>:与-n参数相同但此处的<文件名长度>包括了文件的路径;
-w指定要输出时栏位的宽度
-v显示版本信息。
```
### 参数
文件指定保存有diff命令的输出信息文件。
### 实例
将目录"test1"和"test2"下的同名文件"testf.txt"使用diff命令进行比较。然后使用diffstat命令对结果进行统计显示输入如下命令
```
diff test1 test2 | diffstat #进行比较结果的统计显示
```
注意:使用这条命令可以非常方便地实现统计显示的功能。
对于查看文件中的内容用户可以通过cat命令进行查看即可具体操作如下
```
cat test1/testf.txt #查看test1/testf的内容
abc
def
ghi
jkl
mno
pqr
stu
vws
cat test2/testf.txt #查看test2/testf的内容
abc
def
ghi
jkl
mno
```
从上面的文件内容显示,可以看到两个文件内容的差别。现在来运行刚才的命令,对文件比较的结果进行统计显示,结果如下:
```
testfile | 2 +- #统计信息输出显示
1 file changed, 1 insertion(+), 1 deletion(-)
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,66 @@
dig
===
域名查询工具
## 补充说明
**dig命令** 是常用的域名查询工具,可以用来测试域名系统工作是否正常。
### 语法
```
dig(选项)(参数)
```
### 选项
```
@<服务器地址>:指定进行域名解析的域名服务器;
-b<ip>当主机具有多个IP地址指定使用本机的哪个IP地址向域名服务器发送域名查询请求
-f<文件名称>指定dig以批处理的方式运行指定的文件中保存着需要批处理查询的DNS任务信息
-P指定域名服务器所使用端口号
-t<类型>指定要查询的DNS数据类型
-x<IP>:执行逆向域名查询;
-4使用IPv4
-6使用IPv6
-h显示指令帮助信息。
```
### 参数
* 主机:指定要查询域名主机;
* 查询类型指定DNS查询的类型
* 查询类指定查询DNS的class
* 查询选项:指定查询选项。
### 实例
```
[root@localhost ~]# dig www.jsdig.com
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.1 <<>> www.jsdig.com
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2115
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 0
;; QUESTION SECTION:
;www.jsdig.com. IN A
;; ANSWER SECTION:
www.jsdig.com. 0 IN CNAME host.1.jsdig.com.
host.1.jsdig.com. 0 IN A 100.42.212.8
;; AUTHORITY SECTION:
jsdig.com. 8 IN NS f1g1ns2.dnspod.net.
jsdig.com. 8 IN NS f1g1ns1.dnspod.net.
;; Query time: 0 msec
;; SERVER: 202.96.104.15#53(202.96.104.15)
;; WHEN: Thu Dec 26 11:14:37 2013
;; MSG SIZE rcvd: 121
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,145 @@
dircolors
===
置ls命令在显示目录或文件时所用的色彩
## 补充说明
**dircolors命令** 设置ls命令在显示目录或文件时所用的色彩。dircolors可根据[色彩配置文件]来设置LS_COLORS环境变量或是显示设置LS_COLORS环境变量的命令。
### 语法
```
dircolors(选项)(参数)
```
### 选项
```
-b或--sh或--bourne-shell显示在Boume shell中将LS_COLORS设为目前预设置的shell指令
-c或--csh或--c-shell显示在C shell中将LS_COLORS设为目前预设置的shell指令
-p或--print-database显示预设置
-help显示帮助
-version显示版本信息。
```
### 参数
文件:指定用来设置颜色的文件。
### 实例
```
[root@localhost ~]# dircolors -p
# Configuration file for dircolors, a utility to help you set the
# LS_COLORS environment variable used by GNU ls with the --color option.
# The keywords COLOR, OPTIONS, and EIGHTBIT (honored by the
# slackware version of dircolors) are recognized but ignored.
# Below, there should be one TERM entry for each termtype that is colorizable
TERM linux
TERM linux-c
TERM mach-color
TERM console
TERM con132x25
TERM con132x30
TERM con132x43
TERM con132x60
TERM con80x25
TERM con80x28
TERM con80x30
TERM con80x43
TERM con80x50
TERM con80x60
TERM cygwin
TERM dtterm
TERM putty
TERM xterm
TERM xterm-color
TERM xterm-debian
TERM rxvt
TERM screen
TERM screen-bce
TERM screen-w
TERM vt100
TERM Eterm
# Below are the color init strings for the basic file types. A color init
# string consists of one or more of the following numeric codes:
# Attribute codes:
# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
# Text color codes:
# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
# Background color codes:
# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
NORMAL 00 # global default, although everything should be something.
FILE 00 # normal file
DIR 01;34 # directory
LINK 01;36 # symbolic link. (If you set this to 'target' instead of a
# numerical value, the color is as for the file pointed to.)
FIFO 40;33 # pipe
SOCK 01;35 # socket
DOOR 01;35 # door
BLK 40;33;01 # block device driver
CHR 40;33;01 # character device driver
ORPHAN 40;31;01 # symlink to nonexistent file
SETUID 37;41 # file that is setuid (u+s)
SETGID 30;43 # file that is setgid (g+s)
STICKY_OTHER_WRITABLE 30;42 # dir that is sticky and other-writable (+t,o+w)
OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky
STICKY 37;44 # dir with the sticky bit set (+t) and not other-writable
# This is for files with execute permission:
exec 01;32
# List any file extensions like '.gz' or '.tar' that you would like ls
# to colorize below. Put the extension, a space, and the color init string.
# (and any comments you want to add after a '#')
# If you use DOS-style suffixes, you may want to uncomment the following:
#.cmd 01;32 # executables (bright green)
#.exe 01;32
#.com 01;32
#.btm 01;32
#.bat 01;32
.tar 01;31 # archives or compressed (bright red)
.tgz 01;31
.arj 01;31
.taz 01;31
.lzh 01;31
.zip 01;31
.z 01;31
.Z 01;31
.gz 01;31
.bz2 01;31
.deb 01;31
.rpm 01;31
.jar 01;31
# image formats
.jpg 01;35
.jpeg 01;35
.gif 01;35
.bmp 01;35
.pbm 01;35
.pgm 01;35
.ppm 01;35
.tga 01;35
.xbm 01;35
.xpm 01;35
.tif 01;35
.tiff 01;35
.png 01;35
.mov 01;35
.mpg 01;35
.mpeg 01;35
.avi 01;35
.fli 01;35
.gl 01;35
.dl 01;35
.xcf 01;35
.xwd 01;35
# audio formats
.flac 01;35
.mp3 01;35
.mpc 01;35
.ogg 01;35
.wav 01;35
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,40 @@
dirname
===
去除文件名中的非目录部分
## 补充说明
**dirname命令** 去除文件名中的非目录部分仅显示与目录有关的内容。dirname命令读取指定路径名保留最后一个`/`及其后面的字符,删除其他部分,并写结果到标准输出。如果最后一个`<cite>/</cite>`后无字符dirname 命令使用倒数第二个`/`并忽略其后的所有字符。dirname 和 basename 通常在 shell 内部命令替换使用,以指定一个与指定输入文件名略有差异的输出文件名。
### 语法
```
dirname(选项)(参数)
```
### 选项
```
--help显示帮助
--version显示版本号。
```
### 实例
```
dirname //
结果为 /
dirname /a/b/
结果为:/a
dirname a
结果为 .
dirname a/b
结果为路径名 a
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,40 @@
dirs
===
显示目录记录
## 补充说明
**dirs命令** 显示当前目录栈中的所有记录不带参数的dirs命令显示当前目录栈中的记录。dirs始终显示当然目录, 再是堆栈中的内容;即使目录堆栈为空, dirs命令仍然只显示当然目录。
### 语法
```
dirs(选项)(参数)
```
### 选项
```
-c删除目录栈中的所有记录
-l以完整格式显示
-p一个目录一行的方式显示
-v每行一个目录来显示目录栈的内容每个目录前加上的编号
+N显示从左到右的第n个目录数字从0开始
-N显示从右到左的第n个日录数字从0开始
```
### 参数
目录:显示目录堆叠中的记录。
### 实例
```
[root@localhost etc]# dirs
/etc
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,53 @@
dmesg
===
显示Linux系统启动信息
## 补充说明
**dmesg命令** 被用于检查和控制内核的环形缓冲区。kernel会将开机信息存储在ring buffer中。您若是开机时来不及查看信息可利用dmesg来查看。开机信息保存在`/var/log/dmesg`文件里。
### 语法
```
dmesg(选项)
```
### 选项
```
-c显示信息后清除ring buffer中的内容
-s<缓冲区大小>预设置为8196刚好等于ring buffer的大小
-n设置记录信息的层级。
```
### 实例
```
[root@localhost ~]# dmesg | head
Linux version 2.6.18-348.6.1.el5 (mockbuild@builder17.centos.org) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-54)) #1 SMP Tue May 21 15:34:22 EDT 2013
BIOS-provided physical RAM map:
BIOS-e820: 0000000000010000 - 000000000009f400 (usable)
BIOS-e820: 000000000009f400 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 000000007f590000 (usable)
BIOS-e820: 000000007f590000 - 000000007f5e3000 (ACPI NVS)
BIOS-e820: 000000007f5e3000 - 000000007f5f0000 (ACPI data)
BIOS-e820: 000000007f5f0000 - 000000007f600000 (reserved)
BIOS-e820: 00000000e0000000 - 00000000e8000000 (reserved)
```
查看硬盘基础信息
```bash
dmesg | grep sda
[ 2.442555] sd 0:0:0:0: [sda] 488281250 512-byte logical blocks: (250 GB/232 GiB)
[ 2.442590] sd 0:0:0:0: [sda] Write Protect is off
[ 2.442592] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00
[ 2.442607] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 2.447533] sda: sda1
[ 2.448503] sd 0:0:0:0: [sda] Attached SCSI disk
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,294 @@
dmidecode
===
在Linux系统下获取有关硬件方面的信息
## 补充说明
**dmidecode命令** 可以让你在Linux系统下获取有关硬件方面的信息。dmidecode的作用是将DMI数据库中的信息解码以可读的文本方式显示。由于DMI信息可以人为修改因此里面的信息不一定是系统准确的信息。dmidecode遵循SMBIOS/DMI标准其输出的信息包括BIOS、系统、主板、处理器、内存、缓存等等。
DMIDesktop Management Interface,DMI就是帮助收集电脑系统信息的管理系统DMI信息的收集必须在严格遵照SMBIOS规范的前提下进行。SMBIOSSystem Management BIOS是主板或系统制造者以标准格式显示产品管理信息所需遵循的统一规范。SMBIOS和DMI是由行业指导机构Desktop Management Task Force(DMTF)起草的开放性的技术标准其中DMI设计适用于任何的平台和操作系统。
DMI充当了管理工具和系统层之间接口的角色。它建立了标准的可管理系统更加方便了电脑厂商和用户对系统的了解。DMI的主要组成部分是Management Information Format(MIF)数据库。这个数据库包括了所有有关电脑系统和配件的信息。通过DMI用户可以获取序列号、电脑厂商、串口信息以及其它系统配件信息。
### 语法
```
dmidecode [选项]
```
### 选项
```
-d(default:/dev/mem)从设备文件读取信息,输出内容与不加参数标准输出相同。
-h显示帮助信息。
-s只显示指定DMI字符串的信息。(string)
-t只显示指定条目的信息。(type)
-u显示未解码的原始条目内容。
--dump-bin file将DMI数据转储到一个二进制文件中。
--from-dump FILE从一个二进制文件读取DMI数据。
-V显示版本信息。
```
**dmidecode参数string及type列表**
1Valid string keywords are
* bios-vendor
* bios-version
* bios-release-date
* system-manufacturer
* system-product-name
* system-version
* system-serial-number
* system-uuid
* baseboard-manufacturer
* baseboard-product-name
* baseboard-version
* baseboard-serial-number
* baseboard-asset-tag
* chassis-manufacturer
* chassis-type
* chassis-version
* chassis-serial-number
* chassis-asset-tag
* processor-family
* processor-manufacturer
* processor-version
* processor-frequency
2Valid type keywords are
* bios
* system
* baseboard
* chassis
* processor
* memory
* Cache
* connector
* slot
3type全部编码列表
* BIOS
* System
* Base Board
* Chassis
* Processor
* Memory Controller
* Memory Module
* Cache
* Port Connector
* System Slots
* On Board Devices
* OEM Strings
* System Configuration Options
* BIOS Language
* Group Associations
* System Event Log
* Physical Memory Array
* Memory Device
* 32-bit Memory Error
* Memory Array Mapped Address
* Memory Device Mapped Address
* Built-in Pointing Device
* Portable Battery
* System Reset
* Hardware Security
* System Power Controls
* Voltage Probe
* Cooling Device
* Temperature Probe
* Electrical Current Probe
* Out-of-band Remote Access
* Boot Integrity Services
* System Boot
* 64-bit Memory Error
* Management Device
* Management Device Component
* Management Device Threshold Data
* Memory Channel
* IPMI Device
* Power Supply
* Additional Information
* Onboard Device
### 实例
```bash
dmidecode -t 1 # 查看服务器信息
dmidecode | grep 'Product Name' # 查看服务器型号
dmidecode |grep 'Serial Number' # 查看主板的序列号
dmidecode -t 2 # 查看主板信息
dmidecode -s system-serial-number # 查看系统序列号
dmidecode -t memory # 查看内存信息
dmidecode -t 11 # 查看OEM信息
dmidecode -t 17 # 查看内存条数
dmidecode -t 16 # 查询内存信息
dmidecode -t 4 # 查看CPU信息
cat /proc/scsi/scsi # 查看服务器硬盘信息
```
不带选项执行dmidecode命令通常会输出所有的硬件信息。dmidecode命令有个很有用的选项-t可以按指定类型输出相关信息假如要获得处理器方面的信息则可以执行
```
[root@localhost ~]# dmidecode -t processor
# dmidecode 2.11
SMBIOS 2.5 present.
Handle 0x0001, DMI type 4, 40 bytes
Processor Information
Socket Designation: Node 1 Socket 1
Type: Central Processor
Family: Xeon MP
Manufacturer: Intel(R) Corporation
id: C2 06 02 00 FF FB EB BF
Signature: Type 0, Family 6, Model 44, Stepping 2
Flags:
FPU (Floating-point unit on-chip)
VME (Virtual mode extension)
DE (Debugging extension)
PSE (Page size extension)
TSC (time stamp counter)
MSR (Model specific registers)
PAE (Physical address extension)
MCE (Machine check exception)
CX8 (CMPXCHG8 instruction supported)
APIC (On-chip APIC hardware supported)
SEP (Fast system call)
MTRR (Memory type range registers)
PGE (Page global enable)
MCA (Machine check architecture)
CMOV (Conditional move instruction supported)
PAT (Page attribute table)
PSE-36 (36-bit page size extension)
CLFSH (CLFLUSH instruction supported)
DS (Debug store)
ACPI (ACPI supported)
MMX (MMX technology supported)
FXSR (FXSAVE and FXSTOR instructions supported)
SSE (Streaming SIMD extensions)
SSE2 (Streaming SIMD extensions 2)
ss (Self-snoop)
HTT (Multi-threading)
TM (Thermal monitor supported)
PBE (Pending break enabled)
Version: Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
Voltage: 1.2 V
External Clock: 5866 MHz
Max Speed: 4400 MHz
Current Speed: 2400 MHz
Status: Populated, Enabled
Upgrade: ZIF Socket
L1 Cache Handle: 0x0002
L2 Cache Handle: 0x0003
L3 Cache Handle: 0x0004
Serial Number: Not Specified
Asset Tag: Not Specified
Part Number: Not Specified
Core Count: 4
Core Enabled: 4
Thread Count: 8
Characteristics:
64-bit capable
Handle 0x0055, DMI type 4, 40 bytes
Processor Information
Socket Designation: Node 1 Socket 2
Type: Central Processor
Family: Xeon MP
Manufacturer: Not Specified
ID: 00 00 00 00 00 00 00 00
Signature: Type 0, Family 0, Model 0, Stepping 0
Flags: None
Version: Not Specified
Voltage: 1.2 V
External Clock: 5866 MHz
Max Speed: 4400 MHz
Current Speed: Unknown
Status: Unpopulated
Upgrade: ZIF Socket
L1 Cache Handle: Not Provided
L2 Cache Handle: Not Provided
L3 Cache Handle: Not Provided
Serial Number: Not Specified
Asset Tag: Not Specified
Part Number: Not Specified
Characteristics: None
```
查看内存的插槽数,已经使用多少插槽。每条内存多大,已使用内存多大
```bash
dmidecode|grep -P -A5 "Memory\s+Device"|grep Size|grep -v Range
# Size: 2048 MB
# Size: 2048 MB
# Size: 4096 MB
# Size: No Module Installed
```
查看内存支持的最大内存容量
```bash
dmidecode|grep -P 'Maximum\s+Capacity'
# Maximum Capacity: 16 GB
```
查看内存的频率
```bash
dmidecode|grep -A16 "Memory Device"
# Memory Device
# Array Handle: 0x1000
# Error Information Handle: Not Provided
# Total Width: 72 bits
# Data Width: 64 bits
# Size: 2048 MB
# Form Factor: DIMM
# Set: 1
# Locator: DIMM_A1
# Bank Locator: Not Specified
# Type: DDR3
# Type Detail: Synchronous Unbuffered (Unregistered)
# Speed: 1333 MHz
# Manufacturer: 00CE000080CE
# Serial Number: 4830F3E1
# Asset Tag: 01093200
# Part Number: M391B5673EH1-CH9
# --
# Memory Device
# Array Handle: 0x1000
# Error Information Handle: Not Provided
# Total Width: 72 bits
# Data Width: 64 bits
# Size: 2048 MB
# Form Factor: DIMM
# Set: 1
# Locator: DIMM_A2
# Bank Locator: Not Specified
# Type: DDR3
# Type Detail: Synchronous Unbuffered (Unregistered)
# Speed: 1333 MHz
# Manufacturer: 00AD000080AD
# Serial Number: 1BA1F0B5
# Asset Tag: 01110900
# Part Number: HMT325U7BFR8C-H9
# --
dmidecode|grep -A16 "Memory Device"|grep 'Speed'
# Speed: 1333 MHz
# Speed: 1333 MHz
# Speed: 1333 MHz
# Speed: Unknown
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,326 @@
dnf
===
新一代的RPM软件包管理器
## 补充说明
**DNF** 是新一代的rpm软件包管理器。他首先出现在 Fedora 18 这个发行版中。而最近它取代了yum正式成为 Fedora 22 的包管理器。
DNF包管理器克服了YUM包管理器的一些瓶颈提升了包括用户体验内存占用依赖分析运行速度等多方面的内容。DNF使用 RPM, libsolv 和 hawkey 库进行包管理操作。尽管它没有预装在 CentOS 和 RHEL 7 中,但你可以在使用 YUM 的同时使用 DNF 。你可以在这里获得关于 DNF 的更多知识:《 DNF 代替 YUM ,你所不知道的缘由》
DNF 的最新稳定发行版版本号是 1.0发行日期是2015年5月11日。 这一版本的额 DNF 包管理器(包括在他之前的所有版本) 都大部分采用 Python 编写发行许可为GPL v2.
### 安装 DNF 包管理器
DNF 并未默认安装在 RHEL 或 CentOS 7系统中但是 Fedora 22 已经默认使用 DNF .
1、为了安装 DNF ,您必须先安装并启用 epel-release 依赖。
在系统中执行以下命令:
```
# yum install epel-release
```
或者
```
# yum install epel-release -y
```
其实这里并没有强制使用”-y”的理由相反的在不使用”-y”的情况下用户可以在安装过程中查看到底有哪些东西被安装进了系统。但对于没有这个需求的用户您可以在 YUM 中使用”-y”参数来自动安装所有东西。
2、使用 epel-release 依赖中的 YUM 命令来安装 DNF 包。在系统中执行以下命令:
```
# yum install dnf
```
然后, DNF 包管理器就被成功的安装到你的系统中了。接下来是时候开始我们的教程了在这个教程中您将会学到27个用于 DNF 包管理器的命令。使用这些命令,你可以方便有效的管理您系统中的 RPM 软件包。现在,让我们开始学习 DNF 包管理器的27条常用命令吧
**查看 DNF 包管理器版本**
用处:该命令用于查看安装在您系统中的 DNF 包管理器的版本
```
# dnf version
```
!Check-DNF-Version
**查看系统中可用的 DNF 软件库**
用处:该命令用于显示系统中可用的 DNF 软件库
```
# dnf repolist
```
!Check-All-Enabled-Repositories
**查看系统中可用和不可用的所有的 DNF 软件库**
用处:该命令用于显示系统中可用和不可用的所有的 DNF 软件库
```
# dnf repolist all
```
!3
**列出所有 RPM 包**
用处:该命令用于列出用户系统上的所有来自软件库的可用软件包和所有已经安装在系统上的软件包
```
# dnf list
```
!4
**列出所有安装了的 RPM 包**
用处:该命令用于列出所有安装了的 RPM 包
```
# dnf list installed
```
!5
**列出所有可供安装的 RPM 包**
用处:该命令用于列出来自所有可用软件库的可供安装的软件包
```
# dnf list available
```
!6
**搜索软件库中的 RPM 包**
用处当你不知道你想要安装的软件的准确名称时你可以用该命令来搜索软件包。你需要在”search”参数后面键入软件的部分名称来搜索。在本例中我们使用”nano”
```
# dnf search nano
```
!7
**查找某一文件的提供者**
用处:当你想要查看是哪个软件包提供了系统中的某一文件时,你可以使用这条命令。(在本例中,我们将查找”/bin/bash”这个文件的提供者
```
# dnf provides /bin/bash
```
!8
**查看软件包详情**
用处当你想在安装某一个软件包之前查看它的详细信息时这条命令可以帮到你。在本例中我们将查看”nano”这一软件包的详细信息
```
# dnf info nano
```
!9
**安装软件包**
用处使用该命令系统将会自动安装对应的软件及其所需的所有依赖在本例中我们将用该命令安装nano软件
```
# dnf install nano
```
!10
**升级软件包**
用处该命令用于升级制定软件包在本例中我们将用命令升级”systemd”这一软件包
```
# dnf update systemd
```
!11
**检查系统软件包的更新**
用处:该命令用于检查系统中所有软件包的更新
```
# dnf check-update
```
!12
**升级所有系统软件包**
用处:该命令用于升级系统中所有有可用升级的软件包
```
# dnf update 或 # dnf upgrade
```
!13
**删除软件包**
用处删除系统中指定的软件包在本例中我们将使用命令删除”nano”这一软件包
```
# dnf remove nano 或 # dnf erase nano
```
!14
**删除无用孤立的软件包**
用处:当没有软件再依赖它们时,某一些用于解决特定软件依赖的软件包将会变得没有存在的意义,该命令就是用来自动移除这些没用的孤立软件包。
```
# dnf autoremove
```
!15
**删除缓存的无用软件包**
用处:在使用 DNF 的过程中,会因为各种原因在系统中残留各种过时的文件和未完成的编译工程。我们可以使用该命令来删除这些没用的垃圾文件。
```
# dnf clean all
```
!16
**获取有关某条命令的使用帮助**
用处该命令用于获取有关某条命令的使用帮助包括可用于该命令的参数和该命令的用途说明本例中我们将使用命令获取有关命令”clean”的使用帮助
```
# dnf help clean
```
!17
**查看所有的 DNF 命令及其用途**
用处:该命令用于列出所有的 DNF 命令及其用途
```
# dnf help
```
!18
**查看 DNF 命令的执行历史**
用处:您可以使用该命令来查看您系统上 DNF 命令的执行历史。通过这个手段您可以知道在自您使用 DNF 开始有什么软件被安装和卸载。
```
# dnf history
```
!19
**查看所有的软件包组**
用处:该命令用于列出所有的软件包组
```
# dnf grouplist
```
!20
**安装一个软件包组**
用处该命令用于安装一个软件包组本例中我们将用命令安装”Educational Software”这个软件包组
```
# dnf groupinstall Educational Software
```
!21
**升级一个软件包组中的软件包**
用处该命令用于升级一个软件包组中的软件包本例中我们将用命令升级”Educational Software”这个软件包组中的软件
```
# dnf groupupdate Educational Software
```
!22
**删除一个软件包组**
用处该命令用于删除一个软件包组本例中我们将用命令删除”Educational Software”这个软件包组
```
# dnf groupremove Educational Software
```
!23
**从特定的软件包库安装特定的软件**
用处:该命令用于从特定的软件包库安装特定的软件(本例中我们将使用命令从软件包库 epel 中安装 phpmyadmin 软件包)
```
# dnf enablerepo=epel install phpmyadmin
```
**更新软件包到最新的稳定发行版**
用处:该命令可以通过所有可用的软件源将已经安装的所有软件包更新到最新的稳定发行版
```
# dnf distro-sync
```
**重新安装特定软件包**
用处该命令用于重新安装特定软件包本例中我们将使用命令重新安装”nano”这个软件包
```
# dnf reinstall nano
```
!26
**回滚某个特定软件的版本**
用处该命令用于降低特定软件包的版本如果可能的话本例中我们将使用命令降低”acpid”这个软件包的版本
```
# dnf downgrade acpid
```
样例输出:
```
Using metadata from Wed May 20 12:44:59 2015
No match for available package: acpid-2.0.19-5.el7.x86_64
Error: Nothing to do.
```
原作者注:在执行这条命令的时候, DNF 并没有按照我期望的那样降级指定的软件“acpid”。该问题已经上报。
### 总结
DNF 包管理器作为 YUM 包管理器的升级替代品,它能自动完成更多的操作。但在我看来,正因如此,所以 DNF 包管理器不会太受那些经验老道的 Linux 系统管理者的欢迎。举例如下:
1. 在 DNF 中没有 skip-broken 命令,并且没有替代命令供选择。
2. 在 DNF 中没有判断哪个包提供了指定依赖的 resolvedep 命令。
3. 在 DNF 中没有用来列出某个软件依赖包的 deplist 命令。
4. 当你在 DNF 中排除了某个软件库,那么该操作将会影响到你之后所有的操作,不像在 YUM 下那样,你的排除操作只会咋升级和安装软件时才起作用。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -0,0 +1,31 @@
dnsdomainname
===
定义DNS系统中FQDN名称的域名
## 补充说明
**dnsdomainname命令** 用于定义DNS系统中FQDN名称中的域名。
### 语法
```
dnsdomainname(选项)
```
### 选项
-v详细信息模式输出指令执行的详细信息。
### 实例
```
[root@AY1307311912260196fcZ ~]# dnsdomainname -v
gethostname()=`AY1307311912260196fcZ'
Resolving `AY1307311912260196fcZ' ...
Result: h_name=`AY1307311912260196fcZ'
Result: h_addr_list=`10.160.7.81'
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save