linux简介

Linux 是一种开源的类 Unix 操作系统,广泛应用于服务器、个人电脑和嵌入式系统,因其稳定性和灵活性而受到欢迎。

Linux的特点:

  • 开源:Linux 的源代码是公开的,任何人都可以自由获取、修改和分发,这使得它拥有庞大的开发者社区,推动了其不断发展和创新。
  • 稳定性:Linux 被认为是一个性能稳定的操作系统,尤其适合用于服务器环境。
  • 多样性:Linux 有许多不同的发行版,如 Ubuntu、Red Hat、CentOS、Debian 等,每个发行版都有其特点和适用场景
  • 安全性:Linux 系统通常被认为比其他操作系统更安全,尤其是在服务器和网络环境中,因其权限管理和用户管理机制较为严格。

linux文件系统介绍

linux下一切皆文件,而linux中的一切文件都从/为起点

linux的系统目录简介

用户目录:home与root:

其中root存的是管理员账户的相关文件,home存的是普通用户的相关文件,因为过于容易理解就不再加以赘述

系统命令目录:bin、sbin与opt:

系统命令相关的目录有/bin、/sbin,两者都存放着每个人都会用到的一些日常命令和系统级命令

其中bin是binary(二进制程序)的简称,而sbin是system binary

下面是两者的区别:

对比项 /bin /sbin
面向用户 所有用户 主要是 root 用户
命令性质 普通用户日常使用的基本命令 系统管理和系统维护命令
典型命令 ls、cp、mv、cat、sh、bash fsck、shutdown、reboot、fdisk、mkfs、iptables

其中/opt存放的是不属于系统核心、由第三方或管理员单独安装的独立软件,里面的软件通常是诸如chrome一样自包含完整目录树结构的大型软件

/opt的好处是能让大型软件的lib不会散落到系统各处,删除时直接删除/opt/<package-name>即可
全称是optional,即附加软件包

共享库目录:lib与lib64:

两个目录存储了/bin和/sbin中二进制文件所需的共享库和内核模块

其中lib是library

两者的区别是/lib一般存放了32位的共享库,而/lib64存放的是64位的共享库

应用数据目录:run、var与tmp:

对比项 /run /var /tmp
全称/含义 runtime(运行时) variable(可变) temporary(临时)
存储介质 tmpfs(内存),重启清空 通常为磁盘,持久保留 通常为磁盘或 tmpfs,重启清空(视发行版配置)
数据生命周期 仅本次启动期间有效 长期,跨重启保留 短期,重启后清空(/var/tmp 例外)
是否持久化 否 是 否(/tmp);/var/tmp 重启后保留
典型内容 PID 文件、Unix socket、锁文件、运行时状态 日志(/var/log)、数据库(/var/lib)、缓存(/var/cache)、邮件/打印队列 程序运行产生的临时文件、下载中间文件、会话缓存
是否可安全删除 是(重启自动清空) 否,/var/lib 删除会丢数据 是,但运行中的程序可能仍在使用
FHS 定位 运行时变量数据 可变数据层次 临时文件

设备与硬件目录:dev、media与mnt:

目录 全称/含义 核心用途 谁来操作 典型场景
/dev device(设备) 存放代表硬件设备的特殊文件 系统自动管理 /dev/sda(硬盘)、/dev/tty(终端)
/media media(介质) 可移动介质的自动挂载点 系统/桌面环境自动 U 盘插入后自动挂载到 /media/用户名/…
/mnt mount(挂载) 供管理员临时手动挂载文件系统 管理员手动操作 临时挂载网络共享、修复系统时挂载分区

对外目录:srv:

srv全称service,如果机器跑着 Web 服务、FTP 服务或版本控制服务,这些服务对外提供的内容(比如网页文件、FTP 共享文件)可以放在/srv下

srv是一个对外提供静态文件数据的目录

配置目录:etc:

etc的全称是et cetera,是系统演进中逐渐形成的配置文件集中地

其存放主机特定的系统配置,并且不得包含二进制可执行文件。

举例:

  • /etc/passwd:用户账户信息
  • /etc/fstab:文件系统挂载配置
  • /etc/hosts:主机名到 IP 的静态映射
  • /etc/resolv.conf:DNS 解析配置
  • /etc/ssh/:SSH 服务配置
  • /etc/systemd/:systemd 服务管理配置

启动加载文件目录:boot:

/boot:是存放系统启动所需静态文件的目录,核心作用是让系统能够成功引导起来。

/boot下通常存放:

  • Linux 内核(如 vmlinuz-linux)

  • initramfs 镜像(初始内存文件系统)

  • 引导加载程序的配置文件及相关阶段文件

可共享只读目录:usr:

/usr全称是Unix System Resource

/usr里面包含了系统绝大部分的用户级程序和数据

其子目录与/目录下的目录结构高度相同:

  • /usr/bin :绝大多数用户可执行程序(非系统启动必需)。

  • /usr/sbin:非必要的系统管理程序。

  • /usr/lib、/usr/lib32、/usr/lib64:程序运行所需的库文件。

  • /usr/share:与架构无关的共享数据,如文档、手册页、图标。

  • /usr/local:预留给管理员安装本地软件,系统更新不会覆盖这里。

FHS规范外还有/usr/include(存储C/C++头文件),/usr/src(存储软件源码),/usr/libexec(由其他程序调用的内部可执行文件,不直接给用户用)

内核与进程信息目录:proc:

proc全称process,是一个伪文件系统,文件不占磁盘空间,内容由内核在内存中动态生成,读取时实时反映系统当前状态。这正是“一切皆文件”哲学最典型的体现:内核把进程状态、硬件信息、可调参数统统包装成文件,用户用 cat 就能看。

其目录下的文件有以下几种情况:

  • 数据目录:目录下每个正在运行的进程都有一个以 PID 命名的子目录
  • 系统级文件:内核与硬件快照
    • /proc/cpuinfo:CPU 型号、核心、频率等信息
    • /proc/meminfo:物理内存与 swap 使用情况(free 命令的数据来源)
    • /proc/loadavg:系统负载(1/5/15 分钟平均值)
    • /proc/mounts:当前挂载的文件系统
    • /proc/partitions:磁盘分区信息
    • /proc/interrupts:中断使用情况
    • /proc/version:内核版本
  • /proc/sys/:这里的文件科协,可用于运行时调整内核参数

内核对象与设备树目录:sys:

/sys全称system(非官方),同样是一个伪文件系统。向用户空间导出内核内部的对象结构(kobject),主要是设备、驱动、总线、内核模块等。

例如:

  • /sys/devices/:内核设备树的真实层次结构,是所有设备在sysfs中的“根”位置
  • /sys/dev/:按设备号(major:minor)组织的block/与char/符号链接,便于用stat得到的设备号反查sysfs
  • /sys/module/:已加载内核模块的信息
  • /sys/power/:电源管理相关接口

非标准目录:lost-found:

当系统意外崩溃或断电后,fsck(文件系统检查工具)会在下次启动时扫描磁盘。如果发现损坏或“无家可归”的文件碎片,就会把它们放到/lost+found里等待人工处理

用户目录文件结构介绍

TODO: 让我偷偷懒