시스템에 설치된 모든 응용 프로그램을 어떻게 나열합니까?


18

난 그냥 칠 수있다, 알고 Super+를 A우분투에 설치된 모든 응용 프로그램을 볼 수 있지만, 나는 그들의 이름을 나열하는 명령을해야합니다. 명령

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.


최신 정보:

대시로 표시되는 응용 프로그램을 찾을 수있는 또 다른 곳은 ~/.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파일에 표시되지 않는 비 GUI 응용 프로그램도 나열하기 때문에 더 완벽 합니다.


이 질문에 대한이 답변에 동의 할 수 없습니다. 대답은 훌륭하지만이 장소에는 없습니다. OP가 대시에서 찾을 수있는 애플리케이션이 포함 된 목록을 원한다는 것은 분명합니다. 그리고 장소가 아닌 zsh, zsh-common다른 사람!
Radu Rădeanu

@ RaduRădeanu 방금 꼬리를 사용하여 z로 끝나는 설치된 패키지의 발췌를 보여주었습니다. 헤드를 사용했다면 2로 시작합니다. 2) "대시"에 나열된 응용 프로그램을 원합니까? 확실합니까?
Braiam

Braiam, z, a로 시작하는 것이 아닙니다. 키보드에서 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 \;


감사합니다 Radu 그러나 줄 바꿈이 포함 된 파일 이름을 몇 번이나 보셨습니까? 못? 그렇게 생각 . 그래서 결코 발생하지 않는 에지 케이스 때문에 매우 유용한 것을 절대 사용해서는 안됩니까? 나는 ls표현 목적과 위와 같은 중요하지 않은 작업을 위해 구문 분석 을 계속 하고이 제한 사항을 명심하려고 노력할 것이라고 생각합니다.
Rolf

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특히이 경우 구문 분석 이 허용됩니다.
Danatela

Super + A를 눌렀을 때 표시되는 모든 응용 프로그램이 표시 되지는 않습니다 .
Radu Rădeanu

4
@ 세미 비트는 아무것도 잘못되었다고 가정합니다. 내가 바보이고 bad name.desktop예를 들어 파일을 만든 경우 어떻게해야 합니까? ls여기서 위험을 감수 할 이유가 없습니다 .
terdon

0

게시 된 대부분의 답변에 .desktop 바로 가기의 파일 이름 추출이 포함 된 이유를 잘 모르겠습니다. .desktop 바로 가기 파일 이름은 Name바로 가기 파일 내부의 필드입니다. Dash에 표시된 설치된 응용 프로그램 이름 목록을 작성하려면 아래의 해당 필드를 "grep"하십시오.[Desktop Entry]

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

그러나 이것은 대시에 표시되지 않는 단축키를 고려하지 않습니다. .desktop 사양을 더 잘 이해하는 사람은이 코드를 더 확장하여 그러한 지름길을 배제 할 수 있습니다.

편집 : 파이썬으로 다른 시도

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

@Seth 너무 빨리 게시했습니다. 죄송합니다. 나는 bash로 ini를 파싱하는 방법을 알아 내고 머리를 긁고 있었다
Flint

@ AvinashRaj 나는 그것이 간단하지만 ini를 구문 분석하는 적절한 방법이 아니길 바랍니다. Name파싱하는 .desktop에 두 개 이상의 항목 이 있으면 코드가 폭발하고 소음 이 발생합니다. 또한 관심있는 모든 라인이 고정 라인 번호에 있다고 가정해서는 안됩니다.
Flint

@AvinashRaj Still bad : P이 Name옵션은 특히 옵션 아래에 많은 옵션이나 빈 줄이있는 행 번호 범위를 벗어날 수 있다는 점을 고려하지 않았습니다 [Desktop\ Entry ]. 그리고 .desktop 파일은 ini 파일입니다
Flint

0

질문자는 설치된 모든 "앱"의 이름을 나열하려고합니다.

.desktop 파일이있는 앱 관련 :

  • Danatela의 답변 은 .desktop 파일이있는 앱을 처리합니다./usr/share/applications
  • 라두 지적 ,의 .desktop 파일과 애플리케이션도에서 찾을 수있다~/.local/share/applications
  • 이 시점에서 .desktop 파일이있는 앱은 두 가지 이름을 가질 수 있습니다.
    • Unity의 Dash를 쿼리하거나 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, xdotoolwmctrl고려 "응용 프로그램"? 이들을 이름으로 식별하고 나열하는 방법은 무엇입니까 (설치 한 것으로 가정)?
  • 무엇에 대한 awk, find, grep, ls그리고 sed좀 더 이름을 지정합니다? 앱입니까, 그렇지 않습니까?

경우 어떤 명령이있는 응용 프로그램으로, 다음의 생각 목록에 리눅스 명령을 사용할 수있는 모든 명령과 별칭이 답변이 그들을 식별하는 데 도움이됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.