fbpx
Whatsapp (31) 3069-8315
linuxdicaninja 1 scaled

Perfil de Usuários no Linux (profile) [Guia Básico]

Ajustando o Ambiente de Trabalho dos Usuários no Linux

Durante o processo de logon de um usuário, quando o shell bash inicia, ele executa o script /etc/profile. Este script pode ser customizado e diferente em cada distribuição Linux. Sua função é configurar algumas variáveis de ambiente e fazer a sintonia do sistema para os usuários.

Para ajustar o Perfil de Usuários no Linux, o bash lê a configuração de diversos arquivos. O conteúdo destes arquivos pode variar em cada distribuição, e nem sempre uma distribuição usa todos eles, mas a ideia geral permanece.

O Bash também procura pelo arquivo /etc/bash.bashrc que também tem uma função parecida com o profile, mas o bashrc é executado todas as vezes que o bash é executado.

Cada usuário também pode criar seus scripts de inicialização para serem executados durante o logon. Estes arquivos precisam estar localizados no diretório home dos usuários com os nomes:

  • .profile
  • .bash_profile
  • .bash_login
  • .bashrc
  • .bash_logout

O ponto “.” antes do nome do arquivo confere a ele o atributo de escondido, somente sendo listado com o comando “ls –lga”.

Arquivos de Perfil do Bash

O bash possibilita que as funções, variáveis e apelidos possam ser gravados em alguns arquivos para que possam ser carregados novamente quando o sistema for iniciado novamente, ou uma nova execução do bash for feita.

Os arquivos lidos pelo bash são:

/etc/profile

Arquivo global de configuração de Perfil de todos os usuários. Define variáveis globais e é executado durante o processo de autenticação do usuário. Este script também costuma carregar com o comando source os arquivos contidos no diretório /etc/profile.d.

/etc/profile.d

Este diretório contém um ou mais scripts que são carregados pelo /etc/profile.

$ ls -l /etc/profile.d
-rw-r--r-- 1 root root 1606 jul 31  2018 colorls.sh
-rw-r--r-- 1 root root 2703 ago  2  2018 lang.sh
-rw-r--r-- 1 root root  121 jul 31  2018 less.sh
-rw-r--r-- 1 root root  248 jul 17 14:46 vim.sh

/etc/bashrc ou /etc/bash.bashrc

Arquivo global de configuração de Perfil, que define variáveis importantes e é executado toda vez que o Bash é carregado. Em algumas distribuições aparece com o nome /etc/bashrc e em outras como /etc/bash.bashrc.

~/.bash_profile

Arquivo de Perfil individual de cada usuário que é executado logo imediatamente ao /etc/profile. Seu conteúdo é lido a cada execução do Bash e cada usuário tem o seu no diretório HOME.

~/.bash_login

Se o arquivo ~/.bash_profile não existir, ele é executado logo após o processo de logon. Cada usuário tem o seu;

~/.profile

Se os arquivos .bash_profile e .bash_login não existirem, ele é executado logo após o logon. Cada usuário tem o seu;

~/.bashrc

É executado automaticamente quando o processo Bash é iniciado. Cada usuário tem o seu;

~/.bash_logout

É executado durante o processo de logout;

Relembrando que o  “~/” indica o diretório HOME do usuário logado. 

Convém você olhar estes arquivos e analisar o seu conteúdo. Cada distribuição pode; variar o conteúdo destes scripts. Você pode até notar que um script chama o outro.

É muito importante saber a função e quando cada arquivo é executado. De maneira geral, guarde que:

  • Os arquivos que ficam no diretório /etc são globais, e valem para todos os usuários;
  • Os arquivos quem ficam no diretório HOME, são individuais para cada usuário;
  • Os arquivos que tem profile no nome, são carregados no processo de login, uma única vez;
  • Os arquivos que tem bash no nome são carregados toda vez que o Bash é executado.

 Outro detalhe importante é que estes arquivos são lidos e executados na ordem descrita acima: primeiro os Profiles, depois os Bash. Nem todas as distribuições fazem uso de todos esses arquivos.

A figura abaixo ilustra a ordem do processo de carga destes scripts:

login_pt Perfil de Usuários no Linux (profile) [Guia Básico]Ordem de leitura dos Scripts de Login

Observe que os nós em amarelo são scripts globais, que valem para todos os usuários. O scripts ~/.bashrc é carregado toda vez que o Bash é executado. E o script ~/.bash_logout toda vez que o Bash termina.

Aprenda muito mais sobre Linux em nosso curso online. Você pode efetuar a matrícula aqui. Se você já tem uma conta, ou quer criar uma, basta entrar ou criar seu usuário aqui.

Gostou? Compartilhe

linuxdicaninja 1 scaled

Comando groupdel no Linux (apaga um grupo) [Guia Básico]

O Comando groupdel no Linux apaga um grupo do sistema. Ele modifica os arquivos de contas do sistema, apagando todas as referências ao grupo. O grupo a ser apagado deve existir.

Deve-se manualmente checar os sistemas de arquivos para garantir que nenhum dos arquivos permanece com o  grupo  ou  com  a  sua identificação.

# groupdel contabilidade

Aprenda muito mais sobre Linux em nosso curso online. Você pode efetuar a matrícula aqui. Se você já tem uma conta, ou quer criar uma, basta entrar ou criar seu usuário aqui.

Gostou? Compartilhe

linuxdicaninja 1 scaled

Comando groupadd no Linux (cria grupo) [Guia Básico]

O comando groupadd no Linux cria um grupo de usuários. Este comando grava informações nos arquivos /etc/group e /etc/gshadow.

As opções mais comuns são:

  • -f: Força a saída do comando como sucesso mesmo que o nome do grupo ou groupid já existam;
  • -g N: Atribui o número N ao Group ID;
  • -p SENHA: atribui uma senha à um grupo, de forma que um usuário deve saber a senha para ingressar em um grupo

Exemplos:

Para criar um grupo chamado contabilidade:

# groupadd contabilidade
# cat /etc/group|grep contabilidade
contabilidade:x:1006:

Aprenda muito mais sobre Linux em nosso curso online. Você pode efetuar a matrícula aqui. Se você já tem uma conta, ou quer criar uma, basta entrar ou criar seu usuário aqui.

Gostou? Compartilhe

linuxdicaninja 1 scaled

Acesso Remoto ao Linux [Guia Básico]

O acesso remoto ao Linux no ambiente gráfico pode ser feito através de ferramentas e protocolos, tais como:

X11

O protocolo X11 é a forma de comunicação nativa entre o X.Org Server e aplicações X. 

Ele usa o TCP como protocolo de transporte, tipicamente entre a porta 6000 até 6063, iniciando na porta 6000, somado ao número do Display. 

O controle de acesso ao protocolo pode se dar através de firewall, restringindo o acesso as portas 6000-6063 somente à hosts permitidos, além do controle na aplicação com o comando xhost.

XDMCP

A arquitetura do X.Org é tão modular que permite que o Gerenciador de Janelas execute no mesmo host que o X Server, ou remotamente em outro host.

O protocolo XDMCP (acrônimo para X Display Manager Control Protocol) foi criado para formatar a comunicação entre o X Server e o X Window Display Manager.

Ele usa o protocolo de transporte UDP na porta 177 e é inseguro, pois não criptografa seu tráfego.

O XDMCP é análogo ao telnet e, portanto, compartilha os mesmos problemas de segurança, permitindo, por exemplo por meio de uma rede sem fio, que qualquer pessoa possa “ouvir” o tráfego e gravar facilmente as sequências de teclas digitadas.

VNC

VNC é um conjunto de aplicativos que podem ser usados para acesso remoto ao ambiente gráfico. Ele consiste de um servidor, que fica escutando na porta TCP 5900, e um VNC Cliente, capaz de conectar nesta num servidor executando o VNC Server.

Ele é bastante utilizado para acesso remoto, uma vez que é multiplataforma, permitindo acesso remoto em Windows, Mac OS, Linux, AIX, HP-UX e Solaris. 

Tão versátil, o cliente VNC pode ser executado na plataforma Java e em Mobile como nos dispositivos Apple iPhone, iPod touch, iPad e também no Google Android.

Sua autenticação é simples, através de uma senha configurada no VNC Servidor.

SPICE

O SPICE (acrônimo para Simple Protocol for Independent Computing Environments) é um sistema de exibição remota criado para ambientes virtuais que permite visualizar ambiente Desktop numa grande variedade de arquiteturas.

De todos os protocolos de conexão remota, o SPICE é o mais poderoso deles, pois fornece uma solução completa de acesso remoto a máquinas virtuais que permite reproduzir vídeos, gravar áudio, compartilhar dispositivos usb e compartilhar pastas sem complicações.

SPICE pode ser dividido em 4 componentes diferentes: protocoloclienteservidor e convidado:

  • O protocolo é a especificação na comunicação dos três outros componentes;
  • Um cliente é o visualizador remoto responsável por enviar dados e traduzir os dados da Máquina Virtual (VM) para que você possa interagir com ele;
  • O servidor SPICE é a biblioteca usada pelo hipervisor (Sistema Operacional Host), a fim de compartilhar a Máquina Virtual em Protocolo SPICE;
  • O convidado é todo o software que deve ser executado na Máquina Virtual, a fim de tornar SPICE totalmente funcional, como o driver QXL e SPICE VDAgent.

O SPICE é especialmente projetado para fornecer acesso remoto a máquinas virtuais com a experiência de uma máquina local.

RDP

O RDP (acrônimo para Remote Desktop Protocol ) é um protocolo multi-canal criado pela Microsoft para acesso remoto ao Desktop.

Existem clientes RDP para a maioria das versões do Windows, e também para o Linux.

O servidor RDP escuta por padrão na porta TCP 3389.

O FreeRDP é uma implementação do RDP sob os termos do software livre, estando licenciado pela Apache License. Seguindo as Open Specifications da Microsoft, o FreeRDP fornece uma aplicação cliente para conexões através do protocolo RDP à partir do Linux para Servidores Windows.

A implementação xrdp também provê o lado servidor do RDP para o Linux, aceitando conexões de uma variedade de clientes como FreeRDP, rdesktop e do Microsoft Desktop Client.

NX

O NX criado pela NoMachine é outro protocolo de compartilhamento de área de trabalho remota. Sua tecnologia na versão 3.5 era open source e disponível sob a licença GNU GPL2. No entanto, à partir da versão 4 tornou-se proprietário e fonte fechada.

Isso fez com que algumas variações de código aberto fossem implementadas, como o FreeNX e X2Go.

A tecnologia NX fornece tempo de resposta excelente, mesmo em conexões de baixa largura de banda, sendo mais rápido do que os produtos baseados em VNC.

O NX usam tunelamento OpenSSH com tráfego é criptografado, o que é ótimo para acesso remoto via Internet.

Além disso o NX suporta vários usuários simultâneos, compacta os dados X11 e emprega o uso de  cachê para proporcionar uma experiência de desktop remoto aprimorada.

Aprenda muito mais sobre Linux em nosso curso online. Você pode efetuar a matrícula aqui. Se você já tem uma conta, ou quer criar uma, basta entrar ou criar seu usuário aqui.

Gostou? Compartilhe

linuxdicaninja 1 scaled

Portas abertas no Linux [Guia Básico]

Parte do diagnóstico de rede, é verificar os serviços com portas abertas no Linux.

Como Verificar as Portas Abertas no Linux

Para verificar as portas em aberto com o netstat, as opções “-tunl” podem ser usadas:

  •  -t para TCP
  • -u para UDP
  • -n para não resolver nomes
  • -l para as portas abertas (listen)

Neste exemplo, o netstat lista as portas abertas TCP/UDP:

$ netstat -tunl
Active Internet connections (only servers)
Proto Local Address   Foreign Address
tcp    127.0.0.53:53   0.0.0.0:* 
tcp    0.0.0.0:22      0.0.0.0:*
tcp6   0 :::22           :::*  
udp    127.0.0.53:53   0.0.0.0:*

O netstat com a opção -p mostra os processos donos das portas. Para utilizar essa opção é preciso ser o root:

$ sudo netstat -tunlp
Active Internet connections (only servers)
Proto Local Address   State   PID/Program name    
tcp    127.0.0.53:53   LISTEN  24813/systemd-resol 
tcp    0.0.0.0:22      LISTEN  9857/sshd           
tcp6   :::22           LISTEN  9857/sshd           
udp    127.0.0.53:53      24813/systemd-resol 

O comando ss também pode mostrar as portas abertas com a opção idêntica:

# ss -tunelp
Netid  Local Address:Port  Peer Address:Port                                                                                  
udp    127.0.0.53%lo:53    0.0.0.0:*   ("systemd-resolve",pid=355)
udp    0.0.0.0:68          0.0.0.0:*   ("dhclient",pid=17984)
udp    0.0.0.0:5353        0.0.0.0:*   ("avahi-daemon",pid=27533)
tcp    0.0.0.0:22          0.0.0.0:*   ("sshd",pid=14825)

Comando lsof no Linux

Como tudo no Linux é um arquivo, também as conexões de rede podem ser visualizadas como um “arquivo em aberto”. O comando “lsof” pode ser usado neste contexto para ver os arquivos que correspondem a endereços de Internet.

A opção “-i” do lsof filtra os arquivos em aberto do tipo de endereços de Internet. É necessário executar o lsof como root:

$ sudo lsof -i
COMMAND     PID            USER   FD   TYPE  NODE NAME
sshd       9857            root    3u  IPv4  TCP *:ssh (LISTEN)
sshd       9857            root    4u  IPv6  TCP *:ssh (LISTEN)
systemd-r 24813 systemd-resolve   12u  IPv4  UDP localhost:domain 
systemd-r 24813 systemd-resolve   13u  IPv4  TCP localhost:domain (LISTEN)

Comando fuser no Linux

O comando “fuser” também pode ser usado para mostrar informações sobre uma determinada porta em aberto. Ele identifica os processos através dos arquivos ou sockets, retornando o PID dos processos:

$ sudo fuser 22/tcp
22/tcp:               9857 24313 24400

Para saber qual processo está usando determinado arquivo:

$ fuser -v /bin/bash
                     USER     PID ACCESS COMMAND
/usr/bin/bash:       ec2-user  16092 ...e. bash

Os comandos netstat, ss, lsof e fuser servem para ver as portas em aberto da máquina local.

Existe uma ferramenta chamada nmap que pode também descobrir as portas em aberto tanto da máquina local, quanto de máquinas remotas.

Aprenda muito mais sobre Linux em nosso curso online. Você pode efetuar a matrícula aqui. Se você já tem uma conta, ou quer criar uma, basta entrar ou criar seu usuário aqui.

Gostou? Compartilhe

linuxdicaninja 1 scaled

Configurar o DNS no Linux (cliente) [Guia Básico]

O DNS – Domain Name System é utilizado para resolução de nomes para endereços IP e vice-versa. Neste artigo explicamos de forma simples como configurar o DNS no Linux manualmente.

A implementação do serviço de resolução de nomes é feita pelo pacote BIND ou outros pacotes de servidor de DNS. Este pacote possui os arquivos necessários à configuração do DNS e o serviço chamado named.

O DNS é estruturado sobre dois pontos básicos, a organização da Internet em domínios e a distribuição dos servidores de nomes na rede em forma de hierarquia.

A organização da Internet em domínios evita a utilização de um mesmo nome por mais de um equipamento e descentraliza o cadastro de redes e equipamentos. 

Os domínios podem ser hierarquizados por instituições e geograficamente.

A distribuição dos servidores DNS faz-se necessária uma vez que a centralização de uma única base de dados contendo as informações para a conversão dos nomes simbólicos em endereços IP seria inviável.

A própria Internet nasceu de um projeto chamado ARPANET, criado pelo Departamento de Defesa americano, que preconizava uma rede sem um backbone central e sem administração centralizada, tornando-a virtualmente indestrutível caso algum computador, ou pedaço da rede se tornasse inoperante.

Na internet existem diversos servidores raízes geograficamente espalhados e organizados através de sufixos. Por exemplo, os servidores raiz do sufixo .br ficam hospedados no registro.br. Os servidores raiz do registro.br precisam conhecer todos os servidores DNS que hospedam domínios terminados com .br.

Há 3 arquivos de configuração importantes para a resolução de nomes, já citados no livro:

  • /etc/nsswitch.conf: Este arquivo possui uma linha com o comando “hosts” que determina a ordem de busca para resolução de nomes. A tag “files” determina que o /etc/hosts seja consultado e a tag “dns” determina que o arquivo /etc/resolv.conf seja consultado para determinar o IP do servidor de DNS.
  • /etc/resolv.conf: Este arquivo possui uma linha com o comando nameserver que determina o IP do servidor de DNS;
  • /etc/hosts: Este arquivo pode conter algumas resoluções de nomes em IPs de forma manual;

Ao acessar a Internet através de um navegador ou qualquer outro aplicativo de rede, o host Linux segue a seguinte sequência para identificar o endereço IP do nome de endereço de Internet desejado:

  1. O Linux verifica o arquivo /etc/nsswitch.conf para saber a ordem de busca: se é em arquivo (/etc/hosts) ou por servidor de DNS (/etc/resolv.conf).
  2. Se a ordem em /etc/nsswitch.conf for primeiro “files“, o arquivo /etc/hosts é consultado para se tentar determinar a resolução do nome. Se a ocorrência for encontrada, o endereço IP será retornado. Caso não encontre, o host irá ler o endereço IP do servidor de DNS no arquivo /etc/resolv.conf e fará uma consulta ao servidor de DNS para tentar determinar o IP do endereço desejado. Se o servidor retornar um endereço IP, o nome será resolvido. Caso contrário, a aplicação receberá uma falha de resolução de nomes.
  3. Se a ordem em /etc/nsswitch.conf for primeiro “dns“, o arquivo /etc/resolv.conf é consultado para pegar o endereço IP do servidor de DNS e uma consulta será feita ao servidor de DNS para tentar determinar o IP do endereço desejado. Se o servidor de DNS encontrar o endereço, a aplicação receberá o IP desejado. Caso contrário, o host irá acessar o arquivo /etc/hosts para tentar determinar o IP do endereço desejado. Caso encontre, o IP será retornado. Em caso negativo a aplicação receberá uma falha de resolução de nomes.

Exemplo de configuração do /etc/nsswitch.conf

passwd:         files systemd
group:          files systemd
shadow:         files
gshadow:        files
hosts:          files dns
networks:       files

Exemplo de configuração básica do arquivo /etc/resolv.conf:

search meudominio.com.br
nameserver 10.25.12.1
nameserver 200.216.215.5

Exemplo de configuração básica do arquivo /etc/hosts:

127.0.0.1    localhost.localdomain            localhost 
10.25.12.1   www.certificacaolinux.com.br     www 

É importante que você entenda o funcionamento do processo de resolução de nomes, que os arquivos /etc/hosts, /etc/nsswitch.conf, /etc/resolv.conf regulam a configuração do cliente de DNS.

É importante saber que a ordem de resolução de nomes no arquivo /etc/nsswitch.conf afeta como a resolução de nomes se comportará. Assim que uma ocorrência de resolução de nomes é encontrada, seja no servidor de DNS ou localmente no arquivo /etc/hosts, o host se dá por satisfeito e não recorre a outro serviço.

Com isso, pode-se ter os seguintes casos de erro:

  • Pode existir um endereço listado no /etc/hosts manualmente, que difere do endereço IP que os servidores de DNS resolvem. Isso pode fazer com que o host conecte em um servidor errado, ou mesmo não consiga conectar porque o endereço IP não existe;
  • Um determinado servidor de DNS listado no /etc/resolv.conf não está ativo ou o host não consegue uma conexão com ele, impossibilitando a resolução de nomes;

Aprenda muito mais sobre Linux em nosso curso online. Você pode efetuar a matrícula aqui. Se você já tem uma conta, ou quer criar uma, basta entrar ou criar seu usuário aqui.

Gostou? Compartilhe

linuxdicaninja 1 scaled

Comando ss no Linux (investigar a rede) [Guia Básico]

O comando ss no Linux é extremamente útil para investigar os sockets, fornecendo várias informações sobre a rede. Ele é a evolução do comando netstat do antigo Net-tools. É importante que se entenda que um socket pode ser uma conexão de rede, bem como um socket do tipo Unix, que é um arquivo especial que atua como “ponte de comunicação” entre dois programas.

Suas opções mais comuns são:

  • -a: lista todos sockets;
  • -r: resolve os endereços IPs e portas por nomes de serviços;
  • -n: não resolve os endereços IPs e portas para serviços;
  • -l: lista somente as portas abertas (LISTEN);
  • -e: mostra informações detalhadas sobre o socket;
  • -m: mostra a alocação de memória do socket;
  • -p: mostra o processo dono do socket;
  • -i: mostra estatísticas do TCP sobre o socket;
  • -K: força o fechamento de um socket;
  • -s: mostra as estatísticas da rede;
  • -t: filtra somente os pacotes TCP;
  • -u: filtra somente os pacotes UDP;
  • -4: filtra somente os pacotes IPv4;
  • -6: filtra somente os pacotes IPv6;

Algumas opções podem ser combinadas para formar um determinado resultado.

Exemplos:

Para ver as estatísticas da rede:

$ ss -s
Total: 1020
TCP:   25 (estab 2, closed 1, orphaned 0, timewait 1)
Transport Total     IP        IPv6
RAW        1         0         1        
UDP        9         6         3        
TCP        24        22        2        
INET       34        28        6        
FRAG       0         0         0        

Para ver as portas TCP abertas (em LISTENING):

$ ss -lt
State Recv-Q  Send-Q   Local Address:Port     Peer Address:Port  LISTEN 0       128    127.0.0.53%lo:domain   0.0.0.0:*  LISTEN     0       128    0.0.0.0:ssh            0.0.0.0:*  LISTEN     0       128    [::]:ssh               [::]:*                  

Para mostrar as portas TCP e UDP abertas e os processos donos do sockets. Para mostrar os processos, o usuário precisa ser o administrador root:

# ss -ltpu
Netid State   Local Address
udp   UNCONN  127.0.0.1:323   users:(("chronyd",pid=20898,fd=5))
tcp   LISTEN  0.0.0.0:ssh     users:(("sshd",pid=9857,fd=3))

Mostra todas as conexões estabelecidas na porta (22) do ssh:

$ ss -o state established '( dport = :ssh or sport = :ssh )'
Netid   Recv-Q  Send-Q  Local Address:Port  Peer Address:Port           
tcp       0      0     10.211.55.63:ssh    10.211.55.2:64749  timer:(keepalive,104min,0)

Esse comando é útil para diagnosticar os seguintes problemas:

  • Verificar quais serviços de rede que estão em execução (-l)
  • Verificar a quantidade de memória consumida por um socket (-m)
  • Verificar os processos donos dos sockets (-p)
  • Verificar as conexões estabelecidas (-o state established)
  • Verificar o volume de dados trafegado em uma conexão TCP (-i)

Aprenda muito mais sobre Linux em nosso curso online. Você pode efetuar a matrícula aqui. Se você já tem uma conta, ou quer criar uma, basta entrar ou criar seu usuário aqui.

Gostou? Compartilhe

linuxdicaninja 1 scaled

Comando watch no Linux (executa o programa de forma recorrente) [Guia Básico]

Imagine que você quer monitorar uma situação executando um comando de forma periódica.

Você pode usar o history do bash e executar manualmente o programa tantas vezes quanto necessário, ou usar o comando watch no Linux.

O comando watch no Linux executa um comando periodicamente, que permite observar como a saída do programa muda ao longo do tempo.

Se nenhum intervalo for informado, o watch usa 2 segundos como padrão.

As opções mais comuns são:

  • -d        Mostra as diferenças entre as atualizações;
  • -n X    Define o intervalo em X segundos;
  • -t        Desabilita o cabeçalho;
  • -g       Termina a execução quando a saída do comando muda;

Neste exemplo o watch pode ser usado para monitorar as conexões TCP:

$ watch -n 1 ss -t
Every 1,0s: ss -t        Sun Sep 15 21:37:32 2019
State   Local Address:Port         Peer Address:Port
ESTA      127.0.0.1:http            127.0.0.1:39608
ESTAB       127.0.0.1:39608           127.0.0.1:http

Aprenda muito mais sobre Linux em nosso curso online. Você pode efetuar a matrícula aqui. Se você já tem uma conta, ou quer criar uma, basta entrar ou criar seu usuário aqui.

Gostou? Compartilhe

linuxdicaninja 1 scaled

Comando fg no Linux (processos em primeiro plano) [Guia Básico]

O Comando fg no Linux faz exatamente o oposto do comando bg, colocando a tarefa ou processo em segundo plano em primeiro plano e ligada a um terminal. 

Ele também aceita que um número de job seja passado como parâmetro.

Neste exemplo novamente o comando find é colocado em segundo plano com o Ctrl-Z e ele ganha o número de Job1:

$ find / -iname a* 2>/dev/null 
^Z
[1]+  Parado                  find / -iname a* 2> /dev/null

Para ver os programas em execução no segundo plano, o comando jobs pode ser executado:

$ jobs
[1]+  Parado                  find / -iname a* 2> /dev/null

Para devolver o Job para primeiro plano e conectado ao terminal, basta executar o fg. Neste exemplo, foi passado como parâmetro o número do Job:

$ fg 1
find / -iname a* 2> /dev/null

Aprenda muito mais sobre Linux em nosso curso online. Você pode efetuar a matrícula aqui. Se você já tem uma conta, ou quer criar uma, basta entrar ou criar seu usuário aqui.

Gostou? Compartilhe

linuxdicaninja 1 scaled

Sinais no Linux [Guia Básico]

A “conversa” entre o sistema operacional e os programas em execução é através de Sinais no Linux, que são interrupções de software, utilizadas para colocar um programa conectado a um terminal, em espera, em segundo ou em primeiro plano, e até mesmo parar sua execução. 

Cada processo no Linux fica à escuta de sinais. Estes sinais são utilizados pelo Kernel, por outros processos ou por usuário para avisar a um determinado processo sobre algum evento em particular. O guru de UNIX W. Richard Stevens descreve os sinais como interrupções de software.

Quando um sinal é enviado para um processo ele toma uma determinada ação dependendo do valor que este sinal carrega. 

Cada sinal tem um nome exclusivo e um valor numérico. 

Vejamos alguns valores e suas ações:

TABELA  – Sinais mais importantes 

SinalValor NuméricoAção
SIGHUP1Hang-Up ou desligamento. Este sinal é utilizado automaticamente quando você desconecta de uma sessão ou fecha um terminal. Ele também é utilizado por processos servidores para invocar a releitura do arquivo de configuração.
SIGINT2É o sinal de interromper o funcionamento. Ele é acionado por exemplo quando se aperta as teclas Ctrl C.
SIGKILL9Terminar o processo incondicionalmente de forma rápida e drástica. Este tipo de sinal pode deixar arquivos abertos e bases de dados corrompidas. Deve ser utilizado caso o processo pare de responder ou em uma emergência.
SIGTERM15Termina o processo de forma elegante, possibilitando que ele feche arquivos e execute suas rotinas de fim de execução.
SIGCONT18É um sinal para um processo que foi parado com o sinal SIGSTOP para que ele continue a executar.
SIGSTOP19É um sinal que pode ser enviado para um processo parar de funcionar momentaneamente. Ele continua existindo, mas não recebe mais CPU para executar, até que receba o sinal SIGCONT.
SIGTSTP20Termina a execução para continuar depois. Este sinal é enviado automaticamente quando utilizamos as teclas ctrl-z. É utilizado para colocar o processo em segundo plano.

O Linux possui mais de 30 sinais definidos. A maioria é utilizada pelo Kernel e alguns pelos usuários em situações específicas.

O entendimento de sinais é importante para sabermos como o sistema interage com os processos em execução. Os comandos kill e killall podem ser usados para enviar sinais específicos para um processo em execução.

A maioria dos administradores ao parar um processo, usa o SIGKILL. No entanto, este sinal é muito “forte”, pois faz uma parada abrupta no processo em execução, e pode deixar arquivos abertos, indexes malfeitos, e dados corrompidos. É melhor usar o sinal SIGTERM, que permite que o programa termine elegantemente, fechando os arquivos, indexes e bases de dados.

O Linux permite que os usuários enviem sinais para os programas em execução através do comando kill.

Aprenda muito mais sobre Linux em nosso curso online. Você pode efetuar a matrícula aqui. Se você já tem uma conta, ou quer criar uma, basta entrar ou criar seu usuário aqui.

Gostou? Compartilhe

Open chat