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文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。
linux操作系统课程学习笔记,我的Linux学习笔记·Linux操作系统基础
linux操作系统课程学习笔记,我的Linux学习笔记·Linux操作系统基础今天的笔记主要是关于Linux操作系统根底的相关学问。
那就从我⾯前的电脑开端讲起。
计算机和操作系统计算机主要包括五个部分:运算器,控制器,存储器,输⼊设备和输出设备。
通常,运算器,控制器再加上其他⼀些部件如寄存器等构成了我们通常所说的CPU(central processing unit),存储器则主要是内存。
运算器,控制器和存储器可以实现数据的处理.但是数据从何⽽来,运算之后的结果去往哪⾥?这就需要输⼊设备和输出设备(I/O设备)。
我们通常⽤到的输⼊设备包括键盘⿏标等,输出设备为屏幕,打印机等。
值得⼀提的是,计算机中有个叫做硬盘的东西,它并不是存储器,⽽是⼀个I/O设备。
在将数据读取到内存时,它是⼀个输⼊设备;⽽将结果保存到磁盘时,它就变成了⼀个输出设备。
这么多设备整合在⼀起,就成了⼀台计算机。
它可以接收我们的指令(键盘⿏标),通过运算(CPU),把结果展⽰给我们(屏幕,硬盘等)。
但是这么多硬件是如何协调作⽤,共同完成⼀个任务⽽不会我⾏我素地乱来呢?我们需要⼀个东西,它可以控制硬件有序地⼯作,各⾃执⾏⾃⼰的任务,这个东西就是操作系统(Operating System)。
操作系统是⼀个特殊的软件,它的任务就是硬件管理—控制CPU的运算,控制内存的分配,控制计算机的⼏乎⼀切。
假如⼀台电脑没有操作系统,它可能只是⼀个艺术品,或者⼀堆废铁。
⼀个完整的操作系统包括内核和⼀些辅助软件。
内核的主要任务就是进⾏硬件管理,它是⼀个操作系统最基础最底层的东西。
内核若想很好地控制硬件并使其发挥相应的功能,需要和硬件相识相知相爱,他俩可以成为完美的⼀对,全都仰仗于驱动的帮忙。
驱动是硬件的灵魂,它向操作系统提供了访问和使⽤硬件的接⼝,以便在某项任务中最⾼效地调⽤硬件。
什么是LinuxLinux就是⼀个操作系统,它可以管理整个计算机硬件,并且可以接收我们的指令,来指挥硬件完成相应的任务,并把结果反馈给我们。
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 --------------------------------------------------------------------------------
linux实训总结范文
}
}
结果为:
putthestringintothepipe.
3.实验要求:写出实验报告并将结果上传到FTPSERVER上自己的作业目录。
4.跪求实习报告
计算机网络工程实习报告:唐始达范文来源:本站原创点击数:19803更新时间:2021-1-15这个学期初,学校安排了我在四川华迪信息技术有限公司实习,虽然时间不是很长,但是我受益匪浅,对网络工程深有体会。
4、把/etc/shadow文件中的最后10行复制到test.c文件中。
5、添加用户test,限定用户test在/home分区下,只能使用最多20MB磁盘空间。
6、某系统管理员需每天做一定的重复工作,请按照下列要求,编制一个解决方案:(1)在下午4:50删除/abc目录下的全部目录和全部文件。(2)每周五下午的5:00将/home/test目录下的所有文件归档并压缩为/backup目录中的test-data.tar.gz文件。
2.运行ps、manps、cal、date、clear、who、which命令,观察输出结果
3.运行/proc文件系统的相关命令(参见以下实验陈述3),观察输出结果
实验陈述:
1、基础知识:
为什么说/proc是一个虚拟文件系统:
proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。
该文件的作用:
²从系统启动以来已经创建了多少进程
Ø指令:cat/proc/stat
系统日志和应用程序日志的查看和分析。这次实习内容中,我最深刻的就是网线的制作:1、在制作网线之前先了解一下网线的排线顺序及用法568A:从左至右线序是:白绿,绿,白橙,蓝,白蓝,橙,白棕,棕568B:从左至右线序是:白橙,橙,白绿,蓝,白蓝,绿,白棕,棕左←→右水晶扣在下面。
proc 文件系统
该函数将创建一个目录,父目录为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’ 进行了详细说明。
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-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 ⽂件系统。
Linux学习笔记一(文件和目录操作)
Linux学习笔记⼀(⽂件和⽬录操作)1.基本shell操作命令解析器--根据命令的名字,调⽤对应的可执⾏程序shell--unix操作系统bash--Linux操作系统(⽂件系统)Linux⽂件系统的存储单元是块在磁盘上存储的时候每个⽂件都有⼀个inode--i节点,保存了⼀些⽂件信息,通过iNode找到对应的⽂件a.快捷键b.虚拟终端history--查询命令的历史记录ctrl+p == 向上的箭头,查询上⼀个命令ctrl+n == 向下的箭头,查询下⼀个命令ctrl+b 向左移动backctrl+f 向右移动forwardctrl+a 移动到⾏⾸ctrl+e 移动到⾏尾ctrl+h 刪除光标前⾯的字符ctrl+d 刪除光标覆盖的字符ctrl+u 刪除光标前⾯的所有字符ctrl+k 删除光标位置到⾏尾的字符ctrl+l或者clear命令清理屏幕c.命令和路径补齐tab智能提⽰键,按⼀次没反应说明有很多符合条件的命令,再按⼀次出现符合条件的命令列表cd ⽬录 + 连续两次tab,显⽰⽬录下⼀级的所有路径d.centos7防⽕墙操作systemctl start firewalld.service 启动systemctl enable firewalld.service 开机启动systemctl stop firewalld.service 停⽌systemctl disable firewalld.service 禁⽌开机启动systemctl status firewalld.service 查看状态firewall-cmd --state 查看状态2.Linux系统⽬录结构ls 路径(查询当前路径下的所有⽂件)/根⽬录下的⽬录说明:/bin bin是binary的缩写,这个⽬录存放着经常使⽤的命令可执⾏程序/boot 存放的是启动Linux时的⼀些核⼼⽂件,包括⼀些连接⽂件以及镜像⽂件(开机启动项)/dev 是Device(设备)的缩写,该⽬录存放的是Linux的外部设备,在Linux中访问设备的⽅式和访问⽂件的⽅式是相同的(Linux奉⾏⼀切皆⽂件,它会把所有硬件外设抽象成设备⽂件存到dev⽬录之下,⽐如⿏标键盘)/etc ⽤来存放所有系统管理所需要的配置⽂件和⼦⽬录/home ⽤户的主⽬录,在Linux中,每个⽤户都有⼀个⾃⼰的⽬录,⼀般该⽬录名是以⽤户的账号命名。
linux学习心得总结范文
linux学习心得总结范文linux学习心得总结【1】学习Linux,应该怎样学,主要学些什么,一位Linux热心学习者,一段学习Linux的风云经验,历时十二个小时的思考总结,近十位网络Linux学习者权威肯定,为您学习Linux指明方向,学习效率,掌握程度,熟悉操作是日常学习Linux中的三大法宝。
以下是作者学习Linux的一些个人经验,供参考:1,应对Linux的发展历史和特点有所了解,Linux是抢占式多任务多用户操作系统,Linux最大的优点在于其作为服务器的强大功能,同时支持多种应用程序及开发工具。
2,熟悉并掌握安装Linux,安装是学习的前提。
目前较常见的安装方法有二种:硬盘安装及光盘安装,清楚了解安装Linux应注意的有关问题,如安装Linux应在最后一个分区内,至少分二个分区,在系统检测不到与Linux兼容的显卡,那么此次安装就可能不支持图形化界面安装,而只能用文本模式安装等等。
3,掌握硬件配置,如显卡,声卡,网卡等,硬件只要不是太老或太新一般都能被支持,作为一名Linux系统管理员建议多阅读有关硬件配置文章,对各种不支持或支持不太好的硬件有深刻的了解。
4,熟悉系统的基本操作,Linux的图形界面直观,操作简便,多加上机练习就可熟悉操作,在Linux下学习办公软件等常用软件,永中office2004增强版安装只需要默认安装即可使用并操作大多与win系统雷同,打印机的配置和管理,记录光盘等。
5,一定要学好命令,shell是命令语言,命令解释程序及程序设计语言的统称,shell也负责用户和操作系统之间的沟通,把用户下达的命令解释给系统去执行,并将系统传回的信息再次解释给用户,估shell也称为命令解释器,有关命令的学习可参考论坛相关文章,精通英文也是学习Linux的关键。
6,掌握在Linux系统中安装软件,在安装Linux工具盘后大致日常所需的软件都会有,一般网络提供下载的软件都会有安装说明。
Linux下proc文件系统编程
/proc文件系统编程在Linux中有一个另外的机制来使内核及内核模块发送信息给进程——/proc文件系统。
./proc文件系统在Linux中有一个另外的机制来使内核及内核模块发送信息给进程——/proc文件系统。
/proc文件系统最初是设计使得容易得到进程的信息(从名字可以看出),现在却被任意一块有内容需要报告的内核使用,比如拥有模块列表的/proc/modules和拥有内存使用统计信息的/proc/meminfo。
使用proc文件系统的方法很象使用设备驱动——你创建一个数据结构,使之包含/proc文件需要的全部信息,包括所有函数的句柄(在我们的例子里只有一个,在试图读取/proc 文件时调用)。
然后,用init_module注册这个结构,用cleanup_module注销。
我们使用proc_register_dynamic(注3.1)的原因是我们不希望决定以后在文件中使用的索引节点数,而是让内核来决定它,为了防止冲突。
标准的文件系统是在磁盘上而不是在内存(/proc的位置在内存),在这种情况下节点数是一个指向文件的索引节点所在磁盘地址的指针。
这个索引节点包含了文件的有关信息比如文件的访问权限以及指向磁盘地址的指真或者文件数据的位置。
因为在文件打开或关闭时我们没有调用,所以在模块里无处可放宏MOD_INC_USE_COUNT和MOD_DEC_USE_COUNT,而且如果文件被打开了或者模块被删除了,就没有办法来避免这个结果。
下一章我们将会看到一个更困难的处理/proc的方法,但是也更加灵活,也能够解决这个问题。
ex procfs.c/* procfs.c - create a "file" in /proc* Copyright (C) 1998-1999 by Ori Pomerantz*//* The necessary header files *//* Standard in kernel modules */#include <linux/kernel.h> /* We're doing kernel work */#include <linux/module.h> /* Specifically, a module *//* Deal with CONFIG_MODVERSIONS */#if CONFIG_MODVERSIONS==1#define MODVERSIONS#include <linux/modversions.h>#endif/* Necessary because we use the proc fs */#include <linux/proc_fs.h>/* In 2.2.3 /usr/include/linux/version.h includes a* macro for this, but 2.0.35 doesn't - so I add it* here if necessary. */#ifndef KERNEL_VERSION#define KERNEL_VERSION(a,b,c) ((a)*65536+(b)*256+(c)) #endif/* Put data into the proc fs file.Arguments=========1. The buffer where the data is to be inserted, ifyou decide to use it.2. A pointer to a pointer to characters. This isuseful if you don't want to use the bufferallocated by the kernel.3. The current position in the file.4. The size of the buffer in the first argument.5. Zero (for future use?).Usage and Return Value======================If you use your own buffer, like I do, put itslocation in the second argument and return the number of bytes used in the buffer.A return value of zero means you have no further information at this time (end of file). A negativereturn value is an error condition.For More Information====================The way I discovered what to do with this function wasn't by reading documentation, but by reading the code which used it. I just looked to see what usesthe get_info field of proc_dir_entry struct (I used a combination of find and grep, if you're interested),and I saw that it is used in /fs/proc/array.c.If something is unknown about the kernel, this is usually the way to go. In Linux we have the great advantage of having the kernel source code for free - use it.*/int procfile_read(char *buffer,char **buffer_location,off_t offset,int buffer_length,int zero){int len; /* The number of bytes actually used *//* This is static so it will still be in memory* when we leave this function */static char my_buffer[80];static int count = 1;/* We give all of our information in one go, so if the * user asks us if we have more information the* answer should always be no.** This is important because the standard read* function from the library would continue to issue * the read system call until the kernel replies* that it has no more information, or until its* buffer is filled.*/if (offset > 0)return 0;/* Fill the buffer and get its length */len = sprintf(my_buffer,"For the %d%s time, go away! ", count,(count % 100 > 10 && count % 100 < 14) ? "th" : (count % 10 == 1) ? "st" :(count % 10 == 2) ? "nd" :(count % 10 == 3) ? "rd" : "th" );count++;/* Tell the function which called us where the* buffer is */*buffer_location = my_buffer;/* Return the length */return len;}struct proc_dir_entry Our_Proc_File ={0, /* Inode number - ignore, it will be filled by* proc_register[_dynamic] */4, /* Length of the file name */"test", /* The file name */S_IFREG | S_IRUGO, /* File mode - this is a regular * file which can be read by its* owner, its group, and everybody* else */1, /* Number of links (directories where the* file is referenced) */0, 0, /* The uid and gid for the file - we give it* to root */80, /* The size of the file reported by ls. */NULL, /* functions which can be done on the inode * (linking, removing, etc.) - we don't* support any. */procfile_read, /* The read function for this file,* the function called when somebody* tries to read something from it. */NULL /* We could have here a function to fill the* file's inode, to enable us to play with* permissions, ownership, etc. */};/* Initialize the module - register the proc file */int init_module(){/* Success if proc_register[_dynamic] is a success,* failure otherwise. */#if LINUX_VERSION_CODE > KERNEL_VERSION(2,2,0) /* In version 2.2, proc_register assign a dynamic* inode number automatically if it is zero in the* structure , so there's no more need for* proc_register_dynamic*/return proc_register(&proc_root, &Our_Proc_File);#elsereturn proc_register_dynamic(&proc_root, &Our_Proc_File); #endif/* proc_root is the root directory for the proc* fs (/proc). This is where we want our file to be* located.*/}/* Cleanup - unregister our file from /proc */void cleanup_module(){proc_unregister(&proc_root, Our_Proc_File.low_ino);}。
proc文件系统下,创建文件和文件夹proc_mkdir()proc_create()
proc⽂件系统下,创建⽂件和⽂件夹proc_mkdir()proc_create()proc_create的使⽤⽅法proc⽂件系统是个有⽤的东东。
创建⼀个proc虚拟⽂件,应⽤层通过读写该⽂件,即可实现与内核的交互。
proc虚拟⽂件是如何创建的呢?先看看⽐较简单的,创建proc⽂件夹。
调⽤以下函数,即可实现proc⽂件夹的创建:struct proc_dir_entry *proc_mkdir(const char *name, struct proc_dir_entry *parent);name就是要创建的⽂件夹名称。
parent是要创建节点的⽗节点。
也就是要在哪个⽂件夹之下创建新⽂件夹,需要将那个⽂件夹的proc_dir_entry传⼊。
如果是在/proc⽬录下创建⽂件夹,parent为NULL。
例如:struct proc_dir_entry *mytest_dir = proc_mkdir("mytest", NULL);然后来看看proc⽂件的创建。
创建⽅法是调⽤以下函数:static inline struct proc_dir_entry *proc_create(const char *name, mode_t mode,struct proc_dir_entry *parent, const struct file_operations *proc_fops);name就是要创建的⽂件名。
mode是⽂件的访问权限,以UGO的模式表⽰。
parent与proc_mkdir中的parent类似。
也是⽗⽂件夹的proc_dir_entry对象。
proc_fops就是该⽂件的操作函数了。
例如:struct proc_dir_entry *mytest_file = proc_create("mytest", 0x0644, mytest_dir, mytest_proc_fops);还有⼀种⽅式:struct proc_dir_entry *mytest_file = proc_create("mytest/mytest", 0x0644, NULL, mytest_proc_fops);如果⽂件夹名称和⽂件名定义为常量:#define MYTEST_PROC_DIR "mytest"#define MYTEST_PROC_FILE "mytest"第⼆种⽅式为:struct proc_dir_entry *mytest_file = proc_create(MYTEST_PROC_DIR"/"MYTEST_PROC_FILE, 0x0644, NULL, mytest_proc_fops);接下来看看mytest_proc_fops的定义。
Linux系统下各文件目录的含义
随着Linux的不断发展,越来越多的人开始使用Linux,对于那些刚刚接触的人来说,恐怕最先感到困惑的就是那些“不明不白”的目录了。
如果想熟练使用Linux,让Linux听命于自己,就必须掌握这些目录,下面就以Xteam公司的最新产品——XteamLinux 4.0为例,介绍一下在该系统下的目录。
/bin bin是Binary的缩写。
这个目录存放着最经常使用的命令。
/boot这里存放的是启动Linux时使用的一些核心文件,包括一些链接文件以及镜像文件。
/dev dev是Device(设备)的缩写。
该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
/etc这个目录用来存放所有的系统管理所需要的配置文件和子目录。
/home用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
/lib这个目录里存放着系统最基本的动态链接共享库,其作用类似于Windows里的DLL文件。
几乎所有的应用程序都需要用到这些共享库。
/lost+found这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
/mnt在这里面中有四个目录,系统提供这些目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/cdrom上,然后进入该目录就可以查看光驱里的内容了。
/proc这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:echo 1 >; /proc/sys/net/ipv4/icmp_echo_ignore_all。
/root该目录为系统管理员,也称作超级权限者的用户主目录。
/sbin s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
proc文件系统
10
seq_file操作procfs步骤( seq_open 1)
I. 在proc文件下创建自己的文件 static inline struct proc_dir_entry *proc_create(
const char *name, umode_t mode, struct proc_dir_entry *parent,
create_proc_read_entry 和create_proc_entry接口在新版 本的内核中已经废弃
4
seq_file
内核通过在procfs文件系统下建立文件来向用户空间提供输出信息, 用户空间可以通过任何文本阅读应用查看该文件信息,但是procfs 有 一个缺陷,如果输出内容大于1个内存页,需要多次读,因此处理起来 很难,另外,如果输出太大,速度比较慢,有时会出现一些意想不到 的情况。
6
seq_file操作procfs的方式
single_open方式 此种方式为简单方式对应的释放函数为 single_release seq_open方式 此种方式为复杂方式对应的释放函数为 seq_release
7
seq_file操作procfs步骤( single_open 1)
I. 在proc文件下创建自己的文件
procfs
2
proc文件系统概要
虚拟文件系统
驻留于内存、不占用存储空间
创建和显示内核内部的资源视窗
数据是在内核运行过程中产生的
用于配置内核参数、查看内核结构体、从设备驱 动程序中收集统计信息、获取通用的系统信息 在系统启动过程中挂载在/proc目录
3
proc文件系统操作示例1
糟 糕 的 实 现 方 式
在结束时候被调用,完成一些清理工作
教学课件第7章Linux文件管理
7.5.7 文件的复制、移动和删除命令-cp,mv,rm
1.cp命令。 cp [option] [ src_filel src_dir] [dst_file I dst_dir]
2.mv命令。 mv [option] [src_file|src_dir] [dst_fileldst_dir]
第七章 Linux文件管理
7.4 文件操作系统调用
在VFS中,采用dentry结构和inode节点配合实 现文件查找。
主要文件操作:
1.文件的打开。 2.文件的关闭 。 3.文件指针移动 。 4.读写文件操作。 5.文件属性控制。 6.文件上锁。 7.文件的I/O控制。 8.各种其他文件操作。
第七章 Linux文件管理
第七章 Linux文件管理
7.5 文件与目录基本操作
7.5.3 文件查找命令-find,locate
1.find命令。 find [option] filename
2.locate命令 。 locate [option] filename
第七章 Linux文件管理
7.5 文件与目录基本操作
7.5.4 文本处理命令-sort,uniq
第七章 Linux文件管理
7.3 虚拟文件系统
虚拟文件系统(VFS)是物理文件系统与服务之 间的一个接口层,它对每一个具体的文件系统的所有 细节进行抽象,使得Linux用户能够用同一个接口使 用不同的文件系统。
VFS只是一种存在于内存的文件系统,在系统 启动时产生,并随着系统的关闭而注销。
第七章 Linux文件管理
第七章 Linux文件管理
7.2 Linux文件系统
7.2.3 文件系统的实现
linux学习步骤
第一阶段Linux系统管理与编程基础1. 嵌入式系统概述2. Linux介绍2. Linux定制安装3. Linux命令详解1. Linux系统管理2. Shell 编程3. Shell 编程综合实例-qcd1. GCC程序编译2. GDB程序调试3. Makefile 工程管理第二阶段应用程序设计1. Linux文件编程(系统调用)2. Linux文件编程(库函数)3. Linux时间编程1. Linux 进程基础2. Linux多进程程序设计1. 进程间通讯概述2. 管道通讯3. 信号通讯4. 共享内存通讯1. 消息队列通讯2. 信号灯1. Linux线程基础2. Linux线程创建3. Linux线程等待4. Linux线程清除1. IP协议分析2. TCP协议分析3. UDP协议分析4. TCP通讯程序设计5. UDP通讯程序设计6. 并发服务器模型7. 多路复用第三阶段ARM程序设计1. ARM处理器概述2. ARM处理器工作模式3. ARM系统寄存器4. ARM寻址方式5. ARM 汇编指令集6. ARM环境C语言编程7. ADS集成开发环境1. LED程序设计2. ARM中断与异常3. S3c2440 GPIO4. 按键程序设计5. 串口程序设计第四阶段Linux内核开发1. Linux内核简介2. Linux内核源代码结构3. Linux内核配置与裁剪4. Linux内核模块开发5. Linux内核启动流程1. 嵌入式Linux产品开发流程2. 交叉工具链3. Bootloader介绍4. U-Boot介绍5. U-Boot命令6. U-Boot工作原理7. U-Boot移植1. 嵌入式Linux内核制作2. 根文件系统制作3. 嵌入式文件系统介绍1. Linux内存管理2. Linux进程地址空间3. Linux内核地址空间4. Linux内核链表5. Linux内核定时器1. Linux进程控制2. Linux进程调度3. Linux系统调用4. Proc文件系统5. Linux内核异常分析第五阶段Linux驱动程序设计1.Linux驱动简介2.字符设备驱动程序设计3.驱动调试技术4. 并发与竞态1.Ioctl型驱动2.内核等待队列3. 阻塞型驱动程序设计4.Poll 设备操作1.Mmap设备操作2. 硬件访问3. 混杂设备驱动4. LED驱动程序设计1. Linux总线、设备、驱动模型2. Linux platform驱动3. 中断处理4. 按键驱动程序1.Linux网络体系架构2. Linux网卡驱动程序设计3. Dm9000网卡驱动程序分析4. 触摸屏驱动程序设计1. PCI驱动程序设计2. 串口驱动程序设计深入专题—SUB系统开发1. USB简介2. USB系统架构3. USB设备逻辑结构4. USB描述符5. USB传输6. USB枚举1. Linux USB系统架构2. Mass Storage3. USB HID4. RNDIS5. CDC/ACM1. USB驱动程序模型2. Linux USB描述符3. URB4. USB鼠标驱动程序详解深入专题—H。
linux proc 程序例子
linux proc 程序例子
在Linux系统中,/proc目录是一个虚拟文件系统,它提供了关于系统内核和运行中进程的信息。
这个目录中包含了大量的文件和子目录,其中的每一个文件和子目录都代表了一个系统内核的属性或者一个正在运行的进程。
下面是一个关于/proc目录下的一些文件和子目录的例子:
1. /proc/cpuinfo,这个文件包含了关于CPU的信息,比如CPU型号、速度、缓存大小等。
可以使用cat命令来查看这个文件的内容。
2. /proc/meminfo,这个文件包含了关于内存的信息,比如总内存量、空闲内存量、内存使用情况等。
同样可以使用cat命令来查看这个文件的内容。
3. /proc/loadavg,这个文件包含了系统的负载平均值,可以通过查看这个文件来了解系统的负载情况。
4. /proc/PID目录,在这里,PID代表一个正在运行的进程的ID。
在这个目录下可以找到关于该进程的很多信息,比如进程的状
态、命令行参数、内存使用情况等。
这些只是/proc目录下的一小部分文件和子目录的例子。
通过查看这些文件和子目录,我们可以获取关于系统内核和正在运行的进程的各种信息,这对于系统管理和性能调优非常有帮助。
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写入proc目录
#if defined (CONFIG_RALINK_RT3052) || defined (CONFIG_RALINK_RT3352)static u32 raeth_sw_port_link = 0;static irqreturn_t esw_interrupt(int irq, void *dev_id){unsigned long flags;unsigned long reg_int_val;struct net_device *dev = (struct net_device *) dev_id;static u32 stat;u32 stat_curr;END_DEVICE *ei_local = netdev_priv(dev);spin_lock_irqsave(&(ei_local->page_lock), flags);reg_int_val = (*((volatile u32 *)(RALINK_ETH_SW_BASE))); //Interrupt Status Registerif (reg_int_val & PORT_ST_CHG) {printk("RT305x_ESW: Link Status Changed\n");stat_curr = *((volatile u32 *)(RALINK_ETH_SW_BASE+0x80));raeth_sw_port_link = (stat_curr>>25)&0x1f;#ifdef CONFIG_WAN_AT_P0//if Port0 link down --> link upif ((stat & (1<<25)) || !(stat_curr & (1<<25)))#else//if Port4 link down --> link upif ((stat & (1<<29)) || !(stat_curr & (1<<29)))#endifgoto out;schedule_work(&ei_local->kill_sig_wq);out:stat = stat_curr;}sysRegWrite(RALINK_ETH_SW_BASE, reg_int_val);spin_unlock_irqrestore(&(ei_local->page_lock), flags);return IRQ_HANDLED;}static int raeth_port_read_proc(char* page, char ** start, off_t off, int count, int* eof, void * data){int n;n = sprintf(page, "%d %d %d %d %d\n",(raeth_sw_port_link>>4)&1,(raeth_sw_port_link>>3)&1,(raeth_sw_port_link>>2)&1,(raeth_sw_port_link>>1)&1,(raeth_sw_port_link>>0)&1);*eof=1;return n;}/* Read in debug from userland */static int raeth_port_write_proc(struct file* file, const char* buffer, unsigned long count, void *data){return 0;}static void raeth_port_init_proc(void){struct proc_dir_entry* entry;entry = create_proc_entry("raeth_port", 0644, init_net.proc_net);entry->read_proc = raeth_port_read_proc;entry->write_proc = raeth_port_write_proc;}#endif#if defined (CONFIG_RALINK_RT3052) || defined (CONFIG_RALINK_RT3352) raeth_port_init_proc();#endif#if defined (CONFIG_RALINK_RT3052) || defined (CONFIG_RALINK_RT3352) remove_proc_entry("raeth_port", init_net.proc_net);#endif####################使用proc文件系统By: 潘云登Date: 2009-5-23Email: intrepyd@Homepage: /intrepydCopyright: 该文章版权由潘云登所有。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
linux proc文件系统学习目录:/proc --- 一个虚拟文件系统加载 proc 文件系统察看 /proc 的文件得到有用的系统/内核信息有关运行中的进程的信息通过 /proc 与内核交互结论参考文献摘要:Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。
尽管在各种硬件平台上的 Linux 系统的 /proc 文件系统的基本概念都是相同的,但本文只讨论基于 intel x86 架构的 Linux /proc 文件系统。
_________________ _________________ _________________一./proc --- 一个虚拟文件系统/proc 文件系统是一种内核和内核模块用来向进程 (process) 发送信息的机制(所以叫做 /proc)。
这个伪文件系统让你可以和内核内部数据结构进行交互,获取有关进程的有用信息,在运行中 (on the fly) 改变设置(通过改变内核参数)。
与其他文件系统不同,/proc 存在于内存之中而不是硬盘上。
如果你察看文件 /proc/mounts (和 mount 命令一样列出所有已经加载的文件系统),你会看到其中一行是这样的:grep proc /proc/mounts /proc /proc proc rw 0 0/proc 由内核控制,没有承载 /proc 的设备。
因为 /proc 主要存放由内核控制的状态信息,所以大部分这些信息的逻辑位置位于内核控制的内存。
对 /proc 进行一次 'ls -l' 可以看到大部分文件都是 0 字节大的;不过察看这些文件的时候,确实可以看到一些信息。
这怎么可能?这是因为 /proc 文件系统和其他常规的文件系统一样把自己注册到虚拟文件系统层 (VFS) 了。
然而,直到当 VFS 调用它,请求文件、目录的 i-node 的时候,/proc 文件系统才根据内核中的信息建立相应的文件和目录。
二.加载 proc 文件系统如果系统中还没有加载 proc 文件系统,可以通过如下命令加载 proc 文件系统:mount -t proc proc /proc上述命令将成功加载你的 proc 文件系统。
更多细节请阅读 mount 命令的man page。
三.察看 /proc 的文件/proc 的文件可以用于访问有关内核的状态、计算机的属性、正在运行的进程的状态等信息。
大部分 /proc 中的文件和目录提供系统物理环境最新的信息。
尽管 /proc 中的文件是虚拟的,但它们仍可以使用任何文件编辑器或像'more', 'less'或 'cat'这样的程序来查看。
当编辑程序试图打开一个虚拟文件时,这个文件就通过内核中的信息被凭空地(on the fly) 创建了。
这是一些我从我的系统中得到的一些有趣结果:$ ls -l /proc/cpuinfo -r--r--r-- 1 root root 0 Dec 25 11:01 /proc/cpuinfo $ file /proc/cpuinfo /proc/cpuinfo: empty $ cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 8 model name : Pentium III (Coppermine) stepping : 6 cpu MHz : 1000.119 cache size : 256 KB fdiv_bug : no hlt_bug : no sep_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 2 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 mmx fxsr xmm bogomips : 1998.85 processor : 3 vendor_id : GenuineIntel cpu family : 6 model : 8 model name : Pentium III (Coppermine) stepping : 6 cpu MHz : 1000.119 cache size : 256 KB fdiv_bug : no hlt_bug : no sep_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 2 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 mmx fxsr xmm bogomips : 1992.29这是一个从双 CPU 的系统中得到的结果,上述大部分的信息十分清楚地给出了这个系统的有用的硬件信息。
有些 /proc 的文件是经过编码的,不同的工具可以被用来解释这些编码过的信息并输出成可读的形式。
这样的工具包括:'top', 'ps', 'apm' 等。
四.得到有用的系统/内核信息proc 文件系统可以被用于收集有用的关于系统和运行中的内核的信息。
下面是一些重要的文件:/proc/cpuinfo - CPU 的信息(型号, 家族, 缓存大小等)/proc/meminfo - 物理内存、交换空间等的信息/proc/mounts - 已加载的文件系统的列表/proc/devices - 可用设备的列表/proc/filesystems - 被支持的文件系统/proc/modules - 已加载的模块/proc/version - 内核版本/proc/cmdline - 系统启动时输入的内核命令行参数proc 中的文件远不止上面列出的这么多。
想要进一步了解的读者可以对/proc 的每一个文件都'more'一下或读参考文献[1]获取更多的有关 /proc 目录中的文件的信息。
我建议使用'more'而不是'cat',除非你知道这个文件很小,因为有些文件(比如 kcore) 可能会非常长。
五.有关运行中的进程的信息/proc 文件系统可以用于获取运行中的进程的信息。
在 /proc 中有一些编号的子目录。
每个编号的目录对应一个进程 id (PID)。
这样,每一个运行中的进程/proc 中都有一个用它的 PID 命名的目录。
这些子目录中包含可以提供有关进程的状态和环境的重要细节信息的文件。
让我们试着查找一个运行中的进程。
$ ps -aef | grep mozilla root 32558 32425 8 22:53 pts/1 00:01:23 /usr/bin/mozilla 上述命令显示有一个正在运行的 mozilla 进程的 PID 是 32558。
相对应的,/proc中应该有一个名叫 32558 的目录$ ls -l /proc/32558 total 0 -r--r--r-- 1 root root 0 Dec 25 22:59 cmdline -r--r--r-- 1 root root 0 Dec 25 22:59 cpu lrwxrwxrwx 1 root root0 Dec 25 22:59 cwd -> /proc/ -r-------- 1 root root 0 Dec 25 22:59 environ lrwxrwxrwx 1 root root 0 Dec 25 22:59 exe -> /usr/bin/mozilla* dr-x------ 2 root root 0 Dec 25 22:59 fd/ -r--r--r-- 1 root root 0 Dec 25 22:59 maps -rw------- 1 root root0 Dec 25 22:59 mem -r--r--r-- 1 root root 0 Dec 25 22:59 mounts lrwxrwxrwx 1 root root 0 Dec 25 22:59 root -> // -r--r--r-- 1 root root 0 Dec 25 22:59 stat -r--r--r-- 1 root root 0 Dec 25 22:59 statm -r--r--r-- 1 root root 0 Dec 25 22:59 status 文件"cmdline" 包含启动进程时调用的命令行。
"envir" 进程的环境变量。
"status" 是进程的状态信息,包括启动进程的用户的用户ID (UID) 和组ID(GID) ,父进程ID (PPID),还有进程当前的状态,比如"Sleelping"和"Running"。
每个进程的目录都有几个符号链接,"cwd"是指向进程当前工作目录的符号链接,"exe"指向运行进程的可执行程序,"root"指向被这个进程看作是根目录的目录(通常是"/")。
目录"fd"包含指向进程使用的文件描述符的链接。
"cpu"仅在运行 SMP 内核时出现,里面是按 CPU 划分的进程时间。
/proc/self 是一个有趣的子目录,它使得程序可以方便地使用 /proc 查找本进程地信息。
/proc/self 是一个链接到 /proc 中访问 /proc 的进程所对应的 PID 的目录的符号链接。
六.通过 /proc 与内核交互上面讨论的大部分 /proc 的文件是只读的。
而实际上 /proc 文件系统通过/proc 中可读写的文件提供了对内核的交互机制。
写这些文件可以改变内核的状态,因而要慎重改动这些文件。
/proc/sys 目录存放所有可读写的文件的目录,可以被用于改变内核行为。
/proc/sys/kernel - 这个目录包含反通用内核行为的信息。
/proc/sys/kernel/{domainname, hostname} 存放着机器/网络的域名和主机名。