Sys文件系统是一个类似于proc文件系统的特殊文件系统,用于将系统中的设备组织成层次结构,并向用户模式程序提供详细的内核数据结构信息。其实,就是 在用户态可以通过对sys文件系统的访问,来看内核态的一些驱动或者设备等。
去/sys看一看,
localhost:/sys#ls
/sys/ block/ bus/ class/ devices/ firmware/ kernel/ mole/ power/
Block目录:包含所有的块设备,进入到block目录下,会发现下面全是link文件,link到sys/device/目录下的一些设备。
Devices目录:包含系统所有的设备,并根据设备挂接的总线类型组织成层次结构
Bus目录:包含系统中所有的总线类型
Drivers目录:包括内核中所有已注册的设备驱动程序
Class目录:系统中的设备类型(如网卡设备,声卡设备等)。去class目录中看
一下,随便进到一个文件夹下,会发现该文件夹下的文件其实是连接文件,link到/sys/device/.../../...下的一个设备文件。
可以说明,其实class目录并不会新建什么设备,只是将已经注册的设备,在class目录下重新归类,放在一起。
1,在sys下,表示一个目录使用的结构体是 Kobject,但是在linux的内核中,有硬件的设备 和 软件的驱动,在sys下都需要用一个目录来表示。 单纯的一个Kobject结构无法表示完全,增加了容器,来封装Kobject。 即下面要将的:device和drive_device结构。
2,
最底层驱动目录的上一层目录,从sys角度上来说,他依然是个目录,所以他也有Kobjec这个变量。但是从他的意义上讲,他将
一些有公共特性Kobjec 的
device/driver_device结构组织到了一起,所以除了有Kobject这个变量外,他又添加了一些变量,组成了Kset这个结构来表示这
一级的目录。但是仅仅是用Kset来表示了这一级的目录,和1,一样,仅仅表示一个目录是不够的,在linux内核中,需要他在软件上有个映射。所以,也
将Kset进行了封装,形成了
bus_type这个结构。
3, kobject在Kset的目录下,那么 device/device_driver 就在 bus_type结构下。所以,linux驱动模型中,驱动和设备都是挂在总线下面的。
4, 如上所述,Kset的意义:表示一个目录(由结构体下的Kobject来完成),并且这个目录下的所有目录有共同的特性(所以说,Kset表示的目录下,不一定非要是Kobject街头的,也可以是Kset结构的。即:Kset嵌套Kset)。所以使用Kset来代替了以前的 subsystem结构。
B. linux下查找文件内容
GVIM 可以分割窗口实现查找多个文件的功能。不过最好是用命令行这个强大的工具了。
比如查找 /home/znsys/ 下所有含 VoIP 的文件名称:
grep -l 'VoIP' /home/znsys/*
比如查找 /home/znsys/ 文件夹下的所有第三层目录内所有文件中包含 “networking" 的行:
如这些目录:
/home/znsys/client_1/data/
/home/znsys/client_2/data/
/home/znsys/vendor_1/data/
命令为:
grep -i /home/znsys/*/data/* 'networking'
搜索
----
whereis <程序名称>
查找软件的安装路径
-b 只查找二进制文件
-m 只查找帮助文件
-s 只查找源代码
-u 排除指定类型文件
-f 只显示文件名
-B <目录> 在指定目录下查找二进制文件
-M <目录> 在指定目录下查找帮助文件
-S <目录> 在指定目录下查找源代码
locate <文件名称>
在文件索引数据库中搜索文件
-d <数据库路径> 搜索指定数据库
updatedb
更新文件索引数据库
find [路径] <表达式>
查找文件
-name <表达式> 根据文件名查找文件
-iname <表达式> 根据文件名查找文件,忽略大小写
-path <表达式> 根据路径查找文件
-ipath <表达式> 根据路径查找文件,忽略大小写
-amin <分钟> 过去N分钟内访问过的文件
-atime <天数> 过去N天内访问过的文件
-cmin <分钟> 过去N分钟内修改过的文件
-ctime <天数> 过去N天内修改过的文件
-anewer <参照文件> 比参照文件更晚被读取过的文件
-cnewer <参照文件> 比参照文件更晚被修改过的文件
-size <大小> 根据文件大小查找文件,单位b c w k M G
-type <文件类型> 根据文件类型查找文件。b 块设备 c 字符设备 d 目录 p 管道文件 f 普通文件 l 链接 s 端口文件
-user <用户名> 按归属用户查找文件
-uid <uid> 按UID查找文件
-group <群组名> 按归属群组查找文件
-gid <gid> 按GID查找文件
-empty 查找空文件
grep <字符串>|"<正则表达式>" [文件名]
在文件中搜索内容
C. 如何查看Linux加载内置模块的信息
一、找出内置模块列表
要得到内置模块列表,运行下面的命令。
$ cat /lib/moles/$(uname -r)/moles.builtin
你也可以用下面的命令来查看有哪些内置模块:
二、找出内置模块参数
每个内核模块无论是内置的还是可加载的都有一系列的参数。对于可加载模块,modinfo命令可以显示它们的参数信息。然而这个命令对内置模块没有用。你会得到下面的错误。
modinfo: ERROR: Mole XXXXXX not found.
如果你想要查看内置模块的参数,以及它们的值,你可以在 /sys/mole 下检查它们的内容。
在 /sys/mole目录下,你可以找到内核模块(包含内置和可加载的)命名的子目录。进入每个模块目录,这里有个“parameters”目录,列出了这个模块所有的参数。
比如你要找出tcp_cubic(内核默认的TCP实现)模块的参数。你可以这么做:
$ ls /sys/mole/tcp_cubic/parameters
接着阅读这个文件查看每个参数的值。
$ cat /sys/mole/tcp_cubic/parameters/tcp_friendliness
以上就是Linux查看内置模块的信息的方法了,这样我们就可以知道Linux安装了哪些内置模块,还可以把没用的模块删除掉,减轻系统的负担。