Command line examples
ls
echo -e "\t ricerca file regolari: "
ls -l | grep "^-"
echo -e "\n\t ricerca directory con permesso r-x per altri utenti: "
ls -l | grep "^d......r.x"
echo -e "\tvisualizza file con permessi ""rw-"" per 2 volte consecutive"
ls -l | egrep '(rw-){2}'
echo -e "\t visualizza la data dei file"
ls -lA --time-style=long-iso
grep
echo -e "\tvisualizza le righe contenenti la parola ""Dimensione"" "
# l'opzione -h indica di non stampare il nome del file
grep -h -e 'Dimensione' *
echo -e "\tvisualizza le righe contenenti la parola ""Dimensione"" "
echo -e "\t indicando anche il nome del file per ogni corrispondenza"
# l'opzione -H indica di stampare il nome del file per ogni corrispondenza
grep -H -e 'Dimensione' *
echo -e "\tvisualizza solo parole che iniziano con ""Dim"", non tutta la riga"
echo -e "\t indicando anche il nome del file per ogni corrispondenza"
# l'opzione -o indica di non stampare tutta la riga, ma solo le parti corrispondenti
grep -o -H -e 'Dim[a-zA-Z0-9]*' *
echo -e "\tvisualizza ricorsivamente tutti i file con la parola"
echo -e " ""Dim"" nella cartella corrente"
grep --include "*" --recursive "Dim" .
echo -e "\n\t utenti che usano bash (elencati nel file /etc/passwd)"
echo -e "\n\t seguiti da user ID e group ID. I campi sono separati "
echo -e "\n\t dal carattere ':', stampiamo i campi 1,3,4"
grep "bash" /etc/passwd | cut -d: -f1,3,4
find
echo -e "\n\t file regolari con più di un link"
find ./ -links +1 -type f
echo -e "\n\t directory con nome che inizia per maiuscola"
find ./ -maxdepth 1 -type d | grep "^\./[[:upper:]]"
echo -e "\n\t file con permesso r-x per il gruppo di appartenenza"
find ./ -maxdepth 1 -perm -g=+r+x
echo -e "\n\t file con permesso lettura OPPURE esecuzione per il gruppo"
find ./ -maxdepth 1 -perm -g=+r -o -perm -g=+x
echo -e "\n\t file con permesso lettura OPPURE esecuzione per il gruppo "
echo -e "\t e li stampa in un modo particolare:"
find ./ -maxdepth 1 -perm -g=+r -o -perm -g=+x -printf "proprietario: %g, file: %p \n"
echo -e "\n\t Nella directory corrente visualizzare la data di ultimo "
echo -e "\t accesso per tutti i file regolari."
find ./ -maxdepth 1 -type f -printf " file: \"%p\"; data ed ora: %AD %AT \n"
echo -e "\n\t cerco directory con nome che inizia per ""d"" maiuscola o minuscola"
find ./ -maxdepth 1 -type d -iname "d*" # iname indica case Insensitive
echo -e "\n\t cerco directory con nome che inizia per ""d"" maiuscola o minuscola e modificata negli ultimi 7 giorni"
find ./ -maxdepth 1 -type d -iname "d*" -mtime -7 # iname indica case Insensitive
echo -e "\n\t cerco files con nome che inizia per ""r"" maiuscola o minuscola e dimensione > 1 byte"
find ./ -maxdepth 1 -type f -iname "r*" -size +1c # c indica bytes
echo -e "\n\t cerco files con nome che inizia per ""r"" maiuscola o minuscola e proprietario 'io'"
find ./ -maxdepth 1 -type f -iname "r*" -user 'io'
echo -e "\n\t cerco files con nome che non termini con .jpg (case-Insensitive)"
find ./ -maxdepth 1 -type f -not \( -name "*.jpg" -o -name "*.JPG" \)
echo -e "\n\t cerco directory con nome che inizia per ""d"" maiuscola "
echo -e "\t o minuscola e ne elenco il contenuto."
find ./ -maxdepth 1 -type d \( -name "d*" -o -name "D*" \) -exec ls {} \;
echo -e "\n\t cerco i file modificati in una specifica data."
find ./ -maxdepth 1 -type f -newermt '2022-10-13 00:00' -not -newermt '2028-10-13 23:59' -exec ls -l --time-style=long-iso {} \;
echo -e "\n\t directory con nome che inizia per D maiuscola (uso le espr. regolari)."
find ./ -regextype posix-egrep -maxdepth 1 -regex "^./D.*$"
echo -e "\n\t file non nascosti (non iniziano col punto) che hanno per 2° carattere 'i' mostrati elencati tra doppi apici."
find ./ -regextype posix-egrep -maxdepth 1 -regex "./[^.]i.*$" | ls -Q
chmod
# inizializzo il file con i permessi
chmod 0440 regular_file1
echo "Il comando chmod gestisce i permessi degli utenti (destinatari) sui vari file (e directory)."
echo -e "I permessi sono quelli di: \n\t lettura (r) => peso 4 \n\t scrittura (w) => peso 2 \n\t esecuzione (x) => peso 1 (l'esecuzione per le directory significa permesso di 'attraversarle' e quindi di entrarci."
echo -e "Le azioni sul file sono: \n\t assegnazione permessi (=) \n\t aggiunta (+) a permessi correnti \n\t rimozione (-) dai permessi correnti."
echo -e "I destinatari dei permessi possono essere: utente corrente (u), utenti del gruppo (g): altri (o). Si possono indicare piu destinatari ('ug' oppure 'ugo'), per indicare tutti si usa (a).\n"
echo 'Il comando si puo usare indicando destinatario, azione e permessi nella forma letterale: '
echo -e "\t chmod ug+rwx file"
echo -e "\t \t => destinatario ug (utente e gruppo utente)"
echo -e "\t \t => azione + (privilegi da aggiungere a quelli esistenti)"
echo -e "\t \t => privilegi rwx (lettura scrittura esecuzione)"
echo 'oppure nella forma numerica, indicando la somma dei permessi per utente, gruppo e altri: '
echo -e "\t chmod 753 file"
echo -e "\t \t => permessi utente => 7 ovvero la somma di lettura (4), scrittura (2) ed esecuzione (1)"
echo -e "\t \t => permessi gruppo => 5 ovvero la somma di lettura (4) ed esecuzione (1)"
echo -e "\t \t => permessi utente => 3 ovvero la somma di scrittura (2) ed esecuzione (1)"
echo -e "\n Esistono poi altri 3 permessi speciali per file e directory:"
echo -e "\t set-user-ID 's' => peso 4 => Permesso di esecuzione del file con gli stessi permessi del proprietario del file"
echo -e "\t set-group-ID 's' => peso 2 => Permesso di esecuzione del file con gli stessi permessi del gruppo proprietario del file"
echo -e "\t restricted deletion flag 't' / sticky bit 't' => peso 1 => "
echo -e "\t\t Se applicato su directory viene chiamato 'restricted deletion flag', e permette solo al proprietario della directory o al proprietario del file di rimuovere il file dalla directory o di rinominare il il file. In genere si usa su cartelle in cui tutti gli utenti possono scrivere, come la cartella /tmp."
echo -e "\t\t Se applicato su file, viene chiamato 'sticky bit' e permette la copia in swap memory del file per un caricamento piu veloce che da disco".
echo -e "\n ESEMPIO D'USO - FORMA LETTERALE: permessi correnti del file: regular_file1"
ls -l regular_file1
echo -e "\n assegno (=) i permessi rwx all'utente corrente"
chmod u=rwx regular_file1
ls -l regular_file1
echo -e "\n rimuovo (-) i permessi wx all'utente corrente"
chmod u-wx regular_file1
ls -l regular_file1
echo -e "\n al gruppo (g) aggiungo (+) i permessi di scrittura (w) ed esecuzione (x)"
chmod g+wx regular_file1
ls -l regular_file1
echo -e "\n ad utente (u) gruppo (g) e altri (o) assegno (=) i permessi di scrittura (w) ed esecuzione (x)"
echo -e "NOTA: il permesso di lettura per l'utente corrente viene cancellato perche' sovrascritto, dato che e' stata fatta un assegnazione, non un aggiunta"
chmod ugo=wx regular_file1
ls -l regular_file1
echo -e "\n a tutti (a) rimuovo (-) i permessi di scrittura (w) ed esecuzione (x)"
echo -e " poi all' utente (u) aggiungo (+) i permessi di lettura (r) "
echo -e " poi al gruppo (g) aggiungo (+) i permessi di lettura (r) "
chmod a-wx,u+r,g+r regular_file1
ls -l regular_file1
echo -e "\n ESEMPIO D'USO - FORMA NUMERICA:"
echo -e "\n assegno i permessi rwx (4+2+1=7) ad utente, gruppo ed altri"
chmod 777 regular_file1 # r=4, w=2, x=1 => 7=r+w+x=4+2+1
ls -l regular_file1
echo -e "\n assegno il permesso di lettura r (r=4) ad utente, nessun permesso al gruppo e ad altri utenti"
chmod 400 regular_file1 # r=4
ls -l regular_file1
echo -e "\n ESEMPIO D'USO - PERMESSI SPECIALI E DIRECTORY "
echo -e "permessi cartella dir2"
ls -ld */
echo -e "\n rimuovo tutti i permessi della cartella dir2, tranne la lettura per l'utente "
chmod 400 dir2
ls -ld */
echo -e "\n eseguo un accesso alla cartella con 'cd dir2' ed ottengo permesso negato (manca il permesso di attraversamento 'x')"
cd dir2
echo -e "\n aggiungo il permesso di attraversamento 'x' alla cartella dir2"
chmod +x dir2
cd dir2
echo -e "\n ora non ho accesso negato, ma sono nella cartella dir2"
cd ..
echo -e "\n assegno tutti i permessi, compresi quelli speciali, al file"
chmod 7777 regular_file1
ls -l regular_file1
xargs
xargs
: prende l’output di un comando e lo passa come argomento ad un altro comando.
Esempio:
echo "file1.txt file2.txt file3.txt" | xargs cat
Equivale a:
cat file1.txt && cat file2.txt && cat file3.txt
Secondo esempio:
echo '-name "*.sh"' | xargs find .
Equivale a:
find . -name "*.sh"
# Visualizzare solo il nome del file che contiene la stringa "Enter"
find ./ -name '*' -print | xargs grep -l Enter
# Visualizzare il nome del file ed anche il contenuto che contiene la stringa "Enter"
find ./ -name '*' -print | xargs grep -i Enter