一网打进Linux下那些查找命令
查找是我们每天都在做的事情,早上醒来找下手机,出门之前查下公交,坐下之后查下资料,分析数据查下模式。
查找文件,查找信息,查找错误是应用起来更为具体的一些工作,而Linux命令行为我们提供了很多快捷强大的查找方式。
命令/可执行程序查找
whereis program_name
: 会在系统默认安装目录(一般是有root权限时默认安装的软件)查找二进制文件、源码、文档中包含给定查询关键词的文件。(默认目录有 /bin
, /sbin
, /usr/bin
, /usr/lib
, /usr/local/man
等类似路径)
which program_name
: 会给出所有在环境变量中的程序的路径,一来方便知道运行的程序在哪,二来方便修改。(PATH和path,傻傻分不清)
比如vim which sp_pheatmap.sh
就可以直接修改绘制热图的脚本,cp
which sp_pheatmap.sh.
可以直接把源码拷贝到当前目录,省去了写全路径的麻烦。
如果运行which bwa
,系统返回是 /usr/bin/which: no bwa in (/home/usr/bin:/bin)
则说明bwa没有放置在环境变量中,不可以直接写名字调用。
普通文件快速定位 locate
locate
是快速查找定位文件的好方法,但其依赖于updatedb
建立的索引。而updatedb
一般是每天运行一次,所以当天的新文件是索引不到的。
如果有根用户权限,可以手动运行updatedb
做个更新,然后再locate bwa
。
(个人用户也可以构建自己的updatedb, 使用locate在局部环境中查找。)
普通文件多条件查找 find
find / -name bwa
可以搜索根目录下所有名字为bwa的文件
运行上面的命令时会输出很多Permission denied
,是因为 作为普通用户,无权限访问一些目录,因此会有提示输出,可以使用find / -name bwa 2>/dev/null
重定向标准错误到空设备,报错信息就被扔掉了,还不影响正常输出。
按时间查找
我们开发的在线画图网站 (www.ehbio.com/ImageGP),为了追踪每天用户使用时碰到了什么问题,需要每天定时去查看日志。
这个命令find . -name *.log -mmine -60
可以查看当前目录下(包括所有子目录)一小时内修改的日志文件。再配合head
就可以查看每个日志文件的内容,以方便查看使用过程中出现了哪些错误,如何增加提示或修改画图程序。
正是有了这个利器,前台的错误提示中才出现了这么一句话,如果您核对后数据和参数没问题,请过1天再进行尝试。若是程序问题,我们通常会在1天内修复。
当然后台数据都是用时间戳存储的,而且若无报错,数据会直接删掉,有报错的才会保留日志,不会泄露用户信息,这点大家不用担心。
现在画图网站越来越稳定,出现的问题越来越少,前台提示也越来越完善,希望大家使用时多看下提示,查看日志的频率也少了,就使用find . -name *.log -mtime -1
查看从现在起24小时内的日志了。
这个也有个问题,每次查看的时间可能不一致,会漏查或有重叠,于是在某次查看完日志后,使用touch check
在当前目录下新建了个空文件。以后再查日志文件时,只要使用find . -name *.log -newer check
就可以获得所有上次查看过之后的新日志。每次查看完之后,都做个书签,就方便多了。
慢慢发现有空日志文件, 使用find . -name *.log -newer check -size +0
过滤掉, 只保留大小大于0的文件。就这样在小伙伴聪明勤奋地维持下,我们绘图网站2年间为大家提供了近30万次服务。(画图手册 | ImageGP:今天你“plot”了吗?)
按类型和大小查找
如果我想得到当前目录下所有png
和jpg
照片呢?
使用 find . \( -name "*.png" -o -name "*.jpg" \) | less
或 find . -regex ".*\(\.png\|\.jpg\)$"
find . -type f -size +100G
可以获取大小超过100G的文件。
限制查找深度
只看当前目录2层子目录内的文件find . -maxdepth 2 -name *.log
。
查看不是log
结尾的文件find . -not -name *.log
。还有更多组合操作,详见find文档 (我在群里扔了一个关于查找的问题,结果…)。
按文件内容查找 grep
find可以查找包含某句话的文件吗?还是拿我们的日志说事吧,find . -name *.log -exec grep -l 'Error' {} \;
就可以返回所有包含Error
单词的文件名。
find . -name *.log | xargs grep -l 'Error'
也可以。
grep -rl 'Error' *
也可以,不加-l
还可以顺便返回匹配的行。
匹配行的前后行
grep -A 5 -B 1 'Bioinfo' ehbio.log
可以查看匹配行的前1行(B, before)和后5行(A, after)。
匹配次数
grep -c 'Bioinfo' ehbio.log
可以统计包含Bioinfo的行数
grep -ci 'Bioinfo' ehbio.log
则会在匹配时忽略大小写。
统计FASTA序列中的序列数 grep '^>' ehbio.fa
统计FASTQ序列中的序列数 grep '^+$' ehbio.fq
。(^表示以什么开头,$表示以什么结尾)。
获取未匹配行
grep -v 'Bioinfo' ehbio.log
,读读手册(man grep
),可以看到更多参数使用。
序列提取
假设有个基因列表文件 (ID),有个单行序列的FASTA文件 (ehbio.fa), 运行如下命令grep -A 1 -Fw -f id ehbio.fa | grep -v -- '--'
就可以批量提取序列了。
-f id
表示把id文件中的每一行作为一个匹配模式。-F
表示匹配模式作为原始字符串,而非正则表达式,这是以防有特殊字符被解析。-w
则表示作为一个单词匹配,即假如id中有Sox2
,那么它会匹配Sox2
,也会匹配Sox21
;如果加了-w
,则不会匹配Sox21
。
更好的序列批量提取见 awk的使用。
模式匹配
grep强大的功能是支持正则匹配,默认使用基本正则表达式,-E
使用扩展的正则表达式,-P
使用perl格式的正则表达式。
比如想去掉文件中所有的空行grep -v '^$' ehbio.fa >ehbio.clean.fa
;
从公众号文章中搜索跟文章写作相关的文章 grep 'writ.*' *.md
(可以匹配write, writing等字);
正则表达式就比较多了,具体可以看http://mp.weixin.qq.com/s/4lUiZ60-aXLilRk9–iQhA。
一网打进Linux下那些查找命令相关推荐
- linux vim 怎么查找,linux下vim 查找命令
linux下vim 查找命令: /text --查找text, 按n查找下一个, N查找上一个 ?text --查找text(反向查找), 按n查找下一个, N查找上一个 */# --查找光标当前的单 ...
- Linux下的查找命令合集(which/whereis/locate/find)
Linux 下的查找命令有很多,常用的有which.whereis.locate.find.那么这4个命令之间各自有什么特点,又有什么区别,什么时候该用哪个才最合适呢?方便我们在开发和学习中能更加有效 ...
- Linux下的查找命令
man find locate which whereis type man 学习Linux命令,就得会看帮助文档,不然选项太多,根本记不住.常用的帮助文档命令有m ...
- (转)linux下find查找命令用法
1.命令格式: find pathname -options [-print -exec -ok ...] 2.命令功能: 用于在文件树种查找文件,并作出相应的处理 3.命令参数: pathname: ...
- Linux下文件查找命令find笔记
在Linux命令下如果需要快速自己系统所需要处理的文件,可以通过find命令快速进行检索. 如果想在某个路径下查找相应的文件可以执行如下命令: find path -name filename # p ...
- Linux下那些查找命令
欢迎关注天下博客:http://blog.genesino.com/2018/03/linux-search/ 查找是我们每天都在做的事情,早上醒来找下手机,出门之前查下公交,坐下之后查下资料,分析数 ...
- linux中vim下如何查找,linux下vim 查找命令
Echarts 动态折线图 < ... B-tree/B+tree/B*tree [转] (原文出处:http://blog.csdn.net/hbhhww/article/details/82 ...
- 页描述符 linux,有关Crontab导致Linux文件描述符...-探讨:crond 引发大量sendmail进...-linux下的ulimit命令用法解析(图文)_169IT.COM...
一,遇到的问题 系统中的定时任务,过一段时间之后,不能运行. 通过系统命令查看到系统有大量sendmail进程,导致文件描述符耗尽.以下主要通过分析整个处理过程,供大家参考. 二,处理过程 分析步骤如 ...
- linux将文件夹树状列出,Linux下用tree命令列出树形图
命令用法: tree 参数: -a 显示所有文件和目录. -A 使用ASNI绘图字符显示树状图而非以ASCII字符组合. -C 在文件和目录清单加上色彩,便于区分各种类型. -d 显示目录名称而非内容 ...
最新文章
- Java 判断list中是否包含某个元素
- 用户、组或角色 'zgb' 在当前数据库中已存在。 (Microsoft SQL Server,错误: 15023)
- 每一个有理想的程序员都应该读的一本书-《rework》
- python预测模型_Python多元线性回归-sklearn.linear_model,并对其预测结果评估
- ueditor单图上传iframe跨域_UEditor单图上传(simpleupload)跨域问题解决方案
- Balsamiq Mockups 实例3
- input表单的type属性详解,不同type不同属性之间区别
- django xadmin 集成DjangoUeditor富文本编辑器
- java中实现下载音乐_如何用JAVA的IO流下载落网音乐?
- 【OR】YALMIP Bilevel规划
- 单片机c语言延时30s程序,单片机c语言中的精确延时程序
- Laravel渴求式加载
- stm32 simulink 快速计算 Timmer定时器需要的预分频PSC和自动重载ARR
- linux选was清除缓存,Linux清除缓存操作
- 目标检测---IoU计算公式
- 电脑更换硬盘 | 怎么迁移数据到新硬盘?
- 【数学】拉格朗日乘子法(Lagrange Multiplier) 和KKT条件理解
- 淘宝运营 高客单价的特点、推广引流方式
- springCloud alibaba: Sentinel--服务容错
- 华中科技大学人工智能与自动化学院课程报告代码