dufaxing To be a better man

Linux下查找命令

2020-03-03


KYHHbj.png

博客地址

命令/可执行程序查找

  • whereis program_name
    • 会在系统默认安装目录(一般是有root权限时默认安装的软件)查找二进制文件、源码、文档中包含给定查询关键词的文件。(默认目录有 /bin, /sbin, /usr/bin, /usr/lib, /usr/local/man等类似路径)
  • which program_name
    • 会给出所有在环境变量中的程序的路径,一来方便知道运行的程序在哪,二来方便修改。
    • 如果运行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重定向标准错误到空设备,报错信息就被扔掉了,还不影响正常输出。

  • 按时间查找
    • find . -name *.log -mmine -60可以查看当前目录下(包括所有子目录)一小时内修改的日志文件。再配合head就可以查看每个日志文件的内容,以方便查看使用过程中出现了哪些错误.
    • find . -name *.log -mtime -1查看从现在起24小时内的日志了。
  • 按类型和大小查找
    • 如果我想得到当前目录下所有png和jpg照片呢?使用 find . \( -name "*.png" -o -name "*.jpg" \) | lessfind . -regex ".*\(\.png\|\.jpg\)$"
    • find . -type f -size +100G可以获取大小超过100G的文件。
  • 限制查找深度
    • 只看当前目录2层子目录内的文件find . -maxdepth 2 -name *.log
    • 查看不是log结尾的文件find . -not -name *.log

按文件内容查找 grep

find可以查找包含某句话的文件吗?拿我们的log来说:

  • 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。(^表示以什么开头,$表示以什么结尾)。



Comments

Content