自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 Linux系统命令-用户与用户组(二)

7 Linux用户和组的关系用户和用户组的对应关系有以下 4 种:一对一:一个用户可以存在一个组中,是组中的唯一成员; 一对多:一个用户可以存在多个用户组中,此用户具有这多个组的共同权限; 多对一:多个用户可以存在一个组中,这些用户具有和组相同的权限; 多对多:多个用户可以存在多个组中,也就是以上 3 种关系的扩展。8 管理用户(user)的工具或命令useradd 添加用户 adduser 添加用户usrdel 删除用记passwd 为用户设置密码usermod 修改用..

2021-10-19 11:42:55 335

原创 Linux系统命令-用户与用户组(一)

1 用户与用户组Linux是多用户多任务类型的操作系统,多个用户可以同时登录一个Linux系统,每个用户还可以同时运行多个进程,并且进程之间、用户之间不会相互冲突,可以并行运行。例如,某台 Linux 服务器上有 4 个用户,分别是 root、www、ftp 和 mysql,在同一时间内,root 用户可能在查看系统日志、管理维护系统;www 用户可能在修改自己的网页程序;ftp 用户可能在上传软件到服务器;mysql 用户可能在执行自己的 SQL 查询,每个用户互不干扰,有条不紊地进行着自己的..

2021-10-19 11:39:35 946

原创 跟我一起学Linux系统编程007-C语言变量分配、堆内存分配,函数可重入

1 C语言内存分配方式在Linux系统上,程序被载入内存,时成为进程之时,内核为用户进程地址空间建立了代码段、数据段和堆栈段,各种C语言代码中需要占用空间的变量、常量也获得了内存空间。从进程内存布局上来讲C语言全局变量、局部变量、动态内存和常量对应的区域,分别对应以下四个区域。(1)静态存储区域分配。程序编译的时候就已经分配好,进程启动后获得实际的内存空间。这块内存在程序的整个运行期间都存在。例如全局变量,static变量。(2)在栈上分配。进程运行,函数压栈后,函数内部声明定义的局部变...

2021-10-19 11:35:49 281

原创 跟我一起学Linux系统编程006C-进程内存分配,堆分配brk、malloc、free

上上个记录《Linux系统编程006A-进程、内存布局》,上一个记录《Linux系统编程006B-进程内存布局、mmap调用、环境变量》中,主要是讲解了三件事:(1)进程与程序的区别(2)Linux进程内部的内存布局(3)Linux的整体虚拟地址的机制。本文要讲第四件事:进程的内存分配。1 Linux进程内存布局的要点回顾:(1)每个进程的虚拟地址空间分布Linux使用虚拟地址空间,大增了进程的寻址空间,一个进程由低地址到高地址分别为:1 保留段:从0开始到0x08048000这一段。...

2021-10-17 15:34:54 428

原创 Linux命令-passwd、伪用户、密码失败处理

1 Linux用户和组的基本概念Linux操作系统是一个多用户操作系统,用户在使用的时候必须向系统申请一个帐号,以这个帐号的身份进入系统使用操作系统分配的资源。每个用户都有一个用户名、UID、所属组、密码(非必须)、登录终端等。 每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。 每个组也有自己的名称、组唯一编号GID 。 系统通过UID和GID来区分不同的用户和组,相同的UID和 GID会被系统认为是同一个用户。 一般来说,GID和UID是可以不相同的,但绝大..

2021-10-17 15:28:21 1770

原创 Linux shell-进程原理、查看、管理

普通人的视角,进程就是正在运行着的程序。从程序员的视角来看,认知要复杂得多。进程是程序正在运行的一个实例。它由程序指令,和从文件、其它程序中读取的数据或系统用户的输入组成。它也是应用层运行、占据着内存、与内核时常交互的动态运行实体。进程是由内核定义的抽象的实体,内核为进程分配用来执行程序的各项系统资源。从内核 的层面来看,进程由用户内存空间和一系列内核数据结构组成。其中,用户内存空间包含了程序代码和代码使用的变量,内核数据结构用于维护进程的状态信息。这些记录在内核数据结构的信息有:进程标识号..

2021-10-08 16:16:38 2278

原创 Linux平台上的AppImage安装包之前世今生

1 什么是AppImage?AppImage是近些年流行的一种安装包。AppImage继承自Klik,它是这样一个软件:它让你在 linux平台上可以以普通用户的权限安装软件, 然后, 每个软件都安装在自己的一个目录下, 当你想卸载这个软件的时候,直接把这个目录删掉就可以了。2 Linux中常见的安装包类型及缺点我们来看看Linux中常见的安装包类型:(1)tar包:这是一种用打包工具tar做成的压缩包,一般是源码安装包。比如一个知名的录像开源软件OBS的源码“obs-stud...

2021-10-08 16:08:59 2955

原创 Linux硬盘管理:分区、GParted分区操作

我的SSD只有256G,装个系统还可以,如果说存储数据,那还是太小了。我的移动硬盘存有很多电影、经典音乐,还存着多年来收藏大量的软件工具和文档资料。这数T的资料,绝大多数都不常用。我想把我频繁访问的这些软件工具和文档资料,存放在我的一个500G的机械硬盘里面。这样,就不至于每次想用的时候,就插拔我的移动USB机械硬盘。但是我还不太了解ubuntu18上的硬盘、分区和目录结构。为了能顺利把我的500G 2.5寸笔记本机械式硬盘运行在我的ubuntu18系统上,我便网上学习,并且亲自尝试了Ubunt..

2021-10-08 16:03:11 4128

原创 跟我一起学Linux系统编程006B-进程内存布局、mmap调用、环境变量

1 进程内存布局下图是一个32位Linux进程的内存空间分布图。(1)保留区从0开始到0x08048000这一段,属于保留区。实际上,这部分并不是个单一的内存区域,而是禁止用户进程访问的地址区域的总称,这段地址空间中受到操作系统保护。如果这段内存区能操作的话,你的C代码中的空指针NULL也就合法了。所以,大多数操作系统中,极小的地址通常都是不允许访问的。C语言将无效指针赋值为0(NULL)也是出于这种考虑,因为0地址上正常情况下不会存放有效的可访问数据。(2)代码段(tex...

2021-10-05 18:30:46 249

原创 跟我一起学Linux系统编程006A-进程、内存布局

1 进程和程序可执行的文件,躺在硬盘上的叫程序,运行起来了就叫进程。从内核 的层面来看,进程由用户内存空间和一系列内核数据结构组成。其中,用户内存空间包含了程序代码和代码使用的变量,内核数据结构用于维护进程的状态信息。这些记录在内核数据结构的信息有:进程标识号IDs、虚拟内存表、打开文件描述符表、信号传递及处理的相关信息、进程资源使用和限制、当前工作目录、环境变量、命令行等等大量的相关信息。2 进程号和父进程号定义在”<stdlib.h>“中的系统调用函数getpid()、g..

2021-10-05 18:22:27 154

原创 跟我一起学Linux系统编程005-原子操作与竞争条件、向文件尾部追加数据

我们写的程序,如果在Linux平台上只运行一个实例,且只有一个线程,基本上我们不用关心这个问题,open文件,read读write写文件,一切会按步就班的发生,不会有什么问题。可这毕竟不是现实。现实是程序可能运行多个实例,一个实例可能有多个线程。特别是一些在线服务器程序,极有可能某个文件在同一时刻,被成千上万个read/write请求暴击,每个请求都争着获得它所需要的文件,多个进程或线程产生了竞争现象。并发与负载均衡,本文不谈这类高大上的话题,单从系统编程的角度来看等这件事。1 原子操作与竞争...

2021-10-05 18:17:30 134

原创 跟我一起学Linux系统编程004-文件描述符、文件IO、C库IO

我们知道了,在Linux系统上,一切皆文件。如果要在Linux系统上编程操作文件,则一定离不开文件描述符的概念。关于文件描述符概念的理解,在我的两个浅文《Linux系统编程笔记-文件描述符》和《Linux Shell脚本攻略-重定向理解与补充》都有提及。虽然啰嗦的我都想吐,但为了文意连贯,有助于理解,还不得不次重复一下要点。关于Linux文件、文件描述符和标准文件描述符Linux中标准文件描述符要点如下:在Linux中,一切都是文件。屏幕是文件,键盘是文件,系统错误也被抽象成了一..

2021-10-04 17:55:41 153

原创 跟我一起学Linux系统编程003-系统调用、API、标准C库

1 系统调用概述计算机系统的各种硬件资源比较有限,运行在操作系统之上的多个进程都需要访问这些资源,并且试图独占这些资源。如果进程都能随心所欲地问这些资源,冲突再所难免,系统塴溃就会时常产生。所以为了更好地管理,操作系统是不能允许进程直接操作这些硬件资源的。进程如果要想访问这些资源,必须向操作系统申请。进程向操作系统申请的入口就是系统调用(System Call),它由操作系统提供。在linux中系统调用是用户空间访问内核的唯一手段,除异常和陷入外,他们是内核唯一的合法入口。2 A...

2021-10-01 19:08:46 544

原创 跟我一起学Linux系统编程学习002-一切皆文件、文件系统、IO

1 Linux系统的设计优点上个世纪六十年代,贝尔实验室Ken Thompson发明了UNIX,Dennis Ritchie参与了开发。在吸取了远古 Multics 操作系统研发中的失败经验后,里奇将UNIX的设计原则定为Keep it simple & stupid(大道至简)。UNIX 的特点:-所有的事物(甚至硬件本身)都是一个的文件,Everything (including hardware) is a file -以文本形式储存配置数据,Configuratio...

2021-10-01 18:58:57 204

原创 跟我一起学习Linux系统编程001-架构、内核概要

了解Linux系统架构、内核、基本原理,才是进入Linux平台下编程学习的前提。不了解这些,调用C/C++库来开发,可能表面上会学用一些库函数接口,实则可能是代码处处缺陷,一旦遇到有点深度的故障,程序开发寸步难行。1 Linux的分层架构不管是Linux、Windows,还是其它的操作系统,采用分层结构模型,这几乎是一个通行做法了。不仅是大系统,小的嵌入式系统,往往程序员也会不由自主地采用分层模型,就像上面的图上所示,通常的操作系统会分为这样几层:硬件层、系统层和应用层。系统层内部一般情况下..

2021-10-01 18:50:07 184

原创 在ubuntu中进行简单截屏、专业截屏、自定义截屏操作

我的工作离不开处理文档,文档记录中时常要求截图操作和录屏操作。个人的精力有限,只能先在这一个文档中记录截图操作。在windows中,我们可以通过快捷键来截图(Alt+PS)、截屏(PS),然后打开画图,可以保存成图片文件。当然,windows上面也有不少专用的截图工具,比windows操作系统提供更多的截图功能。不过,据我所知,相当一部分的普通windows用户只知道QQ可以截图。(在键盘上就是PrintScreen键,一般位于右上角,大键盘与笔记本键盘的位置不一样)。在试用了ubuntu18...

2021-10-01 18:29:24 3148

原创 Linux平台下自创c函数库及库的命名约定

如下所示,一段的简单到不能再简的程序:我们可以重新查看这个小程序,在这个程序中并没有定义”printf”的函数实现,且在预编译中包含进的”stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实现”printf”函数的呢?最后的答案是:系统把这些函数实现都被做到名为libc.so.6的库文件中去了,在没有特别指定时,Gcc会到系统默认的搜索路径”/usr/lib”下进行查找,也就是链接到libc.so.6库函数中去,这样就能实现函数”printf”了,而这也就是链接的作用。...

2021-10-01 18:25:26 276

原创 Ubuntu中“ls -l“命令显示的内容中total到底是什么?

当以“-l”作为参数执行ls时命令时,第行总会显示“总用量”的数值。(在英文版的Linux系统上,第一行显示的是“total”的数值。)网查,有人告诉我:ls 的total合计数,是列出目录下文件的block合计数。ls再加个参数“-s”就可以知道每个文件所占用的block数,加起来就是total指出的数值了。于是我执行“ls -l -s”,下面是其结果。每个列出的文件所占用的block数,加起来的确是52个。想想,觉得目录文件“.”和“..”没显示,于是再试:“ls -la -s”。..

2021-10-01 18:18:29 1645 2

原创 Linux硬盘管理:硬盘手工挂载、永久自动挂载

刚开始在ubuntu18上管理硬盘,这不是一件轻松的工作。主要是因为有windows的习惯性思维在阻挡,我所熟悉的盘符没有了,取而代之的是分区命名、分区文件、目录映射等等概念。不仅如此,又说目录也是文件、分区也是文件、分区又可以映射到目录文件中去。(说实话,回想当初,那时还真是让我非常蒙圈!)但这并不是Linux系统故意的,Linux的设计思想的精髓之一便是“一切皆是文件”。和 Windows 系统不同,Linux 系统没有 C 盘、D 盘、E 盘那么多的盘符,只有一个根目录(/),所有的文件(资...

2021-09-29 18:15:16 1398

原创 如何删除以“-”开头的文件-Linux命令行的参数风格

Linux命令的格式一般是:command -选项:参数。严格来说“-”后面的是“选项”,如果“选项”需要参数的话,再加上个冒号“:”,然后才是参数。但是,我们习惯上把命令后面没有“参数”的“选项”也统称参数。(如果真的需要参数了,才会区分哪个是“选项”,哪个是参数。)最初,我没有在意这个问题。如果命令后面需要选项的话,我就在选项前加一个横杠,格式是这样的:“command -选项:参数”,并且认为除了“--help”或“--version”外,几乎都是这样的。比如:“ls-liah”,再比如:...

2021-09-29 18:05:23 773

原创 5G,相信太多,需要太少,现实很难

我的4G套餐,在运营商近一年多次的电话、信息轰炸之下,终于换成了5G的。刚开始推给我说是200多的套餐,我不愿意。后来是168套餐,我也不想。后来又推128元套餐,我再次拒绝。说实话,一是不愿意每月多交资费,二是平时在家用WIFI,回老家吧,小城市根本没有啥5G基站。平时在家用WIFI,偶尔外出,流量其实是用不完的。我的手机4G套餐流量由933G(前22G高速,后面的限速。)再后来,运营商客服又来电说保留108元套餐资费不变、通话时长不变、附卡不变,就是流量变为每月35G。我想着我不...

2021-09-29 17:50:05 98

原创 Linux输入重定向“<“的理解与代码实证

Linux的shell命令的高级操作,主要有:输出重定向,操作符是:>、>>输入重定向,操作符是:<管道操作,操作符是(|)关于输出重定向,请参考我的浅文《Linux Shell脚本攻略-书中关于重定向理解与补充》;关于管道操作,请参考我的《Linux管道操作的理解和代码实证》。这两个文档中,限于篇幅,没有记录“输入重定向”这部分。结合本人最近一段时间的操作理解,记录下来,正好可以补充讲述这一部分。1 Shell 输入重定向"<"的基本概念命令语法...

2021-09-29 11:36:35 694

原创 Linux管道操作的理解和代码实证

要理解管道操作,必须知道Linux的文件和文件描述符概念。关于这两个概念的理解,在我的两个浅文《Linux文件描述符、重定向》和《Linux Shell脚本攻略一书中-关于重定向理解与补充》都有提及。虽然不想啰嗦,但为了文意连贯,有助于理解,还不得不再提一下要点。1 关于Linux文件和文件描述符简单提一下几个要点:(1)在Linux中,一切都是文件。屏幕是文件,键盘是文件,系统错误也被抽象成了一个文件。当然,各种磁盘文件、各种设备,都是文件。(2)是文件都有其对应的名字...

2021-09-28 21:49:55 297

原创 Linux文件描述符、重定向

1 UNIX 的特点:大道至简Ken Thompson(左:肯·汤普森)和Dennis Ritchie (右:与丹尼斯·里奇)上个世纪六十年代,贝尔实验室Ken Thompson发明了UNIX,Dennis Ritchie参与了开发。在吸取了远古 Multics 操作系统研发中的失败经验后,里奇将UNIX的设计原则定为Keep it simple & stupid(大道至简)。UNIX 的特点:所有的事物(甚至硬件本身)都是一个的...

2021-09-28 21:27:01 215

原创 《Linux Shell脚本攻略》一书中,关于重定向的理解与补充

在个人学习《Linux Shell脚本攻略》第一章时,到第1.6节“玩转文件描述符及重定向”中,发现有一处言语不明(也或者是例子不当之处)。1 文件描述符文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于UNIX、Linux这样的操作系统。在windows中,内核...

2021-09-28 21:08:02 97

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除