Linux

Linux é o nome do kernel usados em vários sistemas operacionais de servidores, por exemplo, Ubuntu, Debian, Centos, etc. O sistema operacional nesse caso é composto do Linux mais os programas necessários para o servidor funcionar.

Bash

Bash é o nome do programa interativo que o usuário usa para passar comandos para o sistema operacional. Para acessar o bash é preciso abrir um emulador de terminal.

Terminal

Com o terminal aberto o usuário está pronto para entrar comandos.

user@computer:~$

Em geral, em um terminal do Ubuntu por exemplo, será mostrado o nome do usuário, antes do @ seguido do nome do computador, seguido por : e o nome do diretório atual.

O símbolo ~ indica a pasta home do usuário. Quando se abre o terminal o diretório atual é a pasta home.

O símbolo $ indica um usuário diferente do root, este é indicado pelo símbolo #.

Comando

Um comando é uma instrução ao sistema operacional. Para executar um comando no terminal, depois que este está aberto, basta digitar o nome do programa e os argumentos necessários e por fim a tecla Enter. Por exemplo

user@computer:~$ ls

executará o comando ls, que lista os arquivos na pasta ou diretório corrente.

Comandos podem ter opções específicas, iniciando com o caractere -. Por exemplo, para o comando ls, a opção -a mostra todos os arquivos, incluindo os ocultos.

user@computer:~$ ls -a

Comandos podem receber, além de opções, argumentos, separados por espaço em branco. Por exemplo, para listar outro diretório com o ls, podemos usar:

user@computer:~$ ls -a /tmp

Há comandos que ficam em loop e não terminam por conta própria. Para isso o usuário tem que matá-los apertando Ctrl-c.

Cada comando pode ter uma entrada, uma saída normal e uma saída de erro. Podemos conectar a saída de um comando como a entrada de outro com o caractere |, cujo nome é pipe. Por exemplo, para contar o número de arquivos e subdiretórios dentro de um diretório podemos conectar a saída do comando ls com a entrada do comando wc -l.

user@computer:~$ ls | wc -l
3136

Árvore de diretórios

No Linux o diretório raiz é indicado por /. É como se todos os arquivos e diretórios estivessem dentro desse diretório raiz. Cada subdiretório é separado por outra /. O diretório home do usuário é indicado por ~, que é expandido para /home/user se o nome do usuário é user.

Ao iniciar o terminal o diretório corrente é o home do usuário. Para mudar o diretório corrente é preciso usar o comando cd. Por exemplo:

user@computer:~$ cd /tmp
user@computer:/tmp$

Nesse exemplo, mudei o diretório corrente para o diretório /tmp. O terminal mostrou isso, mudando a linha de prompt.

O diretório corrente é indicado pelo caractere . (ponto final). Por exemplo, para mudar o diretório corrente para um diretório dentro do diretório atual com o nome foo, podemos fazer:

user@computer:~$ cd ./foo
user@computer:~/foo$

Não é obrigatório escrever o . antes de um subdiretório. Usando cd foo daria no mesmo.

Comandos básicos

ls é usado para listar arquivos e diretórios.

touch é usado para criar um arquivo. Exemplo:

user@computer:~$ touch a.txt

Criará o arquivo a.txt dentro do diretório home do usuário.

cat é usado para mostrar no terminal o conteúdo de um ou mais arquivos. Por exemplo, para mostrar o conteúdo do arquivo a.txt basta fazer:

user@computer:~$ cat a.txt

Para mostrar só parte do arquivo podemos usar o tail ou o head. O exemplo abaixo mostra as 10 primeiras linhas do arquivo a.txt:

user@computer:~$ head a.txt

Para mostrar um número diferente de linhas podemos usar a opção -n: O exemplo abaixo mostra as 20 primeiras linhas:

user@computer:~$ head -n 20 a.txt

O exemplo a seguir mostra as últimas 10 linhas do arquivo:

user@computer:~$ tail a.txt

O tail também aceita o parâmetro -n para especificar o número de linhas a serem mostradas.

cp é usado para copiar arquivos ou diretórios. Exemplos:

Para copiar um arquivo para outro diretório

user@computer:~$ cp a.txt /tmp/

Para copiar um arquivo com outro nome

user@computer:~$ cp a.txt b.txt

Para copiar um diretório e todos os seus arquivos usamos a opção -R, que significa recursivo. Por exemplo, para copiar o diretório /foo para /bar podemos fazer:

user@computer:~$ cp -R /foo /bar

O mv é usado para mover. Ao contrário do cp o arquivo original é apagado. Por exemplo, para renomear o arquivo a.txt para b.txt podemos fazer:

user@computer:~$ mv a.txt b.txt

rm é usado para remover arquivos ou diretórios. CUIDADO !!! No terminal não existe lixeira, depois que é removido o arquivo não é recuperável. Para remover arquivos podemos fazer:

user@computer:~$ rm a.txt

Para remover um diretório inteiro e seus arquivos junto podemos usar a opção -r junto com f para não precisar confirmar a remoção de cada arquivo:

user@computer:~$ rm -rf ./foo

ping é usado para enviar um pacote de dados para outro servidor na rede. Se esse servidor responder dá pra dizer que ele está online. Ele aceita como argumento tanto endereços IP ou nomes. Esse comando fica executando até o usuário terminá-lo apertando Ctrl-C.

O ping tem muitas opções. Uma delas é passar o número de pacotes para enviar, com a opção -c. Nesse caso o comando termina sozinho.

user@computer:~$ ping google.com
user@computer:~$ ping 10.0.0.1
user@computer:~$ ping -c 1 10.0.1.1

nohup é usado para deixar um comando executando mesmo ao fechar o terminal. Também deve-se usar o caractere & no fim da linha. Por exemplo:

user@computer:~$ nohup ping google.com &

Iniciará o comando ping e o jogará em segundo plano. Enquanto o comando estiver rodando é possível executar outros comandos ao mesmo tempo. Para matar o comando é preciso executar fg, que trás o comando que estiver em segundo plano para frente, e apertar Ctrl-C, para efetivamente terminar o comando de forma abrupta.

Básico de Scripts Bash

Uma variável guarda um valor, que pode ser texto, número, etc. Para criar uma variável no bash usamos =. Por exemplo, para criar a variável x com o valor 1 usamos:

user@computer:~$ x=1

Importante: não pode haver espaços entre =. Para mostrar o valor de uma variável podemos usar echo e o caractere $ junto ao nome da variável.

user@computer:~$ echo $x
1

Listas no bash são itens separados por espaço em branco (o que inclui quebra de linha). Por exemplo, para criar uma lista e mostrar cada item em uma nova linha podemos fazer:

user@computer:~$ x="a b c"
user@computer:~$ for i in $x; do
> echo $i
> done
a
b
c

Perceba que é preciso usar aspas duplas nesse caso e que o terminal insere o caractere > quando se aperta Enter.

Quando se precisa escrever um script mais elaborado é indicado usar um arquivo. Arquivos de script geralmente devem ter a terminação .sh. Por exemplo, um arquivo a.sh com o conteúdo abaixo:

#!/bin/bash
for i in 1 2 3 4 5; do
  echo "counter: $i"
done

A primeira linha chama-se shebang e é o que torna o arquivo um script. for indica que é um loop. Para executar esse script deve-se atribuir permissão de execução com o comando chmod primeiro:

user@computer:/~$ chmod +x a.sh
user@computer:/~$ ./a.sh
counter: 1
counter: 2
counter: 3
counter: 4
counter: 5

Como o script não está no $PATH é preciso usar ./ antes do nome. A variável $PATH é uma lista de diretórios. Se um programa ou script estiver em um desses diretórios não é necessário usar o caminho completo para executar o programa. Para ver o conteúdo dessa lista pode-se usar ech o $PATH.