Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ubuntu tietokoneissa => Aiheen aloitti: ajaaskel - 18.07.12 - klo:11.43
-
Sarjassamme "vaatinee selitystä" kun tuli tämä tilanne:
sudo ls /home/emmy/.mozilla/firefox/*.default/chrome
ls: tiedostoa /home/emmy/.mozilla/firefox/*.default/chrome ei voi käsitellä: Tiedostoa tai hakemistoa ei ole
Kokeillaanpa sama "sudo su": lla, tuloksenhan pitäisi olla sama:
sudo su
ls /home/emmy/.mozilla/firefox/*.default/chrome
launchy.xml
Nyt se löytyikin eli "sudo": lla ei "globbing" (tähden laajennus) toimi tai "sudo" ei annakaan täysiä oikeuksia tuossa ensimmäisessä tapauksessa vai miten tuo pitäisi käsittää ?
Kohtasin tuon alkuaan kun "chown" kieltäytyi samassa tilanteessa.
Tuo esiintyy yhdellä 10.04 LTS -koneella. Tutkin asetukset myös tämän avulla:
shopt
mutta se näyttää tavanomaiselta.
-
Toimiiko tähti yleensäkään normikäyttäjänä vai ainoastaan rootina? En kyllä ymmärrä miksi tähti vaatisi kirjautumisen roottina. Sudousers tiedostoa muokkaamalla vois ehkä saada toimimaan mutta en tiedä sen enempää.
-
Tähti toimii yleensä joka paikassa ja kaikilla käyttäjillä ihan normaalisti. Tässä on vain jokin harvinainen (?) tilanne jonka aiheuttaja on hämärä vielä.
-
Hmm. Onko käyttäjälläsi oikeuksia tutkia mitä tuolla hakemistossa on? (todennäköisesti ei, koska käytit sudoa) Eli voisiko olla niin, että sudo ei laajenna tähtimerkkiä vaan komentotulkki (bash?)? Sillä taas ei ole oikeuksia lukea tuota hakemistoa.
-
Hmm. Onko käyttäjälläsi oikeuksia tutkia mitä tuolla hakemistossa on? (todennäköisesti ei, koska käytit sudoa) Eli voisiko olla niin, että sudo ei laajenna tähtimerkkiä vaan komentotulkki (bash?)? Sillä taas ei ole oikeuksia lukea tuota hakemistoa.
Se on aina bash joka laajentaa tähden. Saatat silti olla oikeilla jäljillä sillä "sudo" saa uuden ympäristön kopion käynnistyessään (?) mutta sen lisäksi oikeusmääritykset/omistajuus/ryhmä voivat liittyä tuohon toisena reunaehtona.
Silti on hämärää mikä eroaa sudolla ajettaessa niin että tuo epäonnistuu.
Tutkin hieman oikeuksia, näyttää tältä:
drwxr-wr-w emmy:emmy emmy
drwx------ emmy:emmy .mozilla
drwx------ emmy:emmy firefox
drwx-------- emmy:emmy 4mdnid8n.default
drwxr-xr-x root:root chrome
-rwxr-xr-x root:root launchy.xml
Alkuperäinen tarkoitus oli korjata tuonne omistaja/ryhmä automaattisesti skriptissä, nyt tuo skripti kurahtaa tuossa kohdassa kun se ei onnistu sudolla tähden kanssa. Tähti taasen tarvitaan kun tuossa kohdassa voi lukea mitä vain (ennen tuota ".default"). Tunnen myös "--" -kikan, se ei auta.
-
Se on juuri noin, kuten Tomin arvelee. Kun painat enteriä, bash laajentaa komentorivin. Siis ennen komennon suoritusta. Ongelman kiertämiseksi pitää vain avata toinen shell ja välittää komento sille yksinkertaisissa hipsuissa ettei 1. shell pääse sorkkimaan.
sudo bash -c 'ls /root/*'
-
sudo bash -c 'ls /home/emmy/.mozilla/firefox/*.default/chrome'
launchy.xml
Tuo toimii ok, kiitos.
"sudo" ei olekaan aina ihan suoraviivainen "root" :in korvike mutta toimii näköjään ok tuolla "bash -c kova_lainaus" -keinolla:
sudo bash -c 'ajettava_juttu_tähän'
Täytyypä muistaa tuo jatkossa sudon + tähden kanssa :)
Kun painat enteriä, bash laajentaa komentorivin. Siis ennen komennon suoritusta.
Eipä tullut mieleen ajatella tuon tapahtumaketjun järjestystä, hyvin huomattu sekä "Tomin" että "retu" !
Edit:
Skriptin kirjoittajalle tulikin pientä lisäpähkinää purtavaksi tuosta: Parametrien välitystä on hankalaa saada toimimaan kun ajetaan "sudo bash -c": lla, parametrit ja ympäristömuuttujat eivät välity tuossa tilanteessa tavalliseen tapaan, lienee (?) estetty "sudo": ssa. Jos laittaa jotain ympäristömuuttujaan ja katsoo
sudo bash -c 'env'
niin mitään ei tule perille.
Löysin tuohon pari vinkkiä, joko välittämällä ympäristömuuttujat komentorivillä "sudo": n jälkeen tai käyttämällä "-E" -vipua "sudo": n perässä näyttäisi oman ympäristömuutujan välitys toimivan.
Tuosta komennosta tulisi tämän näköinen korjattuna:
sudo -E bash -c 'ajettava_juttu_tähän'