proc 文件系统

合集下载

linux proc文件夹介绍

linux proc文件夹介绍

/proc/stat 所有的CPU活动信息
/proc/sysrq-trigger 使用echo命令来写这个文件的时候,远程root用户可以执行大多数的系统请求关键命令,就好像在本地终端执行一样。要写入这个文件,需要把/proc/sys/kernel/sysrq不能设置为0。这个文件对root也是不可读的
/proc/irq 中断请求设备信息
/proc/net 网卡设备信息
/proc/scsi scsi设备信息
/proc/tty tty设备信息
/proc/net/dev 显示网络适配器及统计信息
/proc/vmstat 虚拟内存统计信息
/proc/vmcore 内核panic时的内存映像
除了以上介绍的这些,还有的是一些以数字命名的目录,它们是进程目录。系统中当前运行的每一个进程都有对应的一个目录在/proc下,以进程的 PID号为目录名,它们是读取进程信息的接口。而self目录则是读取进程本身的信息接口,是一个link。
2. 子文件或子文件夹
/proc/buddyinfo 每个内存区中的每个order有多少块可用,和内存碎片问题有关
/proc/kcore 代表系统的物理内存,存储为核心文件格式,里边显示的是字节数,等于RAM大小加上4kb
/proc/kmsg 记录内核生成的信息,可以通过/sbin/klogd或/bin/dmesg来处理
/proc/loadavg 根据过去一段时间内CPU和IO的状态得出的负载状态,与uptime命令有关
Linux下/proc目录简介
1. /proc目录
Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。

proc介绍及问题分析

proc介绍及问题分析

proc介绍及问题分析⽂件系统基本介绍proc⽂件系统是⼀个,它只存在内存当中,⽽不占⽤外存空间。

它以⽂件系统的⽅式为访问系统数据的操作提供接⼝。

⽤户和应⽤程序可以通过proc得到系统的信息,并可以改变的某些参数。

由于系统的信息,如进程,是动态改变的,所以⽤户或应⽤程序读取proc⽂件时,proc ⽂件系统是动态从系统读出所需信息并提交的。

⽬录结构⽬录名称⽬录内容apm ⾼级电源管理信息cmdline 内核命令⾏Cpuinfo 关于Cpu信息Devices 可以⽤到的设备(/)Dma Used DMS channelsFilesystems ⽀持的⽂件系统Interrupts 中断的使⽤Ioports I/O端⼝的使⽤Kcore 内核核⼼印象Kmsg 内核消息Ksyms 内核符号表Loadavg Locks 内核锁Meminfo 内存信息Misc MiscellaneousModules 加载模块列表Mounts 加载的⽂件系统Partitions 系统识别的分区表Rtc Real time clockSlabinfo Slab pool infoStat 全⾯统计状态表sSwaps 对换空间的利⽤情况Version Uptime 系统正常运⾏时间并不是所有这些⽬录在你的系统中都有,这取决于你的配置和装载的模块。

另外,在/proc下还有三个很重要的⽬录:net,scsi和sys。

Sys ⽬录是可写的,可以通过它来访问或修改的参数(见下⼀部分),⽽net和scsi则依赖于内核配置。

例如,如果系统不⽀持scsi,则scsi⽬录不存在。

进程⽬录除了以上介绍的这些,还有的是⼀些以数字命名的⽬录,它们是进程⽬录。

系统中当前运⾏的每⼀个进程都有对应的⼀个⽬录在/proc下,以进程的PID号为⽬录名,它们是读取进程信息的接⼝。

⽽self⽬录则是读取进程本⾝的信息接⼝,是⼀个link。

Proc⽂件系统的名字就是由之⽽起。

Proc文件系统的研究与应用

Proc文件系统的研究与应用

对具 体文件 系统来 说,V F S 是一个 管理者, 而对 内核 的其它系统来说, VF S是它们与具体文件系 统的

有用,所 以内核 中的很 多元 素也开始使 用它来报 告信 息,或启用动态运 行时配置 . p r o c文件 系统包含 了一
些 目录 ( 用 作组织 信息 的方式) 和虚拟 文件 .虚拟文 件 可 以向用户 呈现 内核 中的一些信 息,也可 以用作一 种 从用户空间 向内核发送信息的手段.
Ab s t r a c t : I n t h e c u r r e n t d r i v e r d e b u g g i n g p r o c e s s wh e n a c c e s s t o c e r t a i n r e g i s t e r v a l u e s ,mos t o f u s o u t p u t he t v a l u e t o t h e l o g il f e t o s e e ;I n e mb e d d e d Li n u x a p p l i c a t i o n de v e l o p me n t , p a r e n t p r o c e s s d e t e c t s u b - p r o c e s s ’ S s t a t e u s i n g t h e wa y c h i l d p r o c e s s i ni t i a t i v e l y s e n d me s s a g e t o he t pa re n t p r o c e s s .Th r o u g h a n a l y s i s t h e r e g i s t r a t i o n , i n s t a l l ,ma n a g e me n t o f t h e p r c o il f e s y s t e m c a n o p t i mi z e t h e a b o v e p r o b l e ms , a n d p u t f o r wa rd u s i n g p r o c il f e s y s t e m t o d e b u g g i n g of t h e d r i v e r

Linux中proc目录下文件详解

Linux中proc目录下文件详解
示例:
[root@localhost ~]# cat /proc/loadavg 0.11 0.16 0.14 3/126 3912
-------------------------------------------------------------------------------/proc/locks 文件 这个文件包含在打开的文件上的加锁信息。文件中的每一行描述了特定文件和文档上的加锁信息以及对文 件施加的锁的类型。内核也可以需要时对文件施加强制性锁。 示例: [root@localhost redhat]# cat /proc/locks 1: POSIX ADVISORY READ 3822 03:0a:1067117 0 EOF 2: POSIX ADVISORY READ 3822 03:0a:1067138 0 EOF 3: POSIX ADVISORY WRITE 3326 03:0a:2326540 0 EOF 4: POSIX ADVISORY WRITE 2639 03:0a:2966595 0 EOF 5: FLOCK ADVISORY WRITE 2591 03:0a:2966586 0 EOF 6: POSIX ADVISORY WRITE 2540 03:0a:2966578 0 EOF 7: POSIX ADVISORY WRITE 2530 03:0a:2966579 0 EOF 8: POSIX ADVISORY WRITE 2402 03:0a:2966563 0 EOF 9: POSIX ADVISORY WRITE 2371 03:0a:2966561 0 EOF --------------------------------------------------------------------------------

proc_create 例子

proc_create 例子

proc_create 例子乃开源社区被用于Linux 内核的标准的设备驱动模型。

'):def proc_create可创建proc文件,在/proc文件系统下,并允许用户通过读取和写入文件来与驱动进行通信。

进程创建时,通过调用proc_create来创建与其相关的文件。

该文件的创建在文件系统的代码块中执行,并且会触发open()和release()方法。

其格式如下:struct proc_dir_entry *proc_create(const char *name, umode_t mode, struct proc_dir_entry *parent, const struct file_operations *proc_fops)下面,我们将详细了解如何使用proc_create函数来创建proc文件。

首先,让我们了解一下proc文件系统。

在Linux内核中,proc文件系统是一个虚拟文件系统,与其他文件系统(如ext4)不同,proc文件系统不存储在磁盘上。

它是在内存中创建的,并且只存在于内核的运行时环境中。

proc 文件系统提供了一种机制,通过读取和写入虚拟文件来与内核进行通信。

这些文件可以被用于访问和调整内核的状态和参数,或者用于获取关于系统和进程的信息。

接下来,让我们看一下如何使用proc_create函数来创建proc文件。

首先,我们需要定义一个file_operations结构体,其中包含了我们要定义的文件的操作。

这个结构体通常包含读取和写入文件的函数指针,以及其他与操作相关的函数指针。

下面是一个简单的示例:cstatic ssize_t myread(struct file *file, char __user *buffer, size_t count, loff_t *ppos){读取文件逻辑的实现}static ssize_t mywrite(struct file *file, const char __user *buffer, size_t count, loff_t *ppos){写入文件逻辑的实现}static const struct file_operations myops = {.owner = THIS_MODULE,.read = myread,.write = mywrite,};在上面的示例中,我们定义了一个名为myops的file_operations结构体,并将myread和mywrite函数分别指定为读取和写入文件的操作。

linux文件系统的分类

linux文件系统的分类

linux文件系统的分类一、引言Linux作为一个开源的操作系统,其文件系统是其核心部分之一。

文件系统是用于组织、存储和访问文件和目录的方法和数据结构。

Linux文件系统的分类是指不同的文件系统类型,可以根据其特点和用途进行分类。

本文将介绍Linux文件系统的几种常见分类。

二、本地文件系统本地文件系统是指在计算机硬盘上存储数据的文件系统。

在Linux 中,常见的本地文件系统有以下几种:1. ext文件系统:ext文件系统是最常用的Linux文件系统,包括ext2、ext3和ext4。

它们具有较高的性能和稳定性,支持大容量存储和快速访问。

2. XFS文件系统:XFS文件系统是一种高性能的日志文件系统,特别适用于大型文件和大容量存储。

它支持快速的数据恢复和高效的文件管理。

3. Btrfs文件系统:Btrfs文件系统是一个新的高级文件系统,具有快速的数据恢复和高效的快照功能。

它支持数据压缩、数据校验和RAID等先进功能。

4. JFS文件系统:JFS文件系统是一个高性能的日志文件系统,具有快速的文件访问和高效的空间管理。

它适用于大容量存储和大型文件。

三、网络文件系统网络文件系统是指通过网络访问远程文件系统的方法。

在Linux中,常见的网络文件系统有以下几种:1. NFS文件系统:NFS是一种标准的网络文件系统协议,用于在不同的计算机之间共享文件和目录。

它允许用户在本地计算机上访问远程服务器上的文件。

2. CIFS文件系统:CIFS是一种用于在Windows和Linux之间共享文件的协议。

它允许Linux系统挂载Windows共享目录,使用户可以在Linux上访问Windows文件。

3. AFS文件系统:AFS是一种分布式文件系统,用于在广域网上共享文件和目录。

它提供高性能和可扩展性,适用于大规模的网络环境。

四、虚拟文件系统虚拟文件系统是指用于访问不同文件系统的统一接口。

在Linux中,常见的虚拟文件系统有以下几种:1. proc文件系统:proc文件系统是一个特殊的文件系统,用于访问内核和进程信息。

Linux文件系统下proc目录详解

Linux文件系统下proc目录详解

Linux中/proc目录下文件详解(2008-7-20 15:54)Linux中/proc目录下文件详解(一)--------------------------------------------------------------------------------/proc文件系统下的多种文件提供的系统信息不是针对某个特定进程的,而是能够在整个系统范围的上下文中使用。

可以使用的文件随系统配置的变化而变化。

命令procinfo能够显示基于其中某些文件的多种系统信息。

以下详细描述/proc下的文件。

--------------------------------------------------------------------------------/proc/cmdline文件这个文件给出了内核启动的命令行。

它和用于进程的cmdline项非常相似。

示例:[root@localhost proc]# cat cmdlinero root=LABEL=/ rhgb quiet--------------------------------------------------------------------------------/proc/cpuinfo文件这个文件提供了有关系统CPU的多种信息。

这些信息是从内核里对CPU的测试代码中得到的。

文件列出了CPU的普通型号(386,486,586,686等),以及能得到的更多特定信息(制造商,型号和版本)。

文件还包含了以bogomips表示的处理器速度,而且如果检测到CPU的多种特性或者bug,文件还会包含相应的标志。

这个文件的格式为:文件由多行构成,每行包括一个域名称,一个冒号和一个值。

示例:[root@localhost proc]# cat cpuinfoprocessor : 0vendor_id : AuthenticAMDcpu family : 6model : 8model name : AMD Athlon(tm) XP 1800+stepping : 1cpu MHz : 1530.165cache size : 256 KBfdiv_bug : nohlt_bug : nof00f_bug : nocoma_bug : nofpu : yesfpu_exception : yescpuid level : 1wp : yesflags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 mmx fxsr sse syscall mmxext 3dnowext 3dnowbogomips : 2998.27--------------------------------------------------------------------------------/proc/devices文件这个文件列出字符和块设备的主设备号,以及分配到这些设备号的设备名称。

linux中proc详解

linux中proc详解

linux中proc详解Linux-procproc ⽂件系统在Linux中有额外的机制可以为内核和内核模块将信息发送给进程-- /proc ⽂件系统。

最初设计的⽬的是允许更⽅便的对进程信息进⾏访问(因此得名),现在它被每⼀个有有趣的东西报告的内核使⽤,例如/proc/modules 有模块的列表/proc/meminfo 有内存使⽤的统计表。

使⽤proc ⽂件系统的⽅法和使⽤设备驱动程序⾮常相似--创建⼀个/proc ⽂件需要的所有信息的结构,包括任何处理函数的指针(在我们的例⼦中只有⼀个,当某⼈试图从/proc ⽂件读时调⽤的那⼀个)。

然后,init_module 在内核中登记该结构⽽cleanup_module 注销它。

我们使⽤proc_register_dynamic(这是在2.0 版中的情况,在2.2 版中如果我们将节点设置为0系统将⾃动为我们做到) 的原因是我们不想预先决定我们的⽂件的节点数字,⽽是为防⽌冲突⽽由内核决定它。

通常的⽂件系统存在于磁盘上⽽不是内存中(/proc 在内存中),在这中情况下,节点数是是指向⽂件的索引节点所在的磁盘位置的指针。

节点包含⽂件的信息(例如⽂件的存取权限)和指向磁盘位置或⽂件数据可以被找到的⼏个位置的指针。

因为当⽂件被打开或关闭的时候不能得到调⽤,所以在这个模块中没有地⽅放置MOD_INC_USE_COUNT 和MOD_DEC_USE_COUNT,并且,如果⽂件被打开随后模块被移除,我们没有办法避免后果。

在下⼀章我们会看到⼀个艰难的但更灵活的可以处理/proc⽂件的实现⽅式,它也可以让我们防⽌那个问题。

/os/201202/119552.htmlLinux 内核提供了⼀种通过/proc ⽂件系统,在运⾏时访问内核内部数据结构、改变内核设置的机制。

尽管在各种硬件平台上的Linux 系统的/proc ⽂件系统的基本概念都是相同的,但本⽂只讨论基于intel x86 架构的Linux /proc ⽂件系统。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

该函数将创建一个目录,父目录为parent。
proc文件系统的编程接口
删除节点(文件或者目录)remove_proc_entry()
void remove_proc_entry ( const char *name, struct proc_dir_entry *parent)
该函数将删除一个proc节点(按文件名删除)。
proc文件系统的编程接口
以上五个创建节点的函数在内核中的实现流程:
通过proc_create为结构申请空间,并进行一些初始化工 作。 proc_register则进一步填写结构中的域。并完成注册工作
删除节点的函数在内核中的实现流程:
则是先调用clear_bit和proc_kill_inodes,注销inode结构 ,如果引用数为0,则调用free_proc_entry释放结构对应 的空间;否则置一个删除标志,不释放空间
proc文件系统的编程接口
创建设备文件proc_mknod()
struct proc_dir_entry *proc_mknod( const char *name, mode_t mode, struct proc_dir_entry *paren建一个名字为name的设 备文件,文件类型和权限为mode,设备号为rdev 。
操作系统 课程设计
proc 文件系统
proc
proc 文件系统是 Linux 中的特殊文件系统,提供 中的特殊文件系统, 给用户一个可以了解内核内部工作过程的可读窗 口,在运行时访问内核内部数据结构、改变内核 在运行时访问内核内部数据结构、 设置的机制。 设置的机制。
保存系统当前工作的特殊数据,但并不存在于任何物 理设备中; 对其进行读写时,才根据系统中的相关信息即时生成 ;或映射到系统中的变量或数据结构; proc 被称为‘伪文件系统’; 其挂接目录点固定为/proc; ‘man proc’ 进行了详细说明。
proc
/proc 的文件可以用于访问有关内核的状态、计 的文件可以用于访问有关内核的状态、 算机的属性、正在运行的进程的状态等信息。 算机的属性、正在运行的进程的状态等信息。大 部分 /proc 中的文件和目录提供系统物理环境最 新的信息。 新的信息。 中的文件是虚拟的, 尽管 /proc 中的文件是虚拟的,但它们仍可以使 用任何文件编辑器或像'more', 'less'或 'cat'这样 用任何文件编辑器或像'more', 'less'或 'cat'这样 的程序来查看。 的程序来查看。当编辑程序试图打开一个虚拟文 件时, 件时,这个文件就通过内核中的信息被凭空地 (on the fly) 创建了 。
该函数将创建一个proc文件,文件名为name,文 件类型和访问权限为mode,父目录为parent。 如果想在proc文件系统的根目录下创建,则制定 参数parent为NULL。 和普通文件不同的是,proc文件系统允许在同一 个目录下创建多个同名的文件和子目录 创建的文件和目录不能用常规文件系统的rm或 rmdir删除
该函数将创建一个只读的proc文件,其实它只是 简单地调用create_proc_entry,并将返回结构的 read_proc域的值置为read_proc,data域的值置 为data。
proc文件系统的编程接口
创建目录create_mkdir()
struct proc_dir_entry *proc_mkdir( const char *name, struct proc_dir_entry *parent)
得到有用的系统/内核信息
proc 文件系统可以被用于收集有用的关于系统和运行中 的内核的信息。下面是一些重要的文件:
/proc/cpuinfo - CPU 的信息 (型号, 家族, 缓存大小等) /proc/meminfo - 物理内存、交换空间等的信息 /proc/mounts - 已加载的文件系统的列表 /proc/devices - 可用设备的列表 /proc/filesystems - 被支持的文件系统 /proc/modules - 已加载的模块 /proc/version - 内核版本 /proc/cmdline - 系统启动时输入的内核命令行参数
proc文件系统的编程接口
前面学习了proc文件系统的基本概念。本次实验 将编写一个内核模块。通过加载模块,在/proc目 录下增加若干个文件,用户对文件的读写都由模 块进行处理。 /proc目录下的文件属于一种特殊的文件,必须用 特定的方法创建和删除 proc 文件系统的编程接口比较好记,大部分函数 文件系统的编程接口比较好记, 是VFS函数名前面加上一个 函数名前面加上一个”proc_” 函数名前面加上一个
创建目录函数proc_mkdir(); 创建符号链接函数proc_symlink(); 创建设备文件函数proc_mknod();
proc文件系统的编程接口
介绍内核函数之前。先来了解proc文件系统编程 最主要的数据结构—— proc_dir_entry
struct proc_dir_entry { struct module *owner; unsigned short low_ino; struct proc_dir_entry *next, *parent, *subdir; unsigned short namelen; void *data; const char *name; read_proc_t *read_proc; mode_t mode; write_proc_t *write_proc; nlink_t nlink; atomic_t count; /*使用计数*/ uid_t uid; int deleted; /*删除标志*/ gid_t gid; kdev_t rdev; unsigned long size; struct inode_operations *proc_iops; }; struct file_operations *proc_fops; get_info_t *get_info;
通过 /proc 与内核交互
上面讨论的大部分 /proc 的文件是只读的。而实际上 /proc 文件系统通过 /proc 中可读写的文件提供了对内核的交互 机制。写这些文件可以改变内核的状态,因而要慎重改动 这些文件。 /proc/sys 目录存放所有可读写的文件的目录,可以被用于 改变内核行为。 /proc/sys/kernel - 这个目录包含反通用内核行为的信息。 /proc/sys/kernel/{domainname, hostname} 存放着机器/网 络的域名和主机名。这些文件可以用于修改这些名字。
proc文件系统的编程接口
以上函数只能创建一个文件,要想使创建的文件 发挥作用,还有两个域的值需要填写,它们是 read_proc和write_proc。 该两个函数都是回调函数,当对文件进行读写时 ,系统会自动调用相应的回调函数。
int (*read_proc) (char *page, char **start, off_t off, int count, int *eof, void *data) int (*write_proc) (struct file *file, const char *buffer, unsigned long count, void *data)
proc文件系统的编程接口
下面介绍几个内核函数。通过这些函数,可以请 求内核在proc文件系统中创建或者删除文件或目 录。 要注意这些函数都是内核函数,只能在核心态被 调用,需要编写一个内核模块去调用它们。
proc文件系统的编程接口
创建文件create_proc_entry()
struct proc_dir_entry *create_proc_entry( const char *name, mode_t mode, struct proc_dir_entry *parent)
例子1
proc 中的文件远不止上面列出的这么多。想要进一步了 解,可以对 /proc 的每一个文件都'more'一下。
一个系统的CPU信息,十分清楚地给出了这个系统的有用的硬件信息。
有关运行中的进程的信息
/proc 文件系统可以用于获取运行中的进程的信息。在 /proc 中有一些编号的子目录。每个编号的目录对应一个 进程 id (PID)。这样,每一个运行中的进程 /proc 中都有 一个用它的 PID 命名的目录。这些子目录中包含可以提 供有关进程的状态和环境的重要细节信息的文件。让我们 试着查找一个运行中的进程,见下页。
有关运行中的进程的信息
文件 “cmdline” 包含启动进程时调用的命令行。 "cpu"仅在运行 SMP 内核时出现,里面是按 CPU 划分的进程时间。 “cwd”是指向进程当前工作目录的符号链接, “envir” 进程的环境变量。 “exe”指向运行的进程的可执行程序, 目录“fd”包含指向进程使用的文件描述符的链接。 “root”指向被这个进程看作是根目录的目录 (通常是“/”)。 “status” 是进程的状态信息,包括启动进程的用户的用户ID (UID) 和组 ID(GID) ,父进程ID (PPID),还有进程当前的状态,比如“Sleelping”和 “Running”。每个进程的目录都有几个符号链接,
例子和作业2
学习下面的例子。这个例子是一个内核模块,请 按照学过的编译内核模块的方法进行编译,然后 看看/proc目录有什么变化。 根据这个例子,在/proc目录下用自己的学号创建 一个目录,如/proc/13081201。然后在学号目录 下创建两个文件,一个用自己的姓作为文件名, 如/proc/13081201/zhang,此文件是只读的,用 于显示当前进程的PID信息;另一个文件用自己 的名字作为文件名,如/proc/13081201/xiaoming ,此文件是可读写的。
相关文档
最新文档