특정 Debian 패키지에 대한 모든 명령 나열

특정 Debian 패키지에 대한 모든 명령 나열

특정 데비안 패키지가 어떤 명령을 제공하는지 알고 싶습니다.

예를 들어, 이라는 패키지를 설치했다고 가정해 보겠습니다 x.deb. 이 패키지에는 제가 사용할 수 있는 몇 가지 명령이 확실히 포함되어 있습니다.

이러한 명령을 나열하는 방법.

compgenbash 명령을 사용하여 시스템에서 사용 가능한 모든 명령 목록을 생성 할 수 있다는 것을 알고 있지만 필요한 것은 특정 패키지뿐입니다.

나는 해결책을 시도했다:

dpkg -L postgresql-9.3 | egrep '(bin|games)/'
/usr/lib/postgresql/9.3/bin/pg_upgrade
/usr/lib/postgresql/9.3/bin/pg_ctl
/usr/lib/postgresql/9.3/bin/pg_resetxlog
/usr/lib/postgresql/9.3/bin/postgres
/usr/lib/postgresql/9.3/bin/pg_xlogdump
/usr/lib/postgresql/9.3/bin/initdb
/usr/lib/postgresql/9.3/bin/pg_controldata
/usr/lib/postgresql/9.3/bin/postmaster

나는 명령을 시도했다postgres

user@userPc:~$ postgres
No command 'postgres' found, did you mean:
 Command 'postgrey' from package 'postgrey' (universe)
postgres: command not found

답변1

이를 사용 dpkg -L pkgname하고 grep 명령으로 파이프하여 bin/and를 검색합니다 games/.

$ dpkg -L bash | grep -E '/(s?bin|games)/'
/bin/bash
/usr/bin/bashbug
/usr/bin/clear_console
/bin/rbash

모든 바이너리가 포함되어 있는지 여부를 확인하려면 $PATH다음 bash 기능을 사용해 보십시오.

find_binaries (){
    dpkg -L "$@" | while read -r; do
        [ -f "$REPLY" -a -x "$REPLY" ] && echo "$REPLY"
    done
}

다음과 같이 호출하세요.

$ find_binaries postfix
...SNIP...
/usr/lib/postfix/postfix-files
/usr/lib/postfix/pipe
/usr/lib/postfix/proxymap
/usr/lib/postfix/local
/usr/lib/postfix/discard
...SNIP...

답변2

1. 작업에 맞게 설계된 도구를 사용하십시오.

가장 쉽고 가장 안정적인 방법은 다음을 설치하는 것입니다 dlocate.

sudo apt-get install dlocate

그럼 당신은 실행할 수 있습니다

dlocate -lsbin package-name

설명된 대로 man dlocate:

-lsbin List full path/filenames of executable files (if any) in package

2. 패키지 데이터베이스 구문 분석

이는 @Winny의 접근 방식과 유사하지만 단순화되었습니다.

apt-file -F list package | cut -d ' ' -f 2 | 
    while read file; do [[ -x $file && -f $file ]] && echo "$file"; done

아직 설치 되지 않은 경우 apt-file다음 명령을 사용하여 설치하고 설정할 수 있습니다.

sudo apt-get install apt-file
sudo apt-file update

위 명령은 apt-file패키지의 내용을 나열한 다음 bash 테스트 -f(파일입니까?) 및 -x(실행 가능합니까?)를 나열하고 두 테스트가 모두 통과하면 파일 이름을 인쇄합니다.

다음 명령과 같은 명령을 사용하면최대실행 가능 파일:

apt-file -L list package | grep -Ew 'bin|sbin'

/opt유사 하거나 심지어는 장소 에서도 실행 파일( /lib다양한 도구 등) 을 얻을 수 있기 때문에 모든 것을 찾을 수는 없습니다 . udev따라서 -w전체 단어를 일치시키기 위해 를 사용하면 파일을 올바르게 식별할 가능성이 높아지지만 경로를 구문 분석하는 것은 좋은 접근 방식이 아니므로 위 방법 중 하나를 사용해야 합니다.

답변3

dlocate이미 설치 하셨다면 ,간단한 방법이 있습니다설치된 패키지의 모든 명령을 나열합니다.

dlocate -lsbin PACKAGE-NAME

just 를 사용하면 dpkg표준 PATH 디렉터리(드문 예외를 제외하고 거의 모든 실행 프로그램임)의 파일을 나열할 수 있습니다.

dpkg -L PACKAGE-NAME… | sed -n 's!^\(/s\?bin\|/usr/s\?bin\|/usr/games\)/!!p' | sort -u

예외는 몇 가지 디렉토리입니다. Debian wheezy로 시작하면 /usr/bin/mh/usr/bin/nu-mh.

패키지가 설치되지 않은 경우 dpkg -L다음으로 교체하세요 apt-file -F list.

apt-file -F list PACKAGE-NAME… | sed -n 's!^\(/s\?bin\|/usr/s\?bin\|/usr/games\)/!!p' | sort -u

다른 디렉터리에 실행 파일이 있지만 직접 실행을 위한 것이 아니므로 여기서는 관련이 없습니다.

이러한 방법은 모두 한 세트의 프로그램을 놓치고 있습니다.대안기구. 예를 들어,ftp패키지에는 및 만 제공되지만 netkit-ftp패키지는 실제로 시스템의 구현 중 하나에 대한 심볼릭 링크로 명령을 제공합니다. 다음 명령(좋은 프로그래밍의 예는 아니며 단지 큰 한 줄임)은 현재 구성된 대체 메커니즘을 통해 패키지에서 제공하는 명령을 나열합니다.pftpftp/usr/bin/ftp/etc/alternatives/ftpftp/usr/bin/netkit-ftp

perl -lwe 'foreach (`dpkg -L @ARGV`) {chomp; ++$p{$_}} foreach (</bin/* /sbin/* /usr/bin/* /usr/sbin/*>) {$e = readlink; next unless defined $e and $e =~ m!^/etc/alternatives/!; $t = readlink $e; print if $p{$t}}' PACKAGE_NAME…

다른 패키지를 가리키는 대체 항목에 대해 현재 구성과 함께 제공될 수 있는 명령을 나열하려면 구문 분석이 필요합니다 /var/lib/dpkg/alternatives.

대체 메커니즘을 구현하는 심볼릭 링크 및 구성 파일은 패키지에 등록되지 않지만 자동으로 등록되므로 postinst제거된 패키지에서 제공하는 대체 항목을 쿼리하기가 어렵습니다(패키지의 설치 스크립트가 규칙을 따르지 않는 경우 실제로 기술적으로 불가능합니다.)

답변4

다음 명령을 사용하고 systemd를 대상 패키지 이름으로 바꿉니다. 이 명령은 사용 가능한 모든 명령과 간략한 소개를 나열합니다.

dpkg -L systemd | grep 'sbin\|bin' | awk -F "/" '{print $NF}' | xargs man | grep ' - ' 2> /dev/null

관련 정보