Yang's blog Yang's blog
首页
Java
密码学
机器学习
命令手册
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

xiaoyang

编程爱好者
首页
Java
密码学
机器学习
命令手册
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • System

    • HomeBrew介绍
  • Git

    • Git 命令入门指南
  • shell

    • shell编程中常用的符号
  • docker

    • Docker介绍
    • Dockerfile :构建自己的 Docker 镜像
    • Docker Compose :容器编排工具
  • Linux

    • Linux基础知识
      • 1. Linux 简介
      • 2. Linux 内核
        • 2.1 Linux 内核 vs. 操作系统
        • 2.2 内核的职责:管理计算机的核心资源
        • 2.3 Shell:用户和内核的桥梁
        • 2.4 系统调用:应用程序如何与内核通信?
        • 2.5 Linux 内核的运行模式:用户态 vs. 内核态
      • 3. Linux 目录结构详解
      • 4. 常见问题
        • 4.1 文件夹区别
        • 4.2 CLI(命令行界面)和 GUI(图形界面)
        • 4.3 DOS 和 Bash 的区别
        • 1. 什么是 DOS?
        • 2. 什么是 Bash?
        • 4.4 Unix 和 Linux
    • Linux 文件系统
    • Linux 用户管理
    • Linux 权限与安全
    • Linux 网络管理
    • Linux 进程管理
    • Linux 常用命令
  • 命令手册
  • Linux
xiaoyang
2025-03-03
目录

Linux基础知识

# Linux基础知识

# 1. Linux 简介

Linux 内核最初由芬兰程序员林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学求学期间,出于个人兴趣开发。它是一款免费开源的类 Unix 操作系统,遵循 POSIX 标准,具备多用户、多任务、多线程以及多 CPU 支持的特性。

Linux 的发行版说简单点就是将 Linux 内核与应用软件做一个打包。目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等。

image-20250303153724715

# 2. Linux 内核

# 2.1 Linux 内核 vs. 操作系统

很多人听到“Linux”时,认为它是一个完整的操作系统,但实际上 Linux 只是操作系统的内核(Kernel),并不是一个完整的操作系统(OS)。

那么,什么是操作系统?它是由多个部分组成的,包括:

  1. 内核(Kernel):直接控制硬件,管理资源(CPU、内存、磁盘、网络等)。
  2. Shell(命令行解释器):用户和内核之间的桥梁,用户输入命令,Shell 解析后交给内核执行。
  3. 系统库(Libraries):提供应用程序调用系统功能的接口,如 C 标准库(glibc)。
  4. 系统工具(Utilities):文件管理、用户管理、网络管理等基础软件(如 ls, ps, top, vi)。
  5. 应用程序(Applications):用户直接使用的软件,如 Web 浏览器、数据库、编译器等。

简而言之,Linux 只是一个“引擎”,要让它跑起来,还需要油(Shell)、轮子(文件系统)、方向盘(用户交互工具)等其他组件才能形成完整的操作系统(如 Ubuntu、CentOS、Debian)。

# 2.2 内核的职责:管理计算机的核心资源

Linux 内核的主要任务是 管理计算机硬件资源,它的职责包括:

  1. 进程管理(Process Management)
    • 负责创建、调度、终止进程,决定哪个程序使用 CPU。
    • 进程间通信(IPC):管道(pipe)、信号(signal)、共享内存(shm)、消息队列(message queue)。
    • 进程状态:运行(Running)、就绪(Ready)、阻塞(Blocked)。
    • 进程调度:采用 CFS(完全公平调度器),保证多任务并发执行。
  2. 内存管理(Memory Management)
    • 负责分配、回收物理内存,使用 虚拟内存(Virtual Memory) 机制管理有限的 RAM 资源。
    • 提供 分页(Paging)、分段(Segmentation)、交换(Swap) 等机制,提高内存利用率。
  3. 文件系统(File System)
    • 通过 虚拟文件系统(VFS, Virtual File System) 层支持多种文件系统,如 ext4、XFS、Btrfs、NTFS。
    • 采用 一切皆文件(Everything is a File)原则,将设备、进程、网络接口等都视为文件。
  4. 设备驱动(Device Drivers)
    • 负责管理硬件设备,如磁盘、网卡、USB 设备等,用户通过 /dev/ 访问设备文件。
    • 采用 可加载内核模块(LKM, Loadable Kernel Module) 机制,允许动态添加驱动程序。
  5. 网络管理(Networking)
    • 内核内置 TCP/IP 协议栈,支持 IPv4、IPv6、VLAN、VPN。
    • 通过 Netfilter(iptables)和 eBPF 进行网络流量控制和安全过滤。

# 2.3 Shell:用户和内核的桥梁

Linux 内核本身不会直接和用户交互,用户必须通过 Shell(命令行解释器) 发送命令。Shell 是一个特殊的程序,运行在内核之上,它的作用是:

  1. 解析命令(Command Parsing),如 ls -l,然后调用系统 API 让内核执行。
  2. 管理进程(Process Control),如前后台运行 &、任务控制 jobs、kill。
  3. 变量与脚本(Scripting),支持 bash, zsh, sh,可以编写 Shell 脚本自动化任务。

常见的 Shell:

  • Bash(默认 Shell):大多数 Linux 发行版的默认 Shell,功能丰富。
  • Zsh:比 Bash 更强大,支持自动补全、插件系统。
  • Fish:易用、现代化,默认支持语法高亮。

例子:当你输入 ls -l 时,Shell 解析命令,调用 syscall 请求内核获取目录内容,最终返回结果给用户。


# 2.4 系统调用:应用程序如何与内核通信?

应用程序无法直接访问内核,而是通过 系统调用(System Call, syscall) 请求内核提供服务。

常见的系统调用:

  • read() / write():读取和写入文件或设备。
  • fork():创建新进程。
  • execve():执行新程序。
  • open() / close():打开和关闭文件。

示例:C 语言调用 write() 系统调用

#include <unistd.h>
int main() {
    write(1, "Hello, Linux Kernel!\n", 21); // 调用 syscall 写入终端
    return 0;
}
1
2
3
4
5

执行 strace ./a.out 可以看到 write(1, "Hello, Linux Kernel!\n", 21) 触发了系统调用。


# 2.5 Linux 内核的运行模式:用户态 vs. 内核态

为了保证安全性,Linux 采用两种 CPU 运行模式:

  1. 用户态(User Mode):普通应用程序运行的模式,不能直接访问硬件。
  2. 内核态(Kernel Mode):内核和驱动运行的模式,能直接访问硬件。

当应用程序调用 syscall 时,CPU 从 用户态切换到内核态 处理请求,执行完后再返回用户态。

示例:执行 ls 命令的过程

  1. 用户输入 ls,Shell 解析命令并调用 execve() 运行 ls。
  2. ls 通过 open() 读取当前目录,并调用 getdents() 获取文件列表。
  3. ls 通过 write() 将结果输出到终端。
  4. 执行完毕,Shell 返回提示符,等待用户输入下一个命令。

# 3. Linux 目录结构详解

Linux 的目录结构采用 层次化的树状结构,所有文件和目录都从根目录 / 开始,并按功能和用途进行组织。以下是 Linux 主要的目录及其用途:

image-20250303150552646

目录 作用
/ 根目录,所有文件和目录的起点,只有 root 用户具有完全控制权限,普通用户只能访问部分内容。
/bin (Binary,用户二进制可执行文件) 存放基本的用户二进制命令,如 ls、cp、mv、rm、cat、echo、pwd 等,这些命令是所有用户都能使用的基本工具,即使系统进入单用户模式(维护模式)也可用。
/sbin (Superuser Binary,超级用户二进制可执行文件) 仅 root 用户使用的 系统管理命令,如 shutdown、fdisk、mkfs、iptables、ifconfig 等,普通用户通常不能执行这些命令,除非使用 sudo。
/etc (Configuration,系统配置文件) 存放 系统的全局配置文件,例如: - /etc/passwd:用户信息 - /etc/shadow:加密存储的用户密码 - /etc/group:用户组信息 - /etc/fstab:自动挂载的文件系统信息 - /etc/hosts:主机名解析配置 所有程序的默认配置文件 通常也存放在 /etc 目录下。
/home 每个普通用户都有一个自己的主目录,例如: - /home/alice/(Alice 用户的主目录) - /home/bob/(Bob 用户的主目录) 该目录存放用户的个人文件、配置文件等。
/root 超级用户 root 的主目录,类似于普通用户的 /home/username,但仅 root 可访问,普通用户无法进入。
/usr (User System Resources,用户软件资源) 存放 系统应用程序和库文件,类似于 Windows 的 C:\Program Files\,其子目录包括: - /usr/bin:普通用户可执行的程序(比 /bin 更丰富) - /usr/sbin:系统管理工具(比 /sbin 更完整) - /usr/lib:库文件(比 /lib 更庞大) - /usr/local:本地安装的软件(不受 Linux 发行版的包管理控制)
/var (Variable,存放动态数据) 存放 不断变化的文件(日志、缓存、临时数据等),主要子目录: - /var/log/:系统日志文件(如 /var/log/syslog, /var/log/auth.log) - /var/spool/:任务队列(如邮件队列、打印任务) - /var/tmp/:长期有效的临时文件(比 /tmp 保留时间长)
/tmp 存放 临时文件,如临时下载文件、临时缓存数据等,重启后 /tmp 中的内容会被自动删除。
/dev 存放 设备文件(Linux 中一切皆文件),常见设备包括: - /dev/sda:磁盘 - /dev/null:丢弃数据的黑洞 - /dev/tty:终端设备 - /dev/random:随机数设备
/mnt 用于 临时挂载文件系统,如挂载 U 盘、光盘等。
/media 现代 Linux 发行版用来 自动挂载可移动设备(U 盘、DVD),例如: - /media/usb:U 盘 - /media/cdrom:光盘
/opt (Optional,第三方软件) 存放 第三方软件(不受系统包管理控制的软件),例如: - /opt/google/chrome/(Google Chrome 安装目录) - /opt/zoom/(Zoom 软件)
/lib、/lib64 存放 系统库文件,供可执行程序调用。 - /lib:用于 32 位系统库。 - /lib64:用于 64 位系统库。
/proc (Process,进程信息) 虚拟文件系统,存放 内核和进程信息,例如: - /proc/cpuinfo:CPU 信息 - /proc/meminfo:内存信息 - /proc/1234/:进程 ID 1234 的信息
/sys (System,内核设备信息) 另一个 虚拟文件系统,存放系统硬件信息,例如: - /sys/class/net/eth0/(网络接口信息) - /sys/block/sda/(磁盘信息)
/run 存放 运行时数据,如进程 ID(PID)、锁文件等,示例: - /run/systemd/(systemd 运行时信息) - /run/sshd.pid(SSH 服务的进程 ID)

# 4. 常见问题


# 4.1 文件夹区别

  1. /usr 和 /bin 有什么区别?
    • /bin(Binary):存放 基本系统命令,如 ls、cp、mv、cat,即使系统运行在单用户模式下也必须存在。
    • /usr/bin:存放 非基本用户命令,如 vim、gcc、wget,通常用于普通用户运行的程序。
  2. /var/tmp 和 /tmp 有什么区别?
    • /tmp:存放 临时文件,系统重启后会自动清除,适合存放短期临时数据。
    • /var/tmp:也是临时存储目录,但 系统重启后文件仍然存在,适合存放需要长时间存活的临时数据。
  3. 为什么 /proc 和 /sys 不是普通目录?
    • /proc 和 /sys 属于 虚拟文件系统,它们 不存储实际数据,而是动态提供 系统和进程信息。
    • /proc:提供 进程和系统信息,如 /proc/cpuinfo(CPU 信息)、/proc/meminfo(内存使用情况)。
    • /sys:用于 设备管理,提供 硬件信息,如 /sys/class/net/(网络设备)、/sys/block/(存储设备)。

# 4.2 CLI(命令行界面)和 GUI(图形界面)

  1. CLI(Command Line Interface)命令行界面
    • 通过 键盘输入命令 进行操作,如 ls 列出文件、cd 切换目录。
    • 优点:占用资源少、操作精确、适合服务器环境和自动化任务。
    • 缺点:对新手不友好,需要记住命令。
  2. GUI(Graphical User Interface)图形界面
    • 通过 鼠标+图形窗口 进行操作,如 GNOME、KDE。
    • 优点:更直观,适合普通用户。
    • 缺点:占用系统资源较多,某些操作不如 CLI 灵活。

CLI 适合服务器、编程和运维;GUI 适合普通用户和桌面环境。


# 4.3 DOS 和 Bash 的区别

# 1. 什么是 DOS?

DOS(Disk Operating System) 是 早期的命令行操作系统,最著名的是 MS-DOS(微软 DOS),它是 1980 年代和 1990 年代初 PC 计算机的主要操作系统。

DOS 示例:

C:\> dir
C:\> cd Documents
C:\> copy file1.txt file2.txt
C:\> del file2.txt
1
2
3
4

由于 DOS 的 功能有限,现代 Windows 已经不再使用纯 DOS,而是采用 Windows 命令提示符(cmd.exe) 作为兼容模式,或者使用更强大的 PowerShell。


# 2. 什么是 Bash?

Bash(Bourne Again Shell) 是 Linux 和 macOS 常见的 命令行解释器(Shell),用来执行命令、运行脚本,并提供丰富的 编程能力。

Bash 示例:

$ ls
$ cd /home/user/Documents
$ cp file1.txt file2.txt
$ rm file2.txt
1
2
3
4

结论:

  • 如果你是 Windows 用户,可能偶尔会用 DOS 进行简单文件操作。
  • 如果你是 Linux 服务器管理员、开发者,你每天都会使用 Bash 进行 管理、开发、自动化任务。
  • 如果你想学编程或自动化,Bash 是必学的工具之一!

# 4.4 Unix 和 Linux

  1. Unix
    • 1969 年 AT&T 贝尔实验室开发,最早的多用户、多任务系统。
    • 专有系统,如 macOS、AIX、Solaris,通常需要购买许可证。
  2. Linux
    • 1991 年 Linus Torvalds 开发的 开源 类 Unix 系统,遵循 POSIX 标准。
    • 完全免费,有多个发行版(Ubuntu、CentOS、Debian)。

Linux 是 Unix 的“克隆”,继承了 Unix 的设计思想,但开源且自由分发。

编辑 (opens new window)
上次更新: 2025/04/01, 01:48:12

← Docker Compose :容器编排工具 Linux 文件系统→

最近更新
01
操作系统
03-18
02
Nginx
03-17
03
后端服务端主动推送消息的常见方式
03-11
更多文章>
Theme by Vdoing | Copyright © 2023-2025 xiaoyang | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式