DIARIO DELLa LEZIONE DEL GIORNO 2-10-2013, da intendersi come utile richiamo ai concetti spiegati durante la lezione, ma non come sostituto di un libro di testo o degli appunti che voi diligentemente avete (certamente) redatto. Fate attenzione: alcune cose spiegate in emacs sono certamente valide per emacs sotto ambiente MAC ma non sotto ambiente LINUX. Il miglior modo per capire quali sono...sperimentate! "LINEA DI COMANDO": Interfaccia utente che accetta comandi tramite digitazione. Al contrario delle interfacce GUI (graphic unit interface, quelle che tutti noi conosciamo), una linea di comando utilizza solo la tastiera come input. PoichÈ una linea di comando richiede comandi unici, questa interfaccia È spesso piu' difficile da apprendere poichÈ richiede la memorizzazione di comandi (tra i piu' vari e ciascuno con diverse opzioni). Tuttavia, È realmente utile soprattutto se si devono fare operazioni ripetute e/o su un gran numero di files, gestisce (in alcuni casi) anche semplici operazioni aritmetiche e con qualche fatica anche in virgola mobile. Imparare i rudimenti di linea di comando È pertanto il primo passo verso l'acquisizione del primo -non il piu' semplice ndr- linguaggio di scripting da affiancare all'uso dei linguaggi di programmazione quali C e Fortan che sono al contrario piu' a basso livello e che imparerete durante il corso (mi riferisco al C quindi niente paura!). PRIMO PASSO: apriamo la linea di comando o terminale (non vi È una regola il terminale puo' essere richiamato in modi diversi su sistemi operativi diversi) NB: Ricordiamoci che tutti i comandi impartibili tramite terminale sono Case Sensitive (ovvero l'utilizzo del maiuscolo o del minuscolo non È equivalente). Questo È vero anche per il C! Let's start! 1) Una volta aperto il terminale...In che directory di lavoro (working directory) siamo?? Impariamo il comando pwd (print working directory): scriviamo pwd quindi invio---> in output avremo il pathname assoluto della directory corrente 2) Ora creiamo una cartella con il comando mkdir (make directory) scriviamo mkdir nomedirectory invio--> crea una cartella dal nome "nomedirectory" nella cartella di lavoro il cui pathname abbiamo imparato essere restituito in output dal comando pwd 3) Come controllare che la cartella sia stata creata e piu' in generale quale È il contenuto della nostra working directory? Impariamo il comando ls (list segments): digitiamo ls-->in output avremo l'elenco di tutti i files e le directory contenute all'interno della working directory Il comando ls ha diverse opzioni: Proviamo a digitare ls -l ---> elenco con dettagli quali permessi di scrittura (w), lettura (r), esecuzione (x), data creazione, dimensione, nome ls -t---> elenco ordinato cronologicamente in base alla data di modifica possiamo anche combinarli ls -lt Questo esempio pratico ci insegna come È strutturato un comando linux nomecomando -opzione Tutte le opzioni di un comando sono consultabili dal manuale che si puÚ invocare da terminale col comando man: Es: man ls, mostrer‡ tutta la documentazione sul comando ls. per poter chiudere il manuale sar‡ sufficiente digitare "q" (quit) 4) Una volta che ci siamo accertati con ls che la directory È stata creata come vi accediamo? Impariamo il comando cd (change directory) cd ./nomedirectory ci fa entrare nella directory creata precedentemente dal nome nomedirectory una volta al suo interno, per tornare al livello superiore digitiamo cd .. Alternativamente possiamo anche usare cd pathcompletodelladirectory (nella quale vogliamo giungere) TIPS: a) Digitare il comando cd senza specificare null'altro ci riporta nella cartella associata alla variabile d'ambiente HOME, cioÈ (spesso) nella nostra home directory b) al posto di digitare per intero cd nomedirectory possiamo anche utilizzare il tasto TAB per completare il nome Es: Digitiamo cd ./nome quindi premiamo TAB e il sistema ci mostrer‡ tutte le possibili directory che iniziamo col suffisso "nome" (per esempio la nostra nomedirectory, piu' eventuali altre che inziano per "nome") 5) Ora torniamo alla cartella precendentemente creata e creiamo un file vuoto dal nome "file1" cd nomedirectory (per tornare contenuta nella working directory dal nome nomedirectory) quindi digitiamo touch file1---> il comando touch crea un file nuovo dal nome file1 qualora non esista gia un altro file dallo stesso nome (altrimenti si limita a cambiarne la data e l'ora di modifica) NB: Il file creato non ha estensione ma alle volte È importante aggiungerla, per esempio se avessimo voluto creare il nostro primo programma c avremmo dovuto specificare l'estensione *.c touch file1.c Questo file sar‡ riconosciuto come file sorgente di un programma C dal compilatore e dal nostro Editor di Testo (emacs) che sperabilmente provveder‡ ad evidenziare i comandi con diversi colori a seconda della loro tipologia 6) Il file creato È vuoto ma qualora volessimo vederne il contenuto in maniera rapida potremmo utilizzare il comando "more" more file1.c ---> restituisce in output tutto il contenuto del file NB:se il file È un eseguibile (per esempio il prodotto della compilazione di un file *.c) il file È binario e visualizzeremo solo caratteri illegibili! 7) Come copiare,spostare o rinominare un file? COPIA: comando cp (copy) cp file1.c file2.c copia il file file1.c nel file file2.c nella stessa directory cp file1.c ../file2.c copia il file file1.c nella directory superiore col nome file2.c cp file1.c ../ copia il file file1.c nella directory superiore senza cambiarne il nome cp file1.c pathnameassoluto/file2.c copia il file file1.c nella directory identificata dal suo pathname assoluto col nome fil2.c SPOSTARE (o rinominare): comando mv (move) mv file1.c file2.c rinomina il file file1.c nel file file2.c...Attenzione pero'! Se il file file2.c esiste sar‡ sovrascritto dal contenuto del file file1.c mv file1.c ../ sposta il file file1.c nella directory superiore mv file1.c ../file2.c sposta il file file1.c nella directory superiore e lo rinomina con il nome file2.c mv file1.c pathnameassoluto/file2.c sposta il file file1.c nella directory identificata dal suo pathname assoluto col nome file2.c 8) Come cancellare un file? COMANDO: rm (remove) rm file1.c cancella il file file1.c definitivamente rm pathnameassoluto/file1.c cancella il file file1.c contenuto nella directory identificata dal pathnameassoluto definitivamente TIP: supponiamo ci siano molti file che contengono uno stesso suffisso (per esempio file1.c file2.c file3.c oppure 1-codice.c 2-codice.c 3-codice.c) possiamo rimuoverli contemporaneamente utilizzando il carattere star: ES: rm file*.c È equivalente a digitare in sequenza i comandi rm file1.c, rm file2.c rm file3.c oppure rm *codice.c È equivalente a digitare in sequenza i comandi rm 1-codice.c,2-codice.c,3-codice.c 9)Un piccolo salvangente: qualora abbiamo inavvertitamente cancellato un file (i.e. file1.c) possiamo verificare che esista una sua versione temporanea tipicamente chiamata file1.c~ (in generale nomefile con ~ alla fine) con il comando ls. Se il file esiste possiamo quindi copiarlo e ripristinarlo nella sua interezza o, molto piu' spesso, parzialmente, per esempio usando mv o cp mv file1.c~ file1.c cp file1.c~ file1.c 10) Come editiamo un file?? Con l'editor di testo emacs! 10-a)Come aprire un file esistente con emacs? emacs nomefile In alternativa se preferiamo la versione grafica a quella testuale di emacs xemacs nomefile A questo punto emacs si aprira' in modalita' grafica in un'altra finestra ma il terminale nel quale abbiamo lanciato xemacs rimarra' bloccato dal processo "xemacs" Per evitare tutto questo possiamo lanciare emacs in background (dietro le scene!) xemacs nomefile & In questo modo emacs si aprira' in modalita' grafica in un'altra finestra e il terminale rimarra' utilizzabile 10-b)Come copiare parti di testo in emacs? Possiamo selezionare la parte di testo di interesse col mouse, quindi copiarla con la combinazione control+c, e incollarlo dove desiderato (cioe' dove andremo a posizionare il cursore in emacs) con la combinazione control+v 10-c)Come cancellare una riga o parte di una riga? Posizionamo il cursore su una riga in una data posizione, con la combinazione control+k elimineremo tutto cio' che segue il cursore. In emacs le parti di codice o testo rimosse finiscono in una zona temporanea chiamata kill-ring. Possiamo richiamare linee cancellate con control+k con la combinazione control+y. Questo È anche un utile modo col quale tagliare e incollare le righe. Esempio pratico: Abbiamo il seguente testo: "lorem ipsum dolor sit amet, consectetur adipisici elit, sed eiusmo tempor incidunt ut labore" Vogliamo tagliare la prima riga e aggiungerla alla fine: la cancelliamo con control+k quindi spostiamo il cursore al termine dell'ultima riga e con la combinazione control+y la ripristiniamo dal kill-ring Esito finale "consectetur adipisici elit, sed eiusmo tempor incidunt ut labore lorem ipsum dolor sit amet" 10-c)Come cercare una parola (o un comando, o il nome di una variabile..)? digitiamo la combinazione control+s, in basso a destra dell'editor comparir‡ una linea di comando con la stringa "I-search: " digitiamo la parola da inserire e premiamo invio Es. "I-search: lorem" emacs porter‡ il cursore sulla parola lorem o su una parola che contiene "lorem". Per continuare la ricerca nel documento della stessa parola possiamo continuare a digitare la combinazione control+s (ricerca progressiva lungo il documento) oppure control+r (ricerca regressiva verso l'inizio del documento) Per uscire dalla ricerca premere Esc. 10-d) Supponiamo di voler raggiungere una data riga nel documento (molto utile in fase di compilazione, dove alle volte gli errori sono identificati per numero riga) Digitiamo la combinazione Esc+X (o alle volte potrebbe essere un'altra combinazione) quindi digitiamo la keyword "goto-line" (Vai alla linea) e premiamo invio, in basso a destra comparir‡ nella linea di comando di emacs la stringa: "Goto line: " digitiamo il numero della riga da raggiungere e premiamo invio Es. "Goto line: 228" emacs ci portera' alla riga 228 (nel caso di questo documento alla riga precedente!) 10-e) Salvare il proprio lavoro: Digitare la combinazione control+x,s (ovvero premiamo control e tenendolo premuto premiamo x e quindi s) 10-f) Chiudere emacs: Digitare la combinazione control+x,c (ovvero premiamo control e tenendolo premuto premiamo x e quindi c) Se il documento non È stato in precedenza salvato e vi abbiamo apportato delle modifiche, emacs si premura di chiederci se salvare o meno le modifiche, noi digiteremo "y" se vogliamo salvarle e "n" in caso contrario. NOTA FINALE: QUESTO FILE E' STATO SCRITTO CON EMACS!