103.1 Lição 1
Certificação: |
LPIC-1 |
---|---|
Versão: |
5.0 |
Tópico: |
103 Comandos GNU e Unix |
Objetivo: |
103.1 Trabalho na linha de comando |
Lição: |
1 de 2 |
Introdução
É comum que os recém-chegados ao mundo da administração do Linux e do shell Bash se sintam um pouco perdidos longe do conforto de uma interface gráfica. Eles estão habituados a acessar, com o botão direito do mouse, as dicas visuais e informações contextuais disponibilizadas pelos utilitários gráficos de gerenciamento de arquivos. Portanto, é importante aprender rapidamente a dominar o conjunto relativamente pequeno de ferramentas de linha de comando que permitem acessar instantaneamente todos os dados oferecidos por sua antiga interface gráfica - e muito mais.
Obtendo informações sobre o sistema
De olhos arregalados diante do tracinho piscando de um prompt de linha de comando, você provavelmente se pergunta “Onde estou?” Ou, mais precisamente, “Onde estou agora no sistema de arquivos do Linux? E, se eu criar um novo arquivo, onde ele vai parar?” O que você está procurando é o diretório de trabalho atual, e o comando pwd
responderá às suas dúvidas:
$ pwd /home/frank
Vamos supor que Frank esteja atualmente logado no sistema e em seu diretório pessoal: /home/frank/
. Se Frank criar um arquivo vazio usando o comando touch
sem especificar qualquer outro local no sistema de arquivos, o arquivo será criado em /home/frank/
. Se usarmos ls
para listar o conteúdo do diretório, veremos esse novo arquivo:
$ touch newfile $ ls newfile
Além de sua localização no sistema de arquivos, você também pode precisar de informações sobre o sistema Linux que está executando, como por exemplo o número exato da versão de sua distribuição ou a versão do kernel do Linux atualmente carregada. A ferramenta uname
é a resposta. E, em particular, uname
mais a opção -a
(“all”).
$ uname -a Linux base 4.18.0-18-generic #19~18.04.1-Ubuntu SMP Fri Apr 5 10:22:13 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
Neste caso, uname
mostra que a máquina de Frank tem o kernel do Linux versão 4.18.0 instalado e está executando o Ubuntu 18.04 em uma CPU de 64 bits (x86_64
).
Obtendo informações sobre comandos
Freqüentemente, você encontrará documentações falando sobre comandos do Linux com os quais ainda não está familiarizado. A própria linha de comando oferece todo tipo de informações úteis sobre o que os comandos fazem e como usá-los com eficácia. As referências mais úteis provavelmente estarão nos muitos arquivos do sistema man
.
Como regra, os desenvolvedores Linux escrevem arquivos man
e os distribuem junto com os utilitários que criam. Os arquivos man
são documentos altamente estruturados cujo conteúdo é dividido intuitivamente em cabeçalhos padronizados. Basta digitar man
seguido do nome de um comando para exibir informações como o nome do comando, uma breve sinopse de seu uso, uma descrição mais detalhada e alguns dados importantes sobre o histórico e as licenças de uso. Eis um exemplo:
$ man uname UNAME(1) User Commands UNAME(1) NAME uname - print system information SYNOPSIS uname [OPTION]... DESCRIPTION Print certain system information. With no OPTION, same as -s. -a, --all print all information, in the following order, except omit -p and -i if unknown: -s, --kernel-name print the kernel name -n, --nodename print the network node hostname -r, --kernel-release print the kernel release -v, --kernel-version print the kernel version -m, --machine print the machine hardware name -p, --processor print the processor type (non-portable) -i, --hardware-platform print the hardware platform (non-portable) -o, --operating-system print the operating system --help display this help and exit --version output version information and exit AUTHOR Written by David MacKenzie. REPORTING BUGS GNU coreutils online help: <http://www.gnu.org/software/coreutils/> Report uname translation bugs to <http://translationproject.org/team/> COPYRIGHT Copyright©2017 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. SEE ALSO arch(1), uname(2) Full documentation at: <http://www.gnu.org/software/coreutils/uname> or available locally via: info '(coreutils) uname invocation' GNU coreutils 8.28 January 2018 UNAME(1)
O comando man
só funciona quando fornecemos um nome de comando exato. Porém, se não tiver certeza do nome do comando que deseja pesquisar, use o comando apropos
para explorar os nomes e descrições das páginas man
. Se, por exemplo, você não consegue se lembrar de que uname
informa a versão atual do kernel do Linux, pode passar a palavra kernel
para apropros
. Aparecerão muitas linhas de saída, mas dentre elas haverá o seguinte:
$ apropos kernel systemd-udevd-kernel.socket (8) - Device event managing daemon uname (2) - get name and information about current kernel urandom (4) - kernel random number source devices
Caso não precise da documentação completa de um comando, pode obter seus dados básicos rapidamente usando type
. Neste exemplo, usamos type
para consultar quatro comandos separados ao mesmo tempo. Os resultados mostram que cp
(“copy”) é um programa que vive em /bin/cp
e que kill
(muda o estado de um processo em execução) é um comando interno do shell (shell builtin) — o que significa que é, na verdade, parte do próprio shell Bash:
$ type uname cp kill which uname is hashed (/bin/uname) cp is /bin/cp kill is a shell builtin which is /usr/bin/which
Note que, além de ser um comando binário regular como cp
, uname
também aparece como “hashed”. A razão para isso é que Frank recentemente usou uname
e, para aumentar a eficiência do sistema, o comando foi adicionado a uma tabela de hash para ficar mais acessível na próxima vez que for executado. Se Frank rodasse type uname
após a inicialização do sistema, ele constataria que type
voltaria a descrever uname
como um binário regular.
Note
|
Uma maneira mais rápida de limpar a tabela de hash é executar o comando |
Às vezes — principalmente ao trabalhar com scripts automatizados — precisamos de uma fonte mais simples de informações sobre um comando. O comando which
, que o comando type
do exemplo anterior rastreou para nós, retorna somente a localização absoluta de um comando. Este exemplo localiza os comandos uname
e which
.
$ which uname which /bin/uname /usr/bin/which
Note
|
Se quiser exibir informações sobre comandos internos do shell (“builtin”), use o comando |
Usando o histórico de comandos
Pode acontecer de você pesquisar cuidadosamente o uso adequado de um comando e executá-lo com êxito junto com uma seleção complicada de opções e argumentos. Mas o que ocorre algumas semanas depois, quando você precisa executar o mesmo comando com as mesmas opções e argumentos, mas não consegue se lembrar dos detalhes? Ao invés de recomeçar a pesquisa do zero, vale a pena tentar recuperar o comando original usando history
.
Digite history
para exibir os comandos mais recentes em ordem de execução. É fácil pesquisar nesses comandos usando um pipe para canalizar uma string específica para o comando grep
. O exemplo abaixo procura por qualquer comando que inclua o texto bash_history
:
$ history | grep bash_history 1605 sudo find /home -name ".bash_history" | xargs grep sudo
Aqui, um único comando é retornado junto com seu número na seqüência, 1605.
E por falar em bash_history
, esse é na verdade o nome de um arquivo oculto que costuma estar no diretório inicial do usuário. Por se tratar de um arquivo oculto (indicado pelo ponto que precede seu nome de arquivo), ele só será visível ao se listar o conteúdo do diretório, usando ls
com o argumento -a
:
$ ls /home/frank newfile $ ls -a /home/frank . .. .bash_history .bash_logout .bashrc .profile .ssh newfile
O que contém o arquivo .bash_history
? Dê uma olhada: você encontrará ali centenas e centenas de seus comandos recentes. No entanto, você pode se surpreender ao descobrir que alguns de seus comandos mais recentes estão ausentes. Isso porque, embora eles sejam instantaneamente adicionados ao banco de dados dinâmico history
, as últimas adições ao seu histórico de comandos não são gravadas no arquivo .bash_history
até o encerramento da sessão.
Para aproveitar o conteúdo de history
e tornar sua experiência na linha de comando muito mais rápida e eficiente, use as setinhas para cima e para baixo de seu teclado. Pressione a tecla para cima várias vezes para preencher a linha de comando com os comandos recentes. Quando chegar ao que está procurando, basta dar Enter para executá-lo. Assim, é fácil recuperar e, se desejado, modificar comandos diversas vezes durante uma sessão no shell.
Exercícios Guiados
-
Consultando o sistema
man
, descubra como fazer oapropos
mostrar apenas uma explicação curta de seu uso e em seguida voltar ao shell. -
Use o sistema
man
para determinar qual licença de copyright é atribuída ao comandogrep
.
Exercícios Exploratórios
-
Identifique a arquitetura de hardware e a versão do kernel do Linux que estão sendo usadas no seu computador em um formato de saída fácil de ler.
-
Imprima na tela as últimas vinte linhas do banco de dados dinâmico
history
e do arquivo.bash_history
para compará-los. -
Use a ferramenta
apropos
para identificar a páginaman
na qual se encontra o comando necessário para mostrar o tamanho de um dispositivo de bloco físico conectado em bytes, ao invés de megabytes ou gigabytes.
Resumo
Nesta lição, você aprendeu:
-
Como obter informações sobre a localização do sistema de arquivos e a pilha de software do sistema operacional.
-
Como encontrar ajuda para o uso de comandos.
-
Como identificar a localização do sistema de arquivos e os tipos de binários de comandos.
-
Como encontrar e reutilizar comandos executados anteriormente.
Os seguintes comandos foram abordados nesta lição:
pwd
-
Exibe o caminho para o diretório de trabalho atual.
uname
-
Exibe a arquitetura de hardware do sistema, a versão do kernel do Linux, a distribuição e a versão da distribuição.
man
-
Acessa os arquivos de ajuda com a documentação do uso dos comandos.
type
-
Exibe a localização de um ou mais comandos no sistema de arquivos e seu tipo.
which
-
Exibe a localização de um comando no sistema de arquivos.
history
-
Exibe ou reutiliza comandos executados anteriormente.
Respostas aos Exercícios Guiados
-
Consultando o sistema
man
, descubra como fazer oapropos
mostrar apenas uma explicação curta de seu uso e em seguida voltar ao shell.Rode
man apropos
e desça a sessão “Options” até encontrar o parágrafo--usage
. -
Use o sistema
man
para determinar qual licença de copyright é atribuída ao comandogrep
.Rode
man grep
e desça até a seção “Copyright” do documento. Note que o programa usa um copyright da Free Software Foundation.
Respostas aos Exercícios Exploratórios
-
Identifique a arquitetura de hardware e a versão do kernel do Linux que estão sendo usadas no seu computador em um formato de saída fácil de ler.
Rode
man uname
, leia a seção “Description” e identifique os argumentos de comandos que permitem exibir somente os resultados exatos que se deseja. Note que-v
mostra a versão do kernel e-i
a plataforma de hardware.$ man uname $ uname -v $ uname -i
-
Imprima na tela as últimas vinte linhas do banco de dados dinâmico
history
e do arquivo.bash_history
para compará-los.$ history 20 $ tail -n 20 .bash_history
-
Use a ferramenta
apropos
para identificar a páginaman
na qual se encontra o comando necessário para mostrar o tamanho de um dispositivo de bloco físico conectado em bytes, ao invés de megabytes ou gigabytes.Uma maneira seria executar
apropos
com o stringblock
, ler os resultados, notar quelsblk
lista os dispositivos de bloco (e assim seria a ferramenta mais provável para dar a resposta que buscamos), rodarman lsblk
, descer pela seção “Description” e notar que-b
exibe o tamanho de um dispositivo em bytes. Finalmente, executamoslsblk -b
para ver o que aparece.$ apropos block $ man lsblk $ lsblk -b