Os principais comandos do terminal do Linux

Abrir o Terminal

Para abrir o terminal basta escrever "terminal" na busca do sistema ou pressionar a combinação de teclas Ctrl + Alt + T no teclado.

Imagem mostra como abrir o terminal no Linux.

Pwd

Quando abrimos o terminal, estamos em alguma "pasta". Aliás, pasta no mundo Linux é chamada de diretório. Descobrimos em qual estamos, através do comando pwd.

Imagem mostra comando pwd no terminal do Linux.

Estamos no diretório home, que é a base do nosso usuário.

Listar Arquivos e Diretórios

O comando ls nos retorna o conteúdo do diretório atual. O terminal do Ubuntu separa o tipo do conteúdo (arquivo ou diretório) pela cor.

Imagem mostra comando ls no terminal do Linux.

Realmente é o que consta em nossa home.

Imagem mostra home do Linux.

Listagem com Parâmetros

Caso queiramos listar arquivos com detalhes ou vê-los por outro ângulo, podemos passar alguns parâmetros junto dos comandos.

Listar com Detalhes

Posso listar arquivos com maiores detalhes passando o parâmetro -l junto com o comando ls.

ls -l

Perceba que na listagem mais detalhada, os arquivos que são diretórios começam com a letra d. Essa informação é bem útil para terminais que não diferenciam por cores.

Há ainda informações de usuário, grupo de usuário, permissões, data de modificação e tamanho do arquivo.

Imagem mostra comando ls -l no terminal do Linux.

Listar Tudo

Será que os arquivos mostrados de forma detalhada acima são os únicos dentro da pasta home?

À primeira vista parece que sim, já que os listamos no terminal, entramos na pasta pela interface gráfica e vimos que de fato estavam lá.

E se eu te dissesse que têm mais arquivos dentro do diretório home? Acredite se quiser, mas tem.

Veja só...

Imagem mostra comando ls -la no terminal do Linux.

O Linux deixa invisíveis arquivos de cache e configurações mas...

O parâmetro -la vem de list all e como o próprio nome sugere, lista tudo o que se encontra no diretório.

Os arquivos e diretórios invisíveis começam com um ponto.

Você ainda pode listar tudo de uma forma mais sintética escrevendo...

ls -a

E o resultado será...

Imagem mostra comando ls -a no terminal do Linux.

Imprimir Saídas

O echo imprime saídas. Seja no próprio terminal ou gravando em um arquivo de texto.

O Comando abaixo imprime no terminal.

echo Bem Vindo
Imagem mostra comando echo no terminal do Linux.

Mas eu gostaria de gravar a saída de texto em um arquivo txt. Então redireciono o texto para um arquivo com o sinal de saída de dados >.

Imagem mostra comando echo sendo gravado em arquivo no terminal do Linux.

Repare que, após o Enter, o terminal não imprimiu nada. Isso porque a saída foi gravada no arquivo de texto.

Vamos ver?

Imagem mostra arquivo criado pelo terminal do Linux.

Ao abrir o arquivo em um editor de texto, visualizamos a mensagem.

Imagem mostra arquivo de texto aberto em editor do Linux.

Quando queremos adicionar mais linhas de texto ao mesmo arquivo txt, fazemos assim:

echo Aproveite o conteúdo >> bem-vindo.txt

Veja.

Imagem mostra arquivo txt aberto em editor de texto do Linux.

Ler Arquivos de Texto pelo Terminal

Podemos ler arquivos no próprio terminal. O comando cat recebe o nome do arquivo como argumento e imprime seu conteúdo.

Experimente digitar cat bem e pressione a tecla Tab do teclado. Ele deve ter completado o nome do arquivo para você. Isso nos dá um adianto bacana no dia a dia.

Imagem mostra comando para ler arquivos no terminal do Linux.

Outra coisa importante e que facilita nossa vida é a navegação pelo terminal. As teclas de direção nos permitem acessar comandos anteriores.

Essa funcionalidade ajuda muito quando queremos re-executar algum comando anterior, ou até, aproveitá-los como parte da construção de novos.

Limpar o Terminal

Veja que o terminal vai ficando poluído com o tempo.

Imagem mostra terminal do Linux antes do Clear.

Para limpar, utilizamos o comando clear. O atalho Ctrl + L tem a mesma função.

Imagem mostra terminal do Linux depois do Clear.

Criando Diretórios

O comando que cria diretórios é o mkdir Make Directory:

Vamos criar um diretório chamado Desenvolvimento com dois projetos fictícios: um chamado Python e outro Javascript.

mkdir Desenvolvimento

cd Desenvolvimento para entrar no diretório recém-criado.

E criamos os outros dois...

					mkdir Projeto_Python
					mkdir Projeto_Javascript
				

Para navegar entre diretórios, usamos o cd que vem do inglês Change Directory.

Estamos agora no diretório Desenvolvimento e queremos entrar em Projeto_Python.

Para isso, digitamos:

cd Projeto_Python

Se você digitou cd Pr, por exemplo, e pressionou Tab para completar o nome do diretório, deve ter observado que o auto-preenchimento foi feito dessa forma: cd Projeto_.

Isso acontece, porque existe mais de um diretório chamado projeto. E o sistema precisa de mais informações para saber sobre qual deles estamos falando.

Como queremos entrar em Projeto_Python, damos mais uma dica ao sistema digitando P e apertamos Tab novamente. Com isso, ele completa o nome.

Imagem mostra comando para trocar de diretório no terminal do Linux

Aproveitando que estamos em Projeto_Python, vamos criar um arquivo de descrição para ele, que será usado depois. Portanto:

echo Este projeto tem por finalidade... > Description.txt

Vamos voltar para a pasta Desenvolvimento. Isso pode ser feito pelo cd, espaço, duas vezes o caractere ponto, que retorna um nível na hierarquia de diretórios.

cd ..

Em seguida, entramos em Projeto_Javascript, digitando:

cd Projeto_Javascript

Se quisermos voltar diretamente para o diretório base, ou seja, a home (independentemente do diretório em que estamos) aplicamos cd apenas.

cd
Imagem mostra comando no terminal do Linux para retornar à home do usuário.

O diretório base não é a raiz de tudo. Para acessar a raiz do HD digitamos cd /. O / possui diversos outros diretórios úteis para o funcionamento do Linux. O diretório home por exemplo, é onde estão os diretórios de cada um dos usuários que utilizam a máquina.

Remover Diretórios

Agora que vimos o comando para criar diretórios, o que remove passa a ser até intuitivo. Acertou se você pensou em rmdir pois vem do inglês Remove Directory.

O comando que remove arquivos é somente rm.

Estamos na home e queremos ir diretamente para Projeto_Python. Podemos passar o caminho da pasta precedido pelo cd.

cd Desenvolvimento/Projeto_Python

Em seguida, remover o arquivo Description.txt;

rm Description.txt

Vamos então também remover o diretório.

rmdir Projeto_Python

Por que ficar removendo um a um? Não é melhor remover logo a pasta Desenvolvimento inteira?

Vamos voltar um nível na hierarquia cd .. e executar o comando de remoção então.

rmdir Desenvolvimento
Imagem mostra comando no terminal do Linux para remover diretório com arquivos.

Oopa, não funcionou. O rmdir só remove diretórios vazios. Para nuâncias nas remoções, novamente precisamos utilizar parâmetros.

No caso aqui, usamos o parâmetro -r que significa recursivamente, ou seja, excluir a pasta com todos os arquivos e diretórios que estiverem dentro dela.

rm -r Desenvolvimento

Agora sim, excluímos o diretório Desenvolvimento inteiro.

Manual do Comando

Muitos comandos possuem várias opções que alteram seu comportamento. Para saber as possíveis opções de um comando e o que cada uma faz, você pode verificar o manual do comando. Isso é feito digitando man seguido pelo nome do comando que você deseja estudar.

Exemplo:

man cat
Imagem mostra Manual do Comando cat no terminal do Linux.

Usa-se as teclas de direção para navegar e, como o próprio manual sugestiona, h para ajuda e q (quit) para sair.

Caracteres Curinga

Um dos mais utilizados é o caractere asterisco *. Vamos entender com um exemplo?

Digamos que eu tenha um diretório Projetos com várias versões do mesmo, da forma como está representado na imagem abaixo.

Listando conteúdo de diretórios no Linux.

Digamos então que eu queira listar tudo o que começa com a palavra versão. A sintaxe é a seguinte: ls versao*. Veja que não é mostrado o arquivo primeira-versao.txt. Mas ele tem "versão" em algum lugar do nome. O detalhe é que não começa com essa palavra.

Curinga asterisco ignora tudo o que sucede.

Se eu quiser, por exemplo, listar todos os arquivos que terminam com ponto txt faço ls *.txt. No nosso exemplo, agora o arquivo zip não é mostrado.

Curinga asterisco ignora tudo o que antecede.

Caso queiramos listar todos os arquivos que contenham em algum lugar de seu nome a palavra "versao", ignorando-se os caracteres que a sucedem ou antecedem, digitamos ls *versao*. Note que agora, é o arquivo projeto-raiz.txt que não é exibido.

Curinga asterisco ignora tudo o que antecede ou sucede.

Há ainda outros caracteres curinga, como o interrogação ? que corresponde a um único caractere em uma posição específica. No nosso exemplo, se executarmos o comando ls versao-d?-cliente.txt vamos obter o seguinte resultado:

Curinga interrogação que corresponde a um único caractere em uma posição específica.

Compactar e Descompactar Arquivos

Existem duas formas bastante utilizadas: uma mais conhecida no mundo Windows que é o formato zip, e o formato tar gz mais familiar aos usuários Linux. Vamos mostrar as duas, começando pelo formato zip.

Formato zip

A fim de exemplo, vamos compactar o nosso diretório Projetos. Fazemos isso primeiramente escrevendo zip. Na sequência, informamos o nome do nosso arquivo zip a ser criado e depois, o arquivo a ser zipado. Vamos compactar o nosso diretório Projetos em um arquivo zip chamado Backup.zip. A sintaxe é a seguinte:

zip Backup.zip Projetos

Agora vamos dar uma espiada no que temos dentro desse arquivo zipado. O comando seria o mesmo utilizado para descompactar, que é unzip. A diferença é que passamos também o parâmetro -l.

unzip -l Backup.zip
Comando que compacta e lista arquivo compactado.

Perceba que o diretório está vazio, isso porque, não informamos o -r para que a compactação fosse feita de forma recursiva.

Então vamos apertar "seta para cima" em nosso teclado quantas vezes for necessário até acessar novamente o comando anterior de compactação e adicionar essa flag.

zip -r Backup.zip Projetos

Sintetizando Saídas – Reduzindo Informações de Log

Ao descompactar nosso arquivo zip no diretório onde os arquivos descompactados já existem, somos perguntados se queremos sobrescrevê-los. Escolhendo a opção all, para sobrescrever tudo por exemplo, é impresso detalhes de cada ação realizada.

Mas há momentos em que queremos otimizar um pouco as saídas, como pode ser o caso em um arquivo de log por exemplo. Nesses casos, podemos utilizar o parâmetro -q (quiet) que reduz um pouco o nível de detalhamento das informações.

Na imagem abaixo, descompactei o arquivo primeiramente sem e depois com o quiet. Ele pode ser combinado com outros parâmetros também. Por exemplo: ao compactar, quando você usa -r, você pode ao mesmo tempo usar -q e ficaria -r -q ou, de forma mais sintética, -rq.

Comando para descompactar arquivo zip.

Falei nesse ponto sobre o quiet, mas ele pode ser empregado em diversos outros comandos. É uma boa sempre dar uma conferida no man quando você estiver em dúvida se determinado comando aceita esse parâmetro.

Formato Tar Gz

No mundo Linux, a maneira mais convencional de compactar arquivos é utilizando uma combinação do tar com o zip. Resultando em um arquivo .tar.gz.

O tar sozinho serve para empacotar vários arquivos e diretórios em um único arquivo, facilitando assim a transferência. Já o zip, como vimos acima, compacta. A vantagem é que a combinação dos dois produz um arquivo mais compacto – pequeno.

Então vamos novamente compactar o nosso diretório Projetos utilizando o formato .tar.gz e depois comparar o tamanho dos arquivos.

Iniciamos o comando digitando tar. Informamos na sequência o modificador -c (create) que irá criar o arquivo tar. Depois de criado, ele deve ser zipado, então: z.

Após os dois parâmetros citados acima, vamos informar o diretório a ser compactado, que no caso é o Projetos. O tar, diferente do zip, por padrão já é recursivo. Então não precisamos informar o -r.

Para finalizar, faltou informar o nome do arquivo .tar.gz que pretendemos criar. Dizemos que gostaríamos de redirecionar a saída, então utilizamos o "maior que" >, para um arquivo chamado Backup.tar.gz que é o formato que ele cria.

tar -cz Projetos > Backup.tar.gz
Compactação com tar gz no Linux.

Repare que no nosso exemplo, o arquivo .tar.gz ficou bem menor.

Não sei se você notou, mas o tar já é quieto por padrão. Se eu quiser informações mais detalhadas sobre o que ele está fazendo, preciso informar isso incluindo -v nos parâmetros. Isso se chama aumentar o nível de verbose.

Excluí o meu diretório Projetos e agora vou descompactar o Backup.tar.gz.

tar -xz Projetos < Backup.tar.gz

Perceba que houveram apenas duas alterações em relação ao comando de compactação. A presença do -x (extract) para extrair os arquivos, e a direção do redirecionamento < que agora em vez de indicar saída de dados, indica entrada de dados.

A forma mais comumente utilizada e alternativa aos redirecionamentos é a com o modificador -f. Com esse modificador, a sintaxe para compactação e extração ficará assim:

tar -czf Backup.tar.gz Projetos
tar -xzf Backup.tar.gz

O parâmetro z na verdade é ignorado na extração. No man fala que só funciona no creation mode.

Logo, poderíamos fazer: tar -xf Backup.tar.gz

Agora a opção aumentando o nível de verbose.

tar -vczf Backup.tar.gz Projetos
tar -vxf Backup.tar.gz

Copiar Arquivos

Recriamos nosso diretório Desenvolvimento da forma como estava antes, para não trabalharmos diretamente na raiz do usuário.

Agora quero fazer uma cópia da descrição do Projeto Python. Para isso, uso o comando cp sucedido do nome do arquivo que desejo copiar e o nome que será atribuído à cópia.

cp Description.txt Description-2.txt

O texto agora está nos dois arquivos.

Imagem mostra as duas cópias da descrição no terminal do Linux.

Copiar Diretórios

Da mesma forma que usamos recursividade através do parâmetro -r, quando tratamos da remoção de diretórios acima, vamos precisar dela para copiar ou mover diretórios.

A título de exemplo, faremos uma cópia do Projeto Python:

cp -r Projeto_Python Projeto_Python_v1

Mover Arquivos

Vamos agora mover a descrição para dentro de um diretório chamado Documentação no Projeto Python.

Estando dentro de Projeto_Python, criamos a pasta;

mkdir Documentacao

Listamos para ver se está lá;

ls
Listando conteúdo de diretório no terminal do Linux.

E movemos com o comando mv. Podemos mover com o mesmo nome, através da seguinte sintaxe:

mv Description.txt Documentacao/

Ou mover renomeando:

mv Description.txt Documentacao/Description-3.txt

Renomear Arquivos

Renomear arquivos na linha de comando (em termos práticos) é mover renomeando, mas dentro do mesmo diretório.

Já que estamos no diretório Projeto_Python, e temos aquele arquivo Description-2.txt vamos renomeá-lo para ser o escopo do projeto.

mv Description-2.txt Escopo.txt
Renomear arquivos no terminal do Linux.

Mover Diretórios

A lógica é a mesma de mover arquivos. Veja um exemplo: temos o nosso diretório Projeto_Python_v1 que criamos anteriormente e vamos movê-lo para dentro de Projeto_Python.

Mover diretório no terminal do Linux.

Quais programas ou processos estão em execução?

Para saber quais programas ou processos estão sendo executados em nossa máquina linux, podemos utilizar o comando ps. Porém o comando puro, exibe somente os programas ou processos que estão executando em meu terminal atual, ou seja, os processos que foram iniciados a partir do terminal em que estamos.

comando ps para listar os processos em um terminal do linux.

Perceba que só dois processos foram listados: o bash que é o processo do terminal, e o processo do comando ps, que acabamos de executar.

Para obter a lista com todos os processos do sistema, passamos o parâmetro -e para o comando ps.

Execução em terminal linux do comando ps -e que lista todos os processos do sistema.

E para obter mais informações, além das que o comando ps nos mostra por padrão, utilizamos o parâmetro -f. Podemos então combinar os dois parâmetros com o comando ps para obtermos informações mais detalhadas sobre todo o sistema.

ps -ef
Execução em terminal linux do comando ps -ef, que lista todos os processos do sistema.

Como identificar, localizar e manipular os processos?

Identifica-se os processos para poder manipulá-los através daqueles números na coluna da esquerda que são a ID de cada processo. Esses identificadores recebem o nome de PID que significa Process IDentification.

Pausar e Continuar um Processo

Utilizamos o comando kill para enviar um sinal para um processo. Os processos utilizam sinais para se comunicar entre si. Sinais também são utilizados pelo Linux para interferir no funcionamento dos processos.

Exemplos de sinais são o STOP e o CONT, que podem ser utilizados, respectivamente, para interromper e retomar a execução dos processos.

Para utilizar o comando kill, passamos o sinal que desejamos enviar ao processo seguido do identificador único do processo, o pid. Por exemplo, parar e continuar o processo 2142 em nosso sistema.

Pausar e continuar um processo no terminal do linux.

Encerrar Processos

Vimos que podemos utilizar o comando kill para enviar sinais aos nossos processos. O sinal que finaliza um processo é o TERM. Porém, quando não indicamos nenhum sinal para o comando kill, é o sinal TERM que é executado por padrão.

O kill puro ou com o TERM finaliza um processo de forma que ele possa realizar ainda algumas tarefas antes de ser encerrado. Agora, se o seu programa travou de vez e você não quer dar nenhuma chance para ele, execute o comando kill -9. Esse último comando não tenta fechar o programa numa boa, ele ataca direto o processo, sem dar chance de recuperação. Só para constar, um processo é basicamente um programa em execução.

Finalizar um a um os processos pode ser demorado. Digamos que você tenha vários processos do firefox rodando e queira matar todos eles. Para isso, você pode executar o killall com ou sem -9 e, na sequência, o nome do processo. O comando completo ficaria assim: Killall firefox. Com isso, todos os processos do Firefox serão finalizados.

Pesquisando por Processos

Numa lista grande, as vezes é complicado encontrar o processo que se está procurando. Então podemos utilizar uma ferramenta de pesquisa para isso.

Vimos acima que quando queremos redirecionar a saída do terminal para um arquivo de texto, utilizamos o caractere maior que >. Agora, quando queremos redirecionar a saída para outro programa, utilizamos o caractere barra vertical |.

Esse programa que filtra as linhas aqui no terminal é o grep. Eu tenho o Firefox rodando em minha máquina e quero encontrar os processos em que está executando esse navegador. Digito então o seguinte comando: ps -ef | grep firefox. Dessa forma eu vou pegar a saída do ps -ef, passar pelo programa grep com o parâmetro firefox.

Quanto recurso cada processo está consumindo?

Outro comando bastante útil é o top, que também serve para listar os processos no Linux. A diferença entre o top e o ps é que o top atualiza as informações de tempos em tempos.

No seu cabeçalho, o top mostra algumas informações sobre o sistema, como a quantidade de memória disponível e em uso, informações sobre o uso do processador, etc.

Na lista dos processos também temos informações sobre a utilização do processador e da memória. Os processos são ordenados, por padrão, pelo uso do processador.

Comando top no terminal do Linux para mostrar os recursos consumidos por cada processo.

Ver Informações Somente de um Determinado Usuário

O top possui algumas opções que podemos utilizar para alterar a forma padrão de como as informações são mostradas.

Para mostrar apenas os processos de um determinado usuário, podemos utilizar a opção -u:

top -u gabriela

Ver Informações de um Processo Específico

Para acompanhar informações de um processo específico, podemos utilizar a opção -p passando como argumento o PID do processo:

Primeiro localizamos o processo do nosso interesse;

Pesquisa por processos do firefox com grep.

Depois passamos ele como parâmetro do -p.

Filtragem no top por processos.

Por padrão, o top atualiza a tela com novas informações sobre os processos a cada 3 segundos. Para alterar esse tempo, basta pressionar d enquanto o top estiver rodando, inserir o valor desejado e pressionar a tecla Enter:

Alterar frequência com que informações do top são atualizadas.

O top possui muitas opções. Lembre-se de que você pode obter informações sobre um comando consultando a sua documentação.

man top

Inicializar Programas pelo Terminal

Para executar um programa pelo terminal basta digitar seu nome. Por exemplo: firefox.

Logo que o firefox inicia, o terminal trava e eu não posso mais utilizá-lo. Isso acontece porque essa instância do terminal está dedicada à execução do firefox e essa execução está ocorrendo no foreground, ou seja, primeiro plano. Para liberar o terminal eu preciso jogar essa execução para o background, segundo plano.

Para não precisar jogar o programa para o segundo plano, posso simplesmente abrir uma nova aba do terminal e utilizar essa nova aba normalmente.

Migrar Execução de Programa para o Segundo Plano

Migramos a execução de um programa para o segundo plano primeiramente parando temporariamente a execução de seus processos. Isso pode ser feito pressionando Ctrl + Z no teclado.

Para visualizar os processos que estão parados, utilizamos o comando jobs:

Pausar processos e exibir trabalhos no terminal do Linux.

Para jogar o Firefox no background, ou seja, para ser executado em segundo plano, usamos o comando bg seguido de seu número de identificação. No caso aqui em questão, executamos bg 1 ou só bg se houver apenas um programa na lista de processos pausados. Este comando apresentará uma saída semelhante à listada abaixo.

[1]+ firefox &

E assim nosso terminal fica destravado, mesmo executando o Firefox. A presença do & comercial da saída acima, significa que o programa está rodando no background. Se executarmos novamente o comando jobs, veremos algo como:

[1]+ Executando        firefox &

Indicando que o Firefox está realmente executando em background.

Trazer Execução Devolta para o Primeiro Plano

Para trazermos o programa para o foreground fazemos fg 1. Assim, teremos nosso terminal travado novamente.

Também podemos encerrar a execução do programa. Para isso, basta pressionar Ctrl + C.

Iniciar os Programas já no Segundo Plano

É um pouco trabalhoso ficar toda vez tendo que mudar o programa para o background. Temos que abri-lo, fazê-lo parar e dar o comando necessário. Podemos abrir o programa já em segundo plano digitando o nome do programa seguido de um & comercial.

firefox &

Dessa forma, já abrimos o programa em background e temos o terminal livre para continuarmos com os demais comandos necessários para nossas atividades.

Executar Scripts via Terminal

Vimos acima como compactar arquivos. Então vamos criar um pequeno script que vai fazer um Backup do nosso diretório Desenvolvimento em um arquivo chamado Backup-projetos.tar.gz para que possamos exemplificar a execução de scripts aqui no terminal.

Para isso, vou abrir o gedit pelo terminal em segundo plano já criando o arquivo script-backup com o seguinte comando:

gedit script-backup &
Abrir gedit criando arquivo no terminal do Linux.

A primeira instrução que vou colocar nesse script, é ir para a home do meu usuário. Pois daqui a pouco vamos ver como executar um script a partir de qualquer lugar do sistema.

Estando na home do meu usuário, vou colocar a instrução para exibir uma mensagem de que estou iniciando o Backup. Logo após, colocar a instrução que compacta o diretório Desenvolvimento. E por final, novamente exibir uma mensagem, dessa vez avisando que finalizei o processo.

Script criado no gedit.

Vou salvar, Ctrl + S e agora é só executar.

Os scripts são executados via terminal colocando-se antes do nome do script o comando sh. Ficando da seguinte forma: sh nome-do-script.

Executar script com sh.

Veja que antes da execução, tínhamos na home do usuário airton o nosso script-backup e o diretório Desenvolvimento. Após a execução passamos a ter também o Backup-projetos.tar.gz. Provando que o script foi executado.

Se eu não quiser utilizar o prefixo sh para executar o script, preciso conferir a ele permissão de execução.

Permissões

Os arquivos no Linux podem ter permissões para leitura r, escrita w e execução x. Essas permissões podem ser concedidas ao dono do arquivo, ao grupo de usuários, e também, para outros usuários. Para os diretórios d valem as mesmas regras. Com o comando ls -l, podemos verificar a listagem de arquivos com todas as informações de permissões discutidas. A imagem abaixo ilustra bem as permissões e suas distribuições.

Permissões de arquivos e diretórios no Linux.

O primeiro caractere diferencia entre arquivo ou diretório. Quando se trata de um arquivo, é exibido um traço -. Já o diretório é representado por um d minúsculo. Os três próximos caracteres indicam as permissões do usuário dono desses arquivos. Na sequência, os próximos três caracteres informam as permissões para o grupo de usuários ao qual o dono pertence. Os três últimos, representam as permissões atribuídas aos demais usuários do sistema. Depois das informações de permissão, temos o nome do usuário dono do arquivo e o grupo ao qual o usuário pertence.

Gerenciar Permissões de Scripts

O nosso script de backup não tem permissão de execução para nenhum usuário. O comando que altera as permissões é o chmod. No caso aqui, queremos atribuir permissão de execução, então fazemos:

chmod +x script-backup

Da mesma forma que adicionamos permissão de execução com +x podemos retirá-la com -x, adicionar ou retirar mais de uma permissão ao mesmo tempo +xr, -xr, etc.

Para alterar somente as permissões do usuário, uso o modificador u user. Alterar somente as do grupo, o modificador g group e de qualquer outro usuário o others. Abaixo, na seção Usuários, tem um exemplo desse uso.

No nosso caso, adicionamos a permissão de execução desse script a todos os usuários.

Permissão de execução adicionada ao arquivo script-backup.

Agora já posso executar o script sem o auxílio do sh mas ainda preciso passar sua localização. O motivo é que o sistema ainda não sabe onde o arquivo a ser executado se encontra.

O script está no diretório atual que é representado por um ponto. Então passo a instrução ao sistema para que, a partir do diretório atual . acesse o script-backup.

./script-backup
Executar script passando sua localização para o terminal do Linux.

Mas antes quando executávamos o Firefox por exemplo, não era preciso nada disso. Apenas escrever firefox.

Existe o comando which que ao ser executado nos devolve o caminho do arquivo que de fato vai ser acionado quando executarmos um programa específico.

Se executarmos which firefox por exemplo, vamos ter como resposta /usr/bin/firefox, da mesma forma se executamos gedit, e assim por diante.

Comando which executado no terminal do Linux.

Podemos então pensar em colocar nosso script dentro desse diretório. Afinal, lá o sistema está olhando. Mas o diretório /usr/bin tem a finalidade de hospedar os executáveis que devem estar disponíveis para todos os usuários. No nosso caso, gostaríamos de ter o script disponível somente para o usuário atual, então vamos adicionar o caminho do nosso script em uma variável de ambiente do Linux chamada PATH.

Variáveis de Ambiente

O sistema operacional possui variáveis de ambiente, que como o próprio nome diz, são de ambiente, estão visíveis para todo o sistema.

Visualiza-se todas elas com o comando env.

Visualizar todas as variáveis de ambiente no Linux.

Variável Path

Dentre elas há uma onde o sistema procura por executáveis, que é chamada de PATH. Vou filtrá-la com o auxílio do grep.

Localizar variável path no Linux.

Note que ela já possui diversos caminhos, todos eles separados por dois pontos. Para o nosso script ser localizado, devemos informar também o caminho dele para essa variável.

Adicionar Caminho Temporariamente ao Path

Vamos adicionar primeiro temporariamente o caminho onde se encontra o nosso script ao PATH. Faço isso dizendo que o PATH vai ser igual a todo o PATH que já existe e no final, separado por dois pontos, o caminho que queremos adicionar.

PATH=$PATH:/home/airton

Visualizando novamente a variável, o caminho foi adicionado. E chamando o script pelo nome, de qualquer lugar do sistema, ele é executado.

Adicionar caminho temporariamente à variável PATH.

Adicionar Caminho Permanentemente ao Path

Como a alteração que fizemos acima só vale enquanto aquela sessão estiver ativa, caso queiramos as alterações permanentemente, precisamos adicioná-las em um arquivo que configura o terminal toda vez que ele é iniciado. Esse arquivo se chama .bashrc aqui no Ubuntu.

Tenha cuidado ao alterar esse documento para não danificar seu sistema operacional. É aconselhável fazer uma cópia desse arquivo antes de alterá-lo.

Vou abri-lo com o gedit gedit .bashrc & e no final do documento, adicionar a mesma instrução que passei acima quando alterei temporariamente o PATH.

Adicionar caminho permanentemente à variável PATH.

Usuários

O Linux é multiusuário. Possui um superusuário chamado root, com permissões para fazer absolutamente tudo no sistema. Inclusive tarefas autodestrutivas que o farão parar de funcionar completamente. Abaixo do root, temos os demais usuários.

Descobrir o Usuário Logado Atualmente

Descobrimos o usuário logado atualmente através do comando whoami.

Comando no terminal do Linux para descobrir o usuário logado atualmente.

Trocar a Senha do Usuário Atual

O comando para isso é passwd. Informamos a senha atual e duas vezes a nova senha.

Trocar senha de usuário atual pelo terminal do Linux.

Adicionar Senha ao Usuário root

Vamos aproveitar e adicionar uma senha ao usuário root pois ele ainda não tem. O comando é sudo passwd. O sudo indica que vou executar o comando com privilégios de administrador. Nesse caso, após a senha do meu usuário airton, ele já pede de imediato a nova senha para o usuário root.

Adicionar senha ao usuário root pelo terminal do Linux.

Criar um Novo Usuário

O comando é adduser. Adicionar um novo usuário é tarefa de administrador, então devo utilizar o sudo. Para criar o usuário vanessa por exemplo, executo sudo adduser vanessa. Após o comando, ele pede a senha do meu usuário, na sequência, inicia o processo de criação da conta e solicita mais alguns dados como a senha para o novo usuário e informações pessoais, por fim, pede para confirmar os dados e a conta está criada.

Adicionar senha ao usuário root pelo terminal do Linux.

Trocar de Usuário

Estou logado com o usuário airton e quero iniciar uma sessão com o usuário recém-criado acima. Para isso, executo su vanessa e informo sua senha. A partir daí, ao executar whoami por exemplo, recebo vanessa. O cd sozinho, conforme vimos acima, nos leva direto para a home do usuário normalmente como qualquer outro.

Trocar de usuário pelo terminal do Linux.

Se eu quiser me logar como root, digito su root ou simplesmente su. Estando logado como root, posso acessar livremente os demais usuários da máquina, sem digitar senha nenhuma.

Superusuário Linux acessando livremente os demais usuários do sistema.

Sair da Sessão de um Usuário

Digitando exit encerro a sessão do airton e volto para a anterior, root. Digitando exit novamente, encerro a sessão do root e volto para a anterior, a da vanessa.

Encerrar sessaõ de usuário pelo terminal do Linux.

Controle de Usuários

Estou logado com o usuário airton. Mesmo assim, consigo acessar os diretórios do usuário vanessa.

Um usuário acessando diretórios do outro pelo terminal do Linux.

Isso acontece porque no Ubuntu o diretório home de todos os usuários é criado com permissão de leitura e execução para todos os usuários do sistema.

Diretório home permitindo leitura por qualquer usuário.

Para resolver isso, vou me logar como vanessa e usar o comando chmod para retirar permissões de leitura e execução para usuários classificados como "outros" o-rx.

Impedir que outros usuários acessam os diretórios do meu usuário.

Agora eu como airton também preciso impedir que os outros usuários do sistema tenham acesso aos meus diretórios. Então preciso repetir esse processo para o meu usuário também.

Fechando e reabrindo o terminal. Ao tentar fazer o acesso, já recebo a informação de que a permissão foi negada.

Instalando Programas com apt

Se tratando de instalação de programas, o Ubuntu nos disponibiliza um sistema de gerenciamento de pacotes chamado apt.

Atualizar os Repositórios

Antes de instalar um programa, posso falar para o Ubuntu o seguinte: atualiza a central de repositórios com os pacotes mais atuais porque estou prestes a instalar um programa. A linguagem para que ele entenda isso é a seguinte:

sudo apt-get update

Para atualizar todo o sistema, todas as versões dos pacotes que já estão instalados, utilizamos o comando sudo apt-get upgrade.

Pesquisar por Programas

Vamos dizer hipoteticamente que estamos precisando instalar o MySQL, que é um sistema de gerenciamento de banco de dados.

Nesse gerenciador de pacotes, que é o apt, pesquisamos por programas utilizando o comando apt-cache search conforme mostrado abaixo.

apt-cache search mysql-server
Pesquisar por programas no gerenciador de pacotes apt.

A opção show do comando apt-cache, mostra informações sobre um determinado pacote. A sintaxe é apt-cache show nome-do-pacote.

Instalar Pacotes

Vou instalar o pacote mysql-server-5.7, que contém a versão padrão com os binários e as configurações de sistema. O comando para instalar programas é o apt-get install mas como é uma tarefa de administrador, preciso utilizar o sudo.

sudo apt-get install mysql-server-5.7
Instalar programa no gerenciador de pacotes apt.

A instalação terminou. Aparentemente está tudo ok. Vamos ver se o MySQL foi instalado mesmo.

Logando no MySQL.

Maravilha!! Digitando mysql -u root -p e informando a senha, que no caso é só pressionar Enter pois não tem senha, acabei de me logar no MySQL.

Desinstalar Pacotes

Por último, agora também vamos aprender a desinstalar pacotes. O comando é apt-get remove, acrescentando-se sudo e o nome do pacote.

Para desinstalar o MySQL por exemplo fazemos: sudo apt-get remove mysql-server-5.7.

E agora ao tentar logar no MySQL, não temos mais sucesso.

Falha ao logar no MySQL.

Instalar Programas em um Nível Abaixo: dpkg

Nem todos os programas estão no repositório do apt. Para esses casos, podemos baixar os pacotes do programa que estamos procurando e instalá-los manualmente através do dpkg.

Para ilustrar, vou instalar o navegador Google Chrome através do dpkg.

Faço o download do pacote .deb na própria google e instalo através da opção -i install.

Download do pacote deb do Google Chrome.

Entrando no diretório Downloads, visualizamos o pacote. Fazemos então a instalação digitando sudo dpkg -i google-chrome-stable_current_amd64.deb.

Instalando o navegador Google Chrome via dpkg.

Pesquisando por 'chrome' no menu iniciar do Linux, já visualizamos o ícone do navegador.

Ver se chrome foi instalado.

Desinstalar Programas com dpkg

O nome do pacote que foi instalado é só até a parte do nome separada por traços -. É esse nome que vamos utilizar para desinstalá-lo.

sudo dpkg -r google-chrome-stable
Desinstalar pacote com dpkg.

Uma vez que o pacote está instalado, também podemos desinstalá-lo com auxílio do apt.

sudo apt-get remove google-chrome-stable

Scripts de Inicialização e Serviços do Sistema

Os serviços que iniciam juntamente com a nossa máquina e podem continuar executando até que a desligamos ou somente rodar em algum momento estão localizados na pasta /etc/init.d/.

ls /etc/init.d/
Scripts que inicializam juntamente com a nossa máquina.

Se eu quiser que um script inicie junto com a máquina, posso jogar ele dentro desse diretório.

Instalei novamente o nosso gerenciador de banco de dados. Repare na imagem acima a presença do script mysql dentro do diretório /etc/init.d/.

Parar Serviços Manualmente

Fazendo ls -l /etc/init.d/mysql percebo que esse script tem permissão de execução para todos os usuários. Ele já está em execução, pois iniciou junto com o sistema. Posso então pará-lo com o comando abaixo.

sudo /etc/init.d/mysql stop
Parar serviço manualmente.

Paramos o serviço da forma mostrada acima porque indicamos seu caminho absoluto. Mas podemos fazê-lo sem nos preocupar com isso, através do comando service, da seguinte forma:

sudo service mysql stop

Acima aprendemos a visualizar os processos em execução utilizando o ps -ef juntamente com o grep. Mas existe outra forma, a opção status.

sudo service mysql status
Status do serviço MySQL 'parado'.

A saída do comando indica que o serviço mysql não está em execução (inactive, dead). Agora vamos iniciar o serviço e verificar o status novamente.

Iniciar Serviços Manualmente

Para iniciar os serviços, a única coisa que muda nos comandos é a ação start no lugar de stop.

Exemplos:

sudo /etc/init.d/mysql start

ou;

sudo service mysql start
Iniciar serviço manualmente via terminal do Linux.

Agora executando sudo service mysql status, ele mudou para active - running.

Ir para o topo