Nyttige Linux-kommandoer Hvordan du kan jobbe mer effektivt Dag Langmyhr
Trenger vi kommandovinduer i dag? Svaret er nei for de fleste brukerne, men ikke for ekspertene. Ofte går det fortere å bruke kommandoer Kommandoer er utrolig mye kraftigere enn menyer Men dessverre: Det tar lenger tid å lære seg å bruke kommandoer Linux-kommandoene har ofte rare navn Bruken av parametre kan variere ganske mye INF1010 fellesundervisning 21.1.2015 2
Et eksempel Jeg har en stor PDF-fil. Jeg må plukke ut side 1 2 til filen b-1.pdf, side 3 4 til b-2.pdf osv. $ for N in seq 1 1128 > do > A= expr 2 \* $N - 1 > B= expr 2 \* $N > pdfjam -o b-$n.pdf brev-des-2014.pdf $A-$B > done INF1010 fellesundervisning 21.1.2015 3
Diverse kommandotolkere En kommandotolker («shell») leser brukerens kommandoer og starter prosesser som utfører de programmene brukeren angir. I Linux kan alle ganske enkelt lage sin egen kommandotolker; de vanligste er: /bin/sh («Bourne shell» etter Stephen Bourne) fra 1977 finnes i alle Unix-er. bash («Bourne-again shell» fra GNU-prosjektet) er en utvidelse av sh og mest brukt i dag. ifish lages av alle som tar INF1060. INF1010 fellesundervisning 21.1.2015 4
En Unix-prosess standard in standard out standard error status INF1010 fellesundervisning 21.1.2015 5
En Unix-prosess? INF1010 fellesundervisning 21.1.2015 6
Statusverdien Den sier hvordan kjøringen gikk: 0 OK 1 255 Feil $ javac Hallo.java $ echo $? 0 INF1010 fellesundervisning 21.1.2015 7
a && b Kjør a, og, hvis den gikk bra (dvs ga status 0), kjør b. $ javac Hallo.java && java Hallo Da trengs bare for å kompilere og kjøre på nytt. INF1010 fellesundervisning 21.1.2015 8
Egne programmer #! /bin/sh j javac "$1".java && java "$1" Vi må angi at dette er et kjørbart program: $ chmod a+x j $ mv j ~/bin (Dette behøver bare gjøres én gang.) $ j Hallo javac Hallo.java java Hallo Hallo, alle sammen! INF1010 fellesundervisning 21.1.2015 9
Omdirigering av filer? INF1010 fellesundervisning 21.1.2015 10
Anta at vi har et program som starter med å lese data som brukeren gir: $ java MittProgram Hva heter du? Arne Aas Hvilket år er du født? 1990 Hvilken by er du født i? Oslo : Programmet har en intrikat feil så vi må kjøre det mange ganger. INF1010 fellesundervisning 21.1.2015 11
Lag fil med dataene du oppgir: Arne Aas 1990 Oslo : data.txt Nå kan du omdirigere standard input til å komme fra filen: $ java MittProgram <data.txt Hva heter du? Hvilket år er du født? Hvilken by er du født i? : INF1010 fellesundervisning 21.1.2015 12
Du kan også omdirigere utskriften som går til standard output om du vil ta vare på den: $ java MittProgram >resultat.txt? INF1010 fellesundervisning 21.1.2015 13
Rør Ekstra moro blir det når vi kan kople standard input fra én prosess til standard output for en annen med et rør («pipe»). INF1010 fellesundervisning 21.1.2015 14
Når vi skal bruke rør, er det nyttig å merke seg at de aller fleste Unix-programmer er laget etter følgende konvensjon: Først kommer opsjonene (-xxx) Så kommer filnavnene Hvis ingen filnavn, leser programmet fra standard input. INF1010 fellesundervisning 21.1.2015 15
Hvor mange Java-filer har jeg i denne mappen? $ ls *.java wc -l 322 (Programmet wc teller antall linjer, ord og byte; wc -l viser bare antall linjer.) Send utskriften fra et program rett til skriveren: $ java MittProg print -pipe INF1010 fellesundervisning 21.1.2015 16
Andre nyttige programmer grep leter etter en gitt tekst i én eller flere filer. Bruker jeg «Exception» i disse Java-programmene? $ grep Exception *.java AlboCError.java:public class AlboCError extends RuntimeExcepti AlboC.java: } catch (IOException e) {} AlboC.java:catch (InterruptedException e) {} AlboC.java:catch (IOException e) { CharGenerator.java:} catch (FileNotFoundException e) { CharGenerator.java: } catch (IOException e) { CharGenerator.java: } catch (IOException e) { Code.java:} catch (FileNotFoundException e) { Log.java:} catch (FileNotFoundException e) { Scanner.java:} catch (NumberFormatException e) { $ grep Exception *.java wc -l 10 INF1010 fellesundervisning 21.1.2015 17
find leter etter filer i en mappe og alle undermapper; brukeren kan velge hva som skal gjøres med filen. Jeg har en fil som heter foredrag-1010.pdf ett eller annet sted; hvor? $ find ~ -name foredrag-1010.pdf -print Hvilke Java-filer har jeg lagret totalt? Skriv en sortert liste. $ find ~ -name "*.java" -print sort print -pipe INF1010 fellesundervisning 21.1.2015 18
Hva mer? Det er mye mer: Bash er et komplett programmeringsspråk med variabler, if-tester, while-løkker og metoder. Det finnes mange flere nyttige småprogrammer. Hvor kan man da lære om dette? http://tldp.org/howto/ Bash-Prog-Intro-HOWTO.html er en grei innføring i bruk av Bash. man bash gir den fulle beskrivelsen av Bash; den er oversiktlig men ikke lettlest. INF1010 fellesundervisning 21.1.2015 19