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之后支持