linux常用终端命令参数整理

命令常用参数整理

1.xargs

NAME
xargs - build and execute command lines from standard input

SYNOPSIS
xargs [options] [command [initial-arguments]]

常用参数:

-d 指定分隔符,例如:

sss@ubuntu:~$ echo aabbcddeeff |xargs -d c echo
aabb ddeeff

-I或-i指定一个替换字符串,initial-arguments中的出现的替换字符串将会被替换为从标准输入读取的内容。

sss@ubuntu:~$ find ./ -name foo.c -type f|xargs -t -I {} mv {} ./test/
mv ./foo.c ./test/

上述命令中-t -I {}这部分是options,mv是command ,{} ./test/是initial-arguments。前面-I指定了{}为替换字符串,那么后续执行mv时,就会把initial-arguments中的{}替换为find输出的内容。
-P交互式执行命令,每条命令需要确认

sss@ubuntu:~$ echo sss|xargs -p echo 
echo sss ?...y
sss
sss@ubuntu:~$ 

-t在执行前打印执行的命令

2.tar

NAME
tar - an archiving utility

SYNOPSIS Traditional usage
tar {A|c|d|r|t|u|x}[GnSkUWOmpsMBiajJzZhPlRvwo] [ARG…]

常用操作模式(以下模式有且仅能有一个):
-c:创建新的tar文件

sss@ubuntu:~$ tar -acvf pro.tar.xz ./programme/
./programme/
./programme/test.sh
./programme/test.c
./programme/makefile.makefile
sss@ubuntu:~$ ls
Desktop  Documents  Downloads  linux  linux-0.01.tar.gz  Music  Pictures  programme  pro.tar.xz  Public  snap  Templates  Videos

-d:查看差异
删除./programme下的makefile.makefile,修改test.sh后执行命令

sss@ubuntu:~$ tar -df pro.tar.xz ./programme/
./programme/test.sh: 修改时间不同
./programme/test.sh: 大小不同
tar: ./programme/makefile.makefile:警告:无法 stat: 没有那个文件或目录

-r:附加新的文件到tar文件中
-t:列出tar文件中包含的文件的信息
-x:解开tar文件
常用参数:
-v:显示解压缩执行过程
-f:指定要处理的文件名
-C:改变至指定目录解压
压缩选项:
-a, --auto-compress 使用归档后缀名来决定压缩程序
-j, --bzip2 通过 bzip2 过滤归档
-J, --xz 通过 xz 过滤归档
–lzip 通过 lzip 过滤归档
–lzma 通过 xz 过滤归档
–lzop 通过 lzop 过滤归档
–no-auto-compress 不使用归档后缀名来决定压缩程序
-z, --gzip, --gunzip, --ungzip 通过 gzip 过滤归档
–zstd 通过 zstd 过滤归档
-Z, --compress, --uncompress 通过 compress 过滤归档(其实就是打包的tar)
–strip-components=NUMBER 去除NUMBER层的父目录

3.awk

grep 更适合单纯的查找或匹配文本
sed 更适合编辑匹配到的文本
awk 更适合格式化文本,对文本进行较复杂格式处理

首先,awk是门语言,我一直以为是个命令来着。。。

awk [-W option] [-F value] [-v var=value] [–] ‘program text’ [file …]

常见的使用方法是这样的:

ss@ubuntu:~$ cat /etc/passwd|awk -F : '{print $1}'
root
daemon
bin

其中’{print $1} '的被'所包裹的部分是awk语言部分,前面部分则是命令与参数。下面解释这两个部分。
命令参数:
-F:指定域分隔符,也就是切割字段的标识。可以是字符串,也可以是正则表达式
-v:分配一个自定义变量

awk语言:
awk语言是一系列的pattern {action} 对和用户函数定义。这里只学习了最简单的使用命令的相关内容。
模式pattern可以是以下几种:

1.BEGIN
2.expression
3.expression , expression
4.END

下面对这些模式进行一一介绍:

  1. BEGIN后紧跟着动作,这个动作块awk处理任何输入文件之前执行。
  2. END不匹配任何的输入文件,但是执行动作块中的所有动作,它在整个输入文件处理完成后被执行。
  3. expression代表表达式作为模式,每条记录时执行,这里列举其中几种情况:
    • 正则表达式:
      形式:/regular expression/
      作用:如果输入行包含字符串与 正则表达式 相匹配,则执行语句
    • 与或非等逻辑表达式
      形式:pattern && pattern
      pattern || pattern
      ! pattern
      作用:求表达式的逻辑运算结果,为真则执行语句
    • 三目等表达式
      形式:pattern ?pattern:pattern
      作用:和c的三目运算符一样,如果第一个为真则选第二个,否则选第三个
  4. 最后一种则是范围模式expression , expression
    范围模式(range pattern)匹配从与 模式1 相匹配的行到与 模式2 相匹配的行(包含该行)之间的所有行,对于这些输入行,执行 语句 。
    注意:BEGIN和END不与其他模式组合。范围模式不可以是任何其他模式的一部分。BEGIN和END是仅有的必须搭配动作的模式。

pattern 和{action} 这两者可以被忽略其中一个,像上例中的awk -F : '{print $1}'就是忽略了模式。而如果把动作省略,则会默认执行print动作。
由于模式和动作两者任一都是可选的,所以需要使用大括号包围动作以区分于其他模式。

一个典型的awk语言片段:

BEGIN { FS = "[^A-Za-z]+" }
{ for(i = 1 ; i <= NF ; i++)  word[$i] = "" }
END { delete word[""]
for ( i in word )  cnt++
print cnt
}

这个片段比较复杂,下面找一个简单来解析下:
针对如下片段:

echo "11 22 33 44 
55 66 77 88 
99 00"|
awk -F ' '  '
BEGIN{printf("start\n")}
NR!=2 {print $2}
END{printf("end\n")}
'

输出如下:

start
22
00
end

下面来分析下发生了什么,BEGIN和END只各执行一次(就像前面说的,各自在开始结束只执行一次),而{print $2}执行了2次,BEGIN和END中间的部分,将会在每条记录执行一次。
其中记录就是最开始输入的每行,而字段就是被分隔的字段数。比如这个例子中,有3条记录,4个字段。

运算符

运算符描述
= += -= *= /= %= ^= **=赋值
?:C条件表达式
||逻辑或
&&逻辑与
~ 和 !~匹配正则表达式和不匹配正则表达式
< <= > >= != ==关系运算符
空格连接
    • |加,减
  • / % |乘,除与求余
    • ! |一元加,减和逻辑非
      ^ *** |求幂
      ++ -- |增加或减少,作为前缀或后缀
      $ |字段引用
      in |数组成员
      变量:

分为内置变量和自定义变量;输入分隔符FS和输出分隔符OFS都属于内置变量。
内置变量就是awk预定义好的、内置在awk内部的变量,而自定义变量就是用户定义的变量。

  1. built-in变量:
变量描述
$n当前记录的第n个字段,字段间由FS分隔
$0完整的输入记录
NF一条记录的字段的数目
NR已经读出的记录数,就是行号,从1开始
FNR各文件分别计数的行号
FS字段分隔符(默认是任何空格)
RS记录分隔符(默认是一个换行符)
OFS输出字段分隔符,默认值与输入字段分隔符一致。
ORS输出记录分隔符(默认值是一个换行符)
ARGC命令行参数的数目
ARGIND命令行中当前文件的位置(从0开始算)
ARGV包含命令行参数的数组
CONVFMT数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组
ERRNO最后一个系统错误的描述
FIELDWIDTHS字段宽度列表(用空格键分隔)
FILENAME当前文件名
IGNORECASE如果为真,则进行忽略大小写的匹配
OFMT数字的输出格式(默认值是%.6g)
RLENGTH由match函数所匹配的字符串的长度
RSTART由match函数所匹配的字符串的第一个位置
SUBSEP数组下标分隔符(默认值是/034)
2.自定义变量
方法一:-v varname=value ,变量名区分字符大小写。
方法二:在program中直接定义。
函数
函数也有build-in和自定义函数
内置函数有算数函数,字符串函数,时间函数,位操作函数等等
数组
AWK 可以使用关联数组这种数据结构,索引可以是数字或字符串。
AWK关联数 组也不需要提前声明其大小,因为它在运行时可以自动的增大或减小。
使用delete删除数组元素

4.grep

-e指定正则表达式作为模式
-E 指定扩展的正则表达式作为模式,按我的理解就是可以使用正则的更多功能
-i忽略大小写
-v:排除模式对应字符串
-w:全单词匹配
-x:全行匹配
输出控制:
-c:只显示匹配行数
-n:带行号输出
–color:带颜色输出
-m:匹配一定数目后停止查找
-o:只输出匹配部分
-r:递归目录下所有文件查看
-R:跟踪所有符号链接
-i:忽略大小写
-I:不比较二进制数据
-h:不带文件名
-H:带文件名
-s:不输出错误
应用:在目录下查找字符串:egrep -iHrns
匹配行上下文控制:
-A是显示匹配后和它后面的n行。after
-B是显示匹配行和它前面的n行。 before
-C是匹配行和它前后各n行。 context
egrep等价于grep -E,我在Man手册中看到Egrep的使用不被赞成。
另外关于grep的匹配模式,请看这篇文章,我之前用\d匹配不到数字,就是因为模式问题。
具体匹配模式请看:通配符与正则表达式

5.sed

sed - stream editor for filtering and transforming text

sed是一个流编辑器,可以用来过滤或转换文本

sed [-hnV][-e<script>][-f<script文件>][文本文件]

我在学习这个命令的时候参考了很多这个博主的系列文章,他对sed的man手册进行了翻译,并给出了不少例子以及自己的理解,有兴趣的小伙伴可以去看下
参数说明:
-n或–quiet或–silent 仅显示script处理后的结果。
p: 打印匹配行(和-n选项一起合用)
-e<script>或–expression=<script> 以选项中指定的script来处理输入的文本文件。
-f<script文件>或–file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
-r :使用扩展的正则表达式和grep -E中的参数作用类似
-s:将文件作为独立的而不是作为一个单独的连续流,这里针对的是多个文件的情况
-V或–version 显示版本信息。
-h或–help 显示帮助。
-i:直接编辑文件,会将文件直接修改,慎用,如果指定了-i的值(suffix),sed将会备份一份原文件。-i选项后面直接加备份文件后缀,-i和后缀之间没有空格。


关于sed的实际使用,还是从他那里引用的,如下:

如果命令行上只有一个指令的时候可以不用写-e,但是如果有多个指令的话一定要在每个指令的前面加-e选项;
sed指令用引号单引号和双引号指定都可以,或者可以不用引号,这个时候如果指令中有特殊字符,要用反斜杠\来屏蔽掉特殊字符比如“空格”、“;”等,所以sed命令:sed -e ‘1p’ sed.txt 可以这样写: sed ‘1p’ sed.txt 不用指定-e,直接加命令‘1p’或者:sed 1p sed.txt不用加引号,如果指令中有特殊字符的话一定要用反斜杠来转义比如:
sed 1s/ line/LINE/p sed.txt (在line前指定了空格)会出现unterminated `s’ command的错误,如果加了反斜杠sed 1s/\ line/LINE/p sed.txt (在line前的空格前加了/)就可以正确运行,但是建议用单引号,同时写上-e,否则阅读难度增大。
哦差点忘了,如果指令有多个指令,可以有三种书写方式:1.多个指令写在一起,用分号分隔;2.多个指令分开写,但是要在每个指令前放置-e;3.使用Bash的分行指令功能,注意在输入单引号后按回车键(Enter)就会出现多行输入的提示符“>”。

script应当由两种东西组成,一个是要完成的命令/动作,另一个是地址(要操作的行)。下面分别对这两个部分进行描述,只列举了常用的,具体请参考man手册。地址应在命令前 : [address]command。地址是可以省略的,省略后应当是对全局操作,比如sed d test.txt就会吧test.txt当中的东西全部删掉。


命令概要:
1.不需要地址的命令:
:lable 作为分支(b)和测试(t)命令的标签,不懂啥意思,好像就是像标签一样的东西。
#comment 这个是注释,会一直延续到下一行(或者一个-e脚本片段的末尾)
}:命令组{}的结尾
2.不需要地址或一个地址的命令
=: 显示文件行号
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);

值得注意的是,在官方的man手册里,新增,插入,修改操作的要新增插入修改的数据,都是通过反斜杠\折行到下一行输入的

q:立即退出sed命令,不再处理任何输入
r:从指定的文件中读取内容,附加到选定行之后。
3.指定地址范围的命令
{: 可以用大括号将多个命令集中起来对当前行进行操作。如果想指定行的范围,然后在这个范围内指定另一个地址,则可以嵌套地址。用}结尾
b label:将跳转到标签后执行,感觉比较像c的jump.如果标签未指定,将跳转到脚本末尾。
t label :如果s指令发生替换操作,尽管已经读入输入的最后一行,或者已经是最后的t、T,都会转移到指定的标签后;如果忽略具体的标签,将会将控制转移到脚本末尾。
T:和t差不多,只是这里是s指令没有发生替换操作然后就转移控制到指定标签,如果s指令发生替换,就不转移控制。
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
h H:将模式空间(Pattern space)中的数据复制/追加到保留空间(Hold space)中。
补充:sed有两个缓冲区:模式空间(Pattern space)和保留空间(Hold space);所有的命令都工作在模式空间上,模式空间保存着sed刚刚从输入中读取的行,保留空间作为临时缓冲区,可以在sed script操作模式空间中的数据的时候用来暂存模式空间上的数据,在将数据放入保留空间的之前,保留空间的内容为空;h将模式空间中的内容复制到保留空间中,同时保留空间中原来的数据将会全部丢失,H只会将模式空间的内容附加到保留空间原有内容的后面同时用一个换行符隔开。

g G:将保留空间(Hold space)的数据复制/追加到模式空间(Pattern space)中。就是刚刚用h或H保存的。
n N:将当前行的下一行数据覆盖/追加进当前模式空间(Pattern space)的内容。
提示:其中n表示将模式空间中内容的下一行数据读取进来,这个时候模式空间中原有的内容将会被覆盖;N表示将模式空间中内容的下一行数据读取,然后追加到模式空间中原有的内容后,并用反斜杠隔开.
p P:
打印当前模式空间(Pattern space)中内容的第一行数据。
打印当前模式空间(Pattern space)中的全部内容。
提示:之前说过模式空间是可以存在多行数据的,p(小写)和P(大写)作用不同在于,前者打印全部,而后者只打印第一行。
s/regexp/replacement/ :
尝试对模式空间中的内容进行正则表达式“regexp”的匹配,如果匹配成功,将会用“replacement”来代替匹配的部分;“replacement”可以包含特殊字符“&”,“&”用来代替匹配“regexp”的模式空间的内容,而/1、/2、/3……/9表示“regexp”的子表达式的匹配内容。
1、2、3……等数据第几个子表达式的意思,参考正则表达式中()捕获内容的反向引用。
w filename:
将当前模式空间(Pattern space)的全部内容写入到文件“filename”中
W filename:
将当前模式空间(Pattern space)内容中的第一行写入到“filename”中。
y/source/dest/:
用另一种字母体系将模式空间(Patter space)内出现的“source”字符替换成对应的“dest”字符。
提示:这个命令说白了就是转换数据中的字元,例如指令:y/abc…/xyz…/针对这个指令 /abc…/xyz…/(x、y、z、a、b、c 代表某些字元)为y的参数,其中 abc… 与 xyz… 的字元个数必须相同;sed 执行转换时,将 模式空间内数据中的 a 字元转换成 x 字元 、b 字元转换成 y 字元 、c 字元转换成 z 字元……


在地址后面,和在命令之前之间可能会插入一个感叹号(!),它代表这个命令只有在前面的地址不匹配的时候才会被执行。
指定地址的方式:
number :只匹配指定数字的行
first~step: 匹配以first开始的,以step为步长的所有行
$: 匹配最后一行
/regexp/ :匹配匹配这个正则表达式的行
cregexpc : 匹配匹配这个正则表达式的行,c可以是任何字符。(说白了就是用c来指定正则表达式,平时我们都用斜杠,就是c默认的是斜杠,你可以指定其他字符)
举例:

sed -e "s@://@://admin:admin\@@g"

看看chatgpt的回答:

Q:解释这段shell代码的含义 sed -e "s@://@://admin:admin\@@g"

A:这段 Shell 代码使用了 sed 命令,用于在文本字符串中查找所有的 "://" 字符串,并将其替换为 "://admin:admin@" 字符串。

具体来说:

sed 是一个流编辑器,可用于从文本输出中选取和转换文本。
-e 参数表示后面紧跟着的字符串是 sed 命令。
s 表示替换操作,@ 符号是分隔符,用于分隔不同的字段(在这里忽略斜杠字符可能会引起歧义)。
// 是要查找的模式。
://admin:admin@ 是要替换的目标字符串。其中 admin:admin 可能是登录凭据,用于访问某些需要身份验证的 URL 的情况下。
g 表示全局替换模式,即将所有匹配到的模式都进行替换。

gnu sed还支持特殊的双地址的形式:
0,addr2 :仅当addr2为正则表达式时才有效 。开始于匹配首行状态,直到addr2被找到 他和1,addr2很相似,区别在于,假如第一行第二行都匹配addr2,则0,addr2一开始就能检测到,而1,addr2第二行才能检测到,所以最后0,addr2匹配到了第1行,1,addr2匹配到了1,2两行
addr1,+N : 匹配addr1以及之后的N行
addr1,~N :从addr1开始,以N为步长的行

6.wget

NAME
Wget - The non-interactive network downloader.
SYNOPSIS
wget [option]… [URL]…

常用的参数有:
-b, --background 启动后转入后台。
-o, --output-file=FILE 将信息写入 FILE。
-nc, --no-clobber 不要重复下载已存在的文件。
-L, --relative 只跟踪有关系的链接。
-c, --continue 继续下载部分下载的文件。
-P, --directory-prefix=PREFIX 以 PREFIX/… 保存文件
-O,使用一个大写O做参数表示另存为
可以在本地/dev/null的帮助下,无痕测试文件下载速度

wget -O /dev/null http://nginx.org/download/nginx-1.19.0.tar.gz

–spider,试图做计划下载时候,需要先检查一下下载链接是否有效。
-i,下载多个文件使用wget -i=,将多个下载链接写入到一个download-file-list.txt文件中,而后用

wget -i download-file-list.txt

-r, –recursive 递归下载--慎用!
-l, –level=NUMBER 最大递归深度 (inf 或 0 代表无穷)
-A, –accept=LIST 分号分隔的被接受扩展名的列表
-R, –reject=LIST 分号分隔的不被接受的扩展名的列表
-np, –no-parent 不要追溯到父目录

7.curl

NAME
curl - transfer a URL

SYNOPSIS
curl [options / URLs]
常用参数:
-f:连接失败时不显示http错误
-F:向服务器上传二进制文件。
-I:仅抓取包头
-L:重定向到新的服务器地址,如果请求的页面已经被移动到了新位置。
-o:将服务器的回应保存成文件,等同于wget命令。
-O:将服务器回应保存成文件,并将 URL 的最后部分当作文件名。
-u:设置服务器认证的用户名和密码。
-s:静默模式,不输出任何信息
-S:显示错误信息
-x:使用指玎代理服务器
-#:显示下载进度条
此命令参数非常多,待补充…
可使用通配下载多个文件:

curl -O https://www.baidu.com/2531170[1-5].JPG

可以将脚本直接存储到网站上,然后直接使用curl执行:

curl -sSf http://www.example.com/path/to/example.sh | bash

直接source执行:

source <(curl -sSf http://www.example.com/path/to/example.sh)

8.find

NAME
find - search for files in a directory hierarchy

SYNOPSIS
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point…] [expression]

常用参数:
-name “PATERN”
-iname “PATERN” :不区分名称字母大小写
-type:根据不同的文件类型筛选
具体类型
f 普通文件
d 目录文件
l 符号链接文件
b 块设备 文件
c 字符设备文件
p 管道文件
s 套接字文件

-amin n:查找在 n 分钟内被访问过的文件。
-atime n:查找在 n天内被访问过的文件。
-cmin n:查找在 n 分钟内状态发生变化的文件(例如权限)。
-ctime n:查找在 n天内状态发生变化的文件(例如权限)。
-mmin n:查找在 n 分钟内被修改过的文件。
-mtime n:查找在 n天内被修改过的文件。
n前可加+或-代表n单位以上或n单位以内
-anewer file : 比文件 file 更晚被读取过的文件
-cnewer file :比文件 file 更新的文件

-size [±]size[cwbkMG]:按文件大小查找,支持使用 + 或 - 表示大于或小于指定大小,单位可以是 c(字节)、w(字数)、b(块数)、k(KB)、M(MB)或 G(GB)。

-depth:指定了这个参数后,遇到目录先进入目录操作目录中的文件,最后再操作目录本身。
-maxdepth:查找最大层数。
-mindepth:开始工作的目录最小深度。

-ls 假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出;
-delete 删除文件
-exec {} ;对找到的文件执行命令,{}指带找到的文件,而;传递给要执行的命令,代表参数结束。

9.watch

NAME
watch - execute a program periodically, showing output fullscreen

SYNOPSIS
watch [options] command

周期性的执行命令,并输出第一屏(如果有多屏输出)。默认两秒一次执行周期。
常用参数:
-d:高亮差异部分
-n:执行执行周期,最小不小于0.1秒。
-t:关闭watch命令在顶部的时间间隔,命令,当前时间的输出
-b:非正常退出响铃。
-e:停在命令失败时,直到按下按键
-g:输出改变时退出

10.scp

NAME
scp — OpenSSH secure file copy

SYNOPSIS
scp [-346BCpqrTv] [-c cipher] [-F ssh_config] [-i identity_file] [-J destination] [-l limit] [-o ssh_option]
[-P port] [-S program] source … target
scp把文件通过网络在主机间拷贝。
常用参数:
-B: 使用批处理模式(传输过程中不询问传输口令或短语)待验证
-C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
-p:保留原文件的修改时间,访问时间和访问权限。
-q: 不显示传输进度条。
-r: 递归复制整个目录。
-l limit: 限定用户所能使用的带宽,以Kbit/s为单位。

11.diff

NAME
GNU diff - compare files line by line

SYNOPSIS
diff [OPTION]… FILES

常用参数:
-q 仅显示有无差异,不显示详细的信息。
-s 若没有发现任何差异,仍然显示信息。
-c  显示默认3行上下文,同时用修改前后做比较标出不同之处。
-u  显示默认3行上下文,以合并的方式来显示文件内容的不同。
-y 以并列的方式显示文件的异同之处。
-W 指定最大宽度。
-p  若比较的文件为C语言的程序码文件时,显示差异所在的函数名称。
-F 以正则过滤显示最近的行
-t 在输出时,将tab字符展开为空格。
-T 在每行前面加上tab字符以便对齐。
-l  将结果交由pr程序来分页。
-r或–recursive  比较子目录中的文件。
-N 在比较目录时,若文件A仅出现在某个目录中,预设会显示:
-x<文件名或目录> 不比较选项中所指定的文件或目录。
-X<文件> 将文件或目录类型存成文本文件,然后在<文件>中指定此文本文件。
-S<文件> 在比较目录时,从指定的文件开始比较。
-i:忽略大小写
-E:忽略由tab扩展带来的差异
-Z:忽略行末空格
-b :不检查空格字符的不同。
-w:不检查任何空白字符
-B 不检查空白行。
-I<字符或字符串> 用正则指定排除差异的规则,即不去比较的模式
-a 把所有文件都当文本比较

12.screen

NAME
screen - screen manager with VT100/ANSI terminal emulation

SYNOPSIS
screen [ -options ] [ cmd [ args ] ]
screen -r [[pid.]tty[.host]]
screen -r sessionowner/[[pid.]tty[.host]]

screen为多重视窗管理程序。此处所谓的视窗,是指一个全屏幕的文字模式画面。通常只有在使用telnet登入主机或是使用老式的终端机时,才有可能用到screen程序。
常用参数:
-A  将所有的视窗都调整为目前终端机的大小。
-d<作业名称>  将指定的screen作业离线。
-dr重新附加会话,如有必要,先将其分离。
-dR重新附加会话,如有必要,先分离甚至创建会话。
-dRR重新附加会话,并在必要时分离或创建会话。如果有多个会话可用,请使用第一个会话。
-Dr重新附加会话。如有必要,先远程分离并注销。
-DR此时此地附上。详细来说,这意味着:如果会话正在运行,则重新附加。如有必要,先远程分离并注销。如果它未运行,请创建它并通知用户。这是此命令作者的最爱。
-h<行数>  指定视窗的缓冲区行数。
-m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。
-r  恢复离线的screen作业。
-R  先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-S<作业名称>  指定screen作业的名称。
-ls或–list  显示目前所有的screen作业。
-wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业。

C-a代表控制键,在screen内,控制键+某个键将对应某个特定的功能,比如C-a ?将输出可用命令及其绑定的列表,这个帮助里显示的单字母代表Ctrl+a,放开后再跟这个字母。而^X x这种形式,则代表Ctrl+a后不放ctrl接着按x。

常用:
1、新建子窗口:
可以通过Ctrl+a+c 组合快捷键在当前的screen下创建一个新的子窗口,并跳转到上面去。

2、查询当前的子界面状态:
可以通过Ctrl+a+w组合快捷键,在屏幕的左下角就会出现类似:0-$ bash 1*$ bash之类的样式。这个表示当前screen下有两个子窗口,当前在的是1号子窗口。当然,这个子窗口的数目可以有很多。

3、切换子窗口:
方法很多,可以通过Ctrl+a+a组合快捷键在最近的两个窗口中切换,也可以用Ctrl+a+n 切换到下一个窗口,或是Ctrl+a+p 切换到上一个窗口,或是Ctrl+a+num 切换到第num个窗口。ctrl+a ',选项式选择。

4、锁定当前窗口:
可以用Ctrl+a+x 来锁住当前的界面,此时所有的快捷键都无法使用,直到输入了密码。。

5、关闭当前窗口:
这个可以直接用Ctrl+d 或者exit 来关闭,当这个窗口是现有screen的最后一个窗口时,就会触发上面讲的关闭当前screen的事件了。

6、暂离当前screen:
这个也是screen命令的精髓,用组合键Ctrl+a+d 就能detached当前的screen,回到默认界面。

其他:
ctrl+a+[ 有点像vim的可视模式一样复制,可跨越行
ctrl+a+] 粘贴
ctrl+a >将复制的内容写入文件
ctrl+a S 水平分隔窗口
ctrl+a | 新版本好像可以垂直分隔窗口
ctrl+a tab 切换分隔窗口,切换后可以把当前分隔窗口切到其他终端(ctrl+a+a)
ctrl+a Q关闭其他分隔窗口
ctrl+a X关闭当前分隔窗口
ctrl+a A更改窗口名字
ctrl+a F窗口适应
ctrl+a h记录当前窗口的日志
ctrl+a H从登录到退出的日志
ctrl+a \关闭所有窗口并退出

13.unique

NAME
uniq – report or filter out repeated lines in a file

SYNOPSIS
uniq [-c | -d | -D | -u] [-i] [-f num] [-s chars] [input_file [output_file]]

uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。
常用参数:
-c或–count 在每列旁边显示该行重复出现的次数。
-d或–repeated 仅显示重复出现的行列。
-D:与-d类似,但是所有重复的列都输出
-i:忽略大小写
-f<栏位>或–skip-fields=<栏位> 在每一行开始忽略比较指定的字段数。
-s<字符位置>或–skip-chars=<字符位置> 在每一行开始忽略比较指定的字符。
-u或–unique 仅显示不重复的列。
–help 显示帮助。
–version 显示版本信息。
[输入文件] 指定已排序好的文本文件。如果不指定此项,则从标准读取数据;
[输出文件] 指定输出的文件。如果不指定此选项,则将内容显示到标准输出设备(显示终端)。

14.top

NAME
top – display sorted information about processes

SYNOPSIS
top [-a | -d | -e | -c mode]
[-F | -f]
[-h]
[-i interval]
[-l samples]
[-ncols columns]
[-o key | -O skey]
[-R | -r]
[-S]
[-s delay-secs]
[-n nprocs]
[-stats keys]
[-pid processid]
[-user username]
[-U username]
[-u]
top命令周期性的显示系统进程的有序列表,默认的排序关键字是pid,也可以替换成其他字段。
可参考这篇文章,里面介绍的特别详细,突然发现top命令这么复杂
top命令在执行时可以使用按键交互,按h可查看帮助:

按键功能
h键会显示帮助画面, 同时会显示目前的设置,比如模式,延迟等
E键切换顶部内存显示单位
e键切换进程内存显示单位
l键切换显示平均负载和启动时间信息。
t键切换显示CPU状态信息
m键切换显示内存信息
f,F键从当前显示中添加或者删除项目
R键反转排序
H键统计线程
c键命令行/程序名切换,用于更改COMMAND字段展示的程序名还是命令行
i键开/关忽略闲置和僵死进程
S键切换到累计模式
x键高亮排序字段,在搜索和过滤的时候,列高亮是关闭的。
y键高亮运行中的任务
o,O键改变显示项目的顺序
V键树形结构模式 开关
v键隐藏/显示子进程切换。在树形结构模式中,这个命令可以显示或隐藏子进程。如果被选定的进程没有子进程,就无事发生。
k键终止一个进程
r键重新设置一个进程的优先级别(数值越高优先级越低)
ds键
M键根据驻留内存大小(RES)排序
P键根据CPU使用百分比大小进行排序
T键根据时间/累计时间进行排序
=:退出任务限制。删除任务展示的限制。这个命令会使’i’(空闲任务)、‘n’(最大任务)、‘v’(隐藏子任务)这些命令的效果反转。它还提供了从 PID 监控、用户过滤、其他过滤和定位处理的退出。另外,如果窗口已经滚动了,这个命令也可以重置窗口。

15.htop

16.tree

NAME
tree - list contents of directories in a tree-like format.

SYNOPSIS
tree [-acdfghilnpqrstuvxACDFQNSUX] [-L level [-R]] [-H baseHREF] [-T
title] [-o filename] [–nolinks] [-P pattern] [-I pattern] [–inodes]
[–device] [–noreport] [–dirsfirst] [–version] [–help] [–filelimit
#] [–si] [–prune] [–du] [–timefmt format] [–matchdirs] [–]
[directory …]
常用参数:
-C 在文件和目录清单加上色彩,便于区分各种类型。
-d 显示目录名称而非内容。
-D 列出文件或目录的更改时间。
-f 在每个文件或目录之前,显示完整的相对路径名称。
-F 在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*“,”/“,”=“,”@“,”|"号。
-i 不以阶梯状列出文件或目录名称。
-L level 限制目录显示层级。
-l 如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录。
-s 列出文件或目录大小。
-t 用文件和目录的更改时间排序。
-x 将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外。

17.mount

NAME
mount - mount a filesystem

SYNOPSIS
mount [-l|-h|-V]

   mount -a [-fFnrsvw] [-t fstype] [-O optlist]

   mount [-fnrsvw] [-o options] device|dir

   mount [-fnrsvw] [-t fstype] [-o options] device dir

相关常识:

  1. 列出mount的目标
    更推荐使用findmnt
  2. 指示设备和文件系统
    分卷名是易变的,所以推荐使用分卷的标识符,例如UUID或LABEL。可以使用lsblk --fs对所有块设备的概览进行查看,而blkid -p针对特定分卷提供更详细的信息。
  3. 移动挂载点
    mount -M/–move olddir newdir
    常用参数:
    -a:将 /etc/fstab 中定义的所有档案系统挂上。
    -F:这个命令通常和 -a 一起使用,它会为每一个 mount 的动作产生一个行程负责执行。在系统需要挂上大量 NFS 档案系统时可以加快挂上的动作。
    -f:通常用在除错的用途。它会使 mount 并不执行实际挂上的动作,而是模拟整个挂上的过程。通常会和 -v 一起使用。
    -n:一般而言,mount 在挂上后会在 /etc/mtab 中写入一笔资料。但在系统中没有可写入档案系统存在的情况下可以用这个选项取消这个动作。
    -s:容忍草率的挂载选项,而不是失败。这将忽略文件系统类型不支持的挂载选项。并非所有文件系统都支持此选项。目前它是由挂载支持的。仅限NFS挂载帮助器。
    -r:等于 -o ro
    -w:等于 -o rw
    -L:将含有特定标签的硬盘挂上。
    -l:给挂在的分区添加标签
    -U:将档案分割序号为特定uuid的档案系统挂下。-L 和 -U 必须在/proc/partition 这种档案存在时才有意义。
    -t:指定档案系统的型态,通常不必指定。mount 会自动选择正确的型态。
    -R 重新挂载
    文件系统无关选项
    -o async:打开非同步模式,所有的档案读写动作都会用非同步模式执行。
    -o sync:在同步模式下执行。
    -o atime、-o noatime:当 atime 打开时,系统会在每次读取档案时更新档案的『上一次调用时间』。当我们使用 flash 档案系统时可能会选项把这个选项关闭以减少写入的次数。
    -o auto、-o noauto:打开/关闭自动挂上模式。
    -o defaults:使用预设的选项 rw, suid, dev, exec, auto, nouser, and async.依赖与内核和文件系统。
    -o dev、-o nodev允许/不允许字符和块设备等被解释
    -o exec、-o noexec允许执行档被执行。
    -o user、-o nouser:使用者可以执行 mount/umount 的动作。
    -o remount:将一个已经挂下的档案系统重新用不同的方式挂上。例如原先是唯读的系统,现在用可读写的模式重新挂上。
    -o ro:用唯读模式挂上。
    -o rw:用可读写模式挂上。
    文件系统相关选项
    文件系统有很多种,下面是相应的手册:
    filesystem
    这里只关注cifs和nfs。
    nfs:
    只对nfs2或nfs3有效:
    udp 与指定proto=udp效果相同,包含它是为了与其他操作系统兼容。
    tcp 与指定proto=tcp效果相同,包含它是为了与其他操作系统兼容。
    在不稳定的复杂网络环境中建议使用tcp参数,在稳定的网络下可以使用udp参数。NFSv3/NFSv4支持tcp/udp,NFSv2只支持udp。
    port=n 服务器NFS服务端口的数值。如果指定端口上服务器的NFS服务不可用,则挂载请求失败。如果未指定此选项,或者指定的端口值为0,则NFS客户端使用服务器的rpcbind服务发布的NFS服务端口号。如果服务器的rpcbind服务不可用,服务器的NFS服务没有注册到它的rpcbind服务,或者服务器的NFS服务在发布的端口上不可用,则挂载请求失败。
    mountport=n 服务器挂载端口的数值。如果服务器的挂载服务在指定的端口上不可用,则挂载请求失败。
    如果未指定此选项,或者指定的端口值为0,则mount(8)命令使用服务器的rpcbind服务发布的mount服务端口号。如果服务器的rpcbind服务不可用,服务器的挂载服务没有注册到它的rpcbind服务,或者服务器的挂载服务在发布的端口上不可用,则挂载请求失败。
    当通过阻止rpcbind协议的防火墙挂载NFS服务器时,可以使用此选项。
    mounthost=name 正在运行mount的主机名。如果不指定该选项,则mount(8)命令假定mount服务与NFS服务运行在同一台主机上。
    lock / nolock 选择是否使用NLM边带协议锁定服务器上的文件。如果两个选项都没有指定(或者指定了lock),则对这个挂载点使用NLM锁定。当使用nolock选项时,应用程序可以锁定文件,但是这种锁只对运行在同一客户机上的其他应用程序提供排斥。远程应用程序不受这些锁的影响。
    当使用NFS挂载/var时,必须使用nolock选项禁用NLM锁定,因为/var包含Linux上NLM实现使用的文件。在不支持NLM协议的NFS服务器上挂载导出文件时,也需要使用nolock选项。

挂载nfs的常见选项:

sudo mount -o rw,async,nolock link.local:/  /mnt/link

如果出错了可以使用 -vvv看更详细的信息
使用showmount -e可以查看nfs服务器的mount信息

showmount -e link.local

需要注意的是,若是使用的是容器为客户端,那么需要设置privileged参数 ,不然挂载不上,然后还有就是我这边指定udp也会出错,去掉就可以了。

18.sort

NAME
sort - sort lines of text files

SYNOPSIS
sort [OPTION]… [FILE]…
sort [OPTION]… --files0-from=F

常用参数:
-b 忽略开头的空格
-d 字典序排序
-f 忽略大小写
-g 按通用数值排序,支持科学计数法
-i 忽略非打印字符
-M 将前面3个字母依照月份的缩写进行排序。
-h 按人类可读的顺序进行排序,比如2K 1M 1G
-n 按字符串数值排序
-R 随机排序
-r 以相反的顺序来排序
-V 按文本中的数字排序,比如aa12,aa3
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-t <分隔字符> 指定排序时所用的栏位分隔字符。
-k 指定需要排序的列,列序号从1开始
-c 检查输入是否已经排序,若已有排序则不进行操作
-o 将结果写入到文件而非标准输出
-u 去重排序
-m 将几个排序好的文件进行合并。
-z 零终止的结束行,0字节,而不是换行符

19.update-alternatives

NAME
update-alternatives - 通过维护符号链接来管理多个版本的命令

SYNOPSIS
update-alternatives [option…] command

  --install <链接> <名称> <路径> <优先级>
    [--slave <链接> <名称> <路径>] ...
                           在系统中加入一组候选项。
  --remove <名称> <路径><名称> 替换组中去除 <路径> 项。
  --remove-all <名称>      从替换系统中删除 <名称> 替换组。
  --auto <名称><名称> 的主链接切换到自动模式。
  --display <名称>         显示关于 <名称> 替换组的信息。
  --query <名称>           机器可读版的 --display <名称>.
  --list <名称>            列出 <名称> 替换组中所有的可用候选项。
  --get-selections         列出主要候选项名称以及它们的状态。
  --set-selections         从标准输入中读入候选项的状态。
  --config <名称>          列出 <名称> 替换组中的可选项,并就使用其中哪一个,征询用户的意见。
  --set <名称> <路径><路径> 设置为 <名称> 的候选项。
  --all                    对所有可选项一一调用 --config 命令。

<链接> 是指向 /etc/alternatives/<名称> 的符号链接。(如 /usr/bin/pager)
<名称> 是该链接替换组的主控名。(如 pager)
<路径> 是候选项目标文件的位置。(如 /usr/bin/less)
<优先级> 是一个整数,在自动模式下,这个数字越高的选项,其优先级也就越高。
整体为 <链接> -> /etc/alternatives/<名称> -> <路径>

20.read

read: read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name …]
从标准输入中读取一行并将其拆分为多个字段并存储到变量。
如果没有提供name,则读取的行存储在REPLY变量中。

选项:
-a 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。
-d 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志。
-p 后面跟提示信息,即在输入前打印提示信息。
-e 在输入的时候可以使用命令补全功能。
-n 后跟一个数字,定义输入文本的长度,很实用。
-r 屏蔽\,如果没有该选项,则\作为一个转义字符,有的话 \就是个正常的字符了。
-s 安静模式,在输入字符时不再屏幕上显示,例如login时输入密码。
-t 后面跟秒数,定义输入字符的等待时间。
-u 后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的。

使用read编写脚本实现打印并读取

_wait(){
read -rs -t 0
read -rsn4 -p "." -t 1 input
if [ "$input" = "stop" ]; then
  local sec=`sec_calc "$START_TIME"`

  echo ""
  echo "Startup abort in ${sec}s"
  exit 0
fi
}

21.du

估计文件的空间占用

SYNOPSIS
       du [OPTION]... [FILE]...
       du [OPTION]... --files0-from=F

常用参数
-a 显示所有文件的大小,而不仅仅是文件夹的
-c 显示总占用
-d 最大深度,-s选项相当于-d 0
-h 友好的单位显示
-X 使用文件来指定排除的文件
–exclude 使用样式排除指定文件,非正则

22.pstree

显示进程树
原型:pstree [options] [pid,user]
常用参数:
-a:显示每个程序的完整指令,包含路径,参数或是常驻服务的标示;
-c:不使用精简标示法;
-C <attr>:根据attr将树着色,目前只有age参数,用来标示进程年龄
-g:显示组id
-G:使用VT100终端机的列绘图字符;
-h:列出树状图时,特别标明现在执行的程序;
-H <pid>:此参数的效果和指定"-h"参数类似,但特别标明指定的程序;
-l:采用长列格式显示树状图;
-n:用程序进程号排序。预设是以程序名称来排序;
-N <ns>:按命名空间来显示分开的树,可选 (cgroup, ipc, mnt, net, pid, time, user, uts)
-p:显示程序进程号;
-s <pid>:只显示特定父进程的整个树
-S:显示命名空间转换 待确认作用
-t:显示线程
-T:不显示线程只显示进程
-u:显示用户名称;
-U:使用UTF-8列绘图字符;

23.ps

ps有三种选项:
UNIX选项,以-开头
BSD选项,无-开头
GNU长选项,以–开头
常用选项
-e 显示所有进程
-l 长格式显示
-f 全格式展示
-o 指定输出格式
-L 显示线程
-m 在进程后显示线程
–forest ascii形式的树
用于-o和–sort的字段:
%cpu
%mem
args 命令及其参数
comm 进程命令
class 显示调度类型

CLS字段
									  -   not reported
                                      TS  SCHED_OTHER
                                      FF  SCHED_FIFO
                                      RR  SCHED_RR
                                      B   SCHED_BATCH
                                      ISO SCHED_ISO
                                      IDL SCHED_IDLE
                                      DLN SCHED_DEADLINE
                                      ?   unknown value

stat
进程状态:

               D    不可中断睡眠 (通常为IO)
               I    空闲内核线程
               R    运行中或可运行 (on run queue)
               S    可中断睡眠 (waiting for an event to complete)
               T    被作业控制信号终止
               t    在追踪时被调试者终止
               W    分页 (not valid since the 2.6.xx kernel)
               X    死亡 (should never be seen)
               Z    僵尸进程,已终止但未被父进程回收
       指定stat关键字后将额外显示一个字符:

               <    高优先级 (not nice to other users)
               N    低优先级 (nice to other users)
               L    has pages locked into memory (for real-time and custom IO)
               s    is a session leader
               l    多线程 (using CLONE_THREAD, like NPTL pthreads do)
               +    is in the foreground process group

rtprio 实时优先级
ni nice值
pri 进程优先级,数字越小越优先
wchan 进程睡眠时内核地址,如果进程正在运行会显示-
pid 进程号
ppid 父进程

tid 线程id
psr 进程当前被分配的处理器
例子

ps -eo comm,ppid,pid,tid,stat,class,ni,pri,rtprio,wchan:14,psr

24.pgrep

与pidof的区别:比pidof更灵活,功能更多

SYNOPSIS
       pgrep [options] pattern

常用参数:
-c 显示数量而不是进程号
-f 同时匹配进程的命令行参数
-i 忽略大小写
-l 除了进程号同时显示进程名
-a 列出所有
-n 只列出最新的
-o 只列出最老的
-P ppid 只显示父进程是ppid的进程
-v 除了指定的不显示,其他都显示
-w 显示线程id而不是进程id
-x 精确匹配
-r 仅匹配特定状态的进程 ,比如D,R,S,Z
–ns pid 匹配相同命名空间

25.column

列表化
原型

column [options] [file...]

支持三种模式
列在行前填充(默认模式)
行在列前填充 使用-x选项指定,将输出的列左对齐
列表 使用-t选项指定
输入可以是文件或标准输入
——table-* options的参数columns是逗号分隔的列名列表,由——table-columns定义,或者按输入指定的顺序排列列号。名字和数字可能混在一起。
常用选项:
-J 使用json格式输出表, -N/–table-columns必选,-n/–table-name建议选
-c [width]指定输出宽度
-d 不打印头
-o [string]输出时指定列分隔符,默认为两个空格
-s [separators]指定输入的分隔符,默认为空格
-t 从输入包含的列数来创建表
-N [names]指定列名,使用,分开
-l [number] 指定最大列数,最后一列将会包含剩余所有的数据
-R [columns]对指定列中的文本进行右对齐。
-T [columns]指定哪些列的字符可以被截断
-E [columns]指定在计算列宽度时可以忽略异常长(比平均长度长)的单元格的列。
-e每个分页都打印头
-w [columns]指定列,以便在必要时对长文本使用多行单元格。
-H [columns]不显示指定列
-O [columns]指定列的顺序
-n [name]指定josn时的表名
-L 显示空白行
-r [columns]指定行使用树形显示
-I [columns]指定列的行id创建父子关系
-p [columns] 指定列的父id来创建父子关系
-x 先填行再填列

26.paster

合并文件的行
原型
paste [OPTION]… [FILE]…
将由每个文件中顺序对应的行组成的行(以制表符分隔)写入标准输出。
常用参数
-d=LIST 使用指定输出分隔符而不是tab
-s 顺序地将每个文件中的所有行的内容合并为一行
-z 使用NUL作为行结束符而不是新行

27.colrm

去除文件中的行

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值