什么是proc文件系统?
proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可 以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件 系统是动态从系统内核读出所需信息并提交的。它的目录结构如下:
目录名称 目录内容
apm 高级电源管理信息
cmdline 内核命令行
Cpuinfo 关于Cpu信息
Devices 可以用到的设备(块设备/字符设备)
Dma 使用的DMA通道
Filesystems 支持的文件系统
Interrupts 中断的使用
Ioports I/O端口的使用
Kcore 内核核心印象
Kmsg 内核消息
Ksyms 内核符号表
Loadavg 负载均衡
Locks 内核锁
Meminfo 内存信息
Misc 杂项
Modules 加载模块列表
Mounts 加载的文件系统
Partitions 系统识别的分区表
Rtc 实时时钟
Slabinfo Slab池信息
Stat 全面统计状态表
Swaps 对换空间的利用情况
Version 内核版本
Uptime 系统正常运行时间
并不是所有这些目录在你的系统中都有,这取决于你的内核配置和装载的模块。另外,在/proc下还有三个很重要的目录:net,scsi和sys。 Sys目录是可写的,可以通过它来访问或修改内核的参数(见下一部分),而net和scsi则依赖于内核配置。例如,如果系统不支持scsi,则scsi 目录不存在。
除了以上介绍的这些,还有的是一些以数字命名的目录,它们是进程目录。系统中当前运行的每一个进程都有对应的一个目录在/proc下,以进程的 PID号为目录名,它们是读取进程信息的接口。而self目录则是读取进程本身的信息接口,是一个link。Proc文件系统的名字就是由之而起。进程目 录的结构如下:
目录名称 目录内容
Cmdline 命令行参数
Environ 环境变量值
Fd 一个包含所有文件描述符的目录
Mem 进程的内存被利用情况
Stat 进程状态
Status 进程当前状态,以可读的方式显示出来
Cwd 当前工作目录的链接
Exe 指向该进程的执行命令文件
Maps 内存映象
Statm 进程内存状态信息
Root 链接此进程的root目录
用户如果要查看系统信息,可以用cat命令。
要改变内核的参数,只要用vi编辑或echo参数重定向到文件中即可。下面有一个例子:
# cat /proc/sys/fs/file-max
4096
# echo 8192 > /proc/sys/fs/file-max
# cat /proc/sys/fs/file-max
8192
如果你优化了参数,则可以把它们写成添加到文件rc.local中,使它在系统启动时自动完成修改。
linux /dev目录
dev 是设备(device)的英文缩写。这个目录对所有的用户都十分重要。因为在这个目录中包含了所有Linux系统中使用的外部设备。但是这里并不是放的外 部设备的驱动程序。这一点和我们常用的windows, dos操作系统不一样。它实际上是一个访问这些外部设备的端口。我们可以非常方便地去访问这些外部设备,和访问一个文件,一个目录没有任何区别。
例如:我们在系统中键入:cd /dev/cdrom 我们就可以看到光驱中的文件了。同样道理,我们键入:cd /dev/mouse 就可以看看鼠标的相关文件。在这个目录下,有一个null设备,这个东西本身没有任何意义。如果你向这个目录写入文件或内容,他们统统有去无回。
/dev/null是一个非常有用的字符设备文件,送入这个设备的所有东西都被忽略,如果将任何程序的输出结果重定向到/dev/null,则看不到任何输出信息。甚至于,您可以将某一用户的shell指向/dev/null 以禁止其登陆
/dev/urandom用来生成低质量的随机数序列,不信用cat /dev/urandom try 一下,
(2)设备文件
UNIX系统与边在本系统上的各种设备之间的通讯,通过特别文件来实现,
就程序而言,磁盘是文件,MODEM是文件,甚至内存也是文件.所有连接到系统上
的设备都在/dev目录中有一个文件与其对应.当在这些文件上执行I/O操作时,
由UNIX系统将I/O操作转换成实际设备的动作.例如,文件/dev/mem是系统的内
存,如果cat这个文件,实际上是在终端显示系统的内存.为了安全起见,这个文
件对普通用户是不可读的.因为在任一给定时间,内存区可能含有用户登录口令或运行程序的口令,某部分文件的编辑缓冲区,缓冲区可能含有用ed
-x命令 解密后的文本,以及用户不愿让其他人存取的种种信息. 在/dev中的文件通常称为设备文件,用ls /dev命令可以看看系统中的一
些设备: acuo 呼叫自动拨号器 console 系统控制台 dsknn 块方式操作磁盘分区 kmem 核心内存 mem 内存 lp 打印机
mto 块方式操作磁带 rdsknn 流方式操作的磁盘分区 rmto 流方式操作的磁带 swap 交换区 syscon 系统终端 ttynn
终端口 x25 网络端口 等等
Linux沿袭Unix的风格,将所有设备认成是一个文件。
设备文件分为两种:
块设备文件(b)
字符设备文件(c)
设备文件一般存放在/dev目录下
/dev/hd[a-t]:IDE设备
/dev/sd[a-z]:SCSI设备
/dev/fd[0-7]:标准软驱
/dev/md[0-31]:软raid设备
/dev/loop[0-7]:本地回环设备
/dev/ram[0-15]:内存
/dev/null:无限数据接收设备 ,相当于回收站
/dev/zero:无限零资源
/dev/tty[0-63]:虚拟终端
/dev/ttyS[0-3]:串口
/dev/lp[0-3]:并口
/dev/console:控制台
/dev/fb[0-31]:framebuffer
/dev/cdrom => /dev/hdc
/dev/modem => /dev/ttyS[0-9]
/dev/pilot => /dev/ttyS[0-9]
/dev/console:控制台和/dev/tty[0-63]:虚拟终端的区别与联系
控制抬就好比电视机上的按钮,终端好比遥控板,他们的目的都是控制电视机,但是控制台必须在本地,而终端可以在远端,系统只有一个控制台,叫console,其他的都是终端
/dev目录下的节点是怎么创建的
devf或者udev会自动帮你创建得。
kobject是sysfs文件系统的基础,udev通过监测、检测sysfs来获取新创建的设备的,搜索一下版面,以前有udev的机制论述。