Linux get user home dir

How to Find a User’s Home Directory on Linux or Unix

How to find a user’s home directory on linux or unix?

For UNIX-Like systems you might want to execute » echo ~username » using the shell (so use Runtime.exec() to run ).

How to get $HOME directory when switching to a different user in bash?

Update: Based on this question’s title, people seem to come here just looking for a way to find a different user’s home directory, without the need to impersonate that user.

In that case, the simplest solution is to use tilde expansion with the username of interest, combined with eval (which is needed, because the username must be given as an unquoted literal in order for tilde expansion to work):

eval echo "~$different_user" # prints $different_user's home dir.

Note: The usual caveats regarding the use of eval apply; in this case, the assumption is that you control the value of $different_user and know it to be a mere username.

By contrast, the remainder of this answer deals with impersonating a user and performing operations in that user’s home directory.

  • Administrators by default and other users if authorized via the sudoers file can impersonate other users via sudo .
  • The following is based on the default configuration of sudo — changing its configuration can make it behave differently — see man sudoers .

The basic form of executing a command as another user is:

sudo -H -u someUser someExe [arg1 . ] 
# Example:
sudo -H -u root env # print the root user's environment
  • If you neglect to specify -H , the impersonating process (the process invoked in the context of the specified user) will report the original user’s home directory in $HOME .
  • The impersonating process will have the same working directory as the invoking process.
  • The impersonating process performs no shell expansions on string literals passed as arguments, since no shell is involved in the impersonating process (unless someExe happens to be a shell) — expansions by the invoking shell — prior to passing to the impersonating process — can obviously still occur.

Optionally, you can have an impersonating process run as or via a(n impersonating) shell, by prefixing someExe either with -i or -s — not specifying someExe . creates an interactive shell:

  • -i creates a login shell for someUser , which implies the following:
    • someUser ‘s user-specific shell profile, if defined, is loaded.
    • $HOME points to someUser ‘s home directory, so there’s no need for -H (though you may still specify it)
    • The working directory for the impersonating shell is the someUser ‘s home directory.
    • no shell profile is loaded (though initialization files for interactive nonlogin shells are; e.g., ~/.bashrc )
    • Unless you also specify -H , the impersonating process will report the original user’s home directory in $HOME .
    • The impersonating shell will have the same working directory as the invoking process.

    Using a shell means that string arguments passed on the command line MAY be subject to shell expansionssee platform-specific differences below — by the impersonating shell (possibly after initial expansion by the invoking shell); compare the following two commands (which use single quotes to prevent premature expansion by the invoking shell):

     # Run root's shell profile, change to root's home dir.
    sudo -u root -i eval 'echo $SHELL - $USER - $HOME - $PWD'
    # Don't run root's shell profile, use current working dir.
    # Note the required -H to define $HOME as root`s home dir.
    sudo -u root -H -s eval 'echo $SHELL - $USER - $HOME - $PWD'

    What shell is invoked is determined by «the SHELL environment variable if it is set or the shell as specified in passwd(5)» (according to man sudo ). Note that with -s it is the invoking user’s environment that matters, whereas with -i it is the impersonated user’s.

    Note that there are platform differences regarding shell-related behavior (with -i or -s ):

    • sudo on Linux apparently only accepts an executable or builtin name as the first argument following -s / -i , whereas OSX allows passing an entire shell command line; e.g., OSX accepts sudo -u root -s ‘echo $SHELL — $USER — $HOME — $PWD’ directly (no need for eval ), whereas Linux doesn’t (as of sudo 1.8.95p ).
    • Older versions of sudo on Linux do NOT apply shell expansions to arguments passed to a shell; for instance, with sudo 1.8.3p1 (e.g., Ubuntu 12.04), sudo -u root -H -s echo ‘$HOME’ simply echoes the string literal «$HOME» instead of expanding the variable reference in the context of the root user. As of at least sudo 1.8.9p5 (e.g., Ubuntu 14.04) this has been fixed. Therefore, to ensure expansion on Linux even with older sudo versions, pass the the entire command as a single argument to eval ; e.g.: sudo -u root -H -s eval ‘echo $HOME’ . (Although not necessary on OSX, this will work there, too.)
    • The root user’s $SHELL variable contains /bin/sh on OSX 10.9, whereas it is /bin/bash on Ubuntu 12.04.

    Whether the impersonating process involves a shell or not, its environment will have the following variables set, reflecting the invoking user and command: SUDO_COMMAND , SUDO_USER , SUDO_UID= , SUDO_GID .

    See man sudo and man sudoers for many more subtleties.

    Tip of the hat to @DavidW and @Andrew for inspiration.

    How to get $HOME directory of user in bash script root mode?

    sudo runs the script as the root-user
    To get the name of the user who initiated sudo you can call echo $SUDO_USER

    To get its home directory:

    getent passwd $SUDO_USER | cut -d: -f6

    How to find user’s home directory on Windows and Linux in PHP

    After not working on this for a long time, I finally decided to definitely answer this question.

    There are some usefull environment variables defined on Windows: USERPROFILE , APPDATA , LOCALAPPDATA . They are easily accessible via getenv() function:

    USERPROFILE exists on any Windows, according to https://docs.microsoft.com/fr-fr/windows/desktop/shell/knownfolderid

    So, on Windows, it seems to be reliable.

    If you need to store data for the current user, APPDATA and LOCALAPPDATA are good variables to find that place.

    I’ve written a package to make these tools reusable: https://github.com/Arcesilas/Platform

    It’s still work in progress and certainly needs to be improved. Any help is welcome to make this tool reliable on any platform.

    Thanks to eryksun whose comments helped a lot in solving this question.

    Get home directory in Linux

    You need getuid to get the user id of the current user and then getpwuid to get the password entry (which includes the home directory) of that user:

    #include 
    #include
    #include

    struct passwd *pw = getpwuid(getuid());

    const char *homedir = pw->pw_dir;

    Note: if you need this in a threaded application, you’ll want to use getpwuid_r instead.

    How do I find the path to the home directory for Linux?

    The definition of home_dir provided by the standard library is incorrect because it relies on the $HOME environment variable which has basically no meaning in Windows. This causes surprising situations where a Rust program will behave differently depending on whether it is run under a Unix emulation environment. Neither Cargo nor rustup use the standard libraries definition — instead they use the definition here.

    There is discussion about bringing home_dir back into the standard library, but for now the home crate is probably your best option. It provides canonical definitions of home_dir , cargo_home , and rustup_home :

    match home::home_dir() Some(path) => println!("<>", path.display()), 
    None => println!("Impossible to get your home dir!"),
    >

    What is the best way to find the user’s home directory in Java?

    The bug you reference (bug 4787391) has been fixed in Java 8. Even if you are using an older version of Java, the System.getProperty(«user.home») approach is probably still the best. The user.home approach seems to work in a very large number of cases. A 100% bulletproof solution on Windows is hard, because Windows has a shifting concept of what the home directory means.

    If user.home isn’t good enough for you I would suggest choosing a definition of home directory for windows and using it, getting the appropriate environment variable with System.getenv(String) .

    How to find the real user home directory using python?

    I think os.path.expanduser(path) could be helpful.

    On Unix and Windows, return the argument with an initial component of ~ or ~user replaced by that user‘s home directory.

    On Unix, an initial ~ is replaced by the environment variable HOME if it is set; otherwise the current user’s home directory is looked up in the password directory through the built-in module pwd . An initial ~user is looked up directly in the password directory.

    On Windows, HOME and USERPROFILE will be used if set, otherwise a combination of HOMEPATH and HOMEDRIVE will be used. An initial ~user is handled by stripping the last directory component from the created user path derived above.

    If the expansion fails or if the path does not begin with a tilde, the path is returned unchanged.

    Источник

    How to Find User’s Home Directory in Linux or Unix

    Under a Linux operating system distribution environment, a created/existing system user is associated with a Home directory. The configuration of the Home directory ensures that the files belonging to the currently active Linux user are only accessible to that user unless this user switches to another user account where they will access the Home directory of that switched user.

    The files under a Linux Home user directory are specific to the currently active users. The base directory of the Linux operating system is the root (/) directory.

    It is from the root (/) directory that we should be able to access the Home (/home) directory.

    If you only have a single active user on your Linux operating system environment, dealing with the Home directory is straightforward. The latter statement implies that every created/existing Linux user will have their system username as a directory name under this Linux Home directory.

    For instance, listing the directories in the above Home directory lists three other directories to imply that the Linux operating system in question hosts 3 three users.

    View Linux Home Directory

    If we decide to navigate into either of the above Linux user folders, we should first be able to meet the following prerequisite.

    It is only by being a sudoer/root user that we can be able to navigate into other Linux users’ Home directories without bumping into permission/access barriers.

    View User Home Directory

    From the above display, we have managed to navigate to the Home directory and list the files, folders, and directories associated with user dnyce whose user directory exists within the Home (/home) directory.

    The above screen capture also reveals to us the different file permissions associated with the listed files, folders, and directories. The file permissions starting with – e.g – rw-rw-r— , imply that we are dealing with a file and the file permissions starting with d e.g drwxr-xr-x , imply that we are dealing with a folder or directory.

    Ways to Find User’s Home Directory in Linux

    Before we look at some viable approaches to finding a user’s home directory in Linux, it is important to understand why the Home directory exists. This directory helps differentiate system-wide data from user data such that we do not have to deal with redundancy. Also, important file backup operation becomes flawless.

    You first need to be sure that the Linux user exists. This approach is a summary of the above-discussed content.

    The tilde (~) symbol indicates that we are at the home directory of the currently active user.

    Find User Home Directory

    The Linux user’s home directory contains directories like Documents, Downloads, Music, Pictures, and Public.

    Find User’s Home Directory Using Cd Command

    Executing the cd (change directory) command alone should take you to the home directory of the current Linux user.

    Find User Home Directory

    Another approach is to use cd + tilde (~) should navigate us to the Home directory of the currently logged-in user.

    Switch to User Home Directory

    You can also use $HOME command, which takes you to the Home directory as a variable.

    Not only do we understand the concept of the Linux user’s home directory, but we can navigate to it from any directory path.

    Источник

    Читайте также:  Linux скрипт удалить файлы
Оцените статью
Adblock
detector