高效码农

撰写、分享国内外先进的IT技术

分类 Linux 下的文章

August 1, 2024

Git Commit 多次 只保留最后一次Commit 提价到远端仓库Push

使用 Git 的交互式 rebase 功能。以下是具体步骤:1. 查看提交历史首先,使用以下命令查看提交历史,确定要压缩的提交范围。git log2. 交互式 rebase假设你想要将最后 3 次提交压缩成一次,你可以使用以下命令:git rebase -i HEAD~3这会打开一个文本编辑器,显示最近的 3 次提交。编辑器中的内容类似于:pick f7f3f6d Change A pick...
March 11, 2024

现代 Git 命令和功能

我们所有人(软件工程师)每天都会使用,git但大多数人只接触过最基本的命令,例如add、commit或,就像 2005 年一样。push`pull`然而,Git 从那时起引入了许多功能,使用它们可以让您的生活变得更加轻松,所以让我们探索一些git您应该了解的最近添加的现代命令。switch自 2019 年以来的新功能,或者更准确地说,引入了 Git 版本 2.23,git switch我们可...
November 28, 2023

IPC - Unix 信号

在上一篇文章中,我们介绍了Unix Socket以及如何使用它进行进程间通信。本文讨论一种不同且有限的 IPC 形式。在我们研究过的 IPC 机制和大多数其他机制中,当应用程序进程向另一个应用程序进程发送消息时,接收进程将根据收到的消息采取操作。该消息很可能是一个字节或一组字节。需要解析和检查这些字节以确定要采取的适当操作。要采取的操作可能是调用函数或执行程序表达式。有时,由于应用程序进程收...
November 27, 2023

IPC - Unix 域套接字

在上一篇文章中,我们讨论了命名管道机制来实现进程间通信。本文将介绍另一种称为 Unix 域套接字的内容。套接字是 Unix 网络的抽象。当我们想到网络时,我们会想到沟通。构成互联网的工具主要涉及创建和维护计算机之间的通信管道。我们的操作系统提供了其中一些工具。既然这些都是通信工具,那么如果我们可以使用操作系统提供的一些高质量且可靠的工具来使进程能够相互聊天呢?好消息!事实证明它确实存在,这就...
November 26, 2023

IPC-命名管道

在上一篇文章中,我们介绍了进程间通信及其不同的机制。我们将从第一个命名管道或 FIFO 文件开始!命名管道是一种建立在匿名管道结构之上的机制。您的常规 Unix 管道实际上是匿名管道。要了解命名管道,我们需要了解匿名管道。匿名管道匿名管道是由内核创建和维护的内存缓冲区。该缓冲区有两个文件描述符用于引用它,一个用于读取,另一个用于写入。read您可以使用带有write适当描述符的系统调用来读取...
November 25, 2023

IPC-消息队列

消息队列有两种类型的消息队列 - System V 和 POSIX。它们之间有很多相似之处,也有细微的差别。本文重点介绍 System V,因为它是受更广泛支持的类型。简单来说,消息队列是消息的链接列表。操作系统可以维护多个已发送消息的列表,每个列表都由唯一的整数标识符引用。消息通过附加到列表来发送,并通过从列表头部弹出来接收。该列表由操作系统内核管理并存储在内存中。列表的内存存储允许异步通...
November 24, 2023

IPC - 简介

您是否想过两个进程如何在一台设备中进行通信?我猜您想到了使用文件 I/O API 的文件[1],是的,这可以工作,但是在将数据写入受监视文件时发出警报会涉及一定程度的复杂性。您也可以想到网络,这也是可行的。但这将涉及选择端口和设置所有网络恶作剧。所以我们消除了文件 I/O 和网络。我们还能如何让两个进程进行通信呢?在讨论“如何”之前,我们先来谈谈“什么”。两个进程通信意味着什么?这叫什么?这...
September 8, 2023

第五章:计算机中的翻译器

到目前为止,每次我谈到阅读和写作记忆时都有点空洞。例如,ELF 文件指定要加载数据的特定内存地址,那么为什么不同进程尝试使用冲突内存时不会出现问题呢?为什么每个进程似乎都有不同的内存环境?另外,我们到底是怎么到这里的?我们知道这execve是一个用新程序替换当前进程的系统调用,但这并不能解释如何启动多个进程。它绝对没有解释第一个程序是如何运行的——哪只鸡(进程)产下(产卵)所有其他鸡蛋(其他...
September 3, 2023

第四章:ELF

我们现在已经非常了解了execve。在大多数路径的末尾,内核将到达包含要启动的机器代码的最终程序。通常,在实际跳转到代码之前需要一个设置过程 - 例如,程序的不同部分必须加载到内存中的正确位置。每个程序需要不同数量的内存来处理不同的事情,因此我们有标准文件格式来指定如何设置要执行的程序。虽然 Linux 支持许多此类格式,但迄今为止最常见的格式是ELF(可执行和可链接格式)。记号笔在纸上画画...
September 2, 2023

第三章:程序运行

到目前为止,我们已经介绍了 CPU 如何执行从可执行文件加载的机器代码、什么是基于环的安全性以及系统调用如何工作。在本节中,我们将深入了解 Linux 内核,首先了解程序是如何加载和运行的。我们将专门研究 x86-64 上的 Linux。为什么?Linux 是一款功能齐全的生产操作系统,适用于桌面、移动和服务器用例。Linux 是开源的,因此只需阅读其源代码就可以非常容易地进行研究。我将在本...
September 1, 2023

第二章:多任务处理

假设您正在构建一个操作系统,并且希望用户能够同时运行多个程序。不过,您没有精美的多核处理器,因此您的 CPU 一次只能运行一条指令!幸运的是,您是一位非常聪明的操作系统开发人员。您发现可以通过让进程轮流使用 CPU 来伪造并行性。如果您循环遍历这些进程并运行每个进程中的几条指令,那么它们都可以响应,而不会出现任何单个进程占用 CPU 的情况。但是如何从程序代码中夺回控制权来切换进程呢?经过一...
August 31, 2023

第一章:基础知识

在撰写本文时,让我一次又一次感到惊讶的一件事是计算机是多么简单。我仍然很难不让自己感到兴奋,期待比实际存在的更复杂或抽象!如果在继续之前你应该记住一件事,那就是一切看似简单的事情实际上就是那么简单。这种简单性非常美丽,但有时又非常非常令人讨厌。让我们从计算机的核心工作原理开始。计算机是如何设计的计算机的中央处理单元(CPU)负责所有计算。这是大奶酪。沙赞阿拉卡布拉姆。当你启动计算机时,它就会...
August 31, 2023

计算机上运行程序时到底会发生什么

从头开始……我用计算机做了很多事情,但我的知识始终有一个空白:当你在计算机上运行程序时到底会发生什么?我思考了这个差距——我拥有大部分必需的低级知识,但我正在努力将所有内容拼凑在一起。程序真的是直接在 CPU 上执行吗,还是另有原因?我使用过系统调用,但它们是如何工作的?它们到底是什么?多个程序如何同时运行?我崩溃了,开始尽可能多地思考。如果您不上大学,那么综合的系统资源并不多,因此我必须筛...
November 24, 2021

Git 使用常用报错汇总

环境介绍托管系统为:Gitolite - 轻量级的 Git 代码托管系统客户端Git版本:2.34.0服务端Git版本:1.9.0Git操作报错无论是提交还是拉取都会报错,报错如下:Unable to negotiate with 服务器IP port 22: no matching host key type found Their offer: ssh-rsa, ssh-dss fata...