文件系统目录结构
linux文件和目录被组织成一个单根倒置树形结构。
/boot:系统启动引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader,grub)。
[root@centos7every01 /]#ls /boot -lh
total 126M
-rwxr-xr-x. 1 root root 6.4M Nov 9 07:43 vmlinuz-3.10.0-957.el7.x86_64 内核
/dev:设备文件及特殊文件存储位置,例如硬盘、光盘
b:block device,随机访问
c:character device,线性访问
[root@centos7every01 /]#ll /dev/sda /dev/sr0 /dev/zero /dev/null /dev/random -h
crw-rw-rw-. 1 root root 1, 3 May 6 05:08 /dev/null
crw-rw-rw-. 1 root root 1, 8 May 6 05:08 /dev/random
brw-rw----. 1 root disk 8, 0 May 6 05:08 /dev/sda
brw-rw----. 1 root cdrom 11, 0 May 6 05:08 /dev/sr0
crw-rw-rw-. 1 root root 1, 5 May 6 05:08 /dev/zero
brw-rw----. 块设备 block
crw-rw----. 字符设备 charactor
/etc:存放系统配置文件。
/home/USERNAME:普通用户家目录。
/root:管理员家目录。
/media:便携式移动设备挂载点。
/mnt:临时文件系统挂载点。
/opt:第三方应用程序安装位置。
/srv:系统上运行的服务所用到的数据。
run:存放系统运行时生成的相关数据
/bin:binary所有用户使用的基本命令;不能关联至独立分区,OS启动会用到的程序。
/sbin:systembinary管理类的基本命令;不能关联至独立分区,OS启动会用到的程序。
/lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/moduled)。
/lib64:专用于x86_64系统上的辅助共享库文件存放位置。
/tmp:临时文件存储位置。
/usr:universal shared,read-only date
bin:保证系统拥有完整功能而提供的应用程序
sbin:
lib:32位使用
lib64:只存在64位系统
include:C程序的头文件(header files)
share:结构化独立的数据,例如doc,man等
local:第三方应用程序的安装位置
/var:variable data files 系统日志、缓存数据、web页面等。
cache:应用程序缓存数据目录
lib:应用程序状态信息数据
local:专用于为/usr/local下的应用程序存储可变数据
lock:锁文件
log:日志目录及文件
opt:专用于为/opt下的应用程序存储可变数据
run:运行中的进程相关数据,通常用于存储进程pid文件
spool:应用程序数据池
tmp:保存系统两次重启之间产生的临时数据
/proc:process进程,用于输出内核与进程信息相关的虚拟文件。
/sys:用于输出当前系统上硬件设备相关信息虚拟文件。
/selinux:Security-Enhanced Linux,selinux相关的安全策略等信息的存储位置。
linux目录标准如下(FHS Filesystem Hierarchy Standard ):http://www.pathname.com/fhs/
文件有两类数据:
元数据:metedata
数据:data
文件系统分层结构:LSB Linux Standard Base
应用程序的组成部分
二进制程序:/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin
库文件:/lib, /lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64
配置文件:/etc, /etc/DIRECTORY, /usr/local/etc
帮助文件:/usr/share/man, /usr/share/doc, /usr/local/share/man,
/usr/local/share/doc
Linux下的文件类型
– 普通文件
d 目录文件
b 块设备
c 字符设备
l 符号连接文件
p 管道文件pipe
s 套接字文件socket
-rwxr-xr-x. 1 root root 2 Oct 31 2018 xev
drwxr-xr-x. 2 root root 6 Apr 11 2018 media
brw-rw----. 1 root disk 8 May 8 2018 /dev/sda
crw-rw-rw-. 1 root root 5 May 8 2018 /dev/zero
lrwxrwxrwx. 1 root root 3 Mar 27 05:55 vgrename -> lvm
prw-------. 1 root root 0 May 8 06:43 dmeventd-client
srwxr-xr-x. 1 root root 0 May 8 06:43 mcelog-client
显示当前工作目录
每个shell和系统进程都有一个当前的工作目录
CWD:current work directory
显示当前shell CWD的绝对路径
pwd: printing working directory
-P 显示真实物理路径
-L 显示链接路径(默认)
[root@centos7every01 bin]#ls -l /bin
lrwxrwxrwx. 1 root root 7 Mar 27 05:53 /bin -> usr/bin
[root@centos7every01 bin]#pwd
/bin
[root@centos7every01 bin]#pwd -L
/bin
[root@centos7every01 bin]#pwd -P
/usr/bin
绝对和相对路径
- 绝对路径
以正斜杠开始
完整的文件的位置路径
可用于任何想指定一个文件名的时候 - 相对路径名
不以斜线开始
指定相对于当前工作目录或某目录的位置
可以作为一个简短的形式指定一个文件名 - 基名:basename
- 目录名:dirname
基名与目录名这两个命令,多用于脚本取文件名和路径时用。
[root@centos7every01 system]#pwd
/etc/systemd/system
[root@centos7every01 system]#basename /etc/systemd/system
system
[root@centos7every01 system]#dirname /etc/systemd/system
/etc/systemd
[root@centos7every01 system]#
由于绝对路径与相对路径的区别,顾编写代码和程序时考虑到目录结构的改变对程序的影响,故尽量时用相对路径。
更改目录
- cd 改变目录
使用绝对或相对路径:
cd /home/wang/
cd home/wang
切换至父目录: cd …
切换至当前用户主目录: cd ,cd ~
切换至某一用户家目录:cd ~weblogic(波浪号与用户名之间无空格 )
切换至以前的工作目录: cd - - 选项:-P
[root@centos7every01 /]#ll
lrwxrwxrwx. 1 root root 7 Mar 27 05:53 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 May 26 20:57 boot
dr-xr-x---. 17 root root 4096 May 26 20:57 root
drwxr-xr-x. 42 root root 1300 May 26 20:59 run
lrwxrwxrwx. 1 root root 8 Mar 27 05:53 sbin -> usr/sbin
[root@centos7every01 /]#cd sbin/
[root@centos7every01 sbin]#pwd
/sbin
[root@centos7every01 sbin]#cd -P /sbin/
[root@centos7every01 sbin]#pwd
/usr/sbin
- 相关的环境变量:
PWD:当前目录路径
OLDPWD:上一次目录路径
[root@centos7every01 ~]#pwd
/root
[root@centos7every01 ~]#cd ~tang
[root@centos7every01 tang]#echo $PWD
/home/tang
[root@centos7every01 tang]#echo $OLDPWD
/root
[root@centos7every01 tang]#cd -
/root
[root@centos7every01 ~]#pwd
/root
[root@centos7every01 ~]#
列出目录内容
用法:ls [options] [ files_or_dirs]
列出当前目录的内容或指定目录
示例:
ls -a 包含隐藏文件
ls -l 显示额外的信息
ls -R 目录递归通过
ls -ld 目录和符号链接信息
ls -1 文件分行显示
ls –S 按从大到小排序
ls –t 按mtime排序
ls –u 配合-t选项,显示并按atime从新到旧排序
ls –U 按目录存放顺序显示
ls –X 按文件后缀排序
l. (ls -d .*)只显示隐藏文件
stat 查看文件详情
[root@centos7every01 data]#stat ab
File: ‘ab’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 803h/2051d Inode: 68 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:etc_runtime_t:s0
Access: 2019-05-27 21:29:35.045260745 +0800
Modify: 2019-05-27 21:29:35.045260745 +0800
Change: 2019-05-27 21:29:35.045260745 +0800
Birth: -
ls -t (等价于ll) mtime
ll --time=atime (等价于ls -u)查看文件最后被读取的时间
ll --time=ctime
mtime:(modify time) 修改文件(内容)的时间
ctime:(change time)更改文件权限(属性)的时间
atime:(access time)读取(查看内容)文件的时间.。
例如一个网站的html文件,会有很多访问这个文件。每次访问都会更改atime,这样加大了服务器的负载,故可以禁用某个文件的atime,来提高性能。==
延伸使用mtime时间字段删除文件脚本
find /opt/soft/log/ -mtime +30 -name "*.log" -exec rm -rf {} \
通过 misc 路径挂光盘
[root@centos6 ~]#df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 50264772 4503584 43201188 10% /
tmpfs 501508 80 501428 1% /dev/shm
/dev/sda1 999320 34140 912752 4% /boot
/dev/sda3 33130288 49032 31391656 1% /data
/dev/sr0 3897932 3897932 0 100% /media/CentOS_6.10_Final
[root@centos6 /]#cd misc/
[root@centos6 misc]#ls
[root@centos6 misc]#cd cd
[root@centos6 cd]#ls
CentOS_BuildTag isolinux RPM-GPG-KEY-CentOS-Debug-6
EFI Packages RPM-GPG-KEY-CentOS-Security-6
EULA RELEASE-NOTES-en-US.html RPM-GPG-KEY-CentOS-Testing-6
GPL repodata TRANS.TBL
images RPM-GPG-KEY-CentOS-6
[root@centos6 cd]#pwd
/misc/cd
[root@centos6 cd]#df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 50264772 4503584 43201188 10% /
tmpfs 501508 80 501428 1% /dev/shm
/dev/sda1 999320 34140 912752 4% /boot
/dev/sda3 33130288 49032 31391656 1% /data
/dev/sr0 3897932 3897932 0 100% /media/CentOS_6.10_Final
/dev/sr0 3897932 3897932 0 100% /misc/cd
inode总结
inode(index node)表中包含文件系统所有文件列表。
一个节点 (索引节点)是在一个表项,包含有关文件的信息( 元数据 ),
包括:
- 用来识别文件类型,以及用于stat C函数的模式信息
- 文件权限
- 文件的拥有者的UID
- 文件所属组的GID
- 链接数(指向这个文件名路径名称个数)
- 文件的大小
- 文件的时间戳(ctime指inode上一次变动的时间,mtime是指文件内容上一次变动的时间,atime指文件上一次打开的时间)
- 指向磁盘文件的数据块指针
- 有关文件的其它数据
注意:要想查看文件的inode信息可以使用stat命令查看
[root@centos6 /]#stat etc/
File: `etc/'
Size: 12288 Blocks: 24 IO Block: 4096 directory
Device: 802h/2050d Inode: 2752513 Links: 123
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-07-08 21:45:14.683246717 +0800
Modify: 2019-11-18 22:22:49.017291339 +0800
Change: 2019-11-18 22:22:49.017291339 +0800
inode表结构
- 直接块指针:
前12个直接指针,直接指向存储数据的区域。如Blocks大小为4*1024KB,前12个直接指针就可以保存48KB的文件 - 间接块指针:
设每个指针占用4个字节,则以及指针指向的Blocks可以保存(41024)/4KB,可指向1024个Blocks,一级指针可存储文件数据大小为1024(4*1024)KB=4MB - 双重间接块指针:
同样Blocks大小为41024,则二级指针可保存Blocks指针数量为((41024)/4)((41024)/4),则二级指针保存文件数据大小为(10241024)(4*1024)=4GB - 三重间接块指针:
以此类推三级指针可以储存文件数据大小为(1024410241024)(4*1024)=4TB
inode的大小
每个inode都有一个编号,操作系统用inode号来识别不同文件。Unix/Linux系统不使用文件名,而使用inode号来识别文件,对于系统来说,文件名只是inode号码便于识别的别称或绰号。表面上,通过文件名打开文件;实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号;其次,通过inode号,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。
***注:inode号并不是无限的,如果一个分区的节点数被使用完了,那么即使磁盘空间还有剩余也不能再存放任何数据。
- df -i命令查看节点使用情况
[root@centos6 /]#df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda2 3203072 134081 3068991 5% /
tmpfs 125377 5 125372 1% /dev/shm
/dev/sda1 65536 38 65498 1% /boot
/dev/sda3 2113536 59 2113477 1% /data
/dev/sr0 0 0 0 - /media/CentOS_6.10_Final
注:1文件系统、2节点总数、3使用过节点数、4剩余节点数、5节点使用率、6挂载路径
- df命令查看节点信息
[root@centos6 /]#df /etc
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 50264772 4547336 43157436 10% /
- stat命令查看节点信息
[root@centos6 /]#stat /etc/
File: `/etc/'
Size: 12288 Blocks: 24 IO Block: 4096 directory
Device: 802h/2050d Inode: 2752513 Links: 123
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-07-08 21:45:14.683246717 +0800
Modify: 2019-11-20 09:34:45.601999970 +0800
Change: 2019-11-20 09:34:45.601999970 +0800
- ls -i查看节点编号
[root@centos6 /]#ls -i /etc
2753010 abrt 2752928 man.config
2754773 acpi 2752853 maven
2753364 adjtime 2752579 mime.types
2754093 akonadi 2752649 mke2fs.conf
注:linu系统中会显示不同颜色来区分文件夹、普通文件、链接等文件。
[root@centos6 /]#ls -il /etc/
total 2304
2753010 drwxr-xr-x. 3 root root 4096 Mar 26 2019 abrt
2754773 drwxr-xr-x. 4 root root 4096 Mar 26 2019 acpi
2754051 drwxr-xr-x. 2 root root 4096 Mar 26 2019 cron.hourly
2754052 drwxr-xr-x. 2 root root 4096 Mar 26 2019 cron.monthly
2754054 -rw-r--r--. 1 root root 457 Sep 27 2011 crontab
2753947 -rw-r--r--. 1 root root 21214 Oct 3 2017 dnsmasq.conf
2753578 -rw-r--r--. 1 root root 519 Jun 19 2018 dracut.conf
2754108 ----------. 1 root root 694 Mar 31 2019 gshadow
2752541 ----------. 1 root root 683 Mar 26 2019 gshadow-
2752608 lrwxrwxrwx. 1 root root 11 Mar 26 2019 init.d -> rc.d/init.d
2753389 lrwxrwxrwx. 1 root root 7 Mar 26 2019 rc -> rc.d/rc
2753411 lrwxrwxrwx. 1 root root 10 Mar 26 2019 rc0.d -> rc.d/rc0.d
2752617 lrwxrwxrwx. 1 root root 10 Mar 26 2019 rc1.d -> rc.d/rc1.d
2752618 lrwxrwxrwx. 1 root root 10 Mar 26 2019 rc2.d -> rc.d/rc2.d
2752619 lrwxrwxrwx. 1 root root 10 Mar 26 2019 rc3.d -> rc.d/rc3.d
2752620 lrwxrwxrwx. 1 root root 10 Mar 26 2019 rc4.d -> rc.d/rc4.d
2752621 lrwxrwxrwx. 1 root root 10 Mar 26 2019 rc5.d -> rc.d/rc5.d
2752622 lrwxrwxrwx. 1 root root 10 Mar 26 2019 rc6.d -> rc.d/rc6.d
理解了上面的知识,就能理解目录的权限,文件的读权限®和写权限(w),都是针对目录文件本身。由于目录文件内只有文件名和inode号,所以只有读权,只能获取文件名,无法获取其他信息,因为其他信息都储存在inode节点中,而读取inode节点内的信息需要目录文件的执行权限(x)。
Linux中cp、rm、mv 、ln对inode的影响:
cp命令
- 分配一个未被使用的inode号,在inode表中添加一个新项目,(注意:如果是cp到讴歌已经存在的文件,则inode号采用被覆盖之前的目标文件的inode号,如果对运行中的apache共享模块so文件进行cp操作,就会出现Segmentation fault<段错误>)
- 在目录中新建一个目录项,并指向步骤1中的inode
- 把数据复制到block中
rm命令
- 减少链接数量,如果链接数为0,释放inode(inode号也已被重新使用)
- 如果inode被释放,则数据块放到可用空间列表中
- 删除目录中的目录项
mv命令
1.如果mv命令的目标文件和源文件所在的文件系统(即卷组、未跨磁盘)相同:
使用新文件名建立目录项或删除带有原来文件名的目录项。
注:该操作对inode表没有影响(除时间戳),对数据的位置也没有影响,不移动任何数据。(即使是mv到一个已经存在的目标文件,新目录项指源文件inode,会先删除目标文件的目录项,所以如果对运行中的apache的共享模块so文件进行这种操作的话不会有问题,新的so文件inode号会改变)
2.如果目标和源文件所在的文件系统不相同,就是cp和rm的效果。
ln命令
符号(软)链接:
符号链接的内容是它引用文件的名称,可以是任意文件或目录,也可以链接不同文件系统的文件,甚至可以链接不存在的文件,这就产生一般称为断裂的问题,还可以不断的循环链接源文,但是其大小为指向的路径字符串的长度;不增加或减少目标文件inode 的引用计数。
使用ln -s source_file softlink_file (注:源文件(source_file)的路径是相对路径(也可以是绝对路径,通常使用的是相对路径),一定是相对于软链接文件的路径,而非相对于当前工作目录的路径)创建符号链接,在对符号链接进行读写操作的时候,系统会自动把该操作转换为对源文件的操作,但是删除连接文件时,系统仅仅删除符号链接文件,而不是删除源文件本身。
硬链接:
不允许给目录创建硬链接,创建硬链接会增加额外的记录项以引用文件(不能跨驱动或分区创建硬链接),硬链接文件对应于同一文件系统上的一个物理文件,硬链接节点编号是相同的,创建硬链接链接数递增,删除文件时:rm命令递减计数的链接,文件如果存在,至少有一个链接数,当链接数为0时,该文件被删除。
使用ln existfile newfile 命令创建硬链接。
硬链接于软连接的区别:
1、本质不同:硬链接是指向同一个文件,软链接指向的不是同一个文件
2、删除时:硬链接不受影响,软链接失效
3、创建链接时:创建硬链接链接数加1,创建软链接连接数不变
4、是否可以跨分区:硬链接不可以跨分区,软链接可以跨分区
5、目录是否可以创建链接:硬链接不可以对目录创建,软链接可以对目录创建
6、硬链接的inode号相同,软链接inode号不同
注:软链接使用时可以写绝对路径或相对路径。写相对路径时,源文件需要写成链接文件的相对路径。
[root@centos6 link]#pwd
/root/link
[root@centos6 link]#ls
f1
[root@centos6 link]#ln -s ../../../root/link/f1 /data/dir1/dir2/f1-link
[root@centos6 link]#ls /root/link/f1 /data/dir1/dir2/f1-link
/data/dir1/dir2/f1-link /root/link/f1
[root@centos6 link]#ll /root/link/f1 /data/dir1/dir2/f1-link
lrwxrwxrwx. 1 root root 21 Nov 20 16:47 /data/dir1/dir2/f1-link -> ../../../root/link/f1
-rw-r--r--. 1 root root 0 Nov 20 16:41 /root/link/f1
[root@centos6 link]#ls -i /root/link/f1 /data/dir1/dir2/f1-link
917507 /data/dir1/dir2/f1-link 3014885 /root/link/f1
[root@centos6 link]#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 48G 4.4G 42G 10% /
tmpfs 490M 80K 490M 1% /dev/shm
/dev/sda1 976M 34M 892M 4% /boot
/dev/sda3 32G 48M 30G 1% /data
/dev/sr0 3.8G 3.8G 0 100% /media/CentOS_6.10_Final
部分内容转载于:https://blog.51cto.com/13520924/2092364