A chown olyan paraméterezését kérném, ami rekurzívan minden felhasználónak a tulajdonába adja a saját /home alatt lévő mappát. (sok felhasználó van az egyesével történő állítgatásra)
merthogy valami félrement, és /home/andrástól /home/zsolt-ig pisti a tulaja. A csaoport jó, csak a tulaj mászott el.
köszönöm!
- 6395 megtekintés
Hozzászólások
for i in `ls /home`; do getent passwd $i |awk -F: '{print "chown -R "$1"."$1" "$6}'; done
Ha rögtön akarod a chown-t, akkor fogod és s print helyett használod a system-et.
- A hozzászóláshoz be kell jelentkezni
$ ls -d /home/* | while read dir; do echo chown -R $(basename $dir) $dir; done
------------------------
Program terminated
{0} ok boto
boto ?
- A hozzászóláshoz be kell jelentkezni
ekkor feltételezed, hogy az egyes felhasználók nevei és home könyvtárai ugyanolyan elnevezésűek.
számos helyen előfordul, hogy a login név mz23z42, míg a homedir TX28BZAA ami hozzá tartozik. :D
A legjobb egyébként egy sima `getent passwd` lenne és az azon való végigszaladás, de ekkor kell még egy ellenőrzés, hogy van e olyan directory a home alatt.
- A hozzászóláshoz be kell jelentkezni
Nem feltételeztem, a példából indultam ki. :) Amúgy teljesen jogos mindkét felvetés.
------------------------
Program terminated
{0} ok boto
boto ?
- A hozzászóláshoz be kell jelentkezni
ja a feltételezést nem úgy értettem...csak olyan matematikailag..."tegyük fel.." :D
nem arra gondoltam hogy Te tényleg ezt feltételezted, hanem hogy ebben az esetben ez a feltétel teljesülne :D
- A hozzászóláshoz be kell jelentkezni
Igen, de még az se biztos, hogy a /home-ban vannnak a home könyvtárak, szóval lehet itt még bonyolítani a dolgot :)
- A hozzászóláshoz be kell jelentkezni
do echo chown? Azt az echo-t jól látom?
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Igen, azt hiszem. Biztosan nem tudom, mire való, és azt sem, miért írtam oda!
------------------------
Program terminated
{0} ok boto
boto ?
- A hozzászóláshoz be kell jelentkezni
:D
Jó, de azért mondhattad volna a kérdezőnek... A kérdésből valahol érezhető volt, hogy a bash scripting nem az erőssége.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Köszönöm!
de egy valamit elfelejtettem, van a /home/profile, ahol annak root kellene, de a benne lévő
/home/profile/andras
/home/profile/andras.V2 -től
/home/profile/zsolt
/home/profile/zsolt.V2-ig is saját tulajdonra volna szükség.
- A hozzászóláshoz be kell jelentkezni
ebben az esetben a kolléga megoldását használd a basename-el, valamint még egy sor a $(basename ... ).V2-vel
meg kell a grep -v V2 is, hogy kiszűrjük az ilyen könyvtárakat a keresésből, mer kb. ezek nem is kellenek, mert nincs V2-es user egy sem.
vagy
chown $i /home/profile/$i{,.V2}
- A hozzászóláshoz be kell jelentkezni
kezdek belekeveredni..
$ ls -d /home/* | while read dir; do echo chown -R $(basename $dir) $dir; done
$ ls -d /home/* | while read dir; do echo chown -R $(basename $dir).V2 $dir; done
s utána?! chown $i /home/profile/$i{,.V2}
- A hozzászóláshoz be kell jelentkezni
Neeeem.
ls -d /home/* |grep -v profile | while read dir; do echo chown -R $(basename $dir) $dir; done
ez csak a home alatti mappákat fogja megnézni, rekurzív nem lesz és nem állítja a profile mappát, mert arra más jogok vonatkoznak
ezek után a profile mappába kell megcsinálni ugyanezt valahogy így:
ls -d /home/profile/* | grep -v V2 | while read dir; do echo chown -R $(basename $dir) $dir{,.V2}; done
Hát nagyjából ennyi....
- A hozzászóláshoz be kell jelentkezni
Nemcsak "do chown" kell "echo" nélkül?
- A hozzászóláshoz be kell jelentkezni
Magam is megcsodáltam azt a felesleges echo-t. Gondolom, magának megírta a scriptet, s debugolni akarta, látni, hogy mi történik, de nyilván nem szerette volna, ha a saját gépén változik a tulajdonos. Így maradhatott ott az az echo.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Sikerült a profile-n kívül ahogy mondtad, echo nélkül:
ls -d /home/* |grep -v profile | while read dir; do chown -R $(basename $dir) $dir; done
Ez is mehet?! Nekem vége nem világos.. Van egy "andras" és egy "andras.V2", de minkettő andrásé
ls -d /home/profile/* | grep -v V2 | while read dir; do echo chown -R $(basename $dir) $dir{,.V2}; done
- A hozzászóláshoz be kell jelentkezni
Azt mondd, milyen névszerkezetű home alkönyvtáraid vannak, s azok melyikének milyen tulajdonba kellene kerülnie. A másik, hogy az echo-t magam is javasolom, mielőtt lefuttatod a parancsot rendesen, mert így látni fogod, hogy mi történik majd a valós futtatásnál.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
- /home
- /andras
- /bela
- .
- .
- .
- /profile
- /andras
- /andras.V2
- /bela
- /bela.V2
- .
- .
- .
- /zsolt
- /zsolt.V2
- /zsolt
- A hozzászóláshoz be kell jelentkezni
Nem teszteltem le, de szerintem valami ilyesmi lesz belőle:
#!/bin/bash
loop() {
while read; do
[ ! -d "$REPLY" ] && continue
if [ x"$REPLY" = x'profile' ]; then
cd "$REPLY"
loop
cd ..
continue
fi
owner="`cut -d. -f1 <<<\"$REPLY\"`"
chown -R "$owner" "$PWD/$REPLY"
done < <(ls -1)
}
cd /home
loop
exit 0
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Na ha már a két sor is bonyolult volt, akkor ez meg...rekurzív???? !!!!! :D :D :D
Én inkább kiadnám a két parancsot külön külön. :D
1. ls -d /home/* |grep -v profile | while read dir; do chown -R $(basename $dir) $dir; done
2. ls -d /home/profile/* | grep -v V2 | while read dir; do chown -R $(basename $dir) $dir{,.V2}; done
- A hozzászóláshoz be kell jelentkezni
Így rekurzívan picit általánosabb. Azért nem átláthatatlan szerintem. :) Esetleg a process substitution lehet picit ijesztő, de ha az, lehet akár pipe-olni is. A pipe-pal az szokott a baj lenni, hogy külön process-ben fut, így a változók lokálisak lesznek, hiszen másik memóriaterületen kerülnek foglalásra. Ez néha igen kellemetlen tud lenni. Bár, ha jól látom, ez most nem okozna gondot.
a=a; echo b | read a; echo $a
a
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Közben leteszteltem, működik. :)
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Lehetett volna így is a cut-ot tartalmazó sor helyett:
owner="${REPLY%%.*}"
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
...ez azért nem linux haladó....
1. mivel nem lesz olyan felhasználód hogy .V2, ezért a grep kiszedi ezeket a könyvtárakat a találati listájából az ls-nek
2. de ugye mivel a V2-esek valószínúleg a tulajdonában vannak (azonos a tulajdonosuk), így szeretnénk egyben az összes (ezt a basename paranccsal szedjük ugye ki) és valami.V2 könyvtárnak is a tulajdonosát rendbe tenni. Ezt teszi a {}-be foglalt rész.
Természetesen echo nem kell. Én azért írtam bele, mert először szeretem látni hogy mi fog történni, egyet kiadni a listából és ha jó, akkor az egészet lefuttatni. Rögtön ráereszteni bármit nem célszerű, lásd az eredeti problémádat ami valószínűleg így keletkezett.
- A hozzászóláshoz be kell jelentkezni
Rögtön ráereszteni bármit nem célszerű, lásd az eredeti problémádat ami valószínűleg így keletkezett.
Visszanéztem az előzőkben kiadott parancsokat (csak update/upgrade), és semmi nem indolkolta ezt a jelenséget de még scripteket sem futtattam, így az okokban tanácstalan vagyok, de a lényeg, hogy most megy :)
és persze okulva ebből le is szedtem pár bash doksit.. na de jobb későn.. :)
- A hozzászóláshoz be kell jelentkezni
Köszönöm mindenkinek a segítséget!
- A hozzászóláshoz be kell jelentkezni
up!
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
Jó, de már megoldotta... :)
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Biztos subscribet akart irni a legeny, csak az tul hosszu.
- A hozzászóláshoz be kell jelentkezni
ja.
sub!
:)
- A hozzászóláshoz be kell jelentkezni
Mivel látom, hogy már megoldódott, így offtopikként csak szeretném megköszönni, szuper zh feladat lesz ebből :-)
(Illetve: Kedves Hallgató! Fejből oldja, ne itt keressen megoldást)
- A hozzászóláshoz be kell jelentkezni
:)
Hat mar varom, amikor paran felteszik majd a kerdest, mert ahhoz sem lesz eleg eszuk, hoyg az archivumot bongesszek :)
- A hozzászóláshoz be kell jelentkezni