Nyttige Linux-kommandoer · Log.java:} catch (FileNotFoundException e) {Scanner.java:} catch...

Post on 04-Mar-2021

11 views 0 download

Transcript of Nyttige Linux-kommandoer · Log.java:} catch (FileNotFoundException e) {Scanner.java:} catch...

Nyttige Linux-kommandoerHvordan du kan jobbe mer effektivt

Dag Langmyhr

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

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

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

En Unix-prosess

standard instandard 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 OK1− 255 Feil

$ javac Hallo.java$ echo $?0

INF1010 fellesundervisning 21.1.2015 7

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

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

Omdirigering av filer

?

INF1010 fellesundervisning 21.1.2015 10

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

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

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

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

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

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

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

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

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