Gedankensplitter der Script Programmierung
Es gibt verschiedene Shell, die 3 klassischen Korn-Shell, Bourne-Shell, C-Shell
bourne again shell = bash = Kommandointerpreter mit Programmiersprache unter GNU/Linux Standard-Shell
Shell= Benutzerschnittstelle zwischen Betriebssystem und Benutzer wie command.com unter DOS
Shell interpretiert Stapel-Dateien, Batch-Dateien, Shell-Skripte, Shell-Prozeduren, Textdateien
bash Hilfe
man bash
/usr/doc/bash
info -f /usr/info/bash
info -f /usr/info/bash.info
|
Version anzeigen
echo $BASH_VERSION
2.05b.0(9)-release
oder set | less
bash --help
|
Anzeige der laufenden Shell
Tastenkürzel
Alt +D = Wort löschen
STRG+L = Bildschirm löschen
STRG+K = Bis zum Ende der Zeile löschen
|
Config in .inputrc
Shell im laufenden Betrieb jederzeit wechseln mit (wenn installiert):
bash oder sh in die Bash-Shell
ksh oder pdksh in die Korn-Shell
ash für BSD-Systeme
csh oder tcsh in die C-Shell
zsh in die Z-Shell
Mit exit zurück zur letzten aktiven Shell.
Shell dauerhaft ändern:
chsh (change shell) mach Änderung in /etc/passwd
Shell sind in
/bin
z.b. /bin/csh für C-Shell
Liste in /etc/shells
Alias Abkürzung bekommt den Vorrang vor gleichen Kommandos
// setze h für das wechsel in das Homeverzeichnis
alias h='cd ~'
// aufruf dann
h
// Tip
allias more=less
//Löschen mit
unalias
oder bis zum beenden der Shell, dauerhaft Speichern in .profile
// zeigt den Path an
echo $PATH
// Path voreinstellungen ändern in
/etc/profile
// durchsucht alle Standartverzeichnisse für Programme
whereis name
// durchsucht Pfad
which
Umleitung
// Schreibe das dir in die Datei
ls -la > inhalt.txt
// mit Fehlermeldungen
ls -la BackSpace: string(0x7f)\n\
Delete: string(0x04)\n\
Home: string(0x01)\n\
End: string(0x05)
//less Zeigt Dateien Seitenweise an, vor und zurück mit /suche und h hilfe
man less
less datei.txt
// alle gefundenen etc werden markiert
less -p 'etc'
// keine Umlaute in less dann in /etc/profile
# less setup
export LESSCHARSET=latin1
export LESS=-MM
// Eigenes Verz. für Scripte
mkdir ~/bin
// in ~/.profile
PATH=$PATH':~/bin'
// Schnelle suche nach Dateien
// DB inizialisieren die in /var/lib gespeichert wird mit
updatedb
// dann Dateien suchen mit
locate Dateiname
locate '*dvips'
locate datei.txt
// Loginname ausgeben mit
logname
// Symbolischen Link anlegen
// Z.B. erzeugt zeigt dann auf /dir/oder
ln -s /dir/oder erzeugt
// Liste Dateien ausführlich, reverse, sortiert nach time neueste zuletzt
ls -lrt
// Liste Dateien ausführlich sortiert nach time neueste zuerst
ls -lt
ls -lt /root
// oder Liste aller Verzeichnisse
ls -ld */.
// oder Liste aller Verzeichnisse ausführlich reverse sortiert nach time neueste zuletzt
ls -ltrd */.
// Suchen in Dateien mit grep optionen suchmuster datei
// z.B. Suche das den Begriff suchmuster in allen Dateien
grep suchmuster *
// oder suche nur in den *.txt Dateien
grep suchmuster *.txt
// Dateien vergleichen mit diff
diff erstedatei zweitedatei
// ignoriere leerzeichen und leerzeilen ganz
diff -w erstedatei zweitedatei
// Speicherbedarf anzeigen in Killobyt
du
// in bytes
du -b
// Suche nach Dateien autom. in allen Unterverzeichnissen
// z.B. suche alle Dateien die mit 1 anfangen
find -name '1*'
// finde alle Dateien die zur gruppe all gehören und im Verz. test liegen
find ./test/ -group all
// oder die dem user www gehören
find ./test/ -urser www
// oder die älter als 2 Tage sind
find ./test/ -user www -ctime +2
// extrahieren von Spalten
// liefert alle Zeichen ab der 6.Position
cut -b 6- text-datenbank.txt > ergebnis.txt
// oder nur die ersten 3 Zeichen und vom 10. an weiter
cut -b 1-3,10- text-datenbank.txt > ergebnis.txt
// extrahiert Zeilen trennt an der 2.Zeile in zwei Dateien xx00 und xx01
csplit text-datenbank.txt 2
// trennt jede Zeile in eine Datei mit namen zeile.00 ... -k behält Dateien auch bei Fehler
// -z verhindert leere Dateien
csplit -k -z -f zeile. text-datenbank.txt 1 {*}
// oder trennt immer wenn wenzlaff gefunden wird
csplit -k -z -f down-zeile. down.html '/wenzlaff/' {*}
// ersetzte alle Zeichen ; durch # in db.txt und schreibe ergebnis nach neue-db-#.txt
tr ';' '#' < db.txt > neue-db-#.txt
// alle aus down.txt buchstaben in GROSSBUCHSTABEN ergebnis in down-gross.txt
tr a-zäöü A-ZÄÖÜ < down.txt > down-gross.txt
// Datei Zeitpunkt ändern
// alle Dateien bekommen den aktuellen Zeitstempel
touch *
// Durchsucht alle im Path stehende Komandos
// und liefert den path des Programmes das ausgeführt würde
which ls
// sortiert nach der 6. Spalte
ls -la | sort +6
// Teile eine Datei zeilenweise auf geht auch byte und zeilengrenzen
// werden dann zerlegt in z-teilaa z-teilab ...
// z.b. teile in 1kb grosse dateien
split -1 db.txt z-teil.
// teile in je 100 zeilen line
split -l 100 down.txt down-z.
// wieder zusammenführen mit
cat z-teil.* > db-kopie.txt
// Achtung! Ersetzt dateien:
// konvertierung nur Zeilenende
fromdos datei
todos datei
// mit sonderzeichen
recode ibmpc:latin1 datei
recode latin1:ibmpc datei
// eleminiert doppelte zeilen die aufeinander folgen,
uniq db.txt > doppelte.txt
// mit sort werden alle doppelten gefiltert
sort db.txt | uniq > doppelte.txt
// Dateien umgekehrt anzeigen, letzte Zeile zuerst
tac dateiname.txt
// Suchen
// sucht alle tag ignoriert gross und kleinschreibung in suche.txt
grep -i '[0-9]*' suche.txt
// Umbennenen von allen *.txt Dateien nach .txt.bak im Verzeichnis
for i in *.txt; do mv $i ${i%.*}.txt.bak; done
// Kopieren von allen *.txt nach .txt.bak
for i in *.txt; do cp $i ${i%.*}.bak; done
// Anzeigen nur der ersten 3 Zeilen der Datei
head -3 neue.txt
// Aus allen *.txt Dateine nur die ersten 2 Zeilen anzeigen
head -2 *.txt
// Oder die jeweils letzten 2 Zeilen
tail -2 *.txt
// Nehme alle *.bak Dateien und suche in jeder nach ignoriere dabei die gross und
// kleinschreibung und zeige die gefundenen Zeilen an,
// gebe auch jeden untersuchten Dateiname aus
for i in *.bak; do grep -i '' $i ; echo $i; done
// Sed liesst aus stdin und gibt auf stdout aus
// In suche.txt wird der durch ------- ersetzt nur das erste vorkommen in der Zeile
// und auf stdout angezeigt
// suche.txt wird nicht verändert
sed s/''/'-------'/ < suche.txt
// suche.txt.del wird eingelesen und jeder wird durch ------ ersetzt und dann
// nach suche.txt geschrieben
cat < suche.txt.del | sed s/''/'-------'/ > suche.txt
// Suche Ziffern oder keine egal ob gross oder Kleingeschrieben
// ersetzte durch aus suche.txt
// das g am ende für alle Vorkommen global
sed s/'<[Tt][Aa][Gg]>[0-9]*<\/[Tt][Aa][Gg]>'/'<\/XXX>'/g < suche.txt
// Ersetze in alle *.txt Dateien den Zahl unabhängig von der Schreibweise
// und ersetze durch jedes vorkommen (g) und schreibe die neue Datei
// nach alterDateiname.txt.ersetzt lasse die alten bestehen
for i in *.txt; do cat < $i | sed s/'<[Tt][Aa][Gg]>[0-9]*<\/[Tt][Aa][Gg]>'/'<\/XXX>'/g > $i.ersetzt; done
// Nehme alle *.txt suche darin den und ersetze in der Zeile nur einmal und
// schreibe eine kopie nach Dateiname.HHH
for i in *.txt; do cat < $i | sed s/''/''/ > $i.HHH; done
// Zeige differenzen an
diff datei.txt datei.txt.HHH
// Default Werte
// Wenn zahl leer ist wird 55 als default verwendet und in die Variable
${zahl:=55}
// oder mit Text mit veränderung von zahl
${zahl:="Default Text"}
// und die länge des Textes, ohne veränderung von zahl
${zahl:#}
// Wenn zahl leer dann Fehlermeldung und Shell-Programm beenden sonst die zahl
${zahl:?"Variabel zahl ist leer und exit"}
// entfernt Zeilenumbrüche
tr -d \\012 < beispieldatei.txt
// Zeige nur die ersten 10 Zeilen an
cat < 3-Log-Saetze.txt | sed '10 q'
// Ersetzen und anzeigen in less
sed 's/end of block/------/' 3-Log-Saetze.txt | less
// gebe von einen Pfad nur den Dateiname zurück
pfad=`pwd`
pfad=${pfad}/dateiname.txt
echo ${pfad##*/}
// Pfad und Datei ohne Extension
echo ${pfad%%.*}
// Zeige alle Prozesse
ps
// Kommando Zeilen Editor einstellen
set -o vi
// oder
set -o emacs
// ESC= listet alle möglichen Expandierungen
// Wichtige EMACS Kommandos
STRG-f // (forward) ein Zeichen nach rechts
STRG-b // (backward) ein Zeichen nach links
STRG-a // (anfang) zum Anfang der Zeile
STRG-e // (ende) zum Ende der Zeile
STRG-d // (delete) löschen Zeichen an Cursorposition
STRG-h // (delete nach links)
STRG-k // (delete) ab position bis zum Ende er Zeile
STRG-p // History prev. zurück
STRG-n // History next vor
// Kommando im VI Modus
set -o -vi
// dann Vervollständigung des Pfadnamens
ESC\
// Pfadnamen-Expandierung mit
ESC*
// mit ESC in den Kommandomodus von VI dann
w // ein wort weiter
b // back ein wort
h // Zeichen nach links
l // Zeichen nach rechts
0 // Erstes Zeichen der Zeile oder auch
| // Erstes Zeichen der Zeile
$ // Letztes Zeichen der Zeile
fc // Findet das erste Zeichen c von links
// im Kommandomodus mit ESC gehen und dann
a // (append) rechts von Cursor Text einfügen
k // holt mit jeden druck, den vorherigen History Eintrag
j // holt mit jeden druck, den nächsten History Eintrag
/string // suche string in History oder
/ // dann ist string der aus dem letzten suchkommando
// KSH
cd // nach Home
cd alt neu // ersetzt alt String durch neu String und wechselt in das Verzeichnis
cd - // gehe zum vorherigen Arbeitsverzeichnis
// tar Archiv auf UNIX evl. ohne Optionsstriche z.b.
// tar cvf archiv.tar pfad
// Immer nur eine Aktion und dann Optionen
// Aktion:
// -c // erzeugt ein neues Archiv
// _-r // erweitert das Archiv um zusätzliche Dateien
// -t // zeigt Inhalt an
// -d // löscht Datei aus archiv
// -x // Extrahiert Dateien, sie verbleiben aber im Archiv
// Optionen: -C // extrahiert in das Verzeichnis
// -f datei // verwendet Datei als Archiv
// -z // komprimiert bzw. dekomprimiert mit gzip das Archiv ist
// // dann *.tgz; *.tpz oder.tar.gz.
// // -z ist aber inkompatibel zu den tar Versionen auf vielen UNIX
// Ansehen des Inhaltes eines tar Files
tar -tzf archiv.tar
// Speichert alle Dateien im . Verzeichnis in das archiv.tar
tar -czf archiv.tar .
// Speichert alle Dateien aus dem test Verzeichnis, das test wird dann auch wieder angelegt
tar -czf archiv.tar test
// Extrahiert das archiv.tar wie Verzeichnisstrucktur
tar -xzf archiv.tar
// Extrahiert das archiv.tar in das verz Verzeichnis
tar -xzf archiv.tar -C /verz
// oder alternative
tar -xzf archiv.tar /verz
// oder nur dir *.ksh Scripte extrahieren
tar xzf archiv.tar '*.ksh'
// Soft Link anlegen von test Verzeichnis auf Name nur_ein_link
ln -s ./test/ nur_ein_link
// Kopieren ganzer Verzeichnisse mit symbolische Links gut für copy Dateibaum von eine Partition auf andere
// Kopier ./archiv nach ./archiv-kopie
(cd ./archiv ; tar cf - .) | (cd ./archiv-kopie ; tar xvf -)
[Spende] - [Top] - [Home] - [Tools] - [Text] - [Suche] - [Kontakt]
Copyright ©1998-2010 by Thomas Wenzlaff
Alle Rechte vorbehalten. Disclaimer
http://www.wenzlaff.de vom 03.01.2007