Linux复习一:目录结构和文件系统
时间:2007-04-15 来源:codfei
昨天给哥哥和他同事讲了一下午的Linux其实就是讲了讲Linux的目录结构和文件系统,还有LAMP的整合,还有squid代理的配置,其实都是些简单的东西,但是感觉自己对于这些最基础的东西,往往不能用最标准的语言来说明,可能就是学习Linux过程忽略了往往最重要的基础知识,在毕业后的求职工作中这可能会给我的面试带来障碍。今后要陆续重新对Linux学习,从最基础的开始抓住每个细节精益求精。
#by codfei
#Sun Apr 15 08:10:07 CST 2007
1.目录结构
[root@Ora9i /]# ls //简单的ls命令是调用了stat函数中的inode信息
bak dev initrd media opt sbin sys usr
bin etc lib misc proc selinux tftpboot var
boot home lost+found mnt root srv tmp /mnt 安装目录,一般作为文件系统的临时安装点使用。
/lib Linux库文件。
/dev 设备文件。
/tmp 临时目录,为程序产生的临时文件保留的文件系统,该目录由系统自动删除,所以不要使用它保存重要文件。
/usr 用户信息。
/root root用户主目录。
/boot 存放系统启动所需要的内核及其他系统启动的相关文件。
/home 用户存放自己文件的主目录。
在这里具体对一些重要目录作一个说明:
1、/bin目录包括系统最常用的Linux命令。任何用户都可以直接运行这些命令而无
需指定路径。
2、/dev目录包括了特殊设备特殊文件,由于Linux中把所有的外部设备都看作是文
件处理,该目录里面的文件都被看作一个外部设备。对这些文件进行操作,自动导
向外部设备中。
3、/etc目录中包含各种各样的系统程序和数据文件。例如在/etc/rc.d中包含了启动不同级别要执行的脚本,和初始化的环境。
[root@Ora9i rc.d]# ll
total 120
drwxr-xr-x 2 root root 4096 Apr 8 23:32 init.d
-rwx--x--x 1 root root 308 Dec 5 09:45 iptables2.sh
-rwxr-xr-x 1 root root 2352 Mar 17 2004 rc
drwxr-xr-x 2 root root 4096 Aug 18 2005 rc0.d
drwxr-xr-x 2 root root 4096 Aug 18 2005 rc1.d
drwxr-xr-x 2 root root 4096 Dec 5 14:35 rc2.d
drwxr-xr-x 2 root root 4096 Dec 5 14:35 rc3.d
drwxr-xr-x 2 root root 4096 Dec 5 14:35 rc4.d
drwxr-xr-x 2 root root 4096 Dec 5 14:35 rc5.d
drwxr-xr-x 2 root root 4096 Aug 18 2005 rc6.d
-rwxr-xr-x 1 root root 303 May 9 2006 rc.local
-rwxr-xr-x 1 root root 26790 Nov 2 2004 rc.sysinit
顺便看一下我的iptabels2.sh都写些什么
[root@Ora9i rc.d]# cat iptables2.sh
iptables -F INPUT //清空INPUT链
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP //不让别人ping我
iptables -A INPUT -p icmp --icmp-type echo-request -j LOG --log-prefix "ping"
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP //状态为已经建立连接的包全部丢弃
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "syn_not_new"
#在iptables记录的信息之前加上指定的前缀"ping"或者"syn_not_new",可以直接用'dmesg'来阅读信息,方便查看日志
4、/lib目录包括编程语言运行库文件。这个目录是很重要的,是必需的。
5、/mnt目录中包括了子目录cdrom和floppy,用于安装移动的文件系统,如软盘、光盘。
6、/usr目录包括几个子目录,附加的Linux命令和数据文件都存放在这里。
子目录说明
/usr/bin 一些Linux命令。
/usr/include 编译C语言程序的头文件。
/usr/lib 执行各种Unix命令,所需要的额外的函数库和数据文件。
7、/tmp目录中保存了Unix系统程序产生的临时文件。这些文件一般只在相应的程序正在运行时候才存在,如果程序非正常终止,这些临时文件,可能会保留在/tmp目录中,我们可以删除任何不属于正在运行的临时文件。
2.Linux文件系统
Linux/Unix有很多不同于其他操作系统的特征:
(1)、把所有的外部设备看作文件,为了保证输出输入操作的一致性,Linux/Unix把所有的对外部设备的操作都设计成为等同于操作其他的一般文件。因此,无论什么外部设备的特征,都被文件系统隐藏了。用户可以使用与文件系统相同的系统调用和函数来读写硬件设备。这些代表硬件设备的文件都存在/dev目录下。他们只是占用了文件的逻辑位置,实际上并不占用实际的物理磁盘存储空间。对/dev目录里的文件的读写,都被透明的传递给相应的外部设备。从而方便、透明、高效的进行外部设备的控制。
(2)、文件的拥有者可以指定其他组或用户读、写和执行文件的权限,从而起到增加文件的安全性。
(3)、文件系统可以合并。Linux文件系统是一个逻辑的概念,从表面上看起来是一个完整的整体,实际上是由一个或者是多个独立的目录树组成,每一个子树都是一个独立的文件系统。这种结构,完全跨越了物理存储设备的限制,可以把多个存储设备,多个文件系统共同组成一个文件系统。要使用其他的文件系统,必须把他们安装到已知的文件系统的目录中去。安装的位置被称为“装载点”。
文件系统安装后,被安装的文件系统,和原来的文件系统就构成了一个新的文件系统。被安装的文件系统,就覆盖了装载点原来的目录。当被安装的文件系统卸载后,原来的目录就被恢复。
3.文件分类
普通文件,目录文件和特殊文件
这里讲一下特殊文件:
(1)、设备文件是一种特殊文件。
设备文件只是一个文件名称,用户通过该名称与外部设备进行数据通信。每种类型的设备都有自己的设备文件,与设备驱动程序相对应。该软件链接在系统的核心里中。在Linux/Unix系统中,有很多的设备驱动程序,分别控制了不同的外部设备,为了避免设备的驱动程序过多地占用系统的内存,可以在驱动设备加载时加以选择。根据设备的性质不同/dev中的文件又分成两类。一类称为字符设备,另一类称为块设备。
字符设备:指的是那些一次输入输出操作,仅能处理一个字节的数据设备,例如终端。
块设备:指的是通过大小固定的缓冲区进行输入输出操作的,可以再一次操作中处理多个字符的设备。
由于设备的性质不一样,分为字符设备、块设备。对他们的操作的系统调用是不一样的,处理字符设备的系统调用保存在一个“cdevsw array”的表格中,处理块设备的系统设备保存在“bdevsq array”的表格中。
为了更方便的处理两种不同的设备,又划分出了主设备和次设备的。主设备指控制设备的驱动程序。此设备指物理设备。他们分别通过主设备号和次设备号标识。主设备的作用是到相应的表数据中查找相应的系统调用,处理不同的设备。不同的设备可以由相同的主设备号,就是说,不同的设备可以有相同的驱动程序来管理。
(2)、Linux/Unix系统中的特殊文件是符号链接。
由于在Linux/Unix世界里,操作系统都是多用户分布式的操作系统,文件共享成为非常重要的问题。共享的方式有很多种,用户可以把文件复制成很多份,拷贝到其他的目录中去使用。但是这样会浪费大量的磁盘空间,而且也不便于系统的管理和数据的同步。因此,在Linux/Unix世界里引入了链接的概念。
“硬链接”,他有很多局限性:
? 一个磁盘不能跨不同的操作系统。
? 用户不谨慎会造成目录循环,使系统调用出现错误。
? 硬链接也会出现控制问题,举例说明:
如用户A创建了一个/home/a/a文件,同时,另一个用户要共享该文件,创建一个硬链接/home/b/blink。用户B只需要对该路经的目录有执行权限,并且对目录/home/b有写的权限。这时用户A可能要删除文件a,而实际上该文件通过B链接。虽然blink链接是由B用户创建的,但是控制权仍然是A。如果A将a文件加上只读的属性,那么B就不能修改它,同时B又对目录/usr/b加上只读权限,用户A又不能发现链接的位置及权限属性。因此对于A来说,一方面要删除a文件,另一方面又没有/home/b/blink的删除权限。
为了解决上面的问题,在Linux/Unix世界里引入了符号链接的概念。符号链接是指向其他文件的特殊文件,任何用户都可以利用符号链接文件。不受文件系统类型的影响。
(3)、命名管道特殊文件
命名管道用于进程之间之间的通信,两个独立的进程通关命名管道交换信息。命名管道与其他的文件最大的区别在于,管道内部的数据是暂时性的,操作结束后,数据就消失了。管道的操作和FIFO操作类似,一端是向管道里面写,另一面是以相同的顺序从管道中读,如果管道中没有写入操作,那么管道堵塞,直到有写的操作开始。
[root@Ora9i ~]# lsmod //内核空间模块加载列表
Module Size Used by
vfat 16961 0
fat 44129 1 vfat
iptable_nat 27237 0
md5 8001 1
ipv6 238817 8
ipt_state 5825 2
ip_conntrack 45957 2 iptable_nat,ipt_state
ipt_LOG 10049 2
ipt_TOS 6337 8
iptable_mangle 6721 1
iptable_filter 6721 1
ip_tables 21441 6 iptable_nat,ipt_state,ipt_LOG,ipt_TOS,iptable_ma
ngle,iptable_filter
dm_mod 57157 0
button 10449 0
battery 12869 0
ac 8773 0
uhci_hcd 32729 0
ehci_hcd 31813 0
tg3 79173 0
e100 36037 0
mii 8641 1 e100
3c59x 39401 0
floppy 58065 0
ext3 118473 5
jbd 59481 1 ext3
mptscsih 36605 0
mptbase 47329 1 mptscsih
sd_mod 20545 7
scsi_mod 116557 2 mptscsih,sd_mod
#by codfei
#Sun Apr 15 08:10:07 CST 2007
1.目录结构
[root@Ora9i /]# ls //简单的ls命令是调用了stat函数中的inode信息
bak dev initrd media opt sbin sys usr
bin etc lib misc proc selinux tftpboot var
boot home lost+found mnt root srv tmp /mnt 安装目录,一般作为文件系统的临时安装点使用。
/lib Linux库文件。
/dev 设备文件。
/tmp 临时目录,为程序产生的临时文件保留的文件系统,该目录由系统自动删除,所以不要使用它保存重要文件。
/usr 用户信息。
/root root用户主目录。
/boot 存放系统启动所需要的内核及其他系统启动的相关文件。
/home 用户存放自己文件的主目录。
在这里具体对一些重要目录作一个说明:
1、/bin目录包括系统最常用的Linux命令。任何用户都可以直接运行这些命令而无
需指定路径。
2、/dev目录包括了特殊设备特殊文件,由于Linux中把所有的外部设备都看作是文
件处理,该目录里面的文件都被看作一个外部设备。对这些文件进行操作,自动导
向外部设备中。
3、/etc目录中包含各种各样的系统程序和数据文件。例如在/etc/rc.d中包含了启动不同级别要执行的脚本,和初始化的环境。
[root@Ora9i rc.d]# ll
total 120
drwxr-xr-x 2 root root 4096 Apr 8 23:32 init.d
-rwx--x--x 1 root root 308 Dec 5 09:45 iptables2.sh
-rwxr-xr-x 1 root root 2352 Mar 17 2004 rc
drwxr-xr-x 2 root root 4096 Aug 18 2005 rc0.d
drwxr-xr-x 2 root root 4096 Aug 18 2005 rc1.d
drwxr-xr-x 2 root root 4096 Dec 5 14:35 rc2.d
drwxr-xr-x 2 root root 4096 Dec 5 14:35 rc3.d
drwxr-xr-x 2 root root 4096 Dec 5 14:35 rc4.d
drwxr-xr-x 2 root root 4096 Dec 5 14:35 rc5.d
drwxr-xr-x 2 root root 4096 Aug 18 2005 rc6.d
-rwxr-xr-x 1 root root 303 May 9 2006 rc.local
-rwxr-xr-x 1 root root 26790 Nov 2 2004 rc.sysinit
顺便看一下我的iptabels2.sh都写些什么
[root@Ora9i rc.d]# cat iptables2.sh
iptables -F INPUT //清空INPUT链
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP //不让别人ping我
iptables -A INPUT -p icmp --icmp-type echo-request -j LOG --log-prefix "ping"
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP //状态为已经建立连接的包全部丢弃
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "syn_not_new"
#在iptables记录的信息之前加上指定的前缀"ping"或者"syn_not_new",可以直接用'dmesg'来阅读信息,方便查看日志
4、/lib目录包括编程语言运行库文件。这个目录是很重要的,是必需的。
5、/mnt目录中包括了子目录cdrom和floppy,用于安装移动的文件系统,如软盘、光盘。
6、/usr目录包括几个子目录,附加的Linux命令和数据文件都存放在这里。
子目录说明
/usr/bin 一些Linux命令。
/usr/include 编译C语言程序的头文件。
/usr/lib 执行各种Unix命令,所需要的额外的函数库和数据文件。
7、/tmp目录中保存了Unix系统程序产生的临时文件。这些文件一般只在相应的程序正在运行时候才存在,如果程序非正常终止,这些临时文件,可能会保留在/tmp目录中,我们可以删除任何不属于正在运行的临时文件。
2.Linux文件系统
Linux/Unix有很多不同于其他操作系统的特征:
(1)、把所有的外部设备看作文件,为了保证输出输入操作的一致性,Linux/Unix把所有的对外部设备的操作都设计成为等同于操作其他的一般文件。因此,无论什么外部设备的特征,都被文件系统隐藏了。用户可以使用与文件系统相同的系统调用和函数来读写硬件设备。这些代表硬件设备的文件都存在/dev目录下。他们只是占用了文件的逻辑位置,实际上并不占用实际的物理磁盘存储空间。对/dev目录里的文件的读写,都被透明的传递给相应的外部设备。从而方便、透明、高效的进行外部设备的控制。
(2)、文件的拥有者可以指定其他组或用户读、写和执行文件的权限,从而起到增加文件的安全性。
(3)、文件系统可以合并。Linux文件系统是一个逻辑的概念,从表面上看起来是一个完整的整体,实际上是由一个或者是多个独立的目录树组成,每一个子树都是一个独立的文件系统。这种结构,完全跨越了物理存储设备的限制,可以把多个存储设备,多个文件系统共同组成一个文件系统。要使用其他的文件系统,必须把他们安装到已知的文件系统的目录中去。安装的位置被称为“装载点”。
文件系统安装后,被安装的文件系统,和原来的文件系统就构成了一个新的文件系统。被安装的文件系统,就覆盖了装载点原来的目录。当被安装的文件系统卸载后,原来的目录就被恢复。
3.文件分类
普通文件,目录文件和特殊文件
这里讲一下特殊文件:
(1)、设备文件是一种特殊文件。
设备文件只是一个文件名称,用户通过该名称与外部设备进行数据通信。每种类型的设备都有自己的设备文件,与设备驱动程序相对应。该软件链接在系统的核心里中。在Linux/Unix系统中,有很多的设备驱动程序,分别控制了不同的外部设备,为了避免设备的驱动程序过多地占用系统的内存,可以在驱动设备加载时加以选择。根据设备的性质不同/dev中的文件又分成两类。一类称为字符设备,另一类称为块设备。
字符设备:指的是那些一次输入输出操作,仅能处理一个字节的数据设备,例如终端。
块设备:指的是通过大小固定的缓冲区进行输入输出操作的,可以再一次操作中处理多个字符的设备。
由于设备的性质不一样,分为字符设备、块设备。对他们的操作的系统调用是不一样的,处理字符设备的系统调用保存在一个“cdevsw array”的表格中,处理块设备的系统设备保存在“bdevsq array”的表格中。
为了更方便的处理两种不同的设备,又划分出了主设备和次设备的。主设备指控制设备的驱动程序。此设备指物理设备。他们分别通过主设备号和次设备号标识。主设备的作用是到相应的表数据中查找相应的系统调用,处理不同的设备。不同的设备可以由相同的主设备号,就是说,不同的设备可以有相同的驱动程序来管理。
(2)、Linux/Unix系统中的特殊文件是符号链接。
由于在Linux/Unix世界里,操作系统都是多用户分布式的操作系统,文件共享成为非常重要的问题。共享的方式有很多种,用户可以把文件复制成很多份,拷贝到其他的目录中去使用。但是这样会浪费大量的磁盘空间,而且也不便于系统的管理和数据的同步。因此,在Linux/Unix世界里引入了链接的概念。
“硬链接”,他有很多局限性:
? 一个磁盘不能跨不同的操作系统。
? 用户不谨慎会造成目录循环,使系统调用出现错误。
? 硬链接也会出现控制问题,举例说明:
如用户A创建了一个/home/a/a文件,同时,另一个用户要共享该文件,创建一个硬链接/home/b/blink。用户B只需要对该路经的目录有执行权限,并且对目录/home/b有写的权限。这时用户A可能要删除文件a,而实际上该文件通过B链接。虽然blink链接是由B用户创建的,但是控制权仍然是A。如果A将a文件加上只读的属性,那么B就不能修改它,同时B又对目录/usr/b加上只读权限,用户A又不能发现链接的位置及权限属性。因此对于A来说,一方面要删除a文件,另一方面又没有/home/b/blink的删除权限。
为了解决上面的问题,在Linux/Unix世界里引入了符号链接的概念。符号链接是指向其他文件的特殊文件,任何用户都可以利用符号链接文件。不受文件系统类型的影响。
(3)、命名管道特殊文件
命名管道用于进程之间之间的通信,两个独立的进程通关命名管道交换信息。命名管道与其他的文件最大的区别在于,管道内部的数据是暂时性的,操作结束后,数据就消失了。管道的操作和FIFO操作类似,一端是向管道里面写,另一面是以相同的顺序从管道中读,如果管道中没有写入操作,那么管道堵塞,直到有写的操作开始。
[root@Ora9i ~]# lsmod //内核空间模块加载列表
Module Size Used by
vfat 16961 0
fat 44129 1 vfat
iptable_nat 27237 0
md5 8001 1
ipv6 238817 8
ipt_state 5825 2
ip_conntrack 45957 2 iptable_nat,ipt_state
ipt_LOG 10049 2
ipt_TOS 6337 8
iptable_mangle 6721 1
iptable_filter 6721 1
ip_tables 21441 6 iptable_nat,ipt_state,ipt_LOG,ipt_TOS,iptable_ma
ngle,iptable_filter
dm_mod 57157 0
button 10449 0
battery 12869 0
ac 8773 0
uhci_hcd 32729 0
ehci_hcd 31813 0
tg3 79173 0
e100 36037 0
mii 8641 1 e100
3c59x 39401 0
floppy 58065 0
ext3 118473 5
jbd 59481 1 ext3
mptscsih 36605 0
mptbase 47329 1 mptscsih
sd_mod 20545 7
scsi_mod 116557 2 mptscsih,sd_mod
相关阅读 更多 +
排行榜 更多 +