Noções básicas do Bash
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 chamadas sinalizadores, fornecem instruções mais específicas a um comando. 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 introduzir ls -a -l /etc
para apresentar todos os ficheiros e diretórios no diretório /etc do Linux com um formato longo, pode introduzir o seguinte:
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. Isto não significa que os ficheiros PNG não tenham 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 ficheiros com os nomes 0001.jpg, 0002.jpg e assim sucessivamente até 0009.jpg, o seguinte comando apresenta-os todos:
ls 000?.jpg
Outra forma de utilizar carateres universais para filtrar a saída é utilizar parênteses retos, que indicam grupos de carateres. O seguinte comando apresenta todos os ficheiros no diretório atual cujos nomes contêm um ponto final imediatamente seguido de um J ou P minúsculo. O comando apresenta todos os ficheiros .jpg, .jpeg e .png, mas não os ficheiros .gif:
ls *.[jp]*
No Linux, os nomes de ficheiro e os comandos que os operam são sensíveis às maiúsculas e minúsculas. Assim, para apresentar todos os ficheiros no diretório atual cujos nomes contêm pontos finais seguidos de um J ou P maiúsculo ou minúsculo, poderá introduzir 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]*
Por outro lado, o seguinte comando apresenta todos os ficheiros 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 *\**