ฉันจะแสดงรายการแอปพลิเคชันทั้งหมดที่ติดตั้งในระบบของฉันได้อย่างไร


18

ฉันรู้ว่าฉันสามารถกดSuper+ Aเพื่อดูแอปที่ติดตั้งทั้งหมดใน Ubuntu แต่ฉันต้องการคำสั่งเพื่อแสดงชื่อของพวกเขา คำสั่ง

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

ยังไม่ใช่ตัวเลือกเนื่องจากจะแสดงแพ็คเกจที่ติดตั้งทั้งหมดและมีไดรเวอร์เคอร์เนลและไลบรารี

คำตอบ:


17

ฉันมากับคำตอบนี้สำหรับผู้ที่ต้องการใช้ทุบตีในทางที่ดี เป็นที่ชัดเจนว่าคำตอบของคำถามที่เกี่ยวข้องกับรายชื่อของไฟล์จากที่/usr/share/applicationsแต่ปัญหาคือว่าคำสั่งไม่ควรแยกวิเคราะห์เคยls ในอดีตฉันทำผิดพลาดเหมือนเดิม แต่ตอนนี้ฉันได้เรียนรู้ว่าวิธีที่ดีที่สุดคือการforวนซ้ำเพื่อทำซ้ำไฟล์แม้ว่าฉันจะต้องใช้คีย์เพิ่มเติมจากแป้นพิมพ์ที่มีค่าของฉัน:

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

ฉันยังใช้ในคำสั่งก่อนหน้านี้การจัดการสตริงการดำเนินงาน: ถูกลบออกจากapp24 ตัวแรกซึ่งเป็น/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 

มันเสร็จสมบูรณ์มากขึ้นเนื่องจากยังแสดงรายการแอปพลิเคชันที่ไม่ใช่ GUI ซึ่งจะไม่ปรากฏใน.desktopไฟล์


ฉันไม่สามารถเห็นด้วยกับคำตอบของคำถามนี้ คำตอบนั้นดี แต่ไม่ใช่ในสถานที่นี้ มีความชัดเจนเพียงพอที่ OP ต้องการรายการที่มีแอปพลิเคชันซึ่งสามารถพบได้ใน Dash และไม่มีสถานที่สำหรับzsh, zsh-commonและอื่น ๆ !
Radu Rădeanu

@ RaduRădeanuฉันเพิ่งใช้หางเพื่อแสดงข้อความที่ตัดตอนมาจากแพ็คเกจที่ติดตั้งของฉันซึ่งลงท้ายด้วย z หากฉันใช้ head พวกเขาจะเริ่มต้นด้วย 2) เขาต้องการแอปพลิเคชันที่แสดงรายการใน "ขีดกลาง" หรือไม่ คุณแน่ใจไหม?
Braiam

Braiam มาแล้วมันไม่เกี่ยวกับว่าขึ้นต้นด้วย 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 \;


ขอบคุณ 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
@ Semi-bit คุณกำลังสมมติว่าไม่มีอะไรผิดพลาด ถ้าฉันเป็นคนงี่เง่าและได้สร้างไฟล์ชื่อbad name.desktopเช่นนั้น ไม่มีเหตุผลที่จะเสี่ยงlsที่นี่
terdon

0

ไม่แน่ใจว่าทำไมคำตอบที่โพสต์ส่วนใหญ่เกี่ยวข้องกับการแยกชื่อไฟล์ของทางลัดเดสก์ท็อป ชื่อไฟล์ทางลัด. เดสก์ท็อปของคุณสามารถเป็นอะไรก็ได้ แต่สิ่งที่สำคัญคือNameฟิลด์ในไฟล์ทางลัด หากคุณต้องการสร้างรายการชื่อแอปพลิเคชันที่ติดตั้งซึ่งแสดงใน Dash เพียงแค่ "grep" ฟิลด์นั้นภายใต้[Desktop Entry]

รหัส Rudimental พร้อมทุบตี

#!/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 คนที่เข้าใจดียิ่งขึ้นเกี่ยวกับข้อมูลจำเพาะ. เดสก์ท็อปอาจต้องการขยายโค้ดนี้เพิ่มเติมเพื่อยกเว้นทางลัดประเภทนั้น

แก้ไข: พยายามอีกครั้งด้วย 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

@Seth ฉันโพสต์เร็วเกินไปขอโทษ ฉันเกาหัวของฉันเพื่อหาวิธีแยกวิเคราะห์ ini ด้วย bash
Flint

@AvinashRaj ฉันหวังว่ามันจะง่าย แต่ก็ไม่เหมาะที่จะแยกวิเคราะห์ ini รหัสจะระเบิดและส่งเสียงหากมีมากกว่าหนึ่งNameรายการใน .desktop ที่คุณแยกวิเคราะห์ซึ่งมักจะเป็นกรณี นอกจากนี้คุณไม่ควรถือว่าทุกบรรทัดที่คุณสนใจจะอยู่ที่หมายเลขโทรศัพท์พื้นฐาน
Flint

@AvinashRaj ยังคงไม่ดี: P คุณไม่ได้คำนึงว่าตัวเลือกที่อาจจะออกไปข้างนอกว่าช่วงของหมายเลขบรรทัดโดยเฉพาะอย่างยิ่งที่มีจำนวนมากของตัวเลือกหรือบรรทัดว่างภายใต้Name [Desktop\ Entry ]และไฟล์ .desktop เป็นไฟล์ini
Flint

0

ผู้ถามต้องการแสดงชื่อของ "แอพ" ที่ติดตั้งทั้งหมด

เกี่ยวกับแอพที่มีไฟล์ .desktop :

  • คำตอบของ Danatelaเกี่ยวข้องกับแอพที่มีไฟล์ .desktop/usr/share/applications
  • เป็นแหลมออกโดย Raduปพลิเคชันที่มีไฟล์เดสก์ทอปยังอาจพบได้ใน~/.local/share/applications
  • ณ จุดนี้อาจสังเกตได้ว่าแอปที่มีไฟล์ .desktop สามารถมีสองชื่อได้
    • หนึ่ง "ชื่อ" สามารถใช้ได้โดยการสอบถาม Dash ใน Unity หรือจากเมนูใน Xubuntu (ตัวอย่าง) ชื่อนี้ได้มาจากName=บรรทัดในไฟล์. desktop ที่เกี่ยวข้อง ตัวอย่างหนึ่งคือ "ผังแสดงชุดอักขระ"
    • "ชื่อ" อื่น ๆ เป็นชื่อที่จะใช้เมื่อเรียกใช้แอพจากเครื่องเทอร์มินัลและเป็นคำแรกหลังจากExec=นั้น ในกรณีของ "Character Map" 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 จะแสดงรายการคำสั่งและนามแฝงที่มีอยู่ทั้งหมดและคำตอบนี้จะช่วยระบุพวกเขา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.