Shell: Parte 1

Spostarsi nel Filesystem

comando funzione opzioni principali
pwd stampa la directory corrente -l, -h, -t, -S
ls elenca i file in una directory -l
cd cambia la directory corrente -
mv sposta o rinomina un file/directory -i, -f
cp copia un file/directory -i, -f, -r
rm rimuove un file/directory -i, -f, -r
mkdir crea una o piu’ directory -p

I comandi qui sopra spostano o copiano file, ma non modificano i contenuti degli stessi.

Esempio. Se non sapete dove vi trovate, potete usare cd senza argomenti per tornare alla vostra home.

Wildcards, Parte 1

La shell esegue quella che si chiama wildcard expansion: ogni volta che incontra l’asterisco * lo sostituisce con la lista dei file/directory che “fanno match”.

Esempio. Se eseguo:

ls *

la shell sostituisce * con la lista di tutti i file e le directory nella directory attuale (perche’ tutti fanno match con *). Invece:

ls ~/informatica/*

sostituisce * con la lista dei file in ~/informatica.

Supponendo che in ~/informatica ci siano solo tre file, chiamati test1, test2 e results, il comando precedente sarebbe equivalente a:

ls ~/informatica/test1 ~/informatica/test2 ~/informatica/results

Se avessi eseguito:

ls ~/informatica/test*

la wildcard test* avrebbe fatto match solo con test1 e test2, ed il comando sarebbe stato equivalente a:

ls ~/informatica/test1 ~/informatica/test2

Qui results non fa match, quindi non viene incluso.

Esercizi

  1. Cosa fa ls data/prot-fasta data/prot-pdb? Confrontalo con ls data/prot-fasta e ls data/prod-pdb per conferma.

  2. Cosa fa ls se gli si passa un path ad un file piuttosto che ad una directory? E ls -l?

  3. Cosa fa ls se gli si passa path misti a file e directory?

  4. Che differenza c’e’ tra:
    1. cd . e cd ..?
    2. cd .. e cd..?
    3. ls e ls .?
    4. ls e ls *? Perche’?
    5. ls -l -h e ls -lh?
    6. ls -l e ls - l?
  5. Il risultato di ls ../* “include” il risultato di ls .?

  6. Che differenza c’e’ tra ls /home/login.utente/bio e ls ../login.utente/bio se pwd e’ ~?

  7. Il file data/empty1 e’ vuoto? E il file data/empty2?

  8. Cosa fa il comando (alcuni dei comandi seguenti possono non funzionare; scopo dell’esercizio e’ scoprire perche’; partite sempre da una directory vuota):
    1. mkdir muu/bee?
    2. mkdir -p muu/bee/grr; rm muu/bee/grr?
    3. mkdir -p muu/bee/grr; rm -r muu/bee?
    4. mkdir muu; cd .; mkdir muu?
    5. mkdir muu; cd .; mkdir -p muu?
    6. Il comando rm -r muu/bee rimuove anche la directory muu?
  9. Stampare la lista dei file contenute nelle directory data/deep0, data/deep1, ..., data/deep4.

  10. Stampare la lista di tutti i file, inclusi quelli nelle sotto-directory.

Soluzioni

  1. Stampa a schermo prima ls lista dei contenuti della directory data/prot-fasta, poi quelli della directory data/prot-pdb. Quindi e’ identico a lanciare:

    ls data/prot-fasta
    ls data/prot-pdb
    

    separatamente.

  2. Stampa il nome del file. Con -l, stampa anche informazioni aggiuntive (proprietario, permessi, etc.)

  3. Stampa i nomi di tutti i file, ed i contenuti di tutte le directory.

  4. Soluzioni:
    1. Il primo non fa niente, il secondo ci sposta nella directory che contiene la directory in cui ci troviamo.
    2. Il primo funziona, il secondo no – manca uno spazio.
    3. Nessuna.
    4. Il primo stampa la lista dei contenuti della directory corrente. Il secondo invece subisce una wildcard expansion: * viene sostituito con la lista di tutti i file nella directory corrente. Quindi ls * stampa la lista dei file nella directory corrente, piu’ i contenuti di tutte le directory.
    5. Nessuna.
    6. Il primo funziona, il secondo no – - l ha uno spazio di troppo, non e’ un’opzione.
  5. Si’. Nella wildcard expansion ../* c’e’ anche la directory corrente, ..

  6. Nessuna.

  7. ls -l data/empty1 mostra chiaramente che il file non e’ vuoto, mentre ls -l data/empty2 mostra che lo e’.

  8. Soluzioni:
    1. Da’ errore. Creare directory innestate richiede l’opzione -p.
    2. Da’ errore. Rimuovere una directory (in questo caso muu/bee/grr) richiede l’opzione -r.
    3. Funziona. Crea le directory innestate muu/bee/grr, poi cancella muu/bee e la directory contenuta in essa, muu/bee/grr.
    4. Da’ errore. La directory muu esiste gia’ prima della seconda invocazione a mkdir.
    5. Funziona. Crea la directory muu, poi prova a crearla di nuovo. mkdir non da’ errore perche’ con -p gli chiediamo di ignorare il fatto che muu esiste gia’.
    6. No.
  9. ls data/deep0; ls data/deep1; ... ;ls data/deep4, oppure ls data/deep*.

  10. ls -r data/deep*.