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 si tratti di un sistema integrato, 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 avere alcune differenze tra le distribuzioni. Ad esempio /usr/bin/awk
potrebbe essere gawk o mawk. /bin/sh
potrebbe essere trattino o bash in modalità POSIX. Su alcuni sistemi meno recenti, /usr/bin/host
non 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 affermano di essere conformi allo standard e alcune lo fanno solo se installi un pacchetto di compatibilità LSB opzionale. Ad esempio, alcuni sistemi che ho visto non sono dotati di lsb_release
in un'installazione predefinita.
Inoltre, potrebbe essere utile l'elenco dei comandi standardizzati da POSIX.
Un altro approccio al tuo problema è impacchettare il tuo script usando gli strumenti di packaging di ciascuna distribuzione (ad es. RPM per Red Hat, DEB per Debian, ecc.) E dichiarare una dipendenza da qualsiasi altro programma o pacchetto di cui hai bisogno. È un po' laborioso, ma significa che gli utenti vedranno un messaggio di errore più amichevole, che dice loro non solo cosa manca, ma anche quali pacchetti devono installare.
Ulteriori informazioni:
- RPM - Aggiunta di informazioni sulle dipendenze a un pacchetto
- Debian - Dichiarazione delle relazioni tra i pacchetti.
Sui sistemi Linux non incorporati, generalmente puoi contare sulla maggior parte delle utilità GNU:
- coreutils
- bash
- findutils (almeno
find
exargs
, non necessariamentelocate
eupdatedb
) - grep
- gzip
- sed
- tar
più la suite util-linux e la suite procps. Nota che /bin/sh
non è sempre bash, può essere una shell con meno funzionalità come una delle multiple forcelle di ash.
La Linux Standard Base definisce un insieme di utilità comuni con funzionalità previste su tutti i sistemi conformi. Puoi anche aspettarti la maggior parte delle utilità specificate da POSIX. Un'eccezione degna di nota è pax
, che non fa parte dell'installazione predefinita di molte distribuzioni.
Se vuoi mantenere le cose semplici, richiedi l'installazione di un lsb_release
pacchetto. Molte distribuzioni hanno un tale pacchetto che inserisce tutte le dipendenze richieste da LSB.
Su un sistema embedded, tutte le scommesse sono annullate. I sistemi Linux embedded di solito eseguono BusyBox, ma molte utilità e funzionalità sono opzionali, quindi c'è molto poco che puoi essere sicuro di ottenere.
C'è una serie di comandi nella maggior parte se non in tutte le distribuzioni Linux, e del resto, anche le distribuzioni Unix forniranno. Questi sono i comandi obbligatori specificati dallo standard POSIX.
La maggior parte dei comandi che citi (cd
, mkdir
, ls
, echo
, grep
, sed
, awk
, ecc.) ne fanno parte. L'eccezione è ping
come ha giustamente commentato WhiteWinterWolf.