Làm cách nào tôi có thể liệt kê tất cả các ứng dụng được cài đặt trong hệ thống của mình?


18

Tôi biết, tôi chỉ có thể nhấn Super+ Ađể xem tất cả các ứng dụng đã cài đặt trong Ubuntu, nhưng tôi cần một lệnh để liệt kê tên của chúng. Lệnh

dpkg --get-selections | awk '{print $1}'

cũng không phải là một tùy chọn vì nó hiển thị tất cả các gói đã cài đặt và nó chứa trình điều khiển, hạt nhân và thư viện.

Câu trả lời:


17

Tôi đã đưa ra câu trả lời này cho những người muốn sử dụng bash một cách tốt. Rõ ràng là câu trả lời của câu hỏi có liên quan đến danh sách các tệp từ đó /usr/share/applications, nhưng vấn đề là lslệnh đó không nên được phân tích cú pháp bao giờ . Trước đây, tôi cũng mắc lỗi tương tự, nhưng bây giờ tôi đã học được rằng cách tốt nhất là sử dụng một forvòng lặp để lặp lại các tệp, ngay cả khi tôi phải sử dụng thêm một số phím từ bàn phím quý giá của mình:

for app in /usr/share/applications/*.desktop; do echo "${app:24:-8}"; done

Tôi cũng đã sử dụng trong các thao tác thao tác chuỗi lệnh trước đó : loại bỏ khỏi app24 ký tự đầu tiên /usr/share/applications/và 8 ký tự cuối cùng .desktop.


Cập nhật:

Một nơi khác mà bạn có thể tìm thấy các ứng dụng được hiển thị bởi Dash là ~/.local/share/applications/*.desktop. Vì vậy, bạn cũng cần chạy lệnh sau:

for app in ~/.local/share/applications/*.desktop; do echo "${app:37:-8}"; done

Để thống nhất hai lệnh trước, bạn có thể sử dụng:

for app in /usr/share/applications/*.desktop ~/.local/share/applications/*.desktop; do app="${app##/*/}"; echo "${app::-8}"; done

4

Để có được danh sách tất cả các ứng dụng đã cài đặt của bạn với tên của chúng, cách dễ nhất là làm:

sudo apt-get install aptitude
aptitude -F' * %p -> %d ' --no-gui --disable-columns search '?and(~i,!?section(libs), !?section(kernel), !?section(devel))'

Nó sẽ giúp bạn có một danh sách đẹp về tất cả các gói đã cài đặt không phải là thư viện, không phải hạt nhân, không phải gói phát triển như thế này:

* zip -> Archiver for .zip files 
* zlib1g -> compression library - runtime 
* zlib1g-dev -> compression library - development 
* zsh -> shell with lots of features 
* zsh-common -> architecture independent files for Zsh 

Nó hoàn thiện hơn vì nó cũng liệt kê các ứng dụng không phải GUI không xuất hiện trong các .desktoptệp


Tôi không thể đồng ý với câu trả lời này cho câu hỏi này. Câu trả lời là tốt đẹp, nhưng không phải ở nơi này. Rõ ràng là OP muốn có một danh sách với các ứng dụng có thể tìm thấy trong Dash. Và không có chỗ cho zsh, zsh-commonvà những người khác!
Radu Rădeanu

@ RaduRădeanu Tôi chỉ sử dụng đuôi để hiển thị đoạn trích các gói đã cài đặt của mình, kết thúc bằng z, nếu tôi đã sử dụng đầu, chúng sẽ bắt đầu bằng một, 2) anh ta muốn các ứng dụng được liệt kê trong "dấu gạch ngang"? Bạn có chắc không?
Braiam

Braiam, đã xuất hiện, không phải là bắt đầu bằng z hay với ... Khi bạn nhấn Super + A trên bàn phím, bạn có thể thấy gì xuất hiện trên màn hình của bạn bắt đầu từ góc trên bên trái?
Radu Rădeanu

1
Tiêu đề của @ RaduRădeanu OP nói rằng anh ấy muốn liệt kê tất cả các ứng dụng được cài đặt trong hệ thống của mình trừ thư viện, trình điều khiển, hạt nhân và các ứng dụng khác .. Anh ấy đề cập đến một trong những cách (mà anh ấy sử dụng) để có được danh sách ứng dụng, đó là sử dụng Super + A và điều đó chỉ hiển thị một tập hợp con của các ứng dụng được cài đặt trong hệ thống; nhưng điều này bao gồm hầu hết nếu không phải tất cả .. câu trả lời thậm chí sẽ được hoàn thành với việc --no-guiloại bỏ.
chính xác

1
Tôi lấy lại --no-guiphần đó, dường như nó không ở đó cho những gì tôi nghĩ.
chính xác

3

Chạy lệnh dưới đây để xem tất cả các ứng dụng đã cài đặt,

ls /usr/share/applications | awk -F '.desktop' ' { print $1}' -

Nếu bạn muốn lấy danh sách tất cả các ứng dụng đã cài đặt, hãy chạy lệnh bên dưới,

ls /usr/share/applications | awk -F '.desktop' ' { print $1}' - > ~/Desktop/applications.txt

Nó sẽ lưu trữ đầu ra lệnh trên để applications.txttập tin trong ~/Desktopthư mục của bạn .

HOẶC LÀ

Cũng chạy lệnh dưới đây trên thiết bị đầu cuối để liệt kê các ứng dụng đã cài đặt,

find /usr/share/applications -maxdepth 1 -type f -exec basename {} .desktop \; | sort

Để có được danh sách trong tệp văn bản, hãy chạy lệnh dưới đây

find /usr/share/applications -maxdepth 1 -type f -exec basename {} .desktop \; | sort > ~/Desktop/applications.txt

Các mục trên màn hình cho tất cả các ứng dụng đã cài đặt được lưu trữ bên trong /usr/share/applicationsthư mục, trong đó tên tệp có định dạng. application-name.desktopViệc xóa .desktopphần từ tên tệp sẽ cung cấp cho bạn danh sách tổng số các ứng dụng đã cài đặt.

Cập nhật:

Như @Radu đề xuất , bạn cũng có thể tìm thấy các mục trên máy tính để bàn cho các ứng dụng được cài đặt bổ sung trong ~/.local/share/applicationsthư mục.

find /usr/share/applications ~/.local/share/applications -maxdepth 1 -type f -exec basename {} .desktop \;


Cảm ơn Radu tuy nhiên bạn đã thấy một tên tệp chứa dòng mới bao nhiêu lần rồi? Không bao giờ? Cũng nghĩ vậy . Vì vậy, tôi không bao giờ nên sử dụng một cái gì đó rất hữu ích vì một trường hợp cạnh mà hầu như không bao giờ xảy ra? Tôi nghĩ rằng tôi sẽ tiếp tục phân tích cú pháp ls- cho các mục đích đại diện và cho các nhiệm vụ không quan trọng như nhiệm vụ ở trên - và cố gắng ghi nhớ giới hạn này, cảm ơn bạn đã đề phòng!
Rolf

0

Nếu bạn cần danh sách các ứng dụng hiển thị khi bạn nhấn Super+ A, bạn có thể sử dụng ls /usr/share/applications. Điều duy nhất bạn nên làm là thay thế .desktopkết thúc, đây là nhiệm vụ khá đơn giản. Tôi làm điều đó với sed:

ls /usr/share/applications | sed s/.desktop// - > installed-apps.txt

Nhưng bạn có thể làm điều đó sau khi bạn nhận được danh sách bằng trình soạn thảo văn bản.



2
@Radu, trên thực tế, /usr/share/application/*.desktopcác tệp không chứa bất kỳ ký tự đặc biệt nào, vì vậy phân tích cú pháp lsđặc biệt trong trường hợp này được cho phép.
Danatela

Điều này không liệt kê tất cả các ứng dụng được hiển thị khi bạn nhấn Super + A.
Radu Rădeanu

4
@ Semi-bit bạn đang cho rằng không có gì sai. Điều gì xảy ra nếu tôi là một thằng ngốc và đã tạo một tệp được gọi là bad name.desktopví dụ? Không có lý do để mạo hiểm lsở đây.
terdon

0

Không chắc chắn tại sao hầu hết các câu trả lời được đăng liên quan đến việc trích xuất tên tệp của các phím tắt .desktop. Tên tệp phím tắt .desktop của bạn có thể là bất cứ điều gì nhưng điều quan trọng là Nametrường bên trong tệp lối tắt. Nếu bạn muốn xây dựng danh sách các tên ứng dụng đã cài đặt hiển thị trong Dash, chỉ cần "grep" trường đó bên dưới[Desktop Entry]

Mã Rudimental, với bash

#!/bin/bash

for file in /usr/share/applications/*.desktop;
do
    while IFS== read -r key val
    do
        if [[ -z $key ]]; then
            continue
        else
            if [[ $key =~ ^\[Desktop\ Entry ]]; then
                interesting_field=1
            elif [[ $key =~ ^\[ ]]; then
                interesting_field=0
            fi
        fi
        [[ $interesting_field -eq 1 ]] && [[ $key == "Name" ]] && echo $val
    done < $file
done

Nhưng điều này không tính đến các phím tắt tài khoản bị ẩn khỏi hiển thị trong Dash. Ai đó hiểu rõ hơn về thông số .desktop có thể muốn mở rộng thêm mã này để loại trừ các loại phím tắt đó

Chỉnh sửa: một nỗ lực khác, với Python

#!/usr/bin/python

from os import listdir
from os.path import isfile, join
import ConfigParser

SHORTCUTDIR = "/usr/share/applications/"

shortcuts = [ file for file in listdir(SHORTCUTDIR) if isfile(join(SHORTCUTDIR, file)) and file.endswith(".desktop") ]
dash_shortcuts = []

for f in shortcuts:
    c = ConfigParser.SafeConfigParser()
    c.read(SHORTCUTDIR + f)

    try:
        if c.getboolean('Desktop Entry', 'NoDisplay') is True:
            continue
    except ConfigParser.NoOptionError:
        pass

    try:
        if "unity" in c.get('Desktop Entry', 'NotShowIn').lower():
            continue
    except ConfigParser.NoOptionError:
        pass

    try:
        if "unity" not in c.get('Desktop Entry', 'OnlyShowIn').lower():
            continue
    except ConfigParser.NoOptionError:
        pass

    dash_shortcuts += [ c.get("Desktop Entry", "Name") ]

for s in sorted(dash_shortcuts, key=str.lower):
    print s

3
Bạn thực sự nên mở rộng câu trả lời của bạn để có nhiều câu trả lời hơn.
Seth

@Seth tôi đăng quá sớm, xin lỗi. Tôi đang gãi đầu tìm ra cách phân tích cú pháp bằng bash
Flint

@AvinashRaj Tôi ước nó đơn giản nhưng đó không phải là cách thích hợp để phân tích ini. Mã sẽ phát nổ và gây ra tiếng ồn nếu có nhiều hơn một Namemục trong .desktop bạn đang phân tích cú pháp, luôn luôn như vậy. Ngoài ra, bạn không nên cho rằng tất cả các dòng bạn quan tâm sẽ nằm trên số dòng cố định
Flint

@AvinashRaj Vẫn tệ: P Bạn chưa tính đến Nametùy chọn đó có thể nằm ngoài phạm vi số dòng đó, đặc biệt là có nhiều tùy chọn hoặc dòng trống bên dưới [Desktop\ Entry ]. Và tệp .desktop là một tệp ini
Flint

0

Người hỏi muốn liệt kê tên của tất cả các "ứng dụng" đã cài đặt.

Về các ứng dụng có tệp .desktop :

  • câu trả lời của Danatela liên quan đến các ứng dụng có tệp .desktop trong/usr/share/applications
  • như Radu đã chỉ ra , các ứng dụng có tệp .desktop cũng có thể được tìm thấy trong~/.local/share/applications
  • tại thời điểm này, có thể lưu ý rằng các ứng dụng có tệp .desktop có thể có hai tên
    • một "tên" có sẵn bằng cách truy vấn Dash trong Unity hoặc từ các menu trong Xubfox (ví dụ). Tên này được lấy từ Name=dòng trong tệp .desktop tương ứng. Một ví dụ là "Bản đồ nhân vật".
    • "tên" khác là tên được sử dụng khi chạy ứng dụng từ thiết bị đầu cuối và là từ đầu tiên sau Exec=. Trong trường hợp "Bản đồ nhân vật", đó sẽ là gucharmap.
  • hai tên (và tệp .desktop) có thể liên quan bằng cách sử dụng:
    • sed -ns '1F;/^\[Desktop Entry\]/,/^\[/{/^Name=/p;/^Exec=/h};${z;x;G;p}' /usr/share/applications/*.desktop
    • sed -ns '1F;/^\[Desktop Entry\]/,/^\[/{/^Name=/p;/^Exec=/h};${z;x;G;p}' $HOME/.local/share/applications/*.desktop

Về các ứng dụng không có tệp .desktop :

Tùy thuộc vào cách người ta định nghĩa "ứng dụng", một số không có tệp .desktop.

  • Would cái gì đó như conky, poppler-utils, qpdf, xdotoolwmctrlđược coi là "ứng dụng"? Làm thế nào để chúng được xác định và liệt kê theo tên của chúng (giả sử người ta đã cài đặt chúng)?
  • Thế còn awk, find, grep, lssedđặt tên một số chi tiết? Họ có ứng dụng hay không?

Nếu bất cứ điều gì có lệnh được coi là một ứng dụng, thì lệnh Linux sẽ liệt kê tất cả các lệnh và bí danh có sẵncâu trả lời này sẽ giúp xác định chúng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.