Bagaimana saya bisa mendaftar semua aplikasi yang diinstal di sistem saya?


18

Saya tahu, saya bisa menekan Super+ Auntuk melihat semua aplikasi yang terinstal di Ubuntu, tetapi saya perlu perintah untuk mendaftarkan nama mereka. Perintah

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

juga bukan pilihan karena menampilkan semua paket yang diinstal dan berisi driver, kernel dan pustaka.

Jawaban:


17

Saya datang dengan jawaban ini untuk orang-orang yang ingin menggunakan bash dengan cara yang baik. Jelas bahwa jawaban pertanyaan terkait dengan daftar file dari /usr/share/applications, tetapi masalahnya adalah bahwa lsperintah tidak boleh diuraikan . Di masa lalu, saya melakukan kesalahan yang sama, tetapi sekarang saya belajar bahwa cara terbaik adalah menggunakan forperulangan untuk beralih ke file, bahkan jika saya harus menggunakan beberapa tombol lagi dari keyboard saya yang berharga:

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

Saya juga digunakan dalam operasi manipulasi string perintah sebelumnya : dihapus dari app24 karakter pertama /usr/share/applications/dan 8 karakter terakhir .desktop.


Memperbarui:

Tempat lain di mana Anda dapat menemukan aplikasi yang ditunjukkan oleh Dash adalah ~/.local/share/applications/*.desktop. Jadi, Anda perlu menjalankan perintah berikut juga:

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

Untuk menyatukan dua perintah sebelumnya, Anda dapat menggunakan:

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

4

Untuk mendapatkan daftar semua aplikasi Anda yang terinstal dengan namanya, cara termudah adalah dengan melakukan:

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

Ini akan memberi Anda daftar yang bagus dari semua paket yang diinstal yang bukan perpustakaan, bukan kernel, bukan paket pengembangan seperti ini:

* 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 

Ini lebih lengkap karena juga mencantumkan aplikasi non-GUI yang tidak akan muncul dalam .desktopfile


Saya tidak setuju dengan jawaban ini untuk pertanyaan ini. Jawabannya bagus, tetapi tidak di tempat ini. Cukup jelas bahwa OP menginginkan daftar dengan aplikasi yang dapat ditemukan di Dash. Dan tidak ada tempat untuk zsh, zsh-commondan lainnya!
Radu Rădeanu

@ RaduRădeanu Saya baru saja menggunakan tail untuk menunjukkan kutipan dari paket yang saya instal, yang diakhiri dengan z, jika saya telah menggunakan head, mereka akan mulai dengan, 2) dia ingin aplikasi yang terdaftar di "dash"? Apakah kamu yakin
Braiam

Braiam, ayolah, ini bukan tentang yang dimulai dengan z atau dengan ... Ketika Anda menekan Super + A pada keyboard Anda apa yang dapat Anda lihat muncul di layar Anda mulai dari sudut kiri atas?
Radu Rădeanu

1
@ RaduRădeanu Judul OP mengatakan bahwa dia ingin membuat daftar semua aplikasi yang diinstal di sistemnya tidak termasuk perpustakaan, driver, kernel dan lain-lain .. Dia menyebutkan salah satu cara (yang dia gunakan) untuk mendapatkan daftar aplikasi, yang menggunakan Super + A dan yang hanya menampilkan sebagian aplikasi yang diinstal dalam sistem; tetapi ini mencakup sebagian besar jika tidak semua .. jawabannya bahkan akan lengkap dengan --no-guidihapus.
tepat

1
..Aku mengambil kembali --no-guibagian itu, sepertinya tidak ada di sana untuk apa yang kupikirkan.
tepat

3

Jalankan perintah di bawah ini untuk melihat semua aplikasi yang diinstal,

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

Jika Anda ingin mendapatkan daftar semua aplikasi yang diinstal, maka jalankan perintah di bawah ini,

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

Ini akan menyimpan output perintah di atas ke applications.txtfile di dalam ~/Desktopdirektori Anda .

ATAU

Jalankan juga perintah di bawah ini pada terminal untuk mendaftar aplikasi yang diinstal,

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

Untuk mendapatkan daftar dalam file teks, jalankan perintah di bawah ini

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

Entri desktop untuk semua aplikasi yang diinstal disimpan di dalam /usr/share/applicationsdirektori, di mana nama file dalam format application-name.desktop.Menghapus .desktopbagian dari nama file akan memberi Anda daftar total aplikasi yang diinstal.

Memperbarui:

Seperti yang disarankan @Radu , Anda juga dapat menemukan entri desktop untuk aplikasi tambahan yang diinstal di dalam ~/.local/share/applicationsdirektori.

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


Terima kasih Radu namun berapa kali Anda melihat nama file yang mengandung baris baru? Tidak pernah? Berpikir begitu . Jadi saya seharusnya tidak pernah menggunakan sesuatu yang sangat berguna karena kasus tepi yang hampir tidak pernah terjadi? Saya pikir saya akan terus parsing ls- untuk tujuan representasional dan untuk tugas-tugas non-kritis seperti yang di atas - dan mencoba untuk mengingat keterbatasan ini, terima kasih atas up!
Rolf

0

Jika Anda membutuhkan daftar aplikasi yang ditampilkan ketika Anda menekan Super+ A, Anda dapat menggunakan ls /usr/share/applications. Satu-satunya hal yang harus Anda lakukan adalah mengganti .desktopending yang merupakan tugas yang cukup sederhana. Saya melakukannya dengan sed:

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

Tetapi Anda dapat melakukannya setelah Anda menerima daftar menggunakan editor teks.



2
@ Radu, sebenarnya, /usr/share/application/*.desktopfile tidak mengandung karakter khusus, jadi penguraian lskhususnya dalam hal ini diperbolehkan.
Danatela

Ini tidak mencantumkan semua aplikasi yang ditampilkan ketika Anda menekan Super + A.
Radu Rădeanu

4
@ Semi-bit Anda mengasumsikan bahwa tidak ada yang salah. Bagaimana jika saya seorang idiot dan telah membuat file bernama bad name.desktopmisalnya? Tidak ada alasan untuk mengambil risiko di lssini.
terdon

0

Tidak yakin mengapa sebagian besar jawaban yang diposting melibatkan mengekstraksi nama file pintasan .desktop. Nama file pintas .desktop Anda bisa apa saja tetapi yang penting adalah Namebidang di dalam file pintasan. Jika Anda ingin membuat daftar nama aplikasi terpasang yang ditampilkan di Dash, cukup "ambil" bidang itu di bawah[Desktop Entry]

Kode percobaan, dengan 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

Tapi ini tidak memperhitungkan pintasan akun yang disembunyikan dari yang ditampilkan di Dash. Seseorang dengan pemahaman yang lebih baik tentang .desktop spec mungkin ingin memperluas kode ini untuk mengecualikan mereka yang agak pintas

Sunting: upaya lain, dengan 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
Anda harus benar-benar memperluas jawaban Anda menjadi lebih dari satu jawaban.
Seth

@Dari saya posting terlalu cepat, maaf. Aku sedang menggaruk-garuk kepalaku mencari tahu bagaimana mengurai ini dengan bash
Flint

@AvinashRaj Saya berharap ini sesederhana itu tapi itu bukan cara yang tepat untuk mengurai ini. Kode tersebut akan meledak dan mengeluarkan suara jika ada lebih dari satu Nameentri di .desktop yang Anda uraikan, yang selalu menjadi masalah. Anda juga tidak boleh berasumsi bahwa semua saluran yang Anda minati akan berada pada nomor telepon tetap
Flint

@AvinashRaj Masih buruk: P Anda tidak memperhitungkan bahwa Nameopsi bisa berada di luar rentang nomor baris itu, terutama dengan banyak opsi atau baris kosong di bawahnya [Desktop\ Entry ]. Dan file .desktop adalah file ini
Flint

0

Penanya ingin membuat daftar nama semua "aplikasi" yang diinstal.

Mengenai aplikasi dengan file .desktop :

  • jawaban oleh Danatela berkaitan dengan aplikasi yang memiliki file .desktop di/usr/share/applications
  • seperti yang ditunjukkan oleh Radu , aplikasi dengan file .desktop juga dapat ditemukan di~/.local/share/applications
  • pada titik ini, dapat dicatat bahwa aplikasi dengan file .desktop dapat memiliki dua nama
    • satu "nama" tersedia dengan menanyakan Dash in Unity atau dari menu di Xubuntu (misalnya). Nama ini berasal dari Name=baris dalam file .desktop masing-masing. Salah satu contoh adalah "Peta Karakter".
    • "nama" lainnya adalah yang akan digunakan saat menjalankan aplikasi dari terminal dan merupakan kata pertama setelahnya Exec=. Dalam kasus "Peta Karakter", itu akan menjadi gucharmap.
  • dua nama (dan file .desktop) dapat dikaitkan menggunakan:
    • sed -ns '1F;/^\[Desktop Entry\]/,/^\[/{/^Name=/p;/^Exec=/h};${z;x;G;p}' /usr/share/applications/*.desktop
    • dan
    • sed -ns '1F;/^\[Desktop Entry\]/,/^\[/{/^Name=/p;/^Exec=/h};${z;x;G;p}' $HOME/.local/share/applications/*.desktop

Mengenai aplikasi tanpa file .desktop :

Bergantung pada bagaimana seseorang mendefinisikan "aplikasi", beberapa tidak memiliki file .desktop.

  • Apakah sesuatu seperti conky, poppler-utils, qpdf, xdotooldan wmctrldianggap "aplikasi"? Bagaimana cara mengidentifikasi dan mendaftar dengan nama mereka (dengan asumsi seseorang telah menginstalnya)?
  • Bagaimana awk, find, grep, lsdan seduntuk nama lagi? Apakah itu aplikasi atau bukan?

Jika sesuatu yang memiliki perintah dianggap sebagai aplikasi, maka perintah Linux untuk mendaftar semua perintah dan alias yang tersedia dan jawaban ini akan membantu mengidentifikasi mereka.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.