Skip to content

Latest commit

 

History

History
218 lines (139 loc) · 11 KB

cli.md

File metadata and controls

218 lines (139 loc) · 11 KB

Command-Line Interface

Uma das primeiras formas de se comunicar com computadores foi através de texto. Estes primeiros terminais eram conectados a impressoras de telégrafo (teletipos) que imprimiam em papel o que lhes era pedido. Até hoje pode-se encontrar resquício disso, o termo tty é uma abreviação para teletipo (teletype em inglês) que também é um nome para terminal.

Mais tarde, monitores com a tecnologia de tubos de raios catódicos (CRT) foram conectados a computadores. A transição foi simplesmente trocar o papel pela tela. Ao invés de imprimir em tinta, imprimia-se no monitor. As vantagens mais óbvias estavam na economia de papel e velocidade em que a informação era impressa na tela.

Como a programação consiste em escrever textos para serem interpretados por computadores, essa interface de comandos, há tanto tempo criada, ainda se mostra bastante prática.

Shell

A camada responsável por interpretar os comandos do usuário para a máquina é chamada de shell (concha ou casca). O shell encobre a camada mais baixa de um sistema operacional, o seu kernel, escondendo suas complexidades e dos detalhes técnicos de sua interface.

Existem várias implementações diferentes de shells, a mais antiga era chamada somente de shell foi distribuido no Unix de 1971 a 1975. Porém este shell foi completamente reescrito por Setephen Bourne e distribuido a partir de 1979 no Unix, esta implementação é chamada de Bourne Shell.

Atualmente existem diversos shells, o mais comum sendo o bash ou Bourne Again Shell que é uma brincadeira com o termo Born again ("nascido de novo" em inglês).

O Shell bash

A linguagem de comandos bash está presente na maioria dos sistemas operacionais descendentes ou inspirados no Unix como shell. O macOS X e diversas distribuições Linux são exemplos desses sistemas.

Então é pelo bash que temos uma interface de comunicação com o computador, através de comandos implementados neste shell podemos interagir com a máquina.

Mais…

Comandos

Todo comando é um programa que pode ser chamado pelo bash. Estes comandos ficam instalados em locais especificos do sistema em que o bash está configurado para buscar.

A maioria destes comandos terão nomes extremamente curtos para serem rápidos de digitar.

Mais…

Comando ls

O comando ls lista o conteúdo do diretório. Se você acabou de abrir o seu emulador de terminal, provavelmente o que lhe será apresentado como reposta é o conteúdo de seu diretório home. Para visualizar uma lista do que temos no diretório basta digitar ls e apertar (Enter):

ls no diretório home

Este diretório que é seu "lar" (home) é representado também como til (~). O motivo para isto é histórico, os teclados dos anos 70 (ADM-3A) para se digitar o til utilizava-se a tecla home.

Mais…

Estrutura de diretórios

Diretórios (ou pastas) no Linux e nos Unix são bastante diferentes do Windows. Por exemplo, quando um pendrive é conectado ele não vai aparecer como um novo disco, não existe sequer um C:\. Pode-se parecer desnecessário e confusa a complexidade da estrutura de diretórios dos Linux e Unix, porém essa mesma complexidade permite uma maleabilidade enorme destes sistemas quando se trata de gerenciamento de discos e arquivos.

A estrutura de diretórios nos Linux e Unix consiste em um diretório raíz (em inglês: root) que é onde todos os outros diretórios e arquivos podem ser criados.

O diretório raís é referenciado por uma barra (/) e a partir dele é possível chegar a qualquer arquivo ou outro diretório dentro do sistema.

O diretório home que é representado pelo ~ (til) encontra-se pelo caminho /home/ e tem o nome de seu usuário, que seria por exemplo /home/emperor/ para um usuario nomeado emperor, Para o usuário emperor, o ~ referencia este diretório. Estes são caminhos "absolutos", tem essa denominação pelo motivo de que estes caminhos indicam como chegar a um diretório (ou arquivo) a partir da raís do sistema. Isso porque este caminho (ou path, em inglês) inicia com /, sem qualquer palavra antes desta barra, a única referencia que se pode assumir é que esta é a referencia à raís.

Um caminho como Documents/arquivo_de_texto.txt é chamado de caminho "relativo" por não apresentar o "trajeto" inteiro desde a raís do sistema, dessa forma este caminho será relativo à algum outro local. Caminhos relativos fazem sentido por exemplo quando você quer abrir um diretório ou arquivo logo onde você está, sem ter que referenciar todo o caminho novamente a partir da raís.

Existem mais dois pontos a serem abordados sobre caminhos relativos:

  1. o . (ponto);
  2. e o .. (ponto duplo, ou ponto-ponto).

O . é uma referência ao diretório atual, considerando que você esteja em /home/emperor/Documents/, o . é uma referência para este diretório.

Enquanto o .. é uma referência ao diretório "pai" (ou parent), o diretório que contém o diretório atual, neste caso seria o /home/emperor/.

Todo diretório possui uma referência a ele mesmo (.) e ao seu parent (..), no caso do diretório /, seu parent é ele mesmo. O . é muito utilizado em casos que queremos executar algum arquivo que está logo no diretório que estamos:

executa asciiquarium

Neste exemplo, existe um arquivo executável chamado asciiquarium no diretório que estamos e para poder executá-lo, precisamos informar que estamos executando algo do diretório atual. Isso acontece por questões de segurança, executar alguma coisa sempre envolve algum risco e esta característica traz clareza a o que o usuário está querendo executar.

Comando pwd

É uma sigla para print the working directory, ou seja, mostre o diretório em que estou trabalhando no momento.

pwd no diretório home

O output (ou resposta) do pwd então é o path (caminho) "absoluto" de onde executamos este comando.

Parâmetros

Ou também chamados de argumentos, são valores informados à direita de algum comando. estes parâmetros são repassados para o comando que tem então seu comportamento alterado.

O uso de parâmetros é bastante intuitivo, cada palavra ou número separada por um ou mais espaços em branco ( ) será considerada um parâmetro diferente.

Existem outros caracteres que tem uma importância especial para o bash, que vai além do seu significado literal. Portanto são tratados de uma forma diferenciada e não são repassados como parâmetros. Para ver a lista completa destes caracteres, veja a sessão de caracteres especiais para o bash.

Nos casos onde algum destes caracteres deveria fazer parte do parâmetro que você quer passar, a solução é simples: basta colocar o parâmetro todo entre aspas simples ('), exemplo:

echo 'Olá mundo!'

Outra forma de fazer o mesmo é utilizando a barra invertida (\) antes do caractere que deveria ser ignorado por esse tratamento especial do bash e só repassada adiante. Exemplo:

echo Olá\ mundo\!

Neste exemplo, o espaço logo após a palavra Olá está sendo ignorado pelo interpretador bash e simplesmente entendido como parte do parâmetro, da mesma forma que o ponto de exclamação. Por causa deste comportamento, a barra invertida também é chamada de caractere de escape.

Mais…

Comando cd

Para navegar por estes diretórios existe o comando cd (change directory). Ele aceita um parâmetro, o diretório para o qual você pretende ir.

Por exemplo, para navegar até o diretório raíz, basta digitar o exemplo abaixo e apertar (Enter) ao final:

cd /

Caso não informado qualquer parâmetro para o comando cd o que irá acontecer é que o comando irá assumir o valor padrão e nos levará para o diretório home. Isso porquê o valor padrão para o parâmetro deste comando é o seu home. Exemplo:

cd

Dessa forma, executar cd sem passar um diretório é a mesma coisa que usar a referência ~ ao home como parâmetro:

cd ~

A forma fácil de se navegar para o direito "pai" do atual é usando a referência .. vista anteriormente, exemplo:

cd ..

Uma outra referência que o cd oferece para facilitar é o - (sinal de menos), usa-lo como parâmetro serve para voltar ao diretório que se estava antes da última execução do cd:

cd -

Ganhando agilidade com o autocomplete

O "segredo" para ganhar agilidade na digitação na interface de comandos do bash é o autocomplete ativado pela tecla Tab. Este é um recurso bastante inteligente que nos poupa digitação.

Quando se está digitando qualquer coisa e preciona-se o Tab, é feita uma busca por todos os possíveis valores para a palavra que está sendo digitada. Caso só exista uma opção, a palavra é completada automaticamente com um espaço ao final para continuar a digitar outras coisas.

Caso existam mais opções, somente será auto-completada a palavra até o ponto em comum com as outras opções:

autocomplete file .bash_profile

Caso esteja digitando algo e o autocomplete não completar nada é porque já existe mais de uma opção para o próximo caracter. Apertar mais uma vez o Tab nesta situação resulta em uma lista dos possíveis valores para o que se está sendo digitado.

Caso a lista de valores possíveis seja grande, o bash irá perguntar se tem certeza que deseja listar todas as opções.

Comando file

Uma característica interessante dos sistemas operacionais Linux e Unix é que estes não dependem de extensões (ex: .jpg, .pdf, .doc, etc.) dos arquivos para determinar o seu tipo. O que acontece é que existem outras formas de se determinar o tipo de um arquivo, o uso de extensões que foi popularizado pelo Windows não é a única forma.

Outras formas de se fazer isso é com base no início do conteúdo de o arquivo buscando por uma assinatura (file signatures - em inglês), ou buscando pelo MIME Type.

O comando file serve para identificarmos o tipo de um arquivo. Este comando recebe um parâmetro, que é o nome do arquivo que deseja-se identificar.

file asciiquarium

Caso pergunte por um diretório, a resposta será simplesmente file-system: directory.

Comando locate

  • updatedb

Comando mv

Comando cp

Comando rm

Comando mkdir

Comando rmdir

Comando touch

  • atualiza a data de edição de um arquivo

  • caso não exista o arquivo requisitado, cria o arquivo vazio

Comando history

O atalho Control C

Os comandos whatis e man

As Flags

Os Status que os comandos retornam