Frage zu ./

27/02/2013 - 14:20 von Alexander Ausserstorfer | Report spam
Hi,

hoffentlich bin ich hier nicht falsch. Derzeit 'wurschtle' ich mit
Cygwin und außerdem diversen anderen Computern herum, die irgendwie mit
Unix in Verbindung zu stehen scheinen. Inwiefern da Linux dazugehört,
ist mir momentan nicht ganz klar. Ich lese in diesem Zusammenhang meist
von GNU / Linux bzw. dass es sich bei Linux eigentlich nur um den Kernel
handelt.

Ich schreibe momentan kleine C-Programme, welche ich auf
Kommandozeilenebene durch den gcc-Compiler (GNU) jage. Um nun eine
Bildschirmausgabe zu sehen, muss ich die entsprechende, compilierte
Datei mittels ./<Dateiname> starten.

Hab' viel im Netz dazu gesucht, aber irgendwie ist es mir noch immer
nicht ganz klar geworden, warum das so sein muss. ./ erinnert mich nur
daran, dass es sich um das aktuelle Verzeichnis handelt.

Vielleicht kann mir das einer hier erklàren. Danke!

A.

This message was sent from an Acorn RISC PC (built in 1995).
http://home.chiemgau-net.de/ausserstorfer/
 

Lesen sie die antworten

#1 Thomas PointedEars Lahn
27/02/2013 - 16:22 | Warnen spam
Alexander Ausserstorfer wrote:

hoffentlich bin ich hier nicht falsch.



Passt IMHO noch.

Derzeit 'wurschtle' ich mit Cygwin und außerdem diversen anderen Computern
herum, die irgendwie mit Unix in Verbindung zu stehen scheinen. Inwiefern
da Linux dazugehört, ist mir momentan nicht ganz klar. Ich lese in diesem
Zusammenhang meist von GNU / Linux



_GNU/Linux_

bzw. dass es sich bei Linux eigentlich nur um den Kernel handelt.



Das ist richtig. GNU (GNU's Not Unix) liefert die grundlegenden Programme,
um die Funktionen des Linux-Kernels nutzen zu können. Eine andere,
seltenere Kombination ist GNU/Hurd. <http://de.wikipedia.org/wiki/Linux>
ff.

Cygwin ist – wie man auch auf der Website nachlesen kann – Cygnus + GNU +
Windows, d. h. eine Distribution aus GNU- und anderen Tools, die für Windows
bzw. die Cygwin-DLL kompiliert wurden und unter Windows laufen. Cygwin ist
kein vollwertiges Betriebssystem, sondern gewissermassen ein GNU-Aufsatz für
Windows. Insbesondere bietet es per Default die GNU bash als alternative
Shell zur COMMAND.COM, CMD.EXE oder PowerShell.

Ich schreibe momentan kleine C-Programme, welche ich auf
Kommandozeilenebene durch den gcc-Compiler (GNU) jage.



Der gcc (GNU C Compiler) ist auch so ein GNU-Tool; wahrscheinlich sogar das
Wichtigste, denn ohne gcc làsst sich kein lauffàhiges GNU(/Linux)-System aus
den Quelltexten erstellen, und ohne glibc làuft GNU nicht, wie Du wissen
solltest. (In der Regel übernehmen das Kompilieren heute die Distributoren;
manchmal, so wie bei Gentoo, aber auch nur die Zusammenstellung der
Quelltextpakete und Bereitstellung von Tools zu ihrer Kompilierung und
Installation.)

Um nun eine Bildschirmausgabe zu sehen, muss ich die entsprechende,
compilierte Datei mittels ./<Dateiname> starten.

Hab' viel im Netz dazu gesucht, aber irgendwie ist es mir noch immer
nicht ganz klar geworden, warum das so sein muss. ./ erinnert mich nur
daran, dass es sich um das aktuelle Verzeichnis handelt.



“.” ist der Verzeichniseintrag in Unix-basierten Systemen, der auf das
Verzeichnis selbst verweist; befindest Du Dich also im Verzeichnis, steht
der Name für das aktuelle Verzeichnis.

Stell Dir vor, Dein Binary hat den Dateinamen “foo”. Bei Befehlen wird so
wie bei allen aktuellen Betriebssystemen ein Suchpfad (hier: $PATH)
verwendet, damit man nicht immer den genauen Pfad für einen Befehl angeben
muss. Wenn es jetzt ein Programm namens “foo” im Suchpfad gàbe, würdest Du
dieses starten und nicht Dein Programm. Deshalb musst Du für Dein Programm
den relativen Pfad, also “./foo”, explizit angeben.

Dieses Verhalten kann man umgekehrt auch als Sicherheitsmassnahme bzw. eine
zugunsten der Benutzerfreundlichkeit verstehen. Du möchtest nàmlich
normalerweise nicht, dass derselbe Befehl in unterschiedlichen
Verzeichnissen automatisch etwas Unterschiedliches tun könnte, also Dir
jemand einen Ersatz für ein Systemtool unterschieben kann (wenn Du “rm”
aufrufst, willst Du vertrauliche Daten *löschen*, und nicht versehentlich
per E-Mail an Dritte übertragen :)). Und Du möchtest nicht jedesmal
nachsehen müssen, ob es eine Datei gleichen Namens im aktuellen Verzeichnis
gibt.

Man kann dieses Verhalten natürlich àndern, wenn man weiss, was man (sich
damit an)tut. (On-topic sind Shells in de.comp.os.unix.shell.)

Vielleicht kann mir das einer hier erklàren. Danke!



Gern geschehen. Das nàchste Mal solltest Du aber gründlicher recherchieren,
bevor Du postest.

PointedEars

Twitter: @PointedEars2
Please do not Cc: me. / Bitte keine Kopien per E-Mail.

Ähnliche fragen