Um bash shell script para o Nautilus

#!/usr/bin/env bash

######################

# titulo: 1Bb-CV-mp4-2-mkv.sh
# data: 07-05-2020
# bash shell script para o nautilus
# -------------------
# autor: semanickz
# -------------------
# site: https://semanickz.worpress.com
# -------------------
# -------------------
# obs: este script é para o gerenciador de arquivos,
# no meu entender, ele é direcionado a "UM E APENAS UM ARQUIVO EM
# QUESTÃO" neste caso o "$1".
# ele executa o serviço direto no arquivo.
# não aparece terminal nenhum. Você pode escrever
# vários tipos de scripts para um arquivo.
# por exemplo toda vez que encontrar um certo
# tipo de arquivo clica nele e o envia para determinado
# diretório, ou faz o que quiser com ele
# -------------------
# -------------------

######################

# 1 - sobrescreve metadata
exiftool -all= -overwrite_original -ext "$1" .

# 2 - converte para mkv
for f in "$1"; do
ffmpeg -i "$f" -map_metadata -1 -c:v copy -c:a copy -map 0 "${f%.*}.mkv"
done

# 3 - remove mp4
sleep 3

for f in "$1"; do
rm -f "$f"
done

# ---- até aqui para cima, tudo bem.

## 4 ajusta título e sobrescreve metadata # não funcionou para mim
#for f in "$1"; do
#mkvpropedit "$f" -e info -s title="${f::-4}"
#mkvpropedit "$f" --tags all:
#mkvpropedit "$f" -d title
#done

# --- pesquisar pela web...

# ----- alias do meu .bashrc # funcionou no lugar do item ## 4
source MKV3b-remov-metadata-mkv.sh

# fim do script

Bash scripts para bot Telegram

Linux bash scripts para usar em bots no Telegram.

---

#!/usr/bin/env bash

########################

# test_telegr_bot_send_stickers.sh
# precisa do: 1) token, 2) chat_id, 3) código do sticker
# (acha com getupdates info de um sticker enviado a alguém)

########################

# ---- Variáveis ---- #

# TOKEN1=""

# URL_UP='https://api.telegram.org/bot"$TOKEN1"/getupdates'

# ------------------- #

read -p "*** Vamos ver os updates do bot. Tecle Enter ***"

read -p "Digite o TOKEN do bot : " TOKEN1

# ------------------- #

echo "Verificando..."

sleep 2

# curl "$URL_UP"

curl https://api.telegram.org/bot"TOKEN1"/getupdates

echo ""

# ------------------- #

echo "*** Enviar sticker ***"

sleep 2

echo ""

read -p "Digite o token : " TOKEN

read -p "Digite o chat_id : "

read -p "Digite o numero do sticker : "

# ------------------- #

# EXEMPLO:
# <a href="https://api.telegram.org/bot/sendSticker?chat_id=&sticker=BCBBADAgADOQADfyekzlsDlKEqOOd72VLKAg">https://api.telegram.org/bot/sendSticker?chat_id=&sticker=BCBBADAgADOQADfyekzlsDlKEqOOd72VLKAg

curl https://api.telegram.org/bot"TOKEN"/sendSticker?chat_id="CHAT_ID"&sticker="TICKER"

# ------------------- #

echo "Confere..."
sleep 2

echo ""

curl https://api.telegram.org/bot"TOKEN1"/getupdates

echo ""

# fim do script

---

#!/usr/bin/env bash

#################

# test_bot_enviar_arquivo.sh

# telegram bot enviar arquivo. tem que ter token e chat_id

#################

clear

read -p "Digite o Token : " TOKEN

read -p "Digite o chat_id : " CHAT_ID

read -p "Digite o nome/caminho do arquivo : " FILE

curl -v -F "chat_id=$CHAT_ID" -F document=@"$FILE" https://api.telegram.org/bot"TOKEN"/sendDocument

echo ""

# fim do script

---

#!/usr/bin/env bash

#################

# tgr_msg.sh

# telegram bot envia mensagem

#################

URL="https://api.telegram.org/bot$TOKEN/sendMessage"

clear

read -p "Digite o Token : " TOKEN

read -p "Digite o chat_id : " CHAT_ID ; read -p "Digite a mensagem : " MSG

curl -s -X POST "$URL" -d chat_id="$CHAT_ID" -d text="$MSG"

echo ""

# fim do script

---

#!/usr/bin/env bash

#################

# trg_search_id.sh

# busque atualizações de bot e procure o id do bate-papo

#################

read -p "Digite o Token : " TOKEN

curl https://api.telegram.org/bot"TOKEN"/getUpdates

echo ""

# fim do script

---

Até breve!

Bash script vídeo ou áudio

#!/usr/bin/env bash

############################

# Titulo: test_video_ou_audio.sh
# Autor: claytu_tir_1000%
# Versão: 0.0
# Email:
# Site:
# Data: 23-04-2020_10:05:28
# Distro: GNU/Linux
# Exemplo de uso:
# Objetivo: usar ferramenta para obter arquivo de video ou de áudio
# Variaveis:
# TODO - indica uma tarefa a ser feita
# FIXME - indica um bug conhecido que precisa ser arrumado
# XXX - notícia, chama a atenção

############################

clear # limpa a tela

# --------------------------------------- #

echo -e "\e[1m*** Ferramenta para download com youtube-dl ***\e[0m"

# --------------------------------------- #

read -p "Digite a URL : " URL # armazena URL

echo -e "Você digitou $URL" # imprime a URL

# --------------------------------------- #

echo -e "\e[1m*** Baixar vídeo digite (1) ou áudio (2) ***\e[0m"
# oferece duas opções

while : # loop while
do # fechamento de do é done
read DIGITE # armazena digito 1 ou 2
case $DIGITE in # caso o digito seja...
# fechamento de case é esac

# --------------------------------------- #

1) # dígito 1 executa...
echo -e "Você digitou: $DIGITE, baixando vídeo... "

firejail youtube-dl -cwi "$URL" # comando 1

break # sai após executar comando
;;

# --------------------------------------- #

2) # dígito 2 executa...
echo -e "Você digitou $DIGITE, baixando áudio... "

firejail youtube-dl --extract-audio --audio-format mp3 "$URL" # comando 2

break # sai após executar comando
;;

# --------------------------------------- #

*)
echo -e "Desculpe eu só entendo 1 e 2." # se não for nem 1 nem 2...

;;
esac # fechamento de case e sai

# --------------------------------------- #

done # fechamento de do e acabou

# --------------------------------------- #

echo -e "\n\e[1;33;40m*** E tá tudo resolvido! ***\e[0m\n" # mensagem final

# --------------------------------------- #

# fim do script

Brincando com REGEX no Linux OS

Linux expressoes regulares mais exemplos. Vou usar grep e grep -E.

grep é um utilitário de linha de comando para procurar conjuntos de dados de texto simples para as linhas que correspondem a uma expressão regular.

grep [OPÇÕES] expressão_regular arquivo

grep -E [OPÇÕES] expressão_regular arquivo

Expressão Regular = texto/strings

Caracter Descrição REGEX
. Qualquer letra
^ início da linha
$ final da linha
[xyz] Qualquer das letras dentro dos colchetes
[^xyz] Qualquer letra fora as dentro dos colchetes
[t-z] Qualquer das letras entre t e z
z* Letra z zero ou mais vezes
z+ Letra z uma ou mais vezes
?{0,1} Pode aparecer ou não (opcional)
*{0,} Pode aparecer em qualquer quantidade
+{1,} Deve aparecer no mínimo uma vez
a{2} Casa a letra ‘a’ duas vezes
a{2,4} Casa a letra ‘a’ de duas a quatro vezes
a{2,} Casa a letra ‘a’ no mínimo duas vezes
.* Casa qualquer coisa, é o tudo e o nada
^ início da linha
$ final da linha
[abc] casa com os caracteres a, b e c
[a-c] casa com os caracteres a, b e c
[^abd] não casa com os caracteres a, b e d
(um|dois) casa com as palavras um e dois
Repetições
a{2} casa com a letra “a” duas vezes
a{2,5} casa com a letra “a” duas a cinco vezes
a{2,} casa com a letra “a” duas vezes ou mais
a? casa com “a” letra a zero vezes ou uma
a* casa com a letra “a” zeros vezes ou mais
a+ casa com a letra “a” uma vez ou mais

Curingas/Coringas – Arquivo/Pasta
. casa com qualquer caracter uma vez
.* casa com qualquer caracter várias vezes
(esse|aquele) Casa as palavras ‘esse’ ou ‘aquele’

Eu criei uma pasta chamada TESTES e nela um arquivo de texto chamado passwd. Leio o que tem nele:

TESTES:$ cat ~/TESTES/passwd

23/03/2020

user:dodo:6625:false
baba Shell:sese:shell
user:bash:shell:5959:bash
ipopi:bash:mumu:bash
bobob:bash:pepe:shell
lelel:shell:dede:bash
ododo:shell:Wewe:bash
lolol:Bash:dodo:shell
aveve:bash:Pepe:bash
ioio:bash:7694:false:bash
kekek:Shell:5813:false:bash
Aveve:bash:Pepe:4906:bash
user:false:popi:opepe:bash
dede:yuyu:popo:shell
vivi:55288:eionc:shell
linux:dada:ngng:8592:shell:bash
unix:drtdrt:bgfbgf:3856:shell
a1:eses:1524:uiop:bash
b2:rere:5143:poiu:shell
e3:wewe:2431:uiop:linux
r5:aeae:5134:poiu:bash
h4:gege:2435:uiop:unix
User:false:popi:opepe:bash

Exemplos

Procura a palavra user no arquivo ~/TESTES/passwd

~:$ grep user ~/TESTES/passwd

Procura todas as linhas começadas pela letra u no arquivo:

~:$ grep ‘^u’ ~/TESTES/passwd

Procura todas as linhas terminadas pela palavra false no arquivo:

~:$ grep ‘false$’ ~/TESTES/passwd

Procura todas as linhas começadas pelas vogais no arquivo:

~:$ grep ‘^[aeiou]’ ~/TESTES/passwd

Procura todas as linhas começadas por qualquer caracter e segundo caracter seja qualquer vogal no arquivo:

~:$ grep ‘^.[aeiou]’ ~/TESTES/passwd

Procura todas as linhas que contenham uma sequência de 4 números consecutivos:

~:$ grep ‘[0-9][0-9][0-9][0-9]’ ~/TESTES/passwd

Comando para encontrar linhas em branco:

~:$ grep ‘^$’ ~/TESTES/passwd

Encontrar e contar linhas em branco:

~:$ grep ‘^$’ ~/TESTES/passwd | wc -l

Encontrar mesmo nome, porém com letra inicial minúscula e maiúscula:

grep ‘[Uu]ser’ ~/TESTES/passwd

Encontrar 27 sequência ^ de 27 caracteres:

~:$ grep -E ‘^.{27}$’ ~/TESTES/passwd

Note que foi usado o grep -E e não o grep. É porque as chaves fazem parte de um conjunto avançado de Expressões Regulares (“extended”), então o grep -E lida melhor com elas. Se fosse para usar o grep normal, teria que “escapar” as chaves.

~:$ grep ‘^.\{27\}$’ ~/TESTES/’Linux shell script tomar decisoes.txt’

~:$ grep -E ‘^.{20,40}$’ ~/TESTES/passwd

Para obter as linhas que possuem 40 caracteres ou mais:

~:$ grep -E ‘^.{40,}$’ ~/TESTES/passwd

Econtrar números com 3 dígitos (de 0 a 9) ou mais:

grep -E ‘[0123456789]{3,}’ ~/TESTES/passwd

~:$ grep -E ‘[0123456789]{3,}’ ~/TESTES/passwd

Econtrar linhas que começam com ‘vogal minúscula’ e terminam com a palavra ‘bash’, usa−se o curinga “.*” para significar “qualquer coisa”(não confunda com “qualquer caracterer” somente “.”):

TESTES:$ grep -E ‘^[aeiou].*bash$’ ~/TESTES/passwd
ipopi bash:mumu bash
ododo shell:wewe bash
aveve bash:pepe bash

Procura linhas que comecem com a palavra ‘e3’ ou ‘vivi’ ou ‘user’:

grep -E ‘^(e3|vivi|user)’ ~/TESTES/passwd

Procura todas as linhas que NÃO comecem com a letra minúscula ‘m’

grep -E ‘^[^mumu]’ ~/TESTES/passwd

Continuo a brincar alterando exemplos.

Cola comandos:

Linux tomada de decisões

Linux shell script tomar decisoes: if then else elif fi case – Exemplos Práticos

Shell script nome dado a um arquivo que será interpretado por algum programa tipo Shell. Atualmente existem vários programas tipo Shell, além dos principais sh e bash, existem também, ksh, zsh, csh e tcsh. Um Shell script ou script em Shell necessita basicamente do interpretador (Shell). Algumas operações típicas executadas por linguagens de script em Shell incluem; manipulação de arquivos, execução de programas e impressão de texto. Sendo assim é muito comum ver scripts sendo utilizados para automatização de tarefas, como configurar o ambiente, executar um programa e fazer qualquer limpeza, registro, etc.
– wiki

Para declarar que o script deve ser interpretado por Bourne-Again shell (Bash) é recomendável a utilização do comando env, pelo fato que apesar de o Bash já vir instalado em muitas distribuições Linux, não sabemos se ele estará em todas elas no mesmo diretório /bin/, então use a seguinte forma:

#!/usr/bin/env bash

– wiki

Os comentários nas linguagens Bourne Shell (sh) e Bourne-Again Shell (bash) serão utilizados hashtag (#), Exemplo de comentários:

#Comentário
#- Segundo comentário
# // [ Terceiro comentário ] //

– wiki

Variáveis – Como qualquer outra linguagem de programação conhecida, um script em Shell também possui suporte a variáveis. Em uma breve explicação uma variável é um nome/objeto simbólico ao qual podemos atribuir valores, ler ou manipular o conteúdo.

– wiki

Os scripts em Shell possuem as seguintes variáveis pré-definidas:

$? – Armazena o status de saída do último programa executado;
$# – Armazena a quantidade de parâmetros de linha de comandos;
$$ – Armazena o valor PID (Process Identifier) do script em shell que estiver em execução;
$@ – Armazena o valor de todos os parâmetros passados, similar a variável argv presente nas linguagens de programação C e C++;
$! – Armazena o PID do último processo em segundo plano. Isso é útil para acompanhar o processo à medida que o trabalho é realizado;
$0, …, $9 – Armazena os valores de todos os parâmetros de linha de comando separadamente.

– wiki

Variáveis globais ou variáveis de ambiente globais, são variáveis criadas/definidas com o comando export e podem ser utilizadas por multiplos scripts em Shell. Um exemplo é a variável de ambiente LANG (Pré-definida em diversas distribuições Linux), Podendo ser acessada por diversos arquivos de script em Shell.

Outras variáveis pré definidas são:

PATH: define diretórios de procura por programas executados no shell;
USER: informa o nome do usuário do shell;
HOME: informa o caminho do diretório home do usuário;
LANG: Idioma/Linguagem, especificada como locale;
PWD: diretório atual;
TERM: Tipo de terminal atual em uso.
UID: UID do usuário atual.
RANDOM: Gera um número aleatório

– wiki

A duas formas de criar uma variável global, exportar uma variável pré definida ou definir quando for exportar:

VARIAVEL1=Teste
export VARIAVEL1
# Define e exporta com export
export VARIAVEL2=Teste

Array – Bourne Shell (sh) não é compatível com variáveis tipo array, mas Bourne-Again Shell (Bash) sim, exemplo simples de implementação:

#!/usr/bin/env bash
meu_array=(1 2 3 4 5 6 7 8 9)
meu_Array=(“abc” “def” “ghi”)

Chamar variáveis – Para chamar variáveis utiliza-se o sinal de cifrão $var. O cifrão ($) também é bastante utilizado em script sh, para executar programas externos exemplo: var=$(expr 2 + 2) irá armazenar a saída do programa expr. E o cifrão mais chave ${var} é comum ser utilizado das seguintes maneiras:

Para acessar posições em um array ${var[1]}. (obs.: não funciona para sh, apenas para Bash)

E também para substituir o valor de uma variável se a mesma não possuir um valor: ${var:-nome} – ${var:=nome} – ${var:-$(programa)} dessas maneiras irão substituir pelo que for passado depois de :- ou :=, exemplo em código:

read -p “Digite um nome: “myname
echo “${myname:=$(whoami)}”
O código acima irá pedir para o usuário digitar um nome, caso digite irá utilizar echo para imprimir o nome digitado na saída padrão, caso contrário irá substituir pela saída do comando whoami, ao invés de substituir pela saída de um comando, você pode substituir por outro valor exemplo: ${myname:=Bourne Shell}.

– wiki

Tomada de Decisões – Em toda linguagem de programação existe alguma estrutura para tomada de decisões. Essa estrutura em geral é feita através do comando “if”. O comando “if” analisa de uma expressão é verdadeira e então executa um bloco de código, caso a expressão seja falsa pode ser executado, ou não, um outro bloco. Em geral as linguagens de programação oferecem maneiras de verificar se um valor é igual, menor ou maior que outro. As formas mais comuns abaixo.

Para remover uma variável, utiliza-se o comando unset + nome da variável, você pode também remover múltiplas variáveis basta separá-las por espaços.

unset VAR
unset VAR1 VAR2 VAR3 VAR4

Declaração if para scripts em bash ou sh:

if [ $1 = $2 ]; then
echo “Parametro 1=$1 é igual a 2=$2.”
fi
Existe também outra forma:

[ $1 = $2 ] && { echo “Parametro 1 ($1) é igual a 2 ($2).”; exit 0; }

Declaração if else para scripts em bash ou sh, há diversas formas diferentes, tenha cuidado para não esquecer os espaços entre os colchetes eles são muito importantes:

A declaração if else mais comum e mais utilizada é a seguinte:

if [ $1 = $2 ]; then
echo “Parametro 1 ($1) é igual a 2 ($2).”
else
echo “Parametro 1 ($1) não é igual a 2 ($2).”
fi
Mas, existe uma abreviação que também é muito utilizada que é menor e muito boa para teste de linha única:

[ $1 = $2 ] && { echo “Parametro 1 ($1) é igual a 2 ($2).”; exit 0; } || { echo “Parametro 1 ($1) é diferente de 2 ($2).”; exit 0; }

Declaração else if para scripts em bash ou sh são diferentes de algumas linguagens de programação, exemplo:

if [ $3 ]; then
echo “$3”
elif [ $2 ]; then
echo “$2”
else
echo “$1”
fi

Case – Scripts em Bash ou sh, permitem case, a sintaxe é a seguinte:

case “$var” in
valor)
;;
esac

Scripts em Bash possui compatibilidade com Expressões Regulares, algo que scripts em Bourne Shell (sh) não reconhecem:

#!/usr/bin/env bash
[[ $1 =~ ^sh|SH$ ]] && { echo “$1 – Bourne Shell”; }

– wiki

EXEMPLOS PRÁTICOS PRATICADOS

Me acompanhe neste caminho simples.

Existem diversos operadores para cada Shell script, mas aqui serão passadas informações especificamente sobre Bourne shell por ser mais comum e muitos outros shell são similares.

PARA TRATAR NÚMEROS:

== : Igual à
!= : Diferente de
< : Menor que
> : Maior que
<= : Menor ou igual à
>= : Maior ou igual à

EM SHELL SCRIPT OS MESMOS TESTES SÃO OBTIDOS COM:

-eq : (equal) Igual à
-ne : (not equal) Diferente de
-lt : (less than) Menor que
-gt : (greater than) Maior que
-le : (less or egual) Menor ou igual à
-ge : (greater or equal) Maior ou igual à

O USO DO “IF” EM SHELL SCRIPT:

#!/usr/bin/env bash

# titulo: jamais.sh

if [ 4 -eq 6 ] # se 4 for igual a 6
then # então
echo “Esse echo jamais acontecerá” # comando 1
fi # fechamento obrigatório do if

# fim do script

É necessário manter espaços entre os colchetes e os números, ou variáveis. O bloco após a palavra “then” será executado se a expressão dentro do “if” for verdadeira. O bloco “if” termina com a palavra “fi” que é “if” ao contrário. Essa é uma maneira simples de identificar o final de um “if” quando o encontramos.

PARA FAZER COMPARAÇÕES COM TEXTOS USE:

= : Igual à (isso mesmo apenas um sinal de igual)
!= : Diferente de
-n : String existe e não é vazia (apenas um operador)
**-z** : String existe e é vazia (apenas um operador)

Esemplo, o “if” verifica se a variável $nome existe e está vazia, isso significa que o usuário não digitou o nome dele. A instrução “read” faz com que o shell leia alguma informação via teclado e retorne essa informação para a variável informada. Foi usada a palavra “else” que significa “senão”. Esse bloco é executado quando o “if” retorna um valor falso:

#!/usr/bin/env bash

# titulo: seu_nome.sh

# —————- #

echo “Digite seu nome: ” # comando echo
read NOME # comando read armazena o que digitou em NOME

# —————- #

if [ -z $NOME ] # se é apenas um operador
then # então
echo “Você não digitou seu nome!” # comando 1
else # se não
echo “Olá, $NOME” # comando 2
fi # fechamento obrigatório do if

# —————- #

# fim do script

O shell oferece mais opções para o “if” do que as linguagens de programação o fazem! Veja outras opções bem interessantes:

**-s ** : Arquivo existe, não vazio (apenas um operador)
**-f ** : Arquivo existe, não é um diretório (apenas um operador)
**-d ** : Diretório existe (apenas um operador)
**-w ** : Arquivo, com permissão de escrita (apenas um operador)
-r : Arquivo, com permissão de leitura (apenas um operador)
**-x ** : Arquivo, com parmissão de execução -x (apenas um operador)

Por exemplo, crio um diretório TESTES e nele um arquivo de texto vazio chamado meu_log_test.txt, dou permissão de execução e executo o script log_test.sh abaixo:

#!/usr/bin/env bash

# titulo: log_test.sh

ARQUIVO=”/home/user/TESTES/meu_log_test.txt”

if [ -f “$ARQUIVO” ] # se o aquivo meu_log_test.txt existir
then # então
echo “Continuando log…” >> “$ARQUIVO” # comando 1
else # se não
echo “Criando log…” > “$ARQUIVO” # comando 2
fi # fechamento obrigatório do if é fi

# fim do script

Executo e confiro o texto meu_log_test.txt. Resultado:

TESTES:$ ./log_test.sh
TESTES:$ cat meu_log_test.txt
Continuando log…
TESTES:$

Então fica assim, se o arquivo existir continue registrando, execute determinado comando, escreva “Continuando log…”. Se não existir crie o arquivo e escreva nele “Criando log…”.

Apague o arquivo meu_log_test.txt execute o script e veja o script funcionando.

Agora este script super simples, se executado com outros comandos pode fazer coisas bem úteis. O script que toma decisões é forte e útil.

IFs Aninhados – Chamamos de “ifs aninhados” as construções onde há um “if” dentro do bloco “then” ou “else” de outro “if”:

#!/usr/bin/env bash

# titulo: ifs_aninhados_test.sh

# ————– #

# primeiro read

echo “Digite seu nome: ”
read NOME

# ————– #

# segundo read

echo “Digite sua idade: ”
read IDADE

# ————– #

# ifs aninhados

if [ -z $NOME ]
then
echo “Você não digitou seu nome.”
else
echo “Seu nome é $NOME”
if [ $IDADE -gt 10 ] # se sua idade for mais que 10
then # então
echo “Você tem mais que 10 anos.”
else # se não
echo “Você tem 10 anos ou menos.”
fi # fechamento obrigatório do if
fi # fechamento obrigatório do else?

# ————– #

# fim do script

Resultado:

~:$ ifs_aninhados_test.sh
Digite seu nome:
Pipopi
Digite sua idade:
55
Seu nome é Pipopi
Você tem mais que 10 anos.
~:$

Entendendo o funcionamento deste script permite criar vários semelhantes a ele que podem ser usados de acordo com sua necessidade no teu dia a dia para executar tarefas rotineiras (ou não). Não importa se você tem 18, 20, 30 anos ou mais; saiba que este exemplo é recomanedado para todas as idades. Cada idade usará de uma maneira diferente? Provavelmente sim.

If MULTINÍVEL – PODE FAZER COMPARAÇÕES EM SEQUÊNCIA, COM O USO DO elif

#!/usr/bin/env bash

# titulo: if_elif_test.sh

# ————– #

echo “Digite um número”
read NUMERO

# ————– #

if [ $NUMERO -gt 0 ];
then
echo “Número positivo”

# ————– #

elif [ $NUMERO -lt 0 ]
then
echo “Número negativo”

# ————– #

elif [ $NUMERO -eq 0 ]
then
echo “Número é zero”

# ————– #

else
echo “O valor fornecido não é um número!”
fi

# fim do script

Resultado:

~:$ if_elif_test.sh
Digite um número
12
Número positivo
~:$

O SHELL OFERECE OPÇÕES COMO “case” PARA CONTROLE DE FLUXO. O comando “case” é usado para executar um bloco de código de acordo com o valor de uma variável. O comando “case” é interessante pois pode definir diversas opções diferentes sem usar uma estrutura com diversos comandos “if”, “elif” e “else”. O exibe uma mensagem e então pede uma informação do usuário. O usuário vai digitar alguma letra e então o comando “case” entra em ação. Ele verifica qual valor foi digitado pelo usuário e executa os blocos de código relativos a cada opção. Primeira opção é a padrão, por isso ela é executada mesmo que o usuário não digite um valor.Cada bloco do case é iniciado por um valor que a variável analisada pode ter, ou vários valores, separados por um pipe. Os blocos são finalizados por uma sequência de dois caracteres ‘ponto-e-vírgula’ (;;).

#!/usr/bin/env bash

# titulo: echo_read_case_esac_test.sh

echo -n “O que deseja fazer? (L)listar/(C)opiar texto/(S)air do script? [A] ”
read resposta

case “$resposta” in
l|L|””)
echo “Listando…”
sleep 3
ls -ltA
;;
c|C)
echo “Copiando arquivos .txt para Documentos”
sleep 3
cp -r *.txt ~/Documentos/
;;
s|S)
echo “Saindo…”
;;
*)
echo “Opção inválida”
;;
esac

Resultado exemplo:

~:$ echo_read_case_esac_test.sh
O que deseja fazer? (L)listar/(C)opiar texto/(S)air do script? [A] W
Opção inválida

Linux traduz texto no terminal

No Linux tem um programa muito útil chamado translate shell que roda no terminal. Decidi escrever um shell script que use este programa. Um script que armazenasse um bloco de texto e usa-se o programa para traduzir o bloco inteiro. Ai cria-se um alias de 3 letras que chama o script então é só digitar/colar o bloco de texto. Isto não é reinventar a roda, é um exercício basico que ensina muitas coisas em muitos aspectos. Confere o script abaixo:

#!/usr/bin/env bash

###################

# titulo: pt_trans_test.sh
# autor: semanickzaine
# site:
# para: traduzir textos longos
# uso: ./pt_trans_test.sh
# versao: 0.1
# data: 14-03-2020
# obs: este script precisa do programa
# Translate Shell
# alias:
# alias tdr=”~/bin/./pt_trans_test.sh”
# teste exemplo:
#
# ~:$ tdr
# Digite o texto a traduzir: I wrote a simpe bash script to demonstrate the next flag. First take a look at the output.
# Showing translation for: (use -no-auto to disable autocorrect)
# Eu escrevi um script bash simples para demonstrar a próxima flag. Primeiro, dê uma olhada na saída.
# Showing translation for: (use -no-auto to disable autocorrect)
# I wrote a simple bash script to demonstrate the next flag. First take a look at the output.
#
#E o serviço tá feito!

###################
# variaveis: variavel padrão do comando read
###################
# Conhecimento é poder?
# O comando read no Linux é uma maneira de os usuários interagirem com as
# entradas retiradas do teclado, que você pode chamar de stdin (entrada padrão)
# ou outras descrições semelhantes. se você quiser que seu script bash receba
# informações do usuário, será necessário usar o comando read.
# read [options] variable_name
# Comando de leitura sem opções – Quando você digita ler sem nenhuma opção
# adicional, é necessário pressionar Enter para iniciar a captura.
# O sistema capturará a entrada até você pressionar enter novamente.
# Por padrão, essas informações serão armazenadas em uma variável chamada:
# $REPLY
# comando:
# read
# hello world
# echo $REPLY
# hello world
# Prompt option -p
# Se você está escrevendo um script e deseja capturar a entrada do usuário,
# existe uma opção de leitura para criar um prompt que pode simplificar seu
# código. Codificar é tudo sobre eficiência, certo? Em vez de usar linhas
# adicionais e comandos de eco, você pode simplesmente usar o sinalizador de
# opção -p. O texto digitado entre aspas será exibido como pretendido e o
# usuário não precisará pressionar Enter para começar a capturar as entradas.
# Então, em vez de escrever duas linhas de código como esta:
# echo “What is your desired username? ”
# read username
# You can use the -p option with read command like this:
# read -p “What is your desired username? ” username
# The input will be saved to the variable $username.
# —————————— #

read -p “Digite o texto a traduzir: ”
for i in REPLY
do
trans -b :pt+eng “$REPLY”
done
echo -e “\nE o serviço tá feito!\n”

# —————————— #

Linux o comando basename exemplos

O comando basename exemplos? Comando basename no Linux?

Comando basename – Em sistemas operacionais do tipo Unix/Linux, o comando basename retira informações de diretório e sufixos dos nomes de arquivos.

Nome de base (basename) imprime o nome do arquivo NAME com os principais componentes de diretório removidos. Opcionalmente, também pode remover qualquer sufixo à direita.

Sintaxe: basename [SUFFIX] / basename OPTION … NAME …

Usando o comando basename:

O comando basename pode ser usado facilmente, basta escrever basename, seguido do nome do arquivo ou do nome completo do caminho. onde NAME refere-se ao nome do arquivo ou nome completo do caminho e OPTION refere-se às opções compatíveis com o comando basename e, no caso, se você deseja remover o sufixo de um arquivo, pode dar o nome do arquivo seguido pelo nome do SUFIX que deseja se livrar de.

Exemplos:

1) basename /usr/bin/sort (Produz a string “sort”).
2) basename include/stdio.h .h (Produz a string “stdio”).
3) basename -s .h include/stdio.h (Produz a string “stdio”).
4) basename -a any/str1 any/str2 (Produz a string “str1” seguido da string “str2”).

Opções do comando basename?

Opção -a, –multiple: esta opção permite suportar vários argumentos e tratar cada um como um NOME, ou seja, você pode fornecer vários nomes de arquivos ou nomes de caminhos completos com o uso da opção -a:

basename -a /usr/local/bin/al2 /usr/local/bin/al2.html

Opção -s, –suffix SUFFIX: Esta opção remove um sufixo à direita SUFFIX, como uma extensão de arquivo, remove um SUFIXO; implica em -a:

basename -s .html al2.html

-z opção: separa a saída com NULL em vez de uma nova linha, termina as linhas de saída com NULO, e não nova linha:

basename -az /usr/local/bin/al2 al2.html

– opção de ajuda (–help opção): exibe as informações da ajuda e sai:

basename –help z

–version option: exibe as informações da versão e sai:

basename –version

Exemplo:

~:$ basename –version
basename (GNU coreutils) 8.31
Copyright (C) 2019 Free Software Foundation, Inc.
Licença GPLv3+: GNU GPL versão 3 ou posterior <_ gnu.org=”gnu.org” licenses=”licenses” gpl.html=”gpl.html”>
Este é um software livre: você é livre para alterá-lo e redistribuí-lo.
NÃO HÁ QUALQUER GARANTIA, na máxima extensão permitida em lei.

Para que serve o basename?

Aplicação do comando basename? Por si só o basename não faz nada… Existem muitos utilitários disponíveis, que SÓ SÃO ÚTEIS QUANDO SE TRATA DE SCRIPTS DE SHELL e não tem nenhum aplicativo prático quando usado por si só, e O BASENAME ESTÁ NESSA CATEGORIA.

EXEMPLO de um SCRIPT DE SHELL que CONVERTE ARQUIVOS de imagem gif em arquivos de imagem png COM A AJUDA DO COMANDO BASENAME:

#!/usr/bin/env bash

# shell script para converter o formato de arquivo de imagem gif
# em formato de arquivo de imagem png

# exemplo for importante

for file in *.gif; do
# sair se não tiver arquivos
if [! -f $file];then
exit
fi

# — #

b=’basename $file .gif’
echo NOW $b.gif is $b.png
giftopnm $b.gif | pnmtopng >$b.png
done

# fim do script

OBS:
No shell script acima, o comando BASENAME é usado para EXTRAIR os NOMES de arquivos com a extensão .gif sem a extensão, para que possam ser CONVERTIDOS em ARQUIVOS .png.

Conclusão:
o nome da base (basename) retira informações e sufixos do diretório e dos nomes dos arquivos, ou seja, imprime o nome do arquivo NAME com os principais componentes de diretório removidos.

Até breve!

🙂

Linux shell bash loops funções exemplos

COLA BASH FUNÇÕES E LOOPS

Basicamente, a função bash é um conjunto de comandos. É usado principalmente para executar um único ou grupo de comandos repetidamente. As funções facilitam a leitura do código e a execução de instruções significativas do código do conjunto.

Você pode declarar uma função bash nos dois seguintes formatos:

—formato-1

function_name() {
commands
}

—formato-2

function function_name() {
commands
}

Execute no terminal:

function nome_da_funcao() { echo ‘Alou Mundo!’; echo ‘Como vai você?’; }

Chame a função:

nome_da_funcao

RESULTADO:

~:$ function nome_da_funcao() { echo ‘Alou Mundo!’; echo ‘Como vai você?’; }
~:$ nome_da_funcao
Alou Mundo!
Como vai você?
~:$

OBS:

EXISTEM EXEMPLOS QUE TEM ESPAÇO ENTRE O NOME DA FUNÇÃO PARÊNTESES E AS CHAVES. VOCÊ PODE DECLARAR UMA FUNÇÃO E EXECUTAR ELA NO MESMO SCRIPT.

Declaração da função Bash

A sintaxe para declarar uma função bash é muito simples. Elas podem ser declaradas em formatos diferentes como já foi dito aqui. O primeiro formato começa com o nome da função, seguido por parênteses. Dizem que este é o formato preferido e mais usado:

#!/usr/bin/env bash

function_name () {
command1
command2
command3
}

Em uma só linha:

function_name () { comando1; comando2; comando3; }

Teste:

hello () { echo -e ‘\nHello World!\n’; }

Executando a função…

NO TERMINAL CHAMA A FUNÇÃO PELO NOME.

$ hello

O SEGUNDO FORMATO COMEÇA COM A PALAVRA RESERVADA DA FUNÇÃO SEGUIDA PELO NOME DA FUNÇÃO.

function function_name {
comando1
comando2
comando3
}

EM UM LINHA SÓ:

function function_name { cmd1; cmd2; cmd3; }

NO TERMINAL CHAMA A FUNÇÃO PELO NOME:

$ function_name

Teste:

function mycmd { ls -At; pwd; date; whoami; }

NO TERMINAL CHAMA A FUNÇÃO PELO NOME:

$ mycmd

FUNCIONA TANBÉM USANDO O EXEMPLO ABAIXO:

==> FUNÇÃO

function myfunc(){ cmd1; cmd2; cmd3; }

Teste:

function diatemp(){ echo ‘Que dia hoje?’; date; echo ‘Tempo pc ligado?’; uptime; }

NO TERMINAL CHAMA A FUNÇÃO PELO NOME:

$ diatemp

Exemplo:

~:$ function diatemp(){ echo ‘Que dia hoje?’; date; echo ‘Tempo pc ligado?’; uptime; }
~:$ diatemp
Que dia hoje?
ter mar 10 06:22:50 -03 2020
Tempo pc ligado?
06:22:51 up 3:06, 1 user, load average: 5,48, 5,24, 6,09
~:$

==> LOOP FOR

1- Executa cmd 5x:

for i in {1..5}; do cmd_1_aqui; cmd_2_aqui; cmd_n_aqui; done

Exemplo:

~:$ for i in {1..5}; do echo ‘Alô Mundo!’; done
Alô Mundo!
Alô Mundo!
Alô Mundo!
Alô Mundo!
Alô Mundo!

2-Trabalha Arquivos:

for i in *; do echo $i; done

for i in /etc/*.conf; do cp $i /bkp; done

Escopo das variáveis – Variáveis globais são variáveis que podem ser acessadas de qualquer lugar do script, independentemente do escopo. No Bash, todas as variáveis por padrão são definidas como globais, mesmo se declaradas dentro da função. Variáveis locais podem ser declaradas dentro do corpo da função com a palavra-chave local e podem ser usadas apenas dentro dessa função. Você pode ter variáveis locais com o mesmo nome em diferentes funções.

Para ilustrar melhor como o escopo das variáveis funciona no Bash, vamos considerar um exemplo:

#!/usr/bin/env bash

# Nome: variaveis_escopo.sh

var1=’A’
var2=’B’

my_function () {
local var1=’C’
var2=’D’
echo “Primeira alteração: var1: $var1, var2: $var2”
}

echo “Variaveis iniciais: var1: $var1, var2: $var2”

my_function

echo “Depois de executar a função: var1: $var1, var2: $var2″

Outra opção melhor para retornar um valor de uma função é enviar o valor para stdout usando echo ou printf, como mostrado abaixo:

#!/bin/bash

# Título: retorna_valores.sh

my_function () {
local func_result=”Resultado: claytu dinamiti.”
echo “$func_result”
}

func_result=”$(my_function)”
echo $func_result

RETORNAR VALORES – diferente das funções em outras linguagens de programação, as funções do Bash não permitem que você retorne um valor quando chamado. Quando uma função bash é concluída, seu valor de retorno é o status da última instrução executada na função, 0 para êxito e número decimal diferente de zero no intervalo de 1 a 255 para falha. O status de retorno pode ser especificado usando a palavra-chave return e é atribuído à variável 0. A instrução return encerra a função. Você pode pensar nisso como o status de saída da função.

#!/bin/bash

my_function () {
func_result=”Algum Resultado”
}

my_function
echo $func_result

PASSANDO ARGUMENTOS PARA FUNÇÕES BASH – Para passar qualquer número de argumentos para a função bash, basta colocá-los logo após o nome da função, separados por um espaço. É uma boa prática aspas duplas nos argumentos para evitar a análise incorreta de um argumento com espaços nele.

1) Os parâmetros passados são $1, $2, $3 … $n, correspondentes à posição do parâmetro após o nome da função.

2) Parâmetro $0 A variável é reservada para o nome da função.

3) Parâmetro $# A variável mantém o número de parâmetros / argumentos posicionais passados para a função.

4) Parâmetro $* e $@ variaveis mantém todos os positional parameters/argumentos passados para a função.

5) Quando entre aspas o parâmetro, “$*” expande para uma única sequência separada por espaço (o primeiro caractere do IFS).

6) Quando entre aspas o parâmetro, “$@” expande para separar strings – “$1” “$2” “$n”.

7) Sem aspas duplas os parâmetros, $* e $@ são os mesmos, não tem diferença.

Aqui um exemplo:

./passando_argumentos.sh

#!/usr/bin/env bash

# Título: passando_argumentos.sh

saudacao () {
echo “Olá $1”
}

OBS:

Salve o script. De permissão de execução. Chame o nome da função seguida de “Jorge”.

$ saudacao “Jorge”
Olá Jorge

BASH LOOP FUNÇÕES

USE O LOOP FOR PARA EXCLUIR ARQUIVOS:

#!/usr/bin/env bash

for f in ~/*.txt; do [ -f “$f” ] && rm “$f”; done

# oneliner # if (se) tem arquivo, delete eles

==> Executar um loop sobre vários arquivos escolhidos executando um comando:

for f in file1 file2 file3 file4; do AQUI_O_CMD; done

Teste o comando abaixo no terminal:

for i in 1 2 3 4 5 6; do ls -t; pwd; done

DECLARANDO E CHAMANDO A FUNÇÃO:

#!/usr/bin/env bash

# Nome: Bem-vindo.sh

# declarando Bem-vindo() function

Bem-vindo () {
# lista de comandos
echo ‘Bem-vindo(a) aqui!’
}

# chamando a função Bem-vindo

Bem-vindo

PERMISSÃO DE EXECUÇÃO PARA O SCRIPT:

chmod +x Bem-vindo.sh

Resultado:

~:$ ./Bem-vindo.sh
Bem-vindo(a) aqui!
~:$

Conclusão – Uma função Bash é um bloco de código reutilizável projetado para executar uma operação específica. Uma vez definida, a função pode ser chamada várias vezes em um script. Você também pode usar uma função Bash para criar um comando de atalho memorável para um comando mais longo.

Até Breve!

🙂

Linux Bash Comandos Tutorial

:: Linux_Bash_Comandos_Tutorial ::

O Linux tem uma interface gráfica com o usuário e funciona de maneira semelhante a outros sistemas. O interessante talvez seja a linha de comando (também conhecida como terminal) rodando o Bash.

A linha de comando é uma fera interessante, e se você não usou uma antes, pode ser um pouco assustador.

Com um pouco de prática você logo virá a vê-lo como seu amigo. A maioria das pessoas abre uma interface de linha de comando como outra janela na área de trabalho (na verdade, você pode ter quantas abertas quiser).

Isso também é vantajoso, pois podemos ter várias linhas de comando abertas e executar diferentes tarefas em cada uma ao mesmo tempo.

Também podemos voltar facilmente para a GUI (ambiente gráfico) quando nos convier.

Experimente até encontrar a configuração mais adequada para você.

---------------------
Como exemplo, 3 terminais abertos:

1. Terminal que faz o trabalho
2. outro terminal para trazer dados auxiliares
3. O último terminal serve para visualizar as páginas do Manual (man pages).
---------------------

:: Uma linha de comando, ou terminal, é uma interface baseada em texto para o sistema. É a famosa interface chamada de cli. (cli = interface modo texto) ::

---------------------

Você pode inserir comandos digitando-os no teclado e o feedback será dado a você de forma semelhante como texto.

A linha de comando geralmente apresenta um prompt.

Conforme você digita, ele será exibido após o prompt.

Na maioria das vezes você estará emitindo/digitando/colando comandos.

---------------------

Você provavelmente o encontrará o terminal em:

Aplicativos > Sistema ou Aplicativos > Utilitários

---------------------

Como alternativa, você pode clicar com o botão direito do mouse na área de trabalho e pode haver uma opção "Abrir no terminal".

---------------------

Dentro de um terminal você tem o que é conhecido como shell. Esta é uma parte do sistema operacional que define como o terminal se comportará e cuidará da execução (ou execução) de comandos para você. Existem vários shells disponíveis, mas o mais comum é chamado de bash, que significa Bourne Again shell.

---------------------

O terminal pode parecer assustador, mas não se preocupe. O Linux é cheio de atalhos para ajudar a tornar a vida mais fácil. Tome nota deles, (não só como eles tornam a vida mais fácil, eles muitas vezes também salvam a gente de cometer erros bobos, como erros de digitação) anote seus erros bobos também.

---------------------

Quando você insere comandos, eles são realmente armazenados em um histórico. Você pode percorrer esse histórico usando as teclas de seta para cima e para baixo. Portanto, não se preocupe em redigitar os comandos que você digitou anteriormente, você normalmente pode apenas acertar a seta para cima algumas vezes. O histórico pode ser limpo usando o comando: history -c

---------------------

Você também pode editar esses comandos usando as teclas de seta para a esquerda e para a direita para mover o cursor para onde desejar.

---------------------

:: Executando Comandos...

O Bash determina o tipo de programa que deve ser executado. Programas normais são comandos do sistema que existem em forma compilada no seu sistema. Quando tal programa é executado, um novo processo é criado porque o Bash faz uma cópia exata de si mesmo.

Esse processo filho possui o mesmo ambiente que seu pai, somente o ID do processo número é diferente. Este procedimento é chamado bifurcação.

Após o processo de bifurcação, o espaço de endereço do processo filho é sobrescrito com os novos dados do processo. Este é feito através de uma execução que liga para o sistema mudando um comando antigo por um novo, enquanto o ambiente em que o novo programa é executado permanece o mesmo, incluindo a configuração de dispositivos de entrada e saída, ambiente variáveis ​​e prioridade.

---------------------

Esse mecanismo é usado para criar todos os processos do UNIX, portanto, também se aplica ao sistema operacional Linux. Mesmo o primeiro processo, com o ID do processo 1, é bifurcado durante o procedimento de inicialização. Este procedimento é chamado bootstrappin.

Para ver o que se entende por scripting, use o shell em combinação com o seu editor de texto favorito, por exemplo. vi para criar um novo arquivo chamado trabalho.sh contendo todos os comandos acima, cada um em uma linha separada. Quando estiver pronto, torne seu novo arquivo executável usando o comando chmod com uma opção + x. Por fim, execute seu novo script prefixando seu nome com ./

---------------------

: Caminho Relativo vs Caminho Absoluto :

Por fim, antes de programar scripts de shell bash oficial, deve-se discutir brevemente a navegação de shell e a diferença entre um caminho de arquivo relativo e absoluto.

Provavelmente, a melhor analogia para explicar um caminho de arquivo relativo versus absoluto é visualizar o sistema de arquivos GNU/Linux como um edifício de múltiplos andares. O diretório raiz (porta de entrada do edifício) indicado por "/" fornece a entrada para todo o sistema de arquivos (edifício), dando acesso a todos os diretórios (níveis/salas) e arquivos (pessoas).

Para navegar para uma sala 1 no andar 3, primeiro precisamos entrar na porta principal / (raiz), então seguir para o 3 andar/nivel3/ e a partir daí entrar na sala1.

Assim, o caminho absoluto para essa sala específica dentro de um edifício é /andar3/sala1. A partir daqui, se desejarmos visitar sala2 também no terceiro andar, primeiro precisamos sair de nosso local atual que é sala1 inserindo ../ e, em seguida, incluindo o nome da sala: sala2. Nós pegamos um caminho relativo para a sala2, que neste caso é ../sala2. Nós já estávamos no nível 3, então não havia necessidade de deixar o prédio inteiro e pegar o caminho absoluto pela:

entrada_principal/andar3/sala2

---------------------

: No computador ficaria mais ou menos assim...

raiz/home/home-usuário/Documentos/Arquivo-de-texto.txt

Ou:

~/Documentos/Arquivo-de-texto.txt

---------------------

Felizmente, o GNU / Linux apresenta uma ferramenta de bússola simples para ajudá-lo a navegar por todo o sistema de arquivos na forma do comando pwd. Este comando, quando executado, sempre imprimirá sua localização atual. Usa-se o comando cd e pwd para navegar pelo sistema de arquivos GNU/Linux usando caminhos absolutos e relativos.

A navegação pelo sistema de arquivos GNU/Linux considerada simples e, no entanto, para muitos, muito confuso. Familiarize-se com a navegação do sistema de arquivos GNU/Linux antes de passar para outros assuntos.
---------------------

: Navegando pelo sistema de arquivos GNU/Linux...

No prompt de comando do Linux, use o comando cd para alterar o diretório de trabalho, onde as ações ocorrem por padrão. Aqui estão alguns usos básicos para o comando cd:

1. Para mudar para o seu diretório pessoal, digite cd e pressione [Enter].
2. Para alterar para um subdiretório, digite cd, um espaço e o nome do subdiretório (por exemplo, cd Documents) e, em seguida, pressione [Enter].
3. Para alterar para o diretório pai do diretório de trabalho atual, digite cd seguido por um espaço e dois pontos e pressione [Enter].
4. Para mudar para um diretório especificado por um nome de caminho, digite cd seguido de um espaço e do nome do caminho (por exemplo, cd /usr/local/lib) e, em seguida, pressione [Enter].
5. Para confirmar que você mudou para o diretório desejado, digite pwd e pressione [Enter]. Você verá o nome do caminho do diretório atual.

---------------------

: Alternando entre diretórios diferentes...

Ao trabalhar com dois diretórios no modo de linha de comando, você pode alternar entre eles e fazer uma grande quantidade de redigitação no processo. Se os diretórios não estiverem localizados no mesmo diretório pai, você terá que digitar o nome do caminho inteiro para mudar de um diretório para o próximo, o que pode ser entediante. No entanto, você pode eliminar toda essa digitação extra usando uma das duas abordagens: Use a lista de histórico do shell ou use uma outra função do shell que é geralmente a tecla Enter (pressione duas ou três vezes). A tecla Tab pode dependendo do caso, também auto-completar caminhos.
---------------------

: Comandos importantes para desfrutar o Linux...

---------------------

1. ls
O comando ls - o comando ls (list) - funciona no terminal do Linux para mostrar todos os principais diretórios arquivados em um determinado sistema de arquivos. Por exemplo, o comando:

ls /aplicativos

... mostrará ao usuário todas as pastas armazenadas na pasta geral de aplicativos.

O comando ls é usado para visualizar arquivos, pastas e diretórios.

2. cd
O comando cd - change directory - permitirá ao usuário mudar entre diretórios de arquivos. Como o nome do comando name sugere, você usaria o comando cd para circular entre dois diretórios diferentes. Por exemplo, se você quisesse mudar do diretório inicial para o diretório Scripts, deveria inserir o seguinte comando:

cd ~/Documentos/Scripts

Logicamente cd ~/Documentos/Scripts lê a mudança para o diretório /Scripts que é armazenado no diretório /Documentos. Todos os comandos do Linux seguem um caminho lógico.

3. mv
O comando mv - move - permite que um usuário mova um arquivo para outra pasta ou diretório. Assim como arrastar um arquivo localizado em uma área de trabalho do PC para uma pasta armazenada na pasta "Documentos", o comando mv funciona da mesma maneira. Um exemplo do comando mv é:

mv /arora/applications/majorapps/ arora/aplicativos/minorapps

A primeira parte do comando mv /arora/applications/majorapps lista o aplicativo a ser movido. Neste caso, arora. A segunda parte do comando /arora/applications/minorapps lista onde o arora será movido para - de majorapps para minorapps.

4. man
O comando man - o comando manual - é usado para mostrar o manual do comando inserido. Assim como um filme sobre a natureza do filme, o comando man é o meta-comando da Linux CLI. A entrada do comando man mostrará todas as informações sobre o comando que você está usando. Um exemplo:

cd man

O comando de entrada mostrará o manual ou todas as informações relevantes para o comando de mudança de diretório.

5. mkdir

O comando mkdir - make directory - permite ao usuário criar um novo diretório. O comando mkdir cria novos diretórios em um ambiente Linux. Um exemplo do comando mkdir

mkdir -v pastateste

O comando de exemplo retorna:

~$:mkdir -v pastateste
mkdir: foi criado o diretório 'pastateste'

6. rmdir

O comando rmdir - remove diretório/pasta (vazia) - O comando: rm -ir permite ao usuário remover pastas com ou sem arquivos usando o terminal. Um exemplo do comando rmdir:

rmdir pastateste

--

Crie a pasta de novo:

mkdir -v pastateste

--

Remov com rm -ir:

rm -ri pastateste

O comando de exemplo faz o seguinte:

~$:rm -ri pastateste
rm: remover diretório 'pastateste'? y
~$:

Deve-se notar: os comandos mkdir e rmdir criam e removem diretórios. Eles não criam arquivos e também não removem um diretório que contenha arquivos. O mkdir fará um diretório vazio e o comando rmdir removerá um diretório vazio.

Touch

O comando touch - a.k.a. o comando make file - permite que os usuários criem arquivos usando o Linux CLI. Assim como o comando mkdir faz diretórios, o comando touch cria arquivos. Assim como você faria um .doc ou um .txt usando um desktop PC, o comando touch cria arquivos vazios. Um exemplo do comando touch:

touch arquivoteste.txt

O comando touch do exemplo efetivamente criou o arquivo arquivoteste.txt. Conforme observado pela extensão, o arquivo criado é um arquivo .txt ou de texto. Para equacionar, um arquivo .txt no Linux é semelhante a um arquivo de caderno .txt em um sistema operacional Windows ou Mac OS.

8. rm

O comando rm - remove - como o comando rmdir serve para remover arquivos do seu sistema operacional Linux. Enquanto o comando rmdir removerá os diretórios e arquivos contidos nele, o comando rm excluirá os arquivos criados. Uns exemplos do comando rm:

rm testfile.txt
rm -f testfile.txt
rm -i testfile.txt
rm -fi testfile.txt

Os comandos acima mencionados removem testfile.txt. Curiosamente, enquanto o comando rmdir excluirá apenas um diretório vazio, o comando: rm -r removerá os arquivos e diretórios com arquivos nele. Dito isso, o comando rm tem mais peso que o comando rmdir e deve ser usado com mais especificidade.

9. locate

O comando locate - a.k.a. find - serve para localizar um arquivo no sistema operacional Linux. Se você não souber o nome de um determinado arquivo ou não tiver certeza de onde o arquivo foi salvo e armazenado, o comando locate será útil. Um exemplo de comando locate:

locate -i Imagens

O comando indicado localizará um arquivo com o nome de arquivo contendo Imagens. Uma nota na entrada: o uso de "-i" diz ao sistema para procurar por um arquivo não específico de capitalização (funções do Linux em letras minúsculas). O uso do asterik "*" significa procurar um curinga. Um curinga diz ao sistema para puxar todos os arquivos que contenham os critérios de pesquisa.

Especificando -i com curingas, o comando locate irá recuperar todos os arquivos que contenham seus critérios de pesquisa, lançando a maior rede de busca que o sistema permitir.

10. clear

O comando clear faz exatamente o que diz. Quando seu terminal fica todo sujo com várias leituras e informações, o comando clear limpa a tela e limpa a placa.

---------------------

Anotações Comandos Linux e Shell Script

Linux comandos e shell script 2018 (Novo)

.

wallpaper-inicio-comandos-linux-shellscript

.

APRENDENDO COMANDOS LINUX E SHELL SCRIPT

.

Este artigo (aprendendo comandos-linux e shell-script) é para iniciant. Tudo que tem neste artigo executei por minha conta e risco sem problemas. Tudo foi bem. Recomendo que faça o mesmo (por sua conta e risco).

-----------------------

APRENDENDO COMANDOS LINUX E SHELL SCRIPT

.

Programas CLI, são programas em modo texto. Por exemplo programas cli podem interagir com o terminal. Um programa cli bastante usado no Linux é o Dialog por exemplo.

.

FLUXOS DE ENTRADA/SAÍDA PADRÃO E OPERADORES DE FLUXO

.

Os fluxos padrão são canais de entrada/saída (E/S) entre um programa de computador e o ambiente (tipicamente um terminal de texto) que são pré conectados no início da execução.

.

A entrada padrão Stdin do Linux é o teclado. A gente se comunica com o sistema operacional e programas usando o teclado. Claro que podemos usar tela sensível ao toque, mouse, joystick, toutchpad, etc...

Stdin = Standart Input

É representada pelo número 0.

.

Abro meu terminal pelo menu do sistema. Digito/Copio e colo no meu terminal:

ls /dev/stdin ; echo Stdin = Standart Input - valor = 0

.

A saída padrão Stdout do Linux é o monitor. Quase sempre as informações mais importantes são obtidas pelo terminal do sistema operacional. A gente recebe informação do sistema operacional e programas pelo monitor.

Stdin = Standart Output

É representada pelo número 1.

.

Copio e colo no meu terminal:

ls /dev/stdout

.

A saída de erro padrão Stderr do Linux é o monitor. Por ele são enviadas mensagens de erro geradas por aplicativos. A gente recebe informação de erro do sistema operacional e programas pelo monitor. Estas informações são muito úteis para podermos corrigir problemas. Quase sempre as informações de erro mais importantes são obtidas pelo terminal do sistema operacional.

Stderr = Standart Error

É representada pelo número 2.

.

Copio e colo no meu terminal:

ls /dev/stderr

.

Os 3 são usados por redirecionadores. Você redireciona a saída deles para um arquivo de texto por exemplo. Podemos redirecionar a saída de um comando para um arquivo em determinado diretório. Então lembre que:

1) Stdin=0
2) Stout=1
3) Stderr=2

.

Podemos manipular as saídas e entradas com 3 operadores.

O Pipe (|) Liga a saída de um programa a entrada de outro.

O Write (>) Redireciona para arquivo de texto por exemplo sobrescrevendo.

O Append (>>) Redireciona para arquivo de texto por exemplo, sem apagar o que já estiver escrito.

-----------------------

OS PROMPTS PADRÃO DO LINUX SÃO:

.

1) Para root:

- # -

2) Para os outros usuários:

- $ -

.

Exemplo:

~$ echo -e "\nBem Vindo(a) \n \na \n \nComandos Linux \n \ne \n \nShell Script \n"

.

SISTEMA DE PERMISSÃO DE ARQUIVOS

.

Todo arquivo possui uma dada permissão para cada usuário.

Leitura (r), escrita (w) e execução (x)

.

TUDO É ARQUIVO:

Pasta é arquivo.
Dispositivo é arquivo.
Usuário é arquivo.

.

Temos arquivos de texto, arquivos de áudio, arquivos de vídeo, arquivos de imagem, etc.

.

A ÁRVORE DE ARQUIVOS DOS SISTEMAS LINUX:

.

A árvore de diretórios/arquivos dos sistemas Linux é composto de diversos diretórios/arquivos conforme lista a seguir(pode haver variação de acordo com versão/distribuição):

1) /bin
2) /dev
3) /mnt
4) /root
5) /tmp
6) /vmlinuz
7) /boot
8) /etc
9) /opt
10) /run
11) /srv
12) /usr
13) /vmlinuz.old
14) /cdrom
15) /home
16) /lib
17) /media
18) /proc
19) /sbin
20) /sys
21) /var

.

Cada um desses diretórios tem uma função especifica dentro do sistema. Segue a lista dos principais com sua respectiva função.

.

Diretório: /bin

O /bin é onde ficam os arquivos binários (executáveis) dos comandos básicos do sistema, e assim sendo estes arquivos podem ser executados por qualquer usuário do sistema. Estamos falando de comandos essenciais como cp, mv, cd, ls...

Diretório: /usr

Ao contrário do que muitos pensam usr não se refere a usuário, mas a "Unix System Resources". É neste diretório que a maioria dos programas são instalados, assim como bibliotecas e documentação dos programas

Diretório: /boot

É onde ficam arquivos referentes a inicialização do sistema.

Diretório: /dev

Este é interessante. Os arquivos contidos aqui, não são arquivos de texto, ou binários mas sim apontadores que indicam dispositivos de hardware conectado. Como no Linux TUDO VIRA ARQUIVO, os dispositivos não são diferente.

Diretório: /etc

Onde ficam arquivos de configuração do sistema e de outros softwares. Os arquivos de configuração são comumente apresentados como arquivos de texto facilitando a edição manual.

Diretório: /lib

É onde ficam as bibliotecas usadas pelos programas que ficam em /bin e /sbin.

Diretório: /home

Dentro do /home normalmente é criada uma pasta para cada usuário. É onde ficam os arquivos pessoais, documentos, músicas e vídeos do usuário(exceto para o usuário root).

Diretório: /mnt

É usado para "montar" unidades de disco ou de rede por meio do comando mount. Após montar o diretório a unidade fica disponível como se fosse mais um diretório do sistema.

Diretório: /proc

Diretório onde ficam arquivos que armazenam informações sobre processos do sistema.

Diretório: /tmp

Arquivos e pastas criadas temporariamente ficam nesse diretório.

Diretório: /root

É uma pasta analoga as pastas de usuário que ficam no Diretório: /home, mas para o usuário root.

Diretório: /

Por fim o mais importante dos diretórios, é o diretório / também chamado de diretório raiz. É dentro desse diretório que ficam todos os outros. É a base para toda a árvore de arquivos.

.

OBS:
Existe um comando muito simples que apaga o diretório root e nunca deve ser executado, a menos, que a pessoa queira destruir o sistema:

sudo rm -rf /

.

O SHELL SCRIPT É O MAIS ALTO NÍVEL QUE UM SISTEMA LINUX COMUM POSSUI.

.

O Shell padrão do Linux é o Bash. Quando o usuário digita comandos no terminal eles são interpretados pelo Bash.

.

Se o usuário escreve um arquivo de texto com comandos da maneira correta este arquivo de texto se torna um shell script.

.

O shell script é bastante usado pelas pessoas para a automação de tarefas. É muito perigoso executar Shell Scripts como root, isto pode
danificar o sistema.

.

O MELHOR TERMINAL PARA USAR É O QUE JÁ VEM INSTALADO NO TEU SISTEMA. MAS EXISTEM OUTROS TERMINAIS QUE PODE USAR. TEM O TILIX, TEM O TERMINATOR POR EXEMPLO.

-----------------------

USAR O TERMINAL CHAMADO TERMINATOR

.

Tem um terminal legal para estudar comandos e shell script Linux chamado TERMINATOR.
Ele pode ser dividido horizontalmente (Ctrl+Shift+O) e verticalmente (Ctrl+Shift+E).
Pode redimensionar as divisões do terminator com (Ctrl+Shift+seta).
Para mover de uma janela de terminal para outra (Ctrl+Shift+N) (Ctrl+Tab).
Para fechar o terminal (Ctrl+Shift+W).
Procuro o TERMINATOR pelo software center da minha distro. Instalo. Abro ele pelo menu do sistema.
Com o TERMINATOR posso ler este artigo em uma subdivisão do terminal e usar outras para executar as instruções do artigo por exemplo.
Isto porque é só copiar este texto para um editor de texto salvar como estudo-linux.txt e abrir ele no terminal.

-----------------------

TERMINATOR EXEMPLO DE USO

.

APERTO AS TECLAS:

1) Ctrl+Shift+O
2) Ctrl+Shift+E
3) Ctrl+Shift+N
4) Ctrl+Shift+Seta para esquerda/ direita/ cima/ baixo
5) Ctrl+Shift+W

.

Para copiar no terminal: Shift Ctrl C

Para selecionar tudo: Shift Ctrl A (depois seta para cima)

.

Para pesquisar:

1) Shift Ctrl F (localizar)
2) Shift Ctrl G (anterior)
3) Shift Ctrl H (próximo)

.

Para ampliar: Ctrl +
Para reduzir: Ctrl -
Tamanho normal: Ctrl 0
Tela cheia: F11

.

Para colar no terminal: Shift Ctrl V

.

Após escrever comandos no meu terminal, eles são examinados pelo Shell, que no meu caso é o Bash. Após o exame do Shell, os comandos informados são passados para o Linux, que executa o comando ou exibe uma mensagem de erro que ajuda quando for executar o comando correto.

.

COMANDOS DO LINUX TEM QUASE SEMPRE A SEGUINTE FORMA:

.

comando [-opções] [argumentos]

Exemplo:

ls -t /Downloads/pasta_teste

.

comando [argumento]

Exemplo:

cat /Downloads/pasta_teste/arquivo1.txt

.

comando [- opções]

Exemplo:

ps -aux

.

O que é um argumento?

Um argumento é uma informação extra, como o nome ou tamanho de um arquivo a ser encontrado por um comando.

.

O que é parâmetro? É o mesmo que opção. Um comando quase sempre, tem como opção vários parâmetros. Por exemplo o parâmetro de ajuda do comando ls é --help. Fica assim:

ls --help (o ls tem várias opções)

.

Para me confundir menos, por enquanto, comandos Linux tem opções e argumentos.

.

Primeiro preciso de um local no sistema para estudar para não se misturar com meus outros arquivos. Abro o terminal pelo menu do sistema e colo:

cd ; cd Downloads/ ; mkdir EstudoEmDown ; cd EstudoEmDown/ ; clear

.

Agora estou no local (cd ; cd Downloads/EstudoEmDown/) que daqui para frente, será o lugar onde posso estudar comandos e shell script. Pelo menos por enquanto. Beleza.

.

Agora vou ler este artigo e executar comandos no terminal. Vamos?

.

1) Digito no terminal: whoami
2) Aperto a tecla Enter.
3) Digito no terminal: cd
4) Aperto a tecla Enter.
5) Digito no terminal: cd -
6) Digito no terminal: clear

.

Uso o exemplo abaixo para digitar no terminal:

ls -tli /home/seu_user_é_whoami/Downloads/

ls -tli ~/Downloads/

ls -t /home/seu_user_é_whoami/Downloads/

ls -t ~/Downloads/

.

No exemplo acima:

1) ls (É o comando.)
2) -tli (É a opção.)
3) /home/seu_user_é_whoami/Downloads/ (É o argumento)

.

comando + opção + argumento

.

O QUE SÃO STRINGS?

.

"Expressão contendo qualquer caracter alfanumérico, formando ou não palavras."

.

São cordas. Longas cadeias de comandos. Strings possuem comandos, opções, argumentos, metacaracteres, expressões regulares, pipes e palavras. Podem ser executadas no terminal, mas a casa delas é nos shell scripts.

Strings creio que são palavras dentro de um arquivo.

Comandos, códigos, palavras executadas em um terminal.

Dentro de um arquivo existem caracteres, palavras, frases e parágrafos.

Podemos digitar códigos/palavras/comandos (strings) diretamente no terminal.

As palavras podem ser "palavras exatas" ou "expressões regulares".

As strings podem conter "comandos" "opções" "argumentos" "palavras exatas" ou "expressões regulares".

.

Executo no terminal o exemplo abaixo:

1)

STRING="Isso ===== é ===== uma STRING!"

2)

echo 'Quer saber o que é uma string?' ; echo $STRING

3)

unset STRING

4)

clear

5)

exit

.

O QUE É EXPRESSÃO REGULAR?

Expressões regulares acho que são maneiras de usar curingas e caracteres especiais importantes no Bash que é o interpretador de comandos padrão no terminal do Linux.

.

Exemplo:

.

ifconfig | grep "wl[^ || :]*" -o

.

ifconfig | grep "wl[^ || :]*"

.

O QUE É SED?

Sed creio que é um editor de fluxo para os sistemas operacionais Unix e Linux. Ele pode ser utilizado para manipular o texto de várias maneiras, incluindo procurar e substituir cadeias encontradas em arquivos de texto.

.

O formato básico para a substituição com sed é:

sed -i ‘s/FIND_STRING/REPLACE_STRING/g’

sed -i "s/encontrar_string/substituir_string/g" nome_do_arquivo

sed -i "s/find_string/replace_string/g" filename

.

Explicação:

O "-i" opção diz para editar a linha de texto.

Em outras palavras, o arquivo é editado sem a criação de um segundo arquivo.

A seção "s/find_string/replace_string/g", diz para substituir ("s"), o "replace_string" para o " find_string" globalmente ("g").

A última parte do comando ("filename") é o nome do arquivo a ser editado.

.

Se você quiser guardar uma cópia do arquivo original, pode omitir o "-i" opção e especificar um arquivo de saída como:

sed "s/find_string/replace_string/g" filename > saída

.

Se omitir o "g" do comando , o sed irá substituir apenas a primeira ocorrência do "find_string" e parar.

.

O QUE É PERL?

Perl penso ser uma linguagem de programação que pode ser usado a partir da linha de comando para manipular arquivos de texto.

Perl foi criado para manipular relatórios de texto ASCII de forma eficiente.

O método de Perl para procurar e substituir as cordas é semelhante ao comando sed. O formato é o seguinte:

Perl- pi -e 's/find_string/replace_string/g' nome-do-arquivo

.

EXECUTO OS EXEMPLOS ABAIXO PARA ENTENDER COMO OBTER AJUDA:

1) man --help
2) man grep (para sair aperto a tecla Q)
3) apropos mkdir
4) whatis bash
5) whereis sh

.

QUERO SABER A VERSÃO DA DISTRIBUIÇÃO DIGITO:

.

1) lsb_release -a
2) cat /etc/issue
3) reset

.

ME INFORMO SOBRE O KERNEL E ARQUITETURA DA MÁQUINA (faço sempre que posso pra eu não esquecer):

.

1) uname -a
2) uname -r
3) arch

.

EU QUERO APRENDER ATALHOS DE TERMINAL DO GNU/LINUX ENTÃO EU LEIO O TEXTO ABAIXO:

.

Teclas de Atalho + Função

1) Ctrl + a (Move o cursor para o início da linha)
-----------------------
2) Ctrl + e (Move o cursor para o final da linha)
-----------------------
3) Ctrl + l (Limpa a tela, semelhante ao comando clear)
-----------------------
4) Ctrl + u (Apaga do cursor para trás)
-----------------------
5) Ctrl + k (Apaga do cursor para frente)
-----------------------
6) Ctrl + w (Apaga uma palavra antes do cursor)
-----------------------
7) Ctrl + Shift + _ (Desfaz as últimas mudanças)
-----------------------
8) !! (Executa o último comando no histórico)
-----------------------
9) !abc (Executa último comando no histórico começando com abc)
-----------------------
10) !n (Executa comando de número n no histórico)
-----------------------

.

PARA APRENDER O QUE LI ACIMA, EXECUTO O ENSINAMENTO ABAIXO:

.

Abro o terminal pelo menu do sistema.

.

Colo o texto abaixo no terminal, mas poderia ser qualquer frase:

.

Frase: "Ctrl + Apaga do cursor ao início da linha."

.

Agora aperto duas teclas, as teclas:

Ctrl + A

.

Aperto a seta do teclado para a direita quatro vezes. Então aperto as teclas:

.

Ctrl + U

.

Aperto duas teclas, as teclas Ctrl + E

(Control e E)

.

Aperto a tecla seta para esquerda 7 vezes.

.

Aperto as teclas Ctrl + K

.

Aperto as teclas Ctrl + W

.

Aperto 3 teclas: Crtl + Shift + _

(Control, Shift e Underline.)

.

Aperto a tecla seta para cima algumas vezes.

.

Aperto a tecla seta para baixo algumas vezes.

.

Pronto. Já estou sabendo alguma coisa.

Com isto, já aprendi bastante sobre atalhos de teclado para o terminal Linux.

Aperto Ctrl+U e digito: history (aperto a tecla Enter).

Digito: !w (aperto a tecla Enter).

Digito: !whe (aperto a tecla Enter).

Digito: !who (aperto a tecla Enter).

Digito: !ar (aperto a tecla Enter).

Digito: !4 (aperto a tecla Enter).

Digito: !5 (aperto a tecla Enter).

.

Até Agora Tudo Beleza!!!

.

RECORDO QUE:
-----------------------
Terminal: Teclas de Atalho + Função
Ctrl + a (cursor p/ início da linha)
Ctrl + e (cursor p/ fim da linha)
Ctrl + l (Limpa tela)
Ctrl + u (Apaga do cursor p/ trás)
Ctrl + k (Apaga do cursor p/ frente)
Ctrl + w (Apaga antes do cursor)
Ctrl + Shift + _ (Desfaz mudanças)
!! (Exec último cmd no hist)
!abc (Exec último cmd no hist começando com abc)
!n (Exec cmd de núm n no histórico)
-----------------------

.

O PIPE "|"

.

O pipe "|" é um operador que liga um comando a outro comando. Liga a saída de um comando a entrada de outro comando.

.

Lembro que eu criei um local de estudo em Downloads com o comando abaixo:

cd ; cd Downloads/ ; mkdir EstudoEmDown

.

Para navegar até ela, uso o comando abaixo:

cd ; cd Downloads/EstudoEmDown

.

OBS:
Quando for estudar comandos e shell script abro o terminal na pasta EstudoEmDown.

.

LER UM ARQUIVO DE TEXTO PELO TERMINAL DO LINUX

.

Copio e colo o código abaixo no meu terminal Linux:

echo -e '\nPoema: Pela Luz Dos Olhos Teus \n \nQuando a luz dos olhos meus \nE a luz dos olhos teus \nResolvem se encontrar \nAi que bom que isso é meu Deus \nQue frio que me dá o encontro desse olhar \nMas se a luz dos olhos teus \nResiste aos olhos meus só para me provocar \nMeu amor, juro por Deus me sinto incendiar \nMeu amor, juro por Deus \nQue a luz dos olhos meus já não pode esperar \nQuero a luz dos olhos meus \nNa luz dos olhos teus sem mais lará-lará \nPela luz dos olhos teus \nEu acho meu amor que são se pode achar \nQue a luz dos olhos meus precisa se casar. \n \n --Vinicius de Moraes \n ' > arq-poema.txt

.

Para ler o arq-poema.txt todo pelo terminal copio e colo os comandos abaixo no meu terminal Linux um de cada vez:

1) cat arq-poema.txt

2) cat -n arq-poema.txt

.

Para ler linhas do poema. Executo:

1) cat arq-poema.txt | head -n 3

2) cat arq-poema.txt | head -n 5

3) cat -n arq-poema.txt | head -n 3

4) cat -n arq-poema.txt | head -n 5

5) clear

.

Para ler as três ultimas linhas do poema:

1) cat arq-poema.txt | tail -n 3

2) cat -n arq-poema.txt | tail -n 3

.

Será que nas quatro primeiras linhas existe a palavra olhos? Vamos ver. Copio e colo o comando abaixo no terminal:

1) cat arq-poema.txt | head -n 4 | grep olhos

2) cat -n arq-poema.txt | head -n 4 | grep olhos

.

Quais das 7 primeiras linhas que NÃO POSSUEM a palavra olhos?

1) cat arq-poema.txt | head -n 7 | grep -v olhos

2) cat -n arq-poema.txt | head -n 7 | grep -v olhos

.

Crio um arquivo comprimido. Um arquivo tar. com o comando:

tar -cvf arq-poema.tar arq-poema.txt

ls -t

.

Vejo o arquivo tar existente:

tar -tvf arq-poema.tar

.

Crio um arquivo xz do arq-poema.tar o resultado será "arq-poema.tar.xz".

xz arq-poema.tar

.

Crio uma pasta:

mkdir pasta-arq-poema

.

Movo o arq-poema.tar.xz para a pasta criada:

mv arq-poema.tar.xz pasta-arq-poema/

.

Navego para a pasta-arq-poema:

cd pasta-arq-poema/

.

Para descompactar um arquivo tar.xz:

tar -Jxf arq-poema.tar.xz

.

Confiro o arquivo descompactado:

cat arq-poema.txt

.

Volto para a pasta anterior:

cd ..

.

Para remover arq-poema.txt uso o comando abaixo no mesmo terminal que estou executando os comandos até o momento:

1) rm -f arq-poema.txt (mas não removo)

.

ACHOU INTERESSANTE ATÉ AGORA?

.

ENTÃO SIGAMOS EM FRENTE!

.

Copio e colo no terminal o texto abaixo. Vai criar um arquivo de texto onde vou repetir os comandos que já aprendi e mais adiante, alguns que irei aprender. Aperto Enter:

echo -e '\nEntão queres ser um escritor? \nSe não sair de ti explodindo apesar de tudo, não o faças. \nA menos que saia sem perguntar do teu coração e da tua cabeça e da tua boca e das tuas entranhas, não o faças. \nSe tens que sentar por horas olhando a tela do teu computador ou curvado sobre a tua máquina de escrever procurando palavras, não o faças. \nSe o fazes por dinheiro ou fama, não o faças. \nSe o fazes porque queres mulheres na tua cama, não o faças. \nSe tens que te sentar e reescrever uma e outra vez, não o faças. \nSe dá trabalho só pensar em fazê-lo, não o faças. \nSe tentas escrever como algum outro escreveu, não o faças. \nSe tens que esperar para que saia de ti a gritar, então espera pacientemente. \nSe nunca sair de ti a gritar, faz outra coisa. \nSe tens que o ler primeiro à tua mulher ou namorada ou namorado ou pais ou a quem quer que seja, não estás pronto. \nNão sejas como muitos escritores, não sejas como milhares de pessoas que se consideram escritores, não sejas estúpido nem enfadonho e pedante, não te consumas com auto-devoção. \nAs bibliotecas de todo o mundo têm bocejado até adormecer com os da tua espécie. \nNão sejas mais um. \nNão o faças. \nA menos que saia da tua alma como um míssil, a menos que o estar parado te leve à loucura ou ao suicídio ou homicídio, não o faças. \nA menos que o sol dentro de ti te esteja a queimar as tripas, não o faças. \nQuando chegar mesmo a altura, e se foste escolhido, vai acontecer por si só e continuará a acontecer até que tu morras ou morra em ti. \nNão há outra forma. \nE nunca houve. \n \n(Charles Bukowski)\n' > charles_texto-escritor.txt

.

Executo o comando abaixo para ler o arquivo criado:

cat charles_texto-escritor.txt

.

Para criar uma pasta pelo terminal uso o comando mkdir. Executo:

mkdir pasta-teste

.

Para criar um arquivo uso o direcionador write (>). Executo:

Executo:

> arquivo-teste.txt

ls -t

.

Poderia criar um arquivo com o direcionador append (>>).

Executo:

>> arq-test5.txt

ls -t

.

Pego este texto:

.

Quando eu estava subindo a escada,
Encontrei um homem que não estava lá.
Ele não estava lá hoje também.
Ah, como eu queria que ele fosse embora!

--Willian Hughes Mearns.

.

Executo:

echo -e '\nQuando eu estava subindo a escada, \nEncontrei um homem que não estava lá. \nEle não estava lá hoje também. \nAh, como eu queria que ele fosse embora!\n \n --Willian Hughes Mearns\n' > arq_nao_estava.txt >> arquivo-teste.txt

ls -t

.

Leio o texto com o comando:

cat arq_nao_estava.txt

cat arquivo-teste.txt

.

Conto palavras:

wc -w arq_nao_estava.txt

wc -w arquivo-teste.txt

.

Para ver arquivos criados e me localizar digito:

ls -t

pwd

ls -l -i

ls -at ~/

pwd ~/

ls -t ~/Downloads/

clear

pwd ~/Downloads/

.

Para mover o arquivo-teste.txt para pasta-teste uso o comando mv:

mv arquivo-teste.txt pasta-teste

.

Para navegar para a pasta-teste uso o comando cd:

cd pasta-teste/

.

Para ver o que tem na pasta-teste uso o comando ls -t:

ls -t

.

Para voltar uma pasta atrás uso o comando cd ..:

cd ..

.

Confiro:

ls -t

.

Navego para a pasta anterior:

cd -

.

Para remover a pasta-teste uso o comando rm -r:

rm -r pasta-teste (mas não removo)

.

Se removi confiro se a pasta foi removida:

ls -t

.

EXECUTANDO MAIS COMANDOS ÚTEIS PELO TERMINAL (É comum repetir comandos já executados. Vou me acostumar.)

.

VERIFICO INFORMAÇÕES DA MINHA CPU:

cat /proc/cpuinfo

.

Me lembro que o TERMINAL do Linux tem SENSIBILIDADE a letras MAIÚSCULAS e MINÚSCULAS. Um arquivo chamado Texto.txt é diferente de texto.txt

.

VERIFICO INFORMAÇÕES SOBRE A MEMÓRIA:

cat /proc/meminfo

.

Quero saber que dia é hoje para o terminal, digito:

1) date

2) d

.

Quero saber quando cairá certo dia em outro ano anterior ou posterior usando pipe "|" e "less":

1) cal 2017 | less (para sair aperto a tecla Q)

2) cal 2018 | less (aperto: /, digito: do, aperto: Enter)

3) cal 2019 | less

.

Aperto a tecla Q para sair do calendário. O pipe "|" serve para unir um comando a outro. No GNU/Linux posso unir programas que trabalharão juntos.

.

Se quiser mandar o calendário para um arquivo de texto para depois imprimir este arquivo de texto em uma folha de papel:

1) cal 2018 | less > calendario-de-2018.txt

2) ls -t

3) cat calendario-de-2018.txt | less

.

EM QUAL DIA DA SEMANA CAIRÁ O DIA DAS CRIANÇAS?

date --date='12 Oct' +%a

.

EM QUAL DIA DA SEMANA CAIRÁ O DIA DAS CRIANÇAS ANO QUE VEM?

date --date='12 Oct 1 year' +%a

.

QUE DIA FOI ONTEM?

date --date='1 day ago'

.

QUE DIA SERÁ AMANHÃ?

date --date='1 day'

.

A PARTIR DESTE DIA, DAQUI A UM ANO UM MÊS E UM DIA, QUE DIA SERÁ?

date --date='1 day 1 month 1 year'

.

QUE DIA FOI A UM ANO UM MÊS E UM DIA?

date --date='1 day 1 month 1 year ago'

.

PARA SABER INFORMAÇÃO SOBRE O SISTEMA E O HARDWARE:

(os comandos que começarem com sudo, pedirão senha então caso não queira, pule eles.)

.

Info CPU

cat /proc/cpuinfo

.

Info memória

cat /proc/meminfo

.

Detalhes da versão

cat /proc/version

.

Detalhes da partição

cat /proc/partitions

.

LER O .BASHRC E .BASH_HISTORY

1) cat ~/.bashrc

2) cat ~/.bash_history

.

Detalhes dispositivos SCSI/Sata

cat /proc/scsi/scsi

.

Info dispositivos SATA

hdparam /dev/sda1

.

Lista componentes do Hardware

sudo lshw

.

Imprime info do hardware

sudo hwinfo --short

.

Lista dispositivos scsi

sudo lsscsi

.

Lista todos os dispositivos PCI

lspci

.

Lista dispositivos USB

lsusb

.

Lista dispositivos de bloco

lsblk

.

Mostra informação sobre a arquitetura da CPU

lscpu

.

COMANDOS PARA MANIPULAÇÃO DE ARQUIVOS E DIRETÓRIOS:

.

LISTA DE COMANDOS:
1) pwd (Informa o nome do diretório corrente)
2) cd (Navega entre diretórios)
3) cd (Volta para a home)
4) cd . (Diretório atual)
5) cd .. (Retrocede um diretório)
6) cd - (Avança para o último diretório em que esteve)
7) ls, ls1 (Lista arquivos e diretórios)
8) ls -a (Lista diretórios, arquivos e arquivos ocultos)
9) ls -t (Lista arquivos e diretórios por data de modificação)
10) cp (Copia arquivos e diretórios)
11) mv (Move ou renomeia arquivos e diretórios)
12) ln (Estabelece ligações entre arquivos)
13) ln -s (Estabelece ligações simbólicas entre arquivos)
14) mkdir (Cria um diretório)
15) mkdir -p pasta1/sub-pasta1 (Cria um diretório e um sub-diretório)
16) mkdir ../nome-pasta-a-ser-criada (Cria pasta abaixo da pasta onde está)
17) rmdir (Remove um diretório vazio)
18) rm -f (Apaga arquivos)
19) rm -r (Apaga pastas/diretórios)
20) rm -I (Pede confirmação antes de remover)
21) file (Indica tipo de arquivo)
22) grep (Pesquisa arquivos por conteúdo)
23) wc (Conta palavras, linhas e caracteres)
24) df -h (confere espaço em disco)
25) more (ler arquivos de texto)
26) clear (limpa a tela do terminal)
27) cat (exibe o que tem dentro de um arquivo)
28) find (procura por arquivos em pastas)
29) du -h, du *, du arq.txt (informa espaço utilizado)

#

OBS:

Grep pesquisa nos arquivos de entrada (ou na entrada padrão caso nenhum arquivo seja informado ou o nome do arquivos seja igual a - ), por linhas que contenham o padrão informado. Por padrão, grep lista as linhas coincidentes. O pacote "grep" instala: grep, egrep e fgrep.

.

(comandos para saber sobre o grep usando o terminal)

1) man grep
2) grep --help
3) info grep
4) man egrep
5) man fgrep
6) man pgrep

#

Exemplos:

1) grep palavra-que-procura nome-do-arquivo.txt (deve estar com o terminal aberto onde está o arquivo-de-texto.txt)

2) grep -i palavra-que-procura arquivo-de-texto.txt

3) grep -r palavra-que-procura ~/Downloads/

.

Executo:

1) grep não arq-poema.txt

2) grep -r teus ~/Downloads/

3) grep -n root /etc/passwd

4) grep -v bash /etc/passwd | grep -v nologin

5) grep -c false /etc/passwd

.

Exemplos:

grep -i arquivo-que-procura caminho/para/pasta

grep -i aluno arq-poema.txt /home/Downloads/EstudoEmDown

grep "frase que procuro em minusculas" -r /home/seu-usuario-whoami/nome-da-pasta-onde-esta-o-arquivo/ (Procurar uma frase em todos os arquivos de um diretório)

.

Executo:

grep -r teus arq-poema.txt

.

Exemplo:

grep -i "frase que procuro em minusculas" -r /home/seu-usuario-whoami/nome-da-pasta-onde-esta-o-arquivo/

.

Executo:

grep -i "Mas se a luz dos olhos teus" -r

.

Executo:

1) echo -e 'Linux [ Unix babig O linux descer Unix\nbaleix # nunix festa mais menos cat \nFESTA MAIS MENOS escritor beba barrigudas \nbibliotecas resolvem Carl catia do decolar big bebig teus \nLinux faça não Aluno8 Carlos tempestades \nbeira # cet Charles GNU Mariana Descer nano \ngedit sonda NaNo GediT servo.linux.vibrador Certo { unix \ncitatel Decolar bibig cit universo GNU festa Unix\ncetico mais O dia mercenario jobs linux gnu ALUNO8 teus menos Circo \nLinux Unix bin no } desalmado do linux bebe ALUNO8 no jobs \nbiBliOtecAs ] Sonda navE Unix sonda nave O Unix' > arq-grep-palavras.txt ; clear ; cat -n arq-grep-palavras.txt

2) grep -lr "nano"

3) grep -Lr "universo"

4) grep -r --color=always "teus"

5) grep "tempestades" arq-grep-palavras.txt

6) grep -E "unix|nave" arq-grep-palavras.txt (grep -E procura por todas em qualquer lugar)

7) grep -E --color=always "unix|nave" arq-grep-palavras.txt

#

OBS:
Para procurar em um arquivo as linhas que contenham uma palavra OU outra palavra deve estar com o terminal aberto onde está o arquivo que contém a palavra.

Exemplo:

egrep '(palavra_um|palavra2)' nome-do-arquivo

.

Executo:

egrep '(olhos|luz)' arq-poema.txt

egrep '(mais|nave)' arq-grep-palavras.txt

egrep '(imortal|arcano)' arq_marciano.txt

clear

.

COMANDO FGREP:

.

"O fgrep retorna as ocorrências de palavras simples na linha de comando."

.

Executo:

1) fgrep "universo" arq-grep-palavras.txt

2) fgrep -i "nano" arq-grep-palavras.txt

3) fgrep -c "nano" arq-grep-palavras.txt

4) fgrep -n "sonda" arq-grep-palavras.txt

5) clear

.

COMANDO EGREP:

"O egrep, por padrão, reconhece e utiliza expressões regulares simples e estendidas."

.

Executo:

1) egrep "mais" arq-grep-palavras.txt

2) egrep -i "nano" arq-grep-palavras.txt

3) egrep -c "menos" arq-grep-palavras.txt

4) egrep -n "universo" arq-grep-palavras.txt

5) clear

6) egrep descer arq-grep-palavras.txt

7) egrep "[Dd]escer" arq-grep-palavras.txt

8) egrep "c[aei]t" arq-grep-palavras.txt

egrep "c[a-i]t" arq-grep-palavras.txt

9) egrep "C[a-v]" arq-grep-palavras.txt

10) egrep "^Linux" arq-grep-palavras.txt (tudo que começar com Linux)

11) egrep -v "^Linux" arq-grep-palavras.txt

12) egrep "Unix$" arq-grep-palavras.txt

egrep " $" arq-grep-palavras.txt (procura linhas que tem espaço no final)

13) egrep "[a-i]g*" arq-grep-palavras.txt

14) egrep "b[a-i]g*" arq-grep-palavras.txt

15) egrep "b[a-i]g+" arq-grep-palavras.txt (o caracter anterior tem que aparecer pelo menos uma vez)

15) egrep "b[a-i]g?" arq-grep-palavras.txt (caractere anterior nenhuma ou apenas uma vez)

16) egrep "O.Unix" arq-grep-palavras.txt

egrep "O.linux" arq-grep-palavras.txt

17) egrep "O.*linux" arq-grep-palavras.txt

18) egrep "[Ll]inux" arq-grep-palavras.txt

19) egrep "[Ll]inux." arq-grep-palavras.txt

19) egrep "[Ll]inux\." arq-grep-palavras.txt

20) egrep "\[Ll\]inux\." arq-grep-palavras.txt

21) sed '/^#/d' arq-grep-palavras.txt

sed '/^Linux/d' arq-grep-palavras.txt

22) sed 's/[Ll]inux/Unix/g' arq-grep-palavras.txt

#

O COMANDO FIND:

"find (Localiza arquivo por suas características)"

.

Exemplos:

find ./ (exibe os arquivos existentes na pasta onde está)

find -name "palavra-termo-de-busca"

find -iname "palavra-termo-de-busca"

.

Exemplo:

find -name nome-do-arquivo -exec rm {} \; (Executa o comando cmd .

A finalidade do comando é considerada encerrada quando um ponto e vírgula (;) é encontrado. A cadeia {} é substituída pelo nome de cada arquivo que satisfaz ao critério de pesquisa e a linha assim formada é executada. Assim como foi dito para a opção - name, o ponto e vírgula (;)deve ter antes uma contrabarra, ou deve estar entre aspas ou apóstrofos)

.

Executo (faço o teste pelo terminal):

touch 01-arquivo.txt

ls -t

find -name 01-arquivo.txt -exec rm {} \;

ls -t

.

Executo:

> 01-arqvo.txt

echo 'Locate, Find, Estudo, Linux, pipe, casar, anos, Casar, Zuenir, Xerox, Caesar, caesar, Aluno5, um' > 01-arqvo.txt

cat 01-arqvo.txt

find 01-arqvo.txt

.

"O find é para realizar buscas por arquivos e diretórios, mas também, através da utilização de diversos parâmetros adicionais, serve para realizar outras operações, em conjunto."

.

Executo os comandos abaixo:

.

1)

cd ; mkdir ~/Downloads/EstudoEmDown/

2)

cd ; mkdir ~/Downloads/EstudoEmDown/pasta-find/ ; cd ~/Downloads/EstudoEmDown/pasta-find/ ; echo -ne 'amore \njuros \nencontrar \nbola \nbibliOteCAs \nalunos6 \nescritor \nAlunos6 \nfalantes \nmarina \nluz \nCharles \nalto \nfeira \nescritor \nMoreira \nZuenir \nfaça \nolhos \nescada \nluz \nhomem \nfalantes \nfaça \nesfinge \nporta \nEscada \nmartelo \nAluno6 \nescritor \ncasar \nvulcano \nalto \nporta \nMariana \nfeira \nmarina \nmarina \nAluNos6 \nalto \nLuz \nisto \nescritor \nfeira \nporta \nFeira \nEsfinge \nporta \nPorta \nluz \nmoreira \ncasar \nAna \nCharles \nana \ncharles \nbibliotecas \nMartelo \nAlto \nFeira \nhomem \nEsfinge \nOlhos \nMartelo \namor' > arq-find.txt

.

Executo:

1) find . -name "arq-find.txt"

2) find ~/Downloads/EstudoEmDown/pasta-find/ "arq-find.txt"

3) find . -iname "aRq-fInD.txt"

4) find . -iname "aRq-fInD.txt" -exec ls -lt {} \;

5) find . -iname Arq-FiNd.txt -print0 | xargs -0 ls -til

6) find . -name "*.txt" -print0 | xargs -0 grep -Hin "amor" {} \;

7) find . -name "*.txt" -print0 | xargs -0 grep -Hin "Esfinge" {} \;

8) find . -name "*.txt" -mtime -2 -exec grep -Hin --color=always "ana" {} \;

9) find . -name "*.txt" -mtime -2 -exec grep -Hin --color=always "escada" {} \;

10) find . -name "*.txt" -mtime -2 -exec grep -Hin --color=always "arcano" {} \;

11) find . -name "*.txt" -mtime -2 -exec grep -Hin --color=always "luz" {} \;

12) find . -name "*.txt" -mtime -2 -exec grep -Hin --color=always "marciano" {} \;

13) find . -name "*.txt" -exec grep -l "faça" {} \;

14) ls -tli ~/Downloads/EstudoEmDown/pasta-find

15) find . -type f -print0 | xargs -0 ls -l

16) find . -maxdepth 1 -print0 | xargs -0 ls -l

17) find . -maxdepth 1 -type f -exec ls -l {} \; | less

.

OBS:
Aperto a tecla Q

.

18) find ~/Downloads/ mais

.

OBS:
Executar o comando 19 com cautela/cuidado.

.

19) find . -maxdepth 1 -type f -exec rm -f {} \;

20) find ~/Downloads -type f -atime -5 (Procura arquivos acessados há mais de 5 horas.

.

COMANDO BASENAME:

.

basename nome-do-arquivo (Devolve o nome de um arquivo recebendo o caminho completo)

Exemplo:

~ $basename Documentos/
Documentos

.

COMANDO DIRNAME:

dirname nome-do-diretório (Devolve o nome do diretório recebendo o caminho completo)

.

Executo:

> nome-do-arquivo.extensão (Cria arquivo vazio)

touch nome-do-arquivo.extensão1 nome-do-arquivo2.extensão (Cria um ou mais arquivos vazios)

cat nome-do-arquivo.extensão > nome-do-arquivo.extensão (Cria arquivo)

ls -alit

ls -l

cat nome-do-arquivo.extensão

cd ~

pwd

cd -

pwd

.

Executo:

echo -e 'Linux Olhar nada Faça Tudo Nada\n nada isso isto perfil luz \nUnix Festa Sonia amos Nada \ntudo Carlos martelo nada tordos \npoente perfil Aluno1 Maria nada \nluz Sonia Tudor nada Charles \nlinux UNIX unix LINUX nada \nhomem escada tambem lá estava nada' > arq-faz-de-conta.sh

cat arq-faz-de-conta.sh

.

REPETINDO:

1) cd - Navegando entre pastas/diretórios

2) cd . (pasta atual)

3) cd .. (pasta anterior)

4) cd ~ (pasta home do usuário)

5) cd - (última pasta)

.

COMANDO LS

ls - Lista arquivos e pastas

.

ls [opções] [arquivo/diretório/pasta]

.

Executo:

ls -l

.

ls -t

.

ls *.txt

(asterisco representa qualquer coisa ligada a .txt)

.

ls *.sh

(asterisco representa qualquer coisa ligada a .sh)

.

ls -lat

.

ls -lah

.

ls ?????????.txt (procura arquivos .txt com 9 caracteres)

(o ponto de interrogação substitui um e somente um caractere)

.

ls ????*.sh

.

ls [at]*.mp3

(listar todos os arquivos começados por a ou t, seguido por qualquer coisa * e terminados por .mp3).

.

Exemplo:

$ls [at]*.mp3
alcione_ne_me_quitte_pas.mp3 alex_cohen_quem_de_nos_dois.mp3
alex_cohen_hotel_california.mp3

.

Executo:

1) ls [ap]*.txt

2) ls [b-f]*.txt

3) ls [a-z]*.txt

.

CP - COPIA ARQUIVOS E DIRETÓRIOS

.

cp [opções]

.

1) Se usar:

cp -i

.

É o modo interativo. Talvez uso se não tenho certeza de que o arquivo foi copiado previamente, pois copiar novamente sobrescreve o arquivo copiado e posso perder alguma coisa...

.

2) Se usar:

cp -v

.

Mostra o que está copiando

.

Executo:

cp -v arq-faz-de-conta.sh arq-faz-de-conta-backup.sh

ls1

.

3) Se usar:

cp -r

.

Copia recursivamente arquivos pastas e subpastas

.

COMANDO: MV

mv - MOVER ARQUIVOS E PASTAS/DIRETÓRIOS

.

É usado para renomear arquivos, é quase o mesmo que copiar o arquivo origem para o arquivo destino e depois remover o arquivo origem. As opções do mv são parecidas com as do comando cp.

.

Se eu crio o arquivo-teste.txt pelo terminal com o comando touch e escrevo algo nele com o comando echo redirecionando a saída do echo para o arquivo-teste.txt, depois leio o que escrevi com o comando cat eu posso copia-lo para o 2arquivo-teste-novo.txt com o comando mv.

.

EXECUTO COPIANDO E COLANDO OS COMANDOS ABAIXO UM DE CADA VEZ:

.

echo -e '\nOlá!\nTudo\nFirme?' >> 05-arq.txt

echo -e '2-Olá!\n2-Tudo\n2-Firme?\n' >> 05-arq.txt

echo "Aprendendo Linux !" >> 05-arq.txt

echo -e '\nOs dedos dormentes !\n \nOs olhos vermelhos !\n' >> 05-arq.txt

echo -e '\nTodos esses que aí estão \nAtravandando meu caminho, \nEles passarão... \nEu passarinho! \n \n-- Mario Quintana \n' > parq-passarinho.txt

ls -tl1

cat 05-arq.txt

cat parq-passarinho.txt

cat -n 05-arq.txt

cat -n parq-passarinho.txt

touch arquivo-teste.txt

ls -li

ls -t1

find -iname 05-arq.txt

find ./* -type f -exec grep -l Tudo {} \; (Este busca textos ou strings dentro de arquivos)

find ./* -type f -exec grep -l passarinho {} \;

echo 'Aprendendo Linux !' >> arquivo-teste.txt

cat -n arquivo-teste.txt

echo 'Estou Aprendendo Linux ! Nós Estamos Aprendendo Linux ! Tudo Linux ! passaro Linux tudo' > arquivo-teste.txt

find ./* -type f -exec grep -l Linux {} \;

grep "Linux" -r ./

find /home -size +100k

grep luz arq-poema.txt

egrep "faça" -r ./

egrep "faça" -r ?*.txt

find ./* -size +100k

find ./* -type f -exec grep -l faça {} \;

grep "Tudo" -r ./

egrep "passarinho" -r ./

find ./* -size +20k

fgrep "Linux" -r ./

echo 'Aprender Linux é Divertido !' >> arquivo-teste.txt

clear

cat arquivo-teste.txt

find -name "arq*"

find -iname "arq*"

find *.txt

find *.txtt

find /home -size -1G

find ./* -size -1G

find ./* -size -190k

mv arquivo-teste.txt 2arquivo-teste-novo.txt

ls1

ls2

ls3

ls0

clear

ls -R

ls -li

ls -t

cat 2arquivo-teste-novo.txt

find -name 2arq*

find -iname "2arq*"

find ./* -type f -exec grep -l Divertido {} \;

find /home -size +2G (encontrar arquivos pelo tamanho)

find /home/* -mtime 30

whoami

find /home/user-whoami -mtime 15 (encontrar arquivo modificado nos últimos 15 dias)

cd ..

find . -mtime 2

find . -size +2048 -print

find . -size +2M -print (procura arquivos maiores que 2048 que é igual a 2 megabytes)

find . -atime +3 -print | head (procura no diretório corrente arquivos que não foram acessados a mais de 3 dias )

find . -iname "*.jpg" | wc -l

cd -

.

MAIS COMANDOS...

Por exemplo, o comando mv é útil quando eu tenho um arquivo que vou refazer mas quero guardar o arquivo antigo como base para o novo arquivo.

.

O comando mv pode mover o 2arquivo-teste-novo.txt para a pasta Downloads.

.

Executo os comandos abaixo:

cd

ls -li

ls -t

pwd

mv 2arquivo-teste-novo.txt Downloads/

cd ..

pwd

ls -li

ls -t

cat 2arquivo-teste-novo.txt

find -name "2arq*"

find *.txt

cd -

cd Downloads/EstudoEmDown/

ls1

.

OBS:
Agora renomeio o 2arquivo-teste-novo.txt para 3arquivo-teste-velho.txt:

.

mv 2arquivo-teste-novo.txt 3arquivo-teste-velho.txt

cat 3arquivo-teste-velho.txt

find -name "3ar*"

.

CONTINUO EXECUTANDO UM COMANDO DE CADA VEZ.

.

pwd

ls -t

mv -b 3arquivo-teste-velho.txt 3arquivo-teste-back.txt

ls -t

pwd

cat 3arquivo-teste-back.txt

mv -i 3arquivo-teste-back.txt 4arquivo-teste-velho.txt

ls -t

pwd

cat -n 4arquivo-teste-velho.txt

find -name "4arq*"

find *.txt

find -iname "4arq*" -exec rm {} \;

ls -t

find *.txt

.

LN - ESTABELECE LIGAÇÕES ENTRE ARQUIVOS

.

ln [-s]

.

O comando ln cria ligações (links).

.

Existem dois tipos de ligações:

HARD LINK E LINK SIMBÓLICO.

.

Hard Link: neste caso, os dois compartilham os dados. Se apagar o arquivo original o hardlink permanece funcionando. Somente é possível fazer hardlink em arquivos que estejam em uma mesma partição de disco. Somente o usuário proprietário do sistema pode criar/desfazer hardlinks.

.

Executo:

> arq3-test.txt

ls -t

ln arq3-test.txt arq3-hard-link

ls -lit (veja se possuem o mesmo número Inode e o mesmo device)

echo '1-Aprendendo sobre hard link.' >> arq3-test.txt

cat arq3-hard-link

echo '2-Mais uma linha escrita: Aprendendo sobre hard link.' >> arq3-hard-link

ls -lit

cat arq3-test.txt

rm -f arq3-test.txt

ls -lit

cat arq3-hard-link

.

Link Simbólico é somente o caminho do
arquivo-origem. Diferente do hard link pode-se fazer links simbólicos em arquivos e pastas. Nenhum dos dois precisam estar na mesma partição de disco.

.

Uso mais Link Simbólico. Para entender vou criar links. Executo os comandos abaixo um de cada vez.

.

Ex:

touch arq4-test.txt

ls -t

ln -s arq4-test.txt arq4-link-simb

ls -tli

echo 'Aprendendo sobre link simbolico.' >> arq4-link-simb

cat arq4-test.txt

ls -t

rm -f arq4-test.txt (Este é o arquivo origem)

cat arq4-link-simb

ls -t

rm arq4-link-simb

.

Comandos que leem da entrada padrão (stdin/teclado) e escrevem na saída padrão (stdout/monitor de vídeo). O propósito destes filtros quase sempre é o de modificar a saída de outros, por isso, geralmente são utilizados em combinação com mais comandos. Exemplo:

1) cat
2) wc
3) sort
4) head
5) tail

.

1) cat (Exibe conteúdo de arquivos)

2) wc (Conta caracteres, palavras e/ou linhas de arquivos)

3) sort (Ordena o conteúdo de arquivos)

4) head (Exibe o início dos arquivos)

5) tail (Exibe o final dos arquivos)

.

Os comandos/filtros acima se não forem direcionados para um arquivo, irão aparecer na tela do terminal.

.

APRENDENDO SHELL SCRIPT - COMANDOS MAIS USADOS DO SHELLSCRIPT

.

SOBRE O COMANDOS MAIS USADOS DO SHELLSCRIPT:

É para iniciantes. Pretende oferecer o máximo de informação possível em pouco tempo, para que a pessoa ao terminar de EXECUTAR este artigo entenda bastante coisa sobre shell script e seja capaz de criar scripts úteis para si mesma. Desde o primeiro artigo eu editei ele umas oito ou nove vezes. Para mim este ficou mais interessante. Longe de ser perfeito, peço que faça vista grossa a erros de digitação ou definições ligeiramente incoerentes. O negócio é que este artigo é realmente útil para mim e espero que seja útil para você também. A maior parte deste artigo é pesquisa, mas alguns pedaços foram reescritos.

.

Não esqueça de dar intervalos em seus estudos para se esticar, hidratar, etc.

.

SABE POR QUE?

Porque depois de executar alguns trechos deste artigo a ficha cai, a pessoa fica animada e não quer parar (tipo eu).

.

VAMOS LÁ?

.

Qual é o seu usuário?
Se você esqueceu ou não tem certeza qual é o seu usuário, use o comando "whoami" sem aspas, para saber.
Abra o terminal pelo menu do sistema. Não mude de terminal, eu recomendo.

.

DIGito ESTES COMANDOS ABAIXO UM DE CADA VEZ:

.

apropos shell

whereis bash

whatis bash

echo $SHELL

echo $$

clear

echo

echo ''

echo ""

echo "Olá!"

printf 'Bem vindo ao bash!' (Aperte a tecla enter e digito: ls)

echo '#!/bin/bash'

echo "#!/bin/bash"

ls -t

ls -a

echo ; echo "Olá!" ; echo

echo -e 'Bom\nDia\nMundo!'

echo -e "Bom\nDia\nMundo!"

echo -e "\nBom\nDia\nMundo! \n"

echo "Hello world!"

echo "Hello "world"!"

echo "Hello \"world\"!"

echo "Alô \"Mundo\"!"

echo -e "1\t2\t3"

echo -e '1\t2\t3'

echo -e '1\t\v2\t\v3'

echo -e "Nós\tVós\tEles(as)"

echo -e 'Olá\t\vMundo\t\vLinux'

echo -e 'Olá\t\vMundo\t\vLinux\t\vpassarinho\t\volhos'

echo -e 'Olá\t\vMundo\t\vLinux\t\vpassarinho\t\volhos' >> test.txt

cat test.txt

echo -e 'Nós\tVós\tEles(as)'

printf "Hello world" (Aperto a tecla enter e digito: df -h)

pwd

clear

ls -tali

sleep 7

echo ; echo 'Olá!' ; sleep 3 ; ls -t

free -h -t

free -th

sleep 4

date

date -d "yesterday"

date -d "2 days ago"

date +%d

date +%m

date +%Y

date +"%d/%m/%Y"

cal

du -h

du -hc

clear

du -hcs

uptime

uname -a

free -tmlh

whatis df

df -a -h

df -k -l

df -T -m

whatis history

history

echo ; whoami ; echo

ls ; echo ; pwd ; echo

echo ; ls -at ; echo

echo "sou \n um \n texto"

echo -e "sou \n\v um \n\v texto"

echo -e "\nsou \n\t\v um \n\t\v texto\n"

whatis du

du *

ls -lah

du * | ls -lah

du -hcs

du -ach

clear

du * | ls -t | df -h

lsb_release

lsb_release -a

whatis cat

cat /etc/hostname

cat -n /etc/hostname

cd ..

pwd

cd -

ls -t ; w

VARIAVEL1 = Valor

echo $VARIAVEL1

VARIAVEL1=Valor

echo $VARIAVEL1

VARIAVEL2 = linux comandos shell script

echo $VARIAVEL2

VARIAVEL2= "linux comandos shell script"

echo $VARIAVEL2

VARIAVEL2 ="linux comandos shell script"

echo $VARIAVEL2

VARIAVEL2="linux comandos shell script"

echo $VARIAVEL2

echo $$ (mostra o pid da seção atual)

ps aux |grep bash

VARIAVEL="Meu diretório atual é o `pwd`"

echo $VARIAVEL

VARIAVEL="Este diretório contem: `ls -t`"

echo $VARIAVEL

VARIAVEL="Hoje é: `d`"

echo $VARIAVEL

unset VARIAVEL

echo $VARIAVEL

ls

cd -

pwd

ls

clear

echo ; echo 'df: Relata o espaço de disco usado pelo sistema (Usado e Livre)' ; echo ; df -h ; echo

ls -hat

echo ; echo "du: Relata o espaço utilizado no disco de tal arquivo ou diretório" ; echo ; du -hcs ; echo

echo ; echo 'env (Este comando oferece uma lista de variáveis. Entre elas PWD, USER, SESSION_MANAGER e LANG)' ; sleep 4 ; echo ; env ; echo

clear

echo $PWD

echo ${PWD}

echo $USER

echo "Eu estou logado como usuário $USER"

echo $SESSION_MANAGER

echo ${SESSION_MANAGER}

echo $LANG

VALOR="Linux"

echo $VALOR

echo ${VALOR}

echo $VALOR $VALOR

echo ${VALOR} ${VALOR}

VALOR='ls -t'

$VALOR

${VALOR}

VALOR='history'

echo $VALOR

$VALOR

echo ${VALOR}

${VALOR}

unset VALOR

VALOR=$(cat /etc/hostname)

echo $VALOR

$VALOR

clear

VALOR='free -h -t'

$VALOR

${VALOR}

echo $VALOR

echo ${VALOR}

echo VALOR

echo -e '\nSaiba que ao usar o comando read VALOR\n \n(Aperte a tecla enter, digito: "ls" sem aspas e aperte enter.)\n \nDepois execute $VALOR\n \nVamos ver isto logo abaixo:\n'

read VALOR

$VALOR

${VALOR}

read VALOR

.

OBS: Aperto a tecla enter, digito: "uptime" sem aspas e aperte enter.

.

echo $VALOR

$VALOR

${VALOR}

echo "Entre com o valor para a variável: " ; read VARIAVEL

$VARIAVEL

unset VARIAVEL

VALOR='du -hcs'

echo ; $VALOR ; echo ; $VALOR ; echo

echo ; $VALOR ; sleep 4 ; echo ; $VALOR ; echo

echo ; ${VALOR} ; sleep 4 ; echo ; ${VALOR} ; echo

clear

unset VALOR

echo ; $VALOR

$VALOR

${VALOR}

echo ; ${VALOR}

VALOR='lsb_release -a'

$VALOR

VALOR=$(lsb_release -a)

echo $VALOR

echo -e '\nOlá!\nVamos \nSaber \nOs \nComandos \ndo \nShellscript \nLinux!'

clear ; echo -e '\n \nOlá!\n \nVamos\n \nSaber\n \nOs\n \nComandos\n \ndo\n \nShellscript Linux!\n'

HOJE=$(lsblk)

echo "Informação sobre dispositivos de bloco: $HOJE"

echo "Informação sobre dispositivos de bloco: ${HOJE}"

HOJE=$(cal)

echo "Informação sobre o calendário atual: $HOJE"

HOJE=$(uptime)

echo "Informação sobre tempo de funcionamento desta máquina: $HOJE"

clear

HOJE=$(lsblk)

echo 'Informação sobre dispositivos de bloco: $HOJE'

echo 'Informação sobre dispositivos de bloco: ${HOJE}'

unset HOJE

echo $HOJE

echo ${HOJE}

echo `expr 3 + 2`

echo $((3+2))

echo `expr 9 + 4`

echo $((9+4))

echo $((2*3))

echo 'dois vezes três é:' $((2*3))

echo $((2*4-2/2+3))

VALOR=44

echo $VALOR

echo $((VALOR*1))

echo $((VALOR*2))

echo $((VALOR*3))

echo $VALOR

VALOR=$((VALOR+1))

echo $VALOR

VALOR=$((VALOR+11))

echo $VALOR

VALOR=$((VALOR+1))

echo $VALOR

VALOR=$((VALOR+11))

echo $VALOR

unset VALOR

echo $VALOR

VALOR="echo -e \nBom\nDia\nMundo\nLinux\n"

$VALOR

echo $VALOR

echo ${VALOR}

VALOR=$(uname -a)

echo $VALOR

HOJE=$(arch)

echo $HOJE

clear

VALOR=$(uname -a) ; echo ; echo "Informação sobre o kernel: $VALOR" ; sleep 4 ; echo ; VALOR=$(arch) ; echo "Informação sobre a arquitetura do sistema: $USER" ; echo ; sleep 2

unset VALOR

unset HOJE

clear

printf "%-5s %-10s %-4s\n" No Nome Pontos

printf "%-5s %-10s %-4.2f\n" 1 Marta 8

printf "%-5s %-10s %-4.2f\n" 2 Joel 9

printf "%-5s %-10s %-4.2f\n" 3 Carlos 7

echo -e "\e[1;31m Este é o texto em vermelho \e[0m"

echo -e "\e[1;32m Este é o texto em verde \e[0m"

echo -e "\e[1;32m Este é o \e[1;34mtexto \e[1;31mmisturado \e[0m"

VALOR="echo -e \e[1;31m\nBom\nDia\nMundo\nLinux\n\e[0m"

$VALOR

echo $VALOR

echo ${VALOR}

unset VALOR

$VALOR

echo $VALOR

unset HOJE

echo $HOJE

STRING="Isso é |=_=_=| uma | =_=_=> StrinG"

echo ; echo 'Quer saber o que é uma string?' ; echo ; echo $STRING ; echo

unset STRING

cd

pwd

cd ~/Downloads

cd ~/Downloads/EstudoEmDown

pwd

clear

exit

.

Muito bom que você digitou um comando de cada vez.

Os comandos mais longos pode copiar e colar no terminal se quiser, mas no início seria melhor digitar.

Saiba que a partir deste momento você já está entendendo coisas extremamente úteis para escrever shellscript usando o Bash!

Uma coisa interessante sobre a maior parte dos comandos acima, é que para estudar eles, você não precisa estar conectado a internet.

Os comandos acima oferecem informações interessantes e úteis. Podemos colocar todos eles em um só script e executar. Dependendo do caso, é mais fácil que digitar um a um de cada vez toda vez que precisar.

.

SE PUDER, ANTES DE CONTINUAR EXECUTE OS COMANDOS ACIMA QUE TE CHAMARAM MAIS A ATENÇÃO DE NOVO POIS, EXECUTAR ELES É MUITO DIDÁTICO. NADA MELHOR QUE APRENDER PRATICANDO.

.

ALGUMAS DICAS ÚTEIS QUE SERÃO REPETIDAS DURANTE O CAMINHO (Vou repetir muitas coisas):

.

1)

Não execute shell script como root.

.

2)

O shell script Linux usando o interpretador de comandos Bash começa com o shebang:

#!/bin/bash

.

3)

Abro um editor de texto e colo nele o script salvando com um nome que termine com extensão .sh

.

4)

Dar permissão para executar o script pode ser só para você ou para todos usarem:

chmod +x MeuScript.sh (só você)
chmod a+x MeuScript.sh (todos os usuários do PC)

.

OBS:
Para remover a permissão de um shell script:

1) chmod -x MeuScript.sh
2) chmod a-x MeuScript.sh

.

UM SCRIPT PODE SER EXECUTADO DE 3 MODOS:

1) bash MeuScript.sh
2) sh MeuScript.sh
3) ./MeuScript.sh

.

Exemplo para começar bem. Copio e colo o código abaixo no terminal que você vai abrir pelo MENU DO SISTEMA:

.

echo -e '#!/bin/bash \nclear \necho \necho Olá usuário Linux! \nsleep 2 \necho \necho Olá Mundo! \nsleep 2 \necho \nVALOR=GNU/Linux \nVALOR2=whoami \necho Você quer aprender comandos $VALOR? \nsleep 2\necho \necho Então vamos aprender comandos $VALOR!\nsleep 2 \necho \necho Vamos aprender Shell Script!\nsleep 2\necho\necho 'Até Breve usuário Linux:' ; sleep 2 ; echo ; $VALOR2\necho\nsleep 2\nexit' > 03-olauser.sh ; chmod +x 03-olauser.sh ; bash 03-olauser.sh

.

Para remover o script criado pelo código acima, o arquivo 03-olauser.sh, use o mouse e o gerenciador de arquivos ou copio e colo o comando abaixo no mesmo terminal onde executou o código:

.

clear ; unset VALOR ; sleep 2 ; rm -f 03-olauser.sh ; sleep 2 ; ls -t ; sleep 3 ; exit

.

CRIAR, TRABALHAR E SALVAR ARQUIVO NO VIM (Atualizado)

.

Questões de diversos concursos estão ligadas ao Vim. Exames para obter certificações Linux vão pedir conhecimento sobre ele então é bom procurar saber alguma coisa.

.

O Vim é um bicho brabo. Tudo é pelo teclado. O Vim usa todas as teclas do teclado para comandos e quando acabam-se as minúsculas ele usa comandos em letras maiúsculas. Para mim o Vim não é para usuários comuns (EU) e sim para programadores, porém, eu quero e vou saber alguma coisa deste editor de texto. Só usaria diariamente se fosse caso de vida ou morte.

.

Instalo o Vim pelo gerenciador de pacotes da minha Distro.

.

Digito: man vim

.

Por tudo que é mais sagrado! A man page do Vim é vastíssima e toda em inglês e para mim extremamente técnica. Dá para pescar uma coisa aqui e alí, mas o que me ajuda é pesquisar na rede.

.

Longe, longe do aconchego do lar quando se trabalha profissionalmente com shell script e programas, dizem que quase sempre não tem ambiente gráfico para quem administra sistemas. Então há de se acostumar a usar editores de texto que funcionam no terminal. Por exemplo o nano e o Vim. O mais usado pelos profissionais parece que é o Vim então mesmo sendo iniciante, alguns exercícios básicos de como usar o Vim são importantes para mim. Vou pesquisar e fazer isto. Vou tentar aprender a usar o editor de textos Vim.

.

No Vim as teclas mais apertadas por mim são a tecla "Esc" e a tecla "i". A tecla "Esc" faz o editor entrar em modo de comando para poder salvar e se movimentar pelo texto entre outras coisas. A tecla "i" é o modo de inserção onde posso digitar palavras entre outras coisas.

.

Com o Vim eu posso acessar o terminal, apertando Esc e digitando por exemplo:

:!ls -t

:!pwd

:!uptime

Aperto Enter, confiro e aperto Enter voltando ao Vim.

.

Para procurar aperto Esc e digito / depois escrevo a palavra de busca. / procura de cima para baixo para procurar o próximo aperto N.

.

? (procura de baixo para cima.)

.

NO VIM PARECE QUE O ESQUEMA É MAIS OU MENOS ASSIM:

.

Aperto Esc

Para recortar uma linha uso: dd

Para recortar 5 linhas: d5d

Para colar aperto p de paste.

Para copiar y5y depois aperto p para colar.

.

LISTA DE COMANDOS VIM:

1) Inserção (de texto) -> Tecla i

2) Comandos (manipular texto) -> Tecla Esc

3) Linha de comando (manipular arquivo) -> Tecla :

4) Visual (seleção visual de texto) -> Tecla v

5) Busca (busca de padrões de texto) -> Tecla /

6) Reposição (insersão sobrescrevendo) -> Tecla R

7) Sair e salvar - aperto a tecla Esc e digito -> 😡 (salva e sai)

PARA ABRIR O VIM:

1) vim nome-do-arquivo.sh (se o arquivo não existe, ele cria)

2) vim nome-do-arquivo.txt (abre o arquivo com o cursor no fim do arquivo)

3) vim nome-do-arquivo.sh.txt +9 (abre o arquivo com o cursor na linha 9)

4) vim MeuArquivoVim.txt +/frase (abre o arquivo na primeira vez que tiver a palavra frase)

.

NO TERMINAL DIGITO: vim UmArquivoVim.txt

.

ESCREVENDO NO VIM:

Com o vim aberto, aperto a tecla Esc. Aperto a tecla i. Digito algumas linhas. Exemplo:

.

Uma frase escrevo no editor de texto - Lista de palavras:

Manute mamute Carlos carlos Sonia sonia Letra
luz olhos não maria Maria joão João isto
Unix Carlos Aluno4 kernel GNU/Linux
Unix GNU/Linux Kernel Linux
Unix olhos Kernel luz
.

SAIO E SALVO:

Aperto Esc, digito ZZ (maiúsculo)

.

Volto ao Vim com o comando: vim nome-do-arquivo.txt

.

VIM: COPIAR/COLAR
1) Aperto ESC
2) Posiciono o cursor no início do texto que quero copiar
3) Digito v minúsculo
Usando as teclas de direção, marco o texto a ser copiado
4) Digito y minúsculo
5) Posiciono o cursor no ponto onde desejo colar o texto
6) Digito p minúsculo

.

VIM: RECORTAR/COLAR
1) ESC
2) Posicione o cursor no início do texto que quer recortar
3) Digite v minúsculo
4) Usando as teclas de direção, marque o texto a ser recortado
5) Digite d minúsculo
6) Posicione o cursor no ponto onde deseja colar o texto
7) Digite p minúsculo

.

PARA ABRIR VÁRIOS ARQUIVOS (janelas horizontais):

Exemplo:

vim -o arqu1.txt Arquiv2.txt arq-teste3.txt texto-teste4.txt

.

PARA ABRIR VÁRIOS ARQUIVOS (janelas verticais):

Exemplo:

vim -O arqu1.txt Arquiv2.txt arq-teste3.txt texto-teste4.txt

.

PARA TROCAR DE JANELAS APERTO AS TECLAS:

1) Esc

2) Ctrl ww

.

No editor de texto Vim quase tudo é feito apenas usando o teclado. Porem pode por exemplo copiar um texto selecionado com o mouse e colar no Vim. Então devo aprender a apertar teclas para fazer as coisas no Vim.

.

APERTANDO TECLAS:

.

i (Modo de Inserção)

No modo de inserção (Esc a) começo a digitar a partidor do local onde o cursor está.

No modo de inserção (Esc o) começo a digitar numa linha abaixo do cursor.

No modo de inserção (Esc r) começo a digitar sobrescrevendo.

Esc (Modo de Comandos)

Esc h (Vai para esquerda)

Esc j (Desce)

Esc k (Sobe)

Esc l (Vai para a direita)

Esc :wq (salva e sai)

Esc 😡 (salva e sai)

Esc ZZ (zalva e zai)

Esq :q! (sai mesmo que não tenha salvo)

Esc qa (fecha todos os arquivos que não foram alterados)

Esc :q (sai sem ligar se salvou, modificou ou não)

Esc :wqa (salva e sai de todos os arquivos que estiverem abertos)

Esc :W (salva o que foi escrito)

Esq :set autowrite (salva a cada operação feita)

Esc :set aw (salva a cada operação feita)

Esc :wa (salva todos os arquivos que estiverem abertos)

Esc :syntax on (Deixa o script colorido)

.

Executo este exercício no meu terminal abrindo ele pelo Menu do meu sistema:

.

Para entrar em MeuArquivoVim.txt em pasta-estudo-vim:

cd

cd Downloads/EstudoEmDown/

mkdir pasta-estudo-vim

cd pasta-estudo-vim/

touch MeuArquivoVim.txt

ls -t

vim MeuArquivoVim.txt

.

Para entrar em modo de inserção teclo:

i

.

Digito frases... Frases...

Mais frases....

La la la la la

Ba ba ba Ba Ba

Pi pi pi pi pi

Duma duma duma duma duma duma

Loba loba loba loba

Longe longe longe longe Longe

frase Frase frase frase Frase frase

Molinete molinete molinete molinete

Otorrino otorrino otorrino otorrino

Rajada Rajada Rajada Rajada Rajada

(Aperto a tecla x, Aperto a tecla Delete)

Escrevo: Pedra pedra pedra pedra

(Aperto Esc)

(Aperto as teclas h, j, k, l)

(Aperto as teclas :w)

(Aperto Enter)

(Aperto a tecla i)

Escrevo: Alguma palavra

(Aperto Esc)

(Aperto as teclas :syntax on)

Se este texto fosse um script, com :syntax on ele ficaria mais colorido.

(Aperto as teclas :set autowrite)

(Aperto Enter)

(Aperto a tecla i)

Escrevo: Mula mula Jaca janela

(Aperto Esc)

(Aperto as teclas :wq)

(Aperto a tecla i)

.

Volto ao modo de comandos teclando:

Esc

.

Salvar e sair:

:wq

.

Digito:

ls -t

du -h

.

Volto ao Vim:

vim MeuArquivoVim.txt

.

Aperto a tecla:

Esc

.

Saio do Vim:

ZZ (zalva e zai) ou:

:q!

.

Digito:

ls -t

pwd

.

Volto ao Vim:

vim MeuArquivoVim.txt

.

Aperto:

Esc

.

Saio do Vim:

:q!

.

Volto ao Vim:

vim MeuArquivoVim.txt

.

Para entrar em modo de inserção teclo:

i

.

Digito mais frases. Umas 6 linhas mais ou menos.

.

Volto ao modo de comandos teclando:

ESC

.

Salvar e sair (ESC + :wq) (ESC + ZZ):

:wq

ZZ (zalva e zai)
.

Listo arquivos e pastas:

ls -t

.

Volto ao arquivo usando o Vim:

vim MeuArquivoVim.txt

.

Volto ao modo de comandos teclando:

ESC

.

Vou para o modo de inserção teclando:

i

.

Aperto as teclas (estou no modo de inserção):

h, j, k, l

.

Aperto a tecla:

ESC

.

Aperto as teclas (estou no modo de comandos):

h, j, k, l

.

Vou para o início do arquivo teclando:

gg

.

Vou para o Final teclando:

G

.

Acesso a linha 8, 5, 1, 13, 15 e 11 digito:

1) 8G
2) 5G
3) 1G
4) 13G
5) 15G
6) 11G

.

Saio do Vim:

:q!

.

Volto ao Vim:

vim MeuArquivoVim.txt

.

Teclo:

ESC

.

Desço:

j

.

Subo:

k

.

Esquerda:

h

.

Direita:

l

.

Procuro pela palavra "frase" digito:

/frase

.

Aperto a tecla:

ESC

.

Aperto a tecla:

a (começa a digitar a direita do cursor)

.

Aperto a tecla:

O (modo de inserção uma linha antes do cursor)

.

yy para copiar a linha atual
yw para copiar a próxima palavra.

.

Se quiser copiar as próximas 3 palavras, tento y3w.
y$ para copiar do ponto atual até o final da linha

.

Depois de copiado, basta mover o cursor para o local, no texto, em que desejo inserir o conteúdo do buffer e teclar p

.

Copiar ou recortar palavras:

1) Esc

2) :

3) yw

4) dw

.

dd recorta a linha (atual) em que o cursor se encontra

.

dw recorta a palavra que se encontra à direita do cursor

.

db recorta a palavra à esquerda

.

3d recorta 3 linhas inteiras

.

O comando p é usado para colar (inserir o conteúdo do buffer no texto).

.

Depois de recortar o que quero, basta posicionar o cursor no ponto em que deseja colar o texto “apagado” e pressionar ‘p’ - para reinserir o conteúdo do buffer.

.

Se quiser, é possível multiplicar a quantidade de vezes em que é reinserido.

.

Tecle ‘5p’, por exemplo, para inserir o conteúdo do buffer 5 vezes.

.

Para selecionar um trecho:

V (para linhas)

v (para caracteres)

Uso: h j k l

Digito p para colar.

.

Para desfazer uma ação:

u

.

Para repetir um comando:

Ctrl+r

.

Buscar:

/palavra

.

Nova ocorrência:

N

.

:e - Abrir um arquivo.

.

Sintaxe

:e /root/teste.sh

.

:sp - Abrir em outra janela.

.

A Sintaxe pode ser :sp somente ou :sp /root/teste.sh

.

:enew - Novo documento.

A sintaxe

:enew

.

:sav - Salvar como.

A sintaxe

: sav nomedoarquivo.txt

.

u - Serve para Desfazer / Refazer.

.

A sintaxe " u " sem aspas, quando voce fizer uma coisa errada

.

. - Serve para repetir.

.

A Sintaxe " . " sem aspas.

.

[p - Serve para colar antes.

.

o comando eh simplesmente [p

.

]p - Server para colar depois.

.

o comando é simplesmente ]p

.

ggVG - Seleciona tudo.

.

"+x - Serve para recortar.

.

A sintaxe é escrita com da forma a cima (Aspa dupla)+(Sinal de mais)+(x).

.

"+y - Serve para colocar .

.

A sintaxe é escrita com da forma a cima (Aspa dupla)

.

+(Sinal de mais)+(y).

.

:wqa - Serve para salvar e sair.

A sintaxe é

:wqa

.

:qa - Serve para sair somente.

.

A sintaxe eh :qa

.

x - Serve para deletar

.

O comando para deletar eh somente " x " sem as aspas.

.

:set hls! - Serve para Ativar / Desativar Realce de padroes

.

REVISANDO:

Para criar um arquivo de texto chamado MeuArquivoVim.txt, cujo conteúdo seria a frase "Teste tutorial criar e salvar arquivo no VIM" faria assim:

.

Executo o comando: vim MeuArquivoVim.txt

.

Agora estou no Vim.

.

Pressiono a tecla: i (para passar do MODO DE COMANDOS para o MODO DE INSERÇÃO)

.

Digito a frase: Teste tutorial criar e salvar arquivo no VIM

Digito a frase:

.

Volto ao modo de comandos apertando a tecla: ESC

.

Digito o símbolo e as 2 letras abaixo:

:wq

.

Pressiono Enter logo em seguida.

.

O comando (:wq) é utilizado para SALVAR (write) o arquivo e SAIR (quit) do Vim.

.

Repito esses passos em meu computador algumas vezes e, ao fim, tenho o arquivo MeuArquivoVim.txt em meu diretório de trabalho.

.

Para listar arquivos e verificar a presença do MeuArquivoVim.txt digito:

ls -tli

.

COMANDOS PRINCIPAIS DO VIM

Agora que aprendi como alternar entre os modos de comando e inserção e já executei o meu primeiro comando (:wq), é hora de aprender mais teclas de atalho e novos comandos. Mas, antes de prosseguir, vale a pena prestar a atenção em dois detalhes importantes.

.

Primeiro, lembro de retornar ao Modo de Comandos pressionando a tecla ESC, caso esteja digitando um texto no Vim.

.

Caso contrário, os comandos desta lista não funcionarão e meu arquivo de texto acabará com sequências do tipo :q! no meio de alguma palavra.

.

Em segundo lugar, noto que o Vim faz uso de quase todas as letras do alfabeto e, na falta de opções, acaba apelando para maiúsculas.

.

Isto quer dizer que os comandos o e O são diferentes.

.

MOVIMENTANDO-SE NO ARQUIVO

.

Com isso em mente, posso começar a movimentar o cursor do Vim entre as linhas e letras de um arquivo de texto.

.

Para isso, pressiono ESC (para sair do modo de inserção, caso esteja nele) e, em seguida, uso as teclas:

h, j, k, l

As teclas (h, j, k, l) movem o cursor para esquerda (h), para baixo (j), para cima (k) e para a direita (l).

.

As setas direcionais também podem ser usadas para esse fim, mas podem não funcionar em qualquer distro ou mapa de teclado.

.

Se quiser me mover para o início do arquivo, digito gg e, quando quiser ir ao final, pressiono G (maiúsculo).

.

Também é possível pular de palavra em palavra com teclas w e b, além de ir diretamente para uma linha em específico. Se quiser acessar a 27ª linha do texto, por exemplo, digito 27G.

.

ABRIR, SALVAR E OUTRAS OPERAÇÕES DE ARQUIVOS

.

Abrir um arquivo de textos com o Vim é simples.

.

Basta informar o caminho e nome do arquivo como parâmetro ao comando vim, quando for executá-lo.

.

Se quisesse abrir o arquivo /etc/passwd, por exemplo, executaria no terminal:

vim /etc/passwd

.

Para sair do editor de textos, digito :q.

.

Se quiser forçar a operação de sair, sem me preocupar com a possibilidade de salvar o arquivo que estava sendo editado, pressiono :q!.

.

Para salvar o arquivo no qual estou trabalhando, uso o comando :w, enquanto que, para salvar e sair, com já visto acima, uso :wq.

.

MUDAR DE MODOS

.

Então pressionar a tecla i faz com que o Vim passe para o Modo de Inserção.

.

Pressionar a tecla ESC retorna para o Modo de Comandos.

.

Porém, é possível fazer um uso mais preciso dessa operação. A tecla i, na verdade, inicia a inserção de texto à esquerda da localização atual do cursor.

.

Se quiser começar a digitar à direita do cursor, pressiono a.

.

Da mesma forma, caso deseje entrar no modo de inserção uma linha antes do cursor, pressiono O, e, se preferir, o para uma linha após o cursor.

.

PESQUISAS E COMANDOS AVANÇADOS

.

Apesar da simplicidade aparente do Vim, o editor permite realizar ações mais complexas.

.

Para começar, posso desfazer a última ação pressionando a tecla u.

.

Caso queira refazer ou repetir um comando, uso Ctrl+r.

.

Se quiser procurar por um termo ou frase no arquivo de texto, digito / seguido da expressão, sem espaço.

.

Para buscar a palavra MeuArquivo, por exemplo, uso /MeuArquivo.

.

Para procurar pela ocorrência seguinte da palavra, após ter realizado a pesquisa, basta pressionar n.

.

Se quiser voltar uma ocorrência, pressiono N.

.

ALGUNS DOS COMANDOS DO VIM NO MODO DE COMANDOS:

0 : mover o cursor para o início da linha em que o cursor está posicionado.

a : inserir texto após a posição atual do cursor.

A : inserir texto no final da linha atual.

dd : deletar linha atual.

[n]+dd : deletar n linhas a partir da linha atual.

G : ir para o fim do arquivo.

[n]+G : ir para a n-ésima linha do arquivo.

h : voltar um caractere.

H : ir para a primeira linha exibida na tela atual.

i : inserir texto a partir da posição atual do cursor.

I : inserir texto no início da linha atual.

j : descer uma linha.

J : juntar a linha atual com a linha seguinte.

[n]+J : juntar n linhas consecutivas a partir da linha atual.

k : subir uma linha.

l : avançar um caractere.

L : ir para a última linha exibida na tela atual.

n : procurar, a partir da posição atual do cursor, a próxima ocorrência do texto definido no último comando /.

N : procurar, a partir da posição atual do cursor e indo em direção ao início do arquivo, a próxima ocorrência do texto definido no último comando /.

o : inserir uma linha em branco após a linha atual.

O : inserir uma linha em branco acima da linha atual.

p : inserir linhas copiadas após a linha atual.

P : inserir linhas copiadas antes da linha atual.

r : substituir o caractere atual.

R : substituir um conjunto de caracteres.

s : deletar o caractere atual e inserir texto.

S : apagar linha e inserir novo texto na linha.

u : desfazer a última alteração feita no texto e ainda não desfeita.

U : desfazer a última alteração feita no texto.

x : apagar caractere onde o cursor está posicionado.

$ : mover o cursor para o fim da linha em que o cursor está posicionado.

[n]+y : copiar n linhas a partir da linha atual.

yy : copiar a linha atual.

[n]+Y : copiar n linhas a partir da linha atual.

YY : copiar a linha atual.

CTRL+B : voltar uma página.

CTRL+F : avançar uma página.

F1 : exibir tela de ajuda.

[n]+ENTER : ir para n linhas abaixo da linha atual.

[n]+. : repetir o último comando que alterou o texto n vezes a partir da posição atual do cursor.

[n]+~+ENTER : inverter a caixa (case) dos n caracteres seguintes ao cursor.

/texto : procurar pela primeira ocorrência do texto especificado a partir da posição atual do cursor.

.

PROGRAMAÇÃO SHELL SCRIPT - REVISANDO COMANDOS BÁSICOS PARA SHELL SCRIPT

--------------------------------

- Veja só! Execute este pequeno scriptzinho matemático no terminal do seu Linux (execução sequencial de comandos no shell):

cd ; cd Downloads/EstudoEmDown ; echo -e '#!/bin/bash\n x=8 # variável x valor 8\n y=4 # variável y valor 4\n# agora determinamos a soma de x e y para z:\n z=$(($x + $y))\necho\necho "A soma de $x + $y é $z"\necho\n# Fim do soma-scriptzinho.sh' > soma-scriptzinho.sh ; chmod +x soma-scriptzinho.sh ; sh soma-scriptzinho.sh

#

1) Copio e colo estes comandos no terminal do Linux. Será útil para aprender coisas interessantes.

#

2) Criando o local/pastas/arquivos de estudo em Downloads/:

cd ; cd Downloads/EstudoEmDown/ ; mkdir -p estudo-shell-script/arquivos ; cd estudo-shell-script/arquivos/ ; echo -e 'Ana Claudia Bodhi\nAna Claudia Kafka\nAndre Gonçalves\nAntonio Silva\nBento Silva\nCarlos Augusto\nDaniel Sandra\nEliseu Padilha\nFernanda Padilha\nKant Rosa Bela\nHorácio Nunes\nIngrid Damacena\nMaria Antonieto Sousa\nOlimpio Silva\nPaulo Freitas\nRafaela dos Santos\nRoff Silvaciano\nSilvia Oliveira\nZuenir Mello\nXerxes Alvez' > alunos2.txt ; echo -e 'Aluno1\n Aluno2\n Aluno3\n Aluno4\n Aluno1\n Aluno4\n Aluno5\n Aluno6\n Aluno1\n Andre\n Paulo\n Junior \n Daiana\n Fernanda\n Fernanda\n Maria\n Daiana\n Maria\n Maria\n Nunes\n Gonçalo' > alunos.txt

#

3) Criando arquivos para estudo:

echo -e 'Ana Claudia\nAna Claudia Kafka\nAndre Gonçalves\nAntonio Silva\nBento Silva\nCarlos Augusto\nCarlos Roberto \nDaniel Sandra\nEliseu Padilha\nFernanda Padilha \nLucas Carmo \nKant Rosa\nHorácio Nunes\nIngrid Damacena\nMaria Antonieto Sousa\nOlimpio Silva\nPaulo Freitas\nRafaela dos Santos\nRoff Silvaciano\nSilvia Oliveira\nZuenir Mello\nXerxes Alvez' > alunos3.txt ; echo -e 'Aluno1\n Aluno2\n Aluno3\n Aluno4\n Aluno1\n Aluno4\n Aluno5\n Aluno6\n Aluno1\n Andre\n Paulo\n Pamela Castro\n Junior \n Daiana Neres\n Fernanda Dark\n Fernanda Light\n Maria\n Daiana\n Maria\n Maria Fernanda\n Nunes\n Gonçalo' > alunos4.txt

#

4) Copio e colo no terminal (se já não fiz isto). Vai criar um arquivo de texto. Aperte Enter:

echo -e '\nEntão queres ser um escritor? \nSe não sair de ti explodindo apesar de tudo, não o faças. \nA menos que saia sem perguntar do teu coração e da tua cabeça e da tua boca e das tuas entranhas, não o faças. \nSe tens que sentar por horas olhando a tela do teu computador ou curvado sobre a tua máquina de escrever procurando palavras, não o faças. \nSe o fazes por dinheiro ou fama, não o faças. \nSe o fazes porque queres mulheres na tua cama, não o faças. \nSe tens que te sentar e reescrever uma e outra vez, não o faças. \nSe dá trabalho só pensar em fazê-lo, não o faças. \nSe tentas escrever como algum outro escreveu, não o faças. \nSe tens que esperar para que saia de ti a gritar, então espera pacientemente. \nSe nunca sair de ti a gritar, faz outra coisa. \nSe tens que o ler primeiro à tua mulher ou namorada ou namorado ou pais ou a quem quer que seja, não estás pronto. \nNão sejas como muitos escritores, não sejas como milhares de pessoas que se consideram escritores, não sejas estúpido nem enfadonho e pedante, não te consumas com auto-devoção. \nAs bibliotecas de todo o mundo têm bocejado até adormecer com os da tua espécie. \nNão sejas mais um. \nNão o faças. \nA menos que saia da tua alma como um míssil, a menos que o estar parado te leve à loucura ou ao suicídio ou homicídio, não o faças. \nA menos que o sol dentro de ti te esteja a queimar as tripas, não o faças. \nQuando chegar mesmo a altura, e se foste escolhido, vai acontecer por si só e continuará a acontecer até que tu morras ou morra em ti. \nNão há outra forma. \nE nunca houve. \n \n(Charles Bukowski)\n' > charles_texto-escritor.txt

#

5) Executando comandos de revisão:

echo $0

echo $SHELL

tail /etc/passwd

clear

#

6) Sem o software ls não tem o comando ls. Dizem que não existe terminal GNU/Linux sem o ls. Dizem também que sem ele (ls), todos os outros comandos não funcionam bem.

#

EXECUTO NO MEU TERMINAL:

cd ; cd ~/Downloads/EstudoEmDown/

touch estarq1 estarq2 estarq3 estarq12 estarq13

echo "Olá Mundo Linux!" > estarq1 >> estarq2 >> estarq3

touch ESTARQ1 ESTARQ2 ESTARQ3 ESTARQ12 ESTARQ13

echo "Olá estudante GNU/Linux! Linux! Unix!" >> ESTARQ1 >> ESTARQ2 >> ESTARQ3

cat estarq1 ; echo ; cat ESTARQ1

cat estarq2 ; echo ; cat ESTARQ2

cat estarq3 ; echo ; cat ESTARQ3

clear

ls -ltr

ls -R

ls -la estarq[123] (Funciona com outros comandos)

ls -lia estarq[1-3] (Funciona com outros comandos)

ls -la ESTARQ[2]

ls -lia *[12]

ls -l *1

ls -l {ESTARQ,estarq}2 (Funciona com outros comandos)

ls -l {ESTARQ,EsTARQ}3 (Funciona com outros comandos)

ls -l estar*

ls -l estarq1*

ls -l ESTARQ1?

ls -l estarq?

ls -l estarq?? (Funciona com outros comandos)

#

ls -1

ls -l /etc

ls -l /tmp

ls -la /var

ls -l /var/log/

ls -l /var/log/journal/

ls -l /var/log/samba/

ls -lh /var/lightdm

ls -lt /snap/

ls -lht /snap/bin/

ls -ltah /snap/bin/

ls -lit /root

clear

#

ps

#

ps axu

clear

ps -eF

ps -ejH

ps -eLf

ps axZ

clear

#

# ps axu - O que se usa mais no ps? Nome do usuario, pid do processo, consumo de cpu, memoria, horario de execução, nome completo do processo.

#

(colo os comandos abaixo no terminal)

touch arquivo-teste

> arquivo-tester

ls -t

#

echo (Mostra na tela o parâmetro que vc deu)

echo linux shell script

echo O sol de manhã

echo "linux shell script"

clear

echo 'O echo pode ser acompanhado das opções -n (do not output the trailing newline). E da opção -e (enable interpretation of backslash escapes)'

echo -n "linux shell script" (Aperto enter)

# Não vai quebrar a linha por que pode precisar colocar um leitura de variável, então é necessário não quebrar a linha.

echo -e

# Permite usar opções de tabulação.

echo -e "linux\nshell\nscript"

echo -ne "linux\nshell\nscript" (Aperto enter)

echo -e "curso shell\t script" # \t (Tabulação)

echo -ne "curso shell\t script" (Aperto enter)

echo -e "curso\nshell\tscript"

# \n e \t (Quebra de Linha e Tabulação)

echo -ne "curso\nshell\tscript"

echo -e "col1\tcol2\tcol3\t"

echo -ne "col1\tcol2\tcol3\t"

echo -e "\acol1\t\acol2\t\acol3\vcol5\vcol6\vcol7"

echo -ne "\acol1\t\acol2\t\acol3\vcol5\vcol6\vcol7"

echo -e "\acol1\t\acol2\t\acol3\vcol4 vertical\vcol5vertical\vcol6vertical"

echo -ne "\acol1\t\acol2\t\acol3\vcol4 vertical\vcol5vertical\vcol6vertical"

#

mkdir pasta1

ls -tli

mkdir pasta1/sub-pasta1 # Porque a pasta1 já existe.

# Se uma pasta não existe para criar uma sub-pasta adicona a opção -p

mkdir -p pasta2/sub-pasta2

ls pasta2

rm -r pasta2

#

OBS:
rmdir (Só remove pasta vazia)

#

Sito PARA APRENDER/CONSULTAR COMANDOS:

http://explainshell.com/

#

(Digito/Copio e colo)

cat alunos.txt

cat alunos2.txt

cat -b alunos2.txt (numera e ordena de A a Z)

cat --number-nonblank alunos2.txt (numera e ordena de A a Z)

cat -n alunos2.txt

clear

cat --number alunos2.txt

cat -A alunos2.txt

cat --show-all alunos2.txt

cat -vET alunos2.txt

cat -vET charles_texto-escritor.txt

cat /snap/README

clear

#

man tac

tac alunos.txt

tac alunos2.txt

tac -b alunos.txt

tac -r alunos2.txt

#

echo -e 'Mais porem escrevendo todavia \nA forma controversa é literal \nEscapa a fantasia pois \nO reduto da alegoria não \nSe refere a longevida \nInerente a espaço de um objeto concreto \nPercebe-se a listagem: \nLista1 \nLilista \nCiclista \nBravar \nLista2 \nAna Cara \nZarabatana \nArcaido \nCaldo alto \nLuz Ribaltazar \nLista5 \nLista3 \nLista6 \nPossante \nLista7 \nLista8 \nLista9 \nLista10 \nLista11 \nEntretanto \nArquivo longo \nEstende' > arquivolongo.txt

tail arquivolongo.txt

tail -n5 arquivolongo.txt

tail -n7 charles_texto-escritor.txt

tail -4 arquivolongo.txt

tail -n5 alunos2.txt | wc -w

tail /etc/passwd | sort -k3

#

clear

head arquivolongo.txt

head -n5 arquivolongo.txt

head -n1 arquivolongo.txt

head -c10 arquivolongo.txt (aperte a tecla Enter)

#

man wc

whatis wc (cada letra é um byte)

whereis wc

.

O comando wc é utilizado para contar caracteres, palavras e/ou linhas dos dados da entrada padrão e apresenta o resultado na saída padrão.

.

Sintaxe:

Comando + parâmetros + arquivo

Parâmetros:

-l: conta as linhas;
-w: conta as palavras;
-c: conta os caracteres.

.

OBS:
Arquivo de entrada cujas palavras, linhas ou caracteres serão contados e exibidos na saída padrão. Se este parâmetro for omitido, o wc lê da entrada padrão.

.

Exemplo a ser executados:

echo -e '\nO Marco Marciano\n \nPelos alto-falantes do universo \nVou louvar-vos aqui na minha loa\nUm trabalho que fiz noutro planeta \nOnde nave flutua e disco voa \nFiz meu marco no solo marciano \nNum deserto vermelho sem garoa \n \nEste marco que eu fiz é fortaleza \nElevando ao quadrado Gibraltar \nTorreão, levadiço, raio-laser \nE um sistema internet de radar \nNão tem sonda nem nave tripulada \nQue consiga descer nem decolar \n\nConstrui o meu marco na certeza \nQue ninguém, cibernético ou humano \nPoderia romper as minhas guardas \nNem achar qualquer falha nos meus planos \nFicam todos em Fobos ou em Deimos \nContemplando o meu marco marciano \n \nO meu marco tem rosto de pessoa \nTem ruínas de ruas e cidades \nTem muralhas, pirâmides e restos \nDe culturas, demônios, divindades \nA história de Marte soterrada \nPelo efêmero pó das tempestades \n
\nConstrui o meu marco gigantesco \nNum planalto cercado por montanhas \nPrecipícios gelados e falésias \nProjetando no ar formas estranhas \nComo os muros Ciclópicos de Tebas \nE as fatais cordilheiras da Espanha \n \nBem na praça central um monumento \nEmbeleza meu marco marciano \nUm granito em enigma recortado \nPelos rudes martelos de Vulcano \nUma esfinge em perfil contra o poente \nGuardiã imortal do meu arcano... \n \n -- Lenine \n' > arq_marciano.txt

.

wc -l arq_marciano.txt (conta linhas)

wc -w arq_marciano.txt (conta palavras)

wc -c arq_marciano.txt (conta caracteres)

wc -m arq_marciano.txt

wc arq_marciano.txt (não foi especificado nenhum parâmetro, o wc listou tudo caracteres, palavras e linhas).

.

wc alunos.txt

clear

wc alunos2.txt

wc -l alunos2.txt

wc -l alunos2*

wc -l alunos*

wc -n alunos2.txt

clear

wc -w alunos2.txt

wc -c alunos2.txt

wc -m alunos2.txt

#

Executando mais comandos no arq_marciano.txt:

.

1) cat arq_marciano.txt

2) cat -n arq_marciano.txt

3) file arq_marciano.txt

4) !ca

5) !fi

6) wc arq_marciano.txt

7) whereis arq_marciano.txt

8) whatis xingar

9) cat arq_marciano.txt | less

10) cat arq_marciano.txt | more

11) cat arq_marciano.txt | head -n 3

12) cat -n arq_marciano.txt | head -n 3

13) cat arq_marciano.txt | tail -n 3

14) cat -n arq_marciano.txt | tail -n 3

15) cat arq_marciano.txt | head -n 4 | grep imortal

16) cat arq_marciano.txt | head -n 4 | grep cidades

17) cat arq_marciano.txt | head -n 28 | grep -v marco

18) touch arq_marciano.txt

19) ls -til

20) cp -v arq_marciano.txt arq_marciano_back.txt

21) ls1

22) grep -i "marciano" arq_marciano.txt

23) grep -i "meu" arq_marciano.txt

24) fgrep "sonda" arq_marciano.txt

25) egrep '(radar|decolar)' arq_marciano_back.txt

26) find ./ arq_marciano.txt

27) find arq_marciano.txt

28) ls [a-m]*.txt

29) mv arq_marciano_back.txt renomeado_arq_marciano_back.txt

30) ls -t

31) find ./* -type f -exec grep -l tem {} \;

32) egrep "ruas" -r ?*.txt

33) fgrep "montanhas" -r ./

34) ls2

35) clear

36) grep -i "meu" arq_marciano.txt -v

37) grep -i marciano "arq_marciano.txt" -v

.

(Sort e Uniq, o sort vem antes do uniq)

#

sort alunos2.txt

sort -r alunos2.txt

sort -k2 alunos2.txt # Ordena pelo segundo campo

#

SITE PARA APRENDER COMANDOS:

http://explainshell.com/

#

sort alunos.txt # Primeiro sort para organizar

#

uniq alunos.txt # Depois pode usar o unic se não, o unic repete palavras iguais que não estiverem na sequência

#

sort alunos.txt |uniq -c

sort alunos.txt |uniq -d

sort alunos.txt |uniq -u

clear

#

(As principais opções do uniq são)

-u (o que apareceu uma só vez)

-d (duplicadas)

-c (conta repetições)

#

sort alunos.txt -u

sort alunos.txt -d

clear

sort alunos.txt -c

sort alunos.txt |uniq -d # Linhas duplicadas

sort alunos.txt |uniq -c |sort

clear

sort alunos.txt |uniq -c |sort -r

uniq -c alunos.txt

sort alunos.txt |uniq -c |sort -r|head -n1

#

O COMANDO TR (O que é tr?)

#

Ex:

$whatis tr
tr (1) - translate or delete characters
tr (1p) - translate characters

#

(whatis tr - traduz ou deleta caracteres - dentro de uma string)

#

(Trocar toda letra a pela letra e)

cat alunos.txt |tr a e

cat alunos.txt |tr a e > alunos-troca-letra-a-por-e.txt

cat alunos-troca-letra-a-por-e.txt

#

(O tr serve para substituir/trocar vários tipos de coisa)

#

cat alunos.txt | tr a-z A-Z (Vai trocar toda vez que encontrar caractere minúsculo)

cat alunos.txt | tr aei AEI

(Posso trocar por símbolos, espaços, tabulação, quebra de linha, etc...)

#

cat alunos2.txt |tr ' ' '\t'

#

Ex:

$cat alunos2 |tr ' ' '\t'

cat: alunos2: Arquivo ou diretório não encontrado

#

cat alunos2.txt |tr ' ' '\t'

#

cat alunos2.txt |tr ' ' '\t' | cat -A

#

Ex:

$cat alunos2.txt |tr ' ' '\t' | cat -A

Ana^IClaudia$
Ana^IClaudia^IKafka$
Andre^IGonM-CM-'alves$
Antonio^ISilva$
Bento^ISilva$
Carlos^IAugusto$
Daniel^ISandro$
Eliseu^IPadilha$
Fernanda^IPadilha$
Kant^IRosa$
HorM-CM-!cio^INunes$
Ingrid^IDamacena$
Maria^IAntonieto^ISousa$
Olimpio^ISilva$
Paulo^IFreitas$
Rafaela^Idos^ISantos$
Roff^ISilvaciano$
Silvia^IOliveira$
Zuenir^IMello$
Xerxes^IAlvez$

#

cat alunos2.txt |tr -d aei (deletar as letras aei na saida do comando, o arquivo em si continua sem alteração)

#

$cat alunos2.txt |tr -d aei
An Clud
An Clud Vsconclos
Andr Gonçlvs
Antono Slv
Bnto Slv
Crlos Augusto
Dnl Sndro
Elsu Pdlh
Frnnd Pdlh
Gustvo Ros
Horáco Nuns
Ingrd Dmcn
Mr Antonto Sous
Olmpo Slv
Pulo Frts
Rfl dos Sntos
Rcrd Prodncno
Slv Olvr
Zunr Mllo
Xrxs Alvz

#

echo "Curso Shell Script" | tr l L

echo "Curso Shell Script" | tr S s

#

(comprimir toda vez que encontrar letras repetidas)

echo "Curso Shell Script" | tr -s 'l'

echo "Cuurso Sheeeelll Scriiiippttt" | tr -s 'u e l i p t'

#

echo Curso Shell Script | tr [:lower:] [:upper:]

#

(cut recorta pedaços de uma palavras escritas no terminal ou em shell script, as chamadas strings eu acho. Pode cortar por caracteres e por campos)

#

cut -d: -f 1 /etc/passwd

cut -d: -f 1,3 /etc/passwd

cut -c 1-10 /etc/passwd

date | cut -d: -f1

cat alunos2.txt | cut -c1-5

cat alunos2.txt | cut -c1,2,6

cat alunos2.txt | cut -c1,6,2

cat alunos2.txt | cut -c1,2,3

cat alunos2.txt | cut -c3,2,1

cat alunos2.txt | cut -c1,2,2

cat alunos2.txt | cut -c1,2

free | tr -s ' ' | sed '/^Mem/!d' | cut -d" " -f2

clear

#

(Cada comando GNU/Linux me parece que faz um e apenas um serviço bem feito)

#

(Do 5 para frente)

cat alunos2.txt | cut -c5-

#

(Até o 5)

cat alunos2.txt | cut -c-5

#

(Até o 10)

cat alunos2.txt | cut -c-10

#

(1, 2 e do 10 para frente)

cat alunos2.txt | cut -c1,2,10-

#

(cada palavra é um campo. pode usar o cut com campos)

cat alunos2.txt | cut -f1 (falta alguma coisa)

clear

cat alunos2.txt | cut -d" " -f1

cat alunos2.txt | cut -d" " -f1,3 (1 e 3)

cat alunos2.txt | cut -d" " -f1-3 (1 ao 3)

cat alunos2.txt | cut -d" " -f2-

cat alunos2.txt | cut -d" " -f-2

clear

#

tail /etc/passwd

tail /etc/passwd | cut -d":" -f1,5

#

(comando diff compara 2 arquivos)

cat alunos.txt

cat alunos3.txt

diff alunos.txt alunos3.txt

(resultado)

$diff alunos.txt alunos3.txt

bash: diff: comando não encontrado
arquivos $diff alunos.txt alunos3.txt
1,9d0
log.out

ls -l alunos.tdt > log.out 2> log-erro.out

#

(a saida de erro sera a mesma que a saida padrao)

ls -l alunos.txt3 > log.out 2>&1

ls -l alunos.txt3 >> log.out 2>&1

clear

(jogar a saida de erro para lugar nenhum)

ls -l alunos.txtxt 2> /dev/null

#

(redirecionamento da entrada usando o sinal de menor, o conteúdo do arquivo vira a entrada do comando)

(util para redirecionamento de e-mail)

tr 'a' 'Z'

.

Exemplos:

.

mkdir ~/Downloads/EstudoEmDown/

touch ~/Downloads/EstudoEmDown/E_S_arq.txt

echo -e 'Bom\nDia\nMundo\nLinux\nLista:\nAzul, Beleza, Simone, Aluno3, luz, olhos, marciano, Carlos, marciano, Mariana, Maria, Carlos, Mariana' > ~/Downloads/EstudoEmDown/E_S_arq.txt > Arquivos.txt

ls ~/Downloads/EstudoEmDown/

cat ~/Downloads/EstudoEmDown/E_S_arq.txt

ls -lR ~/Downloads/EstudoEmDown/E_S_arq.txt

find ~/ -iname "*.txt" > ~/Downloads/EstudoEmDown/E_S_arq.txt 2> ~/Downloads/EstudoEmDown/ErroE_S_arq.txt

.

Acima o redirecionamento é destrutivo, isto é, ele apaga o conteúdo anterior do arquivo para onde será redirecionada a saída.

.

É possível redirecionamento NÃO-DESTRUTIVO. Usa-se a notação >> no lugar de > e implica em ACRESCENTAR a saída ao FINAL do arquivo para onde está sendo feito o redirecionamento.

.

Exemplos:

1) touch ~/Downloads/EstudoEmDown/Arquivos.txt

2) ls -lR ~/ >> ~/Downloads/EstudoEmDown/Arquivos.txt

3) find ~/ -iname "*.txt" >> ~/Downloads/EstudoEmDown/E_S_arq.txt 2> ~/Downloads/EstudoEmDown/ErroE_S_arq.txt > /dev/null

.

Exemplo:

1) ls -lit arq-erro3.txtt > /dev/null

.

Quando o usuário deseja que a saída padrão ou a saída de erros NÃO sejam exibidas na tela do terminal e tampouco sejam redirecionadas para um arquivo adicional, usa-se o redirecionamento para um arquivo especial: /dev/null. No exemplo acima, as mensagens de erro do comando find não serão exibidas, pois foram redirecionadas para /dev/null.

.

Executo:

1) ls -lit arq-erro.txtt

2) ls -lit arq-erro.txtt 2> log.out

3) cat log.out

4) ls -lit arq-erro2.txtt 2>> log.out

5) ls -lit arq-erro3.txtt 2>> log.out

6) cat log.out

7) ls -lit arq-erro.txtt > /dev/null

8) ls -lit arq-erro3.txtt > /dev/null

9) ls -lit arq-erro4 > log.out

10) ls -lit arq-erro5 > log.out 2> log-erro.out

11) ls -lit arq-erro6 > log.out 2>&1

12) ls -lit arq-erro7 >> log.out 2>&1

12) ls -lit arq-erro8 >> log.out 2>&1 /dev/null

13) cat -n log.out

.

PIPELINE (PIPE/CANO)

.

Imagino o seguinte exemplo:

.

sort ~/Downloads/EstudoEmDown/Arquivos.txt > ~/Downloads/EstudoEmDown/OrdenadoS.txt

less ~/Downloads/EstudoEmDown/OrdenadoS.txt

.

PIPE É UMA FORMA DE REDIRECIONAMENTO QUE CONECTA A SAÍDA PADRÃO DE UM PROGRAMA À ENTRADA PADRÃO DE OUTRO PROGRAMA.

.

Com pipes (símbolo |) o exemplo acima se transforma em:

.

sort ~/Downloads/EstudoEmDown/Arquivos.txt | less

.

PIPELINES PODEM SER USADOS EM QUALQUER QUANTIDADE EM UMA LINHA DE COMANDO (string):

ls -lR ~ | sort -r | cut -c1-10 | less

.

PIPELINES E REDIRECIONAMENTOS PODEM SER USADOS EM UMA MESMA LINHA DE COMANDO:

find /var -print 2>/dev/null | sort > ~/LOG

.

No exemplo acima, a saída de erros (STDERR) do find é redirecionada para /dev/null (isto é, não aparecerá na tela), mas a saída padrão (STDOUT) será redirecionada para o pipe. O comando sort ordena o resultado do find e redireciona o resultado final para o arquivo ~/LOG.

------------------

OBS:
O /dev/null é chamado de buraco negro.

------------------

EXPRESSÕES REGULARES BÁSICAS: GREP

------------------

Uma EXPRESSÃO REGULAR é uma forma compacta de especificar um padrão genérico de caracteres. Existem muitos filtros em UNIX, tais como grep, sed e awk que usam tanto padrões exatos quanto expressões regulares.

------------------

Executo:

awk '$2 ~ "luz" {print $1, "\t", $4}' arq-poema.txt

(imprime os campos 1 e 4 de cada linha de arq-poema.txt cujo segundo campo contenha "luz".)

------------------

Por exemplo, pode-se usar grep para encontrar em um arquivo por todas as linhas que tenham a letra ``H'', seguida de um número qualquer de letras minúsculas, seguida da letra ``m''.

------------------

EXPRESSÕES REGULARES são parte integrante de sistemas Linux e é EXTREMAMENTE IMPORTANTE aprender como usá-las.

------------------

Dentro de uma expressão regular, certos símbolos tem um significado especial.

------------------

. (Ponto)

Significa: qualquer caracter simples, exceto quebra de linha (newline)

------------------

* (Asterisco)

Significa: zero ou mais ocorrências do caracter precedente

------------------

^

Significa: início de uma linha

------------------

$

Significa: final de uma linha

------------------

\

Significa: final de uma palavra

------------------

[ ]

Significa: um, e apenas um dos caracteres indicados pelos colchetes

------------------

[^ ]

Significa: quaisquer caracteres que não estejam entre os indicados pelos colchetes

------------------

\

Significa: toma o caracter seguinte literalmente

------------------

[[:alnum:]]

Significa: [0-9A-Za-z]

------------------

[[:alpha:]]

Significa: [A-Za-z]

------------------

[[:digit:]]

Significa: [$0-9]

------------------

[a-d]

Significa: [abcd]

------------------

[a-dP-T]

Significa: [abcdPQRST]

------------------

[]a^[-]

Significa: um dos caracteres: a, ^, ], [ ou -.

O símbolo ^ perde seu significado especial se não está no início da expressão entre colchetes.

O símbolo - perde seu significado especial se é o último caracter da expressão entre colchetes.

O símbolo ] perde seu significado se é o primeiro caracter da expressão entre colchetes.

------------------

Eu vou usar este texto abaixo para tentar aprender alguma coisa. Copio e colo no terminal:

echo -e "Dag Linux liro dat but D 2 dag dagger dab\nDeg D deg det bet sonhando degree oi alo linux deeb\nDig dig buut unix digger dib\nDog dog GNU/Linux dot dogger tico C dob\nDug dug B dugger dut dab\nDugdadedidodu sonho Universo bit O 3 dugt Dugtrail \nRege Unix Degenerdio bot U degenerd" > arq-exp-reg.txt ; cp arq-exp-reg.txt texto-test-exp-reg.txt

.

EXECUTO:

1) cat -n arq-exp-reg.txt arq-exp-reg.txt

2) grep -e dag arq-exp-reg.txt

3) grep -e dag arq-exp-reg.txt -v

4) egrep "[Dd]ug" arq-exp-reg.txt

5) cat -n arq-exp-reg.txt

6) egrep "[Dd]ug" arq-exp-reg.txt -v

7) egrep "d[aei]g" arq-exp-reg.txt

8) egrep "d[aei]g" arq-exp-reg.txt -v

9) clear

10) cat -n "arq-exp-reg.txt"

11) egrep "d[aei]t" arq-exp-reg.txt

12) egrep "D[aei]g" arq-exp-reg.txt

13) egrep "^Rege" arq-exp-reg.txt

14) clear

15) cat -n arq-exp-reg.txt

16) egrep "^Dig" arq-exp-reg.txt

17) egrep "^Deg" arq-exp-reg.txt

18) egrep "^Deg" arq-exp-reg.txt -v

19) cat -n "arq-exp-reg.txt"

20) egrep "^Dig" arq-exp-reg.txt -v

21) egrep "dab$" arq-exp-reg.txt

22) egrep "dib$" arq-exp-reg.txt

23) clear

24) cat -n arq-exp-reg.txt

25) egrep "Degenerdio$" arq-exp-reg.txt

26) egrep -v "^ug$" arq-exp-reg.txt

27) egrep -v "^Dege$" arq-exp-reg.txt

28) egrep -v "^$" arq-exp-reg.txt

29) clear

30) cat -n "arq-exp-reg.txt"

31) egrep "d[a-i]g*" arq-exp-reg.txt

32) egrep "d[a-i]t*" arq-exp-reg.txt

33) egrep "d[a-i]g*" arq-exp-reg.txt -v

34) egrep "d[a-i]g+" arq-exp-reg.txt

35) egrep "d[a-i]t+" arq-exp-reg.txt

36) clear

37) cat -n arq-exp-reg.txt

38) egrep "d[a-i]t*" arq-exp-reg.txt -v

39) egrep "d[a-i]t+" arq-exp-reg.txt -v

40) egrep "d[a-i]g?" arq-exp-reg.txt

41) egrep "d[a-i]t?" arq-exp-reg.txt

42) clear

43) cat -n "arq-exp-reg.txt"

44) cat -A "arq-exp-reg.txt"

45) cat -b "arq-exp-reg.txt"

46) egrep "D.dag" arq-exp-reg.txt

47) egrep "U.dege*" arq-exp-reg.txt

48) egrep "U.[dege]d?" arq-exp-reg.txt

49) egrep "U.[dege]d*" arq-exp-reg.txt

50) egrep "[Ll]inux." arq-exp-reg.txt

51) egrep "[Ll]inux\." arq-exp-reg.txt

52) egrep "[Uu]nix." arq-exp-reg.txt

53) egrep "\[Uu\]nix\." arq-exp-reg.txt

54) sed '/^U/x' arq-exp-reg.txt

55) grep -E "liro" arq-exp-reg.txt

56) ls | grep -E '(oi)|(alo)' arq-exp-reg.txt

57) grep -E '(tico)' arq-exp-reg.txt

58) ls | grep -E Unix. *.txt

59) grep -E Univers. *.txt

60) ls | grep -E test[aeo]\.txt

61) grep -E sonh[ao] arq-exp-reg.txt

62) ls | grep -E test[^i]\.txt

.

FIM DA: REVISÃO DE COMANDOS BÁSICOS PARA SHELL SCRIPT

.

CONTINUANDO...

.

# (O nome deste símbolo é tralha)

.

! (O nome deste símbolo é exclamação)

------------------

./ (Ponto e barra significa onde você está)

------------------

#! (Tralha e exclamação significa Shebang)

.

DIRECIONADORES

.

(Write)

> (Este direcionador sobrescreve o que estiver escrito)

1) uptime > arq-uptime1.txt ; sleep 3

2) uptime > arq-uptime1.txt (leia o arquivo)

3) cat arq-uptime1.txt
.

(Append)

>> (Este direcionador não sobrescreve o que estiver escrito)

Exemplo execute os comandos abaixo um de cada vez:

1) uptime >> arq-uptime2.txt ; sleep 3

2) uptime >> arq-uptime2.txt (leia o arquivo)

3) cat arq-uptime2.txt

.

A Shebang para o Bash é a primeira coisa que se escreve em um shell scripr no Linux:

#!/bin/bash

.

Para ver qual é o shell padrão:

printenv SHELL

.

Para mudar o Shell padrão (não faça isto!) Ex:

chsh -s /bin/ash

.

Para sair do shell:

exit

.

Geralmente o primeiro script para quem nunca criou um shell script é criar uma pasta chamada pasta-estudos na pasta home.

cd ; mkdir pasta-estudos

.

Abrir a pasta-estudos e nela criar um arquivo de texto chamado de 01-script.sh.

cd pasta-estudos/

> 01-script.sh

.

Dá poder de execução ao arquivo 01-script.sh.

chmod a+x 01-script.sh

.

Abre o 01-script.sh com um editor de texto. Escreve com um editor de texto no arquivo 01-script.sh o seguinte:

#!/bin/bash

# Um comentário

echo "Olá, mundo!"

# Fim do Shell Script

.

Comentários também podem ser escritos assim:

#!/bin/bash # Um comentário

echo "Olá, mundo!" # Fim do Shell Script

.

SALVE O QUE FOI ESCRITO. FECHE O EDITOR DE TEXTO.

.

EXECUTA O SCRIPT USANDO UM COMANDO DE CADA VEZ.

comando 1:

sh 01-script.sh

comando 2:

./01-script.sh

comando 3:

bash 01-script.sh

.

TUDO ISTO ACIMA PODE SER FEITO DE UMA SÓ VEZ COM O CÓDIGO ABAIXO:

echo ; printenv SHELL ; echo ; cd ; mkdir pasta-estudos ; cd pasta-estudos/ ; > 01-script.sh ; chmod a+x 01-script.sh ; echo -e '#!/bin/bash\n# Um comentário\necho "Olá, mundo!"\n# Fim do Shell Script' > 01-script.sh ; sh 01-script.sh ; echo ; ./01-script.sh ; echo ; bash 01-script.sh ; ./01-script.sh ; sh 01-script.sh

.

Bloco de comentários tudo que estiver entre : bin-script.sh ; chmod a+x bin-script.sh ; cd ; cd Downloads/ ; bin-script.sh ; sleep 3 ; echo ; echo 'Estamos em:' ; echo ; sleep 2 ; echo ; pwd ; echo ; sleep 3 ; echo ; echo 'Funcionou porque o script foi executado na pasta Downloads' ; echo

.

VOCÊ NOTOU SE JÁ É CAPAZ DE LER ESTE CÓDIGO ACIMA E ENTENDER O QUE ELE FAZ?

.

ACRESCENTANDO O NOVO VALOR À VARIÁVEL $PATH:

cd

whoami

PATH=$PATH:/home/seu-usuario-whoami/bin/

.

PARA TORNAR O VALOR, QUE VOCÊ QUISER, PERMANENTE, TEM GENTE QUE FAZ O AJUSTE DA VARIÁVEL DENTRO DO ARQUIVO ".profile" OU ".bash_profile"

export PATH="$HOME/bin:$HOME/.local/bin:$PATH"

.

Exemplo:

cd

pwd

ls -a

echo 'PATH=$PATH:/home/seu-usuario-whoami/bin/' >> .profile

ls -a -t

.

PARA FUNCIONAR, TENTE EXECUTAR:

cd ; source .profile ; source .bashrc

.

PODE TAMBÉM ATUALIZAR E REINICIAR O SISTEMA. COMANDO PARA REBOOT:

sudo shutdown -r now

.

VERIFICANDO A NOVA VARIÁVEL:

echo $PATH

.

LINUX SHELL SCRIPT BRINCANDO COM 5 VARIÁVEIS:

#!/bin/bash

clear

# Este script testa o uso de variáveis

# Definindo 5 variáveis

echo ; echo 'Definindo 5 variáveis em 10 segundos.' ; sleep 3 ; echo

VALOR1='ls -t' ; sleep 2 ; VALOR2='pwd' ; sleep 2 ; VALOR3='cal' ; sleep 2 ; VALOR4='uptime' ; sleep 2 ; VALOR5='whoami' ; sleep 2

# Executando as 5 variáveis

echo 'Executando as 5 variáveis com explicações.' ; sleep 4 ; echo

echo 'Vamos listar o conteúdo desta pasta:' ; echo ; $VALOR1 ; sleep 4 ; echo ; echo 'Vamos saber onde estamos localizados no sistema:' ; sleep 4 ; echo ; $VALOR2 ; sleep 4 ; echo ; echo 'Vamos ver o calendário atual' ; sleep 4 ; echo ; $VALOR3 ; echo ; echo 'Vamos saber o tempo de funcionamento da máquina:' ; sleep 4 ; echo ; $VALOR4 ; sleep 4 ; echo ; echo 'Vamos saber qual é o usuário logado' ; sleep 4 ; echo ; $VALOR5 ; echo

sleep 5

echo 'Executando apenas as variáveis:' ; echo ; $VALOR1 ; sleep 2 ; $VALOR2 ; sleep 2 ; $VALOR3 ; sleep 2 ; $VALOR4 ; sleep 2 ; $VALOR5

# Removendo as 5 variáveis pois este script é apenas um teste

echo ; echo 'Removendo as 5 variáveis em 10 segundos, pois este script é apenas um teste' ; sleep 4 ; echo

unset VALOR1 ; sleep 2 ; unset VALOR2 ; sleep 2 ; unset VALOR3 ; sleep 2 ; unset VALOR4 ; sleep 2 ; unset VALOR5 ; sleep 2

echo ; echo '10 seg para testar as variáveis que não devem ecoar valores' ; sleep 4 ; echo

echo 'Testando as variáveis:' ; echo ; $VALOR1 ; sleep 2 ; $VALOR2 ; sleep 2 ; $VALOR3 ; sleep 2 ; $VALOR4 ; sleep 2 ; $VALOR5

exit

# Fim do script

.

LINUX SHELL SCRIPT - OlaUsuario.sh

.

#!/bin/bash

# Titulo: 01-olauser.sh

clear

USERL='Usuário-Linux'

echo

echo "Olá $USERL"

sleep 2

echo

echo "Tchau $USERL"

sleep 2

clear

exit

# Fim do script

.

ABRA O TERMINAL PELO MENU DO SISTEMA. ABRA O GERENCIADOR DE ARQUIVOS. COLOQUE OS DOIS LADO A LADO NA TELA DO COMPUTADOR. EXECUTE O SCRIPT ACIMA COPIANDO E COLANDO NO TERMINAL O CÓDIGO ABAIXO QUE VAI EXECUTAR O SCRIPT E DEPOIS VAI APAGAR O SCRIPT:

.

cd ; mkdir praticando-shellscript ; cd praticando-shellscript/ ; echo -e '#!/bin/bash\n \n# Titulo: 01-olauser.sh\n \nclear\n \nUSERL=Usuário-Linux\necho\necho Olá $USERL\n \nsleep 4\necho\necho Tchau $USERL\n \nsleep 4\necho\n \nsleep 2\nclear\n \nexit\n \n# Fim do script' > 01-olauser.sh ; chmod a+x 01-olauser.sh ; sh 01-olauser.sh ; sleep 2 ; cd .. ; unset USERL ; rm -rf praticando-shellscript/ ; echo ; pwd ; sleep 2 ; echo ; ls -t ; sleep 2 ; $USERL

.

LINUX SHELL SCRIPT IMPRIMIR SAÍDA COLORIDA:

.

Um script pode usar sequências de escape para produzir textos coloridos no terminal. As cores são representadas por códigos, temos 9 códigos:

reset = 0

black = 30

red = 31

green = 32

yellow = 33

blue = 34

magenta = 35

cyan = 36

white = 37

.

O caractere de escape para vermelho é: "\e[1;31m" após o texto em vermelho, usa "\e[0m" para resetar a cor voltando ao padrão. Substitua o código 31 por outra cor que desejar. Temos 9 códigos: 0, 30, 31, 32, 33, 34, 35, 36, 37.

.

Exemplo:

echo -e "\e[1;36m texto que vai ficar colorido \e[0m"

.

PARA IMPRIMIR UM TEXTO COLORIDO USE ESTES EXEMPLOS ABAIXO:

.

echo -e "\e[1;34m Este é o texto em azul! \e[0m"

echo -e "\e[1;30m Este é o texto em preto! \e[0m"

echo -e "\e[1;32m Este é o texto em verde! \e[0m"

echo -e "\e[1;33m Este é o texto em amarelo! \e[0m"

echo -e "\e[1;35m Este é o texto em magenta! \e[0m"

echo -e "\e[1;36m Este é o texto em cyan! \e[0m"

echo -e "\e[1;37m Este é o texto em branco! \e[0m"

.

PODEMOS IMPRIMIR TODOS ESTE TEXTOS AO MESMO TEMPO PARA TESTAR.

.

Copio o código que eu escrevi abaixo e colo no meu terminal:

.

echo -e "\e[1;34m Este é o texto em azul! \e[0m" ; sleep 3 ; echo -e "\e[1;30m Este é o texto em preto! \e[0m" ; sleep 3 ; echo -e "\e[1;32m Este é o texto em verde! \e[0m" ; sleep 3 ; echo -e "\e[1;33m Este é o texto em amarelo! \e[0m" ; sleep 3 ; echo -e "\e[1;35m Este é o texto em magenta! \e[0m" ; sleep 3 ; echo -e "\e[1;36m Este é o texto em cyan! \e[0m" ; sleep 3 ; echo -e "\e[1;37m Este é o texto em branco! \e[0m"

.

DÁ PARA CRIAR UM SHELL SCRIPT COM ISTO VEJA SÓ:

.

#!/bin/bash

clear

echo

echo -e "\e[1;34mVamos criar uma \e[1;31mpasta. \e[0m"

echo

sleep 4

mkdir pasta-teste

echo

echo -e "\e[1;30mVamos ver se a \e[1;31mpasta \e[1;30mfoi criada. \e[0m"

echo

sleep 4

ls -t

echo

sleep 3

echo -e "\e[1;32mVamos criar um \e[1;31marquivo de texto \e[1;32mvazio \e[0m"

echo

sleep 4

> texto-teste.txt ; echo ; ls -t ; echo ; sleep 5 ; echo

echo -e "\n\e[1;33mVamos \e[1;31mescrever \e[1;33me \e[1;35mmover \e[1;33mo \e[1;32mtexto-teste.txt \e[1;33mpara:\n \n\e[1;34mpasta-teste\n \e[0m"

echo

sleep 4

echo -e "Esta frase\nserá escrita\nem\ntexto-teste.txt" > texto-teste.txt ; sleep 3 ; mv texto-teste.txt pasta-teste

echo

echo -e "\n\e[1;35mEntrar em \e[1;32mpasta-teste \e[1;35me conferir o conteúdo dela \e[0m\n"

echo

cd pasta-teste/ ; echo ; ls -t ; sleep 4 ; echo ; pwd ; echo ; sleep 4

echo

echo -e "\e[1;36mCopiando \e[1;37mtexto-teste.txt \e[1;36mpara \e[1;34mtexto-teste2.txt \e[0m"

echo

sleep 4

cp texto-teste.txt texto-teste2.txt ; echo ; ls -t ; echo ; sleep 4 ; echo ; pwd ; echo ; sleep 4

echo -e "\e[1;37mFim do script. \e[1;31mPode apagar tudo \e[1;32musando o \e[1;37mmouse. \e[0m"

echo

sleep 4

echo -e "\e[1;37mOu pode executar o comando: \e[1;31mrm -rf pasta-teste\e[1;32m mas antes confere os arquivos de texto.\e[0m"

echo

sleep 4

exit

# Fim do script

.

COMANDOS MAIS USADOS EM SHELL SCRIPT NO LINUX

.

ASPAS SIMPLES/APÓSTROFOS ' E ASPAS DUPLAS ":

1) Os caracteres especiais são interpretados pelo shell. As aspas em certos casos, fazem o shell ignorar estes caracteres especiais.

.

Executo:

echo -e "\e[1;30mVamos ver se a \e[1;31mpasta \e[1;30mfoi criada. \e[0m" >> texto-teste.txt >> texto-teste.sh

cat texto-teste.sh

cat "texto-teste*"

ls texto-teste*

ls "texto-teste*"

echo estou aprendendo shell script

echo "estou aprendendo shell script"

.

2) A barra invertida (\) protege o caractere seguinte.

.

Executo:

ls texto-teste\*

echo estou \ aprendendo \ shell script

.

3) Aspas duplas permitem interpretar caracteres especiais em variáveis por exemplo.

VALOR="ls -t texto-teste*"

echo $VALOR

MAS SE:

VALOR="ls -t texto-teste\*"

echo $VALOR

.

4) Aspas simples (apóstrofos) desabilitam esta interpretação e alguns casos por exemplo em variáveis.

ls texto-teste*

ls 'texto-teste*'

.

COMANDOS: CARACTERES DE ESCAPE

echo "Hello \"world\"!"

.

TODO SCRIPT ESCRITO PARA RODAR NO BASH COMEÇA COM:

#!/bin/bash

Após "#!/bin/bash" de um espaço entre linhas e então pode começar a digitar comandos.

.

Exemplo para executar:

#!/bin/bash

clear

echo ; date ; echo ; sleep 4

echo ; cal ; echo ; sleep 4

echo ; uptime ; echo ; sleep 4

echo ; df -h ; echo ; sleep 4

echo ; free -html ; echo ; sleep 4

echo ; whoami ; echo ; sleep 4

echo ; pwd ; echo ; sleep 4

echo ; ls -at ; echo ; sleep 4

echo ; whereis bash ; echo ; sleep 4

echo ; echo 'Este é o fim do script 01-script.sh' ; echo ; sleep 4

exit

# Fim do script

.

ESTE SCRIPT ÚTIL E INOFENSIVO ACIMA SERÁ SALVO NA PASTA HOME, A PASTA DA CASINHA, USANDO UM EDITOR DE TEXTO E TERÁ O NOME DE:

01-script.sh

.

Posso melhorar/tornar mais amigável este script acima explicando sobre cada comando:

.

#!/bin/bash

clear

echo ; echo 'Hoje é data:' ; echo ; sleep 2

echo ; date ; echo ; sleep 4

echo ; echo 'Hoje pelo calendário é:' ; echo ; sleep 2

echo ; cal ; echo ; sleep 4

echo ; echo 'Esta máquina está funcionando a:' ; echo ; sleep 2

echo ; uptime ; echo ; sleep 4

echo ; echo 'Sobre o tamanho desta pasta:' ; echo ; sleep 2

echo ; df -h ; echo ; sleep 6

echo ; echo 'Sobre a memória RAM:' ; echo ; sleep 2

echo ; free -html ; echo ; sleep 6

echo ; echo 'Você está logado como:' ; echo ; sleep 2

echo ; whoami ; echo ; sleep 4

echo ; echo 'Você está em:' ; echo ; sleep 2

echo ; pwd ; echo ; sleep 4

echo ; echo 'Neste diretório/pasta tem:' ; echo ; sleep 2

echo ; ls -at ; echo ; sleep 6

echo ; echo 'O Bash está em:' ; echo ; sleep 2

echo ; whereis bash ; echo ; sleep 4

echo ; echo 'Este é o fim do script 01-script.sh' ; echo ; sleep 4

exit

# Fim do script

.

No Linux o script deve ter permissão de execução, isto pode ser feito abrindo o terminal pelo menu do sistema e executando o comando:

chmod +x 01-script.sh

.

Depois de salvo você tem que executar o arquivo, dessa forma:

./01-script.sh

.

Viu alguma utilidade neste pequeno script?

Então siga adiante.

.

IMPORTANTE:

Para estudar shell script tem que ser como usuário normal. Se você está acessando o sistema como usuário administrador (root), saia e entre como um usuário normal. É muito perigoso estudar shell usando o superusuário, você pode danificar o sistema com um comando errado.

Ok, continuemos.

.

Para exibir um manual do bash ou mesmo do comando 'chmod', digito na linha de comando:

man bash

man chmod

.

É possível executar o arquivo mesmo sem modificar a permissão de execução, por exemplo, se for um arquivo escrito para ser executado pelo bash, usar:

sh ./"Nome do arquivo, sem aspas"

.

SHELL

É importante saber o que é um Shell.

Na linha de comandos de um shell, podemos utilizar diversos comandos um após o outro, ou mesmo combiná-los numa mesma linha.

Se colocarmos diversas linhas de comandos em um arquivo texto simples, teremos em mãos um Shell Script, ou um script em shell, já que Script é uma descrição geral de qualquer programa escrito em linguagem interpretada, ou seja, não compilada.

Outros exemplos de linguagens para scripts são o PHP, Perl, Python, JavaScript e muitos outros. Podemos então ter um script em php, um script perl e assim em diante.

Uma vez criado, um ShellScript pode ser reutilizado quantas vezes for necessário.

Seu uso, portanto, é indicado na automação de tarefas que serão realizadas mais de uma vez.

Todo sistema Unix e similares são repletos de scripts em shell para a realização das mais diversas atividades administrativas e de manutenção do sistema.

Os arquivos de lote (batch - arquivos *.bat) do Windows são também exemplos de ShellScripts, já que são escritos em linguagem interpretada e executados por um Shell do Windows, em geral o command.com ou hoje em dia o cmd.exe.

Os Shells do Unix, porém, são inumeras vezes mais poderosos que o interpretador de comandos do Windows, podendo executar tarefas muito mais complexas e elaboradas.

.

OS SCRIPTS SHELL PODEM SER AGENDADOS PARA EXECUÇÃO ATRAVÉS DA TABELA CRONTAB, ENTRE OUTRAS COISAS.

.

O shell é uma ferramenta indispensável aos administradores de sistemas Unix.

O Shell mais comum e provavelmente o que possui mais scripts escritos para ele é também um dos mais antigos e simples, o sh.

Este shell está presente em todo o sistema tipo Unix, incluído o Linux, FreeBSD, AIX, HP-UX, OpenBSD, Solaris, NetBSD, Irix, etc. Por ser o shell nativo mais comum é natural que se prefira escrever scripts para ele, tornando o script mais facilmente portável para outro sistema.

Os Shells não estão diretamente associados a um ou outro tipo de Unix, embora várias empresas comerciais tenham suas próprias versões de Shell. No software livre o Shell utilizado em um sistema em geral é exatamente o mesmo utilizado em outro. Por exemplo, o bash encontrado no Linux é o mesmo shell bash encontrado no FreeBSD e pode também facilmente ser instalado no Solaris, Windows através do Cygwin [1] ou outros sistemas Unix comerciais para passar a ser utilizado como interface direta de comandos ou como interpretador de scripts. O mesmo acontece com o tcsh e vários outros shells desenvolvidos no modelo de software livre.

.

INTERAGIR COM O USUÁRIO

.

Para o script ficar mais completo, vamos colocar uma interação mínima com o usuário, pedindo uma confirmação antes de executar os comandos.

.

#!/bin/bash

clear

echo "Vou buscar os dados do sistema. Posso continuar? [S/n] "

read RESPOSTA

test "$RESPOSTA" = "n" && exit

echo ; echo "Data e Horário:" ; echo

date

echo

echo "Uso do disco:" ; echo

df -ht

echo

echo "Usuários conectados:" ; echo

w

echo ; echo "Seu nome de login é:"

whoami

echo

exit

# Fim do script

.

O comando "read" leu o que o usuário digitou e guardou na variável RESPOSTA. Logo em seguida, o comando "test" verificou se o conteúdo dessa variável era "n". Se afirmativo, o comando "exit" foi chamado e o script foi finalizado. Nessa linha há vários detalhes importantes:

O conteúdo da variável é acessado colocando-se um cifrão "$" na frente

O comando test é útil para fazer vários tipos de verificações em textos e arquivos

O operador lógico "&&", só executa o segundo comando caso o primeiro tenha sido OK. O operador inverso é o "||"

.

MELHORAR O CÓDIGO DO SCRIPT

Com o tempo, o script vai crescer, mais comandos vão ser adicionados e quanto maior, mais difícil encontrar o ponto certo onde fazer a alteração ou corrigir algum erro. Para poupar horas de estresse, e facilitar as manutenções futuras, é preciso deixar o código visualmente mais agradável e espaçado, e colocar comentários esclarecedores.

.

#!/bin/bash

# nome-do-script - script que mostra informações sobre o sistema

# Autor: Fulano da Silva

# Pede uma confirmação do usuário antes de executar

clear

echo "Vou buscar os dados do sistema. Posso continuar? [S/n]"

read RESPOSTA

# Se ele digitou 'n', vamos interromper o script

test "$RESPOSTA" = "n" && exit

# O date mostra a data e a hora correntes

sleep 3 ; echo "Data e Horário:" ; echo

date

sleep 3

echo

# O df mostra as partições e quanto cada uma ocupa no disco

echo "Uso do disco:"

sleep 3

echo

df

echo

sleep 6

# O w mostra os usuários que estão conectados nesta máquina

echo "Usuários conectados:"

sleep 3

echo

w

sleep 3

echo

# Fim do script

.

Basta iniciar a linha com um "#" e escrever o texto do comentário em seguida. Estas linhas são ignoradas pelo shell durante a execução. O cabeçalho com informações sobre o script e seu autor também é importante para ter-se uma visão geral do que o script faz, sem precisar decifrar seu código. Também é possível colocar comentários no meio da linha # como este

.

FERRAMENTAS PARA FUNÇÕES

.

O COMANDO RETURN INFORMA O FIM DA FUNÇÃO. EXEMPLO:

MinhaFuncao(){
echo "Isto será exibido"
return
echo "Isso não será exibido, pois está depois de return"
}

MinhaFuncao

.

Se criar uma variável dentro de uma função, mesmo chamando ela fora da função, o valor da variável será exibido, pois ela será tratada como variável GLOBAL, caso tente imprimi-la, para que o valor de uma variável seja exibido somente dentro da função, precisamos usar o comando local antes da variável para que não seja exibido. Para entender isto só mesmo com exemplo na prática. Vamos a ele:

.

EU ABRO O EDITOR DE TEXTO E COLO O TEXTO ABAIXO NELE:

#!/bin/bash

# Meu comentário

VARIAVEL="Olá Mundo do Shell Script!"

echo $VARIAVEL

sleep 2

echo

echo "Vou buscar os dados do sistema. Posso continuar? [S/n] "

read RESPOSTA

test "$RESPOSTA" = "n" && exit

echo ; echo "Data e Horário:" ; echo

date

echo

echo "Uso do disco:" ; echo

df -hi

echo

echo "Usuários conectados:" ; echo

w

echo ; echo "Seu nome de login é:"

whoami

echo

ARRAY5=("Shell" "Madrugada" "Script" "Amanhece" "Linux")

echo "O ARRAY5 possui ${#ARRAY5[@]} elemento(s)"

MinhaFuncao(){
echo "Eu estou passando $# parâmetros"
#return
echo "Muitas coisas"
}

MinhaFuncao $@

echo 'Se o resultado é zero está tudo certo!'

sleep 2

echo

echo $?

exit

# Fim do script: 09-ferramentas-funcoes.sh

.

SALVO COMO: 09-ferramentas-funcoes.sh

.

DOU PODER DE EXECUÇÃO:

chmod a+x 09-ferramentas-funcoes.sh

.

EXECUTO:

sh 09-ferramentas-funcoes.sh

sh 09-ferramentas-funcoes.sh Linux Brasil GNU

.

AGORA ALTERO O SCRIPT 09-ferramentas-funcoes.sh (REMOVO A TRALHA # DE RETURN) E EXECUTO DE NOVO:

.

#!/bin/bash

# Meu comentário

VARIAVEL="Olá Mundo do Shell Script!"

echo $VARIAVEL

sleep 2

echo

echo "Vou buscar os dados do sistema. Posso continuar? [S/n] "

read RESPOSTA

test "$RESPOSTA" = "n" && exit

echo ; echo "Data e Horário:" ; echo

date

echo

echo "Uso do disco:" ; echo

df -hi

echo

echo "Usuários conectados:" ; echo

w

echo ; echo "Seu nome de login é:"

whoami

echo

ARRAY5=("Shell" "Madrugada" "Script" "Amanhece" "Linux")

echo "O ARRAY5 possui ${#ARRAY5[@]} elemento(s)"

MinhaFuncao(){
echo "Eu estou passando $# parâmetros"
return
echo $VARIAVEL
echo "Muitas coisas"
}

MinhaFuncao $@

echo 'Se o resultado é zero está tudo certo!'

sleep 2

echo

echo $?

exit

# Fim do script: 09-ferramentas-funcoes.sh

.

COPIO E COLO O COMANDO ABAIXO NO TERMINAL:

sh 09-ferramentas-funcoes.sh Amanhecer ANOITECER Estudar DORMIR

.

CONSTANTES NÃO MUDAM. EXEMPLO:

.

#!/bin/bash

MinhaFuncao(){
local OLA="Olá, mundo!"
echo "Eu estou passando $# parâmetro(s)"
return
echo $OLA
echo "Muita coisa"
}

MinhaFuncao

declare -r MinhaConstante='Estamos constantes'

echo $MinhaConstante

# Fim do 3d-script-constante.sh

.

PODER DE EXECUÇÃO:

chmod +x 3d-script-constante.sh

.

EXECUTAR O SCRIPT:

sh 3d-script-constante.sh

sh 3d-script-constante.sh LINUX BASH

.

PARA APAGAR CONSTANTES E FUNÇÕES É O MESMO PROCEDIMENTO DE APAGAR VARIÁVEIS (unset).

.

CONDIÇÕES EM SHELL SCRIPT

O Shell tem estruturas para se fazer condições. Por exemplo o comando TEST. O comando TEST é útil para fazer vários tipos de verificações em textos e arquivos, testa o conteúdo de uma string, poder ser um arquivo, uma variável, compara valores numéricos ou não. O test avalia uma determinada condição dada e se ela for verdadeira a variável $? é retornada com o valor zero (0) e se falsa o valor é 1.

.

COM O COMANDO TEST PODEMOS VER SE É UM DISPOSITOVO DE:

-b (Bloco), -c (Caractere), -d (Diretório), -e (Se existe), -f (Se é um arquivo normal), -G (O grupo do arquivo é o do usuário atual), -L (O arquivo é um link simbólico), -r (O arquivo tem permissão de leitura), -s (O tamanho é maior que zero), -nt (O arquivo é o mais recente), -ot (O arquivo é mais antigo), -w (Se o arquivo tem permissão de escrita), -x Se o arquivo tem permissão de execução), -ef (Se o arquivo é o mesmo), e por aí vai... etc;

.

Podemos usar a COMPARAÇÃO NUMÉRICA no comando test. Veja estas opções abaixo por exemplo:

.

-lt (É menor que)

-gt (É maior que)

-le (É menor igual)

-ge (É maior igual)

-eq (É igual)

-ne (É diferente)

.

COMPARAÇÃO DE STRINGS:

.

= (É igual)

!= (É diferente)

-n (É não nula)

-z (É nula)

.

OPERADORES LÓGICOS:

! (NÃO lógico)

-a (E lógico) (AND)

-o (OU lógico)

.

VAMOS EXECUTAR OS EXEMPLOS ABAIXO NO TERMINAL:

test 1 = 1 ; echo $? (É igual a...)

test 1 = 2 ; echo $? (É igual a...)

test 1 != 2 ; echo $? (É diferente de...)

test 1 != 1 ; echo $? (É diferente de...)

.

- PRATICANDO O COMANDO TEST -

.

Vamos testar se o arquivo: 08-test-script.sh existe? Se é uma pasta? Se é um arquivo normal? Execute os comandos abaixo:

touch 08-test-script.sh

ls -t

test -e 08-test-script.sh ; echo $? (Verifica se existe)

test -d 08-test-script.sh ; echo $? (Verifica se é uma pasta)

test -f 08-test-script.sh ; echo $? (Verifica se é um arquivo comum)

test -s 08-test-script.sh (Verifica se o tamanho é maior que zero)

rm -fi 08-test-script.sh

.

Exemplo:

~ $rm -fi 08-test-script.sh
rm: remover arquivo comum vazio '08-test-script.sh'? S

.

Execute os comandos abaixo:

ls -t

test -e 08-test-script.sh ; echo $?

test -d 08-test-script.sh ; echo $?

test -s 08-test-script.sh

.

SE CORRESPONDE A OPÇÃO ESCOLHIDA A RESPOSTA É ZERO. SE NÃO A RESPOSTA É 1.

.

OS SCRIPTS SHELL PODEM CONTER ESTRUTURAS DE PROGRAMAÇÃO/condição TAIS COMO:

if, them, else, elif, fi

.

ESTRUTURAS DE DECISÃO (if)

If testa um comando e não uma condição. O comando que testa condições é o test. Usamos o test junto com o if. O if é um recurso utilizado para dar sequencia em fluxos de execução baseado em decisões. Cuja sintaxe é:

- Condição Verificada é o teste que definirá se controle deve ser passado para dentro do bloco then.

- Ação são comandos a serem executados em caso verdadeiro da condição verificada.

.

OPERADORES PARA NÚMEROS

.

-eq Verifica se é igual,

-ne Verifica se é diferente,

-lt Verifica se é menor,

-gt Verifica se é maior,

-le Verifica se é menor ou igual,

-ge Verifica se é maior ou igual.

.

OPERADORES PARA TEXTO

.

!= Verifica se é diferente,

= Verifica se é igual.

.

OPERADORES LÓGICOS

.

! Lógica NOT,

-o Lógica OU, (OR) ou ||,

-a Lógica E, (AND) ou &&.

.

OPERADOR PARA arquivos/

.

-d Verifica se é diretório,

-f Verifica se é arquivo,

-e Verifica se existe.

.

EXEMPLOS A SEREM EXECUTADOS:

.

#!/bin/bash

# Este script é para saber se uma variável é maior
# ou menor # do que 10 e mostrar uma mensagem na
# tela informando.
# No fim do script fechamos a condição com fi.
# Não esqueça de fechar a condição com fi, se não dá
# erro.

VARIAVEL=9;
if test "$VARIAVEL" -gt 10
then
echo "é maior que 10"
else
echo "é menor que 10"
fi

# Fim do script: 07w-script-if.sh

.

COPIO E COLO O CÓDIGO ABAIXO NO TERMINAL E VEJA O RESULTADO:

.

echo -e '#!/bin/bash\n \nVARIAVEL=9;\nif test "$VARIAVEL" -gt 10\n then\n echo "é maior que 10"\nelse\n echo "é menor que 10"\nfi\n \n# Fim do script: 07w-script-if.sh' > 07w-script-if.sh ; chmod a+x 07w-script-if.sh ; sh 07w-script-if.sh

.

RESULTADO:

é menor que 10

.

MAIS UM EXEMPLO IF, THEN, ELSE, ELIF, FI:

.

No exemplo abaixo a variável é igual a 10.

Neste caso tem que usar o "elif" se não vai dar erro.

Sem o "elif" o script vai dizer que é MENOR que 10.

É mais ou menos o seguinte, se (if) não é (then) maior, ou (elif) é (then) igual ou então (else) é menor. Fim (fi).

.

EXECUTE NO TERMINAL O SHELL SCRIPT EXEMPLO ABAIXO:

.

#!/bin/bash

VARIAVEL=10;
if test "$VARIAVEL" -gt 10
then
echo "é maior que 10"

elif test "$VARIAVEL" -eq 10
then

echo "é igual a 10"
else
echo "é menor que 10"

fi

# Fim do script:
# 08kw-script-if-then-else-elif-fi.sh

.

RESULTADO:

~ $sh 08kw-script-if-then-else-elif-fi.sh
é igual a 10
~ $

.

SE A VARIÁVEL FOSSE 11 EXEMPLO:

.

#!/bin/bash

VARIAVEL=11;
if test "$VARIAVEL" -gt 10
then
echo "é maior que 10"

elif test "$VARIAVEL" -eq 10
then

echo "é igual a 10"
else
echo "é menor que 10"

fi

# Fim do script:

# 03kw-script-if-then-else-elif-fi.sh

.

O RESULTADO É:

~ $sh 03kw-script-if-then-else-elif-fi.sh
é maior que 10

.

COPIO E COLO O CÓDIGO ABAIXO NO TERMINAL E VEJA O RESULTADO:

echo -e '#!/bin/bash\nVARIAVEL=11;\nif test "$VARIAVEL" -gt 10\nthen\necho "é maior que 10"\nelif test "$VARIAVEL" -eq 10\nthen\necho "é igual a 10"\nelse\necho "é menor que 10"\nfi\n# Fim do script:\n# 03kw-script-if-then-else-elif-fi.sh' > 03kw-script-if-then-else-elif-fi.sh ; chmod a+x 03kw-script-if-then-else-elif-fi.sh ; sh 03kw-script-if-then-else-elif-fi.sh

.

Consegue entender (ler) o código acima e sabe o que ele faz?

.

IF VEM ACOMPANHADO DO THEN
ELIF VEM ACOMPANHADO DO THEN
ELSE E O SCRIPT TERMINA COM FI

.

EXECUTE ESTE EXEMPLO NO TERMINAL:

.

#!/bin/bash

# Uso de Estrutura de Decisão

clear

echo 'opções'

echo '======'

echo ' -> Data do Sistema'

echo ' -> Uso do Sistema'

read opcao

if [ "$opcao" -eq 1 ]

then

echo 'Data do sistema: ' && date

elif [ "$opcao" -eq 2 ]

then

echo 'Uso do disco: ' && df -Th

fi

# Fim do script: 08cw-script-if.sh

.

PODEMOS CRIAR UMA FUNÇÃO

.

#!/bin/bash

MinhaFuncao(){
VARIAVEL=$1;
if test "$VARIAVEL" -gt 10
then
echo "é maior que 10"

elif test "$VARIAVEL" -eq 10
then

echo "é igual a 10"
else
echo "é menor que 10"

fi
}

MinhaFuncao $1

# Fim do script:

# 09ks-funcao-if-then-else-elif-fi.sh

.

JÁ SABE OS PROCEDIMENTOS. EXECUTE O SCRIPT ACIMA ASSIM:

sh 09ks-funcao-if-then-else-elif-fi.sh 8

bash 09ks-funcao-if-then-else-elif-fi.sh 19

./09ks-funcao-if-then-else-elif-fi.sh 868

sh 09ks-funcao-if-then-else-elif-fi.sh 2

.

ESTRUTURAS DE REPETIÇÃO (for) (while)

.

ESTRUTURA DE REPETIÇÃO for:

Permite que ações de iteração sejam executadas sobre determinados comandos ou variáveis até que a condição seja satisfeita.

.

# !/bin/bash

clear

echo "DIAS DA SEMANA"

for dia in seg ter qua qui sex sab dom

do

echo "$dia"

done

# Fim do script 7s-etrut-repet-for-while.sh

.

RESULTADO:

.

DIAS DA SEMANA
seg
ter
qua
qui
sex
sab
dom
~ $

.

ESTRUTURA DE REPETIÇÃO while:

Em situações onde sabemos até onde o loop irá realizar uma contagem o ideal é usar o for entretanto em cenarios onde a iteração deve cessar somente após se satisfazer uma condição o uso do laço while é mais indicado. Ex:

.

# /bin/bash

clear

var=1

while [ $var -le 7 ]

do

echo "Valor de var: $var"

var=$((var+1))

done

# Fim do script 7g-estr-rep-while.sh

.

Resultado:

Valor de var: 1
Valor de var: 2
Valor de var: 3
Valor de var: 4
Valor de var: 5
Valor de var: 6
Valor de var: 7
~ $

.

UM USO INTERESSANTE DO WHILE PARA VER O LOOP FUNCIONANDO:

.

Por vezes queremos acompanhar a cópia de um arquivo na console do Linux e o caminho mais normal é abrir um outro terminal e ficar repetitivamente executando o comando ls, ou algum outro comando, haja dedo para apertar a seta pra cima e enter, seta pra cima e enter, seta pra cima e enter. Podemos resolver isto usando o comando while de forma bem simples, por exemplo se quisermos executar um ls por várias vezes, podemos fazer assim:

.

OBS: Execute um de cada vez, parar o comando com Ctrl+C.

.

1

while true; do ls; done;

2

while true; do ls; echo; sleep 5; done;

3

while true; do ls; echo; sleep 5; clear; done;

.

ISTO VAI EXECUTAR O COMANDO LS ATÉ PRESSIONARMOS CTRL + C PARA QUEBRÁ-LO.

.

FUNÇÕES E ARGUMENTOS

.

Ex:

.

# !/bin/bash

# REALIZAR BACKUP DO DIR

echo -e " \033[1;33m Digito o caminho de origem.: \033[0m "

read DIR_ORIGEM

clear

echo -e " \033[1;34m Digito o caminho de destino.: \033[0m "

read DIR_DESTINO

clear

verifica_argumentos(){

if [ $# -lt 1 ];

then

echo "Faltou informar um dos argumentos (parametros) necessarios!"

exit 1

fi

}

copia_arquivos(){

verifica_argumentos

clear

echo "Realizando backup..."

#Verificando se o dir de destino existe

if ! [ -d $DIR_DESTINO ]

then

mkdir $DIR_DESTINO

echo "Diretorio de Destino Criado"

fi

#COPIANDO ARQUIVOS

for arq in `ls $DIR_ORIGEM`

do

cp /$DIR_ORIGEM/$arq $DIR_DESTINO/$arq.bak

done

}

copia_arquivos

# Fim do script 08b-funcoes-e-arg.sh

.

DEFINIÇÕES DE VARIÁVEIS E ESCOPO DESTAS

.

Variáveis são definidas pela nomenclatura NOME_VARIAVEL="Valor da Variável". O valor pode ser tanto numérico quanto texto.

.

Nome="Joel"

.

Se quisermos acessá-la, basta fazer referência a ela com o caractere $ (cifrão) antes do nome: o comando echo $Nome, por exemplo, retornará a palavra "Joel".

.

Se quiser sabe informações sobre os sistemas de arquivo nos quais cada ARQUIVO reside ou, por padrão, sobre todos os sistemas de arquivos posso abrir um terminal e digitar:

VarInfo="df -h"

.

Depois digito no terminal "$VarInfo" sem aspas.

.

VARIÁVEIS DE AMBIENTE

.

As variáveis de ambiente independem da definição do usuario. Elas são criadas automaticamente, no momento em que se faz o login no sistema.

.

Ex:

PATH: define diretórios de procura por programas executados no shell;

USER: informa o nome do usuário do shell;

HOME: informa o caminho do diretório home do usuário;

PWD: diretório atual;

.

As variáveis são a base de qualquer script. É dentro delas que os dados obtidos durante a execução do script serão armazenados. Para definir uma variável, basta usar o sinal de igual "=" e para ver seu valor, usa-se o "echo":

.

Executo estes comandos abaixo no terminal:

.

VARIAVEL="um dois tres"

echo $VARIAVEL

echo $VARIAVEL $VARIAVEL

.

Para remover a variável acima:

unset VARIAVEL

.

Teste:

echo $VARIAVEL

.

É possível armazenar a saída de um comando dentro de uma variável. Ao invés de aspas, o comando deve ser colocado entre "$(...)", execute no terminal os comandos abaixo:

HOJE=$(date)

echo "Hoje é: $HOJE"

sleep 2

unset HOJE

echo $HOJE

HOJE=$(ls)

echo "O conteúdo desta pasta tem: $HOJE"

sleep 2

unset HOJE

echo $HOJE

HOJE=$(free -hmt)

echo "Informando sobre a memória desta máquina: $HOJE"

sleep 2

unset HOJE

echo $HOJE

.

EXEMPLOS DE USO DO SHELL SCRIPT:

.

Apagar arquivos velhos - Apagar periodicamente arquivos mais velhos que 30 dias do diretório /tmp:

.

#!/bin/bash

cd /tmp

find . -type f -mtime +30 -delete

# Fim do script

.

Este seria o conteúdo de um shell script que sempre que fosse executado apagaria arquivos com data de modificação maior que 30 dias a partir do diretório /tmp do sistema de arquivos.

.

Notem que ele é nada mais do que uma associação de 2 comandos (cd e find) em um arquivo para facilitar a repetição da tarefa. Este poderia ser, por exemplo, o conteúdo do arquivo /bin/limpatmp.sh e poderíamos chamar este script pela linha de comandos sempre que desejássemos repetir esta ação:

.

$ limpatmp.sh

.

Onde o símbolo "$" representa o prompt de comandos. Do ponto de vista do usuário este seria mais um comando disponível para uso.

.

Os scripts em shell são também muito empregados junto à inicialização do sistema (para auto iniciar tarefas) ou como mini aplicativos, que facilitam tarefas dos usuários, tais como montagem de dispositivos, menus de ajuda, etc.

.

Sua primeira linha obrigatoriamente começa com um "#!" (que não se deve confundir com um comentário qualquer, pois realmente é uma exceção; este par se chama, em inglês, de shebang), informando diretamente ao núcleo (kernel) qual interpretador ele deverá usar, juntamente com seu caminho, de acordo com a necessidade de cada caso. Exemplo:

#!/bin/bash

.

Em seguida, são adicionados os comandos desejados, um por linha, ou separados por ponto e vírgula. Exemplo:

.

mount -t reiserfs /dev/hda1 /mnt/hda1

ls /mnt/hda1

cp -r /mnt/hda1/* /home/user/backup

umount /dev/hda1

.

Por fim, dá-se a permissão de execução a este arquivo de texto simples ("chmod +x arquivo").

.

DATA ANTERIOR

.

#!/bin/bash

# Função em Bash para retornar a data anterior, levando em conta o mês e ano.

fn_data_anterior()

{

DIA=$D

MES=$M

ANO=$A

# Dado DIA, MES e ANO numéricos, obtém a data do dia anterior

DIA=`expr $DIA - 1`

if [ $DIA -eq 0 ]; then

MES=`expr $MES - 1`

if [ $MES -eq 0 ]; then

MES=12

ANO=`expr $ANO - 1`

fi

DIA=`cal $MES $ANO`

DIA=`echo $DIA | awk '{ print $NF }'`

fi

}

ano=`date +%Y`;

mes=`date +%m`;

let dia=10\#`date +%d`;

if (( $dia". Para guardar a saída do comando anterior no arquivo "saida", basta fazer:

cat /etc/passwd | grep root | cut -c1-10 > saida

cat saida

.

REPETINDO: O COMANDO TEST

.

O canivete suíço dos comandos do shell é o "test", que consegue fazer vários tipos de testes em números, textos e arquivos. Ele possui várias opções para indicar que tipo de teste será feito, algumas delas:

1) -lt Núm. é menor que (LessThan)

2) -d É um diretório

3) -gt Núm. é maior que (GreaterThan)

4) -f É um arquivo normal

5) -le Núm. é menor igual (LessEqual)

6) -r O arquivo tem permissão de leitura

7) -ge Núm. é maior igual (GreaterEqual)

8) -s O tamanho do arquivo é maior que zero

9) -eq Núm. é igual (EQual)

10) -w O arquivo tem permissão de escrita

11) -ne Núm. é diferente (NotEqual)

12) -nt O arquivo é mais recente (NewerThan)

13) = String é igual

14) -ot O arquivo é mais antigo (OlderThan)

15) != String é diferente

16) -ef O arquivo é o mesmo (EqualFile)

17) -n String é não nula

18) -a E lógico (AND)

19) -z String é nula

20) -o OU lógico (OR)

.

SCRIPT QUE TESTA ARQUIVOS

Tente fazer um script "testa-arquivos", que pede ao usuário para digitar um arquivo e testa se este arquivo existe. Se sim, diz se é um arquivo ou um diretório.

.

CONCEITOS MAIS AVANÇADOS:

.

CASE

.

O CASE É PARA CONTROLE DE FLUXO, TAL COMO É O IF. Mas enquanto o if testa expressões não exatas, o case vai agir de acordo com os resultados exatos. Abre com case e fecha com esac. Se nao fizer assim dá erro. Vejamos uns exemplos:

.

case $VARIAVEL in
10) echo "é 10" ;;
9) echo "é 9" ;;
7|8) echo "é 7 ou 8" ;;
*) echo "é menor que 6 ou maior que 10" ;;
esac

.

case $1 in
parametro1) comando1 ; comando2 ;;
parametro2) comando3 ; comando4 ;;
*) echo "Você tem de entrar com um parâmetro válido" ;;
esac

.

AQUI ACIMA ACONTECEU O SEGUINTE: o case leu a variável $1 (que é o primeiro parâmetro passado para o programa), e comparou com valores exatos. Se a variável $1 for igual à “parametro1″, então o programa executará o comando1 e o comando2; se for igual à “parametro2″, executará o comando3 e o comando4, e assim em diante. A última opção (*), é uma opção padrão do case, ou seja, se o parâmetro passado não for igual a nenhuma das outras opções anteriores, esse comando será executado automaticamente. Com o case fica muito mais fácil criar uma espécie de “menu” para o shell script do que com o if.

.

EXEMPLO DE SCRIPT PARA EXECUTAR NO TERMINAL:

#!/bin/bash

# Aprendendo shell script

MinhaFuncao (){

case $1 in
10) echo "é 10" ;;
9) echo "é 9" ;;
7|8) echo "é 7 ou 8" ;;
*) echo "é menor que 6 ou maior que 10" ;;
esac

}

MinhaFuncao $1

# Fim script 07hr-funcao-case-esac.sh

.

RESULTADOS:

~ $sh 07hr-funcao-case-esac.sh 8
é 7 ou 8

~ $sh 07hr-funcao-case-esac.sh 15
é menor que 6 ou maior que 10

~ $sh 07hr-funcao-case-esac.sh 9
é 9

.

REPETINDO: If, for e while

.

Assim como qualquer outra linguagem de programação, o shell também tem estruturas para se fazer condicionais e loop. As mais usadas são if, for e while.

.

ATÉ ESTE PONTO EM QUE ESTAMOS, JÁ SABEMOS O BÁSICO, O NECESSÁRIO PARA SE FAZER UM SCRIPT DE FUNCIONALIDADE MÍNIMA. E ESTE MÍNIMO PODE FAZER COISAS INCRÍVEIS. AVANÇAR:

case, if, for e while.

.

Comando if:

.

Comando if - else:

if ( condição ) {
comandos a serem executados se a condição for verdadeira;
}
else {
comandos a serem executados se a condição for falsa;
}

.

COMANDOS DE CONTROLE DE FLUXO

.

Controle de fluxo são comandos que vão testando algumas alternativas, e de acordo com essas alternativas, vão executando comandos. Um dos comandos de controle de fluxo mais usados é certamente o if, que é baseado na lógica “se acontecer isso, irei fazer isso, se não, irei fazer aquilo”.

.

EXEMPLO DE UM PEDAÇO DE CÓDIGO:

.

if [ -e $linux ]
then
echo 'A variável $linux existe.'
else
echo 'A variável $linux não existe.'
fi

.

O que este pedaço de código faz? O if testa a seguinte expressão: Se a variável $linux existir, então (then) ele diz que que existe com o echo, se não (else), ele diz que não existe. O operador "-e" é pré-definido, e você pode encontrar a listagem dos operadores na tabela:

.

-eq Igual
-ne Diferente
-gt Maior
-lt Menor
-o Ou
-d Se for um diretório
-e Se existir
-z Se estiver vazio
-f Se conter texto
-o Se o usuário for o dono
-r Se o arquivo pode ser lido
-w Se o arquivo pode ser alterado
-x Se o arquivo pode ser executado

.

Exemplo de uso do if:

.

if [COMANDOS]

then

comandos

else

comandos

fi

# Fim do script

.

Ex:

for VAR in LISTA

do

comandos

done

# Fim do script

.

Ex:

while COMANDO

do

comandos

done

# Fim do script

.

REPETINDO: Diferente de outras linguagens, o if testa um comando e não uma condição. Porém como já conhecemos qual o comando do shell que testa condições, é só usá-lo em conjunto com o if. Por exemplo, para saber se uma variável é maior ou menor do que 10 e mostrar uma mensagem na tela informando:

.

Ex:

if test "$VARIAVEL" -gt 10

then

echo "é maior que 10"

else

echo "é menor que 10"

fi

# Fim do script

.

Há um ATALHO PARA O TEST , que é o comando [. Ambos são exatamente o mesmo comando, porém usar o [ deixa o if mais PARECIDO COM O FORMATO TRADICIONAL de outras linguagens:

.

O test pode ser escrito assim:

test 1 = 1 ; echo $?

test 1 != 1 ; echo $?

.

Ou assim:

[ 1 = 1 ] ; echo $?

[ 1 != 1 ] ; echo $?

.

Executo os comandos acima no terminal.

.

O Resultado é:

~ $test 1 = 1 ; echo $?
0
~ $test 1 != 1 ; echo $?
1
~ $[ 1 = 1 ] ; echo $?
0
~ $[ 1 != 1 ] ; echo $?
1
~ $

.

EXEMPLO A SER EXECUTADO:

.

#!/bin/bash

VARIAVEL=17;
if [ "$VARIAVEL" -gt 10 ]

then
echo "é maior que 10"

elif [ "$VARIAVEL" -eq 10 ]

then
echo "é igual a 10"

else
echo "é menor que 10"
fi

# Fim do script 06r-atalho-test.sh

.

Resultado:

~ $sh 06r-atalho-test.sh
é maior que 10

.

OUTRO EXEMPLO A SER EXECUTADO:

.

#!/bin/bash

VARIAVEL=4;
if [[ "$VARIAVEL" -gt 10 ]];

then
echo "é maior que 10"

elif [[ "$VARIAVEL" -eq 10 ]];

then
echo "é igual a 10"

else
echo "é menor que 10"
fi

# Fim do script 07r-atalho-test.sh

.

Resultado:

~ $sh 07r-atalho-test.sh
é menor que 10

.

Se usar o [, também é preciso fechá-lo com o ], e sempre devem ter espaços ao redor. É recomendado evitar esta sintaxe para diminuir suas chances de erro.

.

Percebeu que neste ponto a gente está sabendo usar de verdade TEST IF THEN ELIF ELSE FI?

.

COMANDO WHILE

.

O while é um laço que é executado enquanto um comando retorna OK. Novamente o test é bom de ser usado. Por exemplo, para segurar o processamento do script enquanto um arquivo de lock não é removido:

.

Ex:

while test -f /tmp/lock

do

echo "Script travado..."

sleep 1

done

# Fim do script

.

O COMANDO FOR

.

E por fim, o "for" percorre uma lista de palavras, pegando uma por vez:

.

Ex:

for numero in um dois três quatro cinco

do

echo "Contando: $numero"

done

# Fim do script

.

Uma ferramenta muito útil para usar com o "for" é o "seq", que gera uma seqüência numérica.

.

Para fazer o loop andar 10 passos, pode-se fazer:

for passo in $(seq 10)

.

O mesmo pode ser feito com o while, usando um contador:

.

i=0

while test $i -le 10

do

i=$((i+1))

echo "Contando: $i"

done

# Fim do script

.

LOOPS EM SHELL QUANDO USAR?
.

Precisamos digitar um código talvez com ligeira mudança. Para não ter que repetir a tarefa digitando o código 20 vezes ou mais, usamos loops. Podemos usar vários loops. Tem pelo menos tres tipos de loops para o comando FOR por exemplo.

.

Exemplos abaixo:

.

for ((i=0;i 01-while1.sh ; chmod a+x 01-while1.sh ; ./01-while1.sh

.

Exemplo:

.

~ $cd ; mkdir pasta-while-loop ; cd pasta-while-loop/ ; echo -e '#!/bin/bash\n \nn=1\n \nwhile [ $n -le 5 ]\ndo\necho "Este é o loop $n"\n(( n++ ))\ndone' > 01-while1.sh ; chmod a+x 01-while1.sh ; ./01-while1.sh
Este é o loop 1
Este é o loop 2
Este é o loop 3
Este é o loop 4
Este é o loop 5
pasta-while-loop $

.

EXECUTO O SCRIPT ABAIXO:

.

#!/bin/bash

# Aprendendo loops Shell Script

# Nome: 06s-loop-while.sh

_INPUT_STRING="Olá"
while [[ "$_INPUT_STRING" != "tchau" ]]
do
echo "Você deseja ficar aqui ?"
read _INPUT_STRING

if [[ $_INPUT_STRING = 'tchau' ]]; then
echo "Você disse Tchau"
else
echo "Você ainda deseja ficar aqui"
fi
done

# Fim do 06s-loop-while.sh

.

Resultado:

~ $sh 06s-loop-while.sh
Você deseja ficar aqui ?
Sim
Você ainda deseja ficar aqui
Você deseja ficar aqui ?
Claro
Você ainda deseja ficar aqui
Você deseja ficar aqui ?
Tchau
Você ainda deseja ficar aqui
Você deseja ficar aqui ?
tchau
Você disse Tchau
~ $

.

O loop serve para scripts avançados, redes de computadores, e outros.

.

CRIE SEU PRÓPRIO EPUB USANDO O PROGRAMA SIGIL

.

LINUX COMANDOS DE MANIPULAÇÃO DE ARQUIVOS PARA USAR EM SHELL SCRIPT

.

Crio uma pasta, abro o terminal nesta pasta criada e executo:

.

ls -t -a -h -l

pwd

cd ..

ls -a

pwd

cd -

ls -t

pwd

touch nome-do-arquivo-a-ser-criado1.txt nome2.txt

ls -t

cat nome2.txt

echo 'Olá Mundo!' > nome2.txt

cat nome2.txt

ls ; echo ; echo "E ..." ; sleep 4 ; echo ; ls -t

clear

mkdir pasta-teste

ls -a

ls -t ; echo

rmdir pasta-teste

ls -t ; pwd

mkdir -p pasta-mama/pasta-filha

ls -t ; echo

> nome-do-arquivo-a-ser-criado3.txt ; > nome4.txt

ls -at ; echo

pwd

cp nome2.txt nome3.txt

ls -t ; echo

mv nome2.txt nome1.txt

ls -t

find -name nome2.txt

find -name nome3.txt

find -name nome1.txt

mv nome1.txt pasta-mama/

find -name nome1.txt > nome1.txt

ls

cat nome1.txt

find ./ -name nome3.txt

find ./ -name calendario-de-2018.txt

rm nome3.txt

find -name nome3.txt

ls -t

pwd

find nome-do-arquivo-a-ser-criado3.txt

rm nome-do-arquivo-a-ser-criado3.txt

ls -t

rm nome4.txt nome-do-arquivo-a-ser-criado1.txt

ls -t ; echo

clear

ls

cd pasta-mama/

cd ..

pwd

ls

cd -

ls ; echo

echo -e 'Este texto\n \né do arquivo\n \nnome1.txt\n' >> nome1.txt

cat nome1.txt

ls

mv nome1.txt pasta-filha/

ls ; echo

mkdir pasta-bro

ls

cd pasta-filha/

> texto-filha.txt

ls -t

echo -e "\n \nEste texto\n \nEstá escrito em\n \ntexto-filha.txt!" > texto-filha.txt

cat texto-filha.txt

echo -e "\n \nEste texto\n \nSobreescreve\n \ntexto-filha.txt!" > texto-filha.txt

cat texto-filha.txt

echo -e "\n \nEste texto\n \nSerá adicionado a\n \ntexto-filha.txt\n" >> texto-filha.txt

cat texto-filha.txt

ls -t

cat nome1.txt

cp nome1.txt nome8.txt

clear

ls -t

cat nome8.txt

cd ..

ls

rm -rf pasta-filha/

ls

rmdir pasta-bro/

ls

cd ..

pwd

ls

rmdir pasta-mama/

ls

clear

pwd

echo -e 'L1ee\n L2nn\nL3cc\nL4yy\nL5rr\nL6ii\nL7hh\n L8jj\nL9ss\n L10mm\n L11ww\nL12oo\n L13ff' > 09-texto_teste.txt

mkdir 09-texto_teste ; mv 09-texto_teste.txt 09-texto_teste/ ; cd 09-texto_teste/ ; ls -c

cat 09-texto_teste.txt

head -5 09-texto_teste.txt

head -2 09-texto_teste.txt

tail -6 09-texto_teste.txt

tail -3 09-texto_teste.txt

head -5 09-texto_teste.txt | tail

tail -6 09-texto_teste.txt | head

wc -m 09-texto_teste.txt

wc -w 09-texto_teste.txt

wc 09-texto_teste.txt

more 09-texto_teste.txt

cd ..

rm -r 09-texto_teste/

ls -t

clear

exit

.

CRIAÇÃO/BACKUP DE/EM LINKS COM LN:

ln -s

ln -b

ln -i

.

COMANDOS DE COMPACTAÇÃO / DESCOMPACTAÇÃO

.

TAR

Armazena ou extrai arquivos e diretórios dentro de um único arquivo ou dispositivo.

.

Sintaxe: tar [opções] arquivos_ou_diretórios

Opções:

-c :: cria um novo arquivo .tar e adiciona a ele os arquivos especificados

-x :: retira os arquivos agrupados no arquivo .tar

-f :: indica que o destino é um arquivo em disco e não uma fita magnética

-v :: exibe o nome de cada arquivo processado

-Z :: compacta ou descompacta arquivos utilizando o comando compress

-z :: compacta ou descompacta arquivos utilizando o comando gzip

-j :: compacta ou descompacta arquivos utilizando o comando bzip2

-M :: múltiplos volumes

-b n :: define o tamanho do bloco de dados utilizado pelo tar (n*512 bytes)

.

Exemplos:

1. Gera um arquivo de backup do diretório "documentos1":

tar -cvf documentos.tar documentos1

2. Exibe o conteúdo do arquivo "documentos.tar":

tar -tvf documentos.tar

3. Extrai o conteúdo do arquivo "documentos.tar":

tar -xvf documentos.tar

5. Gera um arquivo de backup compactado com bzip2 do diretório "documentos1":

tar -cvjf memorandos.tar.bz2 documentos1

6. Divide em vários disquetes o arquivo "documentos.tar.bz2":

tar -cvMf /dev/fd0 /operftp/documentos.tar.bz2

7. Extrai o arquivo de backup armazenado no disquete:

tar -xvMf /dev/fd0

.

CPIO

Executa funções de arquivamento de dados.

.

Sintaxe: cpio [opções]

Opções:

-o :: lê nomes de arquivos da entrada padrão e os copia para a saída padrão com a informação necessária para a sua recuperação posterior com o comando: cpio -i

-i :: lê da entrada padrão um arquivo criado pelo comando cpio -o e extrai os arquivos armazenados

-v :: exibe o nome de cada arquivo processado

.

Exemplos:

1. Copia todos os arquivos mencionados em "lista.txt" para o arquivo "backup.cpio":

cpio -o /operftp/lista.txt > /operftp/backup.cpio

2. Extrai todos os arquivos armazenados em "backup.cpio":

cpio -i procedimento.zip

.

COMPRESS

Compacta um ou mais arquivos utilizando a compactação Lempel-Ziv.

Sintaxe: compress [opções] arquivos

Opções:

-c :: grava o arquivo compactado na saída padrão e retém o arquivo original

-d :: descompacta o arquivo

-r :: compacta recursivamente arquivos em todos os subdiretórios

Exemplos:

compress documentos.tar
$ compress -d documentos.tar.Z

.

UNCOMPRESS

Descompacta um ou mais arquivos que tenham sido compactados com o comando compress.

Sintaxe: uncompress [opções] arquivos

Opções:

-c :: grava o resultado na saída padrão e retém o original

-r :: descompacta recursivamente arquivos em todos os subdiretórios

Exemplo:

uncompress documentos.tar.Z

.

GZIP

Compacta um ou mais arquivos.

Sintaxe: gzip [opções] arquivos

Opções:

-c :: grava o arquivo compactado na saída padrão e retém o arquivo original

-d :: descompacta arquivo. O mesmo que gunzip

-f :: sobrescreve arquivos já existentes

-h :: mensagem de ajuda

-l :: lista o conteúdo de um arquivo compactado

-t :: testa a integridade do arquivo compactado

-n :: não salva o nome original

-r :: compacta recursivamente arquivos em todos os subdiretórios

-L :: exibe a licença do comando

Exemplos:

gzip documentos.tar

$ gzip -d documentos.tar.gz

.

GUNZIP

Descompacta arquivos compactados pelos comandos gzip e compress. Utiliza as mesmas opções de gzip.

Sintaxe: gunzip [opções] arquivos

Exemplo:

gunzip documentos.tar.gz

.

BZIP2

Compacta um ou mais arquivos.

Sintaxe: bzip2 [opções] arquivos

Opções:

-z :: força a compressão

-c :: grava na saída padrão

-t :: testa a integridade do arquivo compactado

-f :: sobrescreve arquivos já existentes

-d :: descompacta arquivos. O mesmo que bunzip2

-k :: não apaga os arquivos de entrada

-L :: licença do comando

Exemplos:

bzip2 documentos.tar

$ bzip2 -d documentos.tar.bz2

.

BUNZIP2

Descompacta arquivos compactados pelos comandos gzip ou compress. Utiliza as mesmas opções de bzip2.

Sintaxe: bunzip2 [opções] arquivos

Exemplo:

bunzip2 documentos.tar.bz2

.

ZIP

Compacta um ou mais arquivos.

Sintaxe: zip [opções] arquivo-destino arquivo-origem

Opções:

-e :: permito encriptar o conteúdo de um arquivo ZIP através de senha. A senha será pedida no momento da compactação

-m :: apaga os arquivos originais após a compactação

-r :: compacta recursivamente arquivos em todos os subdiretórios

Exemplos:

zip documentos.zip *.txt

$ zip -r documentos.zip /usr/*.txt

.

UNZIP

Descompacta arquivos compactados pelo comando zip.

Sintaxe: unzip [opções] arquivo.zip arquivos-origem [diretório]

Opções:

-l :: exibe os arquivos existentes dentro do arquivo ZIP

-d :: diretório onde os arquivos serão descompactados

-o :: substitui arquivos existentes sem perguntar

Exemplos:

unzip documentos.zip
$ unzip documentos.zip -d /operftp

.

ZCAT, ZMORE, ZLESS, BZ2CAT

Visualiza o conteúdo de um arquivo texto compactado, sem precisar descompactar o arquivo.

Os comandos zcat, zless e zmore funcionam da mesma forma que cat, less e more. A única diferença, é que esses comandos podem ler diretamente arquivos compactados com gzip ou compress sem precisar descompactar os arquivos.

.

EXEMPLOS:

.

zcat nome_arquivo

zless nome_arquivo

zmore nome_arquivo

bz2cat nome_arquivo

.

LINUX PERMISSOES DE PASTAS E ARQUIVOS

.

As permissões são usadas para definir quem pode acessar determinados arquivos ou diretórios, assim mantendo segurança e organização em sistemas e redes. Cada arquivo ou pasta tem 3 permissões:

(Usuário Dono) (Grupo Dono) (outros)

.

Usuário dono: é o proprietário do arquivo. Grupo Dono: é um grupo, que pode conter vários usuários. Outros: se encaixam os outros usuários em geral. O comando "ls -lh" faz uma listagem longa e detalhada no diretório onde eu estiver com o terminal aberto.

.

PARA ENTENDER AS PERMISSÕES DE PASTAS E ARQUIVOS, VOU FAZER O SEGUINTE:

.

Abro o terminal pelo menu do sistema. Não sou root, sou um usuário comum com alguns poderes administrativos, mas o prompt do terminal não está em root (#) está ($).

.

CRIO UMA PASTA COM O COMANDO:

mkdir pasta-estudo-permissoes

.

ENTRO NA PASTA COM O COMANDO:

cd pasta-estudo-permissoes/

.

CRIO UM ARQUIVO DE TEXTO CHAMADO estudo-permissoes.txt COM O COMANDO:

> estudo-permissoes.txt

.

CRIO OUTRO ARQUIVO COM O COMANDO:

touch permissoes-estudos.txt

.

DIGITO:

ls -lh

.

O RESULTADO É:

pasta-estudo-permissoes $ls -lh
total 0
-rw-rw-r-- 1 user user 0 mar 8 05:15 estudo-permissoes.txt
-rw-rw-r-- 1 user user 0 mar 8 05:16 permissoes-estudos.txt

.

AS PERMISSÕES DE ARQUIVOS SÃO INFORMADAS A MIM POR 5 CARACTERES. SÃO ELES:

r (significa leitura ), w (significa escrita ), x (significa execução ), - (hífen), d (indica que é uma pasta/diretório)

.

A PERMISSÃO DE ARQUIVOS E PASTAS ESTÁ DIVIDIDA EM QUATRO PARTES POR EXEMPLO:

Parte 1: -, Parte 2: rw-, Parte 3: r--, Parte 4: r--

.

NO TERMINAL ESTAS QUATRO PARTES SERÃO VISTAS ASSIM:

-rw-r--r--

.

EXEMPLO:

-rw-rw-r-- 1 user user 0 mar 8 05:15 estudo-permissoes.txt

.

Parte 1 (-)

hífen: o caractere "-" no início da sequência indica que aquele é um arquivo comum. Caso contrário, indica que a permissão de escrita, leitura ou execução está negada.

.

Parte 2 (rw-)

r: leitura permitida do arquivo ou diretório

.

w: permite editar um arquivo ou modificar o conteúdo de um diretório

.

hífen: o caractere "-" no início da sequência indica que aquele é um arquivo comum. Caso contrário, indica que a permissão de escrita, leitura ou execução está negada.

.

Parte 3 (r --)

r: leitura permitida do arquivo ou diretório

.

hífen: o caractere "-" no início da sequência indica que aquele é um arquivo comum. Caso contrário, indica que a permissão de escrita, leitura ou execução está negada.

.

hífen: o caractere "-" no início da sequência indica que aquele é um arquivo comum. Caso contrário, indica que a permissão de escrita, leitura ou execução está negada.

.

Parte 4 (r--)

r: leitura permitida do arquivo ou diretório

.

hífen: o caractere "-" no início da sequência indica que aquele é um arquivo comum. Caso contrário, indica que a permissão de escrita, leitura ou execução está negada.

.

hífen: o caractere "-" no início da sequência indica que aquele é um arquivo comum. Caso contrário, indica que a permissão de escrita, leitura ou execução está negada.

.

EU POSSO ALTERAR AS PESMISSÕES DESTES ARQUIVOS USANDO CHMOD.

.

O CHMOD É UM COMANDO QUE ALTERA AS PERMISSÕES DE ARQUIVOS E DIRETÓRIOS.

.

APRENDER COMO INTERPRETAR AS PERMISSÕES AJUDA A USAR O COMANDO CHMOD, POIS QUE ESSE COMANDO TRABALHA COM UMA SINTAXE SEMELHANTE.

.

A "FÓRMULA" DE USO MAIS SIMPLES DO CHMOD É:

chmod ugoa+-=rwx arquivo/diretório

.

SENDO QUE:

1) u: define que as regras serão aplicadas ao usuário

2) g: define que as regras serão aplicadas ao grupo

3) o: define que as regras serão aplicadas aos outros usuários do sistema

4) a: define que as regras serão aplicadas a todos

5) +: adiciona permissão

6) -: remove permissão

7) =: informa que a permissão aplicada deve ser exatamente igual a que será indicada a seguir

8) r: atribui a permissão de leitura

9) w: atribui a permissão de escrita

10) x: atribui a permissão de execução

.

COM ESTE PEQUENO/GRANDE CONHECIMENTO ADQUIRIDO, POSSO EXECUTAR UM COMANDO ALTERANDO AS PERMISSÕES DE UM ARQUIVO QUE EU CRIEI. O ARQUIVO "permissoes-estudos.txt".

.

EXECUTO NO TERMINAL:

sudo chmod g+w permissoes-estudos.txt

.

O chmod precisa ser usado com o comando sudo, pois apenas o usuário root tem a permissão de executá-lo. Depois de informar a senha e de ter concluído a execução, basta listar o arquivo com o ls -l para conferir a nova permissão. Percebo que onde antes era r--, agora se tornou rw-

.

CASO QUEIRA REMOVER A PERMISSÃO DE LEITURA, ESCRITA E EXECUÇÃO DE PESSOAS QUE NÃO PERTENCEM AO GRUPO, USO:

sudo chmod o-rwx permissoes-estudos.txt

.

SE QUISER DAR A PERMISSÃO DE ESCRITA E LEITURA PARA TODOS OS USUÁRIOS DO SISTEMA, BASTA EXECUTAR:

sudo chmod a+rw permissoes-estudos.txt

.

O PARÂMETRO a+rw VAI APENAS ADICIONAR A PERMISSÃO DE LEITURA E ESCRITA, ISTO É, CASO O DONO DO ARQUIVO, GRUPO E OUTROS USUÁRIOS JÁ POSSUAM A PERMISSÃO DE EXECUÇÃO, ELA NÃO SERÁ REVOGADA. SE EU QUISER IMPOR A REGRA DE APENAS LEITURA E ESCRITA, REVOGANDO UMA PERMISSÃO DE EXECUÇÃO PRÉ-EXISTENTE, USO O SINAL DE IGUAL:

sudo chmod a=rw permissoes-estudos.txt

.

OUTRA FORMA DE USAR O CHMOD

.

Existe mais de uma forma de usar o chmod e muitos preferem esta segunda, que ensinaremos a seguir. Em vez de digitar letras e operadores matemáticos, como o caso de a+rw, por exemplo, muitos administradores preferem estipular as permissões com códigos numéricos.

.

PARA ISSO, VOCÊ PRECISA PENSAR NA REGRA DE PERMISSÃO COMO SE FOSSE UMA SEQUÊNCIA DE BITS. A PERMISSÃO rwx, POR EXEMPLO, EQUIVALERIA A 111, ENQUANTO QUE RW- SE TRANSFORMARIA EM 110. RESUMINDO: 1 PARA LETRA, 0 PARA HÍFEN. CONVERTER ESSES NÚMEROS DE BASE BINÁRIA PARA DECIMAL, 111 VIRARIA 7, ENQUANTO QUE 110 SE TORNARIA 6.

.

VEJA O EXEMPLO ABAIXO BEM FÁCIL:

.

rwx
111
7

rw-
110
6

.

SEGUINDO ESSA LÓGICA, SE VOCÊ QUISESSE FORNECER AS PERMISSÕES DE LEITURA, ESCRITA E EXECUÇÃO PARA TODOS OS USUÁRIOS DO SISTEMA, PODERIA DIGITAR A SEGUINTE LINHA:

sudo chmod 777 nome-do-arquivo

.

SE PREFERIR MANTER A OPÇÃO DE EXECUTAR O ARQUIVO APENAS PARA O DONO E GRUPO DELE, ENTÃO A LINHA MUDA PARA:

sudo chmod 776 nome-do-arquivo

.

PARA FACILITAR E NÃO TER QUE CONVERTER DE CABEÇA TODOS ESSES NÚMEROS, EXISTE UMA PEQUENA TABELA DE APENAS OITO (8) PERMISSÕES, QUE PODE SER CONSULTADA SEMPRE QUE NECESSÁRIO:

.

Permissão1: 0 ; Permissão2: 1 ; Permissão3: 2 ; Permissão4: 3 ; Permissão5: 4 ; Permissão6: 5 ; Permissão7: 6 ; Permissão8: 7. Onde a:

.

# A permissão 1:

---

Convertida para binário:

000

Tem o decimal:

0

# A permissão 2:

--x

Convertida para binário:

001

Tem o decimal:

1

# A permissão 3:

-W-

Convertida para binário:

010

Tem o decimal:

2

# A permissão 4:

-WX

Convertida para binário:

011

Tem o decimal:

3

# A permissão 5:

r--

Convertida para binário:

100

Tem o decimal:

4

# A permissão 6:

r-x

Convertida para binário:

101

Tem o decimal:

5

# A permissão 7:

rw-

Convertida para binário:

110

Tem o decimal:

6

# A permissão 8:

rwx

Convertida para binário:

111

Tem o decimal:

7

.

CASO NÃO HAJA TODAS AS PERMISSÕES, PODERÁ APARECER INCOMPLETO:

rwxrw_ _ _x, ou seja, neste exemplo:

Dono do arquivo tem permissão de Ler, Escrever e executar (rwx).

Grupo tem permissão de Ler e Escrever (rw_).

Outros tem permissão apenas de executar. (_ _ x).

.

CONCLUSÃO:

.

EXISTEM DOIS MODOS DE DEFINIR UMA PERMISSÃO, ATRAVÉS DO MODO OCTAL E MODO TEXTUAL.

.

TEXTUAL - Usamos letras antes das permissões (chmod é o comando para modificar permissões de arquivos):

$ chmod u+rw, g+w, o-rwx teste.txt

Onde:

U - representa usuário;
G - representa grupo;
O - representa outros.

ugo

.

MODO OCTAL

.

O modo Octal tem a mesma função de definir permissões, só que em números. Exemplo:

$ chmod 620 permissoes-estudos.txt

(comando) (permissão) (arquivo)

.

Tipo de permissão Octal:

4 - Indica permissão de leitura;
2 - Permissão de escrita;
1 - Indica permissão de execução;
0 - Indica sem permissões.

.

Agora é simples, é só somar e ditar as permissões, exemplo:

4 + 2 + 1 = 7 (permissão de rwx)
4 + 2 = 6 (permissão rw)
4 = (permissão r)

.

Exemplo: A permissão 610 indica que o arquivo tem permissão:

6 para dono do arquivo
1 para grupo e
0 para outros ou seja

dono= (rw_) Grupo=(_ _ x) outros=(_ _ _)

.

Percebo que quando é feita a listagem longa "ls -l", o primeiro caractere não é uma permissão.

.

O primeiro caracter "d" indica o tipo do arquivo, neste caso "d" indica que é um diretório.

.

Existem também outras permissões especiais mas não quero saber no momento.

.

Com um pouco de prática talvez um dia eu esteja alterando permissões de arquivos e diretórios de maneira automática. Mas eu garanto que você e eu, nunca mais vamos esquecer do que faz um chmod 777.

.

Posso ler este texto em formato .txt no celular usando o FBreader ou algum outro programa do Android.

.

CREIO QUE ISTO É UM BOM COMEÇO. A GENTE NUNCA PARA DE APRENDER. QUER CONTINUAR?

.

CURIOSIDADE:

.

Quem desenvolve software com Linux para usar no Linux, tem que disponibilizar o código fonte.

Muitos desenvolvedores disponibilizam um código fonte sem muita informação, sem instrução detalhada de como compilar. Algo tão complexo e trabalhoso que, para dele se obter o software e usa-lo só pagando a um outro profissional especializado.

A complexidade do código fonte é uma barreira criada com propósito.

Um deles é este.

Nega o software a grupos, empresas e o usuário comuns por causa da sua extrema complexidade de compilação.

Pode ser que isto já seja a regra.

Tente instalar alguns programas usando o código fonte e tire sua própria conclusão.

.

Ganhar dinheiro vendendo serviços e criando programas com software Linux é bom.

.

Criar barreiras para dificultar o uso do código fonte não é bom.

.

Existem pessoas que creditam que melhores softwares podem resultar de um modelo
aberto de desenvolvimento do que de modelos proprietários.

Teoricamente, qualquer empresa criando um software para uso próprio pode economizar dinheiro adicionando suas contribuições as dos outros a fim de obter um produto final muito melhor para ela mesma.

Quem quer ganhar dinheiro com a venda de software precisa ser extremanente criativo atualmente.

A pessoa ou empresa pode vender o software que cria usando Linux, mas tem que incluir um software GPL, o código-
fonte dele que deve ser passado para frente.

Outros podem recompilar esse produto, e assim usar o software e pode até revender sem custos.

.

ENTÃO PARA GANHAR DINHEIRO GRUPOS, PESSOAS E EMPRESAS PODEM:

Vender seus produtos com base em uma assinatura. Por uma determinada quantia de dinheiro por ano, você obtém o código binário para rodar o Linux (assim você não tem que compilar por conta própria), suporte garantido, ferramentas para monitoramento de hardware e software no seu computador, acesso à base de conhecimento da empresa e outros recursos.

.

A maioria dos sistemas operacionais oferecidos gratuitamente, inclui grande parte do mesmo software que outros oferecem com base em uma assinatura. Também estão disponíveis em forma binária, mas não há garantias associadas com o software ou futuras atualizações dele.

.

Dizem que pequeno escritório ou um usuário pessoal pode arriscar usar sistemas operacionais Linux excelentes e gratúitos, mas uma grande empresa que está executando aplicações de missão crítica provavelmente acabará investindo algum dinheiro em produtos com base em uma assinatura.

.

Para lucrar, gerar capital, ganhar dinheiro empresas que trabalham com Linux oferecem:

.

1
Treinamento e certificação

2
Recompensas de software

uma maneira fascinante de as empresas de software de código-fonte aberto fazerem dinheiro. Digamos que uma empresa/grupo/usuário está usando o pacote de software ABZ e precisa de um novo recurso imediatamente. Ao pagar uma recompensa de software para o projeto em si, ou para outros desenvolvedores, a empresa/grupo/usuário pode ter as melhorias que precisa deslocadas para o início da fila.

O software que empresa/grupo/usuário paga permanecerá coberto pela sua licença de código-fonte aberto, mas a empresa/grupo/usuário terá os recursos de que precisa provavelmente mais barato que o custo da construção do projeto a partir zero.

3
Doações

Muitos projetos de código-fonte aberto aceitam doações de pessoas físicas ou empresas de desenvolvimento de código-fonte aberto que usam código a partir de seus projetos. Surpreendentemente, muitos projetos de código-fonte aberto suportam um ou dois desenvolvedores e funcionam exclusivamente com base em doações. Estojos, canecas e camisetas - Muitos projetos de código-fonte aberto têm lojas online onde podemos comprar CDs e uma variedade de canecas, camisetas, mouse pads e outros souvenires. Se tu amas um projeto de verdade, compre uma camiseta e uma caneca. Formas mais criativas estão a ser inventadas diariamente para apoiar quem esta a produzir software de código-fonte aberto.

4
Retorno obtido

Pessoas/Grupos se tornam colaboradoras e mantenedoras de software de código-fonte aberto porque precisavam ou queriam o software. As contribuições que elas fazem gratuitamente valem a pena pelo retorno que elas obtêm de outras pessoas que fazem o mesmo.

.

Não esqueça que para algumas pessoas, o Linux não tem como objetivo lucro. O objetivo do Linux é garantir a tua liberdade. O trabalho colaborativo produz ótimos softwares disponíveis a todos em toda parte.

.

APRENDENDO SHELL SCRIPT - CONTINUE, BREAK E EXIT

.

A instrução continue é usada para retomar a iteração seguinte do loop FOR, WHILE ou UNTIL.

Use a instrução break para sair de dentro de um loop FOR, WHILE ou UNTIL, isto é, pare a execução do loop.

O exit é usado para definir o status da execução do programa, se o valor de $? for 0 então tudo ocorreu naturalmente, se não houve erro.

Você pode por o exit 0 no final do seu script para sair sem problemas, e um echo $? para saber qual foi o código de retorno na execução do programa.

No exemplo abaixo só irá imprimir 8 e 9, perceba o uso continue , break e exit.

.

#!/bin/bash

for i in $(seq 1 10);
do
if [[ "$i" "9" ]]; then
break;
fi

echo $i;

done

exit 0;

# Fim do arquivo: i8-continue-break-exit.sh

.

EXECUTO O EXEMPLO ABAIXO:

.

#!/bin/bash

_INPUT_STRING="Olá"
while :
do
echo "Você deseja ficar aqui?"
read _INPUT_STRING

if [[ $_INPUT_STRING = 'tchau' ]]; then
continue
else
echo "Você ainda deseja ficar aqui"
fi

done

# Fim do arquivo: 0n4-read-continue.sh

.

OBS:
Se for o caso, SAIA COM: Ctrl +C

.

Execute o script abaixo:

#!/bin/bash

_INPUT_STRING="Olá"
while :
do
echo "Você deseja ficar aqui?"
read _INPUT_STRING

if [[ $_INPUT_STRING = 'tchau' ]]; then
continue
else
break
fi

done

# Fim do arquivo: 1n5-read-continue.sh

.

OBS:
Se for o caso, SAIA COM: Ctrl +C

.

Executa o script abaixo:

#!/bin/bash

_INPUT_STRING="Olá"
while :
do
echo "Você deseja ficar aqui?"
read _INPUT_STRING

if [[ $_INPUT_STRING != 'tchau' ]]; then
continue
else
break
fi

done

# Fim do arquivo: 1n5-continue-break.sh

.

Resultado:

~ $sh 0n4-read-continue.sh
Você deseja ficar aqui?
Hmhm
Você deseja ficar aqui?
Sim
Você deseja ficar aqui?
Não sei
Você deseja ficar aqui?
Pare!
Você deseja ficar aqui?
tchau
~ $

.

Executa o script abaixo:

#!/bin/bash

_INPUT_STRING="Olá"
while :
do
echo "Você deseja ficar aqui?"
read _INPUT_STRING

if [[ $_INPUT_STRING != 'tchau' ]]; then
continue
else
exit 0
fi

done

# Fim do arquivo: 2n-continue-exit.sh

.

COMANDO EVAL

O comando eval é perigoso evito usar ele. Aqui um exemplo de uso do eval. Quem desenvolve software é que sabe usar o eval.

.

Execute os comandos abaixo no terminal:

A='ls'

B=A

echo $B

echo '$'$B

eval echo '$'$B

.

O COMANDO EXEC

O comando exec substitui o processo shell atual pelo comando especificado. O exec cria a segunda parte da junção, o que não seria possível usando o pipe |.

.

APRENDENDO SHELL SCRIPT - MATEMÁTICA EM SHELL SCRIPT

.

Expressões com parênteses são efetuadas em primeiro lugar.

.

\*, % e / são efetuados antes de + e -

.

Todo o resto é efetuado da ESQUERDA para a DIREITA.

.

No caso da multiplicação utiza-se \*, pois o asterisco é um curinga do Linux.

.

FORMAS DE CÁLCULO:

.

echo $((2+2))

echo $((2+2*5))

echo $((2+2*5/2))

a=2+2 ; echo $a

declare -i a

a=2+2 ; echo $a

a=2+2 ; echo $a

echo "5/2" | bc

echo "scale=2;5/2" | bc

bc

2+2

scale=2;5/2

quit

expr 2 + 2

bc << calc.txt

dc calc.txt

echo "obase=2;2" | bc

echo "obase=2;54" | bc

expr lenght "Linux"

.

GNU/LINUX SHELL SCRIPT – EXPRESSÕES REGULARES E PROGRAMAS GRÁFICOS

.

APRENDENDO SHELL SCRIPT

criar programas gráficos e interativos com shell script

.

Podemos criar programas interativos pelo terminal e programas gráficos.

Tem muitas ferramentas de comandos.

Algumas já vem pré-instaladas nas Distros Linux.

Vamos tentar entender duas. Dialog e Yad.

.

Primeiro o Dialog mas saiba que o Yad - Para programas gráficos é a evolução do Zenity. Tem mais opções. O autor do Yad é o ucraniano Victor Ananjevsky.

.

Dialog - Para programas cli (modo texto = cli) mas que cria uma interatividade com o usuário. Dialog cria widgets, menus, avisos, barras de progresso, entre outras coisas que colocamos em Shell Script e aparecem no terminal ao executar o script. Pode as vezes, usar o mouse para clicar nas janelas do Dialog. Existem várias caixas de Dialog que podemos usar. Essas caixas são utilizadas para compor interfaces amigáveis com o usuário, para que ele responda perguntas ou escolha opções.

.

Agora sabemos que o Dialog é um executável e recebe todos os parâmetros via linha de comando, então ele geralmente é usado dentro de um Shell Script. Serve para fazer programas interativos, que o usuário precisa operar durante sua execução. Tarefas comuns feitas com o Dialog são escolher uma opção em um menu, escolher um arquivo, uma data, e digitar frases ou senhas.

.

Instale o Dialog pela central de programas da sua Distro, ou usando o gerenciador de pacotes da sua Distribuição. Verifique se tem o Yad instalado também.

.

OBS:

O kdialog é bem interessante também.

.

Para criar uma tela simples execute os comandos abaixo no terminal:

dialog --msgbox 'É a tua primeira tela' 5 40

dialog --msgbox 'Vamos usar Dialog?' 5 25

.

OBS:

dialog (É o comando.)

--msgbox (É o tipo de diálogo/widget.)

'Vamos usar Dialog?' (É a mensagem.)

5 = Altura (Linhas)

25 = Largura (Colunas)

.

Digito o texto abaixo no terminal e eperte a tecla Enter:

dialog --msgbox 'Shell Script Primeiro Programa com Dialog' 5 50

.

Aperte: Enter

Digito: clear

.

Então o comando dialog utiliza parâmetros de linha de comando para determinar que tipo de widget de janela deve ser criada.

Um widget é um tipo de elemento de janela.

.

ABAIXO ALGUNS DOS TIPOS DE WIDGETS SUPORTADOS PELO DIALOG:

.

1) gauge (Mostra uma barra de progresso)

2) calendar (Vê um calendário e escolhe uma data)

3) checklist (Vê uma lista de opções e escolhe várias)

4) infobox (Mostra uma mensagem sem esperar por uma resposta)

5) inputmenu (Fornece um menu editável)

6) menu (Mostra uma lista de seleções para escolha)

7) msgbox (Mostra uma mensagem e pede que o usuário pressione um botão OK)

8) infobox (Vê uma mensagem sem botões)

9) passwordbox (Mostra uma caixa de texto simples que esconde o texto digitado)

10) radiolist (Fornece um grupo de itens de menu onde apenas um item pode ser selecionado)

11) tailbox (Mostra o texto de um arquivo em uma janela com rolagem usando o comando tail)

12) textbox (Mostra o conteúdo de um arquivo em uma janela com rolagem)

13) timebox (Fornece uma janela para selecionarmos uma hora, minuto e segundo)

14) yesno (Fornece uma mensagem simples com botões Yes e No.)

.

Para especificarmos um widget na linha de comandos, usamos a sintaxe:

dialog --widget parâmetros

.

YAD - CRIAR PROGRAMAS GRÁFICOS E INTERATIVOS COM SHELL SCRIPT

.

Yad - Para programas gráficos. Evolução de um programa chamado Zenity. Tem mais opções. O autor do Yad é o ucraniano Victor Ananjevsky. Instale o Yad. Após instalar, pode testar com o comando abaixo:

yad

.

A SINTAXE BÁSICA É:

yad [--tipo-dialogo] [--options]

.

TIPOS DE DIÁLOGO:

.

1) --calendar (calendário)

2) --color (paleta de cores)

3) --entry (entrada de dados)

4) --icons (mostra uma caixa com ícones de atalho para aplicações)

5) --file (diálogo para selecionar arquivos)

6) --font (diálogo para seleção de fontes)

7) --form (formulários)

8) --list (diálogo com ítens em lista)

9) --notification (mostra um ícone da barra de notificação do sistema)

10) --progress (diálogo de progresso)

11) --text-info (mostra o conteúdo de um arquivo texto)

12) --scale (diálogo para seleção de valor, usando uma escala)

.

Para cada um dos exemplos podemos colocar o script e depois algumas imagens da sua execução.

--calendar:

Mostra um calendário permitindo selecionar a data e envia o valor para a saída padrão

.

EXEMPLO:

.

#!/bin/bash

# usando o yad com --calendar
# mostra um calendário iniciando no dia 20/03/2018
# guarda o valor selecionar na variável $DATA

DATA=$(\
yad --calendar \
--day=20 \
--month=3 \
--year=2018 \
--date-format=%d\/%m\/%Y \
--title=Calendario \
--center \ # disposição do diálogo na tela
)

# mostra um diálogo informando a $DATA selecionada
yad --title="AVISO" \ --text="Você selecionou a data $DATA"
#.EOF

# Fim do 09c-yad-script.sh

.

Salve com o nome de "09c-yad-script.sh", dê permissão de execução:

chmod a+x 09c-yad-script.sh

.

Execute:

sh 09c-yad-script.sh

.

EXEMPLO COM YAD --COLOR

yad --color:

Diálogo de seleção de cores, permite selecionar uma determinada cor usando a paleta de cores, editando diretamente por código, etc. Bom para saber o código de uma cor específica.

.

EXEMPLO A SER EXECUTADO:

!/bin/bash

# uso do yad - com color
# permite selecionar determinada cor numa paleta de cores
# e envia o valor para a saída padrão, no caso armazenei na variável $COR

COR=$(\
yad --color \
--init-color="#FFFFFF" \ #cor que inicialmente fica selecionada na paleta de cores.
--palette \
)

yad --title="YAD COM COLOR" \
--text="Você selecionou a cor $COR"
#.EOF

# Fim do 4j-script-color.sh

.

Salve com o nome de "4j-script-color.sh", dê permissão de execução:

chmod a+x 4j-script-color.sh

.

Execute:

bash 4j-script-color.sh

-----------------------

SITE PARA APRENDER COMANDOS:

http://explainshell.com/

-----------------------

Aprendendo Shell Script - GNU/Linux ShellScript - Expressões Regulares (leio, releio e leio de novo)

-----------------------

LINUX SHELL SCRIPT, ENTENDENDO EXPRESSÕES REGULARES

-----------------------

Para trabalhar com as expressões regulares, usarei os meta-caracteres, ou seja, caracteres que representam um conjunto de outros caracteres ou que estipulem certas regras para a busca. E para que tudo fique mais poderoso, saiba que é possível combinar texto comum com meta-caracteres. Portanto, vamos ver o que faz cada um deles e, em seguida, como usá-los na prática.

-----------------------

METACARACTERES
1) ^ (circunflexo): representa o começo da linha
2) $ (cifrão): representa o fim da linha
3) . (ponto): casa com um caractere qualquer
4) .* (curinga): casa qualquer coisa, é tudo ou nada
5) a+ (mais): casa a letra "a" uma ou mais vezes
6) a* (asterisco): casa a letra "a" zero ou mais vezes
7) a? (opcional): casa a letra "a" zero ou mais vezes
8) a{2} (chaves): casa a letra "a" duas vezes
9) a{2,} (chaves): casa a letra "a" no mínimo duas vezes
10) [abc] (lista): casa as letras "a" ou "b" ou "c"
11) [^abc] (lista): casa qualquer caractere, exceto "a", "b", e "c"
12) (isso|aquilo) (Ou): casa as strings "isso" ou "aquilo"

-----------------------

Compreendendo cada um destes metacaracteres acima, pode juntar eles. Os "metacaracteres" juntos formarão uma "Expressão Regular" que vai resolver algum problema que apareça pelo caminho. E assim, é que pegamos os metacaracteres transformamos em expressões regulares e colocamos em shell scripts e quem tá de fora quando vê aquela coisa estupenda, tem a certeza de que aquilo pode até fazer alguma coisa, porém é absolutamente uma completa loucura (o que não é verdade). Dá uma olhada nesta serpente abaixo e me diga o que pensa/sente:

egrep "\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b" arquivo.txt

-----------------------

A EXPRESSÃO REGULAR acima, é para casar qualquer e-mail dentro de um arquivo.

-----------------------

LEIO O TEXTO ABAIXO QUE EXPLICA MAIS UM POUCO SOBRE META CARACTERES:

-----------------------
LISTA DE META-CARACTERES:
1) . (Qualquer letra)
2) ^ (início da linha)
3) $ (final da linha)
4) [xyz] (Qualquer das letras dentro dos colchetes)
5) [^xyz] (Qualquer letra fora as dentro dos colchetes)
6) [t-z] (Qualquer das letras entre t e z)
7) z* (Letra z zero ou mais vezes)
8) z+ (Letra z uma ou mais vezes)
9) ?{0,1} (Pode aparecer ou não (opcional)
10) *{0,} (Pode aparecer em qualquer quantidade)
11) +{1,} (Deve aparecer no mínimo uma vez)
12) a{2} (Casa a letra 'a' duas vezes)
13) a{2,4} (Casa a letra 'a' de duas a quatro vezes)
14) a{2,} (Casa a letra 'a' no mínimo duas vezes)
15) .* (Casa qualquer coisa, é o tudo e o nada)
16) ^ (início da linha)
17) $ (final da linha)
18) [abc] (casa com os caracteres a, b e c)
19) [a-c] (casa com os caracteres a, b e c)
20) [^abd] (não casa com os caracteres a, b e d)
21) (um|dois) (casa com as palavras um e dois)

-----------------------

LISTA DE META-CARACTERES(Repetições)
1) a{2} (casa com a letra “a” duas vezes)
2) a{2,5} (casa com a letra “a” duas a cinco vezes)
3) a{2,} (casa com a letra “a” duas vezes ou mais)
4) a? (casa com “a” letra a zero vezes ou uma)
5) a* (casa com a letra “a” zeros vezes ou mais)
6) a+ (casa com a letra “a” uma vez ou mais)

-----------------------

LISTA DE META-CARACTERES(Curingas)
1) . (casa com qualquer caracter uma vez)
2) .* (casa com qualquer caracter várias vezes)
3) (esse|aquele) (casa as palavras 'esse' ou 'aquele')

-----------------------

Exemplos

1) Procura a palavra seu-usuario-whoami (qual é seu usuário?) no arquivo /etc/passwd

grep seu-usuario-whoami /etc/passwd

2) Procura todas as linhas começadas pela letra u no arquivo /etc/passwd:

grep '^u' /etc/passwd

3) Procura todas as linhas terminadas pela palavra false no arquivo /etc/passwd:

grep 'false$' /etc/passwd

4) Procura todas as linhas começadas pelas vogais no arquivo /etc/passwd:

grep '^[aeiou]' /etc/passwd

5) Procura todas as linhas começadas por qualquer caracter e segundo caracter seja qualquer vogal no arquivo /etc/passwd:

grep '^.[aeiou]' /etc/passwd

6) Procura todas as linhas que contenham uma sequência de 4 números consecutivos:

grep '[0-9][0-9][0-9][0-9]' /etc/passwd

7) Comando para encontrar linhas em branco:

grep '^$' /etc/passwd

8) Encontrar e contar linhas em branco:

grep '^$' /etc/passwd | wc -l

9) Encontrar mesmo nome, porém com letra inicial minúscula e maiúscula:

grep '[Mm]arcos' /etc/passwd

10) Encontrar 27 sequência^de 27 caracteres:

egrep '^.{27}$' passwd

-----------------------

(Acima foi usado o egrep e não o grep. Porque as chaves fazem parte de um conjunto avançado de Expressões Regulares (“extended”), então o egrep lida melhor com elas. Se fosse para usar o grep normal, teria que “escapar” as chaves.)

-----------------------

grep '^.\{27\}$' /etc/passwd

11) Para procurar por linhas que tenham de 20 a 40 caracteres:

egrep '^.{20,40}$' /etc/passwd

12) Para obter as linhas que possuem 40 caracteres ou mais:

egrep '^.{40,}$' /etc/passwd

13) Econtrar números com 3 dígitos (de 0 a 9) ou mais:

egrep '[0123456789]{3,}' /etc/passwd

14) Econtrar linhas que começam com ‘vogal minúscula’ e terminam com a palavra ‘bash’, usa−se o curinga “.*” para significar “qualquer coisa”(não confunda com “qualquer caracterer” somente “.”):

egrep '^[aeiou].*bash$' /etc/passwd

-----------------------

Script com validações de Tel,E-mail,CEP,IP,Data…

#!/bin/bash

# Script com validações de Tel,E-mail,CEP,IP,Data...

# VALIDAR TELEFONE formato: (99)9999-9999 #

echo 'Informe o número de Telefone.Formato: (99)9999-9999';
read TELEFONE
echo $TELEFONE | egrep '^[(][0-9]{2}[)][0-9]{4}+-[0-9]{4}$' && echo -e '\033[01;32m Número válido! \033[0m' || echo -e '\033[01;31m NÃO é válido esse número.\033[0m'

############## VALIDAR IP #############

echo 'Informe o número de IP';
read IP
echo $IP | egrep '^[0-9]{1,3}[.]{1}[0-9]{1,3}[.]{1}[0-9]{1,3}[.]{1}[0-9]{1,3}$' && echo -e '\033[01;32m IP válido! \033[0m' || echo -e '\033[01;31m NÃO é válido esse IP.\033[0m'

############## VALIDAR CEP ############

echo 'Informe o CEP';
read CEP
echo $CEP | egrep '^[0-9]{5}[-][0-9]{3}$' && echo -e '\033[01;32m Número válido! \033[0m' || echo -e '\033[01;31m NÃO é válido esse número.\033[0m'

#### VALIDAR DATA formato dd/mm/aaaa ###

echo 'Informe a Data.Formato dd/mm/aaaa';
read DATA
echo $DATA | egrep '^[0-3]{1}[0-9]{1}[/][0-1]{1}[0-9]{1}[/][0-9]{4}$' && echo -e '\033[01;32m Data válida! \033[0m' || echo -e '\033[01;31m NÃO é válida essa Data.\033[0m'

############## VALIDAR E-MAIL #########

echo 'Informe o E-mail';
read EMAIL
echo $EMAIL | egrep '^([a-zA-Z0-9_-.])+@[0-9a-zA-Z.-]+\.[a-z]{2,3}$' && echo -e '\033[01;32m E-mail válido! \033[0m' || echo -e '\033[01;31m NÃO é válido esse E-mail.\033[0m'

# Fonte: http://terminalroot.com.br/2015/01/shell-script-validandotele.html

################## FIM ################

.

LINUX EXPRESSOES REGULARES

-------------------------

Expressões Regulares: o que são e para que servem?

Muitas vezes precisamos buscar por determinadas palavras, nomes ou até mesmo trechos de código em um arquivo e, a partir dessa procura, realizar algumas alterações. As expressões regulares surgem como uma maneira de especificar um padrão existente entre essas palavras, para que não seja necessário procurar cada uma separadamente.

-------------------------

Metacaracteres para toda ocasião

Para trabalhar com as expressões regulares, usaremos os metacaracteres, ou seja, caracteres que representam um conjunto de outros caracteres ou que estipulem certas regras para a busca. E para que tudo fique mais poderoso, saiba que é possível combinar texto comum com metacaracteres.

-------------------------

Para estipular que nossa busca deve ser realizada no início de uma linha. Para isso, usamos o caractere ^. Caso a busca deva casar com uma expressão no fim da linha, usamos o cifrão ($).

-------------------------

Existem os caracteres que trabalham com o texto em si. Podemos, por exemplo, estabelecer uma lista de letras a serem buscadas, colocando-as entre colchetes: [asd], por exemplo, busca pelas letras "a" ou "s" ou "d". Um intervalo pode ser definido com a ajuda do hífen: [f-h] busca pelas letras "f", "g" ou "h".

-------------------------

O acento circunflexo dentro dos colchetes muda de função e passa a representar negação: [^vxz] busca por qualquer caractere, com exceção de "v", "x" ou "z". E se a procura for por palavras, podemos colocá-las entre parênteses e separadas pela barra vertical, também chamada de pipe (cano, em inglês): (Escritor|Livros), por exemplo, busca pelas palavras "Escritor" ou "Livros".

-------------------------

para especificar uma repetição, para procurar por um erro de digitação muito comum: duas letras "a" seguidas. Para isso, usaríamos o número entre colchetes, logo depois da letra: a{2}. Se a repetição fosse de duas a cinco vezes, a expressão ficaria a{2,5}. Para estipular que a repetição da letra "a" deve ocorrer pelo menos duas vezes, use a{ 2,}. Não se esqueça de trocar a letra e o número de acordo com as suas necessidades.

-------------------------

Ainda sobre a quantidade com que uma letra ou expressão pode ocorrer durante a busca, existem os metacaracteres ?, * e +, que simbolizam, respectivamente, zero ou uma vez, zero ou mais vezes, uma ou mais vezes. Exemplos: a?, a* ou a+.

-------------------------

Existem caracteres curingas. O ponto final, por exemplo, casa com um caractere qualquer, enquanto o asterisco casa com qualquer coisa. A partir disso, é possível combinar esses operadores de diversas formas e com a extensão que você precisar. Não há limites de número de caracteres para a criatividade ou necessidade.

-------------------------

GREP: UTILITÁRIO DE BUSCA DE REGEX

A maioria (se não for todas) das distribuições Linux incluem o grep, que é um buscador de regex.

A sintaxe é bem simples: grep 'padrao' entrada. Se a entrada não for especificada, usa-se a entrada padrão (stdin). Você também pode usar alguns parâmetros, como o “-v”, que mostra o inverso do padrão (ou seja, tudo aquilo que não bate com o padrão passado), e o “-i”, que torna a busca insensível à casa (não diferencia maiúsculas de minúsculas).

Note que usei aspas simples (apóstrofos) delimitando o padrão. Nem sempre elas são necessárias, mas em alguns casos, um metacaracter pode acabar sendo traduzido pelo shell, causando resultados errôneos, e as aspas simples evitam isto. Não entendeu? Relaxa, tá explicado aí embaixo…

-------------------------

Entenda que há caracteres e metacaracteres numa regex. Os caracteres são literais, ou seja, as letras (a-z, A-Z) e números (0-9), além de alguns símbolos e acentos. E os metacaracteres são caracteres que têm um significado especial, como o “^”, que indica começo de linha, e o “$”, que representa final de linha. Se você quer que um símbolo seja tratado literalmente, isto é, sem que seja tratado como um metacaracter, você precisa escapá-lo, colocando uma barra invertida ( \ ) antes do dito cujo. Um exemplo de uso disto é para o ponto ( . ), que é um metacaracter que representa qualquer caracter, e você pode querer tratá-lo como sendo apenas um ponto mesmo.

-------------------------

Aí vai de novo uma listinha com alguns dos metacaracteres mais usados:

1) ^
começa com

2) $
término de linha

3) .
qualquer caracter

4) []
relação de valores possíveis para um caracter. Você pode especificar uma lista ( [abcde] ), uma faixa ( [0-9] ), ou várias faixas ( [a-zA-Z0-9] ).

5) \{\}
especifica quantas vezes o caracter pode se repetir. Por exemplo: “{2}” (duas vezes), “{2,5}” (duas a cinco vezes), “{2,}” (duas ou mais vezes).

6) |
operador lógico ou.

7) .*
operador lógico e.

-------------------------

Olhe esta “cobra”, por exemplo: [0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}-[0-9]\{2\}. Com o que ela casa? Com um número de CPF que esteja formatado com pontos e traço.

-------------------------

E onde eu uso este tipo de coisa?

Se você só navega na internet e papeia pelo Whatsapp ou algo parecido, aprender este tipo de coisa pode parecer desnecessário. Mas se costuma ler os logs do sistema, ou se trabalha com arquivos texto, ou se é um admin de sistemas Linux, ou se alguma vez se deparar com a necessidade de achar uma agulha no meio do palheiro, você vai usar regex.

-------------------------

METACARACTERES MAIS USADOS:

1) * ^ : começa com

2) * $ : término de linha

3) * . : qualquer caracter

4) * [] : relação de valores possíveis para um caracter. Você pode especificar uma lista ( [abcde] ), uma faixa ( [0-9] ), ou várias faixas ( [a-zA-Z0-9] ).

5) * {} : especifica quantas vezes o caracter pode se repetir. Por exemplo: “{2}” (duas vezes), “{2,5}” (duas a cinco vezes), “{2,}” (duas ou mais vezes).

6) * | : operador lógico ou

7) * .* : operador lógico e

-------------------------

Existe um outro utilitário, o egrep, que é uma versão extendida do grep. A sintaxe de uso é a mesma. Uma coisa legal dele é dispensar o escape para certos metacaracteres, como o “{}”, o que tornaria esta mesma expressão um pouquinho mais curta: [0-9]{3}.[0-9]{3}.[0-9]{3}-[0-9]{2}. Note que o ponto ainda precisou ser escapado, pois a intenção é tratá-lo apenas como ponto mesmo

-------------------------

.

REGRAS DO CÓDIGO LIMPO SHELL SCRIPT

.

ANOTAÇÕES LINUX, SHELLSCRIPT, TERMINAL LINUX BASH, VIM
REGRAS DO CÓDIGO LIMPO

.

Acho que talvez o cabeçalho para o shell script ficar mais claro é assim:

.

#!/bin/bash

#####################################
# Nome do Script:
#
# Descrição:
#
#
#
#
# Autor:
#
# Email:
#
#
#####################################
# Sobre este script:
#
#
#
# Exemplo:
#
#
#
# Histórico de modificações:
#
#
#
# Comentário:
#
#
#
# Regras do código limpo:
#
# 1) Colocar apenas um comando por linha
#
# 2) Alinhar verticalmente comandos de um mesmo bloco
#
# 3) Deslocar o alinhamento a direita a cada novo bloco
#
# 4) Usar linhas em branco para separar trechos
#
# 5) Não ultrapassar o limite de 80 colunas por linha
#
#
# Comentários especiais:
#
#
# TODO - indica uma tarefa a ser feita
#
#
# FIXME - indica um bug conhecido que precisa ser arrumado
#
#
# XXX - Notícia, chama a atenção
#
#
#####################################

kdialog \
--title "Bem vindo(a)!!" \
--msgbox "Aprendendo Shell Script" \
10 40

kdialog \
--title "Listar diretórios?" \
--yesno "Para listar diretórios e arquivos: ls -R" \

echo

ls -R

echo

# Fim do script

################ FIM ################

 

Comentários, sugestões e dicas são muito bem-vindas.

Até Breve!

🙂


Anotações do Guia Foca

.

O Guia Foca de Gleydson Mazioli da Silva foi atualizado pela última vez a mais ou menos uns oito anos atrás e apesar de bastante coisa ter mudado ele é extremamente valioso quando se trata de definições, comandos, bash, shell script e vários outros assuntos.

.

Na minha opinião o material é imbatível. A gente que gosta de Linux, pode passear pelo Guia Foca como em um parque de diversões pulando entre assuntos pois o índice de conteúdo é muito bem elaborado.

.

Este artigo tem partes do Guia Foca que me chamaram a atenção um dia destes. Este artigo também tem uns pedaços de outros lugares. Outras partes deste artigo, eu reformulei, adaptei e até mesmo escrevi e reescrevi de acordo com o que aprendi praticando, lendo e pesquisando.

Não é perfeito, longe disto, mas me é útil.

Escrevi/Montei/Adaptei este artigo para o meu uso pessoal e executo o que aprendi aqui, por minha conta e risco. Este artigo é bem útil para mim. Espero que ele seja útil também para você. Perdoe erros de digitação e se alguma definição estiver inadequada.

Revisei o texto algumas vezes mas, nunca é o suficiente. O segredo é a prática. Neste mundo atual onde se pode fazer isto com facilidade? Um dos poucos lugares que conheço é no mundo Linux. Isto não é apenas estudo com objetivo profissional para muitas pessoas é uma tranquila forma de lazer, para outros é um modo de se por a prova e descobrir até onde você consegue chegar. Todo processo de aprendizado é satisfatório quando você mesmo consegue perceber efetivamente o resultado.

.

COMANDOS

.

Comandos são ordens que passamos ao sistema operacional para executar uma determinada tarefa.

Cada comando tem uma função específica, devemos saber a função de cada comando e escolher o mais adequado para fazer o que desejamos, por exemplo:

ls - Mostra arquivos de diretórios

cd - Para mudar de diretório

É sempre usado um espaço depois do comando para separá-lo de uma opção ou parâmetro que será passado para o processamento. Um comando pode receber opções e parâmetros:

OPÇÕES
As opções são usadas para controlar como o comando será executado, por exemplo, para fazer uma listagem mostrando o dono, grupo, tamanho dos arquivos você deve digitar ls -l.

Opções podem ser passadas ao comando através de um:

"-" ou "--":

-

Opção identificada por uma letra. Podem ser usadas mais de uma opção com um único hífen. O comando ls -l -a é a mesma coisa de ls -la

--

Opção identificada por um nome. Também chamado de opção extensa. O comando ls --all é equivalente a ls -a.

Pode ser usado tanto "-" como "--", mas há casos em que somente "-" ou "--" esta disponível.

PARÂMETROS
Um parâmetro identifica o caminho, origem, destino, entrada padrão ou saída padrão que será passada ao comando.

Se você digitar: ls /usr/share/doc/copyright, /usr/share/doc/copyright será o parâmetro passado ao comando ls, neste caso queremos que ele liste os arquivos do diretório /usr/share/doc/copyright.

É normal errar o nome de comandos, mas não se preocupe, quando isto acontecer o sistema mostrará a mensagem command not found (comando não encontrado) e voltará ao aviso de comando. As mensagens de erro não fazem nenhum mal ao seu sistema, somente dizem que algo deu errado para que você possa corrigir e entender o que aconteceu. No GNU/Linux, você tem a possibilidade de criar comandos personalizados usando outros comandos mais simples (isto será visto mais adiante). Os comandos se encaixam em duas categorias: Comandos Internos e Comandos Externos.

Por exemplo: "ls -la /usr/share/doc", ls é o comando, -la é a opção passada ao comando, e /usr/share/doc é o diretório passado como parâmetro ao comando ls.

.

COMANDOS INTERNOS

São comandos que estão localizados dentro do interpretador de comandos (normalmente o Bash) e não no disco. Eles são carregados na memória RAM do computador junto com o interpretador de comandos.

Quando executa um comando, o interpretador de comandos verifica primeiro se ele é um Comando Interno caso não seja é verificado se é um Comando Externo.

Exemplos de comandos internos são: cd, exit, echo, bg, fg, source, help

.

COMANDOS EXTERNOS

São comandos que estão localizados no disco. Os comandos são procurados no disco usando o ordem do PATH e executados assim que encontrados.

.

ESTRUTURA BÁSICA DE DIRETÓRIOS DO SISTEMA LINUX

.

O sistema GNU/Linux possui a seguinte estrutura básica de diretórios organizados segundo o FHS (Filesystem Hierarchy Standard):

O DIRETÓRIO RAIZ (/)

Diretório do usuário root. Todos os arquivos e diretórios do sistema Linux instalado no computador partem de uma única origem: o diretório raiz. Mesmo que estejam armazenados em outros dispositivos físicos, é a partir do diretório raiz – representado pela barra (/) – que você poderá acessá-los. O único usuário do sistema capaz de criar ou mover arquivos do diretório raiz é o root, ou seja, o usuário-administrador. Isso evita que usuários comuns cometam erros e acabem comprometendo a integridade de todo o sistema de arquivos.

BINÁRIOS EXECUTÁVEIS: /BIN

No diretório /bin estão localizados os binários executáveis que podem ser utilizados por qualquer usuário do sistema. São comandos essenciais, usados para trabalhar com arquivos, textos e alguns recursos básicos de rede, como o cp, mv, ping e grep.

BINÁRIOS DO SISTEMA: /SBIN

Diretório de programas usados pelo superusuário (root) para administração e controle do funcionamento do sistema. Assim como o /bin, este diretório armazena executáveis, mas com um diferencial: são aplicativos utilizados por administradores de sistema com o propósito de realizar funções de manutenção e outras tarefas semelhantes. Entre os comandos disponíveis estão o ifconfig, para configurar e controlar interfaces de rede TCP/IP, e o fdisk, que permite particionar discos rígidos, por exemplo.

PROGRAMAS DIVERSOS: /USR

Contém maior parte de seus programas. Normalmente acessível somente como leitura. Se você não encontrar um comando no diretório /bin ou /sbin, ele certamente está aqui. O /usr reúne executáveis, bibliotecas e até documentação de softwares usados pelos usuários ou administradores do sistema. Além disso, sempre que você compilar e instalar um programa a partir do código-fonte, ele será instalado nesse diretório.

CONFIGURAÇÕES DO SISTEMA: /ETC

Arquivos de configuração de seu computador local. No diretório /etc ficam arquivos de configuração que podem ser usados por todos os softwares, além de scripts especiais para iniciar ou interromper módulos e programas diversos. É no /etc que se encontra, por exemplo, o arquivo resolv.conf, com uma relação de servidores DNS que podem ser acessados pelo sistema, com os parâmetros necessários para isso.

BIBLIOTECAS: /LIB

Bibliotecas compartilhadas pelos programas do sistema e módulos do kernel. Neste ponto do sistema de arquivos ficam localizadas as bibliotecas usadas pelos comandos presentes em /bin e /sbin. Normalmente, os arquivos de bibliotecas começam com os prefixos ld ou lib e possuem "extensão" so.

OPCIONAIS: /OPT

Aplicativos adicionais, que não são essenciais para o sistema, terminam neste diretório.

AQUIVOS PESSOAIS: /HOME

Diretórios contendo os arquivos dos usuários. No diretório /home ficam os arquivos pessoais, como documentos e fotografias, sempre dentro de pastas que levam o nome de cada usuário. Vale notar que o diretório pessoal do administrador não fica no mesmo local, e sim em /root.

INICIALIZAÇÃO: /BOOT

Contém arquivos necessários para a inicialização do sistema, ou seja, o processo de boot do Linux, quando o computador é ligado, ficam em /boot.

VOLUMES E MÍDIAS: /MNT E /MEDIA

Para acessar os arquivos de um CD, pendrive ou disco rígido presente em outra máquina da rede, é necessário "montar" esse conteúdo no sistema de arquivos local, isso é, torná-lo acessível como se fosse apenas mais um diretório no sistema.

Em /media ficam montadas todas as mídias removíveis, como dispositivos USB e DVDs de dados. Já o diretório /mnt fica reservado aos administradores que precisam montar temporariamente um sistema de arquivos externo.

SERVIÇOS: /SRV

Dados de servidores e serviços em execução no computador ficam armazenados dentro desse diretório.

ARQUIVOS DE DISPOSITIVOS: /DEV

No Linux, tudo é apresentado na forma de arquivos. Ao plugar um pendrive no computador, por exemplo, um arquivo será criado dentro do diretório /dev e ele servirá como interface para acessar ou gerenciar o drive USB. Nesse diretório, você encontra caminhos semelhantes para acessar terminais e qualquer dispositivo conectado ao computador, como o mouse e até modems.

ARQUIVOS VARIÁVEIS: /VAR

Todo arquivo que aumenta de tamanho ao longo do tempo está no diretório de arquivos variáveis. Um bom exemplo são os logs do sistema, ou seja, registros em forma de texto de atividades realizadas no Linux, como os logins feitos ao longo dos meses.

PROCESSOS DO SISTEMA: /PROC

Lembra da história de que tudo funciona como um arquivo no Linux? Pois o /proc é a prova disso. Nesse diretório são encontrados arquivos que revelam informações sobre os recursos e processos em execução no sistema. Quer um exemplo? Para saber há quanto tempo o Linux está sendo usado desde a última vez em que foi iniciado, basta ler o arquivo /proc/uptime.

ARQUIVOS TEMPORÁRIOS: /TMP

Arquivos e diretórios criados temporariamente tanto pelo sistema quanto pelos usuários devem ficar nesse diretório. Boa parte deles é apagada sempre que o computador é reiniciado.

.

NOMEANDO ARQUIVOS E DIRETÓRIOS

.

No GNU/Linux, os arquivos e diretórios pode ter o tamanho de até 255 letras. Você pode identifica-lo com uma extensão (um conjunto de letras separadas do nome do arquivo por um ".").

Os programas executáveis do GNU/Linux, ao contrário dos programas de DOS e Windows, não são executados a partir de extensões .exe, .com ou .bat. O GNU/Linux (como todos os sistemas POSIX) usa a permissão de execução de arquivo para identificar se um arquivo pode ou não ser executado.

Digamos que está elaborando um trabalho de história. Ele pode ser identificado mais facilmente caso fosse gravado com o nome trabalho.text ou trabalho.txt. Também é permitido gravar o arquivo com o nome Trabalho de Historia.txt mas não é recomendado gravar nomes de arquivos e diretórios com espaços. Porque será necessário colocar o nome do arquivo entre "aspas" para acessa-lo (por exemplo, cat "Trabalho de Historia.txt"). Ao invés de usar espaços, prefira capitalizar o arquivo (usar letras maiúsculas e minúsculas para identifica-lo): TrabalhodeHistoria.txt.

.

LINUX DISCOS E PARTIÇÕES

.

Partições são divisões existentes no disco rígido que marcam onde começa e onde termina um sistema de arquivos. As partições nos permitem usar mais de um sistema operacional no mesmo computador, ou dividir o disco rígido em uma ou mais partes

.

Para gravar os dados, o disco rígido deve ser primeiro particionado no Linux hoje uso um programa gráfico chamado Gparted para fazer o particionamento

.

Podemos fazer isto também pela linha de comando do Linux usando o `cfdisk', `parted', `fdisk'

.

O tipo da partição que uso estes dias é EXT4

.

Após criada e formatada, a partição será automaticamente identificada como um dispositivo no diretório `/dev'

.

Uma partição de disco não interfere em outras partições existentes, por este motivo é possível usar o `Windows', `GNU/Linux' e qualquer outro sistema operacional no mesmo disco

.

JOURNALING O QUE É ISTO?

.

O sistema de journaling grava qualquer operação que será feita no disco em uma área especial chamada "journal", assim se acontecer algum problema durante alterações no disco, ele pode voltar ao estado anterior do arquivo, ou finalizar a operação

Desta forma, o journal acrescenta ao sistema de arquivos o suporte a alta disponibilidade e maior tolerância a falhas. Após uma falha de energia, por exemplo, o journal é analisado durante a montagem do sistema de arquivos e todas as operações que estavam sendo feitas no disco são verificadas

Dependendo do estado da operação, elas podem ser desfeitas ou finalizadas

.

TIPOS DE EXECUÇÃO DE COMANDOS/PROGRAMAS

.

Um programa pode ser executado de duas formas:

.

1. `Primeiro Plano' - Também chamado de _foreground_.

Quando em foreground você deve esperar o término da execução de um programa para executar um novo comando

Somente é mostrado o aviso de comando após o término de execução do comando/programa.

2. `Segundo Plano' - Também chamado de _background_.

Background é quando você não precisa esperar o término da execução de um programa para executar um novo comando

Após iniciar um programa em _background_, é mostrado um número PID (identificação do Processo) e o aviso de comando é novamente mostrado, permitindo o uso normal do sistema.

O programa executado em background continua sendo executado internamente

Após ser concluído, o sistema retorna uma mensagem de pronto acompanhado do número PID do processo que terminou

.

Para iniciar um programa em `primeiro plano', basta digitar seu nome normalmente

Para iniciar um programa em `segundo plano', acrescente um espaço e o caracter `"&"' após o final do comando

$ find *.jpg &

.

Mesmo que um usuário execute um programa em segundo plano e saia do sistema, o programa continuará sendo executado até que seja concluído ou finalizado pelo usuário que iniciou a execução (ou pelo usuário root)

.

Exemplo:

~ $find *.jpg &
[1] 2701
~ $find: ‘*.jpg’: Arquivo ou diretório não encontrado

[1]+ Fim da execução com status 1 find *.jpg

.

O comando será executado em segundo plano e deixará o sistema livre para outras tarefas

Após o comando `find' terminar, será mostrada uma mensagem como viste acima

.

O COMANDO PS

.

Algumas vezes é útil ver quais processos estão sendo executados no computador

O comando `ps' faz isto, e também nos mostra qual usuário executou o programa, hora que o processo foi iniciado, etc

.

`ps [_opções_]'

.

Onde:

_opções_

a
Mostra os processos criados por você e de outros usuários do sistema.

x
Mostra processos que não são controlados pelo terminal.

u
Mostra o nome de usuário que iniciou o processo e hora em que o
processo foi iniciado.

m
Mostra a memória ocupada por cada processo em execução.

f
Mostra a árvore de execução de comandos (comandos que são chamados por outros comandos).

e
Mostra variáveis de ambiente no momento da inicialização do processo.

w
Mostra a continuação da linha atual na próxima linha ao invés de cortar o restante que não couber na tela

.

Estas opções acima podem ser combinadas para resultar em uma listagem mais completa

Você também pode usar pipes "|" para `filtrar' a saída do comando `ps'

.

Para detalhes, `| (pipe)'

.

Ao contrário de outros comandos, o comando `ps' não precisa do hífen

"-" para especificar os comandos. Isto porque ele não utiliza opções longas e não usa parâmetros.

.

Exemplos: `ps', `ps ax|grep inetd', `ps auxf', `ps auxw'

.

CONTROLE DE EXECUÇÃO DE PROCESSOS - Interrompendo a execução de um processo

.

Para cancelar a execução de algum processo `rodando em primeiro plano', basta pressionar as teclas `CTRL'+`C'

A execução do programa será cancelada e será mostrado o aviso de comando

Você também pode usar o comando `kill' para interromper um processo sendo executado

.

PARANDO MOMENTANEAMENTE A EXECUÇÃO DE UM PROCESSO

.

Para parar a execução de um processo rodando em primeiro plano, basta pressionar as teclas `CTRL'+`Z'

O programa em execução será pausado e será mostrado o número de seu job e o aviso de comando

.

Para retornar a execução de um comando pausado, use `fg' ou `bg'

.

O programa permanece na memória no ponto de processamento em que parou quando ele é interrompido

Você pode usar outros comandos ou rodar outros programas enquanto o programa atual está interrompido

.

JOBS

.

O comando `jobs' mostra os processos que estão parados ou rodando em _segundo plano_

Processos em segundo plano são iniciados usando o símbolo `"&"' no final da linha de comando ou através do comando `bg'

.

O número de identificação de cada processo parado ou em segundo plano (job), é usado com os comandos `fg' e `bg'

Um processo interrompido pode ser finalizado usando-se o comando `kill %[num]', onde `[num]' é o número do processo obtido pelo comando `jobs'

.

FG

Permite fazer um programa rodando em segundo plano ou parado, rodar em primeiro plano. Você deve usar o comando jobs para pegar o número do processo rodando em segundo plano ou interrompida, este número será passado ao comando fg para ativa-lo em primeiro plano.

fg [número]

Onde número é o número obtido através do comando jobs.

Caso seja usado sem parâmetros, o fg utilizará o último programa interrompido (o maior número obtido com o comando jobs)

.

BG

Permite fazer um programa rodando em primeiro plano ou parado, rodar em segundo plano. Para fazer um programa em primeiro plano rodar em segundo, é necessário primeiro interromper a execução do comando com CTRL+ Z, será mostrado o número da tarefa interrompida, use este número com o comando bg para iniciar a execução do comando em segundo plano.

bg [número]

Onde: número número do programa obtido com o pressionamento das teclas CTRL+Z ou através do comando jobs.

.

KILL

Permite enviar um sinal a um comando/programa. Caso seja usado sem parâmetros, o kill enviará um sinal de término ao processo sendo executado.

kill [opções] [sinal] [número]

Onde:

número
É o número de identificação do processo obtido com o comando ps, Também pode ser o número após o sinal de % obtido pelo comando jobs para matar uma tarefa interrompida [jobs].

sinal
Sinal que será enviado ao processo. Se omitido usa -15 como padrão.

opções
-9
Envia um sinal de destruição ao processo ou programa. Ele é terminado imediatamente sem chances de salvar os dados ou apagar os arquivos temporários criados por ele.

Você precisa ser o dono do processo ou o usuário root para termina-lo ou destruí-lo. Você pode verificar se o processo foi finalizado através do comando ps. Os tipos de sinais aceitos pelo GNU/Linux são explicados em detalhes em Sinais do Sistema.

Exemplo: kill 500, kill -9 500, kill %1.

.

KILLALL

Permite finalizar processos através do nome.

killall [opções] [sinal] [processo]

Onde:

processo
Nome do processo que deseja finalizar

sinal
Sinal que será enviado ao processo (pode ser obtido usando a opção -i).

opções
-i
Pede confirmação sobre a finalização do processo.

-l
Lista o nome de todos os sinais conhecidos.

-q
Ignora a existência do processo.

-v
Retorna se o sinal foi enviado com sucesso ao processo.

-w
Finaliza a execução do killall somente após finalizar todos os processos.

Os tipos de sinais aceitos pelo GNU/Linux são explicados em detalhes na Sinais do Sistema.

Exemplo: killall -HUP inetd

.

KILLALL5

.

Envia um sinal de finalização para todos os processos sendo executados.

killall5 [sinal]

.

PIDOF

Retorna o PID do processo especificado

pidof [opções] [nome]

Onde:

nome
Nome do processo que seja obter o número PID

opções
-s
Retorna somente o primeiro PID encontrado.

-x
Retorna o PID do do shell que está executando o script

-o [PID]
Ignora o processo com aquele PID. O PID especial %PPID pode ser usado para nomear o processo pai do programa pidof, em outras palavras

OBS: O programa pidof é um link simbólico ao programa killall5. Cuidado ao executar o killall5 as funções e opções são completamente diferentes dependendo da forma como é chamado na linha de comando!

Exemplo: pidof -s init

.

CURINGAS

.

Curingas (ou referência global) é um recurso usado para especificar um ou mais arquivos ou diretórios do sistema de uma só vez. Este é um recurso permite que você faça a filtragem do que será listado, copiado, apagado, etc. São usados 4 tipos de curingas no GNU/Linux:

"*" - Faz referência a um nome completo/restante de um arquivo/diretório.

"?" - Faz referência a uma letra naquela posição.

[padrão] - Faz referência a uma faixa de caracteres de um arquivo/diretório. Padrão pode ser:

[a-z][0-9] - Faz referência a caracteres de a até z seguido de um caractere de 0 até 9.

[a,z][1,0] - Faz a referência aos caracteres a e z seguido de um caractere 1 ou 0 naquela posição.

[a-z,1,0] - Faz referência a intervalo de caracteres de a até z ou 1 ou 0 naquela posição.

A procura de caracteres é "Case Sensitive" assim se você deseja que sejam localizados todos os caracteres alfabéticos você deve usar [a-zA-Z].

Caso a expressão seja precedida por um ^, faz referência a qualquer caractere exceto o da expressão. Por exemplo [^abc] faz referência a qualquer caractere exceto a, b e c.

{padrões} - Expande e gera strings para pesquisa de padrões de um arquivo/diretório.

X{ab,01} - Faz referência a sequencia de caracteres Xab ou X01

X{a-z,10} Faz referencia a sequencia de caracteres Xa-z e X10.

O que diferencia este método de expansão dos demais é que a existência do arquivo/diretório é opcional para geração do resultado. Isto é útil para a criação de diretórios. Lembrando que os 4 tipos de curingas ("*", "?", "[]", "{}") podem ser usados juntos. Para entender melhor vamos a prática:

Vamos dizer que tenha 5 arquivo no diretório /usr/teste: teste1.txt, teste2.txt, teste3.txt, teste4.new, teste5.new.

Caso deseje listar todos os arquivos do diretório /usr/teste você pode usar o coringa "*" para especificar todos os arquivos do diretório:

cd /usr/teste e ls * ou ls /usr/teste/*.

Não tem muito sentido usar o comando ls com "*" porque todos os arquivos serão listados se o ls for usado sem nenhum Coringa.

Agora para listar todos os arquivos teste1.txt, teste2.txt, teste3.txt com exceção de teste4.new, teste5.new, podemos usar inicialmente 3 métodos:

Usando o comando ls *.txt que pega todos os arquivos que começam com qualquer nome e terminam com .txt.

Usando o comando ls teste?.txt, que pega todos os arquivos que começam com o nome teste, tenham qualquer caractere no lugar do coringa ? e terminem com .txt. Com o exemplo acima teste*.txt também faria a mesma coisa, mas se também tivéssemos um arquivo chamado teste10.txt este também seria listado.

Usando o comando ls teste[1-3].txt, que pega todos os arquivos que começam com o nome teste, tenham qualquer caractere entre o número 1-3 no lugar da 6a letra e terminem com .txt. Neste caso se obtém uma filtragem mais exata, pois o coringa ? especifica qualquer caractere naquela posição e [] especifica números, letras ou intervalo que será usado.

Agora para listar somente teste4.new e teste5.new podemos usar os seguintes métodos:

ls *.new que lista todos os arquivos que terminam com .new

ls teste?.new que lista todos os arquivos que começam com teste, contenham qualquer caracter na posição do coringa ? e terminem com .new.

ls teste[4,5].* que lista todos os arquivos que começam com teste contenham números de 4 e 5 naquela posição e terminem com qualquer extensão.

Existem muitas outras formas de se fazer a mesma coisa, isto depende do gosto de cada um. O que pretendi fazer aqui foi mostrar como especificar mais de um arquivo de uma só vez. O uso de curingas será útil ao copiar arquivos, apagar, mover, renomear, e nas mais diversas partes do sistema. Alias esta é uma característica do GNU/Linux: permitir que a mesma coisa possa ser feita com liberdade de várias maneiras diferentes.

.

PSTREE

.

Mostra a estrutura de processos em execução no sistema em forma de árvore.

pstree [opções] [pid]

Onde:

pid
Número do processo que terá sua árvore listada. Se omitido, lista todos os processos.

opções
-a
Mostra opções passadas na linha de comando.

-c
Mostra toda a estrutura (inclusive sub-processos do processo pai).

-G
Usa caracteres gráficos no desenho da árvore de processos.

-h
Destaca o processo atual e seus antecessores.

-H [pid]
Destaca o processo especificado.

-l
Não faz quebra de linha

-n
Classifica pelo número PID ao invés do nome.

-p
Mostra o número PID entre parênteses após o nome do processo.

-u
Mostra também o dono do processo.

-U
Usa o conjunto de caracteres Unicode para o desenho da árvore

.

FECHANDO UM PROGRAMA QUANDO NÃO SE SABE COMO SAIR

.

Muitas vezes quando se esta iniciando no GNU/Linux você pode executar um programa e talvez não saber como fecha-lo. Este capítulo do guia pretende ajuda-lo a resolver este tipo de problema.

Isto pode também ocorrer com programadores que estão construindo seus programas e por algum motivo não implementam uma opção de saída, ou ela não funciona!

Em nosso exemplo vou supor que executamos um programa em desenvolvimento com o nome contagem que conta o tempo em segundos a partir do momento que é executado, mas que o programador esqueceu de colocar uma opção de saída. Siga estas dicas para finaliza-lo:

Normalmente todos os programas UNIX (o GNU/Linux também é um Sistema Operacional baseado no UNIX) podem ser interrompidos com o pressionamento das teclas e . Tente isto primeiro para finalizar um programa. Isto provavelmente não vai funcionar se estiver usando um Editor de Texto (ele vai entender como um comando de menu). Isto normalmente funciona para comandos que são executados e terminados sem a intervenção do usuário.

Caso isto não der certo, vamos partir para a força! ;-)

Mude para um novo console (pressionando e ), e faça o login como usuário root.

Localize o PID (número de identificação do processo) usando o comando: ps ax, aparecerão várias linhas cada uma com o número do processo na primeira coluna, e a linha de comando do programa na última coluna. Caso aparecerem vários processos você pode usar ps ax|grep contagem, neste caso o grep fará uma filtragem da saída do comando ps ax mostrando somente as linhas que tem a palavra "contagem". Para maiores detalhes, veja o comando grep

Feche o processo usando o comando kill PID, lembre-se de substituir PID pelo número encontrado pelo comando ps ax acima.

O comando acima envia um sinal de término de execução para o processo (neste caso o programa contagem). O sinal de término mantém a chance do programa salvar seus dados ou apagar os arquivos temporários que criou e então ser finalizado, isto depende do programa.

Alterne para o console onde estava executando o programa contagem e verifique se ele ainda está em execução. Se ele estiver parado mas o aviso de comando não está disponível, pressione a tecla . Frequentemente acontece isto com o comando kill, você finaliza um programa mas o aviso de comando não é mostrado até que se pressione .

Caso o programa ainda não foi finalizado, repita o comando kill usando a opção -9: kill -9 PID. Este comando envia um sinal de DESTRUIÇÃO do processo, fazendo ele terminar "na marra"!

Uma última dica: todos os programas estáveis (todos que acompanham as boas distribuições GNU/Linux) tem sua opção de saída. Lembre-se que quando finaliza um processo todos os dados do programa em execução podem ser perdidos (principalmente se estiver em um editor de textos), mesmo usando o kill sem o parâmetro -9.

Procure a opção de saída de um programa consultando o help, as páginas de manual, a documentação que acompanha o programa, info pages.

.

ELIMINANDO CARACTERES ESTRANHOS

.

As vezes quando um programa mal comportado é finalizado ou quando você visualiza um arquivo binário através do comando cat, é possível que o aviso de comando (prompt) volte com caracteres estranhos.

Para fazer tudo voltar ao normal, basta digitar reset e teclar ENTER. Não se preocupe, o comando reset não reiniciará seu computador (como o botão reset do seu computador faz), ele apenas fará tudo voltar ao normal.

Note que enquanto você digitar reset aparecerão caracteres estranhos ao invés das letras. Não se preocupe! Basta digitar corretamente e bater ENTER e o aviso de comando voltará ao normal

.

GREP

.

Procura por um texto dentro de um arquivo(s) ou no dispositivo de entrada padrão.

grep [expressão] [arquivo] [opções]

Onde:

expressão
palavra ou frase que será procurada no texto. Se tiver mais de 2 palavras você deve identifica-la com aspas "" caso contrário o grep assumirá que a segunda palavra é o arquivo!

arquivo
Arquivo onde será feita a procura.

opções
-A [número]
Mostra o [número] de linhas após a linha encontrada pelo grep.

-B [número]
Mostra o [número] de linhas antes da linha encontrada pelo grep.

-f [arquivo]
Especifica que o texto que será localizado, esta no arquivo [arquivo].

.

TOUCH

.

Muda a data e hora que um arquivo foi criado. Também pode ser usado para criar arquivos vazios. Caso o touch seja usado com arquivos que não existam, por padrão ele criará estes arquivos.

touch [opções] [arquivos]

Onde:

arquivos
Arquivos que terão sua data/hora modificados.

opções
-t MMDDhhmm[ANO.segundos]
Usa Mês (MM), Dias (DD), Horas (hh), minutos (mm) e opcionalmente o ANO e segundos para modificação do(s) arquivos ao invés da data e hora atual.

-a, --time=atime
Faz o touch mudar somente a data e hora do acesso ao arquivo.

-c, --no-create
Não cria arquivos vazios, caso os arquivos não existam.

-m, --time=mtime
Faz o touch mudar somente a data e hora da modificação.

-r [arquivo]
Usa as horas no [arquivo] como referência ao invés da hora atual.

Exemplos:

touch teste - Cria o arquivo teste caso ele não existir.

touch -t 10011230 teste - Altera da data e hora do arquivo para 01/10 e 12:30.

touch -t 120112301999.30 teste - Altera da data, hora ano, e segundos do arquivo para 01/12/1999 e 12:30:30.

touch -t 12011200 * - Altera a data e hora do arquivo para 01/12 e 12:00.

.

ECHO

.

Mostra mensagens. Este comando é útil na construção de scripts para mostrar mensagens na tela para o usuário acompanhar sua execução.

echo [mensagem]

A opção -n pode ser usada para que não ocorra o salto de linha após a mensagem ser mostrada

.

SHUTDOWN

.

Desliga/reinicia o computador imediatamente ou após determinado tempo (programável) de forma segura. Todos os usuários do sistema são avisados que o computador será desligado . Este comando somente pode ser executado pelo usuário root ou quando é usada a opção -a pelos usuários cadastrados no arquivo /etc/shutdown.allow que estejam logados no console virtual do sistema.

shutdown [opções] [hora] [mensagem]

hora
Momento que o computador será desligado. Você pode usar HH:MM para definir a hora e minuto, MM para definir minutos, +SS para definir após quantos segundos, ou now para imediatamente (equivalente a +0).

O shutdown criará o arquivo /etc/nologin para não permitir que novos usuários façam login no sistema (com exceção do root). Este arquivo é removido caso a execução do shutdown seja cancelada (opção -c) ou após o sistema ser reiniciado.

mensagem
Mensagem que será mostrada a todos os usuários alertando sobre o reinicio/desligamento do sistema.

opções
-h
Inicia o processo para desligamento do computador.

-r
Reinicia o sistema

-c
Cancela a execução do shutdown. Você pode acrescentar uma mensagem avisando aos usuários sobre o fato.

-a
Permite que os nomes de usuários contidos no arquivo /etc/shutdown.allow possam utilizar o shutdown para reinicializar/desligar o sistema. Deve ser colocado um nome de usuário por linha. O limite máximo de usuários neste arquivo é de 32.

Este arquivo é útil quando o shutdown é usado para controlar o pressionamento das teclas CTRL+ALT+DEL no /etc/inittab.

-k
Simula o desligamento/reinicio do sistema, enviando mensagem aos usuários.

-f
Não executa a checagem do sistema de arquivos durante a inicialização do sistema. Este processo é feito gravando-se um arquivo /fastboot que é interpretado pelos scripts responsáveis pela execução do fsck durante a inicialização do sistema.

-F
Força a checagem do sistema de arquivos durante a inicialização. É gravado um arquivo chamado /forcefsck que é interpretado pelos scripts responsáveis pela execução do fsck durante a inicialização do sistema.

-n
Faz com que o shutdown ignore a execução do init fechando todos os processos.

-t [num]
Faz com que o shutdown envie um sinal de término aos processos e aguarde [num] segundos antes de enviar o sinal KILL.

O shutdown envia uma mensagem a todos os usuários do sistema alertando sobre o desligamento durante os 15 minutos restantes e assim permite que finalizem suas tarefas. Após isto, o shutdown muda o nível de execução através do comando init para 0 (desligamento), 1 (modo monousuário), 6 (reinicialização). É recomendado utilizar o símbolo "&" no final da linha de comando para que o shutdown seja executado em segundo plano.

Quando restarem apenas 5 minutos para o reinicio/desligamento do sistema, o programa login será desativado, impedindo a entrada de novos usuários no sistema.

O programa shutdown pode ser chamado pelo init através do pressionamento da combinação das teclas de reinicialização CTRL+ALT+DEL alterando-se o arquivo /etc/inittab. Isto permite que somente os usuários autorizados (ou o root) possam reinicializar o sistema.

Exemplos:

"shutdown -h now" - Desligar o computador imediatamente.

"shutdown -r now" - Reinicia o computador imediatamente.

"shutdown 19:00 A manutenção do servidor será iniciada às 19:00" - Faz o computador entrar em modo monousuário (init 1) às 19:00 enviando a mensagem A manutenção do servidor será iniciada às 19:00 a todos os usuários conectados ao sistema.

"shutdown -r 15:00 O sistema será reiniciado às 15:00 horas" - Faz o computador ser reiniciado (init 6) às 15:00 horas enviando a mensagem O sistema será reiniciado às 15:00 horas a todos os usuários conectados ao sistema.

shutdown -r 20 - Faz o sistema ser reiniciado após 20 minutos.

shutdown -c - Cancela a execução do shutdown.

shutdown -t 30 -r 20 - Reinicia o sistema após 20 minutos, espera 30 segundos após o sinal de término para enviar o sinal KILL a todos os programas abertos.
-h, --no-filename
Não mostra os nomes dos arquivos durante a procura.

-i, --ignore-case
Ignora diferença entre maiúsculas e minúsculas no texto procurado e arquivo.

-n, --line-number
Mostra o nome de cada linha encontrada pelo grep.

-E
Ativa o uso de expressões regulares.

-U, --binary
Trata o arquivo que será procurado como binário.

Se não for especificado o nome de um arquivo ou se for usado um hífen "-", grep procurará a string no dispositivo de entrada padrão. O grep faz sua pesquisa em arquivos texto. Use o comando zgrep para pesquisar diretamente em arquivos compactados com gzip, os comandos e opções são as mesmas.

Exemplos: grep "capitulo" texto.txt, ps ax|grep inetd, grep "capitulo" texto.txt -A 2 -B 2

.

CMP

.

Compara dois arquivos de qualquer tipo (binário ou texto). Os dois arquivos especificados serão comparado e caso exista diferença entre eles, é mostrado o número da linha e byte onde ocorreu a primeira diferença na saída padrão (tela) e o programa retorna o código de saída 1.

cmp [arquivo1] [arquivo2] [opções]

Opções:

arquivo1/arquivo2
Arquivos que serão comparados.

opções
-l
Mostra o número do byte (hexadecimal) e valores diferentes de bytes (octal) para cada diferença.

-s
Não mostra nenhuma diferença, só retorna o código de saída do programa.

Use o comando zcmp para comparar diretamente arquivos binários/texto compactados com gzip.

Exemplo: cmp teste.txt teste1.txt

.

DIFF

.

Compara dois arquivos e mostra as diferenças entre eles. O comando diff é usado somente para a comparação de arquivos em formato texto. As diferenças encontradas podem ser redirecionadas para um arquivo que poderá ser usado pelo comando patch para aplicar as alterações em um arquivo que não contém as diferenças. Isto é útil para grandes textos porque é possível copiar somente as modificações (geradas através do diff, que são muito pequenas) e aplicar no arquivo para atualiza-lo (através do patch) ao invés de copiar a nova versão. Este é um sistema de atualização muito usado na atualização dos código fonte do kernel do GNU/Linux.

diff [diretório1/arquivo1] [diretório2/arquivo2] [opções]

Opções:

diretório1/arquivo1 diretório2/arquivo2
Arquivos /diretórios que serão comparados. Normalmente é usado como primeiro arquivo/diretório o mais antigo e o mais novo como segundo.

opções
-lines [num]
Gera a diferença com [num] linhas de contexto. Por padrão o diff gera um arquivo com 2 linhas que é o mínimo necessário para o correto funcionamento do patch.

-a
Compara os dois arquivos como arquivos texto.

-b
Ignora espaços em branco como diferenças.

-B
Ignora linhas em branco inseridas ou apagadas nos arquivos.

-i
Ignora diferenças entre maiúsculas e minúsculas nos arquivos.

-H
Usa análise heurística para verificar os arquivos.

-N
Em uma comparação de diretórios, se o arquivo apenas existe em um diretório, trata-o como presente mas vazio no outro diretório.

-P
Em uma comparação de diretórios, se o arquivos apenas existe no segundo diretório, trata-o como presente mas vazio no primeiro diretório.

-q
Mostra somente se os dois arquivos possuem diferenças. Não mostra as diferenças entre eles.

-r
Compara diretórios e sub-diretórios existentes.

-S [nome]
Inicia a comparação de diretórios pelo arquivo [nome]. É útil quando cancelamos uma comparação.

-t
Aumenta a tabulação das diferenças encontradas.

-u
Usa o formato de comparação unificado.

Use o comando zdiff para comparar diretamente arquivos compactados pelo utilitário gzip

Use o comando sdiff para visualizar as linhas diferentes entre os dois arquivos em formato texto simples.

Exemplo:

diff texto.txt texto1.txt - Compara o arquivo texto.txt com texto1.txt e exibe suas diferenças na tela.

diff -Bu texto.txt texto1.txt - Compara o arquivo texto.txt com texto1.txt ignorando linhas em branco diferentes entre os dois arquivos e usando o formato unificado.

diff texto.txt texto1.txt >texto.diff - Compara o arquivo texto.txt com texto1.txt e gera um arquivo chamado texto.diff contendo a diferença entre eles. Este arquivo poderá ser usado pelo patch para aplicar as diferenças existente entre os dois no arquivo texto.txt.

diff -r /usr/src/linux-2.2.13 /usr/src/linux-2.2.14 >patch-2.2.14.diff - Compara o diretório e sub-diretórios linux-2.2.13 e linux-2.2.14 e grava as diferenças entre eles no arquivo patch-2.2.14.diff

.

PR

.

Página arquivos texto ou a entrada padrão para impressão. Este comando faz a paginação de um arquivo texto e opcionalmente ajusta o número de colunas e mostra o resultado na saída padrão.

pr [opções] [arquivo]

Onde:

arquivo
Arquivo que será paginado para impressão.

opções
+[NUM]
Inicia a numeração de páginas na página [PAGINA]

-[NUM]
Mostra a saída com [NUM] colunas.

-c
Imprime o caracter CTRL como "^" na saída padrão.

-F, -f
Usa avanço de página ao invés de linhas em branco para separar páginas.

-e[caracter][tamanho]
Usa o caracter [caracter] como tabulação (o padrão é tab) e o espaço da tabulação [tamanho].

-h [nome]
Mostra [nome] ao invés do nome do arquivo no cabeçalho.

-l [num]
Define o número máximo de linhas por página para [num].

-m
Imprime vários arquivos em paralelo, um por coluna.

-r
Oculta mensagens de erro de abertura de arquivos.

-w [num]
Ajusta a largura da página para [num] colunas (o padrão é 72).

Exemplo: pr -l 50 -h "Teste do comando pr" teste.txt

.

CUT

.

Mostra seções de cada linha do arquivo dependendo das opções passadas ao programa.

cut [opções] [arquivo]

Onde:

arquivo
Arquivo que será verificado pelo comando cut.

opções
-b, --bytes [bytes]
Mostra somente a lista de [bytes] do arquivo.

-c, --characters [numero]
Mostra somente o [número] de caracteres no arquivo. É semelhante a opção "-b" mas tabs e espaços são tratados como qualquer caracter.

-f, --field [campos]
Mostra somente a lista de [campos].

-d, --delimite [delimitador]
Para uso com a opção -f, os campos são separados pelo primeiro caracter em [delimitador] ao invés de tabulações.

-s
Para uso com a opção -f, somente mostra linhas que contém o caracter separador de campos.

Devem ser especificadas opções para o funcionamento deste comando. Os bytes, campos e delimitadores podem ser especificados através de intervalos de caracteres (usando a-z), através de vírgulas (a,b,d) ou da combinação entre eles.

cut -b 1,3 /etc/passwd - Pega a primeira e terceira letra (byte) de cada linha do arquivo /etc/passwd

cut -b 1,3-10 /etc/passwd - Pega a primeira letra (byte) e terceira a décima letra de cada linha do arquivo /etc/passwd.

cut -c 1,3-10 /etc/passwd - Pega o primeiro caracter e terceiro ao décimo caracter de cada linha do arquivo /etc/passwd

.

PING

.

Verifica se um computador está disponível na rede. Este comando é muito utilizado por alguns programas de conexão e administradores para verificar se uma determinada máquina está conectada na rede e também para verificar o tempo de resposta de cada máquina da rede. O ping envia pacotes ICMS ECHO_REQUEST para um computador, este quando recebe o pacote envia uma resposta ao endereço de origem avisando que está disponível na rede.

ping [opções][IP/DNS]

onde:

IP/dns
Endereço IP ou nome DNS do endereço.

opções
-c [num]
Envia num pacotes ao computador de destino.

-f
Flood ping. Envia novos pacotes antes de receber a resposta do pacote anterior. Para cada requisição enviada, um "." é mostrado na tela e para cada resposta recebida, um backspace é mostrado. Somente o usuário root pode utilizar esta opção e pode te auxiliar muito na detecção de erros de transmissão de pacotes em interfaces das máquinas em sua rede.

-i [seg]
Aguarda [seg] segundos antes de enviar cada pacote.

-q
Não mostra as requisições enquanto são enviadas, somente mostra as linhas de sumário no inicio e término do programa.

-s [tamanho]
Especifica o tamanho do pacote que será enviado.

-v, --verbose
Saída detalhada, tanto os pacotes enviados como recebidos são listados.

Exemplo: ping 192.168.1.1, ping www.debian.org

.

FINGER

.

Mostra detalhes sobre os usuários de um sistema. Algumas versões do finger possuem bugs e podem significar um risco para a segurança do sistema. É recomendado desativar este serviço na máquina local.

finger [usuário] [usuário@host]

Onde:

usuário
Nome do usuário que deseja obter detalhes do sistema. Se não for digitado o nome de usuário, o sistema mostra detalhes de todos os usuários conectados no momento.

usuário@host
Nome do usuário e endereço do computador que deseja obter detalhes.

-l
Mostra os detalhes de todos os usuários conectados no momento. Entre os detalhes, estão incluídos o nome do interpretador de comandos (shell) do usuário, diretório home, nome do usuário, endereço, etc. Estes dados são lidos de /etc/passwd.

-p
Não exibe o conteúdo dos arquivos .plan e .project

Se for usado sem parâmetros, mostra os dados de todos os usuários conectados atualmente ao seu sistema.

Exemplo: finger, finger root

.

FTP

.

Permite a transferência de arquivos do computador remoto/local e vice versa. O file transfer protocol é o sistema de transmissão de arquivos mais usado na Internet. É requerida a autenticação do usuário para que seja permitida a conexão. Muitos servidores ftp disponibilizam acesso anônimo aos usuários, com acesso restrito.

Uma vez conectado a um servidor ftp, você pode usar a maioria dos comandos do GNU/Linux para operá-lo.

ftp [ip/dns]

Abaixo alguns dos comandos mais usados no FTP:

ls
Lista arquivos do diretório atual.

cd [diretório]
Entra em um diretório.

get [arquivo]
Copia um arquivo do servidor ftp para o computador local. O arquivo é gravado, por padrão, no diretório onde o programa ftp foi executado.

hash [on/off]
Por padrão esta opção está desligada. Quando ligada, faz com que o caracter "#" seja impresso na tela indicando o progresso do download.

mget [arquivos]
Semelhante ao get, mas pode copiar diversos arquivos e permite o uso de curingas.

send [arquivo]
Envia um arquivo para o diretório atual do servidor FTP (você precisa de uma conta com acesso a gravação para fazer isto).

prompt [on/off]
Ativa ou desativa a pergunta para a cópia de arquivo. Se estiver como off assume sim para qualquer pergunta.

Exemplo: ftp ftp.debian.org

.

WHO

.

Mostra quem está atualmente conectado no computador. Este comando lista os nomes de usuários que estão conectados em seu computador, o terminal e data da conexão.

who [opções]

onde:

opções
-H, --heading
Mostra o cabeçalho das colunas.

-b, --boot
Mostra o horário do último boot do sistema.

-d, --dead
Mostra processos mortos no sistema.

-i, -u, --idle
Mostra o tempo que o usuário está parado em Horas:Minutos.

-m, i am
Mostra o nome do computador e usuário associado ao nome. É equivalente a digitar who i am ou who am i.

-q, --count
Mostra o total de usuários conectados aos terminais.

-r, --runlevel
Mostra o nível de execução atual do sistema e desde quando ele está ativo.

-T, -w, --mesg
Mostra se o usuário pode receber mensagens via talk (conversação).

+ O usuário recebe mensagens via talk

- O usuário não recebe mensagens via talk.

? Não foi possível determinar o dispositivo de terminal onde o usuário está conectado

.

NETSTAT

.

Mostra conexões de rede, tabela de roteamento, estatísticas de interfaces, conexões masquerade, e mensagens.

netstat [opções]

Onde:

opções
-i [interface]
Mostra estatísticas da interface [interface].

-M, --masquerade
Se especificado, também lista conexões masquerade.

-n, --numeric
Usa endereços numéricos ao invés de tentar resolver nomes de hosts, usuários e portas.

-c, --continuous
Mostra a listagem a cada segundo até que a CTRL+C seja pressionado.

-l
Lista sockets aguardando por conexão.

-t, --tcp
Lista conexões TCP.

-u, --udp
Lista conexões UDP.

Se não for especificada nenhuma opção, os detalhes das conexões atuais serão mostrados.

Exemplos: netstat -n, netstat -lt, netstat -M

.

TRACEROUTE

.

Mostra o caminho percorrido por um pacote para chegar ao seu destino. Este comando mostra na tela o caminho percorrido entre os Gateways da rede e o tempo gasto de retransmissão. Este comando é útil para encontrar computadores defeituosos na rede caso o pacote não esteja chegando ao seu destino.

traceroute [opções] [host/IP de destino]

Onde:

host/IP destino
É o endereço para onde o pacote será enviado (por exemplo, www.debian.org). Caso o tamanho do pacote não seja especificado, é enviado um pacote de 38 bytes.

opções
-l
Mostra o tempo de vida do pacote (ttl)

-m [num]
Ajusta a quantidade máximas de ttl dos pacotes. O padrão é 30.

-n
Mostra os endereços numericamente ao invés de usar resolução DNS.

-p [porta]
Ajusta a porta que será usada para o teste. A porta padrão é 33434.

-r
Pula as tabelas de roteamento e envia o pacote diretamente ao computador conectado a rede.

-s [end]
Usa o endereço IP/DNS [end] como endereço de origem para computadores com múltiplos endereços IPs ou nomes.

-v
Mostra mais detalhes sobre o resultado do traceroute.

-w [num]
Configura o tempo máximo que aguardará por uma resposta. O padrão é 3 segundos.

Exemplos: traceroute www.debian.org, traceroute www.guiafoca.org

.

REDIRECIONAMENTOS E PIPE

.

O funcionamento dos recursos de direcionamento de entrada e saída do sistema GNU/Linux.

>

Redireciona a saída padrão de um programa/comando/script para algum dispositivo ou arquivo ao invés do dispositivo de saída padrão (tela). Quando é usado com arquivos, este redirecionamento cria ou substitui o conteúdo do arquivo.

Por exemplo, você pode usar o comando ls para listar arquivos e usar ls >listagem para enviar a saída do comando para o arquivo listagem. Use o comando cat para visualizar o conteúdo do arquivo listagem.

O mesmo comando pode ser redirecionado para o segundo console /dev/tty2 usando: ls >/dev/tty2, o resultado do comando ls será mostrado no segundo console (pressione ALT e F2 para mudar para o segundo console e ALT e F1 para retornar ao primeiro). O mesmo resultado pode ser obtido com o comando ls 1>/dev/tty2, sendo que o número 1 indica que será capturada a saída padrão do comando.

Para redirecionar somente a saída de erros do comando ls, use a sintaxe: ls 2>/tmp/erros-do-ls

>>

Redireciona a saída padrão de um programa/comando/script para algum dispositivo ou adiciona as linhas ao final de arquivo ao invés do dispositivo de saída padrão (tela). A diferença entre este redirecionamento duplo e o simples, é se caso for usado com arquivos, adiciona a saída do comando ao final do arquivo existente ao invés de substituir seu conteúdo. .

Por exemplo, você pode acrescentar a saída do comando ls ao arquivo listagem do capítulo anterior usando ls / >>listagem. Use o comando cat para visualizar o conteúdo do arquivo listagem.

<

Direciona a entrada padrão de arquivo/dispositivo para um comando. Este comando faz o contrário do anterior, ele envia dados ao comando.

Você pode usar o comando cat <teste.txt para enviar o conteúdo do arquivo teste.txt ao comando cat que mostrará seu conteúdo (é claro que o mesmo resultado pode ser obtido com cat teste.txt mas este exemplo serviu para mostrar a funcionalidade do <).

<<

Este redirecionamento serve principalmente para marcar o fim de exibição de um bloco. Este é especialmente usado em conjunto com o comando cat, mas também tem outras aplicações. Por exemplo:

cat <"

A principal diferença entre o "|" e o ">", é que o Pipe envolve processamento entre comandos, ou seja, a saída de um comando é enviado a entrada do próximo e o ">" redireciona a saída de um comando para um arquivo/dispositivo.

Você pode notar pelo exemplo acima (ls -la | more) que ambos ls e more são comandos porque estão separados por um "|". Se um deles não existir ou estiver digitado incorretamente, será mostrada uma mensagem de erro.

Um resultado diferente seria obtido usando um ">" no lugar do "|"; A saída do comando ls -la > more seria gravada em um arquivo chamado more.

tee

Envia ao mesmo tempo o resultado do programa para a saída padrão (tela) e para um arquivo. Este comando deve ser usado com o pipe "|".

comando |tee [arquivo]

Exemplo: ls -la | tee listagem.txt, a saída do comando será mostrada normalmente na tela e ao mesmo tempo gravada no arquivo listagem.txt

.

GUIA DE COMANDOS LINUX

.

Sobre os comandos do Linux

.

comando [opções] [argumentos]

.

Descrição:

Os comandos do Linux são utilizados na linha de comandos (prompt) do sistema: as opções definem parâmetros do comando e usualmente começam com o caractere "-" seguido de uma ou mais letras; e os argumentos definem dados a serem usados no processamento do comando.

.

O responsável por interpretar e executar um comando é o shell do usuário.

.

Um comando pode ser implementado pelo próprio shell (builtin command) ou pode ser uma aplicação presente em um dos diretórios do sistema como, por exemplo, /bin, /sbin, /usr/bin, etc.

.

Atualmente, acho que existem mais de 3 mil comandos a disposição do usuário de GNU/Linux.

.

Exemplos:

Por exemplo, para listar os arquivos e os diretórios filhos do diretório atual, basta digitar:

.

ls

.

Já o comando:

.

ls -al :: Exibe informações (tamanho, dono, grupo, etc) sobre os arquivos e os diretórios (opção l) e inclui na listagem os arquivos escondidos (opção a).
Importante: os arquivos escondidos no Linux possuem nome que começam com um ponto (".")

.

As opções podem possuir um ou mais argumentos.

.

Além disso, é possível existir argumentos que não pertençam a uma opção. Observe, por exemplo, o comando abaixo.

awk -F: -farq.txt /etc/passwd

Neste caso, temos o comando awk com duas opções (F e f) e três argumentos (:, arq.txt e /etc/passwd), sendo que o último argumento não pertence a nenhuma opção (é usada pelo comando).

Para obter informações sobre algum comando do Linux, digite man seguido do nome do comando. Por exemplo, para obter uma explicação sobre o comando ls digite

man ls

É também possível obter a lista dos parâmetros disponíveis usando o parâmetro/comando help.

Entrada e saída padrão dos comandos do Linux:

.

Temos no Linux a entrada padrão a saída padrão e a saída de erro.

.

stdin (standard input) - entrada padrão para os comandos do Linux. Normalmente, a entrada padrão é o teclado, mas é possível usar o redirecionador de saída para alterar a saída padrão.

.

Por exemplo:

.

ls > teste

.

ou

.

ls 1> teste

.

Cria o arquivo teste com o conteúdo do diretório atual.

stderr (standard error) - saída padrão para os erros encontrados durante a execução de um comando do Linux. Normalmente, a saída padrão é a tela da sessão onde o comando foi digitado, mas é possível usar o redirecionador de saída 2> para alterar a saída padrão.

.

Suponha que o diretório /meu_dir não exista. Portanto, o comando:

.

ls /meu_dir 2> teste

.

Cria o arquivo teste com a mensagem de erro relacionada a execução do comando acima.

.

É possível digitar mais de um comando de uma vez. Se ";" for usado para separar os comandos, então o sistema executa todos os comandos, independentemente do resultado.

.

man ls > teste; ls -l teste

.

Se "&&" for usado entre os comandos, um comando só é executado quando os comandos anteriores não apresentam erro.

.

man ls > teste && ls -l teste

.

Observações:

.

Neste Guia de Referências foi adotada a seguinte norma na apresentação dos comandos:

.

Opções/argumentos não obrigatórios (os usuários podem ou não digitá-los) estão entre colchetes.

argumentos obrigatórios (devem ser fornecidos pelos usuários) não são delimitados por nenhum símbolo.

.

Por exemplo, o comando:

.

cat [-n] arquivo

.

Possui uma opção (-n) e um argumento (arquivo), sendo que apenas o segundo deve ser obrigatoriamente informado pelo usuário.

.

Por exemplo, suponha que você queira exibir o conteúdo do arquivo teste.txt, então você pode digitar:

cat -n teste.txt

.

ou

.

cat teste.txt

.

Onde o primeiro comando numera as linhas do arquivo e o segundo comando apenas exibe o arquivo.

.

Linux comandos de manipulação de diretório

.

mkdir
cria um diretório

exemplo: mkdir docs

.

rmdir
exclui um diretorio (se estiver vazio)

.

rm -rf
exclui um diretório e todo o seu conteúdo

.

cd
entra num diretório (exemplo: cd docs) ou retorna para HOME

.

cd ~
vai direto para o diretório home do usuário logado.

.

cd -
volta ao último diretório acessado

.

pwd
exibe o local do diretório atual

.

ls
listar o conteúdo do diretório

.

ls -alh
mostra o conteúdo detalhado do diretório

.

ls -ltr
mostra os arquivos no formado longo(l) em ordem inversa(r) de data (t)

.

du -msh
mostra o tamanho do diretório em Megabytes

.

whereis
mostra onde se encontra determinado arquivo (binários)

exemplo: whereis samba

.

which
mostra qual arquivo binário está sendo chamado pelo shell quando chamado via linha de comando

.

Para obter uma listagem de diretórios em sistemas GNU/Linux, ordenados do maior para o menor, use o comando:

du -Sk | sort -nr | more

.

ou

.

du -Sh | sort -nr | more

.

SABER O TAMANHO DE CADA DIRETÓRIO OU SUBDIRETÓRIO:

.

du -ach --max-depth=1 /var/

du -ach --max-depth=1 /var/| sort -nr

du -ach --max-depth=1 /var/| sort -nr | more

.

CRIAR DIRETÓRIOS DENTRO DE DIRETORIOS:

mkdir -p /teste/teste1/teste2/teste3

.

CRIAR UMA ÁRVORE COMPLETA DE DIRETÓRIOS:

mkdir -p docs/{img/{fotos,icons,wallpapers,svg},textos/{artigos,man},tmp}

.

A REGRA AQUI É A SEGUINTE:

.

para cada pasta que conterá subpastas use "nome/{}"
dentro das chaves coloque os nomes separados por vírgula não esquecendo de usar o parâmetro '-p' no começo do comando.

.

Linux comandos para manipulação de arquivos

.

cat
mostra o conteúdo de um arquivo binário ou texto

tac
semelhante ao cat mas inverte a ordem

tail
mostra as últimas 10 linhas de um arquivo (util para ler logs)

head
mostra as primeiras 10 linhas de um arquivo

less
mostra o conteúdo de um arquivo de texto com controle

vi
editor de ficheiros de texto

vim
versão melhorada do editor supracitado

rm
remoção de arquivos (também remove diretórios)

cp
copia diretórios

'cp -r'
copia recursivamente

mv
move ou renomeia arquivos e diretórios

chmod
altera as permissões de arquivos ou directórios

chown
altera o dono de arquivos ou diretórios

cmd>txt
cria um novo arquivo(txt) com o resultado do comando(cmd)

cmd>>txt
adiciona o resultado do comando(cmd) ao fim do arquivo(txt)

touch
touch um_titulo.txt
cria um arquivo um_titulo.txt vazio; também altera data e hora de modificação para agora

> arquivo.txt
mais rápido que o touch para criação de arquivos

split
divide um arquivo

recode recodifica um arquivo ex: recode iso-8859-15..utf8 file_to_change.txt

[mc] poderoso editor de texto

.

LINUX COMANDOS PARA ADMINISTRAR

.

man
mostra informações sobre um comando

adduser
adiciona usuários

addgroup
adiciona grupos

apropos
realiza pesquisa por palavra ou string

dmesg
exibe as mensagens da inicialização(log)

du
exibe estado de ocupação dos discos/partições

find comando de busca ex: find ~/ -cmin -3

userdel
remove usuários

chfn
altera informação relativa a um utilizador

who
informa quem está logado no sistema

whoami
informa com qual usuário você está logado

passwd
modifica senha (password) de usuários

umask
define padrões de criação de arquivos e diretórios

ps
mostra os processos correntes

ps -aux
mostra todos os processos correntes no sistema

kill
manda um sinal para um processo. Os sinais SIGTERM e SIGKILL encerram o processo

killall
manda um sinal para todos os processos

su
troca para o super-usuário root (é exigida a senha)

su user
troca para o usuário especificado em 'user' (é exigida a senha)

chown
altera a propriedade de arquivos e pastas (dono)

env
mostra variaveis do sistema

.

COMANDOS PARA ADMINISTRAÇÃO DE REDE

ifconfig
mostra as interfaces de redes ativas e as informações relacionadas a cada uma delas

.

route
mostra as informações referentes as rotas

.

mtr
mostra rota até determinado IP

.

nmap
lista as portas de sistemas remotos/locais atras de portas abertas e pode checar sistema operacional em execução no host remoto

.

netstat
exibe as portas e protocolos abertos no sistema

.

iptraf
analisador de trafego da rede com interface gráfica baseada em diálogos

.

tcpdump
sniffer muito popular. Sniffer é uma ferramenta que "ouve" os pacotes que estão passando pela rede

.

traceroute
traça uma rota do host local até o destino mostrando os roteadores intermediários

.

nslookup
consultas a serviços DNS

.

dig
consultas a serviços DNS

.

LINUX COMMAND LINE QUICK REFERENCE - LINUX COMANDOS GUIA DE REFERÊNCIA RÁPIDO

.

1

Linux Comandos de Informação do sistema

cat /etc/*-release # Mostra qual sistema Linux está usando - Show which version of GNU/Linux installed

uptime # Show how long the system has been running + load

hostname # Show system host name

hostname -I # Display the IP addresses of the host

last reboot # Show system reboot history

date # Show the current date and time - Mostra o dia e a hora atual

cal # Show this month's calendar - Mostra o mês do calendário que estamos

w # Display who is online - Mostra quem está online

whoami # Who you are logged in as - Mostra o nome que você está logado

.

2

Linux Comandos Hardware Information - Informação do Hardware

dmesg # Display messages in kernel ring buffer

cat /proc/cpuinfo # Display CPU information

cat /proc/meminfo # Display memory information

free -h # Display free and used memory ( -h for human readable, -m for MB, -g for GB.)

lspci -tv # Display PCI devices

lsusb -tv # Display USB devices

dmidecode # Display DMI/SMBIOS (hardware info) from the BIOS

hdparm -i /dev/sda # Show info about disk sda

hdparm -tT /dev/sda # Perform a read speed test on disk sda

badblocks -s /dev/sda # Test for unreadable blocks on disk sda

.

3

Linux Comandos Performance Monitoring and Statistics - Monitoramento estatistico de performance

top # Display and manage the top processes

htop # Interactive process viewer (top alternative)

mpstat 1 # Display processor related statistics

vmstat 1 # Display virtual memory statistics

iostat 1 # Display I/O statistics

tail 100 /var/log/messages # Display the last 100 syslog messages (Use /var/log/syslog for Debian based systems.)

tcpdump -i eth0 # Capture and display all packets on interface eth0

tcpdump -i eth0 'port 80' # Monitor all traffic on port 80 ( HTTP )

lsof # List all open files on the systemlsof

-u user # List files opened by user

free -h # Display free and used memory ( -h for human readable, -m for MB, -g for GB.)

watch df -h # Execute "df -h", showing periodic updates

.

4

Linux Comandos User Information and Management - Informações do usuário e gerenciamento

id # Display the user and group ids of your current user.

last # Display the last users who have logged onto the system.

who # Show who is logged into the system.

w # Show who is logged in and what they are doing.

groupadd test # Create a group named "test".

useradd -c "John Smith" -m john # Create an account named john, with a comment of "John Smith" and create the user's home directory.

userdel john # Delete the john account.

usermod -aG sales john # Add the john account to the sales group

.

5

Linux Comandos File and Directory Commands - Linux Comandos de arquivos e diretórios

ls -al # List all files in a long listing (detailed) format

pwd # Display the present working directory

mkdir directory # Create a directory

rm file # Remove (delete) file

rm -r directory # Remove the directory and its contents recursively

rm -f file # Force removal of file without prompting for confirmation

rm -rf directory # Forcefully remove directory recursively

cp file1 file2 # Copy file1 to file2

cp -r source_directory destination # Copy source_directory recursively to destination . If destination exists, copy source_directory into destination , otherwise create destination with the contents of source_directory .

mv file1 file2 # Rename or move file1 to file2 . If file2 is an existing directory, move file1 into directory file2

ln -s /path/to/file linkname # Create symbolic link to linkname

touch file # Create an empty file or update the access and modification times of file.

cat file # View the contents of file

less file # Browse through a text file

head file # Display the first 10 lines of file

tail file # Display the last 10 lines of file

tail -f file # Display the last 10 lines of file and "follow" the file as it grows.

.

6

Linux Comandos Process Management - Gerenciamento de processos

ps # Display your currently running processes

ps -ef # Display all the currently running processes on the system.

ps -ef | grep processname # Display process information for processname

top # Display and manage the top processes

htop # Interactive process viewer (top alternative)

kill pid # Kill process with process

HanSmi, [17.02.18 21:03]
ID of p id

killall processname # Kill all processes named

process_name_program & # Start program in the background

bg # Display stopped or background jobs

fg # Brings the most recent background job to foreground

fg n # Brings job n to the foreground

.

7

Linux Comandos File Permissions - Permissões de arquivo

U = User
G = Group
W = World
r = Read
w = write
x = execute
- = no access

.

8

Linux Comandos Networking - Gerenciamento de rede

ifconfig -a # Display all network interfaces and ip address

ifconfig eth0 # Display eth0 address and details

ethtool eth0 # Query or control network driver and hardware settings

ping host # Send ICMP echo request to hostwhois domain# Display whois information for domain

dig domain # Display DNS information for domain

dig -x IP_ADDRESS # Reverse lookup of IP_ADDRESS

host domain # Display DNS ip address for domain

hostname -i # Display the network address of the host name.

hostname -I # Display all local ip addresses

wget http://domain.com/file # Download http://domain.com/file

netstat -nutlp # Display listening tcp and udp ports and corresponding programs

.

9

Linux Comandos Archives (TAR Files) - Arquivos TAR

tar cf archive.tar directory # Create tar named archive.tar containing directory .

tar xf archive.tar # Extract the contents from archive.tar .

tar czf archive.tar.gz directory # Create a gzip compressed tar file name archive.tar.gz .

tar xzf archive.tar.gz # Extract a gzip compressed tar file.

tar cjf archive.tar.bz2 directory # Create a tar file with bzip2 compression

tar xjf archive.tar.bz2 # Extract a bzip2 compressed tar file.

.

10

Linux Comandos Instalação de pacotes

tar zxvf sourcecode.tar.gz
cd sourcecode
./configure
make
make install

.

11

Linux Comandos de busca

grep pattern file # Search for pattern in file

grep -r pattern directory # Search recursively for pattern in directory

locate name # Find files and directories by name

find /home/john -name 'prefix*' # Find files in /home/john that start with "prefix".

find /home -size +100M # Find files larger than 100MB in /home

.

12

Linux Comandos SSH Logins

ssh host # Connect to host as your local username.

ssh user@host # Connect to host as user

ssh -p port user@host # Connect to host using port

.

13

Linux Comandos Transferencia de arquivos - File Transfers

scp file.txt server:/tmp # Secure copy file.txt to the /tmp folder on server

scp server:/var/www/*.html /tmp # Copy *.html files from server to the local /tmp folder.

scp -r server:/var/www /tmp # Copy all files and directories recursively from server to the current system's /tmp folder.

rsync -a /home /backups/ # Synchronize /home to /backups/home

rsync -avz /home
server:/backups/ # Synchronize files/directories between the local and remote system with compression enabled

.

14

Linux Comandos de uso de disco - Disk Usage

df -h # Show free and used space on mounted filesystems

df -i # Show free and used inodes on mounted filesystems

fdisk -l # Display disks partitions sizes and types

du -ah # Display disk usage for all files and directories in human readable format

du -sh # Display total disk usage off the current directory

.

15

Linux Comandos navegação de diretórios

Directory Navigation

cd .. # To go up one level of the directory tree. (Change into the parent directory.)

cd # Go to the $HOME directory

cd /etc # Change to the /etc directory

.

# Linux Comandos File/Directory Basics - Básicos para Diretórios e arquivos

ls
List files

cp
Copy files

mv
Rename files

rm
Delete files

ln
Link files

cd
Change directory

pwd
Print current directory name

mkdir
Create directory

rmdir
Delete directory

.

Linux Comandos File Viewing - Visualização de arquivos

cat
View files

less
Page through files

head
View file beginning

tail
View file ending

nl
Number lines

od
View binary data

xxd
View binary data

gv
View Postscript/PDF files

xdvi
View TeX DVI files

.

Linux Comandos File Creation and Editing - Editar e criar arquivos

emacs
Text editor

vim
Text editor

umask
Set default file protections

soffice
Edit Word/Excel/ PowerPoint docs

abiword
Edit Word documents

gnumeric
Edit Excel documents

.

Linux Comandos File Properties - Propriedades de arquivos

stat
Display file attributes

wc
Count bytes/words/lines

du
Measure disk usage

file
Identify file types

touch
Change file timestamps

chown
Change file owner

chgrp
Change file group

chmod
Change file protections

chattr
Change advanced file attributes

lsattr
List advanced file attributes

.

Linux Comandos File Location - Localização de arquivos

find
Locate files

slocate
Locate files via index

which
Locate commands

whereis
Locate standard files

.

Linux Comandos File Text Manipulation - Manupulação de arquivos de texto

grep
Search text for matching lines

cut
Extract columns

paste
Append columns

tr
Translate characters

sort
Sort lines

uniq
Locate identical lines

tee
Copy stdin to a file and o stdout simultaneously

.

Linux Comandos File Compression - Compressão de arquivos

gzip
Compress files (GNU Zip)

compress
Compress files (Unix)

bzip2
Compress files (BZip2)

zip
Compress files (Windows Zip)

.

Linux Comandos File Comparison - Comparação de arquivos

diff
Compare files line by line

comm
Compare sorted files

cmp
Compare files byte
by byte

md5sum
Compute checksums

.

Linux Comandos Disks and Filesystems - Sistema de arquivos e discos

df
Show free disk space

mount
Make a disk accessible

fsck
Check a disk for errors

sync
Flush disk caches

.

Linux Comandos Backups and Remote Storage - Gerenciamento remoto e Backups

mt
Control a tape drive

dump
Back up a disk

restore
Restore a dump

tar
Read/write tape archives

cdrecord
Burn a CD

rsync
Mirror a set of files

.

Linux Comandos File/Directory Basics - Básicos para Diretórios e arquivos

ls
List files

cp
Copy files

mv
Rename files

rm
Delete files

ln
Link files

cd
Change directory

pwd
Print current directory
name

mkdir
Create directory

rmdir
Delete directory

.

SHELL SCRIPT LINUX BASH

.

COMANDOS MAIS USADOS DO BASH EM SHELL SCRIPT

.

Qual é o seu usuário?

.

Se você não tem certeza qual é o seu usuário, use o comando "whoami" sem aspas, para saber.

.

Como o prompt de usuário normal pode ser diferente para cada um, podemos em algum momento usar "prompt$" para indicar o prompt da linha de comando.

.

ESCOLHER O DIRETÓRIO ONDE COLOCAR O SCRIPT

Para que o script possa ser executado de qualquer parte do sistema, mova-o para um diretório que esteja no seu PATH. Para ver quais são estes diretórios, abra agora o terminal pelo menu do sistema e digite o comando:

echo $PATH

.

Se não tiver permissão de mover para um diretório do PATH, deixe-o dentro de seu diretório pessoal ($HOME). Digite no terminal: $HOME

.

CRIAR O ARQUIVO E COLOCAR NELE OS COMANDOS

Abra pelo menu do sistema o editor de texto gedit, pluma, leafpad, mousepad ou outro editor de textos de sua preferência para colocar todos os comandos dentro do arquivo.

.

COLOQUE A CHAMADA DO SHELL NA PRIMEIRA LINHA

A primeira linha do script deve ser:

#!/bin/bash

Para que ao ser executado, o sistema saiba que é o bash quem irá interpretar estes comandos.

.

TORNE O SCRIPT UM ARQUIVO EXECUTÁVEL

Use o seguinte comando para que seu script seja reconhecido pelo sistema como um comando executável:

chmod +x nome-do-teu-shellscript.sh

.

Para permitir que todos os usuários possam executar o script:

chmod a+x nome-do-teu-shellscript.sh

.

EXECUTE O SCRIPT

./nome-do-teu-shellscript.sh (Aqui "./" representa o diretório atual)

/home/seu-usuário/bin/nome-do-teu-shellscript.sh (Aqui informa onde está o script para que o bash execute em outra pasta)

.

BASH EXECUTANDO COMANDOS

.

Shell script é uma linguagem de script usada em vários sistemas operacionais, com diferentes dialetos, dependendo do interpretador de comandos utilizado.

Um exemplo de interpretador de comandos é o bash, usado na grande maioria das distribuições GNU/Linux.

A maior parte dos usuários classificam shell script como uma linguagem de fácil aprendizagem. O primeiro passo é, saber o que se deseja fazer, então ver qual o código que executa este comando em shell e aí criar, basta escrever o código em algum editor de texto e salvar. Veja só por exemplo, que de tempos em tempos você quer saber informações do sistema, instalar programas, remover programas, converter/alterar arquivos, fazer backups, adicionar informações, remover informações, etc.

.

AGORA ABRE O TERMINAL E DIGITA COMANDOS, POR EXEMPLO, DIGITE ESTES COMANDOS ABAIXO UM DE CADA VEZ:

echo

ls

echo ''

echo ""

echo "Olá!"

printf 'Bem vindo ao bash!' (Aperte a tecla enter e digite: ls)

echo '#!/bin/bash'

echo "#!/bin/bash"

echo ; echo "Olá!" ; echo

echo -e 'Bom\nDia\nMundo!'

echo -e "Bom\nDia\nMundo!"

echo "Hello world!"

echo "Hello "world"!"

echo "Hello \"world\"!"

printf "Hello world" (Aperte a tecla enter e digite: cd ~)

pwd

ls -t

sleep 7

echo ; echo 'Olá!' ; sleep 3 ; ls -t

free -h -t

free -th

sleep 4

date

cal

du -h

uptime

df -h

clear

free -tmlh

df -a -h

df -k -l

df -T -m

echo ; whoami ; echo

ls ; echo ; pwd ; echo

echo ; ls -at ; echo

du *

ls -lah

du -hcs

du -ach

du -Sh

du -Sk

clear

echo ; echo 'df: Relata o espaço de disco usado pelo sistema (Usado e Livre)' ; echo

ls -hat

echo ; echo "du: Relata o espaço utilizado no disco de tal arquivo ou diretório" ; echo

whereis bash

VALOR="Linux"

echo $VALOR

echo $VALOR $VALOR

VALOR='ls -t'

$VALOR

echo $VALOR

clear

VALOR='free -h -t'

$VALOR

echo $VALOR

echo VALOR

read VALOR (aperte a tecla enter, digite: "ls" sem aspas e aperte enter.)

$VALOR

read VALOR (aperte a tecla enter, digite: "uptime" sem aspas e aperte enter.)

$VALOR

echo ; $VALOR ; echo ; $VALOR ; echo

echo ; $VALOR ; sleep 4 ; echo ; $VALOR ; echo

clear

unset VALOR

echo ; $VALOR

$VALOR

echo -e '\nOlá!\nVamos\nSaber\nOs\nComandos\ndo\nShellscript Linux!'

clear ; echo -e '\n \nOlá!\n \nVamos\n \nSaber\n \nOs\n \nComandos\n \ndo\n \nShellscript Linux!\n'

HOJE=$(lsblk)

echo "Informação sobre dispositivos de bloco: $HOJE"

clear

echo 'Informação sobre dispositivos de bloco: $HOJE'

unset HOJE

echo $HOJE

echo $((2*3))

echo $((2*4-2/2+3))

VALOR=44

echo $((VALOR*1))

echo $((VALOR*2))

echo $((VALOR*3))

VALOR=$((VALOR+1))

echo $VALOR

VALOR=$((VALOR+11))

echo $VALOR

VALOR=$((VALOR+1))

echo $VALOR

VALOR=$((VALOR+11))

echo $VALOR

unset VALOR

echo $VALOR

VALOR=$(uname -a)

echo $VALOR

HOJE=$(arch)

echo $HOJE

clear

echo "Informação sobre o kernel: $VALOR" ; echo ; echo "Informação sobre a arquitetura do sistema: $HOJE"

echo 'Informação sobre o kernel: $VALOR' ; echo ; echo 'Informação sobre a arquitetura do sistema: $HOJE'

echo ; echo 'Informação sobre o kernel: $VALOR' ; echo ; echo 'Informação sobre a arquitetura do sistema: $HOJE' ; echo

unset VALOR

unset HOJE

echo "Informação sobre o kernel: $VALOR" ; echo ; echo "Informação sobre a arquitetura do sistema: $HOJE"

echo 'Informação sobre o kernel: $VALOR' ; echo ; echo 'Informação sobre a arquitetura do sistema: $HOJE'

clear

printf "%-5s %-10s %-4s\n" No Nome Pontos

printf "%-5s %-10s %-4.2f\n" 1 Marta 8

printf "%-5s %-10s %-4.2f\n" 2 Joel 9

printf "%-5s %-10s %-4.2f\n" 3 Carlos 7

echo -e "\e[1;31m Este é o texto em vermelho \e[0m"

unset NUM

clear

exit

.

Muito bom que você digitou um comando de cada vez!!!

O comandos mais longos pode copiar e colar no terminal se quiser, mas no início seria melhor digitar...

Saiba que a partir deste momento você já está entendendo coisas extremamente úteis para escrever shellscript usando o Bash!

Uma coisa interessante sobre os comandos acima, é que para estudar eles, você não precisa estar conectado a internet.

Os comandos acima oferecem informações interessantes e úteis. Podemos colocar todos eles em um só script e executar. Dependendo do caso, é mais fácil que digitar um a um de cada vez toda vez que precisar.

.

SE PUDER, ANTES DE CONTINUAR EXECUTE OS COMANDOS ACIMA QUE TE CHAMARAM MAIS A ATENÇÃO DE NOVO POIS, EXECUTAR ELES É MUITO DIDÁTICO. NADA MELHOR QUE APRENDER PRATICANDO.

.

ASPAS SIMPLES ' E ASPAS DUPLAS ":

Aspas duplas permitem interpretar caracteres especiais.

Aspas simples desabilitam esta interpretação.

.

CARACTERES DE ESCAPE:

echo "Hello \"world\"!"

.

TODO SCRIPT ESCRITO PARA RODAR NO BASH COMEÇA COM:

#!/bin/bash

Após "#!/bin/bash" de um espaço entre linhas e então pode começar a digitar comandos.

.

Exemplo:

#!/bin/bash

clear

echo ; date ; echo ; sleep 4

echo ; cal ; echo ; sleep 4

echo ; uptime ; echo ; sleep 4

echo ; df -h ; echo ; sleep 4

echo ; free -html ; echo ; sleep 4

echo ; whoami ; echo ; sleep 4

echo ; pwd ; echo ; sleep 4

echo ; ls -at ; echo ; sleep 4

echo ; whereis bash ; echo ; sleep 4

echo ; echo 'Este é o fim do script 01-script.sh' ; echo ; sleep 4

exit

# Fim do script

.

ESTE SCRIPT ÚTIL E INOFENSIVO ACIMA SERÁ SALVO NA PASTA HOME, A PASTA DA CASINHA, USANDO UM EDITOR DE TEXTO COM O NOME DE:

01-script.sh

.

Posso melhorar/tornar mais amigável este script acima explicando sobre cada comando:

#!/bin/bash

clear

echo ; echo 'Hoje é data:' ; echo ; sleep 2

echo ; date ; echo ; sleep 4

echo ; echo 'Hoje pelo calendário é:' ; echo ; sleep 2

echo ; cal ; echo ; sleep 4

echo ; echo 'Esta máquina está funcionando a:' ; echo ; sleep 2

echo ; uptime ; echo ; sleep 4

echo ; echo 'Sobre o tamanho desta pasta:' ; echo ; sleep 2

echo ; df -h ; echo ; sleep 6

echo ; echo 'Sobre a memória RAM:' ; echo ; sleep 2

echo ; free -html ; echo ; sleep 6

echo ; echo 'Você está logado como:' ; echo ; sleep 2

echo ; whoami ; echo ; sleep 4

echo ; echo 'Você está em:' ; echo ; sleep 2

echo ; pwd ; echo ; sleep 4

echo ; echo 'Neste diretório/pasta tem:' ; echo ; sleep 2

echo ; ls -at ; echo ; sleep 6

echo ; echo 'O Bash está em:' ; echo ; sleep 2

echo ; whereis bash ; echo ; sleep 4

echo ; echo 'Este é o fim do script 01-script.sh' ; echo ; sleep 4

exit

# Fim do script

.

No Linux o script deve ter permissão de execução, isto pode ser feito abrindo o terminal pelo menu do sistema e executando o comando:

chmod +x 01-script.sh

.

Depois de salvo você tem que executar o arquivo, dessa forma:

./01-script.sh

.

Viu alguma utilidade neste pequeno script?

Então siga adiante.

.

IMPORTANTE:

Para estudar shell script tem que ser como usuário normal. Se você está acessando o sistema como usuário administrador (root), saia e entre como um usuário normal. É muito perigoso estudar shell usando o superusuário, você pode danificar o sistema com um comando errado.

Ok, continuemos.

.

Para exibir um manual do bash ou mesmo do comando 'chmod', digite na linha de comando:

man bash

man chmod

.

É possível executar o arquivo mesmo sem modificar a permissão de execução, por exemplo, se for um arquivo escrito para ser executado pelo bash, usar:

sh ./"Nome do arquivo, sem aspas"

.

SHELL

É importante saber o que é um Shell.

Na linha de comandos de um shell, podemos utilizar diversos comandos um após o outro, ou mesmo combiná-los numa mesma linha.

Se colocarmos diversas linhas de comandos em um arquivo texto simples, teremos em mãos um Shell Script, ou um script em shell, já que Script é uma descrição geral de qualquer programa escrito em linguagem interpretada, ou seja, não compilada.

Outros exemplos de linguagens para scripts são o PHP, Perl, Python, JavaScript e muitos outros. Podemos então ter um script em php, um script perl e assim em diante.

Uma vez criado, um ShellScript pode ser reutilizado quantas vezes for necessário.

Seu uso, portanto, é indicado na automação de tarefas que serão realizadas mais de uma vez.

Todo sistema Unix e similares são repletos de scripts em shell para a realização das mais diversas atividades administrativas e de manutenção do sistema.

Os arquivos de lote (batch - arquivos *.bat) do Windows são também exemplos de ShellScripts, já que são escritos em linguagem interpretada e executados por um Shell do Windows, em geral o command.com ou hoje em dia o cmd.exe.

Os Shells do Unix, porém, são inumeras vezes mais poderosos que o interpretador de comandos do Windows, podendo executar tarefas muito mais complexas e elaboradas.

OS SCRIPTS SHELL PODEM SER AGENDADOS PARA EXECUÇÃO ATRAVÉS DA TABELA CRONTAB, ENTRE OUTRAS COISAS.

É uma ferramenta indispensável aos administradores de sistemas Unix.

O Shell mais comum e provavelmente o que possui mais scripts escritos para ele é também um dos mais antigos e simples, o sh.

Este shell está presente em todo o sistema tipo Unix, incluído o Linux, FreeBSD, AIX, HP-UX, OpenBSD, Solaris, NetBSD, Irix, etc. Por ser o shell nativo mais comum é natural que se prefira escrever scripts para ele, tornando o script mais facilmente portável para outro sistema.

Os Shells não estão diretamente associados a um ou outro tipo de Unix, embora várias empresas comerciais tenham suas próprias versões de Shell. No software livre o Shell utilizado em um sistema em geral é exatamente o mesmo utilizado em outro. Por exemplo, o bash encontrado no Linux é o mesmo shell bash encontrado no FreeBSD e pode também facilmente ser instalado no Solaris, Windows através do Cygwin [1] ou outros sistemas Unix comerciais para passar a ser utilizado como interface direta de comandos ou como interpretador de scripts. O mesmo acontece com o tcsh e vários outros shells desenvolvidos no modelo de software livre.

.

INTERAGIR COM O USUÁRIO

.

Para o script ficar mais completo, vamos colocar uma interação mínima com o usuário, pedindo uma confirmação antes de executar os comandos.

.

#!/bin/bash

clear

echo "Vou buscar os dados do sistema. Posso continuar? [S/n] "

read RESPOSTA

test "$RESPOSTA" = "n" && exit

echo ; echo "Data e Horário:" ; echo

date

echo

echo "Uso do disco:" ; echo

df -ht

echo

echo "Usuários conectados:" ; echo

w

echo ; echo "Seu nome de login é:"

whoami

echo

exit

# Fim do script

.

O comando "read" leu o que o usuário digitou e guardou na variável RESPOSTA. Logo em seguida, o comando "test" verificou se o conteúdo dessa variável era "n". Se afirmativo, o comando "exit" foi chamado e o script foi finalizado. Nessa linha há vários detalhes importantes:

O conteúdo da variável é acessado colocando-se um cifrão "$" na frente

O comando test é útil para fazer vários tipos de verificações em textos e arquivos

O operador lógico "&&", só executa o segundo comando caso o primeiro tenha sido OK. O operador inverso é o "||"

.

MELHORAR O CÓDIGO DO SCRIPT

.

Com o tempo, o script vai crescer, mais comandos vão ser adicionados e quanto maior, mais difícil encontrar o ponto certo onde fazer a alteração ou corrigir algum erro. Para poupar horas de estresse, e facilitar as manutenções futuras, é preciso deixar o código visualmente mais agradável e espaçado, e colocar comentários esclarecedores.

.

#!/bin/bash

# nome-do-script - script que mostra informações sobre o sistema

# Autor: Fulano da Silva

# Pede uma confirmação do usuário antes de executar

clear

echo "Vou buscar os dados do sistema. Posso continuar? [S/n]"

read RESPOSTA

# Se ele digitou 'n', vamos interromper o script

test "$RESPOSTA" = "n" && exit

# O date mostra a data e a hora correntes

sleep 3 ; echo "Data e Horário:" ; echo

date

sleep 3

echo

# O df mostra as partições e quanto cada uma ocupa no disco
echo "Uso do disco:"

sleep 3

echo

df

echo

sleep 6

# O w mostra os usuários que estão conectados nesta máquina

echo "Usuários conectados:"

sleep 3

echo

w

sleep 3

echo

# Fim do script

.

Basta iniciar a linha com um "#" e escrever o texto do comentário em seguida. Estas linhas são ignoradas pelo shell durante a execução. O cabeçalho com informações sobre o script e seu autor também é importante para ter-se uma visão geral do que o script faz, sem precisar decifrar seu código. Também é possível colocar comentários no meio da linha # como este

.

CARACTERÍSTICAS

.

OS SCRIPTS SHELL PODEM CONTER ESTRUTURAS DE PROGRAMAÇÃO TAIS COMO:

.

ESTRUTURAS DE DECISÃO (if)

Recurso utilizado para dar sequencia em fluxos de execução baseado decisões. Cuja sintaxe é:

- Condição Verificada é o teste que definirá se controle deve ser passado para dentro do bloco then, observe que esse teste é feito sobre a saída de um comando.
- Ação são comandos a serem executados em caso verdadeiro da condição verificada.

.

OPERADORES PARA NÚMEROS

-eq Verifica se é igual,
-ne Verifica se é diferente,
-lt Verifica se é menor,
-gt Verifica se é maior,
-le Verifica se é menor ou igual,
-ge Verifica se é maior ou igual.

.

OPERADORES PARA TEXTO

!= Verifica se é diferente,
= Verifica se é igual.

.

OPERADORES LÓGICOS

! Lógica NOT,
-o Lógica OU, (OR) ou ||,
-a Lógica E, (AND) ou &&.

.

OPERADOR PARA arquivos/

-d Verifica se é diretório,
-f Verifica se é arquivo,
-e Verifica se existe.

.

Ex:

# !/bin/baxh
# Uso de Estrutura de Decisão
clear

echo 'opções'
echo '======'
echo ' -> Data do Sistema'
echo ' -> Uso do Sistema'

read opcao

if [ "$opcao" -eq 1 ]
then
echo 'Data do sistema: ' && date

elif [ "$opcao" -eq 2 ]
then

echo 'Uso do disco: ' && df -Th
fi

# Fim do script

.

ESTRUTURAS DE REPETIÇÃO (FOR)(WHILE)

.

ESTRUTURA DE REPETIÇÃO FOR

Permite que ações de iteração sejam executadas sobre determinados comandos ou variáveis até que a condição seja satisfeita.

# !/bin/bash

clear

echo "DIAS DA SEMANA"
for dia in seg ter qua qui sex sab dom
do
echo "$dia"
done

# Fim do script

.

ESTRUTURA DE REPETIÇÃO WHILE

Em situações onde sabemos até onde o loop irá realizar uma contagem o ideal é usar o for entretanto em cenarios onde a iteração deve cessar somente após se satisfazer uma condição o uso do laço while é mais indicado. Ex:

# /bin/bash

clear
var=1
while [ $var -le 7 ]
do
echo "Valor de var: $var"
var=$((var+1))
done

# Fim do script

.

FUNÇÕES E ARGUMENTOS

Ex:

# !/bin/bash
# REALIZAR BACKUP DO DIR

echo -e " \033[1;33m Digite o caminho de origem.: \033[0m "
read DIR_ORIGEM

clear

echo -e " \033[1;34m Digite o caminho de destino.: \033[0m "
read DIR_DESTINO

clear

verifica_argumentos(){

if [ $# -lt 1 ];
then
echo "Faltou informar um dos argumentos (parametros) necessarios!"
exit 1
fi
}

copia_arquivos(){

verifica_argumentos

clear

echo "Realizando backup..."

#Verificando se o dir de destino existe

if ! [ -d $DIR_DESTINO ]
then
mkdir $DIR_DESTINO
echo "Diretorio de Destino Criado"
fi

#COPIANDO ARQUIVOS

for arq in `ls $DIR_ORIGEM`
do
cp /$DIR_ORIGEM/$arq $DIR_DESTINO/$arq.bak
done

}

copia_arquivos

# Fim do script

DEFINIÇÕES DE VARIÁVEIS E ESCOPO DESTAS

Variáveis são definidas pela nomenclatura NOME_VARIAVEL="Valor da Variável". O valor pode ser tanto numérico quanto texto.

Nome="Joel"

Se quisermos acessá-la, basta fazer referência a ela com o caractere $ (cifrão) antes do nome: o comando echo $Nome, por exemplo, retornará a palavra "Joel".

Se quiser sabe informações sobre os sistemas de arquivo nos quais cada ARQUIVO reside ou, por padrão, sobre todos os sistemas de arquivos posso abrir um terminal e digitar:

VarInfo="df -h"

Depois digito no terminal "$VarInfo" sem aspas.

.

VARIÁVEIS DE AMBIENTE

As variáveis de ambiente independem da definição do usuario. Elas são criadas automaticamente, no momento em que se faz o login no sistema.

Ex:

PATH: define diretórios de procura por programas executados no shell;
USER: informa o nome do usuário do shell;
HOME: informa o caminho do diretório home do usuário;
PWD: diretório atual;

.

As variáveis são a base de qualquer script. É dentro delas que os dados obtidos durante a execução do script serão armazenados. Para definir uma variável, basta usar o sinal de igual "=" e para ver seu valor, usa-se o "echo":

.

Execute estes comandos abaixo no terminal:

.

VARIAVEL="um dois tres"

echo $VARIAVEL

echo $VARIAVEL $VARIAVEL

.

Para remover a variável acima:

unset VARIAVEL

.

Teste:

echo $VARIAVEL

.

É possível armazenar a saída de um comando dentro de uma variável. Ao invés de aspas, o comando deve ser colocado entre "$(...)", execute no terminal os comandos abaixo:

HOJE=$(date)

echo "Hoje é: $HOJE"

unset HOJE

echo $HOJE

HOJE=$(ls)

echo "O conteúdo desta pasta tem: $HOJE"

unset HOJE

echo $HOJE

HOJE=$(free -hmt)

echo "Informando sobre a memória desta máquina: $HOJE"

unset HOJE

echo $HOJE

.

Exemplos de uso do shell script:

Apagar arquivos velhos - Apagar periodicamente arquivos mais velhos que 30 dias do diretório /tmp:

#!/bin/bash

cd /tmp
find . -type f -mtime +30 -delete

# Fim do script

Este seria o conteúdo de um shell script que sempre que fosse executado apagaria arquivos com data de modificação maior que 30 dias a partir do diretório /tmp do sistema de arquivos.

Notem que ele é nada mais do que uma associação de 2 comandos (cd e find) em um arquivo para facilitar a repetição da tarefa. Este poderia ser, por exemplo, o conteúdo do arquivo /bin/limpatmp.sh e poderíamos chamar este script pela linha de comandos sempre que desejássemos repetir esta ação:

$ limpatmp.sh

Onde o símbolo "$" representa o prompt de comandos. Do ponto de vista do usuário este seria mais um comando disponível para uso.

Os scripts em shell são também muito empregados junto à inicialização do sistema (para auto-iniciar tarefas) ou como mini-aplicativos, que facilitam tarefas dos usuários, tais como montagem de dispositivos, menus de ajuda, etc.

Sua primeira linha obrigatoriamente começa com um "#!" (que não se deve confundir com um comentário qualquer, pois realmente é uma exceção; este par se chama, em inglês, de shebang), informando diretamente ao núcleo (kernel) qual interpretador ele deverá usar, juntamente com seu caminho, de acordo com a necessidade de cada caso. Exemplo:

#!/bin/bash

Em seguida, são adicionados os comandos desejados, um por linha, ou separados por ponto e vírgula. Exemplo:

mount -t reiserfs /dev/hda1 /mnt/hda1

ls /mnt/hda1

cp -r /mnt/hda1/* /home/user/backup
umount /dev/hda1

Por fim, dá-se a permissão de execução a este arquivo de texto simples ("chmod +x arquivo").

.

DATA ANTERIOR

.

#!/bin/bash

# Função em Bash para retornar a data anterior, levando em conta o mês e ano.

fn_data_anterior()
{
DIA=$D
MES=$M
ANO=$A

# Dado DIA, MES e ANO numéricos, obtém a data do dia anterior

DIA=`expr $DIA - 1`
if [ $DIA -eq 0 ]; then
MES=`expr $MES - 1`
if [ $MES -eq 0 ]; then
MES=12
ANO=`expr $ANO - 1`
fi
DIA=`cal $MES $ANO`
DIA=`echo $DIA | awk '{ print $NF }'`
fi
}

ano=`date +%Y`;
mes=`date +%m`;
let dia=10\#`date +%d`;

if (( $dia". Para guardar a saída do comando anterior no arquivo "saida", basta fazer:

cat /etc/passwd | grep root | cut -c1-10 > saida

cat saida

.

O COMANDO TEST

O canivete suíço dos comandos do shell é o "test", que consegue fazer vários tipos de testes em números, textos e arquivos. Ele possui várias opções para indicar que tipo de teste será feito, algumas delas:

-lt Núm. é menor que (LessThan)

-d É um diretório

-gt Núm. é maior que (GreaterThan)

-f É um arquivo normal

-le Núm. é menor igual (LessEqual)

-r O arquivo tem permissão de leitura

-ge Núm. é maior igual (GreaterEqual)

-s O tamanho do arquivo é maior que zero

-eq Núm. é igual (EQual)

-w O arquivo tem permissão de escrita

-ne Núm. é diferente (NotEqual)

-nt O arquivo é mais recente (NewerThan)

= String é igual

-ot O arquivo é mais antigo (OlderThan)

!= String é diferente

-ef O arquivo é o mesmo (EqualFile)

-n String é não nula

-a E lógico (AND)

-z String é nula

-o OU lógico (OR)

.

SCRIPT QUE TESTA ARQUIVOS

Tente fazer um script "testa-arquivos", que pede ao usuário para digitar um arquivo e testa se este arquivo existe. Se sim, diz se é um arquivo ou um diretório.

.

CONCEITOS MAIS AVANÇADOS

.

If, for e while

.

Assim como qualquer outra linguagem de programação, o shell também tem estruturas para se fazer condicionais e loop. As mais usadas são if, for e while.

.

Então daqui por diante, sabemos o básico, o necessário para se fazer um script de funcionalidade mínima. E este mínimo pode fazer coisas incríveis.

.

Ex:

if COMANDO
then
comandos
else
comandos
fi

# Fim do script

Ex:

for VAR in LISTA
do
comandos
done

# Fim do script

Ex:

while COMANDO
do
comandos
done

# Fim do script

.

Diferente de outras linguagens, o if testa um comando e não uma condição. Porém como já conhecemos qual o comando do shell que testa condições, é só usá-lo em conjunto com o if. Por exemplo, para saber se uma variável é maior ou menor do que 10 e mostrar uma mensagem na tela informando:

.

Ex:

if test "$VARIAVEL" -gt 10
then
echo "é maior que 10"
else
echo "é menor que 10"
fi

# Fim do script

.

Há um atalho para o test , que é o comando [. Ambos são exatamente o mesmo comando, porém usar o [ deixa o if mais parecido com o formato tradicional de outras linguagens:

.

Ex:

if [ "$VARIAVEL" -gt 10 ]
then
echo "é maior que 10"
else
echo "é menor que 10"
fi

# Fim do script

.

Se usar o [, também é preciso fechá-lo com o ], e sempre devem ter espaços ao redor. É recomendado evitar esta sintaxe para diminuir suas chances de erro.

.

Já o while é um laço que é executado enquanto um comando retorna OK. Novamente o test é bom de ser usado. Por exemplo, para segurar o processamento do script enquanto um arquivo de lock não é removido:

.

Ex:

while test -f /tmp/lock
do
echo "Script travado..."
sleep 1
done

# Fim do script

.

Ex:

E por fim, o for percorre uma lista de palavras, pegando uma por vez:

for numero in um dois três quatro cinco
do
echo "Contando: $numero"
done

# Fim do script

.

Uma ferramenta muito útil para usar com o for é o seq, que gera uma seqüência numérica.

.

Para fazer o loop andar 10 passos, pode-se fazer:

for passo in $(seq 10)

.

O mesmo pode ser feito com o while, usando um contador:

i=0
while test $i -le 10
do
i=$((i+1))
echo "Contando: $i"
done

# Fim do script

.

Até Breve

.

:)

.

Fonte: https://semanickz.wordpress.com/2018/02/22/comandos-mais-usados-em-shellscript-linux/

.

Crie seu próprio epub deste artigo usando o programa Sigil

.

Comandos mais usados no ShellScript

.

Comandos mais usados em Shell Script no Linux

.

Qual é o seu usuário?

.

Se você não tem certeza qual é o seu usuário, use o comando "whoami" sem aspas, para saber.

.

Como o prompt de usuário normal pode ser diferente para cada um, podemos em algum momento usar "prompt$" para indicar o prompt da linha de comando.

.

ESCOLHER O DIRETÓRIO ONDE COLOCAR O SCRIPT

Para que o script possa ser executado de qualquer parte do sistema, mova-o para um diretório que esteja no seu PATH. Para ver quais são estes diretórios, abra agora o terminal pelo menu do sistema e digite o comando:

echo $PATH

.

Se não tiver permissão de mover para um diretório do PATH, deixe-o dentro de seu diretório pessoal ($HOME). Digite no terminal: $HOME

.

CRIAR O ARQUIVO E COLOCAR NELE OS COMANDOS

Abra pelo menu do sistema o editor de texto gedit, pluma, leafpad, mousepad ou outro editor de textos de sua preferência para colocar todos os comandos dentro do arquivo.

.

COLOQUE A CHAMADA DO SHELL NA PRIMEIRA LINHA

A primeira linha do script deve ser:

#!/bin/bash

Para que ao ser executado, o sistema saiba que é o bash quem irá interpretar estes comandos.

.

TORNE O SCRIPT UM ARQUIVO EXECUTÁVEL

Use o seguinte comando para que seu script seja reconhecido pelo sistema como um comando executável:

chmod +x nome-do-teu-shellscript.sh

.

Para permitir que todos os usuários possam executar o script:

chmod a+x nome-do-teu-shellscript.sh

.

EXECUTE O SCRIPT

./nome-do-teu-shellscript.sh (Aqui "./" representa o diretório atual)

/home/seu-usuário/bin/nome-do-teu-shellscript.sh (Aqui informa onde está o script para que o bash execute em outra pasta)

.

BASH EXECUTANDO COMANDOS

Shell script é uma linguagem de script usada em vários sistemas operacionais, com diferentes dialetos, dependendo do interpretador de comandos utilizado.

Um exemplo de interpretador de comandos é o bash, usado na grande maioria das distribuições GNU/Linux.

A maior parte dos usuários classificam shell script como uma linguagem de fácil aprendizagem. O primeiro passo é, saber o que se deseja fazer, então ver qual o código que executa este comando em shell e aí criar, basta escrever o código em algum editor de texto e salvar. Veja só por exemplo, que de tempos em tempos você quer saber informações do sistema, instalar programas, remover programas, converter/alterar arquivos, fazer backups, adicionar informações, remover informações, etc.

.

AGORA ABRE O TERMINAL E DIGITA COMANDOS, POR EXEMPLO, DIGITE ESTES COMANDOS ABAIXO UM DE CADA VEZ:

echo

ls

echo ''

echo ""

echo "Olá!"

printf 'Bem vindo ao bash!' (Aperte a tecla enter e digite: ls)

echo '#!/bin/bash'

echo "#!/bin/bash"

echo ; echo "Olá!" ; echo

echo -e 'Bom\nDia\nMundo!'

echo "Hello world!"

echo "Hello "world"!"

echo "Hello \"world\"!"

printf "Hello world" (Aperte a tecla enter e digite: cd ~)

pwd

ls -t

sleep 7

echo ; echo 'Olá!' ; sleep 3 ; ls -t

free -h -t

free -th

sleep 4

date

cal

du -h

uptime

df -h

clear

free -tmlh

df -a -h

df -k -l

df -T -m

echo ; whoami ; echo

ls ; echo ; pwd ; echo

echo ; ls -at ; echo

du *

ls -lah

du -hcs

du -ach

du -Sh

du -Sk

clear

echo ; echo 'df: Relata o espaço de disco usado pelo sistema (Usado e Livre)' ; echo

ls -hat

echo ; echo "du: Relata o espaço utilizado no disco de tal arquivo ou diretório" ; echo

whereis bash

VALOR="Linux"

echo $VALOR

echo $VALOR $VALOR

VALOR='ls -t'

$VALOR

echo $VALOR

VALOR='free -h -t'

$VALOR

echo $VALOR

echo VALOR

read VALOR (aperte a tecla enter, digite: "ls" sem aspas e aperte enter.)

$VALOR

read VALOR (aperte a tecla enter, digite: "uptime" sem aspas e aperte enter.)

$VALOR

echo ; $VALOR ; echo ; $VALOR ; echo

echo ; $VALOR ; sleep 4 ; echo ; $VALOR ; echo

unset VALOR

echo ; $VALOR

$VALOR

clear

echo -e '\nOlá!\nVamos\nSaber\nOs\nComandos\ndo\nShellscript Linux!'

clear ; echo -e '\n \nOlá!\n \nVamos\n \nSaber\n \nOs\n \nComandos\n \ndo\n \nShellscript Linux!\n'

HOJE=$(lsblk)

echo "Informação sobre dispositivos de bloco: $HOJE"

unset HOJE

echo $HOJE

echo $((2*3))

echo $((2*4-2/2+3))

VALOR=44

echo $((VALOR*1))

echo $((VALOR*2))

echo $((VALOR*3))

VALOR=$((VALOR+1))

echo $VALOR

VALOR=$((VALOR+11))

echo $VALOR

VALOR=$((VALOR+1))

echo $VALOR

VALOR=$((VALOR+11))

echo $VALOR

unset VALOR

echo $VALOR

VALOR=$(uname -a)

echo $VALOR

HOJE=$(arch)

echo $HOJE

echo "Informação sobre o kernel: $VALOR" ; echo ; echo "Informação sobre a arquitetura do sistema: $HOJE"

echo 'Informação sobre o kernel: $VALOR' ; echo ; echo 'Informação sobre a arquitetura do sistema: $HOJE'

unset VALOR

unset HOJE

echo "Informação sobre o kernel: $VALOR" ; echo ; echo "Informação sobre a arquitetura do sistema: $HOJE"

echo 'Informação sobre o kernel: $VALOR' ; echo ; echo 'Informação sobre a arquitetura do sistema: $HOJE'

printf "%-5s %-10s %-4s\n" No Nome Pontos

printf "%-5s %-10s %-4.2f\n" 1 Marta 8

printf "%-5s %-10s %-4.2f\n" 2 Joel 9

printf "%-5s %-10s %-4.2f\n" 3 Carlos 7

clear

exit

.

Muito bom que você digitou um comando de cada vez!!!

O comandos mais longos pode copiar e colar no terminal se quiser, mas no início seria melhor digitar...

Saiba que a partir deste momento você já está entendendo coisas extremamente úteis para escrever shellscript usando o Bash!

Uma coisa interessante sobre os comandos acima, é que para estudar eles, você não precisa estar conectado a internet.

Os comandos acima oferecem informações interessantes e úteis. Podemos colocar todos eles em um só script e executar. Dependendo do caso, é mais fácil que digitar um a um de cada vez toda vez que precisar.

.

SE PUDER, ANTES DE CONTINUAR EXECUTE OS COMANDOS ACIMA QUE TE CHAMARAM MAIS A ATENÇÃO DE NOVO POIS, EXECUTAR ELES É MUITO DIDÁTICO. NADA MELHOR QUE APRENDER PRATICANDO.

.

ASPAS SIMPLES ' E ASPAS DUPLAS ":

Aspas duplas permitem interpretar caracteres especiais.

Aspas simples desabilitam esta interpretação.

.

CARACTERES DE ESCAPE:

echo "Hello \"world\"!"

.

TODO SCRIPT ESCRITO PARA RODAR NO BASH COMEÇA COM:

#!/bin/bash

Após "#!/bin/bash" de um espaço entre linhas e então pode começar a digitar comandos.

.

Exemplo:

#!/bin/bash

clear

echo ; date ; echo ; sleep 4

echo ; cal ; echo ; sleep 4

echo ; uptime ; echo ; sleep 4

echo ; df -h ; echo ; sleep 4

echo ; free -html ; echo ; sleep 4

echo ; whoami ; echo ; sleep 4

echo ; pwd ; echo ; sleep 4

echo ; ls -at ; echo ; sleep 4

echo ; whereis bash ; echo ; sleep 4

echo ; echo 'Este é o fim do script 01-script.sh' ; echo ; sleep 4

exit

# Fim do script

.

ESTE SCRIPT ÚTIL E INOFENSIVO ACIMA SERÁ SALVO NA PASTA HOME, A PASTA DA CASINHA, USANDO UM EDITOR DE TEXTO COM O NOME DE:

01-script.sh

.

Posso melhorar/tornar mais amigável este script acima explicando sobre cada comando:

#!/bin/bash

clear

echo ; echo 'Hoje é data:' ; echo ; sleep 2

echo ; date ; echo ; sleep 4

echo ; echo 'Hoje pelo calendário é:' ; echo ; sleep 2

echo ; cal ; echo ; sleep 4

echo ; echo 'Esta máquina está funcionando a:' ; echo ; sleep 2

echo ; uptime ; echo ; sleep 4

echo ; echo 'Sobre o tamanho desta pasta:' ; echo ; sleep 2

echo ; df -h ; echo ; sleep 6

echo ; echo 'Sobre a memória RAM:' ; echo ; sleep 2

echo ; free -html ; echo ; sleep 6

echo ; echo 'Você está logado como:' ; echo ; sleep 2

echo ; whoami ; echo ; sleep 4

echo ; echo 'Você está em:' ; echo ; sleep 2

echo ; pwd ; echo ; sleep 4

echo ; echo 'Neste diretório/pasta tem:' ; echo ; sleep 2

echo ; ls -at ; echo ; sleep 6

echo ; echo 'O Bash está em:' ; echo ; sleep 2

echo ; whereis bash ; echo ; sleep 4

echo ; echo 'Este é o fim do script 01-script.sh' ; echo ; sleep 4

exit

# Fim do script

.

No Linux o script deve ter permissão de execução, isto pode ser feito abrindo o terminal pelo menu do sistema e executando o comando:

chmod +x 01-script.sh

.

Depois de salvo você tem que executar o arquivo, dessa forma:

./01-script.sh

.

Viu alguma utilidade neste pequeno script?

Então siga adiante.

.

IMPORTANTE:

Para estudar shell script tem que ser como usuário normal. Se você está acessando o sistema como usuário administrador (root), saia e entre como um usuário normal. É muito perigoso estudar shell usando o superusuário, você pode danificar o sistema com um comando errado.

Ok, continuemos.

.

Para exibir um manual do bash ou mesmo do comando 'chmod', digite na linha de comando:

man bash

man chmod

.

É possível executar o arquivo mesmo sem modificar a permissão de execução, por exemplo, se for um arquivo escrito para ser executado pelo bash, usar:

sh ./"Nome do arquivo, sem aspas"

.

SHELL

É importante saber o que é um Shell.

Na linha de comandos de um shell, podemos utilizar diversos comandos um após o outro, ou mesmo combiná-los numa mesma linha.

Se colocarmos diversas linhas de comandos em um arquivo texto simples, teremos em mãos um Shell Script, ou um script em shell, já que Script é uma descrição geral de qualquer programa escrito em linguagem interpretada, ou seja, não compilada.

Outros exemplos de linguagens para scripts são o PHP, Perl, Python, JavaScript e muitos outros. Podemos então ter um script em php, um script perl e assim em diante.

Uma vez criado, um ShellScript pode ser reutilizado quantas vezes for necessário.

Seu uso, portanto, é indicado na automação de tarefas que serão realizadas mais de uma vez.

Todo sistema Unix e similares são repletos de scripts em shell para a realização das mais diversas atividades administrativas e de manutenção do sistema.

Os arquivos de lote (batch - arquivos *.bat) do Windows são também exemplos de ShellScripts, já que são escritos em linguagem interpretada e executados por um Shell do Windows, em geral o command.com ou hoje em dia o cmd.exe.

Os Shells do Unix, porém, são inumeras vezes mais poderosos que o interpretador de comandos do Windows, podendo executar tarefas muito mais complexas e elaboradas.

OS SCRIPTS SHELL PODEM SER AGENDADOS PARA EXECUÇÃO ATRAVÉS DA TABELA CRONTAB, ENTRE OUTRAS COISAS.

É uma ferramenta indispensável aos administradores de sistemas Unix.

O Shell mais comum e provavelmente o que possui mais scripts escritos para ele é também um dos mais antigos e simples, o sh.

Este shell está presente em todo o sistema tipo Unix, incluído o Linux, FreeBSD, AIX, HP-UX, OpenBSD, Solaris, NetBSD, Irix, etc. Por ser o shell nativo mais comum é natural que se prefira escrever scripts para ele, tornando o script mais facilmente portável para outro sistema.

Os Shells não estão diretamente associados a um ou outro tipo de Unix, embora várias empresas comerciais tenham suas próprias versões de Shell. No software livre o Shell utilizado em um sistema em geral é exatamente o mesmo utilizado em outro. Por exemplo, o bash encontrado no Linux é o mesmo shell bash encontrado no FreeBSD e pode também facilmente ser instalado no Solaris, Windows através do Cygwin [1] ou outros sistemas Unix comerciais para passar a ser utilizado como interface direta de comandos ou como interpretador de scripts. O mesmo acontece com o tcsh e vários outros shells desenvolvidos no modelo de software livre.

.

INTERAGIR COM O USUÁRIO

.

Para o script ficar mais completo, vamos colocar uma interação mínima com o usuário, pedindo uma confirmação antes de executar os comandos.

.

#!/bin/bash

clear

echo "Vou buscar os dados do sistema. Posso continuar? [S/n] "

read RESPOSTA

test "$RESPOSTA" = "n" && exit

echo ; echo "Data e Horário:" ; echo

date

echo

echo "Uso do disco:" ; echo

df -ht

echo

echo "Usuários conectados:" ; echo

w

echo ; echo "Seu nome de login é:"

whoami

echo

exit

# Fim do script

.

O comando "read" leu o que o usuário digitou e guardou na variável RESPOSTA. Logo em seguida, o comando "test" verificou se o conteúdo dessa variável era "n". Se afirmativo, o comando "exit" foi chamado e o script foi finalizado. Nessa linha há vários detalhes importantes:

O conteúdo da variável é acessado colocando-se um cifrão "$" na frente

O comando test é útil para fazer vários tipos de verificações em textos e arquivos

O operador lógico "&&", só executa o segundo comando caso o primeiro tenha sido OK. O operador inverso é o "||"

.

MELHORAR O CÓDIGO DO SCRIPT

Com o tempo, o script vai crescer, mais comandos vão ser adicionados e quanto maior, mais difícil encontrar o ponto certo onde fazer a alteração ou corrigir algum erro. Para poupar horas de estresse, e facilitar as manutenções futuras, é preciso deixar o código visualmente mais agradável e espaçado, e colocar comentários esclarecedores.

.

#!/bin/bash

# nome-do-script - script que mostra informações sobre o sistema

# Autor: Fulano da Silva

# Pede uma confirmação do usuário antes de executar

clear

echo "Vou buscar os dados do sistema. Posso continuar? [S/n]"

read RESPOSTA

# Se ele digitou 'n', vamos interromper o script

test "$RESPOSTA" = "n" && exit

# O date mostra a data e a hora correntes

sleep 3 ; echo "Data e Horário:" ; echo

date

sleep 3

echo

# O df mostra as partições e quanto cada uma ocupa no disco
echo "Uso do disco:"

sleep 3

echo

df

echo

sleep 6

# O w mostra os usuários que estão conectados nesta máquina

echo "Usuários conectados:"

sleep 3

echo

w

sleep 3

echo

# Fim do script

.

Basta iniciar a linha com um "#" e escrever o texto do comentário em seguida. Estas linhas são ignoradas pelo shell durante a execução. O cabeçalho com informações sobre o script e seu autor também é importante para ter-se uma visão geral do que o script faz, sem precisar decifrar seu código. Também é possível colocar comentários no meio da linha # como este

.

CARACTERÍSTICAS

.

OS SCRIPTS SHELL PODEM CONTER ESTRUTURAS DE PROGRAMAÇÃO TAIS COMO:

.

ESTRUTURAS DE DECISÃO (if)

Recurso utilizado para dar sequencia em fluxos de execução baseado decisões. Cuja sintaxe é:

- Condição Verificada é o teste que definirá se controle deve ser passado para dentro do bloco then, observe que esse teste é feito sobre a saída de um comando.
- Ação são comandos a serem executados em caso verdadeiro da condição verificada.

.

OPERADORES PARA NÚMEROS

-eq Verifica se é igual,
-ne Verifica se é diferente,
-lt Verifica se é menor,
-gt Verifica se é maior,
-le Verifica se é menor ou igual,
-ge Verifica se é maior ou igual.

.

OPERADORES PARA TEXTO

!= Verifica se é diferente,
= Verifica se é igual.

.

OPERADORES LÓGICOS

! Lógica NOT,
-o Lógica OU, (OR) ou ||,
-a Lógica E, (AND) ou &&.

.

OPERADOR PARA arquivos/

-d Verifica se é diretório,
-f Verifica se é arquivo,
-e Verifica se existe.

.

Ex:

# !/bin/baxh
# Uso de Estrutura de Decisão
clear

echo 'opções'
echo '======'
echo ' -> Data do Sistema'
echo ' -> Uso do Sistema'

read opcao

if [ "$opcao" -eq 1 ]
then
echo 'Data do sistema: ' && date

elif [ "$opcao" -eq 2 ]
then

echo 'Uso do disco: ' && df -Th
fi

# Fim do script

.

ESTRUTURAS DE REPETIÇÃO (FOR)(WHILE)

.

ESTRUTURA DE REPETIÇÃO FOR

Permite que ações de iteração sejam executadas sobre determinados comandos ou variáveis até que a condição seja satisfeita.

# !/bin/bash

clear

echo "DIAS DA SEMANA"
for dia in seg ter qua qui sex sab dom
do
echo "$dia"
done

# Fim do script

.

ESTRUTURA DE REPETIÇÃO WHILE

Em situações onde sabemos até onde o loop irá realizar uma contagem o ideal é usar o for entretanto em cenarios onde a iteração deve cessar somente após se satisfazer uma condição o uso do laço while é mais indicado. Ex:

# /bin/bash

clear
var=1
while [ $var -le 7 ]
do
echo "Valor de var: $var"
var=$((var+1))
done

# Fim do script

.

FUNÇÕES E ARGUMENTOS

Ex:

# !/bin/bash
# REALIZAR BACKUP DO DIR

echo -e " \033[1;33m Digite o caminho de origem.: \033[0m "
read DIR_ORIGEM

clear

echo -e " \033[1;34m Digite o caminho de destino.: \033[0m "
read DIR_DESTINO

clear

verifica_argumentos(){

if [ $# -lt 1 ];
then
echo "Faltou informar um dos argumentos (parametros) necessarios!"
exit 1
fi
}

copia_arquivos(){

verifica_argumentos

clear

echo "Realizando backup..."

#Verificando se o dir de destino existe

if ! [ -d $DIR_DESTINO ]
then
mkdir $DIR_DESTINO
echo "Diretorio de Destino Criado"
fi

#COPIANDO ARQUIVOS

for arq in `ls $DIR_ORIGEM`
do
cp /$DIR_ORIGEM/$arq $DIR_DESTINO/$arq.bak
done

}

copia_arquivos

# Fim do script

DEFINIÇÕES DE VARIÁVEIS E ESCOPO DESTAS

Variáveis são definidas pela nomenclatura NOME_VARIAVEL="Valor da Variável". O valor pode ser tanto numérico quanto texto.

Nome="Joel"

Se quisermos acessá-la, basta fazer referência a ela com o caractere $ (cifrão) antes do nome: o comando echo $Nome, por exemplo, retornará a palavra "Joel".

Se quiser sabe informações sobre os sistemas de arquivo nos quais cada ARQUIVO reside ou, por padrão, sobre todos os sistemas de arquivos posso abrir um terminal e digitar:

VarInfo="df -h"

Depois digito no terminal "$VarInfo" sem aspas.

.

VARIÁVEIS DE AMBIENTE

As variáveis de ambiente independem da definição do usuario. Elas são criadas automaticamente, no momento em que se faz o login no sistema.

Ex:

PATH: define diretórios de procura por programas executados no shell;
USER: informa o nome do usuário do shell;
HOME: informa o caminho do diretório home do usuário;
PWD: diretório atual;

.

As variáveis são a base de qualquer script. É dentro delas que os dados obtidos durante a execução do script serão armazenados. Para definir uma variável, basta usar o sinal de igual "=" e para ver seu valor, usa-se o "echo":

.

Execute estes comandos abaixo no terminal:

.

VARIAVEL="um dois tres"

echo $VARIAVEL

echo $VARIAVEL $VARIAVEL

.

Para remover a variável acima:

unset VARIAVEL

.

Teste:

echo $VARIAVEL

.

É possível armazenar a saída de um comando dentro de uma variável. Ao invés de aspas, o comando deve ser colocado entre "$(...)", execute no terminal os comandos abaixo:

HOJE=$(date)

echo "Hoje é: $HOJE"

unset HOJE

echo $HOJE

HOJE=$(ls)

echo "O conteúdo desta pasta tem: $HOJE"

unset HOJE

echo $HOJE

HOJE=$(free -hmt)

echo "Informando sobre a memória desta máquina: $HOJE"

unset HOJE

echo $HOJE

.

Exemplos de uso do shell script:

Apagar arquivos velhos - Apagar periodicamente arquivos mais velhos que 30 dias do diretório /tmp:

#!/bin/bash

cd /tmp
find . -type f -mtime +30 -delete

# Fim do script

Este seria o conteúdo de um shell script que sempre que fosse executado apagaria arquivos com data de modificação maior que 30 dias a partir do diretório /tmp do sistema de arquivos.

Notem que ele é nada mais do que uma associação de 2 comandos (cd e find) em um arquivo para facilitar a repetição da tarefa. Este poderia ser, por exemplo, o conteúdo do arquivo /bin/limpatmp.sh e poderíamos chamar este script pela linha de comandos sempre que desejássemos repetir esta ação:

$ limpatmp.sh

Onde o símbolo "$" representa o prompt de comandos. Do ponto de vista do usuário este seria mais um comando disponível para uso.

Os scripts em shell são também muito empregados junto à inicialização do sistema (para auto-iniciar tarefas) ou como mini-aplicativos, que facilitam tarefas dos usuários, tais como montagem de dispositivos, menus de ajuda, etc.

Sua primeira linha obrigatoriamente começa com um "#!" (que não se deve confundir com um comentário qualquer, pois realmente é uma exceção; este par se chama, em inglês, de shebang), informando diretamente ao núcleo (kernel) qual interpretador ele deverá usar, juntamente com seu caminho, de acordo com a necessidade de cada caso. Exemplo:

#!/bin/bash

Em seguida, são adicionados os comandos desejados, um por linha, ou separados por ponto e vírgula. Exemplo:

mount -t reiserfs /dev/hda1 /mnt/hda1

ls /mnt/hda1

cp -r /mnt/hda1/* /home/user/backup
umount /dev/hda1

Por fim, dá-se a permissão de execução a este arquivo de texto simples ("chmod +x arquivo").

.

DATA ANTERIOR

.

#!/bin/bash

# Função em Bash para retornar a data anterior, levando em conta o mês e ano.

fn_data_anterior()
{
DIA=$D
MES=$M
ANO=$A

# Dado DIA, MES e ANO numéricos, obtém a data do dia anterior

DIA=`expr $DIA - 1`
if [ $DIA -eq 0 ]; then
MES=`expr $MES - 1`
if [ $MES -eq 0 ]; then
MES=12
ANO=`expr $ANO - 1`
fi
DIA=`cal $MES $ANO`
DIA=`echo $DIA | awk '{ print $NF }'`
fi
}

ano=`date +%Y`;
mes=`date +%m`;
let dia=10\#`date +%d`;

if (( $dia". Para guardar a saída do comando anterior no arquivo "saida", basta fazer:

cat /etc/passwd | grep root | cut -c1-10 > saida

cat saida

.

O COMANDO TEST

O canivete suíço dos comandos do shell é o "test", que consegue fazer vários tipos de testes em números, textos e arquivos. Ele possui várias opções para indicar que tipo de teste será feito, algumas delas:

-lt Núm. é menor que (LessThan)

-d É um diretório

-gt Núm. é maior que (GreaterThan)

-f É um arquivo normal

-le Núm. é menor igual (LessEqual)

-r O arquivo tem permissão de leitura

-ge Núm. é maior igual (GreaterEqual)

-s O tamanho do arquivo é maior que zero

-eq Núm. é igual (EQual)

-w O arquivo tem permissão de escrita

-ne Núm. é diferente (NotEqual)

-nt O arquivo é mais recente (NewerThan)

= String é igual

-ot O arquivo é mais antigo (OlderThan)

!= String é diferente

-ef O arquivo é o mesmo (EqualFile)

-n String é não nula

-a E lógico (AND)

-z String é nula

-o OU lógico (OR)

.

SCRIPT QUE TESTA ARQUIVOS

Tente fazer um script "testa-arquivos", que pede ao usuário para digitar um arquivo e testa se este arquivo existe. Se sim, diz se é um arquivo ou um diretório.

.

CONCEITOS MAIS AVANÇADOS

.

If, for e while

.

Assim como qualquer outra linguagem de programação, o shell também tem estruturas para se fazer condicionais e loop. As mais usadas são if, for e while.

.

Então daqui por diante, sabemos o básico, o necessário para se fazer um script de funcionalidade mínima. E este mínimo pode fazer coisas incríveis.

.

Ex:

if COMANDO
then
comandos
else
comandos
fi

# Fim do script

Ex:

for VAR in LISTA
do
comandos
done

# Fim do script

Ex:

while COMANDO
do
comandos
done

# Fim do script

.

Diferente de outras linguagens, o if testa um comando e não uma condição. Porém como já conhecemos qual o comando do shell que testa condições, é só usá-lo em conjunto com o if. Por exemplo, para saber se uma variável é maior ou menor do que 10 e mostrar uma mensagem na tela informando:

.

Ex:

if test "$VARIAVEL" -gt 10
then
echo "é maior que 10"
else
echo "é menor que 10"
fi

# Fim do script

.

Há um atalho para o test , que é o comando [. Ambos são exatamente o mesmo comando, porém usar o [ deixa o if mais parecido com o formato tradicional de outras linguagens:

.

Ex:

if [ "$VARIAVEL" -gt 10 ]
then
echo "é maior que 10"
else
echo "é menor que 10"
fi

# Fim do script

.

Se usar o [, também é preciso fechá-lo com o ], e sempre devem ter espaços ao redor. É recomendado evitar esta sintaxe para diminuir suas chances de erro.

.

Já o while é um laço que é executado enquanto um comando retorna OK. Novamente o test é bom de ser usado. Por exemplo, para segurar o processamento do script enquanto um arquivo de lock não é removido:

.

Ex:

while test -f /tmp/lock
do
echo "Script travado..."
sleep 1
done

# Fim do script

.

Ex:

E por fim, o for percorre uma lista de palavras, pegando uma por vez:

for numero in um dois três quatro cinco
do
echo "Contando: $numero"
done

# Fim do script

.

Uma ferramenta muito útil para usar com o for é o seq, que gera uma seqüência numérica.

.

Para fazer o loop andar 10 passos, pode-se fazer:

for passo in $(seq 10)

.

O mesmo pode ser feito com o while, usando um contador:

i=0
while test $i -le 10
do
i=$((i+1))
echo "Contando: $i"
done

# Fim do script

.

Até Breve

.

.

🙂

.

Aprenda Bash shell script do Linux

Se você não tem certeza qual o seu usuário, use o comando
"whoami" para saber. Como o prompt de usuário normal pode ser diferente para cada um, podemos talvez em algum momento utilizar "prompt$" para indicar o prompt da linha de comando.

ESCOLHER O DIRETÓRIO ONDE COLOCAR O SCRIPT

Para que o script possa ser executado de qualquer parte do sistema, mova-o para um diretório que esteja no seu PATH. Para ver quais são estes diretórios, use o comando:

echo $PATH

Se não tiver permissão de mover para um diretório do PATH, deixe-o dentro de seu diretório pessoal ($HOME).

CRIAR O ARQUIVO E COLOCAR NELE OS COMANDOS

Use o gedit, pluma, leafpad, mousepad ou outro editor de textos de sua preferência para colocar todos os comandos dentro do arquivo.

COLOQUE A CHAMADA DO SHELL NA PRIMEIRA LINHA

A primeira linha do script deve ser:

#!/bin/bash

Para que ao ser executado, o sistema saiba que é o bash quem irá interpretar estes
comandos.

TORNE O SCRIPT UM ARQUIVO EXECUTÁVEL

Use o seguinte comando para que seu script seja reconhecido pelo sistema como um comando executável:

chmod +x nome-do-script.sh

BASH EXECUTANDO COMANDOS

Shell script é uma linguagem de script usada em vários sistemas operacionais, com diferentes dialetos, dependendo do interpretador de comandos utilizado.

Um exemplo de interpretador de comandos é o bash, usado na grande maioria das distribuições GNU/Linux.

A maior parte dos usuários classificam shell script como uma linguagem de fácil aprendizagem. O primeiro passo é, saber o que se deseja fazer, então ver qual o código que executa este comando em shell e aí criar, basta escrever o código em algum editor de texto e salvar. Veja só que de tempos em tempos você quer saber informações do sistema.

ABRE O TERMINAL E DIGITA COMANDOS, POR EXEMPLO, DIGITE ESTES COMANDOS ABAIXO UM DE CADA VEZ:

date

cal

uptime

df -h

free -tmlh

whoami

pwd

ls -at

whereis bash

Os comandos acima oferecem informações interessantes e úteis. Podemos colocar todos eles em um só script e executar. Dependendo do caso, é mais fácil que digitar um a um de cada vez toda vez que precisar.

TODO SCRIPT ESCRITO PARA RODAR NO BASH COMEÇA COM:

#!/bin/bash

Após "#!/bin/bash" de um espaço entre linhas e então pode começar a digitar comandos.

Exemplo:

#!/bin/bash

clear

echo ; date ; echo ; sleep 4

echo ; cal ; echo ; sleep 4

echo ; uptime ; echo ; sleep 4

echo ; df -h ; echo ; sleep 4

echo ; free -html ; echo ; sleep 4

echo ; whoami ; echo ; sleep 4

echo ; pwd ; echo ; sleep 4

echo ; ls -at ; echo ; sleep 4

echo ; whereis bash ; echo ; sleep 4

echo ; echo 'Este é o fim do script 01-script.sh' ; echo ; sleep 4

exit

# Fim do script

ESTE SCRIPT ÚTIL E INOFENSIVO ACIMA, SERÁ SALVO NA PASTA HOME, A PASTA DA CASINHA COM O NOME DE:

01-script.sh

Posso melhorar/tornar mais amigável este script acima explicando sobre cada comando:

#!/bin/bash

clear

echo ; echo 'Hoje é data:' ; echo ; sleep 2

echo ; date ; echo ; sleep 4

echo ; echo 'Hoje pelo calendário é:' ; echo ; sleep 2

echo ; cal ; echo ; sleep 4

echo ; echo 'Esta máquina está funcionando a:' ; echo ; sleep 2

echo ; uptime ; echo ; sleep 4

echo ; echo 'Sobre o tamanho desta pasta:' ; echo ; sleep 2

echo ; df -h ; echo ; sleep 6

echo ; echo 'Sobre a memóris RAM:' ; echo ; sleep 2

echo ; free -html ; echo ; sleep 6

echo ; echo 'Você está logado como:' ; echo ; sleep 2

echo ; whoami ; echo ; sleep 4

echo ; echo 'Você está em:' ; echo ; sleep 2

echo ; pwd ; echo ; sleep 4

echo ; echo 'Neste diretório/pasta tem:' ; echo ; sleep 2

echo ; ls -at ; echo ; sleep 6

echo ; echo 'O Bash está em:' ; echo ; sleep 2

echo ; whereis bash ; echo ; sleep 4

echo ; echo 'Este é o fim do script 01-script.sh' ; echo ; sleep 4

exit

# Fim do script

No Linux o script deve ter permissão de execução, isto pode ser feito abrindo o terminal pelo menu do sistema e executando o comando:

chmod +x 01-script.sh

Depois de salvo você tem que executar o arquivo, dessa forma:

./01-script.sh

Viu alguma utilidade neste pequeno script?

Então siga adiante.

IMPORTANTE:

Para estudar shell script tem que ser como usuário normal.

Se você está acessando o sistema como usuário administrador (root), saia e entre como um usuário normal. É muito perigoso estudar shell usando o superusuário, você pode danificar o sistema com um comando errado.

Ok, continuemos.

Para exibir um manual do bash ou mesmo do comando 'chmod', digite na linha de comando:

man bash

man chmod

É possível executar o arquivo mesmo sem modificar a permissão de execução, por exemplo, se for um arquivo escrito para ser executado pelo bash, usar:

sh ./"Nome do arquivo, sem aspas"

SHELL

É importante saber o que é um Shell.

Na linha de comandos de um shell, podemos utilizar diversos comandos um após o outro, ou mesmo combiná-los numa mesma linha.

Se colocarmos diversas linhas de comandos em um arquivo texto simples, teremos em mãos um Shell Script, ou um script em shell, já que Script é uma descrição geral de qualquer programa escrito em linguagem interpretada, ou seja, não compilada. Outros exemplos de linguagens para scripts são o PHP, Perl, Python, JavaScript e muitos outros. Podemos então ter um script em php, um script perl e assim em diante.

Uma vez criado, um ShellScript pode ser reutilizado quantas vezes for necessário.

Seu uso, portanto, é indicado na automação de tarefas que serão realizadas mais de uma vez.

Todo sistema Unix e similares são repletos de scripts em shell para a realização das mais diversas atividades administrativas e de manutenção do sistema.

Os arquivos de lote (batch - arquivos *.bat) do Windows são também exemplos de ShellScripts, já que são escritos em linguagem interpretada e executados por um Shell do Windows, em geral o command.com ou hoje em dia o cmd.exe.

Os Shells do Unix, porém, são inumeras vezes mais poderosos que o interpretador de comandos do Windows, podendo executar tarefas muito mais complexas e elaboradas.

OS SCRIPTS SHELL PODEM SER AGENDADOS PARA EXECUÇÃO ATRAVÉS DA TABELA CRONTAB, ENTRE OUTRAS COISAS.

É uma ferramenta indispensável aos administradores de sistemas Unix.

O Shell mais comum e provavelmente o que possui mais scripts escritos para ele é também um dos mais antigos e simples, o sh.

Este shell está presente em todo o sistema tipo Unix, incluído o Linux, FreeBSD, AIX, HP-UX, OpenBSD, Solaris, NetBSD, Irix, etc. Por ser o shell nativo mais comum é natural que se prefira escrever scripts para ele, tornando o script mais facilmente portável para outro sistema.

Os Shells não estão diretamente associados a um ou outro tipo de Unix, embora várias empresas comerciais tenham suas próprias versões de Shell. No software livre o Shell utilizado em um sistema em geral é exatamente o mesmo utilizado em outro. Por exemplo, o bash encontrado no Linux é o mesmo shell bash encontrado no FreeBSD e pode também facilmente ser instalado no Solaris, Windows através do Cygwin [1] ou outros sistemas Unix comerciais para passar a ser utilizado como interface direta de comandos ou como interpretador de scripts. O mesmo acontece com o tcsh e vários outros shells desenvolvidos no modelo de software livre.
Características

OS SCRIPTS SHELL PODEM CONTER ESTRUTURAS DE PROGRAMAÇÃO TAIS COMO:

ESTRUTURAS DE DECISÃO (if)

Recurso utilizado para dar sequencia em fluxos de execução baseado decisões. Cuja sintaxe é:

- Condição Verificada é o teste que definirá se controle deve ser passado para dentro do bloco then, observe que esse teste é feito sobre a saída de um comando.
- Ação são comandos a serem executados em caso verdadeiro da condição verificada.

OPERADORES PARA NÚMEROS

-eq Verifica se é igual,
-ne Verifica se é diferente,
-lt Verifica se é menor,
-gt Verifica se é maior,
-le Verifica se é menor ou igual,
-ge Verifica se é maior ou igual.

OPERADORES PARA TEXTO

!= Verifica se é diferente,
= Verifica se é igual.

OPERADORES LÓGICOS

! Lógica NOT,
-o Lógica OU, (OR) ou ||,
-a Lógica E, (AND) ou &&.

OPERADOR PARA arquivos/

-d Verifica se é diretório,
-f Verifica se é arquivo,
-e Verifica se existe.

Ex:

# !/bin/baxh
# Uso de Estrutura de Decisão
clear

echo 'opções'
echo '======'
echo ' -> Data do Sistema'
echo ' -> Uso do Sistema'

read opcao

if [ "$opcao" -eq 1 ]
then
echo 'Data do sistema: ' && date

elif [ "$opcao" -eq 2 ]
then

echo 'Uso do disco: ' && df -Th
fi

# Fim do script

ESTRUTURAS DE REPETIÇÃO (FOR)(WHILE)

ESTRUTURA DE REPETIÇÃO FOR

Permite que ações de iteração sejam executadas sobre determinados comandos ou variáveis até que a condição seja satisfeita.

# !/bin/bash

clear

echo "DIAS DA SEMANA"
for dia in seg ter qua qui sex sab dom
do
echo "$dia"
done

ESTRUTURA DE REPETIÇÃO WHILE

Em situações onde sabemos até onde o loop irá realizar uma contagem o ideal é usar o for entretanto em cenarios onde a iteração deve cessar somente após se satisfazer uma condição o uso do laçõ while é mais indicado: Ex:

# /bin/bash

clear
var=1
while [ $var -le 7 ]
do
echo "Valor de var: $var"
var=$((var+1))
done

# Fim do script

FUNÇÕES E ARGUMENTOS

Ex:

# !/bin/bash
# REALIZAR BACKUP DO DIR

echo -e " \033[1;33m Digite o caminho de origem.: \033[0m "
read DIR_ORIGEM

clear

echo -e " \033[1;34m Digite o caminho de destino.: \033[0m "
read DIR_DESTINO

clear

verifica_argumentos(){

if [ $# -lt 1 ];
then
echo "Faltou informar um dos argumentos (parametros) necessarios!"
exit 1
fi
}

copia_arquivos(){

verifica_argumentos

clear

echo "Realizando backup..."

#Verificando se o dir de destino existe

if ! [ -d $DIR_DESTINO ]
then
mkdir $DIR_DESTINO
echo "Diretorio de Destino Criado"
fi

#COPIANDO ARQUIVOS

for arq in `ls $DIR_ORIGEM`
do
cp /$DIR_ORIGEM/$arq $DIR_DESTINO/$arq.bak
done

}

copia_arquivos

# Fim do script

DEFINIÇÕES DE VARIÁVEIS E ESCOPO DESTAS

Variáveis são definidas pela nomenclatura NOME_VARIAVEL="Valor da Variável". O valor pode ser tanto numérico quanto texto.

Nome="Jose"

Se quisermos acessá-la, basta fazer referência a ela com o caractere $ (cifrão) antes do nome: o comando echo $Nome, por exemplo, retornará a palavra "Jose".

Se quiser sabe informações sobre os sistemas de arquivo nos quais cada ARQUIVO reside ou, por padrão, sobre todos os sistemas de arquivos posso abrir um terminal e digitar:

VarInfo="df -h"

Depois digito no terminal "$VarInfo" sem aspas.

VARIÁVEIS DE AMBIENTE

As variáveis de ambiente independem da definição do usuario. Elas são criadas automaticamente, no momento em que se faz o login no sistema.

Ex:

PATH: define diretórios de procura por programas executados no shell;
USER: informa o nome do usuário do shell;
HOME: informa o caminho do diretório home do usuário;
PWD: diretório atual;

Exemplos de uso:

Apagar arquivos velhos

Apagar periodicamente arquivos mais velhos que 30 dias do diretório /tmp:

#!/bin/bash

cd /tmp
find . -type f -mtime +30 -delete

Este seria o conteúdo de um shell script que sempre que fosse executado apagaria arquivos com data de modificação maior que 30 dias a partir do diretório /tmp do sistema de arquivos.

Notem que ele é nada mais do que uma associação de 2 comandos (cd e find) em um arquivo para facilitar a repetição da tarefa. Este poderia ser, por exemplo, o conteúdo do arquivo /bin/limpatmp.sh e poderíamos chamar este script pela linha de comandos sempre que desejássemos repetir esta ação:

$ limpatmp.sh

Onde o símbolo "$" representa o prompt de comandos. Do ponto de vista do usuário este seria mais um comando disponível para uso.

Os scripts em shell são também muito empregados junto à inicialização do sistema (para auto-iniciar tarefas) ou como mini-aplicativos, que facilitam tarefas dos usuários, tais como montagem de dispositivos, menus de ajuda, etc.

Sua primeira linha obrigatoriamente começa com um "#!" (que não se deve confundir com um comentário qualquer, pois realmente é uma exceção; este par se chama, em inglês, de shebang), informando diretamente ao núcleo qual interpretador ele deverá usar, juntamente com seu caminho, de acordo com a necessidade de cada caso. Exemplo:

#!/bin/bash

Em seguida, são adicionados os comandos desejados, um por linha, ou separados por ponto e vírgula. Exemplo:

mount -t reiserfs /dev/hda1 /mnt/hda1
ls /mnt/hda1
cp -r /mnt/hda1/* /home/user/backup
umount /dev/hda1

Por fim, dá-se a permissão de execução a este arquivo de texto simples ("chmod +x arquivo").
Data anterior

#!/bin/bash
# Função em Bash para retornar a data anterior, levando em conta o mês e ano.

fn_data_anterior()
{
DIA=$D
MES=$M
ANO=$A

# Dado DIA, MES e ANO numéricos, obtém a data do dia anterior

DIA=`expr $DIA - 1`
if [ $DIA -eq 0 ]; then
MES=`expr $MES - 1`
if [ $MES -eq 0 ]; then
MES=12
ANO=`expr $ANO - 1`
fi
DIA=`cal $MES $ANO`
DIA=`echo $DIA | awk '{ print $NF }'`
fi
}

ano=`date +%Y`;
mes=`date +%m`;
let dia=10\#`date +%d`;

if (( $dia<10 ));
then
j=0$dia;
else
j=$dia;
fi
dia=$j;
j="";

D=$dia
M=$mes
A=$ano

fn_data_anterior

echo $DIA $MES

# Fim do script

.

Linux iniciando Shell Script

Um jeito de facilitar serviço repetitivo que é feito de tempo em tempo no Linux é usar Shell Scripts

.

Shell Script nada mais é que uma sequência de comandos do próprio sistema Linux escritos em um arquivo de texto que é executado

.

Para escrever um shell script é necessário criar um arquivo

.

Abro o terminal pelo menu do sistema, e escrevo os comandos abaixo por minha conta e risco:

.

cd

cd Documentos/

mkdir script-testes

cd script-testes/

touch script-inicial.sh

ls -t

ls -lah

.

Dou direito de execução para o arquivo criado:

.

chmod a+x script-inicial.sh

ls -t

ls -lah

.

O ARQUIVO PODERÁ SER EXECUTADO POR QUALQUER USUÁRIO DO SISTEMA

.

Abro o arquivo recém criado para editá-lo

.

nano script-inicial.sh

.

Na primeira linha de um shell script, é necessário colocar uma linha de código que diz qual shell será utilizado e no Linux, é o Bash que está na pasta /bin por isto tem que escrever:

.

#!/bin/bash

.

Depois desta linha acima, pode digitar comandos

.

EXEMPLO DE SCRIPT

.

Posso criar um script que abre a gaveta do leitor de cd e após 3 segundos a mesma será fechada. Colo no nano o texto abaixo:

echo "Abrindo gaveta..."

eject

sleep 4

echo "A gaveta será fechada..."

sleep 2

eject -t

#Este é um comentário.

echo “Tem um comentário no final deste script”

echo "Se está usando notebook feche com a mão"

# fim do script

.

Gravo o arquivo com as teclas Ctrl-O, aperto a tecla Enter e fecho com as teclas Ctrl-X

.

O QUE SIGNIFICAM OS COMANDOS DO CÓDIGO ESCRITO NO ARQUIVO?

.

echo é o comando responsável por exibir uma mensagem na tela.

eject é o comando responsável por fazer a gaveta do leitor de cd ejectar.

eject -t é o comando reponsável por fazer a gaveta do leito de cd voltar para seu estado inicial.

sleep é o comando que pausa um o terminal por um tempo em segundos pré determinado

.

Para inserir um comentário no script inserir o #(cerquilha ou cardinal) na frente da linha que desejo comentar

.

Exemplo:

.

#!/bin/bash

#Este é um comentário.

echo “Tem um comentário neste shell script”

.

Para executar o shell script criado chamado script-inicial.sh

./script-inicial.sh

.

Faço o teste e vejo se funciona.

.
OBS:

Se estiver usando um notebook provavelmente ele foi feito para ser fechado manualmente e a resposta ao script pode ser parecida com esta:

.

$ ./script-inicial.sh
Abrindo gaveta…
A gaveta será fechada…
eject: comando para fechar bandeja de CD-ROM falhou: Erro de entrada/saída
“Tem um comentário neste shell script”

.

Mas o script funcionou

.

Criar uma variavel em shell script não é muito complicado, basta usar a sintaxe abaixo:

.

Sintaxe:

nome_variável=VALOR

.

Onde:

nome_variavel – Nome da variável.

VALOR – Valor atribuido a variável criada.

Exemplos:

cor_casa=verde

numero=32

Neste exemplo serão criadas as variáveis “cor_casa” que tem como atributo o valor “verde”, também é criada a variável “numero” que tem como atributo o valor 32.

Para se utilizar a variável basta utilizar o $ (Sifrão) na frente do nome da variável, como pode ser visto no código do shell script baixo.

Exemplo:

#!/bin/bash

cor_casa=VERDE
echo “A cor da casa é $cor_casa”

.
A saída será:

A cor da casa é VERDE

.

Para usar o script acima:

cd

cd Documentos/

cd script-testes/

nano

.

Colo o Exemplo:

#!/bin/bash
cor_casa=VERDE
echo “A cor da casa é $cor_casa”

Gravo com Ctrl-O, nomeio de scrip-teste-b.sh aperto Enter e saio com Ctrl-X

.

Dou poder de execução:

.

chmod a+x scrip-teste-b.sh

.

Executo:

.

./scrip-teste-b.sh

Viu o resultado?

.

Utilizando saída de comando como valor de variável

Caso se deseje manipular a saída de um determinado comando como valor para uma variável basta escolher uma das seguintes sintaxes:

Sintaxe:

nome_variavel=$(comando)

ou

nome_variavel=`comando`

Onde:

nome_variavel – Nome da variavel que receberá a saída do comando.

comando – Comando a ser executado.

Exemplo:

#!/bin/bash
total_linhas=$(ls | wc -l)

echo “Existe $total_linhas neste diretório.”

.

Esse script shell exibe na tela a quantidade de arquivos existe em um determinado diretório.

.

Abro o terminal digito:

cd

cd Documentos/

cd script-testes/

nano

.

Colo no terminal:

#!/bin/bash
total_linhas=$(ls | wc -l)

echo “Existe $total_linhas neste diretório.”

.

Gravo com as teclas Ctrl-O, salvo com o nome de scrip-teste-c.sh, aperto a tecla Enter, saio com Ctrl-X

.

Dou poder de execução:

chmod a+x scrip-teste-c.sh

.

Executo:

./scrip-teste-c.sh

Exemplo:

$ ./scrip-teste-c.sh
“Existe 3 neste diretório.”

.

UM SCRIPT PARA ATUALIZAR O SISTEMA “script-atualizar-solus3.sh”:

#!/bin/bash

echo "Atualização do sistema..."

sudo eopkg ur

sleep 2

echo "Configurando pacotes pendentes"

sleep 2

sudo eopkg cp ; sudo eopkg clean

sleep 2

echo "Finalizando Atualização do sistema"

sudo eopkg up -y

echo " "

echo “Atualização executada com êxito”

echo " "

echo "Muito Obrigado e Mantenha seu Sistema sempre Atualizado!"

sleep 2

echo " "

sleep 2

echo "Para instalar programas pelo terminal digite: sudo eopkg it nome-do-programa"

echo " "

sleep 2

echo ":)"

echo " "

sleep 2

echo "Para saber mais sobre o comando eopkg digite: eopkg help"

echo " "

# fim do script

.

Para usar o script acima no Solus Linux 3 digito:

.

cd

cd Documentos/

cd script-testes/

nano

.

Colo no nano o script acima. Ctrl-O para gravar, aperto Enter e colo o nome do script “script-atualizar-solus3.sh” sem aspas aperto a tecla Enter, saio com Ctrl-X

.

Dou poder de execução:

.

chmod a+x script-atualizar-solus3.sh

.

Executo:

.

./script-atualizar-solus3.sh

.

SE FOSSE DEBIAN OU DERIVADO DELE:

.

#!/bin/bash

echo "Atualização do sistema..."

sudo apt update

sleep 2

echo “Configurando pacotes pendentes”

sleep 2

sudo apt install -f ; sudo apt upgrade -y ; sudo apt autoclean

sleep 2

echo "Finalizando Atualização do sistema"

sudo apt full-upgrade -y ; sudo apt install -f ; sudo dpkg --configure -a

echo "Atualizando o Grub"

sleep 2

sudo update-grub

echo “Atualização executada com êxito”

echo " "

echo "Muito Obrigado e Mantenha seu Sistema sempre Atualizado!"

sleep 2

echo " "

echo "Para instalar programas pelo terminal digite: sudo apt install nome-do-programa"

echo " "

sleep 2

echo ":)"

echo " "

sleep 2

echo "Para saber mais sobre o comando apt digite: man apt"

echo " "

# fim do script

.

Se você nunca na vida executou um shellscript e conseguiu seguir este tutorial acredito que você tem todo o potencial e condições de ir além aprendendo muito divertindo-se

.

Até Breve

.

Linux VidMasta o buscador de filmes

.

Por minha conta e risco executo o tutorial abaixo abrindo meu terminal pelo menu do meu sistema. Tem que ter o Java instalado, acho eu.

.

Não funciona para mim no LM 18.2, nem no Xenial. Uma pena, é um bom programa

.

date

whoami

cal

clear

ls

ls -t

pwd

cd Downloads/

ls -t

pwd

clear

mkdir pasta-vidmasta

ls -t

cd pasta-vidmasta/

pwd

wget -c https://ufpr.dl.sourceforge.net/project/vidmasta/vidmasta-setup-24.2.jar

mv vidmasta-setup-24.2.jar vidmasta.jar

sudo java -jar vidmasta.jar

echo -e ‘[Desktop Entry]\n Version=1.0\n Name=vidmasta\n Exec=/usr/local/VidMasta/vidmasta/VidMasta.jar\n Icon=/usr/local/VidMasta/vidmasta/favicon.ico\n Type=Application\n Categories=Application’ | sudo tee /usr/share/applications/vidmasta.desktop

java -jar /usr/local/VidMasta/vidmasta/VidMasta.jar

sudo chmod +x /usr/share/applications/vidmasta.desktop

cp /usr/share/applications/vidmasta.desktop ~/Área\ de\ Trabalho/

cp /usr/share/applications/vidmasta.desktop ~/Desktop

history

.

Linux-aprendendo-alguma-coisa-sobre-shellcript

2017-aprendendo-alguma-coisa-sobre-shellcript-2017-A1

.

SHELLSCRIPT

.

Eu ando tentando aprender alguma coisa sobre shellscript no Linux.

.

O que descobri?

.

É uma linguagem de programação. É para resolver pequenos problemas. Eu posso criar pequenos aplicativos com diversos recursos. Pode ser usada no Bash – Script Bourne Again Shell.

.

Eu abro o terminal do Linux pelo menu do meu sistema, executo o update e upgrade do meu sistema. Aí crio um diretório chamado scripts-estudo1 na pasta Documentos.
.

Executo estes comandos abaixo e acredito que, se você iniciante que nem eu quiser, você pode repetir eles no seu terminal do seu sistema Linux sem problemas, eu faço este estudo por minha conta e risco; e recomendo a você que faça o mesmo se quiser.

.

Daqui para baixo tem comandos de terminal e comentários separados por pontos . e espaços entre comandos e comentários.

.

Eu faço assim, por que desta forma é mais fácil pra mim me localizar durante o meu estudo. Vou começar. Vou abrir o terminal. Pronto. É nesta que eu to indo.

.

cd

.

ls

.

pwd

.

cd Documentos/

.

mkdir scripts-estudo1

.

ls -t

.

Eu vou para dentro da pasta scripts-estudo1

.

cd scripts-estudo1/

.

pwd

.

~/Documentos/scripts-estudo1 $

.

Agora vou usar o nano para criar meu primeiro script.

.

nano 01.sh

.

Agora, que emoção! Vou escrever a primeira linha de um script. Pelo que fiquei sabendo, esta linha nunca muda. Todo mundo que usa Linux, escreve esta linha primeiro.

.

Esta primeira linha, especifica qual programa vai ser usado para interpretar o código shellscript que eu vou digitar.

.

É o Bash.

.

Vou digitar agora!

.

#!/bin/bash

.

Agora que eu digitei:
.

#!/bin/bash

.

Eu posso colocar comandos no meu shellscript abaixo de #!/bin/bash. Um dos comandos será sleep2 (este eu acho que faz esperar 2 segundos antes de liberar o terminal para o próximo comando).

 

Por exemplo:

.

 

#!/bin/bash

ls
pwd
sleep2
clear

 

.

Eu salvo este pequeno script no nano com Control+X aperto a tecla Enter aí eu confirmo apertando a tecla s e aperto Enter de novo. Aí eu digito:

.

ls -l

.

Para que o meu primeiro script da minha vida possa ser executado, eu preciso dar permissão para que ele seja executado. Para dar a permissão de execução a ele eu uso chmod a+x. Fica assim:

.

chmod a+x 01.sh

.

ls -l

.

Agora para executar este script eu tenho que usar ./ fica assim:

.

./01.sh

 

Aperto a tecla Enter e o script funciona! 🙂

.

Vou visualizar este mini script com o comando cat e vou executar cada comando dele.

.

cat 01.sh

.

Faço um teste, digito df e aperto enter, digito r e aperto enter, digito v e apero enter. Aí eu executo novamente meu nini script.

.

./01.sh

.

E não é que o bichinho funciona mesmo? Que legal! Estou me divertindo com isto!

.

Ora essa, vou criar mais um script!

.

Estou na pasta Documentos/scripts-estudo1. Vou usar o nano de novo.

.

nano 02.sh

.

Aperto a tecla Enter.

.

Deixo a janela do terminal bem larga.

.

Escrevo novamente no nano o primeiro comando de todo script em Linux.

.

#!/bin/bash

.

Aperto a tecla Enter duas vezes.

.

Digito:

.

echo “Que tal executarmos o comando pwd, para sabermos em que pastinha estamos agora?”
pwd

.

Vai ficar assim:

.

#!/bin/bash

 

echo “Que tal executarmos o comando pwd, para sabermos em que pastinha estamos agora:”
pwd

 

.

Eu salvo este pequeno script no nano com Control+X aperto a tecla Enter aí eu confirmo apertando a tecla s e aperto Enter de novo. Aí eu digito:

.

ls -t

.

Para que o meu segundo script da minha vida possa ser executado, eu preciso dar permissão para que ele seja executado. Para dar a permissão de execução a ele eu uso chmod a+x. Fica assim:

.

chmod a+x 02.sh

.

ls -l

.

Agora para executar este script eu tenho que usar ./ fica assim:

.

 

./02.sh

 

Aperto a tecla Enter e o resultado é:

.

 

$ ./02.sh
Que tal executarmos o comando pwd, para sabermos em que pastinha estamos agora?
/home/user/Documentos/scripts-estudo1

 

.

Este script só funciona nesta pasta. Se eu mover ele para outra pasta do meu sistema ele vai funcionar? Não sei. Vou fazer o teste depois.

.

Mas, voltando ao assunto; não é que este meu segundo script não é algo incrível?

.

Para mim, é sim!

.

Olha, eu sei o tanto de coisa que um script é capaz de fazer ok?

.

Eu já vi gente fazendo coisas simplesmente inacreditáveis com scripts.

.

Eu não sei fazer coisas incríveis com scripts.

.

Porém no instante deste post provei a mim mesmo, que consigo criar e executar pelo menos dois scripts!

.

Eu acho isto o máximo!

.

Qual é?

.

Qual o problema da gente se sentir bem fazendo uma coisa simples, quase uma coisa besta?

.

Mas o potencial por trás desta simplicidade… Os poderes existem.

.

Uma pessoa que domina a técnica de escrever scripts tem um grande poder hoje em 2017. No mínimo quem sabe escrever scripts tem uma ferramenta poderosa. Infelizmente, o poder não é algo que uma pessoa possa dar para outra pessoa.

.

O poder tem que ser conquistado.
.

No caso aqui é pelo estudo e pela prática. E só tem um jeito de aprender. Aprender a partir do zero, até onde a pessoa seja capaz de ir.

.

Pode-se criar cada coisa útil e até scripts brilhantes.

.

Pode-se criar até uma coisa medonha, pois uma pessoa criativa usando scripts não tem limites e os scripts são apenas o começo…

.

Existem outras coisas…

.

HOJE-EU-VOU-APRENDER-A-USAR-O-TERMINAL-DO-LINUX

JUNHO-2017

 

 

 

Eu não sei nada de Linux, mas quero aprender. Preciso pesquisar, anotar, pensar e testar na pratica as coisas que quero aprender. O Linux é um universo gigantesco cheio de vida, com muitos projetos inteligentes e interessantes sendo imaginados, planejados e executados a toda hora. Cresce sem parar. Quem obtém o melhor do universo Linux? As pessoas que gostam de aprender alguma coisa.

.

MINHAS ANOTAÇÕES BUSCAM DEFINIÇÕES COMANDOS TERMINAL LINUX BASH SAIDAS ENTRADAS – BÁSICO – INICIANTE – INTERMEDIÁRIO

.

Para qualquer serviço além do que um usuário comum faz, no Linux, a gente sempre acaba usando o terminal. O emulador de terminal que usamos hoje em dia, vem de outros tempos. Um monitor antigo que tinha uns 80×24 e era o único modo de se comunicar com o computador (software+harware).

.

Se eu quiser ser algo mais que um usuário normal, comum de computadores é bom eu aprender alguma coisa sobre o terminal do Linux. Também é bom aprender a usar um ou dois programas gráficos muito, muito bem.

.
O KERNEL DAS DISTRIBUIÇÕES LINUX

 

Se eu tenho um computador e todos os aplicativos funcionando harmoniosamente para executar os trabalhos do dia-a-dia. Essa “harmonia” é possível graças ao sistema operacional funcionando como uma interface entre o software, o hardware e o usuário. O responsável por esta harmonia é o Kernel criado por Linus Torwalds em 1991, na época ele era apenas um estudante de ciência da computação que teve necessidade de criar este programa.

Há pouco tempo, quase ninguém sabia da existência do kernel. Era algo muito abstrato e restrito até mesmo aos estudantes de computação das universidades e aos desenvolvedores, o usuário sequer ouvia esta palavra. Com o surgimento do Linux, qualquer usuário iniciante de Linux, já ouviu falar do kernel.

.

Eu mesmo por exemplo. Quando ouço falar de sistemas operacionais Linux, eu sei que todo o sistema operacional é montado sobre um único programa. É um programa sólido. Foi criado por um cara chamado Linus. Este programa é chamado de Kernel. Kernel é uma palavra inglesa que significa “núcleo”. O Kernel é o programa que está mais próximo do hardware. O kernel é a ponte que permite os programas conversarem com o hardware. O hardware responde aos aplicaticos por meio do Kernel. Os Kernels mais antigos podem não responder bem a novos hardwares. Pode ser que certos programas não funcionem bem se usar um Kernel antigo. Os aplicativos não conversam com o Hardware conversam com o Kernel ai sim, o Kernel sim conversa com o Hardware.

.

O Bash é um dos muitos interpretadores de comandos que existem e é o usado no Linux. Tem outros como o CSH o DOS o POWERSHELL e outros. Pelo Bash do terminal Linux eu posso alterar até mesmo o Kernel, mas, as distribuições Linux que escolho por usar já vem com o Kernel mais atual possível.

.

Então, o kernel é o núcleo do sistema operacional e dá aos softwares a capacidade de acessar o hardware. Por isto, o kernel do Linux é atualizado constantemente, acrescentando suporte a novas tecnologias. Usa módulos para adicionar suporte ou para melhorar no suporte a itens já existentes. A numeração do Kernel é muito fácil de aprender e é bem útil saber sobre ela. São 3 números:

.

Número principal: é o ‘primeiro’ número, o número mais à esquerda, indica as mudanças realmente principais no kernel.

.

Número secundário: é o número ‘do meio’, indica a estabilidade de um kernel particular. Números pares indicam uma versão estável e números ímpares indicam uma versão em desenvolvimento.

.

Número ‘de revisão’: é o ‘último’ número, indica a versão.

.

Por exemplo, o kernel 4.9.29 LTS é a vigésima nona versão do kernel 4.9.0. O LTS significa Long Term Support (suporte a longo prazo).

.

NOME DE ALGUNS SÍMBOLOS

 

‘ – Reticência

# – O nome deste símbolo é Cerquilha ou Cardinal

´ – Acento agudo

^ – Acento circunflexo

~ – Til

” – Aspas

/ – Barra

\ – Barra invertida ou contra-barra

– Traço

> – Maior que

& – E comercial

 

————————–
Alguns comandos neste texto meu são precedidos por dois tracinhos – – mas podem aparecer na internet como se fossem um traço só —

 

COMANDOS BÁSICOS
ls: lista os arquivos e diretórios da pasta (DIR no DOS);
clear: limpa a tela (CLS no DOS);
cd ___: entra em um diretório
cd: vai direto para o diretório raiz do usuário conectado
: abre uma linha de comando “livre” , onde você pode digitar um comando extenso (digite q e clique em enter para sair)
pwd: mostra o diretório inteiro que você está
cat: Imprime saída de texto.
df: Mostra as partições usadas ou livres do HD
|more: lista o arquivo com pausa de linha em linha (exemplo: CAT leiame |more)
|lpr: imprime o arquivo listado
free: mostra a memória do computador (MEM no DOS)
shutdown: desliga o computador
shutdown -r now : reinicia o computador
shutdown -h now : desliga o computador. OBS.: O NOW pode ser mudado. Por exemplo:

shutdown -r +10 e o sistema irá reiniciar daqui a 10 minutos).
Reboot: reinicia o sistema instantaneamente (pouco recomendável, preferível shutdown

-r now). Use somente em emergências
startx: inicia o X-Windows (interface gráfica) do Linux
mkdir: cria um diretório (MD no DOS)
rmdir: destrói um diretório VAZIO (RD no DOS)
rm: apaga um arquivo (DEL no DOS)
rm -r: apaga um diretório
who: mostra quem está usando a máquina
wc: conta a quantidade de:
wc -c arquivo : quantidade de bytes
wc -w arquivo : quantidade de palavras
wc -l arquivo : quantidade de linhas
date: mostra data e hora
type: explica um determinado arquivo do sistema
file: descreve um determinado arquivo
find / – name ____ : procura arquivo “____”
useradd nome_do_novo_usuário: cria uma nova conta usuário
passwd nome_do_usuário: cria ou modifica a senha do usuário
userdel -r nome_do_usuário: apaga um usuário
su: passa para o superusuário (perceba que no prompt irá mudar o $ pelo #)
sndconfig: permite configurar a placa de som
TAR: arquivo para criar Backups
TAR -c: cria
TAR -x: restaura
TAR -v: lista cada arquivo

 

TAR -t: lista os arquivos de backups
write: escreve mensagens para outro usuário em rede
mv: move arquivos
linuxconf: configuração do Linux
alias: possibilita a criação de comandos simples
&: coloca o comando desejado em background, ou seja, trabalha enquanto você faz outra coisa no computador
ps: relata os processos em execução
kill: encerra um ou mais processos em andamento
history: mostra os comandos que o usuário já digitou
lpr: imprime um arquivo (exemplo: lpr arquivo)
lpq: mostra o status da fila de impressão
lprm: remove trabalhos da fila de impressão
mtools: permite o uso de ferramentas compatíveis com DOS. Após digitar o comando, você verá que todo comando do DOS terá um M na frente. É normal.

 

PRATICAMENTE TODOS OS COMANDOS POSSUEM PARÂMETROS QUE PERMITEM INCREMENTAR SUAS FUNCIONALIDADES.

 

 

Se eu digitar o comando ls com o parâmetro -R (ls -R), este mostrará todos os arquivos do diretório/pasta, inclusive os ocultos.

ABRO O EMULADOR DE TERMINAL QUE USA O BASH, BUSCANDO NO MENU DO LINUX O TERMINAL. O BASH É O INTERPRETADOR DE COMANDOS DO TERMINAL LINUX.

O BASH É UMA LINGUAGEM QUE DEVE SER PRATICADA EM MODO INTERATIVO. A GENTE QUE QUER APRENDER ALGUMA COISA DE BASH DEVE SER ATIVO E TESTAR OS COMANDOS. LER, ENTENDER E PRATICAR. BRINCAR COM O TERMINAL DO LINUX, PARA MIM, É PRATICAR.

 

Para eu saber sobre comandos, posso usar man + nome_do_comando, info + nome_do_comando, nome_do_comando + help.

Vou usar o Terminal em modo interativo. Tem comandos built in que são internos, e comandos não internos. O Terminal usa pipes e tem uma filosofia que é saber que A UNIÃO DE VÁRIOS COMANDOS, PIPES E PARÂMETROS FAZ A FORÇA.

O Terminal possui meios para ser executado em primeiro plano e segundo plano. Terminal e Console, são duas coisas diferentes. Shell script usado no terminal do Linux, nada mais é que dialogos programados. O terminal controla comandos executados. Pausa, para, reinicia… No Bash do terminal Linux posso executar multiplos comandos e posso fazer os comandos se comunicarem em primeiro plano e em segundo plano.

VEJO ALGO PARECIDO COM ISTO AO ABRIR O TERMINAL:

 

nome_do_usuário@nome_do_computador ~ $

Ao instalar a distro Linux, eu criei um nome de usuário e um nome para o computador e uma senha de administrador com cinco letras maiúsculas, cinco letras minúsculas, cinco simbolos e cinco números.

Quando o terminal pedir a senha ela será invisível. É uma interação entre o teclado e o terminal.

.

user@pc ~$

.

user é o usuário que está logado; pc é a máquina em que está logado; @ indica que user está logado em pc; ~ indica que o usuário está dentro do seu diretório pessoal, ou seja, /home/user; $ indica que é um usuário comum e não o administrador do sistema. Se fosse o administrador do sistema o simbolo seria #. Os diretórios mais especiais do Linux atualmente são /dev, /proc, /sys.

.

Para poder navegar pelas pastas do Linux, eu quero entender como estas pastas são organizadas. Estas pastas que são chamadas também de diretórios, possuem uma descrição fácil de entender.

.

 

ESTRUTURA DE DIRETÓRIOS/PASTAS DO LINUX
Diretório | Descrição
————————————
/bin   Arquivos binários de comandos essenciais do sistema.
————————————
/boot   Arquivos de boot (inicialização; boot-loader; Grub); kernel do Linux.
————————————
/dev   Dispositivos (devices) de entrada/saída: floppy, hardisk, cdrom, modem .
————————————
/etc   Arquivos de configuração (scripts) e inicialização.
————————————
/home   Diretório local (home) de usuários.
————————————
/lib   Bibliotecas e módulos(drives): compartilhadas com freqüência.
————————————
/mnt   Diretório de montagem de dispositivos, sistemas de arquivos e partição.
————————————
/opt   Para instalação de programas não oficiais da distribuição.
————————————
/proc   Diretório virtual (RAM) onde rodam os processos ativos.
————————————
/root   Diretório local do superusuário (root).
————————————
/sbin   Arquivos de sistema essenciais (binários do superusuário).
————————————
/tmp   Arquivos temporários gerados por alguns utilitários.
————————————
/usr   Arquivos de usuários nativos da distribuição.
————————————
/usr/local   Para instalação de programas não oficiais da distribuição.
————————————
/usr/src   Arquivos fontes do sistema necessários para compilar o kernel.
————————————
/var   Arquivos de log e outros arquivos variáveis.
————————————

 

.
ENTENDENDO COMO FUNCIONAM OS COMANDOS DO LINUX

.

Os comandos são como uma linha de produção. Cada comando executa uma função e no final temos o produto pronto. Por exemplo, os comandos ls, mkdir, cd, touch, echo, ps, pid, tty, find são comandos internos do Bash. O ls lista pastas e diretórios. O mkdir cria pastas. O cd muda de pasta ou diretório. O touch cria arquivos e atualiza data de acesso de arquivos e pastas. O echo ecoa o parâmetro que foi passado para ele. O ps permite ver processos, programas que estão rodando no sistema. O pid mostra o número do processo. O tty informa sobre o terminal. O find procura por arquivos em pastas e diretórios. Se eu quisesse ver todos os processos digitaria no terminal:

ps -ax

.

Se eu quisesse procurar por comandos executados anteriormente apertaria as teclas:

ctrl+R

.

Todos os comandos ficam gravados em um histórico que eu posso apagar se quiser digitando:

history -c

.

Se eu quisesse ver os arquivos de uma pasta exibidos por data de acesso usaria:

ls -t

 

Se eu quiser ver a pasta Imagens em primeiro lugar, digito:
touch Imagens

 

 

Depois digito:

ls -t

 

Se eu quiser ver a pasta Documentos em primeiro lugar, digito:
touch Documentos

 

Depois digito:

ls -t

 

 

APRENDENDO MAIS SOBRE O TERMINAL DO LINUX

 

O terminal possui entrada. Possui um local onde acontece o processo. Possui saida principal. Possui saída de erro. Então o terminal tem entradas e saídas que são usadas por processos, programas ou comandos em execução que por sua vez possuem identificadores PID. Um byte é igual a um caractere do teclado.

Pela entrada padrão do terminal (stdin) o computador (hardware+software) ouve. Acontece então um processo e obtemos respostas, pois a máquina fala pelas saidas padrão (stdout) e saida de erro (stderr) que são impressas na tela do terminal.

Posso redirecionar isto que aparece na tela do terminal para dentro de arquivos. Existem dois tipos de direcionamentos que estou aprendendo agora. Destrutivo e não destrutivo. Para redirecionar respostas para dentro de arquivos usa-se o simbolo  >.

 

ATALHOS DE TECLADO DO TERMINAL LINUX

Atalho | Função

Ctrl + a   Move o cursor para o início da linha

Ctrl + e   Move o cursor para o final da linha

Ctrl + l   Limpa a tela, semelhante ao comando clear

Ctrl + u   Apaga do cursor ao início da linha.

Ctrl + k   Apaga do cursor ao final da linha.

Ctrl + w   Apaga uma palavra antes do cursor.

Ctrl + _   Desfaz as últimas mudanças.

!!   Executa o último comando no histórico.

!abc   Executa o último comando no histórico começando com abc.

!n   Executa o comando de número n no histórico.

^abc^xyz   Substitui a primeira ocorrência de abc por xyz no último comando e executa o mesmo.

Redirecionando a saída do ls para um arquivo chamado saida-do-comando-ls.

Se eu digitar:

 

ls > saida-do-comando-ls

O que apareceria na tela do terminal vai ser gravado em um arquivo chamado saida-do-comando-ls. Usei “maior que” > comando destrutivo que vai reescrever sobre a informação no arquivo.

Para eu ver o que está escrito no arquivo saida-do-comando-ls uso cat. Fica assim:
cat saida-do-comando-ls

Se eu digitar:
ls >> saida-do-comando-ls

 

O que apareceria na tela do terminal vai ser gravado junto com o que estiver gravado anteriormente, em um arquivo chamado saida-do-comando-ls. Usei “dois maior que” >> comando não-destrutivo que vai escrever mais uma vez a informação no arquivo.

Para eu ver o que está escrito no arquivo saida-do-comando-ls uso cat. Fica assim:
cat saida-do-comando-ls

 

Para redirecionar usando a saida de erro (stderr[2]), usando modo não destrutivo (>>) e modo destrutivo (>) digito:
ls 2>> saida-do-comando-ls
ls 2> saida-do-comando-ls

 

 

Para forçar erro uso ls com uma palavra inventada qualquer.
ls plah

Para gravar a resposta “ls: não foi possível acessar ‘plah’: Arquivo ou diretório não encontrado” da saida de erro (2) mandando a informação do comando ls de plah para errols

ls plah 2> errols

 

 

Para eu ver o que está escrito em errols uso o comando cat. Fica algo assim:
~ $ cat errols
ls: não foi possível acessar ‘plah’: Arquivo ou diretório não encontrado
Se eu usar:

ls plah 1> errols
Não vai dar nada. Porque eu usei o comando destrutivo (>).
user@pc ~ $ cat errols
user@pc ~ $

 

 

EU QUERO SABER, ONDE ESTOU NO SISTEMA. QUERO QUE O TERMINAL ME DICA ONDE ESTOU. DIGITO pwd E APERTO A TECLA ENTER. RESULTADO:

user@pc ~$ pwd
/home/user
POSSO USAR COMANDOS PARA DIRECIONAR INFORMAÇÕES FILTRADAS PARA ARQUIVOS USANDO O COMANDO FIND. Uso find, cat, 1>, 2>, &> ESCREVO O SEGUINTE:

 

find (A resposta será enorme e tudo misturado.)
find /sys (A resposta será enorme e tudo misturado.)
find /sys 1> saidafind 2> errofind (Neste comando uma parte vai para um arquivo que vai receber a resposta da saida padrão e outra que vai criar um arquivo que vai receber a resposta da saida de erro)
Agora digito:
cat saidafind
cat errofind
find /sys &>tudofind (Neste caso tudo da saida 1 ou 2 para tudofind)
cat tudofind

 

 

PARA DIRECIONAR A SAIDA EM Y ESCREVO:

 

ls > saida-ls
cat saida-ls
ls sssss > saida-ls
cat saida-ls
ls sssss > saida-ls 2>&1 (Neste caso manda tudo para o arquivo saida-ls)
ls sssss > saida-ls 1>&2
ls > saida-ls 1>&2
ls > saida-ls 2> saidalserro 1>&2
cat saidalserro
ls &> tudols

 

 

PARA FECHAR UMA DAS SAIDAS. TAPANDO CANOS.

 

ls
ls 1>&- (O menos fecha o saida1/cano1)
ls 1>&- 2>&- (Fecho as duas saídas)
Sobre o &:

O & coloca o comando desejado em background.
TAPAR E JOGAR EM LUGAR NENHUM. MÉTODO UNIX E LINUX.

 

ls > /dev/null
ls ssss >/dev/null
ls ssss > /dev/null 2>/dev/null
Redirecionamento entre processos usando o comando grep. O grep pega a entrada, filtra e só joga no terminal o que combina com o que foi passado. Se digitar grep teste, só será imprimido o que combinar com teste. Para filtrar a saída do ls usando o grep:

 

ls | grep saida
ls | grep erro
Usando o Bash pega-se a saida e conecta-se na entrada com o uso de pipe “|”. O grep filtra expressões regulares e filtra texto. O pipe redireciona a saida padrão 1.
ls |& grep erro
O comando grep significa (Globally Search a Regular Expression and Print). A ideia é procurar texto em uma string ou dentro de arquivos e mostrar linhas, ocorrências, usar combinações para pesquisar e o resultado da pesquisa ser mostrado na tela. O comando grep já vem instalado no Linux. Para confirmar e verificar a versão uso os comandos grep e grep com o PARÂMETRO -V. Exemplos abaixo:
~ $ grep
Uso: grep [OPÇÃO]… PADRÃO [ARQUIVO]…
Experimente “grep –help” para mais informações.
~ $ grep -V
grep (GNU grep) 3.0
Copyright (C) 2017 Free Software Foundation, Inc.
Licença GPLv3+: GNU GPL versão 3 ou superior <http://gnu.org/licenses/gpl.html&gt;.
Este é um software livre: você é livre para alterá-lo e redistribuí-lo.
NÃO HÁ GARANTIAS, na máxima extensão permitida por lei.

 

Escrito por Mike Haertel e outros, veja <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS&gt;.

 

 

PARÂMETROS PARA O COMANDO GREP QUE IREI UTILIZAR E SUAS FUNÇÕES:
-c  Conta quantas vezes apareceu a string que esta pesquisando

-v  Mostra na tela “tudo” menos onde houver a ocorrência da string pesquisada

-i  Realiza uma busca pela string ignorando o case, sendo case-insensitive

-o  Ira mostrar na tela apenas as ocorrências da string pesquisada ignorando o resto

-n  Ira mostrar na tela na primeira coluna a linha onde encontrou a string pesquisada

-B  Numero de linhas a serem impressas antes da linha que contem a string pesquisada [BEFORE]

-A  Numero de linhas a serem impressas na tela depois da encontrar a linha com a string [AFTER]

-C  Quantidade de linhas antes e depois da linha que contem a string [CONTEXT]

-q  Ira procurar pela string informada, porém estará em modo silencioso, nada sera impresso na tela, porém caso encontre o comando encerra com 0, caso não encontre nada será 1

-E  Extende o uso de Regex no padrão e combinação, usando logica AND e OR por exemplo

-f  Um arquivo com combinações de padrões com Regex, podendo usar varias combinações

-l  Mostra somente o nome do arquivo onde foi encontrado a string pesquisada

-L  Semelhante ao -v, porque mostra apenas os arquivo que não contem a string informada

-h  Pesquisa varias arquivos, diretórios se com -r mas não mostra o nome dos arquivos

-r  Ira realizar uma pesquisa recursiva em todos os diretórios a partir do informado

–color  Deve-se passar o parâmetro ‘never’ caso não queira que a saída marque com cor a string ou ‘auto’ e ‘always’ para operar conforme necessite. Pode mudar a cor alterando GREP_COLOR, GREP_COLORS no environment

 

 

Vou criar um arquivo chamado palavras.txt e inserir um texto dentro e brincar com o grep.

 

Para fazer isto, uso o comando echo seguido dos parâmetros -ne.

.

As palavra que estarão no texto devem ser abraçadas por aspas ” no início e no fim. Cada linha do texto que é separada por \n e cada palavra é separada por espaços e o texto em si é escrito como se eu fosse escrever um texto normal. Para direcionar este texto entre aspas “texto” devo usar o simbolo menor que > seguido do nome do arquivo a ser criado seguido da extenção no caso aqui .txt. Veja o exemplo abaixo:
~ $ echo -ne “Esta é a primeira linha.\nEsta é a segunda linha.\nEsta é a terceira linha.\n:) E assim por diante…\n” > texto-teste.txt
Para ver o que está escrito digito cat texto-teste.txt. Resultado:

~ $ cat texto-teste.txt
Esta é a primeira linha.
Esta é a segunda linha.
Esta é a terceira linha.
🙂 E assim por diante…
Outro exemplo:
~ $ echo -ne “A primeira linha vai acabar agora. \nA segunda linha começa agora e já terminou. \nEsta é a terceira linha que agora acabou. \nPor fim, a quarta linha é mesmo o fim. \n” > texto4.txt
~ $ cat texto4.txt
A primeira linha vai acabar agora.
A primeira linha começa agora e já terminou.
Esta é a terceira linha que agora acabou.
Por fim, a quarta linha é mesmo o fim.
~ $ echo -ne ‘A “primeira” linha vai acabar agora. \nA “segunda” linha começa agora e já terminou. \nEsta é a “terceira” linha que agora acabou. \nPor fim, a “quarta” linha é mesmo o fim. \n’ > texto4.txt
~ $ cat texto4.txt
A “primeira” linha vai acabar agora.
A “segunda” linha começa agora e já terminou.
Esta é a “terceira” linha que agora acabou.
Por fim, a “quarta” linha é mesmo o fim.
VOU FAZER OUTRO TEXTO:
~ $ echo -ne “rumor\nasa casa\nCasa Asa\nCASA ASA\nRaspberryPI asa casa\nRaspberry PI Casa Asa Nasa\nRaspberry B PI CASA ASA NASA\nArduino Casa Asa Nasa\narduino\nARDUINO\nIDEArduino\nLinux, conhecimento é poder\nEu não programo Python e você?\n” > palavras.txt

 

Para eu visualizar o arquivo palavras.txt no terminal eu vou usar o comando cat seguido do nome completo do arquivo. Exemplo abaixo:
~ $ cat palavras.txt
rumor
asa casa
Casa Asa
CASA ASA
RaspberryPI asa casa
Raspberry PI Casa Asa Nasa
Raspberry B PI CASA ASA NASA
Arduino Casa Asa Nasa
arduino
ARDUINO
IDEArduino
Linux, conhecimento é poder
Eu não programo Python e você?
VOU USAR O GREP E PESQUISAR PELA STRING “Raspberry“, POSSO USAR DE DUAS MANEIRAS COM O cat UM PIPE “|” E LOGO EM SEGUIDA UM grep OU DIRETAMENTE COM O COMANDO, A PRIMEIRA OPÇÃO É MUITO UTILIZADA, PORÉM PERDE PERFORMANCE NO CASO DE REALIZAR PESQUISA EM MUITOS ARQUIVOS OU EM UM ARQUIVO LONGO.

 

$ cat palavras.txt | grep “Raspberry”
RaspberryPI asa casa
Raspberry PI Casa Asa Nasa
Raspberry B PI CASA ASA NASA
$ grep “Raspberry” palavras.txt
RaspberryPI asa casa
Raspberry PI Casa Asa Nasa
Raspberry B PI CASA ASA NASA

 

CASO EU QUEIRA CONTAR O NUMERO DE OCORRÊNCIAS DA STRING “Raspberry”:
$ grep -c “Raspberry” palavras.txt
3

 

 

SE EU QUISER VER TUDO MENOS AS STRINGS QUE CONTENHAM “Raspberry”:
$ grep -v “Raspberry” palavras.txt
rumor
asa casa
Casa Asa
CASA ASA
Arduino Casa Asa Nasa
arduino
ARDUINO
IDEArduino
Linux, conhecimento é poder
Eu não programo Python e você?
AGORA QUERO PESQUISAR PELA STRING “arduino”.
$ grep “arduino” palavras.txt
arduino

 

Temos Arduino escrito de diversas maneiras, então vamos pedir para ser case-insensitive.
~ $ grep -i “arduino” palavras.txt
Arduino Casa Asa Nasa
arduino
ARDUINO
IDEArduino
E SE NO LUGAR DE MOSTRAR A LINHA INTEIRA OU O QUE ESTIVER JUNTO EU MOSTRAR APENAS A STRING PROCURADA? VOU USAR OS PARÂMETROS -o, -oi.

~ $ grep -o “arduino” palavras.txt
arduino
~ $ grep -oi “arduino” palavras.txt
Arduino
arduino
ARDUINO
Arduino

 

~ $ grep -oi “Raspberry” palavras.txt
Raspberry
Raspberry
Raspberry

 

 

SE EU PRECISAR SABER O NUMERO DA LINHA ONDE FOI ENCONTRADA A STRING.
~ $ grep -n “Raspberry” palavras.txt
5:RaspberryPI asa casa
6:Raspberry PI Casa Asa Nasa
7:Raspberry B PI CASA ASA NASA
AGORA VOU PESQUISAR PELA STRING “arduino” E OBTER TAMBÉM AS 2 LINHAS ANTES DA STRING ENCONTRADA.

 

~ $ grep “arduino” -B 2 palavras.txt
Raspberry B PI CASA ASA NASA
Arduino Casa Asa Nasa
arduino
O MESMO PODEMOS FAZER OBTÉM AS LINHAS DEPOIS DA LINHA COM A STRING PESQUISADA.

 

$ grep “arduino” -A 2 palavras.txt
arduino
ARDUINO
IDEArduino

 

E PODEMOS UNIR AS DUAS OPÇÕES, PEGANDO E IMPRIMINDO LINHAS ANTES E DEPOIS DA LINHA QUE CONTEM A STRING PESQUISADA.

 

~ $ grep “arduino” -C 2 palavras.txt
Raspberry B PI CASA ASA NASA
Arduino Casa Asa Nasa
arduino
ARDUINO
IDEArduino

 

CASO NÃO QUEIRA MOSTRAR NADA NA TELA, SÓ SABER SE TEVE SUCESSO OU NÃO NA PESQUISA.

 

~ $ grep -q “arduino” palavras.txt
~ $ echo $?
0
~ $ grep -q “Beaglebone” palavras.txt
~ $ echo $?
1

 

 

DESTA VEZ VOU CRIAR MAIS 2 ARQUIVOS sistema.txt E hardware.txt, E TAMBÉM COPIAR A SAÍDA DO dmesg PARA dmesg.log E BRINCAR COM ESTES CARAS.

 

$ echo -ne “Linux Solus Manjaro Lubuntu Ubuntu\nLinux Devuan Debian\nLinux Solus Project Mint\nLinux Solus Manjaro Debian Devuan CentOS\nRaspbian\nYocto RaspberryPI\nBuildroot RaspberryPI\n” > sistema.txt
$ echo -ne “ARM 1176JZF\nARM Cortex-A7\nBCM2835\nBCM2836\nBeaglebone Black\nAM3358\n” > hardware.txt
$ dmesg > dmesg.log

 

 

POSSO AGREGAR MAIS PALAVRAS PARA REALIZAR MEUS TESTES.
AGORA EU QUERO PESQUISAR EM QUALQUER ARQUIVO E QUE CONTENHA A STRING “Raspberry”.

 

~ $ grep “Raspberry” *
palavras.txt:RaspberryPI
palavras.txt:Raspberry PI
palavras.txt:Raspberry B PI
sistema.txt:Yocto RaspberryPI
sistema.txt:Buildroot RaspberryPI

 

~ $ grep “Raspberry” ./*
./palavras.txt:RaspberryPI
./palavras.txt:Raspberry PI
./palavras.txt:Raspberry B PI
./sistema.txt:Yocto RaspberryPI
./sistema.txt:Buildroot RaspberryPI
OS DEMAIS PARÂMETROS ANTERIORES SE APLICAM AQUI TAMBÉM.

$ grep -n “Raspberry” *
palavras.txt:5:RaspberryPI
palavras.txt:6:Raspberry PI
palavras.txt:7:Raspberry B PI
sistema.txt:6:Yocto RaspberryPI
sistema.txt:7:Buildroot RaspberryPI
SE EU CRIAR UM DIRETÓRIO exemplo/ E MOVER O palavras.txt PARA ELE SERÁ QUE VAI ENCONTRAR A STRING “Raspberry” NELE AINDA?

 

$ mkdir exemplo && mv palavras.txt exemplo/

 

$ grep “Raspberry” *
grep: exemplo: Is a directory
sistema.txt:Yocto RaspberryPI
sistema.txt:Buildroot RaspberryPI

 

ELE AVISA QUE EXISTE UM DIRETÓRIO ONDE ESTA SENDO FEITA A PESQUISA, PARA QUE ELE ACESSE O(S) DIRETÓRIO(S) DEVE-SE PASSAR O PARÂMETRO -r PARA RECURSIVIDADE.

 

$ grep -r “Raspberry” *
exemplo/palavras.txt:RaspberryPI
exemplo/palavras.txt:Raspberry PI
exemplo/palavras.txt:Raspberry B PI
sistema.txt:Yocto RaspberryPI
sistema.txt:Buildroot RaspberryPI
AS VEZES SÓ INTERESSA SABER A OCORRÊNCIAS MAS NÃO O ARQUIVO.

 

$ grep -hr “Raspberry” *
RaspberryPI
Raspberry PI
Raspberry B PI
Yocto RaspberryPI
Buildroot RaspberryPI
CASO QUEIRA APENAS SABER QUAL ARQUIVO CONTEM A STRING MAS NÃO PRECISA MOSTRAR ELA.
$ grep -lr “Raspberry” *
exemplo/palavras.txt
sistema.txt

 

SE QUISER SABER OS ARQUIVOS QUE NÃO POSSUEM A STRING PESQUISADA.
$ grep -Lr “Raspberry” *
dmesg.log
hardware.txt
HABILITANDO OU NÃO O USO DA SAÍDA COLORIDA.

 

$ grep -r –color=always “Raspberry” *
exemplo/palavras.txt:RaspberryPI
exemplo/palavras.txt:Raspberry PI
exemplo/palavras.txt:Raspberry B PI
sistema.txt:Yocto RaspberryPI
sistema.txt:Buildroot RaspberryPI

$ grep -r –color=never “Raspberry” *
exemplo/palavras.txt:RaspberryPI
exemplo/palavras.txt:Raspberry PI
exemplo/palavras.txt:Raspberry B PI
sistema.txt:Yocto RaspberryPI
sistema.txt:Buildroot RaspberryPI

 

O COMANDO cd SERVE PARA ACESSAR/NAVEGAR ENTRE DIRETÓRIOS. DIGITO:
user@pc ~$ cd nome_da_pasta

 

user@pc ~$ cd .. # para sair de diretório, note que os dois pontos estão separados do comando.
user@pc ~$ ls # lista aquivos ou pastas de um determinado diretório. O ls pode ser usado com opções -a, -A, –author, -b, –block-size, -B, -c, -C, -d, -f, -F, -G, -h e outros…
O diretório indicado para instalar programas opcionais é o diretório /opt.
user@pc ~$ lsusb # lista os periféricos que estão conectados na porta usb.
user@pc ~$ mkdir # cria uma pasta.
user@pc ~$ rmdir # remove um diretório/pasta vazia.
user@pc ~$ cat # concatena arquivos e imprime na saída padrão (exibe na tela). Em arquivos, usao o cat para listar o conteúdo deles na tela. Com o uso de argumentos, podsso usá-lo para unir diferentes arquivos em um só, dentre outra funções. É prática comum utilizar isso para juntar arquivos de vídeo grandes, como filmes, que muitas vezes são divididos em várias partes. Para unir video1.mpeg a video2.mpeg emvideo.mpeg que estão em /home/user usaria o comando abaixo:

 

user@pc ~$ cat video1.mpeg video2.mpeg > video.mpeg
user@pc ~$ touch # O comando touch é usado atualizar as informações sobre as datas de último acesso e última modificação de um arquivo. Se o arquivo não existir, ele é criado, por padrão. Isso faz o touch ser muito utilizado para criar arquivos vazios, através do comando touch [arquivo]. -a modifica apenas a data do último acesso;
-c, Não cria arquivos, caso eles não existam;
-m, Modifica apenas a data de modificação;
-t, A data e hora a ser utilizada para o último acesso ou última modificação. O formato utilizado é MMDDhhmm (mês, dia, hora e minuto)

 

Se eu quiser criar um arquivo chamado sinai.txt usando o comando touch. Faço assim:
touch sinai.txt
Se quiser criar vários arquivos de uma vez só:
touch sina bina pena borda perl

 

Depois digito:
ls
user@pc ~$ sudo # o comando sudo é um dos mais utilizados, faz requerimento de superusuário. Requer senha.
user@pc ~$ sudo su # após digitar a senha todas as funções realizadas no terminal estará sendo feita como superusuário, prática não muito recomendada.
user@pc ~$ top # exibe todos os processos que estão sendo executados, utilizando para “matar” um processo que está “travado”.
user@pc ~$ ps # assim como o top também lista os processos que estão sendo executados, porém para “matar” o processo necessita pegar o número do PID e utili class=”rol-comandos”zar o comando kill.
user@pc ~$ kill # comando para “mata” um processo travado por meio do PID que pode ser adquirido por meio do comando ps
user@pc ~$ cp # comando para copiar um arquivo ou diretório para um outro local, com o mesmo nome ou com nome diferente.
user@pc ~$ mv # comando para mover ou renomear um arquivo ou diretório para um outro local
user@pc ~$ rm # O rm é utilizado para excluir arquivos.
user@pc ~$ rm -f # remove forçado
user@pc ~$ rm -rf # Exclui recursivamente todo o conteúdo do diretório e o próprio diretório. Quando quiser excluir um diretório que não está vazio, utilize esse parâmetro.
user@pc ~$ ln # Esse é o comando utilizado para criar links, simbólicos ou absolutos.
user@pc ~$ cmp # Esse comando é utilizado para comparar dois arquivos e mostrar a primeira diferença entre eles. Use para certificar-se de que dois arquivos possuem ou não o mesmo conteúdo.
user@pc ~$ diff # Esse comando compara dois arquivos de texto e mostra as diferenças entre eles.
user@pc ~$ patch # Utilizamos esse comando para atualizar as diferenças geradas através do comando diff.
user@pc ~$ grep # O grep é utilizado para encontrar padrões em arquivos de texto, ou, em outras palavras, procura num arquivo todas as linhas que possuem a palavra ou expressão informada e as exibe na tela.

 

user@pc ~$ cut # O cut é utilizado para selecionar colunas de texto em um arquivo.
user@pc ~$ head # Usamos esse comando para exibir as linhas iniciais de um arquivo.
user@pc ~$ more # Usamos esse comando para realizar a paginação de arquivos de texto cujo conteúdo não cabe na tela.
user@pc ~$ less # O less tem a mesma utilidade do more, com a vantagem de poder rolar o texto exibido para cima e para baixo através do uso dos direcionais, além de contar com um localizador de texto.
user@pc ~$ sort # Usamos esse comando para classificar as linhas de um arquivo de texto.
user@pc ~$ tail # Esse comando é utilizando para mostrar as últimas linhas de um arquivo de texto.
user@pc ~$ wc # Conta o número de linhas, palavras, caracteres e bytes nos arquivos.
user@pc ~$ find # O find (procurar, em inglês) é uma ferramenta que utilizamos para localizar arquivos ou diretórios no sistema de arquivos.
user@pc ~$ whereis # Localiza o executável, arquivo/diretório de configuração, diretórios de bibliotecas, arquivos compartilhados, código-fonte e caminho da página de manual do programa especificado.
user@pc ~$ which # Exibe o caminho completo para o comando selecionado.
user@pc ~$ fuser # Esse programa é utilizado para descobrir quais processos estão utilizando determinados arquivos ou soquetes.
user@pc ~$ df # Mostra o espaço utilizado de cada partição.
user@pc ~$ du # Esse comando, sigla de disk usage (uso de disco), é usado para estimar o espaço em disco usado pelos arquivos. Em outras palavras, usamos o du para saber o tamanho dos arquivos.
user@pc ~$ free # Comando muito utilizado para análise do desempenho do sistema, o free exibe informações sobre o uso de memória pelo computador.
user@pc ~$ time # Esse é um comando muito útil para medir o desempenho do sistema. Com o time podemos medir o tempo, em segundos, necessários para executar um processo ou programa.
user@pc ~$ uptime # Mostra o período em que o sistema permaneceu em processamento desde que foi ligado.
user@pc ~$ dmesg # Esse comando é utilizado para ver as mensagens de inicialização do sistema. Útil para analisar eventuais mensagens de erro exibidas devido a qualquer problema que esteja ocorrendo durante a inicialização. Como as mensagens são muito extensas, utilize o more ou o less para visualizar as informações:

 

user@pc ~$ dmesg | more

user@pc ~$ dmesg | less
user@pc ~$ echo # Exibe mensagens na tela. Escreve textos em arquivos. Esse comando é utilizado principalmente para a construção de scripts de sistema. Exemplo:

 

~ $ echo “Oi Mundo!”
~ $ echo “Oi Mundo!” && echo “Tchau Mundo!”
~ $ echo “É fácil escrever usando o comando echo” > texto2.txt
~ $ cat texto2.txt

 

~ $ echo “esta é minha segunda linha” >> texto2.txt

 

~ $ cat texto2.txt

 

~ $ echo “esta é minha terceira linha” >> texto2.txt

 

~ $ cat texto2.txt
ECHO usando -e, “, r, e \n

 

~ $ echo -e “Bom, esta é a primeira linha.\r\nEsta é a segunda linha\r\nEsta é a terceira linha!”

 

 

USANDO COMANDO ECHO PARA ESCREVER VÁRIAS LINHAS E CRIAR UM NOVO ARQUIVO DE TEXTO TUDO AO MESMO TEMPO:
~ $ echo -e “O nome do arquivo de texto será texto3.txt e esta é a primeira linha.\r\nEsta é a segunda linha do arquivo texto3.txt.\r\nEsta é a terceira linha do arquivo texto3.txt e ponto final.\r\nDepois eu posso usar o comando grep para ver o que acontece.” > texto3.txt
user@pc ~$ sync # Esse comando é utilizado para gravar os dados armazenados em cache nos locais apropriados. O uso mais comum é para gravar os dados em unidades de disco removível, geralmente disquete.
user@pc ~$ sudo shutdown -r now # Reinicia o computador. Por padrão, somente o root pode executar esse comando.
user@pc ~$ exit # sair do terminal, fechar o terminal
user@pc ~$ shutdown # Desligar o computador
user@pc ~$ shutdown -h now # desligar o computador agora
user@pc ~$ clear # Limpa a tela do terminal
user@pc ~$ history # O comando history (histórico) mostra a lista dos últimos comandos executados pelo usuário corrente. Isso é útil quando há a necessidade de executar um comando extenso, com muitos parâmetros, do qual não consigamos nos lembrar, ou para fazer auditoria.

 

 

Quero saber qual o release estou usando. Digito:

user@pc ~$ lsb_release -a
Quero saber que dia é hoje. Digito no terminal e recebo a a resposta:

user@pc ~$ date
Qui Abr 20 03:56:35 BRT 2017
Quero saber o calendário digito e recebo a resposta:

user@pc ~$ cal
Abril 2017
Do Se Te Qu Qu Se Sá
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
Instalei lm-sensors. Quero saber a temperatura da máquina. Digito sensors e recebo a resposta:

 

user@pc ~$ sensors
acpitz-virtual-0
Adapter: Virtual device
temp1: +48.0°C (crit = +104.0°C)
temp2: +48.0°C (crit = +104.0°C)

coretemp-isa-0000
Adapter: ISA adapter
Physical id 0: +48.0°C (high = +105.0°C, crit = +105.0°C)
Core 0: +48.0°C (high = +105.0°C, crit = +105.0°C)
Core 1: +48.0°C (high = +105.0°C, crit = +105.0°C)
Quero saber o espaço em disco do sistema de arquivos usado por todas as partições. “df -h” digito e recebo a resposta:

user@pc ~$ df -h
Sist. Arq. Tam. Usado Disp. Uso% Montado em
devtmpfs 1,9G 0 1,9G 0% /dev
tmpfs 2,0G 0
Quero saber a quantidade de memória livre e usada no sistema. “free -m” digito e recebo a resposta:

 

user@pc ~$ free -m
total used free shared buff/cache available
Mem: 3930 737 109 274 3083 2675
Swap: 3815 0 3815
Quero saber a arquitetura do computador. digito arch que é igual ao comando uname -m, e recebo a resposta:

user@pc ~$ arch
x86_64

user@pc ~$ uname -m
x86_64
Uso “uname” para exibir informação básica e ”uname -a” para exibir todas as informações.

user@pc ~$ uname
Linux

user@pc ~$ uname -a
Linux rf7E 4.4.0-53-generic #74-Ubuntu SMP Fri Dec 2 15:59:10 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
Quero saber em tempo real informações sobre o meu sistema linux, digito top ou htop:

user@pc ~$ top

user@pc ~$ htop
Comandos interativos mais importantes do ”top”.

”k” – Finaliza, ou seja, “mata” um processo.

”m” – Ativa/Desativa a exibição de informações da memória.

”M” – Ordena os processos pelo uso da memória residente.

”N” – Ordena os processos pelos seus PIDs.

”P” – Ordena os processos pelo uso da CPU (este é o padrão).

”ESPAÇO” – Atualiza imediatamente a visualização do quadro de processos.

”h” – Exibe a ajuda dos comandos interativos do ”top”.

”q” – Abandona o comando ”top”.
Quero saber um quadro atual, porém estático dos processos que estão sendo executados no sistema. Digito e recebo a resposta:

user@pc ~$ ps
PID TTY TIME CMD
9409 pts/0 00:00:00 bash
12148 pts/0 00:00:00 ps
Se eu quiser matar o processo 9409, digito kill -9 e o número do processo. No caso fecharei o terminal que estou usando.

user@pc ~$ kill -9 9409

Aperto enter.
Quero finalizar processos pelo nome ao invés do PID como faz o comando kill. Uso killall.

Se eu tiver aberto o Firefox e quero fecha ele pelo terminal, se eu digitar no terminal ”killall mozilla-firefox” finalizo processo mozilla-firefox, fechando com isso o navegador web Mozilla Firefox. O nome dos processos ativos pode ser observado com uso do comando ps.

 

Quero verificar o SWAP. Simplificando, pode-se dizer que a memória é de dois tipos: a memória RAM e a SWAP (utilização do disco rígido ou HD). A memória RAM é bastante mais rápida que os HDs, no entanto ela é mais limitada em termos de tamanho. Então o que o Linux faz é utilizar a memória RAM e quando precisar de mais memória utiliza o disco como memória auxiliar. No computador caseiro de 2017, o SWAP pode ser baixo (10).

user@pc ~$ cat /proc/sys/vm/swappiness
10
Vou saber o quanto de memória RAM tenho no computador, que tipo de memória tenho no computador, quando de memória a máquina suporta e muito mais. Digito:

user@pc ~$ sudo dmidecode –type memory

Digito a senha e aperto enter.
Para saber quanto espaço tenho no disco, digito:

user@pc ~$ sudo fdisk -l

Aperto enter.
Quero criar uma pasta chamada dia na pasta Documentos e dentro desta pasta 3 arquivos chamados de azul, verde e roxo tudo pelo terminal. Passo a passo, eu faço assim:

user@pc ~$ pwd
/home/user

user@pc ~$ ls
‘Área de trabalho’ Downloads Música
‘Biblioteca do calibre’ Imagens Público
Documentos Modelos Vídeos

 

user@pc ~$ cd Downloads

 

user@pc/Downloads ~$

 

user@pc/Downloads ~$ pwd
/home/user/Downloads

 

user@pc/Downloads ~$ ls

 

user@pc/Downloads ~$ mkdir dia

 

user@pc/Downloads ~$ ls
dia

 

user@pc/Downloads ~$ cd dia

 

user@pc ~/Downloads/dia $
VARIÁVEIS
O que são variáveis? São como gavetas. Gaveta é um compartimento que guarda determinado tipo de conteúdo. Quando abro uma gaveta vejo o que tem dentro desta gaveta. Num armário com muitas gavetas, eu dou nome para cada gaveta. No computador as gavetas possuem dados em bit. Cada letra é um bit. A etiqueta de cada gaveta será o nome da variável. Cada um dos caracteres do teclado cada um é um bit. Como manusear ou criar uma variável no Bash? Sempre tento usar nomes maiúsculos para etiquetar as variáveis.

.

VARIÁVEIS

 

O que são variáveis? São como gavetas. Gaveta é um compartimento que guarda determinado tipo de conteúdo. Quando abro uma gaveta vejo o que tem dentro desta gaveta. Num armário com muitas gavetas, eu dou nome para cada gaveta. No computador as gavetas possuem dados em bit. Cada letra é um bit. A etiqueta de cada gaveta será o nome da variável. Cada um dos caracteres do teclado cada um é um bit. Dentro de uma variável com um nome. Dentro dela tem bits. Como manusear ou criar uma variável no Bash? Sempre tento usar nomes maiúsculos. O nome da variável é igual ao conteúdo.
.

 

Criando uma variável chamado CASA:

 

~$ CASA=tijolo

.
Para ler a variável uso echo, o cifrão “$” e o nome da variável.

.
~ $ echo $CASA
tijolo

.

~ $ CASA=tijolos-ferro-areia-cimento-granito-cascalho

 

~ $ echo $CASA
tijolos-ferro-areia-cimento-granito-cascalho

.

~ $ CASA=”tijolo cimento dinheiro projeto e sonhos”

~ $ echo $CASA
tijolo cimento dinheiro projeto e sonhos

.

~$ ls

~$ ls -t

~$ ls -lah

~$ pwd

.

~$ echo sem o $ ou sem aspas e comando destrutivo, imprime direto na tela do terminal viu?

~$ clear

~ $ CASA=formigas

~ $ echo $CASA
formigas

.

~ $ CASAESPACOS=”sala cozinha banheiro quarto varanda”

~ $ echo $CASAESPACOS
sala cozinha banheiro quarto varanda

.

Existem vária variáveis criadas automaticamente quando entro no terminal e mudam o comportamento do terminal e dos programas.

O comando abaixo serve para ver várias variáveis que já existem para ver elas usa-se o comando abaixo:

~$ ( }et -o posix ; set )

 

.

 

VARIÁVEIS DE AMBIENTE. PARA QUE SERVEM?

 

Servem para mudar o comportamento durante a execução dos comandos. Podem por exemplo mudar a lingua que está rodando o programa. Variáveis Bash alguma coisa mudam o comportamento do Bash ou dos programas. Existem variáveis de ambiente, por exemplo e para listar, saiba que tem as do Bash e as de ambiente. As do Bash só alteram o Bash. Os comandos de ambiente herdam as variáveis. LANG é uma variável de ambiente. Para listar as variáveis promovidas a variáveis de ambiente:

~$ env

 

~ $ echo $LANG
pt_BR.utf8

 

.

COMO PROMOVER VARIÁVEIS?

De local para de ambiente usa-se “export”

~$ export

~$ export CASA

Posso criar variáveis novas.

~$ export NOVAVARIAVEL=”llllllllll”

.

VOU PROCURAR AS VARIÁVEIS:

 

~$ env

 

.

 

PARA ACHAR FÁCIL USO O GREP.

 

~$ env | grep CASA

 

~$ env | grep CASAESPACOS

 

~$ env | grep NOVAVARIAVEL

 

~$ env | grep SOLUS

 

.

 

Algumas variaveis alteram o comportamento dos programas.

PARA MUDAR A VARIAVEL LANG PARA INGLES? SOBREESCREVO A VARIAVEL LANG.

 

~$ echo $LANG
pt_BR.utf8

 

~ $ ls dr2ttttttttt
ls: não foi possível acessar ‘dr2ttttttttt’: Arquivo ou diretório não encontrado

 

~$ export LANG=C

 

~$ echo $LANG
C

 

~$ env | grep LANG
LANG=C

 

~$ ls h7jjjjjj
ls: cannot access ‘h7jjjjjj’: No such file or directory

.

 

Para voltar a falar português:

 

~$ export LANG=pt_BR.utf8

 

~ $ ls ku9sssssssssss
ls: não foi possível acessar ‘ku9sssssssssss’: Arquivo ou diretório não encontrado

.

 

SE EU NÃO QUERO EXPORTAR, NÃO QUERO FAZER VIRAR VARIÁVEL DE AMBIENTE. SÓ QUERO NA EXECUÇÃO DE UM COMANDO ESPECÍFICO ALTERAR UMA VARIAVEL SEM MODIFICAR AS VARIAVEIS DE AMBIENTE. QUERO QUE FALE INGLÊS SOMENTE UMA VEZ E DEPOIS VOLTE A FALAR PORTUGUÊS. DESTA FORMA A VARIAVEL SÓ VAI EXISTIR DENTRO DO PRÓXIMO COMANDO LS E NÃO VAI SER EXPORTADA PARA VARIÁVEL DE AMBIENTE. PARA FAZER ISTO:

 

~ $ LANG=C ls sfrftrbtby
ls: cannot access ‘sfrftrbtby’: No such file or directory

 

~ $ ls sfrftrbtby
ls: não foi possível acessar ‘sfrftrbtby’: Arquivo ou diretório não encontrado

.

AS VARIÁVEIS ALTERADAS SÓ VALEM PARA O TERMINAL QUE ESTOU TRABALHANDO. SE EU ABRIR OUTRO TERMINAL AS VARIÁVEIS NÃO IRÃO VALER.

.

O Bash herda as variáveis para se autoconfigurar em /etc/bash.bashrc e ~/.bashrc. O .bashrc fica no diretório do usuário. No .bashrc posso colocar scripts meus.

 

.

 

VARIAVEIS ESPECIAIS OU DINAMICAS

 

Posso criar variaveis. O Bash tem variáveis especiais também. Variaveis dinamicas que enquanto está executando modifica o conteudo das gavetas. Modifica o conteúdas variáveis. Executa em outra instancia do Bash. É muito útil em shell scripts.

 

~ $ echo $(ls)
Área de trabalho Documentos Downloads Imagens Modelos Música Público Vídeos

 

~ $ echo 1+1
1+1

 

~ $ echo $((1+1))
2

 

~ $ echo 7*9
7*9

 

~ $ echo $((7*9))
63

 

 

.

 

EXPANSÃO – Algo pequeno transformado em algo maior.

Bash varre a linha de comando e substitui. Tenta encontrar padrões transformando em outra coisa. Como arquivos e diretórios. O shell expande as coisas que tem caracteres especiais (variáveis). Exemplo abaixo:

.

[1-9]

{1,2,3}

?

~

—————-
Executo:

 

~ $ echo ~
/home/sol

 

.

Asterisco “*” substitui todos os arquivos e diretorios do diretorio atual. Asterisco significa “qualquer coisa”.

 

~ $ echo *
Área de trabalho Documentos Downloads Imagens Modelos Música Público Vídeos

 

* pode ser usado para outras coisas.

 

~ $ echo erro*
erro*

 

~ $ ls saida*
ls: não foi possível acessar ‘saida*’: Arquivo ou diretório não encontrado

 

.

Vou criar alguns arquivos.

 

~ $ touch texte1plah texte2plah texte123plah

 

~ $ ls

‘Área de trabalho’ Downloads Modelos Público texte1plah Vídeos

Documentos Imagens Música texte123plah texte2plah

 

.

Agora vou procurar (o asterisco também significa nada ou qualquer coisa):

 

~ $ echo *[1-3]*

texte123plah texte1plah texte2plah

 

.

 

~ $ echo *{2,3}*

texte123plah texte2plah texte123plah

 

.

 

É MUITO ÚTIL QUANDO SE ESTÁ PROCURANDO POR UM ARQUIVO[S] ESPECÍFICO[S]. ESTES COMANDO SE CHAMAM WILDCARDS OU CORINGAS. REPRESENTAÇÕES QUE PODEM COMBINAR COM DETERMINADOS CARACTERES.

 

.

 

~ $ echo texte?plah

texte1plah texte2plah

 

.

 

Posso combinar todos eles. Posso combinar todos os wildcards (coringas).

 

.

 

~ $ echo *saida??*

*saida??*

 

.

 

Quero que efetivamente não seja expandido o ~ escapando caracteres. Quero que imprima o ~. Uso barra invertida \ antes do caracter que eu quero que não expanda.

.

~ $ echo \~

~

 

.

 

~ $ echo ~

/home/user

 

.

 

~ $ echo $CASA

tijolo cimento dinheiro projeto e sonhos

 

.

 

~ $ echo \$CASA

$CASA

 

.

 

~$ clear

 

.

 

Isto serve para todos os wildcards.

 

.

 

~ $ echo \$((1+8))

bash: erro de sintaxe próximo do `token’ não esperado `(‘

 

.

Não funcionou.

 

.

 

~ $ echo \$\(\(1+8\)\)

$((1+8))

.

Crio um arquivo com o comando touch:

 

touch texto-teste.txt

 

 

Verifico se está criado com:

 

ls -t

 

 

Crio uma pasta com o comando mkdir:

 

mkdir texto-teste

 

 

Verifico se está criado com:

 

ls -t

 

 

Copio o arquivo texto-teste.txt para a pasta texto-teste. Tem a ver com os comandos cp e o comando mv.

 

 

cp texto-teste.txt texto-teste

 

 

Comando cp copia arquivos ou diretórios para outro local. Se o destino fornecido for o nome de um diretório existente, os arquivos serão copiados para esse diretório, com o mesmo nome. Caso indiquemos um nome de arquivo no caminho de destino, o arquivo de origem será copiado e essa cópia renomeada também.

.

Opções mais comuns:

.

-i, –interactive

Pergunta se desejamos sobrescrever um arquivo de destino já existente.

.

-l, –link

Cria hard links para os arquivos em vez de copiá-los.

.

-n, –no-clobber

Não sobrescrever um arquivo já existente

.

-p

Preserva as permissões originais do arquivo, incluindo proprietário, grupo, stuid, setgid, tempos da última modificação e acesso.

.

-r, -R, –recursive

Copia diretórios de forma recursiva.

 

-s, –symbolic-link

Cria links simbólicos (symlinks) para os arquivos em vez de copiá-los

.

-u, –update

Copia apenas quando os arquivos de origem forem mais novos que os de destino, ou quando os arquivos de destino estiverem faltando.

.

-v, –verbose

Modo verboso; explica o que está sendo feito no momento.

.

–help

Mostra a ajuda básica do comando e sai.

.

–version

Mostra informações sobre a versão do comando e sai.

.

Exemplos:

.

1. Copiar o arquivo passwd do diretório /etcpara o diretório /home/fabio/.

$ cp /etc/passwd /home/user/

 

Se o diretório de trabalho atual já for o /home/user, podemos também usar o ponto (.) para indicá-lo como local de destino, como a seguir:

.

$ cp /etc/passwd .

 

 

—————————–

 

 

Removo o arquivo texto-teste:

 

rm texto-teste.txt

 

 

Removo a pasta texto-teste de forma recursiva com rm -r, se quiser forçar a remoção uso rm -rf (nunca uso o comando [rm -rf/] pois destrói o meu sistema). Comando abaixo remove a pasta texto-teste:

 

 

rm -r texto-teste

.

 

Verifico:

.

 

ls -t

 

—————————

 

COMANDO MV – O COMANDO MV PODE SER USADO PARA MOVER OU RENOMEAR ARQUIVOS.

 

.

Sintaxe:

mv [opções] arquivos_origem local_destino

 

.

Opções principais:

.

-b, –backup

Cria um backup de cada arquivo de destino existente.

.

-f, –force

Apaga destinos existentes sem perguntar ao usuário.

.

-i, –interactive

Pergunta se desejamos sobrescrever um arquivo de destino já existente.

.

-n, –no-clobber

Não sobrescrever um arquivo já existente

.

-u, –update

Move apenas quando os arquivos de origem forem mais novos que os de destino, ou quando os arquivos de destino estiverem faltando.

.

-v, –verbose

Modo verboso; explica o que está sendo feito no momento.

.

–help

Mostra a ajuda básica do comando e sai.

.

–version

Mostra informações sobre a versão do comando e sai.

.

Exemplos:

1. Mover o arquivo passwd do diretório atual para o subdiretório Documentos:

$ mv passwd ./Documentos/

.

2. Mover o arquivo passwd do diretório atual para o subdiretório Documentos, o qual já contém um arquivo com o mesmo nome – nesse caso, queremos fazer um backup do arquivo de destino:

$ mv –backup passwd ./Documentos/

Neste caso o arquivo de backup criado tem o caractere ~ (til) no final de seu nome.

.

3. Renomear o arquivo curriculum.odt para curriculum.txt:

$ mv curriculum.odt curriculum.txt

.

Vejo que não indiquei um destino diferente – mandei mover o arquivo para o próprio local de origem, apenas trocando seu nome

 

 

—————————

 

 

USANDO O COMANDO MV

.

 

Crio um arquivo com o comando touch:

 

touch texto-teste2.txt

 

.

 

Verifico se está criado com:

 

ls -t

 

.

 

Crio uma pasta com o comando mkdir:

 

mkdir texto-teste2

 

 

Verifico se está criado com:

 

ls -t

 

.

 

Copio o arquivo texto-teste.txt para a pasta texto-teste. Tem a ver com os comandos cp e o comando mv.

 

.

 

mv texto-teste2.txt texto-teste2

 

Verifico com:

.

 

ls -t

 

Vou para a pasta texto-teste2 com o comando cd:

.

 

cd texto-teste2

 

.

Verifico:

 

ls -t

 

.

Removo o arquivo texto-teste:

 

rm texto-teste.txt

 

.

Saio da pasta texto-teste:

 

cd

 

.

Verifico:

 

ls -t

 

.

Removo a pasta texto-teste de forma recursiva com rm -r, se quiser forçar a remoção uso rm -rf (nunca uso o comando [rm -rf/] pois destrói o meu sistema). Comando abaixo remove a pasta texto-teste:

 

 

rm -r texto-teste

.

 

Verifico:

.

 

ls -l

 

ls -t

 

ls -lt

 

ls -lat

 

.

 

SOBRE O COMANDO TOUCH

 

Já conheço. Cria arquivos vazios ou muda a data de alteração de algum arquivo:

 

Já vi e fiz exercícios sobre o touch acima.

 

.

 

O COMANDO LN

.

 

O comando ln é um comando para fazer links. Existe o conceito nos sistemas de arquivos. É o conceito de links. Posso criar um link para um determinado arquivo. Um hardlink. Estes arquivos existem uma vez só.

.

 

touch texto-emails.txt

 

.

 

ln texto-emails.txt texto-emails-link.txt

 

.

 

ls -t

 

.

Os dois ocupam um só espaço no HD ou onde quer que eu esteja salvando este arquivo. Eles são o mesmo arquivo.

 

.

Removo o hardlink:

 

.

 

rm texto-emails-link.txt

 

.

 

LINKS SIMBÓLICOS

.

 

Links simbólicos – uma seta apontando para o arquivo original. É diferente do hardlink. É um apontador para um arquivo.

.

 

Criando um link simbólico, primeiro crio o arquivo:

.

 

touch texto-emails.txt

 

.

 

Verifico:

.

 

ls -l

 

ls -t

 

ls -lt

 

.

 

Para criar o link simbólico uso [-s] e [-link]:

.

 

ln -s texto-emails.txt texto-emails-link.txt

 

.

 

Verifico:

.

 

ls

 

ls -l

 

ls -t

 

ls -lt

 

ls -a

 

ls -la

 

ls -lat

 

ls -lah

 

.

 

Ficou com uma cor diferente. Eu uso o ls para verificar o arquivo escrevendo no terminal:

 

 

ls -la texto-emails-link.txt

 

.

 

Fica mais ou menos assim:

 

.

 

~$ ls -la texto-emails-link.txt

lrwxrwxrwx 1 oso oso 16 Jun 22 10:49 texto-emails-link.txt -> texto-emails.txt

 

.

 

A seta (->) indica que é um link simbólico.

 

.

 

Para remover:

 

rm texto-emails-link.txt

 

.

 

——————————–

 

SOBRE O COMANDO MV:

 

Maneira simples de mover todo o conteúdo de uma pastinha para outra. Os brutos de TI, chamam as pastinhas de arquivos e diretórios. Kkkkkkk.

.

 

Exemplo: tenho a pasta teste1 com vários arquivos e pastas e tenho a pastinha teste2 totalmente vazia e vou copiar o conteúdo de teste1 para teste2

.

 

mv teste1/* /home/usuario/www/teste2

 

.

 

Observação:

.

 

1 – O * vai mover todo o conteúdo de arquivos e lindas e fofas pastinhas existentes no teste1 para teste2.

.

 

2 – onde usuario é o usuário logado no shell.

 

——————————–

 

O COMANDO STAT

.

 

O stat tem a ver com o conteúdo de um inode. Inode area do sistema de arquivos que guarda info sobre o arquivo. Lista o conteudo de um inode. Stat mostra o estado de um arquivo.

 

.

 

Inodes guardam as informações sobre um arquivo no disco. É o número de inodes que limita o número de arquivos que podem ser armazenados em disco.

.

 

Tenho que uma hora destas ler o manual do comando stat (man stat, info stat). Comando stat e o inode.

.

 

Comando rmdir

 

.

 

Comando find

 

Digite:

 

find /usr -name Makefile

 

find -name *.txt

.

 

O bash quando tem * expande, para ESCAPAR usa-se ‘*.txt’ ou \*.txt

.

 

find -name ‘*.txt’

.

 

find -name \*.txt

 

.

Comando -type do comando find

.

 

Se eu quero que o find liste pastas

 

find /usr -type d

.

 

Se eu quero que o find liste arquivos

 

find /usr -type f

.

 

 

 

COMANDOS PARA ADMINISTRAR O SISTEMA – PROCESSAR TEXTO NO TERMINAL

 

uniq -> Le a entrada padrão ou le arquivo removendo linhas duplicadas em sequência. Com o uniq posso remover entradas duplicads que estão em sequência. O uniq consegue ler da entrada padrão.

 

uniq emails.txt

uniq emails.txt > emails-sem-duplicados.txt

cat emails.txt | uniq

 

###

 

tac -> É o inverso de cat ele pega toda entrada padrão, inverte e imprime de baixo para cima.

tac emails.txt

 

###

 

tee -> Pega o que recebe da entrada padrão, copia que nem o cat e tem opção de redirecionar para um arquivo. O tee joga na saida padrão e também direciona para um arquivo. É útil para gravar logs de algum comando que executei mas quero salvar em um arquivo.

 

cat emails.txt | tee saida-tee.txt

 

~$ cat saida-tee.txt
mario@gmail.com mariogomes@gmail.com

 

###

 

cut -> Recorta texto em colunas

 

echo joão@gmail.com,carlos@gmail.com,gomes@gmail.com | cut -d, -f1

echo joão@gmail.com,carlos@gmail.com,gomes@gmail.com | cut -d, -f2

echo joão@gmail.com,carlos@gmail.com,gomes@gmail.com | cut -d, -f3

 

###

 

tail -> Pega a entrada padrão dele e repete as últimas linhas.

 

cat emails.txt | tail

cat emails.txt | tail -n1

cat emails.txt | tail -n2

tail -n 2 emails.txt

 

###

 

head -> Pega a entrada padrão dele e repete as primeiras linhas.

 

head -n 2 emails.txt

 

cat emails.txt | head

 

cat emails.txt | head -n1

 

cat emails.txt | head -n2

 

###

 

more -> Formata arquivo e entrada padrão. Formata de forma paginada. Trabalha tanto com arquivos quanto com entrada padrão.

 

find /usr -type d | more

 

###

 

less -> É a evolução do comando more. Tem mais recursos.

 

find /usr -type d | less

 

Aperto a barra / posso procurar uma palavra é só digitar ela.

 

###

 

Comando wc -> Word count, contador de linhas, caracteres ou palavras

 

find /usr -type d | wc [conta palavras]

 

find /usr -type d | wc -l [conta linhas]

 

###

 

sort -> Ordena o conteúdo que foi recebido na entrada padrão ou por arquivo. Consegue fazer uma funcionalidade do uniq. Consegue filtrar mesmo que as linhas repetidas não estejam em sequência.

 

OBS:
Pesquisar o comando vi.

 

find /usr -type d | sort

.

Agora funcionou

.

NUMA MANUTENÇÃO DE ROTINA USA-SE OS COMANDOS EM MOMENTOS DE MONITORAÇÃO E (OU) URGÊNCIA:

 

ls: Lista todos os arquivos do diretório

df: Mostra a quantidade de espaço usada no disco rígido

top: Mostra o uso da memória

cd: Acessa uma determinada pasta (diretório)

mkdir: Cria um diretório

rm: Remove um arquivo/diretório

cat: Abre um arquivo

vi: Abre o editor vi(lê-se viai) para editar/criar arquivos

.

Minhas anotações param por aqui hoje.

 

 

Até Breve

 

.

Bodhi – Linux 2017

Bodhi-captura-de-tela2-22-4-2017

 

 

Todos os programas do Ubuntu em um ambiente de trabalho levíssimo e bonito. Assim é que entendo o Bodhi Linux.

 

 

ATALHOS DE TECLADO PARA O EMULADOR DE TERMINAL LINUX

 

Atalho Função

 

Ctrl + a Move o cursor para o início da linha
—————————————————-
Ctrl + e Move o cursor para o final da linha
—————————————————-
Ctrl + l Limpa a tela, semelhante ao comando clear
—————————————————-
Ctrl + u Apaga do cursor ao início da linha.
—————————————————-
Ctrl + k Apaga do cursor ao final da linha.
—————————————————-
Ctrl + w Apaga uma palavra antes do cursor.
—————————————————-
Ctrl + _ Desfaz as últimas mudanças.
—————————————————-
!! Executa o último comando no histórico.
—————————————————-
!abc Executa o último comando no histórico começando com abc.
—————————————————-
!n Executa o comando de número n no histórico.
—————————————————-
^abc^xyz Substitui a primeira ocorrência de abc por xyz no último comando e executa o mesmo.
—————————————————-

 

 

Um exemplo:

Se eu executo o comando:

 

sudo apt update depois, caso queira executar novamente, só preciso digitar !sud e apertar enter.

 

 

Para atualizar o sistema logo após ter instalado ele:

 

sudo apt-get install aptitude -y ; sudo apt-get update ; sudo aptitude update && sudo aptitude -y upgrade

 

 

 

~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Bodhi Linux
Release: 16.04
Codename: xenial

 

 

 

Quero saber o espaço em disco do sistema de arquivos usado por todas as partições. “df”, “df -h” digito e recebo a resposta sobre a quantidade de disco rígido HD no meu computador:

~ $ df -h
Sist. Arq. Tam. Usado Disp. Uso% Montado em
udev 1,9G 0 1,9G 0% /dev
tmpfs 387M 6,3M 381M 2% /run
/dev/sda1 158G 33G 118G 22% /

 

 

 

O SÍMBOLO DA RAIZ DO SISTEMA TOTAL É UMA BARRA /

~$ cd /

 

 

 

Aperto enter e estou na raiz total do sistema e se eu mexer aí ou deletar ele, acabou-se tudo. Para saber onde estou, digito pwd
~$ pwd
/

 

 

 

~$ sudo apt install lm-sensors && sudo apt install finger fortune cowsay && sudo apt install speedtest-cli w3m w3m-img links && sudo apt update

 

 

—————————————————
SOU INICIANTE, ENTÃO QUERO APRENDER COMANDOS BÁSICOS DO TERMINAL DO LINUX QUE SE CHAMA BASH (BOURNE AGAIN SHELL).
—————————————————
No mundo do computador, tem SOFTWARE e HARDWARE.
Hardware é a parte SÓLIDA e software é VIRTUAL.
O Software controla o hardware. Em termos simplificados é isto.

Executar comandos no terminal com sucesso é um dos meus objetivos como iniciante.

 

 

 

O Kernel é o programa que está mais próximo do hardware.

O kernel é a ponte que permite os programas conversarem com o hardware.

O hardware responde aos aplicaticos por meio do Kernel.

Deve ser por isto, que estão sempre atualizando o Kernel.

Os Kernels mais antigos não respondem bem a novos hardwares e pode ser que certos programas não funcionem bem se usar um Kernel antigo.

Os aplicativos não conversam com o Hardware conversam com o Kernel ai sim, o Kernel sim conversa com o Hardware.

O Bash é um dos muitos interpretadores de comandos que existem e é o usado no Linux.

Tem outros como o CSH o DOS o POWERSHELL e outros.

 

 

 

O SHELL É O INTERPRETADOR DE COMANDOS DO TERMINAL.

O SHELL DO LINUX É O BASH.

TUDO NO LINUX É CONSIDERADO ARQUIVO.

OS COMANDOS PODEM USAR ARGUMENTOS.

 

 

 

QUERO SABER COMO USAR O COMANDO APT, ENTÃO USO NO TERMINAL:

man apt, –help apt, info apt
Procuro o terminal no menu e abro ele. Vou fazendo anotações e executando o que anotei no terminal. Estou executando no terminal o que estou lendo agora.

 

 

 

DE ONDE VEM O TERMINAL?

No inicio dos computadores, só se podia fazer as coisas pelo terminal e ele era um monitor com tela preta, os programas eram feitos para funcionar no monitor terminal e você executava comandos e navegava pela rede e fazia alterações no sistema através deste monitor terminal. Hoje em dia não é mais assim.
Atualmente ainda precisamos de terminais mas os monitores podem fazer muitas coisas a mais e por isto, é possível atualmente usarmos o emulador de terminal.
O interpretador de comandos roda dentro do terminal e o Bash é o interpretador de comando do terminal no Linux.
O prompt significa que tá pronto. O prompt pode ser $ [usuário] ou # [super-usuário].
O legal do terminal, é que para conversar com o terminal do Linux, o sistema, programas do sistema, o Hardware tenho que pensar digitar e recebo resposta dependendo de usar corretamente a linguagem.
A linguagem é o Bash. Existem comandos internos e existem comandos que não são internos. Quem ajuda nesta hora é o sistema operacional.
O comando pwd é um comando interno por exemplo. Você digita pwd e recebe a resposta rapidinho. Tem comandos INTERNOS e comandos do SISTEMA OPERACIONAL.
O modo não interativo é dialogo programado e chama-se SHELL SCRIPTS.
O interpretador de comandos controla a execução dos comandos executados.
Pode-se pausar um processo que esteja acontecendo no terminal por exemplo.
Posso mexer nos processos que estão acontecendo no computador.

 

 

Pode-se executar dois processos ao mesmo tempo.

 

 

É necessário adquirir costume de usar o terminal para poder fazer diversas coisas simultaneamente, executar mais de um comando ao mesmo tempo e fazer eles se comunicarem.

 

 

O MAIS FORTE NO LINUX É O EMULADOR DE TERMINAL COM O INTERPRETADOR DE COMANDOS CHAMADO BASH.
O que é cat? É de CONCATENAR? O que é concatenar? Preciso de um dicionário urgente! 🙂
man cat [aperto enter]

 

 

Eu quero andar com minhas próprias pernas. Quero descobrir coisas sobre comandos. Uso ls –help pra listar todos os arquivos e diretórios e vai mostrar um monte de documentação e posso usar o ls com parametros.

 

 

Posso usar –help para aprender muitos comandos. ls, ls -t, man nome_do_comando, info nome_do_comando. O man é mais tradicional, o info é mais atual.
Tem 3 modos de eu aprender usando o terminal:

–help
man
info

 

 

Não achei informação sobre uns comandos usando estes 3, tenho que ir buscar no Google. Procurar a info na massa embolada de informação que tem lá com atenção e paciência.
Quero saber como ser administrador super usuário do sistema uso [su] ou [sudo su] digito a senha invisivel ao digitar, e obtenho o resultado:
~$ su
cp pc #

 

 

Depois quero saber quem eu sou. Será que sou administrador mesmo? Uso ‘whoami’.
cp# whoami
root

 

 

Para sair do modo super usuário administrador digito exit e tenho o resultado:
cp pc # exit

cp@pc ~$

 

 

Digito então su ou sudo su…

 

Aperto enter e digito a senha mas não aparece nada no terminal por proteção. Aperto enter. Saio do modo super usuário digitando exit.

 

Quero saber o quanto de memória tem no meu computador. Quero saber a quantidade de memória livre e usada no sistema. “free” aperto enter, digito “free -m” teclo enter, “free -h”  teclo enter:

 

 

~$ free
total used free shared buff/cache available
Mem: 3955864 1796172 153272 141808 2006420 1743612
Swap: 4194300 0 4194300

 

 

~ $ free -m
total used free shared buff/cache available
Mem: 3863 1289 209 201 2364 2099
Swap: 4095 0 4095
~$ free -h
total used free shared buff/cache available
Mem: 3.8G 1.7G 145M 139M 1.9G 1.7G
Swap: 4.0G 0B 4.0G

 

 

 

Quero saber onde estou no terminal, ou seja, em qual pastinha estou no momento. Então eu digito pwd e recebo a resposta:
$ pwd
/home/rfg/Área de Trabalho

 
Quero saber o que tem na pasta onde estou. Eu digito ls e recebo a resposta que não tenho nada na minha Área de Trabalho e posso adicionar mais parametros ao ls:
~$ ls
~$ ls -t
~ $ ls -l
~ $ ls -la
~ $ ls -lah

 
Quero ir para uma pasta que tenha alguma coisa, preciso saber um comando para isto. Pesquiso e acho rapido a resposta.
É o comando cd.

 
cd – Este comando permite me deslocar entre a árvore de diretórios do sistema. Quando abro um terminal ou seção shell, entro direto no meu diretório pessoal. Para mover-me pelo sistema de arquivos eu devo usar o cd. O comando cd é bom para copiar scripts e arquivos.
“cd /” para ir ao diretório raiz.
“cd” para ir ao seu diretório pessoal.
“cd ..” para ir uma pasta antes da pasta onde estou.
”cd -” para voltar a pasta onde estava antes de mudar.

 

 

 

Para navegar através múltiplos níveis de pastas em um só comando, uso por exemplo, “cd /home/cp/Imagens”, que me levará diretamente ao pasta Imagens. Para voltar a pasta Home digito cd.

 

 

 

Então volto com o comando cd para pasta inicial que considero ser Home. Digito e recebo resposta:

~$ cd

 

~ $ ls
Área de Trabalho Downloads Música
Biblioteca do calibre Imagens Público
Documentos Modelos Vídeos

 

~ $ ls -t
Vídeos Modelos Biblioteca do calibre
Downloads Imagens Música
Documentos Área de Trabalho Público

Quero ir para a pasta Documentos. Digito e acontece o seguinte:
~ $ cd Documentos
cp@pc ~/Documentos $

 
PESQUISO NA INTERNET:

Uma característica interessante do bash é que ele possui a função de auto-completar os nomes de comandos que foram digitados via entrada padrão. Isso é feito PRESSIONANDO-SE A TECLA TAB; o comando é completado e acrescentando um espaço. Isso funciona sem problemas para comandos internos; caso o comando não seja encontrado, o bash emite um beep. Outro recurso muito interessante do bash, é que você pode repetir um comando executado sem ter que digitá-lo novamente. Isso é possível UTILIZANDO O CARACTERE “!” na frente do comando que você deseja repetir. O BASH BUSCA COMANDOS NO HISTÓRICO.

 

 

 

Agora que estou na pasta documentos, eu quero saber o que tem na pasta documentos, então digito:

 

cp@pc ~/Documentos $ ls
Formatar-Pendrive-no-Linux-2017

 
REPETINDO:
LS COM PARAMETROS, FUNÇÕES AUXILIARES, FILTROS PARA MOSTRAR AS COISAS DE UM MODO DIFERENTE.
Digito cp@pc ~/Documentos $ ls
Digito cp@pc ~/Documentos $ ls -t
Digito cp@pc ~/Documentos $ ls -l
Digito cp@pc ~/Documentos $ ls -la
Digito cp@pc ~/Documentos $ ls -lah
Digito cp@pc ~/Documentos $ clear

 
~/Documentos $ ls -lah
total 140K
drwxr-xr-x 4 rfg rfg 4,0K Abr 20 06:00 .
drwxr-xr-x 33 rfg rfg 4,0K Abr 20 06:05 ..
-rw-r–r– 1 rfg rfg 1,4K Abr 8 01:27 Formatar-Pendrive-no-Linux-2017

 

 

 

Tem um arquivo chamado: Formatar-Pendrive-no-Linux-2017, e quero criar um arquivo chamado texto.txt, uso o comando touch. Para saber sobre o comando touch abro outro terminal e digito:

~$ man touch

 

 

 

Crio um arquivo chamado texto.txt ou teste.txt, a extensão txt não é necessária para a criação de um arquivo no Linux mas coloco a extensão .txt para não me confundir.

~/Documentos $ touch texto.txt

 

 

Confiro o que existe em documentos:
~/Documentos $ ls
Formatar-Pendrive-no-Linux-2017 texto.txt

 
Quero criar uma pasta chamada texto. Uso mkdir. Para saber alguma coisa pelo terminal sobre o que é mkdir digito man mkdir, –help mkdir, info mkdir e depois eu Digito:
~/Documentos $ mkdir texto

 
Para apagar arquivos e pastas uso um comando que tem que ter CUIDADO.
rm -rf apaga pastas (CUIDADO!)

rm -r apaga arquivos

 
Confiro:
~/Documentos $ ls
Formatar-Pendrive-no-Linux-2017 texto
texto.txt
$ ls -lah
total 12K
drwxr-xr-x 3 rfg rfg 4,0K abr 20 13:09 .
drwxr-xr-x 32 rfg rfg 4,0K abr 20 12:00 ..
drwxrwxr-x 2 rfg rfg 4,0K abr 20 13:09 teste
-rw-rw-r– 1 rfg rfg 0 abr 20 13:06 texto.txt

 
Acima vejo que toda pasta começa com d e o arquivo -rw

 

 

 

Tem dois arquivos de texto e uma pasta chamada texto.

 

 

 

Quero mover o arquivo texto.txt para dentro da pasta texto, vou usar o comando mv, procuro informação sobre comando mv usando man mv, –help mv e info mv. Então eu digito:
~/Documentos $ mv texto.txt texto

 
Abro o meu gerenciador visual de arquivos para ver se o icone texto está na pasta texto. Ok. Confere. Comando bem sucedido.
Confiro o que tem em documentos:
~/Documentos $ ls
Formatar-Pendrive-no-Linux-2017 texto

 

 

 

Digito ls -l e obtenho a seguinte resposta do terminal:

 

 

~/Documentos $ ls -l
total 8
-rw-r–r– 1 rfg rfg 1333 Abr 8 01:27 Formatar-Pendrive-no-Linux-2017
drwxr-xr-x 2 rfg rfg 4096 Abr 20 07:08 texto

 

 

Limpo as informações da tela do terminal com clear:
~$ clear
Agora vou para a pasta texto:
~/Documentos $ cd texto
Estou na pasta texto e confiro isto com o comando ls:
~/Documentos/texto $ ls
texto.txt
Se eu quiser remover o arquivo texto.txt usaria o comando rm:
~/Documentos/texto $ rm texto.txt
Para criar de novo outro arquivo chamado texto.txt digitaria:
~/Documentos/texto $ touch texto.txt
Agora eu quero escrever alguma coisa no arquivo texto.txt e vou usar primeiro o comando cat que é um dos comandos para mostrar todo o conteúdo do arquivo no Shell. Me informo alguma coisa sobre o cat com o comando ‘man cat’, ‘info cat’ e ‘–help cat’ mas não entendo muito bem. Executo:

~/Documentos/texto $ cat texto.txt
Não tem nada no arquivo texto.txt então não aparece nada. Eu sei que posso usar um comando de um programa chamado nano que roda no terminal para escrever neste arquivo pelo terminal, pesquiso sobre o nano digitando no terminal ‘nano –help’, ‘man nano’, ‘info nano’ e então eu digito:

~/Documentos/texto $ nano texto.txt

 

 

O nano abre no terminal e eu escrevo no arquivo o seguinte:
Esta é a primeira frase do arquivo texto.txt
Gravo com o comando de teclado ctrl + O , confirmo que é para o nano salvar o arquivo com o nome texto.txt apertando a tecla ENTER e saio com o comando de teclado ctrl+X e agora digito no terminal:

~/Documentos/texto $ cat texto.txt
Esta é a primeira frase do arquivo texto.txt
Poderia visualizar este arquivo com o gedit, mousepad, leafpad, vim entre outros.
Quer dizer que escrevi uma linha no arquivo texto.txt e posso abrir o icone dele em um programa de texto e lá estará escrito a frase. Posso abrir o arquivo num programa de edição de texto e transformar estas letras, mudar de tamanho colorir elas etc…
Posso escrever neste arquivo texto.txt usando o comando echo. Pesquiso man echo, info echo, –help echo.

 

 

Estou na pasta texto que está na pasta documentos.

 

 

~/Documentos/texto $echo ‘segunda linha do arquivo texto.txt’ >> texto.txt
~/Documentos $ echo “exemplo de texto terceira linha” >> texto.txt
Note que eu usei >>
Para escrever a primeira linha usaria apenas > O texto a ser escrito no arquivo deve ser abraçado por duas ” o simbolo > direciona a frase para o arquivo chamado teste sendo a primeira linha. As linhas seguintes usarão >> e as aspas.
~/Documentos/texto $echo ‘esta é a primeira linha escrita usando echo’ > texto.txt
Se fizer isto acima, eu apago as duas linhas que escrevi anteriormente.
Para ler o arquivo posso usar o comando head, head -n1, head -n2.

Exemplo:
~/Documentos $ head teste.txt
exemplo de texto 1
exemplo de texto 2
Para ver o final do texto, posso usar tail, tail -n1, tail -n2. O comando head vê o inicio do texto e o comando tail vê o final do texto. Posso adicionar parâmetros a estes comandos.
Exemplo:
~/Documentos $ tail teste.txt
exemplo de texto 1
exemplo de texto 2
Vou para a pasta Home pois digito cd então navegando pelo terminal chego até lá no texto.txt para ver o que está escrito. Faço bem detalhadamente:
~/Documentos/texto $ cd
~ $
~ $ ls
Área de Trabalho Downloads Música
Biblioteca do calibre Imagens Público
Documentos Modelos Vídeos
~ $ cd Documentos
~/Documentos $
~/Documentos $ ls
Formatar-Pendrive-no-Linux-2017 texto texto.txt
~/Documentos $ cd texto
~/Documentos/texto $

~/Documentos/texto $ cat texto.txt
Esta é a primeira frase do arquivo texto.txt
segunda linha do arquivo texto.txt. 🙂

 
Quero saber como copiar arquivos e pastas usando o terminal:

cp – Copia arquivos e diretórios. “cp file foo” é para fazer uma cópia exata do arquivo “file” dando-lhe o nome de “foo”.
“sudo cp /etc/X11/xorg.conf /etc/X11/xorg.conf-bkp” para gerar uma cópia de segurança exata do arquivo “/etc/X11/xorg.conf” dando-lhe o nome de “/etc/X11/xorg.conf-bkp”.

 

 

 

Meu terminal está cheio de letras e informações de comandos quero limpar ele digito o comando clear ou teclo ctrl+l.
~$ clear

 
Pesquiso e acabo sabendo que se o destino fornecido for o nome de um diretório existente, os arquivos serão copiados para esse diretório, com o mesmo nome. Caso indiquemos um nome de arquivo no caminho de destino, o arquivo de origem será copiado e essa cópia renomeada também. A sintaxe é:
cp [opções] arquivos_origem local_destino

 

 

 

Opções mais comuns:
-i, –interactive
Pergunta se desejamos sobrescrever um arquivo de destino já existente.

-l, –link
Cria hard links para os arquivos em vez de copiá-los.
-n, –no-clobber
Não sobrescrever um arquivo já existente
-p
Preserva as permissões originais do arquivo, incluindo proprietário, grupo, stuid, setgid, tempos da última modificação e acesso.
-r, -R, –recursive
Copia diretórios de forma recursiva.
-s, –symbolic-link
Cria links simbólicos (symlinks) para os arquivos em vez de copiá-los
-u, –update
Copia apenas quando os arquivos de origem forem mais novos que os de destino, ou quando os arquivos de destino estiverem faltando.
-v, –verbose
Modo verboso; explica o que está sendo feito no momento.
–help
Mostra a ajuda básica do comando e sai.
–version
Mostra informações sobre a versão do comando e sai.

 

 

 

Quero saber sobre os comandos more e pipe. Dizem que são bastante utilizados. Em uma pasta que tem bastante arquivo. A pasta etc. A pasta etc quase sempre guarda os arquivos de configuração programas instalados no sistema operacional em alguns sistemas é na pasta opt.
~$ cd /etc

~$ ls
~$ ls -lah

 

 

 

Concatenação de comandos:
~ ls -lah | more [ o more fará uma pausa a cada tela exibita o pipe | liga o ls -lah com o comando more ]

 
Quero saber a data do dia. Digito no terminal e recebo a resposta:
~ $ date
Qui Abr 20 03:56:35 BRT 2017

 
Quero saber o calendário digito e recebo a resposta:
~ $ cal
Abril 2017
Do Se Te Qu Qu Se Sá
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

 
Quero saber quando cairá certo dia em outro ano anterior ou posterior usando pipe “|” e “less”:
~$ cal 2018 | less

 
Aperto a tecla Q para sair do calendário. O pipe “|” serve para unir um comando a outro. No GNU/Linux posso unir programas que virão todos juntos.

Se eu quiser sabe o mês 4 de 2013, eu faço assim:
~$ cal 4 2013

 
Quero saber a temperatura da máquina. Instalo lm-sensors. Digito e recebo a resposta:

~$ sudo apt update ; sudo apt upgrade ; sudo apt install lm-sensors

~ $ sensors
acpitz-virtual-0
Adapter: Virtual device
temp1: +48.0°C (crit = +104.0°C)
temp2: +48.0°C (crit = +104.0°C)

coretemp-isa-0000
Adapter: ISA adapter
Physical id 0: +48.0°C (high = +105.0°C, crit = +105.0°C)
Core 0: +48.0°C (high = +105.0°C, crit = +105.0°C)
Core 1: +48.0°C (high = +105.0°C, crit = +105.0°C)

 

 

 

Quero saber a arquitetura do computador. digito arch que é igual ao comando uname -m, e recebo a resposta:

~ $ arch
x86_64
~ $ uname -m
x86_64

 

 

 

Quero saber o hardware instalado no computador, especificando os endereços digito e recebo a resposta:

$ lsdev

O programa ‘lsdev’ não está instalado no momento. Você pode instalá-lo digitando:
sudo apt install procinfo

 
Então digito:
~$ sudo apt install procinfo ; sudo apt update ; sudo apt upgrade ; lsdev
~ $ lsdev
Device DMA IRQ I/O Ports
————————————————
0000:00:02.0 4000-403f
0000:00:1f.2 44 4060-407f 4080-4083 4090-4097 40a0-40a3 40b0-40b7
0000:00:1f.3 4040-405f
0000:02:00.0 3000-30ff
ACPI 1800-1803 1804-18

 

 

lspci – Exibe informações sobre os barramentos PCI do computador e sobre os dispositivos a ele conectados.

~ $ lspci
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 08)
00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 08)
00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 08)

 

 

lsusb – Lista informações sobre os barramentos USB do computador e sobre os dispositivos a eles conectados.
~ $ lsusb
Bus 001 Device 002: ID 8087:8001 Intel Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
uname – Este comando exibe várias informações sobre o sistema, incluindo o nome da maquina, nome e versão do Kernel e alguns outros detalhes. É muito útil para verificar qual é o Kernel usado por você.
~ $ uname
Linux

 

 

”uname -a” para exibir todas as informações.
~ $ uname -a
Linux rf7E 4.4.0-53-generic #74-Ubuntu SMP Fri Dec 2 15:59:10 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

 

 

 

Quero saber em tempo real informações sobre o meu sistema linux, digito:
$ top
comandos interativos mais importantes do ”top”.

”k” – Finaliza, ou seja, “mata” um processo.

”m” – Ativa/Desativa a exibição de informações da memória.

”M” – Ordena os processos pelo uso da memória residente.

”N” – Ordena os processos pelos seus PIDs.

”P” – Ordena os processos pelo uso da CPU (este é o padrão).

”ESPAÇO” – Atualiza imediatamente a visualização do quadro de processos.

”h” – Exibe a ajuda dos comandos interativos do ”top”.

”q” – Abandona o comando ”top”.

 

 

 

Quero saber um quadro atual, porém estático dos processos que estão sendo executados no sistema. Digito e recebo a resposta:

~ $ ps
PID TTY TIME CMD
9409 pts/0 00:00:00 bash
12148 pts/0 00:00:00 ps

 

 

 

Quero saber como matar processos sendo executados pelo meu PID enviando um sinal:
”kill -9 1345” para finalizar o processo de PID número 1345. Para saber qual PID de determinado processo que esta sendo executado pode ser utilizado o comando ps

~ $ ps
PID TTY TIME CMD
9409 pts/0 00:00:00 bash
13178 pts/0 00:00:00 ps
~$ kill -9 13178

 

 

 

Fechei o terminal que estava usando.

Quero finalizar processos pelo nome ao invés do PID como faz o comando kill. Uso killall.

Se eu tiver aberto o Firefox e quero fecha ele pelo terminal, se eu digitar no terminal ”killall mozilla-firefox” finalizo processo mozilla-firefox, fechando com isso o navegador web Mozilla Firefox. O nome dos processos ativos pode ser observado com uso do comando ps.

 

 

Estas são minhas anotações. Espero que elas sejam úteuis para você como elas são para mim.

 

 

 

Até Breve.