該詳細的教程說明瞭如何使用Linux中的Nix Package Manager進行諸如安裝,刪除,更新和升級軟件包之類的軟件包管理操作。
我們將以簡短的介紹開始本指南,然後是常用的Nix命令,其中包含示例。
目錄
NIX是一款軟件包管理器,可以使安裝和管理軟件在Linux和Unix系統上簡單可靠。它解決了常見問題,例如軟件衝突,並確保每個軟件安裝都是可預測且安全的。
使用Nix,您可以在計算機上具有不同版本的程序,而無需它們彼此干擾。這意味著您可以更新,添加或刪除軟件,而不必擔心破壞任何內容。
Nix對其處理軟件的處理方式很聰明。它可以跟踪每個程序需要運行的所有部分。這樣,當您安裝程序時,它不會弄亂另一個程序。如果新軟件更新出現問題,NIX可以讓您輕鬆地回到以前的樣子。
NIX軟件包管理器不僅適合個人用戶,而且適合開發人員和管理服務器的人員。它通過確保所有人都使用相同的軟件設置來幫助每個人在同一頁面上。將軟件從一台計算機移動到另一台計算機時,這會減少驚喜。
尼克斯(Nix)有大量的軟件可供選擇,並且這些軟件都是由用戶社區維護的。無論您是獨自工作還是與團隊一起工作,這都是管理軟件的可靠選擇。
有關NIX的更多詳細信息,請參閱我們以前的指南:
確保您已經安裝了NIX軟件包管理器。如果您尚未安裝NIX,請參閱下面給出的NIX安裝指南。
設置NIX軟件包管理器後,您可以開始使用它來立即安裝和管理應用程序。
尼克斯有許多命令。軟件包管理的主要命令是Nix-env 。此命令用於列出,安裝,更新,回滾,刪除,查詢軟件包。讓我們查看一些命令。
提示:如果您還不知道,則不需要成為root或sudo用戶就可以使用NIX進行所有軟件包管理操作。
NIX頻道在NIX軟件包管理器生態系統中起著重要作用。
NIXPKGS存儲庫包含所有軟件包,NIXOS模塊和表達式。雖然可以直接從Nixpkgs的主分支直接安裝軟件包,但這種方法可能會冒險,因為在徹底測試之前,將提交合併到主機中。
通道代表Nixpkgs中最新的“驗證” GIT委託。每個渠道都有自己對“驗證”含義的定義。
驗證新的Git提交時,相應的頻道將更新。頻道用戶從二進制緩存的經過驗證的提交和二進制軟件包中受益。
用簡單的單詞來說明這一點, NIX通道只是一個指向一個包含一組Nix表達式和清單的地方。
有幾個渠道,它們可以大致分為穩定且不穩定的渠道,以及大型和小型渠道:
穩定/不穩定:
大/小:
默認情況下,安裝nix時,將自動添加nixpkgs頻道。
訂閱的頻道列表存儲在〜/.nix-enannels文件中。您可以通過查看其內容來驗證它。
$ cat〜/.nix-nix通道 https://nixos.org/channels/nixpkgs-unstable <strong>nixpkgs</strong>
如您所見,NIX默認情況下添加了NixPKGS頻道。
您也可以手動在系統中添加通道,如下所示。
$ nix-channel -add https://nixos.org/channels/nixos-23.11
官方頻道在https://nixos.org/channels上列出。
訂閱(添加)頻道後,您應該更新頻道列表,以獲取最新的可用NIX表達式:使用命令:
$ nix-channel-更新
此命令將更新所有頻道。如果要更新特定的頻道,例如nixos-23.11,則命令是:
$ nix-channel-上升尼克斯23.11
要在標準輸出上打印所有訂閱渠道的名稱和URL,請運行:
$ nix-channel-列表
樣本輸出:
<strong>nixpkgs</strong> https://nixos.org/channels/nixpkgs-unstable <strong>Nixos</strong> https://nixos.org/channels/nixos-23.11
如您所知,現在我添加了兩個頻道,即Nixpkgs-unstable和Nixos-23.11 。請注意,Nixpkgs和Nixos只是Nixpkgs- Unstable和Nixos-23.11的別名。
要刪除訂閱的通道,例如Nixos-23.11 ,只需運行:
$ nix-channel-remove nixos-23.11
刪除頻道後,使用命令更新頻道列表:
$ nix-channel-更新
Nix-env --Query命令在NIX軟件包管理器中提供有關軟件包的信息。
目的:
Nix-env - 標準操作顯示有關以下信息的信息:
它僅打印有關其符號名稱匹配指定名稱之一的派生的信息。
標誌和選項:
可以使用Nix-env -Query命令的常見標誌和選項是:
要查看訂閱頻道中可用軟件包的列表,請運行:
$ nix-env - Query-可用
或不久:
$ nix -env -qa
在這裡,選項-Q指示查詢操作,-a表示所有可用的(即,可安裝)軟件包。
樣本輸出:
0AD-0.0.26 0AD-DATA-0.0.26 0Verkill-Unstable-2011-01-13 0x Unstable-2022-07-11 0xproto-1.603 0xtools-1.2.4 1om-1.0 1Password-8.10.27 1Password-8.10.28-21.Beta 1Password-cli-2.26.1 2048-Cli-Unstable-2019-12-10 2048-Cli-Unstable-2019-12-10 2048-ens-ensinal-Unstable-2022-06-13 20Kly-1.5.0 2BWM-0.3 2FA-1.2.0 3270font-3.0.1 389-DS-BASE-2.4.3 3dpong-0.5 3llo-1.3.1 3mux-1.1.0 3Proxy-0.9.4 4th-3.64.1 [...]
如果要查詢特定軟件包,則命令將是:
$ nix -env -qa firefox
輸出:
firefox-115.9.1esr Firefox-124.0.1 Firefox-124.0.1 Firefox-124.0.1 Firefox-125.0b3 Firefox-125.0b3
您還可以使用以下命令搜索特定軟件包。
$ nix -env -qap | Grep Python3-3
樣本輸出:
[...] nixpkgs.python312 python3-3.12.2 nixpkgs.python313 Python3-3.13.0a5 nixpkgs.python313full python3-3.13.0a5 nixpkgs.python39 python3-3.9.19 nixpkgs.python39full python3-3.9.19
您可以使用正則表達式查詢/列表軟件包。以下是正則表達式的一些示例。
鉻
匹配包裝名稱鉻和任何版本。
Chromium-123.0.6312.86
匹配包裝名稱鉻和版本123.0.6312.86。
例子:
$ NIX-ENV -QA CHROMIUM-123.0.6312.86
gtk \\
匹配軟件包名稱GTK 。角色必須使用後斜線逃脫,以防止其解釋為量詞,並且必須依次與另一個後斜切一起逃脫後斜線,以確保外殼將其通過。
。\*
匹配任何軟件包名稱。這是大多數命令的默認值。
'。*拉鍊。*'
匹配包含字符串zip的任何軟件包名稱。注意點:'*zip*'不起作用,因為在正則表達式中,字符*被解釋為量詞。
'。*(Firefox | Chromium)。*'
匹配任何包含琴弦Firefox或Chromium的包裝名稱。
要列出所有已安裝的軟件包,只需運行:
$ nix -env -q
樣本輸出:
NIX-2.21.1
由於它是一個新的系統,因此我們的系統僅顯示NIX軟件包管理器。
也可以看到可用軟件包的狀態。查看以下示例。
$ NIX -ENV -QAS GCC
樣本輸出:
IPS GCC-13.2.0
在這裡,“ i”表示已安裝了指定的軟件包,“ p”表示該軟件包存在於我們的系統上,“ S”表示該軟件包有所謂的替代品。
如果未安裝GCC軟件包,您會看到:
-PS GCC-13.2.0
在Nixos中,所有軟件包將存儲在Nix Store中,通常是目錄/Nix /Store 。
要安裝軟件包,只需運行:
$ nix-env-安裝GCC
或(不久),
$ nix -env -i gcc
上面的命令將安裝最新的可用GCC軟件包。
上述命令的樣本輸出將是:
安裝“ GCC-13.2.0” 這3條路徑將被獲取(1.58 MIB下載,7.24 MIB打開包裝): /nix/store/3cfxjb2nkjkfiv0dq54kkfy5ysjnfs3k-gcc-13.2.0-checksum /nix/store/4i3ml2pzzgjwas18w31zzhn9f41qyshy-gcc-13.2.0-info /NIX/STORE/SMQ6F1JZ9A5L6L5YJIS4S85MQ01XWW33-GCC-13.2.0-MAN 複製路徑'/nix/store/4i3ml2pzzgjwas18w31zzhhn9f41qyshy-gcc-13.2.0-info'來自'https://cache.nixos.org'... 複製路徑'/nix/store/SMQ6F1JZ9A5L6L5YJIS4S85MQ01XWW33-GCC-13.2.0-MAN'來自https://cache.nixos.org'... 複製路徑'/nix/store/3cfxjb2nkjkfiv0dq54kkfy5ysjnfs3k-gcc-13.2.0-checksum'來自https://cache.nixos.org'... 建築物'/nix/store/xx629d9kbbdnnsyf4ihzhlmalfz6nm3g-user-environment.drv'...
讓我們檢查是否安裝了GCC是否使用命令:
$ gcc -v
樣本輸出:
使用內置規格。 collect_gcc = GCC collect_lto_wrapper =<strong><mark> /nix/store/RQGA421D43Q40BLRRGMIW820P01A4NBA-GCC-13.2.0</mark> /libexec/gcc/x86_64-inknown-linux-gnu/13.2.0/lto-wrapper 目標:x86_64-Inninnown-linux-gnu Configured with: ../gcc-13.2.0/configure --prefix=/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-gcc-13.2.0 --with-gmp-include=/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-gmp-6.3.0-dev/include --with-gmp-lib=/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-gmp-6.3.0/lib --with-mpfr-include=/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-mpfr-4.2.1-dev/include --with-mpfr-lib=/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-mpfr-4.2.1/lib --with-mpc=/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-libmpc-1.3.1 --with-native-system-header-dir=/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-glibc-2.38-44-dev/include --with-build-sysroot=/ --with-gxx-include-dir=/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-gcc-13.2.0/include/c /13.2.0/ -program-program-prefix = - enable-lto - 可disable-libstdcxx-pch- without-included-getText - with-system-zlib--啟動靜態 - 可穩定 - 可啟用語言= c,c,c,c-- disable-disable-multilib-- disable-multilib - enable-plugin-plugin-disable-libcc11-disable-disable-libcc11 --with-isl=/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-isl-0.20 --disable-bootstrap --build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu --target=x86_64-unknown-linux-gnu 線程模型:POSIX 支持的LTO壓縮算法:Zlib <strong>GCC版本13.2.0(GCC)</strong></strong>
正如您在上述輸出中註意到的那樣,GCC已在一個名為RQGA421D43Q40BLRGMIW820P01A4NBA-GCC-13.2.0 ufter /nix /store的子目錄中。
在這裡,我們將目錄RQGA421D43Q40BLRRGMIW820P01A4NBA-GCC-13.2.0稱為唯一標識符。該子目錄保留了GCC軟件包的所有必需依賴項和庫。
如果安裝了GCC的另一個版本,NIX將創建一個新的子目錄,例如/nix/store/rfhfyuq..43d8jfuh-gcc-xxx ,並在該目錄中安裝GCC。這樣,這兩個版本的GCC就不會彼此衝突。
NIX軟件包管理器的另一個值得注意的功能是,您可以在不安裝系統上測試軟件包。請參閱以下指南,以了解如何在不安裝軟件包的情況下測試軟件包。
Nix-Shell允許您為每個項目創建自定義的開發環境,並配有所有必要的工具和庫。它是NIX軟件包管理器的一部分。
要了解如何創建可再現和孤立的開發環境,請參閱以下指南:
要將軟件包升級到下一個可用版本,只需運行:
$ nix-env-升級vim
或者,只是:
$ nix -env -u vim
上面的命令僅在有“較新”版本時升級VIM軟件包。
另外,您可以通過運行以下命令立即升級所有已安裝的軟件包:
$ nix -env -u
請注意,以下說明專門針對Nixos用戶。
更新NIXOS頻道
首先,更新您的頻道,以確保您具有最新的軟件包定義。您可以使用以下命令來執行此操作:
$ nix-channel-更新
此命令更新您要訂閱的所有通道,包括包含系統的軟件包和配置定義的NIXOS頻道。
應用更新
頻道更新後,您將更新應用於系統。這是通過使用頻道的最新軟件包重建系統配置來完成的。為此,運行:
$ sudo nixos-rebuild開關
Nixos-Rebuild Switch命令使用頻道中的最新軟件包,根據您的配置文件(/etc/nixos/configuration.nix)重建系統的配置。重建後,它立即切換到新配置。
其他提示:
請記住,由於聲明性配置和NIX的可重複性,尼克斯的更新通常是平滑且經過良好測試的。始終確保您的系統配置文件是最新的,並且可以控製版本,以獲得無縫的更新體驗。
這是NIX軟件包經理的絕妙功能。在我們要查看如何回滾軟件包之前,讓我們了解哪些配置文件,用戶環境和一代。
在NIX中,配置文件,用戶環境和世代是相關的概念,可以安全且可重複地進行管理和配置。
配置文件是針對特定目的或用戶的軟件包和配置的集合。配置文件允許多個用戶可以進行自定義設置,而不會相互影響。您可以在不同的配置文件之間切換,從而有效地管理各種環境或一組應用程序。
配置文件有兩種主要類型:
用戶環境是在NIX商店中安裝的一組特定的軟件包及其依賴項(例如,/nix/store/3aw2pdyx2jfc...--user -env)。
每當您使用Nix-env安裝,升級或刪除軟件包時,都會創建它。用戶環境本質上是軟件包本身,它存儲在Nix Store中,並以唯一的加密哈希作為目錄名稱。
用戶環境通過符號鏈接鏈接到用戶配置文件,從而使不同的用戶具有不同的配置而不會干擾。
一代是您在特定時間點的用戶環境(您已安裝的軟件包集合)的快照。每當您使用Nix-env安裝,升級或刪除軟件包時,就會創建新一代。
每個一代都以唯一的加密哈希名稱(例如/nix/store/3aw2pdyx2jfc...-user-user-env)存儲在/nix/store目錄中。在/nix/var/nix/profiles(例如默認為2-鏈接,默認3鏈接)中有符號鏈接,指向這些生成目錄。
幾代人的關鍵優點是,它們允許您使用nix-env-rollback和nix-env-switch-switch-generation命令來輕鬆地回滾或在不同的軟件包配置之間切換。
用簡單的話說這一點:
這種方法促進了系統的可靠性,可重複性,以及在不冒險當前設置的情況下安全實驗不同的包裝配置的能力。
要查看可用的幾代人的列表:
$ nix-env-列表生成
此命令列出了您當前個人資料的所有可用世代。輸出將顯示生成編號,NIX商店中的路徑,並指示當前有活性的生成。
示例輸出:
1 2024-04-01 15:06:49 2 2024-04-01 15:17:14 3 2024-04-01 15:56:46(當前)
您安裝了一個軟件包,但是它沒有用或無法正常工作。您需要同一軟件包的較低版本。你會怎麼做?簡單的。只需使用命令回滾至以前的工作版本:
$ nix-env-滾動
此命令將您當前的用戶環境恢復為上一代。例如,如果您目前正在第三代並運行Nix-env-Rollback,則它將切換為2代。
我們可以使用命令在不同世代之間切換:
$ nix-env-開關生成<no></no>
此命令使您可以切換到特定的一代。例如,即使這不是上一代,nix-env -switch-env-generation 2也會將您的用戶環境切換為2代。
總而言之,這些世代提供了一種管理和回滾軟件包配置的方法。 - 列表生成向您展示了哪些世代可用,nix-env -rollback命令是一種撤消最後更改的方便方式, - 開關生成可以讓您選擇特定的一代。
這種一代管理方法通過允許您輕鬆恢復不良更改或測試新配置而不會影響當前設置來促進系統可靠性。
要卸下ininstalla軟件包,運行:
$ nix -env -e gcc
上面的命令將從您的系統中卸載稱為GCC的軟件包。
您可以刪除多個軟件包,如下所示。
$ nix -env -e gcc vim
樣本輸出:
卸載“ VIM-9.1.0148' 卸載“ GCC-13.2.0” 建築路徑(S)'/nix/store/mxpikbq3l08379h8ik8mrj3fcw6mh6y4-user-environment' 在用戶環境中創建了6個符號鏈接
在NIX中,當您使用Nix-env更新(-U)或刪除(-e)程序時,系統實際上並未從NIX Store(即/nix/store/Directory)刪除舊版本。相反,它為您的個人資料提供了新的設置,而無需鏈接到刪除程序。換句話說,只有符號鏈接將從您的個人資料中刪除。
但是,由於我們無法在沒有磁盤空間的情況下不斷添加新程序,因此Nixos可以清理名為垃圾收集的未使用程序。垃圾收集器擺脫了不再需要的程序或其版本(幾代)的程序。
但是,如果您的設置的任何舊版本仍然需要一個程序,則不會將其刪除。此功能對於允許您在需要時返回以前的設置至關重要。
為了幫助垃圾收集器完成工作,最好清除不再使用的舊版本。您可以做到這一點:
刪除所有舊版本,除了您的個人資料中的當前版本:
$ nix-env-舊生成
刪除您不再需要的特定版本,例如版本10、11和14:
$ nix-env-脫落生成10 11 14
刪除超過30天的版本:
$ nix-env-降低生成30d
清理舊版本後,運行垃圾收集器以刪除未使用的程序:
$ NIX商店-GC
您可以在實際運行之前檢查垃圾收集器將刪除哪些文件:
$ NIX商店-GC-Print Dead
並查看將保留哪些文件:
$ NIX商店-GC- Print-Live
還有一個方便的工具,用於清潔,nix-Collect-garbage,可以一次刪除每個配置文件中的所有舊版本。將其與-d選項:
$ nix-Collect-garbage -d
該命令是通過擺脫舊版本然後運行垃圾收集器來清除不需要的程序來整理系統的簡便方法。
示例輸出:
尋找垃圾收集器根... 刪除垃圾... 刪除'/nix/store/s4jr4dc9gghldr3xza23rw0gm9kp21kl-nix-prefetch-scripts.drv' 刪除'/nix/store/km2gyzlvs9vkrr52wxfyhinv4r52ksrj-nix-prefetch-bzr.drv' 刪除'/nix/store/7MI73SDC1P349VMPB5NYXSRV8YK5HLY-BAZAAR-2.7.0.0.drv' [...] 刪除'/nix/store/8CKMCS9HX1QM0YXDNV892VRVX49ZM1SQ-SETUP-HOK-2.0.SH'' 刪除'/nix/store/垃圾' 刪除未使用的鏈接... 注意:當前硬鏈接保存-0.00 MIB 1447年已刪除的商店路徑,12.65 MIB釋放
這實際上將刪除卸載的軟件包。
您應該定期運行此命令,以擺脫系統中未使用的軟件包。
這是NIX軟件包管理器命令的整潔作弊表。打印並將其保持在桌子旁邊以方便參考。
行動 | 命令 | 例子 |
---|---|---|
安裝軟件包 | nix-env -i |
nix -env -i firefox |
卸載包 | nix-env -e |
nix -env -e Firefox |
搜索軟件包 | nix -env -qap | nix -env -qap python |
更新包 | nix-env -u |
nix -env -u firefox |
列表安裝的軟件包 | nix -env -q | nix -env -q |
回滾變化 | nix-env-Rollback | nix-env-Rollback |
垃圾收集 | nix-Collect-garbage -d | nix-Collect-garbage -d |
該作弊表涵蓋了您使用NIX管理軟件包的基本命令,為入門和維護系統提供了直接的指南。
這是關於NIX軟件包管理器的最常見問題(FAQ)。
問:什麼是尼克斯?答:NIX是Linux和UNIX系統的強大軟件包管理器,專注於可重複性,可靠性和便攜性。它允許用戶輕鬆地在不同版本的軟件及其依賴項之間安裝,管理和切換。
問:如何使用Nix安裝軟件包?答:要安裝軟件包,請使用nix -env -i命令,然後使用軟件包名稱。例如,nix -env -i Firefox安裝Firefox Web瀏覽器。
問:如何卸載包裝?答:要卸載軟件包,請使用nix -env -e命令,然後使用軟件包名稱。例如,nix -env -e雷鳥卸載了雷鳥電子郵件客戶端。
問:如何搜索可用的軟件包?答:要搜索軟件包,請使用nix -env -qap 。例如,要查找與Python相關的軟件包,您可以使用NIX -ENV -QAP Python。
問:我可以更新特定的軟件包嗎?答:是的,要更新特定的軟件包,請運行nix-env -u
答:要列出所有已安裝的軟件包,請使用命令nix -env -q。
問:如何列出頻道中的所有可用軟件包?答:要列出頻道中的所有可用軟件包,請運行nix -env -qa。
問:如何恢復到以前的狀態或“回滾”更改?答:Nix跟踪“世代”的變化。要回到上一代,請使用Nix-env-Rollback。您可以列出具有Nix-env-list生成的幾代人。
問:如何保持尼克斯系統清潔?答:使用nix-Collect-garbage -D刪除未使用的軟件包並免費空間。此命令清理任何配置文件未引用的軟件包。
NIX軟件包管理器提供了一種強大而靈活的方法來管理Linux和Unix系統上的軟件包。
其處理軟件包的方法可確保您可以在沒有衝突或依賴性問題的情況下安裝,更新和切換軟件之間。
儘管Nix可能有一些學習曲線,尤其是對於那些概念的新曲線,但精確,可再現的軟件包管理的好處很重要。
無論您是開發人員,系統管理員還是一個好奇的用戶,花時間學習NIX都可以大大增強您對軟件環境的控制並簡化工作流程。
就目前而言。希望您對Nix軟件包管理器的基本用法有了一個清晰的了解。我們在這裡涵蓋的內容應該足以讓您開始使用Nix。
當然,有很多命令。要了解更多NIX命令,我強烈建議您推薦下面給出的NIX官方手冊。
資源:
以上是NIX軟件包經理:初學者指南2024的詳細內容。更多資訊請關注PHP中文網其他相關文章!