Primeiras aulas do curso Certificação Linux LPI Essentials parte 3: Command Line Basics

Certificação Linux LPI Essentials parte 3: Command Line Basics

A sintaxe da linha de comando - Introdução

Esse curso prepara para a certificação do Linux Essentitials do LPI. Nesse curso falaremos sobre o objetivo de encontrar o caminho no sistema Linux, em geral. Principalmente, na parte de linha de comanda básica.

Falaremos sobre o shell, sobre a sintaxe de uma linha de comando e as diversas maneiras de evocar os distintos comandos, sobre configurar o ambiente onde esse comando vai ser executados, os programas, sobre as variáveis, couching e etc.

Sempre conversando sobre isso para aplicar essas questões no dia a dia.

Então, vamos lá?!

A sintaxe da linha de comando - Basic shell, bash e echo

Tudo o que veremos a seguir é para a certificação e nos debruçaremos sobre todos esses aspectos aos poucos.

Primeiro, vamos começar a falar do basic shell, um shell que é básico.

Se formos na nossa máquina Ubuntu, podemos selecionar a opção para abrir um terminal:

Esse terminal está rodando um console que está conectado a uma entrada, o teclado, e a uma saída, que é essa janela que vemos na seguinte imagem:

Ele está rodando um shell dentro dele. O shell está encapsulando um comportamento de: "me diga qual o comportamento que você gostaria de executar".

O comando que nós vamos executar é "listar os arquivos", para isso, digitaremos ls e damos um "Enter". Quando digitarmos o comando e dermos um "Enter" o shell executará um o comando e devolverá o resultado.

ls
Desktop Downloads   Music   Public  Videos
Documents examples.desktop Pictures Templates

Existem dezenas de comandos que podem acompanhar o shell, mas isso depende também das características de cada shell. Ocorre um padrão para todos os shells e, inclusive, existe toda uma história de como eles foram desenvolvidos.

Um shell extremamente utilizado, atualmente, é o Bash, que é cobrado, inclusive, na prova. Podemos obter mais informações a repeito da história do Bash no link, [ https://en.wikipedia.org/wiki/Bash_(Unix_shell)][1]

O Bash é um unix shell, podemos visualizar nessa página, a história dos *shells. Teremos a descrição da origem deles, com os shells antigos, como o primeiro thompson shell, que era chamado de sh. Hoje, o original do sh é difícil de ser utilizado e encontrado no dia a dia. Depois dele foram surgindo outros shells, como o "bourne shell" que por ter sido reescrito por Stephen Bourne recebeu esse nome. Esse "bourne shell" suportava diversas características. A partir desse momento surgiram diversos "shells", como o "C shell", que tentava suportar comandos baseados na linguagem de programação C, por exemplo, se o desejo era o de fazer um laço, este se assemelharia a linguagem C. O C Shell buscava, portanto, se assemelhar, mas não ser igual.

"Bash" é uma abreviação das iniciais de "bourne again shell", isto é, b-a-sh. O "Bash" permite rodar diversos comandos, ele permite que você diga que gostaria de executar vários programas. O mais famoso dos shells que foram surgindo ao longo do tempo e o que nos interessa mais, é, justamente, o "bourne shell again", o bash. Ele foi reescrito para a comunidade do GNU Project. Ele possui um conjunto de funcionalidades que eram disponíveis no bourne shell original. Ele é extremamente comum e aparece em uma quantidade enorme nas distribuições do Linux e também do Mac OS X.

Não precisamos decorar a história, mas é interessante saber que existiu, primeiro, um shell original e que depois foram surgindo o bourne shell e outras diversas variações, como o C shell e também o Bourne Again Shell, o Bash, que é o que utilizaremos aqui, pois, em uma maior parte das distribuições é com ele que iremos nos deparar.

Quando estamos no terminal e mandamos executar um comando, por exemplo, o ls novamente, o shell pega esse comando e manda executá-lo e pegando o resultado pergunta para nós: "Qual o próximo comando que você quer que eu execute?".

ls
Desktop Downloads   Music   Public  Videos
Documents examples.desktop Pictures Templates
ls
Desktop Downloads   Music   Public  Videos
Documents examples.desktop Pictures Templates

Este é o papel do shell: ele suporta diversos comandos e suporta também programação. Podemos programar para ele, criar laços, variáveis, condicionais e muito mais. O básico do shell é, portanto, poder executar comandos como, por exemplo, o ls, para listar arquivos. Já mencionamos que o Bash é uma implementação de um shell extremamente famoso e muito utilizado no mercado.

Vamos observar mais um comando, o echo. O echo devolve coisas. É como se falássemos algo para ele, uma palavra, por exemplo, "Guilherme", e ele irá nos responder devolvendo essa mesma palavra. Vamos testá-lo para descobrir o que faz esse comando:

echo Guilherme
Guilherme

Vamos testar agora com uma frase:

echo Guilherme
Guilherme
echo Guilherme, bom dia.
Guilherme, bom dia.

O echo devolve, exatamente, o que falamos para ele. E como sei que o echo e ls são comandos do shell e não programas que são executáveis? Podemos perguntar isso utilizando o type. Perguntaremos sobre o ls:

type ls 
ls is aliased to `ls --color=auto`

Aqui, vemos que o lsna verdade é uma aliased, isto é, ele possui um outro nome, uma espécie de apelido que estamos dando para o comando ls -- color=auto.

A sintaxe da linha de comando - O comando type

Bom, já falamos sobre o echo e sobre o ls. O comando echo foi implementado pelo shell. Mas, como podemos provar isso? Simples, vamos perguntar para o shell qual é o tipo de comando.

type echo
echo is a shell builtin

Ele nos respondeu que echo é um comando construído, builtin, internamente no shell, o que significa que ele é interno ao shell. Podemos pegar, ainda, outros comandos típicos do shell para descobrir outras coisas. Podemos perguntar sobre "Qual o diretório atual?". Para descobrir isso usamos o pwd.

pwd
/home/guilherme

Ele respondeu que o diretório atual é /home/guilherme. Será que esse pwd é um comando implementado pelo shell ou ele é um programa que está instalado no Linux? Para descobrir isso, podemos usar o type pwd:

pwd
/home/guilherme
type pwd
pwd is a shell builtin

E aqui temos a reposta que ele também é interno ao shell. Tanto o echo, quanto o pwd são builtings do shell, isto é, comandos.

Vamos tentar com outra coisa, o zip. Se digitarmos zip e dermos "Enter" teremos a seguinte tela:

Como podemos observar, ele mostrará diversas mensagens na tela. O zip é um programa que está em usr em zip.

type zip
zip is hashed(/usr/bin/zip)

Toda vez que chamamos um zip ele também trará consido o /bin e o /usr. E se digitarmos o type unzip?

type zip
zip is hashed(/usr/bin/zip)
type unzip
unzip is /usr/bin/zip

Teremos o mesmo! Mas, qual a diferença entre os dois? O zip e o unzip são programas externos. Mas, por que o primeiro é hashed e o segundo não? Toda vez que executamos um comando no shell ele busca onde está o comando e quando ele acha ele mostra para nós. Toda busca que é realizada pode demorar um pouco. Porém, podemos ter uma resposta rápida em formato de cache. Depois que executamos o comando uma primeira vez, o shell esperto como é, descobre onde o comando está armazenado e guarda isso na memória, através de um cache. E isso é o hashed.

Bom, nós já tínhamos executado o zip. Lembra que digitamos o zipe demos um "enter" e várias mensagens surgiram em nossa tela? Ele jogou em um cash a informação de onde estava esse comando e nos informou que o zip foi encontrado pela última vez no /usr/bin/zip. Por isso, o zip é um hashed.

E o unzip? Bom, até esse momento ele não foi executado. Se executarmos o unzip, teremos também uma série de mensagens:

Podemos limpar nossa tela utilizando o clear e podemos perguntar qual o type unzip. Teremos a seguinte resposta:

type unzip
unzip is hashed (/usr/bin/unzip)

Vamos analisar o que o type nos informou, ele nos mostrou que o pwd é um shell builtin e mostrou que é um programa externo, pois ele vêm do usr/bin/unzip/. e observarmos apenas isso, pode significar que ele "cacheou", onde está esse programa, mas pode ser que ele ainda não tenha "cacheado". Se ele "cacheou", ele fala que o unzip is hashed.

Vamos ver também o type do clear e verificar o que ele é:

type clear
clear is hashed (/usr/bin/clear)

É clear é também um hashed, pois já o executamos várias vezes. O clear não é um comando do Bash é um programa que estamos executando.

type clear
clear is hashed (/usr/bin/clear)

Vamos ver um último exemplo de um comando, o type do ls. Já executamos o ls, mas ainda não testamos o type dele. Será que ele é um hashed externo ou será que ele é um builtin, ou, quem sabe, ele não seja nenhum dos dois?

type ls
ls is alliased to `ls --color=auto`

Repare que, no Ubuntu Desktop, vamos ter um resultado. Se você rodar em outros aplicativos o resultado pode ser diferente. Pode ser que esteja configurado de maneira distinta. Mas, aqui, o ls está configurado para que seja um apelido, um aliased, para --color=auto. Quando executamos o ls, na verdade, ele está executando o ls --color=auto. O type nos diz, então, que o lsé um apelido. Assim, se executarmos o ls --color=auto teremos o mesmo resultado se somente executássemos o ls:

ls --color=auto
Desktop Downloads   Music   Public  Videos
Documents examples.desktop Pictures Templates
ls
Desktop Downloads   Music   Public  Videos
Documents examples.desktop Pictures Templates

Podemos criar apelidos, e por padrão o Ubuntu Desktop já vêm configurado com alguns apelidos. Por exemplo, por que mostrar o ls em preto e branco? É o usuário final que está usando o Linux e para ele é feio usar em preto e branco, por isso, já mostra colorido, com o padrão colorido, o --color=auto.

Vimos diversas variações do type e os diversos resultados que ele oferece. Mas, será que esses são todos os resultados possíveis do type?

Para nós, é importante saber quais são os resultados do builtin, os que vêm de dentro do nosso shell e saber, também, quais são os externos. Isto é, se ele é builtin é shell builtin e se ele não é builtin ele é alguma outra coisa que o type irá nos informar. Vamos executar outro comando, o date, como mais um exemplo:

date
Ter Mar 8 09:18:54 BRT 2016

O date nos fornece a data e o horário, inclusive com o time zone, o BRT, Brazilian Time. E podemos executar também o type do date.

date
Ter Mar 8 09:18:54 BRT 2016
type date
date is hashed (/bin/date)

O type do date já está "hasheado" para (/bin/date). Que é um outro comando. E como fazemos para descobrir um pouco mais a respeito do comando type? Vamos dar um clear na tela. Para saber isso podemos pedir ajuda, digitando help type.

Repare na ajuda que ele vai dar, falando o que o programa faz. Ele mostra informações sobre o comando e como ele pode ser usado, por exemplo, type -a, -f, -p, -t . Ele fala as opções, por exemplo, vamos observar o -t, ele mostra uma palavra apenas, que pode ser alias, keyword, uma function, uma builtin, um file ou alguma outra coisa específica.

O que podemos fazer é executar o type com -t. Para isso vamos limpar a tela, damos um clear. E digitamos type pwd e type -t pwd. Teremos:

type pwd
pwd is a shell builtin
type -t pwd
builtin

No type -t pwd teremos apenas o builtin. Vamos executar outro type, o type if:

type pwd
pwd is a shell builtin
type -t pwd
builtin
type if
if is a shell keyword

O type if é uma palavra chave do shell. Podemos executar, ainda, um type -t ife ele mostrará apenas a palavra keyword.

type pwd
pwd is a shell builtin
type -t pwd
builtin
type if
if is a shell keyword
type -t if
keyword

Perceba que depende muito do que você está buscando, isto é, para quê você está utilizando o type?

Repare que o help, um espaço e o nome do comando, como em help type vai fazer com que tenhamos acesso as informações do shell. Veremos, mais adiante, diversas maneiras de pegar ajuda sobre comandos, sejam do shell, sejam de fora. Agora, o type é quem vai nos fornecer essas informações, uma vez que ele é quem cobrado.

Cuidado! A prova pode cobrar simplesmente qual a função do type. Retomando, o type serve para entendermos se aquilo que o acompanha é um comando, um programa, uma palavra chave do shell, uma função e etc. Isto é, ele nos ajuda a compreender o que é aquilo que a gente está perguntando?

E quais são os parâmetros, as opções que a prova pode cobrar da gente no type? Bom, qualquer coisa que está descrita no help type pode cair na prova. Na verdade, existe uma infinidade de comandos com suas respectivas infinidades de opções que a prova pode cobrar. Não coseguimos saber exatamente o que será cobrado, mas, é mais provável que seja o que é utilizado no dia a dia.

Como já foi citado, no caso do type o mais comum é perguntar direto:

type pwd
pwd is a shell builtin

Ou perguntar qual o tipo:

type -t pwd
builtin

Essas são as questões mais comuns a respeito do type, mas é interessante que se leia também sobre o restante das informações, é o que deixaremos recomendado aqui! Leiam a documentação de todos os comandos que a gente ver a partir de agora.

Não passaremos, aqui, por todos esses conteúdos detalhadamente. Veremos todos os comandos que são citados na prova, veremos as opções principais desses comandos e é interessante que se leia toda a documentação a respeito desse comando para sabermos o que mais ele é capaz e fazer. As vezes a prova pode cobrar uma variação que não é tão comum. Mas, em geral, o que será cobrado são as opções mais comuns, não aquelas que são raras. Antigamente, ela era famosa por cobrar as opções raras, porém, não funciona mais assim. Claro, existe a possibilidade, então, lendo a documentação você pode garantir um acerto em uma questão dessas.

Finalizando, vimos o comando type para saber o tipo de comando que estamos executando, vimos também o dash e o echo.

Sobre o curso Certificação Linux LPI Essentials parte 3: Command Line Basics

O curso Certificação Linux LPI Essentials parte 3: Command Line Basics possui 238 minutos de vídeos, em um total de 38 atividades. Gostou? Conheça nossos outros cursos de Linux em DevOps, ou leia nossos artigos de DevOps.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Linux acessando integralmente esse e outros cursos, comece hoje!

Plus

  • Acesso a TODOS os cursos da plataforma

    Mais de 1200 cursos completamente atualizados, com novos lançamentos todas as semanas, em Programação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

12X
R$85
à vista R$1.020
Matricule-se

Pro

  • Acesso a TODOS os cursos da plataforma

    Mais de 1200 cursos completamente atualizados, com novos lançamentos todas as semanas, em Programação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

12X
R$120
à vista R$1.440
Matricule-se
Conheça os Planos para Empresas

Acesso completo
durante 1 ano

Estude 24h/dia
onde e quando quiser

Novos cursos
todas as semanas