segunda-feira, 25 de março de 2013

Aula 11 - Gerenciamento de Permissões no Linux

Segue o resumo de comandos e conceitos vistos em Sala de Aula.
Este é um material de apoio aos meus alunos que tem todo embasamento durante as aulas presenciais.

Você pode fazer o exercício desta aula no seguinte link:
Em breve...

As respostas deste exercício estão no seguinte link:
Em breve...

Você pode encontrar todos os resumos de aula no link abaixo:
http://www.dailson.com.br/2009/05/indice-mini-tutoriais-usados-em-aula.html


Ao executar um ls -l você visualiza algo como esta linha:

drwxr-xr-x 2 dailson alunos 4096 Jun 18 09:43 intranet

Vamos entender o que é cada dado deste:
drwxr-xr-x --> Permissões
2 --> A quantidade de ítens dentro deste diretório
dailson --> Usuário dono do diretório intranet
alunos --> Grupo dono do diretório intranet
4096 --> Tamanho em bytes
18   --> Dia da criação do diretório
09:43 --> Hora decriação do diretório
intranet --> Nome do diretório

Veja a figura abaixo que ilustra mais um exemplo:




O Primeiro caracter identifica o tipo do arquivo/objeto:

    * d => diretório;
    * b => arquivo de bloco;
    * c => arquivo especial de caractere;
    * p => canal;
    * s => socket;
    * - => arquivo normal.

Já os outros caracteres significam:

    * r => permissão de leitura (read);
    * w => permissão de gravação (write);
    * x => permissão de execução (execution);
    * - => permissão desabilitada.


Vamos aprender alterar as permissões de propriedade do objeto (arquivo, diretório ou link...) As permissões são propriedade de usuário  dono e grupo dono de um diretório e/ou arquivo.

Atribuir a propriedade de um diretório/arquivo para um determinado usuário
chown nome-usuario diretorio/arquivo
Exemplo:

Passar a propriedade do diretório /jogos para o usuário  dailson
# chown dailson /jogos

Passar a propriedade do diretório /jogos e todos os subdiretórios e arquivos para o usuário  dailson
# chown -Rvf dailson /jogos

Atribuir a propriedade de um diretório/arquivo para um determinado grupo
chgrp nome-grupo diretorio/arquivo
Exemplo:

Passar a propriedade do diretório /jogos para o grupo alunos
# chgrp alunos/jogos

Passar a propriedade do diretório /jogos e todos os subdiretórios e arquivos para o grupo alunos
# chgrp -Rvf alunos /jogos

Passar a propriedade de um diretório/arquivo para um usuário  e grupo ao mesmo tempo
# chown usuario:grupo diretorio/arquivo

Exemplo:
Passar para o usuário  dailson e grupo alunos o diretório /jogos
# chown dailson:alunos /jogos

Passar para o usuário  dailson e grupo alunos o diretório /jogos e todos os seus subdiretórios e arquivos
# chown -Rvf dailson:alunos /jogos


Alterando as Permissões com o chmod

Em relação as permissões:

Leitura (r):
Em arquivos, permite examinar o conteúdo do arquivo.
Em diretórios permite listar conteúdo do diretório.

Escrita (w):
Em arquivos, permite escrever, remover e alterar o arquivo.
Em diretórios, permite criar e remover arquivos dentro do diretório.

Execução (x):
Em arquivos, permite executar um arquivo como um programa.
Em diretório, permite ler e escrever em arquivos dentro do diretório.

Sendo que os três primeiros rwx pertencem ao Dono do arquivo, os outros três rwx pertencem ao Grupo e por fim os últimos três rwx pertencem aos outros usuários que não fazem parte do grupo.

Trabalhando com as permissões :
Poderemos trabalhar de duas formas. Usando as permissões  literais, ou usando o modo binário.
Para usar a forma literal são necessário saber que:

u : permissões  para o dono da pasta (user).
g : permissões  para o grupo (group).
o : permissões  para os demais (others).

+ : Adiciona a permissão
- : Remove a permissão
r : permissão de leitura
w : permissão de escrita
x : No caso dos arquivos indica permissão  de escrita e, no caso da pasta, permissão  para ver o conteúdo.

Veja a figura:




chmdo permissões  diretório/arquivo
Obs: Todos os exemplos serão em cima deste diretório:

drwxr-xr-x 2 dailson alunos 4096 Jun 18 09:43 intranet

Atribuir todas as permissões  ao usuário  dailson no diretório intranet
chmod

Atribui todas as permissões apenas para o usuário dono do diretório intranet (usuário dailson)
# chmod u=+rwx intranet
ou
# chmod u=+r+w+x intranet

Atribui todas as permissões apenas para o grupo dono do diretório intranet  (grupo alunos)
# chmod g=+rwx intranet
ou
# chmod g=+r+w+x intranet

Atribui todas as permissões apenas para os outros usuários do diretório intranet 
# chmod o=+rwx intranet
ou
# chmod o=+r+w+x intranet

Atribui todas as permissões apenas para o usuário dono, grupo dono e os outros usuários do diretório intranet
# chmod u=+rwx,g=+rwx,o=rwx intranet
ou
# chmod u=+r+w+x,g=+r+w+x,o=r+w+x intranet

Retira todas as permissões apenas para o usuário dono do diretório intranet (usuário dailson)
# chmod u=-rwx intranet
ou
# chmod u=-r-w-x intranet

Retira todas as permissões apenas para o grupo dono do diretório intranet  (grupo alunos)
# chmod g=-rwx intranet
ou
# chmod g=-r-w-x intranet

Retira todas as permissões apenas para os outros usuários do diretório intranet 
# chmod o=-rwx intranet
ou
# chmod o=-r-w-x intranet

Retira todas as permissões do usuário dono, grupo dono e os outros usuários do diretório intranet
# chmod u=-rwx,g=-rwx,o=-rwx intranet
ou
# chmod u=-r-w-x,g=-r-w-x,o=-r-w-x intranet

Você pode usar estes sinais a vontade, conforme os exemplos abaixo, sabendo que o + atribui e o - retira a permissão

# chmod u=+r-w+x,g=+r-w-x,o=r+w-x intranet
# chmod u=+r-w+x,g=+r+w-x,o=r+w+x intranet

Obs:
Lembre-se que o parâmetro -R de recursividade (ou seja: aplicar a todos os arquivos e subdiretórios também pode ser usado nos comandos chmod)
...

Você também pode atribuir os direitos de leitura, gravação e execução aos três níveis (usuário, grupo e outros) de uma só vez.

Atribuir o direito de leitura aos três níveis (usuário, grupo e outros)
# chmod +r intranet

Atribuir o direito de gravação aos três níveis (usuário, grupo e outros)
# chmod +w intranet

Atribuir o direito de execução aos três níveis (usuário, grupo e outros)
# chmod +x intranet

Utilizando o Modo Octal

No modo Octal as letras assumem valores:

r=4
w=2
x=1

Em qualquer posição, seja ela para usuário, grupo ou outros...


Os valores permanecem o mesmo
r=4
w=2
x=1

E para alterar as permissões, poderemos usar a soma destes valores para cada um dos objetos das permissões: usuário, grupo e outros.

Veja:




No exemplo abaixo, veja como aplicar a soma dos números para atribuir uma permissão:




Veja mais exemplos abaixo:

Obs: Todos os exemplos serão em cima deste diretório:

drwxr-xr-x 2 dailson alunos 4096 Jun 18 09:43 intranet

Atribui todas as permissões apenas para o usuário dono do diretório intranet (usuário dailson)
# chmod 700 intranet

Atribui todas as permissões apenas para o grupo dono do diretório intranet  (grupo alunos)
# chmod 070 intranet

Atribui todas as permissões apenas para os outros usuários do diretório intranet 
# chmod 007 intranet

Atribui todas as permissões apenas para o usuário dono, grupo dono e os outros usuários do diretório intranet
# chmod 777 intranet

Retira todas as permissões apenas para o usuário dono do diretório intranet (usuário dailson)
# chmod 077 intranet

Retira todas as permissões apenas para o grupo dono do diretório intranet  (grupo alunos)
# chmod 070 intranet

Retira todas as permissões apenas para os outros usuários do diretório intranet 
# chmod 770 intranet

Retira todas as permissões apenas para o usuário dono, grupo dono e os outros usuários do diretório intranet
# chmod 000 intranet

Você pode usar estes parametros da maneira que bem entender.

# chmod 123 intranet
# chmod 234 intranet
# chmod 345 intranet
# chmod 456 intranet
# chmod 567 intranet
# chmod 755 intranet
# chmod 644 intranet


Obs:
Lembre-se que o parâmetro -R de recursividade (ou seja: aplicar a todos os arquivos e subdiretórios também pode ser usado nos comandos chmod)

O Parâmetro UMASK
Toda vez que você cria um diretório ou arquivo, as permissões padrões já aparecem. Estas permissões vem de um parâmetro chamado umask.
Faça o teste
Crie um diretório e um arquivo e veja quais são as permissões.

A umask (user mask) são 3 números que definem as permissões iniciais do dono, grupo e outros usuários que o arquivo/diretório receberá quando for criado ou copiado para um novo local. Digite umask sem parâmetros para retornar o valor de sua umask atual.

A umask tem efeitos diferentes caso o arquivo que estiver sendo criado for binário (um programa executável) ou texto . Veja a tabela a seguir para ver qual é a mais adequada a sua situação:




Um arquivo texto criado com o comando umask 012;touch texto.txt receberá as permissões -rw-rw-r--, pois 0 (dono) terá permissões rw-, 1 (grupo), terá permissões rw- e 2 (outros usuários) terão permissões r--. Um arquivo binário copiado com o comando umask 012;cp /bin/ls /tmp/ls receberá as permissões -r-xr--r-x (confira com a tabela acima).

Por este motivo é preciso atenção antes de escolher a umask, um valor mal escolhido poderia causar problemas de acesso a arquivos, diretórios ou programas não sendo executados. O valor padrão da umask na maioria das distribuições atuais é 022. A umask padrão no sistema Debian é a 022 .

A umask é de grande utilidade para programas que criam arquivos/diretórios temporários, desta forma pode-se bloquear o acesso de outros usuários desde a criação do arquivo, evitando recorrer ao chmod.

Geralmente o umask é configurado no arquivo /etc/bash.bashrc ou /etc/profile

Dica:
Para saber qual é o resultado do umask:
Em binários e diretórios = Subtraia de 7
Em Arquivos = Subtraia de 6

Faça o teste na tabela acima.

Fontes:

terça-feira, 19 de março de 2013

Frase do Dia

"Deus constrói o seu templo no nosso coração sobre as ruínas das igrejas e das religiões."
Ralph Waldo 

segunda-feira, 18 de fevereiro de 2013

A História do Linux - Um breve relato em um vídeo da Antiga Conectiva

Estou republicando este documentário. Que apesar de desatualizado, vale a pena vê-lo.

"Este documentário, apesar de bastante desatualizado, mostra toda a escalada do Mundo Linux desde a criação do Kernel por Linus Torvalds até o início dos anos 2000.

Vale a pena você conferir, com uma excelente produção do pessoal da Conectiva na Época.

Mesmo para você que não é da área, vale a pena ver. São apenas 7 minutos de muita história."



Inproprietário - O Documentário do Mundo do Software Livre


 
 Tive o prazer de ver o excelente trabalho de conclusão de curso dos alunos  Daniel Pereira Bianchi e Johnata Rodrigo de Souza do Curso de Comunicação Social e Jornalismo da Unifieo.
O Trabalho desses dois jovens está excelente. Em aproximadamente 30 minutos eles fazem um bom resumo da história do software livre, com entrevistas de peso com Stalmann e Sérgio Amadeu, além de trazer depoimentos de usuários, administradores de sistemas e também do caso de sucesso do Exército Brasileiro. O Roteiro está muito bom, a sequência lógica dos fatos e a qualidade das imagens supera as expectativas. E eles usaram um lance muito interessante de colocar trecho de filmes muito antigos que casam com o assunto abordado, além de uma hilariante aparição de Bill Gates em um episódio dos Simpsons.
Recomendo a todos que vejam este trabalho, inclusive vou usar em minhas aulas.
O Trabalho está tão de alto nível, que além do arquivo que  você baixa no torrent, vem a capa do DVD e o impresso da bolacha.
Daniel e Johnata: Parabéns!! É assim que se faz!
Se quiserem ver o post original do br-linux sobre este filme, clique em:
Se quiserem baixar, o torrent é esse: http://www.mininova.org/tor/2571016



quinta-feira, 13 de dezembro de 2012

Frase do Dia

"Podem morrer as pessoas, mas nunca suas ideias."
Che Guevara

quarta-feira, 12 de dezembro de 2012



Produzindo Animações com Softwares Livres”  é o primeiro livro que trata de produção de animações com softwares livres. Escrito por Ricardo Graça; tem por objetivo apresentar as soluções em softwares livres para a criação de uma animação.

O livro aborda conceitos técnicos como, composição de imagem, iluminação de cenas  e operação dos seguintes softwares livres: Libre Office, Celtx, Inkscape, Gimp, Synfig, Tupi, Audacity, Kdenlive, Blender.

O livro apresenta cada software e mostra como utilizá-lo no processo de produção de uma animação, abordando as técnicas de animação 2D e 3D. 112 páginas. ISBN 978-85-66084-00-9

Este livro é o primeiro de uma série de livros voltados para o mundo da animação.

E você tem a opção de pagar por ele ou simplesmente baixá-lo.

Veja aqui! 

terça-feira, 11 de dezembro de 2012

Frase do Dia

"Meu trabalho não tem importância, nem a arquitetura tem importância para mim. Para mim, o importante é a vida, a gente se abraçar, conhecer as pessoas, haver solidariedade, pensar em um mundo melhor, o resto é conversa fiada."

Oscar Niemeyer

quarta-feira, 31 de outubro de 2012

Aula 10 - Gerenciamento de Usuários e Grupos


Segue o resumo de comandos e conceitos vistos em Sala de Aula.
Este é um material de apoio aos meus alunos que tem todo embasamento durante as aulas presenciais.

Você pode fazer o exercício desta aula no seguinte link:
Em breve...

As respostas deste exercício estão no seguinte link:
Em breve...

Você pode encontrar todos os resumos de aula no link abaixo:
http://www.dailson.com.br/2009/05/indice-mini-tutoriais-usados-em-aula.html

Criar usuários
Existem dois comandos para fazer esta operação.o adduser e useradd.
Em algumas distribuições, o adduser e useradd tem o mesmo comportamento. Porém no Debian e derivados, são comandos diferentes. O adduser faz as seguintes operações:
  • Cria um grupo
  • Cria o usuário e coloca dentro deste grupo
  • Solicita a senha
  • Solicita informações como nome completo, telefones e comentários
  • Cria o diretório /home/nome-do usuário.

Caso você use Debian/Mint/Ubuntu e derivados, faça:
# adduser nome

 comportamento será este:



Mais informações sobre este comando, use o manual através do comando
# man adduser

O Outro comando (e mais comum) é o useradd. Vamos aprender um pouco mais sobre ele:
Opções:
-m --> Cria o diretório home
-s --> Informa o shell do usuário
-c --> Informa um comentário sobre o usuário
-g --> Informa o grupo primário do usuário
-G --> Informa o(s) grupo(s) secundário do usuário

Comando para criar usuário
# useradd dailson (desta forma ele cria o grupo dailson e coloca o usuário dailson dentro do grupo)

Cria o usuário e força a criação do diretório /home
# useradd -m dailson

Cria o usuário, força a criação do diretório /home e especifica o shell
# useradd -m -s /bin/bash dailson

Cria o usuário, força a criação do diretório /home, especifica o shell e adiciona a um grupo primário alunos
# useradd -m -s /bin/bash -g alunos dailson

Cria o usuário, força a criação do diretório /home, especifica o shell  e adiciona a um grupo primário alunos e aos grupo professores
# useradd -m -s /bin/bash -g alunos -G professores dailson

Cria o usuário, força a criação do diretório /home, especifica o shell e adiciona a um grupo primário alunos e aos grupo professores e auditores
# useradd -m -s /bin/bash -g alunos -G professores,auditores dailson

Sintaxe:
useradd -m -g GRUPOPRIMARIO -G GRUPOS1,GRUPO2... nome-usuário

Alterar o nome do usuário
# usermod dailson -l dailson2 (muda o nome de login de dailson para dailson2)

Alterar o grupo primário
# usermod -g root dailson (muda o grupo primário do usuário dailson para o grupo root)

Alterar o grupo secundário
# usermod -G root dailson (muda o grupo secundário do usuário dailson para o grupo root)

Alterar o grupo secundário
# usermod -G root,alunos,professores dailson (muda o grupo secundário do usuário dailson para os grupos root,professores e alunos)

Comando para atribuir uma senha para o usuário
# passwd dailson (cria uma senha para o usuário dailson)

Comando para alterar uma senha para o usuário
# passwd dailson (altera a senha do usuário dailson)

Comando para apagar um usuário
# userdel dailson (apaga o usuário dailson)

Comando para apagar um usuário e todo o conteúdo do diretório /home
# userdel -r dailson

Comando para exibir as informações de um usuário
# id dailson (exibe as informações do usuário dailson)


Legenda:
uid - User Identification (Identificação do usuário)
gid - Group Identification (Identificação do grupo que o usuário faz parte)
groups = Informação dos grupos secundários que o usuário faz parte.

Comando para criar um grupo chamado alunos
# groupadd alunos

Comando para excluir um grupo chamado alunos
# groupdel alunos

Renomeia um grupo (de alunos para alunos novos)
# groupmod alunos -n alunosnovos

Comando para incluir um usuário dentro do grupo
# gpasswd -a dailson alunos (o usuário dailson é incluido no grupo alunos)

Coloca uma senha no grupo. Use isto para evitar que usuários ingressem em um grupo aleatoriamente. Desta forma quando um usuário der o comando anterior, uma senha será solicitada).
# gpasswd alunos

Exibindo as informações de todos os usuários
# cat /etc/passwd



Obs: Cada linha exibe um usuário do sistema.

Legenda:
Este arquivo é delimitado pelo caracter dois pontos ":"
 As informações são as seguintes:
nomeusuario:senha:UID:GID:Comentarios:Local da Pasta home:SHELL
 
Exemplo:
dailson:x:1001:0:Dailson Fernandes,Professor:/home/dailson:/bin/bash
dailson
--> nome do usuário
x --> senha criptografada
1001 --> Identificação do Usuário (UID)
0 --> Identificação do grupo primário do usuário, neste caso o grupo zero é o grupo root
Dailson Fernandes,Professor --> Comentário que foi passado na criação do usuário pelo parametro -c
/home/dailson --> Local do diretório home
/bin/bash --> Shell que será invocado quando o usuário fizer login.

Exibindo as informações de todos os grupos
# cat /etc/group



Legenda:
Este arquivo é delimitado pelo caracter dois pontos ":"
As informações são as seguintes
NOME DO GRUPO:SENHA:GID:MEMBROS   
 
Exemplo:
alunos2:x:1028:dailson2
alunos2
--> Nome do grupo
x --> Senha criptografada
1028 --> Identificação do grupo (GID)
dailson2 --> usuário dailson2 tem o grupo alunos2 como grupo secundário.

Exibindo informações de senhas dos usuários.
As senhas dos usuários ficam armazenados no arquivo /etc/shadow. As senhas são criptografadas com o algoritmo MD5 e usa recursos como SALT NUMBER.
# cat /etc/shadow

Exibindo as informações de senhas dos grupos
# cat /etc/gshadow

É possível deixar a senha dentro do arquivo /etc/passwd.
# pwunconv

Veja que a senha foi colocada no lugar do "X" no arquivo /etc/passwd
# cat /etc/passwd

Para devolver a senha para o arquivo /etc/shadow, use o seguinte comando:
# pwconv

Alguns truques:

Exibindo apenas os nomes do usuários:
# cut -f1 -d: /etc/passwd

Exibindo apenas os nomes dos usuários com pausa
# cut -f1 -d: /etc/passwd | less

Exibindo apenas os nomes dos usuários ordenado
# cut -f1 -d: /etc/passwd | sort | less

Exibindo apenas os nomes do usuários ordenados e numerado
# cut -f1 -d: /etc/passwd | sort | nl | less

Exibindo apenas os nomes dos grupos:
# cut -f1 -d: /etc/group

Exibindo apenas os nomes dos grupos com pausa
# cut -f1 -d: /etc/group | less

Exibindo apenas os nomes dos grupos ordenado
# cut -f1 -d: /etc/group | sort | less

Exibindo apenas os nome dos grupos ordenado e numerado
# cut -f1 -d: /etc/group | sort | nl | less

quarta-feira, 24 de outubro de 2012

Resposta do Exercício da Aula 9 - Gerenciamento de Processos no Linux


Respostas do Exercício relativo a aula 9 de Gerenciamento de Processos no Linux

Se você ainda não fez o Exercício, acesse ele neste link e faça antes de ver as respostas:
http://www.dailson.blogspot.com.br/2012/10/exercicio-da-aula-9-gerenciamento-de.html

Toda a teoria necessária para a realização deste exercício encontra-se no link abaixo:
http://www.dailson.blogspot.com.br/2012/05/gerenciamento-de-processos-no-linux.html

Você pode encontrar todos os resumos de aula no link abaixo:
http://www.dailson.com.br/2009/05/indice-mini-tutoriais-usados-em-aula.html


1º Liste apenas os processos que estão em execução no terminal atual
# ps

2º Liste os processos que estão em execução em todos os terminais
# ps –a

3º Liste todos os processos do Linux
# ps –A

4º Liste todos os processos do Linux, exibindo o nome dos usuários que iniciaram os processos
# ps –aux

5º Liste os processos em forma de árvore
# pstree 

6º Liste todos os processos do sistema em forma de árvore exibindo o número do processo
# pstree –p

7º Liste todos os processos do sistema em forma de árvore exibindo o nome do usuário
# pstree  -u 

8º Quais os passos necessários para matar um processo chamado openoffice que está travado no console tty1. Este processo não responde de forma alguma. Como encerrá-lo ?

Maneira 1:
Muda para outro console
# ps  -a (para pegar o número do processo do openoffice)
# kill –SIGKILL 1111 (supondo que 1111 seja o número do processo do openoffice)

Maneira 2:
Muda para outro console
# killall  –SIGKILL openoffice
 
9º Qual comando exibe detalhe sobre os processos que estão sendo executados em tempo real no servidor ?
# top
# htop

10º Diferencie kill de killall
Kill envia sinais para os aplicativos pelo número do processo
Killall envia sinais para os aplicativos pelo seu nome

11º) Explique os sinais e qual o número que equivale  a eles

SIGKILL  - Sinal que encerra o aplicativo de qualquer forma. Este sinal  não pode ser ignorado pelo aplicativo.
SIGTERM – Solicita ao aplicativo que encerre. Se possível, os dados são salvos e nenhum dado é perdido. Este sinal é semelhante a encerrar um programa normalmente. de
SIGSTOP – Congela (pausa) a execução de um aplicativo na memória.
SIGCONT  - Retoma a execução de um aplicativo que foi congelado (pausado) na memória
SIGHUP  -  Usado para reinciar daemons (programas residentes em memória)

12º - Qual a diferença entre os comandos nice e renice ?
nice – Inicia um aplicativo com a prioridade desejada
renice – Muda a prioridade de um aplicativo já em execução

13º Como executar o updatedb com a prioridade -10 ?
# nice –n -10 updatedb

14º Como mudar a prioridade do updatedb (que já está em execução) para a prioridade 15 positivo ?
# ps –a (para pegar o número do processo do updatedb)
# renice –n +15 1111 (supondo que 1111 seja o número do processo do updatedb)

15º Que comando produz este resultado ?
[1]   Stopped        programa.sh
[2]-  Stopped        nano 
[3]+  Stopped        top 
[4]   Stopped        htop 
[5]   Stopped        vim


# jobs

17º De acordo com o cenário da questão E,  se for executado o comando fg, quem será trazido para primeiro plano?
top

18º Se for executado novamente o comando fg quem será trazido para primeiro plano?
nano

19º Qual combinação de tecla coloca um programa em segundo plano?
CTRL+Z

20º Qual comando coloca um processo em background que está parado em execução? (Cite 2)
# bg
# ps -a
# kill –SIGCONT 1111 (supondo que 1111 seja o número do processo deste processo)

 21º – O Aplicativo de backup copia.sh acaba de ser executado

./backup.sh



a) De acordo com o quadro abaixo, algum comando foi executado:


b) Que comando foi este, e o que aconteceu?
# renice –n -10 1350
A prioridade do script backup.sh foi alterada para -10

22º Observe o resultado do comando jobs
[1]   Stopped        programa.sh
[2]-  Stopped        nano 
[3]+  Stopped        top 
[4]   Stopped        htop 
[5]   Stopped        vim


a) Que comando torna o quadro abaixo verdadeiro?
[1]   Running        programa.sh
[2]-  Stopped        nano 
[3]+  Stopped        top 
[4]   Stopped        htop 
[5]   Stopped        vim

# bg 1