# FAQ Tips > Tipps und Tricks >  Hilfe in der Bash für Anfänger

## McG.linux

Kleine Tipps für neueinsteiger.. kann ja jeder mal was reinposten..  :Smilie: 

um ein Programm im Hintergrund laufen zu lassen kann man am Ende des Befehls in der console ein & anhängen

prog &

Das Anhängen zweier &'s sorgt dafür das der Befehl nach den &-zeichen erst ausgeführt wird wenn der erste erfolgreich beendet wurde, also beim compilieren z.B.

./configure && make && make install && ldconfig

---

Verzeichniss-trees anlegen geht mit mkdir, z.B folgender tree:

folder1
  |-1
  |-2
  |-3
folder2
  |-1
     |-1
     |-2
  |-2
  |-3

kann man so anegen:

mkdir -p /folder{1,2}/{1,2,3} && mkdir /folder2/1/{1,2}

Gruß
McG.linux

----------


## keiner_1

verzeichnisse löscht man mit rmdir oder rm -rf (das r steht für recursiv und f für force, also nicht nachfragen)

im hintergrund kann man auch programme mit screen oder nohup laufen lassen

----------


## McG.linux

rm -rf is allerdings mit vorsicht zu genießen.. immer aufpassen beim tippen und vor ENTER noch mal überprüfen..
Ein unbeabsichtigtes Leerzeichen hinter dem ersten slash hätte fatale Folgen..

rm -rf / mnt/disk <- das würde weh tun..

Gruß
McG.linux

----------


## fs111

Wenn man als root unterwegs ist sollte man sowieso mit allem vorsichtig sein, was man macht.

----------


## Trillian

Ist in manchen Distributionen schon vorhanden:

alias rm="rm -i"

in root's .bashrc oder .bash_profile sorgt dafür, dass bei jedem rm Aufruf nochmal nachgefragt wird, ob wirklich gelöscht werden soll.

Geht analog mit cp, mv, etc.

----------


## fork

Viel vorsichtiger ist man bestimmt wenn das eingestellt ist.

alias rm="rm -rf" 

Gruß
fork

----------


## wd

@fork




> Viel vorsichtiger ist man bestimmt wenn das eingestellt ist.
> 
> alias rm="rm -rf"



Ist es nicht viel vorsichtiger, wenn du folgendes machst :




> alias rm="rm -rfi"


Das -i fragt dich dann, ob du wirklich rekursiv löschen willst und das für:




> rm: descend into directory `zzz'? y
> rm: remove `zzz/datei'? y
> rm: remove directory `zzz'? y

----------


## cyrip

> _Original geschrieben von McG.linux_ 
> *./configure && make && make install && ldconfig*


ich würde eher 

./configure && make && su -c "make install" && su -c "ldconfig"

sagen, wenn man sachen als user installiert... sonst macht er das nicht mit

----------


## hakre

Hab mir jetzt auch mal mit tail ein syslog script gemacht (nunja, hat genau 1 zeile), das würde ich jetzt gerne im hintergrund laufen lassen und es soll die ausgabe auf eine andere console packen.

wie geht den das ?

tail -f /etc/log/messages > tty5 &

oder so ??

----------


## sauron

Hi,
interresant ist auch "rm -- datei", zumindestens wenn man "spezielle" Dateinamen hat die z.B. mit "-" anfangen, oder andere Vorzeichen haben die als Steuerbefehle gelten.

----------


## CboyGeek

was bedeutet denn in dem beispiel ganz oben bei ./configure && make && make install das "ldconfig"?

----------


## sauron

Hi,
in Linux gibt es Bibliotheken (libraries), in denen Programmteile stehen, die von anderen Programmen (bzw.Programmteilen) aufgerufen werden, diese Programmteile müssen dem Rechner bekannt sein, um sie an die Programme binden zu können (linken). Das tut der dynamic linker. Der muß aber auch wissen wo welche library zu finden ist, dafür gibt es die Konfigurationsdatei /etc/ld.so.conf, in der diese Pfade stehen. Mit ldconfig wird in den dort eingetragenen Verzeichnissen nach Bibliotheken gesucht und ein Cache dafür aufgebaut. Zustätzlich erstellt ldconfig neue Links auf Bibliotheken, z.B. beim updaten einer lib. 

sauron

----------


## siluan

hakre:

tail -xf /var/log/messages >/dev/tty5 &

x=Anzahl anzuzeigener Zeilen

Siluan

----------


## hakre

Zu Siluan: Merci  :Smilie:

----------


## mezzo mix

shortcuts wie strg backspace, strg oder alt t finde ich klasse.
auch das ! vor dem programm kann so manche zeile sparen.

CU

----------


## nahrstaedt

Könntest du kurz die Funktion der Tastenkürzel auflisten? Hab bis jetzt nämlich noch nie welche benutzt. Was passiert bei einem ! vor einem Programm?

----------


## sauron

Hi,
angenommen du schreibst einen ewig langen Befehl z.B. tar cvfz file.tar.gz datei1 datei2 dateiN, und machst dann etwas anderes und willst aber genau diesen Befehl nochmal ausführen, dann kannst du entweder mit den Cursortasten den Befehl wieder suchen, oder mit "!tar" den Befehl wiederholen. Also, noch mal genau: Das "!" mit einem Anfangsteil eines schon erteilten Befehls führt genau den letzten Befehl aus, der diesen Anfangsteil besitzt. 

sauron

----------


## nahrstaedt

Super, das ist wirklich hilfreich. Bis jetzt habe ich mich immer totgesucht um einen Bestimmten Befehl erneut auszuführen.

----------


## msi

und nochmal was cooles:

wenn ein programm im fordergrund läuft kann man es mit
STRG+Z unterbrechen. Das Programm ist dann einfach gestoppt
und man hat die Shell wieder frei.
Wenn man dann fg eingibt läuft das Programm im Vordergrund weiter,
bei bg läuft es im Hintergrund weiter.

und noch was:
wenn man als user su eingibt und root wird kann man die shell leicht
stoppen indem man suspend eingibt. dann hat man wieder normale
userrechte. Wenn man dann wieder fg eingibt ist man wieder root.

----------


## badenser

Hai!

Besser als das ! vor dem Befehl find ich folgendes:
Strg+R danach langsam schreiben. In der History wird nun nach dieser Zeichenfolge gesucht. Muss nicht der Anfang sein.
So hat man noch eine Kontrolle was ausgeführt wird.

Jeder wie er will

----------


## zander

Um den [ctrl]-r Heinweis noch etwas auszubauen: bash benutzt die GNU Readline Bibliothek und kennt daher alle readline Tastaturkürzel. [ctrl]-r started eine Suche in der History Funktion, nach Eingabe eines Suchwortes kann man dann durch wiederholtes [ctrl]-r alle passenden Einträge durchgehen. [ctrl]-s macht das gleiche, lediglich in der anderen Richtung. [ctrl]-g stellt die ursprüngliche Zeile wieder her. [ctrl]-a/e springen zum Anfang/dem Ende der Zeile, [ctrl]-l löschte den aktuellen Terminalinhalt. Es gibt noch wesentlich mehr dieser Kürzel. 

Die !/!!/!-x/... Kürzel stammen von der GNU History Bibliothek. Dokumentation mit allen möglichen Kürzeln und vielen weiteren nützlichen Hinweisen (sowie den Programmierhinweisen) finden sich auf den Seiten des GNU Projekts.

----------


## 403

Hi 

habe da auch nen paar Tips.


Mehre Befehle auf einmal:



```
uptime; killall named; sleep 3; /usr/local/sbin/named -u named -c /etc/named.conf; ps U named
```



 ..grep -v grep angehangen lässt "grep" nicht in der Ausgabe auftauchen



```
ps fax |grep inetd |grep -v grep
```

NUR FÜR SYSADS:!!!!!
---------------------


```
# kill -9 `ps -augxww | sort -rn +8 -9  | head -1 | awk '{print $2}'`
```

(src: http://www.ugcs.caltech.edu/~werdna/sysadmins.html
       netter artikel)

----------


## orion

also ich muss echt sagen der Beitrag hat was  :Smilie: )))) irgendwie mal ne richtig tolle idee von demjenigen der dieses Topic ins Leben geruft hat. Naja hab da aber auch mal ne frage: Wie kann ich texte, die ich unter der grafischen Oberfläche (kde) kopiert habe in der konsole einfügen? Aber jetzt mein ich nicht die console unter kde sondern zB.: STRG+Alt+F1. 
ich bräuchte das nämlich für so ein Downloadproggy und will nicht den ganzen Link abschreiben.

MfG orion

----------


## orion

Kann mir wer auch Links geben zu Themen wie: "kompilieren des kernels", "was is kompilieren?", "kompilieren für Anfänger". Ich hab schon ein paar einzelne Seiten gefunden über google, aber ich wette ihr kennt noch ein paar gute.

2. MfG orion

----------


## phoen][x

C-d (oder [ctrl]+[d] fuer nicht-emacs Benutzer) beendet die aktuelle Sitzung an der bash mittels 'logout'. Sehr nuetzlich fuer Leute wie mich, die oft mit 'su' unterwegs sind.

Die linke Windowstaste springt eine tty nach links (also von tty3 nach tty2) die rechte eine nach rechts. Das funktioniert jedoch nicht im Xserver, ausser ihr baut euch dafuer einen Keyboard Event Handler (vielleicht mit bbkeys..)

Und btw, 'su' kann auch ohne das '-' ganz nuetzlich sein. Das '-' ~laedt~ ja bekanntlich die ~/.bash_profile des Benutzers, was dazu fuehrt dass man in dem jeweiligen home landet (also bei 'su -' landet man in /root). Wenn ich nun aber in irgendeinem Unterverzeichnis nur eben Rechte aendern will, benutze ich immer nur 'su', dann bleibt man naemlich im Verzeichnis (allerdings wird der Pfad nicht 100%ig korrekt gesetzt, aber das tangiert mich wenig da ich ja nur das chmod brauche).

Solltet ihr keine Lust haben, Dienste mit "/etc/init.d/apache restart" neuzustarten, versuchts mal einfach mit "killall -HUP apache". (HUP ist das Signal um dem prozess zu sagen, dass er seine config neu laden soll. Ersetzt man das HUP durch TERM, hat sich die Sache mit dem apache erledigt, der ist dann naemlich gekillt (bzw getermt)  :Smilie: )

'watch' kann ein nuetzlicher Befehl sein, um auf einer zweiten konsole den Status zu checken: So gibt einem "watch -n1 'df -h'" ein sekuendliches update zur plattenausnutzung, oder "watch -n1 'ps waux | grep smbd'" die informationen zum Samba, und so weiter.

so jetzt hab ich keine lust mehr, aber einfallen tun mir noch tausend sachen. Back to work.

-phoen][x-

----------


## SeeksTheMoon

wer einen mehrzeiligen Befehl schreibt und nochmal an den Anfang springen muss, der tippt schonmal aus versehen die Pfeiltaste oben und hat somit den eigentlichen Befehl durch den letzten Befehl ersetzt.
Mit STRG+A springt man an den Anfang, mit STRG+E ans Ende zurück.
Es gibt auch Kürzel, um wortweise zu springen, aber die fallen mir gerade nicht ein.

----------


## dragon's might

shortcuts:

Man (oder fra) schreibt zum Beispiel  den Anfang von "befehl" (also "b")
und drückt tab, dann werden einem alle möglichen Möglichkeiten aufgelistet, denn es gibt mehrere Befehle die so anfangen.  *g*

----------


## phoen][x

'tail foo' zeigt die letzten paar zeilen von foo, 'tail -f foo' folgt dem output, ist also sehr gut fuer logdateien geeignet ('tail -f /var/log/messages' fex).

'sort' sortiert eine datei, 'uniq' entfernt doppelte zeilen in einer sortierten datei. 'gawk' und 'sed' sind lustige tools die ich aber nicht naeher erlaeutern moechte (es wuerde zu lange dauern) - 'lsof' kann wie ich schon im forum gelesen habe dafuer benutzt werden, herauszufinden welcher daemon auf welchem port laeuft (mit 'lsof -i'). Ein weiterer Nutzen ist, herauszufinden welcher prozess noch auf dateixy zugreift - Ich benutze es um herauszufinden welches programm noch auf dem dvd-laufwerk haengt; dann lassen sich die cds/dvds naemlich nicht unmounten (beziehungsweise ejecten, ich habe autofs)

'useradd', 'userdel', 'usermod', 'groupadd', 'groupmod' und 'groupdel' sind auch recht nuetzliche tools - es sei denn man steht darauf die /etc/shadow und /etc/passwd per hand zu editieren. 

'cd ~<username>' wechselts in das home von username, habe ich erst neulich gemerkt. Also beispielsweise "cd ~phoenix" als root wechselt in /home/phoenix.

Die tty piept immer nervig rum bei tabcompletion oder fehlern? 'setterm -blength 0' schafft da abhilfe, sehr nuetzlich auch in /etc/profile. Eine Konsole im X piept rum und Du has keine Lust lange im Windowmanager nach der Option zu suchen? 'xset -b' und gut ist. btw, 'xset -dpms' schaltet den x11-screensaver (blank screen) aus - fuer divx empfehlenswert.


pipes:
hierfuer erstmal eine datei:
-=[foo.txt]=--------------------------------------------------------
3
4
5
3
2
1
6
4
3
2
------------------------------------------------------=[EOF]=-----

'sort foo.txt' sortiert die Datei, wie oben bereits erwaehnt.
Um den Output eines Programmes in den Input eines anderen Programmes zu leiten, benutzt man unter *nix das "|"-Symbol (sprich pipe).

'sort foo.txt | uniq' sortiert somit die Datei und entfernt doppelte Zeilen.
Um das ganze jetzt nach clean.txt zu schreiben benutzt man das ">".
'sort foo.txt | uniq > clean.txt' sortiert somit die Datei, entfernt doppelte Zeilen und schreibt alles in clean.txt. Es wird ansonsten kein output mehr erzeugt, bis auf Fehlermeldungen. Denn Fehlermeldungen werden nicht mit ">" umgeleitet - damit leitet man nur den StdOutput des Programmes um. 

Um die Fehlermeldungen mit umzuleiten, einfach anstelle von ">" ein "&>" verwenden und die Sache hat sich erledigt. 

Ach so, der append-operator fehlt noch: ">>" 
Ein gutes Beispiel ist dieses: Ich moechte an das Ende von foo.txt ein "all your base are belong to us" anhaengen (aus welch dubiosem Grund auch immer  :Smilie: ). Der normale operator ">" wuerde die foo.txt neu schreiben, also waeren alle anderen Informationen verloren (Nur mein Text wuerde ueberleben).
Abhilfe schafft der append-operator: "echo 'all your base are belong to us' >> foo.txt" schreibt den String an das Ende von foo.txt - sehr nuetzlich (in manchen Situationen (beispielsweise Shellskripte))

So das wars fuer jetzt.

So long
-phoen][x-

----------


## phoen][x

Bevor ich anfange zu arbeiten, noch ein paar bash Tips:

'apropos' - ein wirklich geniales Tool um schnell und gezielt die man-datenbank zu durchforsten. So durchsuch "apropos foo" alle manpages nach dem wort "foo". Bsp.: Ihr wollt etwas ueber signale wissen? 'apropos signals'

'whatis' und 'whereis' - ahh, ich hab eine binary, und weiss nicht wo genau sie ist, da binaries ja grundsaetzlich in /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin, ~/bin, ~/sbin seien koennen. "whatis foo" oder "whereis foo" gibt mir sofort den korrekten pfad der binary aus.

'locate' - da 'whatis' und 'whereis' nur die binary verzeichnisse durchsuchen, man aber sicherlich auch ab und zu andere Dateien ~vermisst~ gibt es noch locate. um locate zu benutzen, muss erstmal eine aktuelle locate-datenbank erstellt werden: das geht supereinfach mit "updatedb" (dauert aber ein bisschen, und man braucht root rechte). Sobald updatedb fertig ist, findet ein Befehl wie "locate foo.txt" alle vorkommnisse von foo.txt auf dem system, und gibt diese mit vollstaendigen pfadangaben aus. Aber es kommt noch besser. locate versteht auch ausdruecke als suchstring. so ist es beispielsweise moeglich. den folgenden Befehl auszufuehren "locate /opt/*foo.txt" - sucht in /opt nach vorkommnissen von foo.txt

'du' - diskusage. 'du' alleine ist praktisch ein 'ls' was nur die Groesse anzeigt. interessant wird 'du' erst mit dem parameter '-s' - damit wird naemlich die Groesse des aktuellen Ordners inklusive aller Unterordner angezeigt. Ein zusaetzliches '-h' rechnet alles in KB/MB/GB um - wer will schon mit Bytes rechnen. Beispiel fuer den Einsatz von 'du':
Meine /usr partition laeuft nach und nach voll, und ich weiss nicht wo der Speicherplatz hin ist. Ein 'du -hs /usr/src' zeigt einem sofort, dass man noch vergessen hat die alten Kernel mit "make mrproper" wieder zu verkleinern (ein winex ohne "make clean" ist auch ca. 300MB gross, da kanns schon mal eng werden)

'grep' - das allerwichtigste tool in linux. "grep" durchsucht eine datei oder den StdInput nach einem Ausdruck. Beispielsweise sucht "grep phoenix /etc/shadow" nach Vorkommnissen von 'phoenix' in der /etc/shadow. Besser noch ist es fuer pipes geeignet, beispielsweise: "ps waux | grep httpd" (durchsucht die prozessliste nach laufenden httpds) oder "gunzip -c foo.tar.gz | grep bar" ('gunzip -c' entpackt eine Datei in die StdOutput, das grep durchsucht alles nach bar)
Natuerlich ist auch eine Syntax wie diese moeglich: "grep foo ~/*" um das Homeverzeichnis nach foo zu durchsuchen oder "grep -R foo ~/*" um das Homeverzeichnis rekursiv nach foo zu durchsuchen (alle Unterverzeichnisse).

Das reicht fuers erste.
-phoen][x-

----------


## phoen][x

@orion: 
entweder du nimmst den "gpm", also mausunterstuetzung fuer die konsole, oder du machst es ein wenig anders: erst kopierts du den ganzen kaese in eine temporaere datei (beispielsweise "~/link") und dann greifst du da mit der konsole wieder drauf zu. Ich gebs zu, gpm ist komfortabler - aber das andere hat auch was  :Smilie:  (vor allem wenn man konsolenfreak ist)

-phoen][x-

----------


## akula

@orion

Du kannst den Text auch mit der mittleren Maustaste einfügen

Nützlich ist auch der Befehl alias:
Man erstellt so ein Alias auf irgendeinen Befehl z.B.

alias ll='ls -all' 

man muss nun nicht mehr ls -all eingeben, um eine ausfürhliche Auflistung des Verzeichnis zu erhalten, sondern nur noch ll.

oder ein alias compile='./configure && make && make install'

führt den bekannten Dreisatz aus

gruss acamas

----------


## phoen][x

@acamas:

das geht aber nur wenn der gpm laeuft und mittlerweile noch nicht abgeraucht ist (kann bei vielem hin- und herswitchen zwischen konsole und x passieren), IIRC.

-phoen][x-

----------


## pitu

Also:

./configure && make && make install && ldconfig

Fuehrt nicht dazu, dass der erste Befehl im Hintergrund abgearbeitet wir. sondern dazu, dass der jeweils naechste Befehl nur aufgerufen wird, wenn der erste Befehl ohne Fehler, also mit errorcode "0" abgeschlossen wurde.

Das && heist soviel wie "wenn ... dann"

Analog dazu gibt es || was soviel heisst wie "wenn nicht,.. .dann".

Dies wird sehr haeufig in Scropten verwendet, z.B.

test -z "$TMP" && echo OK
test -z "$TMP" || echo OK

Das heist soviel wie: Teste, ob die Variable $TMP leer ist, und wenn ja/nein, dann gib OK aus.


su:

su heisst, "switch user" und nicht, wie viele annehemn, "superuser".
Mittels su wechselt man also den Benutzer, und sonst nix. Darum "bleibt" man in einem Verzeichniss und hat die gleichen Umgebungsvariablen. im Gegensatz zu "su -" welches eine loginshell aufruft, und man dann samt aller Variablen dieser Benutzer wird, praktisch so als habe man sich gerade eingeloggt.

tail -f ...
Auch sehr schoen: mittels less zu machen, entweder mit less +F oder innerhalb von less "F" druecken. Man kommt dort wieder mit C-c raus.

pitu

pitu

----------


## phoen][x

waehrend ich im cvs update haenge noch ein paar kleine tips:

'file' - das utility hats in sich. mit 'file foo' erhaltet ihr (meistens) den Dateityp von foo. nett wenn irgendjemand vergessen hat, sein archiv auch .tar.bz2 am ende zu nennen.

der & operator. man benutzt ihn, um programme im hintergrund zu starten. so wuerde beispielsweise "wget http://www.someserver.com/reallybigfile.iso &" die Datei runterladen, ohne euch die Konsole zu blocken/zuzuspammen

'w' - wer ist grade von wo eingeloggt und was war sein/ihr letzter befehl.

'cmp foo1 foo2' vergleicht foo1 mit foo2 - wenn kein output kommt sind die Dateien identisch, ansonsten gibt es eine Meldung ab welchem Byte sich die Dateien unterscheiden.

'diff foo1 foo2' vergleicht foo1 mit foo2 und gibt die unterschiede aus. Btw, der richtige syntax wenn ihr patches erstellen wollt, ist "diff -ru alte.datei neue.datei > meinpatch". der empfaenger kann alte.datei dann mittels "patch -p0 < meinpatch" auf 
neue.datei updaten. 

so long,

-phoen][x-

----------


## [nBg]SaM

Hi

Welches Buch ich jedem empfehlen kann...und wo eigentlich so fast
alles zu diesem Thema drin steht ist "Linux In A Nutshell" vom O'Reilly Verlag  :Wink: .
Preiß liegt so bei 40 ürü.

cya ]SaM[

----------


## Jasper

> _Original geschrieben von hakre_ 
> *Hab mir jetzt auch mal mit tail ein syslog script gemacht (nunja, hat genau 1 zeile), das würde ich jetzt gerne im hintergrund laufen lassen und es soll die ausgabe auf eine andere console packen.
> 
> wie geht den das ?
> 
> tail -f /etc/log/messages > tty5 &
> 
> oder so ??*


wenn  /etc/log/messages (etc??? nicht var?) vom syslog geschrieben wird, einfach in /etc/syslog.conf das logging erweitern

einfach die zeile mit /etc/log/messages kopieren und /etc/log/messages durch /dev/tty5 ersetzen, danach killall -HUP syslogd ausführen.

-j

----------


## Jasper

> _Original geschrieben von 403_ 
> *
>  ..grep -v grep angehangen lässt "grep" nicht in der Ausgabe auftauchen
> 
> 
> 
> ```
> ps fax |grep inetd |grep -v grep
> ```
> ...


besser ist 'ps fax | grep [i]netd'. dann ist das zweite grep überflüssig.

-j

----------


## NoRiskNoDisk

Supertrick ! wenn ihr ohne GUI arbeitet und nur Konsole installiert habt ! --- back2theroots  dann könnt ihr mit shift und bildauf / bildab rumscrollen

----------


## Thomas Engelke

Irgendwie habe ich bei diesem Thread ein Dejavu. Anyways, mit Alt+. (Alt und Punkt) cycelt die Bash durch die zuletzt genutzten Argumente. Also ein

mkdir gcc-build
cd [Alt+.]

ergibt ein

mkdir gcc-build
cd gcc-build

Lather, rinse, repeat  :Smilie: 

AD!

----------


## eRin

das Alien Bash Tutorial ist bestimmt erwähnenswert. Sehr verständlich erklärt und auch in verständlichem English geschrieben, mit vielen Beispielen. Ausgedruckt ist das Teil 114 Seiten lang.

http://subsignal.org/doc/AliensBashTutorial.html

----------

