Compartilhe seus recursos e truques da linha de comando para Unix / Linux. Tente manter o shell / distro agnóstico, se possível. Interessado em ver aliases, one-liners, atalhos de teclado, pequenos scripts de shell, etc.
fonte
Compartilhe seus recursos e truques da linha de comando para Unix / Linux. Tente manter o shell / distro agnóstico, se possível. Interessado em ver aliases, one-liners, atalhos de teclado, pequenos scripts de shell, etc.
Isso se expande um pouco no !!
truque mencionado nesta resposta . Na verdade, existem vários comandos relacionados ao histórico que tendem a ser esquecidos (as pessoas tendem a esfaquear Up100 vezes, em vez de procurar um comando que sabem que digitaram).
history
comando mostrará uma lista de comandos executados recentemente com um designador de eventos à esquerda!N
substituirá o comando associado ao designador de evento N
!-N
substituirá o N
th comando mais recente; por exemplo !-1
, substituirá o comando mais recente, !-2
o segundo mais recente etc.!!
é uma abreviação de !-1
, para substituir rapidamente o último comando!string
substituirá o comando mais recente que começa com string
!?string?
substituirá o comando mais recente que contém string
Designadores de palavras podem ser adicionados a um !
comando de histórico para modificar os resultados. Dois pontos separam o evento e os designadores de palavras, por exemplo !!:0
. O designador de evento !!
pode ser abreviado para apenas !
ao usar um designador de palavras, portanto !!:0
é equivalente a !:0
.
!:0
receberá o comando que foi executado!:1
receberá o primeiro argumento (e !:2
o segundo, etc.)!:2-3
receberá o segundo e o terceiro argumentos!:^
é outra maneira de obter o primeiro argumento. !:$
receberá o último!:*
receberá todos os argumentos (mas não o comando)Os modificadores também podem ser anexados a um !
comando de histórico, cada um prefixado por dois pontos. Qualquer número pode ser empilhado (por exemplo !:t:r:p
).
h
- Alinhar com o nome do arquivo baset
- Apenas o nome do arquivo baser
- Alinhar até a extensão do nome do arquivoe
- Apenas a extensão do nome do arquivos/search/replacement
- Substitua a primeira ocorrência de search
porreplacement
gs/search/replacement
- Substitua todas as ocorrências de search
porreplacement
!-#
também. Eu uso!string
para executar o último comando que começa com a corda, mas eu geralmente guia completar-lo primeiro (zsh) para ter certeza que eu estou correndo a coisa certa!N
executará o comando ..." é uma descrição muito estreita; na verdade,!N
será substituído pelo comando ...; e assim por diante para todas as descrições na resposta. Mais correto e abrindo possibilidades muito mais úteis! Por exemplo, o mencionadosudo !!
.bash
; no Emacs, para navegar pelo histórico de comandos e valores de entrada (para Mx ou outros valores de leitura), é usado o Meta-R (o Meta-R também é usadoeshell
no Emacs). Então muitas vezes eu estrago tudo.bash - insere o parâmetro final da linha anterior
alt- . a combinação de teclas mais útil de todos os tempos, experimente e veja, por algum motivo, ninguém sabe sobre esse.
pressione repetidamente para selecionar os últimos parâmetros mais antigos.
ótimo quando você quer fazer algo mais com o argumento / arquivo que você usou apenas um momento atrás.
fonte
alt
-.
ele acessa o comando anterior e extrai o último argumento dele. Portanto, se você quiser o último argumento de três comandos atrás, basta pressionaralt
-.
três vezes.yank-last-arg
comando readline, portanto, ele deve funcionar com qualquer programa vinculado à readline, não apenas BASH ou ZSH.Meu favorito é
Simples e muito útil.
Dê uma olhada neste site commandlinefu.com .
Você também pode dar uma olhada nestes quatro artigos de Peteris Krumins em seu blog
fonte
ascii
programa separado também é útil. Além de imprimir uma tabela, permite consultar um ou mais caracteres individuais.Execute o último comando como root:
fonte
Não tenho certeza se isso conta como um "truque", mas as pessoas parecem desconhecer as teclas de atalho padrão da linha de leitura. De uso particular em conchas:
fonte
Ctrl+L
corresponde ao caractere ascii FormFeed. Ele geralmente redesenha a tela em aplicativos de texto com uma janela de tela (por exemplo, vim, less, mc, etc). Bom se a tela foi "poluída" por alguma saída de outro programa.Ctrl+W
cortar uma palavra para trás,Alt+F
avançar uma palavra,Alt+B
avançar uma palavra em uma linha. Eu gostoCtrl+Y
eShift+Insert
porque você pode ter duas linhas copiadas. Uma comCtrl+U
(cole-a comCtrl+Y
) e ao mesmo tempo você pode copiar outra palavra (selecione a linha) e cole com (Shift+Insert
).CTRL+ Rno BASH para procurar / ativar comandos executados anteriormente (o conteúdo de ~ / .bash_history).
Isso geralmente é extremamente útil. A execução desse alias servirá o PWD por HTTP (indexado) na porta 8000:
E como eu corro make o tempo todo, digito e digito rápido demais, esses aliases são provavelmente os mais usados (sério):
E provavelmente o meu pedaço de BASH usado com mais frequência é um script simples que chamo de upload. Eu o uso para misturar qualquer tipo de conteúdo ao meu Linode e ele copia o URL HTTP resultante para a minha área de transferência (clique no meio). Muito útil para colar coisas para pessoas no IRC:
Apenas um par. Posso postar muito mais tarde, preciso voltar ao trabalho!
fonte
alias mk=make
Mais rápido para digitar e menos propenso a errar. Ou compile a partir do seu editor usando uma tecla de atalho ...alias m=make
, ou mesmom=make -j6
ou similar - só que eu já usamalias m=mutt
☺diff
a saída de dois comandos sem criar um arquivo temporário manualmente (bash):fonte
comm
, pois leva apenas arquivos, mas em muitos casos isso é um desperdício de inodes.Bastante básico, mas as pessoas parecem não saber, retorna ao diretório anterior:
fonte
cd..
a partir do DOS está entranhado na minha memória muscular ...cd
(sem argumento) que leva você ao seu diretório pessoal.Expansão de cinta :
Permite substituir linhas tediosas como:
com uma instância mais curta
alguns outros usos
Expansão aritmética :
fonte
foo[123]
que irá expandir-se parafoo1 foo2 foo3
, mas eles precisam ser nomes de arquivos para trabalhar nesse casoIsso geralmente está no meu script de inicialização (.bashrc, .profile, qualquer que seja)
shopt
Deus, verifique os comentários:Um alias que salva as teclas digitadas:
mkdir
ecd
nele:E por último mas não menos importante, eu desisti de memorizar a sintaxe do tar, então:
fonte
mkcd
apenas que eu nomeie idmd
. No entanto, o uso de "$ @" como argumento para cd não faz sentido, pois você não pode cd para mais de um diretório. "$ @" Irá trabalhar para mkdir, mas então você está lidando com argumentos diferentes para mkdir e cd, então eu prefiro sugerirmd () { mkdir -p "$1"; cd "$1" }
Duas funções do bash que me salvam muitos pressionamentos de tecla.
Faça automaticamente um ls após cada CD com êxito:
Suba n níveis:
fonte
builtin foo
para ter uma função definidacd
; Eu tenho usadochdir
em minhas funções. Handycd() { builtin cd -- "$@" && { [ "$PS1" = "" ] || ls -hrt --color; }; }
Como geralmente estou na metade da linha de comando antes de querer pesquisar (CTRL-R no bash), tenho o seguinte no meu .bashrc
Isso significa que, se eu digitar cd, pressione as teclas para cima e para baixo, posso ver todas as opções para as quais eu tenho cd. Basicamente, eu uso isso para dirs usados com frequência. Como "cd w" e acabo passando por todos os espaços de trabalho que uso bastante.
fonte
Uma coisa que me poupa muito tempo são os comandos pushd / popd. Esses caras permitem criar uma pilha de diretórios e reduzir muito a digitação:
fonte
u
eo
representa aqui?setopt autopushd
e todas as alterações de diretório serão enviadas automaticamenteO
screen
comando . Basicamente, salva sua sessão de linha de comando para quando você voltar. É uma espécie de gerenciador de terminal, como um gerenciador de janelas. Dessa forma, em uma única sessão de terminal, você pode ter vários terminais virtuais em funcionamento. É muito legal.Se alguém usar
screen
, essa função shell (coloque-a.bashrc
) é extremamente útil:ao digitar
scr
, ele verificará se a sua sessão principal existe e será anexada a ela. Caso contrário, ele será criado.fonte
Se você precisar editar uma linha de comando particularmente longa no bash
irá abri-lo no editor ($ EDITOR).
No zsh, você pode obter o mesmo comportamento adicionando isso ao .zshrc:
fonte
Se você é um datilógrafo rápido, estes são úteis:
Essa macro ajuda a calcular os totais de uma coluna de saída: tamanhos de arquivo, bytes, pacotes, tudo o que você precisa fazer é especificar a coluna que você deseja adicionar:
Você o usa assim, por exemplo, sem argumentos, adiciona o total da primeira coluna:
Se você fornecer o argumento, ele somará a coluna, por exemplo, isso fornece o número total de bytes usados por todos os arquivos C # em / tmp:
Às vezes, seu console fica bagunçado porque você visualizou acidentalmente um arquivo binário (cat / bin / ls, por exemplo). É possível restaurar o terminal com esta função de shell:
Gosto do meu sl para usar caracteres para distinguir a classe de arquivos e também para ocultar os arquivos de backup gerados pelo meu editor (os arquivos de backup terminam com o caractere ~):
fonte
s/fast/sloppy/
reset
onde você usarestaura
.Um dos meus favoritos quando esqueço
s
:fonte
bindkey -s '\e[12~' "sudo !!\n"
ligar (neste caso) F2 para executar esse comando. Eu tenho essa ligação; portanto, quando executo alguma coisa e vejo a mensagem de erro "você esqueceu 'sudo', tolo", posso simplesmente esfaquear a F2 com aborrecimentoSe um comando receber entrada stdin, você poderá ler a entrada de um arquivo com
<filename
. Isso pode aparecer em qualquer lugar do comando, portanto, essas linhas são equivalentes:Isso é particularmente útil para grep, pois permite colocar a expressão no final da linha, para que você possa modificar rapidamente um comando grep pressionando Up, sem precisar rolar para a esquerda para passar o nome do arquivo:
fonte
<input foo | bar | baz >output
, ela não funcionará se você tentar misturar algumas primitivas de loop de shell comowhile
oufor
no meio. Então desisti e coloquei no final conforme a convenção.Você pode usar
CDPATH
para configurar o diretório equivalente aPATH
; se você tentarcd foo
e não houverfoo
no diretório atual, o shell verificará cada um dos diretóriosCDPATH
procurandofoo
nele e alternará para o primeiro que encontrar:fonte
Pois quando você não sabe onde algo vive, e também não se importa.
fonte
which
automaticamente, por issovi =scriptname
$(scriptname)
O e comercial . Ele coloca seu comando em segundo plano, para que você possa continuar digitando.
Trabalhando junto, e depois de um tempo você vê:
E seu processo está concluído! Ótimo para coisas em que você não precisa esperar que elas terminem.
fonte
&!
ao segundo plano o trabalho e desista do shell!bash
.nohup
realiza isso.Conclusão da guia . Quão ruim seria ruim se você tivesse que digitar todos os caracteres de todos os caminhos?
fonte
rm -fr /
. Então, sim, a conclusão do separador é bastante vital ... #ls /usr/lib/game-d*/rott*
rm -rf /
desativado na maioria dos sistemas Linux?Umount último dispositivo montado:
!mo
expande para o último comando iniciado commo
(pelo menos no bash). Às vezes um fazmv
no meio, entãou!m
não vai funcionar com tanta frequência.fonte
Eu tenho isso no meu .bashrc
E quando tenho o código-fonte html na área de transferência e quero encontrar todos os links que uso
E eu tenho todos os URLs na área de transferência
Eu também tenho essa função
qual tamanho de exibição (legível por humanos) e nome do arquivo.
este apelido é para mostrar temerature
com esta função eu posso calcular produto ou soma de argumentos.
Esta é uma função útil que divide a entrada padrão separada por regex e depois junta o resultado.
função fatorial
Esta função exibe texto wiki sobre DNS
Eu também tenho três funções de cores
Esta função valida o hash do arquivo md5.
isso mostrará uma mensagem de erro para um determinado código
Você pode imprimir todas as mensagens com
fonte
Outro truque útil do ZSH:
Trate a saída de um comando como um arquivo:
Isso abre uma versão antiga de um arquivo rastreado pelo Mercurial no emacs para visualização com destaque em sintaxe. Sem isso, eu teria que mexer com
hg revert
,hg archive
ou explicitamente enviarhg cat
saída para um arquivo temporário.Obviamente, isso funciona com qualquer programa que abra arquivos e com qualquer programa que imprima na saída padrão.
fonte
Um recurso específico do ZSH é um alias de sufixo, definido ao dar
alias
o-s
sinalizador:Se uma determinada extensão tiver um alias de sufixo, você poderá executar um arquivo com essa extensão diretamente, e o ZSH iniciará o programa especificado e passará o nome do arquivo como argumento. Portanto, se o alias acima estiver em vigor, essas linhas serão equivalentes:
fonte
Um dos meus recursos favoritos de todos os tempos do ZSH é o de diretórios. Você pode exportar uma variável com um nome determinado, com um valor que aponte para um determinado caminho:
Agora você pode usar
~foo
em um comando para se referir a/usr/bin
:fonte
Veja esta pergunta .
Quando você executa
ps ax | grep string
:a última linha que contém
grep
é algo um pouco irritanteVocê pode se livrar disso executando
ps ax | grep '[s]tring'
:update : ou apenas execute
pgrep string
fonte
'[o]penbox'
). Os colchetes funcionarão como um glob, por isso, se houver um openbox em seu diretório (digamos que você esteja/usr/bin
), o bash usará o openbox, o que impedirá o truque de grep.O comando do-nothing
:
como emExpanda a cinta em combinação com os loops for:
!
operador e operadores de curto-circuito||
e&&
usando sub shell em vez de pop / push (é útil em scripts)
o tipo de comando que é
type
também muito legal: aqui-cordas
e meu favorito: redirecionamento em uma lista de comandos
fonte
Adoro jogar o máximo de coisas possível no meu PS1. Algumas coisas úteis para lembrar:
\e[s
e\e[u
salve e cancele a posição do cursor, respectivamente. Eu uso isso para criar uma 'barra de informações' na parte superior da tela, com algumas linhas, que pode caber mais coisas. Exemplo:Combine com
alias clear='echo -e "\e[2J\n"'
. Experimente!Além disso, a
PROMPT_COMMAND
variável define um comando para executar sempre antes do PS1.Outro é o
bg
comando. Se você esquecer de colocar&
no final de um comando, basta pressionar ^Ze digitarbg
, e ele será executado em segundo plano.fonte
bg
, quando eu tenho um programa em execução em segundo plano e pressionar acidentalmentefg
eu não sei como para empurrá-lo de volta: DPS1
por isso eu coloquei a maioria das coisas que eu quero em minha linha de fundo de tela ...