19
Nyttige Linux-kommandoer Hvordan du kan jobbe mer effektivt Dag Langmyhr

Nyttige Linux-kommandoer · Log.java:} catch (FileNotFoundException e) {Scanner.java:} catch (NumberFormatException e) {$ grep Exception *.java | wc -l 10 INF1010 fellesundervisning

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Nyttige Linux-kommandoer · Log.java:} catch (FileNotFoundException e) {Scanner.java:} catch (NumberFormatException e) {$ grep Exception *.java | wc -l 10 INF1010 fellesundervisning

Nyttige Linux-kommandoerHvordan du kan jobbe mer effektivt

Dag Langmyhr

Page 2: Nyttige Linux-kommandoer · Log.java:} catch (FileNotFoundException e) {Scanner.java:} catch (NumberFormatException e) {$ grep Exception *.java | wc -l 10 INF1010 fellesundervisning

Trenger vi kommandovinduer i dag?Svaret er nei for de fleste brukerne, men ikke forekspertene.

Ofte går det fortere å bruke kommandoerKommandoer er utrolig mye kraftigere enn menyer

Men dessverre:Det tar lenger tid å lære seg å bruke kommandoerLinux-kommandoene har ofte rare navnBruken av parametre kan variere ganske mye

INF1010 fellesundervisning 21.1.2015 2

Page 3: Nyttige Linux-kommandoer · Log.java:} catch (FileNotFoundException e) {Scanner.java:} catch (NumberFormatException e) {$ grep Exception *.java | wc -l 10 INF1010 fellesundervisning

Et eksempelJeg har en stor PDF-fil. Jeg må plukke ut side 1–2 til filenb-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

Page 4: Nyttige Linux-kommandoer · Log.java:} catch (FileNotFoundException e) {Scanner.java:} catch (NumberFormatException e) {$ grep Exception *.java | wc -l 10 INF1010 fellesundervisning

Diverse kommandotolkereEn kommandotolker («shell») leser brukerenskommandoer og starter prosesser som utfører deprogrammene brukeren angir.

I Linux kan alle ganske enkelt lage sin egenkommandotolker; 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

Page 5: Nyttige Linux-kommandoer · Log.java:} catch (FileNotFoundException e) {Scanner.java:} catch (NumberFormatException e) {$ grep Exception *.java | wc -l 10 INF1010 fellesundervisning

En Unix-prosess

standard instandard out

standard error

status

INF1010 fellesundervisning 21.1.2015 5

Page 6: Nyttige Linux-kommandoer · Log.java:} catch (FileNotFoundException e) {Scanner.java:} catch (NumberFormatException e) {$ grep Exception *.java | wc -l 10 INF1010 fellesundervisning

En Unix-prosess

?

INF1010 fellesundervisning 21.1.2015 6

Page 7: Nyttige Linux-kommandoer · Log.java:} catch (FileNotFoundException e) {Scanner.java:} catch (NumberFormatException e) {$ grep Exception *.java | wc -l 10 INF1010 fellesundervisning

Statusverdien

Den sier hvordan kjøringen gikk:�

0 OK1− 255 Feil

$ javac Hallo.java$ echo $?0

INF1010 fellesundervisning 21.1.2015 7

Page 8: Nyttige Linux-kommandoer · Log.java:} catch (FileNotFoundException e) {Scanner.java:} catch (NumberFormatException e) {$ grep Exception *.java | wc -l 10 INF1010 fellesundervisning

a && bKjø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

Page 9: Nyttige Linux-kommandoer · Log.java:} catch (FileNotFoundException e) {Scanner.java:} catch (NumberFormatException e) {$ grep Exception *.java | wc -l 10 INF1010 fellesundervisning

Egne programmerj

#! /bin/sh

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 Hallojavac Hallo.javajava HalloHallo, alle sammen!

INF1010 fellesundervisning 21.1.2015 9

Page 10: Nyttige Linux-kommandoer · Log.java:} catch (FileNotFoundException e) {Scanner.java:} catch (NumberFormatException e) {$ grep Exception *.java | wc -l 10 INF1010 fellesundervisning

Omdirigering av filer

?

INF1010 fellesundervisning 21.1.2015 10

Page 11: Nyttige Linux-kommandoer · Log.java:} catch (FileNotFoundException e) {Scanner.java:} catch (NumberFormatException e) {$ grep Exception *.java | wc -l 10 INF1010 fellesundervisning

Anta at vi har et program som starter med å lese datasom brukeren gir:$ java MittProgramHva heter du? Arne AasHvilket år er du født? 1990Hvilken by er du født i? Oslo

:

Programmet har en intrikat feil så vi må kjøre detmange ganger.

INF1010 fellesundervisning 21.1.2015 11

Page 12: Nyttige Linux-kommandoer · Log.java:} catch (FileNotFoundException e) {Scanner.java:} catch (NumberFormatException e) {$ grep Exception *.java | wc -l 10 INF1010 fellesundervisning

Lag fil med dataene du oppgir:

data.txtArne Aas1990Oslo:

Nå kan du omdirigere standard input til å komme frafilen:$ java MittProgram <data.txtHva heter du?Hvilket år er du født?Hvilken by er du født i?

:

INF1010 fellesundervisning 21.1.2015 12

Page 13: Nyttige Linux-kommandoer · Log.java:} catch (FileNotFoundException e) {Scanner.java:} catch (NumberFormatException e) {$ grep Exception *.java | wc -l 10 INF1010 fellesundervisning

Du kan også omdirigere utskriften som går til standardoutput om du vil ta vare på den:

?

$ java MittProgram >resultat.txt

INF1010 fellesundervisning 21.1.2015 13

Page 14: Nyttige Linux-kommandoer · Log.java:} catch (FileNotFoundException e) {Scanner.java:} catch (NumberFormatException e) {$ grep Exception *.java | wc -l 10 INF1010 fellesundervisning

RørEkstra moro blir det når vi kan kople standard input fraén prosess til standard output for en annen med etrør («pipe»).

INF1010 fellesundervisning 21.1.2015 14

Page 15: Nyttige Linux-kommandoer · Log.java:} catch (FileNotFoundException e) {Scanner.java:} catch (NumberFormatException e) {$ grep Exception *.java | wc -l 10 INF1010 fellesundervisning

Når vi skal bruke rør, er det nyttig å merke seg at dealler fleste Unix-programmer er laget etter følgendekonvensjon:

Først kommer opsjonene (-xxx)Så kommer filnavneneHvis ingen filnavn, leser programmet fra standardinput.

INF1010 fellesundervisning 21.1.2015 15

Page 16: Nyttige Linux-kommandoer · Log.java:} catch (FileNotFoundException e) {Scanner.java:} catch (NumberFormatException e) {$ grep Exception *.java | wc -l 10 INF1010 fellesundervisning

Hvor mange Java-filer har jeg i denne mappen?$ ls *.java | wc -l322

(Programmet wc teller antall linjer, ord og byte; wc -lviser bare antall linjer.)

Send utskriften fra et program rett til skriveren:$ java MittProg | print -pipe

INF1010 fellesundervisning 21.1.2015 16

Page 17: Nyttige Linux-kommandoer · Log.java:} catch (FileNotFoundException e) {Scanner.java:} catch (NumberFormatException e) {$ grep Exception *.java | wc -l 10 INF1010 fellesundervisning

Andre nyttige programmergrep leter etter en gitt tekst i én eller flere filer.

Bruker jeg «Exception» i disse Java-programmene?$ grep Exception *.javaAlboCError.java:public class AlboCError extends RuntimeException {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 -l10

INF1010 fellesundervisning 21.1.2015 17

Page 18: Nyttige Linux-kommandoer · Log.java:} catch (FileNotFoundException e) {Scanner.java:} catch (NumberFormatException e) {$ grep Exception *.java | wc -l 10 INF1010 fellesundervisning

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 ellerannet sted; hvor?$ find ~ -name foredrag-1010.pdf -print

Hvilke Java-filer har jeg lagret totalt? Skriv en sortertliste.$ find ~ -name "*.java" -print | sort | print -pipe

INF1010 fellesundervisning 21.1.2015 18

Page 19: Nyttige Linux-kommandoer · Log.java:} catch (FileNotFoundException e) {Scanner.java:} catch (NumberFormatException e) {$ grep Exception *.java | wc -l 10 INF1010 fellesundervisning

Hva mer?Det er mye mer:

Bash er et komplett programmeringsspråk medvariabler, 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 greiinnføring i bruk av Bash.man bash gir den fulle beskrivelsen avBash; den er oversiktlig men ikkelettlest.

INF1010 fellesundervisning 21.1.2015 19