Copy Link
Add to Bookmark
Report

Guida a Unix

DrWatson's profile picture
Published in 
guide hacker
 · 30 May 2019

Guida a Unix

Vi anticipo subito di kosa parlerò in questa guida, così a ki non interessa può fare a meno di leggerla. :o\

  • Come iniziare

  • I comandi principali

  • La programmazione con la shell di Bourne e la C shell

  • Programmazione in C in ambiente Unix

Ringraziamenti:
Qui ci si dimentica sempre di qualcuno…

Gli argomenti trattati partono dal presupposto ke abbiate già il sistema operativo installato e quindi riusciate almeno ad arrivare a questo punto:
unixtype!login:_
dove inserirete il vostro ID utente e poi avrete
Password:
dove inserirete con molta attenzione la vostra password, questa non è leggibile durante la digitazione quindi in caso di errore avrete un messaggio fatto così:
login incorrect
Se avete inserito tutto correttamente vedrete visualizzato il prompt della shell e sarete pronti ad utilizzare i comandi Unix.
Unix dispone di parekkie shell utilizzabili, quelle disponibili dipendono dalla versione di Unix installata, la shell è in pratika l’interfaccia fra voi ed il computer, le due shell più famose sono la “ shell di Bourne” e la “C shell”. Le shell le potete distinguere dalla diversità del prompt, quella Bourne utilizza il simbolo $, la C shell invece il simbolo % con un contatore ke tiene nota dei comandi ke date, avrete quindi 1%, 2%, 3% ecc… Le due shell fondamentalmente lavorano allo stesso modo, quando citerò comandi ke si differiscono lo farò presente, sempre se mi ricordo…
Faccio un esempio delle differenti shell? Ok, lo faccio:

xenix386!login: rhost
Password:

Welcome to SCO XENIX System !
From
The Santa Cruz Operation, Inc.

Terminal type is ansi
$_

login: rhost
Password:
Welcome to UCXX Unix.
1%_

Le shell di Unix


C’è da dire ke alkune installazioni hanno shell molto più complete, ma a parte il fatto ke non le conosco tutte… non finirei mai questa guida se dovessi citarle, quindi tratterò solo queste ke sono da considerarsi quasi degli standard, anzi la shell di Bourn ($) è davvero quella standard di Unix.
Più andremo avanti, più vi renderete conto ke questa guida non ha ne capo ne coda, cioè non avrà un inizio, una parte centrale ed una fine, ma sarà come mi viene in mente.
Abbiamo dunque parlato dell’accesso al terminale inserendo Id e Password, ora invece di continuare con il corpo della guida, vediamo come ci si disconnette dal sistema e non perkè la guida finisce qui, è solo ke lo dico adesso come ci si disconnette e mi tolgo il pensiero.

Scollegamento


Quando terminate una sessione di Unix dovete scollegarvi dal terminale, se non lo fate qualcun altro potrebbe avere accesso immediato ai vostri file. Se vi scollegate correttamente sullo skermo riapparirà il prompt di login. Il processo di scollegamento varia a seconda della shell utilizzata, la shell di Bourne ($) usa il comando EXIT, mentre la C shell usa il comando LOGOUT, in quale caso funzionano ambedue i comandi, ma non kiedetemi il perkè ke non lo so.
Per esempio se al promp %_ digitate “exit”, Unix potrebbe rispondere inviando il comando “logout”, ma se avete il prompt $_ e digitate “logout” , vedrete il messaggio logout: logout not found, spiegando ke il comando “logout” non è valido.
Quasi tutte le versioni di Unix riconoscono il comando “Ctrl-D” come una rikiesta di scollegamento, ma mi sembra di aver capito ke in molte installazioni di Unix questo comando sia stato disabilitato, in quanto la rikiesta di disconnessione immediata termina anke altri processi di Unix.

Inserimento delle righe di comando


Quando digitate dopo il prompt della shell, state inserendo dei caratteri un un’area di memoria nota come “Buffer della riga di comando”. Quando pigiate RETURN alla fine della riga di comando, Unix accetta il contenuto del buffer come ruga di comando e lo elabora. Se Unix non capisce il vostro comando vi invierà un msg di errore come: command: not found . Quando succede questo, rileggete il comando ke avete dato, di solito vi renderete conto di aver commesso un errore di battitura. Per esempio se siete nella C shell e digitate logoff vi verrà visualizzato quell’errore e vi renderete conto ke il comando corretto era logout e non logoff.

Operazioni sui file


Precisiamo ke Unix distingue tra maiuscole e minuscole, per cui il comando “cp”, non può essere digitato come “CP” ed aspettarvi ke funzioni. Uno dei comandi + semplici è per esempio quello di far visualizzare ad Unix la data e l’ora. Basta digitare “date” dopo il prompt della shell per ottenere questo:

 
$ date
Sun Mar 11 13:59:43 PDT 2001

Quindi riapparirà il prompt della shell “$” in attesa di un nuovo comando, in quanto il comando date non rikiede alkuna informazione da voi.
Per visualizzare a video il contenuto di una directory il comando da da re è “ls”, per avere cioè una LiSta del contenuto della dir. Se la vostra cartella contiene file allora avrete un risultato + o – simile a questo:

 
$ ls
indirizzi
lamahlist
slava_doc
$_

I file vengono visualizzati alfabeticamente, ma si può associare al comando ls quale opzione per avere una visualizzazione personalizzata.
(spero di ricordarmeli tutti o quasi)

 
Comando: ls
Scopo: Elencare i file in una directory
Formato: ls [opzioni] [lista-file]
Opzioni:
-a Elenca tutti i file, compresi quelli nascosti.
-d Elenca soltanto i nomi delle direcotory, non dei file ordinari
-g Mostra info sui gruppi di un elenko
-l Mostra le liste lunghe con informazioni estese
-r Produce una lista in ordine inverso
-s Produce un elenko per dimensione crescente
-t Elenca in ordine di tempo, a partire dal + recente

Queste opzioni possono essere associate, cioè possiamo dare il comando ls mettendo 2 opzioni, quindi “ls – ra”. L’opzione + usata (da me) è ls –l ke produce un elenko lungo come questo:

 
ls –l
-rwxr-xr-x 1 rhost 14334 Nov 19 14:58 indirizzi
-rwxrw-r-x 1 rhost 1298 Mar 3 09:32 lamahlist
-rw-rw-rw 1 rhost 8900 Feb 12 09:56 salva_doc
(accesso) (link) (user) (dimens) (ultima modica) (nome file)

Da notare ke i nomi dei file sono posizionati a dx della skermo, alcune versioni di Unix però possono mostrare questo elenko in modo leggermente diverso, potreste ottenere per esempio oltre al nome utente (user) anke il nome del gruppo di appartenenza, ma non so dirvi esattamente quali versioni siano. Le altre opzioni limitano o espandono il nr di file ke sono elenkati . Ogni directory contiene file nascosti oltre a quelli ke vedete elencati, se attivate l’opzione –a nel comando vedrete i nomi dei file nascosti oltre a quelli ordinari.
Per ottenere la visualizzazione di un calendario, (voi direte: Ma a noi ke ce frega der calendario?) Zitti!!! Capirete perkè. Dicevo, per visualizzare a video un calendario il comando da conoscere è “cal”.
Alkuni sistemi al comando cal visualizzano il mese precedente, quello in corso ed il successivo, altri invece non conoscono il comando senza argomenti, cioè per visualizzare un mese il comando sarà:
cal 3 2001 per l’anno cal 2001.

Ridirezione


Abbiamo detto quindi ke il comando cal ci permette di avere a video un calendario… ma se noi lo volessimo su file? Boh!! ☺
Useremo la “ridirezione” nella riga di comando per cambiare l’output dallo skermo del terminale ad un file. (per output intendo lo skermo, per input la tastiera, dovevo dirlo prima, ma non mi va di tornare indietro e trovare un punto adatto per inserirlo).
Il simbolo di ridirezione è il segno “maggiore” sulla tastiera (>). Se digitate cal 2001 > anno2001, il calendario del 2001 non viene visualizzato a video, ma verrà inviato in un file denominato anno2001, se date il comando date > salva.data, le informazione su data e ora ke normalmente sarebbero visualizzate a skermo, saranno trasferite nel file salva.data. Allo stesso modo potete creare un file contenente l’elenko della directory. Il comando da dare è ls > mieifile, dove “mieifile” conterrà l’output del comando ls. Siccome Unix è stupido, perkè crede ke noi siamo intelligenti, presume ke quando diamo un comando sappiamo al 100% quello ke stiamo facendo e quindi non si preokkupa di avvisarci sei il file “mieifile” esiste e lo sovrascrive… :o\ ma noi siamo sicuri di ciò ke stiamo facendo? Io no, mai. Per ridurre il problema possiamo ridirezionare il file con 2 segni >>, in questo modo Unix accoderà il contenuto del nuovo file a quello esistente, ponendolo cioè alla fine di questo.

Operazioni sui file


Adesso vedremo come visualizzare il contenuto di un file sullo skermo, copiare i file, spostarli e rinominarli, cancellarli e farli stampare.

 
Comando: cp
Scopo: Copiare un file.
Formato: cp file-sorgente file-destinazione
Esempio: cp file1 file2
Risultato: Ci sono ora 2 file identici con nomi differenti.

Si può quindi copiare un file ed assegnare alla copia un nuovo nome, producendo così 2 file identici. Il comando cp quindi serve per CoPiare i file. Se nominate un file sorgente inesistente avrete un msg di errore tipo: “ cp: cannot access file inesistente”. Se invece nominate un file di destinazione ke esiste non avrete msg ke avvisano la sovrascrittura .
Potete rinominare un file tramite un comando simile, il comando “mv” serve a MuoVere (spostare) il contenuto di un file sorgente in uno di destinazione, cancellando a sua volta il sorgente, cioè rinomina il file sorgente con quello di destinazione lasciando 1 solo file destinazione… non ho capito neppure io…
Questo comando può essere utilizzato per trasferire un file in una directory diversa.

 
Comando: mv
Scopo: trasferire o rinominare un file
Formato: mv sorgente destinazione
Esempio: mv file1 file2
Risultato: Esiste un solo file col nome di destinazione

Per cancellare i file invece il comando è “rm” da RiMuovere. Il comando senza opzioni non kiede conferma dell’esecuzione…

 
Comando: rm
Scopo:(raramente) Rimuove uno o più file.
Formato: rm [opzione] file
Opzione: -i (chiede conferma prima di cancellare)
Esempio: rm lamahlist
Risultato: Il file non è più visualizzato ne disponibile

Spesso vorrete vedere cosa contiene un file prima di cancellarlo o modificarlo, per questo potete utilizzare il comando “cat” ke però… questo comando ha molti usi ed effetti diversi, uno dei quali è il conCATenamento dei file. (Questa sarà dura….)
Se usate il comando cat senza argomenti, questo utilizzerà i dispositivi standard di input ed output (tastiera e video)… se digitate una riga dalla tasiera con il comando cat, questa verrà ripetuta sullo skermo, se utilizzate la ridirezione e nominate un nuovo file inserirete i dati direttamente dalla tastiera nel file, se con il comando cat utilizzate il nome di un file esistente, questo verrà visualizzato sullo skermo. Potete anke utilizzare il comando cat per concatenare file con i simboli di reindirizzamento > e di aggiunta alla coda >>.
Ok passiamo al dettaglio…
Quando inserite dalla tastiera il comando cat file1, l’intero contenuto del file1 verrà visualizzato sullo skermo. Se la visualizzazione dovesse superare una pagina video si può bloccare lo scorrimento con la combinazione dei tasti CTRL+S e riprenderla con CTRL+Q. Si può utilizzare anke il comando “more” come nel dos, am ne parleremo fra un po.
Potete copiare file con il comando cat o concatenarli tramite la ridirezione, per esempio se utilizzate il comando cat file1 > file2 ha esattamente lo stesso effetto di cp file1 file2, cioè copia un file su un altro senza modificare l’originale. E’ possibile anke combinare dei file, con comandi come cat file1 file2 > file3. In questo caso i 2 file (file1 e file2) sono stati inviati in sequenza ad un file ridiretto (file3).
Come creare un file tramite il comando cat:
Come avevo detto prima se utilizzate il comando cat senza argomenti, sto scemo non farà altro ke ripetere ciò ke scrivete :o\.. avrete quindi…

 
$ cat
<Questo è un esempio
Questo è un esempio
<di quello ke akkade quando
di quello ke akkade quando
<si usa cat senza argomenti
si usa cat senza argomenti

In pratica Unix continuerà a dare il prompt dei comandi in attesa dell’inserimento di una nuova riga, potete terminare questo effetto tramite il comando CTRL+D.
Se usate la ridirezione potete usare cat per inviare linee ad un file esistente cioè:

 
$ cat > indirizzi
Stefano Grimaldi
Viale Manzoni, 5
20100 Milano
$ _

Quando premerete CTRL+D, il comando cat è terminato ed il file appena creato viene kiuso. Se poi usate il comando cat indirizzi verrà visualizzato sullo skermo quello ke avete digitato.

Il comando more:

Questo comando “more” (ankora) è disponibile in quasi tutte le installazioni di Unix, il suo scopo è solo quello di visualizzare un file, in pratika visualizza il contenuto di un file blokkandosi pagina per pagina visualizzando la dicitura ---More--- ed un valore in % di quanto è stato visualizzato fino a quel momento.
Per proseguire nella visualizzazione bisogna premere spazio dalla tastiera e si avrà la skermata successiva.

Stampare i file:

Per stampare i file con Unix ci sono diversi modi. Il modo + semplice è quello di inviare direttamente il file alla stampante. Unix ha un sistema di “spooler” di stampa per cui tutti i file vengono inviati ad una coda di stampa. Il comando di stampa è “lpr” (Line PRinter), non è possibile stampare programmi eseguibili ne file binari, a meno ke non riuscirete a visualizzare questi file sullo skermo del pc. Nel comando potete nominare uno o più file per poter dare una sequenza di stampa, se per esempio scriviamo “lpr indirizzi” otterremo + o – questo:

 
$ lpr indirizzi
request id is prop-9 (1 file)
$_

Il request id serve per individuare ed eventualmente eliminare il processo di stampa utilizzando per esempio il comando “cancel prop-9” rimuoverete il file dalla coda di stampa. Se la stampa fosse già partita, si blokkerebbe nel punto in cui noi blokkiamo il processo. La stampa effettuata con lpr è priva di formato, cioè il testo viene stampato di continuo senza interruzioni di pagina. Per ottenere una stampa più ordinata dovreste utilizzare un editor di testi come “vi” o procurarvi un programma di formattazione testo.

 
Comando: lpr
Scopo: Stampare uno o più file in locale
Formato: lpr [opzioni] [file]
Opzioni: -c Copia un file prima di stamparlo
-m Usa mail per avvisarvi ke la stampa è terminata
-r Rimuove il file dopo averlo stampato
Esempi: 1) lpr indirizzi
2) lpr –c salvato
3) lpr –r nuovofile indirizzi

Le directory ed i file di Unix


…. Boh?
Il sistema operativo Unix gestisce… no
Il sistema operativo Unix impiega una struttura di directory ad albero, cioè gerarkika, per memorizzare i file. La directory primaria, cioè radice, è in cima all’albero. Ogni directory può contenerne altre così come può contenere file… ma ke sto a di? …..ok.
Partendo dalla dir principale (radice), al suo interno ne troveremo altre ke riameremo di sistema, cioè necessarie al sysop (sistema operativo) per il suo corretto funzionamento. Per esempio la dir “bin” contiene i file binari dei programmi di servizio, la directory “dev” comprende i file ke descrivono i vari dispositivi (device) ke Unix può usare, inclusi terminali e stampanti. La directory “usr” contiene una directory per ogni ID utente (user) riconosciuto dal sistema.
Quando lavorate con Unix, la directory in cui vi trovate al momento, è riamata directory di lavoro, di default o corrente. Quando ricollegate con Unix, siete posti automaticamente nella dir prestabilita per il vostro user id, per cui è la vostra directory di lavoro, cioè la home direcory.
Per sapere qual è la vostra dir di lavoro potete usare il comando “pwd”, sullo skermo apparirà il nome completo della dir in cui vi trovate:

 
$ pwd
/usr/rhost
$_

La dir stessa si kiama rhost, il resto specifica il percorso in cui questa si trova. Lo slash (/) all’inizio della riga la dir radice, gli altri congiungono in sequenza i nomi delle successive. Per indicare un particolare file occorre mettere uno / dopo l’ultima dir indicata, cioè il percorso per il file indirizzi nella cartella rhost sarà:
/usr/rhost/indirizzi, cioè il file “indirizzi” si trova nella cartella “rhost” ke a sua volta si trova nella cartella “usr” e questa alla fine è contenuta nella dir “radice”.
Se per esempio il vostro nome utente è “laming” la vostra cartella di lavoro sarà /usr/laming, ma con la shell di Bourne per fare riferimento alla vostra home, potete digitare $HOME ke korrispnde a /usr/laming, nella C shell il comando %HOME ha lo stesso effetto.
Come avevo scritto prima per visualizzare i file della vostra directory di lavoro potete utilizzare il comando ls, ma potete usare questo comando anke per vedere i file di un’altra dir. Ad esempio, potete usareil comando ls /usr per visualizzare il contenuto della dir /usr, mentre con ls / vedrete i file della dir radice.
Su Unix non è semplicissimo distinguere un file da una directory, per vedere quali sono le dir usate l’opzione –l (elle). Il primo carattere di una riga sarà allora “d” per le directory ed un – per file di altro tipo:

 
ls –l (elle)
-rwxr-xr-x 1 rhost 14334 Nov 19 14:58 indirizzi
drwxr-xr-x 1 rhost 1298 Mar 12 11:32 progetti
-rw-rw-rw- 1 rhost 8900 Feb 12 09:56 salva_doc
$_

Il secondo file visualizzato è una directory e si kiama “progetti”. Anke il comando –d può essere utile, ma si limita alla visualizzazione delle sole dir:

 
ls –d
progetti
$_

oppure:

 
ls –ld
drwxr-xr-x 1 rhost 1298 Mar 12 11:32 progetti
progetti
$_

Quando fate riferimento ad un file ke si trova nella vostra directory di lavoro, potete specificare direttamente il nome del file. Se il file si trova in una dir diversa allora dovete specificare il percorso di questo. Fate conto ke la vostra dir di lavoro sia “rhost” e ke quella di un vostro collega ke lavora allo stesso progetto sia “darkman”, allora le vostre rispettive dir saranno : /usr/rhost e /usr/darkman . Per far stampare il file “indirizzi” nella vostra cartella di lavoro userete “lpr indirizzi”, se invece volete stampare lo stesso file ma dalla cartella di darkman il percorso di stampa sarà:
lpr /usr/darkman/indirizzi. Naturalmente dovete avere il permesso di accedere alla cartella del vostro amico, ma della sicurezza ne parleremo dopo. Quindi inserendo il percorso di ogni file possiamo associare qualunque comando.
I comandi “cp” ed “mv” ci permettono di specificare una directory o un file su cui copiare o trasferire un file:

 
lpr /usr/rhost/indirizzi
cat /usr/rhost/indirizzi
cp /usr/rhost/lamahlist lamahlist2
cp backdoor /usr/darkman/pamela
mv blazerstrong /usr/darkman/ahah
rm /usr/darkman/pamela

Unix riesce a distinguere le directory in modo particolare...
Per esempio se io fossi nella dir /usr/rhost, posso dire ke la dir usr è padre della dir rhost, quindi Unix riconosce con “/” la radice, con “.” la dir di lavoro e con “..” la directory immediatamente sopra a quella di lavoro…
Quanto amo gli esempi:
Se mi trovo nella cartella /usr/rhost e voglio andare nella cartella darkman, mi basta digitare ../darkman. Così facendo è come se dicessi a Unix: Parti dal padre della directory corrente, trova la directory darkman sotto di essa e rimani la.
Ricordatevi ke per avere accesso in altre cartelle di lavoro dovete avere l’accesso autorizzato.
Per verificare i diritti di accesso in una directory potete usare il comando “ ls –l /usr, potreste avere un elenko simile:

 
drwxr-xr-x 2 rhost 1298 Mar 13 12:20 darkman

Se la linea inizia con “drwx“, allora avrete tutti i diritti di accesso di cui avete bisogno per operaresu questa directory.

Per creare una directory il comando è mkdir (MaKe DIRectory:crea directory).
Supponiamo di essere nella cartella rhost e scriviamo mkdir prova, Unix creerà una nuova dir dal nome prova. Se poi digitate il comando ls vedrete ke il nome “prova” sarà presente nell’elenko dei file.
Se digitate il comando ls –l vedrete ke prova sarà indicata come dir e non come file. Quindi il comando mkdir /usr/prova creerebbe una nuova dir al livello sottostante a quello di /usr .
Potete dunque divertirvi a creare dir a piacimento, purkè siano sempre ben catalogate, avrete notato ke kon Unix non si usano click di mouse per aprire o cercare cartelle, quindi vi consiglio di essere sempre molto ordinati.

 
Esempio:
$ pwd
/usr/rhost
$ mkdir progetti
$ mkdir ricerca
$ mkdir progetti/bbs
$ mkdir progetti /dos4
$ mkdir progetti/cobol
$ mkdir ricerca/japan
$mkdir ricerca/japan/baud2400
$ pwd
/usr/rhost
$_

Notate ke la cima delle struttura è la vostra home directory, rhost, anziché la home radice.
Per l’ultima dir creata ricerca /usr/rhost/ricerca/japan/baud2400 avreste potuto usare $HOME/ricerca/japan/baud2400.

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT