Linux 文件系统概述

Linux 文件系统概述

目录结构及解释

/ (根目录)

  • 作用: 根目录是文件系统的顶层,所有文件和目录都从这里开始。系统的所有其他目录都挂载在这个目录下。
  • 建议: 不要在根目录下直接存放用户文件或程序,保持其整洁,并尽量减少根目录下的修改。

/usr (用户系统资源)

  • 作用: 包含用户安装的应用程序和库文件,是系统中最大的目录之一,主要用于存放系统级别的二进制文件、库文件和共享数据。
  • 子目录:
    • /usr/bin: 存放用户可执行的二进制文件(程序),如常用命令 lscp
    • /usr/sbin: 存放系统管理员使用的命令,如 fdiskshutdown
    • /usr/lib: 包含程序和库文件。
    • /usr/local: 用户自定义安装的软件放在这里,避免和系统包产生冲突。
    • /usr/share: 存放共享数据,如文档、手册页和区域设置文件。
  • 建议: 将自定义编译的软件安装到 /usr/local/ 下,确保系统与用户自定义软件的分离,便于维护。

/boot (启动引导文件)

  • 作用: 包含启动 Linux 系统所需的文件,如内核、初始化 RAM 磁盘映像和启动加载器(GRUB)配置文件。
  • 建议: 修改此目录前先做好备份,否则可能导致系统无法启动。

/dev (设备文件)

  • 作用: 包含系统设备的接口文件,如硬盘、光驱等。每个设备在这里都会有一个对应的文件,通过这些文件可以与设备进行交互。
  • 建议: 使用命令如 lsblkfdisk 等查看和管理设备。不要直接修改 /dev 下的文件。

/etc (配置文件)

  • 作用: 存放系统和应用程序的配置文件,是系统管理的核心。几乎所有服务和程序的配置都在这里。
  • 常用文件和目录:
    • /etc/passwd: 用户信息。
    • /etc/group: 用户组信息。
    • /etc/fstab: 文件系统挂载信息。
    • /etc/hosts: 本地 DNS 解析。
    • /etc/nginx/: Nginx 的配置目录。
  • 建议: 修改前先备份原始文件,使用版本控制(如 git)管理 /etc 中的配置文件更为方便。

/home (用户家目录)

  • 作用: 每个用户的家目录,存储用户的个人文件和配置文件。
  • 建议: 建议用户将工作文件存放在自己的家目录中,并定期备份重要数据。为每个用户创建单独的目录,确保数据隔离。

/lib (系统库文件)

  • 作用: 包含核心系统库,是系统启动和运行所需的共享库文件。
  • 建议: 不要在此目录中手动安装库文件,建议使用系统的包管理工具(如 aptyum)进行操作。

/media (可移动媒体挂载点)

  • 作用: 系统挂载可移动存储设备(如 U 盘、CD/DVD)时会放在这个目录下。
  • 建议: 当插入外部设备时,系统会自动创建挂载点,通常无需手动操作。

/mnt (临时挂载点)

  • 作用: 用于临时挂载的文件系统,例如测试新分区、挂载 NFS 等。
  • 建议: 手动挂载外部设备或网络文件系统时,使用此目录,如 mount /dev/sdb1 /mnt/mydisk

/opt (可选软件包)

  • 作用: 存放第三方软件或用户安装的软件包,通常是大型的非系统自带的应用程序。
  • 建议: 第三方应用建议安装在 /opt/<应用名> 下,以避免与系统包产生冲突。

/tmp (临时文件)

  • 作用: 存放临时文件,系统或应用程序生成的临时数据会保存在这里,系统重启后通常会清空该目录。
  • 建议: 可以将开发调试时的临时文件放在这里,但不要存放重要文件。

/var (可变文件)

  • 作用: 存放经常变动的数据,如日志文件、邮件、缓存等。
  • 常用子目录:
    • /var/log/: 系统和服务的日志文件。
    • /var/cache/: 应用程序缓存。
    • /var/lib/: 存放服务运行时的数据,例如数据库文件。
  • 建议: 定期清理不需要的日志和缓存数据,避免占满磁盘空间。

/sbin (系统管理命令)

  • 作用: 存放系统管理员使用的命令,通常用于系统管理和维护,例如 ifconfigreboot
  • 建议: 这些命令通常需要 root 权限执行,不建议普通用户频繁使用。

/bin (基本命令)

  • 作用: 存放基本的用户命令,例如 lscpmv,这些命令在系统单用户模式下也可用。
  • 建议: 该目录下的命令对于系统的基本操作是不可或缺的,尽量不要进行更改。

开发人员应关注的目录

/home

  • 作用: 存储用户的个人文件和配置文件,每个用户都有自己的家目录。
  • 建议:
    • 备份重要数据:定期备份用户目录中的重要文件,尤其是开发环境配置文件(如 .bashrc.zshrc.vimrc)。
    • 目录结构规范:用户的个人项目文件可以放在 ~/projects~/work 中,配置文件保存在 ~/config 中。

/etc

  • 作用: 存放系统和应用程序的配置文件,是系统管理的核心。
  • 建议:
    • 常见配置文件:
      • /etc/passwd: 用户信息。
      • /etc/group: 用户组信息。
      • /etc/fstab: 文件系统挂载信息。
      • /etc/hosts: 本地 DNS 解析。
      • /etc/nginx/: Nginx 的配置目录,网站部署时需要修改。
      • /etc/systemd/system/: 自定义的 Systemd 服务文件存放路径。
    • 目录结构规范:自定义的配置文件可以放在 /etc/opt/ 中,以避免与系统配置冲突。
    • 备份策略:任何修改前先备份,如 cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak

/var

  • 作用: 存放经常变动的数据,如日志文件、邮件、缓存等。
  • 建议:
    • 日志管理
      • /var/log/: 系统和服务的日志文件都在这里,可以查看应用和系统运行状态。
      • 通过 tail -f /var/log/syslogjournalctl -u <服务名> 实时查看日志。
    • 缓存和临时数据
      • /var/cache/: 应用程序缓存,清理缓存时要小心,避免影响程序运行。
      • /var/lib/: 存放服务运行时的数据,例如数据库文件。
    • 目录结构规范:应用程序的数据存放在 /var/lib/<应用名> 中,日志文件存放在 /var/log/<应用名>

/usr

  • 作用: 存放系统级别的二进制文件、库文件和共享数据。
  • 建议:
    • 开发相关文件
      • /usr/bin/usr/sbin: 存放用户级和系统级命令,运维人员可以通过这里查看系统命令的路径。
      • /usr/local/bin: 自定义脚本和可执行文件的存放路径,优先级高于 /usr/bin
    • 目录结构规范:对于自编译的软件,建议安装在 /usr/local/ 下,避免和系统包产生冲突。

/opt

  • 作用: 存放第三方软件或用户安装的软件包。
  • 建议:
    • 软件安装规范:第三方应用软件建议安装在 /opt/<应用名> 下,便于管理和卸载。
    • 权限管理:确保 /opt 下的目录权限合理,通常需要 root 权限进行安装和维护。

/tmp

  • 作用: 存放临时文件,系统重启后会清空。
  • 建议:
    • 临时文件管理:开发调试时,可以将不重要的临时文件放在这里,但注意不要放置关键数据。
    • 目录清理:可以通过 tmpwatchtmpreaper 自动清理。

/dev

  • 作用: 存放系统设备的接口文件,每个设备在这里都有一个对应的文件。
  • 建议:
    • 磁盘管理:通过 /dev/sda 等接口管理硬盘分区。
    • 常用命令:如 lsblk 查看磁盘设备,mount 挂载设备。

/mnt/media

  • 作用: 挂载点,/mnt 用于临时挂载,/media 用于自动挂载外部设备。
  • 建议:
    • 挂载规范:临时挂载外部设备或网络文件系统时,建议使用 /mnt/<挂载名>,而自动挂载的 U 盘和光驱会出现在 /media/<用户名>/<设备名>

目录创建规范

  1. 保持目录简洁:

    • 避免在根目录下创建过多自定义目录。
    • 自定义的脚本或二进制文件放在 /usr/local/bin 中。
  2. 命名约定:

    • 使用小写字母和短横线 - 分隔符,例如:/opt/my-application/
    • 对于多层目录,使用明确的层级结构,如 /var/lib/my-app/data
  3. 权限管理:

    • 用户数据目录(如 /home)应使用用户权限管理,避免使用 root
    • /etc/opt/usr/local 等目录应由管理员维护。
  4. 日志和数据分离:

    • 应用程序生成的日志文件放在 /var/log/<应用名> 下。
    • 数据库或持久化数据放在 /var/lib/<应用名> 下。
overview-of-linux-file-system

Read more

了解 SOLID 原则,包含 C# 代码示例

了解 SOLID 原则,包含 C# 代码示例

SOLID 原则让开发者能够编写易于扩展的代码,并避免常见的编码错误。这些原则由 Robert C. Martin 提出,已成为面向对象编程的重要基础。 什么是 SOLID 原则? SOLID 是五个设计原则的缩写,分别代表: * S - 单一职责原则(Single Responsibility Principle,SRP) * O - 开闭原则(Open/Closed Principle,OCP) * L - 里氏替换原则(Liskov Substitution Principle,LSP) * I - 接口隔离原则(Interface Segregation Principle,ISP) * D - 依赖倒置原则(Dependency Inversion Principle,DIP)

作者 Chasen Liu
Kafka 和 RabbitMQ 的全面对比

Kafka 和 RabbitMQ 的全面对比

Kafka 和 RabbitMQ 是目前流行的消息队列和数据流处理工具,但它们的设计思路和应用场景各不相同。本文将从核心概念、适用场景、优缺点以及对比方面详细说明 Kafka 和 RabbitMQ 的区别。 一、Kafka 和 RabbitMQ 的架构简介 Kafka Kafka 是 LinkedIn 开发并捐献给 Apache 基金会的分布式数据流平台。其核心设计理念是处理大规模、高吞吐量的实时数据流。 * 设计理念:主要关注高吞吐量和持久化,适合处理大量数据的实时流处理场景。 * 架构特点:以发布-订阅模型为基础,Kafka 中的数据被持久化到磁盘,并可以从任意时刻开始重复消费。 * 典型应用:数据流管道(Data Pipelines)、日志聚合、实时分析、监控系统、事件溯源等。 RabbitMQ RabbitMQ 是由 Pivotal Software 开发的消息队列系统,基于 AMQP(

作者 Chasen Liu
Docker 入门手册

Docker 入门手册

1. Docker 简介 Docker 是一个开源的容器化平台,它使应用程序的创建、部署和运行更加轻松。Docker 通过将应用及其依赖项打包到一个容器中,保证在任何环境下都能一致地运行。 1.1 Docker 的演变史 * 2013年发布:Docker 由 Solomon Hykes 创建,最初作为一个内部项目,用于简化应用的部署。 * 2014年 Docker Hub 发布:Docker Hub 是一个在线存储和分享 Docker 镜像的仓库,使得共享应用变得更加简单。 * 2017年 Docker 企业版:支持大规模的容器管理,为企业提供更强的安全性和管理功能。 * 现在:Docker 已经成为 DevOps 和微服务架构中不可或缺的工具,并与 Kubernetes 等容器编排工具紧密结合。 1.2 Docker 和虚拟机的区别 特性

作者 Chasen Liu