Noções básicas do Bash

Concluído

Para compreender o Bash, é necessário começar com uma compreensão da respetiva sintaxe. Depois de saber a sintaxe, você pode aplicá-la a cada comando Bash executado.

A sintaxe completa de um comando do Bash é a seguinte:

command [options] [arguments]

O Bash processa a primeira cadeia que encontra como um comando. O seguinte comando utiliza o comando ls (correspondente a "listar") do Bash para apresentar o conteúdo do diretório de trabalho atual:

ls

Os argumentos geralmente acompanham os comandos do Bash. Por exemplo, pode incluir um nome de caminho num comando ls para apresentar uma lista do conteúdo de outro diretório:

ls /etc

A maioria dos comandos do Bash tem opções para modificar o seu funcionamento. As opções, também conhecidas como 'flags', dão instruções mais específicas a um comando específico. Por exemplo, arquivos e diretórios cujos nomes começam com um ponto são ocultos do usuário e não são exibidos pelo ls. No entanto, pode incluir o sinalizador -a (correspondente a "tudo") num comando ls para que tudo seja apresentado no diretório de destino:

ls -a /etc

Pode até combinar sinalizadores por uma questão de brevidade. Por exemplo, em vez de entrar ls -a -l /etc para mostrar todos os arquivos e diretórios no diretório /etc do Linux em formato longo, você pode inserir isso:

ls -al /etc

O Bash é conciso. Por vezes, é extraordinário (e um motivo de orgulho entre os entusiastas do Bash) o que se pode conseguir com um único comando.

Obter ajuda

As opções e os argumentos que podem ou devem ser utilizados variam de comando para comando. Felizmente, a documentação do Bash está incorporada no sistema operativo. A ajuda está sempre apenas à distância de um comando. Para conhecer as opções de um comando, utilize o comando man (correspondente a "manual"). Por exemplo, para ver todas as opções do comando mkdir ("criar diretório"), introduza o seguinte:

man mkdir

man é o seu melhor amigo enquanto você aprende Bash. man é como você encontra as informações necessárias para entender como qualquer comando funciona.

A maioria dos comandos do Bash e do Linux suporta a opção --help. Esta apresenta uma descrição da sintaxe e das opções do comando. Para o demonstrar, introduza mkdir --help. A saída é mais ou menos assim:

Usage: mkdir [OPTION]... DIRECTORY...
Create the DIRECTORY(ies), if they do not already exist.
    
Mandatory arguments to long options are mandatory for short options too.
  -m, --mode=MODE   set file mode (as in chmod), not a=rwx - umask
  -p, --parents     no error if existing, make parent directories as needed
  -v, --verbose     print a message for each created directory
  -Z                   set SELinux security context of each created directory
                         to the default type
      --context[=CTX]  like -Z, or if CTX is specified then set the SELinux
                         or SMACK security context to CTX
      --help     display this help and exit
      --version  output version information and exit
    
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Report mkdir translation bugs to <http://translationproject.org/team/>
Full documentation at: <http://www.gnu.org/software/coreutils/mkdir>
or available locally via: info '(coreutils) mkdir invocation'

Geralmente, a ajuda obtida desta forma é mais concisa do que a ajuda obtida com man.

Utilizar carateres universais

Os carateres universais são símbolos que representam um ou mais carateres nos comandos do Bash. O caráter universal mais utilizado é o asterisco. Representa zero carateres ou uma sequência de carateres. Suponha que seu diretório atual contém centenas de arquivos de imagem, mas você só quer ver os arquivos PNG; aqueles cujos nomes de arquivo terminam com .png. Eis o comando para apresentar apenas esses ficheiros:

ls *.png

Nota

O Linux não possui um conceito formal de uma extensão de nome de ficheiro como outros sistemas operativos. Isso não significa que os arquivos PNG não terão uma extensão .png . Isso simplesmente significa que o Linux não atribui nenhum significado especial ao fato de que os nomes dos arquivos terminam com .png.

Suponhamos agora que o atual diretório também contém ficheiros JPEG. Alguns terminam em .jpg, enquanto outros terminam em .jpeg. Aqui está uma maneira de listar todos os arquivos JPEG:

ls *.jpg *.jpeg

E aqui está outro:

ls *.jp*g

O caráter universal * corresponde a zero ou mais carateres, mas o caráter universal ? representa um único caráter. Se o diretório atual contiver arquivos chamados 0001.jpg, 0002.jpge assim por diante através de0009.jpg, o comando a seguir lista todos eles:

ls 000?.jpg

Outra forma de utilizar carateres universais para filtrar a saída é utilizar parênteses retos, que indicam grupos de carateres. O comando a seguir lista todos os arquivos no diretório atual cujos nomes contêm um ponto imediatamente seguido de um J ou P minúsculo. Ele lista todos os arquivos .jpg, .jpeg e .png , mas não .gif arquivos:

ls *.[jp]*

No Linux, os nomes de ficheiro e os comandos que os operam são sensíveis às maiúsculas e minúsculas. Então, para listar todos os arquivos no diretório atual cujos nomes contêm pontos seguidos por um J ou P maiúsculo ou minúsculo, você pode digitar o seguinte:

ls *.[jpJP]*

As expressões entre parênteses retos podem representar intervalos de carateres. Por exemplo, o seguinte comando apresenta todos os ficheiros no diretório atual cujos nomes começam com uma letra minúscula:

ls [a-z]*

Inversamente, o seguinte comando apresenta todos os ficheiros no diretório atual cujos nomes começam com uma letra maiúscula:

ls [A-Z]*

E este lista todos os arquivos no diretório atual cujos nomes começam com uma letra minúscula ou maiúscula:

ls [a-zA-Z]*

Com base em tudo isso, você pode adivinhar o que os seguintes comandos fazem?

ls [0-9]*
ls *[0-9]*
ls *[0-9]

Se precisar de utilizar um dos carateres universais como um caráter comum, torne-o literal ou ignore-o ao precedê-lo de uma barra invertida. Por isso, se por algum motivo tivesse um asterisco como parte de um nome de ficheiro (algo que nunca deve fazer intencionalmente), poderia procurá-lo ao utilizar um comando como o seguinte:

$ ls *\**