鸟哥私房菜:命令初识
计算机与操作系统知识要点解析 在计算机技术不断发展的今天,深入了解计算机组成、操作系统相关知识,对我们更好地使用和探索计算机世界有着重要意义。接下来,就让我们一同深入探讨这些知识要点,这也是对鸟哥的私房菜课后题回答的整理。 计算机概论基础Unix 基础Linux 基础RockyLinux 9 的基本操作一、计算机概论基础 1. 计算机组成的五大单元计算机组成的五大单元分别是运算器、控制器、存储器、输入设备和输出设备。运算器负责算术运算和逻辑运算;控制器是计算机的指挥中心,控制各部件协调工作;存储器用于存储数据和程序;输入设备将外部信息转换为计算机能接受的形式;输出设备则把计算机处理的结果以人们能识别的形式输出。 2. CPU 主要包含的单元CPU 主要包含运算器和控制器这两个单元。运算器执行具体的运算操作,控制器则根据指令的要求,协调和控制计算机各部件的工作,二者协同工作,使得 CPU 能够高效地处理各种任务。 3. I/O bound 与 CPU boundI/O bound 指的是输入 / 输出受限,意味着在这种情况下,计算机系统的性能瓶颈在于...
Linux:内存映射实现文件复制详解
导言在计算机系统的文件处理领域,数据传输效率是衡量程序性能的重要指标。传统文件复制操作依赖于read和write系统调用,这种方式在用户空间与内核空间之间存在多次数据拷贝过程,导致不可忽视的性能损耗。而基于内存映射(mmap)技术的文件复制方案,通过将文件内容直接映射至进程地址空间,有效减少数据拷贝次数,从而显著提升数据处理效率。本文将对一段基于内存映射的 C 语言文件复制代码进行深入分析,详细阐述其实现机制与设计原理。 一、头文件与宏定义123456789#include <sys/mman.h>#include <sys/types.h>#include <fcntl.h>#include <unistd.h>#include <sys/stat.h>#include <stdio.h>#include <stdlib.h>#define ARGS_CHECK(argc, num) if (argc != num) { fprintf(stderr, "Usage: %s ...
Linux:实现目录树结构打印
一、引言:为什么需要实现目录树打印?在系统编程和文件管理场景中,直观展示目录结构是一项基础需求。通过递归遍历目录并以树状结构输出,我们可以: 学习价值:深入理解文件系统操作、递归算法和层级结构的编程实现; 工程实践:为文件管理器、备份工具、磁盘空间分析等程序提供基础功能; 调试辅助:快速查看目录结构,辅助定位文件路径问题。 本文将通过 C 语言实现一个完整的目录树打印程序,涵盖目录遍历、递归处理、树状符号渲染等核心技术点。 二、功能说明:目录树打印程序的核心能力该程序通过以下功能实现目录结构的可视化: 递归遍历:从指定目录开始,递归扫描所有子目录; 树状渲染:使用├──、└──、│ 等符号构建层级结构; 排序显示:按字母顺序排列目录和文件; 错误处理:包含完整的错误检查和提示机制。 程序运行效果示例: 12345678910projects/├── src/│ ├── main.c│ └── utils/│ ├── string.c│ └── file.c├── include/│ ├── utils.h│ └── config.h...
Linux:文件系统编程函数统计
一、基于 tar 命令的代码压缩技术实践在日常软件开发工作流中,代码文件的压缩归档是一项基础且核心的操作。tar 命令结合 Gzip 压缩算法,是实现高效文件压缩存储的典型解决方案,该方案不仅能够显著减小文件存储体积,同时可完整保留文件目录结构信息。 文件归档与压缩实现通过tar cfvz参数组合,可将所有以test开头的文件及目录打包并压缩为package.tar.gz格式文件,从而实现文件体积的有效缩减,具体命令如下: 1tar cfvz package.tar.gz test* # 归档并压缩 其中,c参数表示创建新的归档文件,f参数用于指定归档文件名,v参数可在操作过程中显示详细执行信息,z参数则启用 Gzip 压缩功能。 压缩文件解包操作使用tar xzvf命令可对已压缩的文件包进行解压缩处理,具体操作指令如下: 1tar xzvf package.tar.gz # 解压缩 二、Vim 文本编辑器核心操作指令解析Vim 作为一款功能强大的文本编辑工具,熟练掌握其增删改查等核心操作命令,能够显著提升代码编辑效率。 文本复制操作 快速多行复制:利用nyy命...
文件系统编程深度解析:从目录流到 IO 多路复用
一、目录流操作与文件系统基础1.目录流核心概念体系目录流是 Linux 文件系统中用于读取目录信息的核心机制,其设计基于 "一切皆文件" 的哲学思想。在 Linux 系统中,目录本质上是一种特殊文件,存储着文件名与 inode 节点的映射关系。目录流操作通过一组系统调用与库函数,实现了对目录内容的遍历与管理。 从系统架构视角看,目录流操作涉及三层关键概念: 系统调用层:用户空间与内核交互的底层接口,如open_dir、read_dir等,直接对应内核文件系统模块的操作 库函数层:对系统调用的封装抽象,如 POSIX 标准定义的opendir()、readdir()等函数 内核结构层:Linux 内核中文件系统相关的数据结构,如inode、dentry等核心结构体 POSIX 标准的形成标志着目录流操作的规范化发展。该标准定义了 26 个与文件系统相关的头文件,确保了 UNIX/Linux 系统间的接口兼容性。而 ISO-C 标准定义的 24 个头文件则提供了更基础的 C 语言文件操作接口,二者共同构成了文件系统编程的标准体系。 2.目录操作核心函...
探秘 Linux 目录流:从概念到实践的深度解析
导言 在 Linux 操作系统的体系架构中,目录流作为文件系统交互的核心组件,承担着目录信息检索与层级结构遍历的关键功能。对于系统开发者与运维工程师而言,深入剖析目录流的理论基础与实践机制,是掌握 Linux 系统编程范式与实现高效系统管理的必要前提。 一、目录流的核心概念 1.1 目录流的定义与作用目录流是一组用于目录信息检索与遍历操作的函数集合,在 Linux 文件系统树形结构的构建与维护中发挥着关键作用。通过目录流接口,用户能够获取目录下的文件与子目录元数据,解析文件属性信息,从而实现对文件系统的精细化操作。该机制广泛应用于文件管理工具开发、数据备份系统构建以及系统监控程序设计等领域。 1.2 系统调用:用户空间与内核的桥梁系统调用作为用户空间与内核交互的唯一标准接口,构成了目录流功能实现的底层支撑体系。当用户空间程序调用目录流相关函数时,通过系统调用机制将请求传递至内核态,由内核完成具体操作并返回执行结果。 在这一过程中,C 标准库与 POSIX 标准库通过封装系统调用接口,显著降低了应用开发的复杂度。以readdir函数为例,其底层依赖sys_getdents等系统调...
Linux:类似ls -al的目录列表程序
一、引言 在 Linux 操作系统生态中,ls - l命令作为文件系统目录信息检索的核心工具,能够以列表形式结构化呈现文件及目录的详细元数据信息,在系统管理、软件开发、运维保障等场景中具有不可替代的作用。通过自主开发具备类似功能的程序,有助于深入理解文件系统接口规范、系统调用机制及 C 语言在底层编程中的应用范式。本文提出的directory_lister.c程序,旨在通过 C 语言编程实现ls - l命令的核心功能,为相关领域的学术研究与工程实践提供可复用的技术样本。 二、程序整体架构设计 2.1 功能模块划分directory_lister.c程序基于模块化设计理念,划分为四个核心功能模块,各模块通过清晰的接口定义实现协同工作,共同完成目录列表功能: 参数解析模块:该模块负责解析命令行输入参数,实现目标目录路径的动态确定。程序通过argc(命令行参数数量)和argv(参数数组)获取用户输入,若未指定目录路径,则自动将当前工作目录作为默认目标。这种设计符合 Linux 命令行程序的交互规范,显著提升了程序的适用性与灵活性。 目录扫描模块:利用opendir、readdir等系...
Linux:测试不同缓冲区大小对文件复制性能的影响
一. 文件复制性能测试程序技术解析在计算机系统性能优化领域,I/O 操作效率一直是关键研究方向。本文将深入解析一个用于测试不同缓冲区大小对文件复制性能影响的 C 语言程序,从底层系统调用到高层性能分析,全面阐述其技术实现与优化细节。 二. 程序整体架构设计该程序通过动态调整缓冲区大小(1KB 至 1MB),对文件复制过程进行性能测试。整体架构遵循 "打开 - 读取 - 写入 - 关闭" 的经典 I/O 操作流程,并引入精确计时机制与健壮的错误处理逻辑。程序的核心创新点在于:通过控制单一变量(缓冲区大小)来量化其对 I/O 性能的影响,为系统调优提供数据支撑。 三. 核心函数功能解析3.1 系统调用层函数3.1.1 open 函数12int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode); 功能:打开或创建文件,返回文件描述符(非负整数) 参数解析: pathname:文件路径 f...
Linux新手入门:GNU工具链实战笔记(从“啥都不懂”到“能打能修”)
一、编译工具链:代码到可执行程序的“工业流水线”编译是将人类可读的C代码转换为计算机可执行的二进制指令的过程。GNU编译器套件(GCC)通过预处理→编译→汇编→链接四阶段流水线实现这一转换,每个阶段均有明确的功能边界与技术实现。 1.1 预处理阶段:代码的文本转换与宏展开预处理(Preprocessing)由cpp(C Preprocessor)完成,核心任务是文本级别的代码转换,为后续编译阶段提供“干净”的输入。 关键操作与技术细节 头文件包含(#include):通过递归展开头文件内容(如#include 会插入标准库头文件的完整内容),解决代码复用问题。现代编译器(如GCC)采用“头文件缓存”优化,避免重复解析。 宏替换(#define):文本替换(如#define MAX 100将所有MAX替换为100),支持带参数的宏(如#define SQUARE(x) ((x)*(x)))和条件编译(如#ifdef DEBUG)。 行控制(#line):修改编译器报告的行号与文件名(常用于生成代码的工具链)。 技术验证:通过gcc -E hello.c -o hello.i生成...
Linux 基础操作与核心概念详解
一、Linux 系统架构:用户空间与内核的交互桥梁Linux 系统采用分层架构,核心逻辑围绕“用户空间”与“内核空间”的协作展开。用户程序无法直接操作硬件,必须通过内核提供的接口——这一接口正是我们今天要深入理解的系统调用、库函数与Shell 命令。 1.1 层次结构概览Linux 系统的运行逻辑可简化为三层模型(从用户到内核): 层级 角色描述 典型代表/技术 应用层 用户直接使用的软件(如浏览器、文本编辑器) Vim、GCC、Python 库函数层 对系统调用的封装,提供更易用的编程接口 C 标准库(如 fopen)、GNU C 库 系统调用层 内核暴露给用户空间的“唯一入口”,直接控制硬件资源 open、read、write 内核层 管理硬件资源(CPU、内存、磁盘),实现进程调度、文件系统等核心功能 Linux 内核(进程管理、内存管理) 关键结论:所有用户程序的操作(如读写文件、启动进程),最终都必须通过系统调用请求内核完成。 1.2 系统调用:用户与内核的“翻译官”系统调用(System Call)是内核向用户空间提供的有限接口...
我的 Linux 学习计划书
一、为什么是 Linux?参考 鸟叔讲 Linux、品读 Linux 0.11 核心代码 等资源。 二、我的学习目标:「能用」-->「掌控」避免成为「命令背诵者」,目标分阶段实现: 短期(1-3 个月):独立完成 Linux 服务器日常操作,编写可复用 Shell 脚本。 中期(3-6 个月):掌握系统调优、服务部署,解决 80% 常见故障。 长期(6 个月 +):形成「Linux 思维」,从底层逻辑定位问题根源。 三、分阶段执行计划:拆解「大目标」为「每日动作」阶段一:打基础(第 1-4 周)—— 建立操作直觉核心任务是理解操作底层逻辑,主攻文件系统、权限管理等模块。每日投入 1.5 小时,学习时避免贪多,如学 grep 先掌握 -i、-n、-r 基础参数。 阶段二:练实战(第 5-8 周)—— 从「操作」到「解决问题」每日投入 2 小时,跟随鸟叔课程实践,用博客记录 Shell 自动化、日志分析等模块心得。按课程流程完成项目,整理 Markdown 笔记,记录问题与解法。 阶段三:深扎根(6 个月后)—— 形成「技术自洽」通过读工具源码(如 grep 的 co...
Linux:从极客玩具到全球技术基石的传奇之路
引言如果说现代计算机的世界是一片浩瀚的海洋,那么Linux无疑是其中最汹涌的浪潮之一。它不仅打破了Windows与Unix长期垄断操作系统的格局,更以“开源”为旗帜,重塑了全球软件开发的协作模式。今天,我们将沿着时间线,从Unix的诞生说起,一步步揭开Linux如何从一个芬兰学生的“个人实验”,成长为支撑云计算、AI、移动设备的核心技术。 一、土壤:Unix与自由软件运动的萌芽(1960s-1990年代初)1.1 Unix的诞生:从“太空旅行”游戏开始的革命故事要从1969年的贝尔实验室说起。那时的计算机还是“庞然大物”,程序员需要通过打孔卡输入指令,等待数小时才能得到结果。为了改变这种低效,贝尔实验室、MIT和通用电气联合启动了Multics计划(多路信息计算系统),目标是让大型主机同时支持300多个终端——这在当时堪称“科幻级”设想。 但Multics项目因资金和技术复杂度过高,1969年贝尔实验室选择退出。不过,参与项目的工程师肯·汤普森(Ken Thompson)却从中获得灵感。为了在闲置的PDP-7小型机上玩自己开发的“太空旅行”游戏,他用汇编语言写了一个简化版操作系统...
从进程调度到分布式系统的并发控制(Operating-Systems)
操作系统学习概念、功能和目标进程管理基础存储管理概述文件系统I/O管理操作系统
从逻辑门到多核CPU的硬件(Computer-Organization)
计算机组成学习计算机系统概论数据的表示和运算系统总线概念指令系统概述CPU的功能和基本结构总线概述I/O系统基本概念计算机组成计算机系统概论数据的表示和运算系统总线概念指令系统概述CPU的功能和基本结构总线概述I/O系统基本概念
主题修改记录
二零二五年 二月一日 Hexo 主题封面大改造:从失效链接到宫崎骏风 AI 图这篇主题修改的文章好多年不打开了(其实大部分博客都不怎么重新修正,反正是写给自己的),年久失修,许多封面图片链接失效,只剩破碎图标。为重塑博客风采,假借藏书之家,拜谢AI大人,统一更换封面(全用本地图片改起来还好,但终归让人头秃) 二零二二年 六月十一日 Hexo Butterfly主题整体结构解析1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980...
Hello World 系统化学习之旅
🌟Welcome to My Technical Diary This is my first vlog! I’ll use this blog to document my journey from learning C to mastering Go (Golang). Over time, I hope to share insights, code snippets, and lessons learned along the way. Let's engineer our way from "Hello World" to production-grade systems! 🧭 Navigation System Overview123456789Home (Landing Page)- Daily progress reports | Technical retrospectives Tech Stack Panel (Sidebar)- **Tag Cloud**: `#Go` `#C` *(Click tags to f...

