Sistemimde yüklü olan tüm uygulamaları nasıl listeleyebilirim?


19

Biliyorum, sadece yüklü tüm uygulamaları Ubuntu'da görmek için Super+ Atuşuna basabilirim , ancak adlarını listelemek için bir komuta ihtiyacım var. Komuta

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

aynı zamanda bir seçenek değildir çünkü kurulu tüm paketleri gösterir ve sürücüler, çekirdekler ve kütüphaneler içerir.

Yanıtlar:


17

Bu cevabı, bash'ı iyi bir şekilde kullanmak isteyen insanlar için buldum. Sorunun cevabının, dosyaların listelendiği ile /usr/share/applicationsilgili olduğu açıktır, ancak sorun şu ki lskomutun ayrıştırılmaması gerekir . Geçmişte aynı hatayı yapıyordum, ama şimdi fordeğerli klavyemden daha fazla anahtar kullanmam gerekse bile, dosyalar üzerinde tekrarlamak için en iyi yolun bir döngü kullanmak olduğunu öğrendim :

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

Ben de önceki komut dizisi manipülasyon işlemlerinde kullanılır: olan appilk 24 karakter /usr/share/applications/ve son 8 karakter kaldırıldı .desktop.


Güncelleme:

Dash tarafından gösterilen uygulamaları bulabileceğiniz başka bir yer ~/.local/share/applications/*.desktop. Bu yüzden aşağıdaki komutu da çalıştırmanız gerekir:

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

Önceki iki komutu birleştirmek için şunları kullanabilirsiniz:

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

4

Yüklü tüm uygulamalarınızın adlarını içeren listesini almak için en kolay yol:

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

Bu, kütüphaneler değil, çekirdekler değil, şu şekilde geliştirme paketi değil, yüklü tüm paketlerin güzel bir listesini alacaktır:

* 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 

.desktopDosyalarda görünmeyen GUI olmayan uygulamaları da listelediği için daha eksiksiz


Bu sorunun cevabını kabul edemem. Cevap güzel, ama bu yerde değil. OP'nin Dash'de bulunabilecek uygulamalarla bir liste istediği yeterince açıktır. Ve için yer yok zsh, zsh-commonve diğerleri!
Radu Rădeanu

@ RaduRădeanu Ben sadece yüklü paketlerden bir alıntı göstermek için kuyruk kullandım, z ile biter, eğer kafa kullanılmış olsaydı, a ile başlayacaklar, 2) "tire" listelenen uygulamalar istiyor? Emin misiniz?
Braiam

Braiam, hadi, z ile başlayan ya da a ile ilgili değil ... Klavyenizdeki Super + A tuşlarına bastığınızda, sol üst köşeden başlayarak ekranınızda ne görüyorsunuz?
Radu Rădeanu

1
@ RaduRădeanu OP'nin başlığı, kütüphaneler, sürücüler, çekirdekler ve diğerleri hariç sisteminde yüklü olan tüm uygulamaları listelemek istediğini söylüyor. Super + A kullanan uygulama listesini almak için (kullandığı) yollardan birinden bahsediyor ve bu yalnızca sistemde yüklü uygulamaların bir alt kümesini görüntüler; ama bu hepsi olmasa bile çoğunu kapsar .. cevap bile --no-guikaldırıldı ile tamamlanmış olacaktır .
kesin

1
..Karımı geri alıyorum --no-gui, öyle olduğunu düşündüğüm şey için orada değil gibi görünüyor.
kesin

3

Yüklü tüm uygulamaları görmek için aşağıdaki komutu çalıştırın,

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

Yüklü tüm uygulamaların listesini almak istiyorsanız, aşağıdaki komutu çalıştırın,

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

Yukarıdaki komut çıktısını dizininizdeki applications.txtdosyaya kaydeder ~/Desktop.

VEYA

Ayrıca yüklü uygulamaları listelemek için terminalde aşağıdaki komutu çalıştırın,

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

Listeyi metin dosyasında almak için aşağıdaki komutu çalıştırın

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

Yüklü tüm uygulamalar için masaüstü girişleri /usr/share/applications, dosya adlarının. application-name.desktopBiçiminde olduğu dizinde saklanır . Parçayı .desktopdosya adlarından kaldırmak, yüklü uygulamaların toplam listesini verir.

Güncelleme:

@Radu'nun önerdiği gibi , yüklenen ek uygulamalar için ~/.local/share/applicationsdizin içindeki masaüstü girişlerini de bulabilirsiniz .

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


Teşekkürler Radu ancak kaç kez yeni satır içeren bir dosya adı gördünüz? Asla? Öyle düşünmüştüm . Bu yüzden, neredeyse hiç gerçekleşmeyen bir uç dava nedeniyle asla çok yararlı bir şey kullanmamalıyım? Sanırım ayrıştırma lsyapmaya devam edeceğim - temsili amaçlar için ve yukarıdaki gibi kritik olmayan görevler için - ve bu sınırlamayı aklınızda tutmaya çalışacağım, başınız için teşekkürler!
Rolf

0

Super+ Düğmesine bastığınızda gösterilen uygulamaların listesine ihtiyacınız varsa Akullanabilirsiniz ls /usr/share/applications. Yapmanız gereken tek şey .desktopoldukça basit bir görev olan sonun yerini almak . Şununla yapıyorum sed:

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

Ancak, metin düzenleyicisini kullanarak listeyi aldıktan sonra bunu yapabilirsiniz.



2
@Radu, aslında /usr/share/application/*.desktopdosyalar herhangi bir özel karakter içermiyor, bu nedenle lsözellikle bu durumda ayrıştırmaya izin veriliyor.
Danatela

Bu, Super + A'ya bastığınızda gösterilen tüm uygulamaları listelemez .
Radu Rădeanu

4
@ Yarı bit hiçbir şeyin yanlış gitmediğini varsayıyorsunuz. Eğer bir aptalım ve bad name.desktopörneğin adlı bir dosya oluşturduysam ne olur ? Burada riske girmek için bir neden lsyok.
terdon

0

Gönderilen yanıtların çoğunun neden .desktop kısayollarının dosya adının çıkarılmasını içerdiğinden emin değilim. .Desktop kısayol dosya adınız herhangi bir şey olabilir, ancak önemli olanName olan kısayol dosyasının içindeki alandır. Dash'te gösterilen yüklü uygulama adlarının listesini oluşturmak istiyorsanız, aşağıdaki alanı "grep"[Desktop Entry]

Temel kod, bash ile

#!/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

Ancak bu, Dash'de gösterilmekten gizlenen kısayolları dikkate almaz. .Desktop spec'i daha iyi anlayan biri, bu tür kısayolları hariç tutmak için bu kodu daha da genişletmek isteyebilir

Düzenleme: Python ile başka bir girişim

#!/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
Daha çok yanıt olmak için cevabınızı gerçekten genişletmelisiniz.
Seth

@ Çok yakında yayınladım üzgünüm. Ben bash ile ini ayrıştırmak için nasıl kafamı kaşıma oldu
Flint

@AvinashRaj Keşke bu kadar basit ama ini ayrıştırmak için uygun bir yol değil. Name.Desktop'ta ayrıştırdığınız birden fazla giriş varsa kod patlar ve sesler atar , bu her zaman böyle olur. Ayrıca ilgilendiğiniz tüm hatların sabit hat numarasında olacağını varsaymamalısınız
Flint

@AvinashRaj Hala kötü: P Bu Nameseçeneğin, özellikle çok sayıda seçenek veya altındaki boş satırlarla, bu satır numarası aralığının dışında olabileceğini dikkate almadınız [Desktop\ Entry ]. Ve .desktop dosyası bir ini dosyası
Flint

0

Soru soran, yüklü tüm "uygulamaların" adlarını listelemek istiyor.

.Desktop dosyalarıyla uygulamalar hakkında :

  • Danatela'nın yanıtı , .desktop dosyaları olan uygulamalarla ilgilidir./usr/share/applications
  • Radu'nun işaret ettiği gibi , .desktop dosyalarına sahip uygulamalar~/.local/share/applications
  • bu noktada, .desktop dosyalarına sahip uygulamaların iki adı olabileceği belirtilebilir
    • bir "ad", Unity'deki Dash'i veya Xubuntu'daki menülerden (örneğin) sorgulanarak kullanılabilir. Bu ad,Name= ilgili .desktop dosyasındaki satırdan . Bunun bir örneği "Karakter Eşlem" dir.
    • diğer "ad", uygulamayı terminalden çalıştırırken kullanılacak addır ve sonraki ilk sözcüktür Exec=. "Karakter Haritası" durumunda, bu olurdu gucharmap.
  • iki isim (ve .desktop dosyası) ilgili olabilir kullanılarak:
    • sed -ns '1F;/^\[Desktop Entry\]/,/^\[/{/^Name=/p;/^Exec=/h};${z;x;G;p}' /usr/share/applications/*.desktop
    • ve
    • sed -ns '1F;/^\[Desktop Entry\]/,/^\[/{/^Name=/p;/^Exec=/h};${z;x;G;p}' $HOME/.local/share/applications/*.desktop

.Desktop dosyaları olmayan uygulamalar ile ilgili :

Birinin "uygulamayı" nasıl tanımladığına bağlı olarak, bazılarında .desktop dosyaları yoktur.

  • istediğim bir şey conky, poppler-utils, qpdf, xdotoolve wmctrldikkat edilmesi "uygulamalar"? Bunlar isimleriyle nasıl tanımlanır ve listelenir (birinin kurduğu varsayılarak)?
  • Ne yaklaşık awk, find, grep, lsve sedbiraz daha isim? Uygulamalar mı yoksa değil mi?

Eğer her şey bir komut olan bir uygulama olarak, daha sonra düşünülen listeye Linux komutu mevcut tüm komutları ve takma adlar ve bu cevap var onları tanımlamak yardımcı olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.