linux编程细节1-内核-文件目录

1 linux文件系统

1.1 文件系统概述



/
根目录 root (/),一般建议在根目录底下只接目录,不要直接有档案在 / 底下。根目录是开机的时候系统第一个挂载的 partition ,所以,所有开机过程会用到/的文件, 应该都要放置在这个 partition 当中。举例来说, /etc, /bin, /dev,/lib, /sbin 这五个次目录都应该要与根目录连在一起,不可独立成为某个partition 。
/bin
/usr/bin
/usr/local/bin

usr(Unix System Resources)
这几个目录放置各命令的执行文件。
/boot
这个目录放置Linux 系统开机会用到的Kernel文件(VMLINUZ)等。
/dev
这个目录放置的是任何设备和接口设备。比较重要的档案有 /dev/null, /dev/tty[1-6], /dev/ttyS*,/dev/lp*, /dev/hd*, /dev/sd* 等。
/etc
系统主要的设定文件几乎都放置在这个目录内,例如人员的账号密码文件、 各种服务的起始文件等等。比较重要的文件有: /etc/inittab, /etc/init.d/, /etc/modprobe.conf,/etc/X11,/etc/fstab, /etc/sysconfig/ 等。
另外,其下重要的目录有:
/etc/init.d/:所有服务的预设启动 script 都是放在这里的,例如要启动或者关闭 iptables 的话:/etc/init.d/iptables start;/etc/init.d/iptables stop。
/etc/xinetd.d/:这就是所谓的 super daemon 管理的各项服务的设定文件目录。
/etc/X11:与 X Window 有关的各种设定档都在这里,尤其是 xorg.conf或 XF86Config 这两个 X Server 的设定档。
/lib
/usr/lib
/usr/local/lib

系统会使用到的函数库放置的目录。比较重要的是 /lib/modules 这个目录内会摆放 kernel 的相关模块。
/home

一般用户的主文件目录。
/mnt
/media

这是软盘与光盘预设挂载点的地方;通常软盘挂在 /mnt/floppy 下,而光盘挂在 /mnt/cdrom 下。另外,目前也规划出另一个 /media 的目录呢!与 /mnt 有点类似。
/proc

系统核心与执行程序的一些信息。例如你的网络状态的问题啦!这个目录将在启动 Linux 的时候自动的被挂上,而且该目录底下不会占去硬盘空间!因为里面都是内存内的数据。
/sbin
/usr/sbin
/usr/local/sbin

放置一些系统管理员才会动用到的执行指令,例如: fdisk, mke2fs, fsck,mkswap, mount 等等。与 /bin 不太一样的地方,这几个目录是给 root 等系统管理用的。
/tmp

这是让一般使用者暂时存放文件的地方。

/usr

这个目录中含有相当多的系统信息。这个目录有点像是 Windows 底下的“C:\Program Files\”目录和“C:\Windows\”。
/opt
这是给主机额外安装软件所摆放的目录。不过,以前的 Linux 系统中,我们还是习惯放置在/usr/local 目录下呢!

/var

该目录针对常态性变动文件,如缓存(Cache)、登陆文件(log file)等。



1.2 目录/proc

/proc 文件系统是一种内核和内核模块用来向进程 (process) 发送信息的机制 (所以叫做 /proc)。这个伪文件系统让你可以和内核内部数据结构进行交互,获取有关进程的有用信息。与其他文件系统不同,/proc 存在于内存之中而不是硬盘上。
对 /proc 进行一次 'ls -l' 可以看到大部分文件都是 0 字节大的;/proc 文件系统和其他常规的文件系统一样把自己注册到虚拟文件系统层 (VFS) 了。然而,直到当 VFS 调用它,请求文件、目录的 i-node 的时候,/proc 文件系统才根据内核中的信息建立相应的文件和目录(感觉上像是用户读取的时候才立即采集信息生成该文件)。/proc文件反应了实时的内存,所以proc里的文件,实际上都是映射到内核空间中的具体数据上的,每次读取都是那一时刻的瞬时值。注意/proc不要理解为常见的文件(不是读出内存再写入/proc),/proc就是内存本身,只不过是系统将内存抽象为了一个目录。


proc 文件系统可以被用于收集有用的关于系统和运行中的内核的信息。下面是一些重要的文件:
/proc/cpuinfo - CPU 的信息 (型号, 家族, 缓存大小等)
/proc/meminfo - 物理内存、交换空间等的信息
/proc/mounts - 已加载的文件系统的列表
/proc/devices - 可用设备的列表
/proc/filesystems - 被支持的文件系统
/proc/modules - 已加载的模块
/proc/version - 内核版本
/proc/cmdline - 系统启动时输入的内核命令行参数

$ 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  root            0 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  root            0 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:该(虚拟)文件包含了启动该进程的整个命令行。它未曾格式化可以使用:perl -ple 's,\00, ,g' cmdline查看。
cwd:该符号链接指向该进程的当前工作目录。
environ:该文件包含为该进程定义的所有环境变量,格式为 变量=值。未曾格式化可以使用:perl -pl -e 's,\00,\n,g' environ查看。
exe:这是指向该进程所执行的可执行程序文件的符号链接。
fd:在此子目录中包含了该进程当前打开的所有描述符。参见下文。
maps:当您打印该命名管道内容时(例如使用 cat),您将看到该进程地址空间中当前映射到文件中的那部分。自左至右各列为:与该映射关联的地址空间,与该映射关联的权限,该映射起始位置的偏移量(从文件开始处算起),保存该映射文件设备的主、从序号(十六进制格式),该文件的 inode 序号,以及该文件的文件名。当设备号为 0 且没有 inode 号或文件名时,它就是一个匿名映射。请参阅 mmap(2)。
root:该符号链接指向该进程使用的根目录。通常为 /,请参阅 chroot(2)。
status:该文件包含该进程的众多信息:可执行文件名、当前状态、PID 和 PPID、实际及有效的 UID 和 GID、内存使用情况、以及其他。请注意,stat 和 statm 现已过时。它们包含的信息现存于 status。
cpu:仅在运行 SMP 内核时出现,里面是按 CPU 划分的进程时间。

Q:这里面的很多命令都是从内存文件/proc/下面去读的,比如说mpstat读的是/proc/stat,free命令读的是/proc/meminfo,uname读的是/proc/version,可以猜测这些命令都是从内存文件中直接读取数据,或再做一些运算。这个/proc/映射了内存情况,是如何组织的?


一个例子:查看/proc/stat文件:
$ cat /proc/stat | grep 'cpu'
cpu  4409701839 5860491 3043372756 11777957443 471600199 13606335 49392558 0
cpu0 980245201 1554799 596504303 3214215192 126029552 6603537 17697344 0
cpu1 1209283591 1411942 861982464 2749190858 113506249 255348 7220138 0
cpu2 971403569 1530154 624934033 3195318936 125767475 6491354 17450205 0
cpu3 1248769476 1363594 959951956 2619232456 106296922 256096 7024869 0
 
cpu一行指的是总的CPU信息,cpu0、cpu1、cpu2、cpu3几行指的是各个CPU核的使用信息。每行的每个参数意思为:(以第一行为例,从左到右依次列举)
l  user  从系统启动开始累计到当前时刻,用户态的CPU时间(单位:jiffies) ,不包含 nice值为负进程。1jiffies=0.01秒
l  nice  从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间(单位:jiffies)
l  system  从系统启动开始累计到当前时刻,核心时间(单位:jiffies)
l  idle  从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待时间(单位:jiffies)
l  iowait  从系统启动开始累计到当前时刻,硬盘IO等待时间(单位:jiffies),
l  irq  从系统启动开始累计到当前时刻,硬中断时间(单位:jiffies)
l  softirq  从系统启动开始累计到当前时刻,软中断时间(单位:jiffies)
l  steal  - 在虚拟环境下 CPU 花在处理其他作业系统的时间,Linux 2.6.11

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值