上以篇讲解了linux中关于日期的命令date和cal。今天翻开书看了看,发现这样看下去太零散,没有头绪。老师经常跟我讲,学东西要一开始就让自己站在一个较高的位置,从整体上俯视把握全局才能把事情看得清楚看明白。今天仔细想了想,也看了一段时间的linux了,却还是只了解了一些零散的知识点,没有系统的去深究。今天想重新从目录结构上了解一下linux。
1.一级目录查看
首先使用ls命令查看一下根目录下的有哪些目录(这里我称为一级目录)。
这里第一张图是centos的目录结构,第二章图为ubuntu的目录结构。ps:有些目录是本人实验时自己建立的。
对比两个目录,可以发现linux一般目录可归纳如下:
下面详细说明一下各个目录的含义及次级目录的内容。
根目录:所有的目录都由根目录衍生出来,根目录还与系统开机,还原,系统修复等操作有关根目录所在的分区越小越好,应用程序所安装的软件最好不要安装在根目录下。
1.bin目录:
用ls命令打开bin目录可看到如下的内容:
这里只截取了部分目录列表,粗略看以看到里边的文件是以命令命名的,比如bash、cat、cp等,猜测该目录是主要放的是一些命令的执行文件(准确的来说是一般用户都能执行的命令,在单用户维护模式下也能被执行)。查找资料,整理结论如下:
bin目录存放系统所需的基本命令(及一般用户可执行的命令),这些可执行命令都是二进制的文件。
2./boot目录:
用ls打开boot
可以看到boot中既有文件又有目录。
查找资料得知:
boot中包含系统的启动文件与目录:1.系统Kernel的配置文件;2.启动管理程序GRUB的目录(centos中其下级目录如下图);3.Initrd文件,是系统启动时的模块供应的主要来源;4.System.map文件时系统Kernel中的变量对应表;5.vmlinuz是在启动过程中最重要的一个文件,因为这个文件就是实际系统所使用的kernel,也就是说是一个内核文件。
引用博客地址:点击打开链接
linux kernel 常用的文件名为vmlinuz,在上图中可以看到该文件名。在上图中可以看到grub这个目录文件,说明系统使用的grub这个引导装载程序。
问题:grub目录下的grub.conf是启动管理程序GRUB的配置文件。不知道是不是centos版本太新的原因,在网上找到的资料显示grub目录下存在grub.conf文件,但从上图可看到只有一个grub.cfg文件。
3./dev目录
ls查看dev目录:
这个开始有有点头大了,里边文件好杂,猜不出这个目录是干什么的。
查找资料归纳如下:
dev是device(设备的缩写),也就说linux下的设备文件都放在该目录下。该目录下的文件对所有用户都十分重要。ps:linux所用的硬件设备都是以文件形式存在的。
设备文件分为两种:
1.块设备文件b:系统中能够随机(不需要按顺序)访问固定大小数据片(chunks)的设备被称作块设备,这些数据片就称作块。块设备的数据可以随机地被访问,而且从人类用户的观点看,传送任何数据块所需的时间都是较少而且是大致相同的。块设备的典型例子是硬盘、软盘。块设备一般情况下是带缓冲区的。
2.字符设备文件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/random:随机数设备
/dev/urandom:随机数设备
(以上关于/dev下设备文件的介绍摘自:点击打开链接)
关于dev先介绍这么多,以后肯定会多次讲到改目录下的设备文件。
4./etc目录
ls查看/etc目录:
和/dev类似,看不出什么端倪来,很难搞,只能查找资料。
整理如下:
etc目录用来存放所有的系统管理所需要的配置文件和子目录。一般来说这个目录下的各个文件属性是可以让一般用户查阅的。
其下重要目录:
/etc/rc or/etc/rc.d or/etc/rc*.d
启动、或改变运行级时运行的scripts或scripts的目录.
/etc/passwd
用户数据库,其中的域给出了用户名、真实姓名、家目录、加密的口令和用户的其他信息.
/etc/fdprm
软盘参数表.说明不同的软盘格式.用setfdprm 设置.
/etc/fstab
启动时mount -a命令(在/etc/rc 或等效的启动文件中)自动mount的文件系统列表.Linux下,也包括用swapon -a启用的swap区的信息.
/etc/group
类似/etc/passwd ,但说明的不是用户而是组.
/etc/inittab
init 的配置文件.
/etc/issue
getty在登录提示符前的输出信息.通常包括系统的一段短说明或欢迎信息.内容由系统管理员确定.
/etc/magic
file 的配置文件.包含不同文件格式的说明,file 基于它猜测文件类型.
/etc/motd
Message Of TheDay,成功登录后自动输出.内容由系统管理员确定.经常用于通告信息,如计划关机时间的警告.
/etc/mtab
当前安装的文件系统列表.由scripts初始化,并由mount 命令自动更新.需要一个当前安装的文件系统的列表时使用,例如df命令.
/etc/shadow
在安装了影子口令软件的系统上的影子口令文件.影子口令文件将/etc/passwd 文件中的加密口令移动到/etc/shadow中,而后者只对root可读.这使破译口令更困难.
/etc/login.defs
login 命令的配置文件.
/etc/printcap
类似/etc/termcap ,但针对打印机.语法不同.
/etc/profile , /etc/csh.login ,/etc/csh.cshrc
登录或启动时Bourne或Cshells执行的文件.这允许系统管理员为所有用户建立全局缺省环境.
/etc/securetty
确认安全终端,即哪个终端允许root登录.一般只列出虚拟控制台,这样就不可能(至少很困难)通过modem或网络闯入系统并得到超级用户特权.
/etc/shells
列出可信任的shell.chsh 命令允许用户在本文件指定范围内改变登录shell.提供一台机器FTP服务的服务进程ftpd检查用户shell是否列在 /etc/shells 文件中,如果不是将不允许该用户登录.
/etc/termcap
终端性能数据库.说明不同的终端用什么"转义序列"控制.写程序时不直接输出转义序列(这样只能工作于特定品牌的终端),而是从/etc/termcap中查找要做的工作的正确序列.这样,多数的程序可以在多数终端上运行.
/etc/init.d
所有服务默认启动脚本都放在这里,可以使用stop ,start来启动和关闭服务:以iptables为例,/etc/init.d/iptables start启动,/etc/init.d/iptables stop停止。
以上摘自:点击打开链接(里边的内容更加详细,建议读者可以点开看看)
5./home目录
home 目录是存放用户个人信息的目录。每当在系统中新增一个用户,该用户的个人信息会在home目录下对应的以用户名命名的目录下。
一般在挂载硬盘时会给/home目录分配一定的硬盘空间,以便用户操作硬盘空间存储数据。
默认用于的/home目录使用“~”来代替。
6./opt目录
查找资料得知一下结论:
一般情况下,/opt目录为空目录。当安装linux第三方软件时,会安装在该目录下。这里可以对比windows里面的C:/Program Files
安装的软件默认一般默认都是安装在这里。
7./proc目录
1. /proc目录
Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。
用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。下面列出的这些文件或子文件夹,并不是都是在你的系统中存在,这取决于你的内核配置和装载的模块。另外,在/proc下还有三个很重要的目录:net,scsi和sys。 Sys目录是可写的,可以通过它来访问或修改内核的参数,而net和scsi则依赖于内核配置。例如,如果系统不支持scsi,则scsi 目录不存在。
除了以上介绍的这些,还有的是一些以数字命名的目录,它们是进程目录。系统中当前运行的每一个进程都有对应的一个目录在/proc下,以进程的 PID号为目录名,它们是读取进程信息的接口。而self目录则是读取进程本身的信息接口,是一个link。
2. 子文件或子文件夹
/proc/buddyinfo 每个内存区中的每个order有多少块可用,和内存碎片问题有关
/proc/cmdline 启动时传递给kernel的参数信息
/proc/cpuinfo cpu的信息
/proc/crypto 内核使用的所有已安装的加密密码及细节
/proc/devices 已经加载的设备并分类
/proc/dma 已注册使用的ISA DMA频道列表
/proc/execdomains Linux内核当前支持的execution domains
/proc/fb 帧缓冲设备列表,包括数量和控制它的驱动
/proc/filesystems 内核当前支持的文件系统类型
/proc/interrupts x86架构中的每个IRQ中断数
/proc/iomem 每个物理设备当前在系统内存中的映射
/proc/ioports 一个设备的输入输出所使用的注册端口范围
/proc/kcore 代表系统的物理内存,存储为核心文件格式,里边显示的是字节数,等于RAM大小加上4kb
/proc/kmsg 记录内核生成的信息,可以通过/sbin/klogd或/bin/dmesg来处理
/proc/loadavg 根据过去一段时间内CPU和IO的状态得出的负载状态,与uptime命令有关
/proc/locks 内核锁住的文件列表
/proc/mdstat 多硬盘,RAID配置信息(md=multiple disks)
/proc/meminfo RAM使用的相关信息
/proc/misc 其他的主要设备(设备号为10)上注册的驱动
/proc/modules 所有加载到内核的模块列表
/proc/mounts 系统中使用的所有挂载
/proc/mtrr 系统使用的Memory Type Range Registers (MTRRs)
/proc/partitions 分区中的块分配信息
/proc/pci 系统中的PCI设备列表
/proc/slabinfo 系统中所有活动的 slab 缓存信息
/proc/stat 所有的CPU活动信息
/proc/sysrq-trigger 使用echo命令来写这个文件的时候,远程root用户可以执行大多数的系统请求关键命令,就好像在本地终端执行一样。要写入这个文件,需要把/proc/sys/kernel/sysrq不能设置为0。这个文件对root也是不可读的
/proc/uptime 系统已经运行了多久
/proc/swaps 交换空间的使用情况
/proc/version Linux内核版本和gcc版本
/proc/bus 系统总线(Bus)信息,例如pci/usb等
/proc/driver 驱动信息
/proc/fs 文件系统信息
/proc/ide ide设备信息
/proc/irq 中断请求设备信息
/proc/net 网卡设备信息
/proc/scsi scsi设备信息
/proc/tty tty设备信息
/proc/net/dev 显示网络适配器及统计信息
/proc/vmstat 虚拟内存统计信息
/proc/vmcore 内核panic时的内存映像
/proc/diskstats 取得磁盘信息
/proc/schedstat kernel调度器的统计信息
/proc/zoneinfo 显示内存空间的统计信息,对分析虚拟内存行为很有用
摘自:点击打开链接
7./root目录
Linux超级权限用户root的家目录。猜测包含了一些关于root用户的配置,例如某些命令只有root用户只有执行权限,某些文件只有root用户有访问修改权限。这些配置可能都在这个目录下。当进入单用户模式而仅挂载根目录时,/root拥有root用户的主文件夹,所以在分区时,把root主文件夹与根目录放在同一分区中。
8./run目录
查找资料发现以前版本的linux是不存在run目录的。有兴趣的可以看看一下资料:
点击打开链接
点击打开链接
9./sbin目录
用ls打开根目录发现它是一个软连接,连接到/usr/sbin目录。进入/usr/sbin目录发现以下内容:
作用介绍:
linux系统中/sbin目录用来存放用于管理员使用的存储二进制系统程序文件。因为其中的大部分文件多是系统管理员使用的基本的系统程序,所以虽然普通用户必要且允许时可以使用,但一般不给普通用户使用。
10./srv目录(service目录)
进入目录下发现为空,在网上找到如下回答:
server的简写,提供一些特定服务的所在目录。
11./sys目录
ls进入该目录下:
发现全部是目录。详细资料如下:
这个目录不占用硬盘资源,虚拟的文件系统
sysfs 是 Linux 内核中设计较新的一种虚拟的基于内存的文件系统,它的作用与 proc 有些类似,但除了与 proc 相同的具有查看和设定内核参数功能之外,还有为 Linux 统一设备模型作为管理之用。相比于 proc 文件系统,使用 sysfs 导出内核数据的方式更为统一,并且组织的方式更好,它的设计从 proc 中吸取了很多教训。本文就 sysfs 的挂载点 /sys 目录结构、其与 Linux 统一设备模型的关系、常见属性文件的用法等方面对 sysfs 作入门介绍,并且就内核编程方面,以具体的例子来展示如何添加 sysfs 支持。
sysfs 文件系统总是被挂载在 /sys 挂载点上。虽然在较早期的2.6内核系统上并没有规定 sysfs 的标准挂载位置,可以把 sysfs 挂载在任何位置,但较近的2.6内核修正了这一规则,要求 sysfs 总是挂载在 /sys 目录上;针对以前的 sysfs 挂载位置不固定或没有标准被挂载,有些程序从 /proc/mounts 中解析出 sysfs 是否被挂载以及具体的挂载点,这个步骤现在已经不需要了。请参考附录给出的 sysfs-rules.txt 文件链接。
其下各级目录:
/sys/devices
该目录下是全局设备结构体系,包含所有被发现的注册在各种总线上的各种物理设备。一般来说,所有的物理设备都按其在总线上的拓扑结构来显示,但有两个例外,即platform devices和system devices。platform devices一般是挂在芯片内部的高速或者低速总线上的各种控制器和外设,它们能被CPU直接寻址;system devices不是外设,而是芯片内部的核心结构,比如CPU,timer等,它们一般没有相关的驱动,但是会有一些体系结构相关的代码来配置它们。
(sys/devices是内核对系统中所有设备的分层次表达模型,也是/sys文件系统管理设备的最重要的目录结构)
sys/dev
该目录下维护一个按照字符设备和块设备的主次号码(major:minor)链接到真是设备(/sys/devices)的符号链接文件。
/sys/class
该目录下包含所有注册在kernel里面的设备类型,这是按照设备功能分类的设备模型,每个设备类型表达具有一种功能的设备。每个设备类型子目录下都是这种哦哦那个设备类型的各种具体设备的符号链接,这些链接指向/sys/devices/name下的具体设备。设备类型和设备并没有一一对应的关系,一个物理设备可能具备多种设备类型;一个设备类型只表达具有一种功能的设备,比如:系统所有输入设备都会出现在/sys/class/input之下,而不论它们是以何种总线连接到系统的。(/sys/class也是构成linux统一设备模型的一部分)
/sys/block
该目录下的所有子目录代表着系统中当前被发现的所有块设备。按照功能来说防止在/sys/class下会更合适,但由于历史遗留因素而一直存在于/sys/block,但从linux2.6.22内核开始这部分就已经标记为过去时,只有打开了CONFIG_SYSFS_DEPRECATED配置编译才会有这个目录存在,并且其中的内容在从linux2.6.26版本开始已经正式移到了/sys/class/block,旧的接口/sys/block为了向后兼容而保留存在,但其中的内容已经变为了指向它们在/sys/devices/中真实设备的符号链接文件。
/sys/bus
该目录下的每个子目录都是kernel支持并且已经注册了的总线类型。这是内核设备按照总线类型分层放置的目录结构,/sys/devices中的所有设备都是连接于某种总线之下的,bus子目录下的每种具体总线之下可以找到每个具体设备的符号链接,
一般来说每个子目录(总线类型)下包含两个子目录,一个是devices,另一个是drivers;其中devices下是这个总线类型下的所有设备,这些设备都是符号链接,它们分别指向真正的设备(/sys/devices/name/下);而drivers下是所有注册在这个总线上的驱动,每个driver子目录下 是一些可以观察和修改的driver参数。
(它也是构成linux统一设备模型的一部分)
/sys/fs
按照设计,该目录使用来描述系统中所有的文件系统,包括文件系统本身和按照文件系统分类存放的已挂载点。
/sys/kernel
这个目录下存放的是内核中所有可调整的参数
/sys/firmware
该目录下包含对固件对象(firmware object)和属性进行操作和观察的接口,即这里是系统加载固件机制的对用户空间的接口.(关于固件有专用于固件加载的一套API)
/sys/hypervisor
该目录是与虚拟化Xen相关的装置。(Xen是一个开放源代码的虚拟机监视器)
/sys/module
该目录下有系统中所有的模块信息,不论这些模块是以内联(inlined)方式编译到内核映像文件中还是编译为外模块(.ko文件),都可能出现在/sys/module中。即module目录下包含了所有的被载入kernel的模块。
/sys/power
该目录是系统中的电源选项,对正在使用的power子系统的描述。这个目录下有几个属性文件可以用于控制整个机器的电源状态,如可以向其中写入控制命令让机器关机/重启等等。
以上资料摘自:点击打开链接
12./tmp目录
系统临时文件目录,不多介绍。
13./usr目录
全称:Unix System Resource:unix系统资源文件夹。
/usr 是系统核心所在,包含了所有的共享文件。它是 unix 系统中最重要的目录之一,涵盖了二进制文件,各种文档,各种头文件,x,还有各种库文件;还有诸多程序,例如 ftp,telnet 等等。
/usr 文件系统经常很大,因为所有程序安装在这里. /usr 里的所有文件一般来自Linux distribution;本地安装的程序和其他东西在/usr/local 下.这样可能在升级新版系统或新distribution时无须重新安装全部程序.
/usr/share:共享文件的地方,其下的目录:/man在线帮助文档,/doc软件的文件说明,/zoneinfo:与时区有关的时区文件
/usr/bin:大多数用户可使用的命令都放在这里,当然与开机过程无关。
/usr/lib:应用软件的函数库
/usr/inlcude:程序语言的头文件
/usr/sbin:非系统正常运行所需要的系统命令,如网络服务命令daemon
/sur/src:放源码的地方
14./var目录
ls进入:
/var 包括系统运行时要改变的数据。其中包括每个系统是特定的,即不能够与其他计算机共享的目录,如/var/log,/var/lock,/var/run。有些目录还是可以与其他系统共享,如/var/mail, /var/cache/man, /var/cache/fonts,/var/spool/news。var目录存在的目的是把usr目录在运行过程中需要更改的文件或者临时生成的文件及目录提取出来,由此可以使usr目录挂载为只读的方式。隐含要求var目录必须挂载为可以读写的方式。
通过对于该目录的分析注意如下的需要
1) 各个目录存在的目的以及作用。
2) 通过目录中的信息能够获得什么信息,如何对于该信息进行访问。
3) 对于目录中的文件操作是否安全。
目的:该目录保存系统中使用的进程记录。当一个进程终止时,把每个进程向统计文件(pacct或acct)中写一个纪录。进程统计的目的是为系统中的基本服务提供命令使用统计。该文件可以通过数据的工具(sa,ac)进行分析。
摘自:点击打开链接时间有点赶,花了两天的时间才完成。大家有什么好的建议可以发表评论,马上改进。
1 0