hello.c - Wo ist denn hier ein Fehler ?

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

hello.c - Wo ist denn hier ein Fehler ?
Hi, gibts hier jemanden, der sich mit “C” auskennt ? So lächerlich es auch klingen mag, aber ich krieg kein Programm zum laufen. Folgender Code :

/* Datei : hello.c */ #include <stdio.h> int main (void) { printf ("hello, world\n"); return 0; }
Ich habe SuSe 8.2 und sämtliche C-Werkzeuge installiert. Kompiliert hab ich mit : gcc - o hello hello.c → kein Fehler
Aufruf : hello → unbekannter Befehl !!! Wie ruft man denn das Dings auf ?
Was mach ich denn falsch ? :motz:


Dann ist das Programm schonmal ok!

Da wird dein Problem liegen: versuch doch mal [m]./hello[/m]. Wenn der Aktuelle Pfad (.) nicht im Suchpfad enthalten ist (im CIP-Pool scheint er drin zu sein), wird die Shell das Programm im aktuellen Verzeichnis nicht finden. Deshalb muss man dann explizit den Pfad mit angeben.
Ach ja, du solltest mit [m]ls[/m] auch mal schauen, ob denn [m]hello[/m] auch tatsächlich in dem Verzeichnis existiert…


außerdem kann es sein, dass das ausführen-recht für die datei nicht gesetzt ist.

mit chmod 755
bekommst du die typische rechtevergabe: alle können die datei (in dem fall das programm) lesen und ausführen. du selbst kannst auch schreiben.


hmm, wobei der gcc das normal schon automatisch machen sollte. (hat er bei mir zumindest immer bis jetzt)


an sich schon


Ach ja, und wenn das x-Flag fehlt, kommt doch ne Meldung wie “kann nicht ausführen”, statt “nicht gefunden”, oder?

Anyway, hoffe das Problem konnte mittlerweile gelöst werden.


Hi,danke für die Hilfe. War tatsächlich das Prob mit Pfad. Mit “./datei” funzts.
Weiß vielleciht jemand, wie man das einstellt, das immer der aktuelle Pfad
im Suchpfad vorhanden ist (wie im Cip - Pool ) ? :-/
@ford perfect :
Wie soll den jetzt die Rechtvergabe unserer Aufgaben aussehen ?
Ich dachte, nur der User kriegt alle Rechte und die Others dürfen nicht mal lesen, also chmod 700 ! Lieg ich falsch ? :rolleyes:


sowas wie [m]set PATH=„$PATH:.“[/m] sollte reichen. kann man denk ich auch in die [m]~/.environ[/m] reinschreiben… musst mal a weng probieren, kommt denk ich auch auf die shell an, die du verwendest.

ich hab meinen ordner so eingestellt:
[m]drwx-----x 27 siyvgoer immdstud 1536 Nov 1 20:05 ./
drwx—r-x 3 siyvgoer immdstud 512 Feb 25 2003 .www/
drwxr-xr-x 2 siyvgoer immdstud 512 Nov 1 20:05 c/[/m]
und es sollte jetzt keiner was in meinem verzeichnis lesen können. der webspace sollte trotzdem funktionieren… wenn das mal einer ausprobieren möchte :rolleyes:


humml: du hast vollkommen recht. wenn es andere nicht lesen dürfen, ist 00 richtige wahl.

yves: natürlich kommt eine andere fehlermeldung, aber die tabcompletion funktioniert schon mal grundsätzlich nicht, wenn +x fehlt… da stoß ich mich dann immer noch vor irgendeiner meldung :wink:

was deine rechte angeht:
man kann das verzeichnis web natürlich nicht lesen. das kann jetzt daran liegen, dass ich als einer aus deiner gruppe gar keine rechte habe (böser fehler). aber auch grundsätzlich macht das übergeordnete nicht vorhandene leserecht das des unterordners irrelevant. das gilt auch für den armen http daemon. deswegen wird www nicht funktionieren, genausowenig wie irgendwer in deinen ordner c kommt.

an deiner stelle würde ich anderen für das verzeichnis ~ nur das ausführen-recht nehmen. das bedeutet bei verzeichnissen, dass du sie nicht durchsuchen darfst. um eine datei zu lesen, muss man dann ihren namen kennen (und natürlich sie lesen dürfen).
beim unterverzeichnis c natürlich dann eben 700.
aber ganz generell würde ich mein home offen lassen und in einem/mehreren unterordner(n) private/ etc. mit beschränktem leserecht arbeiten…
ab und an ist es ganz praktisch, jemand anderes etwas im eigenen home hinterlegen zu können. (wie gesagt, mit 744 ist das möglich, wenn du ihm sagst, wie die datei genau heisst)

cu
Ford Prefect


umgekehrt, dem Home das Leserecht nehmen aber ausführen gesetzt lassen,
Ausführenrecht berechtigt bei Verzeichnissen dazu in das Verzeichnis zu wechseln, Leserecht ist fürs Directorylisting,
also mode 711


Korrekt:

Wenn dein Verzeichnis niemand als du selbst lesen können soll, dann setzt du die Rechte auf 711 (rwx–x–x). Damit man noch in einen untergeordneten Ordner sehen kann (man = alle oder die Personen in der gleichen Gruppe) setzt man die Rechte der entsprechenden Ordner auf 755 (rwxr-xr-x). Voila! So funktioniert’s auch mit dem ~/.www

./ in die PATH-Variable mit aufzunehmen ist übrigens eine GANZ GANZ GANZ schlechte Idee (weswegen dieses Verhalten bei Suse auch nur in Version 8.1 enthalten war und nicht mehr in 8.2). Ihr hättet das auch in der 1. Übung Sysprog gelernt, jedenfalls haben wir das letztes Jahr :slight_smile:
Man stelle sich z.B. vor jemand schreibt ein Shell-Skript

#!/bin/sh rm -rf ~/*
und legt es ausführbar in /tmp ab. Sollte jetzt irgendein Nutzer in /tmp Daten schreiben (wie z.B. von der Übungsaufgabe mit quicksort verlangt, da sonst euer Quota überschritten wird) und sich danach mit “cd /tmp” in das verzeichnis begeben, dann wird ein “ls” (Verzeichnisinhalt anzeigen), sein/ihr gesamtes Home-Verzeichnis löschen, was sicher nicht gewünscht ist, oder?

Grüße,
Sebbi


naja die Problematik lässt sich aber vermindern wenn man den . erst am Ende des PATH hängt, da dann erst alle systemverzeichnisse abgeklappert werden und das mit dem ls dann nicht mehr funktioniert… Aber trotzdem ist es besser wenn mans lässt :wink: