Core utilities (Português)

From ArchWiki
Jump to: navigation, search

Este artigo trata dos utilitários chamados core ("principais") em um sistema GNU/Linux, como less, ls e grep. O escopo deste artigo inclui, mas não está limitado a, os utilitários incluídos no pacote GNU coreutils. O que se segue são várias dicas e truques e outras informações úteis relacionadas a esses utilitários.

Comandos básicos

A tabela a seguir lista os comandos básicos do shell, cada usuário Linux deve estar familiarizado. Veja as seções abaixo e "Artigos relacionados" para obter detalhes.

Comando Descrição Página de manual Exemplo
man Mostra página de manual para um comando man(7) man ed
cd Muda o diretório (comando embutido no shell) cd(1p) cd /etc/pacman.d
mkdir Cria um diretório mkdir(1) mkdir ~/novapasta
rmdir Remove diretório vazio rmdir(1) rmdir ~/pastavazia
rm Remove um arquivo rm(1) rm ~/arquivo.txt
rm -r Remove diretório e seu conteúdo rm -r ~/.cache
ls Lista arquivos ls(1) ls *.mkv
ls -a Lista arquivos ocultos ls -a /home/archie
ls -al Lista arquivos ocultos e propriedades de arquivos
mv Move um arquivo mv(1) mv ~/comprimido.zip ~/archive/comprimido2.zip
cp Copia uma arquivo cp(1) cp ~/.bashrc ~/.bashrc.bak
chmod +x Torna um arquivo executável chmod(1) chmod +x ~/.local/bin/meuscript.sh
cat Mostrar conteúdo de arquivo cat(1) cat /etc/hostname
strings Mostra caracteres imprimíveis em arquivos binários strings(1) strings /usr/bin/free
find Pesquisa por um arquivo find(1) find ~ -name meuarquivo
mount Monta uma partição mount(8) mount /dev/sdc1 /media/usb
df -h Mostra o espaço restante em todas as partições df(1)
ps -A Mostra todos os processos em execução ps(1)
killall Mata todas as instâncias em execução de um processo killall(1)
ss -at Exibe uma lista de sockets TCP abertos ss(8)

awk

AWK é uma linguagem de varredura e processamento de padrão. Há várias implementações:

  • gawk — A versão GNU do awk, veja gawk(1).
https://www.gnu.org/software/gawk/ || gawk (parte do base)
  • nawk — A única e verdadeira implementação do AWK, veja nawk(1).
https://www.cs.princeton.edu/~bwk/btl.mirror/ || nawk
  • mawk — Uma implementação muito rápida do AWK.
http://invisible-island.net/mawk/ || mawkAUR
  • BusyBox também inclui uma implementação do AWK.

cat

cat é um utilitário padrão do Unix que concatena arquivos para a saída padrão.

  • Porque o cat não é embutido no shell, em muitas ocasiões você pode achar mais conveniente usar um redirecionamento, por exemplo em scripts, ou se você se preocupa muito com desempenho. De fato, < arquivo faz o mesmo que cat arquivo.
  • cat pode trabalhar com várias linhas:
$ cat << EOF >> caminho/arquivo
primeira linha
...
última linha
EOF

Alternativamente, usando printf:

$ printf '%s\n' 'primeira linha' ... 'última linha'
  • Se você precisa listar linhas na ordem reversa, há um coreutil chamado tac (cat inverso).

chmod

Veja File permissions and attributes#Changing permissions.

chown

Veja File permissions and attributes#Changing ownership.

dd

dd é um utilitário para o Unix e sistemas operacionais similares Unix, cujo principal objetivo é converter e copiar um arquivo.

Similarmente ao cp, por padrão o dd faz cópia bit a bit do arquivo, mas com recursos de controle de fluxo de E/S de baixo nível.

Alguns aplicativos notáveis de dd são:

  • Patches de arquivos binários: digamos que se queira substituir offset 0x123AB de um arquivo com a sequência hexadecimal FF C0 14, isso pode ser feito com a linha de comando:
    # printf '\xff\xc0\x14' | dd seek=$((0x123AB)) conv=notrunc bs=1 of=/caminho/para/arquivo

Para mais informações, veja dd(1) ou da documentação completa.

Dica: Por padrão, dd emite nada até a tarefa está finalizada. Para monitorar o progresso da operação, adicione a opção status=progress ao comando.
Atenção: Deve-se ter muito cuidado ao usar dd, pois, assim como qualquer comando desse tipo, ele pode destruir dados de forma irreversível.

find

find é parte do pacote findutils, que pertence ao grupo de pacotes base.

Dica: fd é uma alternativa simples, rápida e amigável ao find que fornece mais padrões sensíveis (p. ex., ignora arquivos ocultos, diretórios e arquivos listados no .gitignore, fd PADRÃO em vez de find -iname '*PADRÃO*'). Possui saída colorida (semelhante ao ls), suporte a Unicode, expressões regulares e muito mais.

Provavelmente se esperaria que um comando find levasse como argumento um nome de arquivo e pesquisasse no sistema de arquivos para arquivos que correspondessem a esse nome. Para um programa que faz exatamente isso, veja #locate abaixo.

Em vez disso, find leva um conjunto de diretórios e combina cada arquivo abaixo deles contra um conjunto de expressões. Este design permite alguns "one-liners" muito poderosos que não seriam possíveis usando o design "intuitivo" descrito acima. Veja GregsWiki:UsingFind para detalhes de uso.

grep

grep (de g/re/p, global/regular expression/print, do ed) é um utilitário de pesquisa de texto de linha de comando originalmente escrito para Unix. O comando grep pesquisa arquivos ou entrada padrão para linhas correspondendo a uma expressão regular dada, e imprime essas linhas para a saída padrão.

  • Lembre-se que grep trata de arquivos, então um construto como cat arquivo | grep padrão pode ser substituído com grep padrão arquivo
  • Há alternativas ao grep otimizadas para código fonte em VCS, tal como ripgrep, the_silver_searcher e ack.
  • Para incluir números de linha de arquivo na saída, use a opção -n.
  • grep também pode ser usado para pesquisa hexadecimal em um arquivo binário, para procurar por, digamos, a sequência A1 F2 em um arquivo, a linha de comando é:
    $ LANG=C grep --text --perl-regexp "\xA1\xF2" /caminho/para/arquivo
Nota: Alguns comandos enviam suas saídas para stderr(3) e o grep não tem aparente efeito. Neste caso, redirecione stderr para stdout com comando 2>&1 | grep args ou (par Bash 4) comando |& grep args. Veja também Redirecionamento de E/S (inglês).

Para suporte a cores, veja Color output in console#grep.

Veja grep(1) para mais detalhes.

iconv

iconv converte uma codificação de caracteres de um codeset para outro.

O seguinte comando vai converter o arquivo foo de ISO-8859-15 para UTF-8, salvando-o em foo.utf:

$ iconv -f ISO-8859-15 -t UTF-8 foo > foo.utf

Veja iconv(1) para mais detalhes.

Converter um arquivo no lugar

Dica: Você pode usar recode em vez do iconv se você não deseja tocar no mtime.

Ao contrário do sed, iconv não fornece uma opção para converter um arquivo no lugar onde se encontra. Porém, sponge do pacote moreutils pode ajudar:

$ iconv -f WINDOWS-1251 -t UTF-8 foobar.txt | sponge foobar.txt

Veja sponge(1) para detalhes.

ip

ip permite que você mostre informações sobre dispositivos de rede, endereços IP, tabelas de roteamento e outros objetos no Linux. Software de IP. Ao anexar vários comandos, você também pode manipular ou configurar a maioria desses objetos.

Nota: O utilitário ip é fornecido pelo pacote iproute2, que está incluído no grupo base.
Objeto Propósito Página de manual
ip addr gerenciamento de endereço de protocolo ip-address(8)
ip addrlabel gerenciamento de rótulo de endereço de protocolo ip-addrlabel(8)
ip l2tp tunelamento de Ethernet over IP (L2TPv3) ip-l2tp(8)
ip link configuração de dispositivo de rede ip-link(8)
ip maddr gerenciamento de endereços de multicast ip-maddress(8)
ip monitor monitore por mensagens de netlink ip-monitor(8)
ip mroute gerenciamento de cache de roteamento de multicast ip-mroute(8)
ip mrule regra no banco de dados de política de roteamento multicast
ip neigh gerenciamento de tabelas de vizinhança/ARP ip-neighbour(8)
ip netns gerenciamento de espaço de nome de rede de processo ip-netns(8)
ip ntable configuração de tabela de vizinhança ip-ntable(8)
ip route gerenciamento de tabela de roteamento ip-route(8)
ip rule gerenciamento de banco de dados de políticas de roteamento ip-rule(8)
ip tcp_metrics gerenciamento para Métricas de TCP ip-tcp_metrics(8)
ip tunnel configuração de tunel ip-tunnel(8)
ip tuntap gerencia dispositivos TUN/TAP
ip xfrm gerencia políticas IPsec ip-xfrm(8)

O comando help está disponível para todos os objetos. Por exemplo, digitar ip addr help mostrará a você a sintaxe de comando disponível para o objeto do endereço. Para uso avançado, veja o documentação do iproute2.

O artigo Configuração de rede mostra como o comando ip é usado na prática para várias tarefas comuns.

Nota: Você pode estar familiarizado com o comando ifconfig, que era usado em versões antigas do Linux para configuração de interface. Ele está obsoleto no Arch Linux; em vez dele, você deve usar o ip.

less

less é um programa paginador de terminal usado para visualizar os conteúdos de um arquivo texto uma tela por vez. Embora parecido com outros paginadores, como o more e pg, less oferece uma interface mais avançada e um conjunto de recursos mais completo.

Veja List of applications#Terminal pagers para alternativas.

Vim como alternativa de paginador

Vim inclui um script para visualizar o conteúdo de arquivos texto, arquivos comprimidos, binários e diretórios. Adicione a seguinte linha para o arquivo de configuração do seu shell para usá-lo como paginador:

~/.bashrc
alias less='/usr/share/vim/vim80/macros/less.sh'

Há também uma alternativa para a macro less.sh, que pode funcionar como a variável de ambiente PAGER. Instale vimpager e adicione o seguinte para o arquivo de configuração do seu shell:

~/.bashrc
export PAGER='vimpager'
alias less=$PAGER

Agora, programas que usam a variável de ambiente PAGER, como o git, vão usar vim como paginador.

locate

Instale o pacote mlocate. O pacote contém uma unidade updatedb.timer, que invoca uma atualização do banco de dados a cada dia. O temporizador é ativado logo após a instalação, inicie manualmente se você quiser usá-lo antes de reiniciar. Você também pode executar manualmente updatedb como root a qualquer momento. Por padrão, os caminhos como /media e /mnt são ignorados, portanto, locate pode não descobrir arquivos em dispositivos externos. Veja a updatedb(8) para obter detalhes.

O comando locate é uma ferramenta Unix comum para encontrar rapidamente arquivos pelo nome. Ele oferece melhorias de velocidade ao longo da ferramenta find pesquisando um arquivo de banco de dados pré-construído, em vez do sistema de arquivos diretamente. A desvantagem dessa abordagem é que as mudanças feitas desde a construção do arquivo de banco de dados não podem ser detectadas pelo locate.

Antes que o locate possa ser usado, o banco de dados precisará ser criado. Para fazer isso, execute updatedb como root.

Veja também How locate works and rewrite it in one minute ("Como locate funciona e rescreva-o em um minuto").

ls

ls lista conteúdos de diretório.

Veja info ls ou o manual online para mais informações.

exa é uma alternativa moderna e mais amigável para o ls e tree, que possui mais recursos, tal como exibir modificações Git junto com nomes de arquivos, colorizando diferentemente cada coluna no modo --long, ou exibindo no modo --long metadados junto com uma visão tree. exa

Formato longo

A opção -l exibe alguns metadados, por exemplo:

$ ls -l /caminho/para/diretório
total 128
drwxr-xr-x 2 archie users  4096 Jul  5 21:03 'Área de trabalho'
drwxr-xr-x 6 archie users  4096 Jul  5 17:37 Documentos
drwxr-xr-x 2 archie users  4096 Jul  5 13:45 Downloads
-rw-rw-r-- 1 archie users  5120 Jun 27 08:28 clientes.ods
-rw-r--r-- 1 archie users  3339 Jun 27 08:28 'a fazer'
-rwxr-xr-x 1 archie users  2048 Jul  6 12:56 meuscript.sh

O valor total representa a alocação de disco total para os arquivos no diretório, por padrão em número de blocos.

Abaixo, cada arquivo e subdiretório está representado por uma linha dividida em 7 campos de metadados, na ordem a seguir:

  • tipo e permissões:
    • o primeiro caractere é o tipo de entrada, veja info ls -n "What information is listed" para uma explicação de todos os tipos possíveis; por exemplo:
      • - denota um arquivo normal;
      • d denota um diretório, isto é, uma pasta contendo outros arquivos ou pastas;
      • p denota um pipe dado (também conhecido como FIFO);
      • l denota um link simbólico;
    • os caracteres restantes são permissões da entrada;
  • número de links absolutos para a entidade; arquivos serão pelo menos 1, isto é, a própria referência mostrada; as pastas terão pelo menos 2: a referência mostrada, entrada . autorreferenciada, e então uma entrada .. em cada uma dessas subpastas;
  • nome do usuário dono;
  • nome do grupo;
  • tamanho;
  • marca de tempo da última modificação;
  • nome da entidade.

Nomes de arquivos contendo espaços envoltos por aspas

Por padrão, nomes de arquivos e diretórios que contêm espaços são exibidos envoltos por aspas simples. Para alterar esse comportamento, use as opções -N ou --quoting-style=literal. Alternativamente, defina a variável de ambiente QUOTING_STYLE para literal. [1]

lsblk

lsblk(8) vai mostrar todos os dispositivos de blocos disponíveis junto com seus esquemas de particionamento, por exemplo:

$ lsblk -f
NAME   FSTYPE   LABEL       UUID                                 MOUNTPOINT
sda
├─sda1 vfat                 C4DA-2C4D                            /boot
├─sda2 swap                 5b1564b2-2e2c-452c-bcfa-d1f572ae99f2 [SWAP]
└─sda3 ext4                 56adc99b-a61e-46af-aab7-a6d07e504652 /

O início do nome do dispositivo especifica o tipo de dispositivo de bloco. A maioria dos dispositivos de armazenamento modernos (por exemplo, discos rígidos, SSDs e unidades flash USB) é reconhecida como disco SCSI (sd). O tipo é seguido por uma letra minúscula a partir de a para o primeiro dispositivo (sda), b para o segundo dispositivo (sdb), e assim por diante. As partições "existentes" em cada dispositivo serão listadas com um número a partir de 1 para a primeira partição (sda1), 2 para a segunda (sda2), e assim por diante. No exemplo acima, apenas um dispositivo está disponível (sda) e esse dispositivo possui três partições (sda1 para sda3), cada uma com um sistema de arquivo.

Outros tipos comuns de dispositivos de blocos incluem, por exemplo, mmcblk para cartões de memória e nvme para dispositivos NVMe. Tipos desconhecidos podem ser pesquisados na documentação do kernel.

mkdir

mkdir cria diretórios.

Para criar um diretório e toda sua hierarquia, a opção -p é usada; do contrário, um erro é impresso. Como os usuários devem saber o que eles querem, a opção -p pode ser usada como padrão:

alias mkdir='mkdir -p -v'

A opção -v o torna verboso.

Alterar o modo de um diretório recém-criado usando chmod não é necessário como a opção -m permite que você defina as permissões de acesso.

Dica: Se você já quer um diretório temporário, uma alternativa melhor pode ser o mktemp: mktemp -d.

mv

mv move e renomeia arquivos e diretórios.

Para limitar dano potencial causado pelo comando, use um alias:

alias mv='timeout 8 mv -iv'

Esse alias suspende mv após 8 segundos, pede confirmação antes de sobrescrever quaisquer arquivos existentes, lista as operações em progresso e não armazena ele mesmo no arquivo de histórico do shell se o shell estiver configurado para ignorar comandos iniciando com espaço.

od

O comando od (octal dump) é útil para visualizar dados que não estejam em um formato legível por humanos, como o código executável de um programa, ou o conteúdo de um dispositivo não formatado. Veja o manual para mais informações.

pv

Você pode usar pv (pipe viewer) para monitorar o progresso de dados por meio de um pipeline, por exemplo:

# dd if=/origem/fluxo_arquivo | pv -opções_monitoramento -s tam_de_arquivo | dd of=/destino/fluxo_arquivo

Na maioria dos casos, pv funciona como um substituto para cat.

rm

rm remove arquivos ou diretórios.

Para limitar danos potenciais causados pelo comando, use um alias:

alias rm='timeout 3 rm -Iv --one-file-system'

Este alias suspende rm após três segundos, solicita confirmação para excluir três ou mais arquivos, lista as operações em andamento, não envolve mais de um sistema de arquivos e não se armazena no arquivo de histórico de shell se o shell estiver configurado para ignorar os comandos iniciais do espaço. Substitua -I por -i se preferir confirmar mesmo para um arquivo.

Usuários do zsh podem querer colocar noglob antes de timeout para evitar expansões implícitas.

Para remover diretórios que se acredita estarem vazios, use rmdir, pois ele falha se houver arquivos dentro do alvo.

sed

sed é um editor do fluxo para filtrar e transformar texto.

Aqui está uma lista útil de exemplos de um só linha com sed.

Dica: Alternativas mais poderosa são awk e o idioma Perl.

seq

seq imprime uma sequência de números. Alternativas embutidas em shell estão disponíveis, então é de boa prática usá-las como explicado no Wikipédia.

ss

ss é um utilitário par investigar portas de rede e é parte do pacote iproute2 no grupo base. Tem uma funcionalidade similar ao utilitário obsoleto netstat.

Uso comum inclui:

Exiba todos os soquetes TCP com nomes de serviços:

$ ss -at

Exiba todos os soquetes TCP com números de portas:

$ ss -atn

Exiba todos os soquetes UDP:

$ ss -au

Para mais informações, veja ss(8) ou ss.html do pacote iproute2.

tar

Como um formato de arquivamento antigo do Unix, arquivos .tar – conhecidos como "tarballs" – são amplamente usados para empacotamento nos sistema operacionais tipo Unix. Os pacotes de tanto o pacman quanto AUR são comprimidos em tarballs, e o Arch usa o programa tar do Projeto GNU por padrão.

Para pacotes .tar, tar por padrão vai extrair o arquivo conforme sua extensão:

$ tar xvf arquivo.EXTENSÃO

Forçando um formato dado:

Tipo de arquivo Comando de extração
arquivo.tar tar xvf arquivo.tar
arquivo.tgz tar xvzf arquivo.tgz
arquivo.tar.gz tar xvzf arquivo.tar.gz
arquivo.tar.bz bzip -cd arquivo.bz | tar xvf -
arquivo.tar.bz2 tar xvjf arquivo.tar.bz2
bzip2 -cd arquivo.bz2 | tar xvf -
arquivo.tar.xz tar xvJf arquivo.tar.xz
xz -cd arquivo.xz | tar xvf -
arquivo.tar.zst tar -I zstd xvf arquivo.tar.zst

A construção de alguns dos argumentos do tar podem ser considerado legado, mas eles ainda são úteis ao realizar operações específicas. Veja tar(1) para detalhes.

which

which mostra o caminho completo de comandos shells. No exemplo a seguir, o caminho completo de ssh é usado como argumento para journalctl:

# journalctl $(which sshd)

wipefs

wipefs pode listar ou apagar assinaturas de sistema de arquivos, RAID ou tabela de partições (strings mágicas) do dispositivo específico. Ela não apaga os sistemas de arquivos em si nem quaisquer outros dados do dispositivo.

Veja wipefs(8) para mais informações.

Por exemplo, para apagar todas as assinaturas do dispositivo /dev/sdb e criar uma arquivo backup de assinatura ~/wipefs-sdb-deslocamento.bak para cada assinatura:

# wipefs --all --backup /dev/sdb

Veja também