如何在linux或unix上找到用户的主目录?

45 java unix linux grails

如何在Grails中找到任意用户的主目录?在Linux上它通常是/ home/user.但是,在某些操作系统上,例如OpenSolaris,路径为/ export/home/user.

Dan*_*ler 69

通常你使用该语句

String userHome = System.getProperty( "user.home" );
Run Code Online (Sandbox Code Playgroud)

在任何平台上获取用户的主目录.请参阅getProperty的方法文档,了解您还可以获得的其他内容.

使用解决方法可能存在您可能希望避免的访问问题(使用安全策略文件)

  • OP要求任意用户的家.但是`user.home`是当前用户之一.如果您从当前用户主页转到父主目录,然后转到具有指定用户名的目录,此方法是否始终有效? (3认同)

Joa*_*uer 45

对于类UNIX系统,您可能希望echo ~username使用shell 执行" "(因此用于Runtime.exec()运行{"/bin/sh", "-c", "echo ~username"}).

  • 这里要非常精确 - 在POSIX下保证`/ bin/sh`是一个符合Bourne的shell,但是tilde扩展(`~`和`~user`)不是这种shell的必需功能之一.Linux发行版使用BASH作为`/ bin/sh`,代码扩展可以使用.如果你在其他UNIX操作系统下使用`/ bin/sh`运行`echo~`,你可以只返回代字号(例如``〜"`)而不是主目录路径. (13认同)

小智 7

在Java上试试这个:

System.out.println("OS: " + System.getProperty("os.name") + ", USER DIRECTORY: " + System.getProperty("user.home"));
Run Code Online (Sandbox Code Playgroud)


小智 5

对于任意用户,作为网络服务器:

private String getUserHome(String userName) throws IOException{
    return new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec(new String[]{"sh", "-c", "echo ~" + userName}).getInputStream())).readLine();
}
Run Code Online (Sandbox Code Playgroud)