• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Kommando which

Hallo,

ich bin neu hier und fange an mit Linux zu arbeiten!!

was bedeutet folgende Satz:

Das Kommando which erkennt in den meisten Shells ebenfalls Synonyme und weist sie entsprechend aus.

was macht den which??.... gibt er den Standort der Befehle??.. was hab ich denn davon???


wo kann ich so einen SHELL COMMANDO LEXIKON im Netz finden??
damit ich einen Befehl eingebe und als Ergebnis das raus kommt, was der Befehl macht!!!



danke
ciao
 
Also: which liefert dir den genauen Ort eines Kommandos, sofern es in den durchsuchten Verzeichnissen liegt.
Einen Hilfetext zu einem Shell-Programm bietet das Kommando man gefolgt von dem Namen des jeweiligen Programms.

Greetz, HB
 
wie kann ich mir das vorstellen???
ein Befehl ist doch virtuell und wie kann das einen Standort haben, versteh ich nicht??
wenn ich den Inhalt eines Verzeichnises rausgeben will, schreibe ich ls..
ist dann ls irgendwo gespeichert??? ... wenn ich weiss wo ein Befehl gespeichert ist, was hab ich denn davon???... die Befehle führt man doch nur aus???
Das ist doch kein Text??

Das ist ja wirklic sehr komplizierter als Windows :(
 
Alle Kommandos, die nicht direkt von der Shell interpretiert werden, sind nichts anderes als ausführbare Dateien. Die Shell sucht nach diesen Dateien in allen Verzeichnissen, die in der Umgebungsvariable PATH gespeichert sind, siehe
Code:
> echo $PATH
Wenn es eine solche Datei gibt, dann erfährt man mit 'which' also, wo genau sie zu finden ist. Das hilft zum Beispiel, wenn man sie ändern will. Oft handelt es sich dabei um ein Skript, also um eine Datei, die man durchaus im Klartext lesen kann.
 
freakjan schrieb:
Das ist ja wirklic sehr komplizierter als Windows :(
Also, ich versuche mal (soweit ich kann) dieses Problem anhand der Windowswelt zu erklären. Versuche einmal unter Windows folgendes auf der Kommandozeile:
1. Lege zum Testen ein Verzeichnis auf dem Laufwerk c: an
2. kopiere in das neue Verzeichnis die Datei sort.exe aus dem Verzeichnis "c:\win*\system32". Den Stern bitte durch den Windows-Verzeichnisnamen ersetzen (C:\windows, c:\winnt oder was auch immer)
3. Lege in deinem Testverzeichnis eine Datei mit dem Namen sort.bat an.
4. Lege in deinem Testverzeichnis eine Datei mit dem Namen sort.cmd an.
5. Jetzt wechsle in das Testverzeichnis (falls noch nicht geschehen).

6. Frage: Wenn du jetzt auf der Kommandozeile "sort" eingibst, welches Programm wird gestartet?
A) c:\test\sort.bat
B) c:\test\sort.cmd
C) c:\test\sort.exe
D) c:\win*\system32\sort.exe

Falls du nicht weißt, was ich mit den Punkten 1-5 meine: Hier ist ein bisschen Windows-Code:
Code:
mkdir c:\test
copy c:\win*\system32\sort.exe c:\test
echo echo Ich bin sort.bat > c:\test\sort.bat
echo echo Ich bin sort.cmd > c:\test\sort.cmd
c:
cd \test
Übrigens: In der Linux-Welt würde ich jetzt "which" eingeben...
 
which zeigt den Standort einer ausführbaren Datei, wo sie die Shell aufgrund ihrer aktuellen Suchstrategie heranziehen würde.

Schönes Beispiel ist immer "wo ist denn mein Java installiert ?"
Läßt sich i.d.R. leicht beantworten:

which java

Guck mal in unsere "nützlichen Links", dort ist viel Info, gerade für Anfänger:
http://www.linux-club.de/viewtopic.php?t=12706
 
Hi,

which durhsucht alle in PATH angegeben Pfade nach dem Kommando.
Du kannst die dir den Inhalt von PATH mit
Code:
echo $PATH
anzeigen lassen und in Windows kannst du das mit
Code:
echo %PATH%
anzeigen lassen.
Befehle könne Programme oder Scripte sein, die jetzt im PATH drin sind oder halt ein eingebautes Kommando der Shell sein.
Die Shell ist eine Art Benuzerschnittstelle zwischen dem Linuxsystem und dem Anwender. In erster Linie wird die Shell zum Aufruf von Linux-Kommando und Programmen eingesetzt.
Sie ist somit vergleichbar mit einem Kommadointerpreter wie z.B. command.com aus der MS-DOS Welt. Die Shell wird bei jeden login an einem Konsolenfenster und in jeder Textkonsole ausgeführt.
Sie ist aber zugleich auch eine mächtige Programmiersprache um Abläufe zu automatisieren.

Um festzustellen ob ein Kommadno/Befehl jetzt in der Shell eingebaut ist oder ob dieser nur ein Alias(eine art abkürzung oder verweis auf ein anderen Befehl) oder ein eigenständiges Programm ist kannst du auch type verwenden. Hier ein Beispiel für Type:
Code:
> type which
which is aliased to `type -p'

Um das mit den Befehlen besser zu verstehen noch ein kurzes Beispiel:
Code:
#! /bin/bash
# /usr/bin/systeminfo
echo "Betreibsystem:" $OSTYPE
echo "Shell:" $SHELL
cd /etc/ && grep -i linux  *release
echo "Computername:" $HOSTNAME
echo "Home Verzeichnis:" $HOME
echo "Anmeldename:" $LOGNAME
echo "Systemarchitektur:" $HOSTTYPE
echo "CPU Architektur:" $CPU

Dieses kurze Shell-Srcipt zeigt dir ein paar infos zu deinen System in dem es einfach den Inhalt von Variabeln ausgibt.
Wenn du dieses Script jetzt ausführbar machst
Code:
 chmod a+x systeminfo
und dieses Script auch systeminfo heist und du es in /usr/bin hinterlegst kannst du nun ab jetzt egal wo du dich in der Konsel befindes
systeminfo eingeben und du erhälst ein paar Systeminforamtionen.
Würdes du aber dieses Script in ein anderes Verzeichnis kopieren, welches nicht in der PATH, so müsste du immer in das Verzeicbniss wechseln und dort folgendes eingeben um das Script zum laufen zu bekommen:
Code:
# Verzeichnis des Scripts
./systeminfo

hoffe dir konnte dies einwenig weiter helfen :wink:

mfg duddits
 
Oben