? Čeština ∙ Deutsch ∙ Ελληνικά ∙ English ∙ Español ∙ Français ∙ Indonesia ∙ Italiano ∙ 日本語 ∙ 한국어 ∙ polski ∙ Português ∙ Română ∙ Русский ∙ Slovenščina ∙ Українська ∙ 简体中文 ∙ 繁體中文
Nota: estou planejando revisar isso e procurar um novo co-autor para ajudar a expandir isso em um guia mais abrangente. Embora seja muito popular, pode ser mais amplo e um pouco mais profundo. Se você gosta de escrever e está perto de ser um especialista nesse material e disposto a considerar ajudar, envie -me uma nota em Josh (0x40) holloway.com. –Jlevy, Holloway. Obrigado!

A fluência na linha de comando é uma habilidade frequentemente negligenciada ou considerada arcana, mas melhora sua flexibilidade e produtividade como engenheiro de maneiras óbvias e sutis. Esta é uma seleção de notas e dicas sobre o uso da linha de comando que achamos úteis ao trabalhar no Linux. Algumas dicas são elementares e outras são bastante específicas, sofisticadas ou obscuras. Esta página não é longa, mas se você puder usar e lembrar todos os itens aqui, você sabe muito.
Este trabalho é o resultado de muitos autores e tradutores. Parte disso apareceu originalmente no Quora, mas desde então se mudou para o Github, onde as pessoas mais talentosas do que o autor original fizeram inúmeras melhorias. Envie uma pergunta se você tiver uma pergunta relacionada à linha de comando. Contribua se você vir um erro ou algo que pode ser melhor!
Escopo:
Notas:
apt , yum , dnf , pacman , pip ou brew (conforme apropriado) para instalar novos programas. Aprenda a festa básica. Na verdade, digite man bash e pelo menos vasculhe a coisa toda; É muito fácil seguir e não tanto tempo. As conchas alternativas podem ser boas, mas o Bash é poderoso e sempre disponível (aprender apenas ZSH, peixe, etc., enquanto tentador em seu próprio laptop, o restringe em muitas situações, como o uso de servidores existentes).
Aprenda bem pelo menos um editor baseado em texto. O editor nano é um dos mais simples para edição básica (abertura, edição, salvamento, pesquisa). No entanto, para o usuário elétrico em um terminal de texto, não há substituto para o VIM ( vi ), o editor difícil de aprender, mas venerável, rápido e completo. Muitas pessoas também usam os emacs clássicos, principalmente para tarefas de edição maiores. (É claro que é improvável que qualquer desenvolvedor de software moderno que trabalha em um extenso projeto use apenas um editor puro baseado em texto e também deve estar familiarizado com os modernos IDEs e ferramentas gráficas.)
Encontrando documentação:
man (para o inquisitivo, man man lista os números da seção, por exemplo, 1 é comandos "regulares", 5 são arquivos/convenções e 8 são para administração). Encontre páginas do homem com apropos .help e help -d . Você pode descobrir se um comando é um executável, interno de shell ou um pseudônimo usando type command .curl cheat.sh/command fornecerá uma breve "folha de dicas" com exemplos comuns de como usar um comando Shell. Aprenda sobre o redirecionamento de saída e entrada usando > e < e tubos usando | . Saiba > substitui o arquivo de saída e >> Anexa. Aprenda sobre Stdout e Stderr.
Saiba sobre a expansão do Glob de Arquivos com * (e talvez ? E [ ... ] ) e citando e a diferença entre as citações duplas " e as únicas ' (veja mais sobre expansão variável abaixo.)
Familiarize-se com o gerenciamento de empregos Bash: & , Ctrl-Z , Ctrl-C , jobs , fg , bg , kill , etc.
Conheça ssh e o básico da autenticação sem senha, via ssh-agent , ssh-add , etc.
Gerenciamento básico de arquivos: ls e ls -l (em particular, aprenda o que todas as colunas em ls -l significa), less , head , tail e tail -f (ou até melhor, less +F ), ln e ln -s (Aprenda as diferenças e vantagens de links rígidos versus links), chown , chmod ( du (para um resumo rápido de Disage Usage : du -hs * . Para gerenciamento de sistemas de arquivos, df , mount , fdisk , mkfs , lsblk . Saiba o que é um inode ( ls -i ou df -i ).
Gerenciamento básico de rede: ip ou ifconfig , dig , traceroute , route .
Aprenda e use um sistema de gerenciamento de controle de versão, como git .
Conheça bem as expressões regulares e as várias bandeiras para grep / egrep . As opções -i , -o , -v , -A , -B e -C valem a pena saber.
Aprenda a usar apt-get , yum , dnf ou pacman (dependendo da distro) para encontrar e instalar pacotes. E verifique se você tem pip para instalar as ferramentas de linha de comando baseadas em Python (algumas abaixo são mais fáceis de instalar via pip ).
Na guia Bash, use para concluir argumentos ou listar todos os comandos disponíveis e Ctrl-R para pesquisar no histórico de comando (depois de pressionar, digite para pesquisar, pressione Ctrl-R repetidamente para percorrer mais correspondências, pressione Enter para executar o comando encontrado ou pressionar a seta direita para colocar o resultado na linha atual para permitir a edição).
Em Bash, use Ctrl-W para excluir a última palavra e Ctrl-U para excluir o conteúdo do cursor atual de volta ao início da linha. Use Alt-B e Alt-F para se mover por palavra, Ctrl-A para mover o cursor para o início da linha, Ctrl-e para mover o cursor para o final da linha, Ctrl-K para matar até o final da linha, Ctrl-L para limpar a tela. Veja man readline para todas as peças de chave padrão em Bash. Há muito. Por exemplo alt-. Ciclona através de argumentos anteriores e Alt- * expande um glob.
Como alternativa, se você gosta de vincos de chave no estilo Vi, use set -o vi (e set -o emacs para colocá -lo de volta).
Para editar comandos longos, depois de definir seu editor (por exemplo, export EDITOR=vim ), o Ctrl-X Ctrl-E abrirá o comando atual em um editor para edição de várias linhas. Ou no estilo vi, Escape-v .
Para ver comandos recentes, use history . Siga com !n (onde n é o número do comando) para executar novamente. Há também muitas abreviações que você pode usar, o mais útil provavelmente ser !$ Para o último argumento e !! Para o último comando (consulte "Expansão do histórico" na página do homem). No entanto, eles geralmente são facilmente substituídos por Ctrl-R e Alt-. .
Vá para o seu diretório doméstico com cd . Acesse arquivos em relação ao seu diretório inicial com o prefixo ~ (por exemplo ~/.bashrc ). Nos scripts sh refere -se ao diretório inicial como $HOME .
Para voltar ao diretório de trabalho anterior: cd - .
Se você estiver na metade da digitação de um comando, mas mude de idéia, pressione Alt- # para adicionar um # no início e insira-o como um comentário (ou use Ctrl-A , # , digite ). Você pode retornar a ele mais tarde através do histórico de comando.
Use xargs (ou parallel ). É muito poderoso. NOTA você pode controlar quantos itens executam por linha ( -L ) e paralelismo ( -P ). Se você não tiver certeza se isso fará a coisa certa, use xargs echo primeiro. Além disso, -I{} é útil. Exemplos:
find . -name ' *.py ' | xargs grep some_function
cat hosts | xargs -I{} ssh root@{} hostname pstree -p é uma exibição útil da árvore de processos.
Use pgrep e pkill para encontrar ou sinalizar processos por nome ( -f é útil).
Conheça os vários sinais que você pode enviar. Por exemplo, para suspender um processo, use kill -STOP [pid] . Para a lista completa, consulte man 7 signal
Use nohup ou disown se você quiser que um processo de fundo continue em execução para sempre.
Verifique quais processos estão ouvindo via netstat -lntp ou ss -plat (para tcp; add -u para udp) ou lsof -iTCP -sTCP:LISTEN -P -n (que também funciona no macOS).
Veja também lsof e fuser para soquetes e arquivos abertos.
Veja uptime ou w para saber quanto tempo o sistema está em execução.
Use alias para criar atalhos para comandos comumente usados. Por exemplo, alias ll='ls -latr' cria um novo alias ll .
Salvar aliases, configurações de shell e funções que você geralmente usa em ~/.bashrc e organize as conchas de login para obtê -lo. Isso disponibilizará sua configuração em todas as suas sessões de shell.
Coloque as configurações de variáveis de ambiente, bem como comandos que devem ser executados quando você faz login em ~/.bash_profile . A configuração separada será necessária para as conchas que você inicia a partir de logins de ambiente gráfico e trabalhos cron .
Sincronize seus arquivos de configuração (por exemplo .bashrc e .bash_profile ) entre vários computadores com o git.
Entenda que o cuidado é necessário quando variáveis e nomes de arquivos incluem espaço em branco. Cerruine suas variáveis bash com citações, por exemplo, "$FOO" . Prefira as opções -0 ou -print0 para permitir que caracteres nulos delimitem nomes de arquivos, por exemplo, locate -0 pattern | xargs -0 ls -al ou find / -print0 -type d | xargs -0 ls -al . Para iterar em nomes de arquivos que contêm espaço em branco em um loop for, defina seu IFS como uma nova linha apenas usando IFS=$'n' .
Nos scripts bash, use set -x (ou o set -v , que registra entrada bruta, incluindo variáveis e comentários não especiais) para a saída de depuração. Use modos rigorosos, a menos que você tenha um bom motivo para não: usar set -e para abortar em erros (código de saída diferente de zero). Use set -u para detectar usos variáveis não definidos. Considere set -o pipefail também, para abortar os erros dentro dos tubos (embora leia mais se você o fizer, pois esse tópico é um pouco sutil). Para mais scripts envolvidos, também use trap na saída ou erro. Um hábito útil é iniciar um script como este, que o fará detectar e abortar erros comuns e imprimir uma mensagem:
set -euo pipefail
trap " echo 'error: Script failed: see failed command above' " ERR # do something in current dir
(cd /some/other/dir && other-command)
# continue in original dir Em Bash, observe que existem muitos tipos de expansão variável. Verificando uma variável existe: ${name:?error message} . Por exemplo, se um script bash exigir um único argumento, basta escrever input_file=${1:?usage: $0 input_file} . Usando um valor padrão se uma variável estiver vazia: ${name:-default} . Se você deseja ter um parâmetro adicional (opcional) adicionado ao exemplo anterior, pode usar algo como output_file=${2:-logfile} . Se $2 for omitido e, portanto, vazio, output_file será definido como logfile . Expansão aritmética: i=$(( (i + 1) % 5 )) . Sequências: {1..10} . Aparecimento de strings: ${var%suffix} e ${var#prefix} . Por exemplo, se var=foo.pdf , echo ${var%.pdf}.txt imprime foo.txt .
A expansão do colmégio usando { ... } pode reduzir a necessidade de re-Type de texto semelhante e automatizar combinações de itens. Isso é útil em exemplos como mv foo.{txt,pdf} some-dir (que move os mkdir -p test-{a,b,c}/subtest-{1,2,3} ), cp somefile{,.bak} cp somefile somefile.bak {. A expansão do aparelho é realizada antes de qualquer outra expansão.
A ordem das expansões é: expansão de cinta; Expansão tilde, parâmetro e expansão variável, expansão aritmética e substituição de comando (feita de maneira esquerda para a direita); divisão de palavras; e expansão do nome do arquivo. (Por exemplo, um intervalo como {1..20} não pode ser expresso com variáveis usando {$a..$b} . Use seq for um loop, por exemplo, seq $a $b ou for((i=a; i<=b; i++)); do ... ; done .)
A saída de um comando pode ser tratada como um arquivo via <(some command) (conhecido como substituição do processo). Por exemplo, compare o local /etc/hosts com um remoto:
diff /etc/hosts <( ssh somehost cat /etc/hosts ){
# Your code here
} cat <<EOF
input
on multiple lines
EOF
Em Bash, redirecreva a saída padrão e o erro padrão via: some-command >logfile 2>&1 ou some-command &>logfile . Freqüentemente, para garantir que um comando não deixe um identificador de arquivo aberto para entrada padrão, vinculando -o ao terminal em que você está, também é uma boa prática adicionar </dev/null .
Use man ascii para uma boa tabela ASCII, com valores hexadecimais e decimais. Para informações gerais de codificação, man unicode , man utf-8 e man latin1 são úteis.
Use screen ou tmux para multiplex, a tela, especialmente útil em sessões SSH remotas e para se destacar e se unir a uma sessão. byobu pode aprimorar a tela ou o TMUX, fornecendo mais informações e gerenciamento mais fácil. Uma alternativa mais mínima para a persistência da sessão é apenas dtach .
Em SSH, saber como portar o túnel com -L ou -D (e ocasionalmente -R ) é útil, por exemplo, para acessar sites da Web a partir de um servidor remoto.
Pode ser útil fazer algumas otimizações para sua configuração SSH; Por exemplo, esta ~/.ssh/config contém configurações para evitar conexões caídas em determinados ambientes de rede, usa compactação (que é útil com o SCP em conexões de baixa largura de banda) e canais multiplex no mesmo servidor com um arquivo de controle local:
TCPKeepAlive=yes
ServerAliveInterval=15
ServerAliveCountMax=6
Compression=yes
ControlMaster auto
ControlPath /tmp/%r@%h:%p
ControlPersist yes
Algumas outras opções relevantes para o SSH são sensíveis à segurança e devem ser ativadas com cuidado, por exemplo, por sub -rede ou host ou em redes confiáveis: StrictHostKeyChecking=no , ForwardAgent=yes
Considere mosh uma alternativa ao SSH que usa UDP, evitando conexões caídas e adicionando conveniência na estrada (requer configuração do lado do servidor).
Para obter as permissões em um arquivo em formato octal, que é útil para a configuração do sistema, mas não está disponível no ls e fácil de bungitar, use algo como
stat -c ' %A %a %n ' /etc/timezone Para seleção interativa de valores a partir da saída de outro comando, use percol ou fzf .
Para interação com os arquivos com base na saída de outro comando (como git ), use fpp (PathPicker).
Para um servidor web simples para todos os arquivos no diretório atual (e subdirs), disponível para qualquer pessoa em sua rede, use: python -m SimpleHTTPServer 7777 (para a porta 7777 e python 2) e python -m http.server 7777 (para a porta 7777 e python 3).
Para executar um comando como outro usuário, use sudo . Padrões de execução como root; Use -u para especificar outro usuário. Use -i para fazer login como esse usuário (você será solicitado sua senha).
Para alternar o shell para outro usuário, use su username ou su - username . Este último com "-" obtém um ambiente como se outro usuário acabasse de fazer login. Omitindo os padrões de nome de usuário para root. Você será solicitado a senha do usuário para o qual está mudando .
Saiba sobre o limite de 128k nas linhas de comando. Esse erro "Lista de argumentos" é comum quando o curinga corresponde a um grande número de arquivos. (Quando isso acontece, alternativas como find e xargs podem ajudar.)
Para uma calculadora básica (e, claro, acesso ao Python em geral), use o intérprete python . Por exemplo,
>>> 2+3
5
Para localizar um arquivo pelo nome no diretório atual, find . -iname '*something*' (ou similar). Para encontrar um arquivo em qualquer lugar pelo nome, use locate something (mas lembre -se de que updatedb pode não ter indexado arquivos criados recentemente).
Para pesquisas gerais por meio de arquivos de origem ou dados, existem várias opções mais avançadas ou mais rápidas que grep -r , incluindo (em ordem aproximada de mais antiga a mais nova) ack , ag ("The Silver Searcher") e rg (RipGrep).
Para converter html em texto: lynx -dump -stdin
Para Markdown, HTML e todos os tipos de conversão de documentos, tente pandoc . Por exemplo, para converter um documento de marcação em formato de palavra: pandoc README.md --from markdown --to docx -o temp.docx
Se você deve lidar com o XML, xmlstarlet é antigo, mas bom.
Para JSON, use jq . Para uso interativo, também consulte jid e jiq .
Para Yaml, use shyaml .
Para arquivos Excel ou CSV, o CSVKIT fornece in2csv , csvcut , csvjoin , csvgrep , etc.
Para a Amazon S3, s3cmd é conveniente e s4cmd é mais rápido. aws e as saws aprimoradas da Amazon são essenciais para outras tarefas relacionadas à AWS.
Saiba sobre sort e uniq , incluindo opções -u e -d da Uniq -veja um liner abaixo. Veja também comm .
Saiba sobre cut , paste e join para manipular arquivos de texto. Muitas pessoas usam cut , mas esquecem de join .
Conheça sobre wc para contar newlines ( -l ), caracteres ( -m ), palavras ( -w ) e bytes ( -c ).
Saiba sobre tee para copiar de stdin para um arquivo e também para stdout, como em ls -al | tee file.txt .
Para cálculos mais complexos, incluindo agrupamento, campos de reversão e cálculos estatísticos, considere datamash .
Saiba que o local afeta muitas ferramentas de linha de comando de maneiras sutis, incluindo a ordem de classificação (agrupamento) e o desempenho. A maioria das instalações do Linux definirá LANG ou outras variáveis de localidade como um ambiente local como o inglês dos EUA. Mas esteja ciente da classificação mudará se você mudar de localidade. E o SABE I18N Rotinas pode fazer classificar ou outros comandos funcionarem muitas vezes mais lentamente. Em algumas situações (como as operações definidas ou operações de exclusividade abaixo), você pode ignorar com segurança as rotinas lentas da I18N inteiramente e usar a ordem de classificação tradicional baseada em bytes, usando export LC_ALL=C .
Você pode definir o ambiente de um comando específico prefixando sua invocação com as configurações da variável de ambiente, como na TZ=Pacific/Fiji date .
Conheça awk e sed básico para um simples munging de dados. Veja uma frase para exemplos.
Para substituir todas as ocorrências de uma string no lugar, em um ou mais arquivos:
perl -pi.bak -e ' s/old-string/new-string/g ' my-files- * .txtrepren . (Em alguns casos, o comando rename também permite várias renomeações, mas tenha cuidado, pois sua funcionalidade não é a mesma em todas as distribuições Linux.) # Full rename of filenames, directories, and contents foo -> bar:
repren --full --preserve-case --from foo --to bar .
# Recover backup files whatever.bak -> whatever:
repren --renames --from ' (.*).bak ' --to ' 1 ' * .bak
# Same as above, using rename, if available:
rename ' s/.bak$// ' * .bakrsync é realmente uma ferramenta de copiar de arquivos rápida e extraordinariamente versátil. É conhecido por sincronizar entre máquinas, mas é igualmente útil localmente. Quando as restrições de segurança permitem, o uso rsync em vez do scp permite a recuperação de uma transferência sem reiniciar do zero. Também está entre as maneiras mais rápidas de excluir um grande número de arquivos: mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir Para monitorar o progresso ao processar arquivos, use pv , pycp , pmonitor , progress , rsync --progress ou, para cópia em nível de bloco, dd status=progress .
Use shuf para embaralhar ou selecionar linhas aleatórias de um arquivo.
Saiba as opções de sort . Para números, use -n ou -h para lidar com números legíveis por humanos (por exemplo, de du -h ). Saiba como as chaves funcionam ( -t e -k ). Em particular, observe que você precisa escrever -k1,1 para classificar apenas pelo primeiro campo; -k1 significa classificar de acordo com toda a linha. A classificação estável ( sort -s ) pode ser útil. Por exemplo, para classificar primeiro pelo Campo 2 e depois secundariamente pelo Campo 1, você pode usar sort -k1,1 | sort -s -k2,2 .
Se você precisar escrever uma guia literal em uma linha de comando em bash (por exemplo, para o argumento -t classificar), pressione Ctrl -V [tab] ou escreva $'t' (o último é melhor, pois você pode copiar/colá -lo).
As ferramentas padrão para corrigir o código -fonte são diff e patch . Veja também diffstat para estatísticas resumidas de um diff e sdiff para um diff lado a lado. NOTA diff -r funciona para diretórios inteiros. Use diff -r tree1 tree2 | diffstat para um resumo das mudanças. Use vimdiff para comparar e editar arquivos.
Para arquivos binários, use hd , hexdump ou xxd para lixões hexadecimais simples e bvi , hexedit ou biew para edição binária.
Também para arquivos binários, strings (mais grep , etc.) permitem encontrar pedaços de texto.
Para diffs binários (compressão delta), use xdelta3 .
Para converter codificações de texto, tente iconv . Ou uconv para uso mais avançado; Ele suporta algumas coisas avançadas unicode. Por exemplo:
# Displays hex codes or actual names of characters (useful for debugging):
uconv -f utf-8 -t utf-8 -x ' ::Any-Hex; ' < input.txt
uconv -f utf-8 -t utf-8 -x ' ::Any-Name; ' < input.txt
# Lowercase and removes all accents (by expanding and dropping them):
uconv -f utf-8 -t utf-8 -x ' ::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt Para dividir arquivos em pedaços, consulte split (para dividir por tamanho) e csplit (para dividir por um padrão).
Data e hora: para obter a data e a hora atuais no formato ISO 8601 útil, use date -u +"%Y-%m-%dT%H:%M:%SZ" (outras opções são problemáticas). Para manipular expressões de data e hora, use dateadd , datediff , strptime etc. De dateutils .
Use zless , zmore , zcat e zgrep para operar em arquivos compactados.
Os atributos do arquivo são liquidáveis via chattr e oferecem uma alternativa de nível inferior às permissões de arquivo. Por exemplo, para proteger contra a exclusão acidental de arquivos, a bandeira imutável: sudo chattr +i /critical/directory/or/file
Use getfacl e setfacl para salvar e restaurar as permissões de arquivos. Por exemplo:
getfacl -R /some/path > permissions.txt
setfacl --restore=permissions.txttruncate (cria um arquivo esparso), fallocate (Ext4, XFS, BTRFS e OCFS2 FileSystems), xfs_mkfile (quase todos os sistemas de arquivos, vêm no pacote XFSProgs), mkfile (para sistemas de unix como solares, mac OS). Para depuração da web, curl e curl -I são úteis, ou seus equivalentes wget , ou o httpie mais moderno.
Para saber o status atual da CPU/disco, as ferramentas clássicas são top (ou o melhor htop ), iostat e iotop . Use iostat -mxz 15 para CPU básico e estatísticas detalhadas por disco por parte e insight de desempenho.
Para detalhes da conexão de rede, use netstat e ss .
Para uma rápida visão geral do que está acontecendo em um sistema, dstat é especialmente útil. Para uma visão geral mais ampla com detalhes, use glances .
Para conhecer o status da memória, execute e compreenda a saída do free e vmstat . Em particular, esteja ciente de que o valor "em cache" é a memória mantida pelo kernel Linux como cache de arquivo, e efetivamente conta o valor "livre".
A depuração do sistema Java é uma chaleira diferente de peixes, mas um simples truque no Oracle e em alguns outros JVMs é que você pode executar kill -3 <pid> e um resumo completo de rastreamento e heap (incluindo detalhes de coleta de lixo geracional, que podem ser altamente informativos) serão despejados para Stderr/logs. O jps , jstat , jstack , jmap são úteis. As ferramentas SJK são mais avançadas.
Use mtr como um melhor traceroute, para identificar problemas de rede.
Para analisar por que um disco está cheio, ncdu economiza tempo nos comandos usuais como du -sh * .
Para descobrir qual soquete ou processo está usando largura de banda, tente iftop ou nethogs .
A ferramenta ab (vem com Apache) é útil para verificação rápida e suja do desempenho do servidor da web. Para testes de carga mais complexos, tente siege .
Para depuração de rede mais séria, wireshark , tshark ou ngrep .
Conheça sobre strace e ltrace . Isso pode ser útil se um programa estiver falhando, pendurado ou travando, e você não sabe o porquê, ou se deseja ter uma idéia geral de desempenho. Observe a opção de perfil ( -c ) e a capacidade de anexar a um processo de execução ( -p ). Use a opção Trace Child ( -f ) para evitar que a falta de chamadas importantes.
Saiba sobre ldd para verificar bibliotecas compartilhadas etc - mas nunca o execute em arquivos não confiáveis.
Saiba como se conectar a um processo em execução com gdb e obtenha seus traços de pilha.
Use /proc . Às vezes, é incrivelmente útil ao depurar problemas ao vivo. Exemplos: /proc/cpuinfo , /proc/meminfo , /proc/cmdline , /proc/xxx/cwd , /proc/xxx/exe , /proc/xxx/fd/ , /proc/xxx/smaps (onde xxx é o ID do processo ou pid).
Ao depurar por que algo deu errado no passado, sar pode ser muito útil. Ele mostra estatísticas históricas sobre CPU, memória, rede, etc.
Para sistemas mais profundos e análises de desempenho, consulte o stap (Systemtap), perf e sysdig .
Verifique o sistema operacional com uname ou uname -a (Informações gerais do Unix/Kernel) ou lsb_release -a (Info Linux Distro).
Use dmesg sempre que algo está agindo realmente engraçado (pode ser problemas de hardware ou driver).
Se você excluir um arquivo e ele não liberar espaço de disco esperado, conforme relatado pela du , verifique se o arquivo está em uso por um processo: lsof | grep deleted | grep "filename-of-my-big-file"
Alguns exemplos de reunir comandos:
sort / uniq . Suponha que a e b sejam arquivos de texto que já são exclusivos. Isso é rápido e funciona em arquivos de tamanho arbitrário, até muitos gigabytes. (A classificação não é limitada pela memória, embora você precise usar a opção -T se /tmp estiver em uma pequena partição raiz.) Consulte também a nota sobre LC_ALL acima e a opção sort ' -u (deixada de fora para clareza abaixo). sort a b | uniq > c # c is a union b
sort a b | uniq -d > c # c is a intersect b
sort a b b | uniq -u > c # c is set difference a - b diff <(jq --sort-keys . < file1.json) <(jq --sort-keys . < file2.json) | colordiff | less -R
Use grep . * Para examinar rapidamente o conteúdo de todos os arquivos em um diretório (para que cada linha seja emparelhada com o nome do arquivo) ou head -100 * (para que cada arquivo tenha um título). Isso pode ser útil para diretórios preenchidos com configurações de configuração como as em /sys , /proc /etc .
Resumindo todos os números na terceira coluna de um arquivo de texto (provavelmente é 3x mais rápido e 3x menos código que o Python equivalente):
awk ' { x += $3 } END { print x } ' myfilels -l recursivo, mas é mais fácil de ler do que ls -lR : find . -type f -lsacct_id que está presente na URL. Se você quiser uma contagem de quantas solicitações para cada acct_id : egrep -o ' acct_id=[0-9]+ ' access.log | cut -d= -f2 | sort | uniq -c | sort -rn Para monitorar continuamente as alterações, use watch , por exemplo, verifique as alterações nos arquivos em um diretório com watch -d -n 2 'ls -rtlh | tail' ou para configurações de rede enquanto soluciona suas configurações de Wi -Fi com watch -d -n 2 ifconfig .
Execute esta função para obter uma dica aleatória deste documento (analisa o Markdown e extrai um item):
function taocl() {
curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md |
sed ' /cowsay[.]png/d ' |
pandoc -f markdown -t html |
xmlstarlet fo --html --dropdtd |
xmlstarlet sel -t -v " (html/body/ul/li[count(p)>0])[ $RANDOM mod last()+1] " |
xmlstarlet unesc | fmt -80 | iconv -t US
} expr : execute operações aritméticas ou booleanas ou avaliar expressões regulares
m4 : Macro processador simples
yes : Imprima muito uma string
cal : Bom calendário
env : execute um comando (útil em scripts)
printenv : imprimir variáveis de ambiente (útil em depuração e scripts)
look : encontre palavras em inglês (ou linhas em um arquivo) começando com uma string
cut , paste e join : manipulação de dados
fmt : parágrafos de texto de formato
pr : Formatar texto em páginas/colunas
fold : Linhas de texto de embrulho
column : Formatar campos de texto em colunas ou tabelas alinhadas de largura fixa ou tabelas
expand e unexpand : converta entre guias e espaços
nl : Adicione números de linha
seq : números de impressão
bc : Calculadora
factor : números inteiros de fator
gpg : Criptografar e assinar arquivos
toe : Tabela de entradas Terminfo
nc : depuração de rede e transferência de dados
socat : relé de soquete e encaminhador de porta TCP (semelhante ao netcat )
slurm : Visualização de tráfego de rede
dd : movendo dados entre arquivos ou dispositivos
file : Identifique o tipo de um arquivo
tree : exiba diretórios e subdiretórios como uma árvore de ninho; como ls , mas recursivo
stat : Informações do arquivo
time : execute e tempo um comando
timeout : execute um comando para uma quantidade especificada de tempo e interrompa o processo quando a quantidade de tempo especificada concluir.
lockfile : Crie um arquivo semáforo que só pode ser removido por rm -f
logrotate : gire, compacte e torne os logs de correio.
watch : Execute um comando repetidamente, mostrando resultados e/ou destacando mudanças
when-changed : executa qualquer comando que você especificar sempre que vê o arquivo alterado. Veja inotifywait e entr também.
tac : Imprimir arquivos em inverso
comm : Compare arquivos classificados linha por linha
strings : extrair texto de arquivos binários
tr : Tradução ou manipulação do personagem
iconv ou uconv : conversão para codificações de texto
split e csplit : arquivos de divisão
sponge : Leia toda a entrada antes de escrevê -la, útil para ler depois escrever para o mesmo arquivo, por exemplo, grep -v something some-file | sponge some-file
units : conversões e cálculos de unidade; Converte Furlongs por quinzena em gwips por piscar (consulte também /usr/share/units/definitions.units )
apg : gera senhas aleatórias
xz : compactação de arquivo de alta razão
ldd : informações dinâmicas da biblioteca
nm : símbolos de arquivos de objeto
ab ou wrk : servidores da web de benchmarking
strace : depuração de chamadas do sistema
mtr : Melhor traceroute para depuração de rede
cssh : casca simultânea visual
rsync : arquivos de sincronização e pastas sobre SSH ou no sistema de arquivos local
wireshark e tshark : captura de pacotes e depuração de rede
ngrep : Grep para a camada de rede
host e dig : Pesquisas DNS
lsof : Processar o descritor de arquivos e informações do soquete
dstat : Estatísticas úteis do sistema
glances : Visão geral de alto nível e multi-subsidiário
iostat : estatísticas de uso de disco
mpstat : estatísticas de uso da CPU
vmstat : estatísticas de uso de memória
htop : versão aprimorada do topo
last : Histórico de login
w : Quem está conectado
id : Informações de identidade do usuário/grupo
sar : estatísticas históricas do sistema
iftop ou nethogs : Utilização de rede por soquete ou processo
ss : estatísticas de soquete
dmesg : mensagens de erro de inicialização e sistema
sysctl : visualize e configure os parâmetros do kernel Linux no tempo de execução
hdparm : manipulação/desempenho do disco SATA/ATA
lsblk : List Block Dispositices: Uma Vista de Árvore de seus discos e partições de disco
lshw , lscpu , lspci , lsusb , dmidecode : Informações de hardware, incluindo CPU, BIOS, RAID, gráficos, dispositivos, etc.
lsmod e modinfo : Liste e mostram detalhes dos módulos do kernel.
fortune , ddate e sl : hum, bem, depende se você considera locomotivas a vapor e citações zippy "úteis"
Estes são itens relevantes apenas no macOS.
Gerenciamento de pacotes com brew (Homebrew) e/ou port (Macports). Eles podem ser usados para instalar no macOS muitos dos comandos acima.
Copie a saída de qualquer comando para um aplicativo de desktop com pbcopy e cola a entrada de um com pbpaste .
Para ativar a tecla Opção no terminal macOS como uma tecla ALT (como usada nos comandos acima, como ALT -B , ALT -F , etc.), Abra preferências -> Perfis -> Teclado e selecione "Usar a opção como meta -chave".
Para abrir um arquivo com um aplicativo de desktop, use open ou open -a /Applications/Whatever.app .
Spotlight: Pesquise arquivos com os metadados mdfind e da lista (como informações de fotos exif) com mdls .
Esteja ciente do MacOS é baseado no BSD Unix, e muitos comandos (por exemplo, ps , ls , tail , awk , sed ) têm muitas variações sutis do Linux, o que é amplamente influenciado pelas ferramentas UNIX e GNU no estilo V do sistema. Muitas vezes, você pode dizer a diferença, observando que uma página de homem tem o título "Manual de comandos gerais do BSD". Em alguns casos, as versões GNU também podem ser instaladas (como gawk e gsed para GNU Awk e Sed). Se gravar scripts de bash de plataforma cruzada, evite esses comandos (por exemplo, considere Python ou perl ) ou teste com cuidado.
Para obter informações de liberação do MacOS, use sw_vers .
Esses itens são relevantes apenas no Windows.
Acesse a potência do shell Unix no Microsoft Windows, instalando o Cygwin. A maioria das coisas descritas neste documento funcionará fora da caixa.
No Windows 10, você pode usar o Subsistema do Windows para Linux (WSL), que fornece um ambiente familiar com utilitários de linha de comando Unix.
Se você deseja usar principalmente as ferramentas de desenvolvedor da GNU (como o GCC) no Windows, considere Mingw e seu pacote MSYS, que fornece serviços públicos como Bash, Gawk, Make e Grep. O MSYS não possui todos os recursos em comparação com o Cygwin. O Mingw é particularmente útil para criar portas nativas do Windows de ferramentas UNIX.
Outra opção para obter a aparência do Unix no Windows é o dinheiro. Observe que apenas muito poucos comandos do UNIX e opções de linha de comando estão disponíveis neste ambiente.
Você pode executar e script a maioria das tarefas de administração do sistema do Windows da linha de comando aprendendo e usando wmic .
Ferramentas de rede do Windows da linha de comando nativas que você pode achar útil incluir ping , ipconfig , tracert e netstat .
Você pode executar muitas tarefas úteis do Windows invocando o comando Rundll32 .
Instale programas UNIX adicionais com o gerenciador de pacotes do Cygwin.
Use mintty como sua janela de linha de comando.
Acesse a área de transferência do Windows através /dev/clipboard .
Run cygstart to open an arbitrary file through its registered application.
Access the Windows registry with regtool .
Note that a C: Windows drive path becomes /cygdrive/c under Cygwin, and that Cygwin's / appears under C:cygwin on Windows. Convert between Cygwin and Windows-style file paths with cygpath . This is most useful in scripts that invoke Windows programs.
With the exception of very small tasks, code is written so others can read it. With power comes responsibility. The fact you can do something in Bash doesn't necessarily mean you should! ;)
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.