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)
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.”
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.
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.