First off, I know that
~/ is the home directory. CDing to
~/ takes me to the home directory.
cd ~X takes me to a special place, where
X seems to be anything.
In bash, if I hit "
cd ~" and hit tab, it shows a bunch of possible
~X options like
~ssh. Going to those folders and doing a
pwd shows me that these folders are not in the home directory; they're all over the place.
They are not aliases. I've checked.
env. variables, or else they'd require a
What is setting these links, and where can I find where these are being set?
It's a Bash feature called "tilde expansion". It's a function of the shell, not the OS. You'll get different behavior with csh, for example.
To answer your question about where the information comes from: your home directory comes from the variable
$HOME (no matter what you store there), while other user's homes are retrieved real-time using
getpwent(). This function is usually controlled by NSS; so by default values are pulled out of
/etc/passwd, though it can be configured to retrieve the information using any source desired, such as NIS, LDAP or an SQL database.
Tilde expansion is more than home directory lookup. Here's a summary:
~ $HOME ~fred (freds home dir) ~+ $PWD (same effect as ./) ~- $OLDPWD (your previous directory) ~1 `dirs +1` ~2 `dirs +2` ~-1 `dirs -1`
~-1, etc., are used in conjunction with