Hỏi theo phong cách CCGU:
# whatis sysctlHiển thị 1 parameter có tên là net.ipv4.ip_forward (để cho phép forward gói tin) :
sysctl (8) - configure kernel parameters at runtime
# whereis sysctl
sysctl: /sbin/sysctl /etc/sysctl.d /etc/sysctl.conf /usr/share/man/man8/sysctl.8.gz
# sysctl net.ipv4.ip_forwardThay đổi giá trị của parameter nói trên:
net.ipv4.ip_forward = 0
# sysctl -w net.ipv4.ip_forward=1Các settings của sysctl nằm ở /etc/sysctl.conf và có thể trong thư mục /etc/sysctl.d, để thay đổi có hiệu lực cả sau khi reboot, cần sửa các file này thay vì set trực tiếp bằng sysctl.
net.ipv4.ip_forward = 1
Các parameter mà sysctl thao tác được liệt kê ở dạng file tại thư mục /proc/sys.
Option: -a hiển thị tất cả các tham số hiện tại sẵn sàng
# find /proc/sys -type f | wc -l # đếm số file trong /proc/sysCó một chút chênh lệch về số lượng ở đây, lý do có sự chênh lệch này là do output của sysctl có nhiều giá trị khác nhau cho cùng 1 parameter:
693
# sysctl -a | wc -l
error: permission denied on key 'net.ipv4.route.flush'
error: permission denied on key 'net.ipv6.route.flush'
error: permission denied on key 'vm.compact_memory'
713
Option: -N chỉ hiển thị phần tên của key, không hiển thị giá trị
# sysctl -N -a 2>/dev/null | uniq -c | sort -nr | head -n3loại đi những giá trị bị trùng lặp, ta có:
24 dev.cdrom.info
1 vm.vfs_cache_pressure
1 vm.vdso_enabled
root@integration-ubuntu:~# sysctl -N -a | uniq | wc -lLý do 3 key bị permission denied vì các file tương ứng không cho phép đọc, chỉ được ghi :
error: permission denied on key 'net.ipv4.route.flush'
error: permission denied on key 'net.ipv6.route.flush'
error: permission denied on key 'vm.compact_memory'
690 # +3 = 693
# ls -l /proc/sys/net/ipv4/route/flushChú ý, sysctl có option -A nhưng có vẻ như tác dụng của nó giống hệt -a:
--w------- 1 root root 0 Dec 10 12:22 /proc/sys/net/ipv4/route/flush
# diff <(sysctl -a 2>/dev/null) <(sysctl -A 2>/dev/null)Phân nhóm các parameter:
145c145
< kernel.random.uuid = 0385f986-31fe-436f-91cb-6174e8ea362b
---
> kernel.random.uuid = b2621216-76bb-4ade-bb3b-daa28ea8af52
# sysctl -N -a 2>/dev/null | cut -d'.' -f1 | uniq -cVậy như kết quả trên cho thấy, có 492 key có thể thay đổi cho net (liên quan đến network), 110 thay đổi các tính năng chung của kernel và phần còn lại cho vm (virtual memory subsystem), dev, fs, debug.
2 debug
38 dev
34 fs
110 kernel
492 net
37 vm
Giải thích nhanh về các subdir của /proc/sys (số lượng subdir này phụ thuộc vào platform phần cứng mà OS của bạn đang chạy) :
abi/ execution domains & personalities debug/ <empty> dev/ device specific information (eg dev/cdrom/info) fs/ specific filesystems filehandle, inode, dentry and quota tuning binfmt_misc <Documentation/binfmt_misc.txt> kernel/ global kernel info / tuning miscellaneous stuff net/ networking stuff, for documentation look in: <Documentation/networking/> proc/ <empty> sunrpc/ SUN Remote Procedure Call (NFS) vm/ memory management tuning buffer and cache management
Bài viết thực hiện trên:
# uname -r; lsb_release -d# dpkg-query -s `dpkg -S $(which sysctl) | cut -d: -f1` | grep Desc -A5
3.13.0-30-generic
Description: Ubuntu 12.04.4 LTS
Description: /proc file system utilities
This package provides command line and full screen utilities for browsing
procfs, a "pseudo" file system dynamically generated by the kernel to
provide information about the status of entries in its process table
(such as whether the process is running, stopped, or a "zombie").
Tham khảo: https://www.kernel.org/doc/Documentation/sysctl/
Theo man 1 sysctl, khi thay đổi một giá trị cần dùng thêm -w nhưng theo code của sysctl, -w hay "X=Y" có giá trị như nhau:
https://gitorious.org/procps/procps/source/2ec9f5c22e3eeaf4da514e0e6ec9374cfdbb9a99%3asysctl.c#L804
Nhưng vì doc là tiêu chuẩn với người dùng nên để cho an toàn, tốt nhất hãy sử dụng
sysctl -w X=Ykhi muốn thay đổi một parameter.
Chú ý, trên các hệ thống không phải Linux (vd: BSDs ...) vẫn có sysctl và tác dụng tương tự.
updated on "-w" option and "-w vs X=Y"
ReplyDelete