Polecenie znalezienia pakietu źródłowego pliku binarnego?

33

Wiem, że istnieje whichpolecenie, które odzwierciedla pełną nazwę pliku binarnego (np which sh.). Jestem jednak całkiem pewien, że istnieje polecenie, które powtarza pakiet, który udostępnia określony plik binarny. Czy istnieje takie polecenie? Jeśli tak, co to jest? Chciałbym móc uruchomić to:

commandName ls

i dostać

coreutils

na przykład.

Delan Azabani
źródło

Odpowiedzi:

36

Wydaje mi się, że szukasz dpkg -Spolecenia (zobacz także często używane opcje dpkg ).

nik
źródło
4
Dziękuję Ci! dpkg -S `which COMMANDHERE`pracował dla mnie.
Delan Azabani
Gentoo: qfile <nazwa>
Siergiej
dpkg -Sznajduje nazwę nazwy pakietu binarnego, która może różnić się od nazwy pakietu źródłowego (kodu).
Tino
Dla kompletności, -Sjest to krótka forma --searchopcji, która jest właściwie opcją dla dpkg-querypolecenia (ale zwykła dpkgteż działa)
waldyrious
10

Jeśli chcesz znaleźć pliki w pakiecie, który nie został jeszcze zainstalowany, użyj apt-file

apt-get install -y apt-file
apt-file update

Następnie, aby znaleźć coś:

apt-file search /usr/bin/file

lub

apt-find search file

Gdzie „plik” to nazwa tego, czego szukasz.

Jeśli nie masz ochoty przechodzić przez to na każdym systemie Debian, możesz użyć tego skryptu:

#!/bin/bash
which apt-get >/dev/null || { echo apt-get not found >&2; exit 1; }
which apt-file >/dev/null || { apt-get install -y apt-file;  apt-file update; }
unset i; IFS=$'\x0a'; select i in $( apt-file search "/$@" ); do 
    test -n "$i" || break; apt-get install "${i%% *}"; done

Właśnie wtedy to podkręciłem, ale wydaje się, że działa dobrze.

Uwaga: „dpkg -S” znajduje tylko rzeczy, które już zainstalowałeś.

Orwellophile
źródło
3
Używanie tego -yparametru jest niebezpieczne, może powiedzieć „tak” dowolnej liczbie rzeczy. W skrypcie może to być w porządku, ale pierwsze polecenie powinno naprawdę czytać apt-get install apt-filebez, -yponieważ nie możesz wiedzieć, jak wygląda system użytkownika.
jmiserez