Як я можу перерахувати всі програми, встановлені в моїй системі?


18

Я знаю, я просто можу натиснути Super+, Aщоб побачити всі встановлені програми в Ubuntu, але мені потрібна команда, щоб перелічити їх імена. Команда

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

також не є варіантом, оскільки він показує всі встановлені пакети і містить драйвери, ядра та бібліотеки.

Відповіді:


17

Я придумав цю відповідь для людей, які хочуть добре використовувати bash. Зрозуміло, що відповідь на питання пов'язаний з переліком файлів з /usr/share/applications, але проблема полягає в тому, що lsкоманду не слід ніколи розбирати . У минулому я робив ту саму помилку, але тепер я дізнався, що найкращий спосіб - це forцикл для повторення файлів, навіть якщо я повинен використовувати ще кілька клавіш зі своєї дорогоцінної клавіатури:

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

Я також використовував у попередніх операціях маніпуляції з рядком командного рядка : видалено з appперших 24 символів, які є, /usr/share/applications/і останні 8 символів, які є .desktop.


Оновлення:

Ще одне місце, де можна знайти додатки, показані Dash, - це ~/.local/share/applications/*.desktop. Тому вам також потрібно виконати таку команду:

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

Для уніфікації попередніх двох команд можна використовувати:

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

4

Щоб отримати список усіх встановлених програм із їхніми іменами, найпростіший спосіб:

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

Ви отримаєте хороший список усіх встановлених пакетів, які не є бібліотеками, не ядрами, а не пакетом розробки, як це:

* 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 

Він більш повний, оскільки він також містить список програм, що не є графічним інтерфейсом, які не відображатимуться у .desktopфайлах


Я не можу погодитися з цією відповіддю на це питання. Відповідь приємна, але не в цьому місці. Досить зрозуміло, що ОП хоче списку з додатками, які можна знайти в тирі. І там не місце zsh, zsh-commonі інші!
Radu Rădeanu

@ RaduRădeanu Я просто використав хвіст, щоб показати уривок моїх встановлених пакетів, який закінчується на z, якщо я використав голову, вони почнуться з а, 2) він хоче додатків, перелічених у "тире"? Ти впевнений?
Брайам

Брайам, давай, справа не в тому, з чого починати з z або з ... Коли ви натискаєте Super + A на клавіатурі, що ви можете побачити на екрані, починаючи з лівого верхнього кута?
Radu Rădeanu

1
Заголовок @ RaduRădeanu OP говорить, що він хоче перелічити всі програми, встановлені в його системі, крім бібліотек, драйверів, ядер та інших. Він згадує один із способів (який він використовує), щоб отримати список додатків, який використовує Super + A і це просто відображає підмножину програм, встановлених у системі; але це стосується більшості, якщо не всіх .. відповідь буде навіть повною з --no-guiвидаленим.
точний

1
..Я забираю назад --no-guiчастину, здається, її немає для того, що я думав, що це було.
точний

3

Запустіть команду нижче, щоб побачити всі встановлені програми,

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

Якщо ви хочете отримати список усіх встановлених програм, виконайте команду нижче,

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

Він буде зберігати вищезазначений командний вихід у applications.txtфайл у вашому ~/Desktopкаталозі.

АБО

Також запустіть команду нижче на терміналі, щоб перелічити встановлені програми,

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

Щоб отримати список у текстовому файлі, запустіть команду нижче

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

Записи на робочому столі для всіх встановлених програм зберігаються всередині /usr/share/applicationsкаталогу, де імена файлів у форматі. application-name.desktopВидалення .desktopчастини з імен файлів дасть вам загальний список встановлених програм.

Оновлення:

Як @Radu запропонував , ви також можете знайти записи на робочому столі для додаткових встановлених додатків всередині ~/.local/share/applicationsкаталогу.

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


Спасибі Раду, проте скільки разів ти бачив ім'я файлу, що містить новий рядок? Ніколи? Так і думав . Тож я ніколи не повинен використовувати щось дуже корисне через кейс, який практично ніколи не буває? Думаю, я буду продовжувати синтаксичний аналіз ls- для представницьких цілей і для некритичних завдань, таких як вище, - і спробую пам’ятати про це обмеження, дякую за голову!
Рольф

0

Якщо вам потрібен список програм, показаних під час натискання Super+ A, ви можете використовувати ls /usr/share/applications. Єдине, що вам слід зробити, це замінити .desktopзакінчення, яке є досить простим завданням. Я роблю це з sed:

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

Але це можна зробити після отримання списку за допомогою текстового редактора.



2
@Radu, насправді /usr/share/application/*.desktopфайли не містять жодних спеціальних символів, тому синтаксичний аналіз, lsособливо в цьому випадку, дозволений.
Данатела

У цьому списку не відображаються всі програми, показані під час натискання клавіші Super + A.
Radu Rădeanu

4
@ Напівбіт ви припускаєте, що нічого не пішло не так. Що робити, якщо я ідіот і створив файл, bad name.desktopнаприклад,? Тут немає підстав для ризику ls.
тердон

0

Не впевнені, чому більшість опублікованих відповідей включає вилучення імені файлу .desktop ярликів. Назви вашого файлу ярликів .desktop можуть бути будь-якими, але важливим є Nameполе у ​​файлі ярлика. Якщо ви хочете скласти список встановлених імен додатків, що відображаються на Dash, просто "простежте" це поле під[Desktop Entry]

Рудиментальний код, з баш

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

Але це не враховує ярлики, приховані від показу в Dash. Хтось, хто краще розуміє специфікацію .desktop, може захотіти ще більше розширити цей код, щоб виключити такі види ярликів

Редагування: ще одна спроба, з 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
Ви дійсно повинні розширити свою відповідь, щоб бути більше відповіді.
Сет

@Seth я розмістив занадто рано, вибачте. Я чухав голову, з'ясовуючи, як розібрати іні з баш
Флінт

@AvinashRaj Я хотів би, щоб це був простий, але це не правильний спосіб розбору іні. Код вибухне і видасть шуми, якщо Nameв .desktop ви розбираєте кілька записів, що завжди так. Крім того, ви не повинні вважати, що всі рядки, які вас цікавлять, будуть на фіксованому номері
Флінт

@AvinashRaj Все ще погано: P Ви не врахували, що Nameпараметр може бути поза цим діапазоном номера рядка, особливо з великою кількістю опцій або порожніх рядків під [Desktop\ Entry ]. І файл .desktop - це файл ini
Flint

0

Запитуючий хоче перелічити назви всіх встановлених «додатків».

Що стосується програм із файлами .desktop :

  • відповідь Danatela стосується програм, у яких є файли .desktop/usr/share/applications
  • як зазначає Radu , додатки з .desktop файлами також можна знайти в~/.local/share/applications
  • на даний момент, можна зазначити, що програми з файлами .desktop можуть мати два імені
    • одне "ім'я" доступне за допомогою запиту на тире в Unity або з меню в Xubuntu (наприклад). Ця назва походить від Name=рядка у відповідному файлі .desktop. Один із прикладів - "Карта символів".
    • інше "ім'я" - це те, яке слід використовувати під час запуску програми з терміналу, і це перше слово після Exec=. У випадку з "картою персонажів" це було б gucharmap.
  • два імені (і файл .desktop) можуть бути пов’язані за допомогою:
    • 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

Що стосується програм без файлів .desktop :

Залежно від того, як визначено "додаток", деякі не мають .desktop файлів.

  • щось подібне conky , poppler-utils, qpdf, xdotoolі wmctrlвважаються «додаток»? Як їх можна ідентифікувати та перелічити за їхніми іменами (якщо припустимо, що їх встановлено)?
  • Як щодо awk, find,grep , lsі sedназвати ще? Це додатки чи ні?

Якщо все, що має команду, розглядається як додаток, тоді команда Linux перелічить усі доступні команди та псевдоніми, і ця відповідь там допоможе їх визначити.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.