Skip to content
Snippets Groups Projects
Commit c1827ee7 authored by Milan Santosi's avatar Milan Santosi
Browse files

shell workshop slides update

parent 9b25fc92
No related branches found
No related tags found
No related merge requests found
#+TITLE: Arbeiten auf der Commandozeile
#+AUTHOR: Björn & Milan
#+AUTHOR: Björn, Milan & Co.
#+DATE: 2012-10-18 Thu
#+STARTUP: beamer
#+LaTeX_CLASS: beamer
......@@ -13,35 +13,135 @@
- Bedienung eines Rechners, ggfs. nichtgrafisch ueber ssh ("Server").
- Szenario: Man will auf einem Server den von allen Nutzern verwendeten
Speicherplatz zusammenrechnen und das ganze als Textdatei abspeichern.
- du -s * | sort -nr > $HOME/user_space_report.txt
#+begin_src bash
du -s * | sort -nr > $HOME/user_space_report.txt
#+end_src
** Warum eine GUI Umgebung nicht ausreicht
- GUIs sind nuetzlich und sinnvoll fuer viele verschiedene
Anwendungsgebiete und Aufgaben.
- Symbolischer zugriff auf vorgefertigte Ablaeufe per Icon und Mausclick sind zwar bequem, aber unflexibel und koennen zu ungeniessbaren Workflows fuehren.
- Symbolischer zugriff auf vorgefertigte Ablaeufe per Icon und Mausclick
sind zwar bequem, aber unflexibel und koennen zu ungeniessbaren
Workflows fuehren.
- RSI (Tennisarm) durch Mausschubsen.
- Repetetives stupides Arbeiten im GUI; Beispielaufgabe: Finde alle Textdateien in einer mehrfach verschachtelten Verzeichnisstruktur die eine gewisse Zeichenkette beinhalten und ersetze diese Zeichenkette durch eine andere. -> Typischer Fall fuer ein Script.
- GUIs und Desktopumgebungen aendern sich sehr oft und sind alles andere als uniform.
** Die Vorteile der Commandozeile
- Einmal ausgefuehrtes bleibt in der History (C-r fuer Rueckwaertssuche)
- Man kann in einer Sprache (Syntax & Semantik) mit dem Computer "reden" und ihm sehr praezise mitteilen was man will und ist nicht auf eine "Babysprache" beschraenkt.
- Man kann in einer Sprache (Syntax & Semantik) interaktiv mit dem Computer "reden" und ihm sehr praezise mitteilen was man will und ist nicht auf eine "Babysprache" beschraenkt.
- Scriptbarkeit "fuer spaeter"
* Rudimentaere Grundlagen
** Navigation
* Grundlagen
** Ein paar oft benutzte Kommandos (1)
- pwd
- ls
- cd
- mv
- cp
- rm
- mkdir
- which
- cat
- less
- tar
- man / info
- bash
- $PATH
- env
- chmod / chown
** Ein paar oft benutzte Kommandos (2)
- top
- grep
- locate
- find
- cat
- echo
- alias
- free
- ps
- df
- fg
- jobs
- kill
- nohup
- su / sudo
** Verzeichnisstruktur
- Hierarchie(!) Wurzel "/" ist "ganz oben" im Dateisystem (und nicht "My Computer" oder "Arbeitsplatz").
- "/home/$USER" bzw "~" ist das Zuhause fuer persoenliche Nutzerdateien und Einstellungen (dotfiles)
- "." ist immer das aktuelle Verzeichnis, ".." bedeutet "eine Ebene hoeher"
- Andere Verzeichnisse unter / beinhalten z.b. Systemweite Einstellungen, geteilte Dateien, Dokumentationen, Quellcodes, Binaerdateien (Pedant zu .exe unter Windows).
- Verzeichnisse, Geraete und anderes Dinge koennen beliebig in die Hierarchie eingebunden werden (mount).
- Umbenennen und Verschieben ist ein und dasselbe (denn nur der inode-eintrag im Dateisystem geaendert wird)!
- Symbolische und "Harte" Verlinkung ist moeglich mit "ln".
** Ein paar Dinge zu Dateinamen
- Ein mit einem Punkt "." beginnender Dateiname steht fuer eine "versteckte" Datei oder "dotfile" (z.b. lokale Systemeinstellungen)
- Gross-/Kleinschreibung ist WICHTIG.
- Dateiendungen sind rein optional!
- Leerstellen sind moeglich, sollten aber vermieden oder "escaped" werden!
- Bitte Bitte keine Minuszeichen als erstes Zeichen im Dateinamen!
- Bitte bitte bitte keine Minuszeichen als erstes Zeichen im Dateinamen! (geht zwar, tut aber weh. Loesung "--" als Trenner)
** Was fuer Arten von Kommandos gibt es?
- Ausfuehrbare (chmod +x) dateien (im $PATH)
- Shell-builtins (z.b. cd, echo, alias)
- (selbstdefinierte) Shell-funktionen
- Aliase
*** Was und wo ist was?
- type
- which
- whereis
- echo $PATH
** Hilfe zur Selbsthilfe
- Immer ausprobieren: --help Kurzhilfe
- manpages und infopages(!!!) (erfordert oft *-doc pakete)
- apropros (== man -k)
- help fuer shell buildins
* Beispiele
** grep (Suchfunktion fuer Dateiinhalte mit oder ohne regex)
- grep -i "linuxparty" meinedatei
- grep -A 3 -i "pizza" meinedatei
- grep -r "hunger" * (oder "rgrep")
** find und locate (Suchfunktion fuer Dateinamen)
- locate suchstring
- updatedb
- find -iname "*party*
- find . -type f -iname *.sh -print0
- find -iname "MyCProgram.c" -exec md5sum {} \;
#+begin_src bash
find / -iname *.jpg -type f -print | xargs \
tar -cvzf images.tar.gz
#+end_src
** chmod / chown
- chmod ug+rwx meinedatei
- chown meinuser:meinegruppe meinedate
** Liste meistbenutzter Kommandos
#+begin_src bash
history | awk '{CMD[$2]++;\
count++;}END \
{ for (a in CMD)print CMD[a]\
" " CMD[a]/count*100 "% " a;}' \
\| grep -v "./" | column -c3 -s \
" " -t | sort -nr | nl | head -n10
#+end_src
** I/O umleiten
#+begin_src bash
ls > dateilisting.txt
sort < dateilisting.txt > sortiertes_dateilisting.txt
ls -la | less
ls -lt | head
du -h | sort -nr
find . -type f -print | wc -l
echo "test" > neuedatei
echo "muhalol" >> bereitsvorhandenedatei
#+end_src
No preview for this file type
% Created 2013-04-18 Thu 18:30
% Created 2013-04-18 Thu 19:59
\documentclass[bigger]{beamer}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
......@@ -19,7 +19,7 @@
\providecommand{\alert}[1]{\textbf{#1}}
\title{Arbeiten auf der Commandozeile}
\author{Björn \& Milan}
\author{Björn, Milan \& Co.}
\date{2012-10-18 Thu}
\hypersetup{
pdfkeywords={},
......@@ -39,7 +39,7 @@
\section{Einleitung}
\label{sec-1}
\begin{frame}
\begin{frame}[fragile]
\frametitle{Wozu eigentlich?}
\label{sec-1-1}
......@@ -47,8 +47,11 @@
\item Bedienung eines Rechners, ggfs. nichtgrafisch ueber ssh (``Server'').
\item Szenario: Man will auf einem Server den von allen Nutzern verwendeten
Speicherplatz zusammenrechnen und das ganze als Textdatei abspeichern.
\item du -s * | sort -nr > \$HOME/user$_{\mathrm{space}}$$_{\mathrm{report}}$.txt
\end{itemize}
\begin{verbatim}
du -s * | sort -nr > $HOME/user_space_report.txt
\end{verbatim}
\end{frame}
\begin{frame}
\frametitle{Warum eine GUI Umgebung nicht ausreicht}
......@@ -59,7 +62,9 @@
\end{itemize}
Anwendungsgebiete und Aufgaben.
\begin{itemize}
\item Symbolischer zugriff auf vorgefertigte Ablaeufe per Icon und Mausclick sind zwar bequem, aber unflexibel und koennen zu ungeniessbaren Workflows fuehren.
\item Symbolischer zugriff auf vorgefertigte Ablaeufe per Icon und Mausclick
sind zwar bequem, aber unflexibel und koennen zu ungeniessbaren
Workflows fuehren.
\item RSI (Tennisarm) durch Mausschubsen.
\item Repetetives stupides Arbeiten im GUI; Beispielaufgabe: Finde alle Textdateien in einer mehrfach verschachtelten Verzeichnisstruktur die eine gewisse Zeichenkette beinhalten und ersetze diese Zeichenkette durch eine andere. -> Typischer Fall fuer ein Script.
\item GUIs und Desktopumgebungen aendern sich sehr oft und sind alles andere als uniform.
......@@ -71,38 +76,183 @@ Anwendungsgebiete und Aufgaben.
\begin{itemize}
\item Einmal ausgefuehrtes bleibt in der History (C-r fuer Rueckwaertssuche)
\item Man kann in einer Sprache (Syntax \& Semantik) mit dem Computer ``reden'' und ihm sehr praezise mitteilen was man will und ist nicht auf eine ``Babysprache'' beschraenkt.
\item Man kann in einer Sprache (Syntax \& Semantik) interaktiv mit dem Computer ``reden'' und ihm sehr praezise mitteilen was man will und ist nicht auf eine ``Babysprache'' beschraenkt.
\item Scriptbarkeit ``fuer spaeter''
\end{itemize}
\end{frame}
\section{Rudimentaere Grundlagen}
\section{Grundlagen}
\label{sec-2}
\begin{frame}
\frametitle{Navigation}
\frametitle{Ein paar oft benutzte Kommandos (1)}
\label{sec-2-1}
\begin{itemize}
\item pwd
\item ls
\item cd
\item mv
\item cp
\item rm
\item mkdir
\item which
\item cat
\item less
\item tar
\item man / info
\item bash
\item \$PATH
\item env
\item chmod / chown
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Ein paar Dinge zu Dateinamen}
\frametitle{Ein paar oft benutzte Kommandos (2)}
\label{sec-2-2}
\begin{itemize}
\item top
\item grep
\item locate
\item find
\item cat
\item echo
\item alias
\item free
\item ps
\item df
\item fg
\item jobs
\item kill
\item nohup
\item su / sudo
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Verzeichnisstruktur}
\label{sec-2-3}
\begin{itemize}
\item Hierarchie(!) Wurzel ``/'' ist ``ganz oben'' im Dateisystem (und nicht ``My Computer'' oder ``Arbeitsplatz'').
\item ``/home/\$USER'' bzw ``\~{}'' ist das Zuhause fuer persoenliche Nutzerdateien und Einstellungen (dotfiles)
\item ``.'' ist immer das aktuelle Verzeichnis, ``..'' bedeutet ``eine Ebene hoeher''
\item Andere Verzeichnisse unter / beinhalten z.b. Systemweite Einstellungen, geteilte Dateien, Dokumentationen, Quellcodes, Binaerdateien (Pedant zu .exe unter Windows).
\item Verzeichnisse, Geraete und anderes Dinge koennen beliebig in die Hierarchie eingebunden werden (mount).
\item Umbenennen und Verschieben ist ein und dasselbe (denn nur der inode-eintrag im Dateisystem geaendert wird)!
\item Symbolische und ``Harte'' Verlinkung ist moeglich mit ``ln''.
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Ein paar Dinge zu Dateinamen}
\label{sec-2-4}
\begin{itemize}
\item Ein mit einem Punkt ``.'' beginnender Dateiname steht fuer eine ``versteckte'' Datei oder ``dotfile'' (z.b. lokale Systemeinstellungen)
\item Gross-/Kleinschreibung ist WICHTIG.
\item Dateiendungen sind rein optional!
\item Leerstellen sind moeglich, sollten aber vermieden oder ``escaped'' werden!
\item Bitte Bitte keine Minuszeichen als erstes Zeichen im Dateinamen!
\item Bitte bitte bitte keine Minuszeichen als erstes Zeichen im Dateinamen! (geht zwar, tut aber weh. Loesung ``--'' als Trenner)
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Was fuer Arten von Kommandos gibt es?}
\label{sec-2-5}
\begin{itemize}
\item Ausfuehrbare (chmod +x) dateien (im \$PATH)
\item Shell-builtins (z.b. cd, echo, alias)
\item (selbstdefinierte) Shell-funktionen
\item Aliase
\end{itemize}
\begin{itemize}
\item Was und wo ist was?
\label{sec-2-5-1}%
\begin{itemize}
\item type
\item which
\item whereis
\item echo \$PATH
\end{itemize}
\end{itemize} % ends low level
\end{frame}
\begin{frame}
\frametitle{Hilfe zur Selbsthilfe}
\label{sec-2-6}
\begin{itemize}
\item Immer ausprobieren: --help Kurzhilfe
\item manpages und infopages(!!!) (erfordert oft *-doc pakete)
\item apropros (== man -k)
\item help fuer shell buildins
\end{itemize}
\end{frame}
\section{Beispiele}
\label{sec-3}
\begin{frame}
\frametitle{grep (Suchfunktion fuer Dateiinhalte mit oder ohne regex)}
\label{sec-3-1}
\begin{itemize}
\item grep -i ``linuxparty'' meinedatei
\item grep -A 3 -i ``pizza'' meinedatei
\item grep -r ``hunger'' * (oder ``rgrep'')
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{find und locate (Suchfunktion fuer Dateinamen)}
\label{sec-3-2}
\begin{itemize}
\item locate suchstring
\item updatedb
\item find -iname ``*party*
\item find . -type f -iname *.sh -print0
\item find -iname ``MyCProgram.c'' -exec md5sum \{} \;
\end{itemize}
\begin{verbatim}
find / -iname *.jpg -type f -print | xargs \
tar -cvzf images.tar.gz
\end{verbatim}
\end{frame}
\begin{frame}
\frametitle{chmod / chown}
\label{sec-3-3}
\begin{itemize}
\item chmod ug+rwx meinedatei
\item chown meinuser:meinegruppe meinedate
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Liste meistbenutzter Kommandos}
\label{sec-3-4}
\begin{verbatim}
history | awk '{CMD[$2]++;\
count++;}END \
{ for (a in CMD)print CMD[a]\
" " CMD[a]/count*100 "% " a;}' \
\| grep -v "./" | column -c3 -s \
" " -t | sort -nr | nl | head -n10
\end{verbatim}
\end{frame}
\begin{frame}[fragile]
\frametitle{I/O umleiten}
\label{sec-3-5}
\begin{verbatim}
ls > dateilisting.txt
sort < dateilisting.txt > sortiertes_dateilisting.txt
ls -la | less
ls -lt | head
du -h | sort -nr
find . -type f -print | wc -l
echo "test" > neuedatei
echo "muhalol" >> bereitsvorhandenedatei
\end{verbatim}
\end{frame}
\end{document}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment