Skip to content

montali/bash_cheatsheet

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Bash CheatSheet

Cheatsheet per bash in italiano. Realizzato per l'esame di gestione sistemi IT Cloud @ UniPR 2019-20

Generali

Informazioni

Help function of a command

  • Parentesi quadre [] accerchiano elementi opzionali
  • Qualsiasi cosa seguita da ... rappresenta una lista di lung. arbitraria
  • I | indicano una scelta multipla
  • Gli angle brackets <> rappresentano dati variabili

Killare una shell ssh freezata

Enter + ~ + .

Shortcut per spostarsi

  • ctrl+a inizio della command line
  • ctrl+efine della command line
  • ctrl+u cancella fino all'inizio
  • ctrl+k cancella fino alla fine
  • ctrl+sx vai alla parola precedente
  • ctrl+dx vai alla parola seguente
  • ctrl+r cerca nella history

Directory importanti

  • usr software installati, librerie.

    • bin comandi utente
    • sbin comandi admin
    • local software localmente customizzato
  • etc file di configurazione specifici al sistema

  • var Dati variabili al sistema che dovrebbero rimanere tra boots, come DB, cache...

  • run Dati di runtime per i processi avviati since boot, come ID, lock...

  • home Dirs per il salvataggio dei dati per gli utenti

  • root Home per root

  • tmp Spazio temporaneo dalla durata di 10 gg (per 30gg, /var/tmp)

  • boot File necessari per il boot

  • dev Contiene file speciali per accedere ai device

Path assoluti

Un path assoluto comincia alla / root

Path relativi

Un path che non comincia per / specifica il path partendo dalla dir in cui siamo.

File Globbing

Processo per il pattern matching/wildcards.

  • * ogni stringa di 0+ caratteri
  • ? ogni carattere singolo
  • ~ home dello user corrente
  • ~user home dell'utente user
  • ~+ directory corrente
  • ~- directory precedente
  • [abc] un carattere tra abc
  • [!abc] un carattere esclusi abc
  • [^abc] un carattere esclusi abc
  • [[:alpha:]] ogni carattere alfabetico
  • [[:lower:]] ogni carattere lower-case
  • [[:upper:]] ogni carattere upper-case
  • [[:alnum:]] un carattere alfanumerico
  • [[:punct:]] ogni carattere di punteggiatura
  • [[:digit:]] ogni numero
  • [[:space:]] ogni carattere di whitespace (tabs, newline, cr)

Brace Expansion

  • Utilizzata per generare stringhe arbitrarie di caratteri
  • contengono una lista comma-separated o una sequenza.
  • es. {Sunday,Monday,Thursday} {1..10}

Command substitution

  • Sostituiamo l'espressione $(comando) con l'output del comando.
  • Si possono usare anche i backticks comando, ma ha due svantaggi: fa confusione, e non è nestable

Evitare l'expansion

  • $ escapa un singolo carattere
  • '' escapa un'espressione sempre
  • "" escapa espressioni ma permette command e variable substitution

Redirectare gli output a file

  • Tramite > possiamo redirectare un output a file.
  • > sovrascrive
  • >> appende
  • 2 specifica stderr
  • & specifica entrambi
  • es. >file 2>&1 = &>file

Pipeline

Una pipeline | permette di passare l'output di un comando all'input di un altro

Comandi

  • date mostra i correnti data/ora. Puoi specificare con + il formato desiderato
  • passwd passwd modifica la password dell'utente corrente. root può modificarle tutte.
  • file su linux le estensioni sono inutili. file analizza l'header di un file per vedere l'estensione
  • head Prende le prime 10 linee di un file. Con argomento -n specifichi il numero.
  • tail vedi head, ma alla fine del file.
  • wc conta linee, parole, caratteri. Prende parametro -l, -l, -c per mostrarne solo uno dei tre.
  • history mostra una lista dei comandi già eseguiti
  • pwd mostra il full path name corrente
  • ls mostra i contenuti della directory corrente
    • -a mostra tutti i file
    • -R è ricorsivo
  • cd cambia directory, .. indica la directory padre
  • touch updata il timestamp di un file al tempo corrente. Possiamo usarlo per creare files.
  • cp copia un file. Per file multipli, l'ultima deve essere la directory.
  • mv sposta o rinomina un file.
  • rm elimina un file.
    • -r elimina ricorsivamente directories
    • -f forza l'operazione suddetta.
  • rmdir elimina una directory vuota
  • mkdir crea una directory
    • -p crea le subdirectories necessarie
  • man mostra la pagina di manuale per il comando specificato, è diviso in 9 categorie
  • stdin buffer che legge dalla tastiera
  • stdout buffer che invia output al terminare
  • stderr invia messaggi di errore al terminale
  • tee permette di creare una pipeline mantenendo l'output a terminale o a un file specificato come argomento
  • yum permette di installare pacchetti da una repo. La configurazione è in /etc/yum.conf o /etc/yum.repos.d
  • Comandi:
  • repolist elenca le repo, pacchetti, gruppi
  • help aiuto
  • list pacchetti installati/disponibili
  • search cerca pacchetti per nome/summary
  • search all cerca anche nella description
  • info restituisce informazioni su un pacchetto
  • provides pacchetti che matchano il pathname
  • install installa il pacchetto
  • update updata pacchetti

Utenti

Informazioni

/etc/passwd

Mantiene le informazioni sugli utenti. nome:x(era la pwd un tempo, ora /etc/shadow):UID:GID:Nome:homepath:shell

Gruppi

  • Hanno un nome e un GID, ogni user ha un gruppo principale.
  • Il gruppo primario possiede i file creati dall'utente
  • Solitamente il primary group è un gruppo con il nome dell'utente
  • L'utente può essere in altri gruppi salvati in /etc/group

Root

L'utente root ha potere sul sistema, con privilegi massimi. La maggior parte dei device devono essere controllati da root, tranne i removibili.

Ranges di UID

  • 0 sempre assegnato a root
  • 1-200 assegnato ai system users (processi)
  • 201-999 system users senza file
  • 1000+ utenti regolari

Password

Le password sono salvate in questo formato:
$hash_algorithm_index$random_encription_salt/hash/

/etc/shadow

Contiene le password: login_name:password:data_di_modifica_since1970:giorni_minimi_cambio:giorni_massimi_cambio:giorni_warning:giorni_eccezione:scadenza_account_since1970:blank

$PATH

Contiene le location contenenti eseguibili

$HOME

Contiene la home dir

Comandi

  • su permette di cambiare utente
    • - setta l'environment a quello dell'utente nuovo, senza rimane uguale
  • sudo permette di eseguire un comando come root
  • useradd crea un utente con i campi di default (specificati in /etc/login) se non specificato diversamente
  • usermod modifica un utente
    • -c Aggiunge un campo al GECOS field, es. nome completo
    • -g Specifica il gruppo primario
    • -G Specifica i gruppi aggiuntivi
    • -a Usato con -G, appende i gruppi senza rimuoverlo da altri
    • -d Specifica l'home dir
    • -m Sposta la home a una nuova location, va usato con -d
    • -s Specifica una nuova login shell
    • -L Blocca l'utente
    • -U Sblocca l'utente
  • userdel elimina l'utente da /etc/passwd, ma lascia la home dir
    • -r elimina anche la home
  • groupadd crea un gruppo
    • -g specifica il GID
    • -r crea un system group con un GID disponibile
  • groupmod modifica un GID o un nome
    • -n specifica il nuovo nome
    • -g specifica il nuovo GID
  • groupdel elimina un gruppo

Permessi

Possiamo settare impostazioni diverse per il creatore, il gruppo creatore, e gli altri. Abbiamo tre permessi: read 4, write 2, execute 1 Un file appena creato è di proprietà del creatore, con gruppo primario del creatore.

Permessi di default

I permessi default per i file sono settati dai processi che li creano. Ma per file/dir creati da shell? Essi vengono filtrati dalla umask della shell, che rimuove i campi specificati

Comandi

  • chmod modifica i permessi di di un file (-R per directory ricorsivamente) WhoWhatWhich

    • Who u(ser), g(roup), o(ther), a(ll)
    • What +, -, =
    • Which r, w, x
  • chown modifica il possessore del file (il possessore solo root, il gruppo anche user che vi appartengono) : specifica il gruppo

  • setuid/setgid permesso di execution che esegue il comando come se fosse l'utente possessore, s. S se l'owner non ha x

  • In visualizzazione l, saranno t/T.

  • Se è specificato su una dir, i file creati all'interno avranno il creatore uguale alla dir e non l'effettivo

  • Specifichiamo setuid con un 4 prima del chmod, setgid con un 2, o con u+s e g+s

  • umask modifica la umask della shell.

Processi

Stati di un processo

  • Running
    • R TASK_RUNNING: sta eseguendo sulla CPU o attendendo di eseguire
  • Sleeping
    • S TASK_INTERRUPTIBLE: sta aspettando qualche condizione hw/sw
    • D TASK_UNINTERRUPTIBLE: non risponde ai segnali. condizioni eccezionali.
    • K TASK_KILLABLE: identico a D, ma risponde ai SIGKILL
  • Stopped
    • T TASK_STOPPED: il processo è stato stoppato e può essere ripristinato
    • T TASK_TRACED: appare durante le pause di debug
  • Zombie
    • Z EXIT_ZOMBIE: segnala al parent mentre esce. Tutte le risorse eccesso il PID rilasciate
    • X EXIT_DEAD: una volta che il parent ha pulito, il processo è rimosso del tutto. Transitorio.

Job

  • Associato ad ogni pipeline, tutti i processi della pipeline sono parte del job.
  • Un terminale supporta un job alla volta.
  • Un processo in background di un terminale è membro di un altro job di quel terminale.
  • I processi background non possono ricevere input ma possono scrivere.
  • Un job bg può essere interrotto, se prova a leggere l'input avviene in automatico.
  • Ciascun terminale può avere un foreground e più background.

Segnali di kill

  • HUP 1 Hangup: reporta la terminazione del processo controllante di un terminale
  • INT 2 Keyboard: causa il termine con ctrl+c
  • QUIT 3 Come INT ma produce un dump del processo. Ctrl+D
  • KILL 9 Termina il programma forzatamente
  • TERM 15 Causa il termine. Può essere però bloccato, ignorato.
  • CONT 18 Resuma il processo
  • STOP 19 Sospende il processo forzatamente.
  • TSTP 20 Uno STOP più educato, bloccabile, ignorabile... Ctrl+Z

Mandare processi in background

Per mandare un processo in background, Ctrl+z

Load Averages

Rappresenta il carico del sistema negli ultimi 1,5,15 minuti, sulla base dei running e uninterruptible Tutte le CPU sono sommate, in quanto i processi si potrebbero spostare da una all'altra Linux conta ogni core/hyperthread come una CPU a parte, con request queues separate Possiamo ottenere i load averages tramite top, uptime e w Una CPU idle ha load 0; ogni processo aggiunge 1.

Comandi

  • ps mostra i processi correnti.
    • -a processi associati al terminale
    • -u mostra l'utente collegato al processo
    • aux mostra tutti i processi, con user e processi senza terminale
    • lax mostra tutti i processi con dettagli
    • j mostra i jobs
    • --sort sorta i processi
  • & Possiamo avviare un comando in background inserendo una & alla fine. Ci verrà mostrato il PID.
  • jobs Permette di vedere i jobs della sessione
  • fg Permette di portare un job in foreground tramite il suo id (%ID)
  • bg Permette di avviare un job stoppato, in background
  • kill Invia un segnale a un processo selezionato da ID
  • killall Invia un segnale a tutti i processi che matchano un pattern
  • pkill Come killall ma con filtri più avanzati
    • - killa tutti i processi di un utente
  • w lista gli utenti correntemente loggati e le loro attività cumulative.
  • Tutti hanno un terminale principale, listato come pts/N per GUI o ttyN per terminali.
  • -f mostra il connecting system
  • top mostra i processi di sistema dinamicamente, con un refresh continuo
  • Dati mostrati:
    • PID Process ID
    • USER username
    • VIRT memoria virtuale utilizzata, includendo il resident set, shared libs, swap
    • RES memoria fisica utilizzata
    • S Process state: D (uninterruptable), R (running), S (sleeping), T (stopped/traced), Z(zombie)
    • TIME Tempo di processo CPU
    • COMMAND command name
  • systemd fornisce un metodo per attivare risorse di sistema, daemons...
  • systemctl gestisce gli oggetti di systemd, detti units. Alcune tipologie di units:
    • .service rappresenta un system service -> avvia frequently accessed daemons
    • .socket rappresenta socket di comunicazione inter-processo.
    • .path utilizzati per ritardare l'attivazione di un servizio finché avviene uno specifico cambiamento di file
  • Opzioni:
    • status Mostra lo status di un servizio
    • --type Mostra lo status di determinato type (service/socket/path)
    • is-active
    • is-enabled
    • list-units
    • list-unit-files
    • --failed
  • Comandi:
    • mask maschera un servizio per impedirne l'avvio
    • unmask unmaschera
    • disable disabilita a boot
    • enable avvia a boot
    • stop
    • start
    • restart
    • reload ricarica config
    • list-dependencies

Daemon

Processo che gira in background, avviato al boot, funziona fino allo shutdown. Per convenzione, finiscono per d

Socket

Canale di comunicazione con client locali e remoti. Creabile da daemons, o separati. Passato al daemon quando viene istanziata una connessione.

Service

Si riferisce di solito a uno o più daemon, ma avviare/stoppare un servizio fa un one-time change allo stato del sistema, che non richiede un daemon.

Ricerca

grep permette di utilizzare RegEx per isolare dati matchanti

  • utilizzo basic: grep 'RegEx' /file
  • utilizzo piped: ps aux | grep '^student'
  • Opzioni:
    • -i disattiva case sensitivity
    • -v Inverti la ricerca
    • -r ricerca ricorsiva
    • -A mostra n linee dopo il match
    • -B mostra n linee prima del match
    • -e multiple regex con or
  • which mostra il path dell'eseguibile di un comando

Scripts

#

È un commento per script bash, a meno che non sia escapato

Variabili

Possiamo creare variabili con l'uguale, referenziarle con $ oppure ${}, preferibile in caso di ambiguità

Arithmetic Expansion

Possiamo anche eseguire arithmetic expansion grazie alle doppie parentesi, come $((2+2)). Gli operatori sono i soliti.

For loop

il for scorre gli argomenti di uno ad uno. for in ; do done

Debug

Aggiungiamo -x a #!/bin/bash per attivare il debug, o -x all'esecuzione Possiamo anche usare l'istruzione "set +x" e "set -x" nello script

Parametri posizionali

I parametri posizionali salvano i valori degli argomenti command-line 0 contiene lo script name, i seguenti gli argomenti $* contiene tutti gli argomenti insieme $@ contiene gli argomenti separati $# contiene il numero di argomenti passati

Exit codes

Possiamo uscire dallo script con codice. 0 è tutto ok, gli altri no. L'exit code viene salvato nella variabile $? Usciamo dallo script con exit n

Test degli input

è good practice verificare gli input con le espressioni ["$a" -eq "$b"]

  • Opzioni:
    • -eq uguale
    • -ne diverso
    • -gt maggiore
    • -lt minore
    • -ge maggiore uguale
    • -le minore uguale
  • Opzioni per stringhe:
    • = uguale a
    • == uguale a
    • != diverso
  • Opzioni unary:
    • -z lunghezza zero
    • -n not null
  • Opzioni unary per file:
    • -b il file esiste ed è block special
    • -c il file esiste ed è char special
    • -d esiste ed è una directory
    • -e esiste
    • -f file regolare
    • -L esiste ed è un symbolic link
    • -r esiste ed è permessa la lettura
    • -s esiste ed ha size > 0
    • -w esiste ed è permessa la scrittura
    • -x esiste ed è permessa l'esecuzione
  • Opzioni binarie per file:
    • -ef stesso device ed inode
    • -nt modification date più nuova
    • -ot modification date più vecchia
  • Leganti:
    • $$ and
    • || or

if/fi

if permette di definire le condizioni così: if <CONDITION>; then <COMMAND> fi

else

Possibile anche l'else: if <CONDITION>; then <COMMAND> else <COMMAND> fi

elif

Possibile l'else if if <CONDITION>; then <COMMAND> elif <CONDITION>; then <COMMAND> else <COMMAND> fi

Case statement

Possibile il multi condizionale: case <VALUE> in <PATTERN1>) <COMMAND> ;; <PATTERN2>) <COMMAND>;; *) <DEFCOMMAND> ;; esac

export

Permette di esportare variabili all'environment

Differenza tra profile e RC

Solitamente, usiamo profile per settare ed esportare l'environment, RC per eseguire comandi profile è eseguito alla login shell, RC ogni volta che una shell è creata, login o non login

alias

alias permette di definire comandi personalizzati Per renderli permanenti, li aggiungiamo a .bashrc

Funzioni

possiamo definire semplici funzioni con la notazione classica di C Definirle in .bashrc equivale ad usarle come comandi

Firewall

  • firewalld è il metodo di default di CentOS7 per gestire host-level firewalls.
  • Separa l'incoming traffic in zone, ognuna avente il suo set di regole.
  • In ordine, matcha: indirizzo source, interfaccia, default.
  • La zona di default è di solito la zona public.
  • Configurazioni di default:
    • trusted
    • home
    • internal
    • work
    • public
    • external
    • dmz
    • block
    • drop Modifichiamo firewalld con firewall-cmd o con i file /etc/firewalld. (meglio la prima)

firewall-cmd

  • Opzioni:
    • --get-default-zone auto-explainatory
    • --set-default-zone=ZONE cambia sia runtime che permanent
    • --get-zones lista tutte le zone disponibili
    • --get-services lista i servizi predefiniti
    • --add-source=<CIDR> routa tutto il traffico dall'ip alla zona specificata con --zone=<>, o default
    • --remove-source=<CIDR> rimuove la rule legata al CIDR. possiamo specificare la zona da rimuovere
    • --add-interface=<INT> routa tutto il traffico dall'interfaccia alla zona, se non spec. default
    • --change-interface=<INT> associa l'interfaccia con la zona specificata al posto di quella di ora
    • --list-all lista tutte le interfacce, source, servizi, porte per --zone=<ZONE>
    • --list-all-zones lista tutto per tutte le zone
    • --add-service=<SERV> permette il traffico a <SERV>, possibile specificare --zone
    • --add-port=<PORT> permette traffico alla porta/protocollo. Permette --zone
    • --remove-service=<SERV> rimuove il servizio dai permessi della zona specificata
    • --remove-port=<PORT> rimuove la porta/protocollo dai permessi della zona specificata
    • --reload droppa la configurazione runtime e carica la persistent
    • --add-rich-rule='RULE' aggiunge una rich rule
    • --remove-rich-rule='R' rimuove una rich rule
    • --query-rich-rule='RULE' ritorna 0 se la rule è presente nella zona, 1 se no
    • --list-rich-rules outputta tutte le tule nella zona specificata

Rich rules

Le rich rules permettono sintassi più complesse per le rules del firewall.

  • Struttura:
    • rule
    • [source]
    • [destination]
    • service|port|protocol|icmp-block|masquerade|forward-port
    • [log]
    • [audit]
    • [accept|reject|drop] Per altre regole, firewalld.richlanguage(5) Possiamo usare le rich rules anche per loggare roba

Ordine delle rules

L'ordinamento basic prevede

  • [port farwarding/masquerading]
  • [logging]
  • [deny]
  • [allow] Il primo match vince. Se un pacchetto non matcha nulla, di solito è denied. Le direct rules vengono parsate prima di tutte.

Logging con rich rules

  • Possiamo loggare le connessioni a syslog o al kernel audit.
  • La sintassi basic per syslog è log [prefix=""] [level=<LEV>] [limit value="<RATE/DURATION>"]
  • Con loglevel= emerg, alert, crit, error, warning, notice, info, debug
  • duration in s, m, h, d (es. 3/m è 3 al minuto) *
  • Sintassi simile è usabile con audit: audit [limit value="<RATE/DURATION>"]

NAT con firewalld

firewalld supporta due tipi di NAT: masquerading (IPv4 only) e port forwarding. Col primo inoltriamo pacchetti non diretti a noi ad un altro IP, modificandone la source. Quando la risposta arriva, li modifichiamo di nuovo con la destination giusta. attiviamo con firewall-cmd --permanent --zone=<ZONE> --add-masquerade o con rich rules.

Port forwarding

Questo, invece, inoltra il traffico di una porta ad un'altra porta, interna o esterna Per attivarlo, firewall-cmd --permanent --zone=<ZONE> --add-forward-port=port=<PORTNO>:proto=<PROTOCOL>[:toport=<PORTNO>][:toaddr=<IPADDR>] Uno dei due tra toport e toaddr va messo.

Apache HTTPD

Il webserver Apache implementa un server con supporto http, estensibile con moduli. Una volta installato httpd-manual (incluso in httpd), e httpd.service avviato, basta vedere localhost/manual La configurazione default è in /etc/httpd/conf/httpd.conf. Questa serve i contenuti di /var/www/html Per attivare apache systemctl enable httpd.service, poi systemctl start httpd.service Bisogna poi aprire firewalld:firewall-cmd --permanent --add-service=http --add-service https e ricaricarlo firewall-cmd --reload

Virtual Hosts

I virtual hosts permettono di hostare più domini sullo stesso apache, in base a ip o nome. Per comodità, definiamo i virtual hosts in file a parte in /etc/httpd/conf.d/site1.conf

genkey

  • genera un set di chiavi per TLS con il parametro obbligatorio , il nome di dominio completo.
  • chiede inoltre una lunghezza della chiave (scegliere minimo 2048 bits)
  • sputa fuori 3 file:
    • <fqdn>.key (chiave privata, deve avere perm 0600 o 0400)
    • <fqdn>.csr file necessario per richiedere la firma a una CA
    • <fqdn>.crt il certificato pubblico per i self-signed. Permessi 0644

HTTPS su Apache

Dobbiamo prima installare il modulo mod_ssl, che genererà una configurazione default ssl.conf

Docker

Comandi

  • run <IMAGE> esegue un'image in un container, pullandola se necessario. Dopo, esegue il comando scritto, se non c'è nulla esce subito.
    • -it crea una shell interattiva
    • -e aggiunge un'env
    • -P pubblica a porte random
    • -p pubblica a porte arbitrarie
    • --name sceglie un nome
    • -v binda un volume (-v local/folder:container/folder oppure /contfolder per Docker volume)
  • ps visualizza tutti i container attivi
    • -a mostra anche i non attivi
  • images mostra le images salvate localmente
  • search cerca images su docker hub
  • rm <HASH/NAME> elimina un container stoppato
  • rmi <IMAGE> elimina un'image
  • stop stoppa un container
  • rename <NOME1> <NOME2> rinomina un container
  • pull pulla un'immagine da registry
  • save -o <filename>.tar <NOMECONT> esporta l'image ad un archivio
  • port mostra le porte associate

Utilizzo con nginx

Per avviare nginx: docker run --detach -p 80:80 --name web nginx:latest

About

Cheatsheet per bash in italiano. Realizzato per l'esame di gestione sistemi IT Cloud @ UniPR 2019-20

Resources

License

Stars

4 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages