Para interagir com o seu sistema operacional (no nosso caso o Linux) você pode usar interfaces gráficas ou GUI (graphic user interface, as famosas janelas) ou rodar um programa que permite que os comandos sejam inseridos um a um através de linhas de comando (command line interfaces, CLIs). Existem vários destes programas (ou Shells) mas trataremos aqui de bash (Bourne Again SHell, uma versão muito usada e já instalada na maioria das distribuições linux.
Muitas vezes, quando você usa um computador, uma tarefa pode ser realizada mais facilmente através de um comando de linha, escrito em um terminal. Por exemplo, suponha que se quer obter em um texto toda a lista de músicas que se encontram no diretório (ou pasta). Uma forma de fazer isto seria a seguinte:
Abra o terminal e digite
Nestes exemplos $ é o prompt de comandos, a indicação de que o computador está pronto para receber instruções. O comando cd faz para troca de diretório, no caso dirigido para ~/Musica, onde ~ é um atalho para representar a pasta do usuário, (home/usr). A segunda linha faz uma listagem de todos os arquivos usando ls (list screen) e, ou invés de exibí-los na tela, (devido ao sinal > ou pipe, redirecionador) envia esta lista para um arquivo de nome minhas_musicas.txt. Poderíamos ainda filtrar a lista usando ls *.mp3, e apenas os arquivos com extensão mp3 seriam listados.
Listas de comandos podem ser encontradas em Site: SS64 ou Linux commands1.
Observe agora que a Shell permite comandos encadeados ou seja, a entrada de vários comandos de uma só vez. É possível inclusive passar resultados de um para outro comando, em um único passo. Para fazer isto escrevemos os comandos na mesma linha e os separamos por um ponto e vírgula (;):
Esta linha efetuará o mesmo que as duas linhas do exemplo anterior. Para ver o conteúdo no novo arquivo criado digite gedit minhas_musicas.txt ou clique no arquivo de dentro de um gerenciador de arquivos como o Nautilus ou Thunar. Também é possível listar o arquivo de caracteres (arquivo.ext) com o comando cat arquivo.ext.
Com esta técnica você pode escrever linhas com até 255 caracteres. Se esta sequência de ações for usada com frequência pode ser útil gravá-la em um arquivo, que depois pode ser executado quando necessário. Para isto use um editor qualquer que possa gravar arquivos como uma sequência simples de caracteres ASCII (isto quer dizer: sem comandos de formatação). O Ubuntu (e várias outras distribuições) traz o gedit ou kate (na distribuição KDE). Você também pode usar o geany, bluefish ou outro qualquer de sua escolha.
Uma lista de comandos gravada em um arquivo executável é chamada de script. Para especificar que se trata de um shell script colocamos na primeira linha a seguinte informação:
#!/bin/bash
O sinal de sustenido (#) em uma linha qualquer (exceto na primeira linha) é usado para indicar um comentário, um trecho que não é executado pela shell. Na primeira linha ele possui um significado especial: #! indica que o arquivo a seguir deverá ser executado pela bash shell fornecendo o caminho onde bash está instalado (normalmente em /bin/bash). Outros comandos, a serem executados na ordem em que se encontram, podem ser inseridos em linhas sucessivas. Você ainda pode usar o ponto e vírgula para separar comandos na mesma linha mas, em um script isto não é necessário nem recomendado. É mais fácil ler e compreender scripts onde um único comando ocupa cada linha.
O seguinte exemplo ilustra o conceito:
Evidentemente estas linhas supõem a existências das pastas ~/Musicas e ~/Livros. Caso contrário uma mensagem de erro será exibida. Comentários são úteis para tornar mais legíveis os scripts, principalmente para o caso de outro usuário (ou você mesmo, no futuro) utilizar o script. Grave seu script em uma pasta (talvez "/scripts") com o nome lista_arquivos. Para que o arquivo seja executado é necessário informar à shell como encontrá-lo. A shell usa uma "variável de ambiente" (environment variable) chamada PATH para localizar onde estão os arquivos a serem executados. Para compreender isto melhor abra um terminal e digite:
A segunda linha é a resposta (ou output) do comando echo, destinado a exibir informações, indicando que neste computador a shell fará uma busca nos diretórios /usr/local/bin, /usr/bin e /bin quando um comando for emitido. Observe que nossa pasta de scripts não está incluída. Para que o arquivo lista_arquivos seja executado podemos acrescentar a pasta onde ele reside ao PATH:
Observe que PATH contém agora a pasta /.scripts. Esta alteração, no entanto, permanece válida apenas durante a sessão do terminal, ou dentro do arquivo de script de onde ela foi emitida. Veremos depois como alterar de forma permanente esta variável. Outra forma de se conseguir o mesmo objetivo consiste em fornecer o caminho absoluto para o arquivo a ser executado, digitando:
O ponto2, na primeira linha não comentada, é uma referência ao diretório atual, neste caso /script. O til na outra linha, como já vimos, é um atalho para a pasta do usuário, o mesmo que /home/nome_do_usuário.
| . | Um atalho para o diretório atual |
| cd ~ | Vai para diretório home. |
| cd .. | Volta um passo, para o dir pai |
O último passo consiste em tornar este arquivo um executável. Para isto use o comando chmod (change mode):
Se você procurar nas pastas ~/Musicas e ~/Livros deverá encontrar os arquivos recentemente gravados com o conteúdo esperado! O sistema de permissões do Linux (diretamente copiado do Unix) constitui uma das grandes vantagens deste sistema operacional. por causa dele um usuário só pode alterar arquivos de sua propriedade enquanto arquivos de sistema só podem ser alterados pelo superuser ou gerente do sistema. Mesmo em seu próprio computador você não faz (ou pelo menos, não deve fazer) login como superuser.
Para alterar o PATH de modo definitivo você pode usar os seguintes procedimentos: primeiro verifique seu caminho atual usando o comando: $ echo $PATH. Para alterar a variável PATH para todos os usuários do sistema edite o arquivo /etc/profile (como root) e modifique a linha que começa com "PATH =".
Para alterar o PATH de um único usuário edite o arquivo /home/nome_do_usuario/.bash_profile ou .bashrc(Veja nota4). A especificação para o caminho no /etc/.bash_profile, ou /etc/.bashrc, é análoga ao caso anterior. Agora você não precisa usar sudo pois o arquivo é de sua propriedade e você tem permissão para alterá-lo.
A linha de comando PATH = "$PATH: $HOME/scripts pega o conteúdo da variável de ambiente PATH já definida para todos os usuários no arquivo /etc/profile, e acrescenta a ela o nome do diretório $HOME/scripts (ou qualquer outro que você queira incluir). O comando export na última linha serve para que a variável fique visível fora do script onde ela foi definida.
Recapitulando: Para escrever um arquivo executável você dever informar em seu cabeçalho quem o executará (#!/bin/bash no caso de bash, #!/bin/env python no caso de um script Python, etc.
Depois você deverá informar o caminho completo para a sua execução ou colocar o diretório onde seu script está na variável path. Finalmente você deve torná-lo um executável com chmod.
Para saber um pouco mais sobre as permissões5 de um arquivo vamos executar o comando ls -l, onde -l é uma chave (opção) para exibir permissões:
| r | permissão para leitura (read) |
| w | permissão para escrever (write) |
| x | permissão para executar (execute) |
| - | substitui r, w, x se a permissão é negada |
As permissões são listadas por meio de 9 caracteres: o primeiro indica o tipo do arquivo (d, se é um diretório, l para links e - para arquivos comuns. Em seguido temos 3 grupos formados por 3 letras r, w, x (veja tabela) que se referem ao dono do arquivo (o usuário que o criou), ao grupo a que este usuário pertence, e aos demais usuários do computador ou rede. No exemplo acima teste1 é um arquivo (-) pertencente à usuario_1, grupo_1. O dono pode ler, escrever (gravar) e executar (rwx), usuários do grupo podem ler e executar (r-x) mas não modificar este arquivo, e os demais usuários podem apenas ler (r--).
Para exibir o valor da variável PATH, uma variável do sistema estabelecida durante o boot, usamos o comando echo $PATH. Também podemos usar echo para exibir mensagens de textos:
Observe que não é obrigatório o uso de aspas embora, para alguns usuários, pode ser mais claro ler programas onde as strings estejam delimitadas. Mensagens são úteis em um script, por exemplo, para passar informações sobre o funcionamento ou requisitar a digitação de algum dado.
O comando who exibe todos os usuários logados no momento. Para exibir uma informação sem trocar de linha usamos o parâmetro -n.
Leia no site: | Devemos Acreditar na Ciência? | Hipótese, Modelo e Teoria em Física | Cosmologia - Estrutura do Universo | História da Pessoa com Deficiência |