====== Esercitazione 5 ====== ====== Discussione su Makefile ====== Vogliamo scrivere un Makefile in grado di compilare tutti i sorgenti ''.c'' che si trovano nella directory dove si trova il Makefile, personalizzando la compilazione dei file eseguibili: CC = gcc -std=c99 # quale compilatore usare per compilare il codice CFLAGS = -g -Wall # flags passati al compilatore per debugging e warning etc.. OPTFLAGS= -O3 # flags passati al compilatore per ottimizzazione del codice INCLUDES= -I. # path dove si trovano gli include (non di sistema) LDFLAGS = -L. # path dove so trovano le librerie LIBS = # vanno messe qui le librerie da linkare SOURCES=$(wildcard *.c) # considera tutti i file .c nella directory BINS=$(SOURCES:.c=) # rimuove il suffisso .c dalla lista SOURCES .PHONY: all clean cleanall # personalizziamo la generazione dell'eseguibile da un .c utilizzando una Pattern Rule # Pattern Rules documentation: # https://www.gnu.org/software/make/manual/html_node/Pattern-Rules.html %: %.c $(CC) $(CFLAGS) $(INCLUDES) $(OPTFLAGS) -o $@ $< $(LDFLAGS) $(LIBS) # prima regola contenente il target all: $(BINS) clean: \rm -f *~ cleanall: clean \rm -f $(BINS) ====== Bash scripting ======= ===== Esercizio 1 ========== Estrarre dal file ''/etc/passwd'' la lista di tutti gli utenti della macchina utilizzando il comando ''cut'' (vedere slide su introduzione bash e manuale di ''cut''). Ordinare alfabeticamente la lista ottenuta utilizzando il comando ''sort'' (vedere man 1 sort).\\ NB: fare attenzione al seguente messaggio di warning contenuto nel manuale del comando sort:\\ "The locale specified by the environment affects sort order. Set LC_ALL=C to get the traditional sort order that uses native byte values." ===== Esercizio 2 ===== Scrivere uno script bash che dati come argomenti un nome di directory una parola ed un numero ''N'', stampa la lista di tutti i nomi di file contenuti nella directory che sono stati modificati negli ultimi ''N'' minuti e che contengono la parola passata come secondo argomento. Per cercare nella directory passata come argomento usare il comando ''find'', per trovare i file modificati meno di N minuti fa utilizzare l'opzione '-mmin' di find -- leggere il manuale ''man 1 find''. ===== Esercizio 3 ===== Scrivere uno script bash che prende come argomento un nome di directory, esegue il controllo che la directory esista e sia leggibile (opzione '-d' e '-r' del comando 'if') e restituisce un file in formato 'nodedirectory.tar.gz' contenente l'archivio compresso della directory passata come argomento.