adinxu
by adinxu
3 分钟 阅读用时

分类

标签

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)

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可以是以下几种:

BEGIN
END
expression
expression , expression

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

  1. BEGIN后紧跟着动作,这个动作块awk处理任何输入文件之前执行。1. END不匹配任何的输入文件,但是执行动作块中的所有动作,它在整个输入文件处理完成后被执行。<li>expression代表表达式作为模式,这里列举其中几种情况: </li>1. 最后一种则是范围模式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 &lt;= NF ; i++)  word[$i] = "" }
END { delete word[""]
for ( i in word )  cnt++
print cnt
}


运算符

运算符 描述    
= += -= *= /= %= ^= **= 赋值    
?: 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:只输出匹配部分
匹配行上下文控制:
-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默认的是斜杠,你可以指定其他字符)
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为步长的行

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/… 保存文件

curl

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 分钟内被修改过
-anewer file : 比文件 file 更晚被读取过的文件
-cnewer file :比文件 file 更新的文件
-ctime n : 在过去n天内被修改过的文件