kofucii
kofucii

Reputation: 7653

Is there a way to get user's UID on Linux machine using java?

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.

Upvotes: 21

Views: 20901

Answers (6)

Sebastian S
Sebastian S

Reputation: 4712

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")

Upvotes: 4

Erik Martino
Erik Martino

Reputation: 4215

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()

Upvotes: 13

Volker Stolz
Volker Stolz

Reputation: 7402

Another choice would be calling getuid() using JNI.

Upvotes: 2

vz0
vz0

Reputation: 32923

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

Upvotes: 1

user346034
user346034

Reputation:

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.

Upvotes: 6

Jigar Joshi
Jigar Joshi

Reputation: 240860

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

Upvotes: 13

Related Questions