From ef7d250b59397f5a2e06eb916d2cfa1bbf7c24ad Mon Sep 17 00:00:00 2001 From: Huck Huang Date: Wed, 5 Apr 2017 17:58:08 +0800 Subject: [PATCH 0001/1284] Change lower case to upper case: accept --> ACCEPT --- command/iptables.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/command/iptables.md b/command/iptables.md index 17a51fe1de1..4acd0afd26a 100644 --- a/command/iptables.md +++ b/command/iptables.md @@ -1,6 +1,6 @@ iptables === - + Linux上常用的防火墙软件 ## 补充说明 @@ -57,7 +57,7 @@ iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协 动作包括: -* **accept** :接收数据包。 +* **ACCEPT** :接收数据包。 * **DROP** :丢弃数据包。 * **REDIRECT** :重定向、映射、透明代理。 * **SNAT** :源地址转换。 From d10a720c549f9d61c141d619762dba0479d7f2e2 Mon Sep 17 00:00:00 2001 From: __FresHmaN Date: Sun, 9 Apr 2017 09:55:12 +0800 Subject: [PATCH 0002/1284] Fix the wrong example code --- command/tail.md | 94 ++++++++++++++++++++++++------------------------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/command/tail.md b/command/tail.md index 2cf67b8c895..2b0e2018dd0 100644 --- a/command/tail.md +++ b/command/tail.md @@ -1,47 +1,47 @@ -tail -=== - -在屏幕上显示指定文件的末尾若干行 - -## 补充说明 - -**tail命令** 用于输入文件中的尾部内容。tail命令默认在屏幕上显示指定文件的末尾10行。如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题。如果没有指定文件或者文件名为“-”,则读取标准输入。 - -注意:如果表示字节或行数的N值之前有一个”+”号,则从文件开头的第N项开始显示,而不是显示文件的最后N项。N值后面可以有后缀:b表示512,k表示1024,m表示1 048576(1M)。 - -### 语法 - -``` -tail(选项)(参数) -``` - -### 选项 - -``` ---retry:即是在tail命令启动时,文件不可访问或者文件稍后变得不可访问,都始终尝试打开文件。使用此选项时需要与选项“——follow=name”连用; --c或——bytes=:输出文件尾部的N(N为整数)个字节内容; --f或;--follow:显示文件最新追加的内容。“name”表示以文件名的方式监视文件的变化。“-f”与“-fdescriptor”等效; --F:与选项“-follow=name”和“--retry"连用时功能相同; --n或——line=:输出文件的尾部N(N位数字)行内容。 ---pid=<进程号>:与“-f”选项连用,当指定的进程号的进程终止后,自动退出tail命令; --q或——quiet或——silent:当有多个文件参数时,不输出各个文件名; --s<秒数>或——sleep-interal=<秒数>:与“-f”选项连用,指定监视文件变化时间隔的秒数; --v或——verbose:当有多个文件参数时,总是输出各个文件名; ---help:显示指令的帮助信息; ---version:显示指令的版本信息。 -``` - -### 参数 - -文件列表:指定要显示尾部内容的文件列表。 - -### 实例 - -``` -tail file (显示文件file的最后10行) -tail +20 file (显示文件file的内容,从第20行至文件末尾) -tail -c 10 file (显示文件file的最后10个字符) -``` - - - \ No newline at end of file +tail +=== + +在屏幕上显示指定文件的末尾若干行 + +## 补充说明 + +**tail命令** 用于输入文件中的尾部内容。tail命令默认在屏幕上显示指定文件的末尾10行。如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题。如果没有指定文件或者文件名为“-”,则读取标准输入。 + +注意:如果表示字节或行数的N值之前有一个”+”号,则从文件开头的第N项开始显示,而不是显示文件的最后N项。N值后面可以有后缀:b表示512,k表示1024,m表示1 048576(1M)。 + +### 语法 + +``` +tail(选项)(参数) +``` + +### 选项 + +``` +--retry:即是在tail命令启动时,文件不可访问或者文件稍后变得不可访问,都始终尝试打开文件。使用此选项时需要与选项“——follow=name”连用; +-c或——bytes=:输出文件尾部的N(N为整数)个字节内容; +-f或;--follow:显示文件最新追加的内容。“name”表示以文件名的方式监视文件的变化。“-f”与“-fdescriptor”等效; +-F:与选项“-follow=name”和“--retry"连用时功能相同; +-n或——line=:输出文件的尾部N(N位数字)行内容。 +--pid=<进程号>:与“-f”选项连用,当指定的进程号的进程终止后,自动退出tail命令; +-q或——quiet或——silent:当有多个文件参数时,不输出各个文件名; +-s<秒数>或——sleep-interal=<秒数>:与“-f”选项连用,指定监视文件变化时间隔的秒数; +-v或——verbose:当有多个文件参数时,总是输出各个文件名; +--help:显示指令的帮助信息; +--version:显示指令的版本信息。 +``` + +### 参数 + +文件列表:指定要显示尾部内容的文件列表。 + +### 实例 + +``` +tail file (显示文件file的最后10行) +tail -n +20 file (显示文件file的内容,从第20行至文件末尾) +tail -c 10 file (显示文件file的最后10个字符) +``` + + + From 19c0b35047d4c1b81b4fa519f39f7e3f73c88f00 Mon Sep 17 00:00:00 2001 From: __FresHmaN Date: Sun, 9 Apr 2017 09:32:10 +0800 Subject: [PATCH 0003/1284] [chore] Fix typo --- command/awk.md | 3386 ++++++++++++++++++++++++------------------------ 1 file changed, 1693 insertions(+), 1693 deletions(-) diff --git a/command/awk.md b/command/awk.md index af1d00281a1..d82b62227a4 100644 --- a/command/awk.md +++ b/command/awk.md @@ -1,1693 +1,1693 @@ -awk -=== - -文本和数据进行处理的编程语言 - -## 补充说明 - -**awk** 是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。 - -## awk命令格式和选项 - - **语法形式** - -``` -awk [options] 'script' var=value file(s) -awk [options] -f scriptfile var=value file(s) -``` - - **常用命令选项** - -* **-F fs   ** fs指定输入分隔符,fs可以是字符串或正则表达式,如-F: -* **-v var=value   ** 赋值一个用户定义变量,将外部变量传递给awk -* **-f scripfile  ** 从脚本文件中读取awk命令 -* **-m[fr] val   ** 对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。 - -## awk模式和操作 - -awk脚本是由模式和操作组成的。 - -### 模式 - -模式可以是以下任意一个: - -* /正则表达式/:使用通配符的扩展集。 -* 关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试。 -* 模式匹配表达式:用运算符`~`(匹配)和`~!`(不匹配)。 -* BEGIN语句块、pattern语句块、END语句块:参见awk的工作原理 - -### 操作 - -操作由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内,主要部分是: - -* 变量或数组赋值 -* 输出命令 -* 内置函数 -* 控制流语句 - -## awk脚本基本结构 - -``` -awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file -``` - -一个awk脚本通常由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成,这三个部分是可选的。任意一个部分都可以不出现在脚本中,脚本通常是被 **单引号** 或 **双引号** 中,例如: - -``` -awk 'BEGIN{ i=0 } { i++ } END{ print i }' filename -awk "BEGIN{ i=0 } { i++ } END{ print i }" filename -``` - -### awk的工作原理 - -``` -awk 'BEGIN{ commands } pattern{ commands } END{ commands }' -``` - -* 第一步:执行`BEGIN{ commands }`语句块中的语句; -* 第二步:从文件或标准输入(stdin)读取一行,然后执行`pattern{ commands }`语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。 -* 第三步:当读至输入流末尾时,执行`END{ commands }`语句块。 - - **BEGIN语句块** 在awk开始从输入流中读取行 **之前** 被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中。 - - **END语句块** 在awk从输入流中读取完所有的行 **之后** 即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块。 - - **pattern语句块** 中的通用命令是最重要的部分,它也是可选的。如果没有提供pattern语句块,则默认执行`{ print }`,即打印每一个读取到的行,awk读取的每一行都会执行该语句块。 - - **示例** - -``` -echo -e "A line 1nA line 2" | awk 'BEGIN{ print "Start" } { print } END{ print "End" }' -Start -A line 1 -A line 2 -End -``` - -当使用不带参数的`print`时,它就打印当前行,当`print`的参数是以逗号进行分隔时,打印时则以空格作为定界符。在awk的print语句块中双引号是被当作拼接符使用,例如: - -``` -echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1,var2,var3; }' -v1 v2 v3 -``` - -双引号拼接使用: - -``` -echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1"="var2"="var3; }' -v1=v2=v3 -``` - -{ }类似一个循环体,会对文件中的每一行进行迭代,通常变量初始化语句(如:i=0)以及打印文件头部的语句放入BEGIN语句块中,将打印的结果等语句放在END语句块中。 - -## awk内置变量(预定义变量) - -说明:[A][N][P][G]表示第一个支持变量的工具,[A]=awk、[N]=nawk、[P]=POSIXawk、[G]=gawk - -``` - **$n** 当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。 - **$0** 这个变量包含执行过程中当前行的文本内容。 -[N] **ARGC** 命令行参数的数目。 -[G] **ARGIND** 命令行中当前文件的位置(从0开始算)。 -[N] **ARGV** 包含命令行参数的数组。 -[G] **CONVFMT** 数字转换格式(默认值为%.6g)。 -[P] **ENVIRON** 环境变量关联数组。 -[N] **ERRNO** 最后一个系统错误的描述。 -[G] **FIELDWIDTHS** 字段宽度列表(用空格键分隔)。 -[A] **FILENAME** 当前输入文件的名。 -[P] **FNR** 同NR,但相对于当前文件。 -[A] **FS** 字段分隔符(默认是任何空格)。 -[G] **IGNORECASE** 如果为真,则进行忽略大小写的匹配。 -[A] **NF** 表示字段数,在执行过程中对应于当前的字段数。 -[A] **NR** 表示记录数,在执行过程中对应于当前的行号。 -[A] **OFMT** 数字的输出格式(默认值是%.6g)。 -[A] **OFS** 输出字段分隔符(默认值是一个空格)。 -[A] **ORS** 输出记录分隔符(默认值是一个换行符)。 -[A] **RS** 记录分隔符(默认是一个换行符)。 -[N] **RSTART** 由match函数所匹配的字符串的第一个位置。 -[N] **RLENGTH** 由match函数所匹配的字符串的长度。 -[N] **SUBSEP** 数组下标分隔符(默认值是34)。 -``` - - **示例** - -``` -echo -e "line1 f2 f3nline2 f4 f5nline3 f6 f7" | awk '{print "Line No:"NR", No of fields:"NF, "$0="$0, "$1="$1, "$2="$2, "$3="$3}' -Line No:1, No of fields:3 $0=line1 f2 f3 $1=line1 $2=f2 $3=f3 -Line No:2, No of fields:3 $0=line2 f4 f5 $1=line2 $2=f4 $3=f5 -Line No:3, No of fields:3 $0=line3 f6 f7 $1=line3 $2=f6 $3=f7 -``` - -使用`print $NF`可以打印出一行中的最后一个字段,使用`$(NF-1)`则是打印倒数第二个字段,其他以此类推: - -``` -echo -e "line1 f2 f3n line2 f4 f5" | awk '{print $NF}' -f3 -f5 -``` - -``` -echo -e "line1 f2 f3n line2 f4 f5" | awk '{print $(NF-1)}' -f2 -f4 - -``` - -打印每一行的第二和第三个字段: - -``` -awk '{ print $2,$3 }' filename -``` - -统计文件中的行数: - -``` -awk 'END{ print NR }' filename -``` - -以上命令只使用了END语句块,在读入每一行的时,awk会将NR更新为对应的行号,当到达最后一行NR的值就是最后一行的行号,所以END语句块中的NR就是文件的行数。 - -一个每一行中第一个字段值累加的例子: - -``` -seq 5 | awk 'BEGIN{ sum=0; print "总和:" } { print $1"+"; sum+=$1 } END{ print "等于"; print sum }' -总和: -1+ -2+ -3+ -4+ -5+ -等于 -15 -``` - -## 将外部变量值传递给awk - -借助 **`-v`选项** ,可以将外部值(并非来自stdin)传递给awk: - -``` -VAR=10000 -echo | awk -v VARIABLE=$VAR '{ print VARIABLE }' -``` - -另一种传递外部变量方法: - -``` -var1="aaa" -var2="bbb" -echo | awk '{ print v1,v2 }' v1=$var1 v2=$var2 -``` - -当输入来自于文件时使用: - -``` -awk '{ print v1,v2 }' v1=$var1 v2=$var2 filename -``` - -以上方法中,变量之间用空格分隔作为awk的命令行参数跟随在BEGIN、{}和END语句块之后。 - -## awk运算与判断 - -作为一种程序设计语言所应具有的特点之一,awk支持多种运算,这些运算与C语言提供的基本相同。awk还提供了一系列内置的运算函数(如log、sqr、cos、sin等)和一些用于对字符串进行操作(运算)的函数(如length、substr等等)。这些函数的引用大大的提高了awk的运算功能。作为对条件转移指令的一部分,关系判断是每种程序设计语言都具备的功能,awk也不例外,awk中允许进行多种测试,作为样式匹配,还提供了模式匹配表达式~(匹配)和~!(不匹配)。作为对测试的一种扩充,awk也支持用逻辑运算符。 - -### 算术运算符 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
运算符描述
+ -加,减
* / &乘,除与求余
+ - !一元加,减和逻辑非
^ ***求幂
++ --增加或减少,作为前缀或后缀
- -例: - -``` -awk 'BEGIN{a="b";print a++,++a;}' -0 2 -``` - -注意:所有用作算术运算符进行操作,操作数自动转为数值,所有非数值都变为0 - -### 赋值运算符 - - - - - - - - - - - - - - - - - - - - - - - - - - - -
运算符描述
= += -= *= /= %= ^= **=赋值语句
- -例: - -``` -a+=5; 等价于:a=a+5; 其它同类 -``` - -### 逻辑运算符 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
运算符描述
||逻辑或
&&逻辑与
- -例: - -``` -awk 'BEGIN{a=1;b=2;print (a>5 && b<=2),(a>5 || b<=2);}' -0 1 -``` - -### 正则运算符 - - - - - - - - - - - - - - - - - - - - - - - - - - - -
运算符描述
~ ~!匹配正则表达式和不匹配正则表达式
- -例: - -``` -awk 'BEGIN{a="100testa";if(a ~ /^100*/){print "ok";}}' -ok -``` - -### 关系运算符 - - - - - - - - - - - - - - - - - - - - - - - - - - - -
运算符描述
< <= > >= != ==关系运算符
- -例: - -``` -awk 'BEGIN{a=11;if(a >= 9){print "ok";}}' -ok -``` - -注意:> < 可以作为字符串比较,也可以用作数值比较,关键看操作数如果是字符串就会转换为字符串比较。两个都为数字才转为数值比较。字符串比较:按照ASCII码顺序比较。 - -### 其它运算符 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
运算符描述
$字段引用
空格字符串连接符
?:C条件表达式
in数组中是否存在某键值
- -例: - -``` -awk 'BEGIN{a="b";print a=="b"?"ok":"err";}' -ok -``` - -``` -awk 'BEGIN{a="b";arr[0]="b";arr[1]="c";print (a in arr);}' -0 -``` - -``` -awk 'BEGIN{a="b";arr[0]="b";arr["b"]="c";print (a in arr);}' -1 -``` - -### 运算级优先级表 - -!级别越高越优先 -级别越高越优先 - -## awk高级输入输出 - -### 读取下一条记录 - -awk中`next`语句使用:在循环逐行匹配,如果遇到next,就会跳过当前行,直接忽略下面语句。而进行下一行匹配。net语句一般用于多行合并: - -``` -cat text.txt -a -b -c -d -e - -awk 'NR%2==1{next}{print NR,$0;}' text.txt -2 b -4 d -``` - -当记录行号除以2余1,就跳过当前行。下面的`print NR,$0`也不会执行。下一行开始,程序有开始判断`NR%2`值。这个时候记录行号是`:2` ,就会执行下面语句块:`'print NR,$0'` - -分析发现需要将包含有“web”行进行跳过,然后需要将内容与下面行合并为一行: - -``` -cat text.txt -web01[192.168.2.100] -httpd ok -tomcat ok -sendmail ok -web02[192.168.2.101] -httpd ok -postfix ok -web03[192.168.2.102] -mysqld ok -httpd ok -0 -awk '/^web/{T=$0;next;}{print T":t"$0;}' test.txt -web01[192.168.2.100]: httpd ok -web01[192.168.2.100]: tomcat ok -web01[192.168.2.100]: sendmail ok -web02[192.168.2.101]: httpd ok -web02[192.168.2.101]: postfix ok -web03[192.168.2.102]: mysqld ok -web03[192.168.2.102]: httpd ok -``` - -### 简单地读取一条记录 - -`awk getline`用法:输出重定向需用到`getline函数`。getline从标准输入、管道或者当前正在处理的文件之外的其他输入文件获得输入。它负责从输入获得下一行的内容,并给NF,NR和FNR等内建变量赋值。如果得到一条记录,getline函数返回1,如果到达文件的末尾就返回0,如果出现错误,例如打开文件失败,就返回-1。 - -getline语法:getline var,变量var包含了特定行的内容。 - -awk getline从整体上来说,用法说明: - -* **当其左右无重定向符`|`或`<`时:** getline作用于当前文件,读入当前文件的第一行给其后跟的变量`var`或`$0`(无变量),应该注意到,由于awk在处理getline之前已经读入了一行,所以getline得到的返回结果是隔行的。 -* **当其左右有重定向符`|`或`<`时:** getline则作用于定向输入文件,由于该文件是刚打开,并没有被awk读入一行,只是getline读入,那么getline返回的是该文件的第一行,而不是隔行。 - - **示例:** - -执行linux的`date`命令,并通过管道输出给`getline`,然后再把输出赋值给自定义变量out,并打印它: - -``` -awk 'BEGIN{ "date" | getline out; print out }' test -``` - -执行shell的date命令,并通过管道输出给getline,然后getline从管道中读取并将输入赋值给out,split函数把变量out转化成数组mon,然后打印数组mon的第二个元素: - -``` -awk 'BEGIN{ "date" | getline out; split(out,mon); print mon[2] }' test -``` - -命令ls的输出传递给geline作为输入,循环使getline从ls的输出中读取一行,并把它打印到屏幕。这里没有输入文件,因为BEGIN块在打开输入文件前执行,所以可以忽略输入文件。 - -``` -awk 'BEGIN{ while( "ls" | getline) print }' -``` - -### 关闭文件 - -awk中允许在程序中关闭一个输入或输出文件,方法是使用awk的close语句。 - -``` -close("filename") -``` - -filename可以是getline打开的文件,也可以是stdin,包含文件名的变量或者getline使用的确切命令。或一个输出文件,可以是stdout,包含文件名的变量或使用管道的确切命令。 - -### 输出到一个文件 - -awk中允许用如下方式将结果输出到一个文件: - -``` -echo | awk '{printf("hello word!n") > "datafile"}' -或 -echo | awk '{printf("hello word!n") >> "datafile"}' -``` - -## 设置字段定界符 - -默认的字段定界符是空格,可以使用`-F "定界符"` 明确指定一个定界符: - -``` -awk -F: '{ print $NF }' /etc/passwd -或 -awk 'BEGIN{ FS=":" } { print $NF }' /etc/passwd -``` - -在`BEGIN语句块`中则可以用`OFS=“定界符”`设置输出字段的定界符。 - -## 流程控制语句 - -在linux awk的while、do-while和for语句中允许使用break,continue语句来控制流程走向,也允许使用exit这样的语句来退出。break中断当前正在执行的循环并跳到循环外执行下一条语句。if 是流程选择用法。awk中,流程控制语句,语法结构,与c语言类型。有了这些语句,其实很多shell程序都可以交给awk,而且性能是非常快的。下面是各个语句用法。 - -### 条件判断语句 - -``` -if(表达式) - 语句1 -else - 语句2 -``` - -格式中语句1可以是多个语句,为了方便判断和阅读,最好将多个语句用{}括起来。awk分枝结构允许嵌套,其格式为: - -``` -if(表达式) - {语句1} -else if(表达式) - {语句2} -else - {语句3} -``` - -示例: - -``` -awk 'BEGIN{ -test=100; -if(test>90){ - print "very good"; - } - else if(test>60){ - print "good"; - } - else{ - print "no pass"; - } -}' - -very good -``` - -每条命令语句后面可以用`;` **分号** 结尾。 - -### 循环语句 - -#### while语句 - -``` -while(表达式) - {语句} -``` - -示例: - -``` -awk 'BEGIN{ -test=100; -total=0; -while(i<=test){ - total+=i; - i++; -} -print total; -}' -5050 -``` - -#### for循环 - -for循环有两种格式: - -格式1: - -``` -for(变量 in 数组) - {语句} -``` - -示例: - -``` -awk 'BEGIN{ -for(k in ENVIRON){ - print k"="ENVIRON[k]; -} - -}' -TERM=linux -G_BROKEN_FILENAMES=1 -SHLVL=1 -pwd=/root/text -... -logname=root -HOME=/root -SSH_CLIENT=192.168.1.21 53087 22 -``` - -注:ENVIRON是awk常量,是子典型数组。 - -格式2: - -``` -for(变量;条件;表达式) - {语句} -``` - -示例: - -``` -awk 'BEGIN{ -total=0; -for(i=0;i<=100;i++){ - total+=i; -} -print total; -}' -5050 -``` - -#### do循环 - -``` -do -{语句} while(条件) -``` - -例子: - -``` -awk 'BEGIN{ -total=0; -i=0; -do {total+=i;i++;} while(i<=100) - print total; -}' -5050 -``` - -### 其他语句 - -* **break** 当 break 语句用于 while 或 for 语句时,导致退出程序循环。 -* **continue** 当 continue 语句用于 while 或 for 语句时,使程序循环移动到下一个迭代。 -* **next** 能能够导致读入下一个输入行,并返回到脚本的顶部。这可以避免对当前输入行执行其他的操作过程。 -* **exit** 语句使主输入循环退出并将控制转移到END,如果END存在的话。如果没有定义END规则,或在END中应用exit语句,则终止脚本的执行。 - -## 数组应用 - -数组是awk的灵魂,处理文本中最不能少的就是它的数组处理。因为数组索引(下标)可以是数字和字符串在awk中数组叫做关联数组(associative arrays)。awk 中的数组不必提前声明,也不必声明大小。数组元素用0或空字符串来初始化,这根据上下文而定。 - -### 数组的定义 - -数字做数组索引(下标): - -``` -Array[1]="sun" -Array[2]="kai" -``` - -字符串做数组索引(下标): - -``` -Array["first"]="www" -Array"[last"]="name" -Array["birth"]="1987" -``` - -使用中`print Array[1]`会打印出sun;使用`print Array[2]`会打印出kai;使用`print["birth"]`会得到1987。 - - **读取数组的值** - -``` -{ for(item in array) {print array[item]}; } #输出的顺序是随机的 -{ for(i=1;i<=len;i++) {print array[i]}; } #Len是数组的长度 -``` - -### 数组相关函数 - - **得到数组长度:** - -``` -awk 'BEGIN{info="it is a test";lens=split(info,tA," ");print length(tA),lens;}' -4 4 -``` - -length返回字符串以及数组长度,split进行分割字符串为数组,也会返回分割得到数组长度。 - -``` -awk 'BEGIN{info="it is a test";split(info,tA," ");print asort(tA);}' -4 -``` - -asort对数组进行排序,返回数组长度。 - - **输出数组内容(无序,有序输出):** - -``` -awk 'BEGIN{info="it is a test";split(info,tA," ");for(k in tA){print k,tA[k];}}' -4 test -1 it -2 is -3 a -``` - -`for…in`输出,因为数组是关联数组,默认是无序的。所以通过`for…in`得到是无序的数组。如果需要得到有序数组,需要通过下标获得。 - -``` -awk 'BEGIN{info="it is a test";tlen=split(info,tA," ");for(k=1;k<=tlen;k++){print k,tA[k];}}' -1 it -2 is -3 a -4 test -``` - -注意:数组下标是从1开始,与C数组不一样。 - - **判断键值存在以及删除键值:** - -``` -#错误的判断方法: -awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";if(tB["c"]!="1"){print "no found";};for(k in tB){print k,tB[k];}}' -no found -a a1 -b b1 -c -``` - -以上出现奇怪问题,`tB[“c”]`没有定义,但是循环时候,发现已经存在该键值,它的值为空,这里需要注意,awk数组是关联数组,只要通过数组引用它的key,就会自动创建改序列。 - -``` -#正确判断方法: -awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";if( "c" in tB){print "ok";};for(k in tB){print k,tB[k];}}' -a a1 -b b1 -``` - -`if(key in array)`通过这种方法判断数组中是否包含`key`键值。 - -``` -#删除键值: -[chengmo@localhost ~]$ awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";delete tB["a"];for(k in tB){print k,tB[k];}}' -b b1 -``` - -`delete array[key]`可以删除,对应数组`key`的,序列值。 - -### 二维、多维数组使用 - -awk的多维数组在本质上是一维数组,更确切一点,awk在存储上并不支持多维数组。awk提供了逻辑上模拟二维数组的访问方式。例如,`array[2,4]=1`这样的访问是允许的。awk使用一个特殊的字符串`SUBSEP(�34)`作为分割字段,在上面的例子中,关联数组array存储的键值实际上是2�344。 - -类似一维数组的成员测试,多维数组可以使用`if ( (i,j) in array)`这样的语法,但是下标必须放置在圆括号中。类似一维数组的循环访问,多维数组使用`for ( item in array )`这样的语法遍历数组。与一维数组不同的是,多维数组必须使用`split()`函数来访问单独的下标分量。 - -``` -awk 'BEGIN{ -for(i=1;i<=9;i++){ - for(j=1;j<=9;j++){ - tarr[i,j]=i*j; print i,"*",j,"=",tarr[i,j]; - } -} -}' -1 * 1 = 1 -1 * 2 = 2 -1 * 3 = 3 -1 * 4 = 4 -1 * 5 = 5 -1 * 6 = 6 -... -9 * 6 = 54 -9 * 7 = 63 -9 * 8 = 72 -9 * 9 = 81 -``` - -可以通过`array[k,k2]`引用获得数组内容。 - -另一种方法: - -``` -awk 'BEGIN{ -for(i=1;i<=9;i++){ - for(j=1;j<=9;j++){ - tarr[i,j]=i*j; - } -} -for(m in tarr){ - split(m,tarr2,SUBSEP); print tarr2[1],"*",tarr2[2],"=",tarr[m]; -} -}' -``` - -## 内置函数 - -awk内置函数,主要分以下3种类似:算数函数、字符串函数、其它一般函数、时间函数。 - -### 算术函数 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
格式描述
atan2( y, x )返回 y/x 的反正切。
cos( x )返回 x 的余弦;x 是弧度。
sin( x )返回 x 的正弦;x 是弧度。
exp( x )返回 x 幂函数。
log( x )返回 x 的自然对数。
sqrt( x )返回 x 平方根。
int( x )返回 x 的截断至整数的值。
rand( )返回任意数字 n,其中 0 <= n < 1。
srand( [expr] )将 rand 函数的种子值设置为 Expr 参数的值,或如果省略 Expr 参数则使用某天的时间。返回先前的种子值。
- -举例说明: - -``` -awk 'BEGIN{OFMT="%.3f";fs=sin(1);fe=exp(10);fl=log(10);fi=int(3.1415);print fs,fe,fl,fi;}' -0.841 22026.466 2.303 3 - -``` - -OFMT 设置输出数据格式是保留3位小数。 - -获得随机数: - -``` -awk 'BEGIN{srand();fr=int(100*rand());print fr;}' -78 -awk 'BEGIN{srand();fr=int(100*rand());print fr;}' -31 -awk 'BEGIN{srand();fr=int(100*rand());print fr;}' -41 -``` - -### 字符串函数 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
格式描述
gsub( Ere, Repl, [ In ] )除了正则表达式所有具体值被替代这点,它和 sub 函数完全一样地执行。
sub( Ere, Repl, [ In ] )用 Repl 参数指定的字符串替换 In 参数指定的字符串中的由 Ere 参数指定的扩展正则表达式的第一个具体值。sub 函数返回替换的数量。出现在 Repl 参数指定的字符串中的 &(和符号)由 In 参数指定的与 Ere 参数的指定的扩展正则表达式匹配的字符串替换。如果未指定 In 参数,缺省值是整个记录($0 记录变量)。
index( String1, String2 )在由 String1 参数指定的字符串(其中有出现 String2 指定的参数)中,返回位置,从 1 开始编号。如果 String2 参数不在 String1 参数中出现,则返回 0(零)。
length [(String)]返回 String 参数指定的字符串的长度(字符形式)。如果未给出 String 参数,则返回整个记录的长度($0 记录变量)。
blength [(String)]返回 String 参数指定的字符串的长度(以字节为单位)。如果未给出 String 参数,则返回整个记录的长度($0 记录变量)。
substr( String, M, [ N ] )返回具有 N 参数指定的字符数量子串。子串从 String 参数指定的字符串取得,其字符以 M 参数指定的位置开始。M 参数指定为将 String 参数中的第一个字符作为编号 1。如果未指定 N 参数,则子串的长度将是 M 参数指定的位置到 String 参数的末尾 的长度。
match( String, Ere )在 String 参数指定的字符串(Ere 参数指定的扩展正则表达式出现在其中)中返回位置(字符形式),从 1 开始编号,或如果 Ere 参数不出现,则返回 0(零)。RSTART 特殊变量设置为返回值。RLENGTH 特殊变量设置为匹配的字符串的长度,或如果未找到任何匹配,则设置为 -1(负一)。
split( String, A, [Ere] )将 String 参数指定的参数分割为数组元素 A[1], A[2], . . ., A[n],并返回 n 变量的值。此分隔可以通过 Ere 参数指定的扩展正则表达式进行,或用当前字段分隔符(FS 特殊变量)来进行(如果没有给出 Ere 参数)。除非上下文指明特定的元素还应具有一个数字值,否则 A 数组中的元素用字符串值来创建。
tolower( String )返回 String 参数指定的字符串,字符串中每个大写字符将更改为小写。大写和小写的映射由当前语言环境的 LC_CTYPE 范畴定义。
toupper( String )返回 String 参数指定的字符串,字符串中每个小写字符将更改为大写。大写和小写的映射由当前语言环境的 LC_CTYPE 范畴定义。
sprintf(Format, Expr, Expr, . . . )根据 Format 参数指定的 printf 子例程格式字符串来格式化 Expr 参数指定的表达式并返回最后生成的字符串。
- -注:Ere都可以是正则表达式。 - - **gsub,sub使用** - -``` -awk 'BEGIN{info="this is a test2010test!";gsub(/[0-9]+/,"!",info);print info}' -this is a test!test! -``` - -在 info中查找满足正则表达式,`/[0-9]+/` 用`””`替换,并且替换后的值,赋值给info 未给info值,默认是`$0` - - **查找字符串(index使用)** - -``` -awk 'BEGIN{info="this is a test2010test!";print index(info,"test")?"ok":"no found";}' -ok -``` - -未找到,返回0 - - **正则表达式匹配查找(match使用)** - -``` -awk 'BEGIN{info="this is a test2010test!";print match(info,/[0-9]+/)?"ok":"no found";}' -ok -``` - - **截取字符串(substr使用)** - -``` -[wangsl@centos5 ~]$ awk 'BEGIN{info="this is a test2010test!";print substr(info,4,10);}' -s is a tes -``` - -从第 4个 字符开始,截取10个长度字符串 - - **字符串分割(split使用)** - -``` -awk 'BEGIN{info="this is a test";split(info,tA," ");print length(tA);for(k in tA){print k,tA[k];}}' -4 -4 test -1 this -2 is -3 a -``` - -分割info,动态创建数组tA,这里比较有意思,`awk for …in`循环,是一个无序的循环。 并不是从数组下标1…n ,因此使用时候需要注意。 - - **格式化字符串输出(sprintf使用)** - -格式化字符串格式: - -其中格式化字符串包括两部分内容:一部分是正常字符,这些字符将按原样输出; 另一部分是格式化规定字符,以`"%"`开始,后跟一个或几个规定字符,用来确定输出内容格式。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
格式描述
%d十进制有符号整数
%u十进制无符号整数
%f浮点数
%s字符串
%c单个字符
%p指针的值
%e指数形式的浮点数
%x%X 无符号以十六进制表示的整数
%o无符号以八进制表示的整数
%g自动选择合适的表示法
- -``` -awk 'BEGIN{n1=124.113;n2=-1.224;n3=1.2345; printf("%.2f,%.2u,%.2g,%X,%on",n1,n2,n3,n1,n1);}' -124.11,18446744073709551615,1.2,7C,174 -``` - -### 一般函数 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
格式描述
close( Expression )用同一个带字符串值的 Expression 参数来关闭由 print 或 printf 语句打开的或调用 getline 函数打开的文件或管道。如果文件或管道成功关闭,则返回 0;其它情况下返回非零值。如果打算写一个文件,并稍后在同一个程序中读取文件,则 close 语句是必需的。
system(command )执行 Command 参数指定的命令,并返回退出状态。等同于 system 子例程。
Expression | getline [ Variable ]从来自 Expression 参数指定的命令的输出中通过管道传送的流中读取一个输入记录,并将该记录的值指定给 Variable 参数指定的变量。如果当前未打开将 Expression 参数的值作为其命令名称的流,则创建流。创建的流等同于调用 popen 子例程,此时 Command 参数取 Expression 参数的值且 Mode 参数设置为一个是 r 的值。只要流保留打开且 Expression 参数求得同一个字符串,则对 getline 函数的每次后续调用读取另一个记录。如果未指定 Variable 参数,则 $0 记录变量和 NF 特殊变量设置为从流读取的记录。
getline [ Variable ] < Expression从 Expression 参数指定的文件读取输入的下一个记录,并将 Variable 参数指定的变量设置为该记录的值。只要流保留打开且 Expression 参数对同一个字符串求值,则对 getline 函数的每次后续调用读取另一个记录。如果未指定 Variable 参数,则 $0 记录变量和 NF 特殊变量设置为从流读取的记录。
getline [ Variable ]将 Variable 参数指定的变量设置为从当前输入文件读取的下一个输入记录。如果未指定 Variable 参数,则 $0 记录变量设置为该记录的值,还将设置 NF、NR 和 FNR 特殊变量。
- - **打开外部文件(close用法)** - -``` -awk 'BEGIN{while("cat /etc/passwd"|getline){print $0;};close("/etc/passwd");}' -root:x:0:0:root:/root:/bin/bash -bin:x:1:1:bin:/bin:/sbin/nologin -daemon:x:2:2:daemon:/sbin:/sbin/nologin -``` - - **逐行读取外部文件(getline使用方法)** - -``` -awk 'BEGIN{while(getline < "/etc/passwd"){print $0;};close("/etc/passwd");}' -root:x:0:0:root:/root:/bin/bash -bin:x:1:1:bin:/bin:/sbin/nologin -daemon:x:2:2:daemon:/sbin:/sbin/nologin -``` - -``` -awk 'BEGIN{print "Enter your name:";getline name;print name;}' -Enter your name: -chengmo -chengmo -``` - - **调用外部应用程序(system使用方法)** - -``` -awk 'BEGIN{b=system("ls -al");print b;}' -total 42092 -drwxr-xr-x 14 chengmo chengmo 4096 09-30 17:47 . -drwxr-xr-x 95 root root 4096 10-08 14:01 .. -``` - -b返回值,是执行结果。 - -### 时间函数 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
格式描述
函数名说明
mktime( YYYY MM dd HH MM ss[ DST])生成时间格式
strftime([format [, timestamp]])格式化时间输出,将时间戳转为时间字符串 -具体格式,见下表.
systime()得到时间戳,返回从1970年1月1日开始到当前时间(不计闰年)的整秒数
- - **建指定时间(mktime使用)** - -``` -awk 'BEGIN{tstamp=mktime("2001 01 01 12 12 12");print strftime("%c",tstamp);}' -2001年01月01日 星期一 12时12分12秒 -``` - -``` -awk 'BEGIN{tstamp1=mktime("2001 01 01 12 12 12");tstamp2=mktime("2001 02 01 0 0 0");print tstamp2-tstamp1;}' -2634468 -``` - -求2个时间段中间时间差,介绍了strftime使用方法 - -``` -awk 'BEGIN{tstamp1=mktime("2001 01 01 12 12 12");tstamp2=systime();print tstamp2-tstamp1;}' -308201392 -``` - - **strftime日期和时间格式说明符** - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
格式描述
%a星期几的缩写(Sun)
%A星期几的完整写法(Sunday)
%b月名的缩写(Oct)
%B月名的完整写法(October)
%c本地日期和时间
%d十进制日期
%D日期 08/20/99
%e日期,如果只有一位会补上一个空格
%H用十进制表示24小时格式的小时
%I用十进制表示12小时格式的小时
%j从1月1日起一年中的第几天
%m十进制表示的月份
%M十进制表示的分钟
%p12小时表示法(AM/PM)
%S十进制表示的秒
%U十进制表示的一年中的第几个星期(星期天作为一个星期的开始)
%w十进制表示的星期几(星期天是0)
%W十进制表示的一年中的第几个星期(星期一作为一个星期的开始)
%x重新设置本地日期(08/20/99)
%X重新设置本地时间(12:00:00)
%y两位数字表示的年(99)
%Y当前月份
%Z时区(PDT)
%%百分号(%)
- - - \ No newline at end of file +awk +=== + +文本和数据进行处理的编程语言 + +## 补充说明 + +**awk** 是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。 + +## awk命令格式和选项 + + **语法形式** + +``` +awk [options] 'script' var=value file(s) +awk [options] -f scriptfile var=value file(s) +``` + + **常用命令选项** + +* **-F fs   ** fs指定输入分隔符,fs可以是字符串或正则表达式,如-F: +* **-v var=value   ** 赋值一个用户定义变量,将外部变量传递给awk +* **-f scripfile  ** 从脚本文件中读取awk命令 +* **-m[fr] val   ** 对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。 + +## awk模式和操作 + +awk脚本是由模式和操作组成的。 + +### 模式 + +模式可以是以下任意一个: + +* /正则表达式/:使用通配符的扩展集。 +* 关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试。 +* 模式匹配表达式:用运算符`~`(匹配)和`~!`(不匹配)。 +* BEGIN语句块、pattern语句块、END语句块:参见awk的工作原理 + +### 操作 + +操作由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内,主要部分是: + +* 变量或数组赋值 +* 输出命令 +* 内置函数 +* 控制流语句 + +## awk脚本基本结构 + +``` +awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file +``` + +一个awk脚本通常由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成,这三个部分是可选的。任意一个部分都可以不出现在脚本中,脚本通常是被 **单引号** 或 **双引号** 中,例如: + +``` +awk 'BEGIN{ i=0 } { i++ } END{ print i }' filename +awk "BEGIN{ i=0 } { i++ } END{ print i }" filename +``` + +### awk的工作原理 + +``` +awk 'BEGIN{ commands } pattern{ commands } END{ commands }' +``` + +* 第一步:执行`BEGIN{ commands }`语句块中的语句; +* 第二步:从文件或标准输入(stdin)读取一行,然后执行`pattern{ commands }`语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。 +* 第三步:当读至输入流末尾时,执行`END{ commands }`语句块。 + + **BEGIN语句块** 在awk开始从输入流中读取行 **之前** 被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中。 + + **END语句块** 在awk从输入流中读取完所有的行 **之后** 即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块。 + + **pattern语句块** 中的通用命令是最重要的部分,它也是可选的。如果没有提供pattern语句块,则默认执行`{ print }`,即打印每一个读取到的行,awk读取的每一行都会执行该语句块。 + + **示例** + +``` +echo -e "A line 1nA line 2" | awk 'BEGIN{ print "Start" } { print } END{ print "End" }' +Start +A line 1 +A line 2 +End +``` + +当使用不带参数的`print`时,它就打印当前行,当`print`的参数是以逗号进行分隔时,打印时则以空格作为定界符。在awk的print语句块中双引号是被当作拼接符使用,例如: + +``` +echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1,var2,var3; }' +v1 v2 v3 +``` + +双引号拼接使用: + +``` +echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1"="var2"="var3; }' +v1=v2=v3 +``` + +{ }类似一个循环体,会对文件中的每一行进行迭代,通常变量初始化语句(如:i=0)以及打印文件头部的语句放入BEGIN语句块中,将打印的结果等语句放在END语句块中。 + +## awk内置变量(预定义变量) + +说明:[A][N][P][G]表示第一个支持变量的工具,[A]=awk、[N]=nawk、[P]=POSIXawk、[G]=gawk + +``` + **$n** 当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。 + **$0** 这个变量包含执行过程中当前行的文本内容。 +[N] **ARGC** 命令行参数的数目。 +[G] **ARGIND** 命令行中当前文件的位置(从0开始算)。 +[N] **ARGV** 包含命令行参数的数组。 +[G] **CONVFMT** 数字转换格式(默认值为%.6g)。 +[P] **ENVIRON** 环境变量关联数组。 +[N] **ERRNO** 最后一个系统错误的描述。 +[G] **FIELDWIDTHS** 字段宽度列表(用空格键分隔)。 +[A] **FILENAME** 当前输入文件的名。 +[P] **FNR** 同NR,但相对于当前文件。 +[A] **FS** 字段分隔符(默认是任何空格)。 +[G] **IGNORECASE** 如果为真,则进行忽略大小写的匹配。 +[A] **NF** 表示字段数,在执行过程中对应于当前的字段数。 +[A] **NR** 表示记录数,在执行过程中对应于当前的行号。 +[A] **OFMT** 数字的输出格式(默认值是%.6g)。 +[A] **OFS** 输出字段分隔符(默认值是一个空格)。 +[A] **ORS** 输出记录分隔符(默认值是一个换行符)。 +[A] **RS** 记录分隔符(默认是一个换行符)。 +[N] **RSTART** 由match函数所匹配的字符串的第一个位置。 +[N] **RLENGTH** 由match函数所匹配的字符串的长度。 +[N] **SUBSEP** 数组下标分隔符(默认值是34)。 +``` + + **示例** + +``` +echo -e "line1 f2 f3nline2 f4 f5nline3 f6 f7" | awk '{print "Line No:"NR", No of fields:"NF, "$0="$0, "$1="$1, "$2="$2, "$3="$3}' +Line No:1, No of fields:3 $0=line1 f2 f3 $1=line1 $2=f2 $3=f3 +Line No:2, No of fields:3 $0=line2 f4 f5 $1=line2 $2=f4 $3=f5 +Line No:3, No of fields:3 $0=line3 f6 f7 $1=line3 $2=f6 $3=f7 +``` + +使用`print $NF`可以打印出一行中的最后一个字段,使用`$(NF-1)`则是打印倒数第二个字段,其他以此类推: + +``` +echo -e "line1 f2 f3n line2 f4 f5" | awk '{print $NF}' +f3 +f5 +``` + +``` +echo -e "line1 f2 f3n line2 f4 f5" | awk '{print $(NF-1)}' +f2 +f4 + +``` + +打印每一行的第二和第三个字段: + +``` +awk '{ print $2,$3 }' filename +``` + +统计文件中的行数: + +``` +awk 'END{ print NR }' filename +``` + +以上命令只使用了END语句块,在读入每一行的时,awk会将NR更新为对应的行号,当到达最后一行NR的值就是最后一行的行号,所以END语句块中的NR就是文件的行数。 + +一个每一行中第一个字段值累加的例子: + +``` +seq 5 | awk 'BEGIN{ sum=0; print "总和:" } { print $1"+"; sum+=$1 } END{ print "等于"; print sum }' +总和: +1+ +2+ +3+ +4+ +5+ +等于 +15 +``` + +## 将外部变量值传递给awk + +借助 **`-v`选项** ,可以将外部值(并非来自stdin)传递给awk: + +``` +VAR=10000 +echo | awk -v VARIABLE=$VAR '{ print VARIABLE }' +``` + +另一种传递外部变量方法: + +``` +var1="aaa" +var2="bbb" +echo | awk '{ print v1,v2 }' v1=$var1 v2=$var2 +``` + +当输入来自于文件时使用: + +``` +awk '{ print v1,v2 }' v1=$var1 v2=$var2 filename +``` + +以上方法中,变量之间用空格分隔作为awk的命令行参数跟随在BEGIN、{}和END语句块之后。 + +## awk运算与判断 + +作为一种程序设计语言所应具有的特点之一,awk支持多种运算,这些运算与C语言提供的基本相同。awk还提供了一系列内置的运算函数(如log、sqr、cos、sin等)和一些用于对字符串进行操作(运算)的函数(如length、substr等等)。这些函数的引用大大的提高了awk的运算功能。作为对条件转移指令的一部分,关系判断是每种程序设计语言都具备的功能,awk也不例外,awk中允许进行多种测试,作为样式匹配,还提供了模式匹配表达式~(匹配)和~!(不匹配)。作为对测试的一种扩充,awk也支持用逻辑运算符。 + +### 算术运算符 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
运算符描述
+ -加,减
* / &乘,除与求余
+ - !一元加,减和逻辑非
^ ***求幂
++ --增加或减少,作为前缀或后缀
+ +例: + +``` +awk 'BEGIN{a="b";print a++,++a;}' +0 2 +``` + +注意:所有用作算术运算符进行操作,操作数自动转为数值,所有非数值都变为0 + +### 赋值运算符 + + + + + + + + + + + + + + + + + + + + + + + + + + + +
运算符描述
= += -= *= /= %= ^= **=赋值语句
+ +例: + +``` +a+=5; 等价于:a=a+5; 其它同类 +``` + +### 逻辑运算符 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
运算符描述
||逻辑或
&&逻辑与
+ +例: + +``` +awk 'BEGIN{a=1;b=2;print (a>5 && b<=2),(a>5 || b<=2);}' +0 1 +``` + +### 正则运算符 + + + + + + + + + + + + + + + + + + + + + + + + + + + +
运算符描述
~ ~!匹配正则表达式和不匹配正则表达式
+ +例: + +``` +awk 'BEGIN{a="100testa";if(a ~ /^100*/){print "ok";}}' +ok +``` + +### 关系运算符 + + + + + + + + + + + + + + + + + + + + + + + + + + + +
运算符描述
< <= > >= != ==关系运算符
+ +例: + +``` +awk 'BEGIN{a=11;if(a >= 9){print "ok";}}' +ok +``` + +注意:> < 可以作为字符串比较,也可以用作数值比较,关键看操作数如果是字符串就会转换为字符串比较。两个都为数字才转为数值比较。字符串比较:按照ASCII码顺序比较。 + +### 其它运算符 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
运算符描述
$字段引用
空格字符串连接符
?:C条件表达式
in数组中是否存在某键值
+ +例: + +``` +awk 'BEGIN{a="b";print a=="b"?"ok":"err";}' +ok +``` + +``` +awk 'BEGIN{a="b";arr[0]="b";arr[1]="c";print (a in arr);}' +0 +``` + +``` +awk 'BEGIN{a="b";arr[0]="b";arr["b"]="c";print (a in arr);}' +1 +``` + +### 运算级优先级表 + +!级别越高越优先 +级别越高越优先 + +## awk高级输入输出 + +### 读取下一条记录 + +awk中`next`语句使用:在循环逐行匹配,如果遇到next,就会跳过当前行,直接忽略下面语句。而进行下一行匹配。next语句一般用于多行合并: + +``` +cat text.txt +a +b +c +d +e + +awk 'NR%2==1{next}{print NR,$0;}' text.txt +2 b +4 d +``` + +当记录行号除以2余1,就跳过当前行。下面的`print NR,$0`也不会执行。下一行开始,程序有开始判断`NR%2`值。这个时候记录行号是`:2` ,就会执行下面语句块:`'print NR,$0'` + +分析发现需要将包含有“web”行进行跳过,然后需要将内容与下面行合并为一行: + +``` +cat text.txt +web01[192.168.2.100] +httpd ok +tomcat ok +sendmail ok +web02[192.168.2.101] +httpd ok +postfix ok +web03[192.168.2.102] +mysqld ok +httpd ok +0 +awk '/^web/{T=$0;next;}{print T":t"$0;}' test.txt +web01[192.168.2.100]: httpd ok +web01[192.168.2.100]: tomcat ok +web01[192.168.2.100]: sendmail ok +web02[192.168.2.101]: httpd ok +web02[192.168.2.101]: postfix ok +web03[192.168.2.102]: mysqld ok +web03[192.168.2.102]: httpd ok +``` + +### 简单地读取一条记录 + +`awk getline`用法:输出重定向需用到`getline函数`。getline从标准输入、管道或者当前正在处理的文件之外的其他输入文件获得输入。它负责从输入获得下一行的内容,并给NF,NR和FNR等内建变量赋值。如果得到一条记录,getline函数返回1,如果到达文件的末尾就返回0,如果出现错误,例如打开文件失败,就返回-1。 + +getline语法:getline var,变量var包含了特定行的内容。 + +awk getline从整体上来说,用法说明: + +* **当其左右无重定向符`|`或`<`时:** getline作用于当前文件,读入当前文件的第一行给其后跟的变量`var`或`$0`(无变量),应该注意到,由于awk在处理getline之前已经读入了一行,所以getline得到的返回结果是隔行的。 +* **当其左右有重定向符`|`或`<`时:** getline则作用于定向输入文件,由于该文件是刚打开,并没有被awk读入一行,只是getline读入,那么getline返回的是该文件的第一行,而不是隔行。 + + **示例:** + +执行linux的`date`命令,并通过管道输出给`getline`,然后再把输出赋值给自定义变量out,并打印它: + +``` +awk 'BEGIN{ "date" | getline out; print out }' test +``` + +执行shell的date命令,并通过管道输出给getline,然后getline从管道中读取并将输入赋值给out,split函数把变量out转化成数组mon,然后打印数组mon的第二个元素: + +``` +awk 'BEGIN{ "date" | getline out; split(out,mon); print mon[2] }' test +``` + +命令ls的输出传递给geline作为输入,循环使getline从ls的输出中读取一行,并把它打印到屏幕。这里没有输入文件,因为BEGIN块在打开输入文件前执行,所以可以忽略输入文件。 + +``` +awk 'BEGIN{ while( "ls" | getline) print }' +``` + +### 关闭文件 + +awk中允许在程序中关闭一个输入或输出文件,方法是使用awk的close语句。 + +``` +close("filename") +``` + +filename可以是getline打开的文件,也可以是stdin,包含文件名的变量或者getline使用的确切命令。或一个输出文件,可以是stdout,包含文件名的变量或使用管道的确切命令。 + +### 输出到一个文件 + +awk中允许用如下方式将结果输出到一个文件: + +``` +echo | awk '{printf("hello word!n") > "datafile"}' +或 +echo | awk '{printf("hello word!n") >> "datafile"}' +``` + +## 设置字段定界符 + +默认的字段定界符是空格,可以使用`-F "定界符"` 明确指定一个定界符: + +``` +awk -F: '{ print $NF }' /etc/passwd +或 +awk 'BEGIN{ FS=":" } { print $NF }' /etc/passwd +``` + +在`BEGIN语句块`中则可以用`OFS=“定界符”`设置输出字段的定界符。 + +## 流程控制语句 + +在linux awk的while、do-while和for语句中允许使用break,continue语句来控制流程走向,也允许使用exit这样的语句来退出。break中断当前正在执行的循环并跳到循环外执行下一条语句。if 是流程选择用法。awk中,流程控制语句,语法结构,与c语言类型。有了这些语句,其实很多shell程序都可以交给awk,而且性能是非常快的。下面是各个语句用法。 + +### 条件判断语句 + +``` +if(表达式) + 语句1 +else + 语句2 +``` + +格式中语句1可以是多个语句,为了方便判断和阅读,最好将多个语句用{}括起来。awk分枝结构允许嵌套,其格式为: + +``` +if(表达式) + {语句1} +else if(表达式) + {语句2} +else + {语句3} +``` + +示例: + +``` +awk 'BEGIN{ +test=100; +if(test>90){ + print "very good"; + } + else if(test>60){ + print "good"; + } + else{ + print "no pass"; + } +}' + +very good +``` + +每条命令语句后面可以用`;` **分号** 结尾。 + +### 循环语句 + +#### while语句 + +``` +while(表达式) + {语句} +``` + +示例: + +``` +awk 'BEGIN{ +test=100; +total=0; +while(i<=test){ + total+=i; + i++; +} +print total; +}' +5050 +``` + +#### for循环 + +for循环有两种格式: + +格式1: + +``` +for(变量 in 数组) + {语句} +``` + +示例: + +``` +awk 'BEGIN{ +for(k in ENVIRON){ + print k"="ENVIRON[k]; +} + +}' +TERM=linux +G_BROKEN_FILENAMES=1 +SHLVL=1 +pwd=/root/text +... +logname=root +HOME=/root +SSH_CLIENT=192.168.1.21 53087 22 +``` + +注:ENVIRON是awk常量,是子典型数组。 + +格式2: + +``` +for(变量;条件;表达式) + {语句} +``` + +示例: + +``` +awk 'BEGIN{ +total=0; +for(i=0;i<=100;i++){ + total+=i; +} +print total; +}' +5050 +``` + +#### do循环 + +``` +do +{语句} while(条件) +``` + +例子: + +``` +awk 'BEGIN{ +total=0; +i=0; +do {total+=i;i++;} while(i<=100) + print total; +}' +5050 +``` + +### 其他语句 + +* **break** 当 break 语句用于 while 或 for 语句时,导致退出程序循环。 +* **continue** 当 continue 语句用于 while 或 for 语句时,使程序循环移动到下一个迭代。 +* **next** 能能够导致读入下一个输入行,并返回到脚本的顶部。这可以避免对当前输入行执行其他的操作过程。 +* **exit** 语句使主输入循环退出并将控制转移到END,如果END存在的话。如果没有定义END规则,或在END中应用exit语句,则终止脚本的执行。 + +## 数组应用 + +数组是awk的灵魂,处理文本中最不能少的就是它的数组处理。因为数组索引(下标)可以是数字和字符串在awk中数组叫做关联数组(associative arrays)。awk 中的数组不必提前声明,也不必声明大小。数组元素用0或空字符串来初始化,这根据上下文而定。 + +### 数组的定义 + +数字做数组索引(下标): + +``` +Array[1]="sun" +Array[2]="kai" +``` + +字符串做数组索引(下标): + +``` +Array["first"]="www" +Array"[last"]="name" +Array["birth"]="1987" +``` + +使用中`print Array[1]`会打印出sun;使用`print Array[2]`会打印出kai;使用`print["birth"]`会得到1987。 + + **读取数组的值** + +``` +{ for(item in array) {print array[item]}; } #输出的顺序是随机的 +{ for(i=1;i<=len;i++) {print array[i]}; } #Len是数组的长度 +``` + +### 数组相关函数 + + **得到数组长度:** + +``` +awk 'BEGIN{info="it is a test";lens=split(info,tA," ");print length(tA),lens;}' +4 4 +``` + +length返回字符串以及数组长度,split进行分割字符串为数组,也会返回分割得到数组长度。 + +``` +awk 'BEGIN{info="it is a test";split(info,tA," ");print asort(tA);}' +4 +``` + +asort对数组进行排序,返回数组长度。 + + **输出数组内容(无序,有序输出):** + +``` +awk 'BEGIN{info="it is a test";split(info,tA," ");for(k in tA){print k,tA[k];}}' +4 test +1 it +2 is +3 a +``` + +`for…in`输出,因为数组是关联数组,默认是无序的。所以通过`for…in`得到是无序的数组。如果需要得到有序数组,需要通过下标获得。 + +``` +awk 'BEGIN{info="it is a test";tlen=split(info,tA," ");for(k=1;k<=tlen;k++){print k,tA[k];}}' +1 it +2 is +3 a +4 test +``` + +注意:数组下标是从1开始,与C数组不一样。 + + **判断键值存在以及删除键值:** + +``` +#错误的判断方法: +awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";if(tB["c"]!="1"){print "no found";};for(k in tB){print k,tB[k];}}' +no found +a a1 +b b1 +c +``` + +以上出现奇怪问题,`tB[“c”]`没有定义,但是循环时候,发现已经存在该键值,它的值为空,这里需要注意,awk数组是关联数组,只要通过数组引用它的key,就会自动创建改序列。 + +``` +#正确判断方法: +awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";if( "c" in tB){print "ok";};for(k in tB){print k,tB[k];}}' +a a1 +b b1 +``` + +`if(key in array)`通过这种方法判断数组中是否包含`key`键值。 + +``` +#删除键值: +[chengmo@localhost ~]$ awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";delete tB["a"];for(k in tB){print k,tB[k];}}' +b b1 +``` + +`delete array[key]`可以删除,对应数组`key`的,序列值。 + +### 二维、多维数组使用 + +awk的多维数组在本质上是一维数组,更确切一点,awk在存储上并不支持多维数组。awk提供了逻辑上模拟二维数组的访问方式。例如,`array[2,4]=1`这样的访问是允许的。awk使用一个特殊的字符串`SUBSEP(�34)`作为分割字段,在上面的例子中,关联数组array存储的键值实际上是2�344。 + +类似一维数组的成员测试,多维数组可以使用`if ( (i,j) in array)`这样的语法,但是下标必须放置在圆括号中。类似一维数组的循环访问,多维数组使用`for ( item in array )`这样的语法遍历数组。与一维数组不同的是,多维数组必须使用`split()`函数来访问单独的下标分量。 + +``` +awk 'BEGIN{ +for(i=1;i<=9;i++){ + for(j=1;j<=9;j++){ + tarr[i,j]=i*j; print i,"*",j,"=",tarr[i,j]; + } +} +}' +1 * 1 = 1 +1 * 2 = 2 +1 * 3 = 3 +1 * 4 = 4 +1 * 5 = 5 +1 * 6 = 6 +... +9 * 6 = 54 +9 * 7 = 63 +9 * 8 = 72 +9 * 9 = 81 +``` + +可以通过`array[k,k2]`引用获得数组内容。 + +另一种方法: + +``` +awk 'BEGIN{ +for(i=1;i<=9;i++){ + for(j=1;j<=9;j++){ + tarr[i,j]=i*j; + } +} +for(m in tarr){ + split(m,tarr2,SUBSEP); print tarr2[1],"*",tarr2[2],"=",tarr[m]; +} +}' +``` + +## 内置函数 + +awk内置函数,主要分以下3种类似:算数函数、字符串函数、其它一般函数、时间函数。 + +### 算术函数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
格式描述
atan2( y, x )返回 y/x 的反正切。
cos( x )返回 x 的余弦;x 是弧度。
sin( x )返回 x 的正弦;x 是弧度。
exp( x )返回 x 幂函数。
log( x )返回 x 的自然对数。
sqrt( x )返回 x 平方根。
int( x )返回 x 的截断至整数的值。
rand( )返回任意数字 n,其中 0 <= n < 1。
srand( [expr] )将 rand 函数的种子值设置为 Expr 参数的值,或如果省略 Expr 参数则使用某天的时间。返回先前的种子值。
+ +举例说明: + +``` +awk 'BEGIN{OFMT="%.3f";fs=sin(1);fe=exp(10);fl=log(10);fi=int(3.1415);print fs,fe,fl,fi;}' +0.841 22026.466 2.303 3 + +``` + +OFMT 设置输出数据格式是保留3位小数。 + +获得随机数: + +``` +awk 'BEGIN{srand();fr=int(100*rand());print fr;}' +78 +awk 'BEGIN{srand();fr=int(100*rand());print fr;}' +31 +awk 'BEGIN{srand();fr=int(100*rand());print fr;}' +41 +``` + +### 字符串函数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
格式描述
gsub( Ere, Repl, [ In ] )除了正则表达式所有具体值被替代这点,它和 sub 函数完全一样地执行。
sub( Ere, Repl, [ In ] )用 Repl 参数指定的字符串替换 In 参数指定的字符串中的由 Ere 参数指定的扩展正则表达式的第一个具体值。sub 函数返回替换的数量。出现在 Repl 参数指定的字符串中的 &(和符号)由 In 参数指定的与 Ere 参数的指定的扩展正则表达式匹配的字符串替换。如果未指定 In 参数,缺省值是整个记录($0 记录变量)。
index( String1, String2 )在由 String1 参数指定的字符串(其中有出现 String2 指定的参数)中,返回位置,从 1 开始编号。如果 String2 参数不在 String1 参数中出现,则返回 0(零)。
length [(String)]返回 String 参数指定的字符串的长度(字符形式)。如果未给出 String 参数,则返回整个记录的长度($0 记录变量)。
blength [(String)]返回 String 参数指定的字符串的长度(以字节为单位)。如果未给出 String 参数,则返回整个记录的长度($0 记录变量)。
substr( String, M, [ N ] )返回具有 N 参数指定的字符数量子串。子串从 String 参数指定的字符串取得,其字符以 M 参数指定的位置开始。M 参数指定为将 String 参数中的第一个字符作为编号 1。如果未指定 N 参数,则子串的长度将是 M 参数指定的位置到 String 参数的末尾 的长度。
match( String, Ere )在 String 参数指定的字符串(Ere 参数指定的扩展正则表达式出现在其中)中返回位置(字符形式),从 1 开始编号,或如果 Ere 参数不出现,则返回 0(零)。RSTART 特殊变量设置为返回值。RLENGTH 特殊变量设置为匹配的字符串的长度,或如果未找到任何匹配,则设置为 -1(负一)。
split( String, A, [Ere] )将 String 参数指定的参数分割为数组元素 A[1], A[2], . . ., A[n],并返回 n 变量的值。此分隔可以通过 Ere 参数指定的扩展正则表达式进行,或用当前字段分隔符(FS 特殊变量)来进行(如果没有给出 Ere 参数)。除非上下文指明特定的元素还应具有一个数字值,否则 A 数组中的元素用字符串值来创建。
tolower( String )返回 String 参数指定的字符串,字符串中每个大写字符将更改为小写。大写和小写的映射由当前语言环境的 LC_CTYPE 范畴定义。
toupper( String )返回 String 参数指定的字符串,字符串中每个小写字符将更改为大写。大写和小写的映射由当前语言环境的 LC_CTYPE 范畴定义。
sprintf(Format, Expr, Expr, . . . )根据 Format 参数指定的 printf 子例程格式字符串来格式化 Expr 参数指定的表达式并返回最后生成的字符串。
+ +注:Ere都可以是正则表达式。 + + **gsub,sub使用** + +``` +awk 'BEGIN{info="this is a test2010test!";gsub(/[0-9]+/,"!",info);print info}' +this is a test!test! +``` + +在 info中查找满足正则表达式,`/[0-9]+/` 用`””`替换,并且替换后的值,赋值给info 未给info值,默认是`$0` + + **查找字符串(index使用)** + +``` +awk 'BEGIN{info="this is a test2010test!";print index(info,"test")?"ok":"no found";}' +ok +``` + +未找到,返回0 + + **正则表达式匹配查找(match使用)** + +``` +awk 'BEGIN{info="this is a test2010test!";print match(info,/[0-9]+/)?"ok":"no found";}' +ok +``` + + **截取字符串(substr使用)** + +``` +[wangsl@centos5 ~]$ awk 'BEGIN{info="this is a test2010test!";print substr(info,4,10);}' +s is a tes +``` + +从第 4个 字符开始,截取10个长度字符串 + + **字符串分割(split使用)** + +``` +awk 'BEGIN{info="this is a test";split(info,tA," ");print length(tA);for(k in tA){print k,tA[k];}}' +4 +4 test +1 this +2 is +3 a +``` + +分割info,动态创建数组tA,这里比较有意思,`awk for …in`循环,是一个无序的循环。 并不是从数组下标1…n ,因此使用时候需要注意。 + + **格式化字符串输出(sprintf使用)** + +格式化字符串格式: + +其中格式化字符串包括两部分内容:一部分是正常字符,这些字符将按原样输出; 另一部分是格式化规定字符,以`"%"`开始,后跟一个或几个规定字符,用来确定输出内容格式。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
格式描述
%d十进制有符号整数
%u十进制无符号整数
%f浮点数
%s字符串
%c单个字符
%p指针的值
%e指数形式的浮点数
%x%X 无符号以十六进制表示的整数
%o无符号以八进制表示的整数
%g自动选择合适的表示法
+ +``` +awk 'BEGIN{n1=124.113;n2=-1.224;n3=1.2345; printf("%.2f,%.2u,%.2g,%X,%on",n1,n2,n3,n1,n1);}' +124.11,18446744073709551615,1.2,7C,174 +``` + +### 一般函数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
格式描述
close( Expression )用同一个带字符串值的 Expression 参数来关闭由 print 或 printf 语句打开的或调用 getline 函数打开的文件或管道。如果文件或管道成功关闭,则返回 0;其它情况下返回非零值。如果打算写一个文件,并稍后在同一个程序中读取文件,则 close 语句是必需的。
system(command )执行 Command 参数指定的命令,并返回退出状态。等同于 system 子例程。
Expression | getline [ Variable ]从来自 Expression 参数指定的命令的输出中通过管道传送的流中读取一个输入记录,并将该记录的值指定给 Variable 参数指定的变量。如果当前未打开将 Expression 参数的值作为其命令名称的流,则创建流。创建的流等同于调用 popen 子例程,此时 Command 参数取 Expression 参数的值且 Mode 参数设置为一个是 r 的值。只要流保留打开且 Expression 参数求得同一个字符串,则对 getline 函数的每次后续调用读取另一个记录。如果未指定 Variable 参数,则 $0 记录变量和 NF 特殊变量设置为从流读取的记录。
getline [ Variable ] < Expression从 Expression 参数指定的文件读取输入的下一个记录,并将 Variable 参数指定的变量设置为该记录的值。只要流保留打开且 Expression 参数对同一个字符串求值,则对 getline 函数的每次后续调用读取另一个记录。如果未指定 Variable 参数,则 $0 记录变量和 NF 特殊变量设置为从流读取的记录。
getline [ Variable ]将 Variable 参数指定的变量设置为从当前输入文件读取的下一个输入记录。如果未指定 Variable 参数,则 $0 记录变量设置为该记录的值,还将设置 NF、NR 和 FNR 特殊变量。
+ + **打开外部文件(close用法)** + +``` +awk 'BEGIN{while("cat /etc/passwd"|getline){print $0;};close("/etc/passwd");}' +root:x:0:0:root:/root:/bin/bash +bin:x:1:1:bin:/bin:/sbin/nologin +daemon:x:2:2:daemon:/sbin:/sbin/nologin +``` + + **逐行读取外部文件(getline使用方法)** + +``` +awk 'BEGIN{while(getline < "/etc/passwd"){print $0;};close("/etc/passwd");}' +root:x:0:0:root:/root:/bin/bash +bin:x:1:1:bin:/bin:/sbin/nologin +daemon:x:2:2:daemon:/sbin:/sbin/nologin +``` + +``` +awk 'BEGIN{print "Enter your name:";getline name;print name;}' +Enter your name: +chengmo +chengmo +``` + + **调用外部应用程序(system使用方法)** + +``` +awk 'BEGIN{b=system("ls -al");print b;}' +total 42092 +drwxr-xr-x 14 chengmo chengmo 4096 09-30 17:47 . +drwxr-xr-x 95 root root 4096 10-08 14:01 .. +``` + +b返回值,是执行结果。 + +### 时间函数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
格式描述
函数名说明
mktime( YYYY MM dd HH MM ss[ DST])生成时间格式
strftime([format [, timestamp]])格式化时间输出,将时间戳转为时间字符串 +具体格式,见下表.
systime()得到时间戳,返回从1970年1月1日开始到当前时间(不计闰年)的整秒数
+ + **建指定时间(mktime使用)** + +``` +awk 'BEGIN{tstamp=mktime("2001 01 01 12 12 12");print strftime("%c",tstamp);}' +2001年01月01日 星期一 12时12分12秒 +``` + +``` +awk 'BEGIN{tstamp1=mktime("2001 01 01 12 12 12");tstamp2=mktime("2001 02 01 0 0 0");print tstamp2-tstamp1;}' +2634468 +``` + +求2个时间段中间时间差,介绍了strftime使用方法 + +``` +awk 'BEGIN{tstamp1=mktime("2001 01 01 12 12 12");tstamp2=systime();print tstamp2-tstamp1;}' +308201392 +``` + + **strftime日期和时间格式说明符** + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
格式描述
%a星期几的缩写(Sun)
%A星期几的完整写法(Sunday)
%b月名的缩写(Oct)
%B月名的完整写法(October)
%c本地日期和时间
%d十进制日期
%D日期 08/20/99
%e日期,如果只有一位会补上一个空格
%H用十进制表示24小时格式的小时
%I用十进制表示12小时格式的小时
%j从1月1日起一年中的第几天
%m十进制表示的月份
%M十进制表示的分钟
%p12小时表示法(AM/PM)
%S十进制表示的秒
%U十进制表示的一年中的第几个星期(星期天作为一个星期的开始)
%w十进制表示的星期几(星期天是0)
%W十进制表示的一年中的第几个星期(星期一作为一个星期的开始)
%x重新设置本地日期(08/20/99)
%X重新设置本地时间(12:00:00)
%y两位数字表示的年(99)
%Y当前月份
%Z时区(PDT)
%%百分号(%)
+ + + From 902ed95f542f040a446a8a478972a36c6c4a7379 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Sun, 9 Apr 2017 12:35:41 +0800 Subject: [PATCH 0004/1284] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20awk.md=20?= =?UTF-8?q?=E8=A1=A8=E6=A0=BC=E6=8E=92=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- command/awk.md | 948 ++++++------------------------------------------- 1 file changed, 100 insertions(+), 848 deletions(-) diff --git a/command/awk.md b/command/awk.md index d82b62227a4..38722b6cb8b 100644 --- a/command/awk.md +++ b/command/awk.md @@ -212,65 +212,13 @@ awk '{ print v1,v2 }' v1=$var1 v2=$var2 filename ### 算术运算符 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
运算符描述
+ -加,减
* / &乘,除与求余
+ - !一元加,减和逻辑非
^ ***求幂
++ --增加或减少,作为前缀或后缀
+| 运算符 | 描述 | +| ----- | ---- | +| + - | 加,减 | +| * / & | 乘,除与求余 | +| + - ! | 一元加,减和逻辑非 | +| ^ *** | 求幂 | +| ++ -- | 增加或减少,作为前缀或后缀 | 例: @@ -283,33 +231,9 @@ awk 'BEGIN{a="b";print a++,++a;}' ### 赋值运算符 - - - - - - - - - - - - - - - - - - - - - - - - - - -
运算符描述
= += -= *= /= %= ^= **=赋值语句
+| 运算符 | 描述 | +| ----- | ---- | +| = += -= *= /= %= ^= **= | 赋值语句 | 例: @@ -319,41 +243,10 @@ a+=5; 等价于:a=a+5; 其它同类 ### 逻辑运算符 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
运算符描述
||逻辑或
&&逻辑与
+| 运算符 | 描述 | +| ----- | ---- | +| `\|\|` | 逻辑或 | +| && | 逻辑与 | 例: @@ -364,33 +257,9 @@ awk 'BEGIN{a=1;b=2;print (a>5 && b<=2),(a>5 || b<=2);}' ### 正则运算符 - - - - - - - - - - - - - - - - - - - - - - - - - - -
运算符描述
~ ~!匹配正则表达式和不匹配正则表达式
+| 运算符 | 描述 | +| ----- | ---- | +| ~ ~! | 匹配正则表达式和不匹配正则表达式 | 例: @@ -401,33 +270,9 @@ ok ### 关系运算符 - - - - - - - - - - - - - - - - - - - - - - - - - - -
运算符描述
< <= > >= != ==关系运算符
+| 运算符 | 描述 | +| ----- | ---- | +| < <= > >= != == | 关系运算符 | 例: @@ -440,57 +285,12 @@ ok ### 其它运算符 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
运算符描述
$字段引用
空格字符串连接符
?:C条件表达式
in数组中是否存在某键值
+| 运算符 | 描述 | +| ----- | ---- | +| $ | 字段引用 | +| 空格 | 字符串连接符 | +| ?: | C条件表达式 | +| in | 数组中是否存在某键值 | 例: @@ -853,7 +653,7 @@ c 以上出现奇怪问题,`tB[“c”]`没有定义,但是循环时候,发现已经存在该键值,它的值为空,这里需要注意,awk数组是关联数组,只要通过数组引用它的key,就会自动创建改序列。 -``` +```bash #正确判断方法: awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";if( "c" in tB){print "ok";};for(k in tB){print k,tB[k];}}' a a1 @@ -862,9 +662,9 @@ b b1 `if(key in array)`通过这种方法判断数组中是否包含`key`键值。 -``` +```bash #删除键值: -[chengmo@localhost ~]$ awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";delete tB["a"];for(k in tB){print k,tB[k];}}' +awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";delete tB["a"];for(k in tB){print k,tB[k];}}' b b1 ``` @@ -876,7 +676,7 @@ awk的多维数组在本质上是一维数组,更确切一点,awk在存储 类似一维数组的成员测试,多维数组可以使用`if ( (i,j) in array)`这样的语法,但是下标必须放置在圆括号中。类似一维数组的循环访问,多维数组使用`for ( item in array )`这样的语法遍历数组。与一维数组不同的是,多维数组必须使用`split()`函数来访问单独的下标分量。 -``` +```bash awk 'BEGIN{ for(i=1;i<=9;i++){ for(j=1;j<=9;j++){ @@ -901,7 +701,7 @@ for(i=1;i<=9;i++){ 另一种方法: -``` +```bash awk 'BEGIN{ for(i=1;i<=9;i++){ for(j=1;j<=9;j++){ @@ -920,97 +720,18 @@ awk内置函数,主要分以下3种类似:算数函数、字符串函数、 ### 算术函数 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +| 格式 | 描述 | +| ---- | ---- | +| atan2( y, x ) | 返回 y/x 的反正切。 | +| cos( x ) | 返回 x 的余弦;x 是弧度。 | +| sin( x ) | 返回 x 的正弦;x 是弧度。 | +| exp( x ) | 返回 x 幂函数。 | +| log( x ) | 返回 x 的自然对数。 | +| sqrt( x ) | 返回 x 平方根。 | +| int( x ) | 返回 x 的截断至整数的值。 | +| rand( ) | 返回任意数字 n,其中 0 <= n < 1。 | +| srand( [expr] ) | 将 rand 函数的种子值设置为 Expr 参数的值,或如果省略 Expr 参数则使用某天的时间。返回先前的种子值。 | - - -
格式描述
atan2( y, x )返回 y/x 的反正切。
cos( x )返回 x 的余弦;x 是弧度。
sin( x )返回 x 的正弦;x 是弧度。
exp( x )返回 x 幂函数。
log( x )返回 x 的自然对数。
sqrt( x )返回 x 平方根。
int( x )返回 x 的截断至整数的值。
rand( )返回任意数字 n,其中 0 <= n < 1。
srand( [expr] )将 rand 函数的种子值设置为 Expr 参数的值,或如果省略 Expr 参数则使用某天的时间。返回先前的种子值。
举例说明: @@ -1035,113 +756,20 @@ awk 'BEGIN{srand();fr=int(100*rand());print fr;}' ### 字符串函数 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +| 格式 | 描述 | +| ---- | ---- | +| gsub( Ere, Repl, [ In ] ) | 除了正则表达式所有具体值被替代这点,它和 sub 函数完全一样地执行。 | +| sub( Ere, Repl, [ In ] ) | 用 Repl 参数指定的字符串替换 In 参数指定的字符串中的由 Ere 参数指定的扩展正则表达式的第一个具体值。sub 函数返回替换的数量。出现在 Repl 参数指定的字符串中的 &(和符号)由 In 参数指定的与 Ere 参数的指定的扩展正则表达式匹配的字符串替换。如果未指定 In 参数,缺省值是整个记录($0 记录变量)。 | +| index( String1, String2 ) | 在由 String1 参数指定的字符串(其中有出现 String2 指定的参数)中,返回位置,从 1 开始编号。如果 String2 参数不在 String1 参数中出现,则返回 0(零)。 | +| length [(String)] | 返回 String 参数指定的字符串的长度(字符形式)。如果未给出 String 参数,则返回整个记录的长度($0 记录变量)。 | +| blength [(String)] | 返回 String 参数指定的字符串的长度(以字节为单位)。如果未给出 String 参数,则返回整个记录的长度($0 记录变量)。 | +| substr( String, M, [ N ] ) | 返回具有 N 参数指定的字符数量子串。子串从 String 参数指定的字符串取得,其字符以 M 参数指定的位置开始。M 参数指定为将 String 参数中的第一个字符作为编号 1。如果未指定 N 参数,则子串的长度将是 M 参数指定的位置到 String 参数的末尾 的长度。 | +| match( String, Ere ) | 在 String 参数指定的字符串(Ere 参数指定的扩展正则表达式出现在其中)中返回位置(字符形式),从 1 开始编号,或如果 Ere 参数不出现,则返回 0(零)。RSTART 特殊变量设置为返回值。RLENGTH 特殊变量设置为匹配的字符串的长度,或如果未找到任何匹配,则设置为 -1(负一)。| +| split( String, A, [Ere] ) | 将 String 参数指定的参数分割为数组元素 A[1], A[2], . . ., A[n],并返回 n 变量的值。此分隔可以通过 Ere 参数指定的扩展正则表达式进行,或用当前字段分隔符(FS 特殊变量)来进行(如果没有给出 Ere 参数)。除非上下文指明特定的元素还应具有一个数字值,否则 A 数组中的元素用字符串值来创建。 | +| tolower( String ) | 返回 String 参数指定的字符串,字符串中每个大写字符将更改为小写。大写和小写的映射由当前语言环境的 LC_CTYPE 范畴定义。 | +| toupper( String ) | 返回 String 参数指定的字符串,字符串中每个小写字符将更改为大写。大写和小写的映射由当前语言环境的 LC_CTYPE 范畴定义。 | +| sprintf(Format, Expr, Expr, . . . ) | 根据 Format 参数指定的 printf 子例程格式字符串来格式化 Expr 参数指定的表达式并返回最后生成的字符串。 | - - -
格式描述
gsub( Ere, Repl, [ In ] )除了正则表达式所有具体值被替代这点,它和 sub 函数完全一样地执行。
sub( Ere, Repl, [ In ] )用 Repl 参数指定的字符串替换 In 参数指定的字符串中的由 Ere 参数指定的扩展正则表达式的第一个具体值。sub 函数返回替换的数量。出现在 Repl 参数指定的字符串中的 &(和符号)由 In 参数指定的与 Ere 参数的指定的扩展正则表达式匹配的字符串替换。如果未指定 In 参数,缺省值是整个记录($0 记录变量)。
index( String1, String2 )在由 String1 参数指定的字符串(其中有出现 String2 指定的参数)中,返回位置,从 1 开始编号。如果 String2 参数不在 String1 参数中出现,则返回 0(零)。
length [(String)]返回 String 参数指定的字符串的长度(字符形式)。如果未给出 String 参数,则返回整个记录的长度($0 记录变量)。
blength [(String)]返回 String 参数指定的字符串的长度(以字节为单位)。如果未给出 String 参数,则返回整个记录的长度($0 记录变量)。
substr( String, M, [ N ] )返回具有 N 参数指定的字符数量子串。子串从 String 参数指定的字符串取得,其字符以 M 参数指定的位置开始。M 参数指定为将 String 参数中的第一个字符作为编号 1。如果未指定 N 参数,则子串的长度将是 M 参数指定的位置到 String 参数的末尾 的长度。
match( String, Ere )在 String 参数指定的字符串(Ere 参数指定的扩展正则表达式出现在其中)中返回位置(字符形式),从 1 开始编号,或如果 Ere 参数不出现,则返回 0(零)。RSTART 特殊变量设置为返回值。RLENGTH 特殊变量设置为匹配的字符串的长度,或如果未找到任何匹配,则设置为 -1(负一)。
split( String, A, [Ere] )将 String 参数指定的参数分割为数组元素 A[1], A[2], . . ., A[n],并返回 n 变量的值。此分隔可以通过 Ere 参数指定的扩展正则表达式进行,或用当前字段分隔符(FS 特殊变量)来进行(如果没有给出 Ere 参数)。除非上下文指明特定的元素还应具有一个数字值,否则 A 数组中的元素用字符串值来创建。
tolower( String )返回 String 参数指定的字符串,字符串中每个大写字符将更改为小写。大写和小写的映射由当前语言环境的 LC_CTYPE 范畴定义。
toupper( String )返回 String 参数指定的字符串,字符串中每个小写字符将更改为大写。大写和小写的映射由当前语言环境的 LC_CTYPE 范畴定义。
sprintf(Format, Expr, Expr, . . . )根据 Format 参数指定的 printf 子例程格式字符串来格式化 Expr 参数指定的表达式并返回最后生成的字符串。
注:Ere都可以是正则表达式。 @@ -1198,105 +826,14 @@ awk 'BEGIN{info="this is a test";split(info,tA," ");print length(tA);for(k in tA 其中格式化字符串包括两部分内容:一部分是正常字符,这些字符将按原样输出; 另一部分是格式化规定字符,以`"%"`开始,后跟一个或几个规定字符,用来确定输出内容格式。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +| 格式 | 描述 | 格式 | 描述 | +| ---- | ---- | ---- | ---- | +| %d | 十进制有符号整数 | %u | 十进制无符号整数 | +| %f | 浮点数 | %s | 字符串 | +| %c | 单个字符 | %p | 指针的值 | +| %e | 指数形式的浮点数 | %x | %X 无符号以十六进制表示的整数 | +| %o | 无符号以八进制表示的整数 | %g | 自动选择合适的表示法 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
格式描述
%d十进制有符号整数
%u十进制无符号整数
%f浮点数
%s字符串
%c单个字符
%p指针的值
%e指数形式的浮点数
%x%X 无符号以十六进制表示的整数
%o无符号以八进制表示的整数
%g自动选择合适的表示法
``` awk 'BEGIN{n1=124.113;n2=-1.224;n3=1.2345; printf("%.2f,%.2u,%.2g,%X,%on",n1,n2,n3,n1,n1);}' @@ -1305,65 +842,13 @@ awk 'BEGIN{n1=124.113;n2=-1.224;n3=1.2345; printf("%.2f,%.2u,%.2g,%X,%on",n1,n2, ### 一般函数 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
格式描述
close( Expression )用同一个带字符串值的 Expression 参数来关闭由 print 或 printf 语句打开的或调用 getline 函数打开的文件或管道。如果文件或管道成功关闭,则返回 0;其它情况下返回非零值。如果打算写一个文件,并稍后在同一个程序中读取文件,则 close 语句是必需的。
system(command )执行 Command 参数指定的命令,并返回退出状态。等同于 system 子例程。
Expression | getline [ Variable ]从来自 Expression 参数指定的命令的输出中通过管道传送的流中读取一个输入记录,并将该记录的值指定给 Variable 参数指定的变量。如果当前未打开将 Expression 参数的值作为其命令名称的流,则创建流。创建的流等同于调用 popen 子例程,此时 Command 参数取 Expression 参数的值且 Mode 参数设置为一个是 r 的值。只要流保留打开且 Expression 参数求得同一个字符串,则对 getline 函数的每次后续调用读取另一个记录。如果未指定 Variable 参数,则 $0 记录变量和 NF 特殊变量设置为从流读取的记录。
getline [ Variable ] < Expression从 Expression 参数指定的文件读取输入的下一个记录,并将 Variable 参数指定的变量设置为该记录的值。只要流保留打开且 Expression 参数对同一个字符串求值,则对 getline 函数的每次后续调用读取另一个记录。如果未指定 Variable 参数,则 $0 记录变量和 NF 特殊变量设置为从流读取的记录。
getline [ Variable ]将 Variable 参数指定的变量设置为从当前输入文件读取的下一个输入记录。如果未指定 Variable 参数,则 $0 记录变量设置为该记录的值,还将设置 NF、NR 和 FNR 特殊变量。
+| 格式 | 描述 | +| ---- | ---- | +| close( Expression ) | 用同一个带字符串值的 Expression 参数来关闭由 print 或 printf 语句打开的或调用 getline 函数打开的文件或管道。如果文件或管道成功关闭,则返回 0;其它情况下返回非零值。如果打算写一个文件,并稍后在同一个程序中读取文件,则 close 语句是必需的。 | +| system(command ) | 执行 Command 参数指定的命令,并返回退出状态。等同于 system 子例程。| +| Expression \| getline [ Variable ] | 从来自 Expression 参数指定的命令的输出中通过管道传送的流中读取一个输入记录,并将该记录的值指定给 Variable 参数指定的变量。如果当前未打开将 Expression 参数的值作为其命令名称的流,则创建流。创建的流等同于调用 popen 子例程,此时 Command 参数取 Expression 参数的值且 Mode 参数设置为一个是 r 的值。只要流保留打开且 Expression 参数求得同一个字符串,则对 getline 函数的每次后续调用读取另一个记录。如果未指定 Variable 参数,则 $0 记录变量和 NF 特殊变量设置为从流读取的记录。| +| getline [ Variable ] < Expression | 从 Expression 参数指定的文件读取输入的下一个记录,并将 Variable 参数指定的变量设置为该记录的值。只要流保留打开且 Expression 参数对同一个字符串求值,则对 getline 函数的每次后续调用读取另一个记录。如果未指定 Variable 参数,则 $0 记录变量和 NF 特殊变量设置为从流读取的记录。 | +| getline [ Variable ] | 将 Variable 参数指定的变量设置为从当前输入文件读取的下一个输入记录。如果未指定 Variable 参数,则 $0 记录变量设置为该记录的值,还将设置 NF、NR 和 FNR 特殊变量。 | **打开外部文件(close用法)** @@ -1403,58 +888,12 @@ b返回值,是执行结果。 ### 时间函数 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
格式描述
函数名说明
mktime( YYYY MM dd HH MM ss[ DST])生成时间格式
strftime([format [, timestamp]])格式化时间输出,将时间戳转为时间字符串 -具体格式,见下表.
systime()得到时间戳,返回从1970年1月1日开始到当前时间(不计闰年)的整秒数
+| 格式 | 描述 | +| ---- | ---- | +| 函数名 | 说明 | +| mktime( YYYY MM dd HH MM ss[ DST]) | 生成时间格式 | +| strftime([format [, timestamp]]) | 格式化时间输出,将时间戳转为时间字符串具体格式,见下表。 | +| systime() | 得到时间戳,返回从1970年1月1日开始到当前时间(不计闰年)的整秒数 | **建指定时间(mktime使用)** @@ -1477,217 +916,30 @@ awk 'BEGIN{tstamp1=mktime("2001 01 01 12 12 12");tstamp2=systime();print tstamp2 **strftime日期和时间格式说明符** - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
格式描述
%a星期几的缩写(Sun)
%A星期几的完整写法(Sunday)
%b月名的缩写(Oct)
%B月名的完整写法(October)
%c本地日期和时间
%d十进制日期
%D日期 08/20/99
%e日期,如果只有一位会补上一个空格
%H用十进制表示24小时格式的小时
%I用十进制表示12小时格式的小时
%j从1月1日起一年中的第几天
%m十进制表示的月份
%M十进制表示的分钟
%p12小时表示法(AM/PM)
%S十进制表示的秒
%U十进制表示的一年中的第几个星期(星期天作为一个星期的开始)
%w十进制表示的星期几(星期天是0)
%W十进制表示的一年中的第几个星期(星期一作为一个星期的开始)
%x重新设置本地日期(08/20/99)
%X重新设置本地时间(12:00:00)
%y两位数字表示的年(99)
%Y当前月份
%Z时区(PDT)
%%百分号(%)
- +| 格式 | 描述 | +| ---- | ---- | +| %a | 星期几的缩写(Sun) | +| %A | 星期几的完整写法(Sunday) | +| %b | 月名的缩写(Oct) | +| %B | 月名的完整写法(October) | +| %c | 本地日期和时间 | +| %d | 十进制日期 | +| %D | 日期 08/20/99 | +| %e | 日期,如果只有一位会补上一个空格 | +| %H | 用十进制表示24小时格式的小时 | +| %I | 用十进制表示12小时格式的小时 | +| %j | 从1月1日起一年中的第几天 | +| %m | 十进制表示的月份 | +| %M | 十进制表示的分钟 | +| %p | 12小时表示法(AM/PM) | +| %S | 十进制表示的秒 | +| %U | 十进制表示的一年中的第几个星期(星期天作为一个星期的开始) | +| %w | 十进制表示的星期几(星期天是0) | +| %W | 十进制表示的一年中的第几个星期(星期一作为一个星期的开始) | +| %x | 重新设置本地日期(08/20/99) | +| %X | 重新设置本地时间(12:00:00) | +| %y | 两位数字表示的年(99) | +| %Y | 当前月份 | +| %% | 百分号(%) | From 7709c5065329f473624e7d0db9fed3722d96e627 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Mon, 17 Apr 2017 21:55:13 +0800 Subject: [PATCH 0005/1284] =?UTF-8?q?=E7=BB=99dmidecode=20=E5=91=BD?= =?UTF-8?q?=E4=BB=A4=E6=B7=BB=E5=8A=A0=E5=AE=9E=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- command/dmidecode.md | 503 ++++++++++++++++++++++++------------------- 1 file changed, 287 insertions(+), 216 deletions(-) diff --git a/command/dmidecode.md b/command/dmidecode.md index 24b9600c8d2..e1f4198d707 100644 --- a/command/dmidecode.md +++ b/command/dmidecode.md @@ -1,216 +1,287 @@ -dmidecode -=== - -在Linux系统下获取有关硬件方面的信息 - -## 补充说明 - -**dmidecode命令** 可以让你在Linux系统下获取有关硬件方面的信息。dmidecode的作用是将DMI数据库中的信息解码,以可读的文本方式显示。由于DMI信息可以人为修改,因此里面的信息不一定是系统准确的信息。dmidecode遵循SMBIOS/DMI标准,其输出的信息包括BIOS、系统、主板、处理器、内存、缓存等等。 - -DMI(Desktop Management Interface,DMI)就是帮助收集电脑系统信息的管理系统,DMI信息的收集必须在严格遵照SMBIOS规范的前提下进行。SMBIOS(System Management BIOS)是主板或系统制造者以标准格式显示产品管理信息所需遵循的统一规范。SMBIOS和DMI是由行业指导机构Desktop Management Task Force(DMTF)起草的开放性的技术标准,其中DMI设计适用于任何的平台和操作系统。 - -DMI充当了管理工具和系统层之间接口的角色。它建立了标准的可管理系统更加方便了电脑厂商和用户对系统的了解。DMI的主要组成部分是Management Information Format(MIF)数据库。这个数据库包括了所有有关电脑系统和配件的信息。通过DMI,用户可以获取序列号、电脑厂商、串口信息以及其它系统配件信息。 - -### 语法 - -``` -dmidecode [选项] -``` - -### 选项 - -``` --d:(default:/dev/mem)从设备文件读取信息,输出内容与不加参数标准输出相同。 --h:显示帮助信息。 --s:只显示指定DMI字符串的信息。(string) --t:只显示指定条目的信息。(type) --u:显示未解码的原始条目内容。 ---dump-bin file:将DMI数据转储到一个二进制文件中。 ---from-dump FILE:从一个二进制文件读取DMI数据。 --V:显示版本信息。 -``` - - **dmidecode参数string及type列表:** - -(1)Valid string keywords are: - -* bios-vendor -* bios-version -* bios-release-date -* system-manufacturer -* system-product-name -* system-version -* system-serial-number -* system-uuid -* baseboard-manufacturer -* baseboard-product-name -* baseboard-version -* baseboard-serial-number -* baseboard-asset-tag -* chassis-manufacturer -* chassis-type -* chassis-version -* chassis-serial-number -* chassis-asset-tag -* processor-family -* processor-manufacturer -* processor-version -* processor-frequency - -(2)Valid type keywords are: - -* bios -* system -* baseboard -* chassis -* processor -* memory -* Cache -* connector -* slot - -(3)type全部编码列表: - -* BIOS -* System -* Base Board -* Chassis -* Processor -* Memory Controller -* Memory Module -* Cache -* Port Connector -* System Slots -* On Board Devices -* OEM Strings -* System Configuration Options -* BIOS Language -* Group Associations -* System Event Log -* Physical Memory Array -* Memory Device -* 32-bit Memory Error -* Memory Array Mapped Address -* Memory Device Mapped Address -* Built-in Pointing Device -* Portable Battery -* System Reset -* Hardware Security -* System Power Controls -* Voltage Probe -* Cooling Device -* Temperature Probe -* Electrical Current Probe -* Out-of-band Remote Access -* Boot Integrity Services -* System Boot -* 64-bit Memory Error -* Management Device -* Management Device Component -* Management Device Threshold Data -* Memory Channel -* IPMI Device -* Power Supply -* Additional Information -* Onboard Device - -### 实例 - -``` -查看服务器型号:dmidecode | grep 'Product Name' -查看主板的序列号:dmidecode |grep 'Serial Number' -查看系统序列号:dmidecode -s system-serial-number -查看内存信息:dmidecode -t memory -查看OEM信息:dmidecode -t 11 -``` - -不带选项执行dmidecode命令通常会输出所有的硬件信息。dmidecode命令有个很有用的选项-t,可以按指定类型输出相关信息,假如要获得处理器方面的信息,则可以执行: - -``` -[root@localhost ~]# dmidecode -t processor -# dmidecode 2.11 -SMBIOS 2.5 present. - -Handle 0x0001, DMI type 4, 40 bytes -Processor Information - Socket Designation: Node 1 Socket 1 - Type: Central Processor - Family: Xeon MP - Manufacturer: Intel(R) Corporation - id: C2 06 02 00 FF FB EB BF - Signature: Type 0, Family 6, Model 44, Stepping 2 - Flags: - FPU (Floating-point unit on-chip) - VME (Virtual mode extension) - DE (Debugging extension) - PSE (Page size extension) - TSC (time stamp counter) - MSR (Model specific registers) - PAE (Physical address extension) - MCE (Machine check exception) - CX8 (CMPXCHG8 instruction supported) - APIC (On-chip APIC hardware supported) - SEP (Fast system call) - MTRR (Memory type range registers) - PGE (Page global enable) - MCA (Machine check architecture) - CMOV (Conditional move instruction supported) - PAT (Page attribute table) - PSE-36 (36-bit page size extension) - CLFSH (CLFLUSH instruction supported) - DS (Debug store) - ACPI (ACPI supported) - MMX (MMX technology supported) - FXSR (FXSAVE and FXSTOR instructions supported) - SSE (Streaming SIMD extensions) - SSE2 (Streaming SIMD extensions 2) - ss (Self-snoop) - HTT (Multi-threading) - TM (Thermal monitor supported) - PBE (Pending break enabled) - Version: Intel(R) Xeon(R) CPU E5620 @ 2.40GHz - Voltage: 1.2 V - External Clock: 5866 MHz - Max Speed: 4400 MHz - Current Speed: 2400 MHz - Status: Populated, Enabled - Upgrade: ZIF Socket - L1 Cache Handle: 0x0002 - L2 Cache Handle: 0x0003 - L3 Cache Handle: 0x0004 - Serial Number: Not Specified - Asset Tag: Not Specified - Part Number: Not Specified - Core Count: 4 - Core Enabled: 4 - Thread Count: 8 - Characteristics: - 64-bit capable - -Handle 0x0055, DMI type 4, 40 bytes -Processor Information - Socket Designation: Node 1 Socket 2 - Type: Central Processor - Family: Xeon MP - Manufacturer: Not Specified - ID: 00 00 00 00 00 00 00 00 - Signature: Type 0, Family 0, Model 0, Stepping 0 - Flags: None - Version: Not Specified - Voltage: 1.2 V - External Clock: 5866 MHz - Max Speed: 4400 MHz - Current Speed: Unknown - Status: Unpopulated - Upgrade: ZIF Socket - L1 Cache Handle: Not Provided - L2 Cache Handle: Not Provided - L3 Cache Handle: Not Provided - Serial Number: Not Specified - Asset Tag: Not Specified - Part Number: Not Specified - Characteristics: None -``` - - - \ No newline at end of file +dmidecode +=== + +在Linux系统下获取有关硬件方面的信息 + +## 补充说明 + +**dmidecode命令** 可以让你在Linux系统下获取有关硬件方面的信息。dmidecode的作用是将DMI数据库中的信息解码,以可读的文本方式显示。由于DMI信息可以人为修改,因此里面的信息不一定是系统准确的信息。dmidecode遵循SMBIOS/DMI标准,其输出的信息包括BIOS、系统、主板、处理器、内存、缓存等等。 + +DMI(Desktop Management Interface,DMI)就是帮助收集电脑系统信息的管理系统,DMI信息的收集必须在严格遵照SMBIOS规范的前提下进行。SMBIOS(System Management BIOS)是主板或系统制造者以标准格式显示产品管理信息所需遵循的统一规范。SMBIOS和DMI是由行业指导机构Desktop Management Task Force(DMTF)起草的开放性的技术标准,其中DMI设计适用于任何的平台和操作系统。 + +DMI充当了管理工具和系统层之间接口的角色。它建立了标准的可管理系统更加方便了电脑厂商和用户对系统的了解。DMI的主要组成部分是Management Information Format(MIF)数据库。这个数据库包括了所有有关电脑系统和配件的信息。通过DMI,用户可以获取序列号、电脑厂商、串口信息以及其它系统配件信息。 + +### 语法 + +``` +dmidecode [选项] +``` + +### 选项 + +``` +-d:(default:/dev/mem)从设备文件读取信息,输出内容与不加参数标准输出相同。 +-h:显示帮助信息。 +-s:只显示指定DMI字符串的信息。(string) +-t:只显示指定条目的信息。(type) +-u:显示未解码的原始条目内容。 +--dump-bin file:将DMI数据转储到一个二进制文件中。 +--from-dump FILE:从一个二进制文件读取DMI数据。 +-V:显示版本信息。 +``` + + **dmidecode参数string及type列表:** + +(1)Valid string keywords are: + +* bios-vendor +* bios-version +* bios-release-date +* system-manufacturer +* system-product-name +* system-version +* system-serial-number +* system-uuid +* baseboard-manufacturer +* baseboard-product-name +* baseboard-version +* baseboard-serial-number +* baseboard-asset-tag +* chassis-manufacturer +* chassis-type +* chassis-version +* chassis-serial-number +* chassis-asset-tag +* processor-family +* processor-manufacturer +* processor-version +* processor-frequency + +(2)Valid type keywords are: + +* bios +* system +* baseboard +* chassis +* processor +* memory +* Cache +* connector +* slot + +(3)type全部编码列表: + +* BIOS +* System +* Base Board +* Chassis +* Processor +* Memory Controller +* Memory Module +* Cache +* Port Connector +* System Slots +* On Board Devices +* OEM Strings +* System Configuration Options +* BIOS Language +* Group Associations +* System Event Log +* Physical Memory Array +* Memory Device +* 32-bit Memory Error +* Memory Array Mapped Address +* Memory Device Mapped Address +* Built-in Pointing Device +* Portable Battery +* System Reset +* Hardware Security +* System Power Controls +* Voltage Probe +* Cooling Device +* Temperature Probe +* Electrical Current Probe +* Out-of-band Remote Access +* Boot Integrity Services +* System Boot +* 64-bit Memory Error +* Management Device +* Management Device Component +* Management Device Threshold Data +* Memory Channel +* IPMI Device +* Power Supply +* Additional Information +* Onboard Device + +### 实例 + +``` +查看服务器型号:dmidecode | grep 'Product Name' +查看主板的序列号:dmidecode |grep 'Serial Number' +查看系统序列号:dmidecode -s system-serial-number +查看内存信息:dmidecode -t memory +查看OEM信息:dmidecode -t 11 +``` + +不带选项执行dmidecode命令通常会输出所有的硬件信息。dmidecode命令有个很有用的选项-t,可以按指定类型输出相关信息,假如要获得处理器方面的信息,则可以执行: + +``` +[root@localhost ~]# dmidecode -t processor +# dmidecode 2.11 +SMBIOS 2.5 present. + +Handle 0x0001, DMI type 4, 40 bytes +Processor Information + Socket Designation: Node 1 Socket 1 + Type: Central Processor + Family: Xeon MP + Manufacturer: Intel(R) Corporation + id: C2 06 02 00 FF FB EB BF + Signature: Type 0, Family 6, Model 44, Stepping 2 + Flags: + FPU (Floating-point unit on-chip) + VME (Virtual mode extension) + DE (Debugging extension) + PSE (Page size extension) + TSC (time stamp counter) + MSR (Model specific registers) + PAE (Physical address extension) + MCE (Machine check exception) + CX8 (CMPXCHG8 instruction supported) + APIC (On-chip APIC hardware supported) + SEP (Fast system call) + MTRR (Memory type range registers) + PGE (Page global enable) + MCA (Machine check architecture) + CMOV (Conditional move instruction supported) + PAT (Page attribute table) + PSE-36 (36-bit page size extension) + CLFSH (CLFLUSH instruction supported) + DS (Debug store) + ACPI (ACPI supported) + MMX (MMX technology supported) + FXSR (FXSAVE and FXSTOR instructions supported) + SSE (Streaming SIMD extensions) + SSE2 (Streaming SIMD extensions 2) + ss (Self-snoop) + HTT (Multi-threading) + TM (Thermal monitor supported) + PBE (Pending break enabled) + Version: Intel(R) Xeon(R) CPU E5620 @ 2.40GHz + Voltage: 1.2 V + External Clock: 5866 MHz + Max Speed: 4400 MHz + Current Speed: 2400 MHz + Status: Populated, Enabled + Upgrade: ZIF Socket + L1 Cache Handle: 0x0002 + L2 Cache Handle: 0x0003 + L3 Cache Handle: 0x0004 + Serial Number: Not Specified + Asset Tag: Not Specified + Part Number: Not Specified + Core Count: 4 + Core Enabled: 4 + Thread Count: 8 + Characteristics: + 64-bit capable + +Handle 0x0055, DMI type 4, 40 bytes +Processor Information + Socket Designation: Node 1 Socket 2 + Type: Central Processor + Family: Xeon MP + Manufacturer: Not Specified + ID: 00 00 00 00 00 00 00 00 + Signature: Type 0, Family 0, Model 0, Stepping 0 + Flags: None + Version: Not Specified + Voltage: 1.2 V + External Clock: 5866 MHz + Max Speed: 4400 MHz + Current Speed: Unknown + Status: Unpopulated + Upgrade: ZIF Socket + L1 Cache Handle: Not Provided + L2 Cache Handle: Not Provided + L3 Cache Handle: Not Provided + Serial Number: Not Specified + Asset Tag: Not Specified + Part Number: Not Specified + Characteristics: None +``` + +查看内存的插槽数,已经使用多少插槽。每条内存多大,已使用内存多大 + +```bash +dmidecode|grep -P -A5 "Memory\s+Device"|grep Size|grep -v Range + +# Size: 2048 MB +# Size: 2048 MB +# Size: 4096 MB +# Size: No Module Installed +``` + +查看内存支持的最大内存容量 + +```bash +dmidecode|grep -P 'Maximum\s+Capacity' + +# Maximum Capacity: 16 GB + +``` + +查看内存的频率 + +```bash +dmidecode|grep -A16 "Memory Device" + +# Memory Device +# Array Handle: 0x1000 +# Error Information Handle: Not Provided +# Total Width: 72 bits +# Data Width: 64 bits +# Size: 2048 MB +# Form Factor: DIMM +# Set: 1 +# Locator: DIMM_A1 +# Bank Locator: Not Specified +# Type: DDR3 +# Type Detail: Synchronous Unbuffered (Unregistered) +# Speed: 1333 MHz +# Manufacturer: 00CE000080CE +# Serial Number: 4830F3E1 +# Asset Tag: 01093200 +# Part Number: M391B5673EH1-CH9 +# -- +# Memory Device +# Array Handle: 0x1000 +# Error Information Handle: Not Provided +# Total Width: 72 bits +# Data Width: 64 bits +# Size: 2048 MB +# Form Factor: DIMM +# Set: 1 +# Locator: DIMM_A2 +# Bank Locator: Not Specified +# Type: DDR3 +# Type Detail: Synchronous Unbuffered (Unregistered) +# Speed: 1333 MHz +# Manufacturer: 00AD000080AD +# Serial Number: 1BA1F0B5 +# Asset Tag: 01110900 +# Part Number: HMT325U7BFR8C-H9 +# -- + +dmidecode|grep -A16 "Memory Device"|grep 'Speed' + +# Speed: 1333 MHz +# Speed: 1333 MHz +# Speed: 1333 MHz +# Speed: Unknown + +``` + + + From 56f6470bf3142e0499a9afd4c94dbf0a1a51fea6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Mon, 17 Apr 2017 22:14:05 +0800 Subject: [PATCH 0006/1284] =?UTF-8?q?dmidecode=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=9F=BA=E7=A1=80=E5=91=BD=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- command/dmidecode.md | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/command/dmidecode.md b/command/dmidecode.md index e1f4198d707..c4784ce5529 100644 --- a/command/dmidecode.md +++ b/command/dmidecode.md @@ -116,12 +116,19 @@ dmidecode [选项] ### 实例 -``` -查看服务器型号:dmidecode | grep 'Product Name' -查看主板的序列号:dmidecode |grep 'Serial Number' -查看系统序列号:dmidecode -s system-serial-number -查看内存信息:dmidecode -t memory -查看OEM信息:dmidecode -t 11 +```bash +dmidecode -t 1 # 查看服务器信息 +dmidecode | grep 'Product Name' # 查看服务器型号 +dmidecode |grep 'Serial Number' # 查看主板的序列号 +dmidecode -t 2 # 查看主板信息 +dmidecode -s system-serial-number # 查看系统序列号 +dmidecode -t memory # 查看内存信息 +dmidecode -t 11 # 查看OEM信息 +dmidecode -t 17 # 查看内存条数 +dmidecode -t 16 # 查询内存信息 +dmidecode -t 4 # 查看CPU信息 + +cat /proc/scsi/scsi # 查看服务器硬盘信息 ``` 不带选项执行dmidecode命令通常会输出所有的硬件信息。dmidecode命令有个很有用的选项-t,可以按指定类型输出相关信息,假如要获得处理器方面的信息,则可以执行: From f6890531f8c4905896fa9f452ba0956cae42afe1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Mon, 17 Apr 2017 22:15:39 +0800 Subject: [PATCH 0007/1284] =?UTF-8?q?dmesg=E5=91=BD=E4=BB=A4=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=BA=94=E7=94=A8=E5=AE=9E=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- command/dmesg.md | 94 +++++++++++++++++++++++++++--------------------- 1 file changed, 53 insertions(+), 41 deletions(-) diff --git a/command/dmesg.md b/command/dmesg.md index f11ad2f3515..be213520368 100644 --- a/command/dmesg.md +++ b/command/dmesg.md @@ -1,41 +1,53 @@ -dmesg -=== - -显示Linux系统启动信息 - -## 补充说明 - -**dmesg命令** 被用于检查和控制内核的环形缓冲区。kernel会将开机信息存储在ring buffer中。您若是开机时来不及查看信息,可利用dmesg来查看。开机信息保存在`/var/log/dmesg`文件里。 - -### 语法 - -``` -dmesg(选项) -``` - -### 选项 - -``` --c:显示信息后,清除ring buffer中的内容; --s<缓冲区大小>:预设置为8196,刚好等于ring buffer的大小; --n:设置记录信息的层级。 -``` - -### 实例 - -``` -[root@localhost ~]# dmesg | head -Linux version 2.6.18-348.6.1.el5 (mockbuild@builder17.centos.org) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-54)) #1 SMP Tue May 21 15:34:22 EDT 2013 -BIOS-provided physical RAM map: - BIOS-e820: 0000000000010000 - 000000000009f400 (usable) - BIOS-e820: 000000000009f400 - 00000000000a0000 (reserved) - BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved) - BIOS-e820: 0000000000100000 - 000000007f590000 (usable) - BIOS-e820: 000000007f590000 - 000000007f5e3000 (ACPI NVS) - BIOS-e820: 000000007f5e3000 - 000000007f5f0000 (ACPI data) - BIOS-e820: 000000007f5f0000 - 000000007f600000 (reserved) - BIOS-e820: 00000000e0000000 - 00000000e8000000 (reserved) -``` - - - \ No newline at end of file +dmesg +=== + +显示Linux系统启动信息 + +## 补充说明 + +**dmesg命令** 被用于检查和控制内核的环形缓冲区。kernel会将开机信息存储在ring buffer中。您若是开机时来不及查看信息,可利用dmesg来查看。开机信息保存在`/var/log/dmesg`文件里。 + +### 语法 + +``` +dmesg(选项) +``` + +### 选项 + +``` +-c:显示信息后,清除ring buffer中的内容; +-s<缓冲区大小>:预设置为8196,刚好等于ring buffer的大小; +-n:设置记录信息的层级。 +``` + +### 实例 + +``` +[root@localhost ~]# dmesg | head +Linux version 2.6.18-348.6.1.el5 (mockbuild@builder17.centos.org) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-54)) #1 SMP Tue May 21 15:34:22 EDT 2013 +BIOS-provided physical RAM map: + BIOS-e820: 0000000000010000 - 000000000009f400 (usable) + BIOS-e820: 000000000009f400 - 00000000000a0000 (reserved) + BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved) + BIOS-e820: 0000000000100000 - 000000007f590000 (usable) + BIOS-e820: 000000007f590000 - 000000007f5e3000 (ACPI NVS) + BIOS-e820: 000000007f5e3000 - 000000007f5f0000 (ACPI data) + BIOS-e820: 000000007f5f0000 - 000000007f600000 (reserved) + BIOS-e820: 00000000e0000000 - 00000000e8000000 (reserved) +``` + +查看硬盘基础信息 + +```bash +dmesg | grep sda + +[ 2.442555] sd 0:0:0:0: [sda] 488281250 512-byte logical blocks: (250 GB/232 GiB) +[ 2.442590] sd 0:0:0:0: [sda] Write Protect is off +[ 2.442592] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 +[ 2.442607] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA +[ 2.447533] sda: sda1 +[ 2.448503] sd 0:0:0:0: [sda] Attached SCSI disk +``` + + From 1df8856b1a09b20bb0d867b2cfc37e53c333607b Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Tue, 18 Apr 2017 09:21:13 +0800 Subject: [PATCH 0008/1284] Modify the automatic compilation commit. --- build/deploy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/deploy.js b/build/deploy.js index 752618bc65c..8b82cf307be 100644 --- a/build/deploy.js +++ b/build/deploy.js @@ -17,7 +17,7 @@ if(fs.existsSync(deploy_path)){ ghpages.publish(deploy_path,{ repo: 'https://github.com/jaywcjlove/linux-command.git', branch: 'gh-pages', - message: 'Compiler generation page ' + new Date() + message: 'Linux command index, Compiler generation page ' + new Date() }, function(err) { if(err) return console.log(error(' → '+"ok!"+err)); load.stop() From f5325677213ae4e6a52de5f84d32f57faee61a01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Tue, 18 Apr 2017 13:30:16 +0800 Subject: [PATCH 0009/1284] =?UTF-8?q?zip=E6=B7=BB=E5=8A=A0=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E8=A7=A3=E5=86=B3=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- command/zip.md | 175 ++++++++++++++++++++++++++----------------------- 1 file changed, 94 insertions(+), 81 deletions(-) diff --git a/command/zip.md b/command/zip.md index adfe85bacfb..bf7601946d5 100644 --- a/command/zip.md +++ b/command/zip.md @@ -1,81 +1,94 @@ -zip -=== - -可以用来解压缩文件 - -## 补充说明 - -**zip命令** 可以用来解压缩文件,或者对文件进行打包操作。zip是个使用广泛的压缩程序,文件经它压缩后会另外产生具有“.zip”扩展名的压缩文件。 - -### 语法 - -``` -zip(选项)(参数) -``` - -### 选项 - -``` --A:调整可执行的自动解压缩文件; --b<工作目录>:指定暂时存放文件的目录; --c:替每个被压缩的文件加上注释; --d:从压缩文件内删除指定的文件; --D:压缩文件内不建立目录名称; --f:此参数的效果和指定“-u”参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中; --F:尝试修复已损坏的压缩文件; --g:将文件压缩后附加在已有的压缩文件之后,而非另行建立新的压缩文件; --h:在线帮助; --i<范本样式>:只压缩符合条件的文件; --j:只保存文件名称及其内容,而不存放任何目录名称; --J:删除压缩文件前面不必要的数据; --k:使用MS-DOS兼容格式的文件名称; --l:压缩文件时,把LF字符置换成LF+CR字符; --ll:压缩文件时,把LF+cp字符置换成LF字符; --L:显示版权信息; --m:将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中; --n<字尾字符串>:不压缩具有特定字尾字符串的文件; --o:以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同; --q:不显示指令执行过程; --r:递归处理,将指定目录下的所有文件和子目录一并处理; --S:包含系统和隐藏文件; --t<日期时间>:把压缩文件的日期设成指定的日期; --T:检查备份文件内的每个文件是否正确无误; --u:更换较新的文件到压缩文件内; --v:显示指令执行过程或显示版本信息; --V:保存VMS操作系统的文件属性; --w:在文件名称里假如版本编号,本参数仅在VMS操作系统下有效; --x<范本样式>:压缩时排除符合条件的文件; --X:不保存额外的文件属性; --y:直接保存符号连接,而非该链接所指向的文件,本参数仅在UNIX之类的系统下有效; --z:替压缩文件加上注释; --$:保存第一个被压缩文件所在磁盘的卷册名称; --<压缩效率>:压缩效率是一个介于1~9的数值。 -``` - -### 参数 - -* zip压缩包:指定要创建的zip压缩包; -* 文件列表:指定要压缩的文件列表。 - -### 实例 - -将`/home/Blinux/html/`这个目录下所有文件和文件夹打包为当前目录下的html.zip: - -``` -zip -q -r html.zip /home/Blinux/html -``` - -上面的命令操作是将绝对地址的文件及文件夹进行压缩,以下给出压缩相对路径目录,比如目前在Bliux这个目录下,执行以下操作可以达到以上同样的效果: - -``` -zip -q -r html.zip html -``` - -比如现在我的html目录下,我操作的zip压缩命令是: - -``` -zip -q -r html.zip * -``` - - - \ No newline at end of file +zip +=== + +可以用来解压缩文件 + +## 补充说明 + +**zip命令** 可以用来解压缩文件,或者对文件进行打包操作。zip是个使用广泛的压缩程序,文件经它压缩后会另外产生具有“.zip”扩展名的压缩文件。 + +### 语法 + +``` +zip(选项)(参数) +``` + +### 选项 + +``` +-A:调整可执行的自动解压缩文件; +-b<工作目录>:指定暂时存放文件的目录; +-c:替每个被压缩的文件加上注释; +-d:从压缩文件内删除指定的文件; +-D:压缩文件内不建立目录名称; +-f:此参数的效果和指定“-u”参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中; +-F:尝试修复已损坏的压缩文件; +-g:将文件压缩后附加在已有的压缩文件之后,而非另行建立新的压缩文件; +-h:在线帮助; +-i<范本样式>:只压缩符合条件的文件; +-j:只保存文件名称及其内容,而不存放任何目录名称; +-J:删除压缩文件前面不必要的数据; +-k:使用MS-DOS兼容格式的文件名称; +-l:压缩文件时,把LF字符置换成LF+CR字符; +-ll:压缩文件时,把LF+cp字符置换成LF字符; +-L:显示版权信息; +-m:将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中; +-n<字尾字符串>:不压缩具有特定字尾字符串的文件; +-o:以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同; +-q:不显示指令执行过程; +-r:递归处理,将指定目录下的所有文件和子目录一并处理; +-S:包含系统和隐藏文件; +-t<日期时间>:把压缩文件的日期设成指定的日期; +-T:检查备份文件内的每个文件是否正确无误; +-u:更换较新的文件到压缩文件内; +-v:显示指令执行过程或显示版本信息; +-V:保存VMS操作系统的文件属性; +-w:在文件名称里假如版本编号,本参数仅在VMS操作系统下有效; +-x<范本样式>:压缩时排除符合条件的文件; +-X:不保存额外的文件属性; +-y:直接保存符号连接,而非该链接所指向的文件,本参数仅在UNIX之类的系统下有效; +-z:替压缩文件加上注释; +-$:保存第一个被压缩文件所在磁盘的卷册名称; +-<压缩效率>:压缩效率是一个介于1~9的数值。 +``` + +### 参数 + +* zip压缩包:指定要创建的zip压缩包; +* 文件列表:指定要压缩的文件列表。 + +### 实例 + +将`/home/Blinux/html/`这个目录下所有文件和文件夹打包为当前目录下的html.zip: + +``` +zip -q -r html.zip /home/Blinux/html +``` + +上面的命令操作是将绝对地址的文件及文件夹进行压缩,以下给出压缩相对路径目录,比如目前在Bliux这个目录下,执行以下操作可以达到以上同样的效果: + +``` +zip -q -r html.zip html +``` + +比如现在我的html目录下,我操作的zip压缩命令是: + +``` +zip -q -r html.zip * +``` + +### 问题解决 + +CentOS7中命令找不到 + +``` +-Bash: Unzip: Command Not Found +``` + +解决方法 + +```bash +yum install -y unzip zip +``` + + From a79fcb7ce0412001ec97fef95dd10804c056417d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Tue, 18 Apr 2017 14:03:52 +0800 Subject: [PATCH 0010/1284] Create xz.md --- command/xz.md | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 command/xz.md diff --git a/command/xz.md b/command/xz.md new file mode 100644 index 00000000000..7ce144664c7 --- /dev/null +++ b/command/xz.md @@ -0,0 +1,93 @@ +xz +=== + +POSIX 平台开发具有高压缩率的工具。 + +## 补充说明 + +**xz命令** XZ Utils 是为 POSIX 平台开发具有高压缩率的工具。它使用 LZMA2 压缩算法,生成的压缩文件比 POSIX 平台传统使用的 gzip、bzip2 生成的压缩文件更小,而且解压缩速度也很快。最初 XZ Utils 的是基于 LZMA-SDK 开发,但是 LZMA-SDK 包含了一些 WINDOWS 平台的特性,所以 XZ Utils 为以适应 POSIX 平台作了大幅的修改。XZ Utils 的出现也是为了取代 POSIX 系统中旧的 LZMA Utils。 + +### 语法 + +``` +xz(选项)(参数) +xz [OPTION]... [FILE]... +``` + +### 选项 + +```bash +-z, --compress 强制压缩 +-d, --decompress, --uncompress + force decompression +-t, --test 测试压缩文件的完整性 +-l, --list 列出有关.xz文件的信息 +-k, --keep 保留(不要删除)输入文件 +-f, --force 强制覆盖输出文件和(解)压缩链接 +-c, --stdout, --to-stdout + 写入标准输出,不要删除输入文件 +-0 ... -9 压缩预设; 默认为6; 取压缩机*和* + 使用7-9之前解压缩内存使用量考虑在内! +-e, --extreme 尝试通过使用更多的CPU时间来提高压缩比; + 要求不影响解压缩存储器 +-T, --threads=NUM 最多使用NUM个线程; 默认值为1; set to 0 + 设置为0,使用与处理器内核一样多的线程 +-q, --quiet 抑制警告; 指定两次以抑制错误 +-v, --verbose 冗长; 指定两次更详细 +-h, --help 显示这个简洁的帮助并退出 +-H, --long-help 显示更多帮助(还列出了高级选项) +-V, --version 显示版本号并退出 +``` + +### 参数 + +* 源文件:指定连接的源文件。 +* 目标文件:指定源文件的目标连接文件。 + +### 实例 + +压缩一个文件 test.txt,压缩成功后生成 test.txt.xz, 原文件会被删除。 + +```bash +$ xz test.txt +$ ls test.txt* + +test.txt.xz +``` + +解压 test.txt.xz 文件,并使用参数 -k 保持原文件不被删除 + +```bash +$ xz -d -k test.txt.xz +$ ls test.txt* + +test.txt.xz test.txt +``` + +使用参数 -l 显示 .xz 文件的基本信息。基本信息包括压缩率、数据完整性验证方式等。也可以和参数 -v 或 -vv 配合显示更详尽的信息。 + +```bash +xz -l index.txt.xz +# Strms Blocks Compressed Uncompressed Ratio Check Filename +# 1 1 768 B 1,240 B 0.619 CRC64 index.txt. +``` + +使用参数 -0, -1, -2, … -6, … -9 或参数 --fast, --best 设定压缩率。xz 命令的默认为 -6 ,对于大多数系统来说,甚至是一些较旧的系统,-4 … -6 压缩率预设值都不错的表现。 + +``` +$ xz -k7 xz_pipe_decomp_mini.c +$ xz -k --fast xz_pipe_decomp_mini.c +``` + +使用参数 -H 显示 xz 命令所有 options. 参数 -H 比使用参数 --help 显示的内容更详细。 + +``` +$ xz -H | more +``` + +借助 xargs 命令并行压缩多文件。下面的命令行可以将 /var/log 目录下所有的扩展名为 .log 的文件压缩。通过 xargs 命令同时运行多个 xz 进行压缩。 + +```bash +# 运行此命令须有 root 权限。 +find /var/log -type f -iname "*.log" -print0 | xargs -P4 -n16 xz -T1 +``` From dc1d1b1ad0c14cc5baef0887526da24d7a4f2817 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Tue, 18 Apr 2017 14:13:50 +0800 Subject: [PATCH 0011/1284] =?UTF-8?q?=E8=AF=A6=E6=83=85=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E8=B0=83=E6=95=B4=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- template/styl/index.styl | 4 ++++ template/styl/mixins/markdown.styl | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/template/styl/index.styl b/template/styl/index.styl index 2b06ef8e296..26c6f1dded7 100644 --- a/template/styl/index.styl +++ b/template/styl/index.styl @@ -184,6 +184,10 @@ a.github-corner { .header.header_list{ width auto + position fixed + width 100% + background #fff + z-index 99 } .header_list{ diff --git a/template/styl/mixins/markdown.styl b/template/styl/mixins/markdown.styl index 349439ab98a..67fff5606cb 100644 --- a/template/styl/mixins/markdown.styl +++ b/template/styl/mixins/markdown.styl @@ -26,7 +26,7 @@ div.markdown-body } } } - padding 30px 35px 30px 35px + padding 70px 35px 30px 35px word-wrap break-word font-family "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif font-size 14px From 349b7fd1a9f1ee3a21c52860c2da3ee23a147c92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Thu, 20 Apr 2017 23:01:36 +0800 Subject: [PATCH 0012/1284] =?UTF-8?q?scp.md=20=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=AE=9E=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- command/scp.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/command/scp.md b/command/scp.md index 532874d0d73..78f80b2f04e 100644 --- a/command/scp.md +++ b/command/scp.md @@ -58,8 +58,10 @@ scp -r root@10.10.10.10:/opt/soft/mongodb /opt/soft/ **上传本地文件到远程机器指定目录** -``` +```bash 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 ``` 复制本地`/opt/soft/`目录下的文件nginx-0.5.38.tar.gz到远程机器10.10.10.10的`opt/soft/scptest`目录。 @@ -73,4 +75,4 @@ scp -r /opt/soft/mongodb root@10.10.10.10:/opt/soft/scptest 上传本地目录`/opt/soft/mongodb`到远程机器10.10.10.10上`/opt/soft/scptest`的目录中去。 - \ No newline at end of file + From 68bca8fc134f0a6bca6a8247a09d1b844ebc027c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 21 Apr 2017 08:15:19 +0800 Subject: [PATCH 0013/1284] Update modprobe.md --- command/modprobe.md | 158 ++++++++++++++++++++++---------------------- 1 file changed, 79 insertions(+), 79 deletions(-) diff --git a/command/modprobe.md b/command/modprobe.md index d030b734bb6..417e160396f 100644 --- a/command/modprobe.md +++ b/command/modprobe.md @@ -1,79 +1,79 @@ -modprobe -=== - -自动处理可载入模块 - -## 补充说明 - -**modprobe命令** 用于智能地向内核中加载模块或者从内核中移除模块。 - -modprobe可载入指定的个别模块,或是载入一组相依的模块。modprobe会根据depmod所产生的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块。 - -### 语法 - -``` -modprobe(选项)(参数) -``` - -### 选项 - -``` --a或--all:载入全部的模块; --c或--show-conf:显示所有模块的设置信息; --d或--debug:使用排错模式; --l或--list:显示可用的模块; --r或--remove:模块闲置不用时,即自动卸载模块; --t或--type:指定模块类型; --v或--verbose:执行时显示详细的信息; --V或--version:显示版本信息; --help:显示帮助。 -``` - -### 参数 - -模块名:要加载或移除的模块名称。 - -### 实例 - - **查看modules的配置文件:** - -``` -modprobe -c -``` - -这里,可以查看modules的配置文件,比如模块的alias别名是什么等。会打印许多行信息,例如其中的一行会类似如下: - -``` -alias symbol:ip_conntrack_unregister_notifier ip_conntrack -``` - - **列出内核中所有已经或者未挂载的所有模块:** - -``` -modprobe -l -``` - -这里,我们能查看到我们所需要的模块,然后根据我们的需要来挂载;其实`modprobe -l`读取的模块列表就位于`/lib/modules/`uname -r``目录中;其中`uname -r`是内核的版本,例如输出结果的其中一行是: - -``` -/lib/modules/2.6.18-348.6.1.el5/kernel/net/netfilter/xt_statistic.ko -``` - - **挂载vfat模块:** - -``` -modprobe vfat -``` - -这里,使用格式`modprobe 模块名`来挂载一个模块。挂载之后,用lsmod可以查看已经挂载的模块。模块名是不能带有后缀的,我们通过`modprobe -l`所看到的模块,都是带有`.ko`或`.o`后缀。 - - **移除已经加载的模块:** - -``` -modprobe -r 模块名 -``` - -这里,移除已加载的模块,和rmmod功能相同。 - - - \ No newline at end of file +modprobe +=== + +自动处理可载入模块 + +## 补充说明 + +**modprobe命令** 用于智能地向内核中加载模块或者从内核中移除模块。 + +modprobe可载入指定的个别模块,或是载入一组相依的模块。modprobe会根据depmod所产生的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块。 + +### 语法 + +``` +modprobe(选项)(参数) +``` + +### 选项 + +``` +-a或--all:载入全部的模块; +-c或--show-conf:显示所有模块的设置信息; +-d或--debug:使用排错模式; +-l或--list:显示可用的模块; +-r或--remove:模块闲置不用时,即自动卸载模块; +-t或--type:指定模块类型; +-v或--verbose:执行时显示详细的信息; +-V或--version:显示版本信息; +-help:显示帮助。 +``` + +### 参数 + +模块名:要加载或移除的模块名称。 + +### 实例 + + **查看modules的配置文件:** + +``` +modprobe -c +``` + +这里,可以查看modules的配置文件,比如模块的alias别名是什么等。会打印许多行信息,例如其中的一行会类似如下: + +``` +alias symbol:ip_conntrack_unregister_notifier ip_conntrack +``` + + **列出内核中所有已经或者未挂载的所有模块:** + +``` +modprobe -l +``` + +这里,我们能查看到我们所需要的模块,然后根据我们的需要来挂载;其实`modprobe -l`读取的模块列表就位于/lib/modules/\`uname -r \`目录中;其中`uname -r`是内核的版本,例如输出结果的其中一行是: + +``` +/lib/modules/2.6.18-348.6.1.el5/kernel/net/netfilter/xt_statistic.ko +``` + + **挂载vfat模块:** + +``` +modprobe vfat +``` + +这里,使用格式`modprobe 模块名`来挂载一个模块。挂载之后,用lsmod可以查看已经挂载的模块。模块名是不能带有后缀的,我们通过`modprobe -l`所看到的模块,都是带有`.ko`或`.o`后缀。 + + **移除已经加载的模块:** + +``` +modprobe -r 模块名 +``` + +这里,移除已加载的模块,和rmmod功能相同。 + + + From 72dd9f9f355a84bf5da6495c51d6a9a2ee92d20a Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Mon, 1 May 2017 09:33:54 +0800 Subject: [PATCH 0014/1284] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B8=B8=E6=88=8F?= =?UTF-8?q?=E7=8E=A9=E5=AE=B6=E5=8F=91=E8=A1=8C=E7=89=88=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 339149d618e..2839013dac6 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Linux Command 520多个 Linux 命令大全,内容包含 Linux 命令手册、详解、学习,值得收藏的 Linux 命令速查手册。请原谅我写了个爬虫,爬了他们家的数据[linuxde.net](http://man.linuxde.net),同时进行了编辑,增加了一些数据。对他们的辛勤劳动表示敬意,个人希望能本地离线搜索,不喜欢广告,希望得到干净漂亮的预览界面,业余和工作时间需要使用大量的命令,所以干了一件看似比较愚蠢的事情,在回头有空的时候估计能做一个App?,或者是命令行帮助工具?但目前还没有计划... -[Github Web版](https://jaywcjlove.github.io/linux-command/) | [开源中国Web版](http://jslite.oschina.io/linux-command) | [Alfred 版本下载](https://github.com/jaywcjlove/linux-command/releases) | [Android版本实现](https://github.com/Ernest-su/LinuxCmd.git) +[Github Web版](https://jaywcjlove.github.io/linux-command/) | [开源中国Web版](http://jslite.oschina.io/linux-command) | [其它Web版](http://linux-command.composer-proxy.org/) | [Alfred 版本下载](https://github.com/jaywcjlove/linux-command/releases) | [Android版本实现](https://github.com/Ernest-su/LinuxCmd.git) 扫描二维码移动端预览搜索 @@ -42,6 +42,7 @@ Linux Command - [知识相关](#知识相关) - [软件工具](#软件工具) - [中国开源镜像站点](#中国开源镜像站点) + - [游戏玩家发行版](#游戏玩家发行版) ## Linux命令分类 @@ -145,16 +146,29 @@ console.log("---->",comm.ls) - 阿里云开源镜像站:http://mirrors.aliyun.com/ - 网易开源镜像站:http://mirrors.163.com/ - 搜狐开源镜像站:http://mirrors.sohu.com/ -- 北京交通大学:http://mirror.bjtu.edu.cn/ <教育网荐> -- 兰州大学:http://mirror.lzu.edu.cn/ <西北高校FTP搜索引擎> +- 北京交通大学:http://mirror.bjtu.edu.cn/ \<教育网荐\> +- 兰州大学:http://mirror.lzu.edu.cn/ \<西北高校FTP搜索引擎\> - 厦门大学:http://mirrors.xmu.edu.cn/ - 上海交通大学:http://ftp.sjtu.edu.cn/ - 清华大学:http://mirrors.tuna.tsinghua.edu.cn/ - http://mirrors6.tuna.tsinghua.edu.cn/ - http://mirrors4.tuna.tsinghua.edu.cn/ - 中国科学技术大学:http://mirrors.ustc.edu.cn/ - - http://ipv4.ustc.edu.cn/ <教育网、电信> - - http://ipv6.ustc.edu.cn/ + - http://ipv4.ustc.edu.cn/ \<教育网、电信\> + - http://ipv6.ustc.edu.cn/ \ - 东北大学:http://mirror.neu.edu.cn/ - 浙江大学:http://mirrors.zju.edu.cn/ - 东软信息学院:http://mirrors.neusoft.edu.cn/ + +### 游戏玩家发行版 + +*面向游戏玩家的八款最佳 Linux 发行版,本文由开源中国整理[原文在这里](https://my.oschina.net/editorial-story/blog/888795)* + +- [SteamOS](http://store.steampowered.com/livingroom/SteamOS/) [官方文档](http://store.steampowered.com/steamos/buildyourown) [镜像下载](http://repo.steampowered.com/download/) +- [Ubuntu GamePack](https://ualinux.com/en/ubuntu-gamepack) [下载地址](https://ualinux.com/en/ubuntu-gamepack) +- [Fedora – Games Spin](https://www.oschina.net/p/fedora_linux) [下载地址](https://labs.fedoraproject.org/en/games/) +- [SparkyLinux – GameOver Edition](https://www.oschina.net/p/sparkylinux) [下载地址](https://sparkylinux.org/download/#special) +- [Lakka](http://www.lakka.tv/) [下载地址](http://www.lakka.tv/disclaimer/) +- [Game Drift Linux](http://gamedrift.org/) [下载地址](http://gamedrift.org/Download.html) +- [Solus](https://solus-project.com) [下载地址](https://solus-project.com/download/) +- [Manjaro Gaming Edition (mGAMe)](https://sourceforge.net/projects/mgame/) [下载地址](https://sourceforge.net/projects/mgame/) \ No newline at end of file From 1ab47cae20150a63080081b67599f57d2c0245e7 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Mon, 1 May 2017 09:37:02 +0800 Subject: [PATCH 0015/1284] update data.json --- dist/data.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/data.json b/dist/data.json index 81ccedb4951..9b0bb709414 100644 --- a/dist/data.json +++ b/dist/data.json @@ -1 +1 @@ -{"w":{"n":"w","p":"/w","d":"显示目前登入系统的用户信息"},"dd":{"n":"dd","p":"/dd","d":"复制文件并对原文件的内容进行转换和格式化处理"},"ip":{"n":"ip","p":"/ip","d":"网络配置工具"},"ld":{"n":"ld","p":"/ld","d":"将目标文件连接为可执行程序"},"ln":{"n":"ln","p":"/ln","d":"用来为文件创件连接"},"lp":{"n":"lp","p":"/lp","d":"打印文件或修改排队的打印任务"},"fg":{"n":"fg","p":"/fg","d":"将后台作业放到前台终端运行"},"wc\r":{"n":"wc\r","p":"/wc","d":"统计文件的字节数、字数、行数"},"as":{"n":"as","p":"/as","d":"汇编语言编译器"},"at":{"n":"at","p":"/at","d":"在指定时间执行一个任务"},"fc":{"n":"fc","p":"/fc","d":"修改历史命令并执行"},"ls":{"n":"ls","p":"/ls","d":"显示目录内容列表"},"ab":{"n":"ab","p":"/ab","d":"Apache服务器的性能测试工具"},"vi":{"n":"vi","p":"/vi","d":"功能强大的纯文本编辑器"},"bc":{"n":"bc","p":"/bc","d":"算术操作精密运算工具"},"bg":{"n":"bg","p":"/bg","d":"用于将作业放到后台运行"},"tr":{"n":"tr","p":"/tr","d":"将字符进行替换压缩和删除"},"ex":{"n":"ex","p":"/ex","d":"启动vim编辑器的ex编辑模式"},"ed":{"n":"ed","p":"/ed","d":"单行纯文本编辑器"},"mv":{"n":"mv","p":"/mv","d":"用来对文件或目录重新命名"},"du":{"n":"du","p":"/du","d":"显示每个文件和目录的磁盘使用空间"},"nl":{"n":"nl","p":"/nl","d":"在Linux系统中计算文件内容行号"},"nm":{"n":"nm","p":"/nm","d":"显示二进制目标文件的符号表"},"cd":{"n":"cd","p":"/cd","d":"切换用户当前工作目录"},"od":{"n":"od","p":"/od","d":"输出文件的八进制、十六进制等格式编码的字节"},"su":{"n":"su","p":"/su","d":"用于切换当前用户身份到其他用户身份"},"pr":{"n":"pr","p":"/pr","d":"将文本文件转换成适合打印的格式"},"ss\r":{"n":"ss\r","p":"/ss","d":"获取socket统计信息"},"sh":{"n":"sh","p":"/sh","d":"shell命令解释器"},"ps":{"n":"ps","p":"/ps","d":"报告当前系统的进程状态"},"pv":{"n":"pv","p":"/pv","d":"显示当前在命令行执行的命令的进度信息,管道查看器。"},"df":{"n":"df","p":"/df","d":"显示磁盘的相关信息"},"rm":{"n":"rm","p":"/rm","d":"用于删除给定的文件和目录"},"cp":{"n":"cp","p":"/cp","d":"将源文件或目录复制到目标文件或目录中"},"id":{"n":"id","p":"/id","d":"显示用户的ID以及所属群组的ID"},"scp":{"n":"scp","p":"/scp","d":"加密的方式在本地主机和远程主机之间复制文件"},"rsh":{"n":"rsh","p":"/rsh","d":"连接远程主机并执行命令"},"sed":{"n":"sed","p":"/sed","d":"功能强大的流式文本编辑器"},"rpm":{"n":"rpm","p":"/rpm","d":"RPM软件包的管理工具"},"seq":{"n":"seq","p":"/seq","d":"以指定增量从首数开始打印数字到尾数"},"rev":{"n":"rev","p":"/rev","d":"将文件内容以字符为单位反序输出"},"cut":{"n":"cut","p":"/cut","d":"连接文件并打印到标准输出设备上"},"zip":{"n":"zip","p":"/zip","d":"可以用来解压缩文件"},"rcp\r":{"n":"rcp\r","p":"/rcp","d":"使在两台Linux主机之间的文件复制操作更简单"},"pwd":{"n":"pwd","p":"/pwd","d":"绝对路径方式显示用户当前工作目录"},"col":{"n":"col","p":"/col","d":"过滤控制字符"},"pvs":{"n":"pvs","p":"/pvs","d":"输出物理卷信息报表"},"dig":{"n":"dig","p":"/dig","d":"域名查询工具"},"cmp":{"n":"cmp","p":"/cmp","d":"比较两个文件是否有差异"},"set":{"n":"set","p":"/set","d":"显示或设置shell特性及shell变量"},"ssh\r":{"n":"ssh\r","p":"/ssh","d":"openssh套件中的客户端连接工具"},"dnf":{"n":"dnf","p":"/dnf","d":"新一代的RPM软件包管理器"},"php":{"n":"php","p":"/php","d":"PHP语言的命令行接口"},"sum":{"n":"sum","p":"/sum","d":"计算文件的校验码和显示块数"},"cat":{"n":"cat","p":"/cat","d":"连接文件并打印到标准输出设备上"},"tac":{"n":"tac","p":"/tac","d":"将文件已行为单位的反序输出"},"cal":{"n":"cal","p":"/cal","d":"显示当前日历或指定日期的日历"},"tar\r":{"n":"tar\r","p":"/tar","d":"Linux下的归档使用工具,用来打包和备份。"},"tee":{"n":"tee","p":"/tee","d":"把数据重定向到给定文件和屏幕上"},"sar":{"n":"sar","p":"/sar","d":"系统运行状态统计工具"},"elm":{"n":"elm","p":"/elm","d":"纯文本邮件客户端程序"},"env":{"n":"env","p":"/env","d":"显示系统中已存在的环境变量"},"top":{"n":"top","p":"/top","d":"显示或管理执行中的程序"},"awk":{"n":"awk","p":"/awk","d":"文本和数据进行处理的编程语言"},"lpr":{"n":"lpr","p":"/lpr","d":"将文件发送给指定打印机进行打印"},"atq":{"n":"atq","p":"/atq","d":"列出当前用户的at任务列表"},"lpq":{"n":"lpq","p":"/lpq","d":"显示打印队列中的打印任务的状态信息"},"arp":{"n":"arp","p":"/arp","d":"显示和修改IP到MAC转换表"},"lpc":{"n":"lpc","p":"/lpc","d":"命令行方式打印机控制程序"},"arj":{"n":"arj","p":"/arj","d":"用于创建和管理.arj压缩包"},"who":{"n":"who","p":"/who","d":"显示目前登录系统的用户信息"},"fmt":{"n":"fmt","p":"/fmt","d":"读取文件后优化处理并输出"},"ftp\r":{"n":"ftp\r","p":"/ftp","d":"用来设置文件系统相关功能"},"lha":{"n":"lha","p":"/lha","d":"压缩或解压缩lzh格式文件"},"let":{"n":"let","p":"/let","d":"简单的计算器"},"gcc":{"n":"gcc","p":"/gcc","d":"基于C/C++的编译器"},"gdb":{"n":"gdb","p":"/gdb","d":"功能强大的程序调试器"},"ldd":{"n":"ldd","p":"/ldd","d":"打印程序或者库文件所依赖的共享库列表"},"yes":{"n":"yes","p":"/yes","d":"重复打印指定字符串"},"gpm":{"n":"gpm","p":"/gpm","d":"提供文字模式下的滑鼠事件处理"},"joe":{"n":"joe","p":"/joe","d":"强大的纯文本编辑器"},"jed":{"n":"jed","p":"/jed","d":"主要用于编辑代码的编辑器"},"yum\r":{"n":"yum\r","p":"/yum","d":"基于RPM的软件包管理器"},"man":{"n":"man","p":"/man","d":"查看Linux中的指令帮助"},"sync":{"n":"sync","p":"/sync","d":"用于强制被改变的内容立刻写入磁盘"},"pvck":{"n":"pvck","p":"/pvck","d":"检测物理卷的LVM元数据的一致性"},"znew":{"n":"znew","p":"/znew","d":"将.Z压缩包重新转化为gzip命令压缩的.gz压缩包"},"sudo":{"n":"sudo","p":"/sudo","d":"以其他身份来执行命令"},"pssh":{"n":"pssh","p":"/pssh","d":"批量管理执行"},"dirs":{"n":"dirs","p":"/dirs","d":"显示目录记录"},"uniq":{"n":"uniq","p":"/uniq","d":"报告或忽略文件中的重复行"},"chfn":{"n":"chfn","p":"/chfn","d":"用来改变finger命令显示的信息"},"stty":{"n":"stty","p":"/stty","d":"修改终端命令行的相关设置"},"popd":{"n":"popd","p":"/popd","d":"用于删除目录栈中的记录"},"pmap":{"n":"pmap","p":"/pmap","d":"报告进程的内存映射关系"},"ping":{"n":"ping","p":"/ping","d":"测试主机之间网络的连通性"},"pico":{"n":"pico","p":"/pico","d":"功能强大全屏幕的文本编辑器"},"stat":{"n":"stat","p":"/stat","d":"用于显示文件的状态信息"},"perl":{"n":"perl","p":"/perl","d":"perl语言解释器"},"sshd":{"n":"sshd","p":"/sshd","d":"openssh软件套件中的服务器守护进程"},"nmap":{"n":"nmap","p":"/nmap","d":"网络探测和安全审核"},"wall":{"n":"wall","p":"/wall","d":"向系统当前所有打开的终端上输出信息"},"wait":{"n":"wait","p":"/wait","d":"等待进程执行完后返回"},"nice":{"n":"nice","p":"/nice","d":"改变程序执行的优先权等级"},"dpkg":{"n":"dpkg","p":"/dpkg","d":"Debian Linux系统上安装、创建和管理软件包"},"dris":{"n":"dris","p":"/dris","d":"显示和清空目录堆栈中的内容"},"nano":{"n":"nano","p":"/nano","d":"字符终端文本编辑器"},"sort":{"n":"sort","p":"/sort","d":"将文件进行排序并输出"},"dump":{"n":"dump","p":"/dump","d":"用于备份ext2或者ext3文件系统"},"chsh":{"n":"chsh","p":"/chsh","d":"用来更换登录系统时使用的shell"},"more":{"n":"more","p":"/more","d":"显示文件内容,每次显示一屏"},"echo":{"n":"echo","p":"/echo","d":"输出指定的字符串或者变量"},"bind":{"n":"bind","p":"/bind","d":"显示或设置键盘按键与其相关的功能"},"mkfs":{"n":"mkfs","p":"/mkfs","d":"用于在设备上创建Linux文件系统"},"mesg":{"n":"mesg","p":"/mesg","d":"设置当前终端的写权限"},"sftp":{"n":"sftp","p":"/sftp","d":"交互式的文件传输程序"},"make":{"n":"make","p":"/make","d":"GNU的工程化编译工具"},"type":{"n":"type","p":"/type","d":"显示指定命令的类型"},"mail":{"n":"mail","p":"/mail","d":"命令行下发送和接收电子邮件"},"lynx":{"n":"lynx","p":"/lynx","d":"纯文本模式的网页浏览器"},"tree\r":{"n":"tree\r","p":"/tree","d":"树状图列出目录的内容"},"lsof":{"n":"lsof","p":"/lsof","d":"显示Linux系统当前已打开的所有文件列表"},"trap":{"n":"trap","p":"/trap","d":"指定在接收到信号后将要采取的动作"},"exec":{"n":"exec","p":"/exec","d":"调用并执行指定的命令"},"exit":{"n":"exit","p":"/exit","d":"退出当前的shell"},"wget":{"n":"wget","p":"/wget","d":"Linux系统下载文件工具"},"lprm":{"n":"lprm","p":"/lprm","d":"删除打印队列中的打印任务"},"comm":{"n":"comm","p":"/comm","d":"两个文件之间的比较"},"expr":{"n":"expr","p":"/expr","d":"一款表达式计算工具"},"tput":{"n":"tput","p":"/tput","d":"通过terminfo数据库对终端会话进行初始化和操作"},"arch":{"n":"arch","p":"/arch","d":"显示当前主机的硬件架构类型"},"time":{"n":"time","p":"/time","d":"统计给定命令所花费的总时间"},"tftp":{"n":"tftp","p":"/tftp","d":"在本机和tftp服务器之间使用TFTP协议传输文件"},"file":{"n":"file","p":"/file","d":"用来探测给定文件的类型。"},"find\r":{"n":"find\r","p":"/find","d":"在指定目录下查找文件"},"test":{"n":"test","p":"/test","d":"shell环境中测试条件表达式工具"},"look":{"n":"look","p":"/look","d":"显示文件中以指定字符串开头的任意行"},"cpio":{"n":"cpio","p":"/cpio","d":"用来建立、还原备份档的工具程序"},"atop":{"n":"atop","p":"/atop","d":"监控Linux系统资源与进程的工具"},"fold":{"n":"fold","p":"/fold","d":"控制文件内容输出时所占用的屏幕宽度"},"free\r":{"n":"free\r","p":"/free","d":"显示内存的使用情况"},"fsck":{"n":"fsck","p":"/fsck","d":"检查并且试图修复文件系统中的错误"},"zcat":{"n":"zcat","p":"/zcat","d":"显示压缩包中文件的内容"},"lilo":{"n":"lilo","p":"/lilo","d":"安装核心载入开机管理程序"},"talk":{"n":"talk","p":"/talk","d":"让用户和其他用户聊天"},"lftp":{"n":"lftp","p":"/lftp","d":"优秀的文件客户端程序"},"read":{"n":"read","p":"/read","d":"从键盘读取变量值"},"less":{"n":"less","p":"/less","d":"分屏上下翻页浏览文件内容"},"curl":{"n":"curl","p":"/curl","d":"利用URL规则在命令行下工作的文件传输工具"},"gcov":{"n":"gcov","p":"/gcov","d":"测试程序的代码覆盖率的工具"},"tail":{"n":"tail","p":"/tail","d":"在屏幕上显示指定文件的末尾若干行"},"date":{"n":"date","p":"/date","d":"显示或设置系统时间与日期"},"atrm":{"n":"atrm","p":"/atrm","d":"删除待执行任务队列中的指定任务"},"last":{"n":"last","p":"/last","d":"列出目前与过去登入系统的用户相关信息"},"xset":{"n":"xset","p":"/xset","d":"设置X-Window系统中的用户爱好的实用工具"},"grep\r":{"n":"grep\r","p":"/grep","d":"强大的文本搜索工具"},"kill":{"n":"kill","p":"/kill","d":"删除执行中的程序或工作"},"join":{"n":"join","p":"/join","d":"两个文件中指定栏位内容相同的行连接起来"},"axel":{"n":"axel","p":"/axel","d":"多线程下载工具"},"jobs":{"n":"jobs","p":"/jobs","d":"显示Linux中的任务列表及任务状态"},"arpd":{"n":"arpd","p":"/arpd","d":"收集免费ARP信息"},"ipcs":{"n":"ipcs","p":"/ipcs","d":"分析消息队列共享内存和信号量 "},"pwck":{"n":"pwck","p":"/pwck","d":"用来验证系统认证文件内容和格式的完整性"},"grub":{"n":"grub","p":"/grub","d":"多重引导程序grub的命令行shell工具"},"init":{"n":"init","p":"/init","d":"init进程是所有Linux进程的父进程"},"info":{"n":"info","p":"/info","d":"Linux下info格式的帮助指令"},"gzip\r":{"n":"gzip\r","p":"/gzip","d":"用来压缩文件"},"halt":{"n":"halt","p":"/halt","d":"关闭正在运行的Linux操作系统"},"ifup":{"n":"ifup","p":"/ifup","d":"激活指定的网络接口"},"head":{"n":"head","p":"/head","d":"在屏幕上显示指定文件的开头若干行"},"help":{"n":"help","p":"/help","d":"显示帮助信息"},"diff":{"n":"diff","p":"/diff","d":"比较给定的两个文件的不同"},"htop":{"n":"htop","p":"/htop","d":"[非内部命令]一个互动的进程查看器,可以动态观察系统进程状况。"},"host":{"n":"host","p":"/host","d":"常用的分析域名查询工具"},"lsusb":{"n":"lsusb","p":"/lsusb","d":"显示本机的USB设备列表信息"},"dmesg":{"n":"dmesg","p":"/dmesg","d":"显示Linux系统启动信息"},"zfore":{"n":"zfore","p":"/zfore","d":"强制为gzip格式的压缩文件添加.gz后缀"},"xinit":{"n":"xinit","p":"/xinit","d":"是Linux下X-Window系统的初始化程序"},"xhost":{"n":"xhost","p":"/xhost","d":"制哪些X客户端能够在X服务器上显示"},"iconv":{"n":"iconv","p":"/iconv","d":"转换文件的编码方式"},"xclip":{"n":"xclip","p":"/xclip","d":"管理 X 粘贴板"},"ifcfg":{"n":"ifcfg","p":"/ifcfg","d":"置Linux中的网络接口参数"},"xauth":{"n":"xauth","p":"/xauth","d":"显示和编辑被用于连接X服务器的认证信息"},"gzexe":{"n":"gzexe","p":"/gzexe","d":"用来压缩可执行文件"},"xargs\r":{"n":"xargs\r","p":"/xargs","d":"给其他命令传递参数的一个过滤器"},"write":{"n":"write","p":"/write","d":"向指定登录用户终端上发送信息"},"iotop":{"n":"iotop","p":"/iotop","d":"用来监视磁盘I/O使用状况的工具"},"which":{"n":"which","p":"/which","d":"查找并显示给定命令的绝对路径"},"ipcrm":{"n":"ipcrm","p":"/ipcrm","d":"删除消息队列、信号集、或者共享内存标识"},"watch\r":{"n":"watch\r","p":"/watch","d":"可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令"},"iperf":{"n":"iperf","p":"/iperf","d":"网络性能测试工具"},"users":{"n":"users","p":"/users","d":"显示当前登录系统的所有用户"},"grpck":{"n":"grpck","p":"/grpck","d":"用于验证组文件的完整性"},"unzip":{"n":"unzip","p":"/unzip","d":"用于解压缩由zip命令压缩的压缩包"},"unset":{"n":"unset","p":"/unset","d":"删除指定的shell变量或函数"},"kexec":{"n":"kexec","p":"/kexec","d":"从当前正在运行的内核引导到一个新内核"},"batch":{"n":"batch","p":"/batch","d":"在系统不繁忙的时候执行定时任务"},"unarj":{"n":"unarj","p":"/unarj","d":"解压缩由arj命令创建的压缩包"},"lastb":{"n":"lastb","p":"/lastb","d":"列出登入系统失败的用户相关信息"},"uname":{"n":"uname","p":"/uname","d":"显示Linux系统信息"},"umask":{"n":"umask","p":"/umask","d":"用来设置限制新建文件权限的掩码"},"fuser":{"n":"fuser","p":"/fuser","d":"使用文件或文件结构识别进程"},"blkid":{"n":"blkid","p":"/blkid","d":"查看块设备的文件系统类型、LABEL、UUID等信息"},"touch":{"n":"touch","p":"/touch","d":"创建新的空文件"},"bzcat":{"n":"bzcat","p":"/bzcat","d":"解压缩指定的.bz2文件"},"tload":{"n":"tload","p":"/tload","d":"显示系统负载状况"},"login":{"n":"login","p":"/login","d":"登录系统或切换用户身份"},"bzcmp":{"n":"bzcmp","p":"/bzcmp","d":"比较两个压缩包中的文件"},"bzip2":{"n":"bzip2","p":"/bzip2","d":"将文件压缩成bz2格式"},"fgrep":{"n":"fgrep","p":"/fgrep","d":"为文件搜索文字字符串"},"fdisk":{"n":"fdisk","p":"/fdisk","d":"查看磁盘使用情况和磁盘分区"},"tailf":{"n":"tailf","p":"/tailf","d":"在屏幕上显示指定文件的末尾若干行内容,通常用于日志文件的跟踪输出。"},"lsblk":{"n":"lsblk","p":"/lsblk","d":"列出块设备信息"},"lsmod":{"n":"lsmod","p":"/lsmod","d":"显示已载入系统的模块"},"lspci":{"n":"lspci","p":"/lspci","d":"显示当前主机的所有PCI总线信息"},"alias":{"n":"alias","p":"/alias","d":"用来设置指令的别名"},"chage":{"n":"chage","p":"/chage","d":"修改帐号和密码的有效期限"},"emacs":{"n":"emacs","p":"/emacs","d":"功能强大的全屏文本编辑器"},"mailq":{"n":"mailq","p":"/mailq","d":"显示待发送的邮件队列"},"eject":{"n":"eject","p":"/eject","d":"用来退出抽取式设备"},"egrep":{"n":"egrep","p":"/egrep","d":"在文件内查找指定的字符串"},"chcon":{"n":"chcon","p":"/chcon","d":"修改对象(文件)的安全上下文"},"chgrp":{"n":"chgrp","p":"/chgrp","d":"用来变更文件或目录的所属群组"},"mkdir":{"n":"mkdir","p":"/mkdir","d":"用来创建目录"},"chmod\r":{"n":"chmod\r","p":"/chmod","d":"用来变更文件或目录的权限"},"mknod":{"n":"mknod","p":"/mknod","d":"创建字符设备文件和块设备文件"},"chown":{"n":"chown","p":"/chown","d":"用来变更文件或目录的拥有者或所属群组"},"squid":{"n":"squid","p":"/squid","d":"squid服务器守护进程"},"mysql":{"n":"mysql","p":"/mysql","d":"MySQL服务器客户端工具"},"split":{"n":"split","p":"/split","d":"分割任意大小的文件"},"spell":{"n":"spell","p":"/spell","d":"对文件进行拼写检查"},"sleep":{"n":"sleep","p":"/sleep","d":"将目前动作延迟一段时间"},"dstat":{"n":"dstat","p":"/dstat","d":"通用的系统资源统计工具"},"ncftp":{"n":"ncftp","p":"/ncftp","d":"是增强的的FTP工具"},"skill":{"n":"skill","p":"/skill","d":"向选定的进程发送信号冻结进程"},"shopt":{"n":"shopt","p":"/shopt","d":"显示和设置shell操作选项"},"cksum":{"n":"cksum","p":"/cksum","d":"检查文件的CRC是否正确"},"clear":{"n":"clear","p":"/clear","d":"清除当前屏幕终端上的任何信息"},"ngrep":{"n":"ngrep","p":"/ngrep","d":"方便的数据包匹配和显示工具"},"colrm":{"n":"colrm","p":"/colrm","d":"删除文件中的指定列"},"rsync":{"n":"rsync","p":"/rsync","d":"远程数据同步工具"},"nohup":{"n":"nohup","p":"/nohup","d":"将程序以忽略挂起信号的方式运行起来"},"rpmdb":{"n":"rpmdb","p":"/rpmdb","d":"初始化和重建RPM数据库"},"route":{"n":"route","p":"/route","d":"显示并设置Linux中静态路由表"},"rmmod":{"n":"rmmod","p":"/rmmod","d":"从运行的内核中移除指定的内核模块"},"rmdir":{"n":"rmdir","p":"/rmdir","d":"用来删除空目录"},"rexec":{"n":"rexec","p":"/rexec","d":"运程执行Linux系统下命令 "},"paste":{"n":"paste","p":"/paste","d":"将多个文件按列队列合并"},"patch":{"n":"patch","p":"/patch","d":"为开放源代码软件安装补丁程序"},"pfctl":{"n":"pfctl","p":"/pfctl","d":"PF防火墙的配置命令"},"pgrep":{"n":"pgrep","p":"/pgrep","d":"设置用户的认证信息,包括用户密码、密码过期时间等"},"pidof":{"n":"pidof","p":"/pidof","d":"查找指定名称的进程的进程号ID号"},"pkill":{"n":"pkill","p":"/pkill","d":"可以按照进程名杀死进程"},"quota":{"n":"quota","p":"/quota","d":"显示磁盘已使用的空间与限制"},"diff3":{"n":"diff3","p":"/diff3","d":"比较3个文件不同的地方"},"pushd":{"n":"pushd","p":"/pushd","d":"将目录加入命令堆叠中"},"depmod":{"n":"depmod","p":"/depmod","d":"分析可载入模块的相依性"},"ltrace":{"n":"ltrace","p":"/ltrace","d":"用来跟踪进程调用库函数的情况"},"cancel":{"n":"cancel","p":"/cancel","d":"取消已存在的打印任务"},"syslog":{"n":"syslog","p":"/syslog","d":"系统默认的日志守护进程"},"sysctl":{"n":"sysctl","p":"/sysctl","d":"时动态地修改内核的运行参数"},"accept":{"n":"accept","p":"/accept","d":"指示打印系统接受发往指定目标打印机的打印任务"},"swapon":{"n":"swapon","p":"/swapon","d":"激活Linux系统中交换空间"},"ifstat":{"n":"ifstat","p":"/ifstat","d":"统计网络接口流量状态"},"lvscan":{"n":"lvscan","p":"/lvscan","d":"扫描逻辑卷"},"enable":{"n":"enable","p":"/enable","d":"启动或关闭shell内建命令"},"unlink":{"n":"unlink","p":"/unlink","d":"系统调用函数unlink去删除指定的文件"},"whoami":{"n":"whoami","p":"/whoami","d":"打印当前有效的用户名称"},"chattr":{"n":"chattr","p":"/chattr","d":"用来改变文件属性"},"elinks":{"n":"elinks","p":"/elinks","d":"纯文本界面的WWW浏览器"},"hdparm":{"n":"hdparm","p":"/hdparm","d":"显示与设定硬盘的参数"},"md5sum":{"n":"md5sum","p":"/md5sum","d":"计算和校验文件报文摘要的工具程序"},"whatis":{"n":"whatis","p":"/whatis","d":"查询一个命令执行什么功能"},"arping":{"n":"arping","p":"/arping","d":"通过发送ARP协议报文测试网络"},"umount":{"n":"umount","p":"/umount","d":"用于卸载已经加载的文件系统"},"ipcalc":{"n":"ipcalc","p":"/ipcalc","d":"简单的IP地址计算器"},"mke2fs":{"n":"mke2fs","p":"/mke2fs","d":"创建磁盘分区上的“etc2/etc3”文件系统"},"strace":{"n":"strace","p":"/strace","d":"跟踪系统调用和信号"},"startx":{"n":"startx","p":"/startx","d":"用来启动X Window"},"ulimit":{"n":"ulimit","p":"/ulimit","d":"控制shell程序的资源"},"indent":{"n":"indent","p":"/indent","d":"格式化C语言的源文件"},"mkswap":{"n":"mkswap","p":"/mkswap","d":"建立和设置SWAP交换分区"},"mktemp":{"n":"mktemp","p":"/mktemp","d":"创建临时文件供shell脚本使用"},"ftpwho":{"n":"ftpwho","p":"/ftpwho","d":"显示当前每个ftp会话信息"},"ftptop":{"n":"ftptop","p":"/ftptop","d":"proftpd服务器的连接状态"},"mpstat":{"n":"mpstat","p":"/mpstat","d":"显示各个可用CPU的状态"},"mtools":{"n":"mtools","p":"/mtools","d":"显示mtools支持的指令"},"e2fsck":{"n":"e2fsck","p":"/e2fsck","d":"用于检查第二扩展文件系统的完整性"},"hostid":{"n":"hostid","p":"/hostid","d":"用来打印当前主机的数字化标识"},"gunzip":{"n":"gunzip","p":"/gunzip","d":"用来解压缩文件"},"vmstat":{"n":"vmstat","p":"/vmstat","d":"显示虚拟内存状态"},"chroot":{"n":"chroot","p":"/chroot","d":"把根目录换成指定的目的目录"},"vgscan":{"n":"vgscan","p":"/vgscan","d":"扫描并显示系统中的卷组"},"lnstat":{"n":"lnstat","p":"/lnstat","d":"显示Linux系统的网路状态"},"locate":{"n":"locate","p":"/locate","d":"Apache服务器的性能测试工具"},"vdfuse":{"n":"vdfuse","p":"/vdfuse","d":"VirtualBox软件挂载VDI分区文件工具"},"iptraf":{"n":"iptraf","p":"/iptraf","d":"实时地监视网卡流量"},"logout":{"n":"logout","p":"/logout","d":"退出当前登录的Shell"},"bzdiff":{"n":"bzdiff","p":"/bzdiff","d":"直接比较两个.bz2压缩包中文件的不同"},"bzgrep":{"n":"bzgrep","p":"/bzgrep","d":"使用正则表达式搜索.bz2压缩包中文件"},"setpci":{"n":"setpci","p":"/setpci","d":"查询和配置PCI设备的使用工具"},"telnet\r":{"n":"telnet\r","p":"/telnet","d":"登录远程主机和管理"},"seinfo":{"n":"seinfo","p":"/seinfo","d":"查询SELinux的策略提供多少相关规则"},"screen":{"n":"screen","p":"/screen","d":"用于命令行终端切换"},"finger":{"n":"finger","p":"/finger","d":"用于查找并显示用户信息"},"telint":{"n":"telint","p":"/telint","d":"切换当前正在运行系统的运行等级"},"findfs":{"n":"findfs","p":"/findfs","d":"标签或UUID查找文件系统"},"hping3":{"n":"hping3","p":"/hping3","d":"测试网络及主机的安全"},"ispell":{"n":"ispell","p":"/ispell","d":"检查文件中出现的拼写错误"},"ntsysv":{"n":"ntsysv","p":"/ntsysv","d":"集中管理系统的各种服务"},"insmod":{"n":"insmod","p":"/insmod","d":"将给定的模块加载到内核中"},"csplit":{"n":"csplit","p":"/csplit","d":"将一个大文件分割成小的碎片文件"},"rlogin":{"n":"rlogin","p":"/rlogin","d":"从当前终端登录到远程Linux主机"},"parted":{"n":"parted","p":"/parted","d":"磁盘分区和分区大小调整工具"},"bzless":{"n":"bzless","p":"/bzless","d":"增强.bz2压缩包查看器"},"passwd":{"n":"passwd","p":"/passwd","d":"用于让用户可以更改自己的密码"},"export":{"n":"export","p":"/export","d":"设置或显示系统环境变量"},"lpstat":{"n":"lpstat","p":"/lpstat","d":"显示CUPS中打印机的状态信息"},"renice":{"n":"renice","p":"/renice","d":"修改正在运行的进程的调度优先级"},"rename":{"n":"rename","p":"/rename","d":"用字符串替换的方式批量改变文件名"},"expand":{"n":"expand","p":"/expand","d":"将文件的制表符转换为空白字符"},"lsattr":{"n":"lsattr","p":"/lsattr","d":"查看文件的第二扩展文件系统属性"},"reject":{"n":"reject","p":"/reject","d":"指示打印系统拒绝发往指定目标打印机的打印任务"},"reboot":{"n":"reboot","p":"/reboot","d":"重新启动正在运行的Linux操作系统"},"groups":{"n":"groups","p":"/groups","d":"用来打印指定用户所属的工作组"},"rcconf":{"n":"rcconf","p":"/rcconf","d":"Debian Linux下的运行等级服务配置工具"},"uptime":{"n":"uptime","p":"/uptime","d":"查看Linux系统负载信息"},"ifdown":{"n":"ifdown","p":"/ifdown","d":"禁用指定的网络接口"},"pwconv":{"n":"pwconv","p":"/pwconv","d":"用来开启用户的投影密码"},"pvscan":{"n":"pvscan","p":"/pvscan","d":"扫描系统中所有硬盘的物理卷列表"},"bzmore":{"n":"bzmore","p":"/bzmore","d":"查看bzip2压缩过的文本文件的内容"},"printf":{"n":"printf","p":"/printf","d":"格式化并输出结果"},"jwhois":{"n":"jwhois","p":"/jwhois","d":"whois 客户端服务"},"iostat":{"n":"iostat","p":"/iostat","d":"监视系统输入输出设备和CPU的使用情况"},"pstree":{"n":"pstree","p":"/pstree","d":"以树状图的方式展现进程之间的派生关系"},"pstack":{"n":"pstack","p":"/pstack","d":"显示每个进程的栈跟踪"},"nfsstat":{"n":"nfsstat","p":"/nfsstat","d":"列出NFS客户端和服务器的工作状态"},"dirname":{"n":"dirname","p":"/dirname","d":"去除文件名中的非目录部分"},"ppp-off":{"n":"ppp-off","p":"/ppp-off","d":"关闭ppp连线"},"history":{"n":"history","p":"/history","d":"用于显示历史命令"},"apropos":{"n":"apropos","p":"/apropos","d":"在 whatis 数据库中查找字符串"},"apt-get":{"n":"apt-get","p":"/apt-get","d":"Debian Linux发行版中的APT软件包管理工具"},"quotaon":{"n":"quotaon","p":"/quotaon","d":"激活Linux内核中指定文件系统的磁盘配额功能"},"declare":{"n":"declare","p":"/declare","d":"声明或显示shell变量"},"apt-key":{"n":"apt-key","p":"/apt-key","d":"管理Debian Linux系统中的软件包密钥"},"readelf":{"n":"readelf","p":"/readelf","d":"用于显示elf格式文件的信息"},"pathchk":{"n":"pathchk","p":"/pathchk","d":"检查文件中不可移植的部分"},"restore":{"n":"restore","p":"/restore","d":"所进行的操作和dump指令相反"},"hwclock":{"n":"hwclock","p":"/hwclock","d":"显示与设定硬件时钟"},"hexdump":{"n":"hexdump","p":"/hexdump","d":"显示文件十六进制格式"},"openssl":{"n":"openssl","p":"/openssl","d":"强大的安全套接字层密码库"},"objdump":{"n":"objdump","p":"/objdump","d":"显示二进制文件信息"},"ntpdate":{"n":"ntpdate","p":"/ntpdate","d":"使用网络计时协议(NTP)设置日期和时间"},"crontab":{"n":"crontab","p":"/crontab","d":"提交和管理用户的需要周期性执行的任务"},"nologin":{"n":"nologin","p":"/nologin","d":"拒绝用户登录系统"},"rpmsign":{"n":"rpmsign","p":"/rpmsign","d":"使用RPM软件包的签名管理工具"},"install":{"n":"install","p":"/install","d":"安装或升级软件或备份数据"},"whereis":{"n":"whereis","p":"/whereis","d":"查找二进制程序、代码等相关文件路径"},"grpconv":{"n":"grpconv","p":"/grpconv","d":"用来开启群组的投影密码"},"command":{"n":"command","p":"/command","d":"调用并执行指定的命令"},"volname":{"n":"volname","p":"/volname","d":"显示指定的ISO-9660格式的设备的卷名称"},"service":{"n":"service","p":"/service","d":"控制系统服务的实用工具"},"setfacl":{"n":"setfacl","p":"/setfacl","d":"设置文件访问控制列表"},"zipinfo":{"n":"zipinfo","p":"/zipinfo","d":"用来列出压缩文件信息"},"netstat":{"n":"netstat","p":"/netstat","d":"查看Linux中网络系统状态信息"},"nethogs":{"n":"nethogs","p":"/nethogs","d":"终端下的网络流量监控工具"},"slabtop":{"n":"slabtop","p":"/slabtop","d":"实时显示内核slab内存缓存信息"},"usermod":{"n":"usermod","p":"/usermod","d":"用于修改用户的基本信息"},"userdel":{"n":"userdel","p":"/userdel","d":"用于删除给定的用户以及与用户相关的文件"},"useradd":{"n":"useradd","p":"/useradd","d":"创建的新的系统用户"},"e2label":{"n":"e2label","p":"/e2label","d":"设置第二扩展文件系统的卷标"},"ssh-add":{"n":"ssh-add","p":"/ssh-add","d":"把专用密钥添加到ssh-agent的高速缓存中"},"killall":{"n":"killall","p":"/killall","d":"使用进程的名称来杀死一组进程"},"gpasswd":{"n":"gpasswd","p":"/gpasswd","d":"Linux下工作组文件的管理工具"},"mkisofs":{"n":"mkisofs","p":"/mkisofs","d":"建立ISO 9660映像文件"},"lastlog":{"n":"lastlog","p":"/lastlog","d":"显示系统中所有用户最近一次登录信息"},"edquota":{"n":"edquota","p":"/edquota","d":"用于编辑指定用户或工作组磁盘配额"},"strings":{"n":"strings","p":"/strings","d":"在对象文件或二进制文件中查找可打印的字符串"},"unalias":{"n":"unalias","p":"/unalias","d":"删除由alias设置的别名"},"swapoff":{"n":"swapoff","p":"/swapoff","d":"关闭指定的交换空间"},"lftpget":{"n":"lftpget","p":"/lftpget","d":"调用lftp指令下载指定的文件"},"systool":{"n":"systool","p":"/systool","d":"显示基于总线、类和拓扑显示系统中设备的信息"},"ethtool":{"n":"ethtool","p":"/ethtool","d":"显示或修改以太网卡的配置信息"},"tcpdump":{"n":"tcpdump","p":"/tcpdump","d":"一款sniffer工具"},"builtin":{"n":"builtin","p":"/builtin","d":"执行shell内部命令"},"lpadmin":{"n":"lpadmin","p":"/lpadmin","d":"配置CUPS套件中的打印机和类"},"losetup":{"n":"losetup","p":"/losetup","d":"设定与控制循环(loop)设备"},"logsave":{"n":"logsave","p":"/logsave","d":"将命令的输出信息保存到指定的日志文件"},"bunzip2":{"n":"bunzip2","p":"/bunzip2","d":"创一个bz2文件压缩包"},"logname":{"n":"logname","p":"/logname","d":"用来显示用户名称"},"ftpshut":{"n":"ftpshut","p":"/ftpshut","d":"在指定的时间关闭FTP服务器"},"xlsatoms":{"n":"xlsatoms","p":"/xlsatoms","d":"列出X服务器内部所有定义的原子成分"},"sesearch":{"n":"sesearch","p":"/sesearch","d":"查询SELinux策略的规则详情"},"vgremove":{"n":"vgremove","p":"/vgremove","d":"用于用户删除LVM卷组"},"dhclient":{"n":"dhclient","p":"/dhclient","d":"动态获取或释放IP地址"},"vgreduce":{"n":"vgreduce","p":"/vgreduce","d":"从卷组中删除物理卷"},"vgextend":{"n":"vgextend","p":"/vgextend","d":"向卷组中添加物理卷"},"vgcreate":{"n":"vgcreate","p":"/vgcreate","d":"用于创建LVM卷组"},"repquota":{"n":"repquota","p":"/repquota","d":"报表的格式输出磁盘空间限制的状态"},"newusers":{"n":"newusers","p":"/newusers","d":"用于批处理的方式一次创建多个命令"},"pvchange":{"n":"pvchange","p":"/pvchange","d":"修改物理卷属性"},"vgchange":{"n":"vgchange","p":"/vgchange","d":"修改卷组属性"},"shutdown":{"n":"shutdown","p":"/shutdown","d":"用来执行系统关机的命令"},"htpasswd":{"n":"htpasswd","p":"/htpasswd","d":"apache服务器创建密码认证文件"},"hostname":{"n":"hostname","p":"/hostname","d":"显示和设置系统的主机名"},"iptables":{"n":"iptables","p":"/iptables","d":"Linux上常用的防火墙软件"},"iptstate":{"n":"iptstate","p":"/iptstate","d":"显示iptables的工作状态"},"pwunconv":{"n":"pwunconv","p":"/pwunconv","d":"用来关闭用户的投影密码"},"diffstat":{"n":"diffstat","p":"/diffstat","d":"显示diff命令输出信息的柱状图"},"ifconfig":{"n":"ifconfig","p":"/ifconfig","d":"配置和显示Linux系统网卡的网络参数"},"groupmod":{"n":"groupmod","p":"/groupmod","d":"更改群组识别码或名称"},"updatedb":{"n":"updatedb","p":"/updatedb","d":"创建或更新slocate命令所必需的数据库文件"},"pvcreate":{"n":"pvcreate","p":"/pvcreate","d":"将物理硬盘分区初始化为物理卷"},"groupdel":{"n":"groupdel","p":"/groupdel","d":"用于删除指定的工作组"},"chpasswd":{"n":"chpasswd","p":"/chpasswd","d":"批量更新用户口令的工具"},"quotaoff":{"n":"quotaoff","p":"/quotaoff","d":"关闭Linux内核中指定文件系统的磁盘配额功能"},"groupadd":{"n":"groupadd","p":"/groupadd","d":"用于创建一个新的工作组"},"nslookup":{"n":"nslookup","p":"/nslookup","d":"查询域名DNS信息的工具"},"unexpand":{"n":"unexpand","p":"/unexpand","d":"将文件的空白字符转换为制表符"},"lvreduce":{"n":"lvreduce","p":"/lvreduce","d":"收缩逻辑卷空间"},"modprobe":{"n":"modprobe","p":"/modprobe","d":"自动处理可载入模块"},"rpm2cpio":{"n":"rpm2cpio","p":"/rpm2cpio","d":"将RPM软件包转换为cpio格式的文件"},"mkinitrd":{"n":"mkinitrd","p":"/mkinitrd","d":"建立要载入ramdisk的映像文件"},"rpmbuild":{"n":"rpmbuild","p":"/rpmbuild","d":"创建RPM的二进制软件包和源码软件包"},"dos2unix":{"n":"dos2unix","p":"/dos2unix","d":"将DOS格式文本文件转换成Unix格式"},"rpmquery":{"n":"rpmquery","p":"/rpmquery","d":"从RPM数据库中查询软件包信息"},"pvremove":{"n":"pvremove","p":"/pvremove","d":"删除一个存在的物理卷"},"mii-tool":{"n":"mii-tool","p":"/mii-tool","d":"配置网络设备协商方式的工具"},"mailstat":{"n":"mailstat","p":"/mailstat","d":"显示到达的邮件状态"},"protoize":{"n":"protoize","p":"/protoize","d":"GNU-C代码转换为ANSI-C代码"},"htdigest":{"n":"htdigest","p":"/htdigest","d":"Apache服务器内置工具"},"lvremove":{"n":"lvremove","p":"/lvremove","d":"删除指定LVM逻辑卷"},"cdrecord":{"n":"cdrecord","p":"/cdrecord","d":"Linux系统下光盘刻录功能命令"},"lvextend":{"n":"lvextend","p":"/lvextend","d":"扩展逻辑卷空间"},"ldconfig":{"n":"ldconfig","p":"/ldconfig","d":"动态链接库管理命令"},"zipsplit":{"n":"zipsplit","p":"/zipsplit","d":"将较大的zip压缩包分割成各个较小的压缩包"},"aptitude":{"n":"aptitude","p":"/aptitude","d":"Debian Linux系统中软件包管理工具"},"lvcreate":{"n":"lvcreate","p":"/lvcreate","d":"用于创建LVM的逻辑卷"},"runlevel":{"n":"runlevel","p":"/runlevel","d":"打印当前Linux系统的运行等级"},"blockdev":{"n":"blockdev","p":"/blockdev","d":"从命令行调用区块设备控制程序"},"exportfs":{"n":"exportfs","p":"/exportfs","d":"管理NFS共享文件系统列表"},"bmodinfo":{"n":"bmodinfo","p":"/bmodinfo","d":"显示给定模块的详细信息"},"readonly":{"n":"readonly","p":"/readonly","d":"定义只读shell变量或函数"},"compress":{"n":"compress","p":"/compress","d":"使用Lempress-Ziv编码压缩数据文件"},"arpwatch":{"n":"arpwatch","p":"/arpwatch","d":"监听网络上ARP的记录"},"dpkg-deb":{"n":"dpkg-deb","p":"/dpkg-deb","d":"Debian Linux下的软件包管理工具"},"logwatch":{"n":"logwatch","p":"/logwatch","d":"可定制和可插入式的日志监视系统"},"tempfile":{"n":"tempfile","p":"/tempfile","d":"shell中给临时文件命名"},"xlsfonts":{"n":"xlsfonts","p":"/xlsfonts","d":"列出X Server使用的字体"},"semanage":{"n":"semanage","p":"/semanage","d":"默认目录的安全上下文查询与修改"},"sendmail":{"n":"sendmail","p":"/sendmail","d":"著名电子邮件服务器"},"basename":{"n":"basename","p":"/basename","d":"打印目录或者文件的基本名称"},"ftpcount":{"n":"ftpcount","p":"/ftpcount","d":"显示目前已FTP登入的用户人数"},"lvresize":{"n":"lvresize","p":"/lvresize","d":"调整逻辑卷空间大小"},"clockdiff":{"n":"clockdiff","p":"/clockdiff","d":"检测两台linux主机的时间差"},"tcpreplay":{"n":"tcpreplay","p":"/tcpreplay","d":"将PCAP包重新发送,用于性能或者功能测试"},"tracepath":{"n":"tracepath","p":"/tracepath","d":"追踪目的主机经过的路由信息"},"dircolors":{"n":"dircolors","p":"/dircolors","d":"置ls命令在显示目录或文件时所用的色彩"},"pvdisplay":{"n":"pvdisplay","p":"/pvdisplay","d":"显示物理卷的属性"},"dmidecode":{"n":"dmidecode","p":"/dmidecode","d":"在Linux系统下获取有关硬件方面的信息"},"systemctl":{"n":"systemctl","p":"/systemctl","d":"系统服务管理器指令"},"apachectl":{"n":"apachectl","p":"/apachectl","d":"Apache服务器前端控制工具"},"lvdisplay":{"n":"lvdisplay","p":"/lvdisplay","d":"显示逻辑卷属性"},"getsebool":{"n":"getsebool","p":"/getsebool","d":"查询SElinux策略内各项规则的布尔值"},"partprobe":{"n":"partprobe","p":"/partprobe","d":"不重启的情况下重读分区"},"chkconfig":{"n":"chkconfig","p":"/chkconfig","d":"检查或设置系统的各种服务"},"rpmverify":{"n":"rpmverify","p":"/rpmverify","d":"验证已安装的RPM软件包的正确性"},"grpunconv":{"n":"grpunconv","p":"/grpunconv","d":"用来关闭群组的投影密码"},"ip6tables":{"n":"ip6tables","p":"/ip6tables","d":"linux中防火墙软件"},"arptables":{"n":"arptables","p":"/arptables","d":"管理ARP包过滤规则表"},"ssh-agent":{"n":"ssh-agent","p":"/ssh-agent","d":"ssh密钥管理器"},"badblocks":{"n":"badblocks","p":"/badblocks","d":"查找磁盘中损坏的区块"},"logrotate":{"n":"logrotate","p":"/logrotate","d":"统日志进行轮转、压缩和删除"},"setsebool":{"n":"setsebool","p":"/setsebool","d":"修改SElinux策略内各项规则的布尔值"},"vgdisplay":{"n":"vgdisplay","p":"/vgdisplay","d":"显示LVM卷组的信息"},"mysqldump":{"n":"mysqldump","p":"/mysqldump","d":"MySQL数据库中备份工具"},"vgconvert":{"n":"vgconvert","p":"/vgconvert","d":"转换卷组元数据格式"},"showmount":{"n":"showmount","p":"/showmount","d":"显示NFS服务器加载的信息"},"smbpasswd":{"n":"smbpasswd","p":"/smbpasswd","d":"samba用户和密码管理工具"},"mysqlshow":{"n":"mysqlshow","p":"/mysqlshow","d":"显示MySQL中数据库相关信息"},"smbclient":{"n":"smbclient","p":"/smbclient","d":"交互方式访问samba服务器"},"ssh-keygen":{"n":"ssh-keygen","p":"/ssh-keygen","d":"为ssh生成、管理和转换认证密钥"},"usernetctl":{"n":"usernetctl","p":"/usernetctl","d":"被允许时操作指定的网络接口"},"restorecon":{"n":"restorecon","p":"/restorecon","d":"恢复文件的安全上下文"},"mysqladmin":{"n":"mysqladmin","p":"/mysqladmin","d":"MySQL服务器管理客户端"},"mkbootdisk":{"n":"mkbootdisk","p":"/mkbootdisk","d":"可建立目前系统的启动盘"},"dpkg-query":{"n":"dpkg-query","p":"/dpkg-query","d":"Debian Linux中软件包的查询工具"},"get_module":{"n":"get_module","p":"/get_module","d":"获取Linux内核模块的详细信息"},"domainname":{"n":"domainname","p":"/domainname","d":"显示和设置系统的NIS域名"},"unprotoize":{"n":"unprotoize","p":"/unprotoize","d":"删除C语言源代码文件中的函数原型"},"dpkg-split":{"n":"dpkg-split","p":"/dpkg-split","d":"Debian Linux中将大软件包分割成小包"},"uncompress":{"n":"uncompress","p":"/uncompress","d":"用来解压.Z文件"},"cupsenable":{"n":"cupsenable","p":"/cupsenable","d":"启动指定的打印机"},"traceroute\r":{"n":"traceroute\r","p":"/traceroute","d":"显示数据包到主机间的路径"},"quotacheck":{"n":"quotacheck","p":"/quotacheck","d":"检查磁盘的使用空间与限制"},"xlsclients":{"n":"xlsclients","p":"/xlsclients","d":"列出显示器中的客户端应用程序"},"consoletype":{"n":"consoletype","p":"/consoletype","d":"输出已连接的终端类型"},"mysqlimport":{"n":"mysqlimport","p":"/mysqlimport","d":"为MySQL服务器用命令行方式导入数据"},"ssh-copy-id":{"n":"ssh-copy-id","p":"/ssh-copy-id","d":"把本地的ssh公钥文件安装到远程主机对应的账户下"},"ssh-keyscan":{"n":"ssh-keyscan","p":"/ssh-keyscan","d":"收集主机公钥的使用工具"},"dpkg-divert":{"n":"dpkg-divert","p":"/dpkg-divert","d":"Debian Linux中创建并管理一个转向列表"},"lsb_release":{"n":"lsb_release","p":"/lsb_release","d":"显示发行版本信息"},"squidclient":{"n":"squidclient","p":"/squidclient","d":"squid服务器的客户端管理工具"},"cupsdisable":{"n":"cupsdisable","p":"/cupsdisable","d":"停止指定的打印机"},"sftp-server":{"n":"sftp-server","p":"/sftp-server","d":"sftp协议的服务器端程序"},"inotifywait":{"n":"inotifywait","p":"/inotifywait","d":"异步文件系统监控机制"},"ypdomainname":{"n":"ypdomainname","p":"/ypdomainname","d":"显示主机的NIS的域名"},"firewall-cmd":{"n":"firewall-cmd","p":"/firewall-cmd","d":"Linux上新用的防火墙软件,跟iptables差不多的工具。"},"dpkg-trigger":{"n":"dpkg-trigger","p":"/dpkg-trigger","d":"Debian Linux下的软件包触发器"},"bzip2recover":{"n":"bzip2recover","p":"/bzip2recover","d":"恢复被破坏的.bz2压缩包中的文件"},"convertquota":{"n":"convertquota","p":"/convertquota","d":"把老的配额文件转换为新的格式"},"apt-sortpkgs":{"n":"apt-sortpkgs","p":"/apt-sortpkgs","d":"Debian Linux下对软件包索引文件进行排序的工具"},"nisdomainname":{"n":"nisdomainname","p":"/nisdomainname","d":"显示主机NIS的域名"},"speedtest-cli":{"n":"speedtest-cli","p":"/speedtest-cli","d":"命令行下测试服务器外网速度"},"kernelversion":{"n":"kernelversion","p":"/kernelversion","d":"打印当前内核的主版本号"},"iptables-save":{"n":"iptables-save","p":"/iptables-save","d":"备份iptables的表配置"},"dnsdomainname":{"n":"dnsdomainname","p":"/dnsdomainname","d":"定义DNS系统中FQDN名称的域名"},"ip6tables-save":{"n":"ip6tables-save","p":"/ip6tables-save","d":"保存ip6tables表配置"},"iptables-restore":{"n":"iptables-restore","p":"/iptables-restore","d":"还原iptables表的配置"},"dpkg-reconfigure":{"n":"dpkg-reconfigure","p":"/dpkg-reconfigure","d":"Debian Linux中重新配制一个已经安装的软件包"},"ip6tables-restore":{"n":"ip6tables-restore","p":"/ip6tables-restore","d":"还原ip6tables表"},"dpkg-statoverride":{"n":"dpkg-statoverride","p":"/dpkg-statoverride","d":"Debian Linux中覆盖文件的所有权和模式"},"dpkg-preconfigure":{"n":"dpkg-preconfigure","p":"/dpkg-preconfigure","d":"Debian Linux中软件包安装之前询问问题"}} \ No newline at end of file +{"w":{"n":"w","p":"/w","d":"显示目前登入系统的用户信息"},"ab":{"n":"ab","p":"/ab","d":"Apache服务器的性能测试工具"},"ip":{"n":"ip","p":"/ip","d":"网络配置工具"},"ld":{"n":"ld","p":"/ld","d":"将目标文件连接为可执行程序"},"xz":{"n":"xz","p":"/xz","d":"POSIX 平台开发具有高压缩率的工具。"},"ln":{"n":"ln","p":"/ln","d":"用来为文件创件连接"},"lp":{"n":"lp","p":"/lp","d":"打印文件或修改排队的打印任务"},"fg":{"n":"fg","p":"/fg","d":"将后台作业放到前台终端运行"},"wc\r":{"n":"wc\r","p":"/wc","d":"统计文件的字节数、字数、行数"},"as":{"n":"as","p":"/as","d":"汇编语言编译器"},"at":{"n":"at","p":"/at","d":"在指定时间执行一个任务"},"fc":{"n":"fc","p":"/fc","d":"修改历史命令并执行"},"ls":{"n":"ls","p":"/ls","d":"显示目录内容列表"},"id":{"n":"id","p":"/id","d":"显示用户的ID以及所属群组的ID"},"vi":{"n":"vi","p":"/vi","d":"功能强大的纯文本编辑器"},"bc":{"n":"bc","p":"/bc","d":"算术操作精密运算工具"},"bg":{"n":"bg","p":"/bg","d":"用于将作业放到后台运行"},"tr":{"n":"tr","p":"/tr","d":"将字符进行替换压缩和删除"},"ex":{"n":"ex","p":"/ex","d":"启动vim编辑器的ex编辑模式"},"ed":{"n":"ed","p":"/ed","d":"单行纯文本编辑器"},"mv":{"n":"mv","p":"/mv","d":"用来对文件或目录重新命名"},"du":{"n":"du","p":"/du","d":"显示每个文件和目录的磁盘使用空间"},"nl":{"n":"nl","p":"/nl","d":"在Linux系统中计算文件内容行号"},"cd":{"n":"cd","p":"/cd","d":"切换用户当前工作目录"},"nm":{"n":"nm","p":"/nm","d":"显示二进制目标文件的符号表"},"od":{"n":"od","p":"/od","d":"输出文件的八进制、十六进制等格式编码的字节"},"su":{"n":"su","p":"/su","d":"用于切换当前用户身份到其他用户身份"},"pr":{"n":"pr","p":"/pr","d":"将文本文件转换成适合打印的格式"},"ss\r":{"n":"ss\r","p":"/ss","d":"获取socket统计信息"},"sh":{"n":"sh","p":"/sh","d":"shell命令解释器"},"ps":{"n":"ps","p":"/ps","d":"报告当前系统的进程状态"},"pv":{"n":"pv","p":"/pv","d":"显示当前在命令行执行的命令的进度信息,管道查看器。"},"df":{"n":"df","p":"/df","d":"显示磁盘的相关信息"},"dd":{"n":"dd","p":"/dd","d":"复制文件并对原文件的内容进行转换和格式化处理"},"rm":{"n":"rm","p":"/rm","d":"用于删除给定的文件和目录"},"cp":{"n":"cp","p":"/cp","d":"将源文件或目录复制到目标文件或目录中"},"man":{"n":"man","p":"/man","d":"查看Linux中的指令帮助"},"sar":{"n":"sar","p":"/sar","d":"系统运行状态统计工具"},"rsh":{"n":"rsh","p":"/rsh","d":"连接远程主机并执行命令"},"rpm":{"n":"rpm","p":"/rpm","d":"RPM软件包的管理工具"},"sed":{"n":"sed","p":"/sed","d":"功能强大的流式文本编辑器"},"rev":{"n":"rev","p":"/rev","d":"将文件内容以字符为单位反序输出"},"zip\r":{"n":"zip\r","p":"/zip","d":"可以用来解压缩文件"},"seq":{"n":"seq","p":"/seq","d":"以指定增量从首数开始打印数字到尾数"},"rcp\r":{"n":"rcp\r","p":"/rcp","d":"使在两台Linux主机之间的文件复制操作更简单"},"set":{"n":"set","p":"/set","d":"显示或设置shell特性及shell变量"},"pwd":{"n":"pwd","p":"/pwd","d":"绝对路径方式显示用户当前工作目录"},"pvs":{"n":"pvs","p":"/pvs","d":"输出物理卷信息报表"},"dig":{"n":"dig","p":"/dig","d":"域名查询工具"},"col":{"n":"col","p":"/col","d":"过滤控制字符"},"cmp":{"n":"cmp","p":"/cmp","d":"比较两个文件是否有差异"},"dnf":{"n":"dnf","p":"/dnf","d":"新一代的RPM软件包管理器"},"ssh\r":{"n":"ssh\r","p":"/ssh","d":"openssh套件中的客户端连接工具"},"php":{"n":"php","p":"/php","d":"PHP语言的命令行接口"},"sum":{"n":"sum","p":"/sum","d":"计算文件的校验码和显示块数"},"tac":{"n":"tac","p":"/tac","d":"将文件已行为单位的反序输出"},"cat":{"n":"cat","p":"/cat","d":"连接文件并打印到标准输出设备上"},"cal":{"n":"cal","p":"/cal","d":"显示当前日历或指定日期的日历"},"tar\r":{"n":"tar\r","p":"/tar","d":"Linux下的归档使用工具,用来打包和备份。"},"tee":{"n":"tee","p":"/tee","d":"把数据重定向到给定文件和屏幕上"},"scp":{"n":"scp","p":"/scp","d":"加密的方式在本地主机和远程主机之间复制文件"},"elm":{"n":"elm","p":"/elm","d":"纯文本邮件客户端程序"},"env":{"n":"env","p":"/env","d":"显示系统中已存在的环境变量"},"top":{"n":"top","p":"/top","d":"显示或管理执行中的程序"},"awk\r":{"n":"awk\r","p":"/awk","d":"文本和数据进行处理的编程语言"},"atq":{"n":"atq","p":"/atq","d":"列出当前用户的at任务列表"},"lpr":{"n":"lpr","p":"/lpr","d":"将文件发送给指定打印机进行打印"},"arp":{"n":"arp","p":"/arp","d":"显示和修改IP到MAC转换表"},"lpq":{"n":"lpq","p":"/lpq","d":"显示打印队列中的打印任务的状态信息"},"lpc":{"n":"lpc","p":"/lpc","d":"命令行方式打印机控制程序"},"arj":{"n":"arj","p":"/arj","d":"用于创建和管理.arj压缩包"},"fmt":{"n":"fmt","p":"/fmt","d":"读取文件后优化处理并输出"},"ftp\r":{"n":"ftp\r","p":"/ftp","d":"用来设置文件系统相关功能"},"who":{"n":"who","p":"/who","d":"显示目前登录系统的用户信息"},"lha":{"n":"lha","p":"/lha","d":"压缩或解压缩lzh格式文件"},"let":{"n":"let","p":"/let","d":"简单的计算器"},"gcc":{"n":"gcc","p":"/gcc","d":"基于C/C++的编译器"},"gdb":{"n":"gdb","p":"/gdb","d":"功能强大的程序调试器"},"ldd":{"n":"ldd","p":"/ldd","d":"打印程序或者库文件所依赖的共享库列表"},"yes":{"n":"yes","p":"/yes","d":"重复打印指定字符串"},"gpm":{"n":"gpm","p":"/gpm","d":"提供文字模式下的滑鼠事件处理"},"joe":{"n":"joe","p":"/joe","d":"强大的纯文本编辑器"},"jed":{"n":"jed","p":"/jed","d":"主要用于编辑代码的编辑器"},"yum\r":{"n":"yum\r","p":"/yum","d":"基于RPM的软件包管理器"},"cut":{"n":"cut","p":"/cut","d":"连接文件并打印到标准输出设备上"},"sync":{"n":"sync","p":"/sync","d":"用于强制被改变的内容立刻写入磁盘"},"zcat":{"n":"zcat","p":"/zcat","d":"显示压缩包中文件的内容"},"pvck":{"n":"pvck","p":"/pvck","d":"检测物理卷的LVM元数据的一致性"},"sudo":{"n":"sudo","p":"/sudo","d":"以其他身份来执行命令"},"dirs":{"n":"dirs","p":"/dirs","d":"显示目录记录"},"pssh":{"n":"pssh","p":"/pssh","d":"批量管理执行"},"chfn":{"n":"chfn","p":"/chfn","d":"用来改变finger命令显示的信息"},"wall":{"n":"wall","p":"/wall","d":"向系统当前所有打开的终端上输出信息"},"stty":{"n":"stty","p":"/stty","d":"修改终端命令行的相关设置"},"popd":{"n":"popd","p":"/popd","d":"用于删除目录栈中的记录"},"pmap":{"n":"pmap","p":"/pmap","d":"报告进程的内存映射关系"},"ping":{"n":"ping","p":"/ping","d":"测试主机之间网络的连通性"},"pico":{"n":"pico","p":"/pico","d":"功能强大全屏幕的文本编辑器"},"stat":{"n":"stat","p":"/stat","d":"用于显示文件的状态信息"},"perl":{"n":"perl","p":"/perl","d":"perl语言解释器"},"sshd":{"n":"sshd","p":"/sshd","d":"openssh软件套件中的服务器守护进程"},"nmap":{"n":"nmap","p":"/nmap","d":"网络探测和安全审核"},"arch":{"n":"arch","p":"/arch","d":"显示当前主机的硬件架构类型"},"bind":{"n":"bind","p":"/bind","d":"显示或设置键盘按键与其相关的功能"},"dpkg":{"n":"dpkg","p":"/dpkg","d":"Debian Linux系统上安装、创建和管理软件包"},"dris":{"n":"dris","p":"/dris","d":"显示和清空目录堆栈中的内容"},"nice":{"n":"nice","p":"/nice","d":"改变程序执行的优先权等级"},"chsh":{"n":"chsh","p":"/chsh","d":"用来更换登录系统时使用的shell"},"dump":{"n":"dump","p":"/dump","d":"用于备份ext2或者ext3文件系统"},"nano":{"n":"nano","p":"/nano","d":"字符终端文本编辑器"},"sort":{"n":"sort","p":"/sort","d":"将文件进行排序并输出"},"echo":{"n":"echo","p":"/echo","d":"输出指定的字符串或者变量"},"uniq":{"n":"uniq","p":"/uniq","d":"报告或忽略文件中的重复行"},"more":{"n":"more","p":"/more","d":"显示文件内容,每次显示一屏"},"mkfs":{"n":"mkfs","p":"/mkfs","d":"用于在设备上创建Linux文件系统"},"mesg":{"n":"mesg","p":"/mesg","d":"设置当前终端的写权限"},"sftp":{"n":"sftp","p":"/sftp","d":"交互式的文件传输程序"},"type":{"n":"type","p":"/type","d":"显示指定命令的类型"},"make":{"n":"make","p":"/make","d":"GNU的工程化编译工具"},"mail":{"n":"mail","p":"/mail","d":"命令行下发送和接收电子邮件"},"tree\r":{"n":"tree\r","p":"/tree","d":"树状图列出目录的内容"},"lynx":{"n":"lynx","p":"/lynx","d":"纯文本模式的网页浏览器"},"trap":{"n":"trap","p":"/trap","d":"指定在接收到信号后将要采取的动作"},"exec":{"n":"exec","p":"/exec","d":"调用并执行指定的命令"},"exit":{"n":"exit","p":"/exit","d":"退出当前的shell"},"lsof":{"n":"lsof","p":"/lsof","d":"显示Linux系统当前已打开的所有文件列表"},"comm":{"n":"comm","p":"/comm","d":"两个文件之间的比较"},"lprm":{"n":"lprm","p":"/lprm","d":"删除打印队列中的打印任务"},"expr":{"n":"expr","p":"/expr","d":"一款表达式计算工具"},"znew":{"n":"znew","p":"/znew","d":"将.Z压缩包重新转化为gzip命令压缩的.gz压缩包"},"tput":{"n":"tput","p":"/tput","d":"通过terminfo数据库对终端会话进行初始化和操作"},"atop":{"n":"atop","p":"/atop","d":"监控Linux系统资源与进程的工具"},"time":{"n":"time","p":"/time","d":"统计给定命令所花费的总时间"},"file":{"n":"file","p":"/file","d":"用来探测给定文件的类型。"},"find\r":{"n":"find\r","p":"/find","d":"在指定目录下查找文件"},"tftp":{"n":"tftp","p":"/tftp","d":"在本机和tftp服务器之间使用TFTP协议传输文件"},"cpio":{"n":"cpio","p":"/cpio","d":"用来建立、还原备份档的工具程序"},"look":{"n":"look","p":"/look","d":"显示文件中以指定字符串开头的任意行"},"test":{"n":"test","p":"/test","d":"shell环境中测试条件表达式工具"},"fold":{"n":"fold","p":"/fold","d":"控制文件内容输出时所占用的屏幕宽度"},"free\r":{"n":"free\r","p":"/free","d":"显示内存的使用情况"},"fsck":{"n":"fsck","p":"/fsck","d":"检查并且试图修复文件系统中的错误"},"xset":{"n":"xset","p":"/xset","d":"设置X-Window系统中的用户爱好的实用工具"},"atrm":{"n":"atrm","p":"/atrm","d":"删除待执行任务队列中的指定任务"},"lilo":{"n":"lilo","p":"/lilo","d":"安装核心载入开机管理程序"},"talk":{"n":"talk","p":"/talk","d":"让用户和其他用户聊天"},"lftp":{"n":"lftp","p":"/lftp","d":"优秀的文件客户端程序"},"curl":{"n":"curl","p":"/curl","d":"利用URL规则在命令行下工作的文件传输工具"},"arpd":{"n":"arpd","p":"/arpd","d":"收集免费ARP信息"},"gcov":{"n":"gcov","p":"/gcov","d":"测试程序的代码覆盖率的工具"},"date":{"n":"date","p":"/date","d":"显示或设置系统时间与日期"},"less":{"n":"less","p":"/less","d":"分屏上下翻页浏览文件内容"},"tail\r":{"n":"tail\r","p":"/tail","d":"在屏幕上显示指定文件的末尾若干行"},"read":{"n":"read","p":"/read","d":"从键盘读取变量值"},"axel":{"n":"axel","p":"/axel","d":"多线程下载工具"},"grep\r":{"n":"grep\r","p":"/grep","d":"强大的文本搜索工具"},"last":{"n":"last","p":"/last","d":"列出目前与过去登入系统的用户相关信息"},"kill":{"n":"kill","p":"/kill","d":"删除执行中的程序或工作"},"join":{"n":"join","p":"/join","d":"两个文件中指定栏位内容相同的行连接起来"},"wait":{"n":"wait","p":"/wait","d":"等待进程执行完后返回"},"jobs":{"n":"jobs","p":"/jobs","d":"显示Linux中的任务列表及任务状态"},"wget":{"n":"wget","p":"/wget","d":"Linux系统下载文件工具"},"ipcs":{"n":"ipcs","p":"/ipcs","d":"分析消息队列共享内存和信号量 "},"grub":{"n":"grub","p":"/grub","d":"多重引导程序grub的命令行shell工具"},"diff":{"n":"diff","p":"/diff","d":"比较给定的两个文件的不同"},"init":{"n":"init","p":"/init","d":"init进程是所有Linux进程的父进程"},"gzip\r":{"n":"gzip\r","p":"/gzip","d":"用来压缩文件"},"halt":{"n":"halt","p":"/halt","d":"关闭正在运行的Linux操作系统"},"info":{"n":"info","p":"/info","d":"Linux下info格式的帮助指令"},"head":{"n":"head","p":"/head","d":"在屏幕上显示指定文件的开头若干行"},"help":{"n":"help","p":"/help","d":"显示帮助信息"},"ifup":{"n":"ifup","p":"/ifup","d":"激活指定的网络接口"},"pwck":{"n":"pwck","p":"/pwck","d":"用来验证系统认证文件内容和格式的完整性"},"host":{"n":"host","p":"/host","d":"常用的分析域名查询工具"},"htop":{"n":"htop","p":"/htop","d":"[非内部命令]一个互动的进程查看器,可以动态观察系统进程状况。"},"mysql":{"n":"mysql","p":"/mysql","d":"MySQL服务器客户端工具"},"touch":{"n":"touch","p":"/touch","d":"创建新的空文件"},"iconv":{"n":"iconv","p":"/iconv","d":"转换文件的编码方式"},"tload":{"n":"tload","p":"/tload","d":"显示系统负载状况"},"ifcfg":{"n":"ifcfg","p":"/ifcfg","d":"置Linux中的网络接口参数"},"gzexe":{"n":"gzexe","p":"/gzexe","d":"用来压缩可执行文件"},"iotop":{"n":"iotop","p":"/iotop","d":"用来监视磁盘I/O使用状况的工具"},"bzip2":{"n":"bzip2","p":"/bzip2","d":"将文件压缩成bz2格式"},"alias":{"n":"alias","p":"/alias","d":"用来设置指令的别名"},"zfore":{"n":"zfore","p":"/zfore","d":"强制为gzip格式的压缩文件添加.gz后缀"},"ipcrm":{"n":"ipcrm","p":"/ipcrm","d":"删除消息队列、信号集、或者共享内存标识"},"iperf":{"n":"iperf","p":"/iperf","d":"网络性能测试工具"},"bzcat":{"n":"bzcat","p":"/bzcat","d":"解压缩指定的.bz2文件"},"grpck":{"n":"grpck","p":"/grpck","d":"用于验证组文件的完整性"},"kexec":{"n":"kexec","p":"/kexec","d":"从当前正在运行的内核引导到一个新内核"},"lastb":{"n":"lastb","p":"/lastb","d":"列出登入系统失败的用户相关信息"},"tailf":{"n":"tailf","p":"/tailf","d":"在屏幕上显示指定文件的末尾若干行内容,通常用于日志文件的跟踪输出。"},"xinit":{"n":"xinit","p":"/xinit","d":"是Linux下X-Window系统的初始化程序"},"fuser":{"n":"fuser","p":"/fuser","d":"使用文件或文件结构识别进程"},"login":{"n":"login","p":"/login","d":"登录系统或切换用户身份"},"chage":{"n":"chage","p":"/chage","d":"修改帐号和密码的有效期限"},"xhost":{"n":"xhost","p":"/xhost","d":"制哪些X客户端能够在X服务器上显示"},"xclip":{"n":"xclip","p":"/xclip","d":"管理 X 粘贴板"},"chcon":{"n":"chcon","p":"/chcon","d":"修改对象(文件)的安全上下文"},"fgrep":{"n":"fgrep","p":"/fgrep","d":"为文件搜索文字字符串"},"fdisk":{"n":"fdisk","p":"/fdisk","d":"查看磁盘使用情况和磁盘分区"},"xauth":{"n":"xauth","p":"/xauth","d":"显示和编辑被用于连接X服务器的认证信息"},"lsblk":{"n":"lsblk","p":"/lsblk","d":"列出块设备信息"},"lsmod":{"n":"lsmod","p":"/lsmod","d":"显示已载入系统的模块"},"lspci":{"n":"lspci","p":"/lspci","d":"显示当前主机的所有PCI总线信息"},"lsusb":{"n":"lsusb","p":"/lsusb","d":"显示本机的USB设备列表信息"},"xargs\r":{"n":"xargs\r","p":"/xargs","d":"给其他命令传递参数的一个过滤器"},"chgrp":{"n":"chgrp","p":"/chgrp","d":"用来变更文件或目录的所属群组"},"mailq":{"n":"mailq","p":"/mailq","d":"显示待发送的邮件队列"},"emacs":{"n":"emacs","p":"/emacs","d":"功能强大的全屏文本编辑器"},"eject":{"n":"eject","p":"/eject","d":"用来退出抽取式设备"},"write":{"n":"write","p":"/write","d":"向指定登录用户终端上发送信息"},"mkdir":{"n":"mkdir","p":"/mkdir","d":"用来创建目录"},"egrep":{"n":"egrep","p":"/egrep","d":"在文件内查找指定的字符串"},"mknod":{"n":"mknod","p":"/mknod","d":"创建字符设备文件和块设备文件"},"chmod\r":{"n":"chmod\r","p":"/chmod","d":"用来变更文件或目录的权限"},"bzcmp":{"n":"bzcmp","p":"/bzcmp","d":"比较两个压缩包中的文件"},"which":{"n":"which","p":"/which","d":"查找并显示给定命令的绝对路径"},"chown":{"n":"chown","p":"/chown","d":"用来变更文件或目录的拥有者或所属群组"},"ncftp":{"n":"ncftp","p":"/ncftp","d":"是增强的的FTP工具"},"umask":{"n":"umask","p":"/umask","d":"用来设置限制新建文件权限的掩码"},"ngrep":{"n":"ngrep","p":"/ngrep","d":"方便的数据包匹配和显示工具"},"dstat":{"n":"dstat","p":"/dstat","d":"通用的系统资源统计工具"},"watch\r":{"n":"watch\r","p":"/watch","d":"可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令"},"nohup":{"n":"nohup","p":"/nohup","d":"将程序以忽略挂起信号的方式运行起来"},"squid":{"n":"squid","p":"/squid","d":"squid服务器守护进程"},"split":{"n":"split","p":"/split","d":"分割任意大小的文件"},"spell":{"n":"spell","p":"/spell","d":"对文件进行拼写检查"},"uname":{"n":"uname","p":"/uname","d":"显示Linux系统信息"},"paste":{"n":"paste","p":"/paste","d":"将多个文件按列队列合并"},"patch":{"n":"patch","p":"/patch","d":"为开放源代码软件安装补丁程序"},"cksum":{"n":"cksum","p":"/cksum","d":"检查文件的CRC是否正确"},"pfctl":{"n":"pfctl","p":"/pfctl","d":"PF防火墙的配置命令"},"pgrep":{"n":"pgrep","p":"/pgrep","d":"设置用户的认证信息,包括用户密码、密码过期时间等"},"batch":{"n":"batch","p":"/batch","d":"在系统不繁忙的时候执行定时任务"},"pidof":{"n":"pidof","p":"/pidof","d":"查找指定名称的进程的进程号ID号"},"pkill":{"n":"pkill","p":"/pkill","d":"可以按照进程名杀死进程"},"unarj":{"n":"unarj","p":"/unarj","d":"解压缩由arj命令创建的压缩包"},"dmesg\r":{"n":"dmesg\r","p":"/dmesg","d":"显示Linux系统启动信息"},"pushd":{"n":"pushd","p":"/pushd","d":"将目录加入命令堆叠中"},"sleep":{"n":"sleep","p":"/sleep","d":"将目前动作延迟一段时间"},"diff3":{"n":"diff3","p":"/diff3","d":"比较3个文件不同的地方"},"quota":{"n":"quota","p":"/quota","d":"显示磁盘已使用的空间与限制"},"skill":{"n":"skill","p":"/skill","d":"向选定的进程发送信号冻结进程"},"blkid":{"n":"blkid","p":"/blkid","d":"查看块设备的文件系统类型、LABEL、UUID等信息"},"shopt":{"n":"shopt","p":"/shopt","d":"显示和设置shell操作选项"},"clear":{"n":"clear","p":"/clear","d":"清除当前屏幕终端上的任何信息"},"users":{"n":"users","p":"/users","d":"显示当前登录系统的所有用户"},"rexec":{"n":"rexec","p":"/rexec","d":"运程执行Linux系统下命令 "},"unset":{"n":"unset","p":"/unset","d":"删除指定的shell变量或函数"},"rmdir":{"n":"rmdir","p":"/rmdir","d":"用来删除空目录"},"rmmod":{"n":"rmmod","p":"/rmmod","d":"从运行的内核中移除指定的内核模块"},"route":{"n":"route","p":"/route","d":"显示并设置Linux中静态路由表"},"rpmdb":{"n":"rpmdb","p":"/rpmdb","d":"初始化和重建RPM数据库"},"unzip":{"n":"unzip","p":"/unzip","d":"用于解压缩由zip命令压缩的压缩包"},"colrm":{"n":"colrm","p":"/colrm","d":"删除文件中的指定列"},"rsync":{"n":"rsync","p":"/rsync","d":"远程数据同步工具"},"ftpwho":{"n":"ftpwho","p":"/ftpwho","d":"显示当前每个ftp会话信息"},"mkswap":{"n":"mkswap","p":"/mkswap","d":"建立和设置SWAP交换分区"},"mktemp":{"n":"mktemp","p":"/mktemp","d":"创建临时文件供shell脚本使用"},"syslog":{"n":"syslog","p":"/syslog","d":"系统默认的日志守护进程"},"mpstat":{"n":"mpstat","p":"/mpstat","d":"显示各个可用CPU的状态"},"mtools":{"n":"mtools","p":"/mtools","d":"显示mtools支持的指令"},"startx":{"n":"startx","p":"/startx","d":"用来启动X Window"},"ftptop":{"n":"ftptop","p":"/ftptop","d":"proftpd服务器的连接状态"},"whoami":{"n":"whoami","p":"/whoami","d":"打印当前有效的用户名称"},"sysctl":{"n":"sysctl","p":"/sysctl","d":"时动态地修改内核的运行参数"},"lnstat":{"n":"lnstat","p":"/lnstat","d":"显示Linux系统的网路状态"},"e2fsck":{"n":"e2fsck","p":"/e2fsck","d":"用于检查第二扩展文件系统的完整性"},"locate":{"n":"locate","p":"/locate","d":"Apache服务器的性能测试工具"},"ulimit":{"n":"ulimit","p":"/ulimit","d":"控制shell程序的资源"},"indent":{"n":"indent","p":"/indent","d":"格式化C语言的源文件"},"umount":{"n":"umount","p":"/umount","d":"用于卸载已经加载的文件系统"},"ipcalc":{"n":"ipcalc","p":"/ipcalc","d":"简单的IP地址计算器"},"logout":{"n":"logout","p":"/logout","d":"退出当前登录的Shell"},"whatis":{"n":"whatis","p":"/whatis","d":"查询一个命令执行什么功能"},"arping":{"n":"arping","p":"/arping","d":"通过发送ARP协议报文测试网络"},"hdparm":{"n":"hdparm","p":"/hdparm","d":"显示与设定硬盘的参数"},"swapon":{"n":"swapon","p":"/swapon","d":"激活Linux系统中交换空间"},"chroot":{"n":"chroot","p":"/chroot","d":"把根目录换成指定的目的目录"},"telnet\r":{"n":"telnet\r","p":"/telnet","d":"登录远程主机和管理"},"ntsysv":{"n":"ntsysv","p":"/ntsysv","d":"集中管理系统的各种服务"},"chattr":{"n":"chattr","p":"/chattr","d":"用来改变文件属性"},"finger":{"n":"finger","p":"/finger","d":"用于查找并显示用户信息"},"hostid":{"n":"hostid","p":"/hostid","d":"用来打印当前主机的数字化标识"},"parted":{"n":"parted","p":"/parted","d":"磁盘分区和分区大小调整工具"},"passwd":{"n":"passwd","p":"/passwd","d":"用于让用户可以更改自己的密码"},"findfs":{"n":"findfs","p":"/findfs","d":"标签或UUID查找文件系统"},"telint":{"n":"telint","p":"/telint","d":"切换当前正在运行系统的运行等级"},"insmod":{"n":"insmod","p":"/insmod","d":"将给定的模块加载到内核中"},"vmstat":{"n":"vmstat","p":"/vmstat","d":"显示虚拟内存状态"},"lpstat":{"n":"lpstat","p":"/lpstat","d":"显示CUPS中打印机的状态信息"},"export":{"n":"export","p":"/export","d":"设置或显示系统环境变量"},"lsattr":{"n":"lsattr","p":"/lsattr","d":"查看文件的第二扩展文件系统属性"},"vgscan":{"n":"vgscan","p":"/vgscan","d":"扫描并显示系统中的卷组"},"iptraf":{"n":"iptraf","p":"/iptraf","d":"实时地监视网卡流量"},"ispell":{"n":"ispell","p":"/ispell","d":"检查文件中出现的拼写错误"},"bzless":{"n":"bzless","p":"/bzless","d":"增强.bz2压缩包查看器"},"printf":{"n":"printf","p":"/printf","d":"格式化并输出结果"},"expand":{"n":"expand","p":"/expand","d":"将文件的制表符转换为空白字符"},"pstack":{"n":"pstack","p":"/pstack","d":"显示每个进程的栈跟踪"},"pstree":{"n":"pstree","p":"/pstree","d":"以树状图的方式展现进程之间的派生关系"},"bzgrep":{"n":"bzgrep","p":"/bzgrep","d":"使用正则表达式搜索.bz2压缩包中文件"},"groups":{"n":"groups","p":"/groups","d":"用来打印指定用户所属的工作组"},"pvscan":{"n":"pvscan","p":"/pvscan","d":"扫描系统中所有硬盘的物理卷列表"},"ltrace":{"n":"ltrace","p":"/ltrace","d":"用来跟踪进程调用库函数的情况"},"pwconv":{"n":"pwconv","p":"/pwconv","d":"用来开启用户的投影密码"},"hping3":{"n":"hping3","p":"/hping3","d":"测试网络及主机的安全"},"jwhois":{"n":"jwhois","p":"/jwhois","d":"whois 客户端服务"},"vdfuse":{"n":"vdfuse","p":"/vdfuse","d":"VirtualBox软件挂载VDI分区文件工具"},"accept":{"n":"accept","p":"/accept","d":"指示打印系统接受发往指定目标打印机的打印任务"},"rcconf":{"n":"rcconf","p":"/rcconf","d":"Debian Linux下的运行等级服务配置工具"},"depmod":{"n":"depmod","p":"/depmod","d":"分析可载入模块的相依性"},"lvscan":{"n":"lvscan","p":"/lvscan","d":"扫描逻辑卷"},"iostat":{"n":"iostat","p":"/iostat","d":"监视系统输入输出设备和CPU的使用情况"},"reboot":{"n":"reboot","p":"/reboot","d":"重新启动正在运行的Linux操作系统"},"reject":{"n":"reject","p":"/reject","d":"指示打印系统拒绝发往指定目标打印机的打印任务"},"rename":{"n":"rename","p":"/rename","d":"用字符串替换的方式批量改变文件名"},"renice":{"n":"renice","p":"/renice","d":"修改正在运行的进程的调度优先级"},"enable":{"n":"enable","p":"/enable","d":"启动或关闭shell内建命令"},"bzmore":{"n":"bzmore","p":"/bzmore","d":"查看bzip2压缩过的文本文件的内容"},"unlink":{"n":"unlink","p":"/unlink","d":"系统调用函数unlink去删除指定的文件"},"ifdown":{"n":"ifdown","p":"/ifdown","d":"禁用指定的网络接口"},"rlogin":{"n":"rlogin","p":"/rlogin","d":"从当前终端登录到远程Linux主机"},"elinks":{"n":"elinks","p":"/elinks","d":"纯文本界面的WWW浏览器"},"md5sum":{"n":"md5sum","p":"/md5sum","d":"计算和校验文件报文摘要的工具程序"},"gunzip":{"n":"gunzip","p":"/gunzip","d":"用来解压缩文件"},"cancel":{"n":"cancel","p":"/cancel","d":"取消已存在的打印任务"},"csplit":{"n":"csplit","p":"/csplit","d":"将一个大文件分割成小的碎片文件"},"ifstat":{"n":"ifstat","p":"/ifstat","d":"统计网络接口流量状态"},"mke2fs":{"n":"mke2fs","p":"/mke2fs","d":"创建磁盘分区上的“etc2/etc3”文件系统"},"setpci":{"n":"setpci","p":"/setpci","d":"查询和配置PCI设备的使用工具"},"bzdiff":{"n":"bzdiff","p":"/bzdiff","d":"直接比较两个.bz2压缩包中文件的不同"},"strace":{"n":"strace","p":"/strace","d":"跟踪系统调用和信号"},"uptime":{"n":"uptime","p":"/uptime","d":"查看Linux系统负载信息"},"screen":{"n":"screen","p":"/screen","d":"用于命令行终端切换"},"seinfo":{"n":"seinfo","p":"/seinfo","d":"查询SELinux的策略提供多少相关规则"},"edquota":{"n":"edquota","p":"/edquota","d":"用于编辑指定用户或工作组磁盘配额"},"command":{"n":"command","p":"/command","d":"调用并执行指定的命令"},"crontab":{"n":"crontab","p":"/crontab","d":"提交和管理用户的需要周期性执行的任务"},"setfacl":{"n":"setfacl","p":"/setfacl","d":"设置文件访问控制列表"},"useradd":{"n":"useradd","p":"/useradd","d":"创建的新的系统用户"},"rpmsign":{"n":"rpmsign","p":"/rpmsign","d":"使用RPM软件包的签名管理工具"},"userdel":{"n":"userdel","p":"/userdel","d":"用于删除给定的用户以及与用户相关的文件"},"usermod":{"n":"usermod","p":"/usermod","d":"用于修改用户的基本信息"},"restore":{"n":"restore","p":"/restore","d":"所进行的操作和dump指令相反"},"readelf":{"n":"readelf","p":"/readelf","d":"用于显示elf格式文件的信息"},"declare":{"n":"declare","p":"/declare","d":"声明或显示shell变量"},"quotaon":{"n":"quotaon","p":"/quotaon","d":"激活Linux内核中指定文件系统的磁盘配额功能"},"slabtop":{"n":"slabtop","p":"/slabtop","d":"实时显示内核slab内存缓存信息"},"dirname":{"n":"dirname","p":"/dirname","d":"去除文件名中的非目录部分"},"ppp-off":{"n":"ppp-off","p":"/ppp-off","d":"关闭ppp连线"},"pathchk":{"n":"pathchk","p":"/pathchk","d":"检查文件中不可移植的部分"},"volname":{"n":"volname","p":"/volname","d":"显示指定的ISO-9660格式的设备的卷名称"},"openssl":{"n":"openssl","p":"/openssl","d":"强大的安全套接字层密码库"},"objdump":{"n":"objdump","p":"/objdump","d":"显示二进制文件信息"},"ntpdate":{"n":"ntpdate","p":"/ntpdate","d":"使用网络计时协议(NTP)设置日期和时间"},"unalias":{"n":"unalias","p":"/unalias","d":"删除由alias设置的别名"},"nologin":{"n":"nologin","p":"/nologin","d":"拒绝用户登录系统"},"ssh-add":{"n":"ssh-add","p":"/ssh-add","d":"把专用密钥添加到ssh-agent的高速缓存中"},"nfsstat":{"n":"nfsstat","p":"/nfsstat","d":"列出NFS客户端和服务器的工作状态"},"netstat":{"n":"netstat","p":"/netstat","d":"查看Linux中网络系统状态信息"},"nethogs":{"n":"nethogs","p":"/nethogs","d":"终端下的网络流量监控工具"},"whereis":{"n":"whereis","p":"/whereis","d":"查找二进制程序、代码等相关文件路径"},"e2label":{"n":"e2label","p":"/e2label","d":"设置第二扩展文件系统的卷标"},"service":{"n":"service","p":"/service","d":"控制系统服务的实用工具"},"mkisofs":{"n":"mkisofs","p":"/mkisofs","d":"建立ISO 9660映像文件"},"strings":{"n":"strings","p":"/strings","d":"在对象文件或二进制文件中查找可打印的字符串"},"ethtool":{"n":"ethtool","p":"/ethtool","d":"显示或修改以太网卡的配置信息"},"lpadmin":{"n":"lpadmin","p":"/lpadmin","d":"配置CUPS套件中的打印机和类"},"losetup":{"n":"losetup","p":"/losetup","d":"设定与控制循环(loop)设备"},"swapoff":{"n":"swapoff","p":"/swapoff","d":"关闭指定的交换空间"},"logsave":{"n":"logsave","p":"/logsave","d":"将命令的输出信息保存到指定的日志文件"},"logname":{"n":"logname","p":"/logname","d":"用来显示用户名称"},"ftpshut":{"n":"ftpshut","p":"/ftpshut","d":"在指定的时间关闭FTP服务器"},"lftpget":{"n":"lftpget","p":"/lftpget","d":"调用lftp指令下载指定的文件"},"builtin":{"n":"builtin","p":"/builtin","d":"执行shell内部命令"},"systool":{"n":"systool","p":"/systool","d":"显示基于总线、类和拓扑显示系统中设备的信息"},"gpasswd":{"n":"gpasswd","p":"/gpasswd","d":"Linux下工作组文件的管理工具"},"lastlog":{"n":"lastlog","p":"/lastlog","d":"显示系统中所有用户最近一次登录信息"},"killall":{"n":"killall","p":"/killall","d":"使用进程的名称来杀死一组进程"},"grpconv":{"n":"grpconv","p":"/grpconv","d":"用来开启群组的投影密码"},"tcpdump":{"n":"tcpdump","p":"/tcpdump","d":"一款sniffer工具"},"bunzip2":{"n":"bunzip2","p":"/bunzip2","d":"创一个bz2文件压缩包"},"apt-key":{"n":"apt-key","p":"/apt-key","d":"管理Debian Linux系统中的软件包密钥"},"apt-get":{"n":"apt-get","p":"/apt-get","d":"Debian Linux发行版中的APT软件包管理工具"},"apropos":{"n":"apropos","p":"/apropos","d":"在 whatis 数据库中查找字符串"},"zipinfo":{"n":"zipinfo","p":"/zipinfo","d":"用来列出压缩文件信息"},"install":{"n":"install","p":"/install","d":"安装或升级软件或备份数据"},"hexdump":{"n":"hexdump","p":"/hexdump","d":"显示文件十六进制格式"},"history":{"n":"history","p":"/history","d":"用于显示历史命令"},"hwclock":{"n":"hwclock","p":"/hwclock","d":"显示与设定硬件时钟"},"pwunconv":{"n":"pwunconv","p":"/pwunconv","d":"用来关闭用户的投影密码"},"pvchange":{"n":"pvchange","p":"/pvchange","d":"修改物理卷属性"},"vgcreate":{"n":"vgcreate","p":"/vgcreate","d":"用于创建LVM卷组"},"pvcreate":{"n":"pvcreate","p":"/pvcreate","d":"将物理硬盘分区初始化为物理卷"},"vgchange":{"n":"vgchange","p":"/vgchange","d":"修改卷组属性"},"pvremove":{"n":"pvremove","p":"/pvremove","d":"删除一个存在的物理卷"},"diffstat":{"n":"diffstat","p":"/diffstat","d":"显示diff命令输出信息的柱状图"},"arpwatch":{"n":"arpwatch","p":"/arpwatch","d":"监听网络上ARP的记录"},"mkinitrd":{"n":"mkinitrd","p":"/mkinitrd","d":"建立要载入ramdisk的映像文件"},"htpasswd":{"n":"htpasswd","p":"/htpasswd","d":"apache服务器创建密码认证文件"},"shutdown":{"n":"shutdown","p":"/shutdown","d":"用来执行系统关机的命令"},"dhclient":{"n":"dhclient","p":"/dhclient","d":"动态获取或释放IP地址"},"nslookup":{"n":"nslookup","p":"/nslookup","d":"查询域名DNS信息的工具"},"groupmod":{"n":"groupmod","p":"/groupmod","d":"更改群组识别码或名称"},"unexpand":{"n":"unexpand","p":"/unexpand","d":"将文件的空白字符转换为制表符"},"lvcreate":{"n":"lvcreate","p":"/lvcreate","d":"用于创建LVM的逻辑卷"},"quotaoff":{"n":"quotaoff","p":"/quotaoff","d":"关闭Linux内核中指定文件系统的磁盘配额功能"},"iptables":{"n":"iptables","p":"/iptables","d":"Linux上常用的防火墙软件"},"basename":{"n":"basename","p":"/basename","d":"打印目录或者文件的基本名称"},"modprobe":{"n":"modprobe","p":"/modprobe","d":"自动处理可载入模块"},"lvextend":{"n":"lvextend","p":"/lvextend","d":"扩展逻辑卷空间"},"lvreduce":{"n":"lvreduce","p":"/lvreduce","d":"收缩逻辑卷空间"},"readonly":{"n":"readonly","p":"/readonly","d":"定义只读shell变量或函数"},"xlsfonts":{"n":"xlsfonts","p":"/xlsfonts","d":"列出X Server使用的字体"},"lvresize":{"n":"lvresize","p":"/lvresize","d":"调整逻辑卷空间大小"},"zipsplit":{"n":"zipsplit","p":"/zipsplit","d":"将较大的zip压缩包分割成各个较小的压缩包"},"groupdel":{"n":"groupdel","p":"/groupdel","d":"用于删除指定的工作组"},"blockdev":{"n":"blockdev","p":"/blockdev","d":"从命令行调用区块设备控制程序"},"chpasswd":{"n":"chpasswd","p":"/chpasswd","d":"批量更新用户口令的工具"},"repquota":{"n":"repquota","p":"/repquota","d":"报表的格式输出磁盘空间限制的状态"},"aptitude":{"n":"aptitude","p":"/aptitude","d":"Debian Linux系统中软件包管理工具"},"ftpcount":{"n":"ftpcount","p":"/ftpcount","d":"显示目前已FTP登入的用户人数"},"exportfs":{"n":"exportfs","p":"/exportfs","d":"管理NFS共享文件系统列表"},"mailstat":{"n":"mailstat","p":"/mailstat","d":"显示到达的邮件状态"},"bmodinfo":{"n":"bmodinfo","p":"/bmodinfo","d":"显示给定模块的详细信息"},"iptstate":{"n":"iptstate","p":"/iptstate","d":"显示iptables的工作状态"},"groupadd":{"n":"groupadd","p":"/groupadd","d":"用于创建一个新的工作组"},"dpkg-deb":{"n":"dpkg-deb","p":"/dpkg-deb","d":"Debian Linux下的软件包管理工具"},"htdigest":{"n":"htdigest","p":"/htdigest","d":"Apache服务器内置工具"},"dos2unix":{"n":"dos2unix","p":"/dos2unix","d":"将DOS格式文本文件转换成Unix格式"},"vgremove":{"n":"vgremove","p":"/vgremove","d":"用于用户删除LVM卷组"},"rpm2cpio":{"n":"rpm2cpio","p":"/rpm2cpio","d":"将RPM软件包转换为cpio格式的文件"},"rpmbuild":{"n":"rpmbuild","p":"/rpmbuild","d":"创建RPM的二进制软件包和源码软件包"},"newusers":{"n":"newusers","p":"/newusers","d":"用于批处理的方式一次创建多个命令"},"rpmquery":{"n":"rpmquery","p":"/rpmquery","d":"从RPM数据库中查询软件包信息"},"cdrecord":{"n":"cdrecord","p":"/cdrecord","d":"Linux系统下光盘刻录功能命令"},"vgreduce":{"n":"vgreduce","p":"/vgreduce","d":"从卷组中删除物理卷"},"ifconfig":{"n":"ifconfig","p":"/ifconfig","d":"配置和显示Linux系统网卡的网络参数"},"protoize":{"n":"protoize","p":"/protoize","d":"GNU-C代码转换为ANSI-C代码"},"vgextend":{"n":"vgextend","p":"/vgextend","d":"向卷组中添加物理卷"},"runlevel":{"n":"runlevel","p":"/runlevel","d":"打印当前Linux系统的运行等级"},"mii-tool":{"n":"mii-tool","p":"/mii-tool","d":"配置网络设备协商方式的工具"},"updatedb":{"n":"updatedb","p":"/updatedb","d":"创建或更新slocate命令所必需的数据库文件"},"hostname":{"n":"hostname","p":"/hostname","d":"显示和设置系统的主机名"},"compress":{"n":"compress","p":"/compress","d":"使用Lempress-Ziv编码压缩数据文件"},"tempfile":{"n":"tempfile","p":"/tempfile","d":"shell中给临时文件命名"},"ldconfig":{"n":"ldconfig","p":"/ldconfig","d":"动态链接库管理命令"},"semanage":{"n":"semanage","p":"/semanage","d":"默认目录的安全上下文查询与修改"},"sendmail":{"n":"sendmail","p":"/sendmail","d":"著名电子邮件服务器"},"xlsatoms":{"n":"xlsatoms","p":"/xlsatoms","d":"列出X服务器内部所有定义的原子成分"},"logwatch":{"n":"logwatch","p":"/logwatch","d":"可定制和可插入式的日志监视系统"},"sesearch":{"n":"sesearch","p":"/sesearch","d":"查询SELinux策略的规则详情"},"lvremove":{"n":"lvremove","p":"/lvremove","d":"删除指定LVM逻辑卷"},"lvdisplay":{"n":"lvdisplay","p":"/lvdisplay","d":"显示逻辑卷属性"},"mysqldump":{"n":"mysqldump","p":"/mysqldump","d":"MySQL数据库中备份工具"},"systemctl":{"n":"systemctl","p":"/systemctl","d":"系统服务管理器指令"},"chkconfig":{"n":"chkconfig","p":"/chkconfig","d":"检查或设置系统的各种服务"},"mysqlshow":{"n":"mysqlshow","p":"/mysqlshow","d":"显示MySQL中数据库相关信息"},"ssh-agent":{"n":"ssh-agent","p":"/ssh-agent","d":"ssh密钥管理器"},"smbpasswd":{"n":"smbpasswd","p":"/smbpasswd","d":"samba用户和密码管理工具"},"logrotate":{"n":"logrotate","p":"/logrotate","d":"统日志进行轮转、压缩和删除"},"smbclient":{"n":"smbclient","p":"/smbclient","d":"交互方式访问samba服务器"},"showmount":{"n":"showmount","p":"/showmount","d":"显示NFS服务器加载的信息"},"clockdiff":{"n":"clockdiff","p":"/clockdiff","d":"检测两台linux主机的时间差"},"arptables":{"n":"arptables","p":"/arptables","d":"管理ARP包过滤规则表"},"setsebool":{"n":"setsebool","p":"/setsebool","d":"修改SElinux策略内各项规则的布尔值"},"ip6tables":{"n":"ip6tables","p":"/ip6tables","d":"linux中防火墙软件"},"rpmverify":{"n":"rpmverify","p":"/rpmverify","d":"验证已安装的RPM软件包的正确性"},"getsebool":{"n":"getsebool","p":"/getsebool","d":"查询SElinux策略内各项规则的布尔值"},"badblocks":{"n":"badblocks","p":"/badblocks","d":"查找磁盘中损坏的区块"},"partprobe":{"n":"partprobe","p":"/partprobe","d":"不重启的情况下重读分区"},"grpunconv":{"n":"grpunconv","p":"/grpunconv","d":"用来关闭群组的投影密码"},"pvdisplay":{"n":"pvdisplay","p":"/pvdisplay","d":"显示物理卷的属性"},"tracepath":{"n":"tracepath","p":"/tracepath","d":"追踪目的主机经过的路由信息"},"dircolors":{"n":"dircolors","p":"/dircolors","d":"置ls命令在显示目录或文件时所用的色彩"},"vgdisplay":{"n":"vgdisplay","p":"/vgdisplay","d":"显示LVM卷组的信息"},"dmidecode\r":{"n":"dmidecode\r","p":"/dmidecode","d":"在Linux系统下获取有关硬件方面的信息"},"apachectl":{"n":"apachectl","p":"/apachectl","d":"Apache服务器前端控制工具"},"tcpreplay":{"n":"tcpreplay","p":"/tcpreplay","d":"将PCAP包重新发送,用于性能或者功能测试"},"vgconvert":{"n":"vgconvert","p":"/vgconvert","d":"转换卷组元数据格式"},"domainname":{"n":"domainname","p":"/domainname","d":"显示和设置系统的NIS域名"},"dpkg-query":{"n":"dpkg-query","p":"/dpkg-query","d":"Debian Linux中软件包的查询工具"},"restorecon":{"n":"restorecon","p":"/restorecon","d":"恢复文件的安全上下文"},"xlsclients":{"n":"xlsclients","p":"/xlsclients","d":"列出显示器中的客户端应用程序"},"usernetctl":{"n":"usernetctl","p":"/usernetctl","d":"被允许时操作指定的网络接口"},"dpkg-split":{"n":"dpkg-split","p":"/dpkg-split","d":"Debian Linux中将大软件包分割成小包"},"cupsenable":{"n":"cupsenable","p":"/cupsenable","d":"启动指定的打印机"},"quotacheck":{"n":"quotacheck","p":"/quotacheck","d":"检查磁盘的使用空间与限制"},"get_module":{"n":"get_module","p":"/get_module","d":"获取Linux内核模块的详细信息"},"uncompress":{"n":"uncompress","p":"/uncompress","d":"用来解压.Z文件"},"ssh-keygen":{"n":"ssh-keygen","p":"/ssh-keygen","d":"为ssh生成、管理和转换认证密钥"},"traceroute\r":{"n":"traceroute\r","p":"/traceroute","d":"显示数据包到主机间的路径"},"mysqladmin":{"n":"mysqladmin","p":"/mysqladmin","d":"MySQL服务器管理客户端"},"mkbootdisk":{"n":"mkbootdisk","p":"/mkbootdisk","d":"可建立目前系统的启动盘"},"unprotoize":{"n":"unprotoize","p":"/unprotoize","d":"删除C语言源代码文件中的函数原型"},"ssh-copy-id":{"n":"ssh-copy-id","p":"/ssh-copy-id","d":"把本地的ssh公钥文件安装到远程主机对应的账户下"},"consoletype":{"n":"consoletype","p":"/consoletype","d":"输出已连接的终端类型"},"ssh-keyscan":{"n":"ssh-keyscan","p":"/ssh-keyscan","d":"收集主机公钥的使用工具"},"squidclient":{"n":"squidclient","p":"/squidclient","d":"squid服务器的客户端管理工具"},"mysqlimport":{"n":"mysqlimport","p":"/mysqlimport","d":"为MySQL服务器用命令行方式导入数据"},"cupsdisable":{"n":"cupsdisable","p":"/cupsdisable","d":"停止指定的打印机"},"inotifywait":{"n":"inotifywait","p":"/inotifywait","d":"异步文件系统监控机制"},"dpkg-divert":{"n":"dpkg-divert","p":"/dpkg-divert","d":"Debian Linux中创建并管理一个转向列表"},"sftp-server":{"n":"sftp-server","p":"/sftp-server","d":"sftp协议的服务器端程序"},"lsb_release":{"n":"lsb_release","p":"/lsb_release","d":"显示发行版本信息"},"firewall-cmd":{"n":"firewall-cmd","p":"/firewall-cmd","d":"Linux上新用的防火墙软件,跟iptables差不多的工具。"},"bzip2recover":{"n":"bzip2recover","p":"/bzip2recover","d":"恢复被破坏的.bz2压缩包中的文件"},"dpkg-trigger":{"n":"dpkg-trigger","p":"/dpkg-trigger","d":"Debian Linux下的软件包触发器"},"convertquota":{"n":"convertquota","p":"/convertquota","d":"把老的配额文件转换为新的格式"},"ypdomainname":{"n":"ypdomainname","p":"/ypdomainname","d":"显示主机的NIS的域名"},"apt-sortpkgs":{"n":"apt-sortpkgs","p":"/apt-sortpkgs","d":"Debian Linux下对软件包索引文件进行排序的工具"},"dnsdomainname":{"n":"dnsdomainname","p":"/dnsdomainname","d":"定义DNS系统中FQDN名称的域名"},"kernelversion":{"n":"kernelversion","p":"/kernelversion","d":"打印当前内核的主版本号"},"nisdomainname":{"n":"nisdomainname","p":"/nisdomainname","d":"显示主机NIS的域名"},"speedtest-cli":{"n":"speedtest-cli","p":"/speedtest-cli","d":"命令行下测试服务器外网速度"},"iptables-save":{"n":"iptables-save","p":"/iptables-save","d":"备份iptables的表配置"},"ip6tables-save":{"n":"ip6tables-save","p":"/ip6tables-save","d":"保存ip6tables表配置"},"dpkg-reconfigure":{"n":"dpkg-reconfigure","p":"/dpkg-reconfigure","d":"Debian Linux中重新配制一个已经安装的软件包"},"iptables-restore":{"n":"iptables-restore","p":"/iptables-restore","d":"还原iptables表的配置"},"dpkg-preconfigure":{"n":"dpkg-preconfigure","p":"/dpkg-preconfigure","d":"Debian Linux中软件包安装之前询问问题"},"dpkg-statoverride":{"n":"dpkg-statoverride","p":"/dpkg-statoverride","d":"Debian Linux中覆盖文件的所有权和模式"},"ip6tables-restore":{"n":"ip6tables-restore","p":"/ip6tables-restore","d":"还原ip6tables表"}} \ No newline at end of file From 83c4fdfb632457ab99f27e5253b7d29c2a21d455 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Tue, 9 May 2017 09:41:54 +0800 Subject: [PATCH 0016/1284] Fixed style. --- template/styl/index.styl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/template/styl/index.styl b/template/styl/index.styl index 26c6f1dded7..9b4b5902a88 100644 --- a/template/styl/index.styl +++ b/template/styl/index.styl @@ -213,7 +213,7 @@ a.github-corner { } .search_list{ - padding 17px 27px + padding 79px 27px a{ font-size 16px strong{ From 2734ae908b59ea2972f7991bc03d90e5b90ee97e Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Tue, 9 May 2017 09:54:42 +0800 Subject: [PATCH 0017/1284] Add more npm ignore. --- .npmignore | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.npmignore b/.npmignore index f937237a9b4..8be8281f9fc 100644 --- a/.npmignore +++ b/.npmignore @@ -2,3 +2,9 @@ build/ node_modules/ .deploy template/ +.DS_Store +qr.png +.gitattributes +Linux.gif +alfred.png +command From 26377176e68732d56beb660d4f8238c9cbcd889e Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Tue, 9 May 2017 09:55:14 +0800 Subject: [PATCH 0018/1284] Update data.json --- dist/data.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/data.json b/dist/data.json index 9b0bb709414..887707518b9 100644 --- a/dist/data.json +++ b/dist/data.json @@ -1 +1 @@ -{"w":{"n":"w","p":"/w","d":"显示目前登入系统的用户信息"},"ab":{"n":"ab","p":"/ab","d":"Apache服务器的性能测试工具"},"ip":{"n":"ip","p":"/ip","d":"网络配置工具"},"ld":{"n":"ld","p":"/ld","d":"将目标文件连接为可执行程序"},"xz":{"n":"xz","p":"/xz","d":"POSIX 平台开发具有高压缩率的工具。"},"ln":{"n":"ln","p":"/ln","d":"用来为文件创件连接"},"lp":{"n":"lp","p":"/lp","d":"打印文件或修改排队的打印任务"},"fg":{"n":"fg","p":"/fg","d":"将后台作业放到前台终端运行"},"wc\r":{"n":"wc\r","p":"/wc","d":"统计文件的字节数、字数、行数"},"as":{"n":"as","p":"/as","d":"汇编语言编译器"},"at":{"n":"at","p":"/at","d":"在指定时间执行一个任务"},"fc":{"n":"fc","p":"/fc","d":"修改历史命令并执行"},"ls":{"n":"ls","p":"/ls","d":"显示目录内容列表"},"id":{"n":"id","p":"/id","d":"显示用户的ID以及所属群组的ID"},"vi":{"n":"vi","p":"/vi","d":"功能强大的纯文本编辑器"},"bc":{"n":"bc","p":"/bc","d":"算术操作精密运算工具"},"bg":{"n":"bg","p":"/bg","d":"用于将作业放到后台运行"},"tr":{"n":"tr","p":"/tr","d":"将字符进行替换压缩和删除"},"ex":{"n":"ex","p":"/ex","d":"启动vim编辑器的ex编辑模式"},"ed":{"n":"ed","p":"/ed","d":"单行纯文本编辑器"},"mv":{"n":"mv","p":"/mv","d":"用来对文件或目录重新命名"},"du":{"n":"du","p":"/du","d":"显示每个文件和目录的磁盘使用空间"},"nl":{"n":"nl","p":"/nl","d":"在Linux系统中计算文件内容行号"},"cd":{"n":"cd","p":"/cd","d":"切换用户当前工作目录"},"nm":{"n":"nm","p":"/nm","d":"显示二进制目标文件的符号表"},"od":{"n":"od","p":"/od","d":"输出文件的八进制、十六进制等格式编码的字节"},"su":{"n":"su","p":"/su","d":"用于切换当前用户身份到其他用户身份"},"pr":{"n":"pr","p":"/pr","d":"将文本文件转换成适合打印的格式"},"ss\r":{"n":"ss\r","p":"/ss","d":"获取socket统计信息"},"sh":{"n":"sh","p":"/sh","d":"shell命令解释器"},"ps":{"n":"ps","p":"/ps","d":"报告当前系统的进程状态"},"pv":{"n":"pv","p":"/pv","d":"显示当前在命令行执行的命令的进度信息,管道查看器。"},"df":{"n":"df","p":"/df","d":"显示磁盘的相关信息"},"dd":{"n":"dd","p":"/dd","d":"复制文件并对原文件的内容进行转换和格式化处理"},"rm":{"n":"rm","p":"/rm","d":"用于删除给定的文件和目录"},"cp":{"n":"cp","p":"/cp","d":"将源文件或目录复制到目标文件或目录中"},"man":{"n":"man","p":"/man","d":"查看Linux中的指令帮助"},"sar":{"n":"sar","p":"/sar","d":"系统运行状态统计工具"},"rsh":{"n":"rsh","p":"/rsh","d":"连接远程主机并执行命令"},"rpm":{"n":"rpm","p":"/rpm","d":"RPM软件包的管理工具"},"sed":{"n":"sed","p":"/sed","d":"功能强大的流式文本编辑器"},"rev":{"n":"rev","p":"/rev","d":"将文件内容以字符为单位反序输出"},"zip\r":{"n":"zip\r","p":"/zip","d":"可以用来解压缩文件"},"seq":{"n":"seq","p":"/seq","d":"以指定增量从首数开始打印数字到尾数"},"rcp\r":{"n":"rcp\r","p":"/rcp","d":"使在两台Linux主机之间的文件复制操作更简单"},"set":{"n":"set","p":"/set","d":"显示或设置shell特性及shell变量"},"pwd":{"n":"pwd","p":"/pwd","d":"绝对路径方式显示用户当前工作目录"},"pvs":{"n":"pvs","p":"/pvs","d":"输出物理卷信息报表"},"dig":{"n":"dig","p":"/dig","d":"域名查询工具"},"col":{"n":"col","p":"/col","d":"过滤控制字符"},"cmp":{"n":"cmp","p":"/cmp","d":"比较两个文件是否有差异"},"dnf":{"n":"dnf","p":"/dnf","d":"新一代的RPM软件包管理器"},"ssh\r":{"n":"ssh\r","p":"/ssh","d":"openssh套件中的客户端连接工具"},"php":{"n":"php","p":"/php","d":"PHP语言的命令行接口"},"sum":{"n":"sum","p":"/sum","d":"计算文件的校验码和显示块数"},"tac":{"n":"tac","p":"/tac","d":"将文件已行为单位的反序输出"},"cat":{"n":"cat","p":"/cat","d":"连接文件并打印到标准输出设备上"},"cal":{"n":"cal","p":"/cal","d":"显示当前日历或指定日期的日历"},"tar\r":{"n":"tar\r","p":"/tar","d":"Linux下的归档使用工具,用来打包和备份。"},"tee":{"n":"tee","p":"/tee","d":"把数据重定向到给定文件和屏幕上"},"scp":{"n":"scp","p":"/scp","d":"加密的方式在本地主机和远程主机之间复制文件"},"elm":{"n":"elm","p":"/elm","d":"纯文本邮件客户端程序"},"env":{"n":"env","p":"/env","d":"显示系统中已存在的环境变量"},"top":{"n":"top","p":"/top","d":"显示或管理执行中的程序"},"awk\r":{"n":"awk\r","p":"/awk","d":"文本和数据进行处理的编程语言"},"atq":{"n":"atq","p":"/atq","d":"列出当前用户的at任务列表"},"lpr":{"n":"lpr","p":"/lpr","d":"将文件发送给指定打印机进行打印"},"arp":{"n":"arp","p":"/arp","d":"显示和修改IP到MAC转换表"},"lpq":{"n":"lpq","p":"/lpq","d":"显示打印队列中的打印任务的状态信息"},"lpc":{"n":"lpc","p":"/lpc","d":"命令行方式打印机控制程序"},"arj":{"n":"arj","p":"/arj","d":"用于创建和管理.arj压缩包"},"fmt":{"n":"fmt","p":"/fmt","d":"读取文件后优化处理并输出"},"ftp\r":{"n":"ftp\r","p":"/ftp","d":"用来设置文件系统相关功能"},"who":{"n":"who","p":"/who","d":"显示目前登录系统的用户信息"},"lha":{"n":"lha","p":"/lha","d":"压缩或解压缩lzh格式文件"},"let":{"n":"let","p":"/let","d":"简单的计算器"},"gcc":{"n":"gcc","p":"/gcc","d":"基于C/C++的编译器"},"gdb":{"n":"gdb","p":"/gdb","d":"功能强大的程序调试器"},"ldd":{"n":"ldd","p":"/ldd","d":"打印程序或者库文件所依赖的共享库列表"},"yes":{"n":"yes","p":"/yes","d":"重复打印指定字符串"},"gpm":{"n":"gpm","p":"/gpm","d":"提供文字模式下的滑鼠事件处理"},"joe":{"n":"joe","p":"/joe","d":"强大的纯文本编辑器"},"jed":{"n":"jed","p":"/jed","d":"主要用于编辑代码的编辑器"},"yum\r":{"n":"yum\r","p":"/yum","d":"基于RPM的软件包管理器"},"cut":{"n":"cut","p":"/cut","d":"连接文件并打印到标准输出设备上"},"sync":{"n":"sync","p":"/sync","d":"用于强制被改变的内容立刻写入磁盘"},"zcat":{"n":"zcat","p":"/zcat","d":"显示压缩包中文件的内容"},"pvck":{"n":"pvck","p":"/pvck","d":"检测物理卷的LVM元数据的一致性"},"sudo":{"n":"sudo","p":"/sudo","d":"以其他身份来执行命令"},"dirs":{"n":"dirs","p":"/dirs","d":"显示目录记录"},"pssh":{"n":"pssh","p":"/pssh","d":"批量管理执行"},"chfn":{"n":"chfn","p":"/chfn","d":"用来改变finger命令显示的信息"},"wall":{"n":"wall","p":"/wall","d":"向系统当前所有打开的终端上输出信息"},"stty":{"n":"stty","p":"/stty","d":"修改终端命令行的相关设置"},"popd":{"n":"popd","p":"/popd","d":"用于删除目录栈中的记录"},"pmap":{"n":"pmap","p":"/pmap","d":"报告进程的内存映射关系"},"ping":{"n":"ping","p":"/ping","d":"测试主机之间网络的连通性"},"pico":{"n":"pico","p":"/pico","d":"功能强大全屏幕的文本编辑器"},"stat":{"n":"stat","p":"/stat","d":"用于显示文件的状态信息"},"perl":{"n":"perl","p":"/perl","d":"perl语言解释器"},"sshd":{"n":"sshd","p":"/sshd","d":"openssh软件套件中的服务器守护进程"},"nmap":{"n":"nmap","p":"/nmap","d":"网络探测和安全审核"},"arch":{"n":"arch","p":"/arch","d":"显示当前主机的硬件架构类型"},"bind":{"n":"bind","p":"/bind","d":"显示或设置键盘按键与其相关的功能"},"dpkg":{"n":"dpkg","p":"/dpkg","d":"Debian Linux系统上安装、创建和管理软件包"},"dris":{"n":"dris","p":"/dris","d":"显示和清空目录堆栈中的内容"},"nice":{"n":"nice","p":"/nice","d":"改变程序执行的优先权等级"},"chsh":{"n":"chsh","p":"/chsh","d":"用来更换登录系统时使用的shell"},"dump":{"n":"dump","p":"/dump","d":"用于备份ext2或者ext3文件系统"},"nano":{"n":"nano","p":"/nano","d":"字符终端文本编辑器"},"sort":{"n":"sort","p":"/sort","d":"将文件进行排序并输出"},"echo":{"n":"echo","p":"/echo","d":"输出指定的字符串或者变量"},"uniq":{"n":"uniq","p":"/uniq","d":"报告或忽略文件中的重复行"},"more":{"n":"more","p":"/more","d":"显示文件内容,每次显示一屏"},"mkfs":{"n":"mkfs","p":"/mkfs","d":"用于在设备上创建Linux文件系统"},"mesg":{"n":"mesg","p":"/mesg","d":"设置当前终端的写权限"},"sftp":{"n":"sftp","p":"/sftp","d":"交互式的文件传输程序"},"type":{"n":"type","p":"/type","d":"显示指定命令的类型"},"make":{"n":"make","p":"/make","d":"GNU的工程化编译工具"},"mail":{"n":"mail","p":"/mail","d":"命令行下发送和接收电子邮件"},"tree\r":{"n":"tree\r","p":"/tree","d":"树状图列出目录的内容"},"lynx":{"n":"lynx","p":"/lynx","d":"纯文本模式的网页浏览器"},"trap":{"n":"trap","p":"/trap","d":"指定在接收到信号后将要采取的动作"},"exec":{"n":"exec","p":"/exec","d":"调用并执行指定的命令"},"exit":{"n":"exit","p":"/exit","d":"退出当前的shell"},"lsof":{"n":"lsof","p":"/lsof","d":"显示Linux系统当前已打开的所有文件列表"},"comm":{"n":"comm","p":"/comm","d":"两个文件之间的比较"},"lprm":{"n":"lprm","p":"/lprm","d":"删除打印队列中的打印任务"},"expr":{"n":"expr","p":"/expr","d":"一款表达式计算工具"},"znew":{"n":"znew","p":"/znew","d":"将.Z压缩包重新转化为gzip命令压缩的.gz压缩包"},"tput":{"n":"tput","p":"/tput","d":"通过terminfo数据库对终端会话进行初始化和操作"},"atop":{"n":"atop","p":"/atop","d":"监控Linux系统资源与进程的工具"},"time":{"n":"time","p":"/time","d":"统计给定命令所花费的总时间"},"file":{"n":"file","p":"/file","d":"用来探测给定文件的类型。"},"find\r":{"n":"find\r","p":"/find","d":"在指定目录下查找文件"},"tftp":{"n":"tftp","p":"/tftp","d":"在本机和tftp服务器之间使用TFTP协议传输文件"},"cpio":{"n":"cpio","p":"/cpio","d":"用来建立、还原备份档的工具程序"},"look":{"n":"look","p":"/look","d":"显示文件中以指定字符串开头的任意行"},"test":{"n":"test","p":"/test","d":"shell环境中测试条件表达式工具"},"fold":{"n":"fold","p":"/fold","d":"控制文件内容输出时所占用的屏幕宽度"},"free\r":{"n":"free\r","p":"/free","d":"显示内存的使用情况"},"fsck":{"n":"fsck","p":"/fsck","d":"检查并且试图修复文件系统中的错误"},"xset":{"n":"xset","p":"/xset","d":"设置X-Window系统中的用户爱好的实用工具"},"atrm":{"n":"atrm","p":"/atrm","d":"删除待执行任务队列中的指定任务"},"lilo":{"n":"lilo","p":"/lilo","d":"安装核心载入开机管理程序"},"talk":{"n":"talk","p":"/talk","d":"让用户和其他用户聊天"},"lftp":{"n":"lftp","p":"/lftp","d":"优秀的文件客户端程序"},"curl":{"n":"curl","p":"/curl","d":"利用URL规则在命令行下工作的文件传输工具"},"arpd":{"n":"arpd","p":"/arpd","d":"收集免费ARP信息"},"gcov":{"n":"gcov","p":"/gcov","d":"测试程序的代码覆盖率的工具"},"date":{"n":"date","p":"/date","d":"显示或设置系统时间与日期"},"less":{"n":"less","p":"/less","d":"分屏上下翻页浏览文件内容"},"tail\r":{"n":"tail\r","p":"/tail","d":"在屏幕上显示指定文件的末尾若干行"},"read":{"n":"read","p":"/read","d":"从键盘读取变量值"},"axel":{"n":"axel","p":"/axel","d":"多线程下载工具"},"grep\r":{"n":"grep\r","p":"/grep","d":"强大的文本搜索工具"},"last":{"n":"last","p":"/last","d":"列出目前与过去登入系统的用户相关信息"},"kill":{"n":"kill","p":"/kill","d":"删除执行中的程序或工作"},"join":{"n":"join","p":"/join","d":"两个文件中指定栏位内容相同的行连接起来"},"wait":{"n":"wait","p":"/wait","d":"等待进程执行完后返回"},"jobs":{"n":"jobs","p":"/jobs","d":"显示Linux中的任务列表及任务状态"},"wget":{"n":"wget","p":"/wget","d":"Linux系统下载文件工具"},"ipcs":{"n":"ipcs","p":"/ipcs","d":"分析消息队列共享内存和信号量 "},"grub":{"n":"grub","p":"/grub","d":"多重引导程序grub的命令行shell工具"},"diff":{"n":"diff","p":"/diff","d":"比较给定的两个文件的不同"},"init":{"n":"init","p":"/init","d":"init进程是所有Linux进程的父进程"},"gzip\r":{"n":"gzip\r","p":"/gzip","d":"用来压缩文件"},"halt":{"n":"halt","p":"/halt","d":"关闭正在运行的Linux操作系统"},"info":{"n":"info","p":"/info","d":"Linux下info格式的帮助指令"},"head":{"n":"head","p":"/head","d":"在屏幕上显示指定文件的开头若干行"},"help":{"n":"help","p":"/help","d":"显示帮助信息"},"ifup":{"n":"ifup","p":"/ifup","d":"激活指定的网络接口"},"pwck":{"n":"pwck","p":"/pwck","d":"用来验证系统认证文件内容和格式的完整性"},"host":{"n":"host","p":"/host","d":"常用的分析域名查询工具"},"htop":{"n":"htop","p":"/htop","d":"[非内部命令]一个互动的进程查看器,可以动态观察系统进程状况。"},"mysql":{"n":"mysql","p":"/mysql","d":"MySQL服务器客户端工具"},"touch":{"n":"touch","p":"/touch","d":"创建新的空文件"},"iconv":{"n":"iconv","p":"/iconv","d":"转换文件的编码方式"},"tload":{"n":"tload","p":"/tload","d":"显示系统负载状况"},"ifcfg":{"n":"ifcfg","p":"/ifcfg","d":"置Linux中的网络接口参数"},"gzexe":{"n":"gzexe","p":"/gzexe","d":"用来压缩可执行文件"},"iotop":{"n":"iotop","p":"/iotop","d":"用来监视磁盘I/O使用状况的工具"},"bzip2":{"n":"bzip2","p":"/bzip2","d":"将文件压缩成bz2格式"},"alias":{"n":"alias","p":"/alias","d":"用来设置指令的别名"},"zfore":{"n":"zfore","p":"/zfore","d":"强制为gzip格式的压缩文件添加.gz后缀"},"ipcrm":{"n":"ipcrm","p":"/ipcrm","d":"删除消息队列、信号集、或者共享内存标识"},"iperf":{"n":"iperf","p":"/iperf","d":"网络性能测试工具"},"bzcat":{"n":"bzcat","p":"/bzcat","d":"解压缩指定的.bz2文件"},"grpck":{"n":"grpck","p":"/grpck","d":"用于验证组文件的完整性"},"kexec":{"n":"kexec","p":"/kexec","d":"从当前正在运行的内核引导到一个新内核"},"lastb":{"n":"lastb","p":"/lastb","d":"列出登入系统失败的用户相关信息"},"tailf":{"n":"tailf","p":"/tailf","d":"在屏幕上显示指定文件的末尾若干行内容,通常用于日志文件的跟踪输出。"},"xinit":{"n":"xinit","p":"/xinit","d":"是Linux下X-Window系统的初始化程序"},"fuser":{"n":"fuser","p":"/fuser","d":"使用文件或文件结构识别进程"},"login":{"n":"login","p":"/login","d":"登录系统或切换用户身份"},"chage":{"n":"chage","p":"/chage","d":"修改帐号和密码的有效期限"},"xhost":{"n":"xhost","p":"/xhost","d":"制哪些X客户端能够在X服务器上显示"},"xclip":{"n":"xclip","p":"/xclip","d":"管理 X 粘贴板"},"chcon":{"n":"chcon","p":"/chcon","d":"修改对象(文件)的安全上下文"},"fgrep":{"n":"fgrep","p":"/fgrep","d":"为文件搜索文字字符串"},"fdisk":{"n":"fdisk","p":"/fdisk","d":"查看磁盘使用情况和磁盘分区"},"xauth":{"n":"xauth","p":"/xauth","d":"显示和编辑被用于连接X服务器的认证信息"},"lsblk":{"n":"lsblk","p":"/lsblk","d":"列出块设备信息"},"lsmod":{"n":"lsmod","p":"/lsmod","d":"显示已载入系统的模块"},"lspci":{"n":"lspci","p":"/lspci","d":"显示当前主机的所有PCI总线信息"},"lsusb":{"n":"lsusb","p":"/lsusb","d":"显示本机的USB设备列表信息"},"xargs\r":{"n":"xargs\r","p":"/xargs","d":"给其他命令传递参数的一个过滤器"},"chgrp":{"n":"chgrp","p":"/chgrp","d":"用来变更文件或目录的所属群组"},"mailq":{"n":"mailq","p":"/mailq","d":"显示待发送的邮件队列"},"emacs":{"n":"emacs","p":"/emacs","d":"功能强大的全屏文本编辑器"},"eject":{"n":"eject","p":"/eject","d":"用来退出抽取式设备"},"write":{"n":"write","p":"/write","d":"向指定登录用户终端上发送信息"},"mkdir":{"n":"mkdir","p":"/mkdir","d":"用来创建目录"},"egrep":{"n":"egrep","p":"/egrep","d":"在文件内查找指定的字符串"},"mknod":{"n":"mknod","p":"/mknod","d":"创建字符设备文件和块设备文件"},"chmod\r":{"n":"chmod\r","p":"/chmod","d":"用来变更文件或目录的权限"},"bzcmp":{"n":"bzcmp","p":"/bzcmp","d":"比较两个压缩包中的文件"},"which":{"n":"which","p":"/which","d":"查找并显示给定命令的绝对路径"},"chown":{"n":"chown","p":"/chown","d":"用来变更文件或目录的拥有者或所属群组"},"ncftp":{"n":"ncftp","p":"/ncftp","d":"是增强的的FTP工具"},"umask":{"n":"umask","p":"/umask","d":"用来设置限制新建文件权限的掩码"},"ngrep":{"n":"ngrep","p":"/ngrep","d":"方便的数据包匹配和显示工具"},"dstat":{"n":"dstat","p":"/dstat","d":"通用的系统资源统计工具"},"watch\r":{"n":"watch\r","p":"/watch","d":"可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令"},"nohup":{"n":"nohup","p":"/nohup","d":"将程序以忽略挂起信号的方式运行起来"},"squid":{"n":"squid","p":"/squid","d":"squid服务器守护进程"},"split":{"n":"split","p":"/split","d":"分割任意大小的文件"},"spell":{"n":"spell","p":"/spell","d":"对文件进行拼写检查"},"uname":{"n":"uname","p":"/uname","d":"显示Linux系统信息"},"paste":{"n":"paste","p":"/paste","d":"将多个文件按列队列合并"},"patch":{"n":"patch","p":"/patch","d":"为开放源代码软件安装补丁程序"},"cksum":{"n":"cksum","p":"/cksum","d":"检查文件的CRC是否正确"},"pfctl":{"n":"pfctl","p":"/pfctl","d":"PF防火墙的配置命令"},"pgrep":{"n":"pgrep","p":"/pgrep","d":"设置用户的认证信息,包括用户密码、密码过期时间等"},"batch":{"n":"batch","p":"/batch","d":"在系统不繁忙的时候执行定时任务"},"pidof":{"n":"pidof","p":"/pidof","d":"查找指定名称的进程的进程号ID号"},"pkill":{"n":"pkill","p":"/pkill","d":"可以按照进程名杀死进程"},"unarj":{"n":"unarj","p":"/unarj","d":"解压缩由arj命令创建的压缩包"},"dmesg\r":{"n":"dmesg\r","p":"/dmesg","d":"显示Linux系统启动信息"},"pushd":{"n":"pushd","p":"/pushd","d":"将目录加入命令堆叠中"},"sleep":{"n":"sleep","p":"/sleep","d":"将目前动作延迟一段时间"},"diff3":{"n":"diff3","p":"/diff3","d":"比较3个文件不同的地方"},"quota":{"n":"quota","p":"/quota","d":"显示磁盘已使用的空间与限制"},"skill":{"n":"skill","p":"/skill","d":"向选定的进程发送信号冻结进程"},"blkid":{"n":"blkid","p":"/blkid","d":"查看块设备的文件系统类型、LABEL、UUID等信息"},"shopt":{"n":"shopt","p":"/shopt","d":"显示和设置shell操作选项"},"clear":{"n":"clear","p":"/clear","d":"清除当前屏幕终端上的任何信息"},"users":{"n":"users","p":"/users","d":"显示当前登录系统的所有用户"},"rexec":{"n":"rexec","p":"/rexec","d":"运程执行Linux系统下命令 "},"unset":{"n":"unset","p":"/unset","d":"删除指定的shell变量或函数"},"rmdir":{"n":"rmdir","p":"/rmdir","d":"用来删除空目录"},"rmmod":{"n":"rmmod","p":"/rmmod","d":"从运行的内核中移除指定的内核模块"},"route":{"n":"route","p":"/route","d":"显示并设置Linux中静态路由表"},"rpmdb":{"n":"rpmdb","p":"/rpmdb","d":"初始化和重建RPM数据库"},"unzip":{"n":"unzip","p":"/unzip","d":"用于解压缩由zip命令压缩的压缩包"},"colrm":{"n":"colrm","p":"/colrm","d":"删除文件中的指定列"},"rsync":{"n":"rsync","p":"/rsync","d":"远程数据同步工具"},"ftpwho":{"n":"ftpwho","p":"/ftpwho","d":"显示当前每个ftp会话信息"},"mkswap":{"n":"mkswap","p":"/mkswap","d":"建立和设置SWAP交换分区"},"mktemp":{"n":"mktemp","p":"/mktemp","d":"创建临时文件供shell脚本使用"},"syslog":{"n":"syslog","p":"/syslog","d":"系统默认的日志守护进程"},"mpstat":{"n":"mpstat","p":"/mpstat","d":"显示各个可用CPU的状态"},"mtools":{"n":"mtools","p":"/mtools","d":"显示mtools支持的指令"},"startx":{"n":"startx","p":"/startx","d":"用来启动X Window"},"ftptop":{"n":"ftptop","p":"/ftptop","d":"proftpd服务器的连接状态"},"whoami":{"n":"whoami","p":"/whoami","d":"打印当前有效的用户名称"},"sysctl":{"n":"sysctl","p":"/sysctl","d":"时动态地修改内核的运行参数"},"lnstat":{"n":"lnstat","p":"/lnstat","d":"显示Linux系统的网路状态"},"e2fsck":{"n":"e2fsck","p":"/e2fsck","d":"用于检查第二扩展文件系统的完整性"},"locate":{"n":"locate","p":"/locate","d":"Apache服务器的性能测试工具"},"ulimit":{"n":"ulimit","p":"/ulimit","d":"控制shell程序的资源"},"indent":{"n":"indent","p":"/indent","d":"格式化C语言的源文件"},"umount":{"n":"umount","p":"/umount","d":"用于卸载已经加载的文件系统"},"ipcalc":{"n":"ipcalc","p":"/ipcalc","d":"简单的IP地址计算器"},"logout":{"n":"logout","p":"/logout","d":"退出当前登录的Shell"},"whatis":{"n":"whatis","p":"/whatis","d":"查询一个命令执行什么功能"},"arping":{"n":"arping","p":"/arping","d":"通过发送ARP协议报文测试网络"},"hdparm":{"n":"hdparm","p":"/hdparm","d":"显示与设定硬盘的参数"},"swapon":{"n":"swapon","p":"/swapon","d":"激活Linux系统中交换空间"},"chroot":{"n":"chroot","p":"/chroot","d":"把根目录换成指定的目的目录"},"telnet\r":{"n":"telnet\r","p":"/telnet","d":"登录远程主机和管理"},"ntsysv":{"n":"ntsysv","p":"/ntsysv","d":"集中管理系统的各种服务"},"chattr":{"n":"chattr","p":"/chattr","d":"用来改变文件属性"},"finger":{"n":"finger","p":"/finger","d":"用于查找并显示用户信息"},"hostid":{"n":"hostid","p":"/hostid","d":"用来打印当前主机的数字化标识"},"parted":{"n":"parted","p":"/parted","d":"磁盘分区和分区大小调整工具"},"passwd":{"n":"passwd","p":"/passwd","d":"用于让用户可以更改自己的密码"},"findfs":{"n":"findfs","p":"/findfs","d":"标签或UUID查找文件系统"},"telint":{"n":"telint","p":"/telint","d":"切换当前正在运行系统的运行等级"},"insmod":{"n":"insmod","p":"/insmod","d":"将给定的模块加载到内核中"},"vmstat":{"n":"vmstat","p":"/vmstat","d":"显示虚拟内存状态"},"lpstat":{"n":"lpstat","p":"/lpstat","d":"显示CUPS中打印机的状态信息"},"export":{"n":"export","p":"/export","d":"设置或显示系统环境变量"},"lsattr":{"n":"lsattr","p":"/lsattr","d":"查看文件的第二扩展文件系统属性"},"vgscan":{"n":"vgscan","p":"/vgscan","d":"扫描并显示系统中的卷组"},"iptraf":{"n":"iptraf","p":"/iptraf","d":"实时地监视网卡流量"},"ispell":{"n":"ispell","p":"/ispell","d":"检查文件中出现的拼写错误"},"bzless":{"n":"bzless","p":"/bzless","d":"增强.bz2压缩包查看器"},"printf":{"n":"printf","p":"/printf","d":"格式化并输出结果"},"expand":{"n":"expand","p":"/expand","d":"将文件的制表符转换为空白字符"},"pstack":{"n":"pstack","p":"/pstack","d":"显示每个进程的栈跟踪"},"pstree":{"n":"pstree","p":"/pstree","d":"以树状图的方式展现进程之间的派生关系"},"bzgrep":{"n":"bzgrep","p":"/bzgrep","d":"使用正则表达式搜索.bz2压缩包中文件"},"groups":{"n":"groups","p":"/groups","d":"用来打印指定用户所属的工作组"},"pvscan":{"n":"pvscan","p":"/pvscan","d":"扫描系统中所有硬盘的物理卷列表"},"ltrace":{"n":"ltrace","p":"/ltrace","d":"用来跟踪进程调用库函数的情况"},"pwconv":{"n":"pwconv","p":"/pwconv","d":"用来开启用户的投影密码"},"hping3":{"n":"hping3","p":"/hping3","d":"测试网络及主机的安全"},"jwhois":{"n":"jwhois","p":"/jwhois","d":"whois 客户端服务"},"vdfuse":{"n":"vdfuse","p":"/vdfuse","d":"VirtualBox软件挂载VDI分区文件工具"},"accept":{"n":"accept","p":"/accept","d":"指示打印系统接受发往指定目标打印机的打印任务"},"rcconf":{"n":"rcconf","p":"/rcconf","d":"Debian Linux下的运行等级服务配置工具"},"depmod":{"n":"depmod","p":"/depmod","d":"分析可载入模块的相依性"},"lvscan":{"n":"lvscan","p":"/lvscan","d":"扫描逻辑卷"},"iostat":{"n":"iostat","p":"/iostat","d":"监视系统输入输出设备和CPU的使用情况"},"reboot":{"n":"reboot","p":"/reboot","d":"重新启动正在运行的Linux操作系统"},"reject":{"n":"reject","p":"/reject","d":"指示打印系统拒绝发往指定目标打印机的打印任务"},"rename":{"n":"rename","p":"/rename","d":"用字符串替换的方式批量改变文件名"},"renice":{"n":"renice","p":"/renice","d":"修改正在运行的进程的调度优先级"},"enable":{"n":"enable","p":"/enable","d":"启动或关闭shell内建命令"},"bzmore":{"n":"bzmore","p":"/bzmore","d":"查看bzip2压缩过的文本文件的内容"},"unlink":{"n":"unlink","p":"/unlink","d":"系统调用函数unlink去删除指定的文件"},"ifdown":{"n":"ifdown","p":"/ifdown","d":"禁用指定的网络接口"},"rlogin":{"n":"rlogin","p":"/rlogin","d":"从当前终端登录到远程Linux主机"},"elinks":{"n":"elinks","p":"/elinks","d":"纯文本界面的WWW浏览器"},"md5sum":{"n":"md5sum","p":"/md5sum","d":"计算和校验文件报文摘要的工具程序"},"gunzip":{"n":"gunzip","p":"/gunzip","d":"用来解压缩文件"},"cancel":{"n":"cancel","p":"/cancel","d":"取消已存在的打印任务"},"csplit":{"n":"csplit","p":"/csplit","d":"将一个大文件分割成小的碎片文件"},"ifstat":{"n":"ifstat","p":"/ifstat","d":"统计网络接口流量状态"},"mke2fs":{"n":"mke2fs","p":"/mke2fs","d":"创建磁盘分区上的“etc2/etc3”文件系统"},"setpci":{"n":"setpci","p":"/setpci","d":"查询和配置PCI设备的使用工具"},"bzdiff":{"n":"bzdiff","p":"/bzdiff","d":"直接比较两个.bz2压缩包中文件的不同"},"strace":{"n":"strace","p":"/strace","d":"跟踪系统调用和信号"},"uptime":{"n":"uptime","p":"/uptime","d":"查看Linux系统负载信息"},"screen":{"n":"screen","p":"/screen","d":"用于命令行终端切换"},"seinfo":{"n":"seinfo","p":"/seinfo","d":"查询SELinux的策略提供多少相关规则"},"edquota":{"n":"edquota","p":"/edquota","d":"用于编辑指定用户或工作组磁盘配额"},"command":{"n":"command","p":"/command","d":"调用并执行指定的命令"},"crontab":{"n":"crontab","p":"/crontab","d":"提交和管理用户的需要周期性执行的任务"},"setfacl":{"n":"setfacl","p":"/setfacl","d":"设置文件访问控制列表"},"useradd":{"n":"useradd","p":"/useradd","d":"创建的新的系统用户"},"rpmsign":{"n":"rpmsign","p":"/rpmsign","d":"使用RPM软件包的签名管理工具"},"userdel":{"n":"userdel","p":"/userdel","d":"用于删除给定的用户以及与用户相关的文件"},"usermod":{"n":"usermod","p":"/usermod","d":"用于修改用户的基本信息"},"restore":{"n":"restore","p":"/restore","d":"所进行的操作和dump指令相反"},"readelf":{"n":"readelf","p":"/readelf","d":"用于显示elf格式文件的信息"},"declare":{"n":"declare","p":"/declare","d":"声明或显示shell变量"},"quotaon":{"n":"quotaon","p":"/quotaon","d":"激活Linux内核中指定文件系统的磁盘配额功能"},"slabtop":{"n":"slabtop","p":"/slabtop","d":"实时显示内核slab内存缓存信息"},"dirname":{"n":"dirname","p":"/dirname","d":"去除文件名中的非目录部分"},"ppp-off":{"n":"ppp-off","p":"/ppp-off","d":"关闭ppp连线"},"pathchk":{"n":"pathchk","p":"/pathchk","d":"检查文件中不可移植的部分"},"volname":{"n":"volname","p":"/volname","d":"显示指定的ISO-9660格式的设备的卷名称"},"openssl":{"n":"openssl","p":"/openssl","d":"强大的安全套接字层密码库"},"objdump":{"n":"objdump","p":"/objdump","d":"显示二进制文件信息"},"ntpdate":{"n":"ntpdate","p":"/ntpdate","d":"使用网络计时协议(NTP)设置日期和时间"},"unalias":{"n":"unalias","p":"/unalias","d":"删除由alias设置的别名"},"nologin":{"n":"nologin","p":"/nologin","d":"拒绝用户登录系统"},"ssh-add":{"n":"ssh-add","p":"/ssh-add","d":"把专用密钥添加到ssh-agent的高速缓存中"},"nfsstat":{"n":"nfsstat","p":"/nfsstat","d":"列出NFS客户端和服务器的工作状态"},"netstat":{"n":"netstat","p":"/netstat","d":"查看Linux中网络系统状态信息"},"nethogs":{"n":"nethogs","p":"/nethogs","d":"终端下的网络流量监控工具"},"whereis":{"n":"whereis","p":"/whereis","d":"查找二进制程序、代码等相关文件路径"},"e2label":{"n":"e2label","p":"/e2label","d":"设置第二扩展文件系统的卷标"},"service":{"n":"service","p":"/service","d":"控制系统服务的实用工具"},"mkisofs":{"n":"mkisofs","p":"/mkisofs","d":"建立ISO 9660映像文件"},"strings":{"n":"strings","p":"/strings","d":"在对象文件或二进制文件中查找可打印的字符串"},"ethtool":{"n":"ethtool","p":"/ethtool","d":"显示或修改以太网卡的配置信息"},"lpadmin":{"n":"lpadmin","p":"/lpadmin","d":"配置CUPS套件中的打印机和类"},"losetup":{"n":"losetup","p":"/losetup","d":"设定与控制循环(loop)设备"},"swapoff":{"n":"swapoff","p":"/swapoff","d":"关闭指定的交换空间"},"logsave":{"n":"logsave","p":"/logsave","d":"将命令的输出信息保存到指定的日志文件"},"logname":{"n":"logname","p":"/logname","d":"用来显示用户名称"},"ftpshut":{"n":"ftpshut","p":"/ftpshut","d":"在指定的时间关闭FTP服务器"},"lftpget":{"n":"lftpget","p":"/lftpget","d":"调用lftp指令下载指定的文件"},"builtin":{"n":"builtin","p":"/builtin","d":"执行shell内部命令"},"systool":{"n":"systool","p":"/systool","d":"显示基于总线、类和拓扑显示系统中设备的信息"},"gpasswd":{"n":"gpasswd","p":"/gpasswd","d":"Linux下工作组文件的管理工具"},"lastlog":{"n":"lastlog","p":"/lastlog","d":"显示系统中所有用户最近一次登录信息"},"killall":{"n":"killall","p":"/killall","d":"使用进程的名称来杀死一组进程"},"grpconv":{"n":"grpconv","p":"/grpconv","d":"用来开启群组的投影密码"},"tcpdump":{"n":"tcpdump","p":"/tcpdump","d":"一款sniffer工具"},"bunzip2":{"n":"bunzip2","p":"/bunzip2","d":"创一个bz2文件压缩包"},"apt-key":{"n":"apt-key","p":"/apt-key","d":"管理Debian Linux系统中的软件包密钥"},"apt-get":{"n":"apt-get","p":"/apt-get","d":"Debian Linux发行版中的APT软件包管理工具"},"apropos":{"n":"apropos","p":"/apropos","d":"在 whatis 数据库中查找字符串"},"zipinfo":{"n":"zipinfo","p":"/zipinfo","d":"用来列出压缩文件信息"},"install":{"n":"install","p":"/install","d":"安装或升级软件或备份数据"},"hexdump":{"n":"hexdump","p":"/hexdump","d":"显示文件十六进制格式"},"history":{"n":"history","p":"/history","d":"用于显示历史命令"},"hwclock":{"n":"hwclock","p":"/hwclock","d":"显示与设定硬件时钟"},"pwunconv":{"n":"pwunconv","p":"/pwunconv","d":"用来关闭用户的投影密码"},"pvchange":{"n":"pvchange","p":"/pvchange","d":"修改物理卷属性"},"vgcreate":{"n":"vgcreate","p":"/vgcreate","d":"用于创建LVM卷组"},"pvcreate":{"n":"pvcreate","p":"/pvcreate","d":"将物理硬盘分区初始化为物理卷"},"vgchange":{"n":"vgchange","p":"/vgchange","d":"修改卷组属性"},"pvremove":{"n":"pvremove","p":"/pvremove","d":"删除一个存在的物理卷"},"diffstat":{"n":"diffstat","p":"/diffstat","d":"显示diff命令输出信息的柱状图"},"arpwatch":{"n":"arpwatch","p":"/arpwatch","d":"监听网络上ARP的记录"},"mkinitrd":{"n":"mkinitrd","p":"/mkinitrd","d":"建立要载入ramdisk的映像文件"},"htpasswd":{"n":"htpasswd","p":"/htpasswd","d":"apache服务器创建密码认证文件"},"shutdown":{"n":"shutdown","p":"/shutdown","d":"用来执行系统关机的命令"},"dhclient":{"n":"dhclient","p":"/dhclient","d":"动态获取或释放IP地址"},"nslookup":{"n":"nslookup","p":"/nslookup","d":"查询域名DNS信息的工具"},"groupmod":{"n":"groupmod","p":"/groupmod","d":"更改群组识别码或名称"},"unexpand":{"n":"unexpand","p":"/unexpand","d":"将文件的空白字符转换为制表符"},"lvcreate":{"n":"lvcreate","p":"/lvcreate","d":"用于创建LVM的逻辑卷"},"quotaoff":{"n":"quotaoff","p":"/quotaoff","d":"关闭Linux内核中指定文件系统的磁盘配额功能"},"iptables":{"n":"iptables","p":"/iptables","d":"Linux上常用的防火墙软件"},"basename":{"n":"basename","p":"/basename","d":"打印目录或者文件的基本名称"},"modprobe":{"n":"modprobe","p":"/modprobe","d":"自动处理可载入模块"},"lvextend":{"n":"lvextend","p":"/lvextend","d":"扩展逻辑卷空间"},"lvreduce":{"n":"lvreduce","p":"/lvreduce","d":"收缩逻辑卷空间"},"readonly":{"n":"readonly","p":"/readonly","d":"定义只读shell变量或函数"},"xlsfonts":{"n":"xlsfonts","p":"/xlsfonts","d":"列出X Server使用的字体"},"lvresize":{"n":"lvresize","p":"/lvresize","d":"调整逻辑卷空间大小"},"zipsplit":{"n":"zipsplit","p":"/zipsplit","d":"将较大的zip压缩包分割成各个较小的压缩包"},"groupdel":{"n":"groupdel","p":"/groupdel","d":"用于删除指定的工作组"},"blockdev":{"n":"blockdev","p":"/blockdev","d":"从命令行调用区块设备控制程序"},"chpasswd":{"n":"chpasswd","p":"/chpasswd","d":"批量更新用户口令的工具"},"repquota":{"n":"repquota","p":"/repquota","d":"报表的格式输出磁盘空间限制的状态"},"aptitude":{"n":"aptitude","p":"/aptitude","d":"Debian Linux系统中软件包管理工具"},"ftpcount":{"n":"ftpcount","p":"/ftpcount","d":"显示目前已FTP登入的用户人数"},"exportfs":{"n":"exportfs","p":"/exportfs","d":"管理NFS共享文件系统列表"},"mailstat":{"n":"mailstat","p":"/mailstat","d":"显示到达的邮件状态"},"bmodinfo":{"n":"bmodinfo","p":"/bmodinfo","d":"显示给定模块的详细信息"},"iptstate":{"n":"iptstate","p":"/iptstate","d":"显示iptables的工作状态"},"groupadd":{"n":"groupadd","p":"/groupadd","d":"用于创建一个新的工作组"},"dpkg-deb":{"n":"dpkg-deb","p":"/dpkg-deb","d":"Debian Linux下的软件包管理工具"},"htdigest":{"n":"htdigest","p":"/htdigest","d":"Apache服务器内置工具"},"dos2unix":{"n":"dos2unix","p":"/dos2unix","d":"将DOS格式文本文件转换成Unix格式"},"vgremove":{"n":"vgremove","p":"/vgremove","d":"用于用户删除LVM卷组"},"rpm2cpio":{"n":"rpm2cpio","p":"/rpm2cpio","d":"将RPM软件包转换为cpio格式的文件"},"rpmbuild":{"n":"rpmbuild","p":"/rpmbuild","d":"创建RPM的二进制软件包和源码软件包"},"newusers":{"n":"newusers","p":"/newusers","d":"用于批处理的方式一次创建多个命令"},"rpmquery":{"n":"rpmquery","p":"/rpmquery","d":"从RPM数据库中查询软件包信息"},"cdrecord":{"n":"cdrecord","p":"/cdrecord","d":"Linux系统下光盘刻录功能命令"},"vgreduce":{"n":"vgreduce","p":"/vgreduce","d":"从卷组中删除物理卷"},"ifconfig":{"n":"ifconfig","p":"/ifconfig","d":"配置和显示Linux系统网卡的网络参数"},"protoize":{"n":"protoize","p":"/protoize","d":"GNU-C代码转换为ANSI-C代码"},"vgextend":{"n":"vgextend","p":"/vgextend","d":"向卷组中添加物理卷"},"runlevel":{"n":"runlevel","p":"/runlevel","d":"打印当前Linux系统的运行等级"},"mii-tool":{"n":"mii-tool","p":"/mii-tool","d":"配置网络设备协商方式的工具"},"updatedb":{"n":"updatedb","p":"/updatedb","d":"创建或更新slocate命令所必需的数据库文件"},"hostname":{"n":"hostname","p":"/hostname","d":"显示和设置系统的主机名"},"compress":{"n":"compress","p":"/compress","d":"使用Lempress-Ziv编码压缩数据文件"},"tempfile":{"n":"tempfile","p":"/tempfile","d":"shell中给临时文件命名"},"ldconfig":{"n":"ldconfig","p":"/ldconfig","d":"动态链接库管理命令"},"semanage":{"n":"semanage","p":"/semanage","d":"默认目录的安全上下文查询与修改"},"sendmail":{"n":"sendmail","p":"/sendmail","d":"著名电子邮件服务器"},"xlsatoms":{"n":"xlsatoms","p":"/xlsatoms","d":"列出X服务器内部所有定义的原子成分"},"logwatch":{"n":"logwatch","p":"/logwatch","d":"可定制和可插入式的日志监视系统"},"sesearch":{"n":"sesearch","p":"/sesearch","d":"查询SELinux策略的规则详情"},"lvremove":{"n":"lvremove","p":"/lvremove","d":"删除指定LVM逻辑卷"},"lvdisplay":{"n":"lvdisplay","p":"/lvdisplay","d":"显示逻辑卷属性"},"mysqldump":{"n":"mysqldump","p":"/mysqldump","d":"MySQL数据库中备份工具"},"systemctl":{"n":"systemctl","p":"/systemctl","d":"系统服务管理器指令"},"chkconfig":{"n":"chkconfig","p":"/chkconfig","d":"检查或设置系统的各种服务"},"mysqlshow":{"n":"mysqlshow","p":"/mysqlshow","d":"显示MySQL中数据库相关信息"},"ssh-agent":{"n":"ssh-agent","p":"/ssh-agent","d":"ssh密钥管理器"},"smbpasswd":{"n":"smbpasswd","p":"/smbpasswd","d":"samba用户和密码管理工具"},"logrotate":{"n":"logrotate","p":"/logrotate","d":"统日志进行轮转、压缩和删除"},"smbclient":{"n":"smbclient","p":"/smbclient","d":"交互方式访问samba服务器"},"showmount":{"n":"showmount","p":"/showmount","d":"显示NFS服务器加载的信息"},"clockdiff":{"n":"clockdiff","p":"/clockdiff","d":"检测两台linux主机的时间差"},"arptables":{"n":"arptables","p":"/arptables","d":"管理ARP包过滤规则表"},"setsebool":{"n":"setsebool","p":"/setsebool","d":"修改SElinux策略内各项规则的布尔值"},"ip6tables":{"n":"ip6tables","p":"/ip6tables","d":"linux中防火墙软件"},"rpmverify":{"n":"rpmverify","p":"/rpmverify","d":"验证已安装的RPM软件包的正确性"},"getsebool":{"n":"getsebool","p":"/getsebool","d":"查询SElinux策略内各项规则的布尔值"},"badblocks":{"n":"badblocks","p":"/badblocks","d":"查找磁盘中损坏的区块"},"partprobe":{"n":"partprobe","p":"/partprobe","d":"不重启的情况下重读分区"},"grpunconv":{"n":"grpunconv","p":"/grpunconv","d":"用来关闭群组的投影密码"},"pvdisplay":{"n":"pvdisplay","p":"/pvdisplay","d":"显示物理卷的属性"},"tracepath":{"n":"tracepath","p":"/tracepath","d":"追踪目的主机经过的路由信息"},"dircolors":{"n":"dircolors","p":"/dircolors","d":"置ls命令在显示目录或文件时所用的色彩"},"vgdisplay":{"n":"vgdisplay","p":"/vgdisplay","d":"显示LVM卷组的信息"},"dmidecode\r":{"n":"dmidecode\r","p":"/dmidecode","d":"在Linux系统下获取有关硬件方面的信息"},"apachectl":{"n":"apachectl","p":"/apachectl","d":"Apache服务器前端控制工具"},"tcpreplay":{"n":"tcpreplay","p":"/tcpreplay","d":"将PCAP包重新发送,用于性能或者功能测试"},"vgconvert":{"n":"vgconvert","p":"/vgconvert","d":"转换卷组元数据格式"},"domainname":{"n":"domainname","p":"/domainname","d":"显示和设置系统的NIS域名"},"dpkg-query":{"n":"dpkg-query","p":"/dpkg-query","d":"Debian Linux中软件包的查询工具"},"restorecon":{"n":"restorecon","p":"/restorecon","d":"恢复文件的安全上下文"},"xlsclients":{"n":"xlsclients","p":"/xlsclients","d":"列出显示器中的客户端应用程序"},"usernetctl":{"n":"usernetctl","p":"/usernetctl","d":"被允许时操作指定的网络接口"},"dpkg-split":{"n":"dpkg-split","p":"/dpkg-split","d":"Debian Linux中将大软件包分割成小包"},"cupsenable":{"n":"cupsenable","p":"/cupsenable","d":"启动指定的打印机"},"quotacheck":{"n":"quotacheck","p":"/quotacheck","d":"检查磁盘的使用空间与限制"},"get_module":{"n":"get_module","p":"/get_module","d":"获取Linux内核模块的详细信息"},"uncompress":{"n":"uncompress","p":"/uncompress","d":"用来解压.Z文件"},"ssh-keygen":{"n":"ssh-keygen","p":"/ssh-keygen","d":"为ssh生成、管理和转换认证密钥"},"traceroute\r":{"n":"traceroute\r","p":"/traceroute","d":"显示数据包到主机间的路径"},"mysqladmin":{"n":"mysqladmin","p":"/mysqladmin","d":"MySQL服务器管理客户端"},"mkbootdisk":{"n":"mkbootdisk","p":"/mkbootdisk","d":"可建立目前系统的启动盘"},"unprotoize":{"n":"unprotoize","p":"/unprotoize","d":"删除C语言源代码文件中的函数原型"},"ssh-copy-id":{"n":"ssh-copy-id","p":"/ssh-copy-id","d":"把本地的ssh公钥文件安装到远程主机对应的账户下"},"consoletype":{"n":"consoletype","p":"/consoletype","d":"输出已连接的终端类型"},"ssh-keyscan":{"n":"ssh-keyscan","p":"/ssh-keyscan","d":"收集主机公钥的使用工具"},"squidclient":{"n":"squidclient","p":"/squidclient","d":"squid服务器的客户端管理工具"},"mysqlimport":{"n":"mysqlimport","p":"/mysqlimport","d":"为MySQL服务器用命令行方式导入数据"},"cupsdisable":{"n":"cupsdisable","p":"/cupsdisable","d":"停止指定的打印机"},"inotifywait":{"n":"inotifywait","p":"/inotifywait","d":"异步文件系统监控机制"},"dpkg-divert":{"n":"dpkg-divert","p":"/dpkg-divert","d":"Debian Linux中创建并管理一个转向列表"},"sftp-server":{"n":"sftp-server","p":"/sftp-server","d":"sftp协议的服务器端程序"},"lsb_release":{"n":"lsb_release","p":"/lsb_release","d":"显示发行版本信息"},"firewall-cmd":{"n":"firewall-cmd","p":"/firewall-cmd","d":"Linux上新用的防火墙软件,跟iptables差不多的工具。"},"bzip2recover":{"n":"bzip2recover","p":"/bzip2recover","d":"恢复被破坏的.bz2压缩包中的文件"},"dpkg-trigger":{"n":"dpkg-trigger","p":"/dpkg-trigger","d":"Debian Linux下的软件包触发器"},"convertquota":{"n":"convertquota","p":"/convertquota","d":"把老的配额文件转换为新的格式"},"ypdomainname":{"n":"ypdomainname","p":"/ypdomainname","d":"显示主机的NIS的域名"},"apt-sortpkgs":{"n":"apt-sortpkgs","p":"/apt-sortpkgs","d":"Debian Linux下对软件包索引文件进行排序的工具"},"dnsdomainname":{"n":"dnsdomainname","p":"/dnsdomainname","d":"定义DNS系统中FQDN名称的域名"},"kernelversion":{"n":"kernelversion","p":"/kernelversion","d":"打印当前内核的主版本号"},"nisdomainname":{"n":"nisdomainname","p":"/nisdomainname","d":"显示主机NIS的域名"},"speedtest-cli":{"n":"speedtest-cli","p":"/speedtest-cli","d":"命令行下测试服务器外网速度"},"iptables-save":{"n":"iptables-save","p":"/iptables-save","d":"备份iptables的表配置"},"ip6tables-save":{"n":"ip6tables-save","p":"/ip6tables-save","d":"保存ip6tables表配置"},"dpkg-reconfigure":{"n":"dpkg-reconfigure","p":"/dpkg-reconfigure","d":"Debian Linux中重新配制一个已经安装的软件包"},"iptables-restore":{"n":"iptables-restore","p":"/iptables-restore","d":"还原iptables表的配置"},"dpkg-preconfigure":{"n":"dpkg-preconfigure","p":"/dpkg-preconfigure","d":"Debian Linux中软件包安装之前询问问题"},"dpkg-statoverride":{"n":"dpkg-statoverride","p":"/dpkg-statoverride","d":"Debian Linux中覆盖文件的所有权和模式"},"ip6tables-restore":{"n":"ip6tables-restore","p":"/ip6tables-restore","d":"还原ip6tables表"}} \ No newline at end of file +{"w":{"n":"w","p":"/w","d":"显示目前登入系统的用户信息"},"ab":{"n":"ab","p":"/ab","d":"Apache服务器的性能测试工具"},"ip":{"n":"ip","p":"/ip","d":"网络配置工具"},"ld":{"n":"ld","p":"/ld","d":"将目标文件连接为可执行程序"},"xz":{"n":"xz","p":"/xz","d":"POSIX 平台开发具有高压缩率的工具。"},"ln":{"n":"ln","p":"/ln","d":"用来为文件创件连接"},"lp":{"n":"lp","p":"/lp","d":"打印文件或修改排队的打印任务"},"fg":{"n":"fg","p":"/fg","d":"将后台作业放到前台终端运行"},"wc\r":{"n":"wc\r","p":"/wc","d":"统计文件的字节数、字数、行数"},"as":{"n":"as","p":"/as","d":"汇编语言编译器"},"at":{"n":"at","p":"/at","d":"在指定时间执行一个任务"},"fc":{"n":"fc","p":"/fc","d":"修改历史命令并执行"},"ls":{"n":"ls","p":"/ls","d":"显示目录内容列表"},"id":{"n":"id","p":"/id","d":"显示用户的ID以及所属群组的ID"},"vi":{"n":"vi","p":"/vi","d":"功能强大的纯文本编辑器"},"bc":{"n":"bc","p":"/bc","d":"算术操作精密运算工具"},"bg":{"n":"bg","p":"/bg","d":"用于将作业放到后台运行"},"tr":{"n":"tr","p":"/tr","d":"将字符进行替换压缩和删除"},"ex":{"n":"ex","p":"/ex","d":"启动vim编辑器的ex编辑模式"},"ed":{"n":"ed","p":"/ed","d":"单行纯文本编辑器"},"mv":{"n":"mv","p":"/mv","d":"用来对文件或目录重新命名"},"du":{"n":"du","p":"/du","d":"显示每个文件和目录的磁盘使用空间"},"nl":{"n":"nl","p":"/nl","d":"在Linux系统中计算文件内容行号"},"cd":{"n":"cd","p":"/cd","d":"切换用户当前工作目录"},"nm":{"n":"nm","p":"/nm","d":"显示二进制目标文件的符号表"},"od":{"n":"od","p":"/od","d":"输出文件的八进制、十六进制等格式编码的字节"},"su":{"n":"su","p":"/su","d":"用于切换当前用户身份到其他用户身份"},"pr":{"n":"pr","p":"/pr","d":"将文本文件转换成适合打印的格式"},"ss\r":{"n":"ss\r","p":"/ss","d":"获取socket统计信息"},"sh":{"n":"sh","p":"/sh","d":"shell命令解释器"},"ps":{"n":"ps","p":"/ps","d":"报告当前系统的进程状态"},"pv":{"n":"pv","p":"/pv","d":"显示当前在命令行执行的命令的进度信息,管道查看器。"},"df":{"n":"df","p":"/df","d":"显示磁盘的相关信息"},"dd":{"n":"dd","p":"/dd","d":"复制文件并对原文件的内容进行转换和格式化处理"},"rm":{"n":"rm","p":"/rm","d":"用于删除给定的文件和目录"},"cp":{"n":"cp","p":"/cp","d":"将源文件或目录复制到目标文件或目录中"},"man":{"n":"man","p":"/man","d":"查看Linux中的指令帮助"},"sar":{"n":"sar","p":"/sar","d":"系统运行状态统计工具"},"rsh":{"n":"rsh","p":"/rsh","d":"连接远程主机并执行命令"},"rpm":{"n":"rpm","p":"/rpm","d":"RPM软件包的管理工具"},"sed":{"n":"sed","p":"/sed","d":"功能强大的流式文本编辑器"},"rev":{"n":"rev","p":"/rev","d":"将文件内容以字符为单位反序输出"},"zip\r":{"n":"zip\r","p":"/zip","d":"可以用来解压缩文件"},"seq":{"n":"seq","p":"/seq","d":"以指定增量从首数开始打印数字到尾数"},"rcp\r":{"n":"rcp\r","p":"/rcp","d":"使在两台Linux主机之间的文件复制操作更简单"},"set":{"n":"set","p":"/set","d":"显示或设置shell特性及shell变量"},"pwd":{"n":"pwd","p":"/pwd","d":"绝对路径方式显示用户当前工作目录"},"pvs":{"n":"pvs","p":"/pvs","d":"输出物理卷信息报表"},"dig":{"n":"dig","p":"/dig","d":"域名查询工具"},"col":{"n":"col","p":"/col","d":"过滤控制字符"},"cmp":{"n":"cmp","p":"/cmp","d":"比较两个文件是否有差异"},"dnf":{"n":"dnf","p":"/dnf","d":"新一代的RPM软件包管理器"},"ssh\r":{"n":"ssh\r","p":"/ssh","d":"openssh套件中的客户端连接工具"},"php":{"n":"php","p":"/php","d":"PHP语言的命令行接口"},"sum":{"n":"sum","p":"/sum","d":"计算文件的校验码和显示块数"},"tac":{"n":"tac","p":"/tac","d":"将文件已行为单位的反序输出"},"cat":{"n":"cat","p":"/cat","d":"连接文件并打印到标准输出设备上"},"cal":{"n":"cal","p":"/cal","d":"显示当前日历或指定日期的日历"},"tar\r":{"n":"tar\r","p":"/tar","d":"Linux下的归档使用工具,用来打包和备份。"},"tee":{"n":"tee","p":"/tee","d":"把数据重定向到给定文件和屏幕上"},"scp":{"n":"scp","p":"/scp","d":"加密的方式在本地主机和远程主机之间复制文件"},"elm":{"n":"elm","p":"/elm","d":"纯文本邮件客户端程序"},"env":{"n":"env","p":"/env","d":"显示系统中已存在的环境变量"},"top":{"n":"top","p":"/top","d":"显示或管理执行中的程序"},"awk\r":{"n":"awk\r","p":"/awk","d":"文本和数据进行处理的编程语言"},"atq":{"n":"atq","p":"/atq","d":"列出当前用户的at任务列表"},"lpr":{"n":"lpr","p":"/lpr","d":"将文件发送给指定打印机进行打印"},"arp":{"n":"arp","p":"/arp","d":"显示和修改IP到MAC转换表"},"lpq":{"n":"lpq","p":"/lpq","d":"显示打印队列中的打印任务的状态信息"},"lpc":{"n":"lpc","p":"/lpc","d":"命令行方式打印机控制程序"},"arj":{"n":"arj","p":"/arj","d":"用于创建和管理.arj压缩包"},"fmt":{"n":"fmt","p":"/fmt","d":"读取文件后优化处理并输出"},"ftp\r":{"n":"ftp\r","p":"/ftp","d":"用来设置文件系统相关功能"},"who":{"n":"who","p":"/who","d":"显示目前登录系统的用户信息"},"lha":{"n":"lha","p":"/lha","d":"压缩或解压缩lzh格式文件"},"let":{"n":"let","p":"/let","d":"简单的计算器"},"gcc":{"n":"gcc","p":"/gcc","d":"基于C/C++的编译器"},"gdb":{"n":"gdb","p":"/gdb","d":"功能强大的程序调试器"},"ldd":{"n":"ldd","p":"/ldd","d":"打印程序或者库文件所依赖的共享库列表"},"yes":{"n":"yes","p":"/yes","d":"重复打印指定字符串"},"gpm":{"n":"gpm","p":"/gpm","d":"提供文字模式下的滑鼠事件处理"},"joe":{"n":"joe","p":"/joe","d":"强大的纯文本编辑器"},"jed":{"n":"jed","p":"/jed","d":"主要用于编辑代码的编辑器"},"yum\r":{"n":"yum\r","p":"/yum","d":"基于RPM的软件包管理器"},"cut":{"n":"cut","p":"/cut","d":"连接文件并打印到标准输出设备上"},"sync":{"n":"sync","p":"/sync","d":"用于强制被改变的内容立刻写入磁盘"},"zcat":{"n":"zcat","p":"/zcat","d":"显示压缩包中文件的内容"},"pvck":{"n":"pvck","p":"/pvck","d":"检测物理卷的LVM元数据的一致性"},"sudo":{"n":"sudo","p":"/sudo","d":"以其他身份来执行命令"},"dirs":{"n":"dirs","p":"/dirs","d":"显示目录记录"},"pssh":{"n":"pssh","p":"/pssh","d":"批量管理执行"},"chfn":{"n":"chfn","p":"/chfn","d":"用来改变finger命令显示的信息"},"wall":{"n":"wall","p":"/wall","d":"向系统当前所有打开的终端上输出信息"},"stty":{"n":"stty","p":"/stty","d":"修改终端命令行的相关设置"},"popd":{"n":"popd","p":"/popd","d":"用于删除目录栈中的记录"},"pmap":{"n":"pmap","p":"/pmap","d":"报告进程的内存映射关系"},"ping":{"n":"ping","p":"/ping","d":"测试主机之间网络的连通性"},"pico":{"n":"pico","p":"/pico","d":"功能强大全屏幕的文本编辑器"},"stat":{"n":"stat","p":"/stat","d":"用于显示文件的状态信息"},"perl":{"n":"perl","p":"/perl","d":"perl语言解释器"},"sshd":{"n":"sshd","p":"/sshd","d":"openssh软件套件中的服务器守护进程"},"nmap":{"n":"nmap","p":"/nmap","d":"网络探测和安全审核"},"arch":{"n":"arch","p":"/arch","d":"显示当前主机的硬件架构类型"},"bind":{"n":"bind","p":"/bind","d":"显示或设置键盘按键与其相关的功能"},"dpkg":{"n":"dpkg","p":"/dpkg","d":"Debian Linux系统上安装、创建和管理软件包"},"dris":{"n":"dris","p":"/dris","d":"显示和清空目录堆栈中的内容"},"nice":{"n":"nice","p":"/nice","d":"改变程序执行的优先权等级"},"chsh":{"n":"chsh","p":"/chsh","d":"用来更换登录系统时使用的shell"},"dump":{"n":"dump","p":"/dump","d":"用于备份ext2或者ext3文件系统"},"nano":{"n":"nano","p":"/nano","d":"字符终端文本编辑器"},"sort":{"n":"sort","p":"/sort","d":"将文件进行排序并输出"},"echo":{"n":"echo","p":"/echo","d":"输出指定的字符串或者变量"},"uniq":{"n":"uniq","p":"/uniq","d":"报告或忽略文件中的重复行"},"more":{"n":"more","p":"/more","d":"显示文件内容,每次显示一屏"},"mkfs":{"n":"mkfs","p":"/mkfs","d":"用于在设备上创建Linux文件系统"},"mesg":{"n":"mesg","p":"/mesg","d":"设置当前终端的写权限"},"sftp":{"n":"sftp","p":"/sftp","d":"交互式的文件传输程序"},"type":{"n":"type","p":"/type","d":"显示指定命令的类型"},"make":{"n":"make","p":"/make","d":"GNU的工程化编译工具"},"mail":{"n":"mail","p":"/mail","d":"命令行下发送和接收电子邮件"},"tree\r":{"n":"tree\r","p":"/tree","d":"树状图列出目录的内容"},"lynx":{"n":"lynx","p":"/lynx","d":"纯文本模式的网页浏览器"},"trap":{"n":"trap","p":"/trap","d":"指定在接收到信号后将要采取的动作"},"exec":{"n":"exec","p":"/exec","d":"调用并执行指定的命令"},"exit":{"n":"exit","p":"/exit","d":"退出当前的shell"},"lsof":{"n":"lsof","p":"/lsof","d":"显示Linux系统当前已打开的所有文件列表"},"comm":{"n":"comm","p":"/comm","d":"两个文件之间的比较"},"lprm":{"n":"lprm","p":"/lprm","d":"删除打印队列中的打印任务"},"expr":{"n":"expr","p":"/expr","d":"一款表达式计算工具"},"znew":{"n":"znew","p":"/znew","d":"将.Z压缩包重新转化为gzip命令压缩的.gz压缩包"},"tput":{"n":"tput","p":"/tput","d":"通过terminfo数据库对终端会话进行初始化和操作"},"atop":{"n":"atop","p":"/atop","d":"监控Linux系统资源与进程的工具"},"time":{"n":"time","p":"/time","d":"统计给定命令所花费的总时间"},"file":{"n":"file","p":"/file","d":"用来探测给定文件的类型。"},"find\r":{"n":"find\r","p":"/find","d":"在指定目录下查找文件"},"tftp":{"n":"tftp","p":"/tftp","d":"在本机和tftp服务器之间使用TFTP协议传输文件"},"cpio":{"n":"cpio","p":"/cpio","d":"用来建立、还原备份档的工具程序"},"look":{"n":"look","p":"/look","d":"显示文件中以指定字符串开头的任意行"},"test":{"n":"test","p":"/test","d":"shell环境中测试条件表达式工具"},"fold":{"n":"fold","p":"/fold","d":"控制文件内容输出时所占用的屏幕宽度"},"free\r":{"n":"free\r","p":"/free","d":"显示内存的使用情况"},"fsck":{"n":"fsck","p":"/fsck","d":"检查并且试图修复文件系统中的错误"},"xset":{"n":"xset","p":"/xset","d":"设置X-Window系统中的用户爱好的实用工具"},"atrm":{"n":"atrm","p":"/atrm","d":"删除待执行任务队列中的指定任务"},"lilo":{"n":"lilo","p":"/lilo","d":"安装核心载入开机管理程序"},"talk":{"n":"talk","p":"/talk","d":"让用户和其他用户聊天"},"lftp":{"n":"lftp","p":"/lftp","d":"优秀的文件客户端程序"},"curl":{"n":"curl","p":"/curl","d":"利用URL规则在命令行下工作的文件传输工具"},"arpd":{"n":"arpd","p":"/arpd","d":"收集免费ARP信息"},"gcov":{"n":"gcov","p":"/gcov","d":"测试程序的代码覆盖率的工具"},"date":{"n":"date","p":"/date","d":"显示或设置系统时间与日期"},"less":{"n":"less","p":"/less","d":"分屏上下翻页浏览文件内容"},"tail\r":{"n":"tail\r","p":"/tail","d":"在屏幕上显示指定文件的末尾若干行"},"read":{"n":"read","p":"/read","d":"从键盘读取变量值"},"axel":{"n":"axel","p":"/axel","d":"多线程下载工具"},"grep\r":{"n":"grep\r","p":"/grep","d":"强大的文本搜索工具"},"last":{"n":"last","p":"/last","d":"列出目前与过去登入系统的用户相关信息"},"kill":{"n":"kill","p":"/kill","d":"删除执行中的程序或工作"},"join":{"n":"join","p":"/join","d":"两个文件中指定栏位内容相同的行连接起来"},"wait":{"n":"wait","p":"/wait","d":"等待进程执行完后返回"},"jobs":{"n":"jobs","p":"/jobs","d":"显示Linux中的任务列表及任务状态"},"wget":{"n":"wget","p":"/wget","d":"Linux系统下载文件工具"},"ipcs":{"n":"ipcs","p":"/ipcs","d":"分析消息队列共享内存和信号量 "},"grub":{"n":"grub","p":"/grub","d":"多重引导程序grub的命令行shell工具"},"diff":{"n":"diff","p":"/diff","d":"比较给定的两个文件的不同"},"init":{"n":"init","p":"/init","d":"init进程是所有Linux进程的父进程"},"gzip\r":{"n":"gzip\r","p":"/gzip","d":"用来压缩文件"},"halt":{"n":"halt","p":"/halt","d":"关闭正在运行的Linux操作系统"},"info":{"n":"info","p":"/info","d":"Linux下info格式的帮助指令"},"head":{"n":"head","p":"/head","d":"在屏幕上显示指定文件的开头若干行"},"help":{"n":"help","p":"/help","d":"显示帮助信息"},"ifup":{"n":"ifup","p":"/ifup","d":"激活指定的网络接口"},"pwck":{"n":"pwck","p":"/pwck","d":"用来验证系统认证文件内容和格式的完整性"},"host":{"n":"host","p":"/host","d":"常用的分析域名查询工具"},"htop":{"n":"htop","p":"/htop","d":"[非内部命令]一个互动的进程查看器,可以动态观察系统进程状况。"},"mysql":{"n":"mysql","p":"/mysql","d":"MySQL服务器客户端工具"},"touch":{"n":"touch","p":"/touch","d":"创建新的空文件"},"iconv":{"n":"iconv","p":"/iconv","d":"转换文件的编码方式"},"tload":{"n":"tload","p":"/tload","d":"显示系统负载状况"},"ifcfg":{"n":"ifcfg","p":"/ifcfg","d":"置Linux中的网络接口参数"},"gzexe":{"n":"gzexe","p":"/gzexe","d":"用来压缩可执行文件"},"iotop":{"n":"iotop","p":"/iotop","d":"用来监视磁盘I/O使用状况的工具"},"bzip2":{"n":"bzip2","p":"/bzip2","d":"将文件压缩成bz2格式"},"alias":{"n":"alias","p":"/alias","d":"用来设置指令的别名"},"zfore":{"n":"zfore","p":"/zfore","d":"强制为gzip格式的压缩文件添加.gz后缀"},"ipcrm":{"n":"ipcrm","p":"/ipcrm","d":"删除消息队列、信号集、或者共享内存标识"},"iperf":{"n":"iperf","p":"/iperf","d":"网络性能测试工具"},"bzcat":{"n":"bzcat","p":"/bzcat","d":"解压缩指定的.bz2文件"},"grpck":{"n":"grpck","p":"/grpck","d":"用于验证组文件的完整性"},"kexec":{"n":"kexec","p":"/kexec","d":"从当前正在运行的内核引导到一个新内核"},"lastb":{"n":"lastb","p":"/lastb","d":"列出登入系统失败的用户相关信息"},"tailf":{"n":"tailf","p":"/tailf","d":"在屏幕上显示指定文件的末尾若干行内容,通常用于日志文件的跟踪输出。"},"xinit":{"n":"xinit","p":"/xinit","d":"是Linux下X-Window系统的初始化程序"},"fuser":{"n":"fuser","p":"/fuser","d":"使用文件或文件结构识别进程"},"login":{"n":"login","p":"/login","d":"登录系统或切换用户身份"},"chage":{"n":"chage","p":"/chage","d":"修改帐号和密码的有效期限"},"xhost":{"n":"xhost","p":"/xhost","d":"制哪些X客户端能够在X服务器上显示"},"xclip":{"n":"xclip","p":"/xclip","d":"管理 X 粘贴板"},"chcon":{"n":"chcon","p":"/chcon","d":"修改对象(文件)的安全上下文"},"fgrep":{"n":"fgrep","p":"/fgrep","d":"为文件搜索文字字符串"},"fdisk":{"n":"fdisk","p":"/fdisk","d":"查看磁盘使用情况和磁盘分区"},"xauth":{"n":"xauth","p":"/xauth","d":"显示和编辑被用于连接X服务器的认证信息"},"lsblk":{"n":"lsblk","p":"/lsblk","d":"列出块设备信息"},"lsmod":{"n":"lsmod","p":"/lsmod","d":"显示已载入系统的模块"},"lspci":{"n":"lspci","p":"/lspci","d":"显示当前主机的所有PCI总线信息"},"lsusb":{"n":"lsusb","p":"/lsusb","d":"显示本机的USB设备列表信息"},"xargs\r":{"n":"xargs\r","p":"/xargs","d":"给其他命令传递参数的一个过滤器"},"chgrp":{"n":"chgrp","p":"/chgrp","d":"用来变更文件或目录的所属群组"},"mailq":{"n":"mailq","p":"/mailq","d":"显示待发送的邮件队列"},"emacs":{"n":"emacs","p":"/emacs","d":"功能强大的全屏文本编辑器"},"eject":{"n":"eject","p":"/eject","d":"用来退出抽取式设备"},"write":{"n":"write","p":"/write","d":"向指定登录用户终端上发送信息"},"mkdir":{"n":"mkdir","p":"/mkdir","d":"用来创建目录"},"egrep":{"n":"egrep","p":"/egrep","d":"在文件内查找指定的字符串"},"mknod":{"n":"mknod","p":"/mknod","d":"创建字符设备文件和块设备文件"},"chmod\r":{"n":"chmod\r","p":"/chmod","d":"用来变更文件或目录的权限"},"bzcmp":{"n":"bzcmp","p":"/bzcmp","d":"比较两个压缩包中的文件"},"which":{"n":"which","p":"/which","d":"查找并显示给定命令的绝对路径"},"chown":{"n":"chown","p":"/chown","d":"用来变更文件或目录的拥有者或所属群组"},"ncftp":{"n":"ncftp","p":"/ncftp","d":"是增强的的FTP工具"},"umask":{"n":"umask","p":"/umask","d":"用来设置限制新建文件权限的掩码"},"ngrep":{"n":"ngrep","p":"/ngrep","d":"方便的数据包匹配和显示工具"},"dstat":{"n":"dstat","p":"/dstat","d":"通用的系统资源统计工具"},"watch\r":{"n":"watch\r","p":"/watch","d":"可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令"},"nohup":{"n":"nohup","p":"/nohup","d":"将程序以忽略挂起信号的方式运行起来"},"squid":{"n":"squid","p":"/squid","d":"squid服务器守护进程"},"split":{"n":"split","p":"/split","d":"分割任意大小的文件"},"spell":{"n":"spell","p":"/spell","d":"对文件进行拼写检查"},"uname":{"n":"uname","p":"/uname","d":"显示Linux系统信息"},"paste":{"n":"paste","p":"/paste","d":"将多个文件按列队列合并"},"patch":{"n":"patch","p":"/patch","d":"为开放源代码软件安装补丁程序"},"cksum":{"n":"cksum","p":"/cksum","d":"检查文件的CRC是否正确"},"pfctl":{"n":"pfctl","p":"/pfctl","d":"PF防火墙的配置命令"},"pgrep":{"n":"pgrep","p":"/pgrep","d":"设置用户的认证信息,包括用户密码、密码过期时间等"},"batch":{"n":"batch","p":"/batch","d":"在系统不繁忙的时候执行定时任务"},"pidof":{"n":"pidof","p":"/pidof","d":"查找指定名称的进程的进程号ID号"},"pkill":{"n":"pkill","p":"/pkill","d":"可以按照进程名杀死进程"},"unarj":{"n":"unarj","p":"/unarj","d":"解压缩由arj命令创建的压缩包"},"dmesg\r":{"n":"dmesg\r","p":"/dmesg","d":"显示Linux系统启动信息"},"pushd":{"n":"pushd","p":"/pushd","d":"将目录加入命令堆叠中"},"sleep":{"n":"sleep","p":"/sleep","d":"将目前动作延迟一段时间"},"diff3":{"n":"diff3","p":"/diff3","d":"比较3个文件不同的地方"},"quota":{"n":"quota","p":"/quota","d":"显示磁盘已使用的空间与限制"},"skill":{"n":"skill","p":"/skill","d":"向选定的进程发送信号冻结进程"},"blkid":{"n":"blkid","p":"/blkid","d":"查看块设备的文件系统类型、LABEL、UUID等信息"},"shopt":{"n":"shopt","p":"/shopt","d":"显示和设置shell操作选项"},"clear":{"n":"clear","p":"/clear","d":"清除当前屏幕终端上的任何信息"},"users":{"n":"users","p":"/users","d":"显示当前登录系统的所有用户"},"rexec":{"n":"rexec","p":"/rexec","d":"运程执行Linux系统下命令 "},"unset":{"n":"unset","p":"/unset","d":"删除指定的shell变量或函数"},"rmdir":{"n":"rmdir","p":"/rmdir","d":"用来删除空目录"},"rmmod":{"n":"rmmod","p":"/rmmod","d":"从运行的内核中移除指定的内核模块"},"route":{"n":"route","p":"/route","d":"显示并设置Linux中静态路由表"},"rpmdb":{"n":"rpmdb","p":"/rpmdb","d":"初始化和重建RPM数据库"},"unzip":{"n":"unzip","p":"/unzip","d":"用于解压缩由zip命令压缩的压缩包"},"colrm":{"n":"colrm","p":"/colrm","d":"删除文件中的指定列"},"rsync":{"n":"rsync","p":"/rsync","d":"远程数据同步工具"},"ftpwho":{"n":"ftpwho","p":"/ftpwho","d":"显示当前每个ftp会话信息"},"mkswap":{"n":"mkswap","p":"/mkswap","d":"建立和设置SWAP交换分区"},"mktemp":{"n":"mktemp","p":"/mktemp","d":"创建临时文件供shell脚本使用"},"syslog":{"n":"syslog","p":"/syslog","d":"系统默认的日志守护进程"},"mpstat":{"n":"mpstat","p":"/mpstat","d":"显示各个可用CPU的状态"},"mtools":{"n":"mtools","p":"/mtools","d":"显示mtools支持的指令"},"startx":{"n":"startx","p":"/startx","d":"用来启动X Window"},"ftptop":{"n":"ftptop","p":"/ftptop","d":"proftpd服务器的连接状态"},"whoami":{"n":"whoami","p":"/whoami","d":"打印当前有效的用户名称"},"sysctl":{"n":"sysctl","p":"/sysctl","d":"时动态地修改内核的运行参数"},"lnstat":{"n":"lnstat","p":"/lnstat","d":"显示Linux系统的网路状态"},"e2fsck":{"n":"e2fsck","p":"/e2fsck","d":"用于检查第二扩展文件系统的完整性"},"locate":{"n":"locate","p":"/locate","d":"Apache服务器的性能测试工具"},"ulimit":{"n":"ulimit","p":"/ulimit","d":"控制shell程序的资源"},"indent":{"n":"indent","p":"/indent","d":"格式化C语言的源文件"},"umount":{"n":"umount","p":"/umount","d":"用于卸载已经加载的文件系统"},"ipcalc":{"n":"ipcalc","p":"/ipcalc","d":"简单的IP地址计算器"},"logout":{"n":"logout","p":"/logout","d":"退出当前登录的Shell"},"whatis":{"n":"whatis","p":"/whatis","d":"查询一个命令执行什么功能"},"arping":{"n":"arping","p":"/arping","d":"通过发送ARP协议报文测试网络"},"hdparm":{"n":"hdparm","p":"/hdparm","d":"显示与设定硬盘的参数"},"swapon":{"n":"swapon","p":"/swapon","d":"激活Linux系统中交换空间"},"chroot":{"n":"chroot","p":"/chroot","d":"把根目录换成指定的目的目录"},"telnet\r":{"n":"telnet\r","p":"/telnet","d":"登录远程主机和管理"},"ntsysv":{"n":"ntsysv","p":"/ntsysv","d":"集中管理系统的各种服务"},"chattr":{"n":"chattr","p":"/chattr","d":"用来改变文件属性"},"finger":{"n":"finger","p":"/finger","d":"用于查找并显示用户信息"},"hostid":{"n":"hostid","p":"/hostid","d":"用来打印当前主机的数字化标识"},"parted":{"n":"parted","p":"/parted","d":"磁盘分区和分区大小调整工具"},"passwd":{"n":"passwd","p":"/passwd","d":"用于让用户可以更改自己的密码"},"findfs":{"n":"findfs","p":"/findfs","d":"标签或UUID查找文件系统"},"telint":{"n":"telint","p":"/telint","d":"切换当前正在运行系统的运行等级"},"insmod":{"n":"insmod","p":"/insmod","d":"将给定的模块加载到内核中"},"vmstat":{"n":"vmstat","p":"/vmstat","d":"显示虚拟内存状态"},"lpstat":{"n":"lpstat","p":"/lpstat","d":"显示CUPS中打印机的状态信息"},"export":{"n":"export","p":"/export","d":"设置或显示系统环境变量"},"lsattr":{"n":"lsattr","p":"/lsattr","d":"查看文件的第二扩展文件系统属性"},"vgscan":{"n":"vgscan","p":"/vgscan","d":"扫描并显示系统中的卷组"},"iptraf":{"n":"iptraf","p":"/iptraf","d":"实时地监视网卡流量"},"ispell":{"n":"ispell","p":"/ispell","d":"检查文件中出现的拼写错误"},"bzless":{"n":"bzless","p":"/bzless","d":"增强.bz2压缩包查看器"},"printf":{"n":"printf","p":"/printf","d":"格式化并输出结果"},"expand":{"n":"expand","p":"/expand","d":"将文件的制表符转换为空白字符"},"pstack":{"n":"pstack","p":"/pstack","d":"显示每个进程的栈跟踪"},"pstree":{"n":"pstree","p":"/pstree","d":"以树状图的方式展现进程之间的派生关系"},"bzgrep":{"n":"bzgrep","p":"/bzgrep","d":"使用正则表达式搜索.bz2压缩包中文件"},"groups":{"n":"groups","p":"/groups","d":"用来打印指定用户所属的工作组"},"pvscan":{"n":"pvscan","p":"/pvscan","d":"扫描系统中所有硬盘的物理卷列表"},"ltrace":{"n":"ltrace","p":"/ltrace","d":"用来跟踪进程调用库函数的情况"},"pwconv":{"n":"pwconv","p":"/pwconv","d":"用来开启用户的投影密码"},"hping3":{"n":"hping3","p":"/hping3","d":"测试网络及主机的安全"},"jwhois":{"n":"jwhois","p":"/jwhois","d":"whois 客户端服务"},"vdfuse":{"n":"vdfuse","p":"/vdfuse","d":"VirtualBox软件挂载VDI分区文件工具"},"accept":{"n":"accept","p":"/accept","d":"指示打印系统接受发往指定目标打印机的打印任务"},"rcconf":{"n":"rcconf","p":"/rcconf","d":"Debian Linux下的运行等级服务配置工具"},"depmod":{"n":"depmod","p":"/depmod","d":"分析可载入模块的相依性"},"lvscan":{"n":"lvscan","p":"/lvscan","d":"扫描逻辑卷"},"iostat":{"n":"iostat","p":"/iostat","d":"监视系统输入输出设备和CPU的使用情况"},"reboot":{"n":"reboot","p":"/reboot","d":"重新启动正在运行的Linux操作系统"},"reject":{"n":"reject","p":"/reject","d":"指示打印系统拒绝发往指定目标打印机的打印任务"},"rename":{"n":"rename","p":"/rename","d":"用字符串替换的方式批量改变文件名"},"renice":{"n":"renice","p":"/renice","d":"修改正在运行的进程的调度优先级"},"enable":{"n":"enable","p":"/enable","d":"启动或关闭shell内建命令"},"bzmore":{"n":"bzmore","p":"/bzmore","d":"查看bzip2压缩过的文本文件的内容"},"unlink":{"n":"unlink","p":"/unlink","d":"系统调用函数unlink去删除指定的文件"},"ifdown":{"n":"ifdown","p":"/ifdown","d":"禁用指定的网络接口"},"rlogin":{"n":"rlogin","p":"/rlogin","d":"从当前终端登录到远程Linux主机"},"elinks":{"n":"elinks","p":"/elinks","d":"纯文本界面的WWW浏览器"},"md5sum":{"n":"md5sum","p":"/md5sum","d":"计算和校验文件报文摘要的工具程序"},"gunzip":{"n":"gunzip","p":"/gunzip","d":"用来解压缩文件"},"cancel":{"n":"cancel","p":"/cancel","d":"取消已存在的打印任务"},"csplit":{"n":"csplit","p":"/csplit","d":"将一个大文件分割成小的碎片文件"},"ifstat":{"n":"ifstat","p":"/ifstat","d":"统计网络接口流量状态"},"mke2fs":{"n":"mke2fs","p":"/mke2fs","d":"创建磁盘分区上的“etc2/etc3”文件系统"},"setpci":{"n":"setpci","p":"/setpci","d":"查询和配置PCI设备的使用工具"},"bzdiff":{"n":"bzdiff","p":"/bzdiff","d":"直接比较两个.bz2压缩包中文件的不同"},"strace":{"n":"strace","p":"/strace","d":"跟踪系统调用和信号"},"uptime":{"n":"uptime","p":"/uptime","d":"查看Linux系统负载信息"},"screen":{"n":"screen","p":"/screen","d":"用于命令行终端切换"},"seinfo":{"n":"seinfo","p":"/seinfo","d":"查询SELinux的策略提供多少相关规则"},"edquota":{"n":"edquota","p":"/edquota","d":"用于编辑指定用户或工作组磁盘配额"},"command":{"n":"command","p":"/command","d":"调用并执行指定的命令"},"crontab":{"n":"crontab","p":"/crontab","d":"提交和管理用户的需要周期性执行的任务"},"setfacl":{"n":"setfacl","p":"/setfacl","d":"设置文件访问控制列表"},"useradd":{"n":"useradd","p":"/useradd","d":"创建的新的系统用户"},"rpmsign":{"n":"rpmsign","p":"/rpmsign","d":"使用RPM软件包的签名管理工具"},"userdel":{"n":"userdel","p":"/userdel","d":"用于删除给定的用户以及与用户相关的文件"},"usermod":{"n":"usermod","p":"/usermod","d":"用于修改用户的基本信息"},"restore":{"n":"restore","p":"/restore","d":"所进行的操作和dump指令相反"},"readelf":{"n":"readelf","p":"/readelf","d":"用于显示elf格式文件的信息"},"declare":{"n":"declare","p":"/declare","d":"声明或显示shell变量"},"quotaon":{"n":"quotaon","p":"/quotaon","d":"激活Linux内核中指定文件系统的磁盘配额功能"},"slabtop":{"n":"slabtop","p":"/slabtop","d":"实时显示内核slab内存缓存信息"},"dirname":{"n":"dirname","p":"/dirname","d":"去除文件名中的非目录部分"},"ppp-off":{"n":"ppp-off","p":"/ppp-off","d":"关闭ppp连线"},"pathchk":{"n":"pathchk","p":"/pathchk","d":"检查文件中不可移植的部分"},"volname":{"n":"volname","p":"/volname","d":"显示指定的ISO-9660格式的设备的卷名称"},"openssl":{"n":"openssl","p":"/openssl","d":"强大的安全套接字层密码库"},"objdump":{"n":"objdump","p":"/objdump","d":"显示二进制文件信息"},"ntpdate":{"n":"ntpdate","p":"/ntpdate","d":"使用网络计时协议(NTP)设置日期和时间"},"unalias":{"n":"unalias","p":"/unalias","d":"删除由alias设置的别名"},"nologin":{"n":"nologin","p":"/nologin","d":"拒绝用户登录系统"},"ssh-add":{"n":"ssh-add","p":"/ssh-add","d":"把专用密钥添加到ssh-agent的高速缓存中"},"nfsstat":{"n":"nfsstat","p":"/nfsstat","d":"列出NFS客户端和服务器的工作状态"},"netstat":{"n":"netstat","p":"/netstat","d":"查看Linux中网络系统状态信息"},"nethogs":{"n":"nethogs","p":"/nethogs","d":"终端下的网络流量监控工具"},"whereis":{"n":"whereis","p":"/whereis","d":"查找二进制程序、代码等相关文件路径"},"e2label":{"n":"e2label","p":"/e2label","d":"设置第二扩展文件系统的卷标"},"service":{"n":"service","p":"/service","d":"控制系统服务的实用工具"},"mkisofs":{"n":"mkisofs","p":"/mkisofs","d":"建立ISO 9660映像文件"},"strings":{"n":"strings","p":"/strings","d":"在对象文件或二进制文件中查找可打印的字符串"},"ethtool":{"n":"ethtool","p":"/ethtool","d":"显示或修改以太网卡的配置信息"},"lpadmin":{"n":"lpadmin","p":"/lpadmin","d":"配置CUPS套件中的打印机和类"},"losetup":{"n":"losetup","p":"/losetup","d":"设定与控制循环(loop)设备"},"swapoff":{"n":"swapoff","p":"/swapoff","d":"关闭指定的交换空间"},"logsave":{"n":"logsave","p":"/logsave","d":"将命令的输出信息保存到指定的日志文件"},"logname":{"n":"logname","p":"/logname","d":"用来显示用户名称"},"ftpshut":{"n":"ftpshut","p":"/ftpshut","d":"在指定的时间关闭FTP服务器"},"lftpget":{"n":"lftpget","p":"/lftpget","d":"调用lftp指令下载指定的文件"},"builtin":{"n":"builtin","p":"/builtin","d":"执行shell内部命令"},"systool":{"n":"systool","p":"/systool","d":"显示基于总线、类和拓扑显示系统中设备的信息"},"gpasswd":{"n":"gpasswd","p":"/gpasswd","d":"Linux下工作组文件的管理工具"},"lastlog":{"n":"lastlog","p":"/lastlog","d":"显示系统中所有用户最近一次登录信息"},"killall":{"n":"killall","p":"/killall","d":"使用进程的名称来杀死一组进程"},"grpconv":{"n":"grpconv","p":"/grpconv","d":"用来开启群组的投影密码"},"tcpdump":{"n":"tcpdump","p":"/tcpdump","d":"一款sniffer工具"},"bunzip2":{"n":"bunzip2","p":"/bunzip2","d":"创一个bz2文件压缩包"},"apt-key":{"n":"apt-key","p":"/apt-key","d":"管理Debian Linux系统中的软件包密钥"},"apt-get":{"n":"apt-get","p":"/apt-get","d":"Debian Linux发行版中的APT软件包管理工具"},"apropos":{"n":"apropos","p":"/apropos","d":"在 whatis 数据库中查找字符串"},"zipinfo":{"n":"zipinfo","p":"/zipinfo","d":"用来列出压缩文件信息"},"install":{"n":"install","p":"/install","d":"安装或升级软件或备份数据"},"hexdump":{"n":"hexdump","p":"/hexdump","d":"显示文件十六进制格式"},"history":{"n":"history","p":"/history","d":"用于显示历史命令"},"hwclock":{"n":"hwclock","p":"/hwclock","d":"显示与设定硬件时钟"},"pwunconv":{"n":"pwunconv","p":"/pwunconv","d":"用来关闭用户的投影密码"},"pvchange":{"n":"pvchange","p":"/pvchange","d":"修改物理卷属性"},"vgcreate":{"n":"vgcreate","p":"/vgcreate","d":"用于创建LVM卷组"},"pvcreate":{"n":"pvcreate","p":"/pvcreate","d":"将物理硬盘分区初始化为物理卷"},"vgchange":{"n":"vgchange","p":"/vgchange","d":"修改卷组属性"},"pvremove":{"n":"pvremove","p":"/pvremove","d":"删除一个存在的物理卷"},"diffstat":{"n":"diffstat","p":"/diffstat","d":"显示diff命令输出信息的柱状图"},"arpwatch":{"n":"arpwatch","p":"/arpwatch","d":"监听网络上ARP的记录"},"mkinitrd":{"n":"mkinitrd","p":"/mkinitrd","d":"建立要载入ramdisk的映像文件"},"htpasswd":{"n":"htpasswd","p":"/htpasswd","d":"apache服务器创建密码认证文件"},"shutdown":{"n":"shutdown","p":"/shutdown","d":"用来执行系统关机的命令"},"dhclient":{"n":"dhclient","p":"/dhclient","d":"动态获取或释放IP地址"},"nslookup":{"n":"nslookup","p":"/nslookup","d":"查询域名DNS信息的工具"},"groupmod":{"n":"groupmod","p":"/groupmod","d":"更改群组识别码或名称"},"unexpand":{"n":"unexpand","p":"/unexpand","d":"将文件的空白字符转换为制表符"},"lvcreate":{"n":"lvcreate","p":"/lvcreate","d":"用于创建LVM的逻辑卷"},"quotaoff":{"n":"quotaoff","p":"/quotaoff","d":"关闭Linux内核中指定文件系统的磁盘配额功能"},"iptables":{"n":"iptables","p":"/iptables","d":"Linux上常用的防火墙软件"},"basename":{"n":"basename","p":"/basename","d":"打印目录或者文件的基本名称"},"modprobe\r":{"n":"modprobe\r","p":"/modprobe","d":"自动处理可载入模块"},"lvextend":{"n":"lvextend","p":"/lvextend","d":"扩展逻辑卷空间"},"lvreduce":{"n":"lvreduce","p":"/lvreduce","d":"收缩逻辑卷空间"},"readonly":{"n":"readonly","p":"/readonly","d":"定义只读shell变量或函数"},"xlsfonts":{"n":"xlsfonts","p":"/xlsfonts","d":"列出X Server使用的字体"},"lvresize":{"n":"lvresize","p":"/lvresize","d":"调整逻辑卷空间大小"},"zipsplit":{"n":"zipsplit","p":"/zipsplit","d":"将较大的zip压缩包分割成各个较小的压缩包"},"groupdel":{"n":"groupdel","p":"/groupdel","d":"用于删除指定的工作组"},"blockdev":{"n":"blockdev","p":"/blockdev","d":"从命令行调用区块设备控制程序"},"chpasswd":{"n":"chpasswd","p":"/chpasswd","d":"批量更新用户口令的工具"},"repquota":{"n":"repquota","p":"/repquota","d":"报表的格式输出磁盘空间限制的状态"},"aptitude":{"n":"aptitude","p":"/aptitude","d":"Debian Linux系统中软件包管理工具"},"ftpcount":{"n":"ftpcount","p":"/ftpcount","d":"显示目前已FTP登入的用户人数"},"exportfs":{"n":"exportfs","p":"/exportfs","d":"管理NFS共享文件系统列表"},"mailstat":{"n":"mailstat","p":"/mailstat","d":"显示到达的邮件状态"},"bmodinfo":{"n":"bmodinfo","p":"/bmodinfo","d":"显示给定模块的详细信息"},"iptstate":{"n":"iptstate","p":"/iptstate","d":"显示iptables的工作状态"},"groupadd":{"n":"groupadd","p":"/groupadd","d":"用于创建一个新的工作组"},"dpkg-deb":{"n":"dpkg-deb","p":"/dpkg-deb","d":"Debian Linux下的软件包管理工具"},"htdigest":{"n":"htdigest","p":"/htdigest","d":"Apache服务器内置工具"},"dos2unix":{"n":"dos2unix","p":"/dos2unix","d":"将DOS格式文本文件转换成Unix格式"},"vgremove":{"n":"vgremove","p":"/vgremove","d":"用于用户删除LVM卷组"},"rpm2cpio":{"n":"rpm2cpio","p":"/rpm2cpio","d":"将RPM软件包转换为cpio格式的文件"},"rpmbuild":{"n":"rpmbuild","p":"/rpmbuild","d":"创建RPM的二进制软件包和源码软件包"},"newusers":{"n":"newusers","p":"/newusers","d":"用于批处理的方式一次创建多个命令"},"rpmquery":{"n":"rpmquery","p":"/rpmquery","d":"从RPM数据库中查询软件包信息"},"cdrecord":{"n":"cdrecord","p":"/cdrecord","d":"Linux系统下光盘刻录功能命令"},"vgreduce":{"n":"vgreduce","p":"/vgreduce","d":"从卷组中删除物理卷"},"ifconfig":{"n":"ifconfig","p":"/ifconfig","d":"配置和显示Linux系统网卡的网络参数"},"protoize":{"n":"protoize","p":"/protoize","d":"GNU-C代码转换为ANSI-C代码"},"vgextend":{"n":"vgextend","p":"/vgextend","d":"向卷组中添加物理卷"},"runlevel":{"n":"runlevel","p":"/runlevel","d":"打印当前Linux系统的运行等级"},"mii-tool":{"n":"mii-tool","p":"/mii-tool","d":"配置网络设备协商方式的工具"},"updatedb":{"n":"updatedb","p":"/updatedb","d":"创建或更新slocate命令所必需的数据库文件"},"hostname":{"n":"hostname","p":"/hostname","d":"显示和设置系统的主机名"},"compress":{"n":"compress","p":"/compress","d":"使用Lempress-Ziv编码压缩数据文件"},"tempfile":{"n":"tempfile","p":"/tempfile","d":"shell中给临时文件命名"},"ldconfig":{"n":"ldconfig","p":"/ldconfig","d":"动态链接库管理命令"},"semanage":{"n":"semanage","p":"/semanage","d":"默认目录的安全上下文查询与修改"},"sendmail":{"n":"sendmail","p":"/sendmail","d":"著名电子邮件服务器"},"xlsatoms":{"n":"xlsatoms","p":"/xlsatoms","d":"列出X服务器内部所有定义的原子成分"},"logwatch":{"n":"logwatch","p":"/logwatch","d":"可定制和可插入式的日志监视系统"},"sesearch":{"n":"sesearch","p":"/sesearch","d":"查询SELinux策略的规则详情"},"lvremove":{"n":"lvremove","p":"/lvremove","d":"删除指定LVM逻辑卷"},"lvdisplay":{"n":"lvdisplay","p":"/lvdisplay","d":"显示逻辑卷属性"},"mysqldump":{"n":"mysqldump","p":"/mysqldump","d":"MySQL数据库中备份工具"},"systemctl":{"n":"systemctl","p":"/systemctl","d":"系统服务管理器指令"},"chkconfig":{"n":"chkconfig","p":"/chkconfig","d":"检查或设置系统的各种服务"},"mysqlshow":{"n":"mysqlshow","p":"/mysqlshow","d":"显示MySQL中数据库相关信息"},"ssh-agent":{"n":"ssh-agent","p":"/ssh-agent","d":"ssh密钥管理器"},"smbpasswd":{"n":"smbpasswd","p":"/smbpasswd","d":"samba用户和密码管理工具"},"logrotate":{"n":"logrotate","p":"/logrotate","d":"统日志进行轮转、压缩和删除"},"smbclient":{"n":"smbclient","p":"/smbclient","d":"交互方式访问samba服务器"},"showmount":{"n":"showmount","p":"/showmount","d":"显示NFS服务器加载的信息"},"clockdiff":{"n":"clockdiff","p":"/clockdiff","d":"检测两台linux主机的时间差"},"arptables":{"n":"arptables","p":"/arptables","d":"管理ARP包过滤规则表"},"setsebool":{"n":"setsebool","p":"/setsebool","d":"修改SElinux策略内各项规则的布尔值"},"ip6tables":{"n":"ip6tables","p":"/ip6tables","d":"linux中防火墙软件"},"rpmverify":{"n":"rpmverify","p":"/rpmverify","d":"验证已安装的RPM软件包的正确性"},"getsebool":{"n":"getsebool","p":"/getsebool","d":"查询SElinux策略内各项规则的布尔值"},"badblocks":{"n":"badblocks","p":"/badblocks","d":"查找磁盘中损坏的区块"},"partprobe":{"n":"partprobe","p":"/partprobe","d":"不重启的情况下重读分区"},"grpunconv":{"n":"grpunconv","p":"/grpunconv","d":"用来关闭群组的投影密码"},"pvdisplay":{"n":"pvdisplay","p":"/pvdisplay","d":"显示物理卷的属性"},"tracepath":{"n":"tracepath","p":"/tracepath","d":"追踪目的主机经过的路由信息"},"dircolors":{"n":"dircolors","p":"/dircolors","d":"置ls命令在显示目录或文件时所用的色彩"},"vgdisplay":{"n":"vgdisplay","p":"/vgdisplay","d":"显示LVM卷组的信息"},"dmidecode\r":{"n":"dmidecode\r","p":"/dmidecode","d":"在Linux系统下获取有关硬件方面的信息"},"apachectl":{"n":"apachectl","p":"/apachectl","d":"Apache服务器前端控制工具"},"tcpreplay":{"n":"tcpreplay","p":"/tcpreplay","d":"将PCAP包重新发送,用于性能或者功能测试"},"vgconvert":{"n":"vgconvert","p":"/vgconvert","d":"转换卷组元数据格式"},"domainname":{"n":"domainname","p":"/domainname","d":"显示和设置系统的NIS域名"},"dpkg-query":{"n":"dpkg-query","p":"/dpkg-query","d":"Debian Linux中软件包的查询工具"},"restorecon":{"n":"restorecon","p":"/restorecon","d":"恢复文件的安全上下文"},"xlsclients":{"n":"xlsclients","p":"/xlsclients","d":"列出显示器中的客户端应用程序"},"usernetctl":{"n":"usernetctl","p":"/usernetctl","d":"被允许时操作指定的网络接口"},"dpkg-split":{"n":"dpkg-split","p":"/dpkg-split","d":"Debian Linux中将大软件包分割成小包"},"cupsenable":{"n":"cupsenable","p":"/cupsenable","d":"启动指定的打印机"},"quotacheck":{"n":"quotacheck","p":"/quotacheck","d":"检查磁盘的使用空间与限制"},"get_module":{"n":"get_module","p":"/get_module","d":"获取Linux内核模块的详细信息"},"uncompress":{"n":"uncompress","p":"/uncompress","d":"用来解压.Z文件"},"ssh-keygen":{"n":"ssh-keygen","p":"/ssh-keygen","d":"为ssh生成、管理和转换认证密钥"},"traceroute\r":{"n":"traceroute\r","p":"/traceroute","d":"显示数据包到主机间的路径"},"mysqladmin":{"n":"mysqladmin","p":"/mysqladmin","d":"MySQL服务器管理客户端"},"mkbootdisk":{"n":"mkbootdisk","p":"/mkbootdisk","d":"可建立目前系统的启动盘"},"unprotoize":{"n":"unprotoize","p":"/unprotoize","d":"删除C语言源代码文件中的函数原型"},"ssh-copy-id":{"n":"ssh-copy-id","p":"/ssh-copy-id","d":"把本地的ssh公钥文件安装到远程主机对应的账户下"},"consoletype":{"n":"consoletype","p":"/consoletype","d":"输出已连接的终端类型"},"ssh-keyscan":{"n":"ssh-keyscan","p":"/ssh-keyscan","d":"收集主机公钥的使用工具"},"squidclient":{"n":"squidclient","p":"/squidclient","d":"squid服务器的客户端管理工具"},"mysqlimport":{"n":"mysqlimport","p":"/mysqlimport","d":"为MySQL服务器用命令行方式导入数据"},"cupsdisable":{"n":"cupsdisable","p":"/cupsdisable","d":"停止指定的打印机"},"inotifywait":{"n":"inotifywait","p":"/inotifywait","d":"异步文件系统监控机制"},"dpkg-divert":{"n":"dpkg-divert","p":"/dpkg-divert","d":"Debian Linux中创建并管理一个转向列表"},"sftp-server":{"n":"sftp-server","p":"/sftp-server","d":"sftp协议的服务器端程序"},"lsb_release":{"n":"lsb_release","p":"/lsb_release","d":"显示发行版本信息"},"firewall-cmd":{"n":"firewall-cmd","p":"/firewall-cmd","d":"Linux上新用的防火墙软件,跟iptables差不多的工具。"},"bzip2recover":{"n":"bzip2recover","p":"/bzip2recover","d":"恢复被破坏的.bz2压缩包中的文件"},"dpkg-trigger":{"n":"dpkg-trigger","p":"/dpkg-trigger","d":"Debian Linux下的软件包触发器"},"convertquota":{"n":"convertquota","p":"/convertquota","d":"把老的配额文件转换为新的格式"},"ypdomainname":{"n":"ypdomainname","p":"/ypdomainname","d":"显示主机的NIS的域名"},"apt-sortpkgs":{"n":"apt-sortpkgs","p":"/apt-sortpkgs","d":"Debian Linux下对软件包索引文件进行排序的工具"},"dnsdomainname":{"n":"dnsdomainname","p":"/dnsdomainname","d":"定义DNS系统中FQDN名称的域名"},"kernelversion":{"n":"kernelversion","p":"/kernelversion","d":"打印当前内核的主版本号"},"nisdomainname":{"n":"nisdomainname","p":"/nisdomainname","d":"显示主机NIS的域名"},"speedtest-cli":{"n":"speedtest-cli","p":"/speedtest-cli","d":"命令行下测试服务器外网速度"},"iptables-save":{"n":"iptables-save","p":"/iptables-save","d":"备份iptables的表配置"},"ip6tables-save":{"n":"ip6tables-save","p":"/ip6tables-save","d":"保存ip6tables表配置"},"dpkg-reconfigure":{"n":"dpkg-reconfigure","p":"/dpkg-reconfigure","d":"Debian Linux中重新配制一个已经安装的软件包"},"iptables-restore":{"n":"iptables-restore","p":"/iptables-restore","d":"还原iptables表的配置"},"dpkg-preconfigure":{"n":"dpkg-preconfigure","p":"/dpkg-preconfigure","d":"Debian Linux中软件包安装之前询问问题"},"dpkg-statoverride":{"n":"dpkg-statoverride","p":"/dpkg-statoverride","d":"Debian Linux中覆盖文件的所有权和模式"},"ip6tables-restore":{"n":"ip6tables-restore","p":"/ip6tables-restore","d":"还原ip6tables表"}} \ No newline at end of file From eba3c51406748a9b927ef89810de1726be6ec473 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Tue, 9 May 2017 10:02:45 +0800 Subject: [PATCH 0019/1284] Update qr.png --- qr.png | Bin 25296 -> 13484 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/qr.png b/qr.png index ed2d542fbd5c5a861933be0c0f7e72f8e3e985d4..7c4faa410de7caf615922ce816ddf39695597f2d 100644 GIT binary patch literal 13484 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 a68JwXG7yP)yQ2vJ0000Yhp(#-3KjcT8x6h0p}t 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 Date: Thu, 11 May 2017 13:04:39 +0800 Subject: [PATCH 0020/1284] =?UTF-8?q?=E6=B7=BB=E5=8A=A0ssh=20=E8=83=8C?= =?UTF-8?q?=E5=90=8E=E6=95=85=E4=BA=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- command/ssh.md | 106 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) diff --git a/command/ssh.md b/command/ssh.md index 5dd38eaeb16..0dc749ca5dd 100644 --- a/command/ssh.md +++ b/command/ssh.md @@ -50,4 +50,110 @@ ssh(选项)(参数) ssh user1@172.24.210.101 ``` +### 背后故事 + +> 英文:Tatu Ylonen +> 编译:Linux中国/kenxx +> 来源:https://linux.cn/article-8476-1.html + +为什么 SSH(安全终端)的端口号是 22 呢,这不是一个巧合,这其中有个我(Tatu Ylonen,SSH 协议的设计者)未曾诉说的故事。 + + +#### 将 SSH 协议端口号设为 22 的故事 + +1995 年春我编写了 SSH 协议的最初版本,那时候 telnet 和 FTP 正被广泛使用。 + +当时我设计 SSH 协议想着是为了替代 telnet(端口 23)和 ftp(端口21)两个协议的,而端口 22 是空闲的。我想当然地就选择了夹在 telnet 和 ftp 的端口中间的数字。我觉得端口号虽然是个小事但似乎又存在着某种信念。但我到底要怎么拿到那个端口号呢?我未曾拥有过任何一个端口号,但我却认识几个拥有端口号的人! + +在那时取得端口号的事情其实说来挺简单的。毕竟当时的因特网(Internet)并不是很大,是因特网爆炸的早期。端口号分配的活儿是 IANA(Internet Assigned Numbers Authority,互联网数字分配机构)干的。在那时这机构可相当于是因特网先驱 Jon Postel 和 Joyce K. Reynolds 一般的存在。Jon 参与编写了多项主要的协议标准,例如 IP(RFC 791)、ICMP(RFC 792)和 TCP(RFC 793)等一些你应该早有耳闻的协议。 + +我可以说是敬畏 Jon 先生的,他参与编写了几乎所有主要的因特网标准文档(Internet RFC)! + +1995 年 7 月,就在我发布 ssh-1.0 前,我发送了一封邮件给 IANA: + +> From ylo Mon Jul 10 11:45:48 +0300 1995 +> From: Tatu Ylonen +> To: Internet Assigned Numbers Authority +> Subject: 请求取得一个端口号 +> Organization: 芬兰赫尔辛基理工大学 +> +> 亲爱的机构成员: +> +> 我写了个可以在不安全的网络环境中安全地从一台机器登录到另一台机器的程序。它主要是对现有的 telnet 协议以及 rlogin 协议的功能性提升和安全性改进。说的具体些,就是可以防御 IP、DNS > 或路由等欺骗行为。我打算将我的软件免费地发布在因特网上,以得到广泛地使用。 +> +> 我希望为该软件注册一个特权端口号,要是这个端口号在 1 到 255 > 之间就更好了,这样它就可以用在名字服务器的 WKS 字段中了。 +> +> 我在附件中附上了协议标准的草案。这个软件已经在本地运行了几个月了,我已准备在获得端口号后就发布。如果端口号分配一事安排的及时,我希望这周就将要发布的软件准备好。我目前在 beta 版测试时使用的端口号是 > 22,如果要是能够分配到这个端口,我就不用做什么更改了(目前这个端口在列表中还是空闲的)。 +> +> 软件中服务的名称叫 ssh(系 Secure Shell 的缩写)。 +> +> 您最真诚的, +> Tatu Ylonen + +(LCTT 译注:DNS 协议中的 WKS 记录类型意即“众所周知的业务描述”,是类似于 A、MX 这样的 DNS 记录类型,用于描述某个 IP 所提供的服务,目前鲜见使用。参见: https://docs.oracle.com/cd/E19683-01/806-4077/dnsintro-154/index.html 。) + +第二天,我就收到了 Joyce 发来的邮件: + +> Date: Mon, 10 Jul 1995 15:35:33 -0700 +> From: jkrey@ISI.EDU +> To: ylo@cs.hut.fi +> Subject: 回复:请求取得一个端口号 +> Cc: iana@ISI.EDU +> Tatu, +> 我们将端口号 22 分配给 ssh 服务了,你目前是该服务的主要联系人。 +> Joyce + +这就搞定了!SSH 的端口正式使用 22!!! + +1995 年 7 月 12 日上午 2 点 21 分,我给我在赫尔辛基理工大学的测试者们宣布了 SSH 的最后 beta 版本。当日下午 5 点 23 分,我给测试者们宣布了 ssh-1.0.0 版本。1995 年 7 月 12 日,下午 5 点 51 分,我将一份 SSH(安全终端)的宣告发给了 cypherpunks@toad.com 的邮件列表,此外我还将其发给了一些新闻组、邮件列表和一些在因特网上讨论相关话题的人们。 + +#### 如何更改 SSH 服务的端口号 + +SSH 服务器是默认运行在 22 号端口上的。然而,由于某些原因需要,它也可以运行在别的端口上。比如为了方便测试使用,又比如在同一个宿主机上运行多个不同的配置。当然,极少情况下,不使用 root 权限运行它也可以,比如某些必须运行在非特权的端口的情况(端口号大于等于 1024)。 + +端口号可以在配置文件 /etc/ssh/sshd_config 中将 Port 22 更改。也可以使用 -p 选项运行 sshd。SSH 客户端和 sftp 程序也可以使用 -p 选项。 + +#### 配置 SSH 协议穿越防火墙 + +SSH 是少数通常被许可穿越防火墙的协议之一。通常的做法是不限制出站的 SSH 连接,尤其常见于一些较小的或者比较技术型的组织中,而入站的 SSH 连接通常会限制到一台或者是少数几台服务器上。 + +#### 出站的 SSH 连接 + +在防火墙中配置出站的 SSH 连接十分简单。如果完全限制了外发连接,那么只需要创建一个允许 TCP 端口 22 可以外发的规则即可。如果你想限制目标地址,你可以限制该规则仅允许访问你的组织放在云端的外部服务器或保护该云端的跳板服务器即可。 + +#### 反向通道是有风险的 + +其实不限制出站的 SSH 连接虽然是可以的,但是是存在风险的,SSH 协议是支持 通道访问 的。最初的想法是在外部服务器搭建一个 SSH 服务监听来自各处的连接,将进入的连接转发到组织,并让这个连接可以访问某个内部服务器。 + +在某些场景下这当然非常的方便。开发者和系统管理员经常使用它打开一个通道以便于他们可以远程访问,比如在家里或者在旅行中使用笔记本电脑等场景。 + +然而通常来讲这些做法是违背安全策略的,跳过了防火墙管理员和安全团队保护的控制无疑是违背安全策略的,比如这些: PCI、HIPAA、NIST SP 800-53 等。它可以被黑客和外国情报机构用来在组织内留下后门。 + +CryptoAuditor 是一款可以控制通道穿过防火墙或者一组云端服务器入口的产品。该款产品可以配合 通用 SSH 密钥管理器(Universal SSH Key Manager) 来获得对 主机密钥(host keys)的访问,以在启用防火墙并阻挡未授权转发的场景中解密 SSH 会话。 + +#### 入站的 SSH 访问 + +对于入站访问而言,这里有几点需要说一下: + +配置防火墙,并转发所有去往 22 端口的连接只能流向到一个特定的内部网络 IP 地址或者一个 DMZ 主机。在该 IP 上运行 CryptoAuditor 或者跳板机来控制和审查所有访问该组织的连接。 +在防火墙上使用不同的端口访问不同的服务器。 +只允许使用 IPsec 协议这样的 VPN(虚拟专用网)登录后连接 SSH 服务。 + +#### 通过 iptables 服务限制 SSH 访问 + +iptables 是一款内建在 Linux 内核的宿主防火墙。通常配置用于保护服务器以防止被访问那些未明确开启的端口。 + +如果服务器上启用了 iptables,使用下面的命令将可以允许进入的 SSH 访问,当然命令需要以 root 身份运行。 + +``` +iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT +iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT +``` + +如果你想将上述命令创建的规则持久地保存,在某些系统版本中,可使用如下命令: + +``` +service iptables save +``` + From 89409b80cef8196628403c47e038f7a0fe96c579 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Thu, 11 May 2017 14:58:53 +0800 Subject: [PATCH 0021/1284] update ssh.md --- command/ssh.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/command/ssh.md b/command/ssh.md index 0dc749ca5dd..7de73b7222f 100644 --- a/command/ssh.md +++ b/command/ssh.md @@ -65,7 +65,7 @@ ssh user1@172.24.210.101 当时我设计 SSH 协议想着是为了替代 telnet(端口 23)和 ftp(端口21)两个协议的,而端口 22 是空闲的。我想当然地就选择了夹在 telnet 和 ftp 的端口中间的数字。我觉得端口号虽然是个小事但似乎又存在着某种信念。但我到底要怎么拿到那个端口号呢?我未曾拥有过任何一个端口号,但我却认识几个拥有端口号的人! -在那时取得端口号的事情其实说来挺简单的。毕竟当时的因特网(Internet)并不是很大,是因特网爆炸的早期。端口号分配的活儿是 IANA(Internet Assigned Numbers Authority,互联网数字分配机构)干的。在那时这机构可相当于是因特网先驱 Jon Postel 和 Joyce K. Reynolds 一般的存在。Jon 参与编写了多项主要的协议标准,例如 IP(RFC 791)、ICMP(RFC 792)和 TCP(RFC 793)等一些你应该早有耳闻的协议。 +在那时取得端口号的事情其实说来挺简单的。毕竟当时的因特网(Internet)并不是很大,是因特网爆炸的早期。端口号分配的活儿是 IANA(Internet Assigned Numbers Authority,互联网数字分配机构)干的。在那时这机构可相当于是因特网先驱 [Jon Postel](https://en.wikipedia.org/wiki/Jon_Postel) 和 [Joyce K. Reynolds](https://en.wikipedia.org/wiki/Joyce_K._Reynolds) 一般的存在。Jon 参与编写了多项主要的协议标准,例如 IP(RFC 791)、ICMP(RFC 792)和 TCP(RFC 793)等一些你应该早有耳闻的协议。 我可以说是敬畏 Jon 先生的,他参与编写了几乎所有主要的因特网标准文档(Internet RFC)! From fd2805c09e3410ed2e04708a3a8bf485c8068256 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Thu, 11 May 2017 15:21:39 +0800 Subject: [PATCH 0022/1284] Create logger.md --- command/logger.md | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 command/logger.md diff --git a/command/logger.md b/command/logger.md new file mode 100644 index 00000000000..63ac132abe7 --- /dev/null +++ b/command/logger.md @@ -0,0 +1,42 @@ +logger +=== + +在系统日志中记录相应条目 + +## 补充说明 + +**logger命令** 是用于往系统中写入日志,他提供一个shell命令接口到syslog系统模块 + +### 语法 + +``` +logger [options] [message] +``` + +### 选项 + +``` + -T, --tcp 使用流连接(TCP) + -d, --udp 使用数据报(UDP) + -i, --id 逐行记录每一次logger的进程ID + -f, --file 记录特定的文件 + -h, --help 显示帮助文本并退出 + -n, --server 写入指定的远程syslog服务器,使用UDP代替内装式syslog的例程 + -P, --port 使用指定的UDP端口。默认的端口号是514 + -p, --priority 指定输入消息的优先级,优先级可以是数字或者指定为 " facility.level" 的格式。 + 比如:" -p local3.info " local3 这个设备的消息级别为 info。 + 默认级别是 "user.notice" + -s, --stderr 输出标准错误到系统日志。 + -t, --tag 指定标记记录 + -u, --socket 写入指定的socket,而不是到内置系统日志例程。 + -V, --version 输出版本信息并退出 +``` + +### 例子 + +``` +logger -p syslog.info "backup.sh is starting" +``` + + + From 6d5e153df41efe95f6c2b75acff3461ed5239773 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Thu, 11 May 2017 15:32:50 +0800 Subject: [PATCH 0023/1284] Create lscpu.md --- command/lscpu.md | 75 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 command/lscpu.md diff --git a/command/lscpu.md b/command/lscpu.md new file mode 100644 index 00000000000..00fbf720b74 --- /dev/null +++ b/command/lscpu.md @@ -0,0 +1,75 @@ +lscpu +=== + +显示有关CPU架构的信息 + +## 补充说明 + +**lscpu命令** 是显示有关CPU架构的信息。 + +### 语法 + +``` +lscpu [选项] +``` + +### 选项 + +``` + -a, --all 打印在线和离线CPU(默认为-e) + -b, --online 仅打印在线CPU(-p的默认值) + -c, --offline 打印离线CPU + -e, --extended[=] 打印出一个扩展的可读格式 + -p, --parse[=] 打印出可解析的格式 + -s, --sysroot 将指定的目录用作系统根目录 + -x, --hex 打印十六进制掩码,而不是CPU列表 + + -h, --help 显示此帮助并退出 + -V, --version 输出版本信息并退出 +``` + +### 参数 + +```bash +可用列: + CPU 逻辑CPU编号 + CORE 逻辑核心号码 + SOCKET 逻辑套接字号 + NODE 逻辑NUMA节点号 + BOOK 逻辑书号 + CACHE 显示了如何在CPU之间共享高速缓存 + POLARIZATION 虚拟硬件上的CPU调度模式 + ADDRESS CPU的物理地址 + CONFIGURED 显示管理程序是否分配了CPU + ONLINE 显示Linux是否正在使用CPU +``` + +### 例子 + +```bash +[root@localhost ~]# lscpu +Architecture: x86_64 +CPU op-mode(s): 32-bit, 64-bit +Byte Order: Little Endian +CPU(s): 4 +On-line CPU(s) list: 0-3 +Thread(s) per core: 1 +Core(s) per socket: 4 +Socket(s): 1 +NUMA node(s): 1 +Vendor ID: GenuineIntel +CPU family: 6 +Model: 30 +Model name: Intel(R) Xeon(R) CPU X3430 @ 2.40GHz +Stepping: 5 +CPU MHz: 2394.055 +BogoMIPS: 4788.11 +Virtualization: VT-x +L1d cache: 32K +L1i cache: 32K +L2 cache: 256K +L3 cache: 8192K +NUMA node0 CPU(s): 0-3 +``` + + From 3fa1ae544010bac7803ec42c59019258cfe8e5e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 12 May 2017 00:38:06 +0800 Subject: [PATCH 0024/1284] Update chgrp.md --- command/chgrp.md | 95 ++++++++++++++++++++++++++---------------------- 1 file changed, 52 insertions(+), 43 deletions(-) diff --git a/command/chgrp.md b/command/chgrp.md index 10f26282146..b5919fc109b 100644 --- a/command/chgrp.md +++ b/command/chgrp.md @@ -1,43 +1,52 @@ -chgrp -=== - -用来变更文件或目录的所属群组 - -## 补充说明 - -**chgrp命令** 用来改变文件或目录所属的用户组。该命令用来改变指定文件所属的用户组。其中,组名可以是用户组的id,也可以是用户组的组名。文件名可以 是由空格分开的要改变属组的文件列表,也可以是由通配符描述的文件集合。如果用户不是该文件的文件主或超级用户(root),则不能改变该文件的组。 - -在UNIX系统家族里,文件或目录权限的掌控以拥有者及所属群组来管理。您可以使用chgrp指令去变更文件与目录的所属群组,设置方式采用群组名称或群组识别码皆可。 - -### 语法 - -``` -chgrp(选项)(参数) -``` - -### 选项 - -``` --c或——changes:效果类似“-v”参数,但仅回报更改的部分; --f或--quiet或——silent:不显示错误信息; --h或--no-dereference:只对符号连接的文件作修改,而不是该其他任何相关文件; --R或——recursive:递归处理,将指令目录下的所有文件及子目录一并处理; --v或——verbose:显示指令执行过程; ---reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同; -``` - -### 参数 - -* 组:指定新工作名称; -* 文件:指定要改变所属组的文件列表。多个文件或者目录之间使用空格隔开。 - -### 实例 - -将`/usr/meng`及其子目录下的所有文件的用户组改为mengxin - -``` -chgrp -R mengxin /usr/meng -``` - - - \ No newline at end of file +chgrp +=== + +用来变更文件或目录的所属群组 + +## 补充说明 + +**chgrp命令** 用来改变文件或目录所属的用户组。该命令用来改变指定文件所属的用户组。其中,组名可以是用户组的id,也可以是用户组的组名。文件名可以 是由空格分开的要改变属组的文件列表,也可以是由通配符描述的文件集合。如果用户不是该文件的文件主或超级用户(root),则不能改变该文件的组。 + +在UNIX系统家族里,文件或目录权限的掌控以拥有者及所属群组来管理。您可以使用chgrp指令去变更文件与目录的所属群组,设置方式采用群组名称或群组识别码皆可。 + +### 语法 + +``` +chgrp [选项][组群][文件|目录] +``` + +### 选项 + +``` +-R 递归式地改变指定目录及其下的所有子目录和文件的所属的组 +-c或——changes:效果类似“-v”参数,但仅回报更改的部分; +-f或--quiet或——silent:不显示错误信息; +-h或--no-dereference:只对符号连接的文件作修改,而不是该其他任何相关文件; +-H如果命令行参数是一个通到目录的符号链接,则遍历符号链接 +-R或——recursive:递归处理,将指令目录下的所有文件及子目录一并处理; +-L遍历每一个遇到的通到目录的符号链接 +-P不遍历任何符号链接(默认) +-v或——verbose:显示指令执行过程; +--reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同; +``` + +### 参数 + +* 组:指定新工作名称; +* 文件:指定要改变所属组的文件列表。多个文件或者目录之间使用空格隔开。 + +### 实例 + +将`/usr/meng`及其子目录下的所有文件的用户组改为mengxin + +``` +chgrp -R mengxin /usr/meng +``` + +更改文件ah的组群所有者为newuser +``` +[root@rhel ~]# chgrp newuser ah +``` + + + From 6cd1b6ffb7f6cc47c96b11c18cdf7d3362bec19d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 12 May 2017 00:43:47 +0800 Subject: [PATCH 0025/1284] Create vgrename.md --- command/vgrename.md | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 command/vgrename.md diff --git a/command/vgrename.md b/command/vgrename.md new file mode 100644 index 00000000000..456d9edb679 --- /dev/null +++ b/command/vgrename.md @@ -0,0 +1,39 @@ +vgrename +=== + +使用vgrename命令可以重命名卷组的名称。 + +## 补充说明 + +**grename命令** 可以重命名卷组的名称。 + +### 语法 + +``` +vgrename [选项] [旧卷组路径|旧卷组名称|旧卷组UUID] [新卷组路径|新卷组名称] +``` + +### 选项 + +``` +-d 启用调试模式 +-t 启用测试模式 +``` + +### 例子 + +重命名卷组/dev/vg1为/dev/vg2。 + +```bash +[root@localhost ~]# vgrename /dev/vg1 /dev/vg2 + Volume group "vg1" successfullyrenamed to "vg2" +``` + +重命名卷组vg1为vg2。 + +```bash +[root@localhost ~]# vgrename vg1 vg2 + Volume group "vg1" successfully renamed to "vg2" +``` + + From 7b0244196756f6f6197851e6e7d642aa7c11ed7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 12 May 2017 00:48:16 +0800 Subject: [PATCH 0026/1284] Create named-checkzone.md --- command/named-checkzone.md | 43 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 command/named-checkzone.md diff --git a/command/named-checkzone.md b/command/named-checkzone.md new file mode 100644 index 00000000000..da7fbaed85d --- /dev/null +++ b/command/named-checkzone.md @@ -0,0 +1,43 @@ +named-checkzone +=== + +使用named-checkzone命令可以进行区域文件有效性检查和转换,必须指定区域名称和区域文件名称。 + +## 补充说明 + +**named-checkzone命令** 可以进行区域文件有效性检查和转换,必须指定区域名称和区域文件名称。 + +### 语法 + +``` +named-checkzone [选项] [区域名] [区域文件名] +``` + +### 选项 + +``` +-q 安静模式 +-d 启用调试 +-c <类别> 指定区域的类别。如果没指定就使用IN +``` + +### 例子 + +对区域文件/var/named/192.168.0.rev进行有效性检查和转换。 + +```bash +[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 +``` + +对区域文件/var/named/sh.com.hosts进行有效性检查和转换。 + +```bash +[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 +``` + + From f1d4dbd737048acd63c53ef49c6cc00736a6caab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 12 May 2017 00:54:35 +0800 Subject: [PATCH 0027/1284] Create source.md --- command/source.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 command/source.md diff --git a/command/source.md b/command/source.md new file mode 100644 index 00000000000..6139ef2b4c0 --- /dev/null +++ b/command/source.md @@ -0,0 +1,24 @@ +source +=== + +在当前Shell环境中从指定文件读取和执行命令,命令返回退出状态。 + +## 补充说明 + +**source命令** 在当前Shell环境中从指定文件读取和执行命令,命令返回退出状态。 + +### 语法 + +``` +source [文件名] [参数] +``` + +### 例子 + +读取和执行/root/.bash_profile文件。 + +```bash +[root@localhost ~]# source ~/.bash_profile +``` + + From 3c418e880c7538a5e5fb5eb1d27252c1c780e794 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 12 May 2017 00:57:31 +0800 Subject: [PATCH 0028/1284] Create dhcpd.md --- command/dhcpd.md | 57 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 command/dhcpd.md diff --git a/command/dhcpd.md b/command/dhcpd.md new file mode 100644 index 00000000000..ab261c1a980 --- /dev/null +++ b/command/dhcpd.md @@ -0,0 +1,57 @@ +dhcpd +=== + +运行DHCP服务器。 + +### 语法 + +``` +dhcpd [选项] [网络接口] +``` + +### 选项 + +``` +-p <端口> 指定dhcpd监听的端口 +-f 作为前台进程运行dhcpd +-d 启用调试模式 +-q 在启动时不显示版权信息 +-t 简单地测试配置文件的语法是否正确的,但不会尝试执行任何网络操作 +-T 可以用来测试租约数据库文件 +-4 运行DHCP服务器 +-6 运行DHCPv6服务器 +-s <服务器> 指定发送回复的服务器 +-cf <配置文件> 指定配置文件 +-lf <租约文件> 指定租约文件 +-pf 指定PID文件 +-tf <跟踪输出文件> 指定文件记录DHCP服务器的整个启动状态 +``` + +### 例子 + +对DHCP服务器进行排错。 + +```bash +[root@localhost ~]# dhcpd +InternetSystems Consortium DHCP Server 4.1.1-P1 +Copyright2004-2010 Internet Systems Consortium. +All rightsreserved. +For info,please visit https://www.isc.org/software/dhcp/ +Not searchingLDAP since ldap-server, ldap-port and ldap-base-dn were not specified in theconfig file +Wrote 0deleted host decls to leases file. +Wrote 0 newdynamic host decls to leases file. +Wrote 1leases to leases file. +Listening onLPF/eth0/00:0c:29:fc:2f:e5/192.168.0.0/24 +Sendingon LPF/eth0/00:0c:29:fc:2f:e5/192.168.0.0/24 +Sendingon Socket/fallback/fallback-net +[root@rhel~]# There's already a DHCP server running. + +This versionof ISC DHCP is based on the release available +onftp.isc.org. Features have been addedand other changes +have beenmade to the base software release in order to make +it workbetter with this distribution. + +exiting. +``` + + From 7764d9d3165ac68ac921524d7be3dc36bcf3d6fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 12 May 2017 01:04:37 +0800 Subject: [PATCH 0029/1284] Update date.md --- command/date.md | 306 ++++++++++++++++++++++++------------------------ 1 file changed, 156 insertions(+), 150 deletions(-) diff --git a/command/date.md b/command/date.md index ba544903964..ba438429f92 100644 --- a/command/date.md +++ b/command/date.md @@ -1,150 +1,156 @@ -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 显示出AM或PM -%r 显示时间,12小时制(hh:mm:ss %p) -%s 从1970年1月1日00:00:00到目前经历的秒数 -%S 显示秒(00~59) -%T 显示时间,24小时制(hh:mm:ss) -%X 显示时间的格式(%H:%M:%S) -%Z 显示时区,日期域(CST) -%a 星期的简称(Sun~Sat) -%A 星期的全称(Sunday~Saturday) -%h,%b 月的简称(Jan~Dec) -%B 月的全称(January~December) -%c 日期和时间(Tue Nov 20 14:12:58 2012) -%d 一个月的第几天(01~31) -%x,%D 日期(mm/dd/yy) -%j 一年的第几天(001~366) -%m 月份(01~12) -%w 一个星期的第几天(0代表星期天) -%W 一年的第几个星期(00~53,星期一为第一天) -%y 年的最后两个数字(1999则是99) -``` - -### 实例 - -格式化输出: - -``` -date +"%Y-%m-%d" -2009-12-07 -``` - -输出昨天日期: - -``` -date -d "1 day ago" +"%Y-%m-%d" -2012-11-19 -``` - -2秒后输出: - -``` -date -d "2 second" +"%Y-%m-%d %H:%M.%S" -2012-11-20 14:21.31 -``` - -传说中的 1234567890 秒: - -``` -date -d "1970-01-01 1234567890 seconds" +"%Y-%m-%d %H:%m:%S" -2009-02-13 23:02:30 -``` - -普通转格式: - -``` -date -d "2009-12-12" +"%Y/%m/%d %H:%M.%S" -2009/12/12 00:00.00 -``` - -apache格式转换: - -``` -date -d "Dec 5, 2009 12:00:37 AM" +"%Y-%m-%d %H:%M.%S" -2009-12-05 00:00.37 -``` - -格式转换后时间游走: - -``` -date -d "Dec 5, 2009 12:00:37 AM 2 year ago" +"%Y-%m-%d %H:%M.%S" -2007-12-05 00:00.37 -``` - -加减操作: - -``` -date +%Y%m%d //显示前天年月日 -date -d "+1 day" +%Y%m%d //显示前一天的日期 -date -d "-1 day" +%Y%m%d //显示后一天的日期 -date -d "-1 month" +%Y%m%d //显示上一月的日期 -date -d "+1 month" +%Y%m%d //显示下一月的日期 -date -d "-1 year" +%Y%m%d //显示前一年的日期 -date -d "+1 year" +%Y%m%d //显示下一年的日期 -``` - -设定时间: - -``` -date -s //设置当前时间,只有root权限才能设置,其他只能查看 -date -s 20120523 //设置成20120523,这样会把具体时间设置成空00:00:00 -date -s 01:01:01 //设置具体时间,不会对日期做更改 -date -s "01:01:01 2012-05-23" //这样可以设置全部时间 -date -s "01:01:01 20120523" //这样可以设置全部时间 -date -s "2012-05-23 01:01:01" //这样可以设置全部时间 -date -s "20120523 01:01:01" //这样可以设置全部时间 -``` - -有时需要检查一组命令花费的时间,举例: - -``` -#!/bin/bash - -start=$(date +%s) -nmap man.linuxde.net &> /dev/null - -end=$(date +%s) -difference=$(( end - start )) -echo $difference seconds. -``` - - - \ No newline at end of file +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 +``` + +### 实例 + +格式化输出: + +``` +date +"%Y-%m-%d" +2009-12-07 +``` + +输出昨天日期: + +``` +date -d "1 day ago" +"%Y-%m-%d" +2012-11-19 +``` + +2秒后输出: + +``` +date -d "2 second" +"%Y-%m-%d %H:%M.%S" +2012-11-20 14:21.31 +``` + +传说中的 1234567890 秒: + +``` +date -d "1970-01-01 1234567890 seconds" +"%Y-%m-%d %H:%m:%S" +2009-02-13 23:02:30 +``` + +普通转格式: + +``` +date -d "2009-12-12" +"%Y/%m/%d %H:%M.%S" +2009/12/12 00:00.00 +``` + +apache格式转换: + +``` +date -d "Dec 5, 2009 12:00:37 AM" +"%Y-%m-%d %H:%M.%S" +2009-12-05 00:00.37 +``` + +格式转换后时间游走: + +``` +date -d "Dec 5, 2009 12:00:37 AM 2 year ago" +"%Y-%m-%d %H:%M.%S" +2007-12-05 00:00.37 +``` + +加减操作: + +``` +date +%Y%m%d //显示前天年月日 +date -d "+1 day" +%Y%m%d //显示前一天的日期 +date -d "-1 day" +%Y%m%d //显示后一天的日期 +date -d "-1 month" +%Y%m%d //显示上一月的日期 +date -d "+1 month" +%Y%m%d //显示下一月的日期 +date -d "-1 year" +%Y%m%d //显示前一年的日期 +date -d "+1 year" +%Y%m%d //显示下一年的日期 +``` + +设定时间: + +``` +date -s //设置当前时间,只有root权限才能设置,其他只能查看 +date -s 20120523 //设置成20120523,这样会把具体时间设置成空00:00:00 +date -s 01:01:01 //设置具体时间,不会对日期做更改 +date -s "01:01:01 2012-05-23" //这样可以设置全部时间 +date -s "01:01:01 20120523" //这样可以设置全部时间 +date -s "2012-05-23 01:01:01" //这样可以设置全部时间 +date -s "20120523 01:01:01" //这样可以设置全部时间 +``` + +有时需要检查一组命令花费的时间,举例: + +``` +#!/bin/bash + +start=$(date +%s) +nmap man.linuxde.net &> /dev/null + +end=$(date +%s) +difference=$(( end - start )) +echo $difference seconds. +``` + + + From a11d04cd1589f23886f22d8308660e54413f57c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 12 May 2017 01:10:52 +0800 Subject: [PATCH 0030/1284] Create dhcrelay.md --- command/dhcrelay.md | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 command/dhcrelay.md diff --git a/command/dhcrelay.md b/command/dhcrelay.md new file mode 100644 index 00000000000..88cc3cc7287 --- /dev/null +++ b/command/dhcrelay.md @@ -0,0 +1,45 @@ +dhcrelay +=== + +使用dhcrelay命令可以提供中继DHCP和BOOTP请求 + +## 补充说明 + +**dhcrelay命令** 使用dhcrelay命令可以提供中继DHCP和BOOTP请求,从一个没有DHCP服务器的子网直接连接到其它子网内的一个或多个DHCP服务器。该命令在DHCP中继服务器上使用,同时支持DHCPv4/BOOTP和DHCPv6协议。 + +### 语法 + +``` +dhcrelay [选项] [DHCP服务器] +``` + +### 选项 + +``` +-c <跳数> 当转发数据包时,dhcrelay丢弃已经达到一个最大跳数的数据包。默认值是10,最大值是255 +-4 运行dhcrelay命令作为DHCPv4/BOOTP中继代理。这是默认操作模式 +-6 运行dhcrelay命令作为DHCPv6中继代理 +-q 安静模式 +-p <端口> 监听和发送端口。DHCPv4/BOOTP默认端口是67,DHCPv6默认端口是547 +-A <长度> 指定发送到DHCP服务器的最大数据包大小 +-d 强制dhcrelay命令作为前台进程运行 +``` + +### 例子 + +指定DHCP服务器的位置。 + +```bash +[root@localhost ~]# dhcrelay 192.168.0.2 +Internet Systems Consortium DHCP Relay Agent4.1.1-P1 +Copyright 2004-2010 Internet SystemsConsortium. +All rights reserved. +For info, please visithttps://www.isc.org/software/dhcp/ +Listening on LPF/eth1/00:0c:29:fc:2f:ef +Sending on LPF/eth1/00:0c:29:fc:2f:ef +Listening on LPF/eth0/00:0c:27:fc:25:ec +Sending on LPF/eth0/00:0c:27:fc:25:ec +Sending on Socket/fallback +``` + + From 4aefdf74ca52094f8646391e1fe8121f0c26c728 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 12 May 2017 01:13:42 +0800 Subject: [PATCH 0031/1284] Create tty.md --- command/tty.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 command/tty.md diff --git a/command/tty.md b/command/tty.md new file mode 100644 index 00000000000..dd4410b26f3 --- /dev/null +++ b/command/tty.md @@ -0,0 +1,32 @@ +tty +=== + +显示连接到当前标准输入的终端设备文件名。 + +## 补充说明 + +**grename命令** 可以重命名卷组的名称。 + +### 语法 + +``` +vgrename [选项] [旧卷组路径|旧卷组名称|旧卷组UUID] [新卷组路径|新卷组名称] +``` + +### 选项 + +``` +-s 什么也不显示,只返回退出状态值 +``` + +### 例子 + +显示连接到当前标准输入的终端设备文件名。 + +```bash +[root@localhost ~]# tty +/dev/pts/0 +``` + + + From bdc1e840dd4b6fd92af7f7c8496677abf4aaa871 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 12 May 2017 01:16:49 +0800 Subject: [PATCH 0032/1284] Create poweroff.md --- command/poweroff.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 command/poweroff.md diff --git a/command/poweroff.md b/command/poweroff.md new file mode 100644 index 00000000000..b96eb1d5d16 --- /dev/null +++ b/command/poweroff.md @@ -0,0 +1,35 @@ +poweroff +=== + +关闭Linux系统,关闭记录会被写入到/var/log/wtmp日志文件中。 + +## 补充说明 + +**grename命令** 可以重命名卷组的名称。 + +### 语法 + +``` +poweroff [选项] +``` + +### 选项 + +``` +-n 关闭之前不同步 +-p 当被称为halt时关闭电源 +-v 增加输出,包括消息 +-q 降低输出错误唯一的消息 +-w 并不实际关闭系统,只是写入/var/log/wtmp文件中 +-f 强制关机,不调用shutdown +``` + +### 例子 + +关闭Linux系统。 + +```bash +[root@localhost ~]# poweroff +``` + + From a025906623b9db212c733f6a5fbf7167cf4ecf1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 12 May 2017 01:18:06 +0800 Subject: [PATCH 0033/1284] Update tty.md --- command/tty.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/command/tty.md b/command/tty.md index dd4410b26f3..1bf00f57881 100644 --- a/command/tty.md +++ b/command/tty.md @@ -5,12 +5,12 @@ tty ## 补充说明 -**grename命令** 可以重命名卷组的名称。 +**tty命令** 可以显示连接到当前标准输入的终端设备文件名。 ### 语法 ``` -vgrename [选项] [旧卷组路径|旧卷组名称|旧卷组UUID] [新卷组路径|新卷组名称] +tty [选项] ``` ### 选项 From b610bdb4ab1468ec8d870658f76c1b8c96056b4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 12 May 2017 01:24:49 +0800 Subject: [PATCH 0034/1284] Create getenforce.md --- command/getenforce.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 command/getenforce.md diff --git a/command/getenforce.md b/command/getenforce.md new file mode 100644 index 00000000000..17a76a1531c --- /dev/null +++ b/command/getenforce.md @@ -0,0 +1,25 @@ +getenforce +=== + +显示当前SELinux的应用模式,是强制、执行还是停用。 + +## 补充说明 + +**grename命令** 可以重命名卷组的名称。 + +### 语法 + +``` +getenforce +``` + +### 例子 + +查看当前SELinux的应用模式。 + +```bash +[root@localhost ~]# getenforce +Enforcing +``` + + From 967c7fb685d311122abcba590445019069d9741b Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Sat, 27 May 2017 10:29:23 +0800 Subject: [PATCH 0035/1284] Add Linux command list total page. --- build/compile.js | 12 ++++++++++-- template/header.ejs | 2 +- template/hot.ejs | 13 +++++++++++++ template/search.ejs | 2 +- template/styl/index.styl | 24 ++++++++++++++++++++++++ 5 files changed, 49 insertions(+), 4 deletions(-) create mode 100644 template/hot.ejs diff --git a/build/compile.js b/build/compile.js index fbcffe38ca4..055594ad8dd 100644 --- a/build/compile.js +++ b/build/compile.js @@ -97,12 +97,19 @@ CreateDatajs('./.deploy/js/dt.js',function(dt_path,arr){ n:'搜索', d:'最专业的Linux命令大全,内容包含Linux命令手册、详解、学习,值得收藏的Linux命令速查手册。' }); + + ReadTmpToHTML('/template/hot.ejs','/.deploy/hot.html',null,{ + p:'/hot.html', + n:'搜索', + d:'最专业的Linux命令大全,内容包含Linux命令手册、详解、学习,值得收藏的Linux命令速查手册。', + arr:arr + }); // 文章批量生成 arr.forEach(function(itm,idx){ var ejstpm = path.join('/template/',itm.p); var md_path = path.join('/command',itm.p); var dep = path.join('/.deploy/c',itm.p); - ReadTmpToHTML('/template/details.ejs', dep+'.html' ,md_path+'.md', itm) + ReadTmpToHTML('/template/details.ejs', dep+'.html' ,md_path+'.md', itm ,arr) }); console.log(success(" → "),arr.length) @@ -164,8 +171,9 @@ function CreateJS(from_path,to_path){ * @param {[type]} to_path [生成到指定的位置] * @param {[type]} md_path [Markdown的路径] // 给md地址就生产详情页面 * @param {[type]} des_json [页面信息 json 格式] + * @param {[type]} arr [] */ -function ReadTmpToHTML(from_path,to_path,md_path,des_json){ +function ReadTmpToHTML(from_path,to_path,md_path,des_json, total_pages){ var tmp_path = path.join(path.dirname(__dirname),from_path); if(!exists(tmp_path)) return console.log("\n → error: 模板文件 "+tmp_path+" 不存在") var tmp_str = fs.readFileSync(tmp_path); diff --git a/template/header.ejs b/template/header.ejs index 75b4573357f..5bc8eb40154 100644 --- a/template/header.ejs +++ b/template/header.ejs @@ -7,7 +7,7 @@ - <%=describe.n?describe.n+' - ':''%>Linux Command + <%=describe.n?describe.n+' - ':''%>Linux 命令<%=describe.n?describe.n+' - ':''%> diff --git a/template/hot.ejs b/template/hot.ejs new file mode 100644 index 00000000000..26d55cdda3d --- /dev/null +++ b/template/hot.ejs @@ -0,0 +1,13 @@ + +<%- include('header',{src:""}); %> +<%- include('search',{type: "list"}); %> + + + +<%- include('footer'); %> \ No newline at end of file diff --git a/template/search.ejs b/template/search.ejs index 55ec8b01e58..5f8229a7349 100644 --- a/template/search.ejs +++ b/template/search.ejs @@ -17,6 +17,6 @@ \ No newline at end of file diff --git a/template/styl/index.styl b/template/styl/index.styl index 9b4b5902a88..6f4b9d8570d 100644 --- a/template/styl/index.styl +++ b/template/styl/index.styl @@ -26,6 +26,9 @@ a.github-corner { height 70px } } +a{ + transition: all .2s ease-in +} @keyframes octocat-wave{ 0%,100%{-webkit-transform:rotate(0);transform:rotate(0)} @@ -241,6 +244,27 @@ a.github-corner { } +.hotlist{ + padding 79px 27px + a{ + font-size 16px + strong{ + font-weight bold + } + &:hover{ + } + } + li{ + padding 5px 0 5px 0 + list-style-type none + p{ + padding-top 5px + color #4F4F4F + } + } + +} + @media mq-mobile{ .header{ From 12da688584c6806d26ac25b18ea79787843f2940 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Sat, 3 Jun 2017 10:04:18 +0800 Subject: [PATCH 0036/1284] =?UTF-8?q?=E6=90=9C=E7=B4=A2html=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/compile.js | 6 +++--- template/header.ejs | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/build/compile.js b/build/compile.js index 055594ad8dd..9728d471994 100644 --- a/build/compile.js +++ b/build/compile.js @@ -88,20 +88,20 @@ CreateDatajs('./.deploy/js/dt.js',function(dt_path,arr){ // 首页生成 ReadTmpToHTML('/template/index.ejs','/.deploy/index.html',null,{ 'p':'/index.html', - 'n':'Linux命令搜索', + 'n':'Linux命令搜索引擎', 'd':'最专业的Linux命令大全,内容包含Linux命令手册、详解、学习,值得收藏的Linux命令速查手册。', 'command_length':arr.length }); ReadTmpToHTML('/template/list.ejs','/.deploy/list.html',null,{ p:'/list.html', n:'搜索', - d:'最专业的Linux命令大全,内容包含Linux命令手册、详解、学习,值得收藏的Linux命令速查手册。' + d:'最专业的Linux命令大全,命令搜索引擎,内容包含Linux命令手册、详解、学习,值得收藏的Linux命令速查手册。' }); ReadTmpToHTML('/template/hot.ejs','/.deploy/hot.html',null,{ p:'/hot.html', n:'搜索', - d:'最专业的Linux命令大全,内容包含Linux命令手册、详解、学习,值得收藏的Linux命令速查手册。', + d:'最专业的Linux命令大全,命令搜索引擎,内容包含Linux命令手册、详解、学习,值得收藏的Linux命令速查手册。', arr:arr }); // 文章批量生成 diff --git a/template/header.ejs b/template/header.ejs index 5bc8eb40154..5a9be6cdfd2 100644 --- a/template/header.ejs +++ b/template/header.ejs @@ -6,8 +6,8 @@ - - <%=describe.n?describe.n+' - ':''%>Linux 命令<%=describe.n?describe.n+' - ':''%> + + <%=describe.n?describe.n+'':''%> <%=describe.d?describe.d+' - ':''%> Linux 命令搜索引擎 From c5c31935ef999f28af834e5e4ef6f502b40e28ce Mon Sep 17 00:00:00 2001 From: Icarus Date: Mon, 5 Jun 2017 19:29:42 +0800 Subject: [PATCH 0037/1284] Update awk.md --- command/awk.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/command/awk.md b/command/awk.md index 38722b6cb8b..d480d6403c1 100644 --- a/command/awk.md +++ b/command/awk.md @@ -132,7 +132,7 @@ v1=v2=v3 **示例** ``` -echo -e "line1 f2 f3nline2 f4 f5nline3 f6 f7" | awk '{print "Line No:"NR", No of fields:"NF, "$0="$0, "$1="$1, "$2="$2, "$3="$3}' +echo -e "line1 f2 f3\nline2 f4 f5\nline3 f6 f7" | awk '{print "Line No:"NR", No of fields:"NF, "$0="$0, "$1="$1, "$2="$2, "$3="$3}' Line No:1, No of fields:3 $0=line1 f2 f3 $1=line1 $2=f2 $3=f3 Line No:2, No of fields:3 $0=line2 f4 f5 $1=line2 $2=f4 $3=f5 Line No:3, No of fields:3 $0=line3 f6 f7 $1=line3 $2=f6 $3=f7 From 16140f053a4ef4ca1d02434f22c0bd1ebfa114bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=8B=E5=B0=8F=E5=8C=97?= Date: Mon, 10 Jul 2017 15:41:59 +0800 Subject: [PATCH 0038/1284] =?UTF-8?q?=E9=94=99=E8=AF=AF=E6=96=87=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- command/grep.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/command/grep.md b/command/grep.md index ba7102366e3..6dbdcb912db 100644 --- a/command/grep.md +++ b/command/grep.md @@ -24,7 +24,7 @@ grep -G --basic-regexp # 将范本样式视为普通的表示法来使用。 -h --no-filename # 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。 -H --with-filename # 在显示符合范本样式的那一列之前,标示该列的文件名称。 --i --ignore-case # 胡列字符大小写的差别。 +-i --ignore-case # 忽略字符大小写的差别。 -l --file-with-matches # 列出文件内容符合指定的范本样式的文件名称。 -L --files-without-match # 列出文件内容不符合指定的范本样式的文件名称。 -n --line-number # 在显示符合范本样式的那一列之前,标示出该列的编号。 From ed5e3578f2ef14e1e19ea16854b80258b4524e0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Mon, 10 Jul 2017 17:58:57 +0800 Subject: [PATCH 0039/1284] Update fdisk.md --- command/fdisk.md | 639 ++++++++++++++++++++++++----------------------- 1 file changed, 321 insertions(+), 318 deletions(-) diff --git a/command/fdisk.md b/command/fdisk.md index bfb6e6d896a..2bcefba9882 100644 --- a/command/fdisk.md +++ b/command/fdisk.md @@ -1,318 +1,321 @@ -fdisk -=== - -查看磁盘使用情况和磁盘分区 - -## 补充说明 - -**fdisk命令** 用于观察硬盘实体使用情况,也可对硬盘分区。它采用传统的问答式界面,而非类似DOS fdisk的cfdisk互动式操作界面,因此在使用上较为不便,但功能却丝毫不打折扣。 - -### 语法 - -``` -fdisk(选项)(参数) -``` - -### 选项 - -``` --b<分区大小>:指定每个分区的大小; --l:列出指定的外围设备的分区表状况; --s<分区编号>:将指定的分区大小输出到标准输出上,单位为区块; --u:搭配"-l"参数列表,会用分区数目取代柱面数目,来表示每个分区的起始地址; --v:显示版本信息。 -``` - -### 参数 - -设备文件:指定要进行分区或者显示分区的硬盘设备文件。 - -### 实例 - -首先选择要进行操作的磁盘: - -``` -[root@localhost ~]# fdisk /dev/sdb -``` - -输入`m`列出可以执行的命令: - -``` -command (m for help): m -Command action - a toggle a bootable flag - b edit bsd disklabel - c toggle the dos compatibility flag - d delete a partition - l list known partition types - m print this menu - n add a new partition - o create a new empty DOS partition table - p print the partition table - q quit without saving changes - s create a new empty Sun disklabel - t change a partition's system id - u change display/entry units - v verify the partition table - w write table to disk and exit - x extra functionality (experts only) -``` - -输入`p`列出磁盘目前的分区情况: - -``` -Command (m for help): p - -Disk /dev/sdb: 3221 MB, 3221225472 bytes -255 heads, 63 sectors/track, 391 cylinders -Units = cylinders of 16065 * 512 = 8225280 bytes - - Device Boot Start End Blocks Id System -/dev/sdb1 1 1 8001 8e Linux LVM -/dev/sdb2 2 26 200812+ 83 Linux -``` - -输入`d`然后选择分区,删除现有分区: - -``` -Command (m for help): d -Partition number (1-4): 1 - -Command (m for help): d -Selected partition 2 -``` - -查看分区情况,确认分区已经删除: - -``` -Command (m for help): print - -Disk /dev/sdb: 3221 MB, 3221225472 bytes -255 heads, 63 sectors/track, 391 cylinders -Units = cylinders of 16065 * 512 = 8225280 bytes - - Device Boot Start End Blocks Id System - -Command (m for help): -``` - -输入`n`建立新的磁盘分区,首先建立两个主磁盘分区: - -``` -Command (m for help): n -Command action - e extended - p primary partition (1-4) -p //建立主分区 -Partition number (1-4): 1 //分区号 -First cylinder (1-391, default 1): //分区起始位置 -Using default value 1 -last cylinder or +size or +sizeM or +sizeK (1-391, default 391): 100 //分区结束位置,单位为扇区 - -Command (m for help): n //再建立一个分区 -Command action - e extended - p primary partition (1-4) -p -Partition number (1-4): 2 //分区号为2 -First cylinder (101-391, default 101): -Using default value 101 -Last cylinder or +size or +sizeM or +sizeK (101-391, default 391): +200M //分区结束位置,单位为M -``` - -确认分区建立成功: - -``` -Command (m for help): p - -Disk /dev/sdb: 3221 MB, 3221225472 bytes -255 heads, 63 sectors/track, 391 cylinders -Units = cylinders of 16065 * 512 = 8225280 bytes - - Device Boot Start End Blocks Id System -/dev/sdb1 1 100 803218+ 83 Linux -/dev/sdb2 101 125 200812+ 83 Linux -``` - -再建立一个逻辑分区: - -``` -Command (m for help): n -Command action - e extended - p primary partition (1-4) -e //选择扩展分区 -Partition number (1-4): 3 -First cylinder (126-391, default 126): -Using default value 126 -Last cylinder or +size or +sizeM or +sizeK (126-391, default 391): -Using default value 391 -``` - -确认扩展分区建立成功: - -``` -Command (m for help): p - -Disk /dev/sdb: 3221 MB, 3221225472 bytes -255 heads, 63 sectors/track, 391 cylinders -Units = cylinders of 16065 * 512 = 8225280 bytes - - Device Boot Start End Blocks Id System -/dev/sdb1 1 100 803218+ 83 Linux -/dev/sdb2 101 125 200812+ 83 Linux -/dev/sdb3 126 391 2136645 5 Extended -``` - -在扩展分区上建立两个逻辑分区: - -``` -Command (m for help): n -Command action - l logical (5 or over) - p primary partition (1-4) -l //选择逻辑分区 -First cylinder (126-391, default 126): -Using default value 126 -Last cylinder or +size or +sizeM or +sizeK (126-391, default 391): +400M - -Command (m for help): n -Command action - l logical (5 or over) - p primary partition (1-4) -l -First cylinder (176-391, default 176): -Using default value 176 -Last cylinder or +size or +sizeM or +sizeK (176-391, default 391): -Using default value 391 -``` - -确认逻辑分区建立成功: - -``` -Command (m for help): p - -Disk /dev/sdb: 3221 MB, 3221225472 bytes -255 heads, 63 sectors/track, 391 cylinders -Units = cylinders of 16065 * 512 = 8225280 bytes - - Device Boot Start End Blocks Id System -/dev/sdb1 1 100 803218+ 83 Linux -/dev/sdb2 101 125 200812+ 83 Linux -/dev/sdb3 126 391 2136645 5 Extended -/dev/sdb5 126 175 401593+ 83 Linux -/dev/sdb6 176 391 1734988+ 83 Linux - -Command (m for help): -``` - -从上面的结果我们可以看到,在硬盘sdb我们建立了2个主分区(sdb1,sdb2),1个扩展分区(sdb3),2个逻辑分区(sdb5,sdb6) - -注意:主分区和扩展分区的磁盘号位1-4,也就是说最多有4个主分区或者扩展分区,逻辑分区开始的磁盘号为5,因此在这个实验中试没有sdb4的。 - -最后对分区操作进行保存: - -``` -Command (m for help): w -The partition table has been altered! - -Calling ioctl() to re-read partition table. -Syncing disks. -``` - -建立好分区之后我们还需要对分区进行格式化才能在系统中使用磁盘。 - -在sdb1上建立ext2分区: - -``` -[root@localhost ~]# mkfs.ext2 /dev/sdb1 -mke2fs 1.39 (29-May-2006) -Filesystem label= -OS type: Linux -Block size=4096 (log=2) -Fragment size=4096 (log=2) -100576 inodes, 200804 blocks -10040 blocks (5.00%) reserved for the super user -First data block=0 -Maximum filesystem blocks=209715200 -7 block groups -32768 blocks per group, 32768 fragments per group -14368 inodes per group -Superblock backups stored on blocks: - 32768, 98304, 163840 - -Writing inode tables: done -Writing superblocks and filesystem accounting information: done - -This filesystem will be automatically checked every 32 mounts or -180 days, whichever comes first. Use tune2fs -c or -i to override. -``` - -在sdb6上建立ext3分区: - -``` -[root@localhost ~]# mkfs.ext3 /dev/sdb6 -mke2fs 1.39 (29-May-2006) -Filesystem label= -OS type: Linux -Block size=4096 (log=2) -Fragment size=4096 (log=2) -217280 inodes, 433747 blocks -21687 blocks (5.00%) reserved for the super user -First data block=0 -Maximum filesystem blocks=444596224 -14 block groups -32768 blocks per group, 32768 fragments per group -15520 inodes per group -Superblock backups stored on blocks: - 32768, 98304, 163840, 229376, 294912 - -Writing inode tables: done -Creating journal (8192 blocks): done -Writing superblocks and filesystem accounting information: done - -This filesystem will be automatically checked every 32 mounts or -180 days, whichever comes first. Use tune2fs -c or -i to override. -[root@localhost ~]# -``` - -建立两个目录`/oracle`和`/web`,将新建好的两个分区挂载到系统: - -``` -[root@localhost ~]# mkdir /oracle -[root@localhost ~]# mkdir /web -[root@localhost ~]# mount /dev/sdb1 /oracle -[root@localhost ~]# mount /dev/sdb6 /web -``` - -查看分区挂载情况: - -``` -[root@localhost ~]# df -h -文件系统 容量 已用 可用 已用% 挂载点 -/dev/mapper/VolGroup00-LogVol00 - 6.7G 2.8G 3.6G 44% / -/dev/sda1 99M 12M 82M 13% /boot -tmpfs 125M 0 125M 0% /dev/shm -/dev/sdb1 773M 808K 733M 1% /oracle -/dev/sdb6 1.7G 35M 1.6G 3% /web -``` - -如果需要每次开机自动挂载则需要修改`/etc/fstab`文件,加入两行配置: - -``` -[root@localhost ~]# vim /etc/fstab - -/dev/VolGroup00/LogVol00 / ext3 defaults 1 1 -LABEL=/boot /boot ext3 defaults 1 2 -tmpfs /dev/shm tmpfs defaults 0 0 -devpts /dev/pts devpts gid=5,mode=620 0 0 -sysfs /sys sysfs defaults 0 0 -proc /proc proc defaults 0 0 -/dev/VolGroup00/LogVol01 swap swap defaults 0 0 -/dev/sdb1 /oracle ext2 defaults 0 0 -/dev/sdb6 /web ext3 defaults 0 0 -``` - - - \ No newline at end of file +fdisk +=== + +查看磁盘使用情况和磁盘分区 + +## 补充说明 + +**fdisk命令** 用于观察硬盘实体使用情况,也可对硬盘分区。它采用传统的问答式界面,而非类似DOS fdisk的cfdisk互动式操作界面,因此在使用上较为不便,但功能却丝毫不打折扣。 + +### 语法 + +``` +fdisk(选项)(参数) +``` + +### 选项 + +``` + -b <大小> 扇区大小(512、1024、2048或4096) + -c[=<模式>] 兼容模式:“dos”或“nondos”(默认) + -h 打印此帮助文本 + -u[=<单位>] 显示单位:“cylinders”(柱面)或“sectors”(扇区,默认) + -v 打印程序版本 + -C <数字> 指定柱面数 + -H <数字> 指定磁头数 + -S <数字> 指定每个磁道的扇区数 +``` + +### 参数 + +设备文件:指定要进行分区或者显示分区的硬盘设备文件。 + +### 实例 + +首先选择要进行操作的磁盘: + +``` +[root@localhost ~]# fdisk /dev/sdb +``` + +输入`m`列出可以执行的命令: + +``` +command (m for help): m +Command action + a toggle a bootable flag + b edit bsd disklabel + c toggle the dos compatibility flag + d delete a partition + l list known partition types + m print this menu + n add a new partition + o create a new empty DOS partition table + p print the partition table + q quit without saving changes + s create a new empty Sun disklabel + t change a partition's system id + u change display/entry units + v verify the partition table + w write table to disk and exit + x extra functionality (experts only) +``` + +输入`p`列出磁盘目前的分区情况: + +``` +Command (m for help): p + +Disk /dev/sdb: 3221 MB, 3221225472 bytes +255 heads, 63 sectors/track, 391 cylinders +Units = cylinders of 16065 * 512 = 8225280 bytes + + Device Boot Start End Blocks Id System +/dev/sdb1 1 1 8001 8e Linux LVM +/dev/sdb2 2 26 200812+ 83 Linux +``` + +输入`d`然后选择分区,删除现有分区: + +``` +Command (m for help): d +Partition number (1-4): 1 + +Command (m for help): d +Selected partition 2 +``` + +查看分区情况,确认分区已经删除: + +``` +Command (m for help): print + +Disk /dev/sdb: 3221 MB, 3221225472 bytes +255 heads, 63 sectors/track, 391 cylinders +Units = cylinders of 16065 * 512 = 8225280 bytes + + Device Boot Start End Blocks Id System + +Command (m for help): +``` + +输入`n`建立新的磁盘分区,首先建立两个主磁盘分区: + +``` +Command (m for help): n +Command action + e extended + p primary partition (1-4) +p //建立主分区 +Partition number (1-4): 1 //分区号 +First cylinder (1-391, default 1): //分区起始位置 +Using default value 1 +last cylinder or +size or +sizeM or +sizeK (1-391, default 391): 100 //分区结束位置,单位为扇区 + +Command (m for help): n //再建立一个分区 +Command action + e extended + p primary partition (1-4) +p +Partition number (1-4): 2 //分区号为2 +First cylinder (101-391, default 101): +Using default value 101 +Last cylinder or +size or +sizeM or +sizeK (101-391, default 391): +200M //分区结束位置,单位为M +``` + +确认分区建立成功: + +``` +Command (m for help): p + +Disk /dev/sdb: 3221 MB, 3221225472 bytes +255 heads, 63 sectors/track, 391 cylinders +Units = cylinders of 16065 * 512 = 8225280 bytes + + Device Boot Start End Blocks Id System +/dev/sdb1 1 100 803218+ 83 Linux +/dev/sdb2 101 125 200812+ 83 Linux +``` + +再建立一个逻辑分区: + +``` +Command (m for help): n +Command action + e extended + p primary partition (1-4) +e //选择扩展分区 +Partition number (1-4): 3 +First cylinder (126-391, default 126): +Using default value 126 +Last cylinder or +size or +sizeM or +sizeK (126-391, default 391): +Using default value 391 +``` + +确认扩展分区建立成功: + +``` +Command (m for help): p + +Disk /dev/sdb: 3221 MB, 3221225472 bytes +255 heads, 63 sectors/track, 391 cylinders +Units = cylinders of 16065 * 512 = 8225280 bytes + + Device Boot Start End Blocks Id System +/dev/sdb1 1 100 803218+ 83 Linux +/dev/sdb2 101 125 200812+ 83 Linux +/dev/sdb3 126 391 2136645 5 Extended +``` + +在扩展分区上建立两个逻辑分区: + +``` +Command (m for help): n +Command action + l logical (5 or over) + p primary partition (1-4) +l //选择逻辑分区 +First cylinder (126-391, default 126): +Using default value 126 +Last cylinder or +size or +sizeM or +sizeK (126-391, default 391): +400M + +Command (m for help): n +Command action + l logical (5 or over) + p primary partition (1-4) +l +First cylinder (176-391, default 176): +Using default value 176 +Last cylinder or +size or +sizeM or +sizeK (176-391, default 391): +Using default value 391 +``` + +确认逻辑分区建立成功: + +``` +Command (m for help): p + +Disk /dev/sdb: 3221 MB, 3221225472 bytes +255 heads, 63 sectors/track, 391 cylinders +Units = cylinders of 16065 * 512 = 8225280 bytes + + Device Boot Start End Blocks Id System +/dev/sdb1 1 100 803218+ 83 Linux +/dev/sdb2 101 125 200812+ 83 Linux +/dev/sdb3 126 391 2136645 5 Extended +/dev/sdb5 126 175 401593+ 83 Linux +/dev/sdb6 176 391 1734988+ 83 Linux + +Command (m for help): +``` + +从上面的结果我们可以看到,在硬盘sdb我们建立了2个主分区(sdb1,sdb2),1个扩展分区(sdb3),2个逻辑分区(sdb5,sdb6) + +注意:主分区和扩展分区的磁盘号位1-4,也就是说最多有4个主分区或者扩展分区,逻辑分区开始的磁盘号为5,因此在这个实验中试没有sdb4的。 + +最后对分区操作进行保存: + +``` +Command (m for help): w +The partition table has been altered! + +Calling ioctl() to re-read partition table. +Syncing disks. +``` + +建立好分区之后我们还需要对分区进行格式化才能在系统中使用磁盘。 + +在sdb1上建立ext2分区: + +``` +[root@localhost ~]# mkfs.ext2 /dev/sdb1 +mke2fs 1.39 (29-May-2006) +Filesystem label= +OS type: Linux +Block size=4096 (log=2) +Fragment size=4096 (log=2) +100576 inodes, 200804 blocks +10040 blocks (5.00%) reserved for the super user +First data block=0 +Maximum filesystem blocks=209715200 +7 block groups +32768 blocks per group, 32768 fragments per group +14368 inodes per group +Superblock backups stored on blocks: + 32768, 98304, 163840 + +Writing inode tables: done +Writing superblocks and filesystem accounting information: done + +This filesystem will be automatically checked every 32 mounts or +180 days, whichever comes first. Use tune2fs -c or -i to override. +``` + +在sdb6上建立ext3分区: + +``` +[root@localhost ~]# mkfs.ext3 /dev/sdb6 +mke2fs 1.39 (29-May-2006) +Filesystem label= +OS type: Linux +Block size=4096 (log=2) +Fragment size=4096 (log=2) +217280 inodes, 433747 blocks +21687 blocks (5.00%) reserved for the super user +First data block=0 +Maximum filesystem blocks=444596224 +14 block groups +32768 blocks per group, 32768 fragments per group +15520 inodes per group +Superblock backups stored on blocks: + 32768, 98304, 163840, 229376, 294912 + +Writing inode tables: done +Creating journal (8192 blocks): done +Writing superblocks and filesystem accounting information: done + +This filesystem will be automatically checked every 32 mounts or +180 days, whichever comes first. Use tune2fs -c or -i to override. +[root@localhost ~]# +``` + +建立两个目录`/oracle`和`/web`,将新建好的两个分区挂载到系统: + +``` +[root@localhost ~]# mkdir /oracle +[root@localhost ~]# mkdir /web +[root@localhost ~]# mount /dev/sdb1 /oracle +[root@localhost ~]# mount /dev/sdb6 /web +``` + +查看分区挂载情况: + +``` +[root@localhost ~]# df -h +文件系统 容量 已用 可用 已用% 挂载点 +/dev/mapper/VolGroup00-LogVol00 + 6.7G 2.8G 3.6G 44% / +/dev/sda1 99M 12M 82M 13% /boot +tmpfs 125M 0 125M 0% /dev/shm +/dev/sdb1 773M 808K 733M 1% /oracle +/dev/sdb6 1.7G 35M 1.6G 3% /web +``` + +如果需要每次开机自动挂载则需要修改`/etc/fstab`文件,加入两行配置: + +``` +[root@localhost ~]# vim /etc/fstab + +/dev/VolGroup00/LogVol00 / ext3 defaults 1 1 +LABEL=/boot /boot ext3 defaults 1 2 +tmpfs /dev/shm tmpfs defaults 0 0 +devpts /dev/pts devpts gid=5,mode=620 0 0 +sysfs /sys sysfs defaults 0 0 +proc /proc proc defaults 0 0 +/dev/VolGroup00/LogVol01 swap swap defaults 0 0 +/dev/sdb1 /oracle ext2 defaults 0 0 +/dev/sdb6 /web ext3 defaults 0 0 +``` + + + From a79a84dd2b4002da2a520485313054040f6a2134 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Tue, 11 Jul 2017 17:24:45 +0800 Subject: [PATCH 0040/1284] Update ln grammar. --- command/ln.md | 197 +++++++++++++++++++++++++------------------------- 1 file changed, 100 insertions(+), 97 deletions(-) diff --git a/command/ln.md b/command/ln.md index 811e4055e64..94b4ee57f48 100644 --- a/command/ln.md +++ b/command/ln.md @@ -1,97 +1,100 @@ -ln -=== - -用来为文件创件连接 - -## 补充说明 - -**ln命令** 用来为文件创件连接,连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接。如果要创建符号连接必须使用"-s"选项。 - -注意:符号链接文件不是一个独立的文件,它的许多属性依赖于源文件,所以给符号链接文件设置存取权限是没有意义的。 - -### 语法 - -``` -ln(选项)(参数) -``` - -### 选项 - -``` --b或--backup:删除,覆盖目标文件之前的备份; --d或-F或——directory:建立目录的硬连接; --f或——force:强行建立文件或目录的连接,不论文件或目录是否存在; --i或——interactive:覆盖既有文件之前先询问用户; --n或--no-dereference:把符号连接的目的目录视为一般文件; --s或——symbolic:对源文件建立符号连接,而非硬连接; --S<字尾备份字符串>或--suffix=<字尾备份字符串>:用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的备份字符串是符号“~”,用户可通过“-S”参数来改变它; --v或——verbose:显示指令执行过程; --V<备份方式>或--version-control=<备份方式>:用“-b”参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,这个字符串不仅可用“-S”参数变更,当使用“-V”参数<备份方式>指定不同备份方式时,也会产生不同字尾的备份字符串; ---help:在线帮助; ---version:显示版本信息。 -``` - -### 参数 - -* 源文件:指定连接的源文件。如果使用`-s`选项创建符号连接,则“源文件”可以是文件或者目录。创建硬连接时,则“源文件”参数只能是文件; -* 目标文件:指定源文件的目标连接文件。 - -### 实例 - -将目录`/usr/mengqc/mub1`下的文件m2.c链接到目录`/usr/liu`下的文件a2.c - -``` -cd /usr/mengqc -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` - -``` -ln -s /usr/mengqc/mub1 /usr/liu/abc -``` - -执行该命令后,`/usr/mengqc/mub1`代表的路径将存放在名为`/usr/liu/abc`的文件中。 - -## 扩展知识 - -Linux具有为一个文件起多个名字的功能,称为链接。被链接的文件可以存放在相同的目录下,但是必须有不同的文件名,而不用在硬盘上为同样的数据重复备份。另外,被链接的文件也可以有相同的文件名,但是存放在不同的目录下,这样只要对一个目录下的该文件进行修改,就可以完成对所有目录下同名链接文件的修改。对于某个文件的各链接文件,我们可以给它们指定不同的存取权限,以控制对信息的共享和增强安全性。 - -文件链接有两种形式,即硬链接和符号链接。 - -### 硬链接 - -建立硬链接时,在另外的目录或本目录中增加目标文件的一个目录项,这样,一个文件就登记在多个目录中。如图所示的m2.c文件就在目录mub1和liu中都建立了目录项。 - -创建硬链接后,己经存在的文件的I节点号(Inode)会被多个目录文件项使用。一个文件的硬链接数可以在目录的长列表格式的第二列中看到,无额外链接的文件的链接数为l。 - -在默认情况下,ln命令创建硬链接。ln命令会增加链接数,rm命令会减少链接数。一个文件除非链接数为0,否则不会从文件系统中被物理地删除。 - -对硬链接有如下限制: - -* 不能对目录文件做硬链接。 -* 不能在不同的文件系统之间做硬链接。就是说,链接文件和被链接文件必须位于同一个文件系统中。 - -### 符号链接 - -符号链接也称为软链接,是将一个路径名链接到一个文件。这些文件是一种特别类型的文件。事实上,它只是一个文本文件(如图中的abc文件),其中包含它提供链接的另一个文件的路径名,如图中虚线箭头所示。另一个文件是实际包含所有数据的文件。所有读、写文件内容的命令被用于符号链接时,将沿着链接方向前进来访问实际的文件。 - -!符号连接 - -与硬链接不同的是,符号链接确实是一个新文件,当然它具有不同的I节点号;而硬链接并没有建立新文件。 - -符号链接没有硬链接的限制,可以对目录文件做符号链接,也可以在不同文件系统之间做符号链接。 - -用`ln -s`命令建立符号链接时,源文件最好用绝对路径名。这样可以在任何工作目录下进行符号链接。而当源文件用相对路径时,如果当前的工作路径与要创建的符号链接文件所在路径不同,就不能进行链接。 - -符号链接保持了链接与源文件或目录之间的区别: - -* 删除源文件或目录,只删除了数据,不会删除链接。一旦以同样文件名创建了源文件,链接将继续指向该文件的新数据。 -* 在目录长列表中,符号链接作为一种特殊的文件类型显示出来,其第一个字母是l。 -* 符号链接的大小是其链接文件的路径名中的字节数。 -* 当用`ln -s`命令列出文件时,可以看到符号链接名后有一个箭头指向源文件或目录,例如`lrwxrwxrwx … 14 jun 20 10:20 /etc/motd->/original_file`其中,表示“文件大小”的数字“14”恰好说明源文件名`original_file`由14个字符构成。 - - - \ No newline at end of file +ln +=== + +用来为文件创件连接 + +## 补充说明 + +**ln命令** 用来为文件创件连接,连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接。如果要创建符号连接必须使用"-s"选项。 + +注意:符号链接文件不是一个独立的文件,它的许多属性依赖于源文件,所以给符号链接文件设置存取权限是没有意义的。 + +### 语法 + +``` +ln [选项]... [-T] 目标 链接名 (第一种格式) + 或:ln [选项]... 目标 (第二种格式) + 或:ln [选项]... 目标... 目录 (第三种格式) + 或:ln [选项]... -t 目录 目标... (第四种格式) +``` + +### 选项 + +``` +-b或--backup:删除,覆盖目标文件之前的备份; +-d或-F或——directory:建立目录的硬连接; +-f或——force:强行建立文件或目录的连接,不论文件或目录是否存在; +-i或——interactive:覆盖既有文件之前先询问用户; +-n或--no-dereference:把符号连接的目的目录视为一般文件; +-s或——symbolic:对源文件建立符号连接,而非硬连接; +-S<字尾备份字符串>或--suffix=<字尾备份字符串>:用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的备份字符串是符号“~”,用户可通过“-S”参数来改变它; +-v或——verbose:显示指令执行过程; +-V<备份方式>或--version-control=<备份方式>:用“-b”参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,这个字符串不仅可用“-S”参数变更,当使用“-V”参数<备份方式>指定不同备份方式时,也会产生不同字尾的备份字符串; +--help:在线帮助; +--version:显示版本信息。 +``` + +### 参数 + +* 源文件:指定连接的源文件。如果使用`-s`选项创建符号连接,则“源文件”可以是文件或者目录。创建硬连接时,则“源文件”参数只能是文件; +* 目标文件:指定源文件的目标连接文件。 + +### 实例 + +将目录`/usr/mengqc/mub1`下的文件m2.c链接到目录`/usr/liu`下的文件a2.c + +``` +cd /usr/mengqc +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` + +``` +ln -s /usr/mengqc/mub1 /usr/liu/abc +``` + +执行该命令后,`/usr/mengqc/mub1`代表的路径将存放在名为`/usr/liu/abc`的文件中。 + +## 扩展知识 + +Linux具有为一个文件起多个名字的功能,称为链接。被链接的文件可以存放在相同的目录下,但是必须有不同的文件名,而不用在硬盘上为同样的数据重复备份。另外,被链接的文件也可以有相同的文件名,但是存放在不同的目录下,这样只要对一个目录下的该文件进行修改,就可以完成对所有目录下同名链接文件的修改。对于某个文件的各链接文件,我们可以给它们指定不同的存取权限,以控制对信息的共享和增强安全性。 + +文件链接有两种形式,即硬链接和符号链接。 + +### 硬链接 + +建立硬链接时,在另外的目录或本目录中增加目标文件的一个目录项,这样,一个文件就登记在多个目录中。如图所示的m2.c文件就在目录mub1和liu中都建立了目录项。 + +创建硬链接后,己经存在的文件的I节点号(Inode)会被多个目录文件项使用。一个文件的硬链接数可以在目录的长列表格式的第二列中看到,无额外链接的文件的链接数为l。 + +在默认情况下,ln命令创建硬链接。ln命令会增加链接数,rm命令会减少链接数。一个文件除非链接数为0,否则不会从文件系统中被物理地删除。 + +对硬链接有如下限制: + +* 不能对目录文件做硬链接。 +* 不能在不同的文件系统之间做硬链接。就是说,链接文件和被链接文件必须位于同一个文件系统中。 + +### 符号链接 + +符号链接也称为软链接,是将一个路径名链接到一个文件。这些文件是一种特别类型的文件。事实上,它只是一个文本文件(如图中的abc文件),其中包含它提供链接的另一个文件的路径名,如图中虚线箭头所示。另一个文件是实际包含所有数据的文件。所有读、写文件内容的命令被用于符号链接时,将沿着链接方向前进来访问实际的文件。 + +!符号连接 + +与硬链接不同的是,符号链接确实是一个新文件,当然它具有不同的I节点号;而硬链接并没有建立新文件。 + +符号链接没有硬链接的限制,可以对目录文件做符号链接,也可以在不同文件系统之间做符号链接。 + +用`ln -s`命令建立符号链接时,源文件最好用绝对路径名。这样可以在任何工作目录下进行符号链接。而当源文件用相对路径时,如果当前的工作路径与要创建的符号链接文件所在路径不同,就不能进行链接。 + +符号链接保持了链接与源文件或目录之间的区别: + +* 删除源文件或目录,只删除了数据,不会删除链接。一旦以同样文件名创建了源文件,链接将继续指向该文件的新数据。 +* 在目录长列表中,符号链接作为一种特殊的文件类型显示出来,其第一个字母是l。 +* 符号链接的大小是其链接文件的路径名中的字节数。 +* 当用`ln -s`命令列出文件时,可以看到符号链接名后有一个箭头指向源文件或目录,例如`lrwxrwxrwx … 14 jun 20 10:20 /etc/motd->/original_file`其中,表示“文件大小”的数字“14”恰好说明源文件名`original_file`由14个字符构成。 + + + From 5da538174b2e2d54e03a1c2f075a7cd85c9ed0f1 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Thu, 13 Jul 2017 21:33:13 +0800 Subject: [PATCH 0041/1284] Add the nmcli command. --- command/nmcli.md | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 command/nmcli.md diff --git a/command/nmcli.md b/command/nmcli.md new file mode 100644 index 00000000000..5307c25a7c3 --- /dev/null +++ b/command/nmcli.md @@ -0,0 +1,56 @@ +nmcli +=== + +地址配置工具 + +## 补充说明 + +**nmcli命令** 是 NetworkManager client 网络管理客户端。 + +### 语法 + +```bash +nmcli [OPTIONS] OBJECT { COMMAND | help } +``` + +### 选项 + +```bash +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] 打印此帮助 + +OBJECT + g[eneral] NetworkManager的一般状态和操作 + n[etworking] 整体组网控制 + r[adio] NetworkManager切换开关 + c[onnection] NetworkManager的连接 + d[evice] 由NetworkManager管理的设备 + 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 # 查看帮助 + +``` + + \ No newline at end of file From 318c3e54f65879ba286ff42e78422bba80b50ef7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Wed, 19 Jul 2017 02:55:12 +0800 Subject: [PATCH 0042/1284] Update iptables.md --- command/iptables.md | 67 +++++++++++++++++++++++++++++++++------------ 1 file changed, 50 insertions(+), 17 deletions(-) diff --git a/command/iptables.md b/command/iptables.md index 4acd0afd26a..e58786858f7 100644 --- a/command/iptables.md +++ b/command/iptables.md @@ -42,28 +42,61 @@ iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协 表名包括: -* **raw** :高级功能,如:网址过滤。 -* **mangle** :数据包修改(QOS),用于实现服务质量。 -* **net** :地址转换,用于网关路由器。 -* **filter** :包过滤,用于防火墙规则。 +- **raw** :高级功能,如:网址过滤。 +- **mangle** :数据包修改(QOS),用于实现服务质量。 +- **net** :地址转换,用于网关路由器。 +- **filter** :包过滤,用于防火墙规则。 规则链名包括: -* **INPUT链** :处理输入数据包。 -* **OUTPUT链** :处理输出数据包。 -* **PORWARD链** :处理转发数据包。 -* **PREROUTING链** :用于目标地址转换(DNAT)。 -* **POSTOUTING链** :用于源地址转换(SNAT)。 +- **INPUT链** :处理输入数据包。 +- **OUTPUT链** :处理输出数据包。 +- **PORWARD链** :处理转发数据包。 +- **PREROUTING链** :用于目标地址转换(DNAT)。 +- **POSTOUTING链** :用于源地址转换(SNAT)。 动作包括: -* **ACCEPT** :接收数据包。 -* **DROP** :丢弃数据包。 -* **REDIRECT** :重定向、映射、透明代理。 -* **SNAT** :源地址转换。 -* **DNAT** :目标地址转换。 -* **MASQUERADE** :IP伪装(NAT),用于ADSL。 -* **LOG** :日志记录。 +- **ACCEPT** :接收数据包。 +- **DROP** :丢弃数据包。 +- **REDIRECT** :重定向、映射、透明代理。 +- **SNAT** :源地址转换。 +- **DNAT** :目标地址转换。 +- **MASQUERADE** :IP伪装(NAT),用于ADSL。 +- **LOG** :日志记录。 + +```bash + ┎╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍┓ + ┌───────────────┐ ┃ Network ┃ + │ table: filter │ ┖━━━━━━━│━━━━━━━┛ + │ chain: INPUT ◀────┐ │ + └───────┬───────┘ │ │ + │ │ ┌─────────▼─────────┐ + ┌ ▼ ┐ │ │ table: nat │ + │local process│ │ │ chain: PREROUTING │ + └ ┘ │ └─────────┬─────────┘ + │ │ │ + ▼ │ ▼ ┌─────────────────┐ +┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ │ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ │table: nat │ + Routing decision └────── outing decision ─────▶│chain: PREROUTING│ +┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ └────────┬────────┘ + │ │ + │ │ + ┌───────▼───────┐ │ + │ table: nat │ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ │ + │ chain: OUTPUT │ ┌─────▶ outing decision ◀──────────────┘ + └───────┬───────┘ │ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ + │ │ │ + ┌───────▼───────┐ │ ┌──────────▼─────────┐ + │ table: filter │ │ │ table: nat │ + │ chain: OUTPUT ├────┘ │ chain: POSTROUTING │ + └───────────────┘ └──────────┬─────────┘ + │ + ┎╍╍╍╍╍╍╍▼╍╍╍╍╍╍╍┓ + ┃ Network ┃ + ┖━━━━━━━━━━━━━━━┛ +``` + ### 实例 @@ -133,4 +166,4 @@ iptables -D INPUT 8 ``` - \ No newline at end of file + From 60af6fb4aa2c913682c224acd4fb79b5cee2b5c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Wed, 19 Jul 2017 03:02:40 +0800 Subject: [PATCH 0043/1284] Update iptables.md --- command/iptables.md | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/command/iptables.md b/command/iptables.md index e58786858f7..3677ee4ce18 100644 --- a/command/iptables.md +++ b/command/iptables.md @@ -68,31 +68,32 @@ iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协 ```bash ┎╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍┓ ┌───────────────┐ ┃ Network ┃ - │ table: filter │ ┖━━━━━━━│━━━━━━━┛ - │ chain: INPUT ◀────┐ │ - └───────┬───────┘ │ │ - │ │ ┌─────────▼─────────┐ - ┌ ▼ ┐ │ │ table: nat │ - │local process│ │ │ chain: PREROUTING │ - └ ┘ │ └─────────┬─────────┘ - │ │ │ - ▼ │ ▼ ┌─────────────────┐ -┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ │ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ │table: nat │ - Routing decision └────── outing decision ─────▶│chain: PREROUTING│ -┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ └────────┬────────┘ - │ │ + │ table: filter │ ┖━━━━━━━┳━━━━━━━┛ + │ chain: INPUT │◀────┐ │ + └───────┬───────┘ │ ▼ + │ │ ┌───────────────────┐ + ┌ ▼ ┐ │ │ table: nat │ + │local process│ │ │ chain: PREROUTING │ + └ ┘ │ └─────────┬─────────┘ + │ │ │ + ▼ │ ▼ ┌─────────────────┐ +┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ │ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ │table: nat │ + Routing decision └───── outing decision ─────▶│chain: PREROUTING│ +┅┅┅┅┅┅┅┅┅┳┅┅┅┅┅┅┅┅┅ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ └────────┬────────┘ │ │ - ┌───────▼───────┐ │ + ▼ │ + ┌───────────────┐ │ │ table: nat │ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ │ │ chain: OUTPUT │ ┌─────▶ outing decision ◀──────────────┘ - └───────┬───────┘ │ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ + └───────┬───────┘ │ ┅┅┅┅┅┅┅┅┳┅┅┅┅┅┅┅┅ │ │ │ - ┌───────▼───────┐ │ ┌──────────▼─────────┐ - │ table: filter │ │ │ table: nat │ - │ chain: OUTPUT ├────┘ │ chain: POSTROUTING │ - └───────────────┘ └──────────┬─────────┘ - │ - ┎╍╍╍╍╍╍╍▼╍╍╍╍╍╍╍┓ + ▼ │ ▼ + ┌───────────────┐ │ ┌────────────────────┐ + │ table: filter │ │ │ chain: POSTROUTING │ + │ chain: OUTPUT ├────┘ └──────────┬─────────┘ + └───────────────┘ │ + ▼ + ┎╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍┓ ┃ Network ┃ ┖━━━━━━━━━━━━━━━┛ ``` From cba5f337a5bc3d68bd5dcaa16cd1de56c87cb046 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Wed, 19 Jul 2017 03:10:54 +0800 Subject: [PATCH 0044/1284] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=96=87=E6=9C=AC?= =?UTF-8?q?=E5=9B=BE=E8=A1=A8=E6=A0=B7=E5=BC=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- template/styl/mixins/markdown.styl | 1 + 1 file changed, 1 insertion(+) diff --git a/template/styl/mixins/markdown.styl b/template/styl/mixins/markdown.styl index 67fff5606cb..925bcd9dcf0 100644 --- a/template/styl/mixins/markdown.styl +++ b/template/styl/mixins/markdown.styl @@ -117,6 +117,7 @@ div.markdown-body white-space: inherit overflow-wrap: normal word-wrap:normal!important + font: 12px "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; // code:before,code:after,tt:before,tt:after // letter-spacing 0 // content "" From f373300f00c0183c077d360403d05f24c12648d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Wed, 19 Jul 2017 15:14:51 +0800 Subject: [PATCH 0045/1284] Update iptables.md --- command/iptables.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/command/iptables.md b/command/iptables.md index 3677ee4ce18..f09b594af55 100644 --- a/command/iptables.md +++ b/command/iptables.md @@ -66,9 +66,9 @@ iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协 - **LOG** :日志记录。 ```bash - ┎╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍┓ + ┏╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍┓ ┌───────────────┐ ┃ Network ┃ - │ table: filter │ ┖━━━━━━━┳━━━━━━━┛ + │ table: filter │ ┗━━━━━━━┳━━━━━━━┛ │ chain: INPUT │◀────┐ │ └───────┬───────┘ │ ▼ │ │ ┌───────────────────┐ @@ -93,9 +93,9 @@ iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协 │ chain: OUTPUT ├────┘ └──────────┬─────────┘ └───────────────┘ │ ▼ - ┎╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍┓ + ┏╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍┓ ┃ Network ┃ - ┖━━━━━━━━━━━━━━━┛ + ┗━━━━━━━━━━━━━━━┛ ``` From 962f204db824ba66ccd3bfe8042a19a52e84ba65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Mon, 24 Jul 2017 15:47:46 +0800 Subject: [PATCH 0046/1284] Update yum.md --- command/yum.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/command/yum.md b/command/yum.md index dcf7844fb8e..f39b79acd08 100644 --- a/command/yum.md +++ b/command/yum.md @@ -75,7 +75,11 @@ yum groupupdate group1 #升级程序组group1 **查找和显示** -``` +```bash +# 检查 MySQL 是否已安装 +yum list installed | grep mysql +yum list installed mysql* + yum info package1 #显示安装包信息package1 yum list #显示所有已经安装和可以安装的程序包 yum list package1 #显示指定程序包安装情况package1 From ef3543b5660d46dc1e2a862af898064fc9a1c66b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Mon, 24 Jul 2017 15:48:25 +0800 Subject: [PATCH 0047/1284] Update yum.md --- command/yum.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/command/yum.md b/command/yum.md index f39b79acd08..77c3c0e3736 100644 --- a/command/yum.md +++ b/command/yum.md @@ -57,7 +57,7 @@ deplist:显示rpm软件包的所有依赖关系。 **安装** -``` +```bash yum install #全部安装 yum install package1 #安装指定的安装包package1 yum groupinsall group1 #安装程序组group1 @@ -65,7 +65,7 @@ yum groupinsall group1 #安装程序组group1 **更新和升级** -``` +```bash yum update #全部更新 yum update package1 #更新指定程序包package1 yum check-update #检查可更新的程序 @@ -88,7 +88,7 @@ yum groupinfo group1 #显示程序组group1信息yum search string 根据关 **删除程序** -``` +```bash yum remove | erase package1 #删除程序包package1 yum groupremove group1 #删除程序组group1 yum deplist package1 #查看程序package1依赖情况 @@ -96,7 +96,7 @@ yum deplist package1 #查看程序package1依赖情况 **清除缓存** -``` +```bash yum clean packages #清除缓存目录下的软件包 yum clean headers #清除缓存目录下的 headers yum clean oldheaders #清除缓存目录下旧的 headers From ada160c3fbbba5ca9eb6e4e549ed3fddefd48294 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Tue, 25 Jul 2017 15:52:37 +0800 Subject: [PATCH 0048/1284] Update chkconfig.md --- command/chkconfig.md | 147 +++++++++++++++++++++++-------------------- 1 file changed, 79 insertions(+), 68 deletions(-) diff --git a/command/chkconfig.md b/command/chkconfig.md index 0ba339f5458..46e581e6235 100644 --- a/command/chkconfig.md +++ b/command/chkconfig.md @@ -1,68 +1,79 @@ -chkconfig -=== - -检查或设置系统的各种服务 - -## 补充说明 - -**chkconfig命令** 检查、设置系统的各种服务。这是Red Hat公司遵循GPL规则所开发的程序,它可查询操作系统在每一个执行等级中会执行哪些系统服务,其中包括各类常驻服务。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接。 - -### 语法 - -``` -chkconfig(选项) -``` - -### 选项 - -``` ---add:增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据; ---del:删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据; ---level<等级代号>:指定读系统服务要在哪一个执行等级中开启或关毕。 -``` - -等级代号列表: - -* 等级0表示:表示关机 -* 等级1表示:单用户模式 -* 等级2表示:无网络连接的多用户命令行模式 -* 等级3表示:有网络连接的多用户命令行模式 -* 等级4表示:不可用 -* 等级5表示:带图形界面的多用户模式 -* 等级6表示:重新启动 - -需要说明的是,level选项可以指定要查看的运行级而不一定是当前运行级。对于每个运行级,只能有一个启动脚本或者停止脚本。当切换运行级时,init不会重新启动已经启动的服务,也不会再次去停止已经停止的服务。 - -运行级文件: - -每个被chkconfig管理的服务需要在对应的init.d下的脚本加上两行或者更多行的注释。第一行告诉chkconfig缺省启动的运行级以及启动和停止的优先级。如果某服务缺省不在任何运行级启动,那么使用`-`代替运行级。第二行对服务进行描述,可以用`\`跨行注释。 - -例如random.init包含三行: - -``` -# chkconfig: 2345 20 80 -# description: Saves and restores system entropy pool for \ -# higher quality random number generation. -``` - -### 实例 - -``` -chkconfig --list #列出所有的系统服务。 -chkconfig --add httpd #增加httpd服务。 -chkconfig --del httpd #删除httpd服务。 -chkconfig --level httpd 2345 on #设置httpd在运行级别为2、3、4、5的情况下都是on(开启)的状态。 -chkconfig --list #列出系统所有的服务启动情况。 -chkconfig --list mysqld #列出mysqld服务设置情况。 -chkconfig --level 35 mysqld on #设定mysqld在等级3和5为开机运行服务,--level 35表示操作只在等级3和5执行,on表示启动,off表示关闭。 -chkconfig mysqld on #设定mysqld在各等级为on,“各等级”包括2、3、4、5等级。 -``` - -如何增加一个服务: - -1. 服务脚本必须存放在`/etc/ini.d/`目录下; -2. `chkconfig --add servicename`在chkconfig工具服务列表中增加此服务,此时服务会被在`/etc/rc.d/rcN.d`中赋予K/S入口了; -3. `chkconfig --level 35 mysqld on`修改服务的默认启动等级。 - - - \ No newline at end of file +chkconfig +=== + +检查或设置系统的各种服务 + +## 补充说明 + +**chkconfig命令** 检查、设置系统的各种服务。这是Red Hat公司遵循GPL规则所开发的程序,它可查询操作系统在每一个执行等级中会执行哪些系统服务,其中包括各类常驻服务。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接。 + +### 语法 + +``` +chkconfig(选项) +``` + +### 选项 + +``` +--add:增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据; +--del:删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据; +--level<等级代号>:指定读系统服务要在哪一个执行等级中开启或关毕。 +``` +缺省的运行级,RHS用到的级别如下: + +* 0:关机 +* 1:单用户模式 +* 2:无网络支持的多用户模式 +* 3:有网络支持的多用户模式 +* 4:保留,未使用 +* 5:有网络支持有X-Window支持的多用户模式 +* 6:重新引导系统,即重启 + +对各个运行级的详细解释: + +* 0 为停机,机器关闭。 +* 1 为单用户模式,就像Win9x下的安全模式类似。 +* 2 为多用户模式,但是没有NFS支持。 +* 3 为完整的多用户模式,是标准的运行级。 +* 4 一般不用,在一些特殊情况下可以用它来做一些事情。例如在笔记本 电脑的电池用尽时,可以切换到这个模式来做一些设置。 +* 5 就是X11,进到X Window系统了。 +* 6 为重启,运行init 6机器就会重启。 + +需要说明的是,level选项可以指定要查看的运行级而不一定是当前运行级。对于每个运行级,只能有一个启动脚本或者停止脚本。当切换运行级时,init不会重新启动已经启动的服务,也不会再次去停止已经停止的服务。 + +运行级文件: + +每个被chkconfig管理的服务需要在对应的init.d下的脚本加上两行或者更多行的注释。第一行告诉chkconfig缺省启动的运行级以及启动和停止的优先级。如果某服务缺省不在任何运行级启动,那么使用`-`代替运行级。第二行对服务进行描述,可以用`\`跨行注释。 + +例如random.init包含三行: + +``` +# chkconfig: 2345 20 80 +# description: Saves and restores system entropy pool for \ +# higher quality random number generation. +``` + +### 实例 + +``` +chkconfig --list #列出所有的系统服务。 +chkconfig --add httpd #增加httpd服务。 +chkconfig --del httpd #删除httpd服务。 +chkconfig --level httpd 2345 on #设置httpd在运行级别为2、3、4、5的情况下都是on(开启)的状态。 +chkconfig --list # 列出系统所有的服务启动情况。 +chkconfig --list mysqld # 列出mysqld服务设置情况。 +chkconfig --level 35 mysqld on # 设定mysqld在等级3和5为开机运行服务,--level 35表示操作只在等级3和5执行,on表示启动,off表示关闭。 +chkconfig mysqld on # 设定mysqld在各等级为on,“各等级”包括2、3、4、5等级。 + +chkconfig –level redis 2345 on # 把redis在运行级别为2、3、4、5的情况下都是on(开启)的状态。 +``` + +如何增加一个服务: + +1. 服务脚本必须存放在`/etc/ini.d/`目录下; +2. `chkconfig --add servicename`在chkconfig工具服务列表中增加此服务,此时服务会被在`/etc/rc.d/rcN.d`中赋予K/S入口了; +3. `chkconfig --level 35 mysqld on`修改服务的默认启动等级。 + + + From 415f513fa8ee3823dadafd44e7e6b71062ed93d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Tue, 25 Jul 2017 15:53:04 +0800 Subject: [PATCH 0049/1284] Update chkconfig.md --- command/chkconfig.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/command/chkconfig.md b/command/chkconfig.md index 46e581e6235..439e1d088db 100644 --- a/command/chkconfig.md +++ b/command/chkconfig.md @@ -9,13 +9,13 @@ chkconfig ### 语法 -``` +```bash chkconfig(选项) ``` ### 选项 -``` +```bash --add:增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据; --del:删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据; --level<等级代号>:指定读系统服务要在哪一个执行等级中开启或关毕。 @@ -48,7 +48,7 @@ chkconfig(选项) 例如random.init包含三行: -``` +```bash # chkconfig: 2345 20 80 # description: Saves and restores system entropy pool for \ # higher quality random number generation. @@ -56,7 +56,7 @@ chkconfig(选项) ### 实例 -``` +```bash chkconfig --list #列出所有的系统服务。 chkconfig --add httpd #增加httpd服务。 chkconfig --del httpd #删除httpd服务。 From 69c2eacbe38612d7e49b105db5e8af93beab4e6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Thu, 27 Jul 2017 00:16:16 +0800 Subject: [PATCH 0050/1284] Update firewall-cmd.md --- command/firewall-cmd.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/command/firewall-cmd.md b/command/firewall-cmd.md index 506bfe3f254..0d0aa9e483a 100644 --- a/command/firewall-cmd.md +++ b/command/firewall-cmd.md @@ -159,3 +159,27 @@ firewall-cmd --list-all firewall-cmd --direct -add-rule ipv4 filter INPUT 0 -p tcp --dport 9000 -j ACCEPT firewall-cmd --reload ``` + +伪装 IP + +```bash +firewall-cmd --query-masquerade # 检查是否允许伪装IP +firewall-cmd --add-masquerade # 允许防火墙伪装IP +firewall-cmd --remove-masquerade# 禁止防火墙伪装IP +``` + +**端口转发** + +端口转发可以将指定地址访问指定的端口时,将流量转发至指定地址的指定端口。转发的目的如果不指定 ip 的话就默认为本机,如果指定了 ip 却没指定端口,则默认使用来源端口。 +如果配置好端口转发之后不能用,可以检查下面两个问题: +1. 比如我将 80 端口转发至 8080 端口,首先检查本地的 80 端口和目标的 8080 端口是否开放监听了 +2. 其次检查是否允许伪装 IP,没允许的话要开启伪装 IP + +```bash +firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 # 将80端口的流量转发至8080 +firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.1.0.1 # 将80端口的流量转发至192.168.0.1 +firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.0.1:toport=8080 # 将80端口的流量转发至192.168.0.1的8080端口 +``` + +1. 当我们想把某个端口隐藏起来的时候,就可以在防火墙上阻止那个端口访问,然后再开一个不规则的端口,之后配置防火墙的端口转发,将流量转发过去。 +2. 端口转发还可以做流量分发,一个防火墙拖着好多台运行着不同服务的机器,然后用防火墙将不同端口的流量转发至不同机器。 From 1f8d3c1f56d8aabe66a99322e04c82b7d1fa8b2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Thu, 27 Jul 2017 00:36:36 +0800 Subject: [PATCH 0051/1284] Update firewall-cmd.md --- command/firewall-cmd.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/command/firewall-cmd.md b/command/firewall-cmd.md index 0d0aa9e483a..0b46e696fab 100644 --- a/command/firewall-cmd.md +++ b/command/firewall-cmd.md @@ -160,6 +160,20 @@ firewall-cmd --direct -add-rule ipv4 filter INPUT 0 -p tcp --dport 9000 -j ACCEP firewall-cmd --reload ``` +**控制端口 / 服务** + +可以通过两种方式控制端口的开放,一种是指定端口号另一种是指定服务名。虽然开放 http 服务就是开放了 80 端口,但是还是不能通过端口号来关闭,也就是说通过指定服务名开放的就要通过指定服务名关闭;通过指定端口号开放的就要通过指定端口号关闭。还有一个要注意的就是指定端口的时候一定要指定是什么协议,tcp 还是 udp。知道这个之后以后就不用每次先关防火墙了,可以让防火墙真正的生效。 + +```bash +firewall-cmd --add-service=mysql # 开放mysql端口 +firewall-cmd --remove-service=http # 阻止http端口 +firewall-cmd --list-services # 查看开放的服务 +firewall-cmd --add-port=3306/tcp # 开放通过tcp访问3306 +firewall-cmd --remove-port=80tcp # 阻止通过tcp访问3306 +firewall-cmd --add-port=233/udp # 开放通过udp访问233 +firewall-cmd --list-ports # 查看开放的端口 +``` + 伪装 IP ```bash From 13cfb6d29c354895be7b001c5774e2144ca66f6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Thu, 27 Jul 2017 13:40:34 +0800 Subject: [PATCH 0052/1284] Update iptables.md --- command/iptables.md | 242 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 242 insertions(+) diff --git a/command/iptables.md b/command/iptables.md index f09b594af55..b63a9e5ac57 100644 --- a/command/iptables.md +++ b/command/iptables.md @@ -166,5 +166,247 @@ iptables -L -n --line-numbers iptables -D INPUT 8 ``` +**开机启动网络转发规则** + +公网`210.14.67.7`让内网`192.168.188.0/24`上网 + +```bash +iptables -t nat -A POSTROUTING -s 192.168.188.0/24 -j SNAT --to-source 210.14.67.127 +``` + +**端口映射** + +本机的 2222 端口映射到内网 虚拟机的22 端口 + +```bash +iptables -t nat -A PREROUTING -d 210.14.67.127 -p tcp --dport 2222 -j DNAT --to-dest 192.168.188.115:22 +``` +iptables +=== + +Linux上常用的防火墙软件 + +## 补充说明 + +**iptables命令** 是Linux上常用的防火墙软件,是netfilter项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。 + +### 语法 + +``` +iptables(选项)(参数) +``` + +### 选项 + +``` +-t, --table table 对指定的表 table 进行操作, table 必须是 raw, nat,filter,mangle 中的一个。如果不指定此选项,默认的是 filter 表。 +-L, --list [chain] 列出链 chain 上面的所有规则,如果没有指定链,列出表上所有链的所有规则。 +-F, --flush [chain] 清空指定链 chain 上面的所有规则。如果没有指定链,清空该表上所有链的所有规则。 +-A, --append chain rule-specification 在指定链 chain 的末尾插入指定的规则,也就是说,这条规则会被放到最后,最后才会被执行。规则是由后面的匹配来指定。 +-D, --delete chain rule-specification -D, --delete chain rulenum 在指定的链 chain 中删除一个或多个指定规则。 +-I, --insert chain [rulenum] rule-specification 在链 chain 中的指定位置插入一条或多条规则。如果指定的规则号是1,则在链的头部插入。这也是默认的情况,如果没有指定规则号。 +-R, --replace chain rulenum rule-specification 用新规则替换指定链 chain 上面的指定规则,规则号从1开始。 +-Z, --zero [chain] :把指定链,或者表中的所有链上的所有计数器清零。 +-N, --new-chain chain 用指定的名字创建一个新的链。 +-p:指定要匹配的数据包协议类型; +-X, --delete-chain [chain] :删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。如果没有指定链名,则会删除该表中所有非内置的链。 +-E, --rename-chain old-chain new-chain :用指定的新名字去重命名指定的链。这并不会对链内部照成任何影响。 +-P, --policy chain target :为指定的链 chain 设置策略 target。注意,只有内置的链才允许有策略,用户自定义的是不允许的。 +-j, --jump target <指定目标> :即满足某条件时该执行什么样的动作。target 可以是内置的目标,比如 ACCEPT,也可以是用户自定义的链。 +-s, --source [!] address[/mask] :把指定的一个/一组地址作为源地址,按此规则进行过滤。当后面没有 mask 时,address 是一个地址,比如:192.168.1.1;当 mask 指定时,可以表示一组范围内的地址,比如:192.168.1.0/255.255.255.0。 +-d, --destination [!] address[/mask] :地址格式同上,但这里是指定地址为目的地址,按此进行过滤。 +-i, --in-interface [!] <网络接口name> :指定数据包的来自来自网络接口,比如最常见的 eth0 。注意:它只对 INPUT,FORWARD,PREROUTING 这三个链起作用。如果没有指定此选项, 说明可以来自任何一个网络接口。同前面类似,"!" 表示取反。 +-o, --out-interface [!] <网络接口name> :指定数据包出去的网络接口。只对 OUTPUT,FORWARD,POSTROUTING 三个链起作用。 +-h:显示帮助信息; +``` + + **iptables命令选项输入顺序:** + +``` +iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作 +``` + +表名包括: + +- **raw** :高级功能,如:网址过滤。 +- **mangle** :数据包修改(QOS),用于实现服务质量。 +- **net** :地址转换,用于网关路由器。 +- **filter** :包过滤,用于防火墙规则。 + +规则链名包括: + +- **INPUT链** :处理输入数据包。 +- **OUTPUT链** :处理输出数据包。 +- **PORWARD链** :处理转发数据包。 +- **PREROUTING链** :用于目标地址转换(DNAT)。 +- **POSTOUTING链** :用于源地址转换(SNAT)。 + +动作包括: + +- **ACCEPT** :接收数据包。 +- **DROP** :丢弃数据包。 +- **REDIRECT** :重定向、映射、透明代理。 +- **SNAT** :源地址转换。 +- **DNAT** :目标地址转换。 +- **MASQUERADE** :IP伪装(NAT),用于ADSL。 +- **LOG** :日志记录。 + +```bash + ┏╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍┓ + ┌───────────────┐ ┃ Network ┃ + │ table: filter │ ┗━━━━━━━┳━━━━━━━┛ + │ chain: INPUT │◀────┐ │ + └───────┬───────┘ │ ▼ + │ │ ┌───────────────────┐ + ┌ ▼ ┐ │ │ table: nat │ + │local process│ │ │ chain: PREROUTING │ + └ ┘ │ └─────────┬─────────┘ + │ │ │ + ▼ │ ▼ ┌─────────────────┐ +┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ │ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ │table: nat │ + Routing decision └───── outing decision ─────▶│chain: PREROUTING│ +┅┅┅┅┅┅┅┅┅┳┅┅┅┅┅┅┅┅┅ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ └────────┬────────┘ + │ │ + ▼ │ + ┌───────────────┐ │ + │ table: nat │ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ │ + │ chain: OUTPUT │ ┌─────▶ outing decision ◀──────────────┘ + └───────┬───────┘ │ ┅┅┅┅┅┅┅┅┳┅┅┅┅┅┅┅┅ + │ │ │ + ▼ │ ▼ + ┌───────────────┐ │ ┌────────────────────┐ + │ table: filter │ │ │ chain: POSTROUTING │ + │ chain: OUTPUT ├────┘ └──────────┬─────────┘ + └───────────────┘ │ + ▼ + ┏╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍┓ + ┃ Network ┃ + ┗━━━━━━━━━━━━━━━┛ +``` + + +### 实例 + +#### 清除已有iptables规则 + +``` +iptables -F +iptables -X +iptables -Z +``` + +#### 开放指定的端口 + +``` +iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT #允许本地回环接口(即运行本机访问本机) +iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #允许已建立的或相关连的通行 +iptables -A OUTPUT -j ACCEPT #允许所有本机向外的访问 +iptables -A INPUT -p tcp --dport 22 -j ACCEPT #允许访问22端口 +iptables -A INPUT -p tcp --dport 80 -j ACCEPT #允许访问80端口 +iptables -A INPUT -p tcp --dport 21 -j ACCEPT #允许ftp服务的21端口 +iptables -A INPUT -p tcp --dport 20 -j ACCEPT #允许FTP服务的20端口 +iptables -A INPUT -j reject #禁止其他未允许的规则访问 +iptables -A FORWARD -j REJECT #禁止其他未允许的规则访问 +``` + +#### 屏蔽IP + +``` +iptables -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的命令 +iptables -I INPUT -s 124.45.0.0/16 -j DROP #封IP段即从123.45.0.1到123.45.255.254的命令 +iptables -I INPUT -s 123.45.6.0/24 -j DROP #封IP段即从123.45.6.1到123.45.6.254的命令是 +``` + +#### 指定数据包出去的网络接口 + +只对 OUTPUT,FORWARD,POSTROUTING 三个链起作用。 + +```bash +iptables -A FORWARD -o eth0 +``` + +#### 查看已添加的iptables规则 + +``` +iptables -L -n -v +Chain INPUT (policy DROP 48106 packets, 2690K bytes) + pkts bytes target prot opt in out source destination + 5075 589K ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 + 191K 90M ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 +1499K 133M ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 +4364K 6351M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED + 6256 327K ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 + +Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) + pkts bytes target prot opt in out source destination + +Chain OUTPUT (policy ACCEPT 3382K packets, 1819M bytes) + pkts bytes target prot opt in out source destination + 5075 589K ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0 +``` + +#### 删除已添加的iptables规则 + +将所有iptables以序号标记显示,执行: + +``` +iptables -L -n --line-numbers +``` + +比如要删除INPUT里序号为8的规则,执行: + +```bash +iptables -D INPUT 8 +``` + +#### 启动网络转发规则 + +公网`210.14.67.7`让内网`192.168.188.0/24`上网 + +```bash +iptables -t nat -A POSTROUTING -s 192.168.188.0/24 -j SNAT --to-source 210.14.67.127 +``` + +#### 端口映射 + +本机的 2222 端口映射到内网 虚拟机的22 端口 + +```bash +iptables -t nat -A PREROUTING -d 210.14.67.127 -p tcp --dport 2222 -j DNAT --to-dest 192.168.188.115:22 +``` + +#### 字符串匹配 + +比如,我们要过滤所有TCP连接中的字符串`test`,一旦出现它我们就终止这个连接,我们可以这么做: + +```bash +iptables -A INPUT -p tcp -m string --algo kmp --string "test" -j REJECT --reject-with tcp-reset +iptables -L + +# Chain INPUT (policy ACCEPT) +# target prot opt source destination +# REJECT tcp -- anywhere anywhere STRING match "test" ALGO name kmp TO 65535 reject-with tcp-reset +# +# Chain FORWARD (policy ACCEPT) +# target prot opt source destination +# +# Chain OUTPUT (policy ACCEPT) +# target prot opt source destination +``` + +#### 阻止Windows蠕虫的攻击 + +```bash +iptables -I INPUT -j DROP -p tcp -s 0.0.0.0/0 -m string --algo kmp --string "cmd.exe" +``` + +#### 防止SYN洪水攻击 + +```bash +iptables -A INPUT -p tcp --syn -m limit --limit 5/second -j ACCEPT +``` + From 49d21d9db3468cd5b63272eec5e318ba8403914b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Thu, 27 Jul 2017 15:54:08 +0800 Subject: [PATCH 0053/1284] Update iptables.md --- command/iptables.md | 192 +++----------------------------------------- 1 file changed, 9 insertions(+), 183 deletions(-) diff --git a/command/iptables.md b/command/iptables.md index b63a9e5ac57..e1d4ce6cbe2 100644 --- a/command/iptables.md +++ b/command/iptables.md @@ -15,189 +15,6 @@ iptables(选项)(参数) ### 选项 -``` --t<表>:指定要操纵的表; --A:向规则链中添加条目; --D:从规则链中删除条目; --i:向规则链中插入条目; --R:替换规则链中的条目; --L:显示规则链中已有的条目; --F:清楚规则链中已有的条目; --Z:清空规则链中的数据包计算器和字节计数器; --N:创建新的用户自定义规则链; --P:定义规则链中的默认目标; --h:显示帮助信息; --p:指定要匹配的数据包协议类型; --s:指定要匹配的数据包源ip地址; --j<目标>:指定要跳转的目标; --i<网络接口>:指定数据包进入本机的网络接口; --o<网络接口>:指定数据包要离开本机所使用的网络接口。 -``` - - **iptables命令选项输入顺序:** - -``` -iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作 -``` - -表名包括: - -- **raw** :高级功能,如:网址过滤。 -- **mangle** :数据包修改(QOS),用于实现服务质量。 -- **net** :地址转换,用于网关路由器。 -- **filter** :包过滤,用于防火墙规则。 - -规则链名包括: - -- **INPUT链** :处理输入数据包。 -- **OUTPUT链** :处理输出数据包。 -- **PORWARD链** :处理转发数据包。 -- **PREROUTING链** :用于目标地址转换(DNAT)。 -- **POSTOUTING链** :用于源地址转换(SNAT)。 - -动作包括: - -- **ACCEPT** :接收数据包。 -- **DROP** :丢弃数据包。 -- **REDIRECT** :重定向、映射、透明代理。 -- **SNAT** :源地址转换。 -- **DNAT** :目标地址转换。 -- **MASQUERADE** :IP伪装(NAT),用于ADSL。 -- **LOG** :日志记录。 - -```bash - ┏╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍┓ - ┌───────────────┐ ┃ Network ┃ - │ table: filter │ ┗━━━━━━━┳━━━━━━━┛ - │ chain: INPUT │◀────┐ │ - └───────┬───────┘ │ ▼ - │ │ ┌───────────────────┐ - ┌ ▼ ┐ │ │ table: nat │ - │local process│ │ │ chain: PREROUTING │ - └ ┘ │ └─────────┬─────────┘ - │ │ │ - ▼ │ ▼ ┌─────────────────┐ -┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ │ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ │table: nat │ - Routing decision └───── outing decision ─────▶│chain: PREROUTING│ -┅┅┅┅┅┅┅┅┅┳┅┅┅┅┅┅┅┅┅ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ └────────┬────────┘ - │ │ - ▼ │ - ┌───────────────┐ │ - │ table: nat │ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ │ - │ chain: OUTPUT │ ┌─────▶ outing decision ◀──────────────┘ - └───────┬───────┘ │ ┅┅┅┅┅┅┅┅┳┅┅┅┅┅┅┅┅ - │ │ │ - ▼ │ ▼ - ┌───────────────┐ │ ┌────────────────────┐ - │ table: filter │ │ │ chain: POSTROUTING │ - │ chain: OUTPUT ├────┘ └──────────┬─────────┘ - └───────────────┘ │ - ▼ - ┏╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍┓ - ┃ Network ┃ - ┗━━━━━━━━━━━━━━━┛ -``` - - -### 实例 - - **清除已有iptables规则** - -``` -iptables -F -iptables -X -iptables -Z -``` - - **开放指定的端口** - -``` -iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT #允许本地回环接口(即运行本机访问本机) -iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #允许已建立的或相关连的通行 -iptables -A OUTPUT -j ACCEPT #允许所有本机向外的访问 -iptables -A INPUT -p tcp --dport 22 -j ACCEPT #允许访问22端口 -iptables -A INPUT -p tcp --dport 80 -j ACCEPT #允许访问80端口 -iptables -A INPUT -p tcp --dport 21 -j ACCEPT #允许ftp服务的21端口 -iptables -A INPUT -p tcp --dport 20 -j ACCEPT #允许FTP服务的20端口 -iptables -A INPUT -j reject #禁止其他未允许的规则访问 -iptables -A FORWARD -j REJECT #禁止其他未允许的规则访问 -``` - - **屏蔽IP** - -``` -iptables -I INPUT -s 123.45.6.7 -j DROP #屏蔽单个IP的命令 -iptables -I INPUT -s 123.0.0.0/8 -j DROP #封整个段即从123.0.0.1到123.255.255.254的命令 -iptables -I INPUT -s 124.45.0.0/16 -j DROP #封IP段即从123.45.0.1到123.45.255.254的命令 -iptables -I INPUT -s 123.45.6.0/24 -j DROP #封IP段即从123.45.6.1到123.45.6.254的命令是 -``` - - **查看已添加的iptables规则** - -``` -iptables -L -n -v -Chain INPUT (policy DROP 48106 packets, 2690K bytes) - pkts bytes target prot opt in out source destination - 5075 589K ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 - 191K 90M ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 -1499K 133M ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 -4364K 6351M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED - 6256 327K ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 - -Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) - pkts bytes target prot opt in out source destination - -Chain OUTPUT (policy ACCEPT 3382K packets, 1819M bytes) - pkts bytes target prot opt in out source destination - 5075 589K ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0 -``` - - **删除已添加的iptables规则** - -将所有iptables以序号标记显示,执行: - -``` -iptables -L -n --line-numbers -``` - -比如要删除INPUT里序号为8的规则,执行: - -``` -iptables -D INPUT 8 -``` - -**开机启动网络转发规则** - -公网`210.14.67.7`让内网`192.168.188.0/24`上网 - -```bash -iptables -t nat -A POSTROUTING -s 192.168.188.0/24 -j SNAT --to-source 210.14.67.127 -``` - -**端口映射** - -本机的 2222 端口映射到内网 虚拟机的22 端口 - -```bash -iptables -t nat -A PREROUTING -d 210.14.67.127 -p tcp --dport 2222 -j DNAT --to-dest 192.168.188.115:22 -``` -iptables -=== - -Linux上常用的防火墙软件 - -## 补充说明 - -**iptables命令** 是Linux上常用的防火墙软件,是netfilter项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。 - -### 语法 - -``` -iptables(选项)(参数) -``` - -### 选项 - ``` -t, --table table 对指定的表 table 进行操作, table 必须是 raw, nat,filter,mangle 中的一个。如果不指定此选项,默认的是 filter 表。 -L, --list [chain] 列出链 chain 上面的所有规则,如果没有指定链,列出表上所有链的所有规则。 @@ -287,6 +104,15 @@ iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协 ### 实例 +#### 列出已设置的规则 + +```bash +iptables -L -t nat # 列出 nat 上面的所有规则 +# ^ -t 参数指定,必须是 raw, nat,filter,mangle 中的一个 +iptables -L -t nat --line-numbers # 规则带编号 +iptables -L INPUT +``` + #### 清除已有iptables规则 ``` From 9fa401f54540da7608fa0c9114344c2ff943edb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Thu, 27 Jul 2017 16:55:00 +0800 Subject: [PATCH 0054/1284] Update iptables.md --- command/iptables.md | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/command/iptables.md b/command/iptables.md index e1d4ce6cbe2..cbc496dfa26 100644 --- a/command/iptables.md +++ b/command/iptables.md @@ -106,19 +106,38 @@ iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协 #### 列出已设置的规则 +> iptables -L [-t 表名] [链名] + +- 四个表名 `raw`,`nat`,`filter`,`mangle` +- 五个规则链名 `INPUT`、`OUTPUT`、`FORWARD`、`PREROUTING`、`POSTROUTING` +- filter表包含`INPUT`、`OUTPUT`、`FORWARD`三个规则链 + ```bash iptables -L -t nat # 列出 nat 上面的所有规则 # ^ -t 参数指定,必须是 raw, nat,filter,mangle 中的一个 iptables -L -t nat --line-numbers # 规则带编号 iptables -L INPUT + +iptables -L -nv # 查看,这个列表看起来更详细 ``` #### 清除已有iptables规则 +```bash +iptables -F INPUT # 清空指定链 INPUT 上面的所有规则 +iptables -X INPUT # 删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。 + # 如果没有指定链名,则会删除该表中所有非内置的链。 +iptables -Z INPUT # 把指定链,或者表中的所有链上的所有计数器清零。 ``` -iptables -F -iptables -X -iptables -Z + +#### 删除一条规则 + +```bash +# 添加一条规则 +iptables -A INPUT -s 192.168.1.5 -j DROP + +# 删除上面添加的规则,删除用-D参数 +iptables -D INPUT -s 192.168.1.5 -j DROP ``` #### 开放指定的端口 From 31c36aa5807d49e0c5eaf58550278619b26949d1 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Fri, 28 Jul 2017 10:51:23 +0800 Subject: [PATCH 0055/1284] update iptables --- command/iptables.md | 103 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 84 insertions(+), 19 deletions(-) diff --git a/command/iptables.md b/command/iptables.md index cbc496dfa26..d2c7b4c46c3 100644 --- a/command/iptables.md +++ b/command/iptables.md @@ -7,6 +7,32 @@ Linux上常用的防火墙软件 **iptables命令** 是Linux上常用的防火墙软件,是netfilter项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。 + + +- [补充说明](#补充说明) + - [语法](#语法) + - [选项](#选项) + - [命令选项输入顺序](#命令选项输入顺序) + - [工作机制](#工作机制) + - [防火墙的策略](#防火墙的策略) + - [防火墙的策略](#防火墙的策略-1) + - [实例](#实例) + - [列出已设置的规则](#列出已设置的规则) + - [清除已有iptables规则](#清除已有iptables规则) + - [删除一条规则](#删除一条规则) + - [开放指定的端口](#开放指定的端口) + - [屏蔽IP](#屏蔽ip) + - [指定数据包出去的网络接口](#指定数据包出去的网络接口) + - [查看已添加的iptables规则](#查看已添加的iptables规则) + - [删除已添加的iptables规则](#删除已添加的iptables规则) + - [启动网络转发规则](#启动网络转发规则) + - [端口映射](#端口映射) + - [字符串匹配](#字符串匹配) + - [阻止Windows蠕虫的攻击](#阻止windows蠕虫的攻击) + - [防止SYN洪水攻击](#防止syn洪水攻击) + + + ### 语法 ``` @@ -15,42 +41,46 @@ iptables(选项)(参数) ### 选项 -``` +```bash -t, --table table 对指定的表 table 进行操作, table 必须是 raw, nat,filter,mangle 中的一个。如果不指定此选项,默认的是 filter 表。 + +# 通用匹配:源地址目标地址的匹配 +-p:指定要匹配的数据包协议类型; +-s, --source [!] address[/mask] :把指定的一个/一组地址作为源地址,按此规则进行过滤。当后面没有 mask 时,address 是一个地址,比如:192.168.1.1;当 mask 指定时,可以表示一组范围内的地址,比如:192.168.1.0/255.255.255.0。 +-d, --destination [!] address[/mask] :地址格式同上,但这里是指定地址为目的地址,按此进行过滤。 +-i, --in-interface [!] <网络接口name> :指定数据包的来自来自网络接口,比如最常见的 eth0 。注意:它只对 INPUT,FORWARD,PREROUTING 这三个链起作用。如果没有指定此选项, 说明可以来自任何一个网络接口。同前面类似,"!" 表示取反。 +-o, --out-interface [!] <网络接口name> :指定数据包出去的网络接口。只对 OUTPUT,FORWARD,POSTROUTING 三个链起作用。 + +# 查看管理命令 -L, --list [chain] 列出链 chain 上面的所有规则,如果没有指定链,列出表上所有链的所有规则。 --F, --flush [chain] 清空指定链 chain 上面的所有规则。如果没有指定链,清空该表上所有链的所有规则。 + +# 规则管理命令 -A, --append chain rule-specification 在指定链 chain 的末尾插入指定的规则,也就是说,这条规则会被放到最后,最后才会被执行。规则是由后面的匹配来指定。 --D, --delete chain rule-specification -D, --delete chain rulenum 在指定的链 chain 中删除一个或多个指定规则。 -I, --insert chain [rulenum] rule-specification 在链 chain 中的指定位置插入一条或多条规则。如果指定的规则号是1,则在链的头部插入。这也是默认的情况,如果没有指定规则号。 --R, --replace chain rulenum rule-specification 用新规则替换指定链 chain 上面的指定规则,规则号从1开始。 --Z, --zero [chain] :把指定链,或者表中的所有链上的所有计数器清零。 +-D, --delete chain rule-specification -D, --delete chain rulenum 在指定的链 chain 中删除一个或多个指定规则。 +-R num:Replays替换/修改第几条规则 + +# 链管理命令(这都是立即生效的) +-P, --policy chain target :为指定的链 chain 设置策略 target。注意,只有内置的链才允许有策略,用户自定义的是不允许的。 +-F, --flush [chain] 清空指定链 chain 上面的所有规则。如果没有指定链,清空该表上所有链的所有规则。 -N, --new-chain chain 用指定的名字创建一个新的链。 --p:指定要匹配的数据包协议类型; -X, --delete-chain [chain] :删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。如果没有指定链名,则会删除该表中所有非内置的链。 -E, --rename-chain old-chain new-chain :用指定的新名字去重命名指定的链。这并不会对链内部照成任何影响。 --P, --policy chain target :为指定的链 chain 设置策略 target。注意,只有内置的链才允许有策略,用户自定义的是不允许的。 +-Z, --zero [chain] :把指定链,或者表中的所有链上的所有计数器清零。 + -j, --jump target <指定目标> :即满足某条件时该执行什么样的动作。target 可以是内置的目标,比如 ACCEPT,也可以是用户自定义的链。 --s, --source [!] address[/mask] :把指定的一个/一组地址作为源地址,按此规则进行过滤。当后面没有 mask 时,address 是一个地址,比如:192.168.1.1;当 mask 指定时,可以表示一组范围内的地址,比如:192.168.1.0/255.255.255.0。 --d, --destination [!] address[/mask] :地址格式同上,但这里是指定地址为目的地址,按此进行过滤。 --i, --in-interface [!] <网络接口name> :指定数据包的来自来自网络接口,比如最常见的 eth0 。注意:它只对 INPUT,FORWARD,PREROUTING 这三个链起作用。如果没有指定此选项, 说明可以来自任何一个网络接口。同前面类似,"!" 表示取反。 --o, --out-interface [!] <网络接口name> :指定数据包出去的网络接口。只对 OUTPUT,FORWARD,POSTROUTING 三个链起作用。 -h:显示帮助信息; ``` - **iptables命令选项输入顺序:** +#### 命令选项输入顺序 ``` iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作 ``` -表名包括: - -- **raw** :高级功能,如:网址过滤。 -- **mangle** :数据包修改(QOS),用于实现服务质量。 -- **net** :地址转换,用于网关路由器。 -- **filter** :包过滤,用于防火墙规则。 +#### 工作机制 -规则链名包括: +规则链名包括(也被称为五个钩子函数(hook functions)): - **INPUT链** :处理输入数据包。 - **OUTPUT链** :处理输出数据包。 @@ -58,6 +88,41 @@ iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协 - **PREROUTING链** :用于目标地址转换(DNAT)。 - **POSTOUTING链** :用于源地址转换(SNAT)。 +#### 防火墙的策略 + +防火墙策略一般分为两种,一种叫`通`策略,一种叫`堵`策略,通策略,默认门是关着的,必须要定义谁能进。堵策略则是,大门是洞开的,但是你必须有身份认证,否则不能进。所以我们要定义,让进来的进来,让出去的出去,`所以通,是要全通,而堵,则是要选择`。当我们定义的策略的时候,要分别定义多条功能,其中:定义数据包中允许或者不允许的策略,filter过滤的功能,而定义地址转换的功能的则是nat选项。为了让这些功能交替工作,我们制定出了“表”这个定义,来定义、区分各种不同的工作功能和处理方式。 + +我们现在用的比较多个功能有3个: + +1. filter 定义允许或者不允许的,只能做在3个链上:INPUT ,FORWARD ,OUTPUT +2. nat 定义地址转换的,也只能做在3个链上:PREROUTING ,OUTPUT ,POSTROUTING +3. mangle功能:修改报文原数据,是5个链都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING + +我们修改报文原数据就是来修改TTL的。能够实现将数据包的元数据拆开,在里面做标记/修改内容的。而防火墙标记,其实就是靠mangle来实现的。 + +小扩展: + +- 对于filter来讲一般只能做在3个链上:INPUT ,FORWARD ,OUTPUT +- 对于nat来讲一般也只能做在3个链上:PREROUTING ,OUTPUT ,POSTROUTING +- 而mangle则是5个链都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING + +iptables/netfilter(这款软件)是工作在用户空间的,它可以让规则进行生效的,本身不是一种服务,而且规则是立即生效的。而我们iptables现在被做成了一个服务,可以进行启动,停止的。启动,则将规则直接生效,停止,则将规则撤销。 + +iptables还支持自己定义链。但是自己定义的链,必须是跟某种特定的链关联起来的。在一个关卡设定,指定当有数据的时候专门去找某个特定的链来处理,当那个链处理完之后,再返回。接着在特定的链中继续检查。 + +注意:规则的次序非常关键,`谁的规则越严格,应该放的越靠前`,而检查规则的时候,是按照从上往下的方式进行检查的。 + +#### 防火墙的策略 + +防火墙策略一般分为两种,一种叫`通`策略,一种叫`堵`策略,通策略,默认门是关着的,必须要定义谁能进。堵策略则是,大门是洞开的,但是你必须有身份认证,否则不能进,`所以通,是要全通,而堵,则是要选择`。 + +表名包括: + +- **raw** :高级功能,如:网址过滤。 +- **mangle** :数据包修改(QOS),用于实现服务质量。 +- **net** :地址转换,用于网关路由器。 +- **filter** :包过滤,用于防火墙规则。 + 动作包括: - **ACCEPT** :接收数据包。 From eb040f140285c0e8c371e56365459aa64da07470 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 28 Jul 2017 12:17:42 +0800 Subject: [PATCH 0056/1284] Update ss.md --- command/ss.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/command/ss.md b/command/ss.md index 94e70bdfaf1..c9872c2e3a6 100644 --- a/command/ss.md +++ b/command/ss.md @@ -1,7 +1,7 @@ ss === -获取socket统计信息 +获取socket统计信息,iproute2 包附带的另一个工具,允许你查询 socket 的有关统计信息。 ## 补充说明 @@ -193,5 +193,16 @@ UNCONN 0 0 127.0.0.1:ntp UNCONN 0 0 *:ntp *:* ``` +#### 出所有端口为 22(ssh)的连接 + +```bash +ss state all sport = :ssh + +Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port +tcp LISTEN 0 128 *:ssh *:* +tcp ESTAB 0 0 192.168.0.136:ssh 192.168.0.102:46540 +tcp LISTEN 0 128 :::ssh :::* +``` + From 10928cec0a69adf6ce8c05778c033c6bb89024eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 28 Jul 2017 14:04:58 +0800 Subject: [PATCH 0057/1284] Update pstree.md --- command/pstree.md | 108 ++++++++++++++++++++++++++-------------------- 1 file changed, 61 insertions(+), 47 deletions(-) diff --git a/command/pstree.md b/command/pstree.md index 5867ddeb5f5..13e07133454 100644 --- a/command/pstree.md +++ b/command/pstree.md @@ -1,47 +1,61 @@ -pstree -=== - -以树状图的方式展现进程之间的派生关系 - -## 补充说明 - -**pstree命令** 以树状图的方式展现进程之间的派生关系,显示效果比较直观。 - -### 语法 - -``` -pstree(选项) -``` - -### 选项 - -``` --a:显示每个程序的完整指令,包含路径,参数或是常驻服务的标示; --c:不使用精简标示法; --G:使用VT100终端机的列绘图字符; --h:列出树状图时,特别标明现在执行的程序; --H<程序识别码>:此参数的效果和指定"-h"参数类似,但特别标明指定的程序; --l:采用长列格式显示树状图; --n:用程序识别码排序。预设是以程序名称来排序; --p:显示程序识别码; --u:显示用户名称; --U:使用UTF-8列绘图字符; --V:显示版本信息。 -``` - -### 实例 - -显示当前所有进程的进程号和进程id - -``` -pstree -p -``` - -显示所有进程的所有详细信息,遇到相同的进程名可以压缩显示。 - -``` -pstree -a -``` - - - \ No newline at end of file +pstree +=== + +以树状图的方式展现进程之间的派生关系 + +## 补充说明 + +**pstree命令** 以树状图的方式展现进程之间的派生关系,显示效果比较直观。 + +### 语法 + +``` +pstree(选项) +``` + +### 选项 + +``` +-a:显示每个程序的完整指令,包含路径,参数或是常驻服务的标示; +-c:不使用精简标示法; +-G:使用VT100终端机的列绘图字符; +-h:列出树状图时,特别标明现在执行的程序; +-H<程序识别码>:此参数的效果和指定"-h"参数类似,但特别标明指定的程序; +-l:采用长列格式显示树状图; +-n:用程序识别码排序。预设是以程序名称来排序; +-p:显示程序识别码; +-u:显示用户名称; +-U:使用UTF-8列绘图字符; +-V:显示版本信息。 +``` + +### 实例 + +显示当前所有进程的进程号和进程id + +``` +pstree -p +``` + +显示所有进程的所有详细信息,遇到相同的进程名可以压缩显示。 + +```bash +pstree -a + +# |-sshd(1221)-+-sshd(2768)---bash(2770)-+-grep(2810) +# | `-sshd(2807)---sshd(2808) +``` + +获取 SSH 会话的 PID + +``` +pstree -p | grep ssh + +# |-sshd(1221)-+-sshd(2768)---bash(2770)-+-grep(2810) +# | `-sshd(2807)---sshd(2808) +``` + +从上方的输出中,你可以看到 sshd 进程与分支的树形图。sshd 的主进程是 sshd(1221),另两个分支分别为 sshd(2768) 和 sshd(2807)。 + + + From 4a1721637ebb3e091d3857dfe2bc037bafec1707 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 28 Jul 2017 14:05:25 +0800 Subject: [PATCH 0058/1284] Update pstree.md --- command/pstree.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/command/pstree.md b/command/pstree.md index 13e07133454..b55087135a8 100644 --- a/command/pstree.md +++ b/command/pstree.md @@ -41,9 +41,6 @@ pstree -p ```bash pstree -a - -# |-sshd(1221)-+-sshd(2768)---bash(2770)-+-grep(2810) -# | `-sshd(2807)---sshd(2808) ``` 获取 SSH 会话的 PID From 0a50037768e977e318eda7a2c70fc00bc21bed41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 28 Jul 2017 19:33:47 +0800 Subject: [PATCH 0059/1284] Update ip.md --- command/ip.md | 196 ++++++++++++++++++++++++++------------------------ 1 file changed, 101 insertions(+), 95 deletions(-) diff --git a/command/ip.md b/command/ip.md index 5dc7a0dd07e..dc23ec285c9 100644 --- a/command/ip.md +++ b/command/ip.md @@ -1,95 +1,101 @@ -ip -=== - -网络配置工具 - -## 补充说明 - -**ip命令** 用来显示或操纵Linux主机的路由、网络设备、策略路由和隧道,是Linux下较新的功能强大的网络配置工具。 - -### 语法 - -``` -ip(选项)(参数) -``` - -### 选项 - -``` --V:显示指令版本信息; --s:输出更详细的信息; --f:强制使用指定的协议族; --4:指定使用的网络层协议是IPv4协议; --6:指定使用的网络层协议是IPv6协议; --0:输出信息每条记录输出一行,即使内容较多也不换行显示; --r:显示主机时,不使用IP地址,而使用主机的域名。 -``` - -### 参数 - -``` -网络对象:指定要管理的网络对象; -具体操作:对指定的网络对象完成具体操作; -help:显示网络对象支持的操作命令的帮助信息。 -``` - -### 实例 - - **用ip命令显示网络设备的运行状态** - -``` -[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 -2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000 - link/ether 00:16:3e:00:1e:51 brd ff:ff:ff:ff:ff:ff -3: eth1: mtu 1500 qdisc pfifo_fast qlen 1000 - link/ether 00:16:3e:00:1e:52 brd ff:ff:ff:ff:ff:ff -``` - - **显示更加详细的设备信息** - -``` -[root@localhost ~]# ip -s link list -1: lo: mtu 16436 qdisc noqueue - link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 - RX: bytes packets errors dropped overrun mcast - 5082831 56145 0 0 0 0 - TX: bytes packets errors dropped carrier collsns - 5082831 56145 0 0 0 0 -2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000 - link/ether 00:16:3e:00:1e:51 brd ff:ff:ff:ff:ff:ff - RX: bytes packets errors dropped overrun mcast - 3641655380 62027099 0 0 0 0 - TX: bytes packets errors dropped carrier collsns - 6155236 89160 0 0 0 0 -3: eth1: mtu 1500 qdisc pfifo_fast qlen 1000 - link/ether 00:16:3e:00:1e:52 brd ff:ff:ff:ff:ff:ff - RX: bytes packets errors dropped overrun mcast - 2562136822 488237847 0 0 0 0 - TX: bytes packets errors dropped carrier collsns - 3486617396 9691081 0 0 0 0 -``` - - **显示核心路由表** - -``` -[root@localhost ~]# ip route list -112.124.12.0/22 dev eth1 proto kernel scope link src 112.124.15.130 -10.160.0.0/20 dev eth0 proto kernel scope link src 10.160.7.81 -192.168.0.0/16 via 10.160.15.247 dev eth0 -172.16.0.0/12 via 10.160.15.247 dev eth0 -10.0.0.0/8 via 10.160.15.247 dev eth0 -default via 112.124.15.247 dev eth1 -``` - - **显示邻居表** - -``` -[root@localhost ~]# ip neigh list -112.124.15.247 dev eth1 lladdr 00:00:0c:9f:f3:88 REACHABLE -10.160.15.247 dev eth0 lladdr 00:00:0c:9f:f2:c0 STALE -``` - - - \ No newline at end of file +ip +=== + +网络配置工具 + +## 补充说明 + +**ip命令** 用来显示或操纵Linux主机的路由、网络设备、策略路由和隧道,是Linux下较新的功能强大的网络配置工具。 + +### 语法 + +``` +ip(选项)(参数) +``` + +### 选项 + +``` +-V:显示指令版本信息; +-s:输出更详细的信息; +-f:强制使用指定的协议族; +-4:指定使用的网络层协议是IPv4协议; +-6:指定使用的网络层协议是IPv6协议; +-0:输出信息每条记录输出一行,即使内容较多也不换行显示; +-r:显示主机时,不使用IP地址,而使用主机的域名。 +``` + +### 参数 + +``` +网络对象:指定要管理的网络对象; +具体操作:对指定的网络对象完成具体操作; +help:显示网络对象支持的操作命令的帮助信息。 +``` + +### 实例 + + **用ip命令显示网络设备的运行状态** + +``` +[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 +2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000 + link/ether 00:16:3e:00:1e:51 brd ff:ff:ff:ff:ff:ff +3: eth1: mtu 1500 qdisc pfifo_fast qlen 1000 + link/ether 00:16:3e:00:1e:52 brd ff:ff:ff:ff:ff:ff +``` + + **显示更加详细的设备信息** + +``` +[root@localhost ~]# ip -s link list +1: lo: mtu 16436 qdisc noqueue + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + RX: bytes packets errors dropped overrun mcast + 5082831 56145 0 0 0 0 + TX: bytes packets errors dropped carrier collsns + 5082831 56145 0 0 0 0 +2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000 + link/ether 00:16:3e:00:1e:51 brd ff:ff:ff:ff:ff:ff + RX: bytes packets errors dropped overrun mcast + 3641655380 62027099 0 0 0 0 + TX: bytes packets errors dropped carrier collsns + 6155236 89160 0 0 0 0 +3: eth1: mtu 1500 qdisc pfifo_fast qlen 1000 + link/ether 00:16:3e:00:1e:52 brd ff:ff:ff:ff:ff:ff + RX: bytes packets errors dropped overrun mcast + 2562136822 488237847 0 0 0 0 + TX: bytes packets errors dropped carrier collsns + 3486617396 9691081 0 0 0 0 +``` + + **显示核心路由表** + +``` +[root@localhost ~]# ip route list +112.124.12.0/22 dev eth1 proto kernel scope link src 112.124.15.130 +10.160.0.0/20 dev eth0 proto kernel scope link src 10.160.7.81 +192.168.0.0/16 via 10.160.15.247 dev eth0 +172.16.0.0/12 via 10.160.15.247 dev eth0 +10.0.0.0/8 via 10.160.15.247 dev eth0 +default via 112.124.15.247 dev eth1 +``` + + **显示邻居表** + +``` +[root@localhost ~]# ip neigh list +112.124.15.247 dev eth1 lladdr 00:00:0c:9f:f3:88 REACHABLE +10.160.15.247 dev eth0 lladdr 00:00:0c:9f:f2:c0 STALE +``` + +**获取主机所有网络接口** + +``` +ip link | grep ^[0-9] | awk -F: '{print $2}' +``` + + + From 686edb309a7111d258d9c453bfefc42b724ae3aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 28 Jul 2017 19:36:17 +0800 Subject: [PATCH 0060/1284] Update ip.md --- command/ip.md | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/command/ip.md b/command/ip.md index dc23ec285c9..740a9a3e03a 100644 --- a/command/ip.md +++ b/command/ip.md @@ -35,7 +35,13 @@ help:显示网络对象支持的操作命令的帮助信息。 ### 实例 - **用ip命令显示网络设备的运行状态** +```bash +ip route show # 显示系统路由 +ip route add default via 192.168.1.254 # 设置系统默认路由 +ip route delete 192.168.1.0/24 dev eth0 # 删除路由 +``` + +**用ip命令显示网络设备的运行状态** ``` [root@localhost ~]# ip link list @@ -47,7 +53,7 @@ help:显示网络对象支持的操作命令的帮助信息。 link/ether 00:16:3e:00:1e:52 brd ff:ff:ff:ff:ff:ff ``` - **显示更加详细的设备信息** +**显示更加详细的设备信息** ``` [root@localhost ~]# ip -s link list @@ -71,7 +77,7 @@ help:显示网络对象支持的操作命令的帮助信息。 3486617396 9691081 0 0 0 0 ``` - **显示核心路由表** +**显示核心路由表** ``` [root@localhost ~]# ip route list @@ -83,7 +89,7 @@ help:显示网络对象支持的操作命令的帮助信息。 default via 112.124.15.247 dev eth1 ``` - **显示邻居表** +**显示邻居表** ``` [root@localhost ~]# ip neigh list @@ -97,5 +103,4 @@ default via 112.124.15.247 dev eth1 ip link | grep ^[0-9] | awk -F: '{print $2}' ``` - From bfc7aa78c4da8b6756ebd873244475dc3452fc9d Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Sat, 12 Aug 2017 10:32:20 +0800 Subject: [PATCH 0061/1284] update iptables.md --- command/iptables.md | 40 +++++++++++++++++----------------------- 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/command/iptables.md b/command/iptables.md index d2c7b4c46c3..db1172d297e 100644 --- a/command/iptables.md +++ b/command/iptables.md @@ -18,13 +18,12 @@ Linux上常用的防火墙软件 - [防火墙的策略](#防火墙的策略-1) - [实例](#实例) - [列出已设置的规则](#列出已设置的规则) - - [清除已有iptables规则](#清除已有iptables规则) - - [删除一条规则](#删除一条规则) + - [清除已有规则](#清除已有规则) + - [删除已添加的规则](#删除已添加的规则) - [开放指定的端口](#开放指定的端口) - [屏蔽IP](#屏蔽ip) - [指定数据包出去的网络接口](#指定数据包出去的网络接口) - - [查看已添加的iptables规则](#查看已添加的iptables规则) - - [删除已添加的iptables规则](#删除已添加的iptables规则) + - [查看已添加的规则](#查看已添加的规则) - [启动网络转发规则](#启动网络转发规则) - [端口映射](#端口映射) - [字符串匹配](#字符串匹配) @@ -186,7 +185,7 @@ iptables -L INPUT iptables -L -nv # 查看,这个列表看起来更详细 ``` -#### 清除已有iptables规则 +#### 清除已有规则 ```bash iptables -F INPUT # 清空指定链 INPUT 上面的所有规则 @@ -195,14 +194,23 @@ iptables -X INPUT # 删除指定的链,这个链必须没有被其它任何 iptables -Z INPUT # 把指定链,或者表中的所有链上的所有计数器清零。 ``` -#### 删除一条规则 +#### 删除已添加的规则 ```bash # 添加一条规则 iptables -A INPUT -s 192.168.1.5 -j DROP +``` + +将所有iptables以序号标记显示,执行: + +``` +iptables -L -n --line-numbers +``` + +比如要删除INPUT里序号为8的规则,执行: -# 删除上面添加的规则,删除用-D参数 -iptables -D INPUT -s 192.168.1.5 -j DROP +```bash +iptables -D INPUT 8 ``` #### 开放指定的端口 @@ -237,7 +245,7 @@ iptables -I INPUT -s 123.45.6.0/24 -j DROP #封IP段即从123.45.6.1到123.45 iptables -A FORWARD -o eth0 ``` -#### 查看已添加的iptables规则 +#### 查看已添加的规则 ``` iptables -L -n -v @@ -257,20 +265,6 @@ Chain OUTPUT (policy ACCEPT 3382K packets, 1819M bytes) 5075 589K ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0 ``` -#### 删除已添加的iptables规则 - -将所有iptables以序号标记显示,执行: - -``` -iptables -L -n --line-numbers -``` - -比如要删除INPUT里序号为8的规则,执行: - -```bash -iptables -D INPUT 8 -``` - #### 启动网络转发规则 公网`210.14.67.7`让内网`192.168.188.0/24`上网 From bee7c00c0bf3d190e84fcf9d0e9ed827dd57505b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Mon, 14 Aug 2017 15:52:19 +0800 Subject: [PATCH 0062/1284] Update cp.md --- command/cp.md | 180 +++++++++++++++++++++++++++----------------------- 1 file changed, 97 insertions(+), 83 deletions(-) diff --git a/command/cp.md b/command/cp.md index 120085a4839..dc95bf088f2 100644 --- a/command/cp.md +++ b/command/cp.md @@ -1,83 +1,97 @@ -cp -=== - -将源文件或目录复制到目标文件或目录中 - -## 补充说明 - -**cp命令** 用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。 - -### 语法 - -``` -cp(选项)(参数) -``` - -### 选项 - -``` --a:此参数的效果和同时指定"-dpR"参数相同; --d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录; --f:强行复制文件或目录,不论目标文件或目录是否已存在; --i:覆盖既有文件之前先询问用户; --l:对源文件建立硬连接,而非复制文件; --p:保留源文件或目录的属性; --R/r:递归处理,将指定目录下的所有文件与子目录一并处理; --s:对源文件建立符号连接,而非复制文件; --u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件; --S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀; --b:覆盖已存在的文件目标前将目标文件备份; --v:详细显示命令执行的操作。 -``` - -### 参数 - -* 源文件:制定源文件列表。默认情况下,cp命令不能复制目录,如果要复制目录,则必须使用`-R`选项; -* 目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。 - -### 实例 - -如果把一个文件复制到一个目标文件中,而目标文件已经存在,那么,该目标文件的内容将被破坏。此命令中所有参数既可以是绝对路径名,也可以是相对路径名。通常会用到点`.`或点点`..`的形式。例如,下面的命令将指定文件复制到当前目录下: - -``` -cp ../mary/homework/assign . -``` - -所有目标文件指定的目录必须是己经存在的,cp命令不能创建目录。如果没有文件复制的权限,则系统会显示出错信息。 - -将文件file复制到目录`/usr/men/tmp`下,并改名为file1 - -``` -cp file /usr/men/tmp/file1 -``` - -将目录`/usr/men`下的所有文件及其子目录复制到目录`/usr/zh`中 - -``` -cp -r /usr/men /usr/zh -``` - -交互式地将目录`/usr/men`中的以m打头的所有.c文件复制到目录`/usr/zh`中 - -``` -cp -i /usr/men m*.c /usr/zh -``` - -我们在Linux下使用cp命令复制文件时候,有时候会需要覆盖一些同名文件,覆盖文件的时候都会有提示:需要不停的按Y来确定执行覆盖。文件数量不多还好,但是要是几百个估计按Y都要吐血了,于是折腾来半天总结了一个方法: - -``` -cp aaa/* /bbb -复制目录aaa下所有到/bbb目录下,这时如果/bbb目录下有和aaa同名的文件,需要按Y来确认并且会略过aaa目录下的子目录。 - -cp -r aaa/* /bbb -这次依然需要按Y来确认操作,但是没有忽略子目录。 - -cp -r -a aaa/* /bbb -依然需要按Y来确认操作,并且把aaa目录以及子目录和文件属性也传递到了/bbb。 - -\cp -r -a aaa/* /bbb -成功,没有提示按Y、传递了目录属性、没有略过目录。 -``` - - - \ No newline at end of file +cp +=== + +将源文件或目录复制到目标文件或目录中 + +## 补充说明 + +**cp命令** 用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。 + +### 语法 + +``` +cp(选项)(参数) +``` + +### 选项 + +``` +-a:此参数的效果和同时指定"-dpR"参数相同; +-d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录; +-f:强行复制文件或目录,不论目标文件或目录是否已存在; +-i:覆盖既有文件之前先询问用户; +-l:对源文件建立硬连接,而非复制文件; +-p:保留源文件或目录的属性; +-R/r:递归处理,将指定目录下的所有文件与子目录一并处理; +-s:对源文件建立符号连接,而非复制文件; +-u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件; +-S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀; +-b:覆盖已存在的文件目标前将目标文件备份; +-v:详细显示命令执行的操作。 +``` + +### 参数 + +* 源文件:制定源文件列表。默认情况下,cp命令不能复制目录,如果要复制目录,则必须使用`-R`选项; +* 目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。 + +### 实例 + +下面的第一行中是 cp 命令和具体的参数(-r 是“递归”, -u 是“更新”,-v 是“详细”)。接下来的三行显示被复制文件的信息,最后一行显示命令行提示符。 + +``` +cp -r -u -v /usr/men/tmp ~/men/tmp +``` + +版本备份 `--backup=numbered` 参数意思为“我要做个备份,而且是带编号的连续备份”。所以一个备份就是 1 号,第二个就是 2 号,等等。 + +```bash +$ cp --force --backup=numbered test1.py test1.py +$ ls +test1.py test1.py.~1~ test1.py.~2~ +``` + +如果把一个文件复制到一个目标文件中,而目标文件已经存在,那么,该目标文件的内容将被破坏。此命令中所有参数既可以是绝对路径名,也可以是相对路径名。通常会用到点`.`或点点`..`的形式。例如,下面的命令将指定文件复制到当前目录下: + +``` +cp ../mary/homework/assign . +``` + +所有目标文件指定的目录必须是己经存在的,cp命令不能创建目录。如果没有文件复制的权限,则系统会显示出错信息。 + +将文件file复制到目录`/usr/men/tmp`下,并改名为file1 + +``` +cp file /usr/men/tmp/file1 +``` + +将目录`/usr/men`下的所有文件及其子目录复制到目录`/usr/zh`中 + +``` +cp -r /usr/men /usr/zh +``` + +交互式地将目录`/usr/men`中的以m打头的所有.c文件复制到目录`/usr/zh`中 + +``` +cp -i /usr/men m*.c /usr/zh +``` + +我们在Linux下使用cp命令复制文件时候,有时候会需要覆盖一些同名文件,覆盖文件的时候都会有提示:需要不停的按Y来确定执行覆盖。文件数量不多还好,但是要是几百个估计按Y都要吐血了,于是折腾来半天总结了一个方法: + +``` +cp aaa/* /bbb +复制目录aaa下所有到/bbb目录下,这时如果/bbb目录下有和aaa同名的文件,需要按Y来确认并且会略过aaa目录下的子目录。 + +cp -r aaa/* /bbb +这次依然需要按Y来确认操作,但是没有忽略子目录。 + +cp -r -a aaa/* /bbb +依然需要按Y来确认操作,并且把aaa目录以及子目录和文件属性也传递到了/bbb。 + +\cp -r -a aaa/* /bbb +成功,没有提示按Y、传递了目录属性、没有略过目录。 +``` + + + From 79c2adf022c45a6ff4ff6701599703f67f7cc131 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Mon, 14 Aug 2017 15:57:49 +0800 Subject: [PATCH 0063/1284] Update cp.md --- command/cp.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/command/cp.md b/command/cp.md index dc95bf088f2..f218bb36e85 100644 --- a/command/cp.md +++ b/command/cp.md @@ -37,7 +37,9 @@ cp(选项)(参数) ### 实例 -下面的第一行中是 cp 命令和具体的参数(-r 是“递归”, -u 是“更新”,-v 是“详细”)。接下来的三行显示被复制文件的信息,最后一行显示命令行提示符。 +下面的第一行中是 cp 命令和具体的参数(-r 是“递归”, -u 是“更新”,-v 是“详细”)。接下来的三行显示被复制文件的信息,最后一行显示命令行提示符。这样,只拷贝新的文件到我的存储设备上,我就使用 cp 的“更新”和“详细”选项。 + +通常来说,参数 `-r` 也可用更详细的风格 `--recursive`。但是以简短的方式,也可以这么连用 `-ruv`。 ``` cp -r -u -v /usr/men/tmp ~/men/tmp From a6aa70a2c98a759b8f5570036a61b807667c7f6e Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Wed, 16 Aug 2017 02:53:16 +0800 Subject: [PATCH 0064/1284] Update curl.md --- command/curl.md | 874 ++++++------------------------------------------ 1 file changed, 97 insertions(+), 777 deletions(-) diff --git a/command/curl.md b/command/curl.md index df3fe2fb0b2..eecdf47dd0c 100644 --- a/command/curl.md +++ b/command/curl.md @@ -18,783 +18,103 @@ 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停止传输速度的限制,速度时间
-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停止传输速度的限制,速度时间
From 64734475ced015e19f94c28f4461f16f81d8e7a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Wed, 16 Aug 2017 09:24:54 +0800 Subject: [PATCH 0065/1284] Update tcpdump.md --- command/tcpdump.md | 318 +++++++++++++++++++++++---------------------- 1 file changed, 165 insertions(+), 153 deletions(-) diff --git a/command/tcpdump.md b/command/tcpdump.md index 3caf0bba4dd..ea60ae546d3 100644 --- a/command/tcpdump.md +++ b/command/tcpdump.md @@ -1,153 +1,165 @@ -tcpdump -=== - -一款sniffer工具 - -## 补充说明 - -**tcpdump命令** 是一款sniffer工具,它可以打印所有经过网络接口的数据包的头信息,也可以使用`-w`选项将数据包保存到文件中,方便以后分析。 - -### 语法 - -``` -tcpdump(选项) -``` - -### 选项 - -``` --a:尝试将网络和广播地址转换成名称; --c<数据包数目>:收到指定的数据包数目后,就停止进行倾倒操作; --d:把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出; --dd:把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出; --ddd:把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出; --e:在每列倾倒资料上显示连接层级的文件头; --f:用数字显示网际网络地址; --F<表达文件>:指定内含表达方式的文件; --i<网络界面>:使用指定的网络截面送出数据包; --l:使用标准输出列的缓冲区; --n:不把主机的网络地址转换成名字; --N:不列出域名; --O:不将数据包编码最佳化; --p:不让网络界面进入混杂模式; --q :快速输出,仅列出少数的传输协议信息; --r<数据包文件>:从指定的文件读取数据包数据; --s<数据包大小>:设置每个数据包的大小; --S:用绝对而非相对数值列出TCP关联数; --t:在每列倾倒资料上不显示时间戳记; --tt: 在每列倾倒资料上显示未经格式化的时间戳记; --T<数据包类型>:强制将表达方式所指定的数据包转译成设置的数据包类型; --v:详细显示指令执行过程; --vv:更详细显示指令执行过程; --x:用十六进制字码列出数据包资料; --w<数据包文件>:把数据包数据写入指定的文件。 -``` - -### 实例 - - **直接启动tcpdump将监视第一个网络接口上所有流过的数据包** - -``` -tcpdump -``` - - **监视指定网络接口的数据包** - -``` -tcpdump -i eth1 -``` - -如果不指定网卡,默认tcpdump只会监视第一个网络接口,一般是eth0,下面的例子都没有指定网络接口。 - - **监视指定主机的数据包** - -打印所有进入或离开sundown的数据包。 - -``` -tcpdump host sundown -``` - -也可以指定ip,例如截获所有210.27.48.1 的主机收到的和发出的所有的数据包 - -``` -tcpdump host 210.27.48.1 -``` - -打印helios 与 hot 或者与 ace 之间通信的数据包 - -``` -tcpdump host helios and \( hot or ace \) -``` - -截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信 - -``` -tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \) -``` - -打印ace与任何其他主机之间通信的IP 数据包, 但不包括与helios之间的数据包. - -``` -tcpdump ip host ace and not helios -``` - -如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令: - -``` -tcpdump ip host 210.27.48.1 and ! 210.27.48.2 -``` - -截获主机hostname发送的所有数据 - -``` -tcpdump -i eth0 src host hostname -``` - -监视所有送到主机hostname的数据包 - -``` -tcpdump -i eth0 dst host hostname -``` - - **监视指定主机和端口的数据包** - -如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令 - -``` -tcpdump tcp port 23 host 210.27.48.1 -``` - -对本机的udp 123 端口进行监视 123 为ntp的服务端口 - -``` -tcpdump udp port 123 -``` - - **监视指定网络的数据包** - -打印本地主机与Berkeley网络上的主机之间的所有通信数据包 - -``` -tcpdump net ucb-ether -``` - -ucb-ether此处可理解为“Berkeley网络”的网络地址,此表达式最原始的含义可表达为:打印网络地址为ucb-ether的所有数据包 - -打印所有通过网关snup的ftp数据包 - -``` -tcpdump 'gateway snup and (port ftp or ftp-data)' -``` - -注意:表达式被单引号括起来了,这可以防止shell对其中的括号进行错误解析 - -打印所有源地址或目标地址是本地主机的IP数据包 - -``` -tcpdump ip and not net localnet -``` - -如果本地网络通过网关连到了另一网络,则另一网络并不能算作本地网络。 - - - \ No newline at end of file +tcpdump +=== + +一款sniffer工具,是Linux上的抓包工具,嗅探器。 + +## 补充说明 + +**tcpdump命令** 是一款抓包,嗅探器工具,它可以打印所有经过网络接口的数据包的头信息,也可以使用`-w`选项将数据包保存到文件中,方便以后分析。 + +### 语法 + +``` +tcpdump(选项) +``` + +### 选项 + +``` +-a:尝试将网络和广播地址转换成名称; +-c<数据包数目>:收到指定的数据包数目后,就停止进行倾倒操作; +-d:把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出; +-dd:把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出; +-ddd:把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出; +-e:在每列倾倒资料上显示连接层级的文件头; +-f:用数字显示网际网络地址; +-F<表达文件>:指定内含表达方式的文件; +-i<网络界面>:使用指定的网络截面送出数据包; +-l:使用标准输出列的缓冲区; +-n:不把主机的网络地址转换成名字; +-N:不列出域名; +-O:不将数据包编码最佳化; +-p:不让网络界面进入混杂模式; +-q :快速输出,仅列出少数的传输协议信息; +-r<数据包文件>:从指定的文件读取数据包数据; +-s<数据包大小>:设置每个数据包的大小; +-S:用绝对而非相对数值列出TCP关联数; +-t:在每列倾倒资料上不显示时间戳记; +-tt: 在每列倾倒资料上显示未经格式化的时间戳记; +-T<数据包类型>:强制将表达方式所指定的数据包转译成设置的数据包类型; +-v:详细显示指令执行过程; +-vv:更详细显示指令执行过程; +-x:用十六进制字码列出数据包资料; +-w<数据包文件>:把数据包数据写入指定的文件。 +``` + +### 实例 + + **直接启动tcpdump将监视第一个网络接口上所有流过的数据包** + +``` +tcpdump +``` + + **监视指定网络接口的数据包** + +``` +tcpdump -i eth1 +``` + +如果不指定网卡,默认tcpdump只会监视第一个网络接口,一般是eth0,下面的例子都没有指定网络接口。 + + **监视指定主机的数据包** + +打印所有进入或离开sundown的数据包。 + +``` +tcpdump host sundown +``` + +也可以指定ip,例如截获所有210.27.48.1 的主机收到的和发出的所有的数据包 + +``` +tcpdump host 210.27.48.1 +``` + +打印helios 与 hot 或者与 ace 之间通信的数据包 + +``` +tcpdump host helios and \( hot or ace \) +``` + +截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信 + +``` +tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \) +``` + +打印ace与任何其他主机之间通信的IP 数据包, 但不包括与helios之间的数据包. + +``` +tcpdump ip host ace and not helios +``` + +如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令: + +``` +tcpdump ip host 210.27.48.1 and ! 210.27.48.2 +``` + +抓取eth0网卡上的包,使用: + +``` +sudo tcpdump -i eth0 +``` + +截获主机hostname发送的所有数据 + +``` +tcpdump -i eth0 src host hostname +``` + +监视所有送到主机hostname的数据包 + +``` +tcpdump -i eth0 dst host hostname +``` + + **监视指定主机和端口的数据包** + +如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令 + +``` +tcpdump tcp port 23 host 210.27.48.1 +``` + +对本机的udp 123 端口进行监视 123 为ntp的服务端口 + +``` +tcpdump udp port 123 +``` + + **监视指定网络的数据包** + +打印本地主机与Berkeley网络上的主机之间的所有通信数据包 + +``` +tcpdump net ucb-ether +``` + +ucb-ether此处可理解为“Berkeley网络”的网络地址,此表达式最原始的含义可表达为:打印网络地址为ucb-ether的所有数据包 + +打印所有通过网关snup的ftp数据包 + +``` +tcpdump 'gateway snup and (port ftp or ftp-data)' +``` + +注意:表达式被单引号括起来了,这可以防止shell对其中的括号进行错误解析 + +打印所有源地址或目标地址是本地主机的IP数据包 + +``` +tcpdump ip and not net localnet +``` + +如果本地网络通过网关连到了另一网络,则另一网络并不能算作本地网络。 + +抓取80端口的HTTP报文,以文本形式展示: + +```bash +sudo tcpdump -i any port 80 -A +``` + + + From 5e5cf71b1d38090d64b9d2ce37f32926e55fd67c Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Wed, 16 Aug 2017 09:27:59 +0800 Subject: [PATCH 0066/1284] released v1.0.3 --- dist/data.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/data.json b/dist/data.json index 887707518b9..952ce365126 100644 --- a/dist/data.json +++ b/dist/data.json @@ -1 +1 @@ -{"w":{"n":"w","p":"/w","d":"显示目前登入系统的用户信息"},"ab":{"n":"ab","p":"/ab","d":"Apache服务器的性能测试工具"},"ip":{"n":"ip","p":"/ip","d":"网络配置工具"},"ld":{"n":"ld","p":"/ld","d":"将目标文件连接为可执行程序"},"xz":{"n":"xz","p":"/xz","d":"POSIX 平台开发具有高压缩率的工具。"},"ln":{"n":"ln","p":"/ln","d":"用来为文件创件连接"},"lp":{"n":"lp","p":"/lp","d":"打印文件或修改排队的打印任务"},"fg":{"n":"fg","p":"/fg","d":"将后台作业放到前台终端运行"},"wc\r":{"n":"wc\r","p":"/wc","d":"统计文件的字节数、字数、行数"},"as":{"n":"as","p":"/as","d":"汇编语言编译器"},"at":{"n":"at","p":"/at","d":"在指定时间执行一个任务"},"fc":{"n":"fc","p":"/fc","d":"修改历史命令并执行"},"ls":{"n":"ls","p":"/ls","d":"显示目录内容列表"},"id":{"n":"id","p":"/id","d":"显示用户的ID以及所属群组的ID"},"vi":{"n":"vi","p":"/vi","d":"功能强大的纯文本编辑器"},"bc":{"n":"bc","p":"/bc","d":"算术操作精密运算工具"},"bg":{"n":"bg","p":"/bg","d":"用于将作业放到后台运行"},"tr":{"n":"tr","p":"/tr","d":"将字符进行替换压缩和删除"},"ex":{"n":"ex","p":"/ex","d":"启动vim编辑器的ex编辑模式"},"ed":{"n":"ed","p":"/ed","d":"单行纯文本编辑器"},"mv":{"n":"mv","p":"/mv","d":"用来对文件或目录重新命名"},"du":{"n":"du","p":"/du","d":"显示每个文件和目录的磁盘使用空间"},"nl":{"n":"nl","p":"/nl","d":"在Linux系统中计算文件内容行号"},"cd":{"n":"cd","p":"/cd","d":"切换用户当前工作目录"},"nm":{"n":"nm","p":"/nm","d":"显示二进制目标文件的符号表"},"od":{"n":"od","p":"/od","d":"输出文件的八进制、十六进制等格式编码的字节"},"su":{"n":"su","p":"/su","d":"用于切换当前用户身份到其他用户身份"},"pr":{"n":"pr","p":"/pr","d":"将文本文件转换成适合打印的格式"},"ss\r":{"n":"ss\r","p":"/ss","d":"获取socket统计信息"},"sh":{"n":"sh","p":"/sh","d":"shell命令解释器"},"ps":{"n":"ps","p":"/ps","d":"报告当前系统的进程状态"},"pv":{"n":"pv","p":"/pv","d":"显示当前在命令行执行的命令的进度信息,管道查看器。"},"df":{"n":"df","p":"/df","d":"显示磁盘的相关信息"},"dd":{"n":"dd","p":"/dd","d":"复制文件并对原文件的内容进行转换和格式化处理"},"rm":{"n":"rm","p":"/rm","d":"用于删除给定的文件和目录"},"cp":{"n":"cp","p":"/cp","d":"将源文件或目录复制到目标文件或目录中"},"man":{"n":"man","p":"/man","d":"查看Linux中的指令帮助"},"sar":{"n":"sar","p":"/sar","d":"系统运行状态统计工具"},"rsh":{"n":"rsh","p":"/rsh","d":"连接远程主机并执行命令"},"rpm":{"n":"rpm","p":"/rpm","d":"RPM软件包的管理工具"},"sed":{"n":"sed","p":"/sed","d":"功能强大的流式文本编辑器"},"rev":{"n":"rev","p":"/rev","d":"将文件内容以字符为单位反序输出"},"zip\r":{"n":"zip\r","p":"/zip","d":"可以用来解压缩文件"},"seq":{"n":"seq","p":"/seq","d":"以指定增量从首数开始打印数字到尾数"},"rcp\r":{"n":"rcp\r","p":"/rcp","d":"使在两台Linux主机之间的文件复制操作更简单"},"set":{"n":"set","p":"/set","d":"显示或设置shell特性及shell变量"},"pwd":{"n":"pwd","p":"/pwd","d":"绝对路径方式显示用户当前工作目录"},"pvs":{"n":"pvs","p":"/pvs","d":"输出物理卷信息报表"},"dig":{"n":"dig","p":"/dig","d":"域名查询工具"},"col":{"n":"col","p":"/col","d":"过滤控制字符"},"cmp":{"n":"cmp","p":"/cmp","d":"比较两个文件是否有差异"},"dnf":{"n":"dnf","p":"/dnf","d":"新一代的RPM软件包管理器"},"ssh\r":{"n":"ssh\r","p":"/ssh","d":"openssh套件中的客户端连接工具"},"php":{"n":"php","p":"/php","d":"PHP语言的命令行接口"},"sum":{"n":"sum","p":"/sum","d":"计算文件的校验码和显示块数"},"tac":{"n":"tac","p":"/tac","d":"将文件已行为单位的反序输出"},"cat":{"n":"cat","p":"/cat","d":"连接文件并打印到标准输出设备上"},"cal":{"n":"cal","p":"/cal","d":"显示当前日历或指定日期的日历"},"tar\r":{"n":"tar\r","p":"/tar","d":"Linux下的归档使用工具,用来打包和备份。"},"tee":{"n":"tee","p":"/tee","d":"把数据重定向到给定文件和屏幕上"},"scp":{"n":"scp","p":"/scp","d":"加密的方式在本地主机和远程主机之间复制文件"},"elm":{"n":"elm","p":"/elm","d":"纯文本邮件客户端程序"},"env":{"n":"env","p":"/env","d":"显示系统中已存在的环境变量"},"top":{"n":"top","p":"/top","d":"显示或管理执行中的程序"},"awk\r":{"n":"awk\r","p":"/awk","d":"文本和数据进行处理的编程语言"},"atq":{"n":"atq","p":"/atq","d":"列出当前用户的at任务列表"},"lpr":{"n":"lpr","p":"/lpr","d":"将文件发送给指定打印机进行打印"},"arp":{"n":"arp","p":"/arp","d":"显示和修改IP到MAC转换表"},"lpq":{"n":"lpq","p":"/lpq","d":"显示打印队列中的打印任务的状态信息"},"lpc":{"n":"lpc","p":"/lpc","d":"命令行方式打印机控制程序"},"arj":{"n":"arj","p":"/arj","d":"用于创建和管理.arj压缩包"},"fmt":{"n":"fmt","p":"/fmt","d":"读取文件后优化处理并输出"},"ftp\r":{"n":"ftp\r","p":"/ftp","d":"用来设置文件系统相关功能"},"who":{"n":"who","p":"/who","d":"显示目前登录系统的用户信息"},"lha":{"n":"lha","p":"/lha","d":"压缩或解压缩lzh格式文件"},"let":{"n":"let","p":"/let","d":"简单的计算器"},"gcc":{"n":"gcc","p":"/gcc","d":"基于C/C++的编译器"},"gdb":{"n":"gdb","p":"/gdb","d":"功能强大的程序调试器"},"ldd":{"n":"ldd","p":"/ldd","d":"打印程序或者库文件所依赖的共享库列表"},"yes":{"n":"yes","p":"/yes","d":"重复打印指定字符串"},"gpm":{"n":"gpm","p":"/gpm","d":"提供文字模式下的滑鼠事件处理"},"joe":{"n":"joe","p":"/joe","d":"强大的纯文本编辑器"},"jed":{"n":"jed","p":"/jed","d":"主要用于编辑代码的编辑器"},"yum\r":{"n":"yum\r","p":"/yum","d":"基于RPM的软件包管理器"},"cut":{"n":"cut","p":"/cut","d":"连接文件并打印到标准输出设备上"},"sync":{"n":"sync","p":"/sync","d":"用于强制被改变的内容立刻写入磁盘"},"zcat":{"n":"zcat","p":"/zcat","d":"显示压缩包中文件的内容"},"pvck":{"n":"pvck","p":"/pvck","d":"检测物理卷的LVM元数据的一致性"},"sudo":{"n":"sudo","p":"/sudo","d":"以其他身份来执行命令"},"dirs":{"n":"dirs","p":"/dirs","d":"显示目录记录"},"pssh":{"n":"pssh","p":"/pssh","d":"批量管理执行"},"chfn":{"n":"chfn","p":"/chfn","d":"用来改变finger命令显示的信息"},"wall":{"n":"wall","p":"/wall","d":"向系统当前所有打开的终端上输出信息"},"stty":{"n":"stty","p":"/stty","d":"修改终端命令行的相关设置"},"popd":{"n":"popd","p":"/popd","d":"用于删除目录栈中的记录"},"pmap":{"n":"pmap","p":"/pmap","d":"报告进程的内存映射关系"},"ping":{"n":"ping","p":"/ping","d":"测试主机之间网络的连通性"},"pico":{"n":"pico","p":"/pico","d":"功能强大全屏幕的文本编辑器"},"stat":{"n":"stat","p":"/stat","d":"用于显示文件的状态信息"},"perl":{"n":"perl","p":"/perl","d":"perl语言解释器"},"sshd":{"n":"sshd","p":"/sshd","d":"openssh软件套件中的服务器守护进程"},"nmap":{"n":"nmap","p":"/nmap","d":"网络探测和安全审核"},"arch":{"n":"arch","p":"/arch","d":"显示当前主机的硬件架构类型"},"bind":{"n":"bind","p":"/bind","d":"显示或设置键盘按键与其相关的功能"},"dpkg":{"n":"dpkg","p":"/dpkg","d":"Debian Linux系统上安装、创建和管理软件包"},"dris":{"n":"dris","p":"/dris","d":"显示和清空目录堆栈中的内容"},"nice":{"n":"nice","p":"/nice","d":"改变程序执行的优先权等级"},"chsh":{"n":"chsh","p":"/chsh","d":"用来更换登录系统时使用的shell"},"dump":{"n":"dump","p":"/dump","d":"用于备份ext2或者ext3文件系统"},"nano":{"n":"nano","p":"/nano","d":"字符终端文本编辑器"},"sort":{"n":"sort","p":"/sort","d":"将文件进行排序并输出"},"echo":{"n":"echo","p":"/echo","d":"输出指定的字符串或者变量"},"uniq":{"n":"uniq","p":"/uniq","d":"报告或忽略文件中的重复行"},"more":{"n":"more","p":"/more","d":"显示文件内容,每次显示一屏"},"mkfs":{"n":"mkfs","p":"/mkfs","d":"用于在设备上创建Linux文件系统"},"mesg":{"n":"mesg","p":"/mesg","d":"设置当前终端的写权限"},"sftp":{"n":"sftp","p":"/sftp","d":"交互式的文件传输程序"},"type":{"n":"type","p":"/type","d":"显示指定命令的类型"},"make":{"n":"make","p":"/make","d":"GNU的工程化编译工具"},"mail":{"n":"mail","p":"/mail","d":"命令行下发送和接收电子邮件"},"tree\r":{"n":"tree\r","p":"/tree","d":"树状图列出目录的内容"},"lynx":{"n":"lynx","p":"/lynx","d":"纯文本模式的网页浏览器"},"trap":{"n":"trap","p":"/trap","d":"指定在接收到信号后将要采取的动作"},"exec":{"n":"exec","p":"/exec","d":"调用并执行指定的命令"},"exit":{"n":"exit","p":"/exit","d":"退出当前的shell"},"lsof":{"n":"lsof","p":"/lsof","d":"显示Linux系统当前已打开的所有文件列表"},"comm":{"n":"comm","p":"/comm","d":"两个文件之间的比较"},"lprm":{"n":"lprm","p":"/lprm","d":"删除打印队列中的打印任务"},"expr":{"n":"expr","p":"/expr","d":"一款表达式计算工具"},"znew":{"n":"znew","p":"/znew","d":"将.Z压缩包重新转化为gzip命令压缩的.gz压缩包"},"tput":{"n":"tput","p":"/tput","d":"通过terminfo数据库对终端会话进行初始化和操作"},"atop":{"n":"atop","p":"/atop","d":"监控Linux系统资源与进程的工具"},"time":{"n":"time","p":"/time","d":"统计给定命令所花费的总时间"},"file":{"n":"file","p":"/file","d":"用来探测给定文件的类型。"},"find\r":{"n":"find\r","p":"/find","d":"在指定目录下查找文件"},"tftp":{"n":"tftp","p":"/tftp","d":"在本机和tftp服务器之间使用TFTP协议传输文件"},"cpio":{"n":"cpio","p":"/cpio","d":"用来建立、还原备份档的工具程序"},"look":{"n":"look","p":"/look","d":"显示文件中以指定字符串开头的任意行"},"test":{"n":"test","p":"/test","d":"shell环境中测试条件表达式工具"},"fold":{"n":"fold","p":"/fold","d":"控制文件内容输出时所占用的屏幕宽度"},"free\r":{"n":"free\r","p":"/free","d":"显示内存的使用情况"},"fsck":{"n":"fsck","p":"/fsck","d":"检查并且试图修复文件系统中的错误"},"xset":{"n":"xset","p":"/xset","d":"设置X-Window系统中的用户爱好的实用工具"},"atrm":{"n":"atrm","p":"/atrm","d":"删除待执行任务队列中的指定任务"},"lilo":{"n":"lilo","p":"/lilo","d":"安装核心载入开机管理程序"},"talk":{"n":"talk","p":"/talk","d":"让用户和其他用户聊天"},"lftp":{"n":"lftp","p":"/lftp","d":"优秀的文件客户端程序"},"curl":{"n":"curl","p":"/curl","d":"利用URL规则在命令行下工作的文件传输工具"},"arpd":{"n":"arpd","p":"/arpd","d":"收集免费ARP信息"},"gcov":{"n":"gcov","p":"/gcov","d":"测试程序的代码覆盖率的工具"},"date":{"n":"date","p":"/date","d":"显示或设置系统时间与日期"},"less":{"n":"less","p":"/less","d":"分屏上下翻页浏览文件内容"},"tail\r":{"n":"tail\r","p":"/tail","d":"在屏幕上显示指定文件的末尾若干行"},"read":{"n":"read","p":"/read","d":"从键盘读取变量值"},"axel":{"n":"axel","p":"/axel","d":"多线程下载工具"},"grep\r":{"n":"grep\r","p":"/grep","d":"强大的文本搜索工具"},"last":{"n":"last","p":"/last","d":"列出目前与过去登入系统的用户相关信息"},"kill":{"n":"kill","p":"/kill","d":"删除执行中的程序或工作"},"join":{"n":"join","p":"/join","d":"两个文件中指定栏位内容相同的行连接起来"},"wait":{"n":"wait","p":"/wait","d":"等待进程执行完后返回"},"jobs":{"n":"jobs","p":"/jobs","d":"显示Linux中的任务列表及任务状态"},"wget":{"n":"wget","p":"/wget","d":"Linux系统下载文件工具"},"ipcs":{"n":"ipcs","p":"/ipcs","d":"分析消息队列共享内存和信号量 "},"grub":{"n":"grub","p":"/grub","d":"多重引导程序grub的命令行shell工具"},"diff":{"n":"diff","p":"/diff","d":"比较给定的两个文件的不同"},"init":{"n":"init","p":"/init","d":"init进程是所有Linux进程的父进程"},"gzip\r":{"n":"gzip\r","p":"/gzip","d":"用来压缩文件"},"halt":{"n":"halt","p":"/halt","d":"关闭正在运行的Linux操作系统"},"info":{"n":"info","p":"/info","d":"Linux下info格式的帮助指令"},"head":{"n":"head","p":"/head","d":"在屏幕上显示指定文件的开头若干行"},"help":{"n":"help","p":"/help","d":"显示帮助信息"},"ifup":{"n":"ifup","p":"/ifup","d":"激活指定的网络接口"},"pwck":{"n":"pwck","p":"/pwck","d":"用来验证系统认证文件内容和格式的完整性"},"host":{"n":"host","p":"/host","d":"常用的分析域名查询工具"},"htop":{"n":"htop","p":"/htop","d":"[非内部命令]一个互动的进程查看器,可以动态观察系统进程状况。"},"mysql":{"n":"mysql","p":"/mysql","d":"MySQL服务器客户端工具"},"touch":{"n":"touch","p":"/touch","d":"创建新的空文件"},"iconv":{"n":"iconv","p":"/iconv","d":"转换文件的编码方式"},"tload":{"n":"tload","p":"/tload","d":"显示系统负载状况"},"ifcfg":{"n":"ifcfg","p":"/ifcfg","d":"置Linux中的网络接口参数"},"gzexe":{"n":"gzexe","p":"/gzexe","d":"用来压缩可执行文件"},"iotop":{"n":"iotop","p":"/iotop","d":"用来监视磁盘I/O使用状况的工具"},"bzip2":{"n":"bzip2","p":"/bzip2","d":"将文件压缩成bz2格式"},"alias":{"n":"alias","p":"/alias","d":"用来设置指令的别名"},"zfore":{"n":"zfore","p":"/zfore","d":"强制为gzip格式的压缩文件添加.gz后缀"},"ipcrm":{"n":"ipcrm","p":"/ipcrm","d":"删除消息队列、信号集、或者共享内存标识"},"iperf":{"n":"iperf","p":"/iperf","d":"网络性能测试工具"},"bzcat":{"n":"bzcat","p":"/bzcat","d":"解压缩指定的.bz2文件"},"grpck":{"n":"grpck","p":"/grpck","d":"用于验证组文件的完整性"},"kexec":{"n":"kexec","p":"/kexec","d":"从当前正在运行的内核引导到一个新内核"},"lastb":{"n":"lastb","p":"/lastb","d":"列出登入系统失败的用户相关信息"},"tailf":{"n":"tailf","p":"/tailf","d":"在屏幕上显示指定文件的末尾若干行内容,通常用于日志文件的跟踪输出。"},"xinit":{"n":"xinit","p":"/xinit","d":"是Linux下X-Window系统的初始化程序"},"fuser":{"n":"fuser","p":"/fuser","d":"使用文件或文件结构识别进程"},"login":{"n":"login","p":"/login","d":"登录系统或切换用户身份"},"chage":{"n":"chage","p":"/chage","d":"修改帐号和密码的有效期限"},"xhost":{"n":"xhost","p":"/xhost","d":"制哪些X客户端能够在X服务器上显示"},"xclip":{"n":"xclip","p":"/xclip","d":"管理 X 粘贴板"},"chcon":{"n":"chcon","p":"/chcon","d":"修改对象(文件)的安全上下文"},"fgrep":{"n":"fgrep","p":"/fgrep","d":"为文件搜索文字字符串"},"fdisk":{"n":"fdisk","p":"/fdisk","d":"查看磁盘使用情况和磁盘分区"},"xauth":{"n":"xauth","p":"/xauth","d":"显示和编辑被用于连接X服务器的认证信息"},"lsblk":{"n":"lsblk","p":"/lsblk","d":"列出块设备信息"},"lsmod":{"n":"lsmod","p":"/lsmod","d":"显示已载入系统的模块"},"lspci":{"n":"lspci","p":"/lspci","d":"显示当前主机的所有PCI总线信息"},"lsusb":{"n":"lsusb","p":"/lsusb","d":"显示本机的USB设备列表信息"},"xargs\r":{"n":"xargs\r","p":"/xargs","d":"给其他命令传递参数的一个过滤器"},"chgrp":{"n":"chgrp","p":"/chgrp","d":"用来变更文件或目录的所属群组"},"mailq":{"n":"mailq","p":"/mailq","d":"显示待发送的邮件队列"},"emacs":{"n":"emacs","p":"/emacs","d":"功能强大的全屏文本编辑器"},"eject":{"n":"eject","p":"/eject","d":"用来退出抽取式设备"},"write":{"n":"write","p":"/write","d":"向指定登录用户终端上发送信息"},"mkdir":{"n":"mkdir","p":"/mkdir","d":"用来创建目录"},"egrep":{"n":"egrep","p":"/egrep","d":"在文件内查找指定的字符串"},"mknod":{"n":"mknod","p":"/mknod","d":"创建字符设备文件和块设备文件"},"chmod\r":{"n":"chmod\r","p":"/chmod","d":"用来变更文件或目录的权限"},"bzcmp":{"n":"bzcmp","p":"/bzcmp","d":"比较两个压缩包中的文件"},"which":{"n":"which","p":"/which","d":"查找并显示给定命令的绝对路径"},"chown":{"n":"chown","p":"/chown","d":"用来变更文件或目录的拥有者或所属群组"},"ncftp":{"n":"ncftp","p":"/ncftp","d":"是增强的的FTP工具"},"umask":{"n":"umask","p":"/umask","d":"用来设置限制新建文件权限的掩码"},"ngrep":{"n":"ngrep","p":"/ngrep","d":"方便的数据包匹配和显示工具"},"dstat":{"n":"dstat","p":"/dstat","d":"通用的系统资源统计工具"},"watch\r":{"n":"watch\r","p":"/watch","d":"可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令"},"nohup":{"n":"nohup","p":"/nohup","d":"将程序以忽略挂起信号的方式运行起来"},"squid":{"n":"squid","p":"/squid","d":"squid服务器守护进程"},"split":{"n":"split","p":"/split","d":"分割任意大小的文件"},"spell":{"n":"spell","p":"/spell","d":"对文件进行拼写检查"},"uname":{"n":"uname","p":"/uname","d":"显示Linux系统信息"},"paste":{"n":"paste","p":"/paste","d":"将多个文件按列队列合并"},"patch":{"n":"patch","p":"/patch","d":"为开放源代码软件安装补丁程序"},"cksum":{"n":"cksum","p":"/cksum","d":"检查文件的CRC是否正确"},"pfctl":{"n":"pfctl","p":"/pfctl","d":"PF防火墙的配置命令"},"pgrep":{"n":"pgrep","p":"/pgrep","d":"设置用户的认证信息,包括用户密码、密码过期时间等"},"batch":{"n":"batch","p":"/batch","d":"在系统不繁忙的时候执行定时任务"},"pidof":{"n":"pidof","p":"/pidof","d":"查找指定名称的进程的进程号ID号"},"pkill":{"n":"pkill","p":"/pkill","d":"可以按照进程名杀死进程"},"unarj":{"n":"unarj","p":"/unarj","d":"解压缩由arj命令创建的压缩包"},"dmesg\r":{"n":"dmesg\r","p":"/dmesg","d":"显示Linux系统启动信息"},"pushd":{"n":"pushd","p":"/pushd","d":"将目录加入命令堆叠中"},"sleep":{"n":"sleep","p":"/sleep","d":"将目前动作延迟一段时间"},"diff3":{"n":"diff3","p":"/diff3","d":"比较3个文件不同的地方"},"quota":{"n":"quota","p":"/quota","d":"显示磁盘已使用的空间与限制"},"skill":{"n":"skill","p":"/skill","d":"向选定的进程发送信号冻结进程"},"blkid":{"n":"blkid","p":"/blkid","d":"查看块设备的文件系统类型、LABEL、UUID等信息"},"shopt":{"n":"shopt","p":"/shopt","d":"显示和设置shell操作选项"},"clear":{"n":"clear","p":"/clear","d":"清除当前屏幕终端上的任何信息"},"users":{"n":"users","p":"/users","d":"显示当前登录系统的所有用户"},"rexec":{"n":"rexec","p":"/rexec","d":"运程执行Linux系统下命令 "},"unset":{"n":"unset","p":"/unset","d":"删除指定的shell变量或函数"},"rmdir":{"n":"rmdir","p":"/rmdir","d":"用来删除空目录"},"rmmod":{"n":"rmmod","p":"/rmmod","d":"从运行的内核中移除指定的内核模块"},"route":{"n":"route","p":"/route","d":"显示并设置Linux中静态路由表"},"rpmdb":{"n":"rpmdb","p":"/rpmdb","d":"初始化和重建RPM数据库"},"unzip":{"n":"unzip","p":"/unzip","d":"用于解压缩由zip命令压缩的压缩包"},"colrm":{"n":"colrm","p":"/colrm","d":"删除文件中的指定列"},"rsync":{"n":"rsync","p":"/rsync","d":"远程数据同步工具"},"ftpwho":{"n":"ftpwho","p":"/ftpwho","d":"显示当前每个ftp会话信息"},"mkswap":{"n":"mkswap","p":"/mkswap","d":"建立和设置SWAP交换分区"},"mktemp":{"n":"mktemp","p":"/mktemp","d":"创建临时文件供shell脚本使用"},"syslog":{"n":"syslog","p":"/syslog","d":"系统默认的日志守护进程"},"mpstat":{"n":"mpstat","p":"/mpstat","d":"显示各个可用CPU的状态"},"mtools":{"n":"mtools","p":"/mtools","d":"显示mtools支持的指令"},"startx":{"n":"startx","p":"/startx","d":"用来启动X Window"},"ftptop":{"n":"ftptop","p":"/ftptop","d":"proftpd服务器的连接状态"},"whoami":{"n":"whoami","p":"/whoami","d":"打印当前有效的用户名称"},"sysctl":{"n":"sysctl","p":"/sysctl","d":"时动态地修改内核的运行参数"},"lnstat":{"n":"lnstat","p":"/lnstat","d":"显示Linux系统的网路状态"},"e2fsck":{"n":"e2fsck","p":"/e2fsck","d":"用于检查第二扩展文件系统的完整性"},"locate":{"n":"locate","p":"/locate","d":"Apache服务器的性能测试工具"},"ulimit":{"n":"ulimit","p":"/ulimit","d":"控制shell程序的资源"},"indent":{"n":"indent","p":"/indent","d":"格式化C语言的源文件"},"umount":{"n":"umount","p":"/umount","d":"用于卸载已经加载的文件系统"},"ipcalc":{"n":"ipcalc","p":"/ipcalc","d":"简单的IP地址计算器"},"logout":{"n":"logout","p":"/logout","d":"退出当前登录的Shell"},"whatis":{"n":"whatis","p":"/whatis","d":"查询一个命令执行什么功能"},"arping":{"n":"arping","p":"/arping","d":"通过发送ARP协议报文测试网络"},"hdparm":{"n":"hdparm","p":"/hdparm","d":"显示与设定硬盘的参数"},"swapon":{"n":"swapon","p":"/swapon","d":"激活Linux系统中交换空间"},"chroot":{"n":"chroot","p":"/chroot","d":"把根目录换成指定的目的目录"},"telnet\r":{"n":"telnet\r","p":"/telnet","d":"登录远程主机和管理"},"ntsysv":{"n":"ntsysv","p":"/ntsysv","d":"集中管理系统的各种服务"},"chattr":{"n":"chattr","p":"/chattr","d":"用来改变文件属性"},"finger":{"n":"finger","p":"/finger","d":"用于查找并显示用户信息"},"hostid":{"n":"hostid","p":"/hostid","d":"用来打印当前主机的数字化标识"},"parted":{"n":"parted","p":"/parted","d":"磁盘分区和分区大小调整工具"},"passwd":{"n":"passwd","p":"/passwd","d":"用于让用户可以更改自己的密码"},"findfs":{"n":"findfs","p":"/findfs","d":"标签或UUID查找文件系统"},"telint":{"n":"telint","p":"/telint","d":"切换当前正在运行系统的运行等级"},"insmod":{"n":"insmod","p":"/insmod","d":"将给定的模块加载到内核中"},"vmstat":{"n":"vmstat","p":"/vmstat","d":"显示虚拟内存状态"},"lpstat":{"n":"lpstat","p":"/lpstat","d":"显示CUPS中打印机的状态信息"},"export":{"n":"export","p":"/export","d":"设置或显示系统环境变量"},"lsattr":{"n":"lsattr","p":"/lsattr","d":"查看文件的第二扩展文件系统属性"},"vgscan":{"n":"vgscan","p":"/vgscan","d":"扫描并显示系统中的卷组"},"iptraf":{"n":"iptraf","p":"/iptraf","d":"实时地监视网卡流量"},"ispell":{"n":"ispell","p":"/ispell","d":"检查文件中出现的拼写错误"},"bzless":{"n":"bzless","p":"/bzless","d":"增强.bz2压缩包查看器"},"printf":{"n":"printf","p":"/printf","d":"格式化并输出结果"},"expand":{"n":"expand","p":"/expand","d":"将文件的制表符转换为空白字符"},"pstack":{"n":"pstack","p":"/pstack","d":"显示每个进程的栈跟踪"},"pstree":{"n":"pstree","p":"/pstree","d":"以树状图的方式展现进程之间的派生关系"},"bzgrep":{"n":"bzgrep","p":"/bzgrep","d":"使用正则表达式搜索.bz2压缩包中文件"},"groups":{"n":"groups","p":"/groups","d":"用来打印指定用户所属的工作组"},"pvscan":{"n":"pvscan","p":"/pvscan","d":"扫描系统中所有硬盘的物理卷列表"},"ltrace":{"n":"ltrace","p":"/ltrace","d":"用来跟踪进程调用库函数的情况"},"pwconv":{"n":"pwconv","p":"/pwconv","d":"用来开启用户的投影密码"},"hping3":{"n":"hping3","p":"/hping3","d":"测试网络及主机的安全"},"jwhois":{"n":"jwhois","p":"/jwhois","d":"whois 客户端服务"},"vdfuse":{"n":"vdfuse","p":"/vdfuse","d":"VirtualBox软件挂载VDI分区文件工具"},"accept":{"n":"accept","p":"/accept","d":"指示打印系统接受发往指定目标打印机的打印任务"},"rcconf":{"n":"rcconf","p":"/rcconf","d":"Debian Linux下的运行等级服务配置工具"},"depmod":{"n":"depmod","p":"/depmod","d":"分析可载入模块的相依性"},"lvscan":{"n":"lvscan","p":"/lvscan","d":"扫描逻辑卷"},"iostat":{"n":"iostat","p":"/iostat","d":"监视系统输入输出设备和CPU的使用情况"},"reboot":{"n":"reboot","p":"/reboot","d":"重新启动正在运行的Linux操作系统"},"reject":{"n":"reject","p":"/reject","d":"指示打印系统拒绝发往指定目标打印机的打印任务"},"rename":{"n":"rename","p":"/rename","d":"用字符串替换的方式批量改变文件名"},"renice":{"n":"renice","p":"/renice","d":"修改正在运行的进程的调度优先级"},"enable":{"n":"enable","p":"/enable","d":"启动或关闭shell内建命令"},"bzmore":{"n":"bzmore","p":"/bzmore","d":"查看bzip2压缩过的文本文件的内容"},"unlink":{"n":"unlink","p":"/unlink","d":"系统调用函数unlink去删除指定的文件"},"ifdown":{"n":"ifdown","p":"/ifdown","d":"禁用指定的网络接口"},"rlogin":{"n":"rlogin","p":"/rlogin","d":"从当前终端登录到远程Linux主机"},"elinks":{"n":"elinks","p":"/elinks","d":"纯文本界面的WWW浏览器"},"md5sum":{"n":"md5sum","p":"/md5sum","d":"计算和校验文件报文摘要的工具程序"},"gunzip":{"n":"gunzip","p":"/gunzip","d":"用来解压缩文件"},"cancel":{"n":"cancel","p":"/cancel","d":"取消已存在的打印任务"},"csplit":{"n":"csplit","p":"/csplit","d":"将一个大文件分割成小的碎片文件"},"ifstat":{"n":"ifstat","p":"/ifstat","d":"统计网络接口流量状态"},"mke2fs":{"n":"mke2fs","p":"/mke2fs","d":"创建磁盘分区上的“etc2/etc3”文件系统"},"setpci":{"n":"setpci","p":"/setpci","d":"查询和配置PCI设备的使用工具"},"bzdiff":{"n":"bzdiff","p":"/bzdiff","d":"直接比较两个.bz2压缩包中文件的不同"},"strace":{"n":"strace","p":"/strace","d":"跟踪系统调用和信号"},"uptime":{"n":"uptime","p":"/uptime","d":"查看Linux系统负载信息"},"screen":{"n":"screen","p":"/screen","d":"用于命令行终端切换"},"seinfo":{"n":"seinfo","p":"/seinfo","d":"查询SELinux的策略提供多少相关规则"},"edquota":{"n":"edquota","p":"/edquota","d":"用于编辑指定用户或工作组磁盘配额"},"command":{"n":"command","p":"/command","d":"调用并执行指定的命令"},"crontab":{"n":"crontab","p":"/crontab","d":"提交和管理用户的需要周期性执行的任务"},"setfacl":{"n":"setfacl","p":"/setfacl","d":"设置文件访问控制列表"},"useradd":{"n":"useradd","p":"/useradd","d":"创建的新的系统用户"},"rpmsign":{"n":"rpmsign","p":"/rpmsign","d":"使用RPM软件包的签名管理工具"},"userdel":{"n":"userdel","p":"/userdel","d":"用于删除给定的用户以及与用户相关的文件"},"usermod":{"n":"usermod","p":"/usermod","d":"用于修改用户的基本信息"},"restore":{"n":"restore","p":"/restore","d":"所进行的操作和dump指令相反"},"readelf":{"n":"readelf","p":"/readelf","d":"用于显示elf格式文件的信息"},"declare":{"n":"declare","p":"/declare","d":"声明或显示shell变量"},"quotaon":{"n":"quotaon","p":"/quotaon","d":"激活Linux内核中指定文件系统的磁盘配额功能"},"slabtop":{"n":"slabtop","p":"/slabtop","d":"实时显示内核slab内存缓存信息"},"dirname":{"n":"dirname","p":"/dirname","d":"去除文件名中的非目录部分"},"ppp-off":{"n":"ppp-off","p":"/ppp-off","d":"关闭ppp连线"},"pathchk":{"n":"pathchk","p":"/pathchk","d":"检查文件中不可移植的部分"},"volname":{"n":"volname","p":"/volname","d":"显示指定的ISO-9660格式的设备的卷名称"},"openssl":{"n":"openssl","p":"/openssl","d":"强大的安全套接字层密码库"},"objdump":{"n":"objdump","p":"/objdump","d":"显示二进制文件信息"},"ntpdate":{"n":"ntpdate","p":"/ntpdate","d":"使用网络计时协议(NTP)设置日期和时间"},"unalias":{"n":"unalias","p":"/unalias","d":"删除由alias设置的别名"},"nologin":{"n":"nologin","p":"/nologin","d":"拒绝用户登录系统"},"ssh-add":{"n":"ssh-add","p":"/ssh-add","d":"把专用密钥添加到ssh-agent的高速缓存中"},"nfsstat":{"n":"nfsstat","p":"/nfsstat","d":"列出NFS客户端和服务器的工作状态"},"netstat":{"n":"netstat","p":"/netstat","d":"查看Linux中网络系统状态信息"},"nethogs":{"n":"nethogs","p":"/nethogs","d":"终端下的网络流量监控工具"},"whereis":{"n":"whereis","p":"/whereis","d":"查找二进制程序、代码等相关文件路径"},"e2label":{"n":"e2label","p":"/e2label","d":"设置第二扩展文件系统的卷标"},"service":{"n":"service","p":"/service","d":"控制系统服务的实用工具"},"mkisofs":{"n":"mkisofs","p":"/mkisofs","d":"建立ISO 9660映像文件"},"strings":{"n":"strings","p":"/strings","d":"在对象文件或二进制文件中查找可打印的字符串"},"ethtool":{"n":"ethtool","p":"/ethtool","d":"显示或修改以太网卡的配置信息"},"lpadmin":{"n":"lpadmin","p":"/lpadmin","d":"配置CUPS套件中的打印机和类"},"losetup":{"n":"losetup","p":"/losetup","d":"设定与控制循环(loop)设备"},"swapoff":{"n":"swapoff","p":"/swapoff","d":"关闭指定的交换空间"},"logsave":{"n":"logsave","p":"/logsave","d":"将命令的输出信息保存到指定的日志文件"},"logname":{"n":"logname","p":"/logname","d":"用来显示用户名称"},"ftpshut":{"n":"ftpshut","p":"/ftpshut","d":"在指定的时间关闭FTP服务器"},"lftpget":{"n":"lftpget","p":"/lftpget","d":"调用lftp指令下载指定的文件"},"builtin":{"n":"builtin","p":"/builtin","d":"执行shell内部命令"},"systool":{"n":"systool","p":"/systool","d":"显示基于总线、类和拓扑显示系统中设备的信息"},"gpasswd":{"n":"gpasswd","p":"/gpasswd","d":"Linux下工作组文件的管理工具"},"lastlog":{"n":"lastlog","p":"/lastlog","d":"显示系统中所有用户最近一次登录信息"},"killall":{"n":"killall","p":"/killall","d":"使用进程的名称来杀死一组进程"},"grpconv":{"n":"grpconv","p":"/grpconv","d":"用来开启群组的投影密码"},"tcpdump":{"n":"tcpdump","p":"/tcpdump","d":"一款sniffer工具"},"bunzip2":{"n":"bunzip2","p":"/bunzip2","d":"创一个bz2文件压缩包"},"apt-key":{"n":"apt-key","p":"/apt-key","d":"管理Debian Linux系统中的软件包密钥"},"apt-get":{"n":"apt-get","p":"/apt-get","d":"Debian Linux发行版中的APT软件包管理工具"},"apropos":{"n":"apropos","p":"/apropos","d":"在 whatis 数据库中查找字符串"},"zipinfo":{"n":"zipinfo","p":"/zipinfo","d":"用来列出压缩文件信息"},"install":{"n":"install","p":"/install","d":"安装或升级软件或备份数据"},"hexdump":{"n":"hexdump","p":"/hexdump","d":"显示文件十六进制格式"},"history":{"n":"history","p":"/history","d":"用于显示历史命令"},"hwclock":{"n":"hwclock","p":"/hwclock","d":"显示与设定硬件时钟"},"pwunconv":{"n":"pwunconv","p":"/pwunconv","d":"用来关闭用户的投影密码"},"pvchange":{"n":"pvchange","p":"/pvchange","d":"修改物理卷属性"},"vgcreate":{"n":"vgcreate","p":"/vgcreate","d":"用于创建LVM卷组"},"pvcreate":{"n":"pvcreate","p":"/pvcreate","d":"将物理硬盘分区初始化为物理卷"},"vgchange":{"n":"vgchange","p":"/vgchange","d":"修改卷组属性"},"pvremove":{"n":"pvremove","p":"/pvremove","d":"删除一个存在的物理卷"},"diffstat":{"n":"diffstat","p":"/diffstat","d":"显示diff命令输出信息的柱状图"},"arpwatch":{"n":"arpwatch","p":"/arpwatch","d":"监听网络上ARP的记录"},"mkinitrd":{"n":"mkinitrd","p":"/mkinitrd","d":"建立要载入ramdisk的映像文件"},"htpasswd":{"n":"htpasswd","p":"/htpasswd","d":"apache服务器创建密码认证文件"},"shutdown":{"n":"shutdown","p":"/shutdown","d":"用来执行系统关机的命令"},"dhclient":{"n":"dhclient","p":"/dhclient","d":"动态获取或释放IP地址"},"nslookup":{"n":"nslookup","p":"/nslookup","d":"查询域名DNS信息的工具"},"groupmod":{"n":"groupmod","p":"/groupmod","d":"更改群组识别码或名称"},"unexpand":{"n":"unexpand","p":"/unexpand","d":"将文件的空白字符转换为制表符"},"lvcreate":{"n":"lvcreate","p":"/lvcreate","d":"用于创建LVM的逻辑卷"},"quotaoff":{"n":"quotaoff","p":"/quotaoff","d":"关闭Linux内核中指定文件系统的磁盘配额功能"},"iptables":{"n":"iptables","p":"/iptables","d":"Linux上常用的防火墙软件"},"basename":{"n":"basename","p":"/basename","d":"打印目录或者文件的基本名称"},"modprobe\r":{"n":"modprobe\r","p":"/modprobe","d":"自动处理可载入模块"},"lvextend":{"n":"lvextend","p":"/lvextend","d":"扩展逻辑卷空间"},"lvreduce":{"n":"lvreduce","p":"/lvreduce","d":"收缩逻辑卷空间"},"readonly":{"n":"readonly","p":"/readonly","d":"定义只读shell变量或函数"},"xlsfonts":{"n":"xlsfonts","p":"/xlsfonts","d":"列出X Server使用的字体"},"lvresize":{"n":"lvresize","p":"/lvresize","d":"调整逻辑卷空间大小"},"zipsplit":{"n":"zipsplit","p":"/zipsplit","d":"将较大的zip压缩包分割成各个较小的压缩包"},"groupdel":{"n":"groupdel","p":"/groupdel","d":"用于删除指定的工作组"},"blockdev":{"n":"blockdev","p":"/blockdev","d":"从命令行调用区块设备控制程序"},"chpasswd":{"n":"chpasswd","p":"/chpasswd","d":"批量更新用户口令的工具"},"repquota":{"n":"repquota","p":"/repquota","d":"报表的格式输出磁盘空间限制的状态"},"aptitude":{"n":"aptitude","p":"/aptitude","d":"Debian Linux系统中软件包管理工具"},"ftpcount":{"n":"ftpcount","p":"/ftpcount","d":"显示目前已FTP登入的用户人数"},"exportfs":{"n":"exportfs","p":"/exportfs","d":"管理NFS共享文件系统列表"},"mailstat":{"n":"mailstat","p":"/mailstat","d":"显示到达的邮件状态"},"bmodinfo":{"n":"bmodinfo","p":"/bmodinfo","d":"显示给定模块的详细信息"},"iptstate":{"n":"iptstate","p":"/iptstate","d":"显示iptables的工作状态"},"groupadd":{"n":"groupadd","p":"/groupadd","d":"用于创建一个新的工作组"},"dpkg-deb":{"n":"dpkg-deb","p":"/dpkg-deb","d":"Debian Linux下的软件包管理工具"},"htdigest":{"n":"htdigest","p":"/htdigest","d":"Apache服务器内置工具"},"dos2unix":{"n":"dos2unix","p":"/dos2unix","d":"将DOS格式文本文件转换成Unix格式"},"vgremove":{"n":"vgremove","p":"/vgremove","d":"用于用户删除LVM卷组"},"rpm2cpio":{"n":"rpm2cpio","p":"/rpm2cpio","d":"将RPM软件包转换为cpio格式的文件"},"rpmbuild":{"n":"rpmbuild","p":"/rpmbuild","d":"创建RPM的二进制软件包和源码软件包"},"newusers":{"n":"newusers","p":"/newusers","d":"用于批处理的方式一次创建多个命令"},"rpmquery":{"n":"rpmquery","p":"/rpmquery","d":"从RPM数据库中查询软件包信息"},"cdrecord":{"n":"cdrecord","p":"/cdrecord","d":"Linux系统下光盘刻录功能命令"},"vgreduce":{"n":"vgreduce","p":"/vgreduce","d":"从卷组中删除物理卷"},"ifconfig":{"n":"ifconfig","p":"/ifconfig","d":"配置和显示Linux系统网卡的网络参数"},"protoize":{"n":"protoize","p":"/protoize","d":"GNU-C代码转换为ANSI-C代码"},"vgextend":{"n":"vgextend","p":"/vgextend","d":"向卷组中添加物理卷"},"runlevel":{"n":"runlevel","p":"/runlevel","d":"打印当前Linux系统的运行等级"},"mii-tool":{"n":"mii-tool","p":"/mii-tool","d":"配置网络设备协商方式的工具"},"updatedb":{"n":"updatedb","p":"/updatedb","d":"创建或更新slocate命令所必需的数据库文件"},"hostname":{"n":"hostname","p":"/hostname","d":"显示和设置系统的主机名"},"compress":{"n":"compress","p":"/compress","d":"使用Lempress-Ziv编码压缩数据文件"},"tempfile":{"n":"tempfile","p":"/tempfile","d":"shell中给临时文件命名"},"ldconfig":{"n":"ldconfig","p":"/ldconfig","d":"动态链接库管理命令"},"semanage":{"n":"semanage","p":"/semanage","d":"默认目录的安全上下文查询与修改"},"sendmail":{"n":"sendmail","p":"/sendmail","d":"著名电子邮件服务器"},"xlsatoms":{"n":"xlsatoms","p":"/xlsatoms","d":"列出X服务器内部所有定义的原子成分"},"logwatch":{"n":"logwatch","p":"/logwatch","d":"可定制和可插入式的日志监视系统"},"sesearch":{"n":"sesearch","p":"/sesearch","d":"查询SELinux策略的规则详情"},"lvremove":{"n":"lvremove","p":"/lvremove","d":"删除指定LVM逻辑卷"},"lvdisplay":{"n":"lvdisplay","p":"/lvdisplay","d":"显示逻辑卷属性"},"mysqldump":{"n":"mysqldump","p":"/mysqldump","d":"MySQL数据库中备份工具"},"systemctl":{"n":"systemctl","p":"/systemctl","d":"系统服务管理器指令"},"chkconfig":{"n":"chkconfig","p":"/chkconfig","d":"检查或设置系统的各种服务"},"mysqlshow":{"n":"mysqlshow","p":"/mysqlshow","d":"显示MySQL中数据库相关信息"},"ssh-agent":{"n":"ssh-agent","p":"/ssh-agent","d":"ssh密钥管理器"},"smbpasswd":{"n":"smbpasswd","p":"/smbpasswd","d":"samba用户和密码管理工具"},"logrotate":{"n":"logrotate","p":"/logrotate","d":"统日志进行轮转、压缩和删除"},"smbclient":{"n":"smbclient","p":"/smbclient","d":"交互方式访问samba服务器"},"showmount":{"n":"showmount","p":"/showmount","d":"显示NFS服务器加载的信息"},"clockdiff":{"n":"clockdiff","p":"/clockdiff","d":"检测两台linux主机的时间差"},"arptables":{"n":"arptables","p":"/arptables","d":"管理ARP包过滤规则表"},"setsebool":{"n":"setsebool","p":"/setsebool","d":"修改SElinux策略内各项规则的布尔值"},"ip6tables":{"n":"ip6tables","p":"/ip6tables","d":"linux中防火墙软件"},"rpmverify":{"n":"rpmverify","p":"/rpmverify","d":"验证已安装的RPM软件包的正确性"},"getsebool":{"n":"getsebool","p":"/getsebool","d":"查询SElinux策略内各项规则的布尔值"},"badblocks":{"n":"badblocks","p":"/badblocks","d":"查找磁盘中损坏的区块"},"partprobe":{"n":"partprobe","p":"/partprobe","d":"不重启的情况下重读分区"},"grpunconv":{"n":"grpunconv","p":"/grpunconv","d":"用来关闭群组的投影密码"},"pvdisplay":{"n":"pvdisplay","p":"/pvdisplay","d":"显示物理卷的属性"},"tracepath":{"n":"tracepath","p":"/tracepath","d":"追踪目的主机经过的路由信息"},"dircolors":{"n":"dircolors","p":"/dircolors","d":"置ls命令在显示目录或文件时所用的色彩"},"vgdisplay":{"n":"vgdisplay","p":"/vgdisplay","d":"显示LVM卷组的信息"},"dmidecode\r":{"n":"dmidecode\r","p":"/dmidecode","d":"在Linux系统下获取有关硬件方面的信息"},"apachectl":{"n":"apachectl","p":"/apachectl","d":"Apache服务器前端控制工具"},"tcpreplay":{"n":"tcpreplay","p":"/tcpreplay","d":"将PCAP包重新发送,用于性能或者功能测试"},"vgconvert":{"n":"vgconvert","p":"/vgconvert","d":"转换卷组元数据格式"},"domainname":{"n":"domainname","p":"/domainname","d":"显示和设置系统的NIS域名"},"dpkg-query":{"n":"dpkg-query","p":"/dpkg-query","d":"Debian Linux中软件包的查询工具"},"restorecon":{"n":"restorecon","p":"/restorecon","d":"恢复文件的安全上下文"},"xlsclients":{"n":"xlsclients","p":"/xlsclients","d":"列出显示器中的客户端应用程序"},"usernetctl":{"n":"usernetctl","p":"/usernetctl","d":"被允许时操作指定的网络接口"},"dpkg-split":{"n":"dpkg-split","p":"/dpkg-split","d":"Debian Linux中将大软件包分割成小包"},"cupsenable":{"n":"cupsenable","p":"/cupsenable","d":"启动指定的打印机"},"quotacheck":{"n":"quotacheck","p":"/quotacheck","d":"检查磁盘的使用空间与限制"},"get_module":{"n":"get_module","p":"/get_module","d":"获取Linux内核模块的详细信息"},"uncompress":{"n":"uncompress","p":"/uncompress","d":"用来解压.Z文件"},"ssh-keygen":{"n":"ssh-keygen","p":"/ssh-keygen","d":"为ssh生成、管理和转换认证密钥"},"traceroute\r":{"n":"traceroute\r","p":"/traceroute","d":"显示数据包到主机间的路径"},"mysqladmin":{"n":"mysqladmin","p":"/mysqladmin","d":"MySQL服务器管理客户端"},"mkbootdisk":{"n":"mkbootdisk","p":"/mkbootdisk","d":"可建立目前系统的启动盘"},"unprotoize":{"n":"unprotoize","p":"/unprotoize","d":"删除C语言源代码文件中的函数原型"},"ssh-copy-id":{"n":"ssh-copy-id","p":"/ssh-copy-id","d":"把本地的ssh公钥文件安装到远程主机对应的账户下"},"consoletype":{"n":"consoletype","p":"/consoletype","d":"输出已连接的终端类型"},"ssh-keyscan":{"n":"ssh-keyscan","p":"/ssh-keyscan","d":"收集主机公钥的使用工具"},"squidclient":{"n":"squidclient","p":"/squidclient","d":"squid服务器的客户端管理工具"},"mysqlimport":{"n":"mysqlimport","p":"/mysqlimport","d":"为MySQL服务器用命令行方式导入数据"},"cupsdisable":{"n":"cupsdisable","p":"/cupsdisable","d":"停止指定的打印机"},"inotifywait":{"n":"inotifywait","p":"/inotifywait","d":"异步文件系统监控机制"},"dpkg-divert":{"n":"dpkg-divert","p":"/dpkg-divert","d":"Debian Linux中创建并管理一个转向列表"},"sftp-server":{"n":"sftp-server","p":"/sftp-server","d":"sftp协议的服务器端程序"},"lsb_release":{"n":"lsb_release","p":"/lsb_release","d":"显示发行版本信息"},"firewall-cmd":{"n":"firewall-cmd","p":"/firewall-cmd","d":"Linux上新用的防火墙软件,跟iptables差不多的工具。"},"bzip2recover":{"n":"bzip2recover","p":"/bzip2recover","d":"恢复被破坏的.bz2压缩包中的文件"},"dpkg-trigger":{"n":"dpkg-trigger","p":"/dpkg-trigger","d":"Debian Linux下的软件包触发器"},"convertquota":{"n":"convertquota","p":"/convertquota","d":"把老的配额文件转换为新的格式"},"ypdomainname":{"n":"ypdomainname","p":"/ypdomainname","d":"显示主机的NIS的域名"},"apt-sortpkgs":{"n":"apt-sortpkgs","p":"/apt-sortpkgs","d":"Debian Linux下对软件包索引文件进行排序的工具"},"dnsdomainname":{"n":"dnsdomainname","p":"/dnsdomainname","d":"定义DNS系统中FQDN名称的域名"},"kernelversion":{"n":"kernelversion","p":"/kernelversion","d":"打印当前内核的主版本号"},"nisdomainname":{"n":"nisdomainname","p":"/nisdomainname","d":"显示主机NIS的域名"},"speedtest-cli":{"n":"speedtest-cli","p":"/speedtest-cli","d":"命令行下测试服务器外网速度"},"iptables-save":{"n":"iptables-save","p":"/iptables-save","d":"备份iptables的表配置"},"ip6tables-save":{"n":"ip6tables-save","p":"/ip6tables-save","d":"保存ip6tables表配置"},"dpkg-reconfigure":{"n":"dpkg-reconfigure","p":"/dpkg-reconfigure","d":"Debian Linux中重新配制一个已经安装的软件包"},"iptables-restore":{"n":"iptables-restore","p":"/iptables-restore","d":"还原iptables表的配置"},"dpkg-preconfigure":{"n":"dpkg-preconfigure","p":"/dpkg-preconfigure","d":"Debian Linux中软件包安装之前询问问题"},"dpkg-statoverride":{"n":"dpkg-statoverride","p":"/dpkg-statoverride","d":"Debian Linux中覆盖文件的所有权和模式"},"ip6tables-restore":{"n":"ip6tables-restore","p":"/ip6tables-restore","d":"还原ip6tables表"}} \ No newline at end of file +{"w":{"n":"w","p":"/w","d":"显示目前登入系统的用户信息"},"dd":{"n":"dd","p":"/dd","d":"复制文件并对原文件的内容进行转换和格式化处理"},"ip\r":{"n":"ip\r","p":"/ip","d":"网络配置工具"},"ld":{"n":"ld","p":"/ld","d":"将目标文件连接为可执行程序"},"xz":{"n":"xz","p":"/xz","d":"POSIX 平台开发具有高压缩率的工具。"},"ln\r":{"n":"ln\r","p":"/ln","d":"用来为文件创件连接"},"lp":{"n":"lp","p":"/lp","d":"打印文件或修改排队的打印任务"},"fg":{"n":"fg","p":"/fg","d":"将后台作业放到前台终端运行"},"wc\r":{"n":"wc\r","p":"/wc","d":"统计文件的字节数、字数、行数"},"as":{"n":"as","p":"/as","d":"汇编语言编译器"},"at":{"n":"at","p":"/at","d":"在指定时间执行一个任务"},"fc":{"n":"fc","p":"/fc","d":"修改历史命令并执行"},"ls":{"n":"ls","p":"/ls","d":"显示目录内容列表"},"ab":{"n":"ab","p":"/ab","d":"Apache服务器的性能测试工具"},"vi":{"n":"vi","p":"/vi","d":"功能强大的纯文本编辑器"},"bc":{"n":"bc","p":"/bc","d":"算术操作精密运算工具"},"bg":{"n":"bg","p":"/bg","d":"用于将作业放到后台运行"},"ex":{"n":"ex","p":"/ex","d":"启动vim编辑器的ex编辑模式"},"tr":{"n":"tr","p":"/tr","d":"将字符进行替换压缩和删除"},"ed":{"n":"ed","p":"/ed","d":"单行纯文本编辑器"},"mv":{"n":"mv","p":"/mv","d":"用来对文件或目录重新命名"},"du":{"n":"du","p":"/du","d":"显示每个文件和目录的磁盘使用空间"},"nl":{"n":"nl","p":"/nl","d":"在Linux系统中计算文件内容行号"},"nm":{"n":"nm","p":"/nm","d":"显示二进制目标文件的符号表"},"cd":{"n":"cd","p":"/cd","d":"切换用户当前工作目录"},"od":{"n":"od","p":"/od","d":"输出文件的八进制、十六进制等格式编码的字节"},"pr":{"n":"pr","p":"/pr","d":"将文本文件转换成适合打印的格式"},"su":{"n":"su","p":"/su","d":"用于切换当前用户身份到其他用户身份"},"ps":{"n":"ps","p":"/ps","d":"报告当前系统的进程状态"},"ss\r":{"n":"ss\r","p":"/ss","d":"获取socket统计信息,iproute2 包附带的另一个工具,允许你查询 socket 的有关统计信息。"},"sh":{"n":"sh","p":"/sh","d":"shell命令解释器"},"pv":{"n":"pv","p":"/pv","d":"显示当前在命令行执行的命令的进度信息,管道查看器。"},"df":{"n":"df","p":"/df","d":"显示磁盘的相关信息"},"rm":{"n":"rm","p":"/rm","d":"用于删除给定的文件和目录"},"cp\r":{"n":"cp\r","p":"/cp","d":"将源文件或目录复制到目标文件或目录中"},"id":{"n":"id","p":"/id","d":"显示用户的ID以及所属群组的ID"},"sed":{"n":"sed","p":"/sed","d":"功能强大的流式文本编辑器"},"seq":{"n":"seq","p":"/seq","d":"以指定增量从首数开始打印数字到尾数"},"sar":{"n":"sar","p":"/sar","d":"系统运行状态统计工具"},"rsh":{"n":"rsh","p":"/rsh","d":"连接远程主机并执行命令"},"rpm":{"n":"rpm","p":"/rpm","d":"RPM软件包的管理工具"},"set":{"n":"set","p":"/set","d":"显示或设置shell特性及shell变量"},"cut":{"n":"cut","p":"/cut","d":"连接文件并打印到标准输出设备上"},"zip\r":{"n":"zip\r","p":"/zip","d":"可以用来解压缩文件"},"rev":{"n":"rev","p":"/rev","d":"将文件内容以字符为单位反序输出"},"col":{"n":"col","p":"/col","d":"过滤控制字符"},"rcp\r":{"n":"rcp\r","p":"/rcp","d":"使在两台Linux主机之间的文件复制操作更简单"},"pwd":{"n":"pwd","p":"/pwd","d":"绝对路径方式显示用户当前工作目录"},"pvs":{"n":"pvs","p":"/pvs","d":"输出物理卷信息报表"},"dig":{"n":"dig","p":"/dig","d":"域名查询工具"},"cmp":{"n":"cmp","p":"/cmp","d":"比较两个文件是否有差异"},"ssh\r":{"n":"ssh\r","p":"/ssh","d":"openssh套件中的客户端连接工具"},"sum":{"n":"sum","p":"/sum","d":"计算文件的校验码和显示块数"},"dnf":{"n":"dnf","p":"/dnf","d":"新一代的RPM软件包管理器"},"php":{"n":"php","p":"/php","d":"PHP语言的命令行接口"},"tac":{"n":"tac","p":"/tac","d":"将文件已行为单位的反序输出"},"cat":{"n":"cat","p":"/cat","d":"连接文件并打印到标准输出设备上"},"cal":{"n":"cal","p":"/cal","d":"显示当前日历或指定日期的日历"},"tar\r":{"n":"tar\r","p":"/tar","d":"Linux下的归档使用工具,用来打包和备份。"},"tee":{"n":"tee","p":"/tee","d":"把数据重定向到给定文件和屏幕上"},"scp":{"n":"scp","p":"/scp","d":"加密的方式在本地主机和远程主机之间复制文件"},"man":{"n":"man","p":"/man","d":"查看Linux中的指令帮助"},"elm":{"n":"elm","p":"/elm","d":"纯文本邮件客户端程序"},"env":{"n":"env","p":"/env","d":"显示系统中已存在的环境变量"},"tty":{"n":"tty","p":"/tty","d":"显示连接到当前标准输入的终端设备文件名。"},"awk\r":{"n":"awk\r","p":"/awk","d":"文本和数据进行处理的编程语言"},"lpr":{"n":"lpr","p":"/lpr","d":"将文件发送给指定打印机进行打印"},"atq":{"n":"atq","p":"/atq","d":"列出当前用户的at任务列表"},"lpq":{"n":"lpq","p":"/lpq","d":"显示打印队列中的打印任务的状态信息"},"arp":{"n":"arp","p":"/arp","d":"显示和修改IP到MAC转换表"},"lpc":{"n":"lpc","p":"/lpc","d":"命令行方式打印机控制程序"},"arj":{"n":"arj","p":"/arj","d":"用于创建和管理.arj压缩包"},"who":{"n":"who","p":"/who","d":"显示目前登录系统的用户信息"},"fmt":{"n":"fmt","p":"/fmt","d":"读取文件后优化处理并输出"},"ftp\r":{"n":"ftp\r","p":"/ftp","d":"用来设置文件系统相关功能"},"lha":{"n":"lha","p":"/lha","d":"压缩或解压缩lzh格式文件"},"let":{"n":"let","p":"/let","d":"简单的计算器"},"gcc":{"n":"gcc","p":"/gcc","d":"基于C/C++的编译器"},"gdb":{"n":"gdb","p":"/gdb","d":"功能强大的程序调试器"},"ldd":{"n":"ldd","p":"/ldd","d":"打印程序或者库文件所依赖的共享库列表"},"yes":{"n":"yes","p":"/yes","d":"重复打印指定字符串"},"gpm":{"n":"gpm","p":"/gpm","d":"提供文字模式下的滑鼠事件处理"},"joe":{"n":"joe","p":"/joe","d":"强大的纯文本编辑器"},"jed":{"n":"jed","p":"/jed","d":"主要用于编辑代码的编辑器"},"yum\r":{"n":"yum\r","p":"/yum","d":"基于RPM的软件包管理器"},"top":{"n":"top","p":"/top","d":"显示或管理执行中的程序"},"sync":{"n":"sync","p":"/sync","d":"用于强制被改变的内容立刻写入磁盘"},"pvck":{"n":"pvck","p":"/pvck","d":"检测物理卷的LVM元数据的一致性"},"wall":{"n":"wall","p":"/wall","d":"向系统当前所有打开的终端上输出信息"},"chfn":{"n":"chfn","p":"/chfn","d":"用来改变finger命令显示的信息"},"pssh":{"n":"pssh","p":"/pssh","d":"批量管理执行"},"dirs":{"n":"dirs","p":"/dirs","d":"显示目录记录"},"sudo":{"n":"sudo","p":"/sudo","d":"以其他身份来执行命令"},"arch":{"n":"arch","p":"/arch","d":"显示当前主机的硬件架构类型"},"stty":{"n":"stty","p":"/stty","d":"修改终端命令行的相关设置"},"popd":{"n":"popd","p":"/popd","d":"用于删除目录栈中的记录"},"pmap":{"n":"pmap","p":"/pmap","d":"报告进程的内存映射关系"},"ping":{"n":"ping","p":"/ping","d":"测试主机之间网络的连通性"},"pico":{"n":"pico","p":"/pico","d":"功能强大全屏幕的文本编辑器"},"stat":{"n":"stat","p":"/stat","d":"用于显示文件的状态信息"},"perl":{"n":"perl","p":"/perl","d":"perl语言解释器"},"sshd":{"n":"sshd","p":"/sshd","d":"openssh软件套件中的服务器守护进程"},"nmap":{"n":"nmap","p":"/nmap","d":"网络探测和安全审核"},"bind":{"n":"bind","p":"/bind","d":"显示或设置键盘按键与其相关的功能"},"chsh":{"n":"chsh","p":"/chsh","d":"用来更换登录系统时使用的shell"},"nice":{"n":"nice","p":"/nice","d":"改变程序执行的优先权等级"},"dpkg":{"n":"dpkg","p":"/dpkg","d":"Debian Linux系统上安装、创建和管理软件包"},"dris":{"n":"dris","p":"/dris","d":"显示和清空目录堆栈中的内容"},"nano":{"n":"nano","p":"/nano","d":"字符终端文本编辑器"},"uniq":{"n":"uniq","p":"/uniq","d":"报告或忽略文件中的重复行"},"dump":{"n":"dump","p":"/dump","d":"用于备份ext2或者ext3文件系统"},"sort":{"n":"sort","p":"/sort","d":"将文件进行排序并输出"},"more":{"n":"more","p":"/more","d":"显示文件内容,每次显示一屏"},"echo":{"n":"echo","p":"/echo","d":"输出指定的字符串或者变量"},"type":{"n":"type","p":"/type","d":"显示指定命令的类型"},"mkfs":{"n":"mkfs","p":"/mkfs","d":"用于在设备上创建Linux文件系统"},"mesg":{"n":"mesg","p":"/mesg","d":"设置当前终端的写权限"},"znew":{"n":"znew","p":"/znew","d":"将.Z压缩包重新转化为gzip命令压缩的.gz压缩包"},"make":{"n":"make","p":"/make","d":"GNU的工程化编译工具"},"tree\r":{"n":"tree\r","p":"/tree","d":"树状图列出目录的内容"},"mail":{"n":"mail","p":"/mail","d":"命令行下发送和接收电子邮件"},"lynx":{"n":"lynx","p":"/lynx","d":"纯文本模式的网页浏览器"},"sftp":{"n":"sftp","p":"/sftp","d":"交互式的文件传输程序"},"lsof":{"n":"lsof","p":"/lsof","d":"显示Linux系统当前已打开的所有文件列表"},"comm":{"n":"comm","p":"/comm","d":"两个文件之间的比较"},"exec":{"n":"exec","p":"/exec","d":"调用并执行指定的命令"},"exit":{"n":"exit","p":"/exit","d":"退出当前的shell"},"trap":{"n":"trap","p":"/trap","d":"指定在接收到信号后将要采取的动作"},"lprm":{"n":"lprm","p":"/lprm","d":"删除打印队列中的打印任务"},"atop":{"n":"atop","p":"/atop","d":"监控Linux系统资源与进程的工具"},"expr":{"n":"expr","p":"/expr","d":"一款表达式计算工具"},"tput":{"n":"tput","p":"/tput","d":"通过terminfo数据库对终端会话进行初始化和操作"},"xset":{"n":"xset","p":"/xset","d":"设置X-Window系统中的用户爱好的实用工具"},"time":{"n":"time","p":"/time","d":"统计给定命令所花费的总时间"},"cpio":{"n":"cpio","p":"/cpio","d":"用来建立、还原备份档的工具程序"},"file":{"n":"file","p":"/file","d":"用来探测给定文件的类型。"},"find\r":{"n":"find\r","p":"/find","d":"在指定目录下查找文件"},"tftp":{"n":"tftp","p":"/tftp","d":"在本机和tftp服务器之间使用TFTP协议传输文件"},"look":{"n":"look","p":"/look","d":"显示文件中以指定字符串开头的任意行"},"test":{"n":"test","p":"/test","d":"shell环境中测试条件表达式工具"},"atrm":{"n":"atrm","p":"/atrm","d":"删除待执行任务队列中的指定任务"},"fold":{"n":"fold","p":"/fold","d":"控制文件内容输出时所占用的屏幕宽度"},"free\r":{"n":"free\r","p":"/free","d":"显示内存的使用情况"},"fsck":{"n":"fsck","p":"/fsck","d":"检查并且试图修复文件系统中的错误"},"arpd":{"n":"arpd","p":"/arpd","d":"收集免费ARP信息"},"lilo":{"n":"lilo","p":"/lilo","d":"安装核心载入开机管理程序"},"curl":{"n":"curl","p":"/curl","d":"利用URL规则在命令行下工作的文件传输工具"},"lftp":{"n":"lftp","p":"/lftp","d":"优秀的文件客户端程序"},"axel":{"n":"axel","p":"/axel","d":"多线程下载工具"},"less":{"n":"less","p":"/less","d":"分屏上下翻页浏览文件内容"},"date\r":{"n":"date\r","p":"/date","d":"显示或设置系统时间与日期"},"gcov":{"n":"gcov","p":"/gcov","d":"测试程序的代码覆盖率的工具"},"talk":{"n":"talk","p":"/talk","d":"让用户和其他用户聊天"},"wait":{"n":"wait","p":"/wait","d":"等待进程执行完后返回"},"read":{"n":"read","p":"/read","d":"从键盘读取变量值"},"last":{"n":"last","p":"/last","d":"列出目前与过去登入系统的用户相关信息"},"kill":{"n":"kill","p":"/kill","d":"删除执行中的程序或工作"},"wget":{"n":"wget","p":"/wget","d":"Linux系统下载文件工具"},"grep\r":{"n":"grep\r","p":"/grep","d":"强大的文本搜索工具"},"join":{"n":"join","p":"/join","d":"两个文件中指定栏位内容相同的行连接起来"},"tail\r":{"n":"tail\r","p":"/tail","d":"在屏幕上显示指定文件的末尾若干行"},"jobs":{"n":"jobs","p":"/jobs","d":"显示Linux中的任务列表及任务状态"},"zcat":{"n":"zcat","p":"/zcat","d":"显示压缩包中文件的内容"},"ipcs":{"n":"ipcs","p":"/ipcs","d":"分析消息队列共享内存和信号量 "},"pwck":{"n":"pwck","p":"/pwck","d":"用来验证系统认证文件内容和格式的完整性"},"init":{"n":"init","p":"/init","d":"init进程是所有Linux进程的父进程"},"grub":{"n":"grub","p":"/grub","d":"多重引导程序grub的命令行shell工具"},"info":{"n":"info","p":"/info","d":"Linux下info格式的帮助指令"},"ifup":{"n":"ifup","p":"/ifup","d":"激活指定的网络接口"},"gzip\r":{"n":"gzip\r","p":"/gzip","d":"用来压缩文件"},"halt":{"n":"halt","p":"/halt","d":"关闭正在运行的Linux操作系统"},"diff":{"n":"diff","p":"/diff","d":"比较给定的两个文件的不同"},"head":{"n":"head","p":"/head","d":"在屏幕上显示指定文件的开头若干行"},"help":{"n":"help","p":"/help","d":"显示帮助信息"},"htop":{"n":"htop","p":"/htop","d":"[非内部命令]一个互动的进程查看器,可以动态观察系统进程状况。"},"host":{"n":"host","p":"/host","d":"常用的分析域名查询工具"},"mysql":{"n":"mysql","p":"/mysql","d":"MySQL服务器客户端工具"},"colrm":{"n":"colrm","p":"/colrm","d":"删除文件中的指定列"},"zfore":{"n":"zfore","p":"/zfore","d":"强制为gzip格式的压缩文件添加.gz后缀"},"iconv":{"n":"iconv","p":"/iconv","d":"转换文件的编码方式"},"ifcfg":{"n":"ifcfg","p":"/ifcfg","d":"置Linux中的网络接口参数"},"gzexe":{"n":"gzexe","p":"/gzexe","d":"用来压缩可执行文件"},"iotop":{"n":"iotop","p":"/iotop","d":"用来监视磁盘I/O使用状况的工具"},"xinit":{"n":"xinit","p":"/xinit","d":"是Linux下X-Window系统的初始化程序"},"xhost":{"n":"xhost","p":"/xhost","d":"制哪些X客户端能够在X服务器上显示"},"xclip":{"n":"xclip","p":"/xclip","d":"管理 X 粘贴板"},"ipcrm":{"n":"ipcrm","p":"/ipcrm","d":"删除消息队列、信号集、或者共享内存标识"},"grpck":{"n":"grpck","p":"/grpck","d":"用于验证组文件的完整性"},"iperf":{"n":"iperf","p":"/iperf","d":"网络性能测试工具"},"xauth":{"n":"xauth","p":"/xauth","d":"显示和编辑被用于连接X服务器的认证信息"},"xargs\r":{"n":"xargs\r","p":"/xargs","d":"给其他命令传递参数的一个过滤器"},"write":{"n":"write","p":"/write","d":"向指定登录用户终端上发送信息"},"which":{"n":"which","p":"/which","d":"查找并显示给定命令的绝对路径"},"kexec":{"n":"kexec","p":"/kexec","d":"从当前正在运行的内核引导到一个新内核"},"watch\r":{"n":"watch\r","p":"/watch","d":"可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令"},"lastb":{"n":"lastb","p":"/lastb","d":"列出登入系统失败的用户相关信息"},"batch":{"n":"batch","p":"/batch","d":"在系统不繁忙的时候执行定时任务"},"fuser":{"n":"fuser","p":"/fuser","d":"使用文件或文件结构识别进程"},"login":{"n":"login","p":"/login","d":"登录系统或切换用户身份"},"users":{"n":"users","p":"/users","d":"显示当前登录系统的所有用户"},"fgrep":{"n":"fgrep","p":"/fgrep","d":"为文件搜索文字字符串"},"fdisk\r":{"n":"fdisk\r","p":"/fdisk","d":"查看磁盘使用情况和磁盘分区"},"lsblk":{"n":"lsblk","p":"/lsblk","d":"列出块设备信息"},"lscpu":{"n":"lscpu","p":"/lscpu","d":"显示有关CPU架构的信息"},"lsmod":{"n":"lsmod","p":"/lsmod","d":"显示已载入系统的模块"},"lspci":{"n":"lspci","p":"/lspci","d":"显示当前主机的所有PCI总线信息"},"lsusb":{"n":"lsusb","p":"/lsusb","d":"显示本机的USB设备列表信息"},"unzip":{"n":"unzip","p":"/unzip","d":"用于解压缩由zip命令压缩的压缩包"},"unset":{"n":"unset","p":"/unset","d":"删除指定的shell变量或函数"},"blkid":{"n":"blkid","p":"/blkid","d":"查看块设备的文件系统类型、LABEL、UUID等信息"},"emacs":{"n":"emacs","p":"/emacs","d":"功能强大的全屏文本编辑器"},"mailq":{"n":"mailq","p":"/mailq","d":"显示待发送的邮件队列"},"unarj":{"n":"unarj","p":"/unarj","d":"解压缩由arj命令创建的压缩包"},"eject":{"n":"eject","p":"/eject","d":"用来退出抽取式设备"},"egrep":{"n":"egrep","p":"/egrep","d":"在文件内查找指定的字符串"},"uname":{"n":"uname","p":"/uname","d":"显示Linux系统信息"},"mkdir":{"n":"mkdir","p":"/mkdir","d":"用来创建目录"},"mknod":{"n":"mknod","p":"/mknod","d":"创建字符设备文件和块设备文件"},"umask":{"n":"umask","p":"/umask","d":"用来设置限制新建文件权限的掩码"},"alias":{"n":"alias","p":"/alias","d":"用来设置指令的别名"},"bzcat":{"n":"bzcat","p":"/bzcat","d":"解压缩指定的.bz2文件"},"bzcmp":{"n":"bzcmp","p":"/bzcmp","d":"比较两个压缩包中的文件"},"dstat":{"n":"dstat","p":"/dstat","d":"通用的系统资源统计工具"},"ncftp":{"n":"ncftp","p":"/ncftp","d":"是增强的的FTP工具"},"touch":{"n":"touch","p":"/touch","d":"创建新的空文件"},"ngrep":{"n":"ngrep","p":"/ngrep","d":"方便的数据包匹配和显示工具"},"tload":{"n":"tload","p":"/tload","d":"显示系统负载状况"},"bzip2":{"n":"bzip2","p":"/bzip2","d":"将文件压缩成bz2格式"},"nmcli":{"n":"nmcli","p":"/nmcli","d":"地址配置工具"},"nohup":{"n":"nohup","p":"/nohup","d":"将程序以忽略挂起信号的方式运行起来"},"paste":{"n":"paste","p":"/paste","d":"将多个文件按列队列合并"},"patch":{"n":"patch","p":"/patch","d":"为开放源代码软件安装补丁程序"},"pfctl":{"n":"pfctl","p":"/pfctl","d":"PF防火墙的配置命令"},"pgrep":{"n":"pgrep","p":"/pgrep","d":"设置用户的认证信息,包括用户密码、密码过期时间等"},"tailf":{"n":"tailf","p":"/tailf","d":"在屏幕上显示指定文件的末尾若干行内容,通常用于日志文件的跟踪输出。"},"pidof":{"n":"pidof","p":"/pidof","d":"查找指定名称的进程的进程号ID号"},"chage":{"n":"chage","p":"/chage","d":"修改帐号和密码的有效期限"},"pkill":{"n":"pkill","p":"/pkill","d":"可以按照进程名杀死进程"},"dmesg\r":{"n":"dmesg\r","p":"/dmesg","d":"显示Linux系统启动信息"},"pushd":{"n":"pushd","p":"/pushd","d":"将目录加入命令堆叠中"},"chcon":{"n":"chcon","p":"/chcon","d":"修改对象(文件)的安全上下文"},"chgrp\r":{"n":"chgrp\r","p":"/chgrp","d":"用来变更文件或目录的所属群组"},"chmod\r":{"n":"chmod\r","p":"/chmod","d":"用来变更文件或目录的权限"},"diff3":{"n":"diff3","p":"/diff3","d":"比较3个文件不同的地方"},"chown":{"n":"chown","p":"/chown","d":"用来变更文件或目录的拥有者或所属群组"},"dhcpd":{"n":"dhcpd","p":"/dhcpd","d":"运行DHCP服务器。"},"quota":{"n":"quota","p":"/quota","d":"显示磁盘已使用的空间与限制"},"cksum":{"n":"cksum","p":"/cksum","d":"检查文件的CRC是否正确"},"squid":{"n":"squid","p":"/squid","d":"squid服务器守护进程"},"split":{"n":"split","p":"/split","d":"分割任意大小的文件"},"spell":{"n":"spell","p":"/spell","d":"对文件进行拼写检查"},"rexec":{"n":"rexec","p":"/rexec","d":"运程执行Linux系统下命令 "},"rmdir":{"n":"rmdir","p":"/rmdir","d":"用来删除空目录"},"rmmod":{"n":"rmmod","p":"/rmmod","d":"从运行的内核中移除指定的内核模块"},"route":{"n":"route","p":"/route","d":"显示并设置Linux中静态路由表"},"clear":{"n":"clear","p":"/clear","d":"清除当前屏幕终端上的任何信息"},"sleep":{"n":"sleep","p":"/sleep","d":"将目前动作延迟一段时间"},"rpmdb":{"n":"rpmdb","p":"/rpmdb","d":"初始化和重建RPM数据库"},"skill":{"n":"skill","p":"/skill","d":"向选定的进程发送信号冻结进程"},"shopt":{"n":"shopt","p":"/shopt","d":"显示和设置shell操作选项"},"rsync":{"n":"rsync","p":"/rsync","d":"远程数据同步工具"},"mkswap":{"n":"mkswap","p":"/mkswap","d":"建立和设置SWAP交换分区"},"mpstat":{"n":"mpstat","p":"/mpstat","d":"显示各个可用CPU的状态"},"mtools":{"n":"mtools","p":"/mtools","d":"显示mtools支持的指令"},"e2fsck":{"n":"e2fsck","p":"/e2fsck","d":"用于检查第二扩展文件系统的完整性"},"lnstat":{"n":"lnstat","p":"/lnstat","d":"显示Linux系统的网路状态"},"ulimit":{"n":"ulimit","p":"/ulimit","d":"控制shell程序的资源"},"locate":{"n":"locate","p":"/locate","d":"Apache服务器的性能测试工具"},"logger":{"n":"logger","p":"/logger","d":"在系统日志中记录相应条目"},"iostat":{"n":"iostat","p":"/iostat","d":"监视系统输入输出设备和CPU的使用情况"},"logout":{"n":"logout","p":"/logout","d":"退出当前登录的Shell"},"pwconv":{"n":"pwconv","p":"/pwconv","d":"用来开启用户的投影密码"},"finger":{"n":"finger","p":"/finger","d":"用于查找并显示用户信息"},"bzdiff":{"n":"bzdiff","p":"/bzdiff","d":"直接比较两个.bz2压缩包中文件的不同"},"findfs":{"n":"findfs","p":"/findfs","d":"标签或UUID查找文件系统"},"bzgrep":{"n":"bzgrep","p":"/bzgrep","d":"使用正则表达式搜索.bz2压缩包中文件"},"ifdown":{"n":"ifdown","p":"/ifdown","d":"禁用指定的网络接口"},"telnet\r":{"n":"telnet\r","p":"/telnet","d":"登录远程主机和管理"},"iptraf":{"n":"iptraf","p":"/iptraf","d":"实时地监视网卡流量"},"export":{"n":"export","p":"/export","d":"设置或显示系统环境变量"},"telint":{"n":"telint","p":"/telint","d":"切换当前正在运行系统的运行等级"},"ntsysv":{"n":"ntsysv","p":"/ntsysv","d":"集中管理系统的各种服务"},"bzless":{"n":"bzless","p":"/bzless","d":"增强.bz2压缩包查看器"},"parted":{"n":"parted","p":"/parted","d":"磁盘分区和分区大小调整工具"},"passwd":{"n":"passwd","p":"/passwd","d":"用于让用户可以更改自己的密码"},"lpstat":{"n":"lpstat","p":"/lpstat","d":"显示CUPS中打印机的状态信息"},"expand":{"n":"expand","p":"/expand","d":"将文件的制表符转换为空白字符"},"bzmore":{"n":"bzmore","p":"/bzmore","d":"查看bzip2压缩过的文本文件的内容"},"lsattr":{"n":"lsattr","p":"/lsattr","d":"查看文件的第二扩展文件系统属性"},"whoami":{"n":"whoami","p":"/whoami","d":"打印当前有效的用户名称"},"cancel":{"n":"cancel","p":"/cancel","d":"取消已存在的打印任务"},"ispell":{"n":"ispell","p":"/ispell","d":"检查文件中出现的拼写错误"},"groups":{"n":"groups","p":"/groups","d":"用来打印指定用户所属的工作组"},"ifstat":{"n":"ifstat","p":"/ifstat","d":"统计网络接口流量状态"},"whatis":{"n":"whatis","p":"/whatis","d":"查询一个命令执行什么功能"},"syslog":{"n":"syslog","p":"/syslog","d":"系统默认的日志守护进程"},"sysctl":{"n":"sysctl","p":"/sysctl","d":"时动态地修改内核的运行参数"},"chattr":{"n":"chattr","p":"/chattr","d":"用来改变文件属性"},"printf":{"n":"printf","p":"/printf","d":"格式化并输出结果"},"swapon":{"n":"swapon","p":"/swapon","d":"激活Linux系统中交换空间"},"ltrace":{"n":"ltrace","p":"/ltrace","d":"用来跟踪进程调用库函数的情况"},"pstack":{"n":"pstack","p":"/pstack","d":"显示每个进程的栈跟踪"},"pstree\r":{"n":"pstree\r","p":"/pstree","d":"以树状图的方式展现进程之间的派生关系"},"uptime":{"n":"uptime","p":"/uptime","d":"查看Linux系统负载信息"},"jwhois":{"n":"jwhois","p":"/jwhois","d":"whois 客户端服务"},"arping":{"n":"arping","p":"/arping","d":"通过发送ARP协议报文测试网络"},"unlink":{"n":"unlink","p":"/unlink","d":"系统调用函数unlink去删除指定的文件"},"strace":{"n":"strace","p":"/strace","d":"跟踪系统调用和信号"},"accept":{"n":"accept","p":"/accept","d":"指示打印系统接受发往指定目标打印机的打印任务"},"pvscan":{"n":"pvscan","p":"/pvscan","d":"扫描系统中所有硬盘的物理卷列表"},"hdparm":{"n":"hdparm","p":"/hdparm","d":"显示与设定硬盘的参数"},"hostid":{"n":"hostid","p":"/hostid","d":"用来打印当前主机的数字化标识"},"lvscan":{"n":"lvscan","p":"/lvscan","d":"扫描逻辑卷"},"startx":{"n":"startx","p":"/startx","d":"用来启动X Window"},"enable":{"n":"enable","p":"/enable","d":"启动或关闭shell内建命令"},"chroot":{"n":"chroot","p":"/chroot","d":"把根目录换成指定的目的目录"},"rcconf":{"n":"rcconf","p":"/rcconf","d":"Debian Linux下的运行等级服务配置工具"},"ipcalc":{"n":"ipcalc","p":"/ipcalc","d":"简单的IP地址计算器"},"depmod":{"n":"depmod","p":"/depmod","d":"分析可载入模块的相依性"},"indent":{"n":"indent","p":"/indent","d":"格式化C语言的源文件"},"reboot":{"n":"reboot","p":"/reboot","d":"重新启动正在运行的Linux操作系统"},"reject":{"n":"reject","p":"/reject","d":"指示打印系统拒绝发往指定目标打印机的打印任务"},"rename":{"n":"rename","p":"/rename","d":"用字符串替换的方式批量改变文件名"},"renice":{"n":"renice","p":"/renice","d":"修改正在运行的进程的调度优先级"},"vmstat":{"n":"vmstat","p":"/vmstat","d":"显示虚拟内存状态"},"elinks":{"n":"elinks","p":"/elinks","d":"纯文本界面的WWW浏览器"},"gunzip":{"n":"gunzip","p":"/gunzip","d":"用来解压缩文件"},"rlogin":{"n":"rlogin","p":"/rlogin","d":"从当前终端登录到远程Linux主机"},"source":{"n":"source","p":"/source","d":"在当前Shell环境中从指定文件读取和执行命令,命令返回退出状态。"},"md5sum":{"n":"md5sum","p":"/md5sum","d":"计算和校验文件报文摘要的工具程序"},"insmod":{"n":"insmod","p":"/insmod","d":"将给定的模块加载到内核中"},"ftpwho":{"n":"ftpwho","p":"/ftpwho","d":"显示当前每个ftp会话信息"},"ftptop":{"n":"ftptop","p":"/ftptop","d":"proftpd服务器的连接状态"},"mke2fs":{"n":"mke2fs","p":"/mke2fs","d":"创建磁盘分区上的“etc2/etc3”文件系统"},"umount":{"n":"umount","p":"/umount","d":"用于卸载已经加载的文件系统"},"vgscan":{"n":"vgscan","p":"/vgscan","d":"扫描并显示系统中的卷组"},"hping3":{"n":"hping3","p":"/hping3","d":"测试网络及主机的安全"},"csplit":{"n":"csplit","p":"/csplit","d":"将一个大文件分割成小的碎片文件"},"mktemp":{"n":"mktemp","p":"/mktemp","d":"创建临时文件供shell脚本使用"},"vdfuse":{"n":"vdfuse","p":"/vdfuse","d":"VirtualBox软件挂载VDI分区文件工具"},"setpci":{"n":"setpci","p":"/setpci","d":"查询和配置PCI设备的使用工具"},"screen":{"n":"screen","p":"/screen","d":"用于命令行终端切换"},"seinfo":{"n":"seinfo","p":"/seinfo","d":"查询SELinux的策略提供多少相关规则"},"nethogs":{"n":"nethogs","p":"/nethogs","d":"终端下的网络流量监控工具"},"netstat":{"n":"netstat","p":"/netstat","d":"查看Linux中网络系统状态信息"},"lpadmin":{"n":"lpadmin","p":"/lpadmin","d":"配置CUPS套件中的打印机和类"},"swapoff":{"n":"swapoff","p":"/swapoff","d":"关闭指定的交换空间"},"nfsstat":{"n":"nfsstat","p":"/nfsstat","d":"列出NFS客户端和服务器的工作状态"},"hwclock":{"n":"hwclock","p":"/hwclock","d":"显示与设定硬件时钟"},"install":{"n":"install","p":"/install","d":"安装或升级软件或备份数据"},"strings":{"n":"strings","p":"/strings","d":"在对象文件或二进制文件中查找可打印的字符串"},"userdel":{"n":"userdel","p":"/userdel","d":"用于删除给定的用户以及与用户相关的文件"},"whereis":{"n":"whereis","p":"/whereis","d":"查找二进制程序、代码等相关文件路径"},"zipinfo":{"n":"zipinfo","p":"/zipinfo","d":"用来列出压缩文件信息"},"lftpget":{"n":"lftpget","p":"/lftpget","d":"调用lftp指令下载指定的文件"},"ftpshut":{"n":"ftpshut","p":"/ftpshut","d":"在指定的时间关闭FTP服务器"},"unalias":{"n":"unalias","p":"/unalias","d":"删除由alias设置的别名"},"nologin":{"n":"nologin","p":"/nologin","d":"拒绝用户登录系统"},"useradd":{"n":"useradd","p":"/useradd","d":"创建的新的系统用户"},"ntpdate":{"n":"ntpdate","p":"/ntpdate","d":"使用网络计时协议(NTP)设置日期和时间"},"ssh-add":{"n":"ssh-add","p":"/ssh-add","d":"把专用密钥添加到ssh-agent的高速缓存中"},"quotaon":{"n":"quotaon","p":"/quotaon","d":"激活Linux内核中指定文件系统的磁盘配额功能"},"hexdump":{"n":"hexdump","p":"/hexdump","d":"显示文件十六进制格式"},"objdump":{"n":"objdump","p":"/objdump","d":"显示二进制文件信息"},"edquota":{"n":"edquota","p":"/edquota","d":"用于编辑指定用户或工作组磁盘配额"},"readelf":{"n":"readelf","p":"/readelf","d":"用于显示elf格式文件的信息"},"openssl":{"n":"openssl","p":"/openssl","d":"强大的安全套接字层密码库"},"grpconv":{"n":"grpconv","p":"/grpconv","d":"用来开启群组的投影密码"},"tcpdump\r":{"n":"tcpdump\r","p":"/tcpdump","d":"一款sniffer工具,是Linux上的抓包工具,嗅探器。"},"mkisofs":{"n":"mkisofs","p":"/mkisofs","d":"建立ISO 9660映像文件"},"history":{"n":"history","p":"/history","d":"用于显示历史命令"},"ethtool":{"n":"ethtool","p":"/ethtool","d":"显示或修改以太网卡的配置信息"},"restore":{"n":"restore","p":"/restore","d":"所进行的操作和dump指令相反"},"pathchk":{"n":"pathchk","p":"/pathchk","d":"检查文件中不可移植的部分"},"declare":{"n":"declare","p":"/declare","d":"声明或显示shell变量"},"gpasswd":{"n":"gpasswd","p":"/gpasswd","d":"Linux下工作组文件的管理工具"},"killall":{"n":"killall","p":"/killall","d":"使用进程的名称来杀死一组进程"},"e2label":{"n":"e2label","p":"/e2label","d":"设置第二扩展文件系统的卷标"},"apropos":{"n":"apropos","p":"/apropos","d":"在 whatis 数据库中查找字符串"},"logname":{"n":"logname","p":"/logname","d":"用来显示用户名称"},"apt-get":{"n":"apt-get","p":"/apt-get","d":"Debian Linux发行版中的APT软件包管理工具"},"lastlog":{"n":"lastlog","p":"/lastlog","d":"显示系统中所有用户最近一次登录信息"},"logsave":{"n":"logsave","p":"/logsave","d":"将命令的输出信息保存到指定的日志文件"},"slabtop":{"n":"slabtop","p":"/slabtop","d":"实时显示内核slab内存缓存信息"},"systool":{"n":"systool","p":"/systool","d":"显示基于总线、类和拓扑显示系统中设备的信息"},"builtin":{"n":"builtin","p":"/builtin","d":"执行shell内部命令"},"rpmsign":{"n":"rpmsign","p":"/rpmsign","d":"使用RPM软件包的签名管理工具"},"bunzip2":{"n":"bunzip2","p":"/bunzip2","d":"创一个bz2文件压缩包"},"ppp-off":{"n":"ppp-off","p":"/ppp-off","d":"关闭ppp连线"},"usermod":{"n":"usermod","p":"/usermod","d":"用于修改用户的基本信息"},"volname":{"n":"volname","p":"/volname","d":"显示指定的ISO-9660格式的设备的卷名称"},"crontab":{"n":"crontab","p":"/crontab","d":"提交和管理用户的需要周期性执行的任务"},"losetup":{"n":"losetup","p":"/losetup","d":"设定与控制循环(loop)设备"},"apt-key":{"n":"apt-key","p":"/apt-key","d":"管理Debian Linux系统中的软件包密钥"},"setfacl":{"n":"setfacl","p":"/setfacl","d":"设置文件访问控制列表"},"dirname":{"n":"dirname","p":"/dirname","d":"去除文件名中的非目录部分"},"command":{"n":"command","p":"/command","d":"调用并执行指定的命令"},"service":{"n":"service","p":"/service","d":"控制系统服务的实用工具"},"compress":{"n":"compress","p":"/compress","d":"使用Lempress-Ziv编码压缩数据文件"},"lvremove":{"n":"lvremove","p":"/lvremove","d":"删除指定LVM逻辑卷"},"sesearch":{"n":"sesearch","p":"/sesearch","d":"查询SELinux策略的规则详情"},"semanage":{"n":"semanage","p":"/semanage","d":"默认目录的安全上下文查询与修改"},"zipsplit":{"n":"zipsplit","p":"/zipsplit","d":"将较大的zip压缩包分割成各个较小的压缩包"},"hostname":{"n":"hostname","p":"/hostname","d":"显示和设置系统的主机名"},"htdigest":{"n":"htdigest","p":"/htdigest","d":"Apache服务器内置工具"},"htpasswd":{"n":"htpasswd","p":"/htpasswd","d":"apache服务器创建密码认证文件"},"runlevel":{"n":"runlevel","p":"/runlevel","d":"打印当前Linux系统的运行等级"},"ifconfig":{"n":"ifconfig","p":"/ifconfig","d":"配置和显示Linux系统网卡的网络参数"},"xlsfonts":{"n":"xlsfonts","p":"/xlsfonts","d":"列出X Server使用的字体"},"xlsatoms":{"n":"xlsatoms","p":"/xlsatoms","d":"列出X服务器内部所有定义的原子成分"},"shutdown":{"n":"shutdown","p":"/shutdown","d":"用来执行系统关机的命令"},"rpmquery":{"n":"rpmquery","p":"/rpmquery","d":"从RPM数据库中查询软件包信息"},"rpmbuild":{"n":"rpmbuild","p":"/rpmbuild","d":"创建RPM的二进制软件包和源码软件包"},"rpm2cpio":{"n":"rpm2cpio","p":"/rpm2cpio","d":"将RPM软件包转换为cpio格式的文件"},"iptables":{"n":"iptables","p":"/iptables","d":"Linux上常用的防火墙软件"},"iptstate":{"n":"iptstate","p":"/iptstate","d":"显示iptables的工作状态"},"aptitude":{"n":"aptitude","p":"/aptitude","d":"Debian Linux系统中软件包管理工具"},"groupmod":{"n":"groupmod","p":"/groupmod","d":"更改群组识别码或名称"},"groupdel":{"n":"groupdel","p":"/groupdel","d":"用于删除指定的工作组"},"groupadd":{"n":"groupadd","p":"/groupadd","d":"用于创建一个新的工作组"},"repquota":{"n":"repquota","p":"/repquota","d":"报表的格式输出磁盘空间限制的状态"},"readonly":{"n":"readonly","p":"/readonly","d":"定义只读shell变量或函数"},"arpwatch":{"n":"arpwatch","p":"/arpwatch","d":"监听网络上ARP的记录"},"dhclient":{"n":"dhclient","p":"/dhclient","d":"动态获取或释放IP地址"},"quotaoff":{"n":"quotaoff","p":"/quotaoff","d":"关闭Linux内核中指定文件系统的磁盘配额功能"},"basename":{"n":"basename","p":"/basename","d":"打印目录或者文件的基本名称"},"ldconfig":{"n":"ldconfig","p":"/ldconfig","d":"动态链接库管理命令"},"ftpcount":{"n":"ftpcount","p":"/ftpcount","d":"显示目前已FTP登入的用户人数"},"vgrename":{"n":"vgrename","p":"/vgrename","d":"使用vgrename命令可以重命名卷组的名称。"},"vgremove":{"n":"vgremove","p":"/vgremove","d":"用于用户删除LVM卷组"},"chpasswd":{"n":"chpasswd","p":"/chpasswd","d":"批量更新用户口令的工具"},"pwunconv":{"n":"pwunconv","p":"/pwunconv","d":"用来关闭用户的投影密码"},"dhcrelay":{"n":"dhcrelay","p":"/dhcrelay","d":"使用dhcrelay命令可以提供中继DHCP和BOOTP请求"},"pvremove":{"n":"pvremove","p":"/pvremove","d":"删除一个存在的物理卷"},"vgreduce":{"n":"vgreduce","p":"/vgreduce","d":"从卷组中删除物理卷"},"pvcreate":{"n":"pvcreate","p":"/pvcreate","d":"将物理硬盘分区初始化为物理卷"},"vgextend":{"n":"vgextend","p":"/vgextend","d":"向卷组中添加物理卷"},"diffstat":{"n":"diffstat","p":"/diffstat","d":"显示diff命令输出信息的柱状图"},"pvchange":{"n":"pvchange","p":"/pvchange","d":"修改物理卷属性"},"vgcreate":{"n":"vgcreate","p":"/vgcreate","d":"用于创建LVM卷组"},"protoize":{"n":"protoize","p":"/protoize","d":"GNU-C代码转换为ANSI-C代码"},"vgchange":{"n":"vgchange","p":"/vgchange","d":"修改卷组属性"},"poweroff":{"n":"poweroff","p":"/poweroff","d":"关闭Linux系统,关闭记录会被写入到/var/log/wtmp日志文件中。"},"logwatch":{"n":"logwatch","p":"/logwatch","d":"可定制和可插入式的日志监视系统"},"exportfs":{"n":"exportfs","p":"/exportfs","d":"管理NFS共享文件系统列表"},"lvcreate":{"n":"lvcreate","p":"/lvcreate","d":"用于创建LVM的逻辑卷"},"dos2unix":{"n":"dos2unix","p":"/dos2unix","d":"将DOS格式文本文件转换成Unix格式"},"cdrecord":{"n":"cdrecord","p":"/cdrecord","d":"Linux系统下光盘刻录功能命令"},"dpkg-deb":{"n":"dpkg-deb","p":"/dpkg-deb","d":"Debian Linux下的软件包管理工具"},"updatedb":{"n":"updatedb","p":"/updatedb","d":"创建或更新slocate命令所必需的数据库文件"},"lvextend":{"n":"lvextend","p":"/lvextend","d":"扩展逻辑卷空间"},"lvreduce":{"n":"lvreduce","p":"/lvreduce","d":"收缩逻辑卷空间"},"lvresize":{"n":"lvresize","p":"/lvresize","d":"调整逻辑卷空间大小"},"unexpand":{"n":"unexpand","p":"/unexpand","d":"将文件的空白字符转换为制表符"},"nslookup":{"n":"nslookup","p":"/nslookup","d":"查询域名DNS信息的工具"},"mailstat":{"n":"mailstat","p":"/mailstat","d":"显示到达的邮件状态"},"tempfile":{"n":"tempfile","p":"/tempfile","d":"shell中给临时文件命名"},"mii-tool":{"n":"mii-tool","p":"/mii-tool","d":"配置网络设备协商方式的工具"},"mkinitrd":{"n":"mkinitrd","p":"/mkinitrd","d":"建立要载入ramdisk的映像文件"},"modprobe\r":{"n":"modprobe\r","p":"/modprobe","d":"自动处理可载入模块"},"blockdev":{"n":"blockdev","p":"/blockdev","d":"从命令行调用区块设备控制程序"},"bmodinfo":{"n":"bmodinfo","p":"/bmodinfo","d":"显示给定模块的详细信息"},"newusers":{"n":"newusers","p":"/newusers","d":"用于批处理的方式一次创建多个命令"},"sendmail":{"n":"sendmail","p":"/sendmail","d":"著名电子邮件服务器"},"smbpasswd":{"n":"smbpasswd","p":"/smbpasswd","d":"samba用户和密码管理工具"},"mysqlshow":{"n":"mysqlshow","p":"/mysqlshow","d":"显示MySQL中数据库相关信息"},"apachectl":{"n":"apachectl","p":"/apachectl","d":"Apache服务器前端控制工具"},"mysqldump":{"n":"mysqldump","p":"/mysqldump","d":"MySQL数据库中备份工具"},"clockdiff":{"n":"clockdiff","p":"/clockdiff","d":"检测两台linux主机的时间差"},"grpunconv":{"n":"grpunconv","p":"/grpunconv","d":"用来关闭群组的投影密码"},"rpmverify":{"n":"rpmverify","p":"/rpmverify","d":"验证已安装的RPM软件包的正确性"},"showmount":{"n":"showmount","p":"/showmount","d":"显示NFS服务器加载的信息"},"tcpreplay":{"n":"tcpreplay","p":"/tcpreplay","d":"将PCAP包重新发送,用于性能或者功能测试"},"partprobe":{"n":"partprobe","p":"/partprobe","d":"不重启的情况下重读分区"},"ip6tables":{"n":"ip6tables","p":"/ip6tables","d":"linux中防火墙软件"},"lvdisplay":{"n":"lvdisplay","p":"/lvdisplay","d":"显示逻辑卷属性"},"smbclient":{"n":"smbclient","p":"/smbclient","d":"交互方式访问samba服务器"},"setsebool":{"n":"setsebool","p":"/setsebool","d":"修改SElinux策略内各项规则的布尔值"},"systemctl":{"n":"systemctl","p":"/systemctl","d":"系统服务管理器指令"},"logrotate":{"n":"logrotate","p":"/logrotate","d":"统日志进行轮转、压缩和删除"},"dmidecode\r":{"n":"dmidecode\r","p":"/dmidecode","d":"在Linux系统下获取有关硬件方面的信息"},"vgconvert":{"n":"vgconvert","p":"/vgconvert","d":"转换卷组元数据格式"},"dircolors":{"n":"dircolors","p":"/dircolors","d":"置ls命令在显示目录或文件时所用的色彩"},"vgdisplay":{"n":"vgdisplay","p":"/vgdisplay","d":"显示LVM卷组的信息"},"chkconfig\r":{"n":"chkconfig\r","p":"/chkconfig","d":"检查或设置系统的各种服务"},"pvdisplay":{"n":"pvdisplay","p":"/pvdisplay","d":"显示物理卷的属性"},"tracepath":{"n":"tracepath","p":"/tracepath","d":"追踪目的主机经过的路由信息"},"arptables":{"n":"arptables","p":"/arptables","d":"管理ARP包过滤规则表"},"ssh-agent":{"n":"ssh-agent","p":"/ssh-agent","d":"ssh密钥管理器"},"badblocks":{"n":"badblocks","p":"/badblocks","d":"查找磁盘中损坏的区块"},"getsebool":{"n":"getsebool","p":"/getsebool","d":"查询SElinux策略内各项规则的布尔值"},"restorecon":{"n":"restorecon","p":"/restorecon","d":"恢复文件的安全上下文"},"dpkg-split":{"n":"dpkg-split","p":"/dpkg-split","d":"Debian Linux中将大软件包分割成小包"},"unprotoize":{"n":"unprotoize","p":"/unprotoize","d":"删除C语言源代码文件中的函数原型"},"mkbootdisk":{"n":"mkbootdisk","p":"/mkbootdisk","d":"可建立目前系统的启动盘"},"xlsclients":{"n":"xlsclients","p":"/xlsclients","d":"列出显示器中的客户端应用程序"},"mysqladmin":{"n":"mysqladmin","p":"/mysqladmin","d":"MySQL服务器管理客户端"},"domainname":{"n":"domainname","p":"/domainname","d":"显示和设置系统的NIS域名"},"quotacheck":{"n":"quotacheck","p":"/quotacheck","d":"检查磁盘的使用空间与限制"},"uncompress":{"n":"uncompress","p":"/uncompress","d":"用来解压.Z文件"},"ssh-keygen":{"n":"ssh-keygen","p":"/ssh-keygen","d":"为ssh生成、管理和转换认证密钥"},"get_module":{"n":"get_module","p":"/get_module","d":"获取Linux内核模块的详细信息"},"dpkg-query":{"n":"dpkg-query","p":"/dpkg-query","d":"Debian Linux中软件包的查询工具"},"getenforce":{"n":"getenforce","p":"/getenforce","d":"显示当前SELinux的应用模式,是强制、执行还是停用。"},"cupsenable":{"n":"cupsenable","p":"/cupsenable","d":"启动指定的打印机"},"usernetctl":{"n":"usernetctl","p":"/usernetctl","d":"被允许时操作指定的网络接口"},"traceroute\r":{"n":"traceroute\r","p":"/traceroute","d":"显示数据包到主机间的路径"},"squidclient":{"n":"squidclient","p":"/squidclient","d":"squid服务器的客户端管理工具"},"ssh-keyscan":{"n":"ssh-keyscan","p":"/ssh-keyscan","d":"收集主机公钥的使用工具"},"consoletype":{"n":"consoletype","p":"/consoletype","d":"输出已连接的终端类型"},"sftp-server":{"n":"sftp-server","p":"/sftp-server","d":"sftp协议的服务器端程序"},"mysqlimport":{"n":"mysqlimport","p":"/mysqlimport","d":"为MySQL服务器用命令行方式导入数据"},"inotifywait":{"n":"inotifywait","p":"/inotifywait","d":"异步文件系统监控机制"},"cupsdisable":{"n":"cupsdisable","p":"/cupsdisable","d":"停止指定的打印机"},"lsb_release":{"n":"lsb_release","p":"/lsb_release","d":"显示发行版本信息"},"dpkg-divert":{"n":"dpkg-divert","p":"/dpkg-divert","d":"Debian Linux中创建并管理一个转向列表"},"ssh-copy-id":{"n":"ssh-copy-id","p":"/ssh-copy-id","d":"把本地的ssh公钥文件安装到远程主机对应的账户下"},"apt-sortpkgs":{"n":"apt-sortpkgs","p":"/apt-sortpkgs","d":"Debian Linux下对软件包索引文件进行排序的工具"},"firewall-cmd":{"n":"firewall-cmd","p":"/firewall-cmd","d":"Linux上新用的防火墙软件,跟iptables差不多的工具。"},"dpkg-trigger":{"n":"dpkg-trigger","p":"/dpkg-trigger","d":"Debian Linux下的软件包触发器"},"ypdomainname":{"n":"ypdomainname","p":"/ypdomainname","d":"显示主机的NIS的域名"},"bzip2recover":{"n":"bzip2recover","p":"/bzip2recover","d":"恢复被破坏的.bz2压缩包中的文件"},"convertquota":{"n":"convertquota","p":"/convertquota","d":"把老的配额文件转换为新的格式"},"dnsdomainname":{"n":"dnsdomainname","p":"/dnsdomainname","d":"定义DNS系统中FQDN名称的域名"},"iptables-save":{"n":"iptables-save","p":"/iptables-save","d":"备份iptables的表配置"},"kernelversion":{"n":"kernelversion","p":"/kernelversion","d":"打印当前内核的主版本号"},"speedtest-cli":{"n":"speedtest-cli","p":"/speedtest-cli","d":"命令行下测试服务器外网速度"},"nisdomainname":{"n":"nisdomainname","p":"/nisdomainname","d":"显示主机NIS的域名"},"ip6tables-save":{"n":"ip6tables-save","p":"/ip6tables-save","d":"保存ip6tables表配置"},"named-checkzone":{"n":"named-checkzone","p":"/named-checkzone","d":"使用named-checkzone命令可以进行区域文件有效性检查和转换,必须指定区域名称和区域文件名称。"},"iptables-restore":{"n":"iptables-restore","p":"/iptables-restore","d":"还原iptables表的配置"},"dpkg-reconfigure":{"n":"dpkg-reconfigure","p":"/dpkg-reconfigure","d":"Debian Linux中重新配制一个已经安装的软件包"},"dpkg-preconfigure":{"n":"dpkg-preconfigure","p":"/dpkg-preconfigure","d":"Debian Linux中软件包安装之前询问问题"},"dpkg-statoverride":{"n":"dpkg-statoverride","p":"/dpkg-statoverride","d":"Debian Linux中覆盖文件的所有权和模式"},"ip6tables-restore":{"n":"ip6tables-restore","p":"/ip6tables-restore","d":"还原ip6tables表"}} \ No newline at end of file diff --git a/package.json b/package.json index 1493f0ca6ad..b53d2ec305a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "linux-command", - "version": "1.0.1", + "version": "1.0.3", "description": "Linux Command", "main": "dist/data.json", "scripts": { From d3041972a8abd5a019f29b54796fffd305c1b8a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Thu, 17 Aug 2017 11:27:31 +0800 Subject: [PATCH 0067/1284] Update awk.md --- command/awk.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/command/awk.md b/command/awk.md index d480d6403c1..c1381b102a0 100644 --- a/command/awk.md +++ b/command/awk.md @@ -206,6 +206,12 @@ awk '{ print v1,v2 }' v1=$var1 v2=$var2 filename 以上方法中,变量之间用空格分隔作为awk的命令行参数跟随在BEGIN、{}和END语句块之后。 +## 查找进程pid + +``` +netstat -antup | grep 7770 | awk '{ print $NF NR}' | awk '{ print $1}' +``` + ## awk运算与判断 作为一种程序设计语言所应具有的特点之一,awk支持多种运算,这些运算与C语言提供的基本相同。awk还提供了一系列内置的运算函数(如log、sqr、cos、sin等)和一些用于对字符串进行操作(运算)的函数(如length、substr等等)。这些函数的引用大大的提高了awk的运算功能。作为对条件转移指令的一部分,关系判断是每种程序设计语言都具备的功能,awk也不例外,awk中允许进行多种测试,作为样式匹配,还提供了模式匹配表达式~(匹配)和~!(不匹配)。作为对测试的一种扩充,awk也支持用逻辑运算符。 From b034db29da54c39f7a6f648c240cfb7c3da8c22f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Tue, 22 Aug 2017 00:02:19 +0800 Subject: [PATCH 0068/1284] Update awk.md --- command/awk.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/command/awk.md b/command/awk.md index c1381b102a0..870a7295415 100644 --- a/command/awk.md +++ b/command/awk.md @@ -852,7 +852,7 @@ awk 'BEGIN{n1=124.113;n2=-1.224;n3=1.2345; printf("%.2f,%.2u,%.2g,%X,%on",n1,n2, | ---- | ---- | | close( Expression ) | 用同一个带字符串值的 Expression 参数来关闭由 print 或 printf 语句打开的或调用 getline 函数打开的文件或管道。如果文件或管道成功关闭,则返回 0;其它情况下返回非零值。如果打算写一个文件,并稍后在同一个程序中读取文件,则 close 语句是必需的。 | | system(command ) | 执行 Command 参数指定的命令,并返回退出状态。等同于 system 子例程。| -| Expression \| getline [ Variable ] | 从来自 Expression 参数指定的命令的输出中通过管道传送的流中读取一个输入记录,并将该记录的值指定给 Variable 参数指定的变量。如果当前未打开将 Expression 参数的值作为其命令名称的流,则创建流。创建的流等同于调用 popen 子例程,此时 Command 参数取 Expression 参数的值且 Mode 参数设置为一个是 r 的值。只要流保留打开且 Expression 参数求得同一个字符串,则对 getline 函数的每次后续调用读取另一个记录。如果未指定 Variable 参数,则 $0 记录变量和 NF 特殊变量设置为从流读取的记录。| +| Expression `\|` getline [ Variable ] | 从来自 Expression 参数指定的命令的输出中通过管道传送的流中读取一个输入记录,并将该记录的值指定给 Variable 参数指定的变量。如果当前未打开将 Expression 参数的值作为其命令名称的流,则创建流。创建的流等同于调用 popen 子例程,此时 Command 参数取 Expression 参数的值且 Mode 参数设置为一个是 r 的值。只要流保留打开且 Expression 参数求得同一个字符串,则对 getline 函数的每次后续调用读取另一个记录。如果未指定 Variable 参数,则 $0 记录变量和 NF 特殊变量设置为从流读取的记录。| | getline [ Variable ] < Expression | 从 Expression 参数指定的文件读取输入的下一个记录,并将 Variable 参数指定的变量设置为该记录的值。只要流保留打开且 Expression 参数对同一个字符串求值,则对 getline 函数的每次后续调用读取另一个记录。如果未指定 Variable 参数,则 $0 记录变量和 NF 特殊变量设置为从流读取的记录。 | | getline [ Variable ] | 将 Variable 参数指定的变量设置为从当前输入文件读取的下一个输入记录。如果未指定 Variable 参数,则 $0 记录变量设置为该记录的值,还将设置 NF、NR 和 FNR 特殊变量。 | From 2d3b6f997701647210699cf6143d8ad1c2ee8ac6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Wed, 23 Aug 2017 17:43:48 +0800 Subject: [PATCH 0069/1284] Update ifstat.md --- command/ifstat.md | 127 +++++++++++++++++++++++----------------------- 1 file changed, 64 insertions(+), 63 deletions(-) diff --git a/command/ifstat.md b/command/ifstat.md index 754725d9017..2f3f2c2bb17 100644 --- a/command/ifstat.md +++ b/command/ifstat.md @@ -1,63 +1,64 @@ -ifstat -=== - -统计网络接口流量状态 - -## 补充说明 - -**ifstat命令** 就像iostat/vmstat描述其它的系统状况一样,是一个统计网络接口活动状态的工具。ifstat工具系统中并不默认安装,需要自己下载源码包,重新编译安装,使用过程相对比较简单。 - -### 下载 - -``` -http://gael.roualland.free.fr/ifstat/ (官网) -wget http://gael.roualland.free.fr/ifstat/ifstat-1.1.tar.gz -``` - -### 编译安装 - -``` -tar -zxvf ifstat-1.1.tar.gz -cd ifstat-1.1 -./configure #默认会安装到/usr/local/bin/目录中 -make ;make install -``` - -注释:执行`which ifstat`输出`/usr/local/bin/ifstat` - -### 选项 - -``` --l 监测环路网络接口(lo)。缺省情况下,ifstat监测活动的所有非环路网络接口。经使用发现,加上-l参数能监测所有的网络接口的信息,而不是只监测 lo的接口信息,也就是说,加上-l参数比不加-l参数会多一个lo接口的状态信息。 --a 监测能检测到的所有网络接口的状态信息。使用发现,比加上-l参数还多一个plip0的接口信息,搜索一下发现这是并口(网络设备中有一 个叫PLIP (Parallel Line Internet Protocol). 它提供了并口...) --z 隐藏流量是无的接口,例如那些接口虽然启动了但是未用的 --i 指定要监测的接口,后面跟网络接口名 --s 等于加-d snmp:[comm@][#]host[/nn]] 参数,通过SNMP查询一个远程主机 --h 显示简短的帮助信息 --n 关闭显示周期性出现的头部信息(也就是说,不加-n参数运行ifstat时最顶部会出现网络接口的名称,当一屏显示不下时,会再一次出现接口的名称,提示我们显示的流量信息具体是哪个网络接口的。加上-n参数把周期性的显示接口名称关闭,只显示一次) --t 在每一行的开头加一个时间 戳(能告诉我们具体的时间) --T 报告所有监测接口的全部带宽(最后一列有个total,显示所有的接口的in流量和所有接口的out流量,简单的把所有接口的in流量相加,out流量相 加) --w 用指定的列宽,而不是为了适应接口名称的长度而去自动放大列宽 --W 如果内容比终端窗口的宽度还要宽就自动换行 --S 在同一行保持状态更新(不滚动不换行)注:如果不喜欢屏幕滚动则此项非常方便,与bmon的显示方式类似 --b 用kbits/s显示带宽而不是kbytes/s --q 安静模式,警告信息不出现 --v 显示版本信息 --d 指定一个驱动来收集状态信息 -``` - -### 实例 - -``` -[root@flow_video]# 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 -16:53:04 0.84 0.62 1256.27 1173.05 0.12 0.18 0.00 0.00 1257.22 1173.86 -16:53:05 0.57 0.40 0.57 0.76 0.00 0.00 0.00 0.00 1.14 1.17 -16:53:06 1.58 0.71 0.42 0.78 0.00 0.00 0.00 0.00 2.01 1.48 -16:53:07 0.57 0.40 1.91 2.61 0.00 0.00 0.00 0.00 2.48 3.01 -16:53:08 0.73 0.40 924.02 1248.91 0.00 0.00 0.00 0.00 924.76 1249.31 -``` - - - \ No newline at end of file +ifstat +=== + +统计网络接口流量状态 + +## 补充说明 + +**ifstat命令** 就像iostat/vmstat描述其它的系统状况一样,是一个统计网络接口活动状态的工具。ifstat工具系统中并不默认安装,需要自己下载源码包,重新编译安装,使用过程相对比较简单。 + +### 下载 + +``` +http://gael.roualland.free.fr/ifstat/ (官网) +wget http://gael.roualland.free.fr/ifstat/ifstat-1.1.tar.gz +``` + +### 编译安装 + +``` +tar -zxvf ifstat-1.1.tar.gz +cd ifstat-1.1 +./configure +make +make install # 默认会安装到/usr/local/bin/目录中 +``` + +注释:执行`which ifstat`输出`/usr/local/bin/ifstat` + +### 选项 + +``` +-l 监测环路网络接口(lo)。缺省情况下,ifstat监测活动的所有非环路网络接口。经使用发现,加上-l参数能监测所有的网络接口的信息,而不是只监测 lo的接口信息,也就是说,加上-l参数比不加-l参数会多一个lo接口的状态信息。 +-a 监测能检测到的所有网络接口的状态信息。使用发现,比加上-l参数还多一个plip0的接口信息,搜索一下发现这是并口(网络设备中有一 个叫PLIP (Parallel Line Internet Protocol). 它提供了并口...) +-z 隐藏流量是无的接口,例如那些接口虽然启动了但是未用的 +-i 指定要监测的接口,后面跟网络接口名 +-s 等于加-d snmp:[comm@][#]host[/nn]] 参数,通过SNMP查询一个远程主机 +-h 显示简短的帮助信息 +-n 关闭显示周期性出现的头部信息(也就是说,不加-n参数运行ifstat时最顶部会出现网络接口的名称,当一屏显示不下时,会再一次出现接口的名称,提示我们显示的流量信息具体是哪个网络接口的。加上-n参数把周期性的显示接口名称关闭,只显示一次) +-t 在每一行的开头加一个时间 戳(能告诉我们具体的时间) +-T 报告所有监测接口的全部带宽(最后一列有个total,显示所有的接口的in流量和所有接口的out流量,简单的把所有接口的in流量相加,out流量相 加) +-w 用指定的列宽,而不是为了适应接口名称的长度而去自动放大列宽 +-W 如果内容比终端窗口的宽度还要宽就自动换行 +-S 在同一行保持状态更新(不滚动不换行)注:如果不喜欢屏幕滚动则此项非常方便,与bmon的显示方式类似 +-b 用kbits/s显示带宽而不是kbytes/s +-q 安静模式,警告信息不出现 +-v 显示版本信息 +-d 指定一个驱动来收集状态信息 +``` + +### 实例 + +``` +[root@flow_video]# 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 +16:53:04 0.84 0.62 1256.27 1173.05 0.12 0.18 0.00 0.00 1257.22 1173.86 +16:53:05 0.57 0.40 0.57 0.76 0.00 0.00 0.00 0.00 1.14 1.17 +16:53:06 1.58 0.71 0.42 0.78 0.00 0.00 0.00 0.00 2.01 1.48 +16:53:07 0.57 0.40 1.91 2.61 0.00 0.00 0.00 0.00 2.48 3.01 +16:53:08 0.73 0.40 924.02 1248.91 0.00 0.00 0.00 0.00 924.76 1249.31 +``` + + + From 2e6b4281d20581ba41a450640220dedd341837f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Wed, 23 Aug 2017 17:48:11 +0800 Subject: [PATCH 0070/1284] Update ifstat.md --- command/ifstat.md | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/command/ifstat.md b/command/ifstat.md index 2f3f2c2bb17..5174b76e1d6 100644 --- a/command/ifstat.md +++ b/command/ifstat.md @@ -49,8 +49,20 @@ make install # 默认会安装到/usr/local/bin/目录中 ### 实例 +默认使用 + +``` +[root@localhost ifstat-1.1] #ifstat + eth0 eth1 + KB/s in KB/s out KB/s in KB/s out + 0.07 0.20 0.00 0.00 + 0.07 0.15 0.58 0.00 +``` + +默认ifstat不监控回环接口,显示的流量单位是KB。 + ``` -[root@flow_video]# ifstat -tT +[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 16:53:04 0.84 0.62 1256.27 1173.05 0.12 0.18 0.00 0.00 1257.22 1173.86 @@ -60,5 +72,15 @@ HH:MM:ss KB/s in KB/s out KB/s in KB/s out KB/s in KB/s out KB/s in 16:53:08 0.73 0.40 924.02 1248.91 0.00 0.00 0.00 0.00 924.76 1249.31 ``` +监控所有网络接口 + +``` +[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 + 0.00 0.00 0.28 0.58 0.06 0.06 + 0.00 0.00 1.41 1.13 0.00 0.00 + 0.61 0.61 0.26 0.23 0.00 0.00 +``` From 464d9eb9e9dddc089f1e792b09521cf13102c9ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Wed, 23 Aug 2017 17:54:18 +0800 Subject: [PATCH 0071/1284] Create ar.md --- command/ar.md | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 command/ar.md diff --git a/command/ar.md b/command/ar.md new file mode 100644 index 00000000000..fe1b803c714 --- /dev/null +++ b/command/ar.md @@ -0,0 +1,47 @@ +ar +=== + +建立或修改备存文件,或是从备存文件中抽取文件 + +## 补充说明 + +**ab命令** 是一个建立或修改备存文件,或是从备存文件中抽取文件的工具,ar可让您集合许多文件,成为单一的备存文件。在备存文件中,所有成员文件皆保有原来的属性与权限 + +### 语法 + +``` +ab(选项)(参数) +``` + +### 选项 + +指令参数 + +``` +-d  删除备存文件中的成员文件。 +-m  变更成员文件在备存文件中的次序。 +-p  显示备存文件中的成员文件内容。 +-q  将问家附加在备存文件末端。 +-r  将文件插入备存文件中。 +-t  显示备存文件中所包含的文件。 +-x  自备存文件中取出成员文件。 +``` + +选项参数 + +``` +a <成员文件>  将文件插入备存文件中指定的成员文件之后。 +b <成员文件>  将文件插入备存文件中指定的成员文件之前。 +c  建立备存文件。 +f  为避免过长的文件名不兼容于其他系统的ar指令指令,因此可利用此参数,截掉要放入备存文件中过长的成员文件名称。 +i <成员文件>  将问家插入备存文件中指定的成员文件之前。 +o  保留备存文件中文件的日期。 +s  若备存文件中包含了对象模式,可利用此参数建立备存文件的符号表。 +S  不产生符号表。 +u  只将日期较新文件插入备存文件中。 +v  程序执行时显示详细的信息。 +V  显示版本信息。 +``` + + + From fb0c010290a790fade04216df43d495425068f73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Wed, 23 Aug 2017 17:58:11 +0800 Subject: [PATCH 0072/1284] Update ar.md --- command/ar.md | 46 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/command/ar.md b/command/ar.md index fe1b803c714..9097ccded0d 100644 --- a/command/ar.md +++ b/command/ar.md @@ -15,7 +15,7 @@ ab(选项)(参数) ### 选项 -指令参数 +必要参数 ``` -d  删除备存文件中的成员文件。 @@ -43,5 +43,49 @@ v  程序执行时显示详细的信息。 V  显示版本信息。 ``` +### 实例 + +打包文件 + +``` +[root@localhost ~]# ls //显示当前目录文件 +a.c b.c d.c install.log qte +anaconda-ks.cfg c.c Desktop + +[root@localhost ~]# ar rv one.bak a.c b.c //打包 a.c b.c文件 +ar: 正在创建 one.bak +a - a.c +a - b.c +``` + +打包多个文件 + +``` +[root@localhost ~]# ar rv two.bak *.c //打包以.c结尾的文件 +ar: 正在创建 two.bak +a - a.c +a - b.c +a - c.c +a - d.c +``` + +显示打包文件的内容 + +``` +[root@localhost ~]# ar t two.bak +a.c +b.c +c.c +d.c +``` + +删除打包文件的成员文件 + +``` +[root@localhost ~]# ar d two.bak a.c b.c c.c +[root@localhost ~]# ar t two.bak +d.c +``` + From e59a52553c833ee984580ef051a84c6691f83305 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Wed, 23 Aug 2017 18:01:24 +0800 Subject: [PATCH 0073/1284] Create slocate.md --- command/slocate.md | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 command/slocate.md diff --git a/command/slocate.md b/command/slocate.md new file mode 100644 index 00000000000..7b71d4f77fd --- /dev/null +++ b/command/slocate.md @@ -0,0 +1,46 @@ +slocate +=== + +命令查找文件或目录 + +## 补充说明 + +**as命令** 是一个命令查找文件或目录。slocate本身具有一个数据库,里面存放了系统中文件与目录的相关信息。 + +### 语法 + +``` +slocate [-u][--help][--version][-d <目录>][查找的文件] +``` + +### 选项 + +``` +-d<目录>或--database=<目录>  指定数据库所在的目录。 +-u  更新slocate数据库。 +--help  显示帮助。 +--version  显示版本信息。 +``` + +### 实例 + +使用指令"slocate"显示文件名中含有关键字"fdisk"的文件路径信息,输入如下命令: + +``` +$ slocate fdisk #显示文件名中含有fdisk关键字的文件的路径信息 +``` + +执行以上命令后,指令执行的输出信息如下: + +``` +$ slocate fdisk #显示文件名中含有fdisk 关键字的文件的路径信息 +/root/cfdisk #搜索到的文件路径列表 +/root/fdisk +/root/sfdisk +/usr/include/grub/ieee1275/ofdisk.h +/usr/share/doc/util-Linux/README.cfdisk +/usr/share/doc/util-Linux/README.fdisk.gz +/usr/share/doc/util-Linux/examples/sfdisk.examples.gz +``` + + From 6ead2594a779efea3f2462657c58cbb88719d84b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Wed, 23 Aug 2017 18:10:31 +0800 Subject: [PATCH 0074/1284] Create clock.md --- command/clock.md | 49 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 command/clock.md diff --git a/command/clock.md b/command/clock.md new file mode 100644 index 00000000000..17cc3436def --- /dev/null +++ b/command/clock.md @@ -0,0 +1,49 @@ +clock +=== + +用于调整 RTC 时间。 + +## 补充说明 + +**clock命令**用于调整 RTC 时间。 RTC 是电脑内建的硬件时间,执行这项指令可以显示现在时刻,调整硬件时钟的时间,将系统时间设成与硬件时钟之时间一致,或是把系统时间回存到硬件时钟。 + +### 语法 + +``` +clock [--adjust][--debug][--directisa][--getepoch][--hctosys][--set --date="<日期时间>"] +[--setepoch --epoch=< >][--show][--systohc][--test][--utc][--version] +``` + +### 选项 + +``` +--adjust  第一次使用"--set"或"--systohc"参数设置硬件时钟,会在/etc目录下产生一个名称为adjtime的文件。当再次使用这两个参数调整硬件时钟,此文件便会记录两次调整间之差异,日后执行clock指令加上"--adjust"参数时,程序会自动根 据记录文件的数值差异,计算出平均值,自动调整硬件时钟的时间。 +--debug  详细显示指令执行过程,便于排错或了解程序执行的情形。 +--directisa  告诉clock指令不要通过/dev/rtc设备文件,直接对硬件时钟进行存取。这个参数适用于仅有ISA总线结构的老式电脑。 +--getepoch  把系统核心内的硬件时钟新时代数值,呈现到标准输出设备。 +--hctosys  Hardware Clock to System Time,把系统时间设成和硬件时钟一致。由于这个动作将会造成系统全面更新文件的存取时间,所以最好在系统启动时就执行它。 +--set--date  设置硬件时钟的日期和时间。 +--setepoch--epoch=<年份>  设置系统核心之硬件时钟的新时代数值,年份以四位树字表示。 +--show  读取硬件时钟的时间,并将其呈现至标准输出设备。 +--systohc  System Time to Hardware Clock,将系统时间存回硬件时钟内。 +--test  仅作测试,并不真的将时间写入硬件时钟或系统时间。 +--utc  把硬件时钟上的时间时为CUT,有时也称为UTC或UCT。 +--version  显示版本信息。 +``` + +### 实例 + +获取当前的时间 + +```bash +clock # 获取当前的时间 +``` + +显示UTC时间 + +```bash +clock -utc #显示UTC时间 +``` + + + From 2c3cdc49edef51470d1dd0652908a96906ab9c03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Wed, 23 Aug 2017 18:10:52 +0800 Subject: [PATCH 0075/1284] Update ar.md --- command/ar.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/command/ar.md b/command/ar.md index 9097ccded0d..4718e72f35b 100644 --- a/command/ar.md +++ b/command/ar.md @@ -5,7 +5,7 @@ ar ## 补充说明 -**ab命令** 是一个建立或修改备存文件,或是从备存文件中抽取文件的工具,ar可让您集合许多文件,成为单一的备存文件。在备存文件中,所有成员文件皆保有原来的属性与权限 +**ar命令** 是一个建立或修改备存文件,或是从备存文件中抽取文件的工具,ar可让您集合许多文件,成为单一的备存文件。在备存文件中,所有成员文件皆保有原来的属性与权限 ### 语法 From 3513ebd46b8d3e26f8a07ec0adf7706ad898cad8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Wed, 23 Aug 2017 18:12:28 +0800 Subject: [PATCH 0076/1284] Update slocate.md --- command/slocate.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/command/slocate.md b/command/slocate.md index 7b71d4f77fd..05c3d0a1e38 100644 --- a/command/slocate.md +++ b/command/slocate.md @@ -5,7 +5,7 @@ slocate ## 补充说明 -**as命令** 是一个命令查找文件或目录。slocate本身具有一个数据库,里面存放了系统中文件与目录的相关信息。 +**slocate命令** 是一个命令查找文件或目录。slocate本身具有一个数据库,里面存放了系统中文件与目录的相关信息。 ### 语法 From 9fb550c0c1715cf4e6cad5ffc2836aa53b518062 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Wed, 23 Aug 2017 18:16:51 +0800 Subject: [PATCH 0077/1284] Create resize.md --- command/resize.md | 53 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 command/resize.md diff --git a/command/resize.md b/command/resize.md new file mode 100644 index 00000000000..615bc79cddf --- /dev/null +++ b/command/resize.md @@ -0,0 +1,53 @@ +resize +=== + +命令设置终端机视窗的大小。 + +## 补充说明 + +**resize命令** 命令设置终端机视窗的大小。执行resize指令可设置虚拟终端机的视窗大小。 + +### 语法 + +``` +resize [-cu][-s <列数> <行数>] +``` + +### 选项 + +``` +-c  就算用户环境并非C Shell,也用C Shell指令改变视窗大小。 +-s <列数> <行数>  设置终端机视窗的垂直高度和水平宽度。 +-u  就算用户环境并非Bourne Shell,也用Bourne Shell指令改变视窗大小。 +``` + +### 实例 + +使用 C shell + +``` +[root@localhost ~]# resize -c +set noglob; +setenv COLUMNS '99'; +setenv LINES '34'; +unset noglob; +``` + + +使用 Bourne shell + +``` +[root@localhost ~]# resize -u +COLUMNS=99; +LINES=34; +export COLUMNS LINES; +``` + +设置指定大小 + +``` +[root@localhost ~]# resize -s 80 160 +``` + + + From c9ff6392530d4ae4019378ad31b8580da1b98587 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Wed, 23 Aug 2017 18:38:23 +0800 Subject: [PATCH 0078/1284] Create cu.md --- command/cu.md | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 command/cu.md diff --git a/command/cu.md b/command/cu.md new file mode 100644 index 00000000000..a3c8147f46f --- /dev/null +++ b/command/cu.md @@ -0,0 +1,49 @@ +cu +=== + +用于连接另一个系统主机。 + +## 补充说明 + +**cu命令** 用于连接另一个系统主机。cu(call up)指令可连接另一台主机,并采用类似拨号终端机的接口工作,也可执行简易的文件传输作业。 + +### 语法 + +``` +cu [dehnotv][-a<通信端口>][-c<电话号码>][-E<脱离字符>][-I<设置文件>][-l<外围设备代号>] +[-s<连线速率>][-x<排错模式>][-z<系统主机>][--help][-nostop][--parity=none][<系统主机>/<电话号码>] +``` + +### 选项 + +``` +-a<通信端口>或-p<通信端口>或--port<通信端口> 使用指定的通信端口进行连线。 +-c<电话号码>或--phone<电话号码> 拨打该电话号码。 +-d 进入排错模式。 +-e或--parity=even 使用双同位检查。 +-E<脱离字符>或--escape<脱离字符> 设置脱离字符。 +-h或--halfduple 使用半双工模式。 +-I<配置文件>或--config<配置文件> 指定要使用的配置文件。 +-l<外围设备代号>或--line<外围设备代号> 指定某项外围设备,作为连接的设备。 +-n或--prompt 拨号时等待用户输入电话号码。 +-o或--parity=odd 使用单同位检查。 +-s<连线速率>或--speed<连线速率>或--baud<连线速率>或-<连线速率> 设置连线的速率,单位以鲍率计算。 +-t或--maper 把CR字符置换成LF+CR字符。 +-v或--version 显示版本信息。 +-x<排错模式>或--debug<排错模式> 使用排错模式。 +-z<系统主机>或--system<系统主机> 连接该系统主机。 +--help 在线帮助。 +--nostop 关闭Xon/Xoff软件流量控制。 +--parity=none 不使用同位检查。 +``` + +### 实例 + +与远程主机连接 + +``` +cu -c 0102377765 +``` + + + From b65136d7b546b9178fbf9d8137a3624d3ced283d Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Wed, 23 Aug 2017 19:10:16 +0800 Subject: [PATCH 0079/1284] Create nc.md --- command/nc.md | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 command/nc.md diff --git a/command/nc.md b/command/nc.md new file mode 100644 index 00000000000..e8cd6b22f88 --- /dev/null +++ b/command/nc.md @@ -0,0 +1,63 @@ +nc +=== + +命令用于设置路由器。 + +## 补充说明 + +**nc命令** 用于设置路由器。执行本指令可设置路由器的相关参数。 + +### 语法 + +``` +nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>] +[-s<来源位址>][-v...][-w<超时秒数>][主机名称][通信端口...] +``` + +### 选项 + +``` +-g<网关> 设置路由器跃程通信网关,最丢哦可设置8个。 +-G<指向器数目> 设置来源路由指向器,其数值为4的倍数。 +-h 在线帮助。 +-i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。 +-l 使用监听模式,管控传入的资料。 +-n 直接使用IP地址,而不通过域名服务器。 +-o<输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。 +-p<通信端口> 设置本地主机使用的通信端口。 +-r 乱数指定本地与远端主机的通信端口。 +-s<来源位址> 设置本地主机送出数据包的IP地址。 +-u 使用UDP传输协议。 +-v 显示指令执行过程。 +-w<超时秒数> 设置等待连线的时间。 +-z 使用0输入/输出模式,只在扫描通信端口时使用。 +``` + +### 实例 + +TCP端口扫描 + +``` +[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 +(UNKNOWN) [192.168.0.3] 23 (telnet) open +(UNKNOWN) [192.168.0.3] 22 (ssh) open +``` + +扫描192.168.0.3 的端口 范围是 1-100 +扫描UDP端口 + +``` +[root@localhost ~]# nc -u -z -w2 192.168.0.1 1-1000 # 扫描192.168.0.3 的端口 范围是 1-1000 +``` + +扫描指定端口 + +``` +[root@localhost ~]# nc -nvv 192.168.0.1 80 # 扫描 80端口 +(UNKNOWN) [192.168.0.1] 80 (?) open +y //用户输入 +``` + + From 1ec104529b46fb82df324c121a275f2fad32202f Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Wed, 23 Aug 2017 19:15:24 +0800 Subject: [PATCH 0080/1284] Create bye.md --- command/bye.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 command/bye.md diff --git a/command/bye.md b/command/bye.md new file mode 100644 index 00000000000..aa8fe9f8042 --- /dev/null +++ b/command/bye.md @@ -0,0 +1,21 @@ +bye +=== + +命令用于中断FTP连线并结束程序。。 + +## 补充说明 + +**bye命令** 在ftp模式下,输入bye即可中断目前的连线作业,并结束ftp的执行。 + + +### 语法 + +``` +bye +``` + +### 实例 + +``` +bye +``` \ No newline at end of file From cecb0e17925802a037edcef1b7e6657de377a98c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Wed, 23 Aug 2017 22:51:32 +0800 Subject: [PATCH 0081/1284] Update which.md --- command/which.md | 96 +++++++++++++++++++++++++----------------------- 1 file changed, 51 insertions(+), 45 deletions(-) diff --git a/command/which.md b/command/which.md index 3092c4f538c..073ddd2a0f0 100644 --- a/command/which.md +++ b/command/which.md @@ -1,45 +1,51 @@ -which -=== - -查找并显示给定命令的绝对路径 - -## 补充说明 - -**which命令** 用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录。which指令会在环境变量$PATH设置的目录里查找符合条件的文件。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。 - -### 语法 - -``` -which(选项)(参数) -``` - -### 选项 - -``` --n<文件名长度>:制定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名; --p<文件名长度>:与-n参数相同,但此处的<文件名长度>包含了文件的路径; --w:指定输出时栏位的宽度; --V:显示版本信息。 -``` - -### 参数 - -指令名:指令名列表。 - -### 实例 - -查找文件、显示命令路径: - -``` -[root@localhost ~]# which pwd -/bin/pwd - -[root@localhost ~]# which adduser -/usr/sbin/adduser - -``` - -说明:which是根据使用者所配置的 PATH 变量内的目录去搜寻可运行档的!所以,不同的 PATH 配置内容所找到的命令当然不一样的! - - - \ No newline at end of file +which +=== + +查找并显示给定命令的绝对路径 + +## 补充说明 + +**which命令** 用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录。which指令会在环境变量$PATH设置的目录里查找符合条件的文件。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。 + +### 语法 + +``` +which(选项)(参数) +``` + +### 选项 + +``` +-n<文件名长度>:制定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名; +-p<文件名长度>:与-n参数相同,但此处的<文件名长度>包含了文件的路径; +-w:指定输出时栏位的宽度; +-V:显示版本信息。 +``` + +### 参数 + +指令名:指令名列表。 + +### 实例 + +查找文件、显示命令路径: + +``` +[root@localhost ~]# which pwd +/bin/pwd + +[root@localhost ~]# which adduser +/usr/sbin/adduser +``` + +说明:which是根据使用者所配置的 PATH 变量内的目录去搜寻可运行档的!所以,不同的 PATH 配置内容所找到的命令当然不一样的! + +用 which 去找出 cd + +``` +[root@localhost ~]# which cd +cd: shell built-in command +``` +cd 这个常用的命令竟然找不到啊!为什么呢?这是因为 cd 是bash 内建的命令! 但是 which 默认是找 PATH 内所规范的目录,所以当然一定找不到的! + + From 99adf1000dce63cab9efe774e9ba247303cc5453 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Wed, 23 Aug 2017 22:59:01 +0800 Subject: [PATCH 0082/1284] Update locate.md --- command/locate.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/command/locate.md b/command/locate.md index 7cb2827b7b2..39cb7760c3b 100644 --- a/command/locate.md +++ b/command/locate.md @@ -23,10 +23,10 @@ locate [选择参数] [样式] ### 选项 ``` --e 将排除在寻找的范围之外。 --1 如果 是 1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到 的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的 权限资料。 --f 将特定的档案系统排除在外,例如我们没有到理要把 proc 档案系统中的档案 放在资料库中。 --q 安静模式,不会显示任何错误讯息。 +-e 将排除在寻找的范围之外。 +-1 如果 是 1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到 的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的 权限资料。 +-f 将特定的档案系统排除在外,例如我们没有到理要把 proc 档案系统中的档案 放在资料库中。 +-q 安静模式,不会显示任何错误讯息。 -n 至多显示 n个输出。 -r 使用正规运算式 做寻找的条件。 -o 指定资料库存的名称。 @@ -79,4 +79,4 @@ root ~ # locate /etc/m /etc/mate-settings-daemon ``` - \ No newline at end of file + From 2d64d351b4e083a8ce20173e3f161d7467d5c8a3 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Thu, 24 Aug 2017 00:02:59 +0800 Subject: [PATCH 0083/1284] Create git.md --- command/git.md | 117 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 command/git.md diff --git a/command/git.md b/command/git.md new file mode 100644 index 00000000000..acb490b26ad --- /dev/null +++ b/command/git.md @@ -0,0 +1,117 @@ +git +=== + +是目前世界上最先进的分布式版本控制系统 + +## 补充说明 + +**git命令** 很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。 + +Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢? + +事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码! + +你也许会想,为什么Linus不把Linux代码放到版本控制系统里呢?不是有CVS、SVN这些免费的版本控制系统吗?因为Linus坚定地反对CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一些商用的版本控制系统,虽然比CVS、SVN好用,但那是付费的,和Linux的开源精神不符。 + +不过,到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。 + +安定团结的大好局面在2005年就被打破了,原因是Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习气。开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权。 + +Linus可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的。实际情况是这样的: + +Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下。 + +Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。 + +历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了。 + +[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=] + [] +``` + +### 选项 + +``` +add 将文件内容添加到索引 +bisect 通过二进制查找引入错误的更改 +branch 列出,创建或删除分支 +checkout 检查分支或路径到工作树 +clone 将存储库克隆到新目录中 +commit 将更改记录到存储库 +diff 显示提交,提交和工作树等之间的更改 +fetch 从另一个存储库下载对象和引用 +grep 打印匹配图案的行 +init 创建一个空的Git仓库或重新初始化一个现有的 +log 显示提交日志 +merge 加入两个或更多的开发历史 +mv 移动或重命名文件,目录或符号链接 +pull 从另一个存储库或本地分支获取并合并 +push 更新远程引用以及相关对象 +rebase 转发端口本地提交到更新的上游头 +reset 将当前HEAD复位到指定状态 +rm 从工作树和索引中删除文件 +show 显示各种类型的对象 +status 显示工作树状态 +tag 创建,列出,删除或验证使用GPG签名的标签对象 +``` + +### 例子 + +init + +`git init` #初始化 + +status + +`git status` #获取状态 + +add + +`git add file` # .或*代表全部添加 +`git rm --cached ` # 在commit之前撤销git add操作 +`git reset head` # 好像比上面`git rm --cached`更方便 + +commit + +`git commit -m "message"` #此处注意乱码 + +remote + +`git remote add origin git@github.com:JSLite/test.git` #添加源 + +push + +```bash +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协议还有另一种写法。 + +git clone支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等,下面是一些例子。`git clone <版本库的网址> <本地目录名>` + +```shell +$ git clone http[s]://example.com/path/to/repo.git/ +$ git clone ssh://example.com/path/to/repo.git/ +$ git clone git://example.com/path/to/repo.git/ +$ git clone /opt/git/project.git +$ git clone file:///opt/git/project.git +$ git clone ftp[s]://example.com/path/to/repo.git/ +$ git clone rsync://example.com/path/to/repo.git/ +``` + + + \ No newline at end of file From b4ee332edce36c0fcc56694ae285dde919641f3e Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Thu, 24 Aug 2017 00:03:19 +0800 Subject: [PATCH 0084/1284] Create uucico.md --- command/uucico.md | 50 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 command/uucico.md diff --git a/command/uucico.md b/command/uucico.md new file mode 100644 index 00000000000..37c8051fa33 --- /dev/null +++ b/command/uucico.md @@ -0,0 +1,50 @@ +uucico +=== + +UUCP文件传输服务程序。 + +## 补充说明 + +**uucico命令** 命令UUCP文件传输服务程序。 uucico是用来处理uucp或uux送到队列的文件传输工具。uucico有两种工作模式:主动模式和附属模式。当在主动模式下时,uucico会调用远端主机;在附属模式下时,uucico则接受远端主机的调用。 + +### 语法 + +``` +uucico [-cCDefqvwz][-i<类型>][-I<文件>][-p<连接端口号码>][-][-rl][-s<主机>][-S<主机>][-u<用户>][-x<类型>][--help] +``` + +### 选项 + +``` +-c或--quiet 当不执行任何工作时,不要更改记录文件的内容及更新目前的状态。 +-C或--ifwork 当有工作要执行时,才调用-s或-S参数所指定主机。 +-D或--nodetach 不要与控制终端机离线。 +-e或--loop 在附属模式下执行,并且出现要求登入的提示画面。 +-f或--force 当执行错误时,不等待任何时间即重新调用主机。 +-i<类型>或--stdin<类型> 当使用到标准输入设备时,指定连接端口的类型。 +-I<文件>--config<文件> 指定使用的配置文件。 +-l或--prompt 出现要求登入的提示画面。 +-p<连接端口号码>或-port<连接端口号码> 指定连接端口号码。 +-q或--quiet 不要启动uuxqt服务程序。 +-r0或--slave 以附属模式启动。 +-s<主机>或--system<主机> 调用指定的主机。 +-u<用户>或--login<用户> 指定登入的用户帐号,而不允许输入任意的登入帐号。 +-v或--version 显示版本信息,并且结束程序。 +-w或--wait 在主动模式下,当执行调用动作时,则出现要求登入的提示画面。 +-x<类型>或-X<类型>或outgoing-debug<类型> 启动指定的排错模式。 +-z或--try-next 当执行不成功时,尝试下一个选择而不结束程序。 +--help 显示帮助,并且结束程序。 +``` + +### 实例 + +使用主动模式启动uucico服务。在命令提示符下直接输入如下命令: + +``` +uucico-r1 +``` + +提示:该命令一般没有输出。 + + + \ No newline at end of file From da5cddc4499258e10a8d3b33e373ef65ebe123e9 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Thu, 24 Aug 2017 00:03:37 +0800 Subject: [PATCH 0085/1284] Create uupick.md --- command/uupick.md | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 command/uupick.md diff --git a/command/uupick.md b/command/uupick.md new file mode 100644 index 00000000000..497754a940d --- /dev/null +++ b/command/uupick.md @@ -0,0 +1,36 @@ +uupick +=== + +命令处理传送进来的文件。 + +## 补充说明 + +**uupick命令** 处理传送进来的文件。 当其他主机通过UUCP将文件传送进来时,可利用uupick指令取出这些文件。 + +### 语法 + +``` +uupick [-v][-I<配置文件>][-s<主机>][-x<层级>][--help] +``` + +### 选项 + +``` +-I<配置文件>或--config<配置文件> 指定配置文件。 +-s<主机>或--system<主机> 处理由指定主机传送过来的文件。 +-v或--version 显示版本信息。 +--help 显示帮助。 +``` + +### 例子 + +处理由主机localhost传送过来的文件。在命令行直接输入如下命令: + +``` +uupick-s localhost +``` + +该命令通常没有输出。 + + + \ No newline at end of file From 325bf43a96848c57ecc2bad9335a8ae6c58586b6 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Thu, 24 Aug 2017 00:05:53 +0800 Subject: [PATCH 0086/1284] Update git.md --- command/git.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/command/git.md b/command/git.md index acb490b26ad..37db9622460 100644 --- a/command/git.md +++ b/command/git.md @@ -103,7 +103,7 @@ clone git clone支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等,下面是一些例子。`git clone <版本库的网址> <本地目录名>` -```shell +```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/ From a4c8a65215bde34d11253c3c5094fe89a0161ec6 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Fri, 25 Aug 2017 12:08:11 +0800 Subject: [PATCH 0087/1284] Title optimization. --- template/header.ejs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/template/header.ejs b/template/header.ejs index 5a9be6cdfd2..3fe3484668e 100644 --- a/template/header.ejs +++ b/template/header.ejs @@ -7,7 +7,7 @@ - <%=describe.n?describe.n+'':''%> <%=describe.d?describe.d+' - ':''%> Linux 命令搜索引擎 + <%=describe.n?describe.n+'':''%> 命令,Linux <%=describe.n?describe.n+'':''%> 命令详解:<%=describe.d?describe.d+' - ':''%> Linux 命令搜索引擎 From eac403ba1bc572dfcbf34638702e47a82b01b511 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Sat, 26 Aug 2017 11:46:06 +0800 Subject: [PATCH 0088/1284] Update history.md --- command/history.md | 118 +++++++++++++++++++++++++-------------------- 1 file changed, 66 insertions(+), 52 deletions(-) diff --git a/command/history.md b/command/history.md index 43d360966f7..5ff357ced40 100644 --- a/command/history.md +++ b/command/history.md @@ -1,52 +1,66 @@ -history -=== - -用于显示历史命令 - -## 补充说明 - -**history命令** 用于显示指定数目的指令命令,读取历史命令文件中的目录到历史命令缓冲区和将历史命令缓冲区中的目录写入命令文件。 - -该命令单独使用时,仅显示历史命令,在命令行中,可以使用符号`!`执行指定序号的历史命令。例如,要执行第2个历史命令,则输入`!2`。 - -历史命令是被保存在内存中的,当退出或者登录shell时,会自动保存或读取。在内存中,历史命令仅能够存储1000条历史命令,该数量是由环境变量`HISTSIZE`进行控制。 - -### 语法 - -``` -history(选项)(参数) -``` - -### 选项 - -``` --c:清空当前历史命令; --a:将历史命令缓冲区中命令写入历史命令文件中; --r:将历史命令文件中的命令读入当前历史命令缓冲区; --w:将当前历史命令缓冲区命令写入历史命令文件中。 -``` - -### 参数 - -n:打印最近的n条历史命令。 - -### 实例 - -使用history命令显示最近使用的10条历史命令,输入如下命令: - -``` -[root@localhost ~]# history 10 - 92 ls - 93 cd .. - 94 ls - 95 exit - 96 ls -a - 97 cd .ssh/ - 98 ls - 99 cat known_hosts - 100 exit - 101 history 10 -``` - - - \ No newline at end of file +history +=== + +用于显示历史命令 + +## 补充说明 + +**history命令** 用于显示指定数目的指令命令,读取历史命令文件中的目录到历史命令缓冲区和将历史命令缓冲区中的目录写入命令文件。 + +该命令单独使用时,仅显示历史命令,在命令行中,可以使用符号`!`执行指定序号的历史命令。例如,要执行第2个历史命令,则输入`!2`。 + +历史命令是被保存在内存中的,当退出或者登录shell时,会自动保存或读取。在内存中,历史命令仅能够存储1000条历史命令,该数量是由环境变量`HISTSIZE`进行控制。 + +### 语法 + +``` +history(选项)(参数) +``` + +### 选项 + +``` +-c:清空当前历史命令; +-a:将历史命令缓冲区中命令写入历史命令文件中; +-r:将历史命令文件中的命令读入当前历史命令缓冲区; +-w:将当前历史命令缓冲区命令写入历史命令文件中。 +``` + +### 参数 + +n:打印最近的n条历史命令。 + +### 实例 + +使用history命令显示最近使用的10条历史命令,输入如下命令: + +``` +[root@localhost ~]# history 10 + 92 ls + 93 cd .. + 94 ls + 95 exit + 96 ls -a + 97 cd .ssh/ + 98 ls + 99 cat known_hosts + 100 exit + 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 +``` + +清空历史记录 + +``` +[root@localhost ~]# history -c +``` + + From b26b9022ecd27cc4c05d8141f5ee1a3de45f3143 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Tue, 29 Aug 2017 11:56:53 +0800 Subject: [PATCH 0089/1284] Update nohup.md --- command/nohup.md | 88 +++++++++++++++++++++++++++--------------------- 1 file changed, 50 insertions(+), 38 deletions(-) diff --git a/command/nohup.md b/command/nohup.md index 2008b6433bf..e6c365b4101 100644 --- a/command/nohup.md +++ b/command/nohup.md @@ -1,38 +1,50 @@ -nohup -=== - -将程序以忽略挂起信号的方式运行起来 - -## 补充说明 - -**nohup命令** 可以将程序以忽略挂起信号的方式运行起来,被运行的程序的输出信息将不会显示到终端。 - -无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到`$HOME/nohup.out`文件中。如果没有文件能创建或打开以用于追加,那么 command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。 - -### 语法 - -nohup(选项)(参数) - -### 选项 - -``` ---help:在线帮助; ---version:显示版本信息。 -``` - -### 参数 - -程序及选项:要运行的程序及选项。 - -### 实例 - -使用nohup命令提交作业,如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件: - -``` -nohup command > myout.file 2>&1 & -``` - -在上面的例子中,输出被重定向到myout.file文件中。 - - - \ No newline at end of file +nohup +=== + +将程序以忽略挂起信号的方式运行起来 + +## 补充说明 + +**nohup命令** 可以将程序以忽略挂起信号的方式运行起来,被运行的程序的输出信息将不会显示到终端。 + +无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到`$HOME/nohup.out`文件中。如果没有文件能创建或打开以用于追加,那么 command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。 + +### 语法 + +nohup(选项)(参数) + +### 选项 + +``` +--help:在线帮助; +--version:显示版本信息。 +``` + +### 参数 + +程序及选项:要运行的程序及选项。 + +### 实例 + + +使用nohup命令提交作业,如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件: + +``` +nohup command > myout.file 2>&1 & +``` + +在上面的例子中,输出被重定向到myout.file文件中。 + +该指令表示不做挂断操作,后台下载 + +```bash +nohup wget site.com/file.zip +``` + +下面命令,会在同一个目录下生成一个名称为 `nohup.out` 的文件,其中包含了正在运行的程序的输出内容 + +```bash +nohup ping -c 10 baidu.com +``` + + From 07a08b537f61f55a547ef665a026b95185a66a81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Tue, 29 Aug 2017 11:58:38 +0800 Subject: [PATCH 0090/1284] Update ps.md --- command/ps.md | 183 +++++++++++++++++++++++++++----------------------- 1 file changed, 98 insertions(+), 85 deletions(-) diff --git a/command/ps.md b/command/ps.md index 0723ab139c7..0d9f6126361 100644 --- a/command/ps.md +++ b/command/ps.md @@ -1,86 +1,99 @@ -ps -=== +ps +=== -报告当前系统的进程状态 - -## 补充说明 - -**ps命令** 用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。 - -### 语法 - -``` -ps(选项) -``` - -### 选项 - -``` --a:显示所有终端机下执行的程序,除了阶段作业领导者之外。 -a:显示现行终端机下的所有程序,包括其他用户的程序。 --A:显示所有程序。 --c:显示CLS和PRI栏位。 -c:列出程序时,显示每个程序真正的指令名称,而不包含路径,选项或常驻服务的标示。 --C<指令名称>:指定执行指令的名称,并列出该指令的程序的状况。 --d:显示所有程序,但不包括阶段作业领导者的程序。 --e:此选项的效果和指定"A"选项相同。 -e:列出程序时,显示每个程序所使用的环境变量。 --f:显示UID,PPIP,C与STIME栏位。 -f:用ASCII字符显示树状结构,表达程序间的相互关系。 --g<群组名称>:此选项的效果和指定"-G"选项相同,当亦能使用阶段作业领导者的名称来指定。 -g:显示现行终端机下的所有程序,包括群组领导者的程序。 --G<群组识别码>:列出属于该群组的程序的状况,也可使用群组名称来指定。 -h:不显示标题列。 --H:显示树状结构,表示程序间的相互关系。 --j或j:采用工作控制的格式显示程序状况。 --l或l:采用详细的格式来显示程序状况。 -L:列出栏位的相关信息。 --m或m:显示所有的执行绪。 -n:以数字来表示USER和WCHAN栏位。 --N:显示所有的程序,除了执行ps指令终端机下的程序之外。 --p<程序识别码>:指定程序识别码,并列出该程序的状况。 -p<程序识别码>:此选项的效果和指定"-p"选项相同,只在列表格式方面稍有差异。 -r:只列出现行终端机正在执行中的程序。 --s<阶段作业>:指定阶段作业的程序识别码,并列出隶属该阶段作业的程序的状况。 -s:采用程序信号的格式显示程序状况。 -S:列出程序时,包括已中断的子程序资料。 --t<终端机编号>:指定终端机编号,并列出属于该终端机的程序的状况。 -t<终端机编号>:此选项的效果和指定"-t"选项相同,只在列表格式方面稍有差异。 --T:显示现行终端机下的所有程序。 --u<用户识别码>:此选项的效果和指定"-U"选项相同。 -u:以用户为主的格式来显示程序状况。 --U<用户识别码>:列出属于该用户的程序的状况,也可使用用户名称来指定。 -U<用户名称>:列出属于该用户的程序的状况。 -v:采用虚拟内存的格式显示程序状况。 --V或V:显示版本信息。 --w或w:采用宽阔的格式来显示程序状况。  -x:显示所有程序,不以终端机来区分。 -X:采用旧式的Linux i386登陆格式显示程序状况。 --y:配合选项"-l"使用时,不显示F(flag)栏位,并以RSS栏位取代ADDR栏位 。 --<程序识别码>:此选项的效果和指定"p"选项相同。 ---cols<每列字符数>:设置每列的最大字符数。 ---columns<每列字符数>:此选项的效果和指定"--cols"选项相同。 ---cumulative:此选项的效果和指定"S"选项相同。 ---deselect:此选项的效果和指定"-N"选项相同。 ---forest:此选项的效果和指定"f"选项相同。 ---headers:重复显示标题列。 ---help:在线帮助。 ---info:显示排错信息。 ---lines<显示列数>:设置显示画面的列数。 ---no-headers:此选项的效果和指定"h"选项相同,只在列表格式方面稍有差异。 ---group<群组名称>:此选项的效果和指定"-G"选项相同。 ---Group<群组识别码>:此选项的效果和指定"-G"选项相同。 ---pid<程序识别码>:此选项的效果和指定"-p"选项相同。 ---rows<显示列数>:此选项的效果和指定"--lines"选项相同。 ---sid<阶段作业>:此选项的效果和指定"-s"选项相同。 ---tty<终端机编号>:此选项的效果和指定"-t"选项相同。 ---user<用户名称>:此选项的效果和指定"-U"选项相同。 ---User<用户识别码>:此选项的效果和指定"-U"选项相同。 ---version:此选项的效果和指定"-V"选项相同。 ---widty<每列字符数>:此选项的效果和指定"-cols"选项相同。 -``` - -由于ps命令能够支持的系统类型相当的多,所以选项多的离谱! - - - \ No newline at end of file +报告当前系统的进程状态 + +## 补充说明 + +**ps命令** 用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。 + +### 语法 + +``` +ps(选项) +``` + +### 选项 + +``` +-a:显示所有终端机下执行的程序,除了阶段作业领导者之外。 +a:显示现行终端机下的所有程序,包括其他用户的程序。 +-A:显示所有程序。 +-c:显示CLS和PRI栏位。 +c:列出程序时,显示每个程序真正的指令名称,而不包含路径,选项或常驻服务的标示。 +-C<指令名称>:指定执行指令的名称,并列出该指令的程序的状况。 +-d:显示所有程序,但不包括阶段作业领导者的程序。 +-e:此选项的效果和指定"A"选项相同。 +e:列出程序时,显示每个程序所使用的环境变量。 +-f:显示UID,PPIP,C与STIME栏位。 +f:用ASCII字符显示树状结构,表达程序间的相互关系。 +-g<群组名称>:此选项的效果和指定"-G"选项相同,当亦能使用阶段作业领导者的名称来指定。 +g:显示现行终端机下的所有程序,包括群组领导者的程序。 +-G<群组识别码>:列出属于该群组的程序的状况,也可使用群组名称来指定。 +h:不显示标题列。 +-H:显示树状结构,表示程序间的相互关系。 +-j或j:采用工作控制的格式显示程序状况。 +-l或l:采用详细的格式来显示程序状况。 +L:列出栏位的相关信息。 +-m或m:显示所有的执行绪。 +n:以数字来表示USER和WCHAN栏位。 +-N:显示所有的程序,除了执行ps指令终端机下的程序之外。 +-p<程序识别码>:指定程序识别码,并列出该程序的状况。 +p<程序识别码>:此选项的效果和指定"-p"选项相同,只在列表格式方面稍有差异。 +r:只列出现行终端机正在执行中的程序。 +-s<阶段作业>:指定阶段作业的程序识别码,并列出隶属该阶段作业的程序的状况。 +s:采用程序信号的格式显示程序状况。 +S:列出程序时,包括已中断的子程序资料。 +-t<终端机编号>:指定终端机编号,并列出属于该终端机的程序的状况。 +t<终端机编号>:此选项的效果和指定"-t"选项相同,只在列表格式方面稍有差异。 +-T:显示现行终端机下的所有程序。 +-u<用户识别码>:此选项的效果和指定"-U"选项相同。 +u:以用户为主的格式来显示程序状况。 +-U<用户识别码>:列出属于该用户的程序的状况,也可使用用户名称来指定。 +U<用户名称>:列出属于该用户的程序的状况。 +v:采用虚拟内存的格式显示程序状况。 +-V或V:显示版本信息。 +-w或w:采用宽阔的格式来显示程序状况。  +x:显示所有程序,不以终端机来区分。 +X:采用旧式的Linux i386登陆格式显示程序状况。 +-y:配合选项"-l"使用时,不显示F(flag)栏位,并以RSS栏位取代ADDR栏位 。 +-<程序识别码>:此选项的效果和指定"p"选项相同。 +--cols<每列字符数>:设置每列的最大字符数。 +--columns<每列字符数>:此选项的效果和指定"--cols"选项相同。 +--cumulative:此选项的效果和指定"S"选项相同。 +--deselect:此选项的效果和指定"-N"选项相同。 +--forest:此选项的效果和指定"f"选项相同。 +--headers:重复显示标题列。 +--help:在线帮助。 +--info:显示排错信息。 +--lines<显示列数>:设置显示画面的列数。 +--no-headers:此选项的效果和指定"h"选项相同,只在列表格式方面稍有差异。 +--group<群组名称>:此选项的效果和指定"-G"选项相同。 +--Group<群组识别码>:此选项的效果和指定"-G"选项相同。 +--pid<程序识别码>:此选项的效果和指定"-p"选项相同。 +--rows<显示列数>:此选项的效果和指定"--lines"选项相同。 +--sid<阶段作业>:此选项的效果和指定"-s"选项相同。 +--tty<终端机编号>:此选项的效果和指定"-t"选项相同。 +--user<用户名称>:此选项的效果和指定"-U"选项相同。 +--User<用户识别码>:此选项的效果和指定"-U"选项相同。 +--version:此选项的效果和指定"-V"选项相同。 +--widty<每列字符数>:此选项的效果和指定"-cols"选项相同。 +``` + +由于ps命令能够支持的系统类型相当的多,所以选项多的离谱! + +### 实例 + +按内存资源的使用量对进程进行排序 + +``` +ps aux | sort -rnk 4 +``` + +按 CPU 资源的使用量对进程进行排序 + +``` +ps aux | sort -nk 3 +``` + + From 11c47dfd068abd4876c07702100d521ddb780353 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Tue, 29 Aug 2017 12:04:24 +0800 Subject: [PATCH 0091/1284] Create mount.md --- command/mount.md | 72 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 command/mount.md diff --git a/command/mount.md b/command/mount.md new file mode 100644 index 00000000000..616557c8a4c --- /dev/null +++ b/command/mount.md @@ -0,0 +1,72 @@ +mount +=== + +用于挂载Linux系统外的文件。 + +## 补充说明 + +**mount命令** Linux mount命令是经常会使用到的命令,它用于挂载Linux系统外的文件。 + +### 语法 + +``` +mount [-hV] +mount -a [-fFnrsvw] [-t vfstype] +mount [-fnrsvw] [-o options [,...]] device | dir +mount [-fnrsvw] [-t vfstype] [-o options] device dir +``` + +### 选项 + +``` +-V:显示程序版本 +-h:显示辅助讯息 +-v:显示较讯息,通常和 -f 用来除错。 +-a:将 /etc/fstab 中定义的所有档案系统挂上。 +-F:这个命令通常和 -a 一起使用,它会为每一个 mount 的动作产生一个行程负责执行。在系统需要挂上大量 NFS 档案系统时可以加快挂上的动作。 +-f:通常用在除错的用途。它会使 mount 并不执行实际挂上的动作,而是模拟整个挂上的过程。通常会和 -v 一起使用。 +-n:一般而言,mount 在挂上后会在 /etc/mtab 中写入一笔资料。但在系统中没有可写入档案系统存在的情况下可以用这个选项取消这个动作。 +-s-r:等于 -o ro +-w:等于 -o rw +-L:将含有特定标签的硬盘分割挂上。 +-U:将档案分割序号为 的档案系统挂下。-L 和 -U 必须在/proc/partition 这种档案存在时才有意义。 +-t:指定档案系统的型态,通常不必指定。mount 会自动选择正确的型态。 +-o async:打开非同步模式,所有的档案读写动作都会用非同步模式执行。 +-o sync:在同步模式下执行。 +-o atime、-o noatime:当 atime 打开时,系统会在每次读取档案时更新档案的『上一次调用时间』。当我们使用 flash 档案系统时可能会选项把这个选项关闭以减少写入的次数。 +-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 user、-o nouser:使用者可以执行 mount/umount 的动作。 +-o remount:将一个已经挂下的档案系统重新用不同的方式挂上。例如原先是唯读的系统,现在用可读写的模式重新挂上。 +-o ro:用唯读模式挂上。 +-o rw:用可读写模式挂上。 +-o loop=:使用 loop 模式用来将一个档案当成硬盘分割挂上系统。 +``` + +### 实例 + +将 `/dev/hda1` 挂在 `/mnt` 之下。 + +``` +#mount /dev/hda1 /mnt +``` + +将 `/dev/hda1` 用唯读模式挂在 `/mnt` 之下。 + +``` +#mount -o ro /dev/hda1 /mnt +``` + +将 `/tmp/image.iso` 这个光碟的 `image` 档使用 `loop` 模式挂在 `/mnt/cdrom` 之下。用这种方法可以将一般网络上可以找到的 `Linux` 光 碟 ISO 档在不烧录成光碟的情况下检视其内容。 + +``` +#mount -o loop /tmp/image.iso /mnt/cdrom +``` + + + + + From e7483609605699423494ee5d3ebc9b49644b35a2 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Thu, 31 Aug 2017 15:02:46 +0800 Subject: [PATCH 0092/1284] Markdown escape error. --- build/compile.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/build/compile.js b/build/compile.js index 9728d471994..34da279e9f0 100644 --- a/build/compile.js +++ b/build/compile.js @@ -205,7 +205,10 @@ function ReadTmpToHTML(from_path,to_path,md_path,des_json, total_pages){ marked(README_str.toString(),function(err,md_html){ if (err) return console.log(error(' → '+md_path+" 转换成HTML失败!")); - html = html.replace('{{content}}',md_html); + html = html.split('{{content}}') + html.splice(1, 0, md_html); + html = html.join('') + // html = html.replace('{{content}}',md_html); fs.writeFileSync(new_to_path,html); console.log(success(" → ")+to_path + ''); }) From 77017621cf3f12fcbb569f28bc61e4c4b11298fd Mon Sep 17 00:00:00 2001 From: linuxwd <5323547@gmail.com> Date: Sat, 2 Sep 2017 02:10:20 +0800 Subject: [PATCH 0093/1284] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=BC=94=E7=A4=BA?= =?UTF-8?q?=E8=8C=83=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- command/alias.md | 166 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 112 insertions(+), 54 deletions(-) diff --git a/command/alias.md b/command/alias.md index ca1a4dd3913..97860478f42 100644 --- a/command/alias.md +++ b/command/alias.md @@ -1,54 +1,112 @@ -alias -=== - -用来设置指令的别名 - -## 补充说明 - -**alias命令** 用来设置指令的别名。我们可以使用该命令可以将一些较长的命令进行简化。使用alias时,用户必须使用单引号`''`将原来的命令引起来,防止特殊字符导致错误。 - -alias命令的作用只局限于该次登入的操作。若要每次登入都能够使用这些命令别名,则可将相应的alias命令存放到bash的初始化文件`/etc/bashrc`中。 - -### 语法 - -``` -alias(选项)(参数) -``` - -### 选项 - -``` --p:打印已经设置的命令别名。 -``` - -### 参数 - -命令别名设置:定义命令别名,格式为“命令别名=‘实际命令’”。 - -### 实例 - - **alias 的基本使用方法为:** - -``` -alias 新的命令='原命令 -选项/参数' -``` - -例如:`alias l=‘ls -lsh'`将重新定义ls命令,现在只需输入l就可以列目录了。直接输入 alias 命令会列出当前系统中所有已经定义的命令别名。 - -要删除一个别名,可以使用 unalias 命令,如 unalias l。 - - **查看系统已经设置的别名:** - -``` -alias -p -alias cp='cp -i' -alias l.='ls -d .* --color=tty' -alias ll='ls -l --color=tty' -alias ls='ls --color=tty' -alias mv='mv -i' -alias rm='rm -i' -alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' -``` - - - \ No newline at end of file +alias +=== + +用来设置指令的别名 + +## 补充说明 + +**alias命令** 用来设置指令的别名。我们可以使用该命令可以将一些较长的命令进行简化。使用alias时,用户必须使用单引号`''`将原来的命令引起来,防止特殊字符导致错误。 + +alias命令的作用只局限于该次登入的操作。若要每次登入都能够使用这些命令别名,则可将相应的alias命令存放到bash的初始化文件`/etc/bashrc`中。 + +### 语法 + +``` +alias(选项)(参数) +``` + +### 选项 + +``` +-p:打印已经设置的命令别名。 +``` + +### 参数 + +命令别名设置:定义命令别名,格式为“命令别名=‘实际命令’”。 + +### 实例 + + **alias 的基本使用方法为:** + +``` +alias 新的命令='原命令 -选项/参数' +``` + +例如:`alias l=‘ls -lsh'`将重新定义ls命令,现在只需输入l就可以列目录了。直接输入 alias 命令会列出当前系统中所有已经定义的命令别名。 + +要删除一个别名,可以使用 unalias 命令,如 unalias l。 + + **查看系统已经设置的别名:** + +```bash +[root@localhost ~]# +[root@localhost ~]# alias +alias cp='cp -i' +alias egrep='egrep --color=auto' +alias fgrep='fgrep --color=auto' +alias grep='grep --color=auto' +alias l.='ls -d .* --color=auto' +alias ll='ls -l --color=auto' +alias ls='ls --color=auto' +alias mv='mv -i' +alias rm='rm -i' +alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' +[root@localhost ~]# + +``` +### 命令别名永久生效 +直接在shell里设定的命令别名,在终端关闭或者系统重新启动后都会失效,如何才能永久有效呢?办法就是将别名的设置加入~/.bashrc文件,然后重新载入下文件就可以了。 +```bash +$ vim ~/.bashrc +``` +在文件最后面加入别名设置,如:alias rm=’rm -i’,保存后重新载入: +```bash +$ source ~/.bashrc +``` +这样就可以永久保存命令的别名了。因为修改的是当前用户目录下的.bashrc文件,所以这样的方式只对当前用户有用。如果要对所有用户都有效,修改/etc目录下的bashrc文件就可以了。在CentOS7下,这个文件是/etc/bash.bashrc。此外在CentOS7下,细看~/.bashrc文件,会发有这样一段代码: +```bash +if [ -f ~/.bash_aliases ]; then + . ~/.bash_aliases +fi +``` + +这个代码的意思就是加载.bash_aliases文件,CentOS7已经帮我们考虑好了,所以也可以在用户根目录下新建一个文件.bash_aliases存放命令别名设置。 + +### 小结 + +alias这个命令是shell的内建命令,可以根据自己的使用习惯设置一些别名,需要注意的就是和其他命令冲突的情况。 + + + + +#### 一、 范例演示 + +在使用和维护Linux系统过程中,我们常常希望根据自己的需要来定义一些命令,那么这样的操作是不是很难呢?其实不是,系统已经为我们设置好了相关的命令,下面小编就以CentOS6.4系统为例,为大家演示如何创建自己的命令。 + +#### 二、 自定义命令简介 + CentOS系统下的创建自定义命令其实比较简单,使用的命令就是alias,具体使用的方法就是 alias 自定义命令名=‘命令’。但是需要注意的是,在自定义之前需要查看自定义的命令名是否是系统已经使用的命令名,否则会冲突,另外一个就是定期清理不需要的自定义命令名。 + + +#### 三、 演示举例 +假定系统操作员希望进行如下操作: +1.进入目录/root +2.查看目录下文件 +3.切换回根目录 +通常这需要三条命令 cd /root;ls;cd / ,如果需要经常使用那么我们可以通过自定义命令的方式用一条命令完成全部操作。 +![](alias\01.png) + +#### 四、 操作过程 + 首先使用命令 type 自定义命令名 ,查看自定义命令名是否被系统占用。从图中可以看出test命令名已被系统占用,所以不能使用,而loo这个命令名经查询可以使用。 +![](alias\02.png) + + 使用命令alias创建自定义命令:alias loo='cd /root;ls;cd /' 。需要注意的是命令的使用格式,分号与分号之间是没有空格的。 +![](alias\03.png) + + 测试一下自定义命令,当输入命令 loo 时,发现系统依次完成了 cd /root、ls、cd / 三条命令,说明设置成功。同时也可直接使用命令 alias 查询系统中是否添加了loo这个自定义命令。 +![](alias\04.png) + + 如果希望删除这个自定义命令,可以使用命令 unalias 自定义命令名 来完成。执行之后发现,loo命令已不存在,同时自定义命令库中也没有loo命令。 +![](alias\05.png) + + From 18f32c92b292931e3cd6b753e7f424c5d0f36ddd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=9D=B0?= <1726542850@qq.com> Date: Sat, 2 Sep 2017 10:21:00 +0800 Subject: [PATCH 0094/1284] Add the number mean description. --- command/man.md | 110 ++++++++++++++++++++++++++++--------------------- 1 file changed, 63 insertions(+), 47 deletions(-) diff --git a/command/man.md b/command/man.md index c606d5ec7ff..02ae2b9cf1b 100644 --- a/command/man.md +++ b/command/man.md @@ -1,47 +1,63 @@ -man -=== - -查看Linux中的指令帮助 - -## 补充说明 - -**man命令** 是Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助、配置文件帮助和编程帮助等信息。 - -### 语法 - -``` -man(选项)(参数) -``` - -### 选项 - -``` --a:在所有的man帮助手册中搜索; --f:等价于whatis指令,显示给定关键字的简短描述信息; --P:指定内容时使用分页程序; --M:指定man手册搜索的路径。 -``` - -### 参数 - -* 数字:指定从哪本man手册中搜索帮助; -* 关键字:指定要搜索帮助的关键字。 - -### 实例 - -我们输入`man ls`,它会在最左上角显示“LS(1)”,在这里,“LS”表示手册名称,而“(1)”表示该手册位于第一节章,同样,我们输`man ifconfig`它会在最左上角显示“IFCONFIG(8)”。也可以这样输入命令:“man [章节号] 手册名称”。 - -man是按照手册的章节号的顺序进行搜索的,比如: - -``` -man sleep -``` - -只会显示sleep命令的手册,如果想查看库函数sleep,就要输入: - -``` -man 3 sleep -``` - - - \ No newline at end of file +man +=== + +查看Linux中的指令帮助 + +## 补充说明 + +**man命令** 是Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助、配置文件帮助和编程帮助等信息。 + +### 语法 + +``` +man(选项)(参数) +``` + +### 选项 + +``` +-a:在所有的man帮助手册中搜索; +-f:等价于whatis指令,显示给定关键字的简短描述信息; +-P:指定内容时使用分页程序; +-M:指定man手册搜索的路径。 +``` + +### 参数 + +* 数字:指定从哪本man手册中搜索帮助; +* 关键字:指定要搜索帮助的关键字。 + +### 数字代表内容 + +``` +1:用户在shell环境可操作的命令或执行文件; +2:系统内核可调用的函数与工具等 +3:一些常用的函数(function)与函数库(library),大部分为C的函数库(libc) +4:设备文件说明,通常在/dev下的文件 +5:配置文件或某些文件格式 +6:游戏(games) +7:惯例与协议等,如Linux文件系统,网络协议,ASCII code等说明 +8:系统管理员可用的管理命令 +9:跟kernel有关的文件 +``` + +### 实例 + +我们输入`man ls`,它会在最左上角显示“LS(1)”,在这里,“LS”表示手册名称,而“(1)”表示该手册位于第一节章,同样,我们输`man ifconfig`它会在最左上角显示“IFCONFIG(8)”。也可以这样输入命令:“man [章节号] 手册名称”。 + +man是按照手册的章节号的顺序进行搜索的,比如: + +``` +man sleep +``` + +只会显示sleep命令的手册,如果想查看库函数sleep,就要输入: + +``` +man 3 sleep +``` + + + + + From 04cc41079d0b89aeb730efef0f445f38be96d7a0 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Wed, 6 Sep 2017 19:39:38 +0800 Subject: [PATCH 0095/1284] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=A0=87=E9=A2=98?= =?UTF-8?q?=E5=B8=A6=E6=8D=A2=E8=A1=8C=E7=AC=A6=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/compile.js | 1 + 1 file changed, 1 insertion(+) diff --git a/build/compile.js b/build/compile.js index 34da279e9f0..386826a3f43 100644 --- a/build/compile.js +++ b/build/compile.js @@ -266,6 +266,7 @@ function CreateDatajs(dt_path,callback){ var title = str.match(/[^===]+(?=[===])/g); title = title[0]?title[0].replace(/\n/g,''):title[0]; + title = title.replace(/\r/,'') // 命令名称 json["n"] = title; // 命令路径 From 755a65a77de6a202971184b0035e06f814456c4b Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Wed, 6 Sep 2017 19:40:22 +0800 Subject: [PATCH 0096/1284] =?UTF-8?q?=E7=BC=96=E8=AF=91=E7=94=9F=E6=88=90?= =?UTF-8?q?=E5=BA=8F=E5=88=97=E5=8C=96=E6=95=B0=E6=8D=AE=E5=8E=BB=E6=8E=89?= =?UTF-8?q?=E6=8D=A2=E8=A1=8C=E7=AC=A6=E6=A0=87=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/data.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/data.json b/dist/data.json index 952ce365126..2f4252ac924 100644 --- a/dist/data.json +++ b/dist/data.json @@ -1 +1 @@ -{"w":{"n":"w","p":"/w","d":"显示目前登入系统的用户信息"},"dd":{"n":"dd","p":"/dd","d":"复制文件并对原文件的内容进行转换和格式化处理"},"ip\r":{"n":"ip\r","p":"/ip","d":"网络配置工具"},"ld":{"n":"ld","p":"/ld","d":"将目标文件连接为可执行程序"},"xz":{"n":"xz","p":"/xz","d":"POSIX 平台开发具有高压缩率的工具。"},"ln\r":{"n":"ln\r","p":"/ln","d":"用来为文件创件连接"},"lp":{"n":"lp","p":"/lp","d":"打印文件或修改排队的打印任务"},"fg":{"n":"fg","p":"/fg","d":"将后台作业放到前台终端运行"},"wc\r":{"n":"wc\r","p":"/wc","d":"统计文件的字节数、字数、行数"},"as":{"n":"as","p":"/as","d":"汇编语言编译器"},"at":{"n":"at","p":"/at","d":"在指定时间执行一个任务"},"fc":{"n":"fc","p":"/fc","d":"修改历史命令并执行"},"ls":{"n":"ls","p":"/ls","d":"显示目录内容列表"},"ab":{"n":"ab","p":"/ab","d":"Apache服务器的性能测试工具"},"vi":{"n":"vi","p":"/vi","d":"功能强大的纯文本编辑器"},"bc":{"n":"bc","p":"/bc","d":"算术操作精密运算工具"},"bg":{"n":"bg","p":"/bg","d":"用于将作业放到后台运行"},"ex":{"n":"ex","p":"/ex","d":"启动vim编辑器的ex编辑模式"},"tr":{"n":"tr","p":"/tr","d":"将字符进行替换压缩和删除"},"ed":{"n":"ed","p":"/ed","d":"单行纯文本编辑器"},"mv":{"n":"mv","p":"/mv","d":"用来对文件或目录重新命名"},"du":{"n":"du","p":"/du","d":"显示每个文件和目录的磁盘使用空间"},"nl":{"n":"nl","p":"/nl","d":"在Linux系统中计算文件内容行号"},"nm":{"n":"nm","p":"/nm","d":"显示二进制目标文件的符号表"},"cd":{"n":"cd","p":"/cd","d":"切换用户当前工作目录"},"od":{"n":"od","p":"/od","d":"输出文件的八进制、十六进制等格式编码的字节"},"pr":{"n":"pr","p":"/pr","d":"将文本文件转换成适合打印的格式"},"su":{"n":"su","p":"/su","d":"用于切换当前用户身份到其他用户身份"},"ps":{"n":"ps","p":"/ps","d":"报告当前系统的进程状态"},"ss\r":{"n":"ss\r","p":"/ss","d":"获取socket统计信息,iproute2 包附带的另一个工具,允许你查询 socket 的有关统计信息。"},"sh":{"n":"sh","p":"/sh","d":"shell命令解释器"},"pv":{"n":"pv","p":"/pv","d":"显示当前在命令行执行的命令的进度信息,管道查看器。"},"df":{"n":"df","p":"/df","d":"显示磁盘的相关信息"},"rm":{"n":"rm","p":"/rm","d":"用于删除给定的文件和目录"},"cp\r":{"n":"cp\r","p":"/cp","d":"将源文件或目录复制到目标文件或目录中"},"id":{"n":"id","p":"/id","d":"显示用户的ID以及所属群组的ID"},"sed":{"n":"sed","p":"/sed","d":"功能强大的流式文本编辑器"},"seq":{"n":"seq","p":"/seq","d":"以指定增量从首数开始打印数字到尾数"},"sar":{"n":"sar","p":"/sar","d":"系统运行状态统计工具"},"rsh":{"n":"rsh","p":"/rsh","d":"连接远程主机并执行命令"},"rpm":{"n":"rpm","p":"/rpm","d":"RPM软件包的管理工具"},"set":{"n":"set","p":"/set","d":"显示或设置shell特性及shell变量"},"cut":{"n":"cut","p":"/cut","d":"连接文件并打印到标准输出设备上"},"zip\r":{"n":"zip\r","p":"/zip","d":"可以用来解压缩文件"},"rev":{"n":"rev","p":"/rev","d":"将文件内容以字符为单位反序输出"},"col":{"n":"col","p":"/col","d":"过滤控制字符"},"rcp\r":{"n":"rcp\r","p":"/rcp","d":"使在两台Linux主机之间的文件复制操作更简单"},"pwd":{"n":"pwd","p":"/pwd","d":"绝对路径方式显示用户当前工作目录"},"pvs":{"n":"pvs","p":"/pvs","d":"输出物理卷信息报表"},"dig":{"n":"dig","p":"/dig","d":"域名查询工具"},"cmp":{"n":"cmp","p":"/cmp","d":"比较两个文件是否有差异"},"ssh\r":{"n":"ssh\r","p":"/ssh","d":"openssh套件中的客户端连接工具"},"sum":{"n":"sum","p":"/sum","d":"计算文件的校验码和显示块数"},"dnf":{"n":"dnf","p":"/dnf","d":"新一代的RPM软件包管理器"},"php":{"n":"php","p":"/php","d":"PHP语言的命令行接口"},"tac":{"n":"tac","p":"/tac","d":"将文件已行为单位的反序输出"},"cat":{"n":"cat","p":"/cat","d":"连接文件并打印到标准输出设备上"},"cal":{"n":"cal","p":"/cal","d":"显示当前日历或指定日期的日历"},"tar\r":{"n":"tar\r","p":"/tar","d":"Linux下的归档使用工具,用来打包和备份。"},"tee":{"n":"tee","p":"/tee","d":"把数据重定向到给定文件和屏幕上"},"scp":{"n":"scp","p":"/scp","d":"加密的方式在本地主机和远程主机之间复制文件"},"man":{"n":"man","p":"/man","d":"查看Linux中的指令帮助"},"elm":{"n":"elm","p":"/elm","d":"纯文本邮件客户端程序"},"env":{"n":"env","p":"/env","d":"显示系统中已存在的环境变量"},"tty":{"n":"tty","p":"/tty","d":"显示连接到当前标准输入的终端设备文件名。"},"awk\r":{"n":"awk\r","p":"/awk","d":"文本和数据进行处理的编程语言"},"lpr":{"n":"lpr","p":"/lpr","d":"将文件发送给指定打印机进行打印"},"atq":{"n":"atq","p":"/atq","d":"列出当前用户的at任务列表"},"lpq":{"n":"lpq","p":"/lpq","d":"显示打印队列中的打印任务的状态信息"},"arp":{"n":"arp","p":"/arp","d":"显示和修改IP到MAC转换表"},"lpc":{"n":"lpc","p":"/lpc","d":"命令行方式打印机控制程序"},"arj":{"n":"arj","p":"/arj","d":"用于创建和管理.arj压缩包"},"who":{"n":"who","p":"/who","d":"显示目前登录系统的用户信息"},"fmt":{"n":"fmt","p":"/fmt","d":"读取文件后优化处理并输出"},"ftp\r":{"n":"ftp\r","p":"/ftp","d":"用来设置文件系统相关功能"},"lha":{"n":"lha","p":"/lha","d":"压缩或解压缩lzh格式文件"},"let":{"n":"let","p":"/let","d":"简单的计算器"},"gcc":{"n":"gcc","p":"/gcc","d":"基于C/C++的编译器"},"gdb":{"n":"gdb","p":"/gdb","d":"功能强大的程序调试器"},"ldd":{"n":"ldd","p":"/ldd","d":"打印程序或者库文件所依赖的共享库列表"},"yes":{"n":"yes","p":"/yes","d":"重复打印指定字符串"},"gpm":{"n":"gpm","p":"/gpm","d":"提供文字模式下的滑鼠事件处理"},"joe":{"n":"joe","p":"/joe","d":"强大的纯文本编辑器"},"jed":{"n":"jed","p":"/jed","d":"主要用于编辑代码的编辑器"},"yum\r":{"n":"yum\r","p":"/yum","d":"基于RPM的软件包管理器"},"top":{"n":"top","p":"/top","d":"显示或管理执行中的程序"},"sync":{"n":"sync","p":"/sync","d":"用于强制被改变的内容立刻写入磁盘"},"pvck":{"n":"pvck","p":"/pvck","d":"检测物理卷的LVM元数据的一致性"},"wall":{"n":"wall","p":"/wall","d":"向系统当前所有打开的终端上输出信息"},"chfn":{"n":"chfn","p":"/chfn","d":"用来改变finger命令显示的信息"},"pssh":{"n":"pssh","p":"/pssh","d":"批量管理执行"},"dirs":{"n":"dirs","p":"/dirs","d":"显示目录记录"},"sudo":{"n":"sudo","p":"/sudo","d":"以其他身份来执行命令"},"arch":{"n":"arch","p":"/arch","d":"显示当前主机的硬件架构类型"},"stty":{"n":"stty","p":"/stty","d":"修改终端命令行的相关设置"},"popd":{"n":"popd","p":"/popd","d":"用于删除目录栈中的记录"},"pmap":{"n":"pmap","p":"/pmap","d":"报告进程的内存映射关系"},"ping":{"n":"ping","p":"/ping","d":"测试主机之间网络的连通性"},"pico":{"n":"pico","p":"/pico","d":"功能强大全屏幕的文本编辑器"},"stat":{"n":"stat","p":"/stat","d":"用于显示文件的状态信息"},"perl":{"n":"perl","p":"/perl","d":"perl语言解释器"},"sshd":{"n":"sshd","p":"/sshd","d":"openssh软件套件中的服务器守护进程"},"nmap":{"n":"nmap","p":"/nmap","d":"网络探测和安全审核"},"bind":{"n":"bind","p":"/bind","d":"显示或设置键盘按键与其相关的功能"},"chsh":{"n":"chsh","p":"/chsh","d":"用来更换登录系统时使用的shell"},"nice":{"n":"nice","p":"/nice","d":"改变程序执行的优先权等级"},"dpkg":{"n":"dpkg","p":"/dpkg","d":"Debian Linux系统上安装、创建和管理软件包"},"dris":{"n":"dris","p":"/dris","d":"显示和清空目录堆栈中的内容"},"nano":{"n":"nano","p":"/nano","d":"字符终端文本编辑器"},"uniq":{"n":"uniq","p":"/uniq","d":"报告或忽略文件中的重复行"},"dump":{"n":"dump","p":"/dump","d":"用于备份ext2或者ext3文件系统"},"sort":{"n":"sort","p":"/sort","d":"将文件进行排序并输出"},"more":{"n":"more","p":"/more","d":"显示文件内容,每次显示一屏"},"echo":{"n":"echo","p":"/echo","d":"输出指定的字符串或者变量"},"type":{"n":"type","p":"/type","d":"显示指定命令的类型"},"mkfs":{"n":"mkfs","p":"/mkfs","d":"用于在设备上创建Linux文件系统"},"mesg":{"n":"mesg","p":"/mesg","d":"设置当前终端的写权限"},"znew":{"n":"znew","p":"/znew","d":"将.Z压缩包重新转化为gzip命令压缩的.gz压缩包"},"make":{"n":"make","p":"/make","d":"GNU的工程化编译工具"},"tree\r":{"n":"tree\r","p":"/tree","d":"树状图列出目录的内容"},"mail":{"n":"mail","p":"/mail","d":"命令行下发送和接收电子邮件"},"lynx":{"n":"lynx","p":"/lynx","d":"纯文本模式的网页浏览器"},"sftp":{"n":"sftp","p":"/sftp","d":"交互式的文件传输程序"},"lsof":{"n":"lsof","p":"/lsof","d":"显示Linux系统当前已打开的所有文件列表"},"comm":{"n":"comm","p":"/comm","d":"两个文件之间的比较"},"exec":{"n":"exec","p":"/exec","d":"调用并执行指定的命令"},"exit":{"n":"exit","p":"/exit","d":"退出当前的shell"},"trap":{"n":"trap","p":"/trap","d":"指定在接收到信号后将要采取的动作"},"lprm":{"n":"lprm","p":"/lprm","d":"删除打印队列中的打印任务"},"atop":{"n":"atop","p":"/atop","d":"监控Linux系统资源与进程的工具"},"expr":{"n":"expr","p":"/expr","d":"一款表达式计算工具"},"tput":{"n":"tput","p":"/tput","d":"通过terminfo数据库对终端会话进行初始化和操作"},"xset":{"n":"xset","p":"/xset","d":"设置X-Window系统中的用户爱好的实用工具"},"time":{"n":"time","p":"/time","d":"统计给定命令所花费的总时间"},"cpio":{"n":"cpio","p":"/cpio","d":"用来建立、还原备份档的工具程序"},"file":{"n":"file","p":"/file","d":"用来探测给定文件的类型。"},"find\r":{"n":"find\r","p":"/find","d":"在指定目录下查找文件"},"tftp":{"n":"tftp","p":"/tftp","d":"在本机和tftp服务器之间使用TFTP协议传输文件"},"look":{"n":"look","p":"/look","d":"显示文件中以指定字符串开头的任意行"},"test":{"n":"test","p":"/test","d":"shell环境中测试条件表达式工具"},"atrm":{"n":"atrm","p":"/atrm","d":"删除待执行任务队列中的指定任务"},"fold":{"n":"fold","p":"/fold","d":"控制文件内容输出时所占用的屏幕宽度"},"free\r":{"n":"free\r","p":"/free","d":"显示内存的使用情况"},"fsck":{"n":"fsck","p":"/fsck","d":"检查并且试图修复文件系统中的错误"},"arpd":{"n":"arpd","p":"/arpd","d":"收集免费ARP信息"},"lilo":{"n":"lilo","p":"/lilo","d":"安装核心载入开机管理程序"},"curl":{"n":"curl","p":"/curl","d":"利用URL规则在命令行下工作的文件传输工具"},"lftp":{"n":"lftp","p":"/lftp","d":"优秀的文件客户端程序"},"axel":{"n":"axel","p":"/axel","d":"多线程下载工具"},"less":{"n":"less","p":"/less","d":"分屏上下翻页浏览文件内容"},"date\r":{"n":"date\r","p":"/date","d":"显示或设置系统时间与日期"},"gcov":{"n":"gcov","p":"/gcov","d":"测试程序的代码覆盖率的工具"},"talk":{"n":"talk","p":"/talk","d":"让用户和其他用户聊天"},"wait":{"n":"wait","p":"/wait","d":"等待进程执行完后返回"},"read":{"n":"read","p":"/read","d":"从键盘读取变量值"},"last":{"n":"last","p":"/last","d":"列出目前与过去登入系统的用户相关信息"},"kill":{"n":"kill","p":"/kill","d":"删除执行中的程序或工作"},"wget":{"n":"wget","p":"/wget","d":"Linux系统下载文件工具"},"grep\r":{"n":"grep\r","p":"/grep","d":"强大的文本搜索工具"},"join":{"n":"join","p":"/join","d":"两个文件中指定栏位内容相同的行连接起来"},"tail\r":{"n":"tail\r","p":"/tail","d":"在屏幕上显示指定文件的末尾若干行"},"jobs":{"n":"jobs","p":"/jobs","d":"显示Linux中的任务列表及任务状态"},"zcat":{"n":"zcat","p":"/zcat","d":"显示压缩包中文件的内容"},"ipcs":{"n":"ipcs","p":"/ipcs","d":"分析消息队列共享内存和信号量 "},"pwck":{"n":"pwck","p":"/pwck","d":"用来验证系统认证文件内容和格式的完整性"},"init":{"n":"init","p":"/init","d":"init进程是所有Linux进程的父进程"},"grub":{"n":"grub","p":"/grub","d":"多重引导程序grub的命令行shell工具"},"info":{"n":"info","p":"/info","d":"Linux下info格式的帮助指令"},"ifup":{"n":"ifup","p":"/ifup","d":"激活指定的网络接口"},"gzip\r":{"n":"gzip\r","p":"/gzip","d":"用来压缩文件"},"halt":{"n":"halt","p":"/halt","d":"关闭正在运行的Linux操作系统"},"diff":{"n":"diff","p":"/diff","d":"比较给定的两个文件的不同"},"head":{"n":"head","p":"/head","d":"在屏幕上显示指定文件的开头若干行"},"help":{"n":"help","p":"/help","d":"显示帮助信息"},"htop":{"n":"htop","p":"/htop","d":"[非内部命令]一个互动的进程查看器,可以动态观察系统进程状况。"},"host":{"n":"host","p":"/host","d":"常用的分析域名查询工具"},"mysql":{"n":"mysql","p":"/mysql","d":"MySQL服务器客户端工具"},"colrm":{"n":"colrm","p":"/colrm","d":"删除文件中的指定列"},"zfore":{"n":"zfore","p":"/zfore","d":"强制为gzip格式的压缩文件添加.gz后缀"},"iconv":{"n":"iconv","p":"/iconv","d":"转换文件的编码方式"},"ifcfg":{"n":"ifcfg","p":"/ifcfg","d":"置Linux中的网络接口参数"},"gzexe":{"n":"gzexe","p":"/gzexe","d":"用来压缩可执行文件"},"iotop":{"n":"iotop","p":"/iotop","d":"用来监视磁盘I/O使用状况的工具"},"xinit":{"n":"xinit","p":"/xinit","d":"是Linux下X-Window系统的初始化程序"},"xhost":{"n":"xhost","p":"/xhost","d":"制哪些X客户端能够在X服务器上显示"},"xclip":{"n":"xclip","p":"/xclip","d":"管理 X 粘贴板"},"ipcrm":{"n":"ipcrm","p":"/ipcrm","d":"删除消息队列、信号集、或者共享内存标识"},"grpck":{"n":"grpck","p":"/grpck","d":"用于验证组文件的完整性"},"iperf":{"n":"iperf","p":"/iperf","d":"网络性能测试工具"},"xauth":{"n":"xauth","p":"/xauth","d":"显示和编辑被用于连接X服务器的认证信息"},"xargs\r":{"n":"xargs\r","p":"/xargs","d":"给其他命令传递参数的一个过滤器"},"write":{"n":"write","p":"/write","d":"向指定登录用户终端上发送信息"},"which":{"n":"which","p":"/which","d":"查找并显示给定命令的绝对路径"},"kexec":{"n":"kexec","p":"/kexec","d":"从当前正在运行的内核引导到一个新内核"},"watch\r":{"n":"watch\r","p":"/watch","d":"可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令"},"lastb":{"n":"lastb","p":"/lastb","d":"列出登入系统失败的用户相关信息"},"batch":{"n":"batch","p":"/batch","d":"在系统不繁忙的时候执行定时任务"},"fuser":{"n":"fuser","p":"/fuser","d":"使用文件或文件结构识别进程"},"login":{"n":"login","p":"/login","d":"登录系统或切换用户身份"},"users":{"n":"users","p":"/users","d":"显示当前登录系统的所有用户"},"fgrep":{"n":"fgrep","p":"/fgrep","d":"为文件搜索文字字符串"},"fdisk\r":{"n":"fdisk\r","p":"/fdisk","d":"查看磁盘使用情况和磁盘分区"},"lsblk":{"n":"lsblk","p":"/lsblk","d":"列出块设备信息"},"lscpu":{"n":"lscpu","p":"/lscpu","d":"显示有关CPU架构的信息"},"lsmod":{"n":"lsmod","p":"/lsmod","d":"显示已载入系统的模块"},"lspci":{"n":"lspci","p":"/lspci","d":"显示当前主机的所有PCI总线信息"},"lsusb":{"n":"lsusb","p":"/lsusb","d":"显示本机的USB设备列表信息"},"unzip":{"n":"unzip","p":"/unzip","d":"用于解压缩由zip命令压缩的压缩包"},"unset":{"n":"unset","p":"/unset","d":"删除指定的shell变量或函数"},"blkid":{"n":"blkid","p":"/blkid","d":"查看块设备的文件系统类型、LABEL、UUID等信息"},"emacs":{"n":"emacs","p":"/emacs","d":"功能强大的全屏文本编辑器"},"mailq":{"n":"mailq","p":"/mailq","d":"显示待发送的邮件队列"},"unarj":{"n":"unarj","p":"/unarj","d":"解压缩由arj命令创建的压缩包"},"eject":{"n":"eject","p":"/eject","d":"用来退出抽取式设备"},"egrep":{"n":"egrep","p":"/egrep","d":"在文件内查找指定的字符串"},"uname":{"n":"uname","p":"/uname","d":"显示Linux系统信息"},"mkdir":{"n":"mkdir","p":"/mkdir","d":"用来创建目录"},"mknod":{"n":"mknod","p":"/mknod","d":"创建字符设备文件和块设备文件"},"umask":{"n":"umask","p":"/umask","d":"用来设置限制新建文件权限的掩码"},"alias":{"n":"alias","p":"/alias","d":"用来设置指令的别名"},"bzcat":{"n":"bzcat","p":"/bzcat","d":"解压缩指定的.bz2文件"},"bzcmp":{"n":"bzcmp","p":"/bzcmp","d":"比较两个压缩包中的文件"},"dstat":{"n":"dstat","p":"/dstat","d":"通用的系统资源统计工具"},"ncftp":{"n":"ncftp","p":"/ncftp","d":"是增强的的FTP工具"},"touch":{"n":"touch","p":"/touch","d":"创建新的空文件"},"ngrep":{"n":"ngrep","p":"/ngrep","d":"方便的数据包匹配和显示工具"},"tload":{"n":"tload","p":"/tload","d":"显示系统负载状况"},"bzip2":{"n":"bzip2","p":"/bzip2","d":"将文件压缩成bz2格式"},"nmcli":{"n":"nmcli","p":"/nmcli","d":"地址配置工具"},"nohup":{"n":"nohup","p":"/nohup","d":"将程序以忽略挂起信号的方式运行起来"},"paste":{"n":"paste","p":"/paste","d":"将多个文件按列队列合并"},"patch":{"n":"patch","p":"/patch","d":"为开放源代码软件安装补丁程序"},"pfctl":{"n":"pfctl","p":"/pfctl","d":"PF防火墙的配置命令"},"pgrep":{"n":"pgrep","p":"/pgrep","d":"设置用户的认证信息,包括用户密码、密码过期时间等"},"tailf":{"n":"tailf","p":"/tailf","d":"在屏幕上显示指定文件的末尾若干行内容,通常用于日志文件的跟踪输出。"},"pidof":{"n":"pidof","p":"/pidof","d":"查找指定名称的进程的进程号ID号"},"chage":{"n":"chage","p":"/chage","d":"修改帐号和密码的有效期限"},"pkill":{"n":"pkill","p":"/pkill","d":"可以按照进程名杀死进程"},"dmesg\r":{"n":"dmesg\r","p":"/dmesg","d":"显示Linux系统启动信息"},"pushd":{"n":"pushd","p":"/pushd","d":"将目录加入命令堆叠中"},"chcon":{"n":"chcon","p":"/chcon","d":"修改对象(文件)的安全上下文"},"chgrp\r":{"n":"chgrp\r","p":"/chgrp","d":"用来变更文件或目录的所属群组"},"chmod\r":{"n":"chmod\r","p":"/chmod","d":"用来变更文件或目录的权限"},"diff3":{"n":"diff3","p":"/diff3","d":"比较3个文件不同的地方"},"chown":{"n":"chown","p":"/chown","d":"用来变更文件或目录的拥有者或所属群组"},"dhcpd":{"n":"dhcpd","p":"/dhcpd","d":"运行DHCP服务器。"},"quota":{"n":"quota","p":"/quota","d":"显示磁盘已使用的空间与限制"},"cksum":{"n":"cksum","p":"/cksum","d":"检查文件的CRC是否正确"},"squid":{"n":"squid","p":"/squid","d":"squid服务器守护进程"},"split":{"n":"split","p":"/split","d":"分割任意大小的文件"},"spell":{"n":"spell","p":"/spell","d":"对文件进行拼写检查"},"rexec":{"n":"rexec","p":"/rexec","d":"运程执行Linux系统下命令 "},"rmdir":{"n":"rmdir","p":"/rmdir","d":"用来删除空目录"},"rmmod":{"n":"rmmod","p":"/rmmod","d":"从运行的内核中移除指定的内核模块"},"route":{"n":"route","p":"/route","d":"显示并设置Linux中静态路由表"},"clear":{"n":"clear","p":"/clear","d":"清除当前屏幕终端上的任何信息"},"sleep":{"n":"sleep","p":"/sleep","d":"将目前动作延迟一段时间"},"rpmdb":{"n":"rpmdb","p":"/rpmdb","d":"初始化和重建RPM数据库"},"skill":{"n":"skill","p":"/skill","d":"向选定的进程发送信号冻结进程"},"shopt":{"n":"shopt","p":"/shopt","d":"显示和设置shell操作选项"},"rsync":{"n":"rsync","p":"/rsync","d":"远程数据同步工具"},"mkswap":{"n":"mkswap","p":"/mkswap","d":"建立和设置SWAP交换分区"},"mpstat":{"n":"mpstat","p":"/mpstat","d":"显示各个可用CPU的状态"},"mtools":{"n":"mtools","p":"/mtools","d":"显示mtools支持的指令"},"e2fsck":{"n":"e2fsck","p":"/e2fsck","d":"用于检查第二扩展文件系统的完整性"},"lnstat":{"n":"lnstat","p":"/lnstat","d":"显示Linux系统的网路状态"},"ulimit":{"n":"ulimit","p":"/ulimit","d":"控制shell程序的资源"},"locate":{"n":"locate","p":"/locate","d":"Apache服务器的性能测试工具"},"logger":{"n":"logger","p":"/logger","d":"在系统日志中记录相应条目"},"iostat":{"n":"iostat","p":"/iostat","d":"监视系统输入输出设备和CPU的使用情况"},"logout":{"n":"logout","p":"/logout","d":"退出当前登录的Shell"},"pwconv":{"n":"pwconv","p":"/pwconv","d":"用来开启用户的投影密码"},"finger":{"n":"finger","p":"/finger","d":"用于查找并显示用户信息"},"bzdiff":{"n":"bzdiff","p":"/bzdiff","d":"直接比较两个.bz2压缩包中文件的不同"},"findfs":{"n":"findfs","p":"/findfs","d":"标签或UUID查找文件系统"},"bzgrep":{"n":"bzgrep","p":"/bzgrep","d":"使用正则表达式搜索.bz2压缩包中文件"},"ifdown":{"n":"ifdown","p":"/ifdown","d":"禁用指定的网络接口"},"telnet\r":{"n":"telnet\r","p":"/telnet","d":"登录远程主机和管理"},"iptraf":{"n":"iptraf","p":"/iptraf","d":"实时地监视网卡流量"},"export":{"n":"export","p":"/export","d":"设置或显示系统环境变量"},"telint":{"n":"telint","p":"/telint","d":"切换当前正在运行系统的运行等级"},"ntsysv":{"n":"ntsysv","p":"/ntsysv","d":"集中管理系统的各种服务"},"bzless":{"n":"bzless","p":"/bzless","d":"增强.bz2压缩包查看器"},"parted":{"n":"parted","p":"/parted","d":"磁盘分区和分区大小调整工具"},"passwd":{"n":"passwd","p":"/passwd","d":"用于让用户可以更改自己的密码"},"lpstat":{"n":"lpstat","p":"/lpstat","d":"显示CUPS中打印机的状态信息"},"expand":{"n":"expand","p":"/expand","d":"将文件的制表符转换为空白字符"},"bzmore":{"n":"bzmore","p":"/bzmore","d":"查看bzip2压缩过的文本文件的内容"},"lsattr":{"n":"lsattr","p":"/lsattr","d":"查看文件的第二扩展文件系统属性"},"whoami":{"n":"whoami","p":"/whoami","d":"打印当前有效的用户名称"},"cancel":{"n":"cancel","p":"/cancel","d":"取消已存在的打印任务"},"ispell":{"n":"ispell","p":"/ispell","d":"检查文件中出现的拼写错误"},"groups":{"n":"groups","p":"/groups","d":"用来打印指定用户所属的工作组"},"ifstat":{"n":"ifstat","p":"/ifstat","d":"统计网络接口流量状态"},"whatis":{"n":"whatis","p":"/whatis","d":"查询一个命令执行什么功能"},"syslog":{"n":"syslog","p":"/syslog","d":"系统默认的日志守护进程"},"sysctl":{"n":"sysctl","p":"/sysctl","d":"时动态地修改内核的运行参数"},"chattr":{"n":"chattr","p":"/chattr","d":"用来改变文件属性"},"printf":{"n":"printf","p":"/printf","d":"格式化并输出结果"},"swapon":{"n":"swapon","p":"/swapon","d":"激活Linux系统中交换空间"},"ltrace":{"n":"ltrace","p":"/ltrace","d":"用来跟踪进程调用库函数的情况"},"pstack":{"n":"pstack","p":"/pstack","d":"显示每个进程的栈跟踪"},"pstree\r":{"n":"pstree\r","p":"/pstree","d":"以树状图的方式展现进程之间的派生关系"},"uptime":{"n":"uptime","p":"/uptime","d":"查看Linux系统负载信息"},"jwhois":{"n":"jwhois","p":"/jwhois","d":"whois 客户端服务"},"arping":{"n":"arping","p":"/arping","d":"通过发送ARP协议报文测试网络"},"unlink":{"n":"unlink","p":"/unlink","d":"系统调用函数unlink去删除指定的文件"},"strace":{"n":"strace","p":"/strace","d":"跟踪系统调用和信号"},"accept":{"n":"accept","p":"/accept","d":"指示打印系统接受发往指定目标打印机的打印任务"},"pvscan":{"n":"pvscan","p":"/pvscan","d":"扫描系统中所有硬盘的物理卷列表"},"hdparm":{"n":"hdparm","p":"/hdparm","d":"显示与设定硬盘的参数"},"hostid":{"n":"hostid","p":"/hostid","d":"用来打印当前主机的数字化标识"},"lvscan":{"n":"lvscan","p":"/lvscan","d":"扫描逻辑卷"},"startx":{"n":"startx","p":"/startx","d":"用来启动X Window"},"enable":{"n":"enable","p":"/enable","d":"启动或关闭shell内建命令"},"chroot":{"n":"chroot","p":"/chroot","d":"把根目录换成指定的目的目录"},"rcconf":{"n":"rcconf","p":"/rcconf","d":"Debian Linux下的运行等级服务配置工具"},"ipcalc":{"n":"ipcalc","p":"/ipcalc","d":"简单的IP地址计算器"},"depmod":{"n":"depmod","p":"/depmod","d":"分析可载入模块的相依性"},"indent":{"n":"indent","p":"/indent","d":"格式化C语言的源文件"},"reboot":{"n":"reboot","p":"/reboot","d":"重新启动正在运行的Linux操作系统"},"reject":{"n":"reject","p":"/reject","d":"指示打印系统拒绝发往指定目标打印机的打印任务"},"rename":{"n":"rename","p":"/rename","d":"用字符串替换的方式批量改变文件名"},"renice":{"n":"renice","p":"/renice","d":"修改正在运行的进程的调度优先级"},"vmstat":{"n":"vmstat","p":"/vmstat","d":"显示虚拟内存状态"},"elinks":{"n":"elinks","p":"/elinks","d":"纯文本界面的WWW浏览器"},"gunzip":{"n":"gunzip","p":"/gunzip","d":"用来解压缩文件"},"rlogin":{"n":"rlogin","p":"/rlogin","d":"从当前终端登录到远程Linux主机"},"source":{"n":"source","p":"/source","d":"在当前Shell环境中从指定文件读取和执行命令,命令返回退出状态。"},"md5sum":{"n":"md5sum","p":"/md5sum","d":"计算和校验文件报文摘要的工具程序"},"insmod":{"n":"insmod","p":"/insmod","d":"将给定的模块加载到内核中"},"ftpwho":{"n":"ftpwho","p":"/ftpwho","d":"显示当前每个ftp会话信息"},"ftptop":{"n":"ftptop","p":"/ftptop","d":"proftpd服务器的连接状态"},"mke2fs":{"n":"mke2fs","p":"/mke2fs","d":"创建磁盘分区上的“etc2/etc3”文件系统"},"umount":{"n":"umount","p":"/umount","d":"用于卸载已经加载的文件系统"},"vgscan":{"n":"vgscan","p":"/vgscan","d":"扫描并显示系统中的卷组"},"hping3":{"n":"hping3","p":"/hping3","d":"测试网络及主机的安全"},"csplit":{"n":"csplit","p":"/csplit","d":"将一个大文件分割成小的碎片文件"},"mktemp":{"n":"mktemp","p":"/mktemp","d":"创建临时文件供shell脚本使用"},"vdfuse":{"n":"vdfuse","p":"/vdfuse","d":"VirtualBox软件挂载VDI分区文件工具"},"setpci":{"n":"setpci","p":"/setpci","d":"查询和配置PCI设备的使用工具"},"screen":{"n":"screen","p":"/screen","d":"用于命令行终端切换"},"seinfo":{"n":"seinfo","p":"/seinfo","d":"查询SELinux的策略提供多少相关规则"},"nethogs":{"n":"nethogs","p":"/nethogs","d":"终端下的网络流量监控工具"},"netstat":{"n":"netstat","p":"/netstat","d":"查看Linux中网络系统状态信息"},"lpadmin":{"n":"lpadmin","p":"/lpadmin","d":"配置CUPS套件中的打印机和类"},"swapoff":{"n":"swapoff","p":"/swapoff","d":"关闭指定的交换空间"},"nfsstat":{"n":"nfsstat","p":"/nfsstat","d":"列出NFS客户端和服务器的工作状态"},"hwclock":{"n":"hwclock","p":"/hwclock","d":"显示与设定硬件时钟"},"install":{"n":"install","p":"/install","d":"安装或升级软件或备份数据"},"strings":{"n":"strings","p":"/strings","d":"在对象文件或二进制文件中查找可打印的字符串"},"userdel":{"n":"userdel","p":"/userdel","d":"用于删除给定的用户以及与用户相关的文件"},"whereis":{"n":"whereis","p":"/whereis","d":"查找二进制程序、代码等相关文件路径"},"zipinfo":{"n":"zipinfo","p":"/zipinfo","d":"用来列出压缩文件信息"},"lftpget":{"n":"lftpget","p":"/lftpget","d":"调用lftp指令下载指定的文件"},"ftpshut":{"n":"ftpshut","p":"/ftpshut","d":"在指定的时间关闭FTP服务器"},"unalias":{"n":"unalias","p":"/unalias","d":"删除由alias设置的别名"},"nologin":{"n":"nologin","p":"/nologin","d":"拒绝用户登录系统"},"useradd":{"n":"useradd","p":"/useradd","d":"创建的新的系统用户"},"ntpdate":{"n":"ntpdate","p":"/ntpdate","d":"使用网络计时协议(NTP)设置日期和时间"},"ssh-add":{"n":"ssh-add","p":"/ssh-add","d":"把专用密钥添加到ssh-agent的高速缓存中"},"quotaon":{"n":"quotaon","p":"/quotaon","d":"激活Linux内核中指定文件系统的磁盘配额功能"},"hexdump":{"n":"hexdump","p":"/hexdump","d":"显示文件十六进制格式"},"objdump":{"n":"objdump","p":"/objdump","d":"显示二进制文件信息"},"edquota":{"n":"edquota","p":"/edquota","d":"用于编辑指定用户或工作组磁盘配额"},"readelf":{"n":"readelf","p":"/readelf","d":"用于显示elf格式文件的信息"},"openssl":{"n":"openssl","p":"/openssl","d":"强大的安全套接字层密码库"},"grpconv":{"n":"grpconv","p":"/grpconv","d":"用来开启群组的投影密码"},"tcpdump\r":{"n":"tcpdump\r","p":"/tcpdump","d":"一款sniffer工具,是Linux上的抓包工具,嗅探器。"},"mkisofs":{"n":"mkisofs","p":"/mkisofs","d":"建立ISO 9660映像文件"},"history":{"n":"history","p":"/history","d":"用于显示历史命令"},"ethtool":{"n":"ethtool","p":"/ethtool","d":"显示或修改以太网卡的配置信息"},"restore":{"n":"restore","p":"/restore","d":"所进行的操作和dump指令相反"},"pathchk":{"n":"pathchk","p":"/pathchk","d":"检查文件中不可移植的部分"},"declare":{"n":"declare","p":"/declare","d":"声明或显示shell变量"},"gpasswd":{"n":"gpasswd","p":"/gpasswd","d":"Linux下工作组文件的管理工具"},"killall":{"n":"killall","p":"/killall","d":"使用进程的名称来杀死一组进程"},"e2label":{"n":"e2label","p":"/e2label","d":"设置第二扩展文件系统的卷标"},"apropos":{"n":"apropos","p":"/apropos","d":"在 whatis 数据库中查找字符串"},"logname":{"n":"logname","p":"/logname","d":"用来显示用户名称"},"apt-get":{"n":"apt-get","p":"/apt-get","d":"Debian Linux发行版中的APT软件包管理工具"},"lastlog":{"n":"lastlog","p":"/lastlog","d":"显示系统中所有用户最近一次登录信息"},"logsave":{"n":"logsave","p":"/logsave","d":"将命令的输出信息保存到指定的日志文件"},"slabtop":{"n":"slabtop","p":"/slabtop","d":"实时显示内核slab内存缓存信息"},"systool":{"n":"systool","p":"/systool","d":"显示基于总线、类和拓扑显示系统中设备的信息"},"builtin":{"n":"builtin","p":"/builtin","d":"执行shell内部命令"},"rpmsign":{"n":"rpmsign","p":"/rpmsign","d":"使用RPM软件包的签名管理工具"},"bunzip2":{"n":"bunzip2","p":"/bunzip2","d":"创一个bz2文件压缩包"},"ppp-off":{"n":"ppp-off","p":"/ppp-off","d":"关闭ppp连线"},"usermod":{"n":"usermod","p":"/usermod","d":"用于修改用户的基本信息"},"volname":{"n":"volname","p":"/volname","d":"显示指定的ISO-9660格式的设备的卷名称"},"crontab":{"n":"crontab","p":"/crontab","d":"提交和管理用户的需要周期性执行的任务"},"losetup":{"n":"losetup","p":"/losetup","d":"设定与控制循环(loop)设备"},"apt-key":{"n":"apt-key","p":"/apt-key","d":"管理Debian Linux系统中的软件包密钥"},"setfacl":{"n":"setfacl","p":"/setfacl","d":"设置文件访问控制列表"},"dirname":{"n":"dirname","p":"/dirname","d":"去除文件名中的非目录部分"},"command":{"n":"command","p":"/command","d":"调用并执行指定的命令"},"service":{"n":"service","p":"/service","d":"控制系统服务的实用工具"},"compress":{"n":"compress","p":"/compress","d":"使用Lempress-Ziv编码压缩数据文件"},"lvremove":{"n":"lvremove","p":"/lvremove","d":"删除指定LVM逻辑卷"},"sesearch":{"n":"sesearch","p":"/sesearch","d":"查询SELinux策略的规则详情"},"semanage":{"n":"semanage","p":"/semanage","d":"默认目录的安全上下文查询与修改"},"zipsplit":{"n":"zipsplit","p":"/zipsplit","d":"将较大的zip压缩包分割成各个较小的压缩包"},"hostname":{"n":"hostname","p":"/hostname","d":"显示和设置系统的主机名"},"htdigest":{"n":"htdigest","p":"/htdigest","d":"Apache服务器内置工具"},"htpasswd":{"n":"htpasswd","p":"/htpasswd","d":"apache服务器创建密码认证文件"},"runlevel":{"n":"runlevel","p":"/runlevel","d":"打印当前Linux系统的运行等级"},"ifconfig":{"n":"ifconfig","p":"/ifconfig","d":"配置和显示Linux系统网卡的网络参数"},"xlsfonts":{"n":"xlsfonts","p":"/xlsfonts","d":"列出X Server使用的字体"},"xlsatoms":{"n":"xlsatoms","p":"/xlsatoms","d":"列出X服务器内部所有定义的原子成分"},"shutdown":{"n":"shutdown","p":"/shutdown","d":"用来执行系统关机的命令"},"rpmquery":{"n":"rpmquery","p":"/rpmquery","d":"从RPM数据库中查询软件包信息"},"rpmbuild":{"n":"rpmbuild","p":"/rpmbuild","d":"创建RPM的二进制软件包和源码软件包"},"rpm2cpio":{"n":"rpm2cpio","p":"/rpm2cpio","d":"将RPM软件包转换为cpio格式的文件"},"iptables":{"n":"iptables","p":"/iptables","d":"Linux上常用的防火墙软件"},"iptstate":{"n":"iptstate","p":"/iptstate","d":"显示iptables的工作状态"},"aptitude":{"n":"aptitude","p":"/aptitude","d":"Debian Linux系统中软件包管理工具"},"groupmod":{"n":"groupmod","p":"/groupmod","d":"更改群组识别码或名称"},"groupdel":{"n":"groupdel","p":"/groupdel","d":"用于删除指定的工作组"},"groupadd":{"n":"groupadd","p":"/groupadd","d":"用于创建一个新的工作组"},"repquota":{"n":"repquota","p":"/repquota","d":"报表的格式输出磁盘空间限制的状态"},"readonly":{"n":"readonly","p":"/readonly","d":"定义只读shell变量或函数"},"arpwatch":{"n":"arpwatch","p":"/arpwatch","d":"监听网络上ARP的记录"},"dhclient":{"n":"dhclient","p":"/dhclient","d":"动态获取或释放IP地址"},"quotaoff":{"n":"quotaoff","p":"/quotaoff","d":"关闭Linux内核中指定文件系统的磁盘配额功能"},"basename":{"n":"basename","p":"/basename","d":"打印目录或者文件的基本名称"},"ldconfig":{"n":"ldconfig","p":"/ldconfig","d":"动态链接库管理命令"},"ftpcount":{"n":"ftpcount","p":"/ftpcount","d":"显示目前已FTP登入的用户人数"},"vgrename":{"n":"vgrename","p":"/vgrename","d":"使用vgrename命令可以重命名卷组的名称。"},"vgremove":{"n":"vgremove","p":"/vgremove","d":"用于用户删除LVM卷组"},"chpasswd":{"n":"chpasswd","p":"/chpasswd","d":"批量更新用户口令的工具"},"pwunconv":{"n":"pwunconv","p":"/pwunconv","d":"用来关闭用户的投影密码"},"dhcrelay":{"n":"dhcrelay","p":"/dhcrelay","d":"使用dhcrelay命令可以提供中继DHCP和BOOTP请求"},"pvremove":{"n":"pvremove","p":"/pvremove","d":"删除一个存在的物理卷"},"vgreduce":{"n":"vgreduce","p":"/vgreduce","d":"从卷组中删除物理卷"},"pvcreate":{"n":"pvcreate","p":"/pvcreate","d":"将物理硬盘分区初始化为物理卷"},"vgextend":{"n":"vgextend","p":"/vgextend","d":"向卷组中添加物理卷"},"diffstat":{"n":"diffstat","p":"/diffstat","d":"显示diff命令输出信息的柱状图"},"pvchange":{"n":"pvchange","p":"/pvchange","d":"修改物理卷属性"},"vgcreate":{"n":"vgcreate","p":"/vgcreate","d":"用于创建LVM卷组"},"protoize":{"n":"protoize","p":"/protoize","d":"GNU-C代码转换为ANSI-C代码"},"vgchange":{"n":"vgchange","p":"/vgchange","d":"修改卷组属性"},"poweroff":{"n":"poweroff","p":"/poweroff","d":"关闭Linux系统,关闭记录会被写入到/var/log/wtmp日志文件中。"},"logwatch":{"n":"logwatch","p":"/logwatch","d":"可定制和可插入式的日志监视系统"},"exportfs":{"n":"exportfs","p":"/exportfs","d":"管理NFS共享文件系统列表"},"lvcreate":{"n":"lvcreate","p":"/lvcreate","d":"用于创建LVM的逻辑卷"},"dos2unix":{"n":"dos2unix","p":"/dos2unix","d":"将DOS格式文本文件转换成Unix格式"},"cdrecord":{"n":"cdrecord","p":"/cdrecord","d":"Linux系统下光盘刻录功能命令"},"dpkg-deb":{"n":"dpkg-deb","p":"/dpkg-deb","d":"Debian Linux下的软件包管理工具"},"updatedb":{"n":"updatedb","p":"/updatedb","d":"创建或更新slocate命令所必需的数据库文件"},"lvextend":{"n":"lvextend","p":"/lvextend","d":"扩展逻辑卷空间"},"lvreduce":{"n":"lvreduce","p":"/lvreduce","d":"收缩逻辑卷空间"},"lvresize":{"n":"lvresize","p":"/lvresize","d":"调整逻辑卷空间大小"},"unexpand":{"n":"unexpand","p":"/unexpand","d":"将文件的空白字符转换为制表符"},"nslookup":{"n":"nslookup","p":"/nslookup","d":"查询域名DNS信息的工具"},"mailstat":{"n":"mailstat","p":"/mailstat","d":"显示到达的邮件状态"},"tempfile":{"n":"tempfile","p":"/tempfile","d":"shell中给临时文件命名"},"mii-tool":{"n":"mii-tool","p":"/mii-tool","d":"配置网络设备协商方式的工具"},"mkinitrd":{"n":"mkinitrd","p":"/mkinitrd","d":"建立要载入ramdisk的映像文件"},"modprobe\r":{"n":"modprobe\r","p":"/modprobe","d":"自动处理可载入模块"},"blockdev":{"n":"blockdev","p":"/blockdev","d":"从命令行调用区块设备控制程序"},"bmodinfo":{"n":"bmodinfo","p":"/bmodinfo","d":"显示给定模块的详细信息"},"newusers":{"n":"newusers","p":"/newusers","d":"用于批处理的方式一次创建多个命令"},"sendmail":{"n":"sendmail","p":"/sendmail","d":"著名电子邮件服务器"},"smbpasswd":{"n":"smbpasswd","p":"/smbpasswd","d":"samba用户和密码管理工具"},"mysqlshow":{"n":"mysqlshow","p":"/mysqlshow","d":"显示MySQL中数据库相关信息"},"apachectl":{"n":"apachectl","p":"/apachectl","d":"Apache服务器前端控制工具"},"mysqldump":{"n":"mysqldump","p":"/mysqldump","d":"MySQL数据库中备份工具"},"clockdiff":{"n":"clockdiff","p":"/clockdiff","d":"检测两台linux主机的时间差"},"grpunconv":{"n":"grpunconv","p":"/grpunconv","d":"用来关闭群组的投影密码"},"rpmverify":{"n":"rpmverify","p":"/rpmverify","d":"验证已安装的RPM软件包的正确性"},"showmount":{"n":"showmount","p":"/showmount","d":"显示NFS服务器加载的信息"},"tcpreplay":{"n":"tcpreplay","p":"/tcpreplay","d":"将PCAP包重新发送,用于性能或者功能测试"},"partprobe":{"n":"partprobe","p":"/partprobe","d":"不重启的情况下重读分区"},"ip6tables":{"n":"ip6tables","p":"/ip6tables","d":"linux中防火墙软件"},"lvdisplay":{"n":"lvdisplay","p":"/lvdisplay","d":"显示逻辑卷属性"},"smbclient":{"n":"smbclient","p":"/smbclient","d":"交互方式访问samba服务器"},"setsebool":{"n":"setsebool","p":"/setsebool","d":"修改SElinux策略内各项规则的布尔值"},"systemctl":{"n":"systemctl","p":"/systemctl","d":"系统服务管理器指令"},"logrotate":{"n":"logrotate","p":"/logrotate","d":"统日志进行轮转、压缩和删除"},"dmidecode\r":{"n":"dmidecode\r","p":"/dmidecode","d":"在Linux系统下获取有关硬件方面的信息"},"vgconvert":{"n":"vgconvert","p":"/vgconvert","d":"转换卷组元数据格式"},"dircolors":{"n":"dircolors","p":"/dircolors","d":"置ls命令在显示目录或文件时所用的色彩"},"vgdisplay":{"n":"vgdisplay","p":"/vgdisplay","d":"显示LVM卷组的信息"},"chkconfig\r":{"n":"chkconfig\r","p":"/chkconfig","d":"检查或设置系统的各种服务"},"pvdisplay":{"n":"pvdisplay","p":"/pvdisplay","d":"显示物理卷的属性"},"tracepath":{"n":"tracepath","p":"/tracepath","d":"追踪目的主机经过的路由信息"},"arptables":{"n":"arptables","p":"/arptables","d":"管理ARP包过滤规则表"},"ssh-agent":{"n":"ssh-agent","p":"/ssh-agent","d":"ssh密钥管理器"},"badblocks":{"n":"badblocks","p":"/badblocks","d":"查找磁盘中损坏的区块"},"getsebool":{"n":"getsebool","p":"/getsebool","d":"查询SElinux策略内各项规则的布尔值"},"restorecon":{"n":"restorecon","p":"/restorecon","d":"恢复文件的安全上下文"},"dpkg-split":{"n":"dpkg-split","p":"/dpkg-split","d":"Debian Linux中将大软件包分割成小包"},"unprotoize":{"n":"unprotoize","p":"/unprotoize","d":"删除C语言源代码文件中的函数原型"},"mkbootdisk":{"n":"mkbootdisk","p":"/mkbootdisk","d":"可建立目前系统的启动盘"},"xlsclients":{"n":"xlsclients","p":"/xlsclients","d":"列出显示器中的客户端应用程序"},"mysqladmin":{"n":"mysqladmin","p":"/mysqladmin","d":"MySQL服务器管理客户端"},"domainname":{"n":"domainname","p":"/domainname","d":"显示和设置系统的NIS域名"},"quotacheck":{"n":"quotacheck","p":"/quotacheck","d":"检查磁盘的使用空间与限制"},"uncompress":{"n":"uncompress","p":"/uncompress","d":"用来解压.Z文件"},"ssh-keygen":{"n":"ssh-keygen","p":"/ssh-keygen","d":"为ssh生成、管理和转换认证密钥"},"get_module":{"n":"get_module","p":"/get_module","d":"获取Linux内核模块的详细信息"},"dpkg-query":{"n":"dpkg-query","p":"/dpkg-query","d":"Debian Linux中软件包的查询工具"},"getenforce":{"n":"getenforce","p":"/getenforce","d":"显示当前SELinux的应用模式,是强制、执行还是停用。"},"cupsenable":{"n":"cupsenable","p":"/cupsenable","d":"启动指定的打印机"},"usernetctl":{"n":"usernetctl","p":"/usernetctl","d":"被允许时操作指定的网络接口"},"traceroute\r":{"n":"traceroute\r","p":"/traceroute","d":"显示数据包到主机间的路径"},"squidclient":{"n":"squidclient","p":"/squidclient","d":"squid服务器的客户端管理工具"},"ssh-keyscan":{"n":"ssh-keyscan","p":"/ssh-keyscan","d":"收集主机公钥的使用工具"},"consoletype":{"n":"consoletype","p":"/consoletype","d":"输出已连接的终端类型"},"sftp-server":{"n":"sftp-server","p":"/sftp-server","d":"sftp协议的服务器端程序"},"mysqlimport":{"n":"mysqlimport","p":"/mysqlimport","d":"为MySQL服务器用命令行方式导入数据"},"inotifywait":{"n":"inotifywait","p":"/inotifywait","d":"异步文件系统监控机制"},"cupsdisable":{"n":"cupsdisable","p":"/cupsdisable","d":"停止指定的打印机"},"lsb_release":{"n":"lsb_release","p":"/lsb_release","d":"显示发行版本信息"},"dpkg-divert":{"n":"dpkg-divert","p":"/dpkg-divert","d":"Debian Linux中创建并管理一个转向列表"},"ssh-copy-id":{"n":"ssh-copy-id","p":"/ssh-copy-id","d":"把本地的ssh公钥文件安装到远程主机对应的账户下"},"apt-sortpkgs":{"n":"apt-sortpkgs","p":"/apt-sortpkgs","d":"Debian Linux下对软件包索引文件进行排序的工具"},"firewall-cmd":{"n":"firewall-cmd","p":"/firewall-cmd","d":"Linux上新用的防火墙软件,跟iptables差不多的工具。"},"dpkg-trigger":{"n":"dpkg-trigger","p":"/dpkg-trigger","d":"Debian Linux下的软件包触发器"},"ypdomainname":{"n":"ypdomainname","p":"/ypdomainname","d":"显示主机的NIS的域名"},"bzip2recover":{"n":"bzip2recover","p":"/bzip2recover","d":"恢复被破坏的.bz2压缩包中的文件"},"convertquota":{"n":"convertquota","p":"/convertquota","d":"把老的配额文件转换为新的格式"},"dnsdomainname":{"n":"dnsdomainname","p":"/dnsdomainname","d":"定义DNS系统中FQDN名称的域名"},"iptables-save":{"n":"iptables-save","p":"/iptables-save","d":"备份iptables的表配置"},"kernelversion":{"n":"kernelversion","p":"/kernelversion","d":"打印当前内核的主版本号"},"speedtest-cli":{"n":"speedtest-cli","p":"/speedtest-cli","d":"命令行下测试服务器外网速度"},"nisdomainname":{"n":"nisdomainname","p":"/nisdomainname","d":"显示主机NIS的域名"},"ip6tables-save":{"n":"ip6tables-save","p":"/ip6tables-save","d":"保存ip6tables表配置"},"named-checkzone":{"n":"named-checkzone","p":"/named-checkzone","d":"使用named-checkzone命令可以进行区域文件有效性检查和转换,必须指定区域名称和区域文件名称。"},"iptables-restore":{"n":"iptables-restore","p":"/iptables-restore","d":"还原iptables表的配置"},"dpkg-reconfigure":{"n":"dpkg-reconfigure","p":"/dpkg-reconfigure","d":"Debian Linux中重新配制一个已经安装的软件包"},"dpkg-preconfigure":{"n":"dpkg-preconfigure","p":"/dpkg-preconfigure","d":"Debian Linux中软件包安装之前询问问题"},"dpkg-statoverride":{"n":"dpkg-statoverride","p":"/dpkg-statoverride","d":"Debian Linux中覆盖文件的所有权和模式"},"ip6tables-restore":{"n":"ip6tables-restore","p":"/ip6tables-restore","d":"还原ip6tables表"}} \ No newline at end of file +{"w":{"n":"w","p":"/w","d":"显示目前登入系统的用户信息"},"ab":{"n":"ab","p":"/ab","d":"Apache服务器的性能测试工具"},"ip":{"n":"ip","p":"/ip","d":"网络配置工具"},"ld":{"n":"ld","p":"/ld","d":"将目标文件连接为可执行程序"},"xz":{"n":"xz","p":"/xz","d":"POSIX 平台开发具有高压缩率的工具。"},"ln":{"n":"ln","p":"/ln","d":"用来为文件创件连接"},"ar":{"n":"ar","p":"/ar","d":"建立或修改备存文件,或是从备存文件中抽取文件"},"lp":{"n":"lp","p":"/lp","d":"打印文件或修改排队的打印任务"},"fg":{"n":"fg","p":"/fg","d":"将后台作业放到前台终端运行"},"wc":{"n":"wc","p":"/wc","d":"统计文件的字节数、字数、行数"},"as":{"n":"as","p":"/as","d":"汇编语言编译器"},"at":{"n":"at","p":"/at","d":"在指定时间执行一个任务"},"fc":{"n":"fc","p":"/fc","d":"修改历史命令并执行"},"ls":{"n":"ls","p":"/ls","d":"显示目录内容列表"},"id":{"n":"id","p":"/id","d":"显示用户的ID以及所属群组的ID"},"vi":{"n":"vi","p":"/vi","d":"功能强大的纯文本编辑器"},"bc":{"n":"bc","p":"/bc","d":"算术操作精密运算工具"},"bg":{"n":"bg","p":"/bg","d":"用于将作业放到后台运行"},"ex":{"n":"ex","p":"/ex","d":"启动vim编辑器的ex编辑模式"},"ed":{"n":"ed","p":"/ed","d":"单行纯文本编辑器"},"tr":{"n":"tr","p":"/tr","d":"将字符进行替换压缩和删除"},"mv":{"n":"mv","p":"/mv","d":"用来对文件或目录重新命名"},"du":{"n":"du","p":"/du","d":"显示每个文件和目录的磁盘使用空间"},"nc":{"n":"nc","p":"/nc","d":"命令用于设置路由器。"},"nl":{"n":"nl","p":"/nl","d":"在Linux系统中计算文件内容行号"},"nm":{"n":"nm","p":"/nm","d":"显示二进制目标文件的符号表"},"cd":{"n":"cd","p":"/cd","d":"切换用户当前工作目录"},"od":{"n":"od","p":"/od","d":"输出文件的八进制、十六进制等格式编码的字节"},"pr":{"n":"pr","p":"/pr","d":"将文本文件转换成适合打印的格式"},"su":{"n":"su","p":"/su","d":"用于切换当前用户身份到其他用户身份"},"ps":{"n":"ps","p":"/ps","d":"报告当前系统的进程状态"},"ss":{"n":"ss","p":"/ss","d":"获取socket统计信息,iproute2 包附带的另一个工具,允许你查询 socket 的有关统计信息。"},"sh":{"n":"sh","p":"/sh","d":"shell命令解释器"},"pv":{"n":"pv","p":"/pv","d":"显示当前在命令行执行的命令的进度信息,管道查看器。"},"df":{"n":"df","p":"/df","d":"显示磁盘的相关信息"},"dd":{"n":"dd","p":"/dd","d":"复制文件并对原文件的内容进行转换和格式化处理"},"rm":{"n":"rm","p":"/rm","d":"用于删除给定的文件和目录"},"cu":{"n":"cu","p":"/cu","d":"用于连接另一个系统主机。"},"cp":{"n":"cp","p":"/cp","d":"将源文件或目录复制到目标文件或目录中"},"man":{"n":"man","p":"/man","d":"查看Linux中的指令帮助"},"sar":{"n":"sar","p":"/sar","d":"系统运行状态统计工具"},"rsh":{"n":"rsh","p":"/rsh","d":"连接远程主机并执行命令"},"rpm":{"n":"rpm","p":"/rpm","d":"RPM软件包的管理工具"},"sed":{"n":"sed","p":"/sed","d":"功能强大的流式文本编辑器"},"seq":{"n":"seq","p":"/seq","d":"以指定增量从首数开始打印数字到尾数"},"zip":{"n":"zip","p":"/zip","d":"可以用来解压缩文件"},"cut":{"n":"cut","p":"/cut","d":"连接文件并打印到标准输出设备上"},"set":{"n":"set","p":"/set","d":"显示或设置shell特性及shell变量"},"rcp":{"n":"rcp","p":"/rcp","d":"使在两台Linux主机之间的文件复制操作更简单"},"col":{"n":"col","p":"/col","d":"过滤控制字符"},"pwd":{"n":"pwd","p":"/pwd","d":"绝对路径方式显示用户当前工作目录"},"pvs":{"n":"pvs","p":"/pvs","d":"输出物理卷信息报表"},"cmp":{"n":"cmp","p":"/cmp","d":"比较两个文件是否有差异"},"dig":{"n":"dig","p":"/dig","d":"域名查询工具"},"ssh":{"n":"ssh","p":"/ssh","d":"openssh套件中的客户端连接工具"},"sum":{"n":"sum","p":"/sum","d":"计算文件的校验码和显示块数"},"dnf":{"n":"dnf","p":"/dnf","d":"新一代的RPM软件包管理器"},"php":{"n":"php","p":"/php","d":"PHP语言的命令行接口"},"tac":{"n":"tac","p":"/tac","d":"将文件已行为单位的反序输出"},"cat":{"n":"cat","p":"/cat","d":"连接文件并打印到标准输出设备上"},"cal":{"n":"cal","p":"/cal","d":"显示当前日历或指定日期的日历"},"tar":{"n":"tar","p":"/tar","d":"Linux下的归档使用工具,用来打包和备份。"},"tee":{"n":"tee","p":"/tee","d":"把数据重定向到给定文件和屏幕上"},"top":{"n":"top","p":"/top","d":"显示或管理执行中的程序"},"bye":{"n":"bye","p":"/bye","d":"命令用于中断FTP连线并结束程序。。"},"scp":{"n":"scp","p":"/scp","d":"加密的方式在本地主机和远程主机之间复制文件"},"elm":{"n":"elm","p":"/elm","d":"纯文本邮件客户端程序"},"env":{"n":"env","p":"/env","d":"显示系统中已存在的环境变量"},"tty":{"n":"tty","p":"/tty","d":"显示连接到当前标准输入的终端设备文件名。"},"awk":{"n":"awk","p":"/awk","d":"文本和数据进行处理的编程语言"},"lpr":{"n":"lpr","p":"/lpr","d":"将文件发送给指定打印机进行打印"},"atq":{"n":"atq","p":"/atq","d":"列出当前用户的at任务列表"},"lpq":{"n":"lpq","p":"/lpq","d":"显示打印队列中的打印任务的状态信息"},"arp":{"n":"arp","p":"/arp","d":"显示和修改IP到MAC转换表"},"lpc":{"n":"lpc","p":"/lpc","d":"命令行方式打印机控制程序"},"arj":{"n":"arj","p":"/arj","d":"用于创建和管理.arj压缩包"},"who":{"n":"who","p":"/who","d":"显示目前登录系统的用户信息"},"fmt":{"n":"fmt","p":"/fmt","d":"读取文件后优化处理并输出"},"ftp":{"n":"ftp","p":"/ftp","d":"用来设置文件系统相关功能"},"lha":{"n":"lha","p":"/lha","d":"压缩或解压缩lzh格式文件"},"let":{"n":"let","p":"/let","d":"简单的计算器"},"gcc":{"n":"gcc","p":"/gcc","d":"基于C/C++的编译器"},"gdb":{"n":"gdb","p":"/gdb","d":"功能强大的程序调试器"},"ldd":{"n":"ldd","p":"/ldd","d":"打印程序或者库文件所依赖的共享库列表"},"yes":{"n":"yes","p":"/yes","d":"重复打印指定字符串"},"git":{"n":"git","p":"/git","d":"是目前世界上最先进的分布式版本控制系统"},"gpm":{"n":"gpm","p":"/gpm","d":"提供文字模式下的滑鼠事件处理"},"joe":{"n":"joe","p":"/joe","d":"强大的纯文本编辑器"},"jed":{"n":"jed","p":"/jed","d":"主要用于编辑代码的编辑器"},"yum":{"n":"yum","p":"/yum","d":"基于RPM的软件包管理器"},"rev":{"n":"rev","p":"/rev","d":"将文件内容以字符为单位反序输出"},"chfn":{"n":"chfn","p":"/chfn","d":"用来改变finger命令显示的信息"},"sudo":{"n":"sudo","p":"/sudo","d":"以其他身份来执行命令"},"pssh":{"n":"pssh","p":"/pssh","d":"批量管理执行"},"bind":{"n":"bind","p":"/bind","d":"显示或设置键盘按键与其相关的功能"},"dirs":{"n":"dirs","p":"/dirs","d":"显示目录记录"},"stty":{"n":"stty","p":"/stty","d":"修改终端命令行的相关设置"},"popd":{"n":"popd","p":"/popd","d":"用于删除目录栈中的记录"},"stat":{"n":"stat","p":"/stat","d":"用于显示文件的状态信息"},"pmap":{"n":"pmap","p":"/pmap","d":"报告进程的内存映射关系"},"ping":{"n":"ping","p":"/ping","d":"测试主机之间网络的连通性"},"pico":{"n":"pico","p":"/pico","d":"功能强大全屏幕的文本编辑器"},"sshd":{"n":"sshd","p":"/sshd","d":"openssh软件套件中的服务器守护进程"},"perl":{"n":"perl","p":"/perl","d":"perl语言解释器"},"uniq":{"n":"uniq","p":"/uniq","d":"报告或忽略文件中的重复行"},"nmap":{"n":"nmap","p":"/nmap","d":"网络探测和安全审核"},"chsh":{"n":"chsh","p":"/chsh","d":"用来更换登录系统时使用的shell"},"type":{"n":"type","p":"/type","d":"显示指定命令的类型"},"nice":{"n":"nice","p":"/nice","d":"改变程序执行的优先权等级"},"sort":{"n":"sort","p":"/sort","d":"将文件进行排序并输出"},"dpkg":{"n":"dpkg","p":"/dpkg","d":"Debian Linux系统上安装、创建和管理软件包"},"dris":{"n":"dris","p":"/dris","d":"显示和清空目录堆栈中的内容"},"nano":{"n":"nano","p":"/nano","d":"字符终端文本编辑器"},"xset":{"n":"xset","p":"/xset","d":"设置X-Window系统中的用户爱好的实用工具"},"dump":{"n":"dump","p":"/dump","d":"用于备份ext2或者ext3文件系统"},"sftp":{"n":"sftp","p":"/sftp","d":"交互式的文件传输程序"},"more":{"n":"more","p":"/more","d":"显示文件内容,每次显示一屏"},"echo":{"n":"echo","p":"/echo","d":"输出指定的字符串或者变量"},"tree":{"n":"tree","p":"/tree","d":"树状图列出目录的内容"},"mkfs":{"n":"mkfs","p":"/mkfs","d":"用于在设备上创建Linux文件系统"},"mesg":{"n":"mesg","p":"/mesg","d":"设置当前终端的写权限"},"trap":{"n":"trap","p":"/trap","d":"指定在接收到信号后将要采取的动作"},"make":{"n":"make","p":"/make","d":"GNU的工程化编译工具"},"atop":{"n":"atop","p":"/atop","d":"监控Linux系统资源与进程的工具"},"mail":{"n":"mail","p":"/mail","d":"命令行下发送和接收电子邮件"},"lynx":{"n":"lynx","p":"/lynx","d":"纯文本模式的网页浏览器"},"comm":{"n":"comm","p":"/comm","d":"两个文件之间的比较"},"lsof":{"n":"lsof","p":"/lsof","d":"显示Linux系统当前已打开的所有文件列表"},"zcat":{"n":"zcat","p":"/zcat","d":"显示压缩包中文件的内容"},"exec":{"n":"exec","p":"/exec","d":"调用并执行指定的命令"},"exit":{"n":"exit","p":"/exit","d":"退出当前的shell"},"tput":{"n":"tput","p":"/tput","d":"通过terminfo数据库对终端会话进行初始化和操作"},"lprm":{"n":"lprm","p":"/lprm","d":"删除打印队列中的打印任务"},"atrm":{"n":"atrm","p":"/atrm","d":"删除待执行任务队列中的指定任务"},"expr":{"n":"expr","p":"/expr","d":"一款表达式计算工具"},"time":{"n":"time","p":"/time","d":"统计给定命令所花费的总时间"},"tftp":{"n":"tftp","p":"/tftp","d":"在本机和tftp服务器之间使用TFTP协议传输文件"},"cpio":{"n":"cpio","p":"/cpio","d":"用来建立、还原备份档的工具程序"},"test":{"n":"test","p":"/test","d":"shell环境中测试条件表达式工具"},"file":{"n":"file","p":"/file","d":"用来探测给定文件的类型。"},"find":{"n":"find","p":"/find","d":"在指定目录下查找文件"},"arpd":{"n":"arpd","p":"/arpd","d":"收集免费ARP信息"},"look":{"n":"look","p":"/look","d":"显示文件中以指定字符串开头的任意行"},"axel":{"n":"axel","p":"/axel","d":"多线程下载工具"},"wait":{"n":"wait","p":"/wait","d":"等待进程执行完后返回"},"fold":{"n":"fold","p":"/fold","d":"控制文件内容输出时所占用的屏幕宽度"},"free":{"n":"free","p":"/free","d":"显示内存的使用情况"},"fsck":{"n":"fsck","p":"/fsck","d":"检查并且试图修复文件系统中的错误"},"talk":{"n":"talk","p":"/talk","d":"让用户和其他用户聊天"},"lilo":{"n":"lilo","p":"/lilo","d":"安装核心载入开机管理程序"},"curl":{"n":"curl","p":"/curl","d":"利用URL规则在命令行下工作的文件传输工具"},"lftp":{"n":"lftp","p":"/lftp","d":"优秀的文件客户端程序"},"wget":{"n":"wget","p":"/wget","d":"Linux系统下载文件工具"},"less":{"n":"less","p":"/less","d":"分屏上下翻页浏览文件内容"},"date":{"n":"date","p":"/date","d":"显示或设置系统时间与日期"},"gcov":{"n":"gcov","p":"/gcov","d":"测试程序的代码覆盖率的工具"},"znew":{"n":"znew","p":"/znew","d":"将.Z压缩包重新转化为gzip命令压缩的.gz压缩包"},"read":{"n":"read","p":"/read","d":"从键盘读取变量值"},"tail":{"n":"tail","p":"/tail","d":"在屏幕上显示指定文件的末尾若干行"},"last":{"n":"last","p":"/last","d":"列出目前与过去登入系统的用户相关信息"},"wall":{"n":"wall","p":"/wall","d":"向系统当前所有打开的终端上输出信息"},"kill":{"n":"kill","p":"/kill","d":"删除执行中的程序或工作"},"sync":{"n":"sync","p":"/sync","d":"用于强制被改变的内容立刻写入磁盘"},"grep":{"n":"grep","p":"/grep","d":"强大的文本搜索工具"},"join":{"n":"join","p":"/join","d":"两个文件中指定栏位内容相同的行连接起来"},"pwck":{"n":"pwck","p":"/pwck","d":"用来验证系统认证文件内容和格式的完整性"},"jobs":{"n":"jobs","p":"/jobs","d":"显示Linux中的任务列表及任务状态"},"arch":{"n":"arch","p":"/arch","d":"显示当前主机的硬件架构类型"},"ipcs":{"n":"ipcs","p":"/ipcs","d":"分析消息队列共享内存和信号量 "},"diff":{"n":"diff","p":"/diff","d":"比较给定的两个文件的不同"},"init":{"n":"init","p":"/init","d":"init进程是所有Linux进程的父进程"},"grub":{"n":"grub","p":"/grub","d":"多重引导程序grub的命令行shell工具"},"info":{"n":"info","p":"/info","d":"Linux下info格式的帮助指令"},"ifup":{"n":"ifup","p":"/ifup","d":"激活指定的网络接口"},"gzip":{"n":"gzip","p":"/gzip","d":"用来压缩文件"},"halt":{"n":"halt","p":"/halt","d":"关闭正在运行的Linux操作系统"},"pvck":{"n":"pvck","p":"/pvck","d":"检测物理卷的LVM元数据的一致性"},"head":{"n":"head","p":"/head","d":"在屏幕上显示指定文件的开头若干行"},"help":{"n":"help","p":"/help","d":"显示帮助信息"},"htop":{"n":"htop","p":"/htop","d":"[非内部命令]一个互动的进程查看器,可以动态观察系统进程状况。"},"host":{"n":"host","p":"/host","d":"常用的分析域名查询工具"},"mysql":{"n":"mysql","p":"/mysql","d":"MySQL服务器客户端工具"},"bzcat":{"n":"bzcat","p":"/bzcat","d":"解压缩指定的.bz2文件"},"touch":{"n":"touch","p":"/touch","d":"创建新的空文件"},"iconv":{"n":"iconv","p":"/iconv","d":"转换文件的编码方式"},"ifcfg":{"n":"ifcfg","p":"/ifcfg","d":"置Linux中的网络接口参数"},"gzexe":{"n":"gzexe","p":"/gzexe","d":"用来压缩可执行文件"},"tload":{"n":"tload","p":"/tload","d":"显示系统负载状况"},"iotop":{"n":"iotop","p":"/iotop","d":"用来监视磁盘I/O使用状况的工具"},"alias":{"n":"alias","p":"/alias","d":"用来设置指令的别名"},"zfore":{"n":"zfore","p":"/zfore","d":"强制为gzip格式的压缩文件添加.gz后缀"},"bzip2":{"n":"bzip2","p":"/bzip2","d":"将文件压缩成bz2格式"},"ipcrm":{"n":"ipcrm","p":"/ipcrm","d":"删除消息队列、信号集、或者共享内存标识"},"grpck":{"n":"grpck","p":"/grpck","d":"用于验证组文件的完整性"},"iperf":{"n":"iperf","p":"/iperf","d":"网络性能测试工具"},"kexec":{"n":"kexec","p":"/kexec","d":"从当前正在运行的内核引导到一个新内核"},"lastb":{"n":"lastb","p":"/lastb","d":"列出登入系统失败的用户相关信息"},"xinit":{"n":"xinit","p":"/xinit","d":"是Linux下X-Window系统的初始化程序"},"xhost":{"n":"xhost","p":"/xhost","d":"制哪些X客户端能够在X服务器上显示"},"fuser":{"n":"fuser","p":"/fuser","d":"使用文件或文件结构识别进程"},"tailf":{"n":"tailf","p":"/tailf","d":"在屏幕上显示指定文件的末尾若干行内容,通常用于日志文件的跟踪输出。"},"chage":{"n":"chage","p":"/chage","d":"修改帐号和密码的有效期限"},"xclip":{"n":"xclip","p":"/xclip","d":"管理 X 粘贴板"},"login":{"n":"login","p":"/login","d":"登录系统或切换用户身份"},"xauth":{"n":"xauth","p":"/xauth","d":"显示和编辑被用于连接X服务器的认证信息"},"fgrep":{"n":"fgrep","p":"/fgrep","d":"为文件搜索文字字符串"},"fdisk":{"n":"fdisk","p":"/fdisk","d":"查看磁盘使用情况和磁盘分区"},"xargs":{"n":"xargs","p":"/xargs","d":"给其他命令传递参数的一个过滤器"},"lsblk":{"n":"lsblk","p":"/lsblk","d":"列出块设备信息"},"lscpu":{"n":"lscpu","p":"/lscpu","d":"显示有关CPU架构的信息"},"lsmod":{"n":"lsmod","p":"/lsmod","d":"显示已载入系统的模块"},"chcon":{"n":"chcon","p":"/chcon","d":"修改对象(文件)的安全上下文"},"lspci":{"n":"lspci","p":"/lspci","d":"显示当前主机的所有PCI总线信息"},"lsusb":{"n":"lsusb","p":"/lsusb","d":"显示本机的USB设备列表信息"},"write":{"n":"write","p":"/write","d":"向指定登录用户终端上发送信息"},"emacs":{"n":"emacs","p":"/emacs","d":"功能强大的全屏文本编辑器"},"mailq":{"n":"mailq","p":"/mailq","d":"显示待发送的邮件队列"},"eject":{"n":"eject","p":"/eject","d":"用来退出抽取式设备"},"egrep":{"n":"egrep","p":"/egrep","d":"在文件内查找指定的字符串"},"mkdir":{"n":"mkdir","p":"/mkdir","d":"用来创建目录"},"chgrp":{"n":"chgrp","p":"/chgrp","d":"用来变更文件或目录的所属群组"},"chmod":{"n":"chmod","p":"/chmod","d":"用来变更文件或目录的权限"},"mknod":{"n":"mknod","p":"/mknod","d":"创建字符设备文件和块设备文件"},"mount":{"n":"mount","p":"/mount","d":"用于挂载Linux系统外的文件。"},"bzcmp":{"n":"bzcmp","p":"/bzcmp","d":"比较两个压缩包中的文件"},"which":{"n":"which","p":"/which","d":"查找并显示给定命令的绝对路径"},"chown":{"n":"chown","p":"/chown","d":"用来变更文件或目录的拥有者或所属群组"},"dstat":{"n":"dstat","p":"/dstat","d":"通用的系统资源统计工具"},"watch":{"n":"watch","p":"/watch","d":"可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令"},"ncftp":{"n":"ncftp","p":"/ncftp","d":"是增强的的FTP工具"},"ngrep":{"n":"ngrep","p":"/ngrep","d":"方便的数据包匹配和显示工具"},"umask":{"n":"umask","p":"/umask","d":"用来设置限制新建文件权限的掩码"},"batch":{"n":"batch","p":"/batch","d":"在系统不繁忙的时候执行定时任务"},"nmcli":{"n":"nmcli","p":"/nmcli","d":"地址配置工具"},"nohup":{"n":"nohup","p":"/nohup","d":"将程序以忽略挂起信号的方式运行起来"},"cksum":{"n":"cksum","p":"/cksum","d":"检查文件的CRC是否正确"},"uname":{"n":"uname","p":"/uname","d":"显示Linux系统信息"},"squid":{"n":"squid","p":"/squid","d":"squid服务器守护进程"},"paste":{"n":"paste","p":"/paste","d":"将多个文件按列队列合并"},"patch":{"n":"patch","p":"/patch","d":"为开放源代码软件安装补丁程序"},"split":{"n":"split","p":"/split","d":"分割任意大小的文件"},"pfctl":{"n":"pfctl","p":"/pfctl","d":"PF防火墙的配置命令"},"pgrep":{"n":"pgrep","p":"/pgrep","d":"设置用户的认证信息,包括用户密码、密码过期时间等"},"pidof":{"n":"pidof","p":"/pidof","d":"查找指定名称的进程的进程号ID号"},"pkill":{"n":"pkill","p":"/pkill","d":"可以按照进程名杀死进程"},"spell":{"n":"spell","p":"/spell","d":"对文件进行拼写检查"},"dmesg":{"n":"dmesg","p":"/dmesg","d":"显示Linux系统启动信息"},"unarj":{"n":"unarj","p":"/unarj","d":"解压缩由arj命令创建的压缩包"},"pushd":{"n":"pushd","p":"/pushd","d":"将目录加入命令堆叠中"},"diff3":{"n":"diff3","p":"/diff3","d":"比较3个文件不同的地方"},"dhcpd":{"n":"dhcpd","p":"/dhcpd","d":"运行DHCP服务器。"},"quota":{"n":"quota","p":"/quota","d":"显示磁盘已使用的空间与限制"},"clear":{"n":"clear","p":"/clear","d":"清除当前屏幕终端上的任何信息"},"blkid":{"n":"blkid","p":"/blkid","d":"查看块设备的文件系统类型、LABEL、UUID等信息"},"sleep":{"n":"sleep","p":"/sleep","d":"将目前动作延迟一段时间"},"users":{"n":"users","p":"/users","d":"显示当前登录系统的所有用户"},"rexec":{"n":"rexec","p":"/rexec","d":"运程执行Linux系统下命令 "},"skill":{"n":"skill","p":"/skill","d":"向选定的进程发送信号冻结进程"},"rmdir":{"n":"rmdir","p":"/rmdir","d":"用来删除空目录"},"rmmod":{"n":"rmmod","p":"/rmmod","d":"从运行的内核中移除指定的内核模块"},"route":{"n":"route","p":"/route","d":"显示并设置Linux中静态路由表"},"rpmdb":{"n":"rpmdb","p":"/rpmdb","d":"初始化和重建RPM数据库"},"shopt":{"n":"shopt","p":"/shopt","d":"显示和设置shell操作选项"},"clock":{"n":"clock","p":"/clock","d":"用于调整 RTC 时间。"},"rsync":{"n":"rsync","p":"/rsync","d":"远程数据同步工具"},"unset":{"n":"unset","p":"/unset","d":"删除指定的shell变量或函数"},"unzip":{"n":"unzip","p":"/unzip","d":"用于解压缩由zip命令压缩的压缩包"},"colrm":{"n":"colrm","p":"/colrm","d":"删除文件中的指定列"},"mktemp":{"n":"mktemp","p":"/mktemp","d":"创建临时文件供shell脚本使用"},"strace":{"n":"strace","p":"/strace","d":"跟踪系统调用和信号"},"indent":{"n":"indent","p":"/indent","d":"格式化C语言的源文件"},"mpstat":{"n":"mpstat","p":"/mpstat","d":"显示各个可用CPU的状态"},"mtools":{"n":"mtools","p":"/mtools","d":"显示mtools支持的指令"},"e2fsck":{"n":"e2fsck","p":"/e2fsck","d":"用于检查第二扩展文件系统的完整性"},"ipcalc":{"n":"ipcalc","p":"/ipcalc","d":"简单的IP地址计算器"},"lnstat":{"n":"lnstat","p":"/lnstat","d":"显示Linux系统的网路状态"},"locate":{"n":"locate","p":"/locate","d":"Apache服务器的性能测试工具"},"whatis":{"n":"whatis","p":"/whatis","d":"查询一个命令执行什么功能"},"arping":{"n":"arping","p":"/arping","d":"通过发送ARP协议报文测试网络"},"logger":{"n":"logger","p":"/logger","d":"在系统日志中记录相应条目"},"gunzip":{"n":"gunzip","p":"/gunzip","d":"用来解压缩文件"},"syslog":{"n":"syslog","p":"/syslog","d":"系统默认的日志守护进程"},"startx":{"n":"startx","p":"/startx","d":"用来启动X Window"},"chroot":{"n":"chroot","p":"/chroot","d":"把根目录换成指定的目的目录"},"ulimit":{"n":"ulimit","p":"/ulimit","d":"控制shell程序的资源"},"logout":{"n":"logout","p":"/logout","d":"退出当前登录的Shell"},"bzdiff":{"n":"bzdiff","p":"/bzdiff","d":"直接比较两个.bz2压缩包中文件的不同"},"vmstat":{"n":"vmstat","p":"/vmstat","d":"显示虚拟内存状态"},"sysctl":{"n":"sysctl","p":"/sysctl","d":"时动态地修改内核的运行参数"},"finger":{"n":"finger","p":"/finger","d":"用于查找并显示用户信息"},"chattr":{"n":"chattr","p":"/chattr","d":"用来改变文件属性"},"umount":{"n":"umount","p":"/umount","d":"用于卸载已经加载的文件系统"},"findfs":{"n":"findfs","p":"/findfs","d":"标签或UUID查找文件系统"},"ntsysv":{"n":"ntsysv","p":"/ntsysv","d":"集中管理系统的各种服务"},"swapon":{"n":"swapon","p":"/swapon","d":"激活Linux系统中交换空间"},"hping3":{"n":"hping3","p":"/hping3","d":"测试网络及主机的安全"},"insmod":{"n":"insmod","p":"/insmod","d":"将给定的模块加载到内核中"},"parted":{"n":"parted","p":"/parted","d":"磁盘分区和分区大小调整工具"},"passwd":{"n":"passwd","p":"/passwd","d":"用于让用户可以更改自己的密码"},"telnet":{"n":"telnet","p":"/telnet","d":"登录远程主机和管理"},"export":{"n":"export","p":"/export","d":"设置或显示系统环境变量"},"lpstat":{"n":"lpstat","p":"/lpstat","d":"显示CUPS中打印机的状态信息"},"expand":{"n":"expand","p":"/expand","d":"将文件的制表符转换为空白字符"},"lsattr":{"n":"lsattr","p":"/lsattr","d":"查看文件的第二扩展文件系统属性"},"telint":{"n":"telint","p":"/telint","d":"切换当前正在运行系统的运行等级"},"iptraf":{"n":"iptraf","p":"/iptraf","d":"实时地监视网卡流量"},"ispell":{"n":"ispell","p":"/ispell","d":"检查文件中出现的拼写错误"},"groups":{"n":"groups","p":"/groups","d":"用来打印指定用户所属的工作组"},"printf":{"n":"printf","p":"/printf","d":"格式化并输出结果"},"jwhois":{"n":"jwhois","p":"/jwhois","d":"whois 客户端服务"},"pstack":{"n":"pstack","p":"/pstack","d":"显示每个进程的栈跟踪"},"pstree":{"n":"pstree","p":"/pstree","d":"以树状图的方式展现进程之间的派生关系"},"vgscan":{"n":"vgscan","p":"/vgscan","d":"扫描并显示系统中的卷组"},"bzless":{"n":"bzless","p":"/bzless","d":"增强.bz2压缩包查看器"},"vdfuse":{"n":"vdfuse","p":"/vdfuse","d":"VirtualBox软件挂载VDI分区文件工具"},"pvscan":{"n":"pvscan","p":"/pvscan","d":"扫描系统中所有硬盘的物理卷列表"},"ltrace":{"n":"ltrace","p":"/ltrace","d":"用来跟踪进程调用库函数的情况"},"pwconv":{"n":"pwconv","p":"/pwconv","d":"用来开启用户的投影密码"},"hostid":{"n":"hostid","p":"/hostid","d":"用来打印当前主机的数字化标识"},"bzmore":{"n":"bzmore","p":"/bzmore","d":"查看bzip2压缩过的文本文件的内容"},"uupick":{"n":"uupick","p":"/uupick","d":"命令处理传送进来的文件。"},"source":{"n":"source","p":"/source","d":"在当前Shell环境中从指定文件读取和执行命令,命令返回退出状态。"},"rcconf":{"n":"rcconf","p":"/rcconf","d":"Debian Linux下的运行等级服务配置工具"},"depmod":{"n":"depmod","p":"/depmod","d":"分析可载入模块的相依性"},"accept":{"n":"accept","p":"/accept","d":"指示打印系统接受发往指定目标打印机的打印任务"},"lvscan":{"n":"lvscan","p":"/lvscan","d":"扫描逻辑卷"},"reboot":{"n":"reboot","p":"/reboot","d":"重新启动正在运行的Linux操作系统"},"reject":{"n":"reject","p":"/reject","d":"指示打印系统拒绝发往指定目标打印机的打印任务"},"rename":{"n":"rename","p":"/rename","d":"用字符串替换的方式批量改变文件名"},"renice":{"n":"renice","p":"/renice","d":"修改正在运行的进程的调度优先级"},"resize":{"n":"resize","p":"/resize","d":"命令设置终端机视窗的大小。"},"enable":{"n":"enable","p":"/enable","d":"启动或关闭shell内建命令"},"uucico":{"n":"uucico","p":"/uucico","d":"UUCP文件传输服务程序。"},"iostat":{"n":"iostat","p":"/iostat","d":"监视系统输入输出设备和CPU的使用情况"},"cancel":{"n":"cancel","p":"/cancel","d":"取消已存在的打印任务"},"rlogin":{"n":"rlogin","p":"/rlogin","d":"从当前终端登录到远程Linux主机"},"elinks":{"n":"elinks","p":"/elinks","d":"纯文本界面的WWW浏览器"},"ifdown":{"n":"ifdown","p":"/ifdown","d":"禁用指定的网络接口"},"md5sum":{"n":"md5sum","p":"/md5sum","d":"计算和校验文件报文摘要的工具程序"},"bzgrep":{"n":"bzgrep","p":"/bzgrep","d":"使用正则表达式搜索.bz2压缩包中文件"},"csplit":{"n":"csplit","p":"/csplit","d":"将一个大文件分割成小的碎片文件"},"whoami":{"n":"whoami","p":"/whoami","d":"打印当前有效的用户名称"},"unlink":{"n":"unlink","p":"/unlink","d":"系统调用函数unlink去删除指定的文件"},"ifstat":{"n":"ifstat","p":"/ifstat","d":"统计网络接口流量状态"},"mke2fs":{"n":"mke2fs","p":"/mke2fs","d":"创建磁盘分区上的“etc2/etc3”文件系统"},"ftpwho":{"n":"ftpwho","p":"/ftpwho","d":"显示当前每个ftp会话信息"},"ftptop":{"n":"ftptop","p":"/ftptop","d":"proftpd服务器的连接状态"},"uptime":{"n":"uptime","p":"/uptime","d":"查看Linux系统负载信息"},"screen":{"n":"screen","p":"/screen","d":"用于命令行终端切换"},"seinfo":{"n":"seinfo","p":"/seinfo","d":"查询SELinux的策略提供多少相关规则"},"hdparm":{"n":"hdparm","p":"/hdparm","d":"显示与设定硬盘的参数"},"setpci":{"n":"setpci","p":"/setpci","d":"查询和配置PCI设备的使用工具"},"mkswap":{"n":"mkswap","p":"/mkswap","d":"建立和设置SWAP交换分区"},"e2label":{"n":"e2label","p":"/e2label","d":"设置第二扩展文件系统的卷标"},"setfacl":{"n":"setfacl","p":"/setfacl","d":"设置文件访问控制列表"},"command":{"n":"command","p":"/command","d":"调用并执行指定的命令"},"useradd":{"n":"useradd","p":"/useradd","d":"创建的新的系统用户"},"crontab":{"n":"crontab","p":"/crontab","d":"提交和管理用户的需要周期性执行的任务"},"userdel":{"n":"userdel","p":"/userdel","d":"用于删除给定的用户以及与用户相关的文件"},"rpmsign":{"n":"rpmsign","p":"/rpmsign","d":"使用RPM软件包的签名管理工具"},"usermod":{"n":"usermod","p":"/usermod","d":"用于修改用户的基本信息"},"slabtop":{"n":"slabtop","p":"/slabtop","d":"实时显示内核slab内存缓存信息"},"restore":{"n":"restore","p":"/restore","d":"所进行的操作和dump指令相反"},"slocate":{"n":"slocate","p":"/slocate","d":"命令查找文件或目录"},"readelf":{"n":"readelf","p":"/readelf","d":"用于显示elf格式文件的信息"},"declare":{"n":"declare","p":"/declare","d":"声明或显示shell变量"},"quotaon":{"n":"quotaon","p":"/quotaon","d":"激活Linux内核中指定文件系统的磁盘配额功能"},"dirname":{"n":"dirname","p":"/dirname","d":"去除文件名中的非目录部分"},"ppp-off":{"n":"ppp-off","p":"/ppp-off","d":"关闭ppp连线"},"pathchk":{"n":"pathchk","p":"/pathchk","d":"检查文件中不可移植的部分"},"openssl":{"n":"openssl","p":"/openssl","d":"强大的安全套接字层密码库"},"objdump":{"n":"objdump","p":"/objdump","d":"显示二进制文件信息"},"ntpdate":{"n":"ntpdate","p":"/ntpdate","d":"使用网络计时协议(NTP)设置日期和时间"},"ssh-add":{"n":"ssh-add","p":"/ssh-add","d":"把专用密钥添加到ssh-agent的高速缓存中"},"unalias":{"n":"unalias","p":"/unalias","d":"删除由alias设置的别名"},"nologin":{"n":"nologin","p":"/nologin","d":"拒绝用户登录系统"},"volname":{"n":"volname","p":"/volname","d":"显示指定的ISO-9660格式的设备的卷名称"},"nfsstat":{"n":"nfsstat","p":"/nfsstat","d":"列出NFS客户端和服务器的工作状态"},"netstat":{"n":"netstat","p":"/netstat","d":"查看Linux中网络系统状态信息"},"nethogs":{"n":"nethogs","p":"/nethogs","d":"终端下的网络流量监控工具"},"whereis":{"n":"whereis","p":"/whereis","d":"查找二进制程序、代码等相关文件路径"},"service":{"n":"service","p":"/service","d":"控制系统服务的实用工具"},"strings":{"n":"strings","p":"/strings","d":"在对象文件或二进制文件中查找可打印的字符串"},"mkisofs":{"n":"mkisofs","p":"/mkisofs","d":"建立ISO 9660映像文件"},"edquota":{"n":"edquota","p":"/edquota","d":"用于编辑指定用户或工作组磁盘配额"},"ethtool":{"n":"ethtool","p":"/ethtool","d":"显示或修改以太网卡的配置信息"},"swapoff":{"n":"swapoff","p":"/swapoff","d":"关闭指定的交换空间"},"lpadmin":{"n":"lpadmin","p":"/lpadmin","d":"配置CUPS套件中的打印机和类"},"losetup":{"n":"losetup","p":"/losetup","d":"设定与控制循环(loop)设备"},"logsave":{"n":"logsave","p":"/logsave","d":"将命令的输出信息保存到指定的日志文件"},"logname":{"n":"logname","p":"/logname","d":"用来显示用户名称"},"systool":{"n":"systool","p":"/systool","d":"显示基于总线、类和拓扑显示系统中设备的信息"},"ftpshut":{"n":"ftpshut","p":"/ftpshut","d":"在指定的时间关闭FTP服务器"},"lftpget":{"n":"lftpget","p":"/lftpget","d":"调用lftp指令下载指定的文件"},"lastlog":{"n":"lastlog","p":"/lastlog","d":"显示系统中所有用户最近一次登录信息"},"killall":{"n":"killall","p":"/killall","d":"使用进程的名称来杀死一组进程"},"tcpdump":{"n":"tcpdump","p":"/tcpdump","d":"一款sniffer工具,是Linux上的抓包工具,嗅探器。"},"builtin":{"n":"builtin","p":"/builtin","d":"执行shell内部命令"},"gpasswd":{"n":"gpasswd","p":"/gpasswd","d":"Linux下工作组文件的管理工具"},"apt-key":{"n":"apt-key","p":"/apt-key","d":"管理Debian Linux系统中的软件包密钥"},"apt-get":{"n":"apt-get","p":"/apt-get","d":"Debian Linux发行版中的APT软件包管理工具"},"bunzip2":{"n":"bunzip2","p":"/bunzip2","d":"创一个bz2文件压缩包"},"apropos":{"n":"apropos","p":"/apropos","d":"在 whatis 数据库中查找字符串"},"grpconv":{"n":"grpconv","p":"/grpconv","d":"用来开启群组的投影密码"},"install":{"n":"install","p":"/install","d":"安装或升级软件或备份数据"},"zipinfo":{"n":"zipinfo","p":"/zipinfo","d":"用来列出压缩文件信息"},"hwclock":{"n":"hwclock","p":"/hwclock","d":"显示与设定硬件时钟"},"hexdump":{"n":"hexdump","p":"/hexdump","d":"显示文件十六进制格式"},"history":{"n":"history","p":"/history","d":"用于显示历史命令"},"ifconfig":{"n":"ifconfig","p":"/ifconfig","d":"配置和显示Linux系统网卡的网络参数"},"diffstat":{"n":"diffstat","p":"/diffstat","d":"显示diff命令输出信息的柱状图"},"pvchange":{"n":"pvchange","p":"/pvchange","d":"修改物理卷属性"},"updatedb":{"n":"updatedb","p":"/updatedb","d":"创建或更新slocate命令所必需的数据库文件"},"arpwatch":{"n":"arpwatch","p":"/arpwatch","d":"监听网络上ARP的记录"},"pvcreate":{"n":"pvcreate","p":"/pvcreate","d":"将物理硬盘分区初始化为物理卷"},"basename":{"n":"basename","p":"/basename","d":"打印目录或者文件的基本名称"},"pvremove":{"n":"pvremove","p":"/pvremove","d":"删除一个存在的物理卷"},"dhcrelay":{"n":"dhcrelay","p":"/dhcrelay","d":"使用dhcrelay命令可以提供中继DHCP和BOOTP请求"},"shutdown":{"n":"shutdown","p":"/shutdown","d":"用来执行系统关机的命令"},"ldconfig":{"n":"ldconfig","p":"/ldconfig","d":"动态链接库管理命令"},"zipsplit":{"n":"zipsplit","p":"/zipsplit","d":"将较大的zip压缩包分割成各个较小的压缩包"},"mkinitrd":{"n":"mkinitrd","p":"/mkinitrd","d":"建立要载入ramdisk的映像文件"},"logwatch":{"n":"logwatch","p":"/logwatch","d":"可定制和可插入式的日志监视系统"},"pwunconv":{"n":"pwunconv","p":"/pwunconv","d":"用来关闭用户的投影密码"},"unexpand":{"n":"unexpand","p":"/unexpand","d":"将文件的空白字符转换为制表符"},"groupmod":{"n":"groupmod","p":"/groupmod","d":"更改群组识别码或名称"},"groupdel":{"n":"groupdel","p":"/groupdel","d":"用于删除指定的工作组"},"quotaoff":{"n":"quotaoff","p":"/quotaoff","d":"关闭Linux内核中指定文件系统的磁盘配额功能"},"nslookup":{"n":"nslookup","p":"/nslookup","d":"查询域名DNS信息的工具"},"lvcreate":{"n":"lvcreate","p":"/lvcreate","d":"用于创建LVM的逻辑卷"},"modprobe":{"n":"modprobe","p":"/modprobe","d":"自动处理可载入模块"},"groupadd":{"n":"groupadd","p":"/groupadd","d":"用于创建一个新的工作组"},"lvextend":{"n":"lvextend","p":"/lvextend","d":"扩展逻辑卷空间"},"readonly":{"n":"readonly","p":"/readonly","d":"定义只读shell变量或函数"},"lvreduce":{"n":"lvreduce","p":"/lvreduce","d":"收缩逻辑卷空间"},"lvremove":{"n":"lvremove","p":"/lvremove","d":"删除指定LVM逻辑卷"},"vgrename":{"n":"vgrename","p":"/vgrename","d":"使用vgrename命令可以重命名卷组的名称。"},"lvresize":{"n":"lvresize","p":"/lvresize","d":"调整逻辑卷空间大小"},"repquota":{"n":"repquota","p":"/repquota","d":"报表的格式输出磁盘空间限制的状态"},"chpasswd":{"n":"chpasswd","p":"/chpasswd","d":"批量更新用户口令的工具"},"xlsfonts":{"n":"xlsfonts","p":"/xlsfonts","d":"列出X Server使用的字体"},"aptitude":{"n":"aptitude","p":"/aptitude","d":"Debian Linux系统中软件包管理工具"},"ftpcount":{"n":"ftpcount","p":"/ftpcount","d":"显示目前已FTP登入的用户人数"},"vgremove":{"n":"vgremove","p":"/vgremove","d":"用于用户删除LVM卷组"},"exportfs":{"n":"exportfs","p":"/exportfs","d":"管理NFS共享文件系统列表"},"blockdev":{"n":"blockdev","p":"/blockdev","d":"从命令行调用区块设备控制程序"},"htdigest":{"n":"htdigest","p":"/htdigest","d":"Apache服务器内置工具"},"dpkg-deb":{"n":"dpkg-deb","p":"/dpkg-deb","d":"Debian Linux下的软件包管理工具"},"dos2unix":{"n":"dos2unix","p":"/dos2unix","d":"将DOS格式文本文件转换成Unix格式"},"mailstat":{"n":"mailstat","p":"/mailstat","d":"显示到达的邮件状态"},"vgreduce":{"n":"vgreduce","p":"/vgreduce","d":"从卷组中删除物理卷"},"hostname":{"n":"hostname","p":"/hostname","d":"显示和设置系统的主机名"},"rpm2cpio":{"n":"rpm2cpio","p":"/rpm2cpio","d":"将RPM软件包转换为cpio格式的文件"},"bmodinfo":{"n":"bmodinfo","p":"/bmodinfo","d":"显示给定模块的详细信息"},"rpmbuild":{"n":"rpmbuild","p":"/rpmbuild","d":"创建RPM的二进制软件包和源码软件包"},"vgextend":{"n":"vgextend","p":"/vgextend","d":"向卷组中添加物理卷"},"cdrecord":{"n":"cdrecord","p":"/cdrecord","d":"Linux系统下光盘刻录功能命令"},"rpmquery":{"n":"rpmquery","p":"/rpmquery","d":"从RPM数据库中查询软件包信息"},"vgcreate":{"n":"vgcreate","p":"/vgcreate","d":"用于创建LVM卷组"},"poweroff":{"n":"poweroff","p":"/poweroff","d":"关闭Linux系统,关闭记录会被写入到/var/log/wtmp日志文件中。"},"iptables":{"n":"iptables","p":"/iptables","d":"Linux上常用的防火墙软件"},"xlsatoms":{"n":"xlsatoms","p":"/xlsatoms","d":"列出X服务器内部所有定义的原子成分"},"runlevel":{"n":"runlevel","p":"/runlevel","d":"打印当前Linux系统的运行等级"},"htpasswd":{"n":"htpasswd","p":"/htpasswd","d":"apache服务器创建密码认证文件"},"protoize":{"n":"protoize","p":"/protoize","d":"GNU-C代码转换为ANSI-C代码"},"tempfile":{"n":"tempfile","p":"/tempfile","d":"shell中给临时文件命名"},"mii-tool":{"n":"mii-tool","p":"/mii-tool","d":"配置网络设备协商方式的工具"},"compress":{"n":"compress","p":"/compress","d":"使用Lempress-Ziv编码压缩数据文件"},"vgchange":{"n":"vgchange","p":"/vgchange","d":"修改卷组属性"},"semanage":{"n":"semanage","p":"/semanage","d":"默认目录的安全上下文查询与修改"},"sendmail":{"n":"sendmail","p":"/sendmail","d":"著名电子邮件服务器"},"newusers":{"n":"newusers","p":"/newusers","d":"用于批处理的方式一次创建多个命令"},"iptstate":{"n":"iptstate","p":"/iptstate","d":"显示iptables的工作状态"},"sesearch":{"n":"sesearch","p":"/sesearch","d":"查询SELinux策略的规则详情"},"dhclient":{"n":"dhclient","p":"/dhclient","d":"动态获取或释放IP地址"},"tracepath":{"n":"tracepath","p":"/tracepath","d":"追踪目的主机经过的路由信息"},"grpunconv":{"n":"grpunconv","p":"/grpunconv","d":"用来关闭群组的投影密码"},"tcpreplay":{"n":"tcpreplay","p":"/tcpreplay","d":"将PCAP包重新发送,用于性能或者功能测试"},"systemctl":{"n":"systemctl","p":"/systemctl","d":"系统服务管理器指令"},"chkconfig":{"n":"chkconfig","p":"/chkconfig","d":"检查或设置系统的各种服务"},"apachectl":{"n":"apachectl","p":"/apachectl","d":"Apache服务器前端控制工具"},"ip6tables":{"n":"ip6tables","p":"/ip6tables","d":"linux中防火墙软件"},"getsebool":{"n":"getsebool","p":"/getsebool","d":"查询SElinux策略内各项规则的布尔值"},"ssh-agent":{"n":"ssh-agent","p":"/ssh-agent","d":"ssh密钥管理器"},"logrotate":{"n":"logrotate","p":"/logrotate","d":"统日志进行轮转、压缩和删除"},"lvdisplay":{"n":"lvdisplay","p":"/lvdisplay","d":"显示逻辑卷属性"},"mysqldump":{"n":"mysqldump","p":"/mysqldump","d":"MySQL数据库中备份工具"},"smbpasswd":{"n":"smbpasswd","p":"/smbpasswd","d":"samba用户和密码管理工具"},"smbclient":{"n":"smbclient","p":"/smbclient","d":"交互方式访问samba服务器"},"showmount":{"n":"showmount","p":"/showmount","d":"显示NFS服务器加载的信息"},"mysqlshow":{"n":"mysqlshow","p":"/mysqlshow","d":"显示MySQL中数据库相关信息"},"clockdiff":{"n":"clockdiff","p":"/clockdiff","d":"检测两台linux主机的时间差"},"arptables":{"n":"arptables","p":"/arptables","d":"管理ARP包过滤规则表"},"setsebool":{"n":"setsebool","p":"/setsebool","d":"修改SElinux策略内各项规则的布尔值"},"badblocks":{"n":"badblocks","p":"/badblocks","d":"查找磁盘中损坏的区块"},"vgdisplay":{"n":"vgdisplay","p":"/vgdisplay","d":"显示LVM卷组的信息"},"rpmverify":{"n":"rpmverify","p":"/rpmverify","d":"验证已安装的RPM软件包的正确性"},"dmidecode":{"n":"dmidecode","p":"/dmidecode","d":"在Linux系统下获取有关硬件方面的信息"},"vgconvert":{"n":"vgconvert","p":"/vgconvert","d":"转换卷组元数据格式"},"dircolors":{"n":"dircolors","p":"/dircolors","d":"置ls命令在显示目录或文件时所用的色彩"},"pvdisplay":{"n":"pvdisplay","p":"/pvdisplay","d":"显示物理卷的属性"},"partprobe":{"n":"partprobe","p":"/partprobe","d":"不重启的情况下重读分区"},"quotacheck":{"n":"quotacheck","p":"/quotacheck","d":"检查磁盘的使用空间与限制"},"cupsenable":{"n":"cupsenable","p":"/cupsenable","d":"启动指定的打印机"},"usernetctl":{"n":"usernetctl","p":"/usernetctl","d":"被允许时操作指定的网络接口"},"ssh-keygen":{"n":"ssh-keygen","p":"/ssh-keygen","d":"为ssh生成、管理和转换认证密钥"},"xlsclients":{"n":"xlsclients","p":"/xlsclients","d":"列出显示器中的客户端应用程序"},"getenforce":{"n":"getenforce","p":"/getenforce","d":"显示当前SELinux的应用模式,是强制、执行还是停用。"},"domainname":{"n":"domainname","p":"/domainname","d":"显示和设置系统的NIS域名"},"get_module":{"n":"get_module","p":"/get_module","d":"获取Linux内核模块的详细信息"},"traceroute":{"n":"traceroute","p":"/traceroute","d":"显示数据包到主机间的路径"},"mkbootdisk":{"n":"mkbootdisk","p":"/mkbootdisk","d":"可建立目前系统的启动盘"},"dpkg-query":{"n":"dpkg-query","p":"/dpkg-query","d":"Debian Linux中软件包的查询工具"},"mysqladmin":{"n":"mysqladmin","p":"/mysqladmin","d":"MySQL服务器管理客户端"},"dpkg-split":{"n":"dpkg-split","p":"/dpkg-split","d":"Debian Linux中将大软件包分割成小包"},"restorecon":{"n":"restorecon","p":"/restorecon","d":"恢复文件的安全上下文"},"unprotoize":{"n":"unprotoize","p":"/unprotoize","d":"删除C语言源代码文件中的函数原型"},"uncompress":{"n":"uncompress","p":"/uncompress","d":"用来解压.Z文件"},"squidclient":{"n":"squidclient","p":"/squidclient","d":"squid服务器的客户端管理工具"},"cupsdisable":{"n":"cupsdisable","p":"/cupsdisable","d":"停止指定的打印机"},"consoletype":{"n":"consoletype","p":"/consoletype","d":"输出已连接的终端类型"},"mysqlimport":{"n":"mysqlimport","p":"/mysqlimport","d":"为MySQL服务器用命令行方式导入数据"},"inotifywait":{"n":"inotifywait","p":"/inotifywait","d":"异步文件系统监控机制"},"ssh-keyscan":{"n":"ssh-keyscan","p":"/ssh-keyscan","d":"收集主机公钥的使用工具"},"lsb_release":{"n":"lsb_release","p":"/lsb_release","d":"显示发行版本信息"},"sftp-server":{"n":"sftp-server","p":"/sftp-server","d":"sftp协议的服务器端程序"},"ssh-copy-id":{"n":"ssh-copy-id","p":"/ssh-copy-id","d":"把本地的ssh公钥文件安装到远程主机对应的账户下"},"dpkg-divert":{"n":"dpkg-divert","p":"/dpkg-divert","d":"Debian Linux中创建并管理一个转向列表"},"dpkg-trigger":{"n":"dpkg-trigger","p":"/dpkg-trigger","d":"Debian Linux下的软件包触发器"},"firewall-cmd":{"n":"firewall-cmd","p":"/firewall-cmd","d":"Linux上新用的防火墙软件,跟iptables差不多的工具。"},"convertquota":{"n":"convertquota","p":"/convertquota","d":"把老的配额文件转换为新的格式"},"apt-sortpkgs":{"n":"apt-sortpkgs","p":"/apt-sortpkgs","d":"Debian Linux下对软件包索引文件进行排序的工具"},"bzip2recover":{"n":"bzip2recover","p":"/bzip2recover","d":"恢复被破坏的.bz2压缩包中的文件"},"ypdomainname":{"n":"ypdomainname","p":"/ypdomainname","d":"显示主机的NIS的域名"},"kernelversion":{"n":"kernelversion","p":"/kernelversion","d":"打印当前内核的主版本号"},"nisdomainname":{"n":"nisdomainname","p":"/nisdomainname","d":"显示主机NIS的域名"},"iptables-save":{"n":"iptables-save","p":"/iptables-save","d":"备份iptables的表配置"},"speedtest-cli":{"n":"speedtest-cli","p":"/speedtest-cli","d":"命令行下测试服务器外网速度"},"dnsdomainname":{"n":"dnsdomainname","p":"/dnsdomainname","d":"定义DNS系统中FQDN名称的域名"},"ip6tables-save":{"n":"ip6tables-save","p":"/ip6tables-save","d":"保存ip6tables表配置"},"named-checkzone":{"n":"named-checkzone","p":"/named-checkzone","d":"使用named-checkzone命令可以进行区域文件有效性检查和转换,必须指定区域名称和区域文件名称。"},"iptables-restore":{"n":"iptables-restore","p":"/iptables-restore","d":"还原iptables表的配置"},"dpkg-reconfigure":{"n":"dpkg-reconfigure","p":"/dpkg-reconfigure","d":"Debian Linux中重新配制一个已经安装的软件包"},"dpkg-preconfigure":{"n":"dpkg-preconfigure","p":"/dpkg-preconfigure","d":"Debian Linux中软件包安装之前询问问题"},"ip6tables-restore":{"n":"ip6tables-restore","p":"/ip6tables-restore","d":"还原ip6tables表"},"dpkg-statoverride":{"n":"dpkg-statoverride","p":"/dpkg-statoverride","d":"Debian Linux中覆盖文件的所有权和模式"}} \ No newline at end of file From 7195e81215a9e70c39fed14ef41822d2ebb00a42 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Wed, 6 Sep 2017 19:40:56 +0800 Subject: [PATCH 0097/1284] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E4=BE=9D=E8=B5=96=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index b53d2ec305a..2a0c57a2f57 100644 --- a/package.json +++ b/package.json @@ -23,22 +23,23 @@ "devDependencies": { "autoprefixer": "^6.5.1", "autoprefixer-stylus": "^0.11.0", + "cheerio": "^0.22.0", "colors-cli": "^1.0.7", "ejs": "^2.5.2", + "gh-pages": "^0.12.0", "highlight.js": "^9.8.0", + "loading-cli": "^1.0.2", + "markdown-it": "^8.4.0", "marked": "^0.3.6", + "marked3": "^0.5.1", "ssr": "^1.1.1", "stylus": "^0.54.5", - "watch": "^1.0.1", - "cheerio": "^0.22.0", - "gh-pages": "^0.12.0", - "loading-cli": "^1.0.2", "superagent": "^3.0.0", "to-markdown": "^3.0.3", - "uglify-js": "^2.7.4" - }, - "dependencies": { + "uglify-js": "^2.7.4", + "watch": "^1.0.1" }, + "dependencies": {}, "bugs": { "url": "https://github.com/jaywcjlove/linux-command/issues" }, From b7443e5e4b0758eadcb91b968365dc4a3cfe3102 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Wed, 6 Sep 2017 19:41:45 +0800 Subject: [PATCH 0098/1284] released v1.0.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2a0c57a2f57..839fee3ab38 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "linux-command", - "version": "1.0.3", + "version": "1.0.4", "description": "Linux Command", "main": "dist/data.json", "scripts": { From 946071a8b3a25af34449f951f2a31b9ebed4b412 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Thu, 7 Sep 2017 10:12:40 +0800 Subject: [PATCH 0099/1284] Update sudo.md --- command/sudo.md | 369 +++++++++++++++++++++++++----------------------- 1 file changed, 195 insertions(+), 174 deletions(-) diff --git a/command/sudo.md b/command/sudo.md index 1072a28f01c..8ae1da5171e 100644 --- a/command/sudo.md +++ b/command/sudo.md @@ -1,174 +1,195 @@ -sudo -=== - -以其他身份来执行命令 - -## 补充说明 - -**sudo命令** 用来以其他身份来执行命令,预设的身份为root。在`/etc/sudoers`中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。 - -### 语法 - -``` -sudo(选项)(参数) -``` - -### 选项 - -``` --b:在后台执行指令; --h:显示帮助; --H:将HOME环境变量设为新身份的HOME环境变量; --k:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码;。 --l:列出目前用户可执行与无法执行的指令; --p:改变询问密码的提示符号; --s:执行指定的shell; --u<用户>:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份; --v:延长密码有效期限5分钟; --V :显示版本信息。 -``` - -### 参数 - -指令:需要运行的指令和对应的参数。 - -### 实例 - -配置sudo必须通过编辑`/etc/sudoers`文件,而且只有超级用户才可以修改它,还必须使用visudo编辑。之所以使用visudo有两个原因,一是它能够防止两个用户同时修改它;二是它也能进行有限的语法检查。所以,即使只有你一个超级用户,你也最好用visudo来检查一下语法。 - -visudo默认的是在vi里打开配置文件,用vi来修改文件。我们可以在编译时修改这个默认项。visudo不会擅自保存带有语法错误的配置文件,它会提示你出现的问题,并询问该如何处理,就像: - -``` ->>> sudoers file: syntax error, line 22 << -``` - -此时我们有三种选择:键入“e”是重新编辑,键入“x”是不保存退出,键入“Q”是退出并保存。如果真选择Q,那么sudo将不会再运行,直到错误被纠正。 - -现在,我们一起来看一下神秘的配置文件,学一下如何编写它。让我们从一个简单的例子开始:让用户Foobar可以通过sudo执行所有root可执行的命令。以root身份用visudo打开配置文件,可以看到类似下面几行: - -``` -# Runas alias specification -# User privilege specificationroot ALL=(ALL)ALL -``` - -我们一看就明白个差不多了,root有所有权限,只要仿照现有root的例子就行,我们在下面加一行(最好用tab作为空白): - -``` -foobar ALL=(ALL) ALL -``` - -保存退出后,切换到foobar用户,我们用它的身份执行命令: - -``` -[foobar@localhost ~]$ ls /root -ls: /root: 权限不够 - -[foobar@localhost ~]$ sudo ls /root -PassWord: -anaconda-ks.cfg Desktop install.log install.log.syslog -``` - -好了,我们限制一下foobar的权利,不让他为所欲为。比如我们只想让他像root那样使用ls和ifconfig,把那一行改为: - -``` -foobar localhost= /sbin/ifconfig, /bin/ls -``` - -再来执行命令: - -``` -[foobar@localhost ~]$ sudo head -5 /etc/shadow -Password: -Sorry, user foobar is not allowed to execute '/usr/bin/head -5 /etc/shadow' as root on localhost.localdomain. - -[foobar@localhost ~]$ sudo /sbin/ifconfigeth0 Linkencap:Ethernet HWaddr 00:14:85:EC:E9:9B... -``` - -现在让我们来看一下那三个ALL到底是什么意思。第一个ALL是指网络中的主机,我们后面把它改成了主机名,它指明foobar可以在此主机上执行后面的命令。第二个括号里的ALL是指目标用户,也就是以谁的身份去执行命令。最后一个ALL当然就是指命令名了。例如,我们想让foobar用户在linux主机上以jimmy或rene的身份执行kill命令,这样编写配置文件: - -``` -foobar linux=(jimmy,rene) /bin/kill -``` - -但这还有个问题,foobar到底以jimmy还是rene的身份执行?这时我们应该想到了`sudo -u`了,它正是用在这种时候。 foobar可以使用`sudo -u jimmy kill PID`或者`sudo -u rene kill PID`,但这样挺麻烦,其实我们可以不必每次加`-u`,把rene或jimmy设为默认的目标用户即可。再在上面加一行: - -``` -Defaults:foobar runas_default=rene -``` - -Defaults后面如果有冒号,是对后面用户的默认,如果没有,则是对所有用户的默认。就像配置文件中自带的一行: - -``` -Defaults env_reset -``` - -另一个问题是,很多时候,我们本来就登录了,每次使用sudo还要输入密码就显得烦琐了。我们可不可以不再输入密码呢?当然可以,我们这样修改配置文件: - -``` -foobar localhost=NOPASSWD: /bin/cat, /bin/ls -``` - -再来sudo一下: - -``` -[foobar@localhost ~]$ sudo ls /rootanaconda-ks.cfg Desktop install.log -install.log.syslog -``` - -当然,你也可以说“某些命令用户foobar不可以运行”,通过使用!操作符,但这不是一个好主意。因为,用!操作符来从ALL中“剔出”一些命令一般是没什么效果的,一个用户完全可以把那个命令拷贝到别的地方,换一个名字后再来运行。 - - **日志与安全** - -sudo为安全考虑得很周到,不仅可以记录日志,还能在有必要时向系统管理员报告。但是,sudo的日志功能不是自动的,必须由管理员开启。这样来做: - -``` -touch /var/log/sudo -vi /etc/syslog.conf -``` - -在syslog.conf最后面加一行(必须用tab分割开)并保存: - -``` -local2.debug /var/log/sudo -``` - -重启日志守候进程, - -``` -ps aux grep syslogd -``` - -把得到的syslogd进程的PID(输出的第二列是PID)填入下面: - -``` -kill –HUP PID -``` - -这样,sudo就可以写日志了: - -``` -[foobar@localhost ~]$ sudo ls /rootanaconda-ks.cfg -Desktop install.log -install.log.syslog -$cat /var/log/sudoJul 28 22:52:54 localhost sudo: foobar : -TTY=pts/1 ; pwd=/home/foobar ; USER=root ; command=/bin/ls /root -``` - -不过,有一个小小的“缺陷”,sudo记录日志并不是很忠实: - -``` -[foobar@localhost ~]$ sudo cat /etc/shadow > /dev/null -cat /var/log/sudo...Jul 28 23:10:24 localhost sudo: foobar : TTY=pts/1 ; -PWD=/home/foobar ; USER=root ; COMMAND=/bin/cat /etc/shadow -``` - -重定向没有被记录在案!为什么?因为在命令运行之前,shell把重定向的工作做完了,sudo根本就没看到重定向。这也有个好处,下面的手段不会得逞: - -``` -[foobar@localhost ~]$ sudo ls /root > /etc/shadowbash: /etc/shadow: 权限不够 -``` - -sudo 有自己的方式来保护安全。以root的身份执行`sudo-V`,查看一下sudo的设置。因为考虑到安全问题,一部分环境变量并没有传递给sudo后面的命令,或者被检查后再传递的,比如:PATH,HOME,SHELL等。当然,你也可以通过sudoers来配置这些环境变量。 - - - \ No newline at end of file +sudo +=== + +以其他身份来执行命令 + +## 补充说明 + +**sudo命令** 用来以其他身份来执行命令,预设的身份为root。在`/etc/sudoers`中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。 + +### 语法 + +``` +sudo(选项)(参数) +``` + +### 选项 + +``` +-b:在后台执行指令; +-h:显示帮助; +-H:将HOME环境变量设为新身份的HOME环境变量; +-k:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码;。 +-l:列出目前用户可执行与无法执行的指令; +-p:改变询问密码的提示符号; +-s:执行指定的shell; +-u<用户>:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份; +-v:延长密码有效期限5分钟; +-V :显示版本信息。 +``` + +### 参数 + +指令:需要运行的指令和对应的参数。 + +### 实例 + +``` +$ sudo su - +# env | grep -E '(HOME|SHELL|USER|LOGNAME|^PATH|PWD|TEST_ETC|TEST_ZSH|TEST_PRO|TEST_BASH|TEST_HOME|SUDO)' +``` + +这个命令相当于使用root超级用户重新登录一次shell,只不过密码是使用的当前用户的密码。而且重要是,该命令会 **重新加载/etc/profile文件以及/etc/bashrc文件等系统配置文件,并且还会重新加载root用户的$SHELL环境变量所对应的配置文件** ,比如:root超级用户的$SHELL是/bin/bash,则会加载/root/.bashrc等配置。如果是/bin/zsh,则会加载/root/.zshrc等配置,执行后是完全的root环境。 + +``` +$ sudo -i +# env | grep -E '(HOME|SHELL|USER|LOGNAME|^PATH|PWD|TEST_ETC|TEST_ZSH|TEST_PRO|TEST_BASH|TEST_HOME|SUDO)' +``` + +这个命令基本与 `sudo su -` 相同,执行后也是root超级用户的环境,只不过是多了一些当前用户的信息。 + +``` +$ sudo -s +# env|grep -E '(HOME|SHELL|USER|LOGNAME|^PATH|PWD|TEST_ETC|TEST_ZSH|TEST_PRO|TEST_BASH|TEST_HOME|SUDO)' --color +``` + +这个命令相当于 **以当前用户的$SHELL开启了一个root超级用户的no-login的shell,不会加载/etc/profile等系统配置** 。所以/etc/profile文件中定义的TEST_ETC环境变量就看不到了,但是会**加载root用户对应的配置文件**,比如root用户的$SHELL是/bin/zsh,那么会加载/root/.zshrc配置文件,执行完后,不会切换当前用户的目录。 + +配置sudo必须通过编辑`/etc/sudoers`文件,而且只有超级用户才可以修改它,还必须使用visudo编辑。之所以使用visudo有两个原因,一是它能够防止两个用户同时修改它;二是它也能进行有限的语法检查。所以,即使只有你一个超级用户,你也最好用visudo来检查一下语法。 + +visudo默认的是在vi里打开配置文件,用vi来修改文件。我们可以在编译时修改这个默认项。visudo不会擅自保存带有语法错误的配置文件,它会提示你出现的问题,并询问该如何处理,就像: + +``` +>>> sudoers file: syntax error, line 22 << +``` + +此时我们有三种选择:键入“e”是重新编辑,键入“x”是不保存退出,键入“Q”是退出并保存。如果真选择Q,那么sudo将不会再运行,直到错误被纠正。 + +现在,我们一起来看一下神秘的配置文件,学一下如何编写它。让我们从一个简单的例子开始:让用户Foobar可以通过sudo执行所有root可执行的命令。以root身份用visudo打开配置文件,可以看到类似下面几行: + +``` +# Runas alias specification +# User privilege specificationroot ALL=(ALL)ALL +``` + +我们一看就明白个差不多了,root有所有权限,只要仿照现有root的例子就行,我们在下面加一行(最好用tab作为空白): + +``` +foobar ALL=(ALL) ALL +``` + +保存退出后,切换到foobar用户,我们用它的身份执行命令: + +``` +[foobar@localhost ~]$ ls /root +ls: /root: 权限不够 + +[foobar@localhost ~]$ sudo ls /root +PassWord: +anaconda-ks.cfg Desktop install.log install.log.syslog +``` + +好了,我们限制一下foobar的权利,不让他为所欲为。比如我们只想让他像root那样使用ls和ifconfig,把那一行改为: + +``` +foobar localhost= /sbin/ifconfig, /bin/ls +``` + +再来执行命令: + +``` +[foobar@localhost ~]$ sudo head -5 /etc/shadow +Password: +Sorry, user foobar is not allowed to execute '/usr/bin/head -5 /etc/shadow' as root on localhost.localdomain. + +[foobar@localhost ~]$ sudo /sbin/ifconfigeth0 Linkencap:Ethernet HWaddr 00:14:85:EC:E9:9B... +``` + +现在让我们来看一下那三个ALL到底是什么意思。第一个ALL是指网络中的主机,我们后面把它改成了主机名,它指明foobar可以在此主机上执行后面的命令。第二个括号里的ALL是指目标用户,也就是以谁的身份去执行命令。最后一个ALL当然就是指命令名了。例如,我们想让foobar用户在linux主机上以jimmy或rene的身份执行kill命令,这样编写配置文件: + +``` +foobar linux=(jimmy,rene) /bin/kill +``` + +但这还有个问题,foobar到底以jimmy还是rene的身份执行?这时我们应该想到了`sudo -u`了,它正是用在这种时候。 foobar可以使用`sudo -u jimmy kill PID`或者`sudo -u rene kill PID`,但这样挺麻烦,其实我们可以不必每次加`-u`,把rene或jimmy设为默认的目标用户即可。再在上面加一行: + +``` +Defaults:foobar runas_default=rene +``` + +Defaults后面如果有冒号,是对后面用户的默认,如果没有,则是对所有用户的默认。就像配置文件中自带的一行: + +``` +Defaults env_reset +``` + +另一个问题是,很多时候,我们本来就登录了,每次使用sudo还要输入密码就显得烦琐了。我们可不可以不再输入密码呢?当然可以,我们这样修改配置文件: + +``` +foobar localhost=NOPASSWD: /bin/cat, /bin/ls +``` + +再来sudo一下: + +``` +[foobar@localhost ~]$ sudo ls /rootanaconda-ks.cfg Desktop install.log +install.log.syslog +``` + +当然,你也可以说“某些命令用户foobar不可以运行”,通过使用!操作符,但这不是一个好主意。因为,用!操作符来从ALL中“剔出”一些命令一般是没什么效果的,一个用户完全可以把那个命令拷贝到别的地方,换一个名字后再来运行。 + + **日志与安全** + +sudo为安全考虑得很周到,不仅可以记录日志,还能在有必要时向系统管理员报告。但是,sudo的日志功能不是自动的,必须由管理员开启。这样来做: + +``` +touch /var/log/sudo +vi /etc/syslog.conf +``` + +在syslog.conf最后面加一行(必须用tab分割开)并保存: + +``` +local2.debug /var/log/sudo +``` + +重启日志守候进程, + +``` +ps aux grep syslogd +``` + +把得到的syslogd进程的PID(输出的第二列是PID)填入下面: + +``` +kill –HUP PID +``` + +这样,sudo就可以写日志了: + +``` +[foobar@localhost ~]$ sudo ls /rootanaconda-ks.cfg +Desktop install.log +install.log.syslog +$cat /var/log/sudoJul 28 22:52:54 localhost sudo: foobar : +TTY=pts/1 ; pwd=/home/foobar ; USER=root ; command=/bin/ls /root +``` + +不过,有一个小小的“缺陷”,sudo记录日志并不是很忠实: + +``` +[foobar@localhost ~]$ sudo cat /etc/shadow > /dev/null +cat /var/log/sudo...Jul 28 23:10:24 localhost sudo: foobar : TTY=pts/1 ; +PWD=/home/foobar ; USER=root ; COMMAND=/bin/cat /etc/shadow +``` + +重定向没有被记录在案!为什么?因为在命令运行之前,shell把重定向的工作做完了,sudo根本就没看到重定向。这也有个好处,下面的手段不会得逞: + +``` +[foobar@localhost ~]$ sudo ls /root > /etc/shadowbash: /etc/shadow: 权限不够 +``` + +sudo 有自己的方式来保护安全。以root的身份执行`sudo-V`,查看一下sudo的设置。因为考虑到安全问题,一部分环境变量并没有传递给sudo后面的命令,或者被检查后再传递的,比如:PATH,HOME,SHELL等。当然,你也可以通过sudoers来配置这些环境变量。 + + + From 4f5369d3fd30634abceb655680a251b426799f0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Tue, 19 Sep 2017 22:08:11 -0500 Subject: [PATCH 0100/1284] Update ip.md --- command/ip.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/command/ip.md b/command/ip.md index 740a9a3e03a..1ea60876d95 100644 --- a/command/ip.md +++ b/command/ip.md @@ -36,8 +36,24 @@ help:显示网络对象支持的操作命令的帮助信息。 ### 实例 ```bash +ip link show # 显示网络接口信息 +ip link set eth0 upi # 开启网卡 +ip link set eth0 down # 关闭网卡 +ip link set eth0 promisc on # 开启网卡的混合模式 +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 route show # 显示系统路由 ip route add default via 192.168.1.254 # 设置系统默认路由 +ip route list # 查看路由信息 +ip route add 192.168.4.0/24 via 192.168.0.254 dev eth0 # 设置192.168.4.0网段的网关为192.168.0.254,数据走eth0接口 +ip route add default via 192.168.0.254 dev eth0 # 设置默认网关为192.168.0.254 +ip route del 192.168.4.0/24 # 删除192.168.4.0网段的网关 +ip route del default # 删除默认路由 ip route delete 192.168.1.0/24 dev eth0 # 删除路由 ``` From 91d4b0b5b6934dd0f3068be7a0b0f06321ac5267 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Wed, 20 Sep 2017 05:26:29 -0500 Subject: [PATCH 0101/1284] Update nethogs.md --- command/nethogs.md | 267 +++++++++++++++++++++++++-------------------- 1 file changed, 148 insertions(+), 119 deletions(-) diff --git a/command/nethogs.md b/command/nethogs.md index 832ddc04ae9..f66c5f91f65 100644 --- a/command/nethogs.md +++ b/command/nethogs.md @@ -1,119 +1,148 @@ -nethogs -=== - -终端下的网络流量监控工具 - -## 补充说明 - -有很多适用于Linux系统的开源网络监视工具。比如说,你可以用命令iftop来检查带宽使用情况。netstat用来查看接口统计报告,还有top监控系统当前运行进程。但是如果你想要找一个能够按进程实时统计网络带宽利用率的工具,那么NetHogs值得一看。 - - **NetHogs** 是一个开源的命令行工具(类似于Linux的top命令),用来按进程或程序实时统计网络带宽使用率。 - -来自NetHogs项目网站: - -> NetHogs是一个小型的net top工具,不像大多数工具那样拖慢每个协议或者是每个子网的速度而是按照进程进行带宽分组。NetHogs不需要依赖载入某个特殊的内核模块。如果发生了网络阻塞你可以启动NetHogs立即看到哪个PID造成的这种状况。这样就很容易找出哪个程序跑飞了然后突然占用你的带宽。 - -本文为你介绍如何在Unix/Linux操作系统下如何安装和使用NetHogs按进程监控网络带宽使用率。 - -### 在RHEL、CentOS和Fedora下安装NetHogs - -要安装NetHogs,你必须要启用你所用Linux下的EPEL源。然后运行下面的yum命令下载安装NetHogs包。 - -``` -# yum install nethogs - -``` - -### 在Ubuntu、Linux mint和Debian下安装NetHogs - -键入apt-get命令安装NetHogs包: - -``` -$ sudo apt-get install nethogs - -``` - -### NetHogs用法 - -在基于RedHat系统下键入如下命令启动NetHogs工具。 - -``` -# nethogs - -``` - -在Debian/Ubuntu/Linux Mint下要执行NetHogs你必须拥有root权限: - -``` -$ sudo nethogs - -``` - -!nethogs - -Ubuntu 12.10 下的NetHogs预览 - -正如上图所示,send列和received列显示的是按照每个进程的流量统计。总的收发数据带宽在最下方,而且可以用交互命令控制排序,下面将要讨论这些交互命令。 - -### NetHogs 命令行参数 - -以下就是NetHogs命令行的参数,用-d来添加刷新频率参数,device name 用来检测给定的某个或者某些设备的带宽(默认是eth0)。例如:设置5秒钟的刷新频率,键入如下命令即可: - -``` -# nethogs -d 5 - -``` - -``` -$ sudo nethogs -d 5 - -``` - -如果只用来监视设备(eth0)的网络带宽可以使用如下命令: - -``` -# nethogs eth0 - -``` - -``` -$ sudo nethogs eth0 - -``` - -如果要同时监视eth0和eth1接口,使用以下命令即可: - -``` -# nethogs eth0 eth1 - -``` - -``` -$ sudo nethogs eth0 eth1 - -``` - -其他参数和用法 - -``` --d : 刷新间隔 --h : 帮助 --p : promiscious 模式 --t : trace模式 --V : 版本 - -``` - -### 交互命令 - -以下是NetHogs的一些交互命令(键盘快捷键) - -* m : 修改单位 -* r : 按流量排序 -* s : 按发送流量排序 -* q : 退出命令提示符 - -关于NetHogs命令行工具的完整参数列表,可以参考NetHogs的手册,使用方法是在终端里输入`man nethogs`或者`sudo man nethogs`,更多信息请参考NetHogs项目主页。 - - - \ No newline at end of file +nethogs +=== + +终端下的网络流量监控工具 + +## 补充说明 + +有很多适用于Linux系统的开源网络监视工具。比如说,你可以用命令iftop来检查带宽使用情况。netstat用来查看接口统计报告,还有top监控系统当前运行进程。但是如果你想要找一个能够按进程实时统计网络带宽利用率的工具,那么NetHogs值得一看。 + + **NetHogs** 是一个开源的命令行工具(类似于Linux的top命令),用来按进程或程序实时统计网络带宽使用率。 + +来自NetHogs项目网站: + +> NetHogs是一个小型的net top工具,不像大多数工具那样拖慢每个协议或者是每个子网的速度而是按照进程进行带宽分组。NetHogs不需要依赖载入某个特殊的内核模块。如果发生了网络阻塞你可以启动NetHogs立即看到哪个PID造成的这种状况。这样就很容易找出哪个程序跑飞了然后突然占用你的带宽。 + +本文为你介绍如何在Unix/Linux操作系统下如何安装和使用NetHogs按进程监控网络带宽使用率。 + + +### 语法 + +``` +nethogs(选项)(参数) +``` +### 选项 + +```bash +usage: nethogs [-V] [-h] [-b] [-d seconds] [-v mode] [-c count] [-t] [-p] [-s] [device [device [device ...]]] + -V : 打印版本。 + -h : 打印此帮助。 + -b : bughunt模式 - 暗示tracemode。 + -d : 延迟更新刷新率(以秒为单位)。 默认值为1。 + -v : 视图模式(0 = KB / s,1 =总KB,2 =总B,3 =总MB)。 默认值为0。 + -c : 更新次数。 默认为0(无限制)。 + -t : tracemode. + -p : 煽动混乱模式(不推荐)。 + -s : 按发送列排序输出。 + -a : 监控所有设备,甚至环回/停止。 + device : 要监控的设备。 默认是所有接口启动和运行,不包括环回 + +当nethogs运行时,按: +  q:退出 +  s:按SENT流量排序 +  r:按RECEIVE流量排序 +  m:在总(KB,B,MB)和KB / s模式之间切换 +``` + +其他参数和用法 + +``` +-d : 刷新间隔 +-h : 帮助 +-p : promiscious 模式 +-t : trace模式 +-V : 版本 + +``` + +**交互命令** + +以下是NetHogs的一些交互命令(键盘快捷键) + +* m : 修改单位 +* r : 按流量排序 +* s : 按发送流量排序 +* q : 退出命令提示符 + +### 安装 + +**在RHEL、CentOS和Fedora下安装NetHogs** + +要安装NetHogs,你必须要启用你所用Linux下的EPEL源。然后运行下面的yum命令下载安装NetHogs包。 + +``` +# yum install nethogs +``` + +**在Ubuntu、Linux mint和Debian下安装NetHogs** + +键入apt-get命令安装NetHogs包: + +``` +$ sudo apt-get install nethogs +``` + +### NetHogs用法 + +在基于RedHat系统下键入如下命令启动NetHogs工具。 + +``` +# nethogs + +``` + +在Debian/Ubuntu/Linux Mint下要执行NetHogs你必须拥有root权限: + +``` +$ sudo nethogs + +``` + +!nethogs + +Ubuntu 12.10 下的NetHogs预览 + +正如上图所示,send列和received列显示的是按照每个进程的流量统计。总的收发数据带宽在最下方,而且可以用交互命令控制排序,下面将要讨论这些交互命令。 + +### NetHogs 命令行参数 + +以下就是NetHogs命令行的参数,用-d来添加刷新频率参数,device name 用来检测给定的某个或者某些设备的带宽(默认是eth0)。例如:设置5秒钟的刷新频率,键入如下命令即可: + +``` +# nethogs -d 5 + +``` + +``` +$ sudo nethogs -d 5 + +``` + +如果只用来监视设备(eth0)的网络带宽可以使用如下命令: + +``` +# nethogs eth0 + +``` + +``` +$ sudo nethogs eth0 + +``` + +如果要同时监视eth0和eth1接口,使用以下命令即可: + +``` +# nethogs eth0 eth1 + +``` + +``` +$ sudo nethogs eth0 eth1 + +``` + +关于NetHogs命令行工具的完整参数列表,可以参考NetHogs的手册,使用方法是在终端里输入`man nethogs`或者`sudo man nethogs`,更多信息请参考NetHogs项目主页。 + + + From 4d59c90171cde223133e377e8ecb1ca52b05db80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Wed, 20 Sep 2017 05:27:20 -0500 Subject: [PATCH 0102/1284] Update nethogs.md --- command/nethogs.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/command/nethogs.md b/command/nethogs.md index f66c5f91f65..62d5b91a263 100644 --- a/command/nethogs.md +++ b/command/nethogs.md @@ -25,23 +25,23 @@ nethogs(选项)(参数) ```bash usage: nethogs [-V] [-h] [-b] [-d seconds] [-v mode] [-c count] [-t] [-p] [-s] [device [device [device ...]]] - -V : 打印版本。 - -h : 打印此帮助。 - -b : bughunt模式 - 暗示tracemode。 - -d : 延迟更新刷新率(以秒为单位)。 默认值为1。 - -v : 视图模式(0 = KB / s,1 =总KB,2 =总B,3 =总MB)。 默认值为0。 - -c : 更新次数。 默认为0(无限制)。 - -t : tracemode. - -p : 煽动混乱模式(不推荐)。 - -s : 按发送列排序输出。 - -a : 监控所有设备,甚至环回/停止。 - device : 要监控的设备。 默认是所有接口启动和运行,不包括环回 + -V : 打印版本。 + -h : 打印此帮助。 + -b : bughunt模式 - 暗示tracemode。 + -d : 延迟更新刷新率(以秒为单位)。 默认值为1。 + -v : 视图模式(0 = KB / s,1 =总KB,2 =总B,3 =总MB)。 默认值为0。 + -c : 更新次数。 默认为0(无限制)。 + -t : tracemode. + -p : 煽动混乱模式(不推荐)。 + -s : 按发送列排序输出。 + -a : 监控所有设备,甚至环回/停止。 + device : 要监控的设备。 默认是所有接口启动和运行,不包括环回 当nethogs运行时,按: -  q:退出 -  s:按SENT流量排序 -  r:按RECEIVE流量排序 -  m:在总(KB,B,MB)和KB / s模式之间切换 + q:退出 + s:按SENT流量排序 + r:按RECEIVE流量排序 + m:在总(KB,B,MB)和KB / s模式之间切换 ``` 其他参数和用法 From a169c909b560ef092759ffdddee051a2298a643d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Wed, 20 Sep 2017 05:27:41 -0500 Subject: [PATCH 0103/1284] Update nethogs.md --- command/nethogs.md | 1 - 1 file changed, 1 deletion(-) diff --git a/command/nethogs.md b/command/nethogs.md index 62d5b91a263..9f451d725bf 100644 --- a/command/nethogs.md +++ b/command/nethogs.md @@ -52,7 +52,6 @@ usage: nethogs [-V] [-h] [-b] [-d seconds] [-v mode] [-c count] [-t] [-p] [-s] [ -p : promiscious 模式 -t : trace模式 -V : 版本 - ``` **交互命令** From 19933f51d4e8533d273cfd8138578c3474f3165d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Wed, 20 Sep 2017 05:38:48 -0500 Subject: [PATCH 0104/1284] Create iftop.md --- command/iftop.md | 77 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 command/iftop.md diff --git a/command/iftop.md b/command/iftop.md new file mode 100644 index 00000000000..d1fb935a53c --- /dev/null +++ b/command/iftop.md @@ -0,0 +1,77 @@ +iftop +=== + +一款实时流量监控工具 + +## 补充说明 + +**iftop命令** 是一款实时流量监控工具,监控TCP/IP连接等,缺点就是无报表功能。必须以root身份才能运行。 + +### 语法 + +``` +iftop(选项) +``` + +### 选项 + +``` +iftop: display bandwidth usage on an interface by host + +Synopsis: 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 + -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 + + 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 + + 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 + +``` + +### 界面说明 + +> 第一行为带宽,这里为1Mbit,不是字节哦. +> 连接列表,最后三列分别是2秒,10秒和40秒的平均流量 +> `=>` 代表发送 +> `<=` 代表接收 +> 最后三行表示发送,接收和全部的流量, +> 第二列为你运行iftop到目前流量,第三列为高峰值,第四列为平均值。 + +### 实例 + + + +```bash +iftop # 默认是监控第一块网卡的流量 +iftop -i eth1 # 监控eth1 +iftop -n # 直接显示IP, 不进行DNS反解析 +iftop -N # 直接显示连接埠编号, 不显示服务名称 +iftop -F 192.168.1.0/24 or 192.168.1.0/255.255.255.0 # 显示某个网段进出封包流量 +``` + + + From 2269dc7b621392fcd1364cd0fb47acd2863ffaec Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Sun, 24 Sep 2017 00:45:57 +0800 Subject: [PATCH 0105/1284] Modify punctuation. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2839013dac6..79e1a234b66 100644 --- a/README.md +++ b/README.md @@ -162,7 +162,7 @@ console.log("---->",comm.ls) ### 游戏玩家发行版 -*面向游戏玩家的八款最佳 Linux 发行版,本文由开源中国整理[原文在这里](https://my.oschina.net/editorial-story/blog/888795)* +*面向游戏玩家的八款最佳 Linux 发行版,本文由开源中国整理,[原文在这里](https://my.oschina.net/editorial-story/blog/888795)*。 - [SteamOS](http://store.steampowered.com/livingroom/SteamOS/) [官方文档](http://store.steampowered.com/steamos/buildyourown) [镜像下载](http://repo.steampowered.com/download/) - [Ubuntu GamePack](https://ualinux.com/en/ubuntu-gamepack) [下载地址](https://ualinux.com/en/ubuntu-gamepack) From 0d5485bc2794f5ec9f145467a30f1d3847681cfe Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Wed, 11 Oct 2017 13:11:33 +0800 Subject: [PATCH 0106/1284] =?UTF-8?q?=E6=B7=BB=E5=8A=A0Adobe=E8=BD=AF?= =?UTF-8?q?=E4=BB=B6=E7=9A=84=E6=9C=80=E4=BD=B3=E6=9B=BFLinux=E4=BB=A3?= =?UTF-8?q?=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 79e1a234b66..411069fa375 100644 --- a/README.md +++ b/README.md @@ -141,6 +141,17 @@ console.log("---->",comm.ls) - [你要了解的11款面向Linux系统的一流备份实用工具](http://os.51cto.com/art/201603/508027.htm) - [16个很有用的在线工具](http://www.simlinux.com/archives/264.html) +#### Adobe软件的最佳替代品 + +- [Evince (Adobe Acrobat Reader)](https://wiki.gnome.org/Apps/Evince) 一个“支持多种文档格式的文档查看器”,可以查看PDF,还支持各种漫画书格式(cbr、cbz、cb7 和 cbt) +- [Pixlr (Adobe Photoshop)](https://pixlr.com/) 一个强大的图像编辑工具 +- [Inkscape (Adobe Illustrator)](https://inkscape.org/zh/) 一个专业的矢量图形编辑器 +- [Pinegrow Web Editor (Adobe Dreamweaver)](https://pinegrow.com/) 一个可视化编辑制作 HTML 网站 +- [Scribus (Adobe InDesign)](https://www.scribus.net/) 一个开源电子杂志制作软件 +- [Webflow (Adobe Muse)](https://webflow.com/) 一款可以帮助用户不用编码就可以快速创建网站的谷歌浏览器插件。 +- [Tupi (Adobe Animate)](http://www.maefloresta.com/portal/) 一款可以创建HTML5动画的工具。 +- [Black Magic Fusion (Adobe After Effects)](https://www.blackmagicdesign.com) 一款先进的合成软件,它被广泛应用于视觉特效、广电影视设计、动态图形设计以及3D动画设计等领域。 + ### 中国开源镜像站点 - 阿里云开源镜像站:http://mirrors.aliyun.com/ From 70fb4c2f41663b076ae2b4a67a29b12bd7355222 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Wed, 11 Oct 2017 13:18:41 +0800 Subject: [PATCH 0107/1284] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 411069fa375..01b88a86aea 100644 --- a/README.md +++ b/README.md @@ -143,6 +143,8 @@ console.log("---->",comm.ls) #### Adobe软件的最佳替代品 +正在寻找 Adobe 的替代品的 Linux 用户吗? [原文在这里](https://linux.cn/article-8928-1.html) + - [Evince (Adobe Acrobat Reader)](https://wiki.gnome.org/Apps/Evince) 一个“支持多种文档格式的文档查看器”,可以查看PDF,还支持各种漫画书格式(cbr、cbz、cb7 和 cbt) - [Pixlr (Adobe Photoshop)](https://pixlr.com/) 一个强大的图像编辑工具 - [Inkscape (Adobe Illustrator)](https://inkscape.org/zh/) 一个专业的矢量图形编辑器 From 086ad9270f0479580cec6c6c3154d367d0368a7a Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Wed, 11 Oct 2017 14:32:30 +0800 Subject: [PATCH 0108/1284] Update README.md --- README.md | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 01b88a86aea..bb728ac6039 100644 --- a/README.md +++ b/README.md @@ -140,19 +140,15 @@ console.log("---->",comm.ls) - [提高 Linux 开发效率的 5 个工具](http://www.codeceo.com/article/5-linux-productivity-tools.html) - [你要了解的11款面向Linux系统的一流备份实用工具](http://os.51cto.com/art/201603/508027.htm) - [16个很有用的在线工具](http://www.simlinux.com/archives/264.html) - -#### Adobe软件的最佳替代品 - -正在寻找 Adobe 的替代品的 Linux 用户吗? [原文在这里](https://linux.cn/article-8928-1.html) - -- [Evince (Adobe Acrobat Reader)](https://wiki.gnome.org/Apps/Evince) 一个“支持多种文档格式的文档查看器”,可以查看PDF,还支持各种漫画书格式(cbr、cbz、cb7 和 cbt) -- [Pixlr (Adobe Photoshop)](https://pixlr.com/) 一个强大的图像编辑工具 -- [Inkscape (Adobe Illustrator)](https://inkscape.org/zh/) 一个专业的矢量图形编辑器 -- [Pinegrow Web Editor (Adobe Dreamweaver)](https://pinegrow.com/) 一个可视化编辑制作 HTML 网站 -- [Scribus (Adobe InDesign)](https://www.scribus.net/) 一个开源电子杂志制作软件 -- [Webflow (Adobe Muse)](https://webflow.com/) 一款可以帮助用户不用编码就可以快速创建网站的谷歌浏览器插件。 -- [Tupi (Adobe Animate)](http://www.maefloresta.com/portal/) 一款可以创建HTML5动画的工具。 -- [Black Magic Fusion (Adobe After Effects)](https://www.blackmagicdesign.com) 一款先进的合成软件,它被广泛应用于视觉特效、广电影视设计、动态图形设计以及3D动画设计等领域。 +- Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1.html) + - [Evince (Adobe Acrobat Reader)](https://wiki.gnome.org/Apps/Evince) 一个“支持多种文档格式的文档查看器”,可以查看PDF,还支持各种漫画书格式 + - [Pixlr (Adobe Photoshop)](https://pixlr.com/) 一个强大的图像编辑工具 + - [Inkscape (Adobe Illustrator)](https://inkscape.org/zh/) 一个专业的矢量图形编辑器 + - [Pinegrow Web Editor (Adobe Dreamweaver)](https://pinegrow.com/) 一个可视化编辑制作 HTML 网站 + - [Scribus (Adobe InDesign)](https://www.scribus.net/) 一个开源电子杂志制作软件 + - [Webflow (Adobe Muse)](https://webflow.com/) 一款可以帮助用户不用编码就可以快速创建网站的谷歌浏览器插件。 + - [Tupi (Adobe Animate)](http://www.maefloresta.com/portal/) 一款可以创建HTML5动画的工具。 + - [Black Magic Fusion (Adobe After Effects)](https://www.blackmagicdesign.com) 一款先进的合成软件,广泛应用于视觉特效、广电影视设计以及3D动画设计等领域。 ### 中国开源镜像站点 From 8ddd2d724c5253dc6c3d43e71c8d75228cc04541 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Fri, 13 Oct 2017 12:05:45 +0800 Subject: [PATCH 0109/1284] Update comm. #30 --- command/comm.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/command/comm.md b/command/comm.md index 8d4edc17eb4..465be1dceb1 100644 --- a/command/comm.md +++ b/command/comm.md @@ -1,6 +1,6 @@ comm === - + 两个文件之间的比较 ## 补充说明 @@ -23,6 +23,9 @@ comm(选项)(参数) -1:不显示在第一个文件出现的内容; -2:不显示在第二个文件中出现的内容; -3:不显示同时在两个文件中都出现的内容。 + +--help 在线帮助。 +--version 显示版本信息。 ``` ### 参数 From af0aead52f4164614cb90370ea4c7e95e19a5d79 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Fri, 13 Oct 2017 12:51:38 +0800 Subject: [PATCH 0110/1284] =?UTF-8?q?=E4=BF=AE=E6=94=B9comm=E5=AE=9E?= =?UTF-8?q?=E4=BE=8B=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- command/comm.md | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/command/comm.md b/command/comm.md index 465be1dceb1..df4d5e088db 100644 --- a/command/comm.md +++ b/command/comm.md @@ -13,28 +13,36 @@ comm ### 语法 -``` -comm(选项)(参数) +```bash +comm [选项]... 文件1 文件2 ``` ### 选项 ``` --1:不显示在第一个文件出现的内容; --2:不显示在第二个文件中出现的内容; --3:不显示同时在两个文件中都出现的内容。 +如果不附带选项,程序会生成三列输出。 +第一列包含文件1 特有的行, +第二列包含文件2 特有的行, +而第三列包含两个文件共有的行。 + + -1 不输出文件1 特有的行 + -2 不输出文件2 特有的行 + -3 不输出两个文件共有的行 ---help 在线帮助。 ---version 显示版本信息。 +--check-order 检查输入是否被正确排序,即使所有输入行均成对 +--nocheck-order 不检查输入是否被正确排序 +--output-delimiter=STR 依照STR 分列 ``` ### 参数 -* 文件1:指定要比较的第一个有序文件; -* 文件2:指定要比较的第二个有序文件。 +* 文件1:指定要比较的第一个**有序**文件; +* 文件2:指定要比较的第二个**有序**文件。 ### 实例 +文本 `aaa.txt` 内容 + ``` [root@localhost text]# cat aaa.txt aaa @@ -46,6 +54,8 @@ eee 222 ``` +文本 `bbb.txt` 内容 + ``` [root@localhost text]# cat bbb.txt bbb @@ -56,8 +66,10 @@ ttt jjj ``` +两个文件之间的比较,如果没有排序需要带上`--nocheck-order`参数 + ``` -[root@localhost text]# comm aaa.txt bbb.txt +[root@localhost text]# comm --nocheck-order aaa.txt bbb.txt aaa bbb ccc From 6cea07d42b4c6eab65a3f36468e264845ef875d1 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Fri, 13 Oct 2017 12:56:01 +0800 Subject: [PATCH 0111/1284] Update comm. --- command/comm.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/command/comm.md b/command/comm.md index df4d5e088db..1e9c062075e 100644 --- a/command/comm.md +++ b/command/comm.md @@ -113,7 +113,7 @@ ttt jjj ``` -sed 's/^\t//' 是将制表符(\t)删除,以便把两列合并成一列。 +`sed 's/^\t//'` 是将制表符`\t`删除,以便把两列合并成一列。 **差集** From 5dfa329075cb280888eda251d6912d2164b27f62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 13 Oct 2017 03:04:43 -0500 Subject: [PATCH 0112/1284] Update w.md --- command/w.md | 84 +++++++++++++++++++++++++++------------------------- 1 file changed, 44 insertions(+), 40 deletions(-) diff --git a/command/w.md b/command/w.md index d22f8905ef0..a8f6a0ad505 100644 --- a/command/w.md +++ b/command/w.md @@ -1,40 +1,44 @@ -w -=== - -显示目前登入系统的用户信息 - -## 补充说明 - -**w命令** 用于显示已经登陆系统的用户列表,并显示用户正在执行的指令。执行这个命令可得知目前登入系统的用户有那些人,以及他们正在执行的程序。单独执行w命令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息。 - -### 语法 - -``` -w(选项)(参数) -``` - -### 选项 - -``` --h:不打印头信息; --u:当显示当前进程和cpu时间时忽略用户名; --s:使用短输出格式; --f:显示用户从哪登录; --V:显示版本信息。 -``` - -### 参数 - -用户:仅显示指定用户。 - -### 实例 - -``` -w - 20:39:37 up 136 days, 3:58, 1 user, load average: 0.00, 0.00, 0.00 -USER TTY FROM login@ IDLE JCPU PCPU WHAT -root pts/0 222.94.97.122 20:39 1.00s 0.00s 0.00s w -``` - - - \ No newline at end of file +w +=== + +显示目前登入系统的用户信息 + +## 补充说明 + +**w命令** 用于显示已经登陆系统的用户列表,并显示用户正在执行的指令。执行这个命令可得知目前登入系统的用户有那些人,以及他们正在执行的程序。单独执行w命令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息。 + +### 语法 + +``` +w(选项)(参数) +``` + +### 选项 + +``` + -h, --no-header 不打印头信息; + -u, --no-current 当显示当前进程和cpu时间时忽略用户名; + -s, --short 使用短输出格式; + -f, --from 显示用户从哪登录; + -o, --old-style 老式输出 + -i, --ip-addr 显示IP地址而不是主机名(如果可能) + + --help 显示此帮助并退出 + -V, --version 显示版本信息。 +``` + +### 参数 + +用户:仅显示指定用户。 + +### 实例 + +``` +w + 20:39:37 up 136 days, 3:58, 1 user, load average: 0.00, 0.00, 0.00 +USER TTY FROM login@ IDLE JCPU PCPU WHAT +root pts/0 222.94.97.122 20:39 1.00s 0.00s 0.00s w +``` + + + From d24657050efde7466b3b9c9f45d4334fffcf3624 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 13 Oct 2017 03:08:51 -0500 Subject: [PATCH 0113/1284] Update ip.md --- command/ip.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/command/ip.md b/command/ip.md index 1ea60876d95..6bed4eec857 100644 --- a/command/ip.md +++ b/command/ip.md @@ -11,11 +11,17 @@ ip ``` ip(选项)(参数) +Usage: ip [ OPTIONS ] OBJECT { COMMAND | help } + ip [ -force ] -batch filename ``` ### 选项 ``` +OBJECT := { link | address | addrlabel | route | rule | neigh | ntable | + tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm | + netns | l2tp | macsec | tcp_metrics | token } + -V:显示指令版本信息; -s:输出更详细的信息; -f:强制使用指定的协议族; @@ -28,6 +34,14 @@ ip(选项)(参数) ### 参数 ``` +OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] | + -h[uman-readable] | -iec | + -f[amily] { inet | inet6 | ipx | dnet | bridge | link } | + -4 | -6 | -I | -D | -B | -0 | + -l[oops] { maximum-addr-flush-attempts } | + -o[neline] | -t[imestamp] | -ts[hort] | -b[atch] [filename] | + -rc[vbuf] [size] | -n[etns] name | -a[ll] } + 网络对象:指定要管理的网络对象; 具体操作:对指定的网络对象完成具体操作; help:显示网络对象支持的操作命令的帮助信息。 From cb0cc25e8de0d1617c050d69f863c427d1b96412 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 13 Oct 2017 03:13:33 -0500 Subject: [PATCH 0114/1284] Update ln.md --- command/ln.md | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/command/ln.md b/command/ln.md index 94b4ee57f48..af5f259e3ca 100644 --- a/command/ln.md +++ b/command/ln.md @@ -21,17 +21,22 @@ ln [选项]... [-T] 目标 链接名 (第一种格式) ### 选项 ``` --b或--backup:删除,覆盖目标文件之前的备份; --d或-F或——directory:建立目录的硬连接; --f或——force:强行建立文件或目录的连接,不论文件或目录是否存在; --i或——interactive:覆盖既有文件之前先询问用户; --n或--no-dereference:把符号连接的目的目录视为一般文件; --s或——symbolic:对源文件建立符号连接,而非硬连接; --S<字尾备份字符串>或--suffix=<字尾备份字符串>:用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的备份字符串是符号“~”,用户可通过“-S”参数来改变它; --v或——verbose:显示指令执行过程; --V<备份方式>或--version-control=<备份方式>:用“-b”参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,这个字符串不仅可用“-S”参数变更,当使用“-V”参数<备份方式>指定不同备份方式时,也会产生不同字尾的备份字符串; ---help:在线帮助; ---version:显示版本信息。 + --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 显示版本信息并退出 ``` ### 参数 @@ -39,6 +44,13 @@ ln [选项]... [-T] 目标 链接名 (第一种格式) * 源文件:指定连接的源文件。如果使用`-s`选项创建符号连接,则“源文件”可以是文件或者目录。创建硬连接时,则“源文件”参数只能是文件; * 目标文件:指定源文件的目标连接文件。 +``` +none, off 不进行备份(即使使用了--backup 选项) +numbered, t 备份文件加上数字进行排序 +existing, nil 若有数字的备份文件已经存在则使用数字,否则使用普通方式备份 +simple, never 永远使用普通方式备份 +``` + ### 实例 将目录`/usr/mengqc/mub1`下的文件m2.c链接到目录`/usr/liu`下的文件a2.c From 912875db589bbf0063ebb9b22a6258c7c7e43ae4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 13 Oct 2017 03:14:16 -0500 Subject: [PATCH 0115/1284] Update ln.md --- command/ln.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/command/ln.md b/command/ln.md index af5f259e3ca..4a0f9d5f720 100644 --- a/command/ln.md +++ b/command/ln.md @@ -44,11 +44,11 @@ ln [选项]... [-T] 目标 链接名 (第一种格式) * 源文件:指定连接的源文件。如果使用`-s`选项创建符号连接,则“源文件”可以是文件或者目录。创建硬连接时,则“源文件”参数只能是文件; * 目标文件:指定源文件的目标连接文件。 -``` -none, off 不进行备份(即使使用了--backup 选项) -numbered, t 备份文件加上数字进行排序 -existing, nil 若有数字的备份文件已经存在则使用数字,否则使用普通方式备份 -simple, never 永远使用普通方式备份 +```bash +none, off # 不进行备份(即使使用了--backup 选项) +numbered, t # 备份文件加上数字进行排序 +existing, nil # 若有数字的备份文件已经存在则使用数字,否则使用普通方式备份 +simple, never # 永远使用普通方式备份 ``` ### 实例 From 107757ba1edd2f2ee72370a7524229bcb614f7a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 13 Oct 2017 03:19:43 -0500 Subject: [PATCH 0116/1284] Update ar.md --- command/ar.md | 51 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/command/ar.md b/command/ar.md index 4718e72f35b..ceaa9874924 100644 --- a/command/ar.md +++ b/command/ar.md @@ -11,38 +11,51 @@ ar ``` ab(选项)(参数) +Usage: ar [emulation options] [-]{dmpqrstx}[abcDfilMNoPsSTuvV] [--plugin ] [member-name] [count] archive-file file... + ar -M [ - 从读取选项 +--target=BFDNAME - 将目标对象格式指定为BFDNAME ``` 选项参数 ``` -a <成员文件>  将文件插入备存文件中指定的成员文件之后。 -b <成员文件>  将文件插入备存文件中指定的成员文件之前。 -c  建立备存文件。 -f  为避免过长的文件名不兼容于其他系统的ar指令指令,因此可利用此参数,截掉要放入备存文件中过长的成员文件名称。 -i <成员文件>  将问家插入备存文件中指定的成员文件之前。 -o  保留备存文件中文件的日期。 -s  若备存文件中包含了对象模式,可利用此参数建立备存文件的符号表。 -S  不产生符号表。 -u  只将日期较新文件插入备存文件中。 -v  程序执行时显示详细的信息。 -V  显示版本信息。 +--plugin

- load the specified plugin ``` +ar:支持的目标: elf64-x86-64 elf32-i386 elf32-x86-64 a.out-i386-linux pei-i386 pei-x86-64 elf64-l1om elf64-k1om elf64-little elf64-big elf32-little elf32-big plugin srec symbolsrec verilog tekhex binary ihex + ### 实例 打包文件 From a576ced597665d9930b499a27f4f4ba02a3cd6f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 13 Oct 2017 03:22:29 -0500 Subject: [PATCH 0117/1284] Update wc.md --- command/wc.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/command/wc.md b/command/wc.md index cc452b0b9f8..8cdf70936eb 100644 --- a/command/wc.md +++ b/command/wc.md @@ -11,6 +11,8 @@ wc ``` wc(选项)(参数) +wc [选项]... [文件]... +wc [选项]... --files0-from=F ``` ### 选项 From d84ababaca5591ab936fd2236d7c7915796db34d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 13 Oct 2017 03:23:21 -0500 Subject: [PATCH 0118/1284] Update fc.md --- command/fc.md | 113 +++++++++++++++++++++++++------------------------- 1 file changed, 57 insertions(+), 56 deletions(-) diff --git a/command/fc.md b/command/fc.md index b539269fae3..74c4dab0605 100644 --- a/command/fc.md +++ b/command/fc.md @@ -1,56 +1,57 @@ -fc -=== - -修改历史命令并执行 - -## 补充说明 - -**fc命令** 自动掉用vi编辑器修改已有历史命令,当保存时立即执行修改后的命令,也可以用来显示历史命令。fc命令编辑历史命令时,会自动调用vi编辑器。fc保存文件后,会自动执行所编辑过的命令。 - -### 语法 - -``` -fc(选项)(参数) -``` - -### 选项 - -``` --l:显示历史命令; --n:显示历史命令时,不显示编号; --r:反序显示历史命令。 -``` - -### 参数 - -* 起始指令编号:指定要编辑的起始指令编号; -* 结尾指令编号:指定要编辑的结尾指令编号。 - -### 实例 - -使用该指令显示最近使用的10条历史命令,输入如下命令: - -``` -[root@localhost ~]# fc -l -10 #显示10条历史命令 -1039 type -a grep -1040 export -1041 history 10 -1042 ulimit -a -1043 shopt -1044 help ls -1045 help env -1046 help short -1047 help shopt -1048 showkey -a -``` - -第一列信息是历史命令的编号,第二列信息是历史命令的具体格式。若用户需要编辑第1040条历史命令时,则输入如下命令: - -``` -fc 1040 #编辑第1040条历史命令 -``` - -命令执行成功后,将自动调用vi编辑器编辑指定的命令,编辑完成后保存,会自动执行修改后的命令。当用户在vi编辑器中修改指令并保存后,被修改的命令会被自动调用并执行。 - - - \ No newline at end of file +fc +=== + +修改历史命令并执行 + +## 补充说明 + +**fc命令** 自动掉用vi编辑器修改已有历史命令,当保存时立即执行修改后的命令,也可以用来显示历史命令。fc命令编辑历史命令时,会自动调用vi编辑器。fc保存文件后,会自动执行所编辑过的命令。 + +### 语法 + +``` +fc [-e 编辑器名] [-lnr] [起始] [终结] +fc -s [模式=替换串] [命令] +``` + +### 选项 + +``` +-l:显示历史命令; +-n:显示历史命令时,不显示编号; +-r:反序显示历史命令。 +``` + +### 参数 + +* 起始指令编号:指定要编辑的起始指令编号; +* 结尾指令编号:指定要编辑的结尾指令编号。 + +### 实例 + +使用该指令显示最近使用的10条历史命令,输入如下命令: + +``` +[root@localhost ~]# fc -l -10 #显示10条历史命令 +1039 type -a grep +1040 export +1041 history 10 +1042 ulimit -a +1043 shopt +1044 help ls +1045 help env +1046 help short +1047 help shopt +1048 showkey -a +``` + +第一列信息是历史命令的编号,第二列信息是历史命令的具体格式。若用户需要编辑第1040条历史命令时,则输入如下命令: + +``` +fc 1040 #编辑第1040条历史命令 +``` + +命令执行成功后,将自动调用vi编辑器编辑指定的命令,编辑完成后保存,会自动执行修改后的命令。当用户在vi编辑器中修改指令并保存后,被修改的命令会被自动调用并执行。 + + + From 1f6fa07adee7bcf87abdb9c6ab27cd7c7304239b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 13 Oct 2017 03:25:41 -0500 Subject: [PATCH 0119/1284] Update ls.md --- command/ls.md | 121 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 99 insertions(+), 22 deletions(-) diff --git a/command/ls.md b/command/ls.md index 127c0cdbfc7..70611004c30 100644 --- a/command/ls.md +++ b/command/ls.md @@ -16,28 +16,105 @@ ls(选项)(参数) ### 选项 ``` --a:显示所有档案及目录(ls内定将档案名或目录名称为“.”的视为隐藏,不会列出); --A:显示除隐藏文件“.”和“..”以外的所有文件列表; --C:多列显示输出结果。这是默认选项; --l:与“-C”选项功能相反,所有输出信息用单列格式输出,不输出为多列; --F:在每个输出项后追加文件的类型标识符,具体含义:“*”表示具有可执行权限的普通文件,“/”表示目录,“@”表示符号链接,“|”表示命令管道FIFO,“=”表示sockets套接字。当文件为普通文件时,不输出任何标识符; --b:将文件中的不可输出的字符以反斜线“”加字符编码的方式输出; --c:与“-lt”选项连用时,按照文件状态时间排序输出目录内容,排序的依据是文件的索引节点中的ctime字段。与“-l”选项连用时,则排序的一句是文件的状态改变时间; --d:仅显示目录名,而不显示目录下的内容列表。显示符号链接文件本身,而不显示其所指向的目录列表; --f:此参数的效果和同时指定“aU”参数相同,并关闭“lst”参数的效果; --i:显示文件索引节点号(inode)。一个索引节点代表一个文件; ---file-type:与“-F”选项的功能相同,但是不显示“*”; --k:以KB(千字节)为单位显示文件大小; --l:以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等; --m:用“,”号区隔每个文件和目录的名称; --n:以用户识别码和群组识别码替代其名称; --r:以文件名反序排列并输出目录内容列表; --s:显示文件和目录的大小,以区块为单位; --t:用文件和目录的更改时间排序; --L:如果遇到性质为符号链接的文件或目录,直接列出该链接所指向的原始文件或目录; --R:递归处理,将指定目录下的所有文件及子目录一并处理; ---full-time:列出完整的日期与时间; ---color[=WHEN]:使用不同的颜色高亮显示不同类型的。 + +-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 显示版本信息并退出 ``` ### 参数 From 93be43f0803b302756cd59bc7ed139f8794fdb59 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Mon, 16 Oct 2017 19:48:20 +0800 Subject: [PATCH 0120/1284] Update data. --- dist/data.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/data.json b/dist/data.json index 2f4252ac924..a093a0e24a9 100644 --- a/dist/data.json +++ b/dist/data.json @@ -1 +1 @@ -{"w":{"n":"w","p":"/w","d":"显示目前登入系统的用户信息"},"ab":{"n":"ab","p":"/ab","d":"Apache服务器的性能测试工具"},"ip":{"n":"ip","p":"/ip","d":"网络配置工具"},"ld":{"n":"ld","p":"/ld","d":"将目标文件连接为可执行程序"},"xz":{"n":"xz","p":"/xz","d":"POSIX 平台开发具有高压缩率的工具。"},"ln":{"n":"ln","p":"/ln","d":"用来为文件创件连接"},"ar":{"n":"ar","p":"/ar","d":"建立或修改备存文件,或是从备存文件中抽取文件"},"lp":{"n":"lp","p":"/lp","d":"打印文件或修改排队的打印任务"},"fg":{"n":"fg","p":"/fg","d":"将后台作业放到前台终端运行"},"wc":{"n":"wc","p":"/wc","d":"统计文件的字节数、字数、行数"},"as":{"n":"as","p":"/as","d":"汇编语言编译器"},"at":{"n":"at","p":"/at","d":"在指定时间执行一个任务"},"fc":{"n":"fc","p":"/fc","d":"修改历史命令并执行"},"ls":{"n":"ls","p":"/ls","d":"显示目录内容列表"},"id":{"n":"id","p":"/id","d":"显示用户的ID以及所属群组的ID"},"vi":{"n":"vi","p":"/vi","d":"功能强大的纯文本编辑器"},"bc":{"n":"bc","p":"/bc","d":"算术操作精密运算工具"},"bg":{"n":"bg","p":"/bg","d":"用于将作业放到后台运行"},"ex":{"n":"ex","p":"/ex","d":"启动vim编辑器的ex编辑模式"},"ed":{"n":"ed","p":"/ed","d":"单行纯文本编辑器"},"tr":{"n":"tr","p":"/tr","d":"将字符进行替换压缩和删除"},"mv":{"n":"mv","p":"/mv","d":"用来对文件或目录重新命名"},"du":{"n":"du","p":"/du","d":"显示每个文件和目录的磁盘使用空间"},"nc":{"n":"nc","p":"/nc","d":"命令用于设置路由器。"},"nl":{"n":"nl","p":"/nl","d":"在Linux系统中计算文件内容行号"},"nm":{"n":"nm","p":"/nm","d":"显示二进制目标文件的符号表"},"cd":{"n":"cd","p":"/cd","d":"切换用户当前工作目录"},"od":{"n":"od","p":"/od","d":"输出文件的八进制、十六进制等格式编码的字节"},"pr":{"n":"pr","p":"/pr","d":"将文本文件转换成适合打印的格式"},"su":{"n":"su","p":"/su","d":"用于切换当前用户身份到其他用户身份"},"ps":{"n":"ps","p":"/ps","d":"报告当前系统的进程状态"},"ss":{"n":"ss","p":"/ss","d":"获取socket统计信息,iproute2 包附带的另一个工具,允许你查询 socket 的有关统计信息。"},"sh":{"n":"sh","p":"/sh","d":"shell命令解释器"},"pv":{"n":"pv","p":"/pv","d":"显示当前在命令行执行的命令的进度信息,管道查看器。"},"df":{"n":"df","p":"/df","d":"显示磁盘的相关信息"},"dd":{"n":"dd","p":"/dd","d":"复制文件并对原文件的内容进行转换和格式化处理"},"rm":{"n":"rm","p":"/rm","d":"用于删除给定的文件和目录"},"cu":{"n":"cu","p":"/cu","d":"用于连接另一个系统主机。"},"cp":{"n":"cp","p":"/cp","d":"将源文件或目录复制到目标文件或目录中"},"man":{"n":"man","p":"/man","d":"查看Linux中的指令帮助"},"sar":{"n":"sar","p":"/sar","d":"系统运行状态统计工具"},"rsh":{"n":"rsh","p":"/rsh","d":"连接远程主机并执行命令"},"rpm":{"n":"rpm","p":"/rpm","d":"RPM软件包的管理工具"},"sed":{"n":"sed","p":"/sed","d":"功能强大的流式文本编辑器"},"seq":{"n":"seq","p":"/seq","d":"以指定增量从首数开始打印数字到尾数"},"zip":{"n":"zip","p":"/zip","d":"可以用来解压缩文件"},"cut":{"n":"cut","p":"/cut","d":"连接文件并打印到标准输出设备上"},"set":{"n":"set","p":"/set","d":"显示或设置shell特性及shell变量"},"rcp":{"n":"rcp","p":"/rcp","d":"使在两台Linux主机之间的文件复制操作更简单"},"col":{"n":"col","p":"/col","d":"过滤控制字符"},"pwd":{"n":"pwd","p":"/pwd","d":"绝对路径方式显示用户当前工作目录"},"pvs":{"n":"pvs","p":"/pvs","d":"输出物理卷信息报表"},"cmp":{"n":"cmp","p":"/cmp","d":"比较两个文件是否有差异"},"dig":{"n":"dig","p":"/dig","d":"域名查询工具"},"ssh":{"n":"ssh","p":"/ssh","d":"openssh套件中的客户端连接工具"},"sum":{"n":"sum","p":"/sum","d":"计算文件的校验码和显示块数"},"dnf":{"n":"dnf","p":"/dnf","d":"新一代的RPM软件包管理器"},"php":{"n":"php","p":"/php","d":"PHP语言的命令行接口"},"tac":{"n":"tac","p":"/tac","d":"将文件已行为单位的反序输出"},"cat":{"n":"cat","p":"/cat","d":"连接文件并打印到标准输出设备上"},"cal":{"n":"cal","p":"/cal","d":"显示当前日历或指定日期的日历"},"tar":{"n":"tar","p":"/tar","d":"Linux下的归档使用工具,用来打包和备份。"},"tee":{"n":"tee","p":"/tee","d":"把数据重定向到给定文件和屏幕上"},"top":{"n":"top","p":"/top","d":"显示或管理执行中的程序"},"bye":{"n":"bye","p":"/bye","d":"命令用于中断FTP连线并结束程序。。"},"scp":{"n":"scp","p":"/scp","d":"加密的方式在本地主机和远程主机之间复制文件"},"elm":{"n":"elm","p":"/elm","d":"纯文本邮件客户端程序"},"env":{"n":"env","p":"/env","d":"显示系统中已存在的环境变量"},"tty":{"n":"tty","p":"/tty","d":"显示连接到当前标准输入的终端设备文件名。"},"awk":{"n":"awk","p":"/awk","d":"文本和数据进行处理的编程语言"},"lpr":{"n":"lpr","p":"/lpr","d":"将文件发送给指定打印机进行打印"},"atq":{"n":"atq","p":"/atq","d":"列出当前用户的at任务列表"},"lpq":{"n":"lpq","p":"/lpq","d":"显示打印队列中的打印任务的状态信息"},"arp":{"n":"arp","p":"/arp","d":"显示和修改IP到MAC转换表"},"lpc":{"n":"lpc","p":"/lpc","d":"命令行方式打印机控制程序"},"arj":{"n":"arj","p":"/arj","d":"用于创建和管理.arj压缩包"},"who":{"n":"who","p":"/who","d":"显示目前登录系统的用户信息"},"fmt":{"n":"fmt","p":"/fmt","d":"读取文件后优化处理并输出"},"ftp":{"n":"ftp","p":"/ftp","d":"用来设置文件系统相关功能"},"lha":{"n":"lha","p":"/lha","d":"压缩或解压缩lzh格式文件"},"let":{"n":"let","p":"/let","d":"简单的计算器"},"gcc":{"n":"gcc","p":"/gcc","d":"基于C/C++的编译器"},"gdb":{"n":"gdb","p":"/gdb","d":"功能强大的程序调试器"},"ldd":{"n":"ldd","p":"/ldd","d":"打印程序或者库文件所依赖的共享库列表"},"yes":{"n":"yes","p":"/yes","d":"重复打印指定字符串"},"git":{"n":"git","p":"/git","d":"是目前世界上最先进的分布式版本控制系统"},"gpm":{"n":"gpm","p":"/gpm","d":"提供文字模式下的滑鼠事件处理"},"joe":{"n":"joe","p":"/joe","d":"强大的纯文本编辑器"},"jed":{"n":"jed","p":"/jed","d":"主要用于编辑代码的编辑器"},"yum":{"n":"yum","p":"/yum","d":"基于RPM的软件包管理器"},"rev":{"n":"rev","p":"/rev","d":"将文件内容以字符为单位反序输出"},"chfn":{"n":"chfn","p":"/chfn","d":"用来改变finger命令显示的信息"},"sudo":{"n":"sudo","p":"/sudo","d":"以其他身份来执行命令"},"pssh":{"n":"pssh","p":"/pssh","d":"批量管理执行"},"bind":{"n":"bind","p":"/bind","d":"显示或设置键盘按键与其相关的功能"},"dirs":{"n":"dirs","p":"/dirs","d":"显示目录记录"},"stty":{"n":"stty","p":"/stty","d":"修改终端命令行的相关设置"},"popd":{"n":"popd","p":"/popd","d":"用于删除目录栈中的记录"},"stat":{"n":"stat","p":"/stat","d":"用于显示文件的状态信息"},"pmap":{"n":"pmap","p":"/pmap","d":"报告进程的内存映射关系"},"ping":{"n":"ping","p":"/ping","d":"测试主机之间网络的连通性"},"pico":{"n":"pico","p":"/pico","d":"功能强大全屏幕的文本编辑器"},"sshd":{"n":"sshd","p":"/sshd","d":"openssh软件套件中的服务器守护进程"},"perl":{"n":"perl","p":"/perl","d":"perl语言解释器"},"uniq":{"n":"uniq","p":"/uniq","d":"报告或忽略文件中的重复行"},"nmap":{"n":"nmap","p":"/nmap","d":"网络探测和安全审核"},"chsh":{"n":"chsh","p":"/chsh","d":"用来更换登录系统时使用的shell"},"type":{"n":"type","p":"/type","d":"显示指定命令的类型"},"nice":{"n":"nice","p":"/nice","d":"改变程序执行的优先权等级"},"sort":{"n":"sort","p":"/sort","d":"将文件进行排序并输出"},"dpkg":{"n":"dpkg","p":"/dpkg","d":"Debian Linux系统上安装、创建和管理软件包"},"dris":{"n":"dris","p":"/dris","d":"显示和清空目录堆栈中的内容"},"nano":{"n":"nano","p":"/nano","d":"字符终端文本编辑器"},"xset":{"n":"xset","p":"/xset","d":"设置X-Window系统中的用户爱好的实用工具"},"dump":{"n":"dump","p":"/dump","d":"用于备份ext2或者ext3文件系统"},"sftp":{"n":"sftp","p":"/sftp","d":"交互式的文件传输程序"},"more":{"n":"more","p":"/more","d":"显示文件内容,每次显示一屏"},"echo":{"n":"echo","p":"/echo","d":"输出指定的字符串或者变量"},"tree":{"n":"tree","p":"/tree","d":"树状图列出目录的内容"},"mkfs":{"n":"mkfs","p":"/mkfs","d":"用于在设备上创建Linux文件系统"},"mesg":{"n":"mesg","p":"/mesg","d":"设置当前终端的写权限"},"trap":{"n":"trap","p":"/trap","d":"指定在接收到信号后将要采取的动作"},"make":{"n":"make","p":"/make","d":"GNU的工程化编译工具"},"atop":{"n":"atop","p":"/atop","d":"监控Linux系统资源与进程的工具"},"mail":{"n":"mail","p":"/mail","d":"命令行下发送和接收电子邮件"},"lynx":{"n":"lynx","p":"/lynx","d":"纯文本模式的网页浏览器"},"comm":{"n":"comm","p":"/comm","d":"两个文件之间的比较"},"lsof":{"n":"lsof","p":"/lsof","d":"显示Linux系统当前已打开的所有文件列表"},"zcat":{"n":"zcat","p":"/zcat","d":"显示压缩包中文件的内容"},"exec":{"n":"exec","p":"/exec","d":"调用并执行指定的命令"},"exit":{"n":"exit","p":"/exit","d":"退出当前的shell"},"tput":{"n":"tput","p":"/tput","d":"通过terminfo数据库对终端会话进行初始化和操作"},"lprm":{"n":"lprm","p":"/lprm","d":"删除打印队列中的打印任务"},"atrm":{"n":"atrm","p":"/atrm","d":"删除待执行任务队列中的指定任务"},"expr":{"n":"expr","p":"/expr","d":"一款表达式计算工具"},"time":{"n":"time","p":"/time","d":"统计给定命令所花费的总时间"},"tftp":{"n":"tftp","p":"/tftp","d":"在本机和tftp服务器之间使用TFTP协议传输文件"},"cpio":{"n":"cpio","p":"/cpio","d":"用来建立、还原备份档的工具程序"},"test":{"n":"test","p":"/test","d":"shell环境中测试条件表达式工具"},"file":{"n":"file","p":"/file","d":"用来探测给定文件的类型。"},"find":{"n":"find","p":"/find","d":"在指定目录下查找文件"},"arpd":{"n":"arpd","p":"/arpd","d":"收集免费ARP信息"},"look":{"n":"look","p":"/look","d":"显示文件中以指定字符串开头的任意行"},"axel":{"n":"axel","p":"/axel","d":"多线程下载工具"},"wait":{"n":"wait","p":"/wait","d":"等待进程执行完后返回"},"fold":{"n":"fold","p":"/fold","d":"控制文件内容输出时所占用的屏幕宽度"},"free":{"n":"free","p":"/free","d":"显示内存的使用情况"},"fsck":{"n":"fsck","p":"/fsck","d":"检查并且试图修复文件系统中的错误"},"talk":{"n":"talk","p":"/talk","d":"让用户和其他用户聊天"},"lilo":{"n":"lilo","p":"/lilo","d":"安装核心载入开机管理程序"},"curl":{"n":"curl","p":"/curl","d":"利用URL规则在命令行下工作的文件传输工具"},"lftp":{"n":"lftp","p":"/lftp","d":"优秀的文件客户端程序"},"wget":{"n":"wget","p":"/wget","d":"Linux系统下载文件工具"},"less":{"n":"less","p":"/less","d":"分屏上下翻页浏览文件内容"},"date":{"n":"date","p":"/date","d":"显示或设置系统时间与日期"},"gcov":{"n":"gcov","p":"/gcov","d":"测试程序的代码覆盖率的工具"},"znew":{"n":"znew","p":"/znew","d":"将.Z压缩包重新转化为gzip命令压缩的.gz压缩包"},"read":{"n":"read","p":"/read","d":"从键盘读取变量值"},"tail":{"n":"tail","p":"/tail","d":"在屏幕上显示指定文件的末尾若干行"},"last":{"n":"last","p":"/last","d":"列出目前与过去登入系统的用户相关信息"},"wall":{"n":"wall","p":"/wall","d":"向系统当前所有打开的终端上输出信息"},"kill":{"n":"kill","p":"/kill","d":"删除执行中的程序或工作"},"sync":{"n":"sync","p":"/sync","d":"用于强制被改变的内容立刻写入磁盘"},"grep":{"n":"grep","p":"/grep","d":"强大的文本搜索工具"},"join":{"n":"join","p":"/join","d":"两个文件中指定栏位内容相同的行连接起来"},"pwck":{"n":"pwck","p":"/pwck","d":"用来验证系统认证文件内容和格式的完整性"},"jobs":{"n":"jobs","p":"/jobs","d":"显示Linux中的任务列表及任务状态"},"arch":{"n":"arch","p":"/arch","d":"显示当前主机的硬件架构类型"},"ipcs":{"n":"ipcs","p":"/ipcs","d":"分析消息队列共享内存和信号量 "},"diff":{"n":"diff","p":"/diff","d":"比较给定的两个文件的不同"},"init":{"n":"init","p":"/init","d":"init进程是所有Linux进程的父进程"},"grub":{"n":"grub","p":"/grub","d":"多重引导程序grub的命令行shell工具"},"info":{"n":"info","p":"/info","d":"Linux下info格式的帮助指令"},"ifup":{"n":"ifup","p":"/ifup","d":"激活指定的网络接口"},"gzip":{"n":"gzip","p":"/gzip","d":"用来压缩文件"},"halt":{"n":"halt","p":"/halt","d":"关闭正在运行的Linux操作系统"},"pvck":{"n":"pvck","p":"/pvck","d":"检测物理卷的LVM元数据的一致性"},"head":{"n":"head","p":"/head","d":"在屏幕上显示指定文件的开头若干行"},"help":{"n":"help","p":"/help","d":"显示帮助信息"},"htop":{"n":"htop","p":"/htop","d":"[非内部命令]一个互动的进程查看器,可以动态观察系统进程状况。"},"host":{"n":"host","p":"/host","d":"常用的分析域名查询工具"},"mysql":{"n":"mysql","p":"/mysql","d":"MySQL服务器客户端工具"},"bzcat":{"n":"bzcat","p":"/bzcat","d":"解压缩指定的.bz2文件"},"touch":{"n":"touch","p":"/touch","d":"创建新的空文件"},"iconv":{"n":"iconv","p":"/iconv","d":"转换文件的编码方式"},"ifcfg":{"n":"ifcfg","p":"/ifcfg","d":"置Linux中的网络接口参数"},"gzexe":{"n":"gzexe","p":"/gzexe","d":"用来压缩可执行文件"},"tload":{"n":"tload","p":"/tload","d":"显示系统负载状况"},"iotop":{"n":"iotop","p":"/iotop","d":"用来监视磁盘I/O使用状况的工具"},"alias":{"n":"alias","p":"/alias","d":"用来设置指令的别名"},"zfore":{"n":"zfore","p":"/zfore","d":"强制为gzip格式的压缩文件添加.gz后缀"},"bzip2":{"n":"bzip2","p":"/bzip2","d":"将文件压缩成bz2格式"},"ipcrm":{"n":"ipcrm","p":"/ipcrm","d":"删除消息队列、信号集、或者共享内存标识"},"grpck":{"n":"grpck","p":"/grpck","d":"用于验证组文件的完整性"},"iperf":{"n":"iperf","p":"/iperf","d":"网络性能测试工具"},"kexec":{"n":"kexec","p":"/kexec","d":"从当前正在运行的内核引导到一个新内核"},"lastb":{"n":"lastb","p":"/lastb","d":"列出登入系统失败的用户相关信息"},"xinit":{"n":"xinit","p":"/xinit","d":"是Linux下X-Window系统的初始化程序"},"xhost":{"n":"xhost","p":"/xhost","d":"制哪些X客户端能够在X服务器上显示"},"fuser":{"n":"fuser","p":"/fuser","d":"使用文件或文件结构识别进程"},"tailf":{"n":"tailf","p":"/tailf","d":"在屏幕上显示指定文件的末尾若干行内容,通常用于日志文件的跟踪输出。"},"chage":{"n":"chage","p":"/chage","d":"修改帐号和密码的有效期限"},"xclip":{"n":"xclip","p":"/xclip","d":"管理 X 粘贴板"},"login":{"n":"login","p":"/login","d":"登录系统或切换用户身份"},"xauth":{"n":"xauth","p":"/xauth","d":"显示和编辑被用于连接X服务器的认证信息"},"fgrep":{"n":"fgrep","p":"/fgrep","d":"为文件搜索文字字符串"},"fdisk":{"n":"fdisk","p":"/fdisk","d":"查看磁盘使用情况和磁盘分区"},"xargs":{"n":"xargs","p":"/xargs","d":"给其他命令传递参数的一个过滤器"},"lsblk":{"n":"lsblk","p":"/lsblk","d":"列出块设备信息"},"lscpu":{"n":"lscpu","p":"/lscpu","d":"显示有关CPU架构的信息"},"lsmod":{"n":"lsmod","p":"/lsmod","d":"显示已载入系统的模块"},"chcon":{"n":"chcon","p":"/chcon","d":"修改对象(文件)的安全上下文"},"lspci":{"n":"lspci","p":"/lspci","d":"显示当前主机的所有PCI总线信息"},"lsusb":{"n":"lsusb","p":"/lsusb","d":"显示本机的USB设备列表信息"},"write":{"n":"write","p":"/write","d":"向指定登录用户终端上发送信息"},"emacs":{"n":"emacs","p":"/emacs","d":"功能强大的全屏文本编辑器"},"mailq":{"n":"mailq","p":"/mailq","d":"显示待发送的邮件队列"},"eject":{"n":"eject","p":"/eject","d":"用来退出抽取式设备"},"egrep":{"n":"egrep","p":"/egrep","d":"在文件内查找指定的字符串"},"mkdir":{"n":"mkdir","p":"/mkdir","d":"用来创建目录"},"chgrp":{"n":"chgrp","p":"/chgrp","d":"用来变更文件或目录的所属群组"},"chmod":{"n":"chmod","p":"/chmod","d":"用来变更文件或目录的权限"},"mknod":{"n":"mknod","p":"/mknod","d":"创建字符设备文件和块设备文件"},"mount":{"n":"mount","p":"/mount","d":"用于挂载Linux系统外的文件。"},"bzcmp":{"n":"bzcmp","p":"/bzcmp","d":"比较两个压缩包中的文件"},"which":{"n":"which","p":"/which","d":"查找并显示给定命令的绝对路径"},"chown":{"n":"chown","p":"/chown","d":"用来变更文件或目录的拥有者或所属群组"},"dstat":{"n":"dstat","p":"/dstat","d":"通用的系统资源统计工具"},"watch":{"n":"watch","p":"/watch","d":"可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令"},"ncftp":{"n":"ncftp","p":"/ncftp","d":"是增强的的FTP工具"},"ngrep":{"n":"ngrep","p":"/ngrep","d":"方便的数据包匹配和显示工具"},"umask":{"n":"umask","p":"/umask","d":"用来设置限制新建文件权限的掩码"},"batch":{"n":"batch","p":"/batch","d":"在系统不繁忙的时候执行定时任务"},"nmcli":{"n":"nmcli","p":"/nmcli","d":"地址配置工具"},"nohup":{"n":"nohup","p":"/nohup","d":"将程序以忽略挂起信号的方式运行起来"},"cksum":{"n":"cksum","p":"/cksum","d":"检查文件的CRC是否正确"},"uname":{"n":"uname","p":"/uname","d":"显示Linux系统信息"},"squid":{"n":"squid","p":"/squid","d":"squid服务器守护进程"},"paste":{"n":"paste","p":"/paste","d":"将多个文件按列队列合并"},"patch":{"n":"patch","p":"/patch","d":"为开放源代码软件安装补丁程序"},"split":{"n":"split","p":"/split","d":"分割任意大小的文件"},"pfctl":{"n":"pfctl","p":"/pfctl","d":"PF防火墙的配置命令"},"pgrep":{"n":"pgrep","p":"/pgrep","d":"设置用户的认证信息,包括用户密码、密码过期时间等"},"pidof":{"n":"pidof","p":"/pidof","d":"查找指定名称的进程的进程号ID号"},"pkill":{"n":"pkill","p":"/pkill","d":"可以按照进程名杀死进程"},"spell":{"n":"spell","p":"/spell","d":"对文件进行拼写检查"},"dmesg":{"n":"dmesg","p":"/dmesg","d":"显示Linux系统启动信息"},"unarj":{"n":"unarj","p":"/unarj","d":"解压缩由arj命令创建的压缩包"},"pushd":{"n":"pushd","p":"/pushd","d":"将目录加入命令堆叠中"},"diff3":{"n":"diff3","p":"/diff3","d":"比较3个文件不同的地方"},"dhcpd":{"n":"dhcpd","p":"/dhcpd","d":"运行DHCP服务器。"},"quota":{"n":"quota","p":"/quota","d":"显示磁盘已使用的空间与限制"},"clear":{"n":"clear","p":"/clear","d":"清除当前屏幕终端上的任何信息"},"blkid":{"n":"blkid","p":"/blkid","d":"查看块设备的文件系统类型、LABEL、UUID等信息"},"sleep":{"n":"sleep","p":"/sleep","d":"将目前动作延迟一段时间"},"users":{"n":"users","p":"/users","d":"显示当前登录系统的所有用户"},"rexec":{"n":"rexec","p":"/rexec","d":"运程执行Linux系统下命令 "},"skill":{"n":"skill","p":"/skill","d":"向选定的进程发送信号冻结进程"},"rmdir":{"n":"rmdir","p":"/rmdir","d":"用来删除空目录"},"rmmod":{"n":"rmmod","p":"/rmmod","d":"从运行的内核中移除指定的内核模块"},"route":{"n":"route","p":"/route","d":"显示并设置Linux中静态路由表"},"rpmdb":{"n":"rpmdb","p":"/rpmdb","d":"初始化和重建RPM数据库"},"shopt":{"n":"shopt","p":"/shopt","d":"显示和设置shell操作选项"},"clock":{"n":"clock","p":"/clock","d":"用于调整 RTC 时间。"},"rsync":{"n":"rsync","p":"/rsync","d":"远程数据同步工具"},"unset":{"n":"unset","p":"/unset","d":"删除指定的shell变量或函数"},"unzip":{"n":"unzip","p":"/unzip","d":"用于解压缩由zip命令压缩的压缩包"},"colrm":{"n":"colrm","p":"/colrm","d":"删除文件中的指定列"},"mktemp":{"n":"mktemp","p":"/mktemp","d":"创建临时文件供shell脚本使用"},"strace":{"n":"strace","p":"/strace","d":"跟踪系统调用和信号"},"indent":{"n":"indent","p":"/indent","d":"格式化C语言的源文件"},"mpstat":{"n":"mpstat","p":"/mpstat","d":"显示各个可用CPU的状态"},"mtools":{"n":"mtools","p":"/mtools","d":"显示mtools支持的指令"},"e2fsck":{"n":"e2fsck","p":"/e2fsck","d":"用于检查第二扩展文件系统的完整性"},"ipcalc":{"n":"ipcalc","p":"/ipcalc","d":"简单的IP地址计算器"},"lnstat":{"n":"lnstat","p":"/lnstat","d":"显示Linux系统的网路状态"},"locate":{"n":"locate","p":"/locate","d":"Apache服务器的性能测试工具"},"whatis":{"n":"whatis","p":"/whatis","d":"查询一个命令执行什么功能"},"arping":{"n":"arping","p":"/arping","d":"通过发送ARP协议报文测试网络"},"logger":{"n":"logger","p":"/logger","d":"在系统日志中记录相应条目"},"gunzip":{"n":"gunzip","p":"/gunzip","d":"用来解压缩文件"},"syslog":{"n":"syslog","p":"/syslog","d":"系统默认的日志守护进程"},"startx":{"n":"startx","p":"/startx","d":"用来启动X Window"},"chroot":{"n":"chroot","p":"/chroot","d":"把根目录换成指定的目的目录"},"ulimit":{"n":"ulimit","p":"/ulimit","d":"控制shell程序的资源"},"logout":{"n":"logout","p":"/logout","d":"退出当前登录的Shell"},"bzdiff":{"n":"bzdiff","p":"/bzdiff","d":"直接比较两个.bz2压缩包中文件的不同"},"vmstat":{"n":"vmstat","p":"/vmstat","d":"显示虚拟内存状态"},"sysctl":{"n":"sysctl","p":"/sysctl","d":"时动态地修改内核的运行参数"},"finger":{"n":"finger","p":"/finger","d":"用于查找并显示用户信息"},"chattr":{"n":"chattr","p":"/chattr","d":"用来改变文件属性"},"umount":{"n":"umount","p":"/umount","d":"用于卸载已经加载的文件系统"},"findfs":{"n":"findfs","p":"/findfs","d":"标签或UUID查找文件系统"},"ntsysv":{"n":"ntsysv","p":"/ntsysv","d":"集中管理系统的各种服务"},"swapon":{"n":"swapon","p":"/swapon","d":"激活Linux系统中交换空间"},"hping3":{"n":"hping3","p":"/hping3","d":"测试网络及主机的安全"},"insmod":{"n":"insmod","p":"/insmod","d":"将给定的模块加载到内核中"},"parted":{"n":"parted","p":"/parted","d":"磁盘分区和分区大小调整工具"},"passwd":{"n":"passwd","p":"/passwd","d":"用于让用户可以更改自己的密码"},"telnet":{"n":"telnet","p":"/telnet","d":"登录远程主机和管理"},"export":{"n":"export","p":"/export","d":"设置或显示系统环境变量"},"lpstat":{"n":"lpstat","p":"/lpstat","d":"显示CUPS中打印机的状态信息"},"expand":{"n":"expand","p":"/expand","d":"将文件的制表符转换为空白字符"},"lsattr":{"n":"lsattr","p":"/lsattr","d":"查看文件的第二扩展文件系统属性"},"telint":{"n":"telint","p":"/telint","d":"切换当前正在运行系统的运行等级"},"iptraf":{"n":"iptraf","p":"/iptraf","d":"实时地监视网卡流量"},"ispell":{"n":"ispell","p":"/ispell","d":"检查文件中出现的拼写错误"},"groups":{"n":"groups","p":"/groups","d":"用来打印指定用户所属的工作组"},"printf":{"n":"printf","p":"/printf","d":"格式化并输出结果"},"jwhois":{"n":"jwhois","p":"/jwhois","d":"whois 客户端服务"},"pstack":{"n":"pstack","p":"/pstack","d":"显示每个进程的栈跟踪"},"pstree":{"n":"pstree","p":"/pstree","d":"以树状图的方式展现进程之间的派生关系"},"vgscan":{"n":"vgscan","p":"/vgscan","d":"扫描并显示系统中的卷组"},"bzless":{"n":"bzless","p":"/bzless","d":"增强.bz2压缩包查看器"},"vdfuse":{"n":"vdfuse","p":"/vdfuse","d":"VirtualBox软件挂载VDI分区文件工具"},"pvscan":{"n":"pvscan","p":"/pvscan","d":"扫描系统中所有硬盘的物理卷列表"},"ltrace":{"n":"ltrace","p":"/ltrace","d":"用来跟踪进程调用库函数的情况"},"pwconv":{"n":"pwconv","p":"/pwconv","d":"用来开启用户的投影密码"},"hostid":{"n":"hostid","p":"/hostid","d":"用来打印当前主机的数字化标识"},"bzmore":{"n":"bzmore","p":"/bzmore","d":"查看bzip2压缩过的文本文件的内容"},"uupick":{"n":"uupick","p":"/uupick","d":"命令处理传送进来的文件。"},"source":{"n":"source","p":"/source","d":"在当前Shell环境中从指定文件读取和执行命令,命令返回退出状态。"},"rcconf":{"n":"rcconf","p":"/rcconf","d":"Debian Linux下的运行等级服务配置工具"},"depmod":{"n":"depmod","p":"/depmod","d":"分析可载入模块的相依性"},"accept":{"n":"accept","p":"/accept","d":"指示打印系统接受发往指定目标打印机的打印任务"},"lvscan":{"n":"lvscan","p":"/lvscan","d":"扫描逻辑卷"},"reboot":{"n":"reboot","p":"/reboot","d":"重新启动正在运行的Linux操作系统"},"reject":{"n":"reject","p":"/reject","d":"指示打印系统拒绝发往指定目标打印机的打印任务"},"rename":{"n":"rename","p":"/rename","d":"用字符串替换的方式批量改变文件名"},"renice":{"n":"renice","p":"/renice","d":"修改正在运行的进程的调度优先级"},"resize":{"n":"resize","p":"/resize","d":"命令设置终端机视窗的大小。"},"enable":{"n":"enable","p":"/enable","d":"启动或关闭shell内建命令"},"uucico":{"n":"uucico","p":"/uucico","d":"UUCP文件传输服务程序。"},"iostat":{"n":"iostat","p":"/iostat","d":"监视系统输入输出设备和CPU的使用情况"},"cancel":{"n":"cancel","p":"/cancel","d":"取消已存在的打印任务"},"rlogin":{"n":"rlogin","p":"/rlogin","d":"从当前终端登录到远程Linux主机"},"elinks":{"n":"elinks","p":"/elinks","d":"纯文本界面的WWW浏览器"},"ifdown":{"n":"ifdown","p":"/ifdown","d":"禁用指定的网络接口"},"md5sum":{"n":"md5sum","p":"/md5sum","d":"计算和校验文件报文摘要的工具程序"},"bzgrep":{"n":"bzgrep","p":"/bzgrep","d":"使用正则表达式搜索.bz2压缩包中文件"},"csplit":{"n":"csplit","p":"/csplit","d":"将一个大文件分割成小的碎片文件"},"whoami":{"n":"whoami","p":"/whoami","d":"打印当前有效的用户名称"},"unlink":{"n":"unlink","p":"/unlink","d":"系统调用函数unlink去删除指定的文件"},"ifstat":{"n":"ifstat","p":"/ifstat","d":"统计网络接口流量状态"},"mke2fs":{"n":"mke2fs","p":"/mke2fs","d":"创建磁盘分区上的“etc2/etc3”文件系统"},"ftpwho":{"n":"ftpwho","p":"/ftpwho","d":"显示当前每个ftp会话信息"},"ftptop":{"n":"ftptop","p":"/ftptop","d":"proftpd服务器的连接状态"},"uptime":{"n":"uptime","p":"/uptime","d":"查看Linux系统负载信息"},"screen":{"n":"screen","p":"/screen","d":"用于命令行终端切换"},"seinfo":{"n":"seinfo","p":"/seinfo","d":"查询SELinux的策略提供多少相关规则"},"hdparm":{"n":"hdparm","p":"/hdparm","d":"显示与设定硬盘的参数"},"setpci":{"n":"setpci","p":"/setpci","d":"查询和配置PCI设备的使用工具"},"mkswap":{"n":"mkswap","p":"/mkswap","d":"建立和设置SWAP交换分区"},"e2label":{"n":"e2label","p":"/e2label","d":"设置第二扩展文件系统的卷标"},"setfacl":{"n":"setfacl","p":"/setfacl","d":"设置文件访问控制列表"},"command":{"n":"command","p":"/command","d":"调用并执行指定的命令"},"useradd":{"n":"useradd","p":"/useradd","d":"创建的新的系统用户"},"crontab":{"n":"crontab","p":"/crontab","d":"提交和管理用户的需要周期性执行的任务"},"userdel":{"n":"userdel","p":"/userdel","d":"用于删除给定的用户以及与用户相关的文件"},"rpmsign":{"n":"rpmsign","p":"/rpmsign","d":"使用RPM软件包的签名管理工具"},"usermod":{"n":"usermod","p":"/usermod","d":"用于修改用户的基本信息"},"slabtop":{"n":"slabtop","p":"/slabtop","d":"实时显示内核slab内存缓存信息"},"restore":{"n":"restore","p":"/restore","d":"所进行的操作和dump指令相反"},"slocate":{"n":"slocate","p":"/slocate","d":"命令查找文件或目录"},"readelf":{"n":"readelf","p":"/readelf","d":"用于显示elf格式文件的信息"},"declare":{"n":"declare","p":"/declare","d":"声明或显示shell变量"},"quotaon":{"n":"quotaon","p":"/quotaon","d":"激活Linux内核中指定文件系统的磁盘配额功能"},"dirname":{"n":"dirname","p":"/dirname","d":"去除文件名中的非目录部分"},"ppp-off":{"n":"ppp-off","p":"/ppp-off","d":"关闭ppp连线"},"pathchk":{"n":"pathchk","p":"/pathchk","d":"检查文件中不可移植的部分"},"openssl":{"n":"openssl","p":"/openssl","d":"强大的安全套接字层密码库"},"objdump":{"n":"objdump","p":"/objdump","d":"显示二进制文件信息"},"ntpdate":{"n":"ntpdate","p":"/ntpdate","d":"使用网络计时协议(NTP)设置日期和时间"},"ssh-add":{"n":"ssh-add","p":"/ssh-add","d":"把专用密钥添加到ssh-agent的高速缓存中"},"unalias":{"n":"unalias","p":"/unalias","d":"删除由alias设置的别名"},"nologin":{"n":"nologin","p":"/nologin","d":"拒绝用户登录系统"},"volname":{"n":"volname","p":"/volname","d":"显示指定的ISO-9660格式的设备的卷名称"},"nfsstat":{"n":"nfsstat","p":"/nfsstat","d":"列出NFS客户端和服务器的工作状态"},"netstat":{"n":"netstat","p":"/netstat","d":"查看Linux中网络系统状态信息"},"nethogs":{"n":"nethogs","p":"/nethogs","d":"终端下的网络流量监控工具"},"whereis":{"n":"whereis","p":"/whereis","d":"查找二进制程序、代码等相关文件路径"},"service":{"n":"service","p":"/service","d":"控制系统服务的实用工具"},"strings":{"n":"strings","p":"/strings","d":"在对象文件或二进制文件中查找可打印的字符串"},"mkisofs":{"n":"mkisofs","p":"/mkisofs","d":"建立ISO 9660映像文件"},"edquota":{"n":"edquota","p":"/edquota","d":"用于编辑指定用户或工作组磁盘配额"},"ethtool":{"n":"ethtool","p":"/ethtool","d":"显示或修改以太网卡的配置信息"},"swapoff":{"n":"swapoff","p":"/swapoff","d":"关闭指定的交换空间"},"lpadmin":{"n":"lpadmin","p":"/lpadmin","d":"配置CUPS套件中的打印机和类"},"losetup":{"n":"losetup","p":"/losetup","d":"设定与控制循环(loop)设备"},"logsave":{"n":"logsave","p":"/logsave","d":"将命令的输出信息保存到指定的日志文件"},"logname":{"n":"logname","p":"/logname","d":"用来显示用户名称"},"systool":{"n":"systool","p":"/systool","d":"显示基于总线、类和拓扑显示系统中设备的信息"},"ftpshut":{"n":"ftpshut","p":"/ftpshut","d":"在指定的时间关闭FTP服务器"},"lftpget":{"n":"lftpget","p":"/lftpget","d":"调用lftp指令下载指定的文件"},"lastlog":{"n":"lastlog","p":"/lastlog","d":"显示系统中所有用户最近一次登录信息"},"killall":{"n":"killall","p":"/killall","d":"使用进程的名称来杀死一组进程"},"tcpdump":{"n":"tcpdump","p":"/tcpdump","d":"一款sniffer工具,是Linux上的抓包工具,嗅探器。"},"builtin":{"n":"builtin","p":"/builtin","d":"执行shell内部命令"},"gpasswd":{"n":"gpasswd","p":"/gpasswd","d":"Linux下工作组文件的管理工具"},"apt-key":{"n":"apt-key","p":"/apt-key","d":"管理Debian Linux系统中的软件包密钥"},"apt-get":{"n":"apt-get","p":"/apt-get","d":"Debian Linux发行版中的APT软件包管理工具"},"bunzip2":{"n":"bunzip2","p":"/bunzip2","d":"创一个bz2文件压缩包"},"apropos":{"n":"apropos","p":"/apropos","d":"在 whatis 数据库中查找字符串"},"grpconv":{"n":"grpconv","p":"/grpconv","d":"用来开启群组的投影密码"},"install":{"n":"install","p":"/install","d":"安装或升级软件或备份数据"},"zipinfo":{"n":"zipinfo","p":"/zipinfo","d":"用来列出压缩文件信息"},"hwclock":{"n":"hwclock","p":"/hwclock","d":"显示与设定硬件时钟"},"hexdump":{"n":"hexdump","p":"/hexdump","d":"显示文件十六进制格式"},"history":{"n":"history","p":"/history","d":"用于显示历史命令"},"ifconfig":{"n":"ifconfig","p":"/ifconfig","d":"配置和显示Linux系统网卡的网络参数"},"diffstat":{"n":"diffstat","p":"/diffstat","d":"显示diff命令输出信息的柱状图"},"pvchange":{"n":"pvchange","p":"/pvchange","d":"修改物理卷属性"},"updatedb":{"n":"updatedb","p":"/updatedb","d":"创建或更新slocate命令所必需的数据库文件"},"arpwatch":{"n":"arpwatch","p":"/arpwatch","d":"监听网络上ARP的记录"},"pvcreate":{"n":"pvcreate","p":"/pvcreate","d":"将物理硬盘分区初始化为物理卷"},"basename":{"n":"basename","p":"/basename","d":"打印目录或者文件的基本名称"},"pvremove":{"n":"pvremove","p":"/pvremove","d":"删除一个存在的物理卷"},"dhcrelay":{"n":"dhcrelay","p":"/dhcrelay","d":"使用dhcrelay命令可以提供中继DHCP和BOOTP请求"},"shutdown":{"n":"shutdown","p":"/shutdown","d":"用来执行系统关机的命令"},"ldconfig":{"n":"ldconfig","p":"/ldconfig","d":"动态链接库管理命令"},"zipsplit":{"n":"zipsplit","p":"/zipsplit","d":"将较大的zip压缩包分割成各个较小的压缩包"},"mkinitrd":{"n":"mkinitrd","p":"/mkinitrd","d":"建立要载入ramdisk的映像文件"},"logwatch":{"n":"logwatch","p":"/logwatch","d":"可定制和可插入式的日志监视系统"},"pwunconv":{"n":"pwunconv","p":"/pwunconv","d":"用来关闭用户的投影密码"},"unexpand":{"n":"unexpand","p":"/unexpand","d":"将文件的空白字符转换为制表符"},"groupmod":{"n":"groupmod","p":"/groupmod","d":"更改群组识别码或名称"},"groupdel":{"n":"groupdel","p":"/groupdel","d":"用于删除指定的工作组"},"quotaoff":{"n":"quotaoff","p":"/quotaoff","d":"关闭Linux内核中指定文件系统的磁盘配额功能"},"nslookup":{"n":"nslookup","p":"/nslookup","d":"查询域名DNS信息的工具"},"lvcreate":{"n":"lvcreate","p":"/lvcreate","d":"用于创建LVM的逻辑卷"},"modprobe":{"n":"modprobe","p":"/modprobe","d":"自动处理可载入模块"},"groupadd":{"n":"groupadd","p":"/groupadd","d":"用于创建一个新的工作组"},"lvextend":{"n":"lvextend","p":"/lvextend","d":"扩展逻辑卷空间"},"readonly":{"n":"readonly","p":"/readonly","d":"定义只读shell变量或函数"},"lvreduce":{"n":"lvreduce","p":"/lvreduce","d":"收缩逻辑卷空间"},"lvremove":{"n":"lvremove","p":"/lvremove","d":"删除指定LVM逻辑卷"},"vgrename":{"n":"vgrename","p":"/vgrename","d":"使用vgrename命令可以重命名卷组的名称。"},"lvresize":{"n":"lvresize","p":"/lvresize","d":"调整逻辑卷空间大小"},"repquota":{"n":"repquota","p":"/repquota","d":"报表的格式输出磁盘空间限制的状态"},"chpasswd":{"n":"chpasswd","p":"/chpasswd","d":"批量更新用户口令的工具"},"xlsfonts":{"n":"xlsfonts","p":"/xlsfonts","d":"列出X Server使用的字体"},"aptitude":{"n":"aptitude","p":"/aptitude","d":"Debian Linux系统中软件包管理工具"},"ftpcount":{"n":"ftpcount","p":"/ftpcount","d":"显示目前已FTP登入的用户人数"},"vgremove":{"n":"vgremove","p":"/vgremove","d":"用于用户删除LVM卷组"},"exportfs":{"n":"exportfs","p":"/exportfs","d":"管理NFS共享文件系统列表"},"blockdev":{"n":"blockdev","p":"/blockdev","d":"从命令行调用区块设备控制程序"},"htdigest":{"n":"htdigest","p":"/htdigest","d":"Apache服务器内置工具"},"dpkg-deb":{"n":"dpkg-deb","p":"/dpkg-deb","d":"Debian Linux下的软件包管理工具"},"dos2unix":{"n":"dos2unix","p":"/dos2unix","d":"将DOS格式文本文件转换成Unix格式"},"mailstat":{"n":"mailstat","p":"/mailstat","d":"显示到达的邮件状态"},"vgreduce":{"n":"vgreduce","p":"/vgreduce","d":"从卷组中删除物理卷"},"hostname":{"n":"hostname","p":"/hostname","d":"显示和设置系统的主机名"},"rpm2cpio":{"n":"rpm2cpio","p":"/rpm2cpio","d":"将RPM软件包转换为cpio格式的文件"},"bmodinfo":{"n":"bmodinfo","p":"/bmodinfo","d":"显示给定模块的详细信息"},"rpmbuild":{"n":"rpmbuild","p":"/rpmbuild","d":"创建RPM的二进制软件包和源码软件包"},"vgextend":{"n":"vgextend","p":"/vgextend","d":"向卷组中添加物理卷"},"cdrecord":{"n":"cdrecord","p":"/cdrecord","d":"Linux系统下光盘刻录功能命令"},"rpmquery":{"n":"rpmquery","p":"/rpmquery","d":"从RPM数据库中查询软件包信息"},"vgcreate":{"n":"vgcreate","p":"/vgcreate","d":"用于创建LVM卷组"},"poweroff":{"n":"poweroff","p":"/poweroff","d":"关闭Linux系统,关闭记录会被写入到/var/log/wtmp日志文件中。"},"iptables":{"n":"iptables","p":"/iptables","d":"Linux上常用的防火墙软件"},"xlsatoms":{"n":"xlsatoms","p":"/xlsatoms","d":"列出X服务器内部所有定义的原子成分"},"runlevel":{"n":"runlevel","p":"/runlevel","d":"打印当前Linux系统的运行等级"},"htpasswd":{"n":"htpasswd","p":"/htpasswd","d":"apache服务器创建密码认证文件"},"protoize":{"n":"protoize","p":"/protoize","d":"GNU-C代码转换为ANSI-C代码"},"tempfile":{"n":"tempfile","p":"/tempfile","d":"shell中给临时文件命名"},"mii-tool":{"n":"mii-tool","p":"/mii-tool","d":"配置网络设备协商方式的工具"},"compress":{"n":"compress","p":"/compress","d":"使用Lempress-Ziv编码压缩数据文件"},"vgchange":{"n":"vgchange","p":"/vgchange","d":"修改卷组属性"},"semanage":{"n":"semanage","p":"/semanage","d":"默认目录的安全上下文查询与修改"},"sendmail":{"n":"sendmail","p":"/sendmail","d":"著名电子邮件服务器"},"newusers":{"n":"newusers","p":"/newusers","d":"用于批处理的方式一次创建多个命令"},"iptstate":{"n":"iptstate","p":"/iptstate","d":"显示iptables的工作状态"},"sesearch":{"n":"sesearch","p":"/sesearch","d":"查询SELinux策略的规则详情"},"dhclient":{"n":"dhclient","p":"/dhclient","d":"动态获取或释放IP地址"},"tracepath":{"n":"tracepath","p":"/tracepath","d":"追踪目的主机经过的路由信息"},"grpunconv":{"n":"grpunconv","p":"/grpunconv","d":"用来关闭群组的投影密码"},"tcpreplay":{"n":"tcpreplay","p":"/tcpreplay","d":"将PCAP包重新发送,用于性能或者功能测试"},"systemctl":{"n":"systemctl","p":"/systemctl","d":"系统服务管理器指令"},"chkconfig":{"n":"chkconfig","p":"/chkconfig","d":"检查或设置系统的各种服务"},"apachectl":{"n":"apachectl","p":"/apachectl","d":"Apache服务器前端控制工具"},"ip6tables":{"n":"ip6tables","p":"/ip6tables","d":"linux中防火墙软件"},"getsebool":{"n":"getsebool","p":"/getsebool","d":"查询SElinux策略内各项规则的布尔值"},"ssh-agent":{"n":"ssh-agent","p":"/ssh-agent","d":"ssh密钥管理器"},"logrotate":{"n":"logrotate","p":"/logrotate","d":"统日志进行轮转、压缩和删除"},"lvdisplay":{"n":"lvdisplay","p":"/lvdisplay","d":"显示逻辑卷属性"},"mysqldump":{"n":"mysqldump","p":"/mysqldump","d":"MySQL数据库中备份工具"},"smbpasswd":{"n":"smbpasswd","p":"/smbpasswd","d":"samba用户和密码管理工具"},"smbclient":{"n":"smbclient","p":"/smbclient","d":"交互方式访问samba服务器"},"showmount":{"n":"showmount","p":"/showmount","d":"显示NFS服务器加载的信息"},"mysqlshow":{"n":"mysqlshow","p":"/mysqlshow","d":"显示MySQL中数据库相关信息"},"clockdiff":{"n":"clockdiff","p":"/clockdiff","d":"检测两台linux主机的时间差"},"arptables":{"n":"arptables","p":"/arptables","d":"管理ARP包过滤规则表"},"setsebool":{"n":"setsebool","p":"/setsebool","d":"修改SElinux策略内各项规则的布尔值"},"badblocks":{"n":"badblocks","p":"/badblocks","d":"查找磁盘中损坏的区块"},"vgdisplay":{"n":"vgdisplay","p":"/vgdisplay","d":"显示LVM卷组的信息"},"rpmverify":{"n":"rpmverify","p":"/rpmverify","d":"验证已安装的RPM软件包的正确性"},"dmidecode":{"n":"dmidecode","p":"/dmidecode","d":"在Linux系统下获取有关硬件方面的信息"},"vgconvert":{"n":"vgconvert","p":"/vgconvert","d":"转换卷组元数据格式"},"dircolors":{"n":"dircolors","p":"/dircolors","d":"置ls命令在显示目录或文件时所用的色彩"},"pvdisplay":{"n":"pvdisplay","p":"/pvdisplay","d":"显示物理卷的属性"},"partprobe":{"n":"partprobe","p":"/partprobe","d":"不重启的情况下重读分区"},"quotacheck":{"n":"quotacheck","p":"/quotacheck","d":"检查磁盘的使用空间与限制"},"cupsenable":{"n":"cupsenable","p":"/cupsenable","d":"启动指定的打印机"},"usernetctl":{"n":"usernetctl","p":"/usernetctl","d":"被允许时操作指定的网络接口"},"ssh-keygen":{"n":"ssh-keygen","p":"/ssh-keygen","d":"为ssh生成、管理和转换认证密钥"},"xlsclients":{"n":"xlsclients","p":"/xlsclients","d":"列出显示器中的客户端应用程序"},"getenforce":{"n":"getenforce","p":"/getenforce","d":"显示当前SELinux的应用模式,是强制、执行还是停用。"},"domainname":{"n":"domainname","p":"/domainname","d":"显示和设置系统的NIS域名"},"get_module":{"n":"get_module","p":"/get_module","d":"获取Linux内核模块的详细信息"},"traceroute":{"n":"traceroute","p":"/traceroute","d":"显示数据包到主机间的路径"},"mkbootdisk":{"n":"mkbootdisk","p":"/mkbootdisk","d":"可建立目前系统的启动盘"},"dpkg-query":{"n":"dpkg-query","p":"/dpkg-query","d":"Debian Linux中软件包的查询工具"},"mysqladmin":{"n":"mysqladmin","p":"/mysqladmin","d":"MySQL服务器管理客户端"},"dpkg-split":{"n":"dpkg-split","p":"/dpkg-split","d":"Debian Linux中将大软件包分割成小包"},"restorecon":{"n":"restorecon","p":"/restorecon","d":"恢复文件的安全上下文"},"unprotoize":{"n":"unprotoize","p":"/unprotoize","d":"删除C语言源代码文件中的函数原型"},"uncompress":{"n":"uncompress","p":"/uncompress","d":"用来解压.Z文件"},"squidclient":{"n":"squidclient","p":"/squidclient","d":"squid服务器的客户端管理工具"},"cupsdisable":{"n":"cupsdisable","p":"/cupsdisable","d":"停止指定的打印机"},"consoletype":{"n":"consoletype","p":"/consoletype","d":"输出已连接的终端类型"},"mysqlimport":{"n":"mysqlimport","p":"/mysqlimport","d":"为MySQL服务器用命令行方式导入数据"},"inotifywait":{"n":"inotifywait","p":"/inotifywait","d":"异步文件系统监控机制"},"ssh-keyscan":{"n":"ssh-keyscan","p":"/ssh-keyscan","d":"收集主机公钥的使用工具"},"lsb_release":{"n":"lsb_release","p":"/lsb_release","d":"显示发行版本信息"},"sftp-server":{"n":"sftp-server","p":"/sftp-server","d":"sftp协议的服务器端程序"},"ssh-copy-id":{"n":"ssh-copy-id","p":"/ssh-copy-id","d":"把本地的ssh公钥文件安装到远程主机对应的账户下"},"dpkg-divert":{"n":"dpkg-divert","p":"/dpkg-divert","d":"Debian Linux中创建并管理一个转向列表"},"dpkg-trigger":{"n":"dpkg-trigger","p":"/dpkg-trigger","d":"Debian Linux下的软件包触发器"},"firewall-cmd":{"n":"firewall-cmd","p":"/firewall-cmd","d":"Linux上新用的防火墙软件,跟iptables差不多的工具。"},"convertquota":{"n":"convertquota","p":"/convertquota","d":"把老的配额文件转换为新的格式"},"apt-sortpkgs":{"n":"apt-sortpkgs","p":"/apt-sortpkgs","d":"Debian Linux下对软件包索引文件进行排序的工具"},"bzip2recover":{"n":"bzip2recover","p":"/bzip2recover","d":"恢复被破坏的.bz2压缩包中的文件"},"ypdomainname":{"n":"ypdomainname","p":"/ypdomainname","d":"显示主机的NIS的域名"},"kernelversion":{"n":"kernelversion","p":"/kernelversion","d":"打印当前内核的主版本号"},"nisdomainname":{"n":"nisdomainname","p":"/nisdomainname","d":"显示主机NIS的域名"},"iptables-save":{"n":"iptables-save","p":"/iptables-save","d":"备份iptables的表配置"},"speedtest-cli":{"n":"speedtest-cli","p":"/speedtest-cli","d":"命令行下测试服务器外网速度"},"dnsdomainname":{"n":"dnsdomainname","p":"/dnsdomainname","d":"定义DNS系统中FQDN名称的域名"},"ip6tables-save":{"n":"ip6tables-save","p":"/ip6tables-save","d":"保存ip6tables表配置"},"named-checkzone":{"n":"named-checkzone","p":"/named-checkzone","d":"使用named-checkzone命令可以进行区域文件有效性检查和转换,必须指定区域名称和区域文件名称。"},"iptables-restore":{"n":"iptables-restore","p":"/iptables-restore","d":"还原iptables表的配置"},"dpkg-reconfigure":{"n":"dpkg-reconfigure","p":"/dpkg-reconfigure","d":"Debian Linux中重新配制一个已经安装的软件包"},"dpkg-preconfigure":{"n":"dpkg-preconfigure","p":"/dpkg-preconfigure","d":"Debian Linux中软件包安装之前询问问题"},"ip6tables-restore":{"n":"ip6tables-restore","p":"/ip6tables-restore","d":"还原ip6tables表"},"dpkg-statoverride":{"n":"dpkg-statoverride","p":"/dpkg-statoverride","d":"Debian Linux中覆盖文件的所有权和模式"}} \ No newline at end of file +{"w":{"n":"w","p":"/w","d":"显示目前登入系统的用户信息"},"ab":{"n":"ab","p":"/ab","d":"Apache服务器的性能测试工具"},"ip":{"n":"ip","p":"/ip","d":"网络配置工具"},"ld":{"n":"ld","p":"/ld","d":"将目标文件连接为可执行程序"},"xz":{"n":"xz","p":"/xz","d":"POSIX 平台开发具有高压缩率的工具。"},"ln":{"n":"ln","p":"/ln","d":"用来为文件创件连接"},"ar":{"n":"ar","p":"/ar","d":"建立或修改备存文件,或是从备存文件中抽取文件"},"lp":{"n":"lp","p":"/lp","d":"打印文件或修改排队的打印任务"},"fg":{"n":"fg","p":"/fg","d":"将后台作业放到前台终端运行"},"wc":{"n":"wc","p":"/wc","d":"统计文件的字节数、字数、行数"},"as":{"n":"as","p":"/as","d":"汇编语言编译器"},"at":{"n":"at","p":"/at","d":"在指定时间执行一个任务"},"fc":{"n":"fc","p":"/fc","d":"修改历史命令并执行"},"ls":{"n":"ls","p":"/ls","d":"显示目录内容列表"},"id":{"n":"id","p":"/id","d":"显示用户的ID以及所属群组的ID"},"vi":{"n":"vi","p":"/vi","d":"功能强大的纯文本编辑器"},"bc":{"n":"bc","p":"/bc","d":"算术操作精密运算工具"},"bg":{"n":"bg","p":"/bg","d":"用于将作业放到后台运行"},"ex":{"n":"ex","p":"/ex","d":"启动vim编辑器的ex编辑模式"},"ed":{"n":"ed","p":"/ed","d":"单行纯文本编辑器"},"tr":{"n":"tr","p":"/tr","d":"将字符进行替换压缩和删除"},"mv":{"n":"mv","p":"/mv","d":"用来对文件或目录重新命名"},"du":{"n":"du","p":"/du","d":"显示每个文件和目录的磁盘使用空间"},"nc":{"n":"nc","p":"/nc","d":"命令用于设置路由器。"},"nl":{"n":"nl","p":"/nl","d":"在Linux系统中计算文件内容行号"},"nm":{"n":"nm","p":"/nm","d":"显示二进制目标文件的符号表"},"cd":{"n":"cd","p":"/cd","d":"切换用户当前工作目录"},"od":{"n":"od","p":"/od","d":"输出文件的八进制、十六进制等格式编码的字节"},"pr":{"n":"pr","p":"/pr","d":"将文本文件转换成适合打印的格式"},"su":{"n":"su","p":"/su","d":"用于切换当前用户身份到其他用户身份"},"ps":{"n":"ps","p":"/ps","d":"报告当前系统的进程状态"},"ss":{"n":"ss","p":"/ss","d":"获取socket统计信息,iproute2 包附带的另一个工具,允许你查询 socket 的有关统计信息。"},"sh":{"n":"sh","p":"/sh","d":"shell命令解释器"},"pv":{"n":"pv","p":"/pv","d":"显示当前在命令行执行的命令的进度信息,管道查看器。"},"df":{"n":"df","p":"/df","d":"显示磁盘的相关信息"},"dd":{"n":"dd","p":"/dd","d":"复制文件并对原文件的内容进行转换和格式化处理"},"rm":{"n":"rm","p":"/rm","d":"用于删除给定的文件和目录"},"cu":{"n":"cu","p":"/cu","d":"用于连接另一个系统主机。"},"cp":{"n":"cp","p":"/cp","d":"将源文件或目录复制到目标文件或目录中"},"man":{"n":"man","p":"/man","d":"查看Linux中的指令帮助"},"sar":{"n":"sar","p":"/sar","d":"系统运行状态统计工具"},"rsh":{"n":"rsh","p":"/rsh","d":"连接远程主机并执行命令"},"rpm":{"n":"rpm","p":"/rpm","d":"RPM软件包的管理工具"},"sed":{"n":"sed","p":"/sed","d":"功能强大的流式文本编辑器"},"seq":{"n":"seq","p":"/seq","d":"以指定增量从首数开始打印数字到尾数"},"zip":{"n":"zip","p":"/zip","d":"可以用来解压缩文件"},"cut":{"n":"cut","p":"/cut","d":"连接文件并打印到标准输出设备上"},"set":{"n":"set","p":"/set","d":"显示或设置shell特性及shell变量"},"rcp":{"n":"rcp","p":"/rcp","d":"使在两台Linux主机之间的文件复制操作更简单"},"col":{"n":"col","p":"/col","d":"过滤控制字符"},"pwd":{"n":"pwd","p":"/pwd","d":"绝对路径方式显示用户当前工作目录"},"pvs":{"n":"pvs","p":"/pvs","d":"输出物理卷信息报表"},"cmp":{"n":"cmp","p":"/cmp","d":"比较两个文件是否有差异"},"dig":{"n":"dig","p":"/dig","d":"域名查询工具"},"ssh":{"n":"ssh","p":"/ssh","d":"openssh套件中的客户端连接工具"},"sum":{"n":"sum","p":"/sum","d":"计算文件的校验码和显示块数"},"dnf":{"n":"dnf","p":"/dnf","d":"新一代的RPM软件包管理器"},"php":{"n":"php","p":"/php","d":"PHP语言的命令行接口"},"tac":{"n":"tac","p":"/tac","d":"将文件已行为单位的反序输出"},"cat":{"n":"cat","p":"/cat","d":"连接文件并打印到标准输出设备上"},"cal":{"n":"cal","p":"/cal","d":"显示当前日历或指定日期的日历"},"tar":{"n":"tar","p":"/tar","d":"Linux下的归档使用工具,用来打包和备份。"},"tee":{"n":"tee","p":"/tee","d":"把数据重定向到给定文件和屏幕上"},"top":{"n":"top","p":"/top","d":"显示或管理执行中的程序"},"bye":{"n":"bye","p":"/bye","d":"命令用于中断FTP连线并结束程序。。"},"scp":{"n":"scp","p":"/scp","d":"加密的方式在本地主机和远程主机之间复制文件"},"elm":{"n":"elm","p":"/elm","d":"纯文本邮件客户端程序"},"env":{"n":"env","p":"/env","d":"显示系统中已存在的环境变量"},"tty":{"n":"tty","p":"/tty","d":"显示连接到当前标准输入的终端设备文件名。"},"awk":{"n":"awk","p":"/awk","d":"文本和数据进行处理的编程语言"},"lpr":{"n":"lpr","p":"/lpr","d":"将文件发送给指定打印机进行打印"},"atq":{"n":"atq","p":"/atq","d":"列出当前用户的at任务列表"},"lpq":{"n":"lpq","p":"/lpq","d":"显示打印队列中的打印任务的状态信息"},"arp":{"n":"arp","p":"/arp","d":"显示和修改IP到MAC转换表"},"lpc":{"n":"lpc","p":"/lpc","d":"命令行方式打印机控制程序"},"arj":{"n":"arj","p":"/arj","d":"用于创建和管理.arj压缩包"},"who":{"n":"who","p":"/who","d":"显示目前登录系统的用户信息"},"fmt":{"n":"fmt","p":"/fmt","d":"读取文件后优化处理并输出"},"ftp":{"n":"ftp","p":"/ftp","d":"用来设置文件系统相关功能"},"lha":{"n":"lha","p":"/lha","d":"压缩或解压缩lzh格式文件"},"let":{"n":"let","p":"/let","d":"简单的计算器"},"gcc":{"n":"gcc","p":"/gcc","d":"基于C/C++的编译器"},"gdb":{"n":"gdb","p":"/gdb","d":"功能强大的程序调试器"},"ldd":{"n":"ldd","p":"/ldd","d":"打印程序或者库文件所依赖的共享库列表"},"yes":{"n":"yes","p":"/yes","d":"重复打印指定字符串"},"git":{"n":"git","p":"/git","d":"是目前世界上最先进的分布式版本控制系统"},"gpm":{"n":"gpm","p":"/gpm","d":"提供文字模式下的滑鼠事件处理"},"joe":{"n":"joe","p":"/joe","d":"强大的纯文本编辑器"},"jed":{"n":"jed","p":"/jed","d":"主要用于编辑代码的编辑器"},"yum":{"n":"yum","p":"/yum","d":"基于RPM的软件包管理器"},"rev":{"n":"rev","p":"/rev","d":"将文件内容以字符为单位反序输出"},"chfn":{"n":"chfn","p":"/chfn","d":"用来改变finger命令显示的信息"},"sudo":{"n":"sudo","p":"/sudo","d":"以其他身份来执行命令"},"pssh":{"n":"pssh","p":"/pssh","d":"批量管理执行"},"bind":{"n":"bind","p":"/bind","d":"显示或设置键盘按键与其相关的功能"},"dirs":{"n":"dirs","p":"/dirs","d":"显示目录记录"},"stty":{"n":"stty","p":"/stty","d":"修改终端命令行的相关设置"},"popd":{"n":"popd","p":"/popd","d":"用于删除目录栈中的记录"},"stat":{"n":"stat","p":"/stat","d":"用于显示文件的状态信息"},"pmap":{"n":"pmap","p":"/pmap","d":"报告进程的内存映射关系"},"ping":{"n":"ping","p":"/ping","d":"测试主机之间网络的连通性"},"pico":{"n":"pico","p":"/pico","d":"功能强大全屏幕的文本编辑器"},"sshd":{"n":"sshd","p":"/sshd","d":"openssh软件套件中的服务器守护进程"},"perl":{"n":"perl","p":"/perl","d":"perl语言解释器"},"uniq":{"n":"uniq","p":"/uniq","d":"报告或忽略文件中的重复行"},"nmap":{"n":"nmap","p":"/nmap","d":"网络探测和安全审核"},"chsh":{"n":"chsh","p":"/chsh","d":"用来更换登录系统时使用的shell"},"type":{"n":"type","p":"/type","d":"显示指定命令的类型"},"nice":{"n":"nice","p":"/nice","d":"改变程序执行的优先权等级"},"sort":{"n":"sort","p":"/sort","d":"将文件进行排序并输出"},"dpkg":{"n":"dpkg","p":"/dpkg","d":"Debian Linux系统上安装、创建和管理软件包"},"dris":{"n":"dris","p":"/dris","d":"显示和清空目录堆栈中的内容"},"nano":{"n":"nano","p":"/nano","d":"字符终端文本编辑器"},"xset":{"n":"xset","p":"/xset","d":"设置X-Window系统中的用户爱好的实用工具"},"dump":{"n":"dump","p":"/dump","d":"用于备份ext2或者ext3文件系统"},"sftp":{"n":"sftp","p":"/sftp","d":"交互式的文件传输程序"},"more":{"n":"more","p":"/more","d":"显示文件内容,每次显示一屏"},"echo":{"n":"echo","p":"/echo","d":"输出指定的字符串或者变量"},"tree":{"n":"tree","p":"/tree","d":"树状图列出目录的内容"},"mkfs":{"n":"mkfs","p":"/mkfs","d":"用于在设备上创建Linux文件系统"},"mesg":{"n":"mesg","p":"/mesg","d":"设置当前终端的写权限"},"trap":{"n":"trap","p":"/trap","d":"指定在接收到信号后将要采取的动作"},"make":{"n":"make","p":"/make","d":"GNU的工程化编译工具"},"atop":{"n":"atop","p":"/atop","d":"监控Linux系统资源与进程的工具"},"mail":{"n":"mail","p":"/mail","d":"命令行下发送和接收电子邮件"},"lynx":{"n":"lynx","p":"/lynx","d":"纯文本模式的网页浏览器"},"comm":{"n":"comm","p":"/comm","d":"两个文件之间的比较"},"lsof":{"n":"lsof","p":"/lsof","d":"显示Linux系统当前已打开的所有文件列表"},"zcat":{"n":"zcat","p":"/zcat","d":"显示压缩包中文件的内容"},"exec":{"n":"exec","p":"/exec","d":"调用并执行指定的命令"},"exit":{"n":"exit","p":"/exit","d":"退出当前的shell"},"tput":{"n":"tput","p":"/tput","d":"通过terminfo数据库对终端会话进行初始化和操作"},"lprm":{"n":"lprm","p":"/lprm","d":"删除打印队列中的打印任务"},"atrm":{"n":"atrm","p":"/atrm","d":"删除待执行任务队列中的指定任务"},"expr":{"n":"expr","p":"/expr","d":"一款表达式计算工具"},"time":{"n":"time","p":"/time","d":"统计给定命令所花费的总时间"},"tftp":{"n":"tftp","p":"/tftp","d":"在本机和tftp服务器之间使用TFTP协议传输文件"},"cpio":{"n":"cpio","p":"/cpio","d":"用来建立、还原备份档的工具程序"},"test":{"n":"test","p":"/test","d":"shell环境中测试条件表达式工具"},"file":{"n":"file","p":"/file","d":"用来探测给定文件的类型。"},"find":{"n":"find","p":"/find","d":"在指定目录下查找文件"},"arpd":{"n":"arpd","p":"/arpd","d":"收集免费ARP信息"},"look":{"n":"look","p":"/look","d":"显示文件中以指定字符串开头的任意行"},"axel":{"n":"axel","p":"/axel","d":"多线程下载工具"},"wait":{"n":"wait","p":"/wait","d":"等待进程执行完后返回"},"fold":{"n":"fold","p":"/fold","d":"控制文件内容输出时所占用的屏幕宽度"},"free":{"n":"free","p":"/free","d":"显示内存的使用情况"},"fsck":{"n":"fsck","p":"/fsck","d":"检查并且试图修复文件系统中的错误"},"talk":{"n":"talk","p":"/talk","d":"让用户和其他用户聊天"},"lilo":{"n":"lilo","p":"/lilo","d":"安装核心载入开机管理程序"},"curl":{"n":"curl","p":"/curl","d":"利用URL规则在命令行下工作的文件传输工具"},"lftp":{"n":"lftp","p":"/lftp","d":"优秀的文件客户端程序"},"wget":{"n":"wget","p":"/wget","d":"Linux系统下载文件工具"},"less":{"n":"less","p":"/less","d":"分屏上下翻页浏览文件内容"},"date":{"n":"date","p":"/date","d":"显示或设置系统时间与日期"},"gcov":{"n":"gcov","p":"/gcov","d":"测试程序的代码覆盖率的工具"},"znew":{"n":"znew","p":"/znew","d":"将.Z压缩包重新转化为gzip命令压缩的.gz压缩包"},"read":{"n":"read","p":"/read","d":"从键盘读取变量值"},"tail":{"n":"tail","p":"/tail","d":"在屏幕上显示指定文件的末尾若干行"},"last":{"n":"last","p":"/last","d":"列出目前与过去登入系统的用户相关信息"},"wall":{"n":"wall","p":"/wall","d":"向系统当前所有打开的终端上输出信息"},"kill":{"n":"kill","p":"/kill","d":"删除执行中的程序或工作"},"sync":{"n":"sync","p":"/sync","d":"用于强制被改变的内容立刻写入磁盘"},"grep":{"n":"grep","p":"/grep","d":"强大的文本搜索工具"},"join":{"n":"join","p":"/join","d":"两个文件中指定栏位内容相同的行连接起来"},"pwck":{"n":"pwck","p":"/pwck","d":"用来验证系统认证文件内容和格式的完整性"},"jobs":{"n":"jobs","p":"/jobs","d":"显示Linux中的任务列表及任务状态"},"arch":{"n":"arch","p":"/arch","d":"显示当前主机的硬件架构类型"},"ipcs":{"n":"ipcs","p":"/ipcs","d":"分析消息队列共享内存和信号量 "},"diff":{"n":"diff","p":"/diff","d":"比较给定的两个文件的不同"},"init":{"n":"init","p":"/init","d":"init进程是所有Linux进程的父进程"},"grub":{"n":"grub","p":"/grub","d":"多重引导程序grub的命令行shell工具"},"info":{"n":"info","p":"/info","d":"Linux下info格式的帮助指令"},"ifup":{"n":"ifup","p":"/ifup","d":"激活指定的网络接口"},"gzip":{"n":"gzip","p":"/gzip","d":"用来压缩文件"},"halt":{"n":"halt","p":"/halt","d":"关闭正在运行的Linux操作系统"},"pvck":{"n":"pvck","p":"/pvck","d":"检测物理卷的LVM元数据的一致性"},"head":{"n":"head","p":"/head","d":"在屏幕上显示指定文件的开头若干行"},"help":{"n":"help","p":"/help","d":"显示帮助信息"},"htop":{"n":"htop","p":"/htop","d":"[非内部命令]一个互动的进程查看器,可以动态观察系统进程状况。"},"host":{"n":"host","p":"/host","d":"常用的分析域名查询工具"},"bzcat":{"n":"bzcat","p":"/bzcat","d":"解压缩指定的.bz2文件"},"bzcmp":{"n":"bzcmp","p":"/bzcmp","d":"比较两个压缩包中的文件"},"touch":{"n":"touch","p":"/touch","d":"创建新的空文件"},"ifcfg":{"n":"ifcfg","p":"/ifcfg","d":"置Linux中的网络接口参数"},"tload":{"n":"tload","p":"/tload","d":"显示系统负载状况"},"bzip2":{"n":"bzip2","p":"/bzip2","d":"将文件压缩成bz2格式"},"iftop":{"n":"iftop","p":"/iftop","d":"一款实时流量监控工具"},"gzexe":{"n":"gzexe","p":"/gzexe","d":"用来压缩可执行文件"},"tailf":{"n":"tailf","p":"/tailf","d":"在屏幕上显示指定文件的末尾若干行内容,通常用于日志文件的跟踪输出。"},"chage":{"n":"chage","p":"/chage","d":"修改帐号和密码的有效期限"},"chcon":{"n":"chcon","p":"/chcon","d":"修改对象(文件)的安全上下文"},"chgrp":{"n":"chgrp","p":"/chgrp","d":"用来变更文件或目录的所属群组"},"iotop":{"n":"iotop","p":"/iotop","d":"用来监视磁盘I/O使用状况的工具"},"alias":{"n":"alias","p":"/alias","d":"用来设置指令的别名"},"zfore":{"n":"zfore","p":"/zfore","d":"强制为gzip格式的压缩文件添加.gz后缀"},"chmod":{"n":"chmod","p":"/chmod","d":"用来变更文件或目录的权限"},"ipcrm":{"n":"ipcrm","p":"/ipcrm","d":"删除消息队列、信号集、或者共享内存标识"},"grpck":{"n":"grpck","p":"/grpck","d":"用于验证组文件的完整性"},"iperf":{"n":"iperf","p":"/iperf","d":"网络性能测试工具"},"chown":{"n":"chown","p":"/chown","d":"用来变更文件或目录的拥有者或所属群组"},"umask":{"n":"umask","p":"/umask","d":"用来设置限制新建文件权限的掩码"},"cksum":{"n":"cksum","p":"/cksum","d":"检查文件的CRC是否正确"},"uname":{"n":"uname","p":"/uname","d":"显示Linux系统信息"},"kexec":{"n":"kexec","p":"/kexec","d":"从当前正在运行的内核引导到一个新内核"},"lastb":{"n":"lastb","p":"/lastb","d":"列出登入系统失败的用户相关信息"},"xinit":{"n":"xinit","p":"/xinit","d":"是Linux下X-Window系统的初始化程序"},"xhost":{"n":"xhost","p":"/xhost","d":"制哪些X客户端能够在X服务器上显示"},"fuser":{"n":"fuser","p":"/fuser","d":"使用文件或文件结构识别进程"},"squid":{"n":"squid","p":"/squid","d":"squid服务器守护进程"},"split":{"n":"split","p":"/split","d":"分割任意大小的文件"},"xclip":{"n":"xclip","p":"/xclip","d":"管理 X 粘贴板"},"spell":{"n":"spell","p":"/spell","d":"对文件进行拼写检查"},"unarj":{"n":"unarj","p":"/unarj","d":"解压缩由arj命令创建的压缩包"},"clear":{"n":"clear","p":"/clear","d":"清除当前屏幕终端上的任何信息"},"login":{"n":"login","p":"/login","d":"登录系统或切换用户身份"},"blkid":{"n":"blkid","p":"/blkid","d":"查看块设备的文件系统类型、LABEL、UUID等信息"},"xauth":{"n":"xauth","p":"/xauth","d":"显示和编辑被用于连接X服务器的认证信息"},"sleep":{"n":"sleep","p":"/sleep","d":"将目前动作延迟一段时间"},"skill":{"n":"skill","p":"/skill","d":"向选定的进程发送信号冻结进程"},"fgrep":{"n":"fgrep","p":"/fgrep","d":"为文件搜索文字字符串"},"fdisk":{"n":"fdisk","p":"/fdisk","d":"查看磁盘使用情况和磁盘分区"},"shopt":{"n":"shopt","p":"/shopt","d":"显示和设置shell操作选项"},"clock":{"n":"clock","p":"/clock","d":"用于调整 RTC 时间。"},"unset":{"n":"unset","p":"/unset","d":"删除指定的shell变量或函数"},"unzip":{"n":"unzip","p":"/unzip","d":"用于解压缩由zip命令压缩的压缩包"},"xargs":{"n":"xargs","p":"/xargs","d":"给其他命令传递参数的一个过滤器"},"lsblk":{"n":"lsblk","p":"/lsblk","d":"列出块设备信息"},"lscpu":{"n":"lscpu","p":"/lscpu","d":"显示有关CPU架构的信息"},"lsmod":{"n":"lsmod","p":"/lsmod","d":"显示已载入系统的模块"},"lspci":{"n":"lspci","p":"/lspci","d":"显示当前主机的所有PCI总线信息"},"lsusb":{"n":"lsusb","p":"/lsusb","d":"显示本机的USB设备列表信息"},"colrm":{"n":"colrm","p":"/colrm","d":"删除文件中的指定列"},"write":{"n":"write","p":"/write","d":"向指定登录用户终端上发送信息"},"rsync":{"n":"rsync","p":"/rsync","d":"远程数据同步工具"},"rpmdb":{"n":"rpmdb","p":"/rpmdb","d":"初始化和重建RPM数据库"},"route":{"n":"route","p":"/route","d":"显示并设置Linux中静态路由表"},"emacs":{"n":"emacs","p":"/emacs","d":"功能强大的全屏文本编辑器"},"mailq":{"n":"mailq","p":"/mailq","d":"显示待发送的邮件队列"},"rmmod":{"n":"rmmod","p":"/rmmod","d":"从运行的内核中移除指定的内核模块"},"eject":{"n":"eject","p":"/eject","d":"用来退出抽取式设备"},"rmdir":{"n":"rmdir","p":"/rmdir","d":"用来删除空目录"},"egrep":{"n":"egrep","p":"/egrep","d":"在文件内查找指定的字符串"},"rexec":{"n":"rexec","p":"/rexec","d":"运程执行Linux系统下命令 "},"mkdir":{"n":"mkdir","p":"/mkdir","d":"用来创建目录"},"users":{"n":"users","p":"/users","d":"显示当前登录系统的所有用户"},"mknod":{"n":"mknod","p":"/mknod","d":"创建字符设备文件和块设备文件"},"quota":{"n":"quota","p":"/quota","d":"显示磁盘已使用的空间与限制"},"dhcpd":{"n":"dhcpd","p":"/dhcpd","d":"运行DHCP服务器。"},"mount":{"n":"mount","p":"/mount","d":"用于挂载Linux系统外的文件。"},"diff3":{"n":"diff3","p":"/diff3","d":"比较3个文件不同的地方"},"pushd":{"n":"pushd","p":"/pushd","d":"将目录加入命令堆叠中"},"dmesg":{"n":"dmesg","p":"/dmesg","d":"显示Linux系统启动信息"},"mysql":{"n":"mysql","p":"/mysql","d":"MySQL服务器客户端工具"},"which":{"n":"which","p":"/which","d":"查找并显示给定命令的绝对路径"},"pkill":{"n":"pkill","p":"/pkill","d":"可以按照进程名杀死进程"},"pidof":{"n":"pidof","p":"/pidof","d":"查找指定名称的进程的进程号ID号"},"dstat":{"n":"dstat","p":"/dstat","d":"通用的系统资源统计工具"},"watch":{"n":"watch","p":"/watch","d":"可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令"},"ncftp":{"n":"ncftp","p":"/ncftp","d":"是增强的的FTP工具"},"ngrep":{"n":"ngrep","p":"/ngrep","d":"方便的数据包匹配和显示工具"},"pgrep":{"n":"pgrep","p":"/pgrep","d":"设置用户的认证信息,包括用户密码、密码过期时间等"},"batch":{"n":"batch","p":"/batch","d":"在系统不繁忙的时候执行定时任务"},"nmcli":{"n":"nmcli","p":"/nmcli","d":"地址配置工具"},"nohup":{"n":"nohup","p":"/nohup","d":"将程序以忽略挂起信号的方式运行起来"},"pfctl":{"n":"pfctl","p":"/pfctl","d":"PF防火墙的配置命令"},"patch":{"n":"patch","p":"/patch","d":"为开放源代码软件安装补丁程序"},"iconv":{"n":"iconv","p":"/iconv","d":"转换文件的编码方式"},"paste":{"n":"paste","p":"/paste","d":"将多个文件按列队列合并"},"lsattr":{"n":"lsattr","p":"/lsattr","d":"查看文件的第二扩展文件系统属性"},"passwd":{"n":"passwd","p":"/passwd","d":"用于让用户可以更改自己的密码"},"hping3":{"n":"hping3","p":"/hping3","d":"测试网络及主机的安全"},"ntsysv":{"n":"ntsysv","p":"/ntsysv","d":"集中管理系统的各种服务"},"vmstat":{"n":"vmstat","p":"/vmstat","d":"显示虚拟内存状态"},"arping":{"n":"arping","p":"/arping","d":"通过发送ARP协议报文测试网络"},"whatis":{"n":"whatis","p":"/whatis","d":"查询一个命令执行什么功能"},"e2fsck":{"n":"e2fsck","p":"/e2fsck","d":"用于检查第二扩展文件系统的完整性"},"printf":{"n":"printf","p":"/printf","d":"格式化并输出结果"},"pstack":{"n":"pstack","p":"/pstack","d":"显示每个进程的栈跟踪"},"pstree":{"n":"pstree","p":"/pstree","d":"以树状图的方式展现进程之间的派生关系"},"mtools":{"n":"mtools","p":"/mtools","d":"显示mtools支持的指令"},"mpstat":{"n":"mpstat","p":"/mpstat","d":"显示各个可用CPU的状态"},"vdfuse":{"n":"vdfuse","p":"/vdfuse","d":"VirtualBox软件挂载VDI分区文件工具"},"pvscan":{"n":"pvscan","p":"/pvscan","d":"扫描系统中所有硬盘的物理卷列表"},"mktemp":{"n":"mktemp","p":"/mktemp","d":"创建临时文件供shell脚本使用"},"pwconv":{"n":"pwconv","p":"/pwconv","d":"用来开启用户的投影密码"},"hostid":{"n":"hostid","p":"/hostid","d":"用来打印当前主机的数字化标识"},"mkswap":{"n":"mkswap","p":"/mkswap","d":"建立和设置SWAP交换分区"},"uupick":{"n":"uupick","p":"/uupick","d":"命令处理传送进来的文件。"},"rcconf":{"n":"rcconf","p":"/rcconf","d":"Debian Linux下的运行等级服务配置工具"},"depmod":{"n":"depmod","p":"/depmod","d":"分析可载入模块的相依性"},"reboot":{"n":"reboot","p":"/reboot","d":"重新启动正在运行的Linux操作系统"},"reject":{"n":"reject","p":"/reject","d":"指示打印系统拒绝发往指定目标打印机的打印任务"},"rename":{"n":"rename","p":"/rename","d":"用字符串替换的方式批量改变文件名"},"renice":{"n":"renice","p":"/renice","d":"修改正在运行的进程的调度优先级"},"resize":{"n":"resize","p":"/resize","d":"命令设置终端机视窗的大小。"},"uucico":{"n":"uucico","p":"/uucico","d":"UUCP文件传输服务程序。"},"mke2fs":{"n":"mke2fs","p":"/mke2fs","d":"创建磁盘分区上的“etc2/etc3”文件系统"},"whoami":{"n":"whoami","p":"/whoami","d":"打印当前有效的用户名称"},"rlogin":{"n":"rlogin","p":"/rlogin","d":"从当前终端登录到远程Linux主机"},"md5sum":{"n":"md5sum","p":"/md5sum","d":"计算和校验文件报文摘要的工具程序"},"elinks":{"n":"elinks","p":"/elinks","d":"纯文本界面的WWW浏览器"},"enable":{"n":"enable","p":"/enable","d":"启动或关闭shell内建命令"},"csplit":{"n":"csplit","p":"/csplit","d":"将一个大文件分割成小的碎片文件"},"lvscan":{"n":"lvscan","p":"/lvscan","d":"扫描逻辑卷"},"accept":{"n":"accept","p":"/accept","d":"指示打印系统接受发往指定目标打印机的打印任务"},"uptime":{"n":"uptime","p":"/uptime","d":"查看Linux系统负载信息"},"screen":{"n":"screen","p":"/screen","d":"用于命令行终端切换"},"seinfo":{"n":"seinfo","p":"/seinfo","d":"查询SELinux的策略提供多少相关规则"},"ltrace":{"n":"ltrace","p":"/ltrace","d":"用来跟踪进程调用库函数的情况"},"setpci":{"n":"setpci","p":"/setpci","d":"查询和配置PCI设备的使用工具"},"parted":{"n":"parted","p":"/parted","d":"磁盘分区和分区大小调整工具"},"expand":{"n":"expand","p":"/expand","d":"将文件的制表符转换为空白字符"},"lpstat":{"n":"lpstat","p":"/lpstat","d":"显示CUPS中打印机的状态信息"},"export":{"n":"export","p":"/export","d":"设置或显示系统环境变量"},"unlink":{"n":"unlink","p":"/unlink","d":"系统调用函数unlink去删除指定的文件"},"findfs":{"n":"findfs","p":"/findfs","d":"标签或UUID查找文件系统"},"finger":{"n":"finger","p":"/finger","d":"用于查找并显示用户信息"},"logout":{"n":"logout","p":"/logout","d":"退出当前登录的Shell"},"logger":{"n":"logger","p":"/logger","d":"在系统日志中记录相应条目"},"source":{"n":"source","p":"/source","d":"在当前Shell环境中从指定文件读取和执行命令,命令返回退出状态。"},"locate":{"n":"locate","p":"/locate","d":"Apache服务器的性能测试工具"},"lnstat":{"n":"lnstat","p":"/lnstat","d":"显示Linux系统的网路状态"},"ftptop":{"n":"ftptop","p":"/ftptop","d":"proftpd服务器的连接状态"},"ftpwho":{"n":"ftpwho","p":"/ftpwho","d":"显示当前每个ftp会话信息"},"jwhois":{"n":"jwhois","p":"/jwhois","d":"whois 客户端服务"},"groups":{"n":"groups","p":"/groups","d":"用来打印指定用户所属的工作组"},"umount":{"n":"umount","p":"/umount","d":"用于卸载已经加载的文件系统"},"ispell":{"n":"ispell","p":"/ispell","d":"检查文件中出现的拼写错误"},"ulimit":{"n":"ulimit","p":"/ulimit","d":"控制shell程序的资源"},"chroot":{"n":"chroot","p":"/chroot","d":"把根目录换成指定的目的目录"},"startx":{"n":"startx","p":"/startx","d":"用来启动X Window"},"iptraf":{"n":"iptraf","p":"/iptraf","d":"实时地监视网卡流量"},"strace":{"n":"strace","p":"/strace","d":"跟踪系统调用和信号"},"ipcalc":{"n":"ipcalc","p":"/ipcalc","d":"简单的IP地址计算器"},"iostat":{"n":"iostat","p":"/iostat","d":"监视系统输入输出设备和CPU的使用情况"},"insmod":{"n":"insmod","p":"/insmod","d":"将给定的模块加载到内核中"},"swapon":{"n":"swapon","p":"/swapon","d":"激活Linux系统中交换空间"},"chattr":{"n":"chattr","p":"/chattr","d":"用来改变文件属性"},"sysctl":{"n":"sysctl","p":"/sysctl","d":"时动态地修改内核的运行参数"},"syslog":{"n":"syslog","p":"/syslog","d":"系统默认的日志守护进程"},"gunzip":{"n":"gunzip","p":"/gunzip","d":"用来解压缩文件"},"indent":{"n":"indent","p":"/indent","d":"格式化C语言的源文件"},"cancel":{"n":"cancel","p":"/cancel","d":"取消已存在的打印任务"},"bzmore":{"n":"bzmore","p":"/bzmore","d":"查看bzip2压缩过的文本文件的内容"},"bzless":{"n":"bzless","p":"/bzless","d":"增强.bz2压缩包查看器"},"telint":{"n":"telint","p":"/telint","d":"切换当前正在运行系统的运行等级"},"telnet":{"n":"telnet","p":"/telnet","d":"登录远程主机和管理"},"ifstat":{"n":"ifstat","p":"/ifstat","d":"统计网络接口流量状态"},"bzgrep":{"n":"bzgrep","p":"/bzgrep","d":"使用正则表达式搜索.bz2压缩包中文件"},"ifdown":{"n":"ifdown","p":"/ifdown","d":"禁用指定的网络接口"},"bzdiff":{"n":"bzdiff","p":"/bzdiff","d":"直接比较两个.bz2压缩包中文件的不同"},"hdparm":{"n":"hdparm","p":"/hdparm","d":"显示与设定硬盘的参数"},"vgscan":{"n":"vgscan","p":"/vgscan","d":"扫描并显示系统中的卷组"},"setfacl":{"n":"setfacl","p":"/setfacl","d":"设置文件访问控制列表"},"dirname":{"n":"dirname","p":"/dirname","d":"去除文件名中的非目录部分"},"apt-get":{"n":"apt-get","p":"/apt-get","d":"Debian Linux发行版中的APT软件包管理工具"},"lpadmin":{"n":"lpadmin","p":"/lpadmin","d":"配置CUPS套件中的打印机和类"},"apt-key":{"n":"apt-key","p":"/apt-key","d":"管理Debian Linux系统中的软件包密钥"},"zipinfo":{"n":"zipinfo","p":"/zipinfo","d":"用来列出压缩文件信息"},"history":{"n":"history","p":"/history","d":"用于显示历史命令"},"nethogs":{"n":"nethogs","p":"/nethogs","d":"终端下的网络流量监控工具"},"slabtop":{"n":"slabtop","p":"/slabtop","d":"实时显示内核slab内存缓存信息"},"netstat":{"n":"netstat","p":"/netstat","d":"查看Linux中网络系统状态信息"},"slocate":{"n":"slocate","p":"/slocate","d":"命令查找文件或目录"},"nfsstat":{"n":"nfsstat","p":"/nfsstat","d":"列出NFS客户端和服务器的工作状态"},"lftpget":{"n":"lftpget","p":"/lftpget","d":"调用lftp指令下载指定的文件"},"volname":{"n":"volname","p":"/volname","d":"显示指定的ISO-9660格式的设备的卷名称"},"ftpshut":{"n":"ftpshut","p":"/ftpshut","d":"在指定的时间关闭FTP服务器"},"quotaon":{"n":"quotaon","p":"/quotaon","d":"激活Linux内核中指定文件系统的磁盘配额功能"},"apropos":{"n":"apropos","p":"/apropos","d":"在 whatis 数据库中查找字符串"},"install":{"n":"install","p":"/install","d":"安装或升级软件或备份数据"},"declare":{"n":"declare","p":"/declare","d":"声明或显示shell变量"},"readelf":{"n":"readelf","p":"/readelf","d":"用于显示elf格式文件的信息"},"ssh-add":{"n":"ssh-add","p":"/ssh-add","d":"把专用密钥添加到ssh-agent的高速缓存中"},"unalias":{"n":"unalias","p":"/unalias","d":"删除由alias设置的别名"},"hexdump":{"n":"hexdump","p":"/hexdump","d":"显示文件十六进制格式"},"nologin":{"n":"nologin","p":"/nologin","d":"拒绝用户登录系统"},"ntpdate":{"n":"ntpdate","p":"/ntpdate","d":"使用网络计时协议(NTP)设置日期和时间"},"edquota":{"n":"edquota","p":"/edquota","d":"用于编辑指定用户或工作组磁盘配额"},"mkisofs":{"n":"mkisofs","p":"/mkisofs","d":"建立ISO 9660映像文件"},"restore":{"n":"restore","p":"/restore","d":"所进行的操作和dump指令相反"},"gpasswd":{"n":"gpasswd","p":"/gpasswd","d":"Linux下工作组文件的管理工具"},"strings":{"n":"strings","p":"/strings","d":"在对象文件或二进制文件中查找可打印的字符串"},"openssl":{"n":"openssl","p":"/openssl","d":"强大的安全套接字层密码库"},"killall":{"n":"killall","p":"/killall","d":"使用进程的名称来杀死一组进程"},"ethtool":{"n":"ethtool","p":"/ethtool","d":"显示或修改以太网卡的配置信息"},"swapoff":{"n":"swapoff","p":"/swapoff","d":"关闭指定的交换空间"},"usermod":{"n":"usermod","p":"/usermod","d":"用于修改用户的基本信息"},"e2label":{"n":"e2label","p":"/e2label","d":"设置第二扩展文件系统的卷标"},"logname":{"n":"logname","p":"/logname","d":"用来显示用户名称"},"pathchk":{"n":"pathchk","p":"/pathchk","d":"检查文件中不可移植的部分"},"systool":{"n":"systool","p":"/systool","d":"显示基于总线、类和拓扑显示系统中设备的信息"},"hwclock":{"n":"hwclock","p":"/hwclock","d":"显示与设定硬件时钟"},"lastlog":{"n":"lastlog","p":"/lastlog","d":"显示系统中所有用户最近一次登录信息"},"rpmsign":{"n":"rpmsign","p":"/rpmsign","d":"使用RPM软件包的签名管理工具"},"userdel":{"n":"userdel","p":"/userdel","d":"用于删除给定的用户以及与用户相关的文件"},"tcpdump":{"n":"tcpdump","p":"/tcpdump","d":"一款sniffer工具,是Linux上的抓包工具,嗅探器。"},"builtin":{"n":"builtin","p":"/builtin","d":"执行shell内部命令"},"crontab":{"n":"crontab","p":"/crontab","d":"提交和管理用户的需要周期性执行的任务"},"logsave":{"n":"logsave","p":"/logsave","d":"将命令的输出信息保存到指定的日志文件"},"useradd":{"n":"useradd","p":"/useradd","d":"创建的新的系统用户"},"bunzip2":{"n":"bunzip2","p":"/bunzip2","d":"创一个bz2文件压缩包"},"grpconv":{"n":"grpconv","p":"/grpconv","d":"用来开启群组的投影密码"},"ppp-off":{"n":"ppp-off","p":"/ppp-off","d":"关闭ppp连线"},"losetup":{"n":"losetup","p":"/losetup","d":"设定与控制循环(loop)设备"},"command":{"n":"command","p":"/command","d":"调用并执行指定的命令"},"service":{"n":"service","p":"/service","d":"控制系统服务的实用工具"},"whereis":{"n":"whereis","p":"/whereis","d":"查找二进制程序、代码等相关文件路径"},"objdump":{"n":"objdump","p":"/objdump","d":"显示二进制文件信息"},"lvremove":{"n":"lvremove","p":"/lvremove","d":"删除指定LVM逻辑卷"},"diffstat":{"n":"diffstat","p":"/diffstat","d":"显示diff命令输出信息的柱状图"},"pvchange":{"n":"pvchange","p":"/pvchange","d":"修改物理卷属性"},"updatedb":{"n":"updatedb","p":"/updatedb","d":"创建或更新slocate命令所必需的数据库文件"},"arpwatch":{"n":"arpwatch","p":"/arpwatch","d":"监听网络上ARP的记录"},"pvcreate":{"n":"pvcreate","p":"/pvcreate","d":"将物理硬盘分区初始化为物理卷"},"basename":{"n":"basename","p":"/basename","d":"打印目录或者文件的基本名称"},"pvremove":{"n":"pvremove","p":"/pvremove","d":"删除一个存在的物理卷"},"dhcrelay":{"n":"dhcrelay","p":"/dhcrelay","d":"使用dhcrelay命令可以提供中继DHCP和BOOTP请求"},"shutdown":{"n":"shutdown","p":"/shutdown","d":"用来执行系统关机的命令"},"ldconfig":{"n":"ldconfig","p":"/ldconfig","d":"动态链接库管理命令"},"zipsplit":{"n":"zipsplit","p":"/zipsplit","d":"将较大的zip压缩包分割成各个较小的压缩包"},"mkinitrd":{"n":"mkinitrd","p":"/mkinitrd","d":"建立要载入ramdisk的映像文件"},"logwatch":{"n":"logwatch","p":"/logwatch","d":"可定制和可插入式的日志监视系统"},"pwunconv":{"n":"pwunconv","p":"/pwunconv","d":"用来关闭用户的投影密码"},"unexpand":{"n":"unexpand","p":"/unexpand","d":"将文件的空白字符转换为制表符"},"groupmod":{"n":"groupmod","p":"/groupmod","d":"更改群组识别码或名称"},"groupdel":{"n":"groupdel","p":"/groupdel","d":"用于删除指定的工作组"},"quotaoff":{"n":"quotaoff","p":"/quotaoff","d":"关闭Linux内核中指定文件系统的磁盘配额功能"},"nslookup":{"n":"nslookup","p":"/nslookup","d":"查询域名DNS信息的工具"},"lvcreate":{"n":"lvcreate","p":"/lvcreate","d":"用于创建LVM的逻辑卷"},"modprobe":{"n":"modprobe","p":"/modprobe","d":"自动处理可载入模块"},"groupadd":{"n":"groupadd","p":"/groupadd","d":"用于创建一个新的工作组"},"lvextend":{"n":"lvextend","p":"/lvextend","d":"扩展逻辑卷空间"},"readonly":{"n":"readonly","p":"/readonly","d":"定义只读shell变量或函数"},"lvreduce":{"n":"lvreduce","p":"/lvreduce","d":"收缩逻辑卷空间"},"htdigest":{"n":"htdigest","p":"/htdigest","d":"Apache服务器内置工具"},"vgrename":{"n":"vgrename","p":"/vgrename","d":"使用vgrename命令可以重命名卷组的名称。"},"lvresize":{"n":"lvresize","p":"/lvresize","d":"调整逻辑卷空间大小"},"repquota":{"n":"repquota","p":"/repquota","d":"报表的格式输出磁盘空间限制的状态"},"chpasswd":{"n":"chpasswd","p":"/chpasswd","d":"批量更新用户口令的工具"},"xlsfonts":{"n":"xlsfonts","p":"/xlsfonts","d":"列出X Server使用的字体"},"aptitude":{"n":"aptitude","p":"/aptitude","d":"Debian Linux系统中软件包管理工具"},"ftpcount":{"n":"ftpcount","p":"/ftpcount","d":"显示目前已FTP登入的用户人数"},"vgremove":{"n":"vgremove","p":"/vgremove","d":"用于用户删除LVM卷组"},"exportfs":{"n":"exportfs","p":"/exportfs","d":"管理NFS共享文件系统列表"},"blockdev":{"n":"blockdev","p":"/blockdev","d":"从命令行调用区块设备控制程序"},"hostname":{"n":"hostname","p":"/hostname","d":"显示和设置系统的主机名"},"dpkg-deb":{"n":"dpkg-deb","p":"/dpkg-deb","d":"Debian Linux下的软件包管理工具"},"dos2unix":{"n":"dos2unix","p":"/dos2unix","d":"将DOS格式文本文件转换成Unix格式"},"mailstat":{"n":"mailstat","p":"/mailstat","d":"显示到达的邮件状态"},"vgreduce":{"n":"vgreduce","p":"/vgreduce","d":"从卷组中删除物理卷"},"htpasswd":{"n":"htpasswd","p":"/htpasswd","d":"apache服务器创建密码认证文件"},"rpm2cpio":{"n":"rpm2cpio","p":"/rpm2cpio","d":"将RPM软件包转换为cpio格式的文件"},"bmodinfo":{"n":"bmodinfo","p":"/bmodinfo","d":"显示给定模块的详细信息"},"rpmbuild":{"n":"rpmbuild","p":"/rpmbuild","d":"创建RPM的二进制软件包和源码软件包"},"vgextend":{"n":"vgextend","p":"/vgextend","d":"向卷组中添加物理卷"},"cdrecord":{"n":"cdrecord","p":"/cdrecord","d":"Linux系统下光盘刻录功能命令"},"rpmquery":{"n":"rpmquery","p":"/rpmquery","d":"从RPM数据库中查询软件包信息"},"vgcreate":{"n":"vgcreate","p":"/vgcreate","d":"用于创建LVM卷组"},"poweroff":{"n":"poweroff","p":"/poweroff","d":"关闭Linux系统,关闭记录会被写入到/var/log/wtmp日志文件中。"},"iptables":{"n":"iptables","p":"/iptables","d":"Linux上常用的防火墙软件"},"xlsatoms":{"n":"xlsatoms","p":"/xlsatoms","d":"列出X服务器内部所有定义的原子成分"},"runlevel":{"n":"runlevel","p":"/runlevel","d":"打印当前Linux系统的运行等级"},"ifconfig":{"n":"ifconfig","p":"/ifconfig","d":"配置和显示Linux系统网卡的网络参数"},"protoize":{"n":"protoize","p":"/protoize","d":"GNU-C代码转换为ANSI-C代码"},"tempfile":{"n":"tempfile","p":"/tempfile","d":"shell中给临时文件命名"},"mii-tool":{"n":"mii-tool","p":"/mii-tool","d":"配置网络设备协商方式的工具"},"compress":{"n":"compress","p":"/compress","d":"使用Lempress-Ziv编码压缩数据文件"},"vgchange":{"n":"vgchange","p":"/vgchange","d":"修改卷组属性"},"semanage":{"n":"semanage","p":"/semanage","d":"默认目录的安全上下文查询与修改"},"sendmail":{"n":"sendmail","p":"/sendmail","d":"著名电子邮件服务器"},"newusers":{"n":"newusers","p":"/newusers","d":"用于批处理的方式一次创建多个命令"},"iptstate":{"n":"iptstate","p":"/iptstate","d":"显示iptables的工作状态"},"sesearch":{"n":"sesearch","p":"/sesearch","d":"查询SELinux策略的规则详情"},"dhclient":{"n":"dhclient","p":"/dhclient","d":"动态获取或释放IP地址"},"tracepath":{"n":"tracepath","p":"/tracepath","d":"追踪目的主机经过的路由信息"},"grpunconv":{"n":"grpunconv","p":"/grpunconv","d":"用来关闭群组的投影密码"},"tcpreplay":{"n":"tcpreplay","p":"/tcpreplay","d":"将PCAP包重新发送,用于性能或者功能测试"},"systemctl":{"n":"systemctl","p":"/systemctl","d":"系统服务管理器指令"},"chkconfig":{"n":"chkconfig","p":"/chkconfig","d":"检查或设置系统的各种服务"},"apachectl":{"n":"apachectl","p":"/apachectl","d":"Apache服务器前端控制工具"},"ip6tables":{"n":"ip6tables","p":"/ip6tables","d":"linux中防火墙软件"},"getsebool":{"n":"getsebool","p":"/getsebool","d":"查询SElinux策略内各项规则的布尔值"},"ssh-agent":{"n":"ssh-agent","p":"/ssh-agent","d":"ssh密钥管理器"},"logrotate":{"n":"logrotate","p":"/logrotate","d":"统日志进行轮转、压缩和删除"},"lvdisplay":{"n":"lvdisplay","p":"/lvdisplay","d":"显示逻辑卷属性"},"mysqldump":{"n":"mysqldump","p":"/mysqldump","d":"MySQL数据库中备份工具"},"smbpasswd":{"n":"smbpasswd","p":"/smbpasswd","d":"samba用户和密码管理工具"},"smbclient":{"n":"smbclient","p":"/smbclient","d":"交互方式访问samba服务器"},"showmount":{"n":"showmount","p":"/showmount","d":"显示NFS服务器加载的信息"},"mysqlshow":{"n":"mysqlshow","p":"/mysqlshow","d":"显示MySQL中数据库相关信息"},"clockdiff":{"n":"clockdiff","p":"/clockdiff","d":"检测两台linux主机的时间差"},"arptables":{"n":"arptables","p":"/arptables","d":"管理ARP包过滤规则表"},"setsebool":{"n":"setsebool","p":"/setsebool","d":"修改SElinux策略内各项规则的布尔值"},"badblocks":{"n":"badblocks","p":"/badblocks","d":"查找磁盘中损坏的区块"},"vgdisplay":{"n":"vgdisplay","p":"/vgdisplay","d":"显示LVM卷组的信息"},"rpmverify":{"n":"rpmverify","p":"/rpmverify","d":"验证已安装的RPM软件包的正确性"},"dmidecode":{"n":"dmidecode","p":"/dmidecode","d":"在Linux系统下获取有关硬件方面的信息"},"vgconvert":{"n":"vgconvert","p":"/vgconvert","d":"转换卷组元数据格式"},"dircolors":{"n":"dircolors","p":"/dircolors","d":"置ls命令在显示目录或文件时所用的色彩"},"pvdisplay":{"n":"pvdisplay","p":"/pvdisplay","d":"显示物理卷的属性"},"partprobe":{"n":"partprobe","p":"/partprobe","d":"不重启的情况下重读分区"},"quotacheck":{"n":"quotacheck","p":"/quotacheck","d":"检查磁盘的使用空间与限制"},"cupsenable":{"n":"cupsenable","p":"/cupsenable","d":"启动指定的打印机"},"usernetctl":{"n":"usernetctl","p":"/usernetctl","d":"被允许时操作指定的网络接口"},"ssh-keygen":{"n":"ssh-keygen","p":"/ssh-keygen","d":"为ssh生成、管理和转换认证密钥"},"xlsclients":{"n":"xlsclients","p":"/xlsclients","d":"列出显示器中的客户端应用程序"},"getenforce":{"n":"getenforce","p":"/getenforce","d":"显示当前SELinux的应用模式,是强制、执行还是停用。"},"domainname":{"n":"domainname","p":"/domainname","d":"显示和设置系统的NIS域名"},"get_module":{"n":"get_module","p":"/get_module","d":"获取Linux内核模块的详细信息"},"traceroute":{"n":"traceroute","p":"/traceroute","d":"显示数据包到主机间的路径"},"mkbootdisk":{"n":"mkbootdisk","p":"/mkbootdisk","d":"可建立目前系统的启动盘"},"dpkg-query":{"n":"dpkg-query","p":"/dpkg-query","d":"Debian Linux中软件包的查询工具"},"mysqladmin":{"n":"mysqladmin","p":"/mysqladmin","d":"MySQL服务器管理客户端"},"dpkg-split":{"n":"dpkg-split","p":"/dpkg-split","d":"Debian Linux中将大软件包分割成小包"},"restorecon":{"n":"restorecon","p":"/restorecon","d":"恢复文件的安全上下文"},"unprotoize":{"n":"unprotoize","p":"/unprotoize","d":"删除C语言源代码文件中的函数原型"},"uncompress":{"n":"uncompress","p":"/uncompress","d":"用来解压.Z文件"},"squidclient":{"n":"squidclient","p":"/squidclient","d":"squid服务器的客户端管理工具"},"cupsdisable":{"n":"cupsdisable","p":"/cupsdisable","d":"停止指定的打印机"},"consoletype":{"n":"consoletype","p":"/consoletype","d":"输出已连接的终端类型"},"mysqlimport":{"n":"mysqlimport","p":"/mysqlimport","d":"为MySQL服务器用命令行方式导入数据"},"inotifywait":{"n":"inotifywait","p":"/inotifywait","d":"异步文件系统监控机制"},"ssh-keyscan":{"n":"ssh-keyscan","p":"/ssh-keyscan","d":"收集主机公钥的使用工具"},"lsb_release":{"n":"lsb_release","p":"/lsb_release","d":"显示发行版本信息"},"sftp-server":{"n":"sftp-server","p":"/sftp-server","d":"sftp协议的服务器端程序"},"ssh-copy-id":{"n":"ssh-copy-id","p":"/ssh-copy-id","d":"把本地的ssh公钥文件安装到远程主机对应的账户下"},"dpkg-divert":{"n":"dpkg-divert","p":"/dpkg-divert","d":"Debian Linux中创建并管理一个转向列表"},"dpkg-trigger":{"n":"dpkg-trigger","p":"/dpkg-trigger","d":"Debian Linux下的软件包触发器"},"firewall-cmd":{"n":"firewall-cmd","p":"/firewall-cmd","d":"Linux上新用的防火墙软件,跟iptables差不多的工具。"},"convertquota":{"n":"convertquota","p":"/convertquota","d":"把老的配额文件转换为新的格式"},"apt-sortpkgs":{"n":"apt-sortpkgs","p":"/apt-sortpkgs","d":"Debian Linux下对软件包索引文件进行排序的工具"},"bzip2recover":{"n":"bzip2recover","p":"/bzip2recover","d":"恢复被破坏的.bz2压缩包中的文件"},"ypdomainname":{"n":"ypdomainname","p":"/ypdomainname","d":"显示主机的NIS的域名"},"kernelversion":{"n":"kernelversion","p":"/kernelversion","d":"打印当前内核的主版本号"},"nisdomainname":{"n":"nisdomainname","p":"/nisdomainname","d":"显示主机NIS的域名"},"iptables-save":{"n":"iptables-save","p":"/iptables-save","d":"备份iptables的表配置"},"speedtest-cli":{"n":"speedtest-cli","p":"/speedtest-cli","d":"命令行下测试服务器外网速度"},"dnsdomainname":{"n":"dnsdomainname","p":"/dnsdomainname","d":"定义DNS系统中FQDN名称的域名"},"ip6tables-save":{"n":"ip6tables-save","p":"/ip6tables-save","d":"保存ip6tables表配置"},"named-checkzone":{"n":"named-checkzone","p":"/named-checkzone","d":"使用named-checkzone命令可以进行区域文件有效性检查和转换,必须指定区域名称和区域文件名称。"},"iptables-restore":{"n":"iptables-restore","p":"/iptables-restore","d":"还原iptables表的配置"},"dpkg-reconfigure":{"n":"dpkg-reconfigure","p":"/dpkg-reconfigure","d":"Debian Linux中重新配制一个已经安装的软件包"},"dpkg-preconfigure":{"n":"dpkg-preconfigure","p":"/dpkg-preconfigure","d":"Debian Linux中软件包安装之前询问问题"},"ip6tables-restore":{"n":"ip6tables-restore","p":"/ip6tables-restore","d":"还原ip6tables表"},"dpkg-statoverride":{"n":"dpkg-statoverride","p":"/dpkg-statoverride","d":"Debian Linux中覆盖文件的所有权和模式"}} \ No newline at end of file From b9c06d52ed0eaf4070220446e1b15786a5689d95 Mon Sep 17 00:00:00 2001 From: Huck Huang Date: Fri, 27 Oct 2017 19:20:54 +0800 Subject: [PATCH 0121/1284] Add auto focus feature on search box --- template/search.ejs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/template/search.ejs b/template/search.ejs index 5f8229a7349..e6a2aaf0b2f 100644 --- a/template/search.ejs +++ b/template/search.ejs @@ -9,7 +9,7 @@

- +
From 292b7e397a72f65dbb1caae478f9c4b41c15bc33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Sun, 5 Nov 2017 23:52:45 -0600 Subject: [PATCH 0122/1284] Update tree.md --- command/tree.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/command/tree.md b/command/tree.md index 2a87b1def57..3e5151cf78e 100644 --- a/command/tree.md +++ b/command/tree.md @@ -100,4 +100,10 @@ tree -P node_modules -L 2 # 显示目录node_modules两层的目录树结构 tree -L 2 > /home/www/tree.txt # 当前目录结果存到 tree.txt 文件中 ``` +忽略多个文件夹 + +```bash +tree -I 'node_modules|icon|font' -L 2 +``` + From 14252497680bc5b552adb87a3b504bb9df090a22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Sun, 12 Nov 2017 14:31:48 +0800 Subject: [PATCH 0123/1284] Update curl.md --- command/curl.md | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/command/curl.md b/command/curl.md index eecdf47dd0c..07f6ce65b6d 100644 --- a/command/curl.md +++ b/command/curl.md @@ -236,5 +236,25 @@ Vary: Accept-Encoding X-Pingback: http://man.linuxde.net/xmlrpc.php ``` +**get请求 ** - \ No newline at end of file +```bash +curl "http://www.baidu.com" # 如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地 +curl -i "http://www.baidu.com" # 显示全部信息 +curl -l "http://www.baidu.com" # 只显示头部信息 +curl -v "http://www.baidu.com" # 显示get请求全过程解析 +``` + +**post请求** + +```bash +curl -d "param1=value1¶m2=value2" "http://www.wangchujiang.com" +``` + +**json格式的post请求** + +```bash +curl -l -H "Content-type: application/json" -X POST -d '{"phone":"13521389587","password":"test"}' http://wangchujiang.com/apis/users.json +``` + + From c84d16363b87207511e0d9539df6c23f5b7dea21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Sun, 12 Nov 2017 14:33:03 +0800 Subject: [PATCH 0124/1284] Update curl.md --- command/curl.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/command/curl.md b/command/curl.md index 07f6ce65b6d..46ec11efdb0 100644 --- a/command/curl.md +++ b/command/curl.md @@ -121,7 +121,7 @@ curl(选项)(参数) ### 实例 - **文件下载** +**文件下载** curl命令可以用来执行下载、发送各种HTTP请求,指定HTTP头部等操作。如果系统没有curl可以使用`yum install curl`安装,也可以下载安装。curl是将下载文件输出到stdout,将进度信息输出到stderr,不显示进度信息使用`--silent`选项。 @@ -144,7 +144,7 @@ curl http://man.linuxde.net/test.iso -o filename.iso --progress ######################################### 100.0% ``` - **断点续传** +**断点续传** curl能够从特定的文件偏移处继续下载,它可以通过指定一个便宜量来下载部分文件: @@ -155,7 +155,7 @@ curl URL/File -C 偏移量 curl -C -URL ``` - **使用curl设置参照页字符串** +**使用curl设置参照页字符串** 参照页是位于HTTP头部中的一个字符串,用来表示用户是从哪个页面到达当前页面的,如果用户点击网页A中的某个连接,那么用户就会跳转到B网页,网页B头部的参照页字符串就包含网页A的URL。 @@ -165,7 +165,7 @@ curl -C -URL curl --referer http://www.google.com http://man.linuxde.net ``` - **用curl设置cookies** +**用curl设置cookies** 使用`--cookie "COKKIES"`选项来指定cookie,多个cookie使用分号分隔: @@ -179,7 +179,7 @@ curl http://man.linuxde.net --cookie "user=root;pass=123456" curl URL --cookie-jar cookie_file ``` - **用curl设置用户代理字符串** +**用curl设置用户代理字符串** 有些网站访问会提示只能使用IE浏览器来访问,这是因为这些网站设置了检查用户代理,可以使用curl把用户代理设置为IE,这样就可以访问了。使用`--user-agent`或者`-A`选项: @@ -194,7 +194,7 @@ curl URL -A "Mozilla/5.0" curl -H "Host:man.linuxde.net" -H "accept-language:zh-cn" URL ``` - **curl的带宽控制和下载配额** +**curl的带宽控制和下载配额** 使用`--limit-rate`限制curl的下载速度: @@ -212,7 +212,7 @@ curl URL --max-filesize bytes 如果文件大小超出限制,命令则返回一个非0退出码,如果命令正常则返回0。 - **用curl进行认证** +**用curl进行认证** 使用curl选项 -u 可以完成HTTP或者FTP的认证,可以指定密码,也可以不指定密码在后续操作中输入密码: @@ -221,7 +221,7 @@ curl -u user:pwd http://man.linuxde.net curl -u user http://man.linuxde.net ``` - **只打印响应头部信息** +**只打印响应头部信息** 通过`-I`或者`-head`可以只打印出HTTP头部信息: @@ -236,7 +236,7 @@ Vary: Accept-Encoding X-Pingback: http://man.linuxde.net/xmlrpc.php ``` -**get请求 ** +**get请求** ```bash curl "http://www.baidu.com" # 如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地 From 1fb08e11265e0088d5ff3b59e214f5fb1699153a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Sun, 12 Nov 2017 14:37:05 +0800 Subject: [PATCH 0125/1284] Update curl.md --- command/curl.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/command/curl.md b/command/curl.md index 46ec11efdb0..591540ee244 100644 --- a/command/curl.md +++ b/command/curl.md @@ -239,10 +239,10 @@ X-Pingback: http://man.linuxde.net/xmlrpc.php **get请求** ```bash -curl "http://www.baidu.com" # 如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地 -curl -i "http://www.baidu.com" # 显示全部信息 -curl -l "http://www.baidu.com" # 只显示头部信息 -curl -v "http://www.baidu.com" # 显示get请求全过程解析 +curl "http://www.wangchujiang.com" # 如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地 +curl -i "http://www.wangchujiang.com" # 显示全部信息 +curl -l "http://www.wangchujiang.com" # 只显示头部信息 +curl -v "http://www.wangchujiang.com" # 显示get请求全过程解析 ``` **post请求** From 4dd9b04239258655bbdf422567b1de6e4b09db1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Mon, 13 Nov 2017 19:11:15 +0800 Subject: [PATCH 0126/1284] Update less.md --- command/less.md | 73 ++++++++++++++++++++++++++----------------------- 1 file changed, 39 insertions(+), 34 deletions(-) diff --git a/command/less.md b/command/less.md index 36e56419d0c..494fefb353a 100644 --- a/command/less.md +++ b/command/less.md @@ -1,34 +1,39 @@ -less -=== - -分屏上下翻页浏览文件内容 - -## 补充说明 - -**less命令** 的作用与more十分相似,都可以用来浏览文字档案的内容,不同的是less命令允许用户向前或向后浏览文件,而more命令只能向前浏览。用less命令显示文件时,用PageUp键向上翻页,用PageDown键向下翻页。要退出less程序,应按Q键。 - -### 语法 - -``` -less(选项)(参数) -``` - -### 选项 - -``` --e:文件内容显示完毕后,自动退出; --f:强制显示文件; --g:不加亮显示搜索到的所有关键词,仅显示当前显示的关键字,以提高显示速度; --l:搜索时忽略大小写的差异; --N:每一行行首显示行号; --s:将连续多个空行压缩成一行显示; --S:在单行显示较长的内容,而不换行显示; --x<数字>:将TAB字符显示为指定个数的空格字符。 -``` - -### 参数 - -文件:指定要分屏显示内容的文件。 - - - \ No newline at end of file +less +=== + +分屏上下翻页浏览文件内容 + +## 补充说明 + +**less命令** 的作用与more十分相似,都可以用来浏览文字档案的内容,不同的是less命令允许用户向前或向后浏览文件,而more命令只能向前浏览。用less命令显示文件时,用PageUp键向上翻页,用PageDown键向下翻页。要退出less程序,应按Q键。 + +### 语法 + +``` +less(选项)(参数) +``` + +### 选项 + +``` +-e:文件内容显示完毕后,自动退出; +-f:强制显示文件; +-g:不加亮显示搜索到的所有关键词,仅显示当前显示的关键字,以提高显示速度; +-l:搜索时忽略大小写的差异; +-N:每一行行首显示行号; +-s:将连续多个空行压缩成一行显示; +-S:在单行显示较长的内容,而不换行显示; +-x<数字>:将TAB字符显示为指定个数的空格字符。 +``` + +### 参数 + +文件:指定要分屏显示内容的文件。 + +## 实例 + +```bash +sudo less /var/log/shadowsocks.log +``` + + From 80ca9b7ac6784576637a66942e9d0fb86bcb0610 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Sat, 25 Nov 2017 17:30:26 +0800 Subject: [PATCH 0127/1284] Update iptables.md --- command/iptables.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/command/iptables.md b/command/iptables.md index db1172d297e..ef70e5f493f 100644 --- a/command/iptables.md +++ b/command/iptables.md @@ -71,6 +71,24 @@ iptables(选项)(参数) -h:显示帮助信息; ``` +## 基本参数 + +| 参数 | 作用 | +| ---- | ---- | +| -P | 设置默认策略:iptables -P INPUT (DROP|ACCEPT) | +| -F | 清空规则链 | +| -L | 查看规则链 | +| -A | 在规则链的末尾加入新规则 | +| -I | num 在规则链的头部加入新规则 | +| -D | num 删除某一条规则 | +| -s | 匹配来源地址IP/MASK,加叹号"!"表示除这个IP外。 | +| -d | 匹配目标地址 | +| -i | 网卡名称 匹配从这块网卡流入的数据 | +| -o | 网卡名称 匹配从这块网卡流出的数据 | +| -p | 匹配协议,如tcp,udp,icmp | +| --dport num | 匹配目标端口号 | +| --sport num | 匹配来源端口号 | + #### 命令选项输入顺序 ``` From 43ea79b3973f3223e4d52885bf4f71ae8cd8a6bf Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Mon, 27 Nov 2017 10:17:26 +0800 Subject: [PATCH 0128/1284] Update iptables.md --- command/iptables.md | 63 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/command/iptables.md b/command/iptables.md index ef70e5f493f..89359a28c19 100644 --- a/command/iptables.md +++ b/command/iptables.md @@ -12,11 +12,19 @@ Linux上常用的防火墙软件 - [补充说明](#补充说明) - [语法](#语法) - [选项](#选项) +- [基本参数](#基本参数) - [命令选项输入顺序](#命令选项输入顺序) - [工作机制](#工作机制) - [防火墙的策略](#防火墙的策略) - [防火墙的策略](#防火墙的策略-1) - [实例](#实例) + - [空当前的所有规则和计数](#空当前的所有规则和计数) + - [配置允许ssh端口连接](#配置允许ssh端口连接) + - [允许本地回环地址可以正常使用](#允许本地回环地址可以正常使用) + - [设置默认的规则](#设置默认的规则) + - [配置白名单](#配置白名单) + - [开启相应的服务端口](#开启相应的服务端口) + - [保存规则到配置文件中](#保存规则到配置文件中) - [列出已设置的规则](#列出已设置的规则) - [清除已有规则](#清除已有规则) - [删除已添加的规则](#删除已添加的规则) @@ -186,6 +194,61 @@ iptables还支持自己定义链。但是自己定义的链,必须是跟某种 ### 实例 +#### 空当前的所有规则和计数 + +```bash +iptables -F # 清空所有的防火墙规则 +iptables -X # 删除用户自定义的空链 +iptables -Z # 清空计数 +``` + +#### 配置允许ssh端口连接 + +```bash +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 +iptables -A INPUT -i lo -j ACCEPT +#本地圆环地址就是那个127.0.0.1,是本机上使用的,它进与出都设置为允许 +iptables -A OUTPUT -o lo -j ACCEPT +``` + +#### 设置默认的规则 + +```bash +iptables -P INPUT DROP # 配置默认的不让进 +iptables -P FORWARD DROP # 默认的不允许转发 +iptables -P OUTPUT ACCEPT # 默认的可以出去 +``` + +#### 配置白名单 + +```bash +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端口 +``` + +#### 开启相应的服务端口 + +```bash +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 # 已经建立的连接得让它进来 +``` + +#### 保存规则到配置文件中 + +```bash +cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak # 任何改动之前先备份,请保持这一优秀的习惯 +iptables-save > /etc/sysconfig/iptables +cat /etc/sysconfig/iptables +``` + #### 列出已设置的规则 > iptables -L [-t 表名] [链名] From 9c44979df1f7f443a59f5aba8805e02ff504708a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Thu, 30 Nov 2017 22:12:22 +0800 Subject: [PATCH 0129/1284] Update ssh.md --- command/ssh.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/command/ssh.md b/command/ssh.md index 7de73b7222f..3285fead278 100644 --- a/command/ssh.md +++ b/command/ssh.md @@ -45,9 +45,11 @@ ssh(选项)(参数) ### 实例 -``` +```bash # ssh 用户名@远程服务器地址 ssh user1@172.24.210.101 +# 指定端口 +ssh -p 2211 root@140.206.185.170 ``` ### 背后故事 From 068036920977890273af54faab8dfcc384578c6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 22 Dec 2017 09:28:06 +0800 Subject: [PATCH 0130/1284] Update mv.md --- command/mv.md | 172 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 116 insertions(+), 56 deletions(-) diff --git a/command/mv.md b/command/mv.md index 9291bc17174..5fc24c8345b 100644 --- a/command/mv.md +++ b/command/mv.md @@ -1,56 +1,116 @@ -mv -=== - -用来对文件或目录重新命名 - -## 补充说明 - -**mv命令** 用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。source表示源文件或目录,target表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖。 - -mv命令可以用来将源文件移至一个目标文件中,或将一组文件移至一个目标目录中。源文件被移至目标文件有两种不同的结果: - -1. 如果目标文件是到某一目录文件的路径,源文件会被移到此目录下,且文件名不变。 -2. 如果目标文件不是目录文件,则源文件名(只能有一个)会变为此目标文件名,并覆盖己存在的同名文件。如果源文件和目标文件在同一个目录下,mv的作用就是改文件名。当目标文件是目录文件时,源文件或目录参数可以有多个,则所有的源文件都会被移至目标文件中。所有移到该目录下的文件都将保留以前的文件名。 - -注意事项:mv与cp的结果不同,mv好像文件“搬家”,文件个数并未增加。而cp对文件进行复制,文件个数增加了。 - -### 语法 - -``` -mv(选项)(参数) -``` - -### 选项 - -``` ---backup=<备份模式>:若需覆盖文件,则覆盖前先行备份; --b:当文件存在时,覆盖前,为其创建一个备份; --f:若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录; --i:交互式操作,覆盖前先行询问用户,如果源文件与目标文件或目标目录中的文件同名,则询问用户是否覆盖目标文件。用户输入”y”,表示将覆盖目标文件;输入”n”,表示取消对源文件的移动。这样可以避免误将文件覆盖。 ---strip-trailing-slashes:删除源文件中的斜杠“/”; --S<后缀>:为备份文件指定后缀,而不使用默认的后缀; ---target-directory=<目录>:指定源文件要移动到目标目录; --u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。 -``` - -### 参数 - -* 源文件:源文件列表。 -* 目标文件:如果“目标文件”是文件名则在移动文件的同时,将其改名为“目标文件”;如果“目标文件”是目录名则将源文件移动到“目标文件”下。 - -### 实例 - -将文件ex3改名为new1 - -``` -mv ex3 new1 -``` - -将目录`/usr/men`中的所有文件移到当前目录(用`.`表示)中: - -``` -mv /usr/men/* . -``` - - - \ No newline at end of file +mv +=== + +用来对文件或目录重新命名 + +## 补充说明 + +**mv命令** 用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。source表示源文件或目录,target表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖。 + +mv命令可以用来将源文件移至一个目标文件中,或将一组文件移至一个目标目录中。源文件被移至目标文件有两种不同的结果: + +1. 如果目标文件是到某一目录文件的路径,源文件会被移到此目录下,且文件名不变。 +2. 如果目标文件不是目录文件,则源文件名(只能有一个)会变为此目标文件名,并覆盖己存在的同名文件。如果源文件和目标文件在同一个目录下,mv的作用就是改文件名。当目标文件是目录文件时,源文件或目录参数可以有多个,则所有的源文件都会被移至目标文件中。所有移到该目录下的文件都将保留以前的文件名。 + +注意事项:mv与cp的结果不同,mv好像文件“搬家”,文件个数并未增加。而cp对文件进行复制,文件个数增加了。 + +### 语法 + +``` +mv(选项)(参数) +``` + +### 选项 + +``` +--backup=<备份模式>:若需覆盖文件,则覆盖前先行备份; +-b:当文件存在时,覆盖前,为其创建一个备份; +-f:若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录; +-i:交互式操作,覆盖前先行询问用户,如果源文件与目标文件或目标目录中的文件同名,则询问用户是否覆盖目标文件。用户输入”y”,表示将覆盖目标文件;输入”n”,表示取消对源文件的移动。这样可以避免误将文件覆盖。 +--strip-trailing-slashes:删除源文件中的斜杠“/”; +-S<后缀>:为备份文件指定后缀,而不使用默认的后缀; +--target-directory=<目录>:指定源文件要移动到目标目录; +-u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。 +``` + +### 参数 + +* 源文件:源文件列表。 +* 目标文件:如果“目标文件”是文件名则在移动文件的同时,将其改名为“目标文件”;如果“目标文件”是目录名则将源文件移动到“目标文件”下。 + +### 实例 + +将目录`/usr/men`中的所有文件移到当前目录(用`.`表示)中: + +``` +mv /usr/men/* . +``` + +移动文件 + +``` +mv file_1.txt /home/office/ +``` + +移动多个文件 + +``` +mv file_2.txt file_3.txt file_4.txt /home/office/ +mv *.txt /home/office/ +``` + +移动目录 + +``` +mv directory_1/ /home/office/ +``` + +重命名文件或目录 + +```bash +mv file_1.txt file_2.txt # 将文件file_1.txt改名为file_2.txt +``` + +重命名目录 + +``` +mv directory_1/ directory_2/ +``` + +打印移动信息 + +```bash +mv -v *.txt /home/office +``` + +提示是否覆盖文件 + +``` +mv -i file_1.txt /home/office +``` + +源文件比目标文件新时才执行更新 + +``` +mv -uv *.txt /home/office +``` + +不要覆盖任何已存在的文件 + +``` +mv -vn *.txt /home/office +``` + +复制时创建备份 + +``` +mv -bv *.txt /home/office +``` + +无条件覆盖已经存在的文件 + +``` +mv -f *.txt /home/office +``` + + From 4708771a32cb8976b4ade0ea4cf87afffed29b22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Mon, 22 Jan 2018 17:05:55 +0800 Subject: [PATCH 0131/1284] fixed #32 Update openssl.md --- command/openssl.md | 426 ++++++++++++++++++++++----------------------- 1 file changed, 213 insertions(+), 213 deletions(-) diff --git a/command/openssl.md b/command/openssl.md index 4ca916f27d6..eb7c4fbdeab 100644 --- a/command/openssl.md +++ b/command/openssl.md @@ -1,213 +1,213 @@ -openssl -=== - -强大的安全套接字层密码库 - -## 补充说明 - -**OpenSSL** 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。在OpenSSL被曝出现严重安全漏洞后,发现多数通过SSL协议加密的网站使用名为OpenSSL的开源软件包。由于这是互联网应用最广泛的安全传输方法,被网银、在线支付、电商网站、门户网站、电子邮件等重要网站广泛使用,所以该漏洞影响范围广大。 - -OpenSSL有两种运行模式:交互模式和批处理模式。 - -直接输入openssl回车进入交互模式,输入带命令选项的openssl进入批处理模式。 - -OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库、SSL协议库以及应用程序。OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的。  - - **对称加密算法** - -OpenSSL一共提供了8种对称加密算法,其中7种是分组加密算法,仅有的一种流加密算法是RC4。这7种分组加密算法分别是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支持电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种常用的分组密码加密模式。其中,AES使用的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是128位,其它算法使用的则是64位。事实上,DES算法里面不仅仅是常用的DES算法,还支持三个密钥和两个密钥3DES算法。  - - **非对称加密算法** - -OpenSSL一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH算法一般用户密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。  - - **信息摘要算法** - -OpenSSL实现了5种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。SHA算法事实上包括了SHA和SHA1两种信息摘要算法,此外,OpenSSL还实现了DSS标准中规定的两种信息摘要算法DSS和DSS1。  - - **密钥和证书管理** - -密钥和证书管理是PKI的一个重要组成部分,OpenSSL为之提供了丰富的功能,支持多种标准。  - -首先,OpenSSL实现了ASN.1的证书和密钥相关标准,提供了对证书、公钥、私钥、证书请求以及CRL等数据对象的DER、PEM和BASE64的编解码功能。OpenSSL提供了产生各种公开密钥对和对称密钥的方法、函数和应用程序,同时提供了对公钥和私钥的DER编解码功能。并实现了私钥的PKCS#12和PKCS#8的编解码功能。OpenSSL在标准中提供了对私钥的加密保护功能,使得密钥可以安全地进行存储和分发。  - -在此基础上,OpenSSL实现了对证书的X.509标准编解码、PKCS#12格式的编解码以及PKCS#7的编解码功能。并提供了一种文本数据库,支持证书的管理功能,包括证书密钥产生、请求产生、证书签发、吊销和验证等功能。  - -事实上,OpenSSL提供的CA应用程序就是一个小型的证书管理中心(CA),实现了证书签发的整个流程和证书管理的大部分机制。 - -### 实例 - - **1、消息摘要算法应用例子** - -用SHA1算法计算文件file.txt的哈西值,输出到stdout: - -``` -# openssl dgst -sha1 file.txt -``` - -用SHA1算法计算文件file.txt的哈西值,输出到文件digest.txt: - -``` -# openssl sha1 -out digest.txt file.txt -``` - -用DSS1(SHA1)算法为文件file.txt签名,输出到文件dsasign.bin。签名的private key必须为DSA算法产生的,保存在文件dsakey.pem中。 - -``` -# openssl dgst -dss1 -sign dsakey.pem -out dsasign.bin file.txt -``` - -用dss1算法验证file.txt的数字签名dsasign.bin,验证的private key为DSA算法产生的文件dsakey.pem。 - -``` -# openssl dgst -dss1 -prverify dsakey.pem -signature dsasign.bin file.txt -``` - -用sha1算法为文件file.txt签名,输出到文件rsasign.bin,签名的private key为RSA算法产生的文件rsaprivate.pem。 - -``` -# openssl sha1 -sign rsaprivate.pem -out rsasign.bin file.txt -``` - -# 用sha1算法验证file.txt的数字签名rsasign.bin,验证的public key为RSA算法生成的rsapublic.pem。 - -``` -# openssl sha1 -verify rsapublic.pem -signature rsasign.bin file.txt -``` - - **2、对称加密应用例子** - -对称加密应用例子,用DES3算法的CBC模式加密文件plaintext.doc,加密结果输出到文件ciphertext.bin。 - -``` -# openssl enc -des3 -salt -in plaintext.doc -out ciphertext.bin -``` - -用DES3算法的OFB模式解密文件ciphertext.bin,提供的口令为trousers,输出到文件plaintext.doc。注意:因为模式不同,该命令不能对以上的文件进行解密。 - -``` -# openssl enc -des-ede3-ofb -d -in ciphertext.bin -out plaintext.doc -pass pass:trousers -``` - -用Blowfish的CFB模式加密plaintext.doc,口令从环境变量PASSWORD中取,输出到文件ciphertext.bin。 - -``` -# openssl bf-cfb -salt -in plaintext.doc -out ciphertext.bin -pass env:PASSWORD -``` - -给文件ciphertext.bin用base64编码,输出到文件base64.txt。 - -``` -# openssl base64 -in ciphertext.bin -out base64.txt -``` - -用RC5算法的CBC模式加密文件plaintext.doc,输出到文件ciphertext.bin,salt、key和初始化向量(iv)在命令行指定。 - -``` -# openssl rc5 -in plaintext.doc -out ciphertext.bin -S C62CB1D49F158ADC -iv E9EDACA1BD7090C6 -K 89D4B1678D604FAA3DBFFD030A314B29 -``` - - **3、Diffie-Hellman应用例子** - -使用生成因子2和随机的1024-bit的素数产生D0ffie-Hellman参数,输出保存到文件dhparam.pem - -``` -# openssl dhparam -out dhparam.pem -2 1024 -``` - -从dhparam.pem中读取Diffie-Hell参数,以C代码的形式,输出到stdout。 - -``` -# openssl dhparam -in dhparam.pem -noout -C -``` - - **4、DSA应用例子应用例子** - -生成1024位DSA参数集,并输出到文件dsaparam.pem。 - -``` -# openssl dsaparam -out dsaparam.pem 1024 -``` - -使用参数文件dsaparam.pem生成DSA私钥匙,采用3DES加密后输出到文件dsaprivatekey.pem - -``` -# openssl gendsa -out dsaprivatekey.pem -des3 dsaparam.pem -``` - -使用私钥匙dsaprivatekey.pem生成公钥匙,输出到dsapublickey.pem - -``` -# openssl dsa -in dsaprivatekey.pem -pubout -out dsapublickey.pem -``` - -从dsaprivatekey.pem中读取私钥匙,解密并输入新口令进行加密,然后写回文件dsaprivatekey.pem - -``` -# openssl dsa -in dsaprivatekey.pem -out dsaprivatekey.pem -des3 -passin -``` - - **5、RSA应用例子** - -产生1024位RSA私匙,用3DES加密它,口令为trousers,输出到文件rsaprivatekey.pem - -``` -# openssl genrsa -out rsaprivatekey.pem -passout pass:trousers -des3 1024 -``` - -从文件rsaprivatekey.pem读取私匙,用口令trousers解密,生成的公钥匙输出到文件rsapublickey.pem - -``` -# openssl rsa -in rsaprivatekey.pem -passin pass:trousers -pubout -out rsapubckey.pem -``` - -用公钥匙rsapublickey.pem加密文件plain.txt,输出到文件cipher.txt - -``` -# openssl rsautl -encrypt -pubin -inkey rsapublickey.pem -in plain.txt -out cipher.txt -``` - -使用私钥匙rsaprivatekey.pem解密密文cipher.txt,输出到文件plain.txt - -``` -# openssl rsautl -decrypt -inkey rsaprivatekey.pem -in cipher.txt -out plain.txt -``` - -用私钥匙rsaprivatekey.pem给文件plain.txt签名,输出到文件signature.bin - -``` -# openssl rsautl -sign -inkey rsaprivatekey.pem -in plain.txt -out signature.bin -``` - -用公钥匙rsapublickey.pem验证签名signature.bin,输出到文件plain.txt - -``` -# openssl rsautl -verify -pubin -inkey rsapublickey.pem -in signature.bin -out plain -``` - -从X.509证书文件cert.pem中获取公钥匙,用3DES加密mail.txt,输出到文件mail.enc - -``` -# openssl smime -encrypt -in mail.txt -des3 -out mail.enc cert.pem -``` - -从X.509证书文件cert.pem中获取接收人的公钥匙,用私钥匙key.pem解密S/MIME消息mail.enc,结果输出到文件mail.txt - -``` -# 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 - -``` -# 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中 - -``` -# openssl smime -verify -in mail.sgn -out mail.txt -``` - - - \ No newline at end of file +openssl +=== + +强大的安全套接字层密码库 + +## 补充说明 + +**OpenSSL** 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。在OpenSSL被曝出现严重安全漏洞后,发现多数通过SSL协议加密的网站使用名为OpenSSL的开源软件包。由于这是互联网应用最广泛的安全传输方法,被网银、在线支付、电商网站、门户网站、电子邮件等重要网站广泛使用,所以该漏洞影响范围广大。 + +OpenSSL有两种运行模式:交互模式和批处理模式。 + +直接输入openssl回车进入交互模式,输入带命令选项的openssl进入批处理模式。 + +OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库、SSL协议库以及应用程序。OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的。  + + **对称加密算法** + +OpenSSL一共提供了8种对称加密算法,其中7种是分组加密算法,仅有的一种流加密算法是RC4。这7种分组加密算法分别是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支持电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种常用的分组密码加密模式。其中,AES使用的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是128位,其它算法使用的则是64位。事实上,DES算法里面不仅仅是常用的DES算法,还支持三个密钥和两个密钥3DES算法。  + + **非对称加密算法** + +OpenSSL一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH算法一般用户密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。  + + **信息摘要算法** + +OpenSSL实现了5种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。SHA算法事实上包括了SHA和SHA1两种信息摘要算法,此外,OpenSSL还实现了DSS标准中规定的两种信息摘要算法DSS和DSS1。  + + **密钥和证书管理** + +密钥和证书管理是PKI的一个重要组成部分,OpenSSL为之提供了丰富的功能,支持多种标准。  + +首先,OpenSSL实现了ASN.1的证书和密钥相关标准,提供了对证书、公钥、私钥、证书请求以及CRL等数据对象的DER、PEM和BASE64的编解码功能。OpenSSL提供了产生各种公开密钥对和对称密钥的方法、函数和应用程序,同时提供了对公钥和私钥的DER编解码功能。并实现了私钥的PKCS#12和PKCS#8的编解码功能。OpenSSL在标准中提供了对私钥的加密保护功能,使得密钥可以安全地进行存储和分发。  + +在此基础上,OpenSSL实现了对证书的X.509标准编解码、PKCS#12格式的编解码以及PKCS#7的编解码功能。并提供了一种文本数据库,支持证书的管理功能,包括证书密钥产生、请求产生、证书签发、吊销和验证等功能。  + +事实上,OpenSSL提供的CA应用程序就是一个小型的证书管理中心(CA),实现了证书签发的整个流程和证书管理的大部分机制。 + +### 实例 + + **1、消息摘要算法应用例子** + +用SHA1算法计算文件file.txt的哈西值,输出到stdout: + +``` +# openssl dgst -sha1 file.txt +``` + +用SHA1算法计算文件file.txt的哈西值,输出到文件digest.txt: + +``` +# openssl sha1 -out digest.txt file.txt +``` + +用DSS1(SHA1)算法为文件file.txt签名,输出到文件dsasign.bin。签名的private key必须为DSA算法产生的,保存在文件dsakey.pem中。 + +``` +# openssl dgst -dss1 -sign dsakey.pem -out dsasign.bin file.txt +``` + +用dss1算法验证file.txt的数字签名dsasign.bin,验证的private key为DSA算法产生的文件dsakey.pem。 + +``` +# openssl dgst -dss1 -prverify dsakey.pem -signature dsasign.bin file.txt +``` + +用sha1算法为文件file.txt签名,输出到文件rsasign.bin,签名的private key为RSA算法产生的文件rsaprivate.pem。 + +``` +# openssl sha1 -sign rsaprivate.pem -out rsasign.bin file.txt +``` + +用sha1算法验证file.txt的数字签名rsasign.bin,验证的public key为RSA算法生成的rsapublic.pem。 + +``` +# openssl sha1 -verify rsapublic.pem -signature rsasign.bin file.txt +``` + + **2、对称加密应用例子** + +对称加密应用例子,用DES3算法的CBC模式加密文件plaintext.doc,加密结果输出到文件ciphertext.bin。 + +``` +# openssl enc -des3 -salt -in plaintext.doc -out ciphertext.bin +``` + +用DES3算法的OFB模式解密文件ciphertext.bin,提供的口令为trousers,输出到文件plaintext.doc。注意:因为模式不同,该命令不能对以上的文件进行解密。 + +``` +# openssl enc -des-ede3-ofb -d -in ciphertext.bin -out plaintext.doc -pass pass:trousers +``` + +用Blowfish的CFB模式加密plaintext.doc,口令从环境变量PASSWORD中取,输出到文件ciphertext.bin。 + +``` +# openssl bf-cfb -salt -in plaintext.doc -out ciphertext.bin -pass env:PASSWORD +``` + +给文件ciphertext.bin用base64编码,输出到文件base64.txt。 + +``` +# openssl base64 -in ciphertext.bin -out base64.txt +``` + +用RC5算法的CBC模式加密文件plaintext.doc,输出到文件ciphertext.bin,salt、key和初始化向量(iv)在命令行指定。 + +``` +# openssl rc5 -in plaintext.doc -out ciphertext.bin -S C62CB1D49F158ADC -iv E9EDACA1BD7090C6 -K 89D4B1678D604FAA3DBFFD030A314B29 +``` + + **3、Diffie-Hellman应用例子** + +使用生成因子2和随机的1024-bit的素数产生D0ffie-Hellman参数,输出保存到文件dhparam.pem + +``` +# openssl dhparam -out dhparam.pem -2 1024 +``` + +从dhparam.pem中读取Diffie-Hell参数,以C代码的形式,输出到stdout。 + +``` +# openssl dhparam -in dhparam.pem -noout -C +``` + + **4、DSA应用例子应用例子** + +生成1024位DSA参数集,并输出到文件dsaparam.pem。 + +``` +# openssl dsaparam -out dsaparam.pem 1024 +``` + +使用参数文件dsaparam.pem生成DSA私钥匙,采用3DES加密后输出到文件dsaprivatekey.pem + +``` +# openssl gendsa -out dsaprivatekey.pem -des3 dsaparam.pem +``` + +使用私钥匙dsaprivatekey.pem生成公钥匙,输出到dsapublickey.pem + +``` +# openssl dsa -in dsaprivatekey.pem -pubout -out dsapublickey.pem +``` + +从dsaprivatekey.pem中读取私钥匙,解密并输入新口令进行加密,然后写回文件dsaprivatekey.pem + +``` +# openssl dsa -in dsaprivatekey.pem -out dsaprivatekey.pem -des3 -passin +``` + + **5、RSA应用例子** + +产生1024位RSA私匙,用3DES加密它,口令为trousers,输出到文件rsaprivatekey.pem + +``` +# openssl genrsa -out rsaprivatekey.pem -passout pass:trousers -des3 1024 +``` + +从文件rsaprivatekey.pem读取私匙,用口令trousers解密,生成的公钥匙输出到文件rsapublickey.pem + +``` +# openssl rsa -in rsaprivatekey.pem -passin pass:trousers -pubout -out rsapubckey.pem +``` + +用公钥匙rsapublickey.pem加密文件plain.txt,输出到文件cipher.txt + +``` +# openssl rsautl -encrypt -pubin -inkey rsapublickey.pem -in plain.txt -out cipher.txt +``` + +使用私钥匙rsaprivatekey.pem解密密文cipher.txt,输出到文件plain.txt + +``` +# openssl rsautl -decrypt -inkey rsaprivatekey.pem -in cipher.txt -out plain.txt +``` + +用私钥匙rsaprivatekey.pem给文件plain.txt签名,输出到文件signature.bin + +``` +# openssl rsautl -sign -inkey rsaprivatekey.pem -in plain.txt -out signature.bin +``` + +用公钥匙rsapublickey.pem验证签名signature.bin,输出到文件plain.txt + +``` +# openssl rsautl -verify -pubin -inkey rsapublickey.pem -in signature.bin -out plain +``` + +从X.509证书文件cert.pem中获取公钥匙,用3DES加密mail.txt,输出到文件mail.enc + +``` +# openssl smime -encrypt -in mail.txt -des3 -out mail.enc cert.pem +``` + +从X.509证书文件cert.pem中获取接收人的公钥匙,用私钥匙key.pem解密S/MIME消息mail.enc,结果输出到文件mail.txt + +``` +# 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 + +``` +# 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中 + +``` +# openssl smime -verify -in mail.sgn -out mail.txt +``` + + + From 791b707ed16847cca710fda6466e947414e0004f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Tue, 23 Jan 2018 12:14:20 +0800 Subject: [PATCH 0132/1284] Update chmod.md --- command/chmod.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/command/chmod.md b/command/chmod.md index 516847bbf7f..c841a37855f 100644 --- a/command/chmod.md +++ b/command/chmod.md @@ -88,4 +88,22 @@ ll -d f1 查看目录f1的属性 ``` +将`/home/wwwroot/`里的所有文件和文件夹设置为`755`权限 + +(1)直接指定路径修改 + +```bash +chmod -R 755 /home/wwwroot/* +``` + +(2)手动进入该目录修改权限(并显示详细过程) + + +```bash +cd /home/wwwroot +chmod -Rv 755 * #注意:“*”表示通配符,指的是所有文件和文件 +sudo chmod o+rw /shared #设置文件夹权限以保证其余用户可以访问它。 +``` + + From f99f7b7ef27295ca4cf5d5cb786e2431167b66f9 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Tue, 23 Jan 2018 12:21:59 +0800 Subject: [PATCH 0133/1284] Update chmod.md --- command/chmod.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/command/chmod.md b/command/chmod.md index 516847bbf7f..2c9360c348e 100644 --- a/command/chmod.md +++ b/command/chmod.md @@ -65,7 +65,14 @@ Linux用 户分为:拥有者、组群(Group)、其他(other),Linux系统 linux文件的用户权限的分析图 -!linux文件的用户权限的分析图 +```bash +-rw-r--r-- 1 user staff 651 Oct 12 12:53 .gitmodules +↑╰┬╯╰┬╯╰┬╯ +┆ ┆ ┆ ╰┈ 0 其他人 +┆ ┆ ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ g 属组 +┆ ╰┈┈┈┈ u 属组 +╰┈┈ 第一个字母 `d` 代表目录,`-` 代表普通文件 +``` 例:rwx rw- r-- From 896dd67e877e4a297152e502f4c6a3b9c5f0a3aa Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Tue, 23 Jan 2018 12:25:09 +0800 Subject: [PATCH 0134/1284] Update chmod.md --- command/chmod.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/command/chmod.md b/command/chmod.md index bd25f31774a..ff9a5938e37 100644 --- a/command/chmod.md +++ b/command/chmod.md @@ -66,12 +66,12 @@ Linux用 户分为:拥有者、组群(Group)、其他(other),Linux系统 linux文件的用户权限的分析图 ```bash --rw-r--r-- 1 user staff 651 Oct 12 12:53 .gitmodules -↑╰┬╯╰┬╯╰┬╯ -┆ ┆ ┆ ╰┈ 0 其他人 -┆ ┆ ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ g 属组 -┆ ╰┈┈┈┈ u 属组 -╰┈┈ 第一个字母 `d` 代表目录,`-` 代表普通文件 + -rw-r--r-- 1 user staff 651 Oct 12 12:53 .gitmodules +# ↑╰┬╯╰┬╯╰┬╯ +# ┆ ┆ ┆ ╰┈ 0 其他人 +# ┆ ┆ ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ g 属组 +# ┆ ╰┈┈┈┈ u 属组 +# ╰┈┈ 第一个字母 `d` 代表目录,`-` 代表普通文件 ``` 例:rwx rw- r-- From e1a00eb8850a056ed5d760b9b076d01ccb6843ea Mon Sep 17 00:00:00 2001 From: lichunqiang Date: Thu, 25 Jan 2018 09:23:29 +0800 Subject: [PATCH 0135/1284] update awk.md --- command/awk.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/command/awk.md b/command/awk.md index 870a7295415..a64c8856014 100644 --- a/command/awk.md +++ b/command/awk.md @@ -33,7 +33,7 @@ awk脚本是由模式和操作组成的。 * /正则表达式/:使用通配符的扩展集。 * 关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试。 -* 模式匹配表达式:用运算符`~`(匹配)和`~!`(不匹配)。 +* 模式匹配表达式:用运算符`~`(匹配)和`!~`(不匹配)。 * BEGIN语句块、pattern语句块、END语句块:参见awk的工作原理 ### 操作 @@ -214,7 +214,7 @@ netstat -antup | grep 7770 | awk '{ print $NF NR}' | awk '{ print $1}' ## awk运算与判断 -作为一种程序设计语言所应具有的特点之一,awk支持多种运算,这些运算与C语言提供的基本相同。awk还提供了一系列内置的运算函数(如log、sqr、cos、sin等)和一些用于对字符串进行操作(运算)的函数(如length、substr等等)。这些函数的引用大大的提高了awk的运算功能。作为对条件转移指令的一部分,关系判断是每种程序设计语言都具备的功能,awk也不例外,awk中允许进行多种测试,作为样式匹配,还提供了模式匹配表达式~(匹配)和~!(不匹配)。作为对测试的一种扩充,awk也支持用逻辑运算符。 +作为一种程序设计语言所应具有的特点之一,awk支持多种运算,这些运算与C语言提供的基本相同。awk还提供了一系列内置的运算函数(如log、sqr、cos、sin等)和一些用于对字符串进行操作(运算)的函数(如length、substr等等)。这些函数的引用大大的提高了awk的运算功能。作为对条件转移指令的一部分,关系判断是每种程序设计语言都具备的功能,awk也不例外,awk中允许进行多种测试,作为样式匹配,还提供了模式匹配表达式~(匹配)和!~(不匹配)。作为对测试的一种扩充,awk也支持用逻辑运算符。 ### 算术运算符 @@ -265,7 +265,7 @@ awk 'BEGIN{a=1;b=2;print (a>5 && b<=2),(a>5 || b<=2);}' | 运算符 | 描述 | | ----- | ---- | -| ~ ~! | 匹配正则表达式和不匹配正则表达式 | +| ~ !~ | 匹配正则表达式和不匹配正则表达式 | 例: From 7912f7dccc9361ef84c02812dd205ff722fe18b3 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Fri, 26 Jan 2018 15:33:41 +0800 Subject: [PATCH 0136/1284] fixed #34 Update wget.md --- command/wget.md | 144 ++++++++++++++++++++++++------------------------ 1 file changed, 72 insertions(+), 72 deletions(-) diff --git a/command/wget.md b/command/wget.md index f5c445fa9b7..639333d0d85 100644 --- a/command/wget.md +++ b/command/wget.md @@ -29,104 +29,104 @@ wget [参数] [URL地址] ``` 启动参数: --V, –version 显示wget的版本后退出 --h, –help 打印语法帮助 --b, –background 启动后转入后台执行 --e, –execute=COMMAND 执行`.wgetrc’格式的命令,wgetrc格式参见/etc/wgetrc或~/.wgetrc +-V, –-version 显示wget的版本后退出 +-h, –-help 打印语法帮助 +-b, –-background 启动后转入后台执行 +-e, –-execute=COMMAND 执行`.wgetrc’格式的命令,wgetrc格式参见/etc/wgetrc或~/.wgetrc 记录和输入文件参数: --o, –output-file=FILE 把记录写到FILE文件中 --a, –append-output=FILE 把记录追加到FILE文件中 --d, –debug 打印调试输出 --q, –quiet 安静模式(没有输出) --v, –verbose 冗长模式(这是缺省设置) --nv, –non-verbose 关掉冗长模式,但不是安静模式 --i, –input-file=FILE 下载在FILE文件中出现的URLs --F, –force-html 把输入文件当作HTML格式文件对待 --B, –base=URL 将URL作为在-F -i参数指定的文件中出现的相对链接的前缀 -–sslcertfile=FILE 可选客户端证书 -–sslcertkey=KEYFILE 可选客户端证书的KEYFILE -–egd-file=FILE 指定EGD socket的文件名 +-o, –-output-file=FILE 把记录写到FILE文件中 +-a, –-append-output=FILE 把记录追加到FILE文件中 +-d, –-debug 打印调试输出 +-q, –-quiet 安静模式(没有输出) +-v, –-verbose 冗长模式(这是缺省设置) +-nv, –-non-verbose 关掉冗长模式,但不是安静模式 +-i, –-input-file=FILE 下载在FILE文件中出现的URLs +-F, –-force-html 把输入文件当作HTML格式文件对待 +-B, –-base=URL 将URL作为在-F -i参数指定的文件中出现的相对链接的前缀 +–-sslcertfile=FILE 可选客户端证书 +–-sslcertkey=KEYFILE 可选客户端证书的KEYFILE +–-egd-file=FILE 指定EGD socket的文件名 下载参数: -–bind-address=ADDRESS 指定本地使用地址(主机名或IP,当本地有多个IP或名字时使用) --t, –tries=NUMBER 设定最大尝试链接次数(0 表示无限制). --O –output-document=FILE 把文档写到FILE文件中 --nc, –no-clobber 不要覆盖存在的文件或使用.#前缀 --c, –continue 接着下载没下载完的文件 +–-bind-address=ADDRESS 指定本地使用地址(主机名或IP,当本地有多个IP或名字时使用) +-t, –-tries=NUMBER 设定最大尝试链接次数(0 表示无限制). +-O –-output-document=FILE 把文档写到FILE文件中 +-nc, –-no-clobber 不要覆盖存在的文件或使用.#前缀 +-c, –-continue 接着下载没下载完的文件 –progress=TYPE 设定进程条标记 --N, –timestamping 不要重新下载文件除非比本地文件新 --S, –server-response 打印服务器的回应 -–spider 不下载任何东西 --T, –timeout=SECONDS 设定响应超时的秒数 --w, –wait=SECONDS 两次尝试之间间隔SECONDS秒 +-N, –-timestamping 不要重新下载文件除非比本地文件新 +-S, –-server-response 打印服务器的回应 +–-spider 不下载任何东西 +-T, –-timeout=SECONDS 设定响应超时的秒数 +-w, –-wait=SECONDS 两次尝试之间间隔SECONDS秒 –waitretry=SECONDS 在重新链接之间等待1…SECONDS秒 –random-wait 在下载之间等待0…2*WAIT秒 --Y, –proxy=on/off 打开或关闭代理 --Q, –quota=NUMBER 设置下载的容量限制 +-Y, –-proxy=on/off 打开或关闭代理 +-Q, –-quota=NUMBER 设置下载的容量限制 –limit-rate=RATE 限定下载输率 目录参数: --nd –no-directories 不创建目录 --x, –force-directories 强制创建目录 --nH, –no-host-directories 不创建主机目录 --P, –directory-prefix=PREFIX 将文件保存到目录 PREFIX/… +-nd –-no-directories 不创建目录 +-x, –-force-directories 强制创建目录 +-nH, –-no-host-directories 不创建主机目录 +-P, –-directory-prefix=PREFIX 将文件保存到目录 PREFIX/… –cut-dirs=NUMBER 忽略 NUMBER层远程目录 HTTP 选项参数: -–http-user=USER 设定HTTP用户名为 USER. -–http-passwd=PASS 设定http密码为 PASS --C, –cache=on/off 允许/不允许服务器端的数据缓存 (一般情况下允许) --E, –html-extension 将所有text/html文档以.html扩展名保存 -–ignore-length 忽略 `Content-Length’头域 -–header=STRING 在headers中插入字符串 STRING -–proxy-user=USER 设定代理的用户名为 USER -–proxy-passwd=PASS 设定代理的密码为 PASS -–referer=URL 在HTTP请求中包含 `Referer: URL’头 --s, –save-headers 保存HTTP头到文件 --U, –user-agent=AGENT 设定代理的名称为 AGENT而不是 Wget/VERSION -–no-http-keep-alive 关闭 HTTP活动链接 (永远链接) -–cookies=off 不使用 cookies -–load-cookies=FILE 在开始会话前从文件 FILE中加载cookie -–save-cookies=FILE 在会话结束后将 cookies保存到 FILE文件中 +-–http-user=USER 设定HTTP用户名为 USER. +-–http-passwd=PASS 设定http密码为 PASS +-C, –-cache=on/off 允许/不允许服务器端的数据缓存 (一般情况下允许) +-E, –-html-extension 将所有text/html文档以.html扩展名保存 +-–ignore-length 忽略 `Content-Length’头域 +-–header=STRING 在headers中插入字符串 STRING +-–proxy-user=USER 设定代理的用户名为 USER +-–proxy-passwd=PASS 设定代理的密码为 PASS +-–referer=URL 在HTTP请求中包含 `Referer: URL’头 +-s, –-save-headers 保存HTTP头到文件 +-U, –-user-agent=AGENT 设定代理的名称为 AGENT而不是 Wget/VERSION +-–no-http-keep-alive 关闭 HTTP活动链接 (永远链接) +–-cookies=off 不使用 cookies +–-load-cookies=FILE 在开始会话前从文件 FILE中加载cookie +-–save-cookies=FILE 在会话结束后将 cookies保存到 FILE文件中 FTP 选项参数: --nr, –dont-remove-listing 不移走 `.listing’文件 --g, –glob=on/off 打开或关闭文件名的 globbing机制 -–passive-ftp 使用被动传输模式 (缺省值). -–active-ftp 使用主动传输模式 -–retr-symlinks 在递归的时候,将链接指向文件(而不是目录) +-nr, -–dont-remove-listing 不移走 `.listing’文件 +-g, -–glob=on/off 打开或关闭文件名的 globbing机制 +-–passive-ftp 使用被动传输模式 (缺省值). +-–active-ftp 使用主动传输模式 +-–retr-symlinks 在递归的时候,将链接指向文件(而不是目录) 递归下载参数: --r, –recursive 递归下载--慎用! --l, –level=NUMBER 最大递归深度 (inf 或 0 代表无穷) -–delete-after 在现在完毕后局部删除文件 --k, –convert-links 转换非相对链接为相对链接 --K, –backup-converted 在转换文件X之前,将之备份为 X.orig --m, –mirror 等价于 -r -N -l inf -nr --p, –page-requisites 下载显示HTML文件的所有图片 +-r, -–recursive 递归下载--慎用! +-l, -–level=NUMBER 最大递归深度 (inf 或 0 代表无穷) +–-delete-after 在现在完毕后局部删除文件 +-k, –-convert-links 转换非相对链接为相对链接 +-K, –-backup-converted 在转换文件X之前,将之备份为 X.orig +-m, –-mirror 等价于 -r -N -l inf -nr +-p, –-page-requisites 下载显示HTML文件的所有图片 递归下载中的包含和不包含(accept/reject): --A, –accept=LIST 分号分隔的被接受扩展名的列表 --R, –reject=LIST 分号分隔的不被接受的扩展名的列表 --D, –domains=LIST 分号分隔的被接受域的列表 -–exclude-domains=LIST 分号分隔的不被接受的域的列表 -–follow-ftp 跟踪HTML文档中的FTP链接 -–follow-tags=LIST 分号分隔的被跟踪的HTML标签的列表 --G, –ignore-tags=LIST 分号分隔的被忽略的HTML标签的列表 --H, –span-hosts 当递归时转到外部主机 --L, –relative 仅仅跟踪相对链接 --I, –include-directories=LIST 允许目录的列表 --X, –exclude-directories=LIST 不被包含目录的列表 --np, –no-parent 不要追溯到父目录 -wget -S –spider url 不下载只显示过程 +-A, –-accept=LIST 分号分隔的被接受扩展名的列表 +-R, –-reject=LIST 分号分隔的不被接受的扩展名的列表 +-D, –-domains=LIST 分号分隔的被接受域的列表 +–-exclude-domains=LIST 分号分隔的不被接受的域的列表 +–-follow-ftp 跟踪HTML文档中的FTP链接 +–-follow-tags=LIST 分号分隔的被跟踪的HTML标签的列表 +-G, –-ignore-tags=LIST 分号分隔的被忽略的HTML标签的列表 +-H, –-span-hosts 当递归时转到外部主机 +-L, –-relative 仅仅跟踪相对链接 +-I, –-include-directories=LIST 允许目录的列表 +-X, –-exclude-directories=LIST 不被包含目录的列表 +-np, –-no-parent 不要追溯到父目录 +wget -S –-spider url 不下载只显示过程 ``` ### 参数 From 6f34acc0ba7f3c5e23ee3f2e2a26081beca873bc Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Tue, 30 Jan 2018 02:21:24 +0800 Subject: [PATCH 0137/1284] #35 Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bb728ac6039..af0a71522b9 100644 --- a/README.md +++ b/README.md @@ -5,9 +5,9 @@ Linux Command [![](https://jaywcjlove.github.io/sb/ico/linux.svg)](https://jaywcjlove.github.io/linux-command/) [![](https://jaywcjlove.github.io/sb/ico/weibo.svg)](http://weibo.com/pc175) -520多个 Linux 命令大全,内容包含 Linux 命令手册、详解、学习,值得收藏的 Linux 命令速查手册。请原谅我写了个爬虫,爬了他们家的数据[linuxde.net](http://man.linuxde.net),同时进行了编辑,增加了一些数据。对他们的辛勤劳动表示敬意,个人希望能本地离线搜索,不喜欢广告,希望得到干净漂亮的预览界面,业余和工作时间需要使用大量的命令,所以干了一件看似比较愚蠢的事情,在回头有空的时候估计能做一个App?,或者是命令行帮助工具?但目前还没有计划... +520多个 Linux 命令大全,内容包含 Linux 命令手册、详解、学习,值得收藏的 Linux 命令速查手册。请原谅我写了个爬虫,爬了他们家的数据 [linuxde.net](http://man.linuxde.net) ,同时进行了编辑,增加了一些数据。对他们的辛勤劳动表示敬意,个人希望能本地离线搜索,不喜欢广告,希望得到干净漂亮的预览界面,业余和工作时间需要使用大量的命令,所以干了一件看似比较愚蠢的事情,在回头有空的时候估计能做一个App?,或者是命令行帮助工具?但目前还没有计划... -[Github Web版](https://jaywcjlove.github.io/linux-command/) | [开源中国Web版](http://jslite.oschina.io/linux-command) | [其它Web版](http://linux-command.composer-proxy.org/) | [Alfred 版本下载](https://github.com/jaywcjlove/linux-command/releases) | [Android版本实现](https://github.com/Ernest-su/LinuxCmd.git) +[Github Web版](https://jaywcjlove.github.io/linux-command/) | [开源中国Web版](http://jslite.oschina.io/linux-command) | [其它Web版](http://linux-command.composer-proxy.org/) | [Alfred 版本下载](https://github.com/jaywcjlove/linux-command/releases) | [Android版本实现](https://github.com/Ernest-su/LinuxCmd.git) | [Mac/Win/Linux](https://github.com/haloislet/linux-command) 扫描二维码移动端预览搜索 From 3642b227be0feab0a8d06f6183021696f81e27e0 Mon Sep 17 00:00:00 2001 From: lichunqiang Date: Wed, 31 Jan 2018 15:12:37 +0800 Subject: [PATCH 0138/1284] update split.md --- command/split.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/command/split.md b/command/split.md index e0f303302e6..bdbff156c48 100644 --- a/command/split.md +++ b/command/split.md @@ -14,6 +14,7 @@ split -C:每一输出档中,单行的最大 byte 数。 -d:使用数字作为后缀。 -l:值为每一输出档的列数大小。 +-a:指定后缀长度(默认为2)。 ``` ### 实例 @@ -58,4 +59,4 @@ split -l 10 date.file ``` - \ No newline at end of file + From 82d55dfb5bee3a3b46c65fced4e935121906d980 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Mon, 5 Feb 2018 20:40:20 +0800 Subject: [PATCH 0139/1284] relased v1.0.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 839fee3ab38..752cf468d61 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "linux-command", - "version": "1.0.4", + "version": "1.0.5", "description": "Linux Command", "main": "dist/data.json", "scripts": { From 6acad89475c4e838dda1275c29d04da46321bcd2 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Tue, 6 Feb 2018 13:07:06 +0800 Subject: [PATCH 0140/1284] Update README.md --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index af0a71522b9..b39aff1b1d5 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,11 @@ Linux Command 520多个 Linux 命令大全,内容包含 Linux 命令手册、详解、学习,值得收藏的 Linux 命令速查手册。请原谅我写了个爬虫,爬了他们家的数据 [linuxde.net](http://man.linuxde.net) ,同时进行了编辑,增加了一些数据。对他们的辛勤劳动表示敬意,个人希望能本地离线搜索,不喜欢广告,希望得到干净漂亮的预览界面,业余和工作时间需要使用大量的命令,所以干了一件看似比较愚蠢的事情,在回头有空的时候估计能做一个App?,或者是命令行帮助工具?但目前还没有计划... -[Github Web版](https://jaywcjlove.github.io/linux-command/) | [开源中国Web版](http://jslite.oschina.io/linux-command) | [其它Web版](http://linux-command.composer-proxy.org/) | [Alfred 版本下载](https://github.com/jaywcjlove/linux-command/releases) | [Android版本实现](https://github.com/Ernest-su/LinuxCmd.git) | [Mac/Win/Linux](https://github.com/haloislet/linux-command) +[Github Web版](https://jaywcjlove.github.io/linux-command/) | [开源中国Web版](http://jslite.oschina.io/linux-command) | [其它Web版](http://linux-command.composer-proxy.org/) | [Alfred 版本下载](https://github.com/jaywcjlove/linux-command/releases) | [Android版本实现](https://github.com/Ernest-su/LinuxCmd.git) | [Mac/Win/Linux](https://github.com/haloislet/linux-command) | [Chrome插件](https://github.com/jaywcjlove/oscnews) + +Chrome 插件,可在[源码仓库](https://github.com/jaywcjlove/oscnews)预览效果,[Github下载 oscnews.crx 文件](https://github.com/jaywcjlove/oscnews/releases) 或者[开源中国下载 oscnews.crx 文件](https://gitee.com/jaywcjlove/oscnews/releases) 也可通过 Chrome Web Store 下载: + +[![](http://jaywcjlove.github.io/sb/download/chrome-web-store.svg)](https://chrome.google.com/webstore/detail/oscnews/iheapfheanfjcemgneblljhaebonakbg) 扫描二维码移动端预览搜索 From 354880f3d28ac3dfef47abaaec244f59b15d173e Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Tue, 6 Feb 2018 13:38:17 +0800 Subject: [PATCH 0141/1284] Update README.md --- README.md | 6 +- chrome-extensions.png | Bin 0 -> 102680 bytes package-lock.json | 1768 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 1772 insertions(+), 2 deletions(-) create mode 100644 chrome-extensions.png create mode 100644 package-lock.json diff --git a/README.md b/README.md index b39aff1b1d5..3568bd2d72a 100644 --- a/README.md +++ b/README.md @@ -5,13 +5,15 @@ Linux Command [![](https://jaywcjlove.github.io/sb/ico/linux.svg)](https://jaywcjlove.github.io/linux-command/) [![](https://jaywcjlove.github.io/sb/ico/weibo.svg)](http://weibo.com/pc175) -520多个 Linux 命令大全,内容包含 Linux 命令手册、详解、学习,值得收藏的 Linux 命令速查手册。请原谅我写了个爬虫,爬了他们家的数据 [linuxde.net](http://man.linuxde.net) ,同时进行了编辑,增加了一些数据。对他们的辛勤劳动表示敬意,个人希望能本地离线搜索,不喜欢广告,希望得到干净漂亮的预览界面,业余和工作时间需要使用大量的命令,所以干了一件看似比较愚蠢的事情,在回头有空的时候估计能做一个App?,或者是命令行帮助工具?但目前还没有计划... +540多个 Linux 命令,内容包含 Linux 命令手册、详解、学习,值得收藏的 Linux 命令速查手册。请原谅我写了个爬虫,爬了他们家的数据 [linuxde.net](http://man.linuxde.net) ,同时进行了编辑,增加了一些数据。对他们的辛勤劳动表示敬意,个人希望能本地离线搜索,不喜欢广告,希望得到干净漂亮的预览界面,业余和工作时间需要使用大量的命令,所以干了一件看似比较愚蠢的事情,在回头有空的时候估计能做一个App?,或者是命令行帮助工具?但目前还没有计划... [Github Web版](https://jaywcjlove.github.io/linux-command/) | [开源中国Web版](http://jslite.oschina.io/linux-command) | [其它Web版](http://linux-command.composer-proxy.org/) | [Alfred 版本下载](https://github.com/jaywcjlove/linux-command/releases) | [Android版本实现](https://github.com/Ernest-su/LinuxCmd.git) | [Mac/Win/Linux](https://github.com/haloislet/linux-command) | [Chrome插件](https://github.com/jaywcjlove/oscnews) Chrome 插件,可在[源码仓库](https://github.com/jaywcjlove/oscnews)预览效果,[Github下载 oscnews.crx 文件](https://github.com/jaywcjlove/oscnews/releases) 或者[开源中国下载 oscnews.crx 文件](https://gitee.com/jaywcjlove/oscnews/releases) 也可通过 Chrome Web Store 下载: -[![](http://jaywcjlove.github.io/sb/download/chrome-web-store.svg)](https://chrome.google.com/webstore/detail/oscnews/iheapfheanfjcemgneblljhaebonakbg) +[![Chrome Web Store 下载](http://jaywcjlove.github.io/sb/download/chrome-web-store.svg)](https://chrome.google.com/webstore/detail/oscnews/iheapfheanfjcemgneblljhaebonakbg) + +[![Chrome Web Store 下载](./chrome-extensions.png)](https://github.com/jaywcjlove/oscnews) 扫描二维码移动端预览搜索 diff --git a/chrome-extensions.png b/chrome-extensions.png new file mode 100644 index 0000000000000000000000000000000000000000..786c275e0ef883a4df86ed7435b8018fa061ddd3 GIT binary patch literal 102680 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 Z)4$bk2|PGct04b#IOBX8f70jv{{XnM9pV50 literal 0 HcmV?d00001 diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000000..998b23b3224 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1768 @@ +{ + "name": "linux-command", + "version": "1.0.3", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "abab": { + "version": "https://registry.npmjs.org/abab/-/abab-1.0.3.tgz", + "integrity": "sha1-uB3l9ydOxOdW15fNg08wNkJyTl0=", + "dev": true + }, + "acorn": { + "version": "https://registry.npmjs.org/acorn/-/acorn-4.0.11.tgz", + "integrity": "sha1-7c2jvZN+dVZBDULtWGD2c5nHlMA=", + "dev": true + }, + "acorn-globals": { + "version": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", + "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", + "dev": true, + "requires": { + "acorn": "https://registry.npmjs.org/acorn/-/acorn-4.0.11.tgz" + } + }, + "ajv": { + "version": "https://registry.npmjs.org/ajv/-/ajv-4.11.5.tgz", + "integrity": "sha1-tu50ZXuZOgHc5Et5RNVvSFgo1b0=", + "dev": true, + "requires": { + "co": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "json-stable-stringify": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz" + } + }, + "align-text": { + "version": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz", + "longest": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "repeat-string": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" + } + }, + "amdefine": { + "version": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-regex": { + "version": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "argparse": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "array-equal": { + "version": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true + }, + "array-union": { + "version": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" + } + }, + "array-uniq": { + "version": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "asn1": { + "version": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, + "assert-plus": { + "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true + }, + "async": { + "version": "https://registry.npmjs.org/async/-/async-2.1.2.tgz", + "integrity": "sha1-YSpKtF70KnDN6Aa62G7m2wR+g4U=", + "dev": true, + "requires": { + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz" + } + }, + "asynckit": { + "version": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "autoprefixer": { + "version": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", + "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", + "dev": true, + "requires": { + "browserslist": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "caniuse-db": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000646.tgz", + "normalize-range": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "num2fraction": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.16.tgz", + "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz" + } + }, + "autoprefixer-stylus": { + "version": "https://registry.npmjs.org/autoprefixer-stylus/-/autoprefixer-stylus-0.11.0.tgz", + "integrity": "sha1-AgZO2IvHzws3PzNGu14GYDmzbgI=", + "dev": true, + "requires": { + "autoprefixer": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.5.0.tgz", + "multi-stage-sourcemap": "https://registry.npmjs.org/multi-stage-sourcemap/-/multi-stage-sourcemap-0.2.1.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.4.tgz" + }, + "dependencies": { + "autoprefixer": { + "version": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.5.0.tgz", + "integrity": "sha1-kQ3gqg8ir0x9UDZ8vJ1NQSlFFi8=", + "dev": true, + "requires": { + "browserslist": "https://registry.npmjs.org/browserslist/-/browserslist-1.4.0.tgz", + "caniuse-db": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000646.tgz", + "normalize-range": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "num2fraction": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.4.tgz", + "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz" + } + }, + "browserslist": { + "version": "https://registry.npmjs.org/browserslist/-/browserslist-1.4.0.tgz", + "integrity": "sha1-nP3PU4TZFY9bcNoqoAsw6P8BkEk=", + "dev": true, + "requires": { + "caniuse-db": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000646.tgz" + } + }, + "postcss": { + "version": "https://registry.npmjs.org/postcss/-/postcss-5.2.4.tgz", + "integrity": "sha1-jrS+4+XE4JFYWxFt8y2NskpTXyE=", + "dev": true, + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "js-base64": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.9.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz" + } + }, + "supports-color": { + "version": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz" + } + } + } + }, + "aws-sign2": { + "version": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true + }, + "aws4": { + "version": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "dev": true + }, + "balanced-match": { + "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + } + }, + "block-elements": { + "version": "https://registry.npmjs.org/block-elements/-/block-elements-1.1.0.tgz", + "integrity": "sha1-ef6/iDD6aiJTK1thnZybGB518JM=", + "dev": true + }, + "boolbase": { + "version": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "boom": { + "version": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz" + } + }, + "brace-expansion": { + "version": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz", + "integrity": "sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=", + "dev": true, + "requires": { + "balanced-match": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + } + }, + "browserslist": { + "version": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000646.tgz", + "electron-to-chromium": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.2.tgz" + } + }, + "buffer-shims": { + "version": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", + "dev": true + }, + "camelcase": { + "version": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "caniuse-db": { + "version": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000646.tgz", + "integrity": "sha1-xyS5DWHfJChuAV/FKNBiBzwA3vQ=", + "dev": true + }, + "caseless": { + "version": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "center-align": { + "version": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "requires": { + "align-text": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "lazy-cache": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz" + } + }, + "chalk": { + "version": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "has-ansi": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" + } + }, + "cheerio": { + "version": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", + "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", + "dev": true, + "requires": { + "css-select": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "dom-serializer": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "entities": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "htmlparser2": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", + "lodash.assignin": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", + "lodash.bind": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", + "lodash.defaults": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "lodash.filter": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", + "lodash.flatten": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "lodash.foreach": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "lodash.map": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "lodash.merge": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.0.tgz", + "lodash.pick": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "lodash.reduce": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", + "lodash.reject": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", + "lodash.some": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz" + } + }, + "cliui": { + "version": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "wrap-ansi": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz" + } + }, + "co": { + "version": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collapse-whitespace": { + "version": "https://registry.npmjs.org/collapse-whitespace/-/collapse-whitespace-1.1.2.tgz", + "integrity": "sha1-ubMdedVZTuPCLBWBnFSCjlZbMIU=", + "dev": true, + "requires": { + "block-elements": "https://registry.npmjs.org/block-elements/-/block-elements-1.1.0.tgz", + "void-elements": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz" + } + }, + "collections": { + "version": "https://registry.npmjs.org/collections/-/collections-0.2.2.tgz", + "integrity": "sha1-HyMCay7zb5J+7MkB6ZxfDUj6M04=", + "dev": true, + "requires": { + "weak-map": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.0.tgz" + } + }, + "colors-cli": { + "version": "https://registry.npmjs.org/colors-cli/-/colors-cli-1.0.8.tgz", + "integrity": "sha1-svtixOo8MWk7u7mWgqYK3P6pyfs=", + "dev": true + }, + "combined-stream": { + "version": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "dev": true, + "requires": { + "delayed-stream": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + } + }, + "commander": { + "version": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, + "requires": { + "graceful-readlink": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz" + } + }, + "component-emitter": { + "version": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "concat-map": { + "version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "content-type-parser": { + "version": "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.1.tgz", + "integrity": "sha1-w+VpiMU8ZRJ/tG1AMqOpACRv3JQ=", + "dev": true + }, + "cookiejar": { + "version": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.0.tgz", + "integrity": "sha1-hlSWiVObbQ4mm2Y3owS+UIGU2Jg=", + "dev": true + }, + "core-util-is": { + "version": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cryptiles": { + "version": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "requires": { + "boom": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz" + } + }, + "css-parse": { + "version": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz", + "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=", + "dev": true + }, + "css-select": { + "version": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "css-what": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", + "domutils": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "nth-check": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz" + } + }, + "css-what": { + "version": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", + "dev": true + }, + "cssom": { + "version": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz", + "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=", + "dev": true + }, + "cssstyle": { + "version": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", + "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", + "dev": true, + "requires": { + "cssom": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz" + } + }, + "dashdash": { + "version": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + }, + "dependencies": { + "assert-plus": { + "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.6.3.tgz", + "integrity": "sha1-D364wwll7AjHKsz6ATDIt5mEFB0=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + } + }, + "decamelize": { + "version": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "deep-is": { + "version": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "delayed-stream": { + "version": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "dom-serializer": { + "version": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "dev": true, + "requires": { + "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "entities": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz" + }, + "dependencies": { + "domelementtype": { + "version": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + } + } + }, + "domelementtype": { + "version": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "dev": true + }, + "domhandler": { + "version": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", + "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", + "dev": true, + "requires": { + "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz" + } + }, + "domutils": { + "version": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz" + } + }, + "ecc-jsbn": { + "version": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" + } + }, + "ejs": { + "version": "https://registry.npmjs.org/ejs/-/ejs-2.5.6.tgz", + "integrity": "sha1-R5Y2v6P+Ox3r1SCH8KyyBLTxnIg=", + "dev": true + }, + "electron-to-chromium": { + "version": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.2.tgz", + "integrity": "sha1-uM5ck7MI2w6S9tBDXEbd7I9jY6s=", + "dev": true + }, + "entities": { + "version": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true + }, + "escape-string-regexp": { + "version": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escodegen": { + "version": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "dev": true, + "requires": { + "esprima": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "optionator": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz" + }, + "dependencies": { + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "dev": true, + "optional": true, + "requires": { + "amdefine": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" + } + } + } + }, + "esprima": { + "version": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "estraverse": { + "version": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "dev": true + }, + "esutils": { + "version": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "exec-sh": { + "version": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.0.tgz", + "integrity": "sha1-FPdd4/INKG75MwmbLOUKkDWc7xA=", + "dev": true, + "requires": { + "merge": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz" + } + }, + "extend": { + "version": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", + "integrity": "sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=", + "dev": true + }, + "extsprintf": { + "version": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", + "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", + "dev": true + }, + "fast-levenshtein": { + "version": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "forever-agent": { + "version": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "https://registry.npmjs.org/form-data/-/form-data-2.1.2.tgz", + "integrity": "sha1-icNTQAi5fq2ky7FX1Y9vXfAl6uQ=", + "dev": true, + "requires": { + "asynckit": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "combined-stream": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz" + } + }, + "formidable": { + "version": "https://registry.npmjs.org/formidable/-/formidable-1.1.1.tgz", + "integrity": "sha1-lriIb3w8NQi5Mta9cMTTqI818ak=", + "dev": true + }, + "fs.realpath": { + "version": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "getpass": { + "version": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz", + "integrity": "sha1-KD/9n8ElaECHUxHBtg6MQBhxEOY=", + "dev": true, + "requires": { + "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + }, + "dependencies": { + "assert-plus": { + "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "gh-pages": { + "version": "https://registry.npmjs.org/gh-pages/-/gh-pages-0.12.0.tgz", + "integrity": "sha1-2VHj7Zi4VpnUsEGOsaFbGgSYjcE=", + "dev": true, + "requires": { + "async": "https://registry.npmjs.org/async/-/async-2.1.2.tgz", + "commander": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "globby": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.10.tgz", + "q": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "q-io": "https://registry.npmjs.org/q-io/-/q-io-1.13.2.tgz", + "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz" + }, + "dependencies": { + "globby": { + "version": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + } + }, + "graceful-fs": { + "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.10.tgz", + "integrity": "sha1-8tcgwiCS90Mih3XHXjYSYyUB8TE=", + "dev": true + } + } + }, + "glob": { + "version": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", + "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", + "dev": true, + "requires": { + "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + } + }, + "graceful-readlink": { + "version": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, + "har-schema": { + "version": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "dev": true + }, + "har-validator": { + "version": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "dev": true, + "requires": { + "ajv": "https://registry.npmjs.org/ajv/-/ajv-4.11.5.tgz", + "har-schema": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz" + } + }, + "has-ansi": { + "version": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + } + }, + "has-flag": { + "version": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "hawk": { + "version": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "requires": { + "boom": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "cryptiles": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "hoek": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "sntp": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz" + } + }, + "highlight.js": { + "version": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.10.0.tgz", + "integrity": "sha1-+fCxTAvgDw5PseV3t0n+2eb1L1U=", + "dev": true + }, + "hoek": { + "version": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "html-encoding-sniffer": { + "version": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz", + "integrity": "sha1-eb96eF6klf5mFl5zQVPzY/9UN9o=", + "dev": true, + "requires": { + "whatwg-encoding": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz" + } + }, + "htmlparser2": { + "version": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", + "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "dev": true, + "requires": { + "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "domhandler": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", + "domutils": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "entities": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.6.tgz" + } + }, + "http-signature": { + "version": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "requires": { + "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "jsprim": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", + "sshpk": "https://registry.npmjs.org/sshpk/-/sshpk-1.11.0.tgz" + } + }, + "iconv-lite": { + "version": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", + "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=", + "dev": true + }, + "inflight": { + "version": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + } + }, + "inherits": { + "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "invert-kv": { + "version": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "is-buffer": { + "version": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", + "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" + } + }, + "is-typedarray": { + "version": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isstream": { + "version": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "jodid25519": { + "version": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", + "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" + } + }, + "js-base64": { + "version": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.9.tgz", + "integrity": "sha1-8OgK4DmkvWVLXygfyT8EqRSn/M4=", + "dev": true + }, + "jsbn": { + "version": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "jsdom": { + "version": "https://registry.npmjs.org/jsdom/-/jsdom-9.12.0.tgz", + "integrity": "sha1-6MVG//ywbADUgzyoRBD+1/igl9Q=", + "dev": true, + "requires": { + "abab": "https://registry.npmjs.org/abab/-/abab-1.0.3.tgz", + "acorn": "https://registry.npmjs.org/acorn/-/acorn-4.0.11.tgz", + "acorn-globals": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", + "array-equal": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "content-type-parser": "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.1.tgz", + "cssom": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz", + "cssstyle": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", + "escodegen": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "html-encoding-sniffer": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz", + "nwmatcher": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.3.9.tgz", + "parse5": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz", + "request": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "sax": "https://registry.npmjs.org/sax/-/sax-1.2.2.tgz", + "symbol-tree": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", + "tough-cookie": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "webidl-conversions": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.1.tgz", + "whatwg-encoding": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz", + "whatwg-url": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-4.6.0.tgz", + "xml-name-validator": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz" + }, + "dependencies": { + "sax": { + "version": "https://registry.npmjs.org/sax/-/sax-1.2.2.tgz", + "integrity": "sha1-/YYxojvHgmvvXYcb24c3jJVkeCg=", + "dev": true + } + } + }, + "json-schema": { + "version": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-stable-stringify": { + "version": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz" + } + }, + "json-stringify-safe": { + "version": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "jsonify": { + "version": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsprim": { + "version": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", + "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", + "dev": true, + "requires": { + "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "extsprintf": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", + "json-schema": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "verror": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz" + }, + "dependencies": { + "assert-plus": { + "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "kind-of": { + "version": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz", + "integrity": "sha1-R11pil5J/15T0U4+cyQp3Iv0z0c=", + "dev": true, + "requires": { + "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz" + } + }, + "lazy-cache": { + "version": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, + "lcid": { + "version": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz" + } + }, + "levn": { + "version": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "type-check": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" + } + }, + "linkify-it": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.0.3.tgz", + "integrity": "sha1-2UpGSPmxwXnWT6lykSaL22zpQ08=", + "dev": true, + "requires": { + "uc.micro": "1.0.3" + } + }, + "loading-cli": { + "version": "https://registry.npmjs.org/loading-cli/-/loading-cli-1.0.2.tgz", + "integrity": "sha1-nqRz9dPKZgKTMdhUmt9pFmavHNg=", + "dev": true + }, + "lodash": { + "version": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "lodash.assignin": { + "version": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", + "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=", + "dev": true + }, + "lodash.bind": { + "version": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", + "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=", + "dev": true + }, + "lodash.defaults": { + "version": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "dev": true + }, + "lodash.filter": { + "version": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", + "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=", + "dev": true + }, + "lodash.flatten": { + "version": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true + }, + "lodash.foreach": { + "version": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=", + "dev": true + }, + "lodash.map": { + "version": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=", + "dev": true + }, + "lodash.merge": { + "version": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.0.tgz", + "integrity": "sha1-aYhLoUSsM/5plzemCG3v+t0PicU=", + "dev": true + }, + "lodash.pick": { + "version": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", + "dev": true + }, + "lodash.reduce": { + "version": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", + "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=", + "dev": true + }, + "lodash.reject": { + "version": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", + "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=", + "dev": true + }, + "lodash.some": { + "version": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", + "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=", + "dev": true + }, + "longest": { + "version": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "markdown-it": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.0.tgz", + "integrity": "sha512-tNuOCCfunY5v5uhcO2AUMArvKAyKMygX8tfup/JrgnsDqcCATQsAExBq7o5Ml9iMmO82bk6jYNLj6khcrl0JGA==", + "dev": true, + "requires": { + "argparse": "1.0.9", + "entities": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "linkify-it": "2.0.3", + "mdurl": "1.0.1", + "uc.micro": "1.0.3" + } + }, + "marked": { + "version": "https://registry.npmjs.org/marked/-/marked-0.3.6.tgz", + "integrity": "sha1-ssbGGPzOzk74bE/Gy4p8v1rtqNc=", + "dev": true + }, + "marked3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/marked3/-/marked3-0.5.1.tgz", + "integrity": "sha512-I5XLEvFfGk9FBN0QUk9gyISaIsXeSHfhn67k2HsOlCQFsgepLoAgUJGCtAdanr7oifmdTiZQmLEMh2P7C2ieIw==", + "dev": true, + "requires": { + "slugo": "0.2.1" + } + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "dev": true + }, + "merge": { + "version": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz", + "integrity": "sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=", + "dev": true + }, + "methods": { + "version": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "mime": { + "version": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=", + "dev": true + }, + "mime-db": { + "version": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", + "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=", + "dev": true + }, + "mime-types": { + "version": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", + "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", + "dev": true, + "requires": { + "mime-db": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz" + } + }, + "mimeparse": { + "version": "https://registry.npmjs.org/mimeparse/-/mimeparse-0.1.4.tgz", + "integrity": "sha1-2vsCdSNw/SJgk64xUsJxrwGsJUo=", + "dev": true + }, + "minimatch": { + "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", + "dev": true, + "requires": { + "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz" + } + }, + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" + } + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + }, + "multi-stage-sourcemap": { + "version": "https://registry.npmjs.org/multi-stage-sourcemap/-/multi-stage-sourcemap-0.2.1.tgz", + "integrity": "sha1-sJ/IWG6qF/gdV1xK0C4Pej9rEQU=", + "dev": true, + "requires": { + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz" + }, + "dependencies": { + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "requires": { + "amdefine": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" + } + } + } + }, + "normalize-range": { + "version": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "nth-check": { + "version": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", + "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "dev": true, + "requires": { + "boolbase": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" + } + }, + "num2fraction": { + "version": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "nwmatcher": { + "version": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.3.9.tgz", + "integrity": "sha1-i6tIb/f6Pf0IZla76LFxFtNpLSo=", + "dev": true + }, + "oauth-sign": { + "version": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object-assign": { + "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "once": { + "version": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + } + }, + "optionator": { + "version": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "fast-levenshtein": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "levn": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "prelude-ls": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "type-check": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "wordwrap": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" + } + }, + "os-locale": { + "version": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz" + } + }, + "parse5": { + "version": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz", + "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=", + "dev": true + }, + "path-is-absolute": { + "version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "performance-now": { + "version": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "dev": true + }, + "pify": { + "version": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + } + }, + "postcss": { + "version": "https://registry.npmjs.org/postcss/-/postcss-5.2.16.tgz", + "integrity": "sha1-cysxAAAPn/g3mkilODntCXN2rVc=", + "dev": true, + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "js-base64": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.9.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz" + }, + "dependencies": { + "supports-color": { + "version": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz" + } + } + } + }, + "postcss-value-parser": { + "version": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", + "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", + "dev": true + }, + "prelude-ls": { + "version": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "process-nextick-args": { + "version": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "punycode": { + "version": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "q": { + "version": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", + "dev": true + }, + "q-io": { + "version": "https://registry.npmjs.org/q-io/-/q-io-1.13.2.tgz", + "integrity": "sha1-7qEw1IHdteGqG8WmaFX3OR0G8AM=", + "dev": true, + "requires": { + "collections": "https://registry.npmjs.org/collections/-/collections-0.2.2.tgz", + "mime": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "mimeparse": "https://registry.npmjs.org/mimeparse/-/mimeparse-0.1.4.tgz", + "q": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "qs": "https://registry.npmjs.org/qs/-/qs-1.2.2.tgz", + "url2": "https://registry.npmjs.org/url2/-/url2-0.0.0.tgz" + } + }, + "qs": { + "version": "https://registry.npmjs.org/qs/-/qs-1.2.2.tgz", + "integrity": "sha1-GbV/8k3CqZzh+L32r82ln472H4g=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.6.tgz", + "integrity": "sha1-i0Ou125xSDk40SqNRsbPGgCx+BY=", + "dev": true, + "requires": { + "buffer-shims": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + }, + "repeat-string": { + "version": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "request": { + "version": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "dev": true, + "requires": { + "aws-sign2": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "aws4": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "caseless": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "combined-stream": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "extend": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", + "forever-agent": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "form-data": "https://registry.npmjs.org/form-data/-/form-data-2.1.2.tgz", + "har-validator": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "hawk": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "http-signature": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "is-typedarray": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "isstream": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "json-stringify-safe": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", + "oauth-sign": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "performance-now": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "qs": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", + "stringstream": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "tough-cookie": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "tunnel-agent": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "uuid": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz" + }, + "dependencies": { + "qs": { + "version": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true + } + } + }, + "right-align": { + "version": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz" + } + }, + "rimraf": { + "version": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "dev": true, + "requires": { + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz" + } + }, + "safe-buffer": { + "version": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", + "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=", + "dev": true + }, + "sax": { + "version": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", + "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=", + "dev": true + }, + "slugo": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/slugo/-/slugo-0.2.1.tgz", + "integrity": "sha1-pEuyxqcqiSGIiwj8GOMYHp3X344=", + "dev": true + }, + "sntp": { + "version": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "requires": { + "hoek": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz" + } + }, + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "https://registry.npmjs.org/sshpk/-/sshpk-1.11.0.tgz", + "integrity": "sha1-LY1eu0pvqyj/ujf6YqkPSj6lnXc=", + "dev": true, + "requires": { + "asn1": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "bcrypt-pbkdf": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "dashdash": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "ecc-jsbn": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "getpass": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz", + "jodid25519": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", + "jsbn": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "tweetnacl": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + }, + "dependencies": { + "assert-plus": { + "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "ssr": { + "version": "https://registry.npmjs.org/ssr/-/ssr-1.1.1.tgz", + "integrity": "sha1-uo6R+PCgFd0Vc+4tXpztjoWRm+4=", + "dev": true, + "requires": { + "colors-cli": "https://registry.npmjs.org/colors-cli/-/colors-cli-1.0.8.tgz", + "iconv-lite": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", + "yargs": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz" + } + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "string-width": { + "version": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "is-fullwidth-code-point": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + } + }, + "stringstream": { + "version": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true + }, + "strip-ansi": { + "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + } + }, + "stylus": { + "version": "https://registry.npmjs.org/stylus/-/stylus-0.54.5.tgz", + "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=", + "dev": true, + "requires": { + "css-parse": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.3.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "sax": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz" + }, + "dependencies": { + "glob": { + "version": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", + "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", + "dev": true, + "requires": { + "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + } + }, + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "requires": { + "amdefine": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" + } + } + } + }, + "superagent": { + "version": "https://registry.npmjs.org/superagent/-/superagent-3.5.2.tgz", + "integrity": "sha1-M2GjlxVnUEw1EGOr6q4PqiPb8/g=", + "dev": true, + "requires": { + "component-emitter": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "cookiejar": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.0.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.3.tgz", + "extend": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", + "form-data": "https://registry.npmjs.org/form-data/-/form-data-2.1.2.tgz", + "formidable": "https://registry.npmjs.org/formidable/-/formidable-1.1.1.tgz", + "methods": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "mime": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "qs": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.6.tgz" + }, + "dependencies": { + "qs": { + "version": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true + } + } + }, + "supports-color": { + "version": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "symbol-tree": { + "version": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", + "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", + "dev": true + }, + "to-markdown": { + "version": "https://registry.npmjs.org/to-markdown/-/to-markdown-3.0.4.tgz", + "integrity": "sha1-PHgi+ShrwpT/N/ng5eIxVMEizmk=", + "dev": true, + "requires": { + "collapse-whitespace": "https://registry.npmjs.org/collapse-whitespace/-/collapse-whitespace-1.1.2.tgz", + "jsdom": "https://registry.npmjs.org/jsdom/-/jsdom-9.12.0.tgz" + } + }, + "tough-cookie": { + "version": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "dev": true, + "requires": { + "punycode": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" + } + }, + "tr46": { + "version": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, + "tunnel-agent": { + "version": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz" + } + }, + "tweetnacl": { + "version": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "type-check": { + "version": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" + } + }, + "uc.micro": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.3.tgz", + "integrity": "sha1-ftUNXg+an7ClczeSWfKndFjVAZI=", + "dev": true + }, + "uglify-js": { + "version": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.18.tgz", + "integrity": "sha1-kl0UuuSKti0Yg7Qa/m4iYWYq244=", + "dev": true, + "requires": { + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "uglify-to-browserify": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "yargs": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz" + }, + "dependencies": { + "camelcase": { + "version": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "cliui": { + "version": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "right-align": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "wordwrap": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz" + } + }, + "window-size": { + "version": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "wordwrap": { + "version": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + }, + "yargs": { + "version": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "cliui": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "decamelize": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "window-size": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz" + } + } + } + }, + "uglify-to-browserify": { + "version": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "url2": { + "version": "https://registry.npmjs.org/url2/-/url2-0.0.0.tgz", + "integrity": "sha1-Tqq9HVw6yQ1iq0SFyZhCKGWgSxo=", + "dev": true + }, + "util-deprecate": { + "version": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "uuid": { + "version": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", + "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=", + "dev": true + }, + "verror": { + "version": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", + "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", + "dev": true, + "requires": { + "extsprintf": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz" + } + }, + "void-elements": { + "version": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true + }, + "watch": { + "version": "https://registry.npmjs.org/watch/-/watch-1.0.2.tgz", + "integrity": "sha1-NApxe952Vyb6CqB9ch4BR6VR3ww=", + "dev": true, + "requires": { + "exec-sh": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.0.tgz", + "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz" + }, + "dependencies": { + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "weak-map": { + "version": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.0.tgz", + "integrity": "sha1-tm5Wqd8L0lp2u/G1FNsSkIBhSjc=", + "dev": true + }, + "webidl-conversions": { + "version": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.1.tgz", + "integrity": "sha1-gBWherg+fhsxFjhIas6B2mziBqA=", + "dev": true + }, + "whatwg-encoding": { + "version": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz", + "integrity": "sha1-PGxFGhmO567FWx7GHQkgxngBpfQ=", + "dev": true, + "requires": { + "iconv-lite": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz" + }, + "dependencies": { + "iconv-lite": { + "version": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", + "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=", + "dev": true + } + } + }, + "whatwg-url": { + "version": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-4.6.0.tgz", + "integrity": "sha1-75jaRCJzvgTPljLhdvJX0jlaGuQ=", + "dev": true, + "requires": { + "tr46": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "webidl-conversions": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + }, + "dependencies": { + "webidl-conversions": { + "version": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + } + } + }, + "window-size": { + "version": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", + "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", + "dev": true + }, + "wordwrap": { + "version": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "wrap-ansi": { + "version": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + } + }, + "wrappy": { + "version": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xml-name-validator": { + "version": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz", + "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=", + "dev": true + }, + "y18n": { + "version": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yargs": { + "version": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", + "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", + "dev": true, + "requires": { + "camelcase": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "cliui": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "decamelize": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "os-locale": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "string-width": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "window-size": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", + "y18n": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz" + } + } + } +} From b8fb9d2201fe626df0e2a6cbb5a4d73235958d6b Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Tue, 6 Feb 2018 13:41:11 +0800 Subject: [PATCH 0142/1284] Update Logo --- README.md | 5 +++++ template/img/logo.svg | 18 +++--------------- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 3568bd2d72a..f74022fa109 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,8 @@ + Linux Command --- diff --git a/template/img/logo.svg b/template/img/logo.svg index 77b1b03ea55..e8a34cb1386 100644 --- a/template/img/logo.svg +++ b/template/img/logo.svg @@ -1,15 +1,3 @@ - - - - logo - Created with Sketch. - - - - - - - \ No newline at end of file + + + From e94941c48977a3445ed608ef096190667471832d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 9 Feb 2018 09:17:03 +0800 Subject: [PATCH 0143/1284] Update openssl.md --- command/openssl.md | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/command/openssl.md b/command/openssl.md index eb7c4fbdeab..7f33ade7f4a 100644 --- a/command/openssl.md +++ b/command/openssl.md @@ -35,9 +35,20 @@ OpenSSL实现了5种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1 事实上,OpenSSL提供的CA应用程序就是一个小型的证书管理中心(CA),实现了证书签发的整个流程和证书管理的大部分机制。 -### 实例 +### 实例 - **1、消息摘要算法应用例子** +**1、使用 openssl 生成密码** + +几乎所有 Linux 发行版都包含 openssl。我们可以利用它的随机功能来生成可以用作密码的随机字母字符串。 + +```bash +openssl rand -base64 10 +# nU9LlHO5nsuUvw== +``` + +nU9LlHO5nsuUvw== + +**2、消息摘要算法应用例子** 用SHA1算法计算文件file.txt的哈西值,输出到stdout: @@ -75,7 +86,7 @@ OpenSSL实现了5种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1 # openssl sha1 -verify rsapublic.pem -signature rsasign.bin file.txt ``` - **2、对称加密应用例子** + **3、对称加密应用例子** 对称加密应用例子,用DES3算法的CBC模式加密文件plaintext.doc,加密结果输出到文件ciphertext.bin。 @@ -107,7 +118,7 @@ OpenSSL实现了5种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1 # openssl rc5 -in plaintext.doc -out ciphertext.bin -S C62CB1D49F158ADC -iv E9EDACA1BD7090C6 -K 89D4B1678D604FAA3DBFFD030A314B29 ``` - **3、Diffie-Hellman应用例子** + **4、Diffie-Hellman应用例子** 使用生成因子2和随机的1024-bit的素数产生D0ffie-Hellman参数,输出保存到文件dhparam.pem @@ -121,7 +132,7 @@ OpenSSL实现了5种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1 # openssl dhparam -in dhparam.pem -noout -C ``` - **4、DSA应用例子应用例子** + **5、DSA应用例子应用例子** 生成1024位DSA参数集,并输出到文件dsaparam.pem。 @@ -147,7 +158,7 @@ OpenSSL实现了5种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1 # openssl dsa -in dsaprivatekey.pem -out dsaprivatekey.pem -des3 -passin ``` - **5、RSA应用例子** + **6、RSA应用例子** 产生1024位RSA私匙,用3DES加密它,口令为trousers,输出到文件rsaprivatekey.pem From 122a39077588ef9e5f104090327f6deda9133ab6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 9 Feb 2018 09:22:27 +0800 Subject: [PATCH 0144/1284] Update dd.md --- command/dd.md | 211 ++++++++++++++++++++------------------------------ 1 file changed, 84 insertions(+), 127 deletions(-) diff --git a/command/dd.md b/command/dd.md index 3cd340ae9de..a69143bd9c7 100644 --- a/command/dd.md +++ b/command/dd.md @@ -1,127 +1,84 @@ -dd -=== - -复制文件并对原文件的内容进行转换和格式化处理 - -## 补充说明 - -**dd命令** 用于复制文件并对原文件的内容进行转换和格式化处理。dd命令功能很强大的,对于一些比较底层的问题,使用dd命令往往可以得到出人意料的效果。用的比较多的还是用dd来备份裸设备。但是不推荐,如果需要备份oracle裸设备,可以使用rman备份,或使用第三方软件备份,使用dd的话,管理起来不太方便。 - -建议在有需要的时候使用dd 对物理磁盘操作,如果是文件系统的话还是使用tar backup cpio等其他命令更加方便。另外,使用dd对磁盘操作时,最好使用块设备文件。 - -### 语法 - -``` -dd(选项) -``` - -### 选项 - -``` -bs=<字节数>:将ibs(输入)与欧巴桑(输出)设成指定的字节数; -cbs=<字节数>:转换时,每次只转换指定的字节数; -conv=<关键字>:指定文件转换的方式; -count=<区块数>:仅读取指定的区块数; -ibs=<字节数>:每次读取的字节数; -obs=<字节数>:每次输出的字节数; -of=<文件>:输出到文件; -seek=<区块数>:一开始输出时,跳过指定的区块数; -skip=<区块数>:一开始读取时,跳过指定的区块数; ---help:帮助; ---version:显示版本信息。 -``` - -### 实例 - -``` -[root@localhost text]# dd if=/dev/zero of=sun.txt bs=1M count=1 -1+0 records in -1+0 records out -1048576 bytes (1.0 MB) copied, 0.006107 seconds, 172 MB/s - -[root@localhost text]# du -sh sun.txt -1.1M sun.txt -``` - -该命令创建了一个1M大小的文件sun.txt,其中参数解释: - -* **if** 代表输入文件。如果不指定if,默认就会从stdin中读取输入。 -* **of** 代表输出文件。如果不指定of,默认就会将stdout作为默认输出。 -* **bs** 代表字节为单位的块大小。 -* **count** 代表被复制的块数。 -* **/dev/zero** 是一个字符设备,会不断返回0值字节(\0)。 - -块大小可以使用的计量单位表 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
单元大小代码
字节(1B)c
字节(2B)w
块(512B)b
千字节(1024B)k
兆字节(1024KB)M
吉字节(1024MB)G
- -以上命令可以看出dd命令来测试内存操作速度: - -``` -1048576 bytes (1.0 MB) copied, 0.006107 seconds, 172 MB/s -``` - - - \ No newline at end of file +dd +=== + +复制文件并对原文件的内容进行转换和格式化处理 + +## 补充说明 + +**dd命令** 用于复制文件并对原文件的内容进行转换和格式化处理。dd命令功能很强大的,对于一些比较底层的问题,使用dd命令往往可以得到出人意料的效果。用的比较多的还是用dd来备份裸设备。但是不推荐,如果需要备份oracle裸设备,可以使用rman备份,或使用第三方软件备份,使用dd的话,管理起来不太方便。 + +建议在有需要的时候使用dd 对物理磁盘操作,如果是文件系统的话还是使用tar backup cpio等其他命令更加方便。另外,使用dd对磁盘操作时,最好使用块设备文件。 + +### 语法 + +``` +dd(选项) +``` + +### 选项 + +``` +bs=<字节数>:将ibs(输入)与欧巴桑(输出)设成指定的字节数; +cbs=<字节数>:转换时,每次只转换指定的字节数; +conv=<关键字>:指定文件转换的方式; +count=<区块数>:仅读取指定的区块数; +ibs=<字节数>:每次读取的字节数; +obs=<字节数>:每次输出的字节数; +of=<文件>:输出到文件; +seek=<区块数>:一开始输出时,跳过指定的区块数; +skip=<区块数>:一开始读取时,跳过指定的区块数; +--help:帮助; +--version:显示版本信息。 +``` + +### 实例 + +``` +[root@localhost text]# dd if=/dev/zero of=sun.txt bs=1M count=1 +1+0 records in +1+0 records out +1048576 bytes (1.0 MB) copied, 0.006107 seconds, 172 MB/s + +[root@localhost text]# du -sh sun.txt +1.1M sun.txt +``` + +该命令创建了一个1M大小的文件sun.txt,其中参数解释: + +* **if** 代表输入文件。如果不指定if,默认就会从stdin中读取输入。 +* **of** 代表输出文件。如果不指定of,默认就会将stdout作为默认输出。 +* **bs** 代表字节为单位的块大小。 +* **count** 代表被复制的块数。 +* **/dev/zero** 是一个字符设备,会不断返回0值字节(\0)。 + +块大小可以使用的计量单位表 + +单元大小 | 代码 +---- | ---- +字节(1B)| c +字节(2B)| w +块(512B)| b +千字节(1024B) | k +兆字节(1024KB)| M +吉字节(1024MB)| G + +以上命令可以看出dd命令来测试内存操作速度: + +``` +1048576 bytes (1.0 MB) copied, 0.006107 seconds, 172 MB/s +``` + +**生成随机字符串** + +我们甚至可以使用 /dev/urandom 设备配合 dd 命令 来获取随机字符串。 + +``` +[root@localhost ~]# dd if=/dev/urandom bs=1 count=15|base64 -w 0 +15+0 records in +15+0 records out +15 bytes (15 B) copied, 0.000111993 s, 134 kB/s +wFRAnlkXeBXmWs1MyGEs +``` + + + From f38fd0eb2c1a2e1fa78baac14bbdfc80c2678c3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 9 Feb 2018 09:24:58 +0800 Subject: [PATCH 0145/1284] Update md5sum.md --- command/md5sum.md | 189 ++++++++++++++++++++++++---------------------- 1 file changed, 99 insertions(+), 90 deletions(-) diff --git a/command/md5sum.md b/command/md5sum.md index ffcccc62212..ea9197a6971 100644 --- a/command/md5sum.md +++ b/command/md5sum.md @@ -1,90 +1,99 @@ -md5sum -=== - -计算和校验文件报文摘要的工具程序 - -## 补充说明 - -**md5sum命令** 采用MD5报文摘要算法(128位)计算和检查文件的校验和。一般来说,安装了Linux后,就会有md5sum这个工具,直接在命令行终端直接运行。 - -MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改。MD5 全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意长度的信息逐位进行计算,产生一个二进制长度为128位(十六进制长度就是32位)的“指纹”(或称“报文摘要”),不同的文件产生相同的报文摘要的可能性是非常非常之小的。 - -### 语法 - -``` -md5sum(选项)(参数) -``` - -### 选项 - -``` --b:二进制模式读取文件; --t或--text:把输入的文件作为文本文件看待; --c:从指定文件中读取MD5校验和,并进行校验; ---status:验证成功时不输出任何信息; --w:当校验不正确时给出警告信息。 -``` - -### 参数 - -文件:指定保存着文件名和校验和的文本文件。 - -### 实例 - - **生成一个文件insert.sql的md5值:** - -``` -[root@localhost ~]# md5sum insert.sql -bcda6cb5c704664f989703ac5a88f112 insert.sql -``` - - **检查文件testfile是否被修改过:** - -首先生成md5文件: - -``` -md5sum testfile > testfile.md5 -``` - -检查: - -``` -md5sum testfile -c testfile.md5 -``` - -如果文件没有变化,输出应该如下: - -``` -forsort: OK -``` - -此时,md5sum命令返回0。 - -如果文件发生了变化,输出应该如下: - -``` -forsort: FAILED -md5sum: WARNING: 1 of 1 computed checksum did NOT match -``` - -此时,md5sum命令返回非0。 - -这里,检查用的文件名随意。如果不想有任何输出,则`md5sum testfile --status -c testfile.md5`,这时候通过返回值来检测结果。 - -检测的时候如果检测文件非法则输出信息的选项: - -``` -md5sum -w -c testfile.md5 -``` - -输出之后,文件异常输出类似如下: - -``` -md5sum: testfile.md5: 1: improperly formatted MD5 checksum line -md5sum: testfile.md5: no properly formatted MD5 checksum lines found -``` - -这里,testfile.md5只有一行信息,但是我认为地给它多加了一个字符,导致非法。如果md5文件正常那么`-w`有没有都一样。 - - - \ No newline at end of file +md5sum +=== + +计算和校验文件报文摘要的工具程序 + +## 补充说明 + +**md5sum命令** 采用MD5报文摘要算法(128位)计算和检查文件的校验和。一般来说,安装了Linux后,就会有md5sum这个工具,直接在命令行终端直接运行。 + +MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改。MD5 全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意长度的信息逐位进行计算,产生一个二进制长度为128位(十六进制长度就是32位)的“指纹”(或称“报文摘要”),不同的文件产生相同的报文摘要的可能性是非常非常之小的。 + +### 语法 + +``` +md5sum(选项)(参数) +``` + +### 选项 + +``` +-b:二进制模式读取文件; +-t或--text:把输入的文件作为文本文件看待; +-c:从指定文件中读取MD5校验和,并进行校验; +--status:验证成功时不输出任何信息; +-w:当校验不正确时给出警告信息。 +``` + +### 参数 + +文件:指定保存着文件名和校验和的文本文件。 + +### 实例 + +**使用 md5sum 生成密码** + +另一种获取可用作密码的随机字符串的方法是计算 MD5 校验值!校验值看起来确实像是随机字符串组合在一起,我们可以用作密码。确保你的计算源是个变量,这样的话每次运行命令时生成的校验值都不一样。比如 date !date 命令 总会生成不同的输出。 + +``` +[root@localhost ~]# date | md5sum +6a43f2c246cdc3e6a3592652f831d186 - +``` + +**生成一个文件insert.sql的md5值:** + +``` +[root@localhost ~]# md5sum insert.sql +bcda6cb5c704664f989703ac5a88f112 insert.sql +``` + +**检查文件testfile是否被修改过:** + +首先生成md5文件: + +``` +md5sum testfile > testfile.md5 +``` + +检查: + +``` +md5sum testfile -c testfile.md5 +``` + +如果文件没有变化,输出应该如下: + +``` +forsort: OK +``` + +此时,md5sum命令返回0。 + +如果文件发生了变化,输出应该如下: + +``` +forsort: FAILED +md5sum: WARNING: 1 of 1 computed checksum did NOT match +``` + +此时,md5sum命令返回非0。 + +这里,检查用的文件名随意。如果不想有任何输出,则`md5sum testfile --status -c testfile.md5`,这时候通过返回值来检测结果。 + +检测的时候如果检测文件非法则输出信息的选项: + +``` +md5sum -w -c testfile.md5 +``` + +输出之后,文件异常输出类似如下: + +``` +md5sum: testfile.md5: 1: improperly formatted MD5 checksum line +md5sum: testfile.md5: no properly formatted MD5 checksum lines found +``` + +这里,testfile.md5只有一行信息,但是我认为地给它多加了一个字符,导致非法。如果md5文件正常那么`-w`有没有都一样。 + + + From 6265d583a1bf3ec8feaca55178538b7acaf8af8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 9 Feb 2018 09:42:46 +0800 Subject: [PATCH 0146/1284] Update rm.md --- command/rm.md | 162 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 110 insertions(+), 52 deletions(-) diff --git a/command/rm.md b/command/rm.md index 7ce6fb74e74..7a8612ae022 100644 --- a/command/rm.md +++ b/command/rm.md @@ -1,52 +1,110 @@ -rm -=== - -用于删除给定的文件和目录 - -## 补充说明 - -**rm** **命令** 可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。 - -注意:使用rm命令要格外小心。因为一旦删除了一个文件,就无法再恢复它。所以,在删除文件之前,最好再看一下文件的内容,确定是否真要删除。rm命令可以用-i选项,这个选项在使用文件扩展名字符删除多个文件时特别有用。使用这个选项,系统会要求你逐一确定是否要删除。这时,必须输入y并按Enter键,才能删除文件。如果仅按Enter键或其他字符,文件不会被删除。 - -### 语法 - -``` -rm (选项)(参数) -``` - -### 选项 - -``` --d:直接把欲删除的目录的硬连接数据删除成0,删除该目录; --f:强制删除文件或目录; --i:删除已有文件或目录之前先询问用户; --r或-R:递归处理,将指定目录下的所有文件与子目录一并处理; ---preserve-root:不对根目录进行递归操作; --v:显示指令的详细执行过程。 -``` - -### 参数 - -文件:指定被删除的文件列表,如果参数中含有目录,则必须加上`-r`或者`-R`选项。 - -### 实例 - -交互式删除当前目录下的文件test和example - -``` -rm -i test example -Remove test ?n(不删除文件test) -Remove example ?y(删除文件example) -``` - -删除当前目录下除隐含文件外的所有文件和子目录 - -``` -# rm -r * -``` - -应注意,这样做是非常危险的! - - - \ No newline at end of file +rm +=== + +用于删除给定的文件和目录 + +## 补充说明 + +**rm** **命令** 可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。 + +注意:使用rm命令要格外小心。因为一旦删除了一个文件,就无法再恢复它。所以,在删除文件之前,最好再看一下文件的内容,确定是否真要删除。rm命令可以用-i选项,这个选项在使用文件扩展名字符删除多个文件时特别有用。使用这个选项,系统会要求你逐一确定是否要删除。这时,必须输入y并按Enter键,才能删除文件。如果仅按Enter键或其他字符,文件不会被删除。 + +### 语法 + +``` +rm (选项)(参数) +``` + +### 选项 + +``` +-d:直接把欲删除的目录的硬连接数据删除成0,删除该目录; +-f:强制删除文件或目录; +-i:删除已有文件或目录之前先询问用户; +-r或-R:递归处理,将指定目录下的所有文件与子目录一并处理; +--preserve-root:不对根目录进行递归操作; +-v:显示指令的详细执行过程。 +``` + +### 参数 + +文件:指定被删除的文件列表,如果参数中含有目录,则必须加上`-r`或者`-R`选项。 + +### 实例 + +交互式删除当前目录下的文件test和example + +``` +rm -i test example +Remove test ?n(不删除文件test) +Remove example ?y(删除文件example) +``` + +删除当前目录下除隐含文件外的所有文件和子目录 + +``` +# rm -r * +``` + +应注意,这样做是非常危险的! + +**rm 命令删除文件** + +```bash +# rm 文件1 文件2 ... +rm testfile.txt +``` + +**rm 命令删除目录** + +> rm -r [目录名称] +> -r 表示递归地删除目录下的所有文件和目录。 +> -f 表示强制删除 + +``` +rm -rf testdir +rm -r testdir +``` + +**删除操作前有确认提示** + +> rm -i [文件/目录] + +``` +rm -r -i testdir +``` + +**rm 忽略不存在的文件或目录** + +> -f 选项(LCTT 译注:即 “force”)让此次操作强制执行,忽略错误提示 + +``` +rm -f [文件...] +``` + +**仅在某些场景下确认删除** + +> 选项 -I,可保证在删除超过 3 个文件时或递归删除时(LCTT 译注: 如删除目录)仅提示一次确认。 + + +``` +rm -I file1 file2 file3 +``` + +**删除根目录** + +> 当然,删除根目录(/)是 Linux 用户最不想要的操作,这也就是为什么默认 rm 命令不支持在根目录上执行递归删除操作。 +> 然而,如果你非得完成这个操作,你需要使用 --no-preserve-root 选项。当提供此选项,rm 就不会特殊处理根目录(/)了。 + +``` +不给实例了,操作系统都被你删除了,你太坏了😆 +``` + +**rm 显示当前删除操作的详情** + +``` +rm -v [文件/目录] +``` + + + From 3c8d2bf62a2581dd3115c7ff4fafc867b41b49a5 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Sun, 11 Feb 2018 12:51:50 +0800 Subject: [PATCH 0147/1284] Update chrome-extensions image. --- README.md | 2 +- chrome-extensions.gif | Bin 0 -> 459537 bytes chrome-extensions.png | Bin 102680 -> 0 bytes 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 chrome-extensions.gif delete mode 100644 chrome-extensions.png diff --git a/README.md b/README.md index f74022fa109..46aa74475bd 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Chrome 插件,可在[源码仓库](https://github.com/jaywcjlove/oscnews)预 [![Chrome Web Store 下载](http://jaywcjlove.github.io/sb/download/chrome-web-store.svg)](https://chrome.google.com/webstore/detail/oscnews/iheapfheanfjcemgneblljhaebonakbg) -[![Chrome Web Store 下载](./chrome-extensions.png)](https://github.com/jaywcjlove/oscnews) +[![Chrome Web Store 下载](./chrome-extensions.gif)](https://github.com/jaywcjlove/oscnews) 扫描二维码移动端预览搜索 diff --git a/chrome-extensions.gif b/chrome-extensions.gif new file mode 100644 index 0000000000000000000000000000000000000000..2c1066ca02e7b861cb35154aa1d085b7c8d17a34 GIT binary patch literal 459537 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

k}P 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%0DC_U&R8(tZx{at_0O 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%0Dob?h(Xp?N0y2ijShU_O?m<(ejYFXjx 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�GV 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

0X4d1 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%0D_I}w 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 literal 0 HcmV?d00001 diff --git a/chrome-extensions.png b/chrome-extensions.png deleted file mode 100644 index 786c275e0ef883a4df86ed7435b8018fa061ddd3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102680 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 Z)4$bk2|PGct04b#IOBX8f70jv{{XnM9pV50 From d642036fbfdc59f6624a6a2c9d9d7b1328de656f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Sat, 24 Feb 2018 09:40:37 +0800 Subject: [PATCH 0148/1284] Update rmdir.md --- command/rmdir.md | 93 +++++++++++++++++++++++++----------------------- 1 file changed, 49 insertions(+), 44 deletions(-) diff --git a/command/rmdir.md b/command/rmdir.md index 92c7fae6cbc..1cb55cdf21b 100644 --- a/command/rmdir.md +++ b/command/rmdir.md @@ -1,44 +1,49 @@ -rmdir -=== - -用来删除空目录 - -## 补充说明 - -**rmdir命令** 用来删除空目录。当目录不再被使用时,或者磁盘空间已到达使用限定值,就需要删除失去使用价值的目录。利用rmdir命令可以从一个目录中删除一个或多个空的子目录。该命令从一个目录中删除一个或多个子目录,其中dirname佬表示目录名。如果dirname中没有指定路径,则删除当前目录下由dirname指定的目录;如dirname中包含路径,则删除指定位置的目录。删除目录时,必须具有对其父目录的写权限。 - -注意:子目录被删除之前应该是空目录。就是说,该目录中的所有文件必须用rm命令全部,另外,当前工作目录必须在被删除目录之上,不能是被删除目录本身,也不能是被删除目录的子目录。 - -虽然还可以用带有`-r`选项的rm命令递归删除一个目录中的所有文件和该目录本身,但是这样做存在很大的危险性。 - -### 语法 - -``` -rmdir(选项)(参数) -``` - -### 选项 - -``` --p或--parents:删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除; ---ignore-fail-on-non-empty:此选项使rmdir命令忽略由于删除非空目录时导致的错误信息; --v或-verboes:显示命令的详细执行过程; ---help:显示命令的帮助信息; ---version:显示命令的版本信息。 -``` - -### 参数 - -目录列表:要删除的空目录列表。当删除多个空目录时,目录名之间使用空格隔开。 - -### 实例 - -删除子目录os_1和其父目录bin - -``` -cd /usr/meng/test -rmdir -p bin/os_1 -``` - - - \ No newline at end of file +rmdir +=== + +用来删除空目录 + +## 补充说明 + +**rmdir命令** 用来删除空目录。当目录不再被使用时,或者磁盘空间已到达使用限定值,就需要删除失去使用价值的目录。利用rmdir命令可以从一个目录中删除一个或多个空的子目录。该命令从一个目录中删除一个或多个子目录,其中dirname佬表示目录名。如果dirname中没有指定路径,则删除当前目录下由dirname指定的目录;如dirname中包含路径,则删除指定位置的目录。删除目录时,必须具有对其父目录的写权限。 + +注意:子目录被删除之前应该是空目录。就是说,该目录中的所有文件必须用rm命令全部,另外,当前工作目录必须在被删除目录之上,不能是被删除目录本身,也不能是被删除目录的子目录。 + +虽然还可以用带有`-r`选项的rm命令递归删除一个目录中的所有文件和该目录本身,但是这样做存在很大的危险性。 + +### 语法 + +``` +rmdir(选项)(参数) +``` + +### 选项 + +``` +-p或--parents:删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除; +--ignore-fail-on-non-empty:此选项使rmdir命令忽略由于删除非空目录时导致的错误信息; +-v或-verboes:显示命令的详细执行过程; +--help:显示命令的帮助信息; +--version:显示命令的版本信息。 +``` + +### 参数 + +目录列表:要删除的空目录列表。当删除多个空目录时,目录名之间使用空格隔开。 + +### 实例 + +将工作目录下,名为 `www` 的子目录删除 : + +```bash +rmdir www +``` + +在工作目录下的 www 目录中,删除名为 Test 的子目录。若 Test 删除后,www 目录成为空目录,则 www 亦予删除。 + +```bash +rmdir -p www/Test +``` + + + From e162228bada4040c4ba36760a70ebaeab454982a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Sat, 24 Feb 2018 09:43:36 +0800 Subject: [PATCH 0149/1284] Update rmdir.md --- command/rmdir.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/command/rmdir.md b/command/rmdir.md index 1cb55cdf21b..fab3d243c43 100644 --- a/command/rmdir.md +++ b/command/rmdir.md @@ -45,5 +45,11 @@ rmdir www rmdir -p www/Test ``` +下面命令等价于 `rmdir a/b/c`, `rmdir a/b`, `rmdir a` + +```bash +rmdir -p a/b/c +``` + From 173ac9463dcaed531ebf397949355e29676435ec Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Sat, 24 Feb 2018 11:31:04 +0800 Subject: [PATCH 0150/1284] Update template. --- build/compile.js | 12 +++++++----- template/details.ejs | 2 +- template/footer.ejs | 11 +++++++++++ template/hot.ejs | 2 +- template/index.ejs | 2 +- template/list.ejs | 2 +- template/search.ejs | 4 ---- template/styl/index.styl | 18 ++++++++++++------ 8 files changed, 34 insertions(+), 19 deletions(-) diff --git a/build/compile.js b/build/compile.js index 386826a3f43..43314694d90 100644 --- a/build/compile.js +++ b/build/compile.js @@ -95,14 +95,16 @@ CreateDatajs('./.deploy/js/dt.js',function(dt_path,arr){ ReadTmpToHTML('/template/list.ejs','/.deploy/list.html',null,{ p:'/list.html', n:'搜索', - d:'最专业的Linux命令大全,命令搜索引擎,内容包含Linux命令手册、详解、学习,值得收藏的Linux命令速查手册。' + d: '最专业的Linux命令大全,命令搜索引擎,内容包含Linux命令手册、详解、学习,值得收藏的Linux命令速查手册。', + command_length: arr.length }); ReadTmpToHTML('/template/hot.ejs','/.deploy/hot.html',null,{ - p:'/hot.html', - n:'搜索', - d:'最专业的Linux命令大全,命令搜索引擎,内容包含Linux命令手册、详解、学习,值得收藏的Linux命令速查手册。', - arr:arr + p:'/hot.html', + n:'搜索', + d:'最专业的Linux命令大全,命令搜索引擎,内容包含Linux命令手册、详解、学习,值得收藏的Linux命令速查手册。', + arr: arr, + command_length: arr.length }); // 文章批量生成 arr.forEach(function(itm,idx){ diff --git a/template/details.ejs b/template/details.ejs index f797fd8f226..da2fa3af2f8 100644 --- a/template/details.ejs +++ b/template/details.ejs @@ -13,4 +13,4 @@ {{content}}

+ + + +

-<%- include('footer'); %> \ No newline at end of file +<%- include('footer',{type: "list"}); %> \ No newline at end of file diff --git a/template/footer.ejs b/template/footer.ejs index 8297e0a5f05..35c68d9e9a5 100644 --- a/template/footer.ejs +++ b/template/footer.ejs @@ -1,3 +1,14 @@ + diff --git a/template/hot.ejs b/template/hot.ejs index 26d55cdda3d..bb2f0e68b3d 100644 --- a/template/hot.ejs +++ b/template/hot.ejs @@ -10,4 +10,4 @@ -<%- include('footer'); %> \ No newline at end of file +<%- include('footer',{type: 'list'}); %> \ No newline at end of file diff --git a/template/index.ejs b/template/index.ejs index c5d9efdc101..184166019bb 100644 --- a/template/index.ejs +++ b/template/index.ejs @@ -1,4 +1,4 @@ <%- include('header'); %> <%- include('search',{type: "index"}); %> -<%- include('footer'); %> \ No newline at end of file +<%- include('footer',{type: "index"}); %> \ No newline at end of file diff --git a/template/list.ejs b/template/list.ejs index d1ffa4e4a1f..3b702af5a3d 100644 --- a/template/list.ejs +++ b/template/list.ejs @@ -11,4 +11,4 @@ -<%- include('footer'); %> \ No newline at end of file +<%- include('footer',{type: 'list'}); %> \ No newline at end of file diff --git a/template/search.ejs b/template/search.ejs index e6a2aaf0b2f..db343add9fe 100644 --- a/template/search.ejs +++ b/template/search.ejs @@ -15,8 +15,4 @@ - \ No newline at end of file diff --git a/template/styl/index.styl b/template/styl/index.styl index 6f4b9d8570d..f4a0d2212f7 100644 --- a/template/styl/index.styl +++ b/template/styl/index.styl @@ -175,12 +175,18 @@ a{ } } } - .footer{ - text-align center - padding-top 31px - color #616161 - font-size 14px - font-weight 300 +} + +.footer{ + text-align center + padding-top 31px + color #616161 + font-size 14px + font-weight 300 + border-top: 1px solid #efefef; + padding-bottom: 50px; + &.footer_index { + border-top: 0 } } From bc1731439698746b6518ae195f3f6d3add73919c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Mon, 26 Feb 2018 14:02:00 +0800 Subject: [PATCH 0151/1284] Update tar.md --- command/tar.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/command/tar.md b/command/tar.md index 1bb0d02602f..8d5696e262a 100644 --- a/command/tar.md +++ b/command/tar.md @@ -77,6 +77,11 @@ tar -tf all.tar # 这条命令是列出all.tar包中所有文件,-t是列出文件的意思 ``` +```bash +tar -cfv archive.tar foo bar # 从文件foo和bar创建archive.tar。 +tar -tvf archive.tar # 详细列出archive.tar中的所有文件。 +tar -xf archive.tar # 从archive.tar提取所有文件。 +``` #### zip格式 From 81b9b362d740b3a095f7d41f25b0e46f6d671787 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Mon, 26 Feb 2018 14:22:34 +0800 Subject: [PATCH 0152/1284] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 46aa74475bd..f0f9d6c227e 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Linux Command 540多个 Linux 命令,内容包含 Linux 命令手册、详解、学习,值得收藏的 Linux 命令速查手册。请原谅我写了个爬虫,爬了他们家的数据 [linuxde.net](http://man.linuxde.net) ,同时进行了编辑,增加了一些数据。对他们的辛勤劳动表示敬意,个人希望能本地离线搜索,不喜欢广告,希望得到干净漂亮的预览界面,业余和工作时间需要使用大量的命令,所以干了一件看似比较愚蠢的事情,在回头有空的时候估计能做一个App?,或者是命令行帮助工具?但目前还没有计划... -[Github Web版](https://jaywcjlove.github.io/linux-command/) | [开源中国Web版](http://jslite.oschina.io/linux-command) | [其它Web版](http://linux-command.composer-proxy.org/) | [Alfred 版本下载](https://github.com/jaywcjlove/linux-command/releases) | [Android版本实现](https://github.com/Ernest-su/LinuxCmd.git) | [Mac/Win/Linux](https://github.com/haloislet/linux-command) | [Chrome插件](https://github.com/jaywcjlove/oscnews) +[Github Web版](https://jaywcjlove.github.io/linux-command/) | [开源中国Web版](http://jaywcjlove.gitee.io/linux-command/) | [其它Web版](http://linux-command.composer-proxy.org/) | [Alfred 版本下载](https://github.com/jaywcjlove/linux-command/releases) | [Android版本实现](https://github.com/Ernest-su/LinuxCmd.git) | [Mac/Win/Linux](https://github.com/haloislet/linux-command) | [Chrome插件](https://github.com/jaywcjlove/oscnews) Chrome 插件,可在[源码仓库](https://github.com/jaywcjlove/oscnews)预览效果,[Github下载 oscnews.crx 文件](https://github.com/jaywcjlove/oscnews/releases) 或者[开源中国下载 oscnews.crx 文件](https://gitee.com/jaywcjlove/oscnews/releases) 也可通过 Chrome Web Store 下载: From 432c945b21f2e0879bee7e1e800efe0880c8a896 Mon Sep 17 00:00:00 2001 From: Huck Huang Date: Tue, 6 Mar 2018 22:16:40 +0800 Subject: [PATCH 0153/1284] Fix typo --- command/dd.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/command/dd.md b/command/dd.md index a69143bd9c7..5e32ce83161 100644 --- a/command/dd.md +++ b/command/dd.md @@ -18,7 +18,7 @@ dd(选项) ### 选项 ``` -bs=<字节数>:将ibs(输入)与欧巴桑(输出)设成指定的字节数; +bs=<字节数>:将ibs(输入)与obs(输出)设成指定的字节数; cbs=<字节数>:转换时,每次只转换指定的字节数; conv=<关键字>:指定文件转换的方式; count=<区块数>:仅读取指定的区块数; From ce377b3fa44a17b7605d485d82723edb5a056a24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Wed, 7 Mar 2018 02:20:48 +0800 Subject: [PATCH 0154/1284] Create setsid.md #37 --- command/setsid.md | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 command/setsid.md diff --git a/command/setsid.md b/command/setsid.md new file mode 100644 index 00000000000..20e0ecacee9 --- /dev/null +++ b/command/setsid.md @@ -0,0 +1,37 @@ +setsid +=== + +在新的会话中运行程序。 + +## 补充说明 + +**setsid命令** 子进程从父进程继承了:SessionID、进程组ID和打开的终端。子进程如果要脱离这些,代码中可通过调用setsid来实现。,而命令行或脚本中可以通过使用命令setsid来运行程序实现。setsid帮助一个进程脱离从父进程继承而来的已打开的终端、隶属进程组和隶属的会话。 + +### 语法 + +``` +setsid[options] [arguments ...] +``` + +### 选项 + +``` +-c, --ctty 将控制终端设置为当前控制终端 +-f, --fork 总是 fork +-w, --wait 等待程序退出,并使用相同的返回 +``` + + +### 实例 + +可见 setsid 的使用也是非常方便的,也只需在要处理的命令前加上 setsid 即可 + +``` +[root@root ~]# setsid ping www.ibm.com +[root@root ~]# ps -ef |grep www.ibm.com +root 31094 1 0 07:28 ? 00:00:00 ping www.ibm.com +root 31102 29217 0 07:29 pts/4 00:00:00 grep www.ibm.com +[root@root ~]# +``` + + From 583de5cc510b580297eeebe14cde5c3c32d43e3c Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Fri, 9 Mar 2018 09:19:54 +0800 Subject: [PATCH 0155/1284] Add assets folder. --- README.md | 22 +++++++++++------- Linux.gif => assets/Linux.gif | Bin alfred.png => assets/alfred.png | Bin .../chrome-extensions.gif | Bin qr.png => assets/qr.png | Bin dist/data.json | 2 +- 6 files changed, 15 insertions(+), 9 deletions(-) rename Linux.gif => assets/Linux.gif (100%) rename alfred.png => assets/alfred.png (100%) rename chrome-extensions.gif => assets/chrome-extensions.gif (100%) rename qr.png => assets/qr.png (100%) diff --git a/README.md b/README.md index f0f9d6c227e..344c8b5e6e6 100644 --- a/README.md +++ b/README.md @@ -14,23 +14,29 @@ Linux Command [Github Web版](https://jaywcjlove.github.io/linux-command/) | [开源中国Web版](http://jaywcjlove.gitee.io/linux-command/) | [其它Web版](http://linux-command.composer-proxy.org/) | [Alfred 版本下载](https://github.com/jaywcjlove/linux-command/releases) | [Android版本实现](https://github.com/Ernest-su/LinuxCmd.git) | [Mac/Win/Linux](https://github.com/haloislet/linux-command) | [Chrome插件](https://github.com/jaywcjlove/oscnews) -Chrome 插件,可在[源码仓库](https://github.com/jaywcjlove/oscnews)预览效果,[Github下载 oscnews.crx 文件](https://github.com/jaywcjlove/oscnews/releases) 或者[开源中国下载 oscnews.crx 文件](https://gitee.com/jaywcjlove/oscnews/releases) 也可通过 Chrome Web Store 下载: +#### Chrome 插件 + +可在[源码仓库](https://github.com/jaywcjlove/oscnews)预览效果,[Github下载 oscnews.crx 文件](https://github.com/jaywcjlove/oscnews/releases) 或者[开源中国下载 oscnews.crx 文件](https://gitee.com/jaywcjlove/oscnews/releases) 也可通过 Chrome Web Store 下载: [![Chrome Web Store 下载](http://jaywcjlove.github.io/sb/download/chrome-web-store.svg)](https://chrome.google.com/webstore/detail/oscnews/iheapfheanfjcemgneblljhaebonakbg) -[![Chrome Web Store 下载](./chrome-extensions.gif)](https://github.com/jaywcjlove/oscnews) +[![Chrome Web Store 下载](./assets/chrome-extensions.gif)](https://github.com/jaywcjlove/oscnews) + +#### 官方 Web 版本 -扫描二维码移动端预览搜索 +扫描二维码移动端预览搜索,也可通过二维码下面链接地址打开使用。 -[![Linux 命令大全](./qr.png)](https://jaywcjlove.github.io/linux-command/) +[![Linux 命令大全](./assets/qr.png)](https://jaywcjlove.github.io/linux-command/) 预览搜索:**https://git.io/linux** -[![Linux 命令大全](./Linux.gif)](https://jaywcjlove.github.io/linux-command/) +[![Linux 命令大全](./assets/Linux.gif)](https://jaywcjlove.github.io/linux-command/) + +#### Alfred 版本 -[Alfred 版本下载](https://github.com/jaywcjlove/linux-command/releases) +[Alfred 版本下载](https://github.com/jaywcjlove/linux-command/releases), 下图是界面效果。 -[![Linux 命令大全](./alfred.png)](https://github.com/jaywcjlove/linux-command/releases) +[![Linux 命令大全](./assets/alfred.png)](https://github.com/jaywcjlove/linux-command/releases) ## 目录 @@ -58,7 +64,7 @@ Chrome 插件,可在[源码仓库](https://github.com/jaywcjlove/oscnews)预 ## Linux命令分类 -*这里存放Linux 命令大全并不全,你可以通过[linux-command](https://jaywcjlove.github.io/linux-command/)来搜索,它是把 [command](./command) 目录里面搜集的命令,生成了静态HTML并提供预览以及索引搜索。* +*这里存放Linux 命令大全并不全,你可以通过[linux-command](https://jaywcjlove.github.io/linux-command/)来搜索,它是把 [command](./assets/command) 目录里面搜集的命令,生成了静态HTML并提供预览以及索引搜索。* ### 文件传输 diff --git a/Linux.gif b/assets/Linux.gif similarity index 100% rename from Linux.gif rename to assets/Linux.gif diff --git a/alfred.png b/assets/alfred.png similarity index 100% rename from alfred.png rename to assets/alfred.png diff --git a/chrome-extensions.gif b/assets/chrome-extensions.gif similarity index 100% rename from chrome-extensions.gif rename to assets/chrome-extensions.gif diff --git a/qr.png b/assets/qr.png similarity index 100% rename from qr.png rename to assets/qr.png diff --git a/dist/data.json b/dist/data.json index a093a0e24a9..49ee7c0ac38 100644 --- a/dist/data.json +++ b/dist/data.json @@ -1 +1 @@ -{"w":{"n":"w","p":"/w","d":"显示目前登入系统的用户信息"},"ab":{"n":"ab","p":"/ab","d":"Apache服务器的性能测试工具"},"ip":{"n":"ip","p":"/ip","d":"网络配置工具"},"ld":{"n":"ld","p":"/ld","d":"将目标文件连接为可执行程序"},"xz":{"n":"xz","p":"/xz","d":"POSIX 平台开发具有高压缩率的工具。"},"ln":{"n":"ln","p":"/ln","d":"用来为文件创件连接"},"ar":{"n":"ar","p":"/ar","d":"建立或修改备存文件,或是从备存文件中抽取文件"},"lp":{"n":"lp","p":"/lp","d":"打印文件或修改排队的打印任务"},"fg":{"n":"fg","p":"/fg","d":"将后台作业放到前台终端运行"},"wc":{"n":"wc","p":"/wc","d":"统计文件的字节数、字数、行数"},"as":{"n":"as","p":"/as","d":"汇编语言编译器"},"at":{"n":"at","p":"/at","d":"在指定时间执行一个任务"},"fc":{"n":"fc","p":"/fc","d":"修改历史命令并执行"},"ls":{"n":"ls","p":"/ls","d":"显示目录内容列表"},"id":{"n":"id","p":"/id","d":"显示用户的ID以及所属群组的ID"},"vi":{"n":"vi","p":"/vi","d":"功能强大的纯文本编辑器"},"bc":{"n":"bc","p":"/bc","d":"算术操作精密运算工具"},"bg":{"n":"bg","p":"/bg","d":"用于将作业放到后台运行"},"ex":{"n":"ex","p":"/ex","d":"启动vim编辑器的ex编辑模式"},"ed":{"n":"ed","p":"/ed","d":"单行纯文本编辑器"},"tr":{"n":"tr","p":"/tr","d":"将字符进行替换压缩和删除"},"mv":{"n":"mv","p":"/mv","d":"用来对文件或目录重新命名"},"du":{"n":"du","p":"/du","d":"显示每个文件和目录的磁盘使用空间"},"nc":{"n":"nc","p":"/nc","d":"命令用于设置路由器。"},"nl":{"n":"nl","p":"/nl","d":"在Linux系统中计算文件内容行号"},"nm":{"n":"nm","p":"/nm","d":"显示二进制目标文件的符号表"},"cd":{"n":"cd","p":"/cd","d":"切换用户当前工作目录"},"od":{"n":"od","p":"/od","d":"输出文件的八进制、十六进制等格式编码的字节"},"pr":{"n":"pr","p":"/pr","d":"将文本文件转换成适合打印的格式"},"su":{"n":"su","p":"/su","d":"用于切换当前用户身份到其他用户身份"},"ps":{"n":"ps","p":"/ps","d":"报告当前系统的进程状态"},"ss":{"n":"ss","p":"/ss","d":"获取socket统计信息,iproute2 包附带的另一个工具,允许你查询 socket 的有关统计信息。"},"sh":{"n":"sh","p":"/sh","d":"shell命令解释器"},"pv":{"n":"pv","p":"/pv","d":"显示当前在命令行执行的命令的进度信息,管道查看器。"},"df":{"n":"df","p":"/df","d":"显示磁盘的相关信息"},"dd":{"n":"dd","p":"/dd","d":"复制文件并对原文件的内容进行转换和格式化处理"},"rm":{"n":"rm","p":"/rm","d":"用于删除给定的文件和目录"},"cu":{"n":"cu","p":"/cu","d":"用于连接另一个系统主机。"},"cp":{"n":"cp","p":"/cp","d":"将源文件或目录复制到目标文件或目录中"},"man":{"n":"man","p":"/man","d":"查看Linux中的指令帮助"},"sar":{"n":"sar","p":"/sar","d":"系统运行状态统计工具"},"rsh":{"n":"rsh","p":"/rsh","d":"连接远程主机并执行命令"},"rpm":{"n":"rpm","p":"/rpm","d":"RPM软件包的管理工具"},"sed":{"n":"sed","p":"/sed","d":"功能强大的流式文本编辑器"},"seq":{"n":"seq","p":"/seq","d":"以指定增量从首数开始打印数字到尾数"},"zip":{"n":"zip","p":"/zip","d":"可以用来解压缩文件"},"cut":{"n":"cut","p":"/cut","d":"连接文件并打印到标准输出设备上"},"set":{"n":"set","p":"/set","d":"显示或设置shell特性及shell变量"},"rcp":{"n":"rcp","p":"/rcp","d":"使在两台Linux主机之间的文件复制操作更简单"},"col":{"n":"col","p":"/col","d":"过滤控制字符"},"pwd":{"n":"pwd","p":"/pwd","d":"绝对路径方式显示用户当前工作目录"},"pvs":{"n":"pvs","p":"/pvs","d":"输出物理卷信息报表"},"cmp":{"n":"cmp","p":"/cmp","d":"比较两个文件是否有差异"},"dig":{"n":"dig","p":"/dig","d":"域名查询工具"},"ssh":{"n":"ssh","p":"/ssh","d":"openssh套件中的客户端连接工具"},"sum":{"n":"sum","p":"/sum","d":"计算文件的校验码和显示块数"},"dnf":{"n":"dnf","p":"/dnf","d":"新一代的RPM软件包管理器"},"php":{"n":"php","p":"/php","d":"PHP语言的命令行接口"},"tac":{"n":"tac","p":"/tac","d":"将文件已行为单位的反序输出"},"cat":{"n":"cat","p":"/cat","d":"连接文件并打印到标准输出设备上"},"cal":{"n":"cal","p":"/cal","d":"显示当前日历或指定日期的日历"},"tar":{"n":"tar","p":"/tar","d":"Linux下的归档使用工具,用来打包和备份。"},"tee":{"n":"tee","p":"/tee","d":"把数据重定向到给定文件和屏幕上"},"top":{"n":"top","p":"/top","d":"显示或管理执行中的程序"},"bye":{"n":"bye","p":"/bye","d":"命令用于中断FTP连线并结束程序。。"},"scp":{"n":"scp","p":"/scp","d":"加密的方式在本地主机和远程主机之间复制文件"},"elm":{"n":"elm","p":"/elm","d":"纯文本邮件客户端程序"},"env":{"n":"env","p":"/env","d":"显示系统中已存在的环境变量"},"tty":{"n":"tty","p":"/tty","d":"显示连接到当前标准输入的终端设备文件名。"},"awk":{"n":"awk","p":"/awk","d":"文本和数据进行处理的编程语言"},"lpr":{"n":"lpr","p":"/lpr","d":"将文件发送给指定打印机进行打印"},"atq":{"n":"atq","p":"/atq","d":"列出当前用户的at任务列表"},"lpq":{"n":"lpq","p":"/lpq","d":"显示打印队列中的打印任务的状态信息"},"arp":{"n":"arp","p":"/arp","d":"显示和修改IP到MAC转换表"},"lpc":{"n":"lpc","p":"/lpc","d":"命令行方式打印机控制程序"},"arj":{"n":"arj","p":"/arj","d":"用于创建和管理.arj压缩包"},"who":{"n":"who","p":"/who","d":"显示目前登录系统的用户信息"},"fmt":{"n":"fmt","p":"/fmt","d":"读取文件后优化处理并输出"},"ftp":{"n":"ftp","p":"/ftp","d":"用来设置文件系统相关功能"},"lha":{"n":"lha","p":"/lha","d":"压缩或解压缩lzh格式文件"},"let":{"n":"let","p":"/let","d":"简单的计算器"},"gcc":{"n":"gcc","p":"/gcc","d":"基于C/C++的编译器"},"gdb":{"n":"gdb","p":"/gdb","d":"功能强大的程序调试器"},"ldd":{"n":"ldd","p":"/ldd","d":"打印程序或者库文件所依赖的共享库列表"},"yes":{"n":"yes","p":"/yes","d":"重复打印指定字符串"},"git":{"n":"git","p":"/git","d":"是目前世界上最先进的分布式版本控制系统"},"gpm":{"n":"gpm","p":"/gpm","d":"提供文字模式下的滑鼠事件处理"},"joe":{"n":"joe","p":"/joe","d":"强大的纯文本编辑器"},"jed":{"n":"jed","p":"/jed","d":"主要用于编辑代码的编辑器"},"yum":{"n":"yum","p":"/yum","d":"基于RPM的软件包管理器"},"rev":{"n":"rev","p":"/rev","d":"将文件内容以字符为单位反序输出"},"chfn":{"n":"chfn","p":"/chfn","d":"用来改变finger命令显示的信息"},"sudo":{"n":"sudo","p":"/sudo","d":"以其他身份来执行命令"},"pssh":{"n":"pssh","p":"/pssh","d":"批量管理执行"},"bind":{"n":"bind","p":"/bind","d":"显示或设置键盘按键与其相关的功能"},"dirs":{"n":"dirs","p":"/dirs","d":"显示目录记录"},"stty":{"n":"stty","p":"/stty","d":"修改终端命令行的相关设置"},"popd":{"n":"popd","p":"/popd","d":"用于删除目录栈中的记录"},"stat":{"n":"stat","p":"/stat","d":"用于显示文件的状态信息"},"pmap":{"n":"pmap","p":"/pmap","d":"报告进程的内存映射关系"},"ping":{"n":"ping","p":"/ping","d":"测试主机之间网络的连通性"},"pico":{"n":"pico","p":"/pico","d":"功能强大全屏幕的文本编辑器"},"sshd":{"n":"sshd","p":"/sshd","d":"openssh软件套件中的服务器守护进程"},"perl":{"n":"perl","p":"/perl","d":"perl语言解释器"},"uniq":{"n":"uniq","p":"/uniq","d":"报告或忽略文件中的重复行"},"nmap":{"n":"nmap","p":"/nmap","d":"网络探测和安全审核"},"chsh":{"n":"chsh","p":"/chsh","d":"用来更换登录系统时使用的shell"},"type":{"n":"type","p":"/type","d":"显示指定命令的类型"},"nice":{"n":"nice","p":"/nice","d":"改变程序执行的优先权等级"},"sort":{"n":"sort","p":"/sort","d":"将文件进行排序并输出"},"dpkg":{"n":"dpkg","p":"/dpkg","d":"Debian Linux系统上安装、创建和管理软件包"},"dris":{"n":"dris","p":"/dris","d":"显示和清空目录堆栈中的内容"},"nano":{"n":"nano","p":"/nano","d":"字符终端文本编辑器"},"xset":{"n":"xset","p":"/xset","d":"设置X-Window系统中的用户爱好的实用工具"},"dump":{"n":"dump","p":"/dump","d":"用于备份ext2或者ext3文件系统"},"sftp":{"n":"sftp","p":"/sftp","d":"交互式的文件传输程序"},"more":{"n":"more","p":"/more","d":"显示文件内容,每次显示一屏"},"echo":{"n":"echo","p":"/echo","d":"输出指定的字符串或者变量"},"tree":{"n":"tree","p":"/tree","d":"树状图列出目录的内容"},"mkfs":{"n":"mkfs","p":"/mkfs","d":"用于在设备上创建Linux文件系统"},"mesg":{"n":"mesg","p":"/mesg","d":"设置当前终端的写权限"},"trap":{"n":"trap","p":"/trap","d":"指定在接收到信号后将要采取的动作"},"make":{"n":"make","p":"/make","d":"GNU的工程化编译工具"},"atop":{"n":"atop","p":"/atop","d":"监控Linux系统资源与进程的工具"},"mail":{"n":"mail","p":"/mail","d":"命令行下发送和接收电子邮件"},"lynx":{"n":"lynx","p":"/lynx","d":"纯文本模式的网页浏览器"},"comm":{"n":"comm","p":"/comm","d":"两个文件之间的比较"},"lsof":{"n":"lsof","p":"/lsof","d":"显示Linux系统当前已打开的所有文件列表"},"zcat":{"n":"zcat","p":"/zcat","d":"显示压缩包中文件的内容"},"exec":{"n":"exec","p":"/exec","d":"调用并执行指定的命令"},"exit":{"n":"exit","p":"/exit","d":"退出当前的shell"},"tput":{"n":"tput","p":"/tput","d":"通过terminfo数据库对终端会话进行初始化和操作"},"lprm":{"n":"lprm","p":"/lprm","d":"删除打印队列中的打印任务"},"atrm":{"n":"atrm","p":"/atrm","d":"删除待执行任务队列中的指定任务"},"expr":{"n":"expr","p":"/expr","d":"一款表达式计算工具"},"time":{"n":"time","p":"/time","d":"统计给定命令所花费的总时间"},"tftp":{"n":"tftp","p":"/tftp","d":"在本机和tftp服务器之间使用TFTP协议传输文件"},"cpio":{"n":"cpio","p":"/cpio","d":"用来建立、还原备份档的工具程序"},"test":{"n":"test","p":"/test","d":"shell环境中测试条件表达式工具"},"file":{"n":"file","p":"/file","d":"用来探测给定文件的类型。"},"find":{"n":"find","p":"/find","d":"在指定目录下查找文件"},"arpd":{"n":"arpd","p":"/arpd","d":"收集免费ARP信息"},"look":{"n":"look","p":"/look","d":"显示文件中以指定字符串开头的任意行"},"axel":{"n":"axel","p":"/axel","d":"多线程下载工具"},"wait":{"n":"wait","p":"/wait","d":"等待进程执行完后返回"},"fold":{"n":"fold","p":"/fold","d":"控制文件内容输出时所占用的屏幕宽度"},"free":{"n":"free","p":"/free","d":"显示内存的使用情况"},"fsck":{"n":"fsck","p":"/fsck","d":"检查并且试图修复文件系统中的错误"},"talk":{"n":"talk","p":"/talk","d":"让用户和其他用户聊天"},"lilo":{"n":"lilo","p":"/lilo","d":"安装核心载入开机管理程序"},"curl":{"n":"curl","p":"/curl","d":"利用URL规则在命令行下工作的文件传输工具"},"lftp":{"n":"lftp","p":"/lftp","d":"优秀的文件客户端程序"},"wget":{"n":"wget","p":"/wget","d":"Linux系统下载文件工具"},"less":{"n":"less","p":"/less","d":"分屏上下翻页浏览文件内容"},"date":{"n":"date","p":"/date","d":"显示或设置系统时间与日期"},"gcov":{"n":"gcov","p":"/gcov","d":"测试程序的代码覆盖率的工具"},"znew":{"n":"znew","p":"/znew","d":"将.Z压缩包重新转化为gzip命令压缩的.gz压缩包"},"read":{"n":"read","p":"/read","d":"从键盘读取变量值"},"tail":{"n":"tail","p":"/tail","d":"在屏幕上显示指定文件的末尾若干行"},"last":{"n":"last","p":"/last","d":"列出目前与过去登入系统的用户相关信息"},"wall":{"n":"wall","p":"/wall","d":"向系统当前所有打开的终端上输出信息"},"kill":{"n":"kill","p":"/kill","d":"删除执行中的程序或工作"},"sync":{"n":"sync","p":"/sync","d":"用于强制被改变的内容立刻写入磁盘"},"grep":{"n":"grep","p":"/grep","d":"强大的文本搜索工具"},"join":{"n":"join","p":"/join","d":"两个文件中指定栏位内容相同的行连接起来"},"pwck":{"n":"pwck","p":"/pwck","d":"用来验证系统认证文件内容和格式的完整性"},"jobs":{"n":"jobs","p":"/jobs","d":"显示Linux中的任务列表及任务状态"},"arch":{"n":"arch","p":"/arch","d":"显示当前主机的硬件架构类型"},"ipcs":{"n":"ipcs","p":"/ipcs","d":"分析消息队列共享内存和信号量 "},"diff":{"n":"diff","p":"/diff","d":"比较给定的两个文件的不同"},"init":{"n":"init","p":"/init","d":"init进程是所有Linux进程的父进程"},"grub":{"n":"grub","p":"/grub","d":"多重引导程序grub的命令行shell工具"},"info":{"n":"info","p":"/info","d":"Linux下info格式的帮助指令"},"ifup":{"n":"ifup","p":"/ifup","d":"激活指定的网络接口"},"gzip":{"n":"gzip","p":"/gzip","d":"用来压缩文件"},"halt":{"n":"halt","p":"/halt","d":"关闭正在运行的Linux操作系统"},"pvck":{"n":"pvck","p":"/pvck","d":"检测物理卷的LVM元数据的一致性"},"head":{"n":"head","p":"/head","d":"在屏幕上显示指定文件的开头若干行"},"help":{"n":"help","p":"/help","d":"显示帮助信息"},"htop":{"n":"htop","p":"/htop","d":"[非内部命令]一个互动的进程查看器,可以动态观察系统进程状况。"},"host":{"n":"host","p":"/host","d":"常用的分析域名查询工具"},"bzcat":{"n":"bzcat","p":"/bzcat","d":"解压缩指定的.bz2文件"},"bzcmp":{"n":"bzcmp","p":"/bzcmp","d":"比较两个压缩包中的文件"},"touch":{"n":"touch","p":"/touch","d":"创建新的空文件"},"ifcfg":{"n":"ifcfg","p":"/ifcfg","d":"置Linux中的网络接口参数"},"tload":{"n":"tload","p":"/tload","d":"显示系统负载状况"},"bzip2":{"n":"bzip2","p":"/bzip2","d":"将文件压缩成bz2格式"},"iftop":{"n":"iftop","p":"/iftop","d":"一款实时流量监控工具"},"gzexe":{"n":"gzexe","p":"/gzexe","d":"用来压缩可执行文件"},"tailf":{"n":"tailf","p":"/tailf","d":"在屏幕上显示指定文件的末尾若干行内容,通常用于日志文件的跟踪输出。"},"chage":{"n":"chage","p":"/chage","d":"修改帐号和密码的有效期限"},"chcon":{"n":"chcon","p":"/chcon","d":"修改对象(文件)的安全上下文"},"chgrp":{"n":"chgrp","p":"/chgrp","d":"用来变更文件或目录的所属群组"},"iotop":{"n":"iotop","p":"/iotop","d":"用来监视磁盘I/O使用状况的工具"},"alias":{"n":"alias","p":"/alias","d":"用来设置指令的别名"},"zfore":{"n":"zfore","p":"/zfore","d":"强制为gzip格式的压缩文件添加.gz后缀"},"chmod":{"n":"chmod","p":"/chmod","d":"用来变更文件或目录的权限"},"ipcrm":{"n":"ipcrm","p":"/ipcrm","d":"删除消息队列、信号集、或者共享内存标识"},"grpck":{"n":"grpck","p":"/grpck","d":"用于验证组文件的完整性"},"iperf":{"n":"iperf","p":"/iperf","d":"网络性能测试工具"},"chown":{"n":"chown","p":"/chown","d":"用来变更文件或目录的拥有者或所属群组"},"umask":{"n":"umask","p":"/umask","d":"用来设置限制新建文件权限的掩码"},"cksum":{"n":"cksum","p":"/cksum","d":"检查文件的CRC是否正确"},"uname":{"n":"uname","p":"/uname","d":"显示Linux系统信息"},"kexec":{"n":"kexec","p":"/kexec","d":"从当前正在运行的内核引导到一个新内核"},"lastb":{"n":"lastb","p":"/lastb","d":"列出登入系统失败的用户相关信息"},"xinit":{"n":"xinit","p":"/xinit","d":"是Linux下X-Window系统的初始化程序"},"xhost":{"n":"xhost","p":"/xhost","d":"制哪些X客户端能够在X服务器上显示"},"fuser":{"n":"fuser","p":"/fuser","d":"使用文件或文件结构识别进程"},"squid":{"n":"squid","p":"/squid","d":"squid服务器守护进程"},"split":{"n":"split","p":"/split","d":"分割任意大小的文件"},"xclip":{"n":"xclip","p":"/xclip","d":"管理 X 粘贴板"},"spell":{"n":"spell","p":"/spell","d":"对文件进行拼写检查"},"unarj":{"n":"unarj","p":"/unarj","d":"解压缩由arj命令创建的压缩包"},"clear":{"n":"clear","p":"/clear","d":"清除当前屏幕终端上的任何信息"},"login":{"n":"login","p":"/login","d":"登录系统或切换用户身份"},"blkid":{"n":"blkid","p":"/blkid","d":"查看块设备的文件系统类型、LABEL、UUID等信息"},"xauth":{"n":"xauth","p":"/xauth","d":"显示和编辑被用于连接X服务器的认证信息"},"sleep":{"n":"sleep","p":"/sleep","d":"将目前动作延迟一段时间"},"skill":{"n":"skill","p":"/skill","d":"向选定的进程发送信号冻结进程"},"fgrep":{"n":"fgrep","p":"/fgrep","d":"为文件搜索文字字符串"},"fdisk":{"n":"fdisk","p":"/fdisk","d":"查看磁盘使用情况和磁盘分区"},"shopt":{"n":"shopt","p":"/shopt","d":"显示和设置shell操作选项"},"clock":{"n":"clock","p":"/clock","d":"用于调整 RTC 时间。"},"unset":{"n":"unset","p":"/unset","d":"删除指定的shell变量或函数"},"unzip":{"n":"unzip","p":"/unzip","d":"用于解压缩由zip命令压缩的压缩包"},"xargs":{"n":"xargs","p":"/xargs","d":"给其他命令传递参数的一个过滤器"},"lsblk":{"n":"lsblk","p":"/lsblk","d":"列出块设备信息"},"lscpu":{"n":"lscpu","p":"/lscpu","d":"显示有关CPU架构的信息"},"lsmod":{"n":"lsmod","p":"/lsmod","d":"显示已载入系统的模块"},"lspci":{"n":"lspci","p":"/lspci","d":"显示当前主机的所有PCI总线信息"},"lsusb":{"n":"lsusb","p":"/lsusb","d":"显示本机的USB设备列表信息"},"colrm":{"n":"colrm","p":"/colrm","d":"删除文件中的指定列"},"write":{"n":"write","p":"/write","d":"向指定登录用户终端上发送信息"},"rsync":{"n":"rsync","p":"/rsync","d":"远程数据同步工具"},"rpmdb":{"n":"rpmdb","p":"/rpmdb","d":"初始化和重建RPM数据库"},"route":{"n":"route","p":"/route","d":"显示并设置Linux中静态路由表"},"emacs":{"n":"emacs","p":"/emacs","d":"功能强大的全屏文本编辑器"},"mailq":{"n":"mailq","p":"/mailq","d":"显示待发送的邮件队列"},"rmmod":{"n":"rmmod","p":"/rmmod","d":"从运行的内核中移除指定的内核模块"},"eject":{"n":"eject","p":"/eject","d":"用来退出抽取式设备"},"rmdir":{"n":"rmdir","p":"/rmdir","d":"用来删除空目录"},"egrep":{"n":"egrep","p":"/egrep","d":"在文件内查找指定的字符串"},"rexec":{"n":"rexec","p":"/rexec","d":"运程执行Linux系统下命令 "},"mkdir":{"n":"mkdir","p":"/mkdir","d":"用来创建目录"},"users":{"n":"users","p":"/users","d":"显示当前登录系统的所有用户"},"mknod":{"n":"mknod","p":"/mknod","d":"创建字符设备文件和块设备文件"},"quota":{"n":"quota","p":"/quota","d":"显示磁盘已使用的空间与限制"},"dhcpd":{"n":"dhcpd","p":"/dhcpd","d":"运行DHCP服务器。"},"mount":{"n":"mount","p":"/mount","d":"用于挂载Linux系统外的文件。"},"diff3":{"n":"diff3","p":"/diff3","d":"比较3个文件不同的地方"},"pushd":{"n":"pushd","p":"/pushd","d":"将目录加入命令堆叠中"},"dmesg":{"n":"dmesg","p":"/dmesg","d":"显示Linux系统启动信息"},"mysql":{"n":"mysql","p":"/mysql","d":"MySQL服务器客户端工具"},"which":{"n":"which","p":"/which","d":"查找并显示给定命令的绝对路径"},"pkill":{"n":"pkill","p":"/pkill","d":"可以按照进程名杀死进程"},"pidof":{"n":"pidof","p":"/pidof","d":"查找指定名称的进程的进程号ID号"},"dstat":{"n":"dstat","p":"/dstat","d":"通用的系统资源统计工具"},"watch":{"n":"watch","p":"/watch","d":"可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令"},"ncftp":{"n":"ncftp","p":"/ncftp","d":"是增强的的FTP工具"},"ngrep":{"n":"ngrep","p":"/ngrep","d":"方便的数据包匹配和显示工具"},"pgrep":{"n":"pgrep","p":"/pgrep","d":"设置用户的认证信息,包括用户密码、密码过期时间等"},"batch":{"n":"batch","p":"/batch","d":"在系统不繁忙的时候执行定时任务"},"nmcli":{"n":"nmcli","p":"/nmcli","d":"地址配置工具"},"nohup":{"n":"nohup","p":"/nohup","d":"将程序以忽略挂起信号的方式运行起来"},"pfctl":{"n":"pfctl","p":"/pfctl","d":"PF防火墙的配置命令"},"patch":{"n":"patch","p":"/patch","d":"为开放源代码软件安装补丁程序"},"iconv":{"n":"iconv","p":"/iconv","d":"转换文件的编码方式"},"paste":{"n":"paste","p":"/paste","d":"将多个文件按列队列合并"},"lsattr":{"n":"lsattr","p":"/lsattr","d":"查看文件的第二扩展文件系统属性"},"passwd":{"n":"passwd","p":"/passwd","d":"用于让用户可以更改自己的密码"},"hping3":{"n":"hping3","p":"/hping3","d":"测试网络及主机的安全"},"ntsysv":{"n":"ntsysv","p":"/ntsysv","d":"集中管理系统的各种服务"},"vmstat":{"n":"vmstat","p":"/vmstat","d":"显示虚拟内存状态"},"arping":{"n":"arping","p":"/arping","d":"通过发送ARP协议报文测试网络"},"whatis":{"n":"whatis","p":"/whatis","d":"查询一个命令执行什么功能"},"e2fsck":{"n":"e2fsck","p":"/e2fsck","d":"用于检查第二扩展文件系统的完整性"},"printf":{"n":"printf","p":"/printf","d":"格式化并输出结果"},"pstack":{"n":"pstack","p":"/pstack","d":"显示每个进程的栈跟踪"},"pstree":{"n":"pstree","p":"/pstree","d":"以树状图的方式展现进程之间的派生关系"},"mtools":{"n":"mtools","p":"/mtools","d":"显示mtools支持的指令"},"mpstat":{"n":"mpstat","p":"/mpstat","d":"显示各个可用CPU的状态"},"vdfuse":{"n":"vdfuse","p":"/vdfuse","d":"VirtualBox软件挂载VDI分区文件工具"},"pvscan":{"n":"pvscan","p":"/pvscan","d":"扫描系统中所有硬盘的物理卷列表"},"mktemp":{"n":"mktemp","p":"/mktemp","d":"创建临时文件供shell脚本使用"},"pwconv":{"n":"pwconv","p":"/pwconv","d":"用来开启用户的投影密码"},"hostid":{"n":"hostid","p":"/hostid","d":"用来打印当前主机的数字化标识"},"mkswap":{"n":"mkswap","p":"/mkswap","d":"建立和设置SWAP交换分区"},"uupick":{"n":"uupick","p":"/uupick","d":"命令处理传送进来的文件。"},"rcconf":{"n":"rcconf","p":"/rcconf","d":"Debian Linux下的运行等级服务配置工具"},"depmod":{"n":"depmod","p":"/depmod","d":"分析可载入模块的相依性"},"reboot":{"n":"reboot","p":"/reboot","d":"重新启动正在运行的Linux操作系统"},"reject":{"n":"reject","p":"/reject","d":"指示打印系统拒绝发往指定目标打印机的打印任务"},"rename":{"n":"rename","p":"/rename","d":"用字符串替换的方式批量改变文件名"},"renice":{"n":"renice","p":"/renice","d":"修改正在运行的进程的调度优先级"},"resize":{"n":"resize","p":"/resize","d":"命令设置终端机视窗的大小。"},"uucico":{"n":"uucico","p":"/uucico","d":"UUCP文件传输服务程序。"},"mke2fs":{"n":"mke2fs","p":"/mke2fs","d":"创建磁盘分区上的“etc2/etc3”文件系统"},"whoami":{"n":"whoami","p":"/whoami","d":"打印当前有效的用户名称"},"rlogin":{"n":"rlogin","p":"/rlogin","d":"从当前终端登录到远程Linux主机"},"md5sum":{"n":"md5sum","p":"/md5sum","d":"计算和校验文件报文摘要的工具程序"},"elinks":{"n":"elinks","p":"/elinks","d":"纯文本界面的WWW浏览器"},"enable":{"n":"enable","p":"/enable","d":"启动或关闭shell内建命令"},"csplit":{"n":"csplit","p":"/csplit","d":"将一个大文件分割成小的碎片文件"},"lvscan":{"n":"lvscan","p":"/lvscan","d":"扫描逻辑卷"},"accept":{"n":"accept","p":"/accept","d":"指示打印系统接受发往指定目标打印机的打印任务"},"uptime":{"n":"uptime","p":"/uptime","d":"查看Linux系统负载信息"},"screen":{"n":"screen","p":"/screen","d":"用于命令行终端切换"},"seinfo":{"n":"seinfo","p":"/seinfo","d":"查询SELinux的策略提供多少相关规则"},"ltrace":{"n":"ltrace","p":"/ltrace","d":"用来跟踪进程调用库函数的情况"},"setpci":{"n":"setpci","p":"/setpci","d":"查询和配置PCI设备的使用工具"},"parted":{"n":"parted","p":"/parted","d":"磁盘分区和分区大小调整工具"},"expand":{"n":"expand","p":"/expand","d":"将文件的制表符转换为空白字符"},"lpstat":{"n":"lpstat","p":"/lpstat","d":"显示CUPS中打印机的状态信息"},"export":{"n":"export","p":"/export","d":"设置或显示系统环境变量"},"unlink":{"n":"unlink","p":"/unlink","d":"系统调用函数unlink去删除指定的文件"},"findfs":{"n":"findfs","p":"/findfs","d":"标签或UUID查找文件系统"},"finger":{"n":"finger","p":"/finger","d":"用于查找并显示用户信息"},"logout":{"n":"logout","p":"/logout","d":"退出当前登录的Shell"},"logger":{"n":"logger","p":"/logger","d":"在系统日志中记录相应条目"},"source":{"n":"source","p":"/source","d":"在当前Shell环境中从指定文件读取和执行命令,命令返回退出状态。"},"locate":{"n":"locate","p":"/locate","d":"Apache服务器的性能测试工具"},"lnstat":{"n":"lnstat","p":"/lnstat","d":"显示Linux系统的网路状态"},"ftptop":{"n":"ftptop","p":"/ftptop","d":"proftpd服务器的连接状态"},"ftpwho":{"n":"ftpwho","p":"/ftpwho","d":"显示当前每个ftp会话信息"},"jwhois":{"n":"jwhois","p":"/jwhois","d":"whois 客户端服务"},"groups":{"n":"groups","p":"/groups","d":"用来打印指定用户所属的工作组"},"umount":{"n":"umount","p":"/umount","d":"用于卸载已经加载的文件系统"},"ispell":{"n":"ispell","p":"/ispell","d":"检查文件中出现的拼写错误"},"ulimit":{"n":"ulimit","p":"/ulimit","d":"控制shell程序的资源"},"chroot":{"n":"chroot","p":"/chroot","d":"把根目录换成指定的目的目录"},"startx":{"n":"startx","p":"/startx","d":"用来启动X Window"},"iptraf":{"n":"iptraf","p":"/iptraf","d":"实时地监视网卡流量"},"strace":{"n":"strace","p":"/strace","d":"跟踪系统调用和信号"},"ipcalc":{"n":"ipcalc","p":"/ipcalc","d":"简单的IP地址计算器"},"iostat":{"n":"iostat","p":"/iostat","d":"监视系统输入输出设备和CPU的使用情况"},"insmod":{"n":"insmod","p":"/insmod","d":"将给定的模块加载到内核中"},"swapon":{"n":"swapon","p":"/swapon","d":"激活Linux系统中交换空间"},"chattr":{"n":"chattr","p":"/chattr","d":"用来改变文件属性"},"sysctl":{"n":"sysctl","p":"/sysctl","d":"时动态地修改内核的运行参数"},"syslog":{"n":"syslog","p":"/syslog","d":"系统默认的日志守护进程"},"gunzip":{"n":"gunzip","p":"/gunzip","d":"用来解压缩文件"},"indent":{"n":"indent","p":"/indent","d":"格式化C语言的源文件"},"cancel":{"n":"cancel","p":"/cancel","d":"取消已存在的打印任务"},"bzmore":{"n":"bzmore","p":"/bzmore","d":"查看bzip2压缩过的文本文件的内容"},"bzless":{"n":"bzless","p":"/bzless","d":"增强.bz2压缩包查看器"},"telint":{"n":"telint","p":"/telint","d":"切换当前正在运行系统的运行等级"},"telnet":{"n":"telnet","p":"/telnet","d":"登录远程主机和管理"},"ifstat":{"n":"ifstat","p":"/ifstat","d":"统计网络接口流量状态"},"bzgrep":{"n":"bzgrep","p":"/bzgrep","d":"使用正则表达式搜索.bz2压缩包中文件"},"ifdown":{"n":"ifdown","p":"/ifdown","d":"禁用指定的网络接口"},"bzdiff":{"n":"bzdiff","p":"/bzdiff","d":"直接比较两个.bz2压缩包中文件的不同"},"hdparm":{"n":"hdparm","p":"/hdparm","d":"显示与设定硬盘的参数"},"vgscan":{"n":"vgscan","p":"/vgscan","d":"扫描并显示系统中的卷组"},"setfacl":{"n":"setfacl","p":"/setfacl","d":"设置文件访问控制列表"},"dirname":{"n":"dirname","p":"/dirname","d":"去除文件名中的非目录部分"},"apt-get":{"n":"apt-get","p":"/apt-get","d":"Debian Linux发行版中的APT软件包管理工具"},"lpadmin":{"n":"lpadmin","p":"/lpadmin","d":"配置CUPS套件中的打印机和类"},"apt-key":{"n":"apt-key","p":"/apt-key","d":"管理Debian Linux系统中的软件包密钥"},"zipinfo":{"n":"zipinfo","p":"/zipinfo","d":"用来列出压缩文件信息"},"history":{"n":"history","p":"/history","d":"用于显示历史命令"},"nethogs":{"n":"nethogs","p":"/nethogs","d":"终端下的网络流量监控工具"},"slabtop":{"n":"slabtop","p":"/slabtop","d":"实时显示内核slab内存缓存信息"},"netstat":{"n":"netstat","p":"/netstat","d":"查看Linux中网络系统状态信息"},"slocate":{"n":"slocate","p":"/slocate","d":"命令查找文件或目录"},"nfsstat":{"n":"nfsstat","p":"/nfsstat","d":"列出NFS客户端和服务器的工作状态"},"lftpget":{"n":"lftpget","p":"/lftpget","d":"调用lftp指令下载指定的文件"},"volname":{"n":"volname","p":"/volname","d":"显示指定的ISO-9660格式的设备的卷名称"},"ftpshut":{"n":"ftpshut","p":"/ftpshut","d":"在指定的时间关闭FTP服务器"},"quotaon":{"n":"quotaon","p":"/quotaon","d":"激活Linux内核中指定文件系统的磁盘配额功能"},"apropos":{"n":"apropos","p":"/apropos","d":"在 whatis 数据库中查找字符串"},"install":{"n":"install","p":"/install","d":"安装或升级软件或备份数据"},"declare":{"n":"declare","p":"/declare","d":"声明或显示shell变量"},"readelf":{"n":"readelf","p":"/readelf","d":"用于显示elf格式文件的信息"},"ssh-add":{"n":"ssh-add","p":"/ssh-add","d":"把专用密钥添加到ssh-agent的高速缓存中"},"unalias":{"n":"unalias","p":"/unalias","d":"删除由alias设置的别名"},"hexdump":{"n":"hexdump","p":"/hexdump","d":"显示文件十六进制格式"},"nologin":{"n":"nologin","p":"/nologin","d":"拒绝用户登录系统"},"ntpdate":{"n":"ntpdate","p":"/ntpdate","d":"使用网络计时协议(NTP)设置日期和时间"},"edquota":{"n":"edquota","p":"/edquota","d":"用于编辑指定用户或工作组磁盘配额"},"mkisofs":{"n":"mkisofs","p":"/mkisofs","d":"建立ISO 9660映像文件"},"restore":{"n":"restore","p":"/restore","d":"所进行的操作和dump指令相反"},"gpasswd":{"n":"gpasswd","p":"/gpasswd","d":"Linux下工作组文件的管理工具"},"strings":{"n":"strings","p":"/strings","d":"在对象文件或二进制文件中查找可打印的字符串"},"openssl":{"n":"openssl","p":"/openssl","d":"强大的安全套接字层密码库"},"killall":{"n":"killall","p":"/killall","d":"使用进程的名称来杀死一组进程"},"ethtool":{"n":"ethtool","p":"/ethtool","d":"显示或修改以太网卡的配置信息"},"swapoff":{"n":"swapoff","p":"/swapoff","d":"关闭指定的交换空间"},"usermod":{"n":"usermod","p":"/usermod","d":"用于修改用户的基本信息"},"e2label":{"n":"e2label","p":"/e2label","d":"设置第二扩展文件系统的卷标"},"logname":{"n":"logname","p":"/logname","d":"用来显示用户名称"},"pathchk":{"n":"pathchk","p":"/pathchk","d":"检查文件中不可移植的部分"},"systool":{"n":"systool","p":"/systool","d":"显示基于总线、类和拓扑显示系统中设备的信息"},"hwclock":{"n":"hwclock","p":"/hwclock","d":"显示与设定硬件时钟"},"lastlog":{"n":"lastlog","p":"/lastlog","d":"显示系统中所有用户最近一次登录信息"},"rpmsign":{"n":"rpmsign","p":"/rpmsign","d":"使用RPM软件包的签名管理工具"},"userdel":{"n":"userdel","p":"/userdel","d":"用于删除给定的用户以及与用户相关的文件"},"tcpdump":{"n":"tcpdump","p":"/tcpdump","d":"一款sniffer工具,是Linux上的抓包工具,嗅探器。"},"builtin":{"n":"builtin","p":"/builtin","d":"执行shell内部命令"},"crontab":{"n":"crontab","p":"/crontab","d":"提交和管理用户的需要周期性执行的任务"},"logsave":{"n":"logsave","p":"/logsave","d":"将命令的输出信息保存到指定的日志文件"},"useradd":{"n":"useradd","p":"/useradd","d":"创建的新的系统用户"},"bunzip2":{"n":"bunzip2","p":"/bunzip2","d":"创一个bz2文件压缩包"},"grpconv":{"n":"grpconv","p":"/grpconv","d":"用来开启群组的投影密码"},"ppp-off":{"n":"ppp-off","p":"/ppp-off","d":"关闭ppp连线"},"losetup":{"n":"losetup","p":"/losetup","d":"设定与控制循环(loop)设备"},"command":{"n":"command","p":"/command","d":"调用并执行指定的命令"},"service":{"n":"service","p":"/service","d":"控制系统服务的实用工具"},"whereis":{"n":"whereis","p":"/whereis","d":"查找二进制程序、代码等相关文件路径"},"objdump":{"n":"objdump","p":"/objdump","d":"显示二进制文件信息"},"lvremove":{"n":"lvremove","p":"/lvremove","d":"删除指定LVM逻辑卷"},"diffstat":{"n":"diffstat","p":"/diffstat","d":"显示diff命令输出信息的柱状图"},"pvchange":{"n":"pvchange","p":"/pvchange","d":"修改物理卷属性"},"updatedb":{"n":"updatedb","p":"/updatedb","d":"创建或更新slocate命令所必需的数据库文件"},"arpwatch":{"n":"arpwatch","p":"/arpwatch","d":"监听网络上ARP的记录"},"pvcreate":{"n":"pvcreate","p":"/pvcreate","d":"将物理硬盘分区初始化为物理卷"},"basename":{"n":"basename","p":"/basename","d":"打印目录或者文件的基本名称"},"pvremove":{"n":"pvremove","p":"/pvremove","d":"删除一个存在的物理卷"},"dhcrelay":{"n":"dhcrelay","p":"/dhcrelay","d":"使用dhcrelay命令可以提供中继DHCP和BOOTP请求"},"shutdown":{"n":"shutdown","p":"/shutdown","d":"用来执行系统关机的命令"},"ldconfig":{"n":"ldconfig","p":"/ldconfig","d":"动态链接库管理命令"},"zipsplit":{"n":"zipsplit","p":"/zipsplit","d":"将较大的zip压缩包分割成各个较小的压缩包"},"mkinitrd":{"n":"mkinitrd","p":"/mkinitrd","d":"建立要载入ramdisk的映像文件"},"logwatch":{"n":"logwatch","p":"/logwatch","d":"可定制和可插入式的日志监视系统"},"pwunconv":{"n":"pwunconv","p":"/pwunconv","d":"用来关闭用户的投影密码"},"unexpand":{"n":"unexpand","p":"/unexpand","d":"将文件的空白字符转换为制表符"},"groupmod":{"n":"groupmod","p":"/groupmod","d":"更改群组识别码或名称"},"groupdel":{"n":"groupdel","p":"/groupdel","d":"用于删除指定的工作组"},"quotaoff":{"n":"quotaoff","p":"/quotaoff","d":"关闭Linux内核中指定文件系统的磁盘配额功能"},"nslookup":{"n":"nslookup","p":"/nslookup","d":"查询域名DNS信息的工具"},"lvcreate":{"n":"lvcreate","p":"/lvcreate","d":"用于创建LVM的逻辑卷"},"modprobe":{"n":"modprobe","p":"/modprobe","d":"自动处理可载入模块"},"groupadd":{"n":"groupadd","p":"/groupadd","d":"用于创建一个新的工作组"},"lvextend":{"n":"lvextend","p":"/lvextend","d":"扩展逻辑卷空间"},"readonly":{"n":"readonly","p":"/readonly","d":"定义只读shell变量或函数"},"lvreduce":{"n":"lvreduce","p":"/lvreduce","d":"收缩逻辑卷空间"},"htdigest":{"n":"htdigest","p":"/htdigest","d":"Apache服务器内置工具"},"vgrename":{"n":"vgrename","p":"/vgrename","d":"使用vgrename命令可以重命名卷组的名称。"},"lvresize":{"n":"lvresize","p":"/lvresize","d":"调整逻辑卷空间大小"},"repquota":{"n":"repquota","p":"/repquota","d":"报表的格式输出磁盘空间限制的状态"},"chpasswd":{"n":"chpasswd","p":"/chpasswd","d":"批量更新用户口令的工具"},"xlsfonts":{"n":"xlsfonts","p":"/xlsfonts","d":"列出X Server使用的字体"},"aptitude":{"n":"aptitude","p":"/aptitude","d":"Debian Linux系统中软件包管理工具"},"ftpcount":{"n":"ftpcount","p":"/ftpcount","d":"显示目前已FTP登入的用户人数"},"vgremove":{"n":"vgremove","p":"/vgremove","d":"用于用户删除LVM卷组"},"exportfs":{"n":"exportfs","p":"/exportfs","d":"管理NFS共享文件系统列表"},"blockdev":{"n":"blockdev","p":"/blockdev","d":"从命令行调用区块设备控制程序"},"hostname":{"n":"hostname","p":"/hostname","d":"显示和设置系统的主机名"},"dpkg-deb":{"n":"dpkg-deb","p":"/dpkg-deb","d":"Debian Linux下的软件包管理工具"},"dos2unix":{"n":"dos2unix","p":"/dos2unix","d":"将DOS格式文本文件转换成Unix格式"},"mailstat":{"n":"mailstat","p":"/mailstat","d":"显示到达的邮件状态"},"vgreduce":{"n":"vgreduce","p":"/vgreduce","d":"从卷组中删除物理卷"},"htpasswd":{"n":"htpasswd","p":"/htpasswd","d":"apache服务器创建密码认证文件"},"rpm2cpio":{"n":"rpm2cpio","p":"/rpm2cpio","d":"将RPM软件包转换为cpio格式的文件"},"bmodinfo":{"n":"bmodinfo","p":"/bmodinfo","d":"显示给定模块的详细信息"},"rpmbuild":{"n":"rpmbuild","p":"/rpmbuild","d":"创建RPM的二进制软件包和源码软件包"},"vgextend":{"n":"vgextend","p":"/vgextend","d":"向卷组中添加物理卷"},"cdrecord":{"n":"cdrecord","p":"/cdrecord","d":"Linux系统下光盘刻录功能命令"},"rpmquery":{"n":"rpmquery","p":"/rpmquery","d":"从RPM数据库中查询软件包信息"},"vgcreate":{"n":"vgcreate","p":"/vgcreate","d":"用于创建LVM卷组"},"poweroff":{"n":"poweroff","p":"/poweroff","d":"关闭Linux系统,关闭记录会被写入到/var/log/wtmp日志文件中。"},"iptables":{"n":"iptables","p":"/iptables","d":"Linux上常用的防火墙软件"},"xlsatoms":{"n":"xlsatoms","p":"/xlsatoms","d":"列出X服务器内部所有定义的原子成分"},"runlevel":{"n":"runlevel","p":"/runlevel","d":"打印当前Linux系统的运行等级"},"ifconfig":{"n":"ifconfig","p":"/ifconfig","d":"配置和显示Linux系统网卡的网络参数"},"protoize":{"n":"protoize","p":"/protoize","d":"GNU-C代码转换为ANSI-C代码"},"tempfile":{"n":"tempfile","p":"/tempfile","d":"shell中给临时文件命名"},"mii-tool":{"n":"mii-tool","p":"/mii-tool","d":"配置网络设备协商方式的工具"},"compress":{"n":"compress","p":"/compress","d":"使用Lempress-Ziv编码压缩数据文件"},"vgchange":{"n":"vgchange","p":"/vgchange","d":"修改卷组属性"},"semanage":{"n":"semanage","p":"/semanage","d":"默认目录的安全上下文查询与修改"},"sendmail":{"n":"sendmail","p":"/sendmail","d":"著名电子邮件服务器"},"newusers":{"n":"newusers","p":"/newusers","d":"用于批处理的方式一次创建多个命令"},"iptstate":{"n":"iptstate","p":"/iptstate","d":"显示iptables的工作状态"},"sesearch":{"n":"sesearch","p":"/sesearch","d":"查询SELinux策略的规则详情"},"dhclient":{"n":"dhclient","p":"/dhclient","d":"动态获取或释放IP地址"},"tracepath":{"n":"tracepath","p":"/tracepath","d":"追踪目的主机经过的路由信息"},"grpunconv":{"n":"grpunconv","p":"/grpunconv","d":"用来关闭群组的投影密码"},"tcpreplay":{"n":"tcpreplay","p":"/tcpreplay","d":"将PCAP包重新发送,用于性能或者功能测试"},"systemctl":{"n":"systemctl","p":"/systemctl","d":"系统服务管理器指令"},"chkconfig":{"n":"chkconfig","p":"/chkconfig","d":"检查或设置系统的各种服务"},"apachectl":{"n":"apachectl","p":"/apachectl","d":"Apache服务器前端控制工具"},"ip6tables":{"n":"ip6tables","p":"/ip6tables","d":"linux中防火墙软件"},"getsebool":{"n":"getsebool","p":"/getsebool","d":"查询SElinux策略内各项规则的布尔值"},"ssh-agent":{"n":"ssh-agent","p":"/ssh-agent","d":"ssh密钥管理器"},"logrotate":{"n":"logrotate","p":"/logrotate","d":"统日志进行轮转、压缩和删除"},"lvdisplay":{"n":"lvdisplay","p":"/lvdisplay","d":"显示逻辑卷属性"},"mysqldump":{"n":"mysqldump","p":"/mysqldump","d":"MySQL数据库中备份工具"},"smbpasswd":{"n":"smbpasswd","p":"/smbpasswd","d":"samba用户和密码管理工具"},"smbclient":{"n":"smbclient","p":"/smbclient","d":"交互方式访问samba服务器"},"showmount":{"n":"showmount","p":"/showmount","d":"显示NFS服务器加载的信息"},"mysqlshow":{"n":"mysqlshow","p":"/mysqlshow","d":"显示MySQL中数据库相关信息"},"clockdiff":{"n":"clockdiff","p":"/clockdiff","d":"检测两台linux主机的时间差"},"arptables":{"n":"arptables","p":"/arptables","d":"管理ARP包过滤规则表"},"setsebool":{"n":"setsebool","p":"/setsebool","d":"修改SElinux策略内各项规则的布尔值"},"badblocks":{"n":"badblocks","p":"/badblocks","d":"查找磁盘中损坏的区块"},"vgdisplay":{"n":"vgdisplay","p":"/vgdisplay","d":"显示LVM卷组的信息"},"rpmverify":{"n":"rpmverify","p":"/rpmverify","d":"验证已安装的RPM软件包的正确性"},"dmidecode":{"n":"dmidecode","p":"/dmidecode","d":"在Linux系统下获取有关硬件方面的信息"},"vgconvert":{"n":"vgconvert","p":"/vgconvert","d":"转换卷组元数据格式"},"dircolors":{"n":"dircolors","p":"/dircolors","d":"置ls命令在显示目录或文件时所用的色彩"},"pvdisplay":{"n":"pvdisplay","p":"/pvdisplay","d":"显示物理卷的属性"},"partprobe":{"n":"partprobe","p":"/partprobe","d":"不重启的情况下重读分区"},"quotacheck":{"n":"quotacheck","p":"/quotacheck","d":"检查磁盘的使用空间与限制"},"cupsenable":{"n":"cupsenable","p":"/cupsenable","d":"启动指定的打印机"},"usernetctl":{"n":"usernetctl","p":"/usernetctl","d":"被允许时操作指定的网络接口"},"ssh-keygen":{"n":"ssh-keygen","p":"/ssh-keygen","d":"为ssh生成、管理和转换认证密钥"},"xlsclients":{"n":"xlsclients","p":"/xlsclients","d":"列出显示器中的客户端应用程序"},"getenforce":{"n":"getenforce","p":"/getenforce","d":"显示当前SELinux的应用模式,是强制、执行还是停用。"},"domainname":{"n":"domainname","p":"/domainname","d":"显示和设置系统的NIS域名"},"get_module":{"n":"get_module","p":"/get_module","d":"获取Linux内核模块的详细信息"},"traceroute":{"n":"traceroute","p":"/traceroute","d":"显示数据包到主机间的路径"},"mkbootdisk":{"n":"mkbootdisk","p":"/mkbootdisk","d":"可建立目前系统的启动盘"},"dpkg-query":{"n":"dpkg-query","p":"/dpkg-query","d":"Debian Linux中软件包的查询工具"},"mysqladmin":{"n":"mysqladmin","p":"/mysqladmin","d":"MySQL服务器管理客户端"},"dpkg-split":{"n":"dpkg-split","p":"/dpkg-split","d":"Debian Linux中将大软件包分割成小包"},"restorecon":{"n":"restorecon","p":"/restorecon","d":"恢复文件的安全上下文"},"unprotoize":{"n":"unprotoize","p":"/unprotoize","d":"删除C语言源代码文件中的函数原型"},"uncompress":{"n":"uncompress","p":"/uncompress","d":"用来解压.Z文件"},"squidclient":{"n":"squidclient","p":"/squidclient","d":"squid服务器的客户端管理工具"},"cupsdisable":{"n":"cupsdisable","p":"/cupsdisable","d":"停止指定的打印机"},"consoletype":{"n":"consoletype","p":"/consoletype","d":"输出已连接的终端类型"},"mysqlimport":{"n":"mysqlimport","p":"/mysqlimport","d":"为MySQL服务器用命令行方式导入数据"},"inotifywait":{"n":"inotifywait","p":"/inotifywait","d":"异步文件系统监控机制"},"ssh-keyscan":{"n":"ssh-keyscan","p":"/ssh-keyscan","d":"收集主机公钥的使用工具"},"lsb_release":{"n":"lsb_release","p":"/lsb_release","d":"显示发行版本信息"},"sftp-server":{"n":"sftp-server","p":"/sftp-server","d":"sftp协议的服务器端程序"},"ssh-copy-id":{"n":"ssh-copy-id","p":"/ssh-copy-id","d":"把本地的ssh公钥文件安装到远程主机对应的账户下"},"dpkg-divert":{"n":"dpkg-divert","p":"/dpkg-divert","d":"Debian Linux中创建并管理一个转向列表"},"dpkg-trigger":{"n":"dpkg-trigger","p":"/dpkg-trigger","d":"Debian Linux下的软件包触发器"},"firewall-cmd":{"n":"firewall-cmd","p":"/firewall-cmd","d":"Linux上新用的防火墙软件,跟iptables差不多的工具。"},"convertquota":{"n":"convertquota","p":"/convertquota","d":"把老的配额文件转换为新的格式"},"apt-sortpkgs":{"n":"apt-sortpkgs","p":"/apt-sortpkgs","d":"Debian Linux下对软件包索引文件进行排序的工具"},"bzip2recover":{"n":"bzip2recover","p":"/bzip2recover","d":"恢复被破坏的.bz2压缩包中的文件"},"ypdomainname":{"n":"ypdomainname","p":"/ypdomainname","d":"显示主机的NIS的域名"},"kernelversion":{"n":"kernelversion","p":"/kernelversion","d":"打印当前内核的主版本号"},"nisdomainname":{"n":"nisdomainname","p":"/nisdomainname","d":"显示主机NIS的域名"},"iptables-save":{"n":"iptables-save","p":"/iptables-save","d":"备份iptables的表配置"},"speedtest-cli":{"n":"speedtest-cli","p":"/speedtest-cli","d":"命令行下测试服务器外网速度"},"dnsdomainname":{"n":"dnsdomainname","p":"/dnsdomainname","d":"定义DNS系统中FQDN名称的域名"},"ip6tables-save":{"n":"ip6tables-save","p":"/ip6tables-save","d":"保存ip6tables表配置"},"named-checkzone":{"n":"named-checkzone","p":"/named-checkzone","d":"使用named-checkzone命令可以进行区域文件有效性检查和转换,必须指定区域名称和区域文件名称。"},"iptables-restore":{"n":"iptables-restore","p":"/iptables-restore","d":"还原iptables表的配置"},"dpkg-reconfigure":{"n":"dpkg-reconfigure","p":"/dpkg-reconfigure","d":"Debian Linux中重新配制一个已经安装的软件包"},"dpkg-preconfigure":{"n":"dpkg-preconfigure","p":"/dpkg-preconfigure","d":"Debian Linux中软件包安装之前询问问题"},"ip6tables-restore":{"n":"ip6tables-restore","p":"/ip6tables-restore","d":"还原ip6tables表"},"dpkg-statoverride":{"n":"dpkg-statoverride","p":"/dpkg-statoverride","d":"Debian Linux中覆盖文件的所有权和模式"}} \ No newline at end of file +{"w":{"n":"w","p":"/w","d":"显示目前登入系统的用户信息"},"ab":{"n":"ab","p":"/ab","d":"Apache服务器的性能测试工具"},"ip":{"n":"ip","p":"/ip","d":"网络配置工具"},"ld":{"n":"ld","p":"/ld","d":"将目标文件连接为可执行程序"},"xz":{"n":"xz","p":"/xz","d":"POSIX 平台开发具有高压缩率的工具。"},"ln":{"n":"ln","p":"/ln","d":"用来为文件创件连接"},"ar":{"n":"ar","p":"/ar","d":"建立或修改备存文件,或是从备存文件中抽取文件"},"lp":{"n":"lp","p":"/lp","d":"打印文件或修改排队的打印任务"},"fg":{"n":"fg","p":"/fg","d":"将后台作业放到前台终端运行"},"wc":{"n":"wc","p":"/wc","d":"统计文件的字节数、字数、行数"},"as":{"n":"as","p":"/as","d":"汇编语言编译器"},"at":{"n":"at","p":"/at","d":"在指定时间执行一个任务"},"fc":{"n":"fc","p":"/fc","d":"修改历史命令并执行"},"ls":{"n":"ls","p":"/ls","d":"显示目录内容列表"},"id":{"n":"id","p":"/id","d":"显示用户的ID以及所属群组的ID"},"vi":{"n":"vi","p":"/vi","d":"功能强大的纯文本编辑器"},"bc":{"n":"bc","p":"/bc","d":"算术操作精密运算工具"},"bg":{"n":"bg","p":"/bg","d":"用于将作业放到后台运行"},"ex":{"n":"ex","p":"/ex","d":"启动vim编辑器的ex编辑模式"},"ed":{"n":"ed","p":"/ed","d":"单行纯文本编辑器"},"tr":{"n":"tr","p":"/tr","d":"将字符进行替换压缩和删除"},"mv":{"n":"mv","p":"/mv","d":"用来对文件或目录重新命名"},"du":{"n":"du","p":"/du","d":"显示每个文件和目录的磁盘使用空间"},"nc":{"n":"nc","p":"/nc","d":"命令用于设置路由器。"},"nl":{"n":"nl","p":"/nl","d":"在Linux系统中计算文件内容行号"},"nm":{"n":"nm","p":"/nm","d":"显示二进制目标文件的符号表"},"cd":{"n":"cd","p":"/cd","d":"切换用户当前工作目录"},"od":{"n":"od","p":"/od","d":"输出文件的八进制、十六进制等格式编码的字节"},"pr":{"n":"pr","p":"/pr","d":"将文本文件转换成适合打印的格式"},"su":{"n":"su","p":"/su","d":"用于切换当前用户身份到其他用户身份"},"ps":{"n":"ps","p":"/ps","d":"报告当前系统的进程状态"},"ss":{"n":"ss","p":"/ss","d":"获取socket统计信息,iproute2 包附带的另一个工具,允许你查询 socket 的有关统计信息。"},"sh":{"n":"sh","p":"/sh","d":"shell命令解释器"},"pv":{"n":"pv","p":"/pv","d":"显示当前在命令行执行的命令的进度信息,管道查看器。"},"df":{"n":"df","p":"/df","d":"显示磁盘的相关信息"},"dd":{"n":"dd","p":"/dd","d":"复制文件并对原文件的内容进行转换和格式化处理"},"rm":{"n":"rm","p":"/rm","d":"用于删除给定的文件和目录"},"cu":{"n":"cu","p":"/cu","d":"用于连接另一个系统主机。"},"cp":{"n":"cp","p":"/cp","d":"将源文件或目录复制到目标文件或目录中"},"man":{"n":"man","p":"/man","d":"查看Linux中的指令帮助"},"sar":{"n":"sar","p":"/sar","d":"系统运行状态统计工具"},"rsh":{"n":"rsh","p":"/rsh","d":"连接远程主机并执行命令"},"rpm":{"n":"rpm","p":"/rpm","d":"RPM软件包的管理工具"},"sed":{"n":"sed","p":"/sed","d":"功能强大的流式文本编辑器"},"seq":{"n":"seq","p":"/seq","d":"以指定增量从首数开始打印数字到尾数"},"zip":{"n":"zip","p":"/zip","d":"可以用来解压缩文件"},"cut":{"n":"cut","p":"/cut","d":"连接文件并打印到标准输出设备上"},"set":{"n":"set","p":"/set","d":"显示或设置shell特性及shell变量"},"rcp":{"n":"rcp","p":"/rcp","d":"使在两台Linux主机之间的文件复制操作更简单"},"col":{"n":"col","p":"/col","d":"过滤控制字符"},"pwd":{"n":"pwd","p":"/pwd","d":"绝对路径方式显示用户当前工作目录"},"pvs":{"n":"pvs","p":"/pvs","d":"输出物理卷信息报表"},"cmp":{"n":"cmp","p":"/cmp","d":"比较两个文件是否有差异"},"dig":{"n":"dig","p":"/dig","d":"域名查询工具"},"ssh":{"n":"ssh","p":"/ssh","d":"openssh套件中的客户端连接工具"},"sum":{"n":"sum","p":"/sum","d":"计算文件的校验码和显示块数"},"dnf":{"n":"dnf","p":"/dnf","d":"新一代的RPM软件包管理器"},"php":{"n":"php","p":"/php","d":"PHP语言的命令行接口"},"tac":{"n":"tac","p":"/tac","d":"将文件已行为单位的反序输出"},"cat":{"n":"cat","p":"/cat","d":"连接文件并打印到标准输出设备上"},"cal":{"n":"cal","p":"/cal","d":"显示当前日历或指定日期的日历"},"tar":{"n":"tar","p":"/tar","d":"Linux下的归档使用工具,用来打包和备份。"},"tee":{"n":"tee","p":"/tee","d":"把数据重定向到给定文件和屏幕上"},"top":{"n":"top","p":"/top","d":"显示或管理执行中的程序"},"bye":{"n":"bye","p":"/bye","d":"命令用于中断FTP连线并结束程序。。"},"scp":{"n":"scp","p":"/scp","d":"加密的方式在本地主机和远程主机之间复制文件"},"elm":{"n":"elm","p":"/elm","d":"纯文本邮件客户端程序"},"env":{"n":"env","p":"/env","d":"显示系统中已存在的环境变量"},"tty":{"n":"tty","p":"/tty","d":"显示连接到当前标准输入的终端设备文件名。"},"awk":{"n":"awk","p":"/awk","d":"文本和数据进行处理的编程语言"},"lpr":{"n":"lpr","p":"/lpr","d":"将文件发送给指定打印机进行打印"},"atq":{"n":"atq","p":"/atq","d":"列出当前用户的at任务列表"},"lpq":{"n":"lpq","p":"/lpq","d":"显示打印队列中的打印任务的状态信息"},"arp":{"n":"arp","p":"/arp","d":"显示和修改IP到MAC转换表"},"lpc":{"n":"lpc","p":"/lpc","d":"命令行方式打印机控制程序"},"arj":{"n":"arj","p":"/arj","d":"用于创建和管理.arj压缩包"},"who":{"n":"who","p":"/who","d":"显示目前登录系统的用户信息"},"fmt":{"n":"fmt","p":"/fmt","d":"读取文件后优化处理并输出"},"ftp":{"n":"ftp","p":"/ftp","d":"用来设置文件系统相关功能"},"lha":{"n":"lha","p":"/lha","d":"压缩或解压缩lzh格式文件"},"let":{"n":"let","p":"/let","d":"简单的计算器"},"gcc":{"n":"gcc","p":"/gcc","d":"基于C/C++的编译器"},"gdb":{"n":"gdb","p":"/gdb","d":"功能强大的程序调试器"},"ldd":{"n":"ldd","p":"/ldd","d":"打印程序或者库文件所依赖的共享库列表"},"yes":{"n":"yes","p":"/yes","d":"重复打印指定字符串"},"git":{"n":"git","p":"/git","d":"是目前世界上最先进的分布式版本控制系统"},"gpm":{"n":"gpm","p":"/gpm","d":"提供文字模式下的滑鼠事件处理"},"joe":{"n":"joe","p":"/joe","d":"强大的纯文本编辑器"},"jed":{"n":"jed","p":"/jed","d":"主要用于编辑代码的编辑器"},"yum":{"n":"yum","p":"/yum","d":"基于RPM的软件包管理器"},"rev":{"n":"rev","p":"/rev","d":"将文件内容以字符为单位反序输出"},"chfn":{"n":"chfn","p":"/chfn","d":"用来改变finger命令显示的信息"},"sudo":{"n":"sudo","p":"/sudo","d":"以其他身份来执行命令"},"pssh":{"n":"pssh","p":"/pssh","d":"批量管理执行"},"bind":{"n":"bind","p":"/bind","d":"显示或设置键盘按键与其相关的功能"},"dirs":{"n":"dirs","p":"/dirs","d":"显示目录记录"},"stty":{"n":"stty","p":"/stty","d":"修改终端命令行的相关设置"},"popd":{"n":"popd","p":"/popd","d":"用于删除目录栈中的记录"},"stat":{"n":"stat","p":"/stat","d":"用于显示文件的状态信息"},"pmap":{"n":"pmap","p":"/pmap","d":"报告进程的内存映射关系"},"ping":{"n":"ping","p":"/ping","d":"测试主机之间网络的连通性"},"pico":{"n":"pico","p":"/pico","d":"功能强大全屏幕的文本编辑器"},"sshd":{"n":"sshd","p":"/sshd","d":"openssh软件套件中的服务器守护进程"},"perl":{"n":"perl","p":"/perl","d":"perl语言解释器"},"uniq":{"n":"uniq","p":"/uniq","d":"报告或忽略文件中的重复行"},"nmap":{"n":"nmap","p":"/nmap","d":"网络探测和安全审核"},"chsh":{"n":"chsh","p":"/chsh","d":"用来更换登录系统时使用的shell"},"type":{"n":"type","p":"/type","d":"显示指定命令的类型"},"nice":{"n":"nice","p":"/nice","d":"改变程序执行的优先权等级"},"sort":{"n":"sort","p":"/sort","d":"将文件进行排序并输出"},"dpkg":{"n":"dpkg","p":"/dpkg","d":"Debian Linux系统上安装、创建和管理软件包"},"dris":{"n":"dris","p":"/dris","d":"显示和清空目录堆栈中的内容"},"nano":{"n":"nano","p":"/nano","d":"字符终端文本编辑器"},"xset":{"n":"xset","p":"/xset","d":"设置X-Window系统中的用户爱好的实用工具"},"dump":{"n":"dump","p":"/dump","d":"用于备份ext2或者ext3文件系统"},"sftp":{"n":"sftp","p":"/sftp","d":"交互式的文件传输程序"},"more":{"n":"more","p":"/more","d":"显示文件内容,每次显示一屏"},"echo":{"n":"echo","p":"/echo","d":"输出指定的字符串或者变量"},"tree":{"n":"tree","p":"/tree","d":"树状图列出目录的内容"},"mkfs":{"n":"mkfs","p":"/mkfs","d":"用于在设备上创建Linux文件系统"},"mesg":{"n":"mesg","p":"/mesg","d":"设置当前终端的写权限"},"trap":{"n":"trap","p":"/trap","d":"指定在接收到信号后将要采取的动作"},"make":{"n":"make","p":"/make","d":"GNU的工程化编译工具"},"atop":{"n":"atop","p":"/atop","d":"监控Linux系统资源与进程的工具"},"mail":{"n":"mail","p":"/mail","d":"命令行下发送和接收电子邮件"},"lynx":{"n":"lynx","p":"/lynx","d":"纯文本模式的网页浏览器"},"comm":{"n":"comm","p":"/comm","d":"两个文件之间的比较"},"lsof":{"n":"lsof","p":"/lsof","d":"显示Linux系统当前已打开的所有文件列表"},"zcat":{"n":"zcat","p":"/zcat","d":"显示压缩包中文件的内容"},"exec":{"n":"exec","p":"/exec","d":"调用并执行指定的命令"},"exit":{"n":"exit","p":"/exit","d":"退出当前的shell"},"tput":{"n":"tput","p":"/tput","d":"通过terminfo数据库对终端会话进行初始化和操作"},"lprm":{"n":"lprm","p":"/lprm","d":"删除打印队列中的打印任务"},"atrm":{"n":"atrm","p":"/atrm","d":"删除待执行任务队列中的指定任务"},"expr":{"n":"expr","p":"/expr","d":"一款表达式计算工具"},"time":{"n":"time","p":"/time","d":"统计给定命令所花费的总时间"},"tftp":{"n":"tftp","p":"/tftp","d":"在本机和tftp服务器之间使用TFTP协议传输文件"},"cpio":{"n":"cpio","p":"/cpio","d":"用来建立、还原备份档的工具程序"},"test":{"n":"test","p":"/test","d":"shell环境中测试条件表达式工具"},"file":{"n":"file","p":"/file","d":"用来探测给定文件的类型。"},"find":{"n":"find","p":"/find","d":"在指定目录下查找文件"},"arpd":{"n":"arpd","p":"/arpd","d":"收集免费ARP信息"},"look":{"n":"look","p":"/look","d":"显示文件中以指定字符串开头的任意行"},"axel":{"n":"axel","p":"/axel","d":"多线程下载工具"},"wait":{"n":"wait","p":"/wait","d":"等待进程执行完后返回"},"fold":{"n":"fold","p":"/fold","d":"控制文件内容输出时所占用的屏幕宽度"},"free":{"n":"free","p":"/free","d":"显示内存的使用情况"},"fsck":{"n":"fsck","p":"/fsck","d":"检查并且试图修复文件系统中的错误"},"talk":{"n":"talk","p":"/talk","d":"让用户和其他用户聊天"},"lilo":{"n":"lilo","p":"/lilo","d":"安装核心载入开机管理程序"},"curl":{"n":"curl","p":"/curl","d":"利用URL规则在命令行下工作的文件传输工具"},"lftp":{"n":"lftp","p":"/lftp","d":"优秀的文件客户端程序"},"wget":{"n":"wget","p":"/wget","d":"Linux系统下载文件工具"},"less":{"n":"less","p":"/less","d":"分屏上下翻页浏览文件内容"},"date":{"n":"date","p":"/date","d":"显示或设置系统时间与日期"},"gcov":{"n":"gcov","p":"/gcov","d":"测试程序的代码覆盖率的工具"},"znew":{"n":"znew","p":"/znew","d":"将.Z压缩包重新转化为gzip命令压缩的.gz压缩包"},"read":{"n":"read","p":"/read","d":"从键盘读取变量值"},"tail":{"n":"tail","p":"/tail","d":"在屏幕上显示指定文件的末尾若干行"},"last":{"n":"last","p":"/last","d":"列出目前与过去登入系统的用户相关信息"},"wall":{"n":"wall","p":"/wall","d":"向系统当前所有打开的终端上输出信息"},"kill":{"n":"kill","p":"/kill","d":"删除执行中的程序或工作"},"sync":{"n":"sync","p":"/sync","d":"用于强制被改变的内容立刻写入磁盘"},"grep":{"n":"grep","p":"/grep","d":"强大的文本搜索工具"},"join":{"n":"join","p":"/join","d":"两个文件中指定栏位内容相同的行连接起来"},"pwck":{"n":"pwck","p":"/pwck","d":"用来验证系统认证文件内容和格式的完整性"},"jobs":{"n":"jobs","p":"/jobs","d":"显示Linux中的任务列表及任务状态"},"arch":{"n":"arch","p":"/arch","d":"显示当前主机的硬件架构类型"},"ipcs":{"n":"ipcs","p":"/ipcs","d":"分析消息队列共享内存和信号量 "},"diff":{"n":"diff","p":"/diff","d":"比较给定的两个文件的不同"},"init":{"n":"init","p":"/init","d":"init进程是所有Linux进程的父进程"},"grub":{"n":"grub","p":"/grub","d":"多重引导程序grub的命令行shell工具"},"info":{"n":"info","p":"/info","d":"Linux下info格式的帮助指令"},"ifup":{"n":"ifup","p":"/ifup","d":"激活指定的网络接口"},"gzip":{"n":"gzip","p":"/gzip","d":"用来压缩文件"},"halt":{"n":"halt","p":"/halt","d":"关闭正在运行的Linux操作系统"},"pvck":{"n":"pvck","p":"/pvck","d":"检测物理卷的LVM元数据的一致性"},"head":{"n":"head","p":"/head","d":"在屏幕上显示指定文件的开头若干行"},"help":{"n":"help","p":"/help","d":"显示帮助信息"},"htop":{"n":"htop","p":"/htop","d":"[非内部命令]一个互动的进程查看器,可以动态观察系统进程状况。"},"host":{"n":"host","p":"/host","d":"常用的分析域名查询工具"},"mysql":{"n":"mysql","p":"/mysql","d":"MySQL服务器客户端工具"},"bzcat":{"n":"bzcat","p":"/bzcat","d":"解压缩指定的.bz2文件"},"touch":{"n":"touch","p":"/touch","d":"创建新的空文件"},"iconv":{"n":"iconv","p":"/iconv","d":"转换文件的编码方式"},"ifcfg":{"n":"ifcfg","p":"/ifcfg","d":"置Linux中的网络接口参数"},"iftop":{"n":"iftop","p":"/iftop","d":"一款实时流量监控工具"},"gzexe":{"n":"gzexe","p":"/gzexe","d":"用来压缩可执行文件"},"tload":{"n":"tload","p":"/tload","d":"显示系统负载状况"},"iotop":{"n":"iotop","p":"/iotop","d":"用来监视磁盘I/O使用状况的工具"},"alias":{"n":"alias","p":"/alias","d":"用来设置指令的别名"},"zfore":{"n":"zfore","p":"/zfore","d":"强制为gzip格式的压缩文件添加.gz后缀"},"bzip2":{"n":"bzip2","p":"/bzip2","d":"将文件压缩成bz2格式"},"ipcrm":{"n":"ipcrm","p":"/ipcrm","d":"删除消息队列、信号集、或者共享内存标识"},"grpck":{"n":"grpck","p":"/grpck","d":"用于验证组文件的完整性"},"iperf":{"n":"iperf","p":"/iperf","d":"网络性能测试工具"},"kexec":{"n":"kexec","p":"/kexec","d":"从当前正在运行的内核引导到一个新内核"},"lastb":{"n":"lastb","p":"/lastb","d":"列出登入系统失败的用户相关信息"},"xinit":{"n":"xinit","p":"/xinit","d":"是Linux下X-Window系统的初始化程序"},"xhost":{"n":"xhost","p":"/xhost","d":"制哪些X客户端能够在X服务器上显示"},"fuser":{"n":"fuser","p":"/fuser","d":"使用文件或文件结构识别进程"},"tailf":{"n":"tailf","p":"/tailf","d":"在屏幕上显示指定文件的末尾若干行内容,通常用于日志文件的跟踪输出。"},"chage":{"n":"chage","p":"/chage","d":"修改帐号和密码的有效期限"},"xclip":{"n":"xclip","p":"/xclip","d":"管理 X 粘贴板"},"login":{"n":"login","p":"/login","d":"登录系统或切换用户身份"},"xauth":{"n":"xauth","p":"/xauth","d":"显示和编辑被用于连接X服务器的认证信息"},"fgrep":{"n":"fgrep","p":"/fgrep","d":"为文件搜索文字字符串"},"fdisk":{"n":"fdisk","p":"/fdisk","d":"查看磁盘使用情况和磁盘分区"},"xargs":{"n":"xargs","p":"/xargs","d":"给其他命令传递参数的一个过滤器"},"lsblk":{"n":"lsblk","p":"/lsblk","d":"列出块设备信息"},"lscpu":{"n":"lscpu","p":"/lscpu","d":"显示有关CPU架构的信息"},"lsmod":{"n":"lsmod","p":"/lsmod","d":"显示已载入系统的模块"},"chcon":{"n":"chcon","p":"/chcon","d":"修改对象(文件)的安全上下文"},"lspci":{"n":"lspci","p":"/lspci","d":"显示当前主机的所有PCI总线信息"},"lsusb":{"n":"lsusb","p":"/lsusb","d":"显示本机的USB设备列表信息"},"write":{"n":"write","p":"/write","d":"向指定登录用户终端上发送信息"},"emacs":{"n":"emacs","p":"/emacs","d":"功能强大的全屏文本编辑器"},"mailq":{"n":"mailq","p":"/mailq","d":"显示待发送的邮件队列"},"eject":{"n":"eject","p":"/eject","d":"用来退出抽取式设备"},"egrep":{"n":"egrep","p":"/egrep","d":"在文件内查找指定的字符串"},"mkdir":{"n":"mkdir","p":"/mkdir","d":"用来创建目录"},"chgrp":{"n":"chgrp","p":"/chgrp","d":"用来变更文件或目录的所属群组"},"chmod":{"n":"chmod","p":"/chmod","d":"用来变更文件或目录的权限"},"mknod":{"n":"mknod","p":"/mknod","d":"创建字符设备文件和块设备文件"},"mount":{"n":"mount","p":"/mount","d":"用于挂载Linux系统外的文件。"},"bzcmp":{"n":"bzcmp","p":"/bzcmp","d":"比较两个压缩包中的文件"},"which":{"n":"which","p":"/which","d":"查找并显示给定命令的绝对路径"},"chown":{"n":"chown","p":"/chown","d":"用来变更文件或目录的拥有者或所属群组"},"dstat":{"n":"dstat","p":"/dstat","d":"通用的系统资源统计工具"},"watch":{"n":"watch","p":"/watch","d":"可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令"},"ncftp":{"n":"ncftp","p":"/ncftp","d":"是增强的的FTP工具"},"ngrep":{"n":"ngrep","p":"/ngrep","d":"方便的数据包匹配和显示工具"},"umask":{"n":"umask","p":"/umask","d":"用来设置限制新建文件权限的掩码"},"batch":{"n":"batch","p":"/batch","d":"在系统不繁忙的时候执行定时任务"},"nmcli":{"n":"nmcli","p":"/nmcli","d":"地址配置工具"},"nohup":{"n":"nohup","p":"/nohup","d":"将程序以忽略挂起信号的方式运行起来"},"cksum":{"n":"cksum","p":"/cksum","d":"检查文件的CRC是否正确"},"uname":{"n":"uname","p":"/uname","d":"显示Linux系统信息"},"squid":{"n":"squid","p":"/squid","d":"squid服务器守护进程"},"paste":{"n":"paste","p":"/paste","d":"将多个文件按列队列合并"},"patch":{"n":"patch","p":"/patch","d":"为开放源代码软件安装补丁程序"},"split":{"n":"split","p":"/split","d":"分割任意大小的文件"},"pfctl":{"n":"pfctl","p":"/pfctl","d":"PF防火墙的配置命令"},"pgrep":{"n":"pgrep","p":"/pgrep","d":"设置用户的认证信息,包括用户密码、密码过期时间等"},"pidof":{"n":"pidof","p":"/pidof","d":"查找指定名称的进程的进程号ID号"},"pkill":{"n":"pkill","p":"/pkill","d":"可以按照进程名杀死进程"},"spell":{"n":"spell","p":"/spell","d":"对文件进行拼写检查"},"dmesg":{"n":"dmesg","p":"/dmesg","d":"显示Linux系统启动信息"},"unarj":{"n":"unarj","p":"/unarj","d":"解压缩由arj命令创建的压缩包"},"pushd":{"n":"pushd","p":"/pushd","d":"将目录加入命令堆叠中"},"diff3":{"n":"diff3","p":"/diff3","d":"比较3个文件不同的地方"},"dhcpd":{"n":"dhcpd","p":"/dhcpd","d":"运行DHCP服务器。"},"quota":{"n":"quota","p":"/quota","d":"显示磁盘已使用的空间与限制"},"clear":{"n":"clear","p":"/clear","d":"清除当前屏幕终端上的任何信息"},"blkid":{"n":"blkid","p":"/blkid","d":"查看块设备的文件系统类型、LABEL、UUID等信息"},"sleep":{"n":"sleep","p":"/sleep","d":"将目前动作延迟一段时间"},"users":{"n":"users","p":"/users","d":"显示当前登录系统的所有用户"},"rexec":{"n":"rexec","p":"/rexec","d":"运程执行Linux系统下命令 "},"skill":{"n":"skill","p":"/skill","d":"向选定的进程发送信号冻结进程"},"rmdir":{"n":"rmdir","p":"/rmdir","d":"用来删除空目录"},"rmmod":{"n":"rmmod","p":"/rmmod","d":"从运行的内核中移除指定的内核模块"},"route":{"n":"route","p":"/route","d":"显示并设置Linux中静态路由表"},"rpmdb":{"n":"rpmdb","p":"/rpmdb","d":"初始化和重建RPM数据库"},"shopt":{"n":"shopt","p":"/shopt","d":"显示和设置shell操作选项"},"clock":{"n":"clock","p":"/clock","d":"用于调整 RTC 时间。"},"rsync":{"n":"rsync","p":"/rsync","d":"远程数据同步工具"},"unset":{"n":"unset","p":"/unset","d":"删除指定的shell变量或函数"},"unzip":{"n":"unzip","p":"/unzip","d":"用于解压缩由zip命令压缩的压缩包"},"colrm":{"n":"colrm","p":"/colrm","d":"删除文件中的指定列"},"mktemp":{"n":"mktemp","p":"/mktemp","d":"创建临时文件供shell脚本使用"},"strace":{"n":"strace","p":"/strace","d":"跟踪系统调用和信号"},"indent":{"n":"indent","p":"/indent","d":"格式化C语言的源文件"},"mpstat":{"n":"mpstat","p":"/mpstat","d":"显示各个可用CPU的状态"},"mtools":{"n":"mtools","p":"/mtools","d":"显示mtools支持的指令"},"e2fsck":{"n":"e2fsck","p":"/e2fsck","d":"用于检查第二扩展文件系统的完整性"},"ipcalc":{"n":"ipcalc","p":"/ipcalc","d":"简单的IP地址计算器"},"lnstat":{"n":"lnstat","p":"/lnstat","d":"显示Linux系统的网路状态"},"locate":{"n":"locate","p":"/locate","d":"Apache服务器的性能测试工具"},"whatis":{"n":"whatis","p":"/whatis","d":"查询一个命令执行什么功能"},"arping":{"n":"arping","p":"/arping","d":"通过发送ARP协议报文测试网络"},"logger":{"n":"logger","p":"/logger","d":"在系统日志中记录相应条目"},"gunzip":{"n":"gunzip","p":"/gunzip","d":"用来解压缩文件"},"syslog":{"n":"syslog","p":"/syslog","d":"系统默认的日志守护进程"},"startx":{"n":"startx","p":"/startx","d":"用来启动X Window"},"chroot":{"n":"chroot","p":"/chroot","d":"把根目录换成指定的目的目录"},"ulimit":{"n":"ulimit","p":"/ulimit","d":"控制shell程序的资源"},"logout":{"n":"logout","p":"/logout","d":"退出当前登录的Shell"},"bzdiff":{"n":"bzdiff","p":"/bzdiff","d":"直接比较两个.bz2压缩包中文件的不同"},"vmstat":{"n":"vmstat","p":"/vmstat","d":"显示虚拟内存状态"},"sysctl":{"n":"sysctl","p":"/sysctl","d":"时动态地修改内核的运行参数"},"finger":{"n":"finger","p":"/finger","d":"用于查找并显示用户信息"},"chattr":{"n":"chattr","p":"/chattr","d":"用来改变文件属性"},"umount":{"n":"umount","p":"/umount","d":"用于卸载已经加载的文件系统"},"findfs":{"n":"findfs","p":"/findfs","d":"标签或UUID查找文件系统"},"ntsysv":{"n":"ntsysv","p":"/ntsysv","d":"集中管理系统的各种服务"},"swapon":{"n":"swapon","p":"/swapon","d":"激活Linux系统中交换空间"},"hping3":{"n":"hping3","p":"/hping3","d":"测试网络及主机的安全"},"insmod":{"n":"insmod","p":"/insmod","d":"将给定的模块加载到内核中"},"parted":{"n":"parted","p":"/parted","d":"磁盘分区和分区大小调整工具"},"passwd":{"n":"passwd","p":"/passwd","d":"用于让用户可以更改自己的密码"},"telnet":{"n":"telnet","p":"/telnet","d":"登录远程主机和管理"},"export":{"n":"export","p":"/export","d":"设置或显示系统环境变量"},"lpstat":{"n":"lpstat","p":"/lpstat","d":"显示CUPS中打印机的状态信息"},"expand":{"n":"expand","p":"/expand","d":"将文件的制表符转换为空白字符"},"lsattr":{"n":"lsattr","p":"/lsattr","d":"查看文件的第二扩展文件系统属性"},"telint":{"n":"telint","p":"/telint","d":"切换当前正在运行系统的运行等级"},"iptraf":{"n":"iptraf","p":"/iptraf","d":"实时地监视网卡流量"},"ispell":{"n":"ispell","p":"/ispell","d":"检查文件中出现的拼写错误"},"groups":{"n":"groups","p":"/groups","d":"用来打印指定用户所属的工作组"},"printf":{"n":"printf","p":"/printf","d":"格式化并输出结果"},"jwhois":{"n":"jwhois","p":"/jwhois","d":"whois 客户端服务"},"pstack":{"n":"pstack","p":"/pstack","d":"显示每个进程的栈跟踪"},"pstree":{"n":"pstree","p":"/pstree","d":"以树状图的方式展现进程之间的派生关系"},"ifdown":{"n":"ifdown","p":"/ifdown","d":"禁用指定的网络接口"},"bzless":{"n":"bzless","p":"/bzless","d":"增强.bz2压缩包查看器"},"vdfuse":{"n":"vdfuse","p":"/vdfuse","d":"VirtualBox软件挂载VDI分区文件工具"},"pvscan":{"n":"pvscan","p":"/pvscan","d":"扫描系统中所有硬盘的物理卷列表"},"ltrace":{"n":"ltrace","p":"/ltrace","d":"用来跟踪进程调用库函数的情况"},"pwconv":{"n":"pwconv","p":"/pwconv","d":"用来开启用户的投影密码"},"hostid":{"n":"hostid","p":"/hostid","d":"用来打印当前主机的数字化标识"},"bzmore":{"n":"bzmore","p":"/bzmore","d":"查看bzip2压缩过的文本文件的内容"},"uupick":{"n":"uupick","p":"/uupick","d":"命令处理传送进来的文件。"},"source":{"n":"source","p":"/source","d":"在当前Shell环境中从指定文件读取和执行命令,命令返回退出状态。"},"rcconf":{"n":"rcconf","p":"/rcconf","d":"Debian Linux下的运行等级服务配置工具"},"depmod":{"n":"depmod","p":"/depmod","d":"分析可载入模块的相依性"},"accept":{"n":"accept","p":"/accept","d":"指示打印系统接受发往指定目标打印机的打印任务"},"lvscan":{"n":"lvscan","p":"/lvscan","d":"扫描逻辑卷"},"reboot":{"n":"reboot","p":"/reboot","d":"重新启动正在运行的Linux操作系统"},"reject":{"n":"reject","p":"/reject","d":"指示打印系统拒绝发往指定目标打印机的打印任务"},"rename":{"n":"rename","p":"/rename","d":"用字符串替换的方式批量改变文件名"},"renice":{"n":"renice","p":"/renice","d":"修改正在运行的进程的调度优先级"},"resize":{"n":"resize","p":"/resize","d":"命令设置终端机视窗的大小。"},"enable":{"n":"enable","p":"/enable","d":"启动或关闭shell内建命令"},"uucico":{"n":"uucico","p":"/uucico","d":"UUCP文件传输服务程序。"},"iostat":{"n":"iostat","p":"/iostat","d":"监视系统输入输出设备和CPU的使用情况"},"cancel":{"n":"cancel","p":"/cancel","d":"取消已存在的打印任务"},"rlogin":{"n":"rlogin","p":"/rlogin","d":"从当前终端登录到远程Linux主机"},"elinks":{"n":"elinks","p":"/elinks","d":"纯文本界面的WWW浏览器"},"ifstat":{"n":"ifstat","p":"/ifstat","d":"统计网络接口流量状态"},"md5sum":{"n":"md5sum","p":"/md5sum","d":"计算和校验文件报文摘要的工具程序"},"bzgrep":{"n":"bzgrep","p":"/bzgrep","d":"使用正则表达式搜索.bz2压缩包中文件"},"csplit":{"n":"csplit","p":"/csplit","d":"将一个大文件分割成小的碎片文件"},"whoami":{"n":"whoami","p":"/whoami","d":"打印当前有效的用户名称"},"unlink":{"n":"unlink","p":"/unlink","d":"系统调用函数unlink去删除指定的文件"},"hdparm":{"n":"hdparm","p":"/hdparm","d":"显示与设定硬盘的参数"},"mke2fs":{"n":"mke2fs","p":"/mke2fs","d":"创建磁盘分区上的“etc2/etc3”文件系统"},"ftpwho":{"n":"ftpwho","p":"/ftpwho","d":"显示当前每个ftp会话信息"},"ftptop":{"n":"ftptop","p":"/ftptop","d":"proftpd服务器的连接状态"},"uptime":{"n":"uptime","p":"/uptime","d":"查看Linux系统负载信息"},"screen":{"n":"screen","p":"/screen","d":"用于命令行终端切换"},"seinfo":{"n":"seinfo","p":"/seinfo","d":"查询SELinux的策略提供多少相关规则"},"vgscan":{"n":"vgscan","p":"/vgscan","d":"扫描并显示系统中的卷组"},"setsid":{"n":"setsid","p":"/setsid","d":"在新的会话中运行程序。"},"mkswap":{"n":"mkswap","p":"/mkswap","d":"建立和设置SWAP交换分区"},"setpci":{"n":"setpci","p":"/setpci","d":"查询和配置PCI设备的使用工具"},"e2label":{"n":"e2label","p":"/e2label","d":"设置第二扩展文件系统的卷标"},"setfacl":{"n":"setfacl","p":"/setfacl","d":"设置文件访问控制列表"},"command":{"n":"command","p":"/command","d":"调用并执行指定的命令"},"useradd":{"n":"useradd","p":"/useradd","d":"创建的新的系统用户"},"crontab":{"n":"crontab","p":"/crontab","d":"提交和管理用户的需要周期性执行的任务"},"userdel":{"n":"userdel","p":"/userdel","d":"用于删除给定的用户以及与用户相关的文件"},"rpmsign":{"n":"rpmsign","p":"/rpmsign","d":"使用RPM软件包的签名管理工具"},"usermod":{"n":"usermod","p":"/usermod","d":"用于修改用户的基本信息"},"slabtop":{"n":"slabtop","p":"/slabtop","d":"实时显示内核slab内存缓存信息"},"restore":{"n":"restore","p":"/restore","d":"所进行的操作和dump指令相反"},"slocate":{"n":"slocate","p":"/slocate","d":"命令查找文件或目录"},"readelf":{"n":"readelf","p":"/readelf","d":"用于显示elf格式文件的信息"},"declare":{"n":"declare","p":"/declare","d":"声明或显示shell变量"},"quotaon":{"n":"quotaon","p":"/quotaon","d":"激活Linux内核中指定文件系统的磁盘配额功能"},"dirname":{"n":"dirname","p":"/dirname","d":"去除文件名中的非目录部分"},"ppp-off":{"n":"ppp-off","p":"/ppp-off","d":"关闭ppp连线"},"pathchk":{"n":"pathchk","p":"/pathchk","d":"检查文件中不可移植的部分"},"openssl":{"n":"openssl","p":"/openssl","d":"强大的安全套接字层密码库"},"objdump":{"n":"objdump","p":"/objdump","d":"显示二进制文件信息"},"ntpdate":{"n":"ntpdate","p":"/ntpdate","d":"使用网络计时协议(NTP)设置日期和时间"},"ssh-add":{"n":"ssh-add","p":"/ssh-add","d":"把专用密钥添加到ssh-agent的高速缓存中"},"unalias":{"n":"unalias","p":"/unalias","d":"删除由alias设置的别名"},"nologin":{"n":"nologin","p":"/nologin","d":"拒绝用户登录系统"},"volname":{"n":"volname","p":"/volname","d":"显示指定的ISO-9660格式的设备的卷名称"},"nfsstat":{"n":"nfsstat","p":"/nfsstat","d":"列出NFS客户端和服务器的工作状态"},"netstat":{"n":"netstat","p":"/netstat","d":"查看Linux中网络系统状态信息"},"nethogs":{"n":"nethogs","p":"/nethogs","d":"终端下的网络流量监控工具"},"whereis":{"n":"whereis","p":"/whereis","d":"查找二进制程序、代码等相关文件路径"},"service":{"n":"service","p":"/service","d":"控制系统服务的实用工具"},"strings":{"n":"strings","p":"/strings","d":"在对象文件或二进制文件中查找可打印的字符串"},"mkisofs":{"n":"mkisofs","p":"/mkisofs","d":"建立ISO 9660映像文件"},"edquota":{"n":"edquota","p":"/edquota","d":"用于编辑指定用户或工作组磁盘配额"},"ethtool":{"n":"ethtool","p":"/ethtool","d":"显示或修改以太网卡的配置信息"},"swapoff":{"n":"swapoff","p":"/swapoff","d":"关闭指定的交换空间"},"lpadmin":{"n":"lpadmin","p":"/lpadmin","d":"配置CUPS套件中的打印机和类"},"losetup":{"n":"losetup","p":"/losetup","d":"设定与控制循环(loop)设备"},"logsave":{"n":"logsave","p":"/logsave","d":"将命令的输出信息保存到指定的日志文件"},"logname":{"n":"logname","p":"/logname","d":"用来显示用户名称"},"systool":{"n":"systool","p":"/systool","d":"显示基于总线、类和拓扑显示系统中设备的信息"},"ftpshut":{"n":"ftpshut","p":"/ftpshut","d":"在指定的时间关闭FTP服务器"},"lftpget":{"n":"lftpget","p":"/lftpget","d":"调用lftp指令下载指定的文件"},"lastlog":{"n":"lastlog","p":"/lastlog","d":"显示系统中所有用户最近一次登录信息"},"killall":{"n":"killall","p":"/killall","d":"使用进程的名称来杀死一组进程"},"tcpdump":{"n":"tcpdump","p":"/tcpdump","d":"一款sniffer工具,是Linux上的抓包工具,嗅探器。"},"builtin":{"n":"builtin","p":"/builtin","d":"执行shell内部命令"},"gpasswd":{"n":"gpasswd","p":"/gpasswd","d":"Linux下工作组文件的管理工具"},"apt-key":{"n":"apt-key","p":"/apt-key","d":"管理Debian Linux系统中的软件包密钥"},"apt-get":{"n":"apt-get","p":"/apt-get","d":"Debian Linux发行版中的APT软件包管理工具"},"bunzip2":{"n":"bunzip2","p":"/bunzip2","d":"创一个bz2文件压缩包"},"apropos":{"n":"apropos","p":"/apropos","d":"在 whatis 数据库中查找字符串"},"grpconv":{"n":"grpconv","p":"/grpconv","d":"用来开启群组的投影密码"},"install":{"n":"install","p":"/install","d":"安装或升级软件或备份数据"},"zipinfo":{"n":"zipinfo","p":"/zipinfo","d":"用来列出压缩文件信息"},"hwclock":{"n":"hwclock","p":"/hwclock","d":"显示与设定硬件时钟"},"hexdump":{"n":"hexdump","p":"/hexdump","d":"显示文件十六进制格式"},"history":{"n":"history","p":"/history","d":"用于显示历史命令"},"diffstat":{"n":"diffstat","p":"/diffstat","d":"显示diff命令输出信息的柱状图"},"pvchange":{"n":"pvchange","p":"/pvchange","d":"修改物理卷属性"},"updatedb":{"n":"updatedb","p":"/updatedb","d":"创建或更新slocate命令所必需的数据库文件"},"arpwatch":{"n":"arpwatch","p":"/arpwatch","d":"监听网络上ARP的记录"},"pvcreate":{"n":"pvcreate","p":"/pvcreate","d":"将物理硬盘分区初始化为物理卷"},"basename":{"n":"basename","p":"/basename","d":"打印目录或者文件的基本名称"},"pvremove":{"n":"pvremove","p":"/pvremove","d":"删除一个存在的物理卷"},"dhcrelay":{"n":"dhcrelay","p":"/dhcrelay","d":"使用dhcrelay命令可以提供中继DHCP和BOOTP请求"},"ldconfig":{"n":"ldconfig","p":"/ldconfig","d":"动态链接库管理命令"},"shutdown":{"n":"shutdown","p":"/shutdown","d":"用来执行系统关机的命令"},"zipsplit":{"n":"zipsplit","p":"/zipsplit","d":"将较大的zip压缩包分割成各个较小的压缩包"},"mkinitrd":{"n":"mkinitrd","p":"/mkinitrd","d":"建立要载入ramdisk的映像文件"},"logwatch":{"n":"logwatch","p":"/logwatch","d":"可定制和可插入式的日志监视系统"},"pwunconv":{"n":"pwunconv","p":"/pwunconv","d":"用来关闭用户的投影密码"},"groupmod":{"n":"groupmod","p":"/groupmod","d":"更改群组识别码或名称"},"unexpand":{"n":"unexpand","p":"/unexpand","d":"将文件的空白字符转换为制表符"},"groupdel":{"n":"groupdel","p":"/groupdel","d":"用于删除指定的工作组"},"quotaoff":{"n":"quotaoff","p":"/quotaoff","d":"关闭Linux内核中指定文件系统的磁盘配额功能"},"nslookup":{"n":"nslookup","p":"/nslookup","d":"查询域名DNS信息的工具"},"lvcreate":{"n":"lvcreate","p":"/lvcreate","d":"用于创建LVM的逻辑卷"},"modprobe":{"n":"modprobe","p":"/modprobe","d":"自动处理可载入模块"},"groupadd":{"n":"groupadd","p":"/groupadd","d":"用于创建一个新的工作组"},"lvextend":{"n":"lvextend","p":"/lvextend","d":"扩展逻辑卷空间"},"readonly":{"n":"readonly","p":"/readonly","d":"定义只读shell变量或函数"},"lvreduce":{"n":"lvreduce","p":"/lvreduce","d":"收缩逻辑卷空间"},"lvremove":{"n":"lvremove","p":"/lvremove","d":"删除指定LVM逻辑卷"},"vgrename":{"n":"vgrename","p":"/vgrename","d":"使用vgrename命令可以重命名卷组的名称。"},"htdigest":{"n":"htdigest","p":"/htdigest","d":"Apache服务器内置工具"},"repquota":{"n":"repquota","p":"/repquota","d":"报表的格式输出磁盘空间限制的状态"},"xlsfonts":{"n":"xlsfonts","p":"/xlsfonts","d":"列出X Server使用的字体"},"chpasswd":{"n":"chpasswd","p":"/chpasswd","d":"批量更新用户口令的工具"},"aptitude":{"n":"aptitude","p":"/aptitude","d":"Debian Linux系统中软件包管理工具"},"ftpcount":{"n":"ftpcount","p":"/ftpcount","d":"显示目前已FTP登入的用户人数"},"vgremove":{"n":"vgremove","p":"/vgremove","d":"用于用户删除LVM卷组"},"exportfs":{"n":"exportfs","p":"/exportfs","d":"管理NFS共享文件系统列表"},"hostname":{"n":"hostname","p":"/hostname","d":"显示和设置系统的主机名"},"blockdev":{"n":"blockdev","p":"/blockdev","d":"从命令行调用区块设备控制程序"},"dpkg-deb":{"n":"dpkg-deb","p":"/dpkg-deb","d":"Debian Linux下的软件包管理工具"},"dos2unix":{"n":"dos2unix","p":"/dos2unix","d":"将DOS格式文本文件转换成Unix格式"},"mailstat":{"n":"mailstat","p":"/mailstat","d":"显示到达的邮件状态"},"vgreduce":{"n":"vgreduce","p":"/vgreduce","d":"从卷组中删除物理卷"},"htpasswd":{"n":"htpasswd","p":"/htpasswd","d":"apache服务器创建密码认证文件"},"rpm2cpio":{"n":"rpm2cpio","p":"/rpm2cpio","d":"将RPM软件包转换为cpio格式的文件"},"rpmbuild":{"n":"rpmbuild","p":"/rpmbuild","d":"创建RPM的二进制软件包和源码软件包"},"bmodinfo":{"n":"bmodinfo","p":"/bmodinfo","d":"显示给定模块的详细信息"},"vgextend":{"n":"vgextend","p":"/vgextend","d":"向卷组中添加物理卷"},"rpmquery":{"n":"rpmquery","p":"/rpmquery","d":"从RPM数据库中查询软件包信息"},"cdrecord":{"n":"cdrecord","p":"/cdrecord","d":"Linux系统下光盘刻录功能命令"},"vgcreate":{"n":"vgcreate","p":"/vgcreate","d":"用于创建LVM卷组"},"poweroff":{"n":"poweroff","p":"/poweroff","d":"关闭Linux系统,关闭记录会被写入到/var/log/wtmp日志文件中。"},"iptables":{"n":"iptables","p":"/iptables","d":"Linux上常用的防火墙软件"},"xlsatoms":{"n":"xlsatoms","p":"/xlsatoms","d":"列出X服务器内部所有定义的原子成分"},"runlevel":{"n":"runlevel","p":"/runlevel","d":"打印当前Linux系统的运行等级"},"ifconfig":{"n":"ifconfig","p":"/ifconfig","d":"配置和显示Linux系统网卡的网络参数"},"protoize":{"n":"protoize","p":"/protoize","d":"GNU-C代码转换为ANSI-C代码"},"mii-tool":{"n":"mii-tool","p":"/mii-tool","d":"配置网络设备协商方式的工具"},"tempfile":{"n":"tempfile","p":"/tempfile","d":"shell中给临时文件命名"},"compress":{"n":"compress","p":"/compress","d":"使用Lempress-Ziv编码压缩数据文件"},"vgchange":{"n":"vgchange","p":"/vgchange","d":"修改卷组属性"},"semanage":{"n":"semanage","p":"/semanage","d":"默认目录的安全上下文查询与修改"},"sendmail":{"n":"sendmail","p":"/sendmail","d":"著名电子邮件服务器"},"newusers":{"n":"newusers","p":"/newusers","d":"用于批处理的方式一次创建多个命令"},"iptstate":{"n":"iptstate","p":"/iptstate","d":"显示iptables的工作状态"},"sesearch":{"n":"sesearch","p":"/sesearch","d":"查询SELinux策略的规则详情"},"lvresize":{"n":"lvresize","p":"/lvresize","d":"调整逻辑卷空间大小"},"dhclient":{"n":"dhclient","p":"/dhclient","d":"动态获取或释放IP地址"},"tracepath":{"n":"tracepath","p":"/tracepath","d":"追踪目的主机经过的路由信息"},"grpunconv":{"n":"grpunconv","p":"/grpunconv","d":"用来关闭群组的投影密码"},"tcpreplay":{"n":"tcpreplay","p":"/tcpreplay","d":"将PCAP包重新发送,用于性能或者功能测试"},"systemctl":{"n":"systemctl","p":"/systemctl","d":"系统服务管理器指令"},"chkconfig":{"n":"chkconfig","p":"/chkconfig","d":"检查或设置系统的各种服务"},"apachectl":{"n":"apachectl","p":"/apachectl","d":"Apache服务器前端控制工具"},"ip6tables":{"n":"ip6tables","p":"/ip6tables","d":"linux中防火墙软件"},"getsebool":{"n":"getsebool","p":"/getsebool","d":"查询SElinux策略内各项规则的布尔值"},"ssh-agent":{"n":"ssh-agent","p":"/ssh-agent","d":"ssh密钥管理器"},"logrotate":{"n":"logrotate","p":"/logrotate","d":"统日志进行轮转、压缩和删除"},"lvdisplay":{"n":"lvdisplay","p":"/lvdisplay","d":"显示逻辑卷属性"},"mysqldump":{"n":"mysqldump","p":"/mysqldump","d":"MySQL数据库中备份工具"},"smbpasswd":{"n":"smbpasswd","p":"/smbpasswd","d":"samba用户和密码管理工具"},"smbclient":{"n":"smbclient","p":"/smbclient","d":"交互方式访问samba服务器"},"showmount":{"n":"showmount","p":"/showmount","d":"显示NFS服务器加载的信息"},"mysqlshow":{"n":"mysqlshow","p":"/mysqlshow","d":"显示MySQL中数据库相关信息"},"clockdiff":{"n":"clockdiff","p":"/clockdiff","d":"检测两台linux主机的时间差"},"arptables":{"n":"arptables","p":"/arptables","d":"管理ARP包过滤规则表"},"setsebool":{"n":"setsebool","p":"/setsebool","d":"修改SElinux策略内各项规则的布尔值"},"badblocks":{"n":"badblocks","p":"/badblocks","d":"查找磁盘中损坏的区块"},"vgdisplay":{"n":"vgdisplay","p":"/vgdisplay","d":"显示LVM卷组的信息"},"rpmverify":{"n":"rpmverify","p":"/rpmverify","d":"验证已安装的RPM软件包的正确性"},"dmidecode":{"n":"dmidecode","p":"/dmidecode","d":"在Linux系统下获取有关硬件方面的信息"},"vgconvert":{"n":"vgconvert","p":"/vgconvert","d":"转换卷组元数据格式"},"dircolors":{"n":"dircolors","p":"/dircolors","d":"置ls命令在显示目录或文件时所用的色彩"},"pvdisplay":{"n":"pvdisplay","p":"/pvdisplay","d":"显示物理卷的属性"},"partprobe":{"n":"partprobe","p":"/partprobe","d":"不重启的情况下重读分区"},"quotacheck":{"n":"quotacheck","p":"/quotacheck","d":"检查磁盘的使用空间与限制"},"cupsenable":{"n":"cupsenable","p":"/cupsenable","d":"启动指定的打印机"},"usernetctl":{"n":"usernetctl","p":"/usernetctl","d":"被允许时操作指定的网络接口"},"ssh-keygen":{"n":"ssh-keygen","p":"/ssh-keygen","d":"为ssh生成、管理和转换认证密钥"},"xlsclients":{"n":"xlsclients","p":"/xlsclients","d":"列出显示器中的客户端应用程序"},"getenforce":{"n":"getenforce","p":"/getenforce","d":"显示当前SELinux的应用模式,是强制、执行还是停用。"},"domainname":{"n":"domainname","p":"/domainname","d":"显示和设置系统的NIS域名"},"get_module":{"n":"get_module","p":"/get_module","d":"获取Linux内核模块的详细信息"},"traceroute":{"n":"traceroute","p":"/traceroute","d":"显示数据包到主机间的路径"},"mkbootdisk":{"n":"mkbootdisk","p":"/mkbootdisk","d":"可建立目前系统的启动盘"},"dpkg-query":{"n":"dpkg-query","p":"/dpkg-query","d":"Debian Linux中软件包的查询工具"},"mysqladmin":{"n":"mysqladmin","p":"/mysqladmin","d":"MySQL服务器管理客户端"},"dpkg-split":{"n":"dpkg-split","p":"/dpkg-split","d":"Debian Linux中将大软件包分割成小包"},"restorecon":{"n":"restorecon","p":"/restorecon","d":"恢复文件的安全上下文"},"unprotoize":{"n":"unprotoize","p":"/unprotoize","d":"删除C语言源代码文件中的函数原型"},"uncompress":{"n":"uncompress","p":"/uncompress","d":"用来解压.Z文件"},"squidclient":{"n":"squidclient","p":"/squidclient","d":"squid服务器的客户端管理工具"},"cupsdisable":{"n":"cupsdisable","p":"/cupsdisable","d":"停止指定的打印机"},"consoletype":{"n":"consoletype","p":"/consoletype","d":"输出已连接的终端类型"},"mysqlimport":{"n":"mysqlimport","p":"/mysqlimport","d":"为MySQL服务器用命令行方式导入数据"},"inotifywait":{"n":"inotifywait","p":"/inotifywait","d":"异步文件系统监控机制"},"ssh-keyscan":{"n":"ssh-keyscan","p":"/ssh-keyscan","d":"收集主机公钥的使用工具"},"lsb_release":{"n":"lsb_release","p":"/lsb_release","d":"显示发行版本信息"},"sftp-server":{"n":"sftp-server","p":"/sftp-server","d":"sftp协议的服务器端程序"},"ssh-copy-id":{"n":"ssh-copy-id","p":"/ssh-copy-id","d":"把本地的ssh公钥文件安装到远程主机对应的账户下"},"dpkg-divert":{"n":"dpkg-divert","p":"/dpkg-divert","d":"Debian Linux中创建并管理一个转向列表"},"dpkg-trigger":{"n":"dpkg-trigger","p":"/dpkg-trigger","d":"Debian Linux下的软件包触发器"},"firewall-cmd":{"n":"firewall-cmd","p":"/firewall-cmd","d":"Linux上新用的防火墙软件,跟iptables差不多的工具。"},"convertquota":{"n":"convertquota","p":"/convertquota","d":"把老的配额文件转换为新的格式"},"apt-sortpkgs":{"n":"apt-sortpkgs","p":"/apt-sortpkgs","d":"Debian Linux下对软件包索引文件进行排序的工具"},"bzip2recover":{"n":"bzip2recover","p":"/bzip2recover","d":"恢复被破坏的.bz2压缩包中的文件"},"ypdomainname":{"n":"ypdomainname","p":"/ypdomainname","d":"显示主机的NIS的域名"},"kernelversion":{"n":"kernelversion","p":"/kernelversion","d":"打印当前内核的主版本号"},"nisdomainname":{"n":"nisdomainname","p":"/nisdomainname","d":"显示主机NIS的域名"},"iptables-save":{"n":"iptables-save","p":"/iptables-save","d":"备份iptables的表配置"},"speedtest-cli":{"n":"speedtest-cli","p":"/speedtest-cli","d":"命令行下测试服务器外网速度"},"dnsdomainname":{"n":"dnsdomainname","p":"/dnsdomainname","d":"定义DNS系统中FQDN名称的域名"},"ip6tables-save":{"n":"ip6tables-save","p":"/ip6tables-save","d":"保存ip6tables表配置"},"named-checkzone":{"n":"named-checkzone","p":"/named-checkzone","d":"使用named-checkzone命令可以进行区域文件有效性检查和转换,必须指定区域名称和区域文件名称。"},"iptables-restore":{"n":"iptables-restore","p":"/iptables-restore","d":"还原iptables表的配置"},"dpkg-reconfigure":{"n":"dpkg-reconfigure","p":"/dpkg-reconfigure","d":"Debian Linux中重新配制一个已经安装的软件包"},"dpkg-preconfigure":{"n":"dpkg-preconfigure","p":"/dpkg-preconfigure","d":"Debian Linux中软件包安装之前询问问题"},"ip6tables-restore":{"n":"ip6tables-restore","p":"/ip6tables-restore","d":"还原ip6tables表"},"dpkg-statoverride":{"n":"dpkg-statoverride","p":"/dpkg-statoverride","d":"Debian Linux中覆盖文件的所有权和模式"}} \ No newline at end of file From 49df2042f30d01837d525082092ae52ab299cd40 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Fri, 9 Mar 2018 09:26:41 +0800 Subject: [PATCH 0156/1284] Update .npmignore --- .npmignore | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.npmignore b/.npmignore index 8be8281f9fc..a6584424835 100644 --- a/.npmignore +++ b/.npmignore @@ -1,10 +1,8 @@ +assets build/ +command node_modules/ -.deploy template/ +.deploy .DS_Store -qr.png .gitattributes -Linux.gif -alfred.png -command From 9bcd386b47c5030b4ecbcfb9dc77d60d3c2c0cde Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Fri, 9 Mar 2018 09:26:58 +0800 Subject: [PATCH 0157/1284] released v1.0.6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 752cf468d61..761d6fb602c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "linux-command", - "version": "1.0.5", + "version": "1.0.6", "description": "Linux Command", "main": "dist/data.json", "scripts": { From f5e992e58ab6c6d31c72e06e4d98880ba445efed Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Tue, 13 Mar 2018 09:51:23 +0800 Subject: [PATCH 0158/1284] Updatee compile html. --- build/compile.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build/compile.js b/build/compile.js index 43314694d90..dc5a6eae03a 100644 --- a/build/compile.js +++ b/build/compile.js @@ -110,7 +110,8 @@ CreateDatajs('./.deploy/js/dt.js',function(dt_path,arr){ arr.forEach(function(itm,idx){ var ejstpm = path.join('/template/',itm.p); var md_path = path.join('/command',itm.p); - var dep = path.join('/.deploy/c',itm.p); + var dep = path.join('/.deploy/c',itm.p); + itm.command_length = arr.length; ReadTmpToHTML('/template/details.ejs', dep+'.html' ,md_path+'.md', itm ,arr) }); From 5aaf1eb2e028da270210574b2b6867ba3f0c0426 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Thu, 3 May 2018 00:21:01 +0800 Subject: [PATCH 0159/1284] Update git.md --- command/git.md | 980 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 979 insertions(+), 1 deletion(-) diff --git a/command/git.md b/command/git.md index 37db9622460..58738ae714a 100644 --- a/command/git.md +++ b/command/git.md @@ -113,5 +113,983 @@ $ git clone ftp[s]://example.com/path/to/repo.git/ $ git clone rsync://example.com/path/to/repo.git/ ``` +## 配置 - \ No newline at end of file +首先是配置帐号信息 `ssh -T git@github.com` 测试。 + +## 修改项目中的个人信息 + +```bash +git help config # 获取帮助信息,查看修改个人信息的参数 +git config --global user.name "小弟调调" # 修改全局名字 +git config --global user.email "wowohoo@qq.com" # 修改全局邮箱 +git config --list # 查看配置的信息 +``` + +### 配置自动换行 + +自动转换坑太大,提交到git是自动将换行符转换为lf + +```bash +git config --global core.autocrlf input +``` + +## 常见使用场景 + +### 创建SSH密钥 + +这个密钥用来跟 github 通信,在本地终端里生成然后上传到 github + +```bash +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 # 测试是否成功 +``` + +### 多账号ssh配置 + +**1.生成指定名字的密钥** + +`ssh-keygen -t rsa -C "邮箱地址" -f ~/.ssh/jslite_rsa` +会生成 `jslite_rsa` 和 `jslite_rsa.pub` 这两个文件 + +**2.密钥复制到托管平台上** + +`vim ~/.ssh/jslite_rsa.pub` +打开公钥文件 `jslite_rsa.pub` ,并把内容复制至代码托管平台上 + +**3.修改config文件** + +`vim ~/.ssh/config` #修改config文件,如果没有创建 `config` + +```shell +Host jslite.github.com + HostName github.com + User git + IdentityFile ~/.ssh/jslite_rsa + +Host work.github.com + HostName github.com + # Port 服务器open-ssh端口(默认:22,默认时一般不写此行) + # PreferredAuthentications 配置登录时用什么权限认证 + # publickey|password publickey|keyboard-interactive等 + User git + IdentityFile ~/.ssh/work_rsa +``` + +- `Host` 这里是个别名可以随便命名 +- `HostName` 一般是网站如:`git@ss.github.com:username/repo.git` 填写 `github.com` +- `User` 通常填写`git` +- `IdentityFile` 使用的公钥文件地址 + +**4.测试** + +```bash +ssh -T git@jslite.github.com # `@`后面跟上定义的Host +ssh -T work.github.com # 通过别名测试 +ssh -i ~/公钥文件地址 Host别名 # 如 ssh -i ~/.ssh/work_rsa work.github.com +``` + +**5.使用** + +```bash +# 原来的写法 +git clone git@github.com:/learngit.git +# 现在的写法 +git clone git@jslite.github.com:/learngit.git +git clone git@work.github.com:/learngit.git +``` + +**5.注意** + +如果你修改了id_rsa的名字,你需要将ssh key添加到SSH agent中,如: + +```bash +ssh-add ~/.ssh/jslite_rsa +ssh-add -l # 查看所有的key +ssh-add -D # 删除所有的key +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 # 这里需要输入密码一次 +``` + +编辑 `~/.ssh/config` + +```bash +Host aliyun1 + HostName 192.168.182.112 + User root + PreferredAuthentications publickey + IdentityFile ~/.ssh/aliyunserver.key +``` + +上面配置完了,可以通过命令登录,不需要输入IP地址和密码 `ssh aliyun1` + +### https协议下提交代码免密码 + +```bash +git clone https://github.com/username/rep.git +``` + +通过上面方式克隆可能需要密码,解决办法:进入当前克隆的项目 `vi rep/.git/config` 编辑 `config`, 按照下面方式修改,你就可以提交代码不用输入密码了。 + +```diff +[core] + 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/* +[branch "master"] + remote = origin + merge = refs/heads/master +``` + +### 文件推向3个git库 + +**1. 增加3个远程库地址** + +```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 +``` + +**2. 删除其中一个 set-url 地址** + +```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` + +**3.推送代码** + +```bash +git push origin master +git push -f origin master # 强制推送 +``` + +**4.拉代码** + +只能拉取 `origin` 里的一个url地址,这个fetch-url +默认为你添加的到 `origin`的第一个地址 + +```shell +git pull origin master +git pull --all # 获取远程所有内容包括tag +git pull origin next:master # 取回origin主机的next分支,与本地的master分支合并 +git pull origin next # 远程分支是与当前分支合并 + +# 上面一条命令等同于下面两条命令 +git fetch origin +git merge origin/next +``` + +如果远程主机删除了某个分支,默认情况下,git pull 不会在拉取远程分支的时候,删除对应的本地分支。这是为了防止,由于其他人操作了远程主机,导致git pull不知不觉删除了本地分支。 +但是,你可以改变这个行为,加上参数 -p 就会在本地删除远程已经删除的分支。 + +```shell +$ git pull -p +# 等同于下面的命令 +$ git fetch --prune origin +$ git fetch -p +``` + +**5.更改pull** + +只需要更改config文件里,那三个url的顺序即可,fetch-url会直接对应排行第一的那个utl连接。 + + +### 修改远程仓库地址 + +```bash +git remote remove origin # 删除该远程路径 +git remote add origin git@jslite.github.com:JSLite/JSLite.git # 添加远程路径 +``` + +### 撤销远程记录 + +```shell +git reset --hard HEAD~1 # 撤销一条记录 +git push -f origin HEAD:master # 同步到远程仓库 +``` + +### 放弃本地的文件修改 + +```shell +git reset --hard FETCH_HEAD # FETCH_HEAD表示上一次成功git pull之后形成的commit点。然后git pull +``` + +`git reset --hard FETCH_HEAD` 出现错误 + +```bash +git pull +You are not currently on a branch, so I cannot use any +'branch..merge' in your configuration file. +Please specify which remote branch you want to use on the command +line and try again (e.g. 'git pull '). +See git-pull(1) FOR details. +``` + +解决方法: + +```bash +git checkout -b temp # 新建+切换到temp分支 +git checkout master +``` + +### 最简单放弃本地修改内容 + +```bash +# 如果有的修改以及加入暂存区的话 +git reset --hard +# 还原所有修改,不会删除新增的文件 +git checkout . +# 下面命令会删除新增的文件 +git clean -xdf +``` + +通过存储暂存区stash,在删除暂存区的方法放弃本地修改。 + +```bash +git stash && git stash drop +``` + +### 回滚到某个commit提交 + +```shell +git revert HEAD~1 # 撤销一条记录 会弹出 commit 编辑 +git push # 提交回滚 +``` + + +### 回退到某一个版本 + +```bash +git reset --hard +# 例如 git reset --hard a3hd73r +# --hard代表丢弃工作区的修改,让工作区与版本代码一模一样,与之对应, +# --soft参数代表保留工作区的修改。 +``` + +### 去掉某个commit + +```bash +# 实质是新建了一个与原来完全相反的commit,抵消了原来commit的效果 +git revert +``` + +### 新建一个空分支 + +```bash +# 这种方式新建的分支(gh-pages)是没有 commit 记录的 +git checkout --orphan gh-pages +# 删除新建的gh-pages分支原本的内容,如果不删除,提交将作为当前分支的第一个commit +git rm -rf . +# 查看一下状态 有可能上面一条命令,没有删除还没有提交的的文件 +git state +``` + +### 合并多个commit + +```bash +# 这个命令,将最近4个commit合并为1个,HEAD代表当前版本。 +# 将进入VIM界面,你可以修改提交信息。 +git rebase -i HEAD~4 +# 可以看到其中分为两个部分,上方未注释的部分是填写要执行的指令, +# 而下方注释的部分则是指令的提示说明。指令部分中由前方的命令名称、commit hash 和 commit message 组成 +# 当前我们只要知道 pick 和 squash 这两个命令即可。 +# --> pick 的意思是要会执行这个 commit +# --> squash 的意思是这个 commit 会被合并到前一个commit + +# 我们将 需要保留的 这个 commit 前方的命令改成 squash 或 s,然后输入:wq以保存并退出 +# 这是我们会看到 commit message 的编辑界面 + +# 其中, 非注释部分就是两次的 commit message, 你要做的就是将这两个修改成新的 commit message。 +# +# 输入wq保存并推出, 再次输入git log查看 commit 历史信息,你会发现这两个 commit 已经合并了。 +# 将修改强制推送到前端 +git push -f origin master +``` + +### 修改远程Commit记录 + +```bash +git commit --amend +# amend只能修改没有提交到线上的,最后一次commit记录 +git rebase -i HEAD~3 +# 表示要修改当前版本的倒数第三次状态 +# 将要更改的记录行首单词 pick 改为 edit +pick 96dc3f9 doc: Update quick-start.md +pick f1cce8a test(Transition):Add transition test (#47) +pick 6293516 feat(Divider): Add Divider component. +# Rebase eeb03a4..6293516 onto eeb03a4 (3 commands) +# +# Commands: +# p, pick = use commit +# r, reword = use commit, but edit the commit message +# e, edit = use commit, but stop for amending +# s, squash = use commit, but meld into previous commit +# f, fixup = like "squash", but discard this commit's log message +# x, exec = run command (the rest of the line) using shell +# d, drop = remove commit +``` + +保存并退出,会弹出下面提示 + +```bash +# You can amend the commit now, with +# +# git commit --amend +# +# Once you are satisfied with your changes, run +# +# git rebase --continue + +# 通过这条命令进入编辑页面更改commit,保存退出 +git commit --amend +# 保存退出确认修改,继续执行 rebase, +git rebase --continue +# 如果修改多条记录反复执行上面两条命令直到完成所有修改 + +# 最后,确保别人没有提交进行push,最好不要加 -f 强制推送 +git push -f origin master +``` + + + +### 添加忽略文件 + +``` +echo node_modules/ >> .gitignore +``` + +### 利用commit关闭一个issue + +这个功能在Github上可以玩儿,Gitlab上特别老的版本不能玩儿哦,那么如何跟随着commit关闭一个issue呢? 在confirm merge的时候可以使用一下命令来关闭相关issue: + +`fixes #xxx`、 `fixed #xxx`、 `fix #xxx`、 `closes #xxx`、 `close #xxx`、 `closed #xxx`、 + +### 同步fork的上游仓库 + +[Github教程同步fork教程](https://help.github.com/articles/syncing-a-fork/),[在Github上同步一个分支(fork)](http://www.miss77.net/549.html) + +**设置添加多个远程仓库地址。** + +在同步之前,需要创建一个远程点指向上游仓库(repo).如果你已经派生了一个原始仓库,可以按照如下方法做。 + +```shell +$ git remote -v +# List the current remotes (列出当前远程仓库) +# origin https://github.com/user/repo.git (fetch) +# origin https://github.com/user/repo.git (push) +$ git remote add upstream https://github.com/otheruser/repo.git +# Set a new remote (设置一个新的远程仓库) +$ git remote -v +# Verify new remote (验证新的原唱仓库) +# origin https://github.com/user/repo.git (fetch) +# origin https://github.com/user/repo.git (push) +# upstream https://github.com/otheruser/repo.git (fetch) +# upstream https://github.com/otheruser/repo.git (push) +``` + +**同步更新仓库内容** + +同步上游仓库到你的仓库需要执行两步:首先你需要从远程拉去,之后你需要合并你希望的分支到你的本地副本分支。从上游的存储库中提取分支以及各自的提交内容。 `master` 将被存储在本地分支机构 `upstream/master` + +```shell +git fetch upstream +# remote: Counting objects: 75, done. +# remote: Compressing objects: 100% (53/53), done. +# remote: Total 62 (delta 27), reused 44 (delta 9) +# Unpacking objects: 100% (62/62), done. +# From https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY +# * [new branch] master -> upstream/master +``` + +检查你的 fork's 本地 `master` 分支 + +```shell +git checkout master +# Switched to branch 'master' +``` + +合并来自 `upstream/master` 的更改到本地 master 分支上。 这使你的前 fork's `master` 分支与上游资源库同步,而不会丢失你本地修改。 + +```shell +git merge upstream/master +# Updating a422352..5fdff0f +# Fast-forward +# README | 9 ------- +# README.md | 7 ++++++ +# 2 files changed, 7 insertions(+), 9 deletions(-) +# delete mode 100644 README +# create mode 100644 README.md +``` + + +### 批量修改历史commit中的名字和邮箱 + +**1.克隆仓库** + +注意参数,这个不是普通的clone,clone下来的仓库并不能参与开发 + +```bash +git clone --bare https://github.com/user/repo.git +cd repo.git +``` + +**2.命令行中运行代码** + +OLD_EMAIL原来的邮箱 +CORRECT_NAME更正的名字 +CORRECT_EMAIL更正的邮箱 + +将下面代码复制放到命令行中执行 + +```bash +git filter-branch -f --env-filter ' +OLD_EMAIL="wowohoo@qq.com" +CORRECT_NAME="小弟调调" +CORRECT_EMAIL="更正的邮箱@qq.com" +if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ] +then + export GIT_COMMITTER_NAME="$CORRECT_NAME" + export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL" +fi +if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ] +then + export GIT_AUTHOR_NAME="$CORRECT_NAME" + export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL" +fi +' --tag-name-filter cat -- --branches --tags +``` + +执行过程 + +```bash +Rewrite 160d4df2689ff6df3820563bfd13b5f1fb9ba832 (479/508) (16 seconds passed, remaining 0 predicted) +Ref 'refs/heads/dev' was rewritten +Ref 'refs/heads/master' was rewritten +``` + +**3.同步到远程仓库** + +同步到push远程git仓库 + +```bash +git push --force --tags origin 'refs/heads/*' +``` + +我还遇到了如下面错误,lab默认给master分支加了保护,不允许强制覆盖。`Project(项目)`->`Setting`->`Repository` 菜单下面的`Protected branches`把master的保护去掉就可以了。修改完之后,建议把master的保护再加回来,毕竟强推不是件好事。 + +```bash +remote: GitLab: You are not allowed to force push code to a protected branch on this project. +``` + +当上面的push 不上去的时候,先 `git pull` 确保最新代码 + +```bash +git pull --allow-unrelated-histories +# 或者指定分枝 +git pull origin master --allow-unrelated-histories +``` + + +### 查看某个文件历史 + +```shell +git log --pretty=oneline 文件名 # 列出文件的所有改动历史 +git show c178bf49 # 某次的改动的修改记录 +git log -p c178bf49 # 某次的改动的修改记录 +git blame 文件名 # 显示文件的每一行是在那个版本最后修改。 +git whatchanged 文件名 # 显示某个文件的每个版本提交信息:提交日期,提交人员,版本号,提交备注(没有修改细节) +``` + +### 打造自己的git命令 + +```sh +git config --global alias.st status +git config --global alias.br branch +git config --global alias.co checkout +git config --global alias.ci commit +``` + +配置好后再输入git命令的时候就不用再输入一大段了,例如我们要查看状态,只需: + +```sh +git st +``` + +### 中文乱码的解决方案 + +```bash +git config --global core.quotepath false +``` + +## 新建仓库 + +### init + +`git init` #初始化 + +### status + +`git status` #获取状态 + +### add + +`git add file` # .或*代表全部添加 +`git rm --cached ` # 在commit之前撤销git add操作 +`git reset head` # 好像比上面`git rm --cached`更方便 + +### commit + +`git commit -m "message"` #此处注意乱码 + +### remote + +`git remote add origin git@github.com:JSLite/test.git` #添加源 + +### push + +```bash +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协议还有另一种写法。 + +git clone支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等,下面是一些例子。`git clone <版本库的网址> <本地目录名>` + +```shell +$ git clone http[s]://example.com/path/to/repo.git/ +$ git clone ssh://example.com/path/to/repo.git/ +$ git clone git://example.com/path/to/repo.git/ +$ git clone /opt/git/project.git +$ git clone file:///opt/git/project.git +$ git clone ftp[s]://example.com/path/to/repo.git/ +$ git clone rsync://example.com/path/to/repo.git/ +``` + +## 本地 + +### help + +```bash +git help config # 获取帮助信息 +``` + +### add + +```shell +git add * # 跟踪新文件 +git add -u [path] # 添加[指定路径下]已跟踪文件 +``` + +### rm + +```shell +rm *&git rm * # 移除文件 +git rm -f * # 移除文件 +git rm --cached * # 取消跟踪 +git mv file_from file_to # 重命名跟踪文件 +git log # 查看提交记录 +``` + +### commit + +```shell +git commit #提交更新 +git commit -m 'message' #提交说明 +git commit -a #跳过使用暂存区域,把所有已经跟踪过的文件暂存起来一并提交 +git commit --amend #修改最后一次提交 +git commit log #查看所有提交,包括没有push的commit +git commit -m "#133" #关联issue 任意位置带上# 符号加上issue号码 +git commit -m "fix #133" commit关闭issue +git commit -m '概要描述'$'\n\n''1.详细描述'$'\n''2.详细描述' #提交简要描述和详细描述 +``` + +### reset + +```shell +git reset HEAD * # 取消已经暂存的文件 +git reset --mixed HEAD * # 同上 +git reset --soft HEAD * # 重置到指定状态,不会修改索引区和工作树 +git reset --hard HEAD * # 重置到指定状态,会修改索引区和工作树 +git reset -- files * # 重置index区文件 +``` + +### revert + +```shell +git revert HEAD # 撤销前一次操作 +git revert HEAD~ # 撤销前前一次操作 +git revert commit # 撤销指定操作 +``` + +### checkout + +```shell +git checkout -- file # 取消对文件的修改(从暂存区——覆盖worktree file) +git checkout branch|tag|commit -- file_name # 从仓库取出file覆盖当前分支 +git checkout HEAD~1 [文件] # 将会更新 working directory 去匹配某次 commit +git checkout -- . # 从暂存区取出文件覆盖工作区 +git checkout -b gh-pages 0c304c9 # 这个表示 从当前分支 commit 哈希值为 0c304c9 的节点,分一个新的分支gh-pages出来,并切换到 gh-pages +``` + +### diff + +```shell +git diff file # 查看指定文件的差异 +git diff --stat # 查看简单的diff结果 +git diff # 比较Worktree和Index之间的差异 +git diff --cached # 比较Index和HEAD之间的差异 +git diff HEAD # 比较Worktree和HEAD之间的差异 +git diff branch # 比较Worktree和branch之间的差异 +git diff branch1 branch2 # 比较两次分支之间的差异 +git diff commit commit # 比较两次提交之间的差异 +git diff master..test # 上面这条命令只显示两个分支间的差异 +git diff master...test # 你想找出‘master’,‘test’的共有 父分支和'test'分支之间的差异,你用3个‘.'来取代前面的两个'.' +``` + +### stash + +```shell +git stash # 将工作区现场(已跟踪文件)储藏起来,等以后恢复后继续工作。 +git stash list # 查看保存的工作现场 +git stash apply # 恢复工作现场 +git stash drop # 删除stash内容 +git stash pop # 恢复的同时直接删除stash内容 +git stash apply stash@{0} # 恢复指定的工作现场,当你保存了不只一份工作现场时。 +``` + +### merge + +```bash +git merge --squash test # 合并压缩,将test上的commit压缩为一条 +``` + +### cherry-pick + +```shell +git cherry-pick commit # 拣选合并,将commit合并到当前分支 +git cherry-pick -n commit # 拣选多个提交,合并完后可以继续拣选下一个提交 +``` + +### rebase + +```shell +git rebase master # 将master分之上超前的提交,变基到当前分支 +git rebase --onto master 169a6 # 限制回滚范围,rebase当前分支从169a6以后的提交 +git rebase --interactive # 交互模式,修改commit +git rebase --continue # 处理完冲突继续合并 +git rebase --skip # 跳过 +git rebase --abort # 取消合并 +``` + +## 分支branch + +### 删除 + +```shell +git push origin :branchName # 删除远程分支 +git push origin --delete new # 删除远程分支new +git branch -d branchName # 删除本地分支,强制删除用-D +git branch -d test # 删除本地test分支 +git branch -D test # 强制删除本地test分支 +git remote prune origin # 远程删除了,本地还能看到远程存在,这条命令删除远程不存在的分支 +``` + +### 提交 + +```bash +git push -u origin branchName # 提交分支到远程origin主机中 +``` + +### 拉取 + +`git fetch -p` #拉取远程分支时,自动清理 远程分支已删除,本地还存在的对应同名分支。 + +### 分支合并 + +```shell +git merge branchName # 合并分支 - 将分支branchName和当前所在分支合并 +git merge origin/master # 在本地分支上合并远程分支。 +git rebase origin/master # 在本地分支上合并远程分支。 +git merge test # 将test分支合并到当前分支 +``` + +### 重命名 + +`git branch -m old new` #重命名分支 + +### 查看 + +```shell +git branch # 列出本地分支 +git branch -r # 列出远端分支 +git branch -a # 列出所有分支 +git branch -v # 查看各个分支最后一个提交对象的信息 +git branch --merge # 查看已经合并到当前分支的分支 +git branch --no-merge # 查看为合并到当前分支的分支 +git remote show origin # 可以查看remote地址,远程分支 +``` + +### 新建 + +```shell +git branch test # 新建test分支 +git branch newBrach 3defc69 # 指定哈希3defc69,新建分支名字为newBrach +git checkout -b newBrach origin/master # 取回远程主机的更新以后,在它的基础上创建一个新的分支 +git checkout -b newBrach 3defc69 # 以哈希值3defc69,新建 newBrach 分支,并切换到该分支 +``` + +### 连接 + +```shell +git branch --set-upstream dev origin/dev # 将本地dev分支与远程dev分支之间建立链接 +git branch --set-upstream master origin/next # 手动建立追踪关系 +``` + +### 分支切换 + +```shell +git checkout test # 切换到test分支 +git checkout -b test # 新建+切换到test分支 +git checkout -b test dev # 基于dev新建test分支,并切换 +``` + +## 远端 + +```shell +git fetch <远程主机名> <分支名> # fetch取回所有分支(branch)的更新 +git fetch origin remotebranch[:localbranch] # 从远端拉去分支[到本地指定分支] +git merge origin/branch # 合并远端上指定分支 +git pull origin remotebranch:localbranch # 拉去远端分支到本地分支 +git push origin branch # 将当前分支,推送到远端上指定分支 +git push origin localbranch:remotebranch # 推送本地指定分支,到远端上指定分支 +git push origin :remotebranch # 删除远端指定分支 +git checkout -b [--track] test origin/dev # 基于远端dev分支,新建本地test分支[同时设置跟踪] +``` + +## submodule + +克隆项目同时克隆submodule + +```bash +git clone https://github.com/jaywcjlove/handbook.git --depth=1 --recurse-submodules +``` + +克隆项目,之后再手动克隆 submodule 子项目 + +```bash +git submodule add --force '仓库地址' '路径' +# 其中,仓库地址是指子模块仓库地址,路径指将子模块放置在当前工程下的路径。 +# 注意:路径不能以 / 结尾(会造成修改不生效)、不能是现有工程已有的目录(不能順利 Clone) +git submodule init # 初始化submodule +git submodule update # 更新submodule(必须在根目录执行命令) +git submodule update --init --recursive # 下载的工程带有submodule +``` + +当使用`git clone`下来的工程中带有submodule时,初始的时候,submodule的内容并不会自动下载下来的,此时,只需执行如下命令: + +```bash +git submodule foreach git pull # submodule 里有其他的 submodule 一次更新 +git submodule foreach git pull origin master # submodule更新 + +git submodule foreach --recursive git submodule init +git submodule foreach --recursive git submodule update +``` + +## 删除文件 + +```bash +git rm -rf node_modules/ +``` + +## remote + +git是一个分布式代码管理工具,所以可以支持多个仓库,在git里,服务器上的仓库在本地称之为remote。个人开发时,多源用的可能不多,但多源其实非常有用。 + +```shell +git remote add origin1 git@github.com:yanhaijing/data.js.git +git remote # 显示全部源 +git remote -v # 显示全部源+详细信息 +git remote rename origin1 origin2 # 重命名 +git remote rm origin # 删除 +git remote show origin # 查看指定源的全部信息 +``` + +## 标签tag + +当开发到一定阶段时,给程序打标签是非常棒的功能。 + +```bash +git tag -a v0.1 -m 'my version 1.4' # 新建带注释标签 +git push origin --tags # 一次性推送所有分支 +git push origin v1.5 # 推送单个tag到orgin源上 +git tag -v v1.4.2.1 # 验证标签,验证已经签署的标签 +git show v1.5 # 看到对应的 GPG 签 + +git tag # 列出现有标签 +git tag v0gi.1 # 新建标签 +git checkout tagname # 切换到标签 +git tag -d v0.1 # 删除标签 +git push origin :refs/tags/v0.1 # 删除远程标签 +git pull --all # 获取远程所有内容包括tag +git --git-dir='<绝对地址>/.git' describe --tags HEAD # 查看本地版本信息 +``` + +## 日志log + +```bash +git config format.pretty oneline #显示历史记录时,每个提交的信息只显示一行 +git config color.ui true #彩色的 git 输出 +git log #查看最近的提交日志 +git log --pretty=oneline #单行显示提交日志 +git log --graph --pretty=oneline --abbrev-commit +git log -num #显示第几条log(倒数) +git reflog #查看所有分支的所有操作记录 +git log --since=1.day #一天内的提交;你可以给出各种时间格式,比如说具体的某一天(“2008-01-15”),或者是多久以前(“2 years 1 day 3 minutes ago”)。 +git log --pretty="%h - %s" --author=自己的名字 #查看自己的日志 +git log -p -2 #展开两次更新显示每次提交的内容差异 +git log --stat #要快速浏览其他协作者提交的更新都作了哪些改动 +git log --pretty=format:"%h - %an, %ar : %s"#定制要显示的记录格式 +git log --pretty=format:'%h : %s' --date-order --graph # 拓扑顺序展示 +git log --pretty=format:'%h : %s - %ad' --date=short #日期YYYY-MM-DD显示 +git log HEAD --pretty=format:%s # 只显示commit +git config --global format.pretty '%h : %s - %ad' --date=short #日期YYYY-MM-DD显示 写入全局配置 +``` + +|选项 | 说明|选项 | 说明| +|----|----|----|----| +|%H |提交对象(commit)的完整哈希字串 |%ad |作者修订日期(可以用 -date= 选项定制格式)| +|%h |提交对象的简短哈希字串 |%ar |作者修订日期,按多久以前的方式显示| +|%T |树对象(tree)的完整哈希字串 |%cn |提交者(committer)的名字| +|%t |树对象的简短哈希字串 |%ce |提交者的电子邮件地址| +|%P |父对象(parent)的完整哈希字串 |%cd |提交日期| +|%p |父对象的简短哈希字串 |%cr |提交日期,按多久以前的方式显示| +|%an |作者(author)的名字 |%s |提交说明| +|%ae |作者的电子邮件地址| - | - | + +[Pretty Formats](https://git-scm.com/docs/git-log#_pretty_formats) + +## 重写历史 + +```bash +git commit --amend # 改变最近一次提交 +git rebase -i HEAD~3 # 修改最近三次的提交说明,或者其中任意一次 +git commit --amend # 保存好了,这些指示很明确地告诉了你该干什么 +git rebase --continue # 修改提交说明,退出编辑器。 +``` + +```bash +pick f7f3f6d changed my name a bit +pick 310154e updated README formatting and added blame +pick a5f4a0d added cat-file +``` + +改成 + +``` +pick 310154e updated README formatting and added blame +pick f7f3f6d changed my name a bit +``` + +### 删除仓库 + +``` +cd .. +rm -rf repo.git +``` + +[Github官方教程](https://help.github.com/articles/changing-author-info/) + +## 其它 + +```bash +git help * # 获取命令的帮助信息 +git status # 获取当前的状态,非常有用,因为git会提示接下来的能做的操作 +``` + + +## 报错问题解决 + +**1. `git fatal: protocol error: bad line length character: No s`** + +解决办法:更换remote地址为 `http/https` 的 + +**2. `The requested URL returned error: 403 Forbidden while accessing`** + +解决github push错误的办法: + +```shell +#vim 编辑器打开 当前项目中的config文件 +vim .git/config + +#修改 +[remote "origin"] + url = https://github.com/jaywcjlove/example.git + +#为下面代码 +[remote "origin"] + url = https://jaywcjlove@github.com/jaywcjlove/example.git +``` + +**3. git status 显示中文问题** + +在查看状态的时候 git status 如果是中文就显示下面的情况 + +```bash +\344\272\247\345\223\201\351\234\200\346\261\202 +``` + +解决这个问题方法是: + +```bash +git config --global core.quotepath false +``` + +## 参考资料 + +- [Git官网](http://git-scm.com/) +- [**Github 15分钟学习Git**](https://try.github.io) +- [Git参考手册](http://gitref.org/zh/index.html) +- [Git简明手册](http://www.mceiba.com/tool/git-cheat-sheet.html) +- [Git Magic](http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/zh_cn/) +- [Git Community Book 中文版](http://gitbook.liuhui998.com/index.html) +- [Pro Git](http://git-scm.com/book/en/v2) +- [图解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) +- [廖雪峰的Git教程](http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000) +- [蒋鑫老师将带你入github的大门](http://www.worldhello.net/gotgithub/) +- [git详解](http://www.open-open.com/lib/view/open1328069609436.html) +- [oschina教程](http://git.oschina.net/progit/) +- [How to undo (almost) anything with Git撤销一切,汇总各种回滚撤销的场景,加强学习。](https://github.com/blog/2019-how-to-undo-almost-anything-with-git) +- [Git 教程 | 菜鸟教程runoob.com](http://www.runoob.com/git/git-tutorial.html) +- [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) + + From f71227c949234854114a2a6f3769dd213cfbbdab Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Thu, 3 May 2018 08:53:31 +0800 Subject: [PATCH 0160/1284] Update git.md --- command/git.md | 66 +++++++++++++++++++++++++------------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/command/git.md b/command/git.md index 58738ae714a..b4ce3445a9e 100644 --- a/command/git.md +++ b/command/git.md @@ -162,7 +162,7 @@ ssh -T git@github.com # 测试是否成功 `vim ~/.ssh/config` #修改config文件,如果没有创建 `config` -```shell +```bash Host jslite.github.com HostName github.com User git @@ -259,7 +259,7 @@ git clone https://github.com/username/rep.git **1. 增加3个远程库地址** -```shell +```bash 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,7 +267,7 @@ git remote set-url --add origin https://oschina.net/wang/JSLite.js.git **2. 删除其中一个 set-url 地址** -```shell +```bash usage: git remote set-url [--push] [] or: git remote set-url --add or: git remote set-url --delete @@ -287,7 +287,7 @@ git push -f origin master # 强制推送 只能拉取 `origin` 里的一个url地址,这个fetch-url 默认为你添加的到 `origin`的第一个地址 -```shell +```bash git pull origin master git pull --all # 获取远程所有内容包括tag git pull origin next:master # 取回origin主机的next分支,与本地的master分支合并 @@ -301,7 +301,7 @@ git merge origin/next 如果远程主机删除了某个分支,默认情况下,git pull 不会在拉取远程分支的时候,删除对应的本地分支。这是为了防止,由于其他人操作了远程主机,导致git pull不知不觉删除了本地分支。 但是,你可以改变这个行为,加上参数 -p 就会在本地删除远程已经删除的分支。 -```shell +```bash $ git pull -p # 等同于下面的命令 $ git fetch --prune origin @@ -322,14 +322,14 @@ git remote add origin git@jslite.github.com:JSLite/JSLite.git # 添加远程路 ### 撤销远程记录 -```shell +```bash git reset --hard HEAD~1 # 撤销一条记录 git push -f origin HEAD:master # 同步到远程仓库 ``` ### 放弃本地的文件修改 -```shell +```bash git reset --hard FETCH_HEAD # FETCH_HEAD表示上一次成功git pull之后形成的commit点。然后git pull ``` @@ -370,7 +370,7 @@ git stash && git stash drop ### 回滚到某个commit提交 -```shell +```bash git revert HEAD~1 # 撤销一条记录 会弹出 commit 编辑 git push # 提交回滚 ``` @@ -491,7 +491,7 @@ echo node_modules/ >> .gitignore 在同步之前,需要创建一个远程点指向上游仓库(repo).如果你已经派生了一个原始仓库,可以按照如下方法做。 -```shell +```bash $ git remote -v # List the current remotes (列出当前远程仓库) # origin https://github.com/user/repo.git (fetch) @@ -510,7 +510,7 @@ $ git remote -v 同步上游仓库到你的仓库需要执行两步:首先你需要从远程拉去,之后你需要合并你希望的分支到你的本地副本分支。从上游的存储库中提取分支以及各自的提交内容。 `master` 将被存储在本地分支机构 `upstream/master` -```shell +```bash git fetch upstream # remote: Counting objects: 75, done. # remote: Compressing objects: 100% (53/53), done. @@ -522,14 +522,14 @@ git fetch upstream 检查你的 fork's 本地 `master` 分支 -```shell +```bash git checkout master # Switched to branch 'master' ``` 合并来自 `upstream/master` 的更改到本地 master 分支上。 这使你的前 fork's `master` 分支与上游资源库同步,而不会丢失你本地修改。 -```shell +```bash git merge upstream/master # Updating a422352..5fdff0f # Fast-forward @@ -611,7 +611,7 @@ git pull origin master --allow-unrelated-histories ### 查看某个文件历史 -```shell +```bash git log --pretty=oneline 文件名 # 列出文件的所有改动历史 git show c178bf49 # 某次的改动的修改记录 git log -p c178bf49 # 某次的改动的修改记录 @@ -680,7 +680,7 @@ git push -f origin master # 强制推送文件,缩写 -f(全写--force) git clone支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等,下面是一些例子。`git clone <版本库的网址> <本地目录名>` -```shell +```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/ @@ -700,14 +700,14 @@ git help config # 获取帮助信息 ### add -```shell +```bash git add * # 跟踪新文件 git add -u [path] # 添加[指定路径下]已跟踪文件 ``` ### rm -```shell +```bash rm *&git rm * # 移除文件 git rm -f * # 移除文件 git rm --cached * # 取消跟踪 @@ -717,7 +717,7 @@ git log # 查看提交记录 ### commit -```shell +```bash git commit #提交更新 git commit -m 'message' #提交说明 git commit -a #跳过使用暂存区域,把所有已经跟踪过的文件暂存起来一并提交 @@ -730,7 +730,7 @@ git commit -m '概要描述'$'\n\n''1.详细描述'$'\n''2.详细描述' #提交 ### reset -```shell +```bash git reset HEAD * # 取消已经暂存的文件 git reset --mixed HEAD * # 同上 git reset --soft HEAD * # 重置到指定状态,不会修改索引区和工作树 @@ -740,7 +740,7 @@ git reset -- files * # 重置index区文件 ### revert -```shell +```bash git revert HEAD # 撤销前一次操作 git revert HEAD~ # 撤销前前一次操作 git revert commit # 撤销指定操作 @@ -748,7 +748,7 @@ git revert commit # 撤销指定操作 ### checkout -```shell +```bash git checkout -- file # 取消对文件的修改(从暂存区——覆盖worktree file) git checkout branch|tag|commit -- file_name # 从仓库取出file覆盖当前分支 git checkout HEAD~1 [文件] # 将会更新 working directory 去匹配某次 commit @@ -758,7 +758,7 @@ git checkout -b gh-pages 0c304c9 # 这个表示 从当前分支 commit 哈希 ### diff -```shell +```bash git diff file # 查看指定文件的差异 git diff --stat # 查看简单的diff结果 git diff # 比较Worktree和Index之间的差异 @@ -773,7 +773,7 @@ git diff master...test # 你想找出‘master’,‘test’的共有 父分 ### stash -```shell +```bash git stash # 将工作区现场(已跟踪文件)储藏起来,等以后恢复后继续工作。 git stash list # 查看保存的工作现场 git stash apply # 恢复工作现场 @@ -790,14 +790,14 @@ git merge --squash test # 合并压缩,将test上的commit压缩为一条 ### cherry-pick -```shell +```bash git cherry-pick commit # 拣选合并,将commit合并到当前分支 git cherry-pick -n commit # 拣选多个提交,合并完后可以继续拣选下一个提交 ``` ### rebase -```shell +```bash git rebase master # 将master分之上超前的提交,变基到当前分支 git rebase --onto master 169a6 # 限制回滚范围,rebase当前分支从169a6以后的提交 git rebase --interactive # 交互模式,修改commit @@ -810,7 +810,7 @@ git rebase --abort # 取消合并 ### 删除 -```shell +```bash git push origin :branchName # 删除远程分支 git push origin --delete new # 删除远程分支new git branch -d branchName # 删除本地分支,强制删除用-D @@ -831,7 +831,7 @@ git push -u origin branchName # 提交分支到远程origin主机中 ### 分支合并 -```shell +```bash git merge branchName # 合并分支 - 将分支branchName和当前所在分支合并 git merge origin/master # 在本地分支上合并远程分支。 git rebase origin/master # 在本地分支上合并远程分支。 @@ -844,7 +844,7 @@ git merge test # 将test分支合并到当前分支 ### 查看 -```shell +```bash git branch # 列出本地分支 git branch -r # 列出远端分支 git branch -a # 列出所有分支 @@ -856,7 +856,7 @@ git remote show origin # 可以查看remote地址,远程分支 ### 新建 -```shell +```bash git branch test # 新建test分支 git branch newBrach 3defc69 # 指定哈希3defc69,新建分支名字为newBrach git checkout -b newBrach origin/master # 取回远程主机的更新以后,在它的基础上创建一个新的分支 @@ -865,14 +865,14 @@ git checkout -b newBrach 3defc69 # 以哈希值3defc69,新建 newBrach 分支 ### 连接 -```shell +```bash git branch --set-upstream dev origin/dev # 将本地dev分支与远程dev分支之间建立链接 git branch --set-upstream master origin/next # 手动建立追踪关系 ``` ### 分支切换 -```shell +```bash git checkout test # 切换到test分支 git checkout -b test # 新建+切换到test分支 git checkout -b test dev # 基于dev新建test分支,并切换 @@ -880,7 +880,7 @@ git checkout -b test dev # 基于dev新建test分支,并切换 ## 远端 -```shell +```bash git fetch <远程主机名> <分支名> # fetch取回所有分支(branch)的更新 git fetch origin remotebranch[:localbranch] # 从远端拉去分支[到本地指定分支] git merge origin/branch # 合并远端上指定分支 @@ -930,7 +930,7 @@ git rm -rf node_modules/ git是一个分布式代码管理工具,所以可以支持多个仓库,在git里,服务器上的仓库在本地称之为remote。个人开发时,多源用的可能不多,但多源其实非常有用。 -```shell +```bash git remote add origin1 git@github.com:yanhaijing/data.js.git git remote # 显示全部源 git remote -v # 显示全部源+详细信息 @@ -1042,7 +1042,7 @@ git status # 获取当前的状态,非常有用,因为git会提示接下来 解决github push错误的办法: -```shell +```bash #vim 编辑器打开 当前项目中的config文件 vim .git/config From 1d577c72f2e19050d50c61d274d0000813772322 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Sun, 6 May 2018 21:52:27 +0800 Subject: [PATCH 0161/1284] Update ld.md --- command/ld.md | 66 +++++++++++++++++++++++++++++---------------------- 1 file changed, 38 insertions(+), 28 deletions(-) diff --git a/command/ld.md b/command/ld.md index 29f080e5ff2..eceefaf7353 100644 --- a/command/ld.md +++ b/command/ld.md @@ -1,28 +1,38 @@ -ld -=== - -将目标文件连接为可执行程序 - -## 补充说明 - -**ld命令** 是GNU的连接器,将目标文件连接为可执行程序。 - -### 语法 - -``` -ld(选项)(参数) -``` - -### 选项 - -``` --o:指定输出文件名; --e:指定程序的入口符号。 -``` - -### 参数 - -目标文件:指定需要连接的目标文件。 - - - \ No newline at end of file +ld +=== + +将目标文件连接为可执行程序 + +## 补充说明 + +**ld命令** 是GNU的连接器,将目标文件连接为可执行程序。 + +### 语法 + +``` +ld(选项)(参数) +ld [options] objfile ... +``` + +### 选项 + +``` +-o:指定输出文件名; +-e:指定程序的入口符号。 +``` + +### 参数 + +目标文件:指定需要连接的目标文件。 + +### 实例 + +这告诉ld通过将文件“/lib/crt0.o”与“hello.o”和库“libc.a”链接起来,生成一个名为output的文件,该文件将来自标准搜索目录。 + +```bash +ld -o /lib/crt0.o hello.o -lc +ld -o output /lib/crt0.o hello.o -lc +``` + + + From 006304eada6ddea87633153de48bac32461bf9a2 Mon Sep 17 00:00:00 2001 From: kass Date: Wed, 9 May 2018 19:10:52 +0800 Subject: [PATCH 0162/1284] fix type --- command/scp.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/command/scp.md b/command/scp.md index 78f80b2f04e..fed4f817e58 100644 --- a/command/scp.md +++ b/command/scp.md @@ -60,7 +60,7 @@ scp -r root@10.10.10.10:/opt/soft/mongodb /opt/soft/ ```bash scp /opt/soft/nginx-0.5.38.tar.gz root@10.10.10.10:/opt/soft/scptest -# 添加断开 2222 +# 指定端口 2222 scp -rp -P 2222 /opt/soft/nginx-0.5.38.tar.gz root@10.10.10.10:/opt/soft/scptest ``` From 96a0bcccc1b3e4981b7f0bd5e644c863171eaab3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Thu, 17 May 2018 17:58:04 +0800 Subject: [PATCH 0163/1284] Update cp.md --- command/cp.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/command/cp.md b/command/cp.md index f218bb36e85..5c21fff925f 100644 --- a/command/cp.md +++ b/command/cp.md @@ -81,18 +81,21 @@ cp -i /usr/men m*.c /usr/zh 我们在Linux下使用cp命令复制文件时候,有时候会需要覆盖一些同名文件,覆盖文件的时候都会有提示:需要不停的按Y来确定执行覆盖。文件数量不多还好,但是要是几百个估计按Y都要吐血了,于是折腾来半天总结了一个方法: -``` +```bash cp aaa/* /bbb -复制目录aaa下所有到/bbb目录下,这时如果/bbb目录下有和aaa同名的文件,需要按Y来确认并且会略过aaa目录下的子目录。 +# 复制目录aaa下所有到/bbb目录下,这时如果/bbb目录下有和aaa同名的文件,需要按Y来确认并且会略过aaa目录下的子目录。 cp -r aaa/* /bbb -这次依然需要按Y来确认操作,但是没有忽略子目录。 +# 这次依然需要按Y来确认操作,但是没有忽略子目录。 cp -r -a aaa/* /bbb -依然需要按Y来确认操作,并且把aaa目录以及子目录和文件属性也传递到了/bbb。 +# 依然需要按Y来确认操作,并且把aaa目录以及子目录和文件属性也传递到了/bbb。 \cp -r -a aaa/* /bbb -成功,没有提示按Y、传递了目录属性、没有略过目录。 +# 成功,没有提示按Y、传递了目录属性、没有略过目录。 + +cp -rfb ./* ../backup +# 将当前目录下所有文件,复制到当前目录的兄弟目录 backup 文件夹中 ``` From 1a51c4964c48d3415a98258885bc6d1a1a7678da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Thu, 17 May 2018 18:01:09 +0800 Subject: [PATCH 0164/1284] Update cp.md --- command/cp.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/command/cp.md b/command/cp.md index 5c21fff925f..59f587b360f 100644 --- a/command/cp.md +++ b/command/cp.md @@ -93,7 +93,11 @@ cp -r -a aaa/* /bbb \cp -r -a aaa/* /bbb # 成功,没有提示按Y、传递了目录属性、没有略过目录。 +``` + +递归强制复制目录到指定目录中覆盖已存在文件 +``` cp -rfb ./* ../backup # 将当前目录下所有文件,复制到当前目录的兄弟目录 backup 文件夹中 ``` From 2a891b3894b45d18f6bfb8fe669987f329243aca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Fri, 18 May 2018 10:11:23 +0800 Subject: [PATCH 0165/1284] Update ifconfig.md --- command/ifconfig.md | 248 +++++++++++++++++++++++--------------------- 1 file changed, 128 insertions(+), 120 deletions(-) diff --git a/command/ifconfig.md b/command/ifconfig.md index 4b9bddd72ff..6803089550b 100644 --- a/command/ifconfig.md +++ b/command/ifconfig.md @@ -1,120 +1,128 @@ -ifconfig -=== - -配置和显示Linux系统网卡的网络参数 - -## 补充说明 - -**ifconfig命令** 被用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。 - -### 语法 - -``` -ifconfig(参数) -``` - -### 参数 - -``` -add<地址>:设置网络设备IPv6的ip地址; -del<地址>:删除网络设备IPv6的IP地址; -down:关闭指定的网络设备; -<硬件地址>:设置网络设备的类型与硬件地址; -io_addr:设置网络设备的I/O地址; -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 -``` - - - \ No newline at end of file +ifconfig +=== + +配置和显示Linux系统网卡的网络参数 + +## 补充说明 + +**ifconfig命令** 被用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。 + +### 语法 + +``` +ifconfig(参数) +``` + +### 参数 + +``` +add<地址>:设置网络设备IPv6的ip地址; +del<地址>:删除网络设备IPv6的IP地址; +down:关闭指定的网络设备; +<硬件地址>:设置网络设备的类型与硬件地址; +io_addr:设置网络设备的I/O地址; +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的网卡信息 +``` + + + From 513b0b5dc0468335aef6b790b3f6fccd88d5628f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Sat, 19 May 2018 19:15:07 +0800 Subject: [PATCH 0166/1284] Update find.md --- command/find.md | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/command/find.md b/command/find.md index d10eb2ffa84..cd3e5e8ddaa 100644 --- a/command/find.md +++ b/command/find.md @@ -337,5 +337,41 @@ find . -path "./sk" -prune -o -name "*.txt" -print find . -empty ``` +#### 其它实例 + +```bash +find ~ -name '*jpg' # 主目录中找到所有的 jpg 文件。 -name 参数允许你将结果限制为与给定模式匹配的文件。 +find ~ -iname '*jpg' # -iname 就像 -name,但是不区分大小写 +find ~ ( -iname 'jpeg' -o -iname 'jpg' ) # 一些图片可能是 .jpeg 扩展名。幸运的是,我们可以将模式用“或”(表示为 -o)来组合。 +find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type f # 如果你有一些以 jpg 结尾的目录呢? (为什么你要命名一个 bucketofjpg 而不是 pictures 的目录就超出了本文的范围。)我们使用 -type 参数修改我们的命令来查找文件。 +find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type d # 也许你想找到那些命名奇怪的目录,以便稍后重命名它们 +``` + +最近拍了很多照片,所以让我们把它缩小到上周更改的文件 + +```bash +find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type f -mtime -7 +``` + +你可以根据文件状态更改时间 (ctime)、修改时间 (mtime) 或访问时间 (atime) 来执行时间过滤。 这些是在几天内,所以如果你想要更细粒度的控制,你可以表示为在几分钟内(分别是 cmin、mmin 和 amin)。 除非你确切地知道你想要的时间,否则你可能会在 + (大于)或 - (小于)的后面加上数字。 + +但也许你不关心你的照片。也许你的磁盘空间不够用,所以你想在 log 目录下找到所有巨大的(让我们定义为“大于 1GB”)文件: + +```bash +find /var/log -size +1G +``` + +或者,也许你想在 /data 中找到 bcotton 拥有的所有文件: + +```bash +find /data -owner bcotton +``` + +你还可以根据权限查找文件。也许你想在你的主目录中找到对所有人可读的文件,以确保你不会过度分享。 + +```bash +find ~ -perm -o=r +``` + From b2719ac09ece1839c399ea09a4855a5bf4cab5ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Tue, 22 May 2018 16:26:54 +0800 Subject: [PATCH 0167/1284] Update cp.md --- command/cp.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/command/cp.md b/command/cp.md index 59f587b360f..190c1571612 100644 --- a/command/cp.md +++ b/command/cp.md @@ -102,5 +102,12 @@ cp -rfb ./* ../backup # 将当前目录下所有文件,复制到当前目录的兄弟目录 backup 文件夹中 ``` +拷贝目录下的隐藏文件如 `.babelrc` + +```bash +cp -r aaa/.* ./bbb +# 将 aaa 目录下的,所有`.`开头的文件,复制到 bbb 目录中。 +``` + From 92b85e23fa0634b345d26c87570d8d8d5c5d5c26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Tue, 22 May 2018 16:27:13 +0800 Subject: [PATCH 0168/1284] Update cp.md --- command/cp.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/command/cp.md b/command/cp.md index 190c1571612..031c5b765ca 100644 --- a/command/cp.md +++ b/command/cp.md @@ -97,7 +97,7 @@ cp -r -a aaa/* /bbb 递归强制复制目录到指定目录中覆盖已存在文件 -``` +```bash cp -rfb ./* ../backup # 将当前目录下所有文件,复制到当前目录的兄弟目录 backup 文件夹中 ``` From c51cb3889634693ee16a779b6237687c313d6e14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Tue, 22 May 2018 16:47:26 +0800 Subject: [PATCH 0169/1284] Update cp.md --- command/cp.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/command/cp.md b/command/cp.md index 031c5b765ca..487d03d160d 100644 --- a/command/cp.md +++ b/command/cp.md @@ -107,6 +107,9 @@ cp -rfb ./* ../backup ```bash cp -r aaa/.* ./bbb # 将 aaa 目录下的,所有`.`开头的文件,复制到 bbb 目录中。 + +cp -a aaa ./bbb/ +# 记住后面目录最好的'/' 带上 `-a` 参数 ``` From 77e898477818295bee9a5db9213b35678c460a5f Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Tue, 5 Jun 2018 11:59:03 +0800 Subject: [PATCH 0170/1284] released v1.1.0 --- .npmignore | 1 - package.json | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.npmignore b/.npmignore index a6584424835..5bc2aef9310 100644 --- a/.npmignore +++ b/.npmignore @@ -1,6 +1,5 @@ assets build/ -command node_modules/ template/ .deploy diff --git a/package.json b/package.json index 761d6fb602c..ae6d968d8ee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "linux-command", - "version": "1.0.6", + "version": "1.1.0", "description": "Linux Command", "main": "dist/data.json", "scripts": { From 5c194b7f749921d91ba0045a1ec6721c6d6ced6a Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Tue, 5 Jun 2018 12:11:44 +0800 Subject: [PATCH 0171/1284] Update README.md --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 344c8b5e6e6..09019abdfa5 100644 --- a/README.md +++ b/README.md @@ -114,6 +114,8 @@ archive、ctlinnd、elm、getlist、inncheck、mail、mailconf、mailq、message yes +## 使用 + ### Node调用 ``` @@ -125,8 +127,15 @@ npm install linux-command var comm = require("linux-command") console.log("---->",comm.ls) +var alias = require("linux-command/command/alias.md") +console.log("---->",alias) // markdown string ``` +### CDN + +https://unpkg.com/linux-command/dist/data.json 命令总 JSON 数据 +https://unpkg.com/linux-command/command/alias.md 对应命令详情(Markdown)数据 + ## Linux学习资源整理 From 164522b7d062f7d2b21afb72c672133c7ca6ab02 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Tue, 5 Jun 2018 12:14:35 +0800 Subject: [PATCH 0172/1284] released v1.1.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ae6d968d8ee..8668d6078ab 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "linux-command", - "version": "1.1.0", + "version": "1.1.1", "description": "Linux Command", "main": "dist/data.json", "scripts": { From 4af9bdd32442f761beb42ccf4e244df8e64de499 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Tue, 5 Jun 2018 12:18:04 +0800 Subject: [PATCH 0173/1284] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 09019abdfa5..0ea1a1523e7 100644 --- a/README.md +++ b/README.md @@ -133,8 +133,8 @@ console.log("---->",alias) // markdown string ### CDN -https://unpkg.com/linux-command/dist/data.json 命令总 JSON 数据 -https://unpkg.com/linux-command/command/alias.md 对应命令详情(Markdown)数据 +https://unpkg.com/linux-command/dist/data.json 命令总 JSON 数据 +https://unpkg.com/linux-command/command/alias.md 对应命令详情(Markdown)数据 ## Linux学习资源整理 From bd1d58c1524ef943d77d5a1ba5622c6b60f6730b Mon Sep 17 00:00:00 2001 From: daydaygo <1252409767@qq.com> Date: Fri, 8 Jun 2018 15:13:21 +0800 Subject: [PATCH 0174/1284] =?UTF-8?q?=E5=AE=8C=E5=96=84=E8=87=AA=E5=B7=B1?= =?UTF-8?q?=E5=B9=B3=E6=97=B6=E7=A7=AF=E7=B4=AF=E7=9A=84=E5=91=BD=E4=BB=A4?= =?UTF-8?q?=E5=92=8C=E4=BD=BF=E7=94=A8=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- command/ack.md | 14 +++ command/apk.md | 100 +++++++++++++++++++ command/cloc.md | 12 +++ command/curl.md | 28 +++--- command/dos2unix.md | 15 ++- command/du.md | 13 ++- command/find.md | 42 +++++--- command/fishshell.md | 42 ++++++++ command/gdb.md | 91 ++++++++++++----- command/gzip.md | 10 +- command/history.md | 19 +++- command/hostname.md | 15 ++- command/iptables.md | 219 ++++++++++++++++++++++++++++++++--------- command/kill.md | 13 +-- command/locate.md | 11 +-- command/lsof.md | 17 ++-- command/mtr.md | 12 +++ command/openssl.md | 26 +++-- command/ps.md | 4 +- command/rm.md | 21 ++-- command/rpm.md | 48 +++++++-- command/rsync.md | 15 ++- command/rz.md | 11 +++ command/ss.md | 96 +++++++++--------- command/ssh.md | 66 +++++++------ command/supervisord.md | 20 ++++ command/sz.md | 12 +++ command/tail.md | 8 +- command/tar.md | 96 +++++++++--------- command/telnet.md | 64 ++++++------ command/tmux.md | 22 +++++ command/tree.md | 8 +- command/ulimit.md | 8 +- command/uname.md | 8 +- command/unzip.md | 10 +- command/usermod.md | 17 +++- command/watch.md | 8 +- command/xz.md | 32 +++--- command/yum.md | 41 ++++++-- command/zip.md | 16 ++- 40 files changed, 933 insertions(+), 397 deletions(-) create mode 100644 command/ack.md create mode 100644 command/apk.md create mode 100644 command/cloc.md create mode 100644 command/fishshell.md create mode 100644 command/mtr.md create mode 100644 command/rz.md create mode 100644 command/supervisord.md create mode 100644 command/sz.md create mode 100644 command/tmux.md diff --git a/command/ack.md b/command/ack.md new file mode 100644 index 00000000000..ee8ad5c38b1 --- /dev/null +++ b/command/ack.md @@ -0,0 +1,14 @@ +ack +=== + +比grep好用的文本搜索工具 + +## 示例 + +``` +# install +apk install ack + +# use +ack +``` \ No newline at end of file diff --git a/command/apk.md b/command/apk.md new file mode 100644 index 00000000000..5abd5fc812e --- /dev/null +++ b/command/apk.md @@ -0,0 +1,100 @@ +apk +=== + +Alpine Linux 下的包管理工具 + +## quick start + +``` +apk install xxx +apk search xxx # 支持正则 +apk info xxx # 查看包的详细信息 +apk show # list local package +``` + +## 笔记 + +还是蛮喜欢 alpine 的,简单纯粹 + +``` +apk add iproute2 # ss vs netstat +ss -ptl +apk add drill # drill vs nslookup&dig + +crond # 开启 cron 服务 +crontab -l -e + +apk add xxx +apk search -v xxx +apk info -a xxx +apk info +echo -e "http://mirrors.aliyun.com/alpine/v3.6/main\nhttp://mirrors.aliyun.com/alpine/v3.6/community" > /etc/apk/repositories +apk update + +# storage +ibu # alpine local backup + +# network +echo "shortname" > /etc/hostname +hostname -F /etc/hostname +/etc/hosts +/etc/resolv.conf # conig DNS +modprobe ipv6 # enable ipv6 +echo "ipv6" >> /etc/modules +iface # config interface +apk add iptables ip6tables iptables-doc +/etc/init.d/networking restart # activate change +apke add iputils # IPv6 traceroute +traceroute6 ipv6.google.com +awall # alpine wall +# setup a openvpn server + +# post-install +/etc/apk/repositories +apk add cherokee --update-cache --repository http://dl-3.alpinelinux.org/alpine/edge/testing/ --allow-untrusted +apk search -v --description 'NTP' # show description and search from description +apk info -a zlib +apk info -vv|sort +apk info -r -R # require / depency +apk version -v -l '<' # show available updates +apk upgrade -U -a +apk add -u xxx # update xxx + +/etc/runlevels # runlevel +apk add openrc # use openrc for init system +rc-update add xxx # set to start on +rc-service xxx start # equal -> /etc/init.d/xxx start +rc-status + +adduser xxx +passwd xxx + +apk add ansible # server +ssh-keygen +/etc/ansible/hosts +apk add python # node +ssh-copy-id + +apk add man man-pages mdocml-apropos less less-doc +export PAGER=less +/etc/rc.conf # /etc/rc.conf -> funny character +apk add bash bash-doc bash-completion # bash +apk add util-linux pciutils usbutils coreutils binutils findutils grep # grep / awk +apk add build-base gcc abuild binutils binutils-doc gcc-doc # compile +apk add cmake cmake-doc extra-cmake-modules extra-cmake-modules-doc +apk add ccache ccache-doc + +apk add docker # docker +rc-update add docker boot +rc-service docker start +apk add py-pip +pip install docker-compose +ln -s /usr/bin/docker-compose /usr/bin/doc + +# application +apk add openssh # ssh +rc-update add sshd +/etc/init.d/sshd start +/etc/sshd_config +apk add dropbear # another openssh implementation +``` \ No newline at end of file diff --git a/command/cloc.md b/command/cloc.md new file mode 100644 index 00000000000..971017d6d21 --- /dev/null +++ b/command/cloc.md @@ -0,0 +1,12 @@ +cloc +=== + +代码行数统计 + +## quick start + +``` +apk add cloc + +cloc dir --exclude-dir # 代码行数统计 +``` \ No newline at end of file diff --git a/command/curl.md b/command/curl.md index 591540ee244..1c0a3712bc3 100644 --- a/command/curl.md +++ b/command/curl.md @@ -7,13 +7,13 @@ curl **curl命令** 是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。作为一款强力工具,curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化,curl可以祝一臂之力。 -### 语法 +### 语法 ``` curl(选项)(参数) ``` -### 选项 +### 选项 @@ -119,9 +119,9 @@ curl(选项)(参数)
-### 实例 +### 实例 -**文件下载** +**文件下载** curl命令可以用来执行下载、发送各种HTTP请求,指定HTTP头部等操作。如果系统没有curl可以使用`yum install curl`安装,也可以下载安装。curl是将下载文件输出到stdout,将进度信息输出到stderr,不显示进度信息使用`--silent`选项。 @@ -144,7 +144,7 @@ curl http://man.linuxde.net/test.iso -o filename.iso --progress ######################################### 100.0% ``` -**断点续传** +**断点续传** curl能够从特定的文件偏移处继续下载,它可以通过指定一个便宜量来下载部分文件: @@ -155,7 +155,7 @@ curl URL/File -C 偏移量 curl -C -URL ``` -**使用curl设置参照页字符串** +**使用curl设置参照页字符串** 参照页是位于HTTP头部中的一个字符串,用来表示用户是从哪个页面到达当前页面的,如果用户点击网页A中的某个连接,那么用户就会跳转到B网页,网页B头部的参照页字符串就包含网页A的URL。 @@ -165,7 +165,7 @@ curl -C -URL curl --referer http://www.google.com http://man.linuxde.net ``` -**用curl设置cookies** +**用curl设置cookies** 使用`--cookie "COKKIES"`选项来指定cookie,多个cookie使用分号分隔: @@ -179,7 +179,7 @@ curl http://man.linuxde.net --cookie "user=root;pass=123456" curl URL --cookie-jar cookie_file ``` -**用curl设置用户代理字符串** +**用curl设置用户代理字符串** 有些网站访问会提示只能使用IE浏览器来访问,这是因为这些网站设置了检查用户代理,可以使用curl把用户代理设置为IE,这样就可以访问了。使用`--user-agent`或者`-A`选项: @@ -194,7 +194,7 @@ curl URL -A "Mozilla/5.0" curl -H "Host:man.linuxde.net" -H "accept-language:zh-cn" URL ``` -**curl的带宽控制和下载配额** +**curl的带宽控制和下载配额** 使用`--limit-rate`限制curl的下载速度: @@ -212,7 +212,7 @@ curl URL --max-filesize bytes 如果文件大小超出限制,命令则返回一个非0退出码,如果命令正常则返回0。 -**用curl进行认证** +**用curl进行认证** 使用curl选项 -u 可以完成HTTP或者FTP的认证,可以指定密码,也可以不指定密码在后续操作中输入密码: @@ -221,7 +221,7 @@ curl -u user:pwd http://man.linuxde.net curl -u user http://man.linuxde.net ``` -**只打印响应头部信息** +**只打印响应头部信息** 通过`-I`或者`-head`可以只打印出HTTP头部信息: @@ -257,4 +257,10 @@ curl -d "param1=value1¶m2=value2" "http://www.wangchujiang.com" curl -l -H "Content-type: application/json" -X POST -d '{"phone":"13521389587","password":"test"}' http://wangchujiang.com/apis/users.json ``` +**获取本机外网ip** + +```bash +curl ipecho.net/plain +``` + diff --git a/command/dos2unix.md b/command/dos2unix.md index 4f4939d0a4a..296a9e408a7 100644 --- a/command/dos2unix.md +++ b/command/dos2unix.md @@ -1,19 +1,19 @@ dos2unix === - + 将DOS格式文本文件转换成Unix格式 ## 补充说明 **dos2unix命令** 用来将DOS格式的文本文件转换成UNIX格式的(DOS/MAC to UNIX text file format converter)。DOS下的文本文件是以`\r\n`作为断行标志的,表示成十六进制就是0D 0A。而Unix下的文本文件是以\n作为断行标志的,表示成十六进制就是0A。DOS格式的文本文件在Linux底下,用较低版本的vi打开时行尾会显示`^M`,而且很多命令都无法很好的处理这种格式的文件,如果是个shell脚本,。而Unix格式的文本文件在Windows下用Notepad打开时会拼在一起显示。因此产生了两种格式文件相互转换的需求,对应的将UNIX格式文本文件转成成DOS格式的是unix2dos命令。 -### 语法 +### 语法 ``` dos2unix [-hkqV] [-c convmode] [-o file ...] [-n infile outfile ...] ``` -### 选项 +### 选项 ``` -k:保持输出文件的日期不变 @@ -24,11 +24,11 @@ dos2unix [-hkqV] [-c convmode] [-o file ...] [-n infile outfile ...] -n:写入到新文件 ``` -### 参数 +### 参数 参数:需要转换到文件。 -### 实例 +### 实例 最简单的用法就是dos2unix直接跟上文件名: @@ -58,5 +58,10 @@ dos2unix -k -o file1 file2 file3 dos2unix -k -n oldfile newfile ``` +转换当前目录下所有文件 + +``` +find -type f | xargs dos2unix +``` \ No newline at end of file diff --git a/command/du.md b/command/du.md index 6981b1494d0..b86d99869b1 100644 --- a/command/du.md +++ b/command/du.md @@ -1,19 +1,19 @@ du === - + 显示每个文件和目录的磁盘使用空间 ## 补充说明 **du命令** 也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的。 -### 语法 +### 语法 ``` du [选项][文件] ``` -### 选项 +### 选项 ``` -a或-all 显示目录中个别文件的大小。 @@ -33,7 +33,7 @@ du [选项][文件] -l或--count-links 重复计算硬件链接的文件。 ``` -### 实例 +### 实例 显示目录或者文件所占空间: @@ -98,5 +98,10 @@ root@localhost [test]# du 1288 test ``` +显示总和的大小且易读: + +``` +du -sh $dir +``` \ No newline at end of file diff --git a/command/find.md b/command/find.md index cd3e5e8ddaa..de3cad7d810 100644 --- a/command/find.md +++ b/command/find.md @@ -7,13 +7,13 @@ find **find命令** 用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。 -### 语法 +### 语法 ``` find(选项)(参数) ``` -### 选项 +### 选项 ``` -amin<分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算; @@ -73,7 +73,7 @@ find(选项)(参数) -xtype<文件类型>:此参数的效果和指定“-type”参数类似,差别在于它针对符号连接检查。 ``` -### 参数 +### 参数 起始目录:查找文件的起始目录。 @@ -84,7 +84,7 @@ find(选项)(参数) find . -type f -name "*" | xargs grep "140.206.111.111" ``` -#### 根据文件或者正则表达式进行匹配 +#### 根据文件或者正则表达式进行匹配 列出当前目录及子目录下所有文件和文件夹 @@ -111,7 +111,7 @@ find . \( -name "*.txt" -o -name "*.pdf" \) 或 -find . -name "*.txt" -o -name "*.pdf" +find . -name "*.txt" -o -name "*.pdf" ``` 匹配文件路径或者文件 @@ -132,7 +132,7 @@ find . -regex ".*\(\.txt\|\.pdf\)$" find . -iregex ".*\(\.txt\|\.pdf\)$" ``` -#### 否定参数 +#### 否定参数 找出/home下不是以.txt结尾的文件 @@ -140,7 +140,7 @@ find . -iregex ".*\(\.txt\|\.pdf\)$" find /home ! -name "*.txt" ``` -#### 根据文件类型进行搜索 +#### 根据文件类型进行搜索 ``` find . -type 类型参数 @@ -156,7 +156,7 @@ find . -type 类型参数 * **s** 套接字 * **p** Fifo -#### 基于目录深度搜索 +#### 基于目录深度搜索 向下最大深度限制为3 @@ -170,7 +170,7 @@ find . -maxdepth 3 -type f find . -mindepth 2 -type f ``` -#### 根据文件时间戳进行搜索 +#### 根据文件时间戳进行搜索 ``` find . -type f 时间戳 @@ -212,7 +212,7 @@ find . -type f -amin +10 find . -type f -newer file.log ``` -#### 根据文件大小进行匹配 +#### 根据文件大小进行匹配 ``` find . -type f -size 文件大小单元 @@ -245,7 +245,7 @@ find . -type f -size -10k find . -type f -size 10k ``` -#### 删除匹配文件 +#### 删除匹配文件 删除当前目录下所有.txt文件 @@ -253,7 +253,7 @@ find . -type f -size 10k find . -type f -name "*.txt" -delete ``` -#### 根据文件权限/所有权进行匹配 +#### 根据文件权限/所有权进行匹配 当前目录下搜索出权限为777的文件 @@ -279,7 +279,7 @@ find . -type f -user tom find . -type f -group sunk ``` -#### 借助`-exec`选项与其他命令结合使用 +#### 借助`-exec`选项与其他命令结合使用 找出当前目录下所有root的文件,并把所有权更改为用户tom @@ -321,7 +321,7 @@ find . -type f -name "*.txt" -exec printf "File: %s\n" {} \; -exec ./text.sh {} \; ``` -#### 搜索但跳出指定的目录 +#### 搜索但跳出指定的目录 查找当前目录或者子目录下所有.txt文件,但是跳过子目录sk @@ -329,7 +329,7 @@ find . -type f -name "*.txt" -exec printf "File: %s\n" {} \; find . -path "./sk" -prune -o -name "*.txt" -print ``` -#### find其他技巧收集 +#### find其他技巧收集 要列出所有长度为零的文件 @@ -373,5 +373,17 @@ find /data -owner bcotton find ~ -perm -o=r ``` +删除 mac 下自动生成的文件 + +``` +find ./ -name '__MACOSX' -depth -exec rm -rf {} \; +``` + +统计代码行数 + +``` +find . -name "*.java"|xargs cat|grep -v ^$|wc -l # 代码行数统计, 排除空行 +``` + diff --git a/command/fishshell.md b/command/fishshell.md new file mode 100644 index 00000000000..8d65e727c66 --- /dev/null +++ b/command/fishshell.md @@ -0,0 +1,42 @@ +# fishshell + +比 bash 更好用的 shell + +## quick start + +> [fish-shell](http://fishshell.com):强烈推荐 + +配置文件: `fish_config` +Running Commands: 兼容 bash 等shell的命令执行方式 +Getting Help: `help/man cmd -> browser/terminal` +Syntax Highlighting: 实时检查命令是否正确 +Wildcards: 支持缩写 `*` 递归 匹配 +Pipes and Redirections: 使用 `^` 代表 stderr +Autosuggestions: 自动建议, 可以使用 `Ctrl-f / ->` 来补全 +Tab Completions: 更强大的 tab 补全 +Variables: 使用 set 设置 +Exit Status: 使用 `echo $status` 替代 `$?` +Exports (Shell Variables) +Lists: all variables in fish are really lists +Command Substitutions: 使用 `(cmd)` 来执行命令, 而不是 反引号、`$()` +Combiners (And, Or, Not): 不支持使用符合来表示逻辑运算 +Functions:使用 `$argv` 替代 `$1` +Conditionals (If, Else, Switch) / Functions / Loops: 更人性化的写法(参考 py) +Prompt: `function fish_prompt` 实现 +Startup (Where's .bashrc?): `~/.config/fish/config.fish`,更好的方式是 autoloading-function、universal-variables +Autoloading Functions: ` ~/.config/fish/functions/.` +Universal Variables:a variable whose value is shared across all instances of fish + +``` +set name 'czl' # 设置变量,替代 name=czl +echo $name +echo $status # exit status,替代 $? +env # 环境变量 +set -x MyVariable SomeValue # 替代 export +set -e MyVariable +set PATH $PATH /usr/local/bin # 使用 lists 记录 PATH +set -U fish_user_paths /usr/local/bin $fish_user_paths # 永久生效 +touch "testing_"(date +%s)".txt" # command subtitution,替代 `date +%s` +cp file.txt file.txt.bak; and echo 'back success'; or echo 'back fail' # combiner +functions # 列出 fish 下定义的函数 +``` \ No newline at end of file diff --git a/command/gdb.md b/command/gdb.md index 52a6d0e8591..d02397ba061 100644 --- a/command/gdb.md +++ b/command/gdb.md @@ -1,6 +1,6 @@ gdb === - + 功能强大的程序调试器 ## 补充说明 @@ -25,7 +25,7 @@ gdb file <文件名> -加载被调试的可执行程序文件。 +加载被调试的可执行程序文件。 因为一般都在被调试程序所在目录下执行GDB,因而文本名不需要带路径。 (gdb) file gdb-sample @@ -36,7 +36,7 @@ gdb r -Run的简写,运行被调试的程序。 +Run的简写,运行被调试的程序。 如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处。 (gdb) r @@ -55,17 +55,17 @@ gdb -b <行号> -b <函数名称> -b *<函数名称> +b <行号> +b <函数名称> +b *<函数名称> b *<代码地址> d [编号] -b: Breakpoint的简写,设置断点。两可以使用“行号”“函数名称”“执行地址”等方式指定断点位置。 +b: Breakpoint的简写,设置断点。两可以使用“行号”“函数名称”“执行地址”等方式指定断点位置。 其中在函数名称前面加“*”符号表示将断点设置在“由编译器生成的prolog代码处”。如果不了解汇编,可以不予理会此用法。 d: Delete breakpoint的简写,删除指定编号的某个断点,或删除所有断点。断点编号从1开始递增。 -(gdb) b 8 -(gdb) b main -(gdb) b *main +(gdb) b 8 +(gdb) b main +(gdb) b *main (gdb) b *0x804835c (gdb) d @@ -74,11 +74,11 @@ b *<代码地址> d [编号] s, n -s: 执行一行源程序代码,如果此行代码中有函数调用,则进入该函数; -n: 执行一行源程序代码,此行代码中的函数调用也一并执行。 s 相当于其它调试器中的“Step Into (单步跟踪进入)”; +s: 执行一行源程序代码,如果此行代码中有函数调用,则进入该函数; +n: 执行一行源程序代码,此行代码中的函数调用也一并执行。 s 相当于其它调试器中的“Step Into (单步跟踪进入)”; n 相当于其它调试器中的“Step Over (单步跟踪)”。 这两个命令必须在有源代码调试信息的情况下才可以使用(GCC编译时使用“-g”参数)。 -(gdb) s +(gdb) s (gdb) n @@ -89,7 +89,7 @@ n 相当于其它调试器中的“Step Over (单步跟踪)”。 这两个命 si命令类似于s命令,ni命令类似于n命令。所不同的是,这两个命令(si/ni)所针对的是汇编指令,而s/n针对的是源代码。 -(gdb) si +(gdb) si (gdb) ni @@ -100,7 +100,7 @@ n 相当于其它调试器中的“Step Over (单步跟踪)”。 这两个命 Print的简写,显示指定变量(临时变量或全局变量)的值。 -(gdb) p i +(gdb) p i (gdb) p nGlobalVar @@ -109,9 +109,9 @@ n 相当于其它调试器中的“Step Over (单步跟踪)”。 这两个命 display ... undisplay <编号> -display,设置程序中断后欲显示的数据及其格式。 -例如,如果希望每次程序中断后可以看到即将被执行的下一条汇编指令,可以使用命令 -“display /i $pc” +display,设置程序中断后欲显示的数据及其格式。 +例如,如果希望每次程序中断后可以看到即将被执行的下一条汇编指令,可以使用命令 +“display /i $pc” 其中 $pc 代表当前汇编指令,/i 表示以十六进行显示。当需要关心汇编代码时,此命令相当有用。 undispaly,取消先前的display设置,编号从1开始递增。 (gdb) display /i $pc (gdb) undisplay 1 @@ -142,7 +142,7 @@ n 相当于其它调试器中的“Step Over (单步跟踪)”。 这两个命 help [命令名称] -GDB帮助命令,提供对GDB名种命令的解释说明。 +GDB帮助命令,提供对GDB名种命令的解释说明。 如果指定了“命令名称”参数,则显示该命令的详细说明;如果没有指定参数,则分类显示所有GDB命令,供用户进一步浏览和查询。 (gdb) help @@ -153,13 +153,13 @@ n 相当于其它调试器中的“Step Over (单步跟踪)”。 这两个命 -### 语法 +### 语法 ``` gdb(选项)(参数) ``` -### 选项 +### 选项 ``` -cd:设置工作目录; @@ -169,11 +169,11 @@ gdb(选项)(参数) -s:设置读取的符号表文件。 ``` -### 参数 +### 参数 文件:二进制可执行程序。 -### 实例 +### 实例 以下是linux下dgb调试的一个实例,先给出一个示例用的小程序,C语言代码: @@ -457,5 +457,50 @@ eax 0xbffff6a4 -1073744220 The program is running. exit anyway? (y or n) ``` +## 补充内容 + +> gdb 教程:[慕课网-Linux C语言指针与内存-第三章](http://www.imooc.com/learn/394) + +如果删除源代码, 就无法显示行号等辅助信息了 + +``` +gcc -g gdb.c -o gdb.out # -g 支持gdb调试; -o 输出, 默认为 a.out + +gdb gdb.out # 进入 gdb 调试环境 +enter # 继续执行上条命令 +l # 列出源代码, 默认 10 行, 按 l 继续 + +start # 开始单步调试, 默认 main() 第一行 +p a # 查看 a 变量的值 +n # 继续到下一行 +s # 进入子函数 +bt # 查看函数栈 +f 1 # 切换函数栈 + +q 退出调试 +``` + +```c +# 测试用代码 +#include + +void change(int a, int b){ + int tmp=a; + a=b; b=tmp; +} + +void change2(int *a, int *b){ + int tmp=*a; + *a=*b; *b=tmp; +} + +int main(){ + int a=5,b=3; + change(a,b); + printf("change:\na=%d\nb=%d\n", a,b); + change2(&a,&b); + printf("change2:\na=%d\nb=%d\n", a,b); +} +``` \ No newline at end of file diff --git a/command/gzip.md b/command/gzip.md index 7d4c58cbda2..b9b96b0ad89 100644 --- a/command/gzip.md +++ b/command/gzip.md @@ -9,13 +9,13 @@ gzip gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。gzip不仅可以用来压缩大的、较少使用的文件以节省磁盘空间,还可以和tar命令一起构成Linux操作系统中比较流行的压缩文件格式。据统计,gzip命令对文本文件有60%~70%的压缩率。减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。 -### 语法 +### 语法 ``` gzip(选项)(参数) ``` -### 选项 +### 选项 ``` -a或——ascii:使用ASCII文字模式; @@ -35,14 +35,14 @@ gzip(选项)(参数) -<压缩效率>:压缩效率是一个介于1~9的数值,预设值为“6”,指定愈大的数值,压缩效率就会愈高; --best:此参数的效果和指定“-9”参数相同; --fast:此参数的效果和指定“-1”参数相同。 --num 用指定的数字num调整压缩的速度,-1或--fast表示最快压缩方法(低压缩比),-9或--best表示最慢压缩方法(高压缩比)。系统缺省值为6。 +-num 用指定的数字num调整压缩的速度,-1或--fast表示最快压缩方法(低压缩比),-9或--best表示最慢压缩方法(高压缩比)。系统缺省值为6。 ``` -### 参数 +### 参数 文件列表:指定要压缩的文件列表。 -### 实例 +### 实例 把test6目录下的每个文件压缩成.gz文件 diff --git a/command/history.md b/command/history.md index 5ff357ced40..8b9653779a5 100644 --- a/command/history.md +++ b/command/history.md @@ -11,13 +11,13 @@ history 历史命令是被保存在内存中的,当退出或者登录shell时,会自动保存或读取。在内存中,历史命令仅能够存储1000条历史命令,该数量是由环境变量`HISTSIZE`进行控制。 -### 语法 +### 语法 ``` history(选项)(参数) ``` -### 选项 +### 选项 ``` -c:清空当前历史命令; @@ -26,11 +26,11 @@ history(选项)(参数) -w:将当前历史命令缓冲区命令写入历史命令文件中。 ``` -### 参数 +### 参数 n:打印最近的n条历史命令。 -### 实例 +### 实例 使用history命令显示最近使用的10条历史命令,输入如下命令: @@ -63,4 +63,15 @@ n:打印最近的n条历史命令。 [root@localhost ~]# history -c ``` +更多实例: + +``` +history -cw +`~/.bash_history`: 保存历史命令 +`/etc/profile` -> HISSIZE: 历史命令保存数量 +推荐添加 h -> history, hsi -> history|grep 别名 +`!n`: 执行第 n 条历史命令 +`!xxx`: 执行最后一条 xxx 开头的命令 +``` + diff --git a/command/hostname.md b/command/hostname.md index 2fd65458b4a..92b0b676eb7 100644 --- a/command/hostname.md +++ b/command/hostname.md @@ -1,19 +1,19 @@ hostname === - + 显示和设置系统的主机名 ## 补充说明 **hostname命令** 用于显示和设置系统的主机名称。环境变量HOSTNAME也保存了当前的主机名。在使用hostname命令设置主机名后,系统并不会永久保存新的主机名,重新启动机器之后还是原来的主机名。如果需要永久修改主机名,需要同时修改`/etc/hosts`和`/etc/sysconfig/network`的相关内容。 -### 语法 +### 语法 ``` hostname(选项)(参数) ``` -### 选项 +### 选项 ``` -v:详细信息模式; @@ -25,15 +25,20 @@ hostname(选项)(参数) -y:显示NIS域名。 ``` -### 参数 +### 参数 主机名:指定要设置的主机名。 -### 实例 +### 实例 ``` [root@AY1307311912260196fcZ ~]# hostname AY1307311912260196fcZ + +# change hostname +hostname newname # for now +vi /etc/hosts # forever +reboot ``` diff --git a/command/iptables.md b/command/iptables.md index 89359a28c19..f408cae0a5b 100644 --- a/command/iptables.md +++ b/command/iptables.md @@ -40,13 +40,13 @@ Linux上常用的防火墙软件 -### 语法 +### 语法 ``` iptables(选项)(参数) ``` -### 选项 +### 选项 ```bash -t, --table table 对指定的表 table 进行操作, table 必须是 raw, nat,filter,mangle 中的一个。如果不指定此选项,默认的是 filter 表。 @@ -124,14 +124,14 @@ iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协 3. mangle功能:修改报文原数据,是5个链都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING 我们修改报文原数据就是来修改TTL的。能够实现将数据包的元数据拆开,在里面做标记/修改内容的。而防火墙标记,其实就是靠mangle来实现的。 - + 小扩展: - 对于filter来讲一般只能做在3个链上:INPUT ,FORWARD ,OUTPUT - 对于nat来讲一般也只能做在3个链上:PREROUTING ,OUTPUT ,POSTROUTING - 而mangle则是5个链都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING - -iptables/netfilter(这款软件)是工作在用户空间的,它可以让规则进行生效的,本身不是一种服务,而且规则是立即生效的。而我们iptables现在被做成了一个服务,可以进行启动,停止的。启动,则将规则直接生效,停止,则将规则撤销。 + +iptables/netfilter(这款软件)是工作在用户空间的,它可以让规则进行生效的,本身不是一种服务,而且规则是立即生效的。而我们iptables现在被做成了一个服务,可以进行启动,停止的。启动,则将规则直接生效,停止,则将规则撤销。 iptables还支持自己定义链。但是自己定义的链,必须是跟某种特定的链关联起来的。在一个关卡设定,指定当有数据的时候专门去找某个特定的链来处理,当那个链处理完之后,再返回。接着在特定的链中继续检查。 @@ -159,40 +159,40 @@ iptables还支持自己定义链。但是自己定义的链,必须是跟某种 - **LOG** :日志记录。 ```bash - ┏╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍┓ - ┌───────────────┐ ┃ Network ┃ - │ table: filter │ ┗━━━━━━━┳━━━━━━━┛ - │ chain: INPUT │◀────┐ │ - └───────┬───────┘ │ ▼ - │ │ ┌───────────────────┐ - ┌ ▼ ┐ │ │ table: nat │ - │local process│ │ │ chain: PREROUTING │ - └ ┘ │ └─────────┬─────────┘ - │ │ │ + ┏╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍┓ + ┌───────────────┐ ┃ Network ┃ + │ table: filter │ ┗━━━━━━━┳━━━━━━━┛ + │ chain: INPUT │◀────┐ │ + └───────┬───────┘ │ ▼ + │ │ ┌───────────────────┐ + ┌ ▼ ┐ │ │ table: nat │ + │local process│ │ │ chain: PREROUTING │ + └ ┘ │ └─────────┬─────────┘ + │ │ │ ▼ │ ▼ ┌─────────────────┐ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ │ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ │table: nat │ Routing decision └───── outing decision ─────▶│chain: PREROUTING│ ┅┅┅┅┅┅┅┅┅┳┅┅┅┅┅┅┅┅┅ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ └────────┬────────┘ - │ │ - ▼ │ - ┌───────────────┐ │ - │ table: nat │ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ │ - │ chain: OUTPUT │ ┌─────▶ outing decision ◀──────────────┘ - └───────┬───────┘ │ ┅┅┅┅┅┅┅┅┳┅┅┅┅┅┅┅┅ - │ │ │ - ▼ │ ▼ - ┌───────────────┐ │ ┌────────────────────┐ - │ table: filter │ │ │ chain: POSTROUTING │ - │ chain: OUTPUT ├────┘ └──────────┬─────────┘ - └───────────────┘ │ - ▼ - ┏╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍┓ - ┃ Network ┃ - ┗━━━━━━━━━━━━━━━┛ -``` - - -### 实例 + │ │ + ▼ │ + ┌───────────────┐ │ + │ table: nat │ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ │ + │ chain: OUTPUT │ ┌─────▶ outing decision ◀──────────────┘ + └───────┬───────┘ │ ┅┅┅┅┅┅┅┅┳┅┅┅┅┅┅┅┅ + │ │ │ + ▼ │ ▼ + ┌───────────────┐ │ ┌────────────────────┐ + │ table: filter │ │ │ chain: POSTROUTING │ + │ chain: OUTPUT ├────┘ └──────────┬─────────┘ + └───────────────┘ │ + ▼ + ┏╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍┓ + ┃ Network ┃ + ┗━━━━━━━━━━━━━━━┛ +``` + + +### 实例 #### 空当前的所有规则和计数 @@ -205,14 +205,14 @@ iptables -Z # 清空计数 #### 配置允许ssh端口连接 ```bash -iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT +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 -iptables -A INPUT -i lo -j ACCEPT +iptables -A INPUT -i lo -j ACCEPT #本地圆环地址就是那个127.0.0.1,是本机上使用的,它进与出都设置为允许 iptables -A OUTPUT -o lo -j ACCEPT ``` @@ -245,7 +245,7 @@ iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 已经建立 ```bash cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak # 任何改动之前先备份,请保持这一优秀的习惯 -iptables-save > /etc/sysconfig/iptables +iptables-save > /etc/sysconfig/iptables cat /etc/sysconfig/iptables ``` @@ -331,19 +331,19 @@ iptables -A FORWARD -o eth0 ``` iptables -L -n -v Chain INPUT (policy DROP 48106 packets, 2690K bytes) - pkts bytes target prot opt in out source destination - 5075 589K ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 + pkts bytes target prot opt in out source destination + 5075 589K ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 191K 90M ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 1499K 133M ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 4364K 6351M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED - 6256 327K ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 + 6256 327K ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) - pkts bytes target prot opt in out source destination + pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 3382K packets, 1819M bytes) - pkts bytes target prot opt in out source destination - 5075 589K ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0 + pkts bytes target prot opt in out source destination + 5075 589K ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0 ``` #### 启动网络转发规则 @@ -371,14 +371,14 @@ iptables -A INPUT -p tcp -m string --algo kmp --string "test" -j REJECT --reject iptables -L # Chain INPUT (policy ACCEPT) -# target prot opt source destination +# target prot opt source destination # REJECT tcp -- anywhere anywhere STRING match "test" ALGO name kmp TO 65535 reject-with tcp-reset -# +# # Chain FORWARD (policy ACCEPT) -# target prot opt source destination -# +# target prot opt source destination +# # Chain OUTPUT (policy ACCEPT) -# target prot opt source destination +# target prot opt source destination ``` #### 阻止Windows蠕虫的攻击 @@ -393,5 +393,126 @@ iptables -I INPUT -j DROP -p tcp -s 0.0.0.0/0 -m string --algo kmp --string "cmd iptables -A INPUT -p tcp --syn -m limit --limit 5/second -j ACCEPT ``` +## 更多实例 +> 用iptables搭建一套强大的安全防护盾 http://www.imooc.com/learn/389 + +iptables: linux 下应用层防火墙工具 + +iptables 5链: 对应 Hook point +netfilter: linux 操作系统核心层内部的一个数据包处理模块 +Hook point: 数据包在 netfilter 中的挂载点; `PRE_ROUTING / INPUT / OUTPUT / FORWARD / POST_ROUTING` + +iptables & netfilter +![](http://7xq89b.com1.z0.glb.clouddn.com/netfilter&iptables.jpg) + +iptables 4表5链 +![](http://7xq89b.com1.z0.glb.clouddn.com/iptables-data-stream.jpg) + +iptables rules +![](http://7xq89b.com1.z0.glb.clouddn.com/iptables-rules.jpg) + +- 4表 + +**filter**: 访问控制 / 规则匹配 +**nat**: 地址转发 + mangle / raw + + - 规则 + +数据访问控制: ACCEPT / DROP / REJECT +数据包改写(nat -> 地址转换): snat / dnat +信息记录: log + +## 使用场景实例 +- 场景一 + +开放 tcp 10-22/80 端口 +开放 icmp +其他未被允许的端口禁止访问 + +存在的问题: 本机无法访问本机; 本机无法访问其他主机 + +- 场景二 + +ftp: 默认被动模式(服务器产生随机端口告诉客户端, 客户端主动连接这个端口拉取数据) +vsftpd: 使 ftp 支持主动模式(客户端产生随机端口通知服务器, 服务器主动连接这个端口发送数据) + +- 场景三 + +允许外网访问: +web +http -> 80/tcp; https -> 443/tcp +mail +smtp -> 25/tcp; smtps -> 465/tcp +pop3 -> 110/tcp; pop3s -> 995/tcp +imap -> 143/tcp + +内部使用: +file +nfs -> 123/udp +samba -> 137/138/139/445/tcp +ftp -> 20/21/tcp +remote +ssh -> 22/tcp +sql +mysql -> 3306/tcp +oracle -> 1521/tcp + +- 场景四 + +nat 转发 + +- 场景五 + +防CC攻击 + +``` +iptables -L -F -A -D # list flush append delete +# 场景一 +iptables -I INPUT -p tcp --dport 80 -j ACCEPT # 允许 tcp 80 端口 +iptables -I INPUT -p tcp --dport 10:22 -j ACCEPT # 允许 tcp 10-22 端口 +iptables -I INPUT -p icmp -j ACCEPT # 允许 icmp +iptables -A INPUT -j REJECT # 添加一条规则, 不允许所有 + +# 优化场景一 +iptables -I INPUT -i lo -j ACCEPT # 允许本机访问 +iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许访问外网 +iptables -I INPUT -p tcp --dport 80 -s 10.10.188.233 -j ACCEPT # 只允许固定ip访问80 + +# 场景二 +vi /etc/vsftpd/vsftpd.conf # 使用 vsftpd 开启 ftp 主动模式 +port_enable=yes +connect_from_port_20=YES +iptables -I INPUT -p tcp --dport 21 -j ACCEPT + +vi /etc/vsftpd/vsftpd.conf # 建议使用 ftp 被动模式 +pasv_min_port=50000 +pasv_max_port=60000 +iptables -I INPUT -p tcp --dport 21 -j ACCEPT +iptables -I INPUT -p tcp --dport 50000:60000 -j ACCEPT + +# 还可以使用 iptables 模块追踪来自动开发对应的端口 + +# 场景三 +iptables -I INPUT -i lo -j ACCEPT # 允许本机访问 +iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许访问外网 +iptables -I INPUT -s 10.10.155.0/24 -j ACCEPT # 允许内网访问 +iptables -I INPUT -p tcp -m multiport --dports 80,1723 -j ACCEPT # 允许端口, 80 -> http, 1723 -> vpn +iptables -A INPUT -j REJECT # 添加一条规则, 不允许所有 + +iptables-save # 保存设置到配置文件 + +# 场景四 +iptables -t nat -L # 查看 nat 配置 + +iptables -t nat -A POST_ROUTING -s 10.10.177.0/24 -j SNAT --to 10.10.188.232 # SNAT +vi /etc/sysconfig/network # 配置网关 + +iptables -t nat -A POST_ROUTING -d 10.10.188.232 -p tcp --dport 80 -j DNAT --to 10.10.177.232:80 # DNAT + +#场景五 +iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT # 限制并发连接访问数 +iptables -I INPUT -m limit --limit 3/hour --limit-burst 10 -j ACCEPT # limit模块; --limit-burst 默认为5 +``` diff --git a/command/kill.md b/command/kill.md index 3c762b337f2..cf4a80e969a 100644 --- a/command/kill.md +++ b/command/kill.md @@ -1,19 +1,20 @@ kill === - + 删除执行中的程序或工作 ## 补充说明 **kill命令** 用来删除执行中的程序或工作。kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序。程序或工作的编号可利用ps指令或job指令查看。 -### 语法 +### 语法 ``` kill(选项)(参数) +xkill # 图形化关闭程序 ``` -### 选项 +### 选项 ``` -a:当处理当前进程时,不限制命令名和进程号的对应关系; @@ -23,11 +24,11 @@ kill(选项)(参数) -u:指定用户。 ``` -### 参数 +### 参数 进程或作业识别号:指定要删除的进程或作业。 -### 实例 +### 实例 列出所有信号名称: @@ -51,7 +52,7 @@ kill(选项)(参数) 63) SIGRTMAX-1 64) SIGRTMAX ``` -只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略, **下面是常用的信号:** +只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略, **下面是常用的信号:** ``` HUP 1 终端断线 diff --git a/command/locate.md b/command/locate.md index 39cb7760c3b..60c87d12a2d 100644 --- a/command/locate.md +++ b/command/locate.md @@ -1,7 +1,7 @@ locate === -Apache服务器的性能测试工具 +比 find 好用的文件查找工具 ## 补充说明 @@ -13,14 +13,13 @@ locate指定用在搜寻符合条件的档案,它会去储存档案与目录 locate指令和find找寻档案的功能类似,但locate是透过update程序将硬盘中的所有档案和目录资料先建立一个索引数据库,在 执行loacte时直接找该索引,查询速度会较快,索引数据库一般是由操作系统管理,但也可以直接下达update强迫系统立即修改索引数据库。 - -### 语法 +### 语法 ``` locate [选择参数] [样式] ``` -### 选项 +### 选项 ``` -e 将排除在寻找的范围之外。 @@ -35,7 +34,7 @@ locate [选择参数] [样式] -V 显示程式的版本讯息 ``` -### 实例 +### 实例 实例1:查找和pwd相关的所有文件 @@ -58,7 +57,7 @@ root ~ # locate pwd /usr/share/help/el/empathy/irc-join-pwd.page ``` -实例2: 搜索etc目录下所有以sh开头的文件 +实例2: 搜索etc目录下所有以sh开头的文件 ``` root ~ # locate /etc/sh diff --git a/command/lsof.md b/command/lsof.md index 7d4a0cf8052..ed80d539364 100644 --- a/command/lsof.md +++ b/command/lsof.md @@ -1,7 +1,7 @@ lsof === - -显示Linux系统当前已打开的所有文件列表 + +显示Linux系统当前已打开的所有文件列表 `lsof -p pid` ## 补充说明 @@ -9,13 +9,13 @@ lsof 在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。 -### 语法 +### 语法 ``` lsof(选项) ``` -### 选项 +### 选项 ``` -a:列出打开文件存在的进程; @@ -32,7 +32,7 @@ lsof(选项) -v:显示版本信息。 ``` -### 实例 +### 实例 ``` lsof @@ -64,7 +64,7 @@ events/0 6 root txt unknown /proc events/1 7 root cwd DIR 8,2 4096 2 / ``` - **lsof输出各列信息的意义如下:** + **lsof输出各列信息的意义如下:** * COMMAND:进程的名称 * PID:进程标识符 @@ -127,5 +127,10 @@ events/1 7 root cwd DIR 8,2 4096 2 / 9. NODE:索引节点(文件在磁盘上的标识) 10. NAME:打开文件的确切名称 +列出指定进程号所打开的文件: + +``` +lsof -p $pid +``` \ No newline at end of file diff --git a/command/mtr.md b/command/mtr.md new file mode 100644 index 00000000000..d73de37717b --- /dev/null +++ b/command/mtr.md @@ -0,0 +1,12 @@ +mtr +=== + +比 traceroute 好用 + +## 实例 + +``` +apk add mtr # 安装 + +mtr -r www.baidu.com # 使用 +``` \ No newline at end of file diff --git a/command/openssl.md b/command/openssl.md index 7f33ade7f4a..e8c8de25000 100644 --- a/command/openssl.md +++ b/command/openssl.md @@ -13,19 +13,19 @@ OpenSSL有两种运行模式:交互模式和批处理模式。 OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库、SSL协议库以及应用程序。OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的。  - **对称加密算法** + **对称加密算法** OpenSSL一共提供了8种对称加密算法,其中7种是分组加密算法,仅有的一种流加密算法是RC4。这7种分组加密算法分别是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支持电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种常用的分组密码加密模式。其中,AES使用的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是128位,其它算法使用的则是64位。事实上,DES算法里面不仅仅是常用的DES算法,还支持三个密钥和两个密钥3DES算法。  - **非对称加密算法** + **非对称加密算法** OpenSSL一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH算法一般用户密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。  - **信息摘要算法** + **信息摘要算法** OpenSSL实现了5种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。SHA算法事实上包括了SHA和SHA1两种信息摘要算法,此外,OpenSSL还实现了DSS标准中规定的两种信息摘要算法DSS和DSS1。  - **密钥和证书管理** + **密钥和证书管理** 密钥和证书管理是PKI的一个重要组成部分,OpenSSL为之提供了丰富的功能,支持多种标准。  @@ -48,7 +48,7 @@ openssl rand -base64 10 nU9LlHO5nsuUvw== -**2、消息摘要算法应用例子** +**2、消息摘要算法应用例子** 用SHA1算法计算文件file.txt的哈西值,输出到stdout: @@ -86,7 +86,7 @@ nU9LlHO5nsuUvw== # openssl sha1 -verify rsapublic.pem -signature rsasign.bin file.txt ``` - **3、对称加密应用例子** + **3、对称加密应用例子** 对称加密应用例子,用DES3算法的CBC模式加密文件plaintext.doc,加密结果输出到文件ciphertext.bin。 @@ -118,7 +118,7 @@ nU9LlHO5nsuUvw== # openssl rc5 -in plaintext.doc -out ciphertext.bin -S C62CB1D49F158ADC -iv E9EDACA1BD7090C6 -K 89D4B1678D604FAA3DBFFD030A314B29 ``` - **4、Diffie-Hellman应用例子** + **4、Diffie-Hellman应用例子** 使用生成因子2和随机的1024-bit的素数产生D0ffie-Hellman参数,输出保存到文件dhparam.pem @@ -132,7 +132,7 @@ nU9LlHO5nsuUvw== # openssl dhparam -in dhparam.pem -noout -C ``` - **5、DSA应用例子应用例子** + **5、DSA应用例子应用例子** 生成1024位DSA参数集,并输出到文件dsaparam.pem。 @@ -158,7 +158,7 @@ nU9LlHO5nsuUvw== # openssl dsa -in dsaprivatekey.pem -out dsaprivatekey.pem -des3 -passin ``` - **6、RSA应用例子** + **6、RSA应用例子** 产生1024位RSA私匙,用3DES加密它,口令为trousers,输出到文件rsaprivatekey.pem @@ -220,5 +220,13 @@ cert.pem为X.509证书文件,用私匙key,pem为mail.txt签名,证书被包 # openssl smime -verify -in mail.sgn -out mail.txt ``` +更多实例: + +``` +openssl version -a +openssl help +openssl genrsa -aes128 -out fd.key 2048 # pem format +openssl rsa -text -in fd.key +``` diff --git a/command/ps.md b/command/ps.md index 0d9f6126361..e8ab177537e 100644 --- a/command/ps.md +++ b/command/ps.md @@ -7,13 +7,13 @@ ps **ps命令** 用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。 -### 语法 +### 语法 ``` ps(选项) ``` -### 选项 +### 选项 ``` -a:显示所有终端机下执行的程序,除了阶段作业领导者之外。 diff --git a/command/rm.md b/command/rm.md index 7a8612ae022..71c54a87254 100644 --- a/command/rm.md +++ b/command/rm.md @@ -9,13 +9,13 @@ rm 注意:使用rm命令要格外小心。因为一旦删除了一个文件,就无法再恢复它。所以,在删除文件之前,最好再看一下文件的内容,确定是否真要删除。rm命令可以用-i选项,这个选项在使用文件扩展名字符删除多个文件时特别有用。使用这个选项,系统会要求你逐一确定是否要删除。这时,必须输入y并按Enter键,才能删除文件。如果仅按Enter键或其他字符,文件不会被删除。 -### 语法 +### 语法 ``` rm (选项)(参数) ``` -### 选项 +### 选项 ``` -d:直接把欲删除的目录的硬连接数据删除成0,删除该目录; @@ -26,11 +26,11 @@ rm (选项)(参数) -v:显示指令的详细执行过程。 ``` -### 参数 +### 参数 文件:指定被删除的文件列表,如果参数中含有目录,则必须加上`-r`或者`-R`选项。 -### 实例 +### 实例 交互式删除当前目录下的文件test和example @@ -51,14 +51,14 @@ Remove example ?y(删除文件example) **rm 命令删除文件** ```bash -# rm 文件1 文件2 ... +# rm 文件1 文件2 ... rm testfile.txt ``` **rm 命令删除目录** -> rm -r [目录名称] -> -r 表示递归地删除目录下的所有文件和目录。 +> rm -r [目录名称] +> -r 表示递归地删除目录下的所有文件和目录。 > -f 表示强制删除 ``` @@ -68,7 +68,7 @@ rm -r testdir **删除操作前有确认提示** -> rm -i [文件/目录] +> rm -i [文件/目录] ``` rm -r -i testdir @@ -76,7 +76,7 @@ rm -r -i testdir **rm 忽略不存在的文件或目录** -> -f 选项(LCTT 译注:即 “force”)让此次操作强制执行,忽略错误提示 +> -f 选项(LCTT 译注:即 “force”)让此次操作强制执行,忽略错误提示 ``` rm -f [文件...] @@ -93,7 +93,7 @@ rm -I file1 file2 file3 **删除根目录** -> 当然,删除根目录(/)是 Linux 用户最不想要的操作,这也就是为什么默认 rm 命令不支持在根目录上执行递归删除操作。 +> 当然,删除根目录(/)是 Linux 用户最不想要的操作,这也就是为什么默认 rm 命令不支持在根目录上执行递归删除操作。 > 然而,如果你非得完成这个操作,你需要使用 --no-preserve-root 选项。当提供此选项,rm 就不会特殊处理根目录(/)了。 ``` @@ -106,5 +106,4 @@ rm -I file1 file2 file3 rm -v [文件/目录] ``` - diff --git a/command/rpm.md b/command/rpm.md index 312312f7fa0..a7d93b79c5d 100644 --- a/command/rpm.md +++ b/command/rpm.md @@ -1,19 +1,19 @@ rpm === - + RPM软件包的管理工具 ## 补充说明 **rpm命令** 是RPM软件包的管理工具。rpm原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM套件管理方式的出现,让Linux易于安装,升级,间接提升了Linux的适用度。 -### 语法 +### 语法 ``` rpm(选项)(参数) ``` -### 选项 +### 选项 ``` -a:查询所有套件; @@ -35,13 +35,13 @@ rpm(选项)(参数) -vv:详细显示指令执行过程,便于排错。 ``` -### 参数 +### 参数 软件包:指定要操纵的rpm软件包。 -### 实例 +### 实例 - **如何安装rpm软件包** + **如何安装rpm软件包** rpm软件包的安装可以使用程序rpm来完成。执行下面的命令: @@ -66,7 +66,7 @@ rpm -ivh your-package.rpm 此包需要的一些软件你没有安装可以用`rpm --nodeps -i`来忽略此信息,也就是说`rpm -i --force --nodeps`可以忽略所有依赖关系和文件问题,什么包都能安装上,但这种强制安装的软件包不能保证完全发挥功能。 - **如何安装.src.rpm软件包** + **如何安装.src.rpm软件包** 有些软件包是以.src.rpm结尾的,这类软件包是包含了源代码的rpm包,在安装时需要进行编译。这类软件包有两种安装方法: @@ -99,7 +99,7 @@ rpmbuild -bb your-package.specs #一个和你的软件包同名的specs文 执行`rpm -i new-package.rpm`即可安装完成。 - **如何卸载rpm软件包** + **如何卸载rpm软件包** 使用命令`rpm -e`包名,包名可以包含版本号等信息,但是不可以有后缀.rpm,比如卸载软件包proftpd-1.2.8-1,可以使用下列格式: @@ -127,7 +127,7 @@ rpm -e proftpd-1 这说明这个软件被其他软件需要,不能随便卸载,可以用rpm -e --nodeps强制卸载 - **如何不安装但是获取rpm包中的文件** + **如何不安装但是获取rpm包中的文件** 使用工具rpm2cpio和cpio @@ -139,7 +139,7 @@ rpm2cpio xxx.rpm | cpio --extract --make-directories 参数i和extract相同,表示提取文件。v表示指示执行进程,d和make-directory相同,表示根据包中文件原来的路径建立目录,m表示保持文件的更新时间。 - **如何查看与rpm包相关的文件和其他信息** + **如何查看与rpm包相关的文件和其他信息** 下面所有的例子都假设使用软件包mysql-3.23.54a-11 @@ -210,5 +210,33 @@ rpm -qf /usr/share/doc/proftpd-1.2.8/rfc/rfc0959.txt proftpd-1.2.8-1 ``` +## 更多实例 +> 库依赖: http://rpmfind.net/ + +源码包 -> 编译 -> 二进制包(rpm 包 / 系统默认包) + +rpm 命名规则: 软件(软件名, 软件版本) + 系统(os 版本, os 位数) +rpm 校验: SM5DLUGT -> size modified(类型/权限) md5 device L(文件路径) user group time(modified time) + +yum: 解决 rpm 依赖的问题 + +``` +# rpm +mysql57-community-release-el6-8.noarch.rpm # 一个 rpm 包的例子 +/var/lib/rpm/ # 包全名 -> 包名 的数据库 + +rpm -Uivh --dodeps xxx # upgrade install verbose hash +rpm -qilpfa|grep xxx # query info list(rpm包安装后的文件位置) package(rpm 包) file(文件属于哪个rpm文件) all +rpm -e # erase +rpm -V # verify +rpm2cpio | cpio -idv + +# rpm 默认安装位置 +/etc/ 配置文件 +/usr/bin/ 可执行文件 +/urs/lib/ 程序使用的函数库 +/usr/share/doc/ 使用手册 +/usr/share/man/ manual +``` \ No newline at end of file diff --git a/command/rsync.md b/command/rsync.md index 2a0da87359d..eb46597f9e8 100644 --- a/command/rsync.md +++ b/command/rsync.md @@ -1,13 +1,13 @@ rsync === - + 远程数据同步工具 ## 补充说明 **rsync命令** 是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。 rsync是一个功能非常强大的工具,其命令也有很多功能特色选项,我们下面就对它的选项一一进行分析说明。 -### 语法 +### 语法 ``` rsync [OPTION]... SRC DEST @@ -27,7 +27,7 @@ rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST] 5. 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。如:`rsync -av /databack root@192.168.78.192::www` 6. 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。如:`rsync -v rsync://192.168.78.192/www` -### 选项 +### 选项 ``` -v, --verbose 详细模式输出。 @@ -93,9 +93,9 @@ rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST] -h, --help 显示帮助信息。 ``` -### 实例 +### 实例 - **SSH方式** + **SSH方式** 首先在服务端启动ssh服务: @@ -104,7 +104,7 @@ service sshd start 启动 sshd: [确定] ``` - **使用rsync进行同步** + **使用rsync进行同步** 接下来就可以在客户端使用rsync命令来备份服务端上的数据了,SSH方式是通过系统用户来进行备份的,如下: @@ -128,7 +128,7 @@ total size is 100663363 speedup is 1024.19 上面的信息描述了整个的备份过程,以及总共备份数据的大小。 - **后台服务方式** + **后台服务方式** 启动rsync服务,编辑`/etc/xinetd.d/rsync`文件,将其中的`disable=yes`改为`disable=no`,并重启xinetd服务,如下: @@ -222,5 +222,4 @@ sent 258 bytes received 76 bytes 95.43 bytes/sec total size is 150995011 speedup is 452080.87 ``` - \ No newline at end of file diff --git a/command/rz.md b/command/rz.md new file mode 100644 index 00000000000..187c547a52d --- /dev/null +++ b/command/rz.md @@ -0,0 +1,11 @@ +# rz + +文件上传 + +## quick start + +``` +apk add lrzsz + +rz +``` \ No newline at end of file diff --git a/command/ss.md b/command/ss.md index c9872c2e3a6..605bb486bec 100644 --- a/command/ss.md +++ b/command/ss.md @@ -1,7 +1,7 @@ ss === -获取socket统计信息,iproute2 包附带的另一个工具,允许你查询 socket 的有关统计信息。 +比 netstat 好用的socket统计信息,iproute2 包附带的另一个工具,允许你查询 socket 的有关统计信息。 ## 补充说明 @@ -11,14 +11,14 @@ ss 天下武功唯快不破。ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢。 -### 语法 +### 语法 ``` ss [参数] ss [参数] [过滤] ``` -### 选项 +### 选项 ``` -h, --help 帮助信息 @@ -49,7 +49,7 @@ ss [参数] [过滤] FILTER := [ state TCP-STATE ] [ EXPRESSION ] ``` -### 实例 +### 实例 ```bash ss -t -a # 显示TCP连接 @@ -69,8 +69,8 @@ time ss # 匹配远程地址和端口号 # ss dst ADDRESS_PATTERN ss dst 192.168.1.5 -ss dst 192.168.119.113:http -ss dst 192.168.119.113:smtp +ss dst 192.168.119.113:http +ss dst 192.168.119.113:smtp ss dst 192.168.119.113:443 # 匹配本地地址和端口号 @@ -87,22 +87,22 @@ ss src 192.168.119.103:25 ```bash # ss dport OP PORT 远程端口和一个数比较; # ss sport OP PORT 本地端口和一个数比较 -# OP 可以代表以下任意一个: +# OP 可以代表以下任意一个: # <= or le : 小于或等于端口号 # >= or ge : 大于或等于端口号 # == or eq : 等于端口号 # != or ne : 不等于端口号 # < or gt : 小于端口号 # > or lt : 大于端口号 -ss sport = :http -ss dport = :http -ss dport \> :1024 -ss sport \> :1024 -ss sport \< :32000 -ss sport eq :22 -ss dport != :22 -ss state connected sport = :http -ss \( sport = :http or sport = :https \) +ss sport = :http +ss dport = :http +ss dport \> :1024 +ss sport \> :1024 +ss sport \< :32000 +ss sport eq :22 +ss dport != :22 +ss state connected sport = :http +ss \( sport = :http or sport = :https \) ss -o state fin-wait-1 \( sport = :http or sport = :https \) dst 192.168.1/24 ``` @@ -110,8 +110,8 @@ ss -o state fin-wait-1 \( sport = :http or sport = :https \) dst 192.168.1/24 ```bash ss -4 state closing -# ss -4 state FILTER-NAME-HERE -# ss -6 state FILTER-NAME-HERE +# ss -4 state FILTER-NAME-HERE +# ss -6 state FILTER-NAME-HERE # FILTER-NAME-HERE 可以代表以下任何一个: # established、 syn-sent、 syn-recv、 fin-wait-1、 fin-wait-2、 time-wait、 closed、 close-wait、 last-ack、 listen、 closing、 # all : 所有以上状态 @@ -121,20 +121,20 @@ ss -4 state closing # big : 和bucket相反. ``` - **显示ICP连接** + **显示ICP连接** ``` [root@localhost ~]# ss -t -a -State Recv-Q Send-Q Local Address:Port Peer Address:Port -LISTEN 0 0 *:3306 *:* -LISTEN 0 0 *:http *:* -LISTEN 0 0 *:ssh *:* -LISTEN 0 0 127.0.0.1:smtp *:* -ESTAB 0 0 112.124.15.130:42071 42.156.166.25:http -ESTAB 0 0 112.124.15.130:ssh 121.229.196.235:33398 +State Recv-Q Send-Q Local Address:Port Peer Address:Port +LISTEN 0 0 *:3306 *:* +LISTEN 0 0 *:http *:* +LISTEN 0 0 *:ssh *:* +LISTEN 0 0 127.0.0.1:smtp *:* +ESTAB 0 0 112.124.15.130:42071 42.156.166.25:http +ESTAB 0 0 112.124.15.130:ssh 121.229.196.235:33398 ``` - **显示 Sockets 摘要** + **显示 Sockets 摘要** ``` [root@localhost ~]# ss -s @@ -142,54 +142,54 @@ Total: 172 (kernel 189) TCP: 10 (estab 2, closed 4, orphaned 0, synrecv 0, timewait 0/0), ports 5 Transport Total ip IPv6 -* 189 - - -RAW 0 0 0 -UDP 5 5 0 -TCP 6 6 0 -INET 11 11 0 -FRAG 0 0 0 +* 189 - - +RAW 0 0 0 +UDP 5 5 0 +TCP 6 6 0 +INET 11 11 0 +FRAG 0 0 0 ``` 列出当前的established, closed, orphaned and waiting TCP sockets - **列出所有打开的网络连接端口** + **列出所有打开的网络连接端口** ``` [root@localhost ~]# ss -l -Recv-Q Send-Q Local Address:Port Peer Address:Port -0 0 *:3306 *:* -0 0 *:http *:* -0 0 *:ssh *:* -0 0 127.0.0.1:smtp *:* +Recv-Q Send-Q Local Address:Port Peer Address:Port +0 0 *:3306 *:* +0 0 *:http *:* +0 0 *:ssh *:* +0 0 127.0.0.1:smtp *:* ``` - **查看进程使用的socket** + **查看进程使用的socket** ``` [root@localhost ~]# ss -pl -Recv-Q Send-Q Local Address:Port Peer Address:Port +Recv-Q Send-Q Local Address:Port Peer Address:Port 0 0 *:3306 *:* users:(("mysqld",1718,10)) 0 0 *:http *:* users:(("nginx",13312,5),("nginx",13333,5)) 0 0 *:ssh *:* users:(("sshd",1379,3)) 0 0 127.0.0.1:smtp *:* us ``` - **找出打开套接字/端口应用程序** + **找出打开套接字/端口应用程序** ``` [root@localhost ~]# ss -pl | grep 3306 0 0 *:3306 *:* users:(("mysqld",1718,10)) ``` - **显示所有UDP Sockets** + **显示所有UDP Sockets** ``` [root@localhost ~]# ss -u -a -State Recv-Q Send-Q Local Address:Port Peer Address:Port -UNCONN 0 0 *:syslog *:* -UNCONN 0 0 112.124.15.130:ntp *:* -UNCONN 0 0 10.160.7.81:ntp *:* -UNCONN 0 0 127.0.0.1:ntp *:* +State Recv-Q Send-Q Local Address:Port Peer Address:Port +UNCONN 0 0 *:syslog *:* +UNCONN 0 0 112.124.15.130:ntp *:* +UNCONN 0 0 10.160.7.81:ntp *:* +UNCONN 0 0 127.0.0.1:ntp *:* UNCONN 0 0 *:ntp *:* ``` diff --git a/command/ssh.md b/command/ssh.md index 3285fead278..522f1eb1d8a 100644 --- a/command/ssh.md +++ b/command/ssh.md @@ -7,13 +7,13 @@ openssh套件中的客户端连接工具 **ssh命令** 是openssh套件中的客户端连接工具,可以给予ssh加密协议实现安全的远程登录服务器。 -### 语法 +### 语法 ``` ssh(选项)(参数) ``` -### 选项 +### 选项 ``` -1:强制使用ssh协议版本1; @@ -38,7 +38,7 @@ ssh(选项)(参数) -y:开启信任X11转发功能。 ``` -### 参数 +### 参数 * 远程主机:指定要连接的远程ssh服务器; * 指令:要在远程ssh服务器上执行的指令。 @@ -50,12 +50,18 @@ ssh(选项)(参数) ssh user1@172.24.210.101 # 指定端口 ssh -p 2211 root@140.206.185.170 + +# ssh 大家族 +ssh user@ip -p22 # 默认用户名为当前用户名,默认端口为 22 +ssh-keygen # 为当前用户生成 ssh 公钥 + 私钥 +ssh-keygen -f keyfile -i -m key_format -e -m key_format # key_format: RFC4716/SSH2(default) PKCS8 PEM +ssh-copy-id user@ip:port # 将当前用户的公钥复制到需要 ssh 的服务器的 ~/.ssh/authorized_keys,之后可以免密登录 ``` ### 背后故事 > 英文:Tatu Ylonen -> 编译:Linux中国/kenxx +> 编译:Linux中国/kenxx > 来源:https://linux.cn/article-8476-1.html 为什么 SSH(安全终端)的端口号是 22 呢,这不是一个巧合,这其中有个我(Tatu Ylonen,SSH 协议的设计者)未曾诉说的故事。 @@ -73,37 +79,37 @@ ssh -p 2211 root@140.206.185.170 1995 年 7 月,就在我发布 ssh-1.0 前,我发送了一封邮件给 IANA: -> From ylo Mon Jul 10 11:45:48 +0300 1995 -> From: Tatu Ylonen -> To: Internet Assigned Numbers Authority -> Subject: 请求取得一个端口号 -> Organization: 芬兰赫尔辛基理工大学 -> -> 亲爱的机构成员: -> -> 我写了个可以在不安全的网络环境中安全地从一台机器登录到另一台机器的程序。它主要是对现有的 telnet 协议以及 rlogin 协议的功能性提升和安全性改进。说的具体些,就是可以防御 IP、DNS > 或路由等欺骗行为。我打算将我的软件免费地发布在因特网上,以得到广泛地使用。 -> -> 我希望为该软件注册一个特权端口号,要是这个端口号在 1 到 255 > 之间就更好了,这样它就可以用在名字服务器的 WKS 字段中了。 -> -> 我在附件中附上了协议标准的草案。这个软件已经在本地运行了几个月了,我已准备在获得端口号后就发布。如果端口号分配一事安排的及时,我希望这周就将要发布的软件准备好。我目前在 beta 版测试时使用的端口号是 > 22,如果要是能够分配到这个端口,我就不用做什么更改了(目前这个端口在列表中还是空闲的)。 -> -> 软件中服务的名称叫 ssh(系 Secure Shell 的缩写)。 -> -> 您最真诚的, -> Tatu Ylonen +> From ylo Mon Jul 10 11:45:48 +0300 1995 +> From: Tatu Ylonen +> To: Internet Assigned Numbers Authority +> Subject: 请求取得一个端口号 +> Organization: 芬兰赫尔辛基理工大学 +> +> 亲爱的机构成员: +> +> 我写了个可以在不安全的网络环境中安全地从一台机器登录到另一台机器的程序。它主要是对现有的 telnet 协议以及 rlogin 协议的功能性提升和安全性改进。说的具体些,就是可以防御 IP、DNS > 或路由等欺骗行为。我打算将我的软件免费地发布在因特网上,以得到广泛地使用。 +> +> 我希望为该软件注册一个特权端口号,要是这个端口号在 1 到 255 > 之间就更好了,这样它就可以用在名字服务器的 WKS 字段中了。 +> +> 我在附件中附上了协议标准的草案。这个软件已经在本地运行了几个月了,我已准备在获得端口号后就发布。如果端口号分配一事安排的及时,我希望这周就将要发布的软件准备好。我目前在 beta 版测试时使用的端口号是 > 22,如果要是能够分配到这个端口,我就不用做什么更改了(目前这个端口在列表中还是空闲的)。 +> +> 软件中服务的名称叫 ssh(系 Secure Shell 的缩写)。 +> +> 您最真诚的, +> Tatu Ylonen (LCTT 译注:DNS 协议中的 WKS 记录类型意即“众所周知的业务描述”,是类似于 A、MX 这样的 DNS 记录类型,用于描述某个 IP 所提供的服务,目前鲜见使用。参见: https://docs.oracle.com/cd/E19683-01/806-4077/dnsintro-154/index.html 。) 第二天,我就收到了 Joyce 发来的邮件: -> Date: Mon, 10 Jul 1995 15:35:33 -0700 -> From: jkrey@ISI.EDU -> To: ylo@cs.hut.fi -> Subject: 回复:请求取得一个端口号 -> Cc: iana@ISI.EDU -> Tatu, -> 我们将端口号 22 分配给 ssh 服务了,你目前是该服务的主要联系人。 -> Joyce +> Date: Mon, 10 Jul 1995 15:35:33 -0700 +> From: jkrey@ISI.EDU +> To: ylo@cs.hut.fi +> Subject: 回复:请求取得一个端口号 +> Cc: iana@ISI.EDU +> Tatu, +> 我们将端口号 22 分配给 ssh 服务了,你目前是该服务的主要联系人。 +> Joyce 这就搞定了!SSH 的端口正式使用 22!!! diff --git a/command/supervisord.md b/command/supervisord.md new file mode 100644 index 00000000000..6ce8926712c --- /dev/null +++ b/command/supervisord.md @@ -0,0 +1,20 @@ +supervisord +=== + +配置后台服务/常驻进程的工具 + +## 实例 + +``` +# supervisord +apt-get install supervisor +[program:app] +command=/usr/bin/gunicorn -w 1 wsgiapp:application +directory=/srv/www +user=www-data + +supervisord: 启动 supervisor 服务 +supervisorctl start app +supervisorctl stop app +supervisorctl reload # 修改/添加配置文件需要执行这个 +``` \ No newline at end of file diff --git a/command/sz.md b/command/sz.md new file mode 100644 index 00000000000..1597dc46f78 --- /dev/null +++ b/command/sz.md @@ -0,0 +1,12 @@ +sz +=== + +对话框式文件下载工具 + +## 实例 + +``` +apk add lrzsz # 安装 + +sz $file # 下载 +``` \ No newline at end of file diff --git a/command/tail.md b/command/tail.md index 2b0e2018dd0..0f8fadaf792 100644 --- a/command/tail.md +++ b/command/tail.md @@ -9,13 +9,13 @@ tail 注意:如果表示字节或行数的N值之前有一个”+”号,则从文件开头的第N项开始显示,而不是显示文件的最后N项。N值后面可以有后缀:b表示512,k表示1024,m表示1 048576(1M)。 -### 语法 +### 语法 ``` tail(选项)(参数) ``` -### 选项 +### 选项 ``` --retry:即是在tail命令启动时,文件不可访问或者文件稍后变得不可访问,都始终尝试打开文件。使用此选项时需要与选项“——follow=name”连用; @@ -31,11 +31,11 @@ tail(选项)(参数) --version:显示指令的版本信息。 ``` -### 参数 +### 参数 文件列表:指定要显示尾部内容的文件列表。 -### 实例 +### 实例 ``` tail file (显示文件file的最后10行) diff --git a/command/tar.md b/command/tar.md index 8d5696e262a..a10ea3918fc 100644 --- a/command/tar.md +++ b/command/tar.md @@ -11,13 +11,13 @@ Linux下的归档使用工具,用来打包和备份。 为什么要区分这两个概念呢?这源于Linux中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令)。 -### 语法 +### 语法 ``` tar(选项)(参数) ``` -### 选项 +### 选项 ``` -A或--catenate:新增文件到以存在的备份文件; @@ -45,11 +45,11 @@ tar(选项)(参数) --exclude=<范本样式>:排除符合范本样式的文件。 ``` -### 参数 +### 参数 文件或目录:指定要打包的文件或目录列表。 -### 实例 +### 实例 ```bash - z:有gzip属性的 @@ -85,84 +85,84 @@ tar -xf archive.tar # 从archive.tar提取所有文件。 #### zip格式 -压缩: zip -r [目标文件名].zip [原文件/目录名] -解压: unzip [原文件名].zip -注:-r参数代表递归 +压缩: zip -r [目标文件名].zip [原文件/目录名] +解压: unzip [原文件名].zip +注:-r参数代表递归 #### tar格式(该格式仅仅打包,不压缩) -打包:tar -cvf [目标文件名].tar [原文件名/目录名] -解包:tar -xvf [原文件名].tar -注:c参数代表create(创建),x参数代表extract(解包),v参数代表verbose(详细信息),f参数代表filename(文件名),所以f后必须接文件名。 +打包:tar -cvf [目标文件名].tar [原文件名/目录名] +解包:tar -xvf [原文件名].tar +注:c参数代表create(创建),x参数代表extract(解包),v参数代表verbose(详细信息),f参数代表filename(文件名),所以f后必须接文件名。 #### 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文件,直接执行压缩命令: -压缩: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 -解压: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文件,直接用压缩命令: -压缩:compress [原文件名].tar -解压:uncompress [原文件名].tar.Z -方式二:一次性打包并压缩、解压并解包 +压缩:compress [原文件名].tar +解压:uncompress [原文件名].tar.Z +方式二:一次性打包并压缩、解压并解包 -打包并压缩: tar -Zcvf [目标文件名].tar.Z [原文件名/目录名] -解压并解包: tar -Zxvf [原文件名].tar.Z -注:大写Z代表用ncompress算法来压缩/解压。另,ncompress是早期Unix系统的压缩格式,但由于ncompress的压缩率太低,现已过时。 +打包并压缩: tar -Zcvf [目标文件名].tar.Z [原文件名/目录名] +解压并解包: tar -Zxvf [原文件名].tar.Z +注:大写Z代表用ncompress算法来压缩/解压。另,ncompress是早期Unix系统的压缩格式,但由于ncompress的压缩率太低,现已过时。 #### jar格式 -压缩:jar -cvf [目标文件名].jar [原文件名/目录名] -解压:jar -xvf [原文件名].jar -注:如果是打包的是Java类库,并且该类库中存在主类,那么需要写一个META-INF/MANIFEST.MF配置文件,内容如下: +压缩: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 -然后用如下命令打包: +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 a [目标文件名].7z [原文件名/目录名] +解压:7z x [原文件名].7z +注:这个7z解压命令支持rar格式,即: 7z x [原文件名].rar @@ -171,9 +171,9 @@ jar -cvfm [目标文件名].jar META-INF/MANIFEST.MF [原文件名/目录名] **将文件全部打包成tar包** : ``` -tar -cvf log.tar log2012.log 仅打包,不压缩! -tar -zcvf log.tar.gz log2012.log 打包后,以 gzip 压缩 -tar -jcvf log.tar.bz2 log2012.log 打包后,以 bzip2 压缩 +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包名。 @@ -216,13 +216,13 @@ tar -zcvpf log31.tar.gz log2014.log log2015.log log2016.log tar -N "2012/11/13" -zcvf log17.tar.gz test ``` - **备份文件夹内容是排除部分文件:** + **备份文件夹内容是排除部分文件:** ``` tar --exclude scf/service -zcvf scf.tar.gz scf/* ``` - **其实最简单的使用 tar 就只要记忆底下的方式即可:** + **其实最简单的使用 tar 就只要记忆底下的方式即可:** ``` 压 缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称 diff --git a/command/telnet.md b/command/telnet.md index bad1d35ee62..5927a4880b7 100644 --- a/command/telnet.md +++ b/command/telnet.md @@ -1,19 +1,19 @@ telnet === -登录远程主机和管理 +登录远程主机和管理(测试ip端口是否连通) ## 补充说明 **telnet命令** 用于登录远程主机,对远程主机进行管理。telnet因为采用明文传送报文,安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的ssh方式了。但仍然有很多别的系统可能采用了telnet方式来提供远程登录,因此弄清楚telnet客户端的使用方式仍是很有必要的。 -### 语法 +### 语法 ``` telnet(选项)(参数) ``` -### 选项 +### 选项 ``` -8:允许使用8位字符资料,包括输入与输出; @@ -36,12 +36,12 @@ telnet(选项)(参数) -X<认证形态>:关闭指定的认证形态。 ``` -### 参数 +### 参数 * 远程主机:指定要登录进行管理的远程主机; * 端口:指定TELNET协议使用的端口号。 -### 实例 +### 实例 ``` $ telnet 192.168.2.10 @@ -52,7 +52,7 @@ Escape character is '^]'. localhost (Linux release 2.6.18-274.18.1.el5 #1 SMP Thu Feb 9 12:45:44 EST 2012) (1) login: root -Password: +Password: Login incorrect ``` @@ -79,59 +79,59 @@ telnet: Unable to connect to remote host service xinetd restart ``` -配置参数,通常的配置如下: +配置参数,通常的配置如下: ``` -service telnet -{ - disable = no #启用 - flags = REUSE #socket可重用 - socket_type = stream #连接方式为TCP - wait = no #为每个请求启动一个进程 - user = root #启动服务的用户为root - server = /usr/sbin/in.telnetd #要激活的进程 - log_on_failure += USERID #登录失败时记录登录用户名 -} +service telnet +{ + disable = no #启用 + flags = REUSE #socket可重用 + socket_type = stream #连接方式为TCP + wait = no #为每个请求启动一个进程 + user = root #启动服务的用户为root + server = /usr/sbin/in.telnetd #要激活的进程 + log_on_failure += USERID #登录失败时记录登录用户名 +} ``` -如果要配置允许登录的客户端列表,加入 +如果要配置允许登录的客户端列表,加入 ``` -only_from = 192.168.0.2 #只允许192.168.0.2登录 +only_from = 192.168.0.2 #只允许192.168.0.2登录 ``` -如果要配置禁止登录的客户端列表,加入 +如果要配置禁止登录的客户端列表,加入 ``` -no_access = 192.168.0.{2,3,4} #禁止192.168.0.2、192.168.0.3、192.168.0.4登录 +no_access = 192.168.0.{2,3,4} #禁止192.168.0.2、192.168.0.3、192.168.0.4登录 ``` -如果要设置开放时段,加入 +如果要设置开放时段,加入 ``` -access_times = 9:00-12:00 13:00-17:00 # 每天只有这两个时段开放服务(我们的上班时间:P) +access_times = 9:00-12:00 13:00-17:00 # 每天只有这两个时段开放服务(我们的上班时间:P) ``` -如果你有两个IP地址,一个是私网的IP地址如192.168.0.2,一个是公网的IP地址如218.75.74.83,如果你希望用户只能从私网来登录telnet服务,那么加入 +如果你有两个IP地址,一个是私网的IP地址如192.168.0.2,一个是公网的IP地址如218.75.74.83,如果你希望用户只能从私网来登录telnet服务,那么加入 ``` -bind = 192.168.0.2 +bind = 192.168.0.2 ``` -各配置项具体的含义和语法可参考xined配置文件属性说明(man xinetd.conf) +各配置项具体的含义和语法可参考xined配置文件属性说明(man xinetd.conf) 配置端口,修改services文件: ``` -# vi /etc/services +# vi /etc/services ``` -找到以下两句 +找到以下两句 ``` -telnet 23/tcp -telnet 23/udp +telnet 23/tcp +telnet 23/udp ``` -如果前面有#字符,就去掉它。telnet的默认端口是23,这个端口也是黑客端口扫描的主要对象,因此最好将这个端口修改掉,修改的方法很简单,就是将23这个数字修改掉,改成大一点的数字,比如61123。注意,1024以下的端口号是internet保留的端口号,因此最好不要用,还应该注意不要与其它服务的端口冲突。 +如果前面有#字符,就去掉它。telnet的默认端口是23,这个端口也是黑客端口扫描的主要对象,因此最好将这个端口修改掉,修改的方法很简单,就是将23这个数字修改掉,改成大一点的数字,比如61123。注意,1024以下的端口号是internet保留的端口号,因此最好不要用,还应该注意不要与其它服务的端口冲突。 启动服务: ``` -service xinetd restart +service xinetd restart ``` diff --git a/command/tmux.md b/command/tmux.md new file mode 100644 index 00000000000..e2692efc269 --- /dev/null +++ b/command/tmux.md @@ -0,0 +1,22 @@ +tmux +=== + +比 screen 好用的 ssh 窗口管理工具 + +## 实例 + +``` +apk add tmux # 安装 + +# tmux +tmux # new session +tmux a # attach session +C-b-d # detach session +C-b-c # new window +C-b-num # ch window +exit # exit window +C-b "/% # split window +C-b 方向键 +C-b ? # keymap +no rz/sz +``` \ No newline at end of file diff --git a/command/tree.md b/command/tree.md index 3e5151cf78e..015389b245e 100644 --- a/command/tree.md +++ b/command/tree.md @@ -7,13 +7,13 @@ tree **tree命令** 以树状图列出目录的内容。 -### 语法 +### 语法 ``` tree(选项)(参数) ``` -### 选项 +### 选项 ```bash ------- 列表选项 ------- @@ -73,7 +73,7 @@ tree(选项)(参数) -- # Options processing terminator. ``` -### 参数 +### 参数 目录:执行tree指令,它会列出指定目录下的所有文件,包括子目录里的文件。 @@ -101,7 +101,7 @@ tree -L 2 > /home/www/tree.txt # 当前目录结果存到 tree.txt 文件中 ``` 忽略多个文件夹 - + ```bash tree -I 'node_modules|icon|font' -L 2 ``` diff --git a/command/ulimit.md b/command/ulimit.md index 593db05cb95..b8084f82e7d 100644 --- a/command/ulimit.md +++ b/command/ulimit.md @@ -1,6 +1,6 @@ ulimit === - + 控制shell程序的资源 ## 补充说明 @@ -15,13 +15,13 @@ ulimit 用于限制 shell 启动进程所占用的资源,支持以下各种类 作为临时限制,ulimit 可以作用于通过使用其命令登录的 shell 会话,在会话终止时便结束限制,并不影响于其他 shell 会话。而对于长期的固定限制,ulimit 命令语句又可以被添加到由登录 shell 读取的文件中,作用于特定的 shell 用户。 -### 语法 +### 语法 ``` ulimit(选项) ``` -### 选项 +### 选项 ``` -a:显示目前资源限制的设定; @@ -39,7 +39,7 @@ ulimit(选项) -v <虚拟内存大小>:指定可使用的虚拟内存上限,单位为KB。 ``` -### 实例 +### 实例 ``` [root@localhost ~]# ulimit -a diff --git a/command/uname.md b/command/uname.md index 2134b6f34b3..9033a5e426e 100644 --- a/command/uname.md +++ b/command/uname.md @@ -1,19 +1,19 @@ uname === - + 显示Linux系统信息 ## 补充说明 **uname命令** 用于打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)。 -### 语法 +### 语法 ``` uname(选项) ``` -### 选项 +### 选项 ``` -a或--all:显示全部的信息; @@ -29,7 +29,7 @@ uname(选项) --version:显示版本信息。 ``` -### 实例 +### 实例 使用uname命令查看全部信息: diff --git a/command/unzip.md b/command/unzip.md index 3ebee0bd394..d4df39b4c99 100644 --- a/command/unzip.md +++ b/command/unzip.md @@ -1,19 +1,19 @@ unzip === - + 用于解压缩由zip命令压缩的压缩包 ## 补充说明 **unzip命令** 用于解压缩由zip命令压缩的“.zip”压缩包。 -### 语法 +### 语法 ``` unzip(选项)(参数) ``` -### 选项 +### 选项 ``` -c:将解压缩的结果显示到屏幕上,并对字符做适当的转换; @@ -42,11 +42,11 @@ unzip(选项)(参数) -Z:unzip-Z等于执行zipinfo指令。 ``` -### 参数 +### 参数 压缩包:指定要解压的“.zip”压缩包。 -### 实例 +### 实例 将压缩文件text.zip在当前目录下解压缩。 diff --git a/command/usermod.md b/command/usermod.md index 66582d92cd8..93876fcd6e8 100644 --- a/command/usermod.md +++ b/command/usermod.md @@ -1,19 +1,19 @@ usermod === - + 用于修改用户的基本信息 ## 补充说明 **usermod命令** 用于修改用户的基本信息。usermod命令不允许你改变正在线上的使用者帐号名称。当usermod命令用来改变user id,必须确认这名user没在电脑上执行任何程序。你需手动更改使用者的crontab档。也需手动更改使用者的at工作档。采用NIS server须在server上更动相关的NIS设定。 -### 语法 +### 语法 ``` usermod(选项)(参数) ``` -### 选项 +### 选项 ``` -c<备注>:修改用户帐号的备注文字; @@ -29,11 +29,11 @@ usermod(选项)(参数) -U:解除密码锁定。 ``` -### 参数 +### 参数 登录名:指定要修改信息的用户登录名。 -### 实例 +### 实例 将newuser2添加到组staff中: @@ -59,5 +59,12 @@ usermod -L newuser1 usermod -U newuser1 ``` +增加用户到用户组中: + +``` +apk add shadow # 安装 shadow 包, usermod 命令包含在 usermod 中 + +usermod -aG group user # 添加用户到用户组中 +``` \ No newline at end of file diff --git a/command/watch.md b/command/watch.md index a195e885065..667be3b9bea 100644 --- a/command/watch.md +++ b/command/watch.md @@ -7,13 +7,13 @@ watch **watch命令** 以周期性的方式执行给定的指令,指令输出以全屏方式显示。watch是一个非常实用的命令,基本所有的Linux发行版都带有这个小工具,如同名字一样,watch可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行。 -### 语法 +### 语法 ``` watch(选项)(参数) ``` -### 选项 +### 选项 ```bash -n # 或--interval watch缺省每2秒运行一下程序,可以用-n或-interval来指定间隔的时间。 @@ -22,11 +22,11 @@ watch(选项)(参数) -h, --help # 查看帮助文档 ``` -### 参数 +### 参数 指令:需要周期性执行的指令。 -### 实例 +### 实例 ```bash watch -n 1 -d netstat -ant       # 命令:每隔一秒高亮显示网络链接数的变化情况 diff --git a/command/xz.md b/command/xz.md index 7ce144664c7..c33587255d8 100644 --- a/command/xz.md +++ b/command/xz.md @@ -7,14 +7,14 @@ POSIX 平台开发具有高压缩率的工具。 **xz命令** XZ Utils 是为 POSIX 平台开发具有高压缩率的工具。它使用 LZMA2 压缩算法,生成的压缩文件比 POSIX 平台传统使用的 gzip、bzip2 生成的压缩文件更小,而且解压缩速度也很快。最初 XZ Utils 的是基于 LZMA-SDK 开发,但是 LZMA-SDK 包含了一些 WINDOWS 平台的特性,所以 XZ Utils 为以适应 POSIX 平台作了大幅的修改。XZ Utils 的出现也是为了取代 POSIX 系统中旧的 LZMA Utils。 -### 语法 +### 语法 ``` xz(选项)(参数) xz [OPTION]... [FILE]... ``` -### 选项 +### 选项 ```bash -z, --compress 强制压缩 @@ -39,55 +39,55 @@ xz [OPTION]... [FILE]... -V, --version 显示版本号并退出 ``` -### 参数 +### 参数 * 源文件:指定连接的源文件。 * 目标文件:指定源文件的目标连接文件。 -### 实例 +### 实例 压缩一个文件 test.txt,压缩成功后生成 test.txt.xz, 原文件会被删除。 ```bash -$ xz test.txt -$ ls test.txt* +$ xz test.txt +$ ls test.txt* -test.txt.xz +test.txt.xz ``` 解压 test.txt.xz 文件,并使用参数 -k 保持原文件不被删除 ```bash -$ xz -d -k test.txt.xz -$ ls test.txt* +$ xz -d -k test.txt.xz +$ ls test.txt* -test.txt.xz test.txt +test.txt.xz test.txt ``` 使用参数 -l 显示 .xz 文件的基本信息。基本信息包括压缩率、数据完整性验证方式等。也可以和参数 -v 或 -vv 配合显示更详尽的信息。 ```bash -xz -l index.txt.xz -# Strms Blocks Compressed Uncompressed Ratio Check Filename +xz -l index.txt.xz +# Strms Blocks Compressed Uncompressed Ratio Check Filename # 1 1 768 B 1,240 B 0.619 CRC64 index.txt. ``` 使用参数 -0, -1, -2, … -6, … -9 或参数 --fast, --best 设定压缩率。xz 命令的默认为 -6 ,对于大多数系统来说,甚至是一些较旧的系统,-4 … -6 压缩率预设值都不错的表现。 ``` -$ xz -k7 xz_pipe_decomp_mini.c -$ xz -k --fast xz_pipe_decomp_mini.c +$ xz -k7 xz_pipe_decomp_mini.c +$ xz -k --fast xz_pipe_decomp_mini.c ``` 使用参数 -H 显示 xz 命令所有 options. 参数 -H 比使用参数 --help 显示的内容更详细。 ``` -$ xz -H | more +$ xz -H | more ``` 借助 xargs 命令并行压缩多文件。下面的命令行可以将 /var/log 目录下所有的扩展名为 .log 的文件压缩。通过 xargs 命令同时运行多个 xz 进行压缩。 ```bash # 运行此命令须有 root 权限。 -find /var/log -type f -iname "*.log" -print0 | xargs -P4 -n16 xz -T1 +find /var/log -type f -iname "*.log" -print0 | xargs -P4 -n16 xz -T1 ``` diff --git a/command/yum.md b/command/yum.md index 77c3c0e3736..0d6fd9977be 100644 --- a/command/yum.md +++ b/command/yum.md @@ -9,13 +9,13 @@ yum yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。 -### 语法 +### 语法 ``` yum(选项)(参数) ``` -### 选项 +### 选项 ``` -h:显示帮助信息; @@ -29,7 +29,7 @@ yum(选项)(参数) -C:完全从缓存中运行,而不去下载或者更新任何头文件。 ``` -### 参数 +### 参数 ``` install:安装rpm软件包; @@ -47,7 +47,7 @@ localupdate:显示本地rpm软件包进行更新; deplist:显示rpm软件包的所有依赖关系。 ``` -### 实例 +### 实例 部分常用的命令包括: @@ -55,7 +55,7 @@ deplist:显示rpm软件包的所有依赖关系。 * 安装yum图形窗口插件:`yum install yumex` * 查看可能批量安装的列表:`yum grouplist` -**安装** +**安装** ```bash yum install #全部安装 @@ -63,7 +63,7 @@ yum install package1 #安装指定的安装包package1 yum groupinsall group1 #安装程序组group1 ``` -**更新和升级** +**更新和升级** ```bash yum update #全部更新 @@ -73,7 +73,7 @@ yum upgrade package1 #升级指定程序包package1 yum groupupdate group1 #升级程序组group1 ``` -**查找和显示** +**查找和显示** ```bash # 检查 MySQL 是否已安装 @@ -86,7 +86,7 @@ yum list package1 #显示指定程序包安装情况package1 yum groupinfo group1 #显示程序组group1信息yum search string 根据关键字string查找安装包 ``` -**删除程序** +**删除程序** ```bash yum remove | erase package1 #删除程序包package1 @@ -94,7 +94,7 @@ yum groupremove group1 #删除程序组group1 yum deplist package1 #查看程序package1依赖情况 ``` -**清除缓存** +**清除缓存** ```bash yum clean packages #清除缓存目录下的软件包 @@ -102,5 +102,28 @@ yum clean headers #清除缓存目录下的 headers yum clean oldheaders #清除缓存目录下旧的 headers ``` +**更多实例** + +``` +# yum +/etc/yum.repos.d/ yum 源配置文件 +vi /etc/yum.repos.d/nginx.repo # 举个栗子: nginx yum源 +[nginx] +name=nginx repo +baseurl=http://nginx.org/packages/centos/6/$basearch/ +gpgcheck=0 +enabled=1 + +# yum mirror +mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak +wget https://mirror.tuna.tsinghua.edu.cn/help/centos/ +yum makecache + +# 添加中文语言支持 +LANG=C # 原始语言 +LANG=zh_CN.utf8 # 切换到中文 +yum groupinstall "Chinese Support" # 添加中文语言支持 +``` + diff --git a/command/zip.md b/command/zip.md index bf7601946d5..34e64430645 100644 --- a/command/zip.md +++ b/command/zip.md @@ -7,13 +7,13 @@ zip **zip命令** 可以用来解压缩文件,或者对文件进行打包操作。zip是个使用广泛的压缩程序,文件经它压缩后会另外产生具有“.zip”扩展名的压缩文件。 -### 语法 +### 语法 ``` zip(选项)(参数) ``` -### 选项 +### 选项 ``` -A:调整可执行的自动解压缩文件; @@ -52,12 +52,12 @@ zip(选项)(参数) -<压缩效率>:压缩效率是一个介于1~9的数值。 ``` -### 参数 +### 参数 * zip压缩包:指定要创建的zip压缩包; * 文件列表:指定要压缩的文件列表。 -### 实例 +### 实例 将`/home/Blinux/html/`这个目录下所有文件和文件夹打包为当前目录下的html.zip: @@ -77,6 +77,12 @@ zip -q -r html.zip html zip -q -r html.zip * ``` +压缩效率选择: + +``` +zip -9 # 1-9 faster->better +``` + ### 问题解决 CentOS7中命令找不到 @@ -86,7 +92,7 @@ CentOS7中命令找不到 ``` 解决方法 - + ```bash yum install -y unzip zip ``` From 86b3380ce2a8f3d55601cd0e1fd1dbacaae6130d Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Fri, 8 Jun 2018 15:42:44 +0800 Subject: [PATCH 0175/1284] Update ack.md #42 --- command/ack.md | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/command/ack.md b/command/ack.md index ee8ad5c38b1..822c1ca1a5d 100644 --- a/command/ack.md +++ b/command/ack.md @@ -3,12 +3,30 @@ ack 比grep好用的文本搜索工具 -## 示例 +## 安装 +```bash +# ubuntu下要安装ack-grep +sudo apt-get install ack-grep ``` -# install -apk install ack -# use +## 特点 + +ack官网列出了这工具的5大卖点: + +1. 速度非常快,因为它只搜索有意义的东西。 +2. 更友好的搜索,忽略那些不是你源码的东西。 +3. 为源代码搜索而设计,用更少的击键完成任务。 +4. 非常轻便,移植性好。 +5. 免费且开源 + +## 实例 + +``` ack -``` \ No newline at end of file +``` + + +## 参考资料 + +- [ack官网](https://beyondgrep.com/) From 79e4c8f2f05faed3b33f5923e68812e4190f27bd Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Fri, 8 Jun 2018 15:50:10 +0800 Subject: [PATCH 0176/1284] ack command add usage example. #42 --- command/ack.md | 74 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 72 insertions(+), 2 deletions(-) diff --git a/command/ack.md b/command/ack.md index 822c1ca1a5d..97d88a179c5 100644 --- a/command/ack.md +++ b/command/ack.md @@ -6,10 +6,19 @@ ack ## 安装 ```bash -# ubuntu下要安装ack-grep +# ubuntu下要安装ack-grep,因为在debian系中,ack这个名字被其他的软件占用了。 sudo apt-get install ack-grep ``` +## 参数 + +这些参数在linux上的适用频率是相当高的,尤其是你用vim做为IDE的话 + +``` +-c(统记)/ -i(忽略大小)/ -h(不显示名称)/ +-l(只显文件名)/ -n(加行号)/ -v(显示不匹配) +``` + ## 特点 ack官网列出了这工具的5大卖点: @@ -22,10 +31,71 @@ ack官网列出了这工具的5大卖点: ## 实例 +在记忆的时候大体上可以分为这几个部分: + +> Searching 代码搜索 +> Search output 搜索结果处理 +> File presentation 文件展示 +> File finding 文件查找 +> File inclusion/exclusion 文件过滤 + +grep常用操作 + +```bash +grep -r 'hello_world' # 简单用法 +grep '^hello_world' . # 简单正则 +ls -l | grep .py # 管道用法 ``` -ack + +### Searching + +简单的文本搜索,默认是递归的。 + +``` +ack-grep hello +ack-grep -i hello +ack-grep -v hello +ack-grep -w hello +ack-grep -Q 'hello*' +``` + +### Search File + +对搜索结果进行处理,比如只显示一个文件的一个匹配项,或者xxx + +```bash +ack-grep --line=1 # 输出所有文件第二行 +ack-grep -l 'hello' # 包含的文件名 +ack-grep -L 'print' # 非包含文件名 +``` + +### File presentation + +输出的结果是以什么方式展示呢,这个部分有几个参数可以练习下 + +```bash +ack-grep hello --pager='less -R' # 以less形式展示 +ack-grep hello --noheading # 不在头上显示文件 +ack-grep hello --nocolor # 不对匹配字符着色 ``` +### File finding +没错,它可以查找文件,以省去你要不断的结合find和grep的麻烦,虽然在linux的思想是一个工具做好一件事。 + +```bash +ack-grep -f hello.py # 查找全匹配文件 +ack-grep -g hello.py$ # 查找正则匹配文件 +ack-grep -g hello --sort-files # 查找然后排序 +``` + +### File Inclusion/Exclusion + +文件过滤,个人觉得这是一个很不错的功能。如果你曾经在搜索项目源码是不小心命中日志中的某个关键字的话,你会觉得这个有用。 + +```bash +ack-grep --python hello # 查找所有python文件 +ack-grep -G hello.py$ hello # 查找匹配正则的文件 +``` ## 参考资料 From 757dc65c032a62ce7549950a06357f51ee3df7f0 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Fri, 8 Jun 2018 15:58:02 +0800 Subject: [PATCH 0177/1284] #42 apk command add example. --- command/apk.md | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/command/apk.md b/command/apk.md index 5abd5fc812e..2067e3977fd 100644 --- a/command/apk.md +++ b/command/apk.md @@ -3,20 +3,51 @@ apk Alpine Linux 下的包管理工具 -## quick start +## 使用实例 -``` +```bash apk install xxx apk search xxx # 支持正则 apk info xxx # 查看包的详细信息 apk show # list local package +# 卸载并删除 包 +apk del openssh openntp vim +``` + +### 升级 + +upgrade命令升级系统已安装的所以软件包(一般包括内核),当然也可指定仅升级部分软件包(通过-u或–upgrade选择指定)。 + +```bash +apk update # 更新最新本地镜像源 +apk upgrade # 升级软件 +apk add --upgrade busybox # 指定升级部分软件包 +``` + +### 搜索 + +```bash +apk search # 查找所以可用软件包 +apk search -v # 查找所以可用软件包及其描述内容 +apk search -v 'acf*' # 通过软件包名称查找软件包 +apk search -v -d 'docker' # 通过描述文件查找特定的软件包 +``` + +### 查看包信息 + +info命令用于显示软件包的信息。 + +```bash +apk info # 列出所有已安装的软件包 +apk info -a zlib # 显示完整的软件包信息 +apk info --who-owns /sbin/lbu # 显示指定文件属于的包 ``` ## 笔记 还是蛮喜欢 alpine 的,简单纯粹 -``` +```bash apk add iproute2 # ss vs netstat ss -ptl apk add drill # drill vs nslookup&dig From 569216ad5c99bfa454b521783af95cd7671d329a Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Fri, 8 Jun 2018 16:17:11 +0800 Subject: [PATCH 0178/1284] Update command/fishshell.md --- command/ack.md | 2 + command/cloc.md | 12 --- command/fishshell.md | 190 +++++++++++++++++++++++++++++++++++++------ 3 files changed, 167 insertions(+), 37 deletions(-) delete mode 100644 command/cloc.md diff --git a/command/ack.md b/command/ack.md index 97d88a179c5..0d86a7f5329 100644 --- a/command/ack.md +++ b/command/ack.md @@ -8,6 +8,8 @@ ack ```bash # ubuntu下要安装ack-grep,因为在debian系中,ack这个名字被其他的软件占用了。 sudo apt-get install ack-grep +# alpine Linux-apk软件包管理器 安装 ack +apk install ack ``` ## 参数 diff --git a/command/cloc.md b/command/cloc.md deleted file mode 100644 index 971017d6d21..00000000000 --- a/command/cloc.md +++ /dev/null @@ -1,12 +0,0 @@ -cloc -=== - -代码行数统计 - -## quick start - -``` -apk add cloc - -cloc dir --exclude-dir # 代码行数统计 -``` \ No newline at end of file diff --git a/command/fishshell.md b/command/fishshell.md index 8d65e727c66..6b99d3cc7cc 100644 --- a/command/fishshell.md +++ b/command/fishshell.md @@ -2,32 +2,168 @@ 比 bash 更好用的 shell -## quick start - -> [fish-shell](http://fishshell.com):强烈推荐 - -配置文件: `fish_config` -Running Commands: 兼容 bash 等shell的命令执行方式 -Getting Help: `help/man cmd -> browser/terminal` -Syntax Highlighting: 实时检查命令是否正确 -Wildcards: 支持缩写 `*` 递归 匹配 -Pipes and Redirections: 使用 `^` 代表 stderr -Autosuggestions: 自动建议, 可以使用 `Ctrl-f / ->` 来补全 -Tab Completions: 更强大的 tab 补全 -Variables: 使用 set 设置 -Exit Status: 使用 `echo $status` 替代 `$?` -Exports (Shell Variables) -Lists: all variables in fish are really lists -Command Substitutions: 使用 `(cmd)` 来执行命令, 而不是 反引号、`$()` -Combiners (And, Or, Not): 不支持使用符合来表示逻辑运算 -Functions:使用 `$argv` 替代 `$1` -Conditionals (If, Else, Switch) / Functions / Loops: 更人性化的写法(参考 py) -Prompt: `function fish_prompt` 实现 -Startup (Where's .bashrc?): `~/.config/fish/config.fish`,更好的方式是 autoloading-function、universal-variables -Autoloading Functions: ` ~/.config/fish/functions/.` -Universal Variables:a variable whose value is shared across all instances of fish +## 安装 +```bash +# Ubuntu 和 Debian 的安装方法。 +sudo apt-get install fish +# Mac 的安装方法。 +brew install fish ``` + +## 启动与帮助 + +由于 `Fish` 的语法与 `Bash` 有很大差异,`Bash` 脚本一般不兼容。因此,建议不要将 `Fish` 设为默认 `Shell`,而是每次手动启动它。 + +```bash +# 安装完成后,就可以启动 Fish。 +$ fish +# 使用过程中,如果需要帮助,可以输入 help 命令 +$ help +``` + +## 彩色显示 + +```bash +# 无效命令为红色 +$ mkd +# 有效命令为蓝色 +$ mkdir +# 有效路径会有下划线。如果没有下划线,你就知道这个路径不存在。 +$ cat ~/somefi +``` + +## 自动建议 + +Fish 会自动在光标后面给出建议,表示可能的选项,颜色为灰色。如果采纳建议,可以按下 `→` 或 `Control + F` 。如果只采纳一部分,可以按下 `Alt + →`。 + +```bash +$ /bin/hostname # 命令建议 +$ grep --ignore-case # 参数建议 +$ ls node_modules # 路径建议 +``` + +## 自动补全 + +输入命令时,`Fish` 会自动显示匹配的上一条历史记录。如果没有匹配的历史记录,`Fish` 会猜测可能的结果,自动补全各种输入。比如,输入 `pyt` 再按下 `Tab` ,就会自动补全为 `python` 命令。 + +`Fish` 还可以自动补全 `Git` 分支。 + +## 脚本语法 + +### if 语句 + +```bash +if grep fish /etc/shells + echo Found fish +else if grep bash /etc/shells + echo Found bash +else + echo Got nothing +end +``` + +### switch 语句 + +```bash +switch (uname) +case Linux + echo Hi Tux! +case Darwin + echo Hi Hexley! +case FreeBSD NetBSD DragonFly + echo Hi Beastie! +case '*' + echo Hi, stranger! +end +``` + +### while 循环 + +```bash +while true + echo "Loop forever" +end +``` + +### for 循环 + +```bash +for file in *.txt + cp $file $file.bak +end +``` + +### 函数 + +`Fish` 的函数用来封装命令,或者为现有的命令起别名。 + +```bash +function ll + ls -lhG $argv +end +``` + +上面代码定义了一个 `ll` 函数。命令行执行这个函数以后,就可以用 `ll` 命令替代 `ls -lhG`。其中,变量 `$argv` 表示函数的参数。 + +```bash +function ls + command ls -hG $argv +end +``` + +上面的代码重新定义 `ls` 命令。注意,函数体内的 `ls` 之前,要加上 `command`,否则会因为无限循环而报错。 + +### 提示符 + +`fish_prompt` 函数用于定义命令行提示符(prompt)。 + +```bash +function fish_prompt + set_color purple + date "+%m/%d/%y" + set_color FF0 + echo (pwd) '>' + set_color normal +end +``` + +执行上面的函数以后,你的命令行提示符就会变成下面这样。 + +``` +02/06/13 +/home/tutorial > +``` + +## 配置 + +Fish 的配置文件是 `~/.config/fish/config.fish`,每次 `Fish` 启动,就会自动加载这个文件。Fish 还提供 Web 界面配置该文件。 + +```bash +$ fish_config # 浏览器打开 Web 界面配置 +``` + +Running Commands: 兼容 bash 等shell的命令执行方式 +Getting Help: `help/man cmd -> browser/terminal` +Syntax Highlighting: 实时检查命令是否正确 +Wildcards: 支持缩写 `*` 递归 匹配 +Pipes and Redirections: 使用 `^` 代表 stderr +Autosuggestions: 自动建议, 可以使用 `Ctrl-f / ->` 来补全 +Tab Completions: 更强大的 tab 补全 +Variables: 使用 set 设置 +Exit Status: 使用 `echo $status` 替代 `$?` +Exports (Shell Variables) +Lists: all variables in fish are really lists +Command Substitutions: 使用 `(cmd)` 来执行命令, 而不是 反引号、`$()` +Combiners (And, Or, Not): 不支持使用符合来表示逻辑运算 +Functions:使用 `$argv` 替代 `$1` +Conditionals (If, Else, Switch) / Functions / Loops: 更人性化的写法(参考 py) +Prompt: `function fish_prompt` 实现 +Startup (Where's .bashrc?): `~/.config/fish/config.fish`,更好的方式是 autoloading-function、universal-variables +Autoloading Functions: ` ~/.config/fish/functions/.` +Universal Variables:a variable whose value is shared across all instances of fish + +```bash set name 'czl' # 设置变量,替代 name=czl echo $name echo $status # exit status,替代 $? @@ -39,4 +175,8 @@ set -U fish_user_paths /usr/local/bin $fish_user_paths # 永久生效 touch "testing_"(date +%s)".txt" # command subtitution,替代 `date +%s` cp file.txt file.txt.bak; and echo 'back success'; or echo 'back fail' # combiner functions # 列出 fish 下定义的函数 -``` \ No newline at end of file +``` + +## 参考资料 + +- [fish-shell官网](http://fishshell.com) \ No newline at end of file From e501565858c4fc02f80ea0dc4d75e373dfba81c5 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Fri, 8 Jun 2018 16:22:10 +0800 Subject: [PATCH 0179/1284] #42 Fix markdown syntax error. --- command/ssh.md | 36 ++++++++++----------- command/tar.md | 88 ++++++++++++++++++++++++++------------------------ 2 files changed, 64 insertions(+), 60 deletions(-) diff --git a/command/ssh.md b/command/ssh.md index 522f1eb1d8a..317017af78e 100644 --- a/command/ssh.md +++ b/command/ssh.md @@ -60,9 +60,9 @@ ssh-copy-id user@ip:port # 将当前用户的公钥复制到需要 ssh 的服务 ### 背后故事 -> 英文:Tatu Ylonen -> 编译:Linux中国/kenxx -> 来源:https://linux.cn/article-8476-1.html +> 英文:Tatu Ylonen +> 编译:Linux中国/kenxx +> 来源:https://linux.cn/article-8476-1.html 为什么 SSH(安全终端)的端口号是 22 呢,这不是一个巧合,这其中有个我(Tatu Ylonen,SSH 协议的设计者)未曾诉说的故事。 @@ -79,11 +79,11 @@ ssh-copy-id user@ip:port # 将当前用户的公钥复制到需要 ssh 的服务 1995 年 7 月,就在我发布 ssh-1.0 前,我发送了一封邮件给 IANA: -> From ylo Mon Jul 10 11:45:48 +0300 1995 -> From: Tatu Ylonen -> To: Internet Assigned Numbers Authority -> Subject: 请求取得一个端口号 -> Organization: 芬兰赫尔辛基理工大学 +> From ylo Mon Jul 10 11:45:48 +0300 1995 +> From: Tatu Ylonen +> To: Internet Assigned Numbers Authority +> Subject: 请求取得一个端口号 +> Organization: 芬兰赫尔辛基理工大学 > > 亲爱的机构成员: > @@ -95,21 +95,21 @@ ssh-copy-id user@ip:port # 将当前用户的公钥复制到需要 ssh 的服务 > > 软件中服务的名称叫 ssh(系 Secure Shell 的缩写)。 > -> 您最真诚的, -> Tatu Ylonen +> 您最真诚的, +> Tatu Ylonen (LCTT 译注:DNS 协议中的 WKS 记录类型意即“众所周知的业务描述”,是类似于 A、MX 这样的 DNS 记录类型,用于描述某个 IP 所提供的服务,目前鲜见使用。参见: https://docs.oracle.com/cd/E19683-01/806-4077/dnsintro-154/index.html 。) 第二天,我就收到了 Joyce 发来的邮件: -> Date: Mon, 10 Jul 1995 15:35:33 -0700 -> From: jkrey@ISI.EDU -> To: ylo@cs.hut.fi -> Subject: 回复:请求取得一个端口号 -> Cc: iana@ISI.EDU -> Tatu, -> 我们将端口号 22 分配给 ssh 服务了,你目前是该服务的主要联系人。 -> Joyce +> Date: Mon, 10 Jul 1995 15:35:33 -0700 +> From: jkrey@ISI.EDU +> To: ylo@cs.hut.fi +> Subject: 回复:请求取得一个端口号 +> Cc: iana@ISI.EDU +> Tatu, +> 我们将端口号 22 分配给 ssh 服务了,你目前是该服务的主要联系人。 +> Joyce 这就搞定了!SSH 的端口正式使用 22!!! diff --git a/command/tar.md b/command/tar.md index a10ea3918fc..669d04ba734 100644 --- a/command/tar.md +++ b/command/tar.md @@ -85,22 +85,22 @@ tar -xf archive.tar # 从archive.tar提取所有文件。 #### zip格式 -压缩: zip -r [目标文件名].zip [原文件/目录名] -解压: unzip [原文件名].zip -注:-r参数代表递归 +压缩: zip -r [目标文件名].zip [原文件/目录名] +解压: unzip [原文件名].zip +注:-r参数代表递归 #### tar格式(该格式仅仅打包,不压缩) -打包:tar -cvf [目标文件名].tar [原文件名/目录名] -解包:tar -xvf [原文件名].tar -注:c参数代表create(创建),x参数代表extract(解包),v参数代表verbose(详细信息),f参数代表filename(文件名),所以f后必须接文件名。 +打包:tar -cvf [目标文件名].tar [原文件名/目录名] +解包:tar -xvf [原文件名].tar +注:c参数代表create(创建),x参数代表extract(解包),v参数代表verbose(详细信息),f参数代表filename(文件名),所以f后必须接文件名。 #### tar.gz格式 方式一:利用前面已经打包好的tar文件,直接用压缩命令。 -压缩:gzip [原文件名].tar -解压:gunzip [原文件名].tar.gz +压缩:gzip [原文件名].tar +解压:gunzip [原文件名].tar.gz 方式二:一次性打包并压缩、解压并解包 @@ -112,63 +112,67 @@ tar -xf archive.tar # 从archive.tar提取所有文件。 方式一:利用已经打包好的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 -解压: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文件,直接用压缩命令: -压缩:compress [原文件名].tar -解压:uncompress [原文件名].tar.Z -方式二:一次性打包并压缩、解压并解包 +压缩:compress [原文件名].tar +解压:uncompress [原文件名].tar.Z +方式二:一次性打包并压缩、解压并解包 -打包并压缩: tar -Zcvf [目标文件名].tar.Z [原文件名/目录名] -解压并解包: tar -Zxvf [原文件名].tar.Z -注:大写Z代表用ncompress算法来压缩/解压。另,ncompress是早期Unix系统的压缩格式,但由于ncompress的压缩率太低,现已过时。 +打包并压缩: tar -Zcvf [目标文件名].tar.Z [原文件名/目录名] +解压并解包: tar -Zxvf [原文件名].tar.Z +注:大写Z代表用ncompress算法来压缩/解压。另,ncompress是早期Unix系统的压缩格式,但由于ncompress的压缩率太低,现已过时。 #### jar格式 -压缩:jar -cvf [目标文件名].jar [原文件名/目录名] -解压:jar -xvf [原文件名].jar -注:如果是打包的是Java类库,并且该类库中存在主类,那么需要写一个META-INF/MANIFEST.MF配置文件,内容如下: +压缩: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方法了。 +jar -cvfm [目标文件名].jar META-INF/MANIFEST.MF [原文件名/目录名] +这样以后就能用“java -jar [文件名].jar”命令直接运行主类中的public static void main方法了。 #### 7z格式 -压缩:7z a [目标文件名].7z [原文件名/目录名] -解压:7z x [原文件名].7z -注:这个7z解压命令支持rar格式,即: +压缩:7z a [目标文件名].7z [原文件名/目录名] +解压:7z x [原文件名].7z +注:这个7z解压命令支持rar格式,即: 7z x [原文件名].rar #### 其它例子 - **将文件全部打包成tar包** : +**将文件全部打包成tar包** : ``` tar -cvf log.tar log2012.log 仅打包,不压缩! @@ -178,7 +182,7 @@ tar -jcvf log.tar.bz2 log2012.log 打包后,以 bzip2 压缩 在选项`f`之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。 如果加`z`选项,则以.tar.gz或.tgz来代表gzip压缩过的tar包;如果加`j`选项,则以.tar.bz2来作为tar包名。 - **查阅上述tar包内有哪些文件** : +**查阅上述tar包内有哪些文件** : ``` tar -ztvf log.tar.gz @@ -186,7 +190,7 @@ tar -ztvf log.tar.gz 由于我们使用 gzip 压缩的log.tar.gz,所以要查阅log.tar.gz包内的文件时,就得要加上`z`这个选项了。 - **将tar包解压缩** : +**将tar包解压缩** : ``` tar -zxvf /opt/soft/test/log.tar.gz @@ -194,7 +198,7 @@ tar -zxvf /opt/soft/test/log.tar.gz 在预设的情况下,我们可以将压缩档在任何地方解开的 - **只将tar内的部分文件解压出来** : +**只将tar内的部分文件解压出来** : ``` tar -zxvf /opt/soft/test/log30.tar.gz log2013.log @@ -202,7 +206,7 @@ tar -zxvf /opt/soft/test/log30.tar.gz log2013.log 我可以透过`tar -ztvf`来查阅 tar 包内的文件名称,如果单只要一个文件,就可以透过这个方式来解压部分文件! - **文件备份下来,并且保存其权限** : +**文件备份下来,并且保存其权限** : ``` tar -zcvpf log31.tar.gz log2014.log log2015.log log2016.log @@ -210,19 +214,19 @@ 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 就只要记忆底下的方式即可:** ``` 压 缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称 From 5f6be49a4f944ca6b2094cd3a83e0912ac97a6a0 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Fri, 8 Jun 2018 16:28:32 +0800 Subject: [PATCH 0180/1284] Update supervisord.md --- command/supervisord.md | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/command/supervisord.md b/command/supervisord.md index 6ce8926712c..069918b4bbc 100644 --- a/command/supervisord.md +++ b/command/supervisord.md @@ -1,20 +1,35 @@ supervisord === -配置后台服务/常驻进程的工具 +配置后台服务/常驻进程的进程管家工具 -## 实例 +## 安装 -``` -# supervisord +```bash +# 安装 supervisord apt-get install supervisor +``` + +## 实例 + +生成配置文件 `/etc/supervisord.conf` + +```bash [program:app] command=/usr/bin/gunicorn -w 1 wsgiapp:application directory=/srv/www user=www-data +``` supervisord: 启动 supervisor 服务 + +```bash supervisorctl start app supervisorctl stop app supervisorctl reload # 修改/添加配置文件需要执行这个 -``` \ No newline at end of file +``` + +## 下载地址 + +https://pypi.python.org/pypi/meld3 +https://pypi.python.org/pypi/supervisor \ No newline at end of file From 114fd381670a7c59b30ed35708fbd12b9c347a5d Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Fri, 8 Jun 2018 16:29:43 +0800 Subject: [PATCH 0181/1284] remove rz.md --- command/rz.md | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 command/rz.md diff --git a/command/rz.md b/command/rz.md deleted file mode 100644 index 187c547a52d..00000000000 --- a/command/rz.md +++ /dev/null @@ -1,11 +0,0 @@ -# rz - -文件上传 - -## quick start - -``` -apk add lrzsz - -rz -``` \ No newline at end of file From 56cd454ce75c54b499f70dd80fb93ff4d969df45 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Fri, 8 Jun 2018 16:39:08 +0800 Subject: [PATCH 0182/1284] Update tmux.md #42 --- command/tmux.md | 364 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 348 insertions(+), 16 deletions(-) diff --git a/command/tmux.md b/command/tmux.md index e2692efc269..f32a0c03ed9 100644 --- a/command/tmux.md +++ b/command/tmux.md @@ -1,22 +1,354 @@ tmux === -比 screen 好用的 ssh 窗口管理工具 +Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权。 -## 实例 +## 补充说明 +使用它最直观的好处就是,通过一个终端登录远程主机并运行tmux后,在其中可以开启多个控制台而无需再“浪费”多余的终端来连接这台远程主机; + +## 功能 + +- 提供了强劲的、易于使用的命令行界面。 +- 可横向和纵向分割窗口。 +- 窗格可以自由移动和调整大小,或直接利用四个预设布局之一。 +- 支持 UTF-8 编码及 256 色终端。 +- 可在多个缓冲区进行复制和粘贴。 +- 可通过交互式菜单来选择窗口、会话及客户端。 +- 支持跨窗口搜索。 +- 支持自动及手动锁定窗口。 + +## 安装 + +```bash +# 在 Mac OS 中,通过 brew 安装 +brew install tmux +# ubuntu版本下直接apt-get安装 +sudo apt-get install tmux +# centos7版本下直接yum安装 +yum install -y tmux + +# centos6版本需要编译安装 +yum install libevent libevent-devel ncurses-devel +tar -zvxf tmux-2.3.tar.gz # (提前下载:wget https://github.com/tmux/tmux/releases/download/2.3/tmux-2.3.tar.gz) +cd tmux-2.3 +./configure +make && make install ``` -apk add tmux # 安装 - -# tmux -tmux # new session -tmux a # attach session -C-b-d # detach session -C-b-c # new window -C-b-num # ch window -exit # exit window -C-b "/% # split window -C-b 方向键 -C-b ? # keymap -no rz/sz -``` \ No newline at end of file + +## 快捷键使用说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
Ctrl+b
+
+
激活控制台;此时以下按键生效
+
+
系统操作
+
+
?
+
+
列出所有快捷键;按q返回
+
+
d
+
+
脱离当前会话;这样可以暂时返回Shell界面,输入tmux attach能够重新进入之前的会话
+
+
D
+
+
选择要脱离的会话;在同时开启了多个会话时使用
+
+
Ctrl+z
+
+
挂起当前会话
+
+
r
+
+
强制重绘未脱离的会话
+
+
s
+
+
选择并切换会话;在同时开启了多个会话时使用
+
+
:
+
+
进入命令行模式;此时可以输入支持的命令,例如kill-server可以关闭服务器
+
+
[
+
+
进入复制模式;此时的操作与vi/emacs相同,按q/Esc退出
+
+
~
+
+
列出提示信息缓存;其中包含了之前tmux返回的各种提示信息
+
+
窗口操作
+
+
c
+
+
创建新窗口
+
+
&
+
+
关闭当前窗口
+
+
数字键
+
+
切换至指定窗口
+
+
p
+
+
切换至上一窗口
+
+
n
+
+
切换至下一窗口
+
+
l
+
+
在前后两个窗口间互相切换
+
+
w
+
+
通过窗口列表切换窗口
+
+
,
+
+
重命名当前窗口;这样便于识别
+
+
.
+
+
修改当前窗口编号;相当于窗口重新排序
+
+
f
+
+
在所有窗口中查找指定文本
+
+
面板操作
+
+
+
+
将当前面板平分为上下两块
+
+
%
+
+
将当前面板平分为左右两块
+
+
x
+
+
关闭当前面板
+
+
!
+
+
将当前面板置于新窗口;即新建一个窗口,其中仅包含当前面板
+
+
Ctrl+方向键
+
+
以1个单元格为单位移动边缘以调整当前面板大小
+
+
Alt+方向键
+
+
以5个单元格为单位移动边缘以调整当前面板大小
+
+
Space
+
+
在预置的面板布局中循环切换;依次包括even-horizontal、even-vertical、main-horizontal、main-vertical、tiled
+
+
q
+
+
显示面板编号
+
+
o
+
+
在当前窗口中选择下一面板
+
+
方向键
+
+
移动光标以选择面板
+
+
{
+
+
向前置换当前面板
+
+
}
+
+
向后置换当前面板
+
+
Alt+o
+
+
逆时针旋转当前窗口的面板
+
+
Ctrl+o
+
+
顺时针旋转当前窗口的面板
+
+ +1)进入tmux面板后,一定要先按ctrl+b,然后松开,再按其他的组合键才生效。 +2)常用到的几个组合键: + +``` +ctrl+b ? 显示快捷键帮助 +ctrl+b 空格键 采用下一个内置布局,这个很有意思,在多屏时,用这个就会将多有屏幕竖着展示 +ctrl+b ! 把当前窗口变为新窗口 +ctrl+b " 模向分隔窗口 +ctrl+b % 纵向分隔窗口 +ctrl+b q 显示分隔窗口的编号 +ctrl+b o 跳到下一个分隔窗口。多屏之间的切换 +ctrl+b 上下键 上一个及下一个分隔窗口 +ctrl+b C-方向键 调整分隔窗口大小 +ctrl+b & 确认后退出当前tmux +ctrl+b [ 复制模式,即将当前屏幕移到上一个的位置上,其他所有窗口都向前移动一个。 +ctrl+b c 创建新窗口 +ctrl+b n 选择下一个窗口 +ctrl+b l 最后使用的窗口 +ctrl+b p 选择前一个窗口 +ctrl+b w 以菜单方式显示及选择窗口 +ctrl+b s 以菜单方式显示和选择会话。这个常用到,可以选择进入哪个tmux +ctrl+b t 显示时钟。然后按enter键后就会恢复到shell终端状态 +ctrl+b d 脱离当前会话;这样可以暂时返回Shell界面,输入tmux attach能够重新进入之前的会话 +``` + +## 参考资料 + +- tmux 官网下载地址:http://tmux.github.io/ \ No newline at end of file From f873307e6e4789fd15f181f298d54d176ab26d83 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Fri, 8 Jun 2018 16:43:00 +0800 Subject: [PATCH 0183/1284] remove mtr.md & sz.md --- command/mtr.md | 12 ------------ command/sz.md | 12 ------------ 2 files changed, 24 deletions(-) delete mode 100644 command/mtr.md delete mode 100644 command/sz.md diff --git a/command/mtr.md b/command/mtr.md deleted file mode 100644 index d73de37717b..00000000000 --- a/command/mtr.md +++ /dev/null @@ -1,12 +0,0 @@ -mtr -=== - -比 traceroute 好用 - -## 实例 - -``` -apk add mtr # 安装 - -mtr -r www.baidu.com # 使用 -``` \ No newline at end of file diff --git a/command/sz.md b/command/sz.md deleted file mode 100644 index 1597dc46f78..00000000000 --- a/command/sz.md +++ /dev/null @@ -1,12 +0,0 @@ -sz -=== - -对话框式文件下载工具 - -## 实例 - -``` -apk add lrzsz # 安装 - -sz $file # 下载 -``` \ No newline at end of file From 5e0151634f15fe75357ca927f92d0a43df184653 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Fri, 8 Jun 2018 16:51:13 +0800 Subject: [PATCH 0184/1284] Update command. --- build/compile.js | 6 +++--- build/deploy.js | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build/compile.js b/build/compile.js index dc5a6eae03a..594a6866c94 100644 --- a/build/compile.js +++ b/build/compile.js @@ -276,6 +276,9 @@ function CreateDatajs(dt_path,callback){ json["p"] = md_path.replace(/\.md$/,'').replace(path_md,''); // 命令描述 var des = str.match(/\n==={1,}([\s\S]*?)##/i); + if (!des) { + console.log('格式错误:', error(md_path)); + } des = des[1]?des[1].replace(/\n/g,''):des[1]; des = des.replace(/\r/g,'') json["d"] = des; @@ -289,10 +292,7 @@ function CreateDatajs(dt_path,callback){ //生成数据文件 fs.writeFile(dt_path, 'var linux_commands='+JSON.stringify(indexes) , 'utf8',function(err){ console.log(success("\n → ")+"生成数据成功!"+dt_path+" \n "); - - path_dist = path.join(path_dist,'data.json') - fs.writeFile(path_dist, JSON.stringify(command_data) , 'utf8',function(err){ console.log(success("\n → ")+"生成数据成功!"+path_dist+" \n "); callback&&callback(dt_path,indexes); diff --git a/build/deploy.js b/build/deploy.js index 8b82cf307be..7d00995123d 100644 --- a/build/deploy.js +++ b/build/deploy.js @@ -15,7 +15,7 @@ if(fs.existsSync(deploy_path)){ var load = loading(' Pushing code!!') load.start(); ghpages.publish(deploy_path,{ - repo: 'https://github.com/jaywcjlove/linux-command.git', + repo: 'git@github.com:jaywcjlove/linux-command.git', branch: 'gh-pages', message: 'Linux command index, Compiler generation page ' + new Date() }, function(err) { From eff0386bd8cbffeaafc115aa3c8c2bc4cd53425a Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Fri, 8 Jun 2018 16:51:26 +0800 Subject: [PATCH 0185/1284] Update fishshell.md --- command/fishshell.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/command/fishshell.md b/command/fishshell.md index 6b99d3cc7cc..2457cf63244 100644 --- a/command/fishshell.md +++ b/command/fishshell.md @@ -1,4 +1,5 @@ -# fishshell +fishshell +=== 比 bash 更好用的 shell From 034ffe927028a30bddefc9d4e271e379649b34d7 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Fri, 8 Jun 2018 16:52:26 +0800 Subject: [PATCH 0186/1284] released v1.2.0 --- dist/data.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/data.json b/dist/data.json index 49ee7c0ac38..b171a5c8363 100644 --- a/dist/data.json +++ b/dist/data.json @@ -1 +1 @@ -{"w":{"n":"w","p":"/w","d":"显示目前登入系统的用户信息"},"ab":{"n":"ab","p":"/ab","d":"Apache服务器的性能测试工具"},"ip":{"n":"ip","p":"/ip","d":"网络配置工具"},"ld":{"n":"ld","p":"/ld","d":"将目标文件连接为可执行程序"},"xz":{"n":"xz","p":"/xz","d":"POSIX 平台开发具有高压缩率的工具。"},"ln":{"n":"ln","p":"/ln","d":"用来为文件创件连接"},"ar":{"n":"ar","p":"/ar","d":"建立或修改备存文件,或是从备存文件中抽取文件"},"lp":{"n":"lp","p":"/lp","d":"打印文件或修改排队的打印任务"},"fg":{"n":"fg","p":"/fg","d":"将后台作业放到前台终端运行"},"wc":{"n":"wc","p":"/wc","d":"统计文件的字节数、字数、行数"},"as":{"n":"as","p":"/as","d":"汇编语言编译器"},"at":{"n":"at","p":"/at","d":"在指定时间执行一个任务"},"fc":{"n":"fc","p":"/fc","d":"修改历史命令并执行"},"ls":{"n":"ls","p":"/ls","d":"显示目录内容列表"},"id":{"n":"id","p":"/id","d":"显示用户的ID以及所属群组的ID"},"vi":{"n":"vi","p":"/vi","d":"功能强大的纯文本编辑器"},"bc":{"n":"bc","p":"/bc","d":"算术操作精密运算工具"},"bg":{"n":"bg","p":"/bg","d":"用于将作业放到后台运行"},"ex":{"n":"ex","p":"/ex","d":"启动vim编辑器的ex编辑模式"},"ed":{"n":"ed","p":"/ed","d":"单行纯文本编辑器"},"tr":{"n":"tr","p":"/tr","d":"将字符进行替换压缩和删除"},"mv":{"n":"mv","p":"/mv","d":"用来对文件或目录重新命名"},"du":{"n":"du","p":"/du","d":"显示每个文件和目录的磁盘使用空间"},"nc":{"n":"nc","p":"/nc","d":"命令用于设置路由器。"},"nl":{"n":"nl","p":"/nl","d":"在Linux系统中计算文件内容行号"},"nm":{"n":"nm","p":"/nm","d":"显示二进制目标文件的符号表"},"cd":{"n":"cd","p":"/cd","d":"切换用户当前工作目录"},"od":{"n":"od","p":"/od","d":"输出文件的八进制、十六进制等格式编码的字节"},"pr":{"n":"pr","p":"/pr","d":"将文本文件转换成适合打印的格式"},"su":{"n":"su","p":"/su","d":"用于切换当前用户身份到其他用户身份"},"ps":{"n":"ps","p":"/ps","d":"报告当前系统的进程状态"},"ss":{"n":"ss","p":"/ss","d":"获取socket统计信息,iproute2 包附带的另一个工具,允许你查询 socket 的有关统计信息。"},"sh":{"n":"sh","p":"/sh","d":"shell命令解释器"},"pv":{"n":"pv","p":"/pv","d":"显示当前在命令行执行的命令的进度信息,管道查看器。"},"df":{"n":"df","p":"/df","d":"显示磁盘的相关信息"},"dd":{"n":"dd","p":"/dd","d":"复制文件并对原文件的内容进行转换和格式化处理"},"rm":{"n":"rm","p":"/rm","d":"用于删除给定的文件和目录"},"cu":{"n":"cu","p":"/cu","d":"用于连接另一个系统主机。"},"cp":{"n":"cp","p":"/cp","d":"将源文件或目录复制到目标文件或目录中"},"man":{"n":"man","p":"/man","d":"查看Linux中的指令帮助"},"sar":{"n":"sar","p":"/sar","d":"系统运行状态统计工具"},"rsh":{"n":"rsh","p":"/rsh","d":"连接远程主机并执行命令"},"rpm":{"n":"rpm","p":"/rpm","d":"RPM软件包的管理工具"},"sed":{"n":"sed","p":"/sed","d":"功能强大的流式文本编辑器"},"seq":{"n":"seq","p":"/seq","d":"以指定增量从首数开始打印数字到尾数"},"zip":{"n":"zip","p":"/zip","d":"可以用来解压缩文件"},"cut":{"n":"cut","p":"/cut","d":"连接文件并打印到标准输出设备上"},"set":{"n":"set","p":"/set","d":"显示或设置shell特性及shell变量"},"rcp":{"n":"rcp","p":"/rcp","d":"使在两台Linux主机之间的文件复制操作更简单"},"col":{"n":"col","p":"/col","d":"过滤控制字符"},"pwd":{"n":"pwd","p":"/pwd","d":"绝对路径方式显示用户当前工作目录"},"pvs":{"n":"pvs","p":"/pvs","d":"输出物理卷信息报表"},"cmp":{"n":"cmp","p":"/cmp","d":"比较两个文件是否有差异"},"dig":{"n":"dig","p":"/dig","d":"域名查询工具"},"ssh":{"n":"ssh","p":"/ssh","d":"openssh套件中的客户端连接工具"},"sum":{"n":"sum","p":"/sum","d":"计算文件的校验码和显示块数"},"dnf":{"n":"dnf","p":"/dnf","d":"新一代的RPM软件包管理器"},"php":{"n":"php","p":"/php","d":"PHP语言的命令行接口"},"tac":{"n":"tac","p":"/tac","d":"将文件已行为单位的反序输出"},"cat":{"n":"cat","p":"/cat","d":"连接文件并打印到标准输出设备上"},"cal":{"n":"cal","p":"/cal","d":"显示当前日历或指定日期的日历"},"tar":{"n":"tar","p":"/tar","d":"Linux下的归档使用工具,用来打包和备份。"},"tee":{"n":"tee","p":"/tee","d":"把数据重定向到给定文件和屏幕上"},"top":{"n":"top","p":"/top","d":"显示或管理执行中的程序"},"bye":{"n":"bye","p":"/bye","d":"命令用于中断FTP连线并结束程序。。"},"scp":{"n":"scp","p":"/scp","d":"加密的方式在本地主机和远程主机之间复制文件"},"elm":{"n":"elm","p":"/elm","d":"纯文本邮件客户端程序"},"env":{"n":"env","p":"/env","d":"显示系统中已存在的环境变量"},"tty":{"n":"tty","p":"/tty","d":"显示连接到当前标准输入的终端设备文件名。"},"awk":{"n":"awk","p":"/awk","d":"文本和数据进行处理的编程语言"},"lpr":{"n":"lpr","p":"/lpr","d":"将文件发送给指定打印机进行打印"},"atq":{"n":"atq","p":"/atq","d":"列出当前用户的at任务列表"},"lpq":{"n":"lpq","p":"/lpq","d":"显示打印队列中的打印任务的状态信息"},"arp":{"n":"arp","p":"/arp","d":"显示和修改IP到MAC转换表"},"lpc":{"n":"lpc","p":"/lpc","d":"命令行方式打印机控制程序"},"arj":{"n":"arj","p":"/arj","d":"用于创建和管理.arj压缩包"},"who":{"n":"who","p":"/who","d":"显示目前登录系统的用户信息"},"fmt":{"n":"fmt","p":"/fmt","d":"读取文件后优化处理并输出"},"ftp":{"n":"ftp","p":"/ftp","d":"用来设置文件系统相关功能"},"lha":{"n":"lha","p":"/lha","d":"压缩或解压缩lzh格式文件"},"let":{"n":"let","p":"/let","d":"简单的计算器"},"gcc":{"n":"gcc","p":"/gcc","d":"基于C/C++的编译器"},"gdb":{"n":"gdb","p":"/gdb","d":"功能强大的程序调试器"},"ldd":{"n":"ldd","p":"/ldd","d":"打印程序或者库文件所依赖的共享库列表"},"yes":{"n":"yes","p":"/yes","d":"重复打印指定字符串"},"git":{"n":"git","p":"/git","d":"是目前世界上最先进的分布式版本控制系统"},"gpm":{"n":"gpm","p":"/gpm","d":"提供文字模式下的滑鼠事件处理"},"joe":{"n":"joe","p":"/joe","d":"强大的纯文本编辑器"},"jed":{"n":"jed","p":"/jed","d":"主要用于编辑代码的编辑器"},"yum":{"n":"yum","p":"/yum","d":"基于RPM的软件包管理器"},"rev":{"n":"rev","p":"/rev","d":"将文件内容以字符为单位反序输出"},"chfn":{"n":"chfn","p":"/chfn","d":"用来改变finger命令显示的信息"},"sudo":{"n":"sudo","p":"/sudo","d":"以其他身份来执行命令"},"pssh":{"n":"pssh","p":"/pssh","d":"批量管理执行"},"bind":{"n":"bind","p":"/bind","d":"显示或设置键盘按键与其相关的功能"},"dirs":{"n":"dirs","p":"/dirs","d":"显示目录记录"},"stty":{"n":"stty","p":"/stty","d":"修改终端命令行的相关设置"},"popd":{"n":"popd","p":"/popd","d":"用于删除目录栈中的记录"},"stat":{"n":"stat","p":"/stat","d":"用于显示文件的状态信息"},"pmap":{"n":"pmap","p":"/pmap","d":"报告进程的内存映射关系"},"ping":{"n":"ping","p":"/ping","d":"测试主机之间网络的连通性"},"pico":{"n":"pico","p":"/pico","d":"功能强大全屏幕的文本编辑器"},"sshd":{"n":"sshd","p":"/sshd","d":"openssh软件套件中的服务器守护进程"},"perl":{"n":"perl","p":"/perl","d":"perl语言解释器"},"uniq":{"n":"uniq","p":"/uniq","d":"报告或忽略文件中的重复行"},"nmap":{"n":"nmap","p":"/nmap","d":"网络探测和安全审核"},"chsh":{"n":"chsh","p":"/chsh","d":"用来更换登录系统时使用的shell"},"type":{"n":"type","p":"/type","d":"显示指定命令的类型"},"nice":{"n":"nice","p":"/nice","d":"改变程序执行的优先权等级"},"sort":{"n":"sort","p":"/sort","d":"将文件进行排序并输出"},"dpkg":{"n":"dpkg","p":"/dpkg","d":"Debian Linux系统上安装、创建和管理软件包"},"dris":{"n":"dris","p":"/dris","d":"显示和清空目录堆栈中的内容"},"nano":{"n":"nano","p":"/nano","d":"字符终端文本编辑器"},"xset":{"n":"xset","p":"/xset","d":"设置X-Window系统中的用户爱好的实用工具"},"dump":{"n":"dump","p":"/dump","d":"用于备份ext2或者ext3文件系统"},"sftp":{"n":"sftp","p":"/sftp","d":"交互式的文件传输程序"},"more":{"n":"more","p":"/more","d":"显示文件内容,每次显示一屏"},"echo":{"n":"echo","p":"/echo","d":"输出指定的字符串或者变量"},"tree":{"n":"tree","p":"/tree","d":"树状图列出目录的内容"},"mkfs":{"n":"mkfs","p":"/mkfs","d":"用于在设备上创建Linux文件系统"},"mesg":{"n":"mesg","p":"/mesg","d":"设置当前终端的写权限"},"trap":{"n":"trap","p":"/trap","d":"指定在接收到信号后将要采取的动作"},"make":{"n":"make","p":"/make","d":"GNU的工程化编译工具"},"atop":{"n":"atop","p":"/atop","d":"监控Linux系统资源与进程的工具"},"mail":{"n":"mail","p":"/mail","d":"命令行下发送和接收电子邮件"},"lynx":{"n":"lynx","p":"/lynx","d":"纯文本模式的网页浏览器"},"comm":{"n":"comm","p":"/comm","d":"两个文件之间的比较"},"lsof":{"n":"lsof","p":"/lsof","d":"显示Linux系统当前已打开的所有文件列表"},"zcat":{"n":"zcat","p":"/zcat","d":"显示压缩包中文件的内容"},"exec":{"n":"exec","p":"/exec","d":"调用并执行指定的命令"},"exit":{"n":"exit","p":"/exit","d":"退出当前的shell"},"tput":{"n":"tput","p":"/tput","d":"通过terminfo数据库对终端会话进行初始化和操作"},"lprm":{"n":"lprm","p":"/lprm","d":"删除打印队列中的打印任务"},"atrm":{"n":"atrm","p":"/atrm","d":"删除待执行任务队列中的指定任务"},"expr":{"n":"expr","p":"/expr","d":"一款表达式计算工具"},"time":{"n":"time","p":"/time","d":"统计给定命令所花费的总时间"},"tftp":{"n":"tftp","p":"/tftp","d":"在本机和tftp服务器之间使用TFTP协议传输文件"},"cpio":{"n":"cpio","p":"/cpio","d":"用来建立、还原备份档的工具程序"},"test":{"n":"test","p":"/test","d":"shell环境中测试条件表达式工具"},"file":{"n":"file","p":"/file","d":"用来探测给定文件的类型。"},"find":{"n":"find","p":"/find","d":"在指定目录下查找文件"},"arpd":{"n":"arpd","p":"/arpd","d":"收集免费ARP信息"},"look":{"n":"look","p":"/look","d":"显示文件中以指定字符串开头的任意行"},"axel":{"n":"axel","p":"/axel","d":"多线程下载工具"},"wait":{"n":"wait","p":"/wait","d":"等待进程执行完后返回"},"fold":{"n":"fold","p":"/fold","d":"控制文件内容输出时所占用的屏幕宽度"},"free":{"n":"free","p":"/free","d":"显示内存的使用情况"},"fsck":{"n":"fsck","p":"/fsck","d":"检查并且试图修复文件系统中的错误"},"talk":{"n":"talk","p":"/talk","d":"让用户和其他用户聊天"},"lilo":{"n":"lilo","p":"/lilo","d":"安装核心载入开机管理程序"},"curl":{"n":"curl","p":"/curl","d":"利用URL规则在命令行下工作的文件传输工具"},"lftp":{"n":"lftp","p":"/lftp","d":"优秀的文件客户端程序"},"wget":{"n":"wget","p":"/wget","d":"Linux系统下载文件工具"},"less":{"n":"less","p":"/less","d":"分屏上下翻页浏览文件内容"},"date":{"n":"date","p":"/date","d":"显示或设置系统时间与日期"},"gcov":{"n":"gcov","p":"/gcov","d":"测试程序的代码覆盖率的工具"},"znew":{"n":"znew","p":"/znew","d":"将.Z压缩包重新转化为gzip命令压缩的.gz压缩包"},"read":{"n":"read","p":"/read","d":"从键盘读取变量值"},"tail":{"n":"tail","p":"/tail","d":"在屏幕上显示指定文件的末尾若干行"},"last":{"n":"last","p":"/last","d":"列出目前与过去登入系统的用户相关信息"},"wall":{"n":"wall","p":"/wall","d":"向系统当前所有打开的终端上输出信息"},"kill":{"n":"kill","p":"/kill","d":"删除执行中的程序或工作"},"sync":{"n":"sync","p":"/sync","d":"用于强制被改变的内容立刻写入磁盘"},"grep":{"n":"grep","p":"/grep","d":"强大的文本搜索工具"},"join":{"n":"join","p":"/join","d":"两个文件中指定栏位内容相同的行连接起来"},"pwck":{"n":"pwck","p":"/pwck","d":"用来验证系统认证文件内容和格式的完整性"},"jobs":{"n":"jobs","p":"/jobs","d":"显示Linux中的任务列表及任务状态"},"arch":{"n":"arch","p":"/arch","d":"显示当前主机的硬件架构类型"},"ipcs":{"n":"ipcs","p":"/ipcs","d":"分析消息队列共享内存和信号量 "},"diff":{"n":"diff","p":"/diff","d":"比较给定的两个文件的不同"},"init":{"n":"init","p":"/init","d":"init进程是所有Linux进程的父进程"},"grub":{"n":"grub","p":"/grub","d":"多重引导程序grub的命令行shell工具"},"info":{"n":"info","p":"/info","d":"Linux下info格式的帮助指令"},"ifup":{"n":"ifup","p":"/ifup","d":"激活指定的网络接口"},"gzip":{"n":"gzip","p":"/gzip","d":"用来压缩文件"},"halt":{"n":"halt","p":"/halt","d":"关闭正在运行的Linux操作系统"},"pvck":{"n":"pvck","p":"/pvck","d":"检测物理卷的LVM元数据的一致性"},"head":{"n":"head","p":"/head","d":"在屏幕上显示指定文件的开头若干行"},"help":{"n":"help","p":"/help","d":"显示帮助信息"},"htop":{"n":"htop","p":"/htop","d":"[非内部命令]一个互动的进程查看器,可以动态观察系统进程状况。"},"host":{"n":"host","p":"/host","d":"常用的分析域名查询工具"},"mysql":{"n":"mysql","p":"/mysql","d":"MySQL服务器客户端工具"},"bzcat":{"n":"bzcat","p":"/bzcat","d":"解压缩指定的.bz2文件"},"touch":{"n":"touch","p":"/touch","d":"创建新的空文件"},"iconv":{"n":"iconv","p":"/iconv","d":"转换文件的编码方式"},"ifcfg":{"n":"ifcfg","p":"/ifcfg","d":"置Linux中的网络接口参数"},"iftop":{"n":"iftop","p":"/iftop","d":"一款实时流量监控工具"},"gzexe":{"n":"gzexe","p":"/gzexe","d":"用来压缩可执行文件"},"tload":{"n":"tload","p":"/tload","d":"显示系统负载状况"},"iotop":{"n":"iotop","p":"/iotop","d":"用来监视磁盘I/O使用状况的工具"},"alias":{"n":"alias","p":"/alias","d":"用来设置指令的别名"},"zfore":{"n":"zfore","p":"/zfore","d":"强制为gzip格式的压缩文件添加.gz后缀"},"bzip2":{"n":"bzip2","p":"/bzip2","d":"将文件压缩成bz2格式"},"ipcrm":{"n":"ipcrm","p":"/ipcrm","d":"删除消息队列、信号集、或者共享内存标识"},"grpck":{"n":"grpck","p":"/grpck","d":"用于验证组文件的完整性"},"iperf":{"n":"iperf","p":"/iperf","d":"网络性能测试工具"},"kexec":{"n":"kexec","p":"/kexec","d":"从当前正在运行的内核引导到一个新内核"},"lastb":{"n":"lastb","p":"/lastb","d":"列出登入系统失败的用户相关信息"},"xinit":{"n":"xinit","p":"/xinit","d":"是Linux下X-Window系统的初始化程序"},"xhost":{"n":"xhost","p":"/xhost","d":"制哪些X客户端能够在X服务器上显示"},"fuser":{"n":"fuser","p":"/fuser","d":"使用文件或文件结构识别进程"},"tailf":{"n":"tailf","p":"/tailf","d":"在屏幕上显示指定文件的末尾若干行内容,通常用于日志文件的跟踪输出。"},"chage":{"n":"chage","p":"/chage","d":"修改帐号和密码的有效期限"},"xclip":{"n":"xclip","p":"/xclip","d":"管理 X 粘贴板"},"login":{"n":"login","p":"/login","d":"登录系统或切换用户身份"},"xauth":{"n":"xauth","p":"/xauth","d":"显示和编辑被用于连接X服务器的认证信息"},"fgrep":{"n":"fgrep","p":"/fgrep","d":"为文件搜索文字字符串"},"fdisk":{"n":"fdisk","p":"/fdisk","d":"查看磁盘使用情况和磁盘分区"},"xargs":{"n":"xargs","p":"/xargs","d":"给其他命令传递参数的一个过滤器"},"lsblk":{"n":"lsblk","p":"/lsblk","d":"列出块设备信息"},"lscpu":{"n":"lscpu","p":"/lscpu","d":"显示有关CPU架构的信息"},"lsmod":{"n":"lsmod","p":"/lsmod","d":"显示已载入系统的模块"},"chcon":{"n":"chcon","p":"/chcon","d":"修改对象(文件)的安全上下文"},"lspci":{"n":"lspci","p":"/lspci","d":"显示当前主机的所有PCI总线信息"},"lsusb":{"n":"lsusb","p":"/lsusb","d":"显示本机的USB设备列表信息"},"write":{"n":"write","p":"/write","d":"向指定登录用户终端上发送信息"},"emacs":{"n":"emacs","p":"/emacs","d":"功能强大的全屏文本编辑器"},"mailq":{"n":"mailq","p":"/mailq","d":"显示待发送的邮件队列"},"eject":{"n":"eject","p":"/eject","d":"用来退出抽取式设备"},"egrep":{"n":"egrep","p":"/egrep","d":"在文件内查找指定的字符串"},"mkdir":{"n":"mkdir","p":"/mkdir","d":"用来创建目录"},"chgrp":{"n":"chgrp","p":"/chgrp","d":"用来变更文件或目录的所属群组"},"chmod":{"n":"chmod","p":"/chmod","d":"用来变更文件或目录的权限"},"mknod":{"n":"mknod","p":"/mknod","d":"创建字符设备文件和块设备文件"},"mount":{"n":"mount","p":"/mount","d":"用于挂载Linux系统外的文件。"},"bzcmp":{"n":"bzcmp","p":"/bzcmp","d":"比较两个压缩包中的文件"},"which":{"n":"which","p":"/which","d":"查找并显示给定命令的绝对路径"},"chown":{"n":"chown","p":"/chown","d":"用来变更文件或目录的拥有者或所属群组"},"dstat":{"n":"dstat","p":"/dstat","d":"通用的系统资源统计工具"},"watch":{"n":"watch","p":"/watch","d":"可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令"},"ncftp":{"n":"ncftp","p":"/ncftp","d":"是增强的的FTP工具"},"ngrep":{"n":"ngrep","p":"/ngrep","d":"方便的数据包匹配和显示工具"},"umask":{"n":"umask","p":"/umask","d":"用来设置限制新建文件权限的掩码"},"batch":{"n":"batch","p":"/batch","d":"在系统不繁忙的时候执行定时任务"},"nmcli":{"n":"nmcli","p":"/nmcli","d":"地址配置工具"},"nohup":{"n":"nohup","p":"/nohup","d":"将程序以忽略挂起信号的方式运行起来"},"cksum":{"n":"cksum","p":"/cksum","d":"检查文件的CRC是否正确"},"uname":{"n":"uname","p":"/uname","d":"显示Linux系统信息"},"squid":{"n":"squid","p":"/squid","d":"squid服务器守护进程"},"paste":{"n":"paste","p":"/paste","d":"将多个文件按列队列合并"},"patch":{"n":"patch","p":"/patch","d":"为开放源代码软件安装补丁程序"},"split":{"n":"split","p":"/split","d":"分割任意大小的文件"},"pfctl":{"n":"pfctl","p":"/pfctl","d":"PF防火墙的配置命令"},"pgrep":{"n":"pgrep","p":"/pgrep","d":"设置用户的认证信息,包括用户密码、密码过期时间等"},"pidof":{"n":"pidof","p":"/pidof","d":"查找指定名称的进程的进程号ID号"},"pkill":{"n":"pkill","p":"/pkill","d":"可以按照进程名杀死进程"},"spell":{"n":"spell","p":"/spell","d":"对文件进行拼写检查"},"dmesg":{"n":"dmesg","p":"/dmesg","d":"显示Linux系统启动信息"},"unarj":{"n":"unarj","p":"/unarj","d":"解压缩由arj命令创建的压缩包"},"pushd":{"n":"pushd","p":"/pushd","d":"将目录加入命令堆叠中"},"diff3":{"n":"diff3","p":"/diff3","d":"比较3个文件不同的地方"},"dhcpd":{"n":"dhcpd","p":"/dhcpd","d":"运行DHCP服务器。"},"quota":{"n":"quota","p":"/quota","d":"显示磁盘已使用的空间与限制"},"clear":{"n":"clear","p":"/clear","d":"清除当前屏幕终端上的任何信息"},"blkid":{"n":"blkid","p":"/blkid","d":"查看块设备的文件系统类型、LABEL、UUID等信息"},"sleep":{"n":"sleep","p":"/sleep","d":"将目前动作延迟一段时间"},"users":{"n":"users","p":"/users","d":"显示当前登录系统的所有用户"},"rexec":{"n":"rexec","p":"/rexec","d":"运程执行Linux系统下命令 "},"skill":{"n":"skill","p":"/skill","d":"向选定的进程发送信号冻结进程"},"rmdir":{"n":"rmdir","p":"/rmdir","d":"用来删除空目录"},"rmmod":{"n":"rmmod","p":"/rmmod","d":"从运行的内核中移除指定的内核模块"},"route":{"n":"route","p":"/route","d":"显示并设置Linux中静态路由表"},"rpmdb":{"n":"rpmdb","p":"/rpmdb","d":"初始化和重建RPM数据库"},"shopt":{"n":"shopt","p":"/shopt","d":"显示和设置shell操作选项"},"clock":{"n":"clock","p":"/clock","d":"用于调整 RTC 时间。"},"rsync":{"n":"rsync","p":"/rsync","d":"远程数据同步工具"},"unset":{"n":"unset","p":"/unset","d":"删除指定的shell变量或函数"},"unzip":{"n":"unzip","p":"/unzip","d":"用于解压缩由zip命令压缩的压缩包"},"colrm":{"n":"colrm","p":"/colrm","d":"删除文件中的指定列"},"mktemp":{"n":"mktemp","p":"/mktemp","d":"创建临时文件供shell脚本使用"},"strace":{"n":"strace","p":"/strace","d":"跟踪系统调用和信号"},"indent":{"n":"indent","p":"/indent","d":"格式化C语言的源文件"},"mpstat":{"n":"mpstat","p":"/mpstat","d":"显示各个可用CPU的状态"},"mtools":{"n":"mtools","p":"/mtools","d":"显示mtools支持的指令"},"e2fsck":{"n":"e2fsck","p":"/e2fsck","d":"用于检查第二扩展文件系统的完整性"},"ipcalc":{"n":"ipcalc","p":"/ipcalc","d":"简单的IP地址计算器"},"lnstat":{"n":"lnstat","p":"/lnstat","d":"显示Linux系统的网路状态"},"locate":{"n":"locate","p":"/locate","d":"Apache服务器的性能测试工具"},"whatis":{"n":"whatis","p":"/whatis","d":"查询一个命令执行什么功能"},"arping":{"n":"arping","p":"/arping","d":"通过发送ARP协议报文测试网络"},"logger":{"n":"logger","p":"/logger","d":"在系统日志中记录相应条目"},"gunzip":{"n":"gunzip","p":"/gunzip","d":"用来解压缩文件"},"syslog":{"n":"syslog","p":"/syslog","d":"系统默认的日志守护进程"},"startx":{"n":"startx","p":"/startx","d":"用来启动X Window"},"chroot":{"n":"chroot","p":"/chroot","d":"把根目录换成指定的目的目录"},"ulimit":{"n":"ulimit","p":"/ulimit","d":"控制shell程序的资源"},"logout":{"n":"logout","p":"/logout","d":"退出当前登录的Shell"},"bzdiff":{"n":"bzdiff","p":"/bzdiff","d":"直接比较两个.bz2压缩包中文件的不同"},"vmstat":{"n":"vmstat","p":"/vmstat","d":"显示虚拟内存状态"},"sysctl":{"n":"sysctl","p":"/sysctl","d":"时动态地修改内核的运行参数"},"finger":{"n":"finger","p":"/finger","d":"用于查找并显示用户信息"},"chattr":{"n":"chattr","p":"/chattr","d":"用来改变文件属性"},"umount":{"n":"umount","p":"/umount","d":"用于卸载已经加载的文件系统"},"findfs":{"n":"findfs","p":"/findfs","d":"标签或UUID查找文件系统"},"ntsysv":{"n":"ntsysv","p":"/ntsysv","d":"集中管理系统的各种服务"},"swapon":{"n":"swapon","p":"/swapon","d":"激活Linux系统中交换空间"},"hping3":{"n":"hping3","p":"/hping3","d":"测试网络及主机的安全"},"insmod":{"n":"insmod","p":"/insmod","d":"将给定的模块加载到内核中"},"parted":{"n":"parted","p":"/parted","d":"磁盘分区和分区大小调整工具"},"passwd":{"n":"passwd","p":"/passwd","d":"用于让用户可以更改自己的密码"},"telnet":{"n":"telnet","p":"/telnet","d":"登录远程主机和管理"},"export":{"n":"export","p":"/export","d":"设置或显示系统环境变量"},"lpstat":{"n":"lpstat","p":"/lpstat","d":"显示CUPS中打印机的状态信息"},"expand":{"n":"expand","p":"/expand","d":"将文件的制表符转换为空白字符"},"lsattr":{"n":"lsattr","p":"/lsattr","d":"查看文件的第二扩展文件系统属性"},"telint":{"n":"telint","p":"/telint","d":"切换当前正在运行系统的运行等级"},"iptraf":{"n":"iptraf","p":"/iptraf","d":"实时地监视网卡流量"},"ispell":{"n":"ispell","p":"/ispell","d":"检查文件中出现的拼写错误"},"groups":{"n":"groups","p":"/groups","d":"用来打印指定用户所属的工作组"},"printf":{"n":"printf","p":"/printf","d":"格式化并输出结果"},"jwhois":{"n":"jwhois","p":"/jwhois","d":"whois 客户端服务"},"pstack":{"n":"pstack","p":"/pstack","d":"显示每个进程的栈跟踪"},"pstree":{"n":"pstree","p":"/pstree","d":"以树状图的方式展现进程之间的派生关系"},"ifdown":{"n":"ifdown","p":"/ifdown","d":"禁用指定的网络接口"},"bzless":{"n":"bzless","p":"/bzless","d":"增强.bz2压缩包查看器"},"vdfuse":{"n":"vdfuse","p":"/vdfuse","d":"VirtualBox软件挂载VDI分区文件工具"},"pvscan":{"n":"pvscan","p":"/pvscan","d":"扫描系统中所有硬盘的物理卷列表"},"ltrace":{"n":"ltrace","p":"/ltrace","d":"用来跟踪进程调用库函数的情况"},"pwconv":{"n":"pwconv","p":"/pwconv","d":"用来开启用户的投影密码"},"hostid":{"n":"hostid","p":"/hostid","d":"用来打印当前主机的数字化标识"},"bzmore":{"n":"bzmore","p":"/bzmore","d":"查看bzip2压缩过的文本文件的内容"},"uupick":{"n":"uupick","p":"/uupick","d":"命令处理传送进来的文件。"},"source":{"n":"source","p":"/source","d":"在当前Shell环境中从指定文件读取和执行命令,命令返回退出状态。"},"rcconf":{"n":"rcconf","p":"/rcconf","d":"Debian Linux下的运行等级服务配置工具"},"depmod":{"n":"depmod","p":"/depmod","d":"分析可载入模块的相依性"},"accept":{"n":"accept","p":"/accept","d":"指示打印系统接受发往指定目标打印机的打印任务"},"lvscan":{"n":"lvscan","p":"/lvscan","d":"扫描逻辑卷"},"reboot":{"n":"reboot","p":"/reboot","d":"重新启动正在运行的Linux操作系统"},"reject":{"n":"reject","p":"/reject","d":"指示打印系统拒绝发往指定目标打印机的打印任务"},"rename":{"n":"rename","p":"/rename","d":"用字符串替换的方式批量改变文件名"},"renice":{"n":"renice","p":"/renice","d":"修改正在运行的进程的调度优先级"},"resize":{"n":"resize","p":"/resize","d":"命令设置终端机视窗的大小。"},"enable":{"n":"enable","p":"/enable","d":"启动或关闭shell内建命令"},"uucico":{"n":"uucico","p":"/uucico","d":"UUCP文件传输服务程序。"},"iostat":{"n":"iostat","p":"/iostat","d":"监视系统输入输出设备和CPU的使用情况"},"cancel":{"n":"cancel","p":"/cancel","d":"取消已存在的打印任务"},"rlogin":{"n":"rlogin","p":"/rlogin","d":"从当前终端登录到远程Linux主机"},"elinks":{"n":"elinks","p":"/elinks","d":"纯文本界面的WWW浏览器"},"ifstat":{"n":"ifstat","p":"/ifstat","d":"统计网络接口流量状态"},"md5sum":{"n":"md5sum","p":"/md5sum","d":"计算和校验文件报文摘要的工具程序"},"bzgrep":{"n":"bzgrep","p":"/bzgrep","d":"使用正则表达式搜索.bz2压缩包中文件"},"csplit":{"n":"csplit","p":"/csplit","d":"将一个大文件分割成小的碎片文件"},"whoami":{"n":"whoami","p":"/whoami","d":"打印当前有效的用户名称"},"unlink":{"n":"unlink","p":"/unlink","d":"系统调用函数unlink去删除指定的文件"},"hdparm":{"n":"hdparm","p":"/hdparm","d":"显示与设定硬盘的参数"},"mke2fs":{"n":"mke2fs","p":"/mke2fs","d":"创建磁盘分区上的“etc2/etc3”文件系统"},"ftpwho":{"n":"ftpwho","p":"/ftpwho","d":"显示当前每个ftp会话信息"},"ftptop":{"n":"ftptop","p":"/ftptop","d":"proftpd服务器的连接状态"},"uptime":{"n":"uptime","p":"/uptime","d":"查看Linux系统负载信息"},"screen":{"n":"screen","p":"/screen","d":"用于命令行终端切换"},"seinfo":{"n":"seinfo","p":"/seinfo","d":"查询SELinux的策略提供多少相关规则"},"vgscan":{"n":"vgscan","p":"/vgscan","d":"扫描并显示系统中的卷组"},"setsid":{"n":"setsid","p":"/setsid","d":"在新的会话中运行程序。"},"mkswap":{"n":"mkswap","p":"/mkswap","d":"建立和设置SWAP交换分区"},"setpci":{"n":"setpci","p":"/setpci","d":"查询和配置PCI设备的使用工具"},"e2label":{"n":"e2label","p":"/e2label","d":"设置第二扩展文件系统的卷标"},"setfacl":{"n":"setfacl","p":"/setfacl","d":"设置文件访问控制列表"},"command":{"n":"command","p":"/command","d":"调用并执行指定的命令"},"useradd":{"n":"useradd","p":"/useradd","d":"创建的新的系统用户"},"crontab":{"n":"crontab","p":"/crontab","d":"提交和管理用户的需要周期性执行的任务"},"userdel":{"n":"userdel","p":"/userdel","d":"用于删除给定的用户以及与用户相关的文件"},"rpmsign":{"n":"rpmsign","p":"/rpmsign","d":"使用RPM软件包的签名管理工具"},"usermod":{"n":"usermod","p":"/usermod","d":"用于修改用户的基本信息"},"slabtop":{"n":"slabtop","p":"/slabtop","d":"实时显示内核slab内存缓存信息"},"restore":{"n":"restore","p":"/restore","d":"所进行的操作和dump指令相反"},"slocate":{"n":"slocate","p":"/slocate","d":"命令查找文件或目录"},"readelf":{"n":"readelf","p":"/readelf","d":"用于显示elf格式文件的信息"},"declare":{"n":"declare","p":"/declare","d":"声明或显示shell变量"},"quotaon":{"n":"quotaon","p":"/quotaon","d":"激活Linux内核中指定文件系统的磁盘配额功能"},"dirname":{"n":"dirname","p":"/dirname","d":"去除文件名中的非目录部分"},"ppp-off":{"n":"ppp-off","p":"/ppp-off","d":"关闭ppp连线"},"pathchk":{"n":"pathchk","p":"/pathchk","d":"检查文件中不可移植的部分"},"openssl":{"n":"openssl","p":"/openssl","d":"强大的安全套接字层密码库"},"objdump":{"n":"objdump","p":"/objdump","d":"显示二进制文件信息"},"ntpdate":{"n":"ntpdate","p":"/ntpdate","d":"使用网络计时协议(NTP)设置日期和时间"},"ssh-add":{"n":"ssh-add","p":"/ssh-add","d":"把专用密钥添加到ssh-agent的高速缓存中"},"unalias":{"n":"unalias","p":"/unalias","d":"删除由alias设置的别名"},"nologin":{"n":"nologin","p":"/nologin","d":"拒绝用户登录系统"},"volname":{"n":"volname","p":"/volname","d":"显示指定的ISO-9660格式的设备的卷名称"},"nfsstat":{"n":"nfsstat","p":"/nfsstat","d":"列出NFS客户端和服务器的工作状态"},"netstat":{"n":"netstat","p":"/netstat","d":"查看Linux中网络系统状态信息"},"nethogs":{"n":"nethogs","p":"/nethogs","d":"终端下的网络流量监控工具"},"whereis":{"n":"whereis","p":"/whereis","d":"查找二进制程序、代码等相关文件路径"},"service":{"n":"service","p":"/service","d":"控制系统服务的实用工具"},"strings":{"n":"strings","p":"/strings","d":"在对象文件或二进制文件中查找可打印的字符串"},"mkisofs":{"n":"mkisofs","p":"/mkisofs","d":"建立ISO 9660映像文件"},"edquota":{"n":"edquota","p":"/edquota","d":"用于编辑指定用户或工作组磁盘配额"},"ethtool":{"n":"ethtool","p":"/ethtool","d":"显示或修改以太网卡的配置信息"},"swapoff":{"n":"swapoff","p":"/swapoff","d":"关闭指定的交换空间"},"lpadmin":{"n":"lpadmin","p":"/lpadmin","d":"配置CUPS套件中的打印机和类"},"losetup":{"n":"losetup","p":"/losetup","d":"设定与控制循环(loop)设备"},"logsave":{"n":"logsave","p":"/logsave","d":"将命令的输出信息保存到指定的日志文件"},"logname":{"n":"logname","p":"/logname","d":"用来显示用户名称"},"systool":{"n":"systool","p":"/systool","d":"显示基于总线、类和拓扑显示系统中设备的信息"},"ftpshut":{"n":"ftpshut","p":"/ftpshut","d":"在指定的时间关闭FTP服务器"},"lftpget":{"n":"lftpget","p":"/lftpget","d":"调用lftp指令下载指定的文件"},"lastlog":{"n":"lastlog","p":"/lastlog","d":"显示系统中所有用户最近一次登录信息"},"killall":{"n":"killall","p":"/killall","d":"使用进程的名称来杀死一组进程"},"tcpdump":{"n":"tcpdump","p":"/tcpdump","d":"一款sniffer工具,是Linux上的抓包工具,嗅探器。"},"builtin":{"n":"builtin","p":"/builtin","d":"执行shell内部命令"},"gpasswd":{"n":"gpasswd","p":"/gpasswd","d":"Linux下工作组文件的管理工具"},"apt-key":{"n":"apt-key","p":"/apt-key","d":"管理Debian Linux系统中的软件包密钥"},"apt-get":{"n":"apt-get","p":"/apt-get","d":"Debian Linux发行版中的APT软件包管理工具"},"bunzip2":{"n":"bunzip2","p":"/bunzip2","d":"创一个bz2文件压缩包"},"apropos":{"n":"apropos","p":"/apropos","d":"在 whatis 数据库中查找字符串"},"grpconv":{"n":"grpconv","p":"/grpconv","d":"用来开启群组的投影密码"},"install":{"n":"install","p":"/install","d":"安装或升级软件或备份数据"},"zipinfo":{"n":"zipinfo","p":"/zipinfo","d":"用来列出压缩文件信息"},"hwclock":{"n":"hwclock","p":"/hwclock","d":"显示与设定硬件时钟"},"hexdump":{"n":"hexdump","p":"/hexdump","d":"显示文件十六进制格式"},"history":{"n":"history","p":"/history","d":"用于显示历史命令"},"diffstat":{"n":"diffstat","p":"/diffstat","d":"显示diff命令输出信息的柱状图"},"pvchange":{"n":"pvchange","p":"/pvchange","d":"修改物理卷属性"},"updatedb":{"n":"updatedb","p":"/updatedb","d":"创建或更新slocate命令所必需的数据库文件"},"arpwatch":{"n":"arpwatch","p":"/arpwatch","d":"监听网络上ARP的记录"},"pvcreate":{"n":"pvcreate","p":"/pvcreate","d":"将物理硬盘分区初始化为物理卷"},"basename":{"n":"basename","p":"/basename","d":"打印目录或者文件的基本名称"},"pvremove":{"n":"pvremove","p":"/pvremove","d":"删除一个存在的物理卷"},"dhcrelay":{"n":"dhcrelay","p":"/dhcrelay","d":"使用dhcrelay命令可以提供中继DHCP和BOOTP请求"},"ldconfig":{"n":"ldconfig","p":"/ldconfig","d":"动态链接库管理命令"},"shutdown":{"n":"shutdown","p":"/shutdown","d":"用来执行系统关机的命令"},"zipsplit":{"n":"zipsplit","p":"/zipsplit","d":"将较大的zip压缩包分割成各个较小的压缩包"},"mkinitrd":{"n":"mkinitrd","p":"/mkinitrd","d":"建立要载入ramdisk的映像文件"},"logwatch":{"n":"logwatch","p":"/logwatch","d":"可定制和可插入式的日志监视系统"},"pwunconv":{"n":"pwunconv","p":"/pwunconv","d":"用来关闭用户的投影密码"},"groupmod":{"n":"groupmod","p":"/groupmod","d":"更改群组识别码或名称"},"unexpand":{"n":"unexpand","p":"/unexpand","d":"将文件的空白字符转换为制表符"},"groupdel":{"n":"groupdel","p":"/groupdel","d":"用于删除指定的工作组"},"quotaoff":{"n":"quotaoff","p":"/quotaoff","d":"关闭Linux内核中指定文件系统的磁盘配额功能"},"nslookup":{"n":"nslookup","p":"/nslookup","d":"查询域名DNS信息的工具"},"lvcreate":{"n":"lvcreate","p":"/lvcreate","d":"用于创建LVM的逻辑卷"},"modprobe":{"n":"modprobe","p":"/modprobe","d":"自动处理可载入模块"},"groupadd":{"n":"groupadd","p":"/groupadd","d":"用于创建一个新的工作组"},"lvextend":{"n":"lvextend","p":"/lvextend","d":"扩展逻辑卷空间"},"readonly":{"n":"readonly","p":"/readonly","d":"定义只读shell变量或函数"},"lvreduce":{"n":"lvreduce","p":"/lvreduce","d":"收缩逻辑卷空间"},"lvremove":{"n":"lvremove","p":"/lvremove","d":"删除指定LVM逻辑卷"},"vgrename":{"n":"vgrename","p":"/vgrename","d":"使用vgrename命令可以重命名卷组的名称。"},"htdigest":{"n":"htdigest","p":"/htdigest","d":"Apache服务器内置工具"},"repquota":{"n":"repquota","p":"/repquota","d":"报表的格式输出磁盘空间限制的状态"},"xlsfonts":{"n":"xlsfonts","p":"/xlsfonts","d":"列出X Server使用的字体"},"chpasswd":{"n":"chpasswd","p":"/chpasswd","d":"批量更新用户口令的工具"},"aptitude":{"n":"aptitude","p":"/aptitude","d":"Debian Linux系统中软件包管理工具"},"ftpcount":{"n":"ftpcount","p":"/ftpcount","d":"显示目前已FTP登入的用户人数"},"vgremove":{"n":"vgremove","p":"/vgremove","d":"用于用户删除LVM卷组"},"exportfs":{"n":"exportfs","p":"/exportfs","d":"管理NFS共享文件系统列表"},"hostname":{"n":"hostname","p":"/hostname","d":"显示和设置系统的主机名"},"blockdev":{"n":"blockdev","p":"/blockdev","d":"从命令行调用区块设备控制程序"},"dpkg-deb":{"n":"dpkg-deb","p":"/dpkg-deb","d":"Debian Linux下的软件包管理工具"},"dos2unix":{"n":"dos2unix","p":"/dos2unix","d":"将DOS格式文本文件转换成Unix格式"},"mailstat":{"n":"mailstat","p":"/mailstat","d":"显示到达的邮件状态"},"vgreduce":{"n":"vgreduce","p":"/vgreduce","d":"从卷组中删除物理卷"},"htpasswd":{"n":"htpasswd","p":"/htpasswd","d":"apache服务器创建密码认证文件"},"rpm2cpio":{"n":"rpm2cpio","p":"/rpm2cpio","d":"将RPM软件包转换为cpio格式的文件"},"rpmbuild":{"n":"rpmbuild","p":"/rpmbuild","d":"创建RPM的二进制软件包和源码软件包"},"bmodinfo":{"n":"bmodinfo","p":"/bmodinfo","d":"显示给定模块的详细信息"},"vgextend":{"n":"vgextend","p":"/vgextend","d":"向卷组中添加物理卷"},"rpmquery":{"n":"rpmquery","p":"/rpmquery","d":"从RPM数据库中查询软件包信息"},"cdrecord":{"n":"cdrecord","p":"/cdrecord","d":"Linux系统下光盘刻录功能命令"},"vgcreate":{"n":"vgcreate","p":"/vgcreate","d":"用于创建LVM卷组"},"poweroff":{"n":"poweroff","p":"/poweroff","d":"关闭Linux系统,关闭记录会被写入到/var/log/wtmp日志文件中。"},"iptables":{"n":"iptables","p":"/iptables","d":"Linux上常用的防火墙软件"},"xlsatoms":{"n":"xlsatoms","p":"/xlsatoms","d":"列出X服务器内部所有定义的原子成分"},"runlevel":{"n":"runlevel","p":"/runlevel","d":"打印当前Linux系统的运行等级"},"ifconfig":{"n":"ifconfig","p":"/ifconfig","d":"配置和显示Linux系统网卡的网络参数"},"protoize":{"n":"protoize","p":"/protoize","d":"GNU-C代码转换为ANSI-C代码"},"mii-tool":{"n":"mii-tool","p":"/mii-tool","d":"配置网络设备协商方式的工具"},"tempfile":{"n":"tempfile","p":"/tempfile","d":"shell中给临时文件命名"},"compress":{"n":"compress","p":"/compress","d":"使用Lempress-Ziv编码压缩数据文件"},"vgchange":{"n":"vgchange","p":"/vgchange","d":"修改卷组属性"},"semanage":{"n":"semanage","p":"/semanage","d":"默认目录的安全上下文查询与修改"},"sendmail":{"n":"sendmail","p":"/sendmail","d":"著名电子邮件服务器"},"newusers":{"n":"newusers","p":"/newusers","d":"用于批处理的方式一次创建多个命令"},"iptstate":{"n":"iptstate","p":"/iptstate","d":"显示iptables的工作状态"},"sesearch":{"n":"sesearch","p":"/sesearch","d":"查询SELinux策略的规则详情"},"lvresize":{"n":"lvresize","p":"/lvresize","d":"调整逻辑卷空间大小"},"dhclient":{"n":"dhclient","p":"/dhclient","d":"动态获取或释放IP地址"},"tracepath":{"n":"tracepath","p":"/tracepath","d":"追踪目的主机经过的路由信息"},"grpunconv":{"n":"grpunconv","p":"/grpunconv","d":"用来关闭群组的投影密码"},"tcpreplay":{"n":"tcpreplay","p":"/tcpreplay","d":"将PCAP包重新发送,用于性能或者功能测试"},"systemctl":{"n":"systemctl","p":"/systemctl","d":"系统服务管理器指令"},"chkconfig":{"n":"chkconfig","p":"/chkconfig","d":"检查或设置系统的各种服务"},"apachectl":{"n":"apachectl","p":"/apachectl","d":"Apache服务器前端控制工具"},"ip6tables":{"n":"ip6tables","p":"/ip6tables","d":"linux中防火墙软件"},"getsebool":{"n":"getsebool","p":"/getsebool","d":"查询SElinux策略内各项规则的布尔值"},"ssh-agent":{"n":"ssh-agent","p":"/ssh-agent","d":"ssh密钥管理器"},"logrotate":{"n":"logrotate","p":"/logrotate","d":"统日志进行轮转、压缩和删除"},"lvdisplay":{"n":"lvdisplay","p":"/lvdisplay","d":"显示逻辑卷属性"},"mysqldump":{"n":"mysqldump","p":"/mysqldump","d":"MySQL数据库中备份工具"},"smbpasswd":{"n":"smbpasswd","p":"/smbpasswd","d":"samba用户和密码管理工具"},"smbclient":{"n":"smbclient","p":"/smbclient","d":"交互方式访问samba服务器"},"showmount":{"n":"showmount","p":"/showmount","d":"显示NFS服务器加载的信息"},"mysqlshow":{"n":"mysqlshow","p":"/mysqlshow","d":"显示MySQL中数据库相关信息"},"clockdiff":{"n":"clockdiff","p":"/clockdiff","d":"检测两台linux主机的时间差"},"arptables":{"n":"arptables","p":"/arptables","d":"管理ARP包过滤规则表"},"setsebool":{"n":"setsebool","p":"/setsebool","d":"修改SElinux策略内各项规则的布尔值"},"badblocks":{"n":"badblocks","p":"/badblocks","d":"查找磁盘中损坏的区块"},"vgdisplay":{"n":"vgdisplay","p":"/vgdisplay","d":"显示LVM卷组的信息"},"rpmverify":{"n":"rpmverify","p":"/rpmverify","d":"验证已安装的RPM软件包的正确性"},"dmidecode":{"n":"dmidecode","p":"/dmidecode","d":"在Linux系统下获取有关硬件方面的信息"},"vgconvert":{"n":"vgconvert","p":"/vgconvert","d":"转换卷组元数据格式"},"dircolors":{"n":"dircolors","p":"/dircolors","d":"置ls命令在显示目录或文件时所用的色彩"},"pvdisplay":{"n":"pvdisplay","p":"/pvdisplay","d":"显示物理卷的属性"},"partprobe":{"n":"partprobe","p":"/partprobe","d":"不重启的情况下重读分区"},"quotacheck":{"n":"quotacheck","p":"/quotacheck","d":"检查磁盘的使用空间与限制"},"cupsenable":{"n":"cupsenable","p":"/cupsenable","d":"启动指定的打印机"},"usernetctl":{"n":"usernetctl","p":"/usernetctl","d":"被允许时操作指定的网络接口"},"ssh-keygen":{"n":"ssh-keygen","p":"/ssh-keygen","d":"为ssh生成、管理和转换认证密钥"},"xlsclients":{"n":"xlsclients","p":"/xlsclients","d":"列出显示器中的客户端应用程序"},"getenforce":{"n":"getenforce","p":"/getenforce","d":"显示当前SELinux的应用模式,是强制、执行还是停用。"},"domainname":{"n":"domainname","p":"/domainname","d":"显示和设置系统的NIS域名"},"get_module":{"n":"get_module","p":"/get_module","d":"获取Linux内核模块的详细信息"},"traceroute":{"n":"traceroute","p":"/traceroute","d":"显示数据包到主机间的路径"},"mkbootdisk":{"n":"mkbootdisk","p":"/mkbootdisk","d":"可建立目前系统的启动盘"},"dpkg-query":{"n":"dpkg-query","p":"/dpkg-query","d":"Debian Linux中软件包的查询工具"},"mysqladmin":{"n":"mysqladmin","p":"/mysqladmin","d":"MySQL服务器管理客户端"},"dpkg-split":{"n":"dpkg-split","p":"/dpkg-split","d":"Debian Linux中将大软件包分割成小包"},"restorecon":{"n":"restorecon","p":"/restorecon","d":"恢复文件的安全上下文"},"unprotoize":{"n":"unprotoize","p":"/unprotoize","d":"删除C语言源代码文件中的函数原型"},"uncompress":{"n":"uncompress","p":"/uncompress","d":"用来解压.Z文件"},"squidclient":{"n":"squidclient","p":"/squidclient","d":"squid服务器的客户端管理工具"},"cupsdisable":{"n":"cupsdisable","p":"/cupsdisable","d":"停止指定的打印机"},"consoletype":{"n":"consoletype","p":"/consoletype","d":"输出已连接的终端类型"},"mysqlimport":{"n":"mysqlimport","p":"/mysqlimport","d":"为MySQL服务器用命令行方式导入数据"},"inotifywait":{"n":"inotifywait","p":"/inotifywait","d":"异步文件系统监控机制"},"ssh-keyscan":{"n":"ssh-keyscan","p":"/ssh-keyscan","d":"收集主机公钥的使用工具"},"lsb_release":{"n":"lsb_release","p":"/lsb_release","d":"显示发行版本信息"},"sftp-server":{"n":"sftp-server","p":"/sftp-server","d":"sftp协议的服务器端程序"},"ssh-copy-id":{"n":"ssh-copy-id","p":"/ssh-copy-id","d":"把本地的ssh公钥文件安装到远程主机对应的账户下"},"dpkg-divert":{"n":"dpkg-divert","p":"/dpkg-divert","d":"Debian Linux中创建并管理一个转向列表"},"dpkg-trigger":{"n":"dpkg-trigger","p":"/dpkg-trigger","d":"Debian Linux下的软件包触发器"},"firewall-cmd":{"n":"firewall-cmd","p":"/firewall-cmd","d":"Linux上新用的防火墙软件,跟iptables差不多的工具。"},"convertquota":{"n":"convertquota","p":"/convertquota","d":"把老的配额文件转换为新的格式"},"apt-sortpkgs":{"n":"apt-sortpkgs","p":"/apt-sortpkgs","d":"Debian Linux下对软件包索引文件进行排序的工具"},"bzip2recover":{"n":"bzip2recover","p":"/bzip2recover","d":"恢复被破坏的.bz2压缩包中的文件"},"ypdomainname":{"n":"ypdomainname","p":"/ypdomainname","d":"显示主机的NIS的域名"},"kernelversion":{"n":"kernelversion","p":"/kernelversion","d":"打印当前内核的主版本号"},"nisdomainname":{"n":"nisdomainname","p":"/nisdomainname","d":"显示主机NIS的域名"},"iptables-save":{"n":"iptables-save","p":"/iptables-save","d":"备份iptables的表配置"},"speedtest-cli":{"n":"speedtest-cli","p":"/speedtest-cli","d":"命令行下测试服务器外网速度"},"dnsdomainname":{"n":"dnsdomainname","p":"/dnsdomainname","d":"定义DNS系统中FQDN名称的域名"},"ip6tables-save":{"n":"ip6tables-save","p":"/ip6tables-save","d":"保存ip6tables表配置"},"named-checkzone":{"n":"named-checkzone","p":"/named-checkzone","d":"使用named-checkzone命令可以进行区域文件有效性检查和转换,必须指定区域名称和区域文件名称。"},"iptables-restore":{"n":"iptables-restore","p":"/iptables-restore","d":"还原iptables表的配置"},"dpkg-reconfigure":{"n":"dpkg-reconfigure","p":"/dpkg-reconfigure","d":"Debian Linux中重新配制一个已经安装的软件包"},"dpkg-preconfigure":{"n":"dpkg-preconfigure","p":"/dpkg-preconfigure","d":"Debian Linux中软件包安装之前询问问题"},"ip6tables-restore":{"n":"ip6tables-restore","p":"/ip6tables-restore","d":"还原ip6tables表"},"dpkg-statoverride":{"n":"dpkg-statoverride","p":"/dpkg-statoverride","d":"Debian Linux中覆盖文件的所有权和模式"}} \ No newline at end of file +{"w":{"n":"w","p":"/w","d":"显示目前登入系统的用户信息"},"rm":{"n":"rm","p":"/rm","d":"用于删除给定的文件和目录"},"ip":{"n":"ip","p":"/ip","d":"网络配置工具"},"ld":{"n":"ld","p":"/ld","d":"将目标文件连接为可执行程序"},"ln":{"n":"ln","p":"/ln","d":"用来为文件创件连接"},"lp":{"n":"lp","p":"/lp","d":"打印文件或修改排队的打印任务"},"xz":{"n":"xz","p":"/xz","d":"POSIX 平台开发具有高压缩率的工具。"},"fg":{"n":"fg","p":"/fg","d":"将后台作业放到前台终端运行"},"ar":{"n":"ar","p":"/ar","d":"建立或修改备存文件,或是从备存文件中抽取文件"},"fc":{"n":"fc","p":"/fc","d":"修改历史命令并执行"},"ls":{"n":"ls","p":"/ls","d":"显示目录内容列表"},"wc":{"n":"wc","p":"/wc","d":"统计文件的字节数、字数、行数"},"as":{"n":"as","p":"/as","d":"汇编语言编译器"},"at":{"n":"at","p":"/at","d":"在指定时间执行一个任务"},"ex":{"n":"ex","p":"/ex","d":"启动vim编辑器的ex编辑模式"},"ed":{"n":"ed","p":"/ed","d":"单行纯文本编辑器"},"ab":{"n":"ab","p":"/ab","d":"Apache服务器的性能测试工具"},"vi":{"n":"vi","p":"/vi","d":"功能强大的纯文本编辑器"},"bc":{"n":"bc","p":"/bc","d":"算术操作精密运算工具"},"bg":{"n":"bg","p":"/bg","d":"用于将作业放到后台运行"},"mv":{"n":"mv","p":"/mv","d":"用来对文件或目录重新命名"},"du":{"n":"du","p":"/du","d":"显示每个文件和目录的磁盘使用空间"},"tr":{"n":"tr","p":"/tr","d":"将字符进行替换压缩和删除"},"nc":{"n":"nc","p":"/nc","d":"命令用于设置路由器。"},"nl":{"n":"nl","p":"/nl","d":"在Linux系统中计算文件内容行号"},"nm":{"n":"nm","p":"/nm","d":"显示二进制目标文件的符号表"},"od":{"n":"od","p":"/od","d":"输出文件的八进制、十六进制等格式编码的字节"},"pr":{"n":"pr","p":"/pr","d":"将文本文件转换成适合打印的格式"},"cd":{"n":"cd","p":"/cd","d":"切换用户当前工作目录"},"ps":{"n":"ps","p":"/ps","d":"报告当前系统的进程状态"},"pv":{"n":"pv","p":"/pv","d":"显示当前在命令行执行的命令的进度信息,管道查看器。"},"su":{"n":"su","p":"/su","d":"用于切换当前用户身份到其他用户身份"},"df":{"n":"df","p":"/df","d":"显示磁盘的相关信息"},"ss":{"n":"ss","p":"/ss","d":"比 netstat 好用的socket统计信息,iproute2 包附带的另一个工具,允许你查询 socket 的有关统计信息。"},"sh":{"n":"sh","p":"/sh","d":"shell命令解释器"},"dd":{"n":"dd","p":"/dd","d":"复制文件并对原文件的内容进行转换和格式化处理"},"cu":{"n":"cu","p":"/cu","d":"用于连接另一个系统主机。"},"cp":{"n":"cp","p":"/cp","d":"将源文件或目录复制到目标文件或目录中"},"id":{"n":"id","p":"/id","d":"显示用户的ID以及所属群组的ID"},"seq":{"n":"seq","p":"/seq","d":"以指定增量从首数开始打印数字到尾数"},"scp":{"n":"scp","p":"/scp","d":"加密的方式在本地主机和远程主机之间复制文件"},"set":{"n":"set","p":"/set","d":"显示或设置shell特性及shell变量"},"sar":{"n":"sar","p":"/sar","d":"系统运行状态统计工具"},"rsh":{"n":"rsh","p":"/rsh","d":"连接远程主机并执行命令"},"col":{"n":"col","p":"/col","d":"过滤控制字符"},"rpm":{"n":"rpm","p":"/rpm","d":"RPM软件包的管理工具"},"ack":{"n":"ack","p":"/ack","d":"比grep好用的文本搜索工具"},"cut":{"n":"cut","p":"/cut","d":"连接文件并打印到标准输出设备上"},"cmp":{"n":"cmp","p":"/cmp","d":"比较两个文件是否有差异"},"rev":{"n":"rev","p":"/rev","d":"将文件内容以字符为单位反序输出"},"ssh":{"n":"ssh","p":"/ssh","d":"openssh套件中的客户端连接工具"},"rcp":{"n":"rcp","p":"/rcp","d":"使在两台Linux主机之间的文件复制操作更简单"},"pwd":{"n":"pwd","p":"/pwd","d":"绝对路径方式显示用户当前工作目录"},"pvs":{"n":"pvs","p":"/pvs","d":"输出物理卷信息报表"},"dig":{"n":"dig","p":"/dig","d":"域名查询工具"},"sum":{"n":"sum","p":"/sum","d":"计算文件的校验码和显示块数"},"tac":{"n":"tac","p":"/tac","d":"将文件已行为单位的反序输出"},"cat":{"n":"cat","p":"/cat","d":"连接文件并打印到标准输出设备上"},"dnf":{"n":"dnf","p":"/dnf","d":"新一代的RPM软件包管理器"},"php":{"n":"php","p":"/php","d":"PHP语言的命令行接口"},"tar":{"n":"tar","p":"/tar","d":"Linux下的归档使用工具,用来打包和备份。"},"cal":{"n":"cal","p":"/cal","d":"显示当前日历或指定日期的日历"},"tee":{"n":"tee","p":"/tee","d":"把数据重定向到给定文件和屏幕上"},"top":{"n":"top","p":"/top","d":"显示或管理执行中的程序"},"bye":{"n":"bye","p":"/bye","d":"命令用于中断FTP连线并结束程序。。"},"sed":{"n":"sed","p":"/sed","d":"功能强大的流式文本编辑器"},"awk":{"n":"awk","p":"/awk","d":"文本和数据进行处理的编程语言"},"man":{"n":"man","p":"/man","d":"查看Linux中的指令帮助"},"elm":{"n":"elm","p":"/elm","d":"纯文本邮件客户端程序"},"env":{"n":"env","p":"/env","d":"显示系统中已存在的环境变量"},"atq":{"n":"atq","p":"/atq","d":"列出当前用户的at任务列表"},"arp":{"n":"arp","p":"/arp","d":"显示和修改IP到MAC转换表"},"arj":{"n":"arj","p":"/arj","d":"用于创建和管理.arj压缩包"},"lpr":{"n":"lpr","p":"/lpr","d":"将文件发送给指定打印机进行打印"},"who":{"n":"who","p":"/who","d":"显示目前登录系统的用户信息"},"lpq":{"n":"lpq","p":"/lpq","d":"显示打印队列中的打印任务的状态信息"},"lpc":{"n":"lpc","p":"/lpc","d":"命令行方式打印机控制程序"},"yes":{"n":"yes","p":"/yes","d":"重复打印指定字符串"},"yum":{"n":"yum","p":"/yum","d":"基于RPM的软件包管理器"},"fmt":{"n":"fmt","p":"/fmt","d":"读取文件后优化处理并输出"},"ftp":{"n":"ftp","p":"/ftp","d":"用来设置文件系统相关功能"},"lha":{"n":"lha","p":"/lha","d":"压缩或解压缩lzh格式文件"},"let":{"n":"let","p":"/let","d":"简单的计算器"},"gcc":{"n":"gcc","p":"/gcc","d":"基于C/C++的编译器"},"gdb":{"n":"gdb","p":"/gdb","d":"功能强大的程序调试器"},"ldd":{"n":"ldd","p":"/ldd","d":"打印程序或者库文件所依赖的共享库列表"},"apk":{"n":"apk","p":"/apk","d":"Alpine Linux 下的包管理工具"},"git":{"n":"git","p":"/git","d":"是目前世界上最先进的分布式版本控制系统"},"gpm":{"n":"gpm","p":"/gpm","d":"提供文字模式下的滑鼠事件处理"},"joe":{"n":"joe","p":"/joe","d":"强大的纯文本编辑器"},"jed":{"n":"jed","p":"/jed","d":"主要用于编辑代码的编辑器"},"zip":{"n":"zip","p":"/zip","d":"可以用来解压缩文件"},"tty":{"n":"tty","p":"/tty","d":"显示连接到当前标准输入的终端设备文件名。"},"pvck":{"n":"pvck","p":"/pvck","d":"检测物理卷的LVM元数据的一致性"},"chfn":{"n":"chfn","p":"/chfn","d":"用来改变finger命令显示的信息"},"arch":{"n":"arch","p":"/arch","d":"显示当前主机的硬件架构类型"},"pssh":{"n":"pssh","p":"/pssh","d":"批量管理执行"},"dirs":{"n":"dirs","p":"/dirs","d":"显示目录记录"},"sudo":{"n":"sudo","p":"/sudo","d":"以其他身份来执行命令"},"bind":{"n":"bind","p":"/bind","d":"显示或设置键盘按键与其相关的功能"},"stty":{"n":"stty","p":"/stty","d":"修改终端命令行的相关设置"},"popd":{"n":"popd","p":"/popd","d":"用于删除目录栈中的记录"},"pmap":{"n":"pmap","p":"/pmap","d":"报告进程的内存映射关系"},"ping":{"n":"ping","p":"/ping","d":"测试主机之间网络的连通性"},"pico":{"n":"pico","p":"/pico","d":"功能强大全屏幕的文本编辑器"},"stat":{"n":"stat","p":"/stat","d":"用于显示文件的状态信息"},"perl":{"n":"perl","p":"/perl","d":"perl语言解释器"},"sshd":{"n":"sshd","p":"/sshd","d":"openssh软件套件中的服务器守护进程"},"nmap":{"n":"nmap","p":"/nmap","d":"网络探测和安全审核"},"chsh":{"n":"chsh","p":"/chsh","d":"用来更换登录系统时使用的shell"},"uniq":{"n":"uniq","p":"/uniq","d":"报告或忽略文件中的重复行"},"nice":{"n":"nice","p":"/nice","d":"改变程序执行的优先权等级"},"dpkg":{"n":"dpkg","p":"/dpkg","d":"Debian Linux系统上安装、创建和管理软件包"},"dris":{"n":"dris","p":"/dris","d":"显示和清空目录堆栈中的内容"},"type":{"n":"type","p":"/type","d":"显示指定命令的类型"},"sort":{"n":"sort","p":"/sort","d":"将文件进行排序并输出"},"dump":{"n":"dump","p":"/dump","d":"用于备份ext2或者ext3文件系统"},"nano":{"n":"nano","p":"/nano","d":"字符终端文本编辑器"},"xset":{"n":"xset","p":"/xset","d":"设置X-Window系统中的用户爱好的实用工具"},"echo":{"n":"echo","p":"/echo","d":"输出指定的字符串或者变量"},"tree":{"n":"tree","p":"/tree","d":"树状图列出目录的内容"},"more":{"n":"more","p":"/more","d":"显示文件内容,每次显示一屏"},"mkfs":{"n":"mkfs","p":"/mkfs","d":"用于在设备上创建Linux文件系统"},"mesg":{"n":"mesg","p":"/mesg","d":"设置当前终端的写权限"},"trap":{"n":"trap","p":"/trap","d":"指定在接收到信号后将要采取的动作"},"sftp":{"n":"sftp","p":"/sftp","d":"交互式的文件传输程序"},"make":{"n":"make","p":"/make","d":"GNU的工程化编译工具"},"mail":{"n":"mail","p":"/mail","d":"命令行下发送和接收电子邮件"},"comm":{"n":"comm","p":"/comm","d":"两个文件之间的比较"},"lynx":{"n":"lynx","p":"/lynx","d":"纯文本模式的网页浏览器"},"atop":{"n":"atop","p":"/atop","d":"监控Linux系统资源与进程的工具"},"exec":{"n":"exec","p":"/exec","d":"调用并执行指定的命令"},"exit":{"n":"exit","p":"/exit","d":"退出当前的shell"},"lsof":{"n":"lsof","p":"/lsof","d":"显示Linux系统当前已打开的所有文件列表 `lsof -p pid`"},"znew":{"n":"znew","p":"/znew","d":"将.Z压缩包重新转化为gzip命令压缩的.gz压缩包"},"lprm":{"n":"lprm","p":"/lprm","d":"删除打印队列中的打印任务"},"expr":{"n":"expr","p":"/expr","d":"一款表达式计算工具"},"tput":{"n":"tput","p":"/tput","d":"通过terminfo数据库对终端会话进行初始化和操作"},"atrm":{"n":"atrm","p":"/atrm","d":"删除待执行任务队列中的指定任务"},"tmux":{"n":"tmux","p":"/tmux","d":"Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权。"},"cpio":{"n":"cpio","p":"/cpio","d":"用来建立、还原备份档的工具程序"},"file":{"n":"file","p":"/file","d":"用来探测给定文件的类型。"},"find":{"n":"find","p":"/find","d":"在指定目录下查找文件"},"time":{"n":"time","p":"/time","d":"统计给定命令所花费的总时间"},"tftp":{"n":"tftp","p":"/tftp","d":"在本机和tftp服务器之间使用TFTP协议传输文件"},"look":{"n":"look","p":"/look","d":"显示文件中以指定字符串开头的任意行"},"test":{"n":"test","p":"/test","d":"shell环境中测试条件表达式工具"},"arpd":{"n":"arpd","p":"/arpd","d":"收集免费ARP信息"},"fold":{"n":"fold","p":"/fold","d":"控制文件内容输出时所占用的屏幕宽度"},"free":{"n":"free","p":"/free","d":"显示内存的使用情况"},"fsck":{"n":"fsck","p":"/fsck","d":"检查并且试图修复文件系统中的错误"},"axel":{"n":"axel","p":"/axel","d":"多线程下载工具"},"lilo":{"n":"lilo","p":"/lilo","d":"安装核心载入开机管理程序"},"curl":{"n":"curl","p":"/curl","d":"利用URL规则在命令行下工作的文件传输工具"},"lftp":{"n":"lftp","p":"/lftp","d":"优秀的文件客户端程序"},"wait":{"n":"wait","p":"/wait","d":"等待进程执行完后返回"},"less":{"n":"less","p":"/less","d":"分屏上下翻页浏览文件内容"},"date":{"n":"date","p":"/date","d":"显示或设置系统时间与日期"},"gcov":{"n":"gcov","p":"/gcov","d":"测试程序的代码覆盖率的工具"},"wget":{"n":"wget","p":"/wget","d":"Linux系统下载文件工具"},"zcat":{"n":"zcat","p":"/zcat","d":"显示压缩包中文件的内容"},"read":{"n":"read","p":"/read","d":"从键盘读取变量值"},"last":{"n":"last","p":"/last","d":"列出目前与过去登入系统的用户相关信息"},"talk":{"n":"talk","p":"/talk","d":"让用户和其他用户聊天"},"kill":{"n":"kill","p":"/kill","d":"删除执行中的程序或工作"},"tail":{"n":"tail","p":"/tail","d":"在屏幕上显示指定文件的末尾若干行"},"grep":{"n":"grep","p":"/grep","d":"强大的文本搜索工具"},"join":{"n":"join","p":"/join","d":"两个文件中指定栏位内容相同的行连接起来"},"wall":{"n":"wall","p":"/wall","d":"向系统当前所有打开的终端上输出信息"},"jobs":{"n":"jobs","p":"/jobs","d":"显示Linux中的任务列表及任务状态"},"pwck":{"n":"pwck","p":"/pwck","d":"用来验证系统认证文件内容和格式的完整性"},"ipcs":{"n":"ipcs","p":"/ipcs","d":"分析消息队列共享内存和信号量 "},"diff":{"n":"diff","p":"/diff","d":"比较给定的两个文件的不同"},"init":{"n":"init","p":"/init","d":"init进程是所有Linux进程的父进程"},"grub":{"n":"grub","p":"/grub","d":"多重引导程序grub的命令行shell工具"},"info":{"n":"info","p":"/info","d":"Linux下info格式的帮助指令"},"ifup":{"n":"ifup","p":"/ifup","d":"激活指定的网络接口"},"gzip":{"n":"gzip","p":"/gzip","d":"用来压缩文件"},"halt":{"n":"halt","p":"/halt","d":"关闭正在运行的Linux操作系统"},"sync":{"n":"sync","p":"/sync","d":"用于强制被改变的内容立刻写入磁盘"},"head":{"n":"head","p":"/head","d":"在屏幕上显示指定文件的开头若干行"},"help":{"n":"help","p":"/help","d":"显示帮助信息"},"htop":{"n":"htop","p":"/htop","d":"[非内部命令]一个互动的进程查看器,可以动态观察系统进程状况。"},"host":{"n":"host","p":"/host","d":"常用的分析域名查询工具"},"chown":{"n":"chown","p":"/chown","d":"用来变更文件或目录的拥有者或所属群组"},"touch":{"n":"touch","p":"/touch","d":"创建新的空文件"},"ifcfg":{"n":"ifcfg","p":"/ifcfg","d":"置Linux中的网络接口参数"},"iftop":{"n":"iftop","p":"/iftop","d":"一款实时流量监控工具"},"gzexe":{"n":"gzexe","p":"/gzexe","d":"用来压缩可执行文件"},"tload":{"n":"tload","p":"/tload","d":"显示系统负载状况"},"bzip2":{"n":"bzip2","p":"/bzip2","d":"将文件压缩成bz2格式"},"iotop":{"n":"iotop","p":"/iotop","d":"用来监视磁盘I/O使用状况的工具"},"bzcmp":{"n":"bzcmp","p":"/bzcmp","d":"比较两个压缩包中的文件"},"alias":{"n":"alias","p":"/alias","d":"用来设置指令的别名"},"zfore":{"n":"zfore","p":"/zfore","d":"强制为gzip格式的压缩文件添加.gz后缀"},"ipcrm":{"n":"ipcrm","p":"/ipcrm","d":"删除消息队列、信号集、或者共享内存标识"},"grpck":{"n":"grpck","p":"/grpck","d":"用于验证组文件的完整性"},"iperf":{"n":"iperf","p":"/iperf","d":"网络性能测试工具"},"kexec":{"n":"kexec","p":"/kexec","d":"从当前正在运行的内核引导到一个新内核"},"bzcat":{"n":"bzcat","p":"/bzcat","d":"解压缩指定的.bz2文件"},"lastb":{"n":"lastb","p":"/lastb","d":"列出登入系统失败的用户相关信息"},"xinit":{"n":"xinit","p":"/xinit","d":"是Linux下X-Window系统的初始化程序"},"xhost":{"n":"xhost","p":"/xhost","d":"制哪些X客户端能够在X服务器上显示"},"fuser":{"n":"fuser","p":"/fuser","d":"使用文件或文件结构识别进程"},"tailf":{"n":"tailf","p":"/tailf","d":"在屏幕上显示指定文件的末尾若干行内容,通常用于日志文件的跟踪输出。"},"chage":{"n":"chage","p":"/chage","d":"修改帐号和密码的有效期限"},"xclip":{"n":"xclip","p":"/xclip","d":"管理 X 粘贴板"},"login":{"n":"login","p":"/login","d":"登录系统或切换用户身份"},"xauth":{"n":"xauth","p":"/xauth","d":"显示和编辑被用于连接X服务器的认证信息"},"xargs":{"n":"xargs","p":"/xargs","d":"给其他命令传递参数的一个过滤器"},"chcon":{"n":"chcon","p":"/chcon","d":"修改对象(文件)的安全上下文"},"fgrep":{"n":"fgrep","p":"/fgrep","d":"为文件搜索文字字符串"},"fdisk":{"n":"fdisk","p":"/fdisk","d":"查看磁盘使用情况和磁盘分区"},"write":{"n":"write","p":"/write","d":"向指定登录用户终端上发送信息"},"lsblk":{"n":"lsblk","p":"/lsblk","d":"列出块设备信息"},"lscpu":{"n":"lscpu","p":"/lscpu","d":"显示有关CPU架构的信息"},"lsmod":{"n":"lsmod","p":"/lsmod","d":"显示已载入系统的模块"},"lspci":{"n":"lspci","p":"/lspci","d":"显示当前主机的所有PCI总线信息"},"lsusb":{"n":"lsusb","p":"/lsusb","d":"显示本机的USB设备列表信息"},"mailq":{"n":"mailq","p":"/mailq","d":"显示待发送的邮件队列"},"emacs":{"n":"emacs","p":"/emacs","d":"功能强大的全屏文本编辑器"},"eject":{"n":"eject","p":"/eject","d":"用来退出抽取式设备"},"mkdir":{"n":"mkdir","p":"/mkdir","d":"用来创建目录"},"egrep":{"n":"egrep","p":"/egrep","d":"在文件内查找指定的字符串"},"chgrp":{"n":"chgrp","p":"/chgrp","d":"用来变更文件或目录的所属群组"},"mknod":{"n":"mknod","p":"/mknod","d":"创建字符设备文件和块设备文件"},"chmod":{"n":"chmod","p":"/chmod","d":"用来变更文件或目录的权限"},"mount":{"n":"mount","p":"/mount","d":"用于挂载Linux系统外的文件。"},"iconv":{"n":"iconv","p":"/iconv","d":"转换文件的编码方式"},"mysql":{"n":"mysql","p":"/mysql","d":"MySQL服务器客户端工具"},"which":{"n":"which","p":"/which","d":"查找并显示给定命令的绝对路径"},"watch":{"n":"watch","p":"/watch","d":"可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令"},"dstat":{"n":"dstat","p":"/dstat","d":"通用的系统资源统计工具"},"ncftp":{"n":"ncftp","p":"/ncftp","d":"是增强的的FTP工具"},"cksum":{"n":"cksum","p":"/cksum","d":"检查文件的CRC是否正确"},"ngrep":{"n":"ngrep","p":"/ngrep","d":"方便的数据包匹配和显示工具"},"batch":{"n":"batch","p":"/batch","d":"在系统不繁忙的时候执行定时任务"},"nmcli":{"n":"nmcli","p":"/nmcli","d":"地址配置工具"},"nohup":{"n":"nohup","p":"/nohup","d":"将程序以忽略挂起信号的方式运行起来"},"umask":{"n":"umask","p":"/umask","d":"用来设置限制新建文件权限的掩码"},"clear":{"n":"clear","p":"/clear","d":"清除当前屏幕终端上的任何信息"},"squid":{"n":"squid","p":"/squid","d":"squid服务器守护进程"},"paste":{"n":"paste","p":"/paste","d":"将多个文件按列队列合并"},"patch":{"n":"patch","p":"/patch","d":"为开放源代码软件安装补丁程序"},"split":{"n":"split","p":"/split","d":"分割任意大小的文件"},"pfctl":{"n":"pfctl","p":"/pfctl","d":"PF防火墙的配置命令"},"pgrep":{"n":"pgrep","p":"/pgrep","d":"设置用户的认证信息,包括用户密码、密码过期时间等"},"pidof":{"n":"pidof","p":"/pidof","d":"查找指定名称的进程的进程号ID号"},"pkill":{"n":"pkill","p":"/pkill","d":"可以按照进程名杀死进程"},"spell":{"n":"spell","p":"/spell","d":"对文件进行拼写检查"},"dmesg":{"n":"dmesg","p":"/dmesg","d":"显示Linux系统启动信息"},"uname":{"n":"uname","p":"/uname","d":"显示Linux系统信息"},"pushd":{"n":"pushd","p":"/pushd","d":"将目录加入命令堆叠中"},"diff3":{"n":"diff3","p":"/diff3","d":"比较3个文件不同的地方"},"dhcpd":{"n":"dhcpd","p":"/dhcpd","d":"运行DHCP服务器。"},"quota":{"n":"quota","p":"/quota","d":"显示磁盘已使用的空间与限制"},"clock":{"n":"clock","p":"/clock","d":"用于调整 RTC 时间。"},"unarj":{"n":"unarj","p":"/unarj","d":"解压缩由arj命令创建的压缩包"},"users":{"n":"users","p":"/users","d":"显示当前登录系统的所有用户"},"sleep":{"n":"sleep","p":"/sleep","d":"将目前动作延迟一段时间"},"rexec":{"n":"rexec","p":"/rexec","d":"运程执行Linux系统下命令 "},"skill":{"n":"skill","p":"/skill","d":"向选定的进程发送信号冻结进程"},"rmdir":{"n":"rmdir","p":"/rmdir","d":"用来删除空目录"},"rmmod":{"n":"rmmod","p":"/rmmod","d":"从运行的内核中移除指定的内核模块"},"route":{"n":"route","p":"/route","d":"显示并设置Linux中静态路由表"},"blkid":{"n":"blkid","p":"/blkid","d":"查看块设备的文件系统类型、LABEL、UUID等信息"},"rpmdb":{"n":"rpmdb","p":"/rpmdb","d":"初始化和重建RPM数据库"},"shopt":{"n":"shopt","p":"/shopt","d":"显示和设置shell操作选项"},"rsync":{"n":"rsync","p":"/rsync","d":"远程数据同步工具"},"colrm":{"n":"colrm","p":"/colrm","d":"删除文件中的指定列"},"unset":{"n":"unset","p":"/unset","d":"删除指定的shell变量或函数"},"unzip":{"n":"unzip","p":"/unzip","d":"用于解压缩由zip命令压缩的压缩包"},"vgscan":{"n":"vgscan","p":"/vgscan","d":"扫描并显示系统中的卷组"},"bzless":{"n":"bzless","p":"/bzless","d":"增强.bz2压缩包查看器"},"mpstat":{"n":"mpstat","p":"/mpstat","d":"显示各个可用CPU的状态"},"mtools":{"n":"mtools","p":"/mtools","d":"显示mtools支持的指令"},"ipcalc":{"n":"ipcalc","p":"/ipcalc","d":"简单的IP地址计算器"},"lnstat":{"n":"lnstat","p":"/lnstat","d":"显示Linux系统的网路状态"},"locate":{"n":"locate","p":"/locate","d":"比 find 好用的文件查找工具"},"strace":{"n":"strace","p":"/strace","d":"跟踪系统调用和信号"},"whatis":{"n":"whatis","p":"/whatis","d":"查询一个命令执行什么功能"},"arping":{"n":"arping","p":"/arping","d":"通过发送ARP协议报文测试网络"},"logger":{"n":"logger","p":"/logger","d":"在系统日志中记录相应条目"},"e2fsck":{"n":"e2fsck","p":"/e2fsck","d":"用于检查第二扩展文件系统的完整性"},"indent":{"n":"indent","p":"/indent","d":"格式化C语言的源文件"},"chattr":{"n":"chattr","p":"/chattr","d":"用来改变文件属性"},"startx":{"n":"startx","p":"/startx","d":"用来启动X Window"},"chroot":{"n":"chroot","p":"/chroot","d":"把根目录换成指定的目的目录"},"logout":{"n":"logout","p":"/logout","d":"退出当前登录的Shell"},"gunzip":{"n":"gunzip","p":"/gunzip","d":"用来解压缩文件"},"ulimit":{"n":"ulimit","p":"/ulimit","d":"控制shell程序的资源"},"vmstat":{"n":"vmstat","p":"/vmstat","d":"显示虚拟内存状态"},"syslog":{"n":"syslog","p":"/syslog","d":"系统默认的日志守护进程"},"hdparm":{"n":"hdparm","p":"/hdparm","d":"显示与设定硬盘的参数"},"sysctl":{"n":"sysctl","p":"/sysctl","d":"时动态地修改内核的运行参数"},"finger":{"n":"finger","p":"/finger","d":"用于查找并显示用户信息"},"umount":{"n":"umount","p":"/umount","d":"用于卸载已经加载的文件系统"},"ntsysv":{"n":"ntsysv","p":"/ntsysv","d":"集中管理系统的各种服务"},"telnet":{"n":"telnet","p":"/telnet","d":"登录远程主机和管理(测试ip端口是否连通)"},"hping3":{"n":"hping3","p":"/hping3","d":"测试网络及主机的安全"},"findfs":{"n":"findfs","p":"/findfs","d":"标签或UUID查找文件系统"},"parted":{"n":"parted","p":"/parted","d":"磁盘分区和分区大小调整工具"},"passwd":{"n":"passwd","p":"/passwd","d":"用于让用户可以更改自己的密码"},"telint":{"n":"telint","p":"/telint","d":"切换当前正在运行系统的运行等级"},"iptraf":{"n":"iptraf","p":"/iptraf","d":"实时地监视网卡流量"},"lpstat":{"n":"lpstat","p":"/lpstat","d":"显示CUPS中打印机的状态信息"},"export":{"n":"export","p":"/export","d":"设置或显示系统环境变量"},"lsattr":{"n":"lsattr","p":"/lsattr","d":"查看文件的第二扩展文件系统属性"},"ispell":{"n":"ispell","p":"/ispell","d":"检查文件中出现的拼写错误"},"groups":{"n":"groups","p":"/groups","d":"用来打印指定用户所属的工作组"},"jwhois":{"n":"jwhois","p":"/jwhois","d":"whois 客户端服务"},"printf":{"n":"printf","p":"/printf","d":"格式化并输出结果"},"insmod":{"n":"insmod","p":"/insmod","d":"将给定的模块加载到内核中"},"expand":{"n":"expand","p":"/expand","d":"将文件的制表符转换为空白字符"},"pstack":{"n":"pstack","p":"/pstack","d":"显示每个进程的栈跟踪"},"pstree":{"n":"pstree","p":"/pstree","d":"以树状图的方式展现进程之间的派生关系"},"bzmore":{"n":"bzmore","p":"/bzmore","d":"查看bzip2压缩过的文本文件的内容"},"vdfuse":{"n":"vdfuse","p":"/vdfuse","d":"VirtualBox软件挂载VDI分区文件工具"},"uupick":{"n":"uupick","p":"/uupick","d":"命令处理传送进来的文件。"},"bzdiff":{"n":"bzdiff","p":"/bzdiff","d":"直接比较两个.bz2压缩包中文件的不同"},"pvscan":{"n":"pvscan","p":"/pvscan","d":"扫描系统中所有硬盘的物理卷列表"},"pwconv":{"n":"pwconv","p":"/pwconv","d":"用来开启用户的投影密码"},"ltrace":{"n":"ltrace","p":"/ltrace","d":"用来跟踪进程调用库函数的情况"},"hostid":{"n":"hostid","p":"/hostid","d":"用来打印当前主机的数字化标识"},"whoami":{"n":"whoami","p":"/whoami","d":"打印当前有效的用户名称"},"uucico":{"n":"uucico","p":"/uucico","d":"UUCP文件传输服务程序。"},"source":{"n":"source","p":"/source","d":"在当前Shell环境中从指定文件读取和执行命令,命令返回退出状态。"},"rcconf":{"n":"rcconf","p":"/rcconf","d":"Debian Linux下的运行等级服务配置工具"},"depmod":{"n":"depmod","p":"/depmod","d":"分析可载入模块的相依性"},"accept":{"n":"accept","p":"/accept","d":"指示打印系统接受发往指定目标打印机的打印任务"},"reboot":{"n":"reboot","p":"/reboot","d":"重新启动正在运行的Linux操作系统"},"reject":{"n":"reject","p":"/reject","d":"指示打印系统拒绝发往指定目标打印机的打印任务"},"rename":{"n":"rename","p":"/rename","d":"用字符串替换的方式批量改变文件名"},"renice":{"n":"renice","p":"/renice","d":"修改正在运行的进程的调度优先级"},"resize":{"n":"resize","p":"/resize","d":"命令设置终端机视窗的大小。"},"lvscan":{"n":"lvscan","p":"/lvscan","d":"扫描逻辑卷"},"swapon":{"n":"swapon","p":"/swapon","d":"激活Linux系统中交换空间"},"enable":{"n":"enable","p":"/enable","d":"启动或关闭shell内建命令"},"iostat":{"n":"iostat","p":"/iostat","d":"监视系统输入输出设备和CPU的使用情况"},"rlogin":{"n":"rlogin","p":"/rlogin","d":"从当前终端登录到远程Linux主机"},"cancel":{"n":"cancel","p":"/cancel","d":"取消已存在的打印任务"},"elinks":{"n":"elinks","p":"/elinks","d":"纯文本界面的WWW浏览器"},"md5sum":{"n":"md5sum","p":"/md5sum","d":"计算和校验文件报文摘要的工具程序"},"ifdown":{"n":"ifdown","p":"/ifdown","d":"禁用指定的网络接口"},"ifstat":{"n":"ifstat","p":"/ifstat","d":"统计网络接口流量状态"},"mke2fs":{"n":"mke2fs","p":"/mke2fs","d":"创建磁盘分区上的“etc2/etc3”文件系统"},"bzgrep":{"n":"bzgrep","p":"/bzgrep","d":"使用正则表达式搜索.bz2压缩包中文件"},"unlink":{"n":"unlink","p":"/unlink","d":"系统调用函数unlink去删除指定的文件"},"csplit":{"n":"csplit","p":"/csplit","d":"将一个大文件分割成小的碎片文件"},"ftpwho":{"n":"ftpwho","p":"/ftpwho","d":"显示当前每个ftp会话信息"},"ftptop":{"n":"ftptop","p":"/ftptop","d":"proftpd服务器的连接状态"},"uptime":{"n":"uptime","p":"/uptime","d":"查看Linux系统负载信息"},"screen":{"n":"screen","p":"/screen","d":"用于命令行终端切换"},"seinfo":{"n":"seinfo","p":"/seinfo","d":"查询SELinux的策略提供多少相关规则"},"mkswap":{"n":"mkswap","p":"/mkswap","d":"建立和设置SWAP交换分区"},"setsid":{"n":"setsid","p":"/setsid","d":"在新的会话中运行程序。"},"mktemp":{"n":"mktemp","p":"/mktemp","d":"创建临时文件供shell脚本使用"},"setpci":{"n":"setpci","p":"/setpci","d":"查询和配置PCI设备的使用工具"},"strings":{"n":"strings","p":"/strings","d":"在对象文件或二进制文件中查找可打印的字符串"},"setfacl":{"n":"setfacl","p":"/setfacl","d":"设置文件访问控制列表"},"service":{"n":"service","p":"/service","d":"控制系统服务的实用工具"},"crontab":{"n":"crontab","p":"/crontab","d":"提交和管理用户的需要周期性执行的任务"},"useradd":{"n":"useradd","p":"/useradd","d":"创建的新的系统用户"},"rpmsign":{"n":"rpmsign","p":"/rpmsign","d":"使用RPM软件包的签名管理工具"},"userdel":{"n":"userdel","p":"/userdel","d":"用于删除给定的用户以及与用户相关的文件"},"usermod":{"n":"usermod","p":"/usermod","d":"用于修改用户的基本信息"},"slabtop":{"n":"slabtop","p":"/slabtop","d":"实时显示内核slab内存缓存信息"},"declare":{"n":"declare","p":"/declare","d":"声明或显示shell变量"},"slocate":{"n":"slocate","p":"/slocate","d":"命令查找文件或目录"},"restore":{"n":"restore","p":"/restore","d":"所进行的操作和dump指令相反"},"readelf":{"n":"readelf","p":"/readelf","d":"用于显示elf格式文件的信息"},"quotaon":{"n":"quotaon","p":"/quotaon","d":"激活Linux内核中指定文件系统的磁盘配额功能"},"dirname":{"n":"dirname","p":"/dirname","d":"去除文件名中的非目录部分"},"ppp-off":{"n":"ppp-off","p":"/ppp-off","d":"关闭ppp连线"},"pathchk":{"n":"pathchk","p":"/pathchk","d":"检查文件中不可移植的部分"},"openssl":{"n":"openssl","p":"/openssl","d":"强大的安全套接字层密码库"},"unalias":{"n":"unalias","p":"/unalias","d":"删除由alias设置的别名"},"objdump":{"n":"objdump","p":"/objdump","d":"显示二进制文件信息"},"ssh-add":{"n":"ssh-add","p":"/ssh-add","d":"把专用密钥添加到ssh-agent的高速缓存中"},"ntpdate":{"n":"ntpdate","p":"/ntpdate","d":"使用网络计时协议(NTP)设置日期和时间"},"nologin":{"n":"nologin","p":"/nologin","d":"拒绝用户登录系统"},"volname":{"n":"volname","p":"/volname","d":"显示指定的ISO-9660格式的设备的卷名称"},"nfsstat":{"n":"nfsstat","p":"/nfsstat","d":"列出NFS客户端和服务器的工作状态"},"netstat":{"n":"netstat","p":"/netstat","d":"查看Linux中网络系统状态信息"},"nethogs":{"n":"nethogs","p":"/nethogs","d":"终端下的网络流量监控工具"},"whereis":{"n":"whereis","p":"/whereis","d":"查找二进制程序、代码等相关文件路径"},"command":{"n":"command","p":"/command","d":"调用并执行指定的命令"},"e2label":{"n":"e2label","p":"/e2label","d":"设置第二扩展文件系统的卷标"},"edquota":{"n":"edquota","p":"/edquota","d":"用于编辑指定用户或工作组磁盘配额"},"mkisofs":{"n":"mkisofs","p":"/mkisofs","d":"建立ISO 9660映像文件"},"builtin":{"n":"builtin","p":"/builtin","d":"执行shell内部命令"},"swapoff":{"n":"swapoff","p":"/swapoff","d":"关闭指定的交换空间"},"ethtool":{"n":"ethtool","p":"/ethtool","d":"显示或修改以太网卡的配置信息"},"lpadmin":{"n":"lpadmin","p":"/lpadmin","d":"配置CUPS套件中的打印机和类"},"losetup":{"n":"losetup","p":"/losetup","d":"设定与控制循环(loop)设备"},"logsave":{"n":"logsave","p":"/logsave","d":"将命令的输出信息保存到指定的日志文件"},"bunzip2":{"n":"bunzip2","p":"/bunzip2","d":"创一个bz2文件压缩包"},"systool":{"n":"systool","p":"/systool","d":"显示基于总线、类和拓扑显示系统中设备的信息"},"logname":{"n":"logname","p":"/logname","d":"用来显示用户名称"},"ftpshut":{"n":"ftpshut","p":"/ftpshut","d":"在指定的时间关闭FTP服务器"},"lftpget":{"n":"lftpget","p":"/lftpget","d":"调用lftp指令下载指定的文件"},"lastlog":{"n":"lastlog","p":"/lastlog","d":"显示系统中所有用户最近一次登录信息"},"tcpdump":{"n":"tcpdump","p":"/tcpdump","d":"一款sniffer工具,是Linux上的抓包工具,嗅探器。"},"killall":{"n":"killall","p":"/killall","d":"使用进程的名称来杀死一组进程"},"gpasswd":{"n":"gpasswd","p":"/gpasswd","d":"Linux下工作组文件的管理工具"},"apt-key":{"n":"apt-key","p":"/apt-key","d":"管理Debian Linux系统中的软件包密钥"},"apt-get":{"n":"apt-get","p":"/apt-get","d":"Debian Linux发行版中的APT软件包管理工具"},"apropos":{"n":"apropos","p":"/apropos","d":"在 whatis 数据库中查找字符串"},"grpconv":{"n":"grpconv","p":"/grpconv","d":"用来开启群组的投影密码"},"install":{"n":"install","p":"/install","d":"安装或升级软件或备份数据"},"zipinfo":{"n":"zipinfo","p":"/zipinfo","d":"用来列出压缩文件信息"},"hwclock":{"n":"hwclock","p":"/hwclock","d":"显示与设定硬件时钟"},"hexdump":{"n":"hexdump","p":"/hexdump","d":"显示文件十六进制格式"},"history":{"n":"history","p":"/history","d":"用于显示历史命令"},"iptstate":{"n":"iptstate","p":"/iptstate","d":"显示iptables的工作状态"},"arpwatch":{"n":"arpwatch","p":"/arpwatch","d":"监听网络上ARP的记录"},"pvchange":{"n":"pvchange","p":"/pvchange","d":"修改物理卷属性"},"diffstat":{"n":"diffstat","p":"/diffstat","d":"显示diff命令输出信息的柱状图"},"pvcreate":{"n":"pvcreate","p":"/pvcreate","d":"将物理硬盘分区初始化为物理卷"},"basename":{"n":"basename","p":"/basename","d":"打印目录或者文件的基本名称"},"pvremove":{"n":"pvremove","p":"/pvremove","d":"删除一个存在的物理卷"},"lvremove":{"n":"lvremove","p":"/lvremove","d":"删除指定LVM逻辑卷"},"ldconfig":{"n":"ldconfig","p":"/ldconfig","d":"动态链接库管理命令"},"shutdown":{"n":"shutdown","p":"/shutdown","d":"用来执行系统关机的命令"},"dhcrelay":{"n":"dhcrelay","p":"/dhcrelay","d":"使用dhcrelay命令可以提供中继DHCP和BOOTP请求"},"mkinitrd":{"n":"mkinitrd","p":"/mkinitrd","d":"建立要载入ramdisk的映像文件"},"zipsplit":{"n":"zipsplit","p":"/zipsplit","d":"将较大的zip压缩包分割成各个较小的压缩包"},"logwatch":{"n":"logwatch","p":"/logwatch","d":"可定制和可插入式的日志监视系统"},"unexpand":{"n":"unexpand","p":"/unexpand","d":"将文件的空白字符转换为制表符"},"groupmod":{"n":"groupmod","p":"/groupmod","d":"更改群组识别码或名称"},"nslookup":{"n":"nslookup","p":"/nslookup","d":"查询域名DNS信息的工具"},"quotaoff":{"n":"quotaoff","p":"/quotaoff","d":"关闭Linux内核中指定文件系统的磁盘配额功能"},"groupdel":{"n":"groupdel","p":"/groupdel","d":"用于删除指定的工作组"},"modprobe":{"n":"modprobe","p":"/modprobe","d":"自动处理可载入模块"},"dhclient":{"n":"dhclient","p":"/dhclient","d":"动态获取或释放IP地址"},"lvcreate":{"n":"lvcreate","p":"/lvcreate","d":"用于创建LVM的逻辑卷"},"groupadd":{"n":"groupadd","p":"/groupadd","d":"用于创建一个新的工作组"},"readonly":{"n":"readonly","p":"/readonly","d":"定义只读shell变量或函数"},"lvextend":{"n":"lvextend","p":"/lvextend","d":"扩展逻辑卷空间"},"lvreduce":{"n":"lvreduce","p":"/lvreduce","d":"收缩逻辑卷空间"},"vgrename":{"n":"vgrename","p":"/vgrename","d":"使用vgrename命令可以重命名卷组的名称。"},"htdigest":{"n":"htdigest","p":"/htdigest","d":"Apache服务器内置工具"},"blockdev":{"n":"blockdev","p":"/blockdev","d":"从命令行调用区块设备控制程序"},"repquota":{"n":"repquota","p":"/repquota","d":"报表的格式输出磁盘空间限制的状态"},"lvresize":{"n":"lvresize","p":"/lvresize","d":"调整逻辑卷空间大小"},"xlsfonts":{"n":"xlsfonts","p":"/xlsfonts","d":"列出X Server使用的字体"},"chpasswd":{"n":"chpasswd","p":"/chpasswd","d":"批量更新用户口令的工具"},"ftpcount":{"n":"ftpcount","p":"/ftpcount","d":"显示目前已FTP登入的用户人数"},"vgremove":{"n":"vgremove","p":"/vgremove","d":"用于用户删除LVM卷组"},"hostname":{"n":"hostname","p":"/hostname","d":"显示和设置系统的主机名"},"exportfs":{"n":"exportfs","p":"/exportfs","d":"管理NFS共享文件系统列表"},"bmodinfo":{"n":"bmodinfo","p":"/bmodinfo","d":"显示给定模块的详细信息"},"vgreduce":{"n":"vgreduce","p":"/vgreduce","d":"从卷组中删除物理卷"},"dpkg-deb":{"n":"dpkg-deb","p":"/dpkg-deb","d":"Debian Linux下的软件包管理工具"},"mailstat":{"n":"mailstat","p":"/mailstat","d":"显示到达的邮件状态"},"dos2unix":{"n":"dos2unix","p":"/dos2unix","d":"将DOS格式文本文件转换成Unix格式"},"htpasswd":{"n":"htpasswd","p":"/htpasswd","d":"apache服务器创建密码认证文件"},"rpm2cpio":{"n":"rpm2cpio","p":"/rpm2cpio","d":"将RPM软件包转换为cpio格式的文件"},"rpmbuild":{"n":"rpmbuild","p":"/rpmbuild","d":"创建RPM的二进制软件包和源码软件包"},"vgextend":{"n":"vgextend","p":"/vgextend","d":"向卷组中添加物理卷"},"rpmquery":{"n":"rpmquery","p":"/rpmquery","d":"从RPM数据库中查询软件包信息"},"vgcreate":{"n":"vgcreate","p":"/vgcreate","d":"用于创建LVM卷组"},"poweroff":{"n":"poweroff","p":"/poweroff","d":"关闭Linux系统,关闭记录会被写入到/var/log/wtmp日志文件中。"},"iptables":{"n":"iptables","p":"/iptables","d":"Linux上常用的防火墙软件"},"cdrecord":{"n":"cdrecord","p":"/cdrecord","d":"Linux系统下光盘刻录功能命令"},"vgchange":{"n":"vgchange","p":"/vgchange","d":"修改卷组属性"},"runlevel":{"n":"runlevel","p":"/runlevel","d":"打印当前Linux系统的运行等级"},"xlsatoms":{"n":"xlsatoms","p":"/xlsatoms","d":"列出X服务器内部所有定义的原子成分"},"protoize":{"n":"protoize","p":"/protoize","d":"GNU-C代码转换为ANSI-C代码"},"ifconfig":{"n":"ifconfig","p":"/ifconfig","d":"配置和显示Linux系统网卡的网络参数"},"updatedb":{"n":"updatedb","p":"/updatedb","d":"创建或更新slocate命令所必需的数据库文件"},"tempfile":{"n":"tempfile","p":"/tempfile","d":"shell中给临时文件命名"},"mii-tool":{"n":"mii-tool","p":"/mii-tool","d":"配置网络设备协商方式的工具"},"semanage":{"n":"semanage","p":"/semanage","d":"默认目录的安全上下文查询与修改"},"sendmail":{"n":"sendmail","p":"/sendmail","d":"著名电子邮件服务器"},"compress":{"n":"compress","p":"/compress","d":"使用Lempress-Ziv编码压缩数据文件"},"newusers":{"n":"newusers","p":"/newusers","d":"用于批处理的方式一次创建多个命令"},"sesearch":{"n":"sesearch","p":"/sesearch","d":"查询SELinux策略的规则详情"},"aptitude":{"n":"aptitude","p":"/aptitude","d":"Debian Linux系统中软件包管理工具"},"pwunconv":{"n":"pwunconv","p":"/pwunconv","d":"用来关闭用户的投影密码"},"dircolors":{"n":"dircolors","p":"/dircolors","d":"置ls命令在显示目录或文件时所用的色彩"},"getsebool":{"n":"getsebool","p":"/getsebool","d":"查询SElinux策略内各项规则的布尔值"},"systemctl":{"n":"systemctl","p":"/systemctl","d":"系统服务管理器指令"},"fishshell":{"n":"fishshell","p":"/fishshell","d":"比 bash 更好用的 shell"},"chkconfig":{"n":"chkconfig","p":"/chkconfig","d":"检查或设置系统的各种服务"},"logrotate":{"n":"logrotate","p":"/logrotate","d":"统日志进行轮转、压缩和删除"},"lvdisplay":{"n":"lvdisplay","p":"/lvdisplay","d":"显示逻辑卷属性"},"mysqldump":{"n":"mysqldump","p":"/mysqldump","d":"MySQL数据库中备份工具"},"ssh-agent":{"n":"ssh-agent","p":"/ssh-agent","d":"ssh密钥管理器"},"mysqlshow":{"n":"mysqlshow","p":"/mysqlshow","d":"显示MySQL中数据库相关信息"},"grpunconv":{"n":"grpunconv","p":"/grpunconv","d":"用来关闭群组的投影密码"},"smbpasswd":{"n":"smbpasswd","p":"/smbpasswd","d":"samba用户和密码管理工具"},"arptables":{"n":"arptables","p":"/arptables","d":"管理ARP包过滤规则表"},"smbclient":{"n":"smbclient","p":"/smbclient","d":"交互方式访问samba服务器"},"showmount":{"n":"showmount","p":"/showmount","d":"显示NFS服务器加载的信息"},"clockdiff":{"n":"clockdiff","p":"/clockdiff","d":"检测两台linux主机的时间差"},"badblocks":{"n":"badblocks","p":"/badblocks","d":"查找磁盘中损坏的区块"},"ip6tables":{"n":"ip6tables","p":"/ip6tables","d":"linux中防火墙软件"},"setsebool":{"n":"setsebool","p":"/setsebool","d":"修改SElinux策略内各项规则的布尔值"},"apachectl":{"n":"apachectl","p":"/apachectl","d":"Apache服务器前端控制工具"},"rpmverify":{"n":"rpmverify","p":"/rpmverify","d":"验证已安装的RPM软件包的正确性"},"partprobe":{"n":"partprobe","p":"/partprobe","d":"不重启的情况下重读分区"},"tcpreplay":{"n":"tcpreplay","p":"/tcpreplay","d":"将PCAP包重新发送,用于性能或者功能测试"},"vgdisplay":{"n":"vgdisplay","p":"/vgdisplay","d":"显示LVM卷组的信息"},"vgconvert":{"n":"vgconvert","p":"/vgconvert","d":"转换卷组元数据格式"},"dmidecode":{"n":"dmidecode","p":"/dmidecode","d":"在Linux系统下获取有关硬件方面的信息"},"pvdisplay":{"n":"pvdisplay","p":"/pvdisplay","d":"显示物理卷的属性"},"tracepath":{"n":"tracepath","p":"/tracepath","d":"追踪目的主机经过的路由信息"},"uncompress":{"n":"uncompress","p":"/uncompress","d":"用来解压.Z文件"},"quotacheck":{"n":"quotacheck","p":"/quotacheck","d":"检查磁盘的使用空间与限制"},"traceroute":{"n":"traceroute","p":"/traceroute","d":"显示数据包到主机间的路径"},"usernetctl":{"n":"usernetctl","p":"/usernetctl","d":"被允许时操作指定的网络接口"},"domainname":{"n":"domainname","p":"/domainname","d":"显示和设置系统的NIS域名"},"getenforce":{"n":"getenforce","p":"/getenforce","d":"显示当前SELinux的应用模式,是强制、执行还是停用。"},"cupsenable":{"n":"cupsenable","p":"/cupsenable","d":"启动指定的打印机"},"get_module":{"n":"get_module","p":"/get_module","d":"获取Linux内核模块的详细信息"},"dpkg-query":{"n":"dpkg-query","p":"/dpkg-query","d":"Debian Linux中软件包的查询工具"},"ssh-keygen":{"n":"ssh-keygen","p":"/ssh-keygen","d":"为ssh生成、管理和转换认证密钥"},"dpkg-split":{"n":"dpkg-split","p":"/dpkg-split","d":"Debian Linux中将大软件包分割成小包"},"mkbootdisk":{"n":"mkbootdisk","p":"/mkbootdisk","d":"可建立目前系统的启动盘"},"unprotoize":{"n":"unprotoize","p":"/unprotoize","d":"删除C语言源代码文件中的函数原型"},"restorecon":{"n":"restorecon","p":"/restorecon","d":"恢复文件的安全上下文"},"mysqladmin":{"n":"mysqladmin","p":"/mysqladmin","d":"MySQL服务器管理客户端"},"xlsclients":{"n":"xlsclients","p":"/xlsclients","d":"列出显示器中的客户端应用程序"},"mysqlimport":{"n":"mysqlimport","p":"/mysqlimport","d":"为MySQL服务器用命令行方式导入数据"},"squidclient":{"n":"squidclient","p":"/squidclient","d":"squid服务器的客户端管理工具"},"sftp-server":{"n":"sftp-server","p":"/sftp-server","d":"sftp协议的服务器端程序"},"consoletype":{"n":"consoletype","p":"/consoletype","d":"输出已连接的终端类型"},"lsb_release":{"n":"lsb_release","p":"/lsb_release","d":"显示发行版本信息"},"ssh-copy-id":{"n":"ssh-copy-id","p":"/ssh-copy-id","d":"把本地的ssh公钥文件安装到远程主机对应的账户下"},"supervisord":{"n":"supervisord","p":"/supervisord","d":"配置后台服务/常驻进程的进程管家工具"},"cupsdisable":{"n":"cupsdisable","p":"/cupsdisable","d":"停止指定的打印机"},"dpkg-divert":{"n":"dpkg-divert","p":"/dpkg-divert","d":"Debian Linux中创建并管理一个转向列表"},"inotifywait":{"n":"inotifywait","p":"/inotifywait","d":"异步文件系统监控机制"},"ssh-keyscan":{"n":"ssh-keyscan","p":"/ssh-keyscan","d":"收集主机公钥的使用工具"},"dpkg-trigger":{"n":"dpkg-trigger","p":"/dpkg-trigger","d":"Debian Linux下的软件包触发器"},"apt-sortpkgs":{"n":"apt-sortpkgs","p":"/apt-sortpkgs","d":"Debian Linux下对软件包索引文件进行排序的工具"},"convertquota":{"n":"convertquota","p":"/convertquota","d":"把老的配额文件转换为新的格式"},"ypdomainname":{"n":"ypdomainname","p":"/ypdomainname","d":"显示主机的NIS的域名"},"bzip2recover":{"n":"bzip2recover","p":"/bzip2recover","d":"恢复被破坏的.bz2压缩包中的文件"},"firewall-cmd":{"n":"firewall-cmd","p":"/firewall-cmd","d":"Linux上新用的防火墙软件,跟iptables差不多的工具。"},"kernelversion":{"n":"kernelversion","p":"/kernelversion","d":"打印当前内核的主版本号"},"iptables-save":{"n":"iptables-save","p":"/iptables-save","d":"备份iptables的表配置"},"nisdomainname":{"n":"nisdomainname","p":"/nisdomainname","d":"显示主机NIS的域名"},"speedtest-cli":{"n":"speedtest-cli","p":"/speedtest-cli","d":"命令行下测试服务器外网速度"},"dnsdomainname":{"n":"dnsdomainname","p":"/dnsdomainname","d":"定义DNS系统中FQDN名称的域名"},"ip6tables-save":{"n":"ip6tables-save","p":"/ip6tables-save","d":"保存ip6tables表配置"},"named-checkzone":{"n":"named-checkzone","p":"/named-checkzone","d":"使用named-checkzone命令可以进行区域文件有效性检查和转换,必须指定区域名称和区域文件名称。"},"iptables-restore":{"n":"iptables-restore","p":"/iptables-restore","d":"还原iptables表的配置"},"dpkg-reconfigure":{"n":"dpkg-reconfigure","p":"/dpkg-reconfigure","d":"Debian Linux中重新配制一个已经安装的软件包"},"ip6tables-restore":{"n":"ip6tables-restore","p":"/ip6tables-restore","d":"还原ip6tables表"},"dpkg-statoverride":{"n":"dpkg-statoverride","p":"/dpkg-statoverride","d":"Debian Linux中覆盖文件的所有权和模式"},"dpkg-preconfigure":{"n":"dpkg-preconfigure","p":"/dpkg-preconfigure","d":"Debian Linux中软件包安装之前询问问题"}} \ No newline at end of file diff --git a/package.json b/package.json index 8668d6078ab..1c6c125266a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "linux-command", - "version": "1.1.1", + "version": "1.2.0", "description": "Linux Command", "main": "dist/data.json", "scripts": { From f8a9e474698b88a9c4e93bf329472f43f32d2a81 Mon Sep 17 00:00:00 2001 From: Huntout Zhang Date: Wed, 13 Jun 2018 08:33:53 +0800 Subject: [PATCH 0187/1284] Update firewall-cmd.md fix typo of `--add-forward-port` example --- command/firewall-cmd.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/command/firewall-cmd.md b/command/firewall-cmd.md index 0b46e696fab..56da3687a89 100644 --- a/command/firewall-cmd.md +++ b/command/firewall-cmd.md @@ -191,8 +191,8 @@ firewall-cmd --remove-masquerade# 禁止防火墙伪装IP ```bash firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 # 将80端口的流量转发至8080 -firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.1.0.1 # 将80端口的流量转发至192.168.0.1 -firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.0.1:toport=8080 # 将80端口的流量转发至192.168.0.1的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端口 ``` 1. 当我们想把某个端口隐藏起来的时候,就可以在防火墙上阻止那个端口访问,然后再开一个不规则的端口,之后配置防火墙的端口转发,将流量转发过去。 From 2a7ff41f7bcb2b485ef32071884a6465075360f0 Mon Sep 17 00:00:00 2001 From: rgshare Date: Thu, 14 Jun 2018 15:23:09 +0800 Subject: [PATCH 0188/1284] Update umask.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `umask -s`其中的s应该是大写的:`umask -S` --- command/umask.md | 106 +++++++++++++++++++++++------------------------ 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/command/umask.md b/command/umask.md index 97b5d9f6993..3b7c2d337c7 100644 --- a/command/umask.md +++ b/command/umask.md @@ -1,53 +1,53 @@ -umask -=== - -用来设置限制新建文件权限的掩码 - -## 补充说明 - -**umask命令** 用来设置限制新建文件权限的掩码。当新文件被创建时,其最初的权限由文件创建掩码决定。用户每次注册进入系统时,umask命令都被执行, 并自动设置掩码mode来限制新文件的权限。用户可以通过再次执行umask命令来改变默认值,新的权限将会把旧的覆盖掉。 - -### 语法 - -``` -umask(选项)(参数) -``` - -### 选项 - -``` --p:输出的权限掩码可直接作为指令来执行; --S:以符号方式输出权限掩码。 -``` - -### 参数 - -权限掩码:指定权限掩码。 - -### 实例 - -利用umask命令可以指定哪些权限将在新文件的默认权限中被删除。例如,可以使用下面的命令创建掩码,使得组用户的写权限,其他用户的读、写和执行权限都被取消: - -``` -umask u=, g=w, o=rwx - -``` - -执行该命令以后,对于下面创建的新文件,其文件主的权限未做任何改变,而组用户没有写权限,其他用户的所有权限都被取消。 - -应注意:操作符“=”在umask命令和chmod命令中的作用恰恰相反。在chmod命令中,利用它来设置指定的权限,而其余权限则被删除;但是在umask命令中,它将在原有权限的基础上删除指定的权限。 - -不能直接利用umask命令创建一个可执行的文件,用户只能在其后利用chmod命令使它具有执行权限。假设执行了命令`umask u=, g=w, o=rwx`,虽然在命令行中,没有删去文件主和组用户的执行权限,但默认的文件权限还是640(即 rw-r-----),而不是750(rwxr-x---)。但是,如果创建的是目录或者通过编译程序创建的一个可执行文件,将不受此限制。在这种情况 下,会设置文件的执行权限。 - -也可以使用八进制数值来设置mode。由于在umask中所指定的权限是要从文件中删除的,所以,如果该文件原来的初始化权限是777,那么执行命令umask 022以后,该文件的权限将变为755:如果该文件原来的初始化权限是666,那么该文件的权限将变为644。 - -可以使用下面的命令检查新创建文件的默认权限: - -``` -umask -s -``` - -选项-s表示以字符形式显示当前的掩码。如果直接输入umask命令,不带任何参数,那么将以八进制形式显示当前的掩码。系统默认的掩码是0022。 - - - \ No newline at end of file +umask +=== + +用来设置限制新建文件权限的掩码 + +## 补充说明 + +**umask命令** 用来设置限制新建文件权限的掩码。当新文件被创建时,其最初的权限由文件创建掩码决定。用户每次注册进入系统时,umask命令都被执行, 并自动设置掩码mode来限制新文件的权限。用户可以通过再次执行umask命令来改变默认值,新的权限将会把旧的覆盖掉。 + +### 语法 + +``` +umask(选项)(参数) +``` + +### 选项 + +``` +-p:输出的权限掩码可直接作为指令来执行; +-S:以符号方式输出权限掩码。 +``` + +### 参数 + +权限掩码:指定权限掩码。 + +### 实例 + +利用umask命令可以指定哪些权限将在新文件的默认权限中被删除。例如,可以使用下面的命令创建掩码,使得组用户的写权限,其他用户的读、写和执行权限都被取消: + +``` +umask u=, g=w, o=rwx + +``` + +执行该命令以后,对于下面创建的新文件,其文件主的权限未做任何改变,而组用户没有写权限,其他用户的所有权限都被取消。 + +应注意:操作符“=”在umask命令和chmod命令中的作用恰恰相反。在chmod命令中,利用它来设置指定的权限,而其余权限则被删除;但是在umask命令中,它将在原有权限的基础上删除指定的权限。 + +不能直接利用umask命令创建一个可执行的文件,用户只能在其后利用chmod命令使它具有执行权限。假设执行了命令`umask u=, g=w, o=rwx`,虽然在命令行中,没有删去文件主和组用户的执行权限,但默认的文件权限还是640(即 rw-r-----),而不是750(rwxr-x---)。但是,如果创建的是目录或者通过编译程序创建的一个可执行文件,将不受此限制。在这种情况 下,会设置文件的执行权限。 + +也可以使用八进制数值来设置mode。由于在umask中所指定的权限是要从文件中删除的,所以,如果该文件原来的初始化权限是777,那么执行命令umask 022以后,该文件的权限将变为755:如果该文件原来的初始化权限是666,那么该文件的权限将变为644。 + +可以使用下面的命令检查新创建文件的默认权限: + +``` +umask -S +``` + +选项-S表示以字符形式显示当前的掩码。如果直接输入umask命令,不带任何参数,那么将以八进制形式显示当前的掩码。系统默认的掩码是0022。 + + + From 661705d7b2e0d4789815ecb8ecede5b6f8679e4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Mon, 18 Jun 2018 01:03:14 +0800 Subject: [PATCH 0189/1284] Update cu.md --- command/cu.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/command/cu.md b/command/cu.md index a3c8147f46f..dc2b551b589 100644 --- a/command/cu.md +++ b/command/cu.md @@ -43,7 +43,9 @@ cu [dehnotv][-a<通信端口>][-c<电话号码>][-E<脱离字符>][-I<设置文 ``` cu -c 0102377765 +cu -s 38400 9=12015551234 ``` + From 81bac2e86f1a44731039c5dbdb014bd06a1c6244 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Mon, 18 Jun 2018 01:08:05 +0800 Subject: [PATCH 0190/1284] Update df.md --- command/df.md | 176 +++++++++++++++++++++++++++----------------------- 1 file changed, 95 insertions(+), 81 deletions(-) diff --git a/command/df.md b/command/df.md index 735644117a9..82c54a70b5d 100644 --- a/command/df.md +++ b/command/df.md @@ -1,81 +1,95 @@ -df -=== - -显示磁盘的相关信息 - -## 补充说明 - -**df命令** 用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。 - -### 语法 - -``` -df(选项)(参数) -``` - -### 选项 - -``` --a或--all:包含全部的文件系统; ---block-size=<区块大小>:以指定的区块大小来显示区块数目; --h或--human-readable:以可读性较高的方式来显示信息; --H或--si:与-h参数相同,但在计算时是以1000 Bytes为换算单位而非1024 Bytes; --i或--inodes:显示inode的信息; --k或--kilobytes:指定区块大小为1024字节; --l或--local:仅显示本地端的文件系统; --m或--megabytes:指定区块大小为1048576字节; ---no-sync:在取得磁盘使用信息前,不要执行sync指令,此为预设值; --P或--portability:使用POSIX的输出格式; ---sync:在取得磁盘使用信息前,先执行sync指令; --t<文件系统类型>或--type=<文件系统类型>:仅显示指定文件系统类型的磁盘信息; --T或--print-type:显示文件系统的类型; --x<文件系统类型>或--exclude-type=<文件系统类型>:不要显示指定文件系统类型的磁盘信息; ---help:显示帮助; ---version:显示版本信息。 -``` - -### 参数 - -文件:指定文件系统上的文件。 - -### 实例 - -查看系统磁盘设备,默认是KB为单位: - -``` -[root@LinServ-1 ~]# df -文件系统 1K-块 已用 可用 已用% 挂载点 -/dev/sda2 146294492 28244432 110498708 21% / -/dev/sda1 1019208 62360 904240 7% /boot -tmpfs 1032204 0 1032204 0% /dev/shm -/dev/sdb1 2884284108 218826068 2518944764 8% /data1 -``` - -使用`-h`选项以KB以上的单位来显示,可读性高: - -``` -[root@LinServ-1 ~]# df -h -文件系统 容量 已用 可用 已用% 挂载点 -/dev/sda2 140G 27G 106G 21% / -/dev/sda1 996M 61M 884M 7% /boot -tmpfs 1009M 0 1009M 0% /dev/shm -/dev/sdb1 2.7T 209G 2.4T 8% /data1 -``` - -查看全部文件系统: - -``` -[root@LinServ-1 ~]# df -a -文件系统 1K-块 已用 可用 已用% 挂载点 -/dev/sda2 146294492 28244432 110498708 21% / -proc 0 0 0 - /proc -sysfs 0 0 0 - /sys -devpts 0 0 0 - /dev/pts -/dev/sda1 1019208 62360 904240 7% /boot -tmpfs 1032204 0 1032204 0% /dev/shm -/dev/sdb1 2884284108 218826068 2518944764 8% /data1 -none 0 0 0 - /proc/sys/fs/binfmt_misc -``` - - - \ No newline at end of file +df +=== + +显示磁盘的相关信息 + +## 补充说明 + +**df命令** 用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。 + +### 语法 + +``` +df(选项)(参数) +``` + +### 选项 + +``` +-a或--all:包含全部的文件系统; +--block-size=<区块大小>:以指定的区块大小来显示区块数目; +-h或--human-readable:以可读性较高的方式来显示信息; +-H或--si:与-h参数相同,但在计算时是以1000 Bytes为换算单位而非1024 Bytes; +-i或--inodes:显示inode的信息; +-k或--kilobytes:指定区块大小为1024字节; +-l或--local:仅显示本地端的文件系统; +-m或--megabytes:指定区块大小为1048576字节; +--no-sync:在取得磁盘使用信息前,不要执行sync指令,此为预设值; +-P或--portability:使用POSIX的输出格式; +--sync:在取得磁盘使用信息前,先执行sync指令; +-t<文件系统类型>或--type=<文件系统类型>:仅显示指定文件系统类型的磁盘信息; +-T或--print-type:显示文件系统的类型; +-x<文件系统类型>或--exclude-type=<文件系统类型>:不要显示指定文件系统类型的磁盘信息; +--help:显示帮助; +--version:显示版本信息。 +``` + +### 参数 + +文件:指定文件系统上的文件。 + +### 大小格式 + +显示值以 `--block-size` 和 `DF_BLOCK_SIZE`,`BLOCK_SIZE` 和 `BLOCKSIZE` 环境变量中的第一个可用 `SIZE` 为单位。 否则,单位默认为 `1024` 个字节(如果设置 `POSIXLY_CORRECT`,则为`512`)。 + +SIZE是一个整数和可选单位(例如:10M是10 * 1024 * 1024)。 单位是K,M,G,T,P,E,Z,Y(1024的幂)或KB,MB,...(1000的幂)。 + +### 实例 + +查看系统磁盘设备,默认是KB为单位: + +``` +[root@LinServ-1 ~]# df +文件系统 1K-块 已用 可用 已用% 挂载点 +/dev/sda2 146294492 28244432 110498708 21% / +/dev/sda1 1019208 62360 904240 7% /boot +tmpfs 1032204 0 1032204 0% /dev/shm +/dev/sdb1 2884284108 218826068 2518944764 8% /data1 +``` + +使用`-h`选项以KB以上的单位来显示,可读性高: + +``` +[root@LinServ-1 ~]# df -h +文件系统 容量 已用 可用 已用% 挂载点 +/dev/sda2 140G 27G 106G 21% / +/dev/sda1 996M 61M 884M 7% /boot +tmpfs 1009M 0 1009M 0% /dev/shm +/dev/sdb1 2.7T 209G 2.4T 8% /data1 +``` + +查看全部文件系统: + +``` +[root@LinServ-1 ~]# df -a +文件系统 1K-块 已用 可用 已用% 挂载点 +/dev/sda2 146294492 28244432 110498708 21% / +proc 0 0 0 - /proc +sysfs 0 0 0 - /sys +devpts 0 0 0 - /dev/pts +/dev/sda1 1019208 62360 904240 7% /boot +tmpfs 1032204 0 1032204 0% /dev/shm +/dev/sdb1 2884284108 218826068 2518944764 8% /data1 +none 0 0 0 - /proc/sys/fs/binfmt_misc +``` + +显示 `public` 目录中的可用空间量,如以下输出中所示: + +```bash +df public +# Filesystem 1K-blocks Used Available Use% Mounted on +# /dev/loop0 18761008 15246924 2554392 86% /d Avail +``` + + + From 8c2dd3cd63800b7b0eed1cfe689aec375db9129a Mon Sep 17 00:00:00 2001 From: Rocher Date: Thu, 21 Jun 2018 13:58:47 +0800 Subject: [PATCH 0191/1284] Update systemctl.md make systemctl list-units --type=service correct --- command/systemctl.md | 314 +++++++++++++++++++++---------------------- 1 file changed, 157 insertions(+), 157 deletions(-) diff --git a/command/systemctl.md b/command/systemctl.md index 4ce1dc26840..dd302ebba1f 100644 --- a/command/systemctl.md +++ b/command/systemctl.md @@ -1,157 +1,157 @@ -systemctl -=== - -系统服务管理器指令 - -## 补充说明 - -**systemctl命令** 是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
任务旧指令新指令
使某服务自动启动chkconfig --level 3 httpd onsystemctl enable httpd.service
使某服务不自动启动chkconfig --level 3 httpd offsystemctl disable httpd.service
检查服务状态service httpd statussystemctl status httpd.service (服务详细信息) systemctl is-active httpd.service (仅显示是否 Active)
显示所有已启动的服务chkconfig --listsystemctl list-units --type=service
启动某服务service httpd startsystemctl start httpd.service
停止某服务service httpd stopsystemctl stop httpd.service
重启某服务service httpd restartsystemctl restart httpd.service
- -### 实例 - -1.启动nfs服务 - -``` -systemctl start nfs-server.service -``` - -2.设置开机自启动 - -``` -systemctl enable nfs-server.service -``` - -3.停止开机自启动 - -``` -systemctl disable nfs-server.service -``` - -4.查看服务当前状态 - -``` -systemctl status nfs-server.service -``` - -5.重新启动某服务 - -``` -systemctl restart nfs-server.service -``` - -6.查看所有已启动的服务 - -``` -systemctl list -units --type=service -``` - -开启防火墙22端口 - -``` -iptables -I INPUT -p tcp --dport 22 -j accept -``` - -如果仍然有问题,就可能是SELinux导致的 - -关闭SElinux: - -修改`/etc/selinux/config`文件中的`SELINUX=””`为disabled,然后重启。 - -彻底关闭防火墙: - -``` -sudo systemctl status firewalld.service -sudo systemctl stop firewalld.service           -sudo systemctl disable firewalld.service -``` - - - \ No newline at end of file +systemctl +=== + +系统服务管理器指令 + +## 补充说明 + +**systemctl命令** 是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
任务旧指令新指令
使某服务自动启动chkconfig --level 3 httpd onsystemctl enable httpd.service
使某服务不自动启动chkconfig --level 3 httpd offsystemctl disable httpd.service
检查服务状态service httpd statussystemctl status httpd.service (服务详细信息) systemctl is-active httpd.service (仅显示是否 Active)
显示所有已启动的服务chkconfig --listsystemctl list-units --type=service
启动某服务service httpd startsystemctl start httpd.service
停止某服务service httpd stopsystemctl stop httpd.service
重启某服务service httpd restartsystemctl restart httpd.service
+ +### 实例 + +1.启动nfs服务 + +``` +systemctl start nfs-server.service +``` + +2.设置开机自启动 + +``` +systemctl enable nfs-server.service +``` + +3.停止开机自启动 + +``` +systemctl disable nfs-server.service +``` + +4.查看服务当前状态 + +``` +systemctl status nfs-server.service +``` + +5.重新启动某服务 + +``` +systemctl restart nfs-server.service +``` + +6.查看所有已启动的服务 + +``` +systemctl list-units --type=service +``` + +开启防火墙22端口 + +``` +iptables -I INPUT -p tcp --dport 22 -j accept +``` + +如果仍然有问题,就可能是SELinux导致的 + +关闭SElinux: + +修改`/etc/selinux/config`文件中的`SELINUX=””`为disabled,然后重启。 + +彻底关闭防火墙: + +``` +sudo systemctl status firewalld.service +sudo systemctl stop firewalld.service           +sudo systemctl disable firewalld.service +``` + + + From 0f34e0996b9c1ee70d70e181a65dab9a31170b43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Thu, 21 Jun 2018 21:25:51 +0800 Subject: [PATCH 0192/1284] Update ps.md --- command/ps.md | 111 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 109 insertions(+), 2 deletions(-) diff --git a/command/ps.md b/command/ps.md index e8ab177537e..c1c3f22d488 100644 --- a/command/ps.md +++ b/command/ps.md @@ -86,14 +86,121 @@ X:采用旧式的Linux i386登陆格式显示程序状况。 按内存资源的使用量对进程进行排序 -``` +```bash ps aux | sort -rnk 4 ``` 按 CPU 资源的使用量对进程进行排序 -``` +```bash ps aux | sort -nk 3 ``` +显示所有进程信息 + +```bash +ps -A +``` + +显示指定用户信息 + +```bash +ps -u root +``` + +显示所有进程信息,连同命令行 + +```bash +ps -ef +``` + +ps 与grep 常用组合用法,查找特定进程 + +```bash +ps -ef|grep ssh +``` + +将目前属于您自己这次登入的 PID 与相关信息列示出来 + +```bash +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 +# 501 592 577 4006 0 31 0 4297048 52 - S 0 ttys001 0:00.63 -zsh +``` + +- F 代表这个程序的旗标 (flag), 4 代表使用者为 super user +- S 代表这个程序的状态 (STAT),关于各 STAT 的意义将在内文介绍 +- UID 程序被该 UID 所拥有 +- PID 就是这个程序的 ID ! +- PPID 则是其上级父程序的ID +- C CPU 使用的资源百分比 +- PRI 这个是 Priority (优先执行序) 的缩写,详细后面介绍 +- NI 这个是 Nice 值,在下一小节我们会持续介绍 +- ADDR 这个是 kernel function,指出该程序在内存的那个部分。如果是个 running的程序,一般就是 "-" +- SZ 使用掉的内存大小 +- WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作 +- TTY 登入者的终端机位置 +- TIME 使用掉的 CPU 时间。 +- CMD 所下达的指令为何 + +> 在预设的情况下, `ps` 仅会列出与目前所在的 `bash shell` 有关的 `PID` 而已,所以, 当我使用 `ps -l` 的时候,只有三个 PID。 + +列出目前所有的正在内存当中的程序 + +```bash +ps aux + +# USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND +# kenny 6155 21.3 1.7 7969944 284912 ?? S 二03下午 199:14.14 /Appl...OS/WeChat +# kenny 559 20.4 0.8 4963740 138176 ?? S 二03下午 33:28.27 /Appl...S/iTerm2 +# _windowserver 187 18.0 0.6 7005748 95884 ?? Ss 二03下午 288:44.97 /Syst...Light.WindowServer -daemon +# kenny 1408 10.7 2.1 5838592 347348 ?? S 二03下午 138:51.63 /Appl...nts/MacOS/Google Chrome +# kenny 327 5.8 0.5 5771984 79452 ?? S 二03下午 2:51.58 /Syst...pp/Contents/MacOS/Finder +``` + +- USER:该 process 属于那个使用者账号的 +- PID :该 process 的号码 +- %CPU:该 process 使用掉的 CPU 资源百分比 +- %MEM:该 process 所占用的物理内存百分比 +- VSZ :该 process 使用掉的虚拟内存量 (Kbytes) +- RSS :该 process 占用的固定的内存量 (Kbytes) +- TTY :该 process 是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。 +- STAT:该程序目前的状态,主要的状态有 +- R :该程序目前正在运作,或者是可被运作 +- S :该程序目前正在睡眠当中 (可说是 idle 状态),但可被某些讯号 (signal) 唤醒。 +- T :该程序目前正在侦测或者是停止了 +- Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态 +- START:该 process 被触发启动的时间 +- TIME :该 process 实际使用 CPU 运作的时间 +- COMMAND:该程序的实际指令 + +列出类似程序树的程序显示 + +``` +ps -axjf + +# USER PID PPID PGID SESS JOBC STAT TT TIME COMMAND UID C STIME TTY +# root 1 0 1 0 0 Ss ?? 10:51.90 /sbin/launchd 0 0 二03下午 ?? +# root 50 1 50 0 0 Ss ?? 0:10.07 /usr/sbin/syslog 0 0 二03下午 ?? +# root 51 1 51 0 0 Ss ?? 0:29.90 /usr/libexec/Use 0 0 二03下午 ?? +``` + +找出与 cron 与 syslog 这两个服务有关的 PID 号码 + +``` +ps aux | egrep '(cron|syslog)' + +# root 50 0.0 0.0 4305532 1284 ?? Ss 二03下午 0:10.08 /usr/sbin/syslogd +# kenny 90167 0.0 0.0 4258468 184 s007 R+ 9:23下午 0:00.00 egrep (cron|syslog) +``` + +把所有进程显示出来,并输出到ps001.txt文件 + +``` +ps -aux > ps001.txt +``` + +输出指定的字段 + From d0114e4280b21dcb3a2510e67d7bf05e5cbb0282 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Thu, 21 Jun 2018 21:39:09 +0800 Subject: [PATCH 0193/1284] Update ps.md --- command/ps.md | 49 ++++++++++++++++--------------------------------- 1 file changed, 16 insertions(+), 33 deletions(-) diff --git a/command/ps.md b/command/ps.md index c1c3f22d488..73a348e56f5 100644 --- a/command/ps.md +++ b/command/ps.md @@ -84,40 +84,23 @@ X:采用旧式的Linux i386登陆格式显示程序状况。 ### 实例 -按内存资源的使用量对进程进行排序 - -```bash -ps aux | sort -rnk 4 -``` - -按 CPU 资源的使用量对进程进行排序 - -```bash -ps aux | sort -nk 3 -``` - -显示所有进程信息 - -```bash -ps -A -``` - -显示指定用户信息 - -```bash -ps -u root -``` - -显示所有进程信息,连同命令行 - -```bash -ps -ef -``` - -ps 与grep 常用组合用法,查找特定进程 - ```bash -ps -ef|grep ssh +ps axo pid,comm,pcpu # 查看进程的PID、名称以及CPU 占用率 +ps aux | sort -rnk 4 # 按内存资源的使用量对进程进行排序 +ps aux | sort -nk 3 # 按 CPU 资源的使用量对进程进行排序 +ps -A # 显示所有进程信息 +ps -u root # 显示指定用户信息 +ps -efL # 查看线程数 +ps -e -o "%C : %p :%z : %a"|sort -k5 -nr # 查看进程并按内存使用大小排列 +ps -ef # 显示所有进程信息,连同命令行 +ps -ef | grep ssh # ps 与grep 常用组合用法,查找特定进程 +ps -C nginx # 通过名字或命令搜索进程 +ps aux --sort=-pcpu,+pmem # CPU或者内存进行排序,-降序,+升序 +ps -f --forest -C nginx # 用树的风格显示进程的层次关系 +ps -o pid,uname,comm -C nginx # 显示一个父进程的子进程 +ps -e -o pid,uname=USERNAME,pcpu=CPU_USAGE,pmem,comm # 重定义标签 +ps -e -o pid,comm,etime # 显示进程运行的时间 +ps -aux | grep named # 查看named进程详细信息 ``` 将目前属于您自己这次登入的 PID 与相关信息列示出来 From 7afb5c638b847ce45c02b192c4c2bd1a9a2006b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Thu, 21 Jun 2018 21:52:09 +0800 Subject: [PATCH 0194/1284] Update lsof.md --- command/lsof.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/command/lsof.md b/command/lsof.md index ed80d539364..5ff61083133 100644 --- a/command/lsof.md +++ b/command/lsof.md @@ -133,4 +133,10 @@ events/1 7 root cwd DIR 8,2 4096 2 / lsof -p $pid ``` - \ No newline at end of file +获取端口对应的进程ID=>pid + +``` +lsof -i:9981 -P -t -sTCP:LISTEN +``` + + From b324523149a0d9c010c40b854823ba9abc8cd0b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Thu, 21 Jun 2018 21:54:37 +0800 Subject: [PATCH 0195/1284] Update ps.md --- command/ps.md | 1 + 1 file changed, 1 insertion(+) diff --git a/command/ps.md b/command/ps.md index 73a348e56f5..e7b5d6306d5 100644 --- a/command/ps.md +++ b/command/ps.md @@ -101,6 +101,7 @@ ps -o pid,uname,comm -C nginx # 显示一个父进程的子进程 ps -e -o pid,uname=USERNAME,pcpu=CPU_USAGE,pmem,comm # 重定义标签 ps -e -o pid,comm,etime # 显示进程运行的时间 ps -aux | grep named # 查看named进程详细信息 +ps -o command -p 91730 | sed -n 2p # 通过进程id获取服务名称 ``` 将目前属于您自己这次登入的 PID 与相关信息列示出来 From 61e427acf832afd16da6846019cb85d4ace9b210 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Sat, 30 Jun 2018 15:04:29 +0800 Subject: [PATCH 0196/1284] Update tail.md --- command/tail.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/command/tail.md b/command/tail.md index 0f8fadaf792..5120f36a54e 100644 --- a/command/tail.md +++ b/command/tail.md @@ -37,11 +37,16 @@ tail(选项)(参数) ### 实例 +```bash +tail file #(显示文件file的最后10行) +tail -n +20 file #(显示文件file的内容,从第20行至文件末尾) +tail -c 10 file #(显示文件file的最后10个字符) + +tail -25 mail.log # 显示 mail.log 最后的 25 行 +tail -f mail.log # 等同于--follow=descriptor,根据文件描述符进行追踪,当文件改名或被删除,追踪停止 +tail -F mail.log # 等同于--follow=name --retry,根据文件名进行追踪,并保持重试,即该文件被删除或改名后,如果再次创建相同的文件名,会继续追踪 ``` -tail file (显示文件file的最后10行) -tail -n +20 file (显示文件file的内容,从第20行至文件末尾) -tail -c 10 file (显示文件file的最后10个字符) -``` + From 60dcd45afa478db039dbe9bb6302e6c74dc05e24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Sat, 30 Jun 2018 15:07:07 +0800 Subject: [PATCH 0197/1284] Update ntsysv.md --- command/ntsysv.md | 66 ++++++++++++++++++++++++----------------------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/command/ntsysv.md b/command/ntsysv.md index 33039de7d61..aef457e025d 100644 --- a/command/ntsysv.md +++ b/command/ntsysv.md @@ -1,32 +1,34 @@ -ntsysv -=== - -集中管理系统的各种服务 - -## 补充说明 - -**ntsysv命令** 提供了一个基于文本界面的菜单操作方式,集中管理系统不同的运行等级下的系统服务启动状态。在RedHat各个发行版,CentOS各个版本,都自带这个工具。它具有互动式操作界面,您可以轻易地利用方向键和空格键等,开启,关闭操作系统在每个执行等级中,所要执行的系统服务。 - -### 语法 - -``` -ntsysv(选项) -``` - -### 选项 - -``` ---leve:指定运行等级; ---back:在互动式界面里,显示Back钮,而非cancel钮。 -``` - -### 实例 - -输入ntsysv命令后,出现一个交互式的管理菜单,如下: - -!ntsysv - -使用空格键选择或者取消选项! - - - \ No newline at end of file +ntsysv +=== + +集中管理系统的各种服务 + +## 补充说明 + +**ntsysv命令** 提供了一个基于文本界面的菜单操作方式,集中管理系统不同的运行等级下的系统服务启动状态。在RedHat各个发行版,CentOS各个版本,都自带这个工具。它具有互动式操作界面,您可以轻易地利用方向键和空格键等,开启,关闭操作系统在每个执行等级中,所要执行的系统服务。 + +### 语法 + +``` +ntsysv(选项) +``` + +### 选项 + +``` +--leve:指定运行等级; +--back:在互动式界面里,显示Back钮,而非cancel钮。 +``` + +### 实例 + +输入ntsysv命令后,出现一个交互式的管理菜单,如下: + +``` +!ntsysv +``` + +使用空格键选择或者取消选项! + + + From e7d75fc72611141f1c37c5c83da81fb2f34873cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Sun, 1 Jul 2018 13:34:59 +0800 Subject: [PATCH 0198/1284] Update systemctl.md --- command/systemctl.md | 147 +++++++------------------------------------ 1 file changed, 21 insertions(+), 126 deletions(-) diff --git a/command/systemctl.md b/command/systemctl.md index dd302ebba1f..66c316c5431 100644 --- a/command/systemctl.md +++ b/command/systemctl.md @@ -7,130 +7,25 @@ systemctl **systemctl命令** 是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
任务旧指令新指令
使某服务自动启动chkconfig --level 3 httpd onsystemctl enable httpd.service
使某服务不自动启动chkconfig --level 3 httpd offsystemctl disable httpd.service
检查服务状态service httpd statussystemctl status httpd.service (服务详细信息) systemctl is-active httpd.service (仅显示是否 Active)
显示所有已启动的服务chkconfig --listsystemctl list-units --type=service
启动某服务service httpd startsystemctl start httpd.service
停止某服务service httpd stopsystemctl stop httpd.service
重启某服务service httpd restartsystemctl restart httpd.service
- -### 实例 - -1.启动nfs服务 - -``` -systemctl start nfs-server.service -``` - -2.设置开机自启动 - -``` -systemctl enable nfs-server.service -``` - -3.停止开机自启动 - -``` -systemctl disable nfs-server.service -``` - -4.查看服务当前状态 - -``` -systemctl status nfs-server.service -``` - -5.重新启动某服务 - -``` -systemctl restart nfs-server.service -``` - -6.查看所有已启动的服务 - -``` -systemctl list-units --type=service +| 任务 | 旧指令 | 新指令 | +| ---- | ---- | ---- | +| 使某服务自动启动 | chkconfig --level 3 httpd on | systemctl enable httpd.service | +| 使某服务不自动启动 | chkconfig --level 3 httpd off | systemctl disable httpd.service | +| 检查服务状态 | service httpd status | systemctl status httpd.service (服务详细信息) systemctl is-active httpd.service (仅显示是否 Active) | +| 显示所有已启动的服务 | chkconfig --list | systemctl list-units --type=service | +| 启动某服务 | service httpd start | systemctl start httpd.service | +| 停止某服务 | service httpd stop | systemctl stop httpd.service | +| 重启某服务 | service httpd restart | systemctl restart httpd.service | + +### 实例 + +```bash +systemctl start nfs-server.service . # 启动nfs服务 +systemctl enable nfs-server.service # 设置开机自启动 +systemctl disable nfs-server.service # 停止开机自启动 +systemctl status nfs-server.service # 查看服务当前状态 +systemctl restart nfs-server.service # 重新启动某服务 +systemctl list-units --type=service # 查看所有已启动的服务 ``` 开启防火墙22端口 @@ -143,11 +38,11 @@ iptables -I INPUT -p tcp --dport 22 -j accept 关闭SElinux: -修改`/etc/selinux/config`文件中的`SELINUX=””`为disabled,然后重启。 +修改`/etc/selinux/config`文件中的`SELINUX=""`为disabled,然后重启。 彻底关闭防火墙: -``` +```bash sudo systemctl status firewalld.service sudo systemctl stop firewalld.service           sudo systemctl disable firewalld.service From d61b2bc27b1307ec2b533266aaa17356d7c68e99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?= <398188662@qq.com> Date: Wed, 4 Jul 2018 19:44:06 +0800 Subject: [PATCH 0199/1284] Update netstat.md --- command/netstat.md | 344 +++++++++++++++++++++++---------------------- 1 file changed, 175 insertions(+), 169 deletions(-) diff --git a/command/netstat.md b/command/netstat.md index 6fe590c6f55..408c636a9e7 100644 --- a/command/netstat.md +++ b/command/netstat.md @@ -1,169 +1,175 @@ -netstat -=== - -查看Linux中网络系统状态信息 - -## 补充说明 - -**netstat命令** 用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况。 - -### 语法 - -``` -netstat(选项) -``` - -### 选项 - -``` --a或--all:显示所有连线中的Socket; --A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址; --c或--continuous:持续列出网络状态; --C或--cache:显示路由器配置的快取信息; --e或--extend:显示网络其他相关信息; --F或--fib:显示FIB; --g或--groups:显示多重广播功能群组组员名单; --h或--help:在线帮助; --i或--interfaces:显示网络界面信息表单; --l或--listening:显示监控中的服务器的Socket; --M或--masquerade:显示伪装的网络连线; --n或--numeric:直接使用ip地址,而不通过域名服务器; --N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称; --o或--timers:显示计时器; --p或--programs:显示正在使用Socket的程序识别码和程序名称; --r或--route:显示Routing Table; --s或--statistice:显示网络工作信息统计表; --t或--tcp:显示TCP传输协议的连线状况; --u或--udp:显示UDP传输协议的连线状况; --v或--verbose:显示指令执行过程; --V或--version:显示版本信息; --w或--raw:显示RAW传输协议的连线状况; --x或--unix:此参数的效果和指定"-A unix"参数相同; ---ip或--inet:此参数的效果和指定"-A inet"参数相同。 -``` - -### 实例 - - **列出所有端口 (包括监听和未监听的)** - -``` -netstat -a #列出所有端口 -netstat -at #列出所有tcp端口 -netstat -au #列出所有udp端口 -``` - - **列出所有处于监听状态的 Sockets** - -``` -netstat -l #只显示监听端口 -netstat -lt #只列出所有监听 tcp 端口 -netstat -lu #只列出所有监听 udp 端口 -netstat -lx #只列出所有监听 UNIX 端口 -``` - - **显示每个协议的统计信息** - -``` -netstat -s 显示所有端口的统计信息 -netstat -st 显示TCP端口的统计信息 -netstat -su 显示UDP端口的统计信息 - -``` - - **在netstat输出中显示 PID 和进程名称** - -``` -netstat -pt -``` - -`netstat -p`可以与其它开关一起使用,就可以添加“PID/进程名称”到netstat输出中,这样debugging的时候可以很方便的发现特定端口运行的程序。 - - **在netstat输出中不显示主机,端口和用户名(host, port or user)** - -当你不想让主机,端口和用户名显示,使用`netstat -n`。将会使用数字代替那些名称。同样可以加速输出,因为不用进行比对查询。 - -``` -netstat -an -``` - -如果只是不想让这三个名称中的一个被显示,使用以下命令: - -``` -netsat -a --numeric-ports -netsat -a --numeric-hosts -netsat -a --numeric-users -``` - - **持续输出netstat信息** - -``` -netstat -c #每隔一秒输出网络信息 -``` - - **显示系统不支持的地址族(Address Families)** - -``` -netstat --verbose -``` - -在输出的末尾,会有如下的信息: - -``` -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. -netstat: no support for `AF NETROM' on this system. -``` - - **显示核心路由信息** - -``` -netstat -r -``` - -使用`netstat -rn`显示数字格式,不查询主机名称。 - - **找出程序运行的端口** - -并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。 - -``` -netstat -ap | grep ssh -``` - -找出运行在指定端口的进程: - -``` -netstat -an | grep ':80' -``` - - **显示网络接口列表** - -``` -netstat -i -``` - -显示详细信息,像是ifconfig使用`netstat -ie`。 - - **IP和TCP分析** - -查看连接某服务端口最多的的IP地址: - -``` -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各种状态列表: - -``` -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进程数,如果接近预设值,说明不够用,需要增加: - -``` -netstat -anpo | grep "php-cgi" | wc -l -``` - - - \ No newline at end of file +netstat +=== + +查看Linux中网络系统状态信息 + +## 补充说明 + +**netstat命令** 用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况。 + +### 语法 + +``` +netstat(选项) +``` + +### 选项 + +``` +-a或--all:显示所有连线中的Socket; +-A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址; +-c或--continuous:持续列出网络状态; +-C或--cache:显示路由器配置的快取信息; +-e或--extend:显示网络其他相关信息; +-F或--fib:显示FIB; +-g或--groups:显示多重广播功能群组组员名单; +-h或--help:在线帮助; +-i或--interfaces:显示网络界面信息表单; +-l或--listening:显示监控中的服务器的Socket; +-M或--masquerade:显示伪装的网络连线; +-n或--numeric:直接使用ip地址,而不通过域名服务器; +-N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称; +-o或--timers:显示计时器; +-p或--programs:显示正在使用Socket的程序识别码和程序名称; +-r或--route:显示Routing Table; +-s或--statistice:显示网络工作信息统计表; +-t或--tcp:显示TCP传输协议的连线状况; +-u或--udp:显示UDP传输协议的连线状况; +-v或--verbose:显示指令执行过程; +-V或--version:显示版本信息; +-w或--raw:显示RAW传输协议的连线状况; +-x或--unix:此参数的效果和指定"-A unix"参数相同; +--ip或--inet:此参数的效果和指定"-A inet"参数相同。 +``` + +### 实例 + + **列出所有端口 (包括监听和未监听的)** + +``` +netstat -a #列出所有端口 +netstat -at #列出所有tcp端口 +netstat -au #列出所有udp端口 +``` + + **列出所有处于监听状态的 Sockets** + +``` +netstat -l #只显示监听端口 +netstat -lt #只列出所有监听 tcp 端口 +netstat -lu #只列出所有监听 udp 端口 +netstat -lx #只列出所有监听 UNIX 端口 +``` + + **显示每个协议的统计信息** + +``` +netstat -s 显示所有端口的统计信息 +netstat -st 显示TCP端口的统计信息 +netstat -su 显示UDP端口的统计信息 + +``` + + **在netstat输出中显示 PID 和进程名称** + +``` +netstat -pt +``` + +`netstat -p`可以与其它开关一起使用,就可以添加“PID/进程名称”到netstat输出中,这样debugging的时候可以很方便的发现特定端口运行的程序。 + + **在netstat输出中不显示主机,端口和用户名(host, port or user)** + +当你不想让主机,端口和用户名显示,使用`netstat -n`。将会使用数字代替那些名称。同样可以加速输出,因为不用进行比对查询。 + +``` +netstat -an +``` + +如果只是不想让这三个名称中的一个被显示,使用以下命令: + +``` +netsat -a --numeric-ports +netsat -a --numeric-hosts +netsat -a --numeric-users +``` + + **持续输出netstat信息** + +``` +netstat -c #每隔一秒输出网络信息 +``` + + **显示系统不支持的地址族(Address Families)** + +``` +netstat --verbose +``` + +在输出的末尾,会有如下的信息: + +``` +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. +netstat: no support for `AF NETROM' on this system. +``` + + **显示核心路由信息** + +``` +netstat -r +``` + +使用`netstat -rn`显示数字格式,不查询主机名称。 + + **找出程序运行的端口** + +并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。 + +``` +netstat -ap | grep ssh +``` + +找出运行在指定端口的进程: + +``` +netstat -an | grep ':80' +``` + + **通过端口找进程ID** + +```bash +netstat -anp|grep 8081 | grep LISTEN|awk '{printf $7}'|cut -d/ -f1 +``` + + **显示网络接口列表** + +``` +netstat -i +``` + +显示详细信息,像是ifconfig使用`netstat -ie`。 + + **IP和TCP分析** + +查看连接某服务端口最多的的IP地址: + +``` +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各种状态列表: + +``` +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进程数,如果接近预设值,说明不够用,需要增加: + +``` +netstat -anpo | grep "php-cgi" | wc -l +``` + + + From f0e2eca5d1180ad971b52f05d938fdfdfc25e560 Mon Sep 17 00:00:00 2001 From: rgshare Date: Tue, 10 Jul 2018 13:48:22 +0800 Subject: [PATCH 0200/1284] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=94=99=E5=88=AB?= =?UTF-8?q?=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- command/cat.md | 88 +++++++++++++++++++++++++------------------------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/command/cat.md b/command/cat.md index e14a1137c9b..a7ff893b9d1 100644 --- a/command/cat.md +++ b/command/cat.md @@ -1,44 +1,44 @@ -cat -=== - -连接文件并打印到标准输出设备上 - -## 补充说明 - -**cat命令** 连接文件并打印到标准输出设备上,cat经常用来显示文件的内容,类似于下的type命令。 - -注意:当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容。因此,一般用more等命令分屏显示。为了控制滚屏,可以按Ctrl+S键,停止滚屏;按Ctrl+Q键可以恢复滚屏。按Ctrl+C(中断)键可以终止该命令的执行,并且返回Shell提示符状态。 - -### 语法 - -``` -cat(选项)(参数) -``` - -### 选项 - -``` --n或-number:有1开始对所有输出的行数编号; --b或--number-nonblank:和-n相似,只不过对于空白行不编号; --s或--squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行; --A:显示不可打印字符,行尾显示“$”; --e:等价于"-vE"选项; --t:等价于"-vT"选项; -``` - -### 参数 - -文件列表:指定要连接的文件列表。 - -### 实例 - -设ml和m2是当前目录下的两个文件 - -``` -cat m1 (在屏幕上显示文件ml的内容) -cat m1 m2 (同时显示文件ml和m2的内容) -cat m1 m2 > file (将文件ml和m2合并后放入文件file中) -``` - - - \ No newline at end of file +cat +=== + +连接文件并打印到标准输出设备上 + +## 补充说明 + +**cat命令** 连接文件并打印到标准输出设备上,cat经常用来显示文件的内容,类似于下的type命令。 + +注意:当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容。因此,一般用more等命令分屏显示。为了控制滚屏,可以按Ctrl+S键,停止滚屏;按Ctrl+Q键可以恢复滚屏。按Ctrl+C(中断)键可以终止该命令的执行,并且返回Shell提示符状态。 + +### 语法 + +``` +cat(选项)(参数) +``` + +### 选项 + +``` +-n或-number:从1开始对所有输出的行数编号; +-b或--number-nonblank:和-n相似,只不过对于空白行不编号; +-s或--squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行; +-A:显示不可打印字符,行尾显示“$”; +-e:等价于"-vE"选项; +-t:等价于"-vT"选项; +``` + +### 参数 + +文件列表:指定要连接的文件列表。 + +### 实例 + +设m1和m2是当前目录下的两个文件 + +``` +cat m1 (在屏幕上显示文件m1的内容) +cat m1 m2 (同时显示文件m1和m2的内容) +cat m1 m2 > file (将文件m1和m2合并后放入文件file中) +``` + + + From 69b356469b5e883a85a84017507aaa3242475175 Mon Sep 17 00:00:00 2001 From: rgshare Date: Tue, 10 Jul 2018 13:53:30 +0800 Subject: [PATCH 0201/1284] Update cat.md --- command/cat.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/command/cat.md b/command/cat.md index a7ff893b9d1..99b18d12cd7 100644 --- a/command/cat.md +++ b/command/cat.md @@ -18,7 +18,7 @@ cat(选项)(参数) ### 选项 ``` --n或-number:从1开始对所有输出的行数编号; +-n或--number:从1开始对所有输出的行数编号; -b或--number-nonblank:和-n相似,只不过对于空白行不编号; -s或--squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行; -A:显示不可打印字符,行尾显示“$”; From 37846faeb1fe19f8577e874cad3893c390d8544d Mon Sep 17 00:00:00 2001 From: Shane King Date: Sun, 15 Jul 2018 20:43:31 +0800 Subject: [PATCH 0202/1284] =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E9=A1=BA=E5=BA=8F?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E6=96=B0=E5=A2=9E-i=E5=8F=82=E6=95=B0?= =?UTF-8?q?=EF=BC=8C=E5=B9=B6=E5=88=97=E4=B8=BE=E4=BA=9A=E9=A9=AC=E9=80=8A?= =?UTF-8?q?=E4=BA=91=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 比较喜欢该项目,希望越做越好! --- command/scp.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/command/scp.md b/command/scp.md index fed4f817e58..0b142882d2d 100644 --- a/command/scp.md +++ b/command/scp.md @@ -23,6 +23,7 @@ scp(选项)(参数) -B:以批处理模式运行; -C:使用压缩; -F:指定ssh配置文件; +-i:identity_file 从指定文件中读取传输时使用的密钥文件(例如亚马逊云pem),此参数直接传递给ssh; -l:指定宽带限制; -o:指定使用的ssh选项; -P:指定远程主机的端口号; @@ -48,6 +49,13 @@ scp root@10.10.10.10:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/ 从10.10.10.10机器上的`/opt/soft/`的目录中下载nginx-0.5.38.tar.gz 文件到本地`/opt/soft/`目录中。 +**从亚马逊云复制OpenVPN到本地目录** + +``` +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安装文件到本地当前目录来。 + **从远处复制到本地** ``` From 4a2e116354873fc8f952ddc18e0cac94f8406679 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Sat, 28 Jul 2018 15:52:48 +0800 Subject: [PATCH 0203/1284] Update comm.md #30 --- command/comm.md | 40 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/command/comm.md b/command/comm.md index 1e9c062075e..05771410efd 100644 --- a/command/comm.md +++ b/command/comm.md @@ -66,7 +66,14 @@ ttt jjj ``` -两个文件之间的比较,如果没有排序需要带上`--nocheck-order`参数 +两个文件之间的比较,如果没有排序需要带上`--nocheck-order`参数, 没有带上参数将会收到提示,此命令重要之功能在于比较。 + +```bash +comm: 文件2 没有被正确排序 +comm: 文件1 没有被正确排序 +``` + +比较结果 ``` [root@localhost text]# comm --nocheck-order aaa.txt bbb.txt @@ -86,7 +93,32 @@ eee 输出的第一列只包含在aaa.txt中出现的行,第二列包含在bbb.txt中出现的行,第三列包含在aaa.txt和bbb.txt中相同的行。各列是以制表符(\t)作为定界符。 - **交集** +### 有序比较 + +有序比较,先通过 sort 将文件内容排序 + +``` +[root@localhost ~]# sort aaa.txt > aaa1.txt +[root@localhost ~]# sort bbb.txt > bbb1.txt +``` + +有序比较结果: + +``` +[root@localhost ~]# comm aaa1.txt bbb1.txt +111 +222 + aaa + bbb + ccc +ddd +eee + hhh + jjj + ttt +``` + +### 交集 打印两个文件的交集,需要删除第一列和第二列: @@ -96,7 +128,7 @@ bbb ccc ``` - **求差** +**求差** 打印出两个文件中不相同的行,需要删除第三列: @@ -115,7 +147,7 @@ jjj `sed 's/^\t//'` 是将制表符`\t`删除,以便把两列合并成一列。 - **差集** +### 差集 通过删除不需要的列,可以得到aaa.txt和bbb.txt的差集: From 5b1641c996892f53ff283caa25621cf20e0bac10 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Fri, 14 Sep 2018 22:17:51 +0800 Subject: [PATCH 0204/1284] Support windows system compilation. #51 --- build/compile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/compile.js b/build/compile.js index 594a6866c94..82b88692f4c 100644 --- a/build/compile.js +++ b/build/compile.js @@ -273,7 +273,7 @@ function CreateDatajs(dt_path,callback){ // 命令名称 json["n"] = title; // 命令路径 - json["p"] = md_path.replace(/\.md$/,'').replace(path_md,''); + json["p"] = md_path.replace(/\.md$/, '').replace(path_md, '').replace(/\\/g, '/'); // 命令描述 var des = str.match(/\n==={1,}([\s\S]*?)##/i); if (!des) { From 683713f4b71c06206ce639926e9faae5122666ed Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Fri, 14 Sep 2018 23:33:13 +0800 Subject: [PATCH 0205/1284] Fix #51 search path issue. --- template/js/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/template/js/index.js b/template/js/index.js index b10bce75226..b4f2484b3a2 100644 --- a/template/js/index.js +++ b/template/js/index.js @@ -11,7 +11,7 @@ this.root_path = (function(){ var elm_path = $$('current_path'); var url = window.location.origin+window.location.pathname; - return elm_path?url.replace(elm_path.value,'').replace(/\/$/,''):''; + return elm_path ? url.replace(/\/c\/\w+\.html/, '').replace(/\/$/,''):''; })(); this.query = ''; // From 17c1c49ab66163ef55ebb08ca79e6acb3ab532b3 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Sat, 15 Sep 2018 15:20:09 +0800 Subject: [PATCH 0206/1284] Fix #51 search root path issue. --- template/js/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/template/js/index.js b/template/js/index.js index b4f2484b3a2..25282bac719 100644 --- a/template/js/index.js +++ b/template/js/index.js @@ -11,7 +11,7 @@ this.root_path = (function(){ var elm_path = $$('current_path'); var url = window.location.origin+window.location.pathname; - return elm_path ? url.replace(/\/c\/\w+\.html/, '').replace(/\/$/,''):''; + return elm_path ? url.replace(/\/(c\/)?\w+\.html/, '').replace(/\/$/, '') : ''; })(); this.query = ''; // From 8ba8a48989a2be0a1e47322880d8df78c088930b Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Thu, 27 Sep 2018 01:49:11 +0800 Subject: [PATCH 0207/1284] Modify website styles. --- template/footer.ejs | 2 +- template/styl/index.styl | 521 ++++++++++++++-------------- template/styl/mixins/css.styl | 19 + template/styl/mixins/highlight.styl | 53 --- template/styl/mixins/markdown.styl | 372 +++++++++++--------- template/styl/mixins/reset.styl | 20 +- 6 files changed, 499 insertions(+), 488 deletions(-) create mode 100644 template/styl/mixins/css.styl delete mode 100644 template/styl/mixins/highlight.styl diff --git a/template/footer.ejs b/template/footer.ejs index 35c68d9e9a5..130a354720f 100644 --- a/template/footer.ejs +++ b/template/footer.ejs @@ -2,7 +2,7 @@ 收藏本站请使用Ctrl+D或者Command+d
添加命令 | - 命令列表 | + 命令列表 | Chrome 插件
共搜集到 diff --git a/template/styl/index.styl b/template/styl/index.styl index f4a0d2212f7..fdcb2bcdb53 100644 --- a/template/styl/index.styl +++ b/template/styl/index.styl @@ -1,314 +1,311 @@ @import('mixins/reset.styl') -@import('mixins/highlight.styl') +@import('mixins/css.styl') @import('mixins/markdown.styl') mq-mobile = "screen and (max-width: 479px)" a.github-corner { - position fixed - z-index 9999 + position: fixed + z-index: 9999 + top: 0 + right: 0 + &:hover { + .octo-arm{ + animation: octocat-wave 560ms ease-in-out + } + } + svg { + fill #f1f1f1 + color #000 + position absolute top 0 + border 0 right 0 - &:hover{ - .octo-arm{ - animation:octocat-wave 560ms ease-in-out - } - } - svg{ - fill #f1f1f1 - color #000 - position absolute - top 0 - border 0 - right 0 - z-index 99 - width 70px - height 70px - } + z-index 99 + width 70px + height 70px + } } -a{ - transition: all .2s ease-in +a { + transition: all .2s ease-in } @keyframes octocat-wave{ - 0%,100%{-webkit-transform:rotate(0);transform:rotate(0)} - 20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)} - 40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)} + 0%,100%{-webkit-transform:rotate(0);transform:rotate(0)} + 20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)} + 40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)} } -.header{ - width 517px - margin 0 auto 0 - padding 0 10px - .logo{ - text-align center - padding-top 50px - padding-bottom 50px +.header { + width 517px + margin 0 auto 0 + padding 0 10px + .logo { + text-align center + padding-top 50px + padding-bottom 50px + } + .box{ + position relative + } + .search { + min-height 20px + position relative + display table + border-collapse separate + li,ul { + list-style none } - .box{ - position relative + #result { + .ok { + background:#f4f4f4; + } } - .search{ - min-height 20px - position relative - display table - border-collapse separate - li,ul{ - list-style none + .search-list { + position absolute + display none + z-index 999 + box-shadow 1px 1px 3px #ededed + border 1px solid #d5d5d5 + background #fff + min-width 100px + top 39px + width 100% + padding 5px + border-radius 5px 5px 5px 5px + li{ + line-height 23px + span{ + padding 0 8px + color #b9b9b9 } - #result{ - .ok{ - background:#f4f4f4; - } + } + a { + display block + padding 2px 6px 2px 6px + color #555555 + &:hover { + background-color #f2f2f2 } - .search-list{ - position absolute - display none - z-index 999 - box-shadow 1px 1px 3px #ededed - border 1px solid #d5d5d5 - background #fff - min-width 100px - top 39px - width 100% - padding 5px - border-radius 5px 5px 5px 5px - li{ - line-height 23px - span{ - padding 0 8px - color #b9b9b9 - } - } - a{ - display block - padding 2px 6px 2px 6px - color #555555 - &:hover{ - background-color #f2f2f2 - } - .kw{ - color #f00 - font-style inherit - font-weight bold - } - } + .kw { + color #f00 + font-style inherit + font-weight bold } - .query,.enter-input{ - display table-cell - transition border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s + } + } + .query, .enter-input { + display table-cell + transition border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s + } + .query { + resize: none; + position relative + z-index 2 + width 100% + height 40px + padding 6px 12px + font-size 14px + font-weight bold + line-height 1.42857143 + color #555 + background-color #fff + background-image none + border 1px solid $border-color + border-radius 5px 0 0 5px + -webkit-appearance: none; + &:focus { + z-index 99 + border-color #66afe9 + outline 0 + box-shadow inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6) + } + } + .enter-input { + width 1% + white-space nowrap + vertical-align middle + button { + margin 0 + left -1px + position relative + z-index 5 + display inline-block + padding 9px 23px + font-size 14px + font-weight bold + line-height 1.42857143 + text-align center + text-rendering auto + white-space nowrap + vertical-align middle + touch-action manipulation + cursor pointer + user-select none + background-image none + background-color #fff + border 1px solid transparent + border-collapse separate + border-radius 0 5px 5px 0 + border-color $border-color + color #333 + &:focus,&:active:focus{ + outline thin dotted + outline 5px auto -webkit-focus-ring-color + outline-offset -2px } - .query{ - resize: none; - position relative - z-index 2 - width 100% - height 40px - padding 6px 12px - font-size 14px - font-weight bold - line-height 1.42857143 - color #555 - background-color #fff - background-image none - border 1px solid $border-color - border-radius 5px 0 0 5px - -webkit-appearance: none; - &:focus{ - z-index 99 - border-color #66afe9 - outline 0 - box-shadow inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6) - } + &:active{ + color #333 + background-color #e6e6e6 + border-color #b4b4b4 + background-image none + box-shadow inset 0 8px 32px -8px rgba(0,0,0,0.3) } - .enter-input{ - width 1% - white-space nowrap - vertical-align middle - button{ - margin 0 - left -1px - position relative - z-index 5 - display inline-block - padding 9px 23px - font-size 14px - font-weight bold - line-height 1.42857143 - text-align center - text-rendering auto - white-space nowrap - vertical-align middle - touch-action manipulation - cursor pointer - user-select none - background-image none - background-color #fff - border 1px solid transparent - border-collapse separate - border-radius 0 5px 5px 0 - border-color $border-color - color #333 - &:focus,&:active:focus{ - outline thin dotted - outline 5px auto -webkit-focus-ring-color - outline-offset -2px - } - &:active{ - color #333 - background-color #e6e6e6 - border-color #b4b4b4 - background-image none - box-shadow inset 0 8px 32px -8px rgba(0,0,0,0.3) - } - &:focus{ - color #333 - background-color #e6e6e6 - border-color #999 - text-decoration none - } - &:hover{ - color #333 - background-color #e6e6e6 - border-color #b4b4b4 - } - } + &:focus{ + color #333 + background-color #e6e6e6 + border-color #999 + text-decoration none } + &:hover{ + color #333 + background-color #e6e6e6 + border-color #b4b4b4 + } + } } + } } .footer{ - text-align center - padding-top 31px - color #616161 - font-size 14px - font-weight 300 - border-top: 1px solid #efefef; - padding-bottom: 50px; - &.footer_index { - border-top: 0 - } + text-align center + padding-top 31px + color #616161 + font-size 14px + font-weight 300 + border-top: 1px solid #efefef; + padding-bottom: 50px; + &.footer_index { + border-top: 0 + } } -.header.header_list{ - width auto - position fixed - width 100% - background #fff - z-index 99 +.header.header_list { + width auto + position fixed + width 100% + background #fff + z-index 99 } .header_list{ - padding 10px 10px 10px 13px - border-bottom 1px solid #EEEEEE - .logo{ - float left - padding-top 3px - padding-bottom 0 - padding-right 24px - text-align left - svg{ - height 37px - width 136px - } - } - .search{ - max-width 517px - } - .footer{ - display none + padding 10px 10px 10px 13px + border-bottom 1px solid #EEEEEE + .logo{ + float left + padding-top 3px + padding-bottom 0 + padding-right 24px + text-align left + svg{ + height 37px + width 136px } + } + .search{ + max-width 517px + } + .footer{ + display none + } } .search_list{ - padding 79px 27px - a{ - font-size 16px - strong{ - font-weight bold - } - .kw{ - color #f00 - font-style inherit - font-weight bold - } - &:hover{ - .kw{ - color #333 - } - } + padding 79px 27px + a{ + font-size 16px + strong{ + font-weight bold } - li{ - padding 10px 0 10px 0 - list-style-type none - p{ - padding-top 5px - color #4F4F4F - } + .kw{ + color #f00 + font-style inherit + font-weight bold } - + &:hover{ + .kw{ + color #333 + } + } + } + li{ + padding 10px 0 10px 0 + list-style-type none + p { + padding-top 5px + color #4F4F4F + } + } } .hotlist{ - padding 79px 27px - a{ - font-size 16px - strong{ - font-weight bold - } - &:hover{ - } + padding 79px 27px + a{ + font-size 16px + strong{ + font-weight bold } - li{ - padding 5px 0 5px 0 - list-style-type none - p{ - padding-top 5px - color #4F4F4F - } + &:hover{ } + } + li{ + padding 5px 0 5px 0 + list-style-type none + p{ + padding-top 5px + color #4F4F4F } - + } } @media mq-mobile{ - .header{ - width inherit - .search .enter-input { - button{ - padding: 9px 14px; - } - } + .header{ + width inherit + .search .enter-input { + button{ + padding: 9px 14px; + } } - .header_list{ - .logo svg{ - width 96px - } - .search { - .query{ - line-height 31px - } - } + } + .header_list{ + .logo svg{ + width 96px } - .header_list .logo{ - float inherit - padding-right 10px - padding-top 8px - padding-bottom 14px - text-align center - } - div.markdown-body{ - padding: 10px 10px 10px 13px; - } - div.markdown-body .edit_btn + *{ - margin-top: 0 !important; + .search { + .query{ + line-height 31px + } } - div.markdown-body .edit_btn{ - top: 9px; - a{ - background #f1f1f1 - color #a3a3a3 - } + } + .header_list .logo{ + float inherit + padding-right 10px + padding-top 8px + padding-bottom 14px + text-align center + } + div.markdown-body{ + padding: 10px 10px 10px 13px; + } + div.markdown-body .edit_btn + *{ + margin-top: 0 !important; + } + div.markdown-body .edit_btn{ + top: 9px; + a{ + background #f1f1f1 + color #a3a3a3 } + } } \ No newline at end of file diff --git a/template/styl/mixins/css.styl b/template/styl/mixins/css.styl new file mode 100644 index 00000000000..c7802b23d1f --- /dev/null +++ b/template/styl/mixins/css.styl @@ -0,0 +1,19 @@ +.language-css, +.language-styl, +.language-less, +.language-scss, +.language-sass { + color: #005cc5; + .punctuation { + color: #24292e; + } + .selector { + color: #6749BA; + } + .property { + color: #005cc5; + } + .atrule { + color: #d73a49; + } +} \ No newline at end of file diff --git a/template/styl/mixins/highlight.styl b/template/styl/mixins/highlight.styl deleted file mode 100644 index d3a46694977..00000000000 --- a/template/styl/mixins/highlight.styl +++ /dev/null @@ -1,53 +0,0 @@ -.hljs{ - display:block;overflow-x:auto;padding:0.5em;color:#333;background:#f8f8f8 -} -.hljs-quote{ - font-style:italic; -} -.hljs-comment,.hljs-quote{ - color:#998; -} -.hljs-keyword,.hljs-selector-tag,.hljs-subst{ - color:#333;font-weight:bold -} -.hljs-number,.hljs-literal,.hljs-variable,.hljs-template-variable,.hljs-tag .hljs-attr{ - color:#008080 -} -.hljs-string,.hljs-doctag{ - color:#d14 -} -.hljs-title,.hljs-section,.hljs-selector-id{ - color:#900;font-weight:bold -} -.hljs-subst{ - font-weight:normal -} -.hljs-type,.hljs-class .hljs-title{ - color:#458;font-weight:bold -} -.hljs-tag,.hljs-name,.hljs-attribute{ - color:#000080;font-weight:normal -} -.hljs-regexp,.hljs-link{ - color:#009926 -} -.hljs-symbol,.hljs-bullet{ - color:#990073 -} -.hljs-built_in,.hljs-builtin-name{ - color:#0086b3 -} -.hljs-meta{ - color:#999;font-weight:bold -} -.hljs-deletion{ - background:#fdd -} -.hljs-addition{ - background:#dfd -} -.hljs-emphasis{ - font-style:italic -} -.hljs-strong{ - font-weight:bold} \ No newline at end of file diff --git a/template/styl/mixins/markdown.styl b/template/styl/mixins/markdown.styl index 925bcd9dcf0..ca78d37b459 100644 --- a/template/styl/mixins/markdown.styl +++ b/template/styl/mixins/markdown.styl @@ -1,164 +1,212 @@ -div.markdown-body - .edit_btn{ - position relative - right 0 - float right - top 48px - z-index 2 - .split{ - display inline-block - height 13px - vertical-align middle - width 1px - border-left 1px solid #dfdfdf - margin -1px 0 0 0 - } - a{ - text-decoration none - background #2196F3 - color #fff - border-radius 3px - padding 2px 5px - &:hover{ - color #333 - background #e6e6e6 - } - } +.markdown-body { + padding 70px 35px 30px 35px + word-wrap break-word + font-family "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif + font-size 14px + line-height 1.6 + color #333 + @media mq-mobile { + padding-right 0 + } + .edit_btn { + position relative + right 0 + float right + top 48px + z-index 2 + .split { + display inline-block + height 13px + vertical-align middle + width 1px + border-left 1px solid #dfdfdf + margin -1px 0 0 0 } - padding 70px 35px 30px 35px - word-wrap break-word - font-family "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif - font-size 14px - line-height 1.6 - color #333 - @media mq-mobile - padding-right 0 - &>*:first-child - margin-top 0 !important - strong - font-weight bold - hr - border-top 1px solid #CACACA - border-width 1px 0 0 0 - em - font-style italic - img - max-width 100% - h1,h2,h3,h4,h5,h6 - position relative - margin-top 1em - margin-bottom 16px - font-weight bold - line-height 1.4 - a - display none - &:hover a - display inline - color #000 - font-size 85% - h1,h2 - border-bottom 1px solid #eee - h1 - font-size 2.25em - line-height 1.2 - padding-bottom 0.3em - h2 - padding-bottom 0.3em - font-size 1.50em - line-height 1.225 - // border-bottom:1px solid #DEDEDE - blockquote - padding 0 15px - color #777 - border-left 4px solid #ddd - margin 0; - &>:last-child - margin-bottom 0 - &>:first-child - margin-top 0 - p,blockquote,ul,ol,dl,table,pre - margin-top 0; - margin-bottom 16px - ul,ol - padding-left 1.4em - list-style:initial - ol - list-style-type decimal - ol ol, ul ol - list-style-type lower-roman - ul ul ol, ul ol ol, ol ul ol, ol ol ol - list-style-type lower-alpha - pre - margin-top: 1.5em - margin-bottom: 1.5em - line-height: 1.3 - word-break: break-all - word-wrap: break-word - color: rgb(51, 51, 51) - border: none - position: relative - background-color #f7f7f9 - border-radius 3px - font "Source Code Pro", Consolas, Menlo, Monaco, "Courier New", monospace - font-size 0.93em - -webkit-overflow-scrolling touch - code - padding: 0.7em - overflow: auto - max-height: 35em - background-color transparent - color inherit - line-height 1.4 - display block - font-size 0.93em - box-sizing: border-box - border-radius: 0px - white-space: inherit - overflow-wrap: normal - word-wrap:normal!important - font: 12px "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; - // code:before,code:after,tt:before,tt:after - // letter-spacing 0 - // content "" - code,tt - padding 0 - padding-bottom 2px - margin 0 3px - vertical-align top - background-color #EDEDF7 - border-radius 4px - padding-left 3px - padding-right 3px - font-size 14px - color #6F5990 - padding-top 2px - // code:before,code:after,tt:before,tt:after - // content "\00a0" - // vertical-align text-top - // display inline-block - // width 0px - table - width 100% - border-collapse collapse - border-spacing 0 - max-width 100% - display block - background-color transparent - th,td - border 1px solid #ddd - padding 4px 10px - th - font-weight bold - background #F3F3F3 - tr:nth-child(2n) - background-color #f8f8f8 - tbody - background #fff - -// markdown 增强样式 -.markdown-body - .task-list-item - padding 0 - li - list-style-type none \ No newline at end of file + a { + text-decoration none + background #2196F3 + color #fff + border-radius 3px + padding 2px 5px + &:hover{ + color #333 + background #e6e6e6 + } + } + } + + pre { + margin-top: 1.5em + margin-bottom: 1.5em + line-height: 1.3 + word-break: break-all + word-wrap: break-word + color: rgb(51, 51, 51) + border: none + position: relative + background-color: #f7f7f9 + border-radius: 3px + font: "Source Code Pro", Consolas, Menlo, Monaco, "Courier New", monospace + font-size: 0.93em + -webkit-overflow-scrolling: touch + code { + padding: 0.7em + overflow: auto + max-height: 35em + background-color transparent + color inherit + line-height 1.4 + display block + font-size 0.93em + box-sizing: border-box + border-radius: 0px + white-space: inherit + overflow-wrap: normal + word-wrap: normal!important + } + } + .class-name { + color: #000896; + } + .comment, + .quote { + color: #998; + } + + .keyword, + .selector-tag, + .subst { + color: #d73a49; + } + + .key, + .number, + .literal, + .variable, + .template-variable, + .tag .attr { + color: #008080; + } + + .string, .doctag { + color: #0065da; + } + + .title, + .section, + .selector-id { + color: #900; + font-weight: bold; + } + + .subst { + font-weight: normal; + } + + .type, + .class .title { + color: #458; + font-weight: bold; + } + + .function, .operator { + color: #000bc5; + } + .tag, + .name, + .attribute { + color: #002ade; + font-weight: normal; + } + + .url { + color: #3c04ff; + } + + .boolean { + color: #005cc5; + } + + .property { + color: #032f62; + } + + .null, .selector { + color: #005cc5; + } + + .constant { + color: #d73a49; + } + + .punctuation { + color: #A595A5; + } + .attr-name { + color: #8F4919; + } + .attr-value { + color: #13239F; + } + .tag { + .punctuation { + color: #A595A5; + } + .attr-name { + color: #8F4919; + } + .attr-value { + color: #13239F; + } + .attr-value .punctuation, + .script-punctuation { + color: #A595A5; + } + .script .keyword { + color: #090080; + } + .language-javascript { + color: #6f42c1; + } + } + + .regexp, .regex, + .link { + color: #009926; + } + + .symbol, + .bullet { + color: #990073; + } + + .built_in, + .builtin-name { + color: #0086b3; + } + + .meta { + color: #999; + font-weight: bold; + } + + .deletion { + background: #fdd; + } + + .addition { + background: #dfd; + } + + .emphasis { + font-style: italic; + } + + .strong { + font-weight: bold; + } + .shebang, .important { + color: #FF1717; + } +} \ No newline at end of file diff --git a/template/styl/mixins/reset.styl b/template/styl/mixins/reset.styl index 56f43e43945..8c5aca08bb7 100644 --- a/template/styl/mixins/reset.styl +++ b/template/styl/mixins/reset.styl @@ -1,22 +1,22 @@ body,html,ul,li,p{ - margin 0 - padding 0 + margin 0 + padding 0 } body,html{ - font-size 12px - font-family 'HanHei SC','PingFang SC','Helvetica Neue','Helvetica','STHeitiSC-Light','Arial',sans-serif + font-size 12px + font-family 'HanHei SC','PingFang SC','Helvetica Neue','Helvetica','STHeitiSC-Light','Arial',sans-serif } html{ - -webkit-tap-highlight-color rgba(0,0,0,0) + -webkit-tap-highlight-color rgba(0,0,0,0) } a { - text-decoration none - &:hover{ - color #333 - } + text-decoration none + &:hover{ + color #333 + } } * { - box-sizing border-box + box-sizing border-box } $border-color = #D5D5D5 \ No newline at end of file From 8df9b8908f4b2721492a9da7a264acd57da600d7 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Thu, 27 Sep 2018 01:50:30 +0800 Subject: [PATCH 0208/1284] Refactor the build script. --- build/build.js | 306 +++++++ build/compile.js | 396 ---------- build/crawler.js | 160 ---- build/deploy.js | 43 +- dist/data.json | 2 +- package-lock.json | 1926 +++++++++------------------------------------ package.json | 31 +- 7 files changed, 698 insertions(+), 2166 deletions(-) create mode 100644 build/build.js delete mode 100644 build/compile.js delete mode 100644 build/crawler.js diff --git a/build/build.js b/build/build.js new file mode 100644 index 00000000000..360e0b4c8cf --- /dev/null +++ b/build/build.js @@ -0,0 +1,306 @@ +const path = require('path'); +const ejs = require('ejs'); +const FS = require('fs-extra'); +const marked = require('marked'); +const stylus = require('stylus'); +const Prism = require('prismjs'); +const loadLanguages = require('prismjs/components/'); +const UglifyJS = require("uglify-js"); +const colors = require('colors-cli/toxic'); + +const renderer = new marked.Renderer(); +renderer.heading = (text, level) => { + if (/[\u4E00-\u9FA5]/i.test(text)) { + return '' + text + ''; + } else { + var escapedText = text.toLowerCase().replace(/[^\w]+/g, '-'); + return '' + text + ''; + } +} + +marked.setOptions({ + renderer: renderer, + gfm: true, + tables: true, + breaks: false, + pedantic: false, + sanitize: false, + smartLists: true, + smartypants: false, + highlight: (code, lang, callback) => { + if (/(tex)$/.test(lang)) lang = 'latex'; + if (/(h)$/.test(lang)) lang = 'c'; + if (/(js)$/.test(lang)) lang = 'javascript'; + if (/(tsx)$/.test(lang)) lang = 'jsx'; + if (/(bat)$/.test(lang)) lang = 'batch'; + if (/(py)$/.test(lang)) lang = 'python'; + if (/(rb)$/.test(lang)) lang = 'ruby'; + if (/(gitconfig|editorconfig|gitmodules)$/.test(lang)) lang = 'ini'; + if (/(yml)$/.test(lang)) lang = 'yaml'; + if (/(styl)$/.test(lang)) lang = 'stylus'; + if (/(stylelintrc|postcssrc)$/.test(lang)) lang = 'json'; + if (/(sh|shell|bash|bats|cgi|command|fcgi|ksh|sh.in|tmux|tool|zsh|bash_history|bash_logout|bash_profile|bashrc|cshrc|login|profile|zlogin|zlogout|zprofile|zshenv|zshrc)$/.test(lang)) lang = 'bash'; + if (/(ps1|psm1)$/.test(lang)) lang = 'powershell'; + if (/^(html|htm|xml|ejs)/.test(lang)) lang = 'html'; + lang = lang ? lang : 'bash'; + loadLanguages([lang]); + let html = code; + if (Prism.languages[lang]) { + html = Prism.highlight(code, Prism.languages[lang], lang); + } + return callback('', html); + } +}); + +const deployDir = path.resolve(process.cwd(), '.deploy'); +const faviconPath = path.resolve(process.cwd(), 'template', 'img', 'favicon.ico'); +const rootIndexJSPath = path.resolve(process.cwd(), 'template', 'js', 'index.js'); +const dataJsonPath = path.resolve(process.cwd(), 'dist', 'data.json'); +const cssPath = path.resolve(deployDir, 'css', 'index.css'); + +let markdownIndexData = []; + +mkdirs(deployDir) + .then(dir => emptyDir(dir)) + .then(dir => { + ensureDir(path.resolve(dir, 'img')); + ensureDir(path.resolve(dir, 'js')); + ensureDir(path.resolve(dir, 'css')); + ensureDir(path.resolve(dir, 'c')); + }) + .then(() => FS.copySync(faviconPath, path.resolve(deployDir, 'img', 'favicon.ico'))) + .then(() => FS.readFileSync(rootIndexJSPath)) + .then((data) => { + FS.outputFileSync(path.resolve(deployDir, 'js', 'index.js'), UglifyJS.minify(data.toString()).code) + }) + .then(dir => readMarkdownPaths(path.resolve(process.cwd(), 'command'))) + .then(dirs => createDataJSON(dirs)) + .then(data => { + FS.outputFileSync(dataJsonPath, JSON.stringify(data.json)); + FS.outputFileSync(path.resolve(deployDir, 'js', 'dt.js'), `var linux_commands=${JSON.stringify(data.data)}`); + markdownIndexData = data.data; + }) + .then(() => createTmpToHTML( + path.resolve(process.cwd(), 'template', 'index.ejs'), + path.resolve(deployDir, 'index.html'), + { + p: '/index.html', + n: 'Linux命令搜索引擎', + d: '最专业的Linux命令大全,内容包含Linux命令手册、详解、学习,值得收藏的Linux命令速查手册。', + command_length: markdownIndexData.length + } + )) + .then(() => createTmpToHTML( + path.resolve(process.cwd(), 'template', 'list.ejs'), + path.resolve(deployDir, 'list.html'), + { + p: '/list.html', + n: '搜索', + d: '最专业的Linux命令大全,命令搜索引擎,内容包含Linux命令手册、详解、学习,值得收藏的Linux命令速查手册。', + command_length: markdownIndexData.length + } + )) + .then(() => createTmpToHTML( + path.resolve(process.cwd(), 'template', 'hot.ejs'), + path.resolve(deployDir, 'hot.html'), + { + p: '/hot.html', + n: '搜索', + d: '最专业的Linux命令大全,命令搜索引擎,内容包含Linux命令手册、详解、学习,值得收藏的Linux命令速查手册。', + arr: markdownIndexData, + command_length: markdownIndexData.length + } + )) + .then(() => { + markdownIndexData.forEach(async (item, idx) => { + item.command_length = markdownIndexData.length; + await createTmpToHTML( + path.resolve(process.cwd(), 'template', 'details.ejs'), + path.resolve(deployDir, 'c', `${item.n}.html`), + item, + path.resolve(process.cwd(), 'command'), + ); + }) + }) + .then(() => { + return createStylToCss( + path.resolve(process.cwd(), 'template', 'styl', 'index.styl'), + path.resolve(deployDir, 'css', 'index.css'), + ); + }) + .then((css) => FS.outputFileSync(cssPath, css)) + .then(() => console.log(` ${'→'.green} ${markdownIndexData.length}`)) + .catch((err) => { + if (err && err.message) { + console.log(`\n ERROR :> ${err.message.red_bt}\n`) + } + }); + +/** + * Create a directory + * @param {String} dir + */ +function mkdirs(dir) { + return new Promise((resolve, reject) => { + FS.ensureDir(dir, err => { + err ? reject(err) : resolve(dir); + }) + }); +} + +/** + * Empty a directory + * @param {String} dir + */ +function emptyDir(dir) { + return new Promise((resolve, reject) => { + FS.emptyDir(dir, err => { + err ? reject(err) : resolve(dir); + }) + }); +} + +/** + * Ensures that the directory exists. + * @param {String} dir + */ +function ensureDir(dir) { + return new Promise((resolve, reject) => { + try { + FS.ensureDirSync(dir); + resolve(dir); + } catch (err) { + reject(err); + } + }); +} + +/** + * [createStylToCss 生成CSS] + * @param {[type]} stylPath stylus path + * @param {[type]} cssPath css path + */ +function createStylToCss(stylPath) { + return new Promise((resolve, reject) => { + try { + const stylStr = FS.readFileSync(stylPath, 'utf8'); + stylus(stylStr.toString()) + .set('filename', stylPath) + .set('compress', true) + .render((err, css) => { + if (err) throw err; + resolve(css); + }); + } catch (err) { + reject(err); + } + }); +} + +/** + * + * @param {String} fromPath ejs path + * @param {String} toPath html path + */ +function createTmpToHTML(fromPath, toPath, desJson, mdPath) { + return new Promise((resolve, reject) => { + try { + let relative_path = ''; + const current_path = toPath.replace(new RegExp(`${deployDir}`), ''); + const tmpStr = FS.readFileSync(fromPath); + let mdPathName = ''; + if (mdPath) { + // CSS/JS 引用相对地址 + relative_path = '../'; + mdPathName = `/command/${desJson.n}.md`; + } + // 生成 HTML + let html = ejs.render(tmpStr.toString(), { + filename: fromPath, + relative_path, // 当前文件相对于根目录的相对路径 + md_path: mdPathName || '', // markdown 路径 + current_path, // 当前 html 路径 + describe: desJson ? desJson : {}, // 当前 md 的描述 + }, { filename: fromPath }); + + if (mdPath) { + const READMESTR = FS.readFileSync(path.resolve(mdPath, `${desJson.n}.md`)); + marked(READMESTR.toString(), (err, mdhtml) => { + if (err) return reject(err); + html = html.replace(/{{content}}/, mdhtml); + FS.outputFileSync(toPath, html); + console.log(` ${'→'.green} ${toPath.replace(process.cwd(), '')}`); + resolve(html); + }); + } else { + FS.outputFileSync(toPath, html); + console.log(` ${'→'.green} ${toPath.replace(process.cwd(), '')}`); + resolve(html); + } + } catch (err) { + reject(err); + } + }); +} + +/** + * Ensures that the directory exists. + * @param {String} pathArr + */ +function createDataJSON(pathArr) { + return new Promise((resolve, reject) => { + try { + const commandData = {}; + const indexes = []; + pathArr.forEach((mdPath, i) => { + const json = {} + const con = FS.readFileSync(mdPath); + const str = con.toString(); + let title = str.match(/[^===]+(?=[===])/g); + title = title[0] ? title[0].replace(/\n/g, '') : title[0]; + title = title.replace(/\r/, '') + // 命令名称 + json["n"] = title; + // 命令路径 + json["p"] = `/${path.basename(mdPath, '.md').replace(/\\/g, '/')}`; + // 命令描述 + let des = str.match(/\n==={1,}([\s\S]*?)##/i); + if (!des) { + throw `格式错误: ${mdPath}`; + } + des = des[1] ? des[1].replace(/\n/g, '') : des[1]; + des = des.replace(/\r/g, '') + json["d"] = des; + indexes.push(json); + commandData[title] = json; + }) + resolve({ + json: commandData, + data: indexes + }); + } catch (err) { + reject(err); + } + }); +} + +/** + * 返回 MD 所有路径的 Array + * @param {String} filepath + */ +function readMarkdownPaths(filepath) { + return new Promise((resolve, reject) => { + try { + let pathAll = []; + const files = FS.readdirSync(filepath); + for (let i = 0; i < files.length; i++) { + if (/\.md$/.test(files[i])) { + pathAll.push(path.join(filepath, files[i])); + } + } + resolve(pathAll); + } catch (err) { + reject(err); + } + }); +} diff --git a/build/compile.js b/build/compile.js deleted file mode 100644 index 82b88692f4c..00000000000 --- a/build/compile.js +++ /dev/null @@ -1,396 +0,0 @@ -var exec = require('child_process').exec; -var fs = require('fs'); -var ejs = require('ejs'); -var path = require('path'); -var marked = require('marked'); -var watch = require('watch'); -var stylus = require('stylus') -var highlight = require('highlight.js') -var UglifyJS = require("uglify-js"); -var renderer = new marked.Renderer(); -var color = require('colors-cli/safe'); -var error = color.red.bold; -var warn = color.yellow; -var notice = color.blue; -var success = color.green; - -// console.log("该行代码所在的目录::",__dirname); -// console.log("当前运行的的根目录::",path.dirname(__dirname)); -// console.log("当前目录名字::",path.basename(process.cwd())); -// console.log("当前目录::",process.cwd()); - -renderer.heading = function (text, level) { - if(/[\u4E00-\u9FA5]/i.test(text)){ - return ''+text+''; - }else{ - var escapedText = text.toLowerCase().replace(/[^\w]+/g, '-'); - return ''+text+''; - } -} - -marked.setOptions({ - renderer: renderer, - gfm: true, - tables: true, - breaks: false, - pedantic: false, - sanitize: false, - smartLists: true, - smartypants: false, - highlight: function (code, lang, callback) { - lang = lang?lang:"bash"; - return callback('',highlight.highlight(lang,code).value); - } - // highlight: function (code, lang, callback) { - // if(lang){ - // return highlight.highlight(lang,code).value; - // // return callback('',highlight.highlight(lang,code).value); - // }else{ - // return highlight.highlightAuto(code).value; - // // return callback('',highlight.highlightAuto(code).value); - // } - // } -}); - -// 根目录 -// var path_root = path.dirname(__dirname); -var path_root = process.cwd(); - - -// 删除文件夹 -exec('rm -rf .deploy'); - -// .deploy -// 当前项目根目录 -// 生成 项目所需的文件 -CreateDatajs('./.deploy/js/dt.js',function(dt_path,arr){ - - - // 拷贝 favicon.ico 文件 start - var filetopath = path.join(process.cwd(),'/template/img/favicon.ico'); - var topath = '.deploy/img/favicon.ico' - - mkdirsSync(path.join(process.cwd(),'.deploy/img/')); - // 创建读取流 - readable = fs.createReadStream( filetopath ); - // 创建写入流 - writable = fs.createWriteStream(topath); - // 通过管道来传输流 - readable.pipe( writable); - console.log(success(" → ")+topath + ''); - // 拷贝 favicon.ico 文件 end - - - CreateJS('/template/js/index.js','/.deploy/js/index.js') - - CreateStyl('/template/styl/index.styl','/.deploy/css/index.css') - - // 首页生成 - ReadTmpToHTML('/template/index.ejs','/.deploy/index.html',null,{ - 'p':'/index.html', - 'n':'Linux命令搜索引擎', - 'd':'最专业的Linux命令大全,内容包含Linux命令手册、详解、学习,值得收藏的Linux命令速查手册。', - 'command_length':arr.length - }); - ReadTmpToHTML('/template/list.ejs','/.deploy/list.html',null,{ - p:'/list.html', - n:'搜索', - d: '最专业的Linux命令大全,命令搜索引擎,内容包含Linux命令手册、详解、学习,值得收藏的Linux命令速查手册。', - command_length: arr.length - }); - - ReadTmpToHTML('/template/hot.ejs','/.deploy/hot.html',null,{ - p:'/hot.html', - n:'搜索', - d:'最专业的Linux命令大全,命令搜索引擎,内容包含Linux命令手册、详解、学习,值得收藏的Linux命令速查手册。', - arr: arr, - command_length: arr.length - }); - // 文章批量生成 - arr.forEach(function(itm,idx){ - var ejstpm = path.join('/template/',itm.p); - var md_path = path.join('/command',itm.p); - var dep = path.join('/.deploy/c',itm.p); - itm.command_length = arr.length; - ReadTmpToHTML('/template/details.ejs', dep+'.html' ,md_path+'.md', itm ,arr) - }); - - console.log(success(" → "),arr.length) - -}) - -function copy(src, dst) { - fs.createReadStream(src).pipe(fs.createWriteStream(dst)); -} - - -// // 监听实时编译 -// watch.watchTree(path.join(path.dirname(__dirname),'/'), function (f, curr, prev) { -// if (typeof f == "object" && prev === null && curr === null) { -// console.log(success(" → :watching ") + '/template/'); -// // Finished walking the tree -// } else if (prev === null) { - -// // f is a new file -// } else if (curr.nlink === 0) { -// // f was removed -// } else { - -// if(/\.styl$/.test(f)){ -// CreateStyl('/template/styl/index.styl','/.deploy/css/index.css') -// }else if(/\.js$/.test(f)){ - -// CreateJS('/template/js/index.js','/.deploy/js/index.js') - -// }else if(/\.ejs$/.test(f)){ -// // 首页生成 -// ReadTmpToHTML('/template/index.ejs','/.deploy/index.html'); -// ReadTmpToHTML('/template/list.ejs','/.deploy/list.html'); - -// }else if(/\.md$/.test(f)){ -// var mdp = f.replace(path_root,''); -// var dep = path.join('/.deploy/',mdp); -// ReadTmpToHTML('/template/details.ejs',dep.replace('.md','.html'),mdp); -// } -// } -// }) - - -function CreateJS(from_path,to_path){ - - // 生成到指定目录 - var new_to_path = path.join(path.dirname(__dirname),to_path); - // 循环创建目录 - mkdirsSync(path.dirname(new_to_path)); - var js_code = UglifyJS.minify(path.join(path_root,from_path), { mangle: { toplevel: true } }); - fs.writeFileSync(new_to_path, js_code.code); - console.log(success(" → ")+to_path + ''); - -} - -/** - * [ReadTmpToHTML ejs 模板转换成HTML] - * @param {[type]} from_path [模版来源地址] - * @param {[type]} to_path [生成到指定的位置] - * @param {[type]} md_path [Markdown的路径] // 给md地址就生产详情页面 - * @param {[type]} des_json [页面信息 json 格式] - * @param {[type]} arr [] - */ -function ReadTmpToHTML(from_path,to_path,md_path,des_json, total_pages){ - var tmp_path = path.join(path.dirname(__dirname),from_path); - if(!exists(tmp_path)) return console.log("\n → error: 模板文件 "+tmp_path+" 不存在") - var tmp_str = fs.readFileSync(tmp_path); - tmp_str = tmp_str.toString(); - - var relative_path = ''; - var current_path = to_path.replace(/^\/\.deploy/,''); - if(md_path){ - //CSS/JS 引用相对地址 - relative_path = path.relative(md_path.toString(),'/'); - relative_path = relative_path.replace(/\.\.$/,''); - } - // 生成 HTML - var html = ejs.render(tmp_str,{ - filename: tmp_path, - relative_path:relative_path, // 当前文件相对于根目录的相对路径 - md_path:md_path?md_path:'', // markdown 路径 - current_path:current_path, // 当前 html 路径 - describe:des_json?des_json:{}, // 当前 md 的描述 - }); - // 生成到指定目录 - var new_to_path = path.join(path.dirname(__dirname),to_path); - // 循环创建目录 - !exists(path.dirname(new_to_path)) && mkdirsSync(path.dirname(new_to_path)); - - if(md_path){ - var new_md_path = path.join(path.dirname(__dirname),md_path); - var README_str = fs.readFileSync(new_md_path); - marked(README_str.toString(),function(err,md_html){ - if (err) return console.log(error(' → '+md_path+" 转换成HTML失败!")); - - html = html.split('{{content}}') - html.splice(1, 0, md_html); - html = html.join('') - // html = html.replace('{{content}}',md_html); - fs.writeFileSync(new_to_path,html); - console.log(success(" → ")+to_path + ''); - }) - }else{ - html = html.toString(); - fs.writeFileSync(new_to_path, html.replace(/\n/g,'')); - console.log(success(" → ")+to_path + ''); - } -} - - - - -/** - * [CreateStyl 生成CSS] - * @param {[type]} styl_path [description] - * @param {[type]} css_path [description] - */ -function CreateStyl(styl_path,css_path){ - var new_css_path = path.join(path.dirname(__dirname),css_path); - styl_path = path.dirname(__dirname) + styl_path; - // var paths = [ - // path.dirname(__dirname) , path.dirname(__dirname) + '/' - // ]; - var styl_str = fs.readFileSync(styl_path, 'utf8'); - stylus(styl_str.toString()) - .set('filename', styl_path ) - .set('compress', true) - .render(function(err, css){ - if (err) throw err; - // 循环创建目录 - mkdirsSync(path.dirname(new_css_path)); - fs.writeFileSync(new_css_path, css); - // console.log(err,css); - console.log(success(" → ")+styl_path + ''); - }); -} - -// 生成数据索引JS -function CreateDatajs(dt_path,callback){ - // 获取 markdown文件所在的目录 - var path_md = path.join(path.dirname(__dirname),'command'); - var path_dist = path.join(path.dirname(__dirname),'dist'); - if(!exists(path_md)) return console.log("\n → error: 文件夹 "+path_md+" 不存在 \n ") - // 获取 markdown 目录的集合 - var path_arr = readMDSync(path_md); - path_arr = sortLength(path_arr); - var indexes = []; - - var command_data={} - path_arr.forEach(function(md_path,i){ - var json = {} - var con = fs.readFileSync(md_path); - var str = con.toString(); - var title = str.match(/[^===]+(?=[===])/g); - - title = title[0]?title[0].replace(/\n/g,''):title[0]; - title = title.replace(/\r/,'') - // 命令名称 - json["n"] = title; - // 命令路径 - json["p"] = md_path.replace(/\.md$/, '').replace(path_md, '').replace(/\\/g, '/'); - // 命令描述 - var des = str.match(/\n==={1,}([\s\S]*?)##/i); - if (!des) { - console.log('格式错误:', error(md_path)); - } - des = des[1]?des[1].replace(/\n/g,''):des[1]; - des = des.replace(/\r/g,'') - json["d"] = des; - indexes.push(json) - - command_data[title] = json; - }) - mkdirsSync(path.dirname(dt_path)); - - console.log("path.dirname(__dirname)",path.dirname(__dirname)) - //生成数据文件 - fs.writeFile(dt_path, 'var linux_commands='+JSON.stringify(indexes) , 'utf8',function(err){ - console.log(success("\n → ")+"生成数据成功!"+dt_path+" \n "); - path_dist = path.join(path_dist,'data.json') - fs.writeFile(path_dist, JSON.stringify(command_data) , 'utf8',function(err){ - console.log(success("\n → ")+"生成数据成功!"+path_dist+" \n "); - callback&&callback(dt_path,indexes); - }); - - }); -} - -// 按长度排序 -function sortLength(arr){ - var compare = function (x, y) {//比较函数 - x = path.basename(x,'.md'); - y = path.basename(y,'.md'); - if (x.length < y.length) { - return -1; - } else if (x.length > y.length) { - return 1; - } else { - return 0; - } - } - return arr.sort(compare) -} - -// 同步循环创建所有目录 resolvePath -function mkdirsSync(dirpath, mode, callback) { - if(fs.existsSync(dirpath)){ - callback&&callback(dirpath); - return true; - }else{ - if(mkdirsSync(path.dirname(dirpath), mode)){ - fs.mkdirSync(dirpath, mode, callback); - callback&&callback(dirpath); - return true; - }else{ - callback&&callback(dirpath); - } - } -}; - -var fixture = path.join.bind(path, __dirname, 'template'); - -function cp(src, dest, cb) { - // yield support - if ('function' != typeof cb) return thunk; - - var complete = false; - var read = fs.createReadStream(src); - var write = fs.createWriteStream(dest); - - write.on('error', done); - write.on('close', done); - read.on('error', done); - read.pipe(write); - - // done callback - function done(err) { - if (!complete) { - complete = true; - read.destroy(); - write.destroy(); - cb(err); - } - } - - // thunk-ified - function thunk(done) { - cp(src, dest, done); - } -} - -//返回 MD 所有路径的 Array -function readMDSync(filepath){ - if(!exists(filepath)) return []; - var str = '',files = fs.readdirSync(filepath); - for (var i = 0; i < files.length; i++) { - var path_c = path.join(filepath,files[i]); - if( isDir(path_c) ) { - str += readMDSync(path_c) + ','; - } - else if(/\.(md)$/.test(files[i])) str += path_c + ','; - }; - str = str.replace(/^\*|\,*$/g,''); - return str.split(','); -} -//写文件 -function writeSync(filepath, content, callback) { - mkdirsSync(path.dirname(filepath)); - return fs.writeFileSync(filepath, content, callback); -}; - -//写文件 -function write(filepath, content) { - return fs.writeFile(filepath, content); -}; - -//判断是不是目录 -function isDir(_path){return exists(_path) && fs.statSync(_path).isDirectory();} - -//检查指定路径的文件或者目录,是否存在 -function exists(_path){return fs.existsSync(_path);} \ No newline at end of file diff --git a/build/crawler.js b/build/crawler.js deleted file mode 100644 index 5d0622a3e33..00000000000 --- a/build/crawler.js +++ /dev/null @@ -1,160 +0,0 @@ -var request = require('superagent'); -var cheerio = require('cheerio'); -var toMarkdown = require('to-markdown'); -var path = require('path'); -var process = require('process'); -var fs = require('fs'); -var color = require('colors-cli/safe'); -var error = color.red.bold; -var warn = color.yellow; -var notice = color.blue; -var success = color.green; - -var param = process.argv.slice(2); - - -// 需要爬的命令 -// var arr = ["find"]; -// var arr = []; -var arr = []; -// var arr = ["arch","axel","chsh","comm","compress","csplit","cut","dd","dig","dmesg","domainname","du","enable","fdisk","file","ftp","htpasswd","id","insmod","losetup","ls","lynx","mail","mkinitrd","netstat","nslookup","od","passwd","pgrep","ping","quota","restorecon","rmmod","screen","sed","semanage","smbclient","split","startx","sudo","tee","tftp","wall","wget","which","accept","apt-get","apt-key","apt-sortpkgs","aptitude","awk","clockdiff","cupsenable","dnf","dpkg-reconfigure","dpkg","expr","gcc","gdb","ldconfig","ldd","lpadmin","make","ngrep","nm","ntpdate","objdump","perl","php","protoize","pssh","pstack","readelf","reject","rsync","speedtest-cli","tempfile","test","vdfuse","xargs"]; - -// 还没有爬到的命令:--> ["bye","uucico","uucp","uupick","uuto","git","gitview","mattrib","mc","mcopy","mdel","mdir","mmove","mread","mren","mshowfat","mtoolstest","rhmask","tmpwatch","lndir","mcd","mdeltree","mdu","mlabel","mmd","mmount","mrd","mzip","rmt","cfdisk","ext2ed","fsck.ext2","fsck.minix","fsconf","mbadblocks","mformat","mkdosfs","mkfs.ext2","mkfs.minix","mkfs.msdos","mpartition","sfdisk","symlinks","apmd","aumix","eval","fbset","kbdconfig","liloconfig","minfo","mkkickstart","modinfo","mouseconfig","rdate","setconsole","setenv","setup","sndconfig","SVGAText Mode","timeconfig","adduser","fwhois","gitps","newgrp","procinfo","rwho","sliplogin","suspend","swatch","userconf","vlock","whois","mtype","rgrep","dip","getty","mingetty","ppp-off","smbd(samba daemon)","uulog","uustat","uux","dnsconf","efax","httpd","minicom","netconf","netconfig","pppstats","samba","setserial","shapecfg(shaper configuration)","smbd(samba daemon)","statserial(status ofserial port)","testparm(test parameter)","tty(teletypewriter)","uuname","wall(write all)","ytalk","smbclient(samba client)","pppsetup","dumpkeys","loadkeys","MAKEDEV","rdev","setleds","archive","ctlinnd","getlist","inncheck","mailconf","messages","metamail","mutt","nntpget","pine","slrn","X WINDOWS SYSTEM","reconfig","startx(start X Window)","Xconfigurator","XF86Setup" ,"nc/netcat","locate/slocate","get_module"] -// 已经存在的命令:----> [] -// 名字不对的命令:----> ["ar","locate","slocate","clock","resize","cu","nc"] -// 网站中没有的命令 -var empty_command = []; -// 已经爬过/存在的命令 -var exists_command = []; -// 名字不对的命令 -var name_command = []; -var arr_len = 0; - -arr[arr_len]&&CreatMarkdownQuery(arr[arr_len]); - - -function CreatMarkdownQuery(query){ - var url = 'http://man.linuxde.net/'+query; - var new_to_path = path.join(path.dirname(__dirname),'command/'+query+'.md') - - - if(!arr[arr_len]){ - console.log('还没有爬到的命令:-->', JSON.stringify(empty_command) ) - console.log('已经存在的命令:---->', JSON.stringify(exists_command) ) - console.log('名字不对的命令:---->', JSON.stringify(name_command) ) - return; - }; - - ++arr_len; - - // 文件已经存在 - if(exists( new_to_path )) { - exists_command.push(query) - CreatMarkdownQuery(arr[arr_len]); - return console.log(" → error:文件存在 ",new_to_path) - } - - request.get(url).end(function(err, res){ - - if(arr[arr_len]){ - CreatMarkdownQuery(arr[arr_len]); - } - // console.log("res.text:::--->",res.text) - - if(/命令还没有被录入!/.test(res.text)){ - empty_command.push(query) - return console.log(" → error: 没有爬到数据,命令" + query +'不存在!') - } - var $ = cheerio.load(res.text); - var description = $('title').text(); - description = description.replace(/(.*)命令用法详解:/,'') - - var title = $('.main h1.l'); - title = title.text(); - title = title.replace(/命令$/,''); - - - if(query!==title){ - name_command.push(query) - return console.log(" → error: 名字不对的命令 ",query) - } - - if(!title){ - empty_command.push(query); - return console.log(error(" → error: 命令" + query +'不存在!标题为空')) - } - var content = $('#content-index').remove() - content = $('.main .post_bd').html(); - var md_str = toMarkdown(content); - - md_str = md_str.replace(/linuxde.net/g,'jsdig.com'); - md_str = md_str.replace(/linuxde/g,'jsdigname'); - md_str = md_str.replace(/\*\*(.*?)\*\*/g,' **$1** '); - md_str = md_str.replace(/^\s\*\*(.*?)\*\*/g,'**$1**'); - md_str = title + '\n===\n'+description+'\n\n## 补充说明\n\n' + md_str; - md_str = md_str.replace(/
/gi,'```\n')
-        md_str = md_str.replace(/<\/pre>/gi,'\n```')
-        md_str = md_str.replace(//gi,'')
-        md_str = md_str.replace(/<\/span>/gi,'')
-        md_str = md_str.replace(/\[[^\]]*\]\(.*?\)/g,function(str){
-            str.replace(/\[(.*?)\]/,'');
-            return RegExp.$1;
-        })
-        // console.log("md_str--->",md_str)
-        md_str += '\n\n\n'
-
-        fs.writeFileSync(new_to_path, md_str ,'utf-8');
-        console.log(success(" → OK!"),new_to_path)
-    });
-}
-
-
-
-/**
- * 指定URL爬
- */
-
-
-// var from_path = param[0];
-// var to_path = param[1];
-// if(!from_path) return console.error("请输入请求参数!");
-// if(!to_path) return console.error("请输入写入目标目录!");
-// CreatMarkdown(from_path,to_path)
-
-function CreatMarkdown(from_path,to_path){
-
-    var new_to_path = path.join(path.dirname(__dirname),to_path)
-    if(exists(new_to_path)) return console.log(" → error: 目录存在 ",to_path,'\n')
-
-    new_to_path = path.dirname(new_to_path)
-    mkdirsSync(new_to_path,0777,function(){
-
-        request.get(from_path).end(function(err, res){
-            // console.log("to_path::",to_path)
-            fs.writeFileSync(to_path, toMarkdown(res.text).toString() ,'utf-8');
-            console.log(" → ",to_path)
-        });
-
-    });
-}
-
-
-// 同步循环创建所有目录 resolvePath
-function mkdirsSync(dirpath, mode, callback) {
-    if(fs.existsSync(dirpath)){
-        callback&&callback(dirpath);
-        return true;
-    }else{
-        if(mkdirsSync(path.dirname(dirpath), mode)){
-            fs.mkdirSync(dirpath, mode, callback);
-            callback&&callback(dirpath);
-            return true;
-        }else{
-            callback&&callback(dirpath);
-        }
-    }
-};
-
-
-//检查指定路径的文件或者目录,是否存在
-function exists(_path){return fs.existsSync(_path);}
\ No newline at end of file
diff --git a/build/deploy.js b/build/deploy.js
index 7d00995123d..10c094ffe27 100644
--- a/build/deploy.js
+++ b/build/deploy.js
@@ -1,28 +1,21 @@
-var exec = require('child_process').exec;
-var ghpages = require('gh-pages');
-var loading =  require('loading-cli');
-var path = require('path');
-var fs = require('fs');
-var color = require('colors-cli/safe');
-var error = color.red.bold;
-var warn = color.yellow;
-var notice = color.blue;
-var success = color.green;
+const ghpages = require('gh-pages');
+const loading = require('loading-cli');
+const path = require('path');
+const fs = require('fs');
+const color = require('colors-cli/safe');
 
-var deploy_path = path.join(process.cwd(), '.deploy');
+const deploy_path = path.join(process.cwd(), '.deploy');
 
-if(fs.existsSync(deploy_path)){
-    var load = loading('  Pushing code!!')
-    load.start();
-    ghpages.publish(deploy_path,{ 
-        repo: 'git@github.com:jaywcjlove/linux-command.git',
-        branch: 'gh-pages',
-        message: 'Linux command index, Compiler generation page ' + new Date()
-    }, function(err) { 
-        if(err) return console.log(error('  → '+"ok!"+err));
-        load.stop()
-        console.log(success('\n\n   '+"Push success!!"));
-        // 删除文件夹
-        exec('rm -rf .deploy');
-    });   
+if (fs.existsSync(deploy_path)) {
+  const load = loading('  Pushing code!!')
+  load.start();
+  ghpages.publish(deploy_path, {
+    repo: 'git@github.com:jaywcjlove/linux-command.git',
+    branch: 'gh-pages',
+    message: 'Linux command index, Compiler generation page ' + new Date()
+  }, (err) => {
+    if (err) return console.log(`  → Err: ${err.message}`);
+    load.stop()
+    console.log(`\n\n   Push success!!`.green);
+  });
 }
diff --git a/dist/data.json b/dist/data.json
index b171a5c8363..4c40b0e8a0a 100644
--- a/dist/data.json
+++ b/dist/data.json
@@ -1 +1 @@
-{"w":{"n":"w","p":"/w","d":"显示目前登入系统的用户信息"},"rm":{"n":"rm","p":"/rm","d":"用于删除给定的文件和目录"},"ip":{"n":"ip","p":"/ip","d":"网络配置工具"},"ld":{"n":"ld","p":"/ld","d":"将目标文件连接为可执行程序"},"ln":{"n":"ln","p":"/ln","d":"用来为文件创件连接"},"lp":{"n":"lp","p":"/lp","d":"打印文件或修改排队的打印任务"},"xz":{"n":"xz","p":"/xz","d":"POSIX 平台开发具有高压缩率的工具。"},"fg":{"n":"fg","p":"/fg","d":"将后台作业放到前台终端运行"},"ar":{"n":"ar","p":"/ar","d":"建立或修改备存文件,或是从备存文件中抽取文件"},"fc":{"n":"fc","p":"/fc","d":"修改历史命令并执行"},"ls":{"n":"ls","p":"/ls","d":"显示目录内容列表"},"wc":{"n":"wc","p":"/wc","d":"统计文件的字节数、字数、行数"},"as":{"n":"as","p":"/as","d":"汇编语言编译器"},"at":{"n":"at","p":"/at","d":"在指定时间执行一个任务"},"ex":{"n":"ex","p":"/ex","d":"启动vim编辑器的ex编辑模式"},"ed":{"n":"ed","p":"/ed","d":"单行纯文本编辑器"},"ab":{"n":"ab","p":"/ab","d":"Apache服务器的性能测试工具"},"vi":{"n":"vi","p":"/vi","d":"功能强大的纯文本编辑器"},"bc":{"n":"bc","p":"/bc","d":"算术操作精密运算工具"},"bg":{"n":"bg","p":"/bg","d":"用于将作业放到后台运行"},"mv":{"n":"mv","p":"/mv","d":"用来对文件或目录重新命名"},"du":{"n":"du","p":"/du","d":"显示每个文件和目录的磁盘使用空间"},"tr":{"n":"tr","p":"/tr","d":"将字符进行替换压缩和删除"},"nc":{"n":"nc","p":"/nc","d":"命令用于设置路由器。"},"nl":{"n":"nl","p":"/nl","d":"在Linux系统中计算文件内容行号"},"nm":{"n":"nm","p":"/nm","d":"显示二进制目标文件的符号表"},"od":{"n":"od","p":"/od","d":"输出文件的八进制、十六进制等格式编码的字节"},"pr":{"n":"pr","p":"/pr","d":"将文本文件转换成适合打印的格式"},"cd":{"n":"cd","p":"/cd","d":"切换用户当前工作目录"},"ps":{"n":"ps","p":"/ps","d":"报告当前系统的进程状态"},"pv":{"n":"pv","p":"/pv","d":"显示当前在命令行执行的命令的进度信息,管道查看器。"},"su":{"n":"su","p":"/su","d":"用于切换当前用户身份到其他用户身份"},"df":{"n":"df","p":"/df","d":"显示磁盘的相关信息"},"ss":{"n":"ss","p":"/ss","d":"比 netstat 好用的socket统计信息,iproute2 包附带的另一个工具,允许你查询 socket 的有关统计信息。"},"sh":{"n":"sh","p":"/sh","d":"shell命令解释器"},"dd":{"n":"dd","p":"/dd","d":"复制文件并对原文件的内容进行转换和格式化处理"},"cu":{"n":"cu","p":"/cu","d":"用于连接另一个系统主机。"},"cp":{"n":"cp","p":"/cp","d":"将源文件或目录复制到目标文件或目录中"},"id":{"n":"id","p":"/id","d":"显示用户的ID以及所属群组的ID"},"seq":{"n":"seq","p":"/seq","d":"以指定增量从首数开始打印数字到尾数"},"scp":{"n":"scp","p":"/scp","d":"加密的方式在本地主机和远程主机之间复制文件"},"set":{"n":"set","p":"/set","d":"显示或设置shell特性及shell变量"},"sar":{"n":"sar","p":"/sar","d":"系统运行状态统计工具"},"rsh":{"n":"rsh","p":"/rsh","d":"连接远程主机并执行命令"},"col":{"n":"col","p":"/col","d":"过滤控制字符"},"rpm":{"n":"rpm","p":"/rpm","d":"RPM软件包的管理工具"},"ack":{"n":"ack","p":"/ack","d":"比grep好用的文本搜索工具"},"cut":{"n":"cut","p":"/cut","d":"连接文件并打印到标准输出设备上"},"cmp":{"n":"cmp","p":"/cmp","d":"比较两个文件是否有差异"},"rev":{"n":"rev","p":"/rev","d":"将文件内容以字符为单位反序输出"},"ssh":{"n":"ssh","p":"/ssh","d":"openssh套件中的客户端连接工具"},"rcp":{"n":"rcp","p":"/rcp","d":"使在两台Linux主机之间的文件复制操作更简单"},"pwd":{"n":"pwd","p":"/pwd","d":"绝对路径方式显示用户当前工作目录"},"pvs":{"n":"pvs","p":"/pvs","d":"输出物理卷信息报表"},"dig":{"n":"dig","p":"/dig","d":"域名查询工具"},"sum":{"n":"sum","p":"/sum","d":"计算文件的校验码和显示块数"},"tac":{"n":"tac","p":"/tac","d":"将文件已行为单位的反序输出"},"cat":{"n":"cat","p":"/cat","d":"连接文件并打印到标准输出设备上"},"dnf":{"n":"dnf","p":"/dnf","d":"新一代的RPM软件包管理器"},"php":{"n":"php","p":"/php","d":"PHP语言的命令行接口"},"tar":{"n":"tar","p":"/tar","d":"Linux下的归档使用工具,用来打包和备份。"},"cal":{"n":"cal","p":"/cal","d":"显示当前日历或指定日期的日历"},"tee":{"n":"tee","p":"/tee","d":"把数据重定向到给定文件和屏幕上"},"top":{"n":"top","p":"/top","d":"显示或管理执行中的程序"},"bye":{"n":"bye","p":"/bye","d":"命令用于中断FTP连线并结束程序。。"},"sed":{"n":"sed","p":"/sed","d":"功能强大的流式文本编辑器"},"awk":{"n":"awk","p":"/awk","d":"文本和数据进行处理的编程语言"},"man":{"n":"man","p":"/man","d":"查看Linux中的指令帮助"},"elm":{"n":"elm","p":"/elm","d":"纯文本邮件客户端程序"},"env":{"n":"env","p":"/env","d":"显示系统中已存在的环境变量"},"atq":{"n":"atq","p":"/atq","d":"列出当前用户的at任务列表"},"arp":{"n":"arp","p":"/arp","d":"显示和修改IP到MAC转换表"},"arj":{"n":"arj","p":"/arj","d":"用于创建和管理.arj压缩包"},"lpr":{"n":"lpr","p":"/lpr","d":"将文件发送给指定打印机进行打印"},"who":{"n":"who","p":"/who","d":"显示目前登录系统的用户信息"},"lpq":{"n":"lpq","p":"/lpq","d":"显示打印队列中的打印任务的状态信息"},"lpc":{"n":"lpc","p":"/lpc","d":"命令行方式打印机控制程序"},"yes":{"n":"yes","p":"/yes","d":"重复打印指定字符串"},"yum":{"n":"yum","p":"/yum","d":"基于RPM的软件包管理器"},"fmt":{"n":"fmt","p":"/fmt","d":"读取文件后优化处理并输出"},"ftp":{"n":"ftp","p":"/ftp","d":"用来设置文件系统相关功能"},"lha":{"n":"lha","p":"/lha","d":"压缩或解压缩lzh格式文件"},"let":{"n":"let","p":"/let","d":"简单的计算器"},"gcc":{"n":"gcc","p":"/gcc","d":"基于C/C++的编译器"},"gdb":{"n":"gdb","p":"/gdb","d":"功能强大的程序调试器"},"ldd":{"n":"ldd","p":"/ldd","d":"打印程序或者库文件所依赖的共享库列表"},"apk":{"n":"apk","p":"/apk","d":"Alpine Linux 下的包管理工具"},"git":{"n":"git","p":"/git","d":"是目前世界上最先进的分布式版本控制系统"},"gpm":{"n":"gpm","p":"/gpm","d":"提供文字模式下的滑鼠事件处理"},"joe":{"n":"joe","p":"/joe","d":"强大的纯文本编辑器"},"jed":{"n":"jed","p":"/jed","d":"主要用于编辑代码的编辑器"},"zip":{"n":"zip","p":"/zip","d":"可以用来解压缩文件"},"tty":{"n":"tty","p":"/tty","d":"显示连接到当前标准输入的终端设备文件名。"},"pvck":{"n":"pvck","p":"/pvck","d":"检测物理卷的LVM元数据的一致性"},"chfn":{"n":"chfn","p":"/chfn","d":"用来改变finger命令显示的信息"},"arch":{"n":"arch","p":"/arch","d":"显示当前主机的硬件架构类型"},"pssh":{"n":"pssh","p":"/pssh","d":"批量管理执行"},"dirs":{"n":"dirs","p":"/dirs","d":"显示目录记录"},"sudo":{"n":"sudo","p":"/sudo","d":"以其他身份来执行命令"},"bind":{"n":"bind","p":"/bind","d":"显示或设置键盘按键与其相关的功能"},"stty":{"n":"stty","p":"/stty","d":"修改终端命令行的相关设置"},"popd":{"n":"popd","p":"/popd","d":"用于删除目录栈中的记录"},"pmap":{"n":"pmap","p":"/pmap","d":"报告进程的内存映射关系"},"ping":{"n":"ping","p":"/ping","d":"测试主机之间网络的连通性"},"pico":{"n":"pico","p":"/pico","d":"功能强大全屏幕的文本编辑器"},"stat":{"n":"stat","p":"/stat","d":"用于显示文件的状态信息"},"perl":{"n":"perl","p":"/perl","d":"perl语言解释器"},"sshd":{"n":"sshd","p":"/sshd","d":"openssh软件套件中的服务器守护进程"},"nmap":{"n":"nmap","p":"/nmap","d":"网络探测和安全审核"},"chsh":{"n":"chsh","p":"/chsh","d":"用来更换登录系统时使用的shell"},"uniq":{"n":"uniq","p":"/uniq","d":"报告或忽略文件中的重复行"},"nice":{"n":"nice","p":"/nice","d":"改变程序执行的优先权等级"},"dpkg":{"n":"dpkg","p":"/dpkg","d":"Debian Linux系统上安装、创建和管理软件包"},"dris":{"n":"dris","p":"/dris","d":"显示和清空目录堆栈中的内容"},"type":{"n":"type","p":"/type","d":"显示指定命令的类型"},"sort":{"n":"sort","p":"/sort","d":"将文件进行排序并输出"},"dump":{"n":"dump","p":"/dump","d":"用于备份ext2或者ext3文件系统"},"nano":{"n":"nano","p":"/nano","d":"字符终端文本编辑器"},"xset":{"n":"xset","p":"/xset","d":"设置X-Window系统中的用户爱好的实用工具"},"echo":{"n":"echo","p":"/echo","d":"输出指定的字符串或者变量"},"tree":{"n":"tree","p":"/tree","d":"树状图列出目录的内容"},"more":{"n":"more","p":"/more","d":"显示文件内容,每次显示一屏"},"mkfs":{"n":"mkfs","p":"/mkfs","d":"用于在设备上创建Linux文件系统"},"mesg":{"n":"mesg","p":"/mesg","d":"设置当前终端的写权限"},"trap":{"n":"trap","p":"/trap","d":"指定在接收到信号后将要采取的动作"},"sftp":{"n":"sftp","p":"/sftp","d":"交互式的文件传输程序"},"make":{"n":"make","p":"/make","d":"GNU的工程化编译工具"},"mail":{"n":"mail","p":"/mail","d":"命令行下发送和接收电子邮件"},"comm":{"n":"comm","p":"/comm","d":"两个文件之间的比较"},"lynx":{"n":"lynx","p":"/lynx","d":"纯文本模式的网页浏览器"},"atop":{"n":"atop","p":"/atop","d":"监控Linux系统资源与进程的工具"},"exec":{"n":"exec","p":"/exec","d":"调用并执行指定的命令"},"exit":{"n":"exit","p":"/exit","d":"退出当前的shell"},"lsof":{"n":"lsof","p":"/lsof","d":"显示Linux系统当前已打开的所有文件列表 `lsof -p pid`"},"znew":{"n":"znew","p":"/znew","d":"将.Z压缩包重新转化为gzip命令压缩的.gz压缩包"},"lprm":{"n":"lprm","p":"/lprm","d":"删除打印队列中的打印任务"},"expr":{"n":"expr","p":"/expr","d":"一款表达式计算工具"},"tput":{"n":"tput","p":"/tput","d":"通过terminfo数据库对终端会话进行初始化和操作"},"atrm":{"n":"atrm","p":"/atrm","d":"删除待执行任务队列中的指定任务"},"tmux":{"n":"tmux","p":"/tmux","d":"Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权。"},"cpio":{"n":"cpio","p":"/cpio","d":"用来建立、还原备份档的工具程序"},"file":{"n":"file","p":"/file","d":"用来探测给定文件的类型。"},"find":{"n":"find","p":"/find","d":"在指定目录下查找文件"},"time":{"n":"time","p":"/time","d":"统计给定命令所花费的总时间"},"tftp":{"n":"tftp","p":"/tftp","d":"在本机和tftp服务器之间使用TFTP协议传输文件"},"look":{"n":"look","p":"/look","d":"显示文件中以指定字符串开头的任意行"},"test":{"n":"test","p":"/test","d":"shell环境中测试条件表达式工具"},"arpd":{"n":"arpd","p":"/arpd","d":"收集免费ARP信息"},"fold":{"n":"fold","p":"/fold","d":"控制文件内容输出时所占用的屏幕宽度"},"free":{"n":"free","p":"/free","d":"显示内存的使用情况"},"fsck":{"n":"fsck","p":"/fsck","d":"检查并且试图修复文件系统中的错误"},"axel":{"n":"axel","p":"/axel","d":"多线程下载工具"},"lilo":{"n":"lilo","p":"/lilo","d":"安装核心载入开机管理程序"},"curl":{"n":"curl","p":"/curl","d":"利用URL规则在命令行下工作的文件传输工具"},"lftp":{"n":"lftp","p":"/lftp","d":"优秀的文件客户端程序"},"wait":{"n":"wait","p":"/wait","d":"等待进程执行完后返回"},"less":{"n":"less","p":"/less","d":"分屏上下翻页浏览文件内容"},"date":{"n":"date","p":"/date","d":"显示或设置系统时间与日期"},"gcov":{"n":"gcov","p":"/gcov","d":"测试程序的代码覆盖率的工具"},"wget":{"n":"wget","p":"/wget","d":"Linux系统下载文件工具"},"zcat":{"n":"zcat","p":"/zcat","d":"显示压缩包中文件的内容"},"read":{"n":"read","p":"/read","d":"从键盘读取变量值"},"last":{"n":"last","p":"/last","d":"列出目前与过去登入系统的用户相关信息"},"talk":{"n":"talk","p":"/talk","d":"让用户和其他用户聊天"},"kill":{"n":"kill","p":"/kill","d":"删除执行中的程序或工作"},"tail":{"n":"tail","p":"/tail","d":"在屏幕上显示指定文件的末尾若干行"},"grep":{"n":"grep","p":"/grep","d":"强大的文本搜索工具"},"join":{"n":"join","p":"/join","d":"两个文件中指定栏位内容相同的行连接起来"},"wall":{"n":"wall","p":"/wall","d":"向系统当前所有打开的终端上输出信息"},"jobs":{"n":"jobs","p":"/jobs","d":"显示Linux中的任务列表及任务状态"},"pwck":{"n":"pwck","p":"/pwck","d":"用来验证系统认证文件内容和格式的完整性"},"ipcs":{"n":"ipcs","p":"/ipcs","d":"分析消息队列共享内存和信号量 "},"diff":{"n":"diff","p":"/diff","d":"比较给定的两个文件的不同"},"init":{"n":"init","p":"/init","d":"init进程是所有Linux进程的父进程"},"grub":{"n":"grub","p":"/grub","d":"多重引导程序grub的命令行shell工具"},"info":{"n":"info","p":"/info","d":"Linux下info格式的帮助指令"},"ifup":{"n":"ifup","p":"/ifup","d":"激活指定的网络接口"},"gzip":{"n":"gzip","p":"/gzip","d":"用来压缩文件"},"halt":{"n":"halt","p":"/halt","d":"关闭正在运行的Linux操作系统"},"sync":{"n":"sync","p":"/sync","d":"用于强制被改变的内容立刻写入磁盘"},"head":{"n":"head","p":"/head","d":"在屏幕上显示指定文件的开头若干行"},"help":{"n":"help","p":"/help","d":"显示帮助信息"},"htop":{"n":"htop","p":"/htop","d":"[非内部命令]一个互动的进程查看器,可以动态观察系统进程状况。"},"host":{"n":"host","p":"/host","d":"常用的分析域名查询工具"},"chown":{"n":"chown","p":"/chown","d":"用来变更文件或目录的拥有者或所属群组"},"touch":{"n":"touch","p":"/touch","d":"创建新的空文件"},"ifcfg":{"n":"ifcfg","p":"/ifcfg","d":"置Linux中的网络接口参数"},"iftop":{"n":"iftop","p":"/iftop","d":"一款实时流量监控工具"},"gzexe":{"n":"gzexe","p":"/gzexe","d":"用来压缩可执行文件"},"tload":{"n":"tload","p":"/tload","d":"显示系统负载状况"},"bzip2":{"n":"bzip2","p":"/bzip2","d":"将文件压缩成bz2格式"},"iotop":{"n":"iotop","p":"/iotop","d":"用来监视磁盘I/O使用状况的工具"},"bzcmp":{"n":"bzcmp","p":"/bzcmp","d":"比较两个压缩包中的文件"},"alias":{"n":"alias","p":"/alias","d":"用来设置指令的别名"},"zfore":{"n":"zfore","p":"/zfore","d":"强制为gzip格式的压缩文件添加.gz后缀"},"ipcrm":{"n":"ipcrm","p":"/ipcrm","d":"删除消息队列、信号集、或者共享内存标识"},"grpck":{"n":"grpck","p":"/grpck","d":"用于验证组文件的完整性"},"iperf":{"n":"iperf","p":"/iperf","d":"网络性能测试工具"},"kexec":{"n":"kexec","p":"/kexec","d":"从当前正在运行的内核引导到一个新内核"},"bzcat":{"n":"bzcat","p":"/bzcat","d":"解压缩指定的.bz2文件"},"lastb":{"n":"lastb","p":"/lastb","d":"列出登入系统失败的用户相关信息"},"xinit":{"n":"xinit","p":"/xinit","d":"是Linux下X-Window系统的初始化程序"},"xhost":{"n":"xhost","p":"/xhost","d":"制哪些X客户端能够在X服务器上显示"},"fuser":{"n":"fuser","p":"/fuser","d":"使用文件或文件结构识别进程"},"tailf":{"n":"tailf","p":"/tailf","d":"在屏幕上显示指定文件的末尾若干行内容,通常用于日志文件的跟踪输出。"},"chage":{"n":"chage","p":"/chage","d":"修改帐号和密码的有效期限"},"xclip":{"n":"xclip","p":"/xclip","d":"管理 X 粘贴板"},"login":{"n":"login","p":"/login","d":"登录系统或切换用户身份"},"xauth":{"n":"xauth","p":"/xauth","d":"显示和编辑被用于连接X服务器的认证信息"},"xargs":{"n":"xargs","p":"/xargs","d":"给其他命令传递参数的一个过滤器"},"chcon":{"n":"chcon","p":"/chcon","d":"修改对象(文件)的安全上下文"},"fgrep":{"n":"fgrep","p":"/fgrep","d":"为文件搜索文字字符串"},"fdisk":{"n":"fdisk","p":"/fdisk","d":"查看磁盘使用情况和磁盘分区"},"write":{"n":"write","p":"/write","d":"向指定登录用户终端上发送信息"},"lsblk":{"n":"lsblk","p":"/lsblk","d":"列出块设备信息"},"lscpu":{"n":"lscpu","p":"/lscpu","d":"显示有关CPU架构的信息"},"lsmod":{"n":"lsmod","p":"/lsmod","d":"显示已载入系统的模块"},"lspci":{"n":"lspci","p":"/lspci","d":"显示当前主机的所有PCI总线信息"},"lsusb":{"n":"lsusb","p":"/lsusb","d":"显示本机的USB设备列表信息"},"mailq":{"n":"mailq","p":"/mailq","d":"显示待发送的邮件队列"},"emacs":{"n":"emacs","p":"/emacs","d":"功能强大的全屏文本编辑器"},"eject":{"n":"eject","p":"/eject","d":"用来退出抽取式设备"},"mkdir":{"n":"mkdir","p":"/mkdir","d":"用来创建目录"},"egrep":{"n":"egrep","p":"/egrep","d":"在文件内查找指定的字符串"},"chgrp":{"n":"chgrp","p":"/chgrp","d":"用来变更文件或目录的所属群组"},"mknod":{"n":"mknod","p":"/mknod","d":"创建字符设备文件和块设备文件"},"chmod":{"n":"chmod","p":"/chmod","d":"用来变更文件或目录的权限"},"mount":{"n":"mount","p":"/mount","d":"用于挂载Linux系统外的文件。"},"iconv":{"n":"iconv","p":"/iconv","d":"转换文件的编码方式"},"mysql":{"n":"mysql","p":"/mysql","d":"MySQL服务器客户端工具"},"which":{"n":"which","p":"/which","d":"查找并显示给定命令的绝对路径"},"watch":{"n":"watch","p":"/watch","d":"可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令"},"dstat":{"n":"dstat","p":"/dstat","d":"通用的系统资源统计工具"},"ncftp":{"n":"ncftp","p":"/ncftp","d":"是增强的的FTP工具"},"cksum":{"n":"cksum","p":"/cksum","d":"检查文件的CRC是否正确"},"ngrep":{"n":"ngrep","p":"/ngrep","d":"方便的数据包匹配和显示工具"},"batch":{"n":"batch","p":"/batch","d":"在系统不繁忙的时候执行定时任务"},"nmcli":{"n":"nmcli","p":"/nmcli","d":"地址配置工具"},"nohup":{"n":"nohup","p":"/nohup","d":"将程序以忽略挂起信号的方式运行起来"},"umask":{"n":"umask","p":"/umask","d":"用来设置限制新建文件权限的掩码"},"clear":{"n":"clear","p":"/clear","d":"清除当前屏幕终端上的任何信息"},"squid":{"n":"squid","p":"/squid","d":"squid服务器守护进程"},"paste":{"n":"paste","p":"/paste","d":"将多个文件按列队列合并"},"patch":{"n":"patch","p":"/patch","d":"为开放源代码软件安装补丁程序"},"split":{"n":"split","p":"/split","d":"分割任意大小的文件"},"pfctl":{"n":"pfctl","p":"/pfctl","d":"PF防火墙的配置命令"},"pgrep":{"n":"pgrep","p":"/pgrep","d":"设置用户的认证信息,包括用户密码、密码过期时间等"},"pidof":{"n":"pidof","p":"/pidof","d":"查找指定名称的进程的进程号ID号"},"pkill":{"n":"pkill","p":"/pkill","d":"可以按照进程名杀死进程"},"spell":{"n":"spell","p":"/spell","d":"对文件进行拼写检查"},"dmesg":{"n":"dmesg","p":"/dmesg","d":"显示Linux系统启动信息"},"uname":{"n":"uname","p":"/uname","d":"显示Linux系统信息"},"pushd":{"n":"pushd","p":"/pushd","d":"将目录加入命令堆叠中"},"diff3":{"n":"diff3","p":"/diff3","d":"比较3个文件不同的地方"},"dhcpd":{"n":"dhcpd","p":"/dhcpd","d":"运行DHCP服务器。"},"quota":{"n":"quota","p":"/quota","d":"显示磁盘已使用的空间与限制"},"clock":{"n":"clock","p":"/clock","d":"用于调整 RTC 时间。"},"unarj":{"n":"unarj","p":"/unarj","d":"解压缩由arj命令创建的压缩包"},"users":{"n":"users","p":"/users","d":"显示当前登录系统的所有用户"},"sleep":{"n":"sleep","p":"/sleep","d":"将目前动作延迟一段时间"},"rexec":{"n":"rexec","p":"/rexec","d":"运程执行Linux系统下命令 "},"skill":{"n":"skill","p":"/skill","d":"向选定的进程发送信号冻结进程"},"rmdir":{"n":"rmdir","p":"/rmdir","d":"用来删除空目录"},"rmmod":{"n":"rmmod","p":"/rmmod","d":"从运行的内核中移除指定的内核模块"},"route":{"n":"route","p":"/route","d":"显示并设置Linux中静态路由表"},"blkid":{"n":"blkid","p":"/blkid","d":"查看块设备的文件系统类型、LABEL、UUID等信息"},"rpmdb":{"n":"rpmdb","p":"/rpmdb","d":"初始化和重建RPM数据库"},"shopt":{"n":"shopt","p":"/shopt","d":"显示和设置shell操作选项"},"rsync":{"n":"rsync","p":"/rsync","d":"远程数据同步工具"},"colrm":{"n":"colrm","p":"/colrm","d":"删除文件中的指定列"},"unset":{"n":"unset","p":"/unset","d":"删除指定的shell变量或函数"},"unzip":{"n":"unzip","p":"/unzip","d":"用于解压缩由zip命令压缩的压缩包"},"vgscan":{"n":"vgscan","p":"/vgscan","d":"扫描并显示系统中的卷组"},"bzless":{"n":"bzless","p":"/bzless","d":"增强.bz2压缩包查看器"},"mpstat":{"n":"mpstat","p":"/mpstat","d":"显示各个可用CPU的状态"},"mtools":{"n":"mtools","p":"/mtools","d":"显示mtools支持的指令"},"ipcalc":{"n":"ipcalc","p":"/ipcalc","d":"简单的IP地址计算器"},"lnstat":{"n":"lnstat","p":"/lnstat","d":"显示Linux系统的网路状态"},"locate":{"n":"locate","p":"/locate","d":"比 find 好用的文件查找工具"},"strace":{"n":"strace","p":"/strace","d":"跟踪系统调用和信号"},"whatis":{"n":"whatis","p":"/whatis","d":"查询一个命令执行什么功能"},"arping":{"n":"arping","p":"/arping","d":"通过发送ARP协议报文测试网络"},"logger":{"n":"logger","p":"/logger","d":"在系统日志中记录相应条目"},"e2fsck":{"n":"e2fsck","p":"/e2fsck","d":"用于检查第二扩展文件系统的完整性"},"indent":{"n":"indent","p":"/indent","d":"格式化C语言的源文件"},"chattr":{"n":"chattr","p":"/chattr","d":"用来改变文件属性"},"startx":{"n":"startx","p":"/startx","d":"用来启动X Window"},"chroot":{"n":"chroot","p":"/chroot","d":"把根目录换成指定的目的目录"},"logout":{"n":"logout","p":"/logout","d":"退出当前登录的Shell"},"gunzip":{"n":"gunzip","p":"/gunzip","d":"用来解压缩文件"},"ulimit":{"n":"ulimit","p":"/ulimit","d":"控制shell程序的资源"},"vmstat":{"n":"vmstat","p":"/vmstat","d":"显示虚拟内存状态"},"syslog":{"n":"syslog","p":"/syslog","d":"系统默认的日志守护进程"},"hdparm":{"n":"hdparm","p":"/hdparm","d":"显示与设定硬盘的参数"},"sysctl":{"n":"sysctl","p":"/sysctl","d":"时动态地修改内核的运行参数"},"finger":{"n":"finger","p":"/finger","d":"用于查找并显示用户信息"},"umount":{"n":"umount","p":"/umount","d":"用于卸载已经加载的文件系统"},"ntsysv":{"n":"ntsysv","p":"/ntsysv","d":"集中管理系统的各种服务"},"telnet":{"n":"telnet","p":"/telnet","d":"登录远程主机和管理(测试ip端口是否连通)"},"hping3":{"n":"hping3","p":"/hping3","d":"测试网络及主机的安全"},"findfs":{"n":"findfs","p":"/findfs","d":"标签或UUID查找文件系统"},"parted":{"n":"parted","p":"/parted","d":"磁盘分区和分区大小调整工具"},"passwd":{"n":"passwd","p":"/passwd","d":"用于让用户可以更改自己的密码"},"telint":{"n":"telint","p":"/telint","d":"切换当前正在运行系统的运行等级"},"iptraf":{"n":"iptraf","p":"/iptraf","d":"实时地监视网卡流量"},"lpstat":{"n":"lpstat","p":"/lpstat","d":"显示CUPS中打印机的状态信息"},"export":{"n":"export","p":"/export","d":"设置或显示系统环境变量"},"lsattr":{"n":"lsattr","p":"/lsattr","d":"查看文件的第二扩展文件系统属性"},"ispell":{"n":"ispell","p":"/ispell","d":"检查文件中出现的拼写错误"},"groups":{"n":"groups","p":"/groups","d":"用来打印指定用户所属的工作组"},"jwhois":{"n":"jwhois","p":"/jwhois","d":"whois 客户端服务"},"printf":{"n":"printf","p":"/printf","d":"格式化并输出结果"},"insmod":{"n":"insmod","p":"/insmod","d":"将给定的模块加载到内核中"},"expand":{"n":"expand","p":"/expand","d":"将文件的制表符转换为空白字符"},"pstack":{"n":"pstack","p":"/pstack","d":"显示每个进程的栈跟踪"},"pstree":{"n":"pstree","p":"/pstree","d":"以树状图的方式展现进程之间的派生关系"},"bzmore":{"n":"bzmore","p":"/bzmore","d":"查看bzip2压缩过的文本文件的内容"},"vdfuse":{"n":"vdfuse","p":"/vdfuse","d":"VirtualBox软件挂载VDI分区文件工具"},"uupick":{"n":"uupick","p":"/uupick","d":"命令处理传送进来的文件。"},"bzdiff":{"n":"bzdiff","p":"/bzdiff","d":"直接比较两个.bz2压缩包中文件的不同"},"pvscan":{"n":"pvscan","p":"/pvscan","d":"扫描系统中所有硬盘的物理卷列表"},"pwconv":{"n":"pwconv","p":"/pwconv","d":"用来开启用户的投影密码"},"ltrace":{"n":"ltrace","p":"/ltrace","d":"用来跟踪进程调用库函数的情况"},"hostid":{"n":"hostid","p":"/hostid","d":"用来打印当前主机的数字化标识"},"whoami":{"n":"whoami","p":"/whoami","d":"打印当前有效的用户名称"},"uucico":{"n":"uucico","p":"/uucico","d":"UUCP文件传输服务程序。"},"source":{"n":"source","p":"/source","d":"在当前Shell环境中从指定文件读取和执行命令,命令返回退出状态。"},"rcconf":{"n":"rcconf","p":"/rcconf","d":"Debian Linux下的运行等级服务配置工具"},"depmod":{"n":"depmod","p":"/depmod","d":"分析可载入模块的相依性"},"accept":{"n":"accept","p":"/accept","d":"指示打印系统接受发往指定目标打印机的打印任务"},"reboot":{"n":"reboot","p":"/reboot","d":"重新启动正在运行的Linux操作系统"},"reject":{"n":"reject","p":"/reject","d":"指示打印系统拒绝发往指定目标打印机的打印任务"},"rename":{"n":"rename","p":"/rename","d":"用字符串替换的方式批量改变文件名"},"renice":{"n":"renice","p":"/renice","d":"修改正在运行的进程的调度优先级"},"resize":{"n":"resize","p":"/resize","d":"命令设置终端机视窗的大小。"},"lvscan":{"n":"lvscan","p":"/lvscan","d":"扫描逻辑卷"},"swapon":{"n":"swapon","p":"/swapon","d":"激活Linux系统中交换空间"},"enable":{"n":"enable","p":"/enable","d":"启动或关闭shell内建命令"},"iostat":{"n":"iostat","p":"/iostat","d":"监视系统输入输出设备和CPU的使用情况"},"rlogin":{"n":"rlogin","p":"/rlogin","d":"从当前终端登录到远程Linux主机"},"cancel":{"n":"cancel","p":"/cancel","d":"取消已存在的打印任务"},"elinks":{"n":"elinks","p":"/elinks","d":"纯文本界面的WWW浏览器"},"md5sum":{"n":"md5sum","p":"/md5sum","d":"计算和校验文件报文摘要的工具程序"},"ifdown":{"n":"ifdown","p":"/ifdown","d":"禁用指定的网络接口"},"ifstat":{"n":"ifstat","p":"/ifstat","d":"统计网络接口流量状态"},"mke2fs":{"n":"mke2fs","p":"/mke2fs","d":"创建磁盘分区上的“etc2/etc3”文件系统"},"bzgrep":{"n":"bzgrep","p":"/bzgrep","d":"使用正则表达式搜索.bz2压缩包中文件"},"unlink":{"n":"unlink","p":"/unlink","d":"系统调用函数unlink去删除指定的文件"},"csplit":{"n":"csplit","p":"/csplit","d":"将一个大文件分割成小的碎片文件"},"ftpwho":{"n":"ftpwho","p":"/ftpwho","d":"显示当前每个ftp会话信息"},"ftptop":{"n":"ftptop","p":"/ftptop","d":"proftpd服务器的连接状态"},"uptime":{"n":"uptime","p":"/uptime","d":"查看Linux系统负载信息"},"screen":{"n":"screen","p":"/screen","d":"用于命令行终端切换"},"seinfo":{"n":"seinfo","p":"/seinfo","d":"查询SELinux的策略提供多少相关规则"},"mkswap":{"n":"mkswap","p":"/mkswap","d":"建立和设置SWAP交换分区"},"setsid":{"n":"setsid","p":"/setsid","d":"在新的会话中运行程序。"},"mktemp":{"n":"mktemp","p":"/mktemp","d":"创建临时文件供shell脚本使用"},"setpci":{"n":"setpci","p":"/setpci","d":"查询和配置PCI设备的使用工具"},"strings":{"n":"strings","p":"/strings","d":"在对象文件或二进制文件中查找可打印的字符串"},"setfacl":{"n":"setfacl","p":"/setfacl","d":"设置文件访问控制列表"},"service":{"n":"service","p":"/service","d":"控制系统服务的实用工具"},"crontab":{"n":"crontab","p":"/crontab","d":"提交和管理用户的需要周期性执行的任务"},"useradd":{"n":"useradd","p":"/useradd","d":"创建的新的系统用户"},"rpmsign":{"n":"rpmsign","p":"/rpmsign","d":"使用RPM软件包的签名管理工具"},"userdel":{"n":"userdel","p":"/userdel","d":"用于删除给定的用户以及与用户相关的文件"},"usermod":{"n":"usermod","p":"/usermod","d":"用于修改用户的基本信息"},"slabtop":{"n":"slabtop","p":"/slabtop","d":"实时显示内核slab内存缓存信息"},"declare":{"n":"declare","p":"/declare","d":"声明或显示shell变量"},"slocate":{"n":"slocate","p":"/slocate","d":"命令查找文件或目录"},"restore":{"n":"restore","p":"/restore","d":"所进行的操作和dump指令相反"},"readelf":{"n":"readelf","p":"/readelf","d":"用于显示elf格式文件的信息"},"quotaon":{"n":"quotaon","p":"/quotaon","d":"激活Linux内核中指定文件系统的磁盘配额功能"},"dirname":{"n":"dirname","p":"/dirname","d":"去除文件名中的非目录部分"},"ppp-off":{"n":"ppp-off","p":"/ppp-off","d":"关闭ppp连线"},"pathchk":{"n":"pathchk","p":"/pathchk","d":"检查文件中不可移植的部分"},"openssl":{"n":"openssl","p":"/openssl","d":"强大的安全套接字层密码库"},"unalias":{"n":"unalias","p":"/unalias","d":"删除由alias设置的别名"},"objdump":{"n":"objdump","p":"/objdump","d":"显示二进制文件信息"},"ssh-add":{"n":"ssh-add","p":"/ssh-add","d":"把专用密钥添加到ssh-agent的高速缓存中"},"ntpdate":{"n":"ntpdate","p":"/ntpdate","d":"使用网络计时协议(NTP)设置日期和时间"},"nologin":{"n":"nologin","p":"/nologin","d":"拒绝用户登录系统"},"volname":{"n":"volname","p":"/volname","d":"显示指定的ISO-9660格式的设备的卷名称"},"nfsstat":{"n":"nfsstat","p":"/nfsstat","d":"列出NFS客户端和服务器的工作状态"},"netstat":{"n":"netstat","p":"/netstat","d":"查看Linux中网络系统状态信息"},"nethogs":{"n":"nethogs","p":"/nethogs","d":"终端下的网络流量监控工具"},"whereis":{"n":"whereis","p":"/whereis","d":"查找二进制程序、代码等相关文件路径"},"command":{"n":"command","p":"/command","d":"调用并执行指定的命令"},"e2label":{"n":"e2label","p":"/e2label","d":"设置第二扩展文件系统的卷标"},"edquota":{"n":"edquota","p":"/edquota","d":"用于编辑指定用户或工作组磁盘配额"},"mkisofs":{"n":"mkisofs","p":"/mkisofs","d":"建立ISO 9660映像文件"},"builtin":{"n":"builtin","p":"/builtin","d":"执行shell内部命令"},"swapoff":{"n":"swapoff","p":"/swapoff","d":"关闭指定的交换空间"},"ethtool":{"n":"ethtool","p":"/ethtool","d":"显示或修改以太网卡的配置信息"},"lpadmin":{"n":"lpadmin","p":"/lpadmin","d":"配置CUPS套件中的打印机和类"},"losetup":{"n":"losetup","p":"/losetup","d":"设定与控制循环(loop)设备"},"logsave":{"n":"logsave","p":"/logsave","d":"将命令的输出信息保存到指定的日志文件"},"bunzip2":{"n":"bunzip2","p":"/bunzip2","d":"创一个bz2文件压缩包"},"systool":{"n":"systool","p":"/systool","d":"显示基于总线、类和拓扑显示系统中设备的信息"},"logname":{"n":"logname","p":"/logname","d":"用来显示用户名称"},"ftpshut":{"n":"ftpshut","p":"/ftpshut","d":"在指定的时间关闭FTP服务器"},"lftpget":{"n":"lftpget","p":"/lftpget","d":"调用lftp指令下载指定的文件"},"lastlog":{"n":"lastlog","p":"/lastlog","d":"显示系统中所有用户最近一次登录信息"},"tcpdump":{"n":"tcpdump","p":"/tcpdump","d":"一款sniffer工具,是Linux上的抓包工具,嗅探器。"},"killall":{"n":"killall","p":"/killall","d":"使用进程的名称来杀死一组进程"},"gpasswd":{"n":"gpasswd","p":"/gpasswd","d":"Linux下工作组文件的管理工具"},"apt-key":{"n":"apt-key","p":"/apt-key","d":"管理Debian Linux系统中的软件包密钥"},"apt-get":{"n":"apt-get","p":"/apt-get","d":"Debian Linux发行版中的APT软件包管理工具"},"apropos":{"n":"apropos","p":"/apropos","d":"在 whatis 数据库中查找字符串"},"grpconv":{"n":"grpconv","p":"/grpconv","d":"用来开启群组的投影密码"},"install":{"n":"install","p":"/install","d":"安装或升级软件或备份数据"},"zipinfo":{"n":"zipinfo","p":"/zipinfo","d":"用来列出压缩文件信息"},"hwclock":{"n":"hwclock","p":"/hwclock","d":"显示与设定硬件时钟"},"hexdump":{"n":"hexdump","p":"/hexdump","d":"显示文件十六进制格式"},"history":{"n":"history","p":"/history","d":"用于显示历史命令"},"iptstate":{"n":"iptstate","p":"/iptstate","d":"显示iptables的工作状态"},"arpwatch":{"n":"arpwatch","p":"/arpwatch","d":"监听网络上ARP的记录"},"pvchange":{"n":"pvchange","p":"/pvchange","d":"修改物理卷属性"},"diffstat":{"n":"diffstat","p":"/diffstat","d":"显示diff命令输出信息的柱状图"},"pvcreate":{"n":"pvcreate","p":"/pvcreate","d":"将物理硬盘分区初始化为物理卷"},"basename":{"n":"basename","p":"/basename","d":"打印目录或者文件的基本名称"},"pvremove":{"n":"pvremove","p":"/pvremove","d":"删除一个存在的物理卷"},"lvremove":{"n":"lvremove","p":"/lvremove","d":"删除指定LVM逻辑卷"},"ldconfig":{"n":"ldconfig","p":"/ldconfig","d":"动态链接库管理命令"},"shutdown":{"n":"shutdown","p":"/shutdown","d":"用来执行系统关机的命令"},"dhcrelay":{"n":"dhcrelay","p":"/dhcrelay","d":"使用dhcrelay命令可以提供中继DHCP和BOOTP请求"},"mkinitrd":{"n":"mkinitrd","p":"/mkinitrd","d":"建立要载入ramdisk的映像文件"},"zipsplit":{"n":"zipsplit","p":"/zipsplit","d":"将较大的zip压缩包分割成各个较小的压缩包"},"logwatch":{"n":"logwatch","p":"/logwatch","d":"可定制和可插入式的日志监视系统"},"unexpand":{"n":"unexpand","p":"/unexpand","d":"将文件的空白字符转换为制表符"},"groupmod":{"n":"groupmod","p":"/groupmod","d":"更改群组识别码或名称"},"nslookup":{"n":"nslookup","p":"/nslookup","d":"查询域名DNS信息的工具"},"quotaoff":{"n":"quotaoff","p":"/quotaoff","d":"关闭Linux内核中指定文件系统的磁盘配额功能"},"groupdel":{"n":"groupdel","p":"/groupdel","d":"用于删除指定的工作组"},"modprobe":{"n":"modprobe","p":"/modprobe","d":"自动处理可载入模块"},"dhclient":{"n":"dhclient","p":"/dhclient","d":"动态获取或释放IP地址"},"lvcreate":{"n":"lvcreate","p":"/lvcreate","d":"用于创建LVM的逻辑卷"},"groupadd":{"n":"groupadd","p":"/groupadd","d":"用于创建一个新的工作组"},"readonly":{"n":"readonly","p":"/readonly","d":"定义只读shell变量或函数"},"lvextend":{"n":"lvextend","p":"/lvextend","d":"扩展逻辑卷空间"},"lvreduce":{"n":"lvreduce","p":"/lvreduce","d":"收缩逻辑卷空间"},"vgrename":{"n":"vgrename","p":"/vgrename","d":"使用vgrename命令可以重命名卷组的名称。"},"htdigest":{"n":"htdigest","p":"/htdigest","d":"Apache服务器内置工具"},"blockdev":{"n":"blockdev","p":"/blockdev","d":"从命令行调用区块设备控制程序"},"repquota":{"n":"repquota","p":"/repquota","d":"报表的格式输出磁盘空间限制的状态"},"lvresize":{"n":"lvresize","p":"/lvresize","d":"调整逻辑卷空间大小"},"xlsfonts":{"n":"xlsfonts","p":"/xlsfonts","d":"列出X Server使用的字体"},"chpasswd":{"n":"chpasswd","p":"/chpasswd","d":"批量更新用户口令的工具"},"ftpcount":{"n":"ftpcount","p":"/ftpcount","d":"显示目前已FTP登入的用户人数"},"vgremove":{"n":"vgremove","p":"/vgremove","d":"用于用户删除LVM卷组"},"hostname":{"n":"hostname","p":"/hostname","d":"显示和设置系统的主机名"},"exportfs":{"n":"exportfs","p":"/exportfs","d":"管理NFS共享文件系统列表"},"bmodinfo":{"n":"bmodinfo","p":"/bmodinfo","d":"显示给定模块的详细信息"},"vgreduce":{"n":"vgreduce","p":"/vgreduce","d":"从卷组中删除物理卷"},"dpkg-deb":{"n":"dpkg-deb","p":"/dpkg-deb","d":"Debian Linux下的软件包管理工具"},"mailstat":{"n":"mailstat","p":"/mailstat","d":"显示到达的邮件状态"},"dos2unix":{"n":"dos2unix","p":"/dos2unix","d":"将DOS格式文本文件转换成Unix格式"},"htpasswd":{"n":"htpasswd","p":"/htpasswd","d":"apache服务器创建密码认证文件"},"rpm2cpio":{"n":"rpm2cpio","p":"/rpm2cpio","d":"将RPM软件包转换为cpio格式的文件"},"rpmbuild":{"n":"rpmbuild","p":"/rpmbuild","d":"创建RPM的二进制软件包和源码软件包"},"vgextend":{"n":"vgextend","p":"/vgextend","d":"向卷组中添加物理卷"},"rpmquery":{"n":"rpmquery","p":"/rpmquery","d":"从RPM数据库中查询软件包信息"},"vgcreate":{"n":"vgcreate","p":"/vgcreate","d":"用于创建LVM卷组"},"poweroff":{"n":"poweroff","p":"/poweroff","d":"关闭Linux系统,关闭记录会被写入到/var/log/wtmp日志文件中。"},"iptables":{"n":"iptables","p":"/iptables","d":"Linux上常用的防火墙软件"},"cdrecord":{"n":"cdrecord","p":"/cdrecord","d":"Linux系统下光盘刻录功能命令"},"vgchange":{"n":"vgchange","p":"/vgchange","d":"修改卷组属性"},"runlevel":{"n":"runlevel","p":"/runlevel","d":"打印当前Linux系统的运行等级"},"xlsatoms":{"n":"xlsatoms","p":"/xlsatoms","d":"列出X服务器内部所有定义的原子成分"},"protoize":{"n":"protoize","p":"/protoize","d":"GNU-C代码转换为ANSI-C代码"},"ifconfig":{"n":"ifconfig","p":"/ifconfig","d":"配置和显示Linux系统网卡的网络参数"},"updatedb":{"n":"updatedb","p":"/updatedb","d":"创建或更新slocate命令所必需的数据库文件"},"tempfile":{"n":"tempfile","p":"/tempfile","d":"shell中给临时文件命名"},"mii-tool":{"n":"mii-tool","p":"/mii-tool","d":"配置网络设备协商方式的工具"},"semanage":{"n":"semanage","p":"/semanage","d":"默认目录的安全上下文查询与修改"},"sendmail":{"n":"sendmail","p":"/sendmail","d":"著名电子邮件服务器"},"compress":{"n":"compress","p":"/compress","d":"使用Lempress-Ziv编码压缩数据文件"},"newusers":{"n":"newusers","p":"/newusers","d":"用于批处理的方式一次创建多个命令"},"sesearch":{"n":"sesearch","p":"/sesearch","d":"查询SELinux策略的规则详情"},"aptitude":{"n":"aptitude","p":"/aptitude","d":"Debian Linux系统中软件包管理工具"},"pwunconv":{"n":"pwunconv","p":"/pwunconv","d":"用来关闭用户的投影密码"},"dircolors":{"n":"dircolors","p":"/dircolors","d":"置ls命令在显示目录或文件时所用的色彩"},"getsebool":{"n":"getsebool","p":"/getsebool","d":"查询SElinux策略内各项规则的布尔值"},"systemctl":{"n":"systemctl","p":"/systemctl","d":"系统服务管理器指令"},"fishshell":{"n":"fishshell","p":"/fishshell","d":"比 bash 更好用的 shell"},"chkconfig":{"n":"chkconfig","p":"/chkconfig","d":"检查或设置系统的各种服务"},"logrotate":{"n":"logrotate","p":"/logrotate","d":"统日志进行轮转、压缩和删除"},"lvdisplay":{"n":"lvdisplay","p":"/lvdisplay","d":"显示逻辑卷属性"},"mysqldump":{"n":"mysqldump","p":"/mysqldump","d":"MySQL数据库中备份工具"},"ssh-agent":{"n":"ssh-agent","p":"/ssh-agent","d":"ssh密钥管理器"},"mysqlshow":{"n":"mysqlshow","p":"/mysqlshow","d":"显示MySQL中数据库相关信息"},"grpunconv":{"n":"grpunconv","p":"/grpunconv","d":"用来关闭群组的投影密码"},"smbpasswd":{"n":"smbpasswd","p":"/smbpasswd","d":"samba用户和密码管理工具"},"arptables":{"n":"arptables","p":"/arptables","d":"管理ARP包过滤规则表"},"smbclient":{"n":"smbclient","p":"/smbclient","d":"交互方式访问samba服务器"},"showmount":{"n":"showmount","p":"/showmount","d":"显示NFS服务器加载的信息"},"clockdiff":{"n":"clockdiff","p":"/clockdiff","d":"检测两台linux主机的时间差"},"badblocks":{"n":"badblocks","p":"/badblocks","d":"查找磁盘中损坏的区块"},"ip6tables":{"n":"ip6tables","p":"/ip6tables","d":"linux中防火墙软件"},"setsebool":{"n":"setsebool","p":"/setsebool","d":"修改SElinux策略内各项规则的布尔值"},"apachectl":{"n":"apachectl","p":"/apachectl","d":"Apache服务器前端控制工具"},"rpmverify":{"n":"rpmverify","p":"/rpmverify","d":"验证已安装的RPM软件包的正确性"},"partprobe":{"n":"partprobe","p":"/partprobe","d":"不重启的情况下重读分区"},"tcpreplay":{"n":"tcpreplay","p":"/tcpreplay","d":"将PCAP包重新发送,用于性能或者功能测试"},"vgdisplay":{"n":"vgdisplay","p":"/vgdisplay","d":"显示LVM卷组的信息"},"vgconvert":{"n":"vgconvert","p":"/vgconvert","d":"转换卷组元数据格式"},"dmidecode":{"n":"dmidecode","p":"/dmidecode","d":"在Linux系统下获取有关硬件方面的信息"},"pvdisplay":{"n":"pvdisplay","p":"/pvdisplay","d":"显示物理卷的属性"},"tracepath":{"n":"tracepath","p":"/tracepath","d":"追踪目的主机经过的路由信息"},"uncompress":{"n":"uncompress","p":"/uncompress","d":"用来解压.Z文件"},"quotacheck":{"n":"quotacheck","p":"/quotacheck","d":"检查磁盘的使用空间与限制"},"traceroute":{"n":"traceroute","p":"/traceroute","d":"显示数据包到主机间的路径"},"usernetctl":{"n":"usernetctl","p":"/usernetctl","d":"被允许时操作指定的网络接口"},"domainname":{"n":"domainname","p":"/domainname","d":"显示和设置系统的NIS域名"},"getenforce":{"n":"getenforce","p":"/getenforce","d":"显示当前SELinux的应用模式,是强制、执行还是停用。"},"cupsenable":{"n":"cupsenable","p":"/cupsenable","d":"启动指定的打印机"},"get_module":{"n":"get_module","p":"/get_module","d":"获取Linux内核模块的详细信息"},"dpkg-query":{"n":"dpkg-query","p":"/dpkg-query","d":"Debian Linux中软件包的查询工具"},"ssh-keygen":{"n":"ssh-keygen","p":"/ssh-keygen","d":"为ssh生成、管理和转换认证密钥"},"dpkg-split":{"n":"dpkg-split","p":"/dpkg-split","d":"Debian Linux中将大软件包分割成小包"},"mkbootdisk":{"n":"mkbootdisk","p":"/mkbootdisk","d":"可建立目前系统的启动盘"},"unprotoize":{"n":"unprotoize","p":"/unprotoize","d":"删除C语言源代码文件中的函数原型"},"restorecon":{"n":"restorecon","p":"/restorecon","d":"恢复文件的安全上下文"},"mysqladmin":{"n":"mysqladmin","p":"/mysqladmin","d":"MySQL服务器管理客户端"},"xlsclients":{"n":"xlsclients","p":"/xlsclients","d":"列出显示器中的客户端应用程序"},"mysqlimport":{"n":"mysqlimport","p":"/mysqlimport","d":"为MySQL服务器用命令行方式导入数据"},"squidclient":{"n":"squidclient","p":"/squidclient","d":"squid服务器的客户端管理工具"},"sftp-server":{"n":"sftp-server","p":"/sftp-server","d":"sftp协议的服务器端程序"},"consoletype":{"n":"consoletype","p":"/consoletype","d":"输出已连接的终端类型"},"lsb_release":{"n":"lsb_release","p":"/lsb_release","d":"显示发行版本信息"},"ssh-copy-id":{"n":"ssh-copy-id","p":"/ssh-copy-id","d":"把本地的ssh公钥文件安装到远程主机对应的账户下"},"supervisord":{"n":"supervisord","p":"/supervisord","d":"配置后台服务/常驻进程的进程管家工具"},"cupsdisable":{"n":"cupsdisable","p":"/cupsdisable","d":"停止指定的打印机"},"dpkg-divert":{"n":"dpkg-divert","p":"/dpkg-divert","d":"Debian Linux中创建并管理一个转向列表"},"inotifywait":{"n":"inotifywait","p":"/inotifywait","d":"异步文件系统监控机制"},"ssh-keyscan":{"n":"ssh-keyscan","p":"/ssh-keyscan","d":"收集主机公钥的使用工具"},"dpkg-trigger":{"n":"dpkg-trigger","p":"/dpkg-trigger","d":"Debian Linux下的软件包触发器"},"apt-sortpkgs":{"n":"apt-sortpkgs","p":"/apt-sortpkgs","d":"Debian Linux下对软件包索引文件进行排序的工具"},"convertquota":{"n":"convertquota","p":"/convertquota","d":"把老的配额文件转换为新的格式"},"ypdomainname":{"n":"ypdomainname","p":"/ypdomainname","d":"显示主机的NIS的域名"},"bzip2recover":{"n":"bzip2recover","p":"/bzip2recover","d":"恢复被破坏的.bz2压缩包中的文件"},"firewall-cmd":{"n":"firewall-cmd","p":"/firewall-cmd","d":"Linux上新用的防火墙软件,跟iptables差不多的工具。"},"kernelversion":{"n":"kernelversion","p":"/kernelversion","d":"打印当前内核的主版本号"},"iptables-save":{"n":"iptables-save","p":"/iptables-save","d":"备份iptables的表配置"},"nisdomainname":{"n":"nisdomainname","p":"/nisdomainname","d":"显示主机NIS的域名"},"speedtest-cli":{"n":"speedtest-cli","p":"/speedtest-cli","d":"命令行下测试服务器外网速度"},"dnsdomainname":{"n":"dnsdomainname","p":"/dnsdomainname","d":"定义DNS系统中FQDN名称的域名"},"ip6tables-save":{"n":"ip6tables-save","p":"/ip6tables-save","d":"保存ip6tables表配置"},"named-checkzone":{"n":"named-checkzone","p":"/named-checkzone","d":"使用named-checkzone命令可以进行区域文件有效性检查和转换,必须指定区域名称和区域文件名称。"},"iptables-restore":{"n":"iptables-restore","p":"/iptables-restore","d":"还原iptables表的配置"},"dpkg-reconfigure":{"n":"dpkg-reconfigure","p":"/dpkg-reconfigure","d":"Debian Linux中重新配制一个已经安装的软件包"},"ip6tables-restore":{"n":"ip6tables-restore","p":"/ip6tables-restore","d":"还原ip6tables表"},"dpkg-statoverride":{"n":"dpkg-statoverride","p":"/dpkg-statoverride","d":"Debian Linux中覆盖文件的所有权和模式"},"dpkg-preconfigure":{"n":"dpkg-preconfigure","p":"/dpkg-preconfigure","d":"Debian Linux中软件包安装之前询问问题"}}
\ No newline at end of file
+{"ab":{"n":"ab","p":"/ab","d":"Apache服务器的性能测试工具"},"accept":{"n":"accept","p":"/accept","d":"指示打印系统接受发往指定目标打印机的打印任务"},"ack":{"n":"ack","p":"/ack","d":"比grep好用的文本搜索工具"},"alias":{"n":"alias","p":"/alias","d":"用来设置指令的别名"},"apachectl":{"n":"apachectl","p":"/apachectl","d":"Apache服务器前端控制工具"},"apk":{"n":"apk","p":"/apk","d":"Alpine Linux 下的包管理工具"},"apropos":{"n":"apropos","p":"/apropos","d":"在 whatis 数据库中查找字符串"},"apt-get":{"n":"apt-get","p":"/apt-get","d":"Debian Linux发行版中的APT软件包管理工具"},"apt-key":{"n":"apt-key","p":"/apt-key","d":"管理Debian Linux系统中的软件包密钥"},"apt-sortpkgs":{"n":"apt-sortpkgs","p":"/apt-sortpkgs","d":"Debian Linux下对软件包索引文件进行排序的工具"},"aptitude":{"n":"aptitude","p":"/aptitude","d":"Debian Linux系统中软件包管理工具"},"ar":{"n":"ar","p":"/ar","d":"建立或修改备存文件,或是从备存文件中抽取文件"},"arch":{"n":"arch","p":"/arch","d":"显示当前主机的硬件架构类型"},"arj":{"n":"arj","p":"/arj","d":"用于创建和管理.arj压缩包"},"arp":{"n":"arp","p":"/arp","d":"显示和修改IP到MAC转换表"},"arpd":{"n":"arpd","p":"/arpd","d":"收集免费ARP信息"},"arping":{"n":"arping","p":"/arping","d":"通过发送ARP协议报文测试网络"},"arptables":{"n":"arptables","p":"/arptables","d":"管理ARP包过滤规则表"},"arpwatch":{"n":"arpwatch","p":"/arpwatch","d":"监听网络上ARP的记录"},"as":{"n":"as","p":"/as","d":"汇编语言编译器"},"at":{"n":"at","p":"/at","d":"在指定时间执行一个任务"},"atop":{"n":"atop","p":"/atop","d":"监控Linux系统资源与进程的工具"},"atq":{"n":"atq","p":"/atq","d":"列出当前用户的at任务列表"},"atrm":{"n":"atrm","p":"/atrm","d":"删除待执行任务队列中的指定任务"},"awk":{"n":"awk","p":"/awk","d":"文本和数据进行处理的编程语言"},"axel":{"n":"axel","p":"/axel","d":"多线程下载工具"},"badblocks":{"n":"badblocks","p":"/badblocks","d":"查找磁盘中损坏的区块"},"basename":{"n":"basename","p":"/basename","d":"打印目录或者文件的基本名称"},"batch":{"n":"batch","p":"/batch","d":"在系统不繁忙的时候执行定时任务"},"bc":{"n":"bc","p":"/bc","d":"算术操作精密运算工具"},"bg":{"n":"bg","p":"/bg","d":"用于将作业放到后台运行"},"bind":{"n":"bind","p":"/bind","d":"显示或设置键盘按键与其相关的功能"},"blkid":{"n":"blkid","p":"/blkid","d":"查看块设备的文件系统类型、LABEL、UUID等信息"},"blockdev":{"n":"blockdev","p":"/blockdev","d":"从命令行调用区块设备控制程序"},"bmodinfo":{"n":"bmodinfo","p":"/bmodinfo","d":"显示给定模块的详细信息"},"builtin":{"n":"builtin","p":"/builtin","d":"执行shell内部命令"},"bunzip2":{"n":"bunzip2","p":"/bunzip2","d":"创一个bz2文件压缩包"},"bye":{"n":"bye","p":"/bye","d":"命令用于中断FTP连线并结束程序。。"},"bzcat":{"n":"bzcat","p":"/bzcat","d":"解压缩指定的.bz2文件"},"bzcmp":{"n":"bzcmp","p":"/bzcmp","d":"比较两个压缩包中的文件"},"bzdiff":{"n":"bzdiff","p":"/bzdiff","d":"直接比较两个.bz2压缩包中文件的不同"},"bzgrep":{"n":"bzgrep","p":"/bzgrep","d":"使用正则表达式搜索.bz2压缩包中文件"},"bzip2":{"n":"bzip2","p":"/bzip2","d":"将文件压缩成bz2格式"},"bzip2recover":{"n":"bzip2recover","p":"/bzip2recover","d":"恢复被破坏的.bz2压缩包中的文件"},"bzless":{"n":"bzless","p":"/bzless","d":"增强.bz2压缩包查看器"},"bzmore":{"n":"bzmore","p":"/bzmore","d":"查看bzip2压缩过的文本文件的内容"},"cal":{"n":"cal","p":"/cal","d":"显示当前日历或指定日期的日历"},"cancel":{"n":"cancel","p":"/cancel","d":"取消已存在的打印任务"},"cat":{"n":"cat","p":"/cat","d":"连接文件并打印到标准输出设备上"},"cd":{"n":"cd","p":"/cd","d":"切换用户当前工作目录"},"cdrecord":{"n":"cdrecord","p":"/cdrecord","d":"Linux系统下光盘刻录功能命令"},"chage":{"n":"chage","p":"/chage","d":"修改帐号和密码的有效期限"},"chattr":{"n":"chattr","p":"/chattr","d":"用来改变文件属性"},"chcon":{"n":"chcon","p":"/chcon","d":"修改对象(文件)的安全上下文"},"chfn":{"n":"chfn","p":"/chfn","d":"用来改变finger命令显示的信息"},"chgrp":{"n":"chgrp","p":"/chgrp","d":"用来变更文件或目录的所属群组"},"chkconfig":{"n":"chkconfig","p":"/chkconfig","d":"检查或设置系统的各种服务"},"chmod":{"n":"chmod","p":"/chmod","d":"用来变更文件或目录的权限"},"chown":{"n":"chown","p":"/chown","d":"用来变更文件或目录的拥有者或所属群组"},"chpasswd":{"n":"chpasswd","p":"/chpasswd","d":"批量更新用户口令的工具"},"chroot":{"n":"chroot","p":"/chroot","d":"把根目录换成指定的目的目录"},"chsh":{"n":"chsh","p":"/chsh","d":"用来更换登录系统时使用的shell"},"cksum":{"n":"cksum","p":"/cksum","d":"检查文件的CRC是否正确"},"clear":{"n":"clear","p":"/clear","d":"清除当前屏幕终端上的任何信息"},"clock":{"n":"clock","p":"/clock","d":"用于调整 RTC 时间。"},"clockdiff":{"n":"clockdiff","p":"/clockdiff","d":"检测两台linux主机的时间差"},"cmp":{"n":"cmp","p":"/cmp","d":"比较两个文件是否有差异"},"col":{"n":"col","p":"/col","d":"过滤控制字符"},"colrm":{"n":"colrm","p":"/colrm","d":"删除文件中的指定列"},"comm":{"n":"comm","p":"/comm","d":"两个文件之间的比较"},"command":{"n":"command","p":"/command","d":"调用并执行指定的命令"},"compress":{"n":"compress","p":"/compress","d":"使用Lempress-Ziv编码压缩数据文件"},"consoletype":{"n":"consoletype","p":"/consoletype","d":"输出已连接的终端类型"},"convertquota":{"n":"convertquota","p":"/convertquota","d":"把老的配额文件转换为新的格式"},"cp":{"n":"cp","p":"/cp","d":"将源文件或目录复制到目标文件或目录中"},"cpio":{"n":"cpio","p":"/cpio","d":"用来建立、还原备份档的工具程序"},"crontab":{"n":"crontab","p":"/crontab","d":"提交和管理用户的需要周期性执行的任务"},"csplit":{"n":"csplit","p":"/csplit","d":"将一个大文件分割成小的碎片文件"},"cu":{"n":"cu","p":"/cu","d":"用于连接另一个系统主机。"},"cupsdisable":{"n":"cupsdisable","p":"/cupsdisable","d":"停止指定的打印机"},"cupsenable":{"n":"cupsenable","p":"/cupsenable","d":"启动指定的打印机"},"curl":{"n":"curl","p":"/curl","d":"利用URL规则在命令行下工作的文件传输工具"},"cut":{"n":"cut","p":"/cut","d":"连接文件并打印到标准输出设备上"},"date":{"n":"date","p":"/date","d":"显示或设置系统时间与日期"},"dd":{"n":"dd","p":"/dd","d":"复制文件并对原文件的内容进行转换和格式化处理"},"declare":{"n":"declare","p":"/declare","d":"声明或显示shell变量"},"depmod":{"n":"depmod","p":"/depmod","d":"分析可载入模块的相依性"},"df":{"n":"df","p":"/df","d":"显示磁盘的相关信息"},"dhclient":{"n":"dhclient","p":"/dhclient","d":"动态获取或释放IP地址"},"dhcpd":{"n":"dhcpd","p":"/dhcpd","d":"运行DHCP服务器。"},"dhcrelay":{"n":"dhcrelay","p":"/dhcrelay","d":"使用dhcrelay命令可以提供中继DHCP和BOOTP请求"},"diff":{"n":"diff","p":"/diff","d":"比较给定的两个文件的不同"},"diff3":{"n":"diff3","p":"/diff3","d":"比较3个文件不同的地方"},"diffstat":{"n":"diffstat","p":"/diffstat","d":"显示diff命令输出信息的柱状图"},"dig":{"n":"dig","p":"/dig","d":"域名查询工具"},"dircolors":{"n":"dircolors","p":"/dircolors","d":"置ls命令在显示目录或文件时所用的色彩"},"dirname":{"n":"dirname","p":"/dirname","d":"去除文件名中的非目录部分"},"dirs":{"n":"dirs","p":"/dirs","d":"显示目录记录"},"dmesg":{"n":"dmesg","p":"/dmesg","d":"显示Linux系统启动信息"},"dmidecode":{"n":"dmidecode","p":"/dmidecode","d":"在Linux系统下获取有关硬件方面的信息"},"dnf":{"n":"dnf","p":"/dnf","d":"新一代的RPM软件包管理器"},"dnsdomainname":{"n":"dnsdomainname","p":"/dnsdomainname","d":"定义DNS系统中FQDN名称的域名"},"domainname":{"n":"domainname","p":"/domainname","d":"显示和设置系统的NIS域名"},"dos2unix":{"n":"dos2unix","p":"/dos2unix","d":"将DOS格式文本文件转换成Unix格式"},"dpkg-deb":{"n":"dpkg-deb","p":"/dpkg-deb","d":"Debian Linux下的软件包管理工具"},"dpkg-divert":{"n":"dpkg-divert","p":"/dpkg-divert","d":"Debian Linux中创建并管理一个转向列表"},"dpkg-preconfigure":{"n":"dpkg-preconfigure","p":"/dpkg-preconfigure","d":"Debian Linux中软件包安装之前询问问题"},"dpkg-query":{"n":"dpkg-query","p":"/dpkg-query","d":"Debian Linux中软件包的查询工具"},"dpkg-reconfigure":{"n":"dpkg-reconfigure","p":"/dpkg-reconfigure","d":"Debian Linux中重新配制一个已经安装的软件包"},"dpkg-split":{"n":"dpkg-split","p":"/dpkg-split","d":"Debian Linux中将大软件包分割成小包"},"dpkg-statoverride":{"n":"dpkg-statoverride","p":"/dpkg-statoverride","d":"Debian Linux中覆盖文件的所有权和模式"},"dpkg-trigger":{"n":"dpkg-trigger","p":"/dpkg-trigger","d":"Debian Linux下的软件包触发器"},"dpkg":{"n":"dpkg","p":"/dpkg","d":"Debian Linux系统上安装、创建和管理软件包"},"dris":{"n":"dris","p":"/dris","d":"显示和清空目录堆栈中的内容"},"dstat":{"n":"dstat","p":"/dstat","d":"通用的系统资源统计工具"},"du":{"n":"du","p":"/du","d":"显示每个文件和目录的磁盘使用空间"},"dump":{"n":"dump","p":"/dump","d":"用于备份ext2或者ext3文件系统"},"e2fsck":{"n":"e2fsck","p":"/e2fsck","d":"用于检查第二扩展文件系统的完整性"},"e2label":{"n":"e2label","p":"/e2label","d":"设置第二扩展文件系统的卷标"},"echo":{"n":"echo","p":"/echo","d":"输出指定的字符串或者变量"},"ed":{"n":"ed","p":"/ed","d":"单行纯文本编辑器"},"edquota":{"n":"edquota","p":"/edquota","d":"用于编辑指定用户或工作组磁盘配额"},"egrep":{"n":"egrep","p":"/egrep","d":"在文件内查找指定的字符串"},"eject":{"n":"eject","p":"/eject","d":"用来退出抽取式设备"},"elinks":{"n":"elinks","p":"/elinks","d":"纯文本界面的WWW浏览器"},"elm":{"n":"elm","p":"/elm","d":"纯文本邮件客户端程序"},"emacs":{"n":"emacs","p":"/emacs","d":"功能强大的全屏文本编辑器"},"enable":{"n":"enable","p":"/enable","d":"启动或关闭shell内建命令"},"env":{"n":"env","p":"/env","d":"显示系统中已存在的环境变量"},"ethtool":{"n":"ethtool","p":"/ethtool","d":"显示或修改以太网卡的配置信息"},"ex":{"n":"ex","p":"/ex","d":"启动vim编辑器的ex编辑模式"},"exec":{"n":"exec","p":"/exec","d":"调用并执行指定的命令"},"exit":{"n":"exit","p":"/exit","d":"退出当前的shell"},"expand":{"n":"expand","p":"/expand","d":"将文件的制表符转换为空白字符"},"export":{"n":"export","p":"/export","d":"设置或显示系统环境变量"},"exportfs":{"n":"exportfs","p":"/exportfs","d":"管理NFS共享文件系统列表"},"expr":{"n":"expr","p":"/expr","d":"一款表达式计算工具"},"fc":{"n":"fc","p":"/fc","d":"修改历史命令并执行"},"fdisk":{"n":"fdisk","p":"/fdisk","d":"查看磁盘使用情况和磁盘分区"},"fg":{"n":"fg","p":"/fg","d":"将后台作业放到前台终端运行"},"fgrep":{"n":"fgrep","p":"/fgrep","d":"为文件搜索文字字符串"},"file":{"n":"file","p":"/file","d":"用来探测给定文件的类型。"},"find":{"n":"find","p":"/find","d":"在指定目录下查找文件"},"findfs":{"n":"findfs","p":"/findfs","d":"标签或UUID查找文件系统"},"finger":{"n":"finger","p":"/finger","d":"用于查找并显示用户信息"},"firewall-cmd":{"n":"firewall-cmd","p":"/firewall-cmd","d":"Linux上新用的防火墙软件,跟iptables差不多的工具。"},"fishshell":{"n":"fishshell","p":"/fishshell","d":"比 bash 更好用的 shell"},"fmt":{"n":"fmt","p":"/fmt","d":"读取文件后优化处理并输出"},"fold":{"n":"fold","p":"/fold","d":"控制文件内容输出时所占用的屏幕宽度"},"free":{"n":"free","p":"/free","d":"显示内存的使用情况"},"fsck":{"n":"fsck","p":"/fsck","d":"检查并且试图修复文件系统中的错误"},"ftp":{"n":"ftp","p":"/ftp","d":"用来设置文件系统相关功能"},"ftpcount":{"n":"ftpcount","p":"/ftpcount","d":"显示目前已FTP登入的用户人数"},"ftpshut":{"n":"ftpshut","p":"/ftpshut","d":"在指定的时间关闭FTP服务器"},"ftptop":{"n":"ftptop","p":"/ftptop","d":"proftpd服务器的连接状态"},"ftpwho":{"n":"ftpwho","p":"/ftpwho","d":"显示当前每个ftp会话信息"},"fuser":{"n":"fuser","p":"/fuser","d":"使用文件或文件结构识别进程"},"gcc":{"n":"gcc","p":"/gcc","d":"基于C/C++的编译器"},"gcov":{"n":"gcov","p":"/gcov","d":"测试程序的代码覆盖率的工具"},"gdb":{"n":"gdb","p":"/gdb","d":"功能强大的程序调试器"},"get_module":{"n":"get_module","p":"/get_module","d":"获取Linux内核模块的详细信息"},"getenforce":{"n":"getenforce","p":"/getenforce","d":"显示当前SELinux的应用模式,是强制、执行还是停用。"},"getsebool":{"n":"getsebool","p":"/getsebool","d":"查询SElinux策略内各项规则的布尔值"},"git":{"n":"git","p":"/git","d":"是目前世界上最先进的分布式版本控制系统"},"gpasswd":{"n":"gpasswd","p":"/gpasswd","d":"Linux下工作组文件的管理工具"},"gpm":{"n":"gpm","p":"/gpm","d":"提供文字模式下的滑鼠事件处理"},"grep":{"n":"grep","p":"/grep","d":"强大的文本搜索工具"},"groupadd":{"n":"groupadd","p":"/groupadd","d":"用于创建一个新的工作组"},"groupdel":{"n":"groupdel","p":"/groupdel","d":"用于删除指定的工作组"},"groupmod":{"n":"groupmod","p":"/groupmod","d":"更改群组识别码或名称"},"groups":{"n":"groups","p":"/groups","d":"用来打印指定用户所属的工作组"},"grpck":{"n":"grpck","p":"/grpck","d":"用于验证组文件的完整性"},"grpconv":{"n":"grpconv","p":"/grpconv","d":"用来开启群组的投影密码"},"grpunconv":{"n":"grpunconv","p":"/grpunconv","d":"用来关闭群组的投影密码"},"grub":{"n":"grub","p":"/grub","d":"多重引导程序grub的命令行shell工具"},"gunzip":{"n":"gunzip","p":"/gunzip","d":"用来解压缩文件"},"gzexe":{"n":"gzexe","p":"/gzexe","d":"用来压缩可执行文件"},"gzip":{"n":"gzip","p":"/gzip","d":"用来压缩文件"},"halt":{"n":"halt","p":"/halt","d":"关闭正在运行的Linux操作系统"},"hdparm":{"n":"hdparm","p":"/hdparm","d":"显示与设定硬盘的参数"},"head":{"n":"head","p":"/head","d":"在屏幕上显示指定文件的开头若干行"},"help":{"n":"help","p":"/help","d":"显示帮助信息"},"hexdump":{"n":"hexdump","p":"/hexdump","d":"显示文件十六进制格式"},"history":{"n":"history","p":"/history","d":"用于显示历史命令"},"host":{"n":"host","p":"/host","d":"常用的分析域名查询工具"},"hostid":{"n":"hostid","p":"/hostid","d":"用来打印当前主机的数字化标识"},"hostname":{"n":"hostname","p":"/hostname","d":"显示和设置系统的主机名"},"hping3":{"n":"hping3","p":"/hping3","d":"测试网络及主机的安全"},"htdigest":{"n":"htdigest","p":"/htdigest","d":"Apache服务器内置工具"},"htop":{"n":"htop","p":"/htop","d":"[非内部命令]一个互动的进程查看器,可以动态观察系统进程状况。"},"htpasswd":{"n":"htpasswd","p":"/htpasswd","d":"apache服务器创建密码认证文件"},"hwclock":{"n":"hwclock","p":"/hwclock","d":"显示与设定硬件时钟"},"iconv":{"n":"iconv","p":"/iconv","d":"转换文件的编码方式"},"id":{"n":"id","p":"/id","d":"显示用户的ID以及所属群组的ID"},"ifcfg":{"n":"ifcfg","p":"/ifcfg","d":"置Linux中的网络接口参数"},"ifconfig":{"n":"ifconfig","p":"/ifconfig","d":"配置和显示Linux系统网卡的网络参数"},"ifdown":{"n":"ifdown","p":"/ifdown","d":"禁用指定的网络接口"},"ifstat":{"n":"ifstat","p":"/ifstat","d":"统计网络接口流量状态"},"iftop":{"n":"iftop","p":"/iftop","d":"一款实时流量监控工具"},"ifup":{"n":"ifup","p":"/ifup","d":"激活指定的网络接口"},"indent":{"n":"indent","p":"/indent","d":"格式化C语言的源文件"},"info":{"n":"info","p":"/info","d":"Linux下info格式的帮助指令"},"init":{"n":"init","p":"/init","d":"init进程是所有Linux进程的父进程"},"inotifywait":{"n":"inotifywait","p":"/inotifywait","d":"异步文件系统监控机制"},"insmod":{"n":"insmod","p":"/insmod","d":"将给定的模块加载到内核中"},"install":{"n":"install","p":"/install","d":"安装或升级软件或备份数据"},"iostat":{"n":"iostat","p":"/iostat","d":"监视系统输入输出设备和CPU的使用情况"},"iotop":{"n":"iotop","p":"/iotop","d":"用来监视磁盘I/O使用状况的工具"},"ip":{"n":"ip","p":"/ip","d":"网络配置工具"},"ip6tables-restore":{"n":"ip6tables-restore","p":"/ip6tables-restore","d":"还原ip6tables表"},"ip6tables-save":{"n":"ip6tables-save","p":"/ip6tables-save","d":"保存ip6tables表配置"},"ip6tables":{"n":"ip6tables","p":"/ip6tables","d":"linux中防火墙软件"},"ipcalc":{"n":"ipcalc","p":"/ipcalc","d":"简单的IP地址计算器"},"ipcrm":{"n":"ipcrm","p":"/ipcrm","d":"删除消息队列、信号集、或者共享内存标识"},"ipcs":{"n":"ipcs","p":"/ipcs","d":"分析消息队列共享内存和信号量 "},"iperf":{"n":"iperf","p":"/iperf","d":"网络性能测试工具"},"iptables-restore":{"n":"iptables-restore","p":"/iptables-restore","d":"还原iptables表的配置"},"iptables-save":{"n":"iptables-save","p":"/iptables-save","d":"备份iptables的表配置"},"iptables":{"n":"iptables","p":"/iptables","d":"Linux上常用的防火墙软件"},"iptraf":{"n":"iptraf","p":"/iptraf","d":"实时地监视网卡流量"},"iptstate":{"n":"iptstate","p":"/iptstate","d":"显示iptables的工作状态"},"ispell":{"n":"ispell","p":"/ispell","d":"检查文件中出现的拼写错误"},"jed":{"n":"jed","p":"/jed","d":"主要用于编辑代码的编辑器"},"jobs":{"n":"jobs","p":"/jobs","d":"显示Linux中的任务列表及任务状态"},"joe":{"n":"joe","p":"/joe","d":"强大的纯文本编辑器"},"join":{"n":"join","p":"/join","d":"两个文件中指定栏位内容相同的行连接起来"},"jwhois":{"n":"jwhois","p":"/jwhois","d":"whois 客户端服务"},"kernelversion":{"n":"kernelversion","p":"/kernelversion","d":"打印当前内核的主版本号"},"kexec":{"n":"kexec","p":"/kexec","d":"从当前正在运行的内核引导到一个新内核"},"kill":{"n":"kill","p":"/kill","d":"删除执行中的程序或工作"},"killall":{"n":"killall","p":"/killall","d":"使用进程的名称来杀死一组进程"},"last":{"n":"last","p":"/last","d":"列出目前与过去登入系统的用户相关信息"},"lastb":{"n":"lastb","p":"/lastb","d":"列出登入系统失败的用户相关信息"},"lastlog":{"n":"lastlog","p":"/lastlog","d":"显示系统中所有用户最近一次登录信息"},"ld":{"n":"ld","p":"/ld","d":"将目标文件连接为可执行程序"},"ldconfig":{"n":"ldconfig","p":"/ldconfig","d":"动态链接库管理命令"},"ldd":{"n":"ldd","p":"/ldd","d":"打印程序或者库文件所依赖的共享库列表"},"less":{"n":"less","p":"/less","d":"分屏上下翻页浏览文件内容"},"let":{"n":"let","p":"/let","d":"简单的计算器"},"lftp":{"n":"lftp","p":"/lftp","d":"优秀的文件客户端程序"},"lftpget":{"n":"lftpget","p":"/lftpget","d":"调用lftp指令下载指定的文件"},"lha":{"n":"lha","p":"/lha","d":"压缩或解压缩lzh格式文件"},"lilo":{"n":"lilo","p":"/lilo","d":"安装核心载入开机管理程序"},"ln":{"n":"ln","p":"/ln","d":"用来为文件创件连接"},"lnstat":{"n":"lnstat","p":"/lnstat","d":"显示Linux系统的网路状态"},"locate":{"n":"locate","p":"/locate","d":"比 find 好用的文件查找工具"},"logger":{"n":"logger","p":"/logger","d":"在系统日志中记录相应条目"},"login":{"n":"login","p":"/login","d":"登录系统或切换用户身份"},"logname":{"n":"logname","p":"/logname","d":"用来显示用户名称"},"logout":{"n":"logout","p":"/logout","d":"退出当前登录的Shell"},"logrotate":{"n":"logrotate","p":"/logrotate","d":"统日志进行轮转、压缩和删除"},"logsave":{"n":"logsave","p":"/logsave","d":"将命令的输出信息保存到指定的日志文件"},"logwatch":{"n":"logwatch","p":"/logwatch","d":"可定制和可插入式的日志监视系统"},"look":{"n":"look","p":"/look","d":"显示文件中以指定字符串开头的任意行"},"losetup":{"n":"losetup","p":"/losetup","d":"设定与控制循环(loop)设备"},"lp":{"n":"lp","p":"/lp","d":"打印文件或修改排队的打印任务"},"lpadmin":{"n":"lpadmin","p":"/lpadmin","d":"配置CUPS套件中的打印机和类"},"lpc":{"n":"lpc","p":"/lpc","d":"命令行方式打印机控制程序"},"lpq":{"n":"lpq","p":"/lpq","d":"显示打印队列中的打印任务的状态信息"},"lpr":{"n":"lpr","p":"/lpr","d":"将文件发送给指定打印机进行打印"},"lprm":{"n":"lprm","p":"/lprm","d":"删除打印队列中的打印任务"},"lpstat":{"n":"lpstat","p":"/lpstat","d":"显示CUPS中打印机的状态信息"},"ls":{"n":"ls","p":"/ls","d":"显示目录内容列表"},"lsattr":{"n":"lsattr","p":"/lsattr","d":"查看文件的第二扩展文件系统属性"},"lsb_release":{"n":"lsb_release","p":"/lsb_release","d":"显示发行版本信息"},"lsblk":{"n":"lsblk","p":"/lsblk","d":"列出块设备信息"},"lscpu":{"n":"lscpu","p":"/lscpu","d":"显示有关CPU架构的信息"},"lsmod":{"n":"lsmod","p":"/lsmod","d":"显示已载入系统的模块"},"lsof":{"n":"lsof","p":"/lsof","d":"显示Linux系统当前已打开的所有文件列表 `lsof -p pid`"},"lspci":{"n":"lspci","p":"/lspci","d":"显示当前主机的所有PCI总线信息"},"lsusb":{"n":"lsusb","p":"/lsusb","d":"显示本机的USB设备列表信息"},"ltrace":{"n":"ltrace","p":"/ltrace","d":"用来跟踪进程调用库函数的情况"},"lvcreate":{"n":"lvcreate","p":"/lvcreate","d":"用于创建LVM的逻辑卷"},"lvdisplay":{"n":"lvdisplay","p":"/lvdisplay","d":"显示逻辑卷属性"},"lvextend":{"n":"lvextend","p":"/lvextend","d":"扩展逻辑卷空间"},"lvreduce":{"n":"lvreduce","p":"/lvreduce","d":"收缩逻辑卷空间"},"lvremove":{"n":"lvremove","p":"/lvremove","d":"删除指定LVM逻辑卷"},"lvresize":{"n":"lvresize","p":"/lvresize","d":"调整逻辑卷空间大小"},"lvscan":{"n":"lvscan","p":"/lvscan","d":"扫描逻辑卷"},"lynx":{"n":"lynx","p":"/lynx","d":"纯文本模式的网页浏览器"},"mail":{"n":"mail","p":"/mail","d":"命令行下发送和接收电子邮件"},"mailq":{"n":"mailq","p":"/mailq","d":"显示待发送的邮件队列"},"mailstat":{"n":"mailstat","p":"/mailstat","d":"显示到达的邮件状态"},"make":{"n":"make","p":"/make","d":"GNU的工程化编译工具"},"man":{"n":"man","p":"/man","d":"查看Linux中的指令帮助"},"md5sum":{"n":"md5sum","p":"/md5sum","d":"计算和校验文件报文摘要的工具程序"},"mesg":{"n":"mesg","p":"/mesg","d":"设置当前终端的写权限"},"mii-tool":{"n":"mii-tool","p":"/mii-tool","d":"配置网络设备协商方式的工具"},"mkbootdisk":{"n":"mkbootdisk","p":"/mkbootdisk","d":"可建立目前系统的启动盘"},"mkdir":{"n":"mkdir","p":"/mkdir","d":"用来创建目录"},"mke2fs":{"n":"mke2fs","p":"/mke2fs","d":"创建磁盘分区上的“etc2/etc3”文件系统"},"mkfs":{"n":"mkfs","p":"/mkfs","d":"用于在设备上创建Linux文件系统"},"mkinitrd":{"n":"mkinitrd","p":"/mkinitrd","d":"建立要载入ramdisk的映像文件"},"mkisofs":{"n":"mkisofs","p":"/mkisofs","d":"建立ISO 9660映像文件"},"mknod":{"n":"mknod","p":"/mknod","d":"创建字符设备文件和块设备文件"},"mkswap":{"n":"mkswap","p":"/mkswap","d":"建立和设置SWAP交换分区"},"mktemp":{"n":"mktemp","p":"/mktemp","d":"创建临时文件供shell脚本使用"},"modprobe":{"n":"modprobe","p":"/modprobe","d":"自动处理可载入模块"},"more":{"n":"more","p":"/more","d":"显示文件内容,每次显示一屏"},"mount":{"n":"mount","p":"/mount","d":"用于挂载Linux系统外的文件。"},"mpstat":{"n":"mpstat","p":"/mpstat","d":"显示各个可用CPU的状态"},"mtools":{"n":"mtools","p":"/mtools","d":"显示mtools支持的指令"},"mv":{"n":"mv","p":"/mv","d":"用来对文件或目录重新命名"},"mysql":{"n":"mysql","p":"/mysql","d":"MySQL服务器客户端工具"},"mysqladmin":{"n":"mysqladmin","p":"/mysqladmin","d":"MySQL服务器管理客户端"},"mysqldump":{"n":"mysqldump","p":"/mysqldump","d":"MySQL数据库中备份工具"},"mysqlimport":{"n":"mysqlimport","p":"/mysqlimport","d":"为MySQL服务器用命令行方式导入数据"},"mysqlshow":{"n":"mysqlshow","p":"/mysqlshow","d":"显示MySQL中数据库相关信息"},"named-checkzone":{"n":"named-checkzone","p":"/named-checkzone","d":"使用named-checkzone命令可以进行区域文件有效性检查和转换,必须指定区域名称和区域文件名称。"},"nano":{"n":"nano","p":"/nano","d":"字符终端文本编辑器"},"nc":{"n":"nc","p":"/nc","d":"命令用于设置路由器。"},"ncftp":{"n":"ncftp","p":"/ncftp","d":"是增强的的FTP工具"},"nethogs":{"n":"nethogs","p":"/nethogs","d":"终端下的网络流量监控工具"},"netstat":{"n":"netstat","p":"/netstat","d":"查看Linux中网络系统状态信息"},"newusers":{"n":"newusers","p":"/newusers","d":"用于批处理的方式一次创建多个命令"},"nfsstat":{"n":"nfsstat","p":"/nfsstat","d":"列出NFS客户端和服务器的工作状态"},"ngrep":{"n":"ngrep","p":"/ngrep","d":"方便的数据包匹配和显示工具"},"nice":{"n":"nice","p":"/nice","d":"改变程序执行的优先权等级"},"nisdomainname":{"n":"nisdomainname","p":"/nisdomainname","d":"显示主机NIS的域名"},"nl":{"n":"nl","p":"/nl","d":"在Linux系统中计算文件内容行号"},"nm":{"n":"nm","p":"/nm","d":"显示二进制目标文件的符号表"},"nmap":{"n":"nmap","p":"/nmap","d":"网络探测和安全审核"},"nmcli":{"n":"nmcli","p":"/nmcli","d":"地址配置工具"},"nohup":{"n":"nohup","p":"/nohup","d":"将程序以忽略挂起信号的方式运行起来"},"nologin":{"n":"nologin","p":"/nologin","d":"拒绝用户登录系统"},"nslookup":{"n":"nslookup","p":"/nslookup","d":"查询域名DNS信息的工具"},"ntpdate":{"n":"ntpdate","p":"/ntpdate","d":"使用网络计时协议(NTP)设置日期和时间"},"ntsysv":{"n":"ntsysv","p":"/ntsysv","d":"集中管理系统的各种服务"},"objdump":{"n":"objdump","p":"/objdump","d":"显示二进制文件信息"},"od":{"n":"od","p":"/od","d":"输出文件的八进制、十六进制等格式编码的字节"},"openssl":{"n":"openssl","p":"/openssl","d":"强大的安全套接字层密码库"},"parted":{"n":"parted","p":"/parted","d":"磁盘分区和分区大小调整工具"},"partprobe":{"n":"partprobe","p":"/partprobe","d":"不重启的情况下重读分区"},"passwd":{"n":"passwd","p":"/passwd","d":"用于让用户可以更改自己的密码"},"paste":{"n":"paste","p":"/paste","d":"将多个文件按列队列合并"},"patch":{"n":"patch","p":"/patch","d":"为开放源代码软件安装补丁程序"},"pathchk":{"n":"pathchk","p":"/pathchk","d":"检查文件中不可移植的部分"},"perl":{"n":"perl","p":"/perl","d":"perl语言解释器"},"pfctl":{"n":"pfctl","p":"/pfctl","d":"PF防火墙的配置命令"},"pgrep":{"n":"pgrep","p":"/pgrep","d":"设置用户的认证信息,包括用户密码、密码过期时间等"},"php":{"n":"php","p":"/php","d":"PHP语言的命令行接口"},"pico":{"n":"pico","p":"/pico","d":"功能强大全屏幕的文本编辑器"},"pidof":{"n":"pidof","p":"/pidof","d":"查找指定名称的进程的进程号ID号"},"ping":{"n":"ping","p":"/ping","d":"测试主机之间网络的连通性"},"pkill":{"n":"pkill","p":"/pkill","d":"可以按照进程名杀死进程"},"pmap":{"n":"pmap","p":"/pmap","d":"报告进程的内存映射关系"},"popd":{"n":"popd","p":"/popd","d":"用于删除目录栈中的记录"},"poweroff":{"n":"poweroff","p":"/poweroff","d":"关闭Linux系统,关闭记录会被写入到/var/log/wtmp日志文件中。"},"ppp-off":{"n":"ppp-off","p":"/ppp-off","d":"关闭ppp连线"},"pr":{"n":"pr","p":"/pr","d":"将文本文件转换成适合打印的格式"},"printf":{"n":"printf","p":"/printf","d":"格式化并输出结果"},"protoize":{"n":"protoize","p":"/protoize","d":"GNU-C代码转换为ANSI-C代码"},"ps":{"n":"ps","p":"/ps","d":"报告当前系统的进程状态"},"pssh":{"n":"pssh","p":"/pssh","d":"批量管理执行"},"pstack":{"n":"pstack","p":"/pstack","d":"显示每个进程的栈跟踪"},"pstree":{"n":"pstree","p":"/pstree","d":"以树状图的方式展现进程之间的派生关系"},"pushd":{"n":"pushd","p":"/pushd","d":"将目录加入命令堆叠中"},"pv":{"n":"pv","p":"/pv","d":"显示当前在命令行执行的命令的进度信息,管道查看器。"},"pvchange":{"n":"pvchange","p":"/pvchange","d":"修改物理卷属性"},"pvck":{"n":"pvck","p":"/pvck","d":"检测物理卷的LVM元数据的一致性"},"pvcreate":{"n":"pvcreate","p":"/pvcreate","d":"将物理硬盘分区初始化为物理卷"},"pvdisplay":{"n":"pvdisplay","p":"/pvdisplay","d":"显示物理卷的属性"},"pvremove":{"n":"pvremove","p":"/pvremove","d":"删除一个存在的物理卷"},"pvs":{"n":"pvs","p":"/pvs","d":"输出物理卷信息报表"},"pvscan":{"n":"pvscan","p":"/pvscan","d":"扫描系统中所有硬盘的物理卷列表"},"pwck":{"n":"pwck","p":"/pwck","d":"用来验证系统认证文件内容和格式的完整性"},"pwconv":{"n":"pwconv","p":"/pwconv","d":"用来开启用户的投影密码"},"pwd":{"n":"pwd","p":"/pwd","d":"绝对路径方式显示用户当前工作目录"},"pwunconv":{"n":"pwunconv","p":"/pwunconv","d":"用来关闭用户的投影密码"},"quota":{"n":"quota","p":"/quota","d":"显示磁盘已使用的空间与限制"},"quotacheck":{"n":"quotacheck","p":"/quotacheck","d":"检查磁盘的使用空间与限制"},"quotaoff":{"n":"quotaoff","p":"/quotaoff","d":"关闭Linux内核中指定文件系统的磁盘配额功能"},"quotaon":{"n":"quotaon","p":"/quotaon","d":"激活Linux内核中指定文件系统的磁盘配额功能"},"rcconf":{"n":"rcconf","p":"/rcconf","d":"Debian Linux下的运行等级服务配置工具"},"rcp":{"n":"rcp","p":"/rcp","d":"使在两台Linux主机之间的文件复制操作更简单"},"read":{"n":"read","p":"/read","d":"从键盘读取变量值"},"readelf":{"n":"readelf","p":"/readelf","d":"用于显示elf格式文件的信息"},"readonly":{"n":"readonly","p":"/readonly","d":"定义只读shell变量或函数"},"reboot":{"n":"reboot","p":"/reboot","d":"重新启动正在运行的Linux操作系统"},"reject":{"n":"reject","p":"/reject","d":"指示打印系统拒绝发往指定目标打印机的打印任务"},"rename":{"n":"rename","p":"/rename","d":"用字符串替换的方式批量改变文件名"},"renice":{"n":"renice","p":"/renice","d":"修改正在运行的进程的调度优先级"},"repquota":{"n":"repquota","p":"/repquota","d":"报表的格式输出磁盘空间限制的状态"},"resize":{"n":"resize","p":"/resize","d":"命令设置终端机视窗的大小。"},"restore":{"n":"restore","p":"/restore","d":"所进行的操作和dump指令相反"},"restorecon":{"n":"restorecon","p":"/restorecon","d":"恢复文件的安全上下文"},"rev":{"n":"rev","p":"/rev","d":"将文件内容以字符为单位反序输出"},"rexec":{"n":"rexec","p":"/rexec","d":"运程执行Linux系统下命令 "},"rlogin":{"n":"rlogin","p":"/rlogin","d":"从当前终端登录到远程Linux主机"},"rm":{"n":"rm","p":"/rm","d":"用于删除给定的文件和目录"},"rmdir":{"n":"rmdir","p":"/rmdir","d":"用来删除空目录"},"rmmod":{"n":"rmmod","p":"/rmmod","d":"从运行的内核中移除指定的内核模块"},"route":{"n":"route","p":"/route","d":"显示并设置Linux中静态路由表"},"rpm":{"n":"rpm","p":"/rpm","d":"RPM软件包的管理工具"},"rpm2cpio":{"n":"rpm2cpio","p":"/rpm2cpio","d":"将RPM软件包转换为cpio格式的文件"},"rpmbuild":{"n":"rpmbuild","p":"/rpmbuild","d":"创建RPM的二进制软件包和源码软件包"},"rpmdb":{"n":"rpmdb","p":"/rpmdb","d":"初始化和重建RPM数据库"},"rpmquery":{"n":"rpmquery","p":"/rpmquery","d":"从RPM数据库中查询软件包信息"},"rpmsign":{"n":"rpmsign","p":"/rpmsign","d":"使用RPM软件包的签名管理工具"},"rpmverify":{"n":"rpmverify","p":"/rpmverify","d":"验证已安装的RPM软件包的正确性"},"rsh":{"n":"rsh","p":"/rsh","d":"连接远程主机并执行命令"},"rsync":{"n":"rsync","p":"/rsync","d":"远程数据同步工具"},"runlevel":{"n":"runlevel","p":"/runlevel","d":"打印当前Linux系统的运行等级"},"sar":{"n":"sar","p":"/sar","d":"系统运行状态统计工具"},"scp":{"n":"scp","p":"/scp","d":"加密的方式在本地主机和远程主机之间复制文件"},"screen":{"n":"screen","p":"/screen","d":"用于命令行终端切换"},"sed":{"n":"sed","p":"/sed","d":"功能强大的流式文本编辑器"},"seinfo":{"n":"seinfo","p":"/seinfo","d":"查询SELinux的策略提供多少相关规则"},"semanage":{"n":"semanage","p":"/semanage","d":"默认目录的安全上下文查询与修改"},"sendmail":{"n":"sendmail","p":"/sendmail","d":"著名电子邮件服务器"},"seq":{"n":"seq","p":"/seq","d":"以指定增量从首数开始打印数字到尾数"},"service":{"n":"service","p":"/service","d":"控制系统服务的实用工具"},"sesearch":{"n":"sesearch","p":"/sesearch","d":"查询SELinux策略的规则详情"},"set":{"n":"set","p":"/set","d":"显示或设置shell特性及shell变量"},"setfacl":{"n":"setfacl","p":"/setfacl","d":"设置文件访问控制列表"},"setpci":{"n":"setpci","p":"/setpci","d":"查询和配置PCI设备的使用工具"},"setsebool":{"n":"setsebool","p":"/setsebool","d":"修改SElinux策略内各项规则的布尔值"},"setsid":{"n":"setsid","p":"/setsid","d":"在新的会话中运行程序。"},"sftp-server":{"n":"sftp-server","p":"/sftp-server","d":"sftp协议的服务器端程序"},"sftp":{"n":"sftp","p":"/sftp","d":"交互式的文件传输程序"},"sh":{"n":"sh","p":"/sh","d":"shell命令解释器"},"shopt":{"n":"shopt","p":"/shopt","d":"显示和设置shell操作选项"},"showmount":{"n":"showmount","p":"/showmount","d":"显示NFS服务器加载的信息"},"shutdown":{"n":"shutdown","p":"/shutdown","d":"用来执行系统关机的命令"},"skill":{"n":"skill","p":"/skill","d":"向选定的进程发送信号冻结进程"},"slabtop":{"n":"slabtop","p":"/slabtop","d":"实时显示内核slab内存缓存信息"},"sleep":{"n":"sleep","p":"/sleep","d":"将目前动作延迟一段时间"},"slocate":{"n":"slocate","p":"/slocate","d":"命令查找文件或目录"},"smbclient":{"n":"smbclient","p":"/smbclient","d":"交互方式访问samba服务器"},"smbpasswd":{"n":"smbpasswd","p":"/smbpasswd","d":"samba用户和密码管理工具"},"sort":{"n":"sort","p":"/sort","d":"将文件进行排序并输出"},"source":{"n":"source","p":"/source","d":"在当前Shell环境中从指定文件读取和执行命令,命令返回退出状态。"},"speedtest-cli":{"n":"speedtest-cli","p":"/speedtest-cli","d":"命令行下测试服务器外网速度"},"spell":{"n":"spell","p":"/spell","d":"对文件进行拼写检查"},"split":{"n":"split","p":"/split","d":"分割任意大小的文件"},"squid":{"n":"squid","p":"/squid","d":"squid服务器守护进程"},"squidclient":{"n":"squidclient","p":"/squidclient","d":"squid服务器的客户端管理工具"},"ss":{"n":"ss","p":"/ss","d":"比 netstat 好用的socket统计信息,iproute2 包附带的另一个工具,允许你查询 socket 的有关统计信息。"},"ssh-add":{"n":"ssh-add","p":"/ssh-add","d":"把专用密钥添加到ssh-agent的高速缓存中"},"ssh-agent":{"n":"ssh-agent","p":"/ssh-agent","d":"ssh密钥管理器"},"ssh-copy-id":{"n":"ssh-copy-id","p":"/ssh-copy-id","d":"把本地的ssh公钥文件安装到远程主机对应的账户下"},"ssh-keygen":{"n":"ssh-keygen","p":"/ssh-keygen","d":"为ssh生成、管理和转换认证密钥"},"ssh-keyscan":{"n":"ssh-keyscan","p":"/ssh-keyscan","d":"收集主机公钥的使用工具"},"ssh":{"n":"ssh","p":"/ssh","d":"openssh套件中的客户端连接工具"},"sshd":{"n":"sshd","p":"/sshd","d":"openssh软件套件中的服务器守护进程"},"startx":{"n":"startx","p":"/startx","d":"用来启动X Window"},"stat":{"n":"stat","p":"/stat","d":"用于显示文件的状态信息"},"strace":{"n":"strace","p":"/strace","d":"跟踪系统调用和信号"},"strings":{"n":"strings","p":"/strings","d":"在对象文件或二进制文件中查找可打印的字符串"},"stty":{"n":"stty","p":"/stty","d":"修改终端命令行的相关设置"},"su":{"n":"su","p":"/su","d":"用于切换当前用户身份到其他用户身份"},"sudo":{"n":"sudo","p":"/sudo","d":"以其他身份来执行命令"},"sum":{"n":"sum","p":"/sum","d":"计算文件的校验码和显示块数"},"supervisord":{"n":"supervisord","p":"/supervisord","d":"配置后台服务/常驻进程的进程管家工具"},"swapoff":{"n":"swapoff","p":"/swapoff","d":"关闭指定的交换空间"},"swapon":{"n":"swapon","p":"/swapon","d":"激活Linux系统中交换空间"},"sync":{"n":"sync","p":"/sync","d":"用于强制被改变的内容立刻写入磁盘"},"sysctl":{"n":"sysctl","p":"/sysctl","d":"时动态地修改内核的运行参数"},"syslog":{"n":"syslog","p":"/syslog","d":"系统默认的日志守护进程"},"systemctl":{"n":"systemctl","p":"/systemctl","d":"系统服务管理器指令"},"systool":{"n":"systool","p":"/systool","d":"显示基于总线、类和拓扑显示系统中设备的信息"},"tac":{"n":"tac","p":"/tac","d":"将文件已行为单位的反序输出"},"tail":{"n":"tail","p":"/tail","d":"在屏幕上显示指定文件的末尾若干行"},"tailf":{"n":"tailf","p":"/tailf","d":"在屏幕上显示指定文件的末尾若干行内容,通常用于日志文件的跟踪输出。"},"talk":{"n":"talk","p":"/talk","d":"让用户和其他用户聊天"},"tar":{"n":"tar","p":"/tar","d":"Linux下的归档使用工具,用来打包和备份。"},"tcpdump":{"n":"tcpdump","p":"/tcpdump","d":"一款sniffer工具,是Linux上的抓包工具,嗅探器。"},"tcpreplay":{"n":"tcpreplay","p":"/tcpreplay","d":"将PCAP包重新发送,用于性能或者功能测试"},"tee":{"n":"tee","p":"/tee","d":"把数据重定向到给定文件和屏幕上"},"telint":{"n":"telint","p":"/telint","d":"切换当前正在运行系统的运行等级"},"telnet":{"n":"telnet","p":"/telnet","d":"登录远程主机和管理(测试ip端口是否连通)"},"tempfile":{"n":"tempfile","p":"/tempfile","d":"shell中给临时文件命名"},"test":{"n":"test","p":"/test","d":"shell环境中测试条件表达式工具"},"tftp":{"n":"tftp","p":"/tftp","d":"在本机和tftp服务器之间使用TFTP协议传输文件"},"time":{"n":"time","p":"/time","d":"统计给定命令所花费的总时间"},"tload":{"n":"tload","p":"/tload","d":"显示系统负载状况"},"tmux":{"n":"tmux","p":"/tmux","d":"Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权。"},"top":{"n":"top","p":"/top","d":"显示或管理执行中的程序"},"touch":{"n":"touch","p":"/touch","d":"创建新的空文件"},"tput":{"n":"tput","p":"/tput","d":"通过terminfo数据库对终端会话进行初始化和操作"},"tr":{"n":"tr","p":"/tr","d":"将字符进行替换压缩和删除"},"tracepath":{"n":"tracepath","p":"/tracepath","d":"追踪目的主机经过的路由信息"},"traceroute":{"n":"traceroute","p":"/traceroute","d":"显示数据包到主机间的路径"},"trap":{"n":"trap","p":"/trap","d":"指定在接收到信号后将要采取的动作"},"tree":{"n":"tree","p":"/tree","d":"树状图列出目录的内容"},"tty":{"n":"tty","p":"/tty","d":"显示连接到当前标准输入的终端设备文件名。"},"type":{"n":"type","p":"/type","d":"显示指定命令的类型"},"ulimit":{"n":"ulimit","p":"/ulimit","d":"控制shell程序的资源"},"umask":{"n":"umask","p":"/umask","d":"用来设置限制新建文件权限的掩码"},"umount":{"n":"umount","p":"/umount","d":"用于卸载已经加载的文件系统"},"unalias":{"n":"unalias","p":"/unalias","d":"删除由alias设置的别名"},"uname":{"n":"uname","p":"/uname","d":"显示Linux系统信息"},"unarj":{"n":"unarj","p":"/unarj","d":"解压缩由arj命令创建的压缩包"},"uncompress":{"n":"uncompress","p":"/uncompress","d":"用来解压.Z文件"},"unexpand":{"n":"unexpand","p":"/unexpand","d":"将文件的空白字符转换为制表符"},"uniq":{"n":"uniq","p":"/uniq","d":"报告或忽略文件中的重复行"},"unlink":{"n":"unlink","p":"/unlink","d":"系统调用函数unlink去删除指定的文件"},"unprotoize":{"n":"unprotoize","p":"/unprotoize","d":"删除C语言源代码文件中的函数原型"},"unset":{"n":"unset","p":"/unset","d":"删除指定的shell变量或函数"},"unzip":{"n":"unzip","p":"/unzip","d":"用于解压缩由zip命令压缩的压缩包"},"updatedb":{"n":"updatedb","p":"/updatedb","d":"创建或更新slocate命令所必需的数据库文件"},"uptime":{"n":"uptime","p":"/uptime","d":"查看Linux系统负载信息"},"useradd":{"n":"useradd","p":"/useradd","d":"创建的新的系统用户"},"userdel":{"n":"userdel","p":"/userdel","d":"用于删除给定的用户以及与用户相关的文件"},"usermod":{"n":"usermod","p":"/usermod","d":"用于修改用户的基本信息"},"usernetctl":{"n":"usernetctl","p":"/usernetctl","d":"被允许时操作指定的网络接口"},"users":{"n":"users","p":"/users","d":"显示当前登录系统的所有用户"},"uucico":{"n":"uucico","p":"/uucico","d":"UUCP文件传输服务程序。"},"uupick":{"n":"uupick","p":"/uupick","d":"命令处理传送进来的文件。"},"vdfuse":{"n":"vdfuse","p":"/vdfuse","d":"VirtualBox软件挂载VDI分区文件工具"},"vgchange":{"n":"vgchange","p":"/vgchange","d":"修改卷组属性"},"vgconvert":{"n":"vgconvert","p":"/vgconvert","d":"转换卷组元数据格式"},"vgcreate":{"n":"vgcreate","p":"/vgcreate","d":"用于创建LVM卷组"},"vgdisplay":{"n":"vgdisplay","p":"/vgdisplay","d":"显示LVM卷组的信息"},"vgextend":{"n":"vgextend","p":"/vgextend","d":"向卷组中添加物理卷"},"vgreduce":{"n":"vgreduce","p":"/vgreduce","d":"从卷组中删除物理卷"},"vgremove":{"n":"vgremove","p":"/vgremove","d":"用于用户删除LVM卷组"},"vgrename":{"n":"vgrename","p":"/vgrename","d":"使用vgrename命令可以重命名卷组的名称。"},"vgscan":{"n":"vgscan","p":"/vgscan","d":"扫描并显示系统中的卷组"},"vi":{"n":"vi","p":"/vi","d":"功能强大的纯文本编辑器"},"vmstat":{"n":"vmstat","p":"/vmstat","d":"显示虚拟内存状态"},"volname":{"n":"volname","p":"/volname","d":"显示指定的ISO-9660格式的设备的卷名称"},"w":{"n":"w","p":"/w","d":"显示目前登入系统的用户信息"},"wait":{"n":"wait","p":"/wait","d":"等待进程执行完后返回"},"wall":{"n":"wall","p":"/wall","d":"向系统当前所有打开的终端上输出信息"},"watch":{"n":"watch","p":"/watch","d":"可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令"},"wc":{"n":"wc","p":"/wc","d":"统计文件的字节数、字数、行数"},"wget":{"n":"wget","p":"/wget","d":"Linux系统下载文件工具"},"whatis":{"n":"whatis","p":"/whatis","d":"查询一个命令执行什么功能"},"whereis":{"n":"whereis","p":"/whereis","d":"查找二进制程序、代码等相关文件路径"},"which":{"n":"which","p":"/which","d":"查找并显示给定命令的绝对路径"},"who":{"n":"who","p":"/who","d":"显示目前登录系统的用户信息"},"whoami":{"n":"whoami","p":"/whoami","d":"打印当前有效的用户名称"},"write":{"n":"write","p":"/write","d":"向指定登录用户终端上发送信息"},"xargs":{"n":"xargs","p":"/xargs","d":"给其他命令传递参数的一个过滤器"},"xauth":{"n":"xauth","p":"/xauth","d":"显示和编辑被用于连接X服务器的认证信息"},"xclip":{"n":"xclip","p":"/xclip","d":"管理 X 粘贴板"},"xhost":{"n":"xhost","p":"/xhost","d":"制哪些X客户端能够在X服务器上显示"},"xinit":{"n":"xinit","p":"/xinit","d":"是Linux下X-Window系统的初始化程序"},"xlsatoms":{"n":"xlsatoms","p":"/xlsatoms","d":"列出X服务器内部所有定义的原子成分"},"xlsclients":{"n":"xlsclients","p":"/xlsclients","d":"列出显示器中的客户端应用程序"},"xlsfonts":{"n":"xlsfonts","p":"/xlsfonts","d":"列出X Server使用的字体"},"xset":{"n":"xset","p":"/xset","d":"设置X-Window系统中的用户爱好的实用工具"},"xz":{"n":"xz","p":"/xz","d":"POSIX 平台开发具有高压缩率的工具。"},"yes":{"n":"yes","p":"/yes","d":"重复打印指定字符串"},"ypdomainname":{"n":"ypdomainname","p":"/ypdomainname","d":"显示主机的NIS的域名"},"yum":{"n":"yum","p":"/yum","d":"基于RPM的软件包管理器"},"zcat":{"n":"zcat","p":"/zcat","d":"显示压缩包中文件的内容"},"zfore":{"n":"zfore","p":"/zfore","d":"强制为gzip格式的压缩文件添加.gz后缀"},"zip":{"n":"zip","p":"/zip","d":"可以用来解压缩文件"},"zipinfo":{"n":"zipinfo","p":"/zipinfo","d":"用来列出压缩文件信息"},"zipsplit":{"n":"zipsplit","p":"/zipsplit","d":"将较大的zip压缩包分割成各个较小的压缩包"},"znew":{"n":"znew","p":"/znew","d":"将.Z压缩包重新转化为gzip命令压缩的.gz压缩包"}}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 998b23b3224..91b2116ff34 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,1768 +1,566 @@
 {
   "name": "linux-command",
-  "version": "1.0.3",
+  "version": "1.2.0",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
-    "abab": {
-      "version": "https://registry.npmjs.org/abab/-/abab-1.0.3.tgz",
-      "integrity": "sha1-uB3l9ydOxOdW15fNg08wNkJyTl0=",
-      "dev": true
-    },
-    "acorn": {
-      "version": "https://registry.npmjs.org/acorn/-/acorn-4.0.11.tgz",
-      "integrity": "sha1-7c2jvZN+dVZBDULtWGD2c5nHlMA=",
-      "dev": true
-    },
-    "acorn-globals": {
-      "version": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz",
-      "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=",
-      "dev": true,
-      "requires": {
-        "acorn": "https://registry.npmjs.org/acorn/-/acorn-4.0.11.tgz"
-      }
-    },
-    "ajv": {
-      "version": "https://registry.npmjs.org/ajv/-/ajv-4.11.5.tgz",
-      "integrity": "sha1-tu50ZXuZOgHc5Et5RNVvSFgo1b0=",
-      "dev": true,
-      "requires": {
-        "co": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
-        "json-stable-stringify": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz"
-      }
-    },
-    "align-text": {
-      "version": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
-      "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
-      "dev": true,
-      "requires": {
-        "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz",
-        "longest": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
-        "repeat-string": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz"
-      }
-    },
     "amdefine": {
-      "version": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
       "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
       "dev": true
     },
-    "ansi-regex": {
-      "version": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
-      "dev": true
-    },
-    "ansi-styles": {
-      "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-      "dev": true
-    },
-    "argparse": {
-      "version": "1.0.9",
-      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
-      "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
-      "dev": true,
-      "requires": {
-        "sprintf-js": "1.0.3"
-      }
-    },
-    "array-equal": {
-      "version": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
-      "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
-      "dev": true
-    },
     "array-union": {
-      "version": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
       "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
       "dev": true,
       "requires": {
-        "array-uniq": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz"
+        "array-uniq": "^1.0.1"
       }
     },
     "array-uniq": {
-      "version": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
       "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
       "dev": true
     },
-    "asn1": {
-      "version": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
-      "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
-      "dev": true
-    },
-    "assert-plus": {
-      "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
-      "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=",
-      "dev": true
-    },
     "async": {
-      "version": "https://registry.npmjs.org/async/-/async-2.1.2.tgz",
-      "integrity": "sha1-YSpKtF70KnDN6Aa62G7m2wR+g4U=",
+      "version": "2.6.1",
+      "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
+      "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
       "dev": true,
       "requires": {
-        "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz"
+        "lodash": "^4.17.10"
       }
     },
-    "asynckit": {
-      "version": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
-      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+    "balanced-match": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
       "dev": true
     },
-    "autoprefixer": {
-      "version": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz",
-      "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=",
+    "brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
       "dev": true,
       "requires": {
-        "browserslist": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
-        "caniuse-db": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000646.tgz",
-        "normalize-range": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
-        "num2fraction": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
-        "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.16.tgz",
-        "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz"
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
       }
     },
-    "autoprefixer-stylus": {
-      "version": "https://registry.npmjs.org/autoprefixer-stylus/-/autoprefixer-stylus-0.11.0.tgz",
-      "integrity": "sha1-AgZO2IvHzws3PzNGu14GYDmzbgI=",
+    "clipboard": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.1.tgz",
+      "integrity": "sha512-7yhQBmtN+uYZmfRjjVjKa0dZdWuabzpSKGtyQZN+9C8xlC788SSJjOHWh7tzurfwTqTD5UDYAhIv5fRJg3sHjQ==",
       "dev": true,
+      "optional": true,
       "requires": {
-        "autoprefixer": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.5.0.tgz",
-        "multi-stage-sourcemap": "https://registry.npmjs.org/multi-stage-sourcemap/-/multi-stage-sourcemap-0.2.1.tgz",
-        "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.4.tgz"
-      },
-      "dependencies": {
-        "autoprefixer": {
-          "version": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.5.0.tgz",
-          "integrity": "sha1-kQ3gqg8ir0x9UDZ8vJ1NQSlFFi8=",
-          "dev": true,
-          "requires": {
-            "browserslist": "https://registry.npmjs.org/browserslist/-/browserslist-1.4.0.tgz",
-            "caniuse-db": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000646.tgz",
-            "normalize-range": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
-            "num2fraction": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
-            "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.4.tgz",
-            "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz"
-          }
-        },
-        "browserslist": {
-          "version": "https://registry.npmjs.org/browserslist/-/browserslist-1.4.0.tgz",
-          "integrity": "sha1-nP3PU4TZFY9bcNoqoAsw6P8BkEk=",
-          "dev": true,
-          "requires": {
-            "caniuse-db": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000646.tgz"
-          }
-        },
-        "postcss": {
-          "version": "https://registry.npmjs.org/postcss/-/postcss-5.2.4.tgz",
-          "integrity": "sha1-jrS+4+XE4JFYWxFt8y2NskpTXyE=",
-          "dev": true,
-          "requires": {
-            "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
-            "js-base64": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.9.tgz",
-            "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
-            "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz"
-          }
-        },
-        "supports-color": {
-          "version": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz"
-          }
-        }
+        "good-listener": "^1.2.2",
+        "select": "^1.1.2",
+        "tiny-emitter": "^2.0.0"
       }
     },
-    "aws-sign2": {
-      "version": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
-      "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
-      "dev": true
-    },
-    "aws4": {
-      "version": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
-      "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=",
+    "colors-cli": {
+      "version": "1.0.20",
+      "resolved": "https://registry.npmjs.org/colors-cli/-/colors-cli-1.0.20.tgz",
+      "integrity": "sha512-cV6cg526xhNa1vUkMIK6+vSoPTXz9eqiYRTTnOokm7jUT57w/Gpwi6wqrFtu388w2eC7SPYdEzQ19uMP9buB+w==",
       "dev": true
     },
-    "balanced-match": {
-      "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
-      "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
+    "commander": {
+      "version": "2.18.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.18.0.tgz",
+      "integrity": "sha512-6CYPa+JP2ftfRU2qkDK+UTVeQYosOg/2GbcjIcKPHfinyOLPVGXu/ovN86RP49Re5ndJK1N0kuiidFFuepc4ZQ==",
       "dev": true
     },
-    "bcrypt-pbkdf": {
-      "version": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
-      "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "tweetnacl": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz"
-      }
-    },
-    "block-elements": {
-      "version": "https://registry.npmjs.org/block-elements/-/block-elements-1.1.0.tgz",
-      "integrity": "sha1-ef6/iDD6aiJTK1thnZybGB518JM=",
+    "concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
       "dev": true
     },
-    "boolbase": {
-      "version": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
-      "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+    "css-parse": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz",
+      "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=",
       "dev": true
     },
-    "boom": {
-      "version": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
-      "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
-      "dev": true,
-      "requires": {
-        "hoek": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz"
-      }
-    },
-    "brace-expansion": {
-      "version": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz",
-      "integrity": "sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=",
+    "debug": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.0.1.tgz",
+      "integrity": "sha512-K23FHJ/Mt404FSlp6gSZCevIbTMLX0j3fmHhUEhQ3Wq0FMODW3+cUSoLdy1Gx4polAf4t/lphhmHH35BB8cLYw==",
       "dev": true,
       "requires": {
-        "balanced-match": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
-        "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
+        "ms": "^2.1.1"
       }
     },
-    "browserslist": {
-      "version": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
-      "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
+    "delegate": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz",
+      "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==",
       "dev": true,
-      "requires": {
-        "caniuse-db": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000646.tgz",
-        "electron-to-chromium": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.2.tgz"
-      }
+      "optional": true
     },
-    "buffer-shims": {
-      "version": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz",
-      "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=",
+    "ejs": {
+      "version": "2.6.1",
+      "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz",
+      "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==",
       "dev": true
     },
-    "camelcase": {
-      "version": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
-      "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+    "email-addresses": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.0.2.tgz",
+      "integrity": "sha512-IMn9dnwLMsgZjdUHswB/UZ0S8LQ/u+2/qjnHJ9tCtp3QHZsIYwJCiJOo2FT0i3CwwK/dtSODYtxuvzV4D9MY5g==",
       "dev": true
     },
-    "caniuse-db": {
-      "version": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000646.tgz",
-      "integrity": "sha1-xyS5DWHfJChuAV/FKNBiBzwA3vQ=",
+    "escape-string-regexp": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
       "dev": true
     },
-    "caseless": {
-      "version": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
-      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+    "filename-reserved-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz",
+      "integrity": "sha1-5hz4BfDeHJhFZ9A4bcXfUO5a9+Q=",
       "dev": true
     },
-    "center-align": {
-      "version": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
-      "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
-      "dev": true,
-      "requires": {
-        "align-text": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
-        "lazy-cache": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz"
-      }
-    },
-    "chalk": {
-      "version": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+    "filenamify": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-1.2.1.tgz",
+      "integrity": "sha1-qfL/0RxQO+0wABUCknI3jx8TZaU=",
       "dev": true,
       "requires": {
-        "ansi-styles": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
-        "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-        "has-ansi": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
-        "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-        "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz"
+        "filename-reserved-regex": "^1.0.0",
+        "strip-outer": "^1.0.0",
+        "trim-repeated": "^1.0.0"
       }
     },
-    "cheerio": {
-      "version": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz",
-      "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=",
+    "filenamify-url": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/filenamify-url/-/filenamify-url-1.0.0.tgz",
+      "integrity": "sha1-syvYExnvWGO3MHi+1Q9GpPeXX1A=",
       "dev": true,
       "requires": {
-        "css-select": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
-        "dom-serializer": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
-        "entities": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
-        "htmlparser2": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz",
-        "lodash.assignin": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz",
-        "lodash.bind": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz",
-        "lodash.defaults": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
-        "lodash.filter": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz",
-        "lodash.flatten": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
-        "lodash.foreach": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
-        "lodash.map": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
-        "lodash.merge": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.0.tgz",
-        "lodash.pick": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
-        "lodash.reduce": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz",
-        "lodash.reject": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz",
-        "lodash.some": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz"
+        "filenamify": "^1.0.0",
+        "humanize-url": "^1.0.0"
       }
     },
-    "cliui": {
-      "version": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
-      "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+    "fs-extra": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.0.tgz",
+      "integrity": "sha512-EglNDLRpmaTWiD/qraZn6HREAEAHJcJOmxNEYwq6xeMKnVMAy3GUcFB+wXt2C6k4CNvB/mP1y/U3dzvKKj5OtQ==",
       "dev": true,
       "requires": {
-        "string-width": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
-        "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-        "wrap-ansi": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz"
+        "graceful-fs": "^4.1.2",
+        "jsonfile": "^4.0.0",
+        "universalify": "^0.1.0"
       }
     },
-    "co": {
-      "version": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
-      "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
-      "dev": true
-    },
-    "code-point-at": {
-      "version": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
-      "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+    "fs.realpath": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
       "dev": true
     },
-    "collapse-whitespace": {
-      "version": "https://registry.npmjs.org/collapse-whitespace/-/collapse-whitespace-1.1.2.tgz",
-      "integrity": "sha1-ubMdedVZTuPCLBWBnFSCjlZbMIU=",
+    "gh-pages": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-2.0.0.tgz",
+      "integrity": "sha512-zGs6QDPXOpzZRa53s4/ezazHnRLY11RPo6CfbhOyVIl/wdWMZOIuuOhxrUhmVAO8Xdiu2OeGmBPy/+zsUCD/0Q==",
       "dev": true,
       "requires": {
-        "block-elements": "https://registry.npmjs.org/block-elements/-/block-elements-1.1.0.tgz",
-        "void-elements": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz"
+        "async": "^2.6.1",
+        "commander": "^2.18.0",
+        "email-addresses": "^3.0.1",
+        "filenamify-url": "^1.0.0",
+        "fs-extra": "^7.0.0",
+        "globby": "^6.1.0",
+        "graceful-fs": "^4.1.11",
+        "rimraf": "^2.6.2"
       }
     },
-    "collections": {
-      "version": "https://registry.npmjs.org/collections/-/collections-0.2.2.tgz",
-      "integrity": "sha1-HyMCay7zb5J+7MkB6ZxfDUj6M04=",
+    "glob": {
+      "version": "7.1.3",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+      "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
       "dev": true,
       "requires": {
-        "weak-map": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.0.tgz"
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.0.4",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
       }
     },
-    "colors-cli": {
-      "version": "https://registry.npmjs.org/colors-cli/-/colors-cli-1.0.8.tgz",
-      "integrity": "sha1-svtixOo8MWk7u7mWgqYK3P6pyfs=",
-      "dev": true
-    },
-    "combined-stream": {
-      "version": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
-      "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
+    "globby": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+      "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
       "dev": true,
       "requires": {
-        "delayed-stream": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"
+        "array-union": "^1.0.1",
+        "glob": "^7.0.3",
+        "object-assign": "^4.0.1",
+        "pify": "^2.0.0",
+        "pinkie-promise": "^2.0.0"
       }
     },
-    "commander": {
-      "version": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
-      "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
+    "good-listener": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz",
+      "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=",
       "dev": true,
+      "optional": true,
       "requires": {
-        "graceful-readlink": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz"
+        "delegate": "^3.1.2"
       }
     },
-    "component-emitter": {
-      "version": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
-      "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
-      "dev": true
-    },
-    "concat-map": {
-      "version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
-      "dev": true
-    },
-    "content-type-parser": {
-      "version": "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.1.tgz",
-      "integrity": "sha1-w+VpiMU8ZRJ/tG1AMqOpACRv3JQ=",
-      "dev": true
-    },
-    "cookiejar": {
-      "version": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.0.tgz",
-      "integrity": "sha1-hlSWiVObbQ4mm2Y3owS+UIGU2Jg=",
-      "dev": true
-    },
-    "core-util-is": {
-      "version": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+    "graceful-fs": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+      "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
       "dev": true
     },
-    "cryptiles": {
-      "version": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
-      "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
+    "humanize-url": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/humanize-url/-/humanize-url-1.0.1.tgz",
+      "integrity": "sha1-9KuZ4NKIF0yk4eUEB8VfuuRk7/8=",
       "dev": true,
       "requires": {
-        "boom": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz"
+        "normalize-url": "^1.0.0",
+        "strip-url-auth": "^1.0.0"
       }
     },
-    "css-parse": {
-      "version": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz",
-      "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=",
-      "dev": true
-    },
-    "css-select": {
-      "version": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
-      "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
+    "inflight": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
       "dev": true,
       "requires": {
-        "boolbase": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
-        "css-what": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz",
-        "domutils": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
-        "nth-check": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz"
+        "once": "^1.3.0",
+        "wrappy": "1"
       }
     },
-    "css-what": {
-      "version": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz",
-      "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=",
+    "inherits": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
       "dev": true
     },
-    "cssom": {
-      "version": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz",
-      "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=",
+    "is-plain-obj": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+      "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
       "dev": true
     },
-    "cssstyle": {
-      "version": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz",
-      "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=",
-      "dev": true,
-      "requires": {
-        "cssom": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz"
-      }
-    },
-    "dashdash": {
-      "version": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
-      "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+    "jsonfile": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+      "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
       "dev": true,
       "requires": {
-        "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz"
-      },
-      "dependencies": {
-        "assert-plus": {
-          "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-          "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
-          "dev": true
-        }
+        "graceful-fs": "^4.1.6"
       }
     },
-    "debug": {
-      "version": "https://registry.npmjs.org/debug/-/debug-2.6.3.tgz",
-      "integrity": "sha1-D364wwll7AjHKsz6ATDIt5mEFB0=",
+    "loading-cli": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/loading-cli/-/loading-cli-1.0.8.tgz",
+      "integrity": "sha512-h2PgbEPRQzDj9Ox8voggvXfRkxIQGMGRPwCAGPijRjXB0UyiIBAdYjoJG0on/uCl0gYLeJJQ9bgOiKO1v+++vA==",
       "dev": true,
       "requires": {
-        "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz"
+        "colors-cli": "^1.0.14"
       }
     },
-    "decamelize": {
-      "version": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
-      "dev": true
-    },
-    "deep-is": {
-      "version": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
-      "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+    "lodash": {
+      "version": "4.17.11",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+      "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
       "dev": true
     },
-    "delayed-stream": {
-      "version": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
-      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+    "marked": {
+      "version": "0.5.1",
+      "resolved": "https://registry.npmjs.org/marked/-/marked-0.5.1.tgz",
+      "integrity": "sha512-iUkBZegCZou4AdwbKTwSW/lNDcz5OuRSl3qdcl31Ia0B2QPG0Jn+tKblh/9/eP9/6+4h27vpoh8wel/vQOV0vw==",
       "dev": true
     },
-    "dom-serializer": {
-      "version": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
-      "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
+    "minimatch": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
       "dev": true,
       "requires": {
-        "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
-        "entities": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz"
-      },
-      "dependencies": {
-        "domelementtype": {
-          "version": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
-          "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=",
-          "dev": true
-        }
+        "brace-expansion": "^1.1.7"
       }
     },
-    "domelementtype": {
-      "version": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
-      "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=",
+    "minimist": {
+      "version": "0.0.8",
+      "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+      "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
       "dev": true
     },
-    "domhandler": {
-      "version": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz",
-      "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=",
+    "mkdirp": {
+      "version": "0.5.1",
+      "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+      "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
       "dev": true,
       "requires": {
-        "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz"
+        "minimist": "0.0.8"
       }
     },
-    "domutils": {
-      "version": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
-      "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
-      "dev": true,
-      "requires": {
-        "dom-serializer": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
-        "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz"
-      }
+    "ms": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+      "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+      "dev": true
     },
-    "ecc-jsbn": {
-      "version": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
-      "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
+    "normalize-url": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
+      "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
       "dev": true,
-      "optional": true,
       "requires": {
-        "jsbn": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz"
+        "object-assign": "^4.0.1",
+        "prepend-http": "^1.0.0",
+        "query-string": "^4.1.0",
+        "sort-keys": "^1.0.0"
       }
     },
-    "ejs": {
-      "version": "https://registry.npmjs.org/ejs/-/ejs-2.5.6.tgz",
-      "integrity": "sha1-R5Y2v6P+Ox3r1SCH8KyyBLTxnIg=",
-      "dev": true
-    },
-    "electron-to-chromium": {
-      "version": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.2.tgz",
-      "integrity": "sha1-uM5ck7MI2w6S9tBDXEbd7I9jY6s=",
-      "dev": true
-    },
-    "entities": {
-      "version": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
-      "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=",
-      "dev": true
-    },
-    "escape-string-regexp": {
-      "version": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+    "object-assign": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
       "dev": true
     },
-    "escodegen": {
-      "version": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz",
-      "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=",
+    "once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
       "dev": true,
       "requires": {
-        "esprima": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
-        "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz",
-        "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
-        "optionator": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
-        "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz",
-          "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "amdefine": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz"
-          }
-        }
+        "wrappy": "1"
       }
     },
-    "esprima": {
-      "version": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
-      "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
-      "dev": true
-    },
-    "estraverse": {
-      "version": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz",
-      "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=",
-      "dev": true
-    },
-    "esutils": {
-      "version": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
-      "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
-      "dev": true
-    },
-    "exec-sh": {
-      "version": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.0.tgz",
-      "integrity": "sha1-FPdd4/INKG75MwmbLOUKkDWc7xA=",
+    "path": {
+      "version": "0.12.7",
+      "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz",
+      "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=",
       "dev": true,
       "requires": {
-        "merge": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz"
+        "process": "^0.11.1",
+        "util": "^0.10.3"
       }
     },
-    "extend": {
-      "version": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz",
-      "integrity": "sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=",
-      "dev": true
-    },
-    "extsprintf": {
-      "version": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz",
-      "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=",
+    "path-is-absolute": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
       "dev": true
     },
-    "fast-levenshtein": {
-      "version": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+    "pify": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+      "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
       "dev": true
     },
-    "forever-agent": {
-      "version": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
-      "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+    "pinkie": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+      "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
       "dev": true
     },
-    "form-data": {
-      "version": "https://registry.npmjs.org/form-data/-/form-data-2.1.2.tgz",
-      "integrity": "sha1-icNTQAi5fq2ky7FX1Y9vXfAl6uQ=",
+    "pinkie-promise": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+      "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
       "dev": true,
       "requires": {
-        "asynckit": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
-        "combined-stream": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
-        "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz"
+        "pinkie": "^2.0.0"
       }
     },
-    "formidable": {
-      "version": "https://registry.npmjs.org/formidable/-/formidable-1.1.1.tgz",
-      "integrity": "sha1-lriIb3w8NQi5Mta9cMTTqI818ak=",
-      "dev": true
-    },
-    "fs.realpath": {
-      "version": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+    "prepend-http": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+      "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
       "dev": true
     },
-    "getpass": {
-      "version": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz",
-      "integrity": "sha1-KD/9n8ElaECHUxHBtg6MQBhxEOY=",
+    "prismjs": {
+      "version": "1.15.0",
+      "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.15.0.tgz",
+      "integrity": "sha512-Lf2JrFYx8FanHrjoV5oL8YHCclLQgbJcVZR+gikGGMqz6ub5QVWDTM6YIwm3BuPxM/LOV+rKns3LssXNLIf+DA==",
       "dev": true,
       "requires": {
-        "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz"
-      },
-      "dependencies": {
-        "assert-plus": {
-          "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-          "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
-          "dev": true
-        }
+        "clipboard": "^2.0.0"
       }
     },
-    "gh-pages": {
-      "version": "https://registry.npmjs.org/gh-pages/-/gh-pages-0.12.0.tgz",
-      "integrity": "sha1-2VHj7Zi4VpnUsEGOsaFbGgSYjcE=",
+    "process": {
+      "version": "0.11.10",
+      "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+      "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+      "dev": true
+    },
+    "query-string": {
+      "version": "4.3.4",
+      "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
+      "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
       "dev": true,
       "requires": {
-        "async": "https://registry.npmjs.org/async/-/async-2.1.2.tgz",
-        "commander": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
-        "globby": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
-        "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.10.tgz",
-        "q": "https://registry.npmjs.org/q/-/q-1.4.1.tgz",
-        "q-io": "https://registry.npmjs.org/q-io/-/q-io-1.13.2.tgz",
-        "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz"
-      },
-      "dependencies": {
-        "globby": {
-          "version": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
-          "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
-          "dev": true,
-          "requires": {
-            "array-union": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
-            "glob": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz",
-            "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-            "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-            "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz"
-          }
-        },
-        "graceful-fs": {
-          "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.10.tgz",
-          "integrity": "sha1-8tcgwiCS90Mih3XHXjYSYyUB8TE=",
-          "dev": true
-        }
+        "object-assign": "^4.1.0",
+        "strict-uri-encode": "^1.0.0"
       }
     },
-    "glob": {
-      "version": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz",
-      "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=",
+    "rimraf": {
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+      "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
       "dev": true,
       "requires": {
-        "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-        "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-        "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-        "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz",
-        "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-        "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz"
+        "glob": "^7.0.5"
       }
     },
-    "graceful-readlink": {
-      "version": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
-      "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
+    "sax": {
+      "version": "0.5.8",
+      "resolved": "http://registry.npmjs.org/sax/-/sax-0.5.8.tgz",
+      "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=",
       "dev": true
     },
-    "har-schema": {
-      "version": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz",
-      "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=",
-      "dev": true
+    "select": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz",
+      "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=",
+      "dev": true,
+      "optional": true
     },
-    "har-validator": {
-      "version": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz",
-      "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=",
+    "sort-keys": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
+      "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
       "dev": true,
       "requires": {
-        "ajv": "https://registry.npmjs.org/ajv/-/ajv-4.11.5.tgz",
-        "har-schema": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz"
+        "is-plain-obj": "^1.0.0"
       }
     },
-    "has-ansi": {
-      "version": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
-      "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+    "source-map": {
+      "version": "0.1.43",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
+      "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
       "dev": true,
       "requires": {
-        "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz"
+        "amdefine": ">=0.0.4"
       }
     },
-    "has-flag": {
-      "version": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
-      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+    "strict-uri-encode": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
+      "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
       "dev": true
     },
-    "hawk": {
-      "version": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
-      "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
+    "strip-outer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz",
+      "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==",
       "dev": true,
       "requires": {
-        "boom": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
-        "cryptiles": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
-        "hoek": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
-        "sntp": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz"
+        "escape-string-regexp": "^1.0.2"
       }
     },
-    "highlight.js": {
-      "version": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.10.0.tgz",
-      "integrity": "sha1-+fCxTAvgDw5PseV3t0n+2eb1L1U=",
-      "dev": true
-    },
-    "hoek": {
-      "version": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
-      "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
+    "strip-url-auth": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/strip-url-auth/-/strip-url-auth-1.0.1.tgz",
+      "integrity": "sha1-IrD6OkE4WzO+PzMVUbu4N/oM164=",
       "dev": true
     },
-    "html-encoding-sniffer": {
-      "version": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz",
-      "integrity": "sha1-eb96eF6klf5mFl5zQVPzY/9UN9o=",
+    "stylus": {
+      "version": "0.54.5",
+      "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.5.tgz",
+      "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=",
       "dev": true,
       "requires": {
-        "whatwg-encoding": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz"
+        "css-parse": "1.7.x",
+        "debug": "*",
+        "glob": "7.0.x",
+        "mkdirp": "0.5.x",
+        "sax": "0.5.x",
+        "source-map": "0.1.x"
+      },
+      "dependencies": {
+        "glob": {
+          "version": "7.0.6",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz",
+          "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=",
+          "dev": true,
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.2",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        }
       }
     },
-    "htmlparser2": {
-      "version": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz",
-      "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=",
+    "tiny-emitter": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.0.2.tgz",
+      "integrity": "sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow==",
       "dev": true,
-      "requires": {
-        "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
-        "domhandler": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz",
-        "domutils": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
-        "entities": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
-        "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-        "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.6.tgz"
-      }
+      "optional": true
     },
-    "http-signature": {
-      "version": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
-      "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
+    "trim-repeated": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz",
+      "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=",
       "dev": true,
       "requires": {
-        "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
-        "jsprim": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz",
-        "sshpk": "https://registry.npmjs.org/sshpk/-/sshpk-1.11.0.tgz"
+        "escape-string-regexp": "^1.0.2"
       }
     },
-    "iconv-lite": {
-      "version": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz",
-      "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=",
-      "dev": true
-    },
-    "inflight": {
-      "version": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+    "uglify-js": {
+      "version": "3.4.9",
+      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz",
+      "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==",
       "dev": true,
       "requires": {
-        "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-        "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
+        "commander": "~2.17.1",
+        "source-map": "~0.6.1"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "2.17.1",
+          "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
+          "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
+          "dev": true
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
       }
     },
-    "inherits": {
-      "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
-      "dev": true
-    },
-    "invert-kv": {
-      "version": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
-      "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
-      "dev": true
-    },
-    "is-buffer": {
-      "version": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz",
-      "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=",
+    "universalify": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+      "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
       "dev": true
     },
-    "is-fullwidth-code-point": {
-      "version": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
-      "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+    "util": {
+      "version": "0.10.4",
+      "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
+      "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
       "dev": true,
       "requires": {
-        "number-is-nan": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz"
+        "inherits": "2.0.3"
       }
     },
-    "is-typedarray": {
-      "version": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
-      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
-      "dev": true
-    },
-    "isarray": {
-      "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
-      "dev": true
-    },
-    "isstream": {
-      "version": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
-      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+    "wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
       "dev": true
-    },
-    "jodid25519": {
-      "version": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz",
-      "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "jsbn": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz"
-      }
-    },
-    "js-base64": {
-      "version": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.9.tgz",
-      "integrity": "sha1-8OgK4DmkvWVLXygfyT8EqRSn/M4=",
-      "dev": true
-    },
-    "jsbn": {
-      "version": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
-      "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
-      "dev": true,
-      "optional": true
-    },
-    "jsdom": {
-      "version": "https://registry.npmjs.org/jsdom/-/jsdom-9.12.0.tgz",
-      "integrity": "sha1-6MVG//ywbADUgzyoRBD+1/igl9Q=",
-      "dev": true,
-      "requires": {
-        "abab": "https://registry.npmjs.org/abab/-/abab-1.0.3.tgz",
-        "acorn": "https://registry.npmjs.org/acorn/-/acorn-4.0.11.tgz",
-        "acorn-globals": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz",
-        "array-equal": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
-        "content-type-parser": "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.1.tgz",
-        "cssom": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz",
-        "cssstyle": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz",
-        "escodegen": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz",
-        "html-encoding-sniffer": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz",
-        "nwmatcher": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.3.9.tgz",
-        "parse5": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz",
-        "request": "https://registry.npmjs.org/request/-/request-2.81.0.tgz",
-        "sax": "https://registry.npmjs.org/sax/-/sax-1.2.2.tgz",
-        "symbol-tree": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz",
-        "tough-cookie": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz",
-        "webidl-conversions": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.1.tgz",
-        "whatwg-encoding": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz",
-        "whatwg-url": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-4.6.0.tgz",
-        "xml-name-validator": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz"
-      },
-      "dependencies": {
-        "sax": {
-          "version": "https://registry.npmjs.org/sax/-/sax-1.2.2.tgz",
-          "integrity": "sha1-/YYxojvHgmvvXYcb24c3jJVkeCg=",
-          "dev": true
-        }
-      }
-    },
-    "json-schema": {
-      "version": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
-      "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
-      "dev": true
-    },
-    "json-stable-stringify": {
-      "version": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
-      "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
-      "dev": true,
-      "requires": {
-        "jsonify": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz"
-      }
-    },
-    "json-stringify-safe": {
-      "version": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
-      "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
-      "dev": true
-    },
-    "jsonify": {
-      "version": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
-      "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
-      "dev": true
-    },
-    "jsprim": {
-      "version": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz",
-      "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=",
-      "dev": true,
-      "requires": {
-        "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-        "extsprintf": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz",
-        "json-schema": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
-        "verror": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz"
-      },
-      "dependencies": {
-        "assert-plus": {
-          "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-          "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
-          "dev": true
-        }
-      }
-    },
-    "kind-of": {
-      "version": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz",
-      "integrity": "sha1-R11pil5J/15T0U4+cyQp3Iv0z0c=",
-      "dev": true,
-      "requires": {
-        "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz"
-      }
-    },
-    "lazy-cache": {
-      "version": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
-      "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
-      "dev": true
-    },
-    "lcid": {
-      "version": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
-      "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
-      "dev": true,
-      "requires": {
-        "invert-kv": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz"
-      }
-    },
-    "levn": {
-      "version": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
-      "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
-      "dev": true,
-      "requires": {
-        "prelude-ls": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
-        "type-check": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz"
-      }
-    },
-    "linkify-it": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.0.3.tgz",
-      "integrity": "sha1-2UpGSPmxwXnWT6lykSaL22zpQ08=",
-      "dev": true,
-      "requires": {
-        "uc.micro": "1.0.3"
-      }
-    },
-    "loading-cli": {
-      "version": "https://registry.npmjs.org/loading-cli/-/loading-cli-1.0.2.tgz",
-      "integrity": "sha1-nqRz9dPKZgKTMdhUmt9pFmavHNg=",
-      "dev": true
-    },
-    "lodash": {
-      "version": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
-      "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
-      "dev": true
-    },
-    "lodash.assignin": {
-      "version": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz",
-      "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=",
-      "dev": true
-    },
-    "lodash.bind": {
-      "version": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz",
-      "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=",
-      "dev": true
-    },
-    "lodash.defaults": {
-      "version": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
-      "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=",
-      "dev": true
-    },
-    "lodash.filter": {
-      "version": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz",
-      "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=",
-      "dev": true
-    },
-    "lodash.flatten": {
-      "version": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
-      "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=",
-      "dev": true
-    },
-    "lodash.foreach": {
-      "version": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
-      "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=",
-      "dev": true
-    },
-    "lodash.map": {
-      "version": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
-      "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=",
-      "dev": true
-    },
-    "lodash.merge": {
-      "version": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.0.tgz",
-      "integrity": "sha1-aYhLoUSsM/5plzemCG3v+t0PicU=",
-      "dev": true
-    },
-    "lodash.pick": {
-      "version": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
-      "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=",
-      "dev": true
-    },
-    "lodash.reduce": {
-      "version": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz",
-      "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=",
-      "dev": true
-    },
-    "lodash.reject": {
-      "version": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz",
-      "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=",
-      "dev": true
-    },
-    "lodash.some": {
-      "version": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz",
-      "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=",
-      "dev": true
-    },
-    "longest": {
-      "version": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
-      "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
-      "dev": true
-    },
-    "markdown-it": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.0.tgz",
-      "integrity": "sha512-tNuOCCfunY5v5uhcO2AUMArvKAyKMygX8tfup/JrgnsDqcCATQsAExBq7o5Ml9iMmO82bk6jYNLj6khcrl0JGA==",
-      "dev": true,
-      "requires": {
-        "argparse": "1.0.9",
-        "entities": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
-        "linkify-it": "2.0.3",
-        "mdurl": "1.0.1",
-        "uc.micro": "1.0.3"
-      }
-    },
-    "marked": {
-      "version": "https://registry.npmjs.org/marked/-/marked-0.3.6.tgz",
-      "integrity": "sha1-ssbGGPzOzk74bE/Gy4p8v1rtqNc=",
-      "dev": true
-    },
-    "marked3": {
-      "version": "0.5.1",
-      "resolved": "https://registry.npmjs.org/marked3/-/marked3-0.5.1.tgz",
-      "integrity": "sha512-I5XLEvFfGk9FBN0QUk9gyISaIsXeSHfhn67k2HsOlCQFsgepLoAgUJGCtAdanr7oifmdTiZQmLEMh2P7C2ieIw==",
-      "dev": true,
-      "requires": {
-        "slugo": "0.2.1"
-      }
-    },
-    "mdurl": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
-      "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=",
-      "dev": true
-    },
-    "merge": {
-      "version": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz",
-      "integrity": "sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=",
-      "dev": true
-    },
-    "methods": {
-      "version": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
-      "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
-      "dev": true
-    },
-    "mime": {
-      "version": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz",
-      "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=",
-      "dev": true
-    },
-    "mime-db": {
-      "version": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz",
-      "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=",
-      "dev": true
-    },
-    "mime-types": {
-      "version": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz",
-      "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=",
-      "dev": true,
-      "requires": {
-        "mime-db": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz"
-      }
-    },
-    "mimeparse": {
-      "version": "https://registry.npmjs.org/mimeparse/-/mimeparse-0.1.4.tgz",
-      "integrity": "sha1-2vsCdSNw/SJgk64xUsJxrwGsJUo=",
-      "dev": true
-    },
-    "minimatch": {
-      "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz",
-      "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=",
-      "dev": true,
-      "requires": {
-        "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz"
-      }
-    },
-    "minimist": {
-      "version": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
-      "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
-      "dev": true
-    },
-    "mkdirp": {
-      "version": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
-      "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
-      "dev": true,
-      "requires": {
-        "minimist": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz"
-      }
-    },
-    "ms": {
-      "version": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
-      "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=",
-      "dev": true
-    },
-    "multi-stage-sourcemap": {
-      "version": "https://registry.npmjs.org/multi-stage-sourcemap/-/multi-stage-sourcemap-0.2.1.tgz",
-      "integrity": "sha1-sJ/IWG6qF/gdV1xK0C4Pej9rEQU=",
-      "dev": true,
-      "requires": {
-        "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
-          "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
-          "dev": true,
-          "requires": {
-            "amdefine": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz"
-          }
-        }
-      }
-    },
-    "normalize-range": {
-      "version": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
-      "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
-      "dev": true
-    },
-    "nth-check": {
-      "version": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz",
-      "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=",
-      "dev": true,
-      "requires": {
-        "boolbase": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz"
-      }
-    },
-    "num2fraction": {
-      "version": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
-      "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
-      "dev": true
-    },
-    "number-is-nan": {
-      "version": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
-      "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
-      "dev": true
-    },
-    "nwmatcher": {
-      "version": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.3.9.tgz",
-      "integrity": "sha1-i6tIb/f6Pf0IZla76LFxFtNpLSo=",
-      "dev": true
-    },
-    "oauth-sign": {
-      "version": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
-      "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
-      "dev": true
-    },
-    "object-assign": {
-      "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
-      "dev": true
-    },
-    "once": {
-      "version": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-      "dev": true,
-      "requires": {
-        "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
-      }
-    },
-    "optionator": {
-      "version": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
-      "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
-      "dev": true,
-      "requires": {
-        "deep-is": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
-        "fast-levenshtein": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-        "levn": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
-        "prelude-ls": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
-        "type-check": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
-        "wordwrap": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz"
-      }
-    },
-    "os-locale": {
-      "version": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
-      "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
-      "dev": true,
-      "requires": {
-        "lcid": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz"
-      }
-    },
-    "parse5": {
-      "version": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz",
-      "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=",
-      "dev": true
-    },
-    "path-is-absolute": {
-      "version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
-      "dev": true
-    },
-    "performance-now": {
-      "version": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
-      "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=",
-      "dev": true
-    },
-    "pify": {
-      "version": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-      "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-      "dev": true
-    },
-    "pinkie": {
-      "version": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
-      "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
-      "dev": true
-    },
-    "pinkie-promise": {
-      "version": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
-      "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
-      "dev": true,
-      "requires": {
-        "pinkie": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz"
-      }
-    },
-    "postcss": {
-      "version": "https://registry.npmjs.org/postcss/-/postcss-5.2.16.tgz",
-      "integrity": "sha1-cysxAAAPn/g3mkilODntCXN2rVc=",
-      "dev": true,
-      "requires": {
-        "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
-        "js-base64": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.9.tgz",
-        "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
-        "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz"
-      },
-      "dependencies": {
-        "supports-color": {
-          "version": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz"
-          }
-        }
-      }
-    },
-    "postcss-value-parser": {
-      "version": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz",
-      "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=",
-      "dev": true
-    },
-    "prelude-ls": {
-      "version": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
-      "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
-      "dev": true
-    },
-    "process-nextick-args": {
-      "version": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
-      "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
-      "dev": true
-    },
-    "punycode": {
-      "version": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
-      "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
-      "dev": true
-    },
-    "q": {
-      "version": "https://registry.npmjs.org/q/-/q-1.4.1.tgz",
-      "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=",
-      "dev": true
-    },
-    "q-io": {
-      "version": "https://registry.npmjs.org/q-io/-/q-io-1.13.2.tgz",
-      "integrity": "sha1-7qEw1IHdteGqG8WmaFX3OR0G8AM=",
-      "dev": true,
-      "requires": {
-        "collections": "https://registry.npmjs.org/collections/-/collections-0.2.2.tgz",
-        "mime": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz",
-        "mimeparse": "https://registry.npmjs.org/mimeparse/-/mimeparse-0.1.4.tgz",
-        "q": "https://registry.npmjs.org/q/-/q-1.4.1.tgz",
-        "qs": "https://registry.npmjs.org/qs/-/qs-1.2.2.tgz",
-        "url2": "https://registry.npmjs.org/url2/-/url2-0.0.0.tgz"
-      }
-    },
-    "qs": {
-      "version": "https://registry.npmjs.org/qs/-/qs-1.2.2.tgz",
-      "integrity": "sha1-GbV/8k3CqZzh+L32r82ln472H4g=",
-      "dev": true
-    },
-    "readable-stream": {
-      "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.6.tgz",
-      "integrity": "sha1-i0Ou125xSDk40SqNRsbPGgCx+BY=",
-      "dev": true,
-      "requires": {
-        "buffer-shims": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz",
-        "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-        "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-        "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-        "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
-        "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
-        "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
-      }
-    },
-    "repeat-string": {
-      "version": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
-      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
-      "dev": true
-    },
-    "request": {
-      "version": "https://registry.npmjs.org/request/-/request-2.81.0.tgz",
-      "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=",
-      "dev": true,
-      "requires": {
-        "aws-sign2": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
-        "aws4": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
-        "caseless": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
-        "combined-stream": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
-        "extend": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz",
-        "forever-agent": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
-        "form-data": "https://registry.npmjs.org/form-data/-/form-data-2.1.2.tgz",
-        "har-validator": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz",
-        "hawk": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
-        "http-signature": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
-        "is-typedarray": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
-        "isstream": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
-        "json-stringify-safe": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
-        "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz",
-        "oauth-sign": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
-        "performance-now": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
-        "qs": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
-        "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz",
-        "stringstream": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
-        "tough-cookie": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz",
-        "tunnel-agent": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
-        "uuid": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz"
-      },
-      "dependencies": {
-        "qs": {
-          "version": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
-          "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=",
-          "dev": true
-        }
-      }
-    },
-    "right-align": {
-      "version": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
-      "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
-      "dev": true,
-      "requires": {
-        "align-text": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz"
-      }
-    },
-    "rimraf": {
-      "version": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz",
-      "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=",
-      "dev": true,
-      "requires": {
-        "glob": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz"
-      }
-    },
-    "safe-buffer": {
-      "version": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz",
-      "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=",
-      "dev": true
-    },
-    "sax": {
-      "version": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz",
-      "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=",
-      "dev": true
-    },
-    "slugo": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/slugo/-/slugo-0.2.1.tgz",
-      "integrity": "sha1-pEuyxqcqiSGIiwj8GOMYHp3X344=",
-      "dev": true
-    },
-    "sntp": {
-      "version": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
-      "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
-      "dev": true,
-      "requires": {
-        "hoek": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz"
-      }
-    },
-    "source-map": {
-      "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
-      "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
-      "dev": true
-    },
-    "sprintf-js": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
-      "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
-      "dev": true
-    },
-    "sshpk": {
-      "version": "https://registry.npmjs.org/sshpk/-/sshpk-1.11.0.tgz",
-      "integrity": "sha1-LY1eu0pvqyj/ujf6YqkPSj6lnXc=",
-      "dev": true,
-      "requires": {
-        "asn1": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
-        "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-        "bcrypt-pbkdf": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
-        "dashdash": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
-        "ecc-jsbn": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
-        "getpass": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz",
-        "jodid25519": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz",
-        "jsbn": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
-        "tweetnacl": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz"
-      },
-      "dependencies": {
-        "assert-plus": {
-          "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-          "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
-          "dev": true
-        }
-      }
-    },
-    "ssr": {
-      "version": "https://registry.npmjs.org/ssr/-/ssr-1.1.1.tgz",
-      "integrity": "sha1-uo6R+PCgFd0Vc+4tXpztjoWRm+4=",
-      "dev": true,
-      "requires": {
-        "colors-cli": "https://registry.npmjs.org/colors-cli/-/colors-cli-1.0.8.tgz",
-        "iconv-lite": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz",
-        "yargs": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz"
-      }
-    },
-    "string_decoder": {
-      "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
-      "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
-      "dev": true
-    },
-    "string-width": {
-      "version": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
-      "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
-      "dev": true,
-      "requires": {
-        "code-point-at": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
-        "is-fullwidth-code-point": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
-        "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz"
-      }
-    },
-    "stringstream": {
-      "version": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
-      "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
-      "dev": true
-    },
-    "strip-ansi": {
-      "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-      "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-      "dev": true,
-      "requires": {
-        "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz"
-      }
-    },
-    "stylus": {
-      "version": "https://registry.npmjs.org/stylus/-/stylus-0.54.5.tgz",
-      "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=",
-      "dev": true,
-      "requires": {
-        "css-parse": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz",
-        "debug": "https://registry.npmjs.org/debug/-/debug-2.6.3.tgz",
-        "glob": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz",
-        "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
-        "sax": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz",
-        "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz"
-      },
-      "dependencies": {
-        "glob": {
-          "version": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz",
-          "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-            "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-            "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-            "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz",
-            "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-            "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz"
-          }
-        },
-        "source-map": {
-          "version": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
-          "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
-          "dev": true,
-          "requires": {
-            "amdefine": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz"
-          }
-        }
-      }
-    },
-    "superagent": {
-      "version": "https://registry.npmjs.org/superagent/-/superagent-3.5.2.tgz",
-      "integrity": "sha1-M2GjlxVnUEw1EGOr6q4PqiPb8/g=",
-      "dev": true,
-      "requires": {
-        "component-emitter": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
-        "cookiejar": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.0.tgz",
-        "debug": "https://registry.npmjs.org/debug/-/debug-2.6.3.tgz",
-        "extend": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz",
-        "form-data": "https://registry.npmjs.org/form-data/-/form-data-2.1.2.tgz",
-        "formidable": "https://registry.npmjs.org/formidable/-/formidable-1.1.1.tgz",
-        "methods": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
-        "mime": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz",
-        "qs": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
-        "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.6.tgz"
-      },
-      "dependencies": {
-        "qs": {
-          "version": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
-          "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=",
-          "dev": true
-        }
-      }
-    },
-    "supports-color": {
-      "version": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-      "dev": true
-    },
-    "symbol-tree": {
-      "version": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz",
-      "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=",
-      "dev": true
-    },
-    "to-markdown": {
-      "version": "https://registry.npmjs.org/to-markdown/-/to-markdown-3.0.4.tgz",
-      "integrity": "sha1-PHgi+ShrwpT/N/ng5eIxVMEizmk=",
-      "dev": true,
-      "requires": {
-        "collapse-whitespace": "https://registry.npmjs.org/collapse-whitespace/-/collapse-whitespace-1.1.2.tgz",
-        "jsdom": "https://registry.npmjs.org/jsdom/-/jsdom-9.12.0.tgz"
-      }
-    },
-    "tough-cookie": {
-      "version": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz",
-      "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=",
-      "dev": true,
-      "requires": {
-        "punycode": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz"
-      }
-    },
-    "tr46": {
-      "version": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
-      "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=",
-      "dev": true
-    },
-    "tunnel-agent": {
-      "version": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
-      "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
-      "dev": true,
-      "requires": {
-        "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz"
-      }
-    },
-    "tweetnacl": {
-      "version": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
-      "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
-      "dev": true,
-      "optional": true
-    },
-    "type-check": {
-      "version": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
-      "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
-      "dev": true,
-      "requires": {
-        "prelude-ls": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz"
-      }
-    },
-    "uc.micro": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.3.tgz",
-      "integrity": "sha1-ftUNXg+an7ClczeSWfKndFjVAZI=",
-      "dev": true
-    },
-    "uglify-js": {
-      "version": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.18.tgz",
-      "integrity": "sha1-kl0UuuSKti0Yg7Qa/m4iYWYq244=",
-      "dev": true,
-      "requires": {
-        "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
-        "uglify-to-browserify": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
-        "yargs": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz"
-      },
-      "dependencies": {
-        "camelcase": {
-          "version": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
-          "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
-          "dev": true
-        },
-        "cliui": {
-          "version": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
-          "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
-          "dev": true,
-          "requires": {
-            "center-align": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
-            "right-align": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
-            "wordwrap": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz"
-          }
-        },
-        "window-size": {
-          "version": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
-          "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
-          "dev": true
-        },
-        "wordwrap": {
-          "version": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
-          "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
-          "dev": true
-        },
-        "yargs": {
-          "version": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
-          "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
-          "dev": true,
-          "requires": {
-            "camelcase": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
-            "cliui": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
-            "decamelize": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-            "window-size": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz"
-          }
-        }
-      }
-    },
-    "uglify-to-browserify": {
-      "version": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
-      "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
-      "dev": true,
-      "optional": true
-    },
-    "url2": {
-      "version": "https://registry.npmjs.org/url2/-/url2-0.0.0.tgz",
-      "integrity": "sha1-Tqq9HVw6yQ1iq0SFyZhCKGWgSxo=",
-      "dev": true
-    },
-    "util-deprecate": {
-      "version": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
-      "dev": true
-    },
-    "uuid": {
-      "version": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz",
-      "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=",
-      "dev": true
-    },
-    "verror": {
-      "version": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz",
-      "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=",
-      "dev": true,
-      "requires": {
-        "extsprintf": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz"
-      }
-    },
-    "void-elements": {
-      "version": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz",
-      "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=",
-      "dev": true
-    },
-    "watch": {
-      "version": "https://registry.npmjs.org/watch/-/watch-1.0.2.tgz",
-      "integrity": "sha1-NApxe952Vyb6CqB9ch4BR6VR3ww=",
-      "dev": true,
-      "requires": {
-        "exec-sh": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.0.tgz",
-        "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz"
-      },
-      "dependencies": {
-        "minimist": {
-          "version": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
-          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
-          "dev": true
-        }
-      }
-    },
-    "weak-map": {
-      "version": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.0.tgz",
-      "integrity": "sha1-tm5Wqd8L0lp2u/G1FNsSkIBhSjc=",
-      "dev": true
-    },
-    "webidl-conversions": {
-      "version": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.1.tgz",
-      "integrity": "sha1-gBWherg+fhsxFjhIas6B2mziBqA=",
-      "dev": true
-    },
-    "whatwg-encoding": {
-      "version": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz",
-      "integrity": "sha1-PGxFGhmO567FWx7GHQkgxngBpfQ=",
-      "dev": true,
-      "requires": {
-        "iconv-lite": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz"
-      },
-      "dependencies": {
-        "iconv-lite": {
-          "version": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz",
-          "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=",
-          "dev": true
-        }
-      }
-    },
-    "whatwg-url": {
-      "version": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-4.6.0.tgz",
-      "integrity": "sha1-75jaRCJzvgTPljLhdvJX0jlaGuQ=",
-      "dev": true,
-      "requires": {
-        "tr46": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
-        "webidl-conversions": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz"
-      },
-      "dependencies": {
-        "webidl-conversions": {
-          "version": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
-          "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=",
-          "dev": true
-        }
-      }
-    },
-    "window-size": {
-      "version": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz",
-      "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=",
-      "dev": true
-    },
-    "wordwrap": {
-      "version": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
-      "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
-      "dev": true
-    },
-    "wrap-ansi": {
-      "version": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
-      "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
-      "dev": true,
-      "requires": {
-        "string-width": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
-        "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz"
-      }
-    },
-    "wrappy": {
-      "version": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
-      "dev": true
-    },
-    "xml-name-validator": {
-      "version": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz",
-      "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=",
-      "dev": true
-    },
-    "y18n": {
-      "version": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
-      "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
-      "dev": true
-    },
-    "yargs": {
-      "version": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz",
-      "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=",
-      "dev": true,
-      "requires": {
-        "camelcase": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
-        "cliui": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
-        "decamelize": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-        "os-locale": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
-        "string-width": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
-        "window-size": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz",
-        "y18n": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz"
-      }
     }
   }
 }
diff --git a/package.json b/package.json
index 1c6c125266a..687ac780034 100644
--- a/package.json
+++ b/package.json
@@ -4,13 +4,11 @@
   "description": "Linux Command",
   "main": "dist/data.json",
   "scripts": {
-    "test": "echo \"Error: no test specified\" && exit 1",
     "start": "node build/compile.js && npm run deploy",
-    "deploy": "node build/deploy.js",
-    "build:css": "stylus -u autoprefixer-stylus template/styl/index.styl -o .deploy/ -c",
-    "watch:css": "stylus -u autoprefixer-stylus -w template/styl/index.styl -o .deploy/ -c"
+    "deploy": "node build/deploy.js"
   },
   "keywords": [
+    "cli",
     "Linux",
     "Command"
   ],
@@ -21,23 +19,16 @@
     "url": "git+https://github.com/jaywcjlove/linux-command.git"
   },
   "devDependencies": {
-    "autoprefixer": "^6.5.1",
-    "autoprefixer-stylus": "^0.11.0",
-    "cheerio": "^0.22.0",
-    "colors-cli": "^1.0.7",
-    "ejs": "^2.5.2",
-    "gh-pages": "^0.12.0",
-    "highlight.js": "^9.8.0",
-    "loading-cli": "^1.0.2",
-    "markdown-it": "^8.4.0",
-    "marked": "^0.3.6",
-    "marked3": "^0.5.1",
-    "ssr": "^1.1.1",
+    "colors-cli": "^1.0.20",
+    "ejs": "^2.6.1",
+    "fs-extra": "^7.0.0",
+    "gh-pages": "^2.0.0",
+    "loading-cli": "^1.0.8",
+    "marked": "^0.5.1",
+    "path": "^0.12.7",
+    "prismjs": "^1.15.0",
     "stylus": "^0.54.5",
-    "superagent": "^3.0.0",
-    "to-markdown": "^3.0.3",
-    "uglify-js": "^2.7.4",
-    "watch": "^1.0.1"
+    "uglify-js": "^3.4.9"
   },
   "dependencies": {},
   "bugs": {

From e041518d012af3d8729f0a4c15d89dc49de3a98f Mon Sep 17 00:00:00 2001
From: jaywcjlove <398188662@qq.com>
Date: Sat, 29 Sep 2018 16:09:36 +0800
Subject: [PATCH 0209/1284] Modify build.js

---
 build/build.js | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/build/build.js b/build/build.js
index 360e0b4c8cf..8dbb32ced14 100644
--- a/build/build.js
+++ b/build/build.js
@@ -11,10 +11,10 @@ const colors = require('colors-cli/toxic');
 const renderer = new marked.Renderer();
 renderer.heading = (text, level) => {
   if (/[\u4E00-\u9FA5]/i.test(text)) {
-    return '' + text + '';
+    return `${text}`;
   } else {
-    var escapedText = text.toLowerCase().replace(/[^\w]+/g, '-');
-    return '' + text + '';
+    const escapedText = text.toLowerCase().replace(/[^\w]+/g, '-');
+    return `${text}`;
   }
 }
 

From af65b1b0699a7fa7bdfdfd21b65b97ba758cab78 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=A1=B9=E9=87=91?= 
Date: Sun, 7 Oct 2018 10:42:15 +0800
Subject: [PATCH 0210/1284] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20--send-eth/--sen?=
 =?UTF-8?q?d-ip=20=E8=AF=B4=E6=98=8E?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 command/nmap.md | 145 ++++++++++++++++++++++++------------------------
 1 file changed, 73 insertions(+), 72 deletions(-)

diff --git a/command/nmap.md b/command/nmap.md
index bb558a64525..c5a0790f524 100644
--- a/command/nmap.md
+++ b/command/nmap.md
@@ -1,72 +1,73 @@
-nmap
-===
-
-网络探测和安全审核
-
-## 补充说明
-
-**nmap命令** 是一款开放源代码的网络探测和安全审核工具,它的设计目标是快速地扫描大型网络。
-
-### 语法  
-
-```
-nmap(选项)(参数)
-```
-
-### 选项  
-
-```
--O:激活操作探测;
--P0:值进行扫描,不ping主机;
--PT:是同TCP的ping;
--sV:探测服务版本信息;
--sP:ping扫描,仅发现目标主机是否存活;
--ps:发送同步(SYN)报文;
--PU:发送udp ping;
--PE:强制执行直接的ICMPping;
--PB:默认模式,可以使用ICMPping和TCPping;
--6:使用IPv6地址;
--v:得到更多选项信息;
--d:增加调试信息地输出;
--oN:以人们可阅读的格式输出;
--oX:以xml格式向指定文件输出信息;
--oM:以机器可阅读的格式输出;
--A:使用所有高级扫描选项;
---resume:继续上次执行完的扫描;
--P:指定要扫描的端口,可以是一个单独的端口,用逗号隔开多个端口,使用“-”表示端口范围;
--e:在多网络接口Linux系统中,指定扫描使用的网络接口;
--g:将指定的端口作为源端口进行扫描;
---ttl:指定发送的扫描报文的生存期;
---packet-trace:显示扫描过程中收发报文统计;
---scanflags:设置在扫描报文中的TCP标志。
-```
-
-### 参数  
-
-ip地址:指定待扫描报文中的TCP地址。
-
-### 实例  
-
- **安装nmap** 
-
-```
-yum install nmap
-```
-
- **使用nmap扫描www.jsdig.com的开放端口** 
-
-```
-[root@localhost ~]# nmap www.jsdig.com
-
-Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-12-28 00:06 CST
-Interesting ports on 100-42-212-8.static.webnx.com (100.42.212.8):
-Not shown: 1678 filtered ports
-PORT   STATE service
-22/tcp open  ssh
-80/tcp open  http
-
-Nmap finished: 1 IP address (1 host up) scanned in 45.870 seconds
-```
-
-
-
\ No newline at end of file
+nmap
+===
+
+网络探测和安全审核
+
+## 补充说明
+
+**nmap命令** 是一款开放源代码的网络探测和安全审核工具,它的设计目标是快速地扫描大型网络。
+
+### 语法  
+
+```
+nmap(选项)(参数)
+```
+
+### 选项  
+
+```
+-O:激活操作探测;
+-P0:值进行扫描,不ping主机;
+-PT:是同TCP的ping;
+-sV:探测服务版本信息;
+-sP:ping扫描,仅发现目标主机是否存活;
+-ps:发送同步(SYN)报文;
+-PU:发送udp ping;
+-PE:强制执行直接的ICMPping;
+-PB:默认模式,可以使用ICMPping和TCPping;
+-6:使用IPv6地址;
+-v:得到更多选项信息;
+-d:增加调试信息地输出;
+-oN:以人们可阅读的格式输出;
+-oX:以xml格式向指定文件输出信息;
+-oM:以机器可阅读的格式输出;
+-A:使用所有高级扫描选项;
+--resume:继续上次执行完的扫描;
+-P:指定要扫描的端口,可以是一个单独的端口,用逗号隔开多个端口,使用“-”表示端口范围;
+-e:在多网络接口Linux系统中,指定扫描使用的网络接口;
+-g:将指定的端口作为源端口进行扫描;
+--ttl:指定发送的扫描报文的生存期;
+--packet-trace:显示扫描过程中收发报文统计;
+--scanflags:设置在扫描报文中的TCP标志。
+--send-eth/--send-ip 使用原始以太网发送/构造指定IP发送
+```
+
+### 参数  
+
+ip地址:指定待扫描报文中的TCP地址。
+
+### 实例  
+
+ **安装nmap** 
+
+```
+yum install nmap
+```
+
+ **使用nmap扫描www.jsdig.com的开放端口** 
+
+```
+[root@localhost ~]# nmap www.jsdig.com
+
+Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-12-28 00:06 CST
+Interesting ports on 100-42-212-8.static.webnx.com (100.42.212.8):
+Not shown: 1678 filtered ports
+PORT   STATE service
+22/tcp open  ssh
+80/tcp open  http
+
+Nmap finished: 1 IP address (1 host up) scanned in 45.870 seconds
+```
+
+
+

From daec36f19513c6568d877351125d9bf379198e26 Mon Sep 17 00:00:00 2001
From: jaywcjlove <398188662@qq.com>
Date: Sun, 7 Oct 2018 11:17:33 +0800
Subject: [PATCH 0211/1284] Fix deploy command error.

---
 build/deploy.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/build/deploy.js b/build/deploy.js
index 10c094ffe27..59f731cbcd5 100644
--- a/build/deploy.js
+++ b/build/deploy.js
@@ -2,7 +2,7 @@ const ghpages = require('gh-pages');
 const loading = require('loading-cli');
 const path = require('path');
 const fs = require('fs');
-const color = require('colors-cli/safe');
+const color = require('colors-cli/toxic');
 
 const deploy_path = path.join(process.cwd(), '.deploy');
 

From 22926dcf097d03fa71185e6d3be6b46d38614263 Mon Sep 17 00:00:00 2001
From: jaywcjlove <398188662@qq.com>
Date: Sun, 7 Oct 2018 11:20:16 +0800
Subject: [PATCH 0212/1284] Update scripts command.

---
 package.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 687ac780034..145c98f74b7 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,8 @@
   "description": "Linux Command",
   "main": "dist/data.json",
   "scripts": {
-    "start": "node build/compile.js && npm run deploy",
+    "start": "npm run build && npm run deploy",
+    "build": "node build/build.js",
     "deploy": "node build/deploy.js"
   },
   "keywords": [

From 64ad089c95b346636439d9d4e3dc23aa9d6c27f2 Mon Sep 17 00:00:00 2001
From: jaywcjlove <398188662@qq.com>
Date: Mon, 8 Oct 2018 16:06:51 +0800
Subject: [PATCH 0213/1284] Modify markdown styles.

---
 template/styl/mixins/markdown.styl | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/template/styl/mixins/markdown.styl b/template/styl/mixins/markdown.styl
index ca78d37b459..d6873d34280 100644
--- a/template/styl/mixins/markdown.styl
+++ b/template/styl/mixins/markdown.styl
@@ -2,7 +2,7 @@
 .markdown-body {
   padding 70px 35px 30px 35px
   word-wrap break-word
-  font-family "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif
+  font-family: "SFMono-Regular",Consolas,"Liberation Mono",Menlo,Courier,monospace;
   font-size 14px
   line-height 1.6
   color #333
@@ -47,7 +47,6 @@
     position: relative
     background-color: #f7f7f9
     border-radius: 3px
-    font: "Source Code Pro", Consolas, Menlo, Monaco, "Courier New", monospace
     font-size: 0.93em
     -webkit-overflow-scrolling: touch
     code {
@@ -64,6 +63,7 @@
       white-space: inherit
       overflow-wrap: normal
       word-wrap: normal!important
+      font-family: "SFMono-Regular",Consolas,"Liberation Mono",Menlo,Courier,monospace;
     }
   }
   .class-name {
@@ -209,4 +209,11 @@
   .shebang, .important {
     color: #FF1717;
   }
+  ul, ol {
+    padding-left: 2em;
+  }
+  p, blockquote, ul, ol, dl, table, pre {
+    margin-top: 0;
+    margin-bottom: 16px;
+  }
 }
\ No newline at end of file

From b590341480846ea9423a650d2351d7f7b10f4a9f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?=
 <398188662@qq.com>
Date: Thu, 11 Oct 2018 09:55:40 +0800
Subject: [PATCH 0214/1284] Update nc.md

---
 command/nc.md | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/command/nc.md b/command/nc.md
index e8cd6b22f88..361745c791b 100644
--- a/command/nc.md
+++ b/command/nc.md
@@ -60,4 +60,13 @@ TCP端口扫描
 y  //用户输入
 ```
 
+查看 443 端口是否被阻止
+
+```bash
+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.
+```
+
 

From e1c6a356096a036174380746a0b926aca07631e7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83=E2=84=A2?=
 <398188662@qq.com>
Date: Thu, 11 Oct 2018 09:57:30 +0800
Subject: [PATCH 0215/1284] Update nc.md

---
 command/nc.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/command/nc.md b/command/nc.md
index 361745c791b..11489e6fdb6 100644
--- a/command/nc.md
+++ b/command/nc.md
@@ -60,7 +60,7 @@ TCP端口扫描
 y  //用户输入
 ```
 
-查看 443 端口是否被阻止
+查看从服务器到目的地的出站端口 443 是否被防火墙阻止
 
 ```bash
 nc -vz acme-v02.api.letsencrypt.org 443 -w2

From c7caaa437c569ca6f1cc6f860ed50ae3f19e0368 Mon Sep 17 00:00:00 2001
From: jaywcjlove <398188662@qq.com>
Date: Thu, 11 Oct 2018 12:49:18 +0800
Subject: [PATCH 0216/1284] Modify footer info.

---
 template/footer.ejs | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/template/footer.ejs b/template/footer.ejs
index 130a354720f..2182f82624d 100644
--- a/template/footer.ejs
+++ b/template/footer.ejs
@@ -1,10 +1,15 @@
 
   

数据来源于 GitHub Contributors,使用action-contributors创建。 From 0db6aa6243718b2ab3a7f76f02ffc41abcd71eca Mon Sep 17 00:00:00 2001 From: FunKeen <112614943+FunKeen@users.noreply.github.com> Date: Wed, 10 Jul 2024 21:30:56 +0800 Subject: [PATCH 1162/1284] doc: update command/awk.md (#590) --- command/awk.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/command/awk.md b/command/awk.md index 00145315da7..9a540cb3d81 100644 --- a/command/awk.md +++ b/command/awk.md @@ -371,7 +371,7 @@ awk 'NR%2==1{next}{print NR,$0;}' text.txt 当记录行号除以2余1,就跳过当前行。下面的`print NR,$0`也不会执行。下一行开始,程序有开始判断`NR%2`值。这个时候记录行号是`:2` ,就会执行下面语句块:`'print NR,$0'` -分析发现需要将包含有“web”行进行跳过,然后需要将内容与下面行合并为一行: +跳过以“web”为首的行,再将该行内容分别与下面不以“web”为首的行合并打印,使用一个“:”和一个制表符连接: ```shell cat text.txt @@ -386,7 +386,7 @@ web03[192.168.2.102] mysqld ok httpd ok 0 -awk '/^web/{T=$0;next;}{print T":"t,$0;}' text.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 From d8438272b0bf5913a260a28822566583c8f4c1e7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 10 Jul 2024 13:31:41 +0000 Subject: [PATCH 1163/1284] doc: update README.md. --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0f8d193c9ee..6da01a1f3e1 100644 --- a/README.md +++ b/README.md @@ -361,6 +361,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. shc sfwwslm rexlin600 +MinsonLee Marnm mwei Wang @@ -381,7 +382,6 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. HighScorePlayer Herbert8 Guiying Li -FunKeen Frankie Divenire Derek @@ -391,6 +391,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Azroy Alan 0x_000 +c2ch brinkqiang bell azureology @@ -419,8 +420,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Rining Wu Ray Yee QinShower -Mystic -MinsonLee +Mystic 贡献者列表,由 [contributors](https://github.com/jaywcjlove/github-action-contributors) 自动生成 From 7553e4f483b86a1c6d9e1ae09f82750d663d2da7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 10 Jul 2024 13:31:42 +0000 Subject: [PATCH 1164/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index 0b4ad636e1d..b92b768b4ce 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -107,6 +107,7 @@ shc sfwwslm rexlin600 +MinsonLee Marnm mwei Wang @@ -127,7 +128,6 @@ HighScorePlayer Herbert8 Guiying Li -FunKeen Frankie Divenire Derek @@ -137,6 +137,7 @@ Azroy Alan 0x_000 +c2ch brinkqiang bell azureology @@ -165,8 +166,7 @@ Rining Wu Ray Yee QinShower -Mystic -MinsonLee +Mystic

数据来源于 GitHub Contributors,使用action-contributors创建。 From f9de3eb62156ead712f9d852deb556132e00bdc3 Mon Sep 17 00:00:00 2001 From: "Q.Ben Zheng" <40693636+Zhengqbbb@users.noreply.github.com> Date: Thu, 11 Jul 2024 09:33:42 +0800 Subject: [PATCH 1165/1284] docs: add X-CMD social website (#591) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 6da01a1f3e1..bc9f51e9048 100644 --- a/README.md +++ b/README.md @@ -191,6 +191,7 @@ https://raw.githubusercontent.com/jaywcjlove/linux-command/master/command/<命 - [鸟哥的linux私房菜](http://linux.vbird.org/) - 非常适合Linux入门初学者看的教程。 - [Linux公社](http://www.linuxidc.com/) - Linux相关的新闻、教程、主题、壁纸都有。 - [Linux Today](http://www.linuxde.net) - Linux新闻资讯发布,Linux职业技术学习!。 +- [X-CMD](https://www.x-cmd.com/) - Shell + AWK 为核心增强原生命令输出以及交互体验,各种命令以及现代化软件包的介绍和使用教程,每日科技新闻资讯,欢迎浏览关注! ### 知识相关 From f686028a0f260eba0101fce5cbeb7b80cd75c9fc Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 11 Jul 2024 01:34:27 +0000 Subject: [PATCH 1166/1284] doc: update README.md. --- README.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index bc9f51e9048..2c50f0cc271 100644 --- a/README.md +++ b/README.md @@ -290,23 +290,23 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. xhal VVatt gggwvg -Dazhuangw -Alterem -YH -YEUNGCHIE -Xrtero -Xingwen Zhang -Shan Chenyu -RichardLCD BingCoke Ein Verne +FunKeen Pan, Wen-Ming -lewis1573 -leo -kid1412621 -kassadin +RichardLCD +Shan Chenyu +Xingwen Zhang +Xrtero +YEUNGCHIE +Dazhuangw +Alterem +YH juemuren4449 -jqz3.tech +kassadin +kid1412621 +leo +lewis1573 linuxwd Ricardowang cole @@ -315,6 +315,8 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. noodles2hg nsnans oliver +Yidan Wang +jqz3.tech jcdj666 hululu1068 huangyao @@ -329,8 +331,6 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. dayday cxalc Forever121 -c2ch -Yidan Wang Panthea Johnson 远方 谢民皆 From 071e0c0aa1535c828b42ba71b5933e698035a7cb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 11 Jul 2024 01:34:29 +0000 Subject: [PATCH 1167/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index b92b768b4ce..c4c13664ab2 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -35,23 +35,23 @@ xhal VVatt gggwvg -Dazhuangw -Alterem -YH -YEUNGCHIE -Xrtero -Xingwen Zhang -Shan Chenyu -RichardLCD BingCoke Ein Verne +FunKeen Pan, Wen-Ming -lewis1573 -leo -kid1412621 -kassadin +RichardLCD +Shan Chenyu +Xingwen Zhang +Xrtero +YEUNGCHIE +Dazhuangw +Alterem +YH juemuren4449 -jqz3.tech +kassadin +kid1412621 +leo +lewis1573 linuxwd Ricardowang cole @@ -60,6 +60,8 @@ noodles2hg nsnans oliver +Yidan Wang +jqz3.tech jcdj666 hululu1068 huangyao @@ -74,8 +76,6 @@ dayday cxalc Forever121 -c2ch -Yidan Wang Panthea Johnson 远方 谢民皆 From e479f15adfb16f08b5f0c8e6cd09dcd65eef1cd3 Mon Sep 17 00:00:00 2001 From: hotdogc1017 Date: Mon, 15 Jul 2024 10:19:49 +0800 Subject: [PATCH 1168/1284] =?UTF-8?q?docs(find=E5=91=BD=E4=BB=A4):=20?= =?UTF-8?q?=E6=8B=93=E5=B1=95`find`=E5=91=BD=E4=BB=A4=E6=8F=8F=E8=BF=B0?= =?UTF-8?q?=E4=BB=A5=E5=8F=8A=E8=A1=A5=E5=85=85=E9=A2=9D=E5=A4=96=E7=9A=84?= =?UTF-8?q?=E8=A1=A8=E8=BE=BE=E5=BC=8F=E9=80=89=E9=A1=B9=20(#593)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- command/find.md | 399 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 369 insertions(+), 30 deletions(-) diff --git a/command/find.md b/command/find.md index d6c5521366b..96612ab8420 100644 --- a/command/find.md +++ b/command/find.md @@ -3,18 +3,43 @@ find 在指定目录下查找文件 +## 解释 + +从每个指定的起始点 (目录) 开始,搜索以该点为根的目录树,并按照运算符优先级规则**从左至右**评估给定的表达式,直到结果确定,此时`find`会继续处理下一个文件名。 + ## 补充说明 -**find命令** 用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。 +本文列出的选项指的是**表达式列表中的选项**。这些选项控制了`find`的行为,需在**最后一个路径名之后**立即指定。 -### 语法 +五个真实选项: `-H、-L、-P、-D 和 -O`。如果出现,**必须位于第一个路径名之前**。关于这部分内容本文不做描述,具体内容可参考[man7.org中的find](https://man7.org/linux/man-pages/man1/find.1.html#top_of_page) +如果使用该命令时,不设置任何参数,则`find`命令将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部进行显示。等效于以下命令: ```shell -find(选项)(参数) +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<参考文件或目录>:查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录; @@ -22,65 +47,379 @@ find(选项)(参数) -cmin<分钟>:查找在指定时间之时被更改过的文件或目录; -cnewer<参考文件或目录>查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录; -ctime<24小时数>:查找在指定时间之时被更改的文件或目录,单位以24小时计算; --daystart:从本日开始计算时间; --depth:从指定目录下最深层的子目录开始查找; -empty:寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录; --exec<执行指令>:假设find指令的回传值为True,就执行该指令; +-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<连接数目>:查找符合指定的硬连接数目的文件或目录; -lname<范本样式>:指定字符串作为寻找符号连接的范本样式; --ls:假设find指令的回传值为True,就将文件或目录名称列出到标准输出; --maxdepth<目录层级>:设置最大目录层级; --mindepth<目录层级>:设置最小目录层级; -mmin<分钟>:查找在指定时间曾被更改过的文件或目录,单位以分钟计算; --mount:此参数的效果和指定“-xdev”相同; -mtime<24小时数>:查找在指定时间曾被更改过的文件或目录,单位以24小时计算; -name<范本样式>:指定字符串作为寻找文件或目录的范本样式; -newer<参考文件或目录>:查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录; +-newerXY<引用>:如果正在考虑的文件的时间戳 X 比文件引用的时间戳 Y 更新则成功。 -nogroup:找出不属于本地主机群组识别码的文件或目录; --noleaf:不去考虑目录至少需拥有两个硬连接存在; -nouser:找出不属于本地主机用户识别码的文件或目录; --ok<执行指令>:此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令; -path<范本样式>:指定字符串作为寻找目录的范本样式; -perm<权限数值>:查找符合指定的权限数值的文件或目录; --print:假设find指令的回传值为True,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有“./”字符串; --print0:假设find指令的回传值为True,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行; --printf<输出格式>:假设find指令的回传值为True,就将文件或目录名称列出到标准输出。格式可以自行指定; --prune:不寻找字符串作为寻找文件或目录的范本样式; +-readable:匹配当前用户可读的文件 -regex<范本样式>:指定字符串作为寻找文件或目录的范本样式; +-samefile 名称 文件与名称指向相同的 inode。 -size<文件大小>:查找符合指定的文件大小的文件; --true:将find指令的回传值皆设为True; -type<文件类型>:只寻找符合指定的文件类型的文件; -uid<用户识别码>:查找符合指定的用户识别码的文件或目录; -used<日数>:查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算; -user<拥有者名称>:查找符和指定的拥有者名称的文件或目录; --version或——version:显示版本信息; --xdev:将范围局限在先行的文件系统中; +-writable:匹配当前用户可写入的文件。 -xtype<文件类型>:此参数的效果和指定“-type”参数类似,差别在于它针对符号连接检查。 +-context<表达式>:仅限 SELinux。文件的安全上下文与全局模式匹配 ``` -### 参数 +### 操作选项 + +#### -delete 删除文件或目录。 +> :warning:警告:find 命令会将命令行作为表达式进行解析,因此将`-delete`放在首位会将指定的起始点下的**所有内容删除**。且`-delete`操作无法删除一个目录,除非它是空的。 + +##### *无参数* + +##### 描述 +如果删除成功则返回真。若删除失败,将显示错误消息,并且 find 最终退出时的状态码将为非零。 + +##### 相关选项 +- **-depth**:在命令行中使用`-delete`操作会自动启用`-depth`选项。为了避免意外情况,通常最好在早期的**Tests选项**中**明确使用**`-depth`选项。 +- **-prune**:由于`-depth`会使`-prune`失效,因此`-delete`操作无法与`-prune`有效结合使用。通常,用户可能希望在实际删除操作前,先用带有`-print`的查找命令行进行测试,以确保在添加`-delete`进行实际删除时不会出现意外结果。 +- **-ignore_readdir_race**:`-delete`与此选项一起使用时,find 会忽略自父目录读取以来文件已消失的情况下`-delete`操作的错误:它不会输出错误诊断,不会将退出代码更改为非零,并且`-delete`操作的返回代码将为真。 + +#### -exec 执行命令 + +> :warning:警告:使用`-exec`操作存在不可避免的安全问题,应改用`-execdir`选项。 + +##### 参数 +`command ;` 或 `command {} +` + +##### 描述 +如果返回状态为 0,则结果为真。**注意**:find 命令会将**所有后续参数**视为`command`的参数,直到遇到包含`;`的参数为止。字符串`{}`会在`command`的参数中所有出现的位置被替换为当前正在处理的文件名,而不仅仅是在它单独出现的参数中,这与某些版本的 find 不同。这两种结构可能需要使用反斜杠`\`或引号来转义,以防止被 shell 扩展。指定的命令会为每个匹配的文件运行一次。命令在起始目录中执行。 + +#### -execdir 在包含匹配文件的子目录中执行命令 + +##### 参数 +`command ;` | `command {} +` + +##### 描述 +类似于`-exec`,但指定的`command`会在包含匹配文件的**子目录中运行**,而非find的起始点目录。与`-exec`一样,如果从shell调用find,`{}`应加引号。这是一种更安全的调用`command`方式,因为它避免了在解析匹配文件路径时出现的竞争条件。与`-exec`操作类似,`+`形式的`-execdir`会构建一个命令行来处理多个匹配文件,但任何给定的`command`调用只会列出存在于同一子目录中的文件。如果使用此选项,必须确保 PATH 环境变量未引用`.`,否则攻击者可以通过在您将运行`-execdir`的目录中留下一个适当命名的文件来运行任何命令。同样,PATH 中的条目**不应为空**或**非绝对目录名**。如果使用`+`形式的任何调用以非零值作为退出状态返回,则 find 也会返回非零退出状态。如果 find 遇到错误,有时会导致立即退出,**因此某些待处理的command可能根本不会运行**。 操作结果取决于使用的是`+`还是`;`变体。`-execdir command {} + `总是返回真,而 `-execdir command {} ;`仅在命令返回 0 时返回真。 + +#### -fls 创建文件并将结果写入文件 + +##### 参数 +`file` + +##### 描述 +此选项始终返回真。`-fls`类似于`-ls`和`-fprint`,但`-fls`会将结果写入文件中。无论谓词是否匹配,输出文件始终会被创建。有关文件名中特殊字符处理的信息,请参阅“特殊文件名处理”部分。 + +#### -fprint 将完整文件名打印到指定文件中 + +##### 参数 +`file` + +##### 描述 +此选项始终返回真。若运行 find 时`file`不存在,则创建该`file`;若`file`已存在,则截断其内容。文件名`/dev/stdout`和`/dev/stderr`有特殊处理,分别指向标准输出和标准错误输出。即使谓词从未匹配,输出文件也会始终创建。 + +#### -fprint0 + +##### 参数 +`file` + +##### 描述 +此选项始终返回真。类似于`-print0`,但将输出写入文件;类似于`-fprint`。即使谓词从未匹配,输出文件也始终会被创建。 + +#### -fprintf + +##### 参数 +`file` + +##### 描述 +此选项始终返回真。类似于`-printf`,但将输出写入文件;类似于`-fprint`,即使谓词从未匹配,输出文件也会始终创建。 + +#### -ls 列出当前文件并输出到标准输出 + +##### *无参数* + +##### 描述 +此选项始终返回真。以`ls -dils`格式列出当前文件并输出到标准输出。块计数为 1 KB 块,除非设置了环境变量 POSIXLY_CORRECT,此时使用 512 字节块。 + +#### -ok 执行命令前询问用户 + +##### 参数 +`command ;` + +##### 描述 +类似于`-exec`,但首先会询问用户。如果用户同意,则运行该命令;否则仅返回 false。若运行该命令,其标准输入将被重定向至`/dev/null`。对提示的响应会与一对正则表达式进行匹配,以确定其为肯定或否定回答。若设置POSIXLY_CORRECT 环境变量,则该正则表达式从系统获取;否则,从 find 的消息翻译中获取。如果系统没有合适的定义,将使用 find 自身的定义。无论哪种情况,正则表达式本身的解释都会受到环境变量 LC_CTYPE(字符类)和 LC_COLLATE(字符范围和等价类)的影响。 + +##### 相关选项 +- **-files0-from**:不能与`-ok`同时指定。 + +#### -okdir + +##### 参数 +`command ;` + +##### 描述 +类似于`-execdir`,但在执行前会以与`-ok`相同的方式询问用户。如果用户不同意,则直接返回 false。如果命令被执行,其标准输入将从`/dev/null`重定向。 + +##### 相关选项 +- **-files0-from**:不能与`-okdir`同时指定。 + +#### -print 打印完整文件名,后跟一个换行符 + +##### *无参数* + +##### 描述 +此选项始终返回真。如果你将 find 的输出通过管道传输到另一个程序,并且你正在搜索的文件可能包含换行符,那么应该考虑使用`-print0`而不是`-print`。 + +#### -print0 打印完整文件名,后跟一个空字符 + +##### *无参数* + +##### 描述 +此选项始终返回真。包含换行符或其他类型空白字符的文件名能被正确解析,以便处理 find 输出的程序能正确理解。此选项对应于`xargs`的`-0`选项。 + +#### -printf 打印格式 + +##### 参数 +`format` + +可用的转义字符和指令包括: +- \a 警报。 +- \b 退格键。 +- \c 立即停止打印并清空输出。 +- \f 换页。 +- \n 换行。 +- \r 回车符。 +- \t 水平制表符。 +- \v 垂直制表符。 +- \0 空字符。 +- \\\ 一个字面的反斜杠`\`。 +- \NNN 字符,其 ASCII 码为 NNN(八进制)。 +- A 一个反斜杠字符`\`后跟任何其他字符,都会被视为普通字符,因此它们都会被打印出来。 +- %% 一个字面的百分号。 +- %a 文件的最后访问时间,格式为 C 语言 ctime(3)函数返回的样式。 + .....更多内容待补充 + +##### 描述 +*暂无* + +#### -prune 如果文件是目录,则不进入该目录 + +##### *无参数* + +##### 描述 +此选项始终返回真。 + +##### 相关选项 +- **-depth**:如果指定了`-depth`,那么`-prune`将无效。 +- **-delete**:因为`-delete`隐含了`-depth`,所以不能有效地同时使用两者。 + +#### -quit 立即退出 + +##### *无参数* + +##### 描述 +如果没有发生错误,则返回值为零。这与`-prune `不同,因为`-prune`仅适用于被修剪目录的内容,而`-quit`则使 find 立即停止。不会有任何子进程继续运行。在程序退出之前,任何通过`-exec ... +`或`-execdir ... +`构建的命令行都会被调用。执行`-quit`后,命令行中指定的文件将不再被处理。例如,`find /tmp/foo /tmp/bar -print -quit`将仅打印 `/tmp/foo`。`-quit`的一个常见用途是在找到所需内容后停止搜索文件系统。 + +### 全局选项 +始终返回真值。全局选项对命令行中较早出现的测试也会生效。为避免混淆,全局选项应在命令行上列出**起始点之后、第一个测试选项、位置选项或操作选项之前指定**。若在其他位置指定全局选项,find 会发出警告消息,说明这可能引起混淆。 + +> 全局选项出现在起始点列表之后,因此与例如`-L` 这样的选项不属于同一类别。 + +#### -d `-depth`的同义词 + +##### *无参数* + +##### 描述 +仅用于与 FreeBSD、NetBSD、MacOS X 和 OpenBSD 兼容。 + +#### -depth 遍历级别 + +##### 参数 +`levels` + +##### 描述 +在处理目录本身之前,先处理目录中的内容。`-delete`操作也隐含了`-depth`。 + +#### -files0-from 从文件中读取起始点,而非通过命令行获取。 + +##### 参数 +`file` + +##### 描述 + +使用此选项可以安全地给 find 命令传递任意数量的起始点。使用此选项和在命令行中传递起始点**是互斥的**,因此不允许同时进行。文件参数是强制性的。文件中的起始点必须用 ASCII NUL 字符分隔。两个连续的 NUL 字符,即带有零长度文件名的起始点是不允许的,这将导致错误诊断,并随后产生非零退出码。 + +与标准调用不同,在标准调用中,如果没有传递路径参数,find 会默认将当前目录作为起始点。起始点的处理方式与其他情况相同,例如,find 命令会递归进入子目录,除非另有阻止。若要仅处理起始点,可以额外传递`-maxdepth 0`参数。 + +**其他说明**:如果一个文件在输入文件中被列出多次,则其是否会被多次访问未作规定。如果在查找操作期间文件被修改,结果同样未作规定。最后,find 退出时(无论是通过`-quit`还是其他方式),命名文件中的查找位置也未作规定。此处**未作规定**意味着它**可能有效也可能无效**,**或者不做任何特定的事情**,并且该行为可能因平台或 findutils 版本而异。 + +> :bulb:可以使用`-files0-from`**从标准输入流中读取起始点列表**,例如从管道中读取。在这种情况下,不允许使用`-ok`和`-okdir`操作,因为它们会干扰从标准输入读取以获取用户确认。 + +> :warning:警告:如果给定文件为空,find 不会处理任何起始点,因此在解析完程序参数后会立即退出。 + +#### -help 和 --help 打印 find 命令行用法的摘要并退出。 + +##### *无参数* + +##### 描述 +*无描述* + +#### -ignore_readdir_race + +##### *无参数* + +##### 描述 +通常情况下,当 find 无法对文件进行状态检查(stat)时,会发出错误消息。如果您**启用此选项**,并且在 find 从目录读取文件名,到尝试进行状态检查**之间的时间内文件被删除**,则不会发出任何错误消息。这也适用于命令行中指定的文件或目录。此选项在命令行读取时生效,这意味着您不能在文件系统的某部分启用此选项,而在另一部分禁用它(如果需要这样做,您需要发出两个 find 命令,一个启用选项,一个不启用)。此外,使用`-ignore_readdir_race`选项时,如果在读取父目录后文件已消失,find 命令将忽略`-delete`操作的错误:它不会输出错误诊断信息,并且`-delete`操作的返回码将为真。 + +#### -maxdepth 最大遍历级别 + +##### 参数 +`levels` + +##### 描述 +最多向下遍历 levels 级(一个非负整数)目录层级。使用`-maxdepth 0`表示**仅对起始点本身**应用测试和操作。 + +#### -mindepth 最小遍历级别 + +##### 参数 +`levels` + +##### 描述 +在小于指定级别(非负整数)的层级上不执行任何测试或操作。使用`-mindepth 1`表示处理**除起始点外的所有文件**。 + +#### -mount 不在其他文件系统中下降目录 + +##### *无参数* + +##### 描述 +这是`-xdev`的替代名称,用于与其他一些版本的 find 兼容。 + +#### -noignore_readdir_race + +##### *无参数* + +##### 描述 +关闭了`-ignore_readdir_race`的效果。 + +#### -noleaf 不进行优化。 + +##### *无参数* + +##### 描述 +不通过假设目录包含比其硬链接数少 2 个子目录来进行优化。在搜索不遵循 Unix 目录链接惯例的文件系统时,需要此选项,例如 CD-ROM、MS-DOS 文件系统或 AFS 卷挂载点。在正常的 Unix 文件系统上,每个目录至少有 2 个硬链接:其名称及其`.`条目。此外,其子目录(如果有)各自有一个指向该目录的`..`条目。当 find 检查一个目录时,在它已经统计了比目录链接数少 2 个子目录之后,它知道该目录中的其余条目是非目录(目录树中的“叶”文件)。如果只需要检查文件的名称,则无需对其进行状态检查;这可以显著提高搜索速度。 + +#### -version 和 --version 打印 find 的版本号并退出。 + +##### *无参数* + +##### 描述 +*无描述* + +#### -xdev 不进入其他文件系统的目录。 + +##### *无参数* + +##### 描述 +*无描述* + +### 位置选项 +始终返回真值。它们仅影响命令行中后续的测试。 + +#### -daystart 从今天开始 + +> 用于 `-amin`、`-atime`、`-cmin`、`-ctime`、`-mmin` 和 `-mtime` + +##### *无参数* + +##### 描述 +从今天开始而非从 24 小时前开始。此选项仅影响命令行中后续出现的测试。 + +#### ~~-follow~~ 解引用符号链接。 + +##### *无参数* + +##### 描述 +**已弃用,请改用`-L`选项**。隐含`-noleaf`。`-follow`选项仅影响命令行中出现在其后的那些测试。除非已指定`-H`或`-L`选项,否则`-follow`选项的位置会改变`-newer`谓词的行为;作为`-newer`参数列出的任何文件,如果它们是符号链接,则会被解引用。同样的情况适用于`-newerXY`、`-anewer`和`-cnewer`。类似地,`-type `谓词将始终匹配符号链接所指向的文件类型,而非链接本身。使用`-follow`会导致 `-lname`和`-ilname`谓词始终返回 false。 + +#### -regextype 更改正则表达式语法 + +##### 参数 +`type` + +##### 描述 +更改`-regex`和`-iregex`测试在命令行后续部分所理解的正则表达式语法。要查看已知的正则表达式类型,请使用`-regextype help`。Texinfo 文档解释了各种正则表达式类型的含义及其差异。如果您不使用此选项,find 的行为如同已指定正则表达式类型为`emacs`。 + +#### -warn 和 -nowarn 开启或关闭警告消息。 + +##### *无参数* + +##### 描述 +这些警告仅适用于命令行使用,不适用于 find 在搜索目录时可能遇到的情况。默认行为是:如果标准输入是`tty`,则对应`-warn`;否则对应`-nowarn`。如果产生与命令行使用相关的警告消息,find 的退出状态不受影响。如果设置了 POSIXLY_CORRECT 环境变量,并且也使用了`-warn`,则未指定哪些(如果有)警告会被激活。 + +### 运算符选项 +运算符按优先级递减顺序列出: +- `(expr)` 强制优先级。由于括号对 shell 有特殊含义,通常需要对它们进行引用。许多示例为此使用了反斜杠:`\(...\)` 而非 `(...)`。 +- `! expr` 若表达式为假则结果为真(取反)。此字符通常也需要防止被 shell 解释。 + +> :bulb:提示:当`-a`隐式指定(例如两个测试之间没有显式运算符)或显式指定时,其优先级高于`-o`。例如,`find . -name foo -o -name bar -print`永远不会打印`foo`。 + +#### -not + +##### 参数 +`expr` + +##### 描述 +等同于`! expr`,但不符合 POSIX 标准。 + +#### -a + +##### 参数 +`expr1` -a `expr2` + +##### 描述 +两个连续的表达式被视为隐含地用`-a`连接;如果`expr1`为假,则不评估`expr2`。等同于`expr1 expr2`。 + +#### -and + +##### 参数 +`expr1` -and `expr2` + +##### 描述 +与`-a`相同。但不符合 POSIX 标准。 + +#### -o + +##### 参数 +`expr1` -o `expr2` + +##### 描述 +`expr1`和`expr2`始终都会被评估。`expr1`的值会被丢弃;列表的值即为`expr2`的值。逗号运算符(`,`)在搜索多种不同类型的事物时非常有用,但只会遍历文件系统层次结构一次。`-fprintf`动作可用于将各种匹配项列出到多个不同的输出文件中。若`expr1`为真,则不评估`expr2`。 +#### -or + +##### 参数 +`expr1` -or `expr2` -起始目录:查找文件的起始目录。 +##### 描述 +与`-o`相同。但不符合 POSIX 标准。 -### 实例 +## 例子 +当前目录搜索所有文件,且文件内容包含 “140.206.111.111” ```shell -# 当前目录搜索所有文件,文件内容 包含 “140.206.111.111” 的内容 find . -type f -name "*" | xargs grep "140.206.111.111" ``` From be1fb35497ef07b9c11ca542ebee05248f968361 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 15 Jul 2024 02:20:23 +0000 Subject: [PATCH 1169/1284] doc: update README.md. --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 2c50f0cc271..49a4b0a773b 100644 --- a/README.md +++ b/README.md @@ -302,6 +302,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Dazhuangw Alterem YH +jqz3.tech juemuren4449 kassadin kid1412621 @@ -315,8 +316,6 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. noodles2hg nsnans oliver -Yidan Wang -jqz3.tech jcdj666 hululu1068 huangyao @@ -331,6 +330,8 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. dayday cxalc Forever121 +c2ch +Yidan Wang Panthea Johnson 远方 谢民皆 @@ -392,7 +393,6 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Azroy Alan 0x_000 -c2ch brinkqiang bell azureology @@ -421,6 +421,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Rining Wu Ray Yee QinShower +Q.Ben Zheng Mystic 贡献者列表,由 [contributors](https://github.com/jaywcjlove/github-action-contributors) 自动生成 From ead3b5460a6d13b25e03ccdee24b05ef75e13f9e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 15 Jul 2024 02:20:24 +0000 Subject: [PATCH 1170/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index c4c13664ab2..9b51e3691fd 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -47,6 +47,7 @@ Dazhuangw Alterem YH +jqz3.tech juemuren4449 kassadin kid1412621 @@ -60,8 +61,6 @@ noodles2hg nsnans oliver -Yidan Wang -jqz3.tech jcdj666 hululu1068 huangyao @@ -76,6 +75,8 @@ dayday cxalc Forever121 +c2ch +Yidan Wang Panthea Johnson 远方 谢民皆 @@ -137,7 +138,6 @@ Azroy Alan 0x_000 -c2ch brinkqiang bell azureology @@ -166,6 +166,7 @@ Rining Wu Ray Yee QinShower +Q.Ben Zheng Mystic

From 6545af6381e10908c5f954a7b76f6aaa8eda5b1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83?= Date: Wed, 31 Jul 2024 15:25:44 +0800 Subject: [PATCH 1171/1284] doc: Update README.md #595 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 49a4b0a773b..c4203235e3e 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ **推荐使用的镜像 web 版本** -[**`getaifun.com`**](https://getaifun.com/linux),[**`linux.devonline.net`**](http://linux.devonline.net/),[**`man.zch.ooo`**](https://man.zch.ooo/),[**`linux.mmoke.com`**](https://linux.mmoke.com),[**`bqrdh.com`**](https://tools.bqrdh.com/linux-command/),[**`linux.zyimm.com`**](http://linux.zyimm.com/),[**`linux.vovuo.com`**](https://linux.vovuo.com/),[`linux.liguiying.cn`](https://linux.liguiying.cn/), [`renye.net`](https://renye.net/), [`diqi.org`](https://diqi.org/),[`linux.alistnas.xyz`](https://linux.alistnas.xyz/) +[**`srebro.cn`**](https://linux.srebro.cn/),[**`getaifun.com`**](https://getaifun.com/linux),[**`linux.devonline.net`**](http://linux.devonline.net/),[**`man.zch.ooo`**](https://man.zch.ooo/),[**`linux.mmoke.com`**](https://linux.mmoke.com),[**`bqrdh.com`**](https://tools.bqrdh.com/linux-command/),[**`linux.zyimm.com`**](http://linux.zyimm.com/),[**`linux.vovuo.com`**](https://linux.vovuo.com/),[`linux.liguiying.cn`](https://linux.liguiying.cn/), [`renye.net`](https://renye.net/), [`diqi.org`](https://diqi.org/),[`linux.alistnas.xyz`](https://linux.alistnas.xyz/) **其它 web 版本** From ef397aec19745e23f24eba1dd237b7dc14a93068 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 31 Jul 2024 07:26:17 +0000 Subject: [PATCH 1172/1284] doc: update README.md. --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c4203235e3e..c9ec9c2ec57 100644 --- a/README.md +++ b/README.md @@ -319,6 +319,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. jcdj666 hululu1068 huangyao +hotdogc1017 gcluffy ghy gesty @@ -330,7 +331,6 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. dayday cxalc Forever121 -c2ch Yidan Wang Panthea Johnson 远方 @@ -363,6 +363,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. shc sfwwslm rexlin600 +c2ch MinsonLee Marnm mwei From 5f8043de11b823018e95aef0500e67bb435ef479 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 31 Jul 2024 07:26:18 +0000 Subject: [PATCH 1173/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index 9b51e3691fd..f2cf5f0e086 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -64,6 +64,7 @@ jcdj666 hululu1068 huangyao +hotdogc1017 gcluffy ghy gesty @@ -75,7 +76,6 @@ dayday cxalc Forever121 -c2ch Yidan Wang Panthea Johnson 远方 @@ -108,6 +108,7 @@ shc sfwwslm rexlin600 +c2ch MinsonLee Marnm mwei From 774d3af78e3d3203b3edc03f3e759e51a1e63e91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83?= Date: Thu, 1 Aug 2024 01:08:44 +0800 Subject: [PATCH 1174/1284] doc: Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c9ec9c2ec57..9c3e2d11ec9 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ **推荐使用的镜像 web 版本** -[**`srebro.cn`**](https://linux.srebro.cn/),[**`getaifun.com`**](https://getaifun.com/linux),[**`linux.devonline.net`**](http://linux.devonline.net/),[**`man.zch.ooo`**](https://man.zch.ooo/),[**`linux.mmoke.com`**](https://linux.mmoke.com),[**`bqrdh.com`**](https://tools.bqrdh.com/linux-command/),[**`linux.zyimm.com`**](http://linux.zyimm.com/),[**`linux.vovuo.com`**](https://linux.vovuo.com/),[`linux.liguiying.cn`](https://linux.liguiying.cn/), [`renye.net`](https://renye.net/), [`diqi.org`](https://diqi.org/),[`linux.alistnas.xyz`](https://linux.alistnas.xyz/) +[**`srebro.cn`**](https://linux.srebro.cn/),[**`getaifun.com`**](https://getaifun.com/linux),[**`linux.devonline.net`**](http://linux.devonline.net/),[**`man.zch.ooo`**](https://man.zch.ooo/),[**`linux.mmoke.com`**](https://linux.mmoke.com),[**`bqrdh.com`**](https://tools.bqrdh.com/linux-command/),[**`linux.zyimm.com`**](http://linux.zyimm.com/),[**`linux.vovuo.com`**](https://linux.vovuo.com/),[`linux.liguiying.cn`](https://linux.liguiying.cn/), [`renye.net`](https://renye.net/), [`diqi.org`](https://diqi.org/),[`linux.alistnas.xyz`](https://linux.alistnas.xyz/),[`nenufm.com`](https://www.nenufm.com/linux-command/) **其它 web 版本** From 15c63feb00972d728585fa13b965af2d2a789cc5 Mon Sep 17 00:00:00 2001 From: zyy2477 Date: Thu, 15 Aug 2024 21:19:09 +0800 Subject: [PATCH 1175/1284] doc: update axel.md (#596) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update axel.md 添加 axel 源码安装方法。 * Update axel.md 更新 axel 源码安装和 -k 参数 --- command/axel.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/command/axel.md b/command/axel.md index 74915d6e15f..0d38af3af37 100644 --- a/command/axel.md +++ b/command/axel.md @@ -9,6 +9,14 @@ axel ### 安装 +#### 源码安装 + +github地址:https://github.com/axel-download-accelerator/axel + +下载相应的 release 版本后,解压进入目录执行`./configure && make && make install`安装即可。 + +#### 二进制安装 + CentOS安装Axel: 目前yum源上没有Axel,我们可以到 http://pkgs.repoforge.org/axel/ 下载rpm包安装。 @@ -54,6 +62,7 @@ axel [options] url1 [url2] [url...] --alternate , -a # Alternate progress indicator --help ,-h # 帮助 --version ,-V # 版本信息 +--insecure,-k # 不验证SSL证书 ``` ### 实例 From 6079545fee37e9800eda0734d6423c5357efdb05 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 15 Aug 2024 13:19:43 +0000 Subject: [PATCH 1176/1284] doc: update README.md. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9c3e2d11ec9..c6961bae31c 100644 --- a/README.md +++ b/README.md @@ -332,7 +332,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. cxalc Forever121 Yidan Wang -Panthea Johnson +Wendy May 远方 谢民皆 Kyofin @@ -344,9 +344,9 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Loofra Wei Xu 尘埃 -宋小北 孤城落寞 七朔 +zyy2477 zyimm zuixin369 zoomdong From d88ec7ce3ef17d3542e8ad285b9b3bb937a52df1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 15 Aug 2024 13:19:44 +0000 Subject: [PATCH 1177/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index f2cf5f0e086..0d1361025b2 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -77,7 +77,7 @@ cxalc Forever121 Yidan Wang -Panthea Johnson +Wendy May 远方 谢民皆 Kyofin @@ -89,9 +89,9 @@ Loofra Wei Xu 尘埃 -宋小北 孤城落寞 七朔 +zyy2477 zyimm zuixin369 zoomdong From 7155c78adc11f4e340ea0fba6d565db2270be4e4 Mon Sep 17 00:00:00 2001 From: zyy2477 Date: Thu, 29 Aug 2024 16:49:07 +0800 Subject: [PATCH 1178/1284] doc: Update iostat.md (#599) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 从 Linux 2.6.18 内核的 iostat 更新到 4.18.0 内核的 iostat。并参数说明和示例 --- command/iostat.md | 208 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 156 insertions(+), 52 deletions(-) diff --git a/command/iostat.md b/command/iostat.md index 0bf3d25e003..0ab85f2d431 100644 --- a/command/iostat.md +++ b/command/iostat.md @@ -1,74 +1,178 @@ -iostat -=== +# iostat -监视系统输入输出设备和CPU的使用情况 +iostat命令被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。 +iowait 指在一个采样周期内有百分之几的时间是属于以下情况:CPU处于空闲状态并且至少有一个未完成的磁盘IO请求。 -## 补充说明 +## 安装 iostat -**iostat命令** 被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。 +iostat包含在**sysstat**包内。如果你没有,你首先需要安装它。 +在 RedHat / CentOS / Fedora -### 语法 +```bash +yum install sysstat +``` + +在 Debian / Ubuntu / Linux Mint + +```bash +sudo apt-get install sysstat +``` -```shell +## 语法 + +```bash iostat(选项)(参数) ``` -### 选项 - -```shell --c:仅显示CPU使用情况; --d:仅显示设备利用率; --k:显示状态以千字节每秒为单位,而不使用块每秒; --m:显示状态以兆字节每秒为单位; --p:仅显示块设备和所有被使用的其他分区的状态; --t:显示每个报告产生时的时间; --V:显示版号并退出; --x:显示扩展状态。 +### 选项 + +```bash +# iostat --help +Usage: iostat [ options ] [ [ ] ] +Options are: +[ -c ] [ -d ] [ -h ] [ -k | -m ] [ -N ] [ -s ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ] +[ -j { ID | LABEL | PATH | UUID | ... } ] [ --human ] [ -o JSON ] +[ [ -H ] -g ] [ -p [ [,...] | ALL ] ] +``` + +参数说明: +``` +-c 输出CPU统计信息。不能与-d参数同时使用。 +-d 输出设备和分区的I/O统计信息。不能与-c参数同时使用。(默认的参数是-d)。 +-h 让人类更容易阅读设备使用情况报告。--human使用此选项隐式启用。 +-k 用“kbytes/秒”代替“块/秒”显示统计信息。 +-m 用“mbytes/秒”代替“块/秒”显示统计信息。 +-t 打印显示的每份报告的时间。 +-V 显示版本号并退出。 +-x 显示扩展统计信息。不能与参数-p同时使用。 +-y 如果在给定时间间隔内显示多条记录,则省略自系统启动以来的第一份统计报告。 +-z 告诉 iostat 忽略在样本期间没有活动的设备的输出。 +-j 显示持久的设备名称。选项ID、LABEL等指定持久名称的类型。 +--human 以人类可读格式打印大小(例如1.0k, 1.2M等)。使用此选项显示的单位取代与度量相关的任何其他默认单位(例如千字节,扇区…)。 +-o 以JSON (Javascript Object Notation)格式显示统计数据。JSON输出字段顺序未定义,未来可能会添加新字段。 +-H 该选项必须与-g一起使用,表示只显示组的全局统计信息,而不显示组中单个设备的统计信息。 +-p 选项显示系统使用的块设备及其所有分区的统计信息。如果在命令行中输入一个设备名,那么将显示该设备及其所有分区的统计信息。最后,ALL关键字表示必须显示系统定义的所有块设备和分区的统计信息,包括那些从未使用过的设备和分区。如果在此选项之前定义了选项-j,则可以使用所选的持久名称类型指定在命令行上输入的设备。 +``` + +### 参数 + +interval 刷新时间间隔 +count 刷新次数 + +## 运行示例 + +### 示例1 + +```bash +# iostat +Linux 4.18.0-477.13.1.el8_8.x86_64 (node1) 08/28/2024 _x86_64_ (2 CPU) + +avg-cpu: %user %nice %system %iowait %steal %idle + 3.30 0.01 1.90 0.12 0.00 94.68 + +Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn +vda 7.85 84.22 36.59 1081853831 470049100 + ``` -### 参数 +第一部分包含了CPU报告 + +| 性能指标 | 含义 | +| --- | --- | +| %user | 显示在用户级(应用程序)执行时发生的CPU利用率百分比。 | +| %nice | 显示在具有nice优先级的用户级别执行时发生的CPU利用率百分比。 | +| %system | 显示在系统级(内核)执行时发生的CPU利用率百分比。 | +| %iowait | 显示在系统有未完成的磁盘I/O请求期间CPU空闲的时间百分比。 | +| %steal | 显示虚拟机监控程序为另一个虚拟处理器提供服务时,一个或多个虚拟CPU在非自愿等待上花费的时间百分比。 | +| %idle | 显示CPU空闲且系统没有未完成的磁盘I/O请求的时间百分比。 | + +第二部分包含了设备利用率报告 + +| 性能指标 | 含义 | +| --- | --- | +| Device | 此列给出了 /dev 目录中列出的设备(或分区)名称。 | +| tps | 表示每秒向设备发出的传输次数。传输是对设备的 I/O 请求。多个逻辑请求可合并为对设备的一个 I/O 请求。传输大小不确定。 | +| kB_read/s | 表示每秒从设备读取的数据量,以块数(千字节、兆字节)表示。块相当于扇区,因此大小为 512 字节。 | +| kB_wrtn/s | 表示写入设备的数据量,以每秒块数(千字节、兆字节)表示。 | +| kB_read | 读取的数据块总数(千字节、兆字节)。 | +| kB_wrtn | 写入的数据块总数(千字节、兆字节)。 | + +### 示例2 + +以更友好的显示方式显示 IO 信息,使用`-y`忽略第一份统计。并每隔 1 秒重新一次,共5次。 -* 间隔时间:每次报告的间隔时间(秒); -* 次数:显示报告的次数。 +```bash +# iostat -hdy 1 5 +Linux 4.18.0-477.13.1.el8_8.x86_64 (node1) 08/28/2024 _x86_64_ (2 CPU) -### 实例 + tps kB_read/s kB_wrtn/s kB_read kB_wrtn Device + 64.00 288.0k 308.0k 288.0k 308.0k vda -用`iostat -x /dev/sda1`来观看磁盘I/O的详细情况: + tps kB_read/s kB_wrtn/s kB_read kB_wrtn Device + 12.00 0.0k 84.0k 0.0k 84.0k vda -```shell -iostat -x /dev/sda1 -Linux 2.6.18-164.el5xen (localhost.localdomain) -2010年03月26日 + tps kB_read/s kB_wrtn/s kB_read kB_wrtn Device + 15.00 0.0k 36.0k 0.0k 36.0k vda -avg-cpu: %user %nice %system %iowait -%steal %idle - 0.11 0.02 0.18 0.35 -0.03 99.31 + 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 -Device: tps Blk_read/s Blk_wrtn/s -Blk_read Blk_wrtn -sda1 0.02 0.08 -0.00 2014 4 ``` -详细说明:第二行是系统信息和监测时间,第三行和第四行显示CPU使用情况(具体内容和mpstat命令相同)。这里主要关注后面I/O输出的信息,如下所示: +### 示例3 + +```bash +# iostat -xd 1 +Linux 4.18.0-477.13.1.el8_8.x86_64 (node1) 08/28/2024 _x86_64_ (2 CPU) + +Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util +vda 4.64 3.21 84.14 36.59 0.28 1.07 5.64 25.01 5.86 8.23 0.05 18.12 11.41 0.44 0.34 + +Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util +vda 1.00 0.00 4.00 0.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00 4.00 0.00 2.00 0.20 +Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util +vda 0.00 37.00 0.00 395.50 0.00 10.00 0.00 21.28 0.00 0.92 0.03 0.00 10.69 0.11 0.40 -标示 | 说明 ---- | --- -Device | 监测设备名称 -rrqm/s | 每秒需要读取需求的数量 -wrqm/s | 每秒需要写入需求的数量 -r/s | 每秒实际读取需求的数量 -w/s | 每秒实际写入需求的数量 -rsec/s | 每秒读取区段的数量 -wsec/s | 每秒写入区段的数量 -rkB/s | 每秒实际读取的大小,单位为KB -wkB/s | 每秒实际写入的大小,单位为KB -avgrq-sz | 需求的平均大小区段 -avgqu-sz | 需求的平均队列长度 -await | 等待I/O平均的时间(milliseconds) -svctm | I/O需求完成的平均时间 -%util | 设备带宽的使用率,达到100%表示饱和,达到性能瓶颈,如果是支持处理并发请求的设备则不代表性能瓶颈。 +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 + +``` +从这里你可以看到,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 From 2f8778a1f7ed614dbd3778e1680f0f98f6426c0d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 29 Aug 2024 08:49:42 +0000 Subject: [PATCH 1179/1284] doc: update README.md. --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index c6961bae31c..e964f2474f5 100644 --- a/README.md +++ b/README.md @@ -286,6 +286,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Wang Yujia alfred 沙漠之子 +zyy2477 Shell xhal VVatt @@ -302,6 +303,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Dazhuangw Alterem YH +jcdj666 jqz3.tech juemuren4449 kassadin @@ -315,8 +317,6 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. miniwater noodles2hg nsnans -oliver -jcdj666 hululu1068 huangyao hotdogc1017 @@ -331,6 +331,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. dayday cxalc Forever121 +c2ch Yidan Wang Wendy May 远方 @@ -346,7 +347,6 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. 尘埃 孤城落寞 七朔 -zyy2477 zyimm zuixin369 zoomdong @@ -363,7 +363,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. shc sfwwslm rexlin600 -c2ch +oliver MinsonLee Marnm mwei From 37bcd5ff8fd016a500d5287e151e16d8f1f54670 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 29 Aug 2024 08:49:43 +0000 Subject: [PATCH 1180/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index 0d1361025b2..d6c1e7bb095 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -31,6 +31,7 @@ Wang Yujia alfred 沙漠之子 +zyy2477 Shell xhal VVatt @@ -47,6 +48,7 @@ Dazhuangw Alterem YH +jcdj666 jqz3.tech juemuren4449 kassadin @@ -60,8 +62,6 @@ miniwater noodles2hg nsnans -oliver -jcdj666 hululu1068 huangyao hotdogc1017 @@ -76,6 +76,7 @@ dayday cxalc Forever121 +c2ch Yidan Wang Wendy May 远方 @@ -91,7 +92,6 @@ 尘埃 孤城落寞 七朔 -zyy2477 zyimm zuixin369 zoomdong @@ -108,7 +108,7 @@ shc sfwwslm rexlin600 -c2ch +oliver MinsonLee Marnm mwei From 80c5150c92a638fc9a8a69c6e8fe0cc90ed118cb Mon Sep 17 00:00:00 2001 From: zyy2477 Date: Sun, 1 Sep 2024 15:57:44 +0800 Subject: [PATCH 1181/1284] doc: update command/passwd.md (#600) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加通过 echo 命令结合管道符来修改密码的例子。 --- command/passwd.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/command/passwd.md b/command/passwd.md index 54651890747..a3f8df7368a 100644 --- a/command/passwd.md +++ b/command/passwd.md @@ -85,6 +85,15 @@ Retype new UNIX password: # 再输入一次; passwd: all authentication tokens updated successfully. # 成功; ``` +或通过管道符把`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 From b2bab26746038e501a8d367fea7530a9c629b959 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Tue, 3 Sep 2024 13:35:16 +0800 Subject: [PATCH 1182/1284] fix: correct formatting issue causing errors. #601 --- command/iostat.md | 3 ++- dist/data.json | 14 ++++++++++++-- dist/data.min.json | 2 +- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/command/iostat.md b/command/iostat.md index 0ab85f2d431..2c41ac779a5 100644 --- a/command/iostat.md +++ b/command/iostat.md @@ -1,4 +1,5 @@ -# iostat +iostat +=== iostat命令被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。 iowait 指在一个采样周期内有百分之几的时间是属于以下情况:CPU处于空闲状态并且至少有一个未完成的磁盘IO请求。 diff --git a/dist/data.json b/dist/data.json index a5301ee6e3b..75eae0c05a3 100644 --- a/dist/data.json +++ b/dist/data.json @@ -759,6 +759,11 @@ "p": "/fgrep", "d": "为文件搜索文字字符串" }, + "figlet": { + "n": "figlet", + "p": "/figlet", + "d": "字符串转为 “字画符”。" + }, "file": { "n": "file", "p": "/file", @@ -889,6 +894,11 @@ "p": "/gpasswd", "d": "Linux下工作组文件的管理工具" }, + "gpg": { + "n": "gpg", + "p": "/gpg", + "d": "可用于签名、检查、加密或解密的工具" + }, "gpm": { "n": "gpm", "p": "/gpm", @@ -1122,7 +1132,7 @@ "iostat": { "n": "iostat", "p": "/iostat", - "d": "监视系统输入输出设备和CPU的使用情况" + "d": "iostat命令被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。iowait 指在一个采样周期内有百分之几的时间是属于以下情况:CPU处于空闲状态并且至少有一个未完成的磁盘IO请求。" }, "iotop": { "n": "iotop", @@ -1637,7 +1647,7 @@ "mtr": { "n": "mtr", "p": "/mtr", - "d": "`mtr`结合了`traceroute`和`ping`程序的功能,是一款简单的网络诊断工具。 " + "d": "`mtr` 结合了 `traceroute` 和 `ping` 程序的功能,是一款简单的网络诊断工具" }, "mv": { "n": "mv", diff --git a/dist/data.min.json b/dist/data.min.json index 02f10339d70..cb420adfeff 100644 --- a/dist/data.min.json +++ b/dist/data.min.json @@ -1 +1 @@ -{"7z":{"n":"7z","p":"/7z","d":"拥有极高压缩比的开源压缩软件。"},"ab":{"n":"ab","p":"/ab","d":"Apache服务器的性能测试工具"},"accept":{"n":"accept","p":"/accept","d":"指示打印系统接受发往指定目标打印机的打印任务"},"ack":{"n":"ack","p":"/ack","d":"比grep好用的文本搜索工具"},"ag":{"n":"ag","p":"/ag","d":"ack 的升级版,C语言编写,更快更人性化"},"alias":{"n":"alias","p":"/alias","d":"定义或显示别名。"},"apachectl":{"n":"apachectl","p":"/apachectl","d":"Apache服务器前端控制工具"},"apk":{"n":"apk","p":"/apk","d":"Alpine Linux 下的包管理工具"},"apropos":{"n":"apropos","p":"/apropos","d":"在 whatis 数据库中查找字符串"},"apt-get":{"n":"apt-get","p":"/apt-get","d":"Debian Linux发行版中的APT软件包管理工具"},"apt-key":{"n":"apt-key","p":"/apt-key","d":"管理Debian Linux系统中的软件包密钥"},"apt-sortpkgs":{"n":"apt-sortpkgs","p":"/apt-sortpkgs","d":"Debian Linux下对软件包索引文件进行排序的工具"},"aptitude":{"n":"aptitude","p":"/aptitude","d":"Debian Linux系统中软件包管理工具"},"ar":{"n":"ar","p":"/ar","d":"建立或修改备存文件,或是从备存文件中抽取文件"},"arch":{"n":"arch","p":"/arch","d":"显示当前主机的硬件架构类型"},"arj":{"n":"arj","p":"/arj","d":"用于创建和管理.arj压缩包"},"arp":{"n":"arp","p":"/arp","d":"arp 命令用于显示和修改 IP 到 MAC 转换表"},"arpd":{"n":"arpd","p":"/arpd","d":"收集免费ARP信息"},"arping":{"n":"arping","p":"/arping","d":"通过发送ARP协议报文测试网络"},"arptables":{"n":"arptables","p":"/arptables","d":"管理ARP包过滤规则表"},"arpwatch":{"n":"arpwatch","p":"/arpwatch","d":"监听网络上ARP的记录"},"as":{"n":"as","p":"/as","d":"汇编语言编译器"},"at":{"n":"at","p":"/at","d":"在指定时间执行一个任务"},"atop":{"n":"atop","p":"/atop","d":"监控Linux系统资源与进程的工具"},"atq":{"n":"atq","p":"/atq","d":"列出当前用户的at任务列表"},"atrm":{"n":"atrm","p":"/atrm","d":"删除待执行任务队列中的指定任务"},"awk":{"n":"awk","p":"/awk","d":"文本和数据进行处理的编程语言"},"axel":{"n":"axel","p":"/axel","d":"多线程下载工具"},"badblocks":{"n":"badblocks","p":"/badblocks","d":"查找磁盘中损坏的区块"},"base64":{"n":"base64","p":"/base64","d":"base64 编码/解码文件或标准输入输出"},"basename":{"n":"basename","p":"/basename","d":"打印目录或者文件的基本名称"},"batch":{"n":"batch","p":"/batch","d":"在系统不繁忙的时候执行定时任务"},"bc":{"n":"bc","p":"/bc","d":"算术操作精密运算工具"},"bg":{"n":"bg","p":"/bg","d":"将前台终端作业移动到后台运行"},"bind":{"n":"bind","p":"/bind","d":"显示或设置键盘按键与其相关的功能"},"blkid":{"n":"blkid","p":"/blkid","d":"查看块设备的文件系统类型、LABEL、UUID等信息"},"blockdev":{"n":"blockdev","p":"/blockdev","d":"从命令行调用区块设备控制程序"},"bmodinfo":{"n":"bmodinfo","p":"/bmodinfo","d":"显示给定模块的详细信息"},"break":{"n":"break","p":"/break","d":"结束for,while或until循环。"},"builtin":{"n":"builtin","p":"/builtin","d":"执行bash内建命令。"},"bunzip2":{"n":"bunzip2","p":"/bunzip2","d":"可解压缩.bz2格式的压缩文件。 "},"bye":{"n":"bye","p":"/bye","d":"命令用于中断FTP连线并结束程序"},"bzcat":{"n":"bzcat","p":"/bzcat","d":"不解压,直接查看指定的.bz2文件"},"bzcmp":{"n":"bzcmp","p":"/bzcmp","d":"比较两个压缩包中的文件"},"bzdiff":{"n":"bzdiff","p":"/bzdiff","d":"直接比较两个.bz2压缩包中文件的不同"},"bzgrep":{"n":"bzgrep","p":"/bzgrep","d":"使用正则表达式搜索.bz2压缩包中文件"},"bzip2":{"n":"bzip2","p":"/bzip2","d":"将文件压缩成bz2格式"},"bzip2recover":{"n":"bzip2recover","p":"/bzip2recover","d":"恢复被破坏的.bz2压缩包中的文件"},"bzless":{"n":"bzless","p":"/bzless","d":"增强.bz2压缩包查看器"},"bzmore":{"n":"bzmore","p":"/bzmore","d":"查看bzip2压缩过的文本文件的内容"},"cal":{"n":"cal","p":"/cal","d":"显示当前日历或指定日期的日历"},"cancel":{"n":"cancel","p":"/cancel","d":"取消已存在的打印任务"},"cat":{"n":"cat","p":"/cat","d":"连接多个文件并打印到标准输出。"},"cd":{"n":"cd","p":"/cd","d":"切换用户当前工作目录。"},"cdrecord":{"n":"cdrecord","p":"/cdrecord","d":"Linux系统下光盘刻录功能命令"},"chage":{"n":"chage","p":"/chage","d":"修改帐号和密码的有效期限"},"chattr":{"n":"chattr","p":"/chattr","d":"用来改变文件属性"},"chcon":{"n":"chcon","p":"/chcon","d":"修改对象(文件)的安全上下文"},"chfn":{"n":"chfn","p":"/chfn","d":"用来改变finger命令显示的信息"},"chgrp":{"n":"chgrp","p":"/chgrp","d":"用来变更文件或目录的所属群组"},"chkconfig":{"n":"chkconfig","p":"/chkconfig","d":"检查或设置系统的各种服务"},"chmod":{"n":"chmod","p":"/chmod","d":"用来变更文件或目录的权限"},"chown":{"n":"chown","p":"/chown","d":"用来变更文件或目录的拥有者或所属群组"},"chpasswd":{"n":"chpasswd","p":"/chpasswd","d":"批量更新用户口令的工具"},"chroot":{"n":"chroot","p":"/chroot","d":"把根目录换成指定的目的目录"},"chsh":{"n":"chsh","p":"/chsh","d":"用来更换登录系统时使用的shell"},"cksum":{"n":"cksum","p":"/cksum","d":"检查文件的CRC是否正确"},"clear":{"n":"clear","p":"/clear","d":"清除当前屏幕终端上的任何信息"},"clock":{"n":"clock","p":"/clock","d":"用于调整 RTC 时间"},"clockdiff":{"n":"clockdiff","p":"/clockdiff","d":"检测两台linux主机的时间差"},"cmp":{"n":"cmp","p":"/cmp","d":"比较两个文件是否有差异"},"col":{"n":"col","p":"/col","d":"过滤控制字符"},"colrm":{"n":"colrm","p":"/colrm","d":"删除文件中的指定列"},"column":{"n":"column","p":"/column","d":"按列格式化输出文件"},"comm":{"n":"comm","p":"/comm","d":"按行比较两个已排序的文件。"},"command":{"n":"command","p":"/command","d":"调用并执行指定的命令"},"compress":{"n":"compress","p":"/compress","d":"使用Lempress-Ziv编码压缩数据文件"},"consoletype":{"n":"consoletype","p":"/consoletype","d":"输出已连接的终端类型"},"continue":{"n":"continue","p":"/continue","d":"结束本次循环,继续执行下一个for,while或until循环。"},"convertquota":{"n":"convertquota","p":"/convertquota","d":"把老的配额文件转换为新的格式"},"cp":{"n":"cp","p":"/cp","d":"将源文件或目录复制到目标文件或目录中"},"cpio":{"n":"cpio","p":"/cpio","d":"用来建立、还原备份档的工具程序"},"createrepo":{"n":"createrepo","p":"/createrepo","d":"创建YUM仓库"},"crontab":{"n":"crontab","p":"/crontab","d":"提交和管理用户的需要周期性执行的任务"},"csplit":{"n":"csplit","p":"/csplit","d":"将一个大文件分割成小的碎片文件"},"cu":{"n":"cu","p":"/cu","d":"用于连接另一个系统主机"},"cupsdisable":{"n":"cupsdisable","p":"/cupsdisable","d":"停止指定的打印机"},"cupsenable":{"n":"cupsenable","p":"/cupsenable","d":"启动指定的打印机"},"curl":{"n":"curl","p":"/curl","d":"利用URL规则在命令行下工作的文件传输工具"},"cut":{"n":"cut","p":"/cut","d":"连接文件并打印到标准输出设备上"},"date":{"n":"date","p":"/date","d":"显示或设置系统时间与日期"},"dc":{"n":"dc","p":"/dc","d":"任意精度计算器"},"dd":{"n":"dd","p":"/dd","d":"复制文件并对原文件的内容进行转换和格式化处理"},"declare":{"n":"declare","p":"/declare","d":"声明变量,设置或显示变量的值和属性。"},"depmod":{"n":"depmod","p":"/depmod","d":"分析可载入模块的相依性"},"df":{"n":"df","p":"/df","d":"显示磁盘的相关信息"},"dhclient":{"n":"dhclient","p":"/dhclient","d":"动态获取或释放IP地址"},"dhcpd":{"n":"dhcpd","p":"/dhcpd","d":"运行DHCP服务器"},"dhcrelay":{"n":"dhcrelay","p":"/dhcrelay","d":"使用dhcrelay命令可以提供中继DHCP和BOOTP请求"},"diff":{"n":"diff","p":"/diff","d":"比较给定的两个文件的不同"},"diff3":{"n":"diff3","p":"/diff3","d":"比较3个文件不同的地方"},"diffstat":{"n":"diffstat","p":"/diffstat","d":"显示diff命令输出信息的柱状图"},"dig":{"n":"dig","p":"/dig","d":"域名查询工具"},"dircolors":{"n":"dircolors","p":"/dircolors","d":"置ls命令在显示目录或文件时所用的色彩"},"dirname":{"n":"dirname","p":"/dirname","d":"去除文件名中的非目录部分"},"dirs":{"n":"dirs","p":"/dirs","d":"显示目录堆栈。"},"disown":{"n":"disown","p":"/disown","d":"从当前的shell中移除作业。"},"dmesg":{"n":"dmesg","p":"/dmesg","d":"显示Linux系统启动信息"},"dmidecode":{"n":"dmidecode","p":"/dmidecode","d":"在Linux系统下获取有关硬件方面的信息"},"dnf":{"n":"dnf","p":"/dnf","d":"新一代的RPM软件包管理器"},"dnsdomainname":{"n":"dnsdomainname","p":"/dnsdomainname","d":"定义DNS系统中FQDN名称的域名"},"docker":{"n":"docker","p":"/docker","d":"容器化技术,可以将应用程序及其依赖项打包到一个可移植的容器中,使其可以在不同的环境中运行"},"domainname":{"n":"domainname","p":"/domainname","d":"显示和设置系统的NIS域名"},"dos2unix":{"n":"dos2unix","p":"/dos2unix","d":"将DOS格式文本文件转换成Unix格式"},"dpkg-deb":{"n":"dpkg-deb","p":"/dpkg-deb","d":"Debian Linux下的软件包管理工具"},"dpkg-divert":{"n":"dpkg-divert","p":"/dpkg-divert","d":"Debian Linux中创建并管理一个转向列表"},"dpkg-preconfigure":{"n":"dpkg-preconfigure","p":"/dpkg-preconfigure","d":"Debian Linux中软件包安装之前询问问题"},"dpkg-query":{"n":"dpkg-query","p":"/dpkg-query","d":"Debian Linux中软件包的查询工具"},"dpkg-reconfigure":{"n":"dpkg-reconfigure","p":"/dpkg-reconfigure","d":"Debian Linux中重新配制一个已经安装的软件包"},"dpkg-split":{"n":"dpkg-split","p":"/dpkg-split","d":"Debian Linux中将大软件包分割成小包"},"dpkg-statoverride":{"n":"dpkg-statoverride","p":"/dpkg-statoverride","d":"Debian Linux中覆盖文件的所有权和模式"},"dpkg-trigger":{"n":"dpkg-trigger","p":"/dpkg-trigger","d":"Debian Linux下的软件包触发器"},"dpkg":{"n":"dpkg","p":"/dpkg","d":"Debian Linux系统上安装、创建和管理软件包"},"dris":{"n":"dris","p":"/dris","d":"显示和清空目录堆栈中的内容"},"dstat":{"n":"dstat","p":"/dstat","d":"通用的系统资源统计工具"},"du":{"n":"du","p":"/du","d":"显示每个文件和目录的磁盘使用空间"},"dump":{"n":"dump","p":"/dump","d":"用于备份ext2或者ext3文件系统"},"e2fsck":{"n":"e2fsck","p":"/e2fsck","d":"用于检查第二扩展文件系统的完整性"},"e2label":{"n":"e2label","p":"/e2label","d":"设置第二扩展文件系统的卷标"},"echo":{"n":"echo","p":"/echo","d":"输出指定的字符串或者变量"},"ed":{"n":"ed","p":"/ed","d":"单行纯文本编辑器"},"edquota":{"n":"edquota","p":"/edquota","d":"用于编辑指定用户或工作组磁盘配额"},"egrep":{"n":"egrep","p":"/egrep","d":"在文件内查找指定的字符串"},"eject":{"n":"eject","p":"/eject","d":"用来退出抽取式设备"},"elinks":{"n":"elinks","p":"/elinks","d":"纯文本界面的WWW浏览器"},"elm":{"n":"elm","p":"/elm","d":"纯文本邮件客户端程序"},"emacs":{"n":"emacs","p":"/emacs","d":"功能强大的全屏文本编辑器"},"enable":{"n":"enable","p":"/enable","d":"启动或禁用shell内建命令"},"env":{"n":"env","p":"/env","d":"显示系统中已存在的环境变量"},"ethtool":{"n":"ethtool","p":"/ethtool","d":"显示或修改以太网卡的配置信息"},"ex":{"n":"ex","p":"/ex","d":"启动vim编辑器的ex编辑模式"},"exec":{"n":"exec","p":"/exec","d":"调用并执行指定的命令"},"exit":{"n":"exit","p":"/exit","d":"退出当前的shell。"},"expand":{"n":"expand","p":"/expand","d":"将文件的制表符转换为空白字符"},"export":{"n":"export","p":"/export","d":"为shell变量或函数设置导出属性。"},"exportfs":{"n":"exportfs","p":"/exportfs","d":"管理NFS共享文件系统列表"},"expr":{"n":"expr","p":"/expr","d":"一款表达式计算工具"},"false":{"n":"false","p":"/false","d":"返回状态为失败。"},"fc":{"n":"fc","p":"/fc","d":"显示历史列表中的命令或修改指定的历史命令并执行。"},"fdisk":{"n":"fdisk","p":"/fdisk","d":"查看磁盘使用情况和磁盘分区"},"fg":{"n":"fg","p":"/fg","d":"将后台作业移动到前台终端运行"},"fgrep":{"n":"fgrep","p":"/fgrep","d":"为文件搜索文字字符串"},"file":{"n":"file","p":"/file","d":"用来探测给定文件的类型"},"find":{"n":"find","p":"/find","d":"在指定目录下查找文件"},"findfs":{"n":"findfs","p":"/findfs","d":"标签或UUID查找文件系统"},"finger":{"n":"finger","p":"/finger","d":"用于查找并显示用户信息"},"firewall-cmd":{"n":"firewall-cmd","p":"/firewall-cmd","d":"Linux上新用的防火墙软件,跟iptables差不多的工具"},"fishshell":{"n":"fishshell","p":"/fishshell","d":"比 bash 更好用的 shell"},"fmt":{"n":"fmt","p":"/fmt","d":"读取文件后优化处理并输出"},"fold":{"n":"fold","p":"/fold","d":"控制文件内容输出时所占用的屏幕宽度"},"fping":{"n":"fping","p":"/fping","d":"fping检测主机是否存在"},"free":{"n":"free","p":"/free","d":"显示内存的使用情况"},"fsck":{"n":"fsck","p":"/fsck","d":"fsck(英文全拼:file system check)命令检查并且试图修复文件系统中的错误"},"ftp":{"n":"ftp","p":"/ftp","d":"用来设置文件系统相关功能"},"ftpcount":{"n":"ftpcount","p":"/ftpcount","d":"显示目前已FTP登入的用户人数"},"ftpshut":{"n":"ftpshut","p":"/ftpshut","d":"在指定的时间关闭FTP服务器"},"ftptop":{"n":"ftptop","p":"/ftptop","d":"proftpd服务器的连接状态"},"ftpwho":{"n":"ftpwho","p":"/ftpwho","d":"显示当前每个ftp会话信息"},"fuser":{"n":"fuser","p":"/fuser","d":"使用文件或文件结构识别进程"},"gcc":{"n":"gcc","p":"/gcc","d":"基于C/C++的编译器"},"gcov":{"n":"gcov","p":"/gcov","d":"测试程序的代码覆盖率的工具"},"gdb":{"n":"gdb","p":"/gdb","d":"功能强大的程序调试器"},"get_module":{"n":"get_module","p":"/get_module","d":"获取Linux内核模块的详细信息"},"getenforce":{"n":"getenforce","p":"/getenforce","d":"显示当前SELinux的应用模式,是强制、执行还是停用"},"getent":{"n":"getent","p":"/getent","d":"查询 DNS 名称服务器中的命名空间"},"getsebool":{"n":"getsebool","p":"/getsebool","d":"查询SElinux策略内各项规则的布尔值"},"git":{"n":"git","p":"/git","d":"是目前世界上最先进的分布式版本控制系统"},"gpasswd":{"n":"gpasswd","p":"/gpasswd","d":"Linux下工作组文件的管理工具"},"gpm":{"n":"gpm","p":"/gpm","d":"提供文字模式下的滑鼠事件处理"},"grep":{"n":"grep","p":"/grep","d":"强大的文本搜索工具"},"groupadd":{"n":"groupadd","p":"/groupadd","d":"用于创建一个新的工作组"},"groupdel":{"n":"groupdel","p":"/groupdel","d":"用于删除指定的工作组"},"groupmems":{"n":"groupmems","p":"/groupmems","d":"管理用户主要组的成员"},"groupmod":{"n":"groupmod","p":"/groupmod","d":"更改群组识别码或名称"},"groups":{"n":"groups","p":"/groups","d":"打印指定用户所在组的名称。"},"grpck":{"n":"grpck","p":"/grpck","d":"用于验证组文件的完整性"},"grpconv":{"n":"grpconv","p":"/grpconv","d":"用来开启群组的投影密码"},"grpunconv":{"n":"grpunconv","p":"/grpunconv","d":"用来关闭群组的投影密码"},"grub":{"n":"grub","p":"/grub","d":"多重引导程序grub的命令行shell工具"},"grub2-mkconfig":{"n":"grub2-mkconfig","p":"/grub2-mkconfig","d":"生成 grub.cfg 配置文件。"},"grub2-set-default":{"n":"grub2-set-default","p":"/grub2-set-default","d":"设置系统默认的启动内核"},"gunzip":{"n":"gunzip","p":"/gunzip","d":"用来解压缩文件"},"gzexe":{"n":"gzexe","p":"/gzexe","d":"用来压缩可执行文件"},"gzip":{"n":"gzip","p":"/gzip","d":"用来压缩文件"},"halt":{"n":"halt","p":"/halt","d":"关闭正在运行的Linux操作系统"},"hcitool":{"n":"hcitool","p":"/hcitool","d":"hcitool是一个Linux命令行工具,用于管理和调试蓝牙设备。它可以用于扫描周围的蓝牙设备、连接到蓝牙设备发送命令和数据包等。"},"hdparm":{"n":"hdparm","p":"/hdparm","d":"显示与设定硬盘的参数"},"head":{"n":"head","p":"/head","d":"显示文件的开头部分。"},"help":{"n":"help","p":"/help","d":"该命令是bash内建命令,用于显示bash内建命令的帮助信息。"},"hexdump":{"n":"hexdump","p":"/hexdump","d":"显示文件十六进制格式"},"history":{"n":"history","p":"/history","d":"显示或操作历史列表。"},"host":{"n":"host","p":"/host","d":"常用的分析域名查询工具"},"hostid":{"n":"hostid","p":"/hostid","d":"显示当前主机的十六进制数字标识。"},"hostname":{"n":"hostname","p":"/hostname","d":"显示和设置系统的主机名"},"hostnamectl":{"n":"hostnamectl","p":"/hostnamectl","d":"查询或更改系统主机名"},"hping3":{"n":"hping3","p":"/hping3","d":"测试网络及主机的安全"},"htdigest":{"n":"htdigest","p":"/htdigest","d":"Apache服务器内置工具"},"htop":{"n":"htop","p":"/htop","d":"[非内部命令]一个互动的进程查看器,可以动态观察系统进程状况"},"htpasswd":{"n":"htpasswd","p":"/htpasswd","d":"apache服务器创建密码认证文件"},"hwclock":{"n":"hwclock","p":"/hwclock","d":"显示与设定硬件时钟"},"iconv":{"n":"iconv","p":"/iconv","d":"转换文件的编码方式"},"id":{"n":"id","p":"/id","d":"打印真实以及有效的用户和所在组的信息"},"ifcfg":{"n":"ifcfg","p":"/ifcfg","d":"置Linux中的网络接口参数"},"ifconfig":{"n":"ifconfig","p":"/ifconfig","d":"配置和显示Linux系统网卡的网络参数"},"ifdown":{"n":"ifdown","p":"/ifdown","d":"禁用指定的网络接口"},"ifstat":{"n":"ifstat","p":"/ifstat","d":"统计网络接口流量状态"},"iftop":{"n":"iftop","p":"/iftop","d":"一款实时流量监控工具"},"ifup":{"n":"ifup","p":"/ifup","d":"激活指定的网络接口"},"indent":{"n":"indent","p":"/indent","d":"格式化C语言的源文件"},"info":{"n":"info","p":"/info","d":"Linux下info格式的帮助指令"},"init":{"n":"init","p":"/init","d":"init进程是所有Linux进程的父进程"},"inotifywait":{"n":"inotifywait","p":"/inotifywait","d":"异步文件系统监控机制"},"insmod":{"n":"insmod","p":"/insmod","d":"将给定的模块加载到内核中"},"install":{"n":"install","p":"/install","d":"安装或升级软件或备份数据"},"iostat":{"n":"iostat","p":"/iostat","d":"监视系统输入输出设备和CPU的使用情况"},"iotop":{"n":"iotop","p":"/iotop","d":"用来监视磁盘I/O使用状况的工具"},"ip":{"n":"ip","p":"/ip","d":"网络配置工具"},"ip6tables-restore":{"n":"ip6tables-restore","p":"/ip6tables-restore","d":"还原ip6tables表"},"ip6tables-save":{"n":"ip6tables-save","p":"/ip6tables-save","d":"保存ip6tables表配置"},"ip6tables":{"n":"ip6tables","p":"/ip6tables","d":"linux中防火墙软件"},"ipcalc":{"n":"ipcalc","p":"/ipcalc","d":"简单的IP地址计算器"},"ipcrm":{"n":"ipcrm","p":"/ipcrm","d":"删除消息队列、信号集、或者共享内存标识"},"ipcs":{"n":"ipcs","p":"/ipcs","d":"分析消息队列共享内存和信号量"},"iperf":{"n":"iperf","p":"/iperf","d":"网络性能测试工具"},"iptables-restore":{"n":"iptables-restore","p":"/iptables-restore","d":"还原iptables表的配置"},"iptables-save":{"n":"iptables-save","p":"/iptables-save","d":"备份iptables的表配置"},"iptables":{"n":"iptables","p":"/iptables","d":"Linux上常用的防火墙软件"},"iptraf":{"n":"iptraf","p":"/iptraf","d":"实时地监视网卡流量"},"iptstate":{"n":"iptstate","p":"/iptstate","d":"显示iptables的工作状态"},"iscsiadm":{"n":"iscsiadm","p":"/iscsiadm","d":"管理iSCSI连接"},"ispell":{"n":"ispell","p":"/ispell","d":"检查文件中出现的拼写错误"},"jed":{"n":"jed","p":"/jed","d":"主要用于编辑代码的编辑器"},"jobs":{"n":"jobs","p":"/jobs","d":"显示作业的状态。"},"joe":{"n":"joe","p":"/joe","d":"强大的纯文本编辑器"},"join":{"n":"join","p":"/join","d":"两个文件中指定栏位内容相同的行连接起来"},"journalctl":{"n":"journalctl","p":"/journalctl","d":"检索 systemd 日志,是 CentOS 7 才有的工具。"},"jq":{"n":"jq","p":"/jq","d":"一个灵活的轻量级命令行JSON处理器"},"jwhois":{"n":"jwhois","p":"/jwhois","d":"whois 客户端服务"},"kernelversion":{"n":"kernelversion","p":"/kernelversion","d":"打印当前内核的主版本号"},"kexec":{"n":"kexec","p":"/kexec","d":"从当前正在运行的内核引导到一个新内核"},"kill":{"n":"kill","p":"/kill","d":"发送信号到进程。"},"killall":{"n":"killall","p":"/killall","d":"使用进程的名称来杀死一组进程"},"last":{"n":"last","p":"/last","d":"列出目前与过去登入系统的用户相关信息"},"lastb":{"n":"lastb","p":"/lastb","d":"列出登入系统失败的用户相关信息"},"lastlog":{"n":"lastlog","p":"/lastlog","d":"显示系统中所有用户最近一次登录信息"},"ld":{"n":"ld","p":"/ld","d":"将目标文件连接为可执行程序"},"ldconfig":{"n":"ldconfig","p":"/ldconfig","d":"动态链接库管理命令"},"ldd":{"n":"ldd","p":"/ldd","d":"打印程序或者库文件所依赖的共享库列表"},"less":{"n":"less","p":"/less","d":"分屏上下翻页浏览文件内容"},"let":{"n":"let","p":"/let","d":"简单的计算器,执行算术表达式。"},"lftp":{"n":"lftp","p":"/lftp","d":"优秀的文件客户端程序"},"lftpget":{"n":"lftpget","p":"/lftpget","d":"调用lftp指令下载指定的文件"},"lha":{"n":"lha","p":"/lha","d":"压缩或解压缩lzh格式文件"},"lilo":{"n":"lilo","p":"/lilo","d":"安装核心载入开机管理程序"},"ln":{"n":"ln","p":"/ln","d":"用来为文件创建链接"},"lnstat":{"n":"lnstat","p":"/lnstat","d":"显示Linux系统的网路状态"},"local":{"n":"local","p":"/local","d":"在函数内定义局部变量。"},"locate":{"n":"locate","p":"/locate","d":"比 find 好用的文件查找工具"},"logger":{"n":"logger","p":"/logger","d":"在系统日志中记录相应条目"},"login":{"n":"login","p":"/login","d":"登录系统或切换用户身份"},"logname":{"n":"logname","p":"/logname","d":"打印当前终端登录用户的名称。"},"logout":{"n":"logout","p":"/logout","d":"退出当前登录的Shell"},"logrotate":{"n":"logrotate","p":"/logrotate","d":"系统日志进行轮转、压缩和删除"},"logsave":{"n":"logsave","p":"/logsave","d":"将命令的输出信息保存到指定的日志文件"},"logwatch":{"n":"logwatch","p":"/logwatch","d":"可定制和可插入式的日志监视系统"},"look":{"n":"look","p":"/look","d":"显示文件中以指定字符串开头的任意行"},"losetup":{"n":"losetup","p":"/losetup","d":"设定与控制循环(loop)设备"},"lp":{"n":"lp","p":"/lp","d":"打印文件或修改排队的打印任务"},"lpadmin":{"n":"lpadmin","p":"/lpadmin","d":"配置CUPS套件中的打印机和类"},"lpc":{"n":"lpc","p":"/lpc","d":"命令行方式打印机控制程序"},"lpq":{"n":"lpq","p":"/lpq","d":"显示打印队列中的打印任务的状态信息"},"lpr":{"n":"lpr","p":"/lpr","d":"将文件发送给指定打印机进行打印"},"lprm":{"n":"lprm","p":"/lprm","d":"删除打印队列中的打印任务"},"lpstat":{"n":"lpstat","p":"/lpstat","d":"显示CUPS中打印机的状态信息"},"ls":{"n":"ls","p":"/ls","d":"显示目录内容列表"},"lsattr":{"n":"lsattr","p":"/lsattr","d":"查看文件的第二扩展文件系统属性"},"lsb_release":{"n":"lsb_release","p":"/lsb_release","d":"显示发行版本信息"},"lsblk":{"n":"lsblk","p":"/lsblk","d":"列出块设备信息"},"lscpu":{"n":"lscpu","p":"/lscpu","d":"显示有关CPU架构的信息"},"lsmod":{"n":"lsmod","p":"/lsmod","d":"显示已载入系统的模块"},"lsof":{"n":"lsof","p":"/lsof","d":"显示Linux系统当前已打开的所有文件列表 `lsof -p pid`"},"lspci":{"n":"lspci","p":"/lspci","d":"显示当前主机的所有PCI总线信息"},"lsusb":{"n":"lsusb","p":"/lsusb","d":"显示本机的USB设备列表信息"},"ltrace":{"n":"ltrace","p":"/ltrace","d":"用来跟踪进程调用库函数的情况"},"lvcreate":{"n":"lvcreate","p":"/lvcreate","d":"用于创建LVM的逻辑卷"},"lvdisplay":{"n":"lvdisplay","p":"/lvdisplay","d":"显示逻辑卷属性"},"lvextend":{"n":"lvextend","p":"/lvextend","d":"扩展逻辑卷空间"},"lvreduce":{"n":"lvreduce","p":"/lvreduce","d":"收缩逻辑卷空间"},"lvremove":{"n":"lvremove","p":"/lvremove","d":"删除指定LVM逻辑卷"},"lvresize":{"n":"lvresize","p":"/lvresize","d":"调整逻辑卷空间大小"},"lvscan":{"n":"lvscan","p":"/lvscan","d":"扫描逻辑卷"},"lynx":{"n":"lynx","p":"/lynx","d":"纯文本模式的网页浏览器"},"mail":{"n":"mail","p":"/mail","d":"命令行下发送和接收电子邮件"},"mailq":{"n":"mailq","p":"/mailq","d":"显示待发送的邮件队列"},"mailstat":{"n":"mailstat","p":"/mailstat","d":"显示到达的邮件状态"},"make":{"n":"make","p":"/make","d":"GNU的工程化编译工具"},"man":{"n":"man","p":"/man","d":"查看Linux中的指令帮助"},"mapfile":{"n":"mapfile","p":"/mapfile","d":"从标准输入读取行并赋值到数组。"},"md5sum":{"n":"md5sum","p":"/md5sum","d":"计算和校验文件报文摘要的工具程序"},"mesg":{"n":"mesg","p":"/mesg","d":"设置当前终端的写权限"},"mii-tool":{"n":"mii-tool","p":"/mii-tool","d":"配置网络设备协商方式的工具"},"mkbootdisk":{"n":"mkbootdisk","p":"/mkbootdisk","d":"可建立目前系统的启动盘"},"mkcert":{"n":"mkcert","p":"/mkcert","d":"用来生成自签证书的工具"},"mkdir":{"n":"mkdir","p":"/mkdir","d":"用来创建目录"},"mke2fs":{"n":"mke2fs","p":"/mke2fs","d":"创建磁盘分区上的“etc2/etc3”文件系统"},"mkfs":{"n":"mkfs","p":"/mkfs","d":"用于在设备上创建Linux文件系统"},"mkinitrd":{"n":"mkinitrd","p":"/mkinitrd","d":"建立要载入ramdisk的映像文件"},"mkisofs":{"n":"mkisofs","p":"/mkisofs","d":"建立ISO 9660映像文件"},"mknod":{"n":"mknod","p":"/mknod","d":"创建字符设备文件和块设备文件"},"mkswap":{"n":"mkswap","p":"/mkswap","d":"建立和设置SWAP交换分区"},"mktemp":{"n":"mktemp","p":"/mktemp","d":"创建临时文件供shell脚本使用"},"modetest":{"n":"modetest","p":"/modetest","d":"DRM/KMS驱动程序libdrm中的模式测试工具"},"modprobe":{"n":"modprobe","p":"/modprobe","d":"自动处理可载入模块"},"more":{"n":"more","p":"/more","d":"显示文件内容,每次显示一屏"},"mount":{"n":"mount","p":"/mount","d":"用于挂载Linux系统外的文件"},"mpstat":{"n":"mpstat","p":"/mpstat","d":"显示各个可用CPU的状态"},"mtools":{"n":"mtools","p":"/mtools","d":"显示mtools支持的指令"},"mtr":{"n":"mtr","p":"/mtr","d":"`mtr`结合了`traceroute`和`ping`程序的功能,是一款简单的网络诊断工具。 "},"mv":{"n":"mv","p":"/mv","d":"用来对文件或目录重新命名"},"mysql":{"n":"mysql","p":"/mysql","d":"MySQL服务器客户端工具"},"mysqladmin":{"n":"mysqladmin","p":"/mysqladmin","d":"MySQL服务器管理客户端"},"mysqldump":{"n":"mysqldump","p":"/mysqldump","d":"MySQL数据库中备份工具"},"mysqlimport":{"n":"mysqlimport","p":"/mysqlimport","d":"为MySQL服务器用命令行方式导入数据"},"mysqlshow":{"n":"mysqlshow","p":"/mysqlshow","d":"显示MySQL中数据库相关信息"},"named-checkzone":{"n":"named-checkzone","p":"/named-checkzone","d":"使用named-checkzone命令可以进行区域文件有效性检查和转换,必须指定区域名称和区域文件名称"},"nano":{"n":"nano","p":"/nano","d":"字符终端文本编辑器"},"nc":{"n":"nc","p":"/nc","d":"nc是网络工具中的瑞士军刀"},"ncftp":{"n":"ncftp","p":"/ncftp","d":"是增强的的FTP工具"},"neofetch":{"n":"neofetch","p":"/neofetch","d":"显示带有发行徽标的系统信息的工具"},"nethogs":{"n":"nethogs","p":"/nethogs","d":"终端下的网络流量监控工具"},"netstat":{"n":"netstat","p":"/netstat","d":"查看Linux中网络系统状态信息"},"newusers":{"n":"newusers","p":"/newusers","d":"用于批处理的方式一次创建多个命令"},"nfsstat":{"n":"nfsstat","p":"/nfsstat","d":"列出NFS客户端和服务器的工作状态"},"ngrep":{"n":"ngrep","p":"/ngrep","d":"方便的数据包匹配和显示工具"},"nice":{"n":"nice","p":"/nice","d":"调整程序执行的优先权等级"},"nisdomainname":{"n":"nisdomainname","p":"/nisdomainname","d":"显示主机NIS的域名"},"nl":{"n":"nl","p":"/nl","d":"为每一个文件添加行号。"},"nm":{"n":"nm","p":"/nm","d":"显示二进制目标文件的符号表"},"nmap":{"n":"nmap","p":"/nmap","d":"网络探测和安全审核"},"nmcli":{"n":"nmcli","p":"/nmcli","d":"地址配置工具"},"nohup":{"n":"nohup","p":"/nohup","d":"将程序以忽略挂起信号的方式运行起来"},"nologin":{"n":"nologin","p":"/nologin","d":"拒绝用户登录系统"},"nproc":{"n":"nproc","p":"/nproc","d":"打印可用的处理器单元数量。"},"nslookup":{"n":"nslookup","p":"/nslookup","d":"查询域名DNS信息的工具"},"ntpdate":{"n":"ntpdate","p":"/ntpdate","d":"使用网络计时协议(NTP)设置日期和时间"},"ntsysv":{"n":"ntsysv","p":"/ntsysv","d":"集中管理系统的各种服务"},"objdump":{"n":"objdump","p":"/objdump","d":"显示二进制文件信息"},"od":{"n":"od","p":"/od","d":"输出文件的八进制、十六进制等格式编码的字节"},"openssl":{"n":"openssl","p":"/openssl","d":"强大的安全套接字层密码库"},"pacman":{"n":"pacman","p":"/pacman","d":"Arch Linux 系统及其衍生系统中默认使用的包管理器"},"parted":{"n":"parted","p":"/parted","d":"磁盘分区和分区大小调整工具"},"partprobe":{"n":"partprobe","p":"/partprobe","d":"不重启的情况下重读分区"},"passwd":{"n":"passwd","p":"/passwd","d":"用于让用户可以更改自己的密码"},"paste":{"n":"paste","p":"/paste","d":"将多个文件按列队列合并"},"patch":{"n":"patch","p":"/patch","d":"为开放源代码软件安装补丁程序"},"pathchk":{"n":"pathchk","p":"/pathchk","d":"检查文件中不可移植的部分"},"perl":{"n":"perl","p":"/perl","d":"perl语言解释器"},"pfctl":{"n":"pfctl","p":"/pfctl","d":"PF防火墙的配置命令"},"pgrep":{"n":"pgrep","p":"/pgrep","d":"根据用户给出的信息在当前运行进程中查找并列出符合条件的进程ID(PID)"},"php":{"n":"php","p":"/php","d":"PHP语言的命令行接口"},"pico":{"n":"pico","p":"/pico","d":"功能强大全屏幕的文本编辑器"},"pidof":{"n":"pidof","p":"/pidof","d":"查找指定名称的进程的进程号ID号"},"pidstat":{"n":"pidstat","p":"/pidstat","d":"监控进程的系统资源占用情况"},"pigz":{"n":"pigz","p":"/pigz","d":"可以用来解压缩文件,gzip的并行实现升级版"},"ping":{"n":"ping","p":"/ping","d":"测试主机之间网络的连通性(ipv4)"},"ping6":{"n":"ping6","p":"/ping6","d":"测试主机之间网络的连通性(ipv6)"},"pip":{"n":"pip","p":"/pip","d":"Python 编程语言中的包管理器,用于安装和管理第三方 Python 模块"},"pkexec":{"n":"pkexec","p":"/pkexec","d":"以其他用户身份执行命令"},"pkill":{"n":"pkill","p":"/pkill","d":"可以按照进程名杀死进程"},"pmap":{"n":"pmap","p":"/pmap","d":"报告进程的内存映射关系"},"popd":{"n":"popd","p":"/popd","d":"从目录堆栈中删除目录。"},"poweroff":{"n":"poweroff","p":"/poweroff","d":"关闭Linux系统,关闭记录会被写入到/var/log/wtmp日志文件中"},"ppp-off":{"n":"ppp-off","p":"/ppp-off","d":"关闭ppp连线"},"pr":{"n":"pr","p":"/pr","d":"将文本文件转换成适合打印的格式"},"printf":{"n":"printf","p":"/printf","d":"格式化并输出结果。"},"protoize":{"n":"protoize","p":"/protoize","d":"GNU-C代码转换为ANSI-C代码"},"prtstat":{"n":"prtstat","p":"/prtstat","d":"显示进程信息"},"ps":{"n":"ps","p":"/ps","d":"报告当前系统的进程状态"},"pssh":{"n":"pssh","p":"/pssh","d":"批量管理执行"},"pstack":{"n":"pstack","p":"/pstack","d":"显示每个进程的栈跟踪"},"pstree":{"n":"pstree","p":"/pstree","d":"以树状图的方式展现进程之间的派生关系"},"pushd":{"n":"pushd","p":"/pushd","d":"将目录添加到目录堆栈顶部。"},"pv":{"n":"pv","p":"/pv","d":"显示当前在命令行执行的命令的进度信息,管道查看器"},"pvchange":{"n":"pvchange","p":"/pvchange","d":"修改物理卷属性"},"pvck":{"n":"pvck","p":"/pvck","d":"检测物理卷的LVM元数据的一致性"},"pvcreate":{"n":"pvcreate","p":"/pvcreate","d":"将物理硬盘分区初始化为物理卷"},"pvdisplay":{"n":"pvdisplay","p":"/pvdisplay","d":"显示物理卷的属性"},"pvremove":{"n":"pvremove","p":"/pvremove","d":"删除一个存在的物理卷"},"pvs":{"n":"pvs","p":"/pvs","d":"输出物理卷信息报表"},"pvscan":{"n":"pvscan","p":"/pvscan","d":"扫描系统中所有硬盘的物理卷列表"},"pwck":{"n":"pwck","p":"/pwck","d":"用来验证系统认证文件内容和格式的完整性"},"pwconv":{"n":"pwconv","p":"/pwconv","d":"用来开启用户的投影密码"},"pwd":{"n":"pwd","p":"/pwd","d":"显示当前工作目录的绝对路径。"},"pwdx":{"n":"pwdx","p":"/pwdx","d":"用于显示指定进程的当前工作目录"},"pwunconv":{"n":"pwunconv","p":"/pwunconv","d":"用来关闭用户的投影密码"},"quota":{"n":"quota","p":"/quota","d":"显示磁盘已使用的空间与限制"},"quotacheck":{"n":"quotacheck","p":"/quotacheck","d":"检查磁盘的使用空间与限制"},"quotaoff":{"n":"quotaoff","p":"/quotaoff","d":"关闭Linux内核中指定文件系统的磁盘配额功能"},"quotaon":{"n":"quotaon","p":"/quotaon","d":"激活Linux内核中指定文件系统的磁盘配额功能"},"rcconf":{"n":"rcconf","p":"/rcconf","d":"Debian Linux下的运行等级服务配置工具"},"rcp":{"n":"rcp","p":"/rcp","d":"使在两台Linux主机之间的文件复制操作更简单"},"read":{"n":"read","p":"/read","d":"从键盘读取变量值"},"readelf":{"n":"readelf","p":"/readelf","d":"用于显示elf格式文件的信息"},"readonly":{"n":"readonly","p":"/readonly","d":"标记shell变量或函数为只读"},"reboot":{"n":"reboot","p":"/reboot","d":"重新启动正在运行的Linux操作系统"},"reject":{"n":"reject","p":"/reject","d":"指示打印系统拒绝发往指定目标打印机的打印任务"},"rename":{"n":"rename","p":"/rename","d":"用字符串替换的方式批量改变文件名"},"renice":{"n":"renice","p":"/renice","d":"修改正在运行的进程的调度优先级"},"reposync":{"n":"reposync","p":"/reposync","d":"同步yum存储库到本地目录"},"repquota":{"n":"repquota","p":"/repquota","d":"报表的格式输出磁盘空间限制的状态"},"resize":{"n":"resize","p":"/resize","d":"命令设置终端机视窗的大小"},"restore":{"n":"restore","p":"/restore","d":"所进行的操作和dump指令相反"},"restorecon":{"n":"restorecon","p":"/restorecon","d":"恢复文件的安全上下文"},"return":{"n":"return","p":"/return","d":"从函数中退出并返回数值。"},"rev":{"n":"rev","p":"/rev","d":"将文件内容以字符为单位反序输出"},"rexec":{"n":"rexec","p":"/rexec","d":"远程执行Linux系统下命令"},"rlogin":{"n":"rlogin","p":"/rlogin","d":"从当前终端登录到远程Linux主机"},"rm":{"n":"rm","p":"/rm","d":"用于删除给定的文件和目录"},"rmdir":{"n":"rmdir","p":"/rmdir","d":"用来删除空目录"},"rmmod":{"n":"rmmod","p":"/rmmod","d":"从运行的内核中移除指定的内核模块"},"route":{"n":"route","p":"/route","d":"显示并设置Linux中静态路由表"},"rpm":{"n":"rpm","p":"/rpm","d":"RPM软件包的管理工具"},"rpm2cpio":{"n":"rpm2cpio","p":"/rpm2cpio","d":"将RPM软件包转换为cpio格式的文件"},"rpmbuild":{"n":"rpmbuild","p":"/rpmbuild","d":"创建RPM的二进制软件包和源码软件包"},"rpmdb":{"n":"rpmdb","p":"/rpmdb","d":"初始化和重建RPM数据库"},"rpmquery":{"n":"rpmquery","p":"/rpmquery","d":"从RPM数据库中查询软件包信息"},"rpmsign":{"n":"rpmsign","p":"/rpmsign","d":"使用RPM软件包的签名管理工具"},"rpmverify":{"n":"rpmverify","p":"/rpmverify","d":"验证已安装的RPM软件包的正确性"},"rsh":{"n":"rsh","p":"/rsh","d":"连接远程主机并执行命令"},"rsync":{"n":"rsync","p":"/rsync","d":"远程数据同步工具"},"runlevel":{"n":"runlevel","p":"/runlevel","d":"打印当前Linux系统的运行等级"},"sar":{"n":"sar","p":"/sar","d":"系统运行状态统计工具"},"scp":{"n":"scp","p":"/scp","d":"加密的方式在本地主机和远程主机之间复制文件"},"screen":{"n":"screen","p":"/screen","d":"用于命令行终端切换"},"script":{"n":"script","p":"/script","d":"记录终端会话的所有操作"},"scriptreplay":{"n":"scriptreplay","p":"/scriptreplay","d":"重新播放终端会话的所有操作"},"sed":{"n":"sed","p":"/sed","d":"功能强大的流式文本编辑器"},"seinfo":{"n":"seinfo","p":"/seinfo","d":"查询SELinux的策略提供多少相关规则"},"semanage":{"n":"semanage","p":"/semanage","d":"默认目录的安全上下文查询与修改"},"sendmail":{"n":"sendmail","p":"/sendmail","d":"著名电子邮件服务器"},"seq":{"n":"seq","p":"/seq","d":"以指定增量从首数开始打印数字到尾数"},"service":{"n":"service","p":"/service","d":"控制系统服务的实用工具"},"sesearch":{"n":"sesearch","p":"/sesearch","d":"查询SELinux策略的规则详情"},"set":{"n":"set","p":"/set","d":"显示或设置shell特性及shell变量"},"setfacl":{"n":"setfacl","p":"/setfacl","d":"设置文件访问控制列表"},"setpci":{"n":"setpci","p":"/setpci","d":"查询和配置PCI设备的使用工具"},"setsebool":{"n":"setsebool","p":"/setsebool","d":"修改SElinux策略内各项规则的布尔值"},"setsid":{"n":"setsid","p":"/setsid","d":"在新的会话中运行程序"},"sftp-server":{"n":"sftp-server","p":"/sftp-server","d":"sftp协议的服务器端程序"},"sftp":{"n":"sftp","p":"/sftp","d":"交互式的文件传输程序"},"sh":{"n":"sh","p":"/sh","d":"shell命令解释器"},"sha256sum":{"n":"sha256sum","p":"/sha256sum","d":"用于计算文件的 SHA-256 哈希值"},"shift":{"n":"shift","p":"/shift","d":"移动位置参数。"},"shopt":{"n":"shopt","p":"/shopt","d":"显示和设置shell操作选项"},"showmount":{"n":"showmount","p":"/showmount","d":"显示NFS服务器加载的信息"},"shuf":{"n":"shuf","p":"/shuf","d":"产生随机的排列。"},"shutdown":{"n":"shutdown","p":"/shutdown","d":"用来执行系统关机的命令"},"skill":{"n":"skill","p":"/skill","d":"向选定的进程发送信号冻结进程"},"slabtop":{"n":"slabtop","p":"/slabtop","d":"实时显示内核slab内存缓存信息"},"sleep":{"n":"sleep","p":"/sleep","d":"将目前动作延迟一段时间"},"slocate":{"n":"slocate","p":"/slocate","d":"命令查找文件或目录"},"smartmontools":{"n":"smartmontools","p":"/smartmontools","d":"Smartmontools 是一种硬盘检测工具,通过控制和管理硬盘的SMART(Self Monitoring Analysis and Reporting Technology,自动检测分析及报告技术)技术来实现的"},"smbclient":{"n":"smbclient","p":"/smbclient","d":"交互方式访问samba服务器"},"smbpasswd":{"n":"smbpasswd","p":"/smbpasswd","d":"samba用户和密码管理工具"},"sort":{"n":"sort","p":"/sort","d":"对文本文件中所有行进行排序。"},"source":{"n":"source","p":"/source","d":"在当前Shell环境中从指定文件读取和执行命令。"},"speedtest-cli":{"n":"speedtest-cli","p":"/speedtest-cli","d":"命令行下测试服务器外网速度"},"spell":{"n":"spell","p":"/spell","d":"对文件进行拼写检查"},"split":{"n":"split","p":"/split","d":"分割任意大小的文件"},"squid":{"n":"squid","p":"/squid","d":"squid服务器守护进程"},"squidclient":{"n":"squidclient","p":"/squidclient","d":"squid服务器的客户端管理工具"},"ss":{"n":"ss","p":"/ss","d":"比 netstat 好用的socket统计信息,iproute2 包附带的另一个工具,允许你查询 socket 的有关统计信息"},"ssh-add":{"n":"ssh-add","p":"/ssh-add","d":"把专用密钥添加到ssh-agent的高速缓存中"},"ssh-agent":{"n":"ssh-agent","p":"/ssh-agent","d":"ssh密钥管理器"},"ssh-copy-id":{"n":"ssh-copy-id","p":"/ssh-copy-id","d":"把本地的ssh公钥文件安装到远程主机对应的账户下"},"ssh-keygen":{"n":"ssh-keygen","p":"/ssh-keygen","d":"为ssh生成、管理和转换认证密钥"},"ssh-keyscan":{"n":"ssh-keyscan","p":"/ssh-keyscan","d":"收集主机公钥的使用工具"},"ssh":{"n":"ssh","p":"/ssh","d":"openssh套件中的客户端连接工具"},"sshd":{"n":"sshd","p":"/sshd","d":"openssh软件套件中的服务器守护进程"},"sshpass":{"n":"sshpass","p":"/sshpass","d":"免交互 SSH 登录工具。"},"startx":{"n":"startx","p":"/startx","d":"用来启动X Window"},"stat":{"n":"stat","p":"/stat","d":"用于显示文件的状态信息"},"strace":{"n":"strace","p":"/strace","d":"跟踪系统调用和信号"},"strings":{"n":"strings","p":"/strings","d":"在对象文件或二进制文件中查找可打印的字符串"},"stty":{"n":"stty","p":"/stty","d":"修改终端命令行的相关设置"},"su":{"n":"su","p":"/su","d":"用于切换当前用户身份到其他用户身份"},"sudo":{"n":"sudo","p":"/sudo","d":"以其他身份来执行命令"},"sum":{"n":"sum","p":"/sum","d":"计算文件的校验码和显示块数"},"supervisord":{"n":"supervisord","p":"/supervisord","d":"配置后台服务/常驻进程的进程管家工具"},"suspend":{"n":"suspend","p":"/suspend","d":"挂起shell的执行。"},"swapoff":{"n":"swapoff","p":"/swapoff","d":"关闭指定的交换空间"},"swapon":{"n":"swapon","p":"/swapon","d":"激活Linux系统中交换空间"},"sync":{"n":"sync","p":"/sync","d":"用于强制被改变的内容立刻写入磁盘"},"sysctl":{"n":"sysctl","p":"/sysctl","d":"时动态地修改内核的运行参数"},"syslog":{"n":"syslog","p":"/syslog","d":"系统默认的日志守护进程"},"systemctl":{"n":"systemctl","p":"/systemctl","d":"系统服务管理器指令"},"systool":{"n":"systool","p":"/systool","d":"显示基于总线、类和拓扑显示系统中设备的信息"},"tac":{"n":"tac","p":"/tac","d":"连接多个文件并以行为单位反向打印到标准输出。"},"tail":{"n":"tail","p":"/tail","d":"在屏幕上显示指定文件的末尾若干行"},"tailf":{"n":"tailf","p":"/tailf","d":"在屏幕上显示指定文件的末尾若干行内容,通常用于日志文件的跟踪输出"},"talk":{"n":"talk","p":"/talk","d":"让用户和其他用户聊天"},"tar":{"n":"tar","p":"/tar","d":"将许多文件一起保存至一个单独的磁带或磁盘归档,并能从归档中单独还原所需文件。"},"tcpdump":{"n":"tcpdump","p":"/tcpdump","d":"一款sniffer工具,是Linux上的抓包工具,嗅探器"},"tcpreplay":{"n":"tcpreplay","p":"/tcpreplay","d":"将保存在 PCAP 文件包重新发送,用于性能或者功能测试"},"tee":{"n":"tee","p":"/tee","d":"从标准输入读取数据并重定向到标准输出和文件。"},"telinit":{"n":"telinit","p":"/telinit","d":"切换当前正在运行系统的运行等级"},"telnet":{"n":"telnet","p":"/telnet","d":"登录远程主机和管理(测试ip端口是否连通)"},"tempfile":{"n":"tempfile","p":"/tempfile","d":"shell中给临时文件命名"},"test":{"n":"test","p":"/test","d":"执行条件表达式。"},"tftp":{"n":"tftp","p":"/tftp","d":"在本机和tftp服务器之间使用TFTP协议传输文件"},"time":{"n":"time","p":"/time","d":"统计给定命令所花费的总时间"},"timedatectl":{"n":"timedatectl","p":"/timedatectl","d":"用于在 Linux 中设置或查询系统时间、日期和时区等配置。"},"times":{"n":"times","p":"/times","d":"显示进程累计时间。"},"tload":{"n":"tload","p":"/tload","d":"显示系统负载状况"},"tmux":{"n":"tmux","p":"/tmux","d":"Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权"},"top":{"n":"top","p":"/top","d":"显示或管理执行中的程序"},"touch":{"n":"touch","p":"/touch","d":"创建新的空文件"},"tput":{"n":"tput","p":"/tput","d":"通过terminfo数据库对终端会话进行初始化和操作"},"tr":{"n":"tr","p":"/tr","d":"将字符进行替换压缩和删除"},"tracepath":{"n":"tracepath","p":"/tracepath","d":"追踪目的主机经过的路由信息"},"traceroute":{"n":"traceroute","p":"/traceroute","d":"显示数据包到主机间的路径"},"trap":{"n":"trap","p":"/trap","d":"捕捉信号和其他事件并执行命令。"},"tree":{"n":"tree","p":"/tree","d":"树状图列出目录的内容"},"true":{"n":"true","p":"/true","d":"返回状态为成功。"},"tty":{"n":"tty","p":"/tty","d":"显示连接到当前标准输入的终端设备文件名"},"type":{"n":"type","p":"/type","d":"显示指定命令的类型。"},"ulimit":{"n":"ulimit","p":"/ulimit","d":"控制shell程序的资源"},"umask":{"n":"umask","p":"/umask","d":"显示或设置创建文件的权限掩码。"},"umount":{"n":"umount","p":"/umount","d":"用于卸载已经加载的文件系统"},"unalias":{"n":"unalias","p":"/unalias","d":"删除由alias设置的别名"},"uname":{"n":"uname","p":"/uname","d":"打印系统信息。"},"unarj":{"n":"unarj","p":"/unarj","d":"解压缩由arj命令创建的压缩包"},"uncompress":{"n":"uncompress","p":"/uncompress","d":"用来解压.Z文件"},"unexpand":{"n":"unexpand","p":"/unexpand","d":"将文件的空白字符转换为制表符"},"uniq":{"n":"uniq","p":"/uniq","d":"显示或忽略重复的行。"},"unlink":{"n":"unlink","p":"/unlink","d":"系统调用函数unlink去删除指定的文件"},"unprotoize":{"n":"unprotoize","p":"/unprotoize","d":"删除C语言源代码文件中的函数原型"},"unrar":{"n":"unrar","p":"/unrar","d":"解压rar文件命令,从 rar 压缩包中提取文件"},"unset":{"n":"unset","p":"/unset","d":"删除指定的shell变量或函数。"},"unzip":{"n":"unzip","p":"/unzip","d":"用于解压缩由zip命令压缩的压缩包"},"updatedb":{"n":"updatedb","p":"/updatedb","d":"创建或更新slocate命令所必需的数据库文件"},"uptime":{"n":"uptime","p":"/uptime","d":"查看Linux系统负载信息"},"useradd":{"n":"useradd","p":"/useradd","d":"创建的新的系统用户"},"userdel":{"n":"userdel","p":"/userdel","d":"用于删除给定的用户以及与用户相关的文件"},"usermod":{"n":"usermod","p":"/usermod","d":"用于修改用户的基本信息"},"usernetctl":{"n":"usernetctl","p":"/usernetctl","d":"被允许时操作指定的网络接口"},"users":{"n":"users","p":"/users","d":"打印当前主机所有登陆用户的名称。"},"uucico":{"n":"uucico","p":"/uucico","d":"UUCP文件传输服务程序"},"uupick":{"n":"uupick","p":"/uupick","d":"命令处理传送进来的文件"},"uuto":{"n":"uuto","p":"/uuto","d":"将文件传送到远端的UUCP主机"},"vdfuse":{"n":"vdfuse","p":"/vdfuse","d":"VirtualBox软件挂载VDI分区文件工具"},"vgchange":{"n":"vgchange","p":"/vgchange","d":"修改卷组属性"},"vgconvert":{"n":"vgconvert","p":"/vgconvert","d":"转换卷组元数据格式"},"vgcreate":{"n":"vgcreate","p":"/vgcreate","d":"用于创建LVM卷组"},"vgdisplay":{"n":"vgdisplay","p":"/vgdisplay","d":"显示LVM卷组的信息"},"vgextend":{"n":"vgextend","p":"/vgextend","d":"向卷组中添加物理卷"},"vgreduce":{"n":"vgreduce","p":"/vgreduce","d":"从卷组中删除物理卷"},"vgremove":{"n":"vgremove","p":"/vgremove","d":"用于用户删除LVM卷组"},"vgrename":{"n":"vgrename","p":"/vgrename","d":"使用vgrename命令可以重命名卷组的名称"},"vgscan":{"n":"vgscan","p":"/vgscan","d":"扫描并显示系统中的卷组"},"vi":{"n":"vi","p":"/vi","d":"功能强大的纯文本编辑器"},"vmstat":{"n":"vmstat","p":"/vmstat","d":"显示虚拟内存状态"},"volname":{"n":"volname","p":"/volname","d":"显示指定的ISO-9660格式的设备的卷名称"},"w":{"n":"w","p":"/w","d":"显示目前登入系统的用户信息"},"wait":{"n":"wait","p":"/wait","d":"等待进程执行完后返回"},"wall":{"n":"wall","p":"/wall","d":"向系统当前所有打开的终端上输出信息"},"watch":{"n":"watch","p":"/watch","d":"可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令"},"wc":{"n":"wc","p":"/wc","d":"统计文件的字节数、字数、行数"},"wget":{"n":"wget","p":"/wget","d":"Linux系统下载文件工具"},"whatis":{"n":"whatis","p":"/whatis","d":"查询一个命令执行什么功能"},"whereis":{"n":"whereis","p":"/whereis","d":"查找二进制程序、代码等相关文件路径"},"which":{"n":"which","p":"/which","d":"查找并显示给定命令的绝对路径"},"who":{"n":"who","p":"/who","d":"显示当前所有登陆用户的信息。"},"whoami":{"n":"whoami","p":"/whoami","d":"打印当前有效的用户ID对应的名称"},"write":{"n":"write","p":"/write","d":"向指定登录用户终端上发送信息"},"xargs":{"n":"xargs","p":"/xargs","d":"给其他命令传递参数的一个过滤器"},"xauth":{"n":"xauth","p":"/xauth","d":"显示和编辑被用于连接X服务器的认证信息"},"xclip":{"n":"xclip","p":"/xclip","d":"管理 X 粘贴板"},"xhost":{"n":"xhost","p":"/xhost","d":"制哪些X客户端能够在X服务器上显示"},"xinit":{"n":"xinit","p":"/xinit","d":"是Linux下X-Window系统的初始化程序"},"xlsatoms":{"n":"xlsatoms","p":"/xlsatoms","d":"列出X服务器内部所有定义的原子成分"},"xlsclients":{"n":"xlsclients","p":"/xlsclients","d":"列出显示器中的客户端应用程序"},"xlsfonts":{"n":"xlsfonts","p":"/xlsfonts","d":"列出X Server使用的字体"},"xrandr":{"n":"xrandr","p":"/xrandr","d":"X 窗口系统配置管理工具"},"xset":{"n":"xset","p":"/xset","d":"设置X-Window系统中的用户爱好的实用工具"},"xz":{"n":"xz","p":"/xz","d":"POSIX 平台开发具有高压缩率的工具"},"yes":{"n":"yes","p":"/yes","d":"重复打印指定字符串"},"ypdomainname":{"n":"ypdomainname","p":"/ypdomainname","d":"显示主机的NIS的域名"},"yum":{"n":"yum","p":"/yum","d":"基于RPM的软件包管理器"},"zcat":{"n":"zcat","p":"/zcat","d":"显示压缩包中文件的内容"},"zfore":{"n":"zfore","p":"/zfore","d":"强制为gzip格式的压缩文件添加.gz后缀"},"zip":{"n":"zip","p":"/zip","d":"可以用来解压缩文件"},"zipinfo":{"n":"zipinfo","p":"/zipinfo","d":"用来列出压缩文件信息"},"zipsplit":{"n":"zipsplit","p":"/zipsplit","d":"将较大的zip压缩包分割成各个较小的压缩包"},"znew":{"n":"znew","p":"/znew","d":"将.Z压缩包重新转化为gzip命令压缩的.gz压缩包"}} \ No newline at end of file +{"7z":{"n":"7z","p":"/7z","d":"拥有极高压缩比的开源压缩软件。"},"ab":{"n":"ab","p":"/ab","d":"Apache服务器的性能测试工具"},"accept":{"n":"accept","p":"/accept","d":"指示打印系统接受发往指定目标打印机的打印任务"},"ack":{"n":"ack","p":"/ack","d":"比grep好用的文本搜索工具"},"ag":{"n":"ag","p":"/ag","d":"ack 的升级版,C语言编写,更快更人性化"},"alias":{"n":"alias","p":"/alias","d":"定义或显示别名。"},"apachectl":{"n":"apachectl","p":"/apachectl","d":"Apache服务器前端控制工具"},"apk":{"n":"apk","p":"/apk","d":"Alpine Linux 下的包管理工具"},"apropos":{"n":"apropos","p":"/apropos","d":"在 whatis 数据库中查找字符串"},"apt-get":{"n":"apt-get","p":"/apt-get","d":"Debian Linux发行版中的APT软件包管理工具"},"apt-key":{"n":"apt-key","p":"/apt-key","d":"管理Debian Linux系统中的软件包密钥"},"apt-sortpkgs":{"n":"apt-sortpkgs","p":"/apt-sortpkgs","d":"Debian Linux下对软件包索引文件进行排序的工具"},"aptitude":{"n":"aptitude","p":"/aptitude","d":"Debian Linux系统中软件包管理工具"},"ar":{"n":"ar","p":"/ar","d":"建立或修改备存文件,或是从备存文件中抽取文件"},"arch":{"n":"arch","p":"/arch","d":"显示当前主机的硬件架构类型"},"arj":{"n":"arj","p":"/arj","d":"用于创建和管理.arj压缩包"},"arp":{"n":"arp","p":"/arp","d":"arp 命令用于显示和修改 IP 到 MAC 转换表"},"arpd":{"n":"arpd","p":"/arpd","d":"收集免费ARP信息"},"arping":{"n":"arping","p":"/arping","d":"通过发送ARP协议报文测试网络"},"arptables":{"n":"arptables","p":"/arptables","d":"管理ARP包过滤规则表"},"arpwatch":{"n":"arpwatch","p":"/arpwatch","d":"监听网络上ARP的记录"},"as":{"n":"as","p":"/as","d":"汇编语言编译器"},"at":{"n":"at","p":"/at","d":"在指定时间执行一个任务"},"atop":{"n":"atop","p":"/atop","d":"监控Linux系统资源与进程的工具"},"atq":{"n":"atq","p":"/atq","d":"列出当前用户的at任务列表"},"atrm":{"n":"atrm","p":"/atrm","d":"删除待执行任务队列中的指定任务"},"awk":{"n":"awk","p":"/awk","d":"文本和数据进行处理的编程语言"},"axel":{"n":"axel","p":"/axel","d":"多线程下载工具"},"badblocks":{"n":"badblocks","p":"/badblocks","d":"查找磁盘中损坏的区块"},"base64":{"n":"base64","p":"/base64","d":"base64 编码/解码文件或标准输入输出"},"basename":{"n":"basename","p":"/basename","d":"打印目录或者文件的基本名称"},"batch":{"n":"batch","p":"/batch","d":"在系统不繁忙的时候执行定时任务"},"bc":{"n":"bc","p":"/bc","d":"算术操作精密运算工具"},"bg":{"n":"bg","p":"/bg","d":"将前台终端作业移动到后台运行"},"bind":{"n":"bind","p":"/bind","d":"显示或设置键盘按键与其相关的功能"},"blkid":{"n":"blkid","p":"/blkid","d":"查看块设备的文件系统类型、LABEL、UUID等信息"},"blockdev":{"n":"blockdev","p":"/blockdev","d":"从命令行调用区块设备控制程序"},"bmodinfo":{"n":"bmodinfo","p":"/bmodinfo","d":"显示给定模块的详细信息"},"break":{"n":"break","p":"/break","d":"结束for,while或until循环。"},"builtin":{"n":"builtin","p":"/builtin","d":"执行bash内建命令。"},"bunzip2":{"n":"bunzip2","p":"/bunzip2","d":"可解压缩.bz2格式的压缩文件。 "},"bye":{"n":"bye","p":"/bye","d":"命令用于中断FTP连线并结束程序"},"bzcat":{"n":"bzcat","p":"/bzcat","d":"不解压,直接查看指定的.bz2文件"},"bzcmp":{"n":"bzcmp","p":"/bzcmp","d":"比较两个压缩包中的文件"},"bzdiff":{"n":"bzdiff","p":"/bzdiff","d":"直接比较两个.bz2压缩包中文件的不同"},"bzgrep":{"n":"bzgrep","p":"/bzgrep","d":"使用正则表达式搜索.bz2压缩包中文件"},"bzip2":{"n":"bzip2","p":"/bzip2","d":"将文件压缩成bz2格式"},"bzip2recover":{"n":"bzip2recover","p":"/bzip2recover","d":"恢复被破坏的.bz2压缩包中的文件"},"bzless":{"n":"bzless","p":"/bzless","d":"增强.bz2压缩包查看器"},"bzmore":{"n":"bzmore","p":"/bzmore","d":"查看bzip2压缩过的文本文件的内容"},"cal":{"n":"cal","p":"/cal","d":"显示当前日历或指定日期的日历"},"cancel":{"n":"cancel","p":"/cancel","d":"取消已存在的打印任务"},"cat":{"n":"cat","p":"/cat","d":"连接多个文件并打印到标准输出。"},"cd":{"n":"cd","p":"/cd","d":"切换用户当前工作目录。"},"cdrecord":{"n":"cdrecord","p":"/cdrecord","d":"Linux系统下光盘刻录功能命令"},"chage":{"n":"chage","p":"/chage","d":"修改帐号和密码的有效期限"},"chattr":{"n":"chattr","p":"/chattr","d":"用来改变文件属性"},"chcon":{"n":"chcon","p":"/chcon","d":"修改对象(文件)的安全上下文"},"chfn":{"n":"chfn","p":"/chfn","d":"用来改变finger命令显示的信息"},"chgrp":{"n":"chgrp","p":"/chgrp","d":"用来变更文件或目录的所属群组"},"chkconfig":{"n":"chkconfig","p":"/chkconfig","d":"检查或设置系统的各种服务"},"chmod":{"n":"chmod","p":"/chmod","d":"用来变更文件或目录的权限"},"chown":{"n":"chown","p":"/chown","d":"用来变更文件或目录的拥有者或所属群组"},"chpasswd":{"n":"chpasswd","p":"/chpasswd","d":"批量更新用户口令的工具"},"chroot":{"n":"chroot","p":"/chroot","d":"把根目录换成指定的目的目录"},"chsh":{"n":"chsh","p":"/chsh","d":"用来更换登录系统时使用的shell"},"cksum":{"n":"cksum","p":"/cksum","d":"检查文件的CRC是否正确"},"clear":{"n":"clear","p":"/clear","d":"清除当前屏幕终端上的任何信息"},"clock":{"n":"clock","p":"/clock","d":"用于调整 RTC 时间"},"clockdiff":{"n":"clockdiff","p":"/clockdiff","d":"检测两台linux主机的时间差"},"cmp":{"n":"cmp","p":"/cmp","d":"比较两个文件是否有差异"},"col":{"n":"col","p":"/col","d":"过滤控制字符"},"colrm":{"n":"colrm","p":"/colrm","d":"删除文件中的指定列"},"column":{"n":"column","p":"/column","d":"按列格式化输出文件"},"comm":{"n":"comm","p":"/comm","d":"按行比较两个已排序的文件。"},"command":{"n":"command","p":"/command","d":"调用并执行指定的命令"},"compress":{"n":"compress","p":"/compress","d":"使用Lempress-Ziv编码压缩数据文件"},"consoletype":{"n":"consoletype","p":"/consoletype","d":"输出已连接的终端类型"},"continue":{"n":"continue","p":"/continue","d":"结束本次循环,继续执行下一个for,while或until循环。"},"convertquota":{"n":"convertquota","p":"/convertquota","d":"把老的配额文件转换为新的格式"},"cp":{"n":"cp","p":"/cp","d":"将源文件或目录复制到目标文件或目录中"},"cpio":{"n":"cpio","p":"/cpio","d":"用来建立、还原备份档的工具程序"},"createrepo":{"n":"createrepo","p":"/createrepo","d":"创建YUM仓库"},"crontab":{"n":"crontab","p":"/crontab","d":"提交和管理用户的需要周期性执行的任务"},"csplit":{"n":"csplit","p":"/csplit","d":"将一个大文件分割成小的碎片文件"},"cu":{"n":"cu","p":"/cu","d":"用于连接另一个系统主机"},"cupsdisable":{"n":"cupsdisable","p":"/cupsdisable","d":"停止指定的打印机"},"cupsenable":{"n":"cupsenable","p":"/cupsenable","d":"启动指定的打印机"},"curl":{"n":"curl","p":"/curl","d":"利用URL规则在命令行下工作的文件传输工具"},"cut":{"n":"cut","p":"/cut","d":"连接文件并打印到标准输出设备上"},"date":{"n":"date","p":"/date","d":"显示或设置系统时间与日期"},"dc":{"n":"dc","p":"/dc","d":"任意精度计算器"},"dd":{"n":"dd","p":"/dd","d":"复制文件并对原文件的内容进行转换和格式化处理"},"declare":{"n":"declare","p":"/declare","d":"声明变量,设置或显示变量的值和属性。"},"depmod":{"n":"depmod","p":"/depmod","d":"分析可载入模块的相依性"},"df":{"n":"df","p":"/df","d":"显示磁盘的相关信息"},"dhclient":{"n":"dhclient","p":"/dhclient","d":"动态获取或释放IP地址"},"dhcpd":{"n":"dhcpd","p":"/dhcpd","d":"运行DHCP服务器"},"dhcrelay":{"n":"dhcrelay","p":"/dhcrelay","d":"使用dhcrelay命令可以提供中继DHCP和BOOTP请求"},"diff":{"n":"diff","p":"/diff","d":"比较给定的两个文件的不同"},"diff3":{"n":"diff3","p":"/diff3","d":"比较3个文件不同的地方"},"diffstat":{"n":"diffstat","p":"/diffstat","d":"显示diff命令输出信息的柱状图"},"dig":{"n":"dig","p":"/dig","d":"域名查询工具"},"dircolors":{"n":"dircolors","p":"/dircolors","d":"置ls命令在显示目录或文件时所用的色彩"},"dirname":{"n":"dirname","p":"/dirname","d":"去除文件名中的非目录部分"},"dirs":{"n":"dirs","p":"/dirs","d":"显示目录堆栈。"},"disown":{"n":"disown","p":"/disown","d":"从当前的shell中移除作业。"},"dmesg":{"n":"dmesg","p":"/dmesg","d":"显示Linux系统启动信息"},"dmidecode":{"n":"dmidecode","p":"/dmidecode","d":"在Linux系统下获取有关硬件方面的信息"},"dnf":{"n":"dnf","p":"/dnf","d":"新一代的RPM软件包管理器"},"dnsdomainname":{"n":"dnsdomainname","p":"/dnsdomainname","d":"定义DNS系统中FQDN名称的域名"},"docker":{"n":"docker","p":"/docker","d":"容器化技术,可以将应用程序及其依赖项打包到一个可移植的容器中,使其可以在不同的环境中运行"},"domainname":{"n":"domainname","p":"/domainname","d":"显示和设置系统的NIS域名"},"dos2unix":{"n":"dos2unix","p":"/dos2unix","d":"将DOS格式文本文件转换成Unix格式"},"dpkg-deb":{"n":"dpkg-deb","p":"/dpkg-deb","d":"Debian Linux下的软件包管理工具"},"dpkg-divert":{"n":"dpkg-divert","p":"/dpkg-divert","d":"Debian Linux中创建并管理一个转向列表"},"dpkg-preconfigure":{"n":"dpkg-preconfigure","p":"/dpkg-preconfigure","d":"Debian Linux中软件包安装之前询问问题"},"dpkg-query":{"n":"dpkg-query","p":"/dpkg-query","d":"Debian Linux中软件包的查询工具"},"dpkg-reconfigure":{"n":"dpkg-reconfigure","p":"/dpkg-reconfigure","d":"Debian Linux中重新配制一个已经安装的软件包"},"dpkg-split":{"n":"dpkg-split","p":"/dpkg-split","d":"Debian Linux中将大软件包分割成小包"},"dpkg-statoverride":{"n":"dpkg-statoverride","p":"/dpkg-statoverride","d":"Debian Linux中覆盖文件的所有权和模式"},"dpkg-trigger":{"n":"dpkg-trigger","p":"/dpkg-trigger","d":"Debian Linux下的软件包触发器"},"dpkg":{"n":"dpkg","p":"/dpkg","d":"Debian Linux系统上安装、创建和管理软件包"},"dris":{"n":"dris","p":"/dris","d":"显示和清空目录堆栈中的内容"},"dstat":{"n":"dstat","p":"/dstat","d":"通用的系统资源统计工具"},"du":{"n":"du","p":"/du","d":"显示每个文件和目录的磁盘使用空间"},"dump":{"n":"dump","p":"/dump","d":"用于备份ext2或者ext3文件系统"},"e2fsck":{"n":"e2fsck","p":"/e2fsck","d":"用于检查第二扩展文件系统的完整性"},"e2label":{"n":"e2label","p":"/e2label","d":"设置第二扩展文件系统的卷标"},"echo":{"n":"echo","p":"/echo","d":"输出指定的字符串或者变量"},"ed":{"n":"ed","p":"/ed","d":"单行纯文本编辑器"},"edquota":{"n":"edquota","p":"/edquota","d":"用于编辑指定用户或工作组磁盘配额"},"egrep":{"n":"egrep","p":"/egrep","d":"在文件内查找指定的字符串"},"eject":{"n":"eject","p":"/eject","d":"用来退出抽取式设备"},"elinks":{"n":"elinks","p":"/elinks","d":"纯文本界面的WWW浏览器"},"elm":{"n":"elm","p":"/elm","d":"纯文本邮件客户端程序"},"emacs":{"n":"emacs","p":"/emacs","d":"功能强大的全屏文本编辑器"},"enable":{"n":"enable","p":"/enable","d":"启动或禁用shell内建命令"},"env":{"n":"env","p":"/env","d":"显示系统中已存在的环境变量"},"ethtool":{"n":"ethtool","p":"/ethtool","d":"显示或修改以太网卡的配置信息"},"ex":{"n":"ex","p":"/ex","d":"启动vim编辑器的ex编辑模式"},"exec":{"n":"exec","p":"/exec","d":"调用并执行指定的命令"},"exit":{"n":"exit","p":"/exit","d":"退出当前的shell。"},"expand":{"n":"expand","p":"/expand","d":"将文件的制表符转换为空白字符"},"export":{"n":"export","p":"/export","d":"为shell变量或函数设置导出属性。"},"exportfs":{"n":"exportfs","p":"/exportfs","d":"管理NFS共享文件系统列表"},"expr":{"n":"expr","p":"/expr","d":"一款表达式计算工具"},"false":{"n":"false","p":"/false","d":"返回状态为失败。"},"fc":{"n":"fc","p":"/fc","d":"显示历史列表中的命令或修改指定的历史命令并执行。"},"fdisk":{"n":"fdisk","p":"/fdisk","d":"查看磁盘使用情况和磁盘分区"},"fg":{"n":"fg","p":"/fg","d":"将后台作业移动到前台终端运行"},"fgrep":{"n":"fgrep","p":"/fgrep","d":"为文件搜索文字字符串"},"figlet":{"n":"figlet","p":"/figlet","d":"字符串转为 “字画符”。"},"file":{"n":"file","p":"/file","d":"用来探测给定文件的类型"},"find":{"n":"find","p":"/find","d":"在指定目录下查找文件"},"findfs":{"n":"findfs","p":"/findfs","d":"标签或UUID查找文件系统"},"finger":{"n":"finger","p":"/finger","d":"用于查找并显示用户信息"},"firewall-cmd":{"n":"firewall-cmd","p":"/firewall-cmd","d":"Linux上新用的防火墙软件,跟iptables差不多的工具"},"fishshell":{"n":"fishshell","p":"/fishshell","d":"比 bash 更好用的 shell"},"fmt":{"n":"fmt","p":"/fmt","d":"读取文件后优化处理并输出"},"fold":{"n":"fold","p":"/fold","d":"控制文件内容输出时所占用的屏幕宽度"},"fping":{"n":"fping","p":"/fping","d":"fping检测主机是否存在"},"free":{"n":"free","p":"/free","d":"显示内存的使用情况"},"fsck":{"n":"fsck","p":"/fsck","d":"fsck(英文全拼:file system check)命令检查并且试图修复文件系统中的错误"},"ftp":{"n":"ftp","p":"/ftp","d":"用来设置文件系统相关功能"},"ftpcount":{"n":"ftpcount","p":"/ftpcount","d":"显示目前已FTP登入的用户人数"},"ftpshut":{"n":"ftpshut","p":"/ftpshut","d":"在指定的时间关闭FTP服务器"},"ftptop":{"n":"ftptop","p":"/ftptop","d":"proftpd服务器的连接状态"},"ftpwho":{"n":"ftpwho","p":"/ftpwho","d":"显示当前每个ftp会话信息"},"fuser":{"n":"fuser","p":"/fuser","d":"使用文件或文件结构识别进程"},"gcc":{"n":"gcc","p":"/gcc","d":"基于C/C++的编译器"},"gcov":{"n":"gcov","p":"/gcov","d":"测试程序的代码覆盖率的工具"},"gdb":{"n":"gdb","p":"/gdb","d":"功能强大的程序调试器"},"get_module":{"n":"get_module","p":"/get_module","d":"获取Linux内核模块的详细信息"},"getenforce":{"n":"getenforce","p":"/getenforce","d":"显示当前SELinux的应用模式,是强制、执行还是停用"},"getent":{"n":"getent","p":"/getent","d":"查询 DNS 名称服务器中的命名空间"},"getsebool":{"n":"getsebool","p":"/getsebool","d":"查询SElinux策略内各项规则的布尔值"},"git":{"n":"git","p":"/git","d":"是目前世界上最先进的分布式版本控制系统"},"gpasswd":{"n":"gpasswd","p":"/gpasswd","d":"Linux下工作组文件的管理工具"},"gpg":{"n":"gpg","p":"/gpg","d":"可用于签名、检查、加密或解密的工具"},"gpm":{"n":"gpm","p":"/gpm","d":"提供文字模式下的滑鼠事件处理"},"grep":{"n":"grep","p":"/grep","d":"强大的文本搜索工具"},"groupadd":{"n":"groupadd","p":"/groupadd","d":"用于创建一个新的工作组"},"groupdel":{"n":"groupdel","p":"/groupdel","d":"用于删除指定的工作组"},"groupmems":{"n":"groupmems","p":"/groupmems","d":"管理用户主要组的成员"},"groupmod":{"n":"groupmod","p":"/groupmod","d":"更改群组识别码或名称"},"groups":{"n":"groups","p":"/groups","d":"打印指定用户所在组的名称。"},"grpck":{"n":"grpck","p":"/grpck","d":"用于验证组文件的完整性"},"grpconv":{"n":"grpconv","p":"/grpconv","d":"用来开启群组的投影密码"},"grpunconv":{"n":"grpunconv","p":"/grpunconv","d":"用来关闭群组的投影密码"},"grub":{"n":"grub","p":"/grub","d":"多重引导程序grub的命令行shell工具"},"grub2-mkconfig":{"n":"grub2-mkconfig","p":"/grub2-mkconfig","d":"生成 grub.cfg 配置文件。"},"grub2-set-default":{"n":"grub2-set-default","p":"/grub2-set-default","d":"设置系统默认的启动内核"},"gunzip":{"n":"gunzip","p":"/gunzip","d":"用来解压缩文件"},"gzexe":{"n":"gzexe","p":"/gzexe","d":"用来压缩可执行文件"},"gzip":{"n":"gzip","p":"/gzip","d":"用来压缩文件"},"halt":{"n":"halt","p":"/halt","d":"关闭正在运行的Linux操作系统"},"hcitool":{"n":"hcitool","p":"/hcitool","d":"hcitool是一个Linux命令行工具,用于管理和调试蓝牙设备。它可以用于扫描周围的蓝牙设备、连接到蓝牙设备发送命令和数据包等。"},"hdparm":{"n":"hdparm","p":"/hdparm","d":"显示与设定硬盘的参数"},"head":{"n":"head","p":"/head","d":"显示文件的开头部分。"},"help":{"n":"help","p":"/help","d":"该命令是bash内建命令,用于显示bash内建命令的帮助信息。"},"hexdump":{"n":"hexdump","p":"/hexdump","d":"显示文件十六进制格式"},"history":{"n":"history","p":"/history","d":"显示或操作历史列表。"},"host":{"n":"host","p":"/host","d":"常用的分析域名查询工具"},"hostid":{"n":"hostid","p":"/hostid","d":"显示当前主机的十六进制数字标识。"},"hostname":{"n":"hostname","p":"/hostname","d":"显示和设置系统的主机名"},"hostnamectl":{"n":"hostnamectl","p":"/hostnamectl","d":"查询或更改系统主机名"},"hping3":{"n":"hping3","p":"/hping3","d":"测试网络及主机的安全"},"htdigest":{"n":"htdigest","p":"/htdigest","d":"Apache服务器内置工具"},"htop":{"n":"htop","p":"/htop","d":"[非内部命令]一个互动的进程查看器,可以动态观察系统进程状况"},"htpasswd":{"n":"htpasswd","p":"/htpasswd","d":"apache服务器创建密码认证文件"},"hwclock":{"n":"hwclock","p":"/hwclock","d":"显示与设定硬件时钟"},"iconv":{"n":"iconv","p":"/iconv","d":"转换文件的编码方式"},"id":{"n":"id","p":"/id","d":"打印真实以及有效的用户和所在组的信息"},"ifcfg":{"n":"ifcfg","p":"/ifcfg","d":"置Linux中的网络接口参数"},"ifconfig":{"n":"ifconfig","p":"/ifconfig","d":"配置和显示Linux系统网卡的网络参数"},"ifdown":{"n":"ifdown","p":"/ifdown","d":"禁用指定的网络接口"},"ifstat":{"n":"ifstat","p":"/ifstat","d":"统计网络接口流量状态"},"iftop":{"n":"iftop","p":"/iftop","d":"一款实时流量监控工具"},"ifup":{"n":"ifup","p":"/ifup","d":"激活指定的网络接口"},"indent":{"n":"indent","p":"/indent","d":"格式化C语言的源文件"},"info":{"n":"info","p":"/info","d":"Linux下info格式的帮助指令"},"init":{"n":"init","p":"/init","d":"init进程是所有Linux进程的父进程"},"inotifywait":{"n":"inotifywait","p":"/inotifywait","d":"异步文件系统监控机制"},"insmod":{"n":"insmod","p":"/insmod","d":"将给定的模块加载到内核中"},"install":{"n":"install","p":"/install","d":"安装或升级软件或备份数据"},"iostat":{"n":"iostat","p":"/iostat","d":"iostat命令被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。iowait 指在一个采样周期内有百分之几的时间是属于以下情况:CPU处于空闲状态并且至少有一个未完成的磁盘IO请求。"},"iotop":{"n":"iotop","p":"/iotop","d":"用来监视磁盘I/O使用状况的工具"},"ip":{"n":"ip","p":"/ip","d":"网络配置工具"},"ip6tables-restore":{"n":"ip6tables-restore","p":"/ip6tables-restore","d":"还原ip6tables表"},"ip6tables-save":{"n":"ip6tables-save","p":"/ip6tables-save","d":"保存ip6tables表配置"},"ip6tables":{"n":"ip6tables","p":"/ip6tables","d":"linux中防火墙软件"},"ipcalc":{"n":"ipcalc","p":"/ipcalc","d":"简单的IP地址计算器"},"ipcrm":{"n":"ipcrm","p":"/ipcrm","d":"删除消息队列、信号集、或者共享内存标识"},"ipcs":{"n":"ipcs","p":"/ipcs","d":"分析消息队列共享内存和信号量"},"iperf":{"n":"iperf","p":"/iperf","d":"网络性能测试工具"},"iptables-restore":{"n":"iptables-restore","p":"/iptables-restore","d":"还原iptables表的配置"},"iptables-save":{"n":"iptables-save","p":"/iptables-save","d":"备份iptables的表配置"},"iptables":{"n":"iptables","p":"/iptables","d":"Linux上常用的防火墙软件"},"iptraf":{"n":"iptraf","p":"/iptraf","d":"实时地监视网卡流量"},"iptstate":{"n":"iptstate","p":"/iptstate","d":"显示iptables的工作状态"},"iscsiadm":{"n":"iscsiadm","p":"/iscsiadm","d":"管理iSCSI连接"},"ispell":{"n":"ispell","p":"/ispell","d":"检查文件中出现的拼写错误"},"jed":{"n":"jed","p":"/jed","d":"主要用于编辑代码的编辑器"},"jobs":{"n":"jobs","p":"/jobs","d":"显示作业的状态。"},"joe":{"n":"joe","p":"/joe","d":"强大的纯文本编辑器"},"join":{"n":"join","p":"/join","d":"两个文件中指定栏位内容相同的行连接起来"},"journalctl":{"n":"journalctl","p":"/journalctl","d":"检索 systemd 日志,是 CentOS 7 才有的工具。"},"jq":{"n":"jq","p":"/jq","d":"一个灵活的轻量级命令行JSON处理器"},"jwhois":{"n":"jwhois","p":"/jwhois","d":"whois 客户端服务"},"kernelversion":{"n":"kernelversion","p":"/kernelversion","d":"打印当前内核的主版本号"},"kexec":{"n":"kexec","p":"/kexec","d":"从当前正在运行的内核引导到一个新内核"},"kill":{"n":"kill","p":"/kill","d":"发送信号到进程。"},"killall":{"n":"killall","p":"/killall","d":"使用进程的名称来杀死一组进程"},"last":{"n":"last","p":"/last","d":"列出目前与过去登入系统的用户相关信息"},"lastb":{"n":"lastb","p":"/lastb","d":"列出登入系统失败的用户相关信息"},"lastlog":{"n":"lastlog","p":"/lastlog","d":"显示系统中所有用户最近一次登录信息"},"ld":{"n":"ld","p":"/ld","d":"将目标文件连接为可执行程序"},"ldconfig":{"n":"ldconfig","p":"/ldconfig","d":"动态链接库管理命令"},"ldd":{"n":"ldd","p":"/ldd","d":"打印程序或者库文件所依赖的共享库列表"},"less":{"n":"less","p":"/less","d":"分屏上下翻页浏览文件内容"},"let":{"n":"let","p":"/let","d":"简单的计算器,执行算术表达式。"},"lftp":{"n":"lftp","p":"/lftp","d":"优秀的文件客户端程序"},"lftpget":{"n":"lftpget","p":"/lftpget","d":"调用lftp指令下载指定的文件"},"lha":{"n":"lha","p":"/lha","d":"压缩或解压缩lzh格式文件"},"lilo":{"n":"lilo","p":"/lilo","d":"安装核心载入开机管理程序"},"ln":{"n":"ln","p":"/ln","d":"用来为文件创建链接"},"lnstat":{"n":"lnstat","p":"/lnstat","d":"显示Linux系统的网路状态"},"local":{"n":"local","p":"/local","d":"在函数内定义局部变量。"},"locate":{"n":"locate","p":"/locate","d":"比 find 好用的文件查找工具"},"logger":{"n":"logger","p":"/logger","d":"在系统日志中记录相应条目"},"login":{"n":"login","p":"/login","d":"登录系统或切换用户身份"},"logname":{"n":"logname","p":"/logname","d":"打印当前终端登录用户的名称。"},"logout":{"n":"logout","p":"/logout","d":"退出当前登录的Shell"},"logrotate":{"n":"logrotate","p":"/logrotate","d":"系统日志进行轮转、压缩和删除"},"logsave":{"n":"logsave","p":"/logsave","d":"将命令的输出信息保存到指定的日志文件"},"logwatch":{"n":"logwatch","p":"/logwatch","d":"可定制和可插入式的日志监视系统"},"look":{"n":"look","p":"/look","d":"显示文件中以指定字符串开头的任意行"},"losetup":{"n":"losetup","p":"/losetup","d":"设定与控制循环(loop)设备"},"lp":{"n":"lp","p":"/lp","d":"打印文件或修改排队的打印任务"},"lpadmin":{"n":"lpadmin","p":"/lpadmin","d":"配置CUPS套件中的打印机和类"},"lpc":{"n":"lpc","p":"/lpc","d":"命令行方式打印机控制程序"},"lpq":{"n":"lpq","p":"/lpq","d":"显示打印队列中的打印任务的状态信息"},"lpr":{"n":"lpr","p":"/lpr","d":"将文件发送给指定打印机进行打印"},"lprm":{"n":"lprm","p":"/lprm","d":"删除打印队列中的打印任务"},"lpstat":{"n":"lpstat","p":"/lpstat","d":"显示CUPS中打印机的状态信息"},"ls":{"n":"ls","p":"/ls","d":"显示目录内容列表"},"lsattr":{"n":"lsattr","p":"/lsattr","d":"查看文件的第二扩展文件系统属性"},"lsb_release":{"n":"lsb_release","p":"/lsb_release","d":"显示发行版本信息"},"lsblk":{"n":"lsblk","p":"/lsblk","d":"列出块设备信息"},"lscpu":{"n":"lscpu","p":"/lscpu","d":"显示有关CPU架构的信息"},"lsmod":{"n":"lsmod","p":"/lsmod","d":"显示已载入系统的模块"},"lsof":{"n":"lsof","p":"/lsof","d":"显示Linux系统当前已打开的所有文件列表 `lsof -p pid`"},"lspci":{"n":"lspci","p":"/lspci","d":"显示当前主机的所有PCI总线信息"},"lsusb":{"n":"lsusb","p":"/lsusb","d":"显示本机的USB设备列表信息"},"ltrace":{"n":"ltrace","p":"/ltrace","d":"用来跟踪进程调用库函数的情况"},"lvcreate":{"n":"lvcreate","p":"/lvcreate","d":"用于创建LVM的逻辑卷"},"lvdisplay":{"n":"lvdisplay","p":"/lvdisplay","d":"显示逻辑卷属性"},"lvextend":{"n":"lvextend","p":"/lvextend","d":"扩展逻辑卷空间"},"lvreduce":{"n":"lvreduce","p":"/lvreduce","d":"收缩逻辑卷空间"},"lvremove":{"n":"lvremove","p":"/lvremove","d":"删除指定LVM逻辑卷"},"lvresize":{"n":"lvresize","p":"/lvresize","d":"调整逻辑卷空间大小"},"lvscan":{"n":"lvscan","p":"/lvscan","d":"扫描逻辑卷"},"lynx":{"n":"lynx","p":"/lynx","d":"纯文本模式的网页浏览器"},"mail":{"n":"mail","p":"/mail","d":"命令行下发送和接收电子邮件"},"mailq":{"n":"mailq","p":"/mailq","d":"显示待发送的邮件队列"},"mailstat":{"n":"mailstat","p":"/mailstat","d":"显示到达的邮件状态"},"make":{"n":"make","p":"/make","d":"GNU的工程化编译工具"},"man":{"n":"man","p":"/man","d":"查看Linux中的指令帮助"},"mapfile":{"n":"mapfile","p":"/mapfile","d":"从标准输入读取行并赋值到数组。"},"md5sum":{"n":"md5sum","p":"/md5sum","d":"计算和校验文件报文摘要的工具程序"},"mesg":{"n":"mesg","p":"/mesg","d":"设置当前终端的写权限"},"mii-tool":{"n":"mii-tool","p":"/mii-tool","d":"配置网络设备协商方式的工具"},"mkbootdisk":{"n":"mkbootdisk","p":"/mkbootdisk","d":"可建立目前系统的启动盘"},"mkcert":{"n":"mkcert","p":"/mkcert","d":"用来生成自签证书的工具"},"mkdir":{"n":"mkdir","p":"/mkdir","d":"用来创建目录"},"mke2fs":{"n":"mke2fs","p":"/mke2fs","d":"创建磁盘分区上的“etc2/etc3”文件系统"},"mkfs":{"n":"mkfs","p":"/mkfs","d":"用于在设备上创建Linux文件系统"},"mkinitrd":{"n":"mkinitrd","p":"/mkinitrd","d":"建立要载入ramdisk的映像文件"},"mkisofs":{"n":"mkisofs","p":"/mkisofs","d":"建立ISO 9660映像文件"},"mknod":{"n":"mknod","p":"/mknod","d":"创建字符设备文件和块设备文件"},"mkswap":{"n":"mkswap","p":"/mkswap","d":"建立和设置SWAP交换分区"},"mktemp":{"n":"mktemp","p":"/mktemp","d":"创建临时文件供shell脚本使用"},"modetest":{"n":"modetest","p":"/modetest","d":"DRM/KMS驱动程序libdrm中的模式测试工具"},"modprobe":{"n":"modprobe","p":"/modprobe","d":"自动处理可载入模块"},"more":{"n":"more","p":"/more","d":"显示文件内容,每次显示一屏"},"mount":{"n":"mount","p":"/mount","d":"用于挂载Linux系统外的文件"},"mpstat":{"n":"mpstat","p":"/mpstat","d":"显示各个可用CPU的状态"},"mtools":{"n":"mtools","p":"/mtools","d":"显示mtools支持的指令"},"mtr":{"n":"mtr","p":"/mtr","d":"`mtr` 结合了 `traceroute` 和 `ping` 程序的功能,是一款简单的网络诊断工具"},"mv":{"n":"mv","p":"/mv","d":"用来对文件或目录重新命名"},"mysql":{"n":"mysql","p":"/mysql","d":"MySQL服务器客户端工具"},"mysqladmin":{"n":"mysqladmin","p":"/mysqladmin","d":"MySQL服务器管理客户端"},"mysqldump":{"n":"mysqldump","p":"/mysqldump","d":"MySQL数据库中备份工具"},"mysqlimport":{"n":"mysqlimport","p":"/mysqlimport","d":"为MySQL服务器用命令行方式导入数据"},"mysqlshow":{"n":"mysqlshow","p":"/mysqlshow","d":"显示MySQL中数据库相关信息"},"named-checkzone":{"n":"named-checkzone","p":"/named-checkzone","d":"使用named-checkzone命令可以进行区域文件有效性检查和转换,必须指定区域名称和区域文件名称"},"nano":{"n":"nano","p":"/nano","d":"字符终端文本编辑器"},"nc":{"n":"nc","p":"/nc","d":"nc是网络工具中的瑞士军刀"},"ncftp":{"n":"ncftp","p":"/ncftp","d":"是增强的的FTP工具"},"neofetch":{"n":"neofetch","p":"/neofetch","d":"显示带有发行徽标的系统信息的工具"},"nethogs":{"n":"nethogs","p":"/nethogs","d":"终端下的网络流量监控工具"},"netstat":{"n":"netstat","p":"/netstat","d":"查看Linux中网络系统状态信息"},"newusers":{"n":"newusers","p":"/newusers","d":"用于批处理的方式一次创建多个命令"},"nfsstat":{"n":"nfsstat","p":"/nfsstat","d":"列出NFS客户端和服务器的工作状态"},"ngrep":{"n":"ngrep","p":"/ngrep","d":"方便的数据包匹配和显示工具"},"nice":{"n":"nice","p":"/nice","d":"调整程序执行的优先权等级"},"nisdomainname":{"n":"nisdomainname","p":"/nisdomainname","d":"显示主机NIS的域名"},"nl":{"n":"nl","p":"/nl","d":"为每一个文件添加行号。"},"nm":{"n":"nm","p":"/nm","d":"显示二进制目标文件的符号表"},"nmap":{"n":"nmap","p":"/nmap","d":"网络探测和安全审核"},"nmcli":{"n":"nmcli","p":"/nmcli","d":"地址配置工具"},"nohup":{"n":"nohup","p":"/nohup","d":"将程序以忽略挂起信号的方式运行起来"},"nologin":{"n":"nologin","p":"/nologin","d":"拒绝用户登录系统"},"nproc":{"n":"nproc","p":"/nproc","d":"打印可用的处理器单元数量。"},"nslookup":{"n":"nslookup","p":"/nslookup","d":"查询域名DNS信息的工具"},"ntpdate":{"n":"ntpdate","p":"/ntpdate","d":"使用网络计时协议(NTP)设置日期和时间"},"ntsysv":{"n":"ntsysv","p":"/ntsysv","d":"集中管理系统的各种服务"},"objdump":{"n":"objdump","p":"/objdump","d":"显示二进制文件信息"},"od":{"n":"od","p":"/od","d":"输出文件的八进制、十六进制等格式编码的字节"},"openssl":{"n":"openssl","p":"/openssl","d":"强大的安全套接字层密码库"},"pacman":{"n":"pacman","p":"/pacman","d":"Arch Linux 系统及其衍生系统中默认使用的包管理器"},"parted":{"n":"parted","p":"/parted","d":"磁盘分区和分区大小调整工具"},"partprobe":{"n":"partprobe","p":"/partprobe","d":"不重启的情况下重读分区"},"passwd":{"n":"passwd","p":"/passwd","d":"用于让用户可以更改自己的密码"},"paste":{"n":"paste","p":"/paste","d":"将多个文件按列队列合并"},"patch":{"n":"patch","p":"/patch","d":"为开放源代码软件安装补丁程序"},"pathchk":{"n":"pathchk","p":"/pathchk","d":"检查文件中不可移植的部分"},"perl":{"n":"perl","p":"/perl","d":"perl语言解释器"},"pfctl":{"n":"pfctl","p":"/pfctl","d":"PF防火墙的配置命令"},"pgrep":{"n":"pgrep","p":"/pgrep","d":"根据用户给出的信息在当前运行进程中查找并列出符合条件的进程ID(PID)"},"php":{"n":"php","p":"/php","d":"PHP语言的命令行接口"},"pico":{"n":"pico","p":"/pico","d":"功能强大全屏幕的文本编辑器"},"pidof":{"n":"pidof","p":"/pidof","d":"查找指定名称的进程的进程号ID号"},"pidstat":{"n":"pidstat","p":"/pidstat","d":"监控进程的系统资源占用情况"},"pigz":{"n":"pigz","p":"/pigz","d":"可以用来解压缩文件,gzip的并行实现升级版"},"ping":{"n":"ping","p":"/ping","d":"测试主机之间网络的连通性(ipv4)"},"ping6":{"n":"ping6","p":"/ping6","d":"测试主机之间网络的连通性(ipv6)"},"pip":{"n":"pip","p":"/pip","d":"Python 编程语言中的包管理器,用于安装和管理第三方 Python 模块"},"pkexec":{"n":"pkexec","p":"/pkexec","d":"以其他用户身份执行命令"},"pkill":{"n":"pkill","p":"/pkill","d":"可以按照进程名杀死进程"},"pmap":{"n":"pmap","p":"/pmap","d":"报告进程的内存映射关系"},"popd":{"n":"popd","p":"/popd","d":"从目录堆栈中删除目录。"},"poweroff":{"n":"poweroff","p":"/poweroff","d":"关闭Linux系统,关闭记录会被写入到/var/log/wtmp日志文件中"},"ppp-off":{"n":"ppp-off","p":"/ppp-off","d":"关闭ppp连线"},"pr":{"n":"pr","p":"/pr","d":"将文本文件转换成适合打印的格式"},"printf":{"n":"printf","p":"/printf","d":"格式化并输出结果。"},"protoize":{"n":"protoize","p":"/protoize","d":"GNU-C代码转换为ANSI-C代码"},"prtstat":{"n":"prtstat","p":"/prtstat","d":"显示进程信息"},"ps":{"n":"ps","p":"/ps","d":"报告当前系统的进程状态"},"pssh":{"n":"pssh","p":"/pssh","d":"批量管理执行"},"pstack":{"n":"pstack","p":"/pstack","d":"显示每个进程的栈跟踪"},"pstree":{"n":"pstree","p":"/pstree","d":"以树状图的方式展现进程之间的派生关系"},"pushd":{"n":"pushd","p":"/pushd","d":"将目录添加到目录堆栈顶部。"},"pv":{"n":"pv","p":"/pv","d":"显示当前在命令行执行的命令的进度信息,管道查看器"},"pvchange":{"n":"pvchange","p":"/pvchange","d":"修改物理卷属性"},"pvck":{"n":"pvck","p":"/pvck","d":"检测物理卷的LVM元数据的一致性"},"pvcreate":{"n":"pvcreate","p":"/pvcreate","d":"将物理硬盘分区初始化为物理卷"},"pvdisplay":{"n":"pvdisplay","p":"/pvdisplay","d":"显示物理卷的属性"},"pvremove":{"n":"pvremove","p":"/pvremove","d":"删除一个存在的物理卷"},"pvs":{"n":"pvs","p":"/pvs","d":"输出物理卷信息报表"},"pvscan":{"n":"pvscan","p":"/pvscan","d":"扫描系统中所有硬盘的物理卷列表"},"pwck":{"n":"pwck","p":"/pwck","d":"用来验证系统认证文件内容和格式的完整性"},"pwconv":{"n":"pwconv","p":"/pwconv","d":"用来开启用户的投影密码"},"pwd":{"n":"pwd","p":"/pwd","d":"显示当前工作目录的绝对路径。"},"pwdx":{"n":"pwdx","p":"/pwdx","d":"用于显示指定进程的当前工作目录"},"pwunconv":{"n":"pwunconv","p":"/pwunconv","d":"用来关闭用户的投影密码"},"quota":{"n":"quota","p":"/quota","d":"显示磁盘已使用的空间与限制"},"quotacheck":{"n":"quotacheck","p":"/quotacheck","d":"检查磁盘的使用空间与限制"},"quotaoff":{"n":"quotaoff","p":"/quotaoff","d":"关闭Linux内核中指定文件系统的磁盘配额功能"},"quotaon":{"n":"quotaon","p":"/quotaon","d":"激活Linux内核中指定文件系统的磁盘配额功能"},"rcconf":{"n":"rcconf","p":"/rcconf","d":"Debian Linux下的运行等级服务配置工具"},"rcp":{"n":"rcp","p":"/rcp","d":"使在两台Linux主机之间的文件复制操作更简单"},"read":{"n":"read","p":"/read","d":"从键盘读取变量值"},"readelf":{"n":"readelf","p":"/readelf","d":"用于显示elf格式文件的信息"},"readonly":{"n":"readonly","p":"/readonly","d":"标记shell变量或函数为只读"},"reboot":{"n":"reboot","p":"/reboot","d":"重新启动正在运行的Linux操作系统"},"reject":{"n":"reject","p":"/reject","d":"指示打印系统拒绝发往指定目标打印机的打印任务"},"rename":{"n":"rename","p":"/rename","d":"用字符串替换的方式批量改变文件名"},"renice":{"n":"renice","p":"/renice","d":"修改正在运行的进程的调度优先级"},"reposync":{"n":"reposync","p":"/reposync","d":"同步yum存储库到本地目录"},"repquota":{"n":"repquota","p":"/repquota","d":"报表的格式输出磁盘空间限制的状态"},"resize":{"n":"resize","p":"/resize","d":"命令设置终端机视窗的大小"},"restore":{"n":"restore","p":"/restore","d":"所进行的操作和dump指令相反"},"restorecon":{"n":"restorecon","p":"/restorecon","d":"恢复文件的安全上下文"},"return":{"n":"return","p":"/return","d":"从函数中退出并返回数值。"},"rev":{"n":"rev","p":"/rev","d":"将文件内容以字符为单位反序输出"},"rexec":{"n":"rexec","p":"/rexec","d":"远程执行Linux系统下命令"},"rlogin":{"n":"rlogin","p":"/rlogin","d":"从当前终端登录到远程Linux主机"},"rm":{"n":"rm","p":"/rm","d":"用于删除给定的文件和目录"},"rmdir":{"n":"rmdir","p":"/rmdir","d":"用来删除空目录"},"rmmod":{"n":"rmmod","p":"/rmmod","d":"从运行的内核中移除指定的内核模块"},"route":{"n":"route","p":"/route","d":"显示并设置Linux中静态路由表"},"rpm":{"n":"rpm","p":"/rpm","d":"RPM软件包的管理工具"},"rpm2cpio":{"n":"rpm2cpio","p":"/rpm2cpio","d":"将RPM软件包转换为cpio格式的文件"},"rpmbuild":{"n":"rpmbuild","p":"/rpmbuild","d":"创建RPM的二进制软件包和源码软件包"},"rpmdb":{"n":"rpmdb","p":"/rpmdb","d":"初始化和重建RPM数据库"},"rpmquery":{"n":"rpmquery","p":"/rpmquery","d":"从RPM数据库中查询软件包信息"},"rpmsign":{"n":"rpmsign","p":"/rpmsign","d":"使用RPM软件包的签名管理工具"},"rpmverify":{"n":"rpmverify","p":"/rpmverify","d":"验证已安装的RPM软件包的正确性"},"rsh":{"n":"rsh","p":"/rsh","d":"连接远程主机并执行命令"},"rsync":{"n":"rsync","p":"/rsync","d":"远程数据同步工具"},"runlevel":{"n":"runlevel","p":"/runlevel","d":"打印当前Linux系统的运行等级"},"sar":{"n":"sar","p":"/sar","d":"系统运行状态统计工具"},"scp":{"n":"scp","p":"/scp","d":"加密的方式在本地主机和远程主机之间复制文件"},"screen":{"n":"screen","p":"/screen","d":"用于命令行终端切换"},"script":{"n":"script","p":"/script","d":"记录终端会话的所有操作"},"scriptreplay":{"n":"scriptreplay","p":"/scriptreplay","d":"重新播放终端会话的所有操作"},"sed":{"n":"sed","p":"/sed","d":"功能强大的流式文本编辑器"},"seinfo":{"n":"seinfo","p":"/seinfo","d":"查询SELinux的策略提供多少相关规则"},"semanage":{"n":"semanage","p":"/semanage","d":"默认目录的安全上下文查询与修改"},"sendmail":{"n":"sendmail","p":"/sendmail","d":"著名电子邮件服务器"},"seq":{"n":"seq","p":"/seq","d":"以指定增量从首数开始打印数字到尾数"},"service":{"n":"service","p":"/service","d":"控制系统服务的实用工具"},"sesearch":{"n":"sesearch","p":"/sesearch","d":"查询SELinux策略的规则详情"},"set":{"n":"set","p":"/set","d":"显示或设置shell特性及shell变量"},"setfacl":{"n":"setfacl","p":"/setfacl","d":"设置文件访问控制列表"},"setpci":{"n":"setpci","p":"/setpci","d":"查询和配置PCI设备的使用工具"},"setsebool":{"n":"setsebool","p":"/setsebool","d":"修改SElinux策略内各项规则的布尔值"},"setsid":{"n":"setsid","p":"/setsid","d":"在新的会话中运行程序"},"sftp-server":{"n":"sftp-server","p":"/sftp-server","d":"sftp协议的服务器端程序"},"sftp":{"n":"sftp","p":"/sftp","d":"交互式的文件传输程序"},"sh":{"n":"sh","p":"/sh","d":"shell命令解释器"},"sha256sum":{"n":"sha256sum","p":"/sha256sum","d":"用于计算文件的 SHA-256 哈希值"},"shift":{"n":"shift","p":"/shift","d":"移动位置参数。"},"shopt":{"n":"shopt","p":"/shopt","d":"显示和设置shell操作选项"},"showmount":{"n":"showmount","p":"/showmount","d":"显示NFS服务器加载的信息"},"shuf":{"n":"shuf","p":"/shuf","d":"产生随机的排列。"},"shutdown":{"n":"shutdown","p":"/shutdown","d":"用来执行系统关机的命令"},"skill":{"n":"skill","p":"/skill","d":"向选定的进程发送信号冻结进程"},"slabtop":{"n":"slabtop","p":"/slabtop","d":"实时显示内核slab内存缓存信息"},"sleep":{"n":"sleep","p":"/sleep","d":"将目前动作延迟一段时间"},"slocate":{"n":"slocate","p":"/slocate","d":"命令查找文件或目录"},"smartmontools":{"n":"smartmontools","p":"/smartmontools","d":"Smartmontools 是一种硬盘检测工具,通过控制和管理硬盘的SMART(Self Monitoring Analysis and Reporting Technology,自动检测分析及报告技术)技术来实现的"},"smbclient":{"n":"smbclient","p":"/smbclient","d":"交互方式访问samba服务器"},"smbpasswd":{"n":"smbpasswd","p":"/smbpasswd","d":"samba用户和密码管理工具"},"sort":{"n":"sort","p":"/sort","d":"对文本文件中所有行进行排序。"},"source":{"n":"source","p":"/source","d":"在当前Shell环境中从指定文件读取和执行命令。"},"speedtest-cli":{"n":"speedtest-cli","p":"/speedtest-cli","d":"命令行下测试服务器外网速度"},"spell":{"n":"spell","p":"/spell","d":"对文件进行拼写检查"},"split":{"n":"split","p":"/split","d":"分割任意大小的文件"},"squid":{"n":"squid","p":"/squid","d":"squid服务器守护进程"},"squidclient":{"n":"squidclient","p":"/squidclient","d":"squid服务器的客户端管理工具"},"ss":{"n":"ss","p":"/ss","d":"比 netstat 好用的socket统计信息,iproute2 包附带的另一个工具,允许你查询 socket 的有关统计信息"},"ssh-add":{"n":"ssh-add","p":"/ssh-add","d":"把专用密钥添加到ssh-agent的高速缓存中"},"ssh-agent":{"n":"ssh-agent","p":"/ssh-agent","d":"ssh密钥管理器"},"ssh-copy-id":{"n":"ssh-copy-id","p":"/ssh-copy-id","d":"把本地的ssh公钥文件安装到远程主机对应的账户下"},"ssh-keygen":{"n":"ssh-keygen","p":"/ssh-keygen","d":"为ssh生成、管理和转换认证密钥"},"ssh-keyscan":{"n":"ssh-keyscan","p":"/ssh-keyscan","d":"收集主机公钥的使用工具"},"ssh":{"n":"ssh","p":"/ssh","d":"openssh套件中的客户端连接工具"},"sshd":{"n":"sshd","p":"/sshd","d":"openssh软件套件中的服务器守护进程"},"sshpass":{"n":"sshpass","p":"/sshpass","d":"免交互 SSH 登录工具。"},"startx":{"n":"startx","p":"/startx","d":"用来启动X Window"},"stat":{"n":"stat","p":"/stat","d":"用于显示文件的状态信息"},"strace":{"n":"strace","p":"/strace","d":"跟踪系统调用和信号"},"strings":{"n":"strings","p":"/strings","d":"在对象文件或二进制文件中查找可打印的字符串"},"stty":{"n":"stty","p":"/stty","d":"修改终端命令行的相关设置"},"su":{"n":"su","p":"/su","d":"用于切换当前用户身份到其他用户身份"},"sudo":{"n":"sudo","p":"/sudo","d":"以其他身份来执行命令"},"sum":{"n":"sum","p":"/sum","d":"计算文件的校验码和显示块数"},"supervisord":{"n":"supervisord","p":"/supervisord","d":"配置后台服务/常驻进程的进程管家工具"},"suspend":{"n":"suspend","p":"/suspend","d":"挂起shell的执行。"},"swapoff":{"n":"swapoff","p":"/swapoff","d":"关闭指定的交换空间"},"swapon":{"n":"swapon","p":"/swapon","d":"激活Linux系统中交换空间"},"sync":{"n":"sync","p":"/sync","d":"用于强制被改变的内容立刻写入磁盘"},"sysctl":{"n":"sysctl","p":"/sysctl","d":"时动态地修改内核的运行参数"},"syslog":{"n":"syslog","p":"/syslog","d":"系统默认的日志守护进程"},"systemctl":{"n":"systemctl","p":"/systemctl","d":"系统服务管理器指令"},"systool":{"n":"systool","p":"/systool","d":"显示基于总线、类和拓扑显示系统中设备的信息"},"tac":{"n":"tac","p":"/tac","d":"连接多个文件并以行为单位反向打印到标准输出。"},"tail":{"n":"tail","p":"/tail","d":"在屏幕上显示指定文件的末尾若干行"},"tailf":{"n":"tailf","p":"/tailf","d":"在屏幕上显示指定文件的末尾若干行内容,通常用于日志文件的跟踪输出"},"talk":{"n":"talk","p":"/talk","d":"让用户和其他用户聊天"},"tar":{"n":"tar","p":"/tar","d":"将许多文件一起保存至一个单独的磁带或磁盘归档,并能从归档中单独还原所需文件。"},"tcpdump":{"n":"tcpdump","p":"/tcpdump","d":"一款sniffer工具,是Linux上的抓包工具,嗅探器"},"tcpreplay":{"n":"tcpreplay","p":"/tcpreplay","d":"将保存在 PCAP 文件包重新发送,用于性能或者功能测试"},"tee":{"n":"tee","p":"/tee","d":"从标准输入读取数据并重定向到标准输出和文件。"},"telinit":{"n":"telinit","p":"/telinit","d":"切换当前正在运行系统的运行等级"},"telnet":{"n":"telnet","p":"/telnet","d":"登录远程主机和管理(测试ip端口是否连通)"},"tempfile":{"n":"tempfile","p":"/tempfile","d":"shell中给临时文件命名"},"test":{"n":"test","p":"/test","d":"执行条件表达式。"},"tftp":{"n":"tftp","p":"/tftp","d":"在本机和tftp服务器之间使用TFTP协议传输文件"},"time":{"n":"time","p":"/time","d":"统计给定命令所花费的总时间"},"timedatectl":{"n":"timedatectl","p":"/timedatectl","d":"用于在 Linux 中设置或查询系统时间、日期和时区等配置。"},"times":{"n":"times","p":"/times","d":"显示进程累计时间。"},"tload":{"n":"tload","p":"/tload","d":"显示系统负载状况"},"tmux":{"n":"tmux","p":"/tmux","d":"Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权"},"top":{"n":"top","p":"/top","d":"显示或管理执行中的程序"},"touch":{"n":"touch","p":"/touch","d":"创建新的空文件"},"tput":{"n":"tput","p":"/tput","d":"通过terminfo数据库对终端会话进行初始化和操作"},"tr":{"n":"tr","p":"/tr","d":"将字符进行替换压缩和删除"},"tracepath":{"n":"tracepath","p":"/tracepath","d":"追踪目的主机经过的路由信息"},"traceroute":{"n":"traceroute","p":"/traceroute","d":"显示数据包到主机间的路径"},"trap":{"n":"trap","p":"/trap","d":"捕捉信号和其他事件并执行命令。"},"tree":{"n":"tree","p":"/tree","d":"树状图列出目录的内容"},"true":{"n":"true","p":"/true","d":"返回状态为成功。"},"tty":{"n":"tty","p":"/tty","d":"显示连接到当前标准输入的终端设备文件名"},"type":{"n":"type","p":"/type","d":"显示指定命令的类型。"},"ulimit":{"n":"ulimit","p":"/ulimit","d":"控制shell程序的资源"},"umask":{"n":"umask","p":"/umask","d":"显示或设置创建文件的权限掩码。"},"umount":{"n":"umount","p":"/umount","d":"用于卸载已经加载的文件系统"},"unalias":{"n":"unalias","p":"/unalias","d":"删除由alias设置的别名"},"uname":{"n":"uname","p":"/uname","d":"打印系统信息。"},"unarj":{"n":"unarj","p":"/unarj","d":"解压缩由arj命令创建的压缩包"},"uncompress":{"n":"uncompress","p":"/uncompress","d":"用来解压.Z文件"},"unexpand":{"n":"unexpand","p":"/unexpand","d":"将文件的空白字符转换为制表符"},"uniq":{"n":"uniq","p":"/uniq","d":"显示或忽略重复的行。"},"unlink":{"n":"unlink","p":"/unlink","d":"系统调用函数unlink去删除指定的文件"},"unprotoize":{"n":"unprotoize","p":"/unprotoize","d":"删除C语言源代码文件中的函数原型"},"unrar":{"n":"unrar","p":"/unrar","d":"解压rar文件命令,从 rar 压缩包中提取文件"},"unset":{"n":"unset","p":"/unset","d":"删除指定的shell变量或函数。"},"unzip":{"n":"unzip","p":"/unzip","d":"用于解压缩由zip命令压缩的压缩包"},"updatedb":{"n":"updatedb","p":"/updatedb","d":"创建或更新slocate命令所必需的数据库文件"},"uptime":{"n":"uptime","p":"/uptime","d":"查看Linux系统负载信息"},"useradd":{"n":"useradd","p":"/useradd","d":"创建的新的系统用户"},"userdel":{"n":"userdel","p":"/userdel","d":"用于删除给定的用户以及与用户相关的文件"},"usermod":{"n":"usermod","p":"/usermod","d":"用于修改用户的基本信息"},"usernetctl":{"n":"usernetctl","p":"/usernetctl","d":"被允许时操作指定的网络接口"},"users":{"n":"users","p":"/users","d":"打印当前主机所有登陆用户的名称。"},"uucico":{"n":"uucico","p":"/uucico","d":"UUCP文件传输服务程序"},"uupick":{"n":"uupick","p":"/uupick","d":"命令处理传送进来的文件"},"uuto":{"n":"uuto","p":"/uuto","d":"将文件传送到远端的UUCP主机"},"vdfuse":{"n":"vdfuse","p":"/vdfuse","d":"VirtualBox软件挂载VDI分区文件工具"},"vgchange":{"n":"vgchange","p":"/vgchange","d":"修改卷组属性"},"vgconvert":{"n":"vgconvert","p":"/vgconvert","d":"转换卷组元数据格式"},"vgcreate":{"n":"vgcreate","p":"/vgcreate","d":"用于创建LVM卷组"},"vgdisplay":{"n":"vgdisplay","p":"/vgdisplay","d":"显示LVM卷组的信息"},"vgextend":{"n":"vgextend","p":"/vgextend","d":"向卷组中添加物理卷"},"vgreduce":{"n":"vgreduce","p":"/vgreduce","d":"从卷组中删除物理卷"},"vgremove":{"n":"vgremove","p":"/vgremove","d":"用于用户删除LVM卷组"},"vgrename":{"n":"vgrename","p":"/vgrename","d":"使用vgrename命令可以重命名卷组的名称"},"vgscan":{"n":"vgscan","p":"/vgscan","d":"扫描并显示系统中的卷组"},"vi":{"n":"vi","p":"/vi","d":"功能强大的纯文本编辑器"},"vmstat":{"n":"vmstat","p":"/vmstat","d":"显示虚拟内存状态"},"volname":{"n":"volname","p":"/volname","d":"显示指定的ISO-9660格式的设备的卷名称"},"w":{"n":"w","p":"/w","d":"显示目前登入系统的用户信息"},"wait":{"n":"wait","p":"/wait","d":"等待进程执行完后返回"},"wall":{"n":"wall","p":"/wall","d":"向系统当前所有打开的终端上输出信息"},"watch":{"n":"watch","p":"/watch","d":"可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令"},"wc":{"n":"wc","p":"/wc","d":"统计文件的字节数、字数、行数"},"wget":{"n":"wget","p":"/wget","d":"Linux系统下载文件工具"},"whatis":{"n":"whatis","p":"/whatis","d":"查询一个命令执行什么功能"},"whereis":{"n":"whereis","p":"/whereis","d":"查找二进制程序、代码等相关文件路径"},"which":{"n":"which","p":"/which","d":"查找并显示给定命令的绝对路径"},"who":{"n":"who","p":"/who","d":"显示当前所有登陆用户的信息。"},"whoami":{"n":"whoami","p":"/whoami","d":"打印当前有效的用户ID对应的名称"},"write":{"n":"write","p":"/write","d":"向指定登录用户终端上发送信息"},"xargs":{"n":"xargs","p":"/xargs","d":"给其他命令传递参数的一个过滤器"},"xauth":{"n":"xauth","p":"/xauth","d":"显示和编辑被用于连接X服务器的认证信息"},"xclip":{"n":"xclip","p":"/xclip","d":"管理 X 粘贴板"},"xhost":{"n":"xhost","p":"/xhost","d":"制哪些X客户端能够在X服务器上显示"},"xinit":{"n":"xinit","p":"/xinit","d":"是Linux下X-Window系统的初始化程序"},"xlsatoms":{"n":"xlsatoms","p":"/xlsatoms","d":"列出X服务器内部所有定义的原子成分"},"xlsclients":{"n":"xlsclients","p":"/xlsclients","d":"列出显示器中的客户端应用程序"},"xlsfonts":{"n":"xlsfonts","p":"/xlsfonts","d":"列出X Server使用的字体"},"xrandr":{"n":"xrandr","p":"/xrandr","d":"X 窗口系统配置管理工具"},"xset":{"n":"xset","p":"/xset","d":"设置X-Window系统中的用户爱好的实用工具"},"xz":{"n":"xz","p":"/xz","d":"POSIX 平台开发具有高压缩率的工具"},"yes":{"n":"yes","p":"/yes","d":"重复打印指定字符串"},"ypdomainname":{"n":"ypdomainname","p":"/ypdomainname","d":"显示主机的NIS的域名"},"yum":{"n":"yum","p":"/yum","d":"基于RPM的软件包管理器"},"zcat":{"n":"zcat","p":"/zcat","d":"显示压缩包中文件的内容"},"zfore":{"n":"zfore","p":"/zfore","d":"强制为gzip格式的压缩文件添加.gz后缀"},"zip":{"n":"zip","p":"/zip","d":"可以用来解压缩文件"},"zipinfo":{"n":"zipinfo","p":"/zipinfo","d":"用来列出压缩文件信息"},"zipsplit":{"n":"zipsplit","p":"/zipsplit","d":"将较大的zip压缩包分割成各个较小的压缩包"},"znew":{"n":"znew","p":"/znew","d":"将.Z压缩包重新转化为gzip命令压缩的.gz压缩包"}} \ No newline at end of file From 14ce75c9c8ca717e17628647bdc02679f3c051a3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 3 Sep 2024 05:35:50 +0000 Subject: [PATCH 1183/1284] doc: update README.md. --- README.md | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index e964f2474f5..0d517ea15ec 100644 --- a/README.md +++ b/README.md @@ -266,49 +266,49 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. L 圆头圆脑 clay-wangzhi -Glett 烟草的香味 -Jayin Tang +Glett 丛林意志 -Zijing Zhang +Jayin Tang Fubin Zhang __FresHmaN -dulltackle -ernest +Zijing Zhang 谈笑风生间 +ernest +dulltackle +zyy2477 rgshare loverainye +James Wang +Lnkstls lavaicer SteveLauC -Lnkstls -James Wang -Qliangw Wang Yujia alfred +Qliangw 沙漠之子 -zyy2477 Shell xhal VVatt gggwvg -BingCoke -Ein Verne -FunKeen -Pan, Wen-Ming -RichardLCD -Shan Chenyu -Xingwen Zhang -Xrtero -YEUNGCHIE Dazhuangw Alterem YH -jcdj666 -jqz3.tech -juemuren4449 -kassadin -kid1412621 +YEUNGCHIE +Xrtero +Xingwen Zhang +Shan Chenyu +RichardLCD +Pan, Wen-Ming +FunKeen +BingCoke +Ein Verne leo +kid1412621 +kassadin +juemuren4449 +jqz3.tech +jcdj666 lewis1573 linuxwd Ricardowang From 8555c10fb16118fa10cfaf4f3a483bb2e8b4bda4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 3 Sep 2024 05:35:51 +0000 Subject: [PATCH 1184/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 46 +++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index d6c1e7bb095..2eac794cb6d 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -11,49 +11,49 @@ L 圆头圆脑 clay-wangzhi -Glett 烟草的香味 -Jayin Tang +Glett 丛林意志 -Zijing Zhang +Jayin Tang Fubin Zhang __FresHmaN -dulltackle -ernest +Zijing Zhang 谈笑风生间 +ernest +dulltackle +zyy2477 rgshare loverainye +James Wang +Lnkstls lavaicer SteveLauC -Lnkstls -James Wang -Qliangw Wang Yujia alfred +Qliangw 沙漠之子 -zyy2477 Shell xhal VVatt gggwvg -BingCoke -Ein Verne -FunKeen -Pan, Wen-Ming -RichardLCD -Shan Chenyu -Xingwen Zhang -Xrtero -YEUNGCHIE Dazhuangw Alterem YH -jcdj666 -jqz3.tech -juemuren4449 -kassadin -kid1412621 +YEUNGCHIE +Xrtero +Xingwen Zhang +Shan Chenyu +RichardLCD +Pan, Wen-Ming +FunKeen +BingCoke +Ein Verne leo +kid1412621 +kassadin +juemuren4449 +jqz3.tech +jcdj666 lewis1573 linuxwd Ricardowang From 424972567368f0518da79aac5c449afe3e645ffe Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Tue, 3 Sep 2024 13:44:41 +0800 Subject: [PATCH 1185/1284] released v1.19.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c52d9644e3a..b4051540693 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "linux-command", - "version": "1.18.0", + "version": "1.19.0", "description": "Linux Command", "homepage": "https://jaywcjlove.github.io/linux-command/", "main": "dist/data.json", From 16c4a08fdee723e07ad6e9cb751a8198580e6b13 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Tue, 3 Sep 2024 15:21:42 +0800 Subject: [PATCH 1186/1284] fix(docset): resolve error during docset file generation. #601 --- scripts/dash.mjs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/dash.mjs b/scripts/dash.mjs index fc518caa074..fc62b40f9b5 100644 --- a/scripts/dash.mjs +++ b/scripts/dash.mjs @@ -118,7 +118,9 @@ async function build() { console.info('compressing tgz'); // https://github.com/node-modules/compressing/issues/42 建议最好休眠15s,等待其余资源复制完毕 - spawn("sleep", ['15']) + // 确保所有操作完成后再压缩 + await new Promise(resolve => setTimeout(resolve, 30000)); // 增加到 30 秒 + const outputPath = pathJoin(process.cwd(), '.deploy', 'linux-command.docset.tgz'); await tgz.compressDir(DOCSET_DIR, outputPath); } From 3c6f616c5ffd74a5a74ef25733da300d9deb6242 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Tue, 3 Sep 2024 15:22:47 +0800 Subject: [PATCH 1187/1284] released v1.19.1 #601 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b4051540693..bceaab71802 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "linux-command", - "version": "1.19.0", + "version": "1.19.1", "description": "Linux Command", "homepage": "https://jaywcjlove.github.io/linux-command/", "main": "dist/data.json", From 0f186819584d47074b67d3981a118c76aaddbdf0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Sep 2024 15:24:22 +0800 Subject: [PATCH 1188/1284] chore(deps-dev): bump sqlite3 from 5.0.8 to 5.1.5 (#528) Bumps [sqlite3](https://github.com/TryGhost/node-sqlite3) from 5.0.8 to 5.1.5. - [Release notes](https://github.com/TryGhost/node-sqlite3/releases) - [Commits](https://github.com/TryGhost/node-sqlite3/compare/v5.0.8...v5.1.5) --- updated-dependencies: - dependency-name: sqlite3 dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bceaab71802..4045d316e8b 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "fs-extra": "~10.1.0", "markdown-to-html-cli": "~4.0.0", "sitemap-generator": "~8.5.1", - "sqlite3": "5.0.8", + "sqlite3": "5.1.5", "stylus": "~0.59.0", "uglify-js": "~3.17.0" }, From 7851b27f46d126cb59bb7bfd538e09e293e7edfc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 3 Sep 2024 15:24:48 +0800 Subject: [PATCH 1189/1284] chore(deps): update dependency uglify-js to ~3.19.0 (#583) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4045d316e8b..219e8a72373 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "sitemap-generator": "~8.5.1", "sqlite3": "5.1.5", "stylus": "~0.59.0", - "uglify-js": "~3.17.0" + "uglify-js": "~3.19.0" }, "engines": { "node": ">=16.0.0" From 27374284c18165a06c44a59ad3dbe2663b849dc5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 3 Sep 2024 15:34:13 +0800 Subject: [PATCH 1190/1284] chore(deps): update dependency stylus to ~0.63.0 (#522) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 219e8a72373..8bba58fe3ac 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "markdown-to-html-cli": "~4.0.0", "sitemap-generator": "~8.5.1", "sqlite3": "5.1.5", - "stylus": "~0.59.0", + "stylus": "~0.63.0", "uglify-js": "~3.19.0" }, "engines": { From cb46889491b405aef4704741e2a2e84634ffcda4 Mon Sep 17 00:00:00 2001 From: duzhuoshanwai <65448395+duzhuoshanwai@users.noreply.github.com> Date: Thu, 12 Sep 2024 21:36:11 +0800 Subject: [PATCH 1191/1284] doc: update docker.md (#603) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加新的安装方式 --- command/docker.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/command/docker.md b/command/docker.md index 7245dff9fde..5e293866f5e 100644 --- a/command/docker.md +++ b/command/docker.md @@ -37,6 +37,17 @@ 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 From 6321537d9ffcf4300075c3ff58d19f7418199dd8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 12 Sep 2024 13:36:43 +0000 Subject: [PATCH 1192/1284] doc: update README.md. --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0d517ea15ec..029e2a69740 100644 --- a/README.md +++ b/README.md @@ -266,13 +266,13 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. L 圆头圆脑 clay-wangzhi -烟草的香味 Glett -丛林意志 +烟草的香味 Jayin Tang +丛林意志 +Zijing Zhang Fubin Zhang __FresHmaN -Zijing Zhang 谈笑风生间 ernest dulltackle @@ -313,7 +313,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. linuxwd Ricardowang cole -myliwenbo +dufu miniwater noodles2hg nsnans From c50c19a78f070c420d6d2bd57333d9ce563df0b5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 12 Sep 2024 13:36:44 +0000 Subject: [PATCH 1193/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index 2eac794cb6d..58eb30f9304 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -11,13 +11,13 @@ L 圆头圆脑 clay-wangzhi -烟草的香味 Glett -丛林意志 +烟草的香味 Jayin Tang +丛林意志 +Zijing Zhang Fubin Zhang __FresHmaN -Zijing Zhang 谈笑风生间 ernest dulltackle @@ -58,7 +58,7 @@ linuxwd Ricardowang cole -myliwenbo +dufu miniwater noodles2hg nsnans From f4645362823b263cca816edd9854539afab83c26 Mon Sep 17 00:00:00 2001 From: will Date: Fri, 20 Sep 2024 13:19:35 +0800 Subject: [PATCH 1194/1284] chore: Add kubernetes deployment (#605) * add kubernetes deployment * add kubernetes deployment README * update deployment README * update deployment yaml --- deploy/yamls/README.md | 64 +++++++++++++++++++++++++++++++++ deploy/yamls/linux-command.yaml | 50 ++++++++++++++++++++++++++ 2 files changed, 114 insertions(+) create mode 100644 deploy/yamls/README.md create mode 100644 deploy/yamls/linux-command.yaml diff --git a/deploy/yamls/README.md b/deploy/yamls/README.md new file mode 100644 index 00000000000..f7fe3316f70 --- /dev/null +++ b/deploy/yamls/README.md @@ -0,0 +1,64 @@ +# 快速入门指南 + +本指南旨在帮助您在 Kubernetes 中部署基于 `wcjiang/linux-command` 镜像的 `linux-command` 应用。该应用提供了一套 `Deployment`,并通过 `Service` 对外暴露服务端口。 + +## 前提条件 + +- 已安装并配置好的 Kubernetes 集群 +- 安装并配置好的 `kubectl`,并连接至你的 Kubernetes 集群 + +## 安装步骤 + +我们将使用此存储库中的`kubectl`应用 YAML 文件,该文件将安装 `linux-command` 应用。 + +```bash +$ kubectl apply -f https://raw.githubusercontent.com/jaywcjlove/linux-command/master/deploy/yamls/linux-command.yaml +``` + +检查 `Deployment` 状态: + +```bash +$ kubectl get deployments -n linux-command +NAME READY UP-TO-DATE AVAILABLE AGE +linux-command 1/1 1 1 17m +``` + +你可以查看 `Pod` 的状态以确保其正常运行: + +```bash +$ kubectl get pods -n linux-command +NAME READY STATUS RESTARTS AGE +linux-command-fff454654-427zp 1/1 Running 0 12m +``` + +验证 `Service` 是否成功创建并获取暴露的端口: + +``` +$ kubectl get services -n linux-command +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +linux-command-service NodePort 10.96.2.225 9665:30204/TCP 18m +``` + +## 访问应用 + +通过获取 `NodePort` 的端口来访问应用。以下是获取 `NodePort` 服务信息的命令: + +``` +$ kubectl get svc linux-command-service -n linux-command +``` + +根据输出,使用 `EXTERNAL-IP:PORT` 访问服务。例如: + +``` +http://: +``` + +## 卸载应用 + +如果需要删除已部署的资源,可以按以下顺序操作: + +``` +kubectl delete -f linux-command.yaml +``` + +这将会清理所有创建的 Kubernetes 资源。 diff --git a/deploy/yamls/linux-command.yaml b/deploy/yamls/linux-command.yaml new file mode 100644 index 00000000000..bc7fd6abb44 --- /dev/null +++ b/deploy/yamls/linux-command.yaml @@ -0,0 +1,50 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: linux-command +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: linux-command + namespace: linux-command + labels: + app: linux-command +spec: + replicas: 1 + selector: + matchLabels: + app: linux-command + template: + metadata: + labels: + app: linux-command + spec: + containers: + - name: linux-command-container + image: wcjiang/linux-command:latest + imagePullPolicy: IfNotPresent + ports: + - containerPort: 3000 + resources: + requests: + cpu: "100m" + memory: "50Mi" + limits: + cpu: "100m" + memory: "50Mi" +--- +apiVersion: v1 +kind: Service +metadata: + name: linux-command-service + namespace: linux-command +spec: + selector: + app: linux-command + ports: + - protocol: TCP + port: 9665 + targetPort: 3000 + type: NodePort From 8e072074ca2f4ff33955b77216ee2185d87354d1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 20 Sep 2024 05:20:07 +0000 Subject: [PATCH 1195/1284] doc: update README.md. --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 029e2a69740..957067ae295 100644 --- a/README.md +++ b/README.md @@ -326,12 +326,12 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. gedune gang.yang ecjtusbs +duzhuoshanwai dongpohezui Deny dayday cxalc Forever121 -c2ch Yidan Wang Wendy May 远方 @@ -364,6 +364,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. sfwwslm rexlin600 oliver +c2ch MinsonLee Marnm mwei From 3281700170ba24f83467bd89d7fea083b714f20c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 20 Sep 2024 05:20:08 +0000 Subject: [PATCH 1196/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index 58eb30f9304..ef252c950f0 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -71,12 +71,12 @@ gedune gang.yang ecjtusbs +duzhuoshanwai dongpohezui Deny dayday cxalc Forever121 -c2ch Yidan Wang Wendy May 远方 @@ -109,6 +109,7 @@ sfwwslm rexlin600 oliver +c2ch MinsonLee Marnm mwei From d85be58c782bde0f94b3fb4c8e527d9d1dc6d9b3 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Tue, 3 Sep 2024 18:53:00 +0800 Subject: [PATCH 1197/1284] doc: update command/iostat.md --- command/iostat.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/command/iostat.md b/command/iostat.md index 2c41ac779a5..b90088c5248 100644 --- a/command/iostat.md +++ b/command/iostat.md @@ -1,7 +1,12 @@ iostat === -iostat命令被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。 +监视系统输入输出设备和CPU的使用情况 + +## 补充说明 + +**iostat命令** 被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。 + iowait 指在一个采样周期内有百分之几的时间是属于以下情况:CPU处于空闲状态并且至少有一个未完成的磁盘IO请求。 ## 安装 iostat From 50b5782734189b8ad8990b5b56f97153e196577c Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Fri, 20 Sep 2024 13:23:05 +0800 Subject: [PATCH 1198/1284] chore: rename deploy/yamls -> k8s #605 --- {deploy/yamls => k8s}/README.md | 0 {deploy/yamls => k8s}/linux-command.yaml | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename {deploy/yamls => k8s}/README.md (100%) rename {deploy/yamls => k8s}/linux-command.yaml (100%) diff --git a/deploy/yamls/README.md b/k8s/README.md similarity index 100% rename from deploy/yamls/README.md rename to k8s/README.md diff --git a/deploy/yamls/linux-command.yaml b/k8s/linux-command.yaml similarity index 100% rename from deploy/yamls/linux-command.yaml rename to k8s/linux-command.yaml From d82ca52f067ad06579902d3a3a18e44159d6961c Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Fri, 20 Sep 2024 19:21:04 +0800 Subject: [PATCH 1199/1284] doc: update k8s/README.md --- k8s/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/k8s/README.md b/k8s/README.md index f7fe3316f70..146392149aa 100644 --- a/k8s/README.md +++ b/k8s/README.md @@ -12,7 +12,7 @@ 我们将使用此存储库中的`kubectl`应用 YAML 文件,该文件将安装 `linux-command` 应用。 ```bash -$ kubectl apply -f https://raw.githubusercontent.com/jaywcjlove/linux-command/master/deploy/yamls/linux-command.yaml +$ kubectl apply -f https://raw.githubusercontent.com/jaywcjlove/linux-command/refs/heads/master/k8s/linux-command.yaml ``` 检查 `Deployment` 状态: From 9870dba05f36cb9656073cf58085376ba8030a42 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 20 Sep 2024 11:22:02 +0000 Subject: [PATCH 1200/1284] doc: update README.md. --- README.md | 107 +++++++++++++++++++++++++++--------------------------- 1 file changed, 54 insertions(+), 53 deletions(-) diff --git a/README.md b/README.md index 957067ae295..e2995e3f3b2 100644 --- a/README.md +++ b/README.md @@ -273,42 +273,41 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Zijing Zhang Fubin Zhang __FresHmaN -谈笑风生间 -ernest dulltackle +ernest +谈笑风生间 zyy2477 rgshare loverainye -James Wang -Lnkstls lavaicer SteveLauC +Lnkstls +James Wang +Qliangw Wang Yujia alfred -Qliangw 沙漠之子 Shell xhal VVatt gggwvg +BingCoke +Ein Verne +FunKeen +Pan, Wen-Ming +RichardLCD +Shan Chenyu +Xingwen Zhang +Xrtero +YEUNGCHIE Dazhuangw Alterem YH -YEUNGCHIE -Xrtero -Xingwen Zhang -Shan Chenyu -RichardLCD -Pan, Wen-Ming -FunKeen -BingCoke -Ein Verne -leo -kid1412621 -kassadin -juemuren4449 jqz3.tech -jcdj666 +juemuren4449 +kassadin +kid1412621 +leo lewis1573 linuxwd Ricardowang @@ -317,6 +316,8 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. miniwater noodles2hg nsnans +oliver +jcdj666 hululu1068 huangyao hotdogc1017 @@ -331,40 +332,39 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Deny dayday cxalc -Forever121 -Yidan Wang -Wendy May -远方 -谢民皆 -Kyofin -老犁 -继刚 -移动的红烧肉 -极简XksA -ReZero -Loofra -Wei Xu -尘埃 -孤城落寞 -七朔 +Mystic zyimm -zuixin369 -zoomdong -zodiac -zjlovezj -yanyx -Lingfeng Wang -weibk -UniqueDing -tutianyu101 -tangke -snovey -shuangcui -shc -sfwwslm +七朔 +孤城落寞 +尘埃 +Wei Xu +Loofra +ReZero +极简XksA +移动的红烧肉 +继刚 +老犁 +Kyofin +谢民皆 +远方 +Wendy May +Yidan Wang rexlin600 -oliver -c2ch +sfwwslm +shc +shuangcui +snovey +tangke +tutianyu101 +UniqueDing +weibk +will +Lingfeng Wang +yanyx +zjlovezj +zodiac +zoomdong +zuixin369 MinsonLee Marnm mwei @@ -395,6 +395,8 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Azroy Alan 0x_000 +Forever121 +c2ch brinkqiang bell azureology @@ -423,8 +425,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Rining Wu Ray Yee QinShower -Q.Ben Zheng -Mystic +Q.Ben Zheng 贡献者列表,由 [contributors](https://github.com/jaywcjlove/github-action-contributors) 自动生成 From f6a17c0c577ea708d802e963c7c9ab3ae40e5a09 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 20 Sep 2024 11:22:03 +0000 Subject: [PATCH 1201/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 107 +++++++++++++++++++------------------- 1 file changed, 54 insertions(+), 53 deletions(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index ef252c950f0..80deae78548 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -18,42 +18,41 @@ Zijing Zhang Fubin Zhang __FresHmaN -谈笑风生间 -ernest dulltackle +ernest +谈笑风生间 zyy2477 rgshare loverainye -James Wang -Lnkstls lavaicer SteveLauC +Lnkstls +James Wang +Qliangw Wang Yujia alfred -Qliangw 沙漠之子 Shell xhal VVatt gggwvg +BingCoke +Ein Verne +FunKeen +Pan, Wen-Ming +RichardLCD +Shan Chenyu +Xingwen Zhang +Xrtero +YEUNGCHIE Dazhuangw Alterem YH -YEUNGCHIE -Xrtero -Xingwen Zhang -Shan Chenyu -RichardLCD -Pan, Wen-Ming -FunKeen -BingCoke -Ein Verne -leo -kid1412621 -kassadin -juemuren4449 jqz3.tech -jcdj666 +juemuren4449 +kassadin +kid1412621 +leo lewis1573 linuxwd Ricardowang @@ -62,6 +61,8 @@ miniwater noodles2hg nsnans +oliver +jcdj666 hululu1068 huangyao hotdogc1017 @@ -76,40 +77,39 @@ Deny dayday cxalc -Forever121 -Yidan Wang -Wendy May -远方 -谢民皆 -Kyofin -老犁 -继刚 -移动的红烧肉 -极简XksA -ReZero -Loofra -Wei Xu -尘埃 -孤城落寞 -七朔 +Mystic zyimm -zuixin369 -zoomdong -zodiac -zjlovezj -yanyx -Lingfeng Wang -weibk -UniqueDing -tutianyu101 -tangke -snovey -shuangcui -shc -sfwwslm +七朔 +孤城落寞 +尘埃 +Wei Xu +Loofra +ReZero +极简XksA +移动的红烧肉 +继刚 +老犁 +Kyofin +谢民皆 +远方 +Wendy May +Yidan Wang rexlin600 -oliver -c2ch +sfwwslm +shc +shuangcui +snovey +tangke +tutianyu101 +UniqueDing +weibk +will +Lingfeng Wang +yanyx +zjlovezj +zodiac +zoomdong +zuixin369 MinsonLee Marnm mwei @@ -140,6 +140,8 @@ Azroy Alan 0x_000 +Forever121 +c2ch brinkqiang bell azureology @@ -168,8 +170,7 @@ Rining Wu Ray Yee QinShower -Q.Ben Zheng -Mystic +Q.Ben Zheng

数据来源于 GitHub Contributors,使用action-contributors创建。 From 686f4452a14fd4fb02cf00dd0838d6b01004a195 Mon Sep 17 00:00:00 2001 From: will Date: Fri, 20 Sep 2024 19:25:45 +0800 Subject: [PATCH 1202/1284] chore: add helm charts (#606) * add helm charts * update README --- deploy/helm/charts/linux-command/.helmignore | 23 +++++++ deploy/helm/charts/linux-command/Chart.yaml | 21 +++++++ deploy/helm/charts/linux-command/README.md | 44 +++++++++++++ .../linux-command/templates/_helpers.tpl | 62 +++++++++++++++++++ .../linux-command/templates/deployment.yaml | 32 ++++++++++ .../linux-command/templates/service.yaml | 13 ++++ deploy/helm/charts/linux-command/values.yaml | 20 ++++++ 7 files changed, 215 insertions(+) create mode 100644 deploy/helm/charts/linux-command/.helmignore create mode 100644 deploy/helm/charts/linux-command/Chart.yaml create mode 100644 deploy/helm/charts/linux-command/README.md create mode 100644 deploy/helm/charts/linux-command/templates/_helpers.tpl create mode 100644 deploy/helm/charts/linux-command/templates/deployment.yaml create mode 100644 deploy/helm/charts/linux-command/templates/service.yaml create mode 100644 deploy/helm/charts/linux-command/values.yaml diff --git a/deploy/helm/charts/linux-command/.helmignore b/deploy/helm/charts/linux-command/.helmignore new file mode 100644 index 00000000000..0e8a0eb36f4 --- /dev/null +++ b/deploy/helm/charts/linux-command/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/deploy/helm/charts/linux-command/Chart.yaml b/deploy/helm/charts/linux-command/Chart.yaml new file mode 100644 index 00000000000..62db357f2ec --- /dev/null +++ b/deploy/helm/charts/linux-command/Chart.yaml @@ -0,0 +1,21 @@ +apiVersion: v2 +name: linux-command +description: A Helm chart for Kubernetes +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "0.1.0" diff --git a/deploy/helm/charts/linux-command/README.md b/deploy/helm/charts/linux-command/README.md new file mode 100644 index 00000000000..042c4695a6b --- /dev/null +++ b/deploy/helm/charts/linux-command/README.md @@ -0,0 +1,44 @@ +# linux-command + +linux-command 的 Helm 图表。该图表使用 Helm 软件包管理器在 Kubernetes 集群上引导部署 linux-command。 + +## 安装 Chart + +``` +$ helm install linux-command ./linux-command --namespace linux-command --create-namespace +``` + +## 卸载 Chart + +``` +$ helm -n linux-command uninstall linux-command +``` + +这会删除与图表相关的所有 Kubernetes 组件,并删除发布。 + +## 配置参数 + +下表列出了 linux-command 图表的可配置参数及其默认值。 + +| Key | Type | Default | Description | +| ------------------------------------------------------------ | ------ | ------------------------- | ----------- | +| linuxCommand.linuxCommandContainer.image.repository | string | `"wcjiang/linux-command"` | | +| linuxCommand.linuxCommandContainer.image.tag | string | `"latest"` | | +| linuxCommand.linuxCommandContainer.imagePullPolicy | string | `"IfNotPresent"` | | +| linuxCommand.linuxCommandContainer.resources.limits.cpu | string | `"100m"` | | +| linuxCommand.linuxCommandContainer.resources.limits.memory | string | `"50Mi"` | | +| linuxCommand.linuxCommandContainer.resources.requests.cpu | string | `"100m"` | | +| linuxCommand.linuxCommandContainer.resources.requests.memory | string | `"50Mi"` | | +| linuxCommand.replicas | int | `1` | | +| service.ports[0].port | int | `9665` | | +| service.ports[0].protocol | string | `"TCP"` | | +| service.ports[0].targetPort | int | `3000` | | +| service.type | string | `"NodePort"` | | + +使用`-set key=value[,key=value]`参数为`helm install`指定每个参数。 + +或者,也可以在安装图表时提供指定参数值的 YAML 文件。例如 + +``` +helm install -f values.yaml ./linux-command +``` diff --git a/deploy/helm/charts/linux-command/templates/_helpers.tpl b/deploy/helm/charts/linux-command/templates/_helpers.tpl new file mode 100644 index 00000000000..68cb3b48b25 --- /dev/null +++ b/deploy/helm/charts/linux-command/templates/_helpers.tpl @@ -0,0 +1,62 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "linux-command.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "linux-command.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "linux-command.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "linux-command.labels" -}} +helm.sh/chart: {{ include "linux-command.chart" . }} +{{ include "linux-command.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "linux-command.selectorLabels" -}} +app.kubernetes.io/name: {{ include "linux-command.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "linux-command.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "linux-command.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} diff --git a/deploy/helm/charts/linux-command/templates/deployment.yaml b/deploy/helm/charts/linux-command/templates/deployment.yaml new file mode 100644 index 00000000000..fbfc1318671 --- /dev/null +++ b/deploy/helm/charts/linux-command/templates/deployment.yaml @@ -0,0 +1,32 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "linux-command.fullname" . }}-linux-command + labels: + app: linux-command + {{- include "linux-command.labels" . | nindent 4 }} +spec: + replicas: {{ .Values.linuxCommand.replicas }} + selector: + matchLabels: + app: linux-command + {{- include "linux-command.selectorLabels" . | nindent 6 }} + template: + metadata: + labels: + app: linux-command + {{- include "linux-command.selectorLabels" . | nindent 8 }} + spec: + containers: + - env: + - name: KUBERNETES_CLUSTER_DOMAIN + value: {{ quote .Values.kubernetesClusterDomain }} + image: {{ .Values.linuxCommand.linuxCommandContainer.image.repository }}:{{ .Values.linuxCommand.linuxCommandContainer.image.tag + | default .Chart.AppVersion }} + imagePullPolicy: {{ .Values.linuxCommand.linuxCommandContainer.imagePullPolicy + }} + name: linux-command-container + ports: + - containerPort: 3000 + resources: {{- toYaml .Values.linuxCommand.linuxCommandContainer.resources | nindent + 10 }} \ No newline at end of file diff --git a/deploy/helm/charts/linux-command/templates/service.yaml b/deploy/helm/charts/linux-command/templates/service.yaml new file mode 100644 index 00000000000..4f5faa02ee7 --- /dev/null +++ b/deploy/helm/charts/linux-command/templates/service.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "linux-command.fullname" . }}-service + labels: + {{- include "linux-command.labels" . | nindent 4 }} +spec: + type: {{ .Values.service.type }} + selector: + app: linux-command + {{- include "linux-command.selectorLabels" . | nindent 4 }} + ports: + {{- .Values.service.ports | toYaml | nindent 2 }} diff --git a/deploy/helm/charts/linux-command/values.yaml b/deploy/helm/charts/linux-command/values.yaml new file mode 100644 index 00000000000..5b449e33bcb --- /dev/null +++ b/deploy/helm/charts/linux-command/values.yaml @@ -0,0 +1,20 @@ +linuxCommand: + linuxCommandContainer: + image: + repository: wcjiang/linux-command + tag: latest + imagePullPolicy: IfNotPresent + resources: + limits: + cpu: 100m + memory: 50Mi + requests: + cpu: 100m + memory: 50Mi + replicas: 1 +service: + ports: + - port: 9665 + protocol: TCP + targetPort: 3000 + type: NodePort From fc97de6b4433b48915e86ba478ef22718b5e18bd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 20 Sep 2024 11:26:34 +0000 Subject: [PATCH 1203/1284] doc: update README.md. --- README.md | 72 +++++++++++++++++++++++++++---------------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index e2995e3f3b2..0c9bfce4a34 100644 --- a/README.md +++ b/README.md @@ -289,6 +289,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. 沙漠之子 Shell xhal +will VVatt gggwvg BingCoke @@ -303,6 +304,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Dazhuangw Alterem YH +jcdj666 jqz3.tech juemuren4449 kassadin @@ -316,8 +318,6 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. miniwater noodles2hg nsnans -oliver -jcdj666 hululu1068 huangyao hotdogc1017 @@ -332,39 +332,40 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Deny dayday cxalc -Mystic -zyimm -七朔 -孤城落寞 -尘埃 -Wei Xu -Loofra -ReZero -极简XksA -移动的红烧肉 -继刚 -老犁 -Kyofin -谢民皆 -远方 -Wendy May +Forever121 Yidan Wang -rexlin600 -sfwwslm -shc -shuangcui -snovey -tangke -tutianyu101 -UniqueDing -weibk -will -Lingfeng Wang -yanyx -zjlovezj -zodiac -zoomdong +Wendy May +远方 +谢民皆 +Kyofin +老犁 +继刚 +移动的红烧肉 +极简XksA +ReZero +Loofra +Wei Xu +尘埃 +孤城落寞 +七朔 +zyimm zuixin369 +zoomdong +zodiac +zjlovezj +yanyx +Lingfeng Wang +weibk +UniqueDing +tutianyu101 +tangke +snovey +shuangcui +shc +sfwwslm +rexlin600 +oliver +c2ch MinsonLee Marnm mwei @@ -395,8 +396,6 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Azroy Alan 0x_000 -Forever121 -c2ch brinkqiang bell azureology @@ -425,7 +424,8 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Rining Wu Ray Yee QinShower -Q.Ben Zheng +Q.Ben Zheng +Mystic 贡献者列表,由 [contributors](https://github.com/jaywcjlove/github-action-contributors) 自动生成 From a727bb37dbfe5d14c27a6d5857a9ab64fc3e435b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 20 Sep 2024 11:26:35 +0000 Subject: [PATCH 1204/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 72 +++++++++++++++++++-------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index 80deae78548..3c6664e164b 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -34,6 +34,7 @@ 沙漠之子 Shell xhal +will VVatt gggwvg BingCoke @@ -48,6 +49,7 @@ Dazhuangw Alterem YH +jcdj666 jqz3.tech juemuren4449 kassadin @@ -61,8 +63,6 @@ miniwater noodles2hg nsnans -oliver -jcdj666 hululu1068 huangyao hotdogc1017 @@ -77,39 +77,40 @@ Deny dayday cxalc -Mystic -zyimm -七朔 -孤城落寞 -尘埃 -Wei Xu -Loofra -ReZero -极简XksA -移动的红烧肉 -继刚 -老犁 -Kyofin -谢民皆 -远方 -Wendy May +Forever121 Yidan Wang -rexlin600 -sfwwslm -shc -shuangcui -snovey -tangke -tutianyu101 -UniqueDing -weibk -will -Lingfeng Wang -yanyx -zjlovezj -zodiac -zoomdong +Wendy May +远方 +谢民皆 +Kyofin +老犁 +继刚 +移动的红烧肉 +极简XksA +ReZero +Loofra +Wei Xu +尘埃 +孤城落寞 +七朔 +zyimm zuixin369 +zoomdong +zodiac +zjlovezj +yanyx +Lingfeng Wang +weibk +UniqueDing +tutianyu101 +tangke +snovey +shuangcui +shc +sfwwslm +rexlin600 +oliver +c2ch MinsonLee Marnm mwei @@ -140,8 +141,6 @@ Azroy Alan 0x_000 -Forever121 -c2ch brinkqiang bell azureology @@ -170,7 +169,8 @@ Rining Wu Ray Yee QinShower -Q.Ben Zheng +Q.Ben Zheng +Mystic

数据来源于 GitHub Contributors,使用action-contributors创建。 From 4997c40f80e78409d4fba3d339e6ccfc8b9158e1 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Fri, 20 Sep 2024 19:27:15 +0800 Subject: [PATCH 1205/1284] chore: renamed deploy/helm/ -> k8s/helm/ #606 --- {deploy => k8s}/helm/charts/linux-command/.helmignore | 0 {deploy => k8s}/helm/charts/linux-command/Chart.yaml | 0 {deploy => k8s}/helm/charts/linux-command/README.md | 0 {deploy => k8s}/helm/charts/linux-command/templates/_helpers.tpl | 0 .../helm/charts/linux-command/templates/deployment.yaml | 0 {deploy => k8s}/helm/charts/linux-command/templates/service.yaml | 0 {deploy => k8s}/helm/charts/linux-command/values.yaml | 0 7 files changed, 0 insertions(+), 0 deletions(-) rename {deploy => k8s}/helm/charts/linux-command/.helmignore (100%) rename {deploy => k8s}/helm/charts/linux-command/Chart.yaml (100%) rename {deploy => k8s}/helm/charts/linux-command/README.md (100%) rename {deploy => k8s}/helm/charts/linux-command/templates/_helpers.tpl (100%) rename {deploy => k8s}/helm/charts/linux-command/templates/deployment.yaml (100%) rename {deploy => k8s}/helm/charts/linux-command/templates/service.yaml (100%) rename {deploy => k8s}/helm/charts/linux-command/values.yaml (100%) diff --git a/deploy/helm/charts/linux-command/.helmignore b/k8s/helm/charts/linux-command/.helmignore similarity index 100% rename from deploy/helm/charts/linux-command/.helmignore rename to k8s/helm/charts/linux-command/.helmignore diff --git a/deploy/helm/charts/linux-command/Chart.yaml b/k8s/helm/charts/linux-command/Chart.yaml similarity index 100% rename from deploy/helm/charts/linux-command/Chart.yaml rename to k8s/helm/charts/linux-command/Chart.yaml diff --git a/deploy/helm/charts/linux-command/README.md b/k8s/helm/charts/linux-command/README.md similarity index 100% rename from deploy/helm/charts/linux-command/README.md rename to k8s/helm/charts/linux-command/README.md diff --git a/deploy/helm/charts/linux-command/templates/_helpers.tpl b/k8s/helm/charts/linux-command/templates/_helpers.tpl similarity index 100% rename from deploy/helm/charts/linux-command/templates/_helpers.tpl rename to k8s/helm/charts/linux-command/templates/_helpers.tpl diff --git a/deploy/helm/charts/linux-command/templates/deployment.yaml b/k8s/helm/charts/linux-command/templates/deployment.yaml similarity index 100% rename from deploy/helm/charts/linux-command/templates/deployment.yaml rename to k8s/helm/charts/linux-command/templates/deployment.yaml diff --git a/deploy/helm/charts/linux-command/templates/service.yaml b/k8s/helm/charts/linux-command/templates/service.yaml similarity index 100% rename from deploy/helm/charts/linux-command/templates/service.yaml rename to k8s/helm/charts/linux-command/templates/service.yaml diff --git a/deploy/helm/charts/linux-command/values.yaml b/k8s/helm/charts/linux-command/values.yaml similarity index 100% rename from deploy/helm/charts/linux-command/values.yaml rename to k8s/helm/charts/linux-command/values.yaml From ffc270e9860edf93cd58c1072144e29ac8ed98fa Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 20 Sep 2024 11:28:40 +0000 Subject: [PATCH 1206/1284] doc: update README.md. --- README.md | 72 +++++++++++++++++++++++++++---------------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index 0c9bfce4a34..e2995e3f3b2 100644 --- a/README.md +++ b/README.md @@ -289,7 +289,6 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. 沙漠之子 Shell xhal -will VVatt gggwvg BingCoke @@ -304,7 +303,6 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Dazhuangw Alterem YH -jcdj666 jqz3.tech juemuren4449 kassadin @@ -318,6 +316,8 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. miniwater noodles2hg nsnans +oliver +jcdj666 hululu1068 huangyao hotdogc1017 @@ -332,40 +332,39 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Deny dayday cxalc -Forever121 -Yidan Wang -Wendy May -远方 -谢民皆 -Kyofin -老犁 -继刚 -移动的红烧肉 -极简XksA -ReZero -Loofra -Wei Xu -尘埃 -孤城落寞 -七朔 +Mystic zyimm -zuixin369 -zoomdong -zodiac -zjlovezj -yanyx -Lingfeng Wang -weibk -UniqueDing -tutianyu101 -tangke -snovey -shuangcui -shc -sfwwslm +七朔 +孤城落寞 +尘埃 +Wei Xu +Loofra +ReZero +极简XksA +移动的红烧肉 +继刚 +老犁 +Kyofin +谢民皆 +远方 +Wendy May +Yidan Wang rexlin600 -oliver -c2ch +sfwwslm +shc +shuangcui +snovey +tangke +tutianyu101 +UniqueDing +weibk +will +Lingfeng Wang +yanyx +zjlovezj +zodiac +zoomdong +zuixin369 MinsonLee Marnm mwei @@ -396,6 +395,8 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Azroy Alan 0x_000 +Forever121 +c2ch brinkqiang bell azureology @@ -424,8 +425,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Rining Wu Ray Yee QinShower -Q.Ben Zheng -Mystic +Q.Ben Zheng 贡献者列表,由 [contributors](https://github.com/jaywcjlove/github-action-contributors) 自动生成 From 5cd5a451b49e996f557abd9201cd94b0e0a87809 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 20 Sep 2024 11:28:41 +0000 Subject: [PATCH 1207/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 72 +++++++++++++++++++-------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index 3c6664e164b..80deae78548 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -34,7 +34,6 @@ 沙漠之子 Shell xhal -will VVatt gggwvg BingCoke @@ -49,7 +48,6 @@ Dazhuangw Alterem YH -jcdj666 jqz3.tech juemuren4449 kassadin @@ -63,6 +61,8 @@ miniwater noodles2hg nsnans +oliver +jcdj666 hululu1068 huangyao hotdogc1017 @@ -77,40 +77,39 @@ Deny dayday cxalc -Forever121 -Yidan Wang -Wendy May -远方 -谢民皆 -Kyofin -老犁 -继刚 -移动的红烧肉 -极简XksA -ReZero -Loofra -Wei Xu -尘埃 -孤城落寞 -七朔 +Mystic zyimm -zuixin369 -zoomdong -zodiac -zjlovezj -yanyx -Lingfeng Wang -weibk -UniqueDing -tutianyu101 -tangke -snovey -shuangcui -shc -sfwwslm +七朔 +孤城落寞 +尘埃 +Wei Xu +Loofra +ReZero +极简XksA +移动的红烧肉 +继刚 +老犁 +Kyofin +谢民皆 +远方 +Wendy May +Yidan Wang rexlin600 -oliver -c2ch +sfwwslm +shc +shuangcui +snovey +tangke +tutianyu101 +UniqueDing +weibk +will +Lingfeng Wang +yanyx +zjlovezj +zodiac +zoomdong +zuixin369 MinsonLee Marnm mwei @@ -141,6 +140,8 @@ Azroy Alan 0x_000 +Forever121 +c2ch brinkqiang bell azureology @@ -169,8 +170,7 @@ Rining Wu Ray Yee QinShower -Q.Ben Zheng -Mystic +Q.Ben Zheng

数据来源于 GitHub Contributors,使用action-contributors创建。 From 06c56e9e88777b46bc358f4d2cfaedb651b48bac Mon Sep 17 00:00:00 2001 From: bestlaw66 <94432849+bestlaw66@users.noreply.github.com> Date: Thu, 31 Oct 2024 11:30:27 +0800 Subject: [PATCH 1208/1284] docs: add BT Panel Deployment Method (#613) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在国内有大部分用户都在使用宝塔面板管理服务器,因此增加使用宝塔面板部署的教程,可视化的部署文档可以帮助用户更加便捷的部署Linux Command --- README.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/README.md b/README.md index e2995e3f3b2..870475462a4 100644 --- a/README.md +++ b/README.md @@ -94,6 +94,41 @@ http://localhost:9665/ 通过 Vercel 分配的域名访问,或者自行在设置中绑定域名。 +## 宝塔面板 + +可通过宝塔面板应用商店快速部署 linux-command + +

+部署步骤 + +### 前提 + +* 仅适用于宝塔面板 9.2.0 及以上版本 +* 安装宝塔面板,前往[宝塔面板](https://www.bt.cn/new/download.html)官网,选择正式版的脚本下载安装 + +### 部署 + +1. 登录宝塔面板,在左侧菜单栏中点击 `Docker` +2. 首次会提示安装`Docker`和`Docker Compose`服务,点击立即安装,若已安装请忽略。 +3. 安装完成后在`Docker-应用商店-实用工具`中找到 `linux-command`,点击`安装`,也可以在搜索框直接搜索`linux`。 +4. 设置域名等基本信息,点击`确定` +* 说明: + * 名称:应用名称,默认`linuxcommand_随机字符` + * 版本选择:默认`latest` + * 域名:如您需要通过域名访问,请在此处填写您的域名 + * 允许外部访问:如您需通过`IP+Port`直接访问,请勾选,如您已经设置了域名,请不要勾选此处 + * 端口:默认`3000`,可自行修改 + * CPU 限制:0 为不限制,根据实际需要设置 + * 内存限制:0 为不限制,根据实际需要设置 +5. 提交后面板会自动进行应用初始化,大概需要`1-3`分钟,初始化完成后即可访问。 + +### 访问 linux-command + +* 如果您填写域名,请在浏览器输入您的域名访问,如`http://demo.linux-command`,即可访问 `linux-command` 页面。 +* 如您选择`IP+端口访问`请在浏览器地址栏中输入域名访问 `http://<宝塔面板IP>:6806`,即可访问 `linux-command` 页面。 + +
+ ## Linux命令分类 *这里存放Linux 命令大全并不全,你可以通过[linux-command](https://jaywcjlove.github.io/linux-command/)来搜索,它是把 [command](./assets/command) 目录里面搜集的命令,生成了静态HTML并提供预览以及索引搜索。* From 3ad005aafe6e4f9eb924f8e9e93063b0c4cee27b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 31 Oct 2024 03:30:54 +0000 Subject: [PATCH 1209/1284] doc: update README.md. --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 870475462a4..7fe84730157 100644 --- a/README.md +++ b/README.md @@ -324,6 +324,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. 沙漠之子 Shell xhal +will VVatt gggwvg BingCoke @@ -338,6 +339,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Dazhuangw Alterem YH +jcdj666 jqz3.tech juemuren4449 kassadin @@ -351,8 +353,6 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. miniwater noodles2hg nsnans -oliver -jcdj666 hululu1068 huangyao hotdogc1017 @@ -367,6 +367,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Deny dayday cxalc +Forever121 Mystic zyimm 七朔 @@ -384,6 +385,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. 远方 Wendy May Yidan Wang +oliver rexlin600 sfwwslm shc @@ -393,7 +395,6 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. tutianyu101 UniqueDing weibk -will Lingfeng Wang yanyx zjlovezj @@ -430,9 +431,9 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Azroy Alan 0x_000 -Forever121 c2ch brinkqiang +bestlaw66 bell azureology Ashine From 7c36a2f50f29d7e747fa1a32774312230365d64a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 31 Oct 2024 03:30:54 +0000 Subject: [PATCH 1210/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index 80deae78548..cc6ddf65f69 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -34,6 +34,7 @@ 沙漠之子 Shell xhal +will VVatt gggwvg BingCoke @@ -48,6 +49,7 @@ Dazhuangw Alterem YH +jcdj666 jqz3.tech juemuren4449 kassadin @@ -61,8 +63,6 @@ miniwater noodles2hg nsnans -oliver -jcdj666 hululu1068 huangyao hotdogc1017 @@ -77,6 +77,7 @@ Deny dayday cxalc +Forever121 Mystic zyimm 七朔 @@ -94,6 +95,7 @@ 远方 Wendy May Yidan Wang +oliver rexlin600 sfwwslm shc @@ -103,7 +105,6 @@ tutianyu101 UniqueDing weibk -will Lingfeng Wang yanyx zjlovezj @@ -140,9 +141,9 @@ Azroy Alan 0x_000 -Forever121 c2ch brinkqiang +bestlaw66 bell azureology Ashine From 2268588c603129baa8191f51a1e3230ae16ca04e Mon Sep 17 00:00:00 2001 From: chaofan Date: Tue, 12 Nov 2024 10:49:56 +0800 Subject: [PATCH 1211/1284] doc: update command/free.md (#615) Add `-h` args description. --- command/free.md | 1 + 1 file changed, 1 insertion(+) diff --git a/command/free.md b/command/free.md index 7559c114305..11e927b395b 100644 --- a/command/free.md +++ b/command/free.md @@ -24,6 +24,7 @@ free(选项) -s<间隔秒数> # 持续观察内存使用状况; -t # 显示内存总和列; -V # 显示版本信息。 +-h, --human # 自动缩放到最短三位单位的并打印输出 ``` ### 实例 From a607043c9aeb9de834d06d7613cddb25ad827753 Mon Sep 17 00:00:00 2001 From: YEUNGCHIE <30793662+yeungchie@users.noreply.github.com> Date: Tue, 26 Nov 2024 10:20:14 +0800 Subject: [PATCH 1212/1284] doc: update command/strings.md (#617) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `实例` 中的第二个例子的命令错误,缺少管道符 `|` --- command/strings.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/command/strings.md b/command/strings.md index baf174c6c85..bdc513d0856 100644 --- a/command/strings.md +++ b/command/strings.md @@ -38,7 +38,7 @@ strings /bin/ls 列出ls中所有的ASCII文本: ```shell -cat /bin/ls strings +cat /bin/ls | strings ``` 查找ls中包含libc的字符串,不区分大小写: From fbba20936881da812101e162fc76c088227f006d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 26 Nov 2024 02:20:46 +0000 Subject: [PATCH 1213/1284] doc: update README.md. --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7fe84730157..6d5641f5c21 100644 --- a/README.md +++ b/README.md @@ -315,6 +315,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. rgshare loverainye lavaicer +YEUNGCHIE SteveLauC Lnkstls James Wang @@ -335,7 +336,6 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Shan Chenyu Xingwen Zhang Xrtero -YEUNGCHIE Dazhuangw Alterem YH @@ -368,7 +368,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. dayday cxalc Forever121 -Mystic +chaofan zyimm 七朔 孤城落寞 @@ -401,6 +401,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. zodiac zoomdong zuixin369 +Mystic MinsonLee Marnm mwei From e3700384a490b965b0d97df58c658bed2c4f3e96 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 26 Nov 2024 02:20:47 +0000 Subject: [PATCH 1214/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index cc6ddf65f69..3a73c8c7702 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -25,6 +25,7 @@ rgshare loverainye lavaicer +YEUNGCHIE SteveLauC Lnkstls James Wang @@ -45,7 +46,6 @@ Shan Chenyu Xingwen Zhang Xrtero -YEUNGCHIE Dazhuangw Alterem YH @@ -78,7 +78,7 @@ dayday cxalc Forever121 -Mystic +chaofan zyimm 七朔 孤城落寞 @@ -111,6 +111,7 @@ zodiac zoomdong zuixin369 +Mystic MinsonLee Marnm mwei From f5b04886c016cb7dd5b270134ef7ae0837929455 Mon Sep 17 00:00:00 2001 From: githubwxz Date: Fri, 29 Nov 2024 10:23:26 +0800 Subject: [PATCH 1215/1284] doc: Update README.md (#618) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6d5641f5c21..e9fb3880b6c 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ **推荐使用的镜像 web 版本** -[**`srebro.cn`**](https://linux.srebro.cn/),[**`getaifun.com`**](https://getaifun.com/linux),[**`linux.devonline.net`**](http://linux.devonline.net/),[**`man.zch.ooo`**](https://man.zch.ooo/),[**`linux.mmoke.com`**](https://linux.mmoke.com),[**`bqrdh.com`**](https://tools.bqrdh.com/linux-command/),[**`linux.zyimm.com`**](http://linux.zyimm.com/),[**`linux.vovuo.com`**](https://linux.vovuo.com/),[`linux.liguiying.cn`](https://linux.liguiying.cn/), [`renye.net`](https://renye.net/), [`diqi.org`](https://diqi.org/),[`linux.alistnas.xyz`](https://linux.alistnas.xyz/),[`nenufm.com`](https://www.nenufm.com/linux-command/) +[**`linuxsearch.largeinfo.cc`**](http://linuxsearch.largeinfo.cc),[**`srebro.cn`**](https://linux.srebro.cn/),[**`getaifun.com`**](https://getaifun.com/linux),[**`linux.devonline.net`**](http://linux.devonline.net/),[**`man.zch.ooo`**](https://man.zch.ooo/),[**`linux.mmoke.com`**](https://linux.mmoke.com),[**`bqrdh.com`**](https://tools.bqrdh.com/linux-command/),[**`linux.zyimm.com`**](http://linux.zyimm.com/),[**`linux.vovuo.com`**](https://linux.vovuo.com/),[`linux.liguiying.cn`](https://linux.liguiying.cn/), [`renye.net`](https://renye.net/), [`diqi.org`](https://diqi.org/),[`linux.alistnas.xyz`](https://linux.alistnas.xyz/),[`nenufm.com`](https://www.nenufm.com/linux-command/) **其它 web 版本** From 84d686c1f700b5419ae47e6dfd3082756862dbeb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 29 Nov 2024 02:23:58 +0000 Subject: [PATCH 1216/1284] doc: update README.md. --- README.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index e9fb3880b6c..32266489134 100644 --- a/README.md +++ b/README.md @@ -317,7 +317,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. lavaicer YEUNGCHIE SteveLauC -Lnkstls +MioMuse James Wang Qliangw Wang Yujia @@ -333,12 +333,13 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. FunKeen Pan, Wen-Ming RichardLCD -Shan Chenyu -Xingwen Zhang -Xrtero Dazhuangw Alterem YH +Shan Chenyu +Xingwen Zhang +Xrtero +hululu1068 jcdj666 jqz3.tech juemuren4449 @@ -352,11 +353,10 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. dufu miniwater noodles2hg -nsnans -hululu1068 huangyao hotdogc1017 gcluffy +githubwxz ghy gesty gedune @@ -369,6 +369,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. cxalc Forever121 chaofan +nsnans zyimm 七朔 孤城落寞 From b8b93894b9d7609994afdbfdca5a1b155a213975 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 29 Nov 2024 02:23:59 +0000 Subject: [PATCH 1217/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index 3a73c8c7702..a8d7ec9c534 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -27,7 +27,7 @@ lavaicer YEUNGCHIE SteveLauC -Lnkstls +MioMuse James Wang Qliangw Wang Yujia @@ -43,12 +43,13 @@ FunKeen Pan, Wen-Ming RichardLCD -Shan Chenyu -Xingwen Zhang -Xrtero Dazhuangw Alterem YH +Shan Chenyu +Xingwen Zhang +Xrtero +hululu1068 jcdj666 jqz3.tech juemuren4449 @@ -62,11 +63,10 @@ dufu miniwater noodles2hg -nsnans -hululu1068 huangyao hotdogc1017 gcluffy +githubwxz ghy gesty gedune @@ -79,6 +79,7 @@ cxalc Forever121 chaofan +nsnans zyimm 七朔 孤城落寞 From 0775c0d74e6e87f4f6268cff5fde377bbc4cc8bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=B6=E8=8B=8F=E5=A6=82=E6=98=AF?= <57750156+fusurus@users.noreply.github.com> Date: Sat, 21 Dec 2024 18:57:38 +0800 Subject: [PATCH 1218/1284] doc: Update nohup.md (#621) --- command/nohup.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/command/nohup.md b/command/nohup.md index 6a60c8f9a39..8e168243154 100644 --- a/command/nohup.md +++ b/command/nohup.md @@ -47,4 +47,16 @@ nohup wget site.com/file.zip nohup ping -c 10 baidu.com ``` +### 最简单的后台运行 +nohup command & +### 输出默认重定向到当前目录下 nohup.out 文件 +nohup python main.py & +### 自定义输出文件(标准输出和错误输出合并到 main.log) +nohup python main.py >> main.log 2>&1 & +### 与上一个例子相同作用的简写方法 +nohup python main.py &> main.log & +### 不记录输出信息 +nohup python main.py &> /dev/null & +### 不记录输出信息并将程序的进程号写入 pidfile.txt 文件中,方便后续杀死进程 +nohup python main.py &> /dev/null & echo $! > pidfile.txt From a6207d7ab2ccba2e8c10501c7824005688b7dc09 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Sat, 21 Dec 2024 19:05:55 +0800 Subject: [PATCH 1219/1284] doc: update command/nohup.md --- command/nohup.md | 51 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 14 deletions(-) diff --git a/command/nohup.md b/command/nohup.md index 8e168243154..e0ee09d8efb 100644 --- a/command/nohup.md +++ b/command/nohup.md @@ -9,23 +9,24 @@ nohup 无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到`$HOME/nohup.out`文件中。如果没有文件能创建或打开以用于追加,那么 command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。 -### 语法 +### 语法 +```shell nohup(选项)(参数) +``` -### 选项 +### 选项 ```shell --help:在线帮助; --version:显示版本信息。 ``` -### 参数 +### 参数 程序及选项:要运行的程序及选项。 -### 实例 - +### 实例 使用nohup命令提交作业,如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件: @@ -47,16 +48,38 @@ nohup wget site.com/file.zip nohup ping -c 10 baidu.com ``` -### 最简单的后台运行 +最简单的后台运行 + +```shell nohup command & -### 输出默认重定向到当前目录下 nohup.out 文件 -nohup python main.py & -### 自定义输出文件(标准输出和错误输出合并到 main.log) -nohup python main.py >> main.log 2>&1 & -### 与上一个例子相同作用的简写方法 +``` + +输出默认重定向到当前目录下 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 文件中,方便后续杀死进程 -nohup python main.py &> /dev/null & echo $! > pidfile.txt +``` +不记录输出信息并将程序的进程号写入 pidfile.txt 文件中,方便后续杀死进程 + +```shell +nohup python main.py &> /dev/null & echo $! > pidfile.txt +``` \ No newline at end of file From 5b5557f91e2f2d472a1f296fa659c974875e9dc4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 21 Dec 2024 11:06:33 +0000 Subject: [PATCH 1220/1284] doc: update README.md. --- README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 32266489134..0cc1ae7f14e 100644 --- a/README.md +++ b/README.md @@ -339,7 +339,6 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Shan Chenyu Xingwen Zhang Xrtero -hululu1068 jcdj666 jqz3.tech juemuren4449 @@ -353,6 +352,8 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. dufu miniwater noodles2hg +nsnans +hululu1068 huangyao hotdogc1017 gcluffy @@ -368,14 +369,13 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. dayday cxalc Forever121 -chaofan -nsnans -zyimm +oliver 七朔 孤城落寞 尘埃 Wei Xu Loofra +扶苏如是 ReZero 极简XksA 移动的红烧肉 @@ -386,7 +386,6 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. 远方 Wendy May Yidan Wang -oliver rexlin600 sfwwslm shc @@ -402,6 +401,8 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. zodiac zoomdong zuixin369 +zyimm +chaofan Mystic MinsonLee Marnm From fc723b6dec1ebe066ab181d22c21b74b91be9481 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 21 Dec 2024 11:06:34 +0000 Subject: [PATCH 1221/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index a8d7ec9c534..782e5d82414 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -49,7 +49,6 @@ Shan Chenyu Xingwen Zhang Xrtero -hululu1068 jcdj666 jqz3.tech juemuren4449 @@ -63,6 +62,8 @@ dufu miniwater noodles2hg +nsnans +hululu1068 huangyao hotdogc1017 gcluffy @@ -78,14 +79,13 @@ dayday cxalc Forever121 -chaofan -nsnans -zyimm +oliver 七朔 孤城落寞 尘埃 Wei Xu Loofra +扶苏如是 ReZero 极简XksA 移动的红烧肉 @@ -96,7 +96,6 @@ 远方 Wendy May Yidan Wang -oliver rexlin600 sfwwslm shc @@ -112,6 +111,8 @@ zodiac zoomdong zuixin369 +zyimm +chaofan Mystic MinsonLee Marnm From 1f11d8a430781027f9abca93c7ba3106ffe6c235 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Sat, 21 Dec 2024 19:08:55 +0800 Subject: [PATCH 1222/1284] doc: update command/as.md --- command/as.md | 46 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/command/as.md b/command/as.md index 622f791b0c3..12578067995 100644 --- a/command/as.md +++ b/command/as.md @@ -5,15 +5,15 @@ as ## 补充说明 -**as命令** GNU组织推出的一款汇编语言编译器,它支持多种不同类型的处理器。 +**as命令** 是GNU组织推出的一款汇编语言编译器,它支持多种不同类型的处理器。 -### 语法 +### 语法 ```shell -as(选项)(参数) +as [选项] [参数] ``` -### 选项 +### 选项 ```shell -ac:忽略失败条件; @@ -33,8 +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 +``` + +跳过空白和注释预处理并生成目标文件 + +```shell +as -f -o output.o source.s +``` \ No newline at end of file From 2a181511e989d95e3f0ec9f802298d65e7d10fe6 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Sat, 21 Dec 2024 19:10:44 +0800 Subject: [PATCH 1223/1284] doc: update command/at.md --- command/at.md | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/command/at.md b/command/at.md index 5b3ca031569..352063efe3a 100644 --- a/command/at.md +++ b/command/at.md @@ -5,17 +5,17 @@ at ## 补充说明 -**at命令** 用于在指定时间执行命令。at允许使用一套相当复杂的指定时间的方法。它能够接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。当然也能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的 词语来指定时间。用户还能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。 也能够指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年)。指定的日期必须跟在指定时间的后面。 +**at命令** 用于在指定时间执行命令。at允许使用一套相当复杂的指定时间的方法。它能够接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。当然也能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间。用户还能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。也能够指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年)。指定的日期必须跟在指定时间的后面。 -上面介绍的都是绝对计时法,其实还能够使用相对计时法,这对于安排不久就要执行的命令是很有好处的。指定格式为:`now + count time-units`,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,究竟是几天,还是几小时,等等。 更有一种计时方法就是直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。 +上面介绍的都是绝对计时法,其实还能够使用相对计时法,这对于安排不久就要执行的命令是很有好处的。指定格式为:`now + count time-units`,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,究竟是几天,还是几小时,等等。更有一种计时方法就是直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。 -### 语法 +### 语法 ```shell at [-V] [-q 队列] [-f 文件] [-mldbv] 时间 at -c 作业 [作业...] ``` -### 选项 +### 选项 ```shell -f:指定包含具体指令的任务文件; @@ -25,13 +25,13 @@ at [-V] [-q 队列] [-f 文件] [-mldbv] 时间 at -c 作业 [作业...] -m:任务执行完成后向用户发送E-mail。 ``` -### 参数 +### 参数 日期时间:指定任务执行的日期时间。 -### 实例 +### 示例 -三天后的下午 5 点锺执行`/bin/ls`: +三天后的下午 5 点钟执行`/bin/ls`: ```shell [root@localhost ~]# at 5pm+3 days @@ -60,10 +60,6 @@ job 8 at 2013-01-06 17:20 删除已经设置的任务: ```shell -[root@localhost ~]# atq -8 2013-01-06 17:20 a root -7 2013-01-08 17:00 a root - [root@localhost ~]# atrm 7 [root@localhost ~]# atq 8 2013-01-06 17:20 a root @@ -80,5 +76,28 @@ umask 22此处省略n个字符 date >/root/2013.log ``` +使用任务文件执行任务: + +```shell +[root@localhost ~]# echo "/bin/ls" > mytask.txt +[root@localhost ~]# at -f mytask.txt 5pm+3 days +job 9 at 2013-01-08 17:00 +``` + +指定任务队列执行任务: +```shell +[root@localhost ~]# at -q b 5pm+3 days +at> /bin/ls +at> +job 10 at 2013-01-08 17:00 +``` +任务执行完成后发送E-mail通知: + +```shell +[root@localhost ~]# at -m 5pm+3 days +at> /bin/ls +at> +job 11 at 2013-01-08 17:00 +``` \ No newline at end of file From d27f05592debd0f09eb43e7011bf9617a1d3db4e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 21 Dec 2024 11:16:46 +0000 Subject: [PATCH 1224/1284] doc: update README.md. --- README.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 0cc1ae7f14e..32266489134 100644 --- a/README.md +++ b/README.md @@ -339,6 +339,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Shan Chenyu Xingwen Zhang Xrtero +hululu1068 jcdj666 jqz3.tech juemuren4449 @@ -352,8 +353,6 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. dufu miniwater noodles2hg -nsnans -hululu1068 huangyao hotdogc1017 gcluffy @@ -369,13 +368,14 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. dayday cxalc Forever121 -oliver +chaofan +nsnans +zyimm 七朔 孤城落寞 尘埃 Wei Xu Loofra -扶苏如是 ReZero 极简XksA 移动的红烧肉 @@ -386,6 +386,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. 远方 Wendy May Yidan Wang +oliver rexlin600 sfwwslm shc @@ -401,8 +402,6 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. zodiac zoomdong zuixin369 -zyimm -chaofan Mystic MinsonLee Marnm From 0ae1a1bc6eee39d0c86b8dda2dbdd0764c7c1bba Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 21 Dec 2024 11:16:47 +0000 Subject: [PATCH 1225/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index 782e5d82414..a8d7ec9c534 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -49,6 +49,7 @@ Shan Chenyu Xingwen Zhang Xrtero +hululu1068 jcdj666 jqz3.tech juemuren4449 @@ -62,8 +63,6 @@ dufu miniwater noodles2hg -nsnans -hululu1068 huangyao hotdogc1017 gcluffy @@ -79,13 +78,14 @@ dayday cxalc Forever121 -oliver +chaofan +nsnans +zyimm 七朔 孤城落寞 尘埃 Wei Xu Loofra -扶苏如是 ReZero 极简XksA 移动的红烧肉 @@ -96,6 +96,7 @@ 远方 Wendy May Yidan Wang +oliver rexlin600 sfwwslm shc @@ -111,8 +112,6 @@ zodiac zoomdong zuixin369 -zyimm -chaofan Mystic MinsonLee Marnm From b1272c9afbdbebabd3714be6ba8d85fa49a7db2a Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Sat, 21 Dec 2024 19:18:27 +0800 Subject: [PATCH 1226/1284] doc: update command/atq.md --- command/atq.md | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/command/atq.md b/command/atq.md index ae1ad20ddd5..5fd86e76812 100644 --- a/command/atq.md +++ b/command/atq.md @@ -7,30 +7,56 @@ atq **atq命令** 显示系统中待执行的任务列表,也就是列出当前用户的at任务列表。 -### 语法 +### 语法 ```shell atq [-V] [-q 队列] [-v] ``` -### 选项 +### 选项 ```shell -V:显示版本号; -q:查询指定队列的任务。 ``` -### 实例 +### 示例 + +创建一个在10分钟后执行的任务,并列出当前用户的任务列表: ```shell -at now + 10 minutes +[root@localhost ~]# at now + 10 minutes at> echo 1111 -at> +at> job 3 at Fri Apr 26 12:56:00 2013 +``` -atq +使用`atq`命令查看当前用户的任务列表: + +```shell +[root@localhost ~]# atq 3 Fri Apr 26 12:56:00 2013 a root ``` +查询指定队列的任务: +```shell +[root@localhost ~]# at -q a now + 10 minutes +at> echo "Task in queue a" +at> +job 4 at Fri Apr 26 13:06:00 2013 +``` +使用`atq`命令查看队列`a`中的任务: + +```shell +[root@localhost ~]# atq -q a +4 Fri Apr 26 13:06:00 2013 a root +``` + +显示`atq`命令的版本号: + +```shell +[root@localhost ~]# atq -V +atq (GNU at) 3.1.20 +``` \ No newline at end of file From 69890bc63e856ae264dd02fafd926a3d3821dac8 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Sat, 21 Dec 2024 19:20:18 +0800 Subject: [PATCH 1227/1284] doc: update command/atop.md --- command/atop.md | 62 +++++++++++++++++++++++++++++++------------------ 1 file changed, 40 insertions(+), 22 deletions(-) diff --git a/command/atop.md b/command/atop.md index a33cf5ab340..0b5535f1f10 100644 --- a/command/atop.md +++ b/command/atop.md @@ -5,26 +5,32 @@ atop ## 补充说明 -[非内部程序,需要安装]它以一定的频率记录系统的运行状态,所采集的数据包含系统资源(CPU、内存、磁盘和网络)使用情况和进程运行情况,并能以日志文件的方式保存在磁盘中,服务器出现问题后,我们可获取相应的atop日志文件进行分析。atop是一款开源软件,我们可以从这里获得其[源码](https://github.com/Atoptool/atop)和[rpm安装包](https://pkgs.org/download/atop)。 +**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采样周期期间退出的进程数量 -**CPU列**:该列显示CPU整体(即多核CPU作为一个整体CPU资源)的使用情况,我们知道CPU可被用于执行进程、处理中断,也可处于空闲状态(空闲状态分两种,一种是活动进程等待磁盘IO导致CPU空闲,另一种是完全空闲) +### CPU列 + +该列显示CPU整体(即多核CPU作为一个整体CPU资源)的使用情况: - sys、usr字段指示CPU被用于处理进程时,进程在内核态、用户态所占CPU的时间比例 - irq字段指示CPU被用于处理中断的时间比例 @@ -33,15 +39,21 @@ atop(选项)(参数) CPU列各个字段指示值相加结果为N00%,其中N为cpu核数。 -cpu列:该列显示某一核cpu的使用情况,各字段含义可参照CPU列,各字段值相加结果为100% +### cpu列 -**CPL列**:该列显示CPU负载情况 +该列显示某一核cpu的使用情况,各字段含义可参照CPU列,各字段值相加结果为100%。 + +### CPL列 + +该列显示CPU负载情况: - avg1、avg5和avg15字段:过去1分钟、5分钟和15分钟内运行队列中的平均进程数量 - csw字段指示上下文交换次数 - intr字段指示中断发生次数 -**MEM列**:该列指示内存的使用情况 +### MEM列 + +该列指示内存的使用情况: - tot字段指示物理内存总量 - free字段指示空闲内存的大小 @@ -49,43 +61,49 @@ cpu列:该列显示某一核cpu的使用情况,各字段含义可参照CPU - buff字段指示用于文件缓存的内存大小 - slab字段指示系统内核占用的内存大小 -**SWP列**:该列指示交换空间的使用情况 +### SWP列 + +该列指示交换空间的使用情况: - tot字段指示交换区总量 - free字段指示空闲交换空间大小 -**PAG列**:该列指示虚拟内存分页情况 +### PAG列 + +该列指示虚拟内存分页情况: + +- swin、swout字段:换入和换出内存页数 -swin、swout字段:换入和换出内存页数 +### DSK列 -**DSK列**:该列指示磁盘使用情况,每一个磁盘设备对应一列,如果有sdb设备,那么增多一列DSK信息 +该列指示磁盘使用情况,每一个磁盘设备对应一列,如果有sdb设备,那么增多一列DSK信息: - sda字段:磁盘设备标识 - busy字段:磁盘忙时比例 - read、write字段:读、写请求数量 -**NET列**:多列NET展示了网络状况,包括传输层(TCP和UDP)、IP层以及各活动的网口信息 +### NET列 -- XXXi 字段指示各层或活动网口收包数目 -- XXXo 字段指示各层或活动网口发包数目 +多列NET展示了网络状况,包括传输层(TCP和UDP)、IP层以及各活动的网口信息: -## atop日志 +- XXXi字段指示各层或活动网口收包数目 +- XXXo字段指示各层或活动网口发包数目 -每个时间点采样页面组合起来就形成了一个atop日志文件,我们可以使用"atop -r XXX"命令对日志文件进行查看。那以什么形式保存atop日志文件呢? +## 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 @@ -93,4 +111,4 @@ swin、swout字段:换入和换出内存页数 ## 相关资料 -- [官方手册](http://www.atoptool.nl/download/man_atop-1.pdf) +- [官方手册](http://www.atoptool.nl/download/man_atop-1.pdf) \ No newline at end of file From cc8725734644d7b54ad55e602bbf10b8c99d6b26 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 21 Dec 2024 11:21:12 +0000 Subject: [PATCH 1228/1284] doc: update README.md. --- README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 32266489134..0cc1ae7f14e 100644 --- a/README.md +++ b/README.md @@ -339,7 +339,6 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Shan Chenyu Xingwen Zhang Xrtero -hululu1068 jcdj666 jqz3.tech juemuren4449 @@ -353,6 +352,8 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. dufu miniwater noodles2hg +nsnans +hululu1068 huangyao hotdogc1017 gcluffy @@ -368,14 +369,13 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. dayday cxalc Forever121 -chaofan -nsnans -zyimm +oliver 七朔 孤城落寞 尘埃 Wei Xu Loofra +扶苏如是 ReZero 极简XksA 移动的红烧肉 @@ -386,7 +386,6 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. 远方 Wendy May Yidan Wang -oliver rexlin600 sfwwslm shc @@ -402,6 +401,8 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. zodiac zoomdong zuixin369 +zyimm +chaofan Mystic MinsonLee Marnm From 065edf179120c3c494f9c49db6a542e27a6f211f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 21 Dec 2024 11:21:13 +0000 Subject: [PATCH 1229/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index a8d7ec9c534..782e5d82414 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -49,7 +49,6 @@ Shan Chenyu Xingwen Zhang Xrtero -hululu1068 jcdj666 jqz3.tech juemuren4449 @@ -63,6 +62,8 @@ dufu miniwater noodles2hg +nsnans +hululu1068 huangyao hotdogc1017 gcluffy @@ -78,14 +79,13 @@ dayday cxalc Forever121 -chaofan -nsnans -zyimm +oliver 七朔 孤城落寞 尘埃 Wei Xu Loofra +扶苏如是 ReZero 极简XksA 移动的红烧肉 @@ -96,7 +96,6 @@ 远方 Wendy May Yidan Wang -oliver rexlin600 sfwwslm shc @@ -112,6 +111,8 @@ zodiac zoomdong zuixin369 +zyimm +chaofan Mystic MinsonLee Marnm From db88f1b96abf561fb43e6960c2e6b4367f83fdce Mon Sep 17 00:00:00 2001 From: Jeremy2214 <97098763+Jeremy2214@users.noreply.github.com> Date: Thu, 26 Dec 2024 22:09:22 +0800 Subject: [PATCH 1230/1284] doc: update touch.md (#624) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修正拼写错误,把“更该”,改为“更改” --- command/touch.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/command/touch.md b/command/touch.md index 37a1a698718..384efbff5e5 100644 --- a/command/touch.md +++ b/command/touch.md @@ -20,7 +20,7 @@ touch(选项)(参数) -c:或--no-create 不建立任何文件; -d:<时间日期> 使用指定的日期时间,而非现在的时间; -f:此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题; --m:或--time=mtime或--time=modify 只更该变动时间; +-m:或--time=mtime或--time=modify 只更改变动时间; -r:<参考文件或目录> 把指定文件或目录的日期时间,统统设成和参考文件或目录的日期时间相同; -t:<日期时间> 使用指定的日期时间,而非现在的时间; --help:在线帮助; From 43f5dc092158096541fe43765a21b47c32e71359 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 26 Dec 2024 14:10:10 +0000 Subject: [PATCH 1231/1284] doc: update README.md. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0cc1ae7f14e..7db5d94c9bc 100644 --- a/README.md +++ b/README.md @@ -384,7 +384,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Kyofin 谢民皆 远方 -Wendy May +bycs Yidan Wang rexlin600 sfwwslm From d4998a1000660bae9572328effbd136e6d350d70 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 26 Dec 2024 14:10:11 +0000 Subject: [PATCH 1232/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index 782e5d82414..3cd264242ed 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -94,7 +94,7 @@ Kyofin 谢民皆 远方 -Wendy May +bycs Yidan Wang rexlin600 sfwwslm From 36a4edf169ac064f875621ab381fe6580032a07e Mon Sep 17 00:00:00 2001 From: QinShower Date: Sun, 29 Dec 2024 20:45:56 +0800 Subject: [PATCH 1233/1284] feat: Create getfacl.md (#625) add getfacl --- command/getfacl.md | 49 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 command/getfacl.md 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 +``` From 6603a44cb5e02252ea88a6cb5b44d4d5fa21fede Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 29 Dec 2024 12:46:28 +0000 Subject: [PATCH 1234/1284] doc: update README.md. --- README.md | 66 +++++++++++++++++++++++++++---------------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index 7db5d94c9bc..3a39ff29e2e 100644 --- a/README.md +++ b/README.md @@ -328,24 +328,25 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. will VVatt gggwvg -BingCoke -Ein Verne -FunKeen -Pan, Wen-Ming -RichardLCD Dazhuangw Alterem YH -Shan Chenyu -Xingwen Zhang Xrtero -jcdj666 -jqz3.tech -juemuren4449 -kassadin -kid1412621 -leo +Xingwen Zhang +Shan Chenyu +RichardLCD +Pan, Wen-Ming +Jeremy2214 +BingCoke +FunKeen +Ein Verne lewis1573 +leo +kid1412621 +kassadin +juemuren4449 +jqz3.tech +Forever121 linuxwd Ricardowang cole @@ -353,23 +354,23 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. miniwater noodles2hg nsnans -hululu1068 -huangyao -hotdogc1017 -gcluffy -githubwxz -ghy -gesty -gedune -gang.yang -ecjtusbs -duzhuoshanwai -dongpohezui -Deny -dayday -cxalc -Forever121 oliver +cxalc +dayday +Deny +dongpohezui +duzhuoshanwai +ecjtusbs +gang.yang +gedune +gesty +ghy +githubwxz +gcluffy +hotdogc1017 +huangyao +hululu1068 +jcdj666 七朔 孤城落寞 尘埃 @@ -402,7 +403,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. zoomdong zuixin369 zyimm -chaofan +Q.Ben Zheng Mystic MinsonLee Marnm @@ -418,7 +419,6 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. LaudOak Karl Horky Nexchard -Jeremy2214 Jack.A.Black Jack Huntout Zhang @@ -434,6 +434,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Azroy Alan 0x_000 +chaofan c2ch brinkqiang bestlaw66 @@ -463,8 +464,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Robigus Rining Wu Ray Yee -QinShower -Q.Ben Zheng +QinShower 贡献者列表,由 [contributors](https://github.com/jaywcjlove/github-action-contributors) 自动生成 From 000517ef32d2b01efb98d58ea9b91f178000c37f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 29 Dec 2024 12:46:28 +0000 Subject: [PATCH 1235/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 66 +++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index 3cd264242ed..77ec8c5d696 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -38,24 +38,25 @@ will VVatt gggwvg -BingCoke -Ein Verne -FunKeen -Pan, Wen-Ming -RichardLCD Dazhuangw Alterem YH -Shan Chenyu -Xingwen Zhang Xrtero -jcdj666 -jqz3.tech -juemuren4449 -kassadin -kid1412621 -leo +Xingwen Zhang +Shan Chenyu +RichardLCD +Pan, Wen-Ming +Jeremy2214 +BingCoke +FunKeen +Ein Verne lewis1573 +leo +kid1412621 +kassadin +juemuren4449 +jqz3.tech +Forever121 linuxwd Ricardowang cole @@ -63,23 +64,23 @@ miniwater noodles2hg nsnans -hululu1068 -huangyao -hotdogc1017 -gcluffy -githubwxz -ghy -gesty -gedune -gang.yang -ecjtusbs -duzhuoshanwai -dongpohezui -Deny -dayday -cxalc -Forever121 oliver +cxalc +dayday +Deny +dongpohezui +duzhuoshanwai +ecjtusbs +gang.yang +gedune +gesty +ghy +githubwxz +gcluffy +hotdogc1017 +huangyao +hululu1068 +jcdj666 七朔 孤城落寞 尘埃 @@ -112,7 +113,7 @@ zoomdong zuixin369 zyimm -chaofan +Q.Ben Zheng Mystic MinsonLee Marnm @@ -128,7 +129,6 @@ LaudOak Karl Horky Nexchard -Jeremy2214 Jack.A.Black Jack Huntout Zhang @@ -144,6 +144,7 @@ Azroy Alan 0x_000 +chaofan c2ch brinkqiang bestlaw66 @@ -173,8 +174,7 @@ Robigus Rining Wu Ray Yee -QinShower -Q.Ben Zheng +QinShower

数据来源于 GitHub Contributors,使用action-contributors创建。 From ec0fe45c48cf973ae69974e7d766029ed4df2f90 Mon Sep 17 00:00:00 2001 From: duzhuoshanwai <65448395+duzhuoshanwai@users.noreply.github.com> Date: Sat, 11 Jan 2025 11:07:52 +0800 Subject: [PATCH 1236/1284] doc: update column.md (#629) * doc: update README.md. * doc: update template/contributors.ejs. * Update column.md * doc: update README.md. * doc: update template/contributors.ejs. --------- Co-authored-by: github-actions[bot] --- README.md | 146 +++++++++++++++++++------------------- command/column.md | 53 ++++++++++++++ template/contributors.ejs | 146 +++++++++++++++++++------------------- 3 files changed, 199 insertions(+), 146 deletions(-) diff --git a/README.md b/README.md index 3a39ff29e2e..79063b9841c 100644 --- a/README.md +++ b/README.md @@ -308,45 +308,46 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Zijing Zhang Fubin Zhang __FresHmaN -dulltackle -ernest 谈笑风生间 +ernest +dulltackle zyy2477 -rgshare -loverainye -lavaicer -YEUNGCHIE SteveLauC +YEUNGCHIE MioMuse James Wang +lavaicer +loverainye +rgshare Qliangw -Wang Yujia -alfred 沙漠之子 +Wang Yujia Shell xhal will VVatt gggwvg -Dazhuangw -Alterem -YH -Xrtero -Xingwen Zhang -Shan Chenyu -RichardLCD -Pan, Wen-Ming -Jeremy2214 +alfred +duzhuoshanwai +Ein Verne BingCoke FunKeen -Ein Verne -lewis1573 -leo -kid1412621 -kassadin -juemuren4449 +Jeremy2214 +Pan, Wen-Ming +QinShower +RichardLCD +Shan Chenyu +Xingwen Zhang +Xrtero +YH +Alterem +Dazhuangw jqz3.tech -Forever121 +juemuren4449 +kassadin +kid1412621 +leo +lewis1573 linuxwd Ricardowang cole @@ -355,55 +356,54 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. noodles2hg nsnans oliver -cxalc -dayday -Deny -dongpohezui -duzhuoshanwai -ecjtusbs -gang.yang -gedune -gesty -ghy -githubwxz -gcluffy -hotdogc1017 -huangyao -hululu1068 jcdj666 -七朔 -孤城落寞 -尘埃 -Wei Xu -Loofra -扶苏如是 -ReZero -极简XksA -移动的红烧肉 -继刚 -老犁 -Kyofin -谢民皆 -远方 -bycs +hululu1068 +huangyao +hotdogc1017 +gcluffy +githubwxz +ghy +gesty +gedune +gang.yang +ecjtusbs +dongpohezui +Deny +dayday +cxalc +Q.Ben Zheng Yidan Wang -rexlin600 -sfwwslm -shc -shuangcui -snovey -tangke -tutianyu101 -UniqueDing -weibk -Lingfeng Wang -yanyx -zjlovezj -zodiac -zoomdong -zuixin369 +bycs +远方 +谢民皆 +Kyofin +老犁 +继刚 +移动的红烧肉 +极简XksA +ReZero +扶苏如是 +Loofra +Wei Xu +尘埃 +孤城落寞 +七朔 zyimm -Q.Ben Zheng +zuixin369 +zoomdong +zodiac +zjlovezj +yanyx +Lingfeng Wang +weibk +UniqueDing +tutianyu101 +tangke +snovey +shuangcui +shc +sfwwslm +rexlin600 Mystic MinsonLee Marnm @@ -431,9 +431,10 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Danny DaYangtuo247 Cui Yang -Azroy +azroy Alan 0x_000 +Forever121 chaofan c2ch brinkqiang @@ -463,8 +464,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Rocher Robigus Rining Wu -Ray Yee -QinShower +Ray Yee 贡献者列表,由 [contributors](https://github.com/jaywcjlove/github-action-contributors) 自动生成 diff --git a/command/column.md b/command/column.md index 62e30329471..c93c184692b 100644 --- a/command/column.md +++ b/command/column.md @@ -26,6 +26,8 @@ file(可选),当没有指定文件时,默认会从标准输入读取, -s, --separator 指定识别表格的分隔符 -o, --output-separator 输出表格的列分隔符,默认为两个空格 -x, --fillrows 在列之前填充行 +-N, --table-columns 添加列名(逗号分隔) +-J --json 格式化为JSON输出(需要配合-N/--table-columns使用) -h, --help 显示此帮助 -V, --version 输出版本信息 ``` @@ -121,3 +123,54 @@ 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/template/contributors.ejs b/template/contributors.ejs index 77ec8c5d696..65bfe00654f 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -18,45 +18,46 @@ Zijing Zhang Fubin Zhang __FresHmaN -dulltackle -ernest 谈笑风生间 +ernest +dulltackle zyy2477 -rgshare -loverainye -lavaicer -YEUNGCHIE SteveLauC +YEUNGCHIE MioMuse James Wang +lavaicer +loverainye +rgshare Qliangw -Wang Yujia -alfred 沙漠之子 +Wang Yujia Shell xhal will VVatt gggwvg -Dazhuangw -Alterem -YH -Xrtero -Xingwen Zhang -Shan Chenyu -RichardLCD -Pan, Wen-Ming -Jeremy2214 +alfred +duzhuoshanwai +Ein Verne BingCoke FunKeen -Ein Verne -lewis1573 -leo -kid1412621 -kassadin -juemuren4449 +Jeremy2214 +Pan, Wen-Ming +QinShower +RichardLCD +Shan Chenyu +Xingwen Zhang +Xrtero +YH +Alterem +Dazhuangw jqz3.tech -Forever121 +juemuren4449 +kassadin +kid1412621 +leo +lewis1573 linuxwd Ricardowang cole @@ -65,55 +66,54 @@ noodles2hg nsnans oliver -cxalc -dayday -Deny -dongpohezui -duzhuoshanwai -ecjtusbs -gang.yang -gedune -gesty -ghy -githubwxz -gcluffy -hotdogc1017 -huangyao -hululu1068 jcdj666 -七朔 -孤城落寞 -尘埃 -Wei Xu -Loofra -扶苏如是 -ReZero -极简XksA -移动的红烧肉 -继刚 -老犁 -Kyofin -谢民皆 -远方 -bycs +hululu1068 +huangyao +hotdogc1017 +gcluffy +githubwxz +ghy +gesty +gedune +gang.yang +ecjtusbs +dongpohezui +Deny +dayday +cxalc +Q.Ben Zheng Yidan Wang -rexlin600 -sfwwslm -shc -shuangcui -snovey -tangke -tutianyu101 -UniqueDing -weibk -Lingfeng Wang -yanyx -zjlovezj -zodiac -zoomdong -zuixin369 +bycs +远方 +谢民皆 +Kyofin +老犁 +继刚 +移动的红烧肉 +极简XksA +ReZero +扶苏如是 +Loofra +Wei Xu +尘埃 +孤城落寞 +七朔 zyimm -Q.Ben Zheng +zuixin369 +zoomdong +zodiac +zjlovezj +yanyx +Lingfeng Wang +weibk +UniqueDing +tutianyu101 +tangke +snovey +shuangcui +shc +sfwwslm +rexlin600 Mystic MinsonLee Marnm @@ -141,9 +141,10 @@ Danny DaYangtuo247 Cui Yang -Azroy +azroy Alan 0x_000 +Forever121 chaofan c2ch brinkqiang @@ -173,8 +174,7 @@ Rocher Robigus Rining Wu -Ray Yee -QinShower +Ray Yee

数据来源于 GitHub Contributors,使用action-contributors创建。 From 2507c01aefb7b642ffbd29a2eee99a7d452183d7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 11 Jan 2025 03:08:24 +0000 Subject: [PATCH 1237/1284] doc: update README.md. --- README.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 79063b9841c..fc680067304 100644 --- a/README.md +++ b/README.md @@ -312,24 +312,23 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. ernest dulltackle zyy2477 +rgshare +loverainye SteveLauC YEUNGCHIE +lavaicer MioMuse James Wang -lavaicer -loverainye -rgshare -Qliangw +Ein Verne +gggwvg +VVatt +will +xhal +Shell 沙漠之子 +Qliangw Wang Yujia -Shell -xhal -will -VVatt -gggwvg alfred -duzhuoshanwai -Ein Verne BingCoke FunKeen Jeremy2214 @@ -367,11 +366,11 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. gedune gang.yang ecjtusbs +duzhuoshanwai dongpohezui Deny dayday cxalc -Q.Ben Zheng Yidan Wang bycs 远方 @@ -404,6 +403,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. shc sfwwslm rexlin600 +Q.Ben Zheng Mystic MinsonLee Marnm From b8469913bda874ad4e6565feeb82b03a5123be22 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 11 Jan 2025 03:08:24 +0000 Subject: [PATCH 1238/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index 65bfe00654f..6baa3744322 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -22,24 +22,23 @@ ernest dulltackle zyy2477 +rgshare +loverainye SteveLauC YEUNGCHIE +lavaicer MioMuse James Wang -lavaicer -loverainye -rgshare -Qliangw +Ein Verne +gggwvg +VVatt +will +xhal +Shell 沙漠之子 +Qliangw Wang Yujia -Shell -xhal -will -VVatt -gggwvg alfred -duzhuoshanwai -Ein Verne BingCoke FunKeen Jeremy2214 @@ -77,11 +76,11 @@ gedune gang.yang ecjtusbs +duzhuoshanwai dongpohezui Deny dayday cxalc -Q.Ben Zheng Yidan Wang bycs 远方 @@ -114,6 +113,7 @@ shc sfwwslm rexlin600 +Q.Ben Zheng Mystic MinsonLee Marnm From 025cc0024d82a286a8a23e6f321c54df23f96d48 Mon Sep 17 00:00:00 2001 From: Shan Chenyu <103872353+ischenyu@users.noreply.github.com> Date: Sat, 1 Feb 2025 20:05:37 +0800 Subject: [PATCH 1239/1284] doc: Update README.md (#631) Replaced the expired domain name --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fc680067304..e7e400ce4c2 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ **推荐使用的镜像 web 版本** -[**`linuxsearch.largeinfo.cc`**](http://linuxsearch.largeinfo.cc),[**`srebro.cn`**](https://linux.srebro.cn/),[**`getaifun.com`**](https://getaifun.com/linux),[**`linux.devonline.net`**](http://linux.devonline.net/),[**`man.zch.ooo`**](https://man.zch.ooo/),[**`linux.mmoke.com`**](https://linux.mmoke.com),[**`bqrdh.com`**](https://tools.bqrdh.com/linux-command/),[**`linux.zyimm.com`**](http://linux.zyimm.com/),[**`linux.vovuo.com`**](https://linux.vovuo.com/),[`linux.liguiying.cn`](https://linux.liguiying.cn/), [`renye.net`](https://renye.net/), [`diqi.org`](https://diqi.org/),[`linux.alistnas.xyz`](https://linux.alistnas.xyz/),[`nenufm.com`](https://www.nenufm.com/linux-command/) +[**`linuxsearch.largeinfo.cc`**](http://linuxsearch.largeinfo.cc),[**`srebro.cn`**](https://linux.srebro.cn/),[**`getaifun.com`**](https://getaifun.com/linux),[**`linux.devonline.net`**](http://linux.devonline.net/),[**`man.zch.ooo`**](https://man.zch.ooo/),[**`linux.mmoke.com`**](https://linux.mmoke.com),[**`bqrdh.com`**](https://tools.bqrdh.com/linux-command/),[**`linux.zyimm.com`**](http://linux.zyimm.com/),[**`linux.vovuo.com`**](https://linux.vovuo.com/),[`linux.liguiying.cn`](https://linux.liguiying.cn/), [`renye.net`](https://renye.net/), [`diqi.org`](https://diqi.org/),[`linux.alistnas.top`](https://linux.alistnas.top/),[`nenufm.com`](https://www.nenufm.com/linux-command/) **其它 web 版本** From 5e883e0dd3f2dca3325c0741d2855cc27dcae21b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 1 Feb 2025 12:06:10 +0000 Subject: [PATCH 1240/1284] doc: update README.md. --- README.md | 62 +++++++++++++++++++++++++++---------------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index e7e400ce4c2..9de0b9d1ce2 100644 --- a/README.md +++ b/README.md @@ -312,41 +312,42 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. ernest dulltackle zyy2477 -rgshare -loverainye SteveLauC -YEUNGCHIE -lavaicer MioMuse +Shan Chenyu James Wang -Ein Verne -gggwvg -VVatt -will -xhal -Shell -沙漠之子 +YEUNGCHIE +lavaicer +loverainye +rgshare Qliangw Wang Yujia +沙漠之子 alfred -BingCoke -FunKeen -Jeremy2214 -Pan, Wen-Ming -QinShower -RichardLCD -Shan Chenyu -Xingwen Zhang -Xrtero -YH -Alterem +Shell +xhal +will +VVatt +gggwvg +duzhuoshanwai Dazhuangw -jqz3.tech -juemuren4449 -kassadin -kid1412621 -leo +Alterem +YH +Xrtero +Xingwen Zhang +RichardLCD +QinShower +Pan, Wen-Ming +Jeremy2214 +FunKeen +BingCoke +Ein Verne lewis1573 +leo +kid1412621 +kassadin +juemuren4449 +jqz3.tech linuxwd Ricardowang cole @@ -366,11 +367,11 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. gedune gang.yang ecjtusbs -duzhuoshanwai dongpohezui Deny dayday cxalc +Q.Ben Zheng Yidan Wang bycs 远方 @@ -403,7 +404,6 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. shc sfwwslm rexlin600 -Q.Ben Zheng Mystic MinsonLee Marnm @@ -423,11 +423,11 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Jack Huntout Zhang HighScorePlayer -Herbert8 +重劍無鋒 Guiying Li Frankie Divenire -Derek +Derek Danny DaYangtuo247 Cui Yang From 9585b89cda8f292b898a0d8135dc7aca5d303541 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 1 Feb 2025 12:06:11 +0000 Subject: [PATCH 1241/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 62 +++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index 6baa3744322..9abf086e703 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -22,41 +22,42 @@ ernest dulltackle zyy2477 -rgshare -loverainye SteveLauC -YEUNGCHIE -lavaicer MioMuse +Shan Chenyu James Wang -Ein Verne -gggwvg -VVatt -will -xhal -Shell -沙漠之子 +YEUNGCHIE +lavaicer +loverainye +rgshare Qliangw Wang Yujia +沙漠之子 alfred -BingCoke -FunKeen -Jeremy2214 -Pan, Wen-Ming -QinShower -RichardLCD -Shan Chenyu -Xingwen Zhang -Xrtero -YH -Alterem +Shell +xhal +will +VVatt +gggwvg +duzhuoshanwai Dazhuangw -jqz3.tech -juemuren4449 -kassadin -kid1412621 -leo +Alterem +YH +Xrtero +Xingwen Zhang +RichardLCD +QinShower +Pan, Wen-Ming +Jeremy2214 +FunKeen +BingCoke +Ein Verne lewis1573 +leo +kid1412621 +kassadin +juemuren4449 +jqz3.tech linuxwd Ricardowang cole @@ -76,11 +77,11 @@ gedune gang.yang ecjtusbs -duzhuoshanwai dongpohezui Deny dayday cxalc +Q.Ben Zheng Yidan Wang bycs 远方 @@ -113,7 +114,6 @@ shc sfwwslm rexlin600 -Q.Ben Zheng Mystic MinsonLee Marnm @@ -133,11 +133,11 @@ Jack Huntout Zhang HighScorePlayer -Herbert8 +重劍無鋒 Guiying Li Frankie Divenire -Derek +Derek Danny DaYangtuo247 Cui Yang From 87a3efdb86e115c0682604b59be0e7d6e3c2659b Mon Sep 17 00:00:00 2001 From: waiwai <131680154+waiwai24@users.noreply.github.com> Date: Mon, 10 Feb 2025 09:09:59 +0800 Subject: [PATCH 1242/1284] Add nstat.md and updata Readme.md (#632) * Update README.md * Update README.md * add nstat.md --- README.md | 2 +- command/nstat.md | 137 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 138 insertions(+), 1 deletion(-) create mode 100644 command/nstat.md diff --git a/README.md b/README.md index 9de0b9d1ce2..c2618a74d4a 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ [![jsdelivr cdn](https://data.jsdelivr.com/v1/package/npm/linux-command/badge)](https://www.jsdelivr.com/package/npm/linux-command) [![Docker Image Size (latest by date)](https://img.shields.io/docker/image-size/wcjiang/linux-command?logo=docker)](https://hub.docker.com/r/wcjiang/linux-command) -当前仓库搜集了 580 多个 Linux 命令,是一个非盈利性的仓库,生成了一个 web 网站方便使用,目前网站没有任何广告,内容包含 Linux 命令手册、详解、学习,内容来自网络和网友的补充,非常值得收藏的 Linux 命令速查手册。版权归属原作者,对任何法律问题及风险不承担任何责任,没有任何商业目的,如果认为侵犯了您的版权,请来信告知。我不能完全保证内容的正确性。通过使用本站内容带来的风险与我无关。当使用本站时,代表您已接受了本站的使用条款和隐私条款。 +当前仓库搜集了 600 多个 Linux 命令,是一个非盈利性的仓库,生成了一个 web 网站方便使用,目前网站没有任何广告,内容包含 Linux 命令手册、详解、学习,内容来自网络和网友的补充,非常值得收藏的 Linux 命令速查手册。版权归属原作者,对任何法律问题及风险不承担任何责任,没有任何商业目的,如果认为侵犯了您的版权,请来信告知。我不能完全保证内容的正确性。通过使用本站内容带来的风险与我无关。当使用本站时,代表您已接受了本站的使用条款和隐私条款。 ## Web 版本 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 From b066d7a2dad799696c7c2125a9998c23d094be4e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 10 Feb 2025 01:10:31 +0000 Subject: [PATCH 1243/1284] doc: update README.md. --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index c2618a74d4a..8910741d6c7 100644 --- a/README.md +++ b/README.md @@ -342,13 +342,12 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. FunKeen BingCoke Ein Verne +linuxwd lewis1573 leo kid1412621 kassadin juemuren4449 -jqz3.tech -linuxwd Ricardowang cole dufu @@ -356,6 +355,8 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. noodles2hg nsnans oliver +rexlin600 +jqz3.tech jcdj666 hululu1068 huangyao @@ -371,7 +372,6 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Deny dayday cxalc -Q.Ben Zheng Yidan Wang bycs 远方 @@ -396,6 +396,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. yanyx Lingfeng Wang weibk +waiwai UniqueDing tutianyu101 tangke @@ -403,7 +404,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. shuangcui shc sfwwslm -rexlin600 +Q.Ben Zheng Mystic MinsonLee Marnm From d0a57388a37a87afc719ed9cedcc58fd3a1625f1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 10 Feb 2025 01:10:31 +0000 Subject: [PATCH 1244/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index 9abf086e703..df27ac528f9 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -52,13 +52,12 @@ FunKeen BingCoke Ein Verne +linuxwd lewis1573 leo kid1412621 kassadin juemuren4449 -jqz3.tech -linuxwd Ricardowang cole dufu @@ -66,6 +65,8 @@ noodles2hg nsnans oliver +rexlin600 +jqz3.tech jcdj666 hululu1068 huangyao @@ -81,7 +82,6 @@ Deny dayday cxalc -Q.Ben Zheng Yidan Wang bycs 远方 @@ -106,6 +106,7 @@ yanyx Lingfeng Wang weibk +waiwai UniqueDing tutianyu101 tangke @@ -113,7 +114,7 @@ shuangcui shc sfwwslm -rexlin600 +Q.Ben Zheng Mystic MinsonLee Marnm From 4ce13f3cd8284ee782f0467fbd1491aeb34c8593 Mon Sep 17 00:00:00 2001 From: Jelly <141554249+JellyObjeck@users.noreply.github.com> Date: Mon, 10 Feb 2025 18:31:43 +0800 Subject: [PATCH 1245/1284] doc: Update vi.md (#633) --- command/vi.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/command/vi.md b/command/vi.md index 63ce4a16539..7536619c178 100644 --- a/command/vi.md +++ b/command/vi.md @@ -99,6 +99,9 @@ vi和ex编辑器的功能是相同的,二者的主要区别是用户界面。 则从文件第一行至文件末尾($)将大写I全部替换成小写i。vi编辑器的三种工作方式之间的转换如图所示。 !vi +【查看行号】 +在 vi 或 vim 编辑器中,按 Esc,然后输入: +:set number From 60d460c5b30284749424d968c078fb9d97494188 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 10 Feb 2025 10:32:09 +0000 Subject: [PATCH 1246/1284] doc: update README.md. --- README.md | 97 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 49 insertions(+), 48 deletions(-) diff --git a/README.md b/README.md index 8910741d6c7..67ab431e46e 100644 --- a/README.md +++ b/README.md @@ -348,6 +348,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. kid1412621 kassadin juemuren4449 +Forever121 Ricardowang cole dufu @@ -356,55 +357,54 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. nsnans oliver rexlin600 -jqz3.tech -jcdj666 -hululu1068 -huangyao -hotdogc1017 -gcluffy -githubwxz -ghy -gesty -gedune -gang.yang -ecjtusbs -dongpohezui -Deny -dayday cxalc -Yidan Wang -bycs -远方 -谢民皆 -Kyofin -老犁 -继刚 -移动的红烧肉 -极简XksA -ReZero -扶苏如是 -Loofra -Wei Xu -尘埃 -孤城落寞 +dayday +Deny +dongpohezui +ecjtusbs +gang.yang +gedune +gesty +ghy +githubwxz +gcluffy +hotdogc1017 +huangyao +hululu1068 +jcdj666 +jqz3.tech 七朔 -zyimm -zuixin369 -zoomdong -zodiac -zjlovezj -yanyx -Lingfeng Wang -weibk -waiwai -UniqueDing -tutianyu101 -tangke -snovey -shuangcui -shc +孤城落寞 +尘埃 +Wei Xu +Loofra +扶苏如是 +ReZero +极简XksA +移动的红烧肉 +继刚 +老犁 +Kyofin +谢民皆 +远方 +bycs +Yidan Wang sfwwslm -Q.Ben Zheng +shc +shuangcui +snovey +tangke +tutianyu101 +UniqueDing +waiwai +weibk +Lingfeng Wang +yanyx +zjlovezj +zodiac +zoomdong +zuixin369 +zyimm Mystic MinsonLee Marnm @@ -420,6 +420,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. LaudOak Karl Horky Nexchard +Jelly Jack.A.Black Jack Huntout Zhang @@ -435,7 +436,6 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. azroy Alan 0x_000 -Forever121 chaofan c2ch brinkqiang @@ -465,7 +465,8 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Rocher Robigus Rining Wu -Ray Yee +Ray Yee +Q.Ben Zheng 贡献者列表,由 [contributors](https://github.com/jaywcjlove/github-action-contributors) 自动生成 From 5ff4e61c6d33846c8e0939ed7d65bc07937c6e05 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 10 Feb 2025 10:32:10 +0000 Subject: [PATCH 1247/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 97 ++++++++++++++++++++------------------- 1 file changed, 49 insertions(+), 48 deletions(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index df27ac528f9..dab9e0bdc01 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -58,6 +58,7 @@ kid1412621 kassadin juemuren4449 +Forever121 Ricardowang cole dufu @@ -66,55 +67,54 @@ nsnans oliver rexlin600 -jqz3.tech -jcdj666 -hululu1068 -huangyao -hotdogc1017 -gcluffy -githubwxz -ghy -gesty -gedune -gang.yang -ecjtusbs -dongpohezui -Deny -dayday cxalc -Yidan Wang -bycs -远方 -谢民皆 -Kyofin -老犁 -继刚 -移动的红烧肉 -极简XksA -ReZero -扶苏如是 -Loofra -Wei Xu -尘埃 -孤城落寞 +dayday +Deny +dongpohezui +ecjtusbs +gang.yang +gedune +gesty +ghy +githubwxz +gcluffy +hotdogc1017 +huangyao +hululu1068 +jcdj666 +jqz3.tech 七朔 -zyimm -zuixin369 -zoomdong -zodiac -zjlovezj -yanyx -Lingfeng Wang -weibk -waiwai -UniqueDing -tutianyu101 -tangke -snovey -shuangcui -shc +孤城落寞 +尘埃 +Wei Xu +Loofra +扶苏如是 +ReZero +极简XksA +移动的红烧肉 +继刚 +老犁 +Kyofin +谢民皆 +远方 +bycs +Yidan Wang sfwwslm -Q.Ben Zheng +shc +shuangcui +snovey +tangke +tutianyu101 +UniqueDing +waiwai +weibk +Lingfeng Wang +yanyx +zjlovezj +zodiac +zoomdong +zuixin369 +zyimm Mystic MinsonLee Marnm @@ -130,6 +130,7 @@ LaudOak Karl Horky Nexchard +Jelly Jack.A.Black Jack Huntout Zhang @@ -145,7 +146,6 @@ azroy Alan 0x_000 -Forever121 chaofan c2ch brinkqiang @@ -175,7 +175,8 @@ Rocher Robigus Rining Wu -Ray Yee +Ray Yee +Q.Ben Zheng

数据来源于 GitHub Contributors,使用action-contributors创建。 From a4a9cdaf17a21cb403eba356230ed4b11283d379 Mon Sep 17 00:00:00 2001 From: Xrtero <55886907+Xrtero@users.noreply.github.com> Date: Tue, 18 Feb 2025 13:39:39 +0800 Subject: [PATCH 1248/1284] doc: Update pacman.md (#634) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit update(doc):添加pacman的一些示例 --- command/pacman.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/command/pacman.md b/command/pacman.md index 83b953f2954..60ce0307a04 100644 --- a/command/pacman.md +++ b/command/pacman.md @@ -10,15 +10,20 @@ Arch Linux 系统及其衍生系统中默认使用的包管理器 ## 实例 ### 安装软件包 - +官方软件包 ```bash pacman -S p7zip ``` -也可以安装一个软件包组 +非官方软件包(用户制作) +```bash +yay -S package_name1 package_name2 ... +``` + +### 查询软件包 ```bash -pacman -S gnome +pacman -Ss package_name1 package_name2 ... ``` ### 列出所有软件包 From e5c4b39384a16448fe358d658ed63e2129f7e055 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 18 Feb 2025 05:40:28 +0000 Subject: [PATCH 1249/1284] doc: update README.md. --- README.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 67ab431e46e..cb037d1d429 100644 --- a/README.md +++ b/README.md @@ -312,28 +312,28 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. ernest dulltackle zyy2477 +rgshare +loverainye +lavaicer +YEUNGCHIE SteveLauC MioMuse -Shan Chenyu +Xrtero James Wang -YEUNGCHIE -lavaicer -loverainye -rgshare +Shan Chenyu +duzhuoshanwai +gggwvg +VVatt +will +xhal +Shell +沙漠之子 Qliangw Wang Yujia -沙漠之子 alfred -Shell -xhal -will -VVatt -gggwvg -duzhuoshanwai Dazhuangw Alterem YH -Xrtero Xingwen Zhang RichardLCD QinShower From 86cb964667a680019c456c71a45eed09889115e2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 18 Feb 2025 05:40:29 +0000 Subject: [PATCH 1250/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index dab9e0bdc01..61f29d0860f 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -22,28 +22,28 @@ ernest dulltackle zyy2477 +rgshare +loverainye +lavaicer +YEUNGCHIE SteveLauC MioMuse -Shan Chenyu +Xrtero James Wang -YEUNGCHIE -lavaicer -loverainye -rgshare +Shan Chenyu +duzhuoshanwai +gggwvg +VVatt +will +xhal +Shell +沙漠之子 Qliangw Wang Yujia -沙漠之子 alfred -Shell -xhal -will -VVatt -gggwvg -duzhuoshanwai Dazhuangw Alterem YH -Xrtero Xingwen Zhang RichardLCD QinShower From 6fcaf53f18960d4138c3d4173b0a79d81fab07fb Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Fri, 21 Feb 2025 08:44:04 +0800 Subject: [PATCH 1251/1284] released v1.20.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8bba58fe3ac..a5b637f755c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "linux-command", - "version": "1.19.1", + "version": "1.20.0", "description": "Linux Command", "homepage": "https://jaywcjlove.github.io/linux-command/", "main": "dist/data.json", From 4ce1d2da7ad35afac5aefe2b0a072a89979536c5 Mon Sep 17 00:00:00 2001 From: Github1977 <68886053+li7355608@users.noreply.github.com> Date: Mon, 24 Feb 2025 11:58:57 +0800 Subject: [PATCH 1252/1284] faet: add ufw.md (#636) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Create ufw.md 新增ufw命令 * Update ufw.md 修改标题获取 * Update ufw.md 规范格式 --- command/ufw.md | 104 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 command/ufw.md diff --git a/command/ufw.md b/command/ufw.md new file mode 100644 index 00000000000..43ce91a1289 --- /dev/null +++ b/command/ufw.md @@ -0,0 +1,104 @@ +ufw +=== + +ubuntu防火墙管理工具 + +## 概要 + +```shell +sudo ufw [选项] [规则/命令] +``` + +## 用途 + +- 管理Ubuntu系统防火墙规则,简化`iptables`操作。 +- 启用或禁用防火墙,查看当前防火墙状态。 +- 快速配置允许/拒绝端口、服务或特定IP的访问。 + +## 参数 + +### 常用操作命令 + +- `enable`: 启用防火墙并设置开机自启。 +- `disable`: 关闭防火墙。 +- `reload`: 重新加载防火墙规则(不中断现有连接)。 +- `reset`: 重置所有规则到初始状态。 +- `allow `: 允许指定规则(如端口、服务)。 +- `deny `: 拒绝指定规则。 +- `status`: 显示防火墙状态和规则列表。 + +### 规则格式 + +- ``: 端口号(如 `22`、`80/tcp`)。 +- ``: 协议类型(`tcp` 或 `udp`)。 +- `comment `: 为规则添加注释(需配合 `allow`/`deny` 使用)。 + +### 选项 + +- `--dry-run`: 仅显示规则变更,不实际应用。 + +------ + +## 返回值 + +- 成功执行返回 `0`。 +- 错误或无效参数返回非零值。 + +------ + +## 示例 + +### 基础操作 + +``` +# 启用防火墙 +sudo ufw enable + +# 关闭防火墙 +sudo ufw disable + +# 查看防火墙状态 +sudo ufw status +``` + +### 规则配置 + +``` +# 允许SSH默认端口(22/tcp) +sudo ufw allow ssh + +# 允许TCP协议的8080端口并添加注释 +sudo ufw allow 8080/tcp comment "Web Server" + +# 拒绝来自192.168.1.5的访问 +sudo ufw deny from 192.168.1.5 + +# 拒绝UDP协议的53端口 +sudo ufw deny 53/udp +``` + +### 高级操作 + +``` +# 显示带编号的规则列表(便于删除) +sudo ufw status numbered + +# 删除第3条规则 +sudo ufw delete 3 + +# 重置所有规则 +sudo ufw reset +``` + +------ + +## 注意 + +1. **权限要求**:需使用 `sudo` 执行命令。 +2. **默认策略**:首次启用时默认阻止所有入站流量,允许所有出站流量。 +3. **规则优先级**: + 规则按顺序匹配,先拒绝后允许可能导致冲突 +4. **日志记录**: + 可通过 `sudo ufw logging on` 启用日志,日志路径为 `/var/log/ufw.log` +5. **服务名称支持**: + 支持 `/etc/services` 中定义的服务名(如 `http`、`ssh`) From 8cf952e395224f60a4015b11993675191891736f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 24 Feb 2025 03:59:41 +0000 Subject: [PATCH 1253/1284] doc: update README.md. --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index cb037d1d429..27d623d80a7 100644 --- a/README.md +++ b/README.md @@ -345,7 +345,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. linuxwd lewis1573 leo -kid1412621 +NanoNova kassadin juemuren4449 Forever121 @@ -405,7 +405,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. zoomdong zuixin369 zyimm -Mystic +chaofan MinsonLee Marnm mwei @@ -427,6 +427,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. HighScorePlayer 重劍無鋒 Guiying Li +Github1977 Frankie Divenire Derek @@ -436,7 +437,6 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. azroy Alan 0x_000 -chaofan c2ch brinkqiang bestlaw66 @@ -466,7 +466,8 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Robigus Rining Wu Ray Yee -Q.Ben Zheng +Q.Ben Zheng +Mystic 贡献者列表,由 [contributors](https://github.com/jaywcjlove/github-action-contributors) 自动生成 From 4d8d6c86913c43f6469a2fae55f3b20a14b3799d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 24 Feb 2025 03:59:42 +0000 Subject: [PATCH 1254/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index 61f29d0860f..220d95ff8ef 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -55,7 +55,7 @@ linuxwd lewis1573 leo -kid1412621 +NanoNova kassadin juemuren4449 Forever121 @@ -115,7 +115,7 @@ zoomdong zuixin369 zyimm -Mystic +chaofan MinsonLee Marnm mwei @@ -137,6 +137,7 @@ HighScorePlayer 重劍無鋒 Guiying Li +Github1977 Frankie Divenire Derek @@ -146,7 +147,6 @@ azroy Alan 0x_000 -chaofan c2ch brinkqiang bestlaw66 @@ -176,7 +176,8 @@ Robigus Rining Wu Ray Yee -Q.Ben Zheng +Q.Ben Zheng +Mystic

数据来源于 GitHub Contributors,使用action-contributors创建。 From 74e3582ea24f489605f3dbd066b3ecfdd78cd1e6 Mon Sep 17 00:00:00 2001 From: hanwei Date: Tue, 25 Feb 2025 12:06:53 +0800 Subject: [PATCH 1255/1284] doc: Update vi.md (#637) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 有些符号是全角中文,应该改为半角英文 --- command/vi.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/command/vi.md b/command/vi.md index 7536619c178..6f78d225eab 100644 --- a/command/vi.md +++ b/command/vi.md @@ -28,7 +28,7 @@ nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为 p:粘贴文本操作,用于将缓存区的内容粘贴到当前光标所在位置的下方; P:粘贴文本操作,用于将缓存区的内容粘贴到当前光标所在位置的上方; /字符串:文本查找操作,用于从当前光标所在位置开始向文件尾部查找指定字符串的内容,查找的字符串会被加亮显示; -?字符串:文本查找操作,用于从当前光标所在位置开始向文件头部查找指定字符串的内容,查找的字符串会被加亮显示; +?字符串:文本查找操作,用于从当前光标所在位置开始向文件头部查找指定字符串的内容,查找的字符串会被加亮显示; a,bs/F/T:替换文本操作,用于在第a行到第b行之间,将F字符串换成T字符串。其中,“s/”表示进行替换操作; a:在当前字符后添加文本; A:在行末添加文本; @@ -38,9 +38,9 @@ o:在当前行后面插入一空行; O:在当前行前面插入一空行; :wq:在命令模式下,执行存盘退出操作; :w:在命令模式下,执行存盘操作; -:w!:在命令模式下,执行强制存盘操作; +:w!:在命令模式下,执行强制存盘操作; :q:在命令模式下,执行退出vi操作; -:q!:在命令模式下,执行强制退出vi操作; +:q!:在命令模式下,执行强制退出vi操作; :e文件名:在命令模式下,打开并编辑指定名称的文件; :n:在命令模式下,如果同时打开多个文件,则继续编辑下一个文件; :f:在命令模式下,用于显示当前的文件名、光标所在行的行号以及显示比例; From 9b2c3111d23d799b8007f09b5d5df659429aaa5e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 25 Feb 2025 04:07:19 +0000 Subject: [PATCH 1256/1284] doc: update README.md. --- README.md | 66 +++++++++++++++++++++++++++---------------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index 27d623d80a7..0e221593088 100644 --- a/README.md +++ b/README.md @@ -321,34 +321,34 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Xrtero James Wang Shan Chenyu -duzhuoshanwai +BingCoke gggwvg VVatt will xhal Shell 沙漠之子 -Qliangw -Wang Yujia alfred +Wang Yujia +Qliangw +Ein Verne +FunKeen +Jeremy2214 +Pan, Wen-Ming +QinShower +duzhuoshanwai Dazhuangw Alterem -YH -Xingwen Zhang RichardLCD -QinShower -Pan, Wen-Ming -Jeremy2214 -FunKeen -BingCoke -Ein Verne -linuxwd -lewis1573 -leo -NanoNova -kassadin +Xingwen Zhang +YH +jqz3.tech juemuren4449 -Forever121 +kassadin +NanoNova +leo +lewis1573 +linuxwd Ricardowang cole dufu @@ -356,23 +356,23 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. noodles2hg nsnans oliver -rexlin600 -cxalc -dayday -Deny -dongpohezui -ecjtusbs -gang.yang -gedune -gesty -ghy -githubwxz -gcluffy -hotdogc1017 -huangyao -hululu1068 jcdj666 -jqz3.tech +hululu1068 +huangyao +hotdogc1017 +gcluffy +githubwxz +ghy +gesty +gedune +gang.yang +ecjtusbs +dongpohezui +Deny +dayday +cxalc +Forever121 +rexlin600 七朔 孤城落寞 尘埃 From b15713b8677cdb7ef12c0fc809bb9283c9776d4d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 25 Feb 2025 04:07:20 +0000 Subject: [PATCH 1257/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 66 +++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index 220d95ff8ef..45f19124345 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -31,34 +31,34 @@ Xrtero James Wang Shan Chenyu -duzhuoshanwai +BingCoke gggwvg VVatt will xhal Shell 沙漠之子 -Qliangw -Wang Yujia alfred +Wang Yujia +Qliangw +Ein Verne +FunKeen +Jeremy2214 +Pan, Wen-Ming +QinShower +duzhuoshanwai Dazhuangw Alterem -YH -Xingwen Zhang RichardLCD -QinShower -Pan, Wen-Ming -Jeremy2214 -FunKeen -BingCoke -Ein Verne -linuxwd -lewis1573 -leo -NanoNova -kassadin +Xingwen Zhang +YH +jqz3.tech juemuren4449 -Forever121 +kassadin +NanoNova +leo +lewis1573 +linuxwd Ricardowang cole dufu @@ -66,23 +66,23 @@ noodles2hg nsnans oliver -rexlin600 -cxalc -dayday -Deny -dongpohezui -ecjtusbs -gang.yang -gedune -gesty -ghy -githubwxz -gcluffy -hotdogc1017 -huangyao -hululu1068 jcdj666 -jqz3.tech +hululu1068 +huangyao +hotdogc1017 +gcluffy +githubwxz +ghy +gesty +gedune +gang.yang +ecjtusbs +dongpohezui +Deny +dayday +cxalc +Forever121 +rexlin600 七朔 孤城落寞 尘埃 From 984f1fa82f797c86b05443cc104b23516c8f59bd Mon Sep 17 00:00:00 2001 From: illmons Date: Mon, 3 Mar 2025 22:27:45 +0800 Subject: [PATCH 1258/1284] doc: update command/losetup.md (#639) --- command/losetup.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/command/losetup.md b/command/losetup.md index 237436c97df..bedaea698b2 100644 --- a/command/losetup.md +++ b/command/losetup.md @@ -45,7 +45,7 @@ losetup [ -d ] loop_device dd if=/dev/zero of=floppy.img bs=512 count=2880 ``` -使用 losetup将磁盘镜像文件虚拟成快设备: +使用 losetup 将磁盘镜像文件虚拟成块设备: ```shell losetup /dev/loop1 floppy.img @@ -57,7 +57,7 @@ losetup /dev/loop1 floppy.img mount /dev/loop0 /tmp ``` -经过上面的三步之后,我们就可以通过/tmp目录,像访问真实快设备一样来访问磁盘镜像文件floppy.img。 +经过上面的三步之后,我们就可以通过/tmp目录,像访问真实块设备一样来访问磁盘镜像文件floppy.img。 卸载loop设备: From 6494d44c0666e69c8da911e87ef3e989b49a92c2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 3 Mar 2025 14:28:21 +0000 Subject: [PATCH 1259/1284] doc: update README.md. --- README.md | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 0e221593088..1188d762b50 100644 --- a/README.md +++ b/README.md @@ -340,8 +340,9 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Dazhuangw Alterem RichardLCD -Xingwen Zhang YH +Xingwen Zhang +Mystic jqz3.tech juemuren4449 kassadin @@ -356,22 +357,22 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. noodles2hg nsnans oliver -jcdj666 -hululu1068 -huangyao -hotdogc1017 -gcluffy -githubwxz -ghy -gesty -gedune -gang.yang -ecjtusbs -dongpohezui -Deny -dayday cxalc -Forever121 +dayday +Deny +dongpohezui +ecjtusbs +gang.yang +gedune +gesty +ghy +githubwxz +hanwei +gcluffy +hotdogc1017 +huangyao +hululu1068 +jcdj666 rexlin600 七朔 孤城落寞 @@ -405,7 +406,6 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. zoomdong zuixin369 zyimm -chaofan MinsonLee Marnm mwei @@ -437,6 +437,8 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. azroy Alan 0x_000 +Forever121 +chaofan c2ch brinkqiang bestlaw66 @@ -466,8 +468,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Robigus Rining Wu Ray Yee -Q.Ben Zheng -Mystic +Q.Ben Zheng 贡献者列表,由 [contributors](https://github.com/jaywcjlove/github-action-contributors) 自动生成 From cea25ecad65a25e368fa359e4e15c8980ebe33d4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 3 Mar 2025 14:28:22 +0000 Subject: [PATCH 1260/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index 45f19124345..0472d7c490c 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -50,8 +50,9 @@ Dazhuangw Alterem RichardLCD -Xingwen Zhang YH +Xingwen Zhang +Mystic jqz3.tech juemuren4449 kassadin @@ -66,22 +67,22 @@ noodles2hg nsnans oliver -jcdj666 -hululu1068 -huangyao -hotdogc1017 -gcluffy -githubwxz -ghy -gesty -gedune -gang.yang -ecjtusbs -dongpohezui -Deny -dayday cxalc -Forever121 +dayday +Deny +dongpohezui +ecjtusbs +gang.yang +gedune +gesty +ghy +githubwxz +hanwei +gcluffy +hotdogc1017 +huangyao +hululu1068 +jcdj666 rexlin600 七朔 孤城落寞 @@ -115,7 +116,6 @@ zoomdong zuixin369 zyimm -chaofan MinsonLee Marnm mwei @@ -147,6 +147,8 @@ azroy Alan 0x_000 +Forever121 +chaofan c2ch brinkqiang bestlaw66 @@ -176,8 +178,7 @@ Robigus Rining Wu Ray Yee -Q.Ben Zheng -Mystic +Q.Ben Zheng

数据来源于 GitHub Contributors,使用action-contributors创建。 From 184faaaac8b4f58fa586d994cc480d40c2a596f3 Mon Sep 17 00:00:00 2001 From: geekeryy Date: Tue, 8 Apr 2025 11:16:41 +0800 Subject: [PATCH 1261/1284] doc: Update README.md (#641) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1188d762b50..d679ce3eae6 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ **推荐使用的镜像 web 版本** -[**`linuxsearch.largeinfo.cc`**](http://linuxsearch.largeinfo.cc),[**`srebro.cn`**](https://linux.srebro.cn/),[**`getaifun.com`**](https://getaifun.com/linux),[**`linux.devonline.net`**](http://linux.devonline.net/),[**`man.zch.ooo`**](https://man.zch.ooo/),[**`linux.mmoke.com`**](https://linux.mmoke.com),[**`bqrdh.com`**](https://tools.bqrdh.com/linux-command/),[**`linux.zyimm.com`**](http://linux.zyimm.com/),[**`linux.vovuo.com`**](https://linux.vovuo.com/),[`linux.liguiying.cn`](https://linux.liguiying.cn/), [`renye.net`](https://renye.net/), [`diqi.org`](https://diqi.org/),[`linux.alistnas.top`](https://linux.alistnas.top/),[`nenufm.com`](https://www.nenufm.com/linux-command/) +[**`linuxsearch.largeinfo.cc`**](http://linuxsearch.largeinfo.cc),[**`srebro.cn`**](https://linux.srebro.cn/),[**`getaifun.com`**](https://getaifun.com/linux),[**`linux.devonline.net`**](http://linux.devonline.net/),[**`man.zch.ooo`**](https://man.zch.ooo/),[**`linux.mmoke.com`**](https://linux.mmoke.com),[**`bqrdh.com`**](https://tools.bqrdh.com/linux-command/),[**`linux.zyimm.com`**](http://linux.zyimm.com/),[**`linux.vovuo.com`**](https://linux.vovuo.com/),[`linux.liguiying.cn`](https://linux.liguiying.cn/), [`renye.net`](https://renye.net/), [`diqi.org`](https://diqi.org/),[`linux.alistnas.top`](https://linux.alistnas.top/),[`nenufm.com`](https://www.nenufm.com/linux-command/), [`linux.jiangyang.online`](https://linux.jiangyang.online/) **其它 web 版本** From 08b80e8206507ba811bda67215f4c01a48a08e36 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 8 Apr 2025 03:17:16 +0000 Subject: [PATCH 1262/1284] doc: update README.md. --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d679ce3eae6..b4e7b0e0605 100644 --- a/README.md +++ b/README.md @@ -342,7 +342,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. RichardLCD YH Xingwen Zhang -Mystic +cxalc jqz3.tech juemuren4449 kassadin @@ -357,7 +357,6 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. noodles2hg nsnans oliver -cxalc dayday Deny dongpohezui @@ -372,6 +371,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. hotdogc1017 huangyao hululu1068 +illmons jcdj666 rexlin600 七朔 @@ -406,6 +406,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. zoomdong zuixin369 zyimm +Mystic MinsonLee Marnm mwei From e4a5781542bc6fd0bb72db5e017b6090ac4efadb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 8 Apr 2025 03:17:17 +0000 Subject: [PATCH 1263/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index 0472d7c490c..2af191f255a 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -52,7 +52,7 @@ RichardLCD YH Xingwen Zhang -Mystic +cxalc jqz3.tech juemuren4449 kassadin @@ -67,7 +67,6 @@ noodles2hg nsnans oliver -cxalc dayday Deny dongpohezui @@ -82,6 +81,7 @@ hotdogc1017 huangyao hululu1068 +illmons jcdj666 rexlin600 七朔 @@ -116,6 +116,7 @@ zoomdong zuixin369 zyimm +Mystic MinsonLee Marnm mwei From 3c1b8ca90cb8432afee0b77601632c69b68197b3 Mon Sep 17 00:00:00 2001 From: focksor Date: Wed, 9 Apr 2025 12:58:33 +0800 Subject: [PATCH 1264/1284] doc: atop.md, git.md (#642) --- command/atop.md | 8 ++--- command/git.md | 80 ++++++++++++++++++++++++++++++++++--------------- 2 files changed, 60 insertions(+), 28 deletions(-) diff --git a/command/atop.md b/command/atop.md index 0b5535f1f10..ca04cc49b93 100644 --- a/command/atop.md +++ b/command/atop.md @@ -24,9 +24,9 @@ atop [选项] [参数] 该列显示进程整体运行情况: - sys、usr字段分别指示进程在内核态和用户态的运行时间 -- #proc字段指示进程总数 -- #zombie字段指示僵尸进程的数量 -- #exit字段指示atop采样周期期间退出的进程数量 +- `#proc` 字段指示进程总数 +- `#zombie` 字段指示僵尸进程的数量 +- `#exit` 字段指示atop采样周期期间退出的进程数量 ### CPU列 @@ -111,4 +111,4 @@ atop开发者提供了以上日志保存方式,相应的`atop.daily`脚本可 ## 相关资料 -- [官方手册](http://www.atoptool.nl/download/man_atop-1.pdf) \ No newline at end of file +- [官方手册](http://www.atoptool.nl/download/man_atop-1.pdf) diff --git a/command/git.md b/command/git.md index 2c7ea45b20a..7295ee20e29 100644 --- a/command/git.md +++ b/command/git.md @@ -63,25 +63,35 @@ 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 @@ -93,9 +103,11 @@ 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 <版本库的网址> <本地目录名>` @@ -156,7 +168,9 @@ ssh -T git@github.com # 测试是否成功 **3.修改config文件** -`vim ~/.ssh/config` #修改config文件,如果没有创建 `config` +```shell +vim ~/.ssh/config # 修改config文件,如果没有创建 `config` +``` ```shell Host jslite.github.com @@ -269,7 +283,9 @@ usage: git remote set-url [--push] [] or: git remote set-url --delete ``` -`git remote set-url --delete origin https://oschina.net/wang/JSLite.js.git` +```shell +git remote set-url --delete origin https://oschina.net/wang/JSLite.js.git +``` **3.推送代码** @@ -634,25 +650,35 @@ git config --global core.quotepath false ### init -`git init` #初始化 +```shell +git init # 初始化 +``` ### status -`git status` #获取状态 +```shell +git status # 获取状态 +``` ### add -`git add file` # .或*代表全部添加 -`git rm --cached ` # 在commit之前撤销git add操作 -`git reset head` # 好像比上面`git rm --cached`更方便 +```shell +git add file # .或*代表全部添加 +git rm --cached # 在commit之前撤销git add操作 +git reset head # 好像比上面`git rm --cached`更方便 +``` ### commit -`git commit -m "message"` #此处注意乱码 +```shell +git commit -m "message" # 此处注意乱码 +``` ### remote -`git remote add origin git@github.com:JSLite/test.git` #添加源 +```shell +git remote add origin git@github.com:JSLite/test.git # 添加源 +``` ### push @@ -664,9 +690,11 @@ 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 <版本库的网址> <本地目录名>` @@ -817,7 +845,9 @@ git push -u origin branchName # 提交分支到远程origin主机中 ### 拉取 -`git fetch -p` #拉取远程分支时,自动清理 远程分支已删除,本地还存在的对应同名分支。 +```shell +git fetch -p # 拉取远程分支时,自动清理 远程分支已删除,本地还存在的对应同名分支。 +``` ### 分支合并 @@ -830,7 +860,9 @@ git merge test # 将test分支合并到当前分支 ### 重命名 -`git branch -m old new` #重命名分支 +```shell +git branch -m old new # 重命名分支 +``` ### 查看 From edbe93191b66433cdbed7d1492a1a8b259c20113 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 9 Apr 2025 04:58:59 +0000 Subject: [PATCH 1265/1284] doc: update README.md. --- README.md | 165 +++++++++++++++++++++++++++--------------------------- 1 file changed, 83 insertions(+), 82 deletions(-) diff --git a/README.md b/README.md index b4e7b0e0605..3af46b03dee 100644 --- a/README.md +++ b/README.md @@ -308,20 +308,20 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Zijing Zhang Fubin Zhang __FresHmaN -谈笑风生间 -ernest dulltackle +ernest +谈笑风生间 zyy2477 rgshare loverainye lavaicer YEUNGCHIE -SteveLauC +James Wang MioMuse Xrtero -James Wang Shan Chenyu -BingCoke +SteveLauC +duzhuoshanwai gggwvg VVatt will @@ -331,24 +331,24 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. alfred Wang Yujia Qliangw -Ein Verne -FunKeen -Jeremy2214 -Pan, Wen-Ming -QinShower -duzhuoshanwai Dazhuangw Alterem -RichardLCD YH Xingwen Zhang -cxalc -jqz3.tech -juemuren4449 -kassadin -NanoNova -leo +RichardLCD +QinShower +Pan, Wen-Ming +Jeremy2214 +BingCoke +FunKeen +Ein Verne lewis1573 +leo +NanoNova +kassadin +juemuren4449 +jqz3.tech +jcdj666 linuxwd Ricardowang cole @@ -356,13 +356,15 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. miniwater noodles2hg nsnans -oliver +zyimm +0x_000 dayday Deny dongpohezui ecjtusbs gang.yang gedune +geekeryy gesty ghy githubwxz @@ -372,8 +374,6 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. huangyao hululu1068 illmons -jcdj666 -rexlin600 七朔 孤城落寞 尘埃 @@ -390,6 +390,8 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. 远方 bycs Yidan Wang +oliver +rexlin600 sfwwslm shc shuangcui @@ -405,71 +407,70 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. zodiac zoomdong zuixin369 -zyimm -Mystic -MinsonLee -Marnm -mwei -Wang -Lucien -Lix -LinuxZilong -Lin Wuxian -孟思行 -LexsionLee -Legend -LaudOak -Karl Horky Nexchard -Jelly -Jack.A.Black -Jack -Huntout Zhang -HighScorePlayer -重劍無鋒 -Guiying Li -Github1977 -Frankie -Divenire -Derek -Danny -DaYangtuo247 -Cui Yang -azroy +Karl Horky +LaudOak +Legend +LexsionLee +孟思行 +Lin Wuxian +LinuxZilong +Lix +Lucien +Wang +mwei +Marnm +MinsonLee +Mystic +Q.Ben Zheng Alan -0x_000 -Forever121 -chaofan -c2ch -brinkqiang -bestlaw66 -bell -azureology -Ashine -amit794 -One Person’s Revelry -0Knot (0KN) -Yunbin Liu -Yan Sheng -Xu Chunyang +azroy +Cui Yang +DaYangtuo247 +Danny +Derek +Divenire +Frankie +Github1977 +Guiying Li +重劍無鋒 +HighScorePlayer +Huntout Zhang +Jack +Jack.A.Black +Jelly Xonline-Tech -Xiaodong DENG -XBG -Wingrez -Na Meng -T-TRz879 -SunX -Spaghetti-C -RoachZhao -Azolla -SevenSteven -SMVirus -殇 -Rocher -Robigus -Rining Wu +Xu Chunyang +Yan Sheng +Yunbin Liu +0Knot (0KN) +One Person’s Revelry +amit794 +Ashine +azureology +bell +bestlaw66 +brinkqiang +c2ch +chaofan +Forever121 +cxalc Ray Yee -Q.Ben Zheng +Rining Wu +Robigus +Rocher +殇 +SMVirus +SevenSteven +Azolla +RoachZhao +Spaghetti-C +SunX +T-TRz879 +Na Meng +Wingrez +XBG +Xiaodong DENG 贡献者列表,由 [contributors](https://github.com/jaywcjlove/github-action-contributors) 自动生成 From 87a3114a84f601c730e7c3f85b9f6dba3463f744 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 9 Apr 2025 04:59:00 +0000 Subject: [PATCH 1266/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 165 +++++++++++++++++++------------------- 1 file changed, 83 insertions(+), 82 deletions(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index 2af191f255a..a17485db3d2 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -18,20 +18,20 @@ Zijing Zhang Fubin Zhang __FresHmaN -谈笑风生间 -ernest dulltackle +ernest +谈笑风生间 zyy2477 rgshare loverainye lavaicer YEUNGCHIE -SteveLauC +James Wang MioMuse Xrtero -James Wang Shan Chenyu -BingCoke +SteveLauC +duzhuoshanwai gggwvg VVatt will @@ -41,24 +41,24 @@ alfred Wang Yujia Qliangw -Ein Verne -FunKeen -Jeremy2214 -Pan, Wen-Ming -QinShower -duzhuoshanwai Dazhuangw Alterem -RichardLCD YH Xingwen Zhang -cxalc -jqz3.tech -juemuren4449 -kassadin -NanoNova -leo +RichardLCD +QinShower +Pan, Wen-Ming +Jeremy2214 +BingCoke +FunKeen +Ein Verne lewis1573 +leo +NanoNova +kassadin +juemuren4449 +jqz3.tech +jcdj666 linuxwd Ricardowang cole @@ -66,13 +66,15 @@ miniwater noodles2hg nsnans -oliver +zyimm +0x_000 dayday Deny dongpohezui ecjtusbs gang.yang gedune +geekeryy gesty ghy githubwxz @@ -82,8 +84,6 @@ huangyao hululu1068 illmons -jcdj666 -rexlin600 七朔 孤城落寞 尘埃 @@ -100,6 +100,8 @@ 远方 bycs Yidan Wang +oliver +rexlin600 sfwwslm shc shuangcui @@ -115,71 +117,70 @@ zodiac zoomdong zuixin369 -zyimm -Mystic -MinsonLee -Marnm -mwei -Wang -Lucien -Lix -LinuxZilong -Lin Wuxian -孟思行 -LexsionLee -Legend -LaudOak -Karl Horky Nexchard -Jelly -Jack.A.Black -Jack -Huntout Zhang -HighScorePlayer -重劍無鋒 -Guiying Li -Github1977 -Frankie -Divenire -Derek -Danny -DaYangtuo247 -Cui Yang -azroy +Karl Horky +LaudOak +Legend +LexsionLee +孟思行 +Lin Wuxian +LinuxZilong +Lix +Lucien +Wang +mwei +Marnm +MinsonLee +Mystic +Q.Ben Zheng Alan -0x_000 -Forever121 -chaofan -c2ch -brinkqiang -bestlaw66 -bell -azureology -Ashine -amit794 -One Person’s Revelry -0Knot (0KN) -Yunbin Liu -Yan Sheng -Xu Chunyang +azroy +Cui Yang +DaYangtuo247 +Danny +Derek +Divenire +Frankie +Github1977 +Guiying Li +重劍無鋒 +HighScorePlayer +Huntout Zhang +Jack +Jack.A.Black +Jelly Xonline-Tech -Xiaodong DENG -XBG -Wingrez -Na Meng -T-TRz879 -SunX -Spaghetti-C -RoachZhao -Azolla -SevenSteven -SMVirus -殇 -Rocher -Robigus -Rining Wu +Xu Chunyang +Yan Sheng +Yunbin Liu +0Knot (0KN) +One Person’s Revelry +amit794 +Ashine +azureology +bell +bestlaw66 +brinkqiang +c2ch +chaofan +Forever121 +cxalc Ray Yee -Q.Ben Zheng +Rining Wu +Robigus +Rocher +殇 +SMVirus +SevenSteven +Azolla +RoachZhao +Spaghetti-C +SunX +T-TRz879 +Na Meng +Wingrez +XBG +Xiaodong DENG

数据来源于 GitHub Contributors,使用action-contributors创建。 From 6f32e1e9ee44886a06198fda0ac5f44445bb9c66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83?= <398188662@qq.com> Date: Sun, 27 Apr 2025 17:18:20 +0800 Subject: [PATCH 1267/1284] feat: add getcap. fix #644 --- command/getcap.md | 49 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 command/getcap.md 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 From 7fb73de0106266a8c64a8b9499791641a0e1c919 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 27 Apr 2025 09:19:08 +0000 Subject: [PATCH 1268/1284] doc: update README.md. --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3af46b03dee..932a97c0417 100644 --- a/README.md +++ b/README.md @@ -357,11 +357,11 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. noodles2hg nsnans zyimm -0x_000 dayday Deny dongpohezui ecjtusbs +focksor gang.yang gedune geekeryy @@ -407,6 +407,7 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. zodiac zoomdong zuixin369 +0x_000 Nexchard Karl Horky LaudOak From 3bf5e616dc0119b8ec1ddc57ce207b7331d582a4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 27 Apr 2025 09:19:10 +0000 Subject: [PATCH 1269/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index a17485db3d2..2b4e642496a 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -67,11 +67,11 @@ noodles2hg nsnans zyimm -0x_000 dayday Deny dongpohezui ecjtusbs +focksor gang.yang gedune geekeryy @@ -117,6 +117,7 @@ zodiac zoomdong zuixin369 +0x_000 Nexchard Karl Horky LaudOak From fbf2cdd86d1f0e624fb85a32c77adbec2939993d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83?= <398188662@qq.com> Date: Sun, 27 Apr 2025 17:23:47 +0800 Subject: [PATCH 1270/1284] ci: remove .github/workflows/sync.yml #554 --- .github/workflows/sync.yml | 40 -------------------------------------- 1 file changed, 40 deletions(-) delete mode 100644 .github/workflows/sync.yml diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml deleted file mode 100644 index df5a9fa39eb..00000000000 --- a/.github/workflows/sync.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: Upstream Sync - -permissions: - contents: write - -on: - schedule: - - cron: "0 0 * * *" # every day - workflow_dispatch: - -jobs: - sync_latest_from_upstream: - name: Sync latest commits from upstream repo - runs-on: ubuntu-latest - if: ${{ github.event.repository.fork }} - - steps: - # Step 1: run a standard checkout action - - name: Checkout target repo - uses: actions/checkout@v4 - - # Step 2: run the sync action - - name: Sync upstream changes - id: sync - uses: aormsby/Fork-Sync-With-Upstream-action@v3.4 - with: - upstream_sync_repo: jaywcjlove/linux-command - upstream_sync_branch: master - target_sync_branch: master - target_repo_token: ${{ secrets.GITHUB_TOKEN }} # automatically generated, no need to set - - # Set test_mode true to run tests instead of the true action!! - test_mode: false - - - name: Sync check - if: failure() - run: | - echo "[Error] 由于上游仓库的 workflow 文件变更,导致 GitHub 自动暂停了本次自动更新,你需要手动 Sync Fork 一次。" - echo "[Error] Due to a change in the workflow file of the upstream repository, GitHub has automatically suspended the scheduled automatic update. You need to manually sync your fork." - exit 1 From 81f8eef8bfcc0e431e52fd6597b9f581bd240810 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83?= <398188662@qq.com> Date: Mon, 12 May 2025 18:36:38 +0800 Subject: [PATCH 1271/1284] doc: update README.md --- README.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/README.md b/README.md index 932a97c0417..44d59e327b7 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,36 @@ 当前仓库搜集了 600 多个 Linux 命令,是一个非盈利性的仓库,生成了一个 web 网站方便使用,目前网站没有任何广告,内容包含 Linux 命令手册、详解、学习,内容来自网络和网友的补充,非常值得收藏的 Linux 命令速查手册。版权归属原作者,对任何法律问题及风险不承担任何责任,没有任何商业目的,如果认为侵犯了您的版权,请来信告知。我不能完全保证内容的正确性。通过使用本站内容带来的风险与我无关。当使用本站时,代表您已接受了本站的使用条款和隐私条款。 +## 赞助支持 + +非常感谢一直以来支持我开源项目的朋友们!如果您认可我的工作,欢迎通过 [赞助](https://wangchujiang.com/#/sponsor) 我或下载并使用我开发的 [macOS 应用](https://wangchujiang.com/#/app) 来支持我。以下是我个人独立开发的 macOS 应用列表: + +

+ Musicer + Audioer + FileSentinel + FocusCursor + Videoer + KeyClicker + DayBar + Iconed + RightMenu Master + Paste Quick + Quick RSS + Web Serve + Copybook Generator + DevTutor for SwiftUI + RegexMate + Time Passage + Iconize Folder + Textsound Saver + Create Custom Symbols + DevHub + Resume Revise + Palette Genius + Symbol Scribe +

+ ## Web 版本 [Github Web](http://jaywcjlove.github.io/linux-command/) | [Gitee Web](http://jaywcjlove.gitee.io/linux-command/) | [Githack](https://raw.githack.com/jaywcjlove/linux-command/gh-pages/index.html) | [Statically](https://cdn.statically.io/gh/jaywcjlove/linux-command/gh-pages/index.html) From e8a04497f65e328a8b7fee8b496a99f35d73d18a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83?= <398188662@qq.com> Date: Mon, 12 May 2025 18:37:21 +0800 Subject: [PATCH 1272/1284] doc: update README.md --- README.md | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 44d59e327b7..4570c99799f 100644 --- a/README.md +++ b/README.md @@ -20,29 +20,29 @@ 非常感谢一直以来支持我开源项目的朋友们!如果您认可我的工作,欢迎通过 [赞助](https://wangchujiang.com/#/sponsor) 我或下载并使用我开发的 [macOS 应用](https://wangchujiang.com/#/app) 来支持我。以下是我个人独立开发的 macOS 应用列表:

- Musicer - Audioer - FileSentinel - FocusCursor - Videoer - KeyClicker - DayBar - Iconed - RightMenu Master - Paste Quick - Quick RSS - Web Serve - Copybook Generator - DevTutor for SwiftUI - RegexMate - Time Passage - Iconize Folder - Textsound Saver - Create Custom Symbols - DevHub - Resume Revise - Palette Genius - Symbol Scribe + Musicer + Audioer + FileSentinel + FocusCursor + Videoer + KeyClicker + DayBar + Iconed + RightMenu Master + Quick RSS + Quick RSS + Web Serve + Copybook Generator + DevTutor for SwiftUI + RegexMate + Time Passage + Iconize Folder + Textsound Saver + Create Custom Symbols + DevHub + Resume Revise + Palette Genius + Symbol Scribe

## Web 版本 From 35bfec9b1a00385ae0a3a6fec0db4e7d8234d31a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83?= <398188662@qq.com> Date: Tue, 13 May 2025 01:22:41 +0800 Subject: [PATCH 1273/1284] ci: update workflows config. --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7091845dbb4..c8dcecc907c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,6 +28,7 @@ jobs: uses: jaywcjlove/github-action-modify-file-content@main with: path: README.md + trim_whitespace: false openDelimiter: '' closeDelimiter: '' body: | @@ -37,6 +38,7 @@ jobs: uses: jaywcjlove/github-action-modify-file-content@main with: path: template/contributors.ejs + trim_whitespace: false openDelimiter: '' closeDelimiter: '' body: | From 02dbba48985bf6a4a0b6b4b89ffea78c127c9dfd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 12 May 2025 17:23:20 +0000 Subject: [PATCH 1274/1284] doc: update README.md. --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4570c99799f..d47a2a8ec75 100644 --- a/README.md +++ b/README.md @@ -323,7 +323,8 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. 一如既往,感谢我们出色的贡献者! -小弟调调 + +小弟调调 ZhuangZhu-74 Mend Renovate Huck Huang @@ -501,7 +502,10 @@ Adobe软件的最佳替代品 [原文在这里](https://linux.cn/article-8928-1. Na Meng Wingrez XBG -Xiaodong DENG +Xiaodong DENG + + + 贡献者列表,由 [contributors](https://github.com/jaywcjlove/github-action-contributors) 自动生成 From bcea27fe4059ecdb78e8e43f2100572bfe9f7a9f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 12 May 2025 17:23:21 +0000 Subject: [PATCH 1275/1284] doc: update template/contributors.ejs. --- template/contributors.ejs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index 2b4e642496a..81cce14e78f 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -3,7 +3,8 @@

贡献者列表

- 小弟调调 + +小弟调调 ZhuangZhu-74 Mend Renovate Huck Huang @@ -181,7 +182,10 @@ Na Meng Wingrez XBG -Xiaodong DENG +Xiaodong DENG + + +

数据来源于 GitHub Contributors,使用action-contributors创建。 From b86b82ed615beb92b14a635fc5e0848fa72cffd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83?= Date: Wed, 4 Jun 2025 19:04:33 +0800 Subject: [PATCH 1276/1284] doc: Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index d47a2a8ec75..eccb6b37e1b 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ 非常感谢一直以来支持我开源项目的朋友们!如果您认可我的工作,欢迎通过 [赞助](https://wangchujiang.com/#/sponsor) 我或下载并使用我开发的 [macOS 应用](https://wangchujiang.com/#/app) 来支持我。以下是我个人独立开发的 macOS 应用列表:

+ Mousio Musicer Audioer FileSentinel From 6197d862da03dcefcd4776977d8d74ff4f3bbf14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83?= Date: Fri, 13 Jun 2025 08:53:46 +0800 Subject: [PATCH 1277/1284] doc: Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index eccb6b37e1b..2f19376201c 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ 非常感谢一直以来支持我开源项目的朋友们!如果您认可我的工作,欢迎通过 [赞助](https://wangchujiang.com/#/sponsor) 我或下载并使用我开发的 [macOS 应用](https://wangchujiang.com/#/app) 来支持我。以下是我个人独立开发的 macOS 应用列表:

+ Mousio Hint Mousio Musicer Audioer From 22f1caf16d8b2f65569271ec4e28c5783eebccb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83?= <398188662@qq.com> Date: Fri, 13 Jun 2025 09:20:59 +0800 Subject: [PATCH 1278/1284] website: update contributors. --- README.md | 4 ++-- dist/data.json | 22 +++++++++++++++++++++- dist/data.min.json | 2 +- template/contributors.ejs | 34 +++++++++++++++++++++++++++++++++- template/styl/index.styl | 11 +++++++++++ template/widget/footer.ejs | 3 +++ 6 files changed, 71 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 2f19376201c..cd890c74514 100644 --- a/README.md +++ b/README.md @@ -67,11 +67,11 @@ **推荐使用的镜像 web 版本** -[**`linuxsearch.largeinfo.cc`**](http://linuxsearch.largeinfo.cc),[**`srebro.cn`**](https://linux.srebro.cn/),[**`getaifun.com`**](https://getaifun.com/linux),[**`linux.devonline.net`**](http://linux.devonline.net/),[**`man.zch.ooo`**](https://man.zch.ooo/),[**`linux.mmoke.com`**](https://linux.mmoke.com),[**`bqrdh.com`**](https://tools.bqrdh.com/linux-command/),[**`linux.zyimm.com`**](http://linux.zyimm.com/),[**`linux.vovuo.com`**](https://linux.vovuo.com/),[`linux.liguiying.cn`](https://linux.liguiying.cn/), [`renye.net`](https://renye.net/), [`diqi.org`](https://diqi.org/),[`linux.alistnas.top`](https://linux.alistnas.top/),[`nenufm.com`](https://www.nenufm.com/linux-command/), [`linux.jiangyang.online`](https://linux.jiangyang.online/) +[**`linuxsearch.largeinfo.cc`**](http://linuxsearch.largeinfo.cc),[**`srebro.cn`**](https://linux.srebro.cn/),[**`getaifun.com`**](https://getaifun.com/linux),[**`linux.devonline.net`**](http://linux.devonline.net/),[**`man.zch.ooo`**](https://man.zch.ooo/),[**`linux.mmoke.com`**](https://linux.mmoke.com),[**`bqrdh.com`**](https://tools.bqrdh.com/linux-command/),[**`linux.zyimm.com`**](http://linux.zyimm.com/),[**`linux.vovuo.com`**](https://linux.vovuo.com/),[`linux.liguiying.cn`](https://linux.liguiying.cn/),[`renye.net`](https://renye.net/),[`diqi.org`](https://diqi.org/),[`linux.alistnas.top`](https://linux.alistnas.top/),[`nenufm.com`](https://www.nenufm.com/linux-command/),[`linux.jiangyang.online`](https://linux.jiangyang.online/) **其它 web 版本** -[`linux.ftqq.com`](https://linux.ftqq.com/),[`linux.gaomeluo.com`](https://linux.gaomeluo.com),[`atoolbox.net`](http://www.atoolbox.net/Tool.php?Id=826),[`xiaoshanseo.com`](https://tools.xiaoshanseo.com/Tools/linux-command/),[`262235.xyz`](https://262235.xyz/linux-command/),[`cmsblogs.cn`](https://linux.cmsblogs.cn/),[`loquy.cn`](https://www.loquy.cn/linux-command/),[`buyao.vip`](https://demo.buyao.vip/linux/),[`hezhiqiang.gitbook.io`](https://hezhiqiang.gitbook.io/linux/),[`utils.fun`](https://linux.utils.fun/), [`51tools.info`](https://51tools.info/linux/) +[`linux.ftqq.com`](https://linux.ftqq.com/),[`linux.gaomeluo.com`](https://linux.gaomeluo.com),[`atoolbox.net`](http://www.atoolbox.net/Tool.php?Id=826),[`xiaoshanseo.com`](https://tools.xiaoshanseo.com/Tools/linux-command/),[`262235.xyz`](https://262235.xyz/linux-command/),[`cmsblogs.cn`](https://linux.cmsblogs.cn/),[`loquy.cn`](https://www.loquy.cn/linux-command/),[`buyao.vip`](https://demo.buyao.vip/linux/),[`hezhiqiang.gitbook.io`](https://hezhiqiang.gitbook.io/linux/),[`utils.fun`](https://linux.utils.fun/),[`51tools.info`](https://51tools.info/linux/) ## 其它版本 diff --git a/dist/data.json b/dist/data.json index 75eae0c05a3..ace6fad37f7 100644 --- a/dist/data.json +++ b/dist/data.json @@ -869,6 +869,11 @@ "p": "/get_module", "d": "获取Linux内核模块的详细信息" }, + "getcap": { + "n": "getcap", + "p": "/getcap", + "d": "显示文件的能力(capabilities)" + }, "getenforce": { "n": "getenforce", "p": "/getenforce", @@ -879,6 +884,11 @@ "p": "/getent", "d": "查询 DNS 名称服务器中的命名空间" }, + "getfacl": { + "n": "getfacl", + "p": "/getfacl", + "d": "获取文件访问控制列表(access control lists)" + }, "getsebool": { "n": "getsebool", "p": "/getsebool", @@ -1132,7 +1142,7 @@ "iostat": { "n": "iostat", "p": "/iostat", - "d": "iostat命令被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。iowait 指在一个采样周期内有百分之几的时间是属于以下情况:CPU处于空闲状态并且至少有一个未完成的磁盘IO请求。" + "d": "监视系统输入输出设备和CPU的使用情况" }, "iotop": { "n": "iotop", @@ -1779,6 +1789,11 @@ "p": "/nslookup", "d": "查询域名DNS信息的工具" }, + "nstat": { + "n": "nstat", + "p": "/nstat", + "d": "nstat 是一个简单的监视内核的 SNMP 计数器和网络接口状态的实用工具。" + }, "ntpdate": { "n": "ntpdate", "p": "/ntpdate", @@ -2689,6 +2704,11 @@ "p": "/type", "d": "显示指定命令的类型。" }, + "ufw": { + "n": "ufw", + "p": "/ufw", + "d": " ubuntu防火墙管理工具" + }, "ulimit": { "n": "ulimit", "p": "/ulimit", diff --git a/dist/data.min.json b/dist/data.min.json index cb420adfeff..c184790cee2 100644 --- a/dist/data.min.json +++ b/dist/data.min.json @@ -1 +1 @@ -{"7z":{"n":"7z","p":"/7z","d":"拥有极高压缩比的开源压缩软件。"},"ab":{"n":"ab","p":"/ab","d":"Apache服务器的性能测试工具"},"accept":{"n":"accept","p":"/accept","d":"指示打印系统接受发往指定目标打印机的打印任务"},"ack":{"n":"ack","p":"/ack","d":"比grep好用的文本搜索工具"},"ag":{"n":"ag","p":"/ag","d":"ack 的升级版,C语言编写,更快更人性化"},"alias":{"n":"alias","p":"/alias","d":"定义或显示别名。"},"apachectl":{"n":"apachectl","p":"/apachectl","d":"Apache服务器前端控制工具"},"apk":{"n":"apk","p":"/apk","d":"Alpine Linux 下的包管理工具"},"apropos":{"n":"apropos","p":"/apropos","d":"在 whatis 数据库中查找字符串"},"apt-get":{"n":"apt-get","p":"/apt-get","d":"Debian Linux发行版中的APT软件包管理工具"},"apt-key":{"n":"apt-key","p":"/apt-key","d":"管理Debian Linux系统中的软件包密钥"},"apt-sortpkgs":{"n":"apt-sortpkgs","p":"/apt-sortpkgs","d":"Debian Linux下对软件包索引文件进行排序的工具"},"aptitude":{"n":"aptitude","p":"/aptitude","d":"Debian Linux系统中软件包管理工具"},"ar":{"n":"ar","p":"/ar","d":"建立或修改备存文件,或是从备存文件中抽取文件"},"arch":{"n":"arch","p":"/arch","d":"显示当前主机的硬件架构类型"},"arj":{"n":"arj","p":"/arj","d":"用于创建和管理.arj压缩包"},"arp":{"n":"arp","p":"/arp","d":"arp 命令用于显示和修改 IP 到 MAC 转换表"},"arpd":{"n":"arpd","p":"/arpd","d":"收集免费ARP信息"},"arping":{"n":"arping","p":"/arping","d":"通过发送ARP协议报文测试网络"},"arptables":{"n":"arptables","p":"/arptables","d":"管理ARP包过滤规则表"},"arpwatch":{"n":"arpwatch","p":"/arpwatch","d":"监听网络上ARP的记录"},"as":{"n":"as","p":"/as","d":"汇编语言编译器"},"at":{"n":"at","p":"/at","d":"在指定时间执行一个任务"},"atop":{"n":"atop","p":"/atop","d":"监控Linux系统资源与进程的工具"},"atq":{"n":"atq","p":"/atq","d":"列出当前用户的at任务列表"},"atrm":{"n":"atrm","p":"/atrm","d":"删除待执行任务队列中的指定任务"},"awk":{"n":"awk","p":"/awk","d":"文本和数据进行处理的编程语言"},"axel":{"n":"axel","p":"/axel","d":"多线程下载工具"},"badblocks":{"n":"badblocks","p":"/badblocks","d":"查找磁盘中损坏的区块"},"base64":{"n":"base64","p":"/base64","d":"base64 编码/解码文件或标准输入输出"},"basename":{"n":"basename","p":"/basename","d":"打印目录或者文件的基本名称"},"batch":{"n":"batch","p":"/batch","d":"在系统不繁忙的时候执行定时任务"},"bc":{"n":"bc","p":"/bc","d":"算术操作精密运算工具"},"bg":{"n":"bg","p":"/bg","d":"将前台终端作业移动到后台运行"},"bind":{"n":"bind","p":"/bind","d":"显示或设置键盘按键与其相关的功能"},"blkid":{"n":"blkid","p":"/blkid","d":"查看块设备的文件系统类型、LABEL、UUID等信息"},"blockdev":{"n":"blockdev","p":"/blockdev","d":"从命令行调用区块设备控制程序"},"bmodinfo":{"n":"bmodinfo","p":"/bmodinfo","d":"显示给定模块的详细信息"},"break":{"n":"break","p":"/break","d":"结束for,while或until循环。"},"builtin":{"n":"builtin","p":"/builtin","d":"执行bash内建命令。"},"bunzip2":{"n":"bunzip2","p":"/bunzip2","d":"可解压缩.bz2格式的压缩文件。 "},"bye":{"n":"bye","p":"/bye","d":"命令用于中断FTP连线并结束程序"},"bzcat":{"n":"bzcat","p":"/bzcat","d":"不解压,直接查看指定的.bz2文件"},"bzcmp":{"n":"bzcmp","p":"/bzcmp","d":"比较两个压缩包中的文件"},"bzdiff":{"n":"bzdiff","p":"/bzdiff","d":"直接比较两个.bz2压缩包中文件的不同"},"bzgrep":{"n":"bzgrep","p":"/bzgrep","d":"使用正则表达式搜索.bz2压缩包中文件"},"bzip2":{"n":"bzip2","p":"/bzip2","d":"将文件压缩成bz2格式"},"bzip2recover":{"n":"bzip2recover","p":"/bzip2recover","d":"恢复被破坏的.bz2压缩包中的文件"},"bzless":{"n":"bzless","p":"/bzless","d":"增强.bz2压缩包查看器"},"bzmore":{"n":"bzmore","p":"/bzmore","d":"查看bzip2压缩过的文本文件的内容"},"cal":{"n":"cal","p":"/cal","d":"显示当前日历或指定日期的日历"},"cancel":{"n":"cancel","p":"/cancel","d":"取消已存在的打印任务"},"cat":{"n":"cat","p":"/cat","d":"连接多个文件并打印到标准输出。"},"cd":{"n":"cd","p":"/cd","d":"切换用户当前工作目录。"},"cdrecord":{"n":"cdrecord","p":"/cdrecord","d":"Linux系统下光盘刻录功能命令"},"chage":{"n":"chage","p":"/chage","d":"修改帐号和密码的有效期限"},"chattr":{"n":"chattr","p":"/chattr","d":"用来改变文件属性"},"chcon":{"n":"chcon","p":"/chcon","d":"修改对象(文件)的安全上下文"},"chfn":{"n":"chfn","p":"/chfn","d":"用来改变finger命令显示的信息"},"chgrp":{"n":"chgrp","p":"/chgrp","d":"用来变更文件或目录的所属群组"},"chkconfig":{"n":"chkconfig","p":"/chkconfig","d":"检查或设置系统的各种服务"},"chmod":{"n":"chmod","p":"/chmod","d":"用来变更文件或目录的权限"},"chown":{"n":"chown","p":"/chown","d":"用来变更文件或目录的拥有者或所属群组"},"chpasswd":{"n":"chpasswd","p":"/chpasswd","d":"批量更新用户口令的工具"},"chroot":{"n":"chroot","p":"/chroot","d":"把根目录换成指定的目的目录"},"chsh":{"n":"chsh","p":"/chsh","d":"用来更换登录系统时使用的shell"},"cksum":{"n":"cksum","p":"/cksum","d":"检查文件的CRC是否正确"},"clear":{"n":"clear","p":"/clear","d":"清除当前屏幕终端上的任何信息"},"clock":{"n":"clock","p":"/clock","d":"用于调整 RTC 时间"},"clockdiff":{"n":"clockdiff","p":"/clockdiff","d":"检测两台linux主机的时间差"},"cmp":{"n":"cmp","p":"/cmp","d":"比较两个文件是否有差异"},"col":{"n":"col","p":"/col","d":"过滤控制字符"},"colrm":{"n":"colrm","p":"/colrm","d":"删除文件中的指定列"},"column":{"n":"column","p":"/column","d":"按列格式化输出文件"},"comm":{"n":"comm","p":"/comm","d":"按行比较两个已排序的文件。"},"command":{"n":"command","p":"/command","d":"调用并执行指定的命令"},"compress":{"n":"compress","p":"/compress","d":"使用Lempress-Ziv编码压缩数据文件"},"consoletype":{"n":"consoletype","p":"/consoletype","d":"输出已连接的终端类型"},"continue":{"n":"continue","p":"/continue","d":"结束本次循环,继续执行下一个for,while或until循环。"},"convertquota":{"n":"convertquota","p":"/convertquota","d":"把老的配额文件转换为新的格式"},"cp":{"n":"cp","p":"/cp","d":"将源文件或目录复制到目标文件或目录中"},"cpio":{"n":"cpio","p":"/cpio","d":"用来建立、还原备份档的工具程序"},"createrepo":{"n":"createrepo","p":"/createrepo","d":"创建YUM仓库"},"crontab":{"n":"crontab","p":"/crontab","d":"提交和管理用户的需要周期性执行的任务"},"csplit":{"n":"csplit","p":"/csplit","d":"将一个大文件分割成小的碎片文件"},"cu":{"n":"cu","p":"/cu","d":"用于连接另一个系统主机"},"cupsdisable":{"n":"cupsdisable","p":"/cupsdisable","d":"停止指定的打印机"},"cupsenable":{"n":"cupsenable","p":"/cupsenable","d":"启动指定的打印机"},"curl":{"n":"curl","p":"/curl","d":"利用URL规则在命令行下工作的文件传输工具"},"cut":{"n":"cut","p":"/cut","d":"连接文件并打印到标准输出设备上"},"date":{"n":"date","p":"/date","d":"显示或设置系统时间与日期"},"dc":{"n":"dc","p":"/dc","d":"任意精度计算器"},"dd":{"n":"dd","p":"/dd","d":"复制文件并对原文件的内容进行转换和格式化处理"},"declare":{"n":"declare","p":"/declare","d":"声明变量,设置或显示变量的值和属性。"},"depmod":{"n":"depmod","p":"/depmod","d":"分析可载入模块的相依性"},"df":{"n":"df","p":"/df","d":"显示磁盘的相关信息"},"dhclient":{"n":"dhclient","p":"/dhclient","d":"动态获取或释放IP地址"},"dhcpd":{"n":"dhcpd","p":"/dhcpd","d":"运行DHCP服务器"},"dhcrelay":{"n":"dhcrelay","p":"/dhcrelay","d":"使用dhcrelay命令可以提供中继DHCP和BOOTP请求"},"diff":{"n":"diff","p":"/diff","d":"比较给定的两个文件的不同"},"diff3":{"n":"diff3","p":"/diff3","d":"比较3个文件不同的地方"},"diffstat":{"n":"diffstat","p":"/diffstat","d":"显示diff命令输出信息的柱状图"},"dig":{"n":"dig","p":"/dig","d":"域名查询工具"},"dircolors":{"n":"dircolors","p":"/dircolors","d":"置ls命令在显示目录或文件时所用的色彩"},"dirname":{"n":"dirname","p":"/dirname","d":"去除文件名中的非目录部分"},"dirs":{"n":"dirs","p":"/dirs","d":"显示目录堆栈。"},"disown":{"n":"disown","p":"/disown","d":"从当前的shell中移除作业。"},"dmesg":{"n":"dmesg","p":"/dmesg","d":"显示Linux系统启动信息"},"dmidecode":{"n":"dmidecode","p":"/dmidecode","d":"在Linux系统下获取有关硬件方面的信息"},"dnf":{"n":"dnf","p":"/dnf","d":"新一代的RPM软件包管理器"},"dnsdomainname":{"n":"dnsdomainname","p":"/dnsdomainname","d":"定义DNS系统中FQDN名称的域名"},"docker":{"n":"docker","p":"/docker","d":"容器化技术,可以将应用程序及其依赖项打包到一个可移植的容器中,使其可以在不同的环境中运行"},"domainname":{"n":"domainname","p":"/domainname","d":"显示和设置系统的NIS域名"},"dos2unix":{"n":"dos2unix","p":"/dos2unix","d":"将DOS格式文本文件转换成Unix格式"},"dpkg-deb":{"n":"dpkg-deb","p":"/dpkg-deb","d":"Debian Linux下的软件包管理工具"},"dpkg-divert":{"n":"dpkg-divert","p":"/dpkg-divert","d":"Debian Linux中创建并管理一个转向列表"},"dpkg-preconfigure":{"n":"dpkg-preconfigure","p":"/dpkg-preconfigure","d":"Debian Linux中软件包安装之前询问问题"},"dpkg-query":{"n":"dpkg-query","p":"/dpkg-query","d":"Debian Linux中软件包的查询工具"},"dpkg-reconfigure":{"n":"dpkg-reconfigure","p":"/dpkg-reconfigure","d":"Debian Linux中重新配制一个已经安装的软件包"},"dpkg-split":{"n":"dpkg-split","p":"/dpkg-split","d":"Debian Linux中将大软件包分割成小包"},"dpkg-statoverride":{"n":"dpkg-statoverride","p":"/dpkg-statoverride","d":"Debian Linux中覆盖文件的所有权和模式"},"dpkg-trigger":{"n":"dpkg-trigger","p":"/dpkg-trigger","d":"Debian Linux下的软件包触发器"},"dpkg":{"n":"dpkg","p":"/dpkg","d":"Debian Linux系统上安装、创建和管理软件包"},"dris":{"n":"dris","p":"/dris","d":"显示和清空目录堆栈中的内容"},"dstat":{"n":"dstat","p":"/dstat","d":"通用的系统资源统计工具"},"du":{"n":"du","p":"/du","d":"显示每个文件和目录的磁盘使用空间"},"dump":{"n":"dump","p":"/dump","d":"用于备份ext2或者ext3文件系统"},"e2fsck":{"n":"e2fsck","p":"/e2fsck","d":"用于检查第二扩展文件系统的完整性"},"e2label":{"n":"e2label","p":"/e2label","d":"设置第二扩展文件系统的卷标"},"echo":{"n":"echo","p":"/echo","d":"输出指定的字符串或者变量"},"ed":{"n":"ed","p":"/ed","d":"单行纯文本编辑器"},"edquota":{"n":"edquota","p":"/edquota","d":"用于编辑指定用户或工作组磁盘配额"},"egrep":{"n":"egrep","p":"/egrep","d":"在文件内查找指定的字符串"},"eject":{"n":"eject","p":"/eject","d":"用来退出抽取式设备"},"elinks":{"n":"elinks","p":"/elinks","d":"纯文本界面的WWW浏览器"},"elm":{"n":"elm","p":"/elm","d":"纯文本邮件客户端程序"},"emacs":{"n":"emacs","p":"/emacs","d":"功能强大的全屏文本编辑器"},"enable":{"n":"enable","p":"/enable","d":"启动或禁用shell内建命令"},"env":{"n":"env","p":"/env","d":"显示系统中已存在的环境变量"},"ethtool":{"n":"ethtool","p":"/ethtool","d":"显示或修改以太网卡的配置信息"},"ex":{"n":"ex","p":"/ex","d":"启动vim编辑器的ex编辑模式"},"exec":{"n":"exec","p":"/exec","d":"调用并执行指定的命令"},"exit":{"n":"exit","p":"/exit","d":"退出当前的shell。"},"expand":{"n":"expand","p":"/expand","d":"将文件的制表符转换为空白字符"},"export":{"n":"export","p":"/export","d":"为shell变量或函数设置导出属性。"},"exportfs":{"n":"exportfs","p":"/exportfs","d":"管理NFS共享文件系统列表"},"expr":{"n":"expr","p":"/expr","d":"一款表达式计算工具"},"false":{"n":"false","p":"/false","d":"返回状态为失败。"},"fc":{"n":"fc","p":"/fc","d":"显示历史列表中的命令或修改指定的历史命令并执行。"},"fdisk":{"n":"fdisk","p":"/fdisk","d":"查看磁盘使用情况和磁盘分区"},"fg":{"n":"fg","p":"/fg","d":"将后台作业移动到前台终端运行"},"fgrep":{"n":"fgrep","p":"/fgrep","d":"为文件搜索文字字符串"},"figlet":{"n":"figlet","p":"/figlet","d":"字符串转为 “字画符”。"},"file":{"n":"file","p":"/file","d":"用来探测给定文件的类型"},"find":{"n":"find","p":"/find","d":"在指定目录下查找文件"},"findfs":{"n":"findfs","p":"/findfs","d":"标签或UUID查找文件系统"},"finger":{"n":"finger","p":"/finger","d":"用于查找并显示用户信息"},"firewall-cmd":{"n":"firewall-cmd","p":"/firewall-cmd","d":"Linux上新用的防火墙软件,跟iptables差不多的工具"},"fishshell":{"n":"fishshell","p":"/fishshell","d":"比 bash 更好用的 shell"},"fmt":{"n":"fmt","p":"/fmt","d":"读取文件后优化处理并输出"},"fold":{"n":"fold","p":"/fold","d":"控制文件内容输出时所占用的屏幕宽度"},"fping":{"n":"fping","p":"/fping","d":"fping检测主机是否存在"},"free":{"n":"free","p":"/free","d":"显示内存的使用情况"},"fsck":{"n":"fsck","p":"/fsck","d":"fsck(英文全拼:file system check)命令检查并且试图修复文件系统中的错误"},"ftp":{"n":"ftp","p":"/ftp","d":"用来设置文件系统相关功能"},"ftpcount":{"n":"ftpcount","p":"/ftpcount","d":"显示目前已FTP登入的用户人数"},"ftpshut":{"n":"ftpshut","p":"/ftpshut","d":"在指定的时间关闭FTP服务器"},"ftptop":{"n":"ftptop","p":"/ftptop","d":"proftpd服务器的连接状态"},"ftpwho":{"n":"ftpwho","p":"/ftpwho","d":"显示当前每个ftp会话信息"},"fuser":{"n":"fuser","p":"/fuser","d":"使用文件或文件结构识别进程"},"gcc":{"n":"gcc","p":"/gcc","d":"基于C/C++的编译器"},"gcov":{"n":"gcov","p":"/gcov","d":"测试程序的代码覆盖率的工具"},"gdb":{"n":"gdb","p":"/gdb","d":"功能强大的程序调试器"},"get_module":{"n":"get_module","p":"/get_module","d":"获取Linux内核模块的详细信息"},"getenforce":{"n":"getenforce","p":"/getenforce","d":"显示当前SELinux的应用模式,是强制、执行还是停用"},"getent":{"n":"getent","p":"/getent","d":"查询 DNS 名称服务器中的命名空间"},"getsebool":{"n":"getsebool","p":"/getsebool","d":"查询SElinux策略内各项规则的布尔值"},"git":{"n":"git","p":"/git","d":"是目前世界上最先进的分布式版本控制系统"},"gpasswd":{"n":"gpasswd","p":"/gpasswd","d":"Linux下工作组文件的管理工具"},"gpg":{"n":"gpg","p":"/gpg","d":"可用于签名、检查、加密或解密的工具"},"gpm":{"n":"gpm","p":"/gpm","d":"提供文字模式下的滑鼠事件处理"},"grep":{"n":"grep","p":"/grep","d":"强大的文本搜索工具"},"groupadd":{"n":"groupadd","p":"/groupadd","d":"用于创建一个新的工作组"},"groupdel":{"n":"groupdel","p":"/groupdel","d":"用于删除指定的工作组"},"groupmems":{"n":"groupmems","p":"/groupmems","d":"管理用户主要组的成员"},"groupmod":{"n":"groupmod","p":"/groupmod","d":"更改群组识别码或名称"},"groups":{"n":"groups","p":"/groups","d":"打印指定用户所在组的名称。"},"grpck":{"n":"grpck","p":"/grpck","d":"用于验证组文件的完整性"},"grpconv":{"n":"grpconv","p":"/grpconv","d":"用来开启群组的投影密码"},"grpunconv":{"n":"grpunconv","p":"/grpunconv","d":"用来关闭群组的投影密码"},"grub":{"n":"grub","p":"/grub","d":"多重引导程序grub的命令行shell工具"},"grub2-mkconfig":{"n":"grub2-mkconfig","p":"/grub2-mkconfig","d":"生成 grub.cfg 配置文件。"},"grub2-set-default":{"n":"grub2-set-default","p":"/grub2-set-default","d":"设置系统默认的启动内核"},"gunzip":{"n":"gunzip","p":"/gunzip","d":"用来解压缩文件"},"gzexe":{"n":"gzexe","p":"/gzexe","d":"用来压缩可执行文件"},"gzip":{"n":"gzip","p":"/gzip","d":"用来压缩文件"},"halt":{"n":"halt","p":"/halt","d":"关闭正在运行的Linux操作系统"},"hcitool":{"n":"hcitool","p":"/hcitool","d":"hcitool是一个Linux命令行工具,用于管理和调试蓝牙设备。它可以用于扫描周围的蓝牙设备、连接到蓝牙设备发送命令和数据包等。"},"hdparm":{"n":"hdparm","p":"/hdparm","d":"显示与设定硬盘的参数"},"head":{"n":"head","p":"/head","d":"显示文件的开头部分。"},"help":{"n":"help","p":"/help","d":"该命令是bash内建命令,用于显示bash内建命令的帮助信息。"},"hexdump":{"n":"hexdump","p":"/hexdump","d":"显示文件十六进制格式"},"history":{"n":"history","p":"/history","d":"显示或操作历史列表。"},"host":{"n":"host","p":"/host","d":"常用的分析域名查询工具"},"hostid":{"n":"hostid","p":"/hostid","d":"显示当前主机的十六进制数字标识。"},"hostname":{"n":"hostname","p":"/hostname","d":"显示和设置系统的主机名"},"hostnamectl":{"n":"hostnamectl","p":"/hostnamectl","d":"查询或更改系统主机名"},"hping3":{"n":"hping3","p":"/hping3","d":"测试网络及主机的安全"},"htdigest":{"n":"htdigest","p":"/htdigest","d":"Apache服务器内置工具"},"htop":{"n":"htop","p":"/htop","d":"[非内部命令]一个互动的进程查看器,可以动态观察系统进程状况"},"htpasswd":{"n":"htpasswd","p":"/htpasswd","d":"apache服务器创建密码认证文件"},"hwclock":{"n":"hwclock","p":"/hwclock","d":"显示与设定硬件时钟"},"iconv":{"n":"iconv","p":"/iconv","d":"转换文件的编码方式"},"id":{"n":"id","p":"/id","d":"打印真实以及有效的用户和所在组的信息"},"ifcfg":{"n":"ifcfg","p":"/ifcfg","d":"置Linux中的网络接口参数"},"ifconfig":{"n":"ifconfig","p":"/ifconfig","d":"配置和显示Linux系统网卡的网络参数"},"ifdown":{"n":"ifdown","p":"/ifdown","d":"禁用指定的网络接口"},"ifstat":{"n":"ifstat","p":"/ifstat","d":"统计网络接口流量状态"},"iftop":{"n":"iftop","p":"/iftop","d":"一款实时流量监控工具"},"ifup":{"n":"ifup","p":"/ifup","d":"激活指定的网络接口"},"indent":{"n":"indent","p":"/indent","d":"格式化C语言的源文件"},"info":{"n":"info","p":"/info","d":"Linux下info格式的帮助指令"},"init":{"n":"init","p":"/init","d":"init进程是所有Linux进程的父进程"},"inotifywait":{"n":"inotifywait","p":"/inotifywait","d":"异步文件系统监控机制"},"insmod":{"n":"insmod","p":"/insmod","d":"将给定的模块加载到内核中"},"install":{"n":"install","p":"/install","d":"安装或升级软件或备份数据"},"iostat":{"n":"iostat","p":"/iostat","d":"iostat命令被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。iowait 指在一个采样周期内有百分之几的时间是属于以下情况:CPU处于空闲状态并且至少有一个未完成的磁盘IO请求。"},"iotop":{"n":"iotop","p":"/iotop","d":"用来监视磁盘I/O使用状况的工具"},"ip":{"n":"ip","p":"/ip","d":"网络配置工具"},"ip6tables-restore":{"n":"ip6tables-restore","p":"/ip6tables-restore","d":"还原ip6tables表"},"ip6tables-save":{"n":"ip6tables-save","p":"/ip6tables-save","d":"保存ip6tables表配置"},"ip6tables":{"n":"ip6tables","p":"/ip6tables","d":"linux中防火墙软件"},"ipcalc":{"n":"ipcalc","p":"/ipcalc","d":"简单的IP地址计算器"},"ipcrm":{"n":"ipcrm","p":"/ipcrm","d":"删除消息队列、信号集、或者共享内存标识"},"ipcs":{"n":"ipcs","p":"/ipcs","d":"分析消息队列共享内存和信号量"},"iperf":{"n":"iperf","p":"/iperf","d":"网络性能测试工具"},"iptables-restore":{"n":"iptables-restore","p":"/iptables-restore","d":"还原iptables表的配置"},"iptables-save":{"n":"iptables-save","p":"/iptables-save","d":"备份iptables的表配置"},"iptables":{"n":"iptables","p":"/iptables","d":"Linux上常用的防火墙软件"},"iptraf":{"n":"iptraf","p":"/iptraf","d":"实时地监视网卡流量"},"iptstate":{"n":"iptstate","p":"/iptstate","d":"显示iptables的工作状态"},"iscsiadm":{"n":"iscsiadm","p":"/iscsiadm","d":"管理iSCSI连接"},"ispell":{"n":"ispell","p":"/ispell","d":"检查文件中出现的拼写错误"},"jed":{"n":"jed","p":"/jed","d":"主要用于编辑代码的编辑器"},"jobs":{"n":"jobs","p":"/jobs","d":"显示作业的状态。"},"joe":{"n":"joe","p":"/joe","d":"强大的纯文本编辑器"},"join":{"n":"join","p":"/join","d":"两个文件中指定栏位内容相同的行连接起来"},"journalctl":{"n":"journalctl","p":"/journalctl","d":"检索 systemd 日志,是 CentOS 7 才有的工具。"},"jq":{"n":"jq","p":"/jq","d":"一个灵活的轻量级命令行JSON处理器"},"jwhois":{"n":"jwhois","p":"/jwhois","d":"whois 客户端服务"},"kernelversion":{"n":"kernelversion","p":"/kernelversion","d":"打印当前内核的主版本号"},"kexec":{"n":"kexec","p":"/kexec","d":"从当前正在运行的内核引导到一个新内核"},"kill":{"n":"kill","p":"/kill","d":"发送信号到进程。"},"killall":{"n":"killall","p":"/killall","d":"使用进程的名称来杀死一组进程"},"last":{"n":"last","p":"/last","d":"列出目前与过去登入系统的用户相关信息"},"lastb":{"n":"lastb","p":"/lastb","d":"列出登入系统失败的用户相关信息"},"lastlog":{"n":"lastlog","p":"/lastlog","d":"显示系统中所有用户最近一次登录信息"},"ld":{"n":"ld","p":"/ld","d":"将目标文件连接为可执行程序"},"ldconfig":{"n":"ldconfig","p":"/ldconfig","d":"动态链接库管理命令"},"ldd":{"n":"ldd","p":"/ldd","d":"打印程序或者库文件所依赖的共享库列表"},"less":{"n":"less","p":"/less","d":"分屏上下翻页浏览文件内容"},"let":{"n":"let","p":"/let","d":"简单的计算器,执行算术表达式。"},"lftp":{"n":"lftp","p":"/lftp","d":"优秀的文件客户端程序"},"lftpget":{"n":"lftpget","p":"/lftpget","d":"调用lftp指令下载指定的文件"},"lha":{"n":"lha","p":"/lha","d":"压缩或解压缩lzh格式文件"},"lilo":{"n":"lilo","p":"/lilo","d":"安装核心载入开机管理程序"},"ln":{"n":"ln","p":"/ln","d":"用来为文件创建链接"},"lnstat":{"n":"lnstat","p":"/lnstat","d":"显示Linux系统的网路状态"},"local":{"n":"local","p":"/local","d":"在函数内定义局部变量。"},"locate":{"n":"locate","p":"/locate","d":"比 find 好用的文件查找工具"},"logger":{"n":"logger","p":"/logger","d":"在系统日志中记录相应条目"},"login":{"n":"login","p":"/login","d":"登录系统或切换用户身份"},"logname":{"n":"logname","p":"/logname","d":"打印当前终端登录用户的名称。"},"logout":{"n":"logout","p":"/logout","d":"退出当前登录的Shell"},"logrotate":{"n":"logrotate","p":"/logrotate","d":"系统日志进行轮转、压缩和删除"},"logsave":{"n":"logsave","p":"/logsave","d":"将命令的输出信息保存到指定的日志文件"},"logwatch":{"n":"logwatch","p":"/logwatch","d":"可定制和可插入式的日志监视系统"},"look":{"n":"look","p":"/look","d":"显示文件中以指定字符串开头的任意行"},"losetup":{"n":"losetup","p":"/losetup","d":"设定与控制循环(loop)设备"},"lp":{"n":"lp","p":"/lp","d":"打印文件或修改排队的打印任务"},"lpadmin":{"n":"lpadmin","p":"/lpadmin","d":"配置CUPS套件中的打印机和类"},"lpc":{"n":"lpc","p":"/lpc","d":"命令行方式打印机控制程序"},"lpq":{"n":"lpq","p":"/lpq","d":"显示打印队列中的打印任务的状态信息"},"lpr":{"n":"lpr","p":"/lpr","d":"将文件发送给指定打印机进行打印"},"lprm":{"n":"lprm","p":"/lprm","d":"删除打印队列中的打印任务"},"lpstat":{"n":"lpstat","p":"/lpstat","d":"显示CUPS中打印机的状态信息"},"ls":{"n":"ls","p":"/ls","d":"显示目录内容列表"},"lsattr":{"n":"lsattr","p":"/lsattr","d":"查看文件的第二扩展文件系统属性"},"lsb_release":{"n":"lsb_release","p":"/lsb_release","d":"显示发行版本信息"},"lsblk":{"n":"lsblk","p":"/lsblk","d":"列出块设备信息"},"lscpu":{"n":"lscpu","p":"/lscpu","d":"显示有关CPU架构的信息"},"lsmod":{"n":"lsmod","p":"/lsmod","d":"显示已载入系统的模块"},"lsof":{"n":"lsof","p":"/lsof","d":"显示Linux系统当前已打开的所有文件列表 `lsof -p pid`"},"lspci":{"n":"lspci","p":"/lspci","d":"显示当前主机的所有PCI总线信息"},"lsusb":{"n":"lsusb","p":"/lsusb","d":"显示本机的USB设备列表信息"},"ltrace":{"n":"ltrace","p":"/ltrace","d":"用来跟踪进程调用库函数的情况"},"lvcreate":{"n":"lvcreate","p":"/lvcreate","d":"用于创建LVM的逻辑卷"},"lvdisplay":{"n":"lvdisplay","p":"/lvdisplay","d":"显示逻辑卷属性"},"lvextend":{"n":"lvextend","p":"/lvextend","d":"扩展逻辑卷空间"},"lvreduce":{"n":"lvreduce","p":"/lvreduce","d":"收缩逻辑卷空间"},"lvremove":{"n":"lvremove","p":"/lvremove","d":"删除指定LVM逻辑卷"},"lvresize":{"n":"lvresize","p":"/lvresize","d":"调整逻辑卷空间大小"},"lvscan":{"n":"lvscan","p":"/lvscan","d":"扫描逻辑卷"},"lynx":{"n":"lynx","p":"/lynx","d":"纯文本模式的网页浏览器"},"mail":{"n":"mail","p":"/mail","d":"命令行下发送和接收电子邮件"},"mailq":{"n":"mailq","p":"/mailq","d":"显示待发送的邮件队列"},"mailstat":{"n":"mailstat","p":"/mailstat","d":"显示到达的邮件状态"},"make":{"n":"make","p":"/make","d":"GNU的工程化编译工具"},"man":{"n":"man","p":"/man","d":"查看Linux中的指令帮助"},"mapfile":{"n":"mapfile","p":"/mapfile","d":"从标准输入读取行并赋值到数组。"},"md5sum":{"n":"md5sum","p":"/md5sum","d":"计算和校验文件报文摘要的工具程序"},"mesg":{"n":"mesg","p":"/mesg","d":"设置当前终端的写权限"},"mii-tool":{"n":"mii-tool","p":"/mii-tool","d":"配置网络设备协商方式的工具"},"mkbootdisk":{"n":"mkbootdisk","p":"/mkbootdisk","d":"可建立目前系统的启动盘"},"mkcert":{"n":"mkcert","p":"/mkcert","d":"用来生成自签证书的工具"},"mkdir":{"n":"mkdir","p":"/mkdir","d":"用来创建目录"},"mke2fs":{"n":"mke2fs","p":"/mke2fs","d":"创建磁盘分区上的“etc2/etc3”文件系统"},"mkfs":{"n":"mkfs","p":"/mkfs","d":"用于在设备上创建Linux文件系统"},"mkinitrd":{"n":"mkinitrd","p":"/mkinitrd","d":"建立要载入ramdisk的映像文件"},"mkisofs":{"n":"mkisofs","p":"/mkisofs","d":"建立ISO 9660映像文件"},"mknod":{"n":"mknod","p":"/mknod","d":"创建字符设备文件和块设备文件"},"mkswap":{"n":"mkswap","p":"/mkswap","d":"建立和设置SWAP交换分区"},"mktemp":{"n":"mktemp","p":"/mktemp","d":"创建临时文件供shell脚本使用"},"modetest":{"n":"modetest","p":"/modetest","d":"DRM/KMS驱动程序libdrm中的模式测试工具"},"modprobe":{"n":"modprobe","p":"/modprobe","d":"自动处理可载入模块"},"more":{"n":"more","p":"/more","d":"显示文件内容,每次显示一屏"},"mount":{"n":"mount","p":"/mount","d":"用于挂载Linux系统外的文件"},"mpstat":{"n":"mpstat","p":"/mpstat","d":"显示各个可用CPU的状态"},"mtools":{"n":"mtools","p":"/mtools","d":"显示mtools支持的指令"},"mtr":{"n":"mtr","p":"/mtr","d":"`mtr` 结合了 `traceroute` 和 `ping` 程序的功能,是一款简单的网络诊断工具"},"mv":{"n":"mv","p":"/mv","d":"用来对文件或目录重新命名"},"mysql":{"n":"mysql","p":"/mysql","d":"MySQL服务器客户端工具"},"mysqladmin":{"n":"mysqladmin","p":"/mysqladmin","d":"MySQL服务器管理客户端"},"mysqldump":{"n":"mysqldump","p":"/mysqldump","d":"MySQL数据库中备份工具"},"mysqlimport":{"n":"mysqlimport","p":"/mysqlimport","d":"为MySQL服务器用命令行方式导入数据"},"mysqlshow":{"n":"mysqlshow","p":"/mysqlshow","d":"显示MySQL中数据库相关信息"},"named-checkzone":{"n":"named-checkzone","p":"/named-checkzone","d":"使用named-checkzone命令可以进行区域文件有效性检查和转换,必须指定区域名称和区域文件名称"},"nano":{"n":"nano","p":"/nano","d":"字符终端文本编辑器"},"nc":{"n":"nc","p":"/nc","d":"nc是网络工具中的瑞士军刀"},"ncftp":{"n":"ncftp","p":"/ncftp","d":"是增强的的FTP工具"},"neofetch":{"n":"neofetch","p":"/neofetch","d":"显示带有发行徽标的系统信息的工具"},"nethogs":{"n":"nethogs","p":"/nethogs","d":"终端下的网络流量监控工具"},"netstat":{"n":"netstat","p":"/netstat","d":"查看Linux中网络系统状态信息"},"newusers":{"n":"newusers","p":"/newusers","d":"用于批处理的方式一次创建多个命令"},"nfsstat":{"n":"nfsstat","p":"/nfsstat","d":"列出NFS客户端和服务器的工作状态"},"ngrep":{"n":"ngrep","p":"/ngrep","d":"方便的数据包匹配和显示工具"},"nice":{"n":"nice","p":"/nice","d":"调整程序执行的优先权等级"},"nisdomainname":{"n":"nisdomainname","p":"/nisdomainname","d":"显示主机NIS的域名"},"nl":{"n":"nl","p":"/nl","d":"为每一个文件添加行号。"},"nm":{"n":"nm","p":"/nm","d":"显示二进制目标文件的符号表"},"nmap":{"n":"nmap","p":"/nmap","d":"网络探测和安全审核"},"nmcli":{"n":"nmcli","p":"/nmcli","d":"地址配置工具"},"nohup":{"n":"nohup","p":"/nohup","d":"将程序以忽略挂起信号的方式运行起来"},"nologin":{"n":"nologin","p":"/nologin","d":"拒绝用户登录系统"},"nproc":{"n":"nproc","p":"/nproc","d":"打印可用的处理器单元数量。"},"nslookup":{"n":"nslookup","p":"/nslookup","d":"查询域名DNS信息的工具"},"ntpdate":{"n":"ntpdate","p":"/ntpdate","d":"使用网络计时协议(NTP)设置日期和时间"},"ntsysv":{"n":"ntsysv","p":"/ntsysv","d":"集中管理系统的各种服务"},"objdump":{"n":"objdump","p":"/objdump","d":"显示二进制文件信息"},"od":{"n":"od","p":"/od","d":"输出文件的八进制、十六进制等格式编码的字节"},"openssl":{"n":"openssl","p":"/openssl","d":"强大的安全套接字层密码库"},"pacman":{"n":"pacman","p":"/pacman","d":"Arch Linux 系统及其衍生系统中默认使用的包管理器"},"parted":{"n":"parted","p":"/parted","d":"磁盘分区和分区大小调整工具"},"partprobe":{"n":"partprobe","p":"/partprobe","d":"不重启的情况下重读分区"},"passwd":{"n":"passwd","p":"/passwd","d":"用于让用户可以更改自己的密码"},"paste":{"n":"paste","p":"/paste","d":"将多个文件按列队列合并"},"patch":{"n":"patch","p":"/patch","d":"为开放源代码软件安装补丁程序"},"pathchk":{"n":"pathchk","p":"/pathchk","d":"检查文件中不可移植的部分"},"perl":{"n":"perl","p":"/perl","d":"perl语言解释器"},"pfctl":{"n":"pfctl","p":"/pfctl","d":"PF防火墙的配置命令"},"pgrep":{"n":"pgrep","p":"/pgrep","d":"根据用户给出的信息在当前运行进程中查找并列出符合条件的进程ID(PID)"},"php":{"n":"php","p":"/php","d":"PHP语言的命令行接口"},"pico":{"n":"pico","p":"/pico","d":"功能强大全屏幕的文本编辑器"},"pidof":{"n":"pidof","p":"/pidof","d":"查找指定名称的进程的进程号ID号"},"pidstat":{"n":"pidstat","p":"/pidstat","d":"监控进程的系统资源占用情况"},"pigz":{"n":"pigz","p":"/pigz","d":"可以用来解压缩文件,gzip的并行实现升级版"},"ping":{"n":"ping","p":"/ping","d":"测试主机之间网络的连通性(ipv4)"},"ping6":{"n":"ping6","p":"/ping6","d":"测试主机之间网络的连通性(ipv6)"},"pip":{"n":"pip","p":"/pip","d":"Python 编程语言中的包管理器,用于安装和管理第三方 Python 模块"},"pkexec":{"n":"pkexec","p":"/pkexec","d":"以其他用户身份执行命令"},"pkill":{"n":"pkill","p":"/pkill","d":"可以按照进程名杀死进程"},"pmap":{"n":"pmap","p":"/pmap","d":"报告进程的内存映射关系"},"popd":{"n":"popd","p":"/popd","d":"从目录堆栈中删除目录。"},"poweroff":{"n":"poweroff","p":"/poweroff","d":"关闭Linux系统,关闭记录会被写入到/var/log/wtmp日志文件中"},"ppp-off":{"n":"ppp-off","p":"/ppp-off","d":"关闭ppp连线"},"pr":{"n":"pr","p":"/pr","d":"将文本文件转换成适合打印的格式"},"printf":{"n":"printf","p":"/printf","d":"格式化并输出结果。"},"protoize":{"n":"protoize","p":"/protoize","d":"GNU-C代码转换为ANSI-C代码"},"prtstat":{"n":"prtstat","p":"/prtstat","d":"显示进程信息"},"ps":{"n":"ps","p":"/ps","d":"报告当前系统的进程状态"},"pssh":{"n":"pssh","p":"/pssh","d":"批量管理执行"},"pstack":{"n":"pstack","p":"/pstack","d":"显示每个进程的栈跟踪"},"pstree":{"n":"pstree","p":"/pstree","d":"以树状图的方式展现进程之间的派生关系"},"pushd":{"n":"pushd","p":"/pushd","d":"将目录添加到目录堆栈顶部。"},"pv":{"n":"pv","p":"/pv","d":"显示当前在命令行执行的命令的进度信息,管道查看器"},"pvchange":{"n":"pvchange","p":"/pvchange","d":"修改物理卷属性"},"pvck":{"n":"pvck","p":"/pvck","d":"检测物理卷的LVM元数据的一致性"},"pvcreate":{"n":"pvcreate","p":"/pvcreate","d":"将物理硬盘分区初始化为物理卷"},"pvdisplay":{"n":"pvdisplay","p":"/pvdisplay","d":"显示物理卷的属性"},"pvremove":{"n":"pvremove","p":"/pvremove","d":"删除一个存在的物理卷"},"pvs":{"n":"pvs","p":"/pvs","d":"输出物理卷信息报表"},"pvscan":{"n":"pvscan","p":"/pvscan","d":"扫描系统中所有硬盘的物理卷列表"},"pwck":{"n":"pwck","p":"/pwck","d":"用来验证系统认证文件内容和格式的完整性"},"pwconv":{"n":"pwconv","p":"/pwconv","d":"用来开启用户的投影密码"},"pwd":{"n":"pwd","p":"/pwd","d":"显示当前工作目录的绝对路径。"},"pwdx":{"n":"pwdx","p":"/pwdx","d":"用于显示指定进程的当前工作目录"},"pwunconv":{"n":"pwunconv","p":"/pwunconv","d":"用来关闭用户的投影密码"},"quota":{"n":"quota","p":"/quota","d":"显示磁盘已使用的空间与限制"},"quotacheck":{"n":"quotacheck","p":"/quotacheck","d":"检查磁盘的使用空间与限制"},"quotaoff":{"n":"quotaoff","p":"/quotaoff","d":"关闭Linux内核中指定文件系统的磁盘配额功能"},"quotaon":{"n":"quotaon","p":"/quotaon","d":"激活Linux内核中指定文件系统的磁盘配额功能"},"rcconf":{"n":"rcconf","p":"/rcconf","d":"Debian Linux下的运行等级服务配置工具"},"rcp":{"n":"rcp","p":"/rcp","d":"使在两台Linux主机之间的文件复制操作更简单"},"read":{"n":"read","p":"/read","d":"从键盘读取变量值"},"readelf":{"n":"readelf","p":"/readelf","d":"用于显示elf格式文件的信息"},"readonly":{"n":"readonly","p":"/readonly","d":"标记shell变量或函数为只读"},"reboot":{"n":"reboot","p":"/reboot","d":"重新启动正在运行的Linux操作系统"},"reject":{"n":"reject","p":"/reject","d":"指示打印系统拒绝发往指定目标打印机的打印任务"},"rename":{"n":"rename","p":"/rename","d":"用字符串替换的方式批量改变文件名"},"renice":{"n":"renice","p":"/renice","d":"修改正在运行的进程的调度优先级"},"reposync":{"n":"reposync","p":"/reposync","d":"同步yum存储库到本地目录"},"repquota":{"n":"repquota","p":"/repquota","d":"报表的格式输出磁盘空间限制的状态"},"resize":{"n":"resize","p":"/resize","d":"命令设置终端机视窗的大小"},"restore":{"n":"restore","p":"/restore","d":"所进行的操作和dump指令相反"},"restorecon":{"n":"restorecon","p":"/restorecon","d":"恢复文件的安全上下文"},"return":{"n":"return","p":"/return","d":"从函数中退出并返回数值。"},"rev":{"n":"rev","p":"/rev","d":"将文件内容以字符为单位反序输出"},"rexec":{"n":"rexec","p":"/rexec","d":"远程执行Linux系统下命令"},"rlogin":{"n":"rlogin","p":"/rlogin","d":"从当前终端登录到远程Linux主机"},"rm":{"n":"rm","p":"/rm","d":"用于删除给定的文件和目录"},"rmdir":{"n":"rmdir","p":"/rmdir","d":"用来删除空目录"},"rmmod":{"n":"rmmod","p":"/rmmod","d":"从运行的内核中移除指定的内核模块"},"route":{"n":"route","p":"/route","d":"显示并设置Linux中静态路由表"},"rpm":{"n":"rpm","p":"/rpm","d":"RPM软件包的管理工具"},"rpm2cpio":{"n":"rpm2cpio","p":"/rpm2cpio","d":"将RPM软件包转换为cpio格式的文件"},"rpmbuild":{"n":"rpmbuild","p":"/rpmbuild","d":"创建RPM的二进制软件包和源码软件包"},"rpmdb":{"n":"rpmdb","p":"/rpmdb","d":"初始化和重建RPM数据库"},"rpmquery":{"n":"rpmquery","p":"/rpmquery","d":"从RPM数据库中查询软件包信息"},"rpmsign":{"n":"rpmsign","p":"/rpmsign","d":"使用RPM软件包的签名管理工具"},"rpmverify":{"n":"rpmverify","p":"/rpmverify","d":"验证已安装的RPM软件包的正确性"},"rsh":{"n":"rsh","p":"/rsh","d":"连接远程主机并执行命令"},"rsync":{"n":"rsync","p":"/rsync","d":"远程数据同步工具"},"runlevel":{"n":"runlevel","p":"/runlevel","d":"打印当前Linux系统的运行等级"},"sar":{"n":"sar","p":"/sar","d":"系统运行状态统计工具"},"scp":{"n":"scp","p":"/scp","d":"加密的方式在本地主机和远程主机之间复制文件"},"screen":{"n":"screen","p":"/screen","d":"用于命令行终端切换"},"script":{"n":"script","p":"/script","d":"记录终端会话的所有操作"},"scriptreplay":{"n":"scriptreplay","p":"/scriptreplay","d":"重新播放终端会话的所有操作"},"sed":{"n":"sed","p":"/sed","d":"功能强大的流式文本编辑器"},"seinfo":{"n":"seinfo","p":"/seinfo","d":"查询SELinux的策略提供多少相关规则"},"semanage":{"n":"semanage","p":"/semanage","d":"默认目录的安全上下文查询与修改"},"sendmail":{"n":"sendmail","p":"/sendmail","d":"著名电子邮件服务器"},"seq":{"n":"seq","p":"/seq","d":"以指定增量从首数开始打印数字到尾数"},"service":{"n":"service","p":"/service","d":"控制系统服务的实用工具"},"sesearch":{"n":"sesearch","p":"/sesearch","d":"查询SELinux策略的规则详情"},"set":{"n":"set","p":"/set","d":"显示或设置shell特性及shell变量"},"setfacl":{"n":"setfacl","p":"/setfacl","d":"设置文件访问控制列表"},"setpci":{"n":"setpci","p":"/setpci","d":"查询和配置PCI设备的使用工具"},"setsebool":{"n":"setsebool","p":"/setsebool","d":"修改SElinux策略内各项规则的布尔值"},"setsid":{"n":"setsid","p":"/setsid","d":"在新的会话中运行程序"},"sftp-server":{"n":"sftp-server","p":"/sftp-server","d":"sftp协议的服务器端程序"},"sftp":{"n":"sftp","p":"/sftp","d":"交互式的文件传输程序"},"sh":{"n":"sh","p":"/sh","d":"shell命令解释器"},"sha256sum":{"n":"sha256sum","p":"/sha256sum","d":"用于计算文件的 SHA-256 哈希值"},"shift":{"n":"shift","p":"/shift","d":"移动位置参数。"},"shopt":{"n":"shopt","p":"/shopt","d":"显示和设置shell操作选项"},"showmount":{"n":"showmount","p":"/showmount","d":"显示NFS服务器加载的信息"},"shuf":{"n":"shuf","p":"/shuf","d":"产生随机的排列。"},"shutdown":{"n":"shutdown","p":"/shutdown","d":"用来执行系统关机的命令"},"skill":{"n":"skill","p":"/skill","d":"向选定的进程发送信号冻结进程"},"slabtop":{"n":"slabtop","p":"/slabtop","d":"实时显示内核slab内存缓存信息"},"sleep":{"n":"sleep","p":"/sleep","d":"将目前动作延迟一段时间"},"slocate":{"n":"slocate","p":"/slocate","d":"命令查找文件或目录"},"smartmontools":{"n":"smartmontools","p":"/smartmontools","d":"Smartmontools 是一种硬盘检测工具,通过控制和管理硬盘的SMART(Self Monitoring Analysis and Reporting Technology,自动检测分析及报告技术)技术来实现的"},"smbclient":{"n":"smbclient","p":"/smbclient","d":"交互方式访问samba服务器"},"smbpasswd":{"n":"smbpasswd","p":"/smbpasswd","d":"samba用户和密码管理工具"},"sort":{"n":"sort","p":"/sort","d":"对文本文件中所有行进行排序。"},"source":{"n":"source","p":"/source","d":"在当前Shell环境中从指定文件读取和执行命令。"},"speedtest-cli":{"n":"speedtest-cli","p":"/speedtest-cli","d":"命令行下测试服务器外网速度"},"spell":{"n":"spell","p":"/spell","d":"对文件进行拼写检查"},"split":{"n":"split","p":"/split","d":"分割任意大小的文件"},"squid":{"n":"squid","p":"/squid","d":"squid服务器守护进程"},"squidclient":{"n":"squidclient","p":"/squidclient","d":"squid服务器的客户端管理工具"},"ss":{"n":"ss","p":"/ss","d":"比 netstat 好用的socket统计信息,iproute2 包附带的另一个工具,允许你查询 socket 的有关统计信息"},"ssh-add":{"n":"ssh-add","p":"/ssh-add","d":"把专用密钥添加到ssh-agent的高速缓存中"},"ssh-agent":{"n":"ssh-agent","p":"/ssh-agent","d":"ssh密钥管理器"},"ssh-copy-id":{"n":"ssh-copy-id","p":"/ssh-copy-id","d":"把本地的ssh公钥文件安装到远程主机对应的账户下"},"ssh-keygen":{"n":"ssh-keygen","p":"/ssh-keygen","d":"为ssh生成、管理和转换认证密钥"},"ssh-keyscan":{"n":"ssh-keyscan","p":"/ssh-keyscan","d":"收集主机公钥的使用工具"},"ssh":{"n":"ssh","p":"/ssh","d":"openssh套件中的客户端连接工具"},"sshd":{"n":"sshd","p":"/sshd","d":"openssh软件套件中的服务器守护进程"},"sshpass":{"n":"sshpass","p":"/sshpass","d":"免交互 SSH 登录工具。"},"startx":{"n":"startx","p":"/startx","d":"用来启动X Window"},"stat":{"n":"stat","p":"/stat","d":"用于显示文件的状态信息"},"strace":{"n":"strace","p":"/strace","d":"跟踪系统调用和信号"},"strings":{"n":"strings","p":"/strings","d":"在对象文件或二进制文件中查找可打印的字符串"},"stty":{"n":"stty","p":"/stty","d":"修改终端命令行的相关设置"},"su":{"n":"su","p":"/su","d":"用于切换当前用户身份到其他用户身份"},"sudo":{"n":"sudo","p":"/sudo","d":"以其他身份来执行命令"},"sum":{"n":"sum","p":"/sum","d":"计算文件的校验码和显示块数"},"supervisord":{"n":"supervisord","p":"/supervisord","d":"配置后台服务/常驻进程的进程管家工具"},"suspend":{"n":"suspend","p":"/suspend","d":"挂起shell的执行。"},"swapoff":{"n":"swapoff","p":"/swapoff","d":"关闭指定的交换空间"},"swapon":{"n":"swapon","p":"/swapon","d":"激活Linux系统中交换空间"},"sync":{"n":"sync","p":"/sync","d":"用于强制被改变的内容立刻写入磁盘"},"sysctl":{"n":"sysctl","p":"/sysctl","d":"时动态地修改内核的运行参数"},"syslog":{"n":"syslog","p":"/syslog","d":"系统默认的日志守护进程"},"systemctl":{"n":"systemctl","p":"/systemctl","d":"系统服务管理器指令"},"systool":{"n":"systool","p":"/systool","d":"显示基于总线、类和拓扑显示系统中设备的信息"},"tac":{"n":"tac","p":"/tac","d":"连接多个文件并以行为单位反向打印到标准输出。"},"tail":{"n":"tail","p":"/tail","d":"在屏幕上显示指定文件的末尾若干行"},"tailf":{"n":"tailf","p":"/tailf","d":"在屏幕上显示指定文件的末尾若干行内容,通常用于日志文件的跟踪输出"},"talk":{"n":"talk","p":"/talk","d":"让用户和其他用户聊天"},"tar":{"n":"tar","p":"/tar","d":"将许多文件一起保存至一个单独的磁带或磁盘归档,并能从归档中单独还原所需文件。"},"tcpdump":{"n":"tcpdump","p":"/tcpdump","d":"一款sniffer工具,是Linux上的抓包工具,嗅探器"},"tcpreplay":{"n":"tcpreplay","p":"/tcpreplay","d":"将保存在 PCAP 文件包重新发送,用于性能或者功能测试"},"tee":{"n":"tee","p":"/tee","d":"从标准输入读取数据并重定向到标准输出和文件。"},"telinit":{"n":"telinit","p":"/telinit","d":"切换当前正在运行系统的运行等级"},"telnet":{"n":"telnet","p":"/telnet","d":"登录远程主机和管理(测试ip端口是否连通)"},"tempfile":{"n":"tempfile","p":"/tempfile","d":"shell中给临时文件命名"},"test":{"n":"test","p":"/test","d":"执行条件表达式。"},"tftp":{"n":"tftp","p":"/tftp","d":"在本机和tftp服务器之间使用TFTP协议传输文件"},"time":{"n":"time","p":"/time","d":"统计给定命令所花费的总时间"},"timedatectl":{"n":"timedatectl","p":"/timedatectl","d":"用于在 Linux 中设置或查询系统时间、日期和时区等配置。"},"times":{"n":"times","p":"/times","d":"显示进程累计时间。"},"tload":{"n":"tload","p":"/tload","d":"显示系统负载状况"},"tmux":{"n":"tmux","p":"/tmux","d":"Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权"},"top":{"n":"top","p":"/top","d":"显示或管理执行中的程序"},"touch":{"n":"touch","p":"/touch","d":"创建新的空文件"},"tput":{"n":"tput","p":"/tput","d":"通过terminfo数据库对终端会话进行初始化和操作"},"tr":{"n":"tr","p":"/tr","d":"将字符进行替换压缩和删除"},"tracepath":{"n":"tracepath","p":"/tracepath","d":"追踪目的主机经过的路由信息"},"traceroute":{"n":"traceroute","p":"/traceroute","d":"显示数据包到主机间的路径"},"trap":{"n":"trap","p":"/trap","d":"捕捉信号和其他事件并执行命令。"},"tree":{"n":"tree","p":"/tree","d":"树状图列出目录的内容"},"true":{"n":"true","p":"/true","d":"返回状态为成功。"},"tty":{"n":"tty","p":"/tty","d":"显示连接到当前标准输入的终端设备文件名"},"type":{"n":"type","p":"/type","d":"显示指定命令的类型。"},"ulimit":{"n":"ulimit","p":"/ulimit","d":"控制shell程序的资源"},"umask":{"n":"umask","p":"/umask","d":"显示或设置创建文件的权限掩码。"},"umount":{"n":"umount","p":"/umount","d":"用于卸载已经加载的文件系统"},"unalias":{"n":"unalias","p":"/unalias","d":"删除由alias设置的别名"},"uname":{"n":"uname","p":"/uname","d":"打印系统信息。"},"unarj":{"n":"unarj","p":"/unarj","d":"解压缩由arj命令创建的压缩包"},"uncompress":{"n":"uncompress","p":"/uncompress","d":"用来解压.Z文件"},"unexpand":{"n":"unexpand","p":"/unexpand","d":"将文件的空白字符转换为制表符"},"uniq":{"n":"uniq","p":"/uniq","d":"显示或忽略重复的行。"},"unlink":{"n":"unlink","p":"/unlink","d":"系统调用函数unlink去删除指定的文件"},"unprotoize":{"n":"unprotoize","p":"/unprotoize","d":"删除C语言源代码文件中的函数原型"},"unrar":{"n":"unrar","p":"/unrar","d":"解压rar文件命令,从 rar 压缩包中提取文件"},"unset":{"n":"unset","p":"/unset","d":"删除指定的shell变量或函数。"},"unzip":{"n":"unzip","p":"/unzip","d":"用于解压缩由zip命令压缩的压缩包"},"updatedb":{"n":"updatedb","p":"/updatedb","d":"创建或更新slocate命令所必需的数据库文件"},"uptime":{"n":"uptime","p":"/uptime","d":"查看Linux系统负载信息"},"useradd":{"n":"useradd","p":"/useradd","d":"创建的新的系统用户"},"userdel":{"n":"userdel","p":"/userdel","d":"用于删除给定的用户以及与用户相关的文件"},"usermod":{"n":"usermod","p":"/usermod","d":"用于修改用户的基本信息"},"usernetctl":{"n":"usernetctl","p":"/usernetctl","d":"被允许时操作指定的网络接口"},"users":{"n":"users","p":"/users","d":"打印当前主机所有登陆用户的名称。"},"uucico":{"n":"uucico","p":"/uucico","d":"UUCP文件传输服务程序"},"uupick":{"n":"uupick","p":"/uupick","d":"命令处理传送进来的文件"},"uuto":{"n":"uuto","p":"/uuto","d":"将文件传送到远端的UUCP主机"},"vdfuse":{"n":"vdfuse","p":"/vdfuse","d":"VirtualBox软件挂载VDI分区文件工具"},"vgchange":{"n":"vgchange","p":"/vgchange","d":"修改卷组属性"},"vgconvert":{"n":"vgconvert","p":"/vgconvert","d":"转换卷组元数据格式"},"vgcreate":{"n":"vgcreate","p":"/vgcreate","d":"用于创建LVM卷组"},"vgdisplay":{"n":"vgdisplay","p":"/vgdisplay","d":"显示LVM卷组的信息"},"vgextend":{"n":"vgextend","p":"/vgextend","d":"向卷组中添加物理卷"},"vgreduce":{"n":"vgreduce","p":"/vgreduce","d":"从卷组中删除物理卷"},"vgremove":{"n":"vgremove","p":"/vgremove","d":"用于用户删除LVM卷组"},"vgrename":{"n":"vgrename","p":"/vgrename","d":"使用vgrename命令可以重命名卷组的名称"},"vgscan":{"n":"vgscan","p":"/vgscan","d":"扫描并显示系统中的卷组"},"vi":{"n":"vi","p":"/vi","d":"功能强大的纯文本编辑器"},"vmstat":{"n":"vmstat","p":"/vmstat","d":"显示虚拟内存状态"},"volname":{"n":"volname","p":"/volname","d":"显示指定的ISO-9660格式的设备的卷名称"},"w":{"n":"w","p":"/w","d":"显示目前登入系统的用户信息"},"wait":{"n":"wait","p":"/wait","d":"等待进程执行完后返回"},"wall":{"n":"wall","p":"/wall","d":"向系统当前所有打开的终端上输出信息"},"watch":{"n":"watch","p":"/watch","d":"可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令"},"wc":{"n":"wc","p":"/wc","d":"统计文件的字节数、字数、行数"},"wget":{"n":"wget","p":"/wget","d":"Linux系统下载文件工具"},"whatis":{"n":"whatis","p":"/whatis","d":"查询一个命令执行什么功能"},"whereis":{"n":"whereis","p":"/whereis","d":"查找二进制程序、代码等相关文件路径"},"which":{"n":"which","p":"/which","d":"查找并显示给定命令的绝对路径"},"who":{"n":"who","p":"/who","d":"显示当前所有登陆用户的信息。"},"whoami":{"n":"whoami","p":"/whoami","d":"打印当前有效的用户ID对应的名称"},"write":{"n":"write","p":"/write","d":"向指定登录用户终端上发送信息"},"xargs":{"n":"xargs","p":"/xargs","d":"给其他命令传递参数的一个过滤器"},"xauth":{"n":"xauth","p":"/xauth","d":"显示和编辑被用于连接X服务器的认证信息"},"xclip":{"n":"xclip","p":"/xclip","d":"管理 X 粘贴板"},"xhost":{"n":"xhost","p":"/xhost","d":"制哪些X客户端能够在X服务器上显示"},"xinit":{"n":"xinit","p":"/xinit","d":"是Linux下X-Window系统的初始化程序"},"xlsatoms":{"n":"xlsatoms","p":"/xlsatoms","d":"列出X服务器内部所有定义的原子成分"},"xlsclients":{"n":"xlsclients","p":"/xlsclients","d":"列出显示器中的客户端应用程序"},"xlsfonts":{"n":"xlsfonts","p":"/xlsfonts","d":"列出X Server使用的字体"},"xrandr":{"n":"xrandr","p":"/xrandr","d":"X 窗口系统配置管理工具"},"xset":{"n":"xset","p":"/xset","d":"设置X-Window系统中的用户爱好的实用工具"},"xz":{"n":"xz","p":"/xz","d":"POSIX 平台开发具有高压缩率的工具"},"yes":{"n":"yes","p":"/yes","d":"重复打印指定字符串"},"ypdomainname":{"n":"ypdomainname","p":"/ypdomainname","d":"显示主机的NIS的域名"},"yum":{"n":"yum","p":"/yum","d":"基于RPM的软件包管理器"},"zcat":{"n":"zcat","p":"/zcat","d":"显示压缩包中文件的内容"},"zfore":{"n":"zfore","p":"/zfore","d":"强制为gzip格式的压缩文件添加.gz后缀"},"zip":{"n":"zip","p":"/zip","d":"可以用来解压缩文件"},"zipinfo":{"n":"zipinfo","p":"/zipinfo","d":"用来列出压缩文件信息"},"zipsplit":{"n":"zipsplit","p":"/zipsplit","d":"将较大的zip压缩包分割成各个较小的压缩包"},"znew":{"n":"znew","p":"/znew","d":"将.Z压缩包重新转化为gzip命令压缩的.gz压缩包"}} \ No newline at end of file +{"7z":{"n":"7z","p":"/7z","d":"拥有极高压缩比的开源压缩软件。"},"ab":{"n":"ab","p":"/ab","d":"Apache服务器的性能测试工具"},"accept":{"n":"accept","p":"/accept","d":"指示打印系统接受发往指定目标打印机的打印任务"},"ack":{"n":"ack","p":"/ack","d":"比grep好用的文本搜索工具"},"ag":{"n":"ag","p":"/ag","d":"ack 的升级版,C语言编写,更快更人性化"},"alias":{"n":"alias","p":"/alias","d":"定义或显示别名。"},"apachectl":{"n":"apachectl","p":"/apachectl","d":"Apache服务器前端控制工具"},"apk":{"n":"apk","p":"/apk","d":"Alpine Linux 下的包管理工具"},"apropos":{"n":"apropos","p":"/apropos","d":"在 whatis 数据库中查找字符串"},"apt-get":{"n":"apt-get","p":"/apt-get","d":"Debian Linux发行版中的APT软件包管理工具"},"apt-key":{"n":"apt-key","p":"/apt-key","d":"管理Debian Linux系统中的软件包密钥"},"apt-sortpkgs":{"n":"apt-sortpkgs","p":"/apt-sortpkgs","d":"Debian Linux下对软件包索引文件进行排序的工具"},"aptitude":{"n":"aptitude","p":"/aptitude","d":"Debian Linux系统中软件包管理工具"},"ar":{"n":"ar","p":"/ar","d":"建立或修改备存文件,或是从备存文件中抽取文件"},"arch":{"n":"arch","p":"/arch","d":"显示当前主机的硬件架构类型"},"arj":{"n":"arj","p":"/arj","d":"用于创建和管理.arj压缩包"},"arp":{"n":"arp","p":"/arp","d":"arp 命令用于显示和修改 IP 到 MAC 转换表"},"arpd":{"n":"arpd","p":"/arpd","d":"收集免费ARP信息"},"arping":{"n":"arping","p":"/arping","d":"通过发送ARP协议报文测试网络"},"arptables":{"n":"arptables","p":"/arptables","d":"管理ARP包过滤规则表"},"arpwatch":{"n":"arpwatch","p":"/arpwatch","d":"监听网络上ARP的记录"},"as":{"n":"as","p":"/as","d":"汇编语言编译器"},"at":{"n":"at","p":"/at","d":"在指定时间执行一个任务"},"atop":{"n":"atop","p":"/atop","d":"监控Linux系统资源与进程的工具"},"atq":{"n":"atq","p":"/atq","d":"列出当前用户的at任务列表"},"atrm":{"n":"atrm","p":"/atrm","d":"删除待执行任务队列中的指定任务"},"awk":{"n":"awk","p":"/awk","d":"文本和数据进行处理的编程语言"},"axel":{"n":"axel","p":"/axel","d":"多线程下载工具"},"badblocks":{"n":"badblocks","p":"/badblocks","d":"查找磁盘中损坏的区块"},"base64":{"n":"base64","p":"/base64","d":"base64 编码/解码文件或标准输入输出"},"basename":{"n":"basename","p":"/basename","d":"打印目录或者文件的基本名称"},"batch":{"n":"batch","p":"/batch","d":"在系统不繁忙的时候执行定时任务"},"bc":{"n":"bc","p":"/bc","d":"算术操作精密运算工具"},"bg":{"n":"bg","p":"/bg","d":"将前台终端作业移动到后台运行"},"bind":{"n":"bind","p":"/bind","d":"显示或设置键盘按键与其相关的功能"},"blkid":{"n":"blkid","p":"/blkid","d":"查看块设备的文件系统类型、LABEL、UUID等信息"},"blockdev":{"n":"blockdev","p":"/blockdev","d":"从命令行调用区块设备控制程序"},"bmodinfo":{"n":"bmodinfo","p":"/bmodinfo","d":"显示给定模块的详细信息"},"break":{"n":"break","p":"/break","d":"结束for,while或until循环。"},"builtin":{"n":"builtin","p":"/builtin","d":"执行bash内建命令。"},"bunzip2":{"n":"bunzip2","p":"/bunzip2","d":"可解压缩.bz2格式的压缩文件。 "},"bye":{"n":"bye","p":"/bye","d":"命令用于中断FTP连线并结束程序"},"bzcat":{"n":"bzcat","p":"/bzcat","d":"不解压,直接查看指定的.bz2文件"},"bzcmp":{"n":"bzcmp","p":"/bzcmp","d":"比较两个压缩包中的文件"},"bzdiff":{"n":"bzdiff","p":"/bzdiff","d":"直接比较两个.bz2压缩包中文件的不同"},"bzgrep":{"n":"bzgrep","p":"/bzgrep","d":"使用正则表达式搜索.bz2压缩包中文件"},"bzip2":{"n":"bzip2","p":"/bzip2","d":"将文件压缩成bz2格式"},"bzip2recover":{"n":"bzip2recover","p":"/bzip2recover","d":"恢复被破坏的.bz2压缩包中的文件"},"bzless":{"n":"bzless","p":"/bzless","d":"增强.bz2压缩包查看器"},"bzmore":{"n":"bzmore","p":"/bzmore","d":"查看bzip2压缩过的文本文件的内容"},"cal":{"n":"cal","p":"/cal","d":"显示当前日历或指定日期的日历"},"cancel":{"n":"cancel","p":"/cancel","d":"取消已存在的打印任务"},"cat":{"n":"cat","p":"/cat","d":"连接多个文件并打印到标准输出。"},"cd":{"n":"cd","p":"/cd","d":"切换用户当前工作目录。"},"cdrecord":{"n":"cdrecord","p":"/cdrecord","d":"Linux系统下光盘刻录功能命令"},"chage":{"n":"chage","p":"/chage","d":"修改帐号和密码的有效期限"},"chattr":{"n":"chattr","p":"/chattr","d":"用来改变文件属性"},"chcon":{"n":"chcon","p":"/chcon","d":"修改对象(文件)的安全上下文"},"chfn":{"n":"chfn","p":"/chfn","d":"用来改变finger命令显示的信息"},"chgrp":{"n":"chgrp","p":"/chgrp","d":"用来变更文件或目录的所属群组"},"chkconfig":{"n":"chkconfig","p":"/chkconfig","d":"检查或设置系统的各种服务"},"chmod":{"n":"chmod","p":"/chmod","d":"用来变更文件或目录的权限"},"chown":{"n":"chown","p":"/chown","d":"用来变更文件或目录的拥有者或所属群组"},"chpasswd":{"n":"chpasswd","p":"/chpasswd","d":"批量更新用户口令的工具"},"chroot":{"n":"chroot","p":"/chroot","d":"把根目录换成指定的目的目录"},"chsh":{"n":"chsh","p":"/chsh","d":"用来更换登录系统时使用的shell"},"cksum":{"n":"cksum","p":"/cksum","d":"检查文件的CRC是否正确"},"clear":{"n":"clear","p":"/clear","d":"清除当前屏幕终端上的任何信息"},"clock":{"n":"clock","p":"/clock","d":"用于调整 RTC 时间"},"clockdiff":{"n":"clockdiff","p":"/clockdiff","d":"检测两台linux主机的时间差"},"cmp":{"n":"cmp","p":"/cmp","d":"比较两个文件是否有差异"},"col":{"n":"col","p":"/col","d":"过滤控制字符"},"colrm":{"n":"colrm","p":"/colrm","d":"删除文件中的指定列"},"column":{"n":"column","p":"/column","d":"按列格式化输出文件"},"comm":{"n":"comm","p":"/comm","d":"按行比较两个已排序的文件。"},"command":{"n":"command","p":"/command","d":"调用并执行指定的命令"},"compress":{"n":"compress","p":"/compress","d":"使用Lempress-Ziv编码压缩数据文件"},"consoletype":{"n":"consoletype","p":"/consoletype","d":"输出已连接的终端类型"},"continue":{"n":"continue","p":"/continue","d":"结束本次循环,继续执行下一个for,while或until循环。"},"convertquota":{"n":"convertquota","p":"/convertquota","d":"把老的配额文件转换为新的格式"},"cp":{"n":"cp","p":"/cp","d":"将源文件或目录复制到目标文件或目录中"},"cpio":{"n":"cpio","p":"/cpio","d":"用来建立、还原备份档的工具程序"},"createrepo":{"n":"createrepo","p":"/createrepo","d":"创建YUM仓库"},"crontab":{"n":"crontab","p":"/crontab","d":"提交和管理用户的需要周期性执行的任务"},"csplit":{"n":"csplit","p":"/csplit","d":"将一个大文件分割成小的碎片文件"},"cu":{"n":"cu","p":"/cu","d":"用于连接另一个系统主机"},"cupsdisable":{"n":"cupsdisable","p":"/cupsdisable","d":"停止指定的打印机"},"cupsenable":{"n":"cupsenable","p":"/cupsenable","d":"启动指定的打印机"},"curl":{"n":"curl","p":"/curl","d":"利用URL规则在命令行下工作的文件传输工具"},"cut":{"n":"cut","p":"/cut","d":"连接文件并打印到标准输出设备上"},"date":{"n":"date","p":"/date","d":"显示或设置系统时间与日期"},"dc":{"n":"dc","p":"/dc","d":"任意精度计算器"},"dd":{"n":"dd","p":"/dd","d":"复制文件并对原文件的内容进行转换和格式化处理"},"declare":{"n":"declare","p":"/declare","d":"声明变量,设置或显示变量的值和属性。"},"depmod":{"n":"depmod","p":"/depmod","d":"分析可载入模块的相依性"},"df":{"n":"df","p":"/df","d":"显示磁盘的相关信息"},"dhclient":{"n":"dhclient","p":"/dhclient","d":"动态获取或释放IP地址"},"dhcpd":{"n":"dhcpd","p":"/dhcpd","d":"运行DHCP服务器"},"dhcrelay":{"n":"dhcrelay","p":"/dhcrelay","d":"使用dhcrelay命令可以提供中继DHCP和BOOTP请求"},"diff":{"n":"diff","p":"/diff","d":"比较给定的两个文件的不同"},"diff3":{"n":"diff3","p":"/diff3","d":"比较3个文件不同的地方"},"diffstat":{"n":"diffstat","p":"/diffstat","d":"显示diff命令输出信息的柱状图"},"dig":{"n":"dig","p":"/dig","d":"域名查询工具"},"dircolors":{"n":"dircolors","p":"/dircolors","d":"置ls命令在显示目录或文件时所用的色彩"},"dirname":{"n":"dirname","p":"/dirname","d":"去除文件名中的非目录部分"},"dirs":{"n":"dirs","p":"/dirs","d":"显示目录堆栈。"},"disown":{"n":"disown","p":"/disown","d":"从当前的shell中移除作业。"},"dmesg":{"n":"dmesg","p":"/dmesg","d":"显示Linux系统启动信息"},"dmidecode":{"n":"dmidecode","p":"/dmidecode","d":"在Linux系统下获取有关硬件方面的信息"},"dnf":{"n":"dnf","p":"/dnf","d":"新一代的RPM软件包管理器"},"dnsdomainname":{"n":"dnsdomainname","p":"/dnsdomainname","d":"定义DNS系统中FQDN名称的域名"},"docker":{"n":"docker","p":"/docker","d":"容器化技术,可以将应用程序及其依赖项打包到一个可移植的容器中,使其可以在不同的环境中运行"},"domainname":{"n":"domainname","p":"/domainname","d":"显示和设置系统的NIS域名"},"dos2unix":{"n":"dos2unix","p":"/dos2unix","d":"将DOS格式文本文件转换成Unix格式"},"dpkg-deb":{"n":"dpkg-deb","p":"/dpkg-deb","d":"Debian Linux下的软件包管理工具"},"dpkg-divert":{"n":"dpkg-divert","p":"/dpkg-divert","d":"Debian Linux中创建并管理一个转向列表"},"dpkg-preconfigure":{"n":"dpkg-preconfigure","p":"/dpkg-preconfigure","d":"Debian Linux中软件包安装之前询问问题"},"dpkg-query":{"n":"dpkg-query","p":"/dpkg-query","d":"Debian Linux中软件包的查询工具"},"dpkg-reconfigure":{"n":"dpkg-reconfigure","p":"/dpkg-reconfigure","d":"Debian Linux中重新配制一个已经安装的软件包"},"dpkg-split":{"n":"dpkg-split","p":"/dpkg-split","d":"Debian Linux中将大软件包分割成小包"},"dpkg-statoverride":{"n":"dpkg-statoverride","p":"/dpkg-statoverride","d":"Debian Linux中覆盖文件的所有权和模式"},"dpkg-trigger":{"n":"dpkg-trigger","p":"/dpkg-trigger","d":"Debian Linux下的软件包触发器"},"dpkg":{"n":"dpkg","p":"/dpkg","d":"Debian Linux系统上安装、创建和管理软件包"},"dris":{"n":"dris","p":"/dris","d":"显示和清空目录堆栈中的内容"},"dstat":{"n":"dstat","p":"/dstat","d":"通用的系统资源统计工具"},"du":{"n":"du","p":"/du","d":"显示每个文件和目录的磁盘使用空间"},"dump":{"n":"dump","p":"/dump","d":"用于备份ext2或者ext3文件系统"},"e2fsck":{"n":"e2fsck","p":"/e2fsck","d":"用于检查第二扩展文件系统的完整性"},"e2label":{"n":"e2label","p":"/e2label","d":"设置第二扩展文件系统的卷标"},"echo":{"n":"echo","p":"/echo","d":"输出指定的字符串或者变量"},"ed":{"n":"ed","p":"/ed","d":"单行纯文本编辑器"},"edquota":{"n":"edquota","p":"/edquota","d":"用于编辑指定用户或工作组磁盘配额"},"egrep":{"n":"egrep","p":"/egrep","d":"在文件内查找指定的字符串"},"eject":{"n":"eject","p":"/eject","d":"用来退出抽取式设备"},"elinks":{"n":"elinks","p":"/elinks","d":"纯文本界面的WWW浏览器"},"elm":{"n":"elm","p":"/elm","d":"纯文本邮件客户端程序"},"emacs":{"n":"emacs","p":"/emacs","d":"功能强大的全屏文本编辑器"},"enable":{"n":"enable","p":"/enable","d":"启动或禁用shell内建命令"},"env":{"n":"env","p":"/env","d":"显示系统中已存在的环境变量"},"ethtool":{"n":"ethtool","p":"/ethtool","d":"显示或修改以太网卡的配置信息"},"ex":{"n":"ex","p":"/ex","d":"启动vim编辑器的ex编辑模式"},"exec":{"n":"exec","p":"/exec","d":"调用并执行指定的命令"},"exit":{"n":"exit","p":"/exit","d":"退出当前的shell。"},"expand":{"n":"expand","p":"/expand","d":"将文件的制表符转换为空白字符"},"export":{"n":"export","p":"/export","d":"为shell变量或函数设置导出属性。"},"exportfs":{"n":"exportfs","p":"/exportfs","d":"管理NFS共享文件系统列表"},"expr":{"n":"expr","p":"/expr","d":"一款表达式计算工具"},"false":{"n":"false","p":"/false","d":"返回状态为失败。"},"fc":{"n":"fc","p":"/fc","d":"显示历史列表中的命令或修改指定的历史命令并执行。"},"fdisk":{"n":"fdisk","p":"/fdisk","d":"查看磁盘使用情况和磁盘分区"},"fg":{"n":"fg","p":"/fg","d":"将后台作业移动到前台终端运行"},"fgrep":{"n":"fgrep","p":"/fgrep","d":"为文件搜索文字字符串"},"figlet":{"n":"figlet","p":"/figlet","d":"字符串转为 “字画符”。"},"file":{"n":"file","p":"/file","d":"用来探测给定文件的类型"},"find":{"n":"find","p":"/find","d":"在指定目录下查找文件"},"findfs":{"n":"findfs","p":"/findfs","d":"标签或UUID查找文件系统"},"finger":{"n":"finger","p":"/finger","d":"用于查找并显示用户信息"},"firewall-cmd":{"n":"firewall-cmd","p":"/firewall-cmd","d":"Linux上新用的防火墙软件,跟iptables差不多的工具"},"fishshell":{"n":"fishshell","p":"/fishshell","d":"比 bash 更好用的 shell"},"fmt":{"n":"fmt","p":"/fmt","d":"读取文件后优化处理并输出"},"fold":{"n":"fold","p":"/fold","d":"控制文件内容输出时所占用的屏幕宽度"},"fping":{"n":"fping","p":"/fping","d":"fping检测主机是否存在"},"free":{"n":"free","p":"/free","d":"显示内存的使用情况"},"fsck":{"n":"fsck","p":"/fsck","d":"fsck(英文全拼:file system check)命令检查并且试图修复文件系统中的错误"},"ftp":{"n":"ftp","p":"/ftp","d":"用来设置文件系统相关功能"},"ftpcount":{"n":"ftpcount","p":"/ftpcount","d":"显示目前已FTP登入的用户人数"},"ftpshut":{"n":"ftpshut","p":"/ftpshut","d":"在指定的时间关闭FTP服务器"},"ftptop":{"n":"ftptop","p":"/ftptop","d":"proftpd服务器的连接状态"},"ftpwho":{"n":"ftpwho","p":"/ftpwho","d":"显示当前每个ftp会话信息"},"fuser":{"n":"fuser","p":"/fuser","d":"使用文件或文件结构识别进程"},"gcc":{"n":"gcc","p":"/gcc","d":"基于C/C++的编译器"},"gcov":{"n":"gcov","p":"/gcov","d":"测试程序的代码覆盖率的工具"},"gdb":{"n":"gdb","p":"/gdb","d":"功能强大的程序调试器"},"get_module":{"n":"get_module","p":"/get_module","d":"获取Linux内核模块的详细信息"},"getcap":{"n":"getcap","p":"/getcap","d":"显示文件的能力(capabilities)"},"getenforce":{"n":"getenforce","p":"/getenforce","d":"显示当前SELinux的应用模式,是强制、执行还是停用"},"getent":{"n":"getent","p":"/getent","d":"查询 DNS 名称服务器中的命名空间"},"getfacl":{"n":"getfacl","p":"/getfacl","d":"获取文件访问控制列表(access control lists)"},"getsebool":{"n":"getsebool","p":"/getsebool","d":"查询SElinux策略内各项规则的布尔值"},"git":{"n":"git","p":"/git","d":"是目前世界上最先进的分布式版本控制系统"},"gpasswd":{"n":"gpasswd","p":"/gpasswd","d":"Linux下工作组文件的管理工具"},"gpg":{"n":"gpg","p":"/gpg","d":"可用于签名、检查、加密或解密的工具"},"gpm":{"n":"gpm","p":"/gpm","d":"提供文字模式下的滑鼠事件处理"},"grep":{"n":"grep","p":"/grep","d":"强大的文本搜索工具"},"groupadd":{"n":"groupadd","p":"/groupadd","d":"用于创建一个新的工作组"},"groupdel":{"n":"groupdel","p":"/groupdel","d":"用于删除指定的工作组"},"groupmems":{"n":"groupmems","p":"/groupmems","d":"管理用户主要组的成员"},"groupmod":{"n":"groupmod","p":"/groupmod","d":"更改群组识别码或名称"},"groups":{"n":"groups","p":"/groups","d":"打印指定用户所在组的名称。"},"grpck":{"n":"grpck","p":"/grpck","d":"用于验证组文件的完整性"},"grpconv":{"n":"grpconv","p":"/grpconv","d":"用来开启群组的投影密码"},"grpunconv":{"n":"grpunconv","p":"/grpunconv","d":"用来关闭群组的投影密码"},"grub":{"n":"grub","p":"/grub","d":"多重引导程序grub的命令行shell工具"},"grub2-mkconfig":{"n":"grub2-mkconfig","p":"/grub2-mkconfig","d":"生成 grub.cfg 配置文件。"},"grub2-set-default":{"n":"grub2-set-default","p":"/grub2-set-default","d":"设置系统默认的启动内核"},"gunzip":{"n":"gunzip","p":"/gunzip","d":"用来解压缩文件"},"gzexe":{"n":"gzexe","p":"/gzexe","d":"用来压缩可执行文件"},"gzip":{"n":"gzip","p":"/gzip","d":"用来压缩文件"},"halt":{"n":"halt","p":"/halt","d":"关闭正在运行的Linux操作系统"},"hcitool":{"n":"hcitool","p":"/hcitool","d":"hcitool是一个Linux命令行工具,用于管理和调试蓝牙设备。它可以用于扫描周围的蓝牙设备、连接到蓝牙设备发送命令和数据包等。"},"hdparm":{"n":"hdparm","p":"/hdparm","d":"显示与设定硬盘的参数"},"head":{"n":"head","p":"/head","d":"显示文件的开头部分。"},"help":{"n":"help","p":"/help","d":"该命令是bash内建命令,用于显示bash内建命令的帮助信息。"},"hexdump":{"n":"hexdump","p":"/hexdump","d":"显示文件十六进制格式"},"history":{"n":"history","p":"/history","d":"显示或操作历史列表。"},"host":{"n":"host","p":"/host","d":"常用的分析域名查询工具"},"hostid":{"n":"hostid","p":"/hostid","d":"显示当前主机的十六进制数字标识。"},"hostname":{"n":"hostname","p":"/hostname","d":"显示和设置系统的主机名"},"hostnamectl":{"n":"hostnamectl","p":"/hostnamectl","d":"查询或更改系统主机名"},"hping3":{"n":"hping3","p":"/hping3","d":"测试网络及主机的安全"},"htdigest":{"n":"htdigest","p":"/htdigest","d":"Apache服务器内置工具"},"htop":{"n":"htop","p":"/htop","d":"[非内部命令]一个互动的进程查看器,可以动态观察系统进程状况"},"htpasswd":{"n":"htpasswd","p":"/htpasswd","d":"apache服务器创建密码认证文件"},"hwclock":{"n":"hwclock","p":"/hwclock","d":"显示与设定硬件时钟"},"iconv":{"n":"iconv","p":"/iconv","d":"转换文件的编码方式"},"id":{"n":"id","p":"/id","d":"打印真实以及有效的用户和所在组的信息"},"ifcfg":{"n":"ifcfg","p":"/ifcfg","d":"置Linux中的网络接口参数"},"ifconfig":{"n":"ifconfig","p":"/ifconfig","d":"配置和显示Linux系统网卡的网络参数"},"ifdown":{"n":"ifdown","p":"/ifdown","d":"禁用指定的网络接口"},"ifstat":{"n":"ifstat","p":"/ifstat","d":"统计网络接口流量状态"},"iftop":{"n":"iftop","p":"/iftop","d":"一款实时流量监控工具"},"ifup":{"n":"ifup","p":"/ifup","d":"激活指定的网络接口"},"indent":{"n":"indent","p":"/indent","d":"格式化C语言的源文件"},"info":{"n":"info","p":"/info","d":"Linux下info格式的帮助指令"},"init":{"n":"init","p":"/init","d":"init进程是所有Linux进程的父进程"},"inotifywait":{"n":"inotifywait","p":"/inotifywait","d":"异步文件系统监控机制"},"insmod":{"n":"insmod","p":"/insmod","d":"将给定的模块加载到内核中"},"install":{"n":"install","p":"/install","d":"安装或升级软件或备份数据"},"iostat":{"n":"iostat","p":"/iostat","d":"监视系统输入输出设备和CPU的使用情况"},"iotop":{"n":"iotop","p":"/iotop","d":"用来监视磁盘I/O使用状况的工具"},"ip":{"n":"ip","p":"/ip","d":"网络配置工具"},"ip6tables-restore":{"n":"ip6tables-restore","p":"/ip6tables-restore","d":"还原ip6tables表"},"ip6tables-save":{"n":"ip6tables-save","p":"/ip6tables-save","d":"保存ip6tables表配置"},"ip6tables":{"n":"ip6tables","p":"/ip6tables","d":"linux中防火墙软件"},"ipcalc":{"n":"ipcalc","p":"/ipcalc","d":"简单的IP地址计算器"},"ipcrm":{"n":"ipcrm","p":"/ipcrm","d":"删除消息队列、信号集、或者共享内存标识"},"ipcs":{"n":"ipcs","p":"/ipcs","d":"分析消息队列共享内存和信号量"},"iperf":{"n":"iperf","p":"/iperf","d":"网络性能测试工具"},"iptables-restore":{"n":"iptables-restore","p":"/iptables-restore","d":"还原iptables表的配置"},"iptables-save":{"n":"iptables-save","p":"/iptables-save","d":"备份iptables的表配置"},"iptables":{"n":"iptables","p":"/iptables","d":"Linux上常用的防火墙软件"},"iptraf":{"n":"iptraf","p":"/iptraf","d":"实时地监视网卡流量"},"iptstate":{"n":"iptstate","p":"/iptstate","d":"显示iptables的工作状态"},"iscsiadm":{"n":"iscsiadm","p":"/iscsiadm","d":"管理iSCSI连接"},"ispell":{"n":"ispell","p":"/ispell","d":"检查文件中出现的拼写错误"},"jed":{"n":"jed","p":"/jed","d":"主要用于编辑代码的编辑器"},"jobs":{"n":"jobs","p":"/jobs","d":"显示作业的状态。"},"joe":{"n":"joe","p":"/joe","d":"强大的纯文本编辑器"},"join":{"n":"join","p":"/join","d":"两个文件中指定栏位内容相同的行连接起来"},"journalctl":{"n":"journalctl","p":"/journalctl","d":"检索 systemd 日志,是 CentOS 7 才有的工具。"},"jq":{"n":"jq","p":"/jq","d":"一个灵活的轻量级命令行JSON处理器"},"jwhois":{"n":"jwhois","p":"/jwhois","d":"whois 客户端服务"},"kernelversion":{"n":"kernelversion","p":"/kernelversion","d":"打印当前内核的主版本号"},"kexec":{"n":"kexec","p":"/kexec","d":"从当前正在运行的内核引导到一个新内核"},"kill":{"n":"kill","p":"/kill","d":"发送信号到进程。"},"killall":{"n":"killall","p":"/killall","d":"使用进程的名称来杀死一组进程"},"last":{"n":"last","p":"/last","d":"列出目前与过去登入系统的用户相关信息"},"lastb":{"n":"lastb","p":"/lastb","d":"列出登入系统失败的用户相关信息"},"lastlog":{"n":"lastlog","p":"/lastlog","d":"显示系统中所有用户最近一次登录信息"},"ld":{"n":"ld","p":"/ld","d":"将目标文件连接为可执行程序"},"ldconfig":{"n":"ldconfig","p":"/ldconfig","d":"动态链接库管理命令"},"ldd":{"n":"ldd","p":"/ldd","d":"打印程序或者库文件所依赖的共享库列表"},"less":{"n":"less","p":"/less","d":"分屏上下翻页浏览文件内容"},"let":{"n":"let","p":"/let","d":"简单的计算器,执行算术表达式。"},"lftp":{"n":"lftp","p":"/lftp","d":"优秀的文件客户端程序"},"lftpget":{"n":"lftpget","p":"/lftpget","d":"调用lftp指令下载指定的文件"},"lha":{"n":"lha","p":"/lha","d":"压缩或解压缩lzh格式文件"},"lilo":{"n":"lilo","p":"/lilo","d":"安装核心载入开机管理程序"},"ln":{"n":"ln","p":"/ln","d":"用来为文件创建链接"},"lnstat":{"n":"lnstat","p":"/lnstat","d":"显示Linux系统的网路状态"},"local":{"n":"local","p":"/local","d":"在函数内定义局部变量。"},"locate":{"n":"locate","p":"/locate","d":"比 find 好用的文件查找工具"},"logger":{"n":"logger","p":"/logger","d":"在系统日志中记录相应条目"},"login":{"n":"login","p":"/login","d":"登录系统或切换用户身份"},"logname":{"n":"logname","p":"/logname","d":"打印当前终端登录用户的名称。"},"logout":{"n":"logout","p":"/logout","d":"退出当前登录的Shell"},"logrotate":{"n":"logrotate","p":"/logrotate","d":"系统日志进行轮转、压缩和删除"},"logsave":{"n":"logsave","p":"/logsave","d":"将命令的输出信息保存到指定的日志文件"},"logwatch":{"n":"logwatch","p":"/logwatch","d":"可定制和可插入式的日志监视系统"},"look":{"n":"look","p":"/look","d":"显示文件中以指定字符串开头的任意行"},"losetup":{"n":"losetup","p":"/losetup","d":"设定与控制循环(loop)设备"},"lp":{"n":"lp","p":"/lp","d":"打印文件或修改排队的打印任务"},"lpadmin":{"n":"lpadmin","p":"/lpadmin","d":"配置CUPS套件中的打印机和类"},"lpc":{"n":"lpc","p":"/lpc","d":"命令行方式打印机控制程序"},"lpq":{"n":"lpq","p":"/lpq","d":"显示打印队列中的打印任务的状态信息"},"lpr":{"n":"lpr","p":"/lpr","d":"将文件发送给指定打印机进行打印"},"lprm":{"n":"lprm","p":"/lprm","d":"删除打印队列中的打印任务"},"lpstat":{"n":"lpstat","p":"/lpstat","d":"显示CUPS中打印机的状态信息"},"ls":{"n":"ls","p":"/ls","d":"显示目录内容列表"},"lsattr":{"n":"lsattr","p":"/lsattr","d":"查看文件的第二扩展文件系统属性"},"lsb_release":{"n":"lsb_release","p":"/lsb_release","d":"显示发行版本信息"},"lsblk":{"n":"lsblk","p":"/lsblk","d":"列出块设备信息"},"lscpu":{"n":"lscpu","p":"/lscpu","d":"显示有关CPU架构的信息"},"lsmod":{"n":"lsmod","p":"/lsmod","d":"显示已载入系统的模块"},"lsof":{"n":"lsof","p":"/lsof","d":"显示Linux系统当前已打开的所有文件列表 `lsof -p pid`"},"lspci":{"n":"lspci","p":"/lspci","d":"显示当前主机的所有PCI总线信息"},"lsusb":{"n":"lsusb","p":"/lsusb","d":"显示本机的USB设备列表信息"},"ltrace":{"n":"ltrace","p":"/ltrace","d":"用来跟踪进程调用库函数的情况"},"lvcreate":{"n":"lvcreate","p":"/lvcreate","d":"用于创建LVM的逻辑卷"},"lvdisplay":{"n":"lvdisplay","p":"/lvdisplay","d":"显示逻辑卷属性"},"lvextend":{"n":"lvextend","p":"/lvextend","d":"扩展逻辑卷空间"},"lvreduce":{"n":"lvreduce","p":"/lvreduce","d":"收缩逻辑卷空间"},"lvremove":{"n":"lvremove","p":"/lvremove","d":"删除指定LVM逻辑卷"},"lvresize":{"n":"lvresize","p":"/lvresize","d":"调整逻辑卷空间大小"},"lvscan":{"n":"lvscan","p":"/lvscan","d":"扫描逻辑卷"},"lynx":{"n":"lynx","p":"/lynx","d":"纯文本模式的网页浏览器"},"mail":{"n":"mail","p":"/mail","d":"命令行下发送和接收电子邮件"},"mailq":{"n":"mailq","p":"/mailq","d":"显示待发送的邮件队列"},"mailstat":{"n":"mailstat","p":"/mailstat","d":"显示到达的邮件状态"},"make":{"n":"make","p":"/make","d":"GNU的工程化编译工具"},"man":{"n":"man","p":"/man","d":"查看Linux中的指令帮助"},"mapfile":{"n":"mapfile","p":"/mapfile","d":"从标准输入读取行并赋值到数组。"},"md5sum":{"n":"md5sum","p":"/md5sum","d":"计算和校验文件报文摘要的工具程序"},"mesg":{"n":"mesg","p":"/mesg","d":"设置当前终端的写权限"},"mii-tool":{"n":"mii-tool","p":"/mii-tool","d":"配置网络设备协商方式的工具"},"mkbootdisk":{"n":"mkbootdisk","p":"/mkbootdisk","d":"可建立目前系统的启动盘"},"mkcert":{"n":"mkcert","p":"/mkcert","d":"用来生成自签证书的工具"},"mkdir":{"n":"mkdir","p":"/mkdir","d":"用来创建目录"},"mke2fs":{"n":"mke2fs","p":"/mke2fs","d":"创建磁盘分区上的“etc2/etc3”文件系统"},"mkfs":{"n":"mkfs","p":"/mkfs","d":"用于在设备上创建Linux文件系统"},"mkinitrd":{"n":"mkinitrd","p":"/mkinitrd","d":"建立要载入ramdisk的映像文件"},"mkisofs":{"n":"mkisofs","p":"/mkisofs","d":"建立ISO 9660映像文件"},"mknod":{"n":"mknod","p":"/mknod","d":"创建字符设备文件和块设备文件"},"mkswap":{"n":"mkswap","p":"/mkswap","d":"建立和设置SWAP交换分区"},"mktemp":{"n":"mktemp","p":"/mktemp","d":"创建临时文件供shell脚本使用"},"modetest":{"n":"modetest","p":"/modetest","d":"DRM/KMS驱动程序libdrm中的模式测试工具"},"modprobe":{"n":"modprobe","p":"/modprobe","d":"自动处理可载入模块"},"more":{"n":"more","p":"/more","d":"显示文件内容,每次显示一屏"},"mount":{"n":"mount","p":"/mount","d":"用于挂载Linux系统外的文件"},"mpstat":{"n":"mpstat","p":"/mpstat","d":"显示各个可用CPU的状态"},"mtools":{"n":"mtools","p":"/mtools","d":"显示mtools支持的指令"},"mtr":{"n":"mtr","p":"/mtr","d":"`mtr` 结合了 `traceroute` 和 `ping` 程序的功能,是一款简单的网络诊断工具"},"mv":{"n":"mv","p":"/mv","d":"用来对文件或目录重新命名"},"mysql":{"n":"mysql","p":"/mysql","d":"MySQL服务器客户端工具"},"mysqladmin":{"n":"mysqladmin","p":"/mysqladmin","d":"MySQL服务器管理客户端"},"mysqldump":{"n":"mysqldump","p":"/mysqldump","d":"MySQL数据库中备份工具"},"mysqlimport":{"n":"mysqlimport","p":"/mysqlimport","d":"为MySQL服务器用命令行方式导入数据"},"mysqlshow":{"n":"mysqlshow","p":"/mysqlshow","d":"显示MySQL中数据库相关信息"},"named-checkzone":{"n":"named-checkzone","p":"/named-checkzone","d":"使用named-checkzone命令可以进行区域文件有效性检查和转换,必须指定区域名称和区域文件名称"},"nano":{"n":"nano","p":"/nano","d":"字符终端文本编辑器"},"nc":{"n":"nc","p":"/nc","d":"nc是网络工具中的瑞士军刀"},"ncftp":{"n":"ncftp","p":"/ncftp","d":"是增强的的FTP工具"},"neofetch":{"n":"neofetch","p":"/neofetch","d":"显示带有发行徽标的系统信息的工具"},"nethogs":{"n":"nethogs","p":"/nethogs","d":"终端下的网络流量监控工具"},"netstat":{"n":"netstat","p":"/netstat","d":"查看Linux中网络系统状态信息"},"newusers":{"n":"newusers","p":"/newusers","d":"用于批处理的方式一次创建多个命令"},"nfsstat":{"n":"nfsstat","p":"/nfsstat","d":"列出NFS客户端和服务器的工作状态"},"ngrep":{"n":"ngrep","p":"/ngrep","d":"方便的数据包匹配和显示工具"},"nice":{"n":"nice","p":"/nice","d":"调整程序执行的优先权等级"},"nisdomainname":{"n":"nisdomainname","p":"/nisdomainname","d":"显示主机NIS的域名"},"nl":{"n":"nl","p":"/nl","d":"为每一个文件添加行号。"},"nm":{"n":"nm","p":"/nm","d":"显示二进制目标文件的符号表"},"nmap":{"n":"nmap","p":"/nmap","d":"网络探测和安全审核"},"nmcli":{"n":"nmcli","p":"/nmcli","d":"地址配置工具"},"nohup":{"n":"nohup","p":"/nohup","d":"将程序以忽略挂起信号的方式运行起来"},"nologin":{"n":"nologin","p":"/nologin","d":"拒绝用户登录系统"},"nproc":{"n":"nproc","p":"/nproc","d":"打印可用的处理器单元数量。"},"nslookup":{"n":"nslookup","p":"/nslookup","d":"查询域名DNS信息的工具"},"nstat":{"n":"nstat","p":"/nstat","d":"nstat 是一个简单的监视内核的 SNMP 计数器和网络接口状态的实用工具。"},"ntpdate":{"n":"ntpdate","p":"/ntpdate","d":"使用网络计时协议(NTP)设置日期和时间"},"ntsysv":{"n":"ntsysv","p":"/ntsysv","d":"集中管理系统的各种服务"},"objdump":{"n":"objdump","p":"/objdump","d":"显示二进制文件信息"},"od":{"n":"od","p":"/od","d":"输出文件的八进制、十六进制等格式编码的字节"},"openssl":{"n":"openssl","p":"/openssl","d":"强大的安全套接字层密码库"},"pacman":{"n":"pacman","p":"/pacman","d":"Arch Linux 系统及其衍生系统中默认使用的包管理器"},"parted":{"n":"parted","p":"/parted","d":"磁盘分区和分区大小调整工具"},"partprobe":{"n":"partprobe","p":"/partprobe","d":"不重启的情况下重读分区"},"passwd":{"n":"passwd","p":"/passwd","d":"用于让用户可以更改自己的密码"},"paste":{"n":"paste","p":"/paste","d":"将多个文件按列队列合并"},"patch":{"n":"patch","p":"/patch","d":"为开放源代码软件安装补丁程序"},"pathchk":{"n":"pathchk","p":"/pathchk","d":"检查文件中不可移植的部分"},"perl":{"n":"perl","p":"/perl","d":"perl语言解释器"},"pfctl":{"n":"pfctl","p":"/pfctl","d":"PF防火墙的配置命令"},"pgrep":{"n":"pgrep","p":"/pgrep","d":"根据用户给出的信息在当前运行进程中查找并列出符合条件的进程ID(PID)"},"php":{"n":"php","p":"/php","d":"PHP语言的命令行接口"},"pico":{"n":"pico","p":"/pico","d":"功能强大全屏幕的文本编辑器"},"pidof":{"n":"pidof","p":"/pidof","d":"查找指定名称的进程的进程号ID号"},"pidstat":{"n":"pidstat","p":"/pidstat","d":"监控进程的系统资源占用情况"},"pigz":{"n":"pigz","p":"/pigz","d":"可以用来解压缩文件,gzip的并行实现升级版"},"ping":{"n":"ping","p":"/ping","d":"测试主机之间网络的连通性(ipv4)"},"ping6":{"n":"ping6","p":"/ping6","d":"测试主机之间网络的连通性(ipv6)"},"pip":{"n":"pip","p":"/pip","d":"Python 编程语言中的包管理器,用于安装和管理第三方 Python 模块"},"pkexec":{"n":"pkexec","p":"/pkexec","d":"以其他用户身份执行命令"},"pkill":{"n":"pkill","p":"/pkill","d":"可以按照进程名杀死进程"},"pmap":{"n":"pmap","p":"/pmap","d":"报告进程的内存映射关系"},"popd":{"n":"popd","p":"/popd","d":"从目录堆栈中删除目录。"},"poweroff":{"n":"poweroff","p":"/poweroff","d":"关闭Linux系统,关闭记录会被写入到/var/log/wtmp日志文件中"},"ppp-off":{"n":"ppp-off","p":"/ppp-off","d":"关闭ppp连线"},"pr":{"n":"pr","p":"/pr","d":"将文本文件转换成适合打印的格式"},"printf":{"n":"printf","p":"/printf","d":"格式化并输出结果。"},"protoize":{"n":"protoize","p":"/protoize","d":"GNU-C代码转换为ANSI-C代码"},"prtstat":{"n":"prtstat","p":"/prtstat","d":"显示进程信息"},"ps":{"n":"ps","p":"/ps","d":"报告当前系统的进程状态"},"pssh":{"n":"pssh","p":"/pssh","d":"批量管理执行"},"pstack":{"n":"pstack","p":"/pstack","d":"显示每个进程的栈跟踪"},"pstree":{"n":"pstree","p":"/pstree","d":"以树状图的方式展现进程之间的派生关系"},"pushd":{"n":"pushd","p":"/pushd","d":"将目录添加到目录堆栈顶部。"},"pv":{"n":"pv","p":"/pv","d":"显示当前在命令行执行的命令的进度信息,管道查看器"},"pvchange":{"n":"pvchange","p":"/pvchange","d":"修改物理卷属性"},"pvck":{"n":"pvck","p":"/pvck","d":"检测物理卷的LVM元数据的一致性"},"pvcreate":{"n":"pvcreate","p":"/pvcreate","d":"将物理硬盘分区初始化为物理卷"},"pvdisplay":{"n":"pvdisplay","p":"/pvdisplay","d":"显示物理卷的属性"},"pvremove":{"n":"pvremove","p":"/pvremove","d":"删除一个存在的物理卷"},"pvs":{"n":"pvs","p":"/pvs","d":"输出物理卷信息报表"},"pvscan":{"n":"pvscan","p":"/pvscan","d":"扫描系统中所有硬盘的物理卷列表"},"pwck":{"n":"pwck","p":"/pwck","d":"用来验证系统认证文件内容和格式的完整性"},"pwconv":{"n":"pwconv","p":"/pwconv","d":"用来开启用户的投影密码"},"pwd":{"n":"pwd","p":"/pwd","d":"显示当前工作目录的绝对路径。"},"pwdx":{"n":"pwdx","p":"/pwdx","d":"用于显示指定进程的当前工作目录"},"pwunconv":{"n":"pwunconv","p":"/pwunconv","d":"用来关闭用户的投影密码"},"quota":{"n":"quota","p":"/quota","d":"显示磁盘已使用的空间与限制"},"quotacheck":{"n":"quotacheck","p":"/quotacheck","d":"检查磁盘的使用空间与限制"},"quotaoff":{"n":"quotaoff","p":"/quotaoff","d":"关闭Linux内核中指定文件系统的磁盘配额功能"},"quotaon":{"n":"quotaon","p":"/quotaon","d":"激活Linux内核中指定文件系统的磁盘配额功能"},"rcconf":{"n":"rcconf","p":"/rcconf","d":"Debian Linux下的运行等级服务配置工具"},"rcp":{"n":"rcp","p":"/rcp","d":"使在两台Linux主机之间的文件复制操作更简单"},"read":{"n":"read","p":"/read","d":"从键盘读取变量值"},"readelf":{"n":"readelf","p":"/readelf","d":"用于显示elf格式文件的信息"},"readonly":{"n":"readonly","p":"/readonly","d":"标记shell变量或函数为只读"},"reboot":{"n":"reboot","p":"/reboot","d":"重新启动正在运行的Linux操作系统"},"reject":{"n":"reject","p":"/reject","d":"指示打印系统拒绝发往指定目标打印机的打印任务"},"rename":{"n":"rename","p":"/rename","d":"用字符串替换的方式批量改变文件名"},"renice":{"n":"renice","p":"/renice","d":"修改正在运行的进程的调度优先级"},"reposync":{"n":"reposync","p":"/reposync","d":"同步yum存储库到本地目录"},"repquota":{"n":"repquota","p":"/repquota","d":"报表的格式输出磁盘空间限制的状态"},"resize":{"n":"resize","p":"/resize","d":"命令设置终端机视窗的大小"},"restore":{"n":"restore","p":"/restore","d":"所进行的操作和dump指令相反"},"restorecon":{"n":"restorecon","p":"/restorecon","d":"恢复文件的安全上下文"},"return":{"n":"return","p":"/return","d":"从函数中退出并返回数值。"},"rev":{"n":"rev","p":"/rev","d":"将文件内容以字符为单位反序输出"},"rexec":{"n":"rexec","p":"/rexec","d":"远程执行Linux系统下命令"},"rlogin":{"n":"rlogin","p":"/rlogin","d":"从当前终端登录到远程Linux主机"},"rm":{"n":"rm","p":"/rm","d":"用于删除给定的文件和目录"},"rmdir":{"n":"rmdir","p":"/rmdir","d":"用来删除空目录"},"rmmod":{"n":"rmmod","p":"/rmmod","d":"从运行的内核中移除指定的内核模块"},"route":{"n":"route","p":"/route","d":"显示并设置Linux中静态路由表"},"rpm":{"n":"rpm","p":"/rpm","d":"RPM软件包的管理工具"},"rpm2cpio":{"n":"rpm2cpio","p":"/rpm2cpio","d":"将RPM软件包转换为cpio格式的文件"},"rpmbuild":{"n":"rpmbuild","p":"/rpmbuild","d":"创建RPM的二进制软件包和源码软件包"},"rpmdb":{"n":"rpmdb","p":"/rpmdb","d":"初始化和重建RPM数据库"},"rpmquery":{"n":"rpmquery","p":"/rpmquery","d":"从RPM数据库中查询软件包信息"},"rpmsign":{"n":"rpmsign","p":"/rpmsign","d":"使用RPM软件包的签名管理工具"},"rpmverify":{"n":"rpmverify","p":"/rpmverify","d":"验证已安装的RPM软件包的正确性"},"rsh":{"n":"rsh","p":"/rsh","d":"连接远程主机并执行命令"},"rsync":{"n":"rsync","p":"/rsync","d":"远程数据同步工具"},"runlevel":{"n":"runlevel","p":"/runlevel","d":"打印当前Linux系统的运行等级"},"sar":{"n":"sar","p":"/sar","d":"系统运行状态统计工具"},"scp":{"n":"scp","p":"/scp","d":"加密的方式在本地主机和远程主机之间复制文件"},"screen":{"n":"screen","p":"/screen","d":"用于命令行终端切换"},"script":{"n":"script","p":"/script","d":"记录终端会话的所有操作"},"scriptreplay":{"n":"scriptreplay","p":"/scriptreplay","d":"重新播放终端会话的所有操作"},"sed":{"n":"sed","p":"/sed","d":"功能强大的流式文本编辑器"},"seinfo":{"n":"seinfo","p":"/seinfo","d":"查询SELinux的策略提供多少相关规则"},"semanage":{"n":"semanage","p":"/semanage","d":"默认目录的安全上下文查询与修改"},"sendmail":{"n":"sendmail","p":"/sendmail","d":"著名电子邮件服务器"},"seq":{"n":"seq","p":"/seq","d":"以指定增量从首数开始打印数字到尾数"},"service":{"n":"service","p":"/service","d":"控制系统服务的实用工具"},"sesearch":{"n":"sesearch","p":"/sesearch","d":"查询SELinux策略的规则详情"},"set":{"n":"set","p":"/set","d":"显示或设置shell特性及shell变量"},"setfacl":{"n":"setfacl","p":"/setfacl","d":"设置文件访问控制列表"},"setpci":{"n":"setpci","p":"/setpci","d":"查询和配置PCI设备的使用工具"},"setsebool":{"n":"setsebool","p":"/setsebool","d":"修改SElinux策略内各项规则的布尔值"},"setsid":{"n":"setsid","p":"/setsid","d":"在新的会话中运行程序"},"sftp-server":{"n":"sftp-server","p":"/sftp-server","d":"sftp协议的服务器端程序"},"sftp":{"n":"sftp","p":"/sftp","d":"交互式的文件传输程序"},"sh":{"n":"sh","p":"/sh","d":"shell命令解释器"},"sha256sum":{"n":"sha256sum","p":"/sha256sum","d":"用于计算文件的 SHA-256 哈希值"},"shift":{"n":"shift","p":"/shift","d":"移动位置参数。"},"shopt":{"n":"shopt","p":"/shopt","d":"显示和设置shell操作选项"},"showmount":{"n":"showmount","p":"/showmount","d":"显示NFS服务器加载的信息"},"shuf":{"n":"shuf","p":"/shuf","d":"产生随机的排列。"},"shutdown":{"n":"shutdown","p":"/shutdown","d":"用来执行系统关机的命令"},"skill":{"n":"skill","p":"/skill","d":"向选定的进程发送信号冻结进程"},"slabtop":{"n":"slabtop","p":"/slabtop","d":"实时显示内核slab内存缓存信息"},"sleep":{"n":"sleep","p":"/sleep","d":"将目前动作延迟一段时间"},"slocate":{"n":"slocate","p":"/slocate","d":"命令查找文件或目录"},"smartmontools":{"n":"smartmontools","p":"/smartmontools","d":"Smartmontools 是一种硬盘检测工具,通过控制和管理硬盘的SMART(Self Monitoring Analysis and Reporting Technology,自动检测分析及报告技术)技术来实现的"},"smbclient":{"n":"smbclient","p":"/smbclient","d":"交互方式访问samba服务器"},"smbpasswd":{"n":"smbpasswd","p":"/smbpasswd","d":"samba用户和密码管理工具"},"sort":{"n":"sort","p":"/sort","d":"对文本文件中所有行进行排序。"},"source":{"n":"source","p":"/source","d":"在当前Shell环境中从指定文件读取和执行命令。"},"speedtest-cli":{"n":"speedtest-cli","p":"/speedtest-cli","d":"命令行下测试服务器外网速度"},"spell":{"n":"spell","p":"/spell","d":"对文件进行拼写检查"},"split":{"n":"split","p":"/split","d":"分割任意大小的文件"},"squid":{"n":"squid","p":"/squid","d":"squid服务器守护进程"},"squidclient":{"n":"squidclient","p":"/squidclient","d":"squid服务器的客户端管理工具"},"ss":{"n":"ss","p":"/ss","d":"比 netstat 好用的socket统计信息,iproute2 包附带的另一个工具,允许你查询 socket 的有关统计信息"},"ssh-add":{"n":"ssh-add","p":"/ssh-add","d":"把专用密钥添加到ssh-agent的高速缓存中"},"ssh-agent":{"n":"ssh-agent","p":"/ssh-agent","d":"ssh密钥管理器"},"ssh-copy-id":{"n":"ssh-copy-id","p":"/ssh-copy-id","d":"把本地的ssh公钥文件安装到远程主机对应的账户下"},"ssh-keygen":{"n":"ssh-keygen","p":"/ssh-keygen","d":"为ssh生成、管理和转换认证密钥"},"ssh-keyscan":{"n":"ssh-keyscan","p":"/ssh-keyscan","d":"收集主机公钥的使用工具"},"ssh":{"n":"ssh","p":"/ssh","d":"openssh套件中的客户端连接工具"},"sshd":{"n":"sshd","p":"/sshd","d":"openssh软件套件中的服务器守护进程"},"sshpass":{"n":"sshpass","p":"/sshpass","d":"免交互 SSH 登录工具。"},"startx":{"n":"startx","p":"/startx","d":"用来启动X Window"},"stat":{"n":"stat","p":"/stat","d":"用于显示文件的状态信息"},"strace":{"n":"strace","p":"/strace","d":"跟踪系统调用和信号"},"strings":{"n":"strings","p":"/strings","d":"在对象文件或二进制文件中查找可打印的字符串"},"stty":{"n":"stty","p":"/stty","d":"修改终端命令行的相关设置"},"su":{"n":"su","p":"/su","d":"用于切换当前用户身份到其他用户身份"},"sudo":{"n":"sudo","p":"/sudo","d":"以其他身份来执行命令"},"sum":{"n":"sum","p":"/sum","d":"计算文件的校验码和显示块数"},"supervisord":{"n":"supervisord","p":"/supervisord","d":"配置后台服务/常驻进程的进程管家工具"},"suspend":{"n":"suspend","p":"/suspend","d":"挂起shell的执行。"},"swapoff":{"n":"swapoff","p":"/swapoff","d":"关闭指定的交换空间"},"swapon":{"n":"swapon","p":"/swapon","d":"激活Linux系统中交换空间"},"sync":{"n":"sync","p":"/sync","d":"用于强制被改变的内容立刻写入磁盘"},"sysctl":{"n":"sysctl","p":"/sysctl","d":"时动态地修改内核的运行参数"},"syslog":{"n":"syslog","p":"/syslog","d":"系统默认的日志守护进程"},"systemctl":{"n":"systemctl","p":"/systemctl","d":"系统服务管理器指令"},"systool":{"n":"systool","p":"/systool","d":"显示基于总线、类和拓扑显示系统中设备的信息"},"tac":{"n":"tac","p":"/tac","d":"连接多个文件并以行为单位反向打印到标准输出。"},"tail":{"n":"tail","p":"/tail","d":"在屏幕上显示指定文件的末尾若干行"},"tailf":{"n":"tailf","p":"/tailf","d":"在屏幕上显示指定文件的末尾若干行内容,通常用于日志文件的跟踪输出"},"talk":{"n":"talk","p":"/talk","d":"让用户和其他用户聊天"},"tar":{"n":"tar","p":"/tar","d":"将许多文件一起保存至一个单独的磁带或磁盘归档,并能从归档中单独还原所需文件。"},"tcpdump":{"n":"tcpdump","p":"/tcpdump","d":"一款sniffer工具,是Linux上的抓包工具,嗅探器"},"tcpreplay":{"n":"tcpreplay","p":"/tcpreplay","d":"将保存在 PCAP 文件包重新发送,用于性能或者功能测试"},"tee":{"n":"tee","p":"/tee","d":"从标准输入读取数据并重定向到标准输出和文件。"},"telinit":{"n":"telinit","p":"/telinit","d":"切换当前正在运行系统的运行等级"},"telnet":{"n":"telnet","p":"/telnet","d":"登录远程主机和管理(测试ip端口是否连通)"},"tempfile":{"n":"tempfile","p":"/tempfile","d":"shell中给临时文件命名"},"test":{"n":"test","p":"/test","d":"执行条件表达式。"},"tftp":{"n":"tftp","p":"/tftp","d":"在本机和tftp服务器之间使用TFTP协议传输文件"},"time":{"n":"time","p":"/time","d":"统计给定命令所花费的总时间"},"timedatectl":{"n":"timedatectl","p":"/timedatectl","d":"用于在 Linux 中设置或查询系统时间、日期和时区等配置。"},"times":{"n":"times","p":"/times","d":"显示进程累计时间。"},"tload":{"n":"tload","p":"/tload","d":"显示系统负载状况"},"tmux":{"n":"tmux","p":"/tmux","d":"Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权"},"top":{"n":"top","p":"/top","d":"显示或管理执行中的程序"},"touch":{"n":"touch","p":"/touch","d":"创建新的空文件"},"tput":{"n":"tput","p":"/tput","d":"通过terminfo数据库对终端会话进行初始化和操作"},"tr":{"n":"tr","p":"/tr","d":"将字符进行替换压缩和删除"},"tracepath":{"n":"tracepath","p":"/tracepath","d":"追踪目的主机经过的路由信息"},"traceroute":{"n":"traceroute","p":"/traceroute","d":"显示数据包到主机间的路径"},"trap":{"n":"trap","p":"/trap","d":"捕捉信号和其他事件并执行命令。"},"tree":{"n":"tree","p":"/tree","d":"树状图列出目录的内容"},"true":{"n":"true","p":"/true","d":"返回状态为成功。"},"tty":{"n":"tty","p":"/tty","d":"显示连接到当前标准输入的终端设备文件名"},"type":{"n":"type","p":"/type","d":"显示指定命令的类型。"},"ufw":{"n":"ufw","p":"/ufw","d":" ubuntu防火墙管理工具"},"ulimit":{"n":"ulimit","p":"/ulimit","d":"控制shell程序的资源"},"umask":{"n":"umask","p":"/umask","d":"显示或设置创建文件的权限掩码。"},"umount":{"n":"umount","p":"/umount","d":"用于卸载已经加载的文件系统"},"unalias":{"n":"unalias","p":"/unalias","d":"删除由alias设置的别名"},"uname":{"n":"uname","p":"/uname","d":"打印系统信息。"},"unarj":{"n":"unarj","p":"/unarj","d":"解压缩由arj命令创建的压缩包"},"uncompress":{"n":"uncompress","p":"/uncompress","d":"用来解压.Z文件"},"unexpand":{"n":"unexpand","p":"/unexpand","d":"将文件的空白字符转换为制表符"},"uniq":{"n":"uniq","p":"/uniq","d":"显示或忽略重复的行。"},"unlink":{"n":"unlink","p":"/unlink","d":"系统调用函数unlink去删除指定的文件"},"unprotoize":{"n":"unprotoize","p":"/unprotoize","d":"删除C语言源代码文件中的函数原型"},"unrar":{"n":"unrar","p":"/unrar","d":"解压rar文件命令,从 rar 压缩包中提取文件"},"unset":{"n":"unset","p":"/unset","d":"删除指定的shell变量或函数。"},"unzip":{"n":"unzip","p":"/unzip","d":"用于解压缩由zip命令压缩的压缩包"},"updatedb":{"n":"updatedb","p":"/updatedb","d":"创建或更新slocate命令所必需的数据库文件"},"uptime":{"n":"uptime","p":"/uptime","d":"查看Linux系统负载信息"},"useradd":{"n":"useradd","p":"/useradd","d":"创建的新的系统用户"},"userdel":{"n":"userdel","p":"/userdel","d":"用于删除给定的用户以及与用户相关的文件"},"usermod":{"n":"usermod","p":"/usermod","d":"用于修改用户的基本信息"},"usernetctl":{"n":"usernetctl","p":"/usernetctl","d":"被允许时操作指定的网络接口"},"users":{"n":"users","p":"/users","d":"打印当前主机所有登陆用户的名称。"},"uucico":{"n":"uucico","p":"/uucico","d":"UUCP文件传输服务程序"},"uupick":{"n":"uupick","p":"/uupick","d":"命令处理传送进来的文件"},"uuto":{"n":"uuto","p":"/uuto","d":"将文件传送到远端的UUCP主机"},"vdfuse":{"n":"vdfuse","p":"/vdfuse","d":"VirtualBox软件挂载VDI分区文件工具"},"vgchange":{"n":"vgchange","p":"/vgchange","d":"修改卷组属性"},"vgconvert":{"n":"vgconvert","p":"/vgconvert","d":"转换卷组元数据格式"},"vgcreate":{"n":"vgcreate","p":"/vgcreate","d":"用于创建LVM卷组"},"vgdisplay":{"n":"vgdisplay","p":"/vgdisplay","d":"显示LVM卷组的信息"},"vgextend":{"n":"vgextend","p":"/vgextend","d":"向卷组中添加物理卷"},"vgreduce":{"n":"vgreduce","p":"/vgreduce","d":"从卷组中删除物理卷"},"vgremove":{"n":"vgremove","p":"/vgremove","d":"用于用户删除LVM卷组"},"vgrename":{"n":"vgrename","p":"/vgrename","d":"使用vgrename命令可以重命名卷组的名称"},"vgscan":{"n":"vgscan","p":"/vgscan","d":"扫描并显示系统中的卷组"},"vi":{"n":"vi","p":"/vi","d":"功能强大的纯文本编辑器"},"vmstat":{"n":"vmstat","p":"/vmstat","d":"显示虚拟内存状态"},"volname":{"n":"volname","p":"/volname","d":"显示指定的ISO-9660格式的设备的卷名称"},"w":{"n":"w","p":"/w","d":"显示目前登入系统的用户信息"},"wait":{"n":"wait","p":"/wait","d":"等待进程执行完后返回"},"wall":{"n":"wall","p":"/wall","d":"向系统当前所有打开的终端上输出信息"},"watch":{"n":"watch","p":"/watch","d":"可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令"},"wc":{"n":"wc","p":"/wc","d":"统计文件的字节数、字数、行数"},"wget":{"n":"wget","p":"/wget","d":"Linux系统下载文件工具"},"whatis":{"n":"whatis","p":"/whatis","d":"查询一个命令执行什么功能"},"whereis":{"n":"whereis","p":"/whereis","d":"查找二进制程序、代码等相关文件路径"},"which":{"n":"which","p":"/which","d":"查找并显示给定命令的绝对路径"},"who":{"n":"who","p":"/who","d":"显示当前所有登陆用户的信息。"},"whoami":{"n":"whoami","p":"/whoami","d":"打印当前有效的用户ID对应的名称"},"write":{"n":"write","p":"/write","d":"向指定登录用户终端上发送信息"},"xargs":{"n":"xargs","p":"/xargs","d":"给其他命令传递参数的一个过滤器"},"xauth":{"n":"xauth","p":"/xauth","d":"显示和编辑被用于连接X服务器的认证信息"},"xclip":{"n":"xclip","p":"/xclip","d":"管理 X 粘贴板"},"xhost":{"n":"xhost","p":"/xhost","d":"制哪些X客户端能够在X服务器上显示"},"xinit":{"n":"xinit","p":"/xinit","d":"是Linux下X-Window系统的初始化程序"},"xlsatoms":{"n":"xlsatoms","p":"/xlsatoms","d":"列出X服务器内部所有定义的原子成分"},"xlsclients":{"n":"xlsclients","p":"/xlsclients","d":"列出显示器中的客户端应用程序"},"xlsfonts":{"n":"xlsfonts","p":"/xlsfonts","d":"列出X Server使用的字体"},"xrandr":{"n":"xrandr","p":"/xrandr","d":"X 窗口系统配置管理工具"},"xset":{"n":"xset","p":"/xset","d":"设置X-Window系统中的用户爱好的实用工具"},"xz":{"n":"xz","p":"/xz","d":"POSIX 平台开发具有高压缩率的工具"},"yes":{"n":"yes","p":"/yes","d":"重复打印指定字符串"},"ypdomainname":{"n":"ypdomainname","p":"/ypdomainname","d":"显示主机的NIS的域名"},"yum":{"n":"yum","p":"/yum","d":"基于RPM的软件包管理器"},"zcat":{"n":"zcat","p":"/zcat","d":"显示压缩包中文件的内容"},"zfore":{"n":"zfore","p":"/zfore","d":"强制为gzip格式的压缩文件添加.gz后缀"},"zip":{"n":"zip","p":"/zip","d":"可以用来解压缩文件"},"zipinfo":{"n":"zipinfo","p":"/zipinfo","d":"用来列出压缩文件信息"},"zipsplit":{"n":"zipsplit","p":"/zipsplit","d":"将较大的zip压缩包分割成各个较小的压缩包"},"znew":{"n":"znew","p":"/znew","d":"将.Z压缩包重新转化为gzip命令压缩的.gz压缩包"}} \ No newline at end of file diff --git a/template/contributors.ejs b/template/contributors.ejs index 81cce14e78f..a911724e970 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -188,8 +188,40 @@

- 数据来源于 GitHub Contributors,使用action-contributors创建。 + 数据来源于 GitHub Contributors,使用 action-contributors 创建。

+

镜像网站

+ +

魔改网站

+ <%- include('widget/footer',{type: "list"}); %> <%- include('partial/footer'); %> diff --git a/template/styl/index.styl b/template/styl/index.styl index f0cb0b04db5..23d3d0a531d 100644 --- a/template/styl/index.styl +++ b/template/styl/index.styl @@ -282,6 +282,17 @@ mq-mobile = "screen and (max-width: 479px)" a { font-weight: bold; } + .links { + display: inline-flex; + flex-wrap: wrap; + } + .links a { + background: var(--color-theme-bg); + height: 2.1rem; + border-radius: 0.3rem; + gap: 0.1rem; + padding: 0rem 0.5rem 0rem 0.4rem; + } } @media mq-mobile { diff --git a/template/widget/footer.ejs b/template/widget/footer.ejs index 966863110a6..3bea7dbaca9 100644 --- a/template/widget/footer.ejs +++ b/template/widget/footer.ejs @@ -17,4 +17,7 @@ <%=describe.command_length?describe.command_length:''%> 个Linux命令,超过 50+ 贡献者 +
+ 推荐自己的镜像网站 +
\ No newline at end of file From 944ab9c3990617824b447fb49bdeb5d3232dc099 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83?= <398188662@qq.com> Date: Fri, 13 Jun 2025 14:35:17 +0800 Subject: [PATCH 1279/1284] website: udpate contributors page. --- template/contributors.ejs | 2 +- template/styl/index.styl | 3 +++ template/widget/footer.ejs | 17 ++++++++++------- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/template/contributors.ejs b/template/contributors.ejs index a911724e970..8f87054b9a8 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -190,7 +190,7 @@

数据来源于 GitHub Contributors,使用 action-contributors 创建。

-

镜像网站

+

镜像网站

\ No newline at end of file From c7795cd3fe88cfeae227a9d80f82503de4c8cbe5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83?= <398188662@qq.com> Date: Fri, 13 Jun 2025 14:45:29 +0800 Subject: [PATCH 1280/1284] doc: Update README.md --- README.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index cd890c74514..74d73ac6f20 100644 --- a/README.md +++ b/README.md @@ -65,6 +65,8 @@ ⚠️ 你们拿过去部署的静态网站,还是希望挂个 GitHub 地址,这样大家共同维护命令文档,让文档更加完善,更加丰富,当然你删除本站所有信息相关信息,其实我也不太在意,默认允许你们随意搞,我不负任何负责。如果您也部署了一份,可以将网址放到下面 :)。 +由于中国国内访问,时常打不开,你可以访问下面镜像网站(国内打不开的不再收录)。推荐自己的[镜像网站 #649](https://github.com/jaywcjlove/linux-command/issues/649) + **推荐使用的镜像 web 版本** [**`linuxsearch.largeinfo.cc`**](http://linuxsearch.largeinfo.cc),[**`srebro.cn`**](https://linux.srebro.cn/),[**`getaifun.com`**](https://getaifun.com/linux),[**`linux.devonline.net`**](http://linux.devonline.net/),[**`man.zch.ooo`**](https://man.zch.ooo/),[**`linux.mmoke.com`**](https://linux.mmoke.com),[**`bqrdh.com`**](https://tools.bqrdh.com/linux-command/),[**`linux.zyimm.com`**](http://linux.zyimm.com/),[**`linux.vovuo.com`**](https://linux.vovuo.com/),[`linux.liguiying.cn`](https://linux.liguiying.cn/),[`renye.net`](https://renye.net/),[`diqi.org`](https://diqi.org/),[`linux.alistnas.top`](https://linux.alistnas.top/),[`nenufm.com`](https://www.nenufm.com/linux-command/),[`linux.jiangyang.online`](https://linux.jiangyang.online/) @@ -85,7 +87,7 @@ - [`@chenjiandongx/how`](https://github.com/chenjiandongx/how) Python 版 [#129](https://github.com/jaywcjlove/linux-command/issues/129),由 [**@陈键冬**](https://github.com/chenjiandongx) 提供 - [`@chenjiandongx/pls`](https://github.com/chenjiandongx/pls) Golang 版 [#129](https://github.com/jaywcjlove/linux-command/issues/129),由 [**@陈键冬**](https://github.com/chenjiandongx) 提供 -## Docker +## Docker 部署 [![Docker Image Version (latest by date)](https://img.shields.io/docker/v/wcjiang/linux-command?logo=docker)](https://hub.docker.com/r/wcjiang/linux-command) [![Docker Image Size (latest by date)](https://img.shields.io/docker/image-size/wcjiang/linux-command?logo=docker)](https://hub.docker.com/r/wcjiang/linux-command) [![Docker Pulls](https://img.shields.io/docker/pulls/wcjiang/linux-command?logo=docker)](https://hub.docker.com/r/wcjiang/linux-command) @@ -93,16 +95,12 @@ ```bash docker pull wcjiang/linux-command -# Or -docker pull ghcr.io/jaywcjlove/linux-command:latest ``` ```bash docker run --name linux-command --rm -d -p 9665:3000 wcjiang/linux-command:latest # Or docker run --name linux-command -itd -p 9665:3000 wcjiang/linux-command:latest -# Or -docker run --name linux-command -itd -p 9665:3000 ghcr.io/jaywcjlove/linux-command:latest ``` 在浏览器中访问以下 URL From 3b822160e6e295b8751654541e1e2d5983415212 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=BC=9F=E8=B0=83=E8=B0=83?= <398188662@qq.com> Date: Fri, 13 Jun 2025 14:56:22 +0800 Subject: [PATCH 1281/1284] doc: update README.md #649 --- README.md | 29 +++++++++++++++++++++++++++-- template/contributors.ejs | 1 + 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 74d73ac6f20..21033632848 100644 --- a/README.md +++ b/README.md @@ -69,11 +69,36 @@ **推荐使用的镜像 web 版本** -[**`linuxsearch.largeinfo.cc`**](http://linuxsearch.largeinfo.cc),[**`srebro.cn`**](https://linux.srebro.cn/),[**`getaifun.com`**](https://getaifun.com/linux),[**`linux.devonline.net`**](http://linux.devonline.net/),[**`man.zch.ooo`**](https://man.zch.ooo/),[**`linux.mmoke.com`**](https://linux.mmoke.com),[**`bqrdh.com`**](https://tools.bqrdh.com/linux-command/),[**`linux.zyimm.com`**](http://linux.zyimm.com/),[**`linux.vovuo.com`**](https://linux.vovuo.com/),[`linux.liguiying.cn`](https://linux.liguiying.cn/),[`renye.net`](https://renye.net/),[`diqi.org`](https://diqi.org/),[`linux.alistnas.top`](https://linux.alistnas.top/),[`nenufm.com`](https://www.nenufm.com/linux-command/),[`linux.jiangyang.online`](https://linux.jiangyang.online/) +[**`linuxsearch.largeinfo.cc`**](http://linuxsearch.largeinfo.cc) +[**`srebro.cn`**](https://linux.srebro.cn/) +[**`getaifun.com`**](https://getaifun.com/linux) +[**`linux.devonline.net`**](http://linux.devonline.net/) +[**`man.zch.ooo`**](https://man.zch.ooo/) +[**`linux.mmoke.com`**](https://linux.mmoke.com) +[**`bqrdh.com`**](https://tools.bqrdh.com/linux-command/) +[**`linux.zyimm.com`**](http://linux.zyimm.com/) +[**`linux.vovuo.com`**](https://linux.vovuo.com/) +[`linux.liguiying.cn`](https://linux.liguiying.cn/) +[`renye.net`](https://renye.net/) +[`diqi.org`](https://diqi.org/) +[`linux.alistnas.top`](https://linux.alistnas.top/) +[`nenufm.com`](https://www.nenufm.com/linux-command/) +[`linux.jiangyang.online`](https://linux.jiangyang.online/) **其它 web 版本** -[`linux.ftqq.com`](https://linux.ftqq.com/),[`linux.gaomeluo.com`](https://linux.gaomeluo.com),[`atoolbox.net`](http://www.atoolbox.net/Tool.php?Id=826),[`xiaoshanseo.com`](https://tools.xiaoshanseo.com/Tools/linux-command/),[`262235.xyz`](https://262235.xyz/linux-command/),[`cmsblogs.cn`](https://linux.cmsblogs.cn/),[`loquy.cn`](https://www.loquy.cn/linux-command/),[`buyao.vip`](https://demo.buyao.vip/linux/),[`hezhiqiang.gitbook.io`](https://hezhiqiang.gitbook.io/linux/),[`utils.fun`](https://linux.utils.fun/),[`51tools.info`](https://51tools.info/linux/) +[`lylme.com`](https://linux.lylme.com/) +[`linux.ftqq.com`](https://linux.ftqq.com/) +[`linux.gaomeluo.com`](https://linux.gaomeluo.com) +[`atoolbox.net`](http://www.atoolbox.net/Tool.php?Id=826) +[`xiaoshanseo.com`](https://tools.xiaoshanseo.com/Tools/linux-command/) +[`262235.xyz`](https://262235.xyz/linux-command/) +[`cmsblogs.cn`](https://linux.cmsblogs.cn/) +[`loquy.cn`](https://www.loquy.cn/linux-command/) +[`buyao.vip`](https://demo.buyao.vip/linux/) +[`hezhiqiang.gitbook.io`](https://hezhiqiang.gitbook.io/linux/) +[`utils.fun`](https://linux.utils.fun/) +[`51tools.info`](https://51tools.info/linux/) ## 其它版本 diff --git a/template/contributors.ejs b/template/contributors.ejs index 8f87054b9a8..95b02b55b4b 100644 --- a/template/contributors.ejs +++ b/template/contributors.ejs @@ -210,6 +210,7 @@

魔改网站