diff --git a/LearnPython3/AwesomeMath.py b/LearnPython3/AwesomeMath.py index a1f7c62..5a64afc 100644 --- a/LearnPython3/AwesomeMath.py +++ b/LearnPython3/AwesomeMath.py @@ -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])) \ No newline at end of file diff --git a/Linux_man_cn/ab.md b/Linux_man_cn/ab.md index 284765f..c3b95c3 100644 --- a/Linux_man_cn/ab.md +++ b/Linux_man_cn/ab.md @@ -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) diff --git a/Linux_man_cn/awk.md b/Linux_man_cn/awk.md index e1477cb..15cea54 100644 --- a/Linux_man_cn/awk.md +++ b/Linux_man_cn/awk.md @@ -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) diff --git a/Linux_man_cn/bc.md b/Linux_man_cn/bc.md index 5c6b348..7cf3c59 100644 --- a/Linux_man_cn/bc.md +++ b/Linux_man_cn/bc.md @@ -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 -``` - +``` diff --git a/Linux_man_cn/cat.md b/Linux_man_cn/cat.md index bf1ca90..a99fe82 100644 --- a/Linux_man_cn/cat.md +++ b/Linux_man_cn/cat.md @@ -1,8 +1,6 @@ # **cat** - - -```info +```markdown 将[文件]或标准输入组合输出到标准输出 -A, --show-all 等于-vET,显示不可打印字符,行尾显示“$” -b, --number-nonblank 对非空输出行编号 @@ -20,6 +18,6 @@ ## 实例 -```sh +```bash ``` \ No newline at end of file diff --git a/Linux_man_cn/chmod.md b/Linux_man_cn/chmod.md index 8d2e38f..36548ac 100644 --- a/Linux_man_cn/chmod.md +++ b/Linux_man_cn/chmod.md @@ -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)、其他(other),Linux系统中,预设的情況下,系统中所有的帐号与一般身份使用者,以及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组 ``` - - diff --git a/Linux_man_cn/chown.md b/Linux_man_cn/chown.md index 1657fda..ce1de98 100644 --- a/Linux_man_cn/chown.md +++ b/Linux_man_cn/chown.md @@ -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的所有者和组,而不是指定OWNER:GROUP值 +-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" +``` diff --git a/Linux_man_cn/clock.md b/Linux_man_cn/clock.md deleted file mode 100644 index ee00abb..0000000 --- a/Linux_man_cn/clock.md +++ /dev/null @@ -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时间 -``` - - - diff --git a/Linux_man_cn/column.md b/Linux_man_cn/column.md new file mode 100644 index 0000000..5ec11ef --- /dev/null +++ b/Linux_man_cn/column.md @@ -0,0 +1,13 @@ +# column + +## 选项 + +```markdown +column [选项] [文件] + -c, --columns <宽度> 输出宽度(字符数) + -t, --table 创建表格 + -s, --separator <字符串> 可用的表格分隔符 + -o, --output-separator <字符串> 表格输出列分隔符,默认为两个空格 + -x, --fillrows 先填充行,再填充列 + +``` \ No newline at end of file diff --git a/Linux_man_cn/cp.md b/Linux_man_cn/cp.md index 1e451a1..f8678cf 100644 --- a/Linux_man_cn/cp.md +++ b/Linux_man_cn/cp.md @@ -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、传递了目录属性、没有略过目录。 -``` - - - diff --git a/Linux_man_cn/crontab.md b/Linux_man_cn/crontab.md index 1ad71b7..6fe4022 100644 --- a/Linux_man_cn/crontab.md +++ b/Linux_man_cn/crontab.md @@ -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 指定设置定时的用户名 + -e 编辑该用户下的定时任务 + -l 列出该用户下定时任务 + -r 删除该用户的定时任务 + -i 交互式删除定时任务 + -n set host in cluster to run users' crontabs + -c get host in cluster to run users' crontabs + -s selinux context + -x 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 ``` - diff --git a/Linux_man_cn/curl.md b/Linux_man_cn/curl.md index 161b6af..473b386 100644 --- a/Linux_man_cn/curl.md +++ b/Linux_man_cn/curl.md @@ -1,125 +1,114 @@ -curl -=== - -利用URL规则在命令行下工作的文件传输工具 +# **curl** ## 说明 -**curl命令** 是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。作为一款强力工具,curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化,curl可以祝一臂之力。 - -### 语法 - -``` -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停止传输速度的限制,速度时间
- -### 实例 +**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 停止传输速度的限制,速度时间 + +## 实例 **文件下载** diff --git a/Linux_man_cn/cut.md b/Linux_man_cn/cut.md index 422165f..d306368 100644 --- a/Linux_man_cn/cut.md +++ b/Linux_man_cn/cut.md @@ -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 -``` - - diff --git a/Linux_man_cn/date.md b/Linux_man_cn/date.md index f0a9a0c..5642118 100644 --- a/Linux_man_cn/date.md +++ b/Linux_man_cn/date.md @@ -2,44 +2,30 @@ ## 说明 -**date命令** 是显示或设置系统时间与日期。 +**date命令** 是显示或设置系统时间与日期 -很多shell脚本里面需要打印不同格式的时间或日期,以及要根据时间和日期执行操作。延时通常用于脚本执行过程中提供一段等待的时间。日期可以以多种格式去打印,也可以使用命令设置固定的格式。在类UNIX系统中,日期被存储为一个整数,其大小为自世界标准时间(UTC)1970年1月1日0时0分0秒起流逝的秒数。 +很多shell脚本里面需要打印不同格式的时间或日期,以及要根据时间和日期执行操作。延时通常用于脚本执行过程中提供一段等待的时 +间。日期可以以多种格式去打印,也可以使用命令设置固定的格式。在类UNIX系统中,日期被存储为一个整数,其大小为自世界标准时间 +(UTC)1970年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-14T02:34:56-06:00 - -R,--rfc-email 以RFC 5322格式输出,例如:Mon, 14 Aug 2006 02:34:56 -0600 --rfc-3339=FMT 以RFC 3339格式输出,FMT='date','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 ``` diff --git a/Linux_man_cn/declare.md b/Linux_man_cn/declare.md index ecfe94c..db9a0b2 100644 --- a/Linux_man_cn/declare.md +++ b/Linux_man_cn/declare.md @@ -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",输入如下命令: diff --git a/Linux_man_cn/df.md b/Linux_man_cn/df.md index bade6f2..5453610 100644 --- a/Linux_man_cn/df.md +++ b/Linux_man_cn/df.md @@ -1,21 +1,12 @@ -df -=== - -显示磁盘的相关信息 +# **df** ## 说明 -**df命令** 用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。 - -### 语法 - -``` -df(选项)(参数) -``` +**df命令** 用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘占用空间等信息 - +## 选项 -``` +```markdown -a或--all:包含全部的文件系统; --block-size=<区块大小>:以指定的区块大小来显示区块数目; -h或--human-readable:以可读性较高的方式来显示信息; diff --git a/Linux_man_cn/diff.md b/Linux_man_cn/diff.md index 850e3cd..d48526a 100644 --- a/Linux_man_cn/diff.md +++ b/Linux_man_cn/diff.md @@ -1,21 +1,15 @@ -diff -=== - -比较给定的两个文件的不同 +# **diff** ## 说明 -**diff命令** 在最简单的情况下,比较给定的两个文件的不同。如果使用“-”代替“文件”参数,则要比较的内容将来自标准输入。diff命令是以逐行的方式,比较文本文件的异同处。如果该命令指定进行目录的比较,则将会比较该目录中具有相同文件名的文件,而不会对其子目录文件进行任何比较操作。 - -### 语法 +**diff命令** 在最简单的情况下,比较给定的两个文件的不同。如果使用“-”代替“文件”参数,则要比较的内容将来自标准输入 +diff命令是以逐行的方式,比较文本文件的异同处。如果该命令指定进行目录的比较,则将会比较该目录中具有相同文件名的文件,而不 +会对其子目录文件进行任何比较操作 -``` -diff(选项)(参数) -``` +## 选项 - +```markdown -``` -<行数>:指定要显示多少行的文本。此参数必须与-c或-u参数一并使用; -a或——text:diff预设只会逐行比较文本文件; -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. +如果输入相同,则退出状态为 0;1 表示输入不同;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 +``` diff --git a/Linux_man_cn/du.md b/Linux_man_cn/du.md index 461c6eb..8f165bd 100644 --- a/Linux_man_cn/du.md +++ b/Linux_man_cn/du.md @@ -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 ``` diff --git a/Linux_man_cn/echo.md b/Linux_man_cn/echo.md index b98cc39..981c33a 100644 --- a/Linux_man_cn/echo.md +++ b/Linux_man_cn/echo.md @@ -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" diff --git a/Linux_man_cn/exec.md b/Linux_man_cn/exec.md index 43b7393..991ffa3 100644 --- a/Linux_man_cn/exec.md +++ b/Linux_man_cn/exec.md @@ -1,29 +1,18 @@ -exec -=== - -调用并执行指定的命令 +# **exec** ## 说明 -**exec命令** 用于调用并执行指令的命令。exec命令通常用在shell脚本程序中,可以调用其他的命令。如果在当前终端中使用命令,则当指定的命令执行完毕后会立即退出终端。 - -### 语法 - -``` -exec(选项)(参数) -``` +**exec命令** 用于调用并执行指令的命令。exec命令通常用在shell脚本程序中,可以调用其他的命令。如果在当前终端中使用命令,则 +当指定的命令执行完毕后会立即退出终端 - +## 选项 -``` +```markdown -c:在空环境中执行指定的命令。 -``` - -### 参数 - 指令:要执行的指令和相应的参数。 +``` -### 实例 +## 实例 首先使用echo命令将文本“Linux C++”进行输出,输入如下命令: diff --git a/Linux_man_cn/export.md b/Linux_man_cn/export.md index d9b8e3e..5d454a9 100644 --- a/Linux_man_cn/export.md +++ b/Linux_man_cn/export.md @@ -1,7 +1,4 @@ -export -=== - -设置或显示系统环境变量 +# **export** ## 说明 @@ -9,25 +6,15 @@ export 一个变量创建时,它不会自动地为在它之后创建的shell进程所知。而命令export可以向后面的shell传递变量的值。当一个shell脚本调用并执 行时,它不会自动得到原为脚本(调用者)里定义的变量的访问权,除非这些变量已经被显式地设置为可用。export命令可以用于传递一个或多个变量的值到任何后继脚本。 -### 语法 - -``` -export(选项)(参数) -``` - - +## 选项 -``` +```markdown -f:代表[变量名称]中为函数名称; -n:删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中; -p:列出所有的shell赋予程序的环境变量。 ``` -### 参数 - -变量:指定要输出或者删除的环境变量。 - -### 实例 +## 实例 一般来说,配置交叉编译工具链的时候需要指定编译工具的路径,此时就需要设置环境变量。查看已经存在的环境变量: diff --git a/Linux_man_cn/file.md b/Linux_man_cn/file.md index c779d4a..2a3e691 100644 --- a/Linux_man_cn/file.md +++ b/Linux_man_cn/file.md @@ -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 + 有效的测试是:ascii,apptype,compress,elf,soft,tar,tokens,troff +-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 - -``` - - diff --git a/Linux_man_cn/find.md b/Linux_man_cn/find.md index 87c185c..06c9145 100644 --- a/Linux_man_cn/find.md +++ b/Linux_man_cn/find.md @@ -1,18 +1,15 @@ # **find** -```txt -使用find和xargs可能需要系统查找具有某一特征的文件,例如文件权限、文件属主、文件长度、文件类型等,出于安全性考虑,一般系统管理任务只是为了找出一个知道存放在哪里的文件,find可以遍历当前目录甚至整个文件系统查找文件或目录。即使系统中含有网络文件系统(NFS),find命令在该文件系统中同样有效,只要你具有相应的权限。 -``` - ## 说明 -**find命令** 用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。 - -在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)。 +```markdown +使用find和xargs可能需要系统查找具有某一特征的文件,例如文件权限、文件属主、文件长度、文件类型等,出于安全性考虑,一般系 +统管理任务只是为了找出一个知道存放在哪里的文件,find可以遍历当前目录甚至整个文件系统查找文件或目录。即使系统中含有网络 +文件系统(NFS),find命令在该文件系统中同样有效,只要你具有相应的权限 -## 语法 +## 选项 -```info +```markdown 用法: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression] 默认路径为当前目录;默认表达式为 -print @@ -41,77 +38,63 @@ normal options (always true, specified before other expressions): -exec 命令 ; -exec 命令 {} + -ok 命令 -execdir 命令 ; -execdir 命令 {} + -okdir 命令 -find的使用格式如下: -find <指定目录> <指定条件> <指定动作> - - <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。 - - <指定条件>: 所要搜索的文件的特征。 - - <指定动作>: 对搜索结果进行特定的处理。 - -find 命令格式: -1、find命令的一般形式为; -2、find命令的参数; -3、find命令选项; -4、使用exec或ok来执行shell命令; - -Find命令的一般形式为:find pathname -options [-print -exec -ok] - +find 命令的一般形式为:find path -options [-print -exec -ok] 该命令的参数解释: -pathname find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。 --print find命令将匹配的文件输出到标准输出。 --exec find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'comm-and'{}\;,注意{}和\;之间的空格。 --ok和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,会给出提示,让用户来确定是否执行。 -``` - - - -```info --amin<分钟> 查找在指定时间曾被存取过的文件或目录,单位以分钟计算; --anewer<参考文件或目录> 查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录; --atime<24小时数> 查找在指定时间曾被存取过的文件或目录,单位以24小时计算; --cmin<分钟> 查找在指定时间之时被更改过的文件或目录; --cnewer<参考文件或目录> 查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录; --ctime<24小时数> 查找在指定时间之时被更改的文件或目录,单位以24小时计算; --daystart 从本日开始计算时间; --depth 从指定目录下最深层的子目录开始查找; --empty 寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录; --exec<执行指令> 假设find指令的回传值为True,就执行该指令; --false 将find指令的回传值皆设为False; --fls<列表文件> 此参数的效果和指定“-ls”参数类似,但会把结果保存为指定的列表文件; --follow 排除符号连接;如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。(常用选项) --fprint<列表文件> 此参数的效果和指定“-print”参数类似,但会把结果保存成指定的列表文件; --fprint0<列表文件> 此参数的效果和指定“-print0”参数类似,但会把结果保存成指定的列表文件; --fprintf<列表文件><输出格式> 此参数的效果和指定“-printf”参数类似,但会把结果保存成指定的列表文件; --fstype<文件系统类型> 只寻找该文件系统类型下的文件或目录;(常用选项) --gid<群组识别码> 查找符合指定之群组识别码的文件或目录; --group<群组名称> 查找符合指定之群组名称的文件或目录;(常用选项) --ilname<范本样式> 此参数的效果和指定“-lname”参数类似,但忽略字符大小写的差别; --iname<范本样式> 此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别; --inum 查找符合指定的inode编号的文件或目录; --ipath<范本样式> 此参数的效果和指定“-path”参数类似,但忽略字符大小写的差别; --iregex<范本样式> 此参数的效果和指定“-regexe”参数类似,但忽略字符大小写的差别; --links<连接数目> 查找符合指定的硬连接数目的文件或目录; --iname<范本样式> 指定字符串作为寻找符号连接的范本样式; --ls 假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出; --maxdepth<目录层级> 设置最大目录层级; --mindepth<目录层级> 设置最小目录层级; --mmin<分钟> 查找在指定时间曾被更改过的文件或目录,单位以分钟计算; --mount 此参数的效果和指定“-xdev”相同;在查找文件时不跨越文件系统mount点。(常用选项) --mtime<24小时数> 查找在指定时间曾被更改过的文件或目录,单位以24小时计算;-mtime-n+n按照文件的更改时间来查找文件,-n表示文件更改时间距现在n天以内,+n表示文件更改时间距现在n天以前。(常用选项) --name<范本样式> 指定字符串作为寻找文件或目录的范本样式;(常用选项) --newer<参考文件或目录> 查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;-newerfile1!file2 查找更改时间比文件file1新但比文件file2旧的文件。(常用选项) --nogroup 找出不属于本地主机群组识别码的文件或目录;(常用选项) --noleaf 不去考虑目录至少需拥有两个硬连接存在; --nouser 找出不属于本地主机用户识别码的文件或目录;(常用选项) --ok<执行指令> 此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令; --path<范本样式> 指定字符串作为寻找目录的范本样式; --perm<权限数值> 查找符合指定的权限数值的文件或目录;(常用选项) --print 假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有“./”字符串; --print0 假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行; --printf<输出格式> 假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式可以自行指定; --prune 不寻找字符串作为寻找文件或目录的范本样式;如果同时使用了-depth选项,那么-prune选项将被find命令忽略。(常用选项) --regex<范本样式> 指定字符串作为寻找文件或目录的范本样式; --size<文件大小> 查找符合指定的文件大小的文件; --true 将find指令的回传值皆设为True; +path find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录 +-print find命令将匹配的文件输出到标准输出 +-exec find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'comm-and'{}\;,注意{}和\;之间的空格 +-ok和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,会给出提示,让用户来确定是否执行 + + +-amin<分钟> 查找在指定时间曾被存取过的文件或目录,单位以分钟计算 +-anewer<参考文件或目录> 查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录 +-atime<24小时数> 查找在指定时间曾被存取过的文件或目录,单位以24小时计算 +-cmin<分钟> 查找在指定时间之时被更改过的文件或目录 +-cnewer<参考文件或目录> 查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录 +-ctime<24小时数> 查找在指定时间之时被更改的文件或目录,单位以24小时计算 +-daystart 从本日开始计算时间 +-depth 从指定目录下最深层的子目录开始查找 +-empty 寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录 +-exec<执行指令> 假设find指令的回传值为True,就执行该指令 +-false 将find指令的回传值皆设为False +-fls<列表文件> 此参数的效果和指定“-ls”参数类似,但会把结果保存为指定的列表文件 +-follow 排除符号连接;如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。(常用选项) +-fprint<列表文件> 此参数的效果和指定“-print”参数类似,但会把结果保存成指定的列表文件 +-fprint0<列表文件> 此参数的效果和指定“-print0”参数类似,但会把结果保存成指定的列表文件 +-fprintf<列表文件><输出格式> 此参数的效果和指定“-printf”参数类似,但会把结果保存成指定的列表文件 +-fstype<文件系统类型> 只寻找该文件系统类型下的文件或目录;(常用选项) +-gid<群组识别码> 查找符合指定之群组识别码的文件或目录 +-group<群组名称> 查找符合指定之群组名称的文件或目录;(常用选项) +-ilname<范本样式> 此参数的效果和指定“-lname”参数类似,但忽略字符大小写的差别 +-iname<范本样式> 此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别 +-inum 查找符合指定的inode编号的文件或目录 +-ipath<范本样式> 此参数的效果和指定“-path”参数类似,但忽略字符大小写的差别 +-iregex<范本样式> 此参数的效果和指定“-regexe”参数类似,但忽略字符大小写的差别 +-links<连接数目> 查找符合指定的硬连接数目的文件或目录 +-iname<范本样式> 指定字符串作为寻找符号连接的范本样式 +-ls 假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出 +-maxdepth<目录层级> 设置最大目录层级 +-mindepth<目录层级> 设置最小目录层级 +-mmin<分钟> 查找在指定时间曾被更改过的文件或目录,单位以分钟计算 +-mount 此参数的效果和指定“-xdev”相同;在查找文件时不跨越文件系统mount点。(常用选项) +-mtime<24小时数> 查找在指定时间曾被更改过的文件或目录,单位以24小时计算;-mtime-n+n按照文件的更改时间来 + 查找文件,-n表示文件更改时间距现在n天以内,+n表示文件更改时间距现在n天以前。(常用选项) +-name<范本样式> 指定字符串作为寻找文件或目录的范本样式;(常用选项) +-newer<参考文件或目录> 查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;-newerfile1!file2 + 查找更改时间比文件file1新但比文件file2旧的文件。(常用选项) +-nogroup 找出不属于本地主机群组识别码的文件或目录;(常用选项) +-noleaf 不去考虑目录至少需拥有两个硬连接存在 +-nouser 找出不属于本地主机用户识别码的文件或目录;(常用选项) +-ok<执行指令> 此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令 +-path<范本样式> 指定字符串作为寻找目录的范本样式 +-perm<权限数值> 查找符合指定的权限数值的文件或目录;(常用选项) +-print 假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有“./”字符串 +-print0 假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行 +-printf<输出格式> 假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式可以自行指定 +-prune 不寻找字符串作为寻找文件或目录的范本样式;如果同时使用了-depth选项,那么-prune选项将被find命令忽略。(常用选项) +-regex<范本样式> 指定字符串作为寻找文件或目录的范本样式 +-size<文件大小> 查找符合指定的文件大小的文件 +-true 将find指令的回传值皆设为True -type<文件类型> 只寻找符合指定的文件类型的文件;(常用选项) 诸如: @@ -131,161 +114,115 @@ pathname find命令所查找的目录路径。例如用.来表示当前目录 ## 实例 -```sh -find . -type f -name "*" | xargs grep "test" # 当前目录搜索所有文件,文件内容包含 “test” 的内容 -find . -name "my*" -ls # 搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息 -find . -type f -mmin -10 # 搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录 - -## 根据文件或者正则表达式进行匹配 +```bash +# 查找指定文件并执行删除操作 +find . -name "文件名" | xargs rm -rf +find . -name "文件名" -exec rm -f {}\; +find $HOME/. -name "*.txt" -ok rm {} \; # 找出家目录下所有的.txt文件并删除,和-exec一样但会给出提示 -在`/home`目录下查找以.txt结尾的文件名 +find . -name "my*" -ls # 搜索当前目录中所有文件名以my开头的文件并显示它们的详细信息 +find /home -iname "*.txt" -print # 查看home目录下以txt结尾的文件,iname表示忽略大小写 +find /home ! -name "*.txt" -print # 找出/home下不是以.txt结尾的文件 +find /usr/ -path "*local*" -print # 匹配文件路径或者文件,path后路径可以是多级的子目录 -```sh -find /home -name "*.txt" -print -``` - -同上,但忽略大小写 - -```sh -find /home -iname "*.txt" -print -``` - -当前目录及子目录下查找所有以.txt和.pdf结尾的文件 - -```sh -find . \( -name "*.txt" -o -name "*.pdf" \) -print - -或 +# -prune 使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略 +find . -path "./sk" -prune -o -name "*.txt" -print # 查找当前目录或者子目录下所有.txt文件,但是跳过子目录sk +find /usr/sam \( -path /usr/sam/dir1 -o -path /usr/sam/file1 \) -prune -o -print # 排除多个目录 +# 当前目录及子目录下查找所有以.txt和.pdf结尾的文件 find . -name "*.txt" -o -name "*.pdf" -print -``` - -匹配文件路径或者文件 - -```sh -find /usr/ -path "*local*" -print -``` - -基于正则表达式匹配文件路径 - -```sh -find . -regex ".*\(\.txt\|\.pdf\)$" -print -``` - -同上,但忽略大小写 - -```sh -find . -iregex ".*\(\.txt\|\.pdf\)$" -print -``` - -想要在/etc目录中查找文件名以host开头的文件,可以用: -``` -find /etc -name "host*" -print -``` - -想要的当前目录及子目录中查找文件名以一个大写字母开头的文件,可以用: - -```sh -find . -name "[A-Z]*" -print -``` +find . \( -name "*.txt" -o -name "*.pdf" \) -print -如果想在当前目录查找文件名以两个小写字母开头,跟着是两个数字,最后是*.txt的文件,下面的命令就能够返回名为ax37.txt的文件: -``` -find . -name "[a-z][a-z][0--9][0--9].txt" -print -``` +find . -regex ".*\(\.txt\|\.pdf\)$" -print # 基于正则表达式匹配文件路径 +find . -iregex ".*\(\.txt\|\.pdf\)$" -print # 基于正则表达式匹配文件路径,但忽略大小写 +find . -name "[A-Z]*" -print # 查找当前目录及子目录中文件名以一个大写字母开头的文件 -Find命令查找指定文件并执行删除操作 ``` -find ./ -name "文件名" -exec rm -f {}\; -``` - -#### 否定参数 -找出/home下不是以.txt结尾的文件 +```bash +# 通过文件特征查找 -```sh -find /home ! -name "*.txt" -print -``` - -#### 根据文件类型进行搜索 +: << comment +常用的find命令的控制选项及其用法 +选项 用途描述 +-daystart . .测试系统从今天开始24小时以内的文件,用法类似-amin +-depth 使用深度级别的查找过程方式,在某层指定目录中优先查找文件内容 +-follow 遵循通配符链接方式查找; 另外也可忽略通配符链接方式查询 +-maxdepth levels 在某个层次的目录中按照递减方法查找 +-mount 不在文件系统目录中查找,用法类似 -xdev. +-noleaf 禁止在非UNUX文件系统,MS-DOS系统,CD-ROM文件系统中进行最优化查找 +-fstype 查找位于某一类型文件系统的文件,这些文件通常在/etc/fstab中可以找到 +-cpio 对匹配的文件使用cpio命令 +comment + +: << comment +常用的查找文件并显示文件信息的参数和使用方法 +选项 用途描述 +-exec command; 查找并执行命令 +-exec ./text.sh {} \; 单行命令中-exec参数中无法使用多个命令,此方法可以实现在-exec之后接受多条命令 +-fprint file 打印文件完整文件名 +-fprint0 file 打印文件完整文件名包括空的文件 +-fprintf file format 打印文件格式 +-ok command; 给用户命令执行操作,根据用户的Y 确认输入执行 +-printf format 打印文件格式 +comment -```sh -find . -type 类型参数 ``` - +```bash +# 根据-type文件类型进行搜索 +: << comment 类型参数列表: +* b 块设备 +* c 字符设备 +* d 目录 * f 普通文件 * l 符号连接 -* d 目录 -* c 字符设备 -* b 块设备 +* p 命名管道(FIFO) * s 套接字 -* p Fifo +comment -#### 基于目录深度搜索 +find . -maxdepth 3 -type f # 基于目录深度搜索,向下最大深度限制为3 +find . -mindepth 2 -type f # 搜索出深度距离当前目录至少2个子目录的所有文件 +find .-type f -user root -exec chown tom {} \; # 找出当前目录下所有root的文件,并把所有权更改为用户tom +find . -type f -mtime +30 -name "*.log" -exec cp {} old \; # 将30天前的log文件移动到old目录中 +find . -type f -name "*.txt" -delete # 删除当前目录下所有.txt文件 +find . -type f -name "*.txt" -exec cat {} \;> all.txt # 查找当前目录下所有.txt文件并把他们拼接起来写入到all.txt文件中 +find . -type f -name "*.txt" -exec printf "File: %s\n" {} \; # 找出当前目录下所有.txt文件并以“File:文件名”的形式打印出来 +find . -type f -name "*" | xargs grep "test" # 当前目录搜索包含test内容的文件 +find . -type f -mmin -10 # 搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录 -向下最大深度限制为3 - -``` -find . -maxdepth 3 -type f ``` -搜索出深度距离当前目录至少2个子目录的所有文件 - -``` -find . -mindepth 2 -type f -``` - -#### 根据文件时间戳进行搜索 - -``` -find . -type f 时间戳 -``` - -UNIX/Linux文件系统每个文件都有三种时间戳: +```bash +# 根据文件时间戳进行搜索 +: << comment +find . -type f 时间戳,UNIX/Linux文件系统每个文件都有三种时间戳: +精确到分钟的用amin,mmin,cmin,精确到天的用atime,mtime,ctime +-mtime -n +n -n表示文件更改时间距现在n天以内,+n表示文件更改时间距现在n天以前 * **访问时间** (-atime/天,-amin/分钟):用户最近一次访问时间。 * **修改时间** (-mtime/天,-mmin/分钟):文件最后一次修改时间。 * **变化时间** (-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。 +comment -搜索最近七天内被访问过的所有文件 - -``` -find . -type f -atime -7 -``` - -搜索恰好在七天前被访问过的所有文件 - -``` -find . -type f -atime 7 -``` - -搜索超过七天内被访问过的所有文件 - -``` -find . -type f -atime +7 -``` - -搜索访问时间超过10分钟的所有文件 - -``` -find . -type f -amin +10 -``` - -找出比file.log修改时间更长的所有文件 - -``` -find . -type f -newer file.log +find . -type f -atime -7 # 搜索最近七天内被访问过的所有文件 +find . -type f -atime 7 # 搜索恰好在七天前被访问过的所有文件 +find . -type f -atime +7 # 搜索超过七天被访问过的所有文件 +find . -type f -mtime -5 # 查找更改时间在5天以内的文件 +find . -type f -ctime -1 # 查找在24小时内状态改变的文件 +find . -type f -amin +10 # 搜索访问时间超过10分钟的所有文件 +find . -type f -mmin -5 # 查找在5分钟内修改过的文件 +find . -type f -newer file.log # 找出比file.log修改时间更长的所有文件 +find . -newer file1 ! -newer file2 -exec ls -l {} \; # 查找更改时间比文件file1新但比file2旧的文件 ``` -#### 根据文件大小进行匹配 - -``` +```bash +# 根据文件大小-size进行匹配 find . -type f -size 文件大小单元 -``` +: << comment 文件大小单元: * **b** —— 块(512字节) @@ -294,969 +231,56 @@ find . -type f -size 文件大小单元 * **k** —— 千字节 * **M** —— 兆字节 * **G** —— 吉字节 +comment -搜索大于10KB的文件 - -``` -find . -type f -size +10k -``` - -搜索小于10KB的文件 - -``` -find . -type f -size -10k -``` - -搜索等于10KB的文件 - -``` -find . -type f -size 10k -``` - -#### 删除匹配文件 - -删除当前目录下所有.txt文件 - -``` -find . -type f -name "*.txt" -delete -``` - -#### 根据文件权限/所有权进行匹配 - -当前目录下搜索出权限为777的文件 - -``` -find . -type f -perm 777 -``` - -找出当前目录下权限不是644的php文件 - -``` -find . -type f -name "*.php" ! -perm 644 -``` - -找出当前目录用户tom拥有的所有文件 - -``` -find . -type f -user tom -``` - -找出当前目录用户组sunk拥有的所有文件 - -``` -find . -type f -group sunk -``` - -#### 借助`-exec`选项与其他命令结合使用 - -找出当前目录下所有root的文件,并把所有权更改为用户tom - -``` -find .-type f -user root -exec chown tom {} \; -``` - -上例中, **{}** 用于与 **-exec** 选项结合使用来匹配所有文件,然后会被替换为相应的文件名。 - -找出自己家目录下所有的.txt文件并删除 - -``` -find $HOME/. -name "*.txt" -ok rm {} \; -``` - -上例中, **-ok** 和 **-exec** 行为一样,不过它会给出提示,是否执行相应的操作。 - -查找当前目录下所有.txt文件并把他们拼接起来写入到all.txt文件中 - -``` -find . -type f -name "*.txt" -exec cat {} \;> all.txt -``` - -将30天前的.log文件移动到old目录中 - -``` -find . -type f -mtime +30 -name "*.log" -exec cp {} old \; -``` - -找出当前目录下所有.txt文件并以“File:文件名”的形式打印出来 - -``` -find . -type f -name "*.txt" -exec printf "File: %s\n" {} \; -``` - -因为单行命令中-exec参数中无法使用多个命令,以下方法可以实现在-exec之后接受多条命令 - -``` --exec ./text.sh {} \; -``` - -#### 搜索但跳出指定的目录 - -查找当前目录或者子目录下所有.txt文件,但是跳过子目录sk - -``` -find . -path "./sk" -prune -o -name "*.txt" -print -``` - -#### find其他技巧收集 - -要列出所有长度为零的文件 - -``` -find . -empty -``` - -#### 删除指定文件夹下后缀名相同的文件 - -```sh -方法一: -find 目录 -name "*.abc" | xargs rm -命令有点危险,可以先执行前半段,看看是不是你要删除的文件, 然后再整条执行 - -方法二: -find . -name '*.exe' -type f -print -exec rm -rf {} \; -(1) "." 表示从当前目录开始递归查找 -(2) “ -name '*.exe' "根据名称来查找,要查找所有以.exe结尾的文件夹或者文件 -(3) " -type f "查找的类型为文件 -(4) "-print" 输出查找的文件目录名 -(5) 最主要的是是-exec了,-exec选项后边跟着一个所要执行的命令,表示将find出来的文件或目录执行该命令。 -exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{},一个空格和一个\,最后是一个分号 -``` - -#### 如何找出设置了SET位的权限的文件? - -```sh -ls -lh $(find / -type f -perm +6000) -find / -type f -perm +6000 -exec ls -lh {} \; -命令含义介绍: --perm +6000 表示不检查基本权限(000),只要附加权限中匹配任何一位(6包含了4、2)即满足条件;结合“ls -lh”命令是为了同时显示出结果文件的详细属性 -两种方法的区别在于:前者使用了Shell的命令替换操作( $() 符号或者反撇号 ``),只有在find命令执行完毕后才能看到结果;而后一种方法则每找到一条结果就立即显示出来了 -``` - -#### 暂未整理一 - -```sh - -2.1.2使用perm选项 -如果希望按照文件权限模式来查找文件的话,可以采用-perm选项。你可能需要找到所有用户都具有执行权限的文件,或是希望查看某个用户目录下的文件权限类型。在使用这一选项的时候,最好使用八进制的权限表示法。 -为了在当前目录下查找文件权限位为755的文件,即文件属主可以读、写、执行,其他用户可以读、执行的文件,可以用: -$ find . -perm 755 -print -如果希望在当前目录下查找所有用户都可读、写、执行的文件(要小心这种情况),我们可以使用find命令的-perm选项。在八进制数字前面要加一个横杠-。在下面的命令中-perm代表按照文件权限查找,而‘007’和你在chmod命令的绝对模式中所采用的表示法完全相同。 -$ find . -perm -007 -print -2.1.3忽略某个目录 -如果在查找文件时希望忽略某个目录,因为你知道那个目录中没有你所要查找的文件,那么可以使用-prune选项来指出需要忽略的目录。在使用-prune选项时要当心,因为如果你同时使用了-depth选项,那么-prune选项就会被find命令忽略。 -如果希望在/apps目录下查找文件,但不希望在/apps/bin目录下查找,可以用: -$ find /apps -name "/apps/bin" -prune -o -print -2.1.4使用user和nouser选项 -如果希望按照文件属主查找文件,可以给出相应的用户名。例如,在$HOME目录中查找文件属主为dave的文件,可以用: -$ find ~ -user dave -print -在/etc目录下查找文件属主为uucp的文件: -$ find /etc -user uucp -print -为了查找属主帐户已经被删除的文件,可以使用-nouser选项。这样就能够找到那些属主在/etc/passwd文件中没有有效帐户的文件。在使用-nouser选项时,不必给出用户名;find命令能够为你完成相应的工作。例如,希望在/home目录下查找所有的这类文件,可以用: -$ find /home -nouser -print -2.1.5使用group和nogroup选项 -就像user和nouser选项一样,针对文件所属于的用户组,find命令也具有同样的选项,为了在/apps目录下查找属于accts用户组的文件,可以用: -$ find /apps -group accts -print -要查找没有有效所属用户组的所有文件,可以使用nogroup选项。下面的find命令从文件系统的根目录处查找这样的文件 -$ find / -nogroup -print -2.1.6按照更改时间查找文件 -如果希望按照更改时间来查找文件,可以使用mtime选项。如果系统突然没有可用空间了,很有可能某一个文件的长度在此期间增长迅速,这时就可以用mtime选项来查找这样的文件。用减号-来限定更改时间在距今n日以内的文件,而用加号+来限定更改时间在距今n日以前的文件。 -希望在系统根目录下查找更改时间在5日以内的文件,可以用: -$ find/-mtime-5-print -为了在/var/adm目录下查找更改时间在3日以前的文件,可以用: -$ find /var/adm -mtime +3 -print -2.1.7查找比某个文件新或旧的文件 -如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用-newer选项。它的一般形式为: -newest_file_name ! oldest_file_name -其中,!是逻辑非符号。 -这里有两个文件,它们的更改时间大约相差两天。 --rwxr-x-r-x 1 root root 92 Apr 18 11:18 age.awk --rwxrwxr-x 1 root root 1045 Apr 20 19:37 belts.awk -下面给出的find命令能够查找更改时间比文件age.awk新但比文件belts.awk旧的文件: -$ find . -newer age.awk ! -newer belts.awk -exec ls -l {} \; --rwxrwxr-x 1 root root 62 Apr 18 11:32 ./who.awk --rwxr-xr-x 1 root root 49 Apr 18 12:05 ./group.awk --rw-r--r-- 1 root root 201 Apr 20 19:30 ./grade2.txt --rwxrwxr-x 1 root root 1054 Apr 20 19:37 ./belts.awk -如果想使用find命令的这一选项来查找更改时间在两个小时以内的文件,除非有一个现成的文件其更改时间恰好在两个小时以前,否则就没有可用来比较更改时间的文件。为了解决这一问题,可以首先创建一个文件并将其日期和时间戳设置为所需要的时间。这可以用touch命令来实现。 -假设现在的时间是23:40,希望查找更改时间在两个小时以内的文件,可以首先创建这样一个文件: -$ touch -t 05042140 dstamp --rw-r--r-- 1 dave admin 0 May 4 21:40 dstamp -一个符合要求的文件已经被创建;这里我们假设今天是五月四日,而该文件的更改时间是21:40,比现在刚好早两个小时。 -现在我们就可以使用find命令的-newer选项在当前目录下查找所有更改时间在两个小时以内的文件: -$find . -newer dstamp -print -2.1.8使用type选项 -UNIX或LINUX系统中有若干种不同的文件类型,这部分内容我们在前面的章节已经做了介绍,这里就不再赘述。如果要在/etc目录下查找所有的目录,可以用: -$find /etc -type d -print -为了在当前目录下查找除目录以外的所有类型的文件,可以用: -$find . ! -type d -print -为了在/etc目录下查找所有的符号链接文件,可以用: -$find /etc -type l -print -2.1.9 -使用size选项可以按照文件长度来查找文件,这里所指的文件长度既可以用块(block)来计量,也可以用字节来计量。以字节计量文件长度的表达形式为Nc;以块计量文件长度只用数字表示即可。 -就我个人而言,我总是使用以字节计的方式,在按照文件长度查找文件时,大多数人都喜欢使用这种以字节表示的文件长度,而不用块的数目来表示,除非是在查看文件系统的大 -小,因为这时使用块来计量更容易转换。 -为了在当前目录下查找文件长度大于1M字节的文件,可以用: -$find . -size +1000000c -print -为了在/home/apache目录下查找文件长度恰好为100字节的文件,可以用: -$find /home /apache -size 100c -print -为了在当前目录下查找长度超过10块的文件(一块等于512字节),可以用: -$find . -size +10 -print -2.1.10使用depth选项 -在使用find命令时,可能希望先匹配所有的文件,再在子目录中查找。使用depth选项就可以使find命令这样做。这样做的一个原因就是,当在使用find命令向磁带上备份文件系统时,希望首先备份所有的文件,其次再备份子目录中的文件。 -在下面的例子中,find命令从文件系统的根目录开始,查找一个名为CON.FILE的文件。它将首先匹配所有的文件然后再进入子目录中查找。 -$find / -name "CON.FILE" -depth -print -2.1.11使用mount选项 -在当前的文件系统中查找文件(不进入其他文件系统),可以使用find命令的mount选项。在下面的例子中,我们从当前目录开始查找位于本文件系统中文件名以XC结尾的文件: -$find . -name "*.XC" -mount -print -2.1.12使用cpio选项 -cpio命令可以用来向磁带设备备份文件或从中恢复文件。可以使用find命令在整个文件系统中(更多的情况下是在部分文件系统中)查找文件,然后用cpio命令将其备份到磁带上。 -如果希望使用cpio命令备份/etc、/home和/apps目录中的文件,可以使用下面所给出的命令,不过要记住你是在文件系统的根目录下: -$ cd / -$ find etc home apps -depth -print | cpio -ivcdC65536 -o /dev/rmt0 -(在上面的例子中,第一行末尾的\告诉shell命令还未结束,忽略\后面的回车。) -在上面的例子中,应当注意到路径中缺少/。这叫作相对路径。之所以使用相对路径,是因为在从磁带中恢复这些文件的时候,可以选择恢复文件的路径。例如,可以将这些文件先恢复到另外一个目录中,对它们进行某些操作后,再恢复到原始目录中。如果在备份时使用了绝对路径,例如/etc,那么在恢复时,就只能恢复到/etc目录中去,别无其他选择。在上面的例子中,我告诉find命令首先进入/etc目录,然后是/home和/apps目录,先匹配这些目录下的文件,然后再匹配其子目录中的文件,所有这些结果将通过管道传递给cpio命令进行备份。 -顺便说一下,在上面的例子中cpio命令使用了C65536选项,我本可以使用B选项,不过这样每块的大小只有512字节,而使用了C65536选项后,块的大小变成了64K字节(65536/1024)。 -2.1.13使用exec或ok来执行shell命令 -当匹配到一些文件以后,可能希望对其进行某些操作,这时就可以使用-exec选项。一旦find命令匹配到了相应的文件,就可以用-exec选项中的命令对其进行操作(在有些操作系统中只允许-exec选项执行诸如ls或ls-l这样的命令)。大多数用户使用这一选项是为了查找旧文件并删除它们。这里我强烈地建议你在真正执行rm命令删除文件之前,最好先用ls命令看一下,确认它们是所要删除的文件。 -exec选项后面跟随着所要执行的命令,然后是一对儿{},一个空格和一个\,最后是一个分号。 -为了使用exec选项,必须要同时使用print选项。如果验证一下find命令,会发现该命令只输出从当前路径起的相对路径及文件名。 -为了用ls-l命令列出所匹配到的文件,可以把ls-l命令放在find命令的-exec选项中,例如: -$ find . -type f -exec ls-l {} \; --rwxr-xr-x 10 root wheel 1222 Jan 4 1993 ./sbin/C80 --rwxr-xr-x 10 root wheel 1222 Jan 4 1993 ./sbin/Normal --rwxr-xr-x 10 root wheel 1222 Jan 4 1993 ./sbin/Revvid -上面的例子中,find命令匹配到了当前目录下的所有普通文件,并在-exec选项中使用ls-l命令将它们列出。 -为了在/logs目录中查找更改时间在5日以前的文件并删除它们,可以用: -$ find logs -type f -mtime +5 -exec rm {} \; -记住,在shell中用任何方式删除文件之前,应当先查看相应的文件,一定要小心! -当使用诸如mv或rm命令时,可以使用-exec选项的安全模式。它将在对每个匹配到的文件进行操作之前提示你。在下面的例子中,find命令在当前目录中查找所有文件名以.LOG结尾、更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示。 -$ find . -name “*.LOG” -mtime +5 -ok rm {} \; - ?y -按y键删除文件,按n键不删除。 -任何形式的命令都可以在-exec选项中使用。在下面的例子中我们使用grep命令。find命令首先匹配所有文件名为“passwd*”的文件,例如passwd、passwd.old、passwd.bak,然后执行grep命令看看在这些文件中是否存在一个rounder用户。 -$ find /etc -name “passwd*” -exec grep “rounder” {} \; -rounder:JL9TtUqk8EHwc:500:500::/home/apps/nets/rounder:/bin/sh -2.1.14find命令的例子 -我们已经介绍了find命令的基本选项,下面给出find命令的一些其他的例子。 -为了匹配$HOME目录下的所有文件,下面两种方法都可以使用: -$ find $HOME -print -$ find ~ -print -为了在当前目录中查找suid置位,文件属主具有读、写、执行权限,并且文件所属组的用户和其他用户具有读和执行的权限的文件,可以用: -$ find . -type f -perm 4755 -print -为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径,可以用: -$ find / -type f -size 0 -exec ls-l {} \; -为了查找/var/logs目录中更改时间在7日以前的普通文件,并删除它们,可以用: -$ find /var/logs -type f -mtime +7 -exec rm {} \; -为了查找系统中所有属于audit组的文件,可以用: -$ find / -name -group audit -print -我们的一个审计系统每天创建一个审计日志文件。日志文件名的最后含有数字,这样我们一眼就可以看出哪个文件是最新的,哪个是最旧的。Admin.log文件编上了序号:admin.log.001、admin.log.002等等。下面的find命令将删除/logs目录中访问时间在7日以前、含有数字后缀的admin.log文件。该命令只检查三位数字,所以相应日志文件的后缀不要超过999。 -$ find / logs -name 'admin.log[0-9][0-9]' [-0a-t9i]me +7 -exec rm {} \; -为了查找当前文件系统中的所有目录并排序,可以用: -$ find . -type d -print -local -mount | sort -为了查找系统中所有的rmt磁带设备,可以用: -$ find /dev/rmt -print -2.2xargs -在使用find命令的-exec选项处理匹配到的文件时,find命令将所有匹配到的文件一起传递给exec执行。不幸的是,有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。Find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高;而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。 -让我们来看看xargs命令是如何同find命令一起使用的,并给出一些例子。 -下面的例子查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件: -$ find / -type f -print | xargs file -/etc/protocols: Enghlish text -/etc/securetty: ASCII test -… -下面的例子在整个系统中查找内存信息转储文件(coredump),然后把结果保存到/tmp/core.log文件中: -$ find . -name "core" -print | xargs echo "" >/tmp/core.log -下面的例子在/apps/audit目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限: -$ find /apps/audit -perm -7 -print | xargs chmod o -w -在下面的例子中,我们用grep命令在所有的普通文件中搜索device这个词: -$ find / -type f -print | xargs grep "device" -在下面的例子中,我们用grep命令在当前目录下的所有普通文件中搜索DBO这个词: -$ find . -name *\ -type f -print | xargs grep "DBO" -注意,在上面的例子中,\用来取消find命令中的*在shell中的特殊含义。 -find简单示例 -(1) find . -type f -exec ls -l {} \; -解释:查找当前路径下的所有普通文件,并把它们列出来。 -(2)find logs -type f -mtime +5 -exec rm {} \; -解释:删除logs目录下更新时间为5日以上的文件。 -(3)find . -name "*.log" -mtime +5 -ok rm {} \; -解释:删除当前路径下以。log结尾的五日以上的文件,删除之前要确认。 -(4) find ~ -type f -perm 4755 -print -解释:查找$HOME目录下suid位被设置,文件属性为755的文件打印出来。 -说明: find在有点系统中会一次性得到将匹配到的文件都传给exec,但是有的系统对exec的命令长度做限制,就会报:”参数列太长“,这就需要使用xargs。xargs是部分取传来的文件。 -(5)find / -type f -print |xargs file -解释:xargs测试文件分类 -(6)find . -name "core*" -print|xargs echo " ">/tmp/core.log -解释:将core文件信息查询结果报存到core。log日志。 -(7)find / -type f -print | xargs chmod o -w -(8)find . -name * -print |xargs grep "DBO" -find用法小结 -1. 通过文件的特征查找: -1) 按文件名 -find / -name httpd.conf -find /usr -name httpd.conf -find /etc -name '*srm*' -2) 按大小 -find / -size 1500c # 查找文件大小为1,500 bytes的文件,字符 c 表明这个要查找的文件的大小是以bytes为单位。 -find/ -size +10000000c # "+”是表示要求系统只列出大于指定大小的文件, "-”表示小于 -find / -empty # 查找在系统中为空的文件或者文件夹 --size:表示文件大小,+表示大于某个数,-表示小于某个数。c表示单位是字节,你可以将c换成k,M,G。 -3) 按时间 -find / -amin -10 # 查找在系统中最后10分钟访问的文件 -find / -atime -2 # 查找在系统中最后48小时访问的文件 -find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件 -find / -mtime -1 # 查找在系统中最后24小时里修改过的文件 -find / -cmin -5 # 查找在系统中最后5分钟里被改变状态的文件 -find / -ctime -1 # 查找在系统中最后24小时里被改变状态的文件 -访问过用amin,修改过用mmin,文件状态改变过用cmin -精确到分钟的用amin,mmin,cmin,精确到天的用atime,mtime,ctime -在5分钟之内的用-5,在5分钟以上的用+5 -4) 按用户 -find / -user fred # 查找在系统中属于FRED这个用户的文件 -find / -group cat # 查找在系统中属于 groupcat的文件 -find / -nouser # 查找在系统中属于作废用户的文件 -5) 其他 --false 查找系统中总是错误的文件 --fstype type 查找系统中存在于指定文件系统的文件,例如:ext2 . --gid n 查找系统中文件数字组 ID 为 n的文件 --group gname 查找系统中文件属于gnam文件组,并且指定组和ID的文件 -2. 通过文件的特征查找: -Find命令也提供给用户一些特有的选项来控制查找操作。下表就是我们总结出的最基本,最常用的find命令的控制选项及其用法。 -选项 用途描述 --daystart . .测试系统从今天开始24小时以内的文件,用法类似-amin --depth 使用深度级别的查找过程方式,在某层指定目录中优先查找文件内容 --follow 遵循通配符链接方式查找; 另外,也可忽略通配符链接方式查询 --maxdepth levels 在某个层次的目录中按照递减方法查找 --mount 不在文件系统目录中查找, 用法类似 -xdev. --noleaf 禁止在非UNUX文件系统,MS-DOS系统,CD-ROM文件系统中进行最优化查找 --help 显示命令摘要 --version 打印版本数字 -使用-follow选项后,find命令则遵循通配符链接方式进行查uuuu找,除非你指定这个选项,否则一般情况下find命令将忽略通配符链接方式进行文件查找。 --maxdepth选项的作用就是限制find命令在目录中按照递减方式查找文件的时候搜索文件超过某个级别或者搜索过多的目录,这样导致查找速度变慢,查找花费的时间过多。例如,我们要在当前(.)目录技巧子目录中查找一个名叫fred的文件,我们可以使用如下命令 -find . -maxdepth 2 -name fred -假如这个fred文件在./sub1/fred目录中,那么这个命令就会直接定位这个文件,查找很容易成功。假如,这个文件在./sub1/sub2 /fred目录中,那么这个命令就无法查找到。因为前面已经给find命令在目录中最大的查询目录级别为2,只能查找2层目录下的文件。这样做的目的就是为了让find命令更加精确的定位文件,如果你已经知道了某个文件大概所在的文件目录级数,那么加入-maxdepth n 就很快的能在指定目录中查找成功。 -3. 使用混合查找方式: -find /tmp -size +10000000c -and -mtime +2 // -and -find / -user fred -or -user george // -or 在/tmp目录中查找属于fred或者george这两个用户的文件 -find /tmp ! -user panda // -or 在/tmp目录中查找所有不属于panda的文件 -命令就可以解决了。很简单。 -查找并显示文件的方法 -查找到某个文件是我们的目的,我们更想知道查找到的文件的详细信息和属性, -find / -name "httpd.conf" -ls -下面的表格就是一些常用的查找文件并显示文件信息的参数和使用方法 -选项 用途描述 --exec command; 查找并执行命令 --fprint file 打印文件完整文件名 --fprint0 file 打印文件完整文件名包括空的文件 --fprintf file format 打印文件格式 --ok command; 给用户命令执行操作,根据用户的Y 确认输入执行 --printf format 打印文件格式 --ls 打印同种文件格式的文件. -2. 普通用户无错误查找: -find / -name access_log 2>/dev/null -说明:当普通用户使用"find”命令来查询某些没有相应权限文件目录时(Linux系统中系统管理员ROOT可以把某些文件目录设置成禁止访问模式) -往往会出现"Permissiondenied."(禁止访问)字样。 2>/dev/null就是表明系统将把错误信息输送到stderrstream 2中. --exec command; -删除一个目录中的全部文件 -cd “目的目录” -find . -name * -exec rm -f {} \; --exec 参数后面跟的是 command命令,注意如下几点: -1) command命令的终止,使用 ';' (分号)来判定,在后面必须有一个 ';' -出于不明原因, ';'需要用'\'来转义 ,所以命令整体形式为: -exec rm -f {} \; -2) '{}',使用{}来表示文件名,也就是find前面处理过程中过滤出来的文件,用于command命令进行处理 -1.查询所有保护字符串“Hello”的文件 -find / -exec grep "Hello" {} \; -2.删除所有临时文件 -find / -name "*.tmp" -exec rm -f {} \; -3. 使用混合查找方式: -find /tmp -size +10000000c -and -mtime +2 // -and -find / -user fred -or -user george // -or 在/tmp目录中查找属于fred或者george这两个用户的文件 -find /tmp ! -user panda // -or 在/tmp目录中查找所有不属于panda的文件 -find /tmp ! \( -user 0 -o -user 500 -o -user 501 \) -exec ls -l {} \; -把用户名改成UID就可以了 -find命令使用经验 -find pathname -options [-print -exec -ok] -pathname find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。 --print find命令将匹配的文件输出到标准输出。 --exec find命令对匹配的文件执行该参数所给出的shell命令。 -相应命令的形式为'command'{} \;,注意{}和\;之间的空格。 --ok和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行 -文件状态判断: --mtime: 指定时间文件内容被修改过 --ctime: 指定时间文件权限被修改过 --atime: 指定时间文件被读取过 -找出3天“以前”被修改过的文档 -# find /var/log/ -mtime +3 -type f -print -找出3天“内”被修改过的文档 -# find /var/log/ -mtime -3 -type f -print -找出第3天被修改过的文档. -# find /var/log/ -mtime 3 -type f -print -或这样写: -#find /var/log/ -mtime +2 -mtime -4 -type f -print -注: -访问过用amin,修改过用mmin,文件状态改变过用cmin -精确到分钟的用amin,mmin,cmin,精确到天的用atime,mtime,ctime -xargs - build and execute command lines from standard input -在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。 -find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。 -在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高; -而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。 -来看看xargs命令是如何同find命令一起使用的,并给出一些例子。 -下面的例子查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件 -#find . -type f -print | xargs file -./.kde/Autostart/Autorun.desktop: UTF-8 Unicode English text -./.kde/Autostart/.directory: ISO-8859 text\ -...... -在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中: -$ find / -name "core" -print | xargs echo "" >/tmp/core.log -上面这个执行太慢,我改成在当前目录下查找 -#find . -name "file*" -print | xargs echo "" > /temp/core.log -# cat /temp/core.log -./file6 -在当前目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限: -# ls -l -drwxrwxrwx 2 sam adm 4096 10月 30 20:14 file6 --rwxrwxrwx 2 sam adm 0 10月 31 01:01 http3.conf --rwxrwxrwx 2 sam adm 0 10月 31 01:01 httpd.conf -# find . -perm -7 -print | xargs chmod o-w -# ls -l -drwxrwxr-x 2 sam adm 4096 10月 30 20:14 file6 --rwxrwxr-x 2 sam adm 0 10月 31 01:01 http3.conf --rwxrwxr-x 2 sam adm 0 10月 31 01:01 httpd.conf -用grep命令在所有的普通文件中搜索hostname这个词: -# find . -type f -print | xargs grep "hostname" -./httpd1.conf:# different IP addresses or hostnames and have them handled by the -./httpd1.conf:# VirtualHost: If you want to maintain multiple domains/hostnames -on your -用grep命令在当前目录下的所有普通文件中搜索hostnames这个词: -# find . -name \* -type f -print | xargs grep "hostnames" -./httpd1.conf:# different IP addresses or hostnames and have them handled by the -./httpd1.conf:# VirtualHost: If you want to maintain multiple domains/hostnames -on your -注意,在上面的例子中, \用来取消find命令中的*在shell中的特殊含义。 -find命令配合使用exec和xargs可以使用户对所匹配到的文件执行几乎所有的命令 -使用exec或ok来执行shell命令 -使用find时,只要把想要的操作写在一个文件里,就可以用exec来配合find查找,很方便的 -在有些操作系统中只允许-exec选项执行诸如l s或ls -l这样的命令。大多数用户使用这一选项是为了查找旧文件并删除它们。建议在真正执行rm命令删除文件之前,最好先用ls命令看一下,确认它们是所要删除的文件。 -exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{ },一个空格和一个\,最后是一个分号。为了使用exec选项,必须要同时使用print选项。如果验证一下find命令,会发现该命令只输出从当前路径起的相对路径及文件名。 -例如:为了用ls -l命令列出所匹配到的文件,可以把ls -l命令放在find命令的-exec选项中 -# find . -type f -exec ls -l { } \; --rw-r--r-- 1 root root 34928 2003-02-25 ./conf/httpd.conf --rw-r--r-- 1 root root 12959 2003-02-25 ./conf/magic --rw-r--r-- 1 root root 180 2003-02-25 ./conf.d/README -上面的例子中,find命令匹配到了当前目录下的所有普通文件,并在-exec选项中使用ls -l命令将它们列出。 -在/logs目录中查找更改时间在5日以前的文件并删除它们: -$ find logs -type f -mtime +5 -exec rm { } \; -记住:在shell中用任何方式删除文件之前,应当先查看相应的文件,一定要小心!当使用诸如mv或rm命令时,可以使用-exec选项的安全模式。它将在对每个匹配到的文件进行操作之前提示你。 -在下面的例子中, find命令在当前目录中查找所有文件名以.LOG结尾、更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示。 -$ find . -name "*.conf" -mtime +5 -ok rm { } \; -< rm ... ./conf/httpd.conf > ? n -按y键删除文件,按n键不删除。 -任何形式的命令都可以在-exec选项中使用。 -在下面的例子中我们使用grep命令。find命令首先匹配所有文件名为“ passwd*”的文件,例如passwd、passwd.old、passwd.bak,然后执行grep命令看看在这些文件中是否存在一个sam用户。 -# find /etc -name "passwd*" -exec grep "sam" { } \; -sam:x:501:501::/usr/sam:/bin/bash -find 命令用法 -find / -name access_log 2>/dev/null -find /etc -name ‘*srm*’ -find / -amin -10 # 查找在系统中最后10分钟访问的文件 -find / -atime -2 # 查找在系统中最后48小时访问的文件 -find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件 -find / -mtime -1 #查找在系统中最后24小时里修改过的文件 -find / -cmin -5 # 查找在系统中最后5分钟里被改变状态的文件 -find / -ctime -1 #查找在系统中最后24小时里被改变状态的文件 -find / -user reda #查找在系统中属于fred这个用户的文件 -find / -not -user red #查找在系统中不属于red这个用户的文件 -find / -group redagrp # 查找在系统中属于redagrp组的文件 -find / -gid 501 #查找系统中属于组id为501的文件 -find / -user fred -a -group redagrp -find / -user reda -o -user tracy -find / -nouser #查找在系统中属于作废用户的文件 -find / -empty # 查找在系统中为空的文件或者为空的文件夹 -find / -false #查找系统中总是错误的文件 -find / -size +5k #查找系统中大于5k字节的文件 -find / -size +5c #查找系统中大于5字节的文件 -find / -perm +6000 -find / -type b -文件类型: -b 块(缓冲)设备. -c 字符设备. -d 目录. -p 有名管道(FIFO). -f 规则文件. -l 符号链结. -s SOCKET. -find / -maxdepth 2 -name fred -find /tmp -size +10000000c -and -mtime +2 -find / -user reda -or -user tracy -find /tmp ! -user reda -find / -name "httpd.conf" -ls -find / -user reda -exec ls -l {} \; -find / -user reda -ok #确认后执行 -find / -user reda | xargs ls -l -6.2 使用|| -使用||的一般形式为: -命令1 || 命令2 -||的作用有一些不同。如果||左边的命令(命令1)未执行成功,那么就执行||右边的命令(命令2);或者换句话说,“如果这个命令执行失败了|| 那么就执行这个命令”。 -这里有一个使用||的简单例子: -$ cp wopper.txt wopper.bak || echo “if you are seeing this cp failed” -cp: wopper.txt: No such file or directory -if you are seeing this cp failed -在上面的例子中,拷贝命令没有能够被成功执行,因此||后面的命令被执行。 -这里有一个更为实用的例子。我希望从一个审计文件中抽取第1个和第5个域,并将其输出到一个临时文件中,如果这一操作未成功,我希望能够收到一个相应邮件: -$ awk ‘{print $5}’ acc.qtr > qtr.tmp || echo “Sorry the payroll extraction didn’t work” | mail dave -在这里不只可以使用系统命令;这里我们首先对month_end.txt文件执行了一个名为comet的shell脚本,如果该脚本未执行成功,该shell将结束。 -$ comet month_end.txt || exit -6.3 用()和{}将命令结合在一起 -如果希望把几个命令合在一起执行, shell提供了两种方法。既可以在当前shell也可以在子shell中执行一组命令。 -为了在当前shell中执行一组命令,可以用命令分隔符隔开每一个命令,并把所有的命令用圆括号()括起来。 -它的一般形式为: -(命令1;命令2;. . .) -如果使用{ }来代替(),那么相应的命令将在子shell而不是当前shell中作为一个整体被执行,只有在{ }中所有命令的输出作为一个整体被重定向时,其中的命令才被放到子shell中执行,否则在当前shell执行。它的一般形式为: -{命令1;命令2;. . . } -我很少单独使用这两种方法。我一般只和&&或||一起使用这两种方法。 -再回到前面那个comet脚本的例子,如果这个脚本执行失败了,我很可能会希望执行两个以上的命令,而不只是一个命令。我可以使用这两种方法。这是原先那个例子: -$ comet month_end.txt || exit -现在如果该脚本执行失败了,我希望先给自己发个邮件,然后再退出,可以用下面的方法来实现: -$ comet month_end || (echo “Hello, guess what! Comet did not work”|mail dave;exit) -在上面的例子中,如果只使用了命令分隔符而没有把它们组合在一起,shell将直接执行最后一个命令(exit)。 -我们再回头来看看前面那个使用&&排序的例子,下面是原来的那个例子: -$ sort quarter_end.txt > quarter.sorted && lp quarter.sorted -使用命令组合的方法,如果sort命令执行成功了,可以先将输出文件拷贝到一个日志区,然后再打印。 -6.4 小结 -在编写shell脚本时,使用&&和||对构造判断语句非常有用。如果希望在前一个命令执行失败的情况不执行后面的命令,那么本章所讲述的方法非常简单有效。使用这样的方法,可以根据&&或||前面命令的返回值来控制其后面命令的执行。 +find . -empty # 要列出所有空文件 +find . -type f -size +10k # 搜索大于10KB的文件 +find . -type f -size -10k # 搜索小于10KB的文件 +find . -type f -size 10k # 搜索等于10KB的文件 ``` -#### 暂未整理二 - -```sh - -一、find 命令格式 - - -1、find命令的一般形式为; - -find pathname -options [-print -exec -ok ...] - -2、find命令的参数; - -pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。 --print: find命令将匹配的文件输出到标准输出。 --exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' {} \;,注意{}和\;之间的空格。 --ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。 - -3、find命令选项 - --name - -按照文件名查找文件。 - --perm -按照文件权限来查找文件。 - --prune -使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。 - --user -按照文件属主来查找文件。 - --group -按照文件所属的组来查找文件。 - --mtime -n +n -按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项。 - --nogroup -查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。 - --nouser -查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。 --newer file1 ! file2 - -查找更改时间比文件file1新但比文件file2旧的文件。 --type - -查找某一类型的文件,诸如: - -b - 块设备文件。 -d - 目录。 -c - 字符设备文件。 -p - 管道文件。 -l - 符号链接文件。 -f - 普通文件。 - --size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。 --depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。 --fstype:查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。 - --mount:在查找文件时不跨越文件系统mount点。 --follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。 --cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。 -另外,下面三个的区别: - --amin n -查找系统中最后N分钟访问的文件 - --atime n -查找系统中最后n*24小时访问的文件 - --cmin n -查找系统中最后N分钟被改变文件状态的文件 - --ctime n -查找系统中最后n*24小时被改变文件状态的文件 - --mmin n -查找系统中最后N分钟被改变文件数据的文件 - --mtime n -查找系统中最后n*24小时被改变文件数据的文件 - -4、使用exec或ok来执行shell命令 - -使用find时,只要把想要的操作写在一个文件里,就可以用exec来配合find查找,很方便的 - -在有些操作系统中只允许-exec选项执行诸如l s或ls -l这样的命令。大多数用户使用这一选项是为了查找旧文件并删除它们。建议在真正执行rm命令删除文件之前,最好先用ls命令看一下,确认它们是所要删除的文件。 - -exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{ },一个空格和一个\,最后是一个分号。为了使用exec选项,必须要同时使用print选项。如果验证一下find命令,会发现该命令只输出从当前路径起的相对路径及文件名。 - -例如:为了用ls -l命令列出所匹配到的文件,可以把ls -l命令放在find命令的-exec选项中 - -# find . -type f -exec ls -l {} \; --rw-r--r-- 1 root root 34928 2003-02-25 ./conf/httpd.conf --rw-r--r-- 1 root root 12959 2003-02-25 ./conf/magic --rw-r--r-- 1 root root 180 2003-02-25 ./conf.d/README -上面的例子中,find命令匹配到了当前目录下的所有普通文件,并在-exec选项中使用ls -l命令将它们列出。 -在/logs目录中查找更改时间在5日以前的文件并删除它们: - -$ find logs -type f -mtime +5 -exec rm {} \; -记住:在shell中用任何方式删除文件之前,应当先查看相应的文件,一定要小心!当使用诸如mv或rm命令时,可以使用-exec选项的安全模式。它将在对每个匹配到的文件进行操作之前提示你。 - -在下面的例子中, find命令在当前目录中查找所有文件名以.LOG结尾、更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示。 - -$ find . -name "*.log" -mtime +5 -ok rm {} \; -< rm ... ./conf/httpd.conf > ? n -按y键删除文件,按n键不删除。 - -任何形式的命令都可以在-exec选项中使用。 - -在下面的例子中我们使用grep命令。find命令首先匹配所有文件名为“ passwd*”的文件,例如passwd、passwd.old、passwd.bak,然后执行grep命令看看在这些文件中是否存在一个sam用户。 - -# find /etc -name "passwd*" -exec grep "sam" {} \; -sam:x:501:501::/usr/sam:/bin/bash - -二、find命令的例子; - - -1、查找当前用户主目录下的所有文件: - -下面两种方法都可以使用 - -$ find $HOME -print -$ find ~ -print - -2、让当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件; - -$ find . -type f -perm 644 -exec ls -l {} \; - -3、为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径; - -$ find / -type f -size 0 -exec ls -l {} \; - -4、查找/var/logs目录中更改时间在7日以前的普通文件,并在删除之前询问它们; - -$ find /var/logs -type f -mtime +7 -ok rm {} \; - -5、为了查找系统中所有属于root组的文件; - -$find . -group root -exec ls -l {} \; --rw-r--r-- 1 root root 595 10月 31 01:09 ./fie1 - -6、find命令将删除当目录中访问时间在7日以来、含有数字后缀的admin.log文件。 - -该命令只检查三位数字,所以相应文件的后缀不要超过999。先建几个admin.log*的文件 ,才能使用下面这个命令 - -$ find . -name "admin.log[0-9][0-9][0-9]" -atime -7 -ok -rm {} \; -< rm ... ./admin.log001 > ? n -< rm ... ./admin.log002 > ? n -< rm ... ./admin.log042 > ? n -< rm ... ./admin.log942 > ? n - -7、为了查找当前文件系统中的所有目录并排序; - -$ find . -type d | sort - -8、为了查找系统中所有的rmt磁带设备; - -$ find /dev/rmt -print - -三、xargs - -xargs – build and execute command lines from standard input - -在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。 - -find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。 - -在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高; - -而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。 - -来看看xargs命令是如何同find命令一起使用的,并给出一些例子。 - -下面的例子查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件 - -#find . -type f -print | xargs file -./.kde/Autostart/Autorun.desktop: UTF-8 Unicode English text -./.kde/Autostart/.directory: ISO-8859 text\ -...... -在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中: - -$ find / -name "core" -print | xargs echo "" >/tmp/core.log -上面这个执行太慢,我改成在当前目录下查找 - -#find . -name "file*" -print | xargs echo "" > /temp/core.log -# cat /temp/core.log -./file6 -在当前目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限: - -# ls -l -drwxrwxrwx 2 sam adm 4096 10月 30 20:14 file6 --rwxrwxrwx 2 sam adm 0 10月 31 01:01 http3.conf --rwxrwxrwx 2 sam adm 0 10月 31 01:01 httpd.conf - -# find . -perm -7 -print | xargs chmod o-w -# ls -l -drwxrwxr-x 2 sam adm 4096 10月 30 20:14 file6 --rwxrwxr-x 2 sam adm 0 10月 31 01:01 http3.conf --rwxrwxr-x 2 sam adm 0 10月 31 01:01 httpd.conf -用grep命令在所有的普通文件中搜索hostname这个词: - -# find . -type f -print | xargs grep "hostname" -./httpd1.conf:# different IP addresses or hostnames and have them handled by the -./httpd1.conf:# VirtualHost: If you want to maintain multiple domains/hostnames -on your -用grep命令在当前目录下的所有普通文件中搜索hostnames这个词: - -# find . -name \* -type f -print | xargs grep "hostnames" -./httpd1.conf:# different IP addresses or hostnames and have them handled by the -./httpd1.conf:# VirtualHost: If you want to maintain multiple domains/hostnames -on your -注意,在上面的例子中, \用来取消find命令中的*在shell中的特殊含义。 - -find命令配合使用exec和xargs可以使用户对所匹配到的文件执行几乎所有的命令。 - +```bash +# 根据文件权限/所有权进行匹配 -四、find 命令的参数 - -下面是find一些常用参数的例子,有用到的时候查查就行了,像上面前几个贴子,都用到了其中的的一些参数,也可以用man或查看论坛里其它贴子有find的命令手册 - - -1、使用name选项 - -文件名选项是find命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用。 - -可以使用某种文件名模式来匹配文件,记住要用引号将文件名模式引起来。 - -不管当前路径是什么,如果想要在自己的根目录$HOME中查找文件名符合*.txt的文件,使用~作为 ‘pathname’参数,波浪号~代表了你的$HOME目录。 - -$ find ~ -name "*.txt" -print -想要在当前目录及子目录中查找所有的‘ *.txt’文件,可以用: - -$ find . -name "*.txt" -print -想要的当前目录及子目录中查找文件名以一个大写字母开头的文件,可以用: - -$ find . -name "[A-Z]*" -print -想要在/etc目录中查找文件名以host开头的文件,可以用: - -$ find /etc -name "host*" -print -想要查找$HOME目录中的文件,可以用: - -$ find ~ -name "*" -print 或find . -print -要想让系统高负荷运行,就从根目录开始查找所有的文件。 - -$ find / -name "*" -print -如果想在当前目录查找文件名以两个小写字母开头,跟着是两个数字,最后是.txt的文件,下面的命令就能够返回名为ax37.txt的文件: - -$find . -name "[a-z][a-z][0--9][0--9].txt" -print - -2、用perm选项 - -按照文件权限模式用-perm选项,按文件权限模式来查找文件的话。最好使用八进制的权限表示法。 - -如在当前目录下查找文件权限位为755的文件,即文件属主可以读、写、执行,其他用户可以读、执行的文件,可以用: - -$ find . -perm 755 -print -还有一种表达方法:在八进制数字前面要加一个横杠-,表示都匹配,如-007就相当于777,-006相当于666 - -# ls -l --rwxrwxr-x 2 sam adm 0 10月 31 01:01 http3.conf --rw-rw-rw- 1 sam adm 34890 10月 31 00:57 httpd1.conf --rwxrwxr-x 2 sam adm 0 10月 31 01:01 httpd.conf -drw-rw-rw- 2 gem group 4096 10月 26 19:48 sam --rw-rw-rw- 1 root root 2792 10月 31 20:19 temp - -# find . -perm 006 -# find . -perm -006 -./sam -./httpd1.conf -./temp -perm mode:文件许可正好符合mode - -perm +mode:文件许可部分符合mode - -perm -mode: 文件许可完全符合mode - -3、忽略某个目录 - -如果在查找文件时希望忽略某个目录,因为你知道那个目录中没有你所要查找的文件,那么可以使用-prune选项来指出需要忽略的目录。在使用-prune选项时要当心,因为如果你同时使用了-depth选项,那么-prune选项就会被find命令忽略。 - -如果希望在/apps目录下查找文件,但不希望在/apps/bin目录下查找,可以用: - -$ find /apps -path "/apps/bin" -prune -o -print - -4、使用find查找文件的时候怎么避开某个文件目录 - -比如要在/usr/sam目录下查找不在dir1子目录之内的所有文件 - -find /usr/sam -path "/usr/sam/dir1" -prune -o -print -find [-path ..] [expression] 在路径列表的后面的是表达式 --path “/usr/sam” -prune -o -print 是 -path “/usr/sam” -a -prune -o --print 的简写表达式按顺序求值, -a 和 -o 都是短路求值,与 shell 的 && 和 || 类似如果 -path “/usr/sam” 为真,则求值 -prune , -prune 返回真,与逻辑表达式为真;否则不求值 -prune,与逻辑表达式为假。如果 -path “/usr/sam” -a -prune 为假,则求值 -print ,-print返回真,或逻辑表达式为真;否则不求值 -print,或逻辑表达式为真。 - -这个表达式组合特例可以用伪码写为 - -if -path "/usr/sam" then --prune -else --print -避开多个文件夹 - -find /usr/sam \( -path /usr/sam/dir1 -o -path /usr/sam/file1 \) -prune -o -print -圆括号表示表达式的结合。 - -\ 表示引用,即指示 shell 不对后面的字符作特殊解释,而留给 find 命令去解释其意义。 -查找某一确定文件,-name等选项加在-o 之后 - -#find /usr/sam \(-path /usr/sam/dir1 -o -path /usr/sam/file1 \) -prune -o -name "temp" -print - -5、使用user和nouser选项 - -按文件属主查找文件,如在$HOME目录中查找文件属主为sam的文件,可以用: - -$ find ~ -user sam -print -在/etc目录下查找文件属主为uucp的文件: - -$ find /etc -user uucp -print -为了查找属主帐户已经被删除的文件,可以使用-nouser选项。这样就能够找到那些属主在/etc/passwd文件中没有有效帐户的文件。在使用-nouser选项时,不必给出用户名; find命令能够为你完成相应的工作。 - -例如,希望在/home目录下查找所有的这类文件,可以用: - -$ find /home -nouser -print - -6、使用group和nogroup选项 - -就像user和nouser选项一样,针对文件所属于的用户组, find命令也具有同样的选项,为了在/apps目录下查找属于gem用户组的文件,可以用: - -$ find /apps -group gem -print -要查找没有有效所属用户组的所有文件,可以使用nogroup选项。下面的find命令从文件系统的根目录处查找这样的文件 - -$ find / -nogroup-print - -7、按照更改时间或访问时间等查找文件 - -如果希望按照更改时间来查找文件,可以使用mtime,atime或ctime选项。如果系统突然没有可用空间了,很有可能某一个文件的长度在此期间增长迅速,这时就可以用mtime选项来查找这样的文件。 - -用减号-来限定更改时间在距今n日以内的文件,而用加号+来限定更改时间在距今n日以前的文件。 - -希望在系统根目录下查找更改时间在5日以内的文件,可以用: - -$ find / -mtime -5 -print -为了在/var/adm目录下查找更改时间在3日以前的文件,可以用: - -$ find /var/adm -mtime +3 -print - -8、查找比某个文件新或旧的文件 - -如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用-newer选项。它的一般形式为: - -newest_file_name ! oldest_file_name -其中,!是逻辑非符号。 - -查找更改时间比文件sam新但比文件temp旧的文件: - -例:有两个文件 - --rw-r--r-- 1 sam adm 0 10月 31 01:07 fiel --rw-rw-rw- 1 sam adm 34890 10月 31 00:57 httpd1.conf --rwxrwxr-x 2 sam adm 0 10月 31 01:01 httpd.conf -drw-rw-rw- 2 gem group 4096 10月 26 19:48 sam --rw-rw-rw- 1 root root 2792 10月 31 20:19 temp - -# find -newer httpd1.conf ! -newer temp -ls -1077669 0 -rwxrwxr-x 2 sam adm 0 10月 31 01:01 ./httpd.conf -1077671 4 -rw-rw-rw- 1 root root 2792 10月 31 20:19 ./temp -1077673 0 -rw-r--r-- 1 sam adm 0 10月 31 01:07 ./fiel -查找更改时间在比temp文件新的文件: - -$ find . -newer temp -print - -9、使用type选项 - -在/etc目录下查找所有的目录,可以用: - -$ find /etc -type d -print -在当前目录下查找除目录以外的所有类型的文件,可以用: - -$ find . ! -type d -print -在/etc目录下查找所有的符号链接文件,可以用 - -$ find /etc -type l -print - -10、使用size选项 - -可以按照文件长度来查找文件,这里所指的文件长度既可以用块(block)来计量,也可以用字节来计量。以字节计量文件长度的表达形式为N c;以块计量文件长度只用数字表示即可。 - -在按照文件长度查找文件时,一般使用这种以字节表示的文件长度,在查看文件系统的大小,因为这时使用块来计量更容易转换。 -在当前目录下查找文件长度大于1 M字节的文件: - -$ find . -size +1000000c -print -查找当前目录中大于10M的文件: - -find . -size +10000k -exec ls -ld {} ; -将find出来的文件复制到另一个地方: - -find *.c -exec cp '{}' /tmp ';' -在/home/apache目录下查找文件长度恰好为100字节的文件: - -$ find /home/apache -size 100c -print -在当前目录下查找长度超过10块的文件(一块等于512字节): - -$ find . -size +10 -print - -11、使用depth选项 - -在使用find命令时,可能希望先匹配所有的文件,再在子目录中查找。使用depth选项就可以使find命令这样做。这样做的一个原因就是,当在使用find命令向磁带上备份文件系统时,希望首先备份所有的文件,其次再备份子目录中的文件。 - -在下面的例子中, find命令从文件系统的根目录开始,查找一个名为CON.FILE的文件。 - -它将首先匹配所有的文件然后再进入子目录中查找。 - -$ find / -name "CON.FILE" -depth -print - -12、使用mount选项 - -在当前的文件系统中查找文件(不进入其他文件系统),可以使用find命令的mount选项。 - -从当前目录开始查找位于本文件系统中文件名以XC结尾的文件: - -$ find . -name "*.XC" -mount -print - -find -name '*.[ch]' | xargs grep -E 'expr' # 在当前目录及其子目录下所有.c和.h文件中寻找'expr' -find -type f -print0 | xargs -r0 grep -F 'example' # 在当前目录及其子目录中的常规文件中查找字符串'example' -find -maxdepth 1 -type f | xargs grep -F 'example' # 在当前目录下查找字符串'example' -find -maxdepth 1 -type d | while read dir; do echo $dir; echo cmd2; done # 对每一个找到的文件执行多个命令使用while循环 find -type f ! -perm -444 # 寻找所有不可读的文件;对网站有用 find -type d ! -perm -111 # 寻找不可访问的目录;对网站有用 +find . -type f -perm 777 # 当前目录下搜索出权限为777的文件 +find / -perm /u=s # 查找所有SUID set文件 +find / -perm /u=r # 查找所有只读文件 +find . -type f -name "*.php" ! -perm 644 # 找出当前目录下权限不是644的php文件 +find . -perm 644 # 搜索对其所有者和组具有读写权限的文件,但其他用户可以读取不能写入 +find . -perm -644 # 搜索对其所有者和组具有读写权限以及其他用户可以读取的文件,而不考虑是否存在其他额外权限,如可执行权限 + +# 搜索可由其所有者或其组写入的文件,这些文件不必是其所有者和组都具有写入权限的文件 +# 第一个使用文件模式的八进制表示,另外两个使用sym-bolic形式 +find . -perm /220 +find . -perm /u+w,g+w +find . -perm /u=w,g=w + +# 搜索其所有者和组都具有写入权限的文件 +find . -perm -220 +find . -perm -g+w,u+w + +# 找出设置了SET位的权限的文件,-perm +6000表示不检查基本权限,第一种是find命令执行完才能看到结果,第二种没找到一条就立即显示 +ls -lh $(find / -type f -perm +6000) +find / -type f -perm +6000 -exec ls -lh {} \; + +find . -type f -user tom # 找出当前目录用户tom拥有的所有文件 +find . -type f -group sunk # 找出当前目录用户组sunk拥有的所有文件 +find . -user jack -or -user lee +find /home -nouser -print # 找出宿主账户已经删除的文件,对应无宿组文件选项为-nogroup,即文件所属组在/etc/groups不存在 +``` -``` \ No newline at end of file +```bash +# cpio选项用于向磁带设备备份或从其中恢复文件 +# 注意例子中路径中缺少/。这叫作相对路径。之所以使用相对路径,是因为在从磁带中恢复这些文件的时候,可以选择恢复文件的路径 +# 例如,可以将这些文件先恢复到另外一个目录中,对它们进行某些操作后,再恢复到原始目录中。如果在备份时使用了绝对路径,例如 +# /etc,那么在恢复时,就只能恢复到/etc目录中去,别无其他选择 +# 例子中cpio命令使用了C65536选项,本可以使用B选项,但块大小只有512字节,而使用了C65536选项后,块大小变成了64K字节 +find home -depth -print | cpio -ivcdC65536 -o /dev/rmt0 + +``` diff --git a/Linux_man_cn/fuser.md b/Linux_man_cn/fuser.md index 5d5c41d..326a99d 100644 --- a/Linux_man_cn/fuser.md +++ b/Linux_man_cn/fuser.md @@ -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`  也用于系统映像。 - - diff --git a/Linux_man_cn/getsebool.md b/Linux_man_cn/getsebool.md index cd37368..07684b3 100644 --- a/Linux_man_cn/getsebool.md +++ b/Linux_man_cn/getsebool.md @@ -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是开启 ``` - - diff --git a/Linux_man_cn/grep.md b/Linux_man_cn/grep.md index 4ca275d..2ff3bb4 100644 --- a/Linux_man_cn/grep.md +++ b/Linux_man_cn/grep.md @@ -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 "\" 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以/字符开始,中间任意四个字符,第六个字符为/的行 diff --git a/Linux_man_cn/head.md b/Linux_man_cn/head.md index d0e717f..1919f2b 100644 --- a/Linux_man_cn/head.md +++ b/Linux_man_cn/head.md @@ -1 +1,29 @@ -# **head** \ No newline at end of file +# **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文件第一行 + +``` \ No newline at end of file diff --git a/Linux_man_cn/hwclock.md b/Linux_man_cn/hwclock.md index a75a8e2..91c4d50 100644 --- a/Linux_man_cn/hwclock.md +++ b/Linux_man_cn/hwclock.md @@ -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(选项) -``` - +## 实例 -``` ---adjust:hwclock每次更改硬件时钟时,都会记录在/etc/adjtime文件中。使用--adjust参数,可使hwclock根据先前的记录来估算硬件时钟的偏差,并用来校正目前的硬件时钟; ---debug:显示hwclock执行时详细的信息; ---directisa:hwclock预设从/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文件,确认是否设置了UTC:UTC=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 -``` - - diff --git a/Linux_man_cn/iftop.md b/Linux_man_cn/iftop.md index 8182755..d04bda4 100644 --- a/Linux_man_cn/iftop.md +++ b/Linux_man_cn/iftop.md @@ -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 # 默认是监控第一块网卡的流量 diff --git a/Linux_man_cn/info.md b/Linux_man_cn/info.md index fc0b98f..1b5ef3f 100644 --- a/Linux_man_cn/info.md +++ b/Linux_man_cn/info.md @@ -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键:** 显示(相对于本节点的)前一节点的文档内容。 diff --git a/Linux_man_cn/iostat.md b/Linux_man_cn/iostat.md index e6de62a..f0beaf1 100644 --- a/Linux_man_cn/iostat.md +++ b/Linux_man_cn/iostat.md @@ -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输出的信息,如下所示: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
标示说明
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)
svctmI/O需求完成的平均时间
%util被I/O需求消耗的CPU百分比
- +| 标示 | 说明 | +| :------: | :------: | +| 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值的用户模式下的时间百分比 +%system:CPU处在系统模式下的时间百分比 +%iowait:CPU等待输入输出完成时间的百分比 +%steal: 管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比 +%idle: CPU空闲时间百分比 diff --git a/Linux_man_cn/iotop.md b/Linux_man_cn/iotop.md index 071699d..05f8c0e 100644 --- a/Linux_man_cn/iotop.md +++ b/Linux_man_cn/iotop.md @@ -2,52 +2,33 @@ ## 说明 -**iotop命令** 是一个用来监视磁盘I/O使用状况的top类工具。iotop具有与top相似的UI,其中包括PID、用户、I/O、进程等相关信息。Linux下的IO统计工具如iostat,nmon等大多数是只能统计到per设备的读写情况,如果你想知道每个进程是如何使用IO的就比较麻烦,使用iotop命令可以很方便的查看。 +**iotop命令** 是一个用来监视磁盘I/O使用状况的top类工具。iotop具有与top相似的UI,其中包括PID、用户、I/O、进程等相关信息 +Linux下的IO统计工具如iostat,nmon等大多数是只能统计到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] -``` diff --git a/Linux_man_cn/ipcs.md b/Linux_man_cn/ipcs.md index 579d8b6..1ecfd84 100644 --- a/Linux_man_cn/ipcs.md +++ b/Linux_man_cn/ipcs.md @@ -1,37 +1,41 @@ -ipcs -=== - -分析消息队列共享内存和信号量 +# ipcs ## 说明 -**ipcs命令** 用于报告Linux中进程间通信设施的状态,显示的信息包括消息列表、共享内存和信号量的信息。 +**ipcs命令**分析消息队列共享内存和信号量,用于报告Linux中进程间通信设施的状态,显示的信息包括消息列表、共享内存和信号量的信息。 -### 语法 +## 选项 -``` -ipcs(选项) -``` +```markdown +选项: + -i, --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 ``` diff --git a/Linux_man_cn/locate.md b/Linux_man_cn/locate.md index 03c7513..1549702 100644 --- a/Linux_man_cn/locate.md +++ b/Linux_man_cn/locate.md @@ -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的文件 diff --git a/Linux_man_cn/ls.md b/Linux_man_cn/ls.md index 99ece56..188ca59 100644 --- a/Linux_man_cn/ls.md +++ b/Linux_man_cn/ls.md @@ -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 ':' # 查找当前目录所有二进制文件 + ``` \ No newline at end of file diff --git a/Linux_man_cn/lsof.md b/Linux_man_cn/lsof.md index 0c5ff0b..9263f5c 100644 --- a/Linux_man_cn/lsof.md +++ b/Linux_man_cn/lsof.md @@ -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 # 列出所有的网络连接或端口 + +``` diff --git a/Linux_man_cn/lvm.md b/Linux_man_cn/lvm.md index 477f8cf..fc14754 100644 --- a/Linux_man_cn/lvm.md +++ b/Linux_man_cn/lvm.md @@ -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拉伸逻辑卷 diff --git a/Linux_man_cn/mkdir.md b/Linux_man_cn/mkdir.md index ab212ba..2a061ea 100644 --- a/Linux_man_cn/mkdir.md +++ b/Linux_man_cn/mkdir.md @@ -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 -``` - diff --git a/Linux_man_cn/mount.md b/Linux_man_cn/mount.md index 3948652..a4b98de 100644 --- a/Linux_man_cn/mount.md +++ b/Linux_man_cn/mount.md @@ -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` 之下。 diff --git a/Linux_man_cn/mv.md b/Linux_man_cn/mv.md index 1b43033..b89a76b 100644 --- a/Linux_man_cn/mv.md +++ b/Linux_man_cn/mv.md @@ -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/* . ``` diff --git a/Linux_man_cn/mysql.md b/Linux_man_cn/mysql.md deleted file mode 100644 index c44f143..0000000 --- a/Linux_man_cn/mysql.md +++ /dev/null @@ -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 - - -``` - -## 其他记录 \ No newline at end of file diff --git a/Linux_man_cn/mysqladmin.md b/Linux_man_cn/mysqladmin.md deleted file mode 100644 index c800877..0000000 --- a/Linux_man_cn/mysqladmin.md +++ /dev/null @@ -1,51 +0,0 @@ -mysqladmin -=== - -MySQL服务器管理客户端 - -## 说明 - -**mysqladmin命令** 是mysql服务器管理任务的客户端工具,它可以检查mytsql服务器的配置和当前工作状态,创建和删除数据库,创建用户和修改用户密码等操作。 - -### 语法 - -``` -mysqladmin(选项)(参数) -``` - - - -``` --h:MySQL服务器主机名或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:得到服务器的版本信息。 -``` - - diff --git a/Linux_man_cn/mysqldump.md b/Linux_man_cn/mysqldump.md deleted file mode 100644 index 07d0b21..0000000 --- a/Linux_man_cn/mysqldump.md +++ /dev/null @@ -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服务器的密码; ---port:MySQL服务器的端口号; ---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` - - diff --git a/Linux_man_cn/mysqlimport.md b/Linux_man_cn/mysqlimport.md deleted file mode 100644 index 49172b2..0000000 --- a/Linux_man_cn/mysqlimport.md +++ /dev/null @@ -1,31 +0,0 @@ -mysqlimport -=== - -为MySQL服务器用命令行方式导入数据 - -## 说明 - -**mysqlimport命令** 为mysql数据库服务器提供了一种命令行方式导入数据工具,它从特定格式的文本文件中读取数据插入MySQL数据库表中。 - -### 语法 - -``` -mysqlimport(选项)(参数) -``` - - - -``` --D:导入数据前清空表; --f:出现错误时继续处理剩余的操作; --h:MySQL服务器的ip地址或主机名; --u:连接MySQL服务器的用户名; --p:连接MySQL服务器的密码。 -``` - -### 参数 - -* 数据库名:指定要导入的数据库名称; -* 文本文件:包含特定格式文本文件。 - - diff --git a/Linux_man_cn/mysqlshow.md b/Linux_man_cn/mysqlshow.md deleted file mode 100644 index 22cc357..0000000 --- a/Linux_man_cn/mysqlshow.md +++ /dev/null @@ -1,32 +0,0 @@ -mysqlshow -=== - -显示MySQL中数据库相关信息 - -## 说明 - -**mysqlshow命令** 用于显示mysql服务器中数据库、表和列表信息。 - -### 语法 - -``` -mysqlshow(选项)(参数) -``` - - - -``` --h:MySQL服务器的ip地址或主机名; --u:连接MySQL服务器的用户名; --p:连接MySQL服务器的密码; ---count:显示每个数据表中数据的行数; --k:显示数据表的索引; --t:显示数据表的类型; --i:显示数据表的额外信息。 -``` - -### 参数 - -数据库信息:指定要显示的数据库信息,可以是一个数据库名,或者是数据库名和表名,或者是数据库名、表名和列名。 - - diff --git a/Linux_man_cn/netstat.md b/Linux_man_cn/netstat.md deleted file mode 100644 index e61fd18..0000000 --- a/Linux_man_cn/netstat.md +++ /dev/null @@ -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] [] -r netstat {-V|--version|-h|--help} - netstat [-vWnNcaeol] [ ...] - netstat { [-vWeenNac] -I[] | [-veenNac] -i | [-cnNe] -M | -s [-6tuw] } [delay] - - -r, --route display routing table - -I, --interfaces= display interface table for - -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的状态,状态值可能有ESTABLISHED,SYN_SENT,SYN_RECV FIN_WAIT1,FIN_WAIT2,TIME_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的状态,状态值可能有ESTABLISHED,SYN_SENT,SYN_RECV FIN_WAIT1,FIN_WAIT2,TIME_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 don’t have all our data sent. - -sockets关闭,但是我们仍旧没有发送数据。 - -UNKNOWN - -The state of the socket is unknown - -未知的状态。 - -``` diff --git a/Linux_man_cn/nm.md b/Linux_man_cn/nm.md index 43d323c..34e992b 100644 --- a/Linux_man_cn/nm.md +++ b/Linux_man_cn/nm.md @@ -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:反序显示符号表。 -``` - -### 参数 - -目标文件:二进制目标文件,通常是库文件和可执行文件。 +## 实例 diff --git a/Linux_man_cn/ntpdate.md b/Linux_man_cn/ntpdate.md index 2e89083..5fc82c6 100644 --- a/Linux_man_cn/ntpdate.md +++ b/Linux_man_cn/ntpdate.md @@ -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... -``` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-aKeyid使用 Keyid 来认证全部数据包。
-b通过调用 settimeofday 子例程来增加时钟的时间。
-d指定调试方式。判断 ntpdate 命令会产生什么结果(不产生实际的结果)。结果再现在屏幕上。这个标志使用无特权的端口。
-eAuthenticationDelay指定延迟认证处理的时间秒数。
-kKeyFile当不使用缺省值 /etc/ntp.keys 文件时,为包含密钥的文件指定一个不同的名称。 请参阅文件KeyFile的描述。
-oVersion当轮询它的发出数据包时,指定使用的 NTP 版本实现。 Version 的值可以是 1,2,3。缺省值是 3。
-pSamples指定从每个服务器获取的样本的数目。 Samples 的值在 1 和 8 之间,并包括 1 和 8。它的缺省值是 4。
-s指定日志操作 syslog 设施的使用,而不是使用标准输出。 当运行 ntpdate 命令和 cron命令时,它是很有用的。
-tTimeOut指定等待响应的时间。给定 TimeOut 的值四舍五入为 0.2 秒的倍数。缺省值是 1 秒。
-u指定使用无特权的端口发送数据包。 当在一个对特权端口的输入流量进行阻拦的防火墙后是很有益的, 并希望在防火墙之外和主机同步。防火墙是一个系统或者计算机,它控制从外网对专用网的访问。
+| 选项 | 描述 | +| :------: | :------: | +| -aKeyid | 使用 Keyid 来认证全部数据包。 | +| -b | 通过调用 settimeofday 子例程来增加时钟的时间。 | +| -d | 指定调试方式。判断 ntpdate 命令会产生什么结果(不产生实际的结果)。结果再现在屏幕上。这个标志使用无特权的端口。 | +| -eAuthenticationDelay | 指定延迟认证处理的时间秒数。 | +| -kKeyFile | 当不使用缺省值 /etc/ntp.keys 文件时,为包含密钥的文件指定一个不同的名称。 请参阅文件KeyFile的描述。 | +| -oVersion | 当轮询它的发出数据包时,指定使用的 NTP 版本实现。 Version 的值可以是 1,2,3。缺省值是 3。 | +| -pSamples | 指定从每个服务器获取的样本的数目。 Samples 的值在 1 和 8 之间,并包括 1 和 8。它的缺省值是 4。 | +| -s | 指定日志操作 syslog 设施的使用,而不是使用标准输出。 当运行 ntpdate 命令和 cron命令时,它是很有用的。 | +| -tTimeOut | 指定等待响应的时间。给定 TimeOut 的值四舍五入为 0.2 秒的倍数。缺省值是 1 秒。 | +| -u | 指定使用无特权的端口发送数据包。 当在一个对特权端口的输入流量进行阻拦的防火墙后是很有益的, 并希望在防火墙之外和主机同步。防火墙是一个系统或者计算机,它控制从外网对专用网的访问。 | diff --git a/Linux_man_cn/objdump.md b/Linux_man_cn/objdump.md index 19e61b1..b9e5f76 100644 --- a/Linux_man_cn/objdump.md +++ b/Linux_man_cn/objdump.md @@ -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 + @ Read options from + -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) 符号名进行解码 + 如果给出了 STYLE,STYLE 可能为“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 + ``` ### 实例 diff --git a/Linux_man_cn/od.md b/Linux_man_cn/od.md index 5f665b1..e5890c5 100644 --- a/Linux_man_cn/od.md +++ b/Linux_man_cn/od.md @@ -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. + + ``` ### 参数 diff --git a/Linux_man_cn/openssl.md b/Linux_man_cn/openssl.md index 613de2f..b980772 100644 --- a/Linux_man_cn/openssl.md +++ b/Linux_man_cn/openssl.md @@ -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、SHA(SHA1)和RIPEMD。SHA算法事实上包括了SHA和SHA1两种信息摘要算法,此外,OpenSSL还实现了DSS标准中规定的两种信息摘要算法DSS和DSS1。  +OpenSSL实现了5种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1)和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、SHA(SHA1 事实上,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") + diff --git a/Linux_man_cn/passwd.md b/Linux_man_cn/passwd.md index 3d89e97..b7e75c3 100644 --- a/Linux_man_cn/passwd.md +++ b/Linux_man_cn/passwd.md @@ -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. //空密码,也就是没有密码; -``` - -注意:当我们清除一个用户的密码时,登录时就无需密码,这一点要加以注意。 - - - diff --git a/Linux_man_cn/pmap.md b/Linux_man_cn/pmap.md index 67a5898..ead6ba3 100644 --- a/Linux_man_cn/pmap.md +++ b/Linux_man_cn/pmap.md @@ -2,7 +2,7 @@ ## 说明 -**pmap命令** 用于报告进程的内存映射关系,是Linux调试及运维一个很好的工具。 +**pmap命令** 用于报告进程的内存映射关系,是Linux调试及运维一个很好的工具 ## 选项 @@ -26,6 +26,7 @@ Options: ## 实例 ```bash +pmap PID # 分析进程号PID的内存线程栈 ``` diff --git a/Linux_man_cn/ps.md b/Linux_man_cn/ps.md index 5bba3ec..1485ab1 100644 --- a/Linux_man_cn/ps.md +++ b/Linux_man_cn/ps.md @@ -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 # 可按照进程执行的时间,PID,UID等对进程 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开头的全部强制杀死 + ``` diff --git a/Linux_man_cn/pwd.md b/Linux_man_cn/pwd.md index 0f6148f..85e609a 100644 --- a/Linux_man_cn/pwd.md +++ b/Linux_man_cn/pwd.md @@ -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 -``` - diff --git a/Linux_man_cn/read.md b/Linux_man_cn/read.md index b806f14..6b5f8eb 100644 --- a/Linux_man_cn/read.md +++ b/Linux_man_cn/read.md @@ -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将直接输出变量名。 - - diff --git a/Linux_man_cn/readelf.md b/Linux_man_cn/readelf.md index d75c534..563a754 100644 --- a/Linux_man_cn/readelf.md +++ b/Linux_man_cn/readelf.md @@ -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= + Dump the contents of section as bytes + -p --string-dump= + Dump the contents of section as strings + -R --relocated-dump= + Dump the contents of section 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 + @ Read options from + +``` + +### ELF文件类型 **种类型的ELF文件:** diff --git a/Linux_man_cn/rm.md b/Linux_man_cn/rm.md index 4d38c1c..0a08b98 100644 --- a/Linux_man_cn/rm.md +++ b/Linux_man_cn/rm.md @@ -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 * -``` - -应注意,这样做是非常危险的! - - - diff --git a/Linux_man_cn/rsync.md b/Linux_man_cn/rsync.md index 4b9634f..d79e2b8 100644 --- a/Linux_man_cn/rsync.md +++ b/Linux_man_cn/rsync.md @@ -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服务,如下: diff --git a/Linux_man_cn/sar.md b/Linux_man_cn/sar.md index d636508..21e9d9f 100644 --- a/Linux_man_cn/sar.md +++ b/Linux_man_cn/sar.md @@ -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 diff --git a/Linux_man_cn/scp.md b/Linux_man_cn/scp.md index 5be5b30..44fb960 100644 --- a/Linux_man_cn/scp.md +++ b/Linux_man_cn/scp.md @@ -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@host:filename`(文件名为目标文件的名称)。 - -### 实例 +## 实例 从远程复制到本地的scp命令与上面的命令雷同,只要将从本地复制到远程的命令后面2个参数互换顺序就行了。 diff --git a/Linux_man_cn/sed.md b/Linux_man_cn/sed.md index 263e7e3..f694076 100644 --- a/Linux_man_cn/sed.md +++ b/Linux_man_cn/sed.md @@ -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>.*/\1/ip;T;q' file # 输出HTML文件的字段中的 内容 -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的内容将显示在所有匹配行的下面 diff --git a/Linux_man_cn/seq.md b/Linux_man_cn/seq.md index 955f07d..2bdfd02 100644 --- a/Linux_man_cn/seq.md +++ b/Linux_man_cn/seq.md @@ -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选项:指定格式** diff --git a/Linux_man_cn/sort.md b/Linux_man_cn/sort.md index 6b78b23..c004e86 100644 --- a/Linux_man_cn/sort.md +++ b/Linux_man_cn/sort.md @@ -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个域开始到最后一个域位置的内容进行排序” 了。 - - - diff --git a/Linux_man_cn/ssh.md b/Linux_man_cn/ssh.md index b8f1ef0..fe22bab 100644 --- a/Linux_man_cn/ssh.md +++ b/Linux_man_cn/ssh.md @@ -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 Ylonen,SSH 协议的设计者)未曾诉说的故事。 - - -#### 将 SSH 协议端口号设为 22 的故事 - -1995 年春我编写了 SSH 协议的最初版本,那时候 telnet 和 FTP 正被广泛使用。 - -当时我设计 SSH 协议想着是为了替代 telnet(端口 23)和 ftp(端口21)两个协议的,而端口 22 是空闲的。我想当然地就选择了夹在 telnet 和 ftp 的端口中间的数字。我觉得端口号虽然是个小事但似乎又存在着某种信念。但我到底要怎么拿到那个端口号呢?我未曾拥有过任何一个端口号,但我却认识几个拥有端口号的人! - -在那时取得端口号的事情其实说来挺简单的。毕竟当时的因特网(Internet)并不是很大,是因特网爆炸的早期。端口号分配的活儿是 IANA(Internet Assigned Numbers Authority,互联网数字分配机构)干的。在那时这机构可相当于是因特网先驱 [Jon Postel](https://en.wikipedia.org/wiki/Jon_Postel) 和 [Joyce K. Reynolds](https://en.wikipedia.org/wiki/Joyce_K._Reynolds) 一般的存在。Jon 参与编写了多项主要的协议标准,例如 IP(RFC 791)、ICMP(RFC 792)和 TCP(RFC 793)等一些你应该早有耳闻的协议。 - -我可以说是敬畏 Jon 先生的,他参与编写了几乎所有主要的因特网标准文档(Internet RFC)! - -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 服务的端口号 diff --git a/Linux_man_cn/strace.md b/Linux_man_cn/strace.md index 35b9a2d..45dfdf5 100644 --- a/Linux_man_cn/strace.md +++ b/Linux_man_cn/strace.md @@ -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 只跟踪有关进程控制的系统调用 diff --git a/Linux_man_cn/strings.md b/Linux_man_cn/strings.md index 2c0c7ba..c5f7190 100644 --- a/Linux_man_cn/strings.md +++ b/Linux_man_cn/strings.md @@ -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终止符序列 +- 设置显示的最少的字符数,默认是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= 指定二进制文件格式 +-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 used to separate strings in output. +@读取选项 -列出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 -``` - - diff --git a/Linux_man_cn/sudo.md b/Linux_man_cn/sudo.md index 34c6acb..14e5b7f 100644 --- a/Linux_man_cn/sudo.md +++ b/Linux_man_cn/sudo.md @@ -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; --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] [] +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后面的命令,或者被检查后再传递的,比如:PATH,HOME,SHELL等。当然,你也可以通过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后面的命令,或者被检查后再传递的,比如:PATH,HOME,SHELL等。当然,你也可以通过sudoers来配置这些环境变量。 - - diff --git a/Linux_man_cn/tail.md b/Linux_man_cn/tail.md index 636464d..175d011 100644 --- a/Linux_man_cn/tail.md +++ b/Linux_man_cn/tail.md @@ -6,9 +6,7 @@ 注意:如果表示bytes或lines的K值之前有一个”+”号,则从文件开头的第K项开始显示,K值后缀:b表示512,b 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 :输出文件尾部的第K(K为整数)个字节内容 -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倒数第五行 + ``` diff --git a/Linux_man_cn/tar.md b/Linux_man_cn/tar.md index 890fe69..f608583 100644 --- a/Linux_man_cn/tar.md +++ b/Linux_man_cn/tar.md @@ -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目录 ``` diff --git a/Linux_man_cn/top.md b/Linux_man_cn/top.md index a65e80b..3d64f4a 100644 --- a/Linux_man_cn/top.md +++ b/Linux_man_cn/top.md @@ -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交互命令 diff --git a/Linux_man_cn/tr.md b/Linux_man_cn/tr.md index a6384b8..f1f1614 100644 --- a/Linux_man_cn/tr.md +++ b/Linux_man_cn/tr.md @@ -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:]' -``` - diff --git a/Linux_man_cn/ulimit.md b/Linux_man_cn/ulimit.md index 62611b7..0583383 100644 --- a/Linux_man_cn/ulimit.md +++ b/Linux_man_cn/ulimit.md @@ -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文件的最大值,单位为区块; -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 + ``` diff --git a/Linux_man_cn/uname.md b/Linux_man_cn/uname.md index 60258b1..271c156 100644 --- a/Linux_man_cn/uname.md +++ b/Linux_man_cn/uname.md @@ -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 协议 的条款再发布此软件的副本,但我们无法保证相关法律不对这一情形进行限制。 - -由 David MacKenzie 编写。 -``` - - diff --git a/Linux_man_cn/uniq.md b/Linux_man_cn/uniq.md index 128f123..d48ac4e 100644 --- a/Linux_man_cn/uniq.md +++ b/Linux_man_cn/uniq.md @@ -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 -``` - - diff --git a/Linux_man_cn/updatedb.md b/Linux_man_cn/updatedb.md index 3ccdcce..e0060cd 100644 --- a/Linux_man_cn/updatedb.md +++ b/Linux_man_cn/updatedb.md @@ -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数据库的目录 ``` diff --git a/Linux_man_cn/useradd.md b/Linux_man_cn/useradd.md index 86a9784..8788bbc 100644 --- a/Linux_man_cn/useradd.md +++ b/Linux_man_cn/useradd.md @@ -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这样的系统账号。 - - diff --git a/Linux_man_cn/usermod.md b/Linux_man_cn/usermod.md index a78a03c..691f17e 100644 --- a/Linux_man_cn/usermod.md +++ b/Linux_man_cn/usermod.md @@ -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 -``` - - - diff --git a/Linux_man_cn/vnstat.md b/Linux_man_cn/vnstat.md new file mode 100644 index 0000000..0617cdc --- /dev/null +++ b/Linux_man_cn/vnstat.md @@ -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 + +``` \ No newline at end of file diff --git a/Linux_man_cn/watch.md b/Linux_man_cn/watch.md index 2d56070..4a3bae0 100644 --- a/Linux_man_cn/watch.md +++ b/Linux_man_cn/watch.md @@ -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[=] 高亮显示变化的区域 + 而-d=cumulative选项会把变动过的地方(不管最近的那次有没有变动)都高亮显示出来 +-e, --errexit exit if command has a non-zero exit +-g, --chgexit exit when output from command changes +-n, --interval 缺省每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正在做什么,该命令只能让超级用户使用 diff --git a/Linux_man_cn/wc.md b/Linux_man_cn/wc.md index 849fb2f..bee9bd6 100644 --- a/Linux_man_cn/wc.md +++ b/Linux_man_cn/wc.md @@ -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 -``` - - diff --git a/Linux_man_cn/wget.md b/Linux_man_cn/wget.md index 85b37b0..6a8b3e7 100644 --- a/Linux_man_cn/wget.md +++ b/Linux_man_cn/wget.md @@ -2,19 +2,23 @@ ## 说明 -**wget命令** 用来从指定的URL下载文件。wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。 +**wget命令** 用来从指定的URL下载文件。wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原 +因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。 +这对从那些限定了链接时间的服务器上下载大文件非常有用 -wget支持HTTP,HTTPS和FTP协议,可以使用HTTP代理。所谓的自动下载是指,wget可以在用户退出系统的之后在后台执行。这意味这你可以登录系统,启动一个wget下载任务,然后退出系统,wget将在后台执行直到任务完成,相对于其它大部分浏览器在下载大量数据时需要用户一直的参与,这省去了极大的麻烦。 +wget支持HTTP,HTTPS和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 diff --git a/Linux_man_cn/whatis.md b/Linux_man_cn/whatis.md index 53743f4..8acb597 100644 --- a/Linux_man_cn/whatis.md +++ b/Linux_man_cn/whatis.md @@ -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 + ``` diff --git a/Linux_man_cn/zcat.md b/Linux_man_cn/zcat.md index a3592a0..734c383 100644 --- a/Linux_man_cn/zcat.md +++ b/Linux_man_cn/zcat.md @@ -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 +```