<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一網(wǎng)打進(jìn)Linux下那些查找命令

          共 3125字,需瀏覽 7分鐘

           ·

          2020-08-17 18:09

          查找是我們每天都在做的事情,早上醒來(lái)找下手機(jī),出門之前查下公交,坐下之后查下資料,分析數(shù)據(jù)查下模式。

          查找文件,查找信息,查找錯(cuò)誤是應(yīng)用起來(lái)更為具體的一些工作,而Linux命令行為我們提供了很多快捷強(qiáng)大的查找方式。

          命令/可執(zhí)行程序查找

          whereis program_name: 會(huì)在系統(tǒng)默認(rèn)安裝目錄(一般是有root權(quán)限時(shí)默認(rèn)安裝的軟件)查找二進(jìn)制文件、源碼、文檔中包含給定查詢關(guān)鍵詞的文件。(默認(rèn)目錄有 /bin, /sbin, /usr/bin, /usr/lib, /usr/local/man等類似路徑)

          which program_name: 會(huì)給出所有在環(huán)境變量中的程序的路徑,一來(lái)方便知道運(yùn)行的程序在哪,二來(lái)方便修改。PATH和path,傻傻分不清

          比如vim `which sp_pheatmap.sh`就可以直接修改繪制熱圖的腳本,cp `which sp_pheatmap.sh` .可以直接把源碼拷貝到當(dāng)前目錄,省去了寫(xiě)全路徑的麻煩。

          如果運(yùn)行which bwa,系統(tǒng)返回是 /usr/bin/which: no bwa in (/home/usr/bin:/bin)則說(shuō)明bwa沒(méi)有放置在環(huán)境變量中,不可以直接寫(xiě)名字調(diào)用。

          普通文件快速定位 locate

          locate是快速查找定位文件的好方法,但其依賴于updatedb建立的索引。而updatedb一般是每天運(yùn)行一次,所以當(dāng)天的新文件是索引不到的。

          如果有根用戶權(quán)限,可以手動(dòng)運(yùn)行updatedb做個(gè)更新,然后再locate bwa。

          (個(gè)人用戶也可以構(gòu)建自己的updatedb, 使用locate在局部環(huán)境中查找。)

          普通文件多條件查找 find

          find / -name bwa可以搜索根目錄下所有名字為bwa的文件

          運(yùn)行上面的命令時(shí)會(huì)輸出很多Permission denied,是因?yàn)?作為普通用戶,無(wú)權(quán)限訪問(wèn)一些目錄,因此會(huì)有提示輸出,可以使用find / -name bwa 2>/dev/null重定向標(biāo)準(zhǔn)錯(cuò)誤到空設(shè)備,報(bào)錯(cuò)信息就被扔掉了,還不影響正常輸出。

          按時(shí)間查找

          我們開(kāi)發(fā)的在線畫(huà)圖網(wǎng)站 (www.ehbio.com/ImageGP),為了追蹤每天用戶使用時(shí)碰到了什么問(wèn)題,需要每天定時(shí)去查看日志。

          這個(gè)命令find . -name *.log -mmine -60可以查看當(dāng)前目錄下(包括所有子目錄)一小時(shí)內(nèi)修改的日志文件。再配合head就可以查看每個(gè)日志文件的內(nèi)容,以方便查看使用過(guò)程中出現(xiàn)了哪些錯(cuò)誤,如何增加提示或修改畫(huà)圖程序。

          正是有了這個(gè)利器,前臺(tái)的錯(cuò)誤提示中才出現(xiàn)了這么一句話,如果您核對(duì)后數(shù)據(jù)和參數(shù)沒(méi)問(wèn)題,請(qǐng)過(guò)1天再進(jìn)行嘗試。若是程序問(wèn)題,我們通常會(huì)在1天內(nèi)修復(fù)。

          當(dāng)然后臺(tái)數(shù)據(jù)都是用時(shí)間戳存儲(chǔ)的,而且若無(wú)報(bào)錯(cuò),數(shù)據(jù)會(huì)直接刪掉,有報(bào)錯(cuò)的才會(huì)保留日志,不會(huì)泄露用戶信息,這點(diǎn)大家不用擔(dān)心。

          現(xiàn)在畫(huà)圖網(wǎng)站越來(lái)越穩(wěn)定,出現(xiàn)的問(wèn)題越來(lái)越少,前臺(tái)提示也越來(lái)越完善,希望大家使用時(shí)多看下提示,查看日志的頻率也少了,就使用find . -name *.log -mtime -1查看從現(xiàn)在起24小時(shí)內(nèi)的日志了。

          這個(gè)也有個(gè)問(wèn)題,每次查看的時(shí)間可能不一致,會(huì)漏查或有重疊,于是在某次查看完日志后,使用touch check在當(dāng)前目錄下新建了個(gè)空文件。以后再查日志文件時(shí),只要使用find . -name *.log -newer check就可以獲得所有上次查看過(guò)之后的新日志。每次查看完之后,都做個(gè)書(shū)簽,就方便多了。

          慢慢發(fā)現(xiàn)有空日志文件, 使用find . -name *.log -newer check -size +0過(guò)濾掉, 只保留大小大于0的文件。就這樣在小伙伴聰明勤奮地維持下,我們繪圖網(wǎng)站2年間為大家提供了近30萬(wàn)次服務(wù)。(畫(huà)圖手冊(cè) | ImageGP:今天你“plot”了嗎?)


          按類型和大小查找

          如果我想得到當(dāng)前目錄下所有pngjpg照片呢?

          使用 find . \( -name "*.png" -o -name "*.jpg" \) | less

          find . -regex ".*\(\.png\|\.jpg\)$" ?

          find . -type f -size +100G可以獲取大小超過(guò)100G的文件。

          限制查找深度

          只看當(dāng)前目錄2層子目錄內(nèi)的文件find . -maxdepth 2 -name *.log。

          查看不是log結(jié)尾的文件find . -not -name *.log。還有更多組合操作,詳見(jiàn)find文檔 (我在群里扔了一個(gè)關(guān)于查找的問(wèn)題,結(jié)果......)。

          按文件內(nèi)容查找 grep

          一句話加速grep近30倍

          find可以查找包含某句話的文件嗎?還是拿我們的日志說(shuō)事吧,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)。

          匹配次數(shù)

          grep -c 'Bioinfo' ehbio.log可以統(tǒng)計(jì)包含Bioinfo的行數(shù)

          grep -ci 'Bioinfo' ehbio.log則會(huì)在匹配時(shí)忽略大小寫(xiě)。

          統(tǒng)計(jì)FASTA序列中的序列數(shù) grep '^>' ehbio.fa

          統(tǒng)計(jì)FASTQ序列中的序列數(shù) grep '^+$' ehbio.fq。(^表示以什么開(kāi)頭,$表示以什么結(jié)尾)。

          獲取未匹配行

          grep -v 'Bioinfo' ehbio.log,讀讀手冊(cè)(man grep),可以看到更多參數(shù)使用。

          序列提取

          假設(shè)有個(gè)基因列表文件 (ID),有個(gè)單行序列的FASTA文件 (ehbio.fa), 運(yùn)行如下命令grep -A 1 -Fw -f id ehbio.fa | grep -v -- '--'就可以批量提取序列了。

          -f id表示把id文件中的每一行作為一個(gè)匹配模式。-F表示匹配模式作為原始字符串,而非正則表達(dá)式,這是以防有特殊字符被解析。-w則表示作為一個(gè)單詞匹配,即假如id中有Sox2,那么它會(huì)匹配Sox2,也會(huì)匹配Sox21;如果加了-w,則不會(huì)匹配Sox21。

          更好的序列批量提取見(jiàn) awk的使用。

          模式匹配

          grep強(qiáng)大的功能是支持正則匹配,默認(rèn)使用基本正則表達(dá)式,-E使用擴(kuò)展的正則表達(dá)式,-P使用perl格式的正則表達(dá)式。

          比如想去掉文件中所有的空行grep -v '^$' ehbio.fa >ehbio.clean.fa;

          從公眾號(hào)文章中搜索跟文章寫(xiě)作相關(guān)的文章 grep 'writ.*' *.md (可以匹配write, writing等字);

          正則表達(dá)式就比較多了,具體可以看http://mp.weixin.qq.com/s/4lUiZ60-aXLilRk9--iQhA。

          總結(jié)

          Linux命令是生信學(xué)習(xí)的基本功,需要長(zhǎng)時(shí)間的積累和操作 (更多教程點(diǎn)擊下圖第一排第一個(gè))。

          ?? 生物信息之程序?qū)W習(xí)

          往期精品(點(diǎn)擊圖片直達(dá)文字對(duì)應(yīng)教程)


          后臺(tái)回復(fù)“生信寶典福利第一波”或點(diǎn)擊閱讀原文獲取教程合集

          瀏覽 41
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久久国产综合 | 青青青青青操久免费观看电视剧 | 夜夜嗨免费视频 | 日韩免费视频在线观看 | 美女黄页网站 |