有没有办法使用java在Linux机器上获取用户的UID?

发布于 2024-10-14 09:04:02 字数 108 浏览 1 评论 0原文

有没有办法使用java在Linux机器上获取用户的UID?我知道 System.getProperty("user.name"); 方法,但它返回用户名,而我正在寻找 UID。

Is there a way to get user's UID on Linux machine using java? I'm aware of System.getProperty("user.name"); method, but it return's user name and I'm looking for UID.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

演出会有结束 2024-10-21 09:04:02

您可以执行id命令并读取结果。

例如:

$ id -u jigar

输出:

1000

执行命令

try {
    String userName = System.getProperty("user.name");
    String command = "id -u "+userName;
    Process child = Runtime.getRuntime().exec(command);

    // Get the input stream and read from it
    InputStream in = child.getInputStream();
    int c;
    while ((c = in.read()) != -1) {
        process((char)c);
    }
    in.close();
} catch (IOException e) {
}

你可以通过source

you can execute id command and read result.

for example:

$ id -u jigar

output:

1000

you can execute command by

try {
    String userName = System.getProperty("user.name");
    String command = "id -u "+userName;
    Process child = Runtime.getRuntime().exec(command);

    // Get the input stream and read from it
    InputStream in = child.getInputStream();
    int c;
    while ((c = in.read()) != -1) {
        process((char)c);
    }
    in.close();
} catch (IOException e) {
}

source

稀香 2024-10-21 09:04:02

实际上有一个 api 可以实现这一点。无需调用 shell 命令或使用 JNI,只需

def uid = new com.sun.security.auth.module.UnixSystem().getUid()

There is actually an api for this. There is no need to call a shell command or use JNI, just

def uid = new com.sun.security.auth.module.UnixSystem().getUid()
痴情换悲伤 2024-10-21 09:04:02

如果您可以影响 Java VM 的启动方式,您可以将 uid 作为用户属性进行移交:

java -Duserid=$(id -u) CoolApp

在您的 CoolApp 中,您可以简单地通过以下方式获取 ID:

System.getProperty("userid");

问候,

Martin。

If you can influence how the Java VM is started, you could handover the uid as a user property:

java -Duserid=$(id -u) CoolApp

In your CoolApp, you could simply fetch the ID with:

System.getProperty("userid");

Regards,

Martin.

酒浓于脸红 2024-10-21 09:04:02

为了完整起见,这里提供了一个仅 Java 的解决方案,不需要 JNI、子进程或私有 API。

警告:这依赖于用户主目录,它根本不需要匹配当前正在运行的 Java 进程的所有者。在盲目依赖之前,请先确定您的目标系统环境:

Path userHome = Paths.get(System.getProperty("user.home"));
int uid = (Integer)Files.getAttribute(userHome, "unix:uid")

Just for the sake of completeness, here is a Java-only solution without any need for JNI, child processes or private API.

A word of warning: This relies on the user home directory, which is not at all required to match the owner of the currently running Java process. Be sure about your targeted system environment, before blindly relying on this:

Path userHome = Paths.get(System.getProperty("user.home"));
int uid = (Integer)Files.getAttribute(userHome, "unix:uid")
宫墨修音 2024-10-21 09:04:02

另一种选择是使用 JNI 调用 getuid()。

Another choice would be calling getuid() using JNI.

枯叶蝶 2024-10-21 09:04:02

只需打开 /etc/passwd 文件并搜索用户等于 System.getProperty("user.name") 的行。

Just open the /etc/passwd file and search for the line that has a user equal to System.getProperty("user.name").

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文