Como ler e alterar o valor dos parâmetros do kernel usando sysctl

Como ler e alterar o valor dos parâmetros do kernel usando sysctl

SYSCTL é um utilitário instalado por padrão em todas as distribuições modernas do Linux. É usado para ler e escrever o valor dos parâmetros do kernel no tempo de execução; Os parâmetros disponíveis são os listados no /Proc Pseudo-Filesystem, e especificamente sob o /proc/sys diretório. Neste artigo, aprendemos a usar esse utilitário, como fazer as mudanças persistirem uma reinicialização e como carregar configurações de um arquivo "manualmente".

Neste tutorial, você aprenderá:

  • Como ler o valor dos parâmetros do kernel
  • Como modificar o valor dos parâmetros do kernel em tempo de execução
  • Como fazer as mudanças persistirem uma reinicialização
  • Como carregar configurações de um arquivo manualmente
Como ler e alterar o valor dos parâmetros do kernel usando sysctl

Requisitos de software e convenções usadas

Requisitos de software e convenções de linha de comando Linux
Categoria Requisitos, convenções ou versão de software usada
Sistema Distribuição Independente
Programas sysctl
Outro Privilégios de raiz para modificar os parâmetros do kernel
Convenções # - requer que os comandos linux -comidos sejam executados com privilégios de raiz diretamente como usuário root ou por uso de sudo comando
$-exige que o Linux-Commands seja executado como um usuário não privilegiado regular

Lendo valores do kernel

O comportamento do kernel Linux pode ser alterado modificando o valor de alguns parâmetros, mesmo em tempo de execução. Os parâmetros disponíveis são aqueles que podem ser acessados ​​através do /Proc Pseudo-Filesystem, sob o /proc/sys diretório. Podemos usar o árvore comando para ter uma idéia de seu conteúdo:

$ árvore /proc /sys /proc /sys ├── abi │ └── vsysCall32 ├── cripto │ ├── CDROM │ │ ├── AUTOCLOSE AUTOCLOSE │ │ ├── Autoeject │ │ ├── Check_media │ │ ├── Debug │ │ ├─— Informações │ │ └─ LoCk │sto ─ max-user-freq │ ├── i915 │ │ ├── oa_max_sample_rate │ │ └── perf_stream_paranoid │ ├── mac_hid │ │ ├── mouse_button2_keycode │ │ ├── mouse_button3_keycode │ │ └── mouse_button_emulation │ ├── RAID │ │ ├── Speed_limit_max │ │ └── Speed_limit_min │ ├── scsi │ │ └── Logging_level │ └── tty │ └─ Ldisc_autoload […] 


A saída do comando acima é truncada por razões óbvias, mas dá uma idéia do que estamos falando. Quando o sysctl é invocado com o -a opção, (abreviação de --todos), ele imprime o valor de todos os parâmetros do kernel disponíveis:

$ sysctl sysctl -a abi.vsysCall32 = 1 criptografia.fips_enabled = 0 Debug.exceção trace = 1 depuração.KProbes-otimization = 1 dev.cdrom.Autoclose = 1 dev.cdrom.Autoeject = 0 dev.cdrom.check_media = 0 […] 

Se quisermos ler o valor de um parâmetro específico, tudo o que precisamos fazer é invocar sysctl e forneça o nome do parâmetro do qual queremos verificar o valor como argumento. Por exemplo, para ler o valor atual do ataque speed_limit_max parâmetro, que é escrito no /proc/sys/dev/Raid/speed_limit_max Arquivo, nós funcionaríamos:

$ sysctl dev.ataque.speed_limit_max dev.ataque.speed_limit_max = 200000 

Ao usar sysctl Em um script, ou ao usar sua saída em um pipeline, podemos querer executá -lo com o -n opção, que é a forma curta de (--valores). Esta opção faz apenas o valor atual de um parâmetro solicitado ser
retornou quando uma consulta é realizada; O nome da chave é omitido:

$ sysctl -n dev.ataque.speed_limit_max 200000 

Modificando os parâmetros do kernel

Assim como podemos ler parâmetros do kernel, podemos alterar seus valores em tempo de execução usando sysctl. A sintaxe a ser usada quando queremos executar essa ação é muito simples:

variável sysctl = valor 

Simplesmente invocamos o comando e fornecemos o nome da variável e o valor que queremos atribuir a ele. Embora não precisemos de privilégios elevados para ler o valor dos parâmetros do kernel, precisamos prefixar o comando com sudo (ou executá -lo como usuário root diretamente) para alterar seus valores. Apenas como exemplo, suponha que queremos alterar o valor de Dev.cdrom.Autoeject e defina -o como 1; nós escrevíamos:

$ sudo sysctl dev.cdrom.Autoeject = 1 

Quando alteramos o valor de um parâmetro do kernel, se o comando for executado corretamente, o conjunto de valores será exibido para stdout (saída padrão). Como saída do comando usado no exemplo acima, veríamos:

Dev.cdrom.Autoeject = 1 


Esse comportamento pode ser alterado invocando sysctl com o -q opção (abreviação de --quieto).

Fazer mudanças persistirem uma reinicialização

A modificação que fazemos com o SYSCTL em tempo de execução não é persistente e será perdida quando reiniciarmos o sistema. Para fazer as alterações sobreviver a esse evento, precisamos escrevê -las em um arquivo em um dos diretórios dedicados. O que são aqueles
diretórios? Em ordem de prioridade:

  • /etc/sysctl.d
  • /run/sysctl.d
  • /usr/lib/sysctl.d

Os arquivos que hospedam as configurações devem ter o .conf extensão e são classificados e carregados na inicialização pelo systemd-sysctl serviço, em Lexicográfico Ordem, independentemente do diretório em que sejam colocados.

Se existir um arquivo com o mesmo nome em vários diretórios, apenas as configurações existentes naquele colocado no diretório com a prioridade mais alta serão carregadas. Isso basicamente significa que, se quisermos substituir completamente um arquivo, devemos colocar um arquivo com o mesmo nome em um diretório com uma prioridade mais alta; Se quisermos alterar uma configuração específica, em vez disso, poderíamos optar por escrevê -lo em um arquivo com um nome que fará com que ele seja carregado após aquele em que o parâmetro em que é originalmente definido.



O /usr/lib/sysctl.d Diretório deve hospedar configurações de “fornecedor”, raramente devemos alterar seu conteúdo. Na grande maioria dos casos, queremos colocar nossos arquivos dentro do /etc/sysctl.d diretório, que é reservado para alterações feitas
pelo administrador do sistema.

Vamos ver um exemplo. Suponha que queremos mudar o kernel Swappiness valor. Como sabemos, o valor deste parâmetro determina com que frequência o kernel linux copia o BATER conteúdo para o espaço de troca. A gama de valores que podem ser atribuídos a este parâmetro vai para 0 para 100: Um valor mais alto significa um uso de troca mais frequente e agressivo. Para alterar o valor deste parâmetro permanentemente, criamos o /etc/sysctl.D/99-Swappiness.conf arquivo; dentro dele, escrevemos:

vm.Swappiness = 1 

Como, como dissemos, os arquivos são carregados em ordem lexicográfica, devido ao seu nome, podemos ter certeza de que o arquivo será carregado ultimamente e, portanto, a configuração será aplicada conforme o esperado.

Carregue as configurações de um arquivo manualmente

Desde aqui, vimos como alterar o valor dos parâmetros do kernel em tempo de execução, e como fazer as mudanças persistirem uma reinicialização, escrevendo -os em arquivos com o .conf extensão. E se quisermos carregar configurações escritas dentro de um arquivo "manualmente", sem a necessidade de reiniciar o sistema e sem recarregar o systemd-sysctl serviço? Tudo o que precisamos fazer é invocar Sysctl com o -p opção (--carregar) e passe no caminho do arquivo que hospeda as configurações como argumento. Apenas como exemplo, suponha que queremos carregar o conteúdo do /etc/sysctl.D/99-Swappiness.conf arquivo que criamos no exemplo anterior; nós funcionaríamos:

$ sudo sysctl -p /etc /sysctl.D/99-Swappiness.conf 

Se sysctl for invocado com o -p opção, mas nenhum argumento é fornecido, ele carrega configurações do /etc/sysctl.conf Arquivo (um link simbólico que aponta para este arquivo, denominado 99-SYSCTL.conf existe no /etc/sysctl.d diretório).

Conclusões

Neste artigo, aprendemos a usar o sysctl utilidade para ler e alterar o valor de alguns parâmetros do kernel no tempo de execução. Também vimos como fazer alterações nesses parâmetros persistirem uma reinicialização, escrevendo -os em arquivos com o .conf Extensão, que deve ser colocada em diretórios específicos, e como carregar configurações escritas em um arquivo "manualmente". Ao alterar o valor dos parâmetros do kernel, podemos ajustar nosso sistema e fazê -lo funcionar exatamente como precisamos. Podemos, por exemplo, como vimos em um tutorial anterior, ativar todas ou algumas das funções SYSRQ.

Tutoriais do Linux relacionados:

  • Uma introdução à automação, ferramentas e técnicas do Linux
  • Coisas para instalar no Ubuntu 20.04
  • Mastering Bash Script Loops
  • Mint 20: Melhor que o Ubuntu e o Microsoft Windows?
  • Como otimizar a duração da bateria do laptop com TLP no Linux
  • Tutorial de depuração do GDB para iniciantes
  • Coisas para fazer depois de instalar o Ubuntu 20.04 fossa focal linux
  • Com que frequência você tem que reiniciar seu servidor Linux?
  • Como fazer bota dupla kali linux e windows 10
  • Loops aninhados em scripts de basquete