Zsh: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
KKeine Bearbeitungszusammenfassung
KKeine Bearbeitungszusammenfassung
 
(8 dazwischenliegende Versionen von 6 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Um mit dem Betriebssystem zu interagieren, und teilweise auch,
{{SEITENTITEL:zsh}}{{righttoc}}
damit das Betriebssystem selbst arbeiten kann,
In der Informatik wird als Shell die Software bezeichnet, mittels derer ein Benutzer mit einem Betriebssystem interagiert – eine Mensch-Maschine-Schnittstelle. Während „Kernel“ den innersten Kern eines Betriebssystems bezeichnet, bezeichnet „Shell“ (englisch für „Schale“, „Hülle“ oder „Außenhaut“) dessen äußerste Schicht und damit jene Schnittstelle (englisch Interface) auf die ein Benutzer trifft. Damit ist es möglich, Kerneldienste zu nutzen und sich über Systemkomponenten zu informieren oder sie und andere Programme zu benutzen.
bedarf es eines Interpreter-Programms, dass die eingegebenen Befehle an
das System weiterreicht.
Unter Unix, und Unix-verwandten Systemen wird
dieser Kommandozeileninterpreter Shell genannt.
Unter Arch ist diese Shell standardmäßig die [[bash]].
Eine Alternative ist die sog. Zsh ("Z-Shell"), die 1990 von Paul Falstad an der
Princeton University geschrieben wurde.


==Vorteile==
Arch Linux installiert standardmäßig die [[bash]].
Die Zsh hat viele Vorteile gegenüber anderen Shells:
*Schneller
Eine Alternative ist die [http://zsh.sourceforge.net/ zsh].
*Verbesserte, intelligente Tab Vervollständigung
 
Die Z Shell wurde 1990 von Paul Falstad an der Princeton University entwickelt.
 
zsh bietet viele Vorteile gegenüber bash:
 
*Intelligente Tab-Vervollständigung
*Verbessertes Globbing
*Verbessertes Globbing
*Erweiterte Variablen/Array-Handhabung
*Erweiterte Variablen- und Array-Handhabung
*Rechtschreibprüfung
*Rechtschreibprüfung
*Nachträglich ladbare Module
*Nachträglich ladbare Module
Zeile 20: Zeile 18:
*Eine verbesserte History
*Eine verbesserte History


==Installation==
{{Installation|repo=extra|paket=zsh}}
Die Zsh befindet sich in [extra] und lässt sich mit
 
  pacman -S zsh
== Konfiguration ==
installlieren.
 
Weil die Standard Konfiguration ziemlich puristisch ist, kann man auf
Zuerst sollte man sichergehen, dass zsh richtig installiert wurde, indem man folgenden Befehl ausführt:
eine fertige zurückgreifen, die von der Linux Distribution grml zur Verfügung
 
gestellt wird. Inzwischen ist diese Konfiguration ebenfalls in [extra] zu finden:
# zsh
  pacman -S grml-zsh-config
 
Es sollte nun der Einrichtungsassistent {{ic|zsh-newuser-install}} erscheinen. Um die Einrichtung zu überspringen, kann man {{taste|q}} drücken. Falls der Einrichtungsassistent nicht angezeigt wurde kann man ihn wie folgt manuell ausführen:
 
# zsh /usr/share/zsh/functions/Newuser/zsh-newuser-install -f
 
Alternativ kann man die Konfiguration von [https://grml.org/zsh/ grml] verwenden:
 
# pacman -S grml-zsh-config
 
Die {{ic|.zshrc}} sollte nicht bearbeitet werden.
 
Für eigene Einstellungen verwendet man die Datei {{ic|.zshrc.local}}. Falls man einige Einstellungen verändern will, kann man diese auch in die {{ic|.zshrc.pre}} schreiben. Die grml-Einstellungen werden dann überschrieben.
Befehle für eine Login Shell kann man unter {{ic|.zprofile}} vornehmen. Einige Hinweise zur grml-Konfiguration sind in den Weblinks zu finden.
 
Um zsh für den aktuellen Benutzer als Standardshell einzurichten, kann man den folgenden Befehl verwenden:
 
  $ chsh -s /bin/zsh


==Optimal : Zsh als Standard Shell einstellen==
== Funktionen ==
Als erstes sollte man den vollständigen Pfad der ZSH herausfinden:
===History===
which zsh
Die History der zsh ist sehr mächtig. Vielleicht kennst du das Problem, dass du mehrere Shells offen hast, und du dann den Befehl $ foo1, den du in der ersten Konsole eingegeben hast, auch in der zweiten Shell haben willst. Die zsh liest die History immer wieder neu ein, d.h du musst nur einmal Enter drücken und die History von der ersten Konsole ist auch auf der zweiten verfügbar. Es kann auch eine History von nur einem einzelnen Befehl aufgerufen werden. Nach Eingabe des Befehls reicht ein Drücken der PfeilAuf- oder -Ab-Taste aus.
===Globbing===
Jeder verwendet es, aber nicht jeder ist sich dessen bewusst, wenn man z.B {{ic|ls *txt}} ausführt, hat man Globbing verwendet. Globbing von der zsh ist aber noch sehr viel mächtiger: H-Glob gibt Auskunft über die verschiedenen Möglichkeiten:


Um die Standardshell für den aktuellen Nutzer zu wechseln, verwendet man
{{hc|Aus der zshexpn-Manpage|<nowiki>  /      directories
folgenden Befehl:
  .      plain files
chsh -s /bin/zsh
  @      symbolic links
  =      sockets
  p      named pipes (FIFOs)
  *      executable plain files (0100)
  %      device files (character or block special)
  %b    block special files
  %c    character special files
  r      owner-readable files (0400)
  w      owner-writable files (0200)
  x      owner-executable files (0100)
  A      group-readable files (0040)
  I      group-writable files (0020)
  E      group-executable files (0010)
  R      world-readable files (0004)
  W      world-writable files (0002)
  X      world-executable files (0001)
  s     setuid files (04000)
  S      setgid files (02000)
  t      files with the sticky bit (01000)


==Hinweise zu der GRML Konfiguration==
print *(m-1)          # Files modified up to a day ago
Die .zshrc sollte nicht bearbeitet werden, für eigene Einstellungen verwendet
print *(a1)          # Files accessed a day ago
man die Datei '''.zshrc.local'''
print *(@)            # Just symlinks
Falls man einige Einstellungen verändern will, kann man diese auch in '''.zshrc.pre'''
print *(Lk+50)        # Files bigger than 50 kilobytes
schreiben, die grml Einstellungen werden dann überschrieben.  
print *(Lk-50)        # Files smaller than 50 kilobytes
Befehle für eine Login Shell kann man unter '''.zprofile''' vornehmen.
print **/*.c          # All *.c files recursively starting in $PWD
Einige Hinweise zur GRML Konfiguration findet man hier :
print **/*.c~file.c  # Same as above, but excluding 'file.c'
http://grml.org/zsh/grmlzshrc.html
print (foo|bar).*    # Files starting with 'foo' or 'bar'
http://grml.org/zsh/grml-zsh-refcard.pdf
print *~*.*          # All Files that do not contain a dot
chmod 644 *(.^x)      # make all plain non-executable files publically readable
print -l *(.c|.h)    # Lists *.c and *.h
print **/*(g:users:)  # Recursively match all files that are owned by group 'users'
echo /proc/*/cwd(:h:t:s/self//) # Analogous to >ps ax | awk '{print }'<</nowiki>}}


==History==
===Hashes===
Die History der ZSH ist sehr mächtig. Vielleicht kennst du das Problem,
Eine weitere Funktion sind die Hashes. Mit ihnen kann man sich viel lästige Tipparbeit ersparen. Ein neuer Hash wird folgendermaßen definiert:
dass du mehrere Shells offen hast, und du dann den Befehl $foo1, den du
in der ersten Konsole eingegeben hast, auch in die zweiten Shell haben willst.
Die ZSH liest die History immer wieder neu ein, d.h du musst nur einmal
Enter drücken und die History von der ersten Konsole ist auch auf der zweiten
verfügbar.
Es kann auch eine History von nur einem einzelnen Befehl aufgerufen werden.
Nach Eingabe des Befehles reicht ein Drücken der PfeilAuf oder Ab Taste aus.


$ hash -d foo=/path/to/directory


==Globbing==
Anstatt {{ic|cd /path/to/directory}} muss man jetzt nur noch {{ic|cd ~foo}} ausführen. Für Superfaule: ein ~foo reicht bei gehashten Verzeichnissen sogar auch zum Wechseln des Verzeichnisses aus.
Jeder verwendet es, aber nicht jeder ist sich dessen bewusst:
Wenn man z.B "ls *txt" ausführt, hat man Globbing verwendet.  
Globbing von der Zsh ist aber noch sehr viel mächtiger:
H-Glob gibt Auskunft über die verschiedenen Möglichkeiten:


    /      directories
== Tipps ==
    .      plain files
    @      symbolic links
    =     sockets
    p      named pipes (FIFOs)
    *      executable plain files (0100)
    %      device files (character or block special)
    %b    block special files
    %c    character special files
    r      owner-readable files (0400)
    w      owner-writable files (0200)
    x      owner-executable files (0100)
    A      group-readable files (0040)
    I      group-writable files (0020)
    E      group-executable files (0010)
    R      world-readable files (0004)
    W      world-writable files (0002)
    X      world-executable files (0001)
    s      setuid files (04000)
    S      setgid files (02000)
    t      files with the sticky bit (01000)


  print *(m-1)          # Files modified up to a day ago
=== grml Batterie ===
  print *(a1)          # Files accessed a day ago
Die grml-Konfiguration bietet auch die Anzeige des Ladestandes der Batterie an. Durch Einfügen von GRML_DISPLAY_BATTERY=1 in die {{ic|.zshrc.local}} kann dieses Feature aktiviert werden.
  print *(@)            # Just symlinks
=== Eigene Funktionen mit sudo ===
  print *(Lk+50)        # Files bigger than 50 kilobytes
Eigene Funktionen können nicht einfach so [[sudo]] benutzen. Dafür muss der zsh mit {{ic|emulate -L zsh}} mitgeteilt werden, dass sie sich selbst emulieren soll.
  print *(Lk-50)        # Files smaller than 50 kilobytes
  print **/*.c          # All *.c files recursively starting in $PWD
  print **/*.c~file.c  # Same as above, but excluding 'file.c'
  print (foo|bar).*    # Files starting with 'foo' or 'bar'
  print *~*.*          # All Files that do not contain a dot
  chmod 644 *(.^x)      # make all plain non-executable files publically readable
  print -l *(.c|.h)    # Lists *.c and *.h
  print **/*(g:users:)  # Recursively match all files that are owned by group 'users'
  echo /proc/*/cwd(:h:t:s/self//) # Analogous to >ps ax | awk '{print }'<


==Hashes==
== Deinstallation ==
Eine weitere Funktion sind die Hashes.
'''Achtung:''' Es ist dringend erforderlich vor der Deinstallation die Standardshell zu ändern. Tut man dies nicht, hat man nach der Deinstallation von zsh keinen Zugriff auf eine funktionsfähige Shell mehr. Um bash als Standardshell einzurichten, kann man den folgenden Befehl ausführen:
Mit ihnen kann man sich viel lästige Tipparbeit ersparen.
Ein neuer Hash wird folgendermaßen definiert:


''hash -d foo=/path/to/directory''.
$ chsh -s /bin/bash


Anstatt ''cd /path/to/directory'' muss man jetzt nur noch ''cd ~foo'' ausführen.
Falls auch noch andere Benutzer außer der Eigene die zsh benutzen, muss man deren Shell auch ändern:
Für Superfaule : ein ~foo reicht bei gehashten Verzeichnissen sogar auch zum
Wechseln des Verzeichnisses aus.


==GRML-Tipp: Batterie==
# chsh -s /bin/bash ''Benutzer''
Die GRML Konfiguration bietet auch die Anzeige des Ladestandes von der
Batterie an.
Durch Einfügen von BATTERY=1 in die .zshrc.local kann dieses Feature aktiviert werden.


==Weblinks==
Nun kann man das zsh-Paket wie gewohnt entfernen.
* [http://de.wikipedia.org/wiki/Zsh Wikipedia] {{sprache|de}}
* [http://grml.org/ Grml Live-CD] {{sprache|en}}
* [http://grml.org/zsh/zsh-lovers.html ZSH-Lovers: Tips, Tricks und Beispiele] {{sprache|en}}
* http://strcat.de/zsh/ {{sprache|en}}


== Weblinks ==
* {{wikipedia|Z_shell}}
* [http://zsh.sourceforge.net/ zsh] {{sprache|en}}
* [http://grml.org/zsh/zsh-lovers.html grml zsh-Lovers] {{sprache|en}}
* [http://grml.org/zsh/grmlzshrc.html grml Onlinedokumentation] {{sprache|en}}
* [http://grml.org/zsh/grml-zsh-refcard.pdf grml Referenzkarte] {{sprache|en}}


[[Kategorie:Konsole]]
[[Kategorie:Konsole]]
[[Kategorie:Tipps und Tricks]]
[[en:Zsh]]

Aktuelle Version vom 9. Juni 2019, 16:57 Uhr

In der Informatik wird als Shell die Software bezeichnet, mittels derer ein Benutzer mit einem Betriebssystem interagiert – eine Mensch-Maschine-Schnittstelle. Während „Kernel“ den innersten Kern eines Betriebssystems bezeichnet, bezeichnet „Shell“ (englisch für „Schale“, „Hülle“ oder „Außenhaut“) dessen äußerste Schicht und damit jene Schnittstelle (englisch Interface) auf die ein Benutzer trifft. Damit ist es möglich, Kerneldienste zu nutzen und sich über Systemkomponenten zu informieren oder sie und andere Programme zu benutzen.

Arch Linux installiert standardmäßig die bash.

Eine Alternative ist die zsh.

Die Z Shell wurde 1990 von Paul Falstad an der Princeton University entwickelt.

zsh bietet viele Vorteile gegenüber bash:

  • Intelligente Tab-Vervollständigung
  • Verbessertes Globbing
  • Erweiterte Variablen- und Array-Handhabung
  • Rechtschreibprüfung
  • Nachträglich ladbare Module
  • Individualisierbarer Prompt
  • Eine verbesserte History

Installation

Das Programm ist als zsh in extra verfügbar, und kann von dort mittels Pacman installiert werden.

pacman -S zsh

Konfiguration

Zuerst sollte man sichergehen, dass zsh richtig installiert wurde, indem man folgenden Befehl ausführt:

# zsh

Es sollte nun der Einrichtungsassistent zsh-newuser-install erscheinen. Um die Einrichtung zu überspringen, kann man q drücken. Falls der Einrichtungsassistent nicht angezeigt wurde kann man ihn wie folgt manuell ausführen:

# zsh /usr/share/zsh/functions/Newuser/zsh-newuser-install -f

Alternativ kann man die Konfiguration von grml verwenden:

# pacman -S grml-zsh-config

Die .zshrc sollte nicht bearbeitet werden.

Für eigene Einstellungen verwendet man die Datei .zshrc.local. Falls man einige Einstellungen verändern will, kann man diese auch in die .zshrc.pre schreiben. Die grml-Einstellungen werden dann überschrieben.

Befehle für eine Login Shell kann man unter .zprofile vornehmen. Einige Hinweise zur grml-Konfiguration sind in den Weblinks zu finden.

Um zsh für den aktuellen Benutzer als Standardshell einzurichten, kann man den folgenden Befehl verwenden:

$ chsh -s /bin/zsh

Funktionen

History

Die History der zsh ist sehr mächtig. Vielleicht kennst du das Problem, dass du mehrere Shells offen hast, und du dann den Befehl $ foo1, den du in der ersten Konsole eingegeben hast, auch in der zweiten Shell haben willst. Die zsh liest die History immer wieder neu ein, d.h du musst nur einmal Enter drücken und die History von der ersten Konsole ist auch auf der zweiten verfügbar. Es kann auch eine History von nur einem einzelnen Befehl aufgerufen werden. Nach Eingabe des Befehls reicht ein Drücken der PfeilAuf- oder -Ab-Taste aus.

Globbing

Jeder verwendet es, aber nicht jeder ist sich dessen bewusst, wenn man z.B ls *txt ausführt, hat man Globbing verwendet. Globbing von der zsh ist aber noch sehr viel mächtiger: H-Glob gibt Auskunft über die verschiedenen Möglichkeiten:

Aus der zshexpn-Manpage
   /      directories
   .      plain files
   @      symbolic links
   =      sockets
   p      named pipes (FIFOs)
   *      executable plain files (0100)
   %      device files (character or block special)
   %b     block special files
   %c     character special files
   r      owner-readable files (0400)
   w      owner-writable files (0200)
   x      owner-executable files (0100)
   A      group-readable files (0040)
   I      group-writable files (0020)
   E      group-executable files (0010)
   R      world-readable files (0004)
   W      world-writable files (0002)
   X      world-executable files (0001)
   s      setuid files (04000)
   S      setgid files (02000)
   t      files with the sticky bit (01000)

 print *(m-1)          # Files modified up to a day ago
 print *(a1)           # Files accessed a day ago
 print *(@)            # Just symlinks
 print *(Lk+50)        # Files bigger than 50 kilobytes
 print *(Lk-50)        # Files smaller than 50 kilobytes
 print **/*.c          # All *.c files recursively starting in $PWD
 print **/*.c~file.c   # Same as above, but excluding 'file.c'
 print (foo|bar).*     # Files starting with 'foo' or 'bar'
 print *~*.*           # All Files that do not contain a dot
 chmod 644 *(.^x)      # make all plain non-executable files publically readable
 print -l *(.c|.h)     # Lists *.c and *.h
 print **/*(g:users:)  # Recursively match all files that are owned by group 'users'
 echo /proc/*/cwd(:h:t:s/self//) # Analogous to >ps ax | awk '{print }'<

Hashes

Eine weitere Funktion sind die Hashes. Mit ihnen kann man sich viel lästige Tipparbeit ersparen. Ein neuer Hash wird folgendermaßen definiert:

$ hash -d foo=/path/to/directory

Anstatt cd /path/to/directory muss man jetzt nur noch cd ~foo ausführen. Für Superfaule: ein ~foo reicht bei gehashten Verzeichnissen sogar auch zum Wechseln des Verzeichnisses aus.

Tipps

grml Batterie

Die grml-Konfiguration bietet auch die Anzeige des Ladestandes der Batterie an. Durch Einfügen von GRML_DISPLAY_BATTERY=1 in die .zshrc.local kann dieses Feature aktiviert werden.

Eigene Funktionen mit sudo

Eigene Funktionen können nicht einfach so sudo benutzen. Dafür muss der zsh mit emulate -L zsh mitgeteilt werden, dass sie sich selbst emulieren soll.

Deinstallation

Achtung: Es ist dringend erforderlich vor der Deinstallation die Standardshell zu ändern. Tut man dies nicht, hat man nach der Deinstallation von zsh keinen Zugriff auf eine funktionsfähige Shell mehr. Um bash als Standardshell einzurichten, kann man den folgenden Befehl ausführen:

$ chsh -s /bin/bash

Falls auch noch andere Benutzer außer der Eigene die zsh benutzen, muss man deren Shell auch ändern:

# chsh -s /bin/bash Benutzer

Nun kann man das zsh-Paket wie gewohnt entfernen.

Weblinks