Linux
未读写在最前一、Linux 指令的本质与执行逻辑
指令与可执行程序的关系
指令即程序:用户输入的指令(如 ls、cp)本质是 可执行程序或脚本,以文件形式存储在系统路径中(如 /bin、/usr/bin)。
位置依赖:指令执行前需在系统预设路径(由 $PATH 环境变量定义)中查找对应文件。若未找到,提示 command not found。
指令执行流程
查找与验证:系统按 $PATH 路径顺序搜索可执行文件,并检查文件权限(需具备可执行权限)。
执行过程:找到文件后,操作系统加载程序至内存运行,用户通过命令行解释器间接与内核交互。
二、核心设计哲学:Linux 下一切皆文件
抽象统一性
硬件设备抽象为文件:
显示器:通过 fwrite 写入数据(如 echo "Hello" > /dev/tty)。
键盘:通过 fread 读取输入(如 cat /dev/input/eventX)。
统一操作接口:无论是硬件设备(如显示器、键盘)还是普通的文件,都可以通过文件操作进行读 read()、写 write() 等系统调用,简化编程与设 ...
C++ 模板概述在 C++ 中,模板(Template)是一个非常强大的特性,它可以让我们编写与特定数据类型无关的代码,最终由编译器根据实际的类型生成特定的代码。模板主要分为两类:函数模板 和 类模板。模板的引入大大增强了 C++ 语言的灵活性和代码复用性,减少了重复代码的编写。
1. 为什么需要模板?假设你想编写一个通用的函数来交换两个变量的值。最初,你可能会想到通过函数重载来实现,例如:
123456789101112131415161718192021void Swap(int& left, int& right){ int temp = left; left = right; right = temp;}void Swap(double& left, double& right){ double temp = left; left = right; right = temp;}void Swap(char& left, char& right){ ...
C/C++内存管理C/C++内存分布问题引入:
1234567891011121314151617181920212223242526272829int globalVar = 1;static int staticGlobalVar = 1;void Test(){ static int staticVar = 1; int localVar = 1; int num1[10] = { 1, 2, 3, 4 }; char char2[] = "abcd"; const char* pChar3 = "abcd"; int* ptr1 = (int*)malloc(sizeof(int) * 4); int* ptr2 = (int*)calloc(4, sizeof(int)); int* ptr3 = (int*)realloc(ptr2, sizeof(int) * 4); free(ptr1); free(ptr3);}1. 选择题:选项 : A.栈 B.堆 C.数据段(静态区 ...
Linux
未读操作系统(OS)的基础概念操作系统是计算机硬件和软件之间的中介,它负责管理计算机硬件资源并为应用程序提供一个运行环境。简单来说,操作系统的目标是使计算机变得更好用。它使得硬件的复杂性对用户透明,提供更高效的资源管理,并使应用程序能够正常运行。
1. 操作系统的层次结构操作系统通常由多个层次构成,每一层提供不同的功能:
硬件层(硬件) 这是计算机的基础物理部分,包括 CPU、内存、硬盘、显示器、键盘等。硬件直接提供计算和存储资源。
设备驱动层 这一层负责控制和管理硬件设备,如声卡、显卡、打印机等。操作系统通过设备驱动程序与硬件进行通信,确保硬件的正常运行。
操作系统层 这一层是操作系统的核心部分,负责管理硬件资源,调度进程,提供文件管理、内存管理等基本功能。常见的操作系统包括 Windows、Linux、macOS 等。
应用软件层 最顶层是应用软件,它包括各种应用程序,如 Word、Matlab 等。用户通过这些软件与计算机互动,完成各种任务。
2. 操作系统的功能
资源管理 操作系统需要高效管理计算机的资源,如 CPU 时间、内存、磁盘存储等。它通过调度算法分配资源,确保每个进程 ...
在 Linux 系统中管理用户账户:创建、设置密码及删除操作1. 创建新用户在 Linux 系统中,我们可以使用 adduser 或 useradd 命令来创建新用户。推荐使用 adduser 命令,因为它相对简单,且可以交互式地引导你完成用户创建过程。
创建新用户命令:1adduser 用户名
这里,用户名 是您自定义的用户名称。假设我们要创建一个名为 friend 的新用户,那么命令应该是:
1adduser friend
执行该命令后,系统将自动创建一个新的用户账户。具体操作步骤如下:
在 /home 目录下为该用户创建一个子目录(即 home/friend)。
配置默认的 shell(通常是 /bin/bash)。
创建该用户的相关信息文件,并将用户信息记录到 /etc/passwd 文件中。
示例输出:1[root@server]# adduser friend
执行该命令后,系统会创建新用户,并在终端中显示相关信息。
2. 为新用户设置密码在创建新用户后,我们需要为该用户设置一个密码。可以使用 passwd 命令来设置用户密码。
设置密码命令:1passwd 用户 ...
Linux 环境搭建全解析:从历史到实践Linux 作为开源操作系统,已经成为了当今信息技术领域的重要组成部分。无论是服务器、桌面,还是嵌入式设备,Linux 的身影几乎无处不在。那么,Linux 究竟是如何发展而来的?它又是如何在当今的技术世界中占据一席之地的?本篇博客将从 Linux 的历史背景出发,逐步讲解如何在 Linux 环境下进行开发与管理,最后提供具体的 Linux 环境搭建教程。
一、Linux 的起源与发展1.1 UNIX 的历史背景
在深入探讨 Linux 之前,我们需要了解它的前身——UNIX。UNIX 的诞生始于 1969 年,由 AT&T 贝尔实验室的 Ken Thompson 和 Dennis Ritchie 等人开发。最初,UNIX 被设计为一种多任务、多用户的操作系统,能够有效地支持科研工作。UNIX 继承了当时 Multics 操作系统的部分思想,但它的设计更加简洁和高效,这使得 UNIX 逐渐成为主流操作系统之一。
随着 UNIX 的逐步发展,不同的版本也相继诞生,包括伯克利软件发行版(BSD)和 System V。这两个版本代表了 UNIX ...
C++
未读1. 再谈构造函数在面向对象编程中,构造函数 是一种特殊的成员函数,它在对象创建时自动调用,负责初始化对象的成员变量(创建对象时赋初值),确保对象在创建时有一个有效的状态。接下来,我们将详细讲解关于构造函数的几个重要概念。
1.1 构造函数体赋值当我们创建一个对象时,构造函数会被自动调用,用来给对象的各个成员变量提供一个初始值。例如:
123456789class MyClass{public: int a; MyClass() { a = 10; // 这里是构造函数体中的赋值操作 }};
在这个例子中,构造函数的作用是将 a 赋值为 10。然而,这里要注意,构造函数体中的赋值操作和初始化是有区别的。构造函数体中对成员变量的赋值只能算是给成员变量“赋初值”,而不是“初始化”。因为初始化是指给成员变量设置一个初始值,而且初始化只能发生一次,而赋值操作可以发生多次。
再例如:
12345678910111213class A{ int _x;public: A(int x) ...
C++
未读1. 类的 6 个默认成员函数默认成员函数的含义: 即使一个类什么都不写,编译器也会默认生成 4 以下个成员函数:
默认构造函数(初始化对象时调用)。
拷贝构造函数(用已有对象创建新对象时调用)。
析构函数(对象生命周期结束时调用)。
赋值运算符重载(用 = 赋值时调用)。
可以直接使用的操作符:
取地址操作符 &。
常量取地址操作符 const &。
代码示例:
12345678910111213141516#include <iostream>using namespace std;class Example{ // 空类,未显式定义任何成员函数};int main(){ Example e1; // 调用默认构造函数 Example e2 = e1; // 调用拷贝构造函数 Example* ePtr = &e1; // 调用取地址操作符 return 0; // 在程序结束时,e1 和 e2 调用析构函数}
传道解惑:Q1:e ...
C++
未读一、本节目标
面向过程和面向对象初步认识
类的引入
类的定义
类的访问限定符及封装
类的作用域
类的实例化
类的对象大小的计算
类成员函数的 this 指针
二、面向过程和面向对象初步认识(过程与面向对象编程)面向过程编程(ProceduralProgramming):
关注“过程”或“步骤”。
将问题分解为函数,每个函数执行一个特定的任务。
主要依赖函数调用,常见于 C 语言。
12345678910111213#include <stdio.h>// 面向过程编程: 通过函数处理数据void process(int data){ printf("Processing data: %d\n", data);}int main() { int data = 42; process(data); return 0;}
面向对象编程(Object-OrientedProgramming):
关注“对象”,将数据与操作数据的方法结合。
通过对象之间的交互解决问题,常见于 C++。
12 ...
Obsidian
未读在 Obsidian 最新版中,正反向链接、标签和属性是核心功能,用于构建知识网络、分类管理及添加
一、正反向链接功能
正向链接(出链):当前笔记中主动引用其他笔记或段落。
反向链接(入链):其他笔记引用当前笔记时自动生成的反向关联。
作用:形成双向知识网络,通过链接关系追溯相关内容。
使用方法
基础语法:
1234[[目标笔记名]] # 链接到整篇笔记[[目标笔记名#标题]] # 链接到特定标题[[目标笔记名#^段落ID]] # 链接到具体段落(块)[[目标笔记名|别名]] # 使用别名显示链接
操作提示:
输入 [[ 后,Obsidian 会自动提示可链接的笔记。
支持嵌入内容(如图片、视频):![[图片名.png]]。
段落块 ID 可通过光标悬停段落时点击「复制块链接」获取。
查看反向链接: 在右侧面板或笔记底部查看「反向链接」,显示所有引用当前笔记的位置。
二、标签功能
分类管理:通过 #标签 对笔记进行主题或属性标记。
嵌套标签:支持层级结构(如 # ...