मैं सभी स्थापित प्रोग्रामों को कैसे सूचीबद्ध करूं?


48

मैं उन दोनों कार्यक्रमों की सूची कैसे दूंगा जो मेरे वितरण के साथ आए थे और जिन्हें मैंने स्वयं स्थापित किया था?


8
कौन सा वितरण? प्रत्येक वितरण में अलग-अलग इंस्टॉलिंग टूल होते हैं।
मट्टियो

हम्म, मुझे Red Hat, Ubuntu और cygwin में दिलचस्पी है। क्या कुछ कमांड लाइन तर्क वाले कार्यक्रमों को सूचीबद्ध करने का एक वितरण-मुक्त तरीका है?
inquilineKea

1
नहीं, पैकेज मैनेजर अलग-अलग नहीं हैं।
क्रिस डाउन

जवाबों:


71

जो आपके वितरण पर निर्भर करता है।

  • एप्टीट्यूड-आधारित वितरण (उबंटू, डेबियन, आदि): dpkg -l
  • RPM- आधारित वितरण (फेडोरा, RHEL, आदि): rpm -qa
  • pkg * आधारित वितरण (OpenBSD, FreeBSD, आदि): pkg_info
  • पोर्टेज-आधारित वितरण (जेंटू, आदि): equery listयाeix -I
  • पैक्मैन-आधारित वितरण (आर्क लिनक्स, आदि): pacman -Q
  • Cygwin: cygcheck --check-setup --dump-only *
  • स्लैकवेयर: slapt-get --installed

ये सभी हालांकि , कार्यक्रमों के बजाय संकुल को सूचीबद्ध करेंगे । यदि आप वास्तव में कार्यक्रमों को सूचीबद्ध करना चाहते हैं, तो आप संभवतः अपने निष्पादन में उन चीजों को सूचीबद्ध करना चाहते हैं , जो इस तरह किया जा सकता है जैसे बैश का उपयोग करना :$PATHcompgen

compgen -c

या, यदि आपके पास नहीं है compgen:

#!/bin/bash
IFS=: read -ra dirs_in_path <<< "$PATH"

for dir in "${dirs_in_path[@]}"; do
    for file in "$dir"/*; do
        [[ -x $file && -f $file ]] && printf '%s\n' "${file##*/}"
    done
done

4
और RPM आधारित सिस्टम (रेड हैट, SuSE, CentOS, इत्यादि) के लिए:rpm -qa
nos

1
डेबियन / उबंटू है dkpg -l | grep ^ii
रॉल्फ

1
@ रॉल्फ, आपका मतलब है dPKg
Harkály Gerg

1
Hrmph ... BSDs लिनक्स वितरण नहीं कर रहे हैं ...
Kusalananda

1
@ कुसलानंद हुह? इस उत्तर में किसी भी बिंदु पर यह नहीं कहा गया है कि बीएसडी लिनक्स वितरण हैं, लेकिन वे वितरण हैं । बीएसडी में "डी" का शाब्दिक अर्थ है।
क्रिस डाउन

13

प्रश्न के दूसरे भाग का उत्तर देना ( पहले भाग के लिए क्रिस के उत्तर में कुछ भी नहीं जोड़ा जाना चाहिए ) :

आमतौर पर मैन्युअल रूप से स्थापित कार्यक्रमों और उनके घटकों को सूचीबद्ध करने का कोई तरीका नहीं है । यदि आपने पैकेज मैनेजर का उपयोग नहीं किया है तो यह कहीं भी रिकॉर्ड नहीं किया गया है। आप बस इतना कर सकते हैं कि आप मानक स्थानों (जैसे क्रिस द्वारा सुझाए गए) में बायनेरिज़ ढूंढ सकते हैं और इसी तरह, अनुमान लगा सकते हैं कि कुछ पुस्तकालय या कुछ मैनुअल पेज आदि कहां से आए हैं। इसीलिए, जब भी संभव हो, आपको हमेशा अपने पैकेज मैनेजर का उपयोग करके प्रोग्राम इंस्टॉल करना चाहिए


3

कार्यक्रमों को पथ के माध्यम से प्राप्य होना चाहिए, इसलिए मार्ग में सब कुछ सूचीबद्ध करें:

ls ${PATH//:/ }

लगभग 3k-4k प्रोग्राम के परिणाम की अपेक्षा करें।

झूठी सकारात्मकता के संभावित अल्पसंख्यक को बाहर करने के लिए, आप दृष्टिकोण को परिष्कृत कर सकते हैं:

for d in ${PATH//:/ } ; do 
    for f in $d/* ; do  
        test -x $f && test -f $f && echo $f
    done
done

यह मेरे लिए कोई फर्क नहीं पड़ा।


2
ध्यान दें कि यह संभावित रूप से विभिन्न गैर-कार्यक्रमों (साथ ही $PATH, आदि में निर्देशिकाओं के उपनिर्देशिका ) को भी सूचीबद्ध करेगा ।
क्रिस डाउन

1
मैंने एक परीक्षण जोड़ा, लेकिन इससे मुझे कोई फर्क नहीं पड़ा (पथ में एक निर्देशिका में निर्देशिका कितनी उपयोगी है, जो पथ में नहीं है?)। लेकिन ऐसे मामलों के लिए, जहाँ आप शुद्धता पर भरोसा करते हैं, यह उपयोगी हो सकता है।
उपयोगकर्ता अनजान

1
बहुत बढ़िया! मैं लिनक्स का संस्करण जानने में सक्षम नहीं था (लंबी कहानी - लेकिन कुछ भी आपराधिक नहीं) लेकिन इस कोड ने मेरा दिन बचा लिया :)
obenjiro

2

अन्य सभी उत्तर (अब तक) पैकेज और बायनेरिज़ से निपटते हैं। यदि आपका मतलब "डेस्कटॉप एप्लिकेशन" है, जो आपके स्टार्ट मेनू में दिखाई देते हैं, तो आप कोशिश कर सकते हैं:

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

एक अन्य प्रश्न में अधिक समाधान ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.