Brak uprawnień do wykonywania programów i otwierania plików.

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
G+
Piegowaty Guziec
Piegowaty Guziec
Posty: 4
Rejestracja: 14 cze 2007, 16:40
Płeć: Mężczyzna
Wersja Ubuntu: 7.10
Środowisko graficzne: Xfce
Kontakt:

Brak uprawnień do wykonywania programów i otwierania plików.

Post autor: G+ »

Witam.

Mam następujący problem:

Po zainstalowaniu ubuntu 7.04 pl kilka dni temu, na formatowany dysk miałem problem z kompilacją prostych programów w C. Przy kompilacji gcc nie znajdował mi stdio.h, zaradziłem na to po użyciu Google'a instalacją build-essential. Kompilacja następuje, ale nie mogę wykonać tego co już mam.

grzesiek@grzesiek-desktop:~$ gcc -c '/home/grzesiek/Desktop/dane/programowanie/c/choinka.c' -o '/home/grzesiek/Desktop/dane/programowanie/c/choinka.out'
grzesiek@grzesiek-desktop:~$ '/home/grzesiek/Desktop/dane/programowanie/c/choinka.out'
bash: /home/grzesiek/Desktop/dane/programowanie/c/choinka.out: nie można wykonać pliku wykonywalnego
Takie programy nie mają nawet ikony z "zębatkami" w Nautiliusie.

Co ciekawsze nie mogę otworzyć też z terminala zwykłych plików, widzę tylko
Permission denied
lub
grzesiek@grzesiek-desktop:~$ /home/grzesiek/dane/dokumenty/help.txt
/home/grzesiek/dane/dokumenty/help.txt: line 1: błąd składni w pobliżu nieoczekiwanego tokenu '('
/home/grzesiek/dane/dokumenty/help.txt: line 1: `GNU bash, version 3.2.13(1)-release (i486-pc-linux-gnu)'
grzesiek@grzesiek-desktop:~$
Co gorsza przez te parę dni postarałem się i zainstalowałem kilka nowości
- MonoDevelop,
- Tilda,
- beryl i dezinstalacja,
- kde - tak że mam wybór sesji,

Tak naprawdę mam 4 partycje:
- hdc1 - ntfs Windows XP,
- hdc5 - ntfs wspólna na dane dla Windowsa i Ubuntu, jest dowiązanie tak że /home/grzesiek/dane == /media/hdc5/dane
- hdc8 - ext3 , pusta - czeka na Gentoo chyba, ale jak sobie z Ubuntu nie radzę to jeszcze poczeka,
- / - ext3 - cały ubuntu
// SWAP nie liczę.

Po kilku zmianach nie mogę nadal nic zrobić. Mam wyraźnie napisane że właścicielem wszystkiego w /media/hdc5/dane jest root. Robiłem już :
usermode -G admin -a grzesiek
i
adduser grzesiek admin
a później
sudo chown grzesiek:admin /
Ale po drodze było sporo kłopotów i dodatkowych zmian, że sma sie gubię.
Dwie ważne rzeczy - mam włączone zapisywanie na NTFS.
Poprzednio - przed formatem partycji z tym samym Ubuntu 7.04 miałem problemy (po jakimś czasie - może update) z tym co juz napisałem - gcc nie znajdował stdio.h
Zrobiłem naprawę jak w Windowsie (przez format + reinstall) i nie pomogło.

Zatem czekam na porady jak to można zrobić według standardów Linux'a i z góry dziekuje :-) uprzedzam lojalnie że nie jestem za bardzo zorientowany w Ubuntu i Linux'ach ogólnie i proszę o proste porady.
Veni Creator Spiritus
px33
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 119
Rejestracja: 14 wrz 2006, 18:02
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME

Post autor: px33 »

Dodaj atrybut wykonywalności do pliku, najprościej

Kod: Zaznacz cały

chmod 777 plik
Awatar użytkownika
G+
Piegowaty Guziec
Piegowaty Guziec
Posty: 4
Rejestracja: 14 cze 2007, 16:40
Płeć: Mężczyzna
Wersja Ubuntu: 7.10
Środowisko graficzne: Xfce
Kontakt:

Post autor: G+ »

Dzięki za szybki odzew :-)

Sprawdziłem prawa plików i wychodzi że wszystkie są 777. Skompilowałem prosty program i zmieniłem jego uprawnienia, ale nadal nic, nawet z sudo. Efekty widać niżej:

Kod: Zaznacz cały

grzesiek@grzesiek-desktop:~/dane/programowanie/c$ gcc -c pamiętam.c -o pamiętam.out
grzesiek@grzesiek-desktop:~/dane/programowanie/c$ /home/grzesiek/dane/programowanie/c/pamiętam.out
bash: /home/grzesiek/dane/programowanie/c/pamiętam.out: nie można wykonać pliku wykonywalnego
grzesiek@grzesiek-desktop:~/dane/programowanie/c$ chmod 777 /home/grzesiek/dane/programowanie/c/pamiętam.out
grzesiek@grzesiek-desktop:~/dane/programowanie/c$ /home/grzesiek/dane/programowanie/c/pamiętam.out
bash: /home/grzesiek/dane/programowanie/c/pamiętam.out: nie można wykonać pliku wykonywalnego
grzesiek@grzesiek-desktop:~/dane/programowanie/c$ sudo /home/grzesiek/dane/programowanie/c/pamiętam.out
Password:
/home/grzesiek/dane/programowanie/c/pamiętam.out: 1: Syntax error: word unexpected (expecting ")")
grzesiek@grzesiek-desktop:~/dane/programowanie/c$ 
Veni Creator Spiritus
Awatar użytkownika
kwalo
Przyjaciel
Przyjaciel
Posty: 75
Rejestracja: 15 lis 2005, 23:20
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME

Post autor: kwalo »

G+, jeśli kompilujesz i podajesz opcję -c do kompilatora, to w efekcie nie otrzymujesz pliku wykonywalnego, ale tzw. object file, czyli plik zawierający kod maszynowy, ale nie będący plikiem wykonywalnym. Musisz to jeszcze zlinkować do pliku wykonywalnego. Zrobisz to poleceniem:

Kod: Zaznacz cały

gcc -o pamietam pamietam.o
W wyniku otrzymasz plik wykonywalny, który będziesz mógł odpalić. Nie ma potrzeby dodawania jakichkolwiek uprawnień. Kompilator zrobi to za Ciebie.
Awatar użytkownika
G+
Piegowaty Guziec
Piegowaty Guziec
Posty: 4
Rejestracja: 14 cze 2007, 16:40
Płeć: Mężczyzna
Wersja Ubuntu: 7.10
Środowisko graficzne: Xfce
Kontakt:

Post autor: G+ »

Wielkie dzięki kwalo ! Programy mi już działają :-) a już było blisko poddania się. Co prawda mi linkowanie wychodzi po napisaniu osobno obu komend w tej postaci:

Kod: Zaznacz cały

grzesiek@grzesiek-desktop:~$ gcc -c hello.c 
grzesiek@grzesiek-desktop:~$ gcc hello.o -o hello.out  
Jeszcze raz dzięki.
Veni Creator Spiritus
Awatar użytkownika
kwalo
Przyjaciel
Przyjaciel
Posty: 75
Rejestracja: 15 lis 2005, 23:20
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME

Post autor: kwalo »

Jeśli kompilujesz program, który składa się z jednego pliku, to możesz to zrobić jednym poleceniem:

Kod: Zaznacz cały

gcc -o program program.c
Wtedy kompilator wykona wszystkie te operacje za jednym zamachem. Jeśli piszesz większe programy, to warto się zainteresować programami, które automatycznie kompilują i linkują wszystkie programy. Najpopularniejszym takim programem jest oczywiście make, ale scons uważam za wygodniejszy. Wystarczy, że w katalogu z źródłami stworzysz plik o nazwie SConstruct, a w treści wpiszesz coś takiego:

Kod: Zaznacz cały

env = Environment()
env.Program('program', ['plik1.c', 'plik2.c', 'plik3.c'])
Potem kompilujesz, poleceniem scons. Oczywiście to tylko podstawy, sam program zapewnia znacznie więcej, ale o tym w dokumentacji.
Mariusz_sky
Piegowaty Guziec
Piegowaty Guziec
Posty: 2
Rejestracja: 09 paź 2008, 16:22
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME

Odp: Brak uprawnień do wykonywania programów i otwierania plików.

Post autor: Mariusz_sky »

Witam,
mam bardzo podobny problem, dlatego proszę o pomoc w następującej sprawie. Mianowicie od niedawna zacząłem ambitnie uczyć się programować w C#. Przerabiam lekcja po lekcji i na koniec wykonuje ćwiczenia (na platformie monodevelop). Do wczoraj .... wszystkie programy (te napisane przeze mnie ) przestały mi działać. Bezlitosny system wypisuje tylko:
"...
bash: ./obliczsilnie.exe: nie można wykonać pliku wykonywalnego
..."

Dodam tylko że oczywiście uprawnienia pliku zmieniałem- jednak bez skutku.
Z góry dziękuje za każdą pomoc.
deallas
Piegowaty Guziec
Piegowaty Guziec
Posty: 27
Rejestracja: 05 maja 2007, 20:18
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: Brak uprawnień do wykonywania programów i otwierania plików.

Post autor: deallas »

Kod: Zaznacz cały

mono obliczsilnie.exe
??
Mariusz_sky
Piegowaty Guziec
Piegowaty Guziec
Posty: 2
Rejestracja: 09 paź 2008, 16:22
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME

Odp: Brak uprawnień do wykonywania programów i otwierania plików.

Post autor: Mariusz_sky »

deallas pisze:

Kod: Zaznacz cały

mono obliczsilnie.exe
??
Dzięki deallas,
tez znalazłem odpowiedz na necie. Nie mniej jednak dzięki za pomoc.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 4 gości