禅与计算机 禅与计算机
首页
  • Java基础

    • 聊一聊java一些核心知识点
    • 聊聊java面向对象核心知识点
    • 聊聊Java中的异常
    • 聊聊Java中的常用类String
    • 万字长文带你细聊Java注解本质
    • 来聊聊Java的反射机制
    • 深入解析Java泛型的魅力与机制
    • Java集合框架深度解析与面试指南
    • Java常用集合类HashMap深度解析
    • LinkedHashMap源码到面试题的全解析
    • 深入解析CopyOnWriteArrayList的工作机制
    • Java基础IO总结
    • Java三大IO模型小结
    • Java BIO NIO AIO详解
    • Java进阶NIO之IO多路复用详解
    • Java8流式编程入门
    • 一文速通lambda与函数式编程
    • Java8函数式方法引用最佳实践
  • Java并发编程

    • Java并发编程基础小结
    • 深入理解Java中的final关键字
    • 浅谈Java并发安全发布技术
    • 浅谈Java并发编程中断的哲学
    • Java线程池知识点小结
    • 浅谈Java线程池中拒绝策略与流控的艺术
    • synchronized关键字使用指南
    • 深入源码解析synchronized关键字
    • 详解JUC包下的锁
    • 详解并发编程中的CAS原子类
    • LongAdder源码分析
    • AQS源码解析
    • 深入剖析Java并发编程中的死锁问题
    • Java并发容器总结
    • 详解Java并发编程volatile关键字
    • 并发编程ThreadLocal必知必会
    • CompletableFuture基础实践小结
    • CompletableFuture异步多任务最佳实践
    • 硬核详解FutureTask设计与实现
    • 线程池大小设置的底层逻辑与场景化方案
    • 来聊一个有趣的限流器RateLimiter
  • JVM相关

    • 从零开始掌握 JVM
    • JVM核心知识点小结
    • JVM指令集概览:基础与应用
    • JVM类加载器深度解析
    • JVM方法区深度解析
    • Java内存模型JMM详解
    • Java对象大小的精确计算方法
    • 逃逸分析在Java中的应用与优化
    • 从零开始理解JVM的JIT编译机制
    • G1垃圾回收器:原理详解与调优指南
    • JVM故障排查实战指南
    • JVM内存问题排错最佳实践
    • JVM内存溢出排查指南
    • 简明的Arthas使用教程
    • 简明的Arthas配置及基础运维教程
    • 基于Arthas Idea的JVM故障排查与指令生成
    • 基于arthas量化监控诊断java应用方法论与实践
    • 深入剖析arthas技术原理
  • 深入理解Spring框架

    • Spring 核心知识点全面解析
    • Spring核心功能IOC详解
    • Spring AOP 深度剖析与实践
    • Spring 三级缓存机制深度解析
    • 深入 Spring 源码,剖析设计模式的落地实践
    • 探索 Spring 事务的奥秘
    • 深入解析Spring Bean的生命周期管理
    • 解读 Spring Boot 核心知识点
    • Spring Boot 启动优化实战:1分钟到13秒的排查与优化之路
    • Spring Boot自动装配原理及实践
    • 一文快速上手Sharding-JDBC
    • sharding-jdbc如何实现分页查询
    • 基于DynamicDataSource整合分库分表框架Shardingsphere
  • 计算机组成原理

    • 计算机硬件知识小结
    • CPU核心知识点小结
    • 浅谈CPU流水线的艺术
    • 从Java程序员视角聊聊CPU缓存
    • CPU任务调度和伪共享问题小结
    • CPU MESI缓存一致性协议
    • CPU内存管理机制
    • 内存深度解析
    • 磁盘存储原理
    • 详解计算机启动步骤
    • CPU南北桥架构与发展史
    • CPU中断机制与硬件交互详解
  • 操作系统

    • 如何实现一个高性能服务器
    • Linux文件结构与文件权限
    • Linux常见压缩指令小结
    • Linux核心系统调用详解
    • Linux进程管理
    • Linux线程管理
    • 进程与线程深度解析
    • Linux进程间通信机制
    • 零拷贝技术原理与实践
    • CPU缓存一致性问题深度解析
    • IO任务与CPU调度艺术
  • 计算机网络

    • 网卡通信原理详解
    • 网卡数据包处理指南
    • 基于抓包详解TCP协议
  • 编码最佳实践

    • 浅谈现代软件工程TDD最佳实践
    • 浅谈TDD模式下并发程序设计与实现
    • 面向AI编程新范式Trae后端开发环境搭建与实践
    • 基于提示词工程的Redis签到功能开发实践
    • 基于Vibe Coding的Redis分页查询实现
    • 告别AI无效对话:资深工程师的提示词设计最佳实践
  • 实用技巧与配置

    • Mac常用快捷键与效率插件指南
    • Keynote技术科普短视频制作全攻略
  • 写作

    • 写好技术博客的5大核心原则:从认知科学到AI工具的全流程指南
  • 开发工具

    • IDEA配置详解与高效使用指南
  • Nodejs
  • 博客搭建
  • Redis

    • Redis核心知识小结
    • 解锁Redis发布订阅模式
    • 掌握Redis事务
    • Redis主从复制技术
    • Redis的哨兵模式详解
    • 深度剖析Redisson分布式锁
    • 详解redis单线程设计思路
    • 来聊聊Redis所实现的Reactor模型
    • Redis RDB持久化源码深度解析
    • 来聊聊redis的AOF写入
    • 来聊聊Redis持久化AOF管道通信的设计
    • 来聊聊redis集群数据迁移
    • Redis SDS动态字符串深度解析
    • 高效索引的秘密:redis跳表设计与实现
    • 聊聊redis中的字典设计与实现
  • MySQL

    • MySQL基础知识点小结
    • 解读MySQL 索引基础
    • MySQL 索引进阶指南
    • 解读MySQL Explain关键字
    • 探秘 MySQL 锁:原理与实践
    • 详解MySQL重做日志redolog
    • 详解undoLog在MySQL MVCC中的运用
    • MySQL二进制日志binlog核心知识点
    • MySQL高效插入数据的最佳实践
    • MySQL分页查询优化指南
    • MySQL流式查询的奥秘与应用解析
    • 来聊聊分库分表
    • 来聊聊大厂常用的分布式ID生成方案
  • ElasticSearch

    • 从Lucene到Elasticsearch:进化之路
    • ES 基础使用指南
    • ElasticSearch如何写入一篇文档
    • 深入剖析Elasticsearch文档读取原理
    • 聊聊ElasticSearch性能调优
    • Spring借助Easy-Es操作ES
  • Netty

    • 一文快速了解高性能网络通信框架Netty
    • Netty网络传输简记
    • 来聊聊Netty的ByteBuf
    • 来聊聊Netty消息发送的那些事
    • 解密Netty高性能之谜:NioEventLoop线程池阻塞分析
    • 详解Netty中的责任链Pipeline如何管理ChannelHandler
    • Netty Reactor模型常见知识点小结
    • Netty如何驾驭TCP流式传输?粘包拆包问题全解
    • Netty解码器源码解析
  • 消息队列

    • 一文快速入门消息队列
    • 消息队列RocketMQ入门指南
    • 基于RocketMQ实现分布式事务
    • RocketMQ容器化最佳实践
    • RocketMQ常见问题与深度解析
    • Kafka快速安装与使用指南
  • Nginx

    • Linux下的nginx安装
    • Nginx基础入门总结
    • Nginx核心指令小结
    • Nginx进程结构与核心模块初探
    • Nginx应用进阶HTTP核心模块配置
    • Nginx缓存及HTTPS配置小记
    • nginx高可用实践简记
    • Nginx性能优化
  • 微服务基础

    • 微服务基础知识小结
    • 分布式事务核心概念小结
    • OpenFeign核心知识小结
    • 微服务组件Gateway核心使用小结
    • 分布式事务Seata实践
    • 用 Docker Compose 完成 Seata 的整合部署
  • Nacos

    • Nacos服务注册原理全解析
    • Nacos服务订阅流程全解析
    • Nacos服务变更推送流程全解析
    • 深入解析SpringCloud负载均衡器Loadbalancer
    • Nacos源码环境搭建与调试指南
  • Seata

    • 深度剖析Seata源码
  • Docker部署

    • 一文快速掌握docker的理念和基本使用
    • 使用docker编排容器
    • 基于docker-compose部署微服务基本环境
    • 基于docker容器化部署微服务
    • Gateway全局异常处理及请求响应监控
    • Docker图形化界面工具Portainer最佳实践
  • Go基础

    • 一文带你速通Go语言基础语法
    • 一文快速掌握Go语言切片
    • 来聊聊go语言的hashMap
    • 一文速通go语言类型系统
    • 浅谈Go语言中的面向对象
    • go语言是如何实现协程的
    • 聊聊go语言中的GMP模型
    • 极简的go语言channel入门
    • 聊聊go语言基于epoll的网络并发实现
    • 写给Java开发的Go语言协程实践
  • mini-redis实战

    • 来聊聊我用go手写redis这件事
    • mini-redis如何解析处理客户端请求
    • 实现mini-redis字符串操作
    • 硬核复刻redis底层双向链表核心实现
    • 动手复刻redis之go语言下的字典的设计与落地
    • Go 语言下的 Redis 跳表设计与实现
    • Go 语言版 Redis 有序集合指令复刻探索
  • 项目编排

    • Spring脚手架创建简记
    • Spring脚手架集成分页插件
    • Spring脚手架集成校验框架
    • maven父子模块两种搭建方式简记
    • SpringBoot+Vue3前后端快速整合入门
    • 来聊聊Java项目分层规范
  • 场景设计

    • Java实现文件分片上传
    • 基于时间缓存优化浏览器轮询阻塞问题
    • 基于EasyExcel实现高效导出
    • 10亿数据高效插入MySQL最佳方案
    • 从开源框架中学习那些实用的位运算技巧
  • CI/CD

    • 基于NETAPP实现内网穿透
    • 基于Gitee实现Jenkins自动化部署SpringBoot项目
    • Jenkins离线安装部署教程简记
    • 基于Nexus搭建Maven私服基础入门
    • 基于内网的Jenkins整合gitlab综合方案简记
  • 监控方法论

    • SpringBoot集成Prometheus与Grafana监控
    • Java监控度量Micrometer全解析
    • 从 micrometer计量器角度快速上手promQL
    • 硬核安利一个监控告警开源项目Nightingale
  • Spring AI

    • Spring AI Alibaba深度实战:一文掌握智能体开发全流程
    • Spring AI Alibaba实战:JVM监控诊断Arthas Agent的工程化构建与最佳实践
  • 大模型评测

    • M2.7 真能打!我用两个真实场景测了测,结果有点意外
    • Qoder JetBrains插件评测:祖传代码重构与接口优化实战
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

sharkchili

计算机禅修者
首页
  • Java基础

    • 聊一聊java一些核心知识点
    • 聊聊java面向对象核心知识点
    • 聊聊Java中的异常
    • 聊聊Java中的常用类String
    • 万字长文带你细聊Java注解本质
    • 来聊聊Java的反射机制
    • 深入解析Java泛型的魅力与机制
    • Java集合框架深度解析与面试指南
    • Java常用集合类HashMap深度解析
    • LinkedHashMap源码到面试题的全解析
    • 深入解析CopyOnWriteArrayList的工作机制
    • Java基础IO总结
    • Java三大IO模型小结
    • Java BIO NIO AIO详解
    • Java进阶NIO之IO多路复用详解
    • Java8流式编程入门
    • 一文速通lambda与函数式编程
    • Java8函数式方法引用最佳实践
  • Java并发编程

    • Java并发编程基础小结
    • 深入理解Java中的final关键字
    • 浅谈Java并发安全发布技术
    • 浅谈Java并发编程中断的哲学
    • Java线程池知识点小结
    • 浅谈Java线程池中拒绝策略与流控的艺术
    • synchronized关键字使用指南
    • 深入源码解析synchronized关键字
    • 详解JUC包下的锁
    • 详解并发编程中的CAS原子类
    • LongAdder源码分析
    • AQS源码解析
    • 深入剖析Java并发编程中的死锁问题
    • Java并发容器总结
    • 详解Java并发编程volatile关键字
    • 并发编程ThreadLocal必知必会
    • CompletableFuture基础实践小结
    • CompletableFuture异步多任务最佳实践
    • 硬核详解FutureTask设计与实现
    • 线程池大小设置的底层逻辑与场景化方案
    • 来聊一个有趣的限流器RateLimiter
  • JVM相关

    • 从零开始掌握 JVM
    • JVM核心知识点小结
    • JVM指令集概览:基础与应用
    • JVM类加载器深度解析
    • JVM方法区深度解析
    • Java内存模型JMM详解
    • Java对象大小的精确计算方法
    • 逃逸分析在Java中的应用与优化
    • 从零开始理解JVM的JIT编译机制
    • G1垃圾回收器:原理详解与调优指南
    • JVM故障排查实战指南
    • JVM内存问题排错最佳实践
    • JVM内存溢出排查指南
    • 简明的Arthas使用教程
    • 简明的Arthas配置及基础运维教程
    • 基于Arthas Idea的JVM故障排查与指令生成
    • 基于arthas量化监控诊断java应用方法论与实践
    • 深入剖析arthas技术原理
  • 深入理解Spring框架

    • Spring 核心知识点全面解析
    • Spring核心功能IOC详解
    • Spring AOP 深度剖析与实践
    • Spring 三级缓存机制深度解析
    • 深入 Spring 源码,剖析设计模式的落地实践
    • 探索 Spring 事务的奥秘
    • 深入解析Spring Bean的生命周期管理
    • 解读 Spring Boot 核心知识点
    • Spring Boot 启动优化实战:1分钟到13秒的排查与优化之路
    • Spring Boot自动装配原理及实践
    • 一文快速上手Sharding-JDBC
    • sharding-jdbc如何实现分页查询
    • 基于DynamicDataSource整合分库分表框架Shardingsphere
  • 计算机组成原理

    • 计算机硬件知识小结
    • CPU核心知识点小结
    • 浅谈CPU流水线的艺术
    • 从Java程序员视角聊聊CPU缓存
    • CPU任务调度和伪共享问题小结
    • CPU MESI缓存一致性协议
    • CPU内存管理机制
    • 内存深度解析
    • 磁盘存储原理
    • 详解计算机启动步骤
    • CPU南北桥架构与发展史
    • CPU中断机制与硬件交互详解
  • 操作系统

    • 如何实现一个高性能服务器
    • Linux文件结构与文件权限
    • Linux常见压缩指令小结
    • Linux核心系统调用详解
    • Linux进程管理
    • Linux线程管理
    • 进程与线程深度解析
    • Linux进程间通信机制
    • 零拷贝技术原理与实践
    • CPU缓存一致性问题深度解析
    • IO任务与CPU调度艺术
  • 计算机网络

    • 网卡通信原理详解
    • 网卡数据包处理指南
    • 基于抓包详解TCP协议
  • 编码最佳实践

    • 浅谈现代软件工程TDD最佳实践
    • 浅谈TDD模式下并发程序设计与实现
    • 面向AI编程新范式Trae后端开发环境搭建与实践
    • 基于提示词工程的Redis签到功能开发实践
    • 基于Vibe Coding的Redis分页查询实现
    • 告别AI无效对话:资深工程师的提示词设计最佳实践
  • 实用技巧与配置

    • Mac常用快捷键与效率插件指南
    • Keynote技术科普短视频制作全攻略
  • 写作

    • 写好技术博客的5大核心原则:从认知科学到AI工具的全流程指南
  • 开发工具

    • IDEA配置详解与高效使用指南
  • Nodejs
  • 博客搭建
  • Redis

    • Redis核心知识小结
    • 解锁Redis发布订阅模式
    • 掌握Redis事务
    • Redis主从复制技术
    • Redis的哨兵模式详解
    • 深度剖析Redisson分布式锁
    • 详解redis单线程设计思路
    • 来聊聊Redis所实现的Reactor模型
    • Redis RDB持久化源码深度解析
    • 来聊聊redis的AOF写入
    • 来聊聊Redis持久化AOF管道通信的设计
    • 来聊聊redis集群数据迁移
    • Redis SDS动态字符串深度解析
    • 高效索引的秘密:redis跳表设计与实现
    • 聊聊redis中的字典设计与实现
  • MySQL

    • MySQL基础知识点小结
    • 解读MySQL 索引基础
    • MySQL 索引进阶指南
    • 解读MySQL Explain关键字
    • 探秘 MySQL 锁:原理与实践
    • 详解MySQL重做日志redolog
    • 详解undoLog在MySQL MVCC中的运用
    • MySQL二进制日志binlog核心知识点
    • MySQL高效插入数据的最佳实践
    • MySQL分页查询优化指南
    • MySQL流式查询的奥秘与应用解析
    • 来聊聊分库分表
    • 来聊聊大厂常用的分布式ID生成方案
  • ElasticSearch

    • 从Lucene到Elasticsearch:进化之路
    • ES 基础使用指南
    • ElasticSearch如何写入一篇文档
    • 深入剖析Elasticsearch文档读取原理
    • 聊聊ElasticSearch性能调优
    • Spring借助Easy-Es操作ES
  • Netty

    • 一文快速了解高性能网络通信框架Netty
    • Netty网络传输简记
    • 来聊聊Netty的ByteBuf
    • 来聊聊Netty消息发送的那些事
    • 解密Netty高性能之谜:NioEventLoop线程池阻塞分析
    • 详解Netty中的责任链Pipeline如何管理ChannelHandler
    • Netty Reactor模型常见知识点小结
    • Netty如何驾驭TCP流式传输?粘包拆包问题全解
    • Netty解码器源码解析
  • 消息队列

    • 一文快速入门消息队列
    • 消息队列RocketMQ入门指南
    • 基于RocketMQ实现分布式事务
    • RocketMQ容器化最佳实践
    • RocketMQ常见问题与深度解析
    • Kafka快速安装与使用指南
  • Nginx

    • Linux下的nginx安装
    • Nginx基础入门总结
    • Nginx核心指令小结
    • Nginx进程结构与核心模块初探
    • Nginx应用进阶HTTP核心模块配置
    • Nginx缓存及HTTPS配置小记
    • nginx高可用实践简记
    • Nginx性能优化
  • 微服务基础

    • 微服务基础知识小结
    • 分布式事务核心概念小结
    • OpenFeign核心知识小结
    • 微服务组件Gateway核心使用小结
    • 分布式事务Seata实践
    • 用 Docker Compose 完成 Seata 的整合部署
  • Nacos

    • Nacos服务注册原理全解析
    • Nacos服务订阅流程全解析
    • Nacos服务变更推送流程全解析
    • 深入解析SpringCloud负载均衡器Loadbalancer
    • Nacos源码环境搭建与调试指南
  • Seata

    • 深度剖析Seata源码
  • Docker部署

    • 一文快速掌握docker的理念和基本使用
    • 使用docker编排容器
    • 基于docker-compose部署微服务基本环境
    • 基于docker容器化部署微服务
    • Gateway全局异常处理及请求响应监控
    • Docker图形化界面工具Portainer最佳实践
  • Go基础

    • 一文带你速通Go语言基础语法
    • 一文快速掌握Go语言切片
    • 来聊聊go语言的hashMap
    • 一文速通go语言类型系统
    • 浅谈Go语言中的面向对象
    • go语言是如何实现协程的
    • 聊聊go语言中的GMP模型
    • 极简的go语言channel入门
    • 聊聊go语言基于epoll的网络并发实现
    • 写给Java开发的Go语言协程实践
  • mini-redis实战

    • 来聊聊我用go手写redis这件事
    • mini-redis如何解析处理客户端请求
    • 实现mini-redis字符串操作
    • 硬核复刻redis底层双向链表核心实现
    • 动手复刻redis之go语言下的字典的设计与落地
    • Go 语言下的 Redis 跳表设计与实现
    • Go 语言版 Redis 有序集合指令复刻探索
  • 项目编排

    • Spring脚手架创建简记
    • Spring脚手架集成分页插件
    • Spring脚手架集成校验框架
    • maven父子模块两种搭建方式简记
    • SpringBoot+Vue3前后端快速整合入门
    • 来聊聊Java项目分层规范
  • 场景设计

    • Java实现文件分片上传
    • 基于时间缓存优化浏览器轮询阻塞问题
    • 基于EasyExcel实现高效导出
    • 10亿数据高效插入MySQL最佳方案
    • 从开源框架中学习那些实用的位运算技巧
  • CI/CD

    • 基于NETAPP实现内网穿透
    • 基于Gitee实现Jenkins自动化部署SpringBoot项目
    • Jenkins离线安装部署教程简记
    • 基于Nexus搭建Maven私服基础入门
    • 基于内网的Jenkins整合gitlab综合方案简记
  • 监控方法论

    • SpringBoot集成Prometheus与Grafana监控
    • Java监控度量Micrometer全解析
    • 从 micrometer计量器角度快速上手promQL
    • 硬核安利一个监控告警开源项目Nightingale
  • Spring AI

    • Spring AI Alibaba深度实战:一文掌握智能体开发全流程
    • Spring AI Alibaba实战:JVM监控诊断Arthas Agent的工程化构建与最佳实践
  • 大模型评测

    • M2.7 真能打!我用两个真实场景测了测,结果有点意外
    • Qoder JetBrains插件评测:祖传代码重构与接口优化实战
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 计算机组成原理

  • 操作系统

    • 如何实现一个高性能服务器
    • Linux文件结构与文件权限
      • 基于centos了解Linux文件结构
        • Linux中的文件类型
        • 文件名的限制
        • 树形目录结构
      • 绝对路径和相对路径
      • 文件权限
        • 权限对应角色
        • 文件夹与文件对应权限的相似与区别
      • umask设置默认权限
      • 参考文献
    • Linux常见压缩指令小结
    • 浅谈Linux权限管理
    • Linux核心系统调用详解
    • Linux进程管理
    • Linux线程管理
    • 进程与线程深度解析
    • Linux进程间通信机制
    • 浅谈Linux基于信号处理中断的哲学
    • 从操作系统底层浅谈程序栈的高效性
    • 零拷贝技术原理与实践
    • CPU缓存一致性问题深度解析
    • IO任务与CPU调度艺术
    • 来聊聊函数回调
    • 一个完美主义者的自我救赎
  • 计算机网络

  • 运维

  • 编码最佳实践

  • 计算机基础
  • 操作系统
sharkchili
2023-12-06
目录

Linux文件结构与文件权限

# 基于centos了解Linux文件结构

# Linux中的文件类型

Linux采用的一切皆文件的思想,将硬件设备、软件等所有数据信息都以文件的形式呈现在用户面前,这就使得我们对计算机的管理更加方便。所以本篇文章会对Linux操作系统的文件结构和文件权限进行讲解。

首先我们键入到达~目录

    cd ~   
1

然后键入ll查看所有非隐藏文件,可以看到在每个文件最前方都有一个由10个字符构成的字符串,就以第一行为例-rw-------.,可以看到第一行的10字符的第一个字符是-,在Linux操作系统中,这个符号就代表着文件是一般文件,也就是我们日常配置、文本文件等这类文件。

在这里插入图片描述

除了一般文件以外,每个文件第一栏的第一个字符还可能出现以下几种情况:

  1. d:代表当前文件为文件夹
  2. l:代表当前文件为超连接文件
  3. b:该文件提供为提供给系统存取的设备,例如你计算机的硬盘所存储的数据内容,可能都会保存在这个类型文件中
  4. c:代表着连接到你计算机的一些硬件设备,例如鼠标、键盘等配置文件开头都是以c开头的

为了验证这一点,我们随意创建一个文件夹:

mkdir /tmp/dir

1
2

然后使用ll命令查看其文件属性:

ll /tmp/

1
2

可以看到我们创建的文件夹是以d打头的

在这里插入图片描述

上文还提到了一个b打头的文件,这个文件是提供系统存储的数据且可能硬盘也可能是其他存储设备的,这类型文件一般都在设备目录dev下,我们可以进入dev目录看到这些文件:

ll /dev/sda
1

在这里插入图片描述

而c打头的文件则是硬件设备,我们不妨键入 ll /dev查看一下,如下图所示的BUS总线,以及CPU等这些都是硬件设备:

在这里插入图片描述

同样的在上文中我们也有提到关于隐藏文件的概念,在Linux中隐藏文件大多以.开头,这些文件使用常规的ll、ls等命令是看不到的,必须使用al选项查看所有文件才能看到(补充一句a的意思就是all):

ls -al查看
1

于是在当前目录的所有文件列表下,我们看到了隐藏目录:

在这里插入图片描述

# 文件名的限制

在现如今的Linux,文件系统基本采取XFS,所以文件名长度限制基本是255byte以内,说通俗一点,你的文件要是以英文命名就可以起一个长度为255的文件名,若为汉字则长度大约是127。注意由于Linux命令中常会用到-以及一些特殊符号,所以文件命名应该尽量避免以下几个特殊符号:

* ? > < ; & ! [ ] | \ ' " ` ( ) { } -
1

# 树形目录结构

Linux的文件结构总的来说类似于一棵树,用户可以按照规范约定在相应的文件夹下存储文件,就例如在var目录下可以存储一些与系统的运作有关的文件例如程序日志文件、在tmp目录下存储一些临时文件等。 需要了解的是,无论是何种Linux系统,他的目录都会遵循一个标准,包括下图中的文件结构,而这个标准名为Filesystem Hierarchy Standard (FHS)。

在这里插入图片描述

FHS规定文件的整体结构应该是这样的:

1. /:根目录,与开机系统有关
2. /usr(unix software resource):与软件的安装和执行有关
3. /var(variable):与系统的运作有关
1
2
3

首先介绍一个根目录/,它的子节点文件基本都是和系统开机相关、各种程序、库函数的文件夹,所以在根目录这一级是非常重要的,所以FHS希望后续使用Linux的时候尽量不要将用户的文件夹或者文件存储到这一层级以避免误操作到重要文件导致系统崩溃。

在这里插入图片描述

根目录下有个bin文件夹,我们日常使用Linux的时候都会用到ls、cat、touch、mkdir等基本操作命令都存放于bin目录下:

在这里插入图片描述

接下来是/boot,这个目录存放的基本都是Linux开机会用到配置文件,像Linux kerner常用到的文件名vmlinuz就会存放在这个文件夹下

在这里插入图片描述

接下来是/dev,这个文件夹基本存放的都是硬件设备,我们都知道Linux主张一切皆文件,所以所有的鼠标、键盘、硬盘的设备信息都是存放在这个文件夹下:

在这里插入图片描述

/etc目录则是存放配置文件的地方,常见我们的用户文件/etc/passwd,以及密码文件/etc/shadow,还有系统文件/etc/rc等都会存放在这个目录下。 除此之根目录下还有一些文件夹如下所示,这里就不一一介绍了:

  1. mnt存放挂载相关。
  2. lib存放库函数相关、
  3. sbin存放开机、系统还原、修复等众多指令。
  4. tmp存储临时文件习惯。

我们再来聊聊FHS规范中一个命名比较特殊导致用户使用时常受到误导的文件夹/usr,很多人最初都会误以为这是user的缩写,其实这个单词是unix software resource的缩写,这个文件夹是FHS规定存放软件资源相关的文件夹,他们建议用户软件相关的资源尽可能都放到这个目录。

首先来看看/usr/bin目录,这个目录实质上就FHS希望用户能够将一般用户所能够的使用的指令都放到这个目录下,所以我们在日常软件安装时对应各种启动指令脚本都建议存放到这个位置。此外usr的bin目录下还存放了系统指令的软连接,参见下图:

在这里插入图片描述

除此之外usr下还有3个常见的目录: 1./usr/lib与根目录的lib功能相同,存放的基本是lib目录下的软链接。 2. /usr/local/则是FHS希望用户将下载的软件都放到这个目录下统一管理 3. /usr/sbin同样也是将根目录的sbin目录下的指令软链接到此。

最后我们再来介绍一些/var,这个目录FHS认为应该存放那些经常发生变化的文件,例如日志,他们希望日志统一存放到/var/log下。/var/lib存放的则是会临时改变的库文件。而/var/lock存放的则是被某个程序锁定的文件,已确保其他程序不会同时使用到这个文件。

在这里插入图片描述

# 绝对路径和相对路径

绝对路径则是以根节点作为其实节点的文件搜寻办法,例如我们想到达tmp文件夹,如果使用绝对路径的方式则是

cd /tmp
1

假如我们在boot目录下,而tmp和他一样都属root的子节点,所以使用相对路径的方式是先退到root目录,然后再进入tmp文件夹,如下图,所以在boot目录下,我们进入tmp文件夹的命令为 cd ../tmp/:

在这里插入图片描述

演示结果参见下图: 在这里插入图片描述

注意:../代表着退到上一级,那么就会有这么一个指令./,代表当前目录,这个指令是干什么用的是,很简单,假如我们Linux中某个sh文件不在bin、sbin、/usr/bin这样的目录下,Linux规定我们执行可执行sh文件文件时都必须标明./,例如我在tmp目录下有个执行脚本test,那么我在test目录下执行这个脚本的格式就必须是

sh ./test.sh
1

# 文件权限

# 权限对应角色

我们在随意一个目录下键入ll查看文件信息,如下图我们可以看到每个文件的第一栏除去第一个字符串代表着文件类型外,其余字符都会显示rwx-相关,其含义为:

  1. r代表读权限。
  2. w代表写权限。
  3. x代表执行权限。

在这里插入图片描述

我们以dir的文件描述为例,第一个字符d代表它是个文件夹,2-4代表当前所有者权限为读写执行都有,而5-7代表所属组权限,即这个文件所属的组所拥有的权限为读和执行,最后一行代表其他人的权限也是读和执行。

d   rwx   r-x     r-x.
1

针对dir文件夹,可以看到第3列为root,说明这个文件属于root的,root用户拥有这个文件夹的读写执行权限。而第4列也为root,说明属于root组的用户拥有读写执行的权限。

假如此时有个名为xiaoming的用户进来,它属于xiaomingzu,那么对于这个dir文件夹而言,他就是other用户,那么它的权限只有读和执行。

# 文件夹与文件对应权限的相似与区别

在Linux系统下文件系统下,文件的可执行权限和文件夹的可执行权限是有所不同的。假如一个用户对文件夹只有读和写权限,那么他就无法进入到这个目录,如下所示,我们有root创建一个testDir,所以对于其他用户来说只有读和写权限。 注意一下笔者赋权的命令,这里我们需要了解一下Linux中读权限用4表示,写权限用2表示,执行用1表示,所以766为(4+2+1)+(4+2)+(4+2)代表着所属者读写执行,所属组和其他都是读和执行:

# 进入tmp目录
 cd /tmp/
 
 # 创建testDir文件夹
mkdir testDir

# 设置这个文件夹 所属者有所有权限 所属组和其他用户只有读和写权限
chmod 766 testDir/
1
2
3
4
5
6
7
8

当笔者以其他用户登录(这个用户不是所属者root也不属于root组)时,就会报出没有权限的问题

在这里插入图片描述

这时候我们希望其他用户可以有执行的权限,要怎么做呢?很简单,我们也可以参考上面的数学公司对其他用户增加执行权限:

chmod 777 /test/testDir

1
2

当然我们也可以单独对其他用户增加一个可执行权限,命令如下所示,可以看到其他为o,增加一个可执行权限为+x。同理可知若是所者为u,所属组为g。增加权限用+,减去权限用-,赋值权限用=:

其他用户对于testDir文件夹的操作增加执行权限
chmod o+x testDir/

1
2
3

所以我们若希望所属者赋值为所有权限则是u=rwx,所属组和其他都希望是读和执行,那就是g和o合在一起写,并=rx,如下所示:

 chmod u=rwx,go=rx testDir/
1

当然有时候你希望这个文件改变所属组,你可以使用chgrp 指令,如下所示,这样意义文件夹所属组就改为otheruser:

# 将文件夹testDir所属组改为otheruser
chgrp otherusertestDir/

1
2
3

同理若你希望改变所有者则可以使用chown :

chown otherusertestDir testDir/

1
2

当然,若你希望所有者和所属组都能改变则可以:

# 将testDir所有者改为冒号左边的root,将所属组改为冒号右边的root
chown root:root testDir/
1
2

在这里插入图片描述

回到问题,为了方便演示文件和文件夹可执行权限的区别,我们将文件夹所属者和所属者都改为root,并且所有用户都具备所有权限:

chmod 777 testDir/
chown root:root   testDir/
1
2

在这里插入图片描述

然后进去该文件夹,创建一个file1的文件,权限设置为700,即所属者才有权限,所属组和其他没有任何权限:

cd testDir/
 touch file1
 chmod 700 file1

1
2
3
4

使用ll -d查看testDir文件夹以及文件夹下对应的文件file1的权限,可以发现对于其他用户而言文件夹有所有的权限,而文件没有任何权限:

ll -d  /tmp/testDir/ /tmp/testDir/file1

1
2

在这里插入图片描述

所以我们使用别的账户可以进入路径,但是无法读写该文件如下图:

在这里插入图片描述

vim file1
1

在这里插入图片描述 但是以为其他用户拥有file文件的目录testDir的执行权限,所以它可以将这个文件删除。所以得出结论,文件夹的可执行权限意为着可以删除这个文件夹下所有的文件,但是并不意味着可以修改或者读取文件夹下文件的内容。

这种情况我们完全可以将文件夹testDir看作一个抽屉,任何人对其都有任何权限。此时root往里面放了一个小保险盒,读写权限只有root有。所以其他用户是无法打开或者修改盒子中的内容。但是他具有抽屉(testDir)的所有权限,所以他可以将这个保险盒扔掉。

在这里插入图片描述

以下这张表格就说明了操作文件夹下某些文件所需的最低权限,可以看到像删除、复制等这些无需读取文件内容的操作,文件所对应的文件夹甚至不一定需要rw的权限。用上面抽屉和文件的例子来说,我们删除完完全全可以看不到抽屉内部文件的具体的内容,复制文件不需要知道文件夹内有什么文件,我们完完全全可以瞎摸出来放到别的目录。 在这里插入图片描述

# umask设置默认权限

默认情况下,用户创建的文件权限为:rw-rw-rw-,对应的数字为666,而文件夹则是:rwxrwxrwx对应数字是777。那是什么原因导致我们最后创建出来的文件权限变成rw-r--r--(644)以及文件夹变成rwxr-xr-x(755)呢?

答案就是umask,umask和默认权限进行取反和按位与运算,从而得出文件和文件夹创建的实际文件。 先来演算一下文件的权限运算,加入我们创建一个文件file:

touch file
1

可以看到它的权限为0644(因为权限位最前面是-,说明是一般文件,可直接视为0)

-rw-r--r-- 1 root root    0 Dec  6 14:39 file

1
2

以上文所说,默认是0666,然后和0022进行取反按位与运算,所以我们首先对0022进行取反得到7755:

在这里插入图片描述

然后和0666进行按位与运算,最终得出文件默认权限为rw-r--r--,文件夹同理这里就不多做演示:

  7755
& 0666
  0644
1
2
3

上述运算属于标准的推算步骤,对于取反按位与这种运算,读者可直接视为减法,例如文件默认权限为0666,而umask为0022,两者直接相减即可直接得到0644。

如果我们希望文件权限保持最原始的权限,那么我们可以将umask改为0000:

umask 0000
1

创建的文件权限就是 666,创建的文件夹就是 777。

# 参考文献

鸟哥的Linux私房菜:https://book.douban.com/subject/4889838/ (opens new window)

循序渐进Linux(第2版):https://book.douban.com/subject/26758194/ (opens new window)

编辑 (opens new window)
上次更新: 2026/03/26, 01:05:31
如何实现一个高性能服务器
Linux常见压缩指令小结

← 如何实现一个高性能服务器 Linux常见压缩指令小结→

最近更新
01
基于EasyExcel实现高效导出
03-25
02
从开源框架中学习那些实用的位运算技巧
03-25
03
浅谈分布式架构设计思想和常见优化手段
03-25
更多文章>
Theme by Vdoing | Copyright © 2025-2026 Evan Xu | MIT License | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×
×