linux下apt-get出現“no public key available…”解決方案

來源:互聯網
上載者:User


眾所周知,Linux雖然比Windows的安全係數要高,但是經常更新還是個好習慣(至少近期就爆出了不少關於SSL的安全性漏洞值得大家重視!),但是在Ubuntu和Debian下運行apt-get update重新整理更新源的時候卻經常遇到“There is no public key available for the following key IDs”的問題,具體表現為以下錯誤提示:

W:There is no public key available for the following key IDs: 3B4FE6ACC0B21F32,
W:There is no public key available for the following key IDs: 3B4FE6ACC0B21F32,

解決方案如下,

sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 3B4FE6ACC0B21F32

額外的,如果有如下問題,是因為加入了natty-backports源,刪掉即可

W:Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/natty-backports/main/source/Sources  404  Not Found [IP: 91.189.91.13 80],
W:Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/natty-backports/restricted/source/Sources  404  Not Found [IP: 91.189.91.13 80],
W:Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/natty-backports/universe/source/Sources  404  Not Found [IP: 91.189.91.13 80],
W:Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/natty-backports/multiverse/source/Sources  404  Not Found [IP: 91.189.91.13 80],

運行如下命令:

sudo sed -i '/natty\-backports/d' /etc/apt/sources.list{,.d/*}

目前常用的
==========
*更新本機中的資料庫緩衝:
sudo apt-get update

*尋找包含部分關鍵字的軟體包:
sudo apt-cache search <你要尋找的name>

*安裝指定的軟體:
sudo apt-get install <你要安裝的軟體包>

*下載軟體包原始碼(如果有的話):
apt-get source <你要下載的原始碼包名>


詳細的資料

=========


apt-get:

安裝和卸載------
*更新本機中的資料庫緩衝:
sudo apt-get update
最好定期更新一下使你自己機器上面的資料和伺服器(/etc/apt/sources.list列出)上面的資訊保持一致,在安裝軟體之前可以運行一下這個命令保證成功性。

*安裝軟體:
#apt-get install packagename
這裡將安裝你需要的在sources.lists中的最新的軟體包,如果有其他依賴則自動安裝相應的依賴軟體包。packagename可以是多個軟體包。
一些有用的選項:
-h  This help text.
-d  Download only - do NOT install or unpack archives
-f  Attempt to continue if the integrity check fails
-s  No-act. Perform ordering simulation
-y  Assume Yes to all queries and do not prompt
-u  Show a list of upgraded packages as well

*卸載軟體(用install):
#apt-get install packagename-
在需要卸載的包後面加上一個'-'(我沒有實驗過),當然可以apt-get install p1 p2-這樣多個命令合并了,裝p1卸p2。

*卸載軟體2:
#apt-get remove packagename
這會卸載相應的軟體,同時也會卸載依賴的部分,沒辦法指定不卸載依賴的。但是軟體的設定檔還是會留在系統中。

*完全卸載軟體包括刪除配置:
#apt-get --purge remove packagename
這樣設定檔也會被刪除。

*安裝軟體2(用remove):
#apt-get remove packagename+
這個和用install來卸載軟體的意義類似,在包名稱後面添加一個+,表示安裝。

*修複或者只安裝最新版本:
#apt-get --reinstall install packagename
這裡,如果你的軟體包被破壞了,或者你想要安裝一個最新的軟體,運行這個。

升級軟體包------
*升級軟體包1:
#apt-get -u upgrade
這裡加上-u選項列出將要升級的軟體,可能會提示有些軟體不會升級,因為可能會破壞依賴關係,更好的方法是利用apt-get dist-upgrade
你可以通過cd或者添加源地址來更新,如果你想從cd來升級,首先運行apt-cdrom把cd中的軟體添加到/etc/apt/sources源中,然後運行apt-get dist-upgrade來升級,但是因為apt-get總是使用最新版本,如果cd中的不是最新的版本,那麼也不會用到cd。

*升級軟體包2:
#apt-get -u dist-upgrade
這樣安裝的軟體前面apt-get -u upgrade安不了的也會安裝了,但個別的仍然不能安裝,例如:升級會導致需要卸載一些包,卸載這些包會導致另外的軟體不能用,所以就不升級了。

*升級軟體包3:
#apt-get -u install packagename
假設前面升級的時候packagename無法升級,那麼這個命令會升級packagename如果需要卸載默寫模組而卸載這些模組導致一些軟體無法使用,那麼乾脆把這些軟體都卸載了,然後升級,這個命令會導致packagename最終升級了。

清理沒用的包檔案------
用apt-get 安裝軟體包的時候,apt會從/etc/apt/sources.list裡面將相應的軟體包恢複出來,把它們存放在一個本地的文件庫中(/var/cache/apt/archives/)然後才開始安裝,隨著時間的增長,這將不斷地消耗硬碟的空間。

*清理所有的快取檔案:
#apt-get clean
這會清理所/var/cache/apt/archives/ 和 /var/cache/apt/archives/partial/中沒有被鎖定的檔案。當然你再次安裝軟體的時候,這個軟體又被恢複到本地文件庫中了。

*僅僅清理舊的快取檔案:
#apt-get autoclean
這會清理舊版本的/var/cache/apt/archives/ 和 /var/cache/apt/archives/partial/中的檔案。舊版本是指已經有更新的版本的軟體了,再下載的話應下載最新的而不是這箇舊版本的了。根據apt-show-versions -p可以知道哪些是舊的。

*安裝指定版本的軟體包:
# apt-get install package=version

尋找資訊--------

*尋找一個含有packagename字串的包:
#apt-cache search packagename
這樣將輸出所包含packagename字串的包。

*顯示軟體包的詳細資料:
# apt-cache show stella
這包含了軟體包許多的資訊,例如如果你已經安裝了這個軟體包,資訊裡面也會顯示。

*顯示軟體包的大致資訊:
apt-cache showpkg packagename
這會顯示大致的資訊。

*查看那些包可以升級的資訊:
$ apt-show-versions -u
這個apt-show-versions工具需要安裝一下的。

*查看當前特定軟體版本:
apt-show-versions -p packagename

*檢查packagename依賴的包:
#apt-cache depends packagename

工作相關--------

*安裝編譯原始碼需要的庫(包):
# apt-get build-dep packagename
所的原始碼包一個'Build-Depends'域,指明了從原始碼編譯這個包需要安裝的軟體。上面的命令可以下載這些包,其中'packagename'是包名。


*查看編譯一個包需要哪些其他的庫(包):
#apt-cache show packagename
如果你只是想要檢查編譯一個包需要哪些其他的包,那麼可以利用上面的命令,其中'packagename'是包名。


*下載包packagename的原始碼:
$ apt-get source packagename
這將在目前的目錄下載個檔案:*.orig.tar.gz,*.dsc,*.diff.gz。如果這個包是debian的,那麼最後一個檔案沒有,並且第一個檔案名稱裡面不包括"orig"字串。
.dsc檔案被dpkg-source使用,把原始碼包解壓到目錄 packagename-version.每一個下載的原始碼包裡面都有一個debian/目錄,這個目錄包含了用於建立.deb包的檔案。


*下載的時候自動把原始碼包編譯:
$ apt-get -b source packagename
可能是編譯成.deb包,我沒有試過。

*根據下載的原始碼建立deb包:
$ dpkg-buildpackage -rfakeroot -uc -b
如果你決定在下載的時候不建立deb包,你可以以後通過在下載的包之後建立的目錄裡面運行這個命令來建立。

*直接利用包管理器安裝包:
# dpkg -i file.deb
需要直接使用包管理器,運行這個命令來安裝包。

-------dpkg尋找

*已知軟體包中有一個檔案,根據檔案尋找軟體包:
# dpkg -S stdio.h
輸入之後,輸出如下:
libc6-dev: /usr/include/stdio.h
libc6-dev: /usr/include/bits/stdio.h
perl: /usr/lib/perl/5.6.0/CORE/nostdio.h
這在知道包中某些檔案的時候,來根據檔案尋找軟體包這種情況下非常用。

*尋找安裝在你的機器上面的軟體包:
dpkg -l

*自動安裝缺失的軟體:
# auto-apt run command
這裡,command是你要啟動並執行命令。例如 auto-apt run ./configure .當缺失依賴軟體的時候,它會詢問你安裝,方便了編譯。安裝之後會繼續運行。auto-apt需要保持一個最新的資料庫,利用這個命令進行更新:auto-apt update, auto-apt updatedb and auto-apt update-local。

--------apt-get尋找

*利用apt-file根據檔案名稱尋找相應的軟體包:
$ apt-file search filename
如果你只知道程式名字filename,那麼你可以運行這個命令,它的工作方式和 dpkg -S差不多,就是根據某個軟體包裡可能包含的檔案來尋找這個軟體包的名字。另外,它也會顯示包含這個檔案的沒有安裝的軟體包。當你編譯的時候,提示缺了什麼標頭檔的時候,利用這個很方便地確定需要裝哪些軟體包(當然利用audo-apt更方便).

*列出一個軟體包中包含的檔案:
$apt-file list packagename
這裡,apt-file是根據一個資料庫來讀取資訊的,所以需要保持資料庫是最新的。

*更新apt-file的資料庫:
# apt-file update
預設情況下,apt-file的資料庫和auto-apt是一樣的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.