最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux查看系統(tǒng)已安裝軟件的多種方法

 更新時間:2026年03月13日 09:49:28   作者:Jinkxs  
在?Linux?系統(tǒng)中,查看已安裝的軟件包是一項基礎但極其重要的技能,無論是系統(tǒng)管理員、開發(fā)人員,還是普通用戶,掌握如何查詢當前系統(tǒng)上已安裝的軟件,都能幫助我們更好地管理環(huán)境,本文將從多個維度深入探討?Linux?下查看已安裝軟件的方法,需要的朋友可以參考下

在 Linux 系統(tǒng)中,查看已安裝的軟件包是一項基礎但極其重要的技能。無論是系統(tǒng)管理員、開發(fā)人員,還是普通用戶,掌握如何查詢當前系統(tǒng)上已安裝的軟件,都能幫助我們更好地管理環(huán)境、排查依賴沖突、進行安全審計或遷移配置。本文將從多個維度深入探討 Linux 下查看已安裝軟件的方法,涵蓋主流發(fā)行版(如 Ubuntu/Debian、CentOS/RHEL、Fedora、Arch Linux 等)的命令行工具、圖形界面方式、編程接口調(diào)用(含 Java 示例)、自動化腳本編寫、輸出格式處理等內(nèi)容,并輔以 mermaid 圖表和實用外鏈,助你全面掌握這一核心技能。

一、為什么需要查看已安裝軟件?

在深入技術細節(jié)之前,我們先明確“為什么要查看已安裝軟件”。

  • ? 系統(tǒng)維護:定期檢查已安裝軟件可避免冗余包堆積,釋放磁盤空間。
  • ?? 安全審計:確認是否存在過時或存在漏洞的軟件包。
  • ?? 環(huán)境遷移:備份當前軟件列表,便于在新機器上快速重建相同環(huán)境。
  • ?? 依賴管理:了解某個軟件是否已安裝,避免重復安裝或解決依賴缺失問題。
  • ?? 合規(guī)性檢查:企業(yè)環(huán)境中需確保只安裝授權或合規(guī)軟件。

小貼士:在生產(chǎn)環(huán)境中,建議將軟件清單納入版本控制或配置管理系統(tǒng)(如 Ansible、Puppet),實現(xiàn)自動化追蹤。

二、不同 Linux 發(fā)行版的包管理器概覽

Linux 世界百花齊放,不同發(fā)行版采用不同的包管理系統(tǒng)。以下是主流發(fā)行版及其對應的包管理器:

發(fā)行版系列包管理器命令軟件包格式
Debian / Ubuntuapt, dpkg.deb
Red Hat / CentOSyum, dnf, rpm.rpm
Fedoradnf, rpm.rpm
openSUSEzypper, rpm.rpm
Arch Linuxpacman.pkg.tar.zst
Gentooemerge源碼編譯

我們將分別介紹它們?nèi)绾尾榭匆寻惭b軟件。

三、Debian / Ubuntu 系統(tǒng):APT 與 DPKG

1. 使用dpkg -l

dpkg 是底層的 Debian 包管理工具,可列出所有已安裝的 .deb 包:

dpkg -l

輸出示例:

ii  vim          2:8.2.3995-1ubuntu2.4  amd64  Vi IMproved - enhanced vi editor
ii  curl         7.81.0-1ubuntu1.10    amd64  command line tool for transferring data with URL syntax

其中:

  • ii 表示“已安裝且配置完成”
  • 第二列為包名
  • 第三列為版本號
  • 第四列為架構(gòu)
  • 第五列為簡要描述

2. 使用apt list --installed

更現(xiàn)代的方式是使用 apt 命令:

apt list --installed

該命令輸出更簡潔,適合腳本處理:

vim/now 2:8.2.3995-1ubuntu2.4 amd64 [installed,local]
curl/now 7.81.0-1ubuntu1.10 amd64 [installed,local]

3. 搜索特定軟件

若只想查找某個軟件是否安裝:

dpkg -l | grep nginx
apt list --installed | grep python3

4. 導出軟件列表

備份當前環(huán)境非常有用:

dpkg --get-selections > installed_packages.txt

恢復時:

sudo dpkg --set-selections < installed_packages.txt
sudo apt-get dselect-upgrade

四、RHEL / CentOS / Fedora:YUM、DNF 與 RPM

1. 使用rpm -qa

rpm 是 Red Hat 系列的基礎包管理器:

rpm -qa

輸出示例:

vim-enhanced-8.0.1763-16.el7_9.x86_64
curl-7.29.0-59.el7_9.1.x86_64

可結(jié)合 grep 過濾:

rpm -qa | grep httpd

2. 使用yum list installed(舊版)

在 CentOS 7 及更早版本中:

yum list installed

3. 使用dnf list installed(新版)

Fedora 和 RHEL 8+ / CentOS Stream 推薦使用 dnf

dnf list installed

輸出更結(jié)構(gòu)化:

Installed Packages
Name         Version            Arch   Repository
vim-enhanced 2:8.2.3755-1.fc36  x86_64 @updates
curl         7.82.0-7.fc36      x86_64 @updates

4. 導出為文件

rpm -qa > installed_rpm_packages.txt
dnf list installed > dnf_installed_list.txt

五、openSUSE:ZYPPER

openSUSE 使用 zypper 作為主要包管理器:

zypper se --installed-only

或簡寫:

zypper search -i

更詳細的列表:

zypper packages --installed-only

導出:

zypper packages --installed-only > suse_installed.txt

六、Arch Linux:PACMAN

Arch 用戶使用 pacman

pacman -Q

僅顯示包名和版本:

vim 8.2.4840-1
curl 7.83.1-1

查看詳細信息:

pacman -Qi vim

導出所有包:

pacman -Qq > arch_packages.txt

七、跨平臺通用方法:Snap、Flatpak、AppImage

除了系統(tǒng)原生包管理器,現(xiàn)代 Linux 也支持通用打包格式:

1. Snap

snap list

輸出:

Name    Version    Rev    Tracking       Publisher   Notes
code    1.78.2     123    latest/stable  vscode?     classic

2. Flatpak

flatpak list

3. AppImage

AppImage 無需安裝,通常放在 ~/Applications~/bin,無統(tǒng)一管理命令,需手動管理。

八、可視化 mermaid 圖表:Linux 包管理器生態(tài)關系圖

下面是一個展示不同發(fā)行版與其包管理器之間關系的圖表:

此圖展示了主流發(fā)行版與其對應的包管理器及包格式之間的層級關系,有助于理解整個 Linux 軟件分發(fā)生態(tài)。

九、Java 代碼示例:通過 Runtime 執(zhí)行命令獲取已安裝軟件列表

有時我們需要在 Java 應用中動態(tài)獲取系統(tǒng)已安裝的軟件信息,比如用于環(huán)境檢測、日志記錄或配置同步。以下是一個完整的 Java 示例程序,它會根據(jù)當前操作系統(tǒng)類型執(zhí)行相應的 shell 命令,并輸出結(jié)果。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class LinuxPackageChecker {
    public static void main(String[] args) {
        System.out.println("?? 正在檢測當前系統(tǒng)并獲取已安裝軟件列表...");
        String os = System.getProperty("os.name").toLowerCase();
        if (!os.contains("linux")) {
            System.err.println("? 當前系統(tǒng)不是 Linux,無法執(zhí)行包管理命令。");
            return;
        }
        String packageManagerCmd = detectPackageManager();
        if (packageManagerCmd == null) {
            System.err.println("??  未識別到支持的包管理器。");
            return;
        }
        System.out.println("? 檢測到包管理器命令:" + packageManagerCmd);
        List<String> installedPackages = executeCommand(packageManagerCmd);
        if (installedPackages.isEmpty()) {
            System.out.println("?? 未獲取到任何已安裝軟件。");
        } else {
            System.out.println("?? 已安裝軟件數(shù)量:" + installedPackages.size());
            System.out.println("?? 前 10 個軟件包:");
            installedPackages.stream().limit(10).forEach(System.out::println);
        }
    }
    private static String detectPackageManager() {
        // 嘗試執(zhí)行各包管理器命令,看哪個存在
        String[] commands = {
            "dpkg -l",           // Debian/Ubuntu
            "rpm -qa",           // RHEL/CentOS/Fedora
            "pacman -Q",         // Arch
            "zypper search -i",  // openSUSE
            "apt list --installed" // Modern Debian/Ubuntu
        };
        for (String cmd : commands) {
            try {
                ProcessBuilder pb = new ProcessBuilder("/bin/sh", "-c", "command -v " + cmd.split(" ")[0]);
                Process process = pb.start();
                BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
                String line = reader.readLine();
                if (line != null && !line.trim().isEmpty()) {
                    return cmd; // 返回第一個可用的命令
                }
            } catch (Exception e) {
                // 忽略異常,繼續(xù)嘗試下一個
            }
        }
        return null;
    }
    private static List<String> executeCommand(String command) {
        List<String> output = new ArrayList<>();
        try {
            ProcessBuilder pb = new ProcessBuilder("/bin/sh", "-c", command);
            Process process = pb.start();
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                output.add(line.trim());
            }
            int exitCode = process.waitFor();
            if (exitCode != 0) {
                System.err.println("??  命令執(zhí)行失敗,退出碼:" + exitCode);
            }
        } catch (Exception e) {
            System.err.println("? 執(zhí)行命令時發(fā)生異常:" + e.getMessage());
            e.printStackTrace();
        }
        return output;
    }
}

運行說明:

  1. 確保在 Linux 系統(tǒng)下運行。
  2. 編譯:javac LinuxPackageChecker.java
  3. 運行:java LinuxPackageChecker

輸出示例:

?? 正在檢測當前系統(tǒng)并獲取已安裝軟件列表...
? 檢測到包管理器命令:dpkg -l
?? 已安裝軟件數(shù)量:1852
?? 前 10 個軟件包:
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version      Architecture Description
+++-==============-============-============-=================================
ii  adduser        3.118ubuntu2 all          add and remove users and groups
ii  apt            2.4.8        amd64        commandline package manager
ii  base-files     12ubuntu4.4  amd64        Debian base system miscellaneous f
...

進階建議:

  • 可封裝為工具類供其他模塊調(diào)用。
  • 支持異步執(zhí)行,避免阻塞主線程。
  • 增加超時機制防止命令卡死。
  • 結(jié)果可序列化為 JSON 供 API 返回。

十、進階技巧:過濾、排序、統(tǒng)計與導出

1. 按名稱排序

dpkg -l | sort -k2
rpm -qa | sort

2. 統(tǒng)計安裝數(shù)量

dpkg -l | wc -l   # 注意包含標題行
dpkg -l | grep ^ii | wc -l  # 僅統(tǒng)計已安裝的

rpm -qa | wc -l

3. 導出為 CSV 格式(適用于腳本處理)

dpkg-query -W -f='${Package},${Version},${Architecture}\n' > packages.csv

輸出:

vim,2:8.2.3995-1ubuntu2.4,amd64
curl,7.81.0-1ubuntu1.10,amd64

4. 僅顯示包名(無版本)

dpkg --get-selections | awk '{print $1}'
rpm -qa --queryformat '%{NAME}\n'

十一、自動化腳本:一鍵導出 & 對比環(huán)境差異

以下是一個 Bash 腳本,用于自動檢測系統(tǒng)類型并導出軟件列表:

#!/bin/bash

echo "?? 開始導出已安裝軟件列表..."

OUTPUT_FILE="installed_packages_$(date +%Y%m%d_%H%M%S).txt"

if command -v dpkg &> /dev/null; then
    echo "?? 檢測到 Debian/Ubuntu 系統(tǒng)"
    dpkg -l > "$OUTPUT_FILE"
elif command -v rpm &> /dev/null; then
    echo "?? 檢測到 RHEL/CentOS/Fedora 系統(tǒng)"
    rpm -qa > "$OUTPUT_FILE"
elif command -v pacman &> /dev/null; then
    echo "?? 檢測到 Arch Linux 系統(tǒng)"
    pacman -Q > "$OUTPUT_FILE"
elif command -v zypper &> /null; then
    echo "?? 檢測到 openSUSE 系統(tǒng)"
    zypper search -i > "$OUTPUT_FILE"
else
    echo "? 未識別系統(tǒng)類型"
    exit 1
fi

echo "? 已保存至 $OUTPUT_FILE"
ls -lh "$OUTPUT_FILE"

保存為 export_packages.sh,賦予執(zhí)行權限:

chmod +x export_packages.sh
./export_packages.sh

十二、常見問題與解決方案

問題1:dpkg -l輸出太多,怎么找特定軟件?

? 解決方案:使用 grep

dpkg -l | grep -i firefox

-i 表示忽略大小寫。

問題2:rpm -qa顯示的包名太亂,如何按字母排序?

? 解決方案:

rpm -qa | sort

問題3:想查看某個包是從哪個倉庫安裝的?

? 在 dnf 中:

dnf info <package_name>

apt 中:

apt show <package_name>

問題4:誤刪了某個包,如何找回?

? 使用歷史記錄:

# Ubuntu/Debian
cat /var/log/apt/history.log

# CentOS/Fedora
cat /var/log/dnf.log

十三、構(gòu)建自己的軟件清單管理系統(tǒng)(思路)

如果你管理多臺服務器,可以考慮構(gòu)建一個集中式的“軟件資產(chǎn)清單系統(tǒng)”,基本架構(gòu)如下:

功能包括:

  • 自動采集每臺機器的軟件列表
  • 版本對比(高亮過期包)
  • 安全漏洞關聯(lián)(對接 CVE 數(shù)據(jù)庫)
  • 變更歷史追蹤
  • 導出與導入功能

可用 Python + Flask + SQLite 快速搭建原型,或集成到現(xiàn)有監(jiān)控系統(tǒng)(如 Zabbix、Prometheus + Grafana)。

十四、最佳實踐建議

  1. 定期導出清單:建議每月或每次重大更新后導出一次。
  2. 版本控制:將導出文件納入 Git,便于回溯變更。
  3. 自動化比對:寫腳本比對兩份清單差異,發(fā)現(xiàn)新增/移除的包。
  4. 權限最小化:非必要不使用 root 權限執(zhí)行查詢命令。
  5. 日志記錄:重要操作應記錄到系統(tǒng)日志(如 /var/log/)。

十五、擴展閱讀:容器環(huán)境中的軟件查看

在 Docker 或 Podman 容器中,查看已安裝軟件的方法類似,但需先進入容器:

docker exec -it <container_name> /bin/bash
# 然后執(zhí)行 dpkg -l 或 rpm -qa

或者直接執(zhí)行:

docker exec <container_name> dpkg -l

對于基于 Alpine 的鏡像,使用 apk

docker exec <container_name> apk info

十六、結(jié)語

查看 Linux 系統(tǒng)中已安裝的軟件看似簡單,實則涉及眾多命令、工具和最佳實踐。無論是日常維護、故障排查,還是自動化運維、安全加固,掌握這些技能都至關重要。希望本文提供的命令示例、Java 代碼、腳本模板和架構(gòu)思路能為你帶來實質(zhì)性的幫助。

記住,Linux 的強大在于其靈活性和可組合性——你可以將簡單的命令通過管道、腳本、程序組合成強大的自動化工具。不斷實踐、積累經(jīng)驗,你會越來越得心應手!

Bonus Tip:在終端中設置別名,讓常用命令更高效!

# 添加到 ~/.bashrc 或 ~/.zshrc
alias listpkgs='dpkg -l 2>/dev/null || rpm -qa 2>/dev/null || pacman -Q 2>/dev/null'

然后只需輸入:

listpkgs | head -20

即可快速查看前 20 個包!

以上就是Linux查看系統(tǒng)已安裝軟件的多種方法的詳細內(nèi)容,更多關于Linux查看已安裝軟件的資料請關注腳本之家其它相關文章!

相關文章

  • linux手工配置ip地址詳細步驟

    linux手工配置ip地址詳細步驟

    大家好,本篇文章主要講的是linux手工配置ip地址詳細步驟,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Ubuntu部署python3.5的開發(fā)和運行環(huán)境

    Ubuntu部署python3.5的開發(fā)和運行環(huán)境

    這篇文章主要介紹了Ubuntu部署python3.5的開發(fā)和運行環(huán)境,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-01-01
  • Linux查看Hive進程的方法

    Linux查看Hive進程的方法

    在Linux系統(tǒng)中,Hive是一個基于Hadoop的數(shù)據(jù)倉庫解決方案,用于查詢和分析大規(guī)模數(shù)據(jù)集,本篇文章將介紹如何在Linux系統(tǒng)中查看Hive進程的方法,需要的朋友可以參考下
    2024-11-11
  • 在pycharm上配置遠程linux環(huán)境的實現(xiàn)步驟

    在pycharm上配置遠程linux環(huán)境的實現(xiàn)步驟

    大家好,本篇文章主要分享的是在pycharm上配置遠程linux環(huán)境的實現(xiàn)步驟,感興趣的小伙伴趕快來看一看吧,對你有幫助的話記得收藏哦
    2021-11-11
  • 在CentOS7中安裝和配置ssh

    在CentOS7中安裝和配置ssh

    這篇文章介紹了在CentOS7中安裝和配置ssh的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-12-12
  • 用rsync對網(wǎng)站進行鏡像備份實現(xiàn)步驟

    用rsync對網(wǎng)站進行鏡像備份實現(xiàn)步驟

    對系統(tǒng)管理員來說,平時的工作重心應該集中在維護系統(tǒng)正常運轉(zhuǎn),能夠正常提供服務上,這里往往牽涉到一個數(shù)據(jù)備份的問題
    2009-03-03
  • centos7下NFS使用與配置的步驟

    centos7下NFS使用與配置的步驟

    本篇文章主要介紹了centos7下NFS使用與配置的步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 6ull加載linux驅(qū)動模塊失敗解決方法

    6ull加載linux驅(qū)動模塊失敗解決方法

    大家好,本篇文章主要講的是6ull加載linux驅(qū)動模塊失敗解決方法,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 嵌入式Linux Platform驅(qū)動模型測試方式

    嵌入式Linux Platform驅(qū)動模型測試方式

    這篇文章主要介紹了嵌入式Linux Platform驅(qū)動模型測試方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • CentOS7安裝nodejs18和yarn操作實踐

    CentOS7安裝nodejs18和yarn操作實踐

    CentOS7因glibc版本低不支持Node.js18,需手動下載非官方構(gòu)建版本并配置環(huán)境變量,安裝Yarn3需啟用Corepack,若依賴glibc的包建議改用Docker或更換系統(tǒng)
    2025-10-10

最新評論

定兴县| 临西县| 上犹县| 仙居县| 卓资县| 河曲县| 屏东县| 赤峰市| 通道| 岗巴县| 杭锦后旗| 磐安县| 星座| 林甸县| 台北县| 临西县| 荔波县| 南雄市| 海伦市| 汉源县| 太和县| 大理市| 古浪县| 井研县| 乡宁县| 英德市| 那坡县| 北流市| 郸城县| 顺昌县| 聂荣县| 乌拉特后旗| 普安县| 绥滨县| 宣恩县| 鹤壁市| 闻喜县| 高唐县| 敦化市| 伊金霍洛旗| 讷河市|