1. 請教linux的啟動過程
第一步、載入內核
操作系統接管硬體以後,首先讀入 /boot 目錄下的內核文件。
以我的電腦為例,/boot 目錄下面大概是這樣一些文件:
$ ls /boot
config-3.2.0-3-amd64
config-3.2.0-4-amd64
grub
initrd.img-3.2.0-3-amd64
initrd.img-3.2.0-4-amd64
System.map-3.2.0-3-amd64
System.map-3.2.0-4-amd64
vmlinuz-3.2.0-3-amd64
vmlinuz-3.2.0-4-amd64
第二步、啟動初始化進程
內核文件載入以後,就開始運行第一個程序 /sbin/init,它的作用是初始化系統環境。
由於init是第一個運行的程序,它的進程編號(pid)就是1。其他所有進程都從它衍生,都是它的子進程。
第三步、確定運行級別
許多程序需要開機啟動。它們在Windows叫做"服務"(service),在Linux就叫做"守護進程"(daemon)。
init進程的一大任務,就是去運行這些開機啟動的程序。但是,不同的場合需要啟動不同的程序,比如用作伺服器時,需要啟動Apache,用作桌面就不需要。Linux允許為不同的場合,分配不同的開機啟動程序,這就叫做"運行級別"(runlevel)。也就是說,啟動時根據"運行級別",確定要運行哪些程序。
Linux預置七種運行級別(0-6)。一般來說,0是關機,1是單用戶模式(也就是維護模式),6是重啟。運行級別2-5,各個發行版不太一樣,對於Debian來說,都是同樣的多用戶模式(也就是正常模式)。
init進程首先讀取文件 /etc/inittab,它是運行級別的設置文件。如果你打開它,可以看到第一行是這樣的:
id:2:initdefault:
initdefault的值是2,表明系統啟動時的運行級別為2。如果需要指定其他級別,可以手動修改這個值。
那麼,運行級別2有些什麼程序呢,系統怎麼知道每個級別應該載入哪些程序呢?......回答是每個運行級別在/etc目錄下面,都有一個對應的子目錄,指定要載入的程序。
/etc/rc0.d
/etc/rc1.d
/etc/rc2.d
/etc/rc3.d
/etc/rc4.d
/etc/rc5.d
/etc/rc6.d
上面目錄名中的"rc",表示run command(運行程序),最後的d表示directory(目錄)。下面讓我們看看 /etc/rc2.d 目錄中到底指定了哪些程序。
$ ls /etc/rc2.d
README
S01motd
S13rpcbind
S14nfs-common
S16binfmt-support
S16rsyslog
S16sudo
S17apache2
S18acpid
...
可以看到,除了第一個文件README以外,其他文件名都是"字母S+兩位數字+程序名"的形式。字母S表示Start,也就是啟動的意思(啟動腳本的運行參數為start),如果這個位置是字母K,就代表Kill(關閉),即如果從其他運行級別切換過來,需要關閉的程序(啟動腳本的運行參數為stop)。後面的兩位數字表示處理順序,數字越小越早處理,所以第一個啟動的程序是motd,然後是rpcbing、nfs......數字相同時,則按照程序名的字母順序啟動,所以rsyslog會先於sudo啟動。
這個目錄里的所有文件(除了README),就是啟動時要載入的程序。如果想增加或刪除某些程序,不建議手動修改 /etc/rcN.d 目錄,最好是用一些專門命令進行管理(參考這里和這里)。
第四步、載入開機啟動程序
前面提到,七種預設的"運行級別"各自有一個目錄,存放需要開機啟動的程序。不難想到,如果多個"運行級別"需要啟動同一個程序,那麼這個程序的啟動腳本,就會在每一個目錄里都有一個拷貝。這樣會造成管理上的困擾:如果要修改啟動腳本,豈不是每個目錄都要改一遍?
Linux的解決辦法,就是七個 /etc/rcN.d 目錄里列出的程序,都設為鏈接文件,指向另外一個目錄 /etc/init.d ,真正的啟動腳本都統一放在這個目錄中。init進程逐一載入開機啟動程序,其實就是運行這個目錄里的啟動腳本。
下面就是鏈接文件真正的指向。
$ ls -l /etc/rc2.d
README
S01motd -> ../init.d/motd
S13rpcbind -> ../init.d/rpcbind
S14nfs-common -> ../init.d/nfs-common
S16binfmt-support -> ../init.d/binfmt-support
S16rsyslog -> ../init.d/rsyslog
S16sudo -> ../init.d/sudo
S17apache2 -> ../init.d/apache2
S18acpid -> ../init.d/acpid
...
這樣做的另一個好處,就是如果你要手動關閉或重啟某個進程,直接到目錄 /etc/init.d 中尋找啟動腳本即可。比如,我要重啟Apache伺服器,就運行下面的命令:
$ sudo /etc/init.d/apache2 restart
/etc/init.d 這個目錄名最後一個字母d,是directory的意思,表示這是一個目錄,用來與程序 /etc/init 區分。
第五步、用戶登錄
開機啟動程序載入完畢以後,就要讓用戶登錄了。
一般來說,用戶的登錄方式有三種:
(1)命令行登錄
(2)ssh登錄
(3)圖形界面登錄
這三種情況,都有自己的方式對用戶進行認證。
(1)命令行登錄:init進程調用getty程序(意為get teletype),讓用戶輸入用戶名和密碼。輸入完成後,再調用login程序,核對密碼(Debian還會再多運行一個身份核對程序/etc/pam.d/login)。如果密碼正確,就從文件 /etc/passwd 讀取該用戶指定的shell,然後啟動這個shell。
(2)ssh登錄:這時系統調用sshd程序(Debian還會再運行/etc/pam.d/ssh ),取代getty和login,然後啟動shell。
(3)圖形界面登錄:init進程調用顯示管理器,Gnome圖形界面對應的顯示管理器為gdm(GNOME Display Manager),然後用戶輸入用戶名和密碼。如果密碼正確,就讀取/etc/gdm3/Xsession,啟動用戶的會話。
第六步、進入 login shell
所謂shell,簡單說就是命令行界面,讓用戶可以直接與操作系統對話。用戶登錄時打開的shell,就叫做login shell。
Debian默認的shell是Bash,它會讀入一系列的配置文件。上一步的三種情況,在這一步的處理,也存在差異。
(1)命令行登錄:首先讀入 /etc/profile,這是對所有用戶都有效的配置;然後依次尋找下面三個文件,這是針對當前用戶的配置。
~/.bash_profile
~/.bash_login
~/.profile
需要注意的是,這三個文件只要有一個存在,就不再讀入後面的文件了。比如,要是 ~/.bash_profile 存在,就不會再讀入後面兩個文件了。
(2)ssh登錄:與第一種情況完全相同。
(3)圖形界面登錄:只載入 /etc/profile 和 ~/.profile。也就是說,~/.bash_profile 不管有沒有,都不會運行。
第七步,打開 non-login shell
老實說,上一步完成以後,Linux的啟動過程就算結束了,用戶已經可以看到命令行提示符或者圖形界面了。但是,為了內容的完整,必須再介紹一下這一步。
用戶進入操作系統以後,常常會再手動開啟一個shell。這個shell就叫做 non-login shell,意思是它不同於登錄時出現的那個shell,不讀取/etc/profile和.profile等配置文件。
non-login shell的重要性,不僅在於它是用戶最常接觸的那個shell,還在於它會讀入用戶自己的bash配置文件 ~/.bashrc。大多數時候,我們對於bash的定製,都是寫在這個文件裡面的。
你也許會問,要是不進入 non-login shell,豈不是.bashrc就不會運行了,因此bash 也就不能完成定製了?事實上,Debian已經考慮到這個問題了,請打開文件 ~/.profile,可以看到下面的代碼:
if [ -n "$BASH_VERSION" ]; then
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
上面代碼先判斷變數 $BASH_VERSION 是否有值,然後判斷主目錄下是否存在 .bashrc 文件,如果存在就運行該文件。第三行開頭的那個點,是source命令的簡寫形式,表示運行某個文件,寫成"source ~/.bashrc"也是可以的。
因此,只要運行~/.profile文件,~/.bashrc文件就會連帶運行。但是上一節的第一種情況提到過,如果存在~/.bash_profile文件,那麼有可能不會運行~/.profile文件。解決這個問題很簡單,把下面代碼寫入.bash_profile就行了。
if [ -f ~/.profile ]; then
. ~/.profile
fi
這樣一來,不管是哪種情況,.bashrc都會執行,用戶的設置可以放心地都寫入這個文件了。
Bash的設置之所以如此繁瑣,是由於歷史原因造成的。早期的時候,計算機運行速度很慢,載入配置文件需要很長時間,Bash的作者只好把配置文件分成了幾個部分,階段性載入。系統的通用設置放在 /etc/profile,用戶個人的、需要被所有子進程繼承的設置放在.profile,不需要被繼承的設置放在.bashrc。
順便提一下,除了Linux以外, Mac OS X 使用的shell也是Bash。但是,它只載入.bash_profile,然後在.bash_profile裡面調用.bashrc。而且,不管是ssh登錄,還是在圖形界面里啟動shell窗口,都是如此。
2. linux下的root,bin, cdrom,etc,initrd,lib分別主要放哪些文件的啊
總體的,不好歸類的
/media 用來掛載存儲設備,DVD, CD-ROM等
/mnt 用來臨時掛載文件系統,可插拔的設備應該掛載到/media上去
/home 除root之外的用戶目錄的默認所在地
/root root用戶目錄
/bin 最常用的命令
/sbin 系統管理員使用的命令(sbin=system bin)
/usr/local 使用源碼安裝的話,一般把prefix目錄指定到這里,如/usr/local/ruby
/usr/share/applications desktop文件是桌面的菜單項
~/.gnome*,~/.gconf* gnome面板的個人配置信息,當gnome面板亂了,可以嘗試刪除這些文件來恢復默認面板
/boot目錄,kernel相關部分
/boot/symvers-%{KRELEASE}.gz 保存著內核中所有符號的crc值
/boot/System.map-%{KRELEASE} 給kernel使用的符號表(symbol table)
/boot/vmlinuz-%{KRELEASE} 可引導的、壓縮的內核
/boot/initrd-%{KRELEASE}.img 包含了支持 Linux 系統兩階段引導過程所需要的必要可執行程序和系統文件
/boot/config-%{KRELEASE} 包括kernel的make config
/boot/message cpio格式的打包文件,存放Grub的配置信息,裡麵包括了圖片,文字說明等內容
/boot目錄,grub配置
/boot/grub/menu.lst 一個鏈接文件,真實文件是grub.conf
/boot/grub/grub.conf grub的配置文件
/boot/grub/device.map 設備的映射文件
/boot/grub/splash.xpm.gz grub開機畫面的gzip壓縮包
/boot/grub/stageN 一般有stage1和stage2,是grub的核心,受限於mbr512位元組的大小限制,所以切開成幾個,stage1是用來載入stage2的
/boot/grub/XXX_stage1_5 stage2文件較大,一般存放於文件系統中,需要XXX_stage1_5來識別各種各樣的文件系統
/etc目錄,系統用戶/用戶組
/etc/passwd 存放所有系統用戶及相關信息
/etc/shadow 存放所有系統用戶的密碼信息
/etc/group 存放所有系統用戶組及相關信息
/etc/gshadow 存放所有系統用戶組的密碼信息
/etc目錄,系統啟動流程相關
/etc/issue 發行版信息
/etc/redhat-release redhat版本信息
/etc/inittab 系統初始化配置
/etc/init.d 存放服務腳本的地方
/etc/rc[0-6S].d 每個運行級別對應的服務,里邊的腳本都是鏈接到/etc/init.d目錄
/etc/rc rc啟動腳本
/etc/rc.local 在所有init腳本結束後調用
/etc/rc.sysinit 在系統啟動時運行一次
/etc/profile 環境變數配置
/etc/profile.d 保存一些腳本,可在/etc/profile中調用
~/.bash_profile 針對某個用戶的配置,會調用.bash_rc
~/.bashrc 針對某個用戶的配置,會調用/etc/bashrc
/etc/bashrc 使用bash時,可設置全局環境配置
~/.bash_history 命令的歷史記錄
~/.bash_logout 用戶退出時執行
/etc/xinetd.conf xinetd的配置文件
/etc/xinetd.d 存放xinetd服務的地方
/etc目錄,基本應用配置相關
/etc/skel 存放用戶文件的「骨架」,當一個用戶創建的時候,里邊的文件就會拷貝到相應的home目錄
/etc/X11 存放X Window的系統配置文件,例如xorg.conf
/etc/DIR_COLORS ls的時候,文件/文件夾顯示的顏色
/etc/mtab 記錄目前掛載的文件系統信息
/etc/fastboot 由shutdown -f 所產生的 ,在重啟之後, 系統會去檢查這個文件是否存在以決定是否要執行fsck
/etc/nologin 系統關閉的時候自動產生,里邊放著shutdown message。在這個時候如果有用戶企圖登錄,就會列印出這個文件存放的message,然後阻止你登錄
/etc/fstab 默認的文件系統掛載情況
/etc/virc vi的配置
/etc/vimrc vim的配置
/etc/wgetrc wget的配置
/etc/yum.conf yum的配置
/etc/yum.repos.d yum源的存放位置
/etc/kmp.conf kmp內核的配置文件
/etc/my.cnf mysql的配置文件
/etc/ssh ssh的配置文件目錄,重要的有sshd_config
/etc/syslog.conf syslog的配置文件
/etc/updatedb.conf updatedb的配置文件
/etc/mtools.conf mtools配置,用於在*UNIX系統中直接訪問dos/win文件系統
/etc/sysctl.conf sysctl預載入的配置文件
/etc/moprobe.conf modprobe的配置文件
/etc/ld.so.conf 載入動態鏈接庫的配置文件,默認會載入ld.so.conf.d里邊的配置
/etc/ld.so.conf.d 存放動態鏈接庫的配置文件
/etc/ld.so.cache 動態鏈接庫的緩存,二進制文件,可以通過ldconfig --print-cache查看
/etc/services 網路服務列表(服務名,埠,協議等)
/etc目錄,域名解析,主機訪問控制
/etc/host.conf 定義DNS客戶端主機發出域名解析的處理順序,默認是先查看/etc/hosts文件,再發送遠程請求
/etc/hosts 自定義ip-域名解析
/etc/resolv.conf DNS伺服器地址
/etc/hosts.allow 和hosts.deny一起用來作為tcpd伺服器的配置文件,tcpd伺服器可以控制外部IP對本機服務的訪問。hosts.allow控制可以訪問本機的IP地址
/etc/hosts.deny 控制禁止訪問本機的IP。如果和hosts.allow的配置有沖突,以hosts.deny為准
/etc目錄,定時任務控制
/etc/crontab cron任務的配置文件,一般在里邊配置有cron.hourly,cron.daily,cron.weekly和cron.monthly
/etc/cron.d 如果你要在特殊的時間使用crontab,可以把配置放到文件夾里邊,配置的格式和/etc/crontab一樣
/etc /cron.daily 每天定時任務
/etc/cron.hourly 每小時定時任務
/etc/cron.monthly 每月定時任務
/etc/cron.weekly 每星期定時任務
/etc/cron.allow 指定那些用戶可以使用crontab
/etc/cron.deny 指定哪些用戶禁止使用crontab,如果文件存在且為空,所有人都可以使用,如果文件不存在,那麼只有root可以使用
/etc/at.allow 指定那些用戶可以使用at
/etc/at.deny 指定哪些用戶禁止使用at,如果文件存在且為空,所有人都可以使用,如果文件不存在,那麼只有root可以使用
/dev目錄 硬體設備信息
/dev/hd[a-z] 第幾個IDE硬碟
/dev/tty[0-9] 第幾個虛擬控制台
/dev/sd[a-z] 第幾個SCSI或SATA硬碟
/dev/zero 一個無窮盡地提 供0(NULL)的設備,可以用來初始化文件
/dev/null 一個空設備,可以向它輸出任何數據,而任何寫入它的輸出都會被拋棄。如果不想讓消息以標准輸出顯示或寫入文件,那麼可以將消息重定向到位桶
/dev/stderr 鏈接文件,指向/proc/self/fd/2(標准錯誤)
/dev/stdin 鏈接文件,指向/proc/self/fd/0(標准輸入)
/dev/stdout 鏈接文件,指向/proc/self/fd/1(標准輸出)
/dev/console 系統控制台,也就是直接和系統連接的監視器。如果你用cat查看該設備,並敲入一些內容,可以看到在屏幕上回顯
/dev/fd[0-9] 第幾個軟碟機設備
/dev/st SCSI磁帶驅動器
/dev/pty 提供遠程登陸偽終端支持。在進行Telnet登錄時就要用到該設備
/dev/ttys 計算機串列介面,對於DOS來說就是com1口
/dev/cua 計算機串列介面,與數據機一起使用的設備
/proc目錄 虛擬文件系統
/proc/apm Advanced Power Management(APM)系統信息,與apm命令相關
/proc/buddyinfo 每個內存區中的每個order有多少塊可用,和內存碎片問題有關
/proc/cmdline 啟動時傳遞給kernel的參數信息
/proc/cpuinfo cpu的信息
/proc/crypto 內核使用的所有已安裝的加密密碼及細節
/proc/devices 已經載入的設備並分類
/proc/dma 已注冊使用的ISA DMA頻道列表
/proc/execdomains Linux內核當前支持的execution domains
/proc/fb 幀緩沖設備列表,包括數量和控制它的驅動
/proc/filesystems 內核當前支持的文件系統類型
/proc/interrupts x86架構中的每個IRQ中斷數
/proc/iomem 每個物理設備當前在系統內存中的映射
/proc/ioports 一個設備的輸入輸出所使用的注冊埠范圍
/proc/kcore 代表系統的物理內存,存儲為核心文件格式,里邊顯示的是位元組數,等於RAM大小加上4kb
/proc/kmsg 記錄內核生成的信息,可以通過/sbin/klogd或/bin/dmesg來處理
/proc/loadavg 根據過去一段時間內CPU和IO的狀態得出的負載狀態,與uptime命令有關
/proc/locks 內核鎖住的文件列表
/proc/mdstat 多硬碟,RAID配置信息(md=multiple disks)
/proc/meminfo RAM使用的相關信息
/proc/misc 其他的主要設備(設備號為10)上注冊的驅動
/proc/moles 所有載入到內核的模塊列表
/proc/mounts 系統中使用的所有掛載
/proc/mtrr 系統使用的Memory Type Range Registers (MTRRs)
/proc/partitions 分區中的塊分配信息
/proc/pci 系統中的PCI設備列表
/proc/slabinfo 系統中所有活動的 slab 緩存信息
/proc/stat 所有的CPU活動信息
/proc/sysrq-trigger 使用echo命令來寫這個文件的時候,遠程root用戶可以執行大多數的系統請求關鍵命令,就好像在本地終端執行一樣。要寫入這個文件,需要把/proc/sys/kernel/sysrq不能設置為0。這個文件對root也是不可讀的
/proc/uptime 系統已經運行了多久
/proc/swaps 交換空間的使用情況
/proc/version Linux內核版本和gcc版本
/proc/bus 系統匯流排(Bus)信息,例如pci/usb等
/proc/driver 驅動信息
/proc/fs 文件系統信息
/proc/ide ide設備信息
/proc/irq 中斷請求設備信息
/proc/net 網卡設備信息
/proc/scsi scsi設備信息
/proc/tty tty設備信息
/proc/net/dev 顯示網路適配器及統計信息
/proc/vmstat 虛擬內存統計信息
/proc/vmcore 內核panic時的內存映像
/proc/diskstats 取得磁碟信息
/proc/schedstat kernel調度器的統計信息
/proc/zoneinfo 顯示內存空間的統計信息,對分析虛擬內存行為很有用
/proc目錄, 進程N的信息
/proc/N pid為N的進程信息
/proc/N/cmdline 進程啟動命令
/proc/N/cwd 鏈接到進程當前工作目錄
/proc/N/environ 進程環境變數列表
/proc/N/exe 鏈接到進程的執行命令文件
/proc/N/fd 包含進程相關的所有的文件描述符
/proc/N/maps 與進程相關的內存映射信息
/proc/N/mem 指代進程持有的內存,不可讀
/proc/N/root 鏈接到進程的根目錄
/proc/N/stat 進程的狀態
/proc/N/statm 進程使用的內存的狀態
/proc/N/status 進程狀態信息,比stat/statm更具可讀性
/proc/self 鏈接到當前正在運行的進程
/var目錄 存放經常變化數據的地方
/var/lib/rpm 存放大多數rpm相關的文件
/var/cache/yum yum升級時下載的rpm文件的臨時存放地,還包括系統中rpm包的頭信息
/var/spool/cron/$username 每個用戶自定義的cron任務,可以使用crontab或vi來操作
/var/lock 一般用來存放文件鎖
/var/log 一般用來存放日誌文件
/var/run 一般用來存放pid文件
/var/crash 一般是存放系統崩潰時產生的信息
/var/cache 一般用來存放緩存信息,例如yum package的緩存
/etc/sysconfig目錄 系統基本配置
/etc/sysconfig/amd 為amd提供操作參數,用來自動mount/unmount文件系統
/etc/sysconfig/apmd 由apmd使用來配置電源設置
/etc/sysconfig/arpwatch 在啟動的時候傳遞給arpwatch守護進程的參數
/etc/sysconfig/authconfig 設置主機使用的驗證方式
/etc/sysconfig/autofs 自動掛載設備的自定義選項
/etc/sysconfig/clock 系統硬體時鍾的設置
/etc/sysconfig/desktop 設置新用戶的桌面和進入運行級別5所使用的顯示管理器
/etc/sysconfig/dhcpd 在啟動的時候傳遞給dhcpd守護進程的參數
/etc/sysconfig/gpm 在啟動的時候傳遞給gpm守護進程的參數
/etc/sysconfig/hwconf 列出kudzu檢測到的所有硬體
/etc/sysconfig/i18n 默認系統語言,系統支持的所有語言,默認系統字體
/etc/sysconfig/init 系統啟動時的顯示方式
/etc/sysconfig/ip6tables-config 在系統啟動或者ip6tables服務啟動時,內核用來設置IPv6包過濾
/etc/sysconfig/iptables-config 在系統啟動或者iptables服務啟動時,內核用來設置包過濾
/etc/sysconfig/keyboard 控制鍵盤的行為
/etc/sysconfig/kudzu 在啟動的時候通過kudzu觸發一次安全的系統硬體探查
/etc/sysconfig/named 在啟動的時候傳遞給named守護進程的參數
/etc/sysconfig/netmp netmp服務的配置文件
/etc/sysconfig/network 網路的配置信息
/etc/sysconfig/ntpd 在啟動的時候傳遞給ntpd守護進程的參數
/etc/sysconfig/radvd 在啟動的時候傳遞給radvd守護進程的參數
/etc/sysconfig/samba 在啟動的時候傳遞給smbd/nmbd守護進程的參數
/etc/sysconfig/selinux selinux的基本控制選項
/etc/sysconfig/spamassassin 在啟動的時候傳遞給spamd守護進程的參數
/etc/sysconfig/squid 在啟動的時候傳遞給squid守護進程的參數
/etc/sysconfig/vncservers 配置vnc服務啟動的方式
/etc/sysconfig/xinetd 在啟動的時候傳遞給xinetd守護進程的參數
/proc/sys目錄 系統重要配置參數,涉及眾多內核參數
/proc/sys/fs/file-max 可以分配的文件句柄的最大數目
/proc/sys/fs/file-nr 已分配文件句柄的數目、已使用文件句柄的數目、文件句柄的最大數目
/proc/sys/fs/inode-* 任何以名稱「inode」開頭的文件所執行的操作與上面那些以名稱「file」開頭的文件所執行的操作一樣,但所執行的操作與索引節點有關,而與文件句柄無關
/proc/sys/fs/overflowuid 和 /proc/sys/fs/overflowgid 這兩個文件分別保存那些支持 16 位用戶標識和組標識的任何文件系統的用戶標識(UID)和組標識(GID)
/proc/sys/fs/super-max 該文件指定超級塊處理程序的最大數目。掛裝的任何文件系統需要使用超級塊,所以如果掛裝了大量文件系統,則可能會用盡超級塊處理程序
/proc/sys/fs/super-nr 顯示當前已分配超級塊的數目
/proc/sys/kernel/acct 該文件有三個可配置值,根據包含日誌的文件系統上可用空間的數量(以百分比表示),這些值控制何時開始進行進程記帳:如果可用空間低於這個百分比值,則停止進程記帳/如果可用空間高於這個百分比值,則開始進程記帳/檢查上面兩個值的頻率(以秒為單位)
/proc/sys/kernel/ctrl-alt-del 該值控制系統在接收到 ctrl+alt+delete 按鍵組合時如何反應
/proc/sys/kernel/domainname 配置網路域名
/proc/sys/kernel/hostname 主機名
/proc/sys/kernel/msgmax 指定了從一個進程發送到另一個進程的消息的最大長度
/proc/sys/kernel/msgmnb 指定在一個消息隊列中最大的位元組數
/proc/sys/kernel/msgmni 指定消息隊列標識的最大數目
/proc/sys/kernel/panic 如果發生「內核嚴重錯誤(kernel panic)」,內核在重新引導之前等待的時間
/proc/sys/kernel/printk 該文件有四個數字值,它們根據日誌記錄消息的重要性,定義將其發送到何處
/proc/sys/kernel/shmall 在任何給定時刻系統上可以使用的共享內存的總量(以位元組為單位)
/proc/sys/kernel/shmax 內核所允許的最大共享內存段的大小(以位元組為單位)
/proc/sys/kernel/shmmni 用於整個系統共享內存段的最大數目
/proc/sys/kernel/sysrq 如果該文件指定的值為非零,則激活 System Request Key
/proc/sys/kernel/threads-max 內核所能使用的線程的最大數目
/proc/sys/net/core/message_burst 寫新的警告消息所需的時間(以 1/10 秒為單位);在這個時間內所接收到的其它警告消息會被丟棄。這用於防止某些企圖用消息「淹沒」您系統的人所使用的拒絕服務攻擊
/proc/sys/net/core/message_cost 存有與每個警告消息相關的成本值。該值越大,越有可能忽略警告消息
/proc/sys/net/core/netdev_max_backlog 在介面接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目
/proc/sys/net/core/optmem_max 每個套接字所允許的最大緩沖區的大小
/proc/sys/net/core/rmem_default 接收套接字緩沖區大小的預設值(以位元組為單位)
/proc/sys/net/core/rmem_max 接收套接字緩沖區大小的最大值(以位元組為單位)。
/proc/sys/net/core/wmem_default 發送套接字緩沖區大小的預設值(以位元組為單位)。
/proc/sys/net/core/wmem_max 發送套接字緩沖區大小的最大值(以位元組為單位)
/proc/sys/net/ipv4/ip_forward ip轉發是否生效
/proc/sys/net/ipv4/tcp_retrans_collapse 控制TCP雙方窗口協商出現錯誤的時候的一些重傳的行為。但是在老的2.6的核 (<2.6.18)里頭,這個重傳會導致kernel oops,kernel panic,所以如果出現有 tcp_retrans_*樣子的kernel panic,可以把這個參數給設置成0
/proc/sys/vm/buffermem 控制用於緩沖區內存的整個系統內存的數量(以百分比表示)。它有三個值,通過把用空格相隔的一串數字寫入該文件來設置這三個值。用於緩沖區的內存的最低百分比/如果發生所剩系統內存不多,而且系統內存正在減少這種情況,系統將試圖維護緩沖區內存的數量/用於緩沖區的內存的最高百分比
/proc/sys/vm/freepages 控制系統如何應對各種級別的可用內存。它有三個值,通過把用空格相隔的一串數字寫入該文件來設置這三個值。如果系統中可用頁面的數目達到了最低限制,則只允許內核分配一些內存/如果系統中可用頁面的數目低於這一限制,則內核將以較積極的方式啟動交換,以釋放內存,從而維持系統性能/內核將試圖保持這個數量的系統內存可用。低於這個值將啟動內核交換
/proc/sys/vm/kswapd 控制允許內核如何交換內存。它有三個值,通過把用空格相隔的一串數字寫入該文件來設置這三個值:內核試圖一次釋放的最大頁面數目。如果想增加內存交換過程中的帶寬,則需要增加該值/內核在每次交換中試圖釋放頁面的最少次數/內核在一次交換中所寫頁面的數目。這對系統性能影響最大。這個值越大,交換的數據越多,花在磁碟尋道上的時間越少。然而,這個值太大會因「淹沒」請求隊列而反過來影響系統性能
/proc/sys/vm/pagecache 該文件與/proc/sys/vm/buffermem 的工作內容一樣,但它是針對文件的內存映射和一般高速緩存
/proc/sys/vm/dirty_background_ratio 記錄當所有被更改頁面總大小占工作內存超過某個限制時,pdflush 會開始寫回工作,默認是10%
/proc/sys/vm/dirty_ratio 控制文件系統的文件系統寫緩沖區的大小,單位是百分比,表示系統內存的百分比,表示當寫緩沖使用到系統內存多少的時候,開始向磁碟寫出數據。默認是40%
/proc/sys/vm/dirty_writeback_centisecs 記錄pdflush進程把page cache里邊的內容寫入磁碟的時間周期,默認是5秒
/proc/sys/vm/dirty_expire_centisecs 控制一個更改過的頁面經過多長時間後被認為是過期的、必須被寫回的頁面,默認是30秒
/proc/sys/vm/laptop_mode 是否使用筆記本模式,在kernel2.6之後支持