Faça uma pergunta »

SHELL BASH - Guia de utilização - Nível debutante

Junho 2015


SHELL BASH - Guia de utilização - Nível debutante



Introdução

Convite aos membros Kioskea

Eu convido os membros contribuintes Kioskea, a fazer correções necessárias bem como modificar ou integrar coisas úteis por um debutante em linha de comando (evitando coisa complicadas este não é o objetivo).
Eu convido também os membros não contribuintes do ccm , a me relatar eventuais erros e suas sugestões através do fórum Mensagens privadas.
Obrigada


O objetivo deste tutorial é o de permitir a um debutante da linha de comando de ter sucesso nesta tarefa.
Longe de ser completo, este pequeno tutorial permitirá a você conhecer o Shell como software e não como uma linguagem de programação.

Eu vou tentar ser o mais breve possível nos níveis de cada capítulo (explicações concisas e claras), porém este tutorial risca de ser longo. E por isso a idéia de vários capítulos.
Não é necessário percorrer o tutorial do início ao fim. Você pode acessar diretamente o capítulo que lhe interessar em função de sua necessidade.

II. O que é a shell ?

Para ter uma explicação exata eu recomendo visitar este site SHELL

Shell é um programa que se encontra no diretório/bin.

Distinguem-se diversos Shells <códigos>
- le /bin/sh shell Bourne
- le /bin/bash Bourne Again SHell
- le /bin/csh C shell
- le /bin/ksh Korn shell
- le /bin/tcsh C shell atualizado em espanhol
- le /bin/zsh/ Z shell em espanhol
</code>

A continuidade deste tutorial trata unicamente do shell bash que é a Shell padrão para as distribuições GNU-LINUX.

Shell permite executar comandos, explorar a arborescência do sistema, criar, editar e suprimir arquivos, etc.

III. Como acessar a linha de comando

Para acessar a linha de comando, é possível utilizar um http://pt.wikipedia.org/wiki/Terminal_(inform%C3%A1tica) (xterm, kterm, gterm) ou então Console.

kterm - é um terminal emulador multi-línguas baseado no xterm.
As principais diferenças entre kterm e xterm são:
  • A possibilidade de tratar o texto multilínguas codificado em ISO2022 em inglês, * mostrar o texto colorido (Verr man kterm).


Para fazê-lo, duas possibilidades são oferecidas:
  • utilizar o menu da área de trabalho (Gnome, Kde, etc.). Trata-se do método aconselhado.
  • utilizar o menu lançar uma aplicação. Na janela aberta, digitar o nome do terminal e validar. A janela lançar uma aplicação pode ser Alt+F2
  • Utilizar os consoles virtuais (tem seis).

IV. Os consoles virtuais

O console virtual (tty1 à tty6) é um ecrã negro onde uma chamada de comando aparece da forma login :

A partir a interface gráfica, é possível conectar-se a um console virtual utilizando a combinação das teclas Ctrl+Alt+FN, onde N é um número de 1 à 6

Exemplo: Acessar o console a partir da interface gráfica

CTRL+ALT+F3

Estando em um console virtual, a navegação entre as diferentes consoles virtuais se faz com a combinação das teclas Alt+FN, onde N é um número de 1 à 6

V. Conexão a um console virtual

No campo login:, digitar a identificação (login) do usuário, depois validar pressionando Enter, o campo Password: se afixará. Digitar a senha do utilisador e validar.
  • A senha não está afixada no ecrã por razões de segurança. O fato de não ver no ecrã aquilo que você digita, não é motivo de inquietação.
  • Se a senha é válida, um campo de comando deve afixar-se, indicando que a conexão se completou


Exemplo :


VI. Na chamada do comando do shell após conexão

A chamada do comando (ou prompt) do shell tem a seguinte forma :
nome@máquina ~ $
  • nom - representa o identificador do usuário conectado
  • máquina- representa o nome da máquina
  • ~ é um atalho que significa o diretório pessoal /home/usuário
  • $ significa que você está conectado enquanto usuário

Se no lugar do $ o signo/caráter # aparece, então você está conectado como super usuário.
(Root).em espanhol
Tenha presente que os sistemas Gnu/Linux utilizam por convenção # para root e $ para um usuário outro que o root.em espanhol
Este comportamento pode mudar trocando a variável do ambiente PS1, mas isto é desaconselhado!

VII. Retornar ao modo gráfico a partir do console virtual

Para retornar ao modo gráfico a partir do console virtual, utilizar a combinação das teclas ALT+F7

VIII. O ambiente Shell

Após conexão, o usuário está conectado em seu ambiente. Isto significa que Shell coloca à disposição variáveis de ambiente, quer dizer um recipiente memória no qual os dados são armazenados.
Para afixar o conteúdo de uma variável de ambiente, o comando echo $NOM_VARIABLE pode ser utilizado. (eco $NOME_VARIÁVEL)

O nome das variáveis de ambiente é por convenção em maiúsculas, é preciso respeitar a regra.

IX.Variáveis de ambiente a conhecer

HOME, USER, GROUPS, UID, PWD, SHELL, PATH, HOSTNAME
  • HOME contém o diretório do usuário
  • USER contém o login do usuário
  • PWD contém o diretório corrente
  • SHELL contém o nome do shell de conexão
  • PATH contém a lista dos diretórios onde se encontram as chamadas que o usuario pode executar
  • HOSTNAME contém o nome da máquina
  • HISTSIZE contém o tamanho máximo dos comandos executáveis contidos no arquivo do histórico
  • PS1 contém os parâmetros de afixagem da chamada do comando (o prompt)

Exemplo de afixagem :



O comando set permite afixar as variáveis e seu conteúdo.

X. Arquivos de configuração

No momento da conexão, em um console virtual ou na abertura de um terminal em modo gráfico, shell utiliza informações que encontram-se em certos (.bashrc, .bash_profile, etc)


O comportamento do shell pode ser modificado editando estes arquivos.*

O arquivo .bashrc é por exemplo utilizado no capítulo sobre os clones.

Naquilo que concerne a configuração de seu shell, você deve esperar um pouco, não será para logo. Você vai aprender a fazê-lo com o tempo, então seja paciente.

XI. Por que utilizar a linha de comando?

Muitas soluções são dadas em linha de comando, não é por que GNU/Linux não tem uma interface gráfica mas somente certas tarefas, que a utilização da linha de comando não se mostre bem mais prática e mais potente que o famoso mouse.

XII. Noções do comando

Um comando é um arquivo executável. A execução de um comando pode ser diferente dependendo do caso.

Os comandos utilizados são dados a título de exemplo ; então não obstine-se em compreendê-los, se você encontrar problemas com alguns deles. Os comandos de base serão detalhados ulteriormente.

Exemplo: o comando ls

O comando ls afixa o conteúdo de um diretório. man ls para mais detalhes.
  • sem argumento e sem opção
  • sem argumento com uma ou diversas opções
  • com argumento
  • com argumento e com um ou diversas opções

XIII. Onde se encontram os comandos?

Os comandos, que você pode executar a partir de seu terminal, encontram-se em certos diretórios de seu sistema.

A variável PATH (em português : « caminho ») contém uma lista de diretórios que contém os comandos acessíveis. Para ter acesso à todos os comandos é necessário geralmente ser Usuário root.

Para encontrar o lugar de um comando utiliza-se "whereis" (em português "onde está"):

Ou então "which" (em português « o qual, a qual, o quê, quem, aquilo que qual ») :

A diferença entre whereis et which
  • whereis - busca de arquivos executáveis, as fontes e as páginas do manual de um comando.
  • which - busca em uma variável PATH os arquivos executáveis

Exemplo: busca da existência do comando com which

1. O usuário yogi pequisa se o comando iptables existe no sistema, o resultado para ele é NON


2. Verifica-se como root


Na realidade o comando iptables existe no sistema no/sbin. O diretório/sbin não se ncontrando no PATH do usuário yogi, é bem normal que which não dê um resultado.

Em resumo whereis é mais garantido.

XIV. A documentação (As páginas « man »)

Ação em linha de comando
man comando
man N comando

N - O número da página man (você o verá no alto a esquerda)

Como regra geral na parte SEE ALSO de uma página « man », você encontrará a lista dos comandos que é aconselhado consultar tendo relação direta com o comando sobre o qual você está lendo o manual.

Exemplos:

1.execução do comando man crontab

2.o convite do comando ( o prompt) vai desaparecer e a página man será afixada

Olhe a parte SEE ALSO e você verá as páginas que são aconselhadas para consultar. Isto quer dizer que pode-se digitar:

man 5 crontab
man 8 cron


3. a tecla « q » para sair da página man e voltar à chamada do comando (prompt)


Para obter a descrição resumida de um comando, utiliza-se a opção "-f"
man -f comando
whatis comando


Para conhecer as rubricas que existem na apresentação da palavra chave, a "-k" :

man -k comando

XV. A estrutura de uma página de man


COMMAND(1) Manual do usuário Linux COMMAND(1)

NAME
comando - resumo da ação do comando

SYNOPSYS
<sintaxe completa do comando>

DESCRIPTION
Explicações relativas a execução do comando

OPTIONS
Lista das opções e o quê elas fazem

FILES
Os arquivos utilizados pelo comando

SEE ALSO
Comando_prima(1), comamco-irmão(5), etc.

BUGS
Os bugs existentes no comando

AUTHOR
O nome do autor

XVI. Algumas regras para compreender SYNOPSYS e/ou OPTIONS


- Todo texto isokado, sem [] (colchete []), {} (chave{}), <> (setas"), digita-se tal e qual aparecem
- O texto entre colchetes [] é facultativo
- O texto entre chaves {} contém escolhas a fazer. As escolhas são separadas por | (pipe) ou por uma vírgula ,
comando -{a|b}quer dizer comando -a ou comando -b mas não comando -ab
-O texto entre setas <> deve ser substituído pelo texto apropriado
-os parênteses (...), utilizados por parâmetros como os nomes de arquivos
- Os colchetes [] e as setas <> podem ser combinados
[<nome arquivo>] - facultativo mas se você utilizá-los deverá escrever o nome do arquivo
- Os colchetes [] e as chaves poderão ser combinados
[--opção={a|b|c}]

XVII. Comandos de base


cat - Lê (concatène) um ou diversos arquivos, afixagem na saída standard
cd - ChangeDdirectory, muda o diretório
chmod - CHangeMODe -muda o modo de acesso (permissões de acesso) de um ou diversos arquivos
chown - CHangeOWNer - muda o proprietário de um ou de diversos arquivos
cp - copia arquivos
crontab - planificação de tarefas
cut - Retira partes precisas do texto em cada linha do arquivo
date -Afixa a data de acordo com o formato solicitado
dd - DevicetoDevice - Recopia octeto por octeto tudo ou parte de um periférico (habitualmente de armazenagem) em um outro periférico.
df - afixagem da quantidade do espaço livre em todos os sistemas de arquivos
du - DiksUsage - a utilização do disco
echo - Afixa o texto na saída standard (no ecrã)
exit - Para a execução do shell
find - procura de arquivos
fsck - FileSystemChecK - verificação da integralidade do sistema de arquivos
grep - busca em um ou diversos arquivos as linhas que correspondem à um motivo.
groupadd- Integrar um grupo de usuários
gunzip - descompressão de arquivos
gzip - compressão de arquivos
head - afixa as primeiras linhas (por padrão 10) de um arquivo
help - afixa uma ajuda para comandos internos de bash
kill - envia um sinal à um processo
less - programa a afixagem do ecrã
ln - criação de links
ls - lista do conteúdo dos diretórios
man - afixa as páginas do manual
mkdir - MaKeDIRdirectory - cria umdiretório
mkfs - MaKeFileSystem - criação de sistemas de arquivos
more - afixagem do ecrã
mount - monta um sistema de arquivos
mv - desloca, nomeia novamente um arquivo
ps - afixa os precessos com execução em andamento
pwd - Print name of current/wworking dDirectory - afixa o caminho completo do diretório corrente
rm - supressão de arquivos
rmdir -Remove empty directories - supressão de um dossier vazio
tail - afixa as 10 últimas linhas de um arquivo
tar - criação de arquivos
su - Ssustitute User identity ou Switch U - substitui a identidade de um usuário
uname - Afixa as informações sobre o sistema.
useradd - integra um usuário
whereis - localiza um comando

XVIII. Execução de um comando

Existe diversas maneiras de executar um comando.
  • utilzando simplesmente seu nome
  • utilizando o caminho absoluto
  • utilizando o caminho relativo
  • utilizando clones (prática para os comandos empregados seguidamente e que são longos)


Um comando pode ser executado no plano de fundo utilizando o signo « & » e depois o nome do comando.
A execução de um comando em plano de fundo permite retornar ao shell depois da execução.

Exemplo: lançamento do Firefox após uma linha de comando


XIX. Trocar de identidade (mudar de usuário)

De seu shell você tem a possibilidade de substituir a identidade de um outro usuario existente no seu sistema, inclusive o usuário "root".

Para tanto você tem à disposição o comando su ou su -

Olhe utilizar o comando su para mais detalhes


XX. A raiz

Nos sistemas da família Unix, a raiz representa o top da arborescência dos diretórios.
Ela é representada pelo signo/caráter / (slash) e significa "root" (raiz em português)

Todos os diretórios de seu sistema são ligados à uma raiz de maneira direta ou indireta.

XXI. Os diretório "." e ".."

  • . Indique o diretório corrente
  • .. indique o diretório parente



XXII. Onde estou ? (posição na arborescência)

Uma coisa muito importante a saber quando se está conectado no shell, é onde é que estamos na arborescência.
O comando pwd (PrintWorkingDdirectory) afixa sua localização na arborescência.

XXIII. O caminho absoluto

O caminho representa a arborescência completa de arquivos, partindo da raiz.

Exemplo :

O arquivo b.txt encontra-se no /home/user/doc/text
Você se encontra no /home/user/ascii

O caminho absoluto para b.txt é /home/user/doc/text/b.txt



Qualquer que seja a localização na arborescência a utilização do caminho absoluto é o mais seguro para acessar o arquivo desejado.

XXIV. O caminho relativo

O caminho relativo para acessar um arquivo é a arborescência dada à sua localização no shell.
Utiliza-se as notações . e/ou ..

. nos permite descer na arborescência do diretório corrente
Nos permite num primeiro momento subir em arborescência.. nos permite num primeiro momento subir em arborescência com o objetivo de atingir outros diretórios.

Exemplo : o diretório corrente.

O arquivo b.txt encontra-se no /home/user/doc/text
Você encontra-se em /home/user

O caminho relativo para b.txt est ./doc/text/b.txt

Exemplo : o diretório parente ..

O arquivo b.txt encontra-se em /home/user/doc/text
Você encontra-se em /home/user/ascii

O caminho relativo para b.txt est ../doc/text/b.txt


O diretório ascii encontra-se em /home/yogi então escrevendo .. eu vou utilizar o diretório parente /home/yogi como ponto de partida depois, em seguida, eu vou em doc/text (note que eu não disse /doc/text - que teria o doc da raiz / )

XXV.Como se deslocar na arborescência

Para se deslocar na arborescência utilizar o comando cd

cd /caminho/para/diretório

Com pwd você pode verificar sua nova localização na raiz

XXVI. Histórico

Os comandos executados estão registrados no histórico.
A variável HISTSIZE contém o número máximo dos comandos a registrar.
Você pode acessar o histórico com o comando history

history [n] | less
  • n - a opção "n" permite afixar os "n" últimos comandos (facultativo)
  • less - o comando « less » permite navegar no histórico
    • As flechas alto e baixo lhe permitem navegar no histórico.
    • !n - permite executar o comando correspondente ao número "n" na lista sem ter de redigitá-la

XXVII. A finalização automática dos comandos

Digitar um comando em um terminal nem sempre é coisa fácil.

Apesar disto, tranqüilize. O shell permite a finalização automática (digita-se por exemplo 1 ou 2 letras e o software completa todo o comando) dos comandos.

Exemplo: comando tal utilizando o caminho absoluto

- Isto supõe que eu deva digitar /usr/bin/tail

A finalização automática nos permite fazer economias com respeito a escrita do comando e ao mesmo tempo a segurança da sintaxe.
A finalização automática se obtém utilizando a tecla TAB
Para tanto vamos começar com o 1° caráter...
  • Eu digito J /u e pressiono sobre TAB
    • O shell vai completar e vai escrever /usr/
    • Neste momento eu integro um b então eu estou com/usr/b
    • Eu pressiono novamente sobre TAB e eu terei /usr/bin/
    • Neste momento eu integro ta,então eu terei /usr/bin/ta
    • Eu pressiono 2 vezes sobre TAB
      • O shell no meu sistema encontra 4 correspondentes
        • tac tack tail tasksel
        • Eu vou continuar e eu vou integrar um i
        • assim terei /usr/bin/tai
        • Eu pressiono novamente TAB
        • e eu obtenho /usr/bin/tail

ls /u + TAB + b + TAB + ta + TAB + TAB + i + TAB



É bem verdade que na explicação tem-se a impressão que é longo.
Tranqüilize, é bastante rápido, mesmo se você digitar com somente um dedo:-)

XXVIII. Edição de arquivos (vi,vim)

O editor vi

Muito útil, sobretudo quando se tem um problema com o modo gráfico.

Etapa I - CONSELHO

Backup do arquivo original, utiliza-se o comando "cp (copie) acompanhamento do arquivo fonte propriamente dito seguido do arquivo alvo (aqui inexistente)

Etapa II - Abertura do arquivo



Etapa III - Edição do arquivo

- pressione a tecla ipara passar ao modo inserção
No canto esquerdo você verá --INSERÇÃO--

-utilize as flechas (direita, esquerda, alto, baixo) ou Pg Suiv. e Pg Prec. Para navegar pelo arquivo

- A inserção dos sinais faz-se acima do cursor com o deslocamento à direita do cursor

-A tecla supressão permite suprimir o sinal encontrando-se acima do cursor

Etapa IV - Fim da edição do arquivo

Pressione a tecla Escap assim que você terminou a edição
--INSERÇÃO-- vai desaparecer

Etapa V -Gravação das modificações e sair de "vi"

- pressione a tecla : (você deverá vê-los aparecer no canto esquerdo abaixo a esquerda)
- escrevawq (para WriteQuit)
- pressione em "Enter"


Voltar ao terminal



Eis aqui referente à edição com "vi" ou "vim"

XXIX. O alias

A utilização de alias é muito prático para os comandos longos que são utilizados regularmente. Isto evita de redigitá-los.
A utilização excessiva de alias pode provocar o esquecimento dos comandos e de suas opções.
Compete à você gerenciar a utilização dos alias.
Os alias nós os escreveremos no arquivo .bashrc da seguinte maneira:
(veja o capítulo XXVIII Edição de arquivos (vi, vim))

alias nome='comando'
Assim que o arquivo /home/user/.bashrc estiver editado, digite
fonte /home/user/.bashrc

Para integrar imediatamente os alias

O comando aliasafixa os alias existentes

XXX. Os redirecionamentos e os pipelines

Primeiro inicia-se com uma pequena explicação referente aos descriptadores das « entradas - saídas":
  • tudo aquilo que se escreve no shell chama-se STDIN (STandarDINput)
  • tudo aquilo que você vê no ecrã pode ser :
    • STDOUT (STandarDOUTput)
    • STDERR (STandarDERRor)


Estes descriptadores são numerados como abaixo descritos :

0: entrada standard (STDIN) <---------------- teclado

Processo 1: saída standard (STDOUT) ---------------> ecrã

2: saída erros (STDERR) ----------------> ecrã

Os redirecionamentos

O que é redirecionar?
É a possibilidade de dirigir o resultado de um comando utilizando outras destinações do que aquelas dos descriptadores standards.

Para realizar um redirecionamento utiliza-se:

comando > arquivo - redirecionamento em modo de escrita para o arquivo
O arquivo será criado se ele não existir
Seu conteúdo será substituído pelo novo arquivo se o arquivo já existe

comando >> arquivo - redirecionamento em modo adicionar para o arquivo

O arquivo será criado se ele não existir

O resultados será adicionado no final do arquivo

comando< fichier - o comando lê a partir do arquivo

Exemplos de redirecionamentos:

- enviar o conteúdo do arquivo 1 no arquivo 2
Se o arquivo 2 existe seu conteúdo de origem será suprimido, o arquivo 2 será criado se ele não existir


-enviar o conteúdo do arquivo 1 para o arquivo 2 - modo adicionar
Se o arquivo 2 existe, o conteúdo do arquivo 1 será adicionado no final do arquivo 2, se o arquivo 2 não existir, ele será criado


-busque na raiz o arquivo chamado arquivo .txt, os erros ao invés de serem enviados para STDERR (o ecrã) serão enviados para /dev/null (espécie de lixeira sem fim)


- procure na raiz o arquivo chamado.txt, os erros ao invés de serem enviados para STDERR (o ecrã) serão enviados ao arquivo erros.txt

Os pipelines


comando1 | comando2 - o resultado do comando1 é utilizado pelo comando2

comando1 & comando2 -os comandos são executados simultaneamente, comando1 executando-se no plano de fundo
comando1 && comando2 -se o comando1 se completar o comando2 é executado
comando1 || comando2 - o comando2 executa-se somente se o comando1 é abortado
comando1; comando2 - os comandos são executados na ordem

Exemplos de pipeline

- O tubo | (pipe)


Num primeiro momento eu executo perl -ne 'print unless /^\s*$/' guideshell com o objetivo de afixar, no ecrã, as linhas vazias eliminadas.
Ao invés de afixar no ecrã eu utilizo | para passar o resultado ao comando wcque vai contar o número de linhas deste arquivo

- O paralelismo &


Os comandos se executam simultaneamente

-A dependência &&


Você notará que no 1° caso os dois comandos executam-se.
Mas no 2° caso eu faço voluntariamente um erro de sintaxe para 1° comando.
O shell nem vê o 2° comando e ele pára nos dizendo que ech não é um comando conhecido.

- A alternativa ||


No 1° caso você observará que somente o 1° comando executou-se.
No 2° caso o shell afixa um erro para o 1° comando mas ele executa de qualquer forma o 2°.

- O seqüenciamento:


eco a executa-se
Eu espero 1 segundo
eco b executa-se
Eu espero 2 segundos
eco c executa-se

XXXI. Os metacaráteres do shell

Para facilitar a apreensão dos comandos o shell disponibiliza meta caracteres, chamados igualmente caracteres genéricos ou coringas.

* - corresponde a qualquer caráter e número de caráter
? - corresponde a um só caráter
[...] - corresponde a um caráter entre colchetes

Com os colchetes pode-se também utilizar intervalos.

[0-9] - Todo o caráter compreendido entre 0 e 9
[a-zA-Z] - toda a letra comprendida no intervalo (minúscula e maiúscula)

XXXII. Truques e Dicas


cd : voltar ao diretório pessoal
cd - : voltar ao diretório precedente (unicamente se você executou um cd)


Ctrl+l : apagar o ecrã
Ctrl+c : interrupção de um comando
Ctrl+z : suspender( pausa) um comando
CTRL+t : correção de digitação invertendo duas letras
Ctrl+a : ir ao início da linha
Ctrl+e : ir ao final da linha
Ctrl+s : interrupção da saída do terminal (mascarar a digitação)
Ctrl+q : anular a interrupção da saída (mascarar a digitação)
Ctrl+u : apagar tudo à esquerda do cursor
Ctrl+w : apagar a palavra à esquerda do cursor
Ctrl+k : apagar a palavra à direita do cursor
Ctrl+y : colar a digitação precedente
Ctrl+d : apaga o atual caráter, se a linha estiver vazia desconexão

Alt+b : se desloca para frente, palavra por palavra na linha de comando.
Alt+f : se desloca para trás palavra por palavra na linha de comando.
Alt+d : apaga a palavra seguinte
Alt+t : troca a palavra corrente com a palavra precedente
Alt+c : coloca em maiúsculo a corrente letra , o resto todo da palavra em minúsculo, depois se desloca à palavra seguinte
Alt+l : coloca em maiúscula a partir da corrente letra até o final da palavra, depois desloca-se à palavra seguinte
Alt+u : coloca em minúscula a partir da corrente letra até o final da palavra depois se desloca à palavra seguinte

Alt+Backspace : apaga a palavra precedente (equivalente Ctrl+w)

XXXIII. Midnight Commander (clone mc)

Midnight Commander - gerenciador em linha de comando em inglês e uma captura de ecrã

Este utilitário permite navegar, criar, editar, suprimir, etc.
Com mc você pode modificar os direitos, mudar de proprietário, fazer buscas, conectar-se à um servidor ftp, etc...
mc pode ser utilizado como explorador

XXXIV. Error: command not found

Leia este tutorial (Chapitre IV.3) variáveis de ambiente PATH
Um outra origem deste erro : você não respeitou a forma dos caracteres

Exemplo : Ls no lugar de ls


XXXV. Erro: Nenhum arquivo ou diretório deste tipo

Erro afixado pelo shell quando você tenta executar um comando num arquivo que não existe no caminho precisado.


Soluções
-Encontre o arquivo com o comando find para saber se ele existe no disco afim, se é o caso, de conhecer seu verdadeiro caminho.

XXXVI. Erro: Permissão recusada

É um problema de direitos de acesso.
Leia este tutorial Direito de acesso

XXXVII. Conselhos de redação

O shell é bastante exigente na redação dos comandos.

Os caracteres que tem um sentido especial para o shell devem ser dissipados para obter o caráter literal.
Caracteres que tem um sentido especial para o shell :
  • o espaço
  • o ponto e vírgula ;
  • o slash /
  • o anti-slash \
  • o caráter | (pipe)
  • o esperluate &
  • o ponto .
  • as apóstrofes simples ( ' ) e duplas ( " )


De maneira geral, deve-se observar atentivamente os caracteres não alfabeto numéricos.

1. sensibilidade ao engano de digitação dos caracteres

Se o comando chama-se lsesteja seguro que é exatamente igual senão Ls não funcionará
Igualmente para o nome de arquivos e/ou diretórios.

2. o espaço

Pegue o exemplo de um arquivo que se chama: nome arquivo.txt

Se você digitar ls -l meu arquivo.txt para ver os atributos deste arquivo, cuidado pois você não obterá o resultado desejado.

Por que?

Por causa daquilo que o shell vai ler : Afixar os atributos dos arquivos « nome » e « arquivo.txt »
Para obrigar shell à afixar aquilo que se deseja, utiliza-se aquilo que ele nos disponibiliza.

ls -l mome\ arquivo.txt - sintaxe ok (o ante-slash permite ler o espaço como um caráter e não como um separador de argumentos de comando)

ls - 'meu arquivo.txt' - sintaxe ok (as apóstrofes simples tratam cada caráter de forma literal)
QUESTÃO : Como é possível ler uma apóstrofe simples de maneira literal entre 2 apóstrofes simples?

O espaço tem também como papel separar os argumentos em linha de comando.

Um simples espaço utilizado em um lugar errado pode ser fatal para todo o sistema.

Exemplo : supressão da raiz por causa de um simples espaço

Cenário :

O root quer suprimir uma certa pasta. Para tanto ele vai utilizar o comando rmcom as opções f (força) e R (recursivo).
A pasta à suprimir chama-se a_suprimir e encontra-se em /home/yogi/a_suprimir

a. comando correto


b. comando incorreto (erro de digitação) => sistema suprimido

Explicação :

Você observará que no 2° caso, por engano eu digitei um espaço entre / e home.
O que acontece?
O shell vai pensar que o comando rm deve ser suprimido, antes a raiz / e depois home/yogi/a_suprimir.
Devo dizer que você acabou de apagar todos os dados de seu sistema.
Que "home/yogi/a_suprimmir" não existe, pouco importa, seu sistema não existe mais.

ASSIM ATENÇÃO ÀQUILO QUE VOCÊ DIGITAR NO SHELL!!!

Uma solução para evitar tudo isto é de UTILIZAR A COMPLETUDE dos comandos.

Se você digita / e em seguida a tecla TAB 2 vezes, diversas escolhas se afixarão no ecrã. Normalmente são os diretórios da raiz: boot,bin...home...,var.

Você terá somente que acrescentar um h para home e de novo TAB 2 vezes e assim por adiante
TOME O TEMPO DE LER ESTAS ADVERTÊNCIAS PARA NÃO ARREPENDER-SE DEPOIS!!!

Um outro exemplo com o espaço

Para reconhecer o espaço com sendo um caráter e não como um separador de parâmetros é preciso proteger- (colocar um anti-slash na frente)

Criar um arquivo que se chama "aa bb"


Note que o resultado obtido não está conforme com aquilo que se desejava.
Vamos ver somente um arquivo aa bb e não o arquivoaa e o arquivo bb
Por que obtivemos isto ?
Pois o shell, quando digitamos
touch aa bb 
,
Entendeu que era necessário criar um arquivo aa e um arquivo bb.

Corrigindo isto :


Agora você vai dizer : Mas não foi criado aa bb mas aa\ bb !!!
Na realidade você criou aa bb
O caráter \ permite o espaço como um caráter literal.
Aliás, o comando ls -l mostrará claramente a existência do arquivo aa bb

No lugar do anteislash você pode utilizar as apóstrofes simples touch 'aa bb'

O que se pode aprender com isto?
Cada vez que você utilizar caracteres não alfabeto numéricos, tais como $,i -slashr ou então coloque-os entre apóstrofes simples.

3. Os comandos longos que utilizam mais de uma linha

Se o comando torna-se muito longo você pode passar para a linha seguinte utilizando o caráter \

XXXVIII. Executar um script

executar um script shell



Trdaução feita por Ana Spadari
Para uma leitura offline, é possível baixar gratuitamente este artigo no formato PDF:
Shell-bash-guia-de-utilizacao-nivel-debutante.pdf

Veja também

Na mesma categoria

Guia de uso del Shell para principiantes
Por Carlos-vialfa em 17 de junho de 2008
Guide d'utilisation du Shell pour débutant
Por lami20j em 29 de dezembro de 2006
Artigo original publicado por lami20j. Tradução feita por ninha25.
Este documento, intitulado « SHELL BASH - Guia de utilização - Nível debutante »a partir de CCM (br.ccm.net) está disponibilizado sob a licença Creative Commons. Você pode copiar, modificar cópias desta página, nas condições estipuladas pela licença, como esta nota aparece claramente.