网站首页 > 技术文章 正文
本文主要介绍了lsof, find, xargs命令的基本用法。
lsof命令
lsof:list open files 列出已经打开的文件,文件可以是一个普通文件、目录、特殊的块文件、特殊的字符文件、可执行的文件、lib库文件、socket文件等。
用法:
lsof [options] [filename]
案例:
- lsof test.txt
表示显示打开test.txt文件的进程; - lsof -c string
查找lsof显示结果中COMMAND列中包含string的程序所打开的文件;这里可以有多个-c,来显示多个进程打开的文件; - lsof -p 33321
列出进程号为33321的进程打开的文件 - lsof -g 0
显示属于gid为0这个组成员所打开的文件 - lsof -u root|0
显示root用户(或是指定的UID的用户)所有打开的文件。 - lsof -u ^root
表示列出不属于root用户打开的文件; - lsof +d /tmp
显示/tmp目录下被打开的文件,注意这个只会在当前目录下找,不会去找指定目录的子目录。 - lsof +D /usr/local
这个是在/usr/local目录及其子目录中去寻找已经打开了的文件 - lsof -d 4
显示正在使用文件描述符为4的进程 - lsof -a -u root -c mysqld
表示显示root用户运行的mysqld程序打开的所有文件。-a表示and的意思,是两个条件都要满足 - lsof -i [46][protocol][@hostname|hostaddr][:service|port]
显示指定的网络地址所属的进程打开的文件列表。[]中的内容为可选项
4|6表示的是要匹配的网络地址是ipv4,还是ipv6的
protocol表示网络地址所使用的传输层协议,有效值为TCP、UDP(不区分大小写)
hostname|hostaddr主机名或主机地址
service表示定义在/etc/services文件中的服务名称
port表示网络地址中的端口部分
例如:
lsof -i 4tcp@0.0.0.0:22
find命令
通过遍历指定目录中的所有文件查找,查找的条件丰富。
用法:find 查找路径 查找条件 查找到后的动作
查找路径:就是指在哪个路径中进行查找
查找条件
- -name ‘filename’ 是精确查找;区分大小写;
- -iname ‘filename’在查找的时候不区分文件名的大小写;
- -regex PATTERN 基于正则表达式来进行文件名的查找;
- -user username 查找属于username用户的文件;
- -group groupname 查找属于groupname组的文件;
- -gid gid 查找属于组id为gid的文件;
- -uid uid 查找属于用户id为uid的文件;
- -nouser 查找不属于任何用户的文件,即没有属主的文件;
- -nogroup 查找没有属组的文件;通常在用户和组都被删除了的情况,这里该用户的属主和属组为删除的这个用户的生前uid,gid
- -type type 根据文件的类型来查找;type可能有的值如下:
f 普通文件
d 目录
c 字符设备
b 块设备
l 链接文件
p 管道设备
s 套接字文件
- -size {+|-}n{k|M|G} 根据文件的大小来查找;
+10k 表示文件大小大于10k
-20M 表示文件大小小于20M,
10k 表示查找大小为10k的文件;
如果没有指定单位则默认是byte字节;
如果没有+或-,则表示精确匹配;
当要把多个查找条件组合起来的时候,要使用到下面的逻辑关系:
-a 表示并且;
-o 表示或;
-not 表示非;
默认情况下是 –a 也就是“并且”
根据文件的时间属性来查找:
-atime {+|-}num
-mtime {+|-}num
-ctime {+|-}num
num 表示查找那些atime、mtime、ctime离此刻刚好有num天的文件;
-num 表示查找那些atime、mtime、ctime离此刻刚好在num天之内的文件;
+num 表示查找那些atime、mtime、ctime离此刻至少有num天,也就是说num天之外的文件;
可以使用下面的这张图来说明:
-amin 最近访问过的时间,以分钟为单位;
-mmin 最近修改过的时间,以分钟为单位;
-cmin 最近改变过的时间,以分钟为单位;
-perm MODE 根据文件的权限来查找;755之类的 这是精确匹配,也就是说文件的权限必须是MODE,不多也不能少;
-perm /MODE 也是根据文件的权限来查找,只不过,只要有一个可以匹配,就算到找到的范围内;
-perm -MODE 每一位都必须匹配;也就是说当文件的权限完全包含MODE的时候,就算数;
-inum n 根据指定的文件的inode号来查找文件;可以用来删除那些中文乱码的文件。
先使用ls -li来找到乱码文件的inode,然后再使用find /path/ -inum x -exec rm -rf {} \; 这样就可以删除该文件了;
查找后的动作:
-print 默认动作,打印出来;
-ls 类型ls –l的形式来显示找到的文件的信息;
-ok command {} \; 在执行command的时候会提示用户是否执行,一定要写上\;结尾,{}是引用找到的那个文件,可以引用多次;
-exec command {} \; 同上,但是在执行command 的时候是不会提示用户的;
xargs命令
xargs - 从标准输入接收命令并执行;
xargs 从标准输入读入参数,这些参数以空格、单双引号或者一个新行作为分隔符,然后xargs就会用后面的命令(默认是echo)带上这些参数来执行;从标准输入读入的空行将会被忽略;
由于类unix文件系统中文件名称可以包括空格、换行等特殊字符,所以默认的操作还是有些问题的。文件名中有空格、/和换行符的将不能被xargs正确的处理,考虑到这种情况,最好是使用-0 选项,它可以避免这些问题。当使用这个选项的时候,你必须确保为xargs产生参数的程序所产生的参数,必须也是以空字符来作为他隔符的。如果是用find为xargs产生参数,那么可以在find中使用-print0。
如果任何一个调用的命令以255状态码退出,那么,xargs将会立即停止,将不会读取后面的参数,并且会在标错误输出上显示错误信息。
案例:
- 把/tmp目录下,以.test结尾的普通文件全部删除。
# find /tmp -name ‘*.test’ -type f | xargs rm -f {}
上面这个命令只会删除文件名称中没有空格或是换行符的文件。像’a b.test’这个文件它是删除不了的。
- 再看下面这个命令:
# find /tmp -name ‘*.test’ -type f -print0 | xargs -0 rm -rf
这个命令就会把/tmp下面所以有.test结尾的文件全部删除;
猜你喜欢
- 2024-12-27 史上最全正则详解 正则的用法
- 2024-12-27 慎用正则表达式 使用正则表达式
- 2024-12-27 Java性能调优--代码篇:优化正则表达式的匹配效率
- 2024-12-27 详细介绍一下Python爬虫中的正则表达式匹配规则?
- 2024-12-27 Word中实例演示:高级查找与高级替换等....
- 2024-12-27 再杂也无惧 在Excel高效提取数字 excel如何提取出数字
- 2024-12-27 Linux下find与exec的联手干大事 linux find -newer
- 2024-12-27 Java中如何使用正则技术提取html中的任意内容
- 2024-12-27 一看就懂 | 30分钟入门正则表达式,看这一篇就够了(值得收藏)
- 2024-12-27 VBA如何找出工作表数据中的数字,简单到不用思考
- 最近发表
-
- 如何在 Linux 上安装 Java_怎么在linux中安装jdk
- Linux中tar命令打包路径相关问题_linux怎么用tar打包一个目录
- 常用linux系统常用扫描命令汇总_常用linux系统常用扫描命令汇总表
- VM下linux虚拟机新建过程(有图)_linux虚拟机创建新用户命令
- 系统小技巧:迁移通过Wubi方式安装的Ubuntu系统
- 文件系统(八):Linux JFFS2文件系统工作原理、优势与局限
- 如何利用ftrace精确跟踪特定进程调度信息
- prometheus网络监控之fping-exporter
- hyper linux的实操步骤,hyper-v批量管理工具的使用指南
- 2021年,运维工程师笔试真题(二)(附带答案)
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)