Fangen wir mal von vorne an. Ich vermute Du nutzt sonst eher keine Kommandozeile?
Ein Programm 5fach zur Nutzung bereitzustellen ist unsinnig. Willst Du aber nicht ins System “reinpfuschen”, sondern in Deinem $HOME bleiben, dann wäre das so zu lösen:
Lege ein Verzeichnis “~/bin” an (sofern nicht schon vorhanden). Sorge mit einem “chmod 755 ~/bin” dafür, dass in dem Verzeichnis auch Dateien ausgeführt werden dürfen.
Dann wäre die Variable $PATH zu prüfen. Gibt ein “echo $PATH” nicht auch eben jenes (ggf. neu angelegte) Verzeichnis aus, so musst Du dieses hinzufügen. Da Du die Bash zu nutzen scheinst, wäre die richtige Datei hierfür “~/.bashrc” (wenn nicht vorhanden - anlegen). Diese dann um folgende Zeile ergänzen:
PATH=~/bin:$PATH
Sofort aktiviert wird der neue Inhalt, in dem Du nun “. ~/.bashrc” ausführst; Das “bin”-Verzeichnis in Deinem Home sollte von nun an in der Ausgabe von “echo $PATH” enthalten sein. Nun kopierst Du noch Dein “osmconvert32” in dieses Verzeichnis, und vergibst mit einem “chmod 755 ~/bin/osmvonvert32” noch die notwendigen Rechte. Und da das Ganze Null & nix mit sudo zu tun hat (Dein aktuelles osmconvert32 scheint der Gruppe “sudo” zu gehören - wie auch immer Du das angestellt hast), schiebst Du noch ein “chown marko:marko ~/bin/osmconvert32” hinterher.
Nun sollte “osmconvert32” von jedem Deiner Verzeichnisse aus aufrufbar sein - ohne “./” vorangestellt. Beispiel & Test:
cd /tmp
osmconvert32 --help
(Kleine Anmerkung für Andere: Wäre die aufgerufene Datei nicht vorhanden, wäre die Fehlermeldung eine Andere.)
Mit dem Befehl “osmconvert32” hast Du der Kiste gesagt, sie soll dasjenige osmconvert32 aufrufen, das dort liegt wo Programme hingehören. Da liegt bei Dir aber keines.
Mit dem früher benutzten Befehl “./osmconvert32” sagst Du der Kiste, sie soll dasjenige Programm osmconvert32 starten, das im aktuellen Verzeichnis liegt. Damals warst Du aber in einem Verzeichnis, in dem jedenfalls damals keines lag.
Es ist Quatsch, mehrere von den osmconvert32 rumliegen zu haben – das macht nur alle Updates und die Fehlersuche kompliziert – es sei denn, Du willst mehrere Versionen der Programme miteinander vergleichen. Dass Du mehrere Verzeichnisse benutzt und das osmconvert32 mehrfach gleichzeitig laufen lassen willst ist völlig ok – dazu braucht man das Programm aber nicht mehrfach.
Kopier mal eines der osmconvert32 in das Verzeichnis ~/bin. Wenn das Verzeichnis nicht nicht existiert, dann leg es an. Danach müsste in jedem Verzeichnis der Befehl “osmconvert32 --help” funktionieren (also der ohne das “./”). Danch würde ich alle anderen Exemplare des Programms wegwerfen und bei allen Aufrufen “./osmconvert32…” vorn das “./” entfernen.
cd ~
mkdir bin
echo 'PATH=~/bin:$PATH' >> .bashrc
cd bin
wget -O - http://m.m.i24.cc/osmconvert.c | cc -x c - -lz -O3 -o osmconvert
mv osmconvert osmconvert32
chmod u+x osmconvert32
cd ~
Zeile für Zeile ausführen und freuen. Das ist (fast) genau was “Joachim Moskalewski” geschrieben hat und gar nicht schwer ;-). Ich hab’ gerade kein System zum Testen da, aber man soll ja sowieso nicht einfach Dinge aus dem Internet ungeprüft in seine Shell eingeben
/edit: Skript an den Hinweis von SammysHP angepasst – Danke, ich war nicht ganz bei der Sache.
Gehte sogar ancora più einfach. Die dritte Zeile ist komplett überflüssig, weil der C-Compiler automatisch eine ausführbare Datei generiert. Auch die zweite läßt sich einsparen, indem man das Programm gleich so benennt, wie man es haben möchte:
wget -O - http://m.m.i24.cc/osmconvert.c | cc -x c - -lz -O3 -o osmconvert32
Es sei mal dahingestellt, warum man die Datei überhaupt lieber osmconvert32 statt osmconvert nennen möchte… Über Möglichkeiten wie ln -s oder alias hüllen wir wohl lieber den Mantel des Schweigens.
Dein “sollten” sagt eigentlich schon alles. Und: Wenn alles schon stimmte - dann ändere ich ja gar keine Rechte
Ich wüsste keine Definition die besagt, welche Rechte ein neues Verzeichnis oder eine neue Datei zu bekommen hat. Dagegen ist das m.W. sogar konfigurier- bzw. verbiegbar. Ich habe z.B. auch keinen Schimmer, ob da nicht ein externes Laufwerk wie auch immer gemountet ist… (ok, unwahrscheinlich - verdeutlicht aber die Thematik). Und bei einem User, der eine selbst hinkopierte Datei einer Gruppe “sudo” manuell geschenkt haben muss, setze ich lieber die Rechte manuell (er)neu(t). Sonst heißts nacher “tut auch net” - und wir stehen wieder auf der grünen Wiese.
Aber hier fehlen Basics. Die wollte ich vermitteln. Das mit dem “Fisch schenken” und “angeln zeigen”.
Ich habe in meinem Leben bereits tausende Verzeichnisse auf Dutzenden, wenn nicht sogar hunderten Systemen erstellt. Noch nie hatte ich als Eigentümer standardmäßig keine Lese-/Schreibrechte.
Jup, siehe umask. http://linux.die.net/man/2/umask
Mit dem gleichlautenden Befehl kann man sich die Maske anzeigen und modifizieren. Standard ist 0002. Zusammen mit den Standardrechten von Verzeichnissen (777) ergibt sich daraus 775.
Die osmconvert32 mit root Rechten in Rechner/bin kopiert.
Das kommt raus
marko@marko-desktop:~$ osmconvert32 --help
bash: /bin/osmconvert32: Datei oder Verzeichnis nicht gefunden
marko@marko-desktop:~$
Der 2. Vorschlage :
Da geht was nach dem download nicht ?
Da ist schwerwiegender Fehler ? Wohl was mit “zlib.h” ?
Habe jede Zeile einzeln mit Enter bestätigt.
marko@marko-desktop:~$ cd ~
marko@marko-desktop:~$ mkdir bin
marko@marko-desktop:~$ echo 'PATH=~/bin:$PATH' >> .bashrc
marko@marko-desktop:~$ cd bin
marko@marko-desktop:~/bin$ wget -O - http://m.m.i24.cc/osmconvert.c | cc -x c - -lz -O3 -o osmconvert
--2013-06-28 20:51:29-- http://m.m.i24.cc/osmconvert.c
Auflösen des Hostnamen »m.m.i24.cc (m.m.i24.cc)«... 80.67.17.148, 2a00:1158:0:300:432f::1
Verbindungsaufbau zu m.m.i24.cc (m.m.i24.cc)|80.67.17.148|:80... verbunden.
HTTP-Anforderung gesendet, warte auf Antwort... 200 OK
Länge: 415131 (405K) [text/plain]
In »»STDOUT«« speichern.
100%[======================================>] 415.131 765KB/s in 0,5s
2013-06-28 20:51:30 (765 KB/s) - auf die Standardausgabe geschrieben [415131/415131]
<stdin>:424:18: Schwerwiegender Fehler: zlib.h: Datei oder Verzeichnis nicht gefunden
Kompilierung beendet.
marko@marko-desktop:~/bin$ mv osmconvert osmconvert32
mv: der Aufruf von stat für »osmconvert“ ist nicht möglich: Datei oder Verzeichnis nicht gefunden
marko@marko-desktop:~/bin$ chmod u+x osmconvert32
chmod: Zugriff auf »osmconvert32“ nicht möglich: Datei oder Verzeichnis nicht gefunden
marko@marko-desktop:~/bin$ cd ~
marko@marko-desktop:~$
Das Löschen ist nicht nötig. Falls man die Datei aus irgend einem Grund (z.B. wegen Verweisen an x Stellen) in mehreren Verzeichnissen braucht, genügt ein ln (hard link). Dann sieht es für normale Programme wie die Originaldatei aus, braucht aber praktisch keinen Platz, ist nur ein spezieller Eintrag im Verzeichnis. Einzige Bedingung ist, dass die Verzeichnisse für einen hard link auf dem selben physikalischen Datenträger liegen.
… und Du machst tapfer weiter mit den nachfolgenden Befehlen - und versuchst was zu verschieben, was gar nicht erstellt wurde.
Der Download hat funktioniert, da gab es keine Fehler. Der Compiler hat mit einem Fehler abgebrochen, da ein Development Paket zu zlib auf Deinem Rechner fehlt. Ich würde an Deiner Stelle aber statt dem selber Compilieren eher den Download Link aus dem Wiki verwenden (http://m.m.i24.cc/osmconvert32) - Dir fehlen schlicht massiv zu viele Grundlagen.
Vorgehensweise nun:
Vorschlag von Weide annehmen: Suche alle Stellen, an denen Du nun noch ein “osmconvert*” liegen hast. Und bitte löschen - Dein bisheriges Chaos gehört dringend entsorgt.
Download des Linux Binaries von osmconvert32.
Verschiebe das nach “/usr/local/bin/osmconvert32” und setze die executable Flags (root-Rechte erforderlich).
Nun kannst Du “osmconvert32 --help” aufrufen.
Und: Niemals eine Datei nach “/bin/” oder “/usr/bin/” verschieben - das ist Deiner Paketverwaltung vorbehalten. Eigenes kommt nach “/usr/local/bin/” (dann systemweit verfügbar) oder nach “~/bin/” (dann nur für Dich - das Anlegen hiervon habe ich bereits beschrieben).
Dann nach Rechner/user/local/bin mit root rechten kopiert (sonnst ging es nicht)
Zugriffsrechte gesetzt ( Datei als Programm ausführen )
Test aus Desktop ergibt das ?
marko@marko-desktop:~$ osmconvert32 --help
bash: /usr/local/bin/osmconvert32: Datei oder Verzeichnis nicht gefunden
marko@marko-desktop:~$
Der Suchbefehl gibt das aus :
marko@marko-desktop:~$ sudo find / -name osmconvert32 -exec ls -l {} \;
[sudo] password for marko:
-rwxrwxr-x 1 marko root 226858 Jun 27 10:38 /usr/local/bin/osmconvert32
-rwxr-xr-x 1 marko marko 204887 Mär 4 2012 /home/marko/Dokumente/mkgmapkopie/osmconvert32
-rwxrwxr-x 1 marko marko 226858 Jun 21 13:21 /home/marko/Dokumente/mkgmapb/osmconvert32
-rwxrwxr-x 1 marko marko 226858 Jun 21 13:21 /home/marko/Dokumente/mkgmapf/osmconvert32
-rwxrwxr-x 1 marko marko 226858 Jun 21 13:21 /home/marko/Dokumente/mkgmap letzte stabile Version 24.06.2013/osmconvert32
-rwxr-xr-x 1 marko marko 226858 Jun 21 13:21 /home/marko/Dokumente/mkgmap/osmconvert32
-rwxrwxrwx 1 marko sudo 226858 Jun 27 10:38 /home/marko/Dokumente/mkgmapo/osmconvert32
-rwxrwxr-x 1 marko marko 226858 Jun 21 13:21 /home/marko/Dokumente/mkgmapk/osmconvert32
-rwxrwxr-x 1 marko marko 226858 Jun 21 13:21 /home/marko/Dokumente/mkgmap3d/osmconvert32
-rw-rw-r-- 1 marko marko 226858 Jun 27 10:38 /home/marko/Downloads/osmconvert32
-rwxr-xr-x 1 root root 226858 Jun 21 13:21 /bin/osmconvert32
marko@marko-desktop:~$
Da wo meine Karten sind ( Wie gesagt was immer ging / habe schon mal ein BUG gepostet auf Launchpad )
marko@marko-desktop:~$ uname -a
Linux marko-desktop 3.8.0-25-generic #37-Ubuntu SMP Thu Jun 6 20:47:07 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
marko@marko-desktop:~$
Das andere bringt:
marko@marko-desktop:~$ ldd /bin/osmconvert32
Das Programm ist nicht dynamisch gelinkt
marko@marko-desktop:~$
Lese grade das selber bauen. (Da steht aber nichts ?)
Das ist die Suche jetzt:
marko@marko-desktop:~$ sudo find / -name osmconvert32 -exec ls -l {} \;
-rwxrwxr-x 1 marko root 226858 Jun 27 10:38 /usr/local/bin/osmconvert32
marko@marko-desktop:~$
Nur eine.
Das ist der Test aus Desktop mit nur einer osmconvert32 :
marko@marko-desktop:~$ osmconvert32 --help
bash: /usr/local/bin/osmconvert32: Datei oder Verzeichnis nicht gefunden
marko@marko-desktop:~$
Jetzt bin ich baff. Weiter oben steht eine Dateilänge dieser Datei von 226858 Byte. Das ist genau die Länge der dynamisch gelinkten Datei zum Downloaden (bei http://wiki.openstreetmap.org/wiki/DE:Osmconvert#Download)) und ldd liefert mir die Abhängigkeiten für diese frisch runtergeladene Datei.
Nein, kein Bug. Du nutzt ein 64 bit System, die Datei wurde aber für 32 bit kompiliert. Ich weiß nicht, ob es ausreichend ist, das Paket ia32-libs zu installieren, da die Datei statisch gelinkt wurde. Es sollte also wirklich am besten sein, sich osmconvert selbst zu kompilieren. Installier dir zuerst zlib1g-dev, damit du die Header-Dateien davon hast. Anschließend kannst du den o.g. Befehl zum Kompilieren ausführen.