購(gòu)物網(wǎng)站圖片的放大怎么做的seo網(wǎng)絡(luò)推廣教程
? 我們有的時(shí)候希望在安裝了新軟件之后保留舊版本的軟件,比如希望保留舊版本的gcc,以防以前寫的C++編譯出問(wèn)題,這時(shí)候就需要版本管理軟件update-alternatives。
? 在此之前我們需要先弄清楚,什么是ubuntu的軟件?拿C++源碼編譯的來(lái)說(shuō),其實(shí)就是編譯后得到的【可執(zhí)行文件(沒(méi)有后綴的那個(gè)東西)+它所依賴的庫(kù)(.a或者.so結(jié)尾)】,如下圖的QQ-linux
系統(tǒng)軟件的可執(zhí)行文件放在【/usr/bin】下面(通過(guò)apt-get安裝的),庫(kù)放在【/usr/lib下面】,如下圖
第三方安裝的軟件一般建議放在【/opt/】下面(如下圖1)(通過(guò)編譯源碼安裝的,編譯安裝的時(shí)候可以通過(guò)--prefix=路徑名
后綴選安裝路徑(如下圖2),一般都建議安裝在/opt/下面,方便與系統(tǒng)軟件區(qū)分開(kāi)來(lái),不選的話會(huì)安裝在/usr/local下面),第三方安裝的軟件有的結(jié)構(gòu)比較規(guī)整(下圖3),有的比較混亂(下圖4),但是都包含可執(zhí)行文件以及庫(kù)文件
? 系統(tǒng)在執(zhí)行軟件的時(shí)候是怎么操作的呢?我們這里只討論在終端中執(zhí)行軟件的操作。編譯過(guò)C++文件的人都知道,如果在cmakelist中設(shè)置了可執(zhí)行目標(biāo)的話,最后會(huì)編譯出一個(gè)可執(zhí)行文件(下圖1),當(dāng)終端在可執(zhí)行文件同級(jí)目錄的時(shí)候,就可以通過(guò)文件名進(jìn)行執(zhí)行(下圖2)。那么為什么對(duì)于cmake、gcc這種軟件,我們無(wú)論在哪里都可以執(zhí)行呢?那是因?yàn)檫@些系統(tǒng)軟件的可執(zhí)行文件目錄/usr/bin已經(jīng)被包含在系統(tǒng)環(huán)境變量PATH中了(下圖3),當(dāng)我們執(zhí)行軟件的時(shí)候,系統(tǒng)會(huì)自動(dòng)在PATH包含的路徑中去找同名的可執(zhí)行文件,就拿剛才圖1中的test來(lái)說(shuō),如果我們把~/build/加入PATH環(huán)境變量(通過(guò)export PATH=~/test/build:$PATH
實(shí)現(xiàn)),無(wú)論在哪里我們都可以執(zhí)行my_test了(下圖4)。
? 那么怎么進(jìn)行軟件版本管理呢?在剛才的討論中,我們已經(jīng)知道了執(zhí)行軟件是通過(guò)運(yùn)行可執(zhí)行文件的方式(比如通過(guò)./my_test運(yùn)行my_test),那么我們就先來(lái)看看可執(zhí)行文件,不妨看看/usr/bin下的可執(zhí)行文件(下圖1)。我們會(huì)發(fā)現(xiàn),好奇怪,為什么有的可執(zhí)行文件下面會(huì)有一個(gè)箭頭(下圖2),那是因?yàn)檫@個(gè)文件不是一個(gè)真正占內(nèi)存的文件,而是一個(gè)軟連接(跟windows里面的快捷方式差不多),它實(shí)際上指向了別的可執(zhí)行文件(下圖3)。這時(shí)候就可以想到,如果把某個(gè)軟連接的指向修改掉,讓它指向新版本的可執(zhí)行文件,是不是就可以實(shí)現(xiàn)軟件版本的切換了呢。
? 這時(shí)候終于可以請(qǐng)出我們的update-alternatives了,它的作用就是修改軟連接的指向。拿cmake舉例,這里我已經(jīng)安裝了兩個(gè)cmake,一個(gè)是系統(tǒng)自帶的cmake-3.16.3(在/usr/bin下,如下圖1,它本來(lái)的名字是cmake,這里我改了名,方便后續(xù)操作),一個(gè)是自己安裝的cmake-3.28.0(在/opt下,如下圖2),利用如下命令就可以使/usr/bin/cmake指向/usr/bin/cmake-3.16.3或者/opt/cmake-3.28.0/bin/cmake了:
sudo update-alternatives --install /usr/bin/cmake cmake /usr/bin/cmake-3.16.3 90
sudo update-alternatives --install /usr/bin/cmake cmake /opt/cmake-3.28.0/bin/cmake 100
執(zhí)行完這個(gè)操作后,可以用sudo update-alternatives --config cmake
進(jìn)行版本切換(下圖1),這里版本切換的作用就是修改可執(zhí)行文件軟連接的指向。用ls -n /usr/bin/cmake
可以看到/usr/bin/cmake指向/etc/alternatives/cmake,然后當(dāng)我們切換到cmake-3.28.0的時(shí)候可以看到/etc/alternatives/cmake指向/opt/cmake-3.28.0/bin/cmake(下圖2),當(dāng)我們切換到cmake-3.16.3可以看到/etc/alternatives/cmake指向/usr/bin/cmake-3.16.3(下圖2)。至此我們就用update-alternatives實(shí)現(xiàn)了軟件版本管理。