17.8.5 -ok command {} \;
对查找到的每个文件执行由command指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认。
其中的大括号{}作为检索到的文件的占位符,用于引用查找到的文件名称自身,而分号(;)作为命令结束的标志, 需要转义, 也可以用 + 号表示。-exec command {} \; 等同于 -exec command {} +
17.8.6 -exec command {} \;
对查找到的每个文件执行由command指定的命令。其中的大括号{}作为检索到的文件的占位符,用于引用查找到的文件名称自身,而分号(;)作为命令结束的标志, 需要转义, 也可以用 + 号表示。-exec command {} \; 等同于 -exec command {} +
几个小例子:
find . -type d -maxdepth 1
find /var/mail/ -size +50M -exec rm {} \;
find . -name “*.sv” |xargs rm -rf
find . -name “*.sv” -exec rm -rf {} \;
find -type f | xargs -n 3 rm -rf
find -type f | exec rm -rf {} \;
17.8.7忽略大小写
使用-iname参数选项
find . -iname "example*" -print
17.8.8否定参数
find 也可以用 ! 排除匹配到的模式,下面的find命令能够匹配所有不以.txt结尾的文件。
find . ! -name "*.txt" -print #注意!和-name之间有空格
17.9 find结合xargs
xargs(英文全拼:eXtended ARGumentS)是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。xargs 作为后面命令的参数。
#将find查找的所有文件作为参数传递给grep进行过滤
find . -name “*file*” | xargs grep include
# 查找大于20M的文件,并显示具体大小
find ./ -type f -size +20M 2>/dev/null | xargs du -sh
# 查找大于60M的文件,并显示详细信息
find ./ -type f -size +60M 2>/dev/null | xargs ls -l
# 查找系统中最大的3个文件
find ./ -type f -exec du -sh {} + 2>/dev/null | sort -rh | head -n 3
18. grep命令 [感谢关注微信公众号《芯片验证日记》]
grep:查找文件内容。
grep -Rn “xx”,#一定要用R,不要用r,我是吃过亏的。
18.1 pgrep
pgrep是一个根据名称查找进程ID的命令,返回的是进程ID,若存在当个进程,则分为不同的行返回ID(默认实现)。
pgrep经常和其他命令配合使用,最常见的是kill:
19. tree命令
tree -L 2 文件件名称
20. tee命令
tee的应用场景
向命令执行窗口输出的同时,将内容输出到文件。应用场景:将仿真过程中terminal中显示的内容,输出到特定的文件make run |tee xxx_tee.log
ping baidu.com | tee pb.log
ping baidu.com | tee -a pb.log #追加
ping baidu.com | tee pb.log pb2.log #输出到多个文件
cat pb.log |tee |wc -l #将tee命令的输出重定向为另一个命令的输入流
#在vim打开的文件中输入,:w !sudo tee % #用tee命令提高写入文件的权限等级
ping baidu.com |tee -i pb.log #让tee命令忽略中断事件
与自己对话如何呢,或者叫做复读机?
tee命令直接跟文件的话,会等待输入,并同步进行输出到终端和文件的操作。
$ tee test.log
hello
hello
world
world
$ cat test.log
hello
world
21. split命令
split命令可以用于切割文件,将大文件切割成几个小文件。
split -C 1M/10G xx.log
22. sed命令
sed主要用来直接处理文本文件。
sed -i “s/” a.sv
只打印那些发生替换的行
·
sed -n ‘s/uvm_hdl_read/\/\//&/p’ *.sv
直接修改用下面命令
sed -i ‘s/uvm_hdl_force\/\//&/g’ *.sv
删除所有空行
sed “s/^$/d” foo.sv
删除所有只包含空格或者制表符的行
sed “s/^[ ] *$/d” foo.sv
删除所有引号
sed “s/””//g” foo.sv
删除所有//注释的行
sed “s/\/\///g” foo.sv
23. unix2dos命令
unix2dos是将Linux&Unix格式文件转换为Windows格式文件的命令。dos2unix和unix2dos是互为孪生的一个命令,dos2unix是将Windows格式文件转换为Unix、Linux格式的实用命令。Windows格式文件的换行符为\r\n ,而Unix&Linux文件的换行符为\n. dos2unix命令其实就是将文件中的\r\n 转换为\n。在windows下生成的license文件,放到linux中用时会用到该命令。
使用前需要先安装:
yum install -y dos2unix
yum install -y unix2dos
对单个文件操作:
unix2dos test.txt
对多个文件操作:
unix2dos test1.txt test2.txt test3.txt
对整个目录中的文件做unix2dos操作:
find /path/to/dir -type f -exec unix2dos {} \;
如果要保持文件时间戳不变,加上-k参数
unix2dos -k test1.txt test2.txt
24. ln -s软连接 [感谢关注微信公众号《芯片验证日记》]
创建软连接
ln -s [源文件/目录] [目标软链接]
删除软连接
删除软链接和删除文件/目录操作一样,使用rm命令。但是需要特别注意的是,如果只是删除软链接,不想误删除软链接目录真实文件数据,在rm目录时路径末尾一定不能带"/"。如果带了"/",会将链接到的路径下的文件全部删除。
25. lsof命令
lsof是linux下非常实用的系统级的监控、诊断工具。它是List Open Files的缩写(ls open file)。使用 lsof可以获取任何被打开文件的各种信息,因为lsof 需要访问核心内存和各种文件,所以必须以root用户的身份运行它才能够充分地发挥其功能。
26. ftp命令 [感谢关注微信公众号《芯片验证日记》]
格式:ftp [hostname| ip-address]
a)在linux命令行下输入:
ftp 192.168.1.1
#or
ftp.company.com
b)服务器询问你用户名和密码,分别输入用户名和相应密码,待认证通过即可。
下载文件用get;下载多个文用mget;上传文件用put;上传多个文件用mput
27. sftp命令
sftp user@xxftp.company.com.cn,然后服务器询问你的密码,输入密码,待认证通过即可。
28.如何删除一些奇怪的文件
a)进入奇怪文件所在的文件夹,ls -i 得到inode节点号,然后kill -9 inode节点号;
b)lsof .nfs* 可以找到挂住的进程,kill这个进程,这些隐藏文件就可以删除了。
c)ps -ef |grep “.nfs*” 得到进程id,然后通过kill -9 进程id杀掉即可。
29. /dev/null的含义和用途
/dev/是包含所有物理和虚拟设备的目录。例如,/dev/sda 可能是主硬盘驱动器,/dev/sdb可能是正在使用的笔记本驱动器的文件。这就是在 Linux 中访问设备的方式。除了这些物理设备(如硬盘驱动器)之外,Linux还具有虚拟设备。
虚拟设备是充当物理设备的设备,但实际上仅以软件形式存在。应用程序可以从这些设备获取数据,但该数据不是来自物理设备,而是来自/dev/null,/dev/null是一种特殊的虚拟设备,用于写入而不是读取。写入/dev/null的任何内容都会从操作系统中消失。正是由于这个原因,/dev/null 被称为 bitbucket。例如,将"Hello World"输出重定向到/dev/null中。结果就没有任何输出。“Hello World”不存储在系统上的任何文件中。它只是消失了。
/dev/null的使用:在Linux中运行任何命令时,都会生成两个输出流,即标准输出(stdout)和标准错误(stderr)。标准输出是程序正常生成的任何输出。标准错误包含命令生成的所有错误。stdout和stderr流可以通过它们的文件描述符(分别为 1 和 2)进行访问。
/dev/null与stdout和stderr一起使用:如下图所示,ping xrun.log是不会成功的,所以1>m.txt是有问题的,因为1代表标准输出stdout;这里应该使用2>n.txt,因为2代表标准错误输出,所以,m.txt是空的,n.txt里面存储了标准错误输出的结果。
如下图所示,ping xrun.log 2>/dev/null是丢弃错误信息到/dev/null,系统没有任何提示;ping xrun.log >/dev/null是丢弃正确信息到/dev/null,系统报错。
概括来讲,/dev/null 在Linux中是一个void,它会吸收任何输入,并且不返回任何内容。大多数情况下,管理员使用它来转储无用的数据,在其中输出,这样它就不会占用系统内存和处理能力。甚至可以通过将无用的文件直接移动到/dev/null/ 来删除它们。
30.参考文献 [转自微信公众号《芯片验证日记》]
[1] https://mp.weixin.qq.com/s/qzkIVkWkN_FFw94cFXdcbA[2] https://blog.csdn.net/wq1205750492/article/details/124497195
[3] https://blog.csdn.net/lxw1844912514/article/details/123414823
[4]大乐学IT
|