Avendo una certa esperienza con Linux, probabilmente sai che non puoi semplicemente condividere un comando o un'utilità tra i sistemi. Il motivo per cui non puoi semplicemente copiare un eseguibile da un sistema a un altro è a causa delle dipendenze, come librerie e altri pacchetti di supporto. Certamente alcune utilità possono essere copiato ma questo non è universalmente così. Se hai dimenticato quale pacchetto hai installato che includeva nslookup
comando, ad esempio, hai bisogno di un modo per trovarlo.
Inoltre, una volta trovato il pacchetto a cui appartiene un comando, potresti voler scoprire da quale repository hai installato il pacchetto. I repository di base di AppStream , BaseOS e Extra contengono molto, ma certamente non tutti dei pacchetti di cui potresti aver bisogno o che potresti incontrare. In questo articolo, esplorerò alcuni metodi per interrogare il sistema per trovare repository, pacchetti e comandi correlati.
- I pacchetti contengono comandi, utilità e librerie
- I pacchetti hanno dipendenze
- I repository contengono, archiviano e forniscono pacchetti
Classificazione del tipo di file
L'utilità che stai utilizzando è uno script, un testo normale o un comando? È compilato? Qual è la posizione del file? Potresti volere alcune informazioni di base sull'utilità. Il which
comando individua un file se è nel tuo percorso. Dovrai individuare un file prima di poterlo identificare ulteriormente.
$ which mtr
/usr/sbin/mtr
Per visualizzare le informazioni sul tipo di file, il file
il comando è indispensabile.
$ file mtr
mtr: cannot open `mtr' (No such file or directory)
$ file /usr/sbin/mtr
/usr/sbin/mtr: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=d34479cefafe7299b65d8375769c63978c6c453f, stripped, too many notes (256)
Il primo tentativo è fallito perché il file
il comando non conosce la posizione di mtr
comando. Dopo aver fornito il percorso completo a file
, le informazioni vengono visualizzate.
Ecco un esempio di un file eseguibile che non è stato compilato.
$ file /usr/sbin/ifcfg
/usr/sbin/ifcfg: POSIX shell script, ASCII text executable
Come puoi vedere, il file
il comando è importante da conoscere e che sicuramente utilizzerai nel corso della tua carriera.
[ Ai lettori è piaciuto anche:gestione dei pacchetti Linux con YUM e RPM ]
Trovare il pacco
Il nslookup
comando è uno che usi frequentemente ma non è installato su nessuno dei sistemi nel tuo nuovo lavoro. Vuoi installarlo ma non ricordi quale pacchetto lo contiene e stai tentando di installarlo come nslookup
fallisce.
# dnf -y install nslookup
Last metadata expiration check: 2:44:51 ago on Tue 10 Nov 2020 03:27:27 PM CST.
No match for argument: nslookup
Error: Unable to find a match: nslookup
Per trovare il pacchetto che contiene nslookup
, puoi eseguire una ricerca "inversa" utilizzando il rpm
comando.
# rpm -qf nslookup
error: file /root/nslookup: No such file or directory
Cosa c'è che non va qui? Il rpm
comando non riesce a trovare nslookup
ma è installato perché l'hai usato. Attesa. Guarda il percorso:/root/nslookup
. Non c'è nslookup
comando nella directory corrente (home di root). Individua nslookup
usando il which
comando e quindi emettere il rpm
comando.
# which nslookup
/usr/bin/nslookup
# rpm -qf /usr/bin/nslookup
bind-utils-9.11.13-6.el8_2.1.x86_64
Vedi quel nslookup
fa parte di bind-utils
pacchetto. Ora puoi copiarlo sugli altri tuoi sistemi e usarlo come faresti normalmente.
# nslookup google.com
/opt/nslookup: error while loading shared libraries: libdns.so.1107: cannot open shared object file: No such file or directory
L'errore ti dice che nslookup
comando ha dipendenze che non sono state soddisfatte sul nuovo sistema in cui l'hai copiato. La soluzione è installarlo individualmente su ciascun sistema utilizzando DNF/YUM.
Rivelazione delle dipendenze del pacchetto
Ti piace molto nslookup
comando e vorresti averlo disponibile su tutti i tuoi sistemi. Ti rendi conto dopo un tentativo fallito che non puoi semplicemente copiarlo su un altro sistema e aspettarti che funzioni. Dopo molte ricerche, scopri che il nslookup
comando ha diverse dipendenze che devono essere soddisfatte. Quali sono queste dipendenze?
# dnf deplist nslookup
Last metadata expiration check: 3:00:24 ago on Tue 10 Nov 2020 03:27:27 PM CST.
Questo significa che non ci sono dipendenze per nslookup
? No. Significa che hai tentato di trovare le dipendenze per un comando anziché per un pacchetto.
# dnf deplist bind-utils
Last metadata expiration check: 0:00:14 ago on Tue 10 Nov 2020 06:29:37 PM CST.
package: bind-utils-32:9.11.13-6.el8_2.1.x86_64
dependency: /usr/libexec/platform-python
provider: platform-python-3.6.8-23.el8.i686
provider: platform-python-3.6.8-23.el8.x86_64
dependency: bind-libs(x86-64) = 32:9.11.13-6.el8_2.1
provider: bind-libs-32:9.11.13-6.el8_2.1.x86_64
*** longer list of dependencies ***
dependency: rtld(GNU_HASH)
provider: glibc-2.28-101.el8.i686
provider: glibc-2.28-101.el8.x86_64
Ricorda che pacchetti avere dipendenze. Elencare le dipendenze può essere utile se vuoi soddisfarle manualmente o se ritieni che le nuove dipendenze possano interferire o essere incompatibili con i pacchetti e le dipendenze già installati sul tuo sistema.
Identificazione del repository
Hai visto un collega amministratore di sistema usare lo strumento di informazioni hardware (hwinfo
) comando sul suo sistema. Provi il comando sul tuo sistema ma ricevi un errore "comando non trovato". Quindi tenti di installarlo.
# dnf -y install hwinfo
Last metadata expiration check: 0:09:34 ago on Tue 10 Nov 2020 06:42:15 PM CST.
No match for argument: hwinfo
Error: Unable to find a match: hwinfo
Chiedi al tuo collega di dirti dove ha preso il hwinfo
pacchetto. Esegue la seguente query per trovarne l'origine.
# dnf list hwinfo
Last metadata expiration check: 0:11:17 ago on Tue 10 Nov 2020 06:42:15 PM CST.
Installed Packages
hwinfo.x86_64 21.47-9.el8 @epel
Nota che la fonte sembra essere un repository identificato come epel
. Le chiedi inoltre di dirti come impostare epel
deposito. Si ricorda che epel è in realtà un pacchetto RPM installabile ma non ricorda il suo nome completo. Esegue la seguente query per identificarlo.
# rpm -qa |grep epel
epel-release-8-8.el8.noarch
Ora puoi installare epel-release
pacchetto e quindi installare il hwinfo
pacchetto.
Nota:il epel-release
repository è la configurazione del repository Extra Packages for Enterprise Linux ed è la prima cosa che installo su qualsiasi nuovo sistema che incontro che non lo ha.
[ Download gratuito:cheat sheet dei comandi avanzati di Linux. ]
Conclusione
Linux fornisce ai suoi amministratori molte utili utilità e comandi per trovare informazioni sul sistema e sui suoi componenti. È necessario aggiungere questi comandi e utilità alla casella degli strumenti dell'amministratore di sistema. Come puoi vedere da questo articolo, non è necessario conoscere ogni opzione oscura di un comando per ottenere ciò di cui hai bisogno. Usa man
pagine per quelli.