日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PATH和path,傻傻分不清

發(fā)布時間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PATH和path,傻傻分不清 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

習慣了Windows電腦下的所見即所得,找到程序或文件雙擊即可運行或打開;于是我們被慣得以為電腦會像人一樣聰明,給他一個名字就可以運行程序或打開文件;于是在命令行下或程序里不斷碰壁,為啥這個命令不運行了呢?

我們不能太高估電腦(或操作系統(tǒng)),不要以為只要輸入一個程序名或文件名,電腦(或操作系統(tǒng))就可以滿硬盤的去找這個文件在哪;這一來效率太低了,二來重名了怎么辦?比如有2個文件都叫“子房.txt”,一個存儲漢初三杰之張良,一個存儲被子植物生長種子的器官;可能打開前我們自己也不知道要開哪個吧。

想一下,我們在Windows下尋找文件時,是不是先打開我的電腦,然后打開D盤,打開學習目錄,再打開學習計劃.docx這個文件。即便我們從來沒有執(zhí)行過這個計劃,每天我們還是不厭其煩的一層層打開然后制定新的計劃。只是,我們忽略了這個一層層打開。

path我們一般指文件的路徑,也就是一層層打開的過程。以Linux為例:

我們要查看一個在自己家目錄下的文件?I_am_home.txt,那登錄后,直接可見:

YSX@ehbio:~$ tree . ├── I_am_home.txt └── train├── amplicon│ └── pipeline_amplicon.sh├── metagenome│ └── pipeline_metagenome.sh├── population_genomics│ └── pipeline_gatk.sh├── single_cell│ ├── Scanpy.ipynb│ └── Seurat.Rmd└── transcriptome└── pipeline_salmon.sh YSX@ehbio:~$ head I_am_home.txt I am home!

那如果想看Seurat.Rmd,怎么查看?一步步找下去就對了。

YSX@ehbio:~$ less Seurat.Rmd Seurat.Rmd: 沒有那個文件或目錄 YSX@ehbio:~$ less train/Seurat.Rmd train/Seurat.Rmd: 沒有那個文件或目錄 YSX@ehbio:~$ less train/single_cell/Seurat.Rmd

也可以一步步先做目錄切換,然后再查看

YSX@ehbio:~$ cd train YSX@ehbio:~/train$ cd single_cell/ YSX@ehbio:~/train/single_cell$ less Seurat.Rmd

那如果你這時你想運行pipeline_metagenome.sh快速分析宏基因組數(shù)據(jù)怎么辦?

YSX@ehbio:~/train/single_cell$ pipeline_metagenome.sh -bash: pipeline_metagenome.sh: 未找到命令

pipeline_metagenome.sh命令去哪兒了?上面我們都看到了,就在metagenome目錄下,為啥電腦(操作系統(tǒng))這么笨卻找不到?另外為什么運行head就可以找到?難道有一些黑魔法在里面?

確實是有一些黑魔法的,不過我們一般稱之為規(guī)則

操作系統(tǒng)為了便捷性和安全性,定義了一系列環(huán)境變量,存儲常用信息,PATH?(注意全是大寫)是其中一個。

PATH: 是存放有(可執(zhí)行)命令和程序的目錄集合;在操作系統(tǒng)接到用戶輸入的命令時,會對PATH存儲的目錄進行查找,看下是否有與用戶輸入的命令同名的文件存在,而且是從前到后一個個查找,而且是查到就停,最后查不到就報錯。(從這幾個加粗的文字,可以看到操作系統(tǒng)很懶,當然懶是好的程序員的必備屬性。)

我們先看下PATH里面存了哪些目錄?

YSX@ehbio:~/train/single_cell$ echo $PATH /usr/bin:/usr/local/bin

在我們前面輸入head命令時,操作系統(tǒng)收到回車指令后,先去看下$PATH里面有哪些目錄,然后從第一個/usr/bin開始尋找,很幸運,一下找到了/usr/bin/head文件,嘗試運行,成功。所以在這個情況下,我們輸入head等同于輸入/usr/bin/head。那這個會不會給我們一些啟發(fā)呢?

我們只要提供pipeline_metagenome.sh的路徑就可以運行了。

# 相對路徑 YSX@ehbio:~/train/single_cell$ ../metagenome/pipeline_metagenome.sh # 絕對路徑 YSX@ehbio:~/train/single_cell$ ~/train/metagenome/pipeline_metagenome.sh # 再絕對一些 YSX@ehbio:~/train/single_cell$ /home/YSX/train/metagenome/pipeline_metagenome.sh

程序可以運行了,但是不是寫起來太麻煩了?既然head可以只寫命令,系統(tǒng)就可以幫著我們?nèi)フ?#xff0c;那么我們是否也可以把/home/YSX/train/metagenome/放到PATH里面。這就是如何去設置環(huán)境變量了。

# 給原變量PATH后面加一個路徑(絕對路徑),冒號(:)分割 YSX@ehbio:~/train/single_cell$ PATH=$PATH:/home/YSX/train/metagenome/ # 導出變量,使其對系統(tǒng)(Shell)可見 YSX@ehbio:~/train/single_cell$ export PATH # 上面兩句可以合并為一句,如下: YSX@ehbio:~/train/single_cell$ export PATH=$PATH:/home/YSX/train/metagenome/ # 再次運行,可以運行了 YSX@ehbio:~/train/single_cell$ pipeline_metagenome.sh # 看下PATH存儲的目錄,多了我們的新增 YSX@ehbio:~/train/single_cell$ echo $PATH /usr/bin:/usr/local/bin:/home/YSX/train/metagenome/

這樣就新增一個目錄到環(huán)境變量里面了,可以依次繼續(xù)增加更多目錄。

YSX@ehbio:~/train/single_cell$ export PATH=$PATH:/home/YSX/train/metagenome/:/home/YSX/train/amplicon/

有時我們也會看的這樣的寫法:export PATH=my_path:$PATH,這與export PATH=$PATH:my_path有什么區(qū)別呢?

回顧下這幾個關(guān)鍵字:從前到后查到就停。寫出官話就是:PATH中越靠前的路徑優(yōu)先級越高。這有什么用處呢?

比如,一般的操作系統(tǒng)都會有系統(tǒng)的python和R,通常版本比較老,我們作為普通用戶也沒權(quán)限修改。

那怎么辦?自己裝一份,然后用自己的,這時就涉及到優(yōu)先級問題了。

假如我在/home/YSX/soft/anaconda/bin下安裝了一個python,那么我需要設置優(yōu)先調(diào)用我自己的python,設置環(huán)境變量時,我就得把/home/YSX/soft/anaconda/bin放到前面,如export PATH=/home/YSX/soft/anaconda/bin:$PATH。如果反過來寫,就/usr/bin/python優(yōu)先被調(diào)用了。

# which 常用工具,查看當前調(diào)用的程序的具體來源 YSX@ehbio:~/train/single_cell$ which python /usr/bin/python # 優(yōu)先調(diào)用自己的python YSX@ehbio:~/train/single_cell$ export PATH=/home/YSX/soft/anaconda/bin:$PATH YSX@ehbio:~/train/single_cell$ which python /home/YSX/soft/anaconda/bin/python

環(huán)境變量學會怎么設置了,關(guān)機,下班,睡覺。

第二天早上起來,打開電腦,再運行程序

YSX@ehbio:~/train/single_cell$ which python /usr/bin/python YSX@ehbio:~/train/single_cell$ pipeline_metagenome.sh -bash: pipeline_metagenome.sh: 未找到命令

結(jié)果發(fā)現(xiàn)昨天的設置都無效了,去生信寶典群里提問 “有誰對Linux比較精通?”。半晌,無人響應,敢說自己精通的不多。

后來,有好心人回復“你遇到什么問題,具體描述下?”

經(jīng)過半個小時的溝通,理清了,關(guān)鍵點:環(huán)境變量設置后失效了,怎么長期有效?

如果早這么問,估計程序都運行完了。

這時需要用到另一個規(guī)則: 登錄遠程服務器時,系統(tǒng)會自動運行~/.bash_profile里面的命令,所以把前面寫的這句話export PATH=/home/YSX/soft/anaconda/bin:$PATH:/home/YSX/train/metagenome/:/home/YSX/train/amplicon/放到文件~/.bash_profile里面就好了。

文件輸入后,不要忘記source ~/.bash_profile使設置生效(當然,關(guān)掉登錄窗口,再次登錄也可以)。

以上就是Linux系統(tǒng)的環(huán)境變量設置,Windows系統(tǒng)的環(huán)境變量擇日再推一期,喜歡的話不妨多多關(guān)注。

其它被忽略的事情

  • 軟件可執(zhí)行屬性

  • 其它環(huán)境變量

    • 環(huán)境變量PATH:

      定義可執(zhí)行程序的目錄

    • LD_LIBRARY_PATH:

      定義動態(tài)庫的目錄

    • PYTHONPATH:

      定義Python包的目錄

    • PERL5LIB:

      定義Perl模塊的目錄

  • .bashrc和.bash_profile
    • ~/.bashrc本地登錄時讀取 (文件若無,可新建)

    • ~/.bash_profile遠程登錄時讀取(文件若無,可新建)

  • 如果想在系統(tǒng)層面設置環(huán)境變量,應該寫到/etc/profile.d/custom.sh里面(文件若無,可新建)。

  • 軟件安裝

    • Linux - 命令運行監(jiān)測和軟件安裝

    • Linux - 應用Docker安裝軟件

    • Linux - Conda軟件安裝方法

    • Nature Method:Bioconda解決生物軟件安裝的煩惱

    • 手把手教你生信分析平臺搭建

    • Windows輕松實現(xiàn)linux shell環(huán)境:gitforwindows

    • Bioconda軟件安裝神器:多版本并存、環(huán)境復制、環(huán)境導出

    總結(jié)

    以上是生活随笔為你收集整理的PATH和path,傻傻分不清的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。