-attributes ] [ -z -attributes ] [http://]host‐
+name[:port]/path
```
-### 选项
+### 选项
```shell
--A:指定连接服务器的基本的认证凭据;
--c:指定一次向服务器发出请求数;
--C:添加cookie;
--g:将测试结果输出为“gnuolot”文件;
--h:显示帮助信息;
--H:为请求追加一个额外的头;
--i:使用“head”请求方式;
--k:激活HTTP中的“keepAlive”特性;
--n:指定测试会话使用的请求数;
--p:指定包含数据的文件;
--q:不显示进度百分比;
--T:使用POST数据时,设置内容类型头;
--v:设置详细模式等级;
--w:以HTML表格方式打印结果;
--x:以表格方式输出时,设置表格的属性;
--X:使用指定的代理服务器发送请求;
--y:以表格方式输出时,设置表格属性。
+-A auth-username:password
+ # 支持基本的验证证书,用户名和密码之间使用"冒号" :
+ # 分隔开,ab将以明文方式传送过去.不管服务器是不是需要
+ # ,也就是说你的服务器需要支持401认证.
+
+-c concurrency
+ # 同时向服务器端发送的请求数目,默认状态下是一次 只执行一个http请求.
+
+-C cookie-name=value
+ # Add a Cookie: line to the request. The argument is typically in the
+ # form of a name=value pair. This field is repeatable.
+
+-d # Do not display the "percentage served within XX [ms] table".
+ # (legacy support).
+
+-e csv-file
+ # Write a Comma separated value (CSV) file which contains for each
+ # percentage (from 1% to 100%) the time (in milli seconds) it took to
+ # serve that percentage of the requests. This is usually more useful
+ # than the 'gnuplot' file; as the results are already 'binned'.
+
+-g gnuplot-file
+ # Write all measured values out as a 'gnuplot' or TSV (Tab separate
+ # values) file. This file can easily be imported into packages like
+ # Gnuplot, IDL, Mathematica, Igor or even Excel. The labels are on
+ # the first line of the file.
+-h # 显示使用说明
+-H custom-header
+ # 向请求包追加附加的标题字串.此参数应该是有效的标题 行(header
+ # line)形式,通常使用冒号":"来分隔有效配对 (valid pair)例如 'Accept-
+ # Encoding: zip/zop;8 bit';
+
+-i # 使用一个 http 头(HEAD) 来替换 GET方法.不可以掺入POST 方法
+
+-k # 允许http KeepAlive ;也就是说执行多个请求在一个 http
+ # 会话当中,默认是不允许的也就是no KeepAlive啦;)
+
+-n requests
+ # 执行一次测试会话的时候所发出的请求数目,默认是执行一个单一的请求
+ # 当然了这样的测试结果也就没什么意义了
+
+-p POST-file
+ # 测试程序也就是ab,将向Apache server发送带有HTTP POST 的请求.
+
+-P proxy-auth-username:password
+ # 当需要通过代理测试一台 HTTP 服务器的时候而你的代理
+ # 又需要用户名密码验证,这时你可以使用这个选项,同样
+ # 用户名与密码之间使用冒号":"分隔开,ab将之以明文的方式
+ # 发送出去,当然,前提是你的代理是处于407认证状态的
+
+-q # When processing more than 150 requests, ab outputs a progress count
+ # on stderr every 10% or 100 requests or so. The -q flag will sup‐
+ # press these messages.
+
+-s # When compiled in (ab -h will show you) use the SSL protected https
+ # rather than the http protocol. This feature is experimental and
+ # very rudimentary. You probably do not want to use it.
+
+-S # Do not display the median and standard deviation values, nor dis‐
+ # play the warning/error messages when the average and median are
+ # more than one or two times the standard deviation apart. And de‐
+ # fault to the min/avg/max values. (legacy support).
+
+-t timelimit
+ # 设置测试的时间的长短,使用这个选项ab将自动设置
+ # 测试请求会话数目为50000,然后以你设置的时间为
+ # 固定周期.默认状态下是没有时限的,也就是直到完成
+ # 你所设置的请求数目为止.
+
+-T content-type
+ # 内容类型标头,使用在POST数据的时候.
+
+-v verbosity
+ # 设置冗余级别,4级打印出每个请求标头的详细信息,
+ # 3级打印出回应代码(例如,404,200),2级打印出警告 信息和指示消息
+
+-V # 显示版本号并且退出
+-w # 打印输出结果到HTML表中. 默认的表是两列n行白底黑框
+
+-x -attributes
+ # 使用字串来描述表的属性,该属性字串应该插入到
+
+-X proxy[:port]
+ # Use a proxy server for the requests.
+
+-y -attributes
+ # 用于生成html表格每行的属性名 ( )
+
+-z | -attributes
+ # 用于生成html表格每列的属性名 ( | )
```
-### 参数
+### 参数
主机:被测试主机。
-
\ No newline at end of file
+### 实例
+
+```shell
+# 10个并发, 请求500次
+ab -c 10 -n 500 https://www.qq.com/
+```
diff --git a/command/accept.md b/command/accept.md
index 3edc635c3a4..09e9b24d3cd 100644
--- a/command/accept.md
+++ b/command/accept.md
@@ -1,19 +1,19 @@
accept
===
-
+
指示打印系统接受发往指定目标打印机的打印任务
## 补充说明
**accept命令** 属于CUPS套件,用于指示打印系统接受发往指定目标打印机的打印任务。
-### 语法
+### 语法
```
accept(选项)(参数)
```
-### 选项
+### 选项
```
-E:当连接到服务器时强制加密;
@@ -21,9 +21,8 @@ accept(选项)(参数)
-h:指定连接服务器名和端口号。
```
-### 参数
+### 参数
目标:指定目标打印机。
-
\ No newline at end of file
diff --git a/command/ack.md b/command/ack.md
index 0801b946e93..505be25ab16 100644
--- a/command/ack.md
+++ b/command/ack.md
@@ -14,10 +14,10 @@ apk install ack
## 参数
-这些参数在linux上的适用频率是相当高的,尤其是你用vim做为IDE的话
+这些参数在linux上的使用频率是相当高的,尤其是你用vim做为IDE的话
```shell
--c(统记)/ -i(忽略大小)/ -h(不显示名称)/
+-c(统计)/ -i(忽略大小)/ -h(不显示名称)/
-l(只显文件名)/ -n(加行号)/ -v(显示不匹配)
```
@@ -90,9 +90,9 @@ ack-grep -g hello.py$ # 查找正则匹配文件
ack-grep -g hello --sort-files # 查找然后排序
```
-### File Inclusion/Exclusion
+### File inclusion/exclusion
-文件过滤,个人觉得这是一个很不错的功能。如果你曾经在搜索项目源码是不小心命中日志中的某个关键字的话,你会觉得这个有用。
+文件过滤,个人觉得这是一个很不错的功能。如果你曾经在搜索项目源码时不小心命中日志中的某个关键字的话,你会觉得这个有用。
```shell
ack-grep --python hello # 查找所有python文件
diff --git a/command/ag.md b/command/ag.md
new file mode 100644
index 00000000000..47e29043a2f
--- /dev/null
+++ b/command/ag.md
@@ -0,0 +1,100 @@
+ag
+===
+
+ack 的升级版,C语言编写,更快更人性化
+
+## 补充说明
+
+> 摘自 项目的 Readme.md
+
+- 它比ack快一个数量级。
+- 它忽略了你的 `.gitignore` 和 `.hgignore` 中的文件模式。
+- 如果你的源码库里有你不想搜索的文件,只要把它们的模式添加到一个.ignore文件里。(*cough* *.min.js*cough*)
+- 这个命令的名字比ack短33%,而且所有的键都在主行上!
+
+### 语法
+
+```shell
+ag [options] pattern [path ...]
+ag [可选项] 匹配模式 [路径...]
+```
+
+### 选项
+
+```shell
+输出选项:
+ --ackmate 以 AckMate-parseable 的格式显示结果
+ -A --after [LINES] 显示匹配行之后的行(默认2行)
+ -B --before [LINES] 显示匹配行之前的行(默认2行)
+ --[no]break 不同文件中匹配到的内容新建一行显示(默认开启)
+ -c --count 只显示每个文件中匹配到的数量 (通常与匹配行数不同)
+ --[no]color 在结果中打印颜色代码(默认启用)
+ --color-line-number 行号的颜色代码(默认值为:1;33)。
+ --color-match 匹配结果的颜色代码(默认值为:30;43)。
+ --color-path 路径名称的颜色代码(默认值为:1;32)
+ --column 打印结果中的列号
+ --[no]filename 打印文件名(除非搜索单个文件,否则启用)。
+ -H --[no]heading 在每个文件匹配前输出文件名(默认开启)
+ -C --context [LINES] 显示匹配行上下两行(默认2行)
+ --[no]group 和这些一样: --[no]break --[no]heading
+ -g --filename-pattern PATTERN 打印匹配PATTERN的文件名
+ -l --files-with-matches 显示包含匹配的文件名(不显示匹配的行)
+ -L --files-without-matches 只显示不包含匹配项的文件名
+ --print-all-files 打印所有搜索到的文件的标题,甚至那些不包含匹配的文件。
+ --[no]numbers 打印行号。默认情况是在搜索流时省略行号。
+ -o --only-matching 只输出每行匹配的部分
+ --print-long-lines 在很长的行上打印匹配信息(默认:>2k字符)。
+ --passthrough 当搜索一个流时,打印所有的行,即使它们不匹配。
+ --silent 抑制所有的日志信息,包括错误
+ --stats 打印统计(扫描的文件、花费的时间等)。
+ --stats-only 打印统计信息,不打印其他信息(与搜索单个文件时的--计数相同)。
+ --vimgrep 像vim的:vimgrep /pattern/g那样打印结果(它报告每一行的匹配结果)
+ -0 --null --print0 用null分隔文件名(用于'xargs -0')。
+
+搜索选项:
+ -a --all-types 搜索所有文件(包括隐藏文件)
+ -D --debug 可笑的调试(可能没有用)
+ --depth NUM 目录搜索最大深度(默认25)
+ -f --follow 跟随链接进行搜索
+ -F --fixed-strings 为了与grep兼容,--literal的别名。
+ -G --file-search-regex 根据正则匹配搜索指定类型的文件
+ --hidden 搜索隐藏文件 (但遵从 .*ignore 文件)
+ -i --ignore-case 不区分大小写匹配
+ --ignore PATTERN 忽略匹配 PATTERN 的文件/目录(也允许使用文字文件/目录名称)
+ --ignore-dir NAME 为了与ack兼容,--ignore的别名
+ -m --max-count NUM 在一个文件中最大匹配的数量(默认: 10,000)
+ --one-device 不跟随其他设备的链接搜索
+ -p --path-to-ignore STRING 在STRING使用.ignore文件
+ -Q --literal 不要将PATTERN解析为正则表达式
+ -s --case-sensitive 敏感地匹配案例
+ -S --smart-case 不区分大小写匹配,除非 PATTERN 包含大写字符
+ --search-binary 搜索二进制文件
+ -t --all-text 搜索所有文本文件(不包括隐藏文件)
+ -u --unrestricted 搜索所有文件 (忽略 .ignore, .gitignore, 比如:搜索二进制和隐藏文件)
+ -U --skip-vcs-ignores 忽略VCS的忽略文件(指的是 .gitignore,.hgignore;仍然遵从.ignore)。
+ -v --invert-match 反向匹配
+ -w --word-regexp 只匹配整个单词
+ -W --width NUM 在NUM字符后截断匹配行
+ -z --search-zip 搜索压缩文件中的内容
+
+文件类型:
+搜索可以限制在某些类型的文件中,例如:
+ ag --html needle 结果输出到指定类型文件
+ - 在后缀为 .htm、.html、.shtml 或 .xhtml 的文件中搜索“needle”
+
+有关支持的文件类型的列表,可以运行:
+ ag --list-file-types 列出支持的文件类型
+```
+
+### 实例
+
+列出当前目录下包含 `npm` 的文件
+
+```shell
+➜ vue-project ag npm ./
+README.md
+16:npm install
+22:npm run dev
+28:npm run build
+```
+
diff --git a/command/alias.md b/command/alias.md
index b0ae470440c..55e3337de27 100644
--- a/command/alias.md
+++ b/command/alias.md
@@ -1,117 +1,118 @@
alias
===
-用来设置指令的别名
+定义或显示别名。
-## 补充说明
+## 概要
-**alias命令** 用来设置指令的别名。我们可以使用该命令可以将一些较长的命令进行简化。使用alias时,用户必须使用单引号`''`将原来的命令引起来,防止特殊字符导致错误。
-
-alias命令的作用只局限于该次登入的操作。若要每次登入都能够使用这些命令别名,则可将相应的alias命令存放到bash的初始化文件`/etc/bashrc`中。
-
-### 语法
-
-```
-alias(选项)(参数)
-```
-
-### 选项
-
-```
--p:打印已经设置的命令别名。
-```
-
-### 参数
-
-命令别名设置:定义命令别名,格式为“命令别名=‘实际命令’”。
-
-### 实例
-
-**alias 的基本使用方法为:**
-
-```
-alias 新的命令='原命令 -选项/参数'
+```shell
+alias [-p] [name[=value] ...]
```
-例如:`alias l=‘ls -lsh'`将重新定义ls命令,现在只需输入l就可以列目录了。直接输入 alias 命令会列出当前系统中所有已经定义的命令别名。
+## 主要用途
-要删除一个别名,可以使用 unalias 命令,如 unalias l。
+- 简化较长的命令。
+- 定义、修改或者显示一个或多个别名。
-**查看系统已经设置的别名:**
+## 选项
```shell
-[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 ~]#
-
+-p:显示全部已定义的别名。
+name(可选):指定要(定义、修改、显示)的别名。
+value(可选):别名的值。
```
-### 命令别名永久生效
-直接在shell里设定的命令别名,在终端关闭或者系统重新启动后都会失效,如何才能永久有效呢?办法就是将别名的设置加入~/.bashrc文件,然后重新载入下文件就可以了。
+### 返回值
-```shell
-$ vim ~/.bashrc
-```
-在文件最后面加入别名设置,如:alias rm=’rm -i’,保存后重新载入:
+alias 返回 true 除非您要显示的别名未定义。
+
+## 例子
```shell
-$ source ~/.bashrc
-```
+# 显示全部已定义的别名
+alias
+alias -p
-这样就可以永久保存命令的别名了。因为修改的是当前用户目录下的.bashrc文件,所以这样的方式只对当前用户有用。如果要对所有用户都有效,修改/etc目录下的bashrc文件就可以了。在CentOS7下,这个文件是/etc/bash.bashrc。此外在CentOS7下,细看~/.bashrc文件,会发有这样一段代码:
+# 显示已定义的别名(假设当前环境存在以下别名)
+alias ls
+alias ls grep
-```shell
-if [ -f ~/.bash_aliases ]; then
- . ~/.bash_aliases
-fi
+# 定义或修改别名的值
+alias ls='ls --color=auto'
+alias ls='ls --color=never' grep='grep --color=never'
```
-这个代码的意思就是加载.bash_aliases文件,CentOS7已经帮我们考虑好了,所以也可以在用户根目录下新建一个文件.bash_aliases存放命令别名设置。
+## 知识点
-### 小结
+直接在shell里设定的命令别名,在终端关闭或者系统重新启动后都会失效,如何才能永久有效呢?
-alias这个命令是shell的内建命令,可以根据自己的使用习惯设置一些别名,需要注意的就是和其他命令冲突的情况。
+使用编辑器打开`~/.bashrc`,在文件中加入别名设置,如:alias rm='rm -i',保存后执行`source ~/.bashrc`,这样就可以永久保存命令的别名了。
+因为修改的是当前用户目录下的`~/.bashrc`文件,所以这样的方式只对当前用户有用。如果要对所有用户都有效,修改`/etc/bashrc`文件就可以了。
-#### 一、 范例演示
+> 请注意,以下内容可能与您实际使用的系统有出入:
+>
+> 在CentOS7下,这个文件是`/etc/bash.bashrc`。此外在CentOS7下,细看`~/.bashrc`文件,会发现有这样一段代码:
+>
+> ```shell
+> if [ -f ~/.bash_aliases ]; then
+> . ~/.bash_aliases
+> fi
+> ```
+>
+> 这个代码的意思就是如果存在那么就加载`.bash_aliases`文件,所以也可以在用户根目录下新建该文件用于单独存放命令别名设置。
-在使用和维护Linux系统过程中,我们常常希望根据自己的需要来定义一些命令,那么这样的操作是不是很难呢?其实不是,系统已经为我们设置好了相关的命令,下面小编就以CentOS6.4系统为例,为大家演示如何创建自己的命令。
-#### 二、 自定义命令简介
+## 错误用法
-CentOS系统下的创建自定义命令其实比较简单,使用的命令就是alias,具体使用的方法就是 alias 自定义命令名=‘命令’。但是需要注意的是,在自定义之前需要查看自定义的命令名是否是系统已经使用的命令名,否则会冲突,另外一个就是定期清理不需要的自定义命令名。
+- 要显示的别名未定义。
+- 当您定义(修改)别名的值的时候,由于值的字符串有空格但您没有用**单引号扩起**,那么会导致严重的问题:
+```shell
+# 为方便演示,删除全部别名
+unalias -a
+# 没有用单引号扩起
+alias rm=rm -rf
+# 执行命令后报错 bash: alias: -rf: not found
+# 这时使用alias查看rm的别名时返回 alias rm='rm'
+```
-#### 三、 演示举例
-
-假定系统操作员希望进行如下操作:
+```shell
+# 更具有迷惑性的例子
+# 为方便演示,删除全部别名
+unalias -a
+# 仍然没有用单引号括起
+alias ls=ls --color=never
+# 执行命令后看起来没有报错
+
+# 使用alias查看全部别名会发现运行结果如下:
+# alias --color=never
+# alias ls='ls'
+# alias处理时将它们看成了两组
+```
-1.进入目录/root
-2.查看目录下文件
-3.切换回根目录
+## Q&A
-通常这需要三条命令 cd /root;ls;cd / ,如果需要经常使用那么我们可以通过自定义命令的方式用一条命令完成全部操作。
+Q:如果我要显示一到多个别名,但不知道其中是否有未定义的该怎么办?
-#### 四、 操作过程
+A:正常执行就是了,alias不会因为有一个未定义的别名就结束对剩余参数的执行。
+Q:如果我这么定义`alias cd='ls' ls='cd'`,会有什么后果?
-首先使用命令 type 自定义命令名 ,查看自定义命令名是否被系统占用。从图中可以看出test命令名已被系统占用,所以不能使用,而loo这个命令名经查询可以使用。
+A:运行cd依然会切换目录,运行ls依然会列出文件夹的内容;不要这样定义。
-使用命令alias创建自定义命令:alias loo='cd /root;ls;cd /' 。需要注意的是命令的使用格式,分号与分号之间是没有空格的。
-测试一下自定义命令,当输入命令 loo 时,发现系统依次完成了 cd /root、ls、cd / 三条命令,说明设置成功。同时也可直接使用命令 alias 查询系统中是否添加了loo这个自定义命令。
+### 注意
-如果希望删除这个自定义命令,可以使用命令 unalias 自定义命令名 来完成。执行之后发现,loo命令已不存在,同时自定义命令库中也没有loo命令。
+1. 执行脚本时请注意:
+ - 使用 `source` 命令执行的bash脚本如果执行了 `alias` 或 `unalias` 命令,那么有可能会对终端环境的别名设置产生影响;终端环境的别名设置也可能改变运行结果;
+ - 通过 `sh` 方式调用的 bash 脚本或直接运行当前用户有执行权限的脚本不受终端环境的别名影响。
+2. 删除别名,请查看`unalias`命令。
+3. 建议您不要对 `mv cp rm` 等命令的别名设置危险的 `-f` 选项,比如 `alias rm='rm -f'`。
+4. 需要注意别名是否和其他命令有冲突的情况。
+5. 该命令是 bash 内建命令,相关的帮助信息请查看 `help` 命令。
+### 其他参考链接
-
+- [alias(1p) - Linux manual page](https://man7.org/linux/man-pages/man1/alias.1p.html)
+- [Linux命令详解:\[8\]alias创建自己的命令](https://jingyan.baidu.com/article/ac6a9a5e6738422b653eac01.html)
diff --git a/command/apachectl.md b/command/apachectl.md
index 64f2ffe8efc..14d220cab8e 100644
--- a/command/apachectl.md
+++ b/command/apachectl.md
@@ -7,13 +7,13 @@ Apache服务器前端控制工具
**apachectl命令** 是Apache的Web服务器前端控制工具,用以启动、关闭和重新启动Web服务器进程。
-### 语法
+### 语法
```
apachectl(参数)
```
-### 参数
+### 参数
* configtest:检查设置文件中的语法是否正确;
* fullstatus:显示服务器完整的状态信息;
@@ -25,4 +25,3 @@ apachectl(参数)
* stop:停止Apache服务器。
-
\ No newline at end of file
diff --git a/command/apropos.md b/command/apropos.md
index a48625063c1..9fb8d3c4f65 100644
--- a/command/apropos.md
+++ b/command/apropos.md
@@ -5,17 +5,17 @@ apropos
## 补充说明
-**apropos命令** 在一些特定的包含系统命令的简短描述的数据库文件里查找关键字,然后把结果送到标准输出。
+**apropos命令** 在一些特定的包含系统命令的简短描述的数据库文件里查找关键字,然后把结果送到标准输出。
如果你不知道完成某个特定任务所需要命令的名称,可以使用一个关键字通过Linux apropos实用程序来搜索它。该实用程序可以搜索关键字并且显示所有包含匹配项的man页面的简短描述。另外,使用man实用程序和-k(关键字)选项,可以得到和用Linux apropos实用程序相同的结果(实际上是相同的命令)。
-### 语法
+### 语法
```shell
apropos [-dalhvV] -e|-[w|-r] [-s section] [-m system[,...]] [-M path] [-L locale] -C [file] keyword ...
```
-### 选项
+### 选项
```shell
-d, --debug:输出调试信息。
@@ -27,18 +27,18 @@ apropos [-dalhvV] -e|-[w|-r] [-s section] [-m system[,...]] [-M path] [-L locale
-l, --long:不根据终端宽度缩减输出。
-s section, --section section:只查找指定的手册section。
-m system[,...], --systems=system[,...]:用于查找其它操作系统的手册页。
--M path, --manpath=path:指定从其它以冒号分隔的手册页层次查找。默认使用$MANPATH环境变量。这个选项覆盖$MANPATH的内容。
--L locale, --locale=locale:apropos调用C函数setlocale来得到当前本地化信息,包括$LC_MESSAGE和$LANG。使用该选项提供一个locale字符串来临时更改本地化信息。
+-M path, --manpath=path:指定从其它以冒号分隔的手册页层次查找。默认使用 $MANPATH 环境变量。这个选项覆盖 $MANPATH 的内容。
+-L locale, --locale=locale:apropos调用C函数setlocale来得到当前本地化信息,包括 $LC_MESSAGE 和 $LANG 。使用该选项提供一个locale字符串来临时更改本地化信息。
-C file, --config-file=file:使用这个用户配置文件而不是默认的~/.manpath。
-h, --help:打印帮助信息并退出。
-V, --version:打印版本信息并退出。
```
-### 返回值
+### 返回值
返回0表示成功,1表示用法、语法或配置文件错误,2表示操作错误,16表示没有找到匹配的内容。
-### 实例
+### 实例
```shell
[root@localhost ~]# man -k who
@@ -69,6 +69,3 @@ whoami (1) - print effective userid
```shell
apropos -a emacs vi
```
-
-
-
\ No newline at end of file
diff --git a/command/apt-get.md b/command/apt-get.md
index 8af46a2e7ac..c9189162f51 100644
--- a/command/apt-get.md
+++ b/command/apt-get.md
@@ -7,24 +7,34 @@ Debian Linux发行版中的APT软件包管理工具
**apt-get命令** 是Debian Linux发行版中的APT软件包管理工具。所有基于Debian的发行都使用这个包管理系统。deb包可以把一个应用的文件包在一起,大体就如同Windows上的安装文件。
-### 语法
+### 语法
```shell
-apt-get(选项)(参数)
+apt-get [OPTION] PACKAGE
```
-### 选项
+### 选项
```shell
+apt-get install # 安装新包
+apt-get remove # 卸载已安装的包(保留配置文件)
+apt-get purge # 卸载已安装的包(删除配置文件)
+apt-get update # 更新软件包列表
+apt-get upgrade # 更新所有已安装的包
+apt-get autoremove # 卸载已不需要的包依赖
+apt-get dist-upgrade # 自动处理依赖包升级
+apt-get autoclean # 将已经删除了的软件包的.deb安装文件从硬盘中删除掉
+apt-get clean # 删除软件包的安装包
+
-c:指定配置文件。
```
-### 参数
+### 参数
* 管理指令:对APT软件包的管理操作;
* 软件包:指定要操纵的软件包。
-### 实例
+### 实例
使用apt-get命令的第一步就是引入必需的软件库,Debian的软件库也就是所有Debian软件包的集合,它们存在互联网上的一些公共站点上。把它们的地址加入,apt-get就能搜索到我们想要的软件。/etc/apt/sources.list是存放这些地址列表的配置文件,其格式如下:
@@ -89,4 +99,4 @@ apt-get autoclean
```
-
\ No newline at end of file
+
diff --git a/command/apt-key.md b/command/apt-key.md
index a5323317de9..d35b8578824 100644
--- a/command/apt-key.md
+++ b/command/apt-key.md
@@ -7,17 +7,17 @@ apt-key
**apt-key命令** 用于管理Debian Linux系统中的软件包密钥。每个发布的deb包,都是通过密钥认证的,apt-key用来管理密钥。
-### 语法
+### 语法
```shell
apt-key(参数)
```
-### 参数
+### 参数
操作指令:APT密钥操作指令。
-### 实例
+### 实例
```shell
apt-key list # 列出已保存在系统中key。
@@ -27,4 +27,3 @@ apt-key update # 更新本地trusted数据库,删除过期没用的key
```
-
\ No newline at end of file
diff --git a/command/apt-sortpkgs.md b/command/apt-sortpkgs.md
index 2464a82e4be..060f8ef109c 100644
--- a/command/apt-sortpkgs.md
+++ b/command/apt-sortpkgs.md
@@ -7,22 +7,21 @@ Debian Linux下对软件包索引文件进行排序的工具
**apt-sortpkgs命令** 是Debian Linux下对软件包索引文件进行排序的简单工具。
-### 语法
+### 语法
```shell
apt-sortpkgs(选项)(参数)
```
-### 选项
+### 选项
```shell
-s:使用源索引字段排序;
-h:显示帮助信息。
```
-### 参数
+### 参数
文件:指定要排序的包含debian包信息的索引文件。
-
\ No newline at end of file
diff --git a/command/aptitude.md b/command/aptitude.md
index 6e577310d5f..6b447d6b16d 100644
--- a/command/aptitude.md
+++ b/command/aptitude.md
@@ -7,13 +7,13 @@ Debian Linux系统中软件包管理工具
**aptitude命令** 与apt-get命令一样,都是Debian Linux及其衍生系统中功能极其强大的包管理工具。与apt-get不同的是,aptitude在处理依赖问题上更佳一些。举例来说,aptitude在删除一个包时,会同时删除本身所依赖的包。这样,系统中不会残留无用的包,整个系统更为干净。它通过文本操作菜单和命令两种方式管理软件包。
-### 语法
+### 语法
```shell
aptitude(选项)(参数)
```
-### 选项
+### 选项
```shell
-h:显示帮助信息;
@@ -24,11 +24,11 @@ aptitude(选项)(参数)
-u:启动时下载新的软件包列表。
```
-### 参数
+### 参数
操作命令:用户管理软件包的操作命令。
-### 实例
+### 实例
以下是我总结的一些常用aptitude命令,仅供参考:
@@ -48,4 +48,3 @@ aptitude autoclean # 仅删除过期的包文件
当然,你也可以在文本界面模式中使用 aptitude。
-
\ No newline at end of file
diff --git a/command/ar.md b/command/ar.md
index d309168256f..6b15af34b83 100644
--- a/command/ar.md
+++ b/command/ar.md
@@ -7,55 +7,57 @@ ar
**ar命令** 是一个建立或修改备存文件,或是从备存文件中抽取文件的工具,ar可让您集合许多文件,成为单一的备存文件。在备存文件中,所有成员文件皆保有原来的属性与权限
-### 语法
+### 语法
-```
-ab(选项)(参数)
-Usage: ar [emulation options] [-]{dmpqrstx}[abcDfilMNoPsSTuvV] [--plugin ] [member-name] [count] archive-file file...
- ar -M [] [member-name] [count] archive-file file...
+ ar -M [ 以下内容来自 GNU ar (GNU Binutils) 2.40 版本指令
```shell
-d - 从归档文件中删除文件
-m[ab] - 在归档文件中移动文件
-p - 打印在归档文件中找到的文件
-q[f] - 将文件快速追加到归档文件中
-r[ab][f][u] - 替换归档文件中已有的文件或加入新文件
-s - act as ranlib
-t - 显示归档文件的内容
-x[o] - 从归档文件中分解文件
+命令:
+ d - 从归档文件中删除文件
+ m[ab] - 在归档文件中移动文件
+ p - 打印在归档文件中找到的文件
+ q[f] - 将文件快速追加到归档文件中
+ r[ab][f][u] - 替换归档文件中已有的文件或加入新文件
+ s - 作为 ranlib 工作
+ t[O][v] - display contents of the archive
+ 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] - 只替换比当前归档内容更新的文件
+ [a] - 将文件置于 [成员名] 之后
+ [b] - 将文件置于 [成员名] 之前 (于 [i] 相同)
+ [D] - 将 0 用于时间戳和 uid/gid(默认)
+ [D] - 使用实际时间戳和 uid/gid
+ [N] - 使用名称的实例 [数量]
+ [f] - 截去插入的文件名称
+ [P] - 在匹配时使用完整的路径名
+ [o] - 保留原来的日期
+ [O] - display offsets of files in the archive
+ [u] - 只替换比当前归档内容更新的文件
通用修饰符:
-[c] - 不在必须创建库的时候给出警告
-[s] - 创建归档索引 (cf. ranlib)
-[S] - 不要创建符号表
-[T] - 做一个压缩档案
-[v] - 输出较多信息
-[V] - 显示版本号
-@ - 从读取选项
---target=BFDNAME - 将目标对象格式指定为BFDNAME
-```
-
-选项参数
-
-```shell
---plugin - load the specified plugin
+ [c] - 不在必须创建库的时候给出警告
+ [s] - 创建归档索引 (cf. ranlib)
+ [l ] - specify the dependencies of this library
+ [S] - 不要创建符号表
+ [T] - deprecated, use --thin instead
+ [v] - 输出较多信息
+ [V] - 显示版本号
+ @ - 从 读取选项
+ --target=BFDNAME - 指定目标对象格式为 BFDNAME
+ --output=DIRNAME - specify the output directory for extraction operations
+ --record-libdeps= - specify the dependencies of this library
+ --thin - make a thin archive
+可选项:
+ --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
-
### 实例
打包文件
@@ -101,4 +103,4 @@ d.c
```
-
+
diff --git a/command/arch.md b/command/arch.md
index 75cd9fbe1b4..3b797fb33c8 100644
--- a/command/arch.md
+++ b/command/arch.md
@@ -3,22 +3,34 @@ arch
显示当前主机的硬件架构类型
-## 补充说明
+## 概要
-**arch命令** 用于显示当前主机的硬件架构类型。arch命令等同于`命令name -m`在当前的Linux系统下,arch命令输出结果有:i386、i486、i586、alpha、sparc、arm、m68k、mips、ppc、i686等
+```shell
+arch [OPTION]...
+```
+
+## 主要用途
-### 语法
+- 打印机器架构信息;`arch` 命令输出结果有:i386、i486、i586、alpha、sparc、arm、m68k、mips、ppc、i686等。
+
+## 选项
```shell
-arch
+--help 显示帮助信息并退出。
+--version 显示版本信息并退出。
```
-### 实例
+## 例子
```shell
-arch
+[root@localhost ~]# arch
x86_64
```
+### 注意
+
+1. 该命令等价于 `uname -m`。
+
+2. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 arch`,`info coreutils 'arch invocation'`。
+
-
\ No newline at end of file
diff --git a/command/arj.md b/command/arj.md
index 452d30c1ea2..05181e1653f 100644
--- a/command/arj.md
+++ b/command/arj.md
@@ -7,16 +7,15 @@ arj
**arj命令** 是 `.arj` 格式的压缩文件的管理器,用于创建和管理 `.arj` 压缩包。
-### 语法
+### 语法
```shell
arj(参数)
```
-### 参数
+### 参数
* 操作指令:对 `.arj` 压缩包执行的操作指令;
* 压缩包名称:指定要操作的arj压缩包名称。
-
\ No newline at end of file
diff --git a/command/arp.md b/command/arp.md
index 542d4b46a31..993f236f416 100644
--- a/command/arp.md
+++ b/command/arp.md
@@ -1,12 +1,24 @@
arp
===
-arp 命令用于显示和修改 IP 到 MAC 转换表。
+arp 命令用于显示和修改 IP 到 MAC 转换表
## 补充说明
**arp 命令** 是 Address Resolution Protocol,地址解析协议,是通过解析网络层地址来找寻数据链路层地址的一个网络协议包中极其重要的网络传输协议。而该命令可以显示和修改 arp 协议解析表中的缓冲数据。
+这个核心协议模块实现RFC826中定义的 Address Resolution Protocol [译注:即TCP/IP的第三层到第一层的地址转换协议],用于在直接相连的网络中换第二层硬件地址和 Ipv4 协议地址之间的转换。 用户除非想对其进行配置,否则一般不会直接操作这个模块。
+
+实际上,它提供对核心中其它协议的服务。
+
+用户进程可以使用 packet(7) 的 sockets,收到 ARP 包(译注:一译分组)。 还有一种机制是使用 netlink(7) sockets,在用户空间管理 ARP 缓存的机制。我们也可以通过 ioctl (2) 控制任意 PF_INET socket上的 ARP 表
+
+ARP 模块维护一个硬件地址到协议地址映射的缓存。这个缓存有大小限制,所以不常用的和旧的记录(Entry)将被垃圾收集器清除(garbage-collected),垃圾收集器永远不能删除标为永久的记录。我们可以使用ioctls直接操纵缓冲, 并且其性状可以用下面定义的 sysctl 调节。
+
+如果在限定的时间(见下面的sysctl)内,一条现存映射没有肯定反馈时, 则认为相邻层的缓存记录失效。 为了再次向目标发送数据,ARP将首先试着询问本地arp进程 app_solicit 次,获取更新了的 MAC(介质访问控制)地址。 如果失败,并且旧的MAC地址是已知的,则发送 ucast_solicit 次的 unicast probe。如果仍然失败,则将向网络广播一个新的ARP请求,此时要 有待发送数据的队列
+
+如果 Linux 接到一个地址请求,而且该地址指向 Linux 转发的地址,并且接收接口打开了代理 arp 时,Linux 将自动添加一条非永久的代理 arp 记录;如果存在拒绝到目标的路由,则不添加代理 arp 记录。
+
### 语法
```shell
@@ -15,16 +27,18 @@ 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 地址的静态映射。
+```shell
+-a # 主机 :显示 arp 缓冲区的所有条目;
+-H # 地址类型 :指定 arp 指令使用的地址类型;
+-d # 主机 :从 arp 缓冲区中删除指定主机的 arp 条目;
+-D # 使用指定接口的硬件地址;
+-e # 以 Linux 的显示风格显示 arp 缓冲区中的条目;
+-i # 接口 :指定要操作 arp 缓冲区的网络接口;
+-s # 主机 MAC 地址 :设置指定的主机的 IP 地址与 MAC 地址的静态映射;
+-n # 以数字方式显示 arp 缓冲区中的条目;
+-v # 显示详细的 arp 缓冲区条目,包括缓冲区条目的统计信息;
+-f # 文件 :设置主机的 IP 地址与 MAC 地址的静态映射。
+```
### 参数
diff --git a/command/arpd.md b/command/arpd.md
index b609b2bdc1b..c6ed7d3ca7d 100644
--- a/command/arpd.md
+++ b/command/arpd.md
@@ -7,13 +7,13 @@ arpd
**arpd命令** 是用来收集免费arp信息的一个守护进程,它将收集到的信息保存在磁盘上或者在需要时,提供给内核用户用于避免多余广播。
-### 语法
+### 语法
```shell
arpd(选项)(参数)
```
-### 选项
+### 选项
```shell
-l:将arp数据库输出到标准输出设备显示并退出;
@@ -24,11 +24,11 @@ arpd(选项)(参数)
-n:设定缓冲失效时间。
```
-### 参数
+### 参数
网络接口:指定网络接口。
-### 实例
+### 实例
启动arpd进程:
@@ -43,4 +43,3 @@ arpd -l -b /var/tmp/arpd.db
```
-
\ No newline at end of file
diff --git a/command/arping.md b/command/arping.md
index 02bb77c2b2e..918942df3bf 100644
--- a/command/arping.md
+++ b/command/arping.md
@@ -7,13 +7,13 @@ arping
**arping命令** 是用于发送arp请求到一个相邻主机的工具,arping使用arp数据包,通过ping命令检查设备上的硬件地址。能够测试一个ip地址是否是在网络上已经被使用,并能够获取更多设备信息。功能类似于ping。
-### 语法
+### 语法
```shell
arping(选项)(参数)
```
-### 选项
+### 选项
```shell
-b:用于发送以太网广播帧(FFFFFFFFFFFF)。arping一开始使用广播地址,在收到响应后就使用unicast地址。
@@ -21,15 +21,15 @@ arping(选项)(参数)
-f:表示在收到第一个响应报文后就退出;
-w timeout:设定一个超时时间,单位是秒。如果到了指定时间,arping还没到完全收到响应则退出;
-c count:表示发送指定数量的ARP请求数据包后就停止。如果指定了deadline选项,则arping会等待相同数量的arp响应包,直到超时为止;
--s source:设定arping发送的arp数据包中的SPA字段的值。如果为空,则按下面处理,如果是DAD模式(冲突地址探测),则设置为0.0.0.0,如果是Unsolicited ARP模式(Gratutious ARP)则设置为目标地址,否则从路由表得出;
+-s source:设定arping发送的arp数据包中的SPA字段的值。如果为空,则按下面处理,如果是DAD模式(冲突地址探测),则设置为0.0.0.0,如果是Unsolicited ARP模式(Gratuitous ARP)则设置为目标地址,否则从路由表得出;
-I interface:设置ping使用的网络接口。
```
-### 参数
+### 参数
目的主机:指定发送ARP报文的目的主机。
-### 实例
+### 实例
```shell
[root@localhost ~]# arping www.baidu.com
@@ -47,4 +47,3 @@ Received 8 response(s)
```
-
\ No newline at end of file
diff --git a/command/arptables.md b/command/arptables.md
index 64af5706a91..1b80c836fde 100644
--- a/command/arptables.md
+++ b/command/arptables.md
@@ -7,13 +7,13 @@ arptables
**arptables命令** 用来设置、维护和检查Linux内核中的arp包过滤规则表。
-### 语法
+### 语法
```shell
arptables(选项)
```
-### 选项
+### 选项
```shell
-A:向规则链中追加规则;
@@ -32,4 +32,3 @@ arptables(选项)
```
-
\ No newline at end of file
diff --git a/command/arpwatch.md b/command/arpwatch.md
index 72883f3443c..2c04b5a4bf1 100644
--- a/command/arpwatch.md
+++ b/command/arpwatch.md
@@ -7,13 +7,13 @@ arpwatch
**arpwatch命令** 用来监听网络上arp的记录。
-### 语法
+### 语法
```shell
arpwatch(选项)
```
-### 选项
+### 选项
```shell
-d:启动排错模式;
@@ -23,4 +23,3 @@ arpwatch(选项)
```
-
\ No newline at end of file
diff --git a/command/as.md b/command/as.md
index 0904e5f0d83..12578067995 100644
--- a/command/as.md
+++ b/command/as.md
@@ -5,15 +5,15 @@ as
## 补充说明
-**as命令** GNU组织推出的一款汇编语言编译器,它支持多种不同类型的处理器。
+**as命令** 是GNU组织推出的一款汇编语言编译器,它支持多种不同类型的处理器。
-### 语法
+### 语法
```shell
-as(选项)(参数)
+as [选项] [参数]
```
-### 选项
+### 选项
```shell
-ac:忽略失败条件;
@@ -33,9 +33,44 @@ as(选项)(参数)
--statistics:打印汇编所用的最大空间和总时间。
```
-### 参数
+### 参数
汇编文件:指定要汇编的源文件。
+### 示例
-
\ No newline at end of file
+编译一个汇编文件并生成目标文件
+
+```shell
+as -o output.o source.s
+```
+
+忽略调试指令并生成目标文件
+
+```shell
+as -ad -o output.o source.s
+```
+
+生成包含调试信息的目标文件
+
+```shell
+as -g -o output.o source.s
+```
+
+包括宏扩展并生成目标文件
+
+```shell
+as -am -o output.o source.s
+```
+
+打印汇编所用的最大空间和总时间
+
+```shell
+as --statistics -o output.o source.s
+```
+
+跳过空白和注释预处理并生成目标文件
+
+```shell
+as -f -o output.o source.s
+```
\ No newline at end of file
diff --git a/command/at.md b/command/at.md
index a03a31beb89..352063efe3a 100644
--- a/command/at.md
+++ b/command/at.md
@@ -5,17 +5,17 @@ at
## 补充说明
-**at命令** 用于在指定时间执行命令。at允许使用一套相当复杂的指定时间的方法。它能够接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。当然也能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的 词语来指定时间。用户还能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。 也能够指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年)。指定的日期必须跟在指定时间的后面。
+**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(明天)来指定完成命令的时间。
+上面介绍的都是绝对计时法,其实还能够使用相对计时法,这对于安排不久就要执行的命令是很有好处的。指定格式为:`now + count time-units`,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,究竟是几天,还是几小时,等等。更有一种计时方法就是直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。
-### 语法
+### 语法
```shell
-at(选项)(参数)
+at [-V] [-q 队列] [-f 文件] [-mldbv] 时间 at -c 作业 [作业...]
```
-### 选项
+### 选项
```shell
-f:指定包含具体指令的任务文件;
@@ -25,13 +25,13 @@ at(选项)(参数)
-m:任务执行完成后向用户发送E-mail。
```
-### 参数
+### 参数
日期时间:指定任务执行的日期时间。
-### 实例
+### 示例
-三天后的下午 5 点锺执行`/bin/ls`:
+三天后的下午 5 点钟执行`/bin/ls`:
```shell
[root@localhost ~]# at 5pm+3 days
@@ -60,10 +60,6 @@ job 8 at 2013-01-06 17:20
删除已经设置的任务:
```shell
-[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
@@ -80,5 +76,28 @@ umask 22此处省略n个字符
date >/root/2013.log
```
+使用任务文件执行任务:
-
\ No newline at end of file
+```shell
+[root@localhost ~]# echo "/bin/ls" > mytask.txt
+[root@localhost ~]# at -f mytask.txt 5pm+3 days
+job 9 at 2013-01-08 17:00
+```
+
+指定任务队列执行任务:
+
+```shell
+[root@localhost ~]# at -q b 5pm+3 days
+at> /bin/ls
+at>
+job 10 at 2013-01-08 17:00
+```
+
+任务执行完成后发送E-mail通知:
+
+```shell
+[root@localhost ~]# at -m 5pm+3 days
+at> /bin/ls
+at>
+job 11 at 2013-01-08 17:00
+```
\ No newline at end of file
diff --git a/command/atop.md b/command/atop.md
index 86fd79848f5..ca04cc49b93 100644
--- a/command/atop.md
+++ b/command/atop.md
@@ -5,27 +5,32 @@ atop
## 补充说明
-[非内部程序,需要安装]它以一定的频率记录系统的运行状态,所采集的数据包含系统资源(CPU、内存、磁盘和网络)使用情况和进程运行情况,并能以日志文件的方式保存在磁盘中,服务器出现问题后,我们可获取相应的atop日志文件进行分析。atop是一款开源软件,我们可以从这里获得其源码和rpm安装包。
+**atop命令** 是一款开源的系统监控工具,它以一定的频率记录系统的运行状态,采集的数据包含系统资源(CPU、内存、磁盘和网络)使用情况和进程运行情况,并能以日志文件的方式保存在磁盘中。服务器出现问题后,我们可获取相应的atop日志文件进行分析。atop是一款开源软件,我们可以从这里获得其[源码](https://github.com/Atoptool/atop)和[rpm安装包](https://pkgs.org/download/atop)。
-## 语法
+## 语法
```shell
-atop(选项)(参数)
+atop [选项] [参数]
```
-## 说明
+## 说明
-**ATOP列**:该列显示了主机名、信息采样日期和时间点
+### ATOP列
-**PRC列**:该列显示进程整体运行情况
+该列显示了主机名、信息采样日期和时间点。
+
+### PRC列
+
+该列显示进程整体运行情况:
- sys、usr字段分别指示进程在内核态和用户态的运行时间
-- #proc字段指示进程总数
-- #zombie字段指示僵死进程的数量
-- #exit字段指示atop采样周期期间退出的进程数量
+- `#proc` 字段指示进程总数
+- `#zombie` 字段指示僵尸进程的数量
+- `#exit` 字段指示atop采样周期期间退出的进程数量
+### CPU列
-**CPU列**:该列显示CPU整体(即多核CPU作为一个整体CPU资源)的使用情况,我们知道CPU可被用于执行进程、处理中断,也可处于空闲状态(空闲状态分两种,一种是活动进程等待磁盘IO导致CPU空闲,另一种是完全空闲)
+该列显示CPU整体(即多核CPU作为一个整体CPU资源)的使用情况:
- sys、usr字段指示CPU被用于处理进程时,进程在内核态、用户态所占CPU的时间比例
- irq字段指示CPU被用于处理中断的时间比例
@@ -34,15 +39,21 @@ atop(选项)(参数)
CPU列各个字段指示值相加结果为N00%,其中N为cpu核数。
-cpu列:该列显示某一核cpu的使用情况,各字段含义可参照CPU列,各字段值相加结果为100%
+### cpu列
+
+该列显示某一核cpu的使用情况,各字段含义可参照CPU列,各字段值相加结果为100%。
-**CPL列**:该列显示CPU负载情况
+### CPL列
+
+该列显示CPU负载情况:
- avg1、avg5和avg15字段:过去1分钟、5分钟和15分钟内运行队列中的平均进程数量
- csw字段指示上下文交换次数
- intr字段指示中断发生次数
-**MEM列**:该列指示内存的使用情况
+### MEM列
+
+该列指示内存的使用情况:
- tot字段指示物理内存总量
- free字段指示空闲内存的大小
@@ -50,44 +61,49 @@ cpu列:该列显示某一核cpu的使用情况,各字段含义可参照CPU
- buff字段指示用于文件缓存的内存大小
- slab字段指示系统内核占用的内存大小
-**SWP列**:该列指示交换空间的使用情况
+### SWP列
+
+该列指示交换空间的使用情况:
- tot字段指示交换区总量
- free字段指示空闲交换空间大小
-**PAG列**:该列指示虚拟内存分页情况
+### PAG列
+
+该列指示虚拟内存分页情况:
+
+- swin、swout字段:换入和换出内存页数
-swin、swout字段:换入和换出内存页数
+### DSK列
-**DSK列**:该列指示磁盘使用情况,每一个磁盘设备对应一列,如果有sdb设备,那么增多一列DSK信息
+该列指示磁盘使用情况,每一个磁盘设备对应一列,如果有sdb设备,那么增多一列DSK信息:
- sda字段:磁盘设备标识
- busy字段:磁盘忙时比例
- read、write字段:读、写请求数量
-**NET列**:多列NET展示了网络状况,包括传输层(TCP和UDP)、IP层以及各活动的网口信息
+### NET列
-- XXXi 字段指示各层或活动网口收包数目
-- XXXo 字段指示各层或活动网口发包数目
+多列NET展示了网络状况,包括传输层(TCP和UDP)、IP层以及各活动的网口信息:
+- XXXi字段指示各层或活动网口收包数目
+- XXXo字段指示各层或活动网口发包数目
## atop日志
-每个时间点采样页面组合起来就形成了一个atop日志文件,我们可以使用"atop -r XXX"命令对日志文件进行查看。那以什么形式保存atop日志文件呢?
-
-对于atop日志文件的保存方式,我们可以这样:
+每个时间点采样页面组合起来就形成了一个atop日志文件,我们可以使用`atop -r XXX`命令对日志文件进行查看。日志文件的保存方式如下:
- 每天保存一个atop日志文件,该日志文件记录当天信息
-- 日志文件以"atop_YYYYMMDD"的方式命名
+- 日志文件以`atop_YYYYMMDD`的方式命名
- 设定日志失效期限,自动删除一段时间前的日志文件
-其实atop开发者已经提供了以上日志保存方式,相应的atop.daily脚本可以在源码目录下找到。在atop.daily脚本中,我们可以通过修改INTERVAL变量改变atop信息采样周期(默认为10分钟);通过修改以下命令中的数值改变日志保存天数(默认为28天):
+atop开发者提供了以上日志保存方式,相应的`atop.daily`脚本可以在源码目录下找到。在`atop.daily`脚本中,我们可以通过修改`INTERVAL`变量改变atop信息采样周期(默认为10分钟);通过修改以下命令中的数值改变日志保存天数(默认为28天):
```shell
(sleep 3; find $LOGPATH -name 'atop_*' -mtime +28 -exec rm {} \; )&
```
-最后,我们修改cron文件,每天凌晨执行atop.daily脚本:
+最后,我们修改cron文件,每天凌晨执行`atop.daily`脚本:
```shell
0 0 * * * root /etc/cron.daily/atop.daily
@@ -96,5 +112,3 @@ swin、swout字段:换入和换出内存页数
## 相关资料
- [官方手册](http://www.atoptool.nl/download/man_atop-1.pdf)
-
-
\ No newline at end of file
diff --git a/command/atq.md b/command/atq.md
index f21f517efbe..5fd86e76812 100644
--- a/command/atq.md
+++ b/command/atq.md
@@ -7,30 +7,56 @@ atq
**atq命令** 显示系统中待执行的任务列表,也就是列出当前用户的at任务列表。
-### 语法
+### 语法
```shell
-atq(选项)
+atq [-V] [-q 队列] [-v]
```
-### 选项
+### 选项
```shell
-V:显示版本号;
-q:查询指定队列的任务。
```
-### 实例
+### 示例
+
+创建一个在10分钟后执行的任务,并列出当前用户的任务列表:
```shell
-at now + 10 minutes
+[root@localhost ~]# at now + 10 minutes
at> echo 1111
-at>
+at>
job 3 at Fri Apr 26 12:56:00 2013
+```
-atq
+使用`atq`命令查看当前用户的任务列表:
+
+```shell
+[root@localhost ~]# atq
3 Fri Apr 26 12:56:00 2013 a root
```
+查询指定队列的任务:
+
+```shell
+[root@localhost ~]# at -q a now + 10 minutes
+at> echo "Task in queue a"
+at>
+job 4 at Fri Apr 26 13:06:00 2013
+```
+
+使用`atq`命令查看队列`a`中的任务:
-
\ No newline at end of file
+```shell
+[root@localhost ~]# atq -q a
+4 Fri Apr 26 13:06:00 2013 a root
+```
+
+显示`atq`命令的版本号:
+
+```shell
+[root@localhost ~]# atq -V
+atq (GNU at) 3.1.20
+```
\ No newline at end of file
diff --git a/command/atrm.md b/command/atrm.md
index 63b06353136..73759f40413 100644
--- a/command/atrm.md
+++ b/command/atrm.md
@@ -7,23 +7,23 @@ atrm
**atrm命令** 用于删除待执行任务队列中的指定任务。
-### 语法
+### 语法
```shell
atrm(选项)(参数)
```
-### 选项
+### 选项
```shell
-V:显示版本号。
```
-### 参数
+### 参数
任务号:指定待执行队列中要删除的任务。
-### 实例
+### 实例
删除已经排队的任务
@@ -36,4 +36,3 @@ atrm 2 # 删除任务2
```
-
\ No newline at end of file
diff --git a/command/awk.md b/command/awk.md
index c7641dc9894..9a540cb3d81 100644
--- a/command/awk.md
+++ b/command/awk.md
@@ -18,7 +18,7 @@ awk [options] -f scriptfile var=value file(s)
**常用命令选项**
-* **-F fs** fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:
+* **-F fs** fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:,默认的分隔符是连续的空格或制表符
* **-v var=value** 赋值一个用户定义变量,将外部变量传递给awk
* **-f scripfile** 从脚本文件中读取awk命令
* **-m[fr] val** 对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
@@ -27,7 +27,7 @@ awk [options] -f scriptfile var=value file(s)
awk脚本是由模式和操作组成的。
-### 模式
+### 模式
模式可以是以下任意一个:
@@ -36,7 +36,7 @@ awk脚本是由模式和操作组成的。
* 模式匹配表达式:用运算符`~`(匹配)和`!~`(不匹配)。
* BEGIN语句块、pattern语句块、END语句块:参见awk的工作原理
-### 操作
+### 操作
操作由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内,主要部分是:
@@ -51,14 +51,13 @@ awk脚本是由模式和操作组成的。
awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file
```
-一个awk脚本通常由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成,这三个部分是可选的。任意一个部分都可以不出现在脚本中,脚本通常是被 **单引号** 或 **双引号** 中,例如:
+一个awk脚本通常由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成,这三个部分是可选的。任意一个部分都可以不出现在脚本中,脚本通常是被 **单引号** 中,例如:
```shell
awk 'BEGIN{ i=0 } { i++ } END{ print i }' filename
-awk "BEGIN{ i=0 } { i++ } END{ print i }" filename
```
-### awk的工作原理
+### awk的工作原理
```shell
awk 'BEGIN{ commands } pattern{ commands } END{ commands }'
@@ -77,7 +76,7 @@ awk 'BEGIN{ commands } pattern{ commands } END{ commands }'
**示例**
```shell
-echo -e "A line 1nA line 2" | awk 'BEGIN{ print "Start" } { print } END{ print "End" }'
+echo -e "A line 1\nA line 2" | awk 'BEGIN{ print "Start" } { print } END{ print "End" }'
Start
A line 1
A line 2
@@ -129,6 +128,18 @@ v1=v2=v3
[N] **SUBSEP** 数组下标分隔符(默认值是34)。
```
+转义序列
+
+```
+\\ \自身
+\$ 转义$
+\t 制表符
+\b 退格符
+\r 回车符
+\n 换行符
+\c 取消换行
+```
+
**示例**
```shell
@@ -141,13 +152,13 @@ Line No:3, No of fields:3 $0=line3 f6 f7 $1=line3 $2=f6 $3=f7
使用`print $NF`可以打印出一行中的最后一个字段,使用`$(NF-1)`则是打印倒数第二个字段,其他以此类推:
```shell
-echo -e "line1 f2 f3n line2 f4 f5" | awk '{print $NF}'
+echo -e "line1 f2 f3\n line2 f4 f5" | awk '{print $NF}'
f3
f5
```
```shell
-echo -e "line1 f2 f3n line2 f4 f5" | awk '{print $(NF-1)}'
+echo -e "line1 f2 f3\n line2 f4 f5" | awk '{print $(NF-1)}'
f2
f4
@@ -216,12 +227,12 @@ netstat -antup | grep 7770 | awk '{ print $NF NR}' | awk '{ print $1}'
作为一种程序设计语言所应具有的特点之一,awk支持多种运算,这些运算与C语言提供的基本相同。awk还提供了一系列内置的运算函数(如log、sqr、cos、sin等)和一些用于对字符串进行操作(运算)的函数(如length、substr等等)。这些函数的引用大大的提高了awk的运算功能。作为对条件转移指令的一部分,关系判断是每种程序设计语言都具备的功能,awk也不例外,awk中允许进行多种测试,作为样式匹配,还提供了模式匹配表达式~(匹配)和!~(不匹配)。作为对测试的一种扩充,awk也支持用逻辑运算符。
-### 算术运算符
+### 算术运算符
-| 运算符 | 描述 |
-| ----- | ---- |
-| + - | 加,减 |
-| * / & | 乘,除与求余 |
+| 运算符 | 描述 |
+| ----- | ---- |
+| + - | 加,减 |
+| * / & | 乘,除与求余 |
| + - ! | 一元加,减和逻辑非 |
| ^ *** | 求幂 |
| ++ -- | 增加或减少,作为前缀或后缀 |
@@ -235,11 +246,11 @@ awk 'BEGIN{a="b";print a++,++a;}'
注意:所有用作算术运算符进行操作,操作数自动转为数值,所有非数值都变为0
-### 赋值运算符
+### 赋值运算符
-| 运算符 | 描述 |
-| ----- | ---- |
-| = += -= *= /= %= ^= **= | 赋值语句 |
+| 运算符 | 描述 |
+| ----- | ---- |
+| = += -= *= /= %= ^= **= | 赋值语句 |
例:
@@ -247,12 +258,12 @@ awk 'BEGIN{a="b";print a++,++a;}'
a+=5; 等价于:a=a+5; 其它同类
```
-### 逻辑运算符
+### 逻辑运算符
-| 运算符 | 描述 |
-| ----- | ---- |
-| `\|\|` | 逻辑或 |
-| && | 逻辑与 |
+| 运算符 | 描述 |
+| ----- | ---- |
+| `\|\|` | 逻辑或 |
+| && | 逻辑与 |
例:
@@ -261,11 +272,30 @@ awk 'BEGIN{a=1;b=2;print (a>5 && b<=2),(a>5 || b<=2);}'
0 1
```
-### 正则运算符
+### 正则运算符
-| 运算符 | 描述 |
-| ----- | ---- |
-| ~ !~ | 匹配正则表达式和不匹配正则表达式 |
+| 运算符 | 描述 |
+| ----- | ---- |
+| ~ !~ | 匹配正则表达式和不匹配正则表达式 |
+
+```
+^ 行首
+$ 行尾
+. 除了换行符以外的任意单个字符
+* 前导字符的零个或多个
+.* 所有字符
+[] 字符组内的任一字符
+[^]对字符组内的每个字符取反(不匹配字符组内的每个字符)
+^[^] 非字符组内的字符开头的行
+[a-z] 小写字母
+[A-Z] 大写字母
+[a-Z] 小写和大写字母
+[0-9] 数字
+\< 单词头单词一般以空格或特殊字符做分隔,连续的字符串被当做单词
+\> 单词尾
+```
+
+> 正则需要用 /正则/ 包围住
例:
@@ -274,11 +304,11 @@ awk 'BEGIN{a="100testa";if(a ~ /^100*/){print "ok";}}'
ok
```
-### 关系运算符
+### 关系运算符
-| 运算符 | 描述 |
-| ----- | ---- |
-| < <= > >= != == | 关系运算符 |
+| 运算符 | 描述 |
+| ----- | ---- |
+| < <= > >= != == | 关系运算符 |
例:
@@ -289,14 +319,14 @@ ok
注意:> < 可以作为字符串比较,也可以用作数值比较,关键看操作数如果是字符串就会转换为字符串比较。两个都为数字才转为数值比较。字符串比较:按照ASCII码顺序比较。
-### 其它运算符
+### 其它运算符
-| 运算符 | 描述 |
-| ----- | ---- |
-| $ | 字段引用 |
-| 空格 | 字符串连接符 |
-| ?: | C条件表达式 |
-| in | 数组中是否存在某键值 |
+| 运算符 | 描述 |
+| ----- | ---- |
+| $ | 字段引用 |
+| 空格 | 字符串连接符 |
+| ?: | C条件表达式 |
+| in | 数组中是否存在某键值 |
例:
@@ -315,14 +345,14 @@ awk 'BEGIN{a="b";arr[0]="b";arr["b"]="c";print (a in arr);}'
1
```
-### 运算级优先级表
+### 运算级优先级表
!级别越高越优先
级别越高越优先
## awk高级输入输出
-### 读取下一条记录
+### 读取下一条记录
awk中`next`语句使用:在循环逐行匹配,如果遇到next,就会跳过当前行,直接忽略下面语句。而进行下一行匹配。next语句一般用于多行合并:
@@ -341,7 +371,7 @@ awk 'NR%2==1{next}{print NR,$0;}' text.txt
当记录行号除以2余1,就跳过当前行。下面的`print NR,$0`也不会执行。下一行开始,程序有开始判断`NR%2`值。这个时候记录行号是`:2` ,就会执行下面语句块:`'print NR,$0'`
-分析发现需要将包含有“web”行进行跳过,然后需要将内容与下面行合并为一行:
+跳过以“web”为首的行,再将该行内容分别与下面不以“web”为首的行合并打印,使用一个“:”和一个制表符连接:
```shell
cat text.txt
@@ -356,7 +386,7 @@ web03[192.168.2.102]
mysqld ok
httpd ok
0
-awk '/^web/{T=$0;next;}{print T":t"$0;}' test.txt
+awk '/^web/{T=$0;next;}{print T":\t"$0;}' text.txt
web01[192.168.2.100]: httpd ok
web01[192.168.2.100]: tomcat ok
web01[192.168.2.100]: sendmail ok
@@ -366,7 +396,7 @@ 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。
@@ -397,7 +427,7 @@ awk 'BEGIN{ "date" | getline out; split(out,mon); print mon[2] }' test
awk 'BEGIN{ while( "ls" | getline) print }'
```
-### 关闭文件
+### 关闭文件
awk中允许在程序中关闭一个输入或输出文件,方法是使用awk的close语句。
@@ -407,7 +437,7 @@ close("filename")
filename可以是getline打开的文件,也可以是stdin,包含文件名的变量或者getline使用的确切命令。或一个输出文件,可以是stdout,包含文件名的变量或使用管道的确切命令。
-### 输出到一个文件
+### 输出到一个文件
awk中允许用如下方式将结果输出到一个文件:
@@ -433,7 +463,7 @@ awk 'BEGIN{ FS=":" } { print $NF }' /etc/passwd
在linux awk的while、do-while和for语句中允许使用break,continue语句来控制流程走向,也允许使用exit这样的语句来退出。break中断当前正在执行的循环并跳到循环外执行下一条语句。if 是流程选择用法。awk中,流程控制语句,语法结构,与c语言类型。有了这些语句,其实很多shell程序都可以交给awk,而且性能是非常快的。下面是各个语句用法。
-### 条件判断语句
+### 条件判断语句
```shell
if(表达式)
@@ -474,9 +504,9 @@ very good
每条命令语句后面可以用`;` **分号** 结尾。
-### 循环语句
+### 循环语句
-#### while语句
+### # while语句
```shell
while(表达式)
@@ -498,7 +528,7 @@ print total;
5050
```
-#### for循环
+### # for循环
for循环有两种格式:
@@ -550,7 +580,7 @@ print total;
5050
```
-#### do循环
+### # do循环
```shell
do
@@ -569,7 +599,7 @@ do {total+=i;i++;} while(i<=100)
5050
```
-### 其他语句
+### 其他语句
* **break** 当 break 语句用于 while 或 for 语句时,导致退出程序循环。
* **continue** 当 continue 语句用于 while 或 for 语句时,使程序循环移动到下一个迭代。
@@ -580,7 +610,7 @@ do {total+=i;i++;} while(i<=100)
数组是awk的灵魂,处理文本中最不能少的就是它的数组处理。因为数组索引(下标)可以是数字和字符串在awk中数组叫做关联数组(associative arrays)。awk 中的数组不必提前声明,也不必声明大小。数组元素用0或空字符串来初始化,这根据上下文而定。
-### 数组的定义
+### 数组的定义
数字做数组索引(下标):
@@ -593,7 +623,7 @@ Array[2]="kai"
```shell
Array["first"]="www"
-Array"[last"]="name"
+Array["last"]="name"
Array["birth"]="1987"
```
@@ -606,7 +636,7 @@ Array["birth"]="1987"
{ for(i=1;i<=len;i++) {print array[i]}; } #Len是数组的长度
```
-### 数组相关函数
+### 数组相关函数
**得到数组长度:**
@@ -676,9 +706,9 @@ b b1
`delete array[key]`可以删除,对应数组`key`的,序列值。
-### 二维、多维数组使用
+### 二维、多维数组使用
-awk的多维数组在本质上是一维数组,更确切一点,awk在存储上并不支持多维数组。awk提供了逻辑上模拟二维数组的访问方式。例如,`array[2,4]=1`这样的访问是允许的。awk使用一个特殊的字符串`SUBSEP(�34)`作为分割字段,在上面的例子中,关联数组array存储的键值实际上是2�344。
+awk的多维数组在本质上是一维数组,更确切一点,awk在存储上并不支持多维数组。awk提供了逻辑上模拟二维数组的访问方式。例如,`array[2,4]=1`这样的访问是允许的。awk使用一个特殊的字符串`SUBSEP(\034)`作为分割字段,在上面的例子中,关联数组array存储的键值实际上是2\0344。
类似一维数组的成员测试,多维数组可以使用`if ( (i,j) in array)`这样的语法,但是下标必须放置在圆括号中。类似一维数组的循环访问,多维数组使用`for ( item in array )`这样的语法遍历数组。与一维数组不同的是,多维数组必须使用`split()`函数来访问单独的下标分量。
@@ -724,7 +754,7 @@ for(m in tarr){
awk内置函数,主要分以下3种类似:算数函数、字符串函数、其它一般函数、时间函数。
-### 算术函数
+### 算术函数
| 格式 | 描述 |
| ---- | ---- |
@@ -760,7 +790,7 @@ awk 'BEGIN{srand();fr=int(100*rand());print fr;}'
41
```
-### 字符串函数
+### 字符串函数
| 格式 | 描述 |
| ---- | ---- |
@@ -846,7 +876,7 @@ awk 'BEGIN{n1=124.113;n2=-1.224;n3=1.2345; printf("%.2f,%.2u,%.2g,%X,%on",n1,n2,
124.11,18446744073709551615,1.2,7C,174
```
-### 一般函数
+### 一般函数
| 格式 | 描述 |
| ---- | ---- |
@@ -892,7 +922,7 @@ drwxr-xr-x 95 root root 4096 10-08 14:01 ..
b返回值,是执行结果。
-### 时间函数
+### 时间函数
| 格式 | 描述 |
| ---- | ---- |
@@ -948,4 +978,4 @@ awk 'BEGIN{tstamp1=mktime("2001 01 01 12 12 12");tstamp2=systime();print tstamp2
| %Y | 当前月份 |
| %% | 百分号(%) |
-
+
diff --git a/command/axel.md b/command/axel.md
index b783ff11033..0d38af3af37 100644
--- a/command/axel.md
+++ b/command/axel.md
@@ -7,7 +7,15 @@ axel
**axel** 是Linux下一个不错的HTTP/ftp高速下载工具。支持多线程下载、断点续传,且可以从多个地址或者从一个地址的多个连接来下载同一个文件。适合网速不给力时多线程下载提高下载速度。比如在国内VPS或服务器上下载lnmp一键安装包用Axel就比wget快。
-### 安装
+### 安装
+
+#### 源码安装
+
+github地址:https://github.com/axel-download-accelerator/axel
+
+下载相应的 release 版本后,解压进入目录执行`./configure && make && make install`安装即可。
+
+#### 二进制安装
CentOS安装Axel:
@@ -33,13 +41,13 @@ Debian/Ubuntu安装Axel:
apt-get install axel
```
-### 语法
+### 语法
```shell
axel [options] url1 [url2] [url...]
```
-### 选项
+### 选项
```shell
--max-speed=x , -s x # 最高速度x
@@ -54,9 +62,10 @@ axel [options] url1 [url2] [url...]
--alternate , -a # Alternate progress indicator
--help ,-h # 帮助
--version ,-V # 版本信息
+--insecure,-k # 不验证SSL证书
```
-### 实例
+### 实例
如下载lnmp安装包指定10个线程,存到 `/tmp/`:
@@ -67,4 +76,3 @@ axel -n 10 -o /tmp/ http://www.jsdig.com/lnmp.tar.gz
如果下载过程中下载中断可以再执行下载命令即可恢复上次的下载进度。
-
\ No newline at end of file
diff --git a/command/badblocks.md b/command/badblocks.md
index 14df570705e..dbd00a31a20 100644
--- a/command/badblocks.md
+++ b/command/badblocks.md
@@ -7,13 +7,13 @@ badblocks
**badblock命令** 用于查找磁盘中损坏的区块。 硬盘是一个损耗设备,当使用一段时间后可能会出现坏道等物理故障。电脑硬盘出现坏道后,如果不及时更换或进行技术处理,坏道就会越来越多,并会造成频繁死机和数据丢失。最好的处理方式是更换磁盘,但在临时的情况下,应及时屏蔽坏道部分的扇区,不要触动它们。badblocks就是一个很好的检查坏道位置的工具。
-### 语法
+### 语法
```shell
badblock(选项)(参数)
```
-### 选项
+### 选项
```shell
-b<区块大小>:指定磁盘的区块大小,单位为字节;
@@ -23,13 +23,13 @@ badblock(选项)(参数)
-w:在检查时,执行写入测试。
```
-### 参数
+### 参数
* 磁盘装置:指定要检查的磁盘装置;
* 磁盘区块数:指定磁盘装置的区块总数;
* 启始区块:指定要从哪个区块开始检查。
-### 实例
+### 实例
badblocks以 4096 的一个block,每一个block检查16次,将结果输出到“hda-badblocks-list”文件里。
@@ -59,7 +59,7 @@ badblocks -b 4096 -c 1 /dev/hda1 -o hda-badblocks-list.1 63000 51000
这次花费的时间比较短,硬盘在指定的情况下在很短的时间就产生“嘎嘎嘎嘎”的响声。由于检查条件的不同,其输出的结果也不完全是相同的。重复几次同样的操作,因条件多少都有些不同,所以结果也有所不同。进行多次操作后,直到产生最后的hda-badblock-list.final文件。
-### 其他
+### 其他
**1、fsck使用badblocks的信息**
@@ -82,4 +82,3 @@ mkfs.ext3 -c /dev/hda1
这个操作已经很清楚地告知我们可以采用`mkfs.ext3 -c`选项用`read-only`方式检查硬盘。这个命令会在格式化硬盘时检查硬盘,并标出错误的硬盘“block”。用这个方法格式化硬盘,需要有相当大的耐心,因为命令运行后,会一个个用读的方式检查硬盘。
-
\ No newline at end of file
diff --git a/command/base64.md b/command/base64.md
new file mode 100644
index 00000000000..8a8e4e16198
--- /dev/null
+++ b/command/base64.md
@@ -0,0 +1,52 @@
+base64
+===
+
+base64 编码/解码文件或标准输入输出
+
+### 描述
+
+base64将`文件`或`标准输入`编码或解码为标准输出;
+
+### 语法
+
+```shell
+base64 [OPTION]... [FILE]
+```
+
+### 参数
+
+```shell
+-d, --decode # 解码
+-i, --ignore-garbage # 解码时,忽略非字母字符
+-w, --wrap=COLS # 在指定的字符数后自动换行(默认为76), 0 为禁用自动换行
+
+--help # 显示此帮助说明并退出
+--version # 输出版本信息并退出
+```
+
+### 实例
+
+编码字符串
+
+```bash
+printf foo|base64
+```
+
+编码文件
+
+```bash
+base64 file
+```
+
+解码
+
+```bash
+printf Zm9v|base64 -d
+```
+
+解码文件
+
+```bash
+base64 -d file
+```
+
diff --git a/command/basename.md b/command/basename.md
index e7c707e69fd..731dac687c0 100644
--- a/command/basename.md
+++ b/command/basename.md
@@ -7,25 +7,25 @@ basename
**basename命令** 用于打印目录或者文件的基本名称。basename和dirname命令通常用于shell脚本中的命令替换来指定和指定的输入文件名称有所差异的输出文件名称。
-### 语法
+### 语法
```shell
basename(选项)(参数)
```
-### 选项
+### 选项
```shell
--help:显示帮助;
--version:显示版本号。
```
-### 参数
+### 参数
* 文件:带路径信息的文件;
* 后缀:可选参数,指定要去除的文件后缀字符串。
-### 实例
+### 实例
1、要显示一个shell变量的基本名称,请输入:
@@ -44,4 +44,3 @@ OFILE=`basename $1 .c`.o
此命令指定给 OFILE 文件第一个位置上的参数($1)的值,但它的 .c 后缀更改至 .o。如果 $1 是 /home/jim/program.c 文件,则 OFILE 成为 program.o。因为 program.o 仅是一个基本文件名称,它标识在当前目录中的文件。
-
\ No newline at end of file
diff --git a/command/batch.md b/command/batch.md
index de1abb92e49..2531de30bbf 100644
--- a/command/batch.md
+++ b/command/batch.md
@@ -7,13 +7,13 @@ batch
**batch命令** 用于在指定时间,当系统不繁忙时执行任务,用法与at相似。
-### 语法
+### 语法
```shell
batch(选项)(参数)
```
-### 选项
+### 选项
```shell
-f:指定包含具体指令的任务文件;
@@ -21,11 +21,11 @@ batch(选项)(参数)
-m:任务执行完后向用户发送E-mail。
```
-### 参数
+### 参数
日期时间:指定任务执行的日期时间。
-### 实例
+### 实例
```shell
batch
@@ -35,4 +35,3 @@ job 5 at Sun Apr 28 08:49:00 2013
```
-
\ No newline at end of file
diff --git a/command/bc.md b/command/bc.md
index 1adbd5cb3de..1cf3a43edd0 100644
--- a/command/bc.md
+++ b/command/bc.md
@@ -7,13 +7,13 @@ bc
**bc命令** 是一种支持任意精度的交互执行的计算器语言。bash内置了对整数四则运算的支持,但是并不支持浮点运算,而bc命令可以很方便的进行浮点运算,当然整数运算也不再话下。
-### 语法
+### 语法
```shell
bc(选项)(参数)
```
-### 选项
+### 选项
```shell
-i:强制进入交互式模式;
@@ -24,11 +24,11 @@ bc(选项)(参数)
-h:显示指令的帮助信息。
```
-### 参数
+### 参数
文件:指定包含计算任务的文件。
-### 实例
+### 实例
算术操作高级运算bc命令它可以执行浮点运算和一些高级函数:
@@ -76,4 +76,3 @@ echo "sqrt(100)" | bc
```
-
\ No newline at end of file
diff --git a/command/bg.md b/command/bg.md
index bb9fee05a6a..7dd0cb3fc7f 100644
--- a/command/bg.md
+++ b/command/bg.md
@@ -1,39 +1,48 @@
bg
===
-用于将作业放到后台运行
+将前台终端作业移动到后台运行
-## 补充说明
+## 概要
-**bg命令** 用于将作业放到后台运行,使前台可以执行其他任务。该命令的运行效果与在指令后面添加符号`&`的效果是相同的,都是将其放到系统后台执行。
+```shell
+bg [job_spec ...]
+```
-在Linux系统中执行某些操作时候,有时需要将当前任务暂停调至后台,或有时须将后台暂停的任务重启开启并调至前台,这一序列的操作将会使用到 jobs、bg、和 fg 三个命令以及两个快捷键来完成。
+## 主要用途
-### 语法
+- 用于将作业放到后台运行,使前台可以执行其他任务。该命令的运行效果与在指令后面添加符号`&`的效果是相同的,都是将其放到系统后台执行。
-```shell
-bg(参数)
-```
+- 若后台任务中只有一个,则使用该命令时可以省略任务号。
+
+## 参数
-### 参数
+job_spec(可选):指定要移动到后台执行的作业标识符,可以是一到多个。
-作业标识:指定需要放到后台的作业标识号。
+## 返回值
-### 实例
+返回成功除非未开启作业控制或发生了错误。
-使用bg命令将任务号为1的任务放到后台继续执行,输入如下命令:
+## 例子
```shell
-bg 1 # 后台执行任务号为1的任务
+# 运行sleep命令,然后按下ctrl+z。
+sleep 60
+^Z
+[1]+ Stopped sleep 60
+
+# 使用bg命令使得作业在后台运行。
+bg %1
+
+# 返回信息:
+[1]+ sleep 60 &
```
-如果系统中只有一个挂起的任务时,即使不为该命令设置参数"1",也可以实现这个功能。
+### 注意
-注意:实际上,使用bg命令与在指令后面添加符号"&"的效果是一样的。例如,使用`&`将`find / -name password`放到后台执行,输入如下命令:
+1. `bash`的作业控制命令包括`bg fg kill wait disown suspend`。
+2. 该命令需要`set`选项`monitor`处于开启状态时才能执行;查看作业控制状态:输入`set -o`查看`monitor`行;执行`set -o monitor`或`set -m`开启该选项。
+3. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。
-```shell
-find / -name password & # 后台执行任务
-```
-
\ No newline at end of file
diff --git a/command/bind.md b/command/bind.md
index 16aa0692101..8a431ed9cb8 100644
--- a/command/bind.md
+++ b/command/bind.md
@@ -7,13 +7,13 @@ bind
**bind命令** 用于显示和设置命令行的键盘序列绑定功能。通过这一命令,可以提高命令行中操作效率。您可以利用bind命令了解有哪些按键组合与其功能,也可以自行指定要用哪些按键组合。
-### 语法
+### 语法
```shell
bind(选项)
```
-### 选项
+### 选项
```shell
-d:显示按键配置的内容;
@@ -24,7 +24,7 @@ bind(选项)
-v:列出目前的按键配置与其功能。
```
-### 实例
+### 实例
```shell
bind -x '"\C-l":ls -l' #直接按 CTRL+L 就列出目录
@@ -33,7 +33,7 @@ bind -x '"\C-l":ls -l' #直接按 CTRL+L 就列出目录
其中keyseq可以使用`showkey -a`命令来获取:
```shell
-[root@localhost ~]# showkey -a
+showkey -a
Press any keys - Ctrl-D will terminate this program
@@ -56,4 +56,3 @@ Press any keys - Ctrl-D will terminate this program
```
-
\ No newline at end of file
diff --git a/command/blkid.md b/command/blkid.md
index d64c5c81f87..be112b5962a 100644
--- a/command/blkid.md
+++ b/command/blkid.md
@@ -7,7 +7,7 @@ blkid
在Linux下可以使用 **blkid命令** 对查询设备上所采用文件系统类型进行查询。blkid主要用来对系统的块设备(包括交换分区)所使用的文件系统类型、LABEL、UUID等信息进行查询。要使用这个命令必须安装e2fsprogs软件包。
-### 语法
+### 语法
```shell
blkid -L | -U
@@ -16,7 +16,7 @@ blkid -p [-s ] [-O ] [-S ][-o] ...
blkid -i [-s ] [-o] ...
```
-### 选项
+### 选项
```shell
-c # 指定cache文件(default: /etc/blkid.tab, /dev/null = none)
@@ -42,7 +42,7 @@ Low-level probing options:
-n # filter by filesystem type (e.g. -n vfat,ext3)
```
-### 实例
+### 实例
1、列出当前系统中所有已挂载文件系统的类型:
@@ -93,4 +93,3 @@ sudo blkid -o list
```
-
\ No newline at end of file
diff --git a/command/blockdev.md b/command/blockdev.md
index 7560baeacd3..236bfe78a92 100644
--- a/command/blockdev.md
+++ b/command/blockdev.md
@@ -7,7 +7,7 @@ blockdev
**blockdev命令** 在命令调用“ioxtls”函数,以实现对设备的控制。
-### 语法
+### 语法
```shell
blockdev(选项)(参数)
@@ -27,11 +27,11 @@ blockdev(选项)(参数)
--rereadpt:重新读取分区表。
```
-### 参数
+### 参数
设备文件名:指定要操作的磁盘的设备文件名。
-### 实例
+### 实例
设置设备为只读:
@@ -52,4 +52,3 @@ blockdev --setrw /dev/hda4
```
-
\ No newline at end of file
diff --git a/command/break.md b/command/break.md
new file mode 100644
index 00000000000..6e9bec42764
--- /dev/null
+++ b/command/break.md
@@ -0,0 +1,65 @@
+break
+===
+
+结束for,while或until循环。
+
+## 概要
+
+```shell
+break [n]
+```
+
+## 主要用途
+
+- 结束for,while或until循环,可指定退出几层循环。
+
+
+## 参数
+
+n(可选):大于等于1的整数,用于指定退出几层循环。
+
+## 返回值
+
+返回成功除非n小于1。
+
+## 例子
+
+```shell
+# break的可选参数n缺省值为1。
+# 从外层for循环继续执行。
+for((i=3;i>0;i--)); do
+ for((j=3;j>0;j--)); do
+ if((j==2)); then
+ # 换成break 1时结果一样
+ break
+ fi
+ printf "%s %s\n" ${i} ${j}
+ done
+done
+# 输出结果
+3 3
+2 3
+1 3
+```
+
+```shell
+# 当n为2时:
+# 退出两层循环,结束。
+for((i=3;i>0;i--)); do
+ for((j=3;j>0;j--)); do
+ if((j==2)); then
+ break 2
+ fi
+ printf "%s %s\n" ${i} ${j}
+ done
+done
+# 输出结果
+3 3
+```
+
+### 注意
+
+1. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。
+
+
+
diff --git a/command/builtin.md b/command/builtin.md
index 065c977cb36..a1a9cc0518b 100644
--- a/command/builtin.md
+++ b/command/builtin.md
@@ -1,28 +1,56 @@
builtin
===
-执行shell内部命令
+执行bash内建命令。
-## 补充说明
-
-**builtin命令** 用于执行指定的shell内部命令,并返回内部命令的返回值。builtin命令在使用时,将不能够再使用Linux中的外部命令。当系统中定义了与shell内部命令相同的函数时,使用builtin显式地执行shell内部命令,从而忽略定义的shell函数。
-
-### 语法
+## 概要
```shell
-builtin(参数)
+builtin [shell-builtin [arg ...]]
```
-### 参数
+## 主要用途
+
+- 用于执行指定的bash内建命令。
+- `builtin`命令调用的bash内建命令优先于同名的外部命令及同名的shell函数。
+
+## 参数
+
+shell-builtin(可选):要调用的bash内建命令。
+
+arg(可选):传递给bash内建命令的一到多个参数。
+
+## 返回值
-shell内部命令:指定需要执行的shell内部命令。
+返回该内建命令执行的返回值,除非传递的不是bash内建命令或该内建命令被禁用。
-### 实例
+## 例子
-使用builtin命令执行shell内部命alias显示命令别名,输入如下命令:
+同名情况下的优先级顺序:
+
+builtin 内建命令 > 函数 > 内建命令 > 外部命令
+
+```shell
+# 关于外部命令优先级最高的情况请参考enable命令。
+# 此时内建命令优先使用
+echo "the Great Wall"
+# 调用内建命令type,返回命令的类型(builtin)
+type -t echo
+# 定义 echo 函数
+echo(){
+ printf "123\n"
+}
+# 此时同名函数优先使用,显示(123)
+echo
+# 调用内建命令type,返回命令的类型(function)
+type -t echo
+# 此时内建命令优先使用
+builtin echo -e "backslash \\"
+```
```shell
-builtin alias # 执行shell内部指令
+# 执行shell内部指令,输出当前系统下的命令别名
+builtin alias
alias cp='cp -i'
alias l.='ls -d .* --color=tty'
alias ll='ls -l --color=tty'
@@ -32,7 +60,11 @@ alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
```
-上面的命令执行后,将输出当前系统下的命令别名。
+### 注意
+
+1. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。
+
+2. 如果要调用的内建命令被禁用了(包括`builtin`),那么执行会报错;关于禁用和启用内建命令请参考`enable`命令。
+
-
\ No newline at end of file
diff --git a/command/bunzip2.md b/command/bunzip2.md
index 7529e006f3a..af76e5303a0 100644
--- a/command/bunzip2.md
+++ b/command/bunzip2.md
@@ -1,19 +1,19 @@
bunzip2
===
-创一个bz2文件压缩包
+可解压缩.bz2格式的压缩文件。
## 补充说明
-**bunzip2命令** 解压缩由bzip2指令创建的”.bz2"压缩包。对文件进行压缩与解压缩。此命令类似于“gzip/gunzip”命令,只能对文件进行压缩。对于目录只能压缩目录下的所有文件,压缩完成后,在目录下生成以“.bz2”为后缀的压缩包。bunzip2其实是bzip2的符号链接,即软链接,因此压缩解压都可以通过bzip2实现。
+bzip2可以对文件进行压缩与解压缩。此命令类似于“gzip/gunzip”命令,只能对文件进行压缩。对于目录只能压缩目录下的所有文件,压缩完成后,在目录下生成以“.bz2”为后缀的压缩包。**bunzip2其实是bzip2的符号链接**,即软链接,因此解压都可以通过bzip2 -d实现。
-### 语法
+### 语法
```shell
bunzip2(选项)(参数)
```
-### 选项
+### 选项
```shell
-f或--force:解压缩时,若输出的文件与现有文件同名时,预设不会覆盖现有的文件;
@@ -23,11 +23,11 @@ bunzip2(选项)(参数)
-l,--license,-V或——version:显示版本信息。
```
-### 参数
+### 参数
.bz2压缩包:指定需要解压缩的.bz2压缩包。
-### 实例
+### 实例
将`/opt`目录下的etc.zip、var.zip和backup.zip进行压缩,设置压缩率为最高,同时在压缩完毕后不删除原始文件,显示压缩过程的详细信息。
@@ -37,5 +37,11 @@ bzip2 -9vk /opt/etc.zip /opt/var.zip /opt/backup.zip
压缩完毕后,在`/opt`下就会生成相应的etc.zip.bz2、var.zip.bz2和backup.zip.bz2文件。
+解压缩:
+
+
+```bash
+bunzip2 -v /opt/etc.zip.bz2
+```
+
-
\ No newline at end of file
diff --git a/command/bye.md b/command/bye.md
index 036aa9252fe..f28fc9d6d4f 100644
--- a/command/bye.md
+++ b/command/bye.md
@@ -1,14 +1,14 @@
bye
===
-命令用于中断FTP连线并结束程序。。
+命令用于中断FTP连线并结束程序
## 补充说明
**bye命令** 在ftp模式下,输入bye即可中断目前的连线作业,并结束ftp的执行。
-### 语法
+### 语法
```shell
bye
diff --git a/command/bzcat.md b/command/bzcat.md
index 43095c8051d..010d23d1f20 100644
--- a/command/bzcat.md
+++ b/command/bzcat.md
@@ -1,23 +1,23 @@
bzcat
===
-解压缩指定的.bz2文件
+不解压,直接查看指定的.bz2文件
## 补充说明
-**bzcat命令** 解压缩指定的.bz2文件,并显示解压缩后的文件内容。保留原压缩文件,并且不生成解压缩后的文件。
+**bzcat命令** 无需解压缩指定的.bz2文件,即可显示解压缩后的文件内容。
-### 语法
+### 语法
```shell
bzcat(参数)
```
-### 参数
+### 参数
.bz2压缩文件:指定要显示内容的.bz2压缩文件。
-### 实例
+### 实例
将`/tmp/man.config`以bzip2格式压缩:
@@ -36,4 +36,3 @@ bzcat man.config.bz2
此时屏幕上会显示 man.config.bz2 解压缩之后的文件内容。
-
\ No newline at end of file
diff --git a/command/bzcmp.md b/command/bzcmp.md
index b5523b0f0d8..664e3027593 100644
--- a/command/bzcmp.md
+++ b/command/bzcmp.md
@@ -7,16 +7,15 @@ bzcmp
**bzcmp命令** 主要功能是在不真正解压缩.bz2压缩包的情况下,比较两个压缩包中的文件,省去了解压缩后在调用cmp命令的过程。
-### 语法
+### 语法
```shell
bzcmp(参数)
```
-### 参数
+### 参数
* 文件1:指定要比较的第一个.bz2压缩包;
* 文件2:指定要比较的第二个.bz2压缩包。
-
\ No newline at end of file
diff --git a/command/bzdiff.md b/command/bzdiff.md
index ebe581f0217..93d33f9c9b1 100644
--- a/command/bzdiff.md
+++ b/command/bzdiff.md
@@ -7,16 +7,15 @@ bzdiff
**bzdiff命令** 用于直接比较两个“.bz2”压缩包中文件的不同,省去了解压缩后再调用diff命令的过程。
-### 语法
+### 语法
```shell
bzdiff(参数)
```
-### 参数
+### 参数
* 文件1:指定要比较的第一个.bz2压缩包;
* 文件2:指定要比较的第二个.bz2压缩包。
-
\ No newline at end of file
diff --git a/command/bzgrep.md b/command/bzgrep.md
index 59bf889fc27..7b9a2a762bb 100644
--- a/command/bzgrep.md
+++ b/command/bzgrep.md
@@ -7,16 +7,15 @@ bzgrep
**bzgrep命令** 使用正则表达式搜索“.bz2”压缩包中文件,将匹配的行显示到标注输出。
-### 语法
+### 语法
```shell
bzgrep(参数)
```
-### 参数
+### 参数
* 搜索模式:指定要搜索的模式;
* .bz2文件:指定要搜索的.bz2压缩包。
-
\ No newline at end of file
diff --git a/command/bzip2.md b/command/bzip2.md
index a9907091d3d..26fa49cd11f 100644
--- a/command/bzip2.md
+++ b/command/bzip2.md
@@ -5,36 +5,94 @@ bzip2
## 补充说明
-**bzip2命令** 用于创建和管理(包括解压缩)“.bz2”格式的压缩包。我们遇见Linux压缩打包方法有很多种,以下讲解了Linux压缩打包方法中的Linux bzip2命令的多种范例供大家查看,相信大家看完后会有很多收获。
+**bzip2命令** 用于创建和管理(包括解压缩)“.bz2”格式的压缩包。
-### 语法
+bzip2 采用 Burrows-Wheeler 块排序文本压缩算法和 Huffman 编码方式压缩文件。 压缩率一般比基于 LZ77/LZ78 的压缩软件好得多,其性能接近 PPM 族统计类压缩软件。
+
+命令行参数有意设计为非常接近 GNU gzip 的形式,但也不完全相同。
+
+bzip2 从命令行读入文件名和参数。 每个文件被名为 "原始文件名.bz2" 的压缩文件替换。 每个压缩文件具有与原文件相同的修改时间、 权限, 如果可能的话,还具有相同的属主, 因此在解压缩时这些特性将正确地恢复。 在某些文件系统中, 没有权限、 属主或时间的概念, 或者对文件名的长度有严格限制, 例如 MSDOS,在这种情况下,bzip2 没有保持原文件名、 属主、 权限以及时间的机制, 从这个意义上说,bzip2 对文件名的处理是幼稚的。
+
+bzip2 和 bunzip2 在缺省情况下不覆盖已有的文件。 如果想覆盖已有的文件,要指定 -f 选项。
+
+如果未指定文件名, bzip2 将压缩来自标准输入的数据并写往标准输出。在这种情况下, bzip2 会拒绝将压缩结果写往终端,因为这完全无法理解并且是没有意义的。
+
+bunzip2 (以及 bzip2 -d) 对所有指定的文件进行解压缩处理。不是由 bzip2 产生的文件将被忽略,同时发出一个警告信息。 bzip2 按下列方式由压缩文件名确定解压后的文件名:
```shell
-bzip2(选项)(参数)
+filename.bz2 解压成 filename
+filename.bz 解压成 filename
+filename.tbz2 解压成 filename.tar
+filename.tbz 解压成 filename.tar
+anyothername 解压成 anyothername.out
```
-### 选项
+如果文件名的后缀不是下列之一: .bz2, .bz, .tbz2 或 .tbz, .bzip2 将抱怨无法确定原始文件名,并采用原文件名加 .out 作为解压缩文件名。
+
+在压缩时,如果不提供文件名,bzip2 将从标准输入读取数据,压缩结果写往标准输出。
+
+bzip2 采用 32 位 CRC 校验码作自我检查,以确认解压后的文件与原始文件相同。 这可用于检测压缩文件是否损坏,并防止 bzip2 中未知的缺陷(运气好的话这种可能性非常小)。 数据损坏而未检测到的几率非常之小, 对于每个被处理的文件大约是四十亿分之一。 检查是在解压缩时进行的,因此它只能说明某个地方出问题了。 它能帮助恢复原始未压缩的数据。可以用 bzip2recover 来尝试从损坏的文件中恢复数据。
+
+返回值:正常退出返回 0, 出现环境问题返回 1 (文件未找到,非法的选项,I/O错误等), 返回 2 表明压缩文件损坏,出现导致 bzip2 紧急退出的内部一致性错误(例如缺陷)时返回 3。
+
+### 语法
```shell
--c或——stdout:将压缩与解压缩的结果送到标准输出;
--d或——decompress:执行解压缩;
--f或-force:bzip2在压缩或解压缩时,若输出文件与现有文件同名,预设不会覆盖现有文件。若要覆盖。请使用此参数;
--h或——help:在线帮助;
--k或——keep:bzip2在压缩或解压缩后,会删除原始文件。若要保留原始文件,请使用此参数;
--s或——small:降低程序执行时内存的使用量;
--t或——test:测试.bz2压缩文件的完整性;
--v或——verbose:压缩或解压缩文件时,显示详细的信息;
--z或——compress:强制执行压缩;
--V或——version:显示版本信息;
---repetitive-best:若文件中有重复出现的资料时,可利用此参数提高压缩效果;
---repetitive-fast:若文件中有重复出现的资料时,可利用此参数加快执行效果。
+bzip2 [ -cdfkqstvzVL123456789 ] [ filenames ... ]
```
-### 参数
+### 选项
+
+```shell
+-c --stdout
+ # 将数据压缩或解压缩至标准输出。
+
+-d --decompress
+ # 强制解压缩。 bzip2, bunzip2 以及 bzcat 实际上是同一个程序,进行何种操作将根据程序名确定。 指定该选项后将不考虑这一机制,强制 bzip2 进行解压缩。
+
+-z --compress
+ # -d 选项的补充:强制进行压缩操作,而不管执行的是哪个程序。
+
+-t --test
+ # 检查指定文件的完整性,但并不对其解压缩。 实际上将对数据进行实验性的解压缩操作,而不输出结果。
+
+-f --force
+ # 强制覆盖输出文件。通常 bzip2 不会覆盖已经存在的文件。该选项还强制 bzip2 打破文件的硬连接,缺省情况下 bzip2 不会这么做。
+
+-k --keep
+ # 在压缩或解压缩时保留输入文件(不删除这些文件)。
+
+-s --small
+ # 在压缩、解压缩及检查时减少内存用量。采用一种修正的算法进行压缩和测试,每个数据块仅需要 2.5 个字节。这意味着任何文件都可以在 2300k
+ # 的内存中进行解压缩, 尽管速度只有通常情况下的一半。
+
+ # 在压缩时,-s将选定 200k 的块长度,内存用量也限制在 200k 左右, 代价是压缩率会降低。 总之,如果机器的内存较少(8兆字节或更少),
+ # 可对所有操作都采用-s选项。参见下面的内存管理。
+
+-q --quiet
+ # 压制不重要的警告信息。属于 I/O 错误及其它严重事件的信息将不会被压制。
+
+-v --verbose
+ # 详尽模式 -- 显示每个被处理文件的压缩率。 命令行中更多的 -v 选项将增加详细的程度, 使 bzip2 显示出许多主要用于诊断目的信息。
+
+-L --license -V --version
+ # 显示软件版本,许可证条款及条件。
+
+-1 to -9
+ # 在压缩时将块长度设为 100 k、200 k .. 900 k。 对解压缩没有影响。参见下面的内存管理。
+
+-- # 将所有后面的命令行变量看作文件名,即使这些变量以减号"-"打头。 可用这一选项处理以减号"-"打头的文件名, 例如:bzip2 -- -myfilename.
+
+--repetitive-fast --repetitive-best
+ # 这些选项在 0.9.5 及其以上版本中是多余的。 在较早的版本中,这两个选项对排序算法的行为提供了一些粗糙的控制,有些情况下很有用。 0.9.5
+ # 及其以上版本采用了改进的算法而与这些选项无关。
+```
+
+### 参数
文件:指定要压缩的文件。
-### 实例
+### 实例
**压缩指定文件filename:**
@@ -125,4 +183,4 @@ bzip2 -- -myfilename
这里主要是为了防止文件名中`-`产生以为是选项的歧义。
-
\ No newline at end of file
+
diff --git a/command/bzip2recover.md b/command/bzip2recover.md
index bd2bc8193ef..bf8d6f9a6d3 100644
--- a/command/bzip2recover.md
+++ b/command/bzip2recover.md
@@ -9,15 +9,14 @@ bzip2recover
bzip2是以区块的方式来压缩文件,每个区块视为独立的单位。因此,当某一区块损坏时,便可利用bzip2recover,试着将文件中的区块隔开来,以便解压缩正常的区块。通常只适用在压缩文件很大的情况。
-### 语法
+### 语法
```shell
bzip2recover(参数)
```
-### 参数
+### 参数
文件:指定要恢复数据的.bz2压缩包。
-
\ No newline at end of file
diff --git a/command/bzless.md b/command/bzless.md
index 92d102ca902..af790362764 100644
--- a/command/bzless.md
+++ b/command/bzless.md
@@ -7,15 +7,14 @@ bzless
**bzless命令** 是增强“.bz2”压缩包查看器,bzless比bzmore命令功能更加强大。
-### 语法
+### 语法
```shell
bzless(参数)
```
-### 参数
+### 参数
文件:指定要分屏显示的.bz2压缩包。
-
\ No newline at end of file
diff --git a/command/bzmore.md b/command/bzmore.md
index 1b4476c1419..f160e620f22 100644
--- a/command/bzmore.md
+++ b/command/bzmore.md
@@ -7,15 +7,14 @@ bzmore
**bzmore命令** 用于查看bzip2压缩过的文本文件的内容,当下一屏显示不下时可以实现分屏显示。
-### 语法
+### 语法
```shell
bzmore(参数)
```
-### 参数
+### 参数
文件:指定要分屏显示的.bz2压缩包。
-
\ No newline at end of file
diff --git a/command/cal.md b/command/cal.md
index 6a3a78128ca..0a82f254bf6 100644
--- a/command/cal.md
+++ b/command/cal.md
@@ -5,33 +5,41 @@ cal
## 补充说明
-**cal命令** 用于显示当前日历,或者指定日期的日历。
+**cal命令** 用于显示当前日历,或者指定日期的日历,如果没有指定参数,则显示当前月份。
-### 语法
+一个单一的参数指定要显示的年份 (1 - 9999) ; 注意年份必须被完全地指定: cal 89 不会 显示1989年的日历. 两个参数表示月份 (1 - 12) 和年份. 如果没有指定参数,
+则显示当前月份的日历.
+
+一年从Jan 1 (1 月 1 日) 开始.
+
+格里高利历法改革(Gregorian Reformation)被认为发生于 1752 年 9 月 3 日. 在此之前, 多数国家已经认可这项改革(尽管有一些直到 20 世纪初才认可它). 那天之后的 10
+天在这项改革被略去了, 所以那个月的日历有点不太寻常.
+
+### 语法
```shell
-cal(选项)(参数)
+cal [ -mjy ] [ 月份 ] [ 年份 ]
```
-### 选项
+### 选项
```shell
--l:显示单月输出;
--3:显示临近三个月的日历;
--s:将星期日作为月的第一天;
--m:将星期一作为月的第一天;
--j:显示“julian”日期;
--y:显示当前年的日历。
+-l # 显示单月输出;
+-3 # 显示临近三个月的日历;
+-s # 将星期日作为月的第一天;
+-m # 显示星期一作为一周的第一天.. (缺省为星期日.)
+-j # 显示儒略历的(Julian)日期 (以 1 为基的天数, 从 1 月 1 日开始计数) .
+-y # 显示当前年份的日历..
```
-### 参数
+### 参数
```shell
月:指定月份;
年:指定年份。
```
-### 实例
+### 实例
单独执行cal命令会打印出日历:
@@ -59,14 +67,16 @@ cal(选项)(参数)
```shell
[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
+
+ 九月 2021 十月 2021 十一月 2021
+日 一 二 三 四 五 六 日 一 二 三 四 五 六 日 一 二 三 四 五 六
+ 1 2 3 4 1 2 1 2 3 4 5 6
+ 5 6 7 8 9 10 11 3 4 5 6 7 8 9 7 8 9 10 11 12 13
+12 13 14 15 16 17 18 10 11 12 13 14 15 16 14 15 16 17 18 19 20
+19 20 21 22 23 24 25 17 18 19 20 21 22 23 21 22 23 24 25 26 27
+26 27 28 29 30 24 25 26 27 28 29 30 28 29 30
+ 31
```
-
\ No newline at end of file
+
diff --git a/command/cancel.md b/command/cancel.md
index f42343a01fa..209999a88f1 100644
--- a/command/cancel.md
+++ b/command/cancel.md
@@ -7,13 +7,13 @@ cancel
**cancel命令** 用于取消已存在的打印任务。
-### 语法
+### 语法
```shell
cancel(选项)(参数)
```
-### 选项
+### 选项
```shell
-a:取消所有打印任务;
@@ -23,9 +23,8 @@ cancel(选项)(参数)
-h:指定连接的服务器名和端口号。
```
-### 参数
+### 参数
打印任务号:指定要取消的打印任务编号。
-
\ No newline at end of file
diff --git a/command/cat.md b/command/cat.md
index 1dd6f1d5dad..2190c5c04b2 100644
--- a/command/cat.md
+++ b/command/cat.md
@@ -1,44 +1,73 @@
cat
===
-连接文件并打印到标准输出设备上
+连接多个文件并打印到标准输出。
-## 补充说明
+## 概要
-**cat命令** 连接文件并打印到标准输出设备上,cat经常用来显示文件的内容,类似于下的type命令。
+```shell
+cat [OPTION]... [FILE]...
+```
-注意:当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容。因此,一般用more等命令分屏显示。为了控制滚屏,可以按Ctrl+S键,停止滚屏;按Ctrl+Q键可以恢复滚屏。按Ctrl+C(中断)键可以终止该命令的执行,并且返回Shell提示符状态。
+## 主要用途
-### 语法
+- 显示文件内容,如果没有文件或文件为`-`则读取标准输入。
+- 将多个文件的内容进行连接并打印到标准输出。
+- 显示文件内容中的不可见字符(控制字符、换行符、制表符等)。
-```shell
-cat(选项)(参数)
-```
+## 参数
+
+FILE(可选):要处理的文件,可以为一或多个。
-### 选项
+## 选项
```shell
--n或--number:从1开始对所有输出的行数编号;
--b或--number-nonblank:和-n相似,只不过对于空白行不编号;
--s或--squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行;
--A:显示不可打印字符,行尾显示“$”;
--e:等价于"-vE"选项;
--t:等价于"-vT"选项;
-```
+长选项与短选项等价
-### 参数
+-A, --show-all 等价于"-vET"组合选项。
+-b, --number-nonblank 只对非空行编号,从1开始编号,覆盖"-n"选项。
+-e 等价于"-vE"组合选项。
+-E, --show-ends 在每行的结尾显示'$'字符。
+-n, --number 对所有行编号,从1开始编号。
+-s, --squeeze-blank 压缩连续的空行到一行。
+-t 等价于"-vT"组合选项。
+-T, --show-tabs 使用"^I"表示TAB(制表符)。
+-u POSIX兼容性选项,无意义。
+-v, --show-nonprinting 使用"^"和"M-"符号显示控制字符,除了LFD(line feed,即换行符'\n')和TAB(制表符)。
-文件列表:指定要连接的文件列表。
+--help 显示帮助信息并退出。
+--version 显示版本信息并退出。
+```
+
+## 返回值
-### 实例
+返回状态为成功除非给出了非法选项或非法参数。
-设m1和m2是当前目录下的两个文件
+## 例子
```shell
-cat m1 (在屏幕上显示文件m1的内容)
-cat m1 m2 (同时显示文件m1和m2的内容)
-cat m1 m2 > file (将文件m1和m2合并后放入文件file中)
+# 合并显示多个文件
+cat ./1.log ./2.log ./3.log
+# 显示文件中的非打印字符、tab、换行符
+cat -A test.log
+# 压缩文件的空行
+cat -s test.log
+# 显示文件并在所有行开头附加行号
+cat -n test.log
+# 显示文件并在所有非空行开头附加行号
+cat -b test.log
+# 将标准输入的内容和文件内容一并显示
+echo '######' |cat - test.log
```
+### 注意
+
+1. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 cat`或`info coreutils 'cat invocation'`。
+2. 当使用`cat`命令查看**体积较大的文件**时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容,为了控制滚屏,可以按`Ctrl+s`键停止滚屏;按`Ctrl+q`键恢复滚屏;按`Ctrl+c`(中断)键可以终止该命令的执行,返回Shell提示符状态。
+3. 建议您查看**体积较大的文件**时使用`less`、`more`命令或`emacs`、`vi`等文本编辑器。
+
+### 参考链接
+
+1. [Question about LFD key](https://superuser.com/questions/328054/is-there-an-lfd-key-on-my-keyboard)
+
-
diff --git a/command/cd.md b/command/cd.md
index d2fe50e249c..0f2255cf632 100644
--- a/command/cd.md
+++ b/command/cd.md
@@ -1,36 +1,91 @@
cd
===
-切换用户当前工作目录
+切换用户当前工作目录。
-## 补充说明
-
-**cd命令** 用来切换工作目录至dirname。 其中dirName表示法可为绝对路径或相对路径。若目录名称省略,则变换至使用者的home directory(也就是刚login时所在的目录)。另外,`~`也表示为home directory的意思,`.`则是表示目前所在的目录,`..`则表示目前目录位置的上一层目录。
-
-### 语法
+## 概要
```shell
-cd (选项) (参数)
+cd [-L|[-P [-e]]] [dir]
```
-### 选项
+## 主要用途
+
+- 切换工作目录至`dir`。其中`dir`的表示法可以是绝对路径或相对路径。
+- 若参数`dir`省略,则默认为使用者的shell变量`HOME`。
+- 如果`dir`指定为`~`时表示为使用者的shell变量`HOME`,`.`表示当前目录,`..`表示当前目录的上一级目录。
+- 环境变量`CDPATH`是由冒号分割的一到多个目录,你可以将常去的目录的上一级加入到`CDPATH`以便方便访问它们;如果`dir`以`/`开头那么`CDPATH`不会被使用。
+- 当`shopt`选项`cdable_vars`打开时,如果`dir`在`CDPATH`及当前目录下均不存在,那么会把它当作变量,读取它的值作为要进入的目录。
+
+## 参数
+
+dir(可选):指定要切换到的目录。
+
+## 选项
```shell
--p 如果要切换到的目标目录是一个符号连接,直接切换到符号连接指向的目标目录
--L 如果要切换的目标目录是一个符号的连接,直接切换到字符连接名代表的目录,而非符号连接所指向的目标目录。
-- 当仅实用"-"一个选项时,当前工作目录将被切换到环境变量"OLDPWD"所表示的目录。
+-L (默认值)如果要切换到的目标目录是一个符号连接,那么切换到符号连接的目录。
+-P 如果要切换到的目标目录是一个符号连接,那么切换到它指向的物理位置目录。
+- 当前工作目录将被切换到环境变量OLDPWD所表示的目录,也就是前一个工作目录。
```
-### 实例
+## 返回值
+
+返回状态为成功除非无法进入指定的目录。
+
+## 例子
```shell
cd # 进入用户主目录;
+cd / # 进入根目录
cd ~ # 进入用户主目录;
-cd - # 返回进入此目录之前所在的目录;
cd .. # 返回上级目录(若当前目录为“/“,则执行完后还在“/";".."为上级目录的意思);
cd ../.. # 返回上两级目录;
cd !$ # 把上个命令的参数作为cd参数使用。
```
+关于切换到上一个工作目录的说明
+
+```shell
+cd -
+# 命令会首先显示要切换到的目标目录,然后再进入。
+cd ${OLDPWD}
+# 命令会直接切换到上一个工作目录。
+```
+
+关于`CDPATH`
+
+```shell
+# 设置桌面文件夹作为CDPATH的值。
+CDPATH='~/Desktop'
+# 假设我们接下来要演示涉及到的路径~和~/Desktop下没有test3文件夹,现在新建它们。
+mkdir ~/test3
+mkdir ~/Desktop/test3
+# 进入~目录。
+cd ~
+# 进入test3目录。
+cd test3
+# 执行后显示~/Desktop/test3并进入该目录,而不是~目录的test3目录。
+# 如果CDPATH存在值,那么优先在CDPATH中查找并进入第一个匹配成功的,如果全部失败那么最后尝试当前目录。
+```
+
+关于`cdable_vars`
+
+```shell
+# 打开选项。
+shopt -s cdable_vars
+# 假设当前路径以及CDPATH没有名为new_var的目录。
+new_var='~/Desktop'
+# 尝试进入。
+cd new_var
+# 关闭选项。
+shopt -u cdable_vars
+```
+
+### 注意
+
+1. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。
+
+2. 建议您在编写脚本的过程中如有必要使用`cd`命令时,请增加必要的注释以用于提醒阅读者当前工作目录,以免出现诸如`找不到文件`这类问题的发生。
+
-
\ No newline at end of file
diff --git a/command/cdrecord.md b/command/cdrecord.md
index 344e66e6766..49d7c0b9ff0 100644
--- a/command/cdrecord.md
+++ b/command/cdrecord.md
@@ -7,13 +7,13 @@ Linux系统下光盘刻录功能命令
**cdrecord命令** 用于Linux系统下光盘刻录,它支持cd和DVD格式。linux下一般都带有cdrecord软件。
-### 语法
+### 语法
```shell
cdrecord(选项)(参数)
```
-### 选项
+### 选项
```shell
-v:显示刻录光盘的详细过程;
@@ -23,11 +23,11 @@ dev=<刻录机设备号>:指定使用“-scanbus”参数扫描到的刻录机
-scanbus:扫描系统中可用的刻录机。
```
-### 参数
+### 参数
ISO文件:指定刻录光盘使用的ISO映像文件。
-### 实例
+### 实例
查看系统所有 CD-R(w) 设备:
@@ -59,4 +59,3 @@ cdrecord --dev=0,3,0 --blank=fast
```
-
\ No newline at end of file
diff --git a/command/chage.md b/command/chage.md
index 578b5afdd18..ab6eaa67fbd 100644
--- a/command/chage.md
+++ b/command/chage.md
@@ -7,13 +7,13 @@ chage
**chage命令** 是用来修改帐号和密码的有效期限。
-### 语法
+### 语法
```shell
chage [选项] 用户名
```
-### 选项
+### 选项
```shell
-m:密码可更改的最小天数。为零时代表任何时候都可以更改密码。
@@ -21,11 +21,11 @@ chage [选项] 用户名
-w:用户密码到期前,提前收到警告信息的天数。
-E:帐号到期的日期。过了这天,此帐号将不可用。
-d:上一次更改的日期。
--i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
+-I:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
-l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。
```
-### 实例
+### 实例
可以编辑`/etc/login.defs`来设定几个参数,以后设置口令默认就按照参数设定为准:
@@ -54,45 +54,47 @@ CREATE_MAIL_SPOOL=yes
我的服务器root帐户密码策略信息如下:
```shell
-[root@linuxde ~]# chage -l root
-最近一次密码修改时间 : 3月 12, 2013
-密码过期时间 :从不
-密码失效时间 :从不
-帐户过期时间 :从不
+chage -l root
+
+最近一次密码修改时间 : 3月 12, 2013
+密码过期时间 :从不
+密码失效时间 :从不
+帐户过期时间 :从不
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :99999
-在密码过期之前警告的天数 :7
+在密码过期之前警告的天数 :7
```
我可以通过如下命令修改我的密码过期时间:
```shell
-[root@linuxde ~]# chage -M 60 root
-[root@linuxde ~]# chage -l root
-最近一次密码修改时间 : 3月 12, 2013
-密码过期时间 : 5月 11, 2013
-密码失效时间 :从不
-帐户过期时间 :从不
+chage -M 60 root
+chage -l root
+
+最近一次密码修改时间 : 3月 12, 2013
+密码过期时间 : 5月 11, 2013
+密码失效时间 :从不
+帐户过期时间 :从不
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :60
-在密码过期之前警告的天数 :9
+在密码过期之前警告的天数 :9
```
然后通过如下命令设置密码失效时间:
```shell
-[root@linuxde ~]# chage -I 5 root
-[root@linuxde ~]# chage -l root
-最近一次密码修改时间 : 3月 12, 2013
-密码过期时间 : 5月 11, 2013
-密码失效时间 : 5月 16, 2013
-帐户过期时间 :从不
+chage -I 5 root
+chage -l root
+
+最近一次密码修改时间 : 3月 12, 2013
+密码过期时间 : 5月 11, 2013
+密码失效时间 : 5月 16, 2013
+帐户过期时间 :从不
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :60
-在密码过期之前警告的天数 :9
+在密码过期之前警告的天数 :9
```
从上述命令可以看到,在密码过期后5天,密码自动失效,这个用户将无法登陆系统了。
-
\ No newline at end of file
diff --git a/command/chattr.md b/command/chattr.md
index 376cf19a6a7..698811f1800 100644
--- a/command/chattr.md
+++ b/command/chattr.md
@@ -7,13 +7,13 @@ chattr
**chattr命令** 用来改变文件属性。这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下8种模式:
-### 语法
+### 语法
```shell
chattr(选项)
```
-### 选项
+### 选项
```shell
a:让文件或目录仅供附加用途;
@@ -35,7 +35,7 @@ u:预防意外删除。
=<属性>:指定文件或目录的该项属性。
```
-### 实例
+### 实例
用chattr命令防止系统中某个关键文件被修改:
@@ -52,4 +52,3 @@ chattr +a /data1/user_act.log
```
-
\ No newline at end of file
diff --git a/command/chcon.md b/command/chcon.md
index cefd3300691..7efb5aaf3c8 100644
--- a/command/chcon.md
+++ b/command/chcon.md
@@ -7,7 +7,7 @@ chcon
**chcon命令** 是修改对象(文件)的安全上下文,比如:用户、角色、类型、安全级别。也就是将每个文件的安全环境变更至指定环境。使用`--reference`选项时,把指定文件的安全环境设置为与参考文件相同。chcon命令位于`/usr/bin/chcon`。
-### 语法
+### 语法
```shell
chcon [选项]... 环境 文件...
@@ -15,7 +15,7 @@ chcon [选项]... [-u 用户] [-r 角色] [-l 范围] [-t 类型] 文件...
chcon [选项]... --reference=参考文件 文件...
```
-### 选项
+### 选项
```shell
-h, --no-dereference:影响符号连接而非引用的文件。
@@ -38,7 +38,7 @@ chcon [选项]... --reference=参考文件 文件...
--version:显示版本信息并退出。
```
-### 实例
+### 实例
如果你想把这个ftp共享给匿名用户的话,需要开启以下:
@@ -72,4 +72,3 @@ chcon -t public_content_t /directories
```
-
\ No newline at end of file
diff --git a/command/chfn.md b/command/chfn.md
index 3c43cc80a0d..056b18fbe90 100644
--- a/command/chfn.md
+++ b/command/chfn.md
@@ -7,13 +7,13 @@ chfn
**chfn命令** 用来改变finger命令显示的信息。这些信息都存放在/etc目录里的passwd文件里。若不指定任何选项,则chfn命令会进入问答式界面。
-### 语法
+### 语法
```shell
chfn(选项)(参数)
```
-### 选项
+### 选项
```shell
-f<真实姓名>或--full-name<真实姓名>:设置真实姓名;
@@ -24,11 +24,11 @@ chfn(选项)(参数)
-v或-version:显示版本信息。
```
-### 参数
+### 参数
用户名:指定要改变finger信息的用户名。
-### 实例
+### 实例
范例1,改变finger信息:
@@ -64,4 +64,3 @@ Home Phone[]: [del]
```
-
\ No newline at end of file
diff --git a/command/chgrp.md b/command/chgrp.md
index 4e341bcd1fd..5b3cdd720e4 100644
--- a/command/chgrp.md
+++ b/command/chgrp.md
@@ -9,13 +9,13 @@ chgrp
在UNIX系统家族里,文件或目录权限的掌控以拥有者及所属群组来管理。您可以使用chgrp指令去变更文件与目录的所属群组,设置方式采用群组名称或群组识别码皆可。
-### 语法
+### 语法
```shell
chgrp [选项][组群][文件|目录]
```
-### 选项
+### 选项
```shell
-R 递归式地改变指定目录及其下的所有子目录和文件的所属的组
@@ -30,12 +30,12 @@ chgrp [选项][组群][文件|目录]
--reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;
```
-### 参数
+### 参数
* 组:指定新工作名称;
* 文件:指定要改变所属组的文件列表。多个文件或者目录之间使用空格隔开。
-### 实例
+### 实例
将`/usr/meng`及其子目录下的所有文件的用户组改为mengxin
@@ -50,4 +50,4 @@ chgrp -R mengxin /usr/meng
```
-
+
diff --git a/command/chkconfig.md b/command/chkconfig.md
index 10bf33417b1..8d75dbeb2bb 100644
--- a/command/chkconfig.md
+++ b/command/chkconfig.md
@@ -7,13 +7,13 @@ chkconfig
**chkconfig命令** 检查、设置系统的各种服务。这是Red Hat公司遵循GPL规则所开发的程序,它可查询操作系统在每一个执行等级中会执行哪些系统服务,其中包括各类常驻服务。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接。
-### 语法
+### 语法
```shell
chkconfig(选项)
```
-### 选项
+### 选项
```shell
--add:增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据;
@@ -54,7 +54,7 @@ chkconfig(选项)
# higher quality random number generation.
```
-### 实例
+### 实例
```shell
chkconfig --list #列出所有的系统服务。
@@ -76,4 +76,4 @@ chkconfig –level redis 2345 on # 把redis在运行级别为2、3、4、5的情
3. `chkconfig --level 35 mysqld on`修改服务的默认启动等级。
-
+
diff --git a/command/chmod.md b/command/chmod.md
index b73fc358d6b..0cdc60c051d 100644
--- a/command/chmod.md
+++ b/command/chmod.md
@@ -3,114 +3,99 @@ chmod
用来变更文件或目录的权限
-## 补充说明
-
-**chmod命令** 用来变更文件或目录的权限。在UNIX系统家族里,文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分,另有3种特殊权限可供运用。用户可以使用chmod指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。
-
-权限范围的表示法如下:
-
-`u` User,即文件或目录的拥有者;
-`g` Group,即文件或目录的所属群组;
-`o` Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围;
-`a` All,即全部的用户,包含拥有者,所属群组以及其他用户;
-`r` 读取权限,数字代号为“4”;
-`w` 写入权限,数字代号为“2”;
-`x` 执行或切换权限,数字代号为“1”;
-`-` 不具任何权限,数字代号为“0”;
-`s` 特殊功能说明:变更文件或目录的权限。
-
-### 语法
-
-```
-chmod(选项)(参数)
-```
-
-### 选项
+## 概要
```shell
-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 # 显示版本信息
+chmod [OPTION]... MODE[,MODE]... FILE...
+chmod [OPTION]... OCTAL-MODE FILE...
+chmod [OPTION]... --reference=RFILE FILE...
```
-### 参数
+## 主要用途
-权限模式:指定文件的权限模式;
-文件:要改变权限的文件。
+- 通过符号组合的方式更改目标文件或目录的权限。
+- 通过八进制数的方式更改目标文件或目录的权限。
+- 通过参考文件的权限来更改目标文件或目录的权限。
-### 知识扩展和实例
+## 参数
-Linux用 户分为:拥有者、组群(Group)、其他(other),Linux系统中,预设的情況下,系统中所有的帐号与一般身份使用者,以及root的相关信 息, 都是记录在`/etc/passwd`文件中。每个人的密码则是记录在`/etc/shadow`文件下。 此外,所有的组群名称记录在`/etc/group`內!
+mode:八进制数或符号组合。
-linux文件的用户权限的分析图
+file:指定要更改权限的一到多个文件。
+
+## 选项
```shell
- -rw-r--r-- 1 user staff 651 Oct 12 12:53 .gitmodules
-# ↑╰┬╯╰┬╯╰┬╯
-# ┆ ┆ ┆ ╰┈ 0 其他人
-# ┆ ┆ ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ g 属组
-# ┆ ╰┈┈┈┈ u 属组
-# ╰┈┈ 第一个字母 `d` 代表目录,`-` 代表普通文件
+-c, --changes:当文件的权限更改时输出操作信息。
+--no-preserve-root:不将'/'特殊化处理,默认选项。
+--preserve-root:不能在根目录下递归操作。
+-f, --silent, --quiet:抑制多数错误消息的输出。
+-v, --verbose:无论文件是否更改了权限,一律输出操作信息。
+--reference=RFILE:使用参考文件或参考目录RFILE的权限来设置目标文件或目录的权限。
+-R, --recursive:对目录以及目录下的文件递归执行更改权限操作。
+--help:显示帮助信息并退出。
+--version:显示版本信息并退出。
```
-例:rwx rw- r--
+## 返回值
-r=读取属性 //值=4
-w=写入属性 //值=2
-x=执行属性 //值=1
+返回状态为成功除非给出了非法选项或非法参数。
-```shell
-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都设置可执行属性
-```
+## 例子
-文件的属主和属组属性设置
+> 参考`man chmod`文档的`DESCRIPTION`段落得知:
+> - `u`符号代表当前用户。
+> - `g`符号代表和当前用户在同一个组的用户,以下简称组用户。
+> - `o`符号代表其他用户。
+> - `a`符号代表所有用户。
+> - `r`符号代表读权限以及八进制数`4`。
+> - `w`符号代表写权限以及八进制数`2`。
+> - `x`符号代表执行权限以及八进制数`1`。
+> - `X`符号代表如果目标文件是可执行文件或目录,可给其设置可执行权限。
+> - `s`符号代表设置权限suid和sgid,使用权限组合`u+s`设定文件的用户的ID位,`g+s`设置组用户ID位。
+> - `t`符号代表只有目录或文件的所有者才可以删除目录下的文件。
+> - `+`符号代表添加目标用户相应的权限。
+> - `-`符号代表删除目标用户相应的权限。
+> - `=`符号代表添加目标用户相应的权限,删除未提到的权限。
```shell
-chown user:market f01 # 把文件f01给uesr,添加到market组
-ll -d f1 查看目录f1的属性
-```
+linux文件的用户权限说明:
+# 查看当前目录(包含隐藏文件)的长格式。
+ls -la
+ -rw-r--r-- 1 user staff 651 Oct 12 12:53 .gitmodules
-将`/home/wwwroot/`里的所有文件和文件夹设置为`755`权限
-
-(1)直接指定路径修改
+# 第1位如果是d则代表目录,是-则代表普通文件。
+# 更多详情请参阅info coreutils 'ls invocation'(ls命令的info文档)的'-l'选项部分。
+# 第2到4位代表当前用户的权限。
+# 第5到7位代表组用户的权限。
+# 第8到10位代表其他用户的权限。
+```
```shell
-chmod -R 755 /home/wwwroot/*
+# 添加组用户的写权限。
+chmod g+w ./test.log
+# 删除其他用户的所有权限。
+chmod o= ./test.log
+# 使得所有用户都没有写权限。
+chmod a-w ./test.log
+# 当前用户具有所有权限,组用户有读写权限,其他用户只有读权限。
+chmod u=rwx, g=rw, o=r ./test.log
+# 等价的八进制数表示:
+chmod 764 ./test.log
+# 将目录以及目录下的文件都设置为所有用户拥有读写权限。
+# 注意,使用'-R'选项一定要保留当前用户的执行和读取权限,否则会报错!
+chmod -R a=rw ./testdir/
+# 根据其他文件的权限设置文件权限。
+chmod --reference=./1.log ./test.log
```
-(2)手动进入该目录修改权限(并显示详细过程)
+### 注意
+1. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man chmod`或`info coreutils 'chmod invocation'`。
-```shell
-cd /home/wwwroot
-chmod -Rv 755 * #注意:“*”表示通配符,指的是所有文件和文件
-sudo chmod o+rw /shared #设置文件夹权限以保证其余用户可以访问它。
-```
+2. 符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。
+
+3. 使用`-R`选项一定要保留当前用户的执行和读取权限,否则会报错!
-
diff --git a/command/chown.md b/command/chown.md
index 7df71f4b593..bbb4089ed6c 100644
--- a/command/chown.md
+++ b/command/chown.md
@@ -7,34 +7,34 @@ chown
**chown命令** 改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户D,用户组可以是组名或组id。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。
-只有文件主和超级用户才可以便用该命令。
+只有文件主和超级用户才可以使用该命令。
-### 语法
+### 语法
```shell
chown(选项)(参数)
```
-### 选项
+### 选项
```shell
-c或——changes:效果类似“-v”参数,但仅回报更改的部分;
-f或--quite或——silent:不显示错误信息;
-h或--no-dereference:只对符号连接的文件作修改,而不更改其他任何相关文件;
-R或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理;
--v或——version:显示指令执行过程;
+-v或——verbose:显示指令执行过程;
--dereference:效果和“-h”参数相同;
--help:在线帮助;
--reference=<参考文件或目录>:把指定文件或目录的拥有者与所属群组全部设成和参考文件或目录的拥有者与所属群组相同;
--version:显示版本信息。
```
-### 参数
+### 参数
用户:组:指定所有者和所属工作组。当省略“:组”,仅改变文件所有者;
文件:指定要改变所有者和工作组的文件列表。支持多个文件和目标,支持shell通配符。
-### 实例
+### 实例
将目录`/usr/meng`及其下面的所有文件、子目录的文件主改成 liu:
@@ -43,4 +43,3 @@ chown -R liu /usr/meng
```
-
\ No newline at end of file
diff --git a/command/chpasswd.md b/command/chpasswd.md
index d897475ae1c..456c7d1b403 100644
--- a/command/chpasswd.md
+++ b/command/chpasswd.md
@@ -7,13 +7,13 @@ chpasswd
**chpasswd命令** 是批量更新用户口令的工具,是把一个文件内容重新定向添加到`/etc/shadow`中。
-### 语法
+### 语法
```shell
chpasswd(选项)
```
-### 选项
+### 选项
```shell
-e:输入的密码是加密后的密文;
@@ -21,7 +21,7 @@ chpasswd(选项)
-m:当被支持的密码未被加密时,使用MD5加密代替DES加密。
```
-### 实例
+### 实例
先创建用户密码对应文件,格式为`username:password`,如`abc:abc123`,必须以这种格式来书写,并且不能有空行,保存成文本文件user.txt,然后执行chpasswd命令:
@@ -32,4 +32,3 @@ chpasswd < user.txt
以上是运用chpasswd命令来批量修改密码。是linux系统管理中的捷径。
-
\ No newline at end of file
diff --git a/command/chroot.md b/command/chroot.md
index de1449e66cc..1c32d7b9fb6 100644
--- a/command/chroot.md
+++ b/command/chroot.md
@@ -21,25 +21,25 @@ chroot
chroot 的作用就是切换系统的根位置,而这个作用最为明显的是在系统初始引导磁盘的处理过程中使用,从初始 RAM 磁盘 (initrd) 切换系统的根位置并执行真正的 init。另外,当系统出现一些问题时,我们也可以使用 chroot 来切换到一个临时的系统。
-### 语法
+### 语法
```shell
chroot(选项)(参数)
```
-### 选项
+### 选项
```shell
--help:在线帮助;
--version:显示版本信息。
```
-### 参数
+### 参数
* 目录:指定新的根目录;
* 指令:指定要执行的指令。
-### 实例
+### 实例
**将target作为根目录(运行其中的`/bin/sh`):**
@@ -119,4 +119,3 @@ chroot newRoot /a.out
这样就能够正确运行a.out了,因为a.out使用到了其他的动态连接库,所以需要将库拷贝到newRoot中,如果没有其他库那么直接拷贝a.out就能运行。例如静态编译后的busybox,其安装目录中的`/bin/busybox`就没有依赖其他库。
-
\ No newline at end of file
diff --git a/command/chsh.md b/command/chsh.md
index baa6545d317..72fb7e45357 100644
--- a/command/chsh.md
+++ b/command/chsh.md
@@ -7,13 +7,13 @@ chsh
**chsh命令** 用来更换登录系统时使用的shell。若不指定任何参数与用户名称,则chsh会以应答的方式进行设置。
-### 语法
+### 语法
```shell
chsh(选项)(参数)
```
-### 选项
+### 选项
```shell
-s或--shell:更改系统预设的shell环境。;
@@ -22,11 +22,11 @@ chsh(选项)(参数)
-v或-version:显示版本信息。
```
-### 参数
+### 参数
用户名:要改变默认shell的用户。
-### 实例
+### 实例
**查看系统安装了哪些shell的两种方法:**
@@ -90,4 +90,3 @@ Shell changed.
```
-
\ No newline at end of file
diff --git a/command/cksum.md b/command/cksum.md
index c3b538ad0eb..d3fb5b595d3 100644
--- a/command/cksum.md
+++ b/command/cksum.md
@@ -11,24 +11,24 @@ cksum
指定文件交由cksum命令进行校验后,会返回校验结果供用户核对文件是否正确无误。若不指定任何文件名称或是所给予的文件名为"-",则cksum命令会从标准输入设备中读取数据。
-### 语法
+### 语法
```shell
cksum(选项)(参数)
```
-### 选项
+### 选项
```shell
--help:在线帮助;
--version:显示版本信息。
```
-### 参数
+### 参数
文件:指定要计算校验的版本信息。
-### 实例
+### 实例
使用cksum命令计算文件"testfile1"的完整性,输入如下命令:
@@ -47,4 +47,3 @@ cksum testfile1 #对指定文件进行CRC校验
注意:如果文件中有任何字符被修改,都将改变计算后CRC校验码的值。
-
\ No newline at end of file
diff --git a/command/clear.md b/command/clear.md
index c8eaa0a976b..92ee484291e 100644
--- a/command/clear.md
+++ b/command/clear.md
@@ -7,15 +7,14 @@ clear
**clear命令** 用于清除当前屏幕终端上的任何信息。
-### 语法
+### 语法
```shell
clear
```
-### 实例
+### 实例
直接输入clear命令当前终端上的任何信息就可被清除。
-
\ No newline at end of file
diff --git a/command/clock.md b/command/clock.md
index 5cf0357398e..81cf3329cf3 100644
--- a/command/clock.md
+++ b/command/clock.md
@@ -1,20 +1,20 @@
clock
===
-用于调整 RTC 时间。
+用于调整 RTC 时间
## 补充说明
**clock命令**用于调整 RTC 时间。 RTC 是电脑内建的硬件时间,执行这项指令可以显示现在时刻,调整硬件时钟的时间,将系统时间设成与硬件时钟之时间一致,或是把系统时间回存到硬件时钟。
-### 语法
+### 语法
```shell
clock [--adjust][--debug][--directisa][--getepoch][--hctosys][--set --date="<日期时间>"]
[--setepoch --epoch=< >][--show][--systohc][--test][--utc][--version]
```
-### 选项
+### 选项
```shell
--adjust 第一次使用"--set"或"--systohc"参数设置硬件时钟,会在/etc目录下产生一个名称为adjtime的文件。当再次使用这两个参数调整硬件时钟,此文件便会记录两次调整间之差异,日后执行clock指令加上"--adjust"参数时,程序会自动根 据记录文件的数值差异,计算出平均值,自动调整硬件时钟的时间。
@@ -46,4 +46,4 @@ clock -utc #显示UTC时间
```
-
+
diff --git a/command/clockdiff.md b/command/clockdiff.md
index dfda023f289..1b5f017dce7 100644
--- a/command/clockdiff.md
+++ b/command/clockdiff.md
@@ -7,14 +7,14 @@ clockdiff
在ip报文的首部和ICMP报文的首部都可以放入时间戳数据。 **clockdiff** 程序正是使用时间戳来测算目的主机和本地主机的系统时间差。
-### 选项
+### 选项
```shell
-o:使用IP时间戳选项来测量系统时间差。时间戳只用3个。
-o1:使用IP时间戳选项来测量系统时间差。用4个时间戳。如果-o和-o1都没有设置,那么就是用ICMP时间戳来测试系统时间差。
```
-### 实例
+### 实例
```shell
lixi@lixi-desktop:~$ ping -T tsandaddr www.ustc.edu.cn -c 1
@@ -56,4 +56,3 @@ host=gigagate1.Princeton.EDU rtt=307(21)ms/271ms delta=-5ms/-5ms Wed Dec 17 11:5
上面是测试一个RTT较大的目的主机和本地主机的系统时间差。不过在使用clockdiff的时候,需要一点运气,因为很多路由会忽略ICMP或IP时间戳。
-
\ No newline at end of file
diff --git a/command/cmp.md b/command/cmp.md
index d8758e2fec5..b3012c5ee13 100644
--- a/command/cmp.md
+++ b/command/cmp.md
@@ -7,13 +7,13 @@ cmp
**cmp命令** 用来比较两个文件是否有差异。当相互比较的两个文件完全一样时,则该指令不会显示任何信息。若发现有差异,预设会标示出第一个不通之处的字符和列数编号。若不指定任何文件名称或是所给予的文件名为“-”,则cmp指令会从标准输入设备读取数据。
-### 语法
+### 语法
```shell
cmp(选项)(参数)
```
-### 选项
+### 选项
```shell
-c或--print-chars:除了标明差异处的十进制字码之外,一并显示该字符所对应字符;
@@ -24,11 +24,11 @@ cmp(选项)(参数)
--help:在线帮助。
```
-### 参数
+### 参数
目录:比较两个文件的差异。
-### 实例
+### 实例
使用cmp命令比较文件"testfile"和文件"testfile1"两个文件,则输入下面的命令:
@@ -60,4 +60,3 @@ testfile testfile1 #有差异:第8字节,第2行
注意:在比较结果中,只能够显示第一比较结果。
-
\ No newline at end of file
diff --git a/command/col.md b/command/col.md
index 6c8875cf877..f6c53474823 100644
--- a/command/col.md
+++ b/command/col.md
@@ -7,13 +7,13 @@ col
**col命令** 是一个标准输入文本过滤器,它从标注输入设备读取文本内容,并把内容显示到标注输出设备。在许多UNIX说明文件里,都有RLF控制字符。当我们运用shell特殊字符`>`和`>>`,把说明文件的内容输出成纯文本文件时,控制字符会变成乱码,col命令则能有效滤除这些控制字符。
-### 语法
+### 语法
```shell
col(选项)
```
-### 选项
+### 选项
```shell
-b:过滤掉所有的控制字符,包括RLF和HRLF;
@@ -23,4 +23,3 @@ col(选项)
```
-
\ No newline at end of file
diff --git a/command/colrm.md b/command/colrm.md
index c59468b9bee..c168f632d4c 100644
--- a/command/colrm.md
+++ b/command/colrm.md
@@ -7,16 +7,15 @@ colrm
**colrm命令** 用于删除文件中的指定列。colrm命令从标准输入设备读取书记,转而输出到标准输出设备。如果不加任何参数,则colrm命令不会过滤任何一行。
-### 语法
+### 语法
```shell
colrm(参数)
```
-### 参数
+### 参数
* 起始列号:指定要删除的指定列;
* 结尾列号:指定要删除的结尾列。
-
\ No newline at end of file
diff --git a/command/column.md b/command/column.md
new file mode 100644
index 00000000000..c93c184692b
--- /dev/null
+++ b/command/column.md
@@ -0,0 +1,176 @@
+column
+===
+
+按列格式化输出文件
+
+## 概要
+
+```shell
+column [options] [file ...]
+```
+
+## 主要用途
+
+- 将单列数据整理为多列显示,每行宽度可以指定,超出的部分自动换行。
+- 将多列数据进行快速整理,对齐每列的字符。
+
+## 参数
+
+file(可选),当没有指定文件时,默认会从标准输入读取,因此可以配合管道符使用。
+
+## 选项
+
+```shell
+-c, --columns 输出宽度(以字符数表示)
+-t, --table 创建一个表格(每列字符会对齐)
+-s, --separator 指定识别表格的分隔符
+-o, --output-separator 输出表格的列分隔符,默认为两个空格
+-x, --fillrows 在列之前填充行
+-N, --table-columns 添加列名(逗号分隔)
+-J --json 格式化为JSON输出(需要配合-N/--table-columns使用)
+-h, --help 显示此帮助
+-V, --version 输出版本信息
+```
+
+## 返回值
+
+格式化排列后的字符串。
+
+## 示例
+
+- 整理单列数据
+
+```shell
+# 生成 26 个英文字母, 每列一个
+$ for a in {a..z}; do echo $a; done > test
+
+# 每行最大 60 个字符
+$ cat test | column -c 60
+a e i m q u y
+b f j n r v z
+c g k o s w
+d h l p t x
+
+# 在上面的基础上,进一步整理,每列之间宽度默认两个空白符
+$ cat test | column -c 60 | column -t
+a e i m q u y
+b f j n r v z
+c g k o s w
+d h l p t x
+
+# 指定每列之间用 ', ' 拼接
+$ cat test | column -c 60 | column -t -o ', '
+a, e, i, m, q, u, y
+b, f, j, n, r, v, z
+c, g, k, o, s, w
+d, h, l, p, t, x
+```
+
+- 整理多列数据
+
+```shell
+# 现有如下内容较为凌乱的文本文件 test
+$ cat test
+Address[0] Metal3,pin 133.175:159.92
+Address[1] Metal3,pin 112.38:159.92
+Address[2] Metal3,pin 70.775:159.92
+Address[3] Metal3,pin 41.655:159.92
+DataIn[0] Metal3,pin 66.615:159.92
+DataIn[1] Metal3,pin 37.495:159.92
+DataIn[2] Metal3,pin 122.88:159.92
+DataIn[3] Metal3,pin 95.74:159.92
+DataOut[0] Metal3,pin 45.815:159.92
+DataOut[1] Metal3,pin 79.095:159.92
+DataOut[2] Metal3,pin 104.055:159.92
+DataOut[3] Metal3,pin 62.46:159.92
+MemReq Metal3,pin 108.215:159.92
+RdWrBar Metal3,pin 87.415:159.92
+clock Metal3,pin 74.935:159.92
+
+# 列对齐
+$ cat test | column -t
+Address[0] Metal3,pin 133.175:159.92
+Address[1] Metal3,pin 112.38:159.92
+Address[2] Metal3,pin 70.775:159.92
+Address[3] Metal3,pin 41.655:159.92
+DataIn[0] Metal3,pin 66.615:159.92
+DataIn[1] Metal3,pin 37.495:159.92
+DataIn[2] Metal3,pin 122.88:159.92
+DataIn[3] Metal3,pin 95.74:159.92
+DataOut[0] Metal3,pin 45.815:159.92
+DataOut[1] Metal3,pin 79.095:159.92
+DataOut[2] Metal3,pin 104.055:159.92
+DataOut[3] Metal3,pin 62.46:159.92
+MemReq Metal3,pin 108.215:159.92
+RdWrBar Metal3,pin 87.415:159.92
+clock Metal3,pin 74.935:159.92
+
+# 将 ',' 和 ':' 也识别为分隔符
+$ cat test | column -t -s ',: '
+Address[0] Metal3 pin 133.175 159.92
+Address[1] Metal3 pin 112.38 159.92
+Address[2] Metal3 pin 70.775 159.92
+Address[3] Metal3 pin 41.655 159.92
+DataIn[0] Metal3 pin 66.615 159.92
+DataIn[1] Metal3 pin 37.495 159.92
+DataIn[2] Metal3 pin 122.88 159.92
+DataIn[3] Metal3 pin 95.74 159.92
+DataOut[0] Metal3 pin 45.815 159.92
+DataOut[1] Metal3 pin 79.095 159.92
+DataOut[2] Metal3 pin 104.055 159.92
+DataOut[3] Metal3 pin 62.46 159.92
+MemReq Metal3 pin 108.215 159.92
+RdWrBar Metal3 pin 87.415 159.92
+clock Metal3 pin 74.935 159.92
+```
+
+- 添加列名并以JSON格式输出
+
+```shell
+$ column -J -s ":" -N "Username,Password,UID,GID,Gecos,HomeDirectory,Shell" /etc/passwd
+{
+ "table": [
+ {
+ "username": "root",
+ "password": "x",
+ "uid": "0",
+ "gid": "0",
+ "gecos": "root",
+ "homedirectory": "/root",
+ "shell": "/bin/bash"
+ },{
+ "username": "daemon",
+ "password": "x",
+ "uid": "1",
+ "gid": "1",
+ "gecos": "daemon",
+ "homedirectory": "/usr/sbin",
+ "shell": "/usr/sbin/nologin"
+ },{
+ "username": "bin",
+ "password": "x",
+ "uid": "2",
+ "gid": "2",
+ "gecos": "bin",
+ "homedirectory": "/bin",
+ "shell": "/usr/sbin/nologin"
+ },{
+ "username": "sys",
+ "password": "x",
+ "uid": "3",
+ "gid": "3",
+ "gecos": "sys",
+ "homedirectory": "/dev",
+ "shell": "/usr/sbin/nologin"
+ },{
+ "username": "sync",
+ "password": "x",
+ "uid": "4",
+ "gid": "65534",
+ "gecos": "sync",
+ "homedirectory": "/bin",
+ "shell": "/bin/sync"
+ }
+ ]
+}
+```
diff --git a/command/comm.md b/command/comm.md
index 9379c1290d1..1e6a4e710b3 100644
--- a/command/comm.md
+++ b/command/comm.md
@@ -1,45 +1,42 @@
comm
===
-两个文件之间的比较
+按行比较两个已排序的文件。
-## 补充说明
+## 概要
-**comm命令** 可以用于两个文件之间的比较,它有一些选项可以用来调整输出,以便执行交集、求差、以及差集操作。
+```shell
+comm [OPTION]... FILE1 FILE2
+```
-* 交集:打印出两个文件所共有的行。
-* 求差:打印出指定文件所包含的且不相同的行。
-* 差集:打印出包含在一个文件中,但不包含在其他指定文件中的行。
+## 主要用途
-### 语法
+- 按行比较两个已排序的文件。
+- 当`FILE1`或`FILE2`为`-`时,读取标准输入。
+- 无选项时输出三列,第一列为`FILE1`独有的行,第二列为`FILE2`独有的行,第三列为`FILE1`,`FILE2`共有的行。
-```shell
-comm [选项]... 文件1 文件2
-```
-### 选项
+## 选项
```shell
-如果不附带选项,程序会生成三列输出。
-第一列包含文件1 特有的行,
-第二列包含文件2 特有的行,
-而第三列包含两个文件共有的行。
-
- -1 不输出文件1 特有的行
- -2 不输出文件2 特有的行
- -3 不输出两个文件共有的行
-
---check-order 检查输入是否被正确排序,即使所有输入行均成对
---nocheck-order 不检查输入是否被正确排序
---output-delimiter=STR 依照STR 分列
+-1 不输出第一列。
+-2 不输出第二列。
+-3 不输出第三列。
+--check-order 检查输入行是否正确的排序,即使它们确实是已排序过的。
+--nocheck-order 不检查输入行是否正确的排序。
+--output-delimiter=STR 使用STR作为输出列之间的分隔符而不是默认的TAB。
+--total 额外地增加第四列输出概要。
+-z, --zero-terminated 设置行终止符为NUL(空),而不是换行符。
+--help 显示帮助信息并退出。
+--version 显示版本信息并退出。
```
-### 参数
-* 文件1:指定要比较的第一个**有序**文件;
-* 文件2:指定要比较的第二个**有序**文件。
+## 返回值
-### 实例
+返回0表示成功,返回非0值表示失败。
+
+## 例子
文本 `aaa.txt` 内容
@@ -66,12 +63,6 @@ ttt
jjj
```
-两个文件之间的比较,如果没有排序需要带上`--nocheck-order`参数, 没有带上参数将会收到提示,此命令重要之功能在于比较。
-
-```shell
-comm: 文件2 没有被正确排序
-comm: 文件1 没有被正确排序
-```
比较结果
@@ -88,21 +79,20 @@ eee
hhh
ttt
jjj
-第一列 第二列 第三列
```
-输出的第一列只包含在aaa.txt中出现的行,第二列包含在bbb.txt中出现的行,第三列包含在aaa.txt和bbb.txt中相同的行。各列是以制表符(\t)作为定界符。
+输出的第一列只包含在aaa.txt中出现的行,第二列包含在bbb.txt中出现的行,第三列包含在aaa.txt和bbb.txt中相同的行。各列之间以制表符(\t)作为分隔符。
-### 有序比较
+### 比较排序过的文档
-有序比较,先通过 sort 将文件内容排序
+先通过 sort 将文件内容排序:
```shell
[root@localhost ~]# sort aaa.txt > aaa1.txt
[root@localhost ~]# sort bbb.txt > bbb1.txt
```
-有序比较结果:
+比较结果:
```shell
[root@localhost ~]# comm aaa1.txt bbb1.txt
@@ -128,25 +118,6 @@ bbb
ccc
```
-**求差**
-
-打印出两个文件中不相同的行,需要删除第三列:
-
-```shell
-[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的差集:
@@ -173,4 +144,8 @@ jjj
```
-
\ No newline at end of file
+### 注意
+
+1. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 comm`,`info coreutils 'comm invocation'`。
+
+
diff --git a/command/command.md b/command/command.md
index 5c46a7850f1..0c605fe4472 100644
--- a/command/command.md
+++ b/command/command.md
@@ -7,17 +7,17 @@ command
**command命令** 调用指定的指令并执行,命令执行时不查询shell函数。command命令只能够执行shell内部的命令。
-### 语法
+### 语法
```shell
command(参数)
```
-### 参数
+### 参数
指令:需要调用的指令及参数。
-### 实例
+### 实例
使用command命令调用执行`echo Linux`,输入如下命令:
@@ -32,4 +32,3 @@ Linux
```
-
\ No newline at end of file
diff --git a/command/compress.md b/command/compress.md
index b960614c66a..47071126c0d 100644
--- a/command/compress.md
+++ b/command/compress.md
@@ -7,13 +7,13 @@ compress
**compress命令** 使用“Lempress-Ziv”编码压缩数据文件。compress是个历史悠久的压缩程序,文件经它压缩后,其名称后面会多出".Z"的扩展名。当要解压缩时,可执行uncompress指令。事实上uncompress是指向compress的符号连接,因此不论是压缩或解压缩,都可通过compress指令单独完成。
-### 语法
+### 语法
```shell
compress(选项)(参数)
```
-### 选项
+### 选项
```shell
-f:不提示用户,强制覆盖掉目标文件;
@@ -25,11 +25,11 @@ compress(选项)(参数)
-V:显示指令版本及程序预设值。
```
-### 参数
+### 参数
文件:指定要压缩的文件列表。
-### 实例
+### 实例
将`/etc/man.config`复到`/tmp` ,并加以压缩
@@ -65,4 +65,3 @@ compress(选项)(参数)
这个`-c`的选项比较有趣!会将压缩过程的资料输出到屏幕上,而不是写入成为file.Z文件。所以,我们可以透过资料流重导向的方法将资料输出成为另一个档名。
-
\ No newline at end of file
diff --git a/command/consoletype.md b/command/consoletype.md
index f5323cc5ff1..bc65e86487b 100644
--- a/command/consoletype.md
+++ b/command/consoletype.md
@@ -7,13 +7,13 @@ consoletype
**consoletype命令** 用于打印已连接的终端类型到标准输出,并能够检查已连接的终端是当前终端还是虚拟终端。
-### 语法
+### 语法
```shell
consoletype
```
-### 实例
+### 实例
```shell
[root@localhost ~]# consoletype
@@ -21,4 +21,3 @@ pty
```
-
\ No newline at end of file
diff --git a/command/continue.md b/command/continue.md
new file mode 100644
index 00000000000..09752eea9fe
--- /dev/null
+++ b/command/continue.md
@@ -0,0 +1,70 @@
+continue
+===
+
+结束本次循环,继续执行下一个for,while或until循环。
+
+## 概要
+
+```shell
+continue [n]
+```
+
+## 主要用途
+
+- 结束本次循环,继续执行下一个for,while或until循环;可指定从第几层循环继续执行。
+
+
+## 参数
+
+n(可选):大于等于1的整数,用于指定从第几层循环继续执行。
+
+## 返回值
+
+返回状态为成功除非n小于1。
+
+## 例子
+
+```shell
+# continue的可选参数n缺省值为1。
+for((i=3;i>0;i--)); do
+ # 跳到内层for循环继续执行。
+ for((j=3;j>0;j--)); do
+ if((j==2)); then
+ # 换成continue 1时结果一样
+ continue
+ fi
+ printf "%s %s\n" ${i} ${j}
+ done
+done
+# 输出结果
+3 3
+3 1
+2 3
+2 1
+1 3
+1 1
+```
+
+```shell
+# 当n为2时:
+# 跳到外层for循环继续执行。
+for((i=3;i>0;i--)); do
+ for((j=3;j>0;j--)); do
+ if((j==2)); then
+ continue 2
+ fi
+ printf "%s %s\n" ${i} ${j}
+ done
+done
+# 输出结果
+3 3
+2 3
+1 3
+```
+
+### 注意
+
+1. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。
+
+
+
diff --git a/command/convertquota.md b/command/convertquota.md
index a5602c6727c..7671849228a 100644
--- a/command/convertquota.md
+++ b/command/convertquota.md
@@ -7,13 +7,13 @@ convertquota
**convertquota命令** 用于将老的磁盘额数据文件(“quota.user”和“quota.group”)转换为新格式的文件(“quota.user”和“quota.group”)。
-### 语法
+### 语法
```shell
convertquota(选项)(参数)
```
-### 选项
+### 选项
```shell
-u:仅转换用户磁盘配额数据文件;
@@ -22,11 +22,11 @@ convertquota(选项)(参数)
-e:将新的文件格式从大字节序换为小字节序。
```
-### 参数
+### 参数
文件系统:指定要转换磁盘配额数据文件格式的文件系统(硬盘分区)。
-### 实例
+### 实例
使用convertquota指令转换指定文件系统`/data`的磁盘配额数据文件。在命令行中输入下面的命令:
@@ -35,4 +35,3 @@ convertquota -u /data //转换文件系统"/data"上的用户磁盘配额文
```
-
\ No newline at end of file
diff --git a/command/cp.md b/command/cp.md
index 807c47dc965..6cb3a39efd5 100644
--- a/command/cp.md
+++ b/command/cp.md
@@ -7,13 +7,13 @@ cp
**cp命令** 用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。
-### 语法
+### 语法
```shell
cp(选项)(参数)
```
-### 选项
+### 选项
```shell
-a:此参数的效果和同时指定"-dpR"参数相同;
@@ -30,12 +30,12 @@ cp(选项)(参数)
-v:详细显示命令执行的操作。
```
-### 参数
+### 参数
* 源文件:制定源文件列表。默认情况下,cp命令不能复制目录,如果要复制目录,则必须使用`-R`选项;
* 目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。
-### 实例
+### 实例
下面的第一行中是 cp 命令和具体的参数(-r 是“递归”, -u 是“更新”,-v 是“详细”)。接下来的三行显示被复制文件的信息,最后一行显示命令行提示符。这样,只拷贝新的文件到我的存储设备上,我就使用 cp 的“更新”和“详细”选项。
@@ -112,5 +112,10 @@ cp -a aaa ./bbb/
# 记住后面目录最好的'/' 带上 `-a` 参数
```
+复制到当前目录
+
+```shell
+cp aaa.conf ./
+# 将 aaa.conf 复制到当前目录
+```
-
diff --git a/command/cpio.md b/command/cpio.md
index 2321897d65d..c3acd0a3c96 100644
--- a/command/cpio.md
+++ b/command/cpio.md
@@ -7,13 +7,13 @@ cpio
**cpio命令** 主要是用来建立或者还原备份档的工具程序,cpio命令可以复制文件到归档包中,或者从归档包中复制文件。
-### 语法
+### 语法
```shell
cpio(选项)
```
-### 选项
+### 选项
```shell
-0或--null:接受新增列控制字符,通常配合find指令的“-print0”参数使用;
@@ -58,7 +58,7 @@ cpio(选项)
--version:显示版本信息。
```
-### 实例
+### 实例
**将`/etc`下的所有普通文件都备份到`/opt/etc.cpio`,使用以下命令:**
@@ -93,4 +93,3 @@ cpio –icduv < /opt/etc.cpio
通过上面的示例,可以看出,cpio无法直接读取文件,它需要每个文件或者目录的完整路径名才能识别读取,而find命令的输出刚好做到了这点,因此,cpio命令一般和find命令配合使用。其实,上面的示例我们已经看到了它们的组合用法。
-
\ No newline at end of file
diff --git a/command/createrepo.md b/command/createrepo.md
new file mode 100644
index 00000000000..979bf0cdccf
--- /dev/null
+++ b/command/createrepo.md
@@ -0,0 +1,147 @@
+createrepo
+===
+
+创建YUM仓库
+
+## 概要
+
+```shell
+createrepo [选项] <目录>
+```
+
+## 描述
+
+`createrepo`是一个程序,它从一组RPM创建一个RPM元数据存储库,即YUM仓库。
+
+## 选项
+
+```shell
+-u --baseurl
+# 指定Base URL的地址
+
+-o --outputdir
+# 指定元数据的输出位置
+
+-x --excludes
+# 指定在形成元数据时需要排除的包
+
+-i --pkglist
+# 指定一个文件,该文件内的包信息将被包含在即将生成的元数据中,格式为每个包信息独占一行,不含通配符、正则,以及范围表达式。
+
+-n --includepkg
+# 通过命令行指定要纳入本地库中的包信息,需要提供URL或本地路径。
+
+-q --quiet
+# 安静模式执行操作,不输出任何信息。
+
+-g --groupfile
+# 指定本地软件仓库的组划分,示例:createrepo -g comps.xml /path/to/rpms
+# 注意:组文件需要和rpm包放置于同一路径下。
+
+-v --verbose
+# 输出详细信息。
+
+-c --cachedir
+# 指定一个目录,用作存放软件仓库中软件包的校验和信息。
+# 当createrepo在未发生明显改变的相同仓库文件上持续多次运行时,指定cachedir会明显提高其性能。
+
+--basedir
+# Basedir为repodata中目录的路径,默认为当前工作目录。
+
+--update
+# 如果元数据已经存在,且软件仓库中只有部分软件发生了改变或增减,
+# 则可用update参数直接对原有元数据进行升级,效率比重新分析rpm包依赖并生成新的元数据要高很多。
+
+--skip-stat
+# 跳过--update上的stat()调用,假设如果文件名相同,则文件仍然相同(仅在您相当信任或容易受骗时使用此方法)。
+
+--update-md-path
+# 从这个路径使用现有的repodata来升级。
+
+-C --checkts
+# 不要生成回购元数据,如果它们的时间戳比rpm更新。如果您碰巧开启了该选项,则此选项将再次大幅减少处理时间一个未修改的回购,但它(目前)与——split选项互斥。注意:当包从repo中删除时,这个命令不会注意到。使用——update来处理这个。
+
+--split
+# 在拆分媒体模式下运行。与其传递单个目录,不如获取一组对应于媒体集中不同卷的目录。
+
+-p --pretty
+# 以整洁的格式输出xml文件。
+
+--version
+# 输出版本。
+
+-h --help
+# 显示帮助菜单。
+
+-d --database
+# 该选项指定使用SQLite来存储生成的元数据,默认项。
+
+--no-database
+# 不要在存储库中生成sqlite数据库。
+
+-S --skip-symlinks
+# 忽略包的符号链接
+
+-s --checksum
+# 选择repmed .xml中使用的校验和类型以及元数据中的包。默认值现在是“sha256”(如果python有hashlib)。旧的默认值是“sha”,它实际上是“sha1”,但是显式使用“sha1”在旧版本(3.0.x)的yum上不起作用,您需要指定“sha”。
+
+--profile
+# 输出基于时间的分析信息。
+
+--changelog-limit CHANGELOG_LIMIT
+# 只将每个rpm中的最后N个变更日志条目导入元数据
+
+--unique-md-filenames
+# 在元数据文件名中包含文件的校验和,有助于HTTP缓存(默认)
+
+--simple-md-filenames
+# 不要在元数据文件名中包含文件的校验和。
+
+--retain-old-md
+# 保留旧repodata的最新(按时间戳)N个副本(这样使用旧repodata .xml文件的客户端仍然可以访问它)。默认为0。
+
+--distro
+指定发行版标签。可以多次指定。可选语法,指定cpeid(http://cpe.mitre.org/)——distro=cpeid,distrotag
+
+--content
+# 指定关于存储库内容的关键字/标记。可以多次指定。
+
+--repo
+# 指定关于存储库本身的关键字/标签。可以多次指定。
+
+--revision
+# 存储库修订的任意字符串。
+
+--deltas
+# 告诉createrepo生成增量数据和增量元数据
+
+--oldpackagedirs PATH
+# 寻找更老的PKGS来对抗的路径。可以指定多次吗
+
+--num-deltas int
+# 要进行增量处理的旧版本的数量。默认为1
+
+--read-pkgs-list READ_PKGS_LIST
+# 使用——update将路径输出到PKGS实际读起来很有用
+
+--max-delta-rpm-size MAX_DELTA_RPM_SIZE
+# 要运行deltarpm的RPM的最大大小(以字节为单位)
+
+--workers WORKERS
+# 为读取RPMS而生成的工作线程数
+
+--compress-type
+# 指定要使用的压缩方法:compat(默认),xz(可能不可用),gz, bz2。
+
+```
+
+## 返回值
+
+返回状态为成功除非给出了非法选项或非法参数。
+
+## 例子
+
+```shell
+# 生成带有groups文件的存储库。注意groups文件应该和rpm包在同一个目录下(即/path/to/rpms/comps.xml)。
+createrepo -g comps.xml /path/to/rpms
+```
diff --git a/command/crontab.md b/command/crontab.md
index e906741b090..f691ff50ccd 100644
--- a/command/crontab.md
+++ b/command/crontab.md
@@ -7,13 +7,13 @@ crontab
**crontab命令** 被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
-### 语法
+### 语法
```shell
crontab(选项)(参数)
```
-### 选项
+### 选项
```shell
-e:编辑该用户的计时器设置;
@@ -22,11 +22,11 @@ crontab(选项)(参数)
-u<用户名称>:指定要设定计时器的用户名称。
```
-### 参数
+### 参数
crontab文件:指定包含待执行任务的crontab文件。
-### 知识扩展
+### 知识扩展
Linux下的任务调度分为两类: **系统任务调度** 和 **用户任务调度** 。
@@ -111,7 +111,7 @@ ntsysv
chkconfig –level 35 crond on
```
-### 实例
+### 实例
每1分钟执行一次command
@@ -176,13 +176,13 @@ chkconfig –level 35 crond on
每一小时重启smb
```shell
-* */1 * * * /etc/init.d/smb restart
+0 */1 * * * /etc/init.d/smb restart
```
晚上11点到早上7点之间,每隔一小时重启smb
```shell
-* 23-7/1 * * * /etc/init.d/smb restart
+0 23-7/1 * * * /etc/init.d/smb restart
```
每月的4号与每周一到周三的11点重启smb
@@ -204,4 +204,3 @@ chkconfig –level 35 crond on
```
-
\ No newline at end of file
diff --git a/command/csplit.md b/command/csplit.md
index 144e0a92e92..1b0f0c8abe4 100644
--- a/command/csplit.md
+++ b/command/csplit.md
@@ -7,13 +7,13 @@ csplit
**csplit命令** 用于将一个大文件分割成小的碎片,并且将分割后的每个碎片保存成一个文件。碎片文件的命名类似“xx00”,“xx01”。csplit命令是split的一个变体,split只能够根据文件大小或行数来分割,但csplit能够根据文件本身特点来分割文件。
-### 语法
+### 语法
```shell
csplit(选项)(参数)
```
-### 选项
+### 选项
```shell
-b<输出格式>或--suffix-format=<输出格式>:预设的输出格式其文件名称为xx00,xx01等,用户可以通过改变<输出格式>来改变输出的文件名;
@@ -24,12 +24,12 @@ csplit(选项)(参数)
-z或--elide-empty-files:删除长度为0 Byte文件。
```
-### 参数
+### 参数
* 文件:指定要分割的原文件;
* 模式:指定要分割文件时的匹配模式。
-### 实例
+### 实例
示例测试文件 server.log
@@ -73,4 +73,3 @@ rm server00.log #是删除第一个文件,因为分割后的的第一个文
```
-
\ No newline at end of file
diff --git a/command/cu.md b/command/cu.md
index 4524579dd25..75979699680 100644
--- a/command/cu.md
+++ b/command/cu.md
@@ -1,20 +1,20 @@
cu
===
-用于连接另一个系统主机。
+用于连接另一个系统主机
## 补充说明
**cu命令** 用于连接另一个系统主机。cu(call up)指令可连接另一台主机,并采用类似拨号终端机的接口工作,也可执行简易的文件传输作业。
-### 语法
+### 语法
```shell
cu [dehnotv][-a<通信端口>][-c<电话号码>][-E<脱离字符>][-I<设置文件>][-l<外围设备代号>]
[-s<连线速率>][-x<排错模式>][-z<系统主机>][--help][-nostop][--parity=none][<系统主机>/<电话号码>]
```
-### 选项
+### 选项
```shell
-a<通信端口>或-p<通信端口>或--port<通信端口> 使用指定的通信端口进行连线。
@@ -48,4 +48,4 @@ cu -s 38400 9=12015551234
-
+
diff --git a/command/cupsdisable.md b/command/cupsdisable.md
index 2ea2e097a59..92dd678b395 100644
--- a/command/cupsdisable.md
+++ b/command/cupsdisable.md
@@ -7,13 +7,13 @@ cupsdisable
**cupsdisable命令** 用于停止指定的打印机。
-### 语法
+### 语法
```shell
cupsdisable(选项)(参数)
```
-### 选项
+### 选项
```shell
-E:当连接到服务器时强制使用加密;
@@ -24,9 +24,8 @@ cupsdisable(选项)(参数)
-r:停止打印机的原因。
```
-### 参数
+### 参数
目标:指定目标打印机。
-
\ No newline at end of file
diff --git a/command/cupsenable.md b/command/cupsenable.md
index d1a147a6c8d..2e6aaee0a31 100644
--- a/command/cupsenable.md
+++ b/command/cupsenable.md
@@ -7,13 +7,13 @@ cupsenable
**cupsenable命令** 用于启动指定的打印机。
-### 语法
+### 语法
```shell
cupsenable(选项)(参数)
```
-### 选项
+### 选项
```shell
-E:当连接到服务器时强制使用加密;
@@ -22,9 +22,8 @@ cupsenable(选项)(参数)
-h:指定连接的服务器名和端口号;
```
-### 参数
+### 参数
目标:指定目标打印机。
-
\ No newline at end of file
diff --git a/command/curl.md b/command/curl.md
index 8807e0b1d81..2215d6af058 100644
--- a/command/curl.md
+++ b/command/curl.md
@@ -5,7 +5,7 @@ curl
## 补充说明
-**curl命令** 是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。作为一款强力工具,curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化,curl可以祝一臂之力。
+**curl命令** 是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。作为一款强力工具,curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化,curl可以助一臂之力。
### 语法
@@ -15,113 +15,110 @@ curl(选项)(参数)
### 选项
-
-
-
-| -a/--append | 上传文件时,附加到目标文件 |
-| -A/--user-agent | 设置用户代理发送给服务器 |
-| -anyauth | 可以使用“任何”身份验证方法 |
-| -b/--cookie | cookie字符串或文件读取位置 |
-| --basic | 使用HTTP基本验证 |
-| -B/--use-ascii | 使用ASCII /文本传输 |
-| -c/--cookie-jar | 操作结束后把cookie写入到这个文件中 |
-| -C/--continue-at | 断点续传 |
-| -d/--data | HTTP POST方式传送数据 |
-| --data-ascii | 以ascii的方式post数据 |
-| --data-binary | 以二进制的方式post数据 |
-| --negotiate | 使用HTTP身份验证 |
-| --digest | 使用数字身份验证 |
-| --disable-eprt | 禁止使用EPRT或LPRT |
-| --disable-epsv | 禁止使用EPSV |
-| -D/--dump-header | 把header信息写入到该文件中 |
-| --egd-file | 为随机数据(SSL)设置EGD socket路径 |
-| --tcp-nodelay | 使用TCP_NODELAY选项 |
-| -e/--referer | 来源网址 |
-| -E/--cert | 客户端证书文件和密码 (SSL) |
-| --cert-type | 证书文件类型 (DER/PEM/ENG) (SSL) |
-| --key | 私钥文件名 (SSL) |
-| --key-type | 私钥文件类型 (DER/PEM/ENG) (SSL) |
-| --pass | 私钥密码 (SSL) |
-| --engine | 加密引擎使用 (SSL). "--engine list" for list |
-| --cacert | CA证书 (SSL) |
-| --capath | CA目录 (made using c_rehash) to verify peer against (SSL) |
- --ciphers
| SSL密码 |
-| --compressed | 要求返回是压缩的形势 (using deflate or gzip) |
-| --connect-timeout | 设置最大请求时间 |
-| --create-dirs | 建立本地目录的目录层次结构 |
-| --crlf | 上传是把LF转变成CRLF |
-| -f/--fail | 连接失败时不显示http错误 |
-| --ftp-create-dirs | 如果远程目录不存在,创建远程目录 |
-| --ftp-method [multicwd/nocwd/singlecwd] | 控制CWD的使用 |
-| --ftp-pasv | 使用 PASV/EPSV 代替端口 |
-| --ftp-skip-pasv-ip | 使用PASV的时候,忽略该IP地址 |
-| --ftp-ssl | 尝试用 SSL/TLS 来进行ftp数据传输 |
-| --ftp-ssl-reqd | 要求用 SSL/TLS 来进行ftp数据传输 |
-| -F/--form | 模拟http表单提交数据 |
-| --form-string | 模拟http表单提交数据 |
-| -g/--globoff | 禁用网址序列和范围使用{}和[] |
-| -G/--get | 以get的方式来发送数据 |
-| -H/--header | 自定义头信息传递给服务器 |
-| --ignore-content-length | 忽略的HTTP头信息的长度 |
-| -i/--include | 输出时包括protocol头信息 |
-| -I/--head | 只显示请求头信息 |
-| -j/--junk-session-cookies | 读取文件进忽略session cookie |
-| --interface | 使用指定网络接口/地址 |
-| --krb4 | 使用指定安全级别的krb4 |
-| -k/--insecure | 允许不使用证书到SSL站点 |
-| -K/--config | 指定的配置文件读取 |
-| -l/--list-only | 列出ftp目录下的文件名称 |
-| --limit-rate | 设置传输速度 |
-| --local-port | 强制使用本地端口号 |
-| -m/--max-time | 设置最大传输时间 |
-| --max-redirs | 设置最大读取的目录数 |
-| --max-filesize | 设置最大下载的文件总量 |
-| -M/--manual | 显示全手动 |
-| -n/--netrc | 从netrc文件中读取用户名和密码 |
-| --netrc-optional | 使用 .netrc 或者 URL来覆盖-n |
-| --ntlm | 使用 HTTP NTLM 身份验证 |
-| -N/--no-buffer | 禁用缓冲输出 |
-| -o/--output | 把输出写到该文件中 |
-| -O/--remote-name | 把输出写到该文件中,保留远程文件的文件名 |
-| -p/--proxytunnel | 使用HTTP代理 |
-| --proxy-anyauth | 选择任一代理身份验证方法 |
-| --proxy-basic | 在代理上使用基本身份验证 |
-| --proxy-digest | 在代理上使用数字身份验证 |
-| --proxy-ntlm | 在代理上使用ntlm身份验证 |
-| -P/--ftp-port | 使用端口地址,而不是使用PASV |
-| -q | 作为第一个参数,关闭 .curlrc |
-| -Q/--quote | 文件传输前,发送命令到服务器 |
-| -r/--range | 检索来自HTTP/1.1或FTP服务器字节范围 |
-| --range-file | 读取(SSL)的随机文件 |
-| -R/--remote-time | 在本地生成文件时,保留远程文件时间 |
-| --retry | 传输出现问题时,重试的次数 |
-| --retry-delay | 传输出现问题时,设置重试间隔时间 |
-| --retry-max-time | 传输出现问题时,设置最大重试时间 |
-| -s/--silent | 静默模式。不输出任何东西 |
-| -S/--show-error | 显示错误 |
-| --socks4 | 用socks4代理给定主机和端口 |
-| --socks5 | 用socks5代理给定主机和端口 |
-| --stderr | |
-| -t/--telnet-option | Telnet选项设置 |
-| --trace | 对指定文件进行debug |
-| --trace-ascii | Like --跟踪但没有hex输出 |
-| --trace-time | 跟踪/详细输出时,添加时间戳 |
-| -T/--upload-file | 上传文件 |
-| --url | Spet URL to work with |
-| -u/--user | 设置服务器的用户和密码 |
-| -U/--proxy-user | 设置代理用户名和密码 |
-| -w/--write-out [format] | 什么输出完成后 |
-| -x/--proxy | 在给定的端口上使用HTTP代理 |
-| -X/--request | 指定什么命令 |
-| -y/--speed-time | 放弃限速所要的时间,默认为30 |
-| -Y/--speed-limit | 停止传输速度的限制,速度时间 |
-
-
-
+```bash
+-a --append # 上传文件时,附加到目标文件
+-A --user-agent # 设置用户代理发送给服务器
+-anyauth # 可以使用“任何”身份验证方法
+-b --cookie # cookie字符串或文件读取位置
+ --basic # 使用HTTP基本验证
+-B --use-ascii # 使用ASCII /文本传输
+-c --cookie-jar # 操作结束后把cookie写入到这个文件中
+-C --continue-at # 断点续传
+-d --data # HTTP POST方式传送数据
+ --data-ascii # 以ascii的方式post数据
+ --data-binary # 以二进制的方式post数据
+ --negotiate # 使用HTTP身份验证
+ --digest # 使用数字身份验证
+ --disable-eprt # 禁止使用EPRT或LPRT
+ --disable-epsv # 禁止使用EPSV
+-D --dump-header # 把header信息写入到该文件中
+ --egd-file # 为随机数据(SSL)设置EGD socket路径
+ --tcp-nodelay # 使用TCP\_NODELAY选项
+-e --referer # 来源网址
+-E --cert # 客户端证书文件和密码 (SSL)
+ --cert-type # 证书文件类型 (DER/PEM/ENG) (SSL)
+ --key # 私钥文件名 (SSL)
+ --key-type # 私钥文件类型 (DER/PEM/ENG) (SSL)
+ --pass # 私钥密码 (SSL)
+ --engine # 加密引擎使用 (SSL). "--engine list" for list
+ --cacert # CA证书 (SSL)
+ --capath # CA目录 (made using c\_rehash) to verify peer against (SSL)
+ --ciphers # SSL密码
+ --compressed # 要求返回是压缩的形势 (using deflate or gzip)
+ --connect-timeout # 设置最大请求时间
+ --create-dirs # 建立本地目录的目录层次结构
+ --crlf # 上传是把LF转变成CRLF
+-f --fail # 连接失败时不显示http错误
+ --ftp-create-dirs # 如果远程目录不存在,创建远程目录
+ --ftp-method \[multicwd/nocwd/singlecwd] # 控制CWD的使用
+ --ftp-pasv # 使用 PASV/EPSV 代替端口
+ --ftp-skip-pasv-ip # 使用PASV的时候,忽略该IP地址
+ --ftp-ssl # 尝试用 SSL/TLS 来进行ftp数据传输
+ --ftp-ssl-reqd # 要求用 SSL/TLS 来进行ftp数据传输
+-F --form # 模拟http表单提交数据
+ --form-string # 模拟http表单提交数据
+-g --globoff # 禁用网址序列和范围使用{}和\[]
+-G --get # 以get的方式来发送数据
+-H --header # 自定义头信息传递给服务器
+ --ignore-content-length # 忽略的HTTP头信息的长度
+-i --include # 输出时包括protocol头信息
+-I --head # 只显示请求头信息
+-j --junk-session-cookies # 读取文件进忽略session cookie
+ --interface # 使用指定网络接口/地址
+ --krb4 # 使用指定安全级别的krb4
+-k --insecure # 允许不使用证书到SSL站点
+-K --config # 指定的配置文件读取
+-l --list-only # 列出ftp目录下的文件名称
+ --limit-rate # 设置传输速度
+ --local-port # 强制使用本地端口号
+-m --max-time # 设置最大传输时间
+ --max-redirs # 设置最大读取的目录数
+ --max-filesize # 设置最大下载的文件总量
+-M --manual # 显示全手动
+-n --netrc # 从netrc文件中读取用户名和密码
+ --netrc-optional # 使用 .netrc 或者 URL来覆盖-n
+ --ntlm # 使用 HTTP NTLM 身份验证
+-N --no-buffer # 禁用缓冲输出
+-o --output # 把输出写到该文件中
+-O --remote-name # 把输出写到该文件中,保留远程文件的文件名
+-p --proxytunnel # 使用HTTP代理
+ --proxy-anyauth # 选择任一代理身份验证方法
+ --proxy-basic # 在代理上使用基本身份验证
+ --proxy-digest # 在代理上使用数字身份验证
+ --proxy-ntlm # 在代理上使用ntlm身份验证
+-P --ftp-port # 使用端口地址,而不是使用PASV
+-q # 作为第一个参数,关闭 .curlrc
+-Q --quote # 文件传输前,发送命令到服务器
+-r --range # 检索来自HTTP/1.1或FTP服务器字节范围
+--range-file # 读取(SSL)的随机文件
+-R --remote-time # 在本地生成文件时,保留远程文件时间
+ --retry # 传输出现问题时,重试的次数
+ --retry-delay # 传输出现问题时,设置重试间隔时间
+ --retry-max-time # 传输出现问题时,设置最大重试时间
+-s --silent # 静默模式。不输出任何东西
+-S --show-error # 显示错误
+ --socks4 # 用socks4代理给定主机和端口
+ --socks5 # 用socks5代理给定主机和端口
+ --stderr #
+-t --telnet-option # Telnet选项设置
+ --trace # 对指定文件进行debug
+ --trace-ascii # Like --跟踪但没有hex输出
+ --trace-time # 跟踪/详细输出时,添加时间戳
+-T --upload-file # 上传文件
+ --url # 要使用的 URL
+-u --user # 设置服务器的用户和密码
+-U --proxy-user # 设置代理用户名和密码
+-w --write-out \[format] # 什么输出完成后
+-x --proxy # 在给定的端口上使用HTTP代理
+-X --request # 指定什么命令
+-y --speed-time # 放弃限速所要的时间,默认为30
+-Y --speed-limit # 停止传输速度的限制,速度时间
+
+```
### 实例
-**文件下载**
+#### **文件下载**
curl命令可以用来执行下载、发送各种HTTP请求,指定HTTP头部等操作。如果系统没有curl可以使用`yum install curl`安装,也可以下载安装。curl是将下载文件输出到stdout,将进度信息输出到stderr,不显示进度信息使用`--silent`选项。
@@ -134,54 +131,55 @@ curl URL --silent
使用选项`-O`将下载的数据写入到文件,必须使用文件的绝对地址:
```shell
-curl http://wangchujiang.com/text.iso --silent -O
+curl http://example.com/text.iso --silent -O
```
选项`-o`将下载数据写入到指定名称的文件中,并使用`--progress`显示进度条:
```shell
-curl http://wangchujiang.com/test.iso -o filename.iso --progress
+curl http://example.com/test.iso -o filename.iso --progress
######################################### 100.0%
```
-**断点续传**
+#### **不输出错误和进度信息**
-curl能够从特定的文件偏移处继续下载,它可以通过指定一个便宜量来下载部分文件:
+`-s` 参数将不输出错误和进度信息。
```shell
-curl URL/File -C 偏移量
-
-#偏移量是以字节为单位的整数,如果让curl自动推断出正确的续传位置使用-C -:
-curl -C -URL
+curl -s https://www.example.com
+# 上面命令一旦发生错误,不会显示错误信息。不发生错误的话,会正常显示运行结果。
```
-**使用curl设置参照页字符串**
-
-参照页是位于HTTP头部中的一个字符串,用来表示用户是从哪个页面到达当前页面的,如果用户点击网页A中的某个连接,那么用户就会跳转到B网页,网页B头部的参照页字符串就包含网页A的URL。
-
-使用`--referer`选项指定参照页字符串:
+如果想让 curl 不产生任何输出,可以使用下面的命令。
```shell
-curl --referer http://www.google.com http://wangchujiang.com
+curl -s -o /dev/null https://example.com
```
-**用curl设置cookies**
+#### **断点续传**
-使用`--cookie "COKKIES"`选项来指定cookie,多个cookie使用分号分隔:
+curl能够从特定的文件偏移处继续下载,它可以通过指定一个偏移量来下载部分文件:
```shell
-curl http://wangchujiang.com --cookie "user=root;pass=123456"
+curl URL/File -C 偏移量
+
+#偏移量是以字节为单位的整数,如果让curl自动推断出正确的续传位置使用-C -:
+curl -C -URL
```
-将cookie另存为一个文件,使用`--cookie-jar`选项:
+#### **使用curl设置参照页字符串**
+
+参照页是位于HTTP头部中的一个字符串,用来表示用户是从哪个页面到达当前页面的,如果用户点击网页A中的某个连接,那么用户就会跳转到B网页,网页B头部的参照页字符串就包含网页A的URL。
+
+使用 `--referer` 选项指定参照页字符串:
```shell
-curl URL --cookie-jar cookie_file
+curl --referer http://www.example.com http://example.com
```
-**用curl设置用户代理字符串**
+#### **用curl设置用户代理字符串**
-有些网站访问会提示只能使用IE浏览器来访问,这是因为这些网站设置了检查用户代理,可以使用curl把用户代理设置为IE,这样就可以访问了。使用`--user-agent`或者`-A`选项:
+有些网站访问会提示只能使用IE浏览器来访问,这是因为这些网站设置了检查用户代理,可以使用curl把用户代理设置为IE,这样就可以访问了。使用 `--user-agent` 或者 `-A` 选项:
```shell
curl URL --user-agent "Mozilla/5.0"
@@ -191,10 +189,10 @@ curl URL -A "Mozilla/5.0"
其他HTTP头部信息也可以使用curl来发送,使用`-H`"头部信息" 传递多个头部信息,例如:
```shell
-curl -H "Host:wangchujiang.com" -H "accept-language:zh-cn" URL
+curl -H "Host:example.com" -H "accept-language:zh-cn" URL
```
-**curl的带宽控制和下载配额**
+#### **curl的带宽控制和下载配额**
使用`--limit-rate`限制curl的下载速度:
@@ -212,55 +210,299 @@ curl URL --max-filesize bytes
如果文件大小超出限制,命令则返回一个非0退出码,如果命令正常则返回0。
-**用curl进行认证**
+```shell
+curl --limit-rate 200k https://example.com
+# 上面命令将带宽限制在每秒 200K 字节。
+```
+
+#### **用curl进行认证**
使用curl选项 -u 可以完成HTTP或者FTP的认证,可以指定密码,也可以不指定密码在后续操作中输入密码:
```shell
-curl -u user:pwd http://wangchujiang.com
-curl -u user http://wangchujiang.com
+curl -u user:pwd http://example.com
+curl -u user http://example.com
```
-**只打印响应头部信息**
+#### **只打印响应头部信息**
通过`-I`或者`-head`可以只打印出HTTP头部信息:
```shell
-[root@localhost text]# curl -I http://wangchujiang.com
+[root@localhost text]# curl -I http://example.com
HTTP/1.1 200 OK
-Server: nginx/1.2.5
-date: Mon, 10 Dec 2012 09:24:34 GMT
+Content-Encoding: gzip
+Accept-Ranges: bytes
+Age: 275552
+Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
-Connection: keep-alive
-Vary: Accept-Encoding
-X-Pingback: http://wangchujiang.com/xmlrpc.php
+Date: Mon, 24 Apr 2023 14:39:36 GMT
+Etag: "3147526947+gzip"
+Expires: Mon, 01 May 2023 14:39:36 GMT
+Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
+Server: ECS (sec/96EE)
+X-Cache: HIT
+Content-Length: 648
+```
+
+#### **GET 请求**
+
+```shell
+curl "http://www.example.com" # 如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地
+curl -i "http://www.example.com" # 显示全部信息
+curl -l "http://www.example.com" # 显示页面内容
+curl -v "http://www.example.com" # 显示get请求全过程解析
+```
+
+#### **POST 请求**
+
+```shell
+$ curl -d "param1=value1¶m2=value2" "http://www.example.com/login"
+
+$ curl -d'login=emma&password=123' -X POST https://example.com/login
+# 或者
+$ curl -d 'login=emma' -d 'password=123' -X POST https://example.com/login
+```
+
+`--data-urlencode` 参数等同于 `-d`,发送 `POST` 请求的数据体,区别在于会自动将发送的数据进行 `URL` 编码。
+
+```shell
+curl --data-urlencode 'comment=hello world' https://example.com/login
+# 上面代码中,发送的数据hello world之间有一个空格,需要进行 URL 编码。
+```
+
+#### **发送本地文件中的文字**
+
+```shell
+curl -d '@data.txt' https://example.com/upload
+# 读取data.txt文件的内容,作为数据体向服务器发送。
+```
+
+#### **JSON 格式的 POST 请求**
+
+```shell
+curl -l -H "Content-type: application/json" -X POST -d '{"phone":"13888888888","password":"test"}' http://example.com/apis/users.json
+```
+
+#### **向服务器发送 Cookie**
+
+使用`--cookie "COKKIES"`选项来指定cookie,多个cookie使用分号分隔:
+
+```shell
+curl http://example.com --cookie "user=root;pass=123456"
+```
+
+将cookie另存为一个文件,使用`--cookie-jar`选项:
+
+```shell
+curl URL --cookie-jar cookie_file
+```
+
+`-b` 参数用来向服务器发送 Cookie。
+
+```shell
+curl -b 'foo=bar' https://example.com
+# 上面命令会生成一个标头Cookie: foo=bar,向服务器发送一个名为foo、值为bar的 Cookie。
+```
+
+```shell
+curl -b 'foo1=bar' -b 'foo2=baz' https://example.com
+# 上面命令发送两个 Cookie。
+
+```shell
+curl -b cookies.txt https://www.example.com
+# 上面命令读取本地文件 cookies.txt,里面是服务器设置的 Cookie(参见-c参数),将其发送到服务器。
```
-**get请求**
+#### **Cookie 写入一个文件**
```shell
-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请求全过程解析
+curl -c cookies.txt https://www.example.com
+# 上面命令将服务器的 HTTP 回应所设置 Cookie 写入文本文件cookies.txt。
```
-**post请求**
+#### **请求的来源**
+
+`-e` 参数用来设置 `HTTP` 的标头 `Referer`,表示请求的来源。
+
+```shell
+curl -e 'https://example.com?q=example' https://www.example.com
+# 上面命令将Referer标头设为 https://example.com?q=example。
+```
+
+`-H` 参数可以通过直接添加标头 `Referer`,达到同样效果。
+
+```shell
+curl -H 'Referer: https://example.com?q=example' https://www.example.com
+```
+
+#### **上传二进制文件**
+
+`-F` 参数用来向服务器上传二进制文件。
+
+```shell
+curl -F 'file=@photo.png' https://example.com/profile
+# 上面命令会给 HTTP 请求加上标头 Content-Type: multipart/form-data ,然后将文件photo.png作为file字段上传。
+```
+
+`-F` 参数可以指定 `MIME` 类型。
+
+```shell
+curl -F 'file=@photo.png;type=image/png' https://example.com/profile
+# 上面命令指定 MIME 类型为image/png,否则 curl 会把 MIME 类型设为 application/octet-stream。
+```
+
+`-F` 参数也可以指定文件名。
+
+```shell
+curl -F 'file=@photo.png;filename=me.png' https://example.com/profile
+# 上面命令中,原始文件名为photo.png,但是服务器接收到的文件名为me.png。
+```
+
+#### **设置请求头**
+
+`-H` 参数添加 `HTTP` 请求的标头。
+
+```shell
+curl -H 'Accept-Language: en-US' https://example.com
+# 上面命令添加 HTTP 标头 Accept-Language: en-US。
+```
+
+```shell
+curl -H 'Accept-Language: en-US' -H 'Secret-Message: xyzzy' https://example.com
+# 上面命令添加两个 HTTP 标头。
+```
+
+```shell
+curl -d '{"login": "emma", "pass": "123"}' -H 'Content-Type: application/json' https://example.com/login
+# 上面命令添加 HTTP 请求的标头是 Content-Type: application/json,然后用 -d 参数发送 JSON 数据。
+```
+
+#### **跳过 SSL 检测**
+
+```shell
+curl -k https://www.example.com
+# 上面命令不会检查服务器的 SSL 证书是否正确。
+```
+
+#### **请求跟随服务器的重定向**
+
+`-L` 参数会让 `HTTP` 请求跟随服务器的重定向。`curl` 默认不跟随重定向。
```shell
-curl -d "param1=value1¶m2=value2" "http://www.wangchujiang.com"
+curl -L -d 'tweet=hi' https://api.example.com/tweet
+```
+
+值得注意的是,这种重定向方式不适用于在返回的 HTML 中的重定向,比如这种是不被 curl 识别的重定向(这部分内容由 `curl -v -L ` 生成)
+
+```curl
+* Connected to example.com (*.*.*.*) port 80 (#0)
+> GET / HTTP/1.1
+> Host: example.com
+> User-Agent: curl/8.0.1
+> Accept: */*
+>
+< HTTP/1.1 200 OK
+....
+< Content-Type: text/html
+<
+
+
+
+
```
-**json格式的post请求**
+#### **调试参数**
+
+`-v` 参数输出通信的整个过程,用于调试。
+
+```shell
+curl -v https://www.example.com
+# --trace参数也可以用于调试,还会输出原始的二进制数据。
+```
```shell
-curl -l -H "Content-type: application/json" -X POST -d '{"phone":"13521389587","password":"test"}' http://wangchujiang.com/apis/users.json
+curl --trace - https://www.example.com
```
-**获取本机外网ip**
+#### **获取本机外网 IP**
```shell
curl ipecho.net/plain
```
-
+#### **使用 curl 测试网站加载速度**
+
+命令有一个鲜为人知的选项,`-w`,该选项在请求结束之后打印本次请求的统计数据到标准输出。
+
+首先,我们定义控制打印行为的格式化字符串。新建文本文件 `fmt.txt`,并填入下面的内容:
+
+```ruby
+\n
+Response Time for: %{url_effective}\n\n
+DNS Lookup Time:\t\t%{time_namelookup}s\n
+Redirection Time:\t\t%{time_redirect}s\n
+Connection Time:\t\t%{time_connect}s\n
+App Connection Time:\t\t%{time_appconnect}s\n
+Pre-transfer Time:\t\t%{time_pretransfer}s\n
+Start-transfer Time:\t\t%{time_starttransfer}s\n\n
+Total Time:\t\t\t%{time_total}s\n
+```
+
+curl 提供了很多置换变量,可以在格式化字符串中通过 `%{var}` 的形式使用。完整的变量列表可以在 `curl` 的 `manpage` 中查看。简单介绍一下我们使用的这几个变量:
+
+- `url_effective`: 执行完地址重定向之后的最终 URL;
+- `time_namelookup`: 从请求开始至完成名称解析所花的时间,单位为秒,下同;
+- `time_redirect`: 执行所有重定向所花的时间;
+- `time_connect`: 从请求开始至建立 TCP 连接所花的时间;
+- `time_appconnect`: 从请求开始至完成 SSL/SSH 握手所花的时间;
+- `time_pretransfer`: 从请求开始至服务器准备传送文件所花的时间,包含了传送协商时间;
+- `time_starttransfer`: 从请求开始至服务器准备传送第一个字节所花的时间;
+- `time_total`: 完整耗时。
+
+然后执行请求,通过 @filename 指定保存了格式化字符串的文件:
+
+```shell
+curl -L -s -w @fmt.txt -o /dev/null http://www.example.com
+```
+
+输出:
+
+```c
+Response Time for: http://www.google.co.jp/?gfe_rd=cr&dcr=0&ei=cjIaWpTkHeiQ8QfnxYzoBA
+
+DNS Lookup Time: 0.000038s
+Redirection Time: 0.207271s
+Connection Time: 0.000039s
+App Connection Time: 0.000039s
+Pre-transfer Time: 0.000067s
+Start-transfer Time: 0.260115s
+
+Total Time: 0.467691s
+```
+
+#### **要求返回是压缩的状态**
+
+```shell
+$ curl --compressed -o- -L https://yarnpkg.com/install.sh | bash
+ % Total % Received % Xferd Average Speed Time Time Time Current
+ Dload Upload Total Spent Left Speed
+100 54 100 54 0 0 42 0 0:00:01 0:00:01 --:--:-- 42
+100 2341 100 2341 0 0 1202 0 0:00:01 0:00:01 --:--:-- 9289
+Installing Yarn!
+> Downloading tarball...
+
+[1/2]: https://yarnpkg.com/latest.tar.gz --> /var/folders/j7/3xly5sk567s65ny5dnr__3b80000gn/T/yarn.tar.gz.XXXXXXXXXX.9hJsBsrA
+ % Total % Received % Xferd Average Speed Time Time Time Current
+ Dload Upload Total Spent Left Speed
+100 57 100 57 0 0 72 0 --:--:-- --:--:-- --:--:-- 72
+100 93 100 93 0 0 63 0 0:00:01 0:00:01 --:--:-- 63
+100 643 100 643 0 0 248 0 0:00:02 0:00:02 --:--:-- 707
+100 1215k 100 1215k 0 0 153k 0 0:00:07 0:00:07 --:--:-- 305k
+
+[2/2]: https://yarnpkg.com/latest.tar.gz.asc --> /var/folders/j7/3xly5sk567s65ny5dnr__3b80000gn/T/yarn.tar.gz.XXXXXXXXXX.9hJsBsrA.asc
+100 61 100 61 0 0 356 0 --:--:-- --:--:-- --:--:-- 356
+100 97 100 97 0 0 325 0 --:--:-- --:--:-- --:--:-- 325
+100 647 100 647 0 0 1283 0 --:--:-- --:--:-- --:--:-- 1283
+100 832 100 832 0 0 1107 0 --:--:-- --:--:-- --:--:-- 812k
+```
diff --git a/command/cut.md b/command/cut.md
index 40674dea51c..4112fb824e6 100644
--- a/command/cut.md
+++ b/command/cut.md
@@ -157,4 +157,17 @@ efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
```
+打印最后5个字符:
+
+遗憾的是, `cut`并没有提供最后字符的支持. 不过我们可以通过字符串反转来实现.
+
+```shell
+[root@localhost text]# cat test.txt| rev | cut -c -5 | rev
+vwxyz
+vwxyz
+vwxyz
+vwxyz
+vwxyz
+```
+
diff --git a/command/date.md b/command/date.md
index 27b7e5d9b36..7d0dae3945b 100644
--- a/command/date.md
+++ b/command/date.md
@@ -3,154 +3,181 @@ date
显示或设置系统时间与日期
-## 补充说明
+## 概要
-**date命令** 是显示或设置系统时间与日期。
+```shell
+date [OPTION]... [+FORMAT]
+date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
+```
-很多shell脚本里面需要打印不同格式的时间或日期,以及要根据时间和日期执行操作。延时通常用于脚本执行过程中提供一段等待的时间。日期可以以多种格式去打印,也可以使用命令设置固定的格式。在类UNIX系统中,日期被存储为一个整数,其大小为自世界标准时间(UTC)1970年1月1日0时0分0秒起流逝的秒数。
+## 主要用途
-### 语法
+- 转换时间到选定的格式,默认为当前。
+- 设置系统时间。
-```shell
-date(选项)(参数)
-```
+## 参数
-### 选项
+format:输出的时间格式。
```shell
--d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号;
--s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号;
--u:显示GMT;
---help:在线帮助;
---version:显示版本信息。
+format可用的转义序列如下:
+
+%% 百分号
+%a 当地缩写的工作日名称(例如,Sun)
+%A 当地完整的工作日名称(例如,Sunday)
+%b 当地缩写的月份名称(例如,Jan)
+%B 当地完整的月份名称(例如,January)
+%c 当地的日期和时间(例如,Thu Mar 3 23:05:25 2005)
+%C 世纪,和%Y类似,但是省略后两位(例如,20)
+%d 一月中的一天(例如,01)
+%D 日期,等价于%m/%d/%y
+%e 一月中的一天,格式使用空格填充,等价于%_d
+%F 完整的日期;等价于%+4Y-%m-%d
+%g ISO标准计数周的年份的最后两位数字
+%G ISO标准计数周的年份,通常只对%V有用
+%h 等价于%b
+%H 小时,范围(00..23)
+%I 小时,范围(00..23)
+%j 一年中的一天,范围(001..366)
+%k 小时,使用空格填充,范围(0..23),等价于%_H
+%l 小时,使用空格填充,范围(1..12),等价于%_I
+%m 月,范围(01..12)
+%M 分钟,范围(00..59)
+%n 换行符
+%N 纳秒,范围(000000000..000000000)
+%p 用于表示当地的AM或PM,如果未知则为空白
+%P 类似于%p,但用小写表示
+%q 季度,范围(1..4)
+%r 当地以12小时表示的时钟时间(例如,11:11:04 PM)
+%R 24小时每分钟;等价于%H:%M
+%s 自协调世界时1970年01月01日00时00分以来的秒数
+%S 秒数,范围(00..60)
+%t 水平制表符
+%T 时间;等价于%H:%M:%S
+%u 一周中的一天(1..7),1代表星期一
+%U 一年中的第几周,周日作为一周的起始(00..53)
+%V ISO标准计数周,该方法将周一作为一周的起始(01..53)
+%w 一周中的一天(0..6),0代表星期天
+%W 一年中的第几周,周一作为一周的起始(00..53)
+%x 当地的日期表示(例如,12/31/99)
+%X 当地的时间表示(例如,23:13:48)
+%y 年份后两位数字,范围(00..99)
+%Y 年份
+%z +hhmm格式的数值化时区格式(例如,-0400)
+%:z +hh:mm格式的数值化时区格式(例如,-04:00)
+%::z +hh:mm:ss格式的数值化时区格式(例如,-04:00:00)
+%:::z 数值化时区格式,相比上一个格式增加':'以显示必要的精度(例如,-04,+05:30)
+%Z 时区缩写(如EDT)
+
+默认情况下,日期用零填充数字字段;以下可选的符号可以跟在'%'后面:
+
+- (连字符) 不要填充相应的字段。
+_ (下划线) 使用空格填充相应的字段。
+0 (数字0) 使用数字0填充相应的字段。
++ 用数字0填充,未来年份大于4位数字则在前面加上'+'号。
+^ 允许的情况下使用大写。
+# 允许的情况下将默认的大写转换为小写,默认的小写转换为大写。
+
+在任何标志之后都有一个可选的字段宽度,如小数;然后是一个可选的修饰符,在可用的情况下,使用E来使用当地语言环境的替代表示,
+使用O来使用当地语言环境的替代数字符号。
```
-### 参数
-
-<+时间日期格式>:指定显示时使用的日期时间格式。
-
-### 日期格式字符串列表
+## 选项
```shell
-%H # 小时,24小时制(00~23)
-%I # 小时,12小时制(01~12)
-%k # 小时,24小时制(0~23)
-%l # 小时,12小时制(1~12)
-%M # 分(00~59)
-%p # 显示出上午或下午
-%r # 时间,12小时制
-%s # 从1970年1月1日0点到目前经历的秒数
-%S # 秒(00~59)
-%T # 时间(24小时制)(hh:mm:ss)
-%X # 显示时间的格式(%H时%M分%S秒)
-%Z # 按字母表排序的时区缩写
-%a # 星期名缩写
-%A # 星期名全称
-%b # 月名缩写
-%B # 月名全称
-%c # 日期和时间
-%d # 按月计的日期(01~31)
-%D # 日期(mm/dd/yy)
-%h # 和%b选项相同
-%j # 一年的第几天(001~366)
-%m # 月份(01~12)
-%w # 一个星期的第几天(0代表星期天)
-%W # 一年的第几个星期(00~53,星期一为第一天)
-%x # 显示日期的格式(mm/dd/yy)
-%y # 年份的最后两个数字(1999则是99)
-%Y # 年份(比如1970、1996等)
-%C # 世纪,通常为省略当前年份的后两位数字
-%U # 一年中的第几周,以周日为每星期第一天
-%e # 按月计的日期,添加空格,等于%_d
+长选项与短选项等价
+
+-d, --date=STRING 解析字符串并按照指定格式输出,字符串不能是'now'。
+--debug 注释已解析的日期,并将有疑问的用法发送到标准错误。
+-f, --file=DATEFILE 类似于--date; 一次从DATEFILE处理一行。
+-I[FMT], --iso-8601[=FMT] 按照ISO 8601格式输出,FMT可以为'date'(默认),'hours','minutes','seconds','ns'。例如:2006-08-14T02:34:56-06:00
+-R, --rfc-email 按照RFC 5322格式输出,例如: Mon, 14 Aug 2006 02:34:56 -0600
+--rfc-3339=FMT 按照RFC 3339格式输出,FMT可以为'date', 'seconds','ns'中的一个,例如:2006-08-14 02:34:56-06:00
+-r, --reference=FILE 显示文件的上次修改时间。
+-s, --set=STRING 根据字符串设置系统时间。
+-u, --utc, --universal 显示或设置世界协调时(UTC)。
+--help 显示帮助信息并退出。
+--version 显示版本信息并退出。
```
-### 实例
+## 返回值
+
+返回状态为成功除非给出了非法选项或非法参数。
-格式化输出:
+## 例子
```shell
+# 格式化输出:
date +"%Y-%m-%d"
2009-12-07
-```
-输出昨天日期:
-
-```shell
+# 输出昨天日期:
date -d "1 day ago" +"%Y-%m-%d"
2012-11-19
-```
-
-2秒后输出:
-```shell
+# 2秒后输出:
date -d "2 second" +"%Y-%m-%d %H:%M.%S"
2012-11-20 14:21.31
-```
-
-传说中的 1234567890 秒:
-```shell
-date -d "1970-01-01 1234567890 seconds" +"%Y-%m-%d %H:%m:%S"
+# 传说中的 1234567890 秒:
+date -d "1970-01-01 1234567890 seconds" +"%Y-%m-%d %H:%M:%S"
+# 或者
+date -d@1234567890 +"%F %T"
+# 输出结果
2009-02-13 23:02:30
-```
-
-普通转格式:
-```shell
+# 时间格式转换:
date -d "2009-12-12" +"%Y/%m/%d %H:%M.%S"
+# 输出结果
2009/12/12 00:00.00
-```
-apache格式转换:
-
-```shell
+# apache格式转换:
date -d "Dec 5, 2009 12:00:37 AM" +"%Y-%m-%d %H:%M.%S"
+# 输出结果
2009-12-05 00:00.37
-```
-格式转换后时间游走:
-
-```shell
+# 格式转换后时间游走:
date -d "Dec 5, 2009 12:00:37 AM 2 year ago" +"%Y-%m-%d %H:%M.%S"
+# 输出结果
2007-12-05 00:00.37
-```
-
-加减操作:
-```shell
-date +%Y%m%d # 显示前天年月日
+# 时间加减操作:
+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 # 显示下一年的日期
-```
-
-设定时间:
-```shell
+# 设定时间:
date -s # 设置当前时间,只有root权限才能设置,其他只能查看
-date -s 20120523 # 设置成20120523,这样会把具体时间设置成空00:00:00
+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" # 这样可以设置全部时间
-```
-
-有时需要检查一组命令花费的时间,举例:
-
-```shell
-#!/bin/bash
+# 有时需要检查一组命令花费的时间:
start=$(date +%s)
nmap wangchujiang.com &> /dev/null
-
end=$(date +%s)
difference=$(( end - start ))
+# 显示执行时间
echo $difference seconds.
+
+# 当你考虑输出带有时间的字符串时,例如(Current time: 2019/05/19):
+# 通常使用的方法:
+echo "Current time: $(date +"%Y/%m/%d")"
+# 另一种方法:
+suffix='Current time:'
+# 注意如果换成单引号就不能替换变量了。
+date +"${suffix} %Y/%m/%d"
```
+### 注意
+
+1. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 date`或`info coreutils 'date invocation'`。
+
-
diff --git a/command/dc.md b/command/dc.md
new file mode 100644
index 00000000000..c78f672aa83
--- /dev/null
+++ b/command/dc.md
@@ -0,0 +1,87 @@
+dc
+===
+
+任意精度计算器
+
+## 说明
+
+dc 是一款逆波兰表达式计算器,支持无限制精度的算术运算。它还允许您定义和调用宏。通常,dc从标准输入读取,也可以通过参数传入文件来求值。
+
+## 语法
+
+```shell
+dc [选项] [文件...]
+```
+
+### 选项
+
+```shell
+-e, --expression=EXPR # 评估表达式
+-f, --file=FILE # 评估文件内容
+-h, --help # 显示此帮助并退出
+-V, --version # 输出版本信息并退出
+```
+
+```shell
+p 打印堆栈顶部的值并以换行符结束语句。
+n 打印堆栈顶部的值并以空语句结束行。
+f 打印整个堆栈,不做任何更改。
+P 从栈顶弹出值。
+c 清除堆栈。
+d 复制顶部值并将其推入主堆栈。
+r 反转堆栈中顶部两个元素的顺序。
+Z 从堆栈中弹出值,计算其中的位数并压入该数字。
+X 从堆栈中弹出值,计算其中的小数位数并压入该数字。
+z 将堆栈长度推入堆栈。
+i 从堆栈中弹出值并将其用作输入基数。
+o 从堆栈中弹出值并将其用作输出基数。
+k 从堆栈中弹出值并使用它来设置精度。
+I 将输入基数的值推入堆栈。
+O 将输出基数的值压入堆栈
+K 将精度值压入堆栈。
+```
+
+## 示例
+
+下面是 `dc` 命令在命令行完成的计算 `10 * 10` 得出结果 `100`,并推出的过程
+
+```shell
+$ dc
+
+10 # 1. 输入数字10
+10 # 2. 输入数字10
+* # 3. 输入运算类型*表示乘
+p # 4. 输入p得到计算结果
+100
+q # 5. 输入 q 退出 dc
+```
+
+示例显示在命令行结果 `509`
+
+```bash
+$ dc --expression="50 10 * 9 + p"
+509
+```
+
+## 支持的运算
+
+`+` 从堆栈中弹出两个值,将它们相加,然后压栈结果。
+
+`-` 弹出两个值,从弹出的第二个值中减去弹出的第一个值,并压栈结果。
+
+`*` 弹出两个值,将它们相乘,然后压栈结果。结果中分数位数取决于当前精度值和两个参数中的分数位数。
+
+`/` 弹出两个值,将弹出的第二个值与弹出的第一个值相除,然后推送结果。分数位数由精度值指定。
+
+`%` 弹出两个值,计算/命令将执行的除法的剩余部分,并推送该值。计算的值与序列 `Sd dld/Ld*- `计算的值相同。
+
+`~` 弹出两个值,将弹出的第二个值与弹出的第一个值相除。首先推送商,然后推送余数。除法中使用的小数位数由精度值指定。
+
+(序列 SdSn lnld/lnld% 也可以完成此功能,但错误检查略有不同。)
+
+
+`^` 使用弹出的第一个值作为指数,第二个值作为基数,弹出两个值并进行幂运算。忽略指数的分数部分。
+
+`|` 弹出三个值并计算模幂。 弹出的第一个值用作约简模数; 这个值必须是一个非零数字,并且应该是一个整数。 弹出的第二个用作指数; 该值必须是非负数,并且该指数的任何小数部分都将被忽略。 弹出的第三个值是取幂的基数,它应该是一个整数。 对于小整数,这类似于序列 Sm^Lm%,但与 ^ 不同的是,此命令适用于任意大的指数。
+
+`v` 弹出一个值,计算其平方根,然后压栈它。精度值的最大值和参数的精度用于确定结果中的小数位数。
diff --git a/command/dd.md b/command/dd.md
index aa401f4290c..dd6e87568f8 100644
--- a/command/dd.md
+++ b/command/dd.md
@@ -9,13 +9,13 @@ dd
建议在有需要的时候使用dd 对物理磁盘操作,如果是文件系统的话还是使用tar backup cpio等其他命令更加方便。另外,使用dd对磁盘操作时,最好使用块设备文件。
-### 语法
+### 语法
```shell
dd(选项)
```
-### 选项
+### 选项
```shell
bs=<字节数>:将ibs(输入)与obs(输出)设成指定的字节数;
@@ -24,6 +24,7 @@ conv=<关键字>:指定文件转换的方式;
count=<区块数>:仅读取指定的区块数;
ibs=<字节数>:每次读取的字节数;
obs=<字节数>:每次输出的字节数;
+if=<文件>:输入文件;
of=<文件>:输出到文件;
seek=<区块数>:一开始输出时,跳过指定的区块数;
skip=<区块数>:一开始读取时,跳过指定的区块数;
@@ -31,7 +32,7 @@ skip=<区块数>:一开始读取时,跳过指定的区块数;
--version:显示版本信息。
```
-### 实例
+### 实例
```shell
[root@localhost text]# dd if=/dev/zero of=sun.txt bs=1M count=1
@@ -81,4 +82,20 @@ wFRAnlkXeBXmWs1MyGEs
```
-
+
+**测试磁盘写入速度**
+
+```shell
+[root@localhost ~]# dd if=/dev/zero of=/tmp/testfile bs=1G count=1 oflag=direct
+1+0 records in
+1+0 records out
+1073741824 bytes (1.1 GB) copied, 7.10845 s, 151 MB/s
+```
+
+**测试磁盘读取速度**
+```shell
+[root@localhost ~]# dd if=/tmp/testfile of=/dev/null bs=1G count=1 iflag=direct
+1+0 records in
+1+0 records out
+1073741824 bytes (1.1 GB) copied, 6.53009 s, 164 MB/s
+```
diff --git a/command/declare.md b/command/declare.md
index 666f01dbfe2..e7a1ed172f6 100644
--- a/command/declare.md
+++ b/command/declare.md
@@ -1,51 +1,213 @@
declare
===
-声明或显示shell变量
+声明变量,设置或显示变量的值和属性。
-## 补充说明
+## 语法
-**declare命令** 用于声明和显示已存在的shell变量。当不提供变量名参数时显示所有shell变量。declare命令若不带任何参数选项,则会显示所有shell变量及其值。declare的功能与typeset命令的功能是相同的。
+```shell
+declare [-aAfFgilnrtux] [-p] [name[=value] ...]
+```
+
+## 主要用途
-### 语法
+- 显示包含指定属性的全部变量和值
+- 显示包含指定属性的一到多个变量和值
+- 显示一到多个变量的属性和值
+- 显示所有变量的属性和值并显示函数的定义
+- 显示所有变量的属性和值
+- 显示所有全局变量的属性和值
+- 显示全部函数名和函数定义
+- 只显示全部函数名
+- 显示一到多个函数名和函数定义
+- 只显示一到多个函数名
+- 声明全局变量(可选:赋值)
+- 声明变量(可选:赋值、属性)
+- 增加、删除变量的属性(可选:赋值)
+
+## 选项
```shell
-declare(选项)(参数)
+-f 将操作或显示限制为函数名及函数定义。
+-F 只显示函数名(调试时附加行号和源文件)。
+-g 在shell函数中使用时创建全局变量;其他情况下忽略。
+-p 显示每个名称的属性和值。
+
+*设置属性的选项:
+-a 创建数组(如果支持)。
+-A 创建关联数组(如果支持)。
+-i 增加整型属性。
++i 删除整型属性。
+-l 增加小写属性,变量的值将转换为小写。
++l 删除小写属性。
+-n 增加引用属性(如果该选项存在)。
++n 删除引用属性(如果该选项存在)。
+-r 增加只读属性。
+-t 增加追踪属性。
++t 删除追踪属性。
+-u 增加大写属性,变量的值将转换为大写。
++u 删除大写属性。
+-x 增加导出属性。
++x 删除导出属性。
```
-### 选项
+## 参数
```shell
-+/-:"-"可用来指定变量的属性,"+"则是取消变量所设的属性;
--f:仅显示函数;
-r:将变量设置为只读;
-x:指定的变量会成为环境变量,可供shell以外的程序来使用;
-i:[设置值]可以是数值,字符串或运算式。
+name(可选):变量名或函数名。
+value(可选):变量的值。
```
-### 参数
-
-shell变量:声明shell变量,格式为“变量名=值”。
+## 返回值
-### 实例
+declare 返回true除非你提供了非法选项或赋值错误。具体导致异常的情况请查看**讨论**章节的**关于异常情况**。
-首先使用declare命令定义shell变量"test",并且将其值设置为"wangchujiang.com",输入如下命令:
+## 例子
```shell
-declare test='wangchujiang.com' #定义并初始化shell变量
+# 声明变量,当然也欢迎您在这个网站(感谢本项目发起人 @jaywcjlove)查询linux命令。
+declare reference_website='https://wangchujiang.com/linux-command/'
+
+# 显示所有包含整型属性的变量和值。
+declare -i
+# 定义变量b并赋值为3,具有整型属性。
+declare -i b=5
+# 显示属性,返回 declare -i b="5"。
+declare -p b
+# 删除整型属性。
+declare +i b
+# 显示属性,返回 declare -- b="5"。
+declare -p b
+# 根据变量属性强制转换值的英文大小写。
+declare -u uc_var='abc'
+declare -l lc_var='ABC'
+# 显示'ABC abc';
+echo "${uc_var} ${lc_var}"
```
-上面的命令执行后,再使用echo命令将该shell变量值输出,输入如下命令:
+```shell
+# 定义函数内的全局变量
+function test(){
+ declare -g a=3
+ # 或者
+ local -g b=3
+ # 或者
+ c=3
+ # 让我们查看它们的属性。
+ declare -p a b c
+}
+# 执行函数。
+test
+# 返回结果。
+# declare -- a="3"
+# declare -- b="3"
+# declare -- c="3"
+
+# 定义函数外的全局变量
+declare a=3
+b=3
+declare –p a b
+# 返回结果如下。
+# declare -- a="3"
+# declare -- b="3"
+
+# 定义局部变量
+function test2(){
+ local -i a=3
+ declare -i b=3
+}
+test2
+# 没有该变量(已经被销毁了)
+echo "${a} ${b}"
+# 因此,我们日常脚本中最常见的类似于'a=3'实际上是声明并赋值了一个全局变量。
+# 在接下来的 **讨论** 环节会延伸讨论全局和局部变量问题。
+```
```shell
-echo $test #输出shell变量的值
+# 注意,不能使用 `+a` 或 `+A` 取消数组,也不能使用 `+r` 取消只读属性。
+
+# 定义只读数组,设置属性的同时定义赋值。
+declare -ar season=('Spring' 'Summer' 'Autumn' 'Winter')
+# 或者这样。
+season=('Spring' 'Summer' 'Autumn' 'Winter')
+declare -ar season
+# 显示所有数组。
+declare -a
+# 定义关联数组。
+
+declare -A fruits=(['apple']='red' ['banana']='yellow')
+# 显示所有关联数组。
+declare -A
```
-上面的指令执行后,其输出的结果如下:
+```shell
+# 显示所有变量的属性和值并显示函数的定义,输出很长。
+declare
+# 显示所有变量的属性和值。
+declare -p
+# 显示所有全局变量的属性和值。
+declare -g
+```
```shell
-wangchujiang.com
+# 显示全部函数名和函数定义。
+declare -f
+# 只显示全部函数名。
+declare -F
+
+# 定义两个函数。
+function func_a(){ echo $(date +"%F %T"); }
+function func_b(){ cd /; ls -lh --sort=time; }
+# 显示一到多个函数名和函数定义。
+declare -f func_a func_b
+# 只显示一到多个函数名,验证某个名称是否已经定义为函数时有用。
+declare -F func_a func_b
+# 最好不要让函数名和变量名相同。
```
-
\ No newline at end of file
+## 讨论
+
+1. 全局和局部变量
+
+ 正如上面**例子**指出的情况,我们在日常编写程序的时候需要了解这些概念,在这里
+ 做个简要地介绍,当然你也可以很方便的搜索到相关内容。
+
+ - 全局变量:在整个脚本执行期间,只要没有被删除就**一直存在**。
+ - 局部变量:在函数内定义,函数执行后就被删除。
+
+ 建议函数内使用`local`命令,函数外使用`declare`命令。
+
+ > *不要在脚本中定义过多的全局变量,那样可能会被其他函数调用造成意料之外的后果,并且也不方便检查出来。*
+ >
+ > *更不用说缺乏必要的注释了 —— ZhuangZhu-74*
+
+ 相关资料:
+
+ - [google提供的编码规范](https://github.com/google/styleguide)
+ - [全局变量的讨论](https://unix.stackexchange.com/questions/381761/what-do-declare-name-and-declare-g-do)
+
+2. 关于`declare` `typeset` `export` `local` `readonly`命令
+
+ 为什么`declare`能做到的事,还需要定义其他这些命令呢?
+
+ 因为这样语句含义会更加明确,例如:
+ - 设置导出属性的变量时,`export var`和`declare -x var`。
+ - 在函数内声明变量时,使用`local`。
+ - 声明只读变量,使用`readonly`。
+
+ `typeset`和`declare`命令一样。
+
+3. 关于异常情况
+
+ 有多种原因导致`declare`失败,关于这些情况可以参考[bash在线文档declare部分\(最新版\)](https://www.gnu.org/software/bash/manual/bash.html#index-declare),或执行 `info bash`
+ 查看`declare`部分最后一大串`an attempt is`开头的句子。
+
+### 注意
+
+1. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。
+2. 导出属性的相关介绍请查看'export'命令。
+3. 只读属性的相关介绍请查看'readonly'命令。
+4. 引用属性的相关介绍请查看'unset'命令的例子部分。
+
+
diff --git a/command/depmod.md b/command/depmod.md
index 6059fa61c58..6b49be39c9c 100644
--- a/command/depmod.md
+++ b/command/depmod.md
@@ -7,13 +7,13 @@ depmod
**depmod命令** 可产生模块依赖的映射文件,在构建嵌入式系统时,需要由这个命令来生成相应的文件,由modprobe使用。
-### 语法
+### 语法
```shell
depmod(选项)
```
-### 选项
+### 选项
```shell
-a或--all:分析所有可用的模块;
@@ -27,7 +27,7 @@ depmod(选项)
--help:显示帮助。
```
-### 实例
+### 实例
```shell
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
@@ -61,4 +61,3 @@ depmod -b /home/windsome/EMMA3PF-KernelSource-20080626/install_pos -e -F ./boot/
如,我编译了一个新的wifi驱动r8192se_pci.ko,将其拷贝到`/lib/modules/2.6.31-20-generic/wireless`下,然后到`/lib/modules/2.6.31-20-generic`运行`depmod -a`,之后可以在任意目录运行modprobe r8192se_pci。
-
\ No newline at end of file
diff --git a/command/df.md b/command/df.md
index d21203f17df..9a6869b2e4e 100644
--- a/command/df.md
+++ b/command/df.md
@@ -7,13 +7,13 @@ df
**df命令** 用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
-### 语法
+### 语法
```shell
df(选项)(参数)
```
-### 选项
+### 选项
```shell
-a或--all:包含全部的文件系统;
@@ -34,7 +34,7 @@ df(选项)(参数)
--version:显示版本信息。
```
-### 参数
+### 参数
文件:指定文件系统上的文件。
@@ -44,7 +44,7 @@ df(选项)(参数)
SIZE是一个整数和可选单位(例如:10M是10 * 1024 * 1024)。 单位是K,M,G,T,P,E,Z,Y(1024的幂)或KB,MB,...(1000的幂)。
-### 实例
+### 实例
查看系统磁盘设备,默认是KB为单位:
@@ -92,4 +92,4 @@ df public
```
-
+
diff --git a/command/dhclient.md b/command/dhclient.md
index 4799b55678d..a9e9fc8d6a1 100644
--- a/command/dhclient.md
+++ b/command/dhclient.md
@@ -7,13 +7,13 @@ dhclient
**dhclient命令** 使用动态主机配置协议动态的配置网络接口的网络参数。
-### 语法
+### 语法
```shell
dhclient(选项)(参数)
```
-### 选项
+### 选项
```shell
0:指定dhcp客户端监听的端口号;
@@ -22,11 +22,11 @@ dhclient(选项)(参数)
-r:释放ip地址。
```
-### 参数
+### 参数
网络接口:操作的网络接口。
-### 实例
+### 实例
```shell
dhclient -r #释放IP
@@ -34,4 +34,3 @@ dhclient #获取IP
```
-
\ No newline at end of file
diff --git a/command/dhcpd.md b/command/dhcpd.md
index 266eb90e0ce..3f43ae709ce 100644
--- a/command/dhcpd.md
+++ b/command/dhcpd.md
@@ -1,15 +1,15 @@
dhcpd
===
-运行DHCP服务器。
+运行DHCP服务器
-### 语法
+### 语法
```shell
dhcpd [选项] [网络接口]
```
-### 选项
+### 选项
```shell
-p <端口> 指定dhcpd监听的端口
@@ -54,4 +54,4 @@ it workbetter with this distribution.
exiting.
```
-
+
diff --git a/command/dhcrelay.md b/command/dhcrelay.md
index 6fecbb03565..2d490450b02 100644
--- a/command/dhcrelay.md
+++ b/command/dhcrelay.md
@@ -7,13 +7,13 @@ dhcrelay
**dhcrelay命令** 使用dhcrelay命令可以提供中继DHCP和BOOTP请求,从一个没有DHCP服务器的子网直接连接到其它子网内的一个或多个DHCP服务器。该命令在DHCP中继服务器上使用,同时支持DHCPv4/BOOTP和DHCPv6协议。
-### 语法
+### 语法
```shell
dhcrelay [选项] [DHCP服务器]
```
-### 选项
+### 选项
```shell
-c <跳数> 当转发数据包时,dhcrelay丢弃已经达到一个最大跳数的数据包。默认值是10,最大值是255
@@ -42,4 +42,4 @@ Sending on LPF/eth0/00:0c:27:fc:25:ec
Sending on Socket/fallback
```
-
+
diff --git a/command/diff.md b/command/diff.md
index 4920cfd18c8..e3f177a1a72 100644
--- a/command/diff.md
+++ b/command/diff.md
@@ -7,41 +7,41 @@ diff
**diff命令** 在最简单的情况下,比较给定的两个文件的不同。如果使用“-”代替“文件”参数,则要比较的内容将来自标准输入。diff命令是以逐行的方式,比较文本文件的异同处。如果该命令指定进行目录的比较,则将会比较该目录中具有相同文件名的文件,而不会对其子目录文件进行任何比较操作。
-### 语法
+### 语法
```shell
diff(选项)(参数)
```
-### 选项
+### 选项
```shell
-<行数>:指定要显示多少行的文本。此参数必须与-c或-u参数一并使用;
--a或——text:diff预设只会逐行比较文本文件;
+-a或--text:diff预设只会逐行比较文本文件;
-b或--ignore-space-change:不检查空格字符的不同;
-B或--ignore-blank-lines:不检查空白行;
-c:显示全部内容,并标出不同之处;
-C<行数>或--context<行数>:与执行“-c-<行数>”指令相同;
--d或——minimal:使用不同的演算法,以小的单位来做比较;
+-d或--minimal:使用不同的演算法,以小的单位来做比较;
-D<巨集名称>或ifdef<巨集名称>:此参数的输出格式可用于前置处理器巨集;
--e或——ed:此参数的输出格式可用于ed的script文件;
+-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的格式来显示;
+-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:比较子目录中的文件;
+-r或--recursive:比较子目录中的文件;
-s或--report-identical-files:若没有发现任何差异,仍然显示信息;
-S<文件>或--starting-file<文件>:在比较目录时,从指定的文件开始比较;
-t或--expand-tabs:在输出时,将tab字符展开;
-T或--initial-tab:在每行前面加上tab字符以便对齐;
-u,-U<列数>或--unified=<列数>:以合并的方式来显示文件内容的不同;
--v或——version:显示版本信息;
+-v或--version:显示版本信息;
-w或--ignore-all-space:忽略全部的空格字符;
-W<宽度>或--width<宽度>:在使用-y参数时,指定栏宽;
-x<文件名或目录>或--exclude<文件名或目录>:不比较选项中所指定的文件或目录;
@@ -52,12 +52,68 @@ diff(选项)(参数)
--suppress-common-lines:在使用-y参数时,仅显示不同之处。
```
-### 参数
+### 参数
-* 文件1:指定要比较的第一个文件;
-* 文件2:指定要比较的第二个文件。
+* 文件1:指定要比较的第一个文件;
+* 文件2:指定要比较的第二个文件。
-### 实例
+### 实例
+
+#### 以正常模式比较差异
+
+```shell
+diff a.txt b.txt
+```
+
+#### 以上下文 (context) 模式比较差异
+
+```shell
+diff -c a.txt b.txt
+```
+
+```shell
+ *** a1.txt 2012-08-29 16:45:41.000000000 +0800
+ --- a2.txt 2012-08-29 16:45:51.000000000 +0800
+ ***************
+ *** 1,7 ****
+ a
+ a
+ a
+ !a
+ a
+ a
+ a
+ --- 1,7 ----
+ a
+ a
+ a
+ !b
+ a
+ a
+ a
+```
+
+#### 以联合 (unified) 模式比较差异
+
+```shell
+diff -u a.txt b.txt
+```
+
+```shell
+ --- a.txt 2012-08-29 16:45:41.000000000 +0800
+ +++ b.txt 2012-08-29 16:45:51.000000000 +0800
+ @@ -1,7 +1,7 @@
+ a
+ a
+ a
+ -a
+ +b
+ a
+ a
+ a
+```
+
+#### 多文件比较差异
将目录`/usr/li`下的文件"test.txt"与当前目录下的文件"test.txt"进行比较,输入如下命令:
@@ -78,4 +134,3 @@ n1,n2 c n3,n4
注意:以上说明指定了两个文件中不同处的行号及其相应的操作。在输出形式中,每一行后面将跟随受到影响的若干行。其中,以<开始的行属于文件1,以>开始的行属于文件2。
-
\ No newline at end of file
diff --git a/command/diff3.md b/command/diff3.md
index 1eabd48233f..5bb954a4e1b 100644
--- a/command/diff3.md
+++ b/command/diff3.md
@@ -7,13 +7,13 @@ diff3
**diff3命令** 用于比较3个文件,将3个文件的不同的地方显示到标准输出。
-### 语法
+### 语法
```shell
diff3(选项)(参数)
```
-### 选项
+### 选项
```shell
-a:把所有的文件都当做文本文件按照行为单位进行比较,即给定的文件不是文本文件;
@@ -25,11 +25,10 @@ diff3(选项)(参数)
--initial-tab:在正常格式的行的文本前,输出一个TAB字符而非两个空白字符。此选项将导致在行中TAB字符的对齐方式看上去规范。
```
-### 参数
+### 参数
* 文件1:指定要比较的第1个文件;
* 文件2:指定要比较的第2个文件;
* 文件3:指定要比较的第3个文件。
-
\ No newline at end of file
diff --git a/command/diffstat.md b/command/diffstat.md
index abc50dd6697..07ef295b39a 100644
--- a/command/diffstat.md
+++ b/command/diffstat.md
@@ -7,13 +7,13 @@ diffstat
**diffstat命令** 用来显示diff命令输出信息的柱状图,用以显示diff命令比较两个文件的不同统计信息。用户也可以直接使用`|`将diff命令所输出的结果直接送给diffstat命令进行统计结果的显示。使用该命令时,若所比较的文件或者子目录不在当前目录下,则应该使用其完整路径。
-### 语法
+### 语法
```shell
diffstat(选项)(参数)
```
-### 选项
+### 选项
```shell
-n<文件名长度>:指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名;
@@ -22,11 +22,11 @@ diffstat(选项)(参数)
-v:显示版本信息。
```
-### 参数
+### 参数
文件:指定保存有diff命令的输出信息文件。
-### 实例
+### 实例
将目录"test1"和"test2"下的同名文件"testf.txt"使用diff命令进行比较。然后使用diffstat命令对结果进行统计显示,输入如下命令:
@@ -65,4 +65,3 @@ testfile | 2 +- #统计信息输出显示
```
-
\ No newline at end of file
diff --git a/command/dig.md b/command/dig.md
index 61750c0aee6..47109c4775a 100644
--- a/command/dig.md
+++ b/command/dig.md
@@ -7,13 +7,13 @@ dig
**dig命令** 是常用的域名查询工具,可以用来测试域名系统工作是否正常。
-### 语法
+### 语法
```shell
dig(选项)(参数)
```
-### 选项
+### 选项
```shell
@<服务器地址>:指定进行域名解析的域名服务器;
@@ -27,40 +27,38 @@ dig(选项)(参数)
-h:显示指令帮助信息。
```
-### 参数
+### 参数
* 主机:指定要查询域名主机;
* 查询类型:指定DNS查询的类型;
* 查询类:指定查询DNS的class;
* 查询选项:指定查询选项。
-### 实例
+### 实例
```shell
-[root@localhost ~]# dig www.jsdig.com
+[root@localhost ~]# dig www.baidu.com
-; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.1 <<>> www.jsdig.com
-;; global options: printcmd
+; <<>> DiG 9.10.6 <<>> www.baidu.com
+;; global options: +cmd
;; Got answer:
-;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2115
-;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 0
+;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57295
+;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
+;; OPT PSEUDOSECTION:
+; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
-;www.jsdig.com. IN A
+;www.baidu.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
+www.baidu.com. 963 IN CNAME www.a.shifen.com.
+www.a.shifen.com. 63 IN A 180.101.50.242
+www.a.shifen.com. 63 IN A 180.101.50.188
+
+;; Query time: 14 msec
+;; SERVER: 119.29.29.29#53(119.29.29.29)
+;; WHEN: Wed May 10 16:16:36 CST 2023
+;; MSG SIZE rcvd: 101
```
-
\ No newline at end of file
diff --git a/command/dircolors.md b/command/dircolors.md
index 96611bc3816..a4ea8004f89 100644
--- a/command/dircolors.md
+++ b/command/dircolors.md
@@ -7,13 +7,13 @@ dircolors
**dircolors命令** 设置ls命令在显示目录或文件时所用的色彩。dircolors可根据[色彩配置文件]来设置LS_COLORS环境变量或是显示设置LS_COLORS环境变量的命令。
-### 语法
+### 语法
```shell
dircolors(选项)(参数)
```
-### 选项
+### 选项
```shell
-b或--sh或--bourne-shell:显示在Boume shell中,将LS_COLORS设为目前预设置的shell指令;
@@ -23,11 +23,11 @@ dircolors(选项)(参数)
-version:显示版本信息。
```
-### 参数
+### 参数
文件:指定用来设置颜色的文件。
-### 实例
+### 实例
```shell
[root@localhost ~]# dircolors -p
@@ -142,4 +142,3 @@ exec 01;32
```
-
\ No newline at end of file
diff --git a/command/dirname.md b/command/dirname.md
index f8efd89411f..be71da772ac 100644
--- a/command/dirname.md
+++ b/command/dirname.md
@@ -5,22 +5,22 @@ dirname
## 补充说明
-**dirname命令** 去除文件名中的非目录部分,仅显示与目录有关的内容。dirname命令读取指定路径名保留最后一个`/`及其后面的字符,删除其他部分,并写结果到标准输出。如果最后一个`/`后无字符,dirname 命令使用倒数第二个`/`,并忽略其后的所有字符。dirname 和 basename 通常在 shell 内部命令替换使用,以指定一个与指定输入文件名略有差异的输出文件名。
+**dirname命令** 去除文件名中的非目录部分,仅显示与目录有关的内容。dirname命令读取指定路径名保留最后一个`/`及其后面的字符,删除其他部分,并写结果到标准输出。如果最后一个`/`后无字符,dirname 命令使用倒数第二个`/`,并忽略其后的所有字符。dirname 和 basename 通常在 shell 内部命令替换使用,以指定一个与指定输入文件名略有差异的输出文件名。
-### 语法
+### 语法
```shell
dirname(选项)(参数)
```
-### 选项
+### 选项
```shell
--help:显示帮助;
--version:显示版本号。
```
-### 实例
+### 实例
```shell
dirname //
@@ -37,4 +37,4 @@ dirname a/b
```
-
\ No newline at end of file
+
diff --git a/command/dirs.md b/command/dirs.md
index bf08bf5f0ff..de6a297ad7c 100644
--- a/command/dirs.md
+++ b/command/dirs.md
@@ -1,39 +1,77 @@
dirs
===
-显示目录记录
+显示目录堆栈。
-## 补充说明
-
-**dirs命令** 显示当前目录栈中的所有记录(不带参数的dirs命令显示当前目录栈中的记录)。dirs始终显示当然目录, 再是堆栈中的内容;即使目录堆栈为空, dirs命令仍然只显示当然目录。
-
-### 语法
+## 语法
```shell
-dirs(选项)(参数)
+dirs [-clpv] [+N] [-N]
```
-### 选项
+## 主要用途
+
+- 显示目录堆栈。
+- 清空目录堆栈。
+
+## 选项
```shell
--c:删除目录栈中的所有记录
--l:以完整格式显示
--p:一个目录一行的方式显示
--v:每行一个目录来显示目录栈的内容,每个目录前加上的编号
-+N:显示从左到右的第n个目录,数字从0开始
--N:显示从右到左的第n个日录,数字从0开始
+-c 清空目录堆栈。
+-l 堆栈内以~开头的目录在显示时展开。
+-p 将目录堆栈内的每一个目录按行显示。
+-v 将目录堆栈内的每一个目录按行显示并在每行前加上堆栈内的位置编号。
```
-### 参数
+## 参数
+
++N(可选):不带参数执行`dirs`命令显示的列表中,左起的第N个目录将被显示。(从0开始计数)
-目录:显示目录堆叠中的记录。
+-N(可选):不带参数执行`dirs`命令显示的列表中,右起的第N个目录将被显示。(从0开始计数)
-### 实例
+## 返回值
+
+返回成功除非提供了非法选项或执行出现错误。
+
+## 例子
```shell
-[root@localhost etc]# dirs
-/etc
+# 添加目录到堆栈。
+[user2@pc ~]$ dirs
+~
+[user2@pc ~]$ pushd -n ~/Desktop
+~ ~/Desktop
+[user2@pc ~]$ pushd -n ~/Pictures
+~ ~/Pictures ~/Desktop
+[user2@pc ~]$ pushd -n ~/bin
+~ ~/bin ~/Pictures ~/Desktop
+
+# 选项和参数的示例:
+[user2@pc ~]$ dirs -l
+/home/user2 /home/user2/bin /home/user2/Pictures /home/user2/Desktop
+[user2@pc ~]$ dirs -p
+~
+~/bin
+~/Pictures
+~/Desktop
+[user2@pc ~]$ dirs -v
+ 0 ~
+ 1 ~/bin
+ 2 ~/Pictures
+ 3 ~/Desktop
+[user2@pc ~]$ dirs +2
+~/Pictures
+[user2@pc ~]$ dirs -2
+~/bin
+[user2@pc ~]$ dirs -c
+[user2@pc ~]$ dirs
+~
```
+### 注意
+
+1. `bash`的目录堆栈命令包括`dirs popd pushd`。
+2. 当前目录始终是目录堆栈的顶部。
+3. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。
+
-
\ No newline at end of file
diff --git a/command/disown.md b/command/disown.md
new file mode 100644
index 00000000000..abf6807784a
--- /dev/null
+++ b/command/disown.md
@@ -0,0 +1,125 @@
+disown
+===
+
+从当前的shell中移除作业。
+
+## 概要
+
+```shell
+disown [-h] [-ar] [jobspec ... | pid ...]
+```
+
+## 主要用途
+
+- 从当前shell的作业列表中移除全部作业。
+
+- 从当前shell的作业列表中移除指定的一到多个作业。
+
+- 从当前shell的作业列表中移除正在运行的作业。
+
+- 标记作业,使得它们在当前shell退出后也不会结束。
+
+
+## 选项
+
+```shell
+-h 标记每个作业标识符,这些作业将不会在shell接收到sighup信号时接收到sighup信号。
+-a 移除所有的作业。
+-r 移除运行的作业。
+```
+
+## 参数
+
+jobspec(可选):要移除的作业标识符,可以是一到多个。
+
+pid(可选):要移除的作业对应的进程ID,可以是一到多个。
+
+
+## 返回值
+
+返回成功除非未开启作业控制或执行出现错误。
+
+## 例子
+
+```shell
+# 演示。
+[user2@pc] ssh 192.168.1.4
+user2@192.168.1.4's password:
+# 此时按下ctrl+z使得交互停止。
+[1]+ Stopped ssh 192.168.1.4
+
+[user2@pc] ssh 192.168.1.7
+user2@192.168.1.7's password:
+# 此时按下ctrl+z使得交互停止。
+[1]+ Stopped ssh 192.168.1.7
+
+[user2@pc] sleep 120 &
+[3] 28986
+
+# 列出作业及pid信息。
+[user2@pc] jobs -l
+[1]- 28756 Stopped ssh 192.168.1.4
+[2]+ 28833 Stopped ssh 192.168.1.7
+[3] 28986 Running sleep 120 &
+
+# 删除运行状态的作业。
+[user2@pc] disown -r
+
+[user2@pc] jobs -l
+[1]- 28756 Stopped ssh 192.168.1.4
+[2]+ 28833 Stopped ssh 192.168.1.7
+
+# 注意disown只是移除作业,并没有停止。
+[user2@pc] pgrep -a -u user2 -f 'sleep 120'
+28986 sleep 120
+
+# 删除指定的作业。
+[user2@pc] disown %2
+bash: warning: deleting stopped job 2 with process group 28833
+
+[user2@pc] jobs -l
+[1]- 28756 Stopped ssh 192.168.1.4
+
+# 注意disown只是移除作业,并没有停止。
+[user2@pc] pgrep -a -u user2 -f 'ssh 192.168.1.7'
+28833 ssh 192.168.1.7
+
+# 删除全部作业。
+[user2@pc] disown -a
+bash: warning: deleting stopped job 1 with process group 28756
+
+[user2@pc] jobs -l
+
+# 注意disown只是移除作业,并没有停止。
+[user2@pc] pgrep -a -u user2 -f 'ssh 192.168.1.4'
+28756 ssh 192.168.1.4
+```
+
+```shell
+# 演示-h选项的作用。
+[user2@pc] sleep 90 &
+[1] 109080
+
+[user2@pc] jobs -l
+[1]+ 109080 Running sleep 90 &
+
+[user2@pc] disown -h %1
+
+[user2@pc] exit
+
+# 此时前一个终端已经关闭,现在打开新终端查找该作业。
+[user2@pc] pgrep -a -u user2 -f 'sleep 90'
+109080 sleep 90
+```
+
+### 注意
+
+1. `bash`的作业控制命令包括`bg fg kill wait disown suspend`。
+2. 该命令需要`set`选项`monitor`处于开启状态时才能执行;查看作业控制状态:输入`set -o`查看`monitor`行;执行`set -o monitor`或`set -m`开启该选项。
+3. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。
+
+### 参考链接
+
+- [disown的用法](https://www.cyberciti.biz/faq/unix-linux-disown-command-examples-usage-syntax/)
+
+
diff --git a/command/dmesg.md b/command/dmesg.md
index 0b24afa3edd..d1258517a50 100644
--- a/command/dmesg.md
+++ b/command/dmesg.md
@@ -7,13 +7,13 @@ dmesg
**dmesg命令** 被用于检查和控制内核的环形缓冲区。kernel会将开机信息存储在ring buffer中。您若是开机时来不及查看信息,可利用dmesg来查看。开机信息保存在`/var/log/dmesg`文件里。
-### 语法
+### 语法
```shell
dmesg(选项)
```
-### 选项
+### 选项
```shell
-c:显示信息后,清除ring buffer中的内容;
@@ -21,7 +21,7 @@ dmesg(选项)
-n:设置记录信息的层级。
```
-### 实例
+### 实例
```shell
[root@localhost ~]# dmesg | head
@@ -50,4 +50,12 @@ dmesg | grep sda
[ 2.448503] sd 0:0:0:0: [sda] Attached SCSI disk
```
-
+查看多关键字
+
+```shell
+dmesg | grep -E "vcc5v0_host|vcc_3v3_s0|ttyS"
+
+[ 1.193143] vcc5v0_host: supplied by vcc5v0_usb
+[ 1.481139] feb80000.serial: ttyS5 at MMIO 0xfeb80000 (irq = 73, base_baud = 1500000) is a 16550A
+[ 1.513541] vcc_3v3_s0: supplied by vcc5v0_sys
+```
diff --git a/command/dmidecode.md b/command/dmidecode.md
index 1eaec7c7a65..3b1bb9d89dd 100644
--- a/command/dmidecode.md
+++ b/command/dmidecode.md
@@ -11,13 +11,13 @@ DMI(Desktop Management Interface,DMI)就是帮助收集电脑系统信息的
DMI充当了管理工具和系统层之间接口的角色。它建立了标准的可管理系统更加方便了电脑厂商和用户对系统的了解。DMI的主要组成部分是Management Information Format(MIF)数据库。这个数据库包括了所有有关电脑系统和配件的信息。通过DMI,用户可以获取序列号、电脑厂商、串口信息以及其它系统配件信息。
-### 语法
+### 语法
```shell
dmidecode [选项]
```
-### 选项
+### 选项
```shell
-d:(default:/dev/mem)从设备文件读取信息,输出内容与不加参数标准输出相同。
@@ -114,7 +114,7 @@ dmidecode [选项]
* Additional Information
* Onboard Device
-### 实例
+### 实例
```shell
dmidecode -t 1 # 查看服务器信息
@@ -290,4 +290,4 @@ dmidecode|grep -A16 "Memory Device"|grep 'Speed'
```shell
-
+
diff --git a/command/dnf.md b/command/dnf.md
index adcbb214744..b2b5cb0b71f 100644
--- a/command/dnf.md
+++ b/command/dnf.md
@@ -7,11 +7,11 @@ dnf
**DNF** 是新一代的rpm软件包管理器。他首先出现在 Fedora 18 这个发行版中。而最近,它取代了yum,正式成为 Fedora 22 的包管理器。
-DNF包管理器克服了YUM包管理器的一些瓶颈,提升了包括用户体验,内存占用,依赖分析,运行速度等多方面的内容。DNF使用 RPM, libsolv 和 hawkey 库进行包管理操作。尽管它没有预装在 CentOS 和 RHEL 7 中,但你可以在使用 YUM 的同时使用 DNF 。你可以在这里获得关于 DNF 的更多知识:《 DNF 代替 YUM ,你所不知道的缘由》
+DNF包管理器克服了YUM包管理器的一些瓶颈,提升了包括用户体验,内存占用,依赖分析,运行速度等多方面的内容。DNF使用 RPM, libsolv 和 hawkey 库进行包管理操作。尽管它没有预装在 CentOS 和 RHEL 7 中,但你可以在使用 YUM 的同时使用 DNF 。
-DNF 的最新稳定发行版版本号是 1.0,发行日期是2015年5月11日。 这一版本的额 DNF 包管理器(包括在他之前的所有版本) 都大部分采用 Python 编写,发行许可为GPL v2.
+DNF 的最新稳定发行版版本号是 1.0,发行日期是2015年5月11日。 这一版本的 DNF 包管理器(包括在他之前的所有版本) 都大部分采用 Python 编写,发行许可为GPL v2.
-### 安装 DNF 包管理器
+### 安装 DNF 包管理器
DNF 并未默认安装在 RHEL 或 CentOS 7系统中,但是 Fedora 22 已经默认使用 DNF .
@@ -267,7 +267,7 @@ Error: Nothing to do.
原作者注:在执行这条命令的时候, DNF 并没有按照我期望的那样降级指定的软件(“acpid”)。该问题已经上报。
-### 总结
+### 总结
DNF 包管理器作为 YUM 包管理器的升级替代品,它能自动完成更多的操作。但在我看来,正因如此,所以 DNF 包管理器不会太受那些经验老道的 Linux 系统管理者的欢迎。举例如下:
@@ -277,4 +277,3 @@ DNF 包管理器作为 YUM 包管理器的升级替代品,它能自动完成
4. 当你在 DNF 中排除了某个软件库,那么该操作将会影响到你之后所有的操作,不像在 YUM 下那样,你的排除操作只会咋升级和安装软件时才起作用。
-
\ No newline at end of file
diff --git a/command/dnsdomainname.md b/command/dnsdomainname.md
index ce15780fe29..4b0d413cbe8 100644
--- a/command/dnsdomainname.md
+++ b/command/dnsdomainname.md
@@ -7,19 +7,19 @@ dnsdomainname
**dnsdomainname命令** 用于定义DNS系统中FQDN名称中的域名。
-### 语法
+### 语法
```shell
dnsdomainname(选项)
```
-### 选项
+### 选项
```shell
-v:详细信息模式,输出指令执行的详细信息。
```
-### 实例
+### 实例
```shell
[root@AY1307311912260196fcZ ~]# dnsdomainname -v
@@ -30,4 +30,3 @@ Result: h_addr_list=`10.160.7.81'
```
-
\ No newline at end of file
diff --git a/command/docker.md b/command/docker.md
new file mode 100644
index 00000000000..5e293866f5e
--- /dev/null
+++ b/command/docker.md
@@ -0,0 +1,352 @@
+docker
+===
+
+容器化技术,可以将应用程序及其依赖项打包到一个可移植的容器中,使其可以在不同的环境中运行
+
+## 补充说明
+
+Docker 容器可以快速部署、可移植、可扩展,并且可以在不同的平台上运行。Docker 可以帮助开发人员和运维人员更轻松地构建、发布和管理应用程序。
+
+## 安装
+
+在 Linux 中输入以下命令安装 Docker。
+
+```bash
+# CentOS 参考:https://blog.csdn.net/zhaoyuanh/article/details/126610347
+#如果系统里有旧版本docker的话需要先行删除:
+sudo yum remove docker \
+ docker-client \
+ docker-client-latest \
+ docker-common \
+ docker-latest \
+ docker-latest-logrotate \
+ docker-logrotate \
+ docker-engine
+
+#设置仓库:
+yum install -y yum-utils
+
+#添加Docker仓库:
+yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
+
+#安装Docker引擎(默认最新):
+yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
+
+#启动docker:
+sudo systemctl start docker
+
+```
+
+```bash
+# Docker官方提供的快速安装脚本 https://github.com/docker/docker-install
+# 不建议在生产环境中使用
+curl -fsSL https://get.docker.com -o get-docker.sh
+sudo sh ./get-docker.sh --dry-run
+
+# 使用systemctl设置开机启动
+sudo systemctl enable docker.service
+sudo systemctl enable containerd.service
+```
+
+## 语法
+
+```shell
+docker create [options] IMAGE
+```
+
+## 选项参数
+
+```shell
+attach 将本地标准输入、输出和错误流附加到正在运行的容器
+build 从 Dockerfile 构建镜像
+commit 从容器的更改创建新镜像
+cp 在容器和本地文件系统之间复制文件/文件夹
+create 创建一个新容器
+diff 检查容器文件系统上文件或目录的更改
+events 从服务器获取实时事件
+exec 在正在运行的容器中运行命令
+export 将容器的文件系统导出为 tar 存档
+history 显示镜像的历史
+images 列出镜像
+import 从 tarball 导入内容以创建文件系统映像
+info 显示系统范围的信息
+inspect 返回有关 Docker 对象的低级信息
+kill 杀死一个或多个正在运行的容器
+load 从 tar 存档或 STDIN 加载镜像
+login 登录到 Docker 注册表
+logout 从 Docker 注册表中注销
+logs 获取容器的日志
+pause 暂停一个或多个容器内的所有进程
+port 列出容器的端口映射或特定映射
+ps 列出容器
+pull 从注册表中提取镜像或存储库
+push 将镜像或存储库推送到注册表
+rename 重命名容器
+restart 重启一个或多个容器
+rm 移除一个或多个容器
+rmi 移除一张或多张镜像
+run 在新容器中运行命令
+save 将一个或多个镜像保存到 tar 存档(默认流式传输到 STDOUT)
+search 在 Docker Hub 中搜索镜像
+start 启动一个或多个停止的容器
+stats 显示容器资源使用统计的实时流
+stop 停止一个或多个正在运行的容器
+tag 创建一个引用 SOURCE_IMAGE 的标记 TARGET_IMAGE
+top 显示容器的运行进程
+unpause 取消暂停一个或多个容器中的所有进程
+update 更新一个或多个容器的配置
+version 显示 Docker 版本信息
+wait 阻塞直到一个或多个容器停止,然后打印它们的退出代码
+
+<环境参数>
+ --add-host list # 添加自定义主机到 IP 映射 (host:ip)
+-a, --attach list # 连接到 STDIN、STDOUT 或 STDERR
+ --blkio-weight uint16 # 块 IO(相对权重),介于 10 和 1000 之间,或 0 禁用(默认 0)
+ --blkio-weight-device list # 块 IO 权重(相对设备权重)(默认 [])
+ --cap-add list # 添加 Linux 功能
+ --cap-drop list # 放弃 Linux 功能
+ --cgroup-parent string # 容器的可选父 cgroup
+ --cgroupns string # 要使用的 Cgroup 命名空间(主机|私有)
+ # 'host': 在 Docker 主机的 cgroup 命名空间中运行容器
+ # 'private': 在自己的私有 cgroup 命名空间中运行容器
+ # '': 使用由守护进程上的
+ # default-cgroupns-mode 选项配置的 cgroup 命名空间(默认)
+ --cidfile string # 将容器 ID 写入文件
+ --cpu-period int # 限制 CPU CFS(完全公平调度器)周期
+ --cpu-quota int # 限制 CPU CFS(完全公平调度器)配额
+ --cpu-rt-period int # 以微秒为单位限制 CPU 实时周期
+ --cpu-rt-runtime int # 以微秒为单位限制 CPU 实时运行时间
+-c, --cpu-shares int # CPU 份额(相对权重)
+ --cpus decimal # CPU 数量
+ --cpuset-cpus string # 允许执行的 CPU (0-3, 0,1)
+ --cpuset-mems string # 允许执行的 MEM (0-3, 0,1)
+ --device list # 将主机设备添加到容器
+ --device-cgroup-rule list # 将规则添加到 cgroup 允许的设备列表
+ --device-read-bps list # 限制设备的读取速率(每秒字节数)(默认 [])
+ --device-read-iops list # 限制设备的读取速率(每秒 IO)(默认 [])
+ --device-write-bps list # 限制设备的写入速率(每秒字节数)(默认 [])
+ --device-write-iops list # 限制设备的写入速率(每秒 IO)(默认 [])
+ --disable-content-trust # 跳过镜像验证(默认为 true)
+ --dns list # 设置自定义 DNS 服务器
+ --dns-option list # 设置 DNS 选项
+ --dns-search list # 设置自定义 DNS 搜索域
+ --domainname string # 容器 NIS 域名
+ --entrypoint string # 覆盖镜像的默认入口点
+-e, --env list # 设置环境变量
+ --env-file list # 读入环境变量文件
+ --expose list # 公开一个端口或一系列端口
+ --gpus gpu-request # 要添加到容器中的 GPU 设备(“全部”以传递所有 GPU)
+ --group-add list # 添加其他组以加入
+ --health-cmd string # 运行以检查运行状况的命令
+ --health-interval duration # 运行检查之间的时间 (ms|s|m|h) (默认 0s)
+ --health-retries int # 需要报告不健康的连续失败
+ --health-start-period duration # 开始健康重试倒计时之前容器初始化的开始时间(ms|s|m|h)(默认 0s)
+ --health-timeout duration # 允许运行一项检查的最长时间 (ms|s|m|h) (默认 0s)
+ --help # 打印使用
+-h, --hostname string # 容器主机名
+ --init # 在容器内运行一个 init 来转发信号并收获进程
+-i, --interactive # 即使没有连接,也保持 STDIN 打开
+ --ip string # IPv4 地址(例如 172.30.100.104)
+ --ip6 string # IPv6 地址(例如,2001:db8::33)
+ --ipc string # 要使用的 IPC 模式
+ --isolation string # 容器隔离技术
+ --kernel-memory bytes # 内核内存限制
+-l, --label list # 在容器上设置元数据
+ --label-file list # 读入以行分隔的标签文件
+ --link list # 添加到另一个容器的链接
+ --link-local-ip list # 容器 IPv4/IPv6 链路本地地址
+ --log-driver string # 容器的日志记录驱动程序
+ --log-opt list # 日志驱动程序选项
+ --mac-address string # 容器 MAC 地址(例如 92:d0:c6:0a:29:33)
+-m, --memory bytes # 内存限制
+ --memory-reservation bytes # 内存软限制
+ --memory-swap bytes # 交换限制等于内存加上交换:'-1' 启用无限交换
+ --memory-swappiness int # 调整容器内存交换(0 到 100)(默认 -1)
+ --mount mount # 将文件系统挂载附加到容器
+ --name string # 为容器分配名称
+ --network network # 将容器连接到网络
+ --network-alias list # 为容器添加网络范围的别名
+ --no-healthcheck # 禁用任何容器指定的 HEALTHCHECK
+ --oom-kill-disable # 禁用 OOM 杀手
+ --oom-score-adj int # 调整主机的 OOM 首选项(-1000 到 1000)
+ --pid string # 要使用的 PID 命名空间
+ --pids-limit int # 调整容器 pids 限制(设置 -1 表示无限制)
+ --platform string # 如果服务器支持多平台,则设置平台
+ --privileged # 授予此容器扩展权限
+-p, --publish list # 将容器的端口发布到主机
+-P, --publish-all # 将所有暴露的端口发布到随机端口
+ --pull string # 创建前拉取镜像("always"|"missing"|"never")(默认"missing")
+ --read-only # 将容器的根文件系统挂载为只读
+ --restart string # 容器退出时应用的重启策略(默认“否”)
+ --rm # 容器退出时自动移除
+ --runtime string # 用于此容器的运行时
+ --security-opt list # 安全选项
+ --shm-size bytes # /dev/shm 的大小
+ --stop-signal string # 停止容器的信号(默认“SIGTERM”)
+ --stop-timeout int # 停止容器的超时(以秒为单位)
+ --storage-opt list # 容器的存储驱动程序选项
+ --sysctl map # Sysctl 选项(默认 map[])
+ --tmpfs list # 挂载 tmpfs 目录
+-t, --tty # 分配一个伪 TTY
+ --ulimit ulimit # ulimit 选项(默认 [])
+-u, --user string # 用户名或 UID(格式:[:])
+ --userns string # 要使用的用户命名空间
+ --uts string # 要使用的 UTS 命名空间
+-v, --volume list # 绑定挂载卷
+ --volume-driver string # 容器的可选卷驱动程序
+ --volumes-from list # 从指定容器挂载卷
+-w, --workdir string # 容器内的工作目录
+```
+
+## 实例
+
+介绍几个常用场景:Docker Hub镜像市场相关,镜像仓库命令。
+
+1、下载docker hub镜像市场中的镜像。
+
+```bash
+docker pull user/image
+```
+
+2、在 docker hub 中搜索镜像。
+
+```bash
+# 注意需要下载镜像才能使用
+docker search search_word
+```
+
+3、向 docker hub 进行身份验证。
+
+```bash
+docker login
+```
+
+4、将镜像上传到 docker hub。
+
+```bash
+docker push user/image
+```
+
+
+## docker network
+## 语法
+
+```
+docker network [COMMAND]
+```
+
+## COMMAND
+
+### docker network connect
+将容器连接到网络。您可以按名称或ID连接容器。连接后,容器可以与同一网络中的其他容器通信。
+
+```shell
+docker network connect [OPTIONS] NETWORK CONTAINER
+```
+
+#### 选项参数
+
+```shell
+--alias 为容器添加网络范围的别名
+--driver-opt 网络的驱动程序选项
+--ip IPv4地址(例如172.30.100.104)
+--ip6 IPv6地址(例如2001:db8 :: 33)
+--link 将链接添加到另一个容器(建议不用,后期应该会删除的)
+--link-local-ip 为容器添加本地链接地址
+```
+
+### docker network disconnect
+断开容器与网络的连接
+
+```shell
+docker network disconnect [OPTIONS] NETWORK CONTAINER
+```
+
+#### 选项参数
+
+```shell
+-f,--force 强制容器断开网络连接
+```
+
+### docker network create
+创建一个新的网络
+
+```shell
+docker network create [OPTIONS] NETWORK
+```
+
+#### 选项参数
+
+```shell
+--attachable API 1.25+启用手动容器附件
+--aux-address 网络驱动程序使用的辅助IPv4或IPv6地址
+--config-from API 1.30+从中复制配置的网络
+--config-only API 1.30+创建仅配置网络
+-d,--driver bridge 驱动程序来管理网络
+--gateway 主子网的IPv4或IPv6网关
+--ingress API 1.29+创建群集路由网状网络
+--internal 限制外部访问网络
+--ip-range 从子范围分配容器ip
+--ipam-driver IP地址管理驱动程序
+--ipam-opt 设置IPAM驱动程序特定选项
+--ipv6 启用IPv6网络
+--label 在网络上设置元数据
+-o,--opt 设置驱动程序特定选项
+--scope API 1.30+控制网络范围
+--subnet 代表网段的CIDR格式的子网
+```
+
+### docker network inspect
+返回有关一个或多个网络的信息。默认情况下,此命令将所有结果呈现在JSON对象中。
+
+```shell
+docker network inspect [OPTIONS] NETWORK [NETWORK...]
+```
+
+#### 选项参数
+
+```shell
+-f,--format 使用给定的Go模板格式化输出
+-v,--verbose 详细输出以进行诊断
+```
+
+### docker network ls
+列出引擎daemon知道的所有网络。这包括跨群集中多个主机的网络
+
+```shell
+docker network ls [OPTIONS]
+```
+
+#### 选项参数
+
+```shell
+-f,--filter 提供过滤器值(例如"driver = bridge")
+--format 使用Go模板的精美印刷网络
+--no-trunc 不要截断输出
+-q,--quiet 仅显示网络ID
+```
+
+### docker network prune
+删除所有未使用的网络。未使用的网络是未被任何正在使用的容器引用的网络()。
+
+```shell
+docker network prune [OPTIONS]
+```
+
+#### 选项参数
+
+```shell
+--filter 提供过滤器值(例如'until =')
+-f,--force 不提示确认
+```
+### docker network rm
+按名称或标识符删除一个或多个网络。要删除网络,必须首先断开连接到它的所有容器。
+
+```shell
+docker network rm NETWORKID [NETWORKID...]
+```
+
+## 官网
+
+更多安装使用方法可以访问学习:https://wangchujiang.com/reference/docs/docker.html
+由上海 屠天煜编写
diff --git a/command/domainname.md b/command/domainname.md
index a049411f96a..7acccdb7b9d 100644
--- a/command/domainname.md
+++ b/command/domainname.md
@@ -7,24 +7,24 @@ domainname
**domainname命令** 用于显示和设置系统的NIS域名。
-### 语法
+### 语法
```shell
domainname(选项)(参数)
```
-### 选项
+### 选项
```shell
-v:详细信息模式;
-F:指定读取域名信息的文件。
```
-### 参数
+### 参数
NIS域名:指定要设置的NIS域名。
-### 实例
+### 实例
```shell
[root@AY1307311912260196fcZ ~]# domainname -v
@@ -39,4 +39,3 @@ www.jsdig.com
```
-
\ No newline at end of file
diff --git a/command/dos2unix.md b/command/dos2unix.md
index 389901fb6e2..fcf64460c58 100644
--- a/command/dos2unix.md
+++ b/command/dos2unix.md
@@ -64,4 +64,3 @@ dos2unix -k -n oldfile newfile
find -type f | xargs dos2unix
```
-
\ No newline at end of file
diff --git a/command/dpkg-deb.md b/command/dpkg-deb.md
index e1ccfc34488..b8ff7ec24ec 100644
--- a/command/dpkg-deb.md
+++ b/command/dpkg-deb.md
@@ -7,13 +7,13 @@ Debian Linux下的软件包管理工具
**dpkg-deb命令** 是Debian Linux下的软件包管理工具,它可以对软件包执行打包和解包操作以及提供软件包信息。
-### 语法
+### 语法
```shell
dpkg-deb(选项)(参数)
```
-### 选项
+### 选项
```shell
-c:显示软件包中的文件列表;
@@ -27,11 +27,11 @@ dpkg-deb(选项)(参数)
-b:创建debian软件包。
```
-### 参数
+### 参数
文件:指定要操作的“.deb”软件包的全名或软件名。
-### 实例
+### 实例
解压程序文件:
@@ -58,4 +58,3 @@ dpkg-deb -c demo.deb
```
-
\ No newline at end of file
diff --git a/command/dpkg-divert.md b/command/dpkg-divert.md
index 7c1ab4f46c1..d17dc5d2a42 100644
--- a/command/dpkg-divert.md
+++ b/command/dpkg-divert.md
@@ -7,13 +7,13 @@ Debian Linux中创建并管理一个转向列表
**dpkg-divert命令** 是Debian Linux中创建并管理一个转向(diversion)列表,其使得安装文件的默认位置失效的工具。
-### 语法
+### 语法
```shell
dpkg-divert(选项)(参数)
```
-### 选项
+### 选项
```shell
--add:添加一个转移文件;
@@ -23,11 +23,11 @@ dpkg-divert(选项)(参数)
--quidet:安静模式。
```
-### 参数
+### 参数
文件:指定转移文件名。
-### 实例
+### 实例
指定软件包wibble安装时,写入`/usr/bin/example.foo`,而不是`/usr/bin/example`:
@@ -54,4 +54,3 @@ dpkg-divert --divert /usr/bin/example.foo --rename /usr/bin/example
```
-
\ No newline at end of file
diff --git a/command/dpkg-preconfigure.md b/command/dpkg-preconfigure.md
index a566ca1bda4..04946978f1f 100644
--- a/command/dpkg-preconfigure.md
+++ b/command/dpkg-preconfigure.md
@@ -7,13 +7,13 @@ Debian Linux中软件包安装之前询问问题
**dpkg-preconfigure命令** 用于在Debian Linux中软件包安装之前询问问题。
-### 语法
+### 语法
```shell
dpkg-preconfigure(选项)(参数)
```
-### 选项
+### 选项
```shell
-f:选择使用的前端;
@@ -21,11 +21,11 @@ dpkg-preconfigure(选项)(参数)
--apt:在apt模式下运行。
```
-### 参数
+### 参数
软件包:指定“.deb”软件包。
-### 实例
+### 实例
导入debconf模板:
@@ -34,4 +34,3 @@ dpkg-preconfigure /var/cache/apt/archives/mysql-server-5.5*.deb
```
-
\ No newline at end of file
diff --git a/command/dpkg-query.md b/command/dpkg-query.md
index 37134031641..33f848d8bfa 100644
--- a/command/dpkg-query.md
+++ b/command/dpkg-query.md
@@ -7,13 +7,13 @@ Debian Linux中软件包的查询工具
**dpkg-query命令** 是Debian Linux中软件包的查询工具,它从dpkg软件包数据库中查询并辨识软件包的信息。
-### 语法
+### 语法
```shell
dpkg-query(选项)(参数)
```
-### 选项
+### 选项
```shell
-l:列出符合匹配模式的软件包;
@@ -25,11 +25,11 @@ dpkg-query(选项)(参数)
-p:显示软件包的细节。
```
-### 参数
+### 参数
软件包名称:指定需要查询的软件包。
-### 实例
+### 实例
查找文件file1在哪个包里安装:
@@ -68,4 +68,3 @@ dpkg-query -W -f='${Status} ${Version}\n' apache-perl
```
-
\ No newline at end of file
diff --git a/command/dpkg-reconfigure.md b/command/dpkg-reconfigure.md
index ed9fd967fd2..ad4221b8424 100644
--- a/command/dpkg-reconfigure.md
+++ b/command/dpkg-reconfigure.md
@@ -9,13 +9,13 @@ Debian Linux中重新配制一个已经安装的软件包
当用户需要再次对软件包配置的时候,可以使用dpkg-reconfigure命令来对指定的软件包进行配置。
-### 语法
+### 语法
```shell
dpkg-reconfigure(选项)(参数)
```
-### 选项
+### 选项
```shell
-a:重新配置所有的软件包;
@@ -28,11 +28,11 @@ dpkg-reconfigure(选项)(参数)
--terse:开启简要模式。
```
-### 参数
+### 参数
软件包名:需要重新配置的已安装的软件包。
-### 实例
+### 实例
用于配置语言:
@@ -41,4 +41,3 @@ sudo dpkg-reconfigure locales
```
-
\ No newline at end of file
diff --git a/command/dpkg-split.md b/command/dpkg-split.md
index 328dcad8763..262e51ec4fe 100644
--- a/command/dpkg-split.md
+++ b/command/dpkg-split.md
@@ -7,13 +7,13 @@ Debian Linux中将大软件包分割成小包
**dpkg-split命令** 用来将Debian Linux中的大软件包分割成小软件包,它还能够将已分割的文件进行合并。
-### 语法
+### 语法
```shell
dpkg-split(选项)(参数)
```
-### 选项
+### 选项
```shell
-S:设置分割后的每个小文件最大尺寸(以字节为单位);
@@ -24,11 +24,11 @@ dpkg-split(选项)(参数)
-dscard<文件名>:忽略不匹配的部分。
```
-### 参数
+### 参数
软件包:指定需要分割的“.deb”软件包。
-### 实例
+### 实例
把foo.deb分割出N个大小为460KB的文件:
@@ -43,4 +43,3 @@ dpkg-split -j "foo*"
```
-
\ No newline at end of file
diff --git a/command/dpkg-statoverride.md b/command/dpkg-statoverride.md
index 75f148635e7..0fcec1f86e7 100644
--- a/command/dpkg-statoverride.md
+++ b/command/dpkg-statoverride.md
@@ -7,13 +7,13 @@ Debian Linux中覆盖文件的所有权和模式
**dpkg-statoverride命令** 用于Debian Linux中覆盖文件的所有权和模式,让dpkg于包安装时使得文件所有权与模式失效。
-### 语法
+### 语法
```shell
dpkg-statoverride(选项)
```
-### 选项
+### 选项
```shell
-add:为文件添加一个改写;
@@ -22,7 +22,7 @@ dpkg-statoverride(选项)
--update:如果文件存在,则立刻执行改写操作。
```
-### 实例
+### 实例
修改文件夹的权限属性:
@@ -43,4 +43,3 @@ sudo dpkg-statoverride --remove /usr/bin/wall
```
-
\ No newline at end of file
diff --git a/command/dpkg-trigger.md b/command/dpkg-trigger.md
index 5f480ad2554..8ac8054f8e5 100644
--- a/command/dpkg-trigger.md
+++ b/command/dpkg-trigger.md
@@ -7,13 +7,13 @@ Debian Linux下的软件包触发器
**dpkg-trigger命令** 是Debian Linux下的软件包触发器。
-### 语法
+### 语法
```shell
dpkg-trigger(选项)(参数)
```
-### 选项
+### 选项
```shell
--check-supported:检查运行的dpkg是否支持触发器,返回值为0,则支持触发器。
@@ -23,9 +23,8 @@ dpkg-trigger(选项)(参数)
--by-package=<软件包>:覆盖触发器等待者。
```
-### 参数
+### 参数
触发器名:指定触发器名称。
-
\ No newline at end of file
diff --git a/command/dpkg.md b/command/dpkg.md
index f6be8a457fb..7c65c0ebb09 100644
--- a/command/dpkg.md
+++ b/command/dpkg.md
@@ -7,13 +7,13 @@ Debian Linux系统上安装、创建和管理软件包
**dpkg命令** 是Debian Linux系统用来安装、创建和管理软件包的实用工具。
-### 语法
+### 语法
```shell
dpkg(选项)(参数)
```
-### 选项
+### 选项
```shell
-i:安装软件包;
@@ -26,11 +26,11 @@ dpkg(选项)(参数)
--confiugre:配置软件包。
```
-### 参数
+### 参数
Deb软件包:指定要操作的.deb软件包。
-### 实例
+### 实例
```shell
dpkg -i package.deb # 安装包
@@ -46,4 +46,3 @@ dpkg --configure package # 配置包
```
-
\ No newline at end of file
diff --git a/command/dris.md b/command/dris.md
index a85e76345e8..530bba5be83 100644
--- a/command/dris.md
+++ b/command/dris.md
@@ -7,13 +7,13 @@ dris
**dris命令** 用于显示和清空目录堆栈中的内容。
-### 语法
+### 语法
```shell
dris(选项)
```
-### 选项
+### 选项
```shell
+n:显示从左边算起第n笔的目录;
@@ -22,4 +22,3 @@ dris(选项)
```
-
\ No newline at end of file
diff --git a/command/dstat.md b/command/dstat.md
index 0a54a916d3a..7ace67db6bb 100644
--- a/command/dstat.md
+++ b/command/dstat.md
@@ -7,7 +7,7 @@ dstat
**dstat命令** 是一个用来替换vmstat、iostat、netstat、nfsstat和ifstat这些命令的工具,是一个全能系统信息统计工具。与sysstat相比,dstat拥有一个彩色的界面,在手动观察性能状况时,数据比较显眼容易观察;而且dstat支持即时刷新,譬如输入`dstat 3`即每三秒收集一次,但最新的数据都会每秒刷新显示。和sysstat相同的是,dstat也可以收集指定的性能资源,譬如`dstat -c`即显示CPU的使用情况。
-### 下载安装
+### 下载安装
**方法一**
@@ -24,7 +24,7 @@ wget http://dag.wieers.com/rpm/packages/dstat/dstat-0.6.7-1.rh7.rf.noarch.rpm
rpm -ivh dstat-0.6.7-1.rh7.rf.noarch.rpm
```
-### 使用说明
+### 使用说明
安装完后就可以使用了,dstat非常强大,可以实时的监控cpu、磁盘、网络、IO、内存等使用情况。
@@ -49,13 +49,13 @@ usr sys idl wai hiq siq| read writ| recv send| in out | int csw
其他的都很好理解。
-### 语法
+### 语法
```shell
dstat [-afv] [options..] [delay [count]]
```
-### 常用选项
+### 常用选项
```shell
-c:显示CPU系统占用,用户占用,空闲,等待,中断,软件中断等信息。
@@ -81,7 +81,7 @@ dstat [-afv] [options..] [delay [count]]
当然dstat还有很多更高级的用法,常用的基本这些选项,更高级的用法可以结合man文档。
-### 实例
+### 实例
如想监控swap,process,sockets,filesystem并显示监控的时间:
@@ -130,4 +130,3 @@ internal:
dstat命令的基本用法就说到这里,更多用法有待摸索,如果您需要补充内容请给我们发邮件,谢谢!
-
\ No newline at end of file
diff --git a/command/du.md b/command/du.md
index 5de1256ed3b..7a47fcd0831 100644
--- a/command/du.md
+++ b/command/du.md
@@ -16,92 +16,87 @@ du [选项][文件]
### 选项
```shell
--a或-all 显示目录中个别文件的大小。
--b或-bytes 显示目录或文件大小时,以byte为单位。
--c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
--k或--kilobytes 以KB(1024bytes)为单位输出。
--m或--megabytes 以MB为单位输出。
--s或--summarize 仅显示总计,只列出最后加总的值。
--h或--human-readable 以K,M,G为单位,提高信息的可读性。
--x或--one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
--L<符号链接>或--dereference<符号链接> 显示选项中所指定符号链接的源文件大小。
--S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小。
--X<文件>或--exclude-from=<文件> 在<文件>指定目录或文件。
---exclude=<目录或文件> 略过指定的目录或文件。
--D或--dereference-args 显示指定符号链接的源文件大小。
--H或--si 与-h参数相同,但是K,M,G是以1000为换算单位。
--l或--count-links 重复计算硬件链接的文件。
+-a, --all 显示目录中个别文件的大小。
+-B, --block-size=大小 使用指定字节数的块
+-b, --bytes 显示目录或文件大小时,以byte为单位。
+-c, --total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
+-D, --dereference-args 显示指定符号链接的源文件大小。
+-d, --max-depth=N 限制文件夹深度
+-H, --si 与-h参数相同,但是K,M,G是以1000为换算单位。
+-h, --human-readable 以K,M,G为单位,提高信息的可读性。
+-k, --kilobytes 以KB(1024bytes)为单位输出。
+-l, --count-links 重复计算硬件链接的文件。
+-m, --megabytes 以MB为单位输出。
+-L<符号链接>, --dereference<符号链接> 显示选项中所指定符号链接的源文件大小。
+-P, --no-dereference 不跟随任何符号链接(默认)
+-0, --null 将每个空行视作0 字节而非换行符
+-S, --separate-dirs 显示个别目录的大小时,并不含其子目录的大小。
+-s, --summarize 仅显示总计,只列出最后加总的值。
+-x, --one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
+-X<文件>, --exclude-from=<文件> 在<文件>指定目录或文件。
+--apparent-size 显示表面用量,而并非是磁盘用量;虽然表面用量通常会小一些,但有时它会因为稀疏文件间的"洞"、内部碎片、非直接引用的块等原因而变大。
+--files0-from=F 计算文件F中以NUL结尾的文件名对应占用的磁盘空间如果F的值是"-",则从标准输入读入文件名
+--exclude=<目录或文件> 略过指定的目录或文件。
+--max-depth=N 显示目录总计(与--all 一起使用计算文件)当N为指定数值时计算深度为N,等于0时等同--summarize
+--si 类似-h,但在计算时使用1000 为基底而非1024
+--time 显示目录或该目录子目录下所有文件的最后修改时间
+--time=WORD 显示WORD时间,而非修改时间:atime,access,use,ctime 或status
+--time-style=样式 按照指定样式显示时间(样式解释规则同"date"命令):full-iso,long-iso,iso,+FORMAT
+--help 显示此帮助信息并退出
+--version 显示版本信息并退出
```
### 实例
-显示目录或者文件所占空间:
-
-```shell
-root@localhost [test]# du
-608 ./test6
-308 ./test4
-4 ./scf/lib
-4 ./scf/service/deploy/product
-4 ./scf/service/deploy/info
-12 ./scf/service/deploy
-16 ./scf/service
-4 ./scf/doc
-4 ./scf/bin
-32 ./scf
-8 ./test3
-1288 .
+文件从大到小排序
```
-
-只显示当前目录下面的子目录的目录大小和当前目录的总的大小,最下面的1288为当前目录的总大小
-
-显示指定文件所占空间:
-
-```shell
-[root@localhost test]# du log2012.log
-300 log2012.log
+ubuntu@VM-0-14-ubuntu:~/git-work/linux-command$ du -sh * |sort -rh
+2.9M command
+1.9M assets
+148K template
+72K package-lock.json
+52K dist
+28K build
+16K README.md
+4.0K renovate.json
+4.0K package.json
+4.0K LICENSE
```
-查看指定目录的所占空间:
+只显示当前目录下子目录的大小。
```shell
-[root@localhost test]# du scf
-4 scf/lib
-4 scf/service/deploy/product
-4 scf/service/deploy/info
-12 scf/service/deploy
-16 scf/service
-4 scf/doc
-4 scf/bin
-32 scf
+ubuntu@VM-0-14-ubuntu:~/git-work/linux-command$ du -sh ./*/
+1.9M ./assets/
+28K ./build/
+2.9M ./command/
+52K ./dist/
+148K ./template/
```
-显示多个文件所占空间:
+查看指定目录下文件所占的空间:
```shell
-[root@localhost test]# du log30.tar.gz log31.tar.gz
-4 log30.tar.gz
-4 log31.tar.gz
+ubuntu@VM-0-14-ubuntu:~/git-work/linux-command/assets$ du ./*
+144 ./alfred.png
+452 ./chrome-extensions.gif
+4 ./dash-icon.png
+1312 ./Linux.gif
+16 ./qr.png
```
只显示总和的大小:
```shell
-[root@localhost test]# du -s
-1288 .
-
-[root@localhost test]# du -s scf
-32 scf
-
-[root@localhost test]# cd ..
-[root@localhost soft]# du -s test
-1288 test
+ubuntu@VM-0-14-ubuntu:~/git-work/linux-command/assets$ du -s .
+1932 .
```
显示总和的大小且易读:
```shell
-du -sh $dir
+ubuntu@VM-0-14-ubuntu:~/git-work/linux-command/assets$ du -sh .
+1.9M .
```
-
\ No newline at end of file
+
diff --git a/command/dump.md b/command/dump.md
index cdbec3dc4f4..7b19e1f5cd6 100644
--- a/command/dump.md
+++ b/command/dump.md
@@ -7,13 +7,13 @@ dump
**dump命令** 用于备份ext2或者ext3文件系统。可将目录或整个文件系统备份至指定的设备,或备份成一个大文件。
-### 语法
+### 语法
```shell
dump(选项)(参数)
```
-### 选项
+### 选项
```shell
-0123456789:备份的层级;
@@ -31,11 +31,11 @@ dump(选项)(参数)
-W:显示需要备份的文件及其最后一次备份的层级、时间与日期。
```
-### 参数
+### 参数
备份源:指定要备份的文件、目录或者文件系统。
-### 实例
+### 实例
将`/home`目录所有内容备份到`/tmp/homeback.bak`文件中,备份层级为`0`并在`/etc/dumpdates`中记录相关信息:
@@ -52,4 +52,3 @@ dump -1u -f /tmp/homeback.bak /home
通过dump命令的备份层级,可实现完整+增量备份、完整+差异备份,在配合crontab可以实现无人值守备份。
-
\ No newline at end of file
diff --git a/command/e2fsck.md b/command/e2fsck.md
index e557f5c1c16..603419d3459 100644
--- a/command/e2fsck.md
+++ b/command/e2fsck.md
@@ -17,13 +17,13 @@ e2fsck执行后的传回值及代表意义如下:
* 16 使用的语法发生错误。
* 128 共享的函数库发生错误。
-### 语法
+### 语法
```shell
e2fsck(选项)(参数)
```
-### 选项
+### 选项
```shell
-a:不询问使用者意见,便自动修复文件系统;
@@ -47,11 +47,11 @@ e2fsck(选项)(参数)
-y:采取非互动方式执行,所有的问题均设置以"yes"回答。
```
-### 参数
+### 参数
文件系统或者分区:指定文件系统或者分区所对应的设备文件名。
-### 实例
+### 实例
检查`/dev/sda1`是否有问题,如发现问题便自动修复:
@@ -62,4 +62,3 @@ e2fsck -a -y /dev/sda1
执行e2fsck或fsck前请先umount partition,否则有机会令档案系统毁损。如果需要对根目录`/`进行检查及修复,便需要进入singal user mode执行。
-
\ No newline at end of file
diff --git a/command/e2label.md b/command/e2label.md
index 76819d86a7b..3970782cfb5 100644
--- a/command/e2label.md
+++ b/command/e2label.md
@@ -7,18 +7,18 @@ e2label
**e2label命令** 用来设置第二扩展文件系统的卷标。
-### 语法
+### 语法
```shell
e2label(参数)
```
-### 参数
+### 参数
* 文件系统:指定文件系统所对应的设备文件名;
* 新卷标:为文件系统指定新卷标。
-### 实例
+### 实例
许多用了多年Linux的人可能也没有用过e2label命令。但是这个命令相当有效。在介绍它之前,我们先看看`/etc/fstab文`件:
@@ -43,4 +43,3 @@ label=/new /new ext3 defaults 1 1
下次重新起动机器的时候,就会把卷标为`/new`的分区挂接到`/new`上。
-
\ No newline at end of file
diff --git a/command/echo.md b/command/echo.md
index 3d54a3bb166..8707657f447 100644
--- a/command/echo.md
+++ b/command/echo.md
@@ -7,16 +7,18 @@ echo
**echo命令** 用于在shell中打印shell变量的值,或者直接输出指定的字符串。linux的echo命令,在shell编程中极为常用, 在终端下打印变量value的时候也是常常用到的,因此有必要了解下echo的用法echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。
-### 语法
+### 语法
```shell
echo(选项)(参数)
```
-### 选项
+### 选项
```shell
--e:激活转义字符。
+-e:启用转义字符。
+-E: 不启用转义字符(默认)
+-n: 结尾不换行
```
使用`-e`选项时,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
@@ -32,15 +34,39 @@ echo(选项)(参数)
- `\\` 插入\字符;
- `\nnn` 插入 `nnn`(八进制)所代表的ASCII字符;
-### 参数
+### 参数
变量:指定要打印的变量。
-### 实例
+### 实例
+
+```shell
+/bin/echo Hello, world!
+```
+
+在上面的命令中,两个词(Hello 和 world!)作为单独的参数传递给 echo,并且 echo 按顺序打印它们,用空格分隔
+
+下一个命令产生相同的输出:
+
+```shell
+/bin/echo 'Hello, World!'
+```
+
+但是,与第一个示例不同,上述命令提供了单引号字符串 'Hello, world!' 作为一个单一的一个参数。
+
+单引号将可靠地保护它免受 shell 解释,将特殊字符和转义序列逐字传递给 echo。
+
+例如,在 `bash shell` 中,变量名前面有一个美元符号 ($)。 在下一个命令中,引号内的变量名按字面意思处理; 在引号之外,它被转换为它的值。
+
+```shell
+/bin/echo 'The value of $PATH is' $PATH
+# The value of $PATH is
+# /home/hope/bin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
+```
用echo命令打印带有色彩的文字:
- **文字色:**
+**文字色:**
```shell
echo -e "\e[1;31mThis is red text\e[0m"
@@ -52,6 +78,17 @@ This is red text
颜色码:重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37
+```shell
+echo -e "\x1b[30;1m 0 黑色 \x1b[0m"\
+"\x1b[31;1m 1 红色 \x1b[0m"\
+"\x1b[32;1m 2 绿色 \x1b[0m"\
+"\x1b[33;1m 3 黄色 \x1b[0m"\
+"\x1b[34;1m 4 蓝色 \x1b[0m"\
+"\x1b[35;1m 5 洋红 \x1b[0m"\
+"\x1b[36;1m 6 青色 \x1b[0m"\
+"\x1b[37;1m 7 白色 \x1b[0m"
+```
+
**背景色** :
```shell
@@ -70,4 +107,9 @@ echo -e "\033[37;31;5mMySQL Server Stop...\033[39;49;0m"
红色数字处还有其他数字参数:0 关闭所有属性、1 设置高亮度(加粗)、4 下划线、5 闪烁、7 反显、8 消隐
-
+
+**输出内容结尾不添加换行符**
+
+```shell
+echo -n 'hello'
+```
diff --git a/command/ed.md b/command/ed.md
index 9bc2992cb96..d775741d12d 100644
--- a/command/ed.md
+++ b/command/ed.md
@@ -7,13 +7,13 @@ ed
**ed命令** 是单行纯文本编辑器,它有命令模式(command mode)和输入模式(input mode)两种工作模式。ed命令支持多个内置命令,常见内置命令如下:
-### 语法
+### 语法
```shell
ed(选项)(参数)
```
-### 选项
+### 选项
```shell
A # 切换到输入模式,在文件的最后一行之后输入新的内容;
@@ -33,9 +33,8 @@ q # 退出ed编辑器。
--version:显示版本信息。
```
-### 参数
+### 参数
文件:待编辑的文件。
-
\ No newline at end of file
diff --git a/command/edquota.md b/command/edquota.md
index 552b09cd106..0739ac31c7e 100644
--- a/command/edquota.md
+++ b/command/edquota.md
@@ -7,13 +7,13 @@ edquota
**edquota命令** 用于编辑指定用户或工作组磁盘配额。edquota预设会使用vi来编辑使用者或群组的quota设置。
-### 语法
+### 语法
```shell
edquota(选项)(参数)
```
-### 选项
+### 选项
```shell
-u:设置用户的quota,这是预设的参数;
@@ -22,11 +22,11 @@ edquota(选项)(参数)
-t:设置宽限期限。
```
-### 参数
+### 参数
用户:指定要编辑磁盘配额限制的用户名或者工作组。
-### 实例
+### 实例
**配置系统的磁盘配额支持**
@@ -200,4 +200,3 @@ Filesystem blocks quota limit grace file quota limit grace
2. 如果不带任何参数运行quota的话,查看的是你自己的配额使用情况。
-
\ No newline at end of file
diff --git a/command/egrep.md b/command/egrep.md
index 2c289865757..1b89654ea79 100644
--- a/command/egrep.md
+++ b/command/egrep.md
@@ -7,13 +7,13 @@ egrep
**egrep命令** 用于在文件内查找指定的字符串。egrep执行效果与`grep -E`相似,使用的语法及参数可参照grep指令,与grep的不同点在于解读字符串的方法。egrep是用extended regular expression语法来解读的,而grep则用basic regular expression 语法解读,extended regular expression比basic regular expression的表达更规范。
-### 语法
+### 语法
```shell
egrep(选项)(查找模式)(文件名1,文件名2,……)
```
-### 实例
+### 实例
显示文件中符合条件的字符。例如,查找当前目录下所有文件中包含字符串"Linux"的文件,可以使用如下命令:
@@ -40,5 +40,8 @@ testfile_2:Linux is a free unix-type opterating system
testfile_2:Linux test
```
+过滤注释行和空白行
-
\ No newline at end of file
+```shell
+egrep -v '^\s*(#|$)' filename
+```
diff --git a/command/eject.md b/command/eject.md
index 3ffe7dcfa8f..168f337baf4 100644
--- a/command/eject.md
+++ b/command/eject.md
@@ -11,13 +11,13 @@ eject允许可移动介质(典型是cd-ROM、软盘、磁带、或者JAZ以及
有四种不同的弹出的方法,具体要看设备是CD-ROM, SCSI设备,可移动软盘,还是磁带而定。默认的弹出会依次尝试所有四种方法,直到成功为止。如果设备当前是挂载上来的,那么在弹出前要先卸载。
-### 语法
+### 语法
```shell
eject(选项)(参数)
```
-### 选项
+### 选项
```shell
-a<开关>或--auto<开关>:控制设备的自动退出功能;
@@ -33,9 +33,8 @@ eject(选项)(参数)
-v或--verbose:执行时,显示详细的说明。
```
-### 参数
+### 参数
设备名:指定弹出的设备名称。
-
\ No newline at end of file
diff --git a/command/elinks.md b/command/elinks.md
index 4bfccf58a73..ad857f64723 100644
--- a/command/elinks.md
+++ b/command/elinks.md
@@ -7,13 +7,13 @@ elinks
**elinks命令** 能实现一个纯文本界面的WWW浏览器,操作方式与“lynx”类似。
-### 语法
+### 语法
```shell
elinks(选项)(参数)
```
-### 选项
+### 选项
```shell
-anonymous:是否使用匿名帐号方式;
@@ -24,9 +24,8 @@ elinks(选项)(参数)
-h:显示帮助信息。
```
-### 参数
+### 参数
URL:指定要访问的URL地址。
-
\ No newline at end of file
diff --git a/command/elm.md b/command/elm.md
index 2ad272b88b9..324e72222a1 100644
--- a/command/elm.md
+++ b/command/elm.md
@@ -7,13 +7,13 @@ elm
**elm命令** 是一个E-mail客户端管理程序,它提供了纯文本交互式全屏幕界面。
-### 语法
+### 语法
```shell
elm(选项)
```
-### 选项
+### 选项
```shell
-s<邮件主题>:指定新邮件的邮件主题;
@@ -26,4 +26,3 @@ elm(选项)
```
-
\ No newline at end of file
diff --git a/command/emacs.md b/command/emacs.md
index d42a8cf1764..de4b2b95962 100644
--- a/command/emacs.md
+++ b/command/emacs.md
@@ -7,13 +7,13 @@ emacs
**emacs命令** 是由GNU组织的创始人Richard Stallman开发的一个功能强大的全屏文本编辑器,它支持多种编程语言,具有很多优良的特性。有众多的系统管理员和软件开发者使用emacs。
-### 语法
+### 语法
```shell
emacs(选项)(参数)
```
-### 选项
+### 选项
```shell
+<行号>:启动emacs编辑器,并将光标移动到制定行号的行;
@@ -25,7 +25,7 @@ emacs(选项)(参数)
-batch:以批处理模式运行emacs编辑器。
```
-### 参数
+### 参数
文件:指定要编辑的文本文件。
@@ -158,4 +158,3 @@ C-x C-q : 修改buffer的只读属性
```
-
\ No newline at end of file
diff --git a/command/enable.md b/command/enable.md
index c8c20d0c6c0..359bf7c2e97 100644
--- a/command/enable.md
+++ b/command/enable.md
@@ -1,96 +1,110 @@
enable
===
-启动或关闭shell内建命令
+启动或禁用shell内建命令
-## 补充说明
-**enable命令** 用于临时关闭或者激活指定的shell内部命令。若要执行的文件名称与shell内建命令相同,可用`enable -n`来关闭shell内建命令。若不加`-n`选项,enable可重新启动关闭的命令。
+### 概要
-linux shell命令执行时,shell总是先在自己的shell builtin中查找该命令,如果找到则执行该命令;如果找不到该命令,则会从环境变量$PATH指定的路径中依次去查找待执行的命令。因为了解了这一点,所以看起来好像没有办法编写用户自己的命令来替代shell builtin命令。幸运的是,有了enable命令我们就能做到了。
+enable [-a] [-dnps] [-f filename] [name ...]
-### 语法
+### 主要用途
-```shell
-enable(选项)(参数)
-```
+- 禁用一到多个内建命令。
+
+- 启用一到多个内建命令。
+
+- 直接调用与禁用的内建命令同名且在`$PATH`路径下找到的外部命令。
+
+- 打印所有内建命令,无论是否禁用。
+- 打印处于启用状态的内建命令。
+- 打印处于禁用状态的内建命令。
+
+- 打印处于启用状态的posix标准内建命令。
+- 打印处于禁用状态的posix标准内建命令。
+- 打印posix标准内建命令,无论是否禁用。
+
+- 从动态库中加载内建命令。
+- 移除从动态库中加载的内建命令。
+
+#### 选项
-### 选项
```shell
--n:关闭指定的内部命令;
--a:显示所有激活的内部命令;
--f:从指定文件中读取内部命令。
+-a 打印所有内建命令,无论是否禁用。
+-d 移除从动态库中加载的内建命令。
+-n 禁用内建命令或显示已禁用的内建命令。
+-p 以可复用格式打印。
+-s 只显示处于启动状态的posix标准内建命令。
+-f 动态库中加载内建命令。
+-ns 打印处于禁用状态的posix标准内建命令。
+-as 打印posix标准内建命令,无论是否禁用。
```
-### 参数
+#### 参数
+
+filename:动态库文件名。
-内部命令:指定要关闭或激活的内部命令。
+name(可选):内建命令,可以为多个。
-### 实例
+#### 返回值
-使用enable命令显示所有激活的内部命令:
+enable返回成功,除非name不是内建命令或有错误发生。
+
+### 例子(以下内容限于篇幅不再列出返回值部分)
```shell
-[root@localhost ~]# enable -a
-enable .
-enable :
-enable alias
-enable bg
-enable bind
-enable break
-enable builtin
-enable caller
-enable cd
-enable command
-enable compgen
-enable complete
-enable continue
-enable declare
-enable dirs
-enable disown
-enable echo
-enable enable
-enable eval
-enable exec
-enable exit
-enable export
-enable false
-enable fc
-enable fg
-enable getopts
-enable hash
-enable help
-enable history
-enable jobs
-enable kill
-enable let
-enable local
-enable logout
-enable popd
-enable printf
-enable pushd
+# posix special builtin
+# 假设没有任何内建命令被禁用
+# 禁用两个posix标准内建命令
+enable -n set source
+# 打印处于禁用状态的posix标准内建命令
+enable -ns
+# 打印posix标准内建命令,无论是否禁用。
+enable -as
+# 打印处于启用状态的posix标准内建命令
+enable -s
+```
+
+```shell
+# 假设没有任何内建命令被禁用
+# 禁用一到多个内建命令
+enable -n echo pwd
+# 打印所有内建命令,无论是否禁用。
+enable -a
+# 打印处于启用状态的内建命令
+enable
+# 打印处于禁用状态的内建命令
+enable -n
+# 启用一到多个内建命令
enable pwd
-enable read
-enable readonly
-enable return
-enable set
-enable shift
-enable shopt
-enable source
-enable suspend
-enable test
-enable times
-enable trap
-enable true
-enable type
-enable typeset
-enable ulimit
-enable umask
-enable unalias
-enable unset
-enable wait
```
+### Q&A
+
+Q:请问`-f`,`-d`,`-p`的演示呢?
+
+A:说明一下,`-f`与`-d`限于个人能力没有找到合适的例子,如果您有更好的例子欢迎提pr;
+经过我验证`-p`选项是否使用好像没有区别,可以比较```enable -p|cat -A```和```enable|cat -A``` 有什么区别。(注:`cat -A`用于显示不可见字符)
+
+Q:是否可以禁用`enable`自己?之后还能禁用或启用内建命令吗?
+
+A:可以;不能。
+
+### 注意
+
+> linux shell命令执行时,shell总是先在自己的shell builtin中查找该命令,如果找到则执行该命令;如果找不到该命令,则会从环境变量`$PATH`指定的路径中依次去查找待执行的命令。看起来好像没有办法编写用户自己的命令来替代shell builtin命令。幸运的是,有了`enable`命令我们就能做到了。
+
+1. 关于同名命令调用的优先级的知识,请先参考`builtin`命令的*提示*部分,然后继续阅读下面部分;
+
+ 当内建命令`echo`没有禁用时,如果要调用外部命令`echo`,只能这样写`/usr/bin/echo`;
+
+ 当我们禁用了`echo`后,优先级顺序变成了这样:
+
+ 函数 > 外部命令
+
+ 如果执行命令的环境没有`echo`函数,那么调用的`echo`就是外部命令。
+
+2. 该命令是bash内建命令,相关的帮助信息请查看 `help` 命令。
+
-
\ No newline at end of file
diff --git a/command/env.md b/command/env.md
index 27caaf9c984..d6221e2a774 100644
--- a/command/env.md
+++ b/command/env.md
@@ -9,25 +9,25 @@ env
如果使用env命令在新环境中执行指令时,会因为没有定义环境变量"PATH"而提示错误信息"such file or directory"。此时,用户可以重新定义一个新的"PATH"或者使用绝对路径。
-### 语法
+### 语法
```shell
env(选项)(参数)
```
-### 选项
+### 选项
```shell
-i:开始一个新的空的环境;
-u<变量名>:从当前环境中删除指定的变量。
```
-### 参数
+### 参数
* 变量定义:定义在新的环境中变量,定义多个变量定义用空格隔开。格式为“变量名=值”;
* 指定:指定要执行的指令和参数。
-### 实例
+### 实例
```shell
[root@localhost ~]# env
@@ -54,4 +54,3 @@ _=/bin/env
```
-
\ No newline at end of file
diff --git a/command/ethtool.md b/command/ethtool.md
index 0751bf5de06..9692706d49a 100644
--- a/command/ethtool.md
+++ b/command/ethtool.md
@@ -7,7 +7,7 @@ ethtool
ethtool命令用于获取以太网卡的配置信息,或者修改这些配置。这个命令比较复杂,功能特别多。
-### 语法
+### 语法
```shell
ethtool [ -a | -c | -g | -i | -d | -k | -r | -S |] ethX
@@ -23,7 +23,7 @@ ethtool [-s] ethX [speed 10|100|1000] [duplex half|full] [autoneg on|off] [port
[wol p|u|m|b|a|g|s|d...] [sopass xx:yy:zz:aa:bb:cc] [msglvl N]
```
-### 选项
+### 选项
```shell
-a 查看网卡中 接收模块RX、发送模块TX和Autonegotiate模块的状态:启动on 或 停用off。
@@ -45,7 +45,7 @@ ethtool [-s] ethX [speed 10|100|1000] [duplex half|full] [autoneg on|off] [port
-s 修改网卡的部分配置,包括网卡速度、单工/全双工模式、mac地址等。
```
-### 数据来源
+### 数据来源
Ethtool命令显示的信息来源于网卡驱动层,即TCP/ip协议的链路层。该命令在Linux内核中实现的逻辑层次为:
@@ -53,155 +53,30 @@ Ethtool命令显示的信息来源于网卡驱动层,即TCP/ip协议的链路
网卡驱动负责实现(部分)这些函数,并将其封装入`ethtool_ops`结构体,为网络核心层提供统一的调用接口。因此,不同的网卡驱动会给应用层返回不同的信息。`Ethtool命令选项`、`struct ethtool_ops成员函数`、`Ethtool命令显示参数的来源`,三者间的对应关系如下表所示:
-
+| 命令选项 | struct ethtool\_ops成员函数 | Ethtool命令显示参数的来源(以网卡驱动BNX2为例) |
+| ----- | ----- | ----- |
+| 无 -s | get\_settingsget\_wol get\_msglevel get\_link set\_settings set\_wol set\_msglevel | 从网卡寄存器中获得网卡速度等信息,可配置。 |
+| -a -A | get\_pauseparam set\_pauseparam | 从网卡寄存器中获得Autonegotiate/RX/TX模块的状态:on oroff,可配置。 |
+| -c -C | get\_coalesceset\_coalesce | 从网卡寄存器中获得coalescing参数:TX/RX一个数据包后,推迟发生TX/RX中断的时间(us)/数据包个数。—减小该值可以提高网卡的响应时间。 当rx-usecs\&rx-frames同时被设为0时,RX中断停止。 当tx-usecs\&tx-frames同时被设为0时,TX中断停止。 |
+| -g -G | get\_ringparam set\_ringparam | 除当前TX/RX ring的值(从网卡寄存器中读取得到,可配置)外,其它为网卡bnx2自己固定的信息。 |
+| -k -K | get\_rx\_csumget\_tx\_csum get\_sg get\_tso set\_rx\_csum set\_tx\_csum set\_sg set\_tso | 显示信息从保存该状态的变量中读取得到,没有对应的寄存器。因此,TX/RX校验等模块一直处于on状态,实际上是无法修改的。 |
+| -i | get\_drvinfo\[self\_test\_count, get\_stats\_coun,t get\_regs\_len, get\_eeprom\_len] | 网卡bnx2自己固定的信息,如: ——————driver: bnx2 version: 1.4.30 firmware-version: 1.8.0.5 bus-info: 0000:09:00.0 ———————————– |
+| -d | get\_drvinfoget\_regs | 不支持,即bnx2中没有实现函数get\_regs。 |
+| -e -E | get\_eepromset\_eeprom | 不支持,即bnx2中没有实现函数get\_eeprom。 |
+| -r | nway\_reset | 配置网卡MII\_BMCR寄存器,重启Auto negotiation模块。 |
+| -p | phys\_id | 配置网卡BNX2\_EMAC\_LED寄存器,实现LED闪功能。 |
+| -t | self\_test | 通过配置网卡寄存器,逐一测试网卡的硬件模块:registers,memory,loopback,Link stat,interrupt。 |
+| -S | get\_ethtool\_stats | 显示信息来源于网卡驱动中的结构体变量stats\_blk。(网卡通过DMA方式,将寄存器BNX2\_HC\_STATISTICS \_ADDR\_L和BNX2\_HC\_STATISTICS\_ADDR\_H中的数据实时地读取到结构体变量struct statistics\_block \*stats\_blk中。) —显示的数据都是从网卡寄存器中统计得到的,各项的含义需查询网卡(芯片)手册。 |
-
-
-
-
-| 命令选项 |
-
-struct ethtool_ops成员函数 |
-
-Ethtool命令显示参数的来源(以网卡驱动BNX2为例) |
-
-
-
-
-
-| 无 -s |
-
-get_settingsget_wol get_msglevel get_link set_settings set_wol set_msglevel |
-
-从网卡寄存器中获得网卡速度等信息,可配置。 |
-
-
-
-
-
-| -a -A |
-
-get_pauseparam set_pauseparam |
-
-从网卡寄存器中获得Autonegotiate/RX/TX模块的状态:on oroff,可配置。 |
-
-
-
-
-
-| -c -C |
-
-get_coalesceset_coalesce |
-
-从网卡寄存器中获得coalescing参数:TX/RX一个数据包后,推迟发生TX/RX中断的时间(us)/数据包个数。—减小该值可以提高网卡的响应时间。 当rx-usecs&rx-frames同时被设为0时,RX中断停止。 当tx-usecs&tx-frames同时被设为0时,TX中断停止。 |
-
-
-
-
-
-| -g -G |
-
-get_ringparam set_ringparam |
-
-除当前TX/RX ring的值(从网卡寄存器中读取得到,可配置)外,其它为网卡bnx2自己固定的信息。 |
-
-
-
-
-
-| -k -K |
-
-get_rx_csumget_tx_csum get_sg get_tso set_rx_csum set_tx_csum set_sg set_tso |
-
-显示信息从保存该状态的变量中读取得到,没有对应的寄存器。因此,TX/RX校验等模块一直处于on状态,实际上是无法修改的。 |
-
-
-
-
-
-| -i |
-
-get_drvinfo[self_test_count, get_stats_coun,t get_regs_len, get_eeprom_len] |
-
-网卡bnx2自己固定的信息,如:
-——————————————————–
-driver: bnx2 version: 1.4.30 firmware-version: 1.8.0.5 bus-info: 0000:09:00.0
-——————————————————– |
-
-
-
-
-
-| -d |
-
-get_drvinfoget_regs |
-
-不支持,即bnx2中没有实现函数get_regs。 |
-
-
-
-
-
-| -e -E |
-
-get_eepromset_eeprom |
-
-不支持,即bnx2中没有实现函数get_eeprom。 |
-
-
-
-
-
-| -r |
-
-nway_reset |
-
-配置网卡MII_BMCR寄存器,重启Auto negotiation模块。 |
-
-
-
-
-
-| -p |
-
-phys_id |
-
-配置网卡BNX2_EMAC_LED寄存器,实现LED闪功能。 |
-
-
-
-
-
-| -t |
-
-self_test |
-
-通过配置网卡寄存器,逐一测试网卡的硬件模块:registers,memory,loopback,Link stat,interrupt。 |
-
-
-
-
-
-| -S |
-
-get_ethtool_stats |
-
-显示信息来源于网卡驱动中的结构体变量stats_blk。(网卡通过DMA方式,将寄存器BNX2_HC_STATISTICS _ADDR_L和BNX2_HC_STATISTICS_ADDR_H中的数据实时地读取到结构体变量struct statistics_block *stats_blk中。) —显示的数据都是从网卡寄存器中统计得到的,各项的含义需查询网卡(芯片)手册。 |
-
-
-
-
-
-
由上可见,ethtool命令用于显示/配置网卡硬件(寄存器)。
-### 实例
+### 实例
查看机器上网卡的速度:百兆还是千兆,请输入:
```shell
-ethool eth0
+ethtool eth0
```
操作完毕后,输出信息中`Speed:`这一项就指示了网卡的速度。停止网卡的发送模块TX,请输入:
@@ -241,4 +116,3 @@ ethtool -s eth0 speed 100
```
-
\ No newline at end of file
diff --git a/command/ex.md b/command/ex.md
index 05a443a3d3a..8b92b232a7e 100644
--- a/command/ex.md
+++ b/command/ex.md
@@ -7,15 +7,14 @@ ex
在 **ex** 模式下启动vim文本编辑器。ex执行效果如同`vi -E`,适用于法及参数可参照vi指令,如要从Ex模式回到普通模式,则在vim中输入`:vi`或`:visual`即可。
-### 语法
+### 语法
```shell
ex(参数)
```
-### 参数
+### 参数
文件:指定待编辑的文件。
-
\ No newline at end of file
diff --git a/command/exec.md b/command/exec.md
index e861f0a9169..798834ad288 100644
--- a/command/exec.md
+++ b/command/exec.md
@@ -7,23 +7,23 @@ exec
**exec命令** 用于调用并执行指令的命令。exec命令通常用在shell脚本程序中,可以调用其他的命令。如果在当前终端中使用命令,则当指定的命令执行完毕后会立即退出终端。
-### 语法
+### 语法
```shell
exec(选项)(参数)
```
-### 选项
+### 选项
```shell
-c:在空环境中执行指定的命令。
```
-### 参数
+### 参数
指令:要执行的指令和相应的参数。
-### 实例
+### 实例
首先使用echo命令将文本“Linux C++”进行输出,输入如下命令:
@@ -52,4 +52,3 @@ Linux C++ # 使用指定指令输出信息
通过比较两者执行后的结果来看,所实现的功能是相同的,即使用exec命令调用echo命令成功。
-
\ No newline at end of file
diff --git a/command/exit.md b/command/exit.md
index a168d764e82..7c48de8b314 100644
--- a/command/exit.md
+++ b/command/exit.md
@@ -1,23 +1,27 @@
exit
===
-退出当前的shell
+退出当前的shell。
-## 补充说明
-
-**exit命令** 同于退出shell,并返回给定值。在shell脚本中可以终止当前脚本执行。执行exit可使shell以指定的状态值退出。若不设置状态值参数,则shell以预设值退出。状态值0代表执行成功,其他值代表执行失败。
-
-### 语法
+## 概要
```shell
-exit(参数)
+exit [n]
```
-### 参数
+## 主要用途
+
+- 执行exit可使shell以指定的状态值退出。若不设置参数,则以最后一条命令的返回值作为exit的返回值退出。
+
+## 参数
+
+n(可选):指定的shell返回值(整数)。
+
+## 返回值
-返回值:指定shell返回值。
+返回值为你指定的参数n的值,如果你指定的参数大于255或小于0,那么会通过加或减256的方式使得返回值总是处于0到255之间。
-### 实例
+## 例子
退出当前shell:
@@ -26,6 +30,15 @@ exit(参数)
logout
```
+也可以使用`ctrl+d`退出当前终端,下面列出了打开或关闭该功能的方法:
+
+```shell
+# 打开ctrl+d退出终端
+set -o ignoreeof
+# 关闭ctrl+d退出终端
+set +o ignoreeof
+```
+
在脚本中,进入脚本所在目录,否则退出:
```shell
@@ -57,5 +70,8 @@ if [ "$EXCODE" == "0" ]; then
fi
```
+### 注意
+
+1. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。
+
-
\ No newline at end of file
diff --git a/command/expand.md b/command/expand.md
index 45ba5f716de..4b3498ccecd 100644
--- a/command/expand.md
+++ b/command/expand.md
@@ -7,21 +7,20 @@ expand
**expand命令** 用于将文件的制表符(TAB)转换为空白字符(space),将结果显示到标准输出设备。
-### 语法
+### 语法
```shell
expand(选项)(参数)
```
-### 选项
+### 选项
```shell
-t<数字>:指定制表符所代表的空白字符的个数,而不使用默认的8。
```
-### 参数
+### 参数
文件:指定要转换制表符为空白的文件。
-
\ No newline at end of file
diff --git a/command/export.md b/command/export.md
index a27847d66ee..a6a6f3cbd1e 100644
--- a/command/export.md
+++ b/command/export.md
@@ -1,33 +1,157 @@
export
===
-设置或显示系统环境变量
+为shell变量或函数设置导出属性。
-## 补充说明
+## 概要
-**export命令** 用于将shell变量输出为环境变量,或者将shell函数输出为环境变量。
+```
+export [-fn] [name[=word]]...
+export -p
+```
+
+## 主要用途
+
+- 定义一到多个变量并设置导出属性。
+- 修改一到多个变量的值并设置导出属性。
+- 删除一到多个变量的导出属性。
+- 显示全部拥有导出属性的变量。
+- 为一到多个已定义函数新增导出属性。
+- 删除一到多个函数的导出属性。
+- 显示全部拥有导出属性的函数。
+
+## 选项
+
+```shell
+-f:指向函数。
+-n:删除变量的导出属性。
+-p:显示全部拥有导出属性的变量。
+-pf:显示全部拥有导出属性的函数。
+-nf:删除函数的导出属性。
+--:在它之后的选项无效。
+```
+
+## 参数
+
+name(可选):变量名或已定义函数名。
+
+value(可选):变量的值。
+
+### 返回值
-一个变量创建时,它不会自动地为在它之后创建的shell进程所知。而命令export可以向后面的shell传递变量的值。当一个shell脚本调用并执 行时,它不会自动得到原为脚本(调用者)里定义的变量的访问权,除非这些变量已经被显式地设置为可用。export命令可以用于传递一个或多个变量的值到任何后继脚本。
+export返回true除非你提供了非法选项或非法名称。
-### 语法
+## 例子
```shell
-export(选项)(参数)
+# 显示全部拥有导出属性的变量。
+# export -p
+# export
+# 显示全部拥有导出属性的函数。
+# export -pf
```
-### 选项
+```shell
+# 首先删除要演示的变量名
+#unset a b
+# 定义变量的同时增加导出属性
+export a b=3
+# 当然也可以先定义后增加导出属性
+b=3
+export b
+
+# 修改拥有导出属性的变量的值
+export a=5 b=7
+# 当然也可以直接赋值修改
+a=5;b=7
+
+# 删除变量的导出属性
+export -n a b
+```
+
+
+```shell
+# 首先删除要演示的函数名
+unset func_1 func_2
+# 创建函数
+function func_1(){ echo '123'; }
+function func_2(){ echo '890'; }
+
+# 为已定义函数增加导出属性
+export -f func_1 func_2
+
+# 删除函数的导出属性
+export -fn a b
+```
```shell
--f:代表[变量名称]中为函数名称;
--n:删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中;
--p:列出所有的shell赋予程序的环境变量。
+# 添加环境变量(JAVA)到`~/.bashrc`
+PATH=/usr/local/jdk1.7.0/bin:$PATH
+# 添加当前位置到动态库环境变量
+export LD_LIBRARY_PATH=$(pwd):${LD_LIBRARY_PATH}
```
-### 参数
+## 错误用法
+
+- 对未定义的函数添加导出属性。
+- 对没有导出属性的函数/变量执行删除导出属性操作。
+- 在 `--` 后使用选项。
+
+## Q&A
-变量:指定要输出或者删除的环境变量。
+#### Q:对变量或函数设置导出属性有什么用?
-### 实例
+A:它们会成为环境变量,可以在脚本中访问它们,尤其是脚本中调用的子进程需要时。( **[参考链接4][4]** )
+
+#### Q:如果我编写的脚本修改了已有的环境变量的值,那么执行它会在当前终端生效吗?会影响之前以及之后打开的终端吗?
+
+A:只有通过`source`方式调用的脚本会生效,您可以查看`source`命令获得更多信息;其他方式只是在子shell中执行。
+之前的不会影响,之后的除非是修改了`~/.bashrc`这种启动终端时加载的脚本。( **[参考链接1][1]** )
+
+#### Q:我脚本文件中调用`~/.bashrc`中定义的函数和变量。为什么在新打开的终端中通过 `sh` 方式调用该脚本或直接运行
+
+这个当前用户有执行权限的脚本却不能使用这些函数和变量?
+A:请在`~/.bashrc`文件中增加export它们的语句。另请参阅 **知识点** 段落。
+
+#### Q:数组和关联数组也可以设置导出属性吗?
+
+A:是可以的(如果你的bash支持它们),不过有些问题( **[参考链接2][2]** )。
+
+#### Q:为什么我在查看变量或函数导出属性的时候显示的开头是`declare`?
+
+A:因为`declare`也能够设置变量或函数的导出属性,详见`declare`命令。
+
+### 注意
+
+1. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。
+
+### 知识点
+
+在`info bash`或 [bash在线文档](http://www.gnu.org/software/bash/manual/bash.html) 的
+ `3.7.3`节提到了shell执行环境,其中涉及变量和函数的内容如下
+
+> - shell parameters that are set by variable assignment or with set or inherited from the shell’s parent in the environment
+> - shell functions defined during execution or inherited from the shell’s parent in the environment
+
+那么第一句话中的参数又和变量有什么关系呢?在`3.4`节第一段中提到:
+
+> A variable is a parameter denoted by a name.
+
+变量是有名字的参数。
+
+那么子shell确实继承了父shell中带有导出属性的变量或函数。
+
+可参考链接: [执行脚本方式的区别](https://blog.csdn.net/soaringlee_fighting/article/details/78759448)
+
+
+### 参考链接
+
+1. [关于bashrc profile文件的讨论][1]
+2. [关于export数组的讨论][2]
+3. [export -pf用法][3]
+4. [环境变量和shell变量的区别][4]
+
+### 扩展阅读
一般来说,配置交叉编译工具链的时候需要指定编译工具的路径,此时就需要设置环境变量。查看已经存在的环境变量:
@@ -55,5 +179,9 @@ declare -x TERM="linux"
declare -x USER="root"
```
+[1]: https://www.cnblogs.com/hongzg1982/articles/2101792.html
+[2]: https://stackoverflow.com/questions/5564418/exporting-an-array-in-bash-script
+[3]: https://unix.stackexchange.com/questions/22796/can-i-export-functions-in-bash
+[4]: https://askubuntu.com/questions/26318/environment-variable-vs-shell-variable-whats-the-difference
+
-
\ No newline at end of file
diff --git a/command/exportfs.md b/command/exportfs.md
index e99ec2e64a6..0ba823a4b40 100644
--- a/command/exportfs.md
+++ b/command/exportfs.md
@@ -20,4 +20,3 @@ exportfs 命令用来管理当前NFS共享的文件系统列表。
```
-
\ No newline at end of file
diff --git a/command/expr.md b/command/expr.md
index df5e7313f11..78cf62d9a70 100644
--- a/command/expr.md
+++ b/command/expr.md
@@ -13,26 +13,26 @@ expr的常用运算符:
- 减法运算:`-`
- 乘法运算:`\*`
- 除法运算:`/`
-- 求摸(取余)运算:`%`
+- 取模(取余)运算:`%`
-### 语法
+### 语法
```shell
expr(选项)(参数)
```
-### 选项
+### 选项
```shell
--help:显示指令的帮助信息;
--version:显示指令版本信息。
```
-### 参数
+### 参数
表达式:要求值的表达式。
-### 实例
+### 实例
```shell
result=`expr 2 + 3`
@@ -40,4 +40,3 @@ result=$(expr $no1 + 5)
```
-
\ No newline at end of file
diff --git a/command/false.md b/command/false.md
new file mode 100644
index 00000000000..7a22bfb6d56
--- /dev/null
+++ b/command/false.md
@@ -0,0 +1,26 @@
+false
+===
+
+返回状态为失败。
+
+## 概要
+
+```shell
+false
+```
+
+## 主要用途
+
+- 用于和其他命令进行逻辑运算。
+
+## 返回值
+
+返回状态总是失败;返回值为1。
+
+
+### 注意
+
+1. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。
+
+
+
diff --git a/command/fc.md b/command/fc.md
index ef3d6ce97e0..d912c7c4c98 100644
--- a/command/fc.md
+++ b/command/fc.md
@@ -1,38 +1,56 @@
fc
===
-修改历史命令并执行
+显示历史列表中的命令或修改指定的历史命令并执行。
-## 补充说明
-
-**fc命令** 自动掉用vi编辑器修改已有历史命令,当保存时立即执行修改后的命令,也可以用来显示历史命令。fc命令编辑历史命令时,会自动调用vi编辑器。fc保存文件后,会自动执行所编辑过的命令。
-
-### 语法
+## 概要
```shell
-fc [-e 编辑器名] [-lnr] [起始] [终结]
-fc -s [模式=替换串] [命令]
+fc [-e ename] [-lnr] [first] [last]
+fc -s [pat=rep] [command]
```
-### 选项
+## 主要用途
+
+- 显示历史列表中的命令。
+
+- 编辑并重新执行历史列表的命令。
+
+## 选项
```shell
--l:显示历史命令;
--n:显示历史命令时,不显示编号;
--r:反序显示历史命令。
+-e ename 选择使用的编辑器,默认调用次序为环境变量`FCEDIT`、环境变量`EDITOR`、`vi`。
+-l 列出而不是编辑。
+-n 列出时不输出行号(需配合-l选项)。
+-r 倒序列出命令,最近执行的先列出(需配合-l选项)。
+-s [pat=rep] [command] command(未指定时为最后执行的命令)将在pat替换为rep后重新执行。
```
-### 参数
+## 参数
+
+first:可选;可以是字符串(以该字符串开头的最新命令)、数字(历史列表索引,负数代表当前命令号的偏移);未指定时设置为前一个命令并且偏移量为-16(最近的16条命令)。
+
+last:可选;可以是字符串(以该字符串开头的最新命令)、数字(历史列表索引,负数代表当前命令号的偏移);未指定时设置为参数first。
+
+## 返回值
-* 起始指令编号:指定要编辑的起始指令编号;
-* 结尾指令编号:指定要编辑的结尾指令编号。
+返回成功或执行命令的状态,当错误出现时返回非0值。
-### 实例
+## 例子
-使用该指令显示最近使用的10条历史命令,输入如下命令:
+替换命令参数:
```shell
-[root@localhost ~]# fc -l -10 #显示10条历史命令
+# 列出 ~ 目录
+ls ~
+# 替换 ~ 为 / ,替换后列出根目录,
+fc -s ~=/
+```
+
+显示最近使用的10条历史命令:
+
+```shell
+[root@localhost ~]# fc -l -10
1039 type -a grep
1040 export
1041 history 10
@@ -45,13 +63,18 @@ fc -s [模式=替换串] [命令]
1048 showkey -a
```
-第一列信息是历史命令的编号,第二列信息是历史命令的具体格式。若用户需要编辑第1040条历史命令时,则输入如下命令:
+编辑第1040条历史命令:
```shell
-fc 1040 #编辑第1040条历史命令
+[root@localhost ~]# fc 1040
```
-命令执行成功后,将自动调用vi编辑器编辑指定的命令,编辑完成后保存,会自动执行修改后的命令。当用户在vi编辑器中修改指令并保存后,被修改的命令会被自动调用并执行。
+
+### 注意
+
+1. 关闭终端后,历史列表将被写入历史文件`~/.bash_history`。
+2. 环境变量`FCEDIT`的值为`fc`默认的编辑器。
+3. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。
+
-
diff --git a/command/fdisk.md b/command/fdisk.md
index c42e63fcdbe..ca678e90394 100644
--- a/command/fdisk.md
+++ b/command/fdisk.md
@@ -7,30 +7,47 @@ fdisk
**fdisk命令** 用于观察硬盘实体使用情况,也可对硬盘分区。它采用传统的问答式界面,而非类似DOS fdisk的cfdisk互动式操作界面,因此在使用上较为不便,但功能却丝毫不打折扣。
-### 语法
+### 语法
```shell
-fdisk(选项)(参数)
+fdisk [选项] <磁盘> 更改分区表
+fdisk [选项] -l [<磁盘>...] 列出分区表
```
-### 选项
+### 选项
```shell
- -b <大小> 扇区大小(512、1024、2048或4096)
- -c[=<模式>] 兼容模式:“dos”或“nondos”(默认)
- -h 打印此帮助文本
- -u[=<单位>] 显示单位:“cylinders”(柱面)或“sectors”(扇区,默认)
- -v 打印程序版本
- -C <数字> 指定柱面数
- -H <数字> 指定磁头数
- -S <数字> 指定每个磁道的扇区数
+
+选项:
+ -b, --sectors-size <大小> 显示扇区计数和大小
+ -B, --protect-boot 创建新标签时不要擦除 bootbits
+ -c, --compatibility[=<模式>] 模式,为“dos”或“nondos”(默认)
+ -L, --color[=<时机>] 彩色输出(auto, always 或 never)默认启用颜色
+ -l, --list 显示分区并退出
+ -x, --list-details 类似 --list 但提供更多细节
+ -n, --noauto-pt 不要在空设备上创建默认分区表
+ -o, --output <列表> 输出列
+ -t, --type <类型> 只识别指定的分区表类型
+ -u, --units[=<单位>] 显示单位,“cylinders”柱面或“sectors”扇区(默认)
+ -s, --getsz 以 512-字节扇区显示设备大小[已废弃]
+ -b, --bytes 以字节为单位而非易读的格式来打印 SIZE
+ --lock[=<模式>] 使用独占设备锁(yes、no 或 nonblock)
+ -w, --wipe <模式> 擦除签名(auto, always 或 never)
+ -W, --wipe-partitions <模式> 擦除新分区的签名(auto, always 或 never)
+
+ -C, --cylinders <数字> 指定柱面数
+ -H, --heads <数字> 指定磁头数
+ -S, --sectors <数字> 指定每条磁道的扇区数
+
+ -h, --help 显示此帮助
+ -V, --version 显示版本
```
-### 参数
+### 参数
设备文件:指定要进行分区或者显示分区的硬盘设备文件。
-### 实例
+### 实例
首先选择要进行操作的磁盘:
@@ -318,4 +335,4 @@ proc /proc proc defaults 0 0
```
-
+
diff --git a/command/fg.md b/command/fg.md
index 80203158269..df4757627ef 100644
--- a/command/fg.md
+++ b/command/fg.md
@@ -1,37 +1,48 @@
fg
===
-将后台作业放到前台终端运行
+将后台作业移动到前台终端运行
-## 补充说明
+## 概要
-**fg命令** 用于将后台作业(在后台运行的或者在后台挂起的作业)放到前台终端运行。与bg命令一样,若后台任务中只有一个,则使用该命令时,可以省略任务号。
+```shell
+fg [job_spec ...]
+```
-在Linux系统中执行某些操作时候,有时需要将当前任务暂停调至后台,或有时须将后台暂停的任务重启开启并调至前台,这一序列的操作将会使用到 jobs、bg、和 fg 三个命令以及两个快捷键来完成。
+## 主要用途
-### 语法
+- 用于将后台作业(在后台运行的或者在后台挂起的作业)放到前台终端运行。
-```shell
-fg(参数)
-```
+- 若后台任务中只有一个,则使用该命令时可以省略任务号。
+
+## 参数
-### 参数
+job_spec(可选):指定要移动到前台执行的作业标识符,可以是一到多个。
-作业标识:指定要放到前台的作业标识号。
+## 返回值
-### 实例
+返回作业的执行状态,如果发生了错误返回失败。
-使用fg命令将任务号为1的任务从后台执行转换到前台执行,输入如下命令:
+## 例子
```shell
-fg 1 #将任务转换到前台执行
-```
+# 运行sleep命令,然后按下ctrl+z。
+sleep 60
+^Z
+[1]+ Stopped sleep 60
-执行上面的命令后,命令行窗口将显示如下信息:
+# 使用fg命令使得作业在前台运行。
+fg %1
-```shell
-find / -name password #前台执行命令
+# 返回信息:
+sleep 60
```
+### 注意
+
+1. `bash`的作业控制命令包括`bg fg kill wait disown suspend`。
+2. 该命令需要`set`选项`monitor`处于开启状态时才能执行;查看作业控制状态:输入`set -o`查看`monitor`行;执行`set -o monitor`或`set -m`开启该选项。
+3. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。
+
+
-
\ No newline at end of file
diff --git a/command/fgrep.md b/command/fgrep.md
index 73cf13aac2c..15bb38859c7 100644
--- a/command/fgrep.md
+++ b/command/fgrep.md
@@ -9,21 +9,21 @@ fgrep
fgrep 命令于 grep 和 egrep 命令不同,因为它搜索字符串而不是搜索匹配表达式的模式。fgrep 命令使用快速的压缩算法。`$, *, [, |, (, )`和`\`等字符串被 fgrep 命令按字面意思解释。这些字符并不解释为正则表达式,但它们在 grep 和 egrep 命令中解释为正则表达式。因为这些字符对于 shell 有特定的含义,完整的字符串应该加上单引号`‘ ... ’`。. 如果没有指定文件, fgrep 命令假定标准输入。一般,找到的每行都复制到标准输出中去。如果不止一个输入文件,则在找到的每行前打印文件名。
-1. fgrep 命令和带 -F 标志的 grep命令是一样的但出错和用法消息不同-s 标志功能也不同。
-2. 每行限制在 2048 个字节。
-3. 段落(-p 标志下)目前限制在5000个字符的长度。
-4. 不要在特定的文件中运行 grep 命令,因为会产生不可预料的结果。
-5. 输入行不能包含空字符。
-6. 输入文件应该以换行字符结尾。
-7. 虽然可以同时指定很多标志,但某些标志会覆盖其余的标志。例如,如果同时指定 -l 和 -n ,只有文件名写入到标准输出中去。
+1. fgrep 命令和带 -F 标志的 grep命令是一样的但出错和用法消息不同-s 标志功能也不同。
+2. 每行限制在 2048 个字节。
+3. 段落(-p 标志下)目前限制在5000个字符的长度。
+4. 不要在特定的文件中运行 grep 命令,因为会产生不可预料的结果。
+5. 输入行不能包含空字符。
+6. 输入文件应该以换行字符结尾。
+7. 虽然可以同时指定很多标志,但某些标志会覆盖其余的标志。例如,如果同时指定 -l 和 -n ,只有文件名写入到标准输出中去。
-### 语法
+### 语法
```shell
fgrep(选项)(参数)
```
-### 选项
+### 选项
```shell
-b:在找到的每行之前添加行所在的块编号。使用此标志有助于按照上下文查找磁盘块号码。-b 标志不能用于标准输入或者管道输入。
@@ -51,7 +51,7 @@ n:将文件中每行的相对行号置于行前。
>1 发现语法错误,或者文件不可访问(即使找到了匹配项)。
```
-### 实例
+### 实例
**搜索几个文件中的一个简单字符串:**
@@ -84,4 +84,3 @@ fgrep -l strcpy *.c
搜索当前目录下以 .c 结尾的文件,然后显示包含 strcpy 字符串的文件名。
-
\ No newline at end of file
diff --git a/command/figlet.md b/command/figlet.md
new file mode 100644
index 00000000000..00934f2c03b
--- /dev/null
+++ b/command/figlet.md
@@ -0,0 +1,160 @@
+figlet
+===
+
+字符串转为 “字画符”。
+
+## 补充说明
+
+将普通字符串转为有简单字符拼接而成的 “字画符”。
+
+## 安装
+
+Ubuntu 等系统
+
+```shell
+apt-get update
+apt-get install -y figlet
+```
+
+CentOS 等系统
+
+```shell
+yum install epel-release
+yum install -y figlet
+```
+
+## 语法
+
+```shell
+figlet [ message ] [ -option ]
+```
+
+## 参数
+
+message 是需要转换的字符串。
+当没有输入 message 时,会读取标准输入,因此可以配合管道符等使用。
+
+## 选项
+
+```shell
+-w 限制输出宽度,默认为 '80'
+-c 居中显示
+-f 指定字体,默认为 'standard'
+-k 保留字符之间的空隙
+-t 对齐宽度到当前终端的宽度,这个参数优先级比 -w 高
+-v 显示版本信息
+```
+
+## 返回值
+
+字符串,由简单字符拼接而成的 “字画符”。
+
+## 示例
+
+### 从参数输入
+
+```shell
+figlet 'Hello, World!'
+```
+
+```bash
+ _ _ _ _ __ __ _ _ _
+| | | | ___| | | ___ \ \ / /__ _ __| | __| | |
+| |_| |/ _ \ | |/ _ \ \ \ /\ / / _ \| '__| |/ _` | |
+| _ | __/ | | (_) | \ V V / (_) | | | | (_| |_|
+|_| |_|\___|_|_|\___( ) \_/\_/ \___/|_| |_|\__,_(_)
+```
+
+### 配合管道符输入
+
+```shell
+echo 'Hello, World!' | figlet
+```
+
+```bash
+ _ _ _ _ __ __ _ _ _
+| | | | ___| | | ___ \ \ / /__ _ __| | __| | |
+| |_| |/ _ \ | |/ _ \ \ \ /\ / / _ \| '__| |/ _` | |
+| _ | __/ | | (_) | \ V V / (_) | | | | (_| |_|
+|_| |_|\___|_|_|\___( ) \_/\_/ \___/|_| |_|\__,_(_)
+```
+
+### 限制宽度
+
+```shell
+figlet 'Hello, World!' -w 40
+```
+
+```bash
+ _ _ _ _
+| | | | ___| | | ___
+| |_| |/ _ \ | |/ _ \
+| _ | __/ | | (_) |
+|_| |_|\___|_|_|\___( )
+ |/
+__ __ _ _ _
+\ \ / /__ _ __| | __| | |
+ \ \ /\ / / _ \| '__| |/ _` | |
+ \ V V / (_) | | | | (_| |_|
+ \_/\_/ \___/|_| |_|\__,_(_)
+```
+
+### 居中显示
+
+```shell
+figlet 'Hello, World!' -w 40 -c
+```
+
+```bash
+ _ _ _ _
+ | | | | ___| | | ___
+ | |_| |/ _ \ | |/ _ \
+ | _ | __/ | | (_) |
+ |_| |_|\___|_|_|\___( )
+ |/
+ __ __ _ _ _
+ \ \ / /__ _ __| | __| | |
+ \ \ /\ / / _ \| '__| |/ _` | |
+ \ V V / (_) | | | | (_| |_|
+ \_/\_/ \___/|_| |_|\__,_(_)
+```
+
+### 指定字体
+
+```shell
+figlet 'Hello, World!' -w 40 -c -f slant
+```
+
+```bash
+ __ __ ____
+ / / / /__ / / /___
+ / /_/ / _ \/ / / __ \
+ / __ / __/ / / /_/ /
+ /_/ /_/\___/_/_/\____( )
+ |/
+ _ __ __ ____
+ | | / /___ _____/ /___/ / /
+ | | /| / / __ \/ ___/ / __ / /
+ | |/ |/ / /_/ / / / / /_/ /_/
+ |__/|__/\____/_/ /_/\__,_(_)
+```
+
+### 保留字符之间的空隙
+
+```shell
+figlet 'Hello, World!' -w 40 -c -k
+```
+
+```bash
+ _ _ _ _
+ | | | | ___ | || | ___
+ | |_| | / _ \| || | / _ \
+ | _ || __/| || || (_) |_
+ |_| |_| \___||_||_| \___/( )
+ |/
+ __ __ _ _ _
+ \ \ / /___ _ __ | | __| || |
+ \ \ /\ / // _ \ | '__|| | / _` || |
+ \ V V /| (_) || | | || (_| ||_|
+ \_/\_/ \___/ |_| |_| \__,_|(_)
+```
diff --git a/command/file.md b/command/file.md
index 7b43f99e251..4302bf03999 100644
--- a/command/file.md
+++ b/command/file.md
@@ -1,19 +1,19 @@
file
===
-用来探测给定文件的类型。
+用来探测给定文件的类型
## 补充说明
**file命令** 用来探测给定文件的类型。file命令对文件的检查分为文件系统、魔法幻数检查和语言检查3个过程。
-### 语法
+### 语法
```shell
file(选项)(参数)
```
-### 选项
+### 选项
```shell
-b:列出辨识结果时,不显示文件名称;
@@ -25,11 +25,11 @@ file(选项)(参数)
-z:尝试去解读压缩文件的内容。
```
-### 参数
+### 参数
文件:要确定类型的文件列表,多个文件之间使用空格分开,可以使用shell通配符匹配多个文件。
-### 实例
+### 实例
显示文件类型
@@ -67,4 +67,3 @@ lrwxrwxrwx 1 root root 10 08-13 00:11 /var/mail -> spool/mail
```
-
\ No newline at end of file
diff --git a/command/find.md b/command/find.md
index c8fee0080ac..96612ab8420 100644
--- a/command/find.md
+++ b/command/find.md
@@ -3,18 +3,43 @@ find
在指定目录下查找文件
+## 解释
+
+从每个指定的起始点 (目录) 开始,搜索以该点为根的目录树,并按照运算符优先级规则**从左至右**评估给定的表达式,直到结果确定,此时`find`会继续处理下一个文件名。
+
## 补充说明
-**find命令** 用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
+本文列出的选项指的是**表达式列表中的选项**。这些选项控制了`find`的行为,需在**最后一个路径名之后**立即指定。
+
+五个真实选项: `-H、-L、-P、-D 和 -O`。如果出现,**必须位于第一个路径名之前**。关于这部分内容本文不做描述,具体内容可参考[man7.org中的find](https://man7.org/linux/man-pages/man1/find.1.html#top_of_page)
-### 语法
+如果使用该命令时,不设置任何参数,则`find`命令将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部进行显示。等效于以下命令:
+```shell
+find . -print
+```
+
+## 语法
+
+```shell
+find [-H] [-L] [-P] [-D debugopts] [-Olevel] [起始点...] [表达式]
+```
+忽略真实选项后 (更为常见):
```shell
-find(选项)(参数)
+find [起始点...] [表达式]
```
-### 选项
+## 表达式分类
+起始点(列表)之后的部分是表达式。这是一种**查询规范**,描述了我们如何匹配文件(返回**真**或者**假**)以及对匹配到的文件进行何种操作。表达式由一系列元素组成:
+- 测试(Tests):测试返回一个真或假值,通常基于我们正在考虑的文件的某个属性。例如,`-empty`测试仅在当前文件为空时为真。
+- 操作(Actions):操作具有副作用(例如在标准输出上打印内容),并返回真或假,通常基于它们是否成功。例如,`-print`操作会在标准输出上打印当前文件的名称。
+- 全局(Global):全局选项影响命令行中任何部分指定的测试和操作的执行。全局选项始终返回真值。例如,`-depth`选项使find以深度优先的顺序遍历文件系统。
+- 位置(Positional):位置选项仅影响其后的测试或操作。位置选项始终返回真值。例如,`-regextype`选项是位置选项,用于指定命令行中后续正则表达式所使用的正则表达式方言。
+- 操作符(Operators):运算符将表达式中的其他项连接起来。例如,它们包括`-o`(表示逻辑或)和`-a`(表示逻辑与)。如果缺少运算符,则默认使用`-a`。
+## 表达式选项
+
+### 测试选项
```shell
-amin<分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算;
-anewer<参考文件或目录>:查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录;
@@ -22,65 +47,379 @@ find(选项)(参数)
-cmin<分钟>:查找在指定时间之时被更改过的文件或目录;
-cnewer<参考文件或目录>查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
-ctime<24小时数>:查找在指定时间之时被更改的文件或目录,单位以24小时计算;
--daystart:从本日开始计算时间;
--depth:从指定目录下最深层的子目录开始查找;
--expty:寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录;
--exec<执行指令>:假设find指令的回传值为True,就执行该指令;
+-empty:寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录;
+-executable 匹配当前用户可执行的文件和可搜索的目录。
-false:将find指令的回传值皆设为False;
--fls<列表文件>:此参数的效果和指定“-ls”参数类似,但会把结果保存为指定的列表文件;
--follow:排除符号连接;
--fprint<列表文件>:此参数的效果和指定“-print”参数类似,但会把结果保存成指定的列表文件;
--fprint0<列表文件>:此参数的效果和指定“-print0”参数类似,但会把结果保存成指定的列表文件;
--fprintf<列表文件><输出格式>:此参数的效果和指定“-printf”参数类似,但会把结果保存成指定的列表文件;
-fstype<文件系统类型>:只寻找该文件系统类型下的文件或目录;
-gid<群组识别码>:查找符合指定之群组识别码的文件或目录;
-group<群组名称>:查找符合指定之群组名称的文件或目录;
--help或——help:在线帮助;
-ilname<范本样式>:此参数的效果和指定“-lname”参数类似,但忽略字符大小写的差别;
-iname<范本样式>:此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别;
-inum:查找符合指定的inode编号的文件或目录;
-ipath<范本样式>:此参数的效果和指定“-path”参数类似,但忽略字符大小写的差别;
-iregex<范本样式>:此参数的效果和指定“-regexe”参数类似,但忽略字符大小写的差别;
+-iwholename 模式参见`-ipath`。此选项的可移植性较`-ipath`差。
-links<连接数目>:查找符合指定的硬连接数目的文件或目录;
--iname<范本样式>:指定字符串作为寻找符号连接的范本样式;
--ls:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出;
--maxdepth<目录层级>:设置最大目录层级;
--mindepth<目录层级>:设置最小目录层级;
+-lname<范本样式>:指定字符串作为寻找符号连接的范本样式;
-mmin<分钟>:查找在指定时间曾被更改过的文件或目录,单位以分钟计算;
--mount:此参数的效果和指定“-xdev”相同;
-mtime<24小时数>:查找在指定时间曾被更改过的文件或目录,单位以24小时计算;
-name<范本样式>:指定字符串作为寻找文件或目录的范本样式;
-newer<参考文件或目录>:查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
+-newerXY<引用>:如果正在考虑的文件的时间戳 X 比文件引用的时间戳 Y 更新则成功。
-nogroup:找出不属于本地主机群组识别码的文件或目录;
--noleaf:不去考虑目录至少需拥有两个硬连接存在;
-nouser:找出不属于本地主机用户识别码的文件或目录;
--ok<执行指令>:此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令;
-path<范本样式>:指定字符串作为寻找目录的范本样式;
-perm<权限数值>:查找符合指定的权限数值的文件或目录;
--print:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有“./”字符串;
--print0:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行;
--printf<输出格式>:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式可以自行指定;
--prune:不寻找字符串作为寻找文件或目录的范本样式;
+-readable:匹配当前用户可读的文件
-regex<范本样式>:指定字符串作为寻找文件或目录的范本样式;
+-samefile 名称 文件与名称指向相同的 inode。
-size<文件大小>:查找符合指定的文件大小的文件;
--true:将find指令的回传值皆设为True;
--typ<文件类型>:只寻找符合指定的文件类型的文件;
+-type<文件类型>:只寻找符合指定的文件类型的文件;
-uid<用户识别码>:查找符合指定的用户识别码的文件或目录;
-used<日数>:查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算;
-user<拥有者名称>:查找符和指定的拥有者名称的文件或目录;
--version或——version:显示版本信息;
--xdev:将范围局限在先行的文件系统中;
+-writable:匹配当前用户可写入的文件。
-xtype<文件类型>:此参数的效果和指定“-type”参数类似,差别在于它针对符号连接检查。
+-context<表达式>:仅限 SELinux。文件的安全上下文与全局模式匹配
```
-### 参数
+### 操作选项
+
+#### -delete 删除文件或目录。
+> :warning:警告:find 命令会将命令行作为表达式进行解析,因此将`-delete`放在首位会将指定的起始点下的**所有内容删除**。且`-delete`操作无法删除一个目录,除非它是空的。
+
+##### *无参数*
+
+##### 描述
+如果删除成功则返回真。若删除失败,将显示错误消息,并且 find 最终退出时的状态码将为非零。
+
+##### 相关选项
+- **-depth**:在命令行中使用`-delete`操作会自动启用`-depth`选项。为了避免意外情况,通常最好在早期的**Tests选项**中**明确使用**`-depth`选项。
+- **-prune**:由于`-depth`会使`-prune`失效,因此`-delete`操作无法与`-prune`有效结合使用。通常,用户可能希望在实际删除操作前,先用带有`-print`的查找命令行进行测试,以确保在添加`-delete`进行实际删除时不会出现意外结果。
+- **-ignore_readdir_race**:`-delete`与此选项一起使用时,find 会忽略自父目录读取以来文件已消失的情况下`-delete`操作的错误:它不会输出错误诊断,不会将退出代码更改为非零,并且`-delete`操作的返回代码将为真。
+
+#### -exec 执行命令
+
+> :warning:警告:使用`-exec`操作存在不可避免的安全问题,应改用`-execdir`选项。
+
+##### 参数
+`command ;` 或 `command {} +`
+
+##### 描述
+如果返回状态为 0,则结果为真。**注意**:find 命令会将**所有后续参数**视为`command`的参数,直到遇到包含`;`的参数为止。字符串`{}`会在`command`的参数中所有出现的位置被替换为当前正在处理的文件名,而不仅仅是在它单独出现的参数中,这与某些版本的 find 不同。这两种结构可能需要使用反斜杠`\`或引号来转义,以防止被 shell 扩展。指定的命令会为每个匹配的文件运行一次。命令在起始目录中执行。
+
+#### -execdir 在包含匹配文件的子目录中执行命令
+
+##### 参数
+`command ;` | `command {} +`
+
+##### 描述
+类似于`-exec`,但指定的`command`会在包含匹配文件的**子目录中运行**,而非find的起始点目录。与`-exec`一样,如果从shell调用find,`{}`应加引号。这是一种更安全的调用`command`方式,因为它避免了在解析匹配文件路径时出现的竞争条件。与`-exec`操作类似,`+`形式的`-execdir`会构建一个命令行来处理多个匹配文件,但任何给定的`command`调用只会列出存在于同一子目录中的文件。如果使用此选项,必须确保 PATH 环境变量未引用`.`,否则攻击者可以通过在您将运行`-execdir`的目录中留下一个适当命名的文件来运行任何命令。同样,PATH 中的条目**不应为空**或**非绝对目录名**。如果使用`+`形式的任何调用以非零值作为退出状态返回,则 find 也会返回非零退出状态。如果 find 遇到错误,有时会导致立即退出,**因此某些待处理的command可能根本不会运行**。 操作结果取决于使用的是`+`还是`;`变体。`-execdir command {} + `总是返回真,而 `-execdir command {} ;`仅在命令返回 0 时返回真。
+
+#### -fls 创建文件并将结果写入文件
+
+##### 参数
+`file`
+
+##### 描述
+此选项始终返回真。`-fls`类似于`-ls`和`-fprint`,但`-fls`会将结果写入文件中。无论谓词是否匹配,输出文件始终会被创建。有关文件名中特殊字符处理的信息,请参阅“特殊文件名处理”部分。
+
+#### -fprint 将完整文件名打印到指定文件中
+
+##### 参数
+`file`
+
+##### 描述
+此选项始终返回真。若运行 find 时`file`不存在,则创建该`file`;若`file`已存在,则截断其内容。文件名`/dev/stdout`和`/dev/stderr`有特殊处理,分别指向标准输出和标准错误输出。即使谓词从未匹配,输出文件也会始终创建。
+
+#### -fprint0
+
+##### 参数
+`file`
+
+##### 描述
+此选项始终返回真。类似于`-print0`,但将输出写入文件;类似于`-fprint`。即使谓词从未匹配,输出文件也始终会被创建。
+
+#### -fprintf
+
+##### 参数
+`file`
+
+##### 描述
+此选项始终返回真。类似于`-printf`,但将输出写入文件;类似于`-fprint`,即使谓词从未匹配,输出文件也会始终创建。
+
+#### -ls 列出当前文件并输出到标准输出
+
+##### *无参数*
+
+##### 描述
+此选项始终返回真。以`ls -dils`格式列出当前文件并输出到标准输出。块计数为 1 KB 块,除非设置了环境变量 POSIXLY_CORRECT,此时使用 512 字节块。
+
+#### -ok 执行命令前询问用户
+
+##### 参数
+`command ;`
+
+##### 描述
+类似于`-exec`,但首先会询问用户。如果用户同意,则运行该命令;否则仅返回 false。若运行该命令,其标准输入将被重定向至`/dev/null`。对提示的响应会与一对正则表达式进行匹配,以确定其为肯定或否定回答。若设置POSIXLY_CORRECT 环境变量,则该正则表达式从系统获取;否则,从 find 的消息翻译中获取。如果系统没有合适的定义,将使用 find 自身的定义。无论哪种情况,正则表达式本身的解释都会受到环境变量 LC_CTYPE(字符类)和 LC_COLLATE(字符范围和等价类)的影响。
+
+##### 相关选项
+- **-files0-from**:不能与`-ok`同时指定。
+
+#### -okdir
+
+##### 参数
+`command ;`
+
+##### 描述
+类似于`-execdir`,但在执行前会以与`-ok`相同的方式询问用户。如果用户不同意,则直接返回 false。如果命令被执行,其标准输入将从`/dev/null`重定向。
+
+##### 相关选项
+- **-files0-from**:不能与`-okdir`同时指定。
+
+#### -print 打印完整文件名,后跟一个换行符
+
+##### *无参数*
+
+##### 描述
+此选项始终返回真。如果你将 find 的输出通过管道传输到另一个程序,并且你正在搜索的文件可能包含换行符,那么应该考虑使用`-print0`而不是`-print`。
+
+#### -print0 打印完整文件名,后跟一个空字符
+
+##### *无参数*
+
+##### 描述
+此选项始终返回真。包含换行符或其他类型空白字符的文件名能被正确解析,以便处理 find 输出的程序能正确理解。此选项对应于`xargs`的`-0`选项。
+
+#### -printf 打印格式
+
+##### 参数
+`format`
+
+可用的转义字符和指令包括:
+- \a 警报。
+- \b 退格键。
+- \c 立即停止打印并清空输出。
+- \f 换页。
+- \n 换行。
+- \r 回车符。
+- \t 水平制表符。
+- \v 垂直制表符。
+- \0 空字符。
+- \\\ 一个字面的反斜杠`\`。
+- \NNN 字符,其 ASCII 码为 NNN(八进制)。
+- A 一个反斜杠字符`\`后跟任何其他字符,都会被视为普通字符,因此它们都会被打印出来。
+- %% 一个字面的百分号。
+- %a 文件的最后访问时间,格式为 C 语言 ctime(3)函数返回的样式。
+ .....更多内容待补充
+
+##### 描述
+*暂无*
+
+#### -prune 如果文件是目录,则不进入该目录
+
+##### *无参数*
+
+##### 描述
+此选项始终返回真。
+
+##### 相关选项
+- **-depth**:如果指定了`-depth`,那么`-prune`将无效。
+- **-delete**:因为`-delete`隐含了`-depth`,所以不能有效地同时使用两者。
+
+#### -quit 立即退出
+
+##### *无参数*
+
+##### 描述
+如果没有发生错误,则返回值为零。这与`-prune `不同,因为`-prune`仅适用于被修剪目录的内容,而`-quit`则使 find 立即停止。不会有任何子进程继续运行。在程序退出之前,任何通过`-exec ... +`或`-execdir ... +`构建的命令行都会被调用。执行`-quit`后,命令行中指定的文件将不再被处理。例如,`find /tmp/foo /tmp/bar -print -quit`将仅打印 `/tmp/foo`。`-quit`的一个常见用途是在找到所需内容后停止搜索文件系统。
+
+### 全局选项
+始终返回真值。全局选项对命令行中较早出现的测试也会生效。为避免混淆,全局选项应在命令行上列出**起始点之后、第一个测试选项、位置选项或操作选项之前指定**。若在其他位置指定全局选项,find 会发出警告消息,说明这可能引起混淆。
+
+> 全局选项出现在起始点列表之后,因此与例如`-L` 这样的选项不属于同一类别。
+
+#### -d `-depth`的同义词
+
+##### *无参数*
+
+##### 描述
+仅用于与 FreeBSD、NetBSD、MacOS X 和 OpenBSD 兼容。
+
+#### -depth 遍历级别
+
+##### 参数
+`levels`
+
+##### 描述
+在处理目录本身之前,先处理目录中的内容。`-delete`操作也隐含了`-depth`。
+
+#### -files0-from 从文件中读取起始点,而非通过命令行获取。
-起始目录:查找文件的起始目录。
+##### 参数
+`file`
-### 实例
+##### 描述
+使用此选项可以安全地给 find 命令传递任意数量的起始点。使用此选项和在命令行中传递起始点**是互斥的**,因此不允许同时进行。文件参数是强制性的。文件中的起始点必须用 ASCII NUL 字符分隔。两个连续的 NUL 字符,即带有零长度文件名的起始点是不允许的,这将导致错误诊断,并随后产生非零退出码。
+
+与标准调用不同,在标准调用中,如果没有传递路径参数,find 会默认将当前目录作为起始点。起始点的处理方式与其他情况相同,例如,find 命令会递归进入子目录,除非另有阻止。若要仅处理起始点,可以额外传递`-maxdepth 0`参数。
+
+**其他说明**:如果一个文件在输入文件中被列出多次,则其是否会被多次访问未作规定。如果在查找操作期间文件被修改,结果同样未作规定。最后,find 退出时(无论是通过`-quit`还是其他方式),命名文件中的查找位置也未作规定。此处**未作规定**意味着它**可能有效也可能无效**,**或者不做任何特定的事情**,并且该行为可能因平台或 findutils 版本而异。
+
+> :bulb:可以使用`-files0-from`**从标准输入流中读取起始点列表**,例如从管道中读取。在这种情况下,不允许使用`-ok`和`-okdir`操作,因为它们会干扰从标准输入读取以获取用户确认。
+
+> :warning:警告:如果给定文件为空,find 不会处理任何起始点,因此在解析完程序参数后会立即退出。
+
+#### -help 和 --help 打印 find 命令行用法的摘要并退出。
+
+##### *无参数*
+
+##### 描述
+*无描述*
+
+#### -ignore_readdir_race
+
+##### *无参数*
+
+##### 描述
+通常情况下,当 find 无法对文件进行状态检查(stat)时,会发出错误消息。如果您**启用此选项**,并且在 find 从目录读取文件名,到尝试进行状态检查**之间的时间内文件被删除**,则不会发出任何错误消息。这也适用于命令行中指定的文件或目录。此选项在命令行读取时生效,这意味着您不能在文件系统的某部分启用此选项,而在另一部分禁用它(如果需要这样做,您需要发出两个 find 命令,一个启用选项,一个不启用)。此外,使用`-ignore_readdir_race`选项时,如果在读取父目录后文件已消失,find 命令将忽略`-delete`操作的错误:它不会输出错误诊断信息,并且`-delete`操作的返回码将为真。
+
+#### -maxdepth 最大遍历级别
+
+##### 参数
+`levels`
+
+##### 描述
+最多向下遍历 levels 级(一个非负整数)目录层级。使用`-maxdepth 0`表示**仅对起始点本身**应用测试和操作。
+
+#### -mindepth 最小遍历级别
+
+##### 参数
+`levels`
+
+##### 描述
+在小于指定级别(非负整数)的层级上不执行任何测试或操作。使用`-mindepth 1`表示处理**除起始点外的所有文件**。
+
+#### -mount 不在其他文件系统中下降目录
+
+##### *无参数*
+
+##### 描述
+这是`-xdev`的替代名称,用于与其他一些版本的 find 兼容。
+
+#### -noignore_readdir_race
+
+##### *无参数*
+
+##### 描述
+关闭了`-ignore_readdir_race`的效果。
+
+#### -noleaf 不进行优化。
+
+##### *无参数*
+
+##### 描述
+不通过假设目录包含比其硬链接数少 2 个子目录来进行优化。在搜索不遵循 Unix 目录链接惯例的文件系统时,需要此选项,例如 CD-ROM、MS-DOS 文件系统或 AFS 卷挂载点。在正常的 Unix 文件系统上,每个目录至少有 2 个硬链接:其名称及其`.`条目。此外,其子目录(如果有)各自有一个指向该目录的`..`条目。当 find 检查一个目录时,在它已经统计了比目录链接数少 2 个子目录之后,它知道该目录中的其余条目是非目录(目录树中的“叶”文件)。如果只需要检查文件的名称,则无需对其进行状态检查;这可以显著提高搜索速度。
+
+#### -version 和 --version 打印 find 的版本号并退出。
+
+##### *无参数*
+
+##### 描述
+*无描述*
+
+#### -xdev 不进入其他文件系统的目录。
+
+##### *无参数*
+
+##### 描述
+*无描述*
+
+### 位置选项
+始终返回真值。它们仅影响命令行中后续的测试。
+
+#### -daystart 从今天开始
+
+> 用于 `-amin`、`-atime`、`-cmin`、`-ctime`、`-mmin` 和 `-mtime`
+
+##### *无参数*
+
+##### 描述
+从今天开始而非从 24 小时前开始。此选项仅影响命令行中后续出现的测试。
+
+#### ~~-follow~~ 解引用符号链接。
+
+##### *无参数*
+
+##### 描述
+**已弃用,请改用`-L`选项**。隐含`-noleaf`。`-follow`选项仅影响命令行中出现在其后的那些测试。除非已指定`-H`或`-L`选项,否则`-follow`选项的位置会改变`-newer`谓词的行为;作为`-newer`参数列出的任何文件,如果它们是符号链接,则会被解引用。同样的情况适用于`-newerXY`、`-anewer`和`-cnewer`。类似地,`-type `谓词将始终匹配符号链接所指向的文件类型,而非链接本身。使用`-follow`会导致 `-lname`和`-ilname`谓词始终返回 false。
+
+#### -regextype 更改正则表达式语法
+
+##### 参数
+`type`
+
+##### 描述
+更改`-regex`和`-iregex`测试在命令行后续部分所理解的正则表达式语法。要查看已知的正则表达式类型,请使用`-regextype help`。Texinfo 文档解释了各种正则表达式类型的含义及其差异。如果您不使用此选项,find 的行为如同已指定正则表达式类型为`emacs`。
+
+#### -warn 和 -nowarn 开启或关闭警告消息。
+
+##### *无参数*
+
+##### 描述
+这些警告仅适用于命令行使用,不适用于 find 在搜索目录时可能遇到的情况。默认行为是:如果标准输入是`tty`,则对应`-warn`;否则对应`-nowarn`。如果产生与命令行使用相关的警告消息,find 的退出状态不受影响。如果设置了 POSIXLY_CORRECT 环境变量,并且也使用了`-warn`,则未指定哪些(如果有)警告会被激活。
+
+### 运算符选项
+运算符按优先级递减顺序列出:
+- `(expr)` 强制优先级。由于括号对 shell 有特殊含义,通常需要对它们进行引用。许多示例为此使用了反斜杠:`\(...\)` 而非 `(...)`。
+- `! expr` 若表达式为假则结果为真(取反)。此字符通常也需要防止被 shell 解释。
+
+> :bulb:提示:当`-a`隐式指定(例如两个测试之间没有显式运算符)或显式指定时,其优先级高于`-o`。例如,`find . -name foo -o -name bar -print`永远不会打印`foo`。
+
+#### -not
+
+##### 参数
+`expr`
+
+##### 描述
+等同于`! expr`,但不符合 POSIX 标准。
+
+#### -a
+
+##### 参数
+`expr1` -a `expr2`
+
+##### 描述
+两个连续的表达式被视为隐含地用`-a`连接;如果`expr1`为假,则不评估`expr2`。等同于`expr1 expr2`。
+
+#### -and
+
+##### 参数
+`expr1` -and `expr2`
+
+##### 描述
+与`-a`相同。但不符合 POSIX 标准。
+
+#### -o
+
+##### 参数
+`expr1` -o `expr2`
+
+##### 描述
+`expr1`和`expr2`始终都会被评估。`expr1`的值会被丢弃;列表的值即为`expr2`的值。逗号运算符(`,`)在搜索多种不同类型的事物时非常有用,但只会遍历文件系统层次结构一次。`-fprintf`动作可用于将各种匹配项列出到多个不同的输出文件中。若`expr1`为真,则不评估`expr2`。
+#### -or
+
+##### 参数
+`expr1` -or `expr2`
+
+##### 描述
+与`-o`相同。但不符合 POSIX 标准。
+
+## 例子
+
+当前目录搜索所有文件,且文件内容包含 “140.206.111.111”
```shell
-# 当前目录搜索所有文件,文件内容 包含 “140.206.111.111” 的内容
find . -type f -name "*" | xargs grep "140.206.111.111"
```
@@ -300,7 +639,7 @@ find $HOME/. -name "*.txt" -ok rm {} \;
查找当前目录下所有.txt文件并把他们拼接起来写入到all.txt文件中
```shell
-find . -type f -name "*.txt" -exec cat {} \;> all.txt
+find . -type f -name "*.txt" -exec cat {} \;> /all.txt
```
将30天前的.log文件移动到old目录中
@@ -321,7 +660,7 @@ find . -type f -name "*.txt" -exec printf "File: %s\n" {} \;
-exec ./text.sh {} \;
```
-#### 搜索但跳出指定的目录
+#### 搜索但跳过指定的目录
查找当前目录或者子目录下所有.txt文件,但是跳过子目录sk
@@ -329,6 +668,16 @@ find . -type f -name "*.txt" -exec printf "File: %s\n" {} \;
find . -path "./sk" -prune -o -name "*.txt" -print
```
+> :warning: ./sk 不能写成 ./sk/ ,否则没有作用。
+
+忽略两个目录
+
+```shell
+find . \( -path ./sk -o -path ./st \) -prune -o -name "*.txt" -print
+```
+
+> :warning: 如果写相对路径必须加上`./`
+
#### find其他技巧收集
要列出所有长度为零的文件
@@ -386,4 +735,4 @@ find . -name "*.java"|xargs cat|grep -v ^$|wc -l # 代码行数统计, 排除空
```
-
+
diff --git a/command/findfs.md b/command/findfs.md
index 0c3e3693f8a..2b9dd85dd34 100644
--- a/command/findfs.md
+++ b/command/findfs.md
@@ -7,17 +7,17 @@ findfs
**findfs命令** 依据卷标(Label)和UUID查找文件系统所对应的设备文件。findfs命令会搜索整个磁盘,看是否有匹配的标签或者UUID没有,如果有则打印到标注输出上。findfs命令也是e2fsprogs项目的一部分。
-### 语法
+### 语法
```shell
findfs(参数)
```
-### 参数
+### 参数
`LABEL=<卷标>`或者`UUID=`:按照卷标或者UUID查询文件系统。
-### 实例
+### 实例
通过卷标名查找对应的文件系统:
@@ -27,4 +27,3 @@ findfs LABEL=/boot
```
-
\ No newline at end of file
diff --git a/command/finger.md b/command/finger.md
index e637e191e5f..b77f53ea8d1 100644
--- a/command/finger.md
+++ b/command/finger.md
@@ -7,13 +7,13 @@ finger
**finger命令** 用于查找并显示用户信息。包括本地与远端主机的用户皆可,帐号名称没有大小写的差别。单独执行finger指令,它会显示本地主机现在所有的用户的登陆信息,包括帐号名称,真实姓名,登入终端机,闲置时间,登入时间以及地址和电话。
-### 语法
+### 语法
```shell
finger(选项)(参数)
```
-### 选项
+### 选项
```shell
-l:列出该用户的帐号名称,真实姓名,用户专属目录,登入所用的Shell,登入时间,转信地址,电子邮件状态,还有计划文件和方案文件内容;
@@ -24,11 +24,11 @@ finger(选项)(参数)
不指定finger的选项如果提供操作者的话,缺省设为`-l`输出风格,否则为`-s`风格,注意在两种格式中,如果信息不足,都有一些域可能丢失,如果没有指定参数finger会为当前登录的每个用户打印一个条目。
-### 参数
+### 参数
用户名:指定要查询信息的用户。
-### 实例
+### 实例
在计算机上使用finger:
@@ -43,4 +43,3 @@ root root *pts/1 Dec 18 13
如果要查询远程机上的用户信息,需要在用户名后面接`@主机名`,采用`用户名@主机名`的格式,不过要查询的网络主机需要运行finger守护进程的支持。
-
\ No newline at end of file
diff --git a/command/firewall-cmd.md b/command/firewall-cmd.md
index e10a36cadb3..3223a984d0d 100644
--- a/command/firewall-cmd.md
+++ b/command/firewall-cmd.md
@@ -1,7 +1,7 @@
firewall-cmd
===
-Linux上新用的防火墙软件,跟iptables差不多的工具。
+Linux上新用的防火墙软件,跟iptables差不多的工具
## 补充说明
@@ -47,16 +47,17 @@ firewall-cmd [选项 ... ]
--set-log-denied= # 设置记录被拒绝的日志,只能为 'all','unicast','broadcast','multicast','off' 其中的一个;
```
-### 实例
+### 实例
```shell
# 安装firewalld
yum install firewalld firewall-config
systemctl start firewalld # 启动
+systemctl stop firewalld # 停止
+systemctl enable firewalld # 启用自动启动
+systemctl disable firewalld # 禁用自动启动
systemctl status firewalld # 或者 firewall-cmd --state 查看状态
-systemctl disable firewalld # 停止
-systemctl stop firewalld # 禁用
# 关闭服务的方法
# 你也可以关闭目前还不熟悉的FirewallD防火墙,而使用iptables,命令如下:
@@ -138,10 +139,10 @@ Amanda, FTP, Samba和TFTP等最重要的服务已经被FirewallD提供相应的
firewall-cmd --get-services
# 允许SSH服务通过
-firewall-cmd --enable service=ssh
+firewall-cmd --new-service=ssh
# 禁止SSH服务通过
-firewall-cmd --disable service=ssh
+firewall-cmd --delete-service=ssh
# 打开TCP的8080端口
firewall-cmd --enable ports=8080/tcp
diff --git a/command/fmt.md b/command/fmt.md
index 7bc4e692a0f..0578a82cbfe 100644
--- a/command/fmt.md
+++ b/command/fmt.md
@@ -7,13 +7,13 @@ fmt
**fmt命令** 读取文件的内容,根据选项的设置对文件格式进行简单的优化处理,并将结果送到标准输出设备。
-### 语法
+### 语法
```shell
fmt(选项)(参数)
```
-### 选项
+### 选项
```shell
-c或--crown-margin:每段前两列缩排;
@@ -24,9 +24,8 @@ fmt(选项)(参数)
-w<每列字符数>或--width=<每列字符数>或-<每列字符数>:设置每列的最大字符数。
```
-### 参数
+### 参数
指定要优化格式的文件。
-
\ No newline at end of file
diff --git a/command/fold.md b/command/fold.md
index f268f52417c..c5a32ab53f7 100644
--- a/command/fold.md
+++ b/command/fold.md
@@ -7,13 +7,13 @@ fold
**fold命令** 用于控制文件内容输出时所占用的屏幕宽度。fold命令会从指定的文件里读取内容,将超过限定列宽的列加入增列字符后,输出到标准输出设备。若不指定任何文件名称,或是所给予的文件名为“-”,则fold指令会从标准输入设备读取数据。
-### 语法
+### 语法
```shell
fold(选项)(参数)
```
-### 选项
+### 选项
```shell
-b或——bytes:以Byte为单位计算列宽,而非采用行数编号为单位;
@@ -21,9 +21,14 @@ fold(选项)(参数)
-w<每列行数>或--width<每列行数>:设置每列的最大行数。
```
-### 参数
+### 参数
文件:指定要显示内容的文件。
+### 示例
+
+```shell
+fold -w 5 filename
+```
+
-
\ No newline at end of file
diff --git a/command/fping.md b/command/fping.md
new file mode 100644
index 00000000000..b2678e635a6
--- /dev/null
+++ b/command/fping.md
@@ -0,0 +1,79 @@
+fping
+===
+
+fping检测主机是否存在
+
+## 补充说明
+
+**fping命令** fping类似于ping,但比ping强大。与ping要等待某一主机连接超时或发回反馈信息不同,fping给一个主机发送完数据包后,马上给下一个主机发送数据包,实现多主机同时ping,fping还可以在命令行中指定要ping的主机数量范围。
+
+### 语法
+
+```shell
+fping(选项)(参数)
+```
+
+### 选项
+
+```shell
+-a # 显示存活的主机
+-b # ping 数据包的大小。(默认为56)
+-c # ping每个目标的次数 (默认为1)
+-f # 从文件获取目标列表(不能与 -g 同时使用)
+-l # 循环发送ping
+-g # 通过指定开始和结束地址来生成目标列表,可以使网段
+-u # 显示不可到达的目标
+```
+
+### 实例
+
+安装fping命令:
+
+```shell
+# 先安装epel源:
+yum install epel* -y
+# 安装fping包:
+yum install fping -y
+```
+
+选择性ping指定ip:
+
+```shell
+~]# fping 192.168.0.1 192.168.0.125 192.168.0.126 2>/dev/null
+192.168.0.1 is alive
+192.168.0.125 is alive
+192.168.0.126 is unreachable
+```
+
+ping整个网段:
+
+```bash
+~]# fping -g 192.168.0.0/24 2>/dev/null
+192.168.0.1 is alive
+192.168.0.103 is alive
+...
+192.168.0.253 is unreachable
+192.168.0.254 is unreachable
+```
+
+ping整个网段,只显示存活的主机:
+
+```shell
+~]# fping -ag 192.168.0.0/24 2>/dev/null
+192.168.0.1
+192.168.0.103
+...
+```
+
+ping某一段ip:
+
+```shell
+~]# fping -ag 192.168.0.5 192.168.0.130 2>/dev/null
+192.168.0.103
+...
+192.168.0.125
+192.168.0.130
+```
+
+
+
diff --git a/command/free.md b/command/free.md
index e92445eca1f..11e927b395b 100644
--- a/command/free.md
+++ b/command/free.md
@@ -7,13 +7,13 @@ free
**free命令** 可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。
-### 语法
+### 语法
```shell
free(选项)
```
-### 选项
+### 选项
```shell
-b # 以Byte为单位显示内存使用情况;
@@ -24,9 +24,10 @@ free(选项)
-s<间隔秒数> # 持续观察内存使用状况;
-t # 显示内存总和列;
-V # 显示版本信息。
+-h, --human # 自动缩放到最短三位单位的并打印输出
```
-### 实例
+### 实例
```shell
free -t # 以总和的形式显示内存的使用信息
@@ -156,4 +157,4 @@ Buffer cache是针对磁盘块的缓存,也就是在没有文件系统的情
如果是应用服务器的话,一般只看第二行,+buffers/cache,即对应用程序来说free的内存太少了,也是该考虑优化程序或加内存了。
-
+
diff --git a/command/fsck.md b/command/fsck.md
index a05d222b11d..5dc84ecf665 100644
--- a/command/fsck.md
+++ b/command/fsck.md
@@ -1,19 +1,19 @@
fsck
===
-检查并且试图修复文件系统中的错误
+fsck(英文全拼:file system check)命令检查并且试图修复文件系统中的错误
## 补充说明
-**fsck命令** 被用于检查并且试图修复文件系统中的错误。当文件系统发生错误四化,可用fsck指令尝试加以修复。
+**fsck命令** 被用于检查并且试图修复文件系统中的错误。当文件系统发生错误,可用fsck指令尝试加以修复。
-### 语法
+### 语法
```shell
fsck(选项)(参数)
```
-### 选项
+### 选项
```shell
-a:自动修复文件系统,不询问任何问题;
@@ -28,11 +28,11 @@ fsck(选项)(参数)
-V:显示指令执行过程。
```
-### 参数
+### 参数
文件系统:指定要查看信息的文件系统。
-### 实例
+### 实例
linux的文件系统损坏会导致linux不正常关机,出错的时候如果系统告诉你是哪一块硬盘的分区有问题,比如是`/dev/hda2`,接着用如下的命令去对付它:
@@ -53,4 +53,3 @@ fsck
结束后同样使用reboot命令重启系统这样就好了!
-
\ No newline at end of file
diff --git a/command/ftp.md b/command/ftp.md
index 83bf5d8cd0e..3fa29426111 100644
--- a/command/ftp.md
+++ b/command/ftp.md
@@ -7,13 +7,13 @@ ftp
**ftp命令** 用来设置文件系统相关功能。ftp服务器在网上较为常见,Linux ftp命令的功能是用命令的方式来控制在本地机和远程机之间传送文件,这里详细介绍Linux ftp命令的一些经常使用的命令,相信掌握了这些使用Linux进行ftp操作将会非常容易。
-### 语法
+### 语法
```shell
ftp(选项)(参数)
```
-### 选项
+### 选项
```shell
-d:详细显示指令执行过程,便于排错或分析程序执行的情况;
@@ -23,11 +23,11 @@ ftp(选项)(参数)
-v:显示指令执行过程。
```
-### 参数
+### 参数
主机:指定要连接的FTP服务器的主机名或ip地址。
-### 实例
+### 实例
```shell
ftp> ascii # 设定以ASCII方式传送文件(缺省值)
@@ -66,6 +66,14 @@ ftp> ? [command] # 同HELP. [command]指定需要帮助的命令名称。如果
ftp> ! # 从 ftp 子系统退出到外壳。
```
+FTP 匿名登录账号密码
+
+```shell
+账号:anonymous
+密码: anonymous@
+```
+
+
关闭FTP连接
```shell
@@ -89,4 +97,4 @@ ftp> mput *.txt # 可以上传多个文件
```
-
+
diff --git a/command/ftpcount.md b/command/ftpcount.md
index ad94e1137e8..839445fa9fc 100644
--- a/command/ftpcount.md
+++ b/command/ftpcount.md
@@ -14,4 +14,3 @@ ftpcount
```
-
\ No newline at end of file
diff --git a/command/ftpshut.md b/command/ftpshut.md
index ad2aa88d77d..d88acf0492a 100644
--- a/command/ftpshut.md
+++ b/command/ftpshut.md
@@ -21,4 +21,3 @@ ftpshut [-d<分钟>][-l<分钟>][关闭时间]["警告信息"]
```
-
\ No newline at end of file
diff --git a/command/ftptop.md b/command/ftptop.md
index f27cf2e7be3..9330e827bdc 100644
--- a/command/ftptop.md
+++ b/command/ftptop.md
@@ -7,13 +7,13 @@ proftpd服务器的连接状态
**ftptop命令** 类似于top命令的显示风格显示proftpd服务器的连接状态。
-### 语法
+### 语法
```shell
ftptop(选项)
```
-### 选项
+### 选项
```shell
-D:过滤正在下载的会话;
@@ -22,4 +22,3 @@ ftptop(选项)
```
-
\ No newline at end of file
diff --git a/command/ftpwho.md b/command/ftpwho.md
index eff0147d957..4bb4f214494 100644
--- a/command/ftpwho.md
+++ b/command/ftpwho.md
@@ -7,13 +7,13 @@ ftpwho
**ftpwho命令** ftp服务器套件proftpd的工作指令,用于显示当前每个ftp会话信息。
-### 语法
+### 语法
```shell
ftpwho(选项)
```
-### 选项
+### 选项
```shell
-h:显示帮助信息;
@@ -21,4 +21,3 @@ ftpwho(选项)
```
-
\ No newline at end of file
diff --git a/command/fuser.md b/command/fuser.md
index 30a8e3164b6..cfa527311c1 100644
--- a/command/fuser.md
+++ b/command/fuser.md
@@ -16,13 +16,13 @@ fuser
* `r` :指示该目录为进程的根目录。
* `m` :指示进程使用该文件进行内存映射,抑或该文件为共享库文件,被进程映射进内存。
-### 语法
+### 语法
```shell
fuser(选项)(参数)
```
-### 选项
+### 选项
```shell
-a:显示命令行中指定的所有文件;
@@ -34,11 +34,11 @@ fuser(选项)(参数)
-u:在每个进程后显示所属的用户名。
```
-### 参数
+### 参数
文件:可以是文件名或者TCP、UDP端口号。
-### 实例
+### 实例
要列出使用`/etc/passwd`文件的本地进程的进程号,请输入:
@@ -70,4 +70,3 @@ fuser -d /usr文件
`/dev/mem` 也用于系统映像。
-
\ No newline at end of file
diff --git a/command/gcc.md b/command/gcc.md
index 7acb65e88e1..fac6b762c62 100644
--- a/command/gcc.md
+++ b/command/gcc.md
@@ -5,15 +5,15 @@ gcc
## 补充说明
-**gcc命令** 使用GNU推出的基于C/C++的编译器,是开放源代码领域应用最广泛的编译器,具有功能强大,编译代码支持性能优化等特点。现在很多程序员都应用GCC,怎样才能更好的应用GCC。目前,GCC可以用来编译C/C++、FORTRAN、JAVA、OBJC、ADA等语言的程序,可根据需要选择安装支持的语言。
+**gcc命令** 使用GNU推出的基于 `C/C++` 的编译器,是开放源代码领域应用最广泛的编译器,具有功能强大,编译代码支持性能优化等特点。现在很多程序员都应用 `GCC`,怎样才能更好的应用 `GCC`。目前,`GCC` 可以用来编译 `C/C++`、`FORTRAN`、`JAVA`、`OBJC`、`ADA`等语言的程序,可根据需要选择安装支持的语言。
-### 语法
+### 语法
```shell
gcc(选项)(参数)
```
-### 选项
+### 选项
```shell
-o:指定生成的输出文件;
@@ -21,13 +21,15 @@ gcc(选项)(参数)
-S:将C代码转换为汇编代码;
-wall:显示警告信息;
-c:仅执行编译操作,不进行连接操作。
+-l:用来指定程序要链接的库,-l参数紧接着就是库名
+-I:寻找头文件的目录
```
-### 参数
+### 参数
C源文件:指定C语言源代码文件。
-### 实例
+### 实例
**常用编译命令选项**
@@ -39,7 +41,7 @@ C源文件:指定C语言源代码文件。
gcc test.c
```
-将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。
+将 `test.c` 预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为 `a.out`。
**选项 -o**
@@ -47,7 +49,7 @@ gcc test.c
gcc test.c -o test
```
-将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。
+将 `test.c` 预处理、汇编、编译并链接形成可执行文件 `test`。`-o` 选项用来指定输出文件的文件名。
**选项 -E**
@@ -55,7 +57,7 @@ gcc test.c -o test
gcc -E test.c -o test.i
```
-将test.c预处理输出test.i文件。
+将 `test.c` 预处理输出 `test.i` 文件。
**选项 -S**
@@ -63,7 +65,7 @@ gcc -E test.c -o test.i
gcc -S test.i
```
-将预处理输出文件test.i汇编成test.s文件。
+将预处理输出文件 `test.i` 汇编成 `test.s` 文件。
**选项 -c**
@@ -71,7 +73,7 @@ gcc -S test.i
gcc -c test.s
```
-将汇编输出文件test.s编译输出test.o文件。
+将汇编输出文件 `test.s` 编译输出 `test.o` 文件。
**无选项链接**
@@ -79,7 +81,7 @@ gcc -c test.s
gcc test.o -o test
```
-将编译输出文件test.o链接成最终可执行文件test。
+将编译输出文件 `test.o` 链接成最终可执行文件 `test`。
**选项 -O**
@@ -93,7 +95,7 @@ gcc -O1 test.c -o test
如果有多个源文件,基本上有两种编译方法:
-假设有两个源文件为test.c和testfun.c
+假设有两个源文件为 `test.c` 和 `testfun.c`
**多个文件一起编译**
@@ -101,17 +103,25 @@ gcc -O1 test.c -o test
gcc testfun.c test.c -o test
```
-将testfun.c和test.c分别编译后链接成test可执行文件。
+将 `testfun.c` 和 `test.c` 分别编译后链接成 `test` 可执行文件。
**分别编译各个源文件,之后对编译后输出的目标文件链接。**
```shell
gcc -c testfun.c #将testfun.c编译成testfun.o
gcc -c test.c #将test.c编译成test.o
-gcc -o testfun.o test.o -o test #将testfun.o和test.o链接成test
+gcc testfun.o test.o -o test #将testfun.o和test.o链接成test
```
以上两种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译。
+**加载动态链接库**
+```shell
+gcc hello.c -lpthread -o hello
+```
+
+**手动添加文件头路径**
+```shell
+gcc hello.c -lpthread -I /lib64/ -o hello
+```
-
\ No newline at end of file
diff --git a/command/gcov.md b/command/gcov.md
index 071a05a3c2e..b6c0e39fbd5 100644
--- a/command/gcov.md
+++ b/command/gcov.md
@@ -7,13 +7,13 @@ gcov
**gcov命令** 是一款测试程序的代码覆盖率的工具。
-### 语法
+### 语法
```shell
gcov(选项)(参数)
```
-### 选项
+### 选项
```shell
-h:显示帮助信息;
@@ -22,9 +22,8 @@ gcov(选项)(参数)
-n:并创建输出文件。
```
-### 参数
+### 参数
V语言文件:C语言源代码文件。
-
\ No newline at end of file
diff --git a/command/gdb.md b/command/gdb.md
index 6f5291de08b..d72ec9f01d6 100644
--- a/command/gdb.md
+++ b/command/gdb.md
@@ -23,90 +23,20 @@ gdb(选项)(参数)
-s:设置读取的符号表文件。
```
-
-
-
-| 命令 |
-解释 |
-示例 |
-
-
-| file <文件名> |
-加载被调试的可执行程序文件。
-因为一般都在被调试程序所在目录下执行GDB,因而文本名不需要带路径。 |
-(gdb) file gdb-sample |
-
-
-| r |
-Run的简写,运行被调试的程序。
-如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处。 |
-(gdb) r |
-
-
-| c |
-Continue的简写,继续执行被调试程序,直至下一个断点或程序结束。 |
-(gdb) c |
-
-
-| b <行号>
-b <函数名称>
-b *<函数名称>
-b *<代码地址> d [编号] |
-
-b: Breakpoint的简写,设置断点。两可以使用“行号”“函数名称”“执行地址”等方式指定断点位置。
-其中在函数名称前面加“*”符号表示将断点设置在“由编译器生成的prolog代码处”。如果不了解汇编,可以不予理会此用法。 d: Delete breakpoint的简写,删除指定编号的某个断点,或删除所有断点。断点编号从1开始递增。 |
-(gdb) b 8
-(gdb) b main
-(gdb) b *main
-(gdb) b *0x804835c (gdb) d |
-
-
-| s, n |
-s: 执行一行源程序代码,如果此行代码中有函数调用,则进入该函数;
-n: 执行一行源程序代码,此行代码中的函数调用也一并执行。 s 相当于其它调试器中的“Step Into (单步跟踪进入)”;
-n 相当于其它调试器中的“Step Over (单步跟踪)”。 这两个命令必须在有源代码调试信息的情况下才可以使用(GCC编译时使用“-g”参数)。 |
-(gdb) s
-(gdb) n |
-
-
-| si, ni |
-si命令类似于s命令,ni命令类似于n命令。所不同的是,这两个命令(si/ni)所针对的是汇编指令,而s/n针对的是源代码。 |
-(gdb) si
-(gdb) ni |
-
-
-| p <变量名称> |
-Print的简写,显示指定变量(临时变量或全局变量)的值。 |
-(gdb) p i
-(gdb) p nGlobalVar |
-
-
-| display ... undisplay <编号> |
-display,设置程序中断后欲显示的数据及其格式。
-例如,如果希望每次程序中断后可以看到即将被执行的下一条汇编指令,可以使用命令
-“display /i $pc”
-其中 $pc 代表当前汇编指令,/i 表示以十六进行显示。当需要关心汇编代码时,此命令相当有用。 undispaly,取消先前的display设置,编号从1开始递增。 |
-(gdb) display /i $pc (gdb) undisplay 1 |
-
-
-| i |
-info的简写,用于显示各类信息,详情请查阅“help i”。 |
-(gdb) i r |
-
-
-| q |
-Quit的简写,退出GDB调试环境。 |
-(gdb) q |
-
-
-| help [命令名称] |
-GDB帮助命令,提供对GDB名种命令的解释说明。
-如果指定了“命令名称”参数,则显示该命令的详细说明;如果没有指定参数,则分类显示所有GDB命令,供用户进一步浏览和查询。 |
-(gdb) help |
-
-
-
+命令 | 解释 | 示例
+--- | --- | ---
+file <文件名> | 加载被调试的可执行程序文件。 因为一般都在被调试程序所在目录下执行GDB,因而文本名不需要带路径。 | (gdb) file gdb-sample
+r | Run的简写,运行被调试的程序。 如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处。 | (gdb) r
+c | Continue的简写,继续执行被调试程序,直至下一个断点或程序结束。 | (gdb) c
+b <行号> b <函数名称> b *<函数名称> b *<代码地址> d [编号] | b: Breakpoint的简写,设置断点。两可以使用“行号”“函数名称”“执行地址”等方式指定断点位置。 其中在函数名称前面加“*”符号表示将断点设置在“由编译器生成的prolog代码处”。如果不了解汇编,可以不予理会此用法。 d: Delete breakpoint的简写,删除指定编号的某个断点,或删除所有断点。断点编号从1开始递增。 | (gdb) b 8(gdb) b main (gdb) b *main (gdb) b *0x804835c (gdb) d
+s, n | s: 执行一行源程序代码,如果此行代码中有函数调用,则进入该函数; n: 执行一行源程序代码,此行代码中的函数调用也一并执行。 s 相当于其它调试器中的“Step Into (单步跟踪进入)”; n 相当于其它调试器中的“Step Over (单步跟踪)”。 这两个命令必须在有源代码调试信息的情况下才可以使用(GCC编译时使用“-g”参数)。 | (gdb) s (gdb) n
+si, ni | si命令类似于s命令,ni命令类似于n命令。所不同的是,这两个命令(si/ni)所针对的是汇编指令,而s/n针对的是源代码。 | (gdb) si (gdb) ni
+p <变量名称> | Print的简写,显示指定变量(临时变量或全局变量)的值。 | (gdb) p i (gdb) p nGlobalVar
+display ... undisplay <编号> | display,设置程序中断后欲显示的数据及其格式。 例如,如果希望每次程序中断后可以看到即将被执行的下一条汇编指令,可以使用命令 “display /i $pc” 其中 $pc 代表当前汇编指令,/i 表示以十六进行显示。当需要关心汇编代码时,此命令相当有用。 undispaly,取消先前的display设置,编号从1开始递增。 | (gdb) display /i $pc (gdb) undisplay 1
+i | info的简写,用于显示各类信息,详情请查阅“help i”。 | (gdb) i r
+q | Quit的简写,退出GDB调试环境。 | (gdb) q
+help [命令名称] | GDB帮助命令,提供对GDB名种命令的解释说明。 如果指定了“命令名称”参数,则显示该命令的详细说明;如果没有指定参数,则分类显示所有GDB命令,供用户进一步浏览和查询。 | (gdb) help
### 参数
@@ -360,7 +290,7 @@ Breakpoint 4, main () at gdb-sample.c:17
1: x/i $pc 0x804835c : movl $0x1,0xfffffffc(%ebp)
```
-此时可以使用“i r”命令显示寄存器中的当前值———“i r”即“Infomation Register”:
+此时可以使用“i r”命令显示寄存器中的当前值———“i r”即“Information Register”:
```shell
(gdb) i r
@@ -443,4 +373,3 @@ int main(){
}
```
-
\ No newline at end of file
diff --git a/command/get_module.md b/command/get_module.md
index c5868df8a24..5956eaa9c2d 100644
--- a/command/get_module.md
+++ b/command/get_module.md
@@ -7,13 +7,13 @@ get_module
**get_module命令** 用于获取Linux内核模块的详细信息。
-### 语法
+### 语法
```shell
get_module 模块名
```
-### 实例
+### 实例
使用lsmod命令查看内核模块:
@@ -64,4 +64,3 @@ Sections:
```
-
\ No newline at end of file
diff --git a/command/getcap.md b/command/getcap.md
new file mode 100644
index 00000000000..1f57f464b57
--- /dev/null
+++ b/command/getcap.md
@@ -0,0 +1,49 @@
+getcap
+===
+
+显示文件的能力(capabilities)
+
+## 补充说明
+
+**getcap命令** 用于查看文件的能力(capabilities)。在 Linux 中,文件的能力是一种权限控制机制,可以赋予普通文件特定的特权操作,而无需完全的 root 权限。
+
+### 语法
+
+```shell
+getcap [选项] [文件名...]
+```
+
+### 选项
+
+```shell
+-v # 显示详细信息,通常与其他选项一起使用。
+-p # 显示进程的能力。
+```
+
+### 参数
+
+文件名:指定要查看能力的文件路径。
+
+### 实例
+
+查看一个可执行文件的能力:
+
+```shell
+$ getcap /usr/bin/ping
+/usr/bin/ping = cap_net_raw+ep
+```
+
+查看当前目录下所有文件的能力:
+
+```shell
+$ getcap *
+/usr/bin/ping = cap_net_raw+ep
+```
+
+如果文件没有设置任何能力,getcap 不会返回任何输出。
+
+查看进程的能力(以 PID 为例):
+
+```shell
+$ getcap -p 1234
+```
\ No newline at end of file
diff --git a/command/getenforce.md b/command/getenforce.md
index 7134c137c59..2583847927d 100644
--- a/command/getenforce.md
+++ b/command/getenforce.md
@@ -1,13 +1,13 @@
getenforce
===
-显示当前SELinux的应用模式,是强制、执行还是停用。
+显示当前SELinux的应用模式,是强制、执行还是停用
## 补充说明
**grename命令** 可以重命名卷组的名称。
-### 语法
+### 语法
```shell
getenforce
@@ -22,4 +22,4 @@ getenforce
Enforcing
```
-
+
diff --git a/command/getent.md b/command/getent.md
new file mode 100644
index 00000000000..1a21dbbaee8
--- /dev/null
+++ b/command/getent.md
@@ -0,0 +1,69 @@
+getent
+===
+
+查询 DNS 名称服务器中的命名空间
+
+## 语法
+
+```shell
+getent [选项] 主机名或域名
+```
+
+## 选项
+
+```shell
+-h # 显示帮助信息
+-n # 不解析 DNS 名称
+-p # 打印解析过程
+-s # 只输出有关已知主机的信息
+-t # 指定 DNS 查询类型 (默认为 NXDOMAIN)
+-U # 使用顶级域名服务器
+-V # 显示版本信息
+-O # 以其他模式解析命名空间
+```
+
+主机名或域名可以是通配符 (例如 *.example.com) 或单个主机名。如果指定了 -h 选项,则显示帮助信息。如果指定了 -n 选项,则不再解析 DNS 名称。如果指定了 -p 选项,则打印解析过程。如果指定了 -s 选项,则只输出有关已知主机的信息。如果指定了 -t 选项,则指定 DNS 查询类型 (默认为 NXDOMAIN)。如果指定了 -U 选项,则使用顶级域名服务器。如果指定了 -V 选项,则显示版本信息。如果指定了 -O 选项,则解析命名空间以其他模式。
+
+## 实例
+
+1. 查看所有已知账户:
+
+```shell
+getent passwd
+```
+
+这将列出所有已知账户的密码文件,例如 `/etc/passwd` 或 `/run/user/1000/gshadow`。
+
+2. 查看指定账户的信息:
+
+```shell
+getent passwd someuser
+```
+
+这将只列出指定用户的信息,例如用户名、密码、uid、gid 等。
+
+3. 查看指定域名的 DNS 记录:
+
+```shell
+getent host example.com
+```
+
+这将列出 example.com 域名的 DNS 记录,包括主机名、IP 地址和其他相关信息。
+
+4. 查看指定 IP 地址的 TCP 连接信息:
+
+```shell
+getentent ips8.ipaddress.com 80
+```
+
+这将列出 IP 地址为 192.168.0.100 的 TCP 连接信息,例如连接的服务器地址、端口号和连接状态。
+
+5. 查看指定主机的已知端口:
+
+```shell
+getent port somehost.example.com
+```
+
+这将列出指定主机的已知端口,例如端口号、协议和主机名。
+
+这些只是 `getent` 命令的一些例子,它还有许多其他用法和选项,可以根据需要进行调整。
\ No newline at end of file
diff --git a/command/getfacl.md b/command/getfacl.md
new file mode 100644
index 00000000000..fbfb5271ee9
--- /dev/null
+++ b/command/getfacl.md
@@ -0,0 +1,49 @@
+getfacl
+===
+
+获取文件访问控制列表(access control lists)
+
+## 补充说明
+
+对于每个文件,`getfacl`都会显示文件名、所有者、组和访问控制列表 (ACL)。如果目录有默认ACL,`getfacl` 也会显示默认ACL。非目录不能有默认ACL。
+如果在不支持 ACL 的文件系统上使用`getfacl`,`getfacl`会显示由传统文件模式权限位定义的访问权限。请参考`setfacl`。
+
+### 选项
+
+```shell
+-a, --access # 显示文件访问控制列表。
+-d, --default # 显示默认访问控制列表。
+-c, --omit-header # 不显示注释头(每个文件输出的前三行)。
+-e, --all-effective # 打印所有有效权限注释,即使与 ACL 条目定义的权限相同。
+-E, --no-effective # 不打印有效权限注释。
+-s, --skip-base # 跳过只有基本 ACL 条目(所有者、组、其他)的文件。
+-R, --recursive # 递归列出所有文件和目录的 ACL。
+-L, --logical # 逻辑路径,跟踪目录的符号链接。默认行为是跟踪符号链接参数,跳过子目录中遇到的符号链接。仅与 -R 结合使用时有效。
+-P, --physical # 物理路径,不跟踪指向目录的符号链接。这也会跳过符号链接参数。 仅与 -R 结合使用时有效。
+-t, --tabular # 使用另一种表格输出格式。同时显示 ACL 和默认 ACL。因 ACL 屏蔽条目而无效的权限会以大写。ACL_USER_OBJ 和 ACL_GROUP_OBJ 条目的条目标签名称也以大写字母显示,这有助于识别这些条目。
+-p, --absolute-names # 不删除前导斜线字符 (`/')。默认行为是去掉前导斜线字符。
+-n, --numeric # 列出数字用户和组 ID。
+-v, --version # 打印 getfacl 的版本并退出。
+-h, --help # 打印命令行选项的帮助说明。
+-- # 命令行选项结束。所有剩余参数都被解释为文件名,即使它们以破折号字符开头。
+- # 如果文件名参数是单破折号字符,getfacl 将从标准输入读取文件列表。
+```
+
+### 实例
+
+getfacl 命令默认显示文件访问控制列表。打开终端,并输入以下命令:
+
+```shell
+getfacl tmp
+
+# file: tmp
+# owner: zdx
+# group: zdx
+# flags: -s-
+user::rwx
+group::rwx
+other::r-x
+default:user::rwx
+default:group::rwx
+default:other::r-x
+```
diff --git a/command/getsebool.md b/command/getsebool.md
index 0b3edd2437f..f0e386974a2 100644
--- a/command/getsebool.md
+++ b/command/getsebool.md
@@ -7,19 +7,19 @@ getsebool
**getsebool命令** 是用来查询SElinux策略内各项规则的布尔值。SELinux的策略与规则管理相关命令:seinfo命令、sesearch命令、getsebool命令、setsebool命令、semanage命令。
-### 语法
+### 语法
```shell
getsebool [-a] [布尔值条款]
```
-### 选项
+### 选项
```shell
-a:列出目前系统上面的所有布尔值条款设置为开启或关闭值。
```
-### 实例
+### 实例
查询本系统内所有的布尔值设置状况:
@@ -40,4 +40,3 @@ setsebool -P httpd_enable_homedirs=0 # 0是关闭 1是开启
```
-
\ No newline at end of file
diff --git a/command/git.md b/command/git.md
index 854a7b57fe9..7295ee20e29 100644
--- a/command/git.md
+++ b/command/git.md
@@ -27,17 +27,13 @@ Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitH
[Git常用命令清单](https://github.com/jaywcjlove/handbook/blob/master/other/Git%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E6%B8%85%E5%8D%95.md)
-### 语法
+### 语法
```shell
-git [--version] [--help] [-C ] [-c name=value]
- [--exec-path[=]] [--html-path] [--man-path] [--info-path]
- [-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
- [--git-dir=] [--work-tree=] [--namespace=]
- []
+git [--version] [--help] [-C ] [-c name=value] [--exec-path[=]] [--html-path] [--man-path] [--info-path] [-p | --paginate | --no-pager] [--no-replace-objects] [--bare] [--git-dir=] [--work-tree=] [--namespace=] []
```
-### 选项
+### 选项
```shell
add 将文件内容添加到索引
@@ -67,50 +63,62 @@ tag 创建,列出,删除或验证使用GPG签名的标签对象
init
-`git init` #初始化
+```shell
+git init # 初始化
+```
status
-`git status` #获取状态
+```shell
+git status # 获取状态
+```
add
-`git add file` # .或*代表全部添加
-`git rm --cached ` # 在commit之前撤销git add操作
-`git reset head` # 好像比上面`git rm --cached`更方便
+```shell
+git add file # .或*代表全部添加
+git rm --cached # 在commit之前撤销git add操作
+git reset head # 好像比上面`git rm --cached`更方便
+```
commit
-`git commit -m "message"` #此处注意乱码
+```shell
+git commit -m "message" # 此处注意乱码
+```
remote
-`git remote add origin git@github.com:JSLite/test.git` #添加源
+```shell
+git remote add origin git@github.com:JSLite/test.git # 添加源
+```
push
```shell
-git push -u origin master # push同事设置默认跟踪分支
+git push -u origin master # push 同时设置默认跟踪分支
git push origin master
git push -f origin master # 强制推送文件,缩写 -f(全写--force)
```
clone
-`git clone git://github.com/JSLite/JSLite.js.git `
-`git clone git://github.com/JSLite/JSLite.js.git mypro` #克隆到自定义文件夹
-`git clone [user@]example.com:path/to/repo.git/` #SSH协议还有另一种写法。
+```shell
+git clone git://github.com/JSLite/JSLite.js.git
+git clone git://github.com/JSLite/JSLite.js.git mypro # 克隆到自定义文件夹
+git clone [user@]example.com:path/to/repo.git/ # SSH协议还有另一种写法。
+```
git clone支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等,下面是一些例子。`git clone <版本库的网址> <本地目录名>`
```shell
-$ git clone http[s]://example.com/path/to/repo.git/
-$ git clone ssh://example.com/path/to/repo.git/
-$ git clone git://example.com/path/to/repo.git/
-$ git clone /opt/git/project.git
-$ git clone file:///opt/git/project.git
-$ git clone ftp[s]://example.com/path/to/repo.git/
-$ git clone rsync://example.com/path/to/repo.git/
+git clone http[s]://example.com/path/to/repo.git/
+git clone ssh://example.com/path/to/repo.git/
+git clone git://example.com/path/to/repo.git/
+git clone /opt/git/project.git
+git clone file:///opt/git/project.git
+git clone ftp[s]://example.com/path/to/repo.git/
+git clone rsync://example.com/path/to/repo.git/
```
## 配置
@@ -128,7 +136,7 @@ git config --list # 查看配置的信息
### 配置自动换行
-自动转换坑太大,提交到git是自动将换行符转换为lf
+自动转换坑太大,提交到git是自动将换行符转换为lf
```shell
git config --global core.autocrlf input
@@ -155,12 +163,14 @@ ssh -T git@github.com # 测试是否成功
**2.密钥复制到托管平台上**
-`vim ~/.ssh/jslite_rsa.pub`
-打开公钥文件 `jslite_rsa.pub` ,并把内容复制至代码托管平台上
+`vim ~/.ssh/jslite_rsa.pub`
+打开公钥文件 `jslite_rsa.pub` ,并把内容复制至代码托管平台上
**3.修改config文件**
-`vim ~/.ssh/config` #修改config文件,如果没有创建 `config`
+```shell
+vim ~/.ssh/config # 修改config文件,如果没有创建 `config`
+```
```shell
Host jslite.github.com
@@ -214,8 +224,8 @@ ssh-add -d ~/.ssh/jslite_rsa # 删除指定的key
### 免密码登录远程服务器
```shell
-$ ssh-keygen -t rsa -P '' -f ~/.ssh/aliyunserver.key
-$ ssh-copy-id -i ~/.ssh/aliyunserver.key.pub root@192.168.182.112 # 这里需要输入密码一次
+ssh-keygen -t rsa -P '' -f ~/.ssh/aliyunserver.key
+ssh-copy-id -i ~/.ssh/aliyunserver.key.pub root@192.168.182.112 # 这里需要输入密码一次
```
编辑 `~/.ssh/config`
@@ -240,19 +250,19 @@ git clone https://github.com/username/rep.git
```shell
[core]
- repositoryformatversion = 0
- filemode = true
- bare = false
- logallrefupdates = true
- ignorecase = true
- precomposeunicode = true
+ repositoryformatversion = 0
+ filemode = true
+ bare = false
+ logallrefupdates = true
+ ignorecase = true
+ precomposeunicode = true
[remote "origin"]
-- url = https://github.com/username/rep.git
-+ url = https://用户名:密码@github.com/username/rep.git
- fetch = +refs/heads/*:refs/remotes/origin/*
+- url = https://github.com/username/rep.git
++ url = https://用户名:密码@github.com/username/rep.git
+ fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
- remote = origin
- merge = refs/heads/master
+ remote = origin
+ merge = refs/heads/master
```
### 文件推向3个git库
@@ -273,7 +283,9 @@ usage: git remote set-url [--push] []
or: git remote set-url --delete
```
-`git remote set-url --delete origin https://oschina.net/wang/JSLite.js.git`
+```shell
+git remote set-url --delete origin https://oschina.net/wang/JSLite.js.git
+```
**3.推送代码**
@@ -310,8 +322,7 @@ $ git fetch -p
**5.更改pull**
-只需要更改config文件里,那三个url的顺序即可,fetch-url会直接对应排行第一的那个utl连接。
-
+只需要更改config文件里,那三个url的顺序即可,fetch-url会直接对应排行第一的那个utl连接。
### 修改远程仓库地址
@@ -375,7 +386,6 @@ git revert HEAD~1 # 撤销一条记录 会弹出 commit 编辑
git push # 提交回滚
```
-
### 回退到某一个版本
```shell
@@ -469,8 +479,6 @@ git rebase --continue
git push -f origin master
```
-
-
### 添加忽略文件
```shell
@@ -540,7 +548,6 @@ git merge upstream/master
# create mode 100644 README.md
```
-
### 批量修改历史commit中的名字和邮箱
**1.克隆仓库**
@@ -608,7 +615,6 @@ git pull --allow-unrelated-histories
git pull origin master --allow-unrelated-histories
```
-
### 查看某个文件历史
```shell
@@ -644,25 +650,35 @@ git config --global core.quotepath false
### init
-`git init` #初始化
+```shell
+git init # 初始化
+```
### status
-`git status` #获取状态
+```shell
+git status # 获取状态
+```
### add
-`git add file` # .或*代表全部添加
-`git rm --cached ` # 在commit之前撤销git add操作
-`git reset head` # 好像比上面`git rm --cached`更方便
+```shell
+git add file # .或*代表全部添加
+git rm --cached # 在commit之前撤销git add操作
+git reset head # 好像比上面`git rm --cached`更方便
+```
### commit
-`git commit -m "message"` #此处注意乱码
+```shell
+git commit -m "message" # 此处注意乱码
+```
### remote
-`git remote add origin git@github.com:JSLite/test.git` #添加源
+```shell
+git remote add origin git@github.com:JSLite/test.git # 添加源
+```
### push
@@ -674,20 +690,22 @@ git push -f origin master # 强制推送文件,缩写 -f(全写--force)
## clone
-`git clone git://github.com/JSLite/JSLite.js.git `
-`git clone git://github.com/JSLite/JSLite.js.git mypro` #克隆到自定义文件夹
-`git clone [user@]example.com:path/to/repo.git/` #SSH协议还有另一种写法。
+```shell
+git clone git://github.com/JSLite/JSLite.js.git
+git clone git://github.com/JSLite/JSLite.js.git mypro # 克隆到自定义文件夹
+git clone [user@]example.com:path/to/repo.git/ # SSH协议还有另一种写法。
+```
git clone支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等,下面是一些例子。`git clone <版本库的网址> <本地目录名>`
```shell
-$ git clone http[s]://example.com/path/to/repo.git/
-$ git clone ssh://example.com/path/to/repo.git/
-$ git clone git://example.com/path/to/repo.git/
-$ git clone /opt/git/project.git
-$ git clone file:///opt/git/project.git
-$ git clone ftp[s]://example.com/path/to/repo.git/
-$ git clone rsync://example.com/path/to/repo.git/
+git clone http[s]://example.com/path/to/repo.git/
+git clone ssh://example.com/path/to/repo.git/
+git clone git://example.com/path/to/repo.git/
+git clone /opt/git/project.git
+git clone file:///opt/git/project.git
+git clone ftp[s]://example.com/path/to/repo.git/
+git clone rsync://example.com/path/to/repo.git/
```
## 本地
@@ -827,7 +845,9 @@ git push -u origin branchName # 提交分支到远程origin主机中
### 拉取
-`git fetch -p` #拉取远程分支时,自动清理 远程分支已删除,本地还存在的对应同名分支。
+```shell
+git fetch -p # 拉取远程分支时,自动清理 远程分支已删除,本地还存在的对应同名分支。
+```
### 分支合并
@@ -840,7 +860,9 @@ git merge test # 将test分支合并到当前分支
### 重命名
-`git branch -m old new` #重命名分支
+```shell
+git branch -m old new # 重命名分支
+```
### 查看
@@ -946,7 +968,7 @@ git remote show origin # 查看指定源的全部信息
```shell
git tag -a v0.1 -m 'my version 1.4' # 新建带注释标签
git push origin --tags # 一次性推送所有分支
-git push origin v1.5 # 推送单个tag到orgin源上
+git push origin v1.5 # 推送单个tag到origin源上
git tag -v v1.4.2.1 # 验证标签,验证已经签署的标签
git show v1.5 # 看到对应的 GPG 签
@@ -964,7 +986,8 @@ git --git-dir='<绝对地址>/.git' describe --tags HEAD # 查看本地版本信
```shell
git config format.pretty oneline #显示历史记录时,每个提交的信息只显示一行
git config color.ui true #彩色的 git 输出
-git log #查看最近的提交日志
+git log #查看提交日志,从最近的提交开始显示
+git log --reverse #查看提交日志,从最远的提交开始显示
git log --pretty=oneline #单行显示提交日志
git log --graph --pretty=oneline --abbrev-commit
git log -num #显示第几条log(倒数)
@@ -1031,7 +1054,6 @@ git help * # 获取命令的帮助信息
git status # 获取当前的状态,非常有用,因为git会提示接下来的能做的操作
```
-
## 报错问题解决
**1. `git fatal: protocol error: bad line length character: No s`**
@@ -1081,7 +1103,7 @@ git config --global core.quotepath false
- [图解Git](http://marklodato.github.io/visual-git-guide/index-zh-cn.html)
- [git-简明指南](http://rogerdudler.github.io/git-guide/index.zh.html)
- [learnGitBranching 在线学习工具](http://pcottle.github.io/learnGitBranching/)
-- [初级教程](http://rogerdudler.github.io/git-guide/index.zh.html)
+- [初级教程](http://rogerdudler.github.io/git-guide/index.zh.html)
- [廖雪峰的Git教程](http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000)
- [蒋鑫老师将带你入github的大门](http://www.worldhello.net/gotgithub/)
- [git详解](http://www.open-open.com/lib/view/open1328069609436.html)
@@ -1091,5 +1113,3 @@ git config --global core.quotepath false
- [Git 本地仓库和裸仓库](https://gold.xitu.io/post/5842f9b861ff4b005889ade6)
- [沉浸式学 Git](http://www.kancloud.cn/kancloud/igit/46710)
- [Git进阶用法,主要是rebase高级用法](http://way.oschina.io/2016/12/15/notes/GitAdvance/?utm_source=gank.io&utm_medium=email)
-
-
diff --git a/command/gpasswd.md b/command/gpasswd.md
index c523f433de1..9d1d8616619 100644
--- a/command/gpasswd.md
+++ b/command/gpasswd.md
@@ -7,13 +7,13 @@ Linux下工作组文件的管理工具
**gpasswd命令** 是Linux下工作组文件`/etc/group`和`/etc/gshadow`管理工具。
-### 语法
+### 语法
```shell
gpasswd(选项)(参数)
```
-### 选项
+### 选项
```shell
-a:添加用户到组;
@@ -24,11 +24,11 @@ gpasswd(选项)(参数)
-R:限制用户登入组,只有组中的成员才可以用newgrp加入该组。
```
-### 参数
+### 参数
组:指定要管理的工作组。
-### 实例
+### 实例
如系统有个peter账户,该账户本身不是groupname群组的成员,使用newgrp需要输入密码即可。
@@ -60,4 +60,3 @@ gpasswd -a user_name group_name
```
-
\ No newline at end of file
diff --git a/command/gpg.md b/command/gpg.md
new file mode 100644
index 00000000000..242d3cfc4dc
--- /dev/null
+++ b/command/gpg.md
@@ -0,0 +1,88 @@
+gpg
+===
+
+可用于签名、检查、加密或解密的工具
+
+### 支持算法:
+
+Pubkey: `RSA`, `ELG`, `DSA`, `ECDH`, `ECDSA`, `EDDSA`
+Cipher: `IDEA`, `3DES`, `CAST5`, `BLOWFISH`, `AES`, `AES192`, `AES256`, `TWOFISH`,
+ `CAMELLIA128`, `CAMELLIA192`, `CAMELLIA256`
+Hash: `SHA1`, `RIPEMD160`, `SHA256`, `SHA384`, `SHA512`, `SHA224`
+Compression: `Uncompressed`, `ZIP`, `ZLIB`, `BZIP2`
+
+### 语法
+```shell
+gpg [选项] [文件...]
+```
+
+### 参数:
+
+```shell
+ -s, --sign 签名
+ --clear-sign 生成明文签名
+ -b, --detach-sign 生成一个独立的签名
+ -e, --encrypt 加密数据
+ -c, --symmetric 仅使用对称密码进行加密
+ -d, --decrypt 解密数据 (默认)
+ --verify 验签
+ -k, --list-keys 列出密钥
+ --list-signatures 列出密钥和签名
+ --check-signatures 列出并检查密钥签名
+ --fingerprint 列出密钥和指纹
+ -K, --list-secret-keys 列出私钥
+ --generate-key 生成新的密钥对
+ --quick-generate-key 快速生成新的密钥对
+ --quick-add-uid 快速添加新的用户ID
+ --quick-revoke-uid 快速撤销用户ID
+ --quick-set-expire 快速设置新的过期日期
+ --full-generate-key 全功能密钥对生成
+ --generate-revocation 生成撤销证书
+ --delete-keys 从公钥环中移除密钥
+ --delete-secret-keys 从私钥环中移除密钥
+ --quick-sign-key 快速签名密钥
+ --quick-lsign-key 快速在本地签名密钥
+ --quick-revoke-sig 快速撤销密钥签名
+ --sign-key 签名密钥
+ --lsign-key 本地签名密钥
+ --edit-key 签名或编辑密钥
+ --change-passphrase 更改密码短语
+ --export 导出密钥
+ --send-keys 将密钥导出到密钥服务器
+ --receive-keys 从密钥服务器导入密钥
+ --search-keys 在密钥服务器上搜索密钥
+ --refresh-keys 从密钥服务器更新所有密钥
+ --import 导入/合并密钥
+ --card-status 打印卡片状态
+ --edit-card 更改卡片上的数据
+ --change-pin 更改卡片的PIN码
+ --update-trustdb 更新信任数据库
+ --print-md 打印消息摘要
+ --server 以服务器模式运行
+ --tofu-policy VALUE 为密钥设置TOFU策略
+```
+
+### 选项:
+
+```shell
+ -a, --armor 指定ascii格式的输出
+ -r, --recipient USER-ID 对特定用户ID的加密
+ -u, --local-user USER-ID 使用 USER-ID 进行签名或解密
+ -z N 设置压缩级别为N(0表示禁用)
+ --textmode 使用规范文本模式
+ -o, --output FILE 将输出写入文件FILE
+ -v, --verbose 详细模式
+ -n, --dry-run 不做任何更改
+ -i, --interactive 在覆盖前提示
+ --openpgp 使用严格的OpenPGP行为
+```
+
+### 示例:
+
+```shell
+ -se -r Bob [file] 为用户Bob签名并加密
+ --clear-sign [file] 生成明文签名
+ --detach-sign [file] 生成一个独立的签名
+ --list-keys [names] 显示密钥
+ --fingerprint [names] 显示指纹
+```
diff --git a/command/gpm.md b/command/gpm.md
index 6b01e8cd50f..adffb8aee6f 100644
--- a/command/gpm.md
+++ b/command/gpm.md
@@ -7,13 +7,13 @@ gpm
**gpm命令** 是Linux的虚拟控制台下的鼠标服务器,用于在虚拟控制台下实现鼠标复制和粘贴文本的功能。
-### 语法
+### 语法
```shell
gpm(选项)
```
-### 选项
+### 选项
```shell
-a:设置加速值;
@@ -24,4 +24,3 @@ gpm(选项)
```
-
\ No newline at end of file
diff --git a/command/grep.md b/command/grep.md
index c7c5b065495..e52082e6ce1 100644
--- a/command/grep.md
+++ b/command/grep.md
@@ -5,9 +5,9 @@ grep
## 补充说明
-**grep** (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,使用上十分灵活。
+**grep** (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。用于过滤/搜索的特定字符。可使用正则表达式能配合多种命令使用,使用上十分灵活。
-### 选项
+### 选项
```shell
-a --text # 不要忽略二进制数据。
@@ -28,6 +28,7 @@ grep
-l --file-with-matches # 列出文件内容符合指定的范本样式的文件名称。
-L --files-without-match # 列出文件内容不符合指定的范本样式的文件名称。
-n --line-number # 在显示符合范本样式的那一列之前,标示出该列的编号。
+-P --perl-regexp # PATTERN 是一个 Perl 正则表达式
-q --quiet或--silent # 不显示任何信息。
-R/-r --recursive # 此参数的效果和指定“-d recurse”参数相同。
-s --no-messages # 不显示错误信息。
@@ -49,7 +50,7 @@ $ # 锚定行的结束 如:'grep$' 匹配所有以grep结尾的行。
* # 匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。
.* # 一起用代表任意字符。
[] # 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
-[^] # 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。
+[^] # 匹配一个不在指定范围内的字符,如:'[^A-Z]rep' 匹配不包含 A-Z 中的字母开头,紧跟 rep 的行
\(..\) # 标记匹配字符,如'\(love\)',love被标记为1。
\< # 锚定单词的开始,如:'\ # 锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。
@@ -95,6 +96,12 @@ grep -E "[1-9]+"
# 或
egrep "[1-9]+"
```
+使用正则表达式 **-P** 选项:
+
+```shell
+grep -P "(\d{3}\-){2}\d{4}" file_name
+```
+
只输出文件中匹配到的部分 **-o** 选项:
@@ -112,6 +119,12 @@ line.
grep -c "text" file_name
```
+搜索命令行历史记录中 输入过 `git` 命令的记录:
+
+```shell
+history | grep git
+```
+
输出包含匹配字符串的行数 **-n** 选项:
```shell
@@ -128,7 +141,7 @@ grep "text" -n file_1 file_2
```shell
echo gun is not unix | grep -b -o "not"
7:not
-#一行中字符串的字符便宜是从该行的第一个字符开始计算,起始值为0。选项 **-b -o** 一般总是配合使用。
+#一行中字符串的字符偏移是从该行的第一个字符开始计算,起始值为0。选项 **-b -o** 一般总是配合使用。
```
搜索多个文件并查找匹配文本在哪些文件中:
@@ -137,7 +150,7 @@ echo gun is not unix | grep -b -o "not"
grep -l "text" file1 file2 file3...
```
-### grep递归搜索文件
+### grep递归搜索文件
在多级目录中对文本进行递归搜索:
@@ -158,6 +171,7 @@ echo "hello world" | grep -i "HELLO"
```shell
echo this is a text line | grep -e "is" -e "line" -o
is
+is
line
#也可以使用 **-f** 选项来匹配多个样式,在样式文件中逐行写出需要匹配的字符。
@@ -239,4 +253,4 @@ b
```
-
+
diff --git a/command/groupadd.md b/command/groupadd.md
index 27c818c3476..9cc1bce1bbe 100644
--- a/command/groupadd.md
+++ b/command/groupadd.md
@@ -7,26 +7,26 @@ groupadd
**groupadd命令** 用于创建一个新的工作组,新工作组的信息将被添加到系统文件中。
-### 语法
+### 语法
```shell
groupadd(选项)(参数)
```
-### 选项
+### 选项
```shell
-g:指定新建工作组的id;
-r:创建系统工作组,系统工作组的组ID小于500;
--K:覆盖配置文件“/ect/login.defs”;
+-K:覆盖配置文件“/etc/login.defs”;
-o:允许添加组ID号不唯一的工作组。
```
-### 参数
+### 参数
组名:指定新建工作组的组名。
-### 实例
+### 实例
建立一个新组,并设置组ID加入系统:
@@ -37,4 +37,3 @@ groupadd -g 344 jsdigname
此时在`/etc/passwd`文件中产生一个组ID(GID)是344的项目。
-
\ No newline at end of file
diff --git a/command/groupdel.md b/command/groupdel.md
index 6a191582280..8070a4860a6 100644
--- a/command/groupdel.md
+++ b/command/groupdel.md
@@ -5,19 +5,19 @@ groupdel
## 补充说明
-**groupdel命令** 用于删除指定的工作组,本命令要修改的系统文件包括/ect/group和/ect/gshadow。若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。
+**groupdel命令** 用于删除指定的工作组,本命令要修改的系统文件包括/ect/group和/ect/gshadow。若该群组是某些用户的主组,则必须先删除这些用户或改变其主组后,才能删除该群组;如果该群组仅为某些用户的附加组,则可以直接删除,这些用户中的该组信息也会被删除。
-### 语法
+### 语法
```shell
groupdel(参数)
```
-### 参数
+### 参数
组:要删除的工作组名。
-### 实例
+### 实例
```shell
groupadd damon //创建damon工作组
@@ -25,4 +25,3 @@ groupdel damon //删除这个工作组
```
-
\ No newline at end of file
diff --git a/command/groupmems.md b/command/groupmems.md
new file mode 100644
index 00000000000..16acdb99820
--- /dev/null
+++ b/command/groupmems.md
@@ -0,0 +1,111 @@
+groupmems
+===
+
+管理用户主要组的成员
+
+## 补充说明
+
+`groupmems` 命令允许用户管理他/她自己的组成员列表,而不需要超级用户权限。`groupmems` 实用程序适用于将其用户配置为以他们自己的名义主组(即来宾/来宾)的系统。
+
+只有作为管理员的超级用户可以使用 `groupmems` 来更改其他组的成员资格。
+
+### 语法
+
+```shell
+groupmems -a user_name | -d 用户名 | [-g 用户组名] | -l | -p
+```
+
+### 选项
+
+```bash
+-a, --add user_name # 将用户添加到组成员列表。如果 /etc/gshadow 文件存在,并且该组在 /etc/gshadow 文件中没有条目,则将创建一个新条目。
+
+-d, --delete user_name
+# 从组成员列表中删除用户。
+# 如果 /etc/gshadow 文件存在,用户将从组的成员和管理员列表中删除。
+# 如果 /etc/gshadow 文件存在,并且该组在 /etc/gshadow 文件中没有条目,则将创建一个新条目。
+
+-g, --group group_name # 超级用户可以指定要修改的组成员列表。
+-l, --list # 列出组成员列表。
+-p, --purge # 从组成员列表中清除所有用户。
+# 如果 /etc/gshadow 文件存在,并且该组在 /etc/gshadow 文件中没有条目,则将创建一个新条目。
+```
+
+## 配置
+
+`/etc/login.defs` 中的以下配置变量会更改此工具的行为:
+
+```shell
+MAX_MEMBERS_PER_GROUP (number)
+```
+
+每个组条目的最大成员数。 当达到最大值时,在 `/etc/group` 中启动一个新的组条目(行)(具有相同的名称、相同的密码和相同的 GID)。
+
+默认值为 0,表示组中的成员数量没有限制。
+
+此功能(拆分组)允许限制组文件中的行长度。 这有助于确保 NIS 组的行不超过 1024 个字符。
+
+如果你需要强制执行这样的限制,你可以使用 25。
+
+注意:并非所有工具都支持拆分组(即使在 Shadow 工具包中)。 除非你真的需要它,否则你不应该使用这个变量。
+
+## 例子
+
+groupmems 可执行文件应该在模式 2770 中作为用户 root 和组组。 系统管理员可以将用户添加到组中,以允许或禁止他们使用 groupmems 实用程序来管理他们自己的组成员列表。
+
+```shell
+groupadd -r groups
+chmod 2770 groupmems
+
+chown root.groups groupmems
+groupmems -g groups -a gk4
+```
+
+让我们创建一个新用户和一个新组并验证结果:
+
+```shell
+useradd student
+passwd student
+groupadd staff
+```
+
+使用户 student 成为组人员的成员:
+
+```shell
+groupmems -g staff -a student
+groupmems -g staff -l
+```
+
+将用户添加到组:
+
+```shell
+groupmems -a mike -g SUPPORT
+groupmems --add mike -g SUPPORT
+```
+
+从组中删除/移除用户:
+
+```shell
+groupmems -d mike SUPPORT -g SUPPORT
+groupmems --delete mike SUPPORT -g SUPPORT
+```
+
+更改组名称:
+
+```shell
+groupmems -g SUPPORT
+```
+
+从组中删除用户:
+
+```shell
+groupmems -p -g SUPPORT
+groupmems --purge -g SUPPORT
+```
+
+要列出组的成员:
+
+```shell
+groupmems -l -g SUPPORT
+groupmems --list -g SUPPORT
+```
diff --git a/command/groupmod.md b/command/groupmod.md
index 3403fb45b4a..58df9d6b1ee 100644
--- a/command/groupmod.md
+++ b/command/groupmod.md
@@ -1,29 +1,88 @@
groupmod
===
-更改群组识别码或名称
+修改系统上的组定义
## 补充说明
-**groupmod命令** 更改群组识别码或名称。需要更改群组的识别码或名称时,可用groupmod指令来完成这项工作。
+**groupmod命令** 通过修改组数据库( /etc/group 与 /etc/gshadow )的相应条目来更改指定组的定义,例如GID,组成员,组名称,组密码等。
-### 语法
+### 语法
```shell
-groupmod(选项)(参数)
+groupmod (选项) (参数)
```
-### 选项
+### 选项
```shell
--g<群组识别码>:设置欲使用的群组识别码;
--o:重复使用群组识别码;
--n<新群组名称>:设置欲使用的群组名称。
+-a, --append: 与 -U 选项配合使用,将指定用户追加到现有成员列表,而不是采用默认的覆盖方式。
+-g, --gid GID: 将组修改为指定值,必须是非负整数且唯一(除非同时使用 -o 选项),以该组为主要组的成员会自动更新以保持该组。
+-n, --new-name 新组名称: 设置要修改为的组名称。
+-o: 可以设置重复的gid;
+-p, --password 密码: 设置组密码(也可以直接修改 /etc/gshadow 文件),密码必须是 crypt 加密后的密文,用于配合 newgrp 命令让非组成员临时切换到该组,但该机制在现代系统中已不推荐使用。
+-U, --users user1,user2...: 以逗号分隔的用户列表,将组成员覆盖为该列表;若同时指定 -a 选项,则改为追加到现有成员列表中。
```
-### 参数
+### 参数
-组名:指定要修改的工作的组名。
+组名:指定要修改的组。
+### 实例
-
\ No newline at end of file
+修改 group1 的GID
+
+```shell
+groupmod -g 1003 group1
+```
+
+修改 group2 的GID为重复的gid 1003
+
+``` shell
+groupmod -g 1003 -o group2
+```
+
+修改 group2 名称为 group3
+
+```shell
+groupmod -n group3 group2
+```
+
+覆盖 group3 的组成员为 user1
+
+```shell
+groupmod -U user1 group3
+```
+
+追加 user2 user3 到 group3
+
+```shell
+groupmod -a -U user2,user3 group3
+```
+
+### 说明
+
+部分系统(如 Ubuntu 22.04)上的`groupmod`命令可能不支持 -a 和 -U 选项,可以使用`gpasswd`命令代替。
+
+```shell
+groupmod -U user1,user2 groupname
+```
+
+等价于
+
+```shell
+gpasswd -M "" groupname
+gpasswd -M user1,user2 groupname
+```
+
+```shell
+groupmod -a -U user1,user2,user3 groupname
+```
+
+等价于
+
+```shell
+gpasswd -a user1 groupname
+gpasswd -a user2 groupname
+gpasswd -a user3 groupname
+```
diff --git a/command/groups.md b/command/groups.md
index 58c1e570656..19e533dba0d 100644
--- a/command/groups.md
+++ b/command/groups.md
@@ -1,37 +1,46 @@
groups
===
-用来打印指定用户所属的工作组
+打印指定用户所在组的名称。
-## 补充说明
-
-**groups命令** 在标准输入输出上输出指定用户所在组的组成员,每个用户属于`/etc/passwd`中指定的一个组和在`/etc/group`中指定的其他组。
-
-### 语法
+## 概要
```shell
-groups(选项)(参数)
+groups [OPTION]... [username]...
```
-### 选项
+## 主要用途
+
+- 打印指定用户所在组的名称。
+
+## 选项
```shell
--help:显示命令的帮助信息;
---version:显示命令的版本信息。
+--help 显示帮助信息并退出。
+--version 显示版本信息并退出。
```
-### 参数
+## 参数
-用户名:指定要打印所属工作组的用户名。
+username(可选):可以是一到多个,不提供时默认为当前用户。
-### 实例
+## 返回值
+
+返回0表示成功,返回非0值表示失败。
+
+## 例子
显示linux用户所属的组
```shell
-groups linux
+[root@localhost ~]# groups linux
linux : linux adm dialout cdrom plugdev lpadmin admin sambashare
```
+### 注意
+
+1. 该命令等价于 `id -Gn`。
+2. 每个用户属于`/etc/passwd`中指定的一个组和在`/etc/group`中指定的其他组。
+3. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 groups`,`info coreutils 'groups invocation'`。
+
-
\ No newline at end of file
diff --git a/command/grpck.md b/command/grpck.md
index 91bec81a7c5..e8dc8aa152b 100644
--- a/command/grpck.md
+++ b/command/grpck.md
@@ -9,20 +9,20 @@ grpck
grpck命令检查数据是否正确存放,每条记录是否都包含足够的信息,是否有一个唯一的组名,是否包含正确的用户,是否正确设置了组的管理员等。grpck检查发现错误以后,在命令行提示用户是否删除错误的记录。如果用户没有明确回答删除记录,grpck终止运行。
-### 语法
+### 语法
```shell
grpck(选项)
```
-### 选项
+### 选项
```shell
-r:只读模式;
-s:排序组id。
```
-### 实例
+### 实例
对组账号和影子文件进行验证:
@@ -47,4 +47,3 @@ grpck: the files have been updated # 这时已经删除了错误的行,提示
```
-
\ No newline at end of file
diff --git a/command/grpconv.md b/command/grpconv.md
index b50f81e2aab..6468cf9462c 100644
--- a/command/grpconv.md
+++ b/command/grpconv.md
@@ -7,13 +7,13 @@ grpconv
**grpconv命令** 用来开启群组的投影密码。Linux系统里的用户和群组密码,分别存放在`/etc`目录下的passwd和group文件中。因系统运作所需,任何人都得以读取它们,造成安全上的破绽。投影密码将文件内的密码改存在`/etc`目录下的shadow和gshadow文件内,只允许系统管理者读取,同时把原密码置换为"x"字符。投影密码的功能可随时开启或关闭,您只需执行grpconv指令就能开启群组投影密码。
-### 语法
+### 语法
```shell
grpconv
```
-### 实例
+### 实例
设置cdy组密码
@@ -37,4 +37,3 @@ cdy:123456:: # 已经移到影子文件了
注:gshadow, shadow只有root权限才可以查看。
-
\ No newline at end of file
diff --git a/command/grpunconv.md b/command/grpunconv.md
index 5958b4a359d..b623ab61361 100644
--- a/command/grpunconv.md
+++ b/command/grpunconv.md
@@ -7,13 +7,13 @@ grpunconv
**grpunconv命令** 用来关闭群组的投影密码。它会把密码从gshadow文件内,回存到group文件里。
-### 语法
+### 语法
```shell
grpunconv
```
-### 实例
+### 实例
未关闭的情况
@@ -37,4 +37,3 @@ cdy:123456:1000:
```
-
\ No newline at end of file
diff --git a/command/grub.md b/command/grub.md
index e7c75bc6e8c..9de9c456598 100644
--- a/command/grub.md
+++ b/command/grub.md
@@ -7,13 +7,13 @@ grub
**grub命令** 是多重引导程序grub的命令行shell工具。
-### 语法
+### 语法
```shell
grub(选项)
```
-### 选项
+### 选项
```shell
--batch:打开批处理模式;
@@ -29,7 +29,7 @@ grub(选项)
--read-only:只读模式。
```
-### 实例
+### 实例
利用grub命令来启动损坏的Linux系统,可能你的电脑因为某些原因损坏不能自动启动了。当然原因很多,可能的现象也很多。
@@ -69,4 +69,6 @@ boot
这里的关键问题是如何确定系统的几个分区:`/boot` `/` `/sbin`
-
\ No newline at end of file
+### 参考资料
+
+- 自由软件基金会 - grub 文档
diff --git a/command/grub2-mkconfig.md b/command/grub2-mkconfig.md
new file mode 100644
index 00000000000..80c9dd3c2f9
--- /dev/null
+++ b/command/grub2-mkconfig.md
@@ -0,0 +1,30 @@
+grub2-mkconfig
+===
+
+生成 grub.cfg 配置文件。
+
+## 语法
+
+```shell
+用法: grub2-mkconfig [OPTION]
+生成 grub 配置文件
+
+ -o, --output=FILE 将生成的配置输出到 FILE 文件 [default=stdout]
+ -h, --help 打印这个文件并退出
+ -v, --version 打印版本信息并退出
+
+报告 Bug 通过 .
+
+```
+
+## 实例
+
+生成新的grub配置文件
+
+```shell
+grub2-mkconfig -o /boot/grub2/grub.cfg
+
+# 或者
+
+grub2-mkconfig > /boot/grub2/grub.cfg
+```
diff --git a/command/grub2-set-default.md b/command/grub2-set-default.md
new file mode 100644
index 00000000000..8cbd5697cb9
--- /dev/null
+++ b/command/grub2-set-default.md
@@ -0,0 +1,45 @@
+grub2-set-default
+===
+
+设置系统默认的启动内核
+
+## 语法
+
+```shell
+Usage: grub2-set-default [OPTION] MENU_ENTRY
+Set the default boot menu entry for GRUB.
+This requires setting GRUB_DEFAULT=saved in /etc/default/grub.
+
+ -h, --help print this message and exit
+ -v, --version print the version information and exit
+ --boot-directory=DIR expect GRUB images under the directory DIR/grub2
+ instead of the /boot/grub2 directory
+
+MENU_ENTRY is a number, a menu item title or a menu item identifier.
+
+Report bugs to .
+
+```
+
+## 实例
+
+查看可选的系统内核:
+```shell
+# awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
+CentOS Linux (5.4.219-1.el7.elrepo.x86_64) 7 (Core)
+CentOS Linux (3.10.0-1160.76.1.el7.x86_64) 7 (Core)
+CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core)
+CentOS Linux (0-rescue-3221d376917c458992a952d6327f2d6a) 7 (Core)
+```
+
+grub2-set-default后面的序号从0开始。所以,如果想设置第一个选项为默认启动内核,则可以使用下面的命令:
+
+```shell
+# grub2-set-default 0
+```
+如果想使用CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core)内核版本,则可以将0改为2
+
+重启系统
+```shell
+~]# init 6
+```
\ No newline at end of file
diff --git a/command/gunzip.md b/command/gunzip.md
index 9c7b5c3a5af..4efa2da8fa4 100644
--- a/command/gunzip.md
+++ b/command/gunzip.md
@@ -7,13 +7,13 @@ gunzip
**gunzip命令** 用来解压缩文件。gunzip是个使用广泛的解压缩程序,它用于解开被gzip压缩过的文件,这些压缩文件预设最后的扩展名为.gz。事实上gunzip就是gzip的硬连接,因此不论是压缩或解压缩,都可通过gzip指令单独完成。
-### 语法
+### 语法
```shell
gunzip(选项)(参数)
```
-### 选项
+### 选项
```shell
-a或——ascii:使用ASCII文字模式;
@@ -32,11 +32,11 @@ gunzip(选项)(参数)
-V或——version:显示版本信息;
```
-### 参数
+### 参数
文件列表:指定要解压缩的压缩包。
-### 实例
+### 实例
首先将`/etc`目录下的所有文件以及子目录进行压缩,备份压缩包etc.zip到`/opt`目录,然后对etc.zip文件进行gzip压缩,设置gzip的压缩级别为9。
@@ -64,4 +64,3 @@ compressed uncompressed ratio uncompressed_name
通过上面的示例可以知道`gzip –d`等价于`gunzip`命令。
-
\ No newline at end of file
diff --git a/command/gzexe.md b/command/gzexe.md
index c6658a9eef1..dcb26bc2b1e 100644
--- a/command/gzexe.md
+++ b/command/gzexe.md
@@ -7,21 +7,20 @@ gzexe
**gzexe命令** 用来压缩可执行文件,压缩后的文件仍然为可执行文件,在执行时进行自动解压缩。当您去执行被压缩过的执行文件时,该文件会自动解压然后继续执行,和使用一般的执行文件相同。这个命令也可以看成是gunzip命令的一个扩展。
-### 语法
+### 语法
```shell
gzexe(选项)(参数)
```
-### 选项
+### 选项
```shell
-d:解压缩被gzexe压缩过的可执行文件。
```
-### 参数
+### 参数
文件:指定需要压缩的可执行文件。
-
\ No newline at end of file
diff --git a/command/gzip.md b/command/gzip.md
index 89bee155669..4c946b80fe5 100644
--- a/command/gzip.md
+++ b/command/gzip.md
@@ -36,6 +36,7 @@ gzip(选项)(参数)
--best:此参数的效果和指定“-9”参数相同;
--fast:此参数的效果和指定“-1”参数相同。
-num 用指定的数字num调整压缩的速度,-1或--fast表示最快压缩方法(低压缩比),-9或--best表示最慢压缩方法(高压缩比)。系统缺省值为6。
+-c或--stdout或--to-stdout:保留原始文件,生成标准输出流(结合重定向使用)。
```
### 参数
@@ -82,5 +83,12 @@ gzip -rv test6
gzip -dr test6
```
+保留原始文件,把压缩/解压流重定向到新文件
+
+```shell
+gzip -c aa > aa.gz
+gzip -dc bb.gz > bb
+```
+
+
-
diff --git a/command/halt.md b/command/halt.md
index dc3bba6fe42..8f71e43e4df 100644
--- a/command/halt.md
+++ b/command/halt.md
@@ -7,13 +7,13 @@ halt
**halt命令** 用来关闭正在运行的Linux操作系统。halt命令会先检测系统的runlevel,若runlevel为0或6,则关闭系统,否则即调用shutdown来关闭系统。
-### 语法
+### 语法
```shell
halt(选项)
```
-### 选项
+### 选项
```shell
-d:不要在wtmp中记录;
@@ -24,7 +24,7 @@ halt(选项)
-w:仅在wtmp中记录,而不实际结束系统。
```
-### 实例
+### 实例
```shell
halt -p # 关闭系统后关闭电源。
@@ -32,4 +32,3 @@ halt -d # 关闭系统,但不留下纪录。
```
-
\ No newline at end of file
diff --git a/command/hcitool.md b/command/hcitool.md
new file mode 100644
index 00000000000..1e21b9ebce3
--- /dev/null
+++ b/command/hcitool.md
@@ -0,0 +1,77 @@
+hcitool
+===
+
+hcitool是一个Linux命令行工具,用于管理和调试蓝牙设备。它可以用于扫描周围的蓝牙设备、连接到蓝牙设备发送命令和数据包等。
+
+## 安装
+
+hcitool是一个Linux命令行工具,通常已经预装在大多数Linux行版中。如果您的系统中没有安装hcitool,可以使用以下命令进行安装(debian系列发行示例)
+
+```bash
+sudo apt-get install bluez
+```
+
+## 使用
+注意事项:
+1. 使用ble相关命令需要提权如:lescan
+
+
+### 语法
+
+`hcitool [options] [command parameters]`
+
+### 命令
+
+```bash
+ dev 显示本地设备
+ inq 查询远程设备
+ scan 扫描远程设备
+ name 从远程设备获取名称
+ info 从远程设备获取信息
+ spinq 启动定期查询
+ epinq 退出定期查询
+ cmd 提交任意HCI命令
+ con 显示活动连接
+ cc 创建到远程设备的连接
+ dc 断开与远程设备的连接
+ sr 交换机中心/外围角色
+ cpt 更改连接数据包类型
+ rssi 显示连接rssi
+ lq 显示链路质量
+ tpl 显示发射功率电平
+ afh 显示afh通道图
+ lp 设置/显示链接策略设置
+ lst 设置/显示链接监控超时
+ auth 请求身份验证
+ enc 设置连接加密
+ key 更改连接链接键
+ clkoff 读取时钟偏移
+ clock 读取本地或远程时钟
+ lescan 启动LE扫描
+ leinfo 获取LE远程信息
+ lealadd 将设备添加到LE接受列表
+ lealrm 从LE接受列表中删除设备
+ lealsz LE接受列表的读取大小
+ lealclr 清除LE接受列表
+
+```
+### 常用简单示例
+1.扫描周围的蓝牙设备
+
+`hcitool scan`
+
+2.通过mac地址连接到蓝牙设备
+
+`hcitool cc `
+
+3.显示当前蓝牙适配器信息
+
+`hcitool dev`
+
+4.通过mac地址找到蓝牙名称
+
+`hcitool name `
+
+5.显示当前蓝牙活动连接信息
+
+`hcitool con`
diff --git a/command/hdparm.md b/command/hdparm.md
index a2af8d50908..4b7ea235c9d 100644
--- a/command/hdparm.md
+++ b/command/hdparm.md
@@ -7,13 +7,13 @@ hdparm
**hdparm命令** 提供了一个命令行的接口用于读取和设置IDE或SCSI硬盘参数。
-### 语法
+### 语法
```shell
hdparm(选项)(参数)
```
-### 选项
+### 选项
```shell
-a<快取分区>:设定读取文件时,预先存入块区的分区数,若不加上<快取分区>选项,则显示目前的设定;
@@ -21,7 +21,7 @@ hdparm(选项)(参数)
-c:设定IDE32位I/O模式;
-C:检测IDE硬盘的电源管理模式;
-d<0或1>:设定磁盘的DMA模式;
--f:将内存缓冲区的数据写入硬盘,并清楚缓冲区;
+-f:将内存缓冲区的数据写入硬盘,并清除缓冲区;
-g:显示硬盘的磁轨,磁头,磁区等参数;
-h:显示帮助;
-i:显示硬盘的硬件规格信息,这些信息是在开机时由硬盘本身所提供;
@@ -46,11 +46,11 @@ hdparm(选项)(参数)
-Z:关闭某些Seagate硬盘的自动省电功能。
```
-### 参数
+### 参数
设备文件:指定id驱动对应的设备文件名。
-### 实例
+### 实例
显示硬盘的相关设置:
@@ -112,4 +112,3 @@ hdparm -m #参数值为整数值如8 /dev/sda
```
-
\ No newline at end of file
diff --git a/command/head.md b/command/head.md
index f3144bf8aa5..f643353e2b1 100644
--- a/command/head.md
+++ b/command/head.md
@@ -1,30 +1,99 @@
head
===
-在屏幕上显示指定文件的开头若干行
+显示文件的开头部分。
-## 补充说明
+## 概要
-**head命令** 用于显示文件的开头的内容。在默认情况下,head命令显示文件的头10行内容。
+```shell
+head [OPTION]... [FILE]...
+```
+
+## 主要用途
-### 语法
+- 在未指定行数时默认显示前10行。
+- 处理多个文件时会在各个文件之前附加含有文件名的行。
+- 当没有文件或文件为`-`时,读取标准输入。
+
+## 选项
```shell
-head(选项)(参数)
+-c, --bytes=[-]NUM 显示前NUM字节;如果NUM前有"-",那么会打印除了文件末尾的NUM字节以外的其他内容。
+-n, --lines=[-]NUM 显示前NUM行而不是默认的10行;如果NUM前有"-",那么会打印除了文件末尾的NUM行以外的其他行。
+-q, --quiet, --silent 不打印文件名行。
+-v, --verbose 总是打印文件名行。
+-z, --zero-terminated 行终止符为NUL而不是换行符。
+--help 显示帮助信息并退出。
+--version 显示版本信息并退出。
+
+NUM可以有一个乘数后缀:
+b 512
+kB 1000
+k 1024
+MB 1000*1000
+M 1024*1024
+GB 1000*1000*1000
+G 1024*1024*1024
+T、P、E、Z、Y等以此类推。
+
+也可以使用二进制前缀:
+KiB=K
+MiB=M
+以此类推。
```
-### 选项
+## 参数
+
+FILE(可选):要处理的文件,可以为一或多个。
+
+## 返回值
+
+返回0表示成功,返回非0值表示失败。
+
+## 例子
```shell
--n<数字>:指定显示头部内容的行数;
--c<字符数>:指定显示头部内容的字符数;
--v:总是显示文件名的头信息;
--q:不显示文件名的头信息。
+# 查看历史文件的前6行:
+[user2@pc ~]$ head -n 6 ~/.bash_history
+#1575425555
+cd ~
+#1575425558
+ls -lh
+#1575425562
+vi ~/Desktop/ZhuangZhu-74.txt
```
-### 参数
+```shell
+# 查看多个文件:
+[user2@pc ~]$ head -n ~/.bash_history ~/.bashrc
+==> /allhome/user2/.bash_history <==
+#1575425555
+cd ~
+#1575425558
+ls -lh
+#1575425562
+vi ~/Desktop/ZhuangZhu-74.txt
+#1575425566
+uptime
+#1575425570
+find ~/ -maxdepth 3 -name 'test.sh' -exec lh {} \;
+
+==> /allhome/user2/.bashrc <==
+# .bashrc
+
+# forbid use Ctrl+D to exit shell.
+set -o ignoreeof
+
+# Source global definitions.
+if [ -f /etc/bashrc ]; then
+ . /etc/bashrc
+fi
+
+```
+
+
+### 注意
-文件列表:指定显示头部内容的文件列表。
+1. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 head`,`info coreutils 'head invocation'`。
-
\ No newline at end of file
diff --git a/command/help.md b/command/help.md
index 3d74616c958..5cf580220b3 100644
--- a/command/help.md
+++ b/command/help.md
@@ -1,29 +1,55 @@
help
===
-显示帮助信息
+该命令是bash内建命令,用于显示bash内建命令的帮助信息。
## 补充说明
-**help命令** 用于显示shell内部命令的帮助信息。help命令只能显示shell内部的命令帮助信息。而对于外部命令的帮助信息只能使用man或者info命令查看。
+**help命令** help命令只能显示bash内建命令的帮助信息,而对于外部命令的帮助信息只能使用man或者info命令查看。
-### 语法
+### 语法
```shell
help(选项)(参数)
```
-### 选项
+### 选项
```shell
--s:输出短格式的帮助信息。仅包括命令格式。
+-d:显示内建命令的简要描述。
+-m:按照man手册的格式输出内建命令的帮助信息。
+-s:仅输出内建命令的命令格式。
+不指定选项时:输出的帮助信息类似于-m选项,但是缺少段落名称和'SEE ALSO','IMPLEMENTATION'部分。
```
-### 参数
+### 参数
-内部命令:指定需要显示帮助信息的shell内部命令。
+bash内建命令(可以为多个,请用空格分隔开)。
-### 实例
+### 常见问题
+
+Q:有哪些命令是bash内建命令?我如何判断一个命令是否为bash内建命令?
+
+A:您可以在终端使用 'man builtin' 或 'man builtins' 来获取;您可以查看bash内建命令 'type' 的帮助信息。
+
+Q:那么help命令本身的帮助信息如何获取?
+
+A:把help作为参数传给help命令;)
+
+Q:为什么echo也可以用 'man echo' 来查看帮助信息?
+
+A:因为除了bash内建的echo,GNU/linux的coreutils包里也有该命令;在echo的man手册中,DESCRIPTION段落的 'NOTE' 也提示了和同名内建的不同。
+
+PS:当你在shell脚本里定义了一个叫 'echo' 的函数,那么调用的时候优先级会如何呢?
+
+请参考 'builtin' 命令
+
+Q:我需要获得更多的bash的相关帮助信息
+
+A:限于篇幅和主题,您可以在终端执行 'man bash' , 'info bash' ,[访问bash官方网站](http://www.gnu.org/software/bash/),以及搜索引擎等。
+
+
+### 实例
使用help命令显示shell内部shopt命令的帮助信息,输入如下命令:
@@ -41,4 +67,4 @@ shopt: shopt [-pqsu] [-o long-option] optname [optname...]
```
-
\ No newline at end of file
+
diff --git a/command/hexdump.md b/command/hexdump.md
index 16901d7b18e..76bef5305b0 100644
--- a/command/hexdump.md
+++ b/command/hexdump.md
@@ -7,13 +7,13 @@ hexdump
**hexdump命令** 一般用来查看“二进制”文件的十六进制编码,但实际上它能查看任何文件,而不只限于二进制文件。
-### 语法
+### 语法
```shell
hexdump [选项] [文件]...
```
-### 选项
+### 选项
```shell
-n length 只格式化输入文件的前length个字节。
@@ -47,7 +47,7 @@ hexdump [选项] [文件]...
同一行如果要显示多个格式字符串,则可以跟多个`-e`选项。
-### 实例
+### 实例
```shell
hexdump -e '16/1 "%02X " " | "' -e '16/1 "%_p" "\n"' test
@@ -57,4 +57,3 @@ hexdump -e '16/1 "%02X " " | "' -e '16/1 "%_p" "\n"' test
```
-
\ No newline at end of file
diff --git a/command/history.md b/command/history.md
index 6af3d49120b..2a38ab9c255 100644
--- a/command/history.md
+++ b/command/history.md
@@ -1,46 +1,51 @@
history
===
-用于显示历史命令
+显示或操作历史列表。
-## 补充说明
+## 概要
-**history命令** 用于显示指定数目的指令命令,读取历史命令文件中的目录到历史命令缓冲区和将历史命令缓冲区中的目录写入命令文件。
+```shell
+history [-c] [-d offset] [n]
+history -anrw [filename]
+history -ps arg [arg...]
+```
-该命令单独使用时,仅显示历史命令,在命令行中,可以使用符号`!`执行指定序号的历史命令。例如,要执行第2个历史命令,则输入`!2`。
+## 主要用途
-历史命令是被保存在内存中的,当退出或者登录shell时,会自动保存或读取。在内存中,历史命令仅能够存储1000条历史命令,该数量是由环境变量`HISTSIZE`进行控制。
+- 显示历史列表。
-### 语法
+- 操作历史列表。
+
+## 选项
```shell
-history(选项)(参数)
+-c 清空历史列表。
+-d offset 根据offset删除记录。如果是正数则表示offset位置的记录,如果为负数则表示从结尾向前offset位置的记录。
+-a 将当前终端的历史记录行添加到历史记录文件。
+-n 将尚未从历史文件中读取的历史行追加到当前历史列表中。
+-r 读取历史文件,并将其内容附加到历史列表中。
+-w 将当前历史记录列表附加到历史记录文件中并且附加它们到历史列表中。
+-p 在每个arg上执行历史记录扩展并在标准输出上显示结果,而不将结果存储在历史记录列表中。
+-s 将每个arg作为单个条目附加到历史记录列表。
```
-### 选项
+## 参数
-```shell
--c:清空当前历史命令;
--a:将历史命令缓冲区中命令写入历史命令文件中;
--r:将历史命令文件中的命令读入当前历史命令缓冲区;
--w:将当前历史命令缓冲区命令写入历史命令文件中。
-```
+n:可选,只列出最近的n条记录。
+
+filename:可选,表示历史文件;默认调用顺序为`filename`、环境变量`HISTFILE`、`~/.bash_history`。
-### 参数
+## 返回值
-n:打印最近的n条历史命令。
+返回成功,除非提供了非法选项或出现了错误。
-### 实例
+## 例子
-使用history命令显示最近使用的10条历史命令,输入如下命令:
+使用history命令显示最近使用的 5 条历史命令
```shell
-[root@localhost ~]# history 10
- 92 ls
- 93 cd ..
- 94 ls
- 95 exit
- 96 ls -a
+[root@localhost ~]# history 5
97 cd .ssh/
98 ls
99 cat known_hosts
@@ -48,30 +53,37 @@ n:打印最近的n条历史命令。
101 history 10
```
-列出最近3条记录
+清空历史记录
```shell
-[root@localhost ~]# history 3
- 15 2017-08-26 11:44:35 root history 3
- 16 2017-08-26 11:44:37 root history n
- 17 2017-08-26 11:44:40 root history 3
+[root@localhost ~]# history -c
```
-清空历史记录
+删除制定的行
```shell
-[root@localhost ~]# history -c
+[root@localhost ~]# history -d <指定行号>
+[root@localhost ~]# history -d 2243
```
-更多实例:
+快捷执行一条历史命令
```shell
-history -cw
-`~/.bash_history`: 保存历史命令
-`/etc/profile` -> HISSIZE: 历史命令保存数量
-推荐添加 h -> history, hsi -> history|grep 别名
-`!n`: 执行第 n 条历史命令
-`!xxx`: 执行最后一条 xxx 开头的命令
+# 执行第 n 条历史命令
+[root@localhost ~]# !n
+
+# 执行最后一条 xxx 开头的命令
+[root@localhost ~]# !xxx
```
-
+
+### 注意
+
+1. 在命令行中,可以使用符号`!`执行指定序号的历史命令。例如,要执行第2个历史命令,则输入`!2`。
+2. 关闭终端后,历史列表将被写入历史文件`~/.bash_history`。
+3. 环境变量`HISTSIZE`决定了历史文件中命令的存储数量,默认存储1000条。
+4. 环境变量`HISTTIMEFORMAT`如果是非空值,则使用其值作为`strftime(3)`打印相关时间戳的格式字符串添加在每个显示的历史记录之前;否则不会打印时间戳。
+5. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。
+
+
+
diff --git a/command/host.md b/command/host.md
index 11e6ac2e2f2..7685b10a9b8 100644
--- a/command/host.md
+++ b/command/host.md
@@ -7,13 +7,13 @@ host
**host命令** 是常用的分析域名查询工具,可以用来测试域名系统工作是否正常。
-### 语法
+### 语法
```shell
host(选项)(参数)
```
-### 选项
+### 选项
```shell
-a:显示详细的DNS信息;
@@ -28,11 +28,11 @@ host(选项)(参数)
-6:使用IPv6.
```
-### 参数
+### 参数
主机:指定要查询信息的主机信息。
-### 实例
+### 实例
```shell
[root@localhost ~]# host www.jsdig.com
@@ -54,4 +54,3 @@ Received 54 bytes from 202.96.104.15#53 in 0 ms
```
-
\ No newline at end of file
diff --git a/command/hostid.md b/command/hostid.md
index 612e187a984..2f4bf567709 100644
--- a/command/hostid.md
+++ b/command/hostid.md
@@ -1,31 +1,36 @@
hostid
===
-用来打印当前主机的数字化标识
+显示当前主机的十六进制数字标识。
-## 补充说明
-
-**hostid命令** 用于打印当前主机的十六进制数字标识。是主机的唯一标识,是被用来限时软件的使用权限,不可改变。
-
-### 语法
+## 概要
```shell
-hostid
+hostid [OPTION]...
```
-### 选项
+## 主要用途
+
+- 显示当前主机的十六进制标识符。
+- 用来限制软件的使用权限,不可改变。
+
+## 选项
```shell
---help:显示帮助信息;
---version:显示版本信息。
+--help 显示帮助信息并退出。
+--version 显示版本信息并退出。
```
-### 实例
+## 例子
```shell
[root@localhost ~]# hostid
007f0100
```
+### 注意
+
+1. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 hostid`,`info coreutils 'hostid invocation'`。
+
+
-
\ No newline at end of file
diff --git a/command/hostname.md b/command/hostname.md
index a94b99994e9..f0f9c05bd52 100644
--- a/command/hostname.md
+++ b/command/hostname.md
@@ -5,41 +5,59 @@ hostname
## 补充说明
-**hostname命令** 用于显示和设置系统的主机名称。环境变量HOSTNAME也保存了当前的主机名。在使用hostname命令设置主机名后,系统并不会永久保存新的主机名,重新启动机器之后还是原来的主机名。如果需要永久修改主机名,需要同时修改`/etc/hosts`和`/etc/sysconfig/network`的相关内容。
+**hostname命令**
+用于显示和设置系统的主机名称。
+
+- 环境变量 `HOSTNAME` 也保存了当前的主机名。
+- 在使用 `hostname` 命令设置主机名后,系统并不会永久保存新的主机名,重启之后还是原来的主机名。如果需要永久修改主机名,需要修改 `/etc/hosts` 和 `/etc/sysconfig/network` 的相关内容并进行重启;也可以使用 `hostnamectl` 命令进行永久修改。
### 语法
```shell
-hostname(选项)(参数)
+hostname [-b] {hostname|-F file} 设置主机名称(或从文件获取)
+hostname [-a|-A|-d|-f|-i|-I|-s|-y] 显示格式化的名称
+hostname 显示主机名称
+
+{yp,nis,}domainname {nisdomain|-F file} 设置 NIS 主机名称(或从文件获取)
+{yp,nis,}domainname 显示 NIS 主机名称
+
+dnsdomainname 显示 DNS 主机名称
+
+hostname -V|--version|-h|--help 打印信息并退出
```
### 选项
```shell
--v:详细信息模式;
--a:显示主机别名;
--d:显示DNS域名;
--f:显示FQDN名称;
--i:显示主机的ip地址;
--s:显示短主机名称,在第一个点处截断;
--y:显示NIS域名。
+-a, --alias 显示主机别名
+-A, --all-fqdns 显示所有FQDN名称
+-b, --boot 如果没有可用的主机名,则设置默认主机名
+-d, --domain 显示DNS域名
+-f, --fqdn, --long 显示FQDN名称
+-F, --file 从给定文件中读取主机名或NIS域名
+-i, --ip-address 显示主机的ip地址
+-I, --all-ip-addresses 显示主机所有的ip地址
+-s, --short 显示短主机名称,在第一个点处截断
+-y, --yp, --nis 显示NIS域名
```
-### 参数
-
-主机名:指定要设置的主机名。
-
### 实例
+显示主机名
```shell
[root@AY1307311912260196fcZ ~]# hostname
AY1307311912260196fcZ
+```
-# change hostname
-hostname newname # for now
-vi /etc/hosts # forever
-reboot
+临时改变主机名
+```shell
+[root@AY1307311912260196fcZ ~]# hostname newname
+```
+
+显示主机的所有IP地址
+```shell
+[root@AY1307311912260196fcZ ~]# hostname -I
+10.17.0.1 10.18.0.10 172.17.0.1
```
-
\ No newline at end of file
diff --git a/command/hostnamectl.md b/command/hostnamectl.md
new file mode 100644
index 00000000000..37dec2c8e0f
--- /dev/null
+++ b/command/hostnamectl.md
@@ -0,0 +1,52 @@
+hostnamectl
+===
+
+查询或更改系统主机名
+
+## 补充说明
+
+hostnamectl可用于查询和更改系统主机名和相关设置。
+
+### 语法
+
+```bash
+hostnamectl [选项...] 指令 ...
+```
+### 指令
+
+```bash
+status 显示当前主机名设置
+set-hostname NAME 设置系统主机名
+set-icon-name NAME 设置主机的图标名称
+set-chassis NAME 设置主机的机箱类型
+set-deployment NAME 设置主机的部署环境
+set-location NAME 设置主机位置
+```
+
+### 选项
+
+```bash
+-h --help 显示此帮助
+ --version 显示包的版本
+ --no-ask-password 不提示输入密码
+-H --host=[USER@]HOST 在远程主机上操作
+-M --machine=CONTAINER 在本地容器上执行操作。指定要连接到的容器名称。
+--transient, --static, --pretty
+ 如果调用了status(或者没有给出显式命令)并且指定了其中一个开关,hostnamectl将只打印出这个选定的主机名。
+```
+
+### 实例
+
+显示主机名设置
+
+```bash
+$ hostnamectl status
+```
+
+
+改变主机名(永久修改,不用重启哦~)
+
+```bash
+$ sudo hostnamectl set-hostname newname
+```
+
diff --git a/command/hping3.md b/command/hping3.md
index 100c7227e62..cc839cbb140 100644
--- a/command/hping3.md
+++ b/command/hping3.md
@@ -7,7 +7,7 @@ hping3
**hping** 是用于生成和解析TCPIP协议数据包的开源工具。创作者是Salvatore Sanfilippo。目前最新版是hping3,支持使用tcl脚本自动化地调用其API。hping是安全审计、防火墙测试等工作的标配工具。hping优势在于能够定制数据包的各个部分,因此用户可以灵活对目标机进行细致地探测。
-### 安装
+### 安装
```shell
yum install libpcap-devel tc-devel
@@ -20,7 +20,7 @@ make
make install
```
-### 选项
+### 选项
```shell
-H --help 显示帮助。
@@ -69,11 +69,11 @@ make install
-Q --seqnum 搜集序列号的,这对于你分析TCP序列号有很大作用。
```
-### Hping3功能
+### Hping3功能
Hping3主要有以下典型功能应用:
-#### 防火墙测试
+### # 防火墙测试
使用Hping3指定各种数据包字段,依次对防火墙进行详细测试。请参考:http://0daysecurity.com/articles/hping3_examples.html
@@ -83,7 +83,7 @@ Hping3主要有以下典型功能应用:
hping3 -S -c 1000000 -a 10.10.10.10 -p 21 10.10.10.10
```
-#### 端口扫描
+### # 端口扫描
Hping3也可以对目标端口进行扫描。Hping3支持指定TCP各个标志位、长度等信息。以下示例可用于探测目标机的80端口是否开放:
@@ -95,13 +95,13 @@ hping3 -I eth0 -S 192.168.10.1 -p 80
hping3支持非常丰富的端口探测方式,nmap拥有的扫描方式hping3几乎都支持(除开connect方式,因为Hping3仅发送与接收包,不会维护连接,所以不支持connect方式探测)。而且Hping3能够对发送的探测进行更加精细的控制,方便用户微调探测结果。当然,Hping3的端口扫描性能及综合处理能力,无法与Nmap相比。一般使用它仅对少量主机的少量端口进行扫描。
-#### Idle扫描
+### # Idle扫描
Idle扫描(Idle Scanning)是一种匿名扫描远程主机的方式,该方式也是有Hping3的作者Salvatore Sanfilippo发明的,目前Idle扫描在Nmap中也有实现。
该扫描原理是:寻找一台idle主机(该主机没有任何的网络流量,并且IPID是逐个增长的),攻击端主机先向idle主机发送探测包,从回复包中获取其IPID。冒充idle主机的IP地址向远程主机的端口发送SYN包(此处假设为SYN包),此时如果远程主机的目的端口开放,那么会回复SYN/ACK,此时idle主机收到SYN/ACK后回复RST包。然后攻击端主机再向idle主机发送探测包,获取其IPID。那么对比两次的IPID值,我们就可以判断远程主机是否回复了数据包,从而间接地推测其端口状态。
-#### 拒绝服务攻击
+### # 拒绝服务攻击
使用Hping3可以很方便构建拒绝服务攻击。比如对目标机发起大量SYN连接,伪造源地址为192.168.10.99,并使用1000微秒的间隔发送各个SYN包。
@@ -111,7 +111,7 @@ hping3 -I eth0 -a192.168.10.99 -S 192.168.10.33 -p 80 -i u1000
其他攻击如smurf、teardrop、land attack等也很容易构建出来。
-#### 文件传输
+### # 文件传输
Hping3支持通过TCP/UDP/ICMP等包来进行文件传输。相当于借助TCP/UDP/ICMP包建立隐秘隧道通讯。实现方式是开启监听端口,对检测到的签名(签名为用户指定的字符串)的内容进行相应的解析。在接收端开启服务:
@@ -129,7 +129,7 @@ hping3 192.168.1.108--icmp ?d 100 --sign signature --file /etc/passwd
将`/etc/passwd`密码文件通过ICMP包传给192.168.10.44主机。发送包大小为100字节(-d 100),发送签名为signature(-sign signature)。
-#### 木马功能
+### # 木马功能
如果Hping3能够在远程主机上启动,那么可以作为木马程序启动监听端口,并在建立连接后打开shell通信。与netcat的后门功能类似。
@@ -153,4 +153,3 @@ hping3 192.168.10.44 -p53 -d 100 --udp --sign siganature --file ./test.cmd
当然这里只是简单的演示程序,真实的场景,控制端可以利益shell执行很多的高级复杂的操作。
-
\ No newline at end of file
diff --git a/command/htdigest.md b/command/htdigest.md
index e98eacadc43..0d8f0b10398 100644
--- a/command/htdigest.md
+++ b/command/htdigest.md
@@ -7,23 +7,22 @@ Apache服务器内置工具
**htdigest命令** 是Apache的Web服务器内置工具,用于创建和更新储存用户名、域和用于摘要认证的密码文件。
-### 语法
+### 语法
```shell
htdigest(选项)(参数)
```
-### 选项
+### 选项
```shell
-c:创建密码文件。
```
-### 参数
+### 参数
* 密码文件:指定要创建或更新的密码文件;
* 域:指定用户名所属的域;
* 用户名:要创建或者更新的用户名。
-
\ No newline at end of file
diff --git a/command/htop.md b/command/htop.md
index 89a80f2cd94..9a0c886834b 100644
--- a/command/htop.md
+++ b/command/htop.md
@@ -1,7 +1,7 @@
htop
===
-[非内部命令]一个互动的进程查看器,可以动态观察系统进程状况。
+[非内部命令]一个互动的进程查看器,可以动态观察系统进程状况
## 补充说明
@@ -24,7 +24,55 @@ top缺点:
htop 官网:http://htop.sourceforge.net/
-### 语法
+### htop 安装
+
+在大多数的 Linux 发行版中你不会找到预安装的 `htop`,但作为最流行的实用程序之一,你会在几乎每个 Linux 发行版的默认存储库中找到 `htop`。
+
+因此,如果你的机器是基于 Debian/Ubuntu 驱动的,则以下命令应该可以完成你的工作:
+
+```shell
+sudo apt install htop
+```
+
+类似的,如果你使用的是 Fedora,则可以使用以下的命令:
+
+```shell
+sudo dnf install htop
+```
+
+如果你使用的是 CentOS 或 RedHat 则可以使用以下的命令:
+
+```shell
+sudo yum install htop
+```
+如果你想避免从源代码构建包,还有一个 Snap 包可用:
+
+```shell
+sudo snap install htop
+```
+
+如果你使用的是其它的发行版或者想从源代码构建,你可以使用 `wget` 下载并安装:
+这需要你下载并安装 `wget` `cmake`
+
+```shell
+wget https://link.zhihu.com/?target=https%3A//hisham.hm/htop/releases/2.2.0/htop-2.2.0.tar.gz
+
+tar -zxvf htop-2.2.0.tar.gz
+
+cd htop-2.2.0/
+
+./configure
+
+make
+
+make install
+```
+
+当然你也可以随时参考你可以随时参考 [htop 的 GitHub](https://link.zhihu.com/?target=https%3A//github.com/htop-dev/htop) 页面以获得详细说明。
+
+**说明**:htop源码安装方式默认安装到 `/usr/local` 目录下,如果想安装到其它路径,在执行 configure 时通过 `—prefix` 指定,格式为:`./configure --prefix=/some/path`
+
+### 语法
```shell
htop
@@ -42,7 +90,17 @@ htop
-v --version 打印版本信息
```
-### 选项
+#### 参数示例
+
+- -C 选项:设置界面为无颜色。
+
+- -d 选项 : 设置刷新时间,单位为秒。如,htop -d 10命令会每10秒刷新一次。
+
+- -s 选项 : 按指定的列排序。如,htop -s PID命令会按PID 列的大小排序来显示。
+
+- -u 选项 : 显示指定的用户的进程信息。如,htop -u test命令会只显示出用户名为test的相关进程。
+
+### 选项
```shell
h,? F1:查看htop使用说明
@@ -76,7 +134,7 @@ T:按运行时间排序
左右键或Home, End : 移动列表
Space(空格) : 标记/取消标记一个进程。命令可以作用于多个进程,例如 "kill",将应用于所有已标记的进程
-```shell
+```
### Htop设定
@@ -126,4 +184,3 @@ F7表示减小nice值(增大优先级),F8增大nice值(减小优先级),选
**F10:退出htop**
-
\ No newline at end of file
diff --git a/command/htpasswd.md b/command/htpasswd.md
index f23cff97b57..cdf96677bb8 100644
--- a/command/htpasswd.md
+++ b/command/htpasswd.md
@@ -7,11 +7,11 @@ apache服务器创建密码认证文件
**htpasswd命令** 是Apache的Web服务器内置工具,用于创建和更新储存用户名、域和用户基本认证的密码文件。
-### 语法
+### 语法
-### htpasswd(选项)(参数)
+### htpasswd(选项)(参数)
-### 选项
+### 选项
```shell
-c:创建一个加密文件;
@@ -24,12 +24,12 @@ apache服务器创建密码认证文件
-D:删除指定的用户。
```
-### 参数
+### 参数
* 用户:要创建或者更新密码的用户名;
* 密码:用户的新密码。
-### 实例
+### 实例
**利用htpasswd命令添加用户**
@@ -71,4 +71,3 @@ htpasswd -b .passwd Jack 123456
即先使用htpasswd删除命令删除指定用户,再利用htpasswd添加用户命令创建用户即可实现修改密码的功能。
-
\ No newline at end of file
diff --git a/command/hwclock.md b/command/hwclock.md
index 63b92980b90..8644035b643 100644
--- a/command/hwclock.md
+++ b/command/hwclock.md
@@ -9,13 +9,13 @@ hwclock
在Linux中有硬件时钟与系统时钟等两种时钟。硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟。系统时钟则是指kernel中的时钟。当Linux启动时,系统时钟会去读取硬件时钟的设定,之后系统时钟即独立运作。所有Linux相关指令与函数都是读取系统时钟的设定。
-### 语法
+### 语法
```shell
hwclock(选项)
```
-### 选项
+### 选项
```shell
--adjust:hwclock每次更改硬件时钟时,都会记录在/etc/adjtime文件中。使用--adjust参数,可使hwclock根据先前的记录来估算硬件时钟的偏差,并用来校正目前的硬件时钟;
@@ -30,7 +30,7 @@ hwclock(选项)
--version:显示版本信息。
```
-### 实例
+### 实例
设置硬件时间要依赖于操作系统时间,具体方法如下:
@@ -62,4 +62,3 @@ ARC=false
```
-
\ No newline at end of file
diff --git a/command/iconv.md b/command/iconv.md
index e9924a87cc6..658e7938417 100644
--- a/command/iconv.md
+++ b/command/iconv.md
@@ -7,13 +7,13 @@ iconv
**iconv命令** 是用来转换文件的编码方式的,比如它可以将UTF8编码的转换成GB18030的编码,反过来也行。JDK中也提供了类似的工具native2ascii。Linux下的iconv开发库包括iconv_open,iconv_close,iconv等C函数,可以用来在C/C++程序中很方便的转换字符编码,这在抓取网页的程序中很有用处,而iconv命令在调试此类程序时用得着。
-### 语法
+### 语法
```shell
iconv -f encoding [-t encoding] [inputfile]...
```
-### 选项
+### 选项
```shell
-f encoding :把字符从encoding编码开始转换。
@@ -26,7 +26,7 @@ iconv -f encoding [-t encoding] [inputfile]...
-f和-t所能指定的合法字符在-l选项的命令里面都列出来了。
```
-### 实例
+### 实例
列出当前支持的字符编码:
@@ -43,4 +43,3 @@ iconv file1 -f EUC-JP-MS -t UTF-8 -o file2
这里,没`-o`那么会输出到标准输出。
-
\ No newline at end of file
diff --git a/command/id.md b/command/id.md
index 9514064ec6a..f19dde917b6 100644
--- a/command/id.md
+++ b/command/id.md
@@ -1,33 +1,45 @@
id
===
-显示用户的ID以及所属群组的ID
+打印真实以及有效的用户和所在组的信息
-## 补充说明
+## 概要
-**id命令** 可以显示真实有效的用户ID(UID)和组ID(GID)。UID 是对一个用户的单一身份标识。组ID(GID)则对应多个UID。id命令已经默认预装在大多数Linux系统中。要使用它,只需要在你的控制台输入id。不带选项输入id会显示如下。结果会使用活跃用户。
+```shell
+id [OPTION]... [USER]...
+```
+
+## 主要用途
-当我们想知道某个用户的UID和GID时id命令是非常有用的。一些程序可能需要UID/GID来运行。id使我们更加容易地找出用户的UID以GID而不必在`/etc/group`文件中搜寻。如往常一样,你可以在控制台输入`man id`进入id的手册页来获取更多的详情。
+- 没有选项时,打印指定用户ID信息。
-### 语法
+## 选项
```shell
-id [-gGnru]--[help][--version][用户名称]
+-a 兼容性选项,没有实际作用。
+-Z, --context 只打印进程的安全上下文。
+-g, --group 只打印有效的组ID。
+-G, --groups 打印全部组ID。
+-u, --user 只打印有效的用户ID。
+-z, --zero 使用空字符代替默认的空格来分隔条目。
+--help 显示帮助信息并退出。
+--version 显示版本信息并退出。
```
-### 选项
-
+只有在使用 `-u` `-g` `-G` 选项中一到多个时,以下选项可以使用:
```shell
--g或--group 显示用户所属群组的ID。
--G或--groups 显示用户所属附加群组的ID。
--n或--name 显示用户,所属群组或附加群组的名称。
--r或--real 显示实际ID。
--u或--user 显示用户ID。
--help 显示帮助。
--version 显示版本信息。
+-n, --name 打印名称而不是数字。
+-r, --real 打印真实ID而不是有效ID。
```
-### 实例
+## 参数
+user(可选):可以为一到多个,默认为当前用户。
+
+## 返回值
+
+返回0表示成功,返回非0值表示失败。
+
+## 例子
```shell
[root@localhost ~]# id
@@ -74,5 +86,10 @@ uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10
uid=500(www) gid=500(www) groups=500(www)
```
+### 注意
+
+1. 该命令可以显示真实有效的用户ID(UID)和组ID(GID)。UID 是对一个用户的单一身份标识。组ID(GID)则对应多个UID;一些程序可能需要UID/GID来运行。`id` 使我们更加容易地找出用户的UID以及GID,而不必在 `/etc/group` 文件中搜寻。
+
+2. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 id`,`info coreutils 'id invocation'`。
+
-
\ No newline at end of file
diff --git a/command/ifcfg.md b/command/ifcfg.md
index cfe0770c2f4..ff3ea49d340 100644
--- a/command/ifcfg.md
+++ b/command/ifcfg.md
@@ -7,13 +7,13 @@ ifcfg
**ifcfg命令** 是一个Bash脚本程序,用来设置Linux中的网络接口参数。
-### 语法
+### 语法
```shell
ifcfg(参数)
```
-### 参数
+### 参数
```shell
网络接口:指定要操作的网络接口;
@@ -23,4 +23,3 @@ Stop:停用指定的网络接口的IP地址。
```
-
\ No newline at end of file
diff --git a/command/ifconfig.md b/command/ifconfig.md
index d22c9a69e34..aedc24cf36a 100644
--- a/command/ifconfig.md
+++ b/command/ifconfig.md
@@ -7,13 +7,13 @@ ifconfig
**ifconfig命令** 被用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。
-### 语法
+### 语法
```shell
ifconfig(参数)
```
-### 参数
+### 参数
```shell
add<地址>:设置网络设备IPv6的ip地址;
@@ -36,7 +36,7 @@ IP地址:指定网络设备的IP地址;
网络设备:指定网络设备的名称。
```
-### 实例
+### 实例
**显示网络设备信息(激活状态的):**
@@ -125,4 +125,4 @@ ifconfig eth0 #显示eth0的网卡信息
```
-
+
diff --git a/command/ifdown.md b/command/ifdown.md
index 48969ead45f..99ab86a7fe3 100644
--- a/command/ifdown.md
+++ b/command/ifdown.md
@@ -7,21 +7,20 @@ ifdown
**ifdown命令** 用于禁用指定的网络接口。
-### 语法
+### 语法
```shell
ifdown(参数)
```
-### 参数
+### 参数
网络接口:要禁用的网络接口。
-### 实例
+### 实例
```shell
ifdown eth0 #禁用eth0
```
-
\ No newline at end of file
diff --git a/command/ifstat.md b/command/ifstat.md
index 76e21664105..5b4732e8214 100644
--- a/command/ifstat.md
+++ b/command/ifstat.md
@@ -7,14 +7,14 @@ ifstat
**ifstat命令** 就像iostat/vmstat描述其它的系统状况一样,是一个统计网络接口活动状态的工具。ifstat工具系统中并不默认安装,需要自己下载源码包,重新编译安装,使用过程相对比较简单。
-### 下载
+### 下载
```shell
http://gael.roualland.free.fr/ifstat/ (官网)
wget http://gael.roualland.free.fr/ifstat/ifstat-1.1.tar.gz
```
-### 编译安装
+### 编译安装
```shell
tar -zxvf ifstat-1.1.tar.gz
@@ -26,7 +26,7 @@ make install # 默认会安装到/usr/local/bin/目录中
注释:执行`which ifstat`输出`/usr/local/bin/ifstat`
-### 选项
+### 选项
```shell
-l 监测环路网络接口(lo)。缺省情况下,ifstat监测活动的所有非环路网络接口。经使用发现,加上-l参数能监测所有的网络接口的信息,而不是只监测 lo的接口信息,也就是说,加上-l参数比不加-l参数会多一个lo接口的状态信息。
@@ -47,7 +47,7 @@ make install # 默认会安装到/usr/local/bin/目录中
-d 指定一个驱动来收集状态信息
```
-### 实例
+### 实例
默认使用
@@ -83,4 +83,4 @@ HH:MM:ss KB/s in KB/s out KB/s in KB/s out KB/s in KB/s out KB/s in
0.61 0.61 0.26 0.23 0.00 0.00
```
-
+
diff --git a/command/iftop.md b/command/iftop.md
index 017be8255af..0449a3eccbf 100644
--- a/command/iftop.md
+++ b/command/iftop.md
@@ -7,48 +7,47 @@ iftop
**iftop命令** 是一款实时流量监控工具,监控TCP/IP连接等,缺点就是无报表功能。必须以root身份才能运行。
-### 语法
+### 语法
```shell
iftop(选项)
```
-### 选项
+### 选项
```shell
-iftop: display bandwidth usage on an interface by host
+iftop: 按主机显示接口带宽使用情况
-Synopsis: iftop -h | [-npblNBP] [-i interface] [-f filter code]
+参数: iftop -h | [-npblNBP] [-i interface] [-f filter code]
[-F net/mask] [-G net6/mask6]
- -h display this message
- -n don't do hostname lookups
- -N don't convert port numbers to services
- -p run in promiscuous mode (show traffic between other
- hosts on the same network segment)
- -b don't display a bar graph of traffic
- -B Display bandwidth in bytes
- -i interface listen on named interface
+ -h 显示帮助信息
+ -n 不要讲ip转为主机名
+ -N 不要将端口转为对应服务名
+ -p 以混杂模式运行(显示同一网段内其他主机之间的流量)
+ -b 不要展示流量通行条形图
+ -B 使用Byte展示流量情况(默认展示的bit)
+ -i interface 指定需要监听的网络端口 -i eth0
-f filter code use filter code to select packets to count
(default: none, but only IP packets are counted)
- -F net/mask show traffic flows in/out of IPv4 network
- -G net6/mask6 show traffic flows in/out of IPv6 network
- -l display and count link-local IPv6 traffic (default: off)
- -P show ports as well as hosts
- -m limit sets the upper limit for the bandwidth scale
- -c config file specifies an alternative configuration file
- -t use text interface without ncurses
+ -F net/mask 展示指定IPV4网络的流量,参数可以是主机名/IP/掩码
+ -G net6/mask6 展示指定IPV6网络的流量,参数可以是主机名/IP/掩码
+ -l 展示本地网络/回环网络/ipv6流量 (默认值: 关闭)
+ -P 展示主机端口
+ -m limit 设置带宽规模的上限
+ -c config file 指定可选配置文件
+ -t 使用文本模式展示
Sorting orders:
- -o 2s Sort by first column (2s traffic average)
- -o 10s Sort by second column (10s traffic average) [default]
- -o 40s Sort by third column (40s traffic average)
- -o source Sort by source address
- -o destination Sort by destination address
+ -o 2s 按照第一列进行排序 (每2秒的平均值为一个计数周期)
+ -o 10s 按照第二列进行排序 (每10秒的平均值为一个计数周期]
+ -o 40s 按照第三列进行排序 (每40秒的平均值为一个计数周期)
+ -o source 按照原地址继续排序
+ -o destination 按照目标地址进行排序
- The following options are only available in combination with -t
- -s num print one single text output afer num seconds, then quit
- -L num number of lines to print
+ 以下选项仅在与 -t
+ -s num 在num秒后打印一个文本输出,然后退出
+ -L num 打印的行数
```
### 界面说明
@@ -60,7 +59,7 @@ Synopsis: iftop -h | [-npblNBP] [-i interface] [-f filter code]
> 最后三行表示发送,接收和全部的流量,
> 第二列为你运行iftop到目前流量,第三列为高峰值,第四列为平均值。
-### 实例
+### 实例
```shell
iftop # 默认是监控第一块网卡的流量
@@ -71,4 +70,4 @@ iftop -F 192.168.1.0/24 or 192.168.1.0/255.255.255.0 # 显示某个网段进出
```
-
+
diff --git a/command/ifup.md b/command/ifup.md
index ac517a1a757..e8776f7d2fe 100644
--- a/command/ifup.md
+++ b/command/ifup.md
@@ -7,21 +7,20 @@ ifup
**ifup命令** 用于激活指定的网络接口。
-### 语法
+### 语法
```shell
ifup(参数)
```
-### 参数
+### 参数
网络接口:要激活的网络接口。
-### 实例
+### 实例
```shell
ifup eth0 #激活eth0
```
-
\ No newline at end of file
diff --git a/command/indent.md b/command/indent.md
index cdfb6d8b6ca..d83051551de 100644
--- a/command/indent.md
+++ b/command/indent.md
@@ -7,7 +7,7 @@ indent
**indent命令** 可辨识C的原始代码文件,并加以格式化,以方便程序员阅读、修改等操作。
-### 语法
+### 语法
```shell
indent(选项)(源文件)
@@ -15,7 +15,7 @@ indent(选项)(源文件)
indent(选项)(源文件)(-o 目标文件)
```
-### 选项
+### 选项
```shell
-bad:在声明区加上空白行;
@@ -73,7 +73,7 @@ indent(选项)(源文件)(-o 目标文件)
--version:显示版本信息。
```
-### 实例
+### 实例
使用indent命令将C语言源文件"test.c"中所有的sizeof后面添加一个空格,输入如下命令:
@@ -84,4 +84,3 @@ indent -bs /home/rootlocal/桌面/test.c
执行上面的命令后,用户可以打开指定的源文件查看在sizeof后面是否都添加了一个空格。由于该命令的参数非常多,所以用户可以根据实际需要选择适合的参数进行使用即可。
-
\ No newline at end of file
diff --git a/command/info.md b/command/info.md
index fdad458e49a..0224e9b7f4f 100644
--- a/command/info.md
+++ b/command/info.md
@@ -9,13 +9,13 @@ Linux下info格式的帮助指令
就内容来说,info页面比man page编写得要更好、更容易理解,也更友好,但man page使用起来确实要更容易得多。一个man page只有一页,而info页面几乎总是将它们的内容组织成多个区段(称为节点),每个区段也可能包含子区段(称为子节点)。理解这个命令的窍门就是不仅要学习如何在单独的Info页面中浏览导航,还要学习如何在节点和子节点之间切换。可能刚开始会一时很难在info页面的节点之间移动和找到你要的东西,真是具有讽刺意味:原本以为对于新手来说,某个东西比man命令会更好些,但实际上学习和使用起来更困难。
-### 语法
+### 语法
```shell
info(选项)(参数)
```
-### 选项
+### 选项
```shell
-d:添加包含info格式帮助文档的目录;
@@ -24,11 +24,11 @@ info(选项)(参数)
-o:输出被选择的节点内容到指定文件。
```
-### 参数
+### 参数
帮助主题:指定需要获得帮助的主题,可以是指令、函数以及配置文件。
-### 实例
+### 实例
在info后面输入命令的名称就可以查看该命令的info帮助文档了:
@@ -72,11 +72,10 @@ info info
**Del 键** 上一页(PageUp 也可以,上一页从当前页的开始两行开始算起)
上一个 Node (若当前页 Node 文档的开始)
- **b 或 t 或 Home** 文档的开始(b 是 begining 的意思)
+ **b 或 t 或 Home** 文档的开始(b 是 beginning 的意思)
**e 或 End** 文档的末尾(b 是 ending 的意思)
**Ctrl-l** 刷新当前页,若当前文档显示情况有问题时
**Ctrl-g** 取消所键入的指令
```
-
\ No newline at end of file
diff --git a/command/init.md b/command/init.md
index 40869415773..14a0cabcb08 100644
--- a/command/init.md
+++ b/command/init.md
@@ -7,24 +7,24 @@ init进程是所有Linux进程的父进程
**init命令** 是Linux下的进程初始化工具,init进程是所有Linux进程的父进程,它的进程号为1。init命令是Linux操作系统中不可缺少的程序之一,init进程是Linux内核引导运行的,是系统中的第一个进程。
-### 语法
+### 语法
```shell
init(选项)(参数)
```
-### 选项
+### 选项
```shell
-b:不执行相关脚本而直接进入单用户模式;
-s:切换到单用户模式。
```
-### 参数
+### 参数
运行等级:指定Linux系统要切换到的运行等级。
-### 实例
+### 实例
几个常用的命令
@@ -47,4 +47,3 @@ init(选项)(参数)
```
-
\ No newline at end of file
diff --git a/command/inotifywait.md b/command/inotifywait.md
index 50393790205..0592c2c7435 100644
--- a/command/inotifywait.md
+++ b/command/inotifywait.md
@@ -26,7 +26,7 @@ total 0
-rw-r--r-- 1 root root 0 Jan 4 15:41 max_user_watches
```
-### 安装inotify-tools
+### 安装inotify-tools
* inotify-tools项目地址:https://github.com/rvoicilas/inotify-tools
* inotify-tools下载地址:http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
@@ -42,7 +42,7 @@ make install
其他Linux发行版安装方法可以参见:https://github.com/rvoicilas/inotify-tools/wiki#wiki-getting
-### inotify相关参数
+### inotify相关参数
inotify定义了下列的接口参数,可以用来限制inotify消耗kernel memory的大小。由于这些参数都是内存参数,因此,可以根据应用需求,实时的调节其大小:
@@ -69,7 +69,7 @@ inotifywait: error while loading shared libraries: libinotifytools.so.0: cannot
64位系统:ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib64/libinotifytools.so.0
```
-### inotifywait命令使用
+### inotifywait命令使用
```shell
#!/bin/bash
@@ -97,7 +97,7 @@ path=$1
04/01/13/16:35 /data/wsdata/tools/ .j.jsp.swp
```
-### inotifywait命令参数
+### inotifywait命令参数
* `-m`是要持续监视变化。
* `-r`使用递归形式监视目录。
@@ -106,48 +106,16 @@ path=$1
* `--timefmt`是指定时间的输出格式。
* `--format`指定文件变化的详细信息。
-#### 可监听的事件
-
-
-
-
-| 事件 |
-描述 |
-
-
-| access |
- **访问** ,读取文件。 |
-
-
-| modify |
- **修改** ,文件内容被修改。 |
-
-
-| attrib |
- **属性** ,文件元数据被修改。 |
-
-
-| move |
- **移动** ,对文件进行移动操作。 |
-
-
-| create |
- **创建** ,生成新文件 |
-
-
-| open |
- **打开** ,对文件进行打开操作。 |
-
-
-| close |
- **关闭** ,对文件进行关闭操作。 |
-
-
-| delete |
- **删除** ,文件被删除。 |
-
-
-
-
-
-
\ No newline at end of file
+### 可监听的事件
+
+事件 | 描述
+--- | ---
+access | **访问** ,读取文件。
+modify | **修改** ,文件内容被修改。
+attrib | **属性** ,文件元数据被修改。
+move | **移动** ,对文件进行移动操作。
+create | **创建** ,生成新文件
+open | **打开** ,对文件进行打开操作。
+close | **关闭** ,对文件进行关闭操作。
+delete | **删除** ,文件被删除。
+
diff --git a/command/insmod.md b/command/insmod.md
index 717c5456305..b00addbe696 100644
--- a/command/insmod.md
+++ b/command/insmod.md
@@ -7,13 +7,13 @@ insmod
**insmod命令** 用于将给定的模块加载到内核中。Linux有许多功能是通过模块的方式,在需要时才载入kernel。如此可使kernel较为精简,进而提高效率,以及保有较大的弹性。这类可载入的模块,通常是设备驱动程序。
-### 语法
+### 语法
```shell
insmod(选项)(参数)
```
-### 选项
+### 选项
```shell
-f:不检查目前kernel版本与模块编译时的kernel版本是否一致,强制将模块载入;
@@ -27,11 +27,11 @@ insmod(选项)(参数)
-X:汇出模块所有的外部符号,此为预设置。
```
-### 参数
+### 参数
内核模块:指定要加载的内核模块文件。
-### 实例
+### 实例
加载RAID1阵列级别模块,如下所示:
@@ -46,4 +46,3 @@ raid1 25153 0
从以上显示结果可知,RAID1模块已加载成功。只是在使用insmod命令加载模块时,需要使用绝对路径方能加载,且加载时无法自动解决依赖关系。
-
\ No newline at end of file
diff --git a/command/install.md b/command/install.md
index 565816be513..f06c969a0f4 100644
--- a/command/install.md
+++ b/command/install.md
@@ -7,7 +7,7 @@ install
**install命令** 的作用是安装或升级软件或备份数据,它的使用权限是所有用户。install命令和cp命令类似,都可以将文件/目录拷贝到指定的地点。但是,install允许你控制目标文件的属性。install通常用于程序的makefile,使用它来将程序拷贝到目标(安装)目录。
-### 语法
+### 语法
```shell
install [OPTION]... [-T] SOURCE DEST
@@ -18,7 +18,7 @@ install [OPTION]... -d DIRECTORY...
在前两种格式中,会将<来源>复制至<目的地>或将多个<来源>文件复制至已存在的<目录>,同时设定权限模式及所有者/所属组。在第三种格式中,会创建所有指定的目录及它们的主目录。长选项必须用的参数在使用短选项时也是必须的。
-### 选项
+### 选项
```shell
--backup[=CONTROL]:为每个已存在的目的地文件进行备份。
@@ -37,7 +37,7 @@ install [OPTION]... -d DIRECTORY...
--version:显示版本信息并离开。
```
-### 实例
+### 实例
```shell
install -d [option] DIRECTORY [DIRECTORY...]
@@ -78,4 +78,3 @@ install a/* d
其中d是目录。
-
\ No newline at end of file
diff --git a/command/iostat.md b/command/iostat.md
index c7c06637e15..b90088c5248 100644
--- a/command/iostat.md
+++ b/command/iostat.md
@@ -7,116 +7,178 @@ iostat
**iostat命令** 被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。
-### 语法
+iowait 指在一个采样周期内有百分之几的时间是属于以下情况:CPU处于空闲状态并且至少有一个未完成的磁盘IO请求。
-```shell
+## 安装 iostat
+
+iostat包含在**sysstat**包内。如果你没有,你首先需要安装它。
+在 RedHat / CentOS / Fedora
+
+```bash
+yum install sysstat
+```
+
+在 Debian / Ubuntu / Linux Mint
+
+```bash
+sudo apt-get install sysstat
+```
+
+## 语法
+
+```bash
iostat(选项)(参数)
```
-### 选项
-
-```shell
--c:仅显示CPU使用情况;
--d:仅显示设备利用率;
--k:显示状态以千字节每秒为单位,而不使用块每秒;
--m:显示状态以兆字节每秒为单位;
--p:仅显示块设备和所有被使用的其他分区的状态;
--t:显示每个报告产生时的时间;
--V:显示版号并退出;
--x:显示扩展状态。
+### 选项
+
+```bash
+# iostat --help
+Usage: iostat [ options ] [ [ ] ]
+Options are:
+[ -c ] [ -d ] [ -h ] [ -k | -m ] [ -N ] [ -s ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ]
+[ -j { ID | LABEL | PATH | UUID | ... } ] [ --human ] [ -o JSON ]
+[ [ -H ] -g ] [ -p [ [,...] | ALL ] ]
```
-### 参数
+参数说明:
+```
+-c 输出CPU统计信息。不能与-d参数同时使用。
+-d 输出设备和分区的I/O统计信息。不能与-c参数同时使用。(默认的参数是-d)。
+-h 让人类更容易阅读设备使用情况报告。--human使用此选项隐式启用。
+-k 用“kbytes/秒”代替“块/秒”显示统计信息。
+-m 用“mbytes/秒”代替“块/秒”显示统计信息。
+-t 打印显示的每份报告的时间。
+-V 显示版本号并退出。
+-x 显示扩展统计信息。不能与参数-p同时使用。
+-y 如果在给定时间间隔内显示多条记录,则省略自系统启动以来的第一份统计报告。
+-z 告诉 iostat 忽略在样本期间没有活动的设备的输出。
+-j 显示持久的设备名称。选项ID、LABEL等指定持久名称的类型。
+--human 以人类可读格式打印大小(例如1.0k, 1.2M等)。使用此选项显示的单位取代与度量相关的任何其他默认单位(例如千字节,扇区…)。
+-o 以JSON (Javascript Object Notation)格式显示统计数据。JSON输出字段顺序未定义,未来可能会添加新字段。
+-H 该选项必须与-g一起使用,表示只显示组的全局统计信息,而不显示组中单个设备的统计信息。
+-p 选项显示系统使用的块设备及其所有分区的统计信息。如果在命令行中输入一个设备名,那么将显示该设备及其所有分区的统计信息。最后,ALL关键字表示必须显示系统定义的所有块设备和分区的统计信息,包括那些从未使用过的设备和分区。如果在此选项之前定义了选项-j,则可以使用所选的持久名称类型指定在命令行上输入的设备。
+```
+
+### 参数
+
+interval 刷新时间间隔
+count 刷新次数
+
+## 运行示例
+
+### 示例1
+
+```bash
+# iostat
+Linux 4.18.0-477.13.1.el8_8.x86_64 (node1) 08/28/2024 _x86_64_ (2 CPU)
+
+avg-cpu: %user %nice %system %iowait %steal %idle
+ 3.30 0.01 1.90 0.12 0.00 94.68
+
+Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
+vda 7.85 84.22 36.59 1081853831 470049100
+
+```
+
+第一部分包含了CPU报告
+
+| 性能指标 | 含义 |
+| --- | --- |
+| %user | 显示在用户级(应用程序)执行时发生的CPU利用率百分比。 |
+| %nice | 显示在具有nice优先级的用户级别执行时发生的CPU利用率百分比。 |
+| %system | 显示在系统级(内核)执行时发生的CPU利用率百分比。 |
+| %iowait | 显示在系统有未完成的磁盘I/O请求期间CPU空闲的时间百分比。 |
+| %steal | 显示虚拟机监控程序为另一个虚拟处理器提供服务时,一个或多个虚拟CPU在非自愿等待上花费的时间百分比。 |
+| %idle | 显示CPU空闲且系统没有未完成的磁盘I/O请求的时间百分比。 |
+
+第二部分包含了设备利用率报告
+
+| 性能指标 | 含义 |
+| --- | --- |
+| Device | 此列给出了 /dev 目录中列出的设备(或分区)名称。 |
+| tps | 表示每秒向设备发出的传输次数。传输是对设备的 I/O 请求。多个逻辑请求可合并为对设备的一个 I/O 请求。传输大小不确定。 |
+| kB_read/s | 表示每秒从设备读取的数据量,以块数(千字节、兆字节)表示。块相当于扇区,因此大小为 512 字节。 |
+| kB_wrtn/s | 表示写入设备的数据量,以每秒块数(千字节、兆字节)表示。 |
+| kB_read | 读取的数据块总数(千字节、兆字节)。 |
+| kB_wrtn | 写入的数据块总数(千字节、兆字节)。 |
+
+### 示例2
+
+以更友好的显示方式显示 IO 信息,使用`-y`忽略第一份统计。并每隔 1 秒重新一次,共5次。
+
+```bash
+# iostat -hdy 1 5
+Linux 4.18.0-477.13.1.el8_8.x86_64 (node1) 08/28/2024 _x86_64_ (2 CPU)
+
+ tps kB_read/s kB_wrtn/s kB_read kB_wrtn Device
+ 64.00 288.0k 308.0k 288.0k 308.0k vda
+
+ tps kB_read/s kB_wrtn/s kB_read kB_wrtn Device
+ 12.00 0.0k 84.0k 0.0k 84.0k vda
+
+ tps kB_read/s kB_wrtn/s kB_read kB_wrtn Device
+ 15.00 0.0k 36.0k 0.0k 36.0k vda
+
+ tps kB_read/s kB_wrtn/s kB_read kB_wrtn Device
+ 28.00 0.0k 76.0k 0.0k 76.0k vda
+
+ tps kB_read/s kB_wrtn/s kB_read kB_wrtn Device
+ 11.00 0.0k 100.0k 0.0k 100.0k vda
+
+```
+
+### 示例3
+
+```bash
+# iostat -xd 1
+Linux 4.18.0-477.13.1.el8_8.x86_64 (node1) 08/28/2024 _x86_64_ (2 CPU)
+
+Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
+vda 4.64 3.21 84.14 36.59 0.28 1.07 5.64 25.01 5.86 8.23 0.05 18.12 11.41 0.44 0.34
-* 间隔时间:每次报告的间隔时间(秒);
-* 次数:显示报告的次数。
+Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
+vda 1.00 0.00 4.00 0.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00 4.00 0.00 2.00 0.20
-### 实例
+Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
+vda 0.00 37.00 0.00 395.50 0.00 10.00 0.00 21.28 0.00 0.92 0.03 0.00 10.69 0.11 0.40
-用`iostat -x /dev/sda1`来观看磁盘I/O的详细情况:
+Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
+vda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
-```shell
-iostat -x /dev/sda1
-Linux 2.6.18-164.el5xen (localhost.localdomain)
-2010年03月26日
+Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
+vda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
-avg-cpu: %user %nice %system %iowait
-%steal %idle
- 0.11 0.02 0.18 0.35
-0.03 99.31
+Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
+vda 1.00 0.00 4.00 0.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00 4.00 0.00 1.00 0.10
-Device: tps Blk_read/s Blk_wrtn/s
-Blk_read Blk_wrtn
-sda1 0.02 0.08
-0.00 2014 4
```
-详细说明:第二行是系统信息和监测时间,第三行和第四行显示CPU使用情况(具体内容和mpstat命令相同)。这里主要关注后面I/O输出的信息,如下所示:
-
-
-
-
-| 标示 |
-说明 |
-
-
-| Device |
-监测设备名称 |
-
-
-| rrqm/s |
-每秒需要读取需求的数量 |
-
-
-| wrqm/s |
-每秒需要写入需求的数量 |
-
-
-| r/s |
-每秒实际读取需求的数量 |
-
-
-| w/s |
-每秒实际写入需求的数量 |
-
-
-| rsec/s |
-每秒读取区段的数量 |
-
-
-| wsec/s |
-每秒写入区段的数量 |
-
-
-| rkB/s |
-每秒实际读取的大小,单位为KB |
-
-
-| wkB/s |
-每秒实际写入的大小,单位为KB |
-
-
-| avgrq-sz |
-需求的平均大小区段 |
-
-
-| avgqu-sz |
-需求的平均队列长度 |
-
-
-| await |
-等待I/O平均的时间(milliseconds) |
-
-
-| svctm |
-I/O需求完成的平均时间 |
-
-
-| %util |
-被I/O需求消耗的CPU百分比 |
-
-
-
-
-
-
\ No newline at end of file
+从这里你可以看到,iostat 提供了非常丰富的性能指标。第一列的 Device 表示磁盘设备的名字,其他各列指标,虽然数量较多,但是每个指标的含义都很重要。
+
+| 性能指标 | 含义 |
+| --- | --- |
+| r/s | 设备每秒完成的读取请求数(合并后)。 |
+| w/s | 设备每秒完成的写入请求数(合并后)。 |
+| rkB/s | 每秒从设备读取的扇区数(千字节、兆字节)。 |
+| wkB/s | 每秒写入设备的扇区数(千字节、兆字节)。 |
+| rrqm/s | 每秒合并到设备的排队 I/O 请求数。 |
+| wrqm/s | 每秒合并到设备的写入请求数。 |
+| %rrqm | 在发送到设备之前合并在一起的读取请求的百分比。 |
+| %wrqm | 发送到设备前合并在一起的写入请求的百分比。 |
+| r_await | 向设备发出的读取请求获得服务的平均时间(毫秒)。这包括请求在队列中花费的时间和为请求提供服务的时间。 |
+| w_await | 向待服务设备发出写入请求的平均时间(毫秒)。这包括请求在队列中花费的时间和为请求提供服务的时间。 |
+| aqu-sz | 向设备发出的请求的平均队列长度。注意:在以前的版本中,该字段被称为 avgqu-sz。 |
+| rareq-sz | 向设备发出的读取请求的平均大小(千字节)。 |
+| wareq-sz | 向设备发出的写入请求的平均大小(千字节)。 |
+| svctm | 向设备发出的 I/O 请求的平均服务时间(毫秒)。警告!不要再相信这个字段了。 未来的 sysstat 版本将删除此字段。 |
+| %util | 向设备发出 I/O 请求所用时间的百分比(设备带宽利用率)。 对于串行服务请求的设备,当该值接近 100%,设备就会饱和。 但对于以并行方式提供请求的设备,如 RAID 阵列和现代固态硬盘,该数值并不能反映其性能极限。 |
+
+当 %iowait 升高,需要重点关注以下指标:
+
+- avgrq-sz: 向设备发出请求的平均大小(单位:扇区)
+- avgqu-sz: 向设备发出请求的队列平均长度。也是个做 IO 调优时需要注意的地方,这个就是直接每次操作的数据的大小,如果次数多,但数据拿的小的话,其实 IO 也会很小.如果数据拿的大,IO 的数据会高
+- r_await: 向服务设备发出读取请求的平均时间(单位:毫秒)。包括请求入队的时间以及设备处理请求的时间
+- w_await: 向服务设备发出写请求的平均时间(单位:毫秒)。包括请求入队的时间以及设备处理请求的时间
+- %util:一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈
+- %svctm:平均每次设备 I/O 操作的服务时间 (毫秒)。一般要小于 await (因为同时等待的请求的等待时间被重复计算了),svctm 的大小一般和磁盘性能有关,CPU/内存的负荷也会对其有影响,请求过多也会间接导致 svctm 的增加。await 的大小一般取决于服务时间(svctm) 以及 I/O 队列的长度和 I/O 请求的发出模式。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调整内核 elevator 算法,优化应用,或者升级 CPU
diff --git a/command/iotop.md b/command/iotop.md
index 9e30a041994..916e834b548 100644
--- a/command/iotop.md
+++ b/command/iotop.md
@@ -9,7 +9,7 @@ iotop
iotop使用Python语言编写而成,要求Python2.5(及以上版本)和Linux kernel2.6.20(及以上版本)。iotop提供有源代码及rpm包,可从其官方主页下载。
-### 安装
+### 安装
**Ubuntu**
@@ -32,13 +32,13 @@ python setup.py build
python setup.py install
```
-### 语法
+### 语法
```shell
iotop(选项)
```
-### 选项
+### 选项
```shell
-o:只显示有io操作的进程
@@ -58,7 +58,7 @@ iotop(选项)
5. a:显示累积使用量。
6. q:退出。
-### 实例
+### 实例
直接执行iotop就可以看到效果了:
@@ -80,4 +80,3 @@ Total DISK read: 0.00 B/s | Total DISK write: 0.00 B/s
```
-
\ No newline at end of file
diff --git a/command/ip.md b/command/ip.md
index aff8a38c07a..a4112e81d1a 100644
--- a/command/ip.md
+++ b/command/ip.md
@@ -7,15 +7,15 @@ ip
**ip命令** 用来显示或操纵Linux主机的路由、网络设备、策略路由和隧道,是Linux下较新的功能强大的网络配置工具。
-### 语法
+### 语法
```shell
-ip(选项)(参数)
+ip(选项)(对象)
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
ip [ -force ] -batch filename
```
-### 选项
+### 对象
```shell
OBJECT := { link | address | addrlabel | route | rule | neigh | ntable |
@@ -31,7 +31,7 @@ OBJECT := { link | address | addrlabel | route | rule | neigh | ntable |
-r:显示主机时,不使用IP地址,而使用主机的域名。
```
-### 参数
+### 选项
```shell
OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |
@@ -47,19 +47,19 @@ OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |
help:显示网络对象支持的操作命令的帮助信息。
```
-### 实例
+### 实例
-```shellbash
-ip link show # 显示网络接口信息
+```shell
+ip link show # 显示网络接口信息
ip link set eth0 up # 开启网卡
ip link set eth0 down # 关闭网卡
ip link set eth0 promisc on # 开启网卡的混合模式
-ip link set eth0 promisc offi # 关闭网卡的混个模式
+ip link set eth0 promisc offi # 关闭网卡的混合模式
ip link set eth0 txqueuelen 1200 # 设置网卡队列长度
ip link set eth0 mtu 1400 # 设置网卡最大传输单元
ip addr show # 显示网卡IP信息
-ip addr add 192.168.0.1/24 dev eth0 # 设置eth0网卡IP地址192.168.0.1
-ip addr del 192.168.0.1/24 dev eth0 # 删除eth0网卡IP地址
+ip addr add 192.168.0.1/24 dev eth0 # 为eth0网卡添加一个新的IP地址192.168.0.1
+ip addr del 192.168.0.1/24 dev eth0 # 为eth0网卡删除一个IP地址192.168.0.1
ip route show # 显示系统路由
ip route add default via 192.168.1.254 # 设置系统默认路由
@@ -130,7 +130,7 @@ default via 112.124.15.247 dev eth1
**获取主机所有网络接口**
```shell
-ip link | grep ^[0-9] | awk -F: '{print $2}'
+ip link | grep -E '^[0-9]' | awk -F: '{print $2}'
```
-
+
diff --git a/command/ip6tables-restore.md b/command/ip6tables-restore.md
index 42a651483bc..7c132aca313 100644
--- a/command/ip6tables-restore.md
+++ b/command/ip6tables-restore.md
@@ -7,13 +7,13 @@ ip6tables-restore
**ip6tables-restore命令** 用来还原ip6tables表。
-### 语法
+### 语法
```shell
ip6tables-restore(选项)
```
-### 选项
+### 选项
```shell
-c:指定在还原iptables表时,还原当前的数据包计数器和字节计数器值;
@@ -21,4 +21,3 @@ ip6tables-restore(选项)
```
-
\ No newline at end of file
diff --git a/command/ip6tables-save.md b/command/ip6tables-save.md
index 6b1299e039c..8d63c6786dd 100644
--- a/command/ip6tables-save.md
+++ b/command/ip6tables-save.md
@@ -7,13 +7,13 @@ ip6tables-save
**ip6tables-save命令** 将Linux内核中ip6tables表导出到标准输出设备上。
-### 语法
+### 语法
```shell
ip6tables-save(选项)
```
-### 选项
+### 选项
```shell
-c:指定在保存iptables表时,保存当前的数据包计数器和字节计数器值;
@@ -21,4 +21,3 @@ ip6tables-save(选项)
```
-
\ No newline at end of file
diff --git a/command/ip6tables.md b/command/ip6tables.md
index f1cee16d72e..cc138a3b31a 100644
--- a/command/ip6tables.md
+++ b/command/ip6tables.md
@@ -7,13 +7,13 @@ linux中防火墙软件
**ip6tables命令** 和iptables一样,都是linux中防火墙软件,不同的是ip6tables采用的TCP/ip协议为IPv6。
-### 语法
+### 语法
```shell
ip6tables(选项)
```
-### 选项
+### 选项
```shell
-t<表>:指定要操纵的表;
@@ -35,7 +35,7 @@ ip6tables(选项)
-c<计数器>:在执行插入操作(insert),追加操作(append),替换操作(replace)时初始化包计数器和字节计数器。
```
-### 实例
+### 实例
在命令行窗口输入下面的指令就可以查看当前的 IPv6 防火墙配置:
@@ -203,4 +203,3 @@ IPv4 通常默认即可保护内部局域网私有 IP 上的主机。但是 IPv6
```
-
\ No newline at end of file
diff --git a/command/ipcalc.md b/command/ipcalc.md
index 0880f02c377..fd3e334b2ef 100644
--- a/command/ipcalc.md
+++ b/command/ipcalc.md
@@ -7,13 +7,13 @@ ipcalc
**ipcalc命令** 是一个简单的ip地址计算器,可以完成简单的IP地址计算任务。
-### 语法
+### 语法
```shell
ipcalc(选项)
```
-### 选项
+### 选项
```shell
-b:由给定的IP地址和网络掩码计算出广播地址;
@@ -25,7 +25,7 @@ ipcalc(选项)
--help:显示帮助信息。
```
-### 实例
+### 实例
```shell
[root@localhost ~]# ipcalc -p 192.168.2.1 255.255.255.0
@@ -48,4 +48,3 @@ NETWORK=192.168.2.0
```
-
\ No newline at end of file
diff --git a/command/ipcrm.md b/command/ipcrm.md
index 6b351f91b40..7312a43fb5a 100644
--- a/command/ipcrm.md
+++ b/command/ipcrm.md
@@ -7,13 +7,13 @@ ipcrm
**ipcrm命令** 用来删除一个或更多的消息队列、信号量集或者共享内存标识。
-### 语法
+### 语法
```shell
ipcrm [ -m SharedMemoryID ] [ -M SharedMemoryKey ] [ -q MessageID ] [ -Q MessageKey ] [ -s SemaphoreID ] [ -S SemaphoreKey ]
```
-### 选项
+### 选项
```shell
-m SharedMemory id 删除共享内存标识 SharedMemoryID。与 SharedMemoryID 有关联的共享内存段以及数据结构都会在最后一次拆离操作后删除。
@@ -26,7 +26,7 @@ ipcrm [ -m SharedMemoryID ] [ -M SharedMemoryKey ] [ -q MessageID ] [ -Q Message
msgctl、shmctl 和 semctl 子例程提供了删除操作的细节。标识和关键字可以用 ipcs 命令找到。
-### 示例
+### 示例
如果要删除和 SharedMemoryID 18602 相关的共享内存段,请输入:
@@ -35,4 +35,3 @@ ipcrm -m 18602
```
-
\ No newline at end of file
diff --git a/command/ipcs.md b/command/ipcs.md
index e2ccc066c52..180b656b255 100644
--- a/command/ipcs.md
+++ b/command/ipcs.md
@@ -1,38 +1,63 @@
ipcs
===
-分析消息队列共享内存和信号量
+分析消息队列共享内存和信号量
## 补充说明
**ipcs命令** 用于报告Linux中进程间通信设施的状态,显示的信息包括消息列表、共享内存和信号量的信息。
-### 语法
+### 语法
```shell
ipcs(选项)
```
-### 选项
+### 选项
+
+#### 资源选项
+
+```shell
+-a, --all 显示全部(默认值)
+-q, --queues 消息队列
+-m, --shmems 共享内存
+-s, --semaphores 信号量
+```
+
+#### 输出选项
```shell
--a:显示全部可显示的信息;
--q:显示活动的消息队列信息;
--m:显示活动的共享内存信息;
--s:显示活动的信号量信息。
+-t, --time 显示最后一次操作时间
+-p, --pid 显示创建者和最后一次操作者的PID
+-c, --creator 显示创建者和拥有者的 userid, groupid
+-l, --limits 显示对资源的限制
+-u, --summary 显示当前状态摘要
+--human 以友好的方式显示大小(eg: 500K)
+-b, --bytes 以字节为单位显示大小(仅影响`-l`选项)
```
-### 实例
+#### 通用选项
+
+```shell
+-i, --id 显示指定ID的资源
+-h, --help 显示帮助文档并退出
+-V, --version 显示版本信息并退出
+```
+
+### 实例
```shell
ipcs -a
------ Shared Memory Segments --------
-key shmid owner perms bytes nattch status
-0x7401833d 2654208 root 600 4 0
-0x00000000 3145729 root 600 4194304 9 dest
-0x7401833c 2621442 root 600 4 0
+key shmid owner perms bytes nattch status
+0x7401833d 2654208 root 600 4 0
+0x00000000 3145729 root 600 4194304 9 dest
+0x7401833c 2621442 root 600 4 0
0xd201012b 3080195 root 600 1720 2
```
+### 相关命令
+
+* `ipcrm`: 删除 IPC 资源
+* `ipcmk`: 创建 IPC 资源
-
\ No newline at end of file
diff --git a/command/iperf.md b/command/iperf.md
index 68724447ea7..bf0428e7a26 100644
--- a/command/iperf.md
+++ b/command/iperf.md
@@ -11,7 +11,7 @@ iperf分为两种版本,Unix/Linux版和Windows版,Unix/Linux版更新比较
Linux版本下载地址:http://code.google.com/p/iperf/downloads/list
-### 安装iperf
+### 安装iperf
对于windows版的iperf,直接将解压出来的iperf.exe和cygwin1.dll复制到%systemroot%目录即可,对于linux版的iperf,请使用如下命令安装:
@@ -23,173 +23,84 @@ make
make install
```
-### 选项
-
-
-
-
-| 命令行选项 |
-描述 |
-
-
-| 客户端与服务器共用选项 |
-
-
-| -f, --format [bkmaBKMA] |
-格式化带宽数输出。支持的格式有:
-'b' = bits/sec 'B' = Bytes/sec
-'k' = Kbits/sec 'K' = KBytes/sec
-'m' = Mbits/sec 'M' = MBytes/sec
-'g' = Gbits/sec 'G' = GBytes/sec
-'a' = adaptive bits/sec 'A' = adaptive Bytes/sec
-自适应格式是kilo-和mega-二者之一。除了带宽之外的字段都输出为字节,除非指定输出的格式,默认的参数是a。
-注意:在计算字节byte时,Kilo = 1024, Mega = 1024^2,Giga = 1024^3。通常,在网络中,Kilo = 1000, Mega = 1000^2, and Giga = 1000^3,所以,Iperf也按此来计算比特(位)。如果这些困扰了你,那么请使用-f b参数,然后亲自计算一下。 |
-
-
-| -i, --interval # |
-设置每次报告之间的时间间隔,单位为秒。如果设置为非零值,就会按照此时间间隔输出测试报告。默认值为零。 |
-
-
-| -l, --len #[KM] |
-设置读写缓冲区的长度。TCP方式默认为8KB,UDP方式默认为1470字节。 |
-
-
-| -m, --print_mss |
-输出TCP MSS值(通过TCP_MAXSEG支持)。MSS值一般比MTU值小40字节。通常情况 |
-
-
-| -p, --port # |
-设置端口,与服务器端的监听端口一致。默认是5001端口,与ttcp的一样。 |
-
-
-| -u, --udp |
-使用UDP方式而不是TCP方式。参看-b选项。 |
-
-
-| -w, --window #[KM] |
-设置套接字缓冲区为指定大小。对于TCP方式,此设置为TCP窗口大小。对于UDP方式,此设置为接受UDP数据包的缓冲区大小,限制可以接受数据包的最大值。 |
-
-
-| -B, --bind host |
-绑定到主机的多个地址中的一个。对于客户端来说,这个参数设置了出栈接口。对于服务器端来说,这个参数设置入栈接口。这个参数只用于具有多网络接口的主机。在Iperf的UDP模式下,此参数用于绑定和加入一个多播组。使用范围在224.0.0.0至239.255.255.255的多播地址。参考-T参数。 |
-
-
-| -C, --compatibility |
-与低版本的Iperf使用时,可以使用兼容模式。不需要两端同时使用兼容模式,但是强烈推荐两端同时使用兼容模式。某些情况下,使用某些数据流可以引起1.7版本的服务器端崩溃或引起非预期的连接尝试。 |
-
-
-| -M, --mss #ip头减去40字节。在以太网中,MSS值 为1460字节(MTU1500字节)。许多操作系统不支持此选项。 |
-
-
-| -N, --nodelay |
-设置TCP无延迟选项,禁用Nagle's运算法则。通常情况此选项对于交互程序,例如telnet,是禁用的。 |
-
-
-| -V (from v1.6 or higher) |
-绑定一个IPv6地址。
-服务端:$ iperf -s –V
-客户端:$ iperf -c -V
-注意:在1.6.3或更高版本中,指定IPv6地址不需要使用-B参数绑定,在1.6之前的版本则需要。在大多数操作系统中,将响应IPv4客户端映射的IPv4地址。 |
-
-
-| 服务器端专用选项 |
-
-
-| -s, --server |
-Iperf服务器模式 |
-
-
-| -D (v1.2或更高版本) |
-Unix平台下Iperf作为后台守护进程运行。在Win32平台下,Iperf将作为服务运行。 |
-
-
-| -R(v1.2或更高版本,仅用于Windows) |
-卸载Iperf服务(如果它在运行)。 |
-
-
-| -o(v1.2或更高版本,仅用于Windows) |
-重定向输出到指定文件 |
-
-
-| -c, --client host |
-如果Iperf运行在服务器模式,并且用-c参数指定一个主机,那么Iperf将只接受指定主机的连接。此参数不能工作于UDP模式。 |
-
-
-| -P, --parallel # |
-服务器关闭之前保持的连接数。默认是0,这意味着永远接受连接。 |
-
-
-| 客户端专用选项 |
-
-
-| -b, --bandwidth #[KM] |
-UDP模式使用的带宽,单位bits/sec。此选项与-u选项相关。默认值是1 Mbit/sec。 |
-
-
-| -c, --client host |
-运行Iperf的客户端模式,连接到指定的Iperf服务器端。 |
-
-
-| -d, --dualtest |
-运行双测试模式。这将使服务器端反向连接到客户端,使用-L 参数中指定的端口(或默认使用客户端连接到服务器端的端口)。这些在操作的同时就立即完成了。如果你想要一个交互的测试,请尝试-r参数。 |
-
-
-| -n, --num #[KM] |
-传送的缓冲器数量。通常情况,Iperf按照10秒钟发送数据。-n参数跨越此限制,按照指定次数发送指定长度的数据,而不论该操作耗费多少时间。参考-l与-t选项。 |
-
-
-| -r, --tradeoff |
-往复测试模式。当客户端到服务器端的测试结束时,服务器端通过-l选项指定的端口(或默认为客户端连接到服务器端的端口),反向连接至客户端。当客户端连接终止时,反向连接随即开始。如果需要同时进行双向测试,请尝试-d参数。 |
-
-
-| -t, --time # |
-设置传输的总时间。Iperf在指定的时间内,重复的发送指定长度的数据包。默认是10秒钟。参考-l与-n选项。 |
-
-
-| -L, --listenport # |
-指定服务端反向连接到客户端时使用的端口。默认使用客户端连接至服务端的端口。 |
-
-
-| -P, --parallel # |
-线程数。指定客户端与服务端之间使用的线程数。默认是1线程。需要客户端与服务器端同时使用此参数。 |
-
-
-| -S, --tos # |
-出栈数据包的服务类型。许多路由器忽略TOS字段。你可以指定这个值,使用以"0x"开始的16进制数,或以"0"开始的8进制数或10进制数。
-例如,16进制'0x10' = 8进制'020' = 十进制'16'。TOS值1349就是:
-IPTOS_LOWDELAY minimize delay 0x10
-IPTOS_THROUGHPUT maximize throughput 0x08
-IPTOS_RELIABILITY maximize reliability 0x04
-IPTOS_LOWCOST minimize cost 0x02 |
-
-
-| -T, --ttl # |
-出栈多播数据包的TTL值。这本质上就是数据通过路由器的跳数。默认是1,链接本地。 |
-
-
-| -F (from v1.2 or higher) |
-使用特定的数据流测量带宽,例如指定的文件。
-$ iperf -c -F |
-
-
-| -I (from v1.2 or higher) |
-与-F一样,由标准输入输出文件输入数据。 |
-
-
-| 杂项 |
-
-
-| -h, --help |
-显示命令行参考并退出 。 |
-
-
-| -v, --version |
-显示版本信息和编译信息并退出。 |
-
-
-
-
-### 实例
+### 选项
+
+```bash
+-f, --format \[bkmaBKMA] # 格式化带宽数输出。支持的格式有:
+ # 'b' = bits/sec
+ # 'B' = Bytes/sec
+ # 'k' = Kbits/sec
+ # 'K' = KBytes/sec
+ # 'm' = Mbits/sec
+ # 'M' = MBytes/sec
+ # 'g' = Gbits/sec
+ # 'G' = GBytes/sec
+ # 'a' = adaptive bits/sec
+ # 'A' = adaptive Bytes/sec 自适应格式是kilo-和mega-二者之一。
+ # 除了带宽之外的字段都输出为字节,除非指定输出的格式,默认的参数是a。
+ # 注意:在计算字节byte时,Kilo = 1024, Mega = 1024^2,Giga = 1024^3。
+ # 通常,在网络中,Kilo = 1000, Mega = 1000^2, and Giga = 1000^3,所以,Iperf也按此来计算比特(位)。
+ # 如果这些困扰了你,那么请使用-f b参数,然后亲自计算一下。
+-i, --interval # # 设置每次报告之间的时间间隔,单位为秒。如果设置为非零值,就会按照此时间间隔输出测试报告。默认值为零。
+-l, --len #\[KM] # 设置读写缓冲区的长度。TCP方式默认为8KB,UDP方式默认为1470字节。
+-m, --print\_mss # 输出TCP MSS值(通过TCP\_MAXSEG支持)。MSS值一般比MTU值小40字节。通常情况
+-p, --port # # 设置端口,与服务器端的监听端口一致。默认是5001端口,与ttcp的一样。
+-u, --udp # 使用UDP方式而不是TCP方式。参看-b选项。
+-w, --window #\[KM] # 设置套接字缓冲区为指定大小。对于TCP方式,此设置为TCP窗口大小。
+ # 对于UDP方式,此设置为接受UDP数据包的缓冲区大小,限制可以接受数据包的最大值。
+-B, --bind host # 绑定到主机的多个地址中的一个。对于客户端来说,这个参数设置了出栈接口。对于服务器端来说,
+ # 这个参数设置入栈接口。这个参数只用于具有多网络接口的主机。在Iperf的UDP模式下,此参数用于绑定和加入一个多播组。
+ # 使用范围在224.0.0.0至239.255.255.255的多播地址。参考-T参数。
+-C, --compatibility # 与低版本的Iperf使用时,可以使用兼容模式。不需要两端同时使用兼容模式,但是强烈推荐两端同时使用兼容模式。
+ # 某些情况下,使用某些数据流可以引起1.7版本的服务器端崩溃或引起非预期的连接尝试。
+-M, --mss # ip头减去40字节。在以太网中,MSS值 为1460字节(MTU1500字节)。许多操作系统不支持此选项。
+-N, --nodelay # 设置TCP无延迟选项,禁用Nagle's运算法则。通常情况此选项对于交互程序,例如telnet,是禁用的。
+-V (from v1.6 or higher) # 绑定一个IPv6地址。 服务端:$ iperf -s –V 客户端:$ iperf -c -V 注意:在1.6.3或更高版本中,指定IPv6地址不需要使用-B参数绑定,在1.6之前的版本则需要。在大多数操作系统中,将响应IPv4客户端映射的IPv4地址。
+```
+
+服务器端专用选项
+
+```bash
+-s, --server # Iperf服务器模式
+-D (v1.2或更高版本) # Unix平台下Iperf作为后台守护进程运行。在Win32平台下,Iperf将作为服务运行。
+-R(v1.2或更高版本,仅用于Windows) # 卸载Iperf服务(如果它在运行)。
+-o(v1.2或更高版本,仅用于Windows) # 重定向输出到指定文件
+-c, --client host # 如果Iperf运行在服务器模式,并且用-c参数指定一个主机,那么Iperf将只接受指定主机的连接。此参数不能工作于UDP模式。
+-P, --parallel # # 服务器关闭之前保持的连接数。默认是0,这意味着永远接受连接。
+```
+
+客户端专用选项
+
+```bash
+-b, --bandwidth #\[KM] # UDP模式使用的带宽,单位bits/sec。此选项与-u选项相关。默认值是1 Mbit/sec。
+-c, --client host # 运行Iperf的客户端模式,连接到指定的Iperf服务器端。
+-d, --dualtest # 运行双测试模式。这将使服务器端反向连接到客户端,
+ # 使用-L 参数中指定的端口(或默认使用客户端连接到服务器端的端口)。
+ # 这些在操作的同时就立即完成了。如果你想要一个交互的测试,请尝试-r参数。
+-n, --num #\[KM] # 传送的缓冲器数量。通常情况,Iperf按照10秒钟发送数据。
+ # -n参数跨越此限制,按照指定次数发送指定长度的数据,而不论该操作耗费多少时间。参考-l与-t选项。
+-r, --tradeoff # 往复测试模式。当客户端到服务器端的测试结束时,服务器端通过-l选项指定的端口(或默认为客户端连接到服务器端的端口),
+ # 反向连接至客户端。当客户端连接终止时,反向连接随即开始。如果需要同时进行双向测试,请尝试-d参数。
+-t, --time # # 设置传输的总时间。Iperf在指定的时间内,重复的发送指定长度的数据包。默认是10秒钟。参考-l与-n选项。
+-L, --listenport # # 指定服务端反向连接到客户端时使用的端口。默认使用客户端连接至服务端的端口。
+-P, --parallel # # 线程数。指定客户端与服务端之间使用的线程数。默认是1线程。需要客户端与服务器端同时使用此参数。
+-S, --tos # # 出栈数据包的服务类型。许多路由器忽略TOS字段。你可以指定这个值,使用以"0x"开始的16进制数,
+ # 或以"0"开始的8进制数或10进制数。 例如,16进制'0x10' = 8进制'020' = 十进制'16'。
+ # TOS值1349就是: IPTOS\_LOWDELAY minimize delay 0x10 IPTOS\_THROUGHPUT maximize
+ # throughput 0x08 IPTOS\_RELIABILITY maximize reliability 0x04 IPTOS\_LOWCOST minimize cost 0x02
+-T, --ttl # # 出栈多播数据包的TTL值。这本质上就是数据通过路由器的跳数。默认是1,链接本地。
+-F (from v1.2 or higher) # 使用特定的数据流测量带宽,例如指定的文件。 $ iperf -c -F
+-I (from v1.2 or higher) # 与-F一样,由标准输入输出文件输入数据。
+```
+
+杂项
+
+```bash
+-h, --help # 显示命令行参考并退出 。
+-v, --version # 显示版本信息和编译信息并退出。
+```
+
+### 实例
带宽测试通常采用UDP模式,因为能测出极限带宽、时延抖动、丢包率。在进行测试时,首先以链路理论带宽作为数据发送速率进行测试,例如,从客户端到服务器之间的链路的理论带宽为100Mbps,先用`-b 100M`进行测试,然后根据测试结果(包括实际带宽,时延抖动和丢包率),再以实际带宽作为数据发送速率进行测试,会发现时延抖动和丢包率比第一次好很多,重复测试几次,就能得出稳定的实际带宽。
@@ -250,4 +161,3 @@ iperf -c 192.168.1.1 -d -t 60
进行上下行带宽测试。
-
\ No newline at end of file
diff --git a/command/iptables-restore.md b/command/iptables-restore.md
index 0d117891929..c29290f679f 100644
--- a/command/iptables-restore.md
+++ b/command/iptables-restore.md
@@ -7,26 +7,26 @@ iptables-restore
**iptables-restore命令** 用来还原iptables-save命令所备份的iptables配置。
-### 语法
+### 语法
```shell
-iptables-restor(选项)
+iptables-restore(选项)
```
-### 选项
+### 选项
```shell
-c:指定在还原iptables表时候,还原当前的数据包计数器和字节计数器的值;
-t:指定要还原表的名称。
```
-### 实例
+### 实例
```shell
-iptables-restor < iptables.bak
+iptables-restore < iptables.bak
```
iptables.bak是iptables-save命令所备份的文件。
-
\ No newline at end of file
+
diff --git a/command/iptables-save.md b/command/iptables-save.md
index 2eb7c9c2426..b2b8fde9eca 100644
--- a/command/iptables-save.md
+++ b/command/iptables-save.md
@@ -7,20 +7,20 @@ iptables-save
**iptables-save命令** 用于将linux内核中的iptables表导出到标准输出设备商,通常,使用shell中I/O重定向功能将其输出保存到指定文件中。
-### 语法
+### 语法
```shell
iptables-save(选项)
```
-### 选项
+### 选项
```shell
-c:指定要保存的iptables表时,保存当权的数据包计算器和字节计数器的值;
-t:指定要保存的表的名称。
```
-### 实例
+### 实例
```shell
[root@localhost ~]# iptables-save -t filter > iptables.bak
@@ -40,4 +40,3 @@ COMMIT
```
-
\ No newline at end of file
diff --git a/command/iptables.md b/command/iptables.md
index 5f70449c28e..13b461cbdf8 100644
--- a/command/iptables.md
+++ b/command/iptables.md
@@ -18,7 +18,7 @@ Linux上常用的防火墙软件
- [防火墙的策略](#防火墙的策略)
- [防火墙的策略](#防火墙的策略-1)
- [实例](#实例)
- - [空当前的所有规则和计数](#空当前的所有规则和计数)
+ - [清空当前的所有规则和计数](#清空当前的所有规则和计数)
- [配置允许ssh端口连接](#配置允许ssh端口连接)
- [允许本地回环地址可以正常使用](#允许本地回环地址可以正常使用)
- [设置默认的规则](#设置默认的规则)
@@ -72,7 +72,7 @@ iptables(选项)(参数)
-F, --flush [chain] 清空指定链 chain 上面的所有规则。如果没有指定链,清空该表上所有链的所有规则。
-N, --new-chain chain 用指定的名字创建一个新的链。
-X, --delete-chain [chain] :删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。如果没有指定链名,则会删除该表中所有非内置的链。
--E, --rename-chain old-chain new-chain :用指定的新名字去重命名指定的链。这并不会对链内部照成任何影响。
+-E, --rename-chain old-chain new-chain :用指定的新名字去重命名指定的链。这并不会对链内部造成任何影响。
-Z, --zero [chain] :把指定链,或者表中的所有链上的所有计数器清零。
-j, --jump target <指定目标> :即满足某条件时该执行什么样的动作。target 可以是内置的目标,比如 ACCEPT,也可以是用户自定义的链。
@@ -154,6 +154,7 @@ iptables还支持自己定义链。但是自己定义的链,必须是跟某种
- **DNAT** :目标地址转换。
- **MASQUERADE** :IP伪装(NAT),用于ADSL。
- **LOG** :日志记录。
+- **SEMARK** : 添加SEMARK标记以供网域内强制访问控制(MAC)
```shell
┏╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍┓
@@ -191,7 +192,7 @@ iptables还支持自己定义链。但是自己定义的链,必须是跟某种
### 实例
-#### 空当前的所有规则和计数
+#### 清空当前的所有规则和计数
```shell
iptables -F # 清空所有的防火墙规则
@@ -390,6 +391,12 @@ iptables -I INPUT -j DROP -p tcp -s 0.0.0.0/0 -m string --algo kmp --string "cmd
iptables -A INPUT -p tcp --syn -m limit --limit 5/second -j ACCEPT
```
+#### 添加SECMARK记录
+```shell
+iptables -t mangle -A INPUT -p tcp --src 192.168.1.2 --dport 443 -j SECMARK --selctx system_u:object_r:myauth_packet_t
+# 向从 192.168.1.2:443 以TCP方式发出到本机的包添加MAC安全上下文 system_u:object_r:myauth_packet_t
+```
+
## 更多实例
> 用iptables搭建一套强大的安全防护盾 http://www.imooc.com/learn/389
@@ -512,4 +519,4 @@ iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j
iptables -I INPUT -m limit --limit 3/hour --limit-burst 10 -j ACCEPT # limit模块; --limit-burst 默认为5
```
-
+
diff --git a/command/iptraf.md b/command/iptraf.md
index 52d1cc10522..c801ef9bffd 100644
--- a/command/iptraf.md
+++ b/command/iptraf.md
@@ -7,13 +7,13 @@ iptraf
**iptraf命令** 可以实时地监视网卡流量,可以生成网络协议数据包信息、以太网信息、网络节点状态和ip校验和错误等信息。
-### 语法
+### 语法
```shell
iptraf(选项)
```
-### 选项
+### 选项
```shell
-i网络接口:立即在指定网络接口上开启IP流量监视;
@@ -29,4 +29,3 @@ iptraf(选项)
```
-
\ No newline at end of file
diff --git a/command/iptstate.md b/command/iptstate.md
index fda00a5e458..184e3e8f287 100644
--- a/command/iptstate.md
+++ b/command/iptstate.md
@@ -7,13 +7,13 @@ iptstate
**iptstate命令** 以top指令类似的风格时显示Linux内核中iptables的工作状态。
-### 语法
+### 语法
```shell
iptstate(选项)
```
-### 选项
+### 选项
```shell
-b:指定输出信息的排序规则;
@@ -28,4 +28,3 @@ iptstate(选项)
```
-
\ No newline at end of file
diff --git a/command/iscsiadm.md b/command/iscsiadm.md
new file mode 100644
index 00000000000..642674f8b8f
--- /dev/null
+++ b/command/iscsiadm.md
@@ -0,0 +1,98 @@
+iscsiadm
+===
+
+管理iSCSI连接
+
+## 补充说明
+
+**iscsiadm命令** 用于管理 iSCSI(Internet Small Computer System Interface)存储连接。iSCSI 是一种基于网络的存储协议,允许在计算机之间传输块级别的数据。iscsiadm 命令提供了与 iSCSI 存储设备进行连接、配置和管理的功能。
+```shell
+yum install iscsi-initiator-utils #安装iscsiadm
+/etc/iscsi/initiatorname.iscsi #iscsi启动器名称配置文件位置
+systemctl enable iscsi #设置服务开机启动
+systemctl enable iscsid
+systemctl restart iscsi #重启iscsi服务
+systemctl restart iscsid
+```
+
+## 语法
+
+```shell
+iscsiadm [选项] <命令> <参数>
+```
+
+## 选项
+
+```shell
+-m,--mode # <模式> 指定工作模式,如discovery(发现模式)、node(管理节点)、session(管理会话)、discoverydb、host、iface(管理 iSCSI 网络接口);
+-t,--type # 指定类型,如sendtargets (或st)、isns、fw,仅用于discovery模式;
+-T,--targetname # 指定目标名称,仅用于node模式;
+-p,--portal # 指定目标IP,不带端口默认使用3260,仅用于discovery、node模式;
+-l,--login # 登录一个iSCSI设备,仅用于discovery、node模式;
+-u,--logout # 退出一个iSCSI设备,仅用于node、session模式;
+-I,--interface # 指定用于iSCSI操作的网络接口;
+-P,--print # <0-4> 打印详细,用于discovery、node、session模式;
+-s,--stats # 查看会话状态
+-h,--help # 显示帮助;
+-V,--version # 显示版本信息。
+```
+
+## 实例
+
+发送iSCSI发现请求,并列出发现的iSCSI设备目标器:
+
+```shell
+[root@Azroy-s1 ~]# iscsiadm -m discovery -t st -p 10.10.10.10
+10.10.10.10:3260,1 iqn.2000-01.com.synology:NAS.default-target.1
+```
+
+登录到发现的iSCSI目标器:
+
+```shell
+[root@Azroy-s1 ~]# iscsiadm -m node -T iqn.2000-01.com.synology:NAS.target.1 -p 10.10.10.10 -l
+Logging in to [iface: default, target: iqn.2000-01.com.synology:NAS.target.1, portal: 10.10.10.10,3260] (multiple)
+Login to [iface: default, target: iqn.2000-01.com.synology:NAS.target.1, portal: 10.10.10.10,3260] successful.
+```
+
+查看已登录的设备:
+
+```shell
+[root@Azroy-s1 ~]# iscsiadm -m session
+tcp: [3] 10.10.10.10:3260,1 iqn.2000-01.com.synology:NAS.target.1 (non-flash)
+```
+
+退出已登录的设备:
+
+```shell
+[root@Azroy-s1 ~]# iscsiadm -m node -T iqn.2000-01.com.synology:NAS.target.1 -p 10.10.10.10 -u
+Logging out of session [sid: 11, target: iqn.2000-01.com.synology:NAS.target.1, portal: 10.10.10.10,3260]
+或
+[root@Azroy-s1 ~]# iscsiadm -m session -u #退出所有iscsi会话
+```
+
+使用lsblk或fdisk查看硬盘,对硬盘分区再格式化后可挂载目录
+
+```shell
+[root@Azroy-s1 ~]# lsblk
+NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
+sda 8:0 0 1.8T 0 disk
+├─sda1 8:1 0 1G 0 part /boot
+└─sda2 8:2 0 1.8T 0 part
+ ├─centos-root 253:0 0 1.8T 0 lvm /
+ └─centos-swap 253:1 0 5.9G 0 lvm [SWAP]
+sdb 8:32 0 10G 0 disk
+
+[root@Azroy-s1 ~]# lsblk -S /dev/sd* #可以查看硬盘传输类型
+NAME HCTL TYPE VENDOR MODEL REV TRAN
+sda 0:1:0:0 disk HP LOGICAL VOLUME 3.00 sas
+sdb 12:0:0:1 disk SYNOLOGY Storage 4.0 iscsi
+
+[root@Azroy-s1 ~]# fdisk -l /dev/sdb
+磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
+Units = 扇区 of 1 * 512 = 512 bytes
+扇区大小(逻辑/物理):512 字节 / 512 字节
+I/O 大小(最小/最佳):512 字节 / 512 字节
+```
+
+
+
diff --git a/command/ispell.md b/command/ispell.md
index 87da5274579..7db3f01a133 100644
--- a/command/ispell.md
+++ b/command/ispell.md
@@ -7,15 +7,14 @@ ispell
**ispell命令** 用于检查文件中出现的拼写错误。
-### 语法
+### 语法
```shell
ispell(参数)
```
-### 参数
+### 参数
文件:指定要进行拼写检查的文件。
-
\ No newline at end of file
diff --git a/command/jed.md b/command/jed.md
index a49f61d6b9f..47983ff6e5b 100644
--- a/command/jed.md
+++ b/command/jed.md
@@ -7,13 +7,13 @@ jed
**jed命令** 是由Slang所开发,其主要用用途是编辑程序的源代码。它支持彩色语法加亮显示,可以模拟emacs,EDT,wordstar和Brief编辑器。
-### 语法
+### 语法
```shell
jed(选项)(参数)
```
-### 选项
+### 选项
```shell
-2:显示上下两个编辑区;
@@ -25,11 +25,11 @@ jed(选项)(参数)
-s<字符串>:查找并移到指定的字符串。
```
-### 参数
+### 参数
文件:指定待编辑的文件列表。
-### 实例
+### 实例
以上下两个编辑区的方式,开启 mysource.c 原始代码文件。若要切换编辑区,可利用稍后介绍的命令,开启操作命令,开启功能表后,按 3 ,再按 2 ,即可切换编辑区:
@@ -67,4 +67,3 @@ unset_setkey ("@\emy", "\ey");
```
-
\ No newline at end of file
diff --git a/command/jobs.md b/command/jobs.md
index 969899e1a77..5ffbb6e7406 100644
--- a/command/jobs.md
+++ b/command/jobs.md
@@ -1,51 +1,79 @@
jobs
===
-显示Linux中的任务列表及任务状态
+显示作业的状态。
-## 补充说明
+## 概要
-**jobs命令** 用于显示Linux中的任务列表及任务状态,包括后台运行的任务。该命令可以显示任务号及其对应的进程号。其中,任务号是以普通用户的角度进行的,而进程号则是从系统管理员的角度来看的。一个任务可以对应于一个或者多个进程号。
+```shell
+jobs [-lnprs] [jobspec ...]
+jobs -x command [args]
+```
+
+## 主要用途
-在Linux系统中执行某些操作时候,有时需要将当前任务暂停调至后台,或有时须将后台暂停的任务重启开启并调至前台,这一序列的操作将会使用到 jobs、bg、和 fg 三个命令以及两个快捷键来完成。
+- 显示作业的状态。
+- 列出活动的作业。
+- 列出停止的作业。
-### 语法
+## 选项
```shell
-jobs(选项)(参数)
+-l 在作业信息中额外的列出PID。
+-n 只列出最近一次通知以来状态变更的作业。
+-p 只列出PID。
+-r 只输出处于运行状态的作业。
+-s 只输出处于停止状态的作业。
```
-### 选项
+## 返回值
+
+返回状态为成功除非给出了非法选项、执行出现错误。
+
+如果使用`jobs -x command [args]`形式执行,那么返回值为`command`的退出状态。
+
+## 例子
```shell
--l:显示进程号;
--p:仅任务对应的显示进程号;
--n:显示任务状态的变化;
--r:仅输出运行状态(running)的任务;
--s:仅输出停止状态(stoped)的任务。
-```
+[user2@pc] ssh 192.168.1.4
+pc@192.168.1.4's password:
+# 此时按下ctrl+z使得交互停止。
+[1]+ Stopped ssh 192.168.1.4
-### 参数
+[user2@pc] sleep 60 &
+[2] 13338
-任务标识号:指定要显示的任务识别号。
+[user2@pc] jobs
+[1]- Stopped ssh 192.168.1.4
+[2] Running sleep 60 &
-### 实例
+[user2@pc] jobs -l
+[1]- 12927 Stopped ssh 192.168.1.4
+[2] 13338 Running sleep 60 &
-使用jobs命令显示当前系统的任务列表,输入如下命令:
+[user2@pc] jobs -p
+12927
+13338
-```shell
-jobs -l #显示当前系统的任务列表
-```
+[user2@pc] jobs -s
+[1]- Stopped ssh 192.168.1.4
-上面的命令执行后,将显示出当前系统下的任务列表信息,具体如下所示:
+[user2@pc] jobs -r
+[2] Running sleep 60 &
-```shell
-[1] + 1903 运行中 find / -name password &
+[user2@pc] kill -9 12927
+[2] Done sleep 60
+
+[user2@pc] jobs -n -l
+[1]+ 12927 Killed ssh 192.168.1.4
+
+[user2@pc] jobs -n -l
```
-注意:要得到以上输出信息,必须在执行jobs命令之前执行命令`find / -name password &`。否则,执行jobs命令不会显示任何信息。
+### 注意
-其中,输出信息的第一列表示任务编号,第二列表示任务所对应的进程号,第三列表示任务的运行状态,第四列表示启动任务的命令。
+1. `bash`的作业控制命令包括`bg fg kill wait disown suspend`。
+2. 该命令需要`set`选项`monitor`处于开启状态时才能执行;查看作业控制状态:输入`set -o`查看`monitor`行;执行`set -o monitor`或`set -m`开启该选项。
+3. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。
-
\ No newline at end of file
diff --git a/command/joe.md b/command/joe.md
index 583887b791e..6c78be9ef81 100644
--- a/command/joe.md
+++ b/command/joe.md
@@ -7,13 +7,13 @@ joe
**joe命令** 是一款功能强大的纯文本编辑器,拥有众多编写程序和文本的优良特性。
-### 语法
+### 语法
```shell
joe(选项)(参数)
```
-### 选项
+### 选项
```shell
-force:强制在最后一行的结尾处加上换行符号;
@@ -40,9 +40,8 @@ joe(选项)(参数)
-skiptop<行数>:不使用屏幕上方指定的行数。
```
-### 参数
+### 参数
文件:指定要编辑的文件。
-
\ No newline at end of file
diff --git a/command/join.md b/command/join.md
index 7e99f4ab4b2..50fdccdadd4 100644
--- a/command/join.md
+++ b/command/join.md
@@ -7,13 +7,13 @@ join
**join命令** 用来将两个文件中,制定栏位内容相同的行连接起来。找出两个文件中,指定栏位内容相同的行,并加以合并,再输出到标准输出设备。
-### 语法
+### 语法
```shell
join(选项)(参数)
```
-### 选项
+### 选项
```shell
-a<1或2>:除了显示原来的输出内容之外,还显示指令文件中没有相同栏位的行;
@@ -26,10 +26,38 @@ join(选项)(参数)
-2<栏位>:连接[文件2]指定的栏位。
```
-### 参数
+### 参数
* 文件1:要进行合并操作的第1个文件参数;
* 文件2:要进行合并操作的第2个文件参数。
+### 常见用法
-
\ No newline at end of file
+把两个文件制定栏位内容相同的行连接起来:
+
+```shell
+[root@localhost ~]# cat name
+1 xiaoming
+2 xiaowang
+3 xiaoliu
+[root@localhost ~]# cat city
+1 beijing beijing
+2 hubei wuhan
+3 hunan changsha
+
+# city文件在后,则拼接在后,如果city文件在前,则name文件拼接在后。
+[root@localhost ~]# join name city
+1 xiaoming beijing beijing
+2 xiaowang hubei wuhan
+3 xiaoliu hunan changsha
+```
+
+把两个文件指定列拼接起来:
+
+```shell
+# 把name文件的第2列和city文件的第3列拼接起来
+[root@localhost ~]# join -o 1.2 2.3 name city
+xiaoming beijing
+xiaowang wuhan
+xiaoliu changsha
+```
diff --git a/command/journalctl.md b/command/journalctl.md
new file mode 100644
index 00000000000..2c9b8510a49
--- /dev/null
+++ b/command/journalctl.md
@@ -0,0 +1,155 @@
+journalctl
+===
+
+检索 systemd 日志,只要使用 systemd 的 Linux 发行版(如 Fedora、Ubuntu Modern、Debian、SUSE、Arch),几乎都会配备 journalctl。
+
+### 语法
+
+```shell
+journalctl [OPTIONS...] [MATCHES...]
+```
+
+### 选项
+
+```shell
+Flags:
+ --system # 显示系统日志
+ --user # 显示当前用户的用户日志
+-M --machine=CONTAINER # 在本地容器上操作
+-S --since=DATE # 显示不早于指定日期的条目
+-U --until=DATE # 显示不晚于指定日期的条目
+-c --cursor=CURSOR # 显示从指定光标开始的条目
+ --after-cursor=CURSOR # 在指定光标后显示条目
+ --show-cursor # 在所有条目之后打印光标
+-b --boot[=ID] # 显示当前启动或指定启动
+ --list-boots # 显示有关已记录引导的简洁信息
+-k --dmesg # 显示当前启动的内核消息日志
+-u --unit=UNIT # 显示指定单元的日志
+-t --identifier=STRING # 显示具有指定系统日志标识符的条目
+-p --priority=RANGE # 显示具有指定优先级的条目
+-e --pager-end # 在pager中立即跳转到末尾
+-f --follow # 关注期刊
+-n --lines[=INTEGER] # 要显示的日志条目数
+ --no-tail # 显示所有行,即使在跟随模式下
+-r --reverse # 首先显示最新的条目
+-o --output=STRING # 更改日志输出模式 (short, short-iso,
+ short-precise, short-monotonic, verbose,
+ export, json, json-pretty, json-sse, cat)
+--utc # 以协调世界时 (UTC) 表示的时间
+-x --catalog # 在可用的情况下添加消息说明
+ --no-full # Ellipsize 字段
+-a --all # 显示所有字段,包括长的和不可打印的
+-q --quiet # 不显示特权警告
+ --no-pager # 不要将输出通过管道传输到寻呼机
+-m --merge # 显示所有可用期刊的条目
+-D --directory=PATH # 显示目录中的日志文件
+ --file=PATH # 显示日志文件
+ --root=ROOT # 对根目录下的目录文件进行操作
+ --interval=TIME # 更改 FSS 密封键的时间间隔
+ --verify-key=KEY # 指定FSS验证密钥
+ --force # 使用 --setup-keys 覆盖 FSS 密钥对
+
+Commands:
+-h --help # 显示此帮助文本
+ --version # 显示包版本
+-F --field=FIELD # 列出指定字段的所有值
+ --new-id128 # 生成新的 128 位 ID
+ --disk-usage # 显示所有日志文件的总磁盘使用情况
+ --vacuum-size=BYTES # 将磁盘使用量减少到指定大小以下
+ --vacuum-time=TIME # 删除早于指定日期的日志文件
+ --flush # 将所有日志数据从 /run 刷新到 /var
+ --header # 显示期刊头信息
+ --list-catalog # 显示目录中的所有消息 ID
+ --dump-catalog # 在消息目录中显示条目
+ --update-catalog # 更新消息目录数据库
+ --setup-keys # 生成新的 FSS 密钥对
+ --verify # 验证日志文件的一致性
+```
+
+### 实例
+
+**过滤输出**
+
+`journalctl` 可以根据特定字段过滤输出。如果过滤的字段比较多,需要较长时间才能显示出来。
+
+示例:
+
+显示本次启动后的所有日志:
+
+```shell
+journalctl -b
+```
+
+不过,一般大家更关心的不是本次启动后的日志,而是上次启动时的(例如,刚刚系统崩溃了)。可以使用 -b 参数:
+
+- `journalctl -b -0` 显示本次启动的信息
+- `journalctl -b -1` 显示上次启动的信息
+- `journalctl -b -2` 显示上上次启动的信息 `journalctl -b -2`
+
+只显示错误、冲突和重要告警信息
+
+```shell
+journalctl -p err..alert
+```
+
+也可以使用数字, `journalctl -p 3..1`。如果使用单个 number/keyword,则 `journalctl -p 3` - 还包括所有更高的优先级。
+
+显示从某个日期 ( 或时间 ) 开始的消息:
+
+```shell
+journalctl --since="2012-10-30 18:17:16"
+```
+
+显示从某个时间 ( 例如 20分钟前 ) 的消息:
+
+```shell
+journalctl --since "20 min ago"
+```
+
+显示最新信息
+
+```shell
+journalctl -f
+```
+
+显示特定程序的所有消息:
+
+```shell
+journalctl /usr/lib/systemd/systemd
+```
+
+显示特定进程的所有消息:
+
+```shell
+journalctl _PID=1
+```
+
+显示指定单元的所有消息:
+
+```shell
+journalctl -u man-db.service
+```
+
+显示内核环缓存消息r:
+
+```shell
+journalctl -k
+```
+
+**手动清理日志**
+
+`/var/log/journal` 存放着日志, `rm` 应该能工作. 或者使用 `journalctl`,
+
+例如:
+
+清理日志使总大小小于 100M:
+
+```shell
+journalctl --vacuum-size=100M
+```
+
+清理最早两周前的日志.
+
+```shell
+journalctl --vacuum-time=2weeks
+```
diff --git a/command/jq.md b/command/jq.md
new file mode 100644
index 00000000000..3a897c26d0e
--- /dev/null
+++ b/command/jq.md
@@ -0,0 +1,190 @@
+jq
+===
+
+一个灵活的轻量级命令行JSON处理器
+
+### 补充说明
+
+jq 是 stedolan 开发的一个轻量级的和灵活的命令行JSON处理器,源码请参考 [jq 项目主页](https://github.com/stedolan/jq)
+
+jq 用于处理JSON输入,将给定过滤器应用于其JSON文本输入并在标准输出上将过滤器的结果生成为JSON。
+
+最简单的过滤器是`.`,它将jq的输入未经修改地复制到其输出中(格式设置除外)。
+
+请注意,jq 当前仅支持64位双精度浮点数(IEEE754)。
+
+
+### 安装
+
+```bash
+# Debian系,如 Ubuntu
+sudo apt-get install jq
+
+# RedHat系, 如 CentOS
+yum install jq
+```
+
+### 语法
+
+```bash
+jq [options] [file...]
+jq [options] --args [strings...]
+jq [options] --jsonargs [JSON_TEXTS...]
+```
+
+### 选项
+
+```bash
+-c 紧凑而不是漂亮的输出;
+-n 使用`null`作为单个输入值;
+-e 根据输出设置退出状态代码;
+-s 将所有输入读取(吸取)到数组中;应用过滤器;
+-r 输出原始字符串,而不是JSON文本;
+-R 读取原始字符串,而不是JSON文本;
+-C 为JSON着色;
+-M 单色(不要为JSON着色);
+-S 在输出上排序对象的键;
+--tab 使用制表符进行缩进;
+--arg a v 将变量$a设置为value;
+--argjson a v 将变量$a设置为JSON value;
+--slurpfile a f 将变量$a设置为从读取的JSON文本数组;
+--rawfile a f 将变量$a设置为包含内容的字符串;
+--args 其余参数是字符串参数,而不是文件;
+--jsonargs 其余的参数是JSON参数,而不是文件;
+-- 终止参数处理;
+```
+
+### 例子
+
+`.`: 以漂亮的方式输出
+
+```bash
+$ echo '{ "foo": { "bar": { "baz": 123 } } }' | jq '.'
+{
+ "foo": {
+ "bar": {
+ "baz": 123
+ }
+ }
+}
+
+```
+
+`.foo, .foo.bar, .foo?`: 获取一个键的值
+
+```bash
+$ echo '{"foo": 42, "bar": "less interesting data"}' | jq '.foo'
+42
+```
+
+`.[], .[]?, .[2], .[10:15]`: 数组运算
+
+```bash
+$ echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]' | jq '.[1]'
+{
+ "name": "XML",
+ "good": false
+}
+
+```
+
+`[], {}`: 构造一个数组/对象
+
+```bash
+$ echo '{"user":"stedolan","titles":["JQ Primer", "More JQ"]}' | jq '{user, title: .titles[]}'
+
+{
+ "user": "stedolan",
+ "title": "JQ Primer"
+}
+{
+ "user": "stedolan",
+ "title": "More JQ"
+}
+
+```
+
+`length`: 计算一个值的长度
+
+```bash
+$ echo '[[1,2], "string", {"a":2}, null]' | jq '.[] | length'
+2
+6
+1
+0
+
+```
+
+`keys`: 取出数组中的键
+
+```bash
+$ echo '{"abc": 1, "abcd": 2, "Foo": 3}' | jq 'keys'
+[
+ "Foo",
+ "abc",
+ "abcd"
+]
+
+```
+
+`,`: 使用多个过滤器
+
+```bash
+$ echo '{ "foo": 42, "bar": "something else", "baz": true}' | jq '.foo, .bar'
+42
+"something else"
+
+```
+
+`|`: 通过管道将一个过滤器的输出当做下一个过滤器的输入
+
+```bash
+$ echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]' | jq '.[] | .name'
+"JSON"
+"XML"
+
+```
+
+`select(foo)`: 如果foo返回true,则输入保持不变
+
+```bash
+$ echo '[1,5,3,0,7]' | jq 'map(select(. >= 2))'
+[
+ 5,
+ 3,
+ 7
+]
+
+```
+
+`map(foo)`: 每个输入调用过滤器
+
+```bash
+$ echo '[1,2,3]' | jq 'map(.+1)'
+[
+ 2,
+ 3,
+ 4
+]
+
+```
+
+`if-then-else-end`: 条件判断
+
+```bash
+ $ echo '2' | jq 'if . == 0 then "zero" elif . == 1 then "one" else "many" end'
+
+"many"
+
+```
+
+`\(foo)`: 在字符串中插入值并进行运算
+
+```bash
+$ echo '42' | jq '"The input was \(.), which is one less than \(.+1)"'
+
+"The input was 42, which is one less than 43"
+
+```
+
+
diff --git a/command/jwhois.md b/command/jwhois.md
index 52085f79d44..98da794b931 100644
--- a/command/jwhois.md
+++ b/command/jwhois.md
@@ -7,13 +7,13 @@ whois 客户端服务
**jwhois** searches Whois servers for the object on the command line.The host to query is taken from a global configuration file, a configuration file specified on the command line, or selected directly on the command line.
-### 语法
+### 语法
```shell
jwhois [选项]
```
-### 选项
+### 选项
```shell
--version display version number and patch level
@@ -33,7 +33,7 @@ jwhois [选项]
> 注:以上英文部分寻求网友协助翻译,翻译结果可发送至 sa(at)linuxde.net,谢谢!
-### 实例
+### 实例
显示指定用户信息:
@@ -59,4 +59,3 @@ Registrar WHOIS Server: whois.west263.com
```
-
\ No newline at end of file
diff --git a/command/kernelversion.md b/command/kernelversion.md
index 9cc1e454a00..2e5fc0b4dae 100644
--- a/command/kernelversion.md
+++ b/command/kernelversion.md
@@ -7,11 +7,10 @@ kernelversion
**kernelversion命令** 用于打印当前内核的主版本号。
-### 语法
+### 语法
```shell
kernelversion
```
-
\ No newline at end of file
diff --git a/command/kexec.md b/command/kexec.md
index b267b32a511..af69115698b 100644
--- a/command/kexec.md
+++ b/command/kexec.md
@@ -9,13 +9,13 @@ kexec
**kexec的好处:** 要求高可用性的系统,以及需要不断重新启动系统的内核开发人员,都将受益于kexec。因为 kexec跳过了系统重新启动过程中最耗时的部分(也就是固件初始化硬件设备的阶段),所以重新启动变得非常快,可用性得到了提高。
-### 语法
+### 语法
```shell
kexec(选项)
```
-### 选项
+### 选项
```shell
-l:指定内核映像文件;
@@ -26,4 +26,3 @@ kexec(选项)
```
-
\ No newline at end of file
diff --git a/command/kill.md b/command/kill.md
index 8a2a668b0a9..f542d66586b 100644
--- a/command/kill.md
+++ b/command/kill.md
@@ -1,39 +1,54 @@
kill
===
-删除执行中的程序或工作
+发送信号到进程。
-## 补充说明
+## 目录
-**kill命令** 用来删除执行中的程序或工作。kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序。程序或工作的编号可利用ps指令或job指令查看。
+- [bash内建命令](#内建命令)
+- [GNU coreutils中的命令](#外部命令)
-### 语法
+## 内建命令
+
+### 概要
```shell
-kill(选项)(参数)
-xkill # 图形化关闭程序
+kill [-s sigspec | -n signum | -sigspec] pid | jobspec ...
+kill -l [sigspec]
```
+### 主要用途
+
+- 发送信号到作业或进程(可以为多个)。
+- 列出信号。
+
### 选项
```shell
--a:当处理当前进程时,不限制命令名和进程号的对应关系;
--l <信息编号>:若不加<信息编号>选项,则-l参数会列出全部的信息名称;
--p:指定kill 命令只打印相关进程的进程号,而不发送任何信号;
--s <信息名称或编号>:指定要送出的信息;
--u:指定用户。
+-s sig 信号名称。
+-n sig 信号名称对应的数字。
+-l 列出信号名称。如果在该选项后提供了数字那么假设它是信号名称对应的数字。
+-L 等价于-l选项。
```
### 参数
-进程或作业识别号:指定要删除的进程或作业。
+pid:进程ID
+
+jobspec:作业标识符
-### 实例
+### 返回值
-列出所有信号名称:
+返回状态为成功除非给出了非法选项、执行出现错误。
+
+### 例子
```shell
- kill -l
+[user2@pc] kill -l 9
+KILL
+
+# 列出所有信号名称:
+[user2@pc] kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
@@ -50,31 +65,127 @@ xkill # 图形化关闭程序
55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6
59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
-```
-只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略, **下面是常用的信号:**
+# 下面是常用的信号。
+# 只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略。
-```shell
-HUP 1 终端断线
+HUP 1 终端挂断
INT 2 中断(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + \)
-TERM 15 终止
KILL 9 强制终止
-CONT 18 继续(与STOP相反, fg/bg命令)
+TERM 15 终止
+CONT 18 继续(与STOP相反,fg/bg命令)
STOP 19 暂停(同 Ctrl + Z)
```
-先用ps查找进程,然后用kill杀掉:
+```shell
+# 以下发送KILL信号的形式等价。当然还有更多的等价形式,在此不一一列举了。
+[user2@pc] kill -s SIGKILL PID
+[user2@pc] kill -s KILL PID
+[user2@pc] kill -n 9 PID
+[user2@pc] kill -9 PID
+
+[user2@pc] sleep 90 &
+[1] 178420
+
+# 终止作业标识符为1的作业。
+[user2@pc] kill -9 %1
+
+[user2@pc] jobs -l
+[1]+ 178420 KILLED ssh 192.168.1.4
+
+[user2@pc] sleep 90 &
+[1] 181357
+
+# 发送停止信号。
+[user2@pc] kill -s STOP 181357
+
+[user2@pc] jobs -l
+[1]+ 181537 Stopped (signal) sleep 90
+
+# 发送继续信号。
+[user2@pc] kill -s CONT 181357
+
+[user2@pc] jobs -l
+[1]+ 181537 Running sleep 90 &
+```
+
+### 注意
+
+1. `bash`的作业控制命令包括`bg fg kill wait disown suspend`。
+2. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。
+
+
+## 外部命令
+
+### 概要
```shell
-ps -ef | grep vim
-root 3268 2884 0 16:21 pts/1 00:00:00 vim install.log
-root 3370 2822 0 16:21 pts/0 00:00:00 grep vim
+kill [-signal|-s signal|-p] [-q value] [-a] [--] pid|name...
+kill -l [number] | -L
+```
+
+### 主要用途
+
+- 发送信号到进程(可以为多个)。
+
+- 列出信号。
+
+### 选项
+
+```shell
+-s, --signal signal 要发送的信号,可能是信号名称或信号对应的数字。
+-l, --list [number] 打印信号名称或转换给定数字到信号名称。信号名称可参考文件(/usr/include/linux/signal.h)。
+-L, --table 和'-l'选项类似,但是输出信号名称以及信号对应的数字。
+-a, --all 不要限制“命令名到pid”的转换为具有与当前进程相同的UID的进程。
+-p, --pid 打印目标进程的PID而不发送信号。
+--verbose 打印信号以及接收信号的PID。
+-q, --queue value 使用sigqueue(3)而不是kill(2)。参数value是信号对应的数字。
+ 如果接收进程已为此信号安装了处理程序将SA_SIGINFO标记为sigaction(2),则可以获取
+ 该数据通过siginfo_t结构的si_sigval字段。
+--help 显示帮助信息并退出。
+--version 显示版本信息并退出。
+```
+
+### 参数
+
+接收信号的进程列表可以是PID以及name的混合组成。
-kill 3268
-kill 3268
--bash: kill: (3268) - 没有那个进程
+PID:每一个PID可以是以下四种情况之一:
+
+状态|说明
+:--:|:--:
+n | 当n大于0时,PID为n的进程接收信号。
+0 | 当前进程组中的所有进程均接收信号。
+-1 | PID大于1的所有进程均接收信号。
+-n | 当n大于1时,进程组n中的所有进程接收信号。当给出了一个参数的形式为“-n”,想要让它表示一个进程组,那么必须首先指定一个信号,或参数前必须有一个“--”选项,否则它将被视为发送的信号。
+
+name:使用此名称调用的所有进程将接收信号。
+
+### 例子
+
+```shell
+> sleep 20 &
+
+# 列出对应的PID。
+> kill -p sleep
+23021
```
+### 返回值
+
+- 0 成功。
+- 1 失败。
+- 64 部分成功(当指定了多个进程时)。
+
+### 注意
+
+1. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 kill`或`info coreutils 'kill invocation'`。
+2. 启动或关闭内建命令请查看`enable`命令,关于同名优先级的问题请查看`builtin`命令的例子部分的相关讨论。
+3. 与`kill`命令类似的有`xkill`,`pkill`,`killall`等,用于不同的目的和场景。
+
+## 参考链接
+
+[发送信号到进程](https://bash.cyberciti.biz/guide/Sending_signal_to_Processes)
+
-
\ No newline at end of file
diff --git a/command/killall.md b/command/killall.md
index 730f297abd8..865f9b27d30 100644
--- a/command/killall.md
+++ b/command/killall.md
@@ -7,13 +7,13 @@ killall
**killall命令** 使用进程的名称来杀死进程,使用此指令可以杀死一组同名进程。我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用ps等命令再配合grep来查找进程,而killall把这两个过程合二为一,是一个很好用的命令。
-### 语法
+### 语法
```shell
killall(选项)(参数)
```
-### 选项
+### 选项
```shell
-e:对长名称进行精确匹配;
@@ -27,17 +27,20 @@ killall(选项)(参数)
-u:杀死指定用户的进程。
```
-### 参数
+### 参数
进程名称:指定要杀死的进程名称。
-### 实例
-
-杀死所有同名进程
+### 实例
```shell
+# 杀死所有同名进程
killall vi
+# 指定向进程发送的信号
+killall -9 vi
+# 0信号表示不向进程发送信号, 可通过返回值判断进程是否存在, 0(存在)1(不存在)
+killall -0 vi
+echo $?
```
-
\ No newline at end of file
diff --git a/command/last.md b/command/last.md
index 216b09e0464..1df770e0d04 100644
--- a/command/last.md
+++ b/command/last.md
@@ -7,13 +7,13 @@ last
**last命令** 用于显示用户最近登录信息。单独执行last命令,它会读取`/var/log/wtmp`的文件,并把该给文件的内容记录的登入系统的用户名单全部显示出来。
-### 语法
+### 语法
```shell
last(选项)(参数)
```
-### 选项
+### 选项
```shell
-a:把从何处登入系统的主机名称或ip地址,显示在最后一行;
@@ -24,12 +24,12 @@ last(选项)(参数)
-x:显示系统关机,重新开机,以及执行等级的改变等信息。
```
-### 参数
+### 参数
* 用户名:显示用户登录列表;
* 终端:显示从指定终端的登录列表。
-### 实例
+### 实例
last命令用了显示用户登录情况,以下是直接显示固定行数的记录:
@@ -48,4 +48,3 @@ root pts/0 221.6.45.34 Mon Dec 9 09:38 - 11:41 (02:02)
```
-
\ No newline at end of file
diff --git a/command/lastb.md b/command/lastb.md
index ea6c1ee9fad..04a47dcfb81 100644
--- a/command/lastb.md
+++ b/command/lastb.md
@@ -7,13 +7,13 @@ lastb
**lastb命令** 用于显示用户错误的登录列表,此指令可以发现系统的登录异常。单独执行lastb命令,它会读取位于`/var/log`目录下,名称为btmp的文件,并把该文件内容记录的登入失败的用户名单,全部显示出来。
-### 语法
+### 语法
```shell
lastb(选项)(参数)
```
-### 选项
+### 选项
```shell
-a:把从何处登入系统的主机名称或ip地址显示在最后一行;
@@ -24,12 +24,12 @@ lastb(选项)(参数)
-x:显示系统关机,重新开机,以及执行等级的改变等信息。
```
-### 参数
+### 参数
* 用户名:显示中的用户的登录列表;
* 终端:显示从指定终端的登录列表。
-### 实例
+### 实例
首次运行lastb命令会报下的错误:
@@ -61,4 +61,3 @@ admin ssh:notty 129.171.193.99 Mon Dec 16 16:52 - 16:52 (00:00)
```
-
\ No newline at end of file
diff --git a/command/lastlog.md b/command/lastlog.md
index 4b00ba3f810..f871c86f823 100644
--- a/command/lastlog.md
+++ b/command/lastlog.md
@@ -9,13 +9,13 @@ lastlog
lastlog文件在每次有用户登录时被查询。可以使用lastlog命令检查某特定用户上次登录的时间,并格式化输出上次登录日志`/var/log/lastlog`的内容。它根据UID排序显示登录名、端口号(tty)和上次登录时间。如果一个用户从未登录过,lastlog显示` **Never logged** `。注意需要以root身份运行该命令。
-### 语法
+### 语法
```shell
lastlog(选项)
```
-### 选项
+### 选项
```shell
-b<天数>:显示指定天数前的登录信息;
@@ -24,7 +24,7 @@ lastlog(选项)
-u<用户名>:显示指定用户的最近登录信息。
```
-### 实例
+### 实例
```shell
lastlog
@@ -56,4 +56,3 @@ mysql **Never logged in**
```
-
\ No newline at end of file
diff --git a/command/ld.md b/command/ld.md
index 63bc33da2a9..47146bd236e 100644
--- a/command/ld.md
+++ b/command/ld.md
@@ -7,27 +7,27 @@ ld
**ld命令** 是GNU的连接器,将目标文件连接为可执行程序。
-### 语法
+### 语法
```shell
ld(选项)(参数)
ld [options] objfile ...
```
-### 选项
+### 选项
```shell
-o:指定输出文件名;
-e:指定程序的入口符号。
```
-### 参数
+### 参数
目标文件:指定需要连接的目标文件。
### 实例
-这告诉ld通过将文件“/lib/crt0.o”与“hello.o”和库“libc.a”链接起来,生成一个名为output的文件,该文件将来自标准搜索目录。
+这告诉ld通过将文件 `/lib/crt0.o` 与 `hello.o` 和库 `libc.a` 链接起来,生成一个名为 `output` 的文件,该文件将来自标准搜索目录。
```shell
ld -o | |