/ Forside / Teknologi / Hardware / Mac / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Mac
#NavnPoint
UlrikB 4810
kipros 1675
Klaudi 1010
myg 920
pifo 907
Stouenberg 838
molokyle 830
Bille1948 815
rotw 760
10  EXTERMINA.. 750
Shell-script
Fra : René Frej Nielsen


Dato : 19-10-05 07:31

Hejsa,

Jeg håber, at der er en shell-script ekvilibrist som kan hjælpe mig.
Det er vist nok ret simpelt, men shell-scripts er ikke lige noget jeg
har lært endnu.

Jeg har lavet en package-installation som installerer filer i brugeren
egen Hjem-mappe (nogle indstillinger til programmer), men når man
opbygger pakken er det ikke muligt at vælge andre grupper end de der
ligger som standard i systemet, så det kan altså ikke lade sig gøre at
definere at rettighederne på filen skal være f.eks. test:dtp, men kun
f.eks. test:staff, test:wheel osv.

Derfor er jeg nødt til ændre rettighederne efter installationen og til
det skal jeg bruge et shell-script, som afvikles af min installation.
Det skal sådan set "bare" køre følgende kommando:

chmod USER:GROUP ~/Library/Preferences

Hvor USER er brugerens shortname og GROUP er brugerens gruppe.

Problemet er, at scriptet vil blive afviklet som root (der bedes om
password ved starten af installationen) og derfor vil den aktive
bruger når scriptet køres nok være root. Hvordan man lige redder sig
ud af den, ved jeg ikke. Jeg tror jeg er nødt til at køre
installationen som root, da brugeren ikke er administrator på
computeren og der skal derfor bruges root-rettigheder for at ændre
tilhørsforholdet på filer.

Nogen ideer?

--
Mvh.
René Frej Nielsen

 
 
Thorbjoern Ravn Ande~ (19-10-2005)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 19-10-05 08:25

spam@rfn.dk (René Frej Nielsen) writes:

> Nogen ideer?

Kig på sudo, som giver dig mulighed for at afvikle kommandoer med
rodrettighed.

Jeg forstår bare ikke hvorfor du ikke kan lave en helt almindelig
..app-dims?

--
Thorbjørn Ravn Andersen "... plus ... Tubular Bells!"
http://bigfoot.com/~thunderbear

René Frej Nielsen (19-10-2005)
Kommentar
Fra : René Frej Nielsen


Dato : 19-10-05 13:54

Thorbjoern Ravn Andersen <nospam0000@gmail.com> wrote:

> spam@rfn.dk (René Frej Nielsen) writes:
>
>> Nogen ideer?
>
> Kig på sudo, som giver dig mulighed for at afvikle kommandoer med
> rodrettighed.
>
> Jeg forstår bare ikke hvorfor du ikke kan lave en helt almindelig
> .app-dims?

En .app dims? Det jeg laver er en OS X Installer Package som putter
filerne ind i de rigtige steder, men desværre med de forkerte
rettigheder. Det er så muligt at definere et script der skal afvikles
til sidst, og det havde jeg tænkt mig skulle fikse rettighederne.

Det rigigt bøvlede er, at for ændre rettighederne skal man være root
(bruge sudo) og så ændrer ens home og UID:GID vel? Så kan man ikke
længere slå værdien op, eller har jeg misset noget?

--
Mvh.
René Frej Nielsen

Thorbjoern Ravn Ande~ (19-10-2005)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 19-10-05 16:30

spam@rfn.dk (René Frej Nielsen) writes:

> En .app dims? Det jeg laver er en OS X Installer Package som putter
> filerne ind i de rigtige steder, men desværre med de forkerte
> rettigheder. Det er så muligt at definere et script der skal afvikles
> til sidst, og det havde jeg tænkt mig skulle fikse rettighederne.

Kan du ikke lige bakke et godt stykke længere tilbage og så forklare
hvad det er du har gang i. Gerne betydeligt mere detaljeret end det
citerede :)
--
Thorbjørn Ravn Andersen "... plus ... Tubular Bells!"
http://bigfoot.com/~thunderbear

René Frej Nielsen (20-10-2005)
Kommentar
Fra : René Frej Nielsen


Dato : 20-10-05 07:31

Thorbjoern Ravn Andersen <nospam0000@gmail.com> wrote:
> spam@rfn.dk (René Frej Nielsen) writes:
>
>> En .app dims? Det jeg laver er en OS X Installer Package som putter
>> filerne ind i de rigtige steder, men desværre med de forkerte
>> rettigheder. Det er så muligt at definere et script der skal afvikles
>> til sidst, og det havde jeg tænkt mig skulle fikse rettighederne.
>
> Kan du ikke lige bakke et godt stykke længere tilbage og så forklare
> hvad det er du har gang i. Gerne betydeligt mere detaljeret end det
> citerede :)

Jeg har lavet en installer package som installer nogle indstillinger
til diverse programmer: InDesign, Illustrator osv. Disse filer skal
distribueres ud på flere Mac'er efter at maskinener blevet sat op med
et NetInstall Image som de henter fra en Mac OS X Server.

Når brugeren logger ind første gang får han/hun en ny hjem-mappe og
deri skal der kopieres indstillinger til de programmer som vi bruger.
Det er nødvendigt for at sikre, at alle bruger samme indstillinger.

Jeg laver en installer package med programmet Iceberg, som sagtens kan
installere i brugerens egen hjem-mappe, men som rettigheder for
filerne kan man kun angive de standard-grupper der ligger i systemet.
Brugerne tilhører alle en gruppe hedder dtp, og jeg kan derfor ikke
komme til at give filerne den rigtige gruppe, såsom f.eks. lars:dtp, men kun
lars:admin, lars:staff osv.

Derfor bliver jeg nødt til at køre en form for script, der sætter de
rigtige rettigher på hele ~/Library/Preferences, da filerne ligger
spredt rundt.

--
Mvh.
René Frej Nielsen

Bjarne D Mathiesen (19-10-2005)
Kommentar
Fra : Bjarne D Mathiesen


Dato : 19-10-05 08:26

René Frej Nielsen wrote:
> Hejsa,
>
> Jeg håber, at der er en shell-script ekvilibrist som kan hjælpe mig.
> Det er vist nok ret simpelt, men shell-scripts er ikke lige noget jeg
> har lært endnu.
>
> Jeg har lavet en package-installation som installerer filer i brugeren
> egen Hjem-mappe (nogle indstillinger til programmer), men når man
> opbygger pakken er det ikke muligt at vælge andre grupper end de der
> ligger som standard i systemet, så det kan altså ikke lade sig gøre at
> definere at rettighederne på filen skal være f.eks. test:dtp, men kun
> f.eks. test:staff, test:wheel osv.
>
> Derfor er jeg nødt til ændre rettighederne efter installationen og til
> det skal jeg bruge et shell-script, som afvikles af min installation.
> Det skal sådan set "bare" køre følgende kommando:
>
> chmod USER:GROUP ~/Library/Preferences
>
> Hvor USER er brugerens shortname og GROUP er brugerens gruppe.
>
> Problemet er, at scriptet vil blive afviklet som root (der bedes om
> password ved starten af installationen) og derfor vil den aktive
> bruger når scriptet køres nok være root. Hvordan man lige redder sig
> ud af den, ved jeg ikke. Jeg tror jeg er nødt til at køre
> installationen som root, da brugeren ikke er administrator på
> computeren og der skal derfor bruges root-rettigheder for at ændre
> tilhørsforholdet på filer.
>
> Nogen ideer?
>

===== script start =====
#!/bin/bash

chmod ${1}:${2} ~/Library/Preferences
===== script slut =====

bruges sådan her : sudo <scriptnavn> USER GROUP


--
Bjarne D Mathiesen
København N ; Danmark ; Europa
----------------------------------------------------------------------
denne besked er skrevet i et totalt M$/Intel-frit miljø
MacOS X 10.4.2 Tiger ; Mozilla 1.8b1 ; PowerPC G4 800MHz
http://mozilla.mathiesen.info/
http://webadmin.mathiesen.info/

Thorbjoern Ravn Ande~ (19-10-2005)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 19-10-05 08:28

Bjarne D Mathiesen <macintosh@mathiesen.info> writes:

> chmod ${1}:${2} ~/Library/Preferences

Erstat ~ med $HOME.

Oddervajs ju may haf trubble.
--
Thorbjørn Ravn Andersen "... plus ... Tubular Bells!"
http://bigfoot.com/~thunderbear

Bjarne D Mathiesen (19-10-2005)
Kommentar
Fra : Bjarne D Mathiesen


Dato : 19-10-05 08:56

Thorbjoern Ravn Andersen wrote:
> Bjarne D Mathiesen <macintosh@mathiesen.info> writes:
>
>>
>
> Erstat ~ med $HOME.
>
> Oddervajs ju may haf trubble.

hmmm ... det skulle nok snarere i så fald være:
chmod ${1}:${2} ~${1}/Library/Preferences

${HOME} referer jo stadig til ~ ; de er det samme

--
Bjarne D Mathiesen
København N ; Danmark ; Europa
----------------------------------------------------------------------
denne besked er skrevet i et totalt M$/Intel-frit miljø
MacOS X 10.4.2 Tiger ; Seamonkey 1.1a ; PowerPC G4 800MHz
http://mozilla.mathiesen.info/
http://webadmin.mathiesen.info/

Thorbjoern Ravn Ande~ (19-10-2005)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 19-10-05 09:00

Bjarne D Mathiesen <macintosh@mathiesen.info> writes:

> ${HOME} referer jo stadig til ~ ; de er det samme

Afhænger af hvilken shell man bruger. $HOME er standard, det er ~
ikke.

--
Thorbjørn Ravn Andersen "... plus ... Tubular Bells!"
http://bigfoot.com/~thunderbear

René Frej Nielsen (19-10-2005)
Kommentar
Fra : René Frej Nielsen


Dato : 19-10-05 13:57

Bjarne D Mathiesen <macintosh@mathiesen.info> wrote:

>> Nogen ideer?
>>
>
> ===== script start =====
> #!/bin/bash
>
> chmod ${1}:${2} ~/Library/Preferences
> ===== script slut =====
>
> bruges sådan her : sudo <scriptnavn> USER GROUP

Takker... men så kunne jeg vel lige så godt bare fyre denne af:

sudo chmod USER:GROUP ~/Library/Preferences

Scriptet skal på en eller anden måde "aflæse" brugeren navn og gruppe
og så køre chmod på den rigtige mappe.

Det skal bruges til en installation over Apple Remote Desktop, hvor
jeg har en pakke med filer, som skal installeres. Når filerne er
installeret skal rettighederne fikses med scriptet og så vil jeg gerne
undgå at skulle logge ind på hver maskine og køre kommandoen manuelt.

--
Mvh.
René Frej Nielsen

Bjarne D Mathiesen (19-10-2005)
Kommentar
Fra : Bjarne D Mathiesen


Dato : 19-10-05 20:59

René Frej Nielsen wrote:
> Scriptet skal på en eller anden måde "aflæse" brugeren navn og gruppe
> og så køre chmod på den rigtige mappe.

Der er et par måder at finde samtlige brugere på et system
nidump -r /users .
nidump -r /groups .
giver dig lister over disse som kan parses for den ønskede information

>
> Det skal bruges til en installation over Apple Remote Desktop, hvor
> jeg har en pakke med filer, som skal installeres. Når filerne er
> installeret skal rettighederne fikses med scriptet og så vil jeg gerne
> undgå at skulle logge ind på hver maskine og køre kommandoen manuelt.
>

Når du kører din installation, hvor står du da i filsystemet ?
Kan du være et vilkårligt sted i filsystemet, når du køre din installation ?

Hvilken bruger er du når du kører scriptet ?

--
Bjarne D Mathiesen
København N ; Danmark ; Europa
----------------------------------------------------------------------
denne besked er skrevet i et totalt M$/Intel-frit miljø
MacOS X 10.4.2 Tiger ; Seamonkey 1.1a ; PowerPC G4 800MHz
http://mozilla.mathiesen.info/
http://webadmin.mathiesen.info/

Bjarne D Mathiesen (19-10-2005)
Kommentar
Fra : Bjarne D Mathiesen


Dato : 19-10-05 22:06

Bjarne D Mathiesen wrote:
> René Frej Nielsen wrote:
>> Scriptet skal på en eller anden måde "aflæse" brugeren navn og gruppe
>> og så køre chmod på den rigtige mappe.

Under forudsætning af at du står i roden af brugerens hjemmemappe, så
giver dette script dig det ønskede:

===== script start =====
#!/bin/bash

ejere=( $(ls -l -d "$(pwd)" | tr -s ' ' | cut -f 3,4 -d ' ') )
chmod -R ${ejere[0]}:${ejere[1]} ./Library/Preferences
===== script slut =====

Denne her vil så fikse tilladelserne for alle almindelige brugere under
forudsætning af at du !ikke! har ændret standarden for hvor hjemmemapper
installeres:

===== script start =====
#!/bin/bash

hjemmeDirs=( $( nidump -r /users . \
| sed -n "/\"home\" =/p" \
| tr -s ' ' \
| cut -d ' ' -f 5 \
| sed -n "\@/Users/@p" \
) )
for hjemDir in ${hjemmeDirs}
do
ejere=( $(ls -l -d ${hjemDir} | tr -s ' ' | cut -f 3,4 -d ' ') )
chmod -R ${ejere[0]}:${ejere[1]} ${hjemDir}/Library/Preferences
done

===== script slut =====


begge bruges sådan her : sudo <scriptnavn>




--
Bjarne D Mathiesen
København N ; Danmark ; Europa
----------------------------------------------------------------------
denne besked er skrevet i et totalt M$/Intel-frit miljø
MacOS X 10.4.2 Tiger ; Mozilla 1.8b1 ; PowerPC G4 800MHz
http://mozilla.mathiesen.info/
http://webadmin.mathiesen.info/

René Frej Nielsen (20-10-2005)
Kommentar
Fra : René Frej Nielsen


Dato : 20-10-05 07:35

Bjarne D Mathiesen <macintosh@mathiesen.info> wrote:

> Under forudsætning af at du står i roden af brugerens hjemmemappe, så
> giver dette script dig det ønskede:
>
> ===== script start =====
> #!/bin/bash
>
> ejere=( $(ls -l -d "$(pwd)" | tr -s ' ' | cut -f 3,4 -d ' ') )
> chmod -R ${ejere[0]}:${ejere[1]} ./Library/Preferences
> ===== script slut =====

Såvidt jeg kan se bruger du standarden for hvordan OS X laver
USER:GROUP. Her tilhører brugerne gruppen dtp, så det er vel ejere[1]
der skal ændres?

> Denne her vil så fikse tilladelserne for alle almindelige brugere under
> forudsætning af at du !ikke! har ændret standarden for hvor hjemmemapper
> installeres:
>
> ===== script start =====
> #!/bin/bash
>
> hjemmeDirs=( $( nidump -r /users . \
> | sed -n "/\"home\" =/p" \
> | tr -s ' ' \
> | cut -d ' ' -f 5 \
> | sed -n "\@/Users/@p" \
> ) )
> for hjemDir in ${hjemmeDirs}
> do
> ejere=( $(ls -l -d ${hjemDir} | tr -s ' ' | cut -f 3,4 -d ' ') )
> chmod -R ${ejere[0]}:${ejere[1]} ${hjemDir}/Library/Preferences
> done
>
> ===== script slut =====
>
>
> begge bruges sådan her : sudo <scriptnavn>

Jeg er glad for din indsats. Nu er det sådan at brugeren er
netværksbruger og godkendes via Open Directory. Jeg bruger muligheden
Mobile Account i Mac OS X Server for at få en lokal hjemmemappe, men
brugerne bliver ikke skrevet ind i NetInfo, så det ovenstående script
virker nok ikke.

--
Mvh.
René Frej Nielsen

Morten Reippuert Knu~ (20-10-2005)
Kommentar
Fra : Morten Reippuert Knu~


Dato : 20-10-05 06:41

Bjarne D Mathiesen <macintosh@mathiesen.info> wrote:
> René Frej Nielsen wrote:
> > Scriptet skal på en eller anden måde "aflæse" brugeren navn og gruppe
> > og så køre chmod på den rigtige mappe.

> Der er et par måder at finde samtlige brugere på et system
> nidump -r /users .
> nidump -r /groups .
> giver dig lister over disse som kan parses for den ønskede information

Det duer ikke i dette tilfælde, da brugerne ligger i en LDAPv3 på
netværket. (med networked homemapper, mobile samt managed accounts)

> > Det skal bruges til en installation over Apple Remote Desktop, hvor
> > jeg har en pakke med filer, som skal installeres. Når filerne er
> > installeret skal rettighederne fikses med scriptet og så vil jeg gerne
> > undgå at skulle logge ind på hver maskine og køre kommandoen manuelt.
> >
> Når du kører din installation, hvor står du da i filsystemet ?
> Kan du være et vilkårligt sted i filsystemet, når du køre din installation ?

> Hvilken bruger er du når du kører scriptet ?

lokal netinfo UID 501, UID 1 elller diradmin på LDAPv3'en.

(Jeg er "medarkitekt", hvilket er grunden til jeg kender disse detaljer)

--
Morten Reippuert Knudsen <http://blog.reippuert.dk>

PowerMac G5: 1.6GHz, 3GB RAM, 300+300GB SATA, 16xDVD-/+RW DL, Bluetooth
mus+tastatur, R9600PRO, iSight, eyeTV200 & LaCie Photon18Vision TFT.

René Frej Nielsen (20-10-2005)
Kommentar
Fra : René Frej Nielsen


Dato : 20-10-05 07:39

Bjarne D Mathiesen <macintosh@mathiesen.info> wrote:
> René Frej Nielsen wrote:
>> Scriptet skal på en eller anden måde "aflæse" brugeren navn og gruppe
>> og så køre chmod på den rigtige mappe.
>
> Der er et par måder at finde samtlige brugere på et system
> nidump -r /users .
> nidump -r /groups .
> giver dig lister over disse som kan parses for den ønskede information

Brugerne ligger desværre ikke i NetInfo.

>> Det skal bruges til en installation over Apple Remote Desktop, hvor
>> jeg har en pakke med filer, som skal installeres. Når filerne er
>> installeret skal rettighederne fikses med scriptet og så vil jeg gerne
>> undgå at skulle logge ind på hver maskine og køre kommandoen manuelt.
>>
>
> Når du kører din installation, hvor står du da i filsystemet ?
> Kan du være et vilkårligt sted i filsystemet, når du køre din installation ?

Det optimale ville være, at jeg bare kunne sende pakken ud via Apple
Remote Desktop, men jeg kan godt se, at det bliver svært, for så ved
scriptet ikke hvor de skal skrive.

Én måde at klare det på, ville være hvis scriptet kunne hoppe over i
/Users, tjekke hver brugermappes UID og GID og så "bare" chowne hver
mappe rekursivt med samme værdier. Det ville faktisk være nok, såvidt
jeg kan se.

> Hvilken bruger er du når du kører scriptet ?

Root vil jeg tro.

--
Mvh.
René Frej Nielsen

René Frej Nielsen (20-10-2005)
Kommentar
Fra : René Frej Nielsen


Dato : 20-10-05 08:58

René Frej Nielsen <spam@rfn.dk> wrote:

> Én måde at klare det på, ville være hvis scriptet kunne hoppe over i
> /Users, tjekke hver brugermappes UID og GID og så "bare" chowne hver
> mappe rekursivt med samme værdier. Det ville faktisk være nok, såvidt
> jeg kan se.

Jeg vil lige uddybe dette. Faktisk skal den bare gøre følgende:

cd /Users

"Liste alle mapper og huske deres USER:GROUP"

sudo chown -R USER:GROUP # for alle mapper UNDTAGEN "Shared"

Det skal så gentages for hver brugermappe, indtil der ikke er flere.
Det er vel det man kalder en løkke?

Det er vel ikke så svært

--
Mvh.
René Frej Nielsen

Bjarne D Mathiesen (20-10-2005)
Kommentar
Fra : Bjarne D Mathiesen


Dato : 20-10-05 11:22

René Frej Nielsen wrote:
> René Frej Nielsen <spam@rfn.dk> wrote:
>
>> Én måde at klare det på, ville være hvis scriptet kunne hoppe over i
>> /Users, tjekke hver brugermappes UID og GID og så "bare" chowne hver
>> mappe rekursivt med samme værdier. Det ville faktisk være nok, såvidt
>> jeg kan se.
>
> Jeg vil lige uddybe dette. Faktisk skal den bare gøre følgende:
>
> cd /Users
>
> "Liste alle mapper og huske deres USER:GROUP"
>
> sudo chown -R USER:GROUP # for alle mapper UNDTAGEN "Shared"
>
> Det skal så gentages for hver brugermappe, indtil der ikke er flere.
> Det er vel det man kalder en løkke?
>
> Det er vel ikke så svært
>

Så får du en sidste version

===== script start =====
#!/bin/bash

cd /Users

hjemmeDirs=( $( ls -l \
| sed "/Shared/d"
| tr -s ' ' \
| cut -f 3,4 -d ' '\
) )

for hjemDir in ${hjemmeDirs}
do
chmod -R ${ejere[0]}:${ejere[1]} ${hjemDir}
done

===== script slut =====

Nu burde du kunne stykke tingene sammen selv hvis du skal bruge en anden
versions. De her eksempler dækker vist de fleste muligheder for hvordan
man gør. Denne version er f.eks stykket sammen af bidder fra de første
to versioner - med den simple modifikation at 'Shared' fjernes


--
Bjarne D Mathiesen
København N ; Danmark ; Europa
----------------------------------------------------------------------
denne besked er skrevet i et totalt M$/Intel-frit miljø
MacOS X 10.4.2 Tiger ; Seamonkey 1.1a ; PowerPC G4 800MHz
http://mozilla.mathiesen.info/
http://webadmin.mathiesen.info/

Thorbjoern Ravn Ande~ (20-10-2005)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 20-10-05 11:33

Bjarne D Mathiesen <macintosh@mathiesen.info> writes:

> | sed "/Shared/d"

/^Shared$/d er nok det sikreste. NB: Har ikke dobbeltchecket syntaksen.

--
Thorbjørn Ravn Andersen "... plus ... Tubular Bells!"
http://bigfoot.com/~thunderbear

Bjarne D Mathiesen (20-10-2005)
Kommentar
Fra : Bjarne D Mathiesen


Dato : 20-10-05 16:18

Thorbjoern Ravn Andersen wrote:
> Bjarne D Mathiesen <macintosh@mathiesen.info> writes:
>
>> | sed "/Shared/d"
>
> /^Shared$/d er nok det sikreste. NB: Har ikke dobbeltchecket syntaksen.
>

kiggede lidt mere på det
jeg begik nogen fejl i skyndingen hvilket medførte en del overflødigt
desuden kunne scriptet ikke håndtere ' ' i filnavne konstruktivt
' ' i filnavne er et helvedes problem da de også er skilletegn
og så håber vi lige at der ikke er nogen '@' i filnavnene !

===== script start =====
#!/bin/bash

cd /Users

hjemmeDirs=( $(ls | sed -e "/Shared/d" -e "s/ /@/g") )

for hjemDir in ${hjemmeDirs}
do
hjemDir=$( echo "${hjemDir}" | sed -E "s/@/ /g" )
ejere=( $(ls -l -d "${hjemDir}" | tr -s ' ' | cut -f 3,4 -d ' ') )
chown -R ${ejere[0]}:${ejere[1]} "${hjemDir}"
done

===== script slut =====


Men din modifikation virker !IKKE! da den oprindelige version benytter
'ls -l' hvilket giver linjer af denne type:
[14:05:37@~]$ cd /Users/
[14:21:01@Users]$ ls -l
total 0
drwxrwxrwt 4 root wheel 136 Oct 13 18:32 Shared
drwxr-xr-x 24 bjarne bjarne 816 Jul 22 20:27 bjarne
[14:21:04@Users]$


--
Bjarne D Mathiesen
København N ; Danmark ; Europa
----------------------------------------------------------------------
denne besked er skrevet i et totalt M$/Intel-frit miljø
MacOS X 10.4.2 Tiger ; Mozilla 1.8b1 ; PowerPC G4 800MHz
http://mozilla.mathiesen.info/
http://webadmin.mathiesen.info/

Thorbjoern Ravn Ande~ (20-10-2005)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 20-10-05 18:42

Bjarne D Mathiesen <macintosh@mathiesen.info> writes:

> hjemmeDirs=( $(ls | sed -e "/Shared/d" -e "s/ /@/g") )

Læs op på "find", specielt -print0.

> Men din modifikation virker !IKKE! da den oprindelige version benytter

Jeg havde ikke lagt mærke til at du brugte ls til at få filnavnene.
Det gør man normalt ikke.
--
Thorbjørn Ravn Andersen "... plus ... Tubular Bells!"
http://bigfoot.com/~thunderbear

Bjarne D Mathiesen (20-10-2005)
Kommentar
Fra : Bjarne D Mathiesen


Dato : 20-10-05 20:34

Thorbjoern Ravn Andersen wrote:
> Bjarne D Mathiesen <macintosh@mathiesen.info> writes:
>
>> hjemmeDirs=( $(ls | sed -e "/Shared/d" -e "s/ /@/g") )
>
> Læs op på "find", specielt -print0.

Kender udmærket til find og print0
Det løser imidlertid ikke problemet, idet print0 er til brug i
forbindelse med xargs (læs op på denne)
Når du laver en liste/array på ovenstående måde, så vil !ethvert!
mellemrum blive taget for en adskillelse - også selvom du har omgivet
din tekst med " eller ' ; tro mig - jeg HAR prøvet !!!
Og du får problemet med ' ' igen når du lave din for-løkke og expanderer
dit array !selvom! det skulle være lykkedes for dig at få navnene lagt
ind med mellemrum

>
>> Men din modifikation virker !IKKE! da den oprindelige version benytter
>
> Jeg havde ikke lagt mærke til at du brugte ls til at få filnavnene.
> Det gør man normalt ikke.

Rent umiddelbart er der ingen grund til at benytte find, da vi jo bare
skal have en liste over hvad der ligger i /Users

Og der er ikke noget 'normalt' i *nix - hvad der virker virker.
Men du er da særdeles velkommen til at komme med et script der arbejder
med ' ' i navnene hele vejen igennem

Kom med et alternativ, der virker, eller hold kæft

--
Bjarne D Mathiesen
København N ; Danmark ; Europa
----------------------------------------------------------------------
denne besked er skrevet i et totalt M$/Intel-frit miljø
MacOS X 10.4.2 Tiger ; Mozilla 1.8b1 ; PowerPC G4 800MHz
http://mozilla.mathiesen.info/
http://webadmin.mathiesen.info/

Thorbjoern Ravn Ande~ (20-10-2005)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 20-10-05 21:36

Bjarne D Mathiesen <macintosh@mathiesen.info> writes:

> Og der er ikke noget 'normalt' i *nix - hvad der virker virker.
> Men du er da særdeles velkommen til at komme med et script der arbejder
> med ' ' i navnene hele vejen igennem
>
> Kom med et alternativ, der virker, eller hold kæft

bash-2.05b$ cd mac
bash-2.05b$ ls -l
total 28
drwxr-xr-x 2 ravn ravn 512 Oct 20 22:14 1 Shared 2
drwxr-xr-x 2 ravn ravn 512 Oct 20 22:14 Bruger 1
drwxr-xr-x 2 ravn ravn 512 Oct 20 22:14 Bruger 2
drwxr-xr-x 2 ravn ravn 512 Oct 20 22:14 IngenBruger
drwxr-xr-x 2 ravn ravn 512 Oct 20 22:14 Roger Shared Waters
drwxr-xr-x 2 ravn ravn 512 Oct 20 22:14 Shared
-rw-r--r-- 1 ravn ravn 134 Oct 20 22:30 x.sh
bash-2.05b$ sh x.sh
chown -R ravn:ravn '1 Shared 2'
chown -R ravn:ravn 'Bruger 1'
chown -R ravn:ravn 'Bruger 2'
chown -R ravn:ravn 'IngenBruger'
chown -R ravn:ravn 'Roger Shared Waters'
bash-2.05b$ cat x.sh
#!/bin/sh

for i in *
do
if [ -d "$i" -a "x$i" != "xShared" ];
then
echo "chown -R `stat -f '%Su:%Sg' "$i" ` '$i'"
fi
done
bash-2.05b$

NB: Lavet under FreeBSD da jeg - suk - stadig ikke har en Mac. stat
skulle dog være standard.

--
Thorbjørn Ravn Andersen "... plus ... Tubular Bells!"
http://bigfoot.com/~thunderbear

Bjarne D Mathiesen (20-10-2005)
Kommentar
Fra : Bjarne D Mathiesen


Dato : 20-10-05 22:58

Thorbjoern Ravn Andersen wrote:
> Bjarne D Mathiesen <macintosh@mathiesen.info> writes:
>
>> Og der er ikke noget 'normalt' i *nix - hvad der virker virker.
>> Men du er da særdeles velkommen til at komme med et script der arbejder
>> med ' ' i navnene hele vejen igennem
>>
>> Kom med et alternativ, der virker, eller hold kæft
>
> for i in *
> do
> if [ -d "$i" -a "x$i" != "xShared" ];
> then
> echo "chown -R `stat -f '%Su:%Sg' "$i" ` '$i'"
> fi
> done
> bash-2.05b$
>
> NB: Lavet under FreeBSD da jeg - suk - stadig ikke har en Mac. stat
> skulle dog være standard.
>

I stand corrected ! ;-D
Det er en !meget! bedre løsning end min !!!
Og stat findes under Mac OS X som jo også er FreeBSD

--
Bjarne D Mathiesen
København N ; Danmark ; Europa
----------------------------------------------------------------------
denne besked er skrevet i et totalt M$/Intel-frit miljø
MacOS X 10.4.2 Tiger ; Seamonkey 1.1a ; PowerPC G4 800MHz
http://mozilla.mathiesen.info/
http://webadmin.mathiesen.info/

René Frej Nielsen (20-10-2005)
Kommentar
Fra : René Frej Nielsen


Dato : 20-10-05 23:28

Bjarne D Mathiesen <macintosh@mathiesen.info> wrote:

>> for i in *
>> do
>> if [ -d "$i" -a "x$i" != "xShared" ];
>> then
>> echo "chown -R `stat -f '%Su:%Sg' "$i" ` '$i'"
>> fi
>> done
>> bash-2.05b$
>>
>> NB: Lavet under FreeBSD da jeg - suk - stadig ikke har en Mac. stat
>> skulle dog være standard.
>>
>
> I stand corrected ! ;-D
> Det er en !meget! bedre løsning end min !!!
> Og stat findes under Mac OS X som jo også er FreeBSD

Er ovenstående "good to go"? Jeg kan ikke se at det kigger i /Users
nemlig.

Hvad er fordelen ved Thorbjørns løsning?

--
Mvh.
René Frej Nielsen

Thorbjoern Ravn Ande~ (21-10-2005)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 21-10-05 00:10

spam@rfn.dk (René Frej Nielsen) writes:

> Er ovenstående "good to go"? Jeg kan ikke se at det kigger i /Users
> nemlig.

Nej, for Bjarne bad bare om en løsningsmetode der håndterede mellemrum
korrekt :)

Men der skal rettes så der står "for i in /Users/*" i stedet, og så
skal echo laves om så den faktisk KØRER chown, men det fikser Bjarne
nok lige

--
Thorbjørn Ravn Andersen "... plus ... Tubular Bells!"
http://bigfoot.com/~thunderbear

René Frej Nielsen (21-10-2005)
Kommentar
Fra : René Frej Nielsen


Dato : 21-10-05 09:44

Thorbjoern Ravn Andersen <nospam0000@gmail.com> wrote:

> spam@rfn.dk (René Frej Nielsen) writes:
>
>> Er ovenstående "good to go"? Jeg kan ikke se at det kigger i /Users
>> nemlig.
>
> Nej, for Bjarne bad bare om en løsningsmetode der håndterede mellemrum
> korrekt :)
>
> Men der skal rettes så der står "for i in /Users/*" i stedet, og så
> skal echo laves om så den faktisk KØRER chown, men det fikser Bjarne
> nok lige

OK... det ser jeg da frem til (hint hint...)

--
Mvh.
René Frej Nielsen

Bjarne D Mathiesen (21-10-2005)
Kommentar
Fra : Bjarne D Mathiesen


Dato : 21-10-05 11:38

Thorbjoern Ravn Andersen wrote:
> spam@rfn.dk (René Frej Nielsen) writes:
>
>> Er ovenstående "good to go"? Jeg kan ikke se at det kigger i /Users
>> nemlig.
>
> Nej, for Bjarne bad bare om en løsningsmetode der håndterede mellemrum
> korrekt :)
>
> Men der skal rettes så der står "for i in /Users/*" i stedet, og så
> skal echo laves om så den faktisk KØRER chown, men det fikser Bjarne
> nok lige
>

===== script start =====
#!/bin/bash

for i in /Users/*
do
if [ -d "${i}" -a "${i##*/}" != "Shared" ];
then
chown -R $(stat -f '%Su:%Sg' "${i}") "${i}"
fi
done
===== script slut =====

Jeg kan bedre lide at bruge $() samt eksplicit begrænsning af navne
Og der skal så lige skæres stien af ${i} i sammenligningen

Når du har gemt det som en fil, så husk at den lige skal gøres
eksekverbar med : chmod +x <filnavn>

--
Bjarne D Mathiesen
København N ; Danmark ; Europa
----------------------------------------------------------------------
denne besked er skrevet i et totalt M$/Intel-frit miljø
MacOS X 10.4.2 Tiger ; Seamonkey 1.1a ; PowerPC G4 800MHz
http://mozilla.mathiesen.info/
http://webadmin.mathiesen.info/

René Frej Nielsen (21-10-2005)
Kommentar
Fra : René Frej Nielsen


Dato : 21-10-05 16:03

Bjarne D Mathiesen <macintosh@mathiesen.info> wrote:

> ===== script start =====
> #!/bin/bash
>
> for i in /Users/*
> do
> if [ -d "${i}" -a "${i##*/}" != "Shared" ];
> then
> chown -R $(stat -f '%Su:%Sg' "${i}") "${i}"
> fi
> done
> ===== script slut =====
>
> Jeg kan bedre lide at bruge $() samt eksplicit begrænsning af navne
> Og der skal så lige skæres stien af ${i} i sammenligningen
>
> Når du har gemt det som en fil, så husk at den lige skal gøres
> eksekverbar med : chmod +x <filnavn>

Jeg er meget taknemmelig. Jeg har selvfølgelig haft for travlt til at
rode med det i dag, så det bliver en af de nærmeste dage. Fedt at det
kunne lade sig gøre så hurtigt.

--
Mvh.
René Frej Nielsen

René Frej Nielsen (20-10-2005)
Kommentar
Fra : René Frej Nielsen


Dato : 20-10-05 23:17

Thorbjoern Ravn Andersen <nospam0000@gmail.com> wrote:

>> Og der er ikke noget 'normalt' i *nix - hvad der virker virker.
>> Men du er da særdeles velkommen til at komme med et script der arbejder
>> med ' ' i navnene hele vejen igennem
>>
>> Kom med et alternativ, der virker, eller hold kæft
>
> bash-2.05b$ cd mac
> bash-2.05b$ ls -l
> total 28
> drwxr-xr-x 2 ravn ravn 512 Oct 20 22:14 1 Shared 2
> drwxr-xr-x 2 ravn ravn 512 Oct 20 22:14 Bruger 1
> drwxr-xr-x 2 ravn ravn 512 Oct 20 22:14 Bruger 2
> drwxr-xr-x 2 ravn ravn 512 Oct 20 22:14 IngenBruger
> drwxr-xr-x 2 ravn ravn 512 Oct 20 22:14 Roger Shared Waters
> drwxr-xr-x 2 ravn ravn 512 Oct 20 22:14 Shared
> -rw-r--r-- 1 ravn ravn 134 Oct 20 22:30 x.sh
> bash-2.05b$ sh x.sh
> chown -R ravn:ravn '1 Shared 2'
> chown -R ravn:ravn 'Bruger 1'
> chown -R ravn:ravn 'Bruger 2'
> chown -R ravn:ravn 'IngenBruger'
> chown -R ravn:ravn 'Roger Shared Waters'
> bash-2.05b$ cat x.sh
> #!/bin/sh
>
> for i in *
> do
> if [ -d "$i" -a "x$i" != "xShared" ];
> then
> echo "chown -R `stat -f '%Su:%Sg' "$i" ` '$i'"
> fi
> done
> bash-2.05b$
>
> NB: Lavet under FreeBSD da jeg - suk - stadig ikke har en Mac. stat
> skulle dog være standard.

Hele to versioner at vælge imellem. Takker... nu må I endelig ikke
komme op og skændes om det :-/

--
Mvh.
René Frej Nielsen

Bjarne D Mathiesen (20-10-2005)
Kommentar
Fra : Bjarne D Mathiesen


Dato : 20-10-05 16:18

Thorbjoern Ravn Andersen wrote:
> Bjarne D Mathiesen <macintosh@mathiesen.info> writes:
>
>> | sed "/Shared/d"
>
> /^Shared$/d er nok det sikreste. NB: Har ikke dobbeltchecket syntaksen.
>

kiggede lidt mere på det
jeg begik nogen fejl i skyndingen hvilket medførte en del overflødigt
desuden kunne scriptet ikke håndtere ' ' i filnavne konstruktivt
' ' i filnavne er et helvedes problem da de også er skilletegn
og så håber vi lige at der ikke er nogen '@' i filnavnene !

===== script start =====
#!/bin/bash

cd /Users

hjemmeDirs=( $(ls | sed -e "/^Shared$/d" -e "s/ /@/g") )

for hjemDir in ${hjemmeDirs}
do
hjemDir=$( echo "${hjemDir}" | sed -E "s/@/ /g" )
ejere=( $(ls -l -d "${hjemDir}" | tr -s ' ' | cut -f 3,4 -d ' ') )
chown -R ${ejere[0]}:${ejere[1]} "${hjemDir}"
done

===== script slut =====


Men din modifikation virker !IKKE! da den oprindelige version benytter
'ls -l' hvilket giver linjer af denne type:
[14:05:37@~]$ cd /Users/
[14:21:01@Users]$ ls -l
total 0
drwxrwxrwt 4 root wheel 136 Oct 13 18:32 Shared
drwxr-xr-x 24 bjarne bjarne 816 Jul 22 20:27 bjarne
[14:21:04@Users]$


--
Bjarne D Mathiesen
København N ; Danmark ; Europa
----------------------------------------------------------------------
denne besked er skrevet i et totalt M$/Intel-frit miljø
MacOS X 10.4.2 Tiger ; Mozilla 1.8b1 ; PowerPC G4 800MHz
http://mozilla.mathiesen.info/
http://webadmin.mathiesen.info/

René Frej Nielsen (20-10-2005)
Kommentar
Fra : René Frej Nielsen


Dato : 20-10-05 23:12

Bjarne D Mathiesen <macintosh@mathiesen.info> wrote:

> Så får du en sidste version
>
> ===== script start =====
> #!/bin/bash
>
> cd /Users
>
> hjemmeDirs=( $( ls -l \
> | sed "/Shared/d"
> | tr -s ' ' \
> | cut -f 3,4 -d ' '\
> ) )
>
> for hjemDir in ${hjemmeDirs}
> do
> chmod -R ${ejere[0]}:${ejere[1]} ${hjemDir}
> done
>
> ===== script slut =====
>
> Nu burde du kunne stykke tingene sammen selv hvis du skal bruge en anden
> versions. De her eksempler dækker vist de fleste muligheder for hvordan
> man gør. Denne version er f.eks stykket sammen af bidder fra de første
> to versioner - med den simple modifikation at 'Shared' fjernes

Jeg er dig meget taknemmelig og jeg vil teste det i morgen. Er der en
"nem" måde at lære shell-scripts på, altså en ikke så omfattende
tutorial. Jeg har nok ikke brug for en hel bibel, men måske mere et
sted hvor man kan hente eksempler og gå igennem lidt tutorials.

Endnu engang tak. Jeg tænkte nok, at nogen kunne hjælpe

--
Mvh.
René Frej Nielsen

Thorbjoern Ravn Ande~ (21-10-2005)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 21-10-05 00:16

spam@rfn.dk (René Frej Nielsen) writes:

> Jeg er dig meget taknemmelig og jeg vil teste det i morgen. Er der en
> "nem" måde at lære shell-scripts på, altså en ikke så omfattende
> tutorial. Jeg har nok ikke brug for en hel bibel, men måske mere et
> sted hvor man kan hente eksempler og gå igennem lidt tutorials.

Jeg fandt den her som er et sted at starte:

http://www.linuxbog.dk/unix/bog/shell-script.html

Der er også henvisninger videre.

> Endnu engang tak. Jeg tænkte nok, at nogen kunne hjælpe

dk.edb.system.unix har en del hajer til det her.

--
Thorbjørn Ravn Andersen "... plus ... Tubular Bells!"
http://bigfoot.com/~thunderbear

Thomas Tvegaard (20-10-2005)
Kommentar
Fra : Thomas Tvegaard


Dato : 20-10-05 19:28

René Frej Nielsen <spam@rfn.dk> wrote:

> Jeg vil lige uddybe dette. Faktisk skal den bare gøre følgende:
>
> cd /Users
>
> "Liste alle mapper og huske deres USER:GROUP"
>
> sudo chown -R USER:GROUP # for alle mapper UNDTAGEN "Shared"
>
> Det skal så gentages for hver brugermappe, indtil der ikke er flere.
> Det er vel det man kalder en løkke?
>
> Det er vel ikke så svært

Ærgerligt at det ikke ser ud til at kunne køres som login script via et
loginhook. Der kan giver login window ellers brugernavnet som første
parameter, der så kan fanges vha $1 i et login script.

Jeg kører et system hvor brugere med bærbare har en mobile account med
kontoen placeret i Active Directory. Ved første log ind oprettes kontoen
og en række indstillinger kopieres ind fra et template og ejer sættes
efterfølgende til brugeren. Scriptet tjekker at det ikke er admin, der
logger ind. Tilslut sletter scriptet sig selv, da der kun skal være
denne ene brugerkonto på maskinen (udover admin). Alt dette bøvl fordi
AD-baserede mobile accounts ikke trækker på /System/Library/User
Tempate/... i 10.4.2. Håber Apple får rettet det med 10.4.3.

Måske kan din installer køres fra et login script og ejerskab sættes
efterfølgende for den nye bruger? Hvis der skal være flere brugere på
samme maskine, skal det sikres at scriptet ikke afvikles igen for den
samme bruger.

Er gruppen den samme for alle brugere? Hvis det er tilfældet kan man jo
egl. godt hardcode den i scriptet selv om det ikke er så elegant.

Nå, det var et par strøtanker - jeg kan ikke lige finde på noget
epokegørende.

--
Venlig hilsen
Thomas Tvegaard
iChat/AOL: ttvegaard

René Frej Nielsen (20-10-2005)
Kommentar
Fra : René Frej Nielsen


Dato : 20-10-05 23:26

Thomas Tvegaard <tvegaard@*ud*gmail.com> wrote:

>> Jeg vil lige uddybe dette. Faktisk skal den bare gøre følgende:
>>
>> cd /Users
>>
>> "Liste alle mapper og huske deres USER:GROUP"
>>
>> sudo chown -R USER:GROUP # for alle mapper UNDTAGEN "Shared"
>>
>> Det skal så gentages for hver brugermappe, indtil der ikke er flere.
>> Det er vel det man kalder en løkke?
>>
>> Det er vel ikke så svært
>
> Ærgerligt at det ikke ser ud til at kunne køres som login script via et
> loginhook. Der kan giver login window ellers brugernavnet som første
> parameter, der så kan fanges vha $1 i et login script.

Det kunne i princippet godt køres som login-script... ændringen skal
foretages hver gang jeg sender nye filer over på maskinerne. Det
kræver så bare at brugeren logger ud og ind igen, for at filerne får
de rigtige rettigheder. Det kan jeg gøre via ARD.

> Jeg kører et system hvor brugere med bærbare har en mobile account med
> kontoen placeret i Active Directory. Ved første log ind oprettes kontoen
> og en række indstillinger kopieres ind fra et template og ejer sættes
> efterfølgende til brugeren. Scriptet tjekker at det ikke er admin, der
> logger ind. Tilslut sletter scriptet sig selv, da der kun skal være
> denne ene brugerkonto på maskinen (udover admin). Alt dette bøvl fordi
> AD-baserede mobile accounts ikke trækker på /System/Library/User
> Tempate/... i 10.4.2. Håber Apple får rettet det med 10.4.3.

Jeg bruger også mobile accounts, men heldigvis fra en OS X Server,
hvor der bruges systemets user templates. Jeg gider dog ikke lægge
indstilingerne der (det gjorde jeg sidste gang, hvor jeg satte
maskiner op), da filerne på et tidspunkt bliver opdaterede og så er
det pludseligt forældede filer der ligger i templaten.

Hvis Apple skal rette alle bugs i 10.4.3 får de meget travlt. Især når
det gælder server-versionen!

> Måske kan din installer køres fra et login script og ejerskab sættes
> efterfølgende for den nye bruger? Hvis der skal være flere brugere på
> samme maskine, skal det sikres at scriptet ikke afvikles igen for den
> samme bruger.

Som udgangspunkt er der kun én bruger pr. maskine, udover en
admin-bruger som ligger i NetInfo. Det kan dog ikke udelukkes at nogen
skulle have lyst til at bruge en anden maskine en gang imellem, men
det er dog tvivlsomt at de så logger ud/ind med deres eget login.

> Er gruppen den samme for alle brugere? Hvis det er tilfældet kan man jo
> egl. godt hardcode den i scriptet selv om det ikke er så elegant.

Den er ikke den samme, desværre.

--
Mvh.
René Frej Nielsen

Thomas Bjorn Anderse~ (19-10-2005)
Kommentar
Fra : Thomas Bjorn Anderse~


Dato : 19-10-05 15:52

spam@rfn.dk (René Frej Nielsen) writes:

> Scriptet skal på en eller anden måde "aflæse" brugeren navn og gruppe
> og så køre chmod på den rigtige mappe.
>
> Det skal bruges til en installation over Apple Remote Desktop, hvor
> jeg har en pakke med filer, som skal installeres. Når filerne er
> installeret skal rettighederne fikses med scriptet og så vil jeg gerne
> undgå at skulle logge ind på hver maskine og køre kommandoen manuelt.

Hvilken uid kører scriptet da med?

--
Thomas Bjorn Andersen
+++ATH

René Frej Nielsen (20-10-2005)
Kommentar
Fra : René Frej Nielsen


Dato : 20-10-05 07:36

Thomas Bjorn Andersen <tbamacnewsNOSPAM200508@gen-v.net> wrote:
> spam@rfn.dk (René Frej Nielsen) writes:
>
>> Scriptet skal på en eller anden måde "aflæse" brugeren navn og gruppe
>> og så køre chmod på den rigtige mappe.
>>
>> Det skal bruges til en installation over Apple Remote Desktop, hvor
>> jeg har en pakke med filer, som skal installeres. Når filerne er
>> installeret skal rettighederne fikses med scriptet og så vil jeg gerne
>> undgå at skulle logge ind på hver maskine og køre kommandoen manuelt.
>
> Hvilken uid kører scriptet da med?

Jeg vil tro at det er root's UID, da pakken bliver nødt til at
godkende sig som root for at kunne ændre rettighederne på filen.


--
Mvh.
René Frej Nielsen

Søg
Reklame
Statistik
Spørgsmål : 177512
Tips : 31968
Nyheder : 719565
Indlæg : 6408599
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste