Quali sono i comandi standard disponibili in ogni distribuzione basata su Linux?


39

Vorrei sapere quali sono i comandi standard disponibili in ogni sistema Linux.

Ad esempio se ottieni un debian / ubuntu / redhat / suse / arch / slackware ecc., Troverai sempre lì comandi come:

cd, mkdir, ls, echo, grep, sed, awk, ping ecc.

So che alcuni dei comandi citati sono integrati nella shell, ma altri no, ma sono sempre lì (in base alle mie conoscenze ed esperienze finora).

D'altra parte comandi come gawk, parted, traceroute e altri comandi abbastanza famosi non sono installati di default in diverse distribuzioni Linux.

Ho fatto diverse ricerche sul web ma non ho trovato una risposta diretta a questo.

Lo scopo è che vorrei creare uno script di shell e che dovrebbe fare alcuni controlli di integrità se i comandi utilizzati nello script sono disponibili nel sistema. In caso contrario, dovrebbe richiedere all'utente di installare i file binari necessari.


5
Solo un suggerimento: " dovrebbe fare alcuni controlli di integrità se i comandi utilizzati nello script sono disponibili nel sistema " suona molto come Autoconf .
sr_

Sicuramente un caso di auto-configurazione ... o forse suo cugino più scientifico, prometto teoria .
Wildcard il

@Wildcard, credo che qualsiasi sistema di gestione della configurazione sarebbe un sovraccarico per un caso del genere, a meno che non si vogliano continui controlli di integrità e autorigenerazione del sistema anche dopo l'installazione iniziale.
Vangelis Tasoulas,

@VangelisTasoulas, io non la penso così. In una configurazione a utente singolo come un computer di casa, perché dovresti scriverlo? La gestione della configurazione sarebbe eccessiva, ma lo stesso sarebbe un controllo tramite script rispetto al manuale. In uno scenario in cui sono presenti più caselle in cui si desidera garantire la coerenza, gli script non sarebbero eccessivi, ma neppure la configurazione della configurazione. Oppure sei uno sviluppatore di software che desidera solo eseguire controlli di integrità durante l'installazione del pacchetto per il tuo prodotto? Dipende dal tuo scenario, sì, ma se vuoi gestire la tua configurazione, uno strumento di gestione della configurazione non è eccessivo. ;)
Wildcard

1
@Wildcard, quando ho scritto questa domanda stavo pensando a quest'ultimo: voglio solo eseguire i controlli di integrità durante l'installazione in una singola macchina, al fine di garantire che il software funzionerà correttamente. Naturalmente, se si desidera gestire più server e gestire distribuzioni distribuite ecc., Sono d'accordo che la gestione della configurazione è la strada da percorrere a lungo termine.
Vangelis Tasoulas,

Risposte:


41

Sfortunatamente non c'è alcuna garanzia che qualcosa sia disponibile.

Tuttavia, la maggior parte dei sistemi avrà coreutils GNU . Questo da solo fornisce circa 105 comandi. Probabilmente puoi fare affidamento su quelli a meno che non sia un sistema incorporato, che potrebbe invece utilizzare BusyBox .

Probabilmente puoi anche fare affidamento su bash , cron , GNU findutils , GNU grep , gzip , iproute2 , iputils , man-db , module-init-tools , net-tools , passwd ( passwd o shadow ), procps , tar e util- Linux .

Si noti che alcuni programmi potrebbero presentare alcune differenze tra le distribuzioni. Ad esempio /usr/bin/awkpotrebbe essere gawk o mawk . /bin/shpotrebbe essere trattino o bash in modalità POSIX . Su alcuni sistemi meno recenti, /usr/bin/hostnon ha la stessa sintassi della versione BIND , quindi potrebbe essere meglio usare dig .

Se stai cercando alcuni standard, Linux Standard Base definisce alcuni programmi comunemente trovati , ma non tutte le distribuzioni dichiarano di essere conformi allo standard, e alcuni lo fanno solo se installi un pacchetto di compatibilità LSB opzionale. Ad esempio, alcuni sistemi che ho visto non vengono forniti con lsb_releaseun'installazione predefinita.

Inoltre, potrebbe essere utile l' elenco dei comandi standardizzati da POSIX .

Un altro approccio al tuo problema è impacchettare lo script usando gli strumenti di impacchettamento di ogni distribuzione (ad esempio RPM per Red Hat, DEB per Debian, ecc.) E dichiarare una dipendenza da qualsiasi altro programma o pacchetto di cui hai bisogno. È un po 'di lavoro, ma significa che gli utenti vedranno un messaggio di errore più amichevole, dicendo loro non solo ciò che manca, ma quali pacchetti devono installare.

Ulteriori informazioni:


Il pacchetto-e-aggiungi-dipendenze -idea è eccezionale, batte le immersioni in Autoconf a mani :)
basse

2
ottima risposta, sono d'accordo con tutto. aggiungerei un ulteriore avvertimento: tieni conto delle opzioni extra specifiche della particolare versione del comando che stai usando ... potrebbero non funzionare su tutte le versioni (questo è successo in un progetto in cui ho lavorato).
JoséNunoFerreira,

Suppongo che non ci sia un file in chiaro con un elenco di questi comandi ovunque? pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html può essere facilmente convertito in quello, ma manca ancora un sacco di cose.
Dylan Nicholson il

7

Sui sistemi Linux non incorporati, puoi generalmente contare sulla maggior parte delle utility GNU:

oltre alla suite util-linux e alla suite procps . Nota che /bin/shnon è sempre bash, può essere una shell con meno funzionalità come una delle forchette multiple di cenere .

La base standard Linux definisce una serie di utility comuni con funzionalità che sono previste su tutti i sistemi conformi. Puoi anche aspettarti la maggior parte delle utility specificate da POSIX . Un'eccezione notevole è pax, che non fa parte dell'installazione predefinita di molte distribuzioni.

Se vuoi semplificare le cose, richiedi l'installazione di un lsb_releasepacchetto. Molte distribuzioni hanno un tale pacchetto che attira tutte le dipendenze richieste dall'LSB.

Su un sistema incorporato, tutte le scommesse sono disattivate. I sistemi Linux integrati di solito eseguono BusyBox , ma molte utilità e funzionalità sono opzionali, quindi c'è poco che si possa essere sicuri di ottenere.


6

Esiste un insieme di comandi la maggior parte se non tutte le distribuzioni Linux, e per questo motivo, forniranno anche le distribuzioni Unix. Questi sono i comandi obbligatori specificati dallo standard POSIX .

La maggior parte dei comandi che citi ( cd, mkdir, ls, echo, grep, sed, awk, ecc) sono di esso. L'eccezione è pingcome giustamente commentato da WhiteWinterWolf.


1
In realtà pingnon fa parte di POSIX ...
WhiteWinterWolf

La homepage di POSIX afferma che si concentrano sulla garanzia della "portabilità delle applicazioni a livello di codice sorgente" , vale a dire. secondo la mia comprensione, sono interessati all'API di sistema, al comportamento del sistema (compresa la shell) e ai comandi che possono essere utilizzati per configurare, compilare e installare un'applicazione e gestirne il codice sorgente.
WhiteWinterWolf

Essi non si preoccupano di reti utilities ( "Sistema di configurazione e la disponibilità delle risorse" sono esplicitamente out-of-scope), i comandi in modo onnipresenti, come ping, ifconfig, telnet, ecc, non fanno parte di questo standard (né alcun altro per quanto ne so, solo che mirare alla compatibilità con le "implementazioni storiche" nel migliore dei modi).
WhiteWinterWolf
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.