sudo+vim+g++/gcc+makefile+进度条

目录

一、信任表中加入指定的普通用户(使其能使用sudo)

二、vim的使用

(一)基本概念

1. 正常/普通/命令模式(Normal mode) 

2. 插入模式(Insert mode)

3. 末行模式(last line mode)

(二)vim正常模式命令集

1. 移动光标

2. 翻页

3. 删除文字

4. 复制

5. 剪切

6. 大小写转换

7. 替换

8. 更改

9. 撤销

10. 注释

(三)vim末行模式命令集

1. 行号设置

2. 保存和退出

3. 分屏

4. 不退出vim执行

三、gcc/g++的使用

(一)预处理(进行宏替换)

(二)编译(生成汇编)

(三)汇编(生成机器可识别代码)

(四)链接(生成可执行文件或库文件)

(五)动态库和静态库

1. 库的命名

2. 动态库和静态库

3. 动态链接和静态链接的优缺点

4. 安装c和c++静态库

5. 动态链接和静态链接分别生成的文件

四、自动化构建工具-make/Makefile

(一)依赖关系和依赖方法

(二)make原理

(三)项目清理

(四)make,makefile是具有依赖性的推导能力的

(五)一些小技巧

1. @符号

2. $(变量名)

(六)Makefile中一些常用变量的简写方式

五、文件或者目录的时间属性

六、实现进度条

(一)行缓冲区

(二)进度条


一、信任表中加入指定的普通用户(使其能使用sudo)

  • 允许普通用户以超级用户(或系统管理员)的身份执行命令
  • sudo ls 的意思是以超级用户的权限来执行 ls 命令,这样即使普通用户没有权限访问某些文件或目录,也可以列出它们的信息
vim /etc/sudoers//在root账号下打开信任表

二、vim的使用

(一)基本概念

  • vim最常用的三种模式:命令模式、插入模式、底行模式

1. 正常/普通/命令模式(Normal mode) 

  • 控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode

2. 插入模式(Insert mode)

  • 只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。

3. 末行模式(last line mode)

  • 文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+: 即可进入该模式。要查看你的所有模式:打开vim,底行模式直接输入

 

(二)vim正常模式命令集

1. 移动光标

  • vim可以直接用键盘上的光标来上下左右移动,但正规的vim是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格
  • 按「G」:移动到文章的最后
  • 按「Shift+$ 」:移动到光标所在行的“行尾”
  • 按「Shift+^」:移动到光标所在行的“行首”
  • 按「w」:光标跳到下个字的开头
  • 按「e」:光标跳到下个字的字尾
  • 按「b」:光标回到上个字的开头
  • 按「#l」:光标移到该行的第#个位置,如:5l,56l
  • 按[gg]:进入到文本开始
  • 按「Shift+g」:移动到文本末尾
  • 按「n+Shift+g」:移动到第n行行首
  • 按「n+Shift+g」:移动到第n行行首

2. 翻页

  • 按[shift+g]:进入文本末端
  • 按「ctrl」+「b」:向上翻一页
  • 按「ctrl」+「f」:向下翻一页
  • 按「ctrl」+「u」:向上翻半页
  • 按「ctrl」+「d」:向下翻半页

3. 删除文字

  • 按「x」:删除光标所在位置的字符
  • 按「nx」:删除光标所在位置开始往后的n个字符
  • 按「X」:删除光标所在位置的前一个字符
  • 按「nX」:删除光标所在位置的前n个字符
  • 按「dd」:删除光标所在行
  • 按「ndd」:删除光标所在行开始往下的n行

4. 复制

  • 按「yy」:复制光标所在行到缓冲区
  • 按「nyy」:复制光标所在行开始往下的n行到缓冲区。
  • 按「yw」:将光标所在位置开始到字尾的字符复制到缓冲区
  • 按「nyw」:将光标所在位置开始往后的n个字复制到缓冲区

  • 按「p」:将已复制的内容在光标的下一行粘贴上
  • 按「np」:将已复制的内容在光标的下一行粘贴n次

5. 剪切

  • 按「dd」:剪切光标所在行
  • 按「ndd」:剪切光标所在行开始往下的n行
  • 按「p」:将已剪切的内容在光标的下一行粘贴上
  • 按「np」:将已剪切的内容在光标的下一行粘贴n次

6. 大小写转换

  • 按「Shift+~」:完成光标所在位置字符的大小写切换

7. 替换

  • 按「r」:替换光标所在位置的字符。

注意:先切换到命令模式,然后按r,然后再按任意字符即可替换成 字符

  • 按「R」:替换光标所到位置的字符,直到按下「Esc」键为止

8. 更改

  • 按「cw」:将光标所在位置开始到字尾的字符删除,并进入插入模式
  • 按「cnw」:将光标所在位置开始往后的n个字删除,并进入插入模式

 

9. 撤销

  • 按「u」:撤销。
  • 按「Ctrl+r」:撤销刚才的撤销

10. 注释

  • 批量化注释:
  • ctrl+v  --->j/k两个按键上下选中区域---> shift+i(I)---> // --->Esc
  • 批量化删除注释:
  • ctrl+v ---> hjkl选中区域 --->d即可

(三)vim末行模式命令集

1. 行号设置

  • 「set nu」:列出行号
  • 「set nonu」:取消行号

2. 保存和退出

  • 「w」:保存文件。
  • 「q」:退出vim
  • 「wq」:保存退出
  • 「wq!」:强制保存并退出

3. 分屏

  • 「vs 文件名」:实现多文件的编辑
  • 「Ctrl+ww」:光标在多屏幕下进行切换

4. 不退出vim执行

「!+指令」:在不退出vim的情况下,执行Linux的指令

三、gcc/g++的使用

  • c++中对应的文件后缀有cpp,cc和cxx

(一)预处理(进行宏替换)

  • 预处理功能主要包括宏定义文件包含条件编译去注释
  • 预处理指令是以#号开头的代码行
  • 选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程
  • 选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序
gcc -E test1.c -o test1.i

 

(二)编译(生成汇编)

  • 在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc 把代码翻译成汇编语言。
  • 用户可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码

  • 编译过程为 扫描程序-->语法分析-->语义分析-->源代码优化-->代码生成器-->目标代码优化
  1. 扫描程序进行词法分析,从左向右,从上往下扫描源程序字符,识别出各个单词,确定单词类型
  2. 语法分析是根据语法规则,将输入的语句构建出分析树,或者语法树,也就是我们答案中提到的分析树parse tree或者语法树syntax tree
  3. 语义分析是根据上下文分析函数返回值类型是否对应这种语义检测,可以理解语法分析就是描述一个句子主宾谓是否符合规则,而语义用于检测句子的意思是否是正确的
  4. 目标代码生成指的是,把中间代码变换成为特定机器上的低级语言代码。
gcc -S test1.i -o test1.s

(三)汇编(生成机器可识别代码)

  • 汇编阶段是把编译阶段生成的“.s”文件转成目标文件
  • 在此可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码
  • 此时的test1.o虽然的二进制文件但是不能执行
gcc -c test1.s -o test1.o

(四)链接(生成可执行文件或库文件)

gcc test1.o -o mybin//将目标文件 test1.o 链接成一个可执行文件,并将可执行文件命名为mybin

(五)动态库和静态库

1. 库的命名

2. 动态库和静态库

  • 动态库:在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为“.so”,如前面所述的 libc.so.6 就是动态库。gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行文件
  • 静态库:是指编译链接时,把库文件的代码全部加入可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为“.a”

3. 动态链接和静态链接的优缺点

动态链接:
 优点:形成的可执行程序提交比较小,比较节省资源
 缺点:稍慢一些,依赖动态库,程序可移植性较差
静态链接:
 优点:无视库,可以独立运行
 缺点:体积太大,浪费资源

4. 安装c和c++静态库

sudo yum install glibc-static//c静态库
 sudo yum install -y libstdc++-static//c++静态库

5. 动态链接和静态链接分别生成的文件

gcc test1.c -o test1_move//默认动态链接生成
gcc test1.c -o test1_quiet -static//静态链接生成

四、自动化构建工具-make/Makefile

  • make:是一个命令
  • makefile:是一个在当前目录下存在的一个具有特定格式的文本文件  

(一)依赖关系和依赖方法

 依赖关系:

  • 上面的文件 mybin ,它依赖 test1.o
  • test1.o , 它依赖 test1.s
  • test1.s , 它依赖 test1.i
  • test1.i , 它依赖 test1.c

(二)make原理

  1. make会在当前目录下找名字叫“Makefile”或“makefile”的文件。
  2. 如果找到,它会找文件中的第一个目标文件,在下面的例子中,他会找到mybin这个文件,并把这个文件作为最终的目标文件。
  3. 如果mybin文件不存在,或是mybin所依赖的后面的test1.o文件的文件修改时间要比mybin这个文件新,那么,他就会执行后面所定义的命令来生成mybin这个文件。
  4. 如果mybin所依赖的test1.o文件不存在,那么make会在当前文件中找目标为test1.o文件的依赖性,如果找到则再根据那一个规则生成test1.o文件。(这有点像一个堆栈的过程)
  5. 当然,test1.c是存在的,于是make会生成test1.o文件,然后再用test1.o文件声明make的终极任务,也就是执行文件mybin了。
  6. 这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。
  7. 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功,make根本不理。

(三)项目清理

(四)make,makefile是具有依赖性的推导能力的

(五)一些小技巧

1. @符号

  • 用于抑制命令的输出,使得在执行该命令时不会在终端上显示具体的命令内容

2. $(变量名)

cc=gcc
src=test1.c
target=mybin$(target):$(src)$(cc) $(src) -o $(target)
.PHONY:clean
clean:rm -f $(target)

(六)Makefile中一些常用变量的简写方式

  • $@:表示目标文件(冒号左侧的文件名)
  • $^:表示所有的依赖文件列表(冒号右侧的文件列表)
  • $<:表示依赖关系中的第一个依赖文件

 

五、文件或者目录的时间属性

  • Access Time (atime):指的是文件或目录最后一次被访问的时间。例如,当你打开一个文件或者读取它时,它的访问时间就会被更新。
  • Modify Time (mtime):指的是文件或目录的内容最后一次被修改的时间。当你编辑或者写入文件时,它的修改时间就会被更新。
  • Change Time (ctime):指的是文件或目录的状态最后一次被修改的时间。这包括文件或目录的内容、权限、所有者等信息的变更。
stat mybin//获取关于文件或目录的详细信息,包括访问时间、修改时间、状态改变时间等

 

六、实现进度条

(一)行缓冲区

  • 行缓冲(line buffering)是一种I/O缓冲策略,这意味着在遇到换行符(\n)或者缓冲区满之前,输出的文本都会被暂时存储在缓冲区中,而不会立即显示在屏幕上
  • 没有换行

 

  • 利用fflush

 

(二)进度条

\r:是回车

\n:是换行 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/136754.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于 Qt串口不同电脑出现不同串口号打开失败 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/132842297 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…

应用(Application)部署容器化演进之路

目录 一、应用程序部署痛点 1.1 应用程序部署流程 1.2 应用程序扩缩容 1.3 应用程序多环境部署 二、 计算资源应用演进过程 2.1 使用物理服务器痛点 2.2 使用虚拟机优点与缺点 2.2.1 使用虚拟机优秀点 2.2.2 使用虚拟机缺点 2.3 使用容器的优点与缺点 2.3.1 使用容器…

【算法挨揍日记】day07——904. 水果成篮、438. 找到字符串中所有字母异位词

904. 水果成篮 904. 水果成篮 题目描述&#xff1a; 你正在探访一家农场&#xff0c;农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示&#xff0c;其中 fruits[i] 是第 i 棵树上的水果 种类 。 你想要尽可能多地收集水果。然而&#xff0c;农场的主人设定了…

Docker搭建私有仓库

Docker搭建私有仓库 一、私有仓库搭建 # 1、拉取私有仓库镜像 docker pull registry # 2、启动私有仓库容器 docker run --nameregistry -p 5000:5000 registry # 3、打开浏览器输入 http://你的服务器地址:5000/v2/_catalog 看到 {"repositories":[]} 表示搭建成功…

Python日志处理器,同时打印到控制台和保存到文件中,并保证格式一致

使用logging模块的时候&#xff0c;默认是输出到控制台的&#xff0c;当然也可以配置输出到文件中&#xff0c;但是当你配置了文件后&#xff0c;控制台的输出就消失了&#xff0c;所以&#xff0c;需要一个策略即能保存到文件中&#xff0c;又能输出到控制台中。 下面是我做的…

基于PHP的医药博客管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的医药博客管理系统 一 介绍 此医药博客系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。用户可注册登录&#xff0c;查看/评论/搜索博客&#xff0c;建议留言。管理员可对用户&a…

添加一个仅管理员可见的页面

例如我新加一个页面 申请一个路由 《插播》 前端是如何知道我们是管理员的呢&#xff0c;ant-design框架会帮我们存到InitialState里&#xff0c;做为全局变量 在access.ts里我们获取到了用户是否为管理员 &#xff08;用户存在且为管理员&#xff09; 框架为我们打通了个路由…

[hive]搭建hive3.1.2hiveserver2高可用可hive metastore高可用

参考: Apache hive 3.1.2从单机到高可用部署 HiveServer2高可用 Metastore高可用 hive on spark hiveserver2 web UI 高可用集群启动脚本_薛定谔的猫不吃猫粮的博客-CSDN博客 没用里头的hive on spark,测试后发现版本冲突 一、Hive 集群规划(蓝色部分) ck1ck2ck3Secondary…

基于Java+freemarker实现动态赋值以及生成Word文档

前言 有一个需求就是给定一个正确格式的 Word 文档模板&#xff0c;要求通过动态赋值方式&#xff0c;写入数据并新生成 该模板格式的 Word 文档。这很明显使用 Javafreemarker 方式来实现颇为简单。 一、导入依赖 <!-- freemarker --> <dependency><groupId…

基于Qt4的拉格朗日插值实现及使用

目录 1 拉格朗日插值算法 2 实现思路 3 子程序编写 1 框架搭建 2 加载节点值 3 加载插值点 4 位置查找 5 二点线性插值 3 子程序使用 1 拉格朗日插值算法 拉格朗日插值是一种常用的散点插值算法,是是以法国十八世纪数学家约瑟夫拉格朗日命名的一种多项式插值方法。是…

创建线程的方式打开记事本

更好的阅读体验 \huge{\color{red}{更好的阅读体验}} 更好的阅读体验 今天操作系统课老师讲到进程&#xff0c;提出了一个有趣的小实验&#xff1a;能否以系统调用的方式利用 Windows 创建进程的系统调用函数来打开一个软件。闲着蛋疼的我立马来了兴趣&#xff0c;姑且写一个玩…

【小程序】实现经典2048小游戏

概述 经典小游戏2048&#xff0c;2048小游戏对于逻辑要求还是很有技术含量的&#xff0c;有兴趣的可以看看 详细 以前学习时写的小游戏2048&#xff0c;技术含量还是不错的&#xff0c;有兴趣的可以看看 2048已经封装好了&#xff0c;在主页面直接引入文件可以直接调用 演…

k8s优雅停服

在应用程序的整个生命周期中&#xff0c;正在运行的 pod 会由于多种原因而终止。在某些情况下&#xff0c;Kubernetes 会因用户输入&#xff08;例如更新或删除 Deployment 时&#xff09;而终止 pod。在其他情况下&#xff0c;Kubernetes 需要释放给定节点上的资源时会终止 po…

Mybatis框架学习

什么是mybatis&#xff1f; mybatis是一款用于持久层的、轻量级的半自动化ORM框架&#xff0c;封装了所有jdbc操作以及设置查询参数和获取结果集的操作&#xff0c;支持自定义sql、存储过程和高级映射 mybatis用来干什么&#xff1f; 用于处理java和数据库的交互 使用mybat…

八股文学习三(jvm+线程池+锁)

1. jvm (1)概念 JVM是可运行 Java 代码的假想计算机 &#xff0c;包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收&#xff0c;堆 和 一个存储方法域。JVM 是运行在操作系统之上的&#xff0c;它与硬件没有直接的交互。 java运行过程&#xff1a; 我们都知道 Java…

【Linux】:Kafka组件介绍

目录 环境简介 一、消息 二、主题 三、分区 四、副本 五、生产者 六、消费者 七、消费者组 八、offsets【偏移量】 环境简介 Linux内核&#xff1a;Centos7 Kafka版本&#xff1a;3.5.1 执行命令的目录位置&#xff1a;Kafka安装目录的bin目录下&#xff1a;/usr/loca…

读书笔记-《ON JAVA 中文版》-摘要25[第二十二章 枚举]

文章目录 第二十二章 枚举1. 基本功能1.1 基本 enum 特性 2. 方法添加2.1 方法添加2.2 覆盖 enum 的方法 3 switch 语句中的 enum4. values 方法的神秘之处5. 实现而非继承6. 随机选择7. 使用接口组织枚举8. 使用 EnumSet 替代 Flags9. 使用 EnumMap10. 常量特定方法11. 本章小…

【操作系统笔记】链接阶段ELF文件

链接阶段&#xff1a;符号解析 链接阶段主要包含&#xff1a; 符号解析重定位 一般情况下&#xff0c;每个 C 文件可以看成一个程序模块&#xff0c;比如下边的main.c就是一个程序模块 #include <stdio.h>extern int shared; int sum(int *a, int n); int array[2] …

springcloud3 分布式事务-seata的四种模式总结以及异地容灾

一 seata四种模式比较 1.1 seata的4种模式比较 二 seata的高可用 2.1架构 1.建TC服务集群非常简单&#xff0c;启动多个TC服务&#xff0c;注册到nacos即可。 2.做异地多机房容灾&#xff0c;比如一个TC集群在上海&#xff0c;另一个TC集群在杭州&#xff0c; 3.微服务基…

TuyaLink 快速入门教程

通过本入门教程&#xff0c;大家能了解到如何在涂鸦 IoT 开发平台上使用 TuyaLink 完成智能设备接入。并通过 Java 程序&#xff0c;在 IntelliJ IDEA 中使用 TuyaLink 的 GitHub Demo 工程&#xff0c;对一个电工开关设备&#xff0c;实现基本的数据上报下发功能。 准备工作 …