linux文件属性及 ls -l 命令输出结果详解

2024-04-24 13:58

本文主要是介绍linux文件属性及 ls -l 命令输出结果详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、ls -l 输出的内容概略

二、ls -l 输出内容详解

1、命令

2、inode索引节点编号

3、文件类型

4、文件属性

5、目录或链接的个数

6、所有者及组

7、文件大小

8、文件最后修改时间

9、文件名及颜色


一、ls -l 输出的内容概略

注:本图片转自:https://blog.51cto.com/13447608/2151610 ,图画的很好,我就懒得画了,直接转过来啦 

二、ls -l 输出内容详解

1、命令

一般使用ls -l命令,更全的输出信息使用,a表示全部,h表示文件大小以人类易读的形式给出,i表示索引节点,l表示长列表形式。

 ls -ahil

 

2、inode索引节点编号

  • inode中存放了文件的创建者、创建时间、文件大小、文件存放的块的位置等信息,总之除了文件名和文件内容外其他的信息都存在这个inode中。
  • 每个文件都有一个inode号码。
  • inode号码相同,说明这些文件是硬连接的关系。
  • 其他inode知识这里不再详述。

3、文件类型

 该列表示文件的类型,文件类型有:

  • “-” 表示普通文件,如*.txt,*.c,*.h
  • “d” 表示目录,directory
  • “l” 表示软链接文件(ln -s 创建的),link file
  • “p” 表示pipe管道文件
  • “b” 表示块设备文件,block device
  • “c” 表示字符设备文件,char device
  • “s” 表示socket套接字文件,用于实现两个进程间通信

4、文件属性

红框中圈出来的部分,共9个字符来表示,3个一组,共3组,拿最后一个test目录来说:[rwx][r-x][r-x],这3组分别表示文件所有者的权限,组的权限和其他用户的权限。

  • r(read,读权限)  :对文件来说,具有读取文件内容的权限;对目录来说,具有浏览目录及子目录的权限。
  • w(write,写权限):对文件来说,具有修改、删除文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。
  • x(execute,执行权限):对文件来说,具有执行文件的权限;对目录来说,该用户具有进入目录的权限。
  • -                                      :表示无任何权限。
  • -----------------------------------------------------------------------------------------------------------------
  • 还有3个特殊权限,分别是set uid(suid),set gid(sgid),粘滞位sticky(t);它们分别用来设置文件所有者(属主)的权限、组的权限,其他权限;这样文件权限共有9+3=12位(bits)来表示,但是显示到具体的字符上,文件权限只用9个字符来表示,因为3个特殊权限位合并到前面已有的普通权限位上了,这样就形成了复合权限的9个/位字符表示方式。
  • set uid(suid):只针对命令和二进制程序。
  •                               只在执行时权限才有效。
  •                               二进制程序需要有x可执行权限配合使用,即x位是s才可以。
  •                              属主x权限位上有x权限,增加suid权限后,x变为s【小写s】。
  •                              属主x权限位上无x权限,增加suid权限后,x变为S【大写S】。
  •                              增加suid权限后,原来没有属主权限(如root等)的其他普通用户也拥有了属主的权限,这样普                               通用户就可以像属主一样操作这个程序或命令,类似与把这个命令或程序的属主权限共享出来了                                一样,所有用户都可以使用,是不是有点危险感,比sudo还要可怕。
  • set gid(sgid):针对用户组的权限位。
  •                             可针对命令、二进制程序、目录等文件,比suid范围要广。
  •                              二进制程序需要有x可执行权限配合使用,即x位是s才可以。
  •                              属组x权限位上有x权限,增加sgid权限后,x变为s【小写s】。
  •                              属组x权限位上无x权限,增加sgid权限后,x变为S【大写S】。
  •                              增加sgid权限后,执行命令的任意用户可以获得该命令执行期间所属组的所有权限。
  • 粘滞位sticky(t):针对除了属主和属组外其他用户的权限位。
  •                                 只针对目录有效,其他文件即使设置了也没用,直接被内核忽略了。
  •                                  其他用户x权限位上有x权限,增加sticky权限后,x变为t【小写t】。
  •                                  其他用户x权限位上无x权限,增加sticky权限后,x变为T【大写T】。
  •                                  目录增加sticky权限后,目录下的所有文件都可以被任何人读写,所有文件都是共享的。
  •                                  目录增加sticky权限后,只有属主和root用户才可以删除该目录下的文件,其他人不能。
  •                                  目录增加sticky权限后,用户自建的目录不会继承sticky权限。

下面演示了3个特殊的权限,详细的关于权限修改等问题,请看我的关于权限修改的博文。

5、目录或链接的个数

  •  对于普通文件来说,该值表示的是链接数目,即硬链接或软链接的数据。

       比如:copy_my.sh和my.sh的inode号相同,说明这2个文件互为硬链接,故他们的链接数均为2。

  • 对于目录来说,该值表示该目录下所有目录的总数,即该值=2+该目录下所有目录数目。注:不含该目录下目录的子目录。

       其中2表示的是当前目录下的“.目录”和“..目录”这2个目录,所有目录下都会自动创建这2个目录,所以这个2是常数。linux下凡是名字以点'.'开头的文件都是隐藏文件。“.目录”表示的是当前目录,“..目录”表示上一级目录

       “.目录”的目录个数为3,因为当前目录下有1个test目录,所以该值=2+1=3;“..目录”的值是43,说明上一级目录除了2个固定目录外还有43-2=41个目录。

       test目录的目录数目为2,因为它下面无目录,所以该值=2+0=2。

6、所有者及组

  • 第一个book,即文件的所有者或创建者(owner),修改属主可以用命令:chown
  • 第二个book,即文件所在的组(group),修改属组可以用命令:chown

7、文件大小

  • 单位为字节(byte),加入-h参数后会把字节数转换成KB或MB或GB等容易感性认识的值。
  •  对于普通文件来说,表示该文件的大小。
  • 对于目录来说,仅仅表示该目录(可以认为是一个空文件夹,不含里面其他文件的大小)占用的磁盘空间大小,一般都是4096或4K。

8、文件最后修改时间

表示该文件或目录最后的修改时间。 

9、文件名及颜色

  • 文件名,文件的名字。linux不是以文件名中文件的后缀来判断文件的类型的,但是一般专用文件还是用专用的后缀较好,这样容易识别文件的格式。
  • 文件名的颜色:一般不同类型的文件名的颜色是不同的,一般默认有如下的约定:【修改了shell配色的情况除外】

     1)蓝色代表目录/文件夹

     2)浅蓝色代表链接文件

     3)绿色代表可执行文件

     4)灰白色代表一般文件

    5)红色代表压缩文件

    6)黄色代表设备文件

 

本文前几天前就一直想写了,想着直接转载一篇完事,但是当写起来后,发现还是自己一步一步的做,一点一点的写比较好,主要是文件权限部分内容较多,涉及的知识要查找许多资料,这一查一写就是两天多时间,回头看看,这样做还是很值得的。

2020-02-21~2020-02-23@北京

这篇关于linux文件属性及 ls -l 命令输出结果详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/931953

相关文章

Linux线程同步/互斥过程详解

《Linux线程同步/互斥过程详解》文章讲解多线程并发访问导致竞态条件,需通过互斥锁、原子操作和条件变量实现线程安全与同步,分析死锁条件及避免方法,并介绍RAII封装技术提升资源管理效率... 目录01. 资源共享问题1.1 多线程并发访问1.2 临界区与临界资源1.3 锁的引入02. 多线程案例2.1 为

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

Linux如何查看文件权限的命令

《Linux如何查看文件权限的命令》Linux中使用ls-R命令递归查看指定目录及子目录下所有文件和文件夹的权限信息,以列表形式展示权限位、所有者、组等详细内容... 目录linux China编程查看文件权限命令输出结果示例这里是查看tomcat文件夹总结Linux 查看文件权限命令ls -l 文件或文件夹

idea的终端(Terminal)cmd的命令换成linux的命令详解

《idea的终端(Terminal)cmd的命令换成linux的命令详解》本文介绍IDEA配置Git的步骤:安装Git、修改终端设置并重启IDEA,强调顺序,作为个人经验分享,希望提供参考并支持脚本之... 目录一编程、设置前二、前置条件三、android设置四、设置后总结一、php设置前二、前置条件

python中列表应用和扩展性实用详解

《python中列表应用和扩展性实用详解》文章介绍了Python列表的核心特性:有序数据集合,用[]定义,元素类型可不同,支持迭代、循环、切片,可执行增删改查、排序、推导式及嵌套操作,是常用的数据处理... 目录1、列表定义2、格式3、列表是可迭代对象4、列表的常见操作总结1、列表定义是处理一组有序项目的

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所

C++11范围for初始化列表auto decltype详解

《C++11范围for初始化列表autodecltype详解》C++11引入auto类型推导、decltype类型推断、统一列表初始化、范围for循环及智能指针,提升代码简洁性、类型安全与资源管理效... 目录C++11新特性1. 自动类型推导auto1.1 基本语法2. decltype3. 列表初始化3