Em primeiro lugar, sei que ~/
é o diretório inicial. O CD ~
ou ~/
leva-me ao diretório inicial.
Porém, cd ~X
me leva a um lugar especial, onde X
parece haver qualquer coisa.
No bash, se eu clicar em " cd ~
" e clicar em tab, ele mostrará um monte de ~X
opções possíveis como ~mail
e ~postgres
e ~ssh
. Indo para essas pastas e fazendo uma pwd
mostra-me que essas pastas não estão no diretório inicial; eles estão por todo o lugar.
Eles não são apelidos. Eu verifiquei. Eles não são env.
variáveis, ou então exigiriam um $
.
O que é configurar esses links e onde posso encontrar onde eles estão sendo configurados?
linux
bash
home-directory
jbu
fonte
fonte
Respostas:
É um recurso do Bash chamado " expansão de til ". É uma função do shell, não do sistema operacional. Você terá um comportamento diferente com csh, por exemplo.
Para responder à sua pergunta sobre a origem das informações: seu diretório pessoal vem da variável
$HOME
(não importa o que você armazene lá), enquanto as casas de outros usuários são recuperadas em tempo real usandogetpwent()
. Essa função geralmente é controlada pelo NSS ; portanto, por padrão, os valores são retirados/etc/passwd
, embora possa ser configurado para recuperar as informações usando qualquer fonte desejada, como NIS, LDAP ou um banco de dados SQL.A expansão do Tilde é mais do que uma pesquisa de diretório inicial. Aqui está um resumo:
dirs
e~1
,~-1
etc., são usados em conjunto compushd
epopd
.fonte
~+
? parece um tanto inútil.Esses são os diretórios pessoais dos usuários. Experimente
cd ~(your username)
, por exemplo.fonte
Eles são os diretórios pessoais dos usuários em
/etc/passwd
? Serviços como postgres, sendmail, apache, etc., criam usuários do sistema que têm diretórios pessoais exatamente como os usuários normais.fonte
Esses são os usuários. Verifique o seu
/etc/passwd
.cd ~username
leva você para o diretório inicial do usuário.fonte
Na minha máquina, devido à maneira como as coisas estão configuradas, faço:
O primeiro presta atenção ao valor da variável de ambiente
$HOME
; Eu deliberadamente defini meu$HOME
para um sistema de arquivos local em vez de um sistema de arquivos montado em NFS. O segundo lê o arquivo de senha (aproximadamente; o NIS complica um pouco as coisas) e descobre que o arquivo de senha diz que meu diretório inicial é/u/jleffler
e muda para esse diretório.O irritante é que a maioria dos softwares se comporta como descrito acima (e a especificação POSIX para o shell requer esse comportamento). Eu uso algum software (e não tenho muita escolha sobre como usá-lo) que trata as informações do arquivo de senha como o valor atual de $ HOME, o que está errado.
Aplicando isso à questão - como outros apontaram, '
cd ~x
' vai para o diretório inicial do usuário 'x', e mais geralmente, sempre que a expansão do til é feita,~x
significa o diretório inicial do usuário 'x' (e é um erro se o usuário 'x' não existir).Pode valer a pena mencionar que:
Não consigo encontrar imediatamente um uso para '
~+
', a menos que você faça algumas coisas estranhas ao mover links simbólicos no caminho que leva ao diretório atual.Você também pode fazer:
Isso significa o mesmo que
~-
.fonte
cd ~+
: você poderia usá-lo potencialmente para verificar se um diretório em que você está atualmente ainda existe - mesmo que seja uma maneira bem pouco ortodoxa de fazer isso.Expansão de Til no Bash:
http://bash-hackers.org/wiki/doku.php/syntax/expansion/tilde
fonte
Se você estiver usando
autofs
, a expansão pode realmente vir de/etc/auto.home
(ou algo semelhante para sua distribuição). Por exemplo, meu se/etc/auto.master
parece com:e se
/etc/auto.home
parece com:fonte
É possível que você esteja vendo usuários OpenDirectory / ActiveDirectory / LDAP "montados automaticamente" em seu diretório inicial.
Em * nix,
~
será resolvido para seu diretório inicial. Da mesma forma,~X
será resolvido para o 'usuário X'.Semelhante à montagem automática para diretórios, o OpenDirectory / ActiveDirectory / LDAP é usado em ambientes maiores / corporativos para a montagem automática de diretórios de usuários. Esses usuários podem ser pessoas reais ou podem ser contas de máquina criadas para fornecer vários recursos.
Se você digitar, ~Tabverá uma lista dos usuários em sua máquina.
fonte