Na Parte 13 desta série LFCS (Linux Foundation Certified Sysadmin), explicamos como usar o GRUB para modificar o comportamento do sistema passando opções para o kernel durante o processo de inicialização em curso.
Da mesma forma, você pode usar a linha de comando em um sistema Linux em execução para alterar certos parâmetros do kernel em tempo de execução como uma modificação única, ou permanentemente editando um arquivo de configuração.
Assim, você pode habilitar ou desabilitar parâmetros do kernel rapidamente quando necessário devido a uma mudança necessária na forma como se espera que o sistema opere.
Introduzindo o Sistema de Arquivos /proc
A última especificação do Padrão de Hierarquia de Sistema de Arquivos indica que /proc
representa o método padrão para lidar com informações de processos e sistema, bem como outras informações de kernel e memória. Especificamente, /proc/sys
é onde você pode encontrar todas as informações sobre dispositivos, drivers e alguns recursos do kernel.
A estrutura interna real de /proc/sys
depende fortemente do kernel em uso, mas é provável que você encontre os seguintes diretórios dentro dele. Por sua vez, cada um deles conterá outros subdiretórios onde os valores para cada categoria de parâmetros são mantidos:
dev
: parâmetros para dispositivos específicos conectados à máquina.fs
: configuração do sistema de arquivos (cotas e inodes, por exemplo).- kernel: configuração específica do kernel.
net
: configuração de rede.vm
: uso da memória virtual do kernel.
Para modificar os parâmetros de tempo de execução do kernel, usaremos o comando sysctl
. O número exato de parâmetros que podem ser modificados pode ser visualizado com:
# sysctl -a | wc -l
Se deseja visualizar a lista completa de parâmetros do Kernel, basta fazer:
# sysctl -a
Como a saída do comando acima consistirá de MUITAS linhas, podemos usar um pipeline seguido de less para inspecioná-lo mais cuidadosamente:
# sysctl -a | less
Vamos dar uma olhada nas primeiras linhas. Por favor, note que os primeiros caracteres em cada linha correspondem aos nomes dos diretórios dentro de /proc/sys
:

Por exemplo, a linha destacada:
dev.cdrom.info = drive name: sr0
indica que sr0
é um alias para a unidade óptica. Em outras palavras, é assim que o kernel “vê” essa unidade e usa esse nome para se referir a ela.
Na seção a seguir, explicaremos como alterar outros parâmetros de tempo de execução do kernel “mais importantes” no Linux.
Como Alterar ou Modificar Parâmetros de Tempo de Execução do Kernel Linux
Com base no que explicamos até agora, é fácil ver que o nome de um parâmetro corresponde à estrutura de diretórios dentro de /proc/sys
onde ele pode ser encontrado.
Por exemplo:
dev.cdrom.autoclose → /proc/sys/dev/cdrom/autoclose net.ipv4.ip_forward → /proc/sys/net/ipv4/ip_forward
Verificar Parâmetros do Kernel Linux
Dito isso, podemos visualizar o valor de um parâmetro específico do kernel do Linux usando tanto sysctl
seguido pelo nome do parâmetro ou lendo o arquivo associado:
# sysctl dev.cdrom.autoclose # cat /proc/sys/dev/cdrom/autoclose # sysctl net.ipv4.ip_forward # cat /proc/sys/net/ipv4/ip_forward

Definir ou Modificar Parâmetros do Kernel do Linux
Para definir o valor de um parâmetro do kernel também podemos usar sysctl
, mas usando a opção -w
e seguido pelo nome do parâmetro, o sinal de igual e o valor desejado.
Outro método consiste em usar echo
para sobrescrever o arquivo associado ao parâmetro. Em outras palavras, os métodos a seguir são equivalentes para desativar a funcionalidade de encaminhamento de pacotes em nosso sistema (o que, aliás, deve ser o valor padrão quando uma caixa não deve passar tráfego entre redes):
# echo 0 > /proc/sys/net/ipv4/ip_forward # sysctl -w net.ipv4.ip_forward=0
É importante notar que os parâmetros do kernel definidos usando sysctl
só serão aplicados durante a sessão atual e desaparecerão quando o sistema for reiniciado.
Para definir esses valores permanentemente, edite /etc/sysctl.conf
com os valores desejados. Por exemplo, para desativar o encaminhamento de pacotes em /etc/sysctl.conf certifique-se de que esta linha apareça no arquivo:
net.ipv4.ip_forward=0
Em seguida, execute o seguinte comando para aplicar as alterações à configuração em execução.
# sysctl -p
Outros exemplos de parâmetros importantes em tempo de execução do kernel são:
fs.file-max
especifica o número máximo de identificadores de arquivo que o kernel pode alocar para o sistema. Dependendo do uso pretendido do seu sistema (servidor web / banco de dados / de arquivos, para citar alguns exemplos), você pode querer alterar esse valor para atender às necessidades do sistema.
Demasiados ficheiros abertos
Se, por engano inocente, se encontrar nesta última situação, inicie em modo de utilizador único (conforme explicado na Parte 13 – Configurar e Resolver Problemas do Carregador de Arranque do Linux Grub) e edite o /etc/sysctl.conf conforme instruído anteriormente. Para aplicar a mesma restrição numa base por utilizador, consulte a Parte 14 – Monitorizar e Definir a Utilização do Limite de Processos do Linux desta série.
kernel.sysrq
é utilizado para ativar a tecla SysRq no seu teclado (também conhecida como tecla de impressão de ecrã) de forma a permitir que certas combinações de teclas invoquem ações de emergência quando o sistema ficar sem resposta.
O valor predefinido (16) indica que o sistema irá respeitar a combinação de teclas Alt+SysRq+tecla
e executar as ações listadas na documentação sysrq.c encontrada em kernel.org (onde a tecla é uma letra no intervalo de b-z). Por exemplo, Alt+SysRq+b
irá reiniciar o sistema de forma forçada (utilize isto como último recurso se o seu servidor estiver sem resposta).
Aviso! Não tente pressionar essa combinação de teclas em uma máquina virtual, pois pode forçar o seu sistema hospedeiro a reiniciar!
Ao definir 1, net.ipv4.icmp_echo_ignore_all irá ignorar solicitações de ping e descartá-las no nível do kernel. Isso é mostrado na imagem abaixo – observe como as solicitações de ping são perdidas após definir esse parâmetro do kernel:

A better and easier way to set individual runtime parameters is using .conf files inside /etc/sysctl.d
, grouping them by categories.
Por exemplo, em vez de definir net.ipv4.ip_forward=0 e net.ipv4.icmp_echo_ignore_all=1 em /etc/sysctl.conf, podemos criar um novo arquivo chamado net.conf
dentro de /etc/sysctl.d:
# echo "net.ipv4.ip_forward=0" > /etc/sysctl.d/net.conf # echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.d/net.conf
Se você optar por usar essa abordagem, não se esqueça de remover essas mesmas linhas de /etc/sysctl.conf
.
Resumo
Neste artigo, explicamos como modificar os parâmetros de tempo de execução do kernel, tanto de forma persistente quanto não persistente, usando sysctl, /etc/sysctl.conf e arquivos dentro de /etc/sysctl.d.
Nos documentos do sysctl, você pode encontrar mais informações sobre o significado de mais variáveis. Esses arquivos representam a fonte mais completa de documentação sobre os parâmetros que podem ser definidos via sysctl.
Você achou este artigo útil? Esperamos que sim. Não hesite em nos informar se tiver alguma pergunta ou sugestão para melhorar.
Source:
https://www.tecmint.com/change-modify-linux-kernel-runtime-parameters/