Cara membaca dan mengubah nilai parameter kernel menggunakan sysctl

Cara membaca dan mengubah nilai parameter kernel menggunakan sysctl

Sysctl adalah utilitas yang dipasang secara default di semua distribusi Linux modern. Ini digunakan untuk membaca dan menulis nilai parameter kernel saat runtime; Parameter yang tersedia adalah yang terdaftar di bawah /Proc sistem semu-pseudo, dan khususnya di bawah /proc/sys direktori. Dalam artikel ini kita belajar cara menggunakan utilitas ini, cara membuat perubahan bertahan reboot, dan cara memuat pengaturan dari file "secara manual".

Dalam tutorial ini Anda akan belajar:

  • Cara membaca nilai parameter kernel
  • Cara memodifikasi nilai parameter kernel saat runtime
  • Cara membuat perubahan bertahan reboot
  • Cara memuat pengaturan dari file secara manual
Cara membaca dan mengubah nilai parameter kernel menggunakan sysctl

Persyaratan dan konvensi perangkat lunak yang digunakan

Persyaratan Perangkat Lunak dan Konvensi Baris Perintah Linux
Kategori Persyaratan, konvensi atau versi perangkat lunak yang digunakan
Sistem Distribusi Independen
Perangkat lunak sysctl
Lainnya Hak istimewa root untuk memodifikasi parameter kernel
Konvensi # - mensyaratkan Linux -Commands untuk dieksekusi dengan hak istimewa root baik secara langsung sebagai pengguna root atau dengan menggunakan sudo memerintah
$-mensyaratkan Linux-Commands untuk dieksekusi sebagai pengguna reguler yang tidak istimewa

Membaca Nilai Kernel

Perilaku kernel Linux dapat diubah dengan memodifikasi nilai beberapa parameter, bahkan saat runtime. Parameter yang tersedia adalah yang dapat diakses melalui /Proc sistem semu, di bawah /proc/sys direktori. Kita bisa menggunakan pohon Perintah untuk mendapatkan ide tentang kontennya:

$ tree /proc /sys /proc /sys ├── abi │ └── vsyscall32 ├── crypto │ └── fips_enabled ├── debug │ ├── kecuali │ └ └ ─ uman ilangan │ ├── cdrom │ │ ├── Autoklose │ │ ├── AutoeJek AutoeTeT │ │ ─ urs olak -├ │ ├ ─ uas tol │ │ ├ ─ ─ ─ ─ ─ ─ ─ └ └ └ └ └ ─ ─ ─ ─ ─ ─ ─ ─ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ─ ├ ├ ─ ├ ├ ├ ├ ├ ├ ├ ─ ├ ─ └ ├ ├ ├ ├ └ ├ ├ ├ ├ └ └ └ ├ ├ ├ └ └ ├ ├ └ ├ ├ └ └ └ └ └ ├ └ ├ └ └ └ └ └ └ └ └ └ └ └ └ └ └ └ └ ─ MAX-USER-FREQ │ ├── i915 │ │ ├── oA_max_sample_rate │ │ └ ─ urstream_paranoid │ ├ ├ │ │ └ └ └ │ └ └ │ └ └ └ └ └ │ └ └ │ └ └ └ └ └ └ └ └ └ └ └ └ │ └ └ └ └ └ └ └ └ │ └ └ └ └ └ └ └ └ └ └ └ └ └ └ └ └ └ └ └ │ └ └ └ RAID │ │ ├── speed_limit_max │ │ └── speed_limit_min │ ├── scsi │ └ └── ilangan olaket │ └ └ ─ ─ └ └ ─ potin ilangan ldisc_autoload [… 


Output dari perintah di atas dipotong karena alasan yang jelas, tetapi memberikan gambaran tentang apa yang kita bicarakan. Saat sysctl dipanggil dengan -A opsi, (pendek untuk --semua), ini mencetak nilai semua parameter kernel yang tersedia:

$ sysctl sysctl -a abi.vsyscall32 = 1 crypto.fips_enabled = 0 debug.Pengecualian-jejak = 1 debug.kprobes-optimization = 1 dev.CD ROM.autoclose = 1 dev.CD ROM.Autoeject = 0 dev.CD ROM.check_media = 0 […] 

Jika kita ingin membaca nilai parameter tertentu, yang harus kita lakukan adalah memohon sysctl dan memberikan nama parameter yang ingin kami periksa nilainya sebagai argumen. Misalnya, untuk membaca nilai serangan saat ini speed_limit_max parameter, yang tertulis di /proc/sys/dev/raid/speed_limit_max file, kami akan menjalankan:

$ sysctl dev.serangan.speed_limit_max dev.serangan.speed_limit_max = 200000 

Ketika menggunakan sysctl Dalam skrip, atau saat menggunakan outputnya dalam pipa, kami mungkin ingin menjalankannya dengan -N opsi, yang merupakan bentuk pendek dari (--nilai). Opsi ini hanya membuat nilai saat ini dari parameter yang diminta
dikembalikan saat kueri dilakukan; Nama kunci dihilangkan:

$ sysctl -n dev.serangan.speed_limit_max 200000 

Memodifikasi parameter kernel

Sama seperti kita dapat membaca parameter kernel, kita dapat mengubah nilainya saat runtime menggunakan sysctl. Sintaks yang akan digunakan saat kita ingin melakukan tindakan seperti itu, sangat sederhana:

variabel sysctl = nilai 

Kami cukup memohon perintah dan memberikan nama variabel dan nilai yang ingin kami tetapkan untuk itu. Meskipun kita tidak perlu hak istimewa yang ditinggikan untuk membaca nilai parameter kernel, kita perlu mengawali perintah dengan sudo (atau menjalankannya sebagai pengguna root secara langsung) untuk mengubah nilainya. Hanya sebagai contoh, anggaplah kita ingin mengubah nilai dev.CD ROM.AutoeTek dan atur ke 1; Kami akan menulis:

$ sudo sysctl dev.CD ROM.Autoeject = 1 

Ketika kita mengubah nilai parameter kernel, jika perintah dieksekusi dengan benar, set nilai ditampilkan ke stdout (output standar). Sebagai output dari perintah yang digunakan dalam contoh di atas, kita akan melihat:

dev.CD ROM.Autoeject = 1 


Perilaku seperti itu dapat diubah dengan memohon sysctl dengan -Q opsi (pendek untuk --diam).

Membuat perubahan bertahan reboot

Modifikasi yang kami buat dengan sysctl saat runtime tidak gigih, dan akan hilang saat kami mem -boot ulang sistem. Untuk membuat perubahan bertahan dari acara seperti itu, kita perlu menulisnya dalam file di salah satu direktori khusus. Apa itu
direktori? Dalam urutan prioritas:

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

File yang hosting pengaturan harus memiliki .conf ekstensi dan diurutkan dan dimuat saat boot oleh Systemd-Sysctl layanan, di Leksikografi pesanan, tidak peduli direktori tempat mereka ditempatkan.

Jika file dengan nama yang sama ada di beberapa direktori, hanya pengaturan yang ada di yang ditempatkan di direktori dengan prioritas yang lebih tinggi akan dimuat. Ini pada dasarnya berarti bahwa jika kita ingin mengganti file sepenuhnya, kita harus menempatkan file dengan nama yang sama di direktori dengan prioritas yang lebih tinggi; Jika kami ingin mengubah pengaturan tertentu, sebagai gantinya, kami dapat memilih untuk menulisnya dalam file dengan nama yang akan menyebabkannya dimuat setelah yang di mana parameternya awalnya diatur.



Itu /usr/lib/sysctl.D Direktori dimaksudkan untuk meng -host pengaturan "vendor", kita jarang mengubah isinya. Dalam sebagian besar kasus kami ingin menempatkan file kami di dalam /etc/sysctl.D direktori, yang dicadangkan untuk perubahan yang dilakukan
oleh administrator sistem.

Mari kita lihat contohnya. Misalkan kita ingin mengubah kernel Swappiness nilai. Seperti yang kita ketahui, nilai parameter ini menentukan seberapa sering kernel Linux menyalin Ram Konten ke ruang swap. Kisaran nilai yang dapat ditetapkan untuk parameter ini 0 ke 100: Nilai yang lebih tinggi berarti penggunaan pertukaran yang lebih sering dan agresif. Untuk mengubah nilai parameter ini secara permanen, kami membuat /etc/sysctl.d/99-swappiness.conf mengajukan; Di dalamnya kami menulis:

vm.Swappiness = 1 

Karena, seperti yang kami katakan, file dimuat dalam urutan leksikografi, karena namanya, kami dapat yakin file tersebut akan dimuat cukup akhir -akhir ini, dan pengaturannya akan diterapkan seperti yang diharapkan.

Muat pengaturan dari file secara manual

Karena di sini kita melihat cara mengubah nilai parameter kernel saat runtime, dan bagaimana membuat perubahan bertahan reboot dengan menulisnya dalam file dengan .conf perpanjangan. Bagaimana jika kita ingin memuat pengaturan yang ditulis di dalam file "secara manual", tanpa perlu me -reboot sistem dan tanpa memuat ulang Systemd-Sysctl melayani? Yang harus kita lakukan adalah memohon sysctl dengan -P pilihan (--memuat) dan lewati jalur file yang menampung pengaturan sebagai argumen. Sama seperti sebuah contoh, misalkan kita ingin memuat konten /etc/sysctl.d/99-swappiness.conf file yang kami buat di contoh sebelumnya; Kami akan menjalankan:

$ sudo sysctl -p /etc /sysctl.d/99-swappiness.conf 

Jika sysctl dipanggil dengan -P opsi, tetapi tidak ada argumen yang disediakan, memuat pengaturan dari /etc/sysctl.conf file (symlink yang menunjuk ke file ini, bernama 99-SYSCTL.conf ada di /etc/sysctl.D direktori).

Kesimpulan

Dalam artikel ini kami belajar cara menggunakan sysctl utilitas untuk membaca dan mengubah nilai beberapa parameter kernel saat runtime. Kami juga melihat cara membuat perubahan pada parameter ini bertahan reboot, dengan menulisnya dalam file dengan .conf ekstensi, yang seharusnya ditempatkan di direktori tertentu, dan cara memuat pengaturan yang ditulis dalam file "secara manual". Dengan mengubah nilai parameter kernel, kita dapat mengubah sistem kita dan membuatnya bekerja persis seperti yang kita butuhkan. Kita dapat, misalnya, seperti yang kita lihat dalam tutorial sebelumnya, memungkinkan semua atau beberapa fungsi sysrq.

Tutorial Linux Terkait:

  • Pengantar Otomatisasi Linux, Alat dan Teknik
  • Hal -hal yang harus diinstal pada ubuntu 20.04
  • Menguasai loop skrip bash
  • Mint 20: Lebih baik dari Ubuntu dan Microsoft Windows?
  • Cara mengoptimalkan masa pakai baterai laptop dengan TLP di Linux
  • Tutorial debugging GDB untuk pemula
  • Hal -hal yang harus dilakukan setelah menginstal ubuntu 20.04 FOSSA FOSSA Linux
  • Seberapa sering Anda harus me -reboot server linux Anda?
  • Cara Dual Boot Kali Linux dan Windows 10
  • Loop bersarang dalam skrip bash