[java] 리눅스 또는 유닉스에서 사용자의 홈 디렉토리를 찾는 방법은?



Answers

일반적으로 다음 문을 사용합니다.

String userHome = System.getProperty( "user.home" );

모든 플랫폼에서 사용자의 홈 디렉토리를 가져옵니다. getProperty 에 대한 메소드 문서에서 다른 것을 얻을 수 있는지 알아보십시오.

this 해결 방법을 사용하여 피해야 할 액세스 문제가있을 수 있습니다 (보안 정책 파일 사용).

Question

Grails에서 임의의 사용자의 홈 디렉토리를 찾으려면 어떻게해야합니까? 리눅스에서는 종종 / home / user입니다. 그러나 일부 OS (예 : OpenSolaris)에서 경로는 / export / home / user입니다.




getpwuid/getpwnam(3) 함수에 대한 Java 래퍼를 getpwuid/getpwnam(3) 시스템에 uid 또는 로그인 이름으로 사용자 정보를 요청하고 기본 홈 디렉토리를 비롯한 모든 정보를 반환합니다.




특정 사용자의 홈 디렉토리를 찾으려면 직접 할 수 있다고 생각하지 않습니다.

이전에 Java에서이 작업을 수행해야 할 때 UNIX getpwXXX() 패밀리를 래핑 한 JNI 원시 코드를 작성해야했습니다.




/ etc / passwd를 파싱 할 수 있습니까?

예 :

 cat /etc/passwd | awk -F: '{printf "User %s Home %s\n",  $1, $6}'



나는 당신이 다른 사용자의 홈 디렉토리를 찾고자한다고 가정한다. 분명히 "user.home"속성을 얻는 것이 현재 사용자 홈 디렉토리를 얻는 가장 쉬운 방법입니다.

임의의 사용자 홈 디렉토리를 얻으려면 명령 행에서 약간의 기교가 필요합니다.

String[] command = {"/bin/sh", "-c", "echo ~root"}; //substitute desired username
Process outsideProcess = rt.exec(command);
outsideProcess.waitFor();
String tempResult;
StringBuilder sb = new StringBuilder();
while((tempResult = br.readLine()) != null) sb.append(tempResult);
br.close();
return sb.toString().trim();

이제 기술적으로 버퍼를 채우지 않고 프로세스를 잠그지 않도록 stdout과 stderr에서 스레드를 기다려야합니다.하지만 버퍼가 적어도 하나의 사용자 이름을 보유 할 수 있기를 바랍니다. 또한 결과가 ~ root (또는 사용한 사용자 이름)로 시작하는지 확인하여 사용자가 존재하고 올바르게 평가되었는지 확인하는 것이 좋습니다.

희망이 도움이됩니다. 이 답변에 동의하십시오. 그렇다면 투표에 참여하는 것이 처음이므로 점수를 사용할 수 있습니다.




자바에서 이것을 사용해보십시오 :

System.out.println("OS: " + System.getProperty("os.name") + ", USER DIRECTORY: " + System.getProperty("user.home"));



Related