AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 752455
Accepted
Daniel F
Daniel F
Asked: 2023-07-26 18:25:51 +0800 CST2023-07-26 18:25:51 +0800 CST 2023-07-26 18:25:51 +0800 CST

O que é `~sys`? Ele lista o conteúdo de `/dev`

  • 772

Em bash, quando digito cd ~sysem qualquer lugar, acabo em /dev. Nele zshfica como ~sysno prompt mas contém/dev

Eu verifiquei Kubuntu 22.04, Ubuntu 20.04, Raspbian 9.13.

Googling não produz nenhum resultado.

debian
  • 4 4 respostas
  • 1308 Views

4 respostas

  • Voted
  1. Best Answer
    roaima
    2023-07-26T18:29:30+08:002023-07-26T18:29:30+08:00

    Ao entrar, cd ~sysvocê está mudando para o diretório pessoal do usuário sys. Assim como cd ~roaimamudaria para o diretório inicial do usuário roaima. 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/passwdou mais genericamente getent passwd sys), você pode ver que o diretório inicial sysé /dev:

    sys:x:3:3:sys:/dev:/usr/sbin/nologin
    

    que mostra por que cd ~sysvocê muda para o diretório /dev.

    Sua pergunta original mencionou apenas entrar ~syssem um verbo. Nesse caso, o shell traduziu ~syspara seu diretório inicial /deve tentou executá-lo como um programa. Obviamente, o diretório não pode ser um programa, então a tentativa falhou:

    ~sys
    -bash: /dev: Is a directory
    
    /dev
    -bash: /dev: Is a directory
    

    Se você estiver executando um shell como esse, bashpoderá 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ícito cd):

    shopt -s autocd
    ~sys               # → "cd -- /dev"
    pwd                # → "/dev"
    
    ~                  # → "cd -- /home/roaima"
    pwd                # → "/home/roaima"
    

    Consulte Há alguma advertência ao usar shopt -s autocd? para uma discussão mais aprofundada.

    • 19
  2. Gilles 'SO- stop being evil'
    2023-07-27T05:34:52+08:002023-07-27T05:34:52+08:00

    ~fooexpande-se para o diretório inicial do usuário foo. 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 chamado sys, 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 /devo shell e muitos outros programas, assim como ~danielexpande 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 ~foosintaxe, 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 -de unhash -d.

    darkstar% PS1='%~%% '
    ~% cd /dev
    /dev% hash -d              # No known directory abbreviations so far
    /dev% echo ~sys            # Let's use ~sys
    ~sys% hash -d              # Now ~sys=/dev, seen in the hash table and the prompt
    sys=/dev
    ~sys% unhash -d sys        # Forget the abbreviation
    /dev%                      # Now the prompt is no longer "abbreviated"
    

    Irritantemente, o zsh considera ~foouma abreviação válida do diretório inicial foose 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:

    function chpwd_prompt {
        # If a user foo has the home directory /bar and length("foo") <
        # length("bar") then zsh shows `/bar' as `~foo'. If length("foo")
        # = length("bar") then zsh still favors `~foo', but I want `/bar'.
      if [[ ${(%):-%~} == \~* && ${#${(%):-%~}} -eq $#PWD ]]; then
        unhash -d -- ${${${(%):-%~}%%/*}#\~}
      fi
    }
    chpwd_functions+=(chpwd_prompt)
    

    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).

    • 7
  3. Guss
    2023-07-26T18:28:37+08:002023-07-26T18:28:37+08:00

    O termo ~sysrefere-se ao diretório pessoal do usuário sys. Como pode ser visto executando getent 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.

    • 6
  4. hwertz
    2023-07-28T08:01:03+08:002023-07-28T08:01:03+08:00

    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.)

    • 0

relate perguntas

  • Configuração do GRUB para reconhecer diferentes ambientes de desktop (instalações) da mesma distribuição Linux

  • astyle não altera a formatação do arquivo de origem

  • Recebendo e-mail em um novo Debian fresco

  • Debian Stretch: gnome-software segfault em libgs_plugin_systemd-updates.so

  • Como digitar ü no Pinyin IME?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve