Avatar billede shodo Nybegynder
17. november 2003 - 22:29 Der er 16 kommentarer og
1 løsning

En brugers home dir. under unix

Jeg er i gang med en opgave hvor vi skal bruge en vilkårlig bruges home directory under unix (Solaris 9).
dvs. jeg skal bruge en metode i stil med flg.

String getHomeDir(String username) {...

Jeg har indtil videre kun fundet
String dir = System.getProperty ("user.dir");
Men dette returner kun det home dir. på den bruger som køre programmet.

Venlig Hilsen
Lars
Avatar billede erikjacobsen Ekspert
17. november 2003 - 22:35 #1
Det du søger står i filen /etc/passwd
Avatar billede shodo Nybegynder
17. november 2003 - 22:47 #2
det har jeg tænkt på, men det system jeg sider på har ca. 15000 brugere, så det ville være lidt voldsom at skulle søge /etc/passwd igennem hver gang.
Avatar billede arne_v Ekspert
17. november 2003 - 22:51 #3
Hvis I kun skal bruge det for en enkelt bruger, så var:

java Program ~targetuser

måske det nemmeste.
Avatar billede arne_v Ekspert
17. november 2003 - 22:53 #4
(men jeg formoder at shell'en også læser passwd igennem)
Avatar billede shodo Nybegynder
17. november 2003 - 23:14 #5
Det kunne godt være jeg lige skulle uddybe problemet lidt, den del af systemet der skal bruge de forskellige home dirs. er en web server. På denne skal man skal kunne henvise til f.eks. http://vores.server.dk/~enbruger/index.html, serveren skal så ind og finde filen i /file_server1/home/~enbruger/public_html/index.html

Problemet i at søge /etc/paswd filen igennem, er at den (på vores system) indeholder 16.887 bruger, (filen fylder ca. 1,5 mb). Så det er lidt voldsomt at sætte java til at søge så stor en fil igennem flere gange pr. sek. Det havde ikke været det stor problem i C/C++, men opgaven er stillet i Java…
Så spørgsmålet går på om man kan få Java til at spørger Unix efter en bestemt brugers home dir. (lidt ligesom System.getProperty ("user.dir"); bare med en vilkårlig bruger)
Avatar billede arne_v Ekspert
17. november 2003 - 23:20 #6
Forskellen mellem Java og C/C++ bør ikke være så stor (forudsat at du
brugere en nyere JVM).

Og du kunne jo læse oplysningerne en gang og cache dem i en HashMap.
Det kræver vel et par MB memory men går ellers lynende hurtigt efter
første gang.
Avatar billede erikjacobsen Ekspert
17. november 2003 - 23:24 #7
Der gælder ikke at der er systematik i det: ~whatever er altid /home/whatever ?
Avatar billede arne_v Ekspert
17. november 2003 - 23:28 #8
Der er iøvrigt andre end dig der har haft problemet:
  http://forums.cookienest.com/mobile/thread.php?topic_id=7936
Avatar billede arne_v Ekspert
17. november 2003 - 23:28 #9
JNI var måske en mulighed
Avatar billede shodo Nybegynder
17. november 2003 - 23:35 #10
nej der er desvære ingen systematik i det, idet der på så stort unix system er flere disk server, og home dir. er også delt op efter user groups. f.eks har jeg brugernavn: s001606, home dir: /gbar/bohr/home1/s00/s001606 mens en af mine kammerater har
brugernavn: s001870, home dir: /gbar/erlang/home2/s00/s001870
Avatar billede simonvalter Praktikant
18. november 2003 - 01:39 #11
jeg kan ikke se hvad problemet er med ~whatever

hvis du echo s001606
så får du
/gbar/bohr/home1/s00/s001606

så brug Runtime.getRuntime().exec() til at hente brugerens dir med ...

eller tager jeg helt fejl ?
Avatar billede arne_v Ekspert
18. november 2003 - 07:21 #12
Det er formentligt betydeligt langsommere end at læse passwd.
Avatar billede shodo Nybegynder
18. november 2003 - 12:39 #13
jeg tror det må komme an på en prøve (hvad der er hurtigst), jeg havde håbet at
Avatar billede shodo Nybegynder
18. november 2003 - 12:40 #14
der var en ren java fuktion til det, med det lader det ikke til...
Avatar billede arne_v Ekspert
18. november 2003 - 16:50 #15
Hej - jeg faldt lige over noget !!!!

http://jakarta.apache.org/tomcat/tomcat-4.1-doc/catalina/docs/api/org/apache/catalina/startup/PasswdUserDatabase.html

Ser meget interessant ud for dig.

Prøv om du kan få den til at virke.
Avatar billede shodo Nybegynder
19. november 2003 - 02:23 #16
Det ser rimeligt ok ud, tak for hjælpen.
Jeg kan se at PasswdUserDatabase læser hele /etc/passwd filen ind i et Hashtable, som man så bagefter kan lave opslag i, samme løsning som du også forslog tidligere. Jeg tror det ender med at blive den løsning vi vælger, vi må ofre et par mb hukommelse på det. Arne hvis du vil have pointene så er det dine.
Avatar billede arne_v Ekspert
19. november 2003 - 07:44 #17
OK
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester