it-swarm-ko.tech

설치된 모든 프로그램을 어떻게 나열합니까?

배포와 함께 제공된 프로그램과 수동으로 설치 한 두 프로그램을 모두 나열하려면 어떻게합니까?

55
InquilineKea

배포판에 따라 다릅니다.

  • 적성 기반 배포판 (우분투, 데비안 등) : dpkg -l
  • RPM 기반 배포판 (Fedora, RHEL 등) : rpm -qa
  • pkg * 기반 배포판 (OpenBSD, FreeBSD 등) : pkg_info
  • 포티지 기반 배포판 (젠투 등) : equery list 또는 eix -I
  • 팩맨 기반 배포판 (Arch Linux 등) : pacman -Q
  • Cygwin : cygcheck --check-setup --dump-only *
  • 슬랙웨어 : slapt-get --installed

그러나 이들 모두는 프로그램 대신 패키지 를 나열합니다. 정말로 프로그램을 나열하고 싶다면 $PATH, bash의 compgen를 사용하여 다음과 같이 수행 할 수 있습니다.

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
78
Chris Down

질문의 두 번째 부분에 답하기 (실제로 Chris 'answer 에 추가 할 내용은 없음)] :

수동으로 설치된 프로그램 및 해당 구성 요소를 나열하는 방법은 일반적으로 no 방법이 있습니다. 패키지 관리자를 사용하지 않은 경우 어디에도 기록되지 않습니다. 당신이 할 수있는 것은 표준 위치에서 Chris가 제안한 것과 비슷한 방식으로 바이너리를 찾는 것입니다. guess 여기서 some 라이브러리 또는 some 매뉴얼 페이지 등이 있습니다. 따라서 가능할 때마다 항상 패키지 관리자 를 사용하여 프로그램을 설치해야합니다.

13
rozcietrzewiacz

프로그램은 PATH를 통해 접근 할 수 있어야합니다. 경로에있는 모든 것을 나열하십시오.

ls ${PATH//:/ }

약 3k-4k 프로그램의 결과를 기대하십시오.

소수의 오 탐지 가능성을 배제하기 위해 접근 방식을 세분화 할 수 있습니다.

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

그것은 나에게 차이를 만들지 않았다.

4
user unknown

다른 모든 답변 (지금까지)은 패키지와 바이너리를 처리합니다. 시작 메뉴에 나타나는 "데스크톱 응용 프로그램"을 의미하는 경우 다음을 시도해보십시오.

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

또 다른 질문 에 대한 더 많은 솔루션.

2
Rolf