![](https://img-blog.csdnimg.cn/20190927151117521.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
linux生态
从计算机操作系统、组成原理、计算机网络、计算机数据结构相关知识点记录
hhggggghhh
大龄程序员
展开
-
建立在cpu 基础之上的内核-聊聊cpu
软件都是建立在硬件的基础之上,这个硬件在我们这里就是cpu、内存、硬盘、键盘、屏幕等等,而至关重要的则是cpu——这个核心中的核心。原创 2022-06-05 07:53:16 · 675 阅读 · 2 评论 -
Linux 0.11 vscode + gdb调试环境搭建(ubuntu 18.04.4 LTS )
这个过程耗费了好多天,最后自己才解决。参考文章参考的文章链接是相关文章环境服务器安装的系统版本如下:NAME="Ubuntu"VERSION="18.04.4 LTS (Bionic Beaver)"ID=ubuntuID_LIKE=debianPRETTY_NAME="Ubuntu 18.04.4 LTS"VERSION_ID="18.04"HOME_URL="https://www.ubuntu.com/"SUPPORT_URL="https://help.ubuntu.com原创 2022-05-21 18:53:42 · 999 阅读 · 1 评论 -
vscode查看版本diff或者tag之间的diff
背景在相关项目学习中,有的项目功能是逐步迭代的,如何方便的查看不同版本之间的功能diff,通过vscode的githd功能,可直观看到具体的修改在哪里。插件Git History Diff使用选择文件、或者文件夹右键单击,看到下方的diff功能选择想要diff的代码,一般就是跟之前的代码进行对比然后就能看到该版本跟上一个版本的具体差别在哪里,可以说非常的好用总结用这种工具来分析代码真是一种享受...原创 2022-05-15 09:20:09 · 3708 阅读 · 0 评论 -
MacBook vscode qemu gdb 调试ucore 代码
安装相应的软件安装vscode安装c++ 插件安装qemu brew install qemu安装交叉编译环境 brew install i386-elf-gcc i386-elf-binutils下载代码ucore 分功能代码根据readme 和 git tag 可查看配置调试参数{ "version": "0.2.0", "configurations": [ { "name": "(gdb) Launch",原创 2022-05-15 09:11:57 · 483 阅读 · 1 评论 -
汇编语言中的端口和网络端口区别
1:不是一个概念。你说的那个PC系统中,CPU最多可以定位64K端口中的“端口”是IO端口,这个是X86 CPU中的一个概念,是为了使CPU能够访问外部设备中的寄存器而存在的指令,是CPU指令集的一部分。而后面的ftp http中的端口,纯粹是TCP/IP协议的东西,是纯软件层的东西。2:不知道智能机如何看,如果root了,并且装了防火墙,防火墙里应该可以看到。如果能搞到机器的shell的话,应该也有命令可以看,比如netstat之类的,但我没有试过……...原创 2021-11-13 17:39:34 · 2538 阅读 · 0 评论 -
vmware共享文件夹不生效修复办法
sudo vmhgfs-fuse .host:/ /mnt/hgfs/ -o allow_other -o uid=1000原创 2021-11-07 09:27:49 · 1606 阅读 · 0 评论 -
linux ubuntu 20.04安装epbf bcc 工具包
这个工具包可真不好安装,费了好大的功夫,而且折腾了好几个版本的操作系统才弄好。首先我也不推荐用命令行安装的方式安装,简直太坑了,一方面有时候找不到对应的版本,有时候就算是安装好了,但是用的时候又说BPF模块无法编译首先下载ubuntu 20.04 镜像ubuntu 20.04 阿里云然后把系统安装好通过源码对bcc工具包进行编译安装VER=trustyecho "deb http://llvm.org/apt/$VER/ llvm-toolchain-$VER-3.7 maindeb-src原创 2021-11-06 17:30:24 · 3663 阅读 · 2 评论 -
操作系统真象还原第四章保护模式
原创 2021-08-28 17:30:22 · 123 阅读 · 0 评论 -
操作系统真象还原第二章基础知识整理
BIOS 基本输入输出系统0xF0000~0xFFFFF,这 64KB 的内 存是 ROM。这里面存的就是 BIOS 的代码。BIOS 的主要工作是检测、初始化硬件,怎么初始化的?硬件自己提 供了一些初始化的功能调用,BIOS 直接调用就好了。BIOS 还做了一件伟大的事情,建立了中断向量表,这样 就可以通过“int 中断号”来实现相关的硬件调用,当然 BIOS 建立的这些功能就是对硬件的 IO 操作,也就是输 入输出,但由于就 64KB 大小的空间,不可能把所有硬件的 IO 操作实现得面面俱到,而且也没原创 2021-08-28 12:04:33 · 197 阅读 · 0 评论 -
操作系统真象还原第二章实验及学习
实验操作步骤具体过程链接https://github.com/huang1125677925/os/tree/main/c2/a过程具体分析启动盘制作过程nasm -o mbr.bin boot/mbr.S dd if=./mbr.bin of=disk.img bs=512 count=1 conv=notruncNetwide Assembler (简称 NASM)是一款基于英特尔 x86 架构的汇编与反汇编工具。它可以用来编写16位、32位(IA-32)和64位(x86-64)的程序原创 2021-08-28 10:48:37 · 194 阅读 · 0 评论 -
kali系列——镜像快速下载源
清华kali下载源速度非常快原创 2021-05-05 21:40:56 · 1525 阅读 · 0 评论 -
linux批量修改文件名-多种方法
前言不得不说,linux可真是博大精深,命令非常多,每个命令的用法也非常多使用rename命令批量修改文件名比如我想修改这些文件名,把10之前的部分都给去掉rename 's/截屏2020-12-08 上午//g' *就这样就完事了使用mv命令批量修改文件名文件如上所示MY_SAVEIFS=$IFS #my_saveifs 这个是bash默认的分割符号,因为我这个文件名字中间有空格,所以需要修改一下这个默认分割符,否则的话会把一个文件看成两个文件原创 2020-12-08 16:12:21 · 11622 阅读 · 1 评论 -
使用sed对文件指定行内容修改或者行前后增加内容
注解由于我是在MacBook上操作sed的,和linux上的sed不大一样所以我在MacBook上使用的是gnu-sed,这个和Linux上是一样的所以该记录中的用法在linux上也能使用sed 的参数意义-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过 sed 特殊处理的那一行(或者动作)才会被列出来。-e :直接在命令行界面上进行 sed 的动作编辑;-f :直接将 sed 的动作写在原创 2020-12-08 15:55:16 · 6273 阅读 · 0 评论 -
bash终端提示符颜色配置
配置颜色好处能够清晰有层次感的看到显示结果适用于什么系统机器MacBook Linux 类Unix系统配置方法在~/.bash_profile中写入配置文件配置提示符配置终端提示符颜色:export PS1='\[\033[01;36m\]\u@\h\[\033[01;32m\] \W\$\[\033[00m\] '颜色:默认 : \e[00m 黑色 : \e[01;30m 红色 : \e[01;31m 绿色 : \e[01;32m 黄色 : \e[01;33m 蓝色 : \e原创 2020-12-07 22:03:13 · 2209 阅读 · 0 评论 -
Linux命令(65)——ld命令
命令简介ld命令是二进制工具集GNU Binutils的一员,是GNU链接器,用于将目标文件与库链接为可执行程序或库文件。命令格式ld [options] <objfile...>选项说明-b <input-format>:指定目标代码输入文件的格式-Bstatic:只使用静态库-Bdynamic:只使用动态库-Bsymbolic:把引用捆绑到共享库中的全局符号-c <MRI-commandfile>,--mri-script=<MRI-comm转载 2020-11-26 10:25:59 · 836 阅读 · 0 评论 -
MacBook 上安装bochs并写一个操作系统——使用汇编打印闪烁字符
按照《操作系统真相还原》上的说法,其实验环境需要在电脑上安装虚拟机,然后在虚拟机上跑bochs但是我非常不喜欢这种做法,还是在自己电脑上玩最爽快,所以使用MacBook安装bochs,并且搞个实验环境安装bochsbrew install bochs做一个简单实验按照书上说需要设置gdbstub,但是经过我的实验和相关查询,在MacBook上不需要设置这个选项,因为好像可以直接使用MacBook的本地gdb写一个汇编代码文件SECTION MBR vstart=0x7c00原创 2020-11-24 23:57:41 · 1343 阅读 · 0 评论 -
awk 一行变多行实践
方法一echo $PATH | awk 'BEGIN{FS=":"}{for(x=1;x<=NF;x++){print $x}}' awk规定,对于文本文件,默认情况下,一条记录对应一行,即记录之间的默认分隔符是换行符;而一条记录又可以分为多个字段,默认字段分隔符为空格。FS:Field Separator,字段分隔符/usr/local/opt/binutils/bin/opt/local/bin/opt/local/sbin/usr/local/bin/usr/local/sbi原创 2020-10-31 00:21:10 · 2650 阅读 · 0 评论 -
unix/linux下~/.vimrc 和/etc/vimrc关系
在unix下是/etc/vimrc在linux下是 /etc/vim/vimrc个人主目录home 下是.vimrc二者的区别是一个是全局设置,一个是只是在自己用户下对指定的bash进行设置原创 2020-10-08 10:18:24 · 594 阅读 · 0 评论 -
unix 下删除指定前缀中部分文件
删除rm `ls /usr/local/bin/jupyter* | grep -v "jupyter-notebook"`查看效果ls /usr/local/bin/jupyter* | grep -v "jupyter-notebook"参考文档原创 2020-10-08 10:06:46 · 257 阅读 · 0 评论 -
IO同步、异步、阻塞、非阻塞,他们的区别是什么?
首先我们来看阻塞和非阻塞 I/O。根据应用程序是否阻塞自身运行,可以把 I/O 分为阻塞 I/O 和非阻塞 I/O。所谓阻塞 I/O,是指应用程序在执行 I/O 操作后,如果没有获得响应,就会阻塞当前线程,不能执行其他任务。所谓非阻塞 I/O,是指应用程序在执行 I/O 操作后,不会阻塞当前的线程,可以继续执行其他的任务。再来看同步 I/O 和异步 I/O。根据 I/O 响应的通知方式的不同,可以把文件 I/O 分为同步 I/O 和异步 I/O。所谓同步 I/O,是指收到 I/O 请求后,系统不原创 2020-10-07 14:20:45 · 398 阅读 · 0 评论 -
类unix系统中文件和目录读写执行权限的实际意义
r(Read,读取):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录的权限。w(Write,写入):对文件而言,具有新增,修改,删除文件内容的权限;对目录来说,具有新建,删除,修改,移动目录内文件的权限。x(eXecute,执行):对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限——cd。 新建文件默认权限777,新建目录默认权限666。在unix或者linux中,每创建一个文件或者目录时,这个文件或者目录都具有一个默认的权限,比如目录755,文件644原创 2020-10-07 10:58:56 · 630 阅读 · 0 评论 -
linux命令vmstat以及Linux块大小查看
vmstat - Report virtual memory statistics# 每隔1秒输出1组数据$ vmstat 1procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----r b swpd free buff cache si so bi bo in cs us sy id wa st0 0 0 7743608 1112原创 2020-10-07 10:05:56 · 469 阅读 · 0 评论 -
磁盘和文件的区别
磁盘是一个块设备,可以划分为不同的分区;在分区之上再创建文件系统,挂载到某个目录,之后才可以在这个目录中读写文件。 其实 Linux 中“一切皆文件”,而文章中提到的“文件”是普通文件,磁盘是块设备文件,这些大家可以执行 “ls -l <路径>” 查看它们的区别(输出的含义如果不懂请 man ls 查询)。 在读写普通文件时,会经过文件系统,由文件系统负责与磁盘交互;而读写磁盘或者分区时,就会跳过文件系统,也就是所谓的“裸I/O“。这两种读写方式所使用的缓存是不同的,也就是文中所讲的 Cache原创 2020-10-07 09:48:53 · 2408 阅读 · 0 评论 -
vim 语言自动跳转
在项目下执行ctags -Radd this to .vimrc file set tags=tags;/This will check the current folder for tags file and keep going onedirectory up all the way to the root folder.So you can be in any sub-folder in your project and it’ll be able tofind the tags f原创 2020-09-26 09:03:27 · 147 阅读 · 0 评论 -
macbook 编写操作系统——前置知识
交叉编译器—— i386-elf-gcc你不可能在一台“裸机”上进行开发,所以你需要在自己的机器(host)上写你的操作系统,然后让编译器将源代码编译成目标机器(guest)上运行的代码。这样的“跨平台”编译则需要交叉编译器(Cross Compiler)的支持,GCC就是一个非常好的交叉编译器!选定了GCC之后,我们还需要选择具体GCC的目标架构!例如如果我们希望我们地操作系统运行在ARM CPU上和运行在Intel 386架构上的GCC版本是不一样的(因为CPU所支持的指令集不一样)。我们这里.原创 2020-09-25 16:04:12 · 471 阅读 · 0 评论 -
清华操作系统ucore学习过程中参考文档
1、linux tools quick tutorial2、make 学习文档原创 2020-09-25 11:38:39 · 341 阅读 · 0 评论 -
macos - 升级到macOS Catalina后Qemu没有响应
将Mac升级到Catalina之后,我无法再使用qemu。每当我尝试启动它时,它就会挂起。 qemu窗口处于活动状态时,菜单栏也没有响应。运行qemu-system-i386 --help确实可以。Qemu版本:4.1.0编辑:通过-nographic可以解决此问题。参考资料...原创 2020-09-25 11:31:24 · 480 阅读 · 0 评论 -
ucore操作系统学习与实践lab1练习1makefile文件学习
变量PROJ := challenge#第一种定义方式,如果使用到了变量,只能使用该行之前定义的变量proj = challenge#第二种定义方式,如果使用到了变量,可以使用该行之后定义的变量all: echo $(PROJ) echo $(proj)函数foreach 函数foreach函数和别的函数非常的不一样。因为这个函数是用来做循环用的,Makefile中的foreach函数几乎是仿照于Unix标准Shell(/bin/sh)中的for语句,或是C-Shell(/bin/cs原创 2020-09-24 20:07:02 · 338 阅读 · 0 评论 -
ucore 操作系统学习与实践01 ——关于实验环境
我搭建环境失败了无论是linux 还是MacBook上我对lab1运行代码都出现了问题,而且我也无法定位到问题具体是因为什么;在整个实验代码中,对makefile 以及kern.img的生成过程,我都是不了解的,但是如果因为自己搭建环境失败就放弃继续学习的话,那永远都无法进入下一步了,最后在折腾了一天之后,我看到实验楼中有免费的实验环境可以用,这对我非常重要我不管别人怎么说吧,有了可以实践的环境,我就可以把精力放在课程本身上了,而不是头要炸了一般去思考为什么我的key map en-us文件无法原创 2020-09-24 18:25:52 · 301 阅读 · 0 评论 -
TCP连接有哪些状态
syn-sentlistensyn-rcvdestab-listedfin-wait-1fin-wait-2close-waittime-waitlast-ack原创 2020-09-18 10:31:21 · 414 阅读 · 0 评论 -
关于rssi解释
因为最近在家里,我家里的无线又被我爸妈给关掉了,但是我又需要用网络,所以,大家懂得,学习一下关于网络的知识为什么无线信号(RSSI)是负值答:其实归根到底为什么接收的无线信号是负值,这样子是不是容易理解多了。因为无线信号多为mW级别,所以对它进行了极化,转化为dBm而已,不表示信号是负的。1mW就是0dBm,小于1mW就是负数的dBm数。弄清信号强度的定义就行了:RSSI(接收信号强度)R...原创 2020-01-27 17:34:21 · 1961 阅读 · 0 评论 -
三角形坐标公式求面积
答:有。在平面解析几何会学到,即:设A(x1,y1),B(x2,y2),C(x3,y3)由A–>B–>C–>A 按逆时针方向转。(行列式书写要求)设三角形的面积为S则S=(1/2)(下面行列式)|x1 y1 1||x2 y2 1||x3 y3 1|S=(1/2)(x1y21+x2y31+x3y11-x1y31-x2y11-x3y21)即用三角形的三个顶点坐标求其...原创 2019-09-01 23:43:29 · 4072 阅读 · 0 评论 -
二叉树的层次遍历 II----递归和迭代
给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其自底向上的层次遍历为:[ [15,7], [9,20], [3]]递归class Solution(object)...原创 2019-08-10 08:29:48 · 1090 阅读 · 0 评论 -
寻找重复的子树——回溯和递归
给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。两棵树重复是指它们具有相同的结构以及相同的结点值。示例 1: 1 / \ 2 3 / / \4 2 4 / 4下面是两个重复的子树: 2 /4和4因此,你需要以列表的形式返回上述重复子树的根结点。其实,这种树类的题,我最搞不懂...原创 2019-08-09 23:04:46 · 417 阅读 · 0 评论 -
IP经过路由器都发生了什么
IP数据包到路由器之后,它首先要读去IP包头的目标IP地址,然后查看路由表,根据路由协议算法,确定一条最佳的路径,为什么要这样做呢,那是因为要确定这个数据包应该从路由器上的那个接口上转发出去,很明显路由的每一条可用的路由都和路由嚣上的接口是对应的,就这样一个数据包就离开了这个路由器。事情就是这样。看见楼上有一个不太正确的说法,IP数据包头里的源IP和目标IP都不会被改变,如果改变数据包不可能到达或...转载 2019-08-08 19:28:34 · 3372 阅读 · 2 评论 -
mysql 交换工资——case when使用,if函数使用,字符串函数使用
给定一个 salary 表,如下所示,有 m = 男性 和 f = 女性 的值。交换所有的 f 和 m 值例如:idnamesexsalary1Am25002Bf15003Cm55004Df500运行你所编写的更新语句之后,将会得到以下表:idnamesexsalary1Af25002...原创 2019-08-05 16:17:43 · 211 阅读 · 0 评论 -
删除重复电子邮箱
编写一个 SQL 查询,来删除 Person 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。±—±-----------------+| Id | Email |±—±-----------------+| 1 | john@example.com || 2 | bob@example.com || 3 | john@example.co...原创 2019-08-05 15:28:41 · 302 阅读 · 0 评论 -
mysql---日期计算力扣题目
给定一个 Weather 表,编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 Id。±--------±-----------------±-----------------+| Id(INT) | RecordDate(DATE) | Temperature(INT) |±--------±-----------------±-----------------+...原创 2019-08-05 15:14:25 · 194 阅读 · 0 评论 -
mongodb distinct条件查询
db.item.distinct('itemId',{recordTime:{$gte:'2019-08-05 14:00:00'}}).length平常我们想要查某个指标有多少个不同的取值但是有的时候,我们还想要先对整体数据有一定选择之后再去执行distinct计算,上述方式就能够解决问题,值得注意的是,后边条件recordTime并没有双引号,否则就会报错官方distinct文档...原创 2019-08-05 14:32:40 · 23079 阅读 · 1 评论 -
mysql 多个条件
order 多个排序条件ORDER子句按一个或多个(最多16个)字段排序查询结果,可以是升序(ASC)也可以是降序(DESC),缺省是升序。ORDER子句通常放在SQL语句的最后。ORDER子句中定义了多个字段,则按照字段的先后顺序排序。SELECT ProductName,UnitPrice, UnitInStock FROM Products ORDER BY UnitInStock ...原创 2019-08-05 14:20:05 · 3607 阅读 · 0 评论