Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Mono/Linux izvršavanje terminalne komande

[es] :: .NET :: .NET Desktop razvoj :: Mono/Linux izvršavanje terminalne komande

[ Pregleda: 1922 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

dava
Banja Luka

Član broj: 27208
Poruke: 893



+384 Profil

icon Mono/Linux izvršavanje terminalne komande13.12.2011. u 11:03 - pre 150 meseci
Na jednom linux sistemu imam instaliran MonoDevelop i tu razvijam jednu aplikaciju.
Potrebno mi je da ta aplikacija može da promjeni IP adresu računara (OS linux Debian). Zamislio sam da to radi tako što kreira fajl interfaces sa novom IP adresom na nekoj mojoj putanji i zatim pozovem terminalnu komandu koja će prekopirati fajl interfaces preko originalnog koji je na putanji /etc/network/interfaces.

Imam ovaj dio koda za izvrsavanje cmd comande:

Code:

Process p = new Process();
            p.StartInfo = new ProcessStartInfo( "mkdir", "testDir" )
                {
                    RedirectStandardOutput = true,
                    UseShellExecute = false,
                    CreateNoWindow = true
                };
            p.Start();
            string output = p.StandardOutput.ReadToEnd();
            p.WaitForExit();
            Console.WriteLine(output)
            Console.Read();


i ovu komandu koja radi kada ručno pozovem iz terminala:

Code:
sudo /cp /home/test/interfaces /etc/network/interfaces


Komanda zahtjeva naredbu 'sudo' na početku da bi mogla da pregazi /etc/network/interfaces i to mi pravi problem. Ne mogu nikako da uglavim ovo sudo?


Code:
p.StartInfo = new ProcessStartInfo( "sudo /cp", "/home/test/interfaces /etc/network/interfaces" )


Ako pozovem ovako, buni se kaže filename unknown, ako idem bez sudo kaze access denied.

Ima li neko rešenje? Ili ako postoji neko drugo rešenje za promjenu IP adrese programski, rado ću ga prohvatiti.

SELECT * FROM หน่วยงานหลัก WHERE ยสันติ LIKE 'โดย%'
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
*.kbcnet.rs.

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Mono/Linux izvršavanje terminalne komande13.12.2011. u 12:11 - pre 150 meseci
A ovako:

Code:
p.StartInfo = new ProcessStartInfo( "sudo", "/cp /home/test/interfaces /etc/network/interfaces" )


ili

Code:
p.StartInfo = new ProcessStartInfo( "/usr/bin/sudo", "/cp /home/test/interfaces /etc/network/interfaces" )


?
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Mono/Linux izvršavanje terminalne komande13.12.2011. u 12:20 - pre 150 meseci
Zar ne mzoes ovo da resis kroz sudoers?

Ili preko setuid?

sudo chown root /home/test/interfaces
sudo chmod ug+s /home/test/interfaces



[Ovu poruku je menjao mmix dana 13.12.2011. u 13:40 GMT+1]
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

dava
Banja Luka

Član broj: 27208
Poruke: 893



+384 Profil

icon Re: Mono/Linux izvršavanje terminalne komande13.12.2011. u 13:02 - pre 150 meseci
@Burgos probao oba načina, ali ništa se ne desi, tj ne prekopira fajl, ali ne javi ni grešku. Mislim da se u ovim slučajevima uopšte i ne pozove kopiranje.

@mmix ako si pod sudoers mislio to da upišem u njega upišem

Code:
test ALL = NOPASSWD: /bin/cp 


da /cp ne bi tražio password, probao sam i nije mi pomoglo jer i u tom slučaju moram pre komande navesti sudo, a to je ono što mi se ne uklapa u komandu i poziv.
Ovo drugo tvoje rešenje nisam probao jer ne baratam dobro sa linux-om pa ako možeš malo da pojasniš.
SELECT * FROM หน่วยงานหลัก WHERE ยสันติ LIKE 'โดย%'
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
*.kbcnet.rs.

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Mono/Linux izvršavanje terminalne komande13.12.2011. u 13:41 - pre 150 meseci
A da li ti se program cp nalazi u / direktorijumu? Probaj ovako:

Code:
p.StartInfo = new ProcessStartInfo( "sudo", " cp /home/test/interfaces /etc/network/interfaces" )
 
Odgovor na temu

dava
Banja Luka

Član broj: 27208
Poruke: 893



+384 Profil

icon Re: Mono/Linux izvršavanje terminalne komande13.12.2011. u 13:51 - pre 150 meseci
@Burgos svaka čast, radi. Takodje hvala i @mmix-u na trudu.

Ako može samo da sumiramo na kraju zašto nije radilo sa

Code:
p.StartInfo = new ProcessStartInfo( "sudo", "/cp /home/test/interfaces /etc/network/interfaces" )


,a radi ovako:

Code:
p.StartInfo = new ProcessStartInfo( "sudo", " cp /home/test/interfaces /etc/network/interfaces" )


pošto mi nije jasno.


SELECT * FROM หน่วยงานหลัก WHERE ยสันติ LIKE 'โดย%'
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Mono/Linux izvršavanje terminalne komande13.12.2011. u 13:54 - pre 150 meseci
da, kad razmislim bolje sudoers nije bas resenje za tebe al setuid jeste

ako je tvoja aplikacija /cp

onda:

sudo chown root /cp

- postalvlja root kao ownera /cp

sudo chmod ug+s /cp

- postavlja setuid i setgid flegove na /cp fajlu

setuid znaci da kad user pokrene aplikaciju onda radi u kontekstu ownera (samim tim mzoes eventualno da zastiti ko sme da je pozove) u ovom slucaju root, vise detalja:

http://en.wikipedia.org/wiki/Setuid
http://en.wikipedia.org/wiki/Chmod
http://en.wikipedia.org/wiki/Chown

ovo sve radis samo jedanput kad setup-ujes resenje, ne svaki put kad pozivas /cp
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
*.kbcnet.rs.

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Mono/Linux izvršavanje terminalne komande13.12.2011. u 14:11 - pre 150 meseci
Program
sudo
kao prvi argument prima putanju do programa koju je potrebno izvršiti.

U prvom slučaju, adresa je glasila
/cp
što znači da se program nalazio u / direktorijumu (što obično nije slučaj). U drugom slučaju, putanja je glasila samo
cp
, pa se onda u svim direktorijumima koji su navedeni u $PATH promenljivoj tražio program
cp
(obično je u /usr/bin/cp).

Jedino što mi nije jasno je to da ti ovo zapravo radi u terminalu:

sudo /cp /home/test/interfaces /etc/network/interfaces
 
Odgovor na temu

dava
Banja Luka

Član broj: 27208
Poruke: 893



+384 Profil

icon Re: Mono/Linux izvršavanje terminalne komande13.12.2011. u 14:29 - pre 150 meseci
@mmix imaću to u vidu ako mi ovo prvobitno zakaže.

@Burgos u pravu si, ovo ne radi, pogrešno sam napisao:

sudo /cp /home/test/interfaces /etc/network/interfaces


ovo sam probao iz terminala i ovo radi.

sudo /bin/cp /home/test/interfaces /etc/network/interfaces


Ljudi hvala još jednom.
SELECT * FROM หน่วยงานหลัก WHERE ยสันติ LIKE 'โดย%'
 
Odgovor na temu

[es] :: .NET :: .NET Desktop razvoj :: Mono/Linux izvršavanje terminalne komande

[ Pregleda: 1922 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.