Generelt om shell / skall

Like dokumenter
Shellprogrammer og -variabler

Oversikt. Beskrivelse Bash. 1 UNIX shell. 2 Kommandolinje som brukergrensesnitt. 3 Input og output. 4 Bash builtins. 5 Linux utilities.

Lynkurs i shellprogrammering under Linux

Filterprogrammer og redirigering av I/O

Filterprogrammer og redirigering av I/O

Linux-programmer som bruker regulæruttrykk: grep, sed, awk

Shellscripting I. Innhold

Filer i Linux og Bourne-again shell

Operativsystemer og nettverk

Betinget eksekvering og logiske tester i shell

Håndtering av filer og kataloger

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring

Håndtering av filer og kataloger

Operativsystemer og grensesnitt

UNIX/Linux brukerveiledning

Læringsmål og pensum. v=nkiu9yen5nc

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 1 Introduksjon til Programmering og Python. Professor Alf Inge Wang

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

Kurset består av to relativt uavhengige deler. Foreleser: Hårek Haugerud, rom PS431

Oppgaver til forkurs i informatikk dag 1

Høgskoleni Østfold. Ny/utsatt EKSAMEN

Håndtering av tekstfiler

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

Filer i Linux og Bourne-again shell

$ls -l $grep -i Olsen adresseliste.txt less #!/bin/sh $echo `ls` $chmod 755. Praktisk Linux. Grunnleggende skall kommandoer. Irene Ludvigsen Husa

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab. Rune Sætre / Anders Christensen {satre,

Oppgaver til forkurs i informatikk dag 2

Funksjonalitet og oppbygning av et OS (og litt mer om Linux)

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

Videregående shellprogrammering i Linux

Kapittel 1. Datamaskiner og programmeringsspråk. 1.1 Programmering

Labbene skal være oppsatt med dual boot. Disse labene er satt opp med dual boot, dvs. at vi må velge Linux eller Windows under oppstart av maskin.

1 Diverse linuxtips. Innhold. 1.1 Klipp og lim med musen

Linux distribusjoner

For å sjekke at Python virker som det skal begynner vi med å lage et kjempeenkelt program. Vi vil bare skrive en enkel hilsen på skjermen.

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring

Eksamensinformasjon. Prosesser. Prosesser. Eksamensoppgave. Operativsystemer (DATS/ITPE2500) Bokmål 06. juni 2017 kl

Oppgave 1 - Java og prosesser (20%)

Generelt om operativsystemer

Oppgave 1 - Linux kommandolinje (%)

EKSAMEN. Dato: 7. desember 2016 Eksamenstid: 09:00 13:00

EKSAMEN. Operativsystemer. 1. Læreboken "A Practical Guide to Red Hat Linux" av Mark Sobell 2. Maks. tre A-4 ark med selvskrevne notater.

Håndtering av tekstfiler

Programmeringsspråket C

1 Diverse linuxtips. Innhold

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab

EKSAMEN. Operativsystemer og nettverk

EKSAMEN Innføring i Linux

Introduksjon til dataanlegget ved Institutt for informatikk. Marc Bezem Institutt for informatikk Universitetet i Bergen

Dagens tema. Perl: Mer om regulære uttrykk Filer Lister og tabeller Kompilering og interpretering (kapittel ) IN 211 Programmeringsspråk

Videregående shellprogrammering

Filer og kataloger, prosesser og jobber

Høgskolen i Telemark Fakultet for allmennvitenskapelige fag

Ny EKSAMEN. Operativsystemer og nettverk

ITGK - H2010, Matlab. Repetisjon

Prøve- EKSAMEN. Operativsystemer med Linux

"How I hate this damned machine, I wish that I could sell it, It never does what I want it to, But only what I tell it".

Programmeringsspråket C

Generelt om operativsystemer

Brukerveiledning for ArkN4

Kapittel 1: Datamaskiner og programmeringsspråk

Løsningsforslag til eksamen 24. november 2015

Kapittel 1: Datamaskiner og programmeringsspråk

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab. Rune Sætre / Anders Christensen {satre, anders}@idi.ntnu.

Definisjon av prosess

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab. Forelesningsinfo. Tider Mandag Tirsdag Onsdag Torsdag Fredag

Unix/Linux en annen måte å gjøre ting på

Operativsystemer og nettverk Løsningsforslag til eksamen Oppgave 1. a) Linux-kommando: java Beregn & b) Shellprogram:

Ukeoppgaver 1: 30. aug 3. sep (INF Høst 2010)

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

Velkommen til INF5110 Kompilatorteknikk

Programmeringsspråket C

Generiske mekanismer i statisk typede programmeringsspråk

Python: Variable og beregninger, input og utskrift. TDT4110 IT Grunnkurs Professor Guttorm Sindre

1,r H øgs kolen i Østfol d

faks: Avdeling for Ingeniørutdanning. Cart Aælersgate Oslo - tlf 05. iu@hio.no

Del 1 En oversikt over C-programmering

Velkommen til INF2100

Unix/Linux en annen måte å gjøre ting på

Oversikt. Informatikk. INF1000: Grunnkurs i objektorientert programmering. Utenom INF1000 Informasjon & hjelp

Emnekode: SO135A Dato: onsdag 25. feb. I Antall oppgaver: 4

Fjerninnlogging over Internett

Obligatorisk oppgave 2 i INF 4130, høsten 2009

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

Bakgrunnen for INF2100. Velkommen til INF2100. Prosjektet. Hva gjør en kompilator?

MATLABs brukergrensesnitt

Velkommen til INF Kompilatorteknikk

Eksamensinformasjon. Linux kommandolinje. Linux kommandolinje. Eksamensinformasjon. Fakultet: Teknologi, kunst og design. Tid: 3 t.

Dagens tema Syntaks (kapittel Komp. 47, kap. 1 og 2)

Litt om kompilering og interpretering. Dagens tema Syntaks (kapittel Komp. 47, kap. 1 og 2) Syntaks og semantikk

4. Installasjonsveiledning. Experior - rich test editor for FitNesse -

Hva er en stack? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn sist

Litt om Javas class-filer og byte-kode

Velkommen til INF Kompilatorteknikk

Hva er en stack? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn sist

Forkurs i informatikk - Onsdag

Velkommen til INF Kompilatorteknikk

Linux forelesningsnotater. Hårek Haugerud TKD Høgskolen i Oslo og Akershus

Forelesning inf Java 5

Transkript:

Bourne-again Shell

Generelt om shell / skall Kommandolinjebasert brukergrensesnitt Leser en og en linje med tekstlig input Inputlinjene er kommandoer som skal utføres eller programmer som skal startes Shellet interpreterer (tolker) input, finner ut hva som skal utføres og starter utføringen Kommandoer til shellet kan også leses fra en tekstfil et shellscript / skallprogram

Fordeler ved å bruke et shell Mye bedre kontroll og fleksibilitet enn et GUI Raskere og mindre ressurskrevende enn GUI Stort utvalg høykvalitets kommandoer og verktøy Lett å skreddersy, programmere og automatisere Enkel tilgang til maskiner andre steder på nettet Bruker bare tastaturet, slipper musesyke o.l.

Ulemper ved å bruke shell Laget av eksperter for eksperter Mindre intuitivt enn GUI, vanskeligere å lære Enklere i GUI: Mindre operasjoner som f.eks. copy/paste Multitasking/bytting mellom vinduer Gammeldags og kjedelig?

Litt shell-historikk (1) Thompson shell Første programmerbare Unix-shell, 1971 Bourne shell (sh): Stephen Bourne, Bell Labs, ca 1977 Fullblods programmeringsomgivelse Finnes fortsatt på alle Linux/Unix maskiner

Litt shell-historikk (2) Bourne-again shell (Bash): Brian Fox/GNU, 1989 Bakoverkompatibel videreutvikling av sh Mest brukte Linux-shell Finnes mange andre shell som fortsatt er i bruk: C shell (BSD Unix) Almquist shell Korn shell Busybox Z shell Og enda flere...

Kommandolinjen i shellet Prompt / ledetekst: janh@ask:~$ brukernavn@maskin:katalog (~= hjemmeområdet) $ = venter på input Ledetekst kan settes til å være hva som helst Shellet tolker og starter evt. inntastet kommando etter at bruker taster <enter> Flere kommandoer kan gis på samme linje ved å skille dem med ; (semikolon)

Noen enkle kommandoer pwd skriv ut navn på stående katalog ls skriv ut innholdet i stående katalog passwd endre passordet for innlogging who hvem er logget på Linux-systemet? bash start et nytt (sub)shell exit avslutt shellet (logg av maskinen?)

Opsjoner og parametre til kommandoer Vanlig kommandosyntaks i Linux * : kommando [opsjoner] [parametre] Opsjoner: Endrer virkemåten for kommandoen Parametre: Angir hva kommandoen skal jobbe med *: [] betyr at dette er valgfritt (null eller flere)

Opsjoner Endrer virkemåten til en kommando Begynner (nesten) alltid med tegnet (bindestrek) Består ofte bare av ett tegn Flere opsjoner kan klumpes sammen

Eksempel: Opsjoner til ls Noen av (de mange) opsjonene til kommandoen for å skrive ut informasjon om filene i en katalog: ls l List filene i stående katalog i langt format ls lt Og i tillegg sortert på tidsstempel ls l t med og uten klumping av opsjoner ls ltar List også skjulte filer, og list filene i alle underkataloger av stående katalog (rekursivt)

Parametre Angir hva kommandoen skal jobbe med Er ofte filnavn eller tekststrenger: ls fil1.txt fil2.txt fil3.txt grep Høiberg navneliste.dat Kommandoer kan ha et ubegrenset antall parametre Flere filnavn kan angis med jokernotasjon (wildcards): ls *.txt

Dokumentasjon i Linux: man Syntaks: man kommando Viser manualsidene for en Linux-kommando Manualsider er relativt tekniske og detaljerte man har innebygget kommandoer for å bla frem og tilbake, søke og flytte rundt i manualteksten 'h' gir oversikt over disse lesekommandoene

Annen dokumentasjon av Linux-kommandoer apropos info help Søker etter ord i manualsidene Viser full documentation for en kommando * Dokumentasjon av de innebyggede Bash-kommandoene (se man builtins ) *: Skrevet i et mer fullstendig og lettlest språk enn manualsidene

Kommandohistorie Bash lagrer alle kommandoer som gis, i en liste history: Vis nummerert liste med kommandohistorie Tegnet '!' (utropstegn, aka bang ) brukes til å hente frem og kjøre på nytt kommandoer fra listen:!# Utfør kommando nummer #!! Utfør sist gitte kommando!s Utfør sist gitte kommando som starter med s Kommandohistorien kan slettes, redigeres og lagres * *: Se lærebokens avsnitt 2.4.1 og help history

Enkel output i Bash: echo echo skriver ut en linje med tekst til skjermen Opsjonen n gjør at det ikke skrives ut linjeskift For dokumentasjon* se: help echo less For å skrive ut spesialtegn** i shellet må vi sette en '\' (backslash, aka escape ) foran tegnet *: Det finnes også en GNU-echo, dokumentert i man echo **: F.eks. tegnene * & $ \

Skallvariable / Shell variables Brukes til å lagre informasjon og verdier i shellet Refereres til med variabelnavn: Navn kan bare inneholde tegnene a z A Z 0 9 og _ Variabelnavnet må begynne med en bokstav eller _ En variabel i shell er uten type: Lagrer bytes Tolkes som enten tekststreng, heltall eller array

Opprette og sette variable Skallvariable trenger ikke å deklareres, de opprettes automatisk ved første referanse til variabelen: VAR=verdi For å bruke variabelen / hente ut verdien* : $VAR eller: ${VAR} Sette en variabel lik en annen: VAR_2=$VAR *: Tegnet '$' er et (av mange) spesialtegn i shellet

Eksempel: Tilordning og bruk av variabel FARGE=Rød echo $FARGE echo $FARGEaktig (*) echo ${FARGE}aktig FARGE_2=Grønn; FARGE_3=$FARGE echo FARGE $FARGE $FARGE_2 $FARGE_3 (*): Gir ikke feilmelding, men oppretter en ny variabel med verdien NULL

Miljøvariable / Environment variables Systemvariable som opprettes og får verdier ved oppstart av maskinen eller ved innlogging Inneholder viktig systeminformasjon som bl.a. bestemmer hvorledes shellet skal oppføre seg Ikke endre på miljøvariable hvis du ikke vet hva du holder på med! For å se innholdet av alle miljøvariable: env

Noen standard miljøvariable USER Brukernavn for innlogget bruker HOME Brukers hjemmekatalog HOSTNAME Navn på datamaskinen MAIL Brukers mailkatalog PWD Stående katalog SHELL Shellet som skal startes ved innlogging HISTSIZE Lengden på listen med kommandohistorie PATH Katalogene der shellet finner kommandoer PS1 Bestemmer innholdet i ledetekst * *: Se side 51 i læreboken

alias Syntaks: alias navn='kommando' Et alias ligner på en skallvariabel, men brukes til å lage en ny Linux-kommando Vanlig bruk: Kortversjoner av lange, kompliserte og/eller ofte brukte kommandoer La vanlige tastefeil bli tolket som korrekt input Gjøre farlige kommandoer sikrere å bruke

alias eksempler Forkortelse av (en eller flere) kommandoer: alias lt='ls lt' alias pl='pwd; ls' Korrigering av skrivefeil: alias sl=ls Beskyttelse mot utilsiktet fjerning av filer: rm='rm i' Fjerne alias: unalias navn

Redigering av kommandolinjen i Bash Alle Linux-brukere bør lære seg å redigere teksten på kommandolinjen Gjør bruk av shellet enklere og mye mer effektivt Piltastene brukes til å bla i kommandohistorien Teksten på kommandolinjen redigeres med de samme kommandoene som brukes i editoren emacs * *: Prøv selv kommandoene på side 53 i læreboken, og gå gjennom opplæringsprogrammet i emacs (se øvingsoppgavene til uke 34)

Noen flere nyttige mekanismer på kommandolinjen i Bash Tilde expansion File name expansion Tab completion

Tilde expansion Tegnet ~ (tilde, krøll ) er spesialtegn i Bash Når shellet leser en ~ utvides denne til: ~ Ditt eget hjemmeområde ~bruker En annen brukers hjemmeområde Prøv: echo ~

File name expansion Flere filer kan angis med jokernotasjon (wildcards) Spesialtegnene for dette i Bash er: * []? Shellet utvider tegnene til en liste av filer i stående (eller angitt) katalog som matcher et mønster Betydning av spesialtegnene: * En vilkårlig tegnstreng ( hva som helst )? Ett vilkårlig tegn [] Ett av tegnene angitt mellom parantesene

File name expansion: Eksempler echo * Skriver ut navnene på alle filer og kataloger i stående katalog ls htdocs/*.html Skriver info. om alle HTML-filer i katalogen htdocs cat [abcd]*.txt Skriver ut innholdet av alle filer i stående katalog med et navn som slutter på.txt og begynner med enten a, b, c, eller d

Tab completion En <tab> (tabulatortegn) er spesialtegn i shellet Gjør at shellet forsøker å skrive ferdig / komplettere det som du holder på å taste inn: Trenger bare å skrive kommandoer og filnavn frem til de er éntydige, en <tab> fyller i resten automatisk To <tab> viser alle kommandoer/filnavn som matcher det som er skrevet frem til nå Prøv f.eks $ apt <tab> Gjør interaktiv bruk av shell mye raskere

Skreddersøm av shellet Egne aliaser, variable og kode som man ønsker at alltid skal ligge i shellet, legges i oppstartfiler :.profile Utføres ved innlogging med alle shell.bash_profile Utføres ved innlogging med Bash.bashrc Utføres når et nytt Bash startes Oppstartfilene er egentlig scripts / skallprogrammer Kan også kjøres direkte i det nåværende shellet: source ~/.bashrc

Litt om interpretere og kompilatorer Shell er en interpreterende omgivelse: Leser, tolker og utfører kode én linje om gangen Noen interpreterte språk: shell, LISP, Ruby, Python Klassiske programmeringsspråk kompileres: Hele programkoden oversettes til eksekverbar maskinkode av en kompilator Noen kompilerende programmeringsspråk: C, C++, FORTRAN, Java (sort of)

Java både kompilator og interpreter Programmer skrevet i Java kompileres til byte code: Nesten maskinkode, men uavhengig av hardware Kompilert Java-kode kjøres av en Java Virtual Machine (JVM) som er tilpasset hardware: JVM inneholder hele miljøet som trengs for å eksekvere Java-programmer, inkludert egen minnehåndtering Inneholder også en interpreter som tolker og kjører Java byte code Interpreteringen går mye raskere enn vanlig interpretering av kildekode i f.eks. shell

Interpretere i Linux shell Linjebaserte interpretere egner seg godt til OS: Hastighet ikke kritisk ved interaktivitet Kompilering av kildekode passer ikke til interaktiv bruk Effektivt og fleksibelt alternativ til GUI Kjører i et miljø som enkelt kan skreddersys til brukernes behov

Steg-for-steg virkemåte for interpreteren i Bash 1. Leser en linje med input fra tastatur eller fil 2. Splitter input opp i tokens (hele ord og operatorer) 3. Håndterer evt. anførselstegn (quotes) i input 4. Bytter ut aliaser med kommandoer 5. Splitter evt. input opp i flere kommandoer (hvis ';' er brukt) 6. Gjør alle shell expansions : ~, *,?, {}, $ 7. Setter opp alle redirigeringer av I/O, fjerner redirigering fra input 8. Utfører kommandoen(e) 9. Venter(?) til kommandoen(e) er ferdig. 10. Klar for å ta i mot neste linje med input.