Linux文件管理

本文详细介绍了Linux文件系统的目录结构,如 `/boot`, `/dev`, `/etc` 等,以及各种文件类型,包括元数据和数据。讨论了显示当前工作目录、绝对和相对路径、更改目录的方法。此外,还涵盖了Linux下的inode概念,包括inode表结构和大小,以及文件的读取、修改和访问时间戳。最后,文章提到了文件管理命令如`ls`、`cd`和`stat`的用法,以及硬链接和软链接的区别。" 133194914,20039003,SQL Server 中的只读权限设置教程,"['SQL Server', '数据库管理', '权限控制']
摘要由CSDN通过智能技术生成

文件系统目录结构

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

绝对和相对路径

  1. 绝对路径
    以正斜杠开始
    完整的文件的位置路径
    可用于任何想指定一个文件名的时候
  2. 相对路径名
    不以斜线开始
    指定相对于当前工作目录或某目录的位置
    可以作为一个简短的形式指定一个文件名
  3. 基名:basename
  4. 目录名: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]#

由于绝对路径与相对路径的区别,顾编写代码和程序时考虑到目录结构的改变对程序的影响,故尽量时用相对路径。

更改目录

  1. cd 改变目录
    使用绝对或相对路径:
    cd /home/wang/
    cd home/wang
    切换至父目录: cd …
    切换至当前用户主目录: cd ,cd ~
    切换至某一用户家目录:cd ~weblogic(波浪号与用户名之间无空格 )
    切换至以前的工作目录: cd -
  2. 选项:-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
  1. 相关的环境变量:
    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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值