Shell in Opensuse

Introduzione

La shell molti la chiamano “terminale” ma in fondo quella parola indica uno stato operativo o un programma apposito per far visualizzare la shell. La traduzione più corretta è “riga di comando”, anche se in realtà accediamo su diverse strutture di programmazione quando siamo su riga di comando.

In Windows (che poi si ispira al MS/DOS che poi si ispira al CP/M) si accede ad un programma chiamato command (per la precisione command.com ora CMD) che si occupa di aspettare una serie di comandi in input, eseguirli o fornire servizi.

Ovvia che il command di Windows contenga una gestione dei comandi (il command vero e proprio), i vari programmi di ogni singolo comando (program-command), un leggero editor (un input semplice, ovvero command-prompt o prompt ovvero quello che vediamo come linea di comando). Si può inserire i comandi tramite il command-prompt oppure far eseguire una lista di comandi (batch) basta che abbia l’estensione “.bat”. (esistono altri casi ma non complichiamoci la vita)

In Linux/UNIX è diverso!

In Linux esistono vari (detto shell) gestori di comandi (anche se di solito si usa bash anzi prossimamente dash per Linux e sh in UNIX) e dunque hanno una diversa grammatica per essere usati, i vari programmi (program-command) sono veri e propri programmi messi in /bin e /sbin (ma possiamo usare anche altri), e l’editor (quello che vediamo come linea di comando, command-prompt) è una estensione del gestore dei comandi scelto.

Dunque bisogna scegliere (nelle distribuzioni Linux è già scelto dai costruttori, come base sh, ma l’amministratore può cambiare) un default di gestori di comando quando si apre un terminale o si accede ad una sessione (di base sh, in avanzato bash o dash), si hanno una infinità di comandi da usare indipendenti dalla versione/tipo del gestore e si può inserire i comandi tramite il command-prompt scelto oppure far eseguire una lista di comandi basta che sia un file di testo (meglio in codifica UTF8) e all’inizio, prima-riga, che gestore si usa (esempio “#!/bin/bash”) che abbia l’attributo d’esecuzione e volendo abbia l’estensione “.sh” ma quest’ultimo solo per riconoscerlo visivamente.

È meglio o è peggio? La scelta Microsoft è verso la semplicità ma la scelta UNIX/Linux è verso la potenza (meno “peso-macchina”, più versatilità e sicurezza) però questo è sempre in discapito della semplicità.

Operatività

Quindi si possono utilizzare diversi gestori di shell, specie se si vuole eseguire un file (detto batch) che contenga diversi comandi di shell scelta, bisogna come prima riga mettere quale utilizzare.

Esempio di un file di testo (nell’esempio lo chiamiamo test.sh)

#!/bin/sh
read name 
echo "$name It is a test"

In questo file gli diciamo di usare come gestore di shell il sh.

Il programmino shell, non fa altro che leggere un nome in input e poi visualizzarlo.

Se avessimo scritto

#!/bin/bash
read name 
echo "$name It is a test"

Come prima riga gli diciamo di usare come gestore di shell il bash e non il sh.

Specie di Shell di Linux che sono comuni e sua dicitura dopo “#!”:

  • Bourne Shell (/usr/bin/sh o meglio /bin/sh)
  • Bourne Again Shell (/bin/bash)
  • C Shell (/usr/bin/csh)
  • K Shell (/usr/bin/ksh)
  • Shell per Root (/sbin/sh)

Possiamo anche diglielo esternamente quando l’eseguiamo e nell’esempio usiamo sh:

/bin/sh test.sh

Ovviamente se cerchiamo d’eseguirlo non funzionerà, per sicurezza, fintato che su quel file di testo non gli sia dato “l’attributo d’esecuzione”, che si può dare tramite il comando:

chmod +x test.sh

Oppure “l’attributo d’esecuzione” si può dare con qualche utilità come i gestori di file (esempio Dolphin).

Per usarlo da riga di comando basta rendere “base” sul programma-terminale scelto oppure basta poi digitare il nome-tipo per renderlo effettivo. Esempio se noi usiamo il command-prompt di sh, basta digitare bash per lavorare su bash.

 

Vari tipi

Bene, se la cosa vi intrippa, adesso potete scandagliare le varie documentazioni per ogni shell che userete.

Tenete conto che di base su OpenSuse si usa sh e bash, forse in futuro dash, ma tutte le shell sono disponibili sul
https://software.opensuse.org/search

Semmai posso darvi una re spiegazione di cosa sono quelle più diffuse/particolari:

-sh

Questa è la più leggera, veloce shell del momento e derivata direttamente da UNIX (prossimamente però sostituita da dash? Come su Ubunto e derivati), è di base su tutti i Linux, però è molto semplice e non permette costruzioni grammaticali (come programmazione) molto elaborate. Di serie su OpenSuse.

-dash

Questa è la più leggera, veloce shell del momento, salvo qualche caso in cui vince ancora la sh, però è molto complessa come la bash (con qualche magagna però) e quindi permette costruzioni grammaticali (come programmazione) molto elaborate.

https://software.opensuse.org/package/dash

-bash

Questa permette costruzioni grammaticali (come programmazione) molto elaborate non possibili con sh, però è tra le più lente. Di serie su OpenSuse.

-fish

Questa permette costruzioni grammaticali (come programmazione) molto elaborate, ma il suo forte è il command-prompt che permette di avere la colorazione dei comandi, pre-inserimento, ecc.. che facilita l’azione da riga di comando. Contiene anche dei comandi in più. Non è di serie su OpenSuse, lo consiglio per chi fa moltoooo uso della riga di comando.

https://software.opensuse.org/package/fish

https://fishshell.com/

-Altri

Esistono tantissimi, ma sono più incentrati sul fattore grammaticale (come programmazione) che su altri aspetti. Esistono sul repo di OpenSuse, ma oramai sono perdenti.

 

FAQ

 

-Si possono compilare i files batch di Linux?

Esistono diversi “compilatori” batch, ma tutti abbandonati per evidenti insuccessi, il SHC ( http://www.linux-magazine.com/Online/Features/SHC-Shell-Compiler ) in realtà compattava il file e integrava l’interprete in tutto-in-uno. Conviene pertanto usare un “traduttore” da bash/sh verso il linguaggio C o trascrivere il tutto in linguaggio C.

 

-Esiste qualcosa di più veloce del sh?

Per adesso dash si avvicina alla sua velocità e spesso, in occasione di espressioni complesse, lo supera, in altri casi invece è leggermente più lento, comunque è possibile una grammatica più elevata. In Canonical e quindi su Ubunto e derivati è divento la shell di base sostituendo sh ed è stata proposta per tutte le distro Linux. Più veloce ancora esiste il C (non il C++) ed è stato proposto il Limbo che però funziona per ora solo in Plan9 e Inferno che poi sono UNIX. Notate che un linguaggio interpretato è meglio di uno compilato per piccole operazioni.
-Perché non il C++

È meno veloce del C. Il C comunque è meno propenso all’errore di forma del C++ e quindi è meglio per i piccoli programmi. Volendo potete usarlo.
-È complicato?

No, ma poi dipende dalle persone, di certo è più complesso di quello di Windows, comunque di solito basta una “forma base” e non da esperto.

 

-Posso crearmi dei miei comandi?

Certo basta introdurli poi in /bin. Se particolare per un programma in /usr/bin. Certo che devono rispondere allo standard Posix se vuoi distribuirli.
-Cosa mi consiglio come guida per imparare le basi?

(in Inglese) http://www.w3big.com/it/linux/linux-shell.html

in italiano base

http://www.wowarea.com/italiano/linux/shell.htm

http://www.html.it/guide/shell-scripting-la-guida/

http://www.html.it/pag/51710/introduzione-allo-shell-scripting/

http://www.w3big.com/it/linux/linux-shell.html (auto-tradotto)

http://wiki.ubuntu-it.org/Programmazione/LinguaggioBash

avanzata in italiano

http://www.pluto.it/files/ildp/guide/abs/index.html

https://www.fis.uniroma3.it/CALCOLO_DOC/unix/appuntilinux/al41.htm
-Ma serve in Linux?

In OpenSuse si cerca di usare il Yast come base, comunque conoscere il prompt è molto utile, specie se dovrete lavorare su terminale o peggio su distro Linux più complicate. Come dice il saggio son più veloci dieci dita (sul terminale) che una sul mouse! 😀
-Ma la prematurata con scappellamento a destra?

In fondo a destra!

 

Grafica

Essendo testuale non pensate che possa essere anche grafica? Vi sbagliate!

Prima dei window manager (da non confondere con Windows di Microsoft) come IceWM, KDE, Gnome, Windows (dopo NT), OSX-Next, ecc.., esisteva un sistema per fare finestre chiamata “interfaccia testuale” (text user interface o Tui).

In definitiva lo stesso Windows fin al 3 era fatta con questa tecnica molto economica come “peso macchina” (poco consumo di RAM e CPU ma in definitiva Hardware), ma anche operabile da terminale all’interno di un terminale X Window, oltre SSH connessioni, su una RS-232 interfaccia (per dispositivi embedded) e tutti tipi di shell remote.

La Novell all’inizio del WM (window manager) fece una intera libreria di visualizzazione per passare comodamente da una visualizzazione sotto Tui o sotto WM per un programma.

Infatti partiamo da un programma della Novell che è di base su OpenSuse e Suse per gestire il computer.

Qui due esempi:

 

-Yast

Yast di base su OpenSuse e Suse per gestire il computer è usato ma non di base anche in altre distro (vedi Red-Hat) in quanto sotto licenza GPL.

Qui si possono trovare tutti gli strumenti anche server ed è usabile anche in Tui grazie alla famosa libreria il che consente di scrivere moduli in linguaggio Ruby (si possono usare anche altri linguaggi come Java) anche personalizzati.

Si racconta che anche Mandrake volesse utilizzarla di base, del resto possiede un “manager” simile ma poi il tracollo della azienda francese fece perdere tanti progetti.

 

-MC

Immagine https://upload.wikimedia.org/wikipedia/commons/9/9b/Midnight_Commander_4.7.0.9_on_Ubuntu_11.04.png

MC si ripropone come il clone di Norton Commander (NC) di da Miguel de Icaza nel 1994(GNU licenza) ed è di base su Mageia e Red-Hat ma non OpenSuse, quindi consiglio caldamente d’installarlo, esiste per una varietà infinita di OS e pure per Windows.

L’interfaccia principale è costituito da due pannelli che visualizzano il file system. Selezione dei file viene fatto usando i tasti freccia, il tasto “insert” viene usato per selezionare i file e le tasti funzione eseguire operazioni come i file di ri-denominazione, la modifica e la copia oppure se installato il mouse (di sistema) si può usare anche quello.

Tra le tantissime possibilità (pure FTP), esiste un editor “mcedit” che può essere usato anche esternamente al MC che è fantastico!

Sito:

https://midnight-commander.org/

Qui interessanti manuali in italiano:

https://www.fis.uniroma3.it/CALCOLO_DOC/unix/appuntilinux/al62.htm

http://wwwcdf.pd.infn.it/AppuntiLinux/file_manager_midnight_commander.htm
Ciaooooooooooooooooooooooooooooooooooooooo

 

 

 

 

Precedente Wine su Suse ovvero un “Windows” Successivo Risparmio energetico su Linux