Conceitos básicos do Bash

Concluído

Uma compreensão do Bash começa com uma compreensão da sintaxe do Bash. Conhecendo a sintaxe, você poderá aplicá-la a todos os comandos Bash que executar.

A sintaxe completa de um comando Bash é:

command [options] [arguments]

O Bash trata a primeira cadeia de caracteres que encontra como um comando. O comando a seguir usa o comando ls (de "lista") Bash para exibir o conteúdo do diretório de trabalho atual:

ls

Os argumentos geralmente acompanham comandos Bash. Por exemplo, você pode incluir um nome de caminho em um comando ls para listar o conteúdo de outro diretório:

ls /etc

A maioria dos comandos Bash tem opções para modificar como eles funcionam. As opções, também chamadas de sinalizadores, fornecem a um comando instruções mais específicas. Por exemplo, os arquivos e diretórios cujos nomes começam com um ponto ficam ocultos do usuário e não são exibidos pelo ls. No entanto, você pode incluir o sinalizador -a (de "all", ou "todos", em inglês) em um comando ls e ver tudo no diretório de destino:

ls -a /etc

Você pode, inclusive, combinar sinalizadores para fins de brevidade. Por exemplo, em vez de inserir ls -a -l /etc para mostrar todos os arquivos e diretórios no diretório /etc do Linux no formato longo, você pode inserir isto:

ls -al /etc

O Bash é conciso. Às vezes, é incrível (e um motivo para orgulho entre o fãs do Bash) o quanto você pode realizar com um único comando.

Obter ajuda

As opções e os argumentos que podem ou devem ser usados varia de comando para comando. Felizmente, a documentação do Bash é incorporada ao sistema operacional. Nunca é necessário mais de um comando para obter ajuda. Para saber mais sobre as opções de um comando, use o comando man (de "manual"). Por exemplo, para ver todas as opções para o comando mkdir (de "make directory", ou "criar diretório", em inglês), faça o seguinte:

man mkdir

O man será seu melhor amigo à medida que você aprende o Bash. man é como você encontra as informações de que precisa para entender como qualquer comando funciona.

A maioria dos comandos Bash e Linux é compatível com a opção --help. Isso mostra uma descrição da sintaxe e das opções do comando. Para demonstrar, insira mkdir --help. A saída é parecida com esta:

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'

A ajuda obtida dessa maneira normalmente é mais concisa do que a ajuda obtida com man.

Use curingas

Curingas são símbolos que representam um ou mais caracteres em comandos Bash. O curinga usado com mais frequência é o asterisco. Ele representa zero caractere ou uma sequência de caracteres. Suponha que o diretório atual contenha centenas de arquivos de imagem, mas você só queira ver os arquivos PNG — aqueles cujos nomes de arquivo terminam com .png. Aqui está o comando para listar somente os arquivos:

ls *.png

Observação

O Linux não tem um conceito formal de uma extensão de nome de arquivo como outros sistemas operacionais. Isso não significa que os arquivos PNG não terão uma extensão .png. Isso quer dizer apenas que o Linux não atribui significado especial ao fato de que os nomes de arquivo terminam com .png.

Agora, digamos que o diretório atual também contenha arquivos JPEG. Alguns terminam em .jpg, enquanto outros terminam em .jpeg. Aqui está uma forma de listar todos os arquivos JPEG:

ls *.jpg *.jpeg

E aqui está outro exemplo:

ls *.jp*g

O curinga * corresponde a zero ou mais caracteres, mas o curinga ? representa um único caractere. Se o diretório atual contiver arquivos chamados 0001.jpg, 0002.jpg e assim por diante até 0009.jpg, o seguinte comando listará todos eles:

ls 000?.jpg

Outra maneira de usar curingas para filtrar a saída é usar colchetes, que denotam grupos de caracteres. O comando a seguir lista todos os arquivos no diretório atual cujos nomes contêm um ponto imediatamente seguido de J ou P minúsculo. Ele lista todos os arquivos .jpg, .jpeg e .png, mas não arquivos .gif:

ls *.[jp]*

No Linux, os nomes de arquivo e os comandos que operam sobre eles diferenciam maiúsculas de minúsculas. Portanto, para listar todos os arquivos no diretório atual cujos nomes contenham pontos seguidos por um J ou P maiúsculo ou minúsculo, você poderia inserir:

ls *.[jpJP]*

As expressões entre colchetes podem representar intervalos de caracteres. Por exemplo, o comando a seguir lista todos os arquivos no diretório atual cujos nomes começam com uma letra minúscula:

ls [a-z]*

Esse comando, por outro lado, lista todos os arquivos no diretório atual cujos nomes começam com uma letra maiúscula:

ls [A-Z]*

E esta lista todos os arquivos no diretório atual cujos nomes começam com uma letra maiúscula ou minú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 você precisar usar um dos caracteres curinga como um caractere comum, torne-o literal ou "escape-o" usando uma barra invertida como sufixo. Portanto, se você, por algum motivo, tivesse um asterisco como parte de um nome de arquivo (algo que você nunca deve fazer intencionalmente), poderia pesquisá-lo usando um comando como:

$ ls *\**