Cara Membaca dan Mengubah Nilai Parameter Kernel Menggunakan SYSCTL
- 5010
- 808
- Marcus Kassulke
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
Keperluan perisian dan konvensyen yang digunakan
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
- « Mint 20 lebih baik daripada Ubuntu dan Microsoft Windows?
- Cara Menggunakan Perintah TCPDUMP di Linux »