root 6 years ago
parent fdabc430c6
commit 4a8d243db3

@ -96,3 +96,139 @@ for x in range(1, 5):
if (x != y) and (x != z) and (z != y):
print(x, y, z)
# 计算pi小数点任意位数
from __future__ import division
import math
from time import time
time1 = time()
number = int(input('输入计算的位数:'))
number1 = number + 10 # 多计算十位方式尾数取舍影响
b = 10 ** number1
# 求含4/5的首项
x1 = b * 4 // 5
# 求含1/239的首项
x2 = b // -239
# 求第一大项
he = x1 + x2
# 设置下面循环的终点即共计算n项
number *= 2
# 循环初值=3末值2n,步长=2
for i in range(3, number, 2):
# 求每个含1/5的项及符号
x1 //= -25
# 求每个含1/239的项及符号
x2 //= -57121
# 求两项之和
x = (x1 + x2) // i
# 求总和
he += x
# 求出π
pi = he * 4
# 舍掉后十位
pi //= 10 ** 10
# 输出圆周率π的值
pi_string = str(pi)
result = pi_string[0] + str('.') + pi_string[1:len(pi_string)]
print(result)
time2 = time()
print(u'耗时:' + str(time2 - time1) + 's')
# 使用chudnovsky算法计算
# 理解链接https://www.craig-wood.com/nick/articles/pi-chudnovsky/
"""
Python3 program to calculate Pi using python long integers, BINARY
splitting and the Chudnovsky algorithm
"""
import math
from gmpy2 import mpz
from time import time
def pi_chudnovsky_bs(digits):
"""
Compute int(pi * 10**digits)
This is done using Chudnovsky's series with BINARY splitting
"""
C = 640320
C3_OVER_24 = C**3 // 24
def bs(a, b):
"""
Computes the terms for binary splitting the Chudnovsky infinite series
a(a) = +/- (13591409 + 545140134*a)
p(a) = (6*a-5)*(2*a-1)*(6*a-1)
b(a) = 1
q(a) = a*a*a*C3_OVER_24
returns P(a,b), Q(a,b) and T(a,b)
"""
if b - a == 1:
# Directly compute P(a,a+1), Q(a,a+1) and T(a,a+1)
if a == 0:
Pab = Qab = mpz(1)
else:
Pab = mpz((6*a-5)*(2*a-1)*(6*a-1))
Qab = mpz(a*a*a*C3_OVER_24)
Tab = Pab * (13591409 + 545140134*a) # a(a) * p(a)
if a & 1:
Tab = -Tab
else:
# Recursively compute P(a,b), Q(a,b) and T(a,b)
# m is the midpoint of a and b
m = (a + b) // 2
# Recursively calculate P(a,m), Q(a,m) and T(a,m)
Pam, Qam, Tam = bs(a, m)
# Recursively calculate P(m,b), Q(m,b) and T(m,b)
Pmb, Qmb, Tmb = bs(m, b)
# Now combine
Pab = Pam * Pmb
Qab = Qam * Qmb
Tab = Qmb * Tam + Pam * Tmb
return Pab, Qab, Tab
# how many terms to compute
DIGITS_PER_TERM = math.log10(C3_OVER_24/6/2/6)
N = int(digits/DIGITS_PER_TERM + 1)
# Calclate P(0,N) and Q(0,N)
P, Q, T = bs(0, N)
one_squared = mpz(10)**(2*digits)
sqrtC = (10005*one_squared).sqrt()
return (Q*426880*sqrtC) // T
# The last 5 digits or pi for various numbers of digits
check_digits = {
100 : 70679,
1000 : 1989,
10000 : 75678,
100000 : 24646,
1000000 : 58151,
10000000 : 55897,
}
if __name__ == "__main__":
digits = 100
pi = pi_chudnovsky_bs(digits)
print(pi)
#raise SystemExit
for log10_digits in range(1,9):
digits = 10**log10_digits
start =time()
pi = pi_chudnovsky_bs(digits)
print("chudnovsky_gmpy_mpz_bs: digits",digits,"time",time()-start)
if digits in check_digits:
last_five_digits = pi % 100000
if check_digits[digits] == last_five_digits:
print("Last 5 digits %05d OK" % last_five_digits)
else:
print("Last 5 digits %05d wrong should be %05d" % (last_five_digits, check_digits[digits]))

@ -1,42 +1,70 @@
ab
===
Apache服务器的性能测试工具
# **ab**
## 说明
**ab命令** 是Apache的Web服务器的性能测试工具它可以测试安装Web服务器每秒种处理的HTTP请求
**ab命令** 是Apache的Web服务器的性能测试工具它可以测试安装Web服务器每秒种处理的HTTP请求
### 语法
### 选项
```markdown
-A指定连接服务器的基本的认证凭据
-c指定一次向服务器发出请求数
-C添加cookie
-g将测试结果输出为“gnuolot”文件
-H为请求追加一个额外的头
-i使用“head”请求方式
-k激活HTTP中的“keepAlive”特性
-n指定测试会话使用的请求数
-p指定包含数据的文件
-q不显示进度百分比
-T使用POST数据时设置内容类型头
-v设置详细模式等级
-w以HTML表格方式打印结果
-x以表格方式输出时设置表格的属性
-X使用指定的代理服务器发送请求
-y以表格方式输出时设置表格属性
```
ab(选项)(参数)
```
```
-A指定连接服务器的基本的认证凭据
-c指定一次向服务器发出请求数
-C添加cookie
-g将测试结果输出为“gnuolot”文件
-h显示帮助信息
-H为请求追加一个额外的头
-i使用“head”请求方式
-k激活HTTP中的“keepAlive”特性
-n指定测试会话使用的请求数
-p指定包含数据的文件
-q不显示进度百分比
-T使用POST数据时设置内容类型头
-v设置详细模式等级
-w以HTML表格方式打印结果
-x以表格方式输出时设置表格的属性
-X使用指定的代理服务器发送请求
-y以表格方式输出时设置表格属性。
```
### 参数
主机:被测试主机。
用法: ab [选项] [http[s]://]hostname[:port]/path
选项:
-n requests 执行请求的数量
-c concurrency 一次进行多少个并发请求
-t timelimit Seconds to max. to spend on benchmarking
This implies -n 50000
-s timeout Seconds to max. wait for each response
Default is 30 seconds
-b windowsize Size of TCP send/receive buffer, in bytes
-B address Address to bind to when making outgoing connections
-p postfile File containing data to POST. Remember also to set -T
-u putfile File containing data to PUT. Remember also to set -T
-T content-type Content-type header to use for POST/PUT data, eg.
'application/x-www-form-urlencoded'
Default is 'text/plain'
-v verbosity How much troubleshooting info to print
-w Print out results in HTML tables
-i Use HEAD instead of GET
-x attributes String to insert as table attributes
-y attributes String to insert as tr attributes
-z attributes String to insert as td or th attributes
-C attribute Add cookie, eg. 'Apache=1234'. (repeatable)
-H attribute Add Arbitrary header line, eg. 'Accept-Encoding: gzip'
Inserted after all normal header lines. (repeatable)
-A attribute Add Basic WWW Authentication, the attributes
are a colon separated username and password.
-P attribute Add Basic Proxy Authentication, the attributes
are a colon separated username and password.
-X proxy:port Proxyserver and port number to use
-V Print version number and exit
-k Use HTTP KeepAlive feature
-d Do not show percentiles served table.
-S Do not show confidence estimators and warnings.
-q Do not show progress when doing more than 150 requests
-g filename Output collected data to gnuplot format file.
-e filename Output CSV file with percentages served
-r Don't exit on socket receive errors.
-h Display usage information (this message)
-Z ciphersuite Specify SSL/TLS cipher suite (See openssl ciphers)
-f protocol Specify SSL/TLS protocol
(SSL3, TLS1, TLS1.1, TLS1.2 or ALL)

@ -2,11 +2,14 @@
## 说明
**awk** awk的基本功能是在文件中搜索包含一个或多个模式的行或其他文本单元。当一行与其中一个模式匹配时将对该行执行特殊操作。 awk中的程序与大多数其他语言中的程序不同因为awk程序是“数据驱动的”您描述要使用的数据然后在找到时执行的操作。大多数其他语言都是“程序性的”。您必须详细描述该计划要采取的每个步骤。使用过程语言时通常很难清楚地描述程序将处理的数据。出于这个原因awk程序通常易于读写
**awk** awk的基本功能是在文件中搜索包含一个或多个模式的行或其他文本单元。当一行与其中一个模式匹配时将对该行执行特殊操作
awk中的程序与大多数其他语言中的程序不同因为awk程序是“数据驱动的”您描述要使用的数据然后在找到时执行的操作。大多数
其他语言都是“程序性的”。您必须详细描述该计划要采取的每个步骤。使用过程语言时,通常很难清楚地描述程序将处理的数据。出于
这个原因awk程序通常易于读写
## 选项
```info
```markdown
Usage: awk [POSIX or GNU style options] -f progfile [--] file ...
Usage: awk [POSIX or GNU style options] [--] 'program' file ...
POSIX options:GNU long options: (standard)

@ -1,79 +1,30 @@
bc
===
算术操作精密运算工具
# **bc**
## 说明
**bc命令** 是一种支持任意精度的交互执行的计算器语言。bash内置了对整数四则运算的支持但是并不支持浮点运算而bc命令可以很方便的进行浮点运算当然整数运算也不再话下。
### 语法
```
bc(选项)(参数)
```
**bc命令** 是一种支持任意精度的交互执行的计算器语言。bash内置了对整数四则运算的支持但是并不支持浮点运算而bc命令可以
很方便的进行浮点运算,当然整数运算也不再话下
## 选项
```
-i强制进入交互式模式输入quit后回车退出此模式
-l:定义使用的标准数学库;
-w对POSIX bc的扩展给出警告信息
```markdown
-i --interactive 强制进入交互式模式输入quit后回车退出此模式
-l --mathlib 定义使用的标准数学库
-q --quiet 不打印初始化信息
-s --standard non-standard bc constructs are errors
-q不打印正常的GNU bc环境信息
-v显示指令版本信息
-h显示指令的帮助信息。
```
### 参数
文件:指定包含计算任务的文件。
### 实例
算术操作高级运算bc命令它可以执行浮点运算和一些高级函数
```
echo "1.212*3" | bc
3.636
-w --warn warn about non-standard bc constructs
```
设定小数精度(数值范围)
```
echo "scale=2;3/8" | bc
0.37
```
## 实例
参数`scale=2`是将bc输出结果的小数位设置为2位。
```bash
echo "1.212*3" | bc # 算术操作高级运算bc命令它可以执行浮点运算和一些高级函数
echo "scale=2;3/8" | bc # 设定小数精度(数值范围)参数`scale=2`是将bc输出结果的小数位设置为2位
echo "obase=2;192" | bc # 进制转换,将数字192转换为2进制注意只能对数字进行进制转换,对应的进制有2,8,16,64
进制转换
```
#!/bin/bash
abc=192
echo "obase=2;$abc" | bc
```
执行结果为11000000这是用bc将十进制转换成二进制。
```
#!/bin/bash
abc=11000000
echo "obase=10;ibase=2;$abc" | bc
```
执行结果为192这是用bc将二进制转换为十进制。
计算平方和平方根:
```
# 计算平方和平方根
echo "10^10" | bc
echo "sqrt(100)" | bc
```
```

@ -1,8 +1,6 @@
# **cat**
```info
```markdown
将[文件]或标准输入组合输出到标准输出
-A, --show-all 等于-vET,显示不可打印字符,行尾显示“$”
-b, --number-nonblank 对非空输出行编号
@ -20,6 +18,6 @@
## 实例
```sh
```bash
```

@ -1,91 +1,59 @@
chmod
===
用来变更文件或目录的权限
# **chmod**
## 说明
**chmod命令** 用来变更文件或目录的权限。在UNIX系统家族里文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分另有3种特殊权限可供运用。用户可以使用chmod指令去变更文件与目录的权限设置方式采用文字或数字代号皆可。符号连接的权限无法变更如果用户对符号连接修改权限其改变会作用在被连接的原始文件。
权限范围的表示法如下:
**chmod命令** 用来变更文件或目录的权限。在UNIX系统家族里文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分
另有3种特殊权限可供运用。用户可以使用chmod指令去变更文件与目录的权限设置方式采用文字或数字代号皆可。符号连接的权限无法
变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件
`u` User即文件或目录的拥有者
`g` Group即文件或目录的所属群组
`o` Other除了文件或目录拥有者或所属群组之外其他用户皆属于这个范围
`a` All即全部的用户包含拥有者所属群组以及其他用户
`r` 读取权限数字代号为“4”;
`w` 写入权限数字代号为“2”
`x` 执行或切换权限数字代号为“1”
`-` 不具任何权限数字代号为“0”
`s` 特殊功能说明:变更文件或目录的权限。
### 语法
```
chmod(选项)(参数)
```
## 选项
```markdown
用法chmod [选项] 模式[,模式] 文件
 chmod [选项] 八进制模式 文件
 chmod [选项] --reference=参考文件 文件
```bash
u # 操作对象简称用户user文件或目录的所有者。
g # 操作对象简称同组用户group文件或目录所属群组
o # 操作对象简称其它用户others
a # 操作对象简称所有用户all系统默认使用此项
+ # 权限操作符,添加某些权限
- # 权限操作符,取消某些权限
= # 权限操作符,设置文件的权限为给定的权限
r # 权限设定(英文),表示可读权限
w # 权限设定(英文),表示可写权限
x # 权限设定(英文),表示可执行权限
- # 权限设定(英文字符),表示没有权限
X # 权限设定,如果目标文件是可执行文件或目录,可给其设置可执行权限
s # 权限设定设置权限suid和sgid使用权限组合“u+s”设定文件的用户的ID位“g+s”设置组ID位
t # 权限设定,只有目录或文件的所有者才可以删除目录下的文件
-c或——changes # 效果类似“-v”参数但仅回报更改的部分如果文件权限已经改变显示其操作信息
-f或--quiet或——silent # 操作过程中不显示任何错误信息;
-R或——recursive # 递归处理,将指令目录下的所有文件及子目录一并处理;
-v或——verbose # 显示命令运行时的详细执行过程;
--reference=<参考文件或目录> # 把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;
<权限范围>+<权限设置> # 开启权限范围的文件或目录的该选项权限设置;
<权限范围>-<权限设置> # 关闭权限范围的文件或目录的该选项权限设置;
<权限范围>=<权限设置> # 指定权限范围的文件或目录的该选项权限设置;
--help # 显示帮助信息
--version # 显示版本信息
权限范围的表示法如下:
u # User即文件或目录的拥有者
g # Group即文件或目录的所属群组
o # Other除了文件或目录拥有者或所属群组之外其他用户皆属于这个范围
a # All即全部的用户包含拥有者所属群组以及其他用户
r # 读取权限数字代号为4
w # 写入权限数字代号为2
x # 执行或切换权限数字代号为1
- # 不具任何权限数字代号为0
s # 特殊功能说明:变更文件或目录的权限
+ # 添加某些权限
- # 取消某些权限
= # 设置文件的权限为给定的权限
X # 如果目标文件是可执行文件或目录,可给其设置可执行权限
s # 设置权限suid和sgid使用权限组合“u+s”设定文件的用户的ID位“g+s”设置组ID位
t # 只有目录或文件的所有者才可以删除目录下的文件
-c, --changes 和-v选项类似但只打印已经更改的部分
-f, --silent, --quiet 禁止大部分错误信息
-v, --verbose 输出每个文件的执行详细信息
--no-preserve-root do not treat '/' specially (the default)
--preserve-root fail to operate recursively on '/'
--reference=RFILE use RFILE's mode instead of MODE values
-R, --recursive 对文件和目录进行递归处理
MODE如下
[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+
```
### 参数
权限模式:指定文件的权限模式;
文件:要改变权限的文件。
### 知识扩展和实例
Linux用 户分为:拥有者、组群(Group)、其他otherLinux系统中预设的情況下系统中所有的帐号与一般身份使用者以及root的相关信 息, 都是记录在`/etc/passwd`文件中。每个人的密码则是记录在`/etc/shadow`文件下。 此外,所有的组群名称记录在`/etc/group`內!
linux文件的用户权限的分析图
!linux文件的用户权限的分析图
rwx rw- r--
r=读取属性  //值4
w=写入属性  //值2
x=执行属性  //值1
## 实例
```bash
chmod u+x,g+w f01  # 为文件f01设置自己可以执行组员可以写入的权限
chmod u+x,g+w f01 # 为文件f01设置自己可以执行组员可以写入的权限
chmod u=rwx,g=rw,o=r f01
chmod 764 f01
chmod a+x f01   # 对文件f01的u,g,o都设置可执行属性
```
文件的属主和属组属性设置
```bash
chown user:market f01  # 把文件f01给uesr添加到market组
ll -d f1 查看目录f1的属性
chmod a+x f01 # 对文件f01的u,g,o都设置可执行属性
chown user:market f01 # 把文件f01给uesr添加到market组
```

@ -1,45 +1,52 @@
chown
===
用来变更文件或目录的拥有者或所属群组
# **chown**
## 说明
**chown命令** 改变某个文件或目录的所有者和所属的组该命令可以向某个用户授权使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户D用户组可以是组名或组id。文件名可以使由空格分开的文件列表在文件名中可以包含通配符。
**chown命令** 改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所
属的组。用户可以是用户或者是用户D用户组可以是组名或组id。文件名可以使由空格分开的文件列表在文件名中可以包含通配符
只有文件主和超级用户才可以便用该命令
只有文件主和超级用户才可以便用该命令
### 语法
## 选项
```
chown(选项)(参数)
```
```markdown
用法chown [选项]... [所有者][:[组]] 文件...
 chown [选项]... --reference=参考文件 文件...
Change the owner and/or group of each FILE to OWNER and/or GROUP.
With --reference, change the owner and group of each FILE to those of RFILE.
-c, --changes 和-v选项类似但值打印更改的部分
-f, --silent, --quiet 禁止显示错误信息
-v, --verbose 显示每个文件执行过程
--dereference 影响每个符号链接的引用(这是默认值),而不是符号链接本身,和-h选项相同
-h, --no-dereference 只对符号连接的文件作修改,而不更改其他任何相关文件,即影响符号链接而不是任何引用的文件
(仅在可以更改符号链接的所有权的系统上有用)
--from=当前所有者:当前所属组
只当每个文件的所有者和组符合选项所指定时才更改所有者和组。其中一个可以省略,这时已省略的属性就不
需要符合原有的属性
--no-preserve-root do not treat '/' specially (the default)
--preserve-root fail to operate recursively on '/'
--reference=RFILE 使用RFILE的所有者和组而不是指定OWNERGROUP值
-R, --recursive 对文件和目录递归处理
```
-c或——changes效果类似“-v”参数但仅回报更改的部分
-f或--quite或——silent不显示错误信息
-h或--no-dereference只对符号连接的文件作修改而不更改其他任何相关文件
-R或——recursive递归处理将指定目录下的所有文件及子目录一并处理
-v或——version显示指令执行过程
--dereference效果和“-h”参数相同
--help在线帮助
--reference=<参考文件或目录>:把指定文件或目录的拥有者与所属群组全部设成和参考文件或目录的拥有者与所属群组相同;
--version显示版本信息。
```
指定了-R选项时以下选项将修改遍历层次的方式如果制定了多个只有最后一个生效
### 参数
-H 如果命令行参数是目录的符号链接,则遍历它
-L 遍历目录下的没一个符号链接
-P 不遍历任何符号链接(默认)
用户:组:指定所有者和所属工作组。当省略“:组”,仅改变文件所有者;
文件指定要改变所有者和工作组的文件列表。支持多个文件和目标支持shell通配符。
Owner is unchanged if missing. Group is unchanged if missing, but changed
to login group if implied by a ':' following a symbolic OWNER.
OWNER and GROUP may be numeric as well as symbolic.
### 实例
将目录`/usr/meng`及其下面的所有文件、子目录的文件主改成 liu
```
chown -R liu /usr/meng
```
## 实例
```bash
chown root /u # 将 /u 的属主更改为"root"
chown root:staff /u # 和上面类似,但同时也将其属组更改为"staff"
chown -hR root /u # 将 /u 及其子目录下所有文件的属主更改为"root"
```

@ -1,49 +0,0 @@
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时间
```

@ -0,0 +1,13 @@
# column
## 选项
```markdown
column [选项] [文件]
-c, --columns <宽度> 输出宽度(字符数)
-t, --table 创建表格
-s, --separator <字符串> 可用的表格分隔符
-o, --output-separator <字符串> 表格输出列分隔符,默认为两个空格
-x, --fillrows 先填充行,再填充列
```

@ -1,21 +1,13 @@
cp
===
将源文件或目录复制到目标文件或目录中
# **cp**
## 说明
**cp命令** 用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件当一次复制多个文件时目标文件参数必须是一个已经存在的目录否则将出现错误。
### 语法
```
cp(选项)(参数)
```
**cp命令** 用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件
或一个已经存在的目录下。cp命令还支持同时复制多个文件当一次复制多个文件时目标文件参数必须是一个已经存在的目录否则将出现错误
## 选项
```
```markdown
用法cp [选项]... [-T] 源文件 目标文件
 cp [选项]... 源文件... 目录
 cp [选项]... -t 目录 源文件...
@ -81,72 +73,24 @@ the VERSION_CONTROL environment variable. Here are the values:
有一个特别情况:如果同时指定--force 和--backup 选项,而源文件和目标文件
是同一个已存在的一般文件的话cp 会将源文件备份。
```
### 参数
* 源文件制定源文件列表。默认情况下cp命令不能复制目录如果要复制目录则必须使用`-R`选项;
* 目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。
### 实例
下面的第一行中是 cp 命令和具体的参数(-r 是“递归”, -u 是“更新”,-v 是“详细”)。接下来的三行显示被复制文件的信息,最后一行显示命令行提示符。这样,只拷贝新的文件到我的存储设备上,我就使用 cp 的“更新”和“详细”选项。
通常来说,参数 `-r` 也可用更详细的风格 `--recursive`。但是以简短的方式,也可以这么连用 `-ruv`
```
cp -r -u -v /usr/men/tmp ~/men/tmp
```
版本备份 `--backup=numbered` 参数意思为“我要做个备份,而且是带编号的连续备份”。所以一个备份就是 1 号,第二个就是 2 号,等等。
## 实例
```bash
$ cp --force --backup=numbered test1.py test1.py
$ ls
test1.py test1.py.~1~ test1.py.~2~
```
如果把一个文件复制到一个目标文件中,而目标文件已经存在,那么,该目标文件的内容将被破坏。此命令中所有参数既可以是绝对路径名,也可以是相对路径名。通常会用到点`.`或点点`..`的形式。例如,下面的命令将指定文件复制到当前目录下:
```
cp ../mary/homework/assign .
```
所有目标文件指定的目录必须是己经存在的cp命令不能创建目录。如果没有文件复制的权限则系统会显示出错信息。
# 所有目标文件指定的目录必须是己经存在的cp命令不能创建目录。如果没有文件复制的权限则系统会显示出错信息。
cp -ruv /usr/men/tmp ~/men/tmp # 只拷贝新的文件到我的存储设备上就用cp的“u更新”和“v详细”选项
cp --force --backup=numbered test1.py test1.py # --backup=numbered参数表示做带编号的连续备份第一个备份就是1号第二个就是2号
cp file /usr/men/tmp/file1 # 将文件file复制到目录`/usr/men/tmp`下并改名为file1
将文件file复制到目录`/usr/men/tmp`下并改名为file1
# 在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、传递了目录属性、没有略过目录
```
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、传递了目录属性、没有略过目录。
```

@ -1,32 +1,34 @@
crontab
===
提交和管理用户的需要周期性执行的任务
# **crontab**
## 说明
**crontab命令** 被用来提交和管理用户的需要周期性执行的任务与windows下的计划任务类似当安装完成操作系统后默认会安装此服务工具并且会自动启动crond进程crond进程每分钟会定期检查是否有要执行的任务如果有要执行的任务则自动执行该任务。
### 语法
**crontab命令** 被用来提交和管理用户的需要周期性执行的任务与windows下的计划任务类似当安装完成操作系统后默认会安装
此服务工具并且会自动启动crond进程crond进程每分钟会定期检查是否有要执行的任务如果有要执行的任务则自动执行该任务
```
crontab(选项)(参数)
```
## 选项
```markdown
Usage:
crontab [options] file
crontab [options]
crontab -n [hostname]
```
-e编辑该用户的计时器设置
-l列出该用户的计时器设置
-r删除该用户的计时器设置
-u<用户名称>:指定要设定计时器的用户名称。
```
Options:
-u <user> 指定设置定时的用户名
-e 编辑该用户下的定时任务
-l 列出该用户下定时任务
-r 删除该用户的定时任务
-i 交互式删除定时任务
-n <host> set host in cluster to run users' crontabs
-c get host in cluster to run users' crontabs
-s selinux context
-x <mask> enable debugging
### 参数
Default operation is replace, per 1003.2
crontab文件指定包含待执行任务的crontab文件。
```
### 知识扩展
## 知识扩展
Linux下的任务调度分为两类 **系统任务调度** 和 **用户任务调度** 。
@ -203,4 +205,3 @@ chkconfig level 35 crond on
01 * * * * root run-parts /etc/cron.hourly
```

@ -1,125 +1,114 @@
curl
===
利用URL规则在命令行下工作的文件传输工具
# **curl**
## 说明
**curl命令** 是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载所以是综合传输工具但按传统习惯称curl为下载工具。作为一款强力工具curl支持包括HTTP、HTTPS、ftp等众多协议还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化curl可以祝一臂之力。
### 语法
```
curl(选项)(参数)
```
<table border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr><td>-a/--append</td><td>上传文件时,附加到目标文件</td></tr>
<tr><td>-A/--user-agent <string></td><td>设置用户代理发送给服务器</td></tr>
<tr><td>-anyauth</td><td>可以使用“任何”身份验证方法</td></tr>
<tr><td>-b/--cookie <name=string/file></td><td>cookie字符串或文件读取位置</td></tr>
<tr><td>     --basic</td><td>使用HTTP基本验证</td></tr>
<tr><td>-B/--use-ascii</td><td>使用ASCII /文本传输</td></tr>
<tr><td>-c/--cookie-jar <file></td><td>操作结束后把cookie写入到这个文件中</td></tr>
<tr><td>-C/--continue-at <offset></td><td>断点续传</td></tr>
<tr><td>-d/--data <data></td><td>HTTP POST方式传送数据</td></tr>
<tr><td>     --data-ascii <data></td><td>以ascii的方式post数据</td></tr>
<tr><td>     --data-binary <data></td><td>以二进制的方式post数据</td></tr>
<tr><td>     --negotiate</td><td>使用HTTP身份验证</td></tr>
<tr><td>     --digest</td><td>使用数字身份验证</td></tr>
<tr><td>     --disable-eprt</td><td>禁止使用EPRT或LPRT</td></tr>
<tr><td>     --disable-epsv</td><td>禁止使用EPSV</td></tr>
<tr><td>-D/--dump-header <file></td><td>把header信息写入到该文件中</td></tr>
<tr><td>     --egd-file <file></td><td>为随机数据(SSL)设置EGD socket路径</td></tr>
<tr><td>     --tcp-nodelay</td><td>使用TCP_NODELAY选项</td></tr>
<tr><td>-e/--referer</td><td>来源网址</td></tr>
<tr><td>-E/--cert <cert:[passwd]></td><td>客户端证书文件和密码 (SSL)</td></tr>
<tr><td>     --cert-type <type></td><td>证书文件类型 (DER/PEM/ENG) (SSL)</td></tr>
<tr><td>     --key <key></td><td>私钥文件名 (SSL)</td></tr>
<tr><td>     --key-type <type></td><td>私钥文件类型 (DER/PEM/ENG) (SSL)</td></tr>
<tr><td>     --pass <pass></td><td>私钥密码 (SSL)</td></tr>
<tr><td>     --engine <eng></td><td>加密引擎使用 (SSL). "--engine list" for list</td></tr>
<tr><td>     --cacert <file></td><td>CA证书 (SSL)</td></tr>
<tr><td>     --capath <directory></td><td>CA目录 (made using c_rehash) to verify peer against (SSL)</td></tr>
<tr><td>     --ciphers <list></td><td>SSL密码</td></tr>
<tr><td>     --compressed</td><td>要求返回是压缩的形势 (using deflate or gzip)</td></tr>
<tr><td>     --connect-timeout <seconds></td><td>设置最大请求时间</td></tr>
<tr><td>     --create-dirs</td><td>建立本地目录的目录层次结构</td></tr>
<tr><td>     --crlf</td><td>上传是把LF转变成CRLF</td></tr>
<tr><td>-f/--fail</td><td>连接失败时不显示http错误</td></tr>
<tr><td>     --ftp-create-dirs</td><td>如果远程目录不存在,创建远程目录</td></tr>
<tr><td>     --ftp-method [multicwd/nocwd/singlecwd]</td><td>控制CWD的使用</td></tr>
<tr><td>     --ftp-pasv</td><td>使用 PASV/EPSV 代替端口</td></tr>
<tr><td>     --ftp-skip-pasv-ip</td><td>使用PASV的时候,忽略该IP地址</td></tr>
<tr><td>     --ftp-ssl</td><td>尝试用 SSL/TLS 来进行ftp数据传输</td></tr>
<tr><td>     --ftp-ssl-reqd</td><td>要求用 SSL/TLS 来进行ftp数据传输</td></tr>
<tr><td>-F/--form <name=content></td><td>模拟http表单提交数据</td></tr>
<tr><td>     --form-string <name=string></td><td>模拟http表单提交数据</td></tr>
<tr><td>-g/--globoff</td><td>禁用网址序列和范围使用{}和[]</td></tr>
<tr><td>-G/--get</td><td>以get的方式来发送数据</td></tr>
<tr><td>-H/--header <line></td><td>自定义头信息传递给服务器</td></tr>
<tr><td>     --ignore-content-length</td><td>忽略的HTTP头信息的长度</td></tr>
<tr><td>-i/--include</td><td>输出时包括protocol头信息</td></tr>
<tr><td>-I/--head</td><td>只显示请求头信息</td></tr>
<tr><td>-j/--junk-session-cookies</td><td>读取文件进忽略session cookie</td></tr>
<tr><td>     --interface <interface></td><td>使用指定网络接口/地址</td></tr>
<tr><td>     --krb4 <level></td><td>使用指定安全级别的krb4</td></tr>
<tr><td>-k/--insecure</td><td>允许不使用证书到SSL站点</td></tr>
<tr><td>-K/--config</td><td>指定的配置文件读取</td></tr>
<tr><td>-l/--list-only</td><td>列出ftp目录下的文件名称</td></tr>
<tr><td>     --limit-rate <rate></td><td>设置传输速度</td></tr>
<tr><td>     --local-port<NUM></td><td>强制使用本地端口号</td></tr>
<tr><td>-m/--max-time <seconds></td><td>设置最大传输时间</td></tr>
<tr><td>     --max-redirs <num></td><td>设置最大读取的目录数</td></tr>
<tr><td>     --max-filesize <bytes></td><td>设置最大下载的文件总量</td></tr>
<tr><td>-M/--manual</td><td>显示全手动</td></tr>
<tr><td>-n/--netrc</td><td>从netrc文件中读取用户名和密码</td></tr>
<tr><td>     --netrc-optional</td><td>使用 .netrc 或者 URL来覆盖-n</td></tr>
<tr><td>     --ntlm</td><td>使用 HTTP NTLM 身份验证</td></tr>
<tr><td>-N/--no-buffer</td><td>禁用缓冲输出</td></tr>
<tr><td>-o/--output</td><td>把输出写到该文件中</td></tr>
<tr><td>-O/--remote-name</td><td>把输出写到该文件中,保留远程文件的文件名</td></tr>
<tr><td>-p/--proxytunnel</td><td>使用HTTP代理</td></tr>
<tr><td>     --proxy-anyauth</td><td>选择任一代理身份验证方法</td></tr>
<tr><td>     --proxy-basic</td><td>在代理上使用基本身份验证</td></tr>
<tr><td>     --proxy-digest</td><td>在代理上使用数字身份验证</td></tr>
<tr><td>     --proxy-ntlm</td><td>在代理上使用ntlm身份验证</td></tr>
<tr><td>-P/--ftp-port <address></td><td>使用端口地址而不是使用PASV</td></tr>
<tr><td>-q</td><td>作为第一个参数,关闭 .curlrc</td></tr>
<tr><td>-Q/--quote <cmd></td><td>文件传输前,发送命令到服务器</td></tr>
<tr><td>-r/--range <range></td><td>检索来自HTTP/1.1或FTP服务器字节范围</td></tr>
<tr><td>--range-file</td><td>读取SSL的随机文件</td></tr>
<tr><td>-R/--remote-time</td><td>在本地生成文件时,保留远程文件时间</td></tr>
<tr><td>     --retry <num></td><td>传输出现问题时,重试的次数</td></tr>
<tr><td>     --retry-delay <seconds></td><td>传输出现问题时,设置重试间隔时间</td></tr>
<tr><td>     --retry-max-time <seconds></td><td>传输出现问题时,设置最大重试时间</td></tr>
<tr><td>-s/--silent</td><td>静默模式。不输出任何东西</td></tr>
<tr><td>-S/--show-error</td><td>显示错误</td></tr>
<tr><td>     --socks4 <host[:port]></td><td>用socks4代理给定主机和端口</td></tr>
<tr><td>     --socks5 <host[:port]></td><td>用socks5代理给定主机和端口</td></tr>
<tr><td>     --stderr <file></td><td> </td></tr>
<tr><td>-t/--telnet-option <OPT=val></td><td>Telnet选项设置</td></tr>
<tr><td>     --trace <file></td><td>对指定文件进行debug</td></tr>
<tr><td>     --trace-ascii <file></td><td>Like --跟踪但没有hex输出</td></tr>
<tr><td>     --trace-time</td><td>跟踪/详细输出时,添加时间戳</td></tr>
<tr><td>-T/--upload-file <file></td><td>上传文件</td></tr>
<tr><td>     --url <URL></td><td>Spet URL to work with</td></tr>
<tr><td>-u/--user <user[:password]></td><td>设置服务器的用户和密码</td></tr>
<tr><td>-U/--proxy-user <user[:password]></td><td>设置代理用户名和密码</td></tr>
<tr><td>-w/--write-out [format]</td><td>什么输出完成后</td></tr>
<tr><td>-x/--proxy <host[:port]></td><td>在给定的端口上使用HTTP代理</td></tr>
<tr><td>-X/--request <command></td><td>指定什么命令</td></tr>
<tr><td>-y/--speed-time</td><td>放弃限速所要的时间默认为30</td></tr>
<tr><td>-Y/--speed-limit</td><td>停止传输速度的限制,速度时间</td></tr>
</tbody>
</table>
### 实例
**curl命令** 是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载所以是综合传输工具但按传统习惯称
curl为下载工具。作为一款强力工具curl支持包括HTTP、HTTPS、ftp等众多协议还支持POST、cookies、认证、从指定偏移处下载部分
文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化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 停止传输速度的限制,速度时间
## 实例
**文件下载**

@ -2,38 +2,27 @@
## 说明
**cut命令** 用来显示行中的指定部分删除文件中指定字段。cut经常用来显示文件的内容类似于type命令;该命令有两项功能其一是用来显示文件的内容它依次读取由参数file所指 明的文件,将它们的内容输出到标准输出上;其二是连接两个或多个文件,如`cut fl f2 > f3`将把文件fl和几的内容合并起来然后通过输出重定向符“>”的作用将它们放入文件f3中。
**cut命令** 用来显示行中的指定部分删除文件中指定字段。cut经常用来显示文件的内容类似于type命令;该命令有两项功能,其一
是用来显示文件的内容它依次读取由参数file所指 明的文件,将它们的内容输出到标准输出上;其二是连接两个或多个文件
如`cut fl f2 > f3`将把文件fl和几的内容合并起来然后通过输出重定向符“>”的作用将它们放入文件f3中
当文件较大时文本在屏幕上迅速闪过滚屏用户往往看不清所显示的内容。因此一般用more等命令分屏显示。为了控制滚屏可以按Ctrl+S键停止滚屏按Ctrl+Q键可以恢复滚屏。按Ctrl+C中断键可以终止该命令的执行并且返回Shell提示符状态。
```info
-b仅显示行中指定直接范围的内容
-c仅显示行中指定范围的字符
-d指定字段的分隔符默认的字段分隔符为“TAB”
-f显示指定字段的内容
-n与“-b”选项连用不分割多字节字符
--complement补足被选择的字节、字符或字段
--out-delimiter=<字段分隔符>:指定输出内容是的字段分割符
当文件较大时文本在屏幕上迅速闪过滚屏用户往往看不清所显示的内容。因此一般用more等命令分屏显示。为了控制滚屏
以按Ctrl+S键停止滚屏按Ctrl+Q键可以恢复滚屏。按Ctrl+C中断键可以终止该命令的执行并且返回Shell提示符状态
## 选项
```markdown
Print selected parts of lines from each FILE to standard output.
Mandatory arguments to long options are mandatory for short options too.
-b, --bytes=列表 只选中指定的这些字节
-c, --characters=列表 只选中指定的这些字符
-d, --delimiter=分界符 使用指定分界符代替制表符作为区域分界
-f, --fields=LIST select only these fields; also print any line
that contains no delimiter character, unless
the -s option is specified
-n with -b: don't split multibyte characters
--complement 补全选中的字节、字符或域
-s, --only-delimited 不打印没有包含分界符的行
--output-delimiter=字符串 使用指定的字符串作为输出分界符,默认采用输入
的分界符
--help 显示此帮助信息并退出
--version 显示版本信息并退出
-b, --bytes=列表 只选中指定的这些字节
-c, --characters=列表 只选中指定的这些字符
-d, --delimiter=分界符 使用指定分界符代替制表符作为区域分界
-f, --fields=LIST 只选择这些字段; 除非指定了-s选项否则还会打印任何不包含分隔符的行,即显示指定字段的内容
-n 与-b选项连用不分割多字节字符
--complement 补全选中的字节、字符或域
-s, --only-delimited 不打印没有包含分界符的行
--output-delimiter=字符串 使用指定的字符串作为输出分界符,默认采用输入的分界符
仅使用f -b, -c 或-f 中的一个。每一个列表都是专门为一个类别作出的,或者您可以用逗号隔
开要同时显示的不同类别。您的输入顺序将作为读取顺序,每个仅能输入一次。
@ -47,114 +36,29 @@ Mandatory arguments to long options are mandatory for short options too.
```
### 参数
文件:指定要进行内容过滤的文件。
## 实例
```sh
```bash
grep "model name" /proc/cpuinfo | uniq | cut -f2 -d : # 显示CPU信息;-f截取,-d以:字符分界
```
```
[root@localhost text]# cut -f2,3 test.txt
Name Mark
tom 69
jack 71
alex 68
```
**--complement** 选项提取指定字段之外的列(打印除了第二列之外的列):
```
[root@localhost text]# cut -f2 --complement test.txt
No Mark Percent
01 69 91
02 71 87
03 68 98
```
使用 **-d** 选项指定字段分隔符:
```
[root@localhost text]# cat test2.txt
No;Name;Mark;Percent
01;tom;69;91
02;jack;71;87
03;alex;68;98
```
```
[root@localhost text]# cut -f2 -d";" test2.txt
Name
tom
jack
alex
```
cut -f2 --complement test.txt # --complement选项提取指定字段之外的列打印除了第二列之外的列
cut -f2 -d";" test2.txt # 使用-d选项指定字段分隔符
### 指定字段的字符或者字节范围
: << comment
cut命令可以将一串字符作为列来显示字符字段的记法
* **N-** 从第N个字节、字符、字段到结尾
* **N-M** 从第N个字节、字符、字段到第M个包括M在内字节、字符、字段
* **-M** 从第1个字节、字符、字段到第M个包括M在内字节、字符、字段。
* **N-** 从第N个字节、字符、字段到结尾
* **N-M** 从第N个字节、字符、字段到第M个包括M在内字节、字符、字段
* **-M** 从第1个字节、字符、字段到第M个包括M在内字节、字符、字段
上面是记法,结合下面选项将摸个范围的字节、字符指定为字段:
* **-b** 表示字节
* **-c** 表示字符
* **-f** 表示定义字段
comment
* **-b** 表示字节;
* **-c** 表示字符;
* **-f** 表示定义字段。
**示例**
cut -c1-3 test.txt # 打印第1个到第3个字符
cut -c-2 test.txt # 打印前2个字符
cut -c5- test.txt # 打印从第5个字符开始到结尾
```
[root@localhost text]# cat test.txt
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
```
打印第1个到第3个字符
```
[root@localhost text]# cut -c1-3 test.txt
abc
abc
abc
abc
abc
```
打印前2个字符
```
[root@localhost text]# cut -c-2 test.txt
ab
ab
ab
ab
ab
```
打印从第5个字符开始到结尾
```
[root@localhost text]# cut -c5- test.txt
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
```

@ -2,44 +2,30 @@
## 说明
**date命令** 是显示或设置系统时间与日期
**date命令** 是显示或设置系统时间与日期
很多shell脚本里面需要打印不同格式的时间或日期以及要根据时间和日期执行操作。延时通常用于脚本执行过程中提供一段等待的时间。日期可以以多种格式去打印也可以使用命令设置固定的格式。在类UNIX系统中日期被存储为一个整数其大小为自世界标准时间UTC1970年1月1日0时0分0秒起流逝的秒数。
很多shell脚本里面需要打印不同格式的时间或日期以及要根据时间和日期执行操作。延时通常用于脚本执行过程中提供一段等待的时
间。日期可以以多种格式去打印也可以使用命令设置固定的格式。在类UNIX系统中日期被存储为一个整数其大小为自世界标准时间
UTC1970年1月1日0时0分0秒起流逝的秒数
## 语法
## 选项
```markdown
用法date [选项]... [+格式]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
```info
必选参数对长短选项同时适用
 date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
-d,--date=STRING 用STRING描述时间而不是'NOW'
--debug 注释解析日期,并警告stderr的可疑用法
-f,--file=DATEFILE 和--date相似,输出DATEFILE的每一行
-I[FMT],--iso-8601[=FMT] 以ISO 8601格式输出FMT='date'默认只适用于日期,'hour''minutes''seconds'或'ns'对于指定精度的日期和时间。 示例2006-08-14T023456-0600
-R,--rfc-email 以RFC 5322格式输出例如Mon, 14 Aug 2006 02:34:56 -0600
--rfc-3339=FMT 以RFC 3339格式输出FMT='date''hour''minutes''seconds'或'ns',对于指定精度的日期和时间。 示例: 2006-08-14 02:34:56-06:00
-r,--reference=FILE 显示文件最后的修改时间
-s,--set=STRING 以字符串方式设置时间
-u,--utc,--universal 打印或者设置协调世界时(UTC)
```
## 参数
给定的格式FORMAT 控制着输出,解释序列如下:
```sh
%% 一个文字的%(即%不起到格式化的作用)
%a 当前locale 的星期名缩写(例如: 日,代表星期日)
%A 当前locale 的星期名全称 (如:星期日)
@ -107,56 +93,42 @@ TZ='America/Los_Angeles' date
显示下周五上午9点在美国西海岸的当地时间
date --date='TZ="America/Los_Angeles" 09:00 next Fri'
```
## 实例
```sh
# 格式化输出并用-符号连接日期:
date +"%Y-%m-%d"
2009-12-07
# 输出昨天日期:
date -d "1 day ago" +"%Y-%m-%d"或date -d "yesterday" +"%Y-%m-%d"或date -d "-1 day" +"%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" //这样可以设置全部时间
```bash
date +"%Y-%m-%d" # 格式化输出并用-符号连接日期
# 输出昨天日期
date -d "1 day ago" +"%Y-%m-%d"
date -d "yesterday" +"%Y-%m-%d"
date -d "-1 day" +"%Y-%m-%d"
date -d "2 second" +"%Y-%m-%d %H:%M.%S" # 2秒后输出
date -d "1970-01-01 1234567890 seconds" +"%Y-%m-%d %H:%m:%S" # 输出传说中的1234567890秒
date -d "2009-12-12" +"%Y/%m/%d %H:%M.%S" # 普通转格式
date -d "Dec 5, 2009 12:00:37 AM" +"%Y-%m-%d %H:%M.%S" # apache格式转换
date -d "Dec 5, 2009 12:00:37 AM 2 year ago" +"%Y-%m-%d %H:%M.%S" # 格式转换后时间游走
# 加减操作
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
@ -166,5 +138,5 @@ nmap man.linuxde.net &> /dev/null
end=$(date +%s)
difference=$(( end - start ))
echo $difference seconds.
echo $difference seconds
```

@ -1,33 +1,21 @@
declare
===
声明或显示shell变量
# **declare**
## 说明
**declare命令** 用于声明和显示已存在的shell变量。当不提供变量名参数时显示所有shell变量。declare命令若不带任何参数选项则会显示所有shell变量及其值。declare的功能与typeset命令的功能是相同的。
### 语法
```
declare(选项)(参数)
```
## 选项
```
```markdown
+/-"-"可用来指定变量的属性,"+"则是取消变量所设的属性;
-f仅显示函数
r将变量设置为只读
x指定的变量会成为环境变量可供shell以外的程序来使用
i[设置值]可以是数值,字符串或运算式。
```
### 参数
shell变量声明shell变量格式为“变量名=值”。
```
### 实例
## 实例
首先使用declare命令定义shell变量"test",并且将其值设置为"man.linuxde.net",输入如下命令:

@ -1,21 +1,12 @@
df
===
显示磁盘的相关信息
# **df**
## 说明
**df命令** 用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间目前还剩下多少空间等信息。
### 语法
```
df(选项)(参数)
```
**df命令** 用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘占用空间等信息
## 选项
```
```markdown
-a或--all包含全部的文件系统
--block-size=<区块大小>:以指定的区块大小来显示区块数目;
-h或--human-readable以可读性较高的方式来显示信息

@ -1,21 +1,15 @@
diff
===
比较给定的两个文件的不同
# **diff**
## 说明
**diff命令** 在最简单的情况下,比较给定的两个文件的不同。如果使用“-”代替“文件”参数,则要比较的内容将来自标准输入。diff命令是以逐行的方式比较文本文件的异同处。如果该命令指定进行目录的比较则将会比较该目录中具有相同文件名的文件而不会对其子目录文件进行任何比较操作。
### 语法
**diff命令** 在最简单的情况下,比较给定的两个文件的不同。如果使用“-”代替“文件”参数,则要比较的内容将来自标准输入
diff命令是以逐行的方式比较文本文件的异同处。如果该命令指定进行目录的比较则将会比较该目录中具有相同文件名的文件而不
会对其子目录文件进行任何比较操作
```
diff(选项)(参数)
```
## 选项
```markdown
```
-<行数>:指定要显示多少行的文本。此参数必须与-c或-u参数一并使用
-a或——textdiff预设只会逐行比较文本文件
-b或--ignore-space-change不检查空格字符的不同
@ -50,31 +44,117 @@ diff(选项)(参数)
--help显示帮助
--left-column在使用-y参数时若两个文件某一行内容相同则仅在左侧的栏位显示该行内容
--suppress-common-lines在使用-y参数时仅显示不同之处。
```
### 参数
* 文件1指定要比较的第一个文件
* 文件2指定要比较的第二个文件。
### 实例
用法diff [选项]... FILES
Compare FILES line by line.
Mandatory arguments to long options are mandatory for short options too.
--normal output a normal diff (the default)
-q, --brief report only when files differ
-s, --report-identical-files report when two files are the same
-c, -C NUM, --context[=NUM] output NUM (default 3) lines of copied context
-u, -U NUM, --unified[=NUM] output NUM (default 3) lines of unified context
-e, --ed output an ed script
-n, --rcs output an RCS format diff
-y, --side-by-side output in two columns
-W, --width=NUM output at most NUM (default 130) print columns
--left-column output only the left column of common lines
--suppress-common-lines do not output common lines
-p, --show-c-function show which C function each change is in
-F, --show-function-line=RE show the most recent line matching RE
--label LABEL use LABEL instead of file name
(can be repeated)
-t, --expand-tabs expand tabs to spaces in output
-T, --initial-tab make tabs line up by prepending a tab
--tabsize=NUM tab stops every NUM (default 8) print columns
--suppress-blank-empty suppress space or tab before empty output lines
-l, --paginate pass output through 'pr' to paginate it
-r, --recursive recursively compare any subdirectories found
--no-dereference don't follow symbolic links
-N, --new-file treat absent files as empty
--unidirectional-new-file treat absent first files as empty
--ignore-file-name-case ignore case when comparing file names
--no-ignore-file-name-case consider case when comparing file names
-x, --exclude=PAT exclude files that match PAT
-X, --exclude-from=FILE exclude files that match any pattern in FILE
-S, --starting-file=FILE start with FILE when comparing directories
--from-file=FILE1 compare FILE1 to all operands;
FILE1 can be a directory
--to-file=FILE2 compare all operands to FILE2;
FILE2 can be a directory
-i, --ignore-case ignore case differences in file contents
-E, --ignore-tab-expansion ignore changes due to tab expansion
-Z, --ignore-trailing-space ignore white space at line end
-b, --ignore-space-change ignore changes in the amount of white space
-w, --ignore-all-space ignore all white space
-B, --ignore-blank-lines ignore changes where lines are all blank
-I, --ignore-matching-lines=RE ignore changes where all lines match RE
-a, --text treat all files as text
--strip-trailing-cr strip trailing carriage return on input
-D, --ifdef=NAME output merged file with '#ifdef NAME' diffs
--GTYPE-group-format=GFMT format GTYPE input groups with GFMT
--line-format=LFMT format all input lines with LFMT
--LTYPE-line-format=LFMT format LTYPE input lines with LFMT
These format options provide fine-grained control over the output
of diff, generalizing -D/--ifdef.
LTYPE is 'old', 'new', or 'unchanged'. GTYPE is LTYPE or 'changed'.
GFMT (only) may contain:
%< lines from FILE1
%> lines from FILE2
%= lines common to FILE1 and FILE2
%[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER
LETTERs are as follows for new group, lower case for old group:
F first line number
L last line number
N number of lines = L-F+1
E F-1
M L+1
%(A=B?T:E) if A equals B then T else E
LFMT (only) may contain:
%L contents of line
%l contents of line, excluding any trailing newline
%[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number
Both GFMT and LFMT may contain:
%% %
%c'C' the single character C
%c'\OOO' the character with octal code OOO
C the character C (other characters represent themselves)
-d, --minimal try hard to find a smaller set of changes
--horizon-lines=NUM keep NUM lines of the common prefix and suffix
--speed-large-files assume large files and many scattered small changes
--help display this help and exit
-v, --version output version information and exit
FILES are 'FILE1 FILE2' or 'DIR1 DIR2' or 'DIR FILE...' or 'FILE... DIR'.
If --from-file or --to-file is given, there are no restrictions on FILE(s).
If a FILE is '-', read standard input.
如果输入相同,则退出状态为 01 表示输入不同2 表示有错误产生。
将目录`/usr/li`下的文件"test.txt"与当前目录下的文件"test.txt"进行比较,输入如下命令:
```
diff /usr/li test.txt #使用diff指令对文件进行比较
```
上面的命令执行后,会将比较后的不同之处以指定的形式列出,如下所示:
## 实例
```
```bash
diff /usr/li/test.txt test.txt # 将目录`/usr/li`下的文件test.txt与当前目录下的文件test.txt进行比较
: << comment
输出详解:
n1 a n3,n4
n1,n2 d n3
n1,n2 c n3,n4
```
其中,字母"a"、"d"、"c"分别表示添加、删除及修改操作。而"n1"、"n2"表示在文件1中的行号"n3"、"n4"表示在文件2中的行号。
注意:以上说明指定了两个文件中不同处的行号及其相应的操作。在输出形式中,每一行后面将跟随受到影响的若干行。其中,以<开始的行属于文件1以>开始的行属于文件2。
其中,字母"a"、"d"、"c"分别表示添加、删除及修改操作。而"n1"、"n2"表示在文件1中的行号"n3"、"n4"表示在文件2中的行号
注意:以上说明指定了两个文件中不同处的行号及其相应的操作。在输出形式中,每一行后面将跟随受到影响的若干行。其中,以<开始
的行属于文件1以>开始的行属于文件2
comment
```

@ -1,11 +1,8 @@
du
===
显示每个文件和目录的磁盘使用空间
# **du**
## 说明
**du命令** 也是查看使用空间的但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看还是和df命令有一些区别的。
**du命令** 也是查看使用空间的但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看还是和df命令有一些区别
### 语法
@ -33,63 +30,11 @@ du [选项][文件]
-l或--count-links 重复计算硬件链接的文件。
```
### 实例
显示目录或者文件所占空间:
```
root@localhost [test]# du
608 ./test6
308 ./test4
4 ./scf/lib
4 ./scf/service/deploy/product
4 ./scf/service/deploy/info
12 ./scf/service/deploy
16 ./scf/service
4 ./scf/doc
4 ./scf/bin
32 ./scf
8 ./test3
1288 .
```
只显示当前目录下面的子目录的目录大小和当前目录的总的大小最下面的1288为当前目录的总大小
显示指定文件所占空间:
```
[root@localhost test]# du log2012.log
300 log2012.log
```
查看指定目录(etc)的所占空间:
```sh
du -sh /etc
```
显示多个文件所占空间:
```
[root@localhost test]# du log30.tar.gz log31.tar.gz
4 log30.tar.gz
4 log31.tar.gz
```
只显示总和的大小:
```
[root@localhost test]# du -s
1288 .
## 实例
[root@localhost test]# du -s scf
32 scf
```bash
du -sh /etc/* | sort -rh | head -n 10 # etc目录下所占空间倒序排序前十个目录或文件
[root@localhost test]# cd ..
[root@localhost soft]# du -s test
1288 test
```

@ -2,14 +2,18 @@
## 说明
**echo命令** 用于在shell中打印shell变量的值或者直接输出指定的字符串。linux的echo命令在shell编程中极为常用, 在终端下打印变量value的时候也是常常用到的因此有必要了解下echo的用法echo命令的功能是在显示器上显示一段文字一般起到一个提示的作用。
**echo命令** 用于在shell中打印shell变量的值或者直接输出指定的字符串。linux的echo命令在shell编程中极为常用, 在终端下
打印变量value的时候也是常常用到的因此有必要了解下echo的用法echo命令的功能是在显示器上显示一段文字一般起到一个提示的
作用
## 选项
echo [SHORT-OPTION] ... [STRING]
echo LONG-OPTION
使用`-e`选项时,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
-n 不换行输出内容
-e 若字符串中出现以下转义字符,则特别加以处理,而不会将它当成一般文字输出:
转义字符:
* \a 发出警告声
* \b 删除前一个字符
* \c 最后不加上换行符号
@ -25,13 +29,13 @@ echo LONG-OPTION
* \xHH 十六进制值HH(1-2位)的字节
* -E 取消-e效果默认就是这个
## 实例
## 实例
```sh
```bash
echo "I live in `locale territory`" # 从locale数据库中展开信息
用echo命令打印带有色彩的文字
# 用echo命令打印带有色彩的文字
## 文字色:# 颜色码:重置=0黑色=30红色=31绿色=32黄色=33蓝色=34洋红=35青色=36白色=37
echo -e "\e[1;31mThis is red text\e[0m"

@ -1,29 +1,18 @@
exec
===
调用并执行指定的命令
# **exec**
## 说明
**exec命令** 用于调用并执行指令的命令。exec命令通常用在shell脚本程序中可以调用其他的命令。如果在当前终端中使用命令则当指定的命令执行完毕后会立即退出终端。
### 语法
```
exec(选项)(参数)
```
**exec命令** 用于调用并执行指令的命令。exec命令通常用在shell脚本程序中可以调用其他的命令。如果在当前终端中使用命令
当指定的命令执行完毕后会立即退出终端
## 选项
```
```markdown
-c在空环境中执行指定的命令。
```
### 参数
指令:要执行的指令和相应的参数。
```
### 实例
## 实例
首先使用echo命令将文本“Linux C++”进行输出,输入如下命令:

@ -1,7 +1,4 @@
export
===
设置或显示系统环境变量
# **export**
## 说明
@ -9,25 +6,15 @@ export
一个变量创建时它不会自动地为在它之后创建的shell进程所知。而命令export可以向后面的shell传递变量的值。当一个shell脚本调用并执 行时它不会自动得到原为脚本调用者里定义的变量的访问权除非这些变量已经被显式地设置为可用。export命令可以用于传递一个或多个变量的值到任何后继脚本。
### 语法
```
export(选项)(参数)
```
## 选项
```
```markdown
-f代表[变量名称]中为函数名称;
-n删除指定的变量。变量实际上并未删除只是不会输出到后续指令的执行环境中
-p列出所有的shell赋予程序的环境变量。
```
### 参数
变量:指定要输出或者删除的环境变量。
### 实例
## 实例
一般来说,配置交叉编译工具链的时候需要指定编译工具的路径,此时就需要设置环境变量。查看已经存在的环境变量:

@ -1,71 +1,47 @@
file
===
用来探测给定文件的类型。
# **file**
## 说明
**file命令** 用来探测给定文件的类型。file命令对文件的检查分为文件系统、魔法幻数检查和语言检查3个过程。
### 语法
```
file(选项)(参数)
```
**file命令** 用来探测给定文件的类型。file命令对文件的检查分为文件系统、魔法幻数检查和语言检查3个过程
## 选项
```markdown
Usage: file [OPTION...] [FILE...]
-m, --magic-file LIST 使用LIST作为冒号分隔的幻数文件列表,即指定魔法数字文件
-z, --uncompress 尝试去解读压缩文件的内容
-b, --brief 列出辨识结果时,不显示文件名称
-c, --checking-printout 打印魔术文件的解析形式,与-m一起使用以在安装之前调试新的魔术文件
-e, --exclude TEST 从要对文件执行的测试列表中排除TEST
有效的测试是asciiapptypecompresselfsofttartokenstroff
-f, --files-from FILE 指定名称文件其内容有一个或多个文件名称时让file依序辨识这些文件格式为每列一个文件名称
-F, --separator STRING use string as separator instead of `:'
-i, --mime output MIME type strings (--mime-type and
--mime-encoding)
--apple output the Apple CREATOR/TYPE
--mime-type output the MIME type
--mime-encoding output the MIME encoding
-k, --keep-going don't stop at the first match
-l, --list list magic strength
-L, --dereference follow symlinks (default),即直接显示符号连接所指向的文件类别
-h, --no-dereference don't follow symlinks
-n, --no-buffer do not buffer output
-N, --no-pad do not pad output
-0, --print0 terminate filenames with ASCII NUL
-p, --preserve-date preserve access times on files
-r, --raw don't translate unprintable chars to \ooo
-s, --special-files treat special (block/char devices) files as
ordinary ones
-C, --compile compile file specified by -m
-d, --debug print debugging messages
```
## 实例
```bash
file install.log # 显示文件类型
file -i install.log # 显示MIME类别
```
-b列出辨识结果时不显示文件名称
-c详细显示指令执行过程便于排错或分析程序执行的情形
-f<名称文件>指定名称文件其内容有一个或多个文件名称时让file依序辨识这些文件格式为每列一个文件名称
-L直接显示符号连接所指向的文件类别
-m<魔法数字文件>:指定魔法数字文件;
-v显示版本信息
-z尝试去解读压缩文件的内容。
```
### 参数
文件要确定类型的文件列表多个文件之间使用空格分开可以使用shell通配符匹配多个文件。
### 实例
显示文件类型
```
[root@localhost ~]# file install.log
install.log: UTF-8 Unicode text
[root@localhost ~]# file -b install.log <== 不显示文件名称
UTF-8 Unicode text
[root@localhost ~]# file -i install.log <== 显示MIME类别。
install.log: text/plain; charset=utf-8
[root@localhost ~]# file -b -i install.log
text/plain; charset=utf-8
```
显示符号链接的文件类型
```
[root@localhost ~]# ls -l /var/mail
lrwxrwxrwx 1 root root 10 08-13 00:11 /var/mail -> spool/mail
[root@localhost ~]# file /var/mail
/var/mail: symbolic link to `spool/mail'
[root@localhost ~]# file -L /var/mail
/var/mail: directory
[root@localhost ~]# file /var/spool/mail
/var/spool/mail: directory
[root@localhost ~]# file -L /var/spool/mail
/var/spool/mail: directory
```

File diff suppressed because it is too large Load Diff

@ -1,11 +1,9 @@
fuser
===
使用文件或文件结构识别进程
# fuser
## 说明
**fuser命令** 用于报告进程使用的文件和网络套接字。fuser命令列出了本地进程的进程号那些本地进程使用file参数指定的本地或远程文件。对于阻塞特别设备此命令列出了使用该设备上任何文件的进程。
**fuser命令** 用于报告进程使用的文件和网络套接字。fuser命令列出了本地进程的进程号那些本地进程使用file参数指定的本地
或远程文件。对于阻塞特别设备,此命令列出了使用该设备上任何文件的进程
每个进程号后面都跟随一个字母,该字母指示进程如何使用文件。
@ -16,15 +14,9 @@ fuser
* r指示该目录为进程的根目录。
* m指示进程使用该文件进行内存映射抑或该文件为共享库文件被进程映射进内存。
### 语法
```
fuser(选项)(参数)
```
## 选项
```
```markdown
-a显示命令行中指定的所有文件
-k杀死访问指定文件的所有进程
-i杀死进程前需要用户进行确认
@ -34,39 +26,21 @@ fuser(选项)(参数)
-u在每个进程后显示所属的用户名。
```
### 参数
文件可以是文件名或者TCP、UDP端口号。
### 实例
要列出使用`/etc/passwd`文件的本地进程的进程号,请输入:
```
fuser /etc/passwd
```
要列出使用`/etc/filesystems`文件的进程的进程号和用户登录名,请输入:
## 实例
```
fuser -u /etc/filesystems
```
```bash
fuser /etc/passwd # 要列出使用`/etc/passwd`文件的本地进程的进程号
fuser -u /etc/filesystems # 要列出使用`/etc/filesystems`文件的进程的进程号和用户登录名
要终止使用给定文件系统的所有进程,请输入:
# 要终止使用给定文件系统的所有进程
fuser -k -x -u -c /dev/hd1
fuser -kxuc /home
```
fuser -k -x -u -c /dev/hd1 或者 fuser -kxuc /home
```
: << comment
任一命令都列出了进程号和用户名,然后终止每个正在使用`/dev/hd1 (/home)`文件系统的进程。仅有root用户能终止属于另一用户的进
程。如果您正在试图卸下`/dev/hd1`文件系统,而一个正在访问`/dev/hd1`文件系统的进程不允许这样,您可能希望使用此命令
comment
任一命令都列出了进程号和用户名,然后终止每个正在使用`/dev/hd1 (/home)`文件系统的进程。仅有root用户能终止属于另一用户的进程。如果您正在试图卸下`/dev/hd1`文件系统,而一个正在访问`/dev/hd1`文件系统的进程不允许这样,您可能希望使用此命令。
fuser -d /usr文件 # 要列出正在使用已从给定文件系统删除的文件的全部进程
要列出正在使用已从给定文件系统删除的文件的全部进程,请输入:
```
fuser -d /usr文件
```
`/dev/kmem` 用于系统映像。
`/dev/mem`  也用于系统映像。

@ -1,43 +1,21 @@
getsebool
===
查询SElinux策略内各项规则的布尔值
# **getsebool**
## 说明
**getsebool命令** 是用来查询SElinux策略内各项规则的布尔值。SELinux的策略与规则管理相关命令seinfo命令、sesearch命令、getsebool命令、setsebool命令、semanage命令。
### 语法
## 选项
```markdown
getsebool [-a] [布尔值条款] -a列出目前系统上面的所有布尔值条款设置为开启或关闭值。
```
getsebool [-a] [布尔值条款]
```
```
-a列出目前系统上面的所有布尔值条款设置为开启或关闭值。
```
### 实例
查询本系统内所有的布尔值设置状况:
## 实例
```
getsebool -a
NetworkManager_disable_trans --> off
allow_console_login --> off
allow_cvs_read_shadow --> off
allow_daemons_dump_core --> on
....(底下省略)....
```
```bash
getsebool -a # 查询本系统内所有的布尔值设置
查询httpd_enable_homedirs是否为关闭若没关闭请关闭它
```
# 查询httpd_enable_homedirs是否为关闭若没关闭请关闭它
getsebool httpd_enable_homedirs
setsebool -P httpd_enable_homedirs=0 //0是关闭 1是开启
setsebool -P httpd_enable_homedirs=0 # 0是关闭 1是开启
```

@ -2,15 +2,16 @@
## 说明
**grep**(global search regular expression(RE))and print out the line全面搜索正则表达式并把行打印出来是一种强大的文本搜索工具它能使用正则表达式搜索文本并把匹配的行打印出来。用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,使用上十分灵活。
**grep**(global search regular expression(RE))and print out the line全面搜索正则表达式并把行打印出来是一种强大的文本
搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用
grep的工作方式是这样的它在一个或多个文件中搜索字符串模板。如果模板包括空格则必须被引用模板后的所有字符串被看作文件名。搜索的结果被送到屏幕不影响原文件内容。
grep的工作方式是这样的它在一个或多个文件中搜索字符串模板。如果模板包括空格则必须被引用模板后所有字符串被看作文件名
搜索的结果被送到屏幕,不影响原文件内容
grep可用于shell脚本因为grep通过返回一个状态值来说明搜索的状态如果模板搜索成功则返回0如果搜索不成功则返回1如果搜索的文件不存在则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。
grep可用于shell脚本因为grep通过返回一个状态值来说明搜索的状态如果模板搜索成功则返回0如果搜索不成功则返回1
果搜索的文件不存在则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作
```sh
```markdown
用法: grep [选项]... PATTERN [FILE]...
在每个 FILE 或是标准输入中查找 PATTERN。
默认的 PATTERN 是一个基本正则表达式(缩写为 BRE)。
@ -93,7 +94,7 @@ egrep是grep的扩展支持更多的re元字符 fgrep就是fixed grep或fa
## grep可用的规则表达式
```sh
```markdown
^ # 锚定行的开始 如:'^grep'匹配所有以grep开头的行
$ # 锚定行的结束 如:'grep$'匹配所有以grep结尾的行。
\ # 转义符
@ -130,7 +131,7 @@ fgrep 快速grep命令不支持正则表达式与grep -F等价
## grep命令常见用法
```sh
```bash
grep bash /etc/passwd | cut -d: -f1 # 显示系统上使用Bash shell登录的所有用户
ls -algG --time-style=+%s | grep ^[^d] | awk -vlimit=$(date +%s -d '10 hours ago') '$4 > limit { print substr($0, index($0, $4) + length($4) + 1) }' # 搜索目录下十小时前更改的文件不包括文件夹只使用grep实现。(更好的方式用find实现)
grep ^[[:upper:]] test.txt # 搜索test.txt以大写字母开头的行POSIX字符类作为模式的用法都类似使用时注意用方括号将POSIX字符括起来就行了
@ -140,10 +141,14 @@ grep "\<the\>" test.txt
grep -w the test.txt
grep -E "zh|en" test.txt # | (或)字符,grep需要加上-E选项才能支持使用它,例匹配test.txt文件有zh或en的行
grep -iHR "关键字" ./* # 递归搜索含有某个关键字的文件目录
# 递归搜索含有某个关键字的文件目录
grep -iHR "关键字" ./*
: << comment
-i 对要搜索的字符忽略大小写
-H 同时打印包括搜索字符串的文件名
-R 递归搜索,当指定的搜索路径是一个目录时,加上-R的搜索会执行递归搜索
comment
grep ^/..../ test.txt # 搜索文件test.txt以/字符开始,中间任意四个字符,第六个字符为/的行

@ -1 +1,29 @@
# **head**
# **head**
```markdown
用法head [选项]... [文件]...
Print the first 10 lines of each FILE to standard output.
With more than one FILE, precede each with a header giving the file name.
With no FILE, or when FILE is -, read standard input.
Mandatory arguments to long options are mandatory for short options too.
-c, --bytes=[-]K print the first K bytes of each file;
with the leading '-', print all but the last
K bytes of each file
-n, --lines=[-]K print the first K lines instead of the first 10;
with the leading '-', print all but the last
K lines of each file
-q, --quiet, --silent 不显示包含给定文件名的文件头
-v, --verbose 总是显示包含给定文件名的文件头
K 后面可以跟乘号:
b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024,
GB 1000*1000*1000, G 1024*1024*1024, 对于T, P, E, Z, Y 同样适用
```
## 实例
```bash
head -1 file # 显示file文件第一行
```

@ -1,64 +1,64 @@
hwclock
===
显示与设定硬件时钟
# **hwclock**
## 说明
**hwclock命令** 是一个硬件时钟访问工具,它可以显示当前时间、设置硬件时钟的时间和设置硬件时钟为系统时间,也可设置系统时间为硬件时钟的时间。
在Linux中有硬件时钟与系统时钟等两种时钟。硬件时钟是指主机板上的时钟设备也就是通常可在BIOS画面设定的时钟。系统时钟则是指kernel中的时钟。当Linux启动时系统时钟会去读取硬件时钟的设定之后系统时钟即独立运作。所有Linux相关指令与函数都是读取系统时钟的设定。
### 语法
**hwclock命令**用于调整RTC(real_time clock)时间Linux还有个系统时间(wall time)
RTC是电脑内建的硬件时间执行这项指令可以显示现在时刻调整硬件时钟的时间将系统时间设成与硬件时钟之时间一致或是把系
统时间回存到硬件时钟
在Linux中有硬件时钟与系统时钟等两种时钟。硬件时钟是指主机板上的时钟设备也就是通常可在BIOS画面设定的时钟。系统时钟则是
指kernel中的时钟。当Linux启动时系统时钟会去读取硬件时钟的设定之后系统时钟即独立运作。所有Linux相关指令与函数都是读取
系统时钟的设定
## 选项
```markdown
clock命令和hwclock相同
hwclock [功能] [选项...]
功能:
-h, --help 显示此帮助并退出
-r, --show 读取硬件时钟并打印结果
--set 将 RTC 设置为--date指定的时间,设定硬件时钟hwclock --set --date='28/3/2018 12:34:00'
-s, --hctosys 从硬件时钟设置系统时间,即将系统时钟调整为与目前的硬件时钟一致
-w, --systohc 从当前系统时间设置硬件时钟,即将硬件时钟调整为与目前的系统时钟一致
--systz 基于当前时区设置系统时间
--adjust 根据自上次时钟设置或调整后的系统漂移来调整RTC,hwclock每次更改硬件时钟都会记录在/etc/adjtime中
-c, --compare 定期将系统时钟与 CMOS 时钟相比较
--getepoch 打印内核的硬件时钟纪元(epoch)值
--setepoch 将内核的硬件时钟纪元(epoch)值设置为
--epoch 选项指定的值
--predict 预测 --date 选项所指定时刻读取到的 RTC 值
选项:
-u, --utc 硬件时钟保持为 UTC 时间
--localtime 硬件时钟保持为本地时间
-f, --rtc <文件> 代替默认文件的特殊 /dev/... 文件
--directisa 直接访问 ISA 总线,而非 /dev/rtc,若无法存取时可用此参数直接以I/O指令来存取硬件时钟
--badyear 忽略 RTC 年份(由于 BIOS 损坏)
--date <时间> 指定要设置的硬件时钟时间
--epoch <年> 指定作为硬件纪元(epoch)值起始的年份
--noadjfile 不访问 /etc/adjtime需要使用 --utc 或 --localtime 选项
--adjfile <文件> 指定调整文件的路径;
默认为 /etc/adjtime
--test 不更新,只显示将进行什么操作
-D, --debug 调试模式
```
hwclock(选项)
```
## 实例
```
--adjusthwclock每次更改硬件时钟时都会记录在/etc/adjtime文件中。使用--adjust参数可使hwclock根据先前的记录来估算硬件时钟的偏差并用来校正目前的硬件时钟
--debug显示hwclock执行时详细的信息
--directisahwclock预设从/dev/rtc设备来存取硬件时钟。若无法存取时可用此参数直接以I/O指令来存取硬件时钟
--hctosys将系统时钟调整为与目前的硬件时钟一致
--set --date=<日期与时间>设定硬件时钟hwclock --set --date='28/3/2018 12:34:00'
--show显示硬件时钟的时间与日期
--systohc将硬件时钟调整为与目前的系统时钟一致
--test仅测试程序而不会实际更改硬件时钟
--utc若要使用格林威治时间请加入此参数hwclock会执行转换的工作
--version显示版本信息。
```
```bash
# 设置硬件时间要依赖于操作系统时间,具体方法如下:
hwclock -systohc
hwclock --systohc --utc
### 实例
hwclock # 不加任何参数使用hwclock可以查看当前的硬件日期和时间
设置硬件时间要依赖于操作系统时间,具体方法如下:
# 查看clock文件确认是否设置了UTCUTC=yes表示已设置
cat /etc/default/rcS
cat /etc/sysconfig/clock # 在其他一些版本的Linux如RebHat中可以这样查看
```
hwclock systohc
hwclock --systohc -utc
```
不加任何参数使用hwclock可以查看当前的硬件日期和时间。
```
hwclock
```
查看clock文件确认是否设置了UTC
```
cat /etc/default/rcS
UTC=yes
```
在其他一些版本的Linux如RebHat中可以这样查看
```
cat /etc/sysconfig/clock
ZONE="America/Los_Angeles"
UTC=false
ARC=false
```

@ -1,21 +1,12 @@
iftop
===
一款实时流量监控工具
# **iftop**
## 说明
**iftop命令** 是一款实时流量监控工具监控TCP/IP连接等缺点就是无报表功能。必须以root身份才能运行。
### 语法
```
iftop(选项)
```
## 选项
```
```markdown
iftop: display bandwidth usage on an interface by host
Synopsis: iftop -h | [-npblNBP] [-i interface] [-f filter code]
@ -52,18 +43,16 @@ Synopsis: iftop -h | [-npblNBP] [-i interface] [-f filter code]
```
### 界面说明
> 第一行为带宽这里为1Mbit,不是字节哦.
> 连接列表最后三列分别是2秒10秒和40秒的平均流量
> `=>` 代表发送
> `<=` 代表接收
> 最后三行表示发送,接收和全部的流量,
> 第二列为你运行iftop到目前流量第三列为高峰值第四列为平均值。
### 实例
## 界面说明
* 第一行为带宽这里为1Mbit,不是字节哦.
* 连接列表最后三列分别是2秒10秒和40秒的平均流量
* `=>` 代表发送
* `<=` 代表接收
* 最后三行表示发送,接收和全部的流量,
* 第二列为你运行iftop到目前流量第三列为高峰值第四列为平均值。
## 实例
```bash
iftop # 默认是监控第一块网卡的流量

@ -1,44 +1,70 @@
info
===
Linux下info格式的帮助指令
# **info**
## 说明
**info命令** 是Linux下info格式的帮助指令。
就内容来说info页面比man page编写得要更好、更容易理解也更友好但man page使用起来确实要更容易得多。一个man page只有一页而info页面几乎总是将它们的内容组织成多个区段称为节点每个区段也可能包含子区段称为子节点。理解这个命令的窍门就是不仅要学习如何在单独的Info页面中浏览导航还要学习如何在节点和子节点之间切换。可能刚开始会一时很难在info页面的节点之间移动和找到你要的东西真是具有讽刺意味原本以为对于新手来说某个东西比man命令会更好些但实际上学习和使用起来更困难。
**info命令** 是Linux下info格式的帮助指令内容格式来看info页面比man page编写得要更好、更容易理解也更友好但man page使
用起来确实要更容易得多。一个man page只有一页而info页面几乎总是将它们的内容组织成多个区段称为节点每个区段也可能包
含子区段称为子节点。理解这个命令的窍门就是不仅要学习如何在单独的Info页面中浏览导航还要学习如何在节点和子节点之间切
换。可能刚开始会一时很难在info页面的节点之间移动和找到你要的东西真是具有讽刺意味原本以为对于新手来说某个东西比man命
令会更好些,但实际上学习和使用起来更困难。
### 语法
## 选项
```
info(选项)(参数)
```
```
```markdown
-d添加包含info格式帮助文档的目录
-f指定要读取的info格式的帮助文档
-n指定首先访问的info帮助文件的节点
-o输出被选择的节点内容到指定文件。
```
### 参数
帮助主题:指定需要获得帮助的主题,可以是指令、函数以及配置文件。
### 实例
info [OPTION]... [MENU-ITEM...]
Read documentation in Info format.
Options:
-k, --apropos=STRING look up STRING in all indices of all manuals.
-d, --directory=DIR add DIR to INFOPATH.
--dribble=FILENAME remember user keystrokes in FILENAME.
-f, --file=FILENAME specify Info file to visit.
-h, --help display this help and exit.
--index-search=STRING go to node pointed by index entry STRING.
-n, --node=NODENAME specify nodes in first visited Info file.
-o, --output=FILENAME output selected nodes to FILENAME.
-R, --raw-escapes output "raw" ANSI escapes (default).
--no-raw-escapes output escapes as literal text.
--restore=FILENAME read initial keystrokes from FILENAME.
-O, --show-options, --usage go to command-line options node.
--strict-node-location (for debugging) use Info file pointers as-is.
--subnodes recursively output menu items.
--vi-keys use vi-like and less-like key bindings.
--version display version information and exit.
-w, --where, --location print physical location of Info file.
The first non-option argument, if present, is the menu entry to start from;
it is searched for in all `dir' files along INFOPATH.
If it is not present, info merges all `dir' files and shows the result.
Any remaining arguments are treated as the names of menu
items relative to the initial node visited.
For a summary of key bindings, type h within Info.
Examples:
info show top-level dir menu
info info show the general manual for Info readers
info info-stnd show the manual specific to this Info program
info emacs start at emacs node from top-level dir
info emacs buffers start at buffers node within emacs manual
info --show-options emacs start at node with emacs' command line options
info --subnodes -o out.txt emacs dump entire manual to out.txt
info -f ./foo.info show file ./foo.info, not searching dir
在info后面输入命令的名称就可以查看该命令的info帮助文档了
```
info info
```
面介绍一下它的几个常用快捷键。
## 实例
```
它的几个常用快捷键:
```markdown
**?键:** 它就会显示info的常用快捷键。
**N键** 显示(相对于本节点的)下一节点的文档内容。
**P键** 显示(相对于本节点的)前一节点的文档内容。

@ -2,188 +2,76 @@
## 说明
**iostat命令** 被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况同时也会汇报出CPU使用情况。同vmstat一样iostat也有一个弱点就是它不能对某个进程进行深入分析仅对系统的整体情况进行分析。
### 语法
```
iostat(选项)(参数)
```
```
-c仅显示CPU使用情况
-d仅显示设备利用率
-k显示状态以千字节每秒为单位而不使用块每秒
-m显示状态以兆字节每秒为单位
-p仅显示块设备和所有被使用的其他分区的状态
-t显示每个报告产生时的时间
-V显示版号并退出
-x显示扩展状态。
```
### 参数
* 间隔时间:每次报告的间隔时间(秒);
* 次数:显示报告的次数。
### 实例
用`iostat -x /dev/sda1`来观看磁盘I/O的详细情况
**iostat命令** 被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况同时也会汇报出CPU使用情况
同vmstat一样iostat也有一个弱点就是它不能对某个进程进行深入分析仅对系统的整体情况进行分析
## 选项
```markdown
-c仅显示CPU使用情况
-d仅显示设备利用率
-k显示状态以千字节每秒为单位而不使用块每秒
-m显示状态以兆字节每秒为单位
-p仅显示块设备和所有被使用的其他分区的状态
-t显示每个报告产生时的时间
-V显示版号并退出
-x显示扩展状态
* 间隔时间:每次报告的间隔时间(秒)
* 次数:显示报告的次数
```
iostat -x /dev/sda1
Linux 2.6.18-164.el5xen (localhost.localdomain)
2010年03月26日
avg-cpu: %user %nice %system %iowait
%steal %idle
0.11 0.02 0.18 0.35
0.03 99.31
Device: tps Blk_read/s Blk_wrtn/s
Blk_read Blk_wrtn
sda1 0.02 0.08
0.00 2014 4
持续查看io使用情况
说明:
%util接近100%说明I/O请求过多磁盘可能存在瓶颈
idble小于70%I/O负荷过大进程读取有过多的等待用vmstat查看b参数(等待资源的进程数)和wa参数(I/O等待所占用的CPU时间百分比高于30%说明I/O压力较高)
iostat -d -x -k 1
## 实例
```bash
iostat -x /dev/sda1 # 查看磁盘sda1的I/O详细情况
iostat -d -x -k 1 1
: << comment
输出说明:
%iowait的值过高表示硬盘存在I/O瓶颈。
%util 接近100%说明产生的I/O请求太多I/O系统已经满负荷该磁盘可能存在瓶颈。
svctm 比较接近 await说明 I/O 几乎没有等待时间;
await 远大于 svctm说明I/O 队列太长io响应太慢则需要进行必要优化。
avgqu-sz比较大也表示有大量io在等待。
idble小于70%I/O负荷过大进程读取有过多的等待用vmstat查看b参数(等待资源的进程数)和wa参数(I/O等待所占用的CPU时间
百分比高于30%说明I/O压力较高)
comment
```
详细说明第二行是系统信息和监测时间第三行和第四行显示CPU使用情况具体内容和mpstat命令相同。这里主要关注后面I/O输出的信息如下所示
<table>
<tbody>
<tr>
<th>标示</th>
<th>说明</th>
</tr>
<tr>
<td>Device</td>
<td>监测设备名称</td>
</tr>
<tr>
<td>rrqm/s</td>
<td>每秒需要读取需求的数量</td>
</tr>
<tr>
<td>wrqm/s</td>
<td>每秒需要写入需求的数量</td>
</tr>
<tr>
<td>r/s </td>
<td>每秒实际读取需求的数量</td>
</tr>
<tr>
<td>w/s</td>
<td>每秒实际写入需求的数量</td>
</tr>
<tr>
<td>rsec/s</td>
<td>每秒读取区段的数量</td>
</tr>
<tr>
<td>wsec/s</td>
<td>每秒写入区段的数量</td>
</tr>
<tr>
<td>rkB/s</td>
<td>每秒实际读取的大小单位为KB</td>
</tr>
<tr>
<td>wkB/s</td>
<td>每秒实际写入的大小单位为KB</td>
</tr>
<tr>
<td>avgrq-sz</td>
<td>需求的平均大小区段</td>
</tr>
<tr>
<td>avgqu-sz</td>
<td>需求的平均队列长度</td>
</tr>
<tr>
<td>await</td>
<td>等待I/O平均的时间milliseconds</td>
</tr>
<tr>
<td>svctm</td>
<td>I/O需求完成的平均时间</td>
</tr>
<tr>
<td>%util</td>
<td>被I/O需求消耗的CPU百分比</td>
</tr>
</tbody>
</table>
| 标示 | 说明 |
| :------: | :------: |
| Device | 监测设备名称 |
| rrqm/s | 每秒需要读取需求的数量 |
| wrqm/s | 每秒需要写入需求的数量 |
| r/s  | 每秒实际读取需求的数量 |
| w/s | 每秒实际写入需求的数量 |
| rsec/s | 每秒读取区段的数量 |
| wsec/s | 每秒写入区段的数量 |
| rkB/s | 每秒实际读取的大小单位为KB |
| wkB/s | 每秒实际写入的大小单位为KB |
| avgrq-sz | 需求的平均大小区段 |
| avgqu-sz | 需求的平均队列长度 |
| await | 等待I/O平均的时间milliseconds |
| svctm | I/O需求完成的平均时间 |
| %util | 被I/O需求消耗的CPU百分比 |
如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈.
idle小于70% IO压力就较大了,一般读取速度有较多的wait.同时可以结合vmstat 查看查看b参数(等待资源的进程数)和wa参数(IO等待所
占用的CPU时间的百分比,高过30%时IO压力高);另外 await 的参数也要多和 svctm 来参考.差的过高就一定有 IO 的问题.一般地系统IO
响应时间(await)应该低于5ms如果大于10ms就比较大
avgqu-sz 也是个做 IO 调优时需要注意的地方,这个就是直接每次操作的数据的大小,如果次数多,但数据拿的小的话,其实 IO 也会很小
如果数据拿的大,才IO 的数据会高.也可以通过 avgqu-sz × ( r/s or w/s ) = rsec/s or wsec/s.也就是讲,读定速度是这个来决定的
CPU属性值说明
%user CPU处在用户模式下的时间百分比
%nice CPU处在带NICE值的用户模式下的时间百分比
%systemCPU处在系统模式下的时间百分比
%iowaitCPU等待输入输出完成时间的百分比
%steal 管理程序维护另一个虚拟处理器时虚拟CPU的无意识等待时间百分比
%idle CPU空闲时间百分比

@ -2,52 +2,33 @@
## 说明
**iotop命令** 是一个用来监视磁盘I/O使用状况的top类工具。iotop具有与top相似的UI其中包括PID、用户、I/O、进程等相关信息。Linux下的IO统计工具如iostatnmon等大多数是只能统计到per设备的读写情况如果你想知道每个进程是如何使用IO的就比较麻烦使用iotop命令可以很方便的查看。
**iotop命令** 是一个用来监视磁盘I/O使用状况的top类工具。iotop具有与top相似的UI其中包括PID、用户、I/O、进程等相关信息
Linux下的IO统计工具如iostatnmon等大多数是只能统计到per设备的读写情况如果你想知道每个进程是如何使用IO的就比较麻烦
使用iotop命令可以很方便的查看
iotop使用Python语言编写而成要求Python2.5及以上版本和Linux kernel2.6.20及以上版本。iotop提供有源代码及rpm包可从其官方主页下载。
## 安装
### 安装
**Ubuntu**
```
apt-get install iotop
```
**CentOS**
```
yum install iotop
```
**编译安装**
```
```bash
apt-get install iotop # ubuntu
yum install iotop # centos
# 编译安装
wget http://guichaz.free.fr/iotop/files/iotop-0.4.4.tar.gz
tar zxf iotop-0.4.4.tar.gz
python setup.py build
python setup.py install
```
### 语法
```
iotop选项
```
## 选项
```
```markdown
-o只显示有io操作的进程
-b批量显示无交互主要用作记录到文件。
-n NUM显示NUM次主要用于非交互式模式。
-d SEC间隔SEC秒显示一次。
-p PID监控的进程pid。
-u USER监控的进程用户。
```
**iotop常用快捷键**
iotop常用快捷键
1. 左右箭头改变排序方式默认是按IO排序。
2. r改变排序顺序。
@ -55,26 +36,12 @@ iotop选项
4. p进程/线程的显示方式的切换。
5. a显示累积使用量。
6. q退出。
```
### 实例
## 实例
直接执行iotop就可以看到效果了
```bash
```
Total DISK read: 0.00 B/s | Total DISK write: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> command
1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init [3]
2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]
3 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/0]
4 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0]
5 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/0]
6 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/1]
7 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/1]
8 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/1]
9 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [events/0]
10 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [events/1]
11 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [khelper]
2572 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [bluetooth]
```

@ -1,37 +1,41 @@
ipcs
===
分析消息队列共享内存和信号量
# ipcs
## 说明
**ipcs命令** 用于报告Linux中进程间通信设施的状态显示的信息包括消息列表、共享内存和信号量的信息。
**ipcs命令**分析消息队列共享内存和信号量,用于报告Linux中进程间通信设施的状态显示的信息包括消息列表、共享内存和信号量的信息。
### 语法
## 选项
```
ipcs(选项)
```
```markdown
选项:
-i, --id <id> 打印由 id 标识的资源的详细信息
-h, --help 显示此帮助并退出
-V, --version 输出版本信息并退出
资源选项:
-m, --shmems 显示共享内存段信息
-q, --queues 显示消息队列
-s, --semaphores 显示信号量
-a, --all 全部(默认)
输出格式:
-t, --time 显示附加、脱离和更改时间
-p, --pid 显示 PID 的创建者和最后操作
-c, --creator 显示创建者和拥有者
-l, --limits 显示资源限制
-u, --summary 显示状态摘要
--human 以易读格式显示大小
-b, --bytes 以字节数显示大小
```
-a显示全部可显示的信息
-q显示活动的消息队列信息
-m显示活动的共享内存信息
-s显示活动的信号量信息。
```
### 实例
## 实例
```bash
# 查看IPC资源被谁占用假设有个IPCKEY为51036需要查询是否被占用
echo "obase=16;51036" | bc # 利用bc首先将51036十进制数字转换为16进制得到c75c
ipcs -m | grep c75c
```
ipcs -a
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x7401833d 2654208 root 600 4 0
0x00000000 3145729 root 600 4194304 9 dest
0x7401833c 2621442 root 600 4 0
0xd201012b 3080195 root 600 1720 2
```

@ -36,7 +36,7 @@ Usage: locate [OPTION]... [PATTERN]... 在mlocate数据库中搜索条目
## 实例
```sh
```bash
locate pwd # 查找和pwd相关的所有文件数据库
locate /etc/sh # 搜索etc目录下所有以sh开头的文件
locate -r 'file[^/]*\.txt' # 使用locate 查找所有符合*file*.txt的文件

@ -1,28 +1,27 @@
# **ls**
显示目录内容列表
## 说明
**ls命令** 用来显示目标列表在Linux中是使用率较高的命令。ls命令的输出信息可以进行彩色加亮显示以分区不同类型的文件
```info
```markdown
-a 显示所有档案及目录(连同隐藏档,开头为.文件一起罗列出来)
-A 显示全部文件和目录,连同隐藏文件,但不包括.和..这两个目录
-C 多列显示输出结果。这是默认选项
-l 与“-C”选项功能相反所有输出信息用单列格式输出不输出为多列
-F 在每个输出项后追加文件的类型标识符,具体含义“*”表示具有可执行权限的普通文件,“/”表示目录,“@”表示符号链接,“|”表示命令管道FIFO“=”表示sockets套接字。当文件为普通文件时不输出任何标识符
-F 在每个输出项后追加文件的类型标识符,具体含义 * 表示具有可执行权限的普通文件,“/”表示目录,“@”表示符
号链接,“|”表示命令管道FIFO“=”表示sockets套接字。当文件为普通文件时不输出任何标识符
-b 将文件中的不可输出的字符以反斜线“”加字符编码的方式输出
-c 与“-lt”选项连用时按照文件状态时间排序输出目录内容排序的依据是文件的索引节点中的ctime字段。与“-l”选项连用时则排序的一句是文件的状态改变时间
-c 与“-lt”选项连用时按照文件状态时间排序输出目录内容排序的依据是文件的索引节点中的ctime字段。与“-l”
选项连用时,则排序的一句是文件的状态改变时间
-d 仅显示目录名,而不显示目录下的内容列表。显示符号链接文件本身,而不显示其所指向的目录列表
-f 此参数的效果和同时指定“aU”参数相同并关闭“lst”参数的效果
-i 显示文件索引节点号inode。一个索引节点代表一个文件
--file-type 与“-F”选项的功能相同但是不显示“*”
-k 以KB千字节为单位显示文件大小
-h 将文件容量以人类易读的方式显示
-l 以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等
-l 以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组
、文件大小和文件的最后修改时间等
-m 用“,”号区隔每个文件和目录的名称
-n 以用户识别码和群组识别码替代其名称
-r 以文件名反序排列并输出目录内容列表
@ -34,7 +33,9 @@
--full-time 列出完整的日期与时间
--color[=WHEN] 使用不同的颜色高亮显示不同类型的
使用色彩来区分文件类型的功能已被禁用,默认设置和 --color=never 同时禁用了它。使用 --color=auto 选项ls 只在标准输出被连至终端时才生成颜色代码。LS_COLORS 环境变量可改变此设置,可使用 dircolors 命令来设置。color有效的参数为"always","yes","force","never","no","none","auto","tty","if-tty"
使用色彩来区分文件类型的功能已被禁用,默认设置和 --color=never 同时禁用了它。使用 --color=auto 选项ls 只在标准输出被连
至终端时才生成颜色代码。LS_COLORS 环境变量可改变此设置,可使用 dircolors 命令来设置。color有效的参数为
"always","yes","force","never","no","none","auto","tty","if-tty"
退出状态:
0 正常
@ -49,11 +50,14 @@
## 实例
```sh
```bash
ls -lrt # 列出当前目录可见文件详细信息并以时间倒序排列
ls -hl # 列出详细信息并以可读大小显示文件大小
ls -al # 列出所有文件(包括隐藏)的详细信息
ls ??R* # 列出任意两个字符开始,接着跟R,后面任何字符的文件
ls log.[0-9]* # 匹配log+任何数字+任意字符的文件
ls /usr/bin | pr -T9 -W$COLUMNS # 在当前终端宽度上以9列打印输出
for i in `ls *test.log`;do mv $i `echo ${i//test/}`;done # 批量将*test.log文件重命名去掉test字符
ls -lrt | awk '{print $9}'|xargs file|grep ELF| awk '{print $1}'|tr -d ':' # 查找当前目录所有二进制文件
```

@ -2,9 +2,13 @@
## 说明
**lsof命令** 用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。是十分方便的系统监视工具因为lsof命令需要访问核心内存和各种文件所以需要root用户执行
**lsof命令** 用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。是十分方便的系统监
视工具因为lsof命令需要访问核心内存和各种文件所以需要root用户执行
在linux环境下任何事物都以文件的形式存在通过文件不仅仅可以访问常规数据还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等系统在后台都为该应用程序分配了一个文件描述符无论这个文件的本质如何该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的
在linux环境下任何事物都以文件的形式存在通过文件不仅仅可以访问常规数据还可以访问网络连接和硬件。所以如传输控制协议
(TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描
述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信
因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的
```markdown
-a列出打开文件存在的进程
@ -53,7 +57,7 @@ Anyone can list all files; /dev warnings disabled; kernel ID check disabled.
```
## 实例
## 详解
lsof输出各列信息的意义如下:
@ -117,3 +121,10 @@ lsof输出各列信息的意义如下:
* SIZE文件的大小
* NODE索引节点文件在磁盘上的标识
* NAME打开文件的确切名称
## 实例
```bash
lsof -i # 列出所有的网络连接或端口
```

@ -15,7 +15,7 @@
## **pvcreate**
```info
```markdown
pvcreate PV ...
[ -f|--force ] 强制创建物理卷,不需要用户确认
[ -M|--metadatatype lvm2|lvm1 ]
@ -59,7 +59,7 @@ pvcreate /dev/hda{6,7,8,9} # 在/dev/hda6-9分区创建pv
## **pvscan命令**
```info
```markdown
列出所有的物理卷
Display PV information.
@ -102,39 +102,28 @@ Display PV information.
```
### 实例
使用pvscan命令扫描当前系统中所有硬盘的物理卷在命令行中输入下面的命令
```
[root@localhost ~]# pvscan #扫描所有硬盘上的物理卷
```
输出信息如下:
## 实例
```bash
pvscan # 扫描所有硬盘上的物理卷
```
PV /dev/sdb1 lvm2 [101.94 MB]
PV /dev/sdb2 lvm2 [101.98 MB]
Total: 2 [203.92 MB] / in use: 0 [0 ] / in no VG: 2 [203.92
MB]
```
说明:本例中,输出了两个物理卷,它们不属于任何卷组,是可被利用的物理卷。
**pvdisplay命令** 用于显示物理卷的属性。pvdisplay命令显示的物理卷信息包括物理卷名称、所属的卷组、物理卷大小、PE大小、总PE数、可用PE数、已分配的PE数和UUID。
## **pvdisplay命令**
用于显示物理卷的属性。pvdisplay命令显示的物理卷信息包括物理卷名称、所属的卷组、物理卷大小、PE大小、总PE数、可用PE数、
已分配的PE数和UUID
```info
-s 以短格式输出
-m 显示PE到LE的映射
```markdown
-s 以短格式输出
-m 显示PE到LE的映射
```
## LVM(逻辑卷管理)
```sh
```markdown
概念介绍:
LVM logical volume Manager逻辑卷管理通过将底层物理硬盘抽象封装起来以逻辑卷的形式表现给上层系统逻辑卷的大小可以动态调整的而且不会丢失数据。新加入的硬盘也不会改变现有上层的逻辑卷
LVM logical volume Manager逻辑卷管理通过将底层物理硬盘抽象封装起来以逻辑卷的形式表现给上层系统逻辑卷的大小可以动
态调整的而且不会丢失数据。新加入的硬盘也不会改变现有上层的逻辑卷
LVM特点
1.作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性;
@ -152,7 +141,6 @@ LVM原理解析
3.LV基于PE创建大小为PE的整数倍组成LV的PE可能来自不同物理磁盘
4.LV格式化完成后挂载就可以使用了
5.LV的扩充缩减实际上就是增加了或者减少了组成该LV的PE的数量。其过程不会丢失数据信息
```
FAQ:(Frequently Asked Question)
1.LV的大小应该由PE大小和PE数量决定;默认PE为4M大小的情况下一个逻辑卷最大可以支持256G
@ -160,6 +148,7 @@ FAQ:(Frequently Asked Question)
3.PE的大小最终影响 逻辑卷的最大大小逻辑卷的大小一定是PE的整数倍
5.一个逻辑卷只能属于一个卷组
6.执行lvm操作时先前的meta元数据都保存在/etc/lvm/archive目录用vgcfgrestore可进行恢复操作
```
## LVM拉伸逻辑卷

@ -1,47 +1,38 @@
mkdir
===
用来创建目录
# **mkdir**
## 说明
**mkdir命令** 用来创建目录。该命令创建由dirname命名的目录。如果在目录名的前面没有加任何路径名则在当前目录下创建由dirname指定的目录如果给出了一个已经存在的路径将会在该目录下创建一个指定的目录。在创建目录时应保证新建的目录与它所在目录下的文件没有重名。 
注意:在创建文件时,不要把所有的文件都存放在主目录中,可以创建子目录,通过它们来更有效地组织文件。最好采用前后一致的命名方式来区分文件和目录。例如,目录名可以以大写字母开头,这样,在目录列表中目录名就出现在前面。
**mkdir命令** 用来创建目录。该命令创建由dirname命名的目录。如果在目录名的前面没有加任何路径名则在当前目录下创建由dirna
me指定的目录如果给出了一个已经存在的路径将会在该目录下创建一个指定的目录。在创建目录时应保证新建的目录与它所在目录
下的文件没有重名
在一个子目录中应包含类型相似或用途相近的文件。例如,应建立一个子目录,它包含所有的数据库文件,另有一个子目录应包含电子表格文件,还有一个子目录应包含文字处理文档,等等。目录也是文件,它们和普通文件一样遵循相同的命名规则,并且利用全路径可以唯一地指定一个目录。
注意:在创建文件时,不要把所有的文件都存放在主目录中,可以创建子目录,通过它们来更有效地组织文件。最好采用前后一致的命名
方式来区分文件和目录。例如,目录名可以以大写字母开头,这样,在目录列表中目录名就出现在前面
### 语法
在一个子目录中应包含类型相似或用途相近的文件。例如,应建立一个子目录,它包含所有的数据库文件,另有一个子目录应包含电子表
格文件,还有一个子目录应包含文字处理文档,等等。目录也是文件,它们和普通文件一样遵循相同的命名规则,并且利用全路径可以唯
一地指定一个目录
```
mkdir (选项)(参数)
```
## 选项
```markdown
用法mkdir [选项]... 目录...
Create the DIRECTORY(ies), if they do not already exist.
Mandatory arguments to long options are mandatory for short options too.
-m, --mode=MODE 建立目录的同时设置权限
-p, --parents 若所建立目录的上层目录尚未建立,则一并创建上层目录
-v, --verbose print a message for each created directory
-Z 设置安全上下文当使用SELinux时生效
--context[=CTX] like -Z, or if CTX is specified then set the SELinux or SMACK security context to CTX
# 多个目录要用空格隔开
```
-Z设置安全上下文当使用SELinux时有效
-m<目标属性>或--mode<目标属性>建立目录的同时设置目录的权限;
-p或--parents 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录;
--version 显示版本信息。
```
### 参数
目录:指定要创建的目录列表,多个目录之间用空格隔开。
### 实例
## 实例
在目录`/usr/meng`下建立子目录test并且只有文件主有读、写和执行权限其他人无权访问
```bash
mkdir -m 700 /usr/meng/test # 在目录`/usr/meng`下建立子目录test并且只有文件主有读、写和执行权限其他人无权访问
mkdir -p-m 750 bin/os_1 # 在当前目录中建立bin和bin下的os_1目录权限设置为文件主可读、写、执行同组用户可读和执行其他用户无权访问
```
mkdir -m 700 /usr/meng/test
```
在当前目录中建立bin和bin下的os_1目录权限设置为文件主可读、写、执行同组用户可读和执行其他用户无权访问
```
mkdir -p-m 750 bin/os_1
```

@ -1,26 +1,17 @@
mount
===
用于挂载Linux系统外的文件。
# **mount**
## 说明
**mount命令** Linux mount命令是经常会使用到的命令它用于挂载Linux系统外的文件。
### 语法
## 选项
```
```markdown
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 档案系统时可以加快挂上的动作。
@ -46,12 +37,13 @@ mount [-fnrsvw] [-t vfstype] [-o options] device dir
-o loop=:使用 loop 模式用来将一个档案当成硬盘分割挂上系统。
```
### 实例
## 实例
```bash
`/dev/hda1` 挂在 `/mnt` 之下。
```
#mount /dev/hda1 /mnt
mount | column -t # 以表格形式输出
```
`/dev/hda1` 用唯读模式挂在 `/mnt` 之下。

@ -1,30 +1,26 @@
mv
===
用来对文件或目录重新命名
# **mv**
## 说明
**mv命令** 用来对文件或目录重新命名或者将文件从一个目录移到另一个目录中。source表示源文件或目录target表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中则目标文件的内容将被覆盖。
**mv命令** 用来对文件或目录重新命名或者将文件从一个目录移到另一个目录中。source表示源文件或目录target表示目标文件或
目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖
mv命令可以用来将源文件移至一个目标文件中或将一组文件移至一个目标目录中。源文件被移至目标文件有两种不同的结果
1. 如果目标文件是到某一目录文件的路径,源文件会被移到此目录下,且文件名不变。
2. 如果目标文件不是目录文件则源文件名只能有一个会变为此目标文件名并覆盖己存在的同名文件。如果源文件和目标文件在同一个目录下mv的作用就是改文件名。当目标文件是目录文件时源文件或目录参数可以有多个则所有的源文件都会被移至目标文件中。所有移到该目录下的文件都将保留以前的文件名。
2. 如果目标文件不是目录文件,则源文件名(只能有一个)会变为此目标文件名,并覆盖己存在的同名文件。如果源文件和目标文件在
同一个目录下mv的作用就是改文件名。当目标文件是目录文件时源文件或目录参数可以有多个则所有的源文件都会被移至目标文件
中。所有移到该目录下的文件都将保留以前的文件名
注意事项mv与cp的结果不同mv好像文件“搬家”文件个数并未增加。而cp对文件进行复制文件个数增加了。
注意事项mv与cp的结果不同mv好像文件"搬家"文件个数并未增加。而cp对文件进行复制文件个数增加了
### 语法
## 选项
```
```markdown
用法mv [选项]... [-T] 源文件 目标文件
 mv [选项]... 源文件... 目录
 mv [选项]... -t 目录 源文件...
```
```
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
必选参数对长短选项同时适用。
--backup[=CONTROL] 为每个已存在的目标文件创建备份
-b 类似--backup 但不接受参数,当文件存在时,覆盖前,为其创建一个备份
@ -53,23 +49,10 @@ the VERSION_CONTROL environment variable. Here are the values:
simple, never 永远使用普通方式备份
```
### 参数
* 源文件:源文件列表。
* 目标文件:如果“目标文件”是文件名则在移动文件的同时,将其改名为“目标文件”;如果“目标文件”是目录名则将源文件移动到“目标文件”下。
## 实例
### 实例
```bash
将文件ex3改名为new1
```
mv ex3 new1
```
将目录`/usr/men`中的所有文件移到当前目录(用`.`表示)中:
```
mv /usr/men/* .
```

@ -1,265 +0,0 @@
# **mysql**
## 用法
```sh
Usage: mysql [OPTIONS] [database]
-?, --help Display this help and exit.
-I, --help Synonym for -?
--auto-rehash Enable automatic rehashing. One doesn't need to use
'rehash' to get table and field completion, but startup
and reconnecting may take a longer time. Disable with
--disable-auto-rehash.
(Defaults to on; use --skip-auto-rehash to disable.)
-A, --no-auto-rehash
No automatic rehashing. One has to use 'rehash' to get
table and field completion. This gives a quicker start of
mysql and disables rehashing on reconnect.
--auto-vertical-output
Automatically switch to vertical output mode if the
result is wider than the terminal width.
-B, --batch Don't use history file. Disable interactive behavior.
(Enables --silent.)
--bind-address=name IP address to bind to.
--binary-as-hex Print binary data as hex
--character-sets-dir=name
Directory for character set files.
--column-type-info Display column type information.
-c, --comments Preserve comments. Send comments to the server. The
default is --skip-comments (discard comments), enable
with --comments.
-C, --compress Use compression in server/client protocol.
-#, --debug[=#] This is a non-debug version. Catch this and exit.
--debug-check This is a non-debug version. Catch this and exit.
-T, --debug-info This is a non-debug version. Catch this and exit.
-D, --database=name Database to use.
--default-character-set=name
Set the default character set.
--delimiter=name Delimiter to be used.
--enable-cleartext-plugin
Enable/disable the clear text authentication plugin.
-e, --execute=name Execute command and quit. (Disables --force and history
file.)
-E, --vertical Print the output of a query (rows) vertically.
-f, --force Continue even if we get an SQL error.
--histignore=name A colon-separated list of patterns to keep statements
from getting logged into syslog and mysql history.
-G, --named-commands
Enable named commands. Named commands mean this program's
internal commands; see mysql> help . When enabled, the
named commands can be used from any line of the query,
otherwise only from the first line, before an enter.
Disable with --disable-named-commands. This option is
disabled by default.
-i, --ignore-spaces Ignore space after function names.
--init-command=name SQL Command to execute when connecting to MySQL server.
Will automatically be re-executed when reconnecting.
--local-infile Enable/disable LOAD DATA LOCAL INFILE.
-b, --no-beep Turn off beep on error.
-h, --host=name Connect to host.
-H, --html Produce HTML output.
-X, --xml Produce XML output.
--line-numbers Write line numbers for errors.
(Defaults to on; use --skip-line-numbers to disable.)
-L, --skip-line-numbers
Don't write line number for errors.
-n, --unbuffered Flush buffer after each query.
--column-names Write column names in results.
(Defaults to on; use --skip-column-names to disable.)
-N, --skip-column-names
Don't write column names in results.
--sigint-ignore Ignore SIGINT (CTRL-C).
-o, --one-database Ignore statements except those that occur while the
default database is the one named at the command line.
--pager[=name] Pager to use to display results. If you don't supply an
option, the default pager is taken from your ENV variable
PAGER. Valid pagers are less, more, cat [> filename],
etc. See interactive help (\h) also. This option does not
work in batch mode. Disable with --disable-pager. This
option is disabled by default.
-p, --password[=name]
Password to use when connecting to server. If password is
not given it's asked from the tty.
-P, --port=# Port number to use for connection or 0 for default to, in
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/services, built-in default (3306).
--prompt=name Set the mysql prompt to this value.
--protocol=name The protocol to use for connection (tcp, socket, pipe,
memory).
-q, --quick Don't cache result, print it row by row. This may slow
down the server if the output is suspended. Doesn't use
history file.
-r, --raw Write fields without conversion. Used with --batch.
--reconnect Reconnect if the connection is lost. Disable with
--disable-reconnect. This option is enabled by default.
(Defaults to on; use --skip-reconnect to disable.)
-s, --silent Be more silent. Print results with a tab as separator,
each row on new line.
-S, --socket=name The socket file to use for connection.
--ssl-mode=name SSL connection mode.
--ssl Deprecated. Use --ssl-mode instead.
(Defaults to on; use --skip-ssl to disable.)
--ssl-verify-server-cert
Deprecated. Use --ssl-mode=VERIFY_IDENTITY instead.
--ssl-ca=name CA file in PEM format.
--ssl-capath=name CA directory.
--ssl-cert=name X509 cert in PEM format.
--ssl-cipher=name SSL cipher to use.
--ssl-key=name X509 key in PEM format.
--ssl-crl=name Certificate revocation list.
--ssl-crlpath=name Certificate revocation list path.
--tls-version=name TLS version to use, permitted values are: TLSv1, TLSv1.1
-t, --table Output in table format.
--tee=name Append everything into outfile. See interactive help (\h)
also. Does not work in batch mode. Disable with
--disable-tee. This option is disabled by default.
-u, --user=name User for login if not current user.
-U, --safe-updates Only allow UPDATE and DELETE that uses keys.
-U, --i-am-a-dummy Synonym for option --safe-updates, -U.
-v, --verbose Write more. (-v -v -v gives the table output format).
-V, --version Output version information and exit.
-w, --wait Wait and retry if connection is down.
--connect-timeout=# Number of seconds before connection timeout.
--max-allowed-packet=#
The maximum packet length to send to or receive from
server.
--net-buffer-length=#
The buffer size for TCP/IP and socket communication.
--select-limit=# Automatic limit for SELECT when using --safe-updates.
--max-join-size=# Automatic limit for rows in a join when using
--safe-updates.
--secure-auth Refuse client connecting to server if it uses old
(pre-4.1.1) protocol. Deprecated. Always TRUE
--server-arg=name Send embedded server this as a parameter.
--show-warnings Show warnings after every statement.
-j, --syslog Log filtered interactive commands to syslog. Filtering of
commands depends on the patterns supplied via histignore
option besides the default patterns.
--plugin-dir=name Directory for client-side plugins.
--default-auth=name Default authentication client-side plugin to use.
--binary-mode By default, ASCII '\0' is disallowed and '\r\n' is
translated to '\n'. This switch turns off both features,
and also turns off parsing of all clientcommands except
\C and DELIMITER, in non-interactive mode (for input
piped to mysql or loaded using the 'source' command).
This is necessary when processing output from mysqlbinlog
that may contain blobs.
--connect-expired-password
Notify the server that this client is prepared to handle
expired password sandbox mode.
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
The following groups are read: mysql client
The following options may be given as the first argument:
--print-defaults Print the program argument list and exit.
--no-defaults Don't read default options from any option file,
except for login file.
--defaults-file=# Only read default options from the given file #.
--defaults-extra-file=# Read this file after the global files are read.
--defaults-group-suffix=#
Also read groups with concat(group, suffix)
--login-path=# Read this path from the login file.
Variables (--variable-name=value)
and boolean options {FALSE|TRUE} Value (after reading options)
--------------------------------- ----------------------------------------
auto-rehash FALSE
auto-vertical-output FALSE
bind-address (No default value)
binary-as-hex FALSE
character-sets-dir (No default value)
column-type-info FALSE
comments FALSE
compress FALSE
database (No default value)
default-character-set utf8
delimiter ;
enable-cleartext-plugin FALSE
vertical FALSE
force FALSE
histignore (No default value)
named-commands FALSE
ignore-spaces FALSE
init-command (No default value)
local-infile FALSE
no-beep FALSE
host (No default value)
html FALSE
xml FALSE
line-numbers TRUE
unbuffered FALSE
column-names TRUE
sigint-ignore FALSE
port 3306
prompt mysql>
quick FALSE
raw FALSE
reconnect TRUE
socket /var/run/mysqld/mysqld.sock
ssl TRUE
ssl-verify-server-cert FALSE
ssl-ca (No default value)
ssl-capath (No default value)
ssl-cert (No default value)
ssl-cipher (No default value)
ssl-key (No default value)
ssl-crl (No default value)
ssl-crlpath (No default value)
tls-version (No default value)
table FALSE
user (No default value)
safe-updates FALSE
i-am-a-dummy FALSE
connect-timeout 0
max-allowed-packet 16777216
net-buffer-length 16384
select-limit 1000
max-join-size 1000000
secure-auth TRUE
show-warnings FALSE
plugin-dir (No default value)
default-auth (No default value)
binary-mode FALSE
connect-expired-password FALSE
```
## 安装mysql
### centos
```sh
yum安装
https://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-5.6.38-1.el6.src.rpm
rpm -ivh https://dev.mysql.com/get/mysql57-community-release-el6-11.noarch.rpm
yum localinstall platform-and-version-specific-package-name.rpm # 例如mysql57-community-release-el6-11.noarch.rpm
yum install -y mysql-community-server
MySQL 5.7.6 and later:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
MySQL 5.7.5 and earlier:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
防火墙的3306端口默认没有开启若要远程访问需要开启这个端口
打开/etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
mysql -u root -p xxxx -h 127.0.0.1
ALTER USER USER() IDENTIFIED BY '123456';
flush privileges
从任何主机上使用root用户密码youpassword你的root密码连接到mysql服务器
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'youpassword' WITH GRANT OPTION;
```
## 升级和降级mysql
```sh
```
## 其他记录

@ -1,51 +0,0 @@
mysqladmin
===
MySQL服务器管理客户端
## 说明
**mysqladmin命令** 是mysql服务器管理任务的客户端工具它可以检查mytsql服务器的配置和当前工作状态创建和删除数据库创建用户和修改用户密码等操作。
### 语法
```
mysqladmin(选项)(参数)
```
```
-hMySQL服务器主机名或ip地址
-u连接MySQL服务器的用户名
-p连接MySQL服务器的密码
--help显示帮助信息。
```
### 参数
管理命令需要在MySQL服务器上执行的管理命令。
**mysqladmin支持下列命令**
```
create databasename创建一个新数据库
drop databasename删除一个数据库及其所有表
extended-status给出服务器的一个扩展状态消息
flush-hosts清空所有缓存的主机
flush-logs清空所有日志
flush-tables清空所有表
flush-privileges再次装载授权表(同reload)
kill id,id,...杀死mysql线程
password 新口令:将老密码改为新密码;
ping检查mysqld是否活着
processlist显示服务其中活跃线程列表
reload重载授权表
refresh清空所有表并关闭和打开日志文件
shutdown关掉服务器
status给出服务器的简短状态消息
variables打印出可用变量
version得到服务器的版本信息。
```

@ -1,61 +0,0 @@
mysqldump
===
MySQL数据库中备份工具
## 说明
**mysqldump命令** 是mysql数据库中备份工具用于将MySQL服务器中的数据库以标准的sql语言的方式导出并保存到文件中。
### 语法
```
mysqldump(选项)
```
```
--add-drop-table在每个创建数据库表语句前添加删除数据库表的语句
--add-locks备份数据库表时锁定数据库表
--all-databases备份MySQL服务器上的所有数据库
--comments添加注释信息
--compact压缩模式产生更少的输出
--complete-insert输出完成的插入语句
--databases指定要备份的数据库
--default-character-set指定默认字符集
--force当出现错误时仍然继续备份操作
--host指定要备份数据库的服务器
--lock-tables备份前锁定所有数据库表
--no-create-db禁止生成创建数据库语句
--no-create-info禁止生成创建数据库库表语句
--password连接MySQL服务器的密码
--portMySQL服务器的端口号
--user连接MySQL服务器的用户名。
```
### 实例
**导出整个数据库**
```
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
mysqldump -u linuxde -p smgp_apps_linuxde > linuxde.sql
```
**导出一个表**
```
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u linuxde -p smgp_apps_linuxde users > linuxde_users.sql
```
**导出一个数据库结构**
```
mysqldump -u linuxde -p -d --add-drop-table smgp_apps_linuxde > linuxde_db.sql
```
`-d`没有数据,`--add-drop-tabl`e每个create语句之前增加一个`drop table`

@ -1,31 +0,0 @@
mysqlimport
===
为MySQL服务器用命令行方式导入数据
## 说明
**mysqlimport命令** 为mysql数据库服务器提供了一种命令行方式导入数据工具它从特定格式的文本文件中读取数据插入MySQL数据库表中。
### 语法
```
mysqlimport(选项)(参数)
```
```
-D导入数据前清空表
-f出现错误时继续处理剩余的操作
-hMySQL服务器的ip地址或主机名
-u连接MySQL服务器的用户名
-p连接MySQL服务器的密码。
```
### 参数
* 数据库名:指定要导入的数据库名称;
* 文本文件:包含特定格式文本文件。

@ -1,32 +0,0 @@
mysqlshow
===
显示MySQL中数据库相关信息
## 说明
**mysqlshow命令** 用于显示mysql服务器中数据库、表和列表信息。
### 语法
```
mysqlshow(选项)(参数)
```
```
-hMySQL服务器的ip地址或主机名
-u连接MySQL服务器的用户名
-p连接MySQL服务器的密码
--count显示每个数据表中数据的行数
-k显示数据表的索引
-t显示数据表的类型
-i显示数据表的额外信息。
```
### 参数
数据库信息:指定要显示的数据库信息,可以是一个数据库名,或者是数据库名和表名,或者是数据库名、表名和列名。

@ -1,356 +0,0 @@
# **netstat**
## 说明
**netstat命令** 用来打印Linux中网络系统的状态信息可让你得知整个Linux系统的网络情况。
```sh
-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"参数相同。
usage: netstat [-vWeenNcCF] [<Af>] -r netstat {-V|--version|-h|--help}
netstat [-vWnNcaeol] [<Socket> ...]
netstat { [-vWeenNac] -I[<Iface>] | [-veenNac] -i | [-cnNe] -M | -s [-6tuw] } [delay]
-r, --route display routing table
-I, --interfaces=<Iface> display interface table for <Iface>
-i, --interfaces display interface table
-g, --groups display multicast group memberships
-s, --statistics display networking statistics (like SNMP)
-M, --masquerade display masqueraded connections
-v, --verbose be verbose
-W, --wide don't truncate IP addresses
-n, --numeric don't resolve names
--numeric-hosts don't resolve host names
--numeric-ports don't resolve port names
--numeric-users don't resolve user names
-N, --symbolic resolve hardware names
-e, --extend display other/more information
-p, --programs display PID/Program name for sockets
-o, --timers display timers
-c, --continuous continuous listing
-l, --listening display listening server sockets
-a, --all display all sockets (default: connected)
-F, --fib display Forwarding Information Base (default)
-C, --cache display routing cache instead of FIB
-Z, --context display SELinux security context for sockets
```
### 实例
#### 列出所有端口 (包括监听和未监听的)
```sh
netstat -a #列出所有端口
netstat -at #列出所有tcp端口
netstat -au #列出所有udp端口
netstat -ng #查看组播情况
```
#### 列出所有处于监听状态的 Sockets
```sh
netstat -l #只显示监听端口
netstat -lt #只列出所有监听 tcp 端口
netstat -lu #只列出所有监听 udp 端口
netstat -lx #只列出所有监听 UNIX 端口
```
#### 显示每个协议的统计信息
```sh
netstat -s 显示所有端口的统计信息
netstat -st 显示TCP端口的统计信息
netstat -su 显示UDP端口的统计信息
```
#### 在netstat输出中显示 PID 和进程名称
```sh
netstat -pt
```
`netstat -p`可以与其它开关一起使用就可以添加“PID/进程名称”到netstat输出中这样debugging的时候可以很方便的发现特定端口运行的程序。
#### 在netstat输出中不显示主机端口和用户名(host, port or user)
当你不想让主机,端口和用户名显示,使用`netstat -n`。将会使用数字代替那些名称。同样可以加速输出,因为不用进行比对查询。
```sh
netstat -an
```
如果只是不想让这三个名称中的一个被显示,使用以下命令:
```sh
netsat -a --numeric-ports
netsat -a --numeric-hosts
netsat -a --numeric-users
```
#### 持续输出netstat信息
```sh
netstat -c #每隔一秒输出网络信息
```
#### 显示系统不支持的地址族(Address Families)
```sh
netstat --verbose
```
在输出的末尾,会有如下的信息:
```sh
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.
```
#### 显示核心路由信息
```sh
netstat -r
```
使用`netstat -rn`显示数字格式,不查询主机名称。
#### 找出程序运行的端口
并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。
```sh
netstat -ap | grep ssh
```
找出运行在指定端口的进程:
```sh
netstat -an | grep ':80'
```
#### 显示网络接口列表
```sh
netstat -i
```
显示详细信息像是ifconfig使用`netstat -ie`。
#### IP和TCP分析
查看连接某服务端口最多的的IP地址
```sh
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各种状态列表
```sh
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进程数如果接近预设值说明不够用需要增加
```sh
netstat -anpo | grep "php-cgi" | wc -l
```
获取连接数的命令
```sh
netstat -n |awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
```
| 命令拆分 | 详解 |
| ----- | ---- |
| /^tcp/ | 过滤出以tcp开头的行“^”为正则表达式用法,以...开头这里是过滤出以tcp开头的行。 |
| S[] | 定义了一个名叫S的数组在awk中数组下标通常从 1 开始而不是 0。 |
| NF | 当前记录里域个数默认以空格分隔如上所示的记录NF域个数等于6 |
| $NF | 表示一行的最后一个域的值,如上所示的记录,$NF也就是$6表示第6个字段的值也就是SYN_RECV或TIME_WAIT等。 |
| S[$NF] | 表示数组元素的值如上所示的记录就是S[TIME_WAIT]状态的连接数 |
| ++S[$NF] | 表示把某个数加一如上所示的记录就是把S[TIME_WAIT]状态的连接数加一 |
| END | 结束 |
| forkey in S | 遍历S[]数组 |
| print key,”\t”,S[key] | 打印数组的键和值,中间用\t制表符分割显示好一些。 |
统计服务器当前单IP连接数最大的IP地址前十
```sh
netstat -an|awk-F '[ :]+' '{++S[$6]} END {for (a in S) print a ,S[a]}'|sort -rn -k2
netstat -an|grep EST|awk-F '[ :]+' '{++S[$6]} END {for (key in S) print "ip:"key"----->",S[key]}'|sort -rn -k2
```
tcp连接状态的描述说明(netstat输出)
```sh
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local AddressForeign AddressState
Proto
The protocol (tcp, udp, raw) used by the socket.
第一列为socket使用的协议。
Recv-Q
The count of bytes not copied by the user program connected to this socket.
第二列为接到的但是还没处理的字节数。
Send-Q
The count of bytes not acknowledged by the remote host.
第三列为已经发送的但是没有被远程主机确认收到的字节数。
Local Address
Address and port number of the local end of the socket.Unless the --numeric(-n)
optionisspecified,thesocketaddress is resolved to its canonical host name
(FQDN), and the port number is translated into the corresponding service name.
第四列为 本地的地址及端口。
Foreign Address
Address and port number of the remote endofthesocket.Analogousto"Local Address."
第五列为外部的地址及端口。
State
Thestateofthesocket.Sincethere are no states in raw mode and usually no
states used in UDP, this column may be left blank. Normally this can be one of sev-
eral values:
第六列为socket的状态通常仅仅有tcp的状态状态值可能有ESTABLISHEDSYN_SENTSYN_RECV FIN_WAIT1FIN_WAIT2TIME_WAIT等详见下文。其中最重要的是第六列。
```
netstat第六列State的状态信息
```sh
State
Thestateofthesocket.Sincethere are no states in raw mode and usually no
states used in UDP, this column may be left blank. Normally this can be one of sev-
eral values:
第六列为socket的状态通常仅仅有tcp的状态状态值可能有ESTABLISHEDSYN_SENTSYN_RECV FIN_WAIT1FIN_WAIT2TIME_WAIT等详见下文。其中最重要的是第六列。
ESTABLISHED
The socket has an established connection.
socket已经建立连接表示处于连接的状态一般认为有一个ESTABLISHED认为是一个服务的并发连接。这个连接状态在生产场景很重要要重点关注。
SYN_SENT
The socket is actively attempting to establish a connection.
socket正在积极尝试建立一个连接即处于发送后连接前的一个等待但未匹配进入连接的状态。
SYN_RECV
A connection request has been received from the network.
已经从网络上收到一个连接请求。
FIN_WAIT1
The socket is closed, and the connection is shutting down.
socket已关闭连接正在或正要关闭。
FIN_WAIT2
Connectionisclosed,andthesocket is waiting for a shutdown from the remote end.
连接已关闭并且socket正在等待远端结束。
TIME_WAIT
The socket is waiting after close to handle packets still in the network.
socket正在等待关闭处理仍在网络上的数据包这个连接状态在生产场景很重要要重点关注。
CLOSED The socket is not being used.| socket不在被占用了。
CLOSE_WAIT
The remote end has shutdown, waiting for the socket to close.
远端已经结束等待socket关闭。
LAST_ACK
The remote end has shut down, and the socket is closed. Waiting for acknowl-edgement.|
远端已经结束并且socket也已关闭等待acknowl-edgement。
LISTEN Thesocketislisteningforincoming connections.Such sockets are not
included in the output unless you specify the --listening (-l) or --all (-a)
option.
socket正在监听连接请求。
CLOSING
Both sockets are shut down but we still dont have all our data sent.
sockets关闭但是我们仍旧没有发送数据。
UNKNOWN
The state of the socket is unknown
未知的状态。
```

@ -1,29 +1,52 @@
nm
===
显示二进制目标文件的符号表
# nm
## 说明
**nm命令** 被用于显示二进制目标文件的符号表。
### 语法
**nm命令** 被用于显示二进制目标文件的符号表
## 选项
```markdown
用法nm [选项] [文件]
列举 [文件] 中的符号 (默认为 a.out)
-a, --debug-syms Display debugger-only symbols
-A, --print-file-name 在每个符号之前打印输入文件的名称
-B Same as --format=bsd
-C, --demangle[=STYLE] Decode low-level symbol names into user-level names
The STYLE, if specified, can be `auto' (the default),
`gnu', `lucid', `arm', `hp', `edg', `gnu-v3', `java'
or `gnat'
--no-demangle Do not demangle low-level symbol names
-D, --dynamic 显示动态符号
--defined-only Display only defined symbols
-e (ignored)
-f, --format=FORMAT Use the output format FORMAT. FORMAT can be `bsd',
`sysv' or `posix'. The default is `bsd'
-g, --extern-only 只显示外部符号
-l, --line-numbers Use debugging information to find a filename and
line number for each symbol
-n, --numeric-sort Sort symbols numerically by address
-o Same as -A
-p, --no-sort Do not sort the symbols
-P, --portability Same as --format=posix
-r, --reverse-sort 反序显示符号表
--plugin NAME Load the specified plugin
-S, --print-size Print size of defined symbols
-s, --print-armap Include index for symbols from archive members
--size-sort Sort symbols by size
--special-syms Include special symbols in the output
--synthetic Display synthetic symbols as well
-t, --radix=RADIX Use RADIX for printing symbol values
--target=BFDNAME Specify the target object format as BFDNAME
-u, --undefined-only Display only undefined symbols
-X 32_64 (ignored)
@FILE Read options from FILE
nm支持的目标 elf64-x86-64 elf32-i386 elf32-iamcu 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
```
nm(选项)(参数)
```
```
-A每个符号前显示文件名
-D显示动态符号
-g仅显示外部符号
-r反序显示符号表。
```
### 参数
目标文件:二进制目标文件,通常是库文件和可执行文件。
## 实例

@ -1,7 +1,4 @@
ntpdate
===
使用网络计时协议NTP设置日期和时间
# **ntpdate**
## 说明
@ -12,106 +9,28 @@ ntpdate
* 如果它确定时钟偏差超过 0.5 秒,它通过调用 settimeofday 子例程设置时钟时间。在引导时间,这是一个首选的方法。
* 如 果它确定时钟偏差小于 0.5 秒,它通过调用 adjtime 子例程和偏移量来调整时钟时间。此方法倾向于用牺牲一些稳定性来保持漂移时钟更加准确。 当不是通过运行一个守护程序而是从 cron 命令有规则的运行ntpdate 命令时,每一小时或两小时执行一次可以保证足够的走时精度,从而避免调整时钟。
使用很多服务器可以大幅度改善 ntpdate 命令的可靠性与精度。尽管能使用单一服务器,但您能通过提供至少三个或四个服务器以获得更好的性能
使用很多服务器可以大幅度改善 ntpdate 命令的可靠性与精度。尽管能使用单一服务器,但您能通过提供至少三个或四个服务器以获得更好的性能
如果一个类似 xntpd 守护程序的 NTP 服务器守护程序正在同一主机上运行命令将拒绝ntpdate 设置日期
如果一个类似 xntpd 守护程序的 NTP 服务器守护程序正在同一主机上运行命令将拒绝ntpdate 设置日期
你必须有 root 权限才能在主机上运行这个命令
你必须有 root 权限才能在主机上运行这个命令
### 语法
## 选项
```bash
ntpdate [ -b] [ -d] [ -s] [ -u] [ -aKeyid] [ -eAuthenticationDelay] [ -kKeyFile] [ -oVersion] [ -pSamples] [ -tTimeOut] Server
```
ntpdate [ -b] [ -d] [ -s] [ -u] [ -aKeyid] [ -eAuthenticationDelay] [ -kKeyFile] [ -oVersion] [ -pSamples] [ -tTimeOut] Server...
```
<table>
<tbody>
<tr>
<td>-aKeyid</td>
<td>使用 Keyid 来认证全部数据包。</td>
</tr>
<tr>
<td>-b</td>
<td>通过调用 settimeofday 子例程来增加时钟的时间。</td>
</tr>
<tr>
<td>-d</td>
<td>指定调试方式。判断 ntpdate 命令会产生什么结果(不产生实际的结果)。结果再现在屏幕上。这个标志使用无特权的端口。</td>
</tr>
<tr>
<td>-eAuthenticationDelay</td>
<td>指定延迟认证处理的时间秒数。</td>
</tr>
<tr>
<td>-kKeyFile</td>
<td>当不使用缺省值 /etc/ntp.keys 文件时,为包含密钥的文件指定一个不同的名称。 请参阅文件KeyFile的描述。</td>
</tr>
<tr>
<td>-oVersion</td>
<td>当轮询它的发出数据包时,指定使用的 NTP 版本实现。 Version 的值可以是 123。缺省值是 3。</td>
</tr>
<tr>
<td>-pSamples</td>
<td>指定从每个服务器获取的样本的数目。 Samples 的值在 1 和 8 之间,并包括 1 和 8。它的缺省值是 4。</td>
</tr>
<tr>
<td>-s</td>
<td>指定日志操作 syslog 设施的使用,而不是使用标准输出。 当运行 ntpdate 命令和 cron命令时它是很有用的。</td>
</tr>
<tr>
<td>-tTimeOut</td>
<td>指定等待响应的时间。给定 TimeOut 的值四舍五入为 0.2 秒的倍数。缺省值是 1 秒。</td>
</tr>
<tr>
<td>-u</td>
<td>指定使用无特权的端口发送数据包。 当在一个对特权端口的输入流量进行阻拦的防火墙后是很有益的, 并希望在防火墙之外和主机同步。防火墙是一个系统或者计算机,它控制从外网对专用网的访问。</td>
</tr>
</tbody>
</table>
| 选项 | 描述 |
| :------: | :------: |
| -aKeyid | 使用 Keyid 来认证全部数据包。 |
| -b | 通过调用 settimeofday 子例程来增加时钟的时间。 |
| -d | 指定调试方式。判断 ntpdate 命令会产生什么结果(不产生实际的结果)。结果再现在屏幕上。这个标志使用无特权的端口。 |
| -eAuthenticationDelay | 指定延迟认证处理的时间秒数。 |
| -kKeyFile | 当不使用缺省值 /etc/ntp.keys 文件时,为包含密钥的文件指定一个不同的名称。 请参阅文件KeyFile的描述。 |
| -oVersion | 当轮询它的发出数据包时,指定使用的 NTP 版本实现。 Version 的值可以是 123。缺省值是 3。 |
| -pSamples | 指定从每个服务器获取的样本的数目。 Samples 的值在 1 和 8 之间,并包括 1 和 8。它的缺省值是 4。 |
| -s | 指定日志操作 syslog 设施的使用,而不是使用标准输出。 当运行 ntpdate 命令和 cron命令时它是很有用的。 |
| -tTimeOut | 指定等待响应的时间。给定 TimeOut 的值四舍五入为 0.2 秒的倍数。缺省值是 1 秒。 |
| -u | 指定使用无特权的端口发送数据包。 当在一个对特权端口的输入流量进行阻拦的防火墙后是很有益的, 并希望在防火墙之外和主机同步。防火墙是一个系统或者计算机,它控制从外网对专用网的访问。 |

@ -1,15 +1,12 @@
objdump
===
显示二进制文件信息
# objdump
## 说明
**objdump命令** 是用查看目标文件或者可执行的目标文件的构成的gcc工具。
**objdump命令** 是用查看目标文件或者可执行的目标文件的构成的gcc工具。显示二进制文件信息
## 选项
```
```markdown
--archive-headers
-a
显示档案库的成员信息,类似ls -l将lib*.a的信息列出。
@ -127,6 +124,85 @@ objdump -b oasys -m vax -h fu.o
一般反汇编输出将省略大块的零,该选项使得这些零块也被反汇编。
@file 可以将选项集中到一个文件中,然后使用这个@file选项载入。
用法objdump <选项> <文件>
显示来自目标 <文件> 的信息。至少必须给出以下选项之一:
-a, --archive-headers Display archive header information
-f, --file-headers Display the contents of the overall file header
-p, --private-headers Display object format specific file header contents
-P, --private=OPT,OPT... Display object format specific contents
-h, --[section-]headers Display the contents of the section headers
-x, --all-headers Display the contents of all headers
-d, --disassemble Display assembler contents of executable sections
-D, --disassemble-all Display assembler contents of all sections
-S, --source Intermix source code with disassembly
-s, --full-contents Display the full contents of all sections requested
-g, --debugging Display debug information in object file
-e, --debugging-tags Display debug information using ctags style
-G, --stabs Display (in raw form) any STABS info in the file
-W[lLiaprmfFsoRt] or
--dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,
=frames-interp,=str,=loc,=Ranges,=pubtypes,
=gdb_index,=trace_info,=trace_abbrev,=trace_aranges,
=addr,=cu_index]
Display DWARF info in the file
-t, --syms Display the contents of the symbol table(s)
-T, --dynamic-syms Display the contents of the dynamic symbol table
-r, --reloc Display the relocation entries in the file
-R, --dynamic-reloc Display the dynamic relocation entries in the file
@<file> Read options from <file>
-v, --version Display this program's version number
-i, --info List object formats and architectures supported
-H, --help Display this information
以下选项是可选的:
-b, --target=BFDNAME 将标的目标文件格式指定为 BFDNAME
-m, --architecture=MACHINE 将标的体系结构指定为 MACHINE
-j, --section=NAME 只显示 NAME 节的信息
-M, --disassembler-options=OPT 将文本传递到 OPT 反汇编程序
-EB --endian=big 反汇编时假定高位字节在前
-EL --endian=little 反汇编时假定低位字节在前
--file-start-context 从文件的起点引入上下文 (带有 -S)
-l, --line-numbers 在输出中给出行号和文件名
-C, --demangle[=STYLE] 对修饰过的 (mangled) 符号名进行解码
如果给出了 STYLESTYLE 可能为“auto”、“gnu”、
“lucid”、“arm”、“hp”、“edg”或“gnu-new-abi”
-w, --wide 以多于 80 列的宽度对输出进行格式化
-z, --disassemble-zeroes 反汇编时不要跳过为零的块
--start-address=ADDR 只有进程数据的地址 >= ADDR
--stop-address=ADDR 只有进程数据的地址 <= ADDR
--prefix-addresses 同反汇编代码并列显示完整的地址
--[no-]show-raw-insn 同符号反汇编并列显示十六进制值
--adjust-vma=OFFSET 为所有显示的节地址增加 OFFSET
--dwarf-depth=N Do not display DIEs at depth N or greater
--dwarf-start=N Display DIEs starting with N, at the same depth
or deeper
--dwarf-check Make additional dwarf internal consistency checks.
objdump支持的目标 elf64-x86-64 elf32-i386 elf32-iamcu 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
objdump支持的体系结构 i386 i386:x86-64 i386:x64-32 i8086 i386:intel i386:x86-64:intel i386:x64-32:intel i386:nacl i386:x86-64:nacl i386:x64-32:nacl iamcu iamcu:intel l1om l1om:intel k1om k1om:intel plugin
下列 i386/x86-64 特定的反汇编器选项在使用 -M 开关时可用(使用逗号分隔多个选项):
x86-64 Disassemble in 64bit mode
i386 Disassemble in 32bit mode
i8086 在 16 位模式下反汇编
att 用 AT&T 语法显示指令
intel 用 Intel 语法显示指令
att-mnemonic
Display instruction in AT&T mnemonic
intel-mnemonic
Display instruction in Intel mnemonic
addr64 假定 64 位地址大小
addr32 假定 32 位地址大小
addr16 假定 16 位地址大小
data32 假定 32 位数据大小
data16 假定 16 位数据大小
suffix 在 AT&T 语法中始终显示指令后缀
amd64 Display instruction in AMD64 ISA
intel64 Display instruction in Intel64 ISA
```
### 实例

@ -1,23 +1,16 @@
od
===
输出文件的八进制、十六进制等格式编码的字节
# **od**
## 说明
**od命令** 用于输出文件的八进制、十六进制或其它格式编码的字节,通常用于显示或查看文件中不能直接显示在终端的字符。
常见的文件为文本文件和二进制文件。此命令主要用来查看保存在二进制文件中的值。比如程序可能输出大量的数据记录每个数据是一个单精度浮点数。这些数据记录存放在一个文件中如果想查看下这个数据这时候od命令就派上用场了。在我看来od命令主要用来格式化输出文件数据即对文件中的数据进行无二义性的解释。不管是IEEE754格式的浮点数还是ASCII码od命令都能按照需求输出它们的值。
### 语法
**od命令** 用于输出文件的八进制、十六进制或其它格式编码的字节,通常用于显示或查看文件中不能直接显示在终端的字符
```
od(选项)(参数)
```
常见的文件为文本文件和二进制文件。此命令主要用来查看保存在二进制文件中的值。比如,程序可能输出大量的数据记录,每个数据是
一个单精度浮点数。这些数据记录存放在一个文件中如果想查看下这个数据这时候od命令就派上用场了。在我看来od命令主要用来
格式化输出文件数据即对文件中数据进行无二义性的解释。不管是IEEE754格式浮点数还是ASCII码od命令都能按照需求输出它们的值
## 选项
```
```markdown
-a此参数的效果和同时指定“-ta”参数相同
-A<字码基数>:选择以何种基数计算字码;
-b此参数的效果和同时指定“-toC”参数相同
@ -35,8 +28,79 @@ od(选项)(参数)
-v或--output-duplicates输出时不省略重复的数据
-w<每列字符数>或--width=<每列字符数>:设置每列的最大字符数;
-x此参数的效果和同时指定“-h”参数相同
--help在线帮助
--version显示版本信息。
用法od [选项]... [文件]...
 od [-abcdfilosx]... [文件] [[+]偏移量[.][b]]
 od --traditional [选项]... [文件] [[+]偏移量[.][b] [+][标签][.][b]]
将指定文件以八进制形式(默认)转储到标准输出。如果指定了多于一个的文件
参数,程序会自动将输入的内容整合为列表并以同样的形式输出。
如果没有指定文件,或指定文件为"-",程序从标准输入读取数据。
If first and second call formats both apply, the second format is assumed
if the last operand begins with + or (if there are 2 operands) a digit.
An OFFSET operand means -j OFFSET. LABEL is the pseudo-address
at first byte printed, incremented when dump is progressing.
For OFFSET and LABEL, a 0x or 0X prefix indicates hexadecimal;
suffixes may be . for octal and b for multiply by 512.
Mandatory arguments to long options are mandatory for short options too.
-A, --address-radix=RADIX output format for file offsets; RADIX is one
of [doxn], for Decimal, Octal, Hex or None
-j, --skip-bytes=BYTES skip BYTES input bytes first
-N, --read-bytes=BYTES limit dump to BYTES input bytes
-S BYTES, --strings[=BYTES] output strings of at least BYTES graphic chars;
3 is implied when BYTES is not specified
-t, --format=TYPE select output format or formats
-v, --output-duplicates do not use * to mark line suppression
-w[BYTES], --width[=BYTES] output BYTES bytes per output line;
32 is implied when BYTES is not specified
--traditional accept arguments in third form above
--help 显示此帮助信息并退出
--version 显示版本信息并退出
Traditional format specifications may be intermixed; they accumulate:
-a same as -t a, select named characters, ignoring high-order bit
-b same as -t o1, select octal bytes
-c same as -t c, select printable characters or backslash escapes
-d same as -t u2, select unsigned decimal 2-byte units
-f 即 -t fF指定浮点数对照输出格式
-i 即 -t dl指定十进制整数对照输出格式
-l 即 -t dL指定十进制长整数对照输出格式
-o 即 -t o2指定双字节单位八进制数的对照输出格式
-s 即 -t d2指定双字节单位十进制数的对照输出格式
-x 即 -t x2指定双字节单位十六进制数的对照输出格式
TYPE is made up of one or more of these specifications:
a named character, ignoring high-order bit
c printable character or backslash escape
d[尺寸] 有符号十进制数,每个整形数占指定尺寸的字节
f[尺寸] 浮点数,每个整形数占指定尺寸的字节
o[尺寸] 八进制数,每个整形数占指定尺寸的字节
u[尺寸] 无符号十进制数,每个整形数占指定尺寸的字节
x[尺寸] 十六进制数,每个整形数占指定尺寸的字节
SIZE is a number. For TYPE in [doux], SIZE may also be C for
sizeof(char), S for sizeof(short), I for sizeof(int) or L for
sizeof(long). If TYPE is f, SIZE may also be F for sizeof(float), D
for sizeof(double) or L for sizeof(long double).
Adding a z suffix to any type displays printable characters at the end of
each output line.
BYTES is hex with 0x or 0X prefix, and may have a multiplier suffix:
b 512
KB 1000
K 1024
MB 1000*1000
M 1024*1024
and so on for G, T, P, E, Z, Y.
```
### 参数

@ -1,33 +1,36 @@
openssl
===
强大的安全套接字层密码库
# **openssl**
## 说明
**OpenSSL** 是一个强大的安全套接字层密码库囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议并提供丰富的应用程序供测试或其它目的使用。在OpenSSL被曝出现严重安全漏洞后发现多数通过SSL协议加密的网站使用名为OpenSSL的开源软件包。由于这是互联网应用最广泛的安全传输方法被网银、在线支付、电商网站、门户网站、电子邮件等重要网站广泛使用所以该漏洞影响范围广大。
**OpenSSL** 是一个强大的安全套接字层密码库囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议并提供丰富的应用
程序供测试或其它目的使用
OpenSSL有两种运行模式交互模式和批处理模式
OpenSSL有两种运行模式交互模式和批处理模式
直接输入openssl回车进入交互模式输入带命令选项的openssl进入批处理模式
直接输入openssl回车进入交互模式输入带命令选项的openssl进入批处理模式
OpenSSL整个软件包大概可以分成三个主要的功能部分密码算法库、SSL协议库以及应用程序。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一共提供了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一共实现了4种非对称加密算法包括DH算法、RSA算法、DSA算法和椭圆曲线算法EC。DH算法一般用户密钥交换。RSA算法既
可以用于密钥交换也可以用于数字签名当然如果你能够忍受其缓慢的速度那么也可以用于数据加密。DSA算法则一般只用于数字签名
**信息摘要算法**
OpenSSL实现了5种信息摘要算法分别是MD2、MD5、MDC2、SHASHA1和RIPEMD。SHA算法事实上包括了SHA和SHA1两种信息摘要算法此外OpenSSL还实现了DSS标准中规定的两种信息摘要算法DSS和DSS1。 
OpenSSL实现了5种信息摘要算法分别是MD2、MD5、MDC2、SHASHA1和RIPEMD。SHA算法事实上包括了SHA和SHA1两种信息摘要算法
此外OpenSSL还实现了DSS标准中规定的两种信息摘要算法DSS和DSS1
**密钥和证书管理**
密钥和证书管理是PKI的一个重要组成部分OpenSSL为之提供了丰富的功能支持多种标准。 
密钥和证书管理是PKI的一个重要组成部分OpenSSL为之提供了丰富的功能支持多种标准
首先OpenSSL实现了ASN.1的证书和密钥相关标准提供了对证书、公钥、私钥、证书请求以及CRL等数据对象的DER、PEM和BASE64的编解码功能。OpenSSL提供了产生各种公开密钥对和对称密钥的方法、函数和应用程序同时提供了对公钥和私钥的DER编解码功能。并实现了私钥的PKCS#12和PKCS#8的编解码功能。OpenSSL在标准中提供了对私钥的加密保护功能使得密钥可以安全地进行存储和分发。 
@ -35,7 +38,7 @@ OpenSSL实现了5种信息摘要算法分别是MD2、MD5、MDC2、SHASHA1
事实上OpenSSL提供的CA应用程序就是一个小型的证书管理中心CA实现了证书签发的整个流程和证书管理的大部分机制。
### 实例
## 实例
**1、消息摘要算法应用例子**
@ -210,3 +213,16 @@ cert.pem为X.509证书文件用私匙key,pem为mail.txt签名证书被包
```
制作并信任您自己的证书:
任何人都可以在没有CA帮助的情况下制作自己的证书。 唯一的区别是您自己制作的证书不会被其他任何人信任;然后,您可以使用
localhost.crt和localhost.key配置本地网站服务器并在本地受信任的根列表中安装localhost.crt
如果您希望在开发证书中更加逼真,可以使用(minica)[https://github.com/jsha/minica]生成自己的本地根证书,并颁发由其签名的终
端(又称叶)证书。 然后,您将导入根证书而不是自签名的终端证书;您还可以选择使用带有点的域例如www.localhost将其作为别
名添加到/etc/hosts作为127.0.0.1的别名。这巧妙地改变了浏览器处理cookie存储的方式
openssl req -x509 -out localhost.crt -keyout localhost.key \
-newkey rsa:2048 -nodes -sha256 \
-subj '/CN=localhost' -extensions EXT -config <( \
printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")

@ -2,9 +2,12 @@
## 说明
**passwd命令** 用于设置用户的认证信息,包括用户密码、密码过期时间等。系统管理者则能用它管理系统用户的密码。只有管理者可以指定用户名称,一般用户只能变更自己的密码。
**passwd命令** 用于设置用户的认证信息,包括用户密码、密码过期时间等。系统管理者则能用它管理系统用户的密码。只有管理者可
以指定用户名称,一般用户只能变更自己的密码
```info
## 选项
```markdown
用法: passwd [选项...] <帐号名称>
-k, --keep-tokens 保持身份验证令牌不过期
-d, --delete 删除已命名帐号的密码(只有根用户才能进行此操作)
@ -20,27 +23,20 @@
--stdin 从标准输入读取令牌(只有根用户才能进行此操作)
```
## 知识扩展
与用户、组账户信息相关的文件
### 知识扩展
存放用户信息:
```
```bash
# 存放用户信息
/etc/passwd
/etc/shadow
```
存放组信息:
```
# 存放组信息
/etc/group
/etc/gshadow
```
用户信息文件分析(每项用`:`隔开)
: << comment
# 用户信息文件分析(每项用`:`隔开)
```
例如jack:X:503:504:::/home/jack/:/bin/bash
jack  //用户名
X  //口令、密码
@ -49,11 +45,11 @@ X  //口令、密码
:  //描述
/home/jack/  //用户主目录
/bin/bash  //用户缺省Shell
```
comment
组信息文件分析
: << comment
# 组信息文件分析
```
例如jack:$!$:???:13801:0:99999:7:*:*:
jack  //组名
$!$  //被加密的口令
@ -63,58 +59,16 @@ $!$  //被加密的口令
7  //到7天时提醒
*  //禁用天数
*  //过期天数
```
### 实例
如果是普通用户执行passwd只能修改自己的密码。如果新建用户后要为新用户创建密码则用passwd用户名注意要以root用户的权限来创建。
comment
```
[root@localhost ~]# passwd linuxde //更改或创建linuxde用户的密码
Changing password for user linuxde.
New UNIX password: //请输入新密码;
Retype new UNIX password: //再输入一次;
passwd: all authentication tokens updated successfully. //成功;
```
普通用户如果想更改自己的密码直接运行passwd即可比如当前操作的用户是linuxde。
```
[linuxde@localhost ~]$ passwd
Changing password for user linuxde. //更改linuxde用户的密码
(current) UNIX password: //请输入当前密码;
New UNIX password: //请输入新密码;
Retype new UNIX password: //确认新密码;
passwd: all authentication tokens updated successfully. //更改成功;
```
## 实例
比如我们让某个用户不能修改密码,可以用`-l`选项来锁定:
```
[root@localhost ~]# passwd -l linuxde //锁定用户linuxde不能更改密码
Locking password for user linuxde.
passwd: Success //锁定成功;
[linuxde@localhost ~]# su linuxde //通过su切换到linuxde用户
[linuxde@localhost ~]$ passwd //linuxde来更改密码
Changing password for user linuxde.
Changing password for linuxde
(current) UNIX password: //输入linuxde的当前密码
passwd: Authentication token manipulation error //失败,不能更改密码;
```
```bash
# 如果是普通用户执行passwd只能修改自己的密码。如果新建用户后要为新用户创建密码,则用passwd 用户名注意要以root用户的权限来创建
再来一例:
passwd -l linuxde # 锁定用户linuxde不能更改密码
passwd -d linuxde # 清除linuxde用户密码,注意:当我们清除一个用户的密码时,登录时就无需密码,这一点要加以注意
```
[root@localhost ~]# passwd -d linuxde //清除linuxde用户密码
Removing password for user linuxde.
passwd: Success //清除成功;
[root@localhost ~]# passwd -S linuxde //查询linuxde用户密码状态
Empty password. //空密码,也就是没有密码;
```
注意:当我们清除一个用户的密码时,登录时就无需密码,这一点要加以注意。

@ -2,7 +2,7 @@
## 说明
**pmap命令** 用于报告进程的内存映射关系是Linux调试及运维一个很好的工具
**pmap命令** 用于报告进程的内存映射关系是Linux调试及运维一个很好的工具
## 选项
@ -26,6 +26,7 @@ Options:
## 实例
```bash
pmap PID # 分析进程号PID的内存线程栈
```

@ -2,9 +2,11 @@
## 说明
**ps命令** 用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等总之大部分信息都是可以通过执行该命令得到的。
**ps命令** 用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程
查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,
总之大部分信息都是可以通过执行该命令得到的。
## 语法
## 选项
Usage: ps [options]
@ -83,11 +85,9 @@ Miscellaneous options:
display help and exit
```
由于ps命令能够支持的系统类型相当的多所以选项多的离谱
## 实例
```sh
```bash
ps aux | sort -rnk 4 # 按内存资源的使用量对进程进行排序
ps aux | sort -nk 3 # 按CPU 资源的使用量对进程进行排序
ps -le or ps -aux # 查看所有用户执行的进程的详细信息
@ -95,4 +95,6 @@ ps -aux --sort pid # 可按照进程执行的时间PIDUID等对进程
ps -uU tangsir / ps -aux | grep tangsir # 查看系统中指定用户执行的进程
pstree | more # 进程树,非常直观的观察父子进程
ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }' # PHP-FPM进程的平均内存占用
ps -u root | awk '/^test/ {print "kill -9" $1}' | sh # 将用户root下所有进程名以test开头的全部强制杀死
```

@ -1,31 +1,20 @@
pwd
===
绝对路径方式显示用户当前工作目录
# **pwd**
## 说明
**pwd命令** 以绝对路径的方式显示用户当前工作目录。命令将当前目录的全路径名称(从根目录)写入标准输出。全部目录使用`/`分隔。第一个`/`表示根目录最后一个目录是当前目录。执行pwd命令可立刻得知您目前所在的工作目录的绝对路径名称。
### 语法
```
pwd选项
```
**pwd命令** 以绝对路径的方式显示用户当前工作目录。命令将当前目录的全路径名称(从根目录)写入标准输出。全部目录使用`/`分
隔。第一个`/`表示根目录最后一个目录是当前目录。执行pwd命令可立刻得知您目前所在的工作目录的绝对路径名称
## 选项
```markdown
-L, --logical use PWD from environment, even if it contains symlinks
-P, --physical avoid all symlinks
```
--help显示帮助信息
--version显示版本信息。
```
## 实例
### 实例
```bash
```
[root@localhost ~]# pwd
/root
```

@ -1,27 +1,20 @@
# **read命令说明**
**read命令** 从键盘读取变量的值通常用在shell脚本中与用户进行交互的场合。该命令可以一次读取多个变量的值变量和输入的值都需要使用空格隔开。在read命令后面如果没有指定变量名读取的数据将被自动赋值给特定的变量REPLY
**read命令** 从键盘读取变量的值通常用在shell脚本中与用户进行交互的场合。该命令可以一次读取多个变量的值变量和输入的值
都需要使用空格隔开。在read命令后面如果没有指定变量名读取的数据将被自动赋值给特定的变量REPLY
```sh
read: read [-ers] [-a 数组] [-d 分隔符] [-i 缓冲区文字] [-n 读取字符数] [-N 读取字符数] [-p 提示符] [-t 超时] [-u 文件描述符] [名称 ...]
```markdown
read [-ers] [-a 数组] [-d 分隔符] [-i 缓冲区文字] [-n 读取字符数] [-N 读取字符数] [-p 提示符] [-t 超时] [-u 文件描述符] [名称 ...]
从标准输入读取一行并将其分为不同的域。
从标准输入读取单独的一行,或者如果使用了 -u 选项,从文件描述符 FD 中读取。
该行被分割成域,如同词语分割一样,并且第一个词被赋值给第一个 NAME 变量,第二
个词被赋值给第二个 NAME 变量,如此继续,直到剩下所有的词被赋值给最后一个 NAME
变量。只有 $IFS 变量中的字符被认作是词语分隔符。
如果没有提供 NAME 变量,则读取的行被存放在 REPLY 变量中。
从标准输入读取一行并将其分为不同的域,从标准输入读取单独的一行,或者如果使用了 -u 选项,从文件描述符 FD 中读取。
该行被分割成域,如同词语分割一样,并且第一个词被赋值给第一个 NAME 变量,第二个词被赋值给第二个 NAME 变量,如此继续,直
到剩下所有的词被赋值给最后一个NAME变量。只有 $IFS 变量中的字符被认作是词语分隔符。如果没有提供 NAME 变量,则读取的行被
存放在 REPLY 变量中
```
## 选项
```sh
选项:
```markdown
-a array 将词语赋值给 ARRAY 数组变量的序列下标成员,从零开始。
-d delim 持续读取直到读入 DELIM 变量中的第一个字符,而不是换行符
-e 在一个交互式 shell 中使用 Readline 获取行
@ -31,120 +24,25 @@ read: read [-ers] [-a 数组] [-d 分隔符] [-i 缓冲区文字] [-n 读取字
-p prompt 在尝试读取之前输出 PROMPT 提示符并且不带换行符
-r 不允许反斜杠转义任何字符
-s 不显示终端的任何输入
-t timeout 如果在 TIMEOUT 秒内没有读取一个完整的行则超时并且返回失败。TMOUT 变量的值是默认的超时时间。TIMEOUT 可以是小数。如果 TIMEOUT 是 0那么仅当在指定的文件描述符上输入有效的时候read 才返回成功。如果超过了超时时间,则返回状态码大于 128
-t timeout 如果在 TIMEOUT 秒内没有读取一个完整的行则超时并且返回失败。TMOUT 变量的值是默认的超时时间。TIMEOUT 可以是小数
如果 TIMEOUT 是 0那么仅当在指定的文件描述符上输入有效的时候read 才返回成功。如果超过了超时时间,则返回状态码大于 128
-u fd 从文件描述符 FD 中读取,而不是标准输入
退出状态:
返回码为零,除非遇到了文件结束符,读超时,或者无效的文
件描述符作为参数传递给了 -u 选项。
返回码为零,除非遇到了文件结束符,读超时,或者无效的文件描述符作为参数传递给了 -u 选项。
```
## read命令示例
```sh
# 从标准输入读取输入并赋值给变量1987name。
# 等待读取输入直到回车后表示输入完毕并将输入赋值给变量answer
read 1987name
## 实例
# 控制台输入Hello
HelloWorld
# 打印变量
echo $1987name
HelloWorld
```
等待一组输入,每个单词之间使用空格隔开,直到回车结束,并分别将单词依次赋值给这三个读入变量。
```
#read one two three
1 2 3 #在控制台输入1 2 3它们之间用空格隔开。
#echo "one = $one, two = $two, three = $three"
one = 1, two = 2, three = 3
```
```bash
read name # 从标准输入读取输入并赋值给变量name
read one two three # 在控制台输入1 2 3它们之间用空格隔开。等待一组输入每个单词之间使用空格隔开直到回车结束并分别
# 将单词依次赋值给这三个读入变量
REPLY示例
read -p "Enter your name: " # 输出文本提示同时等待输入并将结果赋值给REPLY
read -a friends # 等待控制台输入并将输入信息视为数组赋值给数组变量friends输入信息用空格隔开数组的每个元素
read v1 v3 # 使用read命令从键盘读取变量值并且将值赋给指定的变量
echo $v1 $v3 # 输出变量的值
```
#read #等待控制台输入并将结果赋值给特定内置变量REPLY。
This is REPLY #在控制台输入该行。
#echo $REPLY #打印输出特定内置变量REPLY以确认是否被正确赋值。
This is REPLY
```
-p选项示例
```
#read -p "Enter your name: " #输出文本提示同时等待输入并将结果赋值给REPLY。
Enter you name: stephen #在提示文本之后输入stephen
#echo $REPLY
stephen
```
等待控制台输入并将输入信息视为数组赋值给数组变量friends输入信息用空格隔开数组的每个元素。
```
#read -a friends
Tim Tom Helen
#echo "They are ${friends[0]}, ${friends[1]} and ${friends[2]}."
They are Tim, Tom and Helen.
```
**补充一个终端输入密码时候,不让密码显示出来的例子。**
方法1
```
#!/bin/bash
read -p "输入密码:" -s pwd
echo
echo password read, is "$pwd"
```
方法2
```
#!/bin/bash
stty -echo
read -p "输入密码:" pwd
stty echo
echo
echo 输入完毕。
```
其中,选项`-echo`禁止将输出发送到终端,而选项`echo`则允许发送输出。
使用read命令从键盘读取变量值并且将值赋给指定的变量输入如下命令
```
read v1 v3 #读取变量值
```
执行上面的指令以后,要求键入两个数据,如下所示:
```
Linux c+ #输入数据
```
完成之后可以使用echo命令将指定的变量值输出查看输入如下命令
```
echo $v1 $v3 #输出变量的值
```
执行输出变量值的命令以后,将显示用户所输入的数据值,如下所示:
```
Linux c+ #输出变量值
```
注意使用echo命令输出变量值时必须在变量名前添加符号`$`。否则echo将直接输出变量名。

@ -1,17 +1,65 @@
readelf
===
用于显示elf格式文件的信息
# readelf
## 说明
**readelf命令** 用来显示一个或者多个elf格式的目标文件的信息可以通过它的选项来控制显示哪些信息。这里的elf-file(s)就表示那些被检查的文件。可以支持32位64位的elf格式文件也支持包含elf文件的文档这里一般指的是使用ar命令将一些elf文件打包之后生成的例如lib*.a之类的“静态库”文件 
这个程序和objdump提供的功能类似但是它显示的信息更为具体并且它不依赖BFD库(BFD库是一个GNU项目它的目标就是希望通过一种统一的接口来处理不同的目标文件)所以即使BFD库有什么bug存在的话也不会影响到readelf程序。 
运行readelf的时候除了-v和-H之外其它的选项必须有一个被指定。 
### ELF文件类型
**readelf命令** 用来显示一个或者多个elf格式的目标文件的信息可以通过它的选项来控制显示哪些信息。这里的elf-file(s)就表示
那些被检查的文件。可以支持32位64位的elf格式文件也支持包含elf文件的文档这里一般指的是使用ar命令将一些elf文件打包之
后生成的例如lib*.a之类的“静态库”文件
这个程序和objdump提供的功能类似但是它显示的信息更为具体并且它不依赖BFD库(BFD库是一个GNU项目它的目标就是希望通过一
种统一的接口来处理不同的目标文件)所以即使BFD库有什么bug存在的话也不会影响到readelf程序
运行readelf的时候除了-v和-H之外其它的选项必须有一个被指定
## 选项
```markdown
用法readelf <选项> elf-文件
显示关于 ELF 格式文件内容的信息
Options are:
-a --all Equivalent to: -h -l -S -s -r -d -V -A -I
-h --file-header Display the ELF file header
-l --program-headers Display the program headers
--segments An alias for --program-headers
-S --section-headers Display the sections' header
--sections An alias for --section-headers
-g --section-groups Display the section groups
-t --section-details Display the section details
-e --headers Equivalent to: -h -l -S
-s --syms Display the symbol table
--symbols An alias for --syms
--dyn-syms Display the dynamic symbol table
-n --notes Display the core notes (if present)
-r --relocs Display the relocations (if present)
-u --unwind Display the unwind info (if present)
-d --dynamic Display the dynamic section (if present)
-V --version-info Display the version sections (if present)
-A --arch-specific Display architecture specific information (if any)
-c --archive-index Display the symbol/file index in an archive
-D --use-dynamic Use the dynamic section info when displaying symbols
-x --hex-dump=<number|name>
Dump the contents of section <number|name> as bytes
-p --string-dump=<number|name>
Dump the contents of section <number|name> as strings
-R --relocated-dump=<number|name>
Dump the contents of section <number|name> as relocated bytes
-z --decompress Decompress section before dumping it
-w[lLiaprmfFsoRt] or
--debug-dump[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,
=frames-interp,=str,=loc,=Ranges,=pubtypes,
=gdb_index,=trace_info,=trace_abbrev,=trace_aranges,
=addr,=cu_index]
Display the contents of DWARF2 debug sections
--dwarf-depth=N Do not display DIEs at depth N or greater
--dwarf-start=N Display DIEs starting with N, at the same depth
or deeper
-I --histogram Display histogram of bucket list lengths
-W --wide Allow output width to exceed 80 characters
@<file> Read options from <file>
```
### ELF文件类型
**种类型的ELF文件**

@ -1,23 +1,18 @@
rm
===
用于删除给定的文件和目录
# **rm**
## 说明
**rm** **命令** 可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。
**rm** 可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只
是删除整个链接文件,而原有文件保持不变
注意使用rm命令要格外小心。因为一旦删除了一个文件就无法再恢复它。所以在删除文件之前最好再看一下文件的内容确定是否真要删除。rm命令可以用-i选项这个选项在使用文件扩展名字符删除多个文件时特别有用。使用这个选项系统会要求你逐一确定是否要删除。这时必须输入y并按Enter键才能删除文件。如果仅按Enter键或其他字符文件不会被删除。
注意使用rm命令要格外小心。因为一旦删除了一个文件就无法再恢复它。所以在删除文件之前最好再看一下文件的内容确定是
否真要删除。rm命令可以用-i选项这个选项在使用文件扩展名字符删除多个文件时特别有用。使用这个选项系统会要求你逐一确定是
否要删除。这时必须输入y并按Enter键才能删除文件。如果仅按Enter键或其他字符文件不会被删除
### 语法
## 选项
```
rm (选项)(文件)
```
```markdown
```
-f, --force 忽略不存在的文件和参数,不提示直接强制删除
-i 删除已有文件或目录之前先询问用户
-I prompt once before removing more than three files, or
@ -48,27 +43,8 @@ use one of these commands:
该文件的内容无法还原请考虑使用shred。
```
### 参数
## 实例
文件:指定被删除的文件列表,如果参数中含有目录,则必须加上`-r`或者`-R`选项。
### 实例
交互式删除当前目录下的文件test和example
```
rm -i test example
Remove test ?n不删除文件test)
Remove example ?y删除文件example)
```bash
rm -i test example # 交互式删除当前目录下的文件test和example
```
删除当前目录下除隐含文件外的所有文件和子目录
```
# rm -r *
```
应注意,这样做是非常危险的!

@ -1,128 +1,102 @@
# rsync
远程数据同步工具
# **rsync**
## 说明
**rsync命令** 是一个远程数据同步工具可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步这个算法只传送两个文件的不同部分而不是每次都整份传送因此速度相当快。 rsync是一个功能非常强大的工具其命令也有很多功能特色选项我们下面就对它的选项一一进行分析说明。
**rsync命令** 是一个远程数据同步工具可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程
两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快
## 语法
## 语法
```sh
```markdown
rsync [OPTION]... SRC DEST
rsync [OPTION]... SRC [USER@]host:DEST
rsync [OPTION]... [USER@]HOST:SRC DEST
rsync [OPTION]... [USER@]HOST::SRC DEST
rsync [OPTION]... SRC [USER@]HOST::DEST
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
```
对应于以上六种命令格式rsync有六种不同的工作模式
1. 同步本地目录。当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。如:`rsync -a /data /backup`
2. 使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。如:`rsync -avz *.c foo:src`
3. 使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。如:`rsync -avz foo:src/bar /data`
4. 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。如:`rsync -av root@192.168.78.192::www /databack`
5. 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。如:`rsync -av /databack root@192.168.78.192::www`
4. 拉取:从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。如:`rsync -av root@192.168.78.192::www /databack`
5. 推送:从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。如:`rsync -av /databack root@192.168.78.192::www`
6. 列远程机的文件列表。这类似于rsync传输不过只要在命令中省略掉本地机信息即可。如`rsync -v rsync://192.168.78.192/www`
```sh
-v, --verbose 详细模式输出。
-q, --quiet 精简输出模式。
-c, --checksum 打开校验开关,强制对文件传输进行校验。
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD。
-r, --recursive 对子目录以递归模式处理。
-R, --relative 使用相对路径信息。
-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。
--backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀。
-u, --update 仅仅进行更新也就是跳过所有已经存在于DST并且文件时间晚于要备份的文件不覆盖更新的文件。
-l, --links 保留软链结。
-L, --copy-links 想对待常规文件一样处理软链结。
--copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结。
--safe-links 忽略指向SRC路径目录树以外的链结。
-H, --hard-links 保留硬链结。
-p, --perms 保持文件权限。
-o, --owner 保持文件属主信息。
-g, --group 保持文件属组信息。
-D, --devices 保持设备文件信息。
-t, --times 保持文件时间信息。
-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间。
-n, --dry-run现实哪些文件将被传输。
-w, --whole-file 拷贝文件,不进行增量检测。
-x, --one-file-system 不要跨越文件系统边界。
-B, --block-size=SIZE 检验算法使用的块尺寸默认是700字节。
-e, --rsh=command 指定使用rsh、ssh方式进行数据同步。
--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息。
-C, --cvs-exclude 使用和CVS一样的方法自动忽略文件用来排除那些不希望传输的文件。
--existing 仅仅更新那些已经存在于DST的文件而不备份那些新创建的文件。
--delete 删除那些DST中SRC没有的文件。
--delete-excluded 同样删除接收端那些被该选项指定排除的文件。
--delete-after 传输结束以后再删除。
--ignore-errors 及时出现IO错误也进行删除。
--max-delete=NUM 最多删除NUM个文件。
--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输。
--force 强制删除目录,即使不为空。
--numeric-ids 不将数字的用户和组id匹配为用户名和组名。
--timeout=time ip超时时间单位为秒。
-I, --ignore-times 不跳过那些有同样的时间和长度的文件。
--size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间。
--modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口默认为0。
-T --temp-dir=DIR 在DIR中创建临时文件。
--compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份。
-P 等同于 --partial。
--progress 显示备份过程。
-z, --compress 对备份的文件在传输时进行压缩处理。
--exclude=PATTERN 指定排除不需要传输的文件模式。
--include=PATTERN 指定不排除而需要传输的文件模式。
--exclude-from=FILE 排除FILE中指定模式的文件。
--include-from=FILE 不排除FILE指定模式匹配的文件。
--version 打印版本信息。
--address 绑定到特定的地址。
--config=FILE 指定其他的配置文件不使用默认的rsyncd.conf文件。
--port=PORT 指定其他的rsync服务端口。
--blocking-io 对远程shell使用阻塞IO。
-stats 给出某些文件的传输状态。
--progress 在传输时现实传输过程。
--log-format=formAT 指定日志文件格式。
--password-file=FILE 从FILE中得到密码。
--bwlimit=KBPS 限制I/O带宽KBytes per second。
-h, --help 显示帮助信息。
```
## 实例
SSH方式,首先在服务端启动ssh服务
service sshd start
```markdown
-v, --verbose 详细模式输出
-q, --quiet 精简输出模式
-c, --checksum 打开校验开关,强制对文件传输进行校验
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, --recursive 对子目录以递归模式处理
-R, --relative 使用相对路径信息
-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀
--backup-dir 将备份文件(如~filename)存放在在目录下
-suffix=SUFFIX 定义备份文件前缀
-u, --update 仅仅进行更新也就是跳过所有已经存在于DST并且文件时间晚于要备份的文件不覆盖更新的文件
-l, --links 保留软链结
-L, --copy-links 想对待常规文件一样处理软链结
--copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
--safe-links 忽略指向SRC路径目录树以外的链结
-H, --hard-links 保留硬链结
-p, --perms 保持文件权限
-o, --owner 保持文件属主信息
-g, --group 保持文件属组信息
-D, --devices 保持设备文件信息
-t, --times 保持文件时间信息
-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间
-n, --dry-run现实哪些文件将被传输
-w, --whole-file 拷贝文件,不进行增量检测
-x, --one-file-system 不要跨越文件系统边界
-B, --block-size=SIZE 检验算法使用的块尺寸默认是700字节
-e, --rsh=command 指定使用rsh、ssh方式进行数据同步
--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
-C, --cvs-exclude 使用和CVS一样的方法自动忽略文件用来排除那些不希望传输的文件
--existing 仅仅更新那些已经存在于DST的文件而不备份那些新创建的文件
--delete 删除那些DST中SRC没有的文件
--delete-excluded 同样删除接收端那些被该选项指定排除的文件
--delete-after 传输结束以后再删除
--ignore-errors 及时出现IO错误也进行删除
--max-delete=NUM 最多删除NUM个文件
--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
--force 强制删除目录,即使不为空
--numeric-ids 不将数字的用户和组id匹配为用户名和组名
--timeout=time ip超时时间单位为秒
-I, --ignore-times 不跳过那些有同样的时间和长度的文件
--size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
--modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口默认为0
-T --temp-dir=DIR 在DIR中创建临时文件
--compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份
-P 等同于 --partial
--progress 显示备份过程
-z, --compress 对备份的文件在传输时进行压缩处理
--exclude=PATTERN 指定排除不需要传输的文件模式
--include=PATTERN 指定不排除而需要传输的文件模式
--exclude-from=FILE 排除FILE中指定模式的文件
--include-from=FILE 不排除FILE指定模式匹配的文件
--version 打印版本信息
--address 绑定到特定的地址
--config=FILE 指定其他的配置文件不使用默认的rsyncd.conf文件
--port=PORT 指定其他的rsync服务端口
--blocking-io 对远程shell使用阻塞IO
-stats 给出某些文件的传输状态
--progress 在传输时现实传输过程
--log-format=formAT 指定日志文件格式
--password-file=FILE 从FILE中得到密码
--bwlimit=KBPS 限制I/O带宽KBytes per second
```
### 使用rsync进行同步
## 实例
接下来就可以在客户端使用rsync命令来备份服务端上的数据了SSH方式是通过系统用户来进行备份的如下
### 使用SSH方式rsync进行同步
```sh
```bash
rsync -vzrtopg --progress -e ssh --delete work@172.16.78.192:/www/* /databack/experiment/rsync
work@172.16.78.192's password:
receiving file list ...
5 files to consider
test/
a
0 100% 0.00kB/s 527:35:41 (1, 20.0% of 5)
b
67 100% 65.43kB/s 0:00:00 (2, 40.0% of 5)
c
0 100% 0.00kB/s 527:35:41 (3, 60.0% of 5)
dd
100663296 100% 42.22MB/s 0:00:02 (4, 80.0% of 5)
sent 96 bytes received 98190 bytes 11563.06 bytes/sec
total size is 100663363 speedup is 1024.19
```
上面的信息描述了整个的备份过程,以及总共备份数据的大小。
## 后台服务方式
### 后台服务方式
启动rsync服务编辑`/etc/xinetd.d/rsync`文件,将其中的`disable=yes`改为`disable=no`并重启xinetd服务如下

@ -2,58 +2,151 @@
## 说明
**sar命令** 是Linux下系统运行状态统计工具它将指定的操作系统状态计数器显示到标准输出设备。sar工具将对系统当前的状态进行取样然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样获得大量的取样数据。取样数据和分析的结果都可以存入文件使用它时消耗的系统资源很小。
```info
-A 显示所有的报告信息;
-b 显示I/O速率
-B 显示换页状态;
-c 显示进程创建活动;
-d 显示每个块设备的状态;
-e 设置显示报告的结束时间;
-f 从指定文件提取报告;
-i 设状态信息刷新的间隔时间;
-P 报告每个CPU的状态
-R 显示内存状态;
-u 显示CPU利用率
-v 显示索引节点,文件和其他内核表的状态;
-w 显示交换分区状态;
-x 显示给定进程的状态。
```
**sar命令** System Activity Reporter是Linux下系统运行状态统计工具它将指定的操作系统状态计数器显示到标准输出设备。sar工
具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取
样数据。取样数据和分析的结果都可以存入文件,使用它时消耗的系统资源很小
```markdown
sar命令常用格式
sar [options] [-A] [-o file] t [n]
### 参数
-A 显示所有的报告信息
-b 显示I/O速率
-B 显示换页状态
-c 显示进程创建活动
-d 显示每个块设备的状态
-e 设置显示报告的结束时间
-f 从指定文件提取报告
-i 设状态信息刷新的间隔时间
-P 报告每个CPU的状态
-R 显示内存状态
-u 显示CPU利用率
-v 显示索引节点,文件和其他内核表的状态
-w 显示交换分区状态
-x 显示给定进程的状态
* 间隔时间:每次报告的间隔时间(秒);
* 次数:显示报告的次数。
```
### 实例
## 实例
**察看内存和交换空间的使用率:**
```bash
sar -r # 查看内存和交换空间的使用率
: << comment
输出解释:
kbmemfree与kbmemused字段分别显示内存的未使用与已使用空间后面跟着的是已使用空间的百分比%memused字段
kbbuffers与kbcached字段分别显示缓冲区与系统全域的数据存取量单位为KB
comment
```
sar -r
Linux 2.4.20-8 (www.jsdig.com) 20130503
12:00:01 AM kbmemfree kbmemused %memused
kbmemshrd kbbuffers kbcached
12:10:00 AM 240468 1048252 81.34
0 133724 485772
12:20:00 AM 240508 1048212 81.34
0 134172 485600
08:40:00 PM 934132 354588 27.51
0 26080 185364
Average: 324346 964374 74.83
0 96072 467559
```
sar -o temp 60 10 # 观察系统部件10分钟并对数据进行排序
sar -u 1 3 # 查看CPU利用率
: << comment
输出详解:
%user 显示在用户级别(application)运行使用 CPU 总时间的百分比.
%nice 显示在用户级别,用于nice操作,所占用CPU总时间的百分比.
%system在核心级别(kernel)运行所使用 CPU 总时间的百分比.
%iowait显示用于等待I/O操作占用CPU总时间的百分比.
%steal 管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟CPU的百分比.
%idle 显示CPU空闲时间占用CPU总时间的百分比
comment
kbmemfree与kbmemused字段分别显示内存的未使用与已使用空间后面跟着的是已使用空间的百分比%memused字段。kbbuffers与kbcached字段分别显示缓冲区与系统全域的数据存取量单位为KB。
sar -v 1 3 # 查看inode、文件和其他内核表状态
: << comment
输出详解:
dentunusd: 目录缓存中未使用的缓存条目数
file-nr: 由系统使用的文件数
inode-nr 由系统使用的inode数
pty-nr 系统所使用的伪终端数
comment
**观察系统部件10分钟并对数据进行排序**
sar -q # 查看平均负载
: << comment
输出详解:
runq-sz 运行队列的长度(等待运行的进程数)
plist-sz进程列表中进程processes和线程threads的数量
ldavg-1 最后1分钟的系统平均负载
ldavg-5 过去5分钟的系统平均负载
ldavg-15过去15分钟的系统平均负载
comment
```
sar -o temp 60 10
```
sar -R 1 5 # 查看内存状态
: << comment
输出详解:
frmpg/s :每秒钟系统释放的内存页数. 如果是负值,表示每秒钟被系统分配的内存页数.
bufpg/s :每秒钟系统分配多少内存页作为buffer使用. 如果是负值表示系统在回收一定的buffer空间.
campg/s :每秒钟系统分配多少内存页作为bcached使用. 如果是负值表示系统在回收一定的cached空间.
comment
sar -W # 查看页面交换情况
: << comment
输出详解:
pswpin/s Total number of swap pages the system brought in per second.
pswpout/s Total number of swap pages the system brought out per second.
comment
sar -w 1 5 # 任务创建和系统切换活动情况
: << comment
输出详解:
proc/s 每秒创建的任务的总数.
cswch/s每秒上下文切换的总数.
comment
sar -b 1 5 # I/O和传输速率统计
: << comment
输出详解:
tps 每秒钟向物理设备发出请求(读与写)的总数
rtps: 每秒钟向物理设备发出读请求的总数
wtps: 每秒钟向物理设备发出写请求的总数
bread/s: 每秒从块设备中读取的数据总数
bwrtn/s: 每秒向块设备中写入的数据总数
comment
sar -B 1 5 # 输出paging信息
: << comment
输出详解:
pgpgin/s: 每秒从磁盘或SWAP置换到内存的字节数
pgpgout/s: 每秒从内存置换到磁盘或SWAP的字节数
fault/s: 每秒钟系统产生的缺页数,即主缺页与次缺页之和(major + minor)
majflt/s 每秒钟产生的主缺页数
pgfree/s: 每秒被放入空闲队列中的页个数
pgscank/s: 每秒被kswapd扫描的页个数
pgscand/s: 每秒直接被扫描的页个数
pgsteal/s: 每秒钟从cache中被回收来满足内存需要的页个数
%vmeff: 每秒回收的页(pgsteal)占总扫描页(pgscank+pgscand)的百分比
缺页异常:
major内存中没有需要的数据
minor (内存中有这样的数据,单最先不是该进程的)
comment
sar -n DEV 1 1 # 此为查看lo、eth0接口网络信息查看网络相关信息可用参数为DEV、EDEV、SOCK、FULL
: << comment
输出详解:
IFACE就是网络设备的名称
rxpck/s每秒钟接收到的包数
txpck/s每秒钟发送出去的包数目
rxbyt/s每秒钟接收到的字节数
txbyt/s每秒钟发送出去的字节数
rxcmp/s每秒钟接收到的压缩包数目
txcmp/s每秒钟发送出去的压缩包数目
txmcst/s每秒钟接收到的多播包的包数目
如果使用EDEV输出详解
rxerr/s每秒钟接收到的损坏的包的数目
txerr/s当发送包时每秒钟发生的错误数
coll/s 当发送包时,每秒钟发生的冲撞(collisions)数(这个是在半双工模式下才有)
rxdrop/s由于缓冲区满网络设备接收端每秒钟丢掉的网络包的数目
txdrop/s由于缓冲区满网络设备发送端每秒钟丢掉的网络包的数目
txcarr/s当发送数据包时每秒钟载波错误发生的次数
rxfram/s在接收数据包时每秒钟发生的帧对齐错误的次数
rxfifo/s在接收数据包时每秒钟缓冲区溢出错误发生的次数
txfifo/s在发送数据包时每秒钟缓冲区溢出错误发生的次数
如果使用SOCK输出详解
totsck被使用的socket的总数目
tcpsck当前正在被使用于TCP的socket数目
udpsck当前正在被使用于UDP的socket数目
rawsck当前正在被使用于RAW的socket数目
ip-frag当前的IP分片的数目
comment

@ -1,42 +1,35 @@
scp
===
加密的方式在本地主机和远程主机之间复制文件
# **scp**
## 说明
**scp命令** 用于在Linux下进行远程拷贝文件的命令和它类似的命令有cp不过cp只是在本机进行拷贝不能跨服务器而且scp传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读read only system时用scp可以帮你把文件移出来。另外scp还非常不占资源不会提高多少系统负荷在这一点上rsync就远远不及它了。虽然 rsync比scp会快一点但当小文件众多的情况下rsync会导致硬盘I/O非常高而scp基本不影响系统正常使用。
### 语法
```
scp(选项)(参数)
```
```
-1使用ssh协议版本1
-2使用ssh协议版本2
-4使用ipv4
-6使用ipv6
-B以批处理模式运行
-C使用压缩
-F指定ssh配置文件
-l指定宽带限制
-o指定使用的ssh选项
-P指定远程主机的端口号
-p保留文件的最后修改时间最后访问时间和权限模式
-q不显示复制进度
-r以递归方式复制。
**scp命令** 用于在Linux下进行远程拷贝文件的命令和它类似的命令有cp不过cp只是在本机进行拷贝不能跨服务器而且scp传输是
加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读read only system时用scp可以帮你把文件移出来。另外scp还非常不
占资源不会提高多少系统负荷在这一点上rsync就远远不及它了。虽然 rsync比scp会快一点但当小文件众多的情况下rsync会
导致硬盘I/O非常高而scp基本不影响系统正常使用
## 选项
```markdown
scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
[-l limit] [-o ssh_option] [-P port] [-S program]
[[user@]host1:]file1 ... [[user@]host2:]file2
-1 使用ssh协议版本1
-2 使用ssh协议版本2
-4 使用ipv4
-6 使用ipv6
-B 以批处理模式运行
-C 使用压缩
-F 指定ssh配置文件
-l 指定宽带限制
-o 指定使用的ssh选项
-P 指定远程主机的端口号
-p 保留文件的最后修改时间,最后访问时间和权限模式
-q 不显示复制进度
-r 以递归方式复制
```
### 参数
* 源文件:指定要复制的源文件。
* 目标文件:目标文件。格式为`user@hostfilename`(文件名为目标文件的名称)。
### 实例
## 实例
从远程复制到本地的scp命令与上面的命令雷同只要将从本地复制到远程的命令后面2个参数互换顺序就行了。

@ -2,12 +2,15 @@
## 说明
**sed** 是一种流编辑器它是文本处理中非常中的工具能够完美的配合正则表达式使用功能不同凡响。处理时把当前处理的行存储在临时缓冲区中称为“模式空间”pattern space接着用sed命令处理缓冲区中的内容处理完成后把缓冲区的内容送往屏幕。接着处理下一行这样不断重复直到文件末尾。文件内容并没有 改变除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件简化对文件的反复操作编写转换程序等。
**sed** 是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存
储在临时缓冲区中称为“模式空间”pattern space接着用sed命令处理缓冲区中的内容处理完成后把缓冲区的内容送往屏幕
接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个
文件;简化对文件的反复操作;编写转换程序等
## 选项
```info
用法: sed [选项]... {脚本(如果没有其他脚本)} [输入文件]...
```markdown
用法: sed [选项] {脚本(如果没有其他脚本)} [输入文件]
-n, --quiet, --silent 取消自动打印模式空间
-e 脚本, --expression=脚本 添加“脚本”到程序的运行列表,指定script处理文本
-f 脚本文件, --file=脚本文件 添加“脚本文件”到程序的运行列表,指定脚本文件处理文本
@ -29,7 +32,7 @@ sed脚本。其他非选项参数被视为输入文件如果没有输入文
### sed命令
```info
```markdown
a\ 在当前行下面插入文本
i\ 在当前行上面插入文本
c\ 把选定的行改为新的文本
@ -57,21 +60,21 @@ W file 写并追加模板块的第一行到file末尾。
# 把注释扩展到下一个换行符以前。
```
## sed替换标记
### sed替换标记
```info
g 表示行内全面替换
p 表示打印行
w 表示把行写入一个文件
x 表示互换模板块中的文本和缓冲区中的文本
```markdown
g 表示行内全面替换
p 表示打印行
w 表示把行写入一个文件
x 表示互换模板块中的文本和缓冲区中的文本
y 表示把一个字符翻译为另外的字符(但是不用于正则表达式)
\1 子串匹配标记
& 已匹配字符串标记
```
## sed元字符集
### sed元字符集
```info
```markdown
^ 匹配行开始,如:/^sed/匹配所有以sed开头的行
$ 匹配行结束,如:/sed$/匹配所有以sed结尾的行
. 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符最后是d
@ -89,12 +92,12 @@ x\{m,n\} 重复字符x至少m次不多于n次/0\{5,10\}/匹配5
## 实例
```sh
```bash
sed -n 's/.*<title\>\.*\<\/title>.*/\1/ip;T;q' file # 输出HTML文件的<title></title>字段中的 内容
sed 's/book/books/' file # 替换操作s命令;替换文本中的字符串
sed -n 's/test/TEST/p' file # -n选项和p命令一起使用表示只打印那些发生替换的行
sed -i 's/book/books/g' file # 直接编辑文件选项-i会匹配file文件中每一行的第一个sed 's/book/books/g' file # 全面替换标记g;使用后缀/g标记会替换每一行中的所有匹配
sed -i 's/book/books/g' file # 直接编辑文件选项-i会匹配file文件中每一行book,g匹配全部替换为books
echo sksksksksksk | sed 's/sk/SK/2g' # 从第2个匹配项开始替换当需要从第N处匹配开始替换时可以使用/Ng
sed 's/book/books/' file # 替换操作s命令;替换文本中的字符串
# 字符/在sed中作为定界符使用也可以使用任意的定界符
sed 's:test:TEXT:g' # 将test替换成TEXT此处定界符为:
@ -107,23 +110,20 @@ sed '2,$d' file # 删除文件的第2行到末尾所有行
sed '$d' file # 删除文件最后一行
sed '/^test/'d file # 删除文件中所有开头是test的行
# 已匹配字符串标记&;正则表达式\w\+匹配每一个单词,使用[&]替换它,&对应于之前所匹配到的单词
echo this is a test line | sed 's/\w\+/[&]/g' # 输出:[this] [is] [a] [test] [line]
echo this is a test line | sed 's/\w\+/[&]/g' # 已匹配字符串标记&;正则表达式\w\+匹配每一个单词,使用[&]替换它,&对应于之前所匹配到的单词,输出:[this] [is] [a] [test] [line]
echo this is digit 7 in a number | sed 's/digit \([0-9]\)/\1/' # 子串匹配标记\1匹配给定样式的其中一部分,输出:this is 7 in a number
sed 's/^192.168.0.1/&localhost/' file # 所有以192.168.0.1开头的行都会被替换成它自已加localhost输出192.168.0.1localhost
# 子串匹配标记\1匹配给定样式的其中一部分
echo this is digit 7 in a number | sed 's/digit \([0-9]\)/\1/' # 输出this is 7 in a number
# 命令中 digit 7被替换成了 7。样式匹配到的子串是 7\(..\) 用于匹配子串,对于匹配到的第一个子串就标记为 **\1** ,依此类推匹配到的第二个结果就是 **\2** ,例如:
echo aaa BBB | sed 's/\([a-z]\+\) \([A-Z]\+\)/\2 \1/' # 输出BBB aaa
sed -n 's/\(love\)able/\1rs/p' file # love被标记为1所有loveable会被替换成lovers并打印出来
# 组合多个表达式
# 组合多个表达式;引用sed表达式可以使用单引号来引用但是如果表达式内部包含变量字符串就需要使用双引号
sed '表达式' | sed '表达式' 等价于sed '表达式;表达式'
# 引用sed表达式可以使用单引号来引用但是如果表达式内部包含变量字符串就需要使用双引号
# 选定行的范围:,(逗号)
sed -n '/test/,/check/p' file # 所有在模板test和check所确定的范围内的行都被打印
sed -n '5,/^test/p' file # 打印从第5行开始到第一个包含以test开始的行之间的所有行
@ -132,8 +132,7 @@ sed '/test/,/west/s/$/aaa bbb/' file # 对于模板test和west之间的行
# 多点编辑e命令
sed -e '1,5d' -e 's/test/check/' file # -e选项允许在同一行里执行多条命令
# 上面sed表达式的第一条命令删除1至5行第二条命令用check替换test。命令的执行顺序对结果有影响。如果两个命令都是替换命令那么第一个替换命令将影响第二个替换命令的结果。
# 和-e 等价的命令是 --expression
sed --expression='s/test/check/' --expression='/love/d' file
sed --expression='s/test/check/' --expression='/love/d' file # 和-e 等价的命令是 --expression
# 从文件读入r命令
sed '/test/r file' filename # file里的内容被读进来显示在与test匹配的行后面如果匹配多行则file的内容将显示在所有匹配行的下面

@ -1,29 +1,22 @@
seq
===
以指定增量从首数开始打印数字到尾数
# **seq**
## 说明
**seq命令** 用于产生从某个数到另外一个数之间的所有整数。
### 语法
**seq命令** 用于产生从某个数到另外一个数之间的所有整数
```
seq [选项]... 尾数
seq [选项]... 首数 尾数
seq [选项]... 首数 增量 尾数
```
## 选项
```
```markdown
用法seq [选项]... 尾数
 seq [选项]... 首数 尾数
 seq [选项]... 首数 增量 尾数
-f, --format=格式 使用printf 样式的浮点格式
-s, --separator=字符串 使用指定字符串分隔数字(默认使用:\n
-w, --equal-width 在列前添加0 使得宽度相同
```
### 实例
## 实例
**-f选项指定格式**

@ -1,151 +1,95 @@
# sort
# **sort**
## 说明
**sort命令** 是在Linux里非常有用它将文件进行排序并将排序结果标准输出。sort命令既可以从特定的文件也可以从stdin中获取输入
**sort命令** 是在Linux里非常有用它将文件进行排序并将排序结果标准输出。sort命令既可以从特定的文件也可以从stdin中获取输入
awk 'EXPRESSION { PROGRAM }' file(s)
```sh
-b忽略每行前面开始出的空格字符
-c检查文件是否已经按照顺序排序
-d排序时处理英文字母、数字及空格字符外忽略其他的字符
-f排序时将小写字母视为大写字母
-i排序时除了040至176之间的ASCII字符外忽略其他的字符
-m将几个排序号的文件进行合并
-M将前面3个字母依照月份的缩写进行排序
-n依照数值的大小排序
-o<输出文件>:将排序后的结果存入制定的文件;
-r以相反的顺序来排序
-t<分隔字符>:指定排序时所用的栏位分隔字符;
+<起始栏位>-<结束栏位>:以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
```
### 实例
```markdown
用法sort [选项]... [文件]...
 sort [选项]... --files0-from=F
Write sorted concatenation of all FILE(s) to standard output.
Mandatory arguments to long options are mandatory for short options too.
排序选项:
-b, --ignore-leading-blanks 忽略每行前面开始出的空格字符
-d, --dictionary-order 只考虑空白区域和字母字符
-f, --ignore-case 忽略字母大小写
-g, --general-numeric-sort compare according to general numerical value
-i, --ignore-nonprinting consider only printable characters
-M, --month-sort compare (unknown) < 'JAN' < ... < 'DEC'
-h, --human-numeric-sort 使用易读性数字(例如: 2K 1G)
-n, --numeric-sort 根据字符串数值比较
-R, --random-sort 根据随机hash 排序
--random-source=文件 从指定文件中获得随机字节
-r, --reverse 逆序输出排序结果
--sort=WORD 按照WORD 指定的格式排序:一般数字-g高可读性-h月份-M数字-n随机-R版本-V
-V, --version-sort 在文本内进行自然版本排序
其他选项:
--batch-size=NMERGE 一次最多合并NMERGE 个输入;如果输入更多则使用临时文件
-c, --check, --check=diagnose-first 检查输入是否已排序,若已有序则不进行操作
-C, --check=quiet, --check=silent 类似-c但不报告第一个无序行
--compress-program=程序 使用指定程序压缩临时文件;使用该程序的-d 参数解压缩文件
--debug 为用于排序的行添加注释,并将有可能有问题的用法输出到标准错误输出
--files0-from=文件 从指定文件读取以NUL 终止的名称,如果该文件被指定为"-"则从标准输入读文件名
-k, --key=KEYDEF sort via a key; KEYDEF gives location and type
-m, --merge merge already sorted files; do not sort
-o, --output=文件 将结果写入到文件而非标准输出
-s, --stable 禁用last-resort 比较以稳定比较算法
-S, --buffer-size=大小 指定主内存缓存大小
-t, --field-separator=分隔符 使用指定的分隔符代替非空格到空格的转换
-T, --temporary-directory=目录 使用指定目录而非$TMPDIR或/tmp作为临时目录可用多个选项指定多个目录
--parallel=N 将同时运行的排序数改变为N
-u, --unique 配合-c严格校验排序不配合-c则只输出一次排序结果
-z, --zero-terminated 以0 字节而非新行作为行尾标志
KEYDEF is F[.C][OPTS][,F[.C][OPTS]] for start and stop position, where F is a
field number and C a character position in the field; both are origin 1, and
the stop position defaults to the line's end. If neither -t nor -b is in
effect, characters in a field are counted from the beginning of the preceding
whitespace. OPTS is one or more single-letter ordering options [bdfgiMhnRrV],
which override global ordering options for that key. If no key is given, use
the entire line as the key.
SIZE may be followed by the following multiplicative suffixes:
内存使用率% 1%b 1、K 1024 (默认)M、G、T、P、E、Z、Y 等依此类推。
如果不指定文件,或者文件为"-",则从标准输入读取数据。
*** 警告 ***
本地环境变量会影响排序结果。
如果希望以字节的自然值获得最传统的排序结果请设置LC_ALL=C。
sort将文件/文本的每一行作为一个单位相互比较比较原则是从首字符向后依次按ASCII码值进行比较最后将他们按升序输出。
```
root@[mail text]# cat sort.txt
aaa:10:1.1
ccc:30:3.3
ddd:40:4.4
bbb:20:2.2
eee:50:5.5
eee:50:5.5
[root@mail text]# sort sort.txt
aaa:10:1.1
bbb:20:2.2
ccc:30:3.3
ddd:40:4.4
eee:50:5.5
eee:50:5.5
```
忽略相同行使用-u选项或者uniq
## 实例
```
[root@mail text]# cat sort.txt
aaa:10:1.1
ccc:30:3.3
ddd:40:4.4
bbb:20:2.2
eee:50:5.5
eee:50:5.5
[root@mail text]# sort -u sort.txt
aaa:10:1.1
bbb:20:2.2
ccc:30:3.3
ddd:40:4.4
eee:50:5.5
或者
[root@mail text]# uniq sort.txt
aaa:10:1.1
ccc:30:3.3
ddd:40:4.4
bbb:20:2.2
eee:50:5.5
```bash
# sort将文件/文本的每一行作为一个单位相互比较比较原则是从首字符向后依次按ASCII码值进行比较最后默认按按升序输出
```
# 忽略相同行使用-u选项或者uniq
sort -u sort.txt
uniq sort.txt
sort的-n、-r、-k、-t选项的使用
```
[root@mail text]# cat sort.txt
AAA:BB:CC
aaa:30:1.6
ccc:50:3.3
ddd:20:4.2
bbb:10:2.5
eee:40:5.4
eee:60:5.1
#将BB列按照数字从小到大顺序排列
[root@mail text]# sort -nk 2 -t: sort.txt
AAA:BB:CC
bbb:10:2.5
ddd:20:4.2
aaa:30:1.6
eee:40:5.4
ccc:50:3.3
eee:60:5.1
#将CC列数字从大到小顺序排列
[root@mail text]# sort -nrk 3 -t: sort.txt
eee:40:5.4
eee:60:5.1
ddd:20:4.2
ccc:50:3.3
bbb:10:2.5
aaa:30:1.6
AAA:BB:CC
sort -nk 2 -t: sort.txt # 将:字符作为分隔符,按其后的第二个字符的数字从小到大排序
# -n是按照数字大小排序-r是以相反顺序-k是指定需要爱排序的栏位-t指定栏位分隔符为冒号
```
**-k选项的具体语法格式**
: << comment
-k选项的语法格式
```
FStart.CStart Modifie,FEnd.CEnd Modifier
-------Start--------,-------End--------
FStart.CStart 选项 , FEnd.CEnd 选项
```
这个语法格式可以被其中的逗号`,`分为两大部分, **Start** 部分和 **End** 部分。Start部分也由三部分组成其中的Modifier部分就是我们之前说过的类似n和r的选项部分。我们重点说说`Start`部分的`FStart`和`C.Start`。`C.Start`也是可以省略的,省略的话就表示从本域的开头部分开始。`FStart.CStart`,其中`FStart`就是表示使用的域,而`CStart`则表示在`FStart`域中从第几个字符开始算“排序首字符”。同理在End部分中你可以设定`FEnd.CEnd`,如果你省略`.CEnd`则表示结尾到“域尾”即本域的最后一个字符。或者如果你将CEnd设定为0(零),也是表示结尾到“域尾”。
从公司英文名称的第二个字母开始进行排序:
```
$ sort -t ' ' -k 1.2 facebook.txt
baidu 100 5000
sohu 100 4500
google 110 5000
guge 50 3000
这个语法格式可以被其中的逗号`,`分为两大部分, **Start** 部分和 **End** 部分。Start部分也由三部分组成其中的Modifier部分
就是我们之前说过的类似n和r的选项部分。我们重点说说`Start`部分的`FStart`和`C.Start`。`C.Start`也是可以省略的,省略的话就
表示从本域的开头部分开始。`FStart.CStart`,其中`FStart`就是表示使用的域,而`CStart`则表示在`FStart`域中从第几个字符开始
算“排序首字符”。同理在End部分中你可以设定`FEnd.CEnd`,如果你省略`.CEnd`,则表示结尾到“域尾”,即本域的最后一个字
符。或者如果你将CEnd设定为0(零),也是表示结尾到“域尾”
comment
```
使用了`-k 1.2`表示对第一个域的第二个字符开始到本域的最后一个字符为止的字符串进行排序。你会发现baidu因为第二个字母是a而名列榜首。sohu和 google第二个字符都是o但sohu的h在google的o前面所以两者分别排在第二和第三。guge只能屈居第四了。
只针对公司英文名称的第二个字母进行排序,如果相同的按照员工工资进行降序排序:
```
$ sort -t ' ' -k 1.2,1.2 -nrk 3,3 facebook.txt
baidu 100 5000
google 110 5000
sohu 100 4500
guge 50 3000
```
由于只对第二个字母进行排序,所以我们使用了`-k 1.2,1.2`的表示方式,表示我们“只”对第二个字母进行排序。(如果你问“我使用`-k 1.2`怎么不行当然不行因为你省略了End部分这就意味着你将对从第二个字母起到本域最后一个字符为止的字符串进行排序。对于员工工资进行排 序,我们也使用了`-k 3,3`这是最准确的表述表示我们“只”对本域进行排序因为如果你省略了后面的3就变成了我们“对第3个域开始到最后一个域位置的内容进行排序” 了。

@ -1,111 +1,46 @@
ssh
===
openssh套件中的客户端连接工具
# **ssh**
## 说明
**ssh命令** 是openssh套件中的客户端连接工具可以给予ssh加密协议实现安全的远程登录服务器。
### 语法
```
ssh(选项)(参数)
```
```
-1强制使用ssh协议版本1
-2强制使用ssh协议版本2
-4强制使用IPv4地址
-6强制使用IPv6地址
-A开启认证代理连接转发功能
-a关闭认证代理连接转发功能
-b使用本机指定地址作为对应连接的源ip地址
-C请求压缩所有数据
-F指定ssh指令的配置文件
-f后台执行ssh指令
-g允许远程主机连接主机的转发端口
-i指定身份文件
-l指定连接远程服务器登录用户名
-N不执行远程指令
-o指定配置选项
-p指定远程服务器上的端口
-q静默模式
-X开启X11转发功能
-x关闭X11转发功能
-y开启信任X11转发功能。
```
### 参数
* 远程主机指定要连接的远程ssh服务器
* 指令要在远程ssh服务器上执行的指令。
### 实例
```
# ssh 用户名@远程服务器地址
ssh user1@172.24.210.101
**ssh命令** 是openssh套件中的客户端连接工具可以给予ssh加密协议实现安全的远程登录服务器
## 选项
```markdown
ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
[-D [bind_address:]port] [-E log_file] [-e escape_char]
[-F configfile] [-I pkcs11] [-i identity_file]
[-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec]
[-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address]
[-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]
[user@]hostname [command]
-1 强制使用ssh协议版本1
-2 强制使用ssh协议版本2
-4 强制使用IPv4地址
-6 强制使用IPv6地址
-A 开启认证代理连接转发功能
-a 关闭认证代理连接转发功能
-b 使用本机指定地址作为对应连接的源ip地址
-C 请求压缩所有数据
-F 指定ssh指令的配置文件
-f 后台执行ssh指令
-g 允许远程主机连接主机的转发端口
-i 指定身份文件
-l 指定连接远程服务器登录用户名
-N 不执行远程指令
-o 指定配置选项
-p 指定远程服务器上的端口
-q 静默模式
-X 开启X11转发功能
-x 关闭X11转发功能
-y 开启信任X11转发功能
```
### 背后故事
> 英文Tatu Ylonen
> 编译Linux中国/kenxx
> 来源https://linux.cn/article-8476-1.html
为什么 SSH安全终端的端口号是 22 呢这不是一个巧合这其中有个我Tatu YlonenSSH 协议的设计者)未曾诉说的故事。
#### 将 SSH 协议端口号设为 22 的故事
1995 年春我编写了 SSH 协议的最初版本,那时候 telnet 和 FTP 正被广泛使用。
当时我设计 SSH 协议想着是为了替代 telnet端口 23和 ftp端口21两个协议的而端口 22 是空闲的。我想当然地就选择了夹在 telnet 和 ftp 的端口中间的数字。我觉得端口号虽然是个小事但似乎又存在着某种信念。但我到底要怎么拿到那个端口号呢?我未曾拥有过任何一个端口号,但我却认识几个拥有端口号的人!
在那时取得端口号的事情其实说来挺简单的。毕竟当时的因特网Internet并不是很大是因特网爆炸的早期。端口号分配的活儿是 IANAInternet Assigned Numbers Authority互联网数字分配机构干的。在那时这机构可相当于是因特网先驱 [Jon Postel](https://en.wikipedia.org/wiki/Jon_Postel) 和 [Joyce K. Reynolds](https://en.wikipedia.org/wiki/Joyce_K._Reynolds) 一般的存在。Jon 参与编写了多项主要的协议标准,例如 IPRFC 791、ICMPRFC 792和 TCPRFC 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
```bash
1995 年 7 月 12 日上午 2 点 21 分,我给我在赫尔辛基理工大学的测试者们宣布了 SSH 的最后 beta 版本。当日下午 5 点 23 分,我给测试者们宣布了 ssh-1.0.0 版本。1995 年 7 月 12 日,下午 5 点 51 分,我将一份 SSH安全终端的宣告发给了 cypherpunks@toad.com 的邮件列表,此外我还将其发给了一些新闻组、邮件列表和一些在因特网上讨论相关话题的人们。
#### 如何更改 SSH 服务的端口号

@ -2,9 +2,14 @@
## 说明
**strace命令** 是一个集诊断、调试、统计与一体的工具我们可以使用strace对应用的系统调用和信号传递的跟踪结果来对应用进行分析以达到解决问题或者是了解应用工作过程的目的。当然strace与专业的调试工具比如说gdb之类的是没法相比的因为它不是一个专业的调试器。
**strace命令** 是一个集诊断、调试、统计与一体的工具我们可以使用strace对应用的系统调用和信号传递的跟踪结果来对应用进行
分析以达到解决问题或者是了解应用工作过程的目的。当然strace与专业的调试工具比如说gdb之类的是没法相比的因为它不是一个
专业的调试器
strace的最简单的用法就是执行一个指定的命令在指定的命令结束之后它也就退出了。在命令执行的过程中strace会记录和解析命令进程的所有系统调用以及这个进程所接收到的所有的信号值。
strace的最简单的用法就是执行一个指定的命令在指定的命令结束之后它也就退出了。在命令执行的过程中strace会记录和解析命令
进程的所有系统调用以及这个进程所接收到的所有的信号值
## 选项
```markdown
-c 统计每一系统调用的所执行的时间,次数和出错的次数等
@ -26,7 +31,9 @@ strace的最简单的用法就是执行一个指定的命令在指定的命
-xx 所有字符串以十六进制形式输出
-a column 设置返回值的输出位置.默认为40
-e expr 指定一个表达式,用来控制如何跟踪.格式:[qualifier=][!]value1[,value2]..
qualifier只能是 trace,abbrev,verbose,raw,signal,read,write其中之一.value是用来限定的符号或数字.默认的 qualifier是 trace.感叹号是否定符号.例如:-eopen等价于 -e trace=open,表示只跟踪open调用.而-etrace!=open 表示跟踪除了open以外的其他调用.有两个特殊的符号 all 和 none. 注意有些shell使用!来执行历史记录里的命令,所以要使用\\
qualifier只能是 trace,abbrev,verbose,raw,signal,read,write其中之一.value是用来限定的符号或数字.默认的 qualifier
是 trace感叹号是否定符号.例如:-eopen等价于 -e trace=open,表示只跟踪open调用.而-etrace!=open 表示跟踪除了open以外
的其他调用.有两个特殊的符号 all 和 none. 注意有些shell使用!来执行历史记录里的命令,所以要使用\\
-e trace=set 只跟踪指定的系统 调用.例如:-e trace=open,close,rean,write表示只跟踪这四个系统调用.默认的为set=all
-e trace=file 只跟踪有关文件操作的系统调用
-e trace=process 只跟踪有关进程控制的系统调用

@ -1,50 +1,41 @@
strings
===
在对象文件或二进制文件中查找可打印的字符串
# strings
## 说明
**strings命令** 在对象文件或二进制文件中查找可打印的字符串。字符串是4个或更多可打印字符的任意序列以换行符或空字符结束。 strings命令对识别随机对象文件很有用。
### 语法
**strings命令** 在对象文件或二进制文件中查找可打印的字符串。字符串是4个或更多可打印字符的任意序列以换行符或空字符结束,
strings命令对识别随机对象文件很有用
```
strings [ -a ] [ - ] [ -o ] [ -t Format ] [ -n Number ] [ -Number ] [file ... ]
```
## 选项
```
-a --all扫描整个文件而不是只扫描目标文件初始化和装载段
-f print-file-name在显示字符串前先显示文件名
-n bytes=[number]找到并且输出所有NUL终止符序列
- 设置显示的最少的字符数默认是4个字符
-t --radix={o,d,x} :输出字符的位置,基于八进制,十进制或者十六进制
-o :类似--radix=o
-T --target= :指定二进制文件格式
-e --encoding={s,S,b,l,B,L} :选择字符大小和排列顺序:s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit
@ :读取中选项
```
```markdown
用法strings [选项] [文件]
打印 [文件] (默认为标准输入) 中可打印的字符串
### 实例
-a - --all 扫描整个文件而不是只扫描目标文件初始化和装载段 [default]
-d --data Only scan the data sections in the file
-f --print-file-name 在显示字符串前先显示文件名
-n --bytes=[number] 找到并且输出所有NUL终止符序列
-<number> 设置显示的最少的字符数默认是4个字符(default 4).
-t --radix={o,d,x} 输出字符的位置,基于八进制,十进制或者十六进制
-w --include-all-whitespace Include all whitespace as valid string characters
-o An alias for --radix=o
-T --target=<BFDNAME> 指定二进制文件格式
-e --encoding={s,S,b,l,B,L} 选择字符大小和排列顺序:s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit
-s --output-separator=<string> String used to separate strings in output.
@<file><file>读取选项
列出ls中所有的ASCII文本
strings支持的目标 elf64-x86-64 elf32-i386 elf32-iamcu 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
```
strings /bin/ls
```
列出ls中所有的ASCII文本
## 实例
```
```bash
# 列出ls中所有的ASCII文本
strings /bin/ls
cat /bin/ls strings
```
查找ls中包含libc的字符串不区分大小写
strings /bin/ls | grep -i libc # 查找ls中包含libc的字符串不区分大小写
```
strings /bin/ls | grep -i libc
```

@ -1,173 +1,73 @@
sudo
===
以其他身份来执行命令
# **sudo**
## 说明
**sudo命令** 用来以其他身份来执行命令预设的身份为root。在`/etc/sudoers`中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo则会发出警告的邮件给管理员。用户使用sudo时必须先输入密码之后有5分钟的有效期限超过期限则必须重新输入密码。
### 语法
```
sudo(选项)(参数)
```
```
-b在后台执行指令
-h显示帮助
-H将HOME环境变量设为新身份的HOME环境变量
-k结束密码的有效期限也就是下次再执行sudo时便需要输入密码
-l列出目前用户可执行与无法执行的指令
-p改变询问密码的提示符号
-s<shell>执行指定的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的日志功能不是自动的必须由管理员开启。这样来做
```
**sudo命令**用来以其他身份来执行命令预设身份为root。在`/etc/sudoers`中设置可执行sudo指令的用户。若其未经授权的用户企图
使用sudo则会发出警告的邮件给管理员。用户使用sudo时必须先输入密码之后有5分钟的有效期限超过期限则必须重新输入密码
## 选项
```markdown
sudo - 以其他用户身份执行一条命令
sudo -h | -K | -k | -V
sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]
sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command]
sudo [-AbEHknPS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] [VAR=value] [-i|-s] [<command>]
sudo -e [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] file ...
选项:
-A, --askpass 使用助手程序进行密码提示
-b, --background 在后台运行命令
-C, --close-from=num 关闭所有 >= num 的文件描述符
-E, --preserve-env 在执行命令时保留用户环境
--preserve-env=list 保留特定的环境变量
-e, --edit 编辑文件而非执行命令
-g, --group=group 以指定的用户组或 ID 执行命令
-H, --set-home 将 HOME 变量设为目标用户的主目录。
-h, --help 显示帮助消息并退出
-h, --host=host 在主机上运行命令(如果插件支持)
-i, --login 以目标用户身份运行一个登录 shell可同时指定一条命令
-K, --remove-timestamp 完全移除时间戳文件
-k, --reset-timestamp 无效的时间戳文件
-l, --list 列出用户权限或检查某个特定命令;对于长格式,使用两次
-n, --non-interactive 非交互模式,不提示
-P, --preserve-groups 保留组向量,而非设置为目标的组向量
-p, --prompt=prompt 使用指定的密码提示
-r, --role=role 以指定的角色创建 SELinux 安全环境
-S, --stdin 从标准输入读取密码
-s, --shell 以目标用户运行 shell可同时指定一条命令
-t, --type=type 以指定的类型创建 SELinux 安全环境
-T, --command-timeout=timeout 在达到指定时间限制后终止命令
-U, --other-user=user 在列表模式中显示用户的权限
-u, --user=user 以指定用户或 ID 运行命令(或编辑文件)
-V, --version 显示版本信息并退出
-v, --validate 更新用户的时间戳而不执行命令
-- 停止处理命令行参数
```
## 实例
```bash
: << comment
配置sudo必须通过编辑`/etc/sudoers`文件而且只有超级用户才可修改它还必须使用visudo编辑。之所以使用visudo有两个原因
是能够防止两个用户同时修改二是它也能进行有限的语法检查。所以即使只有你一个超级用户你也最好用visudo来检查一下语法
visudo默认的是在vi里打开配置文件用vi来修改文件。我们可以在编译时修改这个默认项。visudo不会擅自保存带有语法错误的配置文
件,它会提示你出现的问题,并询问该如何处理
此时有三种选择键入“e”重新编辑键入“x”不保存退出键入“Q”退出并保存。选择Q那么sudo将不会再运行直到错误被纠正
comment
# 日志与安全,sudo不仅可以记录日志还能在有必要时向系统管理员报告。但sudo的日志功能不是自动的必须由管理员开启
touch /var/log/sudo
vi /etc/syslog.conf
```
在syslog.conf最后面加一行必须用tab分割开并保存
```
# 编辑/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记录日志并不是很忠实
# sudo记录日志并不是很完善,重定向没有被记录,但也有个好处,下面的手段不会得逞:
sudo ls /root > /etc/shadow # 提示bash: /etc/shadow: 权限不够
# sudo 有自己的方式来保护安全。以root的身份执行`sudo-V`查看一下sudo的设置。因为考虑到安全问题一部分环境变量并没有传
# 递给sudo后面的命令或者被检查后再传递的比如PATHHOMESHELL等。当然你也可以通过sudoers来配置这些环境变量
```
[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后面的命令或者被检查后再传递的比如PATHHOMESHELL等。当然你也可以通过sudoers来配置这些环境变量。

@ -6,9 +6,7 @@
注意如果表示bytes或lines的K值之前有一个”+”号则从文件开头的第K项开始显示K值后缀b表示512b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024,GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y
```info
```markdown
--c, --bytes=K 输出文件尾部的第KK为整数个字节内容
-f, --follow[={name|descriptor}] 显示文件最新追加的内容。“name”表示以文件名的方式监视文件的变化。“-f”与“-fdescriptor”等效
-F与选项“-follow=name --retry"连用时功能相同
@ -20,8 +18,10 @@
## 实例
```sh
```bash
tail file # 显示文件file的最后10行
tail -n +20 file # 显示文件file的内容从第20行至文件末尾
tail -c 10 file # 显示文件file的最后10个字符
tail -5 file # 显示file倒数第五行
```

@ -2,15 +2,16 @@
## 说明
**tar命令** 可以为linux的文件和目录创建档案。利用tar可以为某一特定文件创建档案备份文件也可以在档案中改变文件或者向档案中加入新的文件。tar最初被用来在磁带上创建档案现在用户可以在任何设备上创建档案。利用tar命令可以把一大堆的文件和目录全部打包成一个文件这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。
**tar命令** 可以为linux的文件和目录创建档案。利用tar可以为某一特定文件创建档案备份文件也可以在档案中改变文件
者向档案中加入新的文件。tar最初被用来在磁带上创建档案现在用户可以在任何设备上创建档案。利用tar命令可以把一大堆的文
件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的
首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。
首先要弄清两个概念:打包和压缩。打包是指将文件或目录变成一个总的文件,压缩则是将文件通过一些压缩算法变成一个小文件
为什么要区分这两个概念呢这源于Linux中很多压缩程序只能针对一个文件进行压缩这样当你想要压缩一大堆文件时你得先将这一大堆文件先打成一个包tar命令然后再用压缩程序进行压缩gzip bzip2命令
为什么要区分这两个概念呢这源于Linux中很多压缩程序只能针对一个文件进行压缩这样当你想要压缩一大堆文件时你得先将这一
大堆文件先打成一个包tar命令然后再用压缩程序进行压缩gzip bzip2命令
```info
```markdown
主操作模式:
-A, --catenate, --concatenate 追加 tar 文件至归档
-c, --create 创建一个新归档
@ -261,15 +262,20 @@ clocale
--rsh-command=/usr/bin/ssh
```
```sh
## 实例
```bash
# 在选项`f`之后的文件档名是自己取的,我们习惯上都用.tar来作为辨识。如果加`z`选项,则以.tar.gz或.tgz来代表gzip压缩过的tar
# 包;如果加`j`选项,则以.tar.bz2来作为tar包名
# 下面的参数-f是必须的,-f: 使用档案名字,切记:这个参数是最后一个参数,后面只能接档案名
tar -cf all.tar *.jpg # 这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包-f指定包的文件名
tar -rf all.tar *.gif # 这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思
tar -uf all.tar logo.gif # 这条命令是更新原来tar包all.tar中logo.gif文件-u是表示更新文件的意思
tar -tf all.tar # 这条命令是列出all.tar包中所有文件-t是列出文件的意思
tar -cf all.tar *.jpg # 这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包-f指定包的文件名
tar -rf all.tar *.gif # 这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思
tar -uf all.tar logo.gif # 这条命令是更新原来tar包all.tar中logo.gif文件-u是表示更新文件的意思
tar -tf all.tar # 这条命令是列出all.tar包中所有文件-t是列出文件的意思
```
```sh
```markdown
# 各种格式的压缩及解压
## zip格式
压缩: zip -r [目标文件名].zip [原文件/目录名]
解压: unzip [原文件名].zip
@ -346,36 +352,31 @@ jar -cvfm [目标文件名].jar META-INF/MANIFEST.MF [原文件名/目录名]
解压7z x [原文件名].7z
这个7z解压命令支持rar格式
7z x [原文件名].rar
```
## 其它例子
```bash
# 将文件全部打包成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 压缩
tar -zxvf log.tar.gz # 将tar包解压缩
tar -ztvf log.tar.gz # 查阅上述tar包内有哪些文件选项z表示由gzip压缩的
tar -zxvf /opt/soft/test/log30.tar.gz log2013.log # 在预设的情况下,我们可以将压缩档在任何地方解开的;只将tar内的部分文件解压出来
tar -zcvpf log.tar.gz archive-$(date +%Y%m%d).log # 文件备份下来,并且保存其权限;这个`-p`的属性是很重要的,尤其是当您要保留原本文件的属性时。在文件夹当中,比某个日期新的文件才备份
tar -c dir/ | gzip | gpg -c | ssh user@remote 'dd of=dir.tar.gz.gpg' # 将目录dir/压缩打包并放到远程机器上
tar -c /dir/to/copy | cd /where/to/ && tar -x -p # 拷贝目录copy/到目录/where/to/并保持文件属性
tar -c /dir/to/copy | ssh -C user@remote 'cd /where/to/ && tar -x -p' # 拷贝目录copy/到远程目录/where/to/并保持文件属性
```
find dir/ -name '*.txt' | tar -c --files-from=- | bzip2 > dir_txt.tar.bz2 # 将目录dir及其子目录所有txt文件打包并用bzip2压缩
tar --exclude scf/service -zcvf scf.tar.gz scf/* # 备份文件夹内容时排除部分文件
tar -xvf log.tar.gz --wildcards "*.txt" # 解压以txt结尾的文件
tar -czwf log.tar.gz /dir/* # 将dir目录下所有文件压缩w选项表示每个文件添加到存档之前要求确认
tar -cvWf log.tar /dir/ # 验证压缩包中的文件W选项表示验证
tar -rvf log.tar.gz test.log # 将test.log文件添加到已存在的压缩包内
```sh
# 在选项`f`之后的文件档名是自己取的,我们习惯上都用.tar来作为辨识。如果加`z`选项,则以.tar.gz或.tgz来代表gzip压缩过的tar包如果加`j`选项,则以.tar.bz2来作为tar包名
tar -ztvf log.tar.gz # 查阅上述tar包内有哪些文件
# 由于我们使用 gzip 压缩的log.tar.gz所以要查阅log.tar.gz包内的文件时就得要加上`z`这个选项了
tar -zxvf /opt/soft/test/log.tar.gz # 将tar包解压缩
# 在预设的情况下,我们可以将压缩档在任何地方解开的;只将tar内的部分文件解压出来
tar -zxvf /opt/soft/test/log30.tar.gz log2013.log
# 可以通过`tar -ztvf`来查阅tar包内的文件名称如果单只要一个文件就可以透过这个方式来解压部分文件
tar -zcvpf log31.tar.gz log2014.log log2015.log log2016.log # 文件备份下来,并且保存其权限;这个`-p`的属性是很重要的,尤其是当您要保留原本文件的属性时。在文件夹当中,比某个日期新的文件才备份
tar -N "2012/11/13" -zcvf log17.tar.gz test
tar --exclude scf/service -zcvf scf.tar.gz scf/* # 备份文件夹内容是排除部分文件
# 其实最简单的使用 tar就只要记忆底下的方式即可
tar -jcv -f filename.tar.bz2 # 要被压缩的文件或目录名称
tar -jtv -f filename.tar.bz2 # 要查询的压缩文件
tar -jxv -f filename.tar.bz2 -C # 要解压缩的目录
tar -jcvf filename.tar.bz2 # 要被压缩的文件或目录名称
tar -jtvf filename.tar.bz2 # 要查询的压缩文件
tar -jxvf filename.tar.bz2 -C dir # 解压缩到dir目录
```

@ -2,20 +2,21 @@
## 说明
**top命令** 可以实时动态地查看系统的整体运行情况是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面用热键可以管理。
**top命令** 可以实时动态地查看系统的整体运行情况是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提
供的互动式界面,用热键可以管理
```markdown
-b:以批处理模式操作;
-c:显示完整的治命令;
-d:屏幕刷新间隔时间;
-I:忽略失效过程;
-s:保密模式;
-S:累积模式;
-i<时间>:设置间隔时间;
-u<用户名>:指定用户名;
-p<进程号>:指定进程;
-n<次数>:循环显示的次数。
-k:关闭指定进程号
-b 以批处理模式操作
-c 显示完整的治命令
-d 屏幕刷新间隔时间
-I 忽略失效过程
-s 保密模式
-S 累积模式
-i<时间> 设置间隔时间
-u<用户名> 指定用户名
-p<进程号> 指定进程
-n<次数> 循环显示的次数
-k 关闭指定进程号
```
## top交互命令

@ -4,103 +4,72 @@
**tr命令** 可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符,经常用来编写优美的单行命令,作用很强大
### 语法
```
tr(选项)(参数)
```
```
-c或——complerment取代所有不属于第一字符集的字符
-d或——delete删除所有属于第一字符集的字符
-s或--squeeze-repeats把连续重复的字符以单独一个字符表示
-t或--truncate-set1先删除第一字符集较第二字符集多出的字符。
```
### 参数
* 字符集1指定要转换或删除的原字符集。当执行转换操作时必须使用参数“字符集2”指定转换的目标字符集。但执行删除操作时不需要参数“字符集2”
* 字符集2指定要转换成的目标字符集。
### 实例
将输入字符由大写转换为小写:
```
echo "HELLO WORLD" | tr 'A-Z' 'a-z'
hello world
```
'A-Z' 和 'a-z'都是集合,集合是可以自己制定的,例如:'ABD-}'、'bB.,'、'a-de-h'、'a-c0-9'都属于集合,集合里可以使用'\n'、'\t'可以可以使用其他ASCII字符。
使用tr删除字符
```
echo "hello 123 world 456" | tr -d '0-9'
hello world
```
将制表符转换为空格:
```
cat text | tr '\t' ' '
```
字符集补集,从输入文本中将不在补集中的所有字符删除:
```
## 选项
```markdown
用法tr [选项]... SET1 [SET2]
从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。
-c, -C, --complement 首先补足SET1,即取代所有不属于第一字符集的字符
-d, --delete 删除匹配SET1 的内容,并不作替换
-s, --squeeze-repeats 如果匹配于SET1 的字符在输入序列中存在连续的重复,在替换时会被统一缩为一个字符的长度
-t, --truncate-set1 先将SET1 的长度截为和SET2 相等
SET 是一组字符串,一般都可按照字面含义理解。解析序列如下:
\NNN 八进制值为NNN 的字符(1 至3 个数位)
\\ 反斜杠
\a 终端鸣响
\b 退格
\f 换页
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
字符1-字符2 从字符1 到字符2 的升序递增过程中经历的所有字符
[字符*] 在SET2 中适用指定字符会被连续复制直到吻合设置1 的长度
[字符*次数] 对字符执行指定次数的复制,若次数以 0 开头则被视为八进制数
[:alnum:] 所有的字母和数字
[:alpha:] 所有的字母
[:blank:] 所有呈水平排列的空白字符
[:cntrl:] 所有的控制字符
[:digit:] 所有的数字
[:graph:] 所有的可打印字符,不包括空格
[:lower:] 所有的小写字母
[:print:] 所有的可打印字符,包括空格
[:punct:] 所有的标点字符
[:space:] 所有呈水平或垂直排列的空白字符
[:upper:] 所有的大写字母
[:xdigit:] 所有的十六进制数
[=字符=] 所有和指定字符相等的字符
使用方式: tr '[:lower:]' '[:upper:]'
仅在SET1 和SET2 都给出,同时没有-d 选项的时候才会进行替换。
仅在替换时才可能用到-t 选项。如果需要SET2 将被通过在末尾添加原来的末字符的方式
补充到同SET1 等长。SET2 中多余的字符将被省略。只有[:lower:] 和[:upper:]
以升序展开字符在用于替换时的SET2 中以成对表示大小写转换。-s 作用于SET1既不
替换也不删除否则在替换或展开后使用SET2 缩减。
```
## 实例
```bash
echo "HELLO WORLD" | tr 'A-Z' 'a-z' # 将输入字符由大写转换为小写
echo "hello 123 world 456" | tr -d '0-9' # 使用tr删除字符
cat text | tr '\t' ' ' # 将制表符转换为空格
# 字符集补集从输入文本中将不在补集中的所有字符删除此例中补集中包含了数字0~9、空格和换行符\n所以没有被删除其他字
# 符全部被删除了
echo aa.,a 1 b#$bb 2 c*/cc 3 ddd 4 | tr -d -c '0-9 \n'
1 2 3 4
```
此例中补集中包含了数字0~9、空格和换行符\n所以没有被删除其他字符全部被删除了。
用tr压缩字符可以压缩输入中重复的字符
```
echo "thissss is a text linnnnnnne." | tr -s ' sn'
this is a text line.
```
巧妙使用tr做数字相加操作
```
echo 1 2 3 4 5 6 7 8 9 | xargs -n1 | echo $[ $(tr '\n' '+') 0 ]
```
删除Windows文件“造成”的'^M'字符:
echo "thissss is a text linnnnnnne." | tr -s ' sn' # 用tr压缩字符可以压缩输入中重复的字符
echo 1 2 3 4 5 6 7 8 9 | xargs -n1 | echo $[ $(tr '\n' '+') 0 ] # 巧妙使用tr做数字相加操作
```
# 删除Windows文件“造成”的'^M'字符
cat file | tr -s "\r" "\n" > new_file
cat file | tr -d "\r" > new_file
```
**tr可以使用的字符类**
```
[:alnum:]:字母和数字
[:alpha:]:字母
[:cntrl:]:控制(非打印)字符
[:digit:]:数字
[:graph:]:图形字符
[:lower:]:小写字母
[:print:]:可打印字符
[:punct:]:标点符号
[:space:]:空白字符
[:upper:]:大写字母
[:xdigit:]:十六进制字符
```
使用方式:
```
tr '[:lower:]' '[:upper:]'
```

@ -1,29 +1,26 @@
ulimit
===
控制shell程序的资源
# **ulimit**
## 说明
**ulimit命令** 用来限制系统用户对shell资源的访问。如果不懂什么意思下面一段内容可以帮助你理解
假设有这样一种情况,当一台 Linux 主机上同时登陆了 10 个人,在系统资源无限制的情况下,这 10 个用户同时打开了 500 个文档,而假设每个文档的大小有 10M这时系统的内存资源就会受到巨大的挑战。
**ulimit命令** 用来限制系统用户对shell资源的访问。如果不懂什么意思下面一段内容可以帮助你理解
而实际应用的环境要比这种假设复杂的多,例如在一个嵌入式开发环境中,各方面的资源都是非常紧缺的,对于开启文件描述符的数量,分配堆栈的大 小CPU 时间,虚拟内存大小,等等,都有非常严格的要求。资源的合理限制和分配,不仅仅是保证系统可用性的必要条件,也与系统上软件运行的性能有着密不可分的联 系。这时ulimit 可以起到很大的作用,它是一种简单并且有效的实现资源限制的方式。
假设有这样一种情况,当一台 Linux 主机上同时登陆了 10 个人,在系统资源无限制的情况下,这 10 个用户同时打开了 500 个文档,
而假设每个文档的大小有 10M这时系统的内存资源就会受到巨大的挑战
ulimit 用于限制 shell 启动进程所占用的资源支持以下各种类型的限制所创建的内核文件的大小、进程数据块的大小、Shell 进程创建文件的大小、内存锁住的大小、常驻内存集的大小、打开文件描述符的数量、分配堆栈的最大大小、CPU 时间、单个用户的最大线程数、Shell 进程所能使用的最大虚拟内存。同时,它支持硬资源和软资源的限制。
而实际应用的环境要比这种假设复杂的多,例如在一个嵌入式开发环境中,各方面的资源都是非常紧缺的,对于开启文件描述符的数量,
分配堆栈的大 小CPU 时间,虚拟内存大小,等等,都有非常严格的要求。资源的合理限制和分配,不仅仅是保证系统可用性的必要条
件,也与系统上软件运行性能有着密不可分的联 系。这时ulimit 可以起到很大的作用,它是一种简单并且有效的实现资源限制的方式
作为临时限制ulimit 可以作用于通过使用其命令登录的 shell 会话,在会话终止时便结束限制,并不影响于其他 shell 会话。而对于长期的固定限制ulimit 命令语句又可以被添加到由登录 shell 读取的文件中,作用于特定的 shell 用户。
ulimit 用于限制 shell 启动进程所占用的资源支持以下各种类型的限制所创建的内核文件的大小、进程数据块的大小、Shell 进程
创建文件的大小、内存锁住的大小、常驻内存集的大小、打开文件描述符的数量、分配堆栈的最大大小、CPU 时间、单个用户的最大线程
数、Shell 进程所能使用的最大虚拟内存。同时,它支持硬资源和软资源的限制
### 语法
```
ulimit(选项)
```
作为临时限制ulimit 可以作用于通过使用其命令登录的 shell 会话,在会话终止时便结束限制,并不影响于其他 shell 会话。而对
于长期的固定限制ulimit 命令语句又可以被添加到由登录 shell 读取的文件中,作用于特定的 shell 用户
## 选项
```
```markdown
-a显示目前资源限制的设定
-c <core>设定core文件的最大值单位为区块
-d <数据节区大小>程序数据节区的最大值单位为KB
@ -39,26 +36,30 @@ ulimit(选项)
-v <虚拟内存大小>指定可使用的虚拟内存上限单位为KB。
```
### 实例
## 实例
```
[root@localhost ~]# ulimit -a
core file size (blocks, -c) 0 #core文件的最大值为100 blocks。
data seg size (kbytes, -d) unlimited #进程的数据段可以任意大。
```bash
ulimit -a
: << comment
# 输出详解:
core file size (blocks, -c) 0 #core文件的最大值为100 blocks
data seg size (kbytes, -d) unlimited #进程的数据段可以任意大
scheduling priority (-e) 0
file size (blocks, -f) unlimited #文件可以任意大。
pending signals (-i) 98304 #最多有98304个待处理的信号
max locked memory (kbytes, -l) 32 #一个任务锁住的物理内存的最大值为32KB
max memory size (kbytes, -m) unlimited #一个任务的常驻物理内存的最大值
open files (-n) 1024 #一个任务最多可以同时打开1024的文件
pipe size (512 bytes, -p) 8 #管道的最大空间为4096字节
POSIX message queues (bytes, -q) 819200 #POSIX的消息队列的最大值为819200字节
file size (blocks, -f) unlimited #文件可以任意大
pending signals (-i) 98304 #最多有98304个待处理的信号
max locked memory (kbytes, -l) 32 #一个任务锁住的物理内存的最大值为32KB
max memory size (kbytes, -m) unlimited #一个任务的常驻物理内存的最大值
open files (-n) 1024 #一个任务最多可以同时打开1024的文件
pipe size (512 bytes, -p) 8 #管道的最大空间为4096字节
POSIX message queues (bytes, -q) 819200 #POSIX的消息队列的最大值为819200字节
real-time priority (-r) 0
stack size (kbytes, -s) 10240 #进程的栈的最大值为10240字节。
cpu time (seconds, -t) unlimited #进程使用的CPU时间。
max user processes (-u) 98304 #当前用户同时打开的进程包括线程的最大个数为98304。
virtual memory (kbytes, -v) unlimited #没有限制进程的最大地址空间。
file locks (-x) unlimited #所能锁住的文件的最大个数没有限制。
stack size (kbytes, -s) 10240 #进程的栈的最大值为10240字节
cpu time (seconds, -t) unlimited #进程使用的CPU时间
max user processes (-u) 98304 #当前用户同时打开的进程包括线程的最大个数为98304
virtual memory (kbytes, -v) unlimited #没有限制进程的最大地址空间
file locks (-x) unlimited #所能锁住的文件的最大个数没有限制
comment
```

@ -1,75 +1,28 @@
uname
===
显示Linux系统信息
# **uname**
## 说明
**uname命令** 用于打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)
**uname命令** 用于打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)
### 语法
## 选项
```
uname(选项)
```
```markdown
用法uname [选项]
输出一组系统信息。如果不跟随选项,则视为只附加-s 选项
-a, --all 以如下次序输出所有信息。其中若-p 和-i 的探测结果不可知则被省略
-s, --kernel-name 输出内核名称
-n, --nodename 输出网络节点上的主机名
-r, --kernel-release 输出内核发行号
-v, --kernel-version 输出内核版本
-m, --machine 输出主机的硬件架构名称
-p, --processor 输出处理器类型或"unknown"
-i, --hardware-platform 输出硬件平台或"unknown"
-o, --operating-system 输出操作系统名称
```
-a或--all显示全部的信息
-m或--machine显示电脑类型
-n或-nodename显示在网络上的主机名称
-r或--release显示操作系统的发行编号
-s或--sysname显示操作系统名称
-v显示操作系统的版本
-p或--processor输出处理器类型或"unknown"
-i或--hardware-platform输出硬件平台或"unknown"
-o或--operating-system输出操作系统名称
--help显示帮助
--version显示版本信息。
```
### 实例
## 实例
使用uname命令查看全部信息
```bash
```
[root@localhost ~]# uname #单独使用uname命令时相当于uname -s
Linux
[root@localhost ~]# uname -a
Linux localhost 2.6.18-348.6.1.el5 #1 SMP Tue May 21 15:34:22 EDT 2013 i686 i686 i386 GNU/Linux
[root@localhost ~]# uname -m
i686
[root@localhost ~]# uname -n
localhost
[root@localhost ~]# uname -r
2.6.18-4-686
[root@localhost ~]# uname -s
Linux
[root@localhost ~]# uname -v
#1 SMP Tue May 21 15:34:22 EDT 2013
[root@localhost ~]# uname -p
i686
[root@localhost ~]# uname -i
i386
[root@localhost ~]# uname -o
GNU/Linux
[root@localhost ~]# uname --version
uname (GNU coreutils) 5.97
Copyright (C) 2006 free Software Foundation, Inc.
这是自由软件。您可以按照 GNU GPL 协议 <http://www.gnu.org/licenses/gpl.html> 的条款再发布此软件的副本,但我们无法保证相关法律不对这一情形进行限制。
由 David MacKenzie 编写。
```

@ -1,62 +1,45 @@
uniq
===
报告或忽略文件中的重复行
# **uniq**
## 说明
**uniq命令** 用于报告或忽略文件中的重复行一般与sort命令结合使用。
### 语法
**uniq命令** 用于报告或忽略文件中的重复行一般与sort命令结合使用
```
uniq(选项)(参数)
```
## 选项
```markdown
用法uniq [选项]... [文件]
Filter adjacent matching lines from INPUT (or standard input),
writing to OUTPUT (or standard output).
```
-c或——count在每列旁边显示该行重复出现的次数
-d或--repeated仅显示重复出现的行列
-f<栏位>或--skip-fields=<栏位>:忽略比较指定的栏位;
-s<字符位置>或--skip-chars=<字符位置>:忽略比较指定的字符;
-u或——unique仅显示出一次的行列
-w<字符位置>或--check-chars=<字符位置>:指定要比较的字符。
```
With no options, matching lines are merged to the first occurrence.
### 参数
Mandatory arguments to long options are mandatory for short options too.
-c, --count 在每列旁边显示该行重复出现的次数
-d, --repeated 仅显示重复出现的行列
-D, --all-repeated[=METHOD] 显示所有的重复行print all duplicate lines groups can be delimited with an empty line
METHOD={none(default),prepend,separate}
-f, --skip-fields=N avoid comparing the first N fields
--group[=METHOD] show all items, separating groups with an empty line
METHOD={separate(default),prepend,append,both}
-i, --ignore-case ignore differences in case when comparing
-s, --skip-chars=N 忽略比较指定的字符
-u, --unique 仅显示出一次的行列
-z, --zero-terminated end lines with 0 byte, not newline
-w, --check-chars=N 对每行第N 个字符以后的内容不作对照;即指定要比较的字符
* 输入文件:指定要去除的重复行文件。如果不指定此项,则从标准读取数据;
* 输出文件:指定要去除重复行后的内容要写入的输出文件。如果不指定此选项,则将内容显示到标准输出设备(显示终端)。
若域中为先空字符(通常包括空格以及制表符),然后非空字符,域中字符前的空字符将被跳过
### 实例
```
删除重复行:
## 实例
```
```bash
# 删除重复行
uniq file.txt
sort file.txt | uniq
sort -u file.txt
```
sort file.txt | uniq -c # 统计各行在文件中出现的次数
sort file.txt | uniq -d # 在文件中找出重复的行
只显示单一行:
```
uniq -u file.txt
sort file.txt | uniq -u
```
统计各行在文件中出现的次数:
```
sort file.txt | uniq -c
```
在文件中找出重复的行:
```
sort file.txt | uniq -d
```

@ -1,34 +1,24 @@
updatedb
===
创建或更新slocate命令所必需的数据库文件
# updatedb
## 说明
**updatedb命令** 用来创建或更新slocate命令所必需的数据库文件。updatedb命令的执行过程较长因为在执行时它会遍历整个系统的目录树并将所有的文件信息写入slocate数据库文件中。
说明slocate本身具有一个数据库里面存放了系统中文件与目录的相关信息。
**updatedb命令** 用来创建或更新slocate命令所必需的数据库文件。updatedb命令的执行过程较长因为在执行时它会遍历整个系统的
目录树并将所有的文件信息写入slocate数据库文件中
### 语法
```
updatedb(选项)
```
说明slocate本身具有一个数据库里面存放了系统中文件与目录的相关信息
## 选项
```
```markdown
-o<文件>忽略默认的数据库文件使用指定的slocate数据库文件
-U<目录>更新指定目录的slocate数据库
-v显示执行的详细过程
-v显示执行的详细过程
```
### 实例
## 实例
实用updatedb命令的`-U`选项可以指定要更新slocate数据库的目录。
```
updatedb -U /usr/local/ 更新指定命令的slocate数据库
```bash
updatedb -U /usr/local/ # 更新指定命令的slocate数据库`-U`选项可以指定要更新slocate数据库的目录
```

@ -1,25 +1,17 @@
useradd
===
创建的新的系统用户
# **useradd**
## 说明
**useradd命令** 用于Linux中创建的新的系统用户。useradd可用来建立用户帐号。帐号建好之后再用passwd设定帐号的密码而可用userdel删除帐号。使用useradd指令所建立的帐号实际上是保存在`/etc/passwd`文本文件中。
在Slackware中adduser指令是个script程序利用交谈的方式取得输入的用户帐号资料然后再交由真正建立帐号的useradd命令建立新用户如此可方便管理员建立用户帐号。在Red Hat Linux中 **adduser命令** 则是useradd命令的符号连接两者实际上是同一个指令。
### 语法
```
useradd(选项)(参数)
```
**useradd命令** 用于Linux中创建的新的系统用户。useradd可用来建立用户帐号。帐号建好之后再用passwd设定帐号的密码而可用
userdel删除帐号。使用useradd指令所建立的帐号实际上是保存在`/etc/passwd`文本文件中
在Slackware中adduser指令是个script程序利用交互的方式取得输入的用户帐号然后再交由真正建立帐号的useradd命令建立新用
如此可方便管理员建立用户帐号。在Red Hat Linux中**adduser命令** 则是useradd命令的符号连接两者实际上是同一个指令
```
## 选项
eradd [选项] 登录
```markdown
useradd [选项] 登录
useradd -D
useradd -D [选项]
@ -30,7 +22,7 @@ eradd [选项] 登录
-D, --defaults 显示或更改默认的 useradd 配置
-e, --expiredate EXPIRE_DATE 新账户的过期日期
-f, --inactive INACTIVE 新账户的密码不活动期
-g, --gid GROUP 新账户主组的名称或 ID
-g, --gid GROUP 新账户主组的名称或ID
-G, --groups GROUPS 新账户的附加组列表
-h, --help 显示此帮助信息并推出
-k, --skel SKEL_DIR 使用此目录作为骨架目录
@ -49,24 +41,13 @@ eradd [选项] 登录
-Z, --selinux-user SEUSER 为 SELinux 用户映射使用指定 SEUSER
```
### 参数
用户名:要创建的用户名。
## 实例
### 实例
```bash
# 一个用户只能且必须属于一个g可以属于多个G
useradd -g sales jack -G company,employees # 新建用户jack同时指定所属组主组为sales附加组为company,employees
新建用户加入组:
# 设定ID值时尽量要大于500以免冲突。因为Linux安装后会建立一些特殊用户一般0到499之间的值留给bin、mail这样的系统账号
useradd caojh -u 544 # 建立一个新用户账户并设置ID
```
useradd g sales jack G company,employees //-g加入主要组、-G加入次要组
```
建立一个新用户账户并设置ID
```
useradd caojh -u 544
```
需要说明的是设定ID值时尽量要大于500以免冲突。因为Linux安装后会建立一些特殊用户一般0到499之间的值留给bin、mail这样的系统账号。

@ -1,77 +1,45 @@
usermod
===
用于修改用户的基本信息
# **usermod**
## 说明
**usermod命令** 用于修改用户的基本信息。usermod命令不允许你改变正在线上的使用者帐号名称。当usermod命令用来改变user id必须确认这名user没在电脑上执行任何程序。你需手动更改使用者的crontab档。也需手动更改使用者的at工作档。采用NIS server须在server上更动相关的NIS设定。
### 语法
**usermod命令** 用于修改用户的基本信息。usermod命令不允许你改变正在线上的使用者帐号名称。当usermod命令用来改变user id
必须确认这名user没在电脑上执行任何程序。你需手动更改使用者的crontab档。也需手动更改使用者的at工作档。采用NIS server须在
server上更动相关的NIS设定
```
usermod(选项)(参数)
```
## 选项
```markdown
用法usermod [选项] 登录
```
选项:
-c, --comment 注释 GECOS 字段的新值
-d, --home HOME_DIR 用户的新主目录
-e, --expiredate EXPIRE_DATE 设定帐户过期的日期为 EXPIRE_DATE
-f, --inactive INACTIVE 过期 INACTIVE 天数后,设定密码为失效状态
-g, --gid GROUP 强制使用 GROUP 为新主组
-G, --groups GROUPS 新的附加组列表 GROUPS
-a, --append GROUP 将用户追加至上边 -G 中提到的附加组中,
并不从其它组中删除此用户
-h, --help 显示此帮助信息并推出
-l, --login LOGIN 新的登录名称
-L, --lock 锁定用户帐号
-m, --move-home 将家目录内容移至新位置 (仅于 -d 一起使用)
-o, --non-unique 允许使用重复的(非唯一的) UID
-p, --password PASSWORD 将加密过的密码 (PASSWORD) 设为新密码
-R, --root CHROOT_DIR chroot 到的目录
-s, --shell SHELL 该用户帐号的新登录 shell
-u, --uid UID 用户帐号的新 UID
-U, --unlock 解锁用户帐号
-v, --add-subuids FIRST-LAST add range of subordinate uids
-V, --del-subuids FIRST-LAST remove range of subordinate uids
-w, --add-subgids FIRST-LAST add range of subordinate gids
-W, --del-subgids FIRST-LAST remove range of subordinate gids
-Z, --selinux-user SEUSER 用户账户的新 SELinux 用户映射
```
### 参数
登录名:指定要修改信息的用户登录名。
### 实例
将newuser2添加到组staff中
```
usermod -G staff newuser2
```
修改newuser的用户名为newuser1
```
usermod -l newuser1 newuser
```
锁定账号newuser1
```
usermod -L newuser1
-c, --comment 注释 GECOS 字段的新值
-d, --home HOME_DIR 用户的新主目录
-e, --expiredate EXPIRE_DATE 设定帐户过期的日期为 EXPIRE_DATE
-f, --inactive INACTIVE 过期 INACTIVE 天数后,设定密码为失效状态
-g, --gid GROUP 强制使用 GROUP 为新主组
-G, --groups GROUPS 新的附加组列表 GROUPS
-a, --append GROUP 将用户追加至上边 -G 中提到的附加组中,
并不从其它组中删除此用户
-h, --help 显示此帮助信息并推出
-l, --login LOGIN 新的登录名称
-L, --lock 锁定用户帐号
-m, --move-home 将家目录内容移至新位置 (仅于 -d 一起使用)
-o, --non-unique 允许使用重复的(非唯一的) UID
-p, --password PASSWORD 将加密过的密码 (PASSWORD) 设为新密码
-R, --root CHROOT_DIR chroot 到的目录
-s, --shell SHELL 该用户帐号的新登录 shell
-u, --uid UID 用户帐号的新 UID
-U, --unlock 解锁用户帐号
-Z, --selinux-user SEUSER 用户账户的新 SELinux 用户映射
```
## 实例
```bash
usermod -G staff newuser2 # 将newuser2添加到组staff中
usermod -g groupnae user # 变更用户user的所属组
usermod -l newuser1 newuser # 修改newuser的用户名为newuser1
usermod -L newuser1 # 锁定账号newuser1
usermod -U newuser1 # 解除对newuser1的锁定
```
解除对newuser1的锁定
```
usermod -U newuser1
```

@ -0,0 +1,25 @@
# vnstat
vnstat用于基于控制台的网络流量监控记录所选接口的网络流量使用内核提供的网络接口统计信息作为信息源
https://github.com/vergoh/vnstat
## 选项
```markdown
-q, --query query database
-h, --hours show hours
-d, --days show days
-m, --months show months
-w, --weeks show weeks
-t, --top10 show top 10 days
-s, --short use short output
-u, --update update database
-i, --iface select interface (default: enp2s0)
-?, --help short help
-v, --version show version
-tr, --traffic calculate traffic
-ru, --rateunit swap configured rate unit
-l, --live show transfer rate in real time
```

@ -1,41 +1,36 @@
watch
===
可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令
# **watch**
## 说明
**watch命令** 以周期性的方式执行给定的指令指令输出以全屏方式显示。watch是一个非常实用的命令基本所有的Linux发行版都带有这个小工具如同名字一样watch可以帮你监测一个命令的运行结果省得你一遍遍的手动运行。
**watch命令** 以周期性的方式执行给定的指令指令输出以全屏方式显示。watch是一个非常实用的命令基本所有的Linux发行版都带
有这个小工具如同名字一样watch可以帮你监测一个命令的运行结果
### 语法
## 选项
```
watch(选项)(参数)
```
```markdown
watch [options] command
-b, --beep beep if command has a non-zero exit
-c, --color interpret ANSI color and style sequences
-d, --differences[=<permanent>] 高亮显示变化的区域
而-d=cumulative选项会把变动过的地方(不管最近的那次有没有变动)都高亮显示出来
-e, --errexit exit if command has a non-zero exit
-g, --chgexit exit when output from command changes
-n, --interval <secs> 缺省每2秒运行一次-n可以指定间隔时间
-p, --precise attempt run command in precise intervals
-t, --no-title turn off header
-x, --exec pass command to exec instead of "sh -c"
```bash
-n # 或--interval watch缺省每2秒运行一下程序可以用-n或-interval来指定间隔的时间。
-d # 或--differences 用-d或--differences 选项watch 会高亮显示变化的区域。 而-d=cumulative选项会把变动过的地方(不管最近的那次有没有变动)都高亮显示出来。
-t # 或-no-title 会关闭watch命令在顶部的时间间隔,命令,当前时间的输出。
-h, --help # 查看帮助文档
```
### 参数
指令:需要周期性执行的指令。
### 实例
## 实例
```bash
watch -n 1 -d netstat -ant       # 命令:每隔一秒高亮显示网络链接数的变化情况
watch -n 1 -d 'pstree|grep http' # 每隔一秒高亮显示http链接数的变化情况。 后面接的命令若带有管道符,需要加''将命令区域归整
watch -n 1 -d netstat -ant # 命令:每隔一秒高亮显示网络链接数的变化情况
watch -n 1 -d 'pstree|grep http' # 每隔一秒高亮显示http链接数的变化情况。后面接的命令若带有管道符需要加''将命令区域归整
watch 'netstat -an | grep:21 | \ grep<模拟攻击客户机的IP>| wc -l' # 实时查看模拟攻击客户机建立起来的连接数
watch -d 'ls -l|grep scf' # 监测当前目录中 scf' 的文件的变化
watch -n 10 'cat /proc/loadavg' # 10秒一次输出系统的平均负载
watch uptime
watch -t uptime
watch -d -n 1 netstat -ntlp
watch -d 'ls -l | fgrep goface' # 监测goface的文件
watch -t -differences=cumulative uptime
@ -43,7 +38,9 @@ watch -n 60 from # 监控mail
watch -n 1 "df -i;df" # 监测磁盘inode和block数目变化情况
```
FreeBSD和Linux下watch命令的不同在Linux下watch是周期性的执行下个程序并全屏显示执行结果`watch -n 1 -d netstat -ant`而在FreeBSD下的watch命令是查看其它用户的正在运行的操作watch允许你偷看其它terminal正在做什么该命令只能让超级用户使用。
FreeBSD和Linux下watch命令的不同在Linux下watch是周期性的执行下个程序并全屏显示执行结果,
如:`watch -n 1 -d netstat -ant`而在FreeBSD下的watch命令是查看其它用户的正在运行的操作
watch允许你偷看其它terminal正在做什么该命令只能让超级用户使用

@ -1,66 +1,27 @@
wc
===
统计文件的字节数、字数、行数
# **wc**
## 说明
**wc命令** 统计指定文件中的字节数、字数、行数并将统计结果显示输出。利用wc指令我们可以计算文件的Byte数、字数或是列数若不指定文件名称或是所给予的文件名为“-”则wc指令会从标准输入设备读取数据。wc同时也给出所指定文件的总统计数。
### 语法
**wc命令** 统计指定文件中的字节数、字数、行数并将统计结果显示输出。利用wc指令我们可以计算文件的Byte数、字数或是列数
若不指定文件名称,或是所给予的文件名为“-”则wc指令会从标准输入设备读取数据。wc同时也给出所指定文件的总统计数
```
wc(选项)(参数)
```
## 选项
```markdown
以下选项可用于选择打印的计数,始终按以下顺序排列:换行符,单词,字符,字节,最大行长度
-c, --bytes 打印统计的字节数
-m, --chars 打印统计的字符数
-l, --lines 打印行数
--files0-from=文件 从指定文件读取以NUL 终止的名称,如果该文件被指定为"-"则从标准输入读文件名
-L, --max-line-length 显示最长行的长度
-w, --words 显示单词计数
```bash
-c # 统计字节数,或--bytes或——chars只显示Bytes数
-l # 统计行数或——lines只显示列数
-m # 统计字符数。这个标志不能与 -c 标志一起使用。
-w # 统计字数或——words只显示字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。
-L # 打印最长行的长度。
-help # 显示帮助信息
--version # 显示版本信息
```
### 参数
文件:需要统计的文件列表。
## 例子
## 实例
```bash
wc -l * # 统计当前目录下的所有文件行数
wc -l *.js   # 统计当前目录下的所有 .js 后缀的文件行数
find . * | xargs wc -l # 当前目录以及子目录的所有文件行数
wc test.txt # 查看文件的字节数、字数、行数
```
查看文件的字节数、字数、行数
```bash
wc test.txt
# 输出结果
7 8 70 test.txt
行数 单词数 字节数 文件名
```
用wc命令怎么做到只打印统计数字不打印文件名
```bash
wc -l test.txt
# 输出结果
7 test.txt
```
用来统计当前目录下的文件数
```bash
ls -l | wc -l
# 输出结果
8
```

@ -2,19 +2,23 @@
## 说明
**wget命令** 用来从指定的URL下载文件。wget非常稳定它在带宽很窄的情况下和不稳定网络中有很强的适应性如果是由于网络的原因下载失败wget会不断的尝试直到整个文件下载完毕。如果是服务器打断下载过程它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。
**wget命令** 用来从指定的URL下载文件。wget非常稳定它在带宽很窄的情况下和不稳定网络中有很强的适应性如果是由于网络的原
因下载失败wget会不断的尝试直到整个文件下载完毕。如果是服务器打断下载过程它会再次联到服务器上从停止的地方继续下载。
这对从那些限定了链接时间的服务器上下载大文件非常有用
wget支持HTTPHTTPS和FTP协议可以使用HTTP代理。所谓的自动下载是指wget可以在用户退出系统的之后在后台执行。这意味这你可以登录系统启动一个wget下载任务然后退出系统wget将在后台执行直到任务完成相对于其它大部分浏览器在下载大量数据时需要用户一直的参与这省去了极大的麻烦。
wget支持HTTPHTTPS和FTP协议可以使用HTTP代理。所谓的自动下载是指wget可以在用户退出系统的之后在后台执行。这意味这你可
以登录系统启动一个wget下载任务然后退出系统wget将在后台执行直到任务完成相对于其它大部分浏览器在下载大量数据时需要
用户一直的参与,这省去了极大的麻烦
用于从网络上下载资源没有指定目录下载资源回默认为当前目录。wget虽然功能强大但是使用起来还是比较简单
1. **支持断点下传功能** 这一点也是网络蚂蚁和FlashGet当年最大的卖点现在Wget也可以使用此功能那些网络不是太好的用户可以放心了
2. **同时支持FTP和HTTP下载方式** 尽管现在大部分软件可以使用HTTP方式下载但是有些时候仍然需要使用FTP方式下载软件
3. **支持代理服务器** 对安全强度很高的系统而言,一般不会将自己的系统直接暴露在互联网上,所以,支持代理是下载软件必须有的功能;
4. **设置方便简单** 可能,习惯图形界面的用户已经不是太习惯命令行了,但是,命令行在设置上其实有更多的优点,最少,鼠标可以少点很多次,也不要担心是否错点鼠标;
5. **程序小,完全免费** 程序小可以考虑不计,因为现在的硬盘实在太大了;完全免费就不得不考虑了,即使网络上有很多所谓的免费软件,但是,这些软件的广告却不是我们喜欢的。
1. **支持断点下传功能**
2. **同时支持FTP和HTTP下载方式**
3. **支持代理服务器**
4. **设置方便简单**
5. **程序小,完全免费**
## 用法
## 选项
wget [选项]... [URL]...
@ -260,7 +264,7 @@ wget--tries=40 URL
# 如果网络有问题或下载一个大文件也有可能失败。wget默认重试20次连接下载文件。如果需要你可以使用`--tries`增加重试次数。
wget -i filelist.txt # 下载多个文件
wget --mirror -p --convert-links -P ./LOCAL URL # 下载整个网站到本地;`--miror`镜像下载。`-p`下载所有为了html页面显示正常的文件。`--convert-links`下载后,转换成本地的链接。`-P ./LOCAL`保存所有文件和目录到本地指定目录。
wget -m -p --convert-links -P ./LOCAL URL # 下载整个网站到本地;`--miror`镜像下载。`-p`下载所有为了html页面显示正常的文件。`--convert-links`下载后,转换成本地的链接。`-P ./LOCAL`保存所有文件和目录到本地指定目录。
# 过滤指定格式下载
wget--reject=gif ur

@ -1,44 +1,64 @@
whatis
===
查询一个命令执行什么功能
## **whatis**
## 说明
**whatis命令** 是用于查询一个命令执行什么功能,并将查询结果打印到终端上。
whatis命令在用`catman -w`命令创建的数据库中查找command参数指定的命令、系统调用、库函数或特殊文件名。whatis命令显示手册部分的页眉行。然后可以发出man命令以获取附加的信息。whatis命令等同于使用`man -f`命令。
whatis命令在用`catman -w`命令创建的数据库中查找command参数指定的命令、系统调用、库函数或特殊文件名。whatis命令显示手册部
分的页眉行。然后可以发出man命令以获取附加的信息。whatis命令等同于使用`man -f`命令
### 语法
## 选项
```
whatis
```
```markdown
Usage: whatis [OPTION...] 关键词...
### 实例
-d, --debug 输出调试信息
-v, --verbose 输出详细的警告信息
-r, --regex 把每个关键词都当作正则表达式解读
-w, --wildcard 关键词里包含通配符
-l, --long 不要把输出按终端宽度截断
-C, --config-file=文件 使用该用户设置文件
-L, --locale=区域 定义本次搜索所使用的区域设置
-m, --systems=系统 use manual pages from other systems
-M, --manpath=路径 设置搜索手册页的路径为“路径”
-s, --sections=列表, --section=列表
search only these sections (colon-separated)
-?, --help give this help list
--usage give a short usage message
-V, --version print program version
Mandatory or optional arguments to long options are also mandatory or optional
for any corresponding short options.
```
[root@localhost ~]# whatis ls
ls (1) - list directory contents
ls (1p) - list directory contents
[root@localhost ~]# whatis cp
cp (1) - copy files and directories
cp (1p) - copy files
[root@localhost ~]# whatis chown
chown (1) - change file owner and group
chown (1p) - change the file ownership
chown (2) - change ownership of a file
chown (3p) - change owner and group of a file
[root@localhost ~]# whatis man
## 实例
```bash
whatis man
: << comment
输出详解:
man (1) - format and display the on-line manual pages
man (1p) - display system documentation
man (7) - macros to format man pages
man (rpm) - A set of documentation tools: man, apropos and whatis.
man-pages (rpm) - Man (manual) pages from the Linux Documentation Project.
man.config [man] (5) - configuration data for man
man页面所属的分类标识(常用的是分类1和分类3)
(1)、用户可以操作的命令或者是可执行文件
(2)、系统核心可调用的函数与工具等
(3)、一些常用的函数与数据库
(4)、设备文件的说明
(5)、设置文件或者某些文件的格式
(6)、游戏
(7)、惯例与协议等。例如Linux标准文件系统、网络协议、ASCⅡ码等说明内容
(8)、系统管理员可用的管理条令
(9)、与内核有关的文件
comment
```

@ -1,36 +1,27 @@
zcat
===
显示压缩包中文件的内容
# **zcat**
## 说明
**zcat命令** 用于不真正解压缩文件,就能显示压缩包中文件的内容的场合
**zcat命令** 用于不真正解压缩文件,就能显示压缩包中文件的内容的场合
### 语法
## 选项
```
zcat(选项)(参数)
```
```markdow
-f, --force force; read compressed data even from a terminal
-l, --list 列出压缩文件内容
-q, --quiet 禁止所有warnings输出
-r, --recursive operate recursively on directories
-S, --suffix=SUF use suffix SUF on compressed files
-t, --test test compressed file integrity
-v, --verbose verbose mode
With no FILE, or when FILE is -, read standard input.
```
-S指定gzip格式的压缩包的后缀。当后缀不是标准压缩包后缀时使用此选项
-c将文件内容写到标注输出
-d执行解压缩操作
-l显示压缩包中文件的列表
-L显示软件许可信息
-q禁用警告信息
-r在目录上执行递归操作
-t测试压缩文件的完整性
-V显示指令的版本信息
-l更快的压缩速度
-9更高的压缩比。
```
### 参数
```
文件:指定要显示其中文件内容的压缩包。
## 实例
```bash
```

Loading…
Cancel
Save