Em bash
, quando digito cd ~sys
em qualquer lugar, acabo em /dev
. Nele zsh
fica como ~sys
no prompt mas contém/dev
Eu verifiquei Kubuntu 22.04, Ubuntu 20.04, Raspbian 9.13.
Googling não produz nenhum resultado.
Em bash
, quando digito cd ~sys
em qualquer lugar, acabo em /dev
. Nele zsh
fica como ~sys
no prompt mas contém/dev
Eu verifiquei Kubuntu 22.04, Ubuntu 20.04, Raspbian 9.13.
Googling não produz nenhum resultado.
Ao entrar,
cd ~sys
você está mudando para o diretório pessoal do usuáriosys
. Assim comocd ~roaima
mudaria para o diretório inicial do usuárioroaima
. Um atalho para seu próprio diretório pessoal é simplesmente~
, então você já deve saber como usá-lo para isso.No arquivo de senha (
grep '^sys:' /etc/passwd
ou mais genericamentegetent passwd sys
), você pode ver que o diretório inicialsys
é/dev
:que mostra por que
cd ~sys
você muda para o diretório/dev
.Sua pergunta original mencionou apenas entrar
~sys
sem um verbo. Nesse caso, o shell traduziu~sys
para seu diretório inicial/dev
e tentou executá-lo como um programa. Obviamente, o diretório não pode ser um programa, então a tentativa falhou:Se você estiver executando um shell como esse,
bash
poderá substituir esse comportamento e fazer com que o shell trate a tentativa de execução de um diretório como uma indicação para mudar para esse diretório (ou seja, implícitocd
):Consulte Há alguma advertência ao usar shopt -s autocd? para uma discussão mais aprofundada.
~foo
expande-se para o diretório inicial do usuáriofoo
. Este é um recurso de quase todos os shells modernos, incluindo bash, zsh, mais geralmente todos os shells compatíveis com POSIX, BusyBox ash, (t)csh (onde se originou) e fish.Os sistemas Unix têm várias contas de sistema, algumas por boas razões, outras em grande parte históricas. Essas contas do sistema têm um diretório inicial, embora nunca façam login: isso é em grande parte histórico (e não tenho certeza se deixar o campo em branco é suportado adequadamente, então eles precisam ter algo lá de qualquer maneira, embora possa ser algo como
/nonexistent
) . Os sistemas Debian têm um usuário do sistema chamadosys
, que eu acho que não é usado há anos (décadas?), Mas ainda está presente para compatibilidade com versões anteriores. O diretório inicial desse usuário é/dev
. Portanto~sys
, expande para/dev
o shell e muitos outros programas, assim como~daniel
expande para/home/daniel
(ou qualquer que seja seu nome de usuário e diretório inicial).No zsh, se (como a maioria das pessoas) você incluir a
%~
sequência de escape do prompt em seu prompt, seu prompt incluirá o diretório atual (possivelmente abreviado). Se o diretório atual estiver em seu diretório inicial, essa parte será abreviada para~
. Zsh leva isso adiante e também abrevia outros diretórios que podem ser abreviados através da expansão til . Em particular, se você já se referiu ao diretório inicial de algum usuário com a~foo
sintaxe, o zsh lembra que esse diretório pode ser abreviado como~foo
.O Zsh chama esse recurso de diretórios nomeados estáticos . O local onde o zsh lembra os diretórios nomeados é a tabela de hash do diretório, que você pode acessar com os builtins
hash -d
eunhash -d
.Irritantemente, o zsh considera
~foo
uma abreviação válida do diretório inicialfoo
se a “abreviação” for mais curta ou tão longa quanto a string original. Eu faço esquecer diretórios nomeados que são de igual comprimento:Este código pode obviamente ser adaptado a diferentes preferências, por exemplo, para apenas abreviar diretórios em
/home
, ou apenas~
ele mesmo (embora para isso seja mais fácil começar%/
e substituir apenas seu diretório pessoal).O termo
~sys
refere-se ao diretório pessoal do usuáriosys
. Como pode ser visto executandogetent passwd sys
- seu diretório inicial está listado como/dev
.Eu olhei, mas não tenho certeza do que é essa conta de usuário - obviamente é uma conta do sistema (como pode ser visto por seu número de identificação baixo de 3) e pertence a um grupo (que também é um
sys
" system account group"), mas em uma instalação moderna do Ubuntu, ele não possui ou tem acesso a nenhum arquivo ou processo. Pode ser uma coisa herdada.De fato. Para coisas que precisam de algum acesso extra, mas não root completo, adm era geralmente para usos "administrativos" e sys para usos de "sistema". O que é bastante vago, mas na verdade é porque eles não eram estritamente padronizados.
Aparentemente, no Arch Linux nos dias atuais, o adm obtém acesso aos arquivos em /var/log que os usuários comuns não podem ler e o sys tem acesso à administração do cups (o que devo dizer que é um pouco estranho, lp é "impressora de linha" e o usuário/grupo tradicional para assuntos relacionados à impressão.)
No Debian/Ubuntu sys não é usado de forma alguma, provavelmente uucp e vários outros também não, mas eles são tradicionais e então deixados. (Sem senha, shell definido como nologin e nenhum arquivo pertencente a eles, eles são efetivamente inertes de qualquer maneira, portanto, deixá-los não causa nenhum dano, mesmo do ponto de vista teórico da segurança.)