Reputation: 7653
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: 20954
Reputation: 691
I have used this before:
var uidStr = Files.readString(Paths.get("/proc/self/loginuid"));
Example with jshell:
$ jshell
| Welcome to JShell -- Version 21.0.2
| For an introduction type: /help intro
jshell> Files.readString(Paths.get("/proc/self/loginuid"));
$1 ==> "226"
Upvotes: 0
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
Reputation: 4245
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
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
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
Reputation: 240948
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) {
}
Upvotes: 13