Cara Membaca dan Mengubah Nilai Parameter Kernel Menggunakan SYSCTL

Cara Membaca dan Mengubah Nilai Parameter Kernel Menggunakan SYSCTL

SYSCTL adalah utiliti yang dipasang secara lalai dalam semua pengagihan Linux moden. Ia digunakan untuk membaca dan menulis nilai parameter kernel semasa runtime; parameter yang ada adalah yang disenaraikan di bawah /Proc pseudo-filesystem, dan khusus di bawah /Proc/Sys direktori. Dalam artikel ini kita belajar cara menggunakan utiliti ini, bagaimana untuk membuat perubahan berterusan reboot, dan bagaimana memuatkan tetapan dari fail "secara manual".

Dalam tutorial ini anda akan belajar:

  • Cara membaca nilai parameter kernel
  • Cara mengubahsuai nilai parameter kernel semasa runtime
  • Cara membuat perubahan berterusan reboot
  • Cara memuatkan tetapan dari fail secara manual
Cara Membaca dan Mengubah Nilai Parameter Kernel Menggunakan SYSCTL

Keperluan perisian dan konvensyen yang digunakan

Keperluan Perisian dan Konvensyen Talian Perintah Linux
Kategori Keperluan, konvensyen atau versi perisian yang digunakan
Sistem Pengedaran bebas
Perisian sysctl
Yang lain Keistimewaan Root untuk Mengubah Parameter Kernel
Konvensyen # - Memerlukan komando linux yang diberikan untuk dilaksanakan dengan keistimewaan akar sama ada secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah
$-memerlukan komando Linux yang diberikan sebagai pengguna yang tidak berkadar biasa

Membaca nilai kernel

Tingkah laku kernel Linux dapat diubah dengan mengubah nilai beberapa parameter, walaupun pada waktu runtime. Parameter yang ada adalah yang boleh diakses melalui /Proc pseudo-filesystem, di bawah /Proc/Sys direktori. Kita boleh menggunakan pokok Perintah untuk mendapatkan idea kandungannya:

$ pohon /proc /sys /proc /sys ├── abi │ └── vsyscall32 ├── crypto │ └ ── fips_enabled ├── debug │ ├ ├iku-jejak │ └── kprobes-pengoptimuman ├── │ ├── Cdrom │ │ ├ ├── Autoclose │ │ ├── Autoeject │ │ ├ ├ ─ ─ │ │ │ │ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │─ ─ max-user-freq │ ├── i915 │ │ ├── oa_max_sample_rate │ │ └ └iku perf_stream_paranoid │ ├ ├ ─ ─ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ RAID │ │ ├── Speed_Limit_Max │ │ └── Speed_limit_min │ ├ ├iku scsi │ │ └── Logging_level │ └── Tty │ └── Ldisc_autoload [.. 


Output arahan di atas dipotong kerana alasan yang jelas, tetapi memberi gambaran tentang apa yang kita bicarakan. Apabila sysctl dipanggil dengan -a pilihan, (pendek untuk --semua), ia mencetak nilai semua parameter kernel yang ada:

$ sysctl sysctl -a abi.vsyscall32 = 1 crypto.fips_enabled = 0 debug.Pengecualian-Jejak = 1 Debug.pengoptimuman kprobes = 1 dev.cdrom.Autoclose = 1 Dev.cdrom.Autoeject = 0 Dev.cdrom.check_media = 0 [...] 

Sekiranya kita mahu membaca nilai parameter tertentu, yang perlu kita lakukan adalah memohon sysctl dan berikan nama parameter yang kami ingin periksa nilai sebagai argumen. Contohnya, untuk membaca nilai semasa serangan speed_limit_max parameter, yang ditulis dalam /proc/sys/dev/raid/speed_limit_max fail, kami akan menjalankan:

$ sysctl dev.RAID.Speed_limit_max dev.RAID.speed_limit_max = 200000 

Semasa menggunakan sysctl dalam skrip, atau apabila menggunakan output dalam saluran paip, kita mungkin mahu menjalankannya dengan -n pilihan, yang merupakan bentuk pendek (--nilai). Pilihan ini hanya menjadikan nilai semasa parameter yang diminta
kembali apabila pertanyaan dilakukan; Nama kunci ditinggalkan:

$ sysctl -n dev.RAID.Speed_limit_max 200000 

Mengubah parameter kernel

Sama seperti kita dapat membaca parameter kernel, kita boleh mengubah nilai mereka semasa runtime menggunakan sysctl. Sintaks yang akan digunakan apabila kita mahu melakukan tindakan sedemikian, sangat mudah:

pembolehubah sysctl = nilai 

Kami hanya memohon arahan dan memberikan nama pembolehubah dan nilai yang kami mahu berikan kepadanya. Walaupun kita tidak memerlukan keistimewaan yang tinggi untuk membaca nilai parameter kernel, kita perlu awalan perintah dengan sudo (atau jalankan sebagai pengguna akar secara langsung) untuk menukar nilai mereka. Sama seperti contoh, katakan kita mahu menukar nilai Dev.cdrom.Autoeject dan tetapkannya kepada 1; Kami akan menulis:

$ sudo sysctl dev.cdrom.Autoeject = 1 

Apabila kita menukar nilai parameter kernel, jika arahan dilaksanakan dengan betul, set nilai dipaparkan ke stdout (output standard). Sebagai output arahan yang digunakan dalam contoh di atas, kita akan melihat:

Dev.cdrom.Autoeject = 1 


Tingkah laku sedemikian boleh diubah dengan menggunakan sysctl dengan -q pilihan (pendek untuk --senyap).

Membuat perubahan berterusan reboot

Pengubahsuaian yang kami buat dengan SYSCTL pada masa runtime tidak berterusan, dan akan hilang apabila kita reboot sistem. Untuk membuat perubahan bertahan seperti peristiwa sedemikian, kita perlu menulisnya dalam fail di salah satu direktori yang berdedikasi. Apa benda itu
direktori? Mengikut urutan keutamaan:

  • /etc/sysctl.d
  • /RUN/SYSCTL.d
  • /usr/lib/sysctl.d

Fail yang menganjurkan tetapan mesti mempunyai .Conf sambungan dan disusun dan dimuatkan di boot oleh SystemD-Sysctl perkhidmatan, dalam Lexicographic memerintahkan, tidak kira direktori yang dimasukkan.

Sekiranya fail dengan nama yang sama ada dalam pelbagai direktori, hanya tetapan yang ada di dalam yang diletakkan di direktori dengan keutamaan yang lebih tinggi akan dimuatkan. Ini pada dasarnya bermakna bahawa jika kita mahu menimpa fail sepenuhnya, kita harus meletakkan fail dengan nama yang sama dalam direktori dengan keutamaan yang lebih tinggi; Sekiranya kita mahu menukar tetapan tertentu, sebaliknya, kita boleh memilih untuk menulisnya dalam fail dengan nama yang akan menyebabkannya dimuatkan selepas di mana parameternya pada asalnya ditetapkan.



The /usr/lib/sysctl.d Direktori dimaksudkan untuk menjadi tuan rumah tetapan "vendor", kita jarang harus mengubah kandungannya. Dalam kebanyakan kes, kami mahu meletakkan fail kami di dalam /etc/sysctl.d direktori, yang dikhaskan untuk perubahan yang dibuat
oleh pentadbir sistem.

Mari lihat contoh. Katakan kita mahu menukar kernel swappiness nilai. Seperti yang kita ketahui, nilai parameter ini menentukan seberapa kerap kernel Linux menyalin Ram kandungan ke ruang swap. Julat nilai yang boleh diberikan kepada parameter ini pergi ke 0 ke 100: Nilai yang lebih tinggi bermaksud penggunaan swap yang lebih kerap dan agresif. Untuk menukar nilai parameter ini secara kekal, kami membuat /etc/sysctl.D/99-Swappiness.Conf fail; Di dalamnya kita menulis:

VM.Swappiness = 1 

Oleh kerana, seperti yang kita katakan, fail dimuatkan dalam urutan leksikografi, kerana namanya, kita dapat memastikan fail itu akan dimuatkan agak akhir -akhir ini, dan tetapannya akan digunakan seperti yang diharapkan.

Memuatkan tetapan dari fail secara manual

Oleh kerana di sini kita melihat bagaimana mengubah nilai parameter kernel semasa runtime, dan bagaimana membuat perubahan berterusan reboot dengan menulisnya dalam fail dengan .Conf sambungan. Bagaimana jika kita mahu memuatkan tetapan yang ditulis di dalam fail "secara manual", tanpa perlu reboot sistem dan tanpa memuatkan semula SystemD-Sysctl perkhidmatan? Yang harus kita lakukan hanyalah memanggil Sysctl dengan -p pilihan (--beban) dan lulus jalan fail yang menganjurkan tetapan sebagai hujah. Sama seperti contoh, katakan kita mahu memuatkan kandungan /etc/sysctl.D/99-Swappiness.Conf fail yang kami buat dalam contoh sebelumnya; Kami akan berlari:

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

Sekiranya sysctl dipanggil dengan -p pilihan, tetapi tiada hujah yang disediakan, ia memuatkan tetapan dari /etc/sysctl.Conf fail (symlink yang menunjuk pada fail ini, dinamakan 99-SYSCTL.Conf wujud dalam /etc/sysctl.d direktori).

Kesimpulan

Dalam artikel ini kita belajar bagaimana menggunakan sysctl utiliti untuk membaca dan menukar nilai beberapa parameter kernel semasa runtime. Kami juga melihat bagaimana untuk membuat perubahan pada parameter ini berterusan reboot, dengan menulisnya dalam fail dengan .Conf lanjutan, yang harus diletakkan dalam direktori tertentu, dan bagaimana memuatkan tetapan yang ditulis dalam fail "secara manual". Dengan mengubah nilai parameter kernel, kita dapat mengubah sistem kita dan menjadikannya berfungsi dengan tepat seperti yang kita perlukan. Kita boleh, sebagai contoh, seperti yang kita lihat dalam tutorial sebelumnya, membolehkan semua atau beberapa fungsi sysrq.

Tutorial Linux Berkaitan:

  • Pengenalan kepada Automasi, Alat dan Teknik Linux
  • Perkara yang hendak dipasang di Ubuntu 20.04
  • Menguasai Gelung Skrip Bash
  • Mint 20: Lebih baik daripada Ubuntu dan Microsoft Windows?
  • Cara mengoptimumkan hayat bateri komputer riba dengan TLP di Linux
  • Tutorial Debugging GDB untuk Pemula
  • Perkara yang perlu dilakukan setelah memasang ubuntu 20.04 Focal Fossa Linux
  • Berapa kerap anda perlu reboot pelayan Linux anda?
  • Cara Dual Boot Kali Linux dan Windows 10
  • Gelung bersarang dalam skrip bash