
Linux学习
文章平均质量分 88
boazheng
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
链接两个“名字完全一样“的【动态库】,你会怎么处理
【目录】在Linux应用的开发过程中,直接利用现成的第三方库(俗称:轮子)来完成自己的业务功能,是很常见的事情。不知道你是否遇到这样的场景:应用程序中需要使用两个动态库里的不同功能的函数,但是这两个动态库的作者发生心灵感应了,居然起了完全一样的动态库名字,这该如何是好?具体来说面对的问题是:在编译可执行程序的时候,通过gcc编译参数的-lXXX就可以动态链接一个动态库。但是,现在你想链接两个动态库,它们的名字是一样的!!怎么办?转载 2022-10-06 19:58:23 · 825 阅读 · 0 评论 -
详解Linux内核在arm上的启动过程
详解Linux内核在arm上的启动过程转载 2022-10-06 18:09:27 · 615 阅读 · 0 评论 -
Linux内核Page Cache和Buffer Cache关系及演化历史
在我们进行数据持久化,对文件内容进行落盘处理时,我们时常会使用fsync操作,该操作会将文件关联的脏页(dirty page)数据(实际文件内容及元数据信息)一同写回磁盘。这里提到的脏页(dirty page)即为页缓存(page cache)。块缓存(buffer cache),则是内核为了加速对底层存储介质的访问速度,而构建的一层缓存。他缓存部分磁盘数据,当有磁盘读取请求时,会首先查看块缓存中是否有对应的数据,如果有的话,则直接将对应数据返回,从而减少对磁盘的访问。转载 2022-10-06 17:45:45 · 321 阅读 · 0 评论 -
Linux 字节对齐的那些事
Linux 字节对齐的那些事最近遇到一个问题,运行于ARM上的threadx在与DSP通信采用消息队列的方式传递消息(最终实现原理是中断+共享内存的方式),在实际操作过程中发现threadx总是crash,于是经过排查,是因为传递消息的结构体没有考虑字节对齐的问题。随手整理一下C语言中字节对齐的问题与大家一起分享。一、概念对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就是自然对齐原创 2021-09-21 17:51:41 · 582 阅读 · 0 评论 -
Linux 修改 ELF 解决 glibc 兼容性问题
Linux glibc 问题相信有不少 Linux 用户都碰到过运行第三方(非系统自带软件源)发布的程序时的 glibc 兼容性问题,这一般是由于当前 Linux 系统上的 GNU C 库(glibc)版本比较老导致的,例如我在 CentOS 6 64 位系统上运行某第三方闭源软件时会报:[root@centos6-dev ~]# ldd tester./tester: /lib64/libc.so.6: version `GLIBC_2.17' not found (required by.转载 2021-02-16 07:26:53 · 2494 阅读 · 0 评论 -
为什么Linux内核常常用unsigned long来代替指针
本文目录不知道自己不知道!指针何时指针?指针何时是整数?物理地址是指针?模糊地带绝世好代码?昨天我犯了一个错误把指针和整数“混淆”的错误,幸得队友王童鞋指正,今早起床,我把这个心得花一点时间记录下来。大抵掌握一个技术或者知识都是这三个阶段: 不知道自己不知道; 知道自己不知道; 知道自己知道。 比较难突破的是“不知道自己不知道”的阶段,因为“不知道自己不知道”,所以才往往特别自信,觉得“老子天下第一”。基本上,本文要记录的一个小点,也...转载 2021-02-16 07:26:21 · 610 阅读 · 0 评论 -
一文讲透 “进程、线程、协程”
本文从操作系统原理出发结合代码实践讲解了以下内容: 什么是进程,线程和协程? 它们之间的关系是什么? 为什么说Python中的多线程是伪多线程? 不同的应用场景该如何选择技术方案? ... 什么是进程进程-操作系统提供的抽象概念,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。程序本身是没有生命周期的,它只是存在磁盘上的一些指令,程序一旦运行就是进程。当程序需要运行时,操作系统将代.转载 2021-02-15 08:11:35 · 150 阅读 · 0 评论 -
图解 | 数字签名和数字证书的前世今生
前言这是 2020 年一个平平无奇的周末,小北在家里刷着 B 站,看着喜欢的 up 主视频。在一旁玩手机的女朋友突然问”你知道数字证书是来干啥的不,为啥浏览器提示证书不可信?”你要问这个,那我可来劲了,于是乎从加密、数字签名一直讲到了数字证书。。。终于把女朋友讲睡着了,独自写下这篇文章。正文如果你能非常清晰的回答出以下问题,可以直接拉到最下面帮我点个赞~,把时间用去陪陪女朋友: 非对称加密中公私钥都可以加密,那么什么时候用公钥加密,什么时候用私钥“加密” ? 什么是数字签转载 2021-02-15 08:09:07 · 387 阅读 · 0 评论 -
Linux内核是如何巧妙的初始化各个模块的
相信很多在研究linux内核源码的同学,经常会发现一些模块的初始化函数找不到调用者,比如下面的网络模块的初始化函数:// net/ipv4/af_inet.cstatic int __init inet_init(void){... /* * Set the IP module up*/ ip_init(); /* Setup TCP slab cache for open requests. */...转载 2021-02-15 08:06:49 · 356 阅读 · 0 评论 -
如何设置与查看Linux系统中的环境变量?
大家都知道,在 Linux 系统中,有环境变量和Shell 变量这两种变量。环境变量是在程序及其子程序中全局可用的,常常用来储存像默认的文本编辑器或者浏览器,以及可执行文件的路径等等这样的信息。而 Shell 变量仅在当前 Shell 中可用,可以用来存储当前用户的 ID 等信息。那么什么是环境变量,什么是 Shell 变量,该如何设置和查看这两种变量呢?环境变量环境变量是以键值对的形式实现的,是在整个系统范围内都可用的变量,并由所有派生的子进程和 Shell 继承。而环境变量的名称是..转载 2021-02-15 08:02:33 · 389 阅读 · 0 评论 -
一行代码:你的纯文本秒变Markdown
Markdeep 是一个用来写纯文本的插件,它能以 Markdown 的语法与渲染方式纯文本,并在网页上展示。同时,除了 Markdown 语法,Markdeep 还额外支持图表、数学方程等扩展能力。项目主页:casual-effects.com/markdeep/我们先看看效果,如下左边是纯文本编辑器的编辑页面,右边是在浏览器上的渲染效果:Markdeep 非常容易使用,它也不需要安装插件或联网。如上所示只要在纯文本最后加上「<!—Markdeep→」那一行的...转载 2021-02-15 07:59:08 · 177 阅读 · 0 评论 -
13 款 Linux 比较实用的工具
本文介绍几款Linux比较实用的工具,希望有所帮助。1、查看进程占用带宽情况-NethogsNethogs 是一个终端下的网络流量监控工具可以直观的显示每个进程占用的带宽。2、硬盘读取性能测试-IOZoneIOZone是一款Linux文件系统性能测试工具 可以测试不同的操作系统中文件系统的读写性能。下载:http://www.iozone.org/src/current/[root]#tarxvfiozone3_420.tar[root]#c...转载 2021-02-15 07:58:03 · 150 阅读 · 0 评论 -
13 款 Linux 比较实用的工具
本文介绍几款Linux比较实用的工具,希望有所帮助。1、查看进程占用带宽情况-NethogsNethogs 是一个终端下的网络流量监控工具可以直观的显示每个进程占用的带宽。2、硬盘读取性能测试-IOZoneIOZone是一款Linux文件系统性能测试工具 可以测试不同的操作系统中文件系统的读写性能。下载:http://www.iozone.org/src/current/[root]#tarxvfiozone3_420.tar[root]#c...转载 2021-02-14 09:01:25 · 167 阅读 · 0 评论 -
少写点if-else吧,它的效率有多低你知道吗?
少写点if-else吧,它的效率有多低你知道吗?首先看一段经典的代码,并统计它的执行时间:// test_predict.cc#include<algorithm>#include<ctime>#include<iostream>intmain(){constunsignedARRAY_SIZE=50000;intdata[ARRAY_SIZE];constunsignedDATA_STRIDE=256;...转载 2021-02-13 20:45:37 · 487 阅读 · 0 评论 -
VIM 实用插件整理
工欲善其事必先利其器,windows 环境下有诸多好用的 IDE,但在 linux 环境下,可供选择的工具并不多,但是 VIM 作为一款可扩展文本编辑工具,配合丰富的功能插件,同样能满足我们的工作需要,甚至由于其强大的可扩展性,我们能够实现更丰富、更强大的编辑支持。下面是我整理的一些比较常用的插件。环境:Ubuntu 18.04.21、插件管理 (Vundle) 1.1 插件安装 git clone https://github.com/VundleVim/Vun...转载 2020-06-01 22:24:40 · 983 阅读 · 0 评论 -
[VIM] VIM 更新与配置
1、vim 更新 Ubuntu 已经自带了 vim,但不一定是最新版本,如果需要使用最新版本,可以自助升级。 查看 vim 的安装版本:vim --version更新 vimsudo add-apt-repository ppa:jonathonf/vim sudo apt updatesudo apt upgrade附:vim 卸载命令sudo apt remove vimsudo add-apt-repository --remove ppa:j...转载 2020-06-01 21:45:10 · 1897 阅读 · 1 评论 -
超级强大的vim配置(vimplus)--续集
An automatic configuration program for vim安装(github地址:https://github.com/chxuan/vimplus.git, 欢迎star和fork)Mac OS X 安装HomeBrew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 安装vimplus g转载 2020-06-01 18:49:16 · 626 阅读 · 0 评论 -
实战!我用Wireshark让你看见 TCP!
前言“哈?啥是大白鲨?”咳咳,主要是因为网络分析工具Wireshark的图标特别像大白鲨顶部的角。不信你看:Wireshark“为什么拖了怎么久才发文?”为了让大家更容易「看得见」 TCP,我搭建不少测试环境,并且数据包抓很多次,花费了不少时间,才抓到比较容易分析的数据包。接下来丢包、乱序、超时重传、快速重传、选择性确认、流量控制等等 TCP 的特性,都能「一览无云」。没错,我把 TCP 的"衣服扒光"了,就为了给大家看的清楚,嘻嘻。提纲正文...转载 2020-05-31 22:49:15 · 1711 阅读 · 1 评论 -
一个超级强大的vim 配置介绍:vimplus
vimplus 介绍基本介绍vimplus 是一个开源的超强大的自动配置vim的工具。通过该工具可以快速定制、安装、卸载vim插件。从而实现快速配置vim.使用该工具的好处: 自动化脚本一键安装; 摈弃繁琐的环境配置; 自动安装依赖; 支持平台 Mac OS X ubuntu ubuntuKylin debian kali linux deepin linux mint elementary转载 2020-05-31 22:31:43 · 3847 阅读 · 0 评论 -
手把手教你 3 个 Linux 中快速检测端口的小技巧
无论是要解决网络连接问题还是配置防火墙,第一件事是要检查系统实际打开了哪些端口。本文介绍了几种快速查找Linux系统上哪些端口向外部开放的方法。什么是开放端口监听端口是应用程序监听的网络端口。你要得到的监听端口名单通常可以通过如ss、netstat或lsof命令查询系统上网络堆栈。每个监听端口都可以使用防火墙打开或关闭(过滤)。一般而言,开放端口是一个网络端口,它接受来自远程位置的传入数据包。例如:如果你正在运行的监听端口 80、443 的Web服务器,并把这些端口在防火墙...转载 2020-05-28 21:26:56 · 447 阅读 · 0 评论 -
如何重复执行一条命令直至运行成功?
在我们的日常工作中,需要我们重复做的工作简直不能太多。比如,我们想要确认网络是否是连通的,传统的做法就是使用ping命令不停去测试某个地址(比如百度)。网络比较好还好说,但如果网络很差,那么就需要一直去运行ping命令。作为程序员,重复性的工作怎么能忍呢?只要是重复性的工作,就有可能使用编程的方式来解决!下面良许就介绍两种方法重复执行一条命令直至运行成功。(PS:本文适合初学者,高手可绕道)解决重复性的工作,自然而然会想到循环。在 Shell 里,循环无非 3 种:for、wh...转载 2020-05-28 21:26:01 · 2449 阅读 · 0 评论 -
如何将目录下的脚本一次性全部执行
我们在平时工作的时候,为了测试产品的一些功能,我们会写一系列的脚本,并且把它们放在同一个目录下。在做测试的时候,我们通常会依次执行这些脚本,然后记录测试结果。这样做的弊端是显而易见的,那就是效率太低。如果脚本数不多,你的「时间管理」能力又很强的话,那么问题不大。但如果脚本数很多,那么你很可能就有一拳打爆屏幕的冲动(别问我怎么知道,要不是我的同事拼死拉着,我的屏幕很可能已经爆了好几块了)。本文就给大家介绍三种一次性执行目录下所有脚本的方法。1. run-parts首先推荐一个很实...转载 2020-05-28 21:25:09 · 791 阅读 · 0 评论 -
Bash 下 7 种可以提高命令输入的方法,万一输错了命令,可以高效纠正过来。
作为 Linux 用户,大家肯定在 Linux 终端下敲过无数的命令。有的命令很短,比如:ls、cd、pwd之类,这种命令大家毫无压力。但是,有些命令就比较长了,比如:$gitpushoriginHEAD:refs/for/master这个时候,你要是敲错了哪怕是一个字母,是不是很崩溃?以前我的作法是,如果敲错了命令,就把光标移动到错误的地方,再进行修改。相信不仅是我,大部分的小伙伴都是这么干的吧。命令比较短还好,万一命令很长,是不是很抓狂?今天,良许就给大家介绍 Ba...原创 2020-05-28 21:19:41 · 288 阅读 · 0 评论 -
Linux 10个帮助你调试的命令
文章目录 #file #ldd #ltrace #hexdump #strings #readelf #objdump #strace #nm #gdb 磨刀不误砍柴工,Linux下也是一样,你掌握了正确的调试手段,对你的开发会非常有帮助。总结的这几个命令非常经典。#file这个命令可以查看文件的确切文件类型#ldd如何找到可执行文件所依赖的库?这就是ldd命令出现的原因,有人的地方就转载 2020-05-28 21:17:16 · 647 阅读 · 0 评论 -
linux shell 数组建立及使用技巧
linux shell在编程方面比windows 批处理强大太多,无论是在循环、运算。已经数据类型方面都是不能比较的。 下面是个人在使用时候,对它在数组方面一些操作进行的总结。1.数组定义[chengmo@centos5 ~]$ a=(1 2 3 4 5)[chengmo@centos5 ~]$ echo $a1一对括号表示是数组,数组元素用“空格”符号分割开。2.数组读取与赋值得到长度:[chengmo@centos5 ~]$ echo ${#a[@]}...转载 2020-05-10 19:57:19 · 169 阅读 · 1 评论 -
如何在Bash中编写循环?
如何在Bash中编写循环?使用for循环和find命令自动对多个文件执行一组操作。人们想要学习Unix shell的一个常见原因是释放批处理的功能。如果要对许多文件执行某些操作,一种方法是构造一个遍历这些文件的命令来实现。在编程术语中,这称为执行控制,最常见的示例之一是for循环。for循环是一个配方,详细说明了您希望计算机对指定的每个数据对象(例如文件)执行什么操作。经典的循环...原创 2020-04-11 08:07:09 · 2176 阅读 · 0 评论 -
ELF格式文件符号表全解析及readelf命令使用方法
1.读取ELF文件头:$ readelf-hsignELF Header: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 Class: ELF64 Data:...转载 2020-02-17 16:36:37 · 2154 阅读 · 0 评论 -
Linux-动态链接与静态链接对比(动态库和静态库)
一、库的基础概念:在windows平台和linux平台下都大量存在着库。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。由于windows和linux的本质不同,因此二者库的二进制是不兼容的。通俗的说就是把这些常用函数的目标文件打包在一起,提供相应函数的接口,便于程序员使用。在使用函数时,只需要包对应的头文件即可。按照库的使用方式又可分为动态库和静态库,在不同平台下对应...转载 2020-02-17 15:27:40 · 423 阅读 · 0 评论 -
ELF文件与链接
什么是ELF文件ELF文件头部格式ELF在计算机科学中,是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件。是UNIX系统实验室(USL)作为应用程序二进制接口(Application Binary Interface,ABI)而开发和发布的,也是Linux的主要可执行文件格式。ELF文件种类ELF文件组织格式ELF文件由4部分组成...转载 2020-02-17 11:40:02 · 800 阅读 · 0 评论 -
聊聊Linux动态链接中的PLT和GOT(4)—— 穿针引线
编译时的PLT和GOT关系图前几篇文章一直在讨论PLT和GOT的结构细节,编译完成之后,PLT和GOT的对应关系是怎么样的呢,下面是编译完成之后,PLT和GOT关系图。图中重点标注了从调用printf函数语句的汇编指令call puts@plt跳转过程,图中使用编号来表标跳转顺序。PLT表结构有以下特点:PLT表中的第一项为公共表项,剩下的是每个动态库函数为一项(当然每项是由...转载 2020-02-14 18:39:01 · 807 阅读 · 0 评论 -
聊聊Linux动态链接中的PLT和GOT(3)——公共GOT表项
前文(聊聊Linux动态链接中的PLT和GOT(2)——延迟重定位)提到所有动态库函数的plt指令最终都跳进公共plt执行,那么公共plt指令里面的地址是什么鬼?把test可执行文的共公plt贴出来:080482a0 <common@plt>: 80482a0: pushl 0x80496f0 80482a6: jmp *0x80496f4 ...第一句,pus...转载 2020-02-14 18:33:09 · 761 阅读 · 0 评论 -
聊聊Linux动态链接中的PLT和GOT(1)——何谓PLT与GOT
在介绍PLT和GOT出场之前,先以一个简单的例子引入两个主角,各位请看以下代码:#include <stdio.h>void print_banner(){ printf("Welcome to World of PLT and GOT\n");}int main(void){ print_banner(); return 0;}编...转载 2020-02-14 18:24:40 · 561 阅读 · 0 评论 -
u-boot分析 三 (u-boot.lds脚本)
目的,了解链接器用到的脚本文件u-boot.lds。在开始这篇博文之前,需要先了解一些GNU linker script的基本知识,可以参考博主的另外一篇分享《GNU linker script,ld script,GNU链接脚本》在《u-boot分析 二》中,我们分析u-boot的目录结构,提及到了程序入口start.S,但在开始了解start.S之前,我们先聊聊链接器ld程序的脚本...转载 2020-02-14 14:33:17 · 230 阅读 · 0 评论 -
代码重定位
1 说明实验平台: JZ2440CPU: S3C24402 S3C2440的启动过程图1 S3C2440A Memory Map after ResetS3C2440支持从多种存储设备启动:NOR/NAND Flash, EEPROM, 等等。芯片内部有4K SRAM用于启动设备使用。至于,设备最终以哪一种方式启动,通过配置芯片的OM引脚,...转载 2020-02-14 10:57:04 · 239 阅读 · 0 评论 -
Linux进程管理之“四大名捕”
一、四大名捕四大名捕,最初出现于温瑞安创作的武侠小说,是朝廷中正义力量诸葛小花的四大徒弟,四人各怀绝技,分别是轻功暗器高手“无情”、内功卓越的高手“铁手”、腿功惊人的“追命”和剑法一流的“冷血”。本文四大名捕由 linux 命令所出演:无情:ps 出演铁手:dstat 出演追命:top 出演冷血:htop 出演二、进程相关基础知识介绍...原创 2020-01-20 22:56:43 · 202 阅读 · 0 评论 -
30 张图带你彻底理解红黑树
作者:db匠安卓大叔来源:https://www.jianshu.com/u/1d933ff900e7本文将通过图文的方式讲解红黑树的知识点,并且不会涉及到任何代码,相信我,在懂得红黑树实现原理前,看代码会一头雾水的,当原理懂了,代码也就按部就班写而已,没任何难度。阅读本文你需具备知识点:二叉查找树完美平衡二叉树事不宜迟,让我们进入正题吧。红黑...转载 2020-01-01 22:16:07 · 268 阅读 · 0 评论 -
Linux 系统结构详解,看这一篇就够了
作者:huangguisu链接:https://dwz.cn/Jsc4V4SzLinux系统一般有4个主要部分:内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。部分层次结构如图1-1所示。1、linux内核内核是操作系统的核心,具有很多最基本功能,它...转载 2020-01-01 22:13:10 · 443 阅读 · 0 评论 -
Linux 下命令行CURL的15种常见示例!
在本教程中,我们将介绍Linux中的cURL命令。我们会给出一些示例来指导您了解这个强大的实用程序的功能,帮助您理解它所能实现的所有功能。cURL命令用于使用其20多种受支持协议之一,将数据下载或上传到服务器。此数据可以是文件、电子邮件或网页。目录 什么是cURL命令? 下载文件 遵循重定向 停止并继续下载 指定超时 使用用户名和密码...转载 2020-01-01 21:48:20 · 2147 阅读 · 0 评论 -
Linux Shell 时间运算以及时间差计算方法!
最近一段时间,在处理Shell 脚本时候,遇到时间的处理问题。时间的加减,以及时间差的计算。1。时间加减这里处理方法,是将基础的时间转变为时间戳,然后,需要增加或者改变时间,变成 秒。如:1990-01-01 01:01:01 加上 1小时 20分处理方法:a.将基础时间转为时间戳time1=$(date+%s-d'1990-01-01...转载 2019-12-10 22:01:22 · 728 阅读 · 1 评论 -
符号表
在计算机科学中,符号表是一种用于语言翻译器(例如编译器和解释器)中的数据结构。在符号表中,程序源代码中的每个标识符都和它的声明或使用信息绑定在一起,比如其数据类型、作用域以及内存地址。符号表在编译程序工作的过程中需要不断收集、记录和使用源程序中一些语法符号的类型和特征等相关信息。这些信息一般以表格形式存储于系统中。如常数表、变量名表、数组名表、过程名表、标号表等等,统称为符号表。对于符号表组织...原创 2019-11-28 10:27:55 · 473 阅读 · 0 评论