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 / ubuntu / Perguntas / 1252962
Accepted
WinEunuuchs2Unix
WinEunuuchs2Unix
Asked: 2020-06-23 18:27:53 +0800 CST2020-06-23 18:27:53 +0800 CST 2020-06-23 18:27:53 +0800 CST

Quais são todos os comandos de uma letra do Ubuntu?

  • 772

Eu me deparei com este comando durante a configuração ssh:

$ w

 20:01:30 up 6 days,  2:20,  3 users,  load average: 0.06, 0.11, 0.10
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
rick     tty7     :0               16Jun20  6days 16:51   2.37s /sbin/upstart --user
rick     pts/21   192.168.0.12     18:44    1:14m  0.19s  0.00s sleep 60
rick     pts/22   192.168.0.12     18:45    0.00s  0.44s  0.01s w

O que me levou a imaginar quais são todos os comandos de uma letra no Ubuntu. Não encontrei uma referência exata, mas encontrei este site:

  • Um índice AZ da linha de comando do Linux: bash + utilitários.

Aqui o wcomando é listado junto com:

  • .o comando para originar um arquivo que eu usei
  • vé um comando não instalado no Ubuntu. Diz-se que é equivalente a ls -l -b. Isso, por sua vez, é semelhante à llconfiguração do alias pelo Ubuntu, exceto que os arquivos que começam com .(incluindo o infame .e ..) não são incluídos.

Existem outros comandos de uma letra instalados no Ubuntu por padrão?

command-line
  • 1 1 respostas
  • 3700 Views

1 respostas

  • Voted
  1. Best Answer
    Eliah Kagan
    2020-06-24T00:09:21+08:002020-06-24T00:09:21+08:00

    TL;DR : Isso informa sobre cada comando cujo nome é um único caractere, embora você queira simplificá-lo ou ajustá-lo:

    (set -f; type -a $(compgen -cX '!?' | sort -u))
    

    Listando comandos de um caractere comcompgen

    O Bash tem preenchimento de tabulação e oferece um compgenbuilt-in, que fornece informações sobre como o texto é concluído. Ao executar compgen -c, você pode listar todos os comandos em seu sistema. Portanto, uma maneira de listar todos os comandos com apenas um caractere é filtrar a saída de compgen -c:

    compgen -c | grep '^.$'
    

    Como o steeldriver apontou ,compgen aceita a opção de -Xfazer sua própria filtragem. De forma um pouco não intuitiva, o operando to -Xé um padrão cujas correspondências são removidas . Ele suporta sintaxe globbing que funciona como expansão de nome de arquivo, mas também suporta uma inicial !para negá-la, alcançando o efeito desejado aqui. (Consulte Programmable Completion Builtins para obter mais informações sobre a sintaxe.) ?corresponde a qualquer caractere único, portanto, !?corresponde a qualquer coisa que não seja um único caractere, portanto, -X '!?'remove tudo o que não é um único caractere, deixando apenas comandos de caractere único:

    compgen -cX '!?'
    

    Isso mostra os mesmos resultados, na mesma ordem, que a tubulação para grep. Você pode passar -ce -Xem um argumento como -cXou (como o steeldriver mostra ) em dois argumentos como -c -X.

    No meu sistema, recebo:

    l
    p
    {
    }
    !
    .
    :
    [
    s
    t
    [
    X
    w
    

    se tno meu sistema estão os scripts que escrevi; você provavelmente não tem comandos com esses nomes. Você provavelmente tem os outros.

    Se estes são realmente comandos ou não, depende do que se pensa como um comando. {, }e !são palavras- chave shell , como if, case, whilee for. Os outros (incluindo shell builtins) são comandos inequivocamente no sentido usual.

    O significado de resultados repetidos

    Alguns comandos, como [na saída acima, podem ser repetidos. Isso acontece quando existe mais de um comando com o mesmo nome. O Bash oferece [como um shell embutido, mas também é um executável localizado em /usr/bin. Running mostra que tipo de comando é e, se for um comando externo, onde está localizado. Quando há mais de um comando com o mesmo nome, mostra aquele que realmente será utilizado. Como Kulfy apontou , você pode ver todos eles usando .type cmdcmdtype -a cmd

    $ type -a [
    [ is a shell builtin
    [ is /usr/bin/[
    

    Há outra fonte de possível duplicação: em alguns sistemas, /bine /usr/binna verdade são o mesmo diretório (mais precisamente: /biné um link simbólico para /usr/bin) e você verá entradas em /bine /usr/bin. Por exemplo, você pode ter tanto /bin/[e /usr/bin/[como o [interno, bem como ambos /bin/we /usr/bin/we ambos /bin/Xe /usr/bin/X. Estes são comandos tecnicamente separados, mas na verdade se referem ao mesmo executável.

    Tradicionalmente, /bine /usr/bineram diretórios separados (para que os comandos /binfossem utilizáveis ​​mesmo quando /usré um volume NFS que ainda não está montado). Mas hoje em dia isso não costuma oferecer um benefício. Assim, os sistemas mais novos tendem a unificá-los. Se você estiver usando uma versão mais recente, provavelmente terá isso, a menos que tenha atualizado para ela de uma versão mais antiga que não tinha o .

    Se desejar, você pode classificar a saída compgene remover duplicatas:

    compgen -c | grep '^.$' | sort -u
    
    compgen -cX '!?' | sort -u
    

    Mostrando detalhes sobre todos os comandos

    Para mais detalhes, você pode querer saber que tipo de comando é cada um e:

    • para os comandos externos, onde estão localizados.
    • para aliases e funções de shell, como eles são definidos.

    Como mencionado acima, o built-in do Bash typelhe dirá tudo isso. Você pode escrever um comando que forneça a saída filtrada de compgenpara type.

    type $(compgen -c | grep '^.$')
    
    type $(compgen -cX '!?')
    

    Isso vai se comportar mal se você tiver um comando *ou . ?Isso é bastante improvável, mas não impossível. Para se proteger contra isso, você pode desabilitar o globbing:

    (set -f; type $(compgen -c | grep '^.$'))
    
    (set -f; type $(compgen -cX '!?'))
    

    Mas isso (com qualquer uma dessas quatro alternativas) é imperfeito, porque todos os comandos com o mesmo nome têm a mesma explicação, o que é correto apenas para o primeiro. Por exemplo, no meu sistema, recebo:

    l is aliased to `ls -CF'
    p is aliased to `printf "\e[?2004l"'
    { is a shell keyword
    } is a shell keyword
    ! is a shell keyword
    . is a shell builtin
    : is a shell builtin
    [ is a shell builtin
    s is /home/ek/bin/s
    t is /home/ek/bin/t
    [ is a shell builtin
    X is /usr/bin/X
    w is /usr/bin/w
    

    Você pode muito bem querer ver apenas informações sobre a primeira ocorrência de cada comando com o mesmo nome (por exemplo, o shell embutido [). Afinal, esses são os que realmente são executados, quando você escreve um comando cuja primeira palavra é qualquer um desses nomes de um caractere (por exemplo, [ -f /bin/nano ]executa o shell embutido [, não /usr/bin/[). Nesse caso, você pode classificar a saída compgene remover duplicatas antes de entregar os resultados para type:

    type $(compgen -c | grep '^.$' | sort -u)
    
    type $(compgen -cX '!?' | sort -u)
    

    Ou, também para proteger contra globbing:

    (set -f; type $(compgen -c | grep '^.$' | sort -u))
    
    (set -f; type $(compgen -cX '!?' | sort -u))
    

    No entanto, se você quiser informações sobre todos os comandos (por exemplo, /usr/bin/[assim como [), você pode passar -apara type. Eu recomendo que você ainda classifique e remova as duplicatas dos resultados primeiro, ou você terá muitas repetições na saída.

    type -a $(compgen -c | grep '^.$' | sort -u)
    
    type -a $(compgen -cX '!?' | sort -u)
    

    Ou, também para proteger contra globbing:

    (set -f; type -a $(compgen -c | grep '^.$' | sort -u))
    
    (set -f; type -a $(compgen -cX '!?' | sort -u))
    

    Quais comandos você tem varia entre os ambientes de shell

    Observe que os comandos de um caractere que você possui, como os comandos que você possui em geral, são uma propriedade do seu ambiente de shell. Diferentes usuários, ou diferentes shells em execução pelo mesmo usuário, podem ter diferentes comandos disponíveis. O lcomando no Ubuntu, por exemplo, é definido em /etc/skel/.bashrc, que é copiado para ~/.bashrcquando as contas de usuário são criadas da maneira usual.

    # some more ls aliases
    alias ll='ls -alF'
    alias la='ls -A'
    alias l='ls -CF'
    

    Assim, você pode alterar ou remover a definição de lem seu arquivo ~/.bashrc. Ou simplesmente execute unalias lpara afetar apenas seu shell atual.

    • 28

relate perguntas

Sidebar

Stats

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

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

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