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 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 *\**