Black-Gold 6 years ago
parent a6b19206d8
commit 9713e79f90

@ -9,6 +9,3 @@ def index():
if __name__ == '__main__':
app.run()

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

@ -1,26 +1,46 @@
# awk
# **awk**
## 说明
**awk** awk的基本功能是在文件中搜索包含一个或多个模式的行或其他文本单元。当一行与其中一个模式匹配时将对该行执行特殊操作。 awk中的程序与大多数其他语言中的程序不同因为awk程序是“数据驱动的”您描述要使用的数据然后在找到时执行的操作。大多数其他语言都是“程序性的”。您必须详细描述该计划要采取的每个步骤。使用过程语言时通常很难清楚地描述程序将处理的数据。出于这个原因awk程序通常易于读写。
## 语法形式
```sh
awk [options] 'script' var=value file(s)
awk [options] -f scriptfile var=value file(s)
```
## 常用命令选项
***-F fs   *** fs指定输入分隔符fs可以是字符串或正则表达式如-F:
***-v var=value   *** 赋值一个用户定义变量将外部变量传递给awk
***-f scripfile  *** 从脚本文件中读取awk命令
***-m[fr] val   *** 对val值设置内在限制-mf选项限制分配给val的最大块数目-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能在标准awk中不适用。
## 模式
模式可以是以下任意一个:
**awk** awk的基本功能是在文件中搜索包含一个或多个模式的行或其他文本单元。当一行与其中一个模式匹配时将对该行执行特殊操作。 awk中的程序与大多数其他语言中的程序不同因为awk程序是“数据驱动的”您描述要使用的数据然后在找到时执行的操作。大多数其他语言都是“程序性的”。您必须详细描述该计划要采取的每个步骤。使用过程语言时通常很难清楚地描述程序将处理的数据。出于这个原因awk程序通常易于读写
## 选项
```info
Usage: awk [POSIX or GNU style options] -f progfile [--] file ...
Usage: awk [POSIX or GNU style options] [--] 'program' file ...
POSIX options:GNU long options: (standard)
-f progfile --file=progfile # 从脚本文件中读取awk命令
-F fs --field-separator=fs # fs指定输入分隔符fs可以是字符串或正则表达式
-v var=val --assign=var=val # 赋值一个用户定义变量将外部变量传递给awk
Short options:GNU long options: (extensions)
-b --characters-as-bytes
-c --traditional
-C --copyright
-d[file] --dump-variables[=file]
-e 'program-text' --source='program-text'
-E file --exec=file
-g --gen-pot
-L [fatal] --lint[=fatal]
-n --non-decimal-data
-N --use-lc-numeric
-O --optimize
-p[file] --profile[=file]
-P --posix
-r --re-interval
-S --sandbox
-t --lint-old
To report bugs, see node `Bugs' in `gawk.info', which is
section `Reporting Problems and Bugs' in the printed version.
gawk is a pattern scanning and processing language.
By default it reads standard input and writes standard output
```
## pattern
pattern可以是以下任意一个
* /正则表达式/:使用通配符的扩展集。
* 关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试。
@ -38,19 +58,6 @@ awk [options] -f scriptfile var=value file(s)
## awk脚本基本结构
```sh
awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file
```
一个awk脚本通常由BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成这三个部分是可选的。任意一个部分都可以不出现在脚本中脚本通常是被** 单引号** 或** 双引号** 中,例如:
```sh
awk 'BEGIN{ i=0 } { i++ } END{ print i }' filename
awk "BEGIN{ i=0 } { i++ } END{ print i }" filename
```
## awk的工作原理
```sh
awk 'BEGIN{ commands } pattern{ commands } END{ commands }'
```
@ -65,10 +72,18 @@ awk 'BEGIN{ commands } pattern{ commands } END{ commands }'
**pattern语句块** 中的通用命令是最重要的部分它也是可选的。如果没有提供pattern语句块则默认执行`{ print }`即打印每一个读取到的行awk读取的每一行都会执行该语句块。
## 示例
一个awk脚本通常由BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成这三个部分是可选的。任意一个部分都可以不出现在脚本中脚本通常是被**单引号**或**双引号**中,例如:
```sh
awk 'BEGIN{ i=0 } { i++ } END{ print i }' filename
awk "BEGIN{ i=0 } { i++ } END{ print i }" filename
```
## 实例
```sh
echo -e "A line 1nA line 2" | awk 'BEGIN{ print "Start" } { print } END{ print "End" }'
输出:
Start
A line 1
A line 2
@ -79,14 +94,14 @@ End
```sh
echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1,var2,var3; }'
v1 v2 v3
输出:v1 v2 v3
```
双引号拼接使用:
```sh
echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1"="var2"="var3; }'
v1=v2=v3
输出:v1=v2=v3
```
{ }类似一个循环体会对文件中的每一行进行迭代通常变量初始化语句i=0以及打印文件头部的语句放入BEGIN语句块中将打印的结果等语句放在END语句块中。
@ -97,35 +112,32 @@ v1=v2=v3
可自定义变量变量可以是字符串或数值。输入字段的内容也可以分配给变量。为了更精确地控制输出格式而不是打印通常提供的输出格式请使用printf。 printf命令可用于指定每个项目使用的字段宽度以及数字的各种格式选择例如要使用的输出基数是否打印指数是否打印标记以及数字位数在小数点后打印。这是通过提供一个名为格式字符串的字符串来完成的该字符串控制打印其他参数的方式和位置。
```sh
** $n**当前记录的第n个字段比如n为1表示第一个字段n为2表示第二个字段。
** $0**这个变量包含执行过程中当前行的文本内容。
[N]**ARGC**命令行参数的数目。
[G]**ARGIND**命令行中当前文件的位置从0开始算
[N]**ARGV**包含命令行参数的数组。
[G]**CONVFMT**数字转换格式(默认值为%.6g)。
[P]**ENVIRON**环境变量关联数组。
[N]**ERRNO**最后一个系统错误的描述。
[G]**FIELDWIDTHS**字段宽度列表(用空格键分隔)。
[A]**FILENAME**当前输入文件的名。
[P]**FNR**同NR但相对于当前文件。
[A]**FS(fields separator)**字段分隔符(此变量预定义为一个或多个空格或制表符)。
[G]**IGNORECASE**如果为真,则进行忽略大小写的匹配。
[A]**NF**表示字段数,在执行过程中对应于当前的字段数。
[A]**NR(number of records)**表示记录数,在执行过程中对应于当前的行号。
[A]**OFMT**数字的输出格式(默认值是%.6g)。
[A]**OFS(output fields separator)**输出字段分隔符(默认值是一个空格)。
[A]**ORS(output record separator)**输出记录分隔符(默认值是一个换行符)。
[A]**RS**记录分隔符(默认是一个换行符)。
[N]**RSTART**由match函数所匹配的字符串的第一个位置。
[N]**RLENGTH**由match函数所匹配的字符串的长度。
[N]**SUBSEP**数组下标分隔符默认值是34
```
示例
FS示例
```sh
$n 当前记录的第n个字段比如n为1表示第一个字段n为2表示第二个字段
$0 这个变量包含执行过程中当前行的文本内容
[N] ARGC 命令行参数的数目
[G] ARGIND 命令行中当前文件的位置从0开始算
[N] ARGV 包含命令行参数的数组
[G] CONVFMT 数字转换格式(默认值为%.6g
[P] ENVIRON 环境变量关联数组
[N] ERRNO 最后一个系统错误的描述
[G] FIELDWIDTHS 字段宽度列表(用空格键分隔)
[A] FILENAME 当前输入文件的名
[P] FNR 同NR但相对于当前文件
[A] FS(fields separator) 字段分隔符(此变量预定义为一个或多个空格或制表符)
[G] IGNORECASE 如果为真,则进行忽略大小写的匹配
[A] NF 表示字段数,在执行过程中对应于当前的字段数
[A] NR(number of records) 表示记录数,在执行过程中对应于当前的行号
[A] OFMT 数字的输出格式(默认值是%.6g
[A] OFS(output fields separator) 输出字段分隔符(默认值是一个空格)
[A] ORS(output record separator) 输出记录分隔符(默认值是一个换行符)
[A] RS 记录分隔符(默认是一个换行符)
[N] RSTART 由match函数所匹配的字符串的第一个位置
[N] RLENGTH 由match函数所匹配的字符串的长度
[N] SUBSEP 数组下标分隔符默认值是34
```
```sh
# FS示例
awk FS变量用于设置每个记录的字段分割符其可以设置为任何单个字符或者正则表达式
FS可以更改任意次数会保留其值直到明确更改如果想更改字段分割符在阅读行之前更改固此改变会影响阅读的内容
@ -155,9 +167,8 @@ awk -F ':' '{print $3,$4;}' /etc/passwd
awk -F ':' 'BEGIN{OFS ="=";}{print $3,$4;}' /etc/passwd
```
awk RS示例记录分割符变量
```sh
# RS示例记录分割符变量
awk RS定义了一条线awk默认逐行读取。将信息存储在一个文件中每个记录由两个新行隔开每个字段用一个新行分割
打印姓名和第二行数字
@ -173,9 +184,6 @@ BEGIN {
}
awk -f student.awk student.txt
```
```sh
@ -185,78 +193,43 @@ Line No:2, No of fields:3 $0=line2 f4 f5 $1=line2 $2=f4 $3=f5
Line No:3, No of fields:3 $0=line3 f6 f7 $1=line3 $2=f6 $3=f7
```
使用`print $NF`可以打印出一行中的最后一个字段,使用`$(NF-1)`则是打印倒数第二个字段,其他以此类推:
```sh
# 使用`print $NF`可以打印出一行中的最后一个字段,使用`$(NF-1)`则是打印倒数第二个字段,其他以此类推:
echo -e "line1 f2 f3n line2 f4 f5" | awk '{print $NF}'
输出:
f3
f5
```
```sh
-------------------------------------------------------------
echo -e "line1 f2 f3n line2 f4 f5" | awk '{print $(NF-1)}'
输出:
f2
f4
```
打印每一行的第二和第三个字段:
```sh
awk '{ print $2,$3 }' filename
```
统计文件中的行数:
```sh
awk 'END{ print NR }' filename
```
以上命令只使用了END语句块在读入每一行的时awk会将NR更新为对应的行号当到达最后一行NR的值就是最后一行的行号所以END语句块中的NR就是文件的行数。
awk '{ print $2,$3 }' filename # 打印每一行的第二和第三个字段
awk 'END{ print NR }' filename # 统计文件中的行数
# 以上命令只使用了END语句块在读入每一行的时awk会将NR更新为对应的行号当到达最后一行NR的值就是最后一行的行号所以END语句块中的NR就是文件的行数。
一个每一行中第一个字段值累加的例子:
```sh
seq 5 | awk 'BEGIN{ sum=0; print "总和:" } { print $1"+"; sum+=$1 } END{ print "等于"; print sum }'
总和:
1+
2+
3+
4+
5+
等于
15
seq 5 | awk 'BEGIN{ sum=0; print "总和:" } { print $1"+"; sum+=$1 } END{ print "等于"; print sum }' # 一个每一行中第一个字段值累加的例子
```
## 将外部变量值传递给awk
借助** `-v`选项** 可以将外部值并非来自stdin传递给awk
```sh
# 借助-v选项可以将外部值并非来自stdin传递给awk
VAR=10000
echo | awk -v VARIABLE=$VAR '{ print VARIABLE }'
```
另一种传递外部变量方法:
```sh
# 另一种传递外部变量方法
var1="aaa"
var2="bbb"
echo | awk '{ print v1,v2 }' v1=$var1 v2=$var2
```
当输入来自于文件时使用:
```sh
awk '{ print v1,v2 }' v1=$var1 v2=$var2 filename
```
以上方法中变量之间用空格分隔作为awk的命令行参数跟随在BEGIN、{}和END语句块之后。
## 查找进程pid
awk '{ print v1,v2 }' v1=$var1 v2=$var2 filename # 当输入来自于文件时使用
# 以上方法中变量之间用空格分隔作为awk的命令行参数跟随在BEGIN、{}和END语句块之后。
```sh
netstat -antup | grep 7770 | awk '{ print $NF NR}' | awk '{ print $1}'
netstat -antup | grep 7770 | awk '{ print $NF NR}' | awk '{ print $1}' # 查找进程pid
```
## awk运算与判断
@ -273,23 +246,18 @@ netstat -antup | grep 7770 | awk '{ print $NF NR}' | awk '{ print $1}'
| ^** * | 求幂 |
| ++ -- | 增加或减少,作为前缀或后缀 |
例:
```sh
awk 'BEGIN{a="b";print a++,++a;}'
0 2
# 注意所有用作算术运算符进行操作操作数自动转为数值所有非数值都变为0
```
注意所有用作算术运算符进行操作操作数自动转为数值所有非数值都变为0
## 赋值运算符
| 运算符 | 描述 |
| ----- | ---- |
| = += -= *= /= %= ^=** = | 赋值语句 |
例:
```sh
a+=5; 等价于a=a+5; 其它同类
```
@ -301,8 +269,6 @@ a+=5; 等价于a=a+5; 其它同类
| `\|\|` | 逻辑或 |
| && | 逻辑与 |
例:
```sh
awk 'BEGIN{a=1;b=2;print (a>5 && b<=2),(a>5 || b<=2);}'
0 1
@ -314,8 +280,6 @@ awk 'BEGIN{a=1;b=2;print (a>5 && b<=2),(a>5 || b<=2);}'
| ----- | ---- |
| ~ ~! | 匹配正则表达式和不匹配正则表达式 |
例:
```sh
awk 'BEGIN{a="100testa";if(a ~ /^100*/){print "ok";}}'
ok
@ -327,15 +291,12 @@ ok
| ----- | ---- |
| < <= > >= != == | 关系运算符 |
例:
```sh
awk 'BEGIN{a=11;if(a >= 9){print "ok";}}'
ok
# 注意:> < 可以作为字符串比较也可以用作数值比较关键看操作数如果是字符串就会转换为字符串比较。两个都为数字才转为数值比较。字符串比较按照ASCII码顺序比较。
```
注意:> < 可以作为字符串比较也可以用作数值比较关键看操作数如果是字符串就会转换为字符串比较。两个都为数字才转为数值比较。字符串比较按照ASCII码顺序比较。
## 其它运算符
| 运算符 | 描述 |
@ -345,27 +306,18 @@ ok
| ?: | C条件表达式 |
| in | 数组中是否存在某键值 |
例:
```sh
awk 'BEGIN{a="b";print a=="b"?"ok":"err";}'
ok
```
awk 'BEGIN{a="b";print a=="b"?"ok":"err";}' # 输出ok
```sh
awk 'BEGIN{a="b";arr[0]="b";arr[1]="c";print (a in arr);}'
0
```
awk 'BEGIN{a="b";arr[0]="b";arr[1]="c";print (a in arr);}' # 输出0
```sh
awk 'BEGIN{a="b";arr[0]="b";arr["b"]="c";print (a in arr);}'
1
awk 'BEGIN{a="b";arr[0]="b";arr["b"]="c";print (a in arr);}' # 输出1
```
## 运算级优先级表
!级别越高越优先
级别越高越优先
* !级别越高越优先
* 级别越高越优先
## awk高级输入输出

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

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

@ -4,11 +4,10 @@
**echo命令** 用于在shell中打印shell变量的值或者直接输出指定的字符串。linux的echo命令在shell编程中极为常用, 在终端下打印变量value的时候也是常常用到的因此有必要了解下echo的用法echo命令的功能是在显示器上显示一段文字一般起到一个提示的作用。
## 描述
echo [SHORT-OPTION] ... [STRING]
echo LONG-OPTION
## 选项
echo [SHORT-OPTION] ... [STRING]
echo LONG-OPTION
使用`-e`选项时,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
* \a 发出警告声
@ -28,34 +27,20 @@
## 实例
用echo命令打印带有色彩的文字
```sh
echo "I live in `locale territory`" # 从locale数据库中展开信息
## 文字色
用echo命令打印带有色彩的文字
```sh
## 文字色:# 颜色码:重置=0黑色=30红色=31绿色=32黄色=33蓝色=34洋红=35青色=36白色=37
echo -e "\e[1;31mThis is red text\e[0m"
This is red text(粉红色字体)
```
* `\e[1;31m` 将颜色设置为红色
* `\e[0m` 将颜色重新置回
颜色码:重置=0黑色=30红色=31绿色=32黄色=33蓝色=34洋红=35青色=36白色=37
## 背景色:
```sh
## 背景色:# 颜色码:重置=0黑色=40红色=41绿色=42黄色=43蓝色=44洋红=45青色=46白色=47
echo -e "\e[1;42mGreed Background\e[0m"
Greed Background(绿色背景)
```
颜色码:重置=0黑色=40红色=41绿色=42黄色=43蓝色=44洋红=45青色=46白色=47
## 文字闪动:
```sh
## 文字闪动:# 红色数字处还有其他数字参数0 关闭所有属性、1 设置高亮度加粗、4 下划线、5 闪烁、7 反显、8 消隐
echo -e "\033[37;31;5mMySQL Server Stop...\033[39;49;0m"
MySQL Server Stop...(红色字体并闪烁)
```
红色数字处还有其他数字参数0 关闭所有属性、1 设置高亮度加粗、4 下划线、5 闪烁、7 反显、8 消隐

@ -1,136 +1,142 @@
find
===
# **find**
```txt
使用find和xargs可能需要系统查找具有某一特征的文件例如文件权限、文件属主、文件长度、文件类型等出于安全性考虑一般系统管理任务只是为了找出一个知道存放在哪里的文件find可以遍历当前目录甚至整个文件系统查找文件或目录。即使系统中含有网络文件系统(NFS)find命令在该文件系统中同样有效只要你具有相应的权限。
```
## 补充说明
## 说明
**find命令** 用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时不设置任何参数则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
在运行一个非常消耗资源的find命令时很多人都倾向于把它放在后台执行因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)。
### 语法
```sh
find(选项)(参数)
## 语法
```info
用法: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
默认路径为当前目录;默认表达式为 -print
表达式可能由下列成份组成:操作符、选项、测试表达式以及动作:
操作符 (优先级递减;未做任何指定时默认使用 -and):
( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2
EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2
positional options (always true): -daystart -follow -regextype
normal options (always true, specified before other expressions):
-depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf
--version -xautofs -xdev -ignore_readdir_race -noignore_readdir_race
比较测试 (N 可以是 +N 或 -N 或 N): -amin N -anewer FILE -atime N -cmin N
-cnewer 文件 -ctime N -empty -false -fstype 类型 -gid N -group 名称
-ilname 匹配模式 -iname 匹配模式 -inum N -ipath 匹配模式 -iregex 匹配模式
-links N -lname 匹配模式 -mmin N -mtime N -name 匹配模式 -newer 文件
-nouser -nogroup -path 匹配模式 -perm [+-]访问模式 -regex 匹配模式
-readable -writable -executable
-wholename 匹配模式 -size N[bcwkMG] -true -type [bcdpflsD] -uid N
-used N -user 用户名 -xtype [bcdpfls]
-context 文本
操作: -delete -print0 -printf 格式 -fprintf 文件 格式 -print
-fprint0 文件 -fprint 文件 -ls -fls 文件 -prune -quit
-exec 命令 ; -exec 命令 {} + -ok 命令
-execdir 命令 ; -execdir 命令 {} + -okdir 命令
find的使用格式如下
$ find <指定目录> <指定条件> <指定动作>
- <指定目录> 所要搜索的目录及其所有子目录。默认为当前目录。
- <指定条件> 所要搜索的文件的特征。
- <指定动作> 对搜索结果进行特定的处理。
find <指定目录> <指定条件> <指定动作>
- <指定目录> 所要搜索的目录及其所有子目录。默认为当前目录。
- <指定条件> 所要搜索的文件的特征。
- <指定动作> 对搜索结果进行特定的处理。
find 命令格式:
1、find命令的一般形式为
2、find命令的参数
3、find命令选项
4、使用exec或ok来执行shell命令
```
```sh
Find命令的一般形式为
find pathname -options [-print -exec -ok]
该命令的参数解释:
pathname find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print find命令将匹配的文件输出到标准输出。
-exec find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'comm-
and'{}\;,注意{}和\;之间的空格。
-ok和-exec的作用相同只不过以一种更为安全的模式来执行该参数所给出的shell命令在执行每一个命令之前都会给出提示让用户来确定是否执行。
```
Find命令的一般形式为find pathname -options [-print -exec -ok]
### 选项
该命令的参数解释:
pathname find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print find命令将匹配的文件输出到标准输出。
-exec find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'comm-and'{}\;,注意{}和\;之间的空格。
-ok和-exec的作用相同只不过以一种更为安全的模式来执行该参数所给出的shell命令在执行每一个命令之前会给出提示让用户来确定是否执行。
```
## 选项
```info
-amin<分钟> 查找在指定时间曾被存取过的文件或目录,单位以分钟计算;
-anewer<参考文件或目录> 查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录;
-atime<24> 查找在指定时间曾被存取过的文件或目录单位以24小时计算
-cmin<分钟> 查找在指定时间之时被更改过的文件或目录;
-cnewer<参考文件或目录> 查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
-ctime<24> 查找在指定时间之时被更改的文件或目录单位以24小时计算
-daystart 从本日开始计算时间;
-depth 从指定目录下最深层的子目录开始查找;
-empty 寻找文件大小为0 Byte的文件或目录下没有任何子目录或文件的空目录
-exec<执行指令> 假设find指令的回传值为True就执行该指令
-false 将find指令的回传值皆设为False
-fls<列表文件> 此参数的效果和指定“-ls”参数类似但会把结果保存为指定的列表文件
-follow 排除符号连接如果find命令遇到符号链接文件就跟踪至链接所指向的文件。(常用选项)
-fprint<列表文件> 此参数的效果和指定“-print”参数类似但会把结果保存成指定的列表文件
-fprint0<列表文件> 此参数的效果和指定“-print0”参数类似但会把结果保存成指定的列表文件
-fprintf<列表文件><输出格式> 此参数的效果和指定“-printf”参数类似但会把结果保存成指定的列表文件
-fstype<文件系统类型> 只寻找该文件系统类型下的文件或目录;(常用选项)
-gid<群组识别码> 查找符合指定之群组识别码的文件或目录;
-group<群组名称> 查找符合指定之群组名称的文件或目录;(常用选项)
-ilname<范本样式> 此参数的效果和指定“-lname”参数类似但忽略字符大小写的差别
-iname<范本样式> 此参数的效果和指定“-name”参数类似但忽略字符大小写的差别
-inum<inode> 查找符合指定的inode编号的文件或目录
-ipath<范本样式> 此参数的效果和指定“-path”参数类似但忽略字符大小写的差别
-iregex<范本样式> 此参数的效果和指定“-regexe”参数类似但忽略字符大小写的差别
-links<连接数目> 查找符合指定的硬连接数目的文件或目录;
-iname<范本样式> 指定字符串作为寻找符号连接的范本样式;
-ls 假设find指令的回传值为Ture就将文件或目录名称列出到标准输出
-maxdepth<目录层级> 设置最大目录层级;
-mindepth<目录层级> 设置最小目录层级;
-mmin<分钟> 查找在指定时间曾被更改过的文件或目录,单位以分钟计算;
-mount 此参数的效果和指定“-xdev”相同在查找文件时不跨越文件系统mount点。(常用选项)
-mtime<24> 查找在指定时间曾被更改过的文件或目录单位以24小时计算-mtime-n+n按照文件的更改时间来查找文件-n表示文件更改时间距现在n天以内+n表示文件更改时间距现在n天以前。(常用选项)
-name<范本样式> 指定字符串作为寻找文件或目录的范本样式;(常用选项)
-newer<参考文件或目录> 查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;-newerfile1!file2 查找更改时间比文件file1新但比文件file2旧的文件。(常用选项)
-nogroup 找出不属于本地主机群组识别码的文件或目录;(常用选项)
-noleaf 不去考虑目录至少需拥有两个硬连接存在;
-nouser 找出不属于本地主机用户识别码的文件或目录;(常用选项)
-ok<执行指令> 此参数的效果和指定“-exec”类似但在执行指令之前会先询问用户若回答“y”或“Y”则放弃执行命令
-path<范本样式> 指定字符串作为寻找目录的范本样式;
-perm<权限数值> 查找符合指定的权限数值的文件或目录;(常用选项)
-print 假设find指令的回传值为Ture就将文件或目录名称列出到标准输出。格式为每列一个名称每个名称前皆有“./”字符串;
-print0 假设find指令的回传值为Ture就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行
-printf<输出格式> 假设find指令的回传值为Ture就将文件或目录名称列出到标准输出。格式可以自行指定
-prune 不寻找字符串作为寻找文件或目录的范本样式;如果同时使用了-depth选项那么-prune选项将被find命令忽略。(常用选项)
-regex<范本样式> 指定字符串作为寻找文件或目录的范本样式;
-size<文件大小> 查找符合指定的文件大小的文件;
-true 将find指令的回传值皆设为True
-type<文件类型> 只寻找符合指定的文件类型的文件;(常用选项)
```sh
-amin<分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算;
-anewer<参考文件或目录>:查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录;
-atime<24>查找在指定时间曾被存取过的文件或目录单位以24小时计算
-cmin<分钟>:查找在指定时间之时被更改过的文件或目录;
-cnewer<参考文件或目录>查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
-ctime<24>查找在指定时间之时被更改的文件或目录单位以24小时计算
-daystart从本日开始计算时间
-depth从指定目录下最深层的子目录开始查找
-empty寻找文件大小为0 Byte的文件或目录下没有任何子目录或文件的空目录
-exec<执行指令>假设find指令的回传值为True就执行该指令
-false将find指令的回传值皆设为False
-fls<列表文件>:此参数的效果和指定“-ls”参数类似但会把结果保存为指定的列表文件
-follow排除符号连接如果find命令遇到符号链接文件就跟踪至链接所指向的文件。(常用选项)
-fprint<列表文件>:此参数的效果和指定“-print”参数类似但会把结果保存成指定的列表文件
-fprint0<列表文件>:此参数的效果和指定“-print0”参数类似但会把结果保存成指定的列表文件
-fprintf<列表文件><输出格式>:此参数的效果和指定“-printf”参数类似但会把结果保存成指定的列表文件
-fstype<文件系统类型>:只寻找该文件系统类型下的文件或目录;(常用选项)
-gid<群组识别码>:查找符合指定之群组识别码的文件或目录;
-group<群组名称>:查找符合指定之群组名称的文件或目录;(常用选项)
-help或——help在线帮助
-ilname<范本样式>:此参数的效果和指定“-lname”参数类似但忽略字符大小写的差别
-iname<范本样式>:此参数的效果和指定“-name”参数类似但忽略字符大小写的差别
-inum<inode>查找符合指定的inode编号的文件或目录
-ipath<范本样式>:此参数的效果和指定“-path”参数类似但忽略字符大小写的差别
-iregex<范本样式>:此参数的效果和指定“-regexe”参数类似但忽略字符大小写的差别
-links<连接数目>:查找符合指定的硬连接数目的文件或目录;
-iname<范本样式>:指定字符串作为寻找符号连接的范本样式;
-ls假设find指令的回传值为Ture就将文件或目录名称列出到标准输出
-maxdepth<目录层级>:设置最大目录层级;
-mindepth<目录层级>:设置最小目录层级;
-mmin<分钟>:查找在指定时间曾被更改过的文件或目录,单位以分钟计算;
-mount此参数的效果和指定“-xdev”相同在查找文件时不跨越文件系统mount点。(常用选项)
-mtime<24>查找在指定时间曾被更改过的文件或目录单位以24小时计算-mtime-n+n按照文件的更改时间来查找文件-n表示文件更改时间距现在n天以内+n表示文件更改时间距现在n天以前。(常用选项)
-name<范本样式>:指定字符串作为寻找文件或目录的范本样式;(常用选项)
-newer<参考文件或目录>:查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;-newerfile1!file2查找更改时间比文件file1新但比文件file2旧的文件。(常用选项)
-nogroup找出不属于本地主机群组识别码的文件或目录(常用选项)
-noleaf不去考虑目录至少需拥有两个硬连接存在
-nouser找出不属于本地主机用户识别码的文件或目录(常用选项)
-ok<执行指令>:此参数的效果和指定“-exec”类似但在执行指令之前会先询问用户若回答“y”或“Y”则放弃执行命令
-path<范本样式>:指定字符串作为寻找目录的范本样式;
-perm<权限数值>:查找符合指定的权限数值的文件或目录;(常用选项)
-print假设find指令的回传值为Ture就将文件或目录名称列出到标准输出。格式为每列一个名称每个名称前皆有“./”字符串;
-print0假设find指令的回传值为Ture就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行
-printf<输出格式>假设find指令的回传值为Ture就将文件或目录名称列出到标准输出。格式可以自行指定
-prune不寻找字符串作为寻找文件或目录的范本样式;如果同时使用了-depth选项那么-prune选项将被find命令忽略。(常用选项)
-regex<范本样式>:指定字符串作为寻找文件或目录的范本样式;
-size<文件大小>:查找符合指定的文件大小的文件;
-true将find指令的回传值皆设为True
-type<文件类型>:只寻找符合指定的文件类型的文件;(常用选项)
诸如:
b-块设备文件。
d-目录。
c-字符设备文件。
p-管道文件。
l-符号链接文件。
f-普通文件。
-uid<用户识别码>:查找符合指定的用户识别码的文件或目录;
-used<日数>:查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算;
b-块设备文件
d-目录
c-字符设备文件
p-管道文件
l-符号链接文件
f-普通文件
-uid<用户识别码>:查找符合指定的用户识别码的文件或目录
-used<日数>:查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算
-user<拥有者名称>:查找符和指定的拥有者名称的文件或目录;(常用选项)
-version或——version显示版本信息
-xdev将范围局限在先行的文件系统中
-xtype<文件类型>:此参数的效果和指定“-type”参数类似差别在于它针对符号连接检查。
-xdev将范围局限在先行的文件系统中
-xtype<文件类型>:此参数的效果和指定“-type”参数类似差别在于它针对符号连接检查
```
### 参数
起始目录:查找文件的起始目录。
### 实例
## 实例
```sh
# 当前目录搜索所有文件,文件内容 包含 “140.206.111.111” 的内容
find . -type f -name "*" | xargs grep "140.206.111.111" -print
```
搜索当前目录中所有文件名以my开头的文件并显示它们的详细信息。
find . -name 'my*' -ls
搜索当前目录中所有过去10分钟中更新过的普通文件。如果不加-type f参数则搜索普通文件+特殊文件+目录。
find . -type f -mmin -10
find . -type f -name "*" | xargs grep "test" # 当前目录搜索所有文件,文件内容包含 “test” 的内容
find . -name "my*" -ls # 搜索当前目录中所有文件名以my开头的文件并显示它们的详细信息
find . -type f -mmin -10 # 搜索当前目录中所有过去10分钟中更新过的普通文件。如果不加-type f参数则搜索普通文件+特殊文件+目录
#### 根据文件或者正则表达式进行匹配
列出当前目录及子目录下所有文件和文件夹
```sh
find .
```
## 根据文件或者正则表达式进行匹配
在`/home`目录下查找以.txt结尾的文件名
@ -210,13 +216,13 @@ find . -type 类型参数
类型参数列表:
* **f** 普通文件
* **l** 符号连接
* **d** 目录
* **c** 字符设备
* **b** 块设备
* **s** 套接字
* **p** Fifo
* f 普通文件
* l 符号连接
* d 目录
* c 字符设备
* b 块设备
* s 套接字
* p Fifo
#### 基于目录深度搜索
@ -426,8 +432,6 @@ find / -type f -perm +6000 -exec ls -lh {} \;
两种方法的区别在于前者使用了Shell的命令替换操作 $() 符号或者反撇号 ``只有在find命令执行完毕后才能看到结果而后一种方法则每找到一条结果就立即显示出来了
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->
#### 暂未整理一
```sh
@ -1248,4 +1252,11 @@ $ find / -name "CON.FILE" -depth -print
$ find . -name "*.XC" -mount -print
find -name '*.[ch]' | xargs grep -E 'expr' # 在当前目录及其子目录下所有.c和.h文件中寻找'expr'
find -type f -print0 | xargs -r0 grep -F 'example' # 在当前目录及其子目录中的常规文件中查找字符串'example'
find -maxdepth 1 -type f | xargs grep -F 'example' # 在当前目录下查找字符串'example'
find -maxdepth 1 -type d | while read dir; do echo $dir; echo cmd2; done # 对每一个找到的文件执行多个命令使用while循环
find -type f ! -perm -444 # 寻找所有不可读的文件;对网站有用
find -type d ! -perm -111 # 寻找不可访问的目录;对网站有用
```

@ -1,10 +1,8 @@
# grep
强大的文本搜索工具
# **grep**
## 说明
**grep** global search regular expression(RE) and print out the line全面搜索正则表达式并把行打印出来是一种强大的文本搜索工具它能使用正则表达式搜索文本并把匹配的行打印出来。用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,使用上十分灵活。
**grep**(global search regular expression(RE))and print out the line全面搜索正则表达式并把行打印出来是一种强大的文本搜索工具它能使用正则表达式搜索文本并把匹配的行打印出来。用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,使用上十分灵活。
grep的工作方式是这样的它在一个或多个文件中搜索字符串模板。如果模板包括空格则必须被引用模板后的所有字符串被看作文件名。搜索的结果被送到屏幕不影响原文件内容。
@ -32,7 +30,7 @@ grep可用于shell脚本因为grep通过返回一个状态值来说明搜索
杂项:
-s, --no-messages 抑制错误消息
-v, --invert-match 查看没有被匹配的行
-v, --invert-match 查看没有被匹配的行
-V, --version display version information and exit
--help display this help text and exit
@ -65,8 +63,8 @@ grep可用于shell脚本因为grep通过返回一个状态值来说明搜索
--exclude-from=FILE skip files matching any file pattern from FILE
--exclude-dir=PATTERN directories that match PATTERN will be skipped.
-L, --files-without-match print only names of FILEs containing no match
-l, --files-with-matches 只打印包含匹配的文件的名称
-c, --count 只打印每个文件匹配字符串行的数量
-l, --files-with-matches 只打印包含匹配的文件的名称
-c, --count 只打印每个文件匹配字符串行的数量
-T, --initial-tab make tabs line up (if needed)
-Z, --null print 0 byte after FILE name
@ -87,279 +85,109 @@ grep可用于shell脚本因为grep通过返回一个状态值来说明搜索
egrepgrep -Efgrepgrep -F
直接使用egrep或是fgrep均已不可行了。
egrep是grep的扩展支持更多的re元字符 fgrep就是fixed grep或fast grep它们把所有的字母都看作单词也就是说正则表达式中的元字符表示回其自身的字面意义不再特殊。
若FILE 为 -将读取标准输入。不带FILE读取当前目录除非命令行中指定了-r 选项。
若FILE 为 -将读取标准输入。不带FILE读取当前目录除非命令行中指定了-r选项。
如果少于两个FILE 参数,就要默认使用-h 参数。
如果有任意行被匹配,那退出状态为 0否则为 1
如果有错误产生,且未指定 -q 参数,那退出状态为 2。
```
### 规则表达式
```bash
^ # 锚定行的开始 如:'^grep'匹配所有以grep开头的行。
$ # 锚定行的结束 如:'grep$'匹配所有以grep结尾的行。
\ # 转义符
. # 匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符然后是p。
* # 匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。
.* # 一起用代表任意字符。
[] # 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
[^] # 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头紧跟rep的行。
\(..\) # 标记匹配字符,如'\(love\)'love被标记为1。
\< # 锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。
\> # 锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。
x\{m\} # 重复字符xm次'0\{5\}'匹配包含5个o的行。
x\{m,\} # 重复字符x,至少m次'o\{5,\}'匹配至少有5个o的行。
x\{m,n\} # 重复字符x至少m次不多于n次'o\{5,10\}'匹配5--10个o的行。
\w # 匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符然后是p。
\W # \w的反置形式匹配一个或多个非单词字符如点号句号等。
\b # 单词锁定符,如: '\bgrep\b'只匹配grep。
```
## POSIX字符类
## grep可用的规则表达式
```sh
[:upper:] 表示大写字母[A-Z]
[:lower:] 表示小写字母[a-z]
[:digit:] 表示阿拉伯数字[0-9]
[:alnum:] 表示大小写字母和阿拉伯数字[0-9a-zA-Z]
[:space:] 表示空格或tab键
[:alpha:] 表示大小写字母[a-zA-Z]
[:cntrl:] 表示Ctrl键
[:graph:]或[:print:] 表示ASCII码33-126之间的字符
搜索以大写字母开头的行
grep ^[[:upper:]] test.txt
POSIX字符类作为模式的用法都类似使用时注意用方括号将POSIX字符括起来就行了
精确匹配单词the的行
grep "\<the\>" test.txt或grep -w the test.txt
或|字符grep需要加上-E选项才能支持使用它
匹配test.txt文件有zh或en的行
grep -E "zh|en" test.txt
grep标准grep命令支持基本正则表达式
egrep扩展grep命令支持基本和扩展正则表达式与grep -E等价
fgrep快速grep命令不支持正则表达式与grep -F等价
^ # 锚定行的开始 如:'^grep'匹配所有以grep开头的行
$ # 锚定行的结束 如:'grep$'匹配所有以grep结尾的行。
\ # 转义符
. # 匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符然后是p
* # 匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行
.* # 一起用代表任意字符
[] # 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep
[^] # 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头紧跟rep的行
\(..\) # 标记匹配字符,如'\(love\)'love被标记为1
\< # 锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行
\> # 锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行
x\{m\} # 重复字符xm次'0\{5\}'匹配包含5个o的行
x\{m,\} # 重复字符x,至少m次'o\{5,\}'匹配至少有5个o的行
x\{m,n\} # 重复字符x至少m次不多于n次'o\{5,10\}'匹配5--10个o的行
\w # 匹配文字和数字字符,即[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符然后是p
\W # \w的反置形式匹配一个或多个非单词字符如点号句号等
\b # 单词锁定符,如: '\bgrep\b'只匹配grep。
# POSIX字符类
[:upper:] # 表示大写字母[A-Z]
[:lower:] # 表示小写字母[a-z]
[:digit:] # 表示阿拉伯数字[0-9]
[:alnum:] # 表示大小写字母和阿拉伯数字[0-9a-zA-Z]
[:space:] # 表示空格或tab键
[:alpha:] # 表示大小写字母[a-zA-Z]
[:cntrl:] # 表示Ctrl键
[:graph:]或[:print:] # 表示ASCII码33-126之间的字符
grep 标准grep命令支持基本正则表达式
egrep 扩展grep命令支持基本和扩展正则表达式与grep -E等价
fgrep 快速grep命令不支持正则表达式与grep -F等价
```
## grep命令常见用法
显示系统上使用Bash shell登录的所有用户
grep bash /etc/passwd | cut -d: -f1
```sh
grep bash /etc/passwd | cut -d: -f1 # 显示系统上使用Bash shell登录的所有用户
ls -algG --time-style=+%s | grep ^[^d] | awk -vlimit=$(date +%s -d '10 hours ago') '$4 > limit { print substr($0, index($0, $4) + length($4) + 1) }' # 搜索目录下十小时前更改的文件不包括文件夹只使用grep实现。(更好的方式用find实现)
grep ^[[:upper:]] test.txt # 搜索test.txt以大写字母开头的行POSIX字符类作为模式的用法都类似使用时注意用方括号将POSIX字符括起来就行了
搜索目录下十小时前更改的文件不包括文件夹只使用grep实现。(更好的方式用find实现)
ls -algG --time-style=+%s | grep ^[^d] | awk -vlimit=$(date +%s -d '10 hours ago') '$4 > limit { print substr($0, index($0, $4) + length($4) + 1) }'
# 精确匹配单词the的行
grep "\<the\>" test.txt
grep -w the test.txt
递归搜索含有某个关键字的文件目录
grep -iHR "关键字" ./*
grep -E "zh|en" test.txt # | (或)字符,grep需要加上-E选项才能支持使用它,例匹配test.txt文件有zh或en的行
grep -iHR "关键字" ./* # 递归搜索含有某个关键字的文件目录
-i 对要搜索的字符忽略大小写
-H 同时打印包括搜索字符串的文件名
-R 递归搜索,当指定的搜索路径是一个目录时,加上-R的搜索会执行递归搜索
搜所文件test.txt以/字符开始,中间任意四个字符,第六个字符为/的行
grep ^/..../ test.txt # 搜索文件test.txt以/字符开始,中间任意四个字符,第六个字符为/的行
grep ^/..../ test.txt
在文件中搜索一个单词,命令会返回一个包含 **“match_pattern”** 的文本行:
```
# 在文件中搜索一个单词,命令会返回一个包含 **“match_pattern”** 的文本行
grep match_pattern file_name
grep "match_pattern" file_name
```
在多个文件中查找:
```
grep "match_pattern" file_1 file_2 file_3 ...
```
输出除之外的所有行 **-v** 选项:
```
grep -v "match_pattern" file_name
```
标记匹配颜色 **--color=auto** 选项:
```
grep "match_pattern" file_name --color=auto
```
使用正则表达式 **-E** 选项:
grep "match_pattern" file_1 file_2 file_3 ... # 在多个文件中查找match_pattern
grep -v "match_pattern" file_name # 输出除之外的所有行-v选项
grep "match_pattern" file_name --color=auto # 标记匹配颜色--color=auto选项
```
# 使用正则表达式-E选项
grep -E "[1-9]+"
egrep "[1-9]+"
```
只输出文件中匹配到的部分 **-o** 选项:
```
# 只输出文件中匹配到的部分-o选项
echo this is a test line. | grep -o -E "[a-z]+\."
line.
echo this is a test line. | egrep -o "[a-z]+\."
line.
```
统计文件或者文本中包含匹配字符串的行数 **-c** 选项:
```
grep -c "text" file_name
```
grep -c "text" file_name # 统计文件或者文本中包含匹配字符串的行数-c选项
输出包含匹配字符串的行数 **-n** 选项:
```
# 输出包含匹配字符串的行数-n选项
grep "text" -n file_name
cat file_name | grep "text" -n
grep "text" -n file_1 file_2 # 多个文件
#多个文件
grep "text" -n file_1 file_2
```
打印样式匹配所位于的字符或字节偏移:
```
echo gun is not unix | grep -b -o "not"
7:not
#一行中字符串的字符便宜是从该行的第一个字符开始计算起始值为0。选项 **-b -o** 一般总是配合使用。
```
搜索多个文件并查找匹配文本在哪些文件中:
```
grep -l "text" file1 file2 file3...
```
### grep递归搜索文件
在多级目录中对文本进行递归搜索:
echo gun is not unix | grep -b -o "not" # 打印样式匹配所位于的字符或字节偏移;一行中字符串的字符便宜是从该行的第一个字符开始计算起始值为0。选项-b -o一般总是配合使用
```
grep "text" . -r -n
# .表示当前目录。
```
grep -l "text" file1 file2 file3... # 搜索多个文件并查找匹配文本在哪些文件中
grep "text" . -r -n # 在多级目录中对文本进行递归搜索 .表示当前目录。
忽略匹配样式中的字符大小写:
# 在grep搜索结果中包括或者排除指定文件
grep "main()" . -r --include *.{php,html} # 只在目录中所有的.php和.html文件中递归搜索字符"main()"
grep "main()" . -r --exclude "README" # 在搜索结果中排除所有README文件
grep "main()" . -r --exclude-from filelist # 在搜索结果中排除filelist文件列表里的文件
```
echo "hello world" | grep -i "HELLO"
hello
```
选项 **-e** 制动多个匹配样式:
```
echo this is a text line | grep -e "is" -e "line" -o
is
line
grep "aaa" file* -lZ | xargs -0 rm # 使用0值字节后缀的grep与xargs,删除包含aaa字符文件名以file开头的文件grep输出用-Z选项来指定以0值字节作为终结符文件名\0xargs -0 读取输入并用0值字节终结符分隔文件名然后删除匹配文件-Z通常和-l结合使用
grep -q "test" filename # 不会输出任何信息如果命令运行成功返回0失败则返回非0值。一般用于条件测试。
#也可以使用 **-f** 选项来匹配多个样式,在样式文件中逐行写出需要匹配的字符。
cat patfile
aaa
bbb
echo aaa bbb ccc ddd eee | grep -f patfile -o
```
在grep搜索结果中包括或者排除指定文件
```
#只在目录中所有的.php和.html文件中递归搜索字符"main()"
grep "main()" . -r --include *.{php,html}
#在搜索结果中排除所有README文件
grep "main()" . -r --exclude "README"
#在搜索结果中排除filelist文件列表里的文件
grep "main()" . -r --exclude-from filelist
```
使用0值字节后缀的grep与xargs
```bash
# 测试文件:
echo "aaa" > file1
echo "bbb" > file2
echo "aaa" > file3
grep "aaa" file* -lZ | xargs -0 rm
#执行后会删除file1和file3grep输出用-Z选项来指定以0值字节作为终结符文件名\0xargs -0 读取输入并用0值字节终结符分隔文件名然后删除匹配文件-Z通常和-l结合使用。
```
grep静默输出
```bash
grep -q "test" filename
# 不会输出任何信息如果命令运行成功返回0失败则返回非0值。一般用于条件测试。
```
打印出匹配文本之前或者之后的行:
```bash
# 显示匹配某个结果之后的3行使用 -A 选项:
seq 10 | grep "example" -A 3
# 打印出匹配文本之前或者之后的行
seq 10 | grep "example" -A 3 # 显示匹配某个结果之后的3行使用 -A 选项
grep -A 3 -i "example" demo_text
# 显示匹配某个结果之前的3行使用 -B 选项:
seq 10 | grep "5" -B 3
2
3
4
5
# 显示匹配某个结果的前三行和后三行,使用 -C 选项:
seq 10 | grep "5" -C 3
2
3
4
5
6
7
8
# 如果匹配结果有多个,会用“--”作为各匹配结果之间的分隔符:
echo -e "a\nb\nc\na\nb\nc" | grep a -A 1
a
b
--
a
b
```
seq 10 | grep "5" -B 3 # 显示匹配某个结果之前的3行使用 -B 选项
seq 10 | grep "5" -C 3 # 显示匹配某个结果的前三行和后三行,使用 -C 选项
echo -e "a\nb\nc\na\nb\nc" | grep a -A 1 # 如果匹配结果有多个,会用“--”作为各匹配结果之间的分隔符
```

@ -0,0 +1,128 @@
ifconfig
===
配置和显示Linux系统网卡的网络参数
## 补充说明
**ifconfig命令** 被用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置的网卡信息在网卡重启后机器重启后配置就不存在。要想将上述的配置信息永远的存的电脑里那就要修改网卡的配置文件了。
### 语法
```
ifconfig(参数)
```
### 参数
```
add<地址>设置网络设备IPv6的ip地址
del<地址>删除网络设备IPv6的IP地址
down关闭指定的网络设备
<hw<><硬件地址>:设置网络设备的类型与硬件地址;
io_addr<I/O>设置网络设备的I/O地址
irq<IRQ>设置网络设备的IRQ
media<网络媒介类型>:设置网络设备的媒介类型;
mem_start<内存地址>:设置网络设备在主内存所占用的起始地址;
metric<数目>:指定在计算数据包的转送次数时,所要加上的数目;
mtu<字节>设置网络设备的MTU
netmask<子网掩码>:设置网络设备的子网掩码;
tunnel<地址>建立IPv4与IPv6之间的隧道通信地址
up启动指定的网络设备
-broadcast<地址>:将要送往指定地址的数据包当成广播数据包来处理;
-pointopoint<地址>:与指定地址的网络设备建立直接连线,此模式具有保密功能;
-promisc关闭或启动指定网络设备的promiscuous模式
IP地址指定网络设备的IP地址
网络设备:指定网络设备的名称。
```
### 实例
**显示网络设备信息(激活状态的):**
```
[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
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:61430830 errors:0 dropped:0 overruns:0 frame:0
TX packets:88534 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3607197869 (3.3 GiB) TX bytes:6115042 (5.8 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:56103 errors:0 dropped:0 overruns:0 frame:0
TX packets:56103 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:5079451 (4.8 MiB) TX bytes:5079451 (4.8 MiB)
```
说明:
**eth0** 表示第一块网卡,其中`HWaddr`表示网卡的物理地址,可以看到目前这个网卡的物理地址(MAC地址是`00:16:3E:00:1E:51`。
**inet addr** 用来表示网卡的IP地址此网卡的IP地址是`10.160.7.81`,广播地址`Bcast:10.160.15.255`,掩码地址`Mask:255.255.240.0`。
**lo** 是表示主机的回坏地址,这个一般是用来测试一个网络程序,但又不想让局域网或外网的用户能够查看,只能在此台主机上运行和查看所用的网络接口。比如把 httpd服务器的指定到回坏地址在浏览器输入127.0.0.1就能看到你所架WEB网站了。但只是您能看得到局域网的其它主机或用户无从知道。
* 第一行连接类型Ethernet以太网HWaddr硬件mac地址
* 第二行网卡的IP地址、子网、掩码。
* 第三行UP代表网卡开启状态RUNNING代表网卡的网线被接上MULTICAST支持组播MTU:1500最大传输单元1500字节。
* 第四、五行:接收、发送数据包情况统计。
* 第七行:接收、发送数据字节数统计信息。
**启动关闭指定网卡:**
```
ifconfig eth0 up
ifconfig eth0 down
```
`ifconfig eth0 up`为启动网卡eth0`ifconfig eth0 down`为关闭网卡eth0。ssh登陆linux服务器操作要小心关闭了就不能开启了除非你有多网卡。
**为网卡配置和删除IPv6地址**
```
ifconfig eth0 add 33ffe:3240:800:1005::2/64 #为网卡eth0配置IPv6地址
ifconfig eth0 del 33ffe:3240:800:1005::2/64 #为网卡eth0删除IPv6地址
```
**用ifconfig修改MAC地址**
```
ifconfig eth0 hw ether 00:AA:BB:CC:dd:EE
```
**配置IP地址**
```
[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
```
**启用和关闭arp协议**
```
ifconfig eth0 arp #开启网卡eth0 的arp协议
ifconfig eth0 -arp #关闭网卡eth0 的arp协议
```
**设置最大传输单元:**
```
ifconfig eth0 mtu 1500 #设置能通过的最大数据包大小为 1500 bytes
```
**其它实例**
```bash
ifconfig #处于激活状态的网络接口
ifconfig -a #所有配置的网络接口,不论其是否激活
ifconfig eth0 #显示eth0的网卡信息
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -1,9 +1,6 @@
locate
===
# **locate**
Apache服务器的性能测试工具
## 补充说明
## 说明
locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了。在一般的 distribution 之中,数据库的建立都被放在 crontab 中自动执行。
@ -11,84 +8,36 @@ locate命令可以在搜寻数据库时快速找到档案数据库/var/lib
locate指定用在搜寻符合条件的档案它会去储存档案与目录名称的数据库内寻找合乎范本样式条件的档案或目录录可以使用特殊字元如”*” 或”?”等来指定范本样式如指定范本为kcpa*ner, locate 会找出所有起始字串为kcpa且结尾为ner的档案或目录如名称为kcpartner若目录录名称为kcpa_ner则会列出该目录下包括 子目录在内的所有档案。
locate指令和find找寻档案的功能类似但locate是透过update程序将硬盘中的所有档案和目录资料先建立一个索引数据库在 执行loacte时直接找该索引查询速度会较快索引数据库一般是由操作系统管理但也可以直接下达update强迫系统立即修改索引数据库。
### 语法
```
locate [选择参数] [样式]
```
### 选项
locate指令和find找寻档案的功能类似但locate是透过update程序将硬盘中的所有档案和目录资料先建立一个索引数据库在 执行loacte时直接找该索引查询速度会较快索引数据库一般是由操作系统管理但也可以直接下达update强迫系统立即修改索引数据库
```
-e 将排除在寻找的范围之外。
-1 如果 是 1则启动安全模式。在安全模式下使用者不会看到权限无法看到 的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的 权限资料。
-f 将特定的档案系统排除在外,例如我们没有到理要把 proc 档案系统中的档案 放在资料库中。
-q 安静模式,不会显示任何错误讯息。
-n 至多显示 n个输出。
-r 使用正规运算式 做寻找的条件。
-o 指定资料库存的名称。
-d 指定资料库的路径
-h 显示辅助讯息
-V 显示程式的版本讯息
```
### 实例
## 选项
查找和pwd相关的所有文件
```info
Usage: locate [OPTION]... [PATTERN]... 在mlocate数据库中搜索条目
-A,--all 仅打印匹配所有模式的条目
-b,--basename 仅匹配路径名的基本名称
-c,--count 仅打印找到的条目数
-d,--database DBPATH 使用DBPATH而不是默认数据库(即/var/lib/mlocate/mlocate.db)
-e,--existing 仅打印当前现有文件的条目
-L,--follow 检查文件是否存在时跟踪尾随符号链接(default)
-i,--ignore-case 匹配模式时忽略大小写区别
-l,--limit, -n LIMIT 将输出或计数限制为LIMIT条目
-m,--mmap 忽略,以便向后兼容
-P,--nofollow, -H 检查文件是否存在时,不要跟随尾随符号链接
-0,--null 在输出上单独输入ZERO
-S,--statistics 不搜索全部,只打印每一个匹配的数据库
-q,--quiet 报告没有关于读取数据库的错误消息,不会显示任何错误讯息
-r,--regexp REGEXP 搜索基本的正则表达式REGEXP而不是模式
--regex 模式是扩展的正则表达式
-s,--stdio 忽略,以便向后兼容
-w,--wholename 匹配整个路径名(default)
```
root ~ # locate pwd
/bin/pwd
/etc/.pwd.lock
/sbin/unix_chkpwd
/usr/bin/pwdx
/usr/include/pwd.h
/usr/lib/python2.7/dist-packages/twisted/python/fakepwd.py
/usr/lib/python2.7/dist-packages/twisted/python/fakepwd.pyc
/usr/lib/python2.7/dist-packages/twisted/python/test/test_fakepwd.py
/usr/lib/python2.7/dist-packages/twisted/python/test/test_fakepwd.pyc
/usr/lib/syslinux/pwd.c32
/usr/share/help/C/empathy/irc-join-pwd.page
/usr/share/help/ca/empathy/irc-join-pwd.page
/usr/share/help/cs/empathy/irc-join-pwd.page
/usr/share/help/de/empathy/irc-join-pwd.page
/usr/share/help/el/empathy/irc-join-pwd.page
```
搜索etc目录下所有以sh开头的文件
```
root ~ # locate /etc/sh
/etc/shadow
/etc/shadow-
/etc/shells
```
## 实例
搜索etc目录下所有以m开头的文件
```sh
locate pwd # 查找和pwd相关的所有文件数据库
locate /etc/sh # 搜索etc目录下所有以sh开头的文件
locate -r 'file[^/]*\.txt' # 使用locate 查找所有符合*file*.txt的文件
```
root ~ # locate /etc/m
/etc/magic
/etc/magic.mime
/etc/mailcap
/etc/mailcap.order
/etc/manpath.config
/etc/mate-settings-daemon
```
搜索etc目录下所有以sh开头的文件。
```
locate /etc/sh
```
搜索用户主目录下所有以m开头的文件。
```
locate ~/m
```
搜索用户主目录下所有以m开头的文件并且忽略大小写。
```
locate -i ~/m
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -1,31 +1,20 @@
look
===
# look
显示文件中以指定字符串开头的任意行
## 说明
## 补充说明
**look命令** look实用程序显示文件中包含字符串的所有行。 当外观执行二进制搜索时,必须对文件中的行进行排序;如果未指定file则使用文件/usr/share/dict/words仅比较字母数字字符并忽略字母字符的大小写。
**look命令** 用于显示文件中以指定字符串开头的任意行。
## 选项
### 语法
```info
用法look [选项] 字符串 [文件]
```
look(选项)(参数)
```
选项:
-a,--alternative 使用备选词典(字典文件web2,该文件也位于/usr/dict目录下)
-d,--alphanum 只比较字母和数字
-f,--ignore-case 比较时忽略大小写
-t,--terminate <字符> 定义字符串终止字符
### 选项
```
-a使用另一个字典文件web2该文件也位于/usr/dict目录下
-d只对比英文字母和数字其余一概忽略不予比对
-f忽略字符大小写差别
-t<字尾字符串>:设置字尾字符串。
字符串:指定要查找的字符串
文件:指定要查找的目标文件
```
### 参数
* 字符串:指定要查找的字符串;
* 文件:指定要查找的目标文件。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -1,268 +1,59 @@
# ls
# **ls**
显示目录内容列表
## 说明
**ls命令** 用来显示目标列表在Linux中是使用率较高的命令。ls命令的输出信息可以进行彩色加亮显示以分区不同类型的文件。
## 选项
```sh
-a显示所有档案及目录连同隐藏档开头为.文件一起罗列出来);
-A显示全部文件和目录连同隐藏文件但不包括.和..这两个目录;
-C多列显示输出结果。这是默认选项
-l与“-C”选项功能相反所有输出信息用单列格式输出不输出为多列
-F在每个输出项后追加文件的类型标识符具体含义“*”表示具有可执行权限的普通文件,“/”表示目录,“@”表示符号链接,“|”表示命令管道FIFO“=”表示sockets套接字。当文件为普通文件时不输出任何标识符
-b将文件中的不可输出的字符以反斜线“”加字符编码的方式输出
-c与“-lt”选项连用时按照文件状态时间排序输出目录内容排序的依据是文件的索引节点中的ctime字段。与“-l”选项连用时则排序的一句是文件的状态改变时间
-d仅显示目录名而不显示目录下的内容列表。显示符号链接文件本身而不显示其所指向的目录列表
-f此参数的效果和同时指定“aU”参数相同并关闭“lst”参数的效果
-i显示文件索引节点号inode。一个索引节点代表一个文件
--file-type与“-F”选项的功能相同但是不显示“*”;
-k以KB千字节为单位显示文件大小
-h:将文件容量以人类易读的方式显示
-l以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等
-m用“,”号区隔每个文件和目录的名称;
-n以用户识别码和群组识别码替代其名称
-r以文件名反序排列并输出目录内容列表
-s显示文件和目录的大小以区块为单位
-S: 以文件大小排序,最大的优先(降序)
-t用文件和目录的更改时间排序
-L如果遇到性质为符号链接的文件或目录直接列出该链接所指向的原始文件或目录
-R递归处理将指定目录下的所有文件及子目录一并处理
--full-time列出完整的日期与时间
--color[=WHEN]:使用不同的颜色高亮显示不同类型的。
```
### 参数
目录:指定要显示列表的目录,也可以是具体的文件。
### 实例
**ls命令** 用来显示目标列表在Linux中是使用率较高的命令。ls命令的输出信息可以进行彩色加亮显示以分区不同类型的文件
## 选项
```info
-a 显示所有档案及目录(连同隐藏档,开头为.文件一起罗列出来)
-A 显示全部文件和目录,连同隐藏文件,但不包括.和..这两个目录
-C 多列显示输出结果。这是默认选项
-l 与“-C”选项功能相反所有输出信息用单列格式输出不输出为多列
-F 在每个输出项后追加文件的类型标识符,具体含义“*”表示具有可执行权限的普通文件,“/”表示目录,“@”表示符号链接,“|”表示命令管道FIFO“=”表示sockets套接字。当文件为普通文件时不输出任何标识符
-b 将文件中的不可输出的字符以反斜线“”加字符编码的方式输出
-c 与“-lt”选项连用时按照文件状态时间排序输出目录内容排序的依据是文件的索引节点中的ctime字段。与“-l”选项连用时则排序的一句是文件的状态改变时间
-d 仅显示目录名,而不显示目录下的内容列表。显示符号链接文件本身,而不显示其所指向的目录列表
-f 此参数的效果和同时指定“aU”参数相同并关闭“lst”参数的效果
-i 显示文件索引节点号inode。一个索引节点代表一个文件
--file-type 与“-F”选项的功能相同但是不显示“*”
-k 以KB千字节为单位显示文件大小
-h 将文件容量以人类易读的方式显示
-l 以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等
-m 用“,”号区隔每个文件和目录的名称
-n 以用户识别码和群组识别码替代其名称
-r 以文件名反序排列并输出目录内容列表
-s 显示文件和目录的大小,以区块为单位
-S 以文件大小排序,最大的优先(降序)
-t 用文件和目录的更改时间排序
-L 如果遇到性质为符号链接的文件或目录,直接列出该链接所指向的原始文件或目录
-R 递归处理,将指定目录下的所有文件及子目录一并处理
--full-time 列出完整的日期与时间
--color[=WHEN] 使用不同的颜色高亮显示不同类型的
使用色彩来区分文件类型的功能已被禁用,默认设置和 --color=never 同时禁用了它。使用 --color=auto 选项ls 只在标准输出被连至终端时才生成颜色代码。LS_COLORS 环境变量可改变此设置,可使用 dircolors 命令来设置。color有效的参数为"always","yes","force","never","no","none","auto","tty","if-tty"
退出状态:
0 正常
1 一般问题 (例如:无法访问子文件夹)
2 严重问题 (例如:无法使用命令行参数)
* 匹配文件名中的任何字符串,包括空字符串。
? 匹配文件名中的任何单个字符。
[...] 匹配[ ]中所包含的任何字符。
[!...] 匹配[ ]中非感叹号!之后的字符。
```
## 实例
```sh
ls # 仅列出当前目录可见文件
ls -l # 列出当前目录可见文件详细信息
ls -hl # 列出详细信息并以可读大小显示文件大小
ls -al # 列出所有文件(包括隐藏)的详细信息
```
显示文件的inode信息
索引节点index inode简称为“inode”是Linux中一个特殊的概念具有相同的索引节点号的两个文本本质上是同一个文件除文件名不同外
```
[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
```
水平输出文件列表
```
[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
```
修改最后一次编辑的文件
最近修改的文件显示在最上面。
```
[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
```
显示递归文件
```
[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
```
[root@localhost /]# ls -n
total 254
drwxr-xr-x 2 0 0 4096 Jun 12 04:03 bin
drwxr-xr-x 4 0 0 1024 Jun 15 14:45 boot
drwxr-xr-x 6 0 0 4096 Jun 12 10:26 data
drwxr-xr-x 10 0 0 3520 Sep 26 15:38 dev
drwxr-xr-x 75 0 0 4096 Oct 16 04:02 etc
drwxr-xr-x 4 0 0 4096 Jun 12 10:26 home
drwxr-xr-x 14 0 0 12288 Jun 16 04:02 lib
drwx------ 2 0 0 16384 Jun 11 22:46 lost+found
drwxr-xr-x 2 0 0 4096 May 11 2011 media
drwxr-xr-x 2 0 0 4096 Nov 8 2010 misc
drwxr-xr-x 2 0 0 4096 May 11 2011 mnt
drwxr-xr-x 2 0 0 4096 May 11 2011 opt
dr-xr-xr-x 232 0 0 0 Jun 15 11:04 proc
drwxr-x--- 4 0 0 4096 Oct 15 14:43 root
drwxr-xr-x 2 0 0 12288 Jun 12 04:03 sbin
drwxr-xr-x 2 0 0 4096 May 11 2011 selinux
drwxr-xr-x 2 0 0 4096 May 11 2011 srv
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
```
列出文件和文件夹的详细信息
```
[root@localhost /]# ls -l
total 254
drwxr-xr-x 2 root root 4096 Jun 12 04:03 bin
drwxr-xr-x 4 root root 1024 Jun 15 14:45 boot
drwxr-xr-x 6 root root 4096 Jun 12 10:26 data
drwxr-xr-x 10 root root 3520 Sep 26 15:38 dev
drwxr-xr-x 75 root root 4096 Oct 16 04:02 etc
drwxr-xr-x 4 root root 4096 Jun 12 10:26 home
drwxr-xr-x 14 root root 12288 Jun 16 04:02 lib
drwx------ 2 root root 16384 Jun 11 22:46 lost+found
drwxr-xr-x 2 root root 4096 May 11 2011 media
drwxr-xr-x 2 root root 4096 Nov 8 2010 misc
drwxr-xr-x 2 root root 4096 May 11 2011 mnt
drwxr-xr-x 2 root root 4096 May 11 2011 opt
dr-xr-xr-x 232 root root 0 Jun 15 11:04 proc
drwxr-x--- 4 root root 4096 Oct 15 14:43 root
drwxr-xr-x 2 root root 12288 Jun 12 04:03 sbin
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 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
```
列出可读文件和文件夹详细信息
```
[root@localhost /]# ls -lh
total 254K
drwxr-xr-x 2 root root 4.0K Jun 12 04:03 bin
drwxr-xr-x 4 root root 1.0K Jun 15 14:45 boot
drwxr-xr-x 6 root root 4.0K Jun 12 10:26 data
drwxr-xr-x 10 root root 3.5K Sep 26 15:38 dev
drwxr-xr-x 75 root root 4.0K Oct 16 04:02 etc
drwxr-xr-x 4 root root 4.0K Jun 12 10:26 home
drwxr-xr-x 14 root root 12K Jun 16 04:02 lib
drwx------ 2 root root 16K Jun 11 22:46 lost+found
drwxr-xr-x 2 root root 4.0K May 11 2011 media
drwxr-xr-x 2 root root 4.0K Nov 8 2010 misc
drwxr-xr-x 2 root root 4.0K May 11 2011 mnt
drwxr-xr-x 2 root root 4.0K May 11 2011 opt
dr-xr-xr-x 235 root root 0 Jun 15 11:04 proc
drwxr-x--- 4 root root 4.0K Oct 15 14:43 root
drwxr-xr-x 2 root root 12K Jun 12 04:03 sbin
drwxr-xr-x 2 root root 4.0K May 11 2011 selinux
drwxr-xr-x 2 root root 4.0K May 11 2011 srv
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
```
显示文件夹信息
```
[root@localhost /]# ls -ld /etc/
drwxr-xr-x 75 root root 4096 Oct 16 04:02 /etc/
```
按时间列出文件和文件夹详细信息
```
[root@localhost /]# ls -lt
total 254
drwxrwxrwt 3 root root 98304 Oct 16 08:53 tmp
drwxr-xr-x 75 root root 4096 Oct 16 04:02 etc
drwxr-x--- 4 root root 4096 Oct 15 14:43 root
drwxr-xr-x 10 root root 3520 Sep 26 15:38 dev
drwxr-xr-x 14 root root 12288 Jun 16 04:02 lib
drwxr-xr-x 4 root root 1024 Jun 15 14:45 boot
drwxr-xr-x 11 root root 0 Jun 15 11:04 sys
dr-xr-xr-x 232 root root 0 Jun 15 11:04 proc
drwxr-xr-x 6 root root 4096 Jun 12 10:26 data
drwxr-xr-x 4 root root 4096 Jun 12 10:26 home
drwxr-xr-x 2 root root 4096 Jun 12 04:03 bin
drwxr-xr-x 2 root root 12288 Jun 12 04:03 sbin
drwxr-xr-x 13 root root 4096 Jun 11 23:38 usr
drwxr-xr-x 19 root root 4096 Jun 11 23:38 var
drwx------ 2 root root 16384 Jun 11 22:46 lost+found
drwxr-xr-x 2 root root 4096 May 11 2011 media
drwxr-xr-x 2 root root 4096 May 11 2011 mnt
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
```
按修改时间列出文件和文件夹详细信息
```
[root@localhost /]# ls -ltr
total 254
drwxr-xr-x 2 root root 4096 Nov 8 2010 misc
drwxr-xr-x 2 root root 4096 May 11 2011 srv
drwxr-xr-x 2 root root 4096 May 11 2011 selinux
drwxr-xr-x 2 root root 4096 May 11 2011 opt
drwxr-xr-x 2 root root 4096 May 11 2011 mnt
drwxr-xr-x 2 root root 4096 May 11 2011 media
drwx------ 2 root root 16384 Jun 11 22:46 lost+found
drwxr-xr-x 19 root root 4096 Jun 11 23:38 var
drwxr-xr-x 13 root root 4096 Jun 11 23:38 usr
drwxr-xr-x 2 root root 12288 Jun 12 04:03 sbin
drwxr-xr-x 2 root root 4096 Jun 12 04:03 bin
drwxr-xr-x 4 root root 4096 Jun 12 10:26 home
drwxr-xr-x 6 root root 4096 Jun 12 10:26 data
dr-xr-xr-x 232 root root 0 Jun 15 11:04 proc
drwxr-xr-x 11 root root 0 Jun 15 11:04 sys
drwxr-xr-x 4 root root 1024 Jun 15 14:45 boot
drwxr-xr-x 14 root root 12288 Jun 16 04:02 lib
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
```
按照特殊字符对文件进行分类
```
[root@localhost nginx-1.2.1]# ls -F
auto/ CHANGES CHANGES.ru conf/ configure* contrib/ html/ LICENSE Makefile man/ objs/ README src/
```
列出文件并标记颜色分类
```
[root@localhost nginx-1.2.1]# ls --color=auto
auto CHANGES CHANGES.ru conf configure contrib html LICENSE Makefile man objs README src
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->
ls -lrt # 列出当前目录可见文件详细信息并以时间倒序排列
ls -hl # 列出详细信息并以可读大小显示文件大小
ls -al # 列出所有文件(包括隐藏)的详细信息
ls ??R* # 列出任意两个字符开始,接着跟R,后面任何字符的文件
ls log.[0-9]* # 匹配log+任何数字+任意字符的文件
ls /usr/bin | pr -T9 -W$COLUMNS # 在当前终端宽度上以9列打印输出
```

@ -1,112 +1,56 @@
man
===
# **man**
查看Linux中的指令帮助
## 选项
## 补充说明
**man命令** 是Linux下的帮助指令通过man指令可以查看Linux中的指令帮助、配置文件帮助和编程帮助等信息。
### 语法
```
man [OPTION...] [章节] 手册页...
-C, --config-file=文件 使用该用户设置文件
-d, --debug 输出调试信息
-D, --default 将所有选项都重置为默认值
--warnings[=警告] 开启 groff 的警告
```info
用法: man[选项...] [章节] 手册页...
-C, --config-file=文件 使用该用户设置文件
-d, --debug 输出调试信息
-D, --default 将所有选项都重置为默认值
--warnings[=警告] 开启 groff 的警告
主要运行模式:
-f, --whatis 等同于 whatis
-k, --apropos 等同于 apropos
-K, --global-apropos search for text in all pages
-l, --local-file
把“手册页”参数当成本地文件名来解读
-w, --where, --path, --location
输出手册页的物理位置
-W, --where-cat, --location-cat
输出 cat 文件的物理位置
-c, --catman 由 catman 使用,用来对过时的 cat
页重新排版
-R, --recode=编码 output source page encoded in ENCODING
-f, --whatis 等同于whatis显示给定关键字的简短描述信息
-k, --apropos 等同于apropos
-K, --global-apropos search for text in all pages
-l, --local-file 把“手册页”参数当成本地文件名来解读
-w, --where, --path, --location 输出手册页的物理位置
-W, --where-cat, --location-cat 输出cat文件的物理位置
-c, --catman 由catman 使用用来对过时的cat页重新排版
-R, --recode=编码 output source page encoded in ENCODING
寻找手册页:
-L, --locale=区域
定义本次手册页搜索所采用的区域设置
-m, --systems=系统 use manual pages from other systems
-M, --manpath=路径 设置搜索手册页的路径为“路径”
-S, -s, --sections=列表 使用以半角冒号分隔的章节列表
-e, --extension=扩展
将搜索限制在扩展类型为“扩展”的手册页之内
-i, --ignore-case 查找手册页时不区分大小写字母
(默认)
-I, --match-case 查找手册页时区分大小写字母。
--regex show all pages matching regex
--wildcard show all pages matching wildcard
--names-only make --regex and --wildcard match page names only,
not descriptions
-a, --all 寻找所有匹配的手册页
-u, --update 强制进行缓存一致性的检查
--no-subpages don't try subpages, e.g. 'man foo bar' => 'man
foo-bar'
-L, --locale=区域 定义本次手册页搜索所采用的区域设置
-m, --systems=系统 use manual pages from other systems
-M, --manpath=路径 设置搜索手册页的路径为“路径”
-S, -s, --sections=列表 使用以半角冒号分隔的章节列表
-e, --extension=扩展 将搜索限制在扩展类型为“扩展”的手册页之内
-i, --ignore-case 查找手册页时不区分大小写字母(默认)
-I, --match-case 查找手册页时区分大小写字母。
--regex show all pages matching regex
--wildcard show all pages matching wildcard
--names-only make --regex and --wildcard match page names only,not descriptions
-a, --all 寻找所有匹配的手册页
-u, --update 强制进行缓存一致性的检查
--no-subpages don't try subpages, e.g. 'man foo bar' => 'manfoo-bar'
控制格式化的输出:
-P, --pager=PAGER 使用 PAGER 程序显示输出文本
-r, --prompt=字符串 给 less pager 提供一个提示行
-7, --ascii 显示某些 latin1 字符的 ASCII 翻译形式
-E, --encoding=编码 use selected output encoding
--no-hyphenation, --nh turn off hyphenation
--no-justification, --nj turn off justification
-p, --preprocessor=字符串 字符串表示要运行哪些预处理器:
e - [n]eqn, p - pic, t - tbl,
g - grap, r - refer, v - vgrind
-t, --troff 使用 groff 对手册页排版
-T, --troff-device[=设备] 使用 groff 的指定设备
-H, --html[=浏览器] 使用 elinks 或指定浏览器显示 HTML
输出
-X, --gxditview[=分辨率] 使用 groff 并通过 gxditview (X11)
来显示:
-X = -TX75, -X100 = -TX100, -X100-12 = -TX100-12
-Z, --ditroff 使用 groff 并强制它生成 ditroff
-?, --help give this help list
--usage give a short usage message
-V, --version print program version
Mandatory or optional arguments to long options are also mandatory or optional
for any corresponding short options.
-P, --pager=PAGER 使用 PAGER 程序显示输出文本
-r, --prompt=字符串 给 less pager 提供一个提示行
-7, --ascii 显示某些 latin1 字符的 ASCII 翻译形式
-E, --encoding=编码 use selected output encoding
--no-hyphenation, --nh turn off hyphenation
--no-justification,--nj turn off justification
-p, --preprocessor=字符串 字符串表示要运行哪些预处理器e - [n]eqn, p - pic, t - tbl,g - grap, r - refer, v - vgrind
-t, --troff 使用 groff 对手册页排版
-T, --troff-device[=设备] 使用 groff 的指定设备
-H, --html[=浏览器] 使用 www-browser 或指定浏览器显示 HTML输出
-X, --gxditview[=分辨率] 使用 groff 并通过 gxditview (X11)来显示:-X = -TX75, -X100 = -TX100, -X100-12 = -TX100-12
-Z, --ditroff 使用 groff 并强制它生成 ditroff
```
### 选项
```
-a在所有的man帮助手册中搜索
-f等价于whatis指令显示给定关键字的简短描述信息
-P指定内容时使用分页程序
-M指定man手册搜索的路径。
```
### 参数
* 数字指定从哪本man手册中搜索帮助
* 关键字:指定要搜索帮助的关键字。
### 数字代表内容
```
```sh
# 数字所代表内容
1用户在shell环境可操作的命令或执行文件
2系统内核可调用的函数与工具等
3一些常用的函数(function)与函数库(library)大部分为C的函数库(libc)
@ -118,23 +62,11 @@ for any corresponding short options.
9跟kernel有关的文件
```
### 实例
## 实例
我们输入`man ls`它会在最左上角显示“LS1在这里“LS”表示手册名称而“1”表示该手册位于第一节章同样我们输`man ifconfig`它会在最左上角显示“IFCONFIG8”。也可以这样输入命令“man [章节号] 手册名称”。
man是按照手册的章节号的顺序进行搜索的比如
```sh
man -t man | ps2pdf - > man.pdf # 生成一个PDF格式的帮助文件
man 3 sleep # 显示sleep命令的手册并查看库函数sleep
```
man sleep
```
只会显示sleep命令的手册,如果想查看库函数sleep就要输入:
```
man 3 sleep
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -1,17 +1,12 @@
nice
===
# nice
改变程序执行的优先权等级
## 补充说明
## 说明
**nice命令** 用于以指定的进程调度优先级启动其他的程序。Crontab中用什么命令定义某个程序执行的优先级别
nice/renice进程执行优先级
概念:
进程优先级系统按进程优先级的不同分配CPU时间优先级高的进程会得到更多的CPU使用时间以提高速度缩短总的执行时间。
概念进程优先级系统按进程优先级的不同分配CPU时间优先级高的进程会得到更多的CPU使用时间以提高速度缩短总的执行时间。
进程优先级范围:-20至19
@ -19,72 +14,36 @@ nice/renice进程执行优先级
最低等级19
系统管理员有权将进程优先级设置为-1至-20而普通用户只能设置0至19。
进程运行的默认等级为0。
用nice执行的进程其默认等级为10即nice <程序名>,不指定等级时)。
### 语法
```
nice [选项] [命令 [参数]...]
```
系统管理员有权将进程优先级设置为-1至-20而普通用户只能设置0至19。进程运行的默认等级为0。用nice执行的进程其默认等级为10即nice <程序名>,不指定等级时)。
### 选项
## 选项
```info
-n, --adjustment=N 指定进程的优先级(整数,默认是10
```
-n指定进程的优先级整数,默认是10
```
### 参数
指令及选项:需要运行的指令及其他选项。
### 实例
新建一个进程并设置优先级将当前目录下的documents目录打包但不希望tar占用太多CPU
## 实例
```
nice -19 tar zcf pack.tar.gz documents
```
```sh
nice -19 tar zcf pack.tar.gz documents # 新建一个进程并设置优先级将当前目录下的documents目录打包但不希望tar占用太多CPU
方法非常简单,即在原命令前加上`nice -19`。很多人可能有疑问了最低优先级不是19么那是因为这个“-19”中的“-”仅表示参数前缀所以如果希望将当前目录下的documents目录打包并且赋予tar进程最高的优先级
```
nice --19 tar zcf pack.tar.gz documents
```
如:(命令后加&表示以后台运行)
vi & 优先等级0默认等级。
nice vi & 优先等级10使用nice执行程序时的默认等级。
nice -50 vi & 优先等级19-号表示选项等级50超过最低等级19因此系统以等级19执行。
nice -18 vi & 优先等级18。
nice --50 vi & 优先等级-20选项值为-50超过最高等级-20因此系统以等级-20执行。
nice --18 vi & 优先等级-18。
通过ps -l可查看以上命令的执行情况注意查看各vi进程NI值的不同
重新调整正在执行的进程的优先级:
调整指定PID进程的等级
vi & 优先等级0默认等级
nice vi & 优先等级10使用nice执行程序时的默认等级
nice -50 vi & 优先等级19-号表示选项等级50超过最低等级19因此系统以等级19执行
nice -18 vi & 优先等级18
nice --50 vi & 优先等级-20选项值为-50超过最高等级-20因此系统以等级-20执行
nice --18 vi & 优先等级-18
通过ps -l可查看以上命令的执行情况注意查看各vi进程NI值的不同
重新调整正在执行的进程的优先级调整指定PID进程的等级
renice <等级> <PID>
注意:<等级>是参数,不是选项,没有前缀-号。
调整指定用户的所有进程的等级
renice <等级> <用户名1> <用户名2> ...
调整指定组的所有用户的所有进程的等级
renice <等级> -g <组名1>
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->
renice <等级> -g <组名1>

@ -1,33 +1,22 @@
pushd
===
# pushd
将目录加入命令堆叠中
## 说明
## 补充说明
**pushd命令** 是将目录加入命令堆叠中。如果指令没有指定目录名称,则会将当前的工作目录置入目录堆叠的最顶端。置入目录如果没有指定堆叠的位置,也会置入目录堆叠的最顶端,同时工作目录会自动切换到目录堆叠最顶端的目录去
**pushd命令** 是将目录加入命令堆叠中。如果指令没有指定目录名称,则会将当前的工作目录置入目录堆叠的最顶端。置入目录如果没有指定堆叠的位置,也会置入目录堆叠的最顶端,同时工作目录会自动切换到目录堆叠最顶端的目录去。
## 选项
### 语法
```
pushd(选项)(参数)
```
### 选项
```
-n只加入目录到堆叠中不进行cd操作
+n删除从左到右的第n个目录数字从0开始
-n删除从右到左的第n个目录数字从0开始
```info
-n 只加入目录到堆叠中不进行cd操作
+N 删除从左到右的第n个目录数字从0开始
-N 删除从右到左的第n个目录数字从0开始
```
### 参数
目录:需要压入堆栈的目录。
### 实例
```
```sh
# 参数--目录:需要压入堆栈的目录。
root@Mylinux:/tmp/dir4# pushd /tmp/dir3
/tmp/dir3 /tmp/dir4 /tmp/dir1 ~
@ -36,9 +25,5 @@ root@Mylinux:/tmp/dir3# pushd /tmp/dir2
root@Mylinux:/tmp/dir2# pushd -1
/tmp/dir1 ~ /tmp/dir2 /tmp/dir3 /tmp/dir4
# 注意:最左边表示栈顶,最右边表示栈底。
```
注意:最左边表示栈顶,最右边表示栈底。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -1,39 +1,28 @@
renice
===
# renice
修改正在运行的进程的调度优先级
## 说明
## 补充说明
**renice命令** 可以修改正在运行的进程的调度优先级。预设是以程序识别码指定程序调整其优先权,您亦可以指定程序群组或用户名称调整优先权等级,并修改所有隶属于该程序群组或用户的程序的优先权。只有系统管理者可以改变其他用户程序的优先权,也仅有系统管理者可以设置负数等级
**renice命令** 可以修改正在运行的进程的调度优先级。预设是以程序识别码指定程序调整其优先权,您亦可以指定程序群组或用户名称调整优先权等级,并修改所有隶属于该程序群组或用户的程序的优先权。只有系统管理者可以改变其他用户程序的优先权,也仅有系统管理者可以设置负数等级。
## 选项
### 语法
```info
renice [-n] <优先级> [-p|--pid] <pid>...
renice [-n] <优先级> -g|--pgrp <pgid>...
renice [-n] <优先级> -u|--user <用户>...
选项:
-g, --pgrp <id> 将参数解释为进程组ID;指定进程组id
-n, --priority <数字> 指定 nice 增加值
-p, --pid <id> 将参数解释为进程ID (默认);改变该程序的优先权等级
-u, --user <name|id> 将参数解释为用户名或用户ID;指定开启进程的用户名
```
renice(选项)(参数)
```
### 选项
```
-g指定进程组id
-p<程序识别码>:改变该程序的优先权等级,此参数为预设值。
-u指定开启进程的用户名。
```
### 参数
进程号:指定要修改优先级的进程。
## 实例
### 实例
```sh
renice 1 987 -u daemon root -p 32 # 将行程id为987及32的行程与行程拥有者为daemon及root的优先序号码加1
# 注意每一个进程都有一个唯一的id
将行程id为987及32的行程与行程拥有者为daemon及root的优先序号码加1
```
renice 1 987 -u daemon root -p 32
renice 19 -p $$ # 使脚本运行于低优先级。用于非交互任务
```
注意每一个行程都有一个唯一的id。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -1,314 +1,142 @@
# sed
功能强大的流式文本编辑器
# **sed**
## 说明
**sed** 是一种流编辑器它是文本处理中非常中的工具能够完美的配合正则表达式使用功能不同凡响。处理时把当前处理的行存储在临时缓冲区中称为“模式空间”pattern space接着用sed命令处理缓冲区中的内容处理完成后把缓冲区的内容送往屏幕。接着处理下一行这样不断重复直到文件末尾。文件内容并没有 改变除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件简化对文件的反复操作编写转换程序等。
## 命令格式
## 选项
```sh
```info
用法: sed [选项]... {脚本(如果没有其他脚本)} [输入文件]...
-n, --quiet, --silent
取消自动打印模式空间
-e 脚本, --expression=脚本
添加“脚本”到程序的运行列表
-f 脚本文件, --file=脚本文件
添加“脚本文件”到程序的运行列表
--follow-symlinks
直接修改文件时跟随软链接
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if SUFFIX supplied)
-c, --copy
use copy instead of rename when shuffling files in -i mode
-b, --binary
does nothing; for compatibility with WIN32/CYGWIN/MSDOS/EMX (
open files in binary mode (CR+LFs are not treated specially))
-l N, --line-length=N
指定“l”命令的换行期望长度
--posix
关闭所有 GNU 扩展
-r, --regexp-extended
在脚本中使用扩展正则表达式
-s, --separate
将输入文件视为各个独立的文件而不是一个长的连续输入
-u, --unbuffered
从输入文件读取最少的数据,更频繁的刷新输出
-z, --null-data
separate lines by NUL characters
--help
display this help and exit
--version
output version information and exit
-n, --quiet, --silent 取消自动打印模式空间
-e 脚本, --expression=脚本 添加“脚本”到程序的运行列表,指定script处理文本
-f 脚本文件, --file=脚本文件 添加“脚本文件”到程序的运行列表,指定脚本文件处理文本
--follow-symlinks 直接修改文件时跟随软链接
-i[SUFFIX], --in-place[=SUFFIX] edit files in place (makes backup if SUFFIX supplied)
-c, --copy use copy instead of rename when shuffling files in -i mode
-b, --binary does nothing; for compatibility with WIN32/CYGWIN/MSDOS/EMX (open files in binary mode (CR+LFs are not treated specially))
-l N, --line-length=N 指定“l”命令的换行期望长度
--posix 关闭所有 GNU 扩展
-r, --regexp-extended 在脚本中使用扩展正则表达式
-s, --separate 将输入文件视为各个独立的文件而不是一个长的连续输入
-u, --unbuffered 从输入文件读取最少的数据,更频繁的刷新输出
-z, --null-data separate lines by NUL characters
如果没有 -e, --expression, -f 或 --file 选项,那么第一个非选项参数被视为
sed脚本。其他非选项参数被视为输入文件如果没有输入文件那么程序将从标准
输入读取数据。
```
### 选项
```sh
-e<script>--expression=<script>script
-f<script>--file=<script>script
-h或--help显示帮助
-n或--quiet或——silent仅显示script处理后的结果
-V或--version显示版本信息。
```
### 参数
文件:指定待处理的文本文件列表。
### sed命令
```sh
**a\** 在当前行下面插入文本。
**i\** 在当前行上面插入文本。
**c\** 把选定的行改为新的文本。
**d** 删除,删除选择的行。
**D** 删除模板块的第一行。
**s** 替换指定字符
**h** 拷贝模板块的内容到内存中的缓冲区。
**H** 追加模板块的内容到内存中的缓冲区。
**g** 获得内存缓冲区的内容,并替代当前模板块中的文本。
**G** 获得内存缓冲区的内容,并追加到当前模板块文本的后面。
**l** 列表不能打印字符的清单。
**n** 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
**N** 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
**p** 打印模板块的行。
**P** (大写) 打印模板块的第一行。
**q** 退出Sed。
**b lable** 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。
**r file** 从file中读行。
**t label** if分支从最后一行开始条件一旦满足或者Tt命令将导致分支到带有标号的命令处或者到脚本的末尾。
**T label** 错误分支从最后一行开始一旦发生错误或者Tt命令将导致分支到带有标号的命令处或者到脚本的末尾。
**w file** 写并追加模板块到file末尾。
**W file** 写并追加模板块的第一行到file末尾。
**!** 表示后面的命令对所有没有被选定的行发生作用。
**=** 打印当前行号码。
**#** 把注释扩展到下一个换行符以前。
```
### sed替换标记
```sh
**g** 表示行内全面替换。
**p** 表示打印行。
**w** 表示把行写入一个文件。
**x** 表示互换模板块中的文本和缓冲区中的文本。
**y** 表示把一个字符翻译为另外的字符(但是不用于正则表达式)
**\1** 子串匹配标记
**&** 已匹配字符串标记
```
### sed元字符集
```sh
**^** 匹配行开始,如:/^sed/匹配所有以sed开头的行。
**$** 匹配行结束,如:/sed$/匹配所有以sed结尾的行。
**.** 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符最后是d。
**** * 匹配0个或多个字符/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
**[]** 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。
**[^]** 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头紧跟ed的行。
**\(..\)** 匹配子串保存匹配的字符如s/\(love\)able/\1rsloveable被替换成lovers。
**&** 保存搜索字符用来替换其他字符如s/love/ **&** /love这成 **love**
**\<** 匹配单词的开始,如:/\<love/匹配包含以love开头的单词的行。
**\>** 匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行。
**x\{m\}** 重复字符xm次/0\{5\}/匹配包含5个0的行。
**x\{m,\}** 重复字符x至少m次/0\{5,\}/匹配至少有5个0的行。
**x\{m,n\}** 重复字符x至少m次不多于n次/0\{5,10\}/匹配5~10个0的行。
```
## sed用法实例
### 替换操作s命令
替换文本中的字符串:
```sh
sed 's/book/books/' file
```
**-n选项** 和 **p命令** 一起使用表示只打印那些发生替换的行:
sed -n 's/test/TEST/p' file
直接编辑文件 **选项-i** 会匹配file文件中每一行的第一个book替换为books
```sh
sed -i 's/book/books/g' file
```
### 全面替换标记g
使用后缀 /g 标记会替换每一行中的所有匹配:
```sh
sed 's/book/books/g' file
```
当需要从第N处匹配开始替换时可以使用 /Ng
```sh
echo sksksksksksk | sed 's/sk/SK/2g'
skSKSKSKSKSK
echo sksksksksksk | sed 's/sk/SK/3g'
skskSKSKSKSK
echo sksksksksksk | sed 's/sk/SK/4g'
skskskSKSKSK
```
### 定界符
以上命令中字符 / 在sed中作为定界符使用也可以使用任意的定界符
```sh
sed 's:test:TEXT:g'
sed 's|test|TEXT|g'
```
定界符出现在样式内部时,需要进行转义:
```sh
sed 's/\/bin/\/usr\/local\/bin/g'
```
### 删除操作d命令
删除空白行:
```sh
sed '/^$/d' file
```
删除文件的第2行
```sh
sed '2d' file
```
删除文件的第2行到末尾所有行
```sh
sed '2,$d' file
```
删除文件最后一行:
```sh
sed '$d' file
```
删除文件中所有开头是test的行
```sh
sed '/^test/'d file
```
### 已匹配字符串标记&
正则表达式 \w\+ 匹配每一个单词,使用 [&] 替换它,& 对应于之前所匹配到的单词:
```sh
echo this is a test line | sed 's/\w\+/[&]/g'
[this] [is] [a] [test] [line]
```
所有以192.168.0.1开头的行都会被替换成它自已加localhost
```sh
sed 's/^192.168.0.1/&localhost/' file
192.168.0.1localhost
```
### 子串匹配标记\1
匹配给定样式的其中一部分:
```sh
echo this is digit 7 in a number | sed 's/digit \([0-9]\)/\1/'
this is 7 in a number
```
命令中 digit 7被替换成了 7。样式匹配到的子串是 7\(..\) 用于匹配子串,对于匹配到的第一个子串就标记为 **\1** ,依此类推匹配到的第二个结果就是 **\2** ,例如:
```sh
echo aaa BBB | sed 's/\([a-z]\+\) \([A-Z]\+\)/\2 \1/'
BBB aaa
```
love被标记为1所有loveable会被替换成lovers并打印出来
```sh
sed -n 's/\(love\)able/\1rs/p' file
```
### 组合多个表达式
```sh
sed '表达式' | sed '表达式'
等价于:
sed '表达式; 表达式'
```
### 引用
sed表达式可以使用单引号来引用但是如果表达式内部包含变量字符串就需要使用双引号。
```sh
test=hello
echo hello WORLD | sed "s/$test/HELLO"
HELLO WORLD
```
### 选定行的范围:,(逗号)
所有在模板test和check所确定的范围内的行都被打印
```sh
sed -n '/test/,/check/p' file
```
打印从第5行开始到第一个包含以test开始的行之间的所有行
```sh
sed -n '5,/^test/p' file
```
对于模板test和west之间的行每行的末尾用字符串aaa bbb替换
```sh
sed '/test/,/west/s/$/aaa bbb/' file
```
### 多点编辑e命令
-e选项允许在同一行里执行多条命令
```sh
sed -e '1,5d' -e 's/test/check/' file
```
上面sed表达式的第一条命令删除1至5行第二条命令用check替换test。命令的执行顺序对结果有影响。如果两个命令都是替换命令那么第一个替换命令将影响第二个替换命令的结果。
和 -e 等价的命令是 --expression
```sh
```info
a\ 在当前行下面插入文本
i\ 在当前行上面插入文本
c\ 把选定的行改为新的文本
d 删除,删除选择的行
D 删除模板块的第一行
s 替换指定字符
h 拷贝模板块的内容到内存中的缓冲区
H 追加模板块的内容到内存中的缓冲区
g 获得内存缓冲区的内容,并替代当前模板块中的文本
G 获得内存缓冲区的内容,并追加到当前模板块文本的后面
l 列表不能打印字符的清单
n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令
N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码
p 打印模板块的行
P (大写)打印模板块的第一行
q 退出Sed
b lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾
r file 从file中读行
t label if分支从最后一行开始条件一旦满足或者Tt命令将导致分支到带有标号的命处或者到脚本的末尾
T label 错误分支从最后一行开始一旦发生错误或者Tt命令将导致分支到带有标号的令处或者到脚本的末尾
w file 写并追加模板块到file末尾。
W file 写并追加模板块的第一行到file末尾。
! 表示后面的命令对所有没有被选定的行发生作用。
= 打印当前行号码。
# 把注释扩展到下一个换行符以前。
```
## sed替换标记
```info
g 表示行内全面替换。
p 表示打印行。
w 表示把行写入一个文件。
x 表示互换模板块中的文本和缓冲区中的文本。
y 表示把一个字符翻译为另外的字符(但是不用于正则表达式)
\1 子串匹配标记
& 已匹配字符串标记
```
## sed元字符集
```info
^ 匹配行开始,如:/^sed/匹配所有以sed开头的行
$ 匹配行结束,如:/sed$/匹配所有以sed结尾的行
. 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符最后是d
* 匹配0个或多个字符/*sed/匹配所有模板是一个或多个空格后紧跟sed的行
[] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。
[^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字开头紧跟ed的行
\(..\) 匹配子串保存匹配的字符如s/\(love\)able/\1rsloveable被替换成lovers
& 保存搜索字符用来替换其他字符如s/love/ & /love这成 love
\< 匹配单词的开始,如:/\<love/匹配包含以love开头的单词的行
\> 匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行
x\{m\} 重复字符xm次/0\{5\}/匹配包含5个0的行
x\{m,\} 重复字符x至少m次/0\{5,\}/匹配至少有5个0的行
x\{m,n\} 重复字符x至少m次不多于n次/0\{5,10\}/匹配5~10个0的行
```
## 实例
```sh
sed -n 's/.*<title\>\.*\<\/title>.*/\1/ip;T;q' file # 输出HTML文件的<title></title>字段中的 内容
sed 's/book/books/' file # 替换操作s命令;替换文本中的字符串
sed -n 's/test/TEST/p' file # -n选项和p命令一起使用表示只打印那些发生替换的行
sed -i 's/book/books/g' file # 直接编辑文件选项-i会匹配file文件中每一行的第一个sed 's/book/books/g' file # 全面替换标记g;使用后缀/g标记会替换每一行中的所有匹配
echo sksksksksksk | sed 's/sk/SK/2g' # 从第2个匹配项开始替换当需要从第N处匹配开始替换时可以使用/Ng
# 字符/在sed中作为定界符使用也可以使用任意的定界符
sed 's:test:TEXT:g' # 将test替换成TEXT此处定界符为:
sed 's|test|TEXT|g' # 将test替换成TEXT此处定界符为|
sed 's/\/bin/\/usr\/local\/bin/g' # 定界符出现在样式内部时,需要进行转义
sed '/^$/d' file # 删除操作d命令删除空白行
sed '2d' file # 删除文件的第2行
sed '2,$d' file # 删除文件的第2行到末尾所有行
sed '$d' file # 删除文件最后一行
sed '/^test/'d file # 删除文件中所有开头是test的行
# 已匹配字符串标记&;正则表达式\w\+匹配每一个单词,使用[&]替换它,&对应于之前所匹配到的单词
echo this is a test line | sed 's/\w\+/[&]/g' # 输出:[this] [is] [a] [test] [line]
sed 's/^192.168.0.1/&localhost/' file # 所有以192.168.0.1开头的行都会被替换成它自已加localhost输出192.168.0.1localhost
# 子串匹配标记\1匹配给定样式的其中一部分
echo this is digit 7 in a number | sed 's/digit \([0-9]\)/\1/' # 输出this is 7 in a number
# 命令中 digit 7被替换成了 7。样式匹配到的子串是 7\(..\) 用于匹配子串,对于匹配到的第一个子串就标记为 **\1** ,依此类推匹配到的第二个结果就是 **\2** ,例如:
echo aaa BBB | sed 's/\([a-z]\+\) \([A-Z]\+\)/\2 \1/' # 输出BBB aaa
sed -n 's/\(love\)able/\1rs/p' file # love被标记为1所有loveable会被替换成lovers并打印出来
# 组合多个表达式
sed '表达式' | sed '表达式' 等价于sed '表达式;表达式'
# 引用sed表达式可以使用单引号来引用但是如果表达式内部包含变量字符串就需要使用双引号
# 选定行的范围:,(逗号)
sed -n '/test/,/check/p' file # 所有在模板test和check所确定的范围内的行都被打印
sed -n '5,/^test/p' file # 打印从第5行开始到第一个包含以test开始的行之间的所有行
sed '/test/,/west/s/$/aaa bbb/' file # 对于模板test和west之间的行每行的末尾用字符串aaa bbb替换
# 多点编辑e命令
sed -e '1,5d' -e 's/test/check/' file # -e选项允许在同一行里执行多条命令
# 上面sed表达式的第一条命令删除1至5行第二条命令用check替换test。命令的执行顺序对结果有影响。如果两个命令都是替换命令那么第一个替换命令将影响第二个替换命令的结果。
# 和-e 等价的命令是 --expression
sed --expression='s/test/check/' --expression='/love/d' file
```
### 从文件读入r命令
file里的内容被读进来显示在与test匹配的行后面如果匹配多行则file的内容将显示在所有匹配行的下面
```sh
sed '/test/r file' filename
# 从文件读入r命令
sed '/test/r file' filename # file里的内容被读进来显示在与test匹配的行后面如果匹配多行则file的内容将显示在所有匹配行的下面
```
### 写入文件w命令
@ -424,18 +252,14 @@ awk '/SCC/{getline; print}' URFILE
```
### 文本间隔
## sed one line
```sh
# 文本间隔
在每一行后面增加一空行
sed G
将原来的所有空行删除并在每一行后面增加一空行,这样在输出的文本中每一行后面将有且只有一空行。
sed '/^$/d;G'
在每一行后面增加两行空行
sed 'G;G'
sed G # 在每一行后面增加一空行
sed '/^$/d;G' # 将原来的所有空行删除并在每一行后面增加一空行,这样在输出的文本中每一行后面将有且只有一空行
sed 'G;G' # 在每一行后面增加两行空行
将第一个脚本所产生的所有空行删除(即删除所有偶数行)
sed 'n;d'

@ -1,7 +1,4 @@
strace
===
跟踪系统调用和信号
# *strace*
## 补充说明
@ -9,21 +6,9 @@ strace
strace的最简单的用法就是执行一个指定的命令在指定的命令结束之后它也就退出了。在命令执行的过程中strace会记录和解析命令进程的所有系统调用以及这个进程所接收到的所有的信号值。
### 语法
```
strace [ -dffhiqrtttTvxx ] [ -acolumn ] [ -eexpr ] ...
[ -ofile ] [-ppid ] ... [ -sstrsize ] [ -uusername ]
[ -Evar=val ] ... [ -Evar ]...
[command [ arg ... ] ]
strace -c [ -eexpr ] ... [ -Ooverhead ] [ -Ssortby ]
[ command [ arg... ] ]
```
### 选项
## 选项
```
```info
-c 统计每一系统调用的所执行的时间,次数和出错的次数等.
-d 输出strace关于标准错误的调试信息.
-f 跟踪由fork调用所产生的子进程.
@ -61,9 +46,11 @@ qualifier只能是 trace,abbrev,verbose,raw,signal,read,write其中之一.value
-u username 以username的UID和GID执行被跟踪的命令
```
### 实例
## 实例
**追踪系统调用**
**追踪系统调用**
strace -ff -t -s 1000 -p {process id}
现在我们做一个很简单的程序来演示strace的基本用法。这个程序的C语言代码如下

@ -1,227 +1,381 @@
# tar--Linux下的归档使用工具用来打包和备份
# **tar**
## 补充说明
## 说明
```sh
**tar命令** 可以为linux的文件和目录创建档案。利用tar可以为某一特定文件创建档案备份文件也可以在档案中改变文件或者向档案中加入新的文件。tar最初被用来在磁带上创建档案现在用户可以在任何设备上创建档案。利用tar命令可以把一大堆的文件和目录全部打包成一个文件这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。
首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。
为什么要区分这两个概念呢这源于Linux中很多压缩程序只能针对一个文件进行压缩这样当你想要压缩一大堆文件时你得先将这一大堆文件先打成一个包tar命令然后再用压缩程序进行压缩gzip bzip2命令
```
### 语法
```sh
tar(选项)(参数)
为什么要区分这两个概念呢这源于Linux中很多压缩程序只能针对一个文件进行压缩这样当你想要压缩一大堆文件时你得先将这一大堆文件先打成一个包tar命令然后再用压缩程序进行压缩gzip bzip2命令
## 选项
```info
主操作模式:
-A, --catenate, --concatenate 追加 tar 文件至归档
-c, --create 创建一个新归档
-d, --diff, --compare 找出归档和文件系统的差异
--delete 从归档(非磁带!)中删除
-r, --append 追加文件至归档结尾
-t, --list 列出归档内容
--test-label 测试归档卷标并退出
-u, --update 仅追加比归档中副本更新的文件
-x, --extract, --get 从归档中解出文件
操作修饰符:
--check-device 当创建增量归档时检查设备号(默认)
-g, --listed-incremental=FILE 处理新式的 GNU 格式的增量备份
-G, --incremental 处理老式的 GNU 格式的增量备份
--ignore-failed-read
当遇上不可读文件时不要以非零值退出
--level=NUMBER 所创建的增量列表归档的输出级别
-n, --seek 归档可检索
--no-check-device 当创建增量归档时不要检查设备号
--no-seek 归档不可检索
--occurrence[=NUMBER] 仅处理归档中每个文件的第 NUMBER
个事件;仅当与以下子命令 --delete,
--diff, --extract 或是 --list
中的一个联合使用时,此选项才有效。而且不管文件列表是以命令行形式给出或是通过
-T 选项指定的NUMBER 值默认为 1
--sparse-version=MAJOR[.MINOR]
设置所用的离散格式版本(隐含
--sparse)
-S, --sparse 高效处理离散文件
重写控制:
-k, --keep-old-files don't replace existing files when extracting,treat them as errors
--keep-newer-files
不要替换比归档中副本更新的已存在的文件
--no-overwrite-dir 保留已存在目录的元数据
--overwrite 解压时重写存在的文件
--overwrite-dir 解压时重写已存在目录的元数据(默认)
--recursive-unlink 解压目录之前先清除目录层次
--remove-files 在添加文件至归档后删除它们
--skip-old-files don't replace existing files when extracting,
silently skip over them
-U, --unlink-first 在解压要重写的文件之前先删除它们
-W, --verify 在写入以后尝试校验归档
选择输出流:
--ignore-command-error 忽略子进程的退出代码
--no-ignore-command-error
将子进程的非零退出代码认为发生错误
-O, --to-stdout 解压文件至标准输出
--to-command=COMMAND
将解压的文件通过管道传送至另一个程序
操作文件属性:
--atime-preserve[=METHOD]
在输出的文件上保留访问时间,要么通过在读取(默认
METHOD=replace)后还原时间,要不就不要在第一次(METHOD=system)设置时间
--delay-directory-restore
直到解压结束才设置修改时间和所解目录的权限
--group=名称 强制将 NAME
作为所添加的文件的组所有者
--mode=CHANGES 强制将所添加的文件(符号)更改为权限
CHANGES
--mtime=DATE-OR-FILE 从 DATE-OR-FILE 中为添加的文件设置
mtime
-m, --touch 不要解压文件的修改时间
--no-delay-directory-restore
取消 --delay-directory-restore 选项的效果
--no-same-owner
将文件解压为您所有(普通用户默认此项)
--no-same-permissions
从归档中解压权限时使用用户的掩码位(默认为普通用户服务)
--numeric-owner 总是以数字代表用户/组的名称
--owner=名称 强制将 NAME
作为所添加的文件的所有者
-p, --preserve-permissions, --same-permissions
解压文件权限信息(默认只为超级用户服务)
--preserve 与 -p 和 -s 一样
--same-owner
尝试解压时保持所有者关系一致(超级用户默认此项)
-s, --preserve-order, --same-order
为解压至匹配归档排序名称
Handling of extended file attributes:
--acls Enable the POSIX ACLs support
--no-acls Disable the POSIX ACLs support
--no-selinux Disable the SELinux context support
--no-xattrs Disable extended attributes support
--selinux Enable the SELinux context support
--xattrs Enable extended attributes support
--xattrs-exclude=MASK specify the exclude pattern for xattr keys
--xattrs-include=MASK specify the include pattern for xattr keys
设备选择和切换:
-f, --file=ARCHIVE 使用归档文件或ARCHIVE设备;指定备份文件
--force-local
即使归档文件存在副本还是把它认为是本地归档
-F, --info-script=名称, --new-volume-script=名称
在每卷磁带最后运行脚本(隐含 -M)
-L, --tape-length=NUMBER 写入 NUMBER × 1024 字节后更换磁带
-M, --multi-volume 创建/列出/解压多卷归档文件
--rmt-command=COMMAND 使用指定的 rmt COMMAND 代替 rmt
--rsh-command=COMMAND 使用远程 COMMAND 代替 rsh
--volno-file=FILE 使用/更新 FILE 中的卷数
设备分块:
-b, --blocking-factor=BLOCKS 每个记录 BLOCKS x 512 字节
-B, --read-full-records 读取时重新分块(只对 4.2BSD 管道有效)
-i, --ignore-zeros 忽略归档中的零字节块(即文件结尾)
--record-size=NUMBER 每个记录的字节数 NUMBER乘以 512
选择归档格式:
-H, --format=FORMAT 创建指定格式的归档
FORMAT 是以下格式中的一种:
gnu GNU tar 1.13.x 格式
oldgnu GNU 格式 as per tar <= 1.12
pax POSIX 1003.1-2001 (pax) 格式
posix 等同于 pax
ustar POSIX 1003.1-1988 (ustar) 格式
v7 old V7 tar 格式
--old-archive, --portability
等同于 --format=v7
--pax-option=关键字[[:]=值][,关键字[[:]=值]]...
控制 pax 关键字
--posix 等同于 --format=posix
-V, --label=TEXT 创建带有卷名 TEXT
的归档;在列出/解压时,使用 TEXT
作为卷名的模式串
压缩选项:
-a, --auto-compress 使用归档后缀名来决定压缩程序
-I, --use-compress-program=PROG
通过 PROG 过滤(必须是能接受 -d
选项的程序)
-j, --bzip2 通过 bzip2 过滤归档
-J, --xz 通过 xz 过滤归档
--lzip 通过 lzip 过滤归档
--lzma 通过 lzma 过滤归档
--lzop
--no-auto-compress 不使用归档后缀名来决定压缩程序
-z, --gzip, --gunzip, --ungzip 通过 gzip 过滤归档
-Z, --compress, --uncompress 通过 compress 过滤归档
本地文件选择:
--add-file=FILE 添加指定的 FILE 至归档(如果名字以 -
开始会很有用的)
--backup[=CONTROL] 在删除前备份,选择 CONTROL 版本
-C, --directory=DIR 改变至目录 DIR
--exclude=PATTERN 排除以 PATTERN 指定的文件
--exclude-backups 排除备份和锁文件
--exclude-caches 除标识文件本身外,排除包含
CACHEDIR.TAG 的目录中的内容
--exclude-caches-all 排除包含 CACHEDIR.TAG 的目录
--exclude-caches-under 排除包含 CACHEDIR.TAG 的目录中所有内容
--exclude-tag=FILE 除 FILE 自身外,排除包含 FILE
的目录中的内容
--exclude-tag-all=FILE 排除包含 FILE 的目录
--exclude-tag-under=FILE 排除包含 FILE 的目录中的所有内容
--exclude-vcs 排除版本控制系统目录
-h, --dereference
跟踪符号链接;将它们所指向的文件归档并输出
--hard-dereference
跟踪硬链接;将它们所指向的文件归档并输出
-K, --starting-file=MEMBER-NAME
从归档中的 MEMBER-NAME 成员处开始
--newer-mtime=DATE 当只有数据改变时比较数据和时间
--no-null 禁用上一次的效果 --null 选项
--no-recursion 避免目录中的自动降级
--no-unquote 不以 -T 读取的文件名作为引用结束
--null -T 读取以空终止的名字,-C 禁用
-N, --newer=DATE-OR-FILE, --after-date=DATE-OR-FILE
只保存比 DATE-OR-FILE 更新的文件
--one-file-system 创建归档时保存在本地文件系统中
-P, --absolute-names 不要从文件名中清除引导符‘/
--recursion 目录递归(默认)
--suffix=STRING 在删除前备份,除非被环境变量
SIMPLE_BACKUP_SUFFIX
覆盖,否则覆盖常用后缀()
-T, --files-from=FILE 从 FILE
中获取文件名来解压或创建文件
--unquote 以 -T
读取的文件名作为引用结束(默认)
-X, --exclude-from=FILE 排除 FILE 中列出的模式串
文件名变换:
--strip-components=NUMBER 解压时从文件名中清除 NUMBER
个引导部分
--transform=EXPRESSION, --xform=EXPRESSION
使用 sed 代替 EXPRESSION
来进行文件名变换
文件名匹配选项(同时影响排除和包括模式串):
--anchored 模式串匹配文件名头部
--ignore-case 忽略大小写
--no-anchored 模式串匹配任意‘/’后字符(默认对
exclusion 有效)
--no-ignore-case 匹配大小写(默认)
--no-wildcards 逐字匹配字符串
--no-wildcards-match-slash 通配符不匹配‘/
--wildcards use wildcards (default)
--wildcards-match-slash
通配符匹配‘/(默认对排除操作有效)
提示性输出:
--checkpoint[=NUMBER] 每隔 NUMBER
个记录显示进度信息(默认为 10 个)
--checkpoint-action=ACTION 在每个检查点上执行 ACTION
--full-time print file time to its full resolution
--index-file=FILE 将详细输出发送至 FILE
-l, --check-links
只要不是所有链接都被输出就打印信息
--no-quote-chars=STRING 禁用来自 STRING 的字符引用
--quote-chars=STRING 来自 STRING 的额外的引用字符
--quoting-style=STYLE 设置名称引用风格;有效的 STYLE
值请参阅以下说明
-R, --block-number 每个信息都显示归档内的块数
--show-defaults 显示 tar 默认选项
--show-omitted-dirs
列表或解压时,列出每个不匹配查找标准的目录
--show-transformed-names, --show-stored-names
显示变换后的文件名或归档名
--totals[=SIGNAL] 处理归档后打印出总字节数;当此
SIGNAL 被触发时带参数 -
打印总字节数;允许的信号为:
SIGHUPSIGQUITSIGINTSIGUSR1 和
SIGUSR2同时也接受不带 SIG
前缀的信号名称
--utc 以 UTC 格式打印文件修改时间
-v, --verbose 详细地列出处理的文件
--warning=KEYWORD 警告控制:
-w, --interactive, --confirmation
每次操作都要求确认
兼容性选项:
-o 创建归档时,相当于
--old-archive展开归档时相当于
--no-same-owner
其它选项:
--restrict 禁用某些潜在的有危险的选项
--usage 显示简短的用法说明
除非以 --suffix 或SIMPLE_BACKUP_SUFFIX设置备份后缀否则备份后缀就是“~”
可以用 --backup 或VERSION_CONTROL设置版本控制可能的值为
none, off 从不做备份
t, numbered 进行编号备份
nil, existing
如果编号备份存在则进行编号备份,否则进行简单备份
never, simple 总是使用简单备份
--quoting-style 选项的有效参数为:
literal
shell
shell-always
c
c-maybe
escape
locale
clocale
此 tar 默认为:
--format=gnu -f- -b20 --quoting-style=escape --rmt-command=/etc/rmt
--rsh-command=/usr/bin/ssh
```
### 选项
```sh
-A或--catenate新增文件到以存在的备份文件
-B设置区块大小
-c或--create建立新的备份文件
-C <目录>:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
-d记录文件的差别
-x或--extract或--get解压缩tar文件
-t或--list列出备份文件的内容
-z或--gzip或--ungzip通过gzip指令处理备份文件
-Z或--compress或--uncompress通过compress指令处理备份文件
-f<备份文件>或--file=<备份文件>:指定备份文件;
-v或--verbose显示指令执行过程
-r添加文件到已经压缩的文件
-u添加改变了和现有的文件到已经存在的压缩文件
-j支持bzip2解压文件
-v显示操作过程
-l文件系统边界设置
-k保留原有文件不覆盖
-m保留文件不被覆盖
-w确认压缩文件的正确性
-p或--same-permissions用原来的文件权限还原文件
-P或--absolute-names文件名使用绝对名称不移除文件名称前的“/”号;
-N <日期格式> 或 --newer=<日期时间>:只将较指定日期更新的文件保存到备份文件里;
--exclude=<范本样式>:排除符合范本样式的文件。
# 下面的参数-f是必须的,-f: 使用档案名字,切记:这个参数是最后一个参数,后面只能接档案名
tar -cf all.tar *.jpg # 这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包-f指定包的文件名
tar -rf all.tar *.gif # 这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思
tar -uf all.tar logo.gif # 这条命令是更新原来tar包all.tar中logo.gif文件-u是表示更新文件的意思
tar -tf all.tar # 这条命令是列出all.tar包中所有文件-t是列出文件的意思
```
### 参数
文件或目录:指定要打包的文件或目录列表。
### 实例
```sh
- z有gzip属性的
- j有bz2属性的
- Z有compress属性的
- v显示所有过程
- O将文件解开到标准输出
```
下面的参数-f是必须的
-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。
```bash
tar -cf all.tar *.jpg
# 这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包-f指定包的文件名。
tar -rf all.tar *.gif
# 这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
tar -uf all.tar logo.gif
# 这条命令是更新原来tar包all.tar中logo.gif文件-u是表示更新文件的意思。
tar -tf all.tar
# 这条命令是列出all.tar包中所有文件-t是列出文件的意思
```
#### zip格式
压缩: zip -r [目标文件名].zip [原文件/目录名]
解压: unzip [原文件名].zip
注:-r参数代表递归
#### tar格式该格式仅仅打包不压缩
## zip格式
压缩: zip -r [目标文件名].zip [原文件/目录名]
解压: unzip [原文件名].zip
注:-r参数代表递归
## tar格式该格式仅仅打包不压缩
打包tar -cvf [目标文件名].tar [原文件名/目录名]
解包tar -xvf [原文件名].tar
c参数代表create创建x参数代表extract解包v参数代表verbose详细信息f参数代表filename文件名所以f后必须接文件名。
解包tar -xvf [原文件名].tar
c参数代表create创建x参数代表extract解包v参数代表verbose详细信息f参数代表filename文件名所以f后必须接文件名
tar -cf archive.tar foo bar # 从文件 foo 和 bar 创建归档文件archive.tar
tar -tvf archive.tar # 详细列举归档文件 archive.tar中的所有文件
tar -xf archive.tar # 展开归档文件 archive.tar中的所有文件
#### tar.gz格式
## tar.gz格式
方式一利用前面已经打包好的tar文件直接用压缩命令。
压缩gzip [原文件名].tar
解压gunzip [原文件名].tar.gz
压缩gzip [原文件名].tar
解压gunzip [原文件名].tar.gz
方式二:一次性打包并压缩、解压并解包
打包并压缩: tar -zcvf [目标文件名].tar.gz [原文件名/目录名]
解压并解包: tar -zxvf [原文件名].tar.gz
z代表用gzip算法来压缩/解压。
打包并压缩: tar -zcvf [目标文件名].tar.gz [原文件名/目录名]
解压并解包: tar -zxvf [原文件名].tar.gz
z代表用gzip算法来压缩/解压。
#### tar.bz2格式
## tar.bz2格式
方式一利用已经打包好的tar文件直接执行压缩命令
压缩bzip2 [原文件名].tar
解压bunzip2 [原文件名].tar.bz2
压缩bzip2 [原文件名].tar
解压bunzip2 [原文件名].tar.bz2
方式二:一次性打包并压缩、解压并解包
打包并压缩: tar -jcvf [目标文件名].tar.bz2 [原文件名/目录名]
解压并解包: tar -jxvf [原文件名].tar.bz2
小写j代表用bzip2算法来压缩/解压。
方式二:一次性打包并压缩、解压并解包
打包并压缩: tar -jcvf [目标文件名].tar.bz2 [原文件名/目录名]
解压并解包: tar -jxvf [原文件名].tar.bz2
小写j代表用bzip2算法来压缩/解压
#### tar.xz格式
## tar.xz格式
方式一利用已经打包好的tar文件直接用压缩命令
压缩xz [原文件名].tar
解压unxz [原文件名].tar.xz
压缩xz [原文件名].tar
解压unxz [原文件名].tar.xz
方式二:一次性打包并压缩、解压并解包
打包并压缩: tar -Jcvf [目标文件名].tar.xz [原文件名/目录名]
解压并解包: tar -Jxvf [原文件名].tar.xz
大写J代表用xz算法来压缩/解压。
方式二:一次性打包并压缩、解压并解包
打包并压缩: tar -Jcvf [目标文件名].tar.xz [原文件名/目录名]
解压并解包: tar -Jxvf [原文件名].tar.xz
大写J代表用xz算法来压缩/解压。
#### tar.Z格式已过时
## tar.Z格式已过时
方式一利用已经打包好的tar文件直接用压缩命令
压缩compress [原文件名].tar
解压uncompress [原文件名].tar.Z
压缩compress [原文件名].tar
解压uncompress [原文件名].tar.Z
方式二:一次性打包并压缩、解压并解包
打包并压缩: tar -Zcvf [目标文件名].tar.Z [原文件名/目录名]
解压并解包: tar -Zxvf [原文件名].tar.Z
大写Z代表用ncompress算法来压缩/解压。另ncompress是早期Unix系统的压缩格式但由于ncompress的压缩率太低现已过时。
#### jar格式
方式二:一次性打包并压缩、解压并解包
打包并压缩: tar -Zcvf [目标文件名].tar.Z [原文件名/目录名]
解压并解包: tar -Zxvf [原文件名].tar.Z
大写Z代表用ncompress算法来压缩/解压。另ncompress是早期Unix系统的压缩格式但由于ncompress的压缩率太低现已过时。
压缩jar -cvf [目标文件名].jar [原文件名/目录名]
解压jar -xvf [原文件名].jar
如果是打包的是Java类库并且该类库中存在主类那么需要写一个META-INF/MANIFEST.MF配置文件内容如下
## jar格式
Manifest-Version: 1.0
Created-By: 1.6.0_27 (Sun Microsystems Inc.)
Main-class: the_name_of_the_main_class_should_be_put_here
然后用如下命令打包:
压缩jar -cvf [目标文件名].jar [原文件名/目录名]
解压jar -xvf [原文件名].jar
如果是打包的是Java类库并且该类库中存在主类那么需要写一个META-INF/MANIFEST.MF配置文件内容如下
Manifest-Version: 1.0
Created-By: 1.6.0_27 (Sun Microsystems Inc.)
Main-class: the_name_of_the_main_class_should_be_put_here
然后用如下命令打包:
jar -cvfm [目标文件名].jar META-INF/MANIFEST.MF [原文件名/目录名]
这样以后就能用“java -jar [文件名].jar”命令直接运行主类中的public static void main方法了。
#### 7z格式
压缩7z a [目标文件名].7z [原文件名/目录名]
解压7z x [原文件名].7z
这个7z解压命令支持rar格式
## 7z格式
压缩7z a [目标文件名].7z [原文件名/目录名]
解压7z x [原文件名].7z
这个7z解压命令支持rar格式
7z x [原文件名].rar
#### 其它例子
**将文件全部打包成tar包**
```
tar -cvf log.tar log2012.log 仅打包,不压缩!
tar -zcvf log.tar.gz log2012.log 打包后,以 gzip 压缩
tar -jcvf log.tar.bz2 log2012.log 打包后,以 bzip2 压缩
```
在选项`f`之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。 如果加`z`选项,则以.tar.gz或.tgz来代表gzip压缩过的tar包如果加`j`选项,则以.tar.bz2来作为tar包名。
**查阅上述tar包内有哪些文件**
## 其它例子
# 将文件全部打包成tar包
tar -cvf log.tar log2012.log 仅打包,不压缩!
tar -zcvf log.tar.gz log2012.log 打包后,以 gzip 压缩
tar -jcvf log.tar.bz2 log2012.log 打包后,以 bzip2 压缩
tar -c dir/ | gzip | gpg -c | ssh user@remote 'dd of=dir.tar.gz.gpg' # 将目录dir/压缩打包并放到远程机器上
tar -c /dir/to/copy | cd /where/to/ && tar -x -p # 拷贝目录copy/到目录/where/to/并保持文件属性
tar -c /dir/to/copy | ssh -C user@remote 'cd /where/to/ && tar -x -p' # 拷贝目录copy/到远程目录/where/to/并保持文件属性
```
tar -ztvf log.tar.gz
```
由于我们使用 gzip 压缩的log.tar.gz所以要查阅log.tar.gz包内的文件时就得要加上`z`这个选项了。
**将tar包解压缩**
```
tar -zxvf /opt/soft/test/log.tar.gz
```
```sh
# 在选项`f`之后的文件档名是自己取的,我们习惯上都用.tar来作为辨识。如果加`z`选项,则以.tar.gz或.tgz来代表gzip压缩过的tar包如果加`j`选项,则以.tar.bz2来作为tar包名
在预设的情况下,我们可以将压缩档在任何地方解开的
tar -ztvf log.tar.gz # 查阅上述tar包内有哪些文件
# 由于我们使用 gzip 压缩的log.tar.gz所以要查阅log.tar.gz包内的文件时就得要加上`z`这个选项了
**只将tar内的部分文件解压出来**
tar -zxvf /opt/soft/test/log.tar.gz # 将tar包解压缩
```
# 在预设的情况下,我们可以将压缩档在任何地方解开的;只将tar内的部分文件解压出来
tar -zxvf /opt/soft/test/log30.tar.gz log2013.log
```
我可以透过`tar -ztvf`来查阅 tar 包内的文件名称如果单只要一个文件就可以透过这个方式来解压部分文件
**文件备份下来,并且保存其权限**
```
tar -zcvpf log31.tar.gz log2014.log log2015.log log2016.log
```
这个`-p`的属性是很重要的,尤其是当您要保留原本文件的属性时。
**在文件夹当中,比某个日期新的文件才备份**
```
# 可以通过`tar -ztvf`来查阅tar包内的文件名称如果单只要一个文件就可以透过这个方式来解压部分文件
tar -zcvpf log31.tar.gz log2014.log log2015.log log2016.log # 文件备份下来,并且保存其权限;这个`-p`的属性是很重要的,尤其是当您要保留原本文件的属性时。在文件夹当中,比某个日期新的文件才备份
tar -N "2012/11/13" -zcvf log17.tar.gz test
```
**备份文件夹内容是排除部分文件:**
tar --exclude scf/service -zcvf scf.tar.gz scf/* # 备份文件夹内容是排除部分文件
# 其实最简单的使用 tar就只要记忆底下的方式即可
tar -jcv -f filename.tar.bz2 # 要被压缩的文件或目录名称
tar -jtv -f filename.tar.bz2 # 要查询的压缩文件
tar -jxv -f filename.tar.bz2 -C # 要解压缩的目录
```
tar --exclude scf/service -zcvf scf.tar.gz scf/*
```
**其实最简单的使用 tar 就只要记忆底下的方式即可:**
```
 tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称
 tar -jtv -f filename.tar.bz2
解压缩tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -1,186 +1,43 @@
time
===
# **time**
统计给定命令所花费的总时间
## 实例
## 补充说明
**time命令** 用于统计给定命令所花费的总时间。
### 语法
```
time(参数)
```
### 参数
指令:指定需要运行的额指令及其参数。
### 实例
当测试一个程序或比较不同算法时执行时间是非常重要的一个好的算法应该是用时最短的。所有类UNIX系统都包含time命令使用这个命令可以统计时间消耗。例如
```
[root@localhost ~]# time ls
anaconda-ks.cfg install.log install.log.syslog satools text
当测试一个程序或比较不同算法时执行时间是非常重要的一个好的算法应该是用时最短的。所有类UNIX系统都包含time命令使用这个命令可以统计时间消耗。例如time command
```sh
real 0m0.009s
user 0m0.002s
sys 0m0.007s
```
输出的信息分别显示了该命令所花费的real时间、user时间和sys时间。
* real时间是指挂钟时间也就是命令开始执行到结束的时间。这个短时间包括其他进程所占用的时间片和进程被阻塞时所花费的时间。
* user时间是指进程花费在用户模式中的CPU时间这是唯一真正用于执行进程所花费的时间其他进程和花费阻塞状态中的时间没有计算在内。
* sys时间是指花费在内核模式中的CPU时间代表在内核中执系统调用所花费的时间这也是真正由进程使用的CPU时间。
shell内建也有一个time命令当运行time时候是调用的系统内建命令应为系统内建的功能有限所以需要时间其他功能需要使用time命令可执行二进制文件`/usr/bin/time`。
使用`-o`选项将执行时间写入到文件中:
```
/usr/bin/time -o outfile.txt ls
```
使用`-a`选项追加信息:
```
/usr/bin/time -a -o outfile.txt ls
```
使用`-f`选项格式化时间输出:
```
/usr/bin/time -f "time: %U" ls
输出的信息分别显示了该命令所花费的real时间、user时间和sys时间
1real时间是指挂钟时间也就是命令开始执行到结束的时间。这个短时间包括其他进程所占用的时间片和进程被阻塞时所花费的时间。
2user时间是指进程花费在用户模式中的CPU时间这是唯一真正用于执行进程所花费的时间其他进程和花费阻塞状态中的时间没有计算在内。
3sys时间是指花费在内核模式中的CPU时间代表在内核中执系统调用所花费的时间这也是真正由进程使用的CPU时间。
```
`-f`选项后的参数:
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<th>参数</th>
<th>描述</th>
</tr>
<tr>
<td>%E</td>
<td>real时间显示格式为[小时:]分钟:秒</td>
</tr>
<tr>
<td>%U</td>
<td>user时间。</td>
</tr>
<tr>
<td>%S</td>
<td>sys时间。</td>
</tr>
<tr>
<td>%C</td>
<td>进行计时的命令名称和命令行参数。</td>
</tr>
<tr>
<td>%D</td>
<td>进程非共享数据区域以KB为单位。</td>
</tr>
<tr>
<td>%x</td>
<td>命令退出状态。</td>
</tr>
<tr>
<td>%k</td>
<td>进程接收到的信号数量。</td>
</tr>
<tr>
<td>%w</td>
<td>进程被交换出主存的次数。</td>
</tr>
<tr>
<td>%Z</td>
<td>系统的页面大小,这是一个系统常量,不用系统中常量值也不同。</td>
</tr>
<tr>
<td>%P</td>
<td>进程所获取的CPU时间百分百这个值等于user+system时间除以总共的运行时间。</td>
</tr>
<tr>
<td>%K</td>
<td>进程的平均总内存使用量data+stack+text单位是KB。</td>
</tr>
<tr>
<td>%w</td>
<td>进程主动进行上下文切换的次数例如等待I/O操作完成。</td>
</tr>
<tr>
<td>%c</td>
<td>进程被迫进行上下文切换的次数(由于时间片到期)。</td>
</tr>
</tbody>
</table>
shell内建也有一个time命令当运行time时候是调用的系统内建命令应为系统内建的功能有限所以需要时间其他功能需要使用time命令可执行二进制文件`/usr/bin/time`。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->
```sh
/usr/bin/time -o outfile.txt ls # 使用`-o`选项将执行时间写入到文件中
/usr/bin/time -a -o outfile.txt ls # 使用`-a`选项追加信息
/usr/bin/time -f "time: %U" ls # 使用`-f`选项格式化时间输出
```
`-f`选项后的参数:
| 参数 | 描述 |
| :------: | :------: |
| %E | real时间显示格式为[小时:]分钟:秒 |
| %U | user时间 |
| %S | sys时间 |
| %C | 进行计时的命令名称和命令行参数 |
| %D | 进程非共享数据区域以KB为单位 |
| %x | 命令退出状态 |
| %k | 进程接收到的信号数量 |
| %Z | 进程被交换出主存的次数 |
| %Z | 系统的页面大小,这是一个系统常量,不用系统中常量值也不同 |
| %P | 进程所获取的CPU时间百分百这个值等于user+system时间除以总共的运行时间 |
| %K | 进程的平均总内存使用量data+stack+text单位是KB |
| %w | 进程主动进行上下文切换的次数例如等待I/O操作完成 |
| %c | 进程被迫进行上下文切换的次数(由于时间片到期) |

@ -74,9 +74,9 @@ IP)
--ignore-case 匹配文件/目录时忽略大小写
-4,--inet4-only 仅连接至 IPv4 地址
-6,--inet6-only 仅连接至 IPv6 地址
--prefer-family=地址族 首先连接至指定家族IPv6IPv4
--prefer-family=地址族 首先连接至指定家族IPv6IPv4
的地址
--user=用户 将 ftp 和 http 的用户名均设置为
--user=用户 将 ftp 和 http 的用户名均设置为
--password=密码 将 ftp 和 http 的密码均设置为 <
--ask-password 提示输入密码
--use-askpass=命令 指定用于请求用户名和密码的凭据管
@ -293,11 +293,21 @@ wget -r -A.pdf url
wget ftp-url
wget--ftp-user=USERNAME--ftp-password=PASSWORD url
# 可以使用wget来完成ftp链接的下载
# 可以使用wget来完成ftp链接的下载
# 使用wget匿名ftp下载
# 使用wget匿名ftp下载
wget ftp-url
# 使用wget用户名和密码认证的ftp下载
# 使用wget用户名和密码认证的ftp下载
wget--ftp-user=USERNAME--ftp-password=PASSWORD url
cd cmdline && wget -nd -pHEKk <http://www.pixelbeat.org/cmdline.html> # 在当前目录中下载指定网页及其相关的文件使其可完全浏览
wget -c <http://www.example.com/large.file #
wget -r -nd -np -l1 -A '*.jpg' http://www.example.com/ # 批量下载文件到当前目录中
wget ftp://remote/file[1-9].iso/ # 下载FTP站上的整个目录
wget -q -O- http://www.pixelbeat.org/timeline.html | grep 'a href' | head # 匹配后直接处理输出
echo 'wget url' | at 01:00 # 在下午一点钟下载指定文件到当前目录
wget --limit-rate=20k url # 限制下载速度这里限制到20KB/s
wget -nv --spider --force-html -i bookmarks.html # 检查文件中的链接是否存在
wget --mirror http://www.example.com/ # 更新网站的本地拷贝可以方便地用于cron
```

@ -1,51 +1,29 @@
which
===
# **which**
查找并显示给定命令的绝对路径
## 说明
## 补充说明
**which命令** 用于查找并显示给定命令的绝对路径环境变量PATH中保存了查找命令时需要遍历的目录。which指令会在环境变量$PATH设置的目录里查找符合条件的文件。也就是说使用which命令就可以看到某个系统命令是否存在以及执行的到底是哪一个位置的命令
**which命令** 用于查找并显示给定命令的绝对路径环境变量PATH中保存了查找命令时需要遍历的目录。which指令会在环境变量$PATH设置的目录里查找符合条件的文件。也就是说使用which命令就可以看到某个系统命令是否存在以及执行的到底是哪一个位置的命令。
### 语法
```
which(选项)(参数)
```
### 选项
```
-n<文件名长度>:制定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名;
-p<文件名长度>:与-n参数相同但此处的<文件名长度>包含了文件的路径;
-w指定输出时栏位的宽度
-V显示版本信息。
```
### 参数
指令名:指令名列表。
### 实例
查找文件、显示命令路径:
## 选项
```info
--skip-dot Skip directories in PATH that start with a dot
--skip-tilde Skip directories in PATH that start with a tilde
--show-dot Don't expand a dot to current directory in output
--show-tilde Output a tilde for HOME directory for non-root
--tty-only Stop processing options on the right if not on tty
--all, -a 输出所有在PATH匹配的可执行文件
--read-alias, -i Read list of aliases from stdin
--skip-alias Ignore option --read-alias; don't read stdin
--read-functions Read shell functions from stdin
--skip-functions Ignore option --read-functions; don't read stdin
```
[root@localhost ~]# which pwd
/bin/pwd
[root@localhost ~]# which adduser
/usr/sbin/adduser
```
说明which是根据使用者所配置的 PATH 变量内的目录去搜寻可运行档的所以不同的 PATH 配置内容所找到的命令当然不一样的
## 实例
用 which 去找出 cd
```sh
# 说明which是根据使用者所配置的 PATH 变量内的目录去搜寻可运行档的所以不同的 PATH 配置内容所找到的命令当然不一样的
which cd # 用 which 去找出 cd
# cd 这个常用的命令找不到为什么呢这是因为cd是bash内建的命令但是 which 默认是找 PATH 内所规范的目录,所以一定找不到的!
```
[root@localhost ~]# which cd
cd: shell built-in command
```
cd 这个常用的命令竟然找不到啊!为什么呢?这是因为 cd 是bash 内建的命令! 但是 which 默认是找 PATH 内所规范的目录,所以当然一定找不到的!
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

Loading…
Cancel
Save