Ein erstes eigenes Unix-Programm (Hello World)

Ähnliche Dokumente
Oft feinere / flexiblere Regelung der Zugriffsrechte gewünscht ACLs = access control lists Features:

Oft feinere / flexiblere Regelung der Zugriffsrechte gewünscht ACLs = access control lists Features:

Ein erstes eigenes Unix-Programm (Hello World)

Shells: Was passiert mit einem Kommando?

1. Aliases. Shells: Was passiert mit einem Kommando? 2. Variablen. Shell durchläuft folgenden Zyklus: Ersatz für häufige / längliche Kommandos

Shells: Was passiert mit einem Kommando?

Shells: Was passiert mit einem Kommando? Prozeßkontrolle. Aliases. Variable. Wichtige Environment-Variablen. Shell durchläuft folgenden Zyklus:

Grundlagen der Programmierung

Shell. Oder Konsole suchen im Application Finder. Auch Terminal, Bash oder Kommandozeile genannt. Bash nimmt Befehle entgegen und führt diese aus

UNIX/Linux Lösung. Mär 14, 17 20:40 Seite 1/6. Prozeßsynchronisation (was ist das?, wo kommt es vor?, Beispiel?):

Computer & GNU/Linux Einführung Teil 3

UNIX Die wichtigsten Befehle

Unterschiede in Dateien mit diff

Okt 10, 16 17:29 UNIX/Linux Lösung

Sep 25, 18 8:36 UNIX/Linux Lösung

GNU/Linux Introduction Part 3. Simon M. Haller, Sebastian Stabinger iis.uibk.ac.at

Computer & GNU/Linux Einführung Teil 4

Einführung Unix Shell

UNIX/Linux Lösung. Mär 18, 18 15:34 Seite 1/6

shell variable HOWTO.txt

Arbeiten mit der Shell Teil 2

Arbeiten mit der Shell Teil 2

LINUX Gesamtmitschrift

Arbeiten mit der Shell Teil 2

Computernutzung für Experimentalphysiker Frei progammierbare Rechner als Werkzeuge in der Experimentalphysik Teil 2

Linux II. Reguläre Ausdrücke Editoren Scripting. 2 Linux II. Linux I II III Res WN/TT NLTK XML Weka E Reguläre Ausdrücke Editoren Scripting

UNIX Power Tools. Helferlein für den Alltag. Maximilian Haupt

Programmierung I Einführung in Unix/Linux

X Anmelden am System. X System herunterfahren. X Grundlegendes zur Shell. X Das Hilfesystem. X Dateioperationen. X Bewegen im Verzeichnisbaum

Ein- und Ausgabeumlenkung

Computer & GNU/Linux Einführung Teil 3

Das Kommando zum suchen nach Files unter bestimmten Kriterien Häufigste Verwendung:

UNIX Grundlagen. Sascha Frank SS August 2006 UNIX I. Sascha Frank. Einführung. Basic Befehle. Quellen

Exkurs: Unix Programme

Okt 02, 17 12:28 UNIX/Linux Lösung

Arbeiten in der Unix-Kommandozeile

Basiskonzepte des Rechnerbetriebs

Vorlesung Unix-Praktikum

Hochschule Für Angewandte Wissenschaften FH München Sommersemester Thomas Kolarz. Folie 1.

Arbeiten mit der Shell in Linux

Arbeiten in der Unix-Kommandozeile

Arbeiten mit der Shell Teil 2

SHELL WE BEGIN? EINE EINFÜHRUNG IN DIE SHELL. Max Rosin - ANKÜNDIGUNGEN

D.2 Sonderzeichen (2)

Crashkurs Kommandozeile

Unix/Linux Grundlagen für Einsteiger

Einführung in Linux Ein Untertitel

Systemverwaltung mittels Skripts

Linux I II III Res/Pro WN/TT Reguläre Ausdrücke Editoren Scripting. Linux II. 2 Linux II. Reguläre Ausdrücke Editoren Scripting. Ressourcen-Vorkurs

Vorlesung Unix-Praktikum

1 Linux-Befehlsübersicht

Übungen zu Systemprogrammierung I Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2003 C-Uebung1.fm

Linux I II III Res WN/TT NLTK XML Weka E Theorie Terminal Ein- und Ausgabe. Linux I. 1 Linux I. Theorie Terminal Ein- und Ausgabe. Ressourcen-Vorkurs

Der Standard-Editor vi

GNU/Linux Introduction Part 2. Simon M. Haller, Sebastian Stabinger iis.uibk.ac.at

Arbeiten in der Unix-Kommandozeile

L A TEX, Linux, Python

Kommandos im Unix-Grundkurs Digicomp-UXE. Inhalt

Linux Prinzipien und Programmierung

Grundlagen der Programmierung in C Klassen

ZWEITE ÜBUNG ZUR EINFÜHRUNG IN DIE PROGRAMMIERUNG FÜR COMPUTERLINGUISTEN LEONIE WEIßWEILER

Einführung in die Kommandozeile

Perl-Praxis. Dateien und Daten. Jörn Clausen

Basiskonzepte des Rechnerbetriebs. 6 Die Shell: Der UNIX-Kommandointerpreter

Benutzung der Manpage, Shell Teil 3

Computer & GNU/Linux Einführung Teil 2

Unix Shell und einige Tools

SelfLinux Dateien unter Linux

Kommandozeilen effizient nutzen und verstehen

Computer & GNU/Linux Einführung Teil 2. Simon Haller iis.uibk.ac.at

Werkzeuge der Informatik Einführung in Unix/Linux

Unix Grundlagen. - ii - Ambit Professional Seminar Series. Autor: Prof. J. Anton Illik Diplom-Informatiker

Shell-Programmierung

Arbeiten in der Unix-Kommandozeile. PeP et al. Toolbox Workshop

UNIX/Linux-Minikurs. Ralf Seidler, Daniel Walther, Torsten Bosse. Institut für Informatik Friedrich-Schiller-Universität Jena

Desktop ade: Me and my shell

Shellkurs Shell, SSH, Skripte... Justus Pfannschmidt, Carola Bothe, Samuel Domiks Freie Universität Berlin

Wiederholung und Vertiefung. Programmieren in C. Pointer und so... thoto. /dev/tal e.v. 6. April 2013 (Version vom 11. April 2013) Programmieren in C

Technische Praxis der Computersysteme I 3. Vorlesung

Shell-Scripting Linux-Kurs der Unix-AG

Shell-Scripting Linux-Kurs der Unix-AG

Teil 1: Einführung in die Shell. Was ist die Shell? Wichtige Kommandos (1) Einführung in die Shell. Grundlagen der Shell-Programmierung

1 Einleitung UNIX und seine Philosophie 13

Linux-Einführung Übung

1. Aufgabenblatt Unix

1. Aufgabenblatt Unix

Dateisystem 2, RegEx, Manpages

Pipes. 1 Prozessverwaltung. 2 Pipes. 3 Rechteverwaltung. 4 Secure Shell Fernsteuern anderer Rechner. 5 Kommandos, Kommandos, Kommandos,...

Arithmetik in der tcsh

Einführung in die Kommandozeile

Einführung in das Arbeiten an Unix-Rechnern

I Grundlagen der System-Administration 8

Praktikum RO1 Einführung Linux / Ubuntu / Bash

Linux Kurs Vorlesung 2 - Terminal

Die Shell. [prompt]> <command> <flags> <args>

Linux I II III Res/Pro WN/TT Theorie Terminal Ein- und Ausgabe. Linux I. 1 Linux I. Theorie Terminal Ein- und Ausgabe. Ressourcen-Vorkurs

Grafische Oberfläche, Shell Teil 4 Linux-Kurs der Unix-AG

Transkript:

Spawning processes Ein Prozeß wurde immer von einem anderen erzeugt Dieser heißt Vater-Prozeß (parent process) Ausnahme: Prozeß Nummer 1 ('init' oder 'launchd') Vorgang heißt engl. to spawn hild process erbt das komplette Environment (außer IDs u.ä.) top in der Shell 52 Ein erstes eigenes Unix-Programm (Hello World) 53 1

Prozesse aus Sicht der Shell 3 Zustände eines Prozesses (aus Sicht der Shell) Foreground: Default - Ausgabe (stdout) des Prozesses erscheint im Terminal-Fenster - Eingabe (stdin) des Prozesses kommt vom Keyboard Background: - Ausgabe erscheint im Fenster - Eingabe nicht erlaubt estoppt: - Prozeß schläft 54 Kommandos zur Prozesskontrolle Befehl Funktion ps ps -edfjw ps -auxw kill pid kill -9 pid command & jobs trl- trl-z fg bg trl-s trl-q top Prozesse anzeigen Alle Prozesse anzeigen dito für einige andere Unix-Varianten Prozeß mit PID pid abbrechen (wie trl-) wenn der Prozeß trotzdem nicht aufhören will J Prozeß im Hintergrund starten Prozesse im Hintergrund anzeigen Foreground-Prozeß abbrechen (interrupt) Foreground-Prozeß anhalten (stoppen) Zuletzt angehaltenen Prozeß im Foreground weiterlaufen lassen Angehaltenen Prozeß im Background weiterlaufen lassen Ausgabe des Foreground-Prozesses anhalten (Pr. läuft weiter) Ausgabe weiterlaufen lassen tabellarische Ansicht aller Prozesse und deren PU-Verbrauch 55 2

Weitere Tools / Utilities Utility Funktion more less head / tail cat file echo string(s) diff file1 file2 du sk dirs df h dir df -hl quota -v Speicherbedarf der Verzeichnisse in kb anzeigen röße und freien Platz auf einer Platte anzeigen röße und freien Platz aller lokalen Platten anzeigen Freie Quota anzeigen lpr [ Pdrucker] file.ps lpq [ Pdrucker] a2ps [ Pdrucker] file File anzeigen (more ist ein sog. Pager) Noch besser als more Anfang / Ende des Files ausgeben File ausgeben (keine Funktionalität) String(s) auf stdout (typ. Terminalfenster) ausgeben Unterschiede zwischen 2 Files anzeigen Postscript-File ausdrucken Printer-Queue anzeigen ASII-File (z.b. Listing) ausdrucken 56 Utility Funktion id who / w Eigene IDs ausgeben Wer ist eingeloggt? date cal Datum anzeigen Jahreskalender anzeigen locate file where command Ort von File anzeigen (auch Teilstrings) Ort(e) von ommand anzeigen tar czf archive.tgz dirs Komplettes Verzeichnis (inkl. Unterverzeichnisse) zusammenpacken und komprimieren tar xzf archive.tgz Archiv wieder auspacken gzip/gunzip File komprimieren / dekomprimieren mount /mnt/floppy Floppy mounten / unmounten 57 3

Bash vs. tcsh Annahme im folgenden: bash (ksh / sh) Häufig ist die Tcsh für die interaktive ommandline-nutzung komfortabler Wie stellt man fest, welche Shell man gerade hat? Einfach 'set' eingeben: Resultat unter tcsh % set tcsh 6.14.00 version tcsh 6.14.00 Resultat unter bash $ set BASH=/bin/bash BASH_VERSINFO=([0]=3 BASH_VERSION='3.2.17(1)- Wer (t)csh hat, kann eine Bash starten mit dem Kommando bash 58 Shells: Was passiert mit einem Kommando? Shell durchläuft folgenden Zyklus mit jedem eingegebenen Befehl: 1. Kommando wird aus der Eingabezeile oder einem Script gelesen 2. Aliases werden expandiert 3. Variable Substitutions werden vorgenommen 4. Wildcards (File-Patterns) werden expandiert 5. Das Kommando wird ausgeführt: - Entweder von der Shell selbst (built-in commands) - Oder in einem neuen Prozeß 59 4

1. Aliases Ersatz für häufige / längliche Kommandos Beispiel: % alias mo less % alias merrimac ssh merrimac.sdsc.edu l zach % mo program.cpp % merrimac alias zeigt alle Aliases an Alias 'merrimac' wird ersetzt Alias 'mo' wird ersetzt Definiert Alias 'merrimac' Definiert Alias 'mo' 60 2. Variablen Variable = Name + Wert, Wert = Zeichenkette 2 Arten: Normale Shell-Variablen Environment-Variablen, sind auch in Kind-Prozessen (child process) bekannt Setzen: $ export TMP=/tmp $ tmpdir=/home/stud/zach/tmp Achtung: kein Space beim =-Zeichen Verwenden des Wertes einer Shell-Variablen: % cp file ${tmpdir} % echo ${TMP} 61 5

Anhängen eines Strings an eine bestehende Shell-Variable: $ PATH=${PATH}:${HOME}/bin $ PATH=${HOME}/bin:${PATH} Ausdrucken des Wertes einer bestimmten Variablen: $ echo $var $ echo $VAR Ausdrucken aller Environment-Variablen: $ printenv 62 Wertzuweisung aus Kommandos (Back ticks) 63 6

Komplexere Variablen-Ersetzung Suffix bzw. Präfix löschen: ${VAR%suffix} ${VAR#prefix} Löscht Schluß der Variable VAR, falls er gleich suffix ist Löscht Anfang der Variable VAR, falls er gleich prefix ist Beispiel: % file=program.cpp % mv ${file} ${file%.cpp}.c % mv ${file} ${file%.p}.c % mv ${file} ${file#prog}prog wird ersetzt zu % mv program.cpp program.c % mv program.cpp program.cpp.c % mv program.cpp Program.c 64 4. File Patterns File-Pattern = File-Name mit Wildcards: *? [] Wildcard? * {0,1,2} [0-9] [a-za-z0-9] [^0-9] Bedeutung enau ein beliebiges Zeichen Beliebig viele beliebige Zeichen (auch 0) enau ein Zeichen aus der Menge {0,1,2} enau ein Zeichen aus der Menge {0,,9} enau ein Zeichen aus der Menge {a,,z,a,,z,0,,9} enau ein Zeichen nicht aus der Menge {0,,9} Beispiele: % ls % ls % ls % ls *.cpp *.h [0-9][0-9]*.ppt???R?? *[^a-za-z0-9_.,-]* 65 7

Weitere Beispiele Alle Latex-Files in allen Unterverzeichnissen von papers anzeigen: % ls papers/*/*.tex Alle JPE-Bilder aus /tmp (inklusive aller Unterverzeichnisse) nach ~/Pictures verschieben: % mv /tmp/*.jpg /tmp/*/*.jpg /tmp/*/*/*.jpg ~/Pictures Achtung: Die Expansion des Patterns erfolgt durch die Shell Folge: das Kommando (hier ls/mv) sieht nur eine Liste von File-Namen 66 Kleine Warnung zu rm Task: Shoot Yourself in The Foot The proliferation of modern programming languages (all of which seem to have stolen countless features from one another) sometimes makes it difficult to remember what language you're currently using. This handy reference is offered as a public service to help programmers who find themselves in such a dilemma. % ls foot.c foot.h foot.o toe.c toe.o % rm *.o rm:.o no such file or directory % ls % 67 8

Quotation Achtung: das Kommando sieht die Wildcards nie Die Shell expandiert Wildcards normalerweise immer Quotation verhindert, daß Wildcards (allg. Meta-Zeichen) von der Shell expandiert werden Quotation-Arten: \ verhindert die Expansion des folgenden Zeichens % echo \*.ppt \$PATH verhindert die Expansion der Wildcards, ersetzt aber Variablen % echo *.ppt $PATH ' ' verhindert jegliche Expansion (Wildcards, Variablen, ) % echo '*.ppt $PATH' 68 5. Wie die Shell ein Kommando ausführt 1. Built-in: Shell führt Kommando selbst aus Beispiel: echo 2. Sonst: externes Programm Beispiel: ls dir 3. command in PATH (Environment-Variable) suchen Falls nicht gefunden, Fehlermeldung, fertig 4. Kind-Prozeß erzeugen Erinnerung: erbt Environment des Vater-Prozesses (= Shell) 5. Argumente (Zeichenketten) dem Prozeß bereitstellen Argumente werden durch Space (i.a.) getrennt 6. Warten bis Kind-Prozeß beendet 69 9

Suchpfade Suchpfad = Environment-Variable mit Liste von durch : (Doppelpunkt) getrennten Verzeichnissen Beispiel: % echo $PATH.:/usr/bin:/bin:/usr/local/bin:/home/zach/bin Kommandos werden in PATH gesucht Test: File mit Namen des Kommandos im ersten Verzeichnis und dieses ist executable? ausführen Sonst: nächstes Verzeichnis in PATH untersuchen Analog für Man-Pages und andere 70 Wichtige Suchpfade Variable Bedeutung PATH MANPATH Suchpfad für Kommandos Suchpfad für Man-Pages LD_LIBRARY_PATH Suchpfad für dynamisch gelinkte Libraries 71 10

Kommandos zum Viewing von Files more, less Interaktiv, zeigen *jeden* File-Typ im Terminal-Fenster an Unter Linux/Mac ist more = less Suchen mit '/', weitersuchen mit 'n', rückwärts 'N', u.v.m. Environment-Variable: setenv PAER 'less -l' Nicht-interaktiv: cat (concatenate = aneinanderhängen) head, tail = einige der ersten / letzten Zeilen anzeigen 72 Standard-I/O Shell etabliert 3 Kanäle zu / vom Prozeß: Standard Input (stdin) Program Standard Output (stdout) Standard Error (stderr) Default-mäßig mit Terminal (= Fenster & Keyboard) verbunden 73 11

Redirection Verbindet Standard-I/O mit Files Prozeß (Programm) bemerkt davon nichts Redirection > file >> file >& file < file Bedeutung stdout wird nach file geschrieben stdout wird an file angehängt stdout und stderr umlenken Programm liest aus file, nicht von Keyboard Shell bietet noch viele weitere Möglichkeiten Beispiele: % ls -1 > dir-listing % sort dir-listing % ps -edfyl > procs.log % bc -l < berechnung.txt 74 Pipelines Effiziente Möglichkeit, komplexere Kommandos aus einfacheren zusammenzubauen Selber Mechanismus wie bei Redirection, um Prozesse miteinander zu verbinden: stdout Utility or User Program pipe stdin Utility or User Program Syntax: % command command command 75 12

Beispiele Listings weiterverarbeiten: % ls -1 sort more % ls -1 *.cpp wc l % ls -1 *.cpp sort > sorted-dir % ls -1 tr -s _ Tip: Bauen Sie eine Pipeline immer eine Stufe nach der anderen auf 76 Die Unix-Philosophie Small is beautiful Make each tool do one thing only Make it do it well Ein bisschen wie Zen Read from stdin, write to stdout (if sensible) Use ASII-Files 77 13

Filter Sind hauptsächlich dazu gedacht, um damit Pipelines aufzubauen enerelle Verwendung: Filter lesen von stdin, schreiben auf stdout Arbeiten fast immer zeilenweise Utility Funktion cut fmt sort uniq wc tr grep rev bc Felder oder Zeichenspalten ausschneiden Text umformatieren Zeilenweise sortieren (auch nach Teil-Key) Duplikate entfernen Zeichen, Wörter, und Zeilen zählen Zeichen ersetzen oder Mehrfachvorkommen stauchen Zeichenketten in der Eingabe suchen (s.u.) Reihenfolge der Zeichen umkehren (zeilenweise) Taschenrechner mit unendlich hoher enauigkeit 78 Beispiele Alle Filegrößen in einen File ausgeben: % ls -l tr -s cut -d' ' -f5 > sizes.txt Nur die letzten paar Zeilen eines langen Directory-Listings: % ls -l tail -10 79 14

Alle top-level Verzeichnisse in einem Zip-Archiv auflisten (jedes Vorkommen nur 1 Mal) % unzip -l Archive.zip tr -s cut -d' ' -f5 cut -d'/' -f1 sort uniq 80 Beispiel für sort uniq egeben: triangle { <-2, 1.5, 0>, <1, 1.5, 1.73205>, <1,1.5,-1.73205> } triangle { <0, -1, 2>, <1.73205, -1, -1>, <-1.73205, -1, -1> } triangle { <-2, 1.5, 0>, <1, 1.5, 1.73205>, <-1.73205, -1, -1> } triangle { <1, 1.5, 1.73205>, <1,1.5,-1.73205>, <0, -1, 2> } triangle { <-2, 1.5, 0>, <1,1.5,-1.73205>, <1.73205, -1, -1> } triangle { <0, -1, 2>, <-1.73205, -1, -1>, <1, 1.5, 1.73205> } triangle { <1.73205, -1, -1>, <-1.73205, -1, -1>, <-2, 1.5, 0> } triangle { <0, -1, 2>, <1.73205, -1, -1>, <1,1.5,-1.73205> } esucht: Liste der Eckpunkte, ohne doppelte Punkte (um den geg. File in ein anderes Format umzuwandeln): -1.73205, -1, -1-2, 1.5, 0 0, -1, 2 1, 1.5, 1.73205 1,1.5,-1.73205 1.73205, -1, -1 Schönhardt's Polyeder 81 15

Der Stream-Editor sed Ein sehr mächtiges Tool zum Pre-/Post-Processing von ASII-Files (= reine Text-Files): Als Standalone-Tool: file1.txt Liest eine Zeile nach der anderen aus dem File sed: bearbeitet jew. eine Zeile durch (mehrere) Anweisungen Schreibt eine bearbeitete Zeile in den File heraus file2.txt % sed arguments file1.txt > file2.txt Oder als Teil einer Pipeline: Utility stdout pipe stdin stdout sed stdin pipe Utility % sed arguments 82 Häufigste Verwendung von Sed = substitute: % sed -e 's/orig. string/new string/g' Triviales Beispiel: % echo Sunday sed -e 's/day/night/g' Anmerkung: Sed kann noch viel mehr (s. Man Page) Mehr Infos zu sed auf http://www.grymoire.com/unix/sed.html 83 16

Konvertierung von ASII-Files mit sed Häufige Aufgabe: einen File, z.b. Meßergebnisse in diesem Format, 1,23; 4,0; 3,1415926; 100; 1000,0; 10E3; 0,0001 in einen File dieses Formats umwandeln 1.23 4.0 3.1415926 100 1000.0 10E3 0.0001 Lösung: sed -e 's/;/ /g' -e 's/,/./g' tabelle1.txt > tabelle2.txt global flag = alle Vorkommen in einer Zeile ersetzen substitute command 84 Beispiel von vorhin: eometrie-file bereinigen / umwandeln 85 17

Suchen & Finden find: findet Files aus einem Verzeichnisbaum Kriterien: Name, Datum, röße, Aktionen: Filename ausgeben, Löschen, grep: findet Zeilen in einem File, in denen bestimmte Zeichenketten vorkommen locate: findet Files im kompletten Filesystem (mittels autom. erzeugter Datenbank) 86 Suchen nach Files mittels find Das Kommando zum Suchen nach Files unter bestimmten Kriterien Häufigste Verwendung: % find directory -name 'file-pattern' Liefert eine Liste von Files in directory und allen Unterverzeichnissen, die auf die Kriterien passen 87 18

find in aller Kürze Syntax: find dirs criteria actions Kriterien: -name file-pattern -type file-type -size file-size -date Aktionen: -print -exec command {} \; -ls ibt jeden gefunden Filenamen aus Führt command für jeden gefunden File aus und ersetzt dabei {} durch den jew. aktuellen Filenamen 88 Beispiele Den File foo im Home suchen (rekursiv): % find $HOME name foo Wenn man den Namen nicht mehr genau kennt: % find $HOME iname '*foo*' Alle JPE's finden und File-Namen in File schreiben: % find $HOME name '*.jpg' > image-list Alle JPE's größer als 100kB finden: % find $HOME name '*.jpg' size +100k Alle Backup-Kopien löschen: % find. name '*.bak' print exec rm {} \; 89 19

Anzahl Files in einem kompletten Verzeichnis-Baum zählen: % find. -type f wc l Wieviele Musik-Files habe ich? % cd Music % find. -iname '*.mp3' wc -l 90 20