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

news2024/11/25 20:44:28

目录

一、信任表中加入指定的普通用户(使其能使用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”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码

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.coloradmin.cn/o/1014979.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国庆中秋特辑(一)浪漫祝福方式 用循环神经网络(RNN)或长短时记忆网络(LSTM)生成祝福诗词

目录 一、使用深度学习中的循环神经网络&#xff08;RNN&#xff09;或长短时记忆网络&#xff08;LSTM&#xff09;生成诗词二、优化&#xff1a;使用双向 LSTM 或 GRU 单元来更好地捕捉上下文信息三、优化&#xff1a;使用生成对抗网络&#xff08;GAN&#xff09;或其他技术…

根据keypoint生成heatmap

这里keypoint是有类别的&#xff0c;生成的heatmap是每个通道对应每个类别的heatmap 第一种会比较慢&#xff0c;第二种会比较快 第一种 def generate_heatmap(heatmap_size, sigma, class_num, keypoints, normalization): """generate gaussian heatmap:…

0.96寸OLED屏显示测试和代码详细分析SPI通信

第一次尝试点亮 程序代码地址,密码&#xff1a;1234。 买了一个两色的oled&#xff0c;然后下载了资料&#xff0c;手里有一个8266的arduino&#xff0c;所以为了方便就直接用了。使用arduino主要原因&#xff0c;单片机keil太大&#xff0c;来回找文件修改引脚比较麻烦。实际…

在ubuntu20下使用花生壳映射vscode SSH

1、在ubuntu20下安装花生壳 下载花生壳&#xff1a;花生壳客户端官方下载 - 贝锐花生壳官网 选择ubuntu 或者 wget "https://dl.oray.com/hsk/linux/phddns_5.2.0_amd64.deb" -O phddns_5.2.0_amd64.deb 安装 :sudo dpkg -i phddns_5.2.0_amd64.deb" -O phddns…

【sgGoogleTranslate】自定义组件:基于Vue.js用谷歌Google Translate翻译插件实现网站多国语言开发

sgGoogleTranslate源码 <template><div :id"$options.name"> </div> </template> <script> export default {name: "sgGoogleTranslate",props: ["languages", "currentLanguage"],data() {return {//…

图解曲线积分的对称性

1.图解曲线积分的对称性 1.1 第一类曲线积分的一般对称性 二重积分、三重积分、第一类曲线积分、第一类曲面积分的一般对称性其原理都类似 平面曲线和空间曲线的原理一样&#xff0c;以下内容以空间曲线为例 图中所示为积分区域 Γ \Gamma Γ&#xff0c;函数 f ( x , y , z…

利用 Python PyPDF2库轻松提取PDF文本(及其他高级操作)

当需要从PDF文件中提取文本时&#xff0c;Python中的PyPDF2库是一个非常有用的工具。无论您是需要分析PDF文档中的内容还是需要在文档中搜索特定的信息&#xff0c;PyPDF2都可以帮助您轻松实现这些任务。 在本文中&#xff0c;我们将探讨如何使用PyPDF2库提取PDF文件中的文本&…

vue学习之vue cli创建项目

安装 node.js https://nodejs.org/en 安装 vue cli npm install -g @vue/cli --registry=https://registry.npm.taobao.org创建项目 执行创建命令,回车vue create vue-cli-learning选择 “Manually select features”,回车 “空格” 关闭 Linter / Formatter 选项,回车

开源库源码分析:OkHttp源码分析(二)

开源库源码分析&#xff1a;OkHttp源码分析&#xff08;二&#xff09; 导言 上一篇文章中我们已经分析到了OkHttp对于网络请求采取了责任链模式&#xff0c;所谓责任链模式就是有多个对象都有机会处理请求&#xff0c;从而避免请求发送者和接收者之间的紧密耦合关系。这篇文章…

【数据结构】链表面试题

203.移除链表元素 206.反转链表 876.链表的中间结点 牛客.链表中倒数第k个结点 21.合并两个有序链表 牛客.链表分隔 牛客.链表的回文结构 160.相交链表 141.环形链表 142.环形链表2 1. 移除链表元素 题目描述 思路&#xff1a; 定义一个指针cur遍历整个链表&#xff0c;一个ta…

阿里云 linux 的nginx 配置uni-app的H5前端项目vue,后端接口阿里云。

背景 vue项目调用接口是阿里云的&#xff0c;H5网站也要部署到阿里云&#xff0c;2个不同的服务器&#xff0c;需要做nginx部署与api代理。 端口配置 首先当然是买个阿里云服务器&#xff0c;这里是配置是linux系统&#xff0c;配置访问的域名 &#xff0c;再接着&#xff1…

【李沐深度学习笔记】数据操作

本课观看地址 数据操作p1 N维数组样例 N维数组是机器学习和神经网络的主要数据结构 1-d向量就是样本的各特征抽象成一个向量&#xff1b;2-d矩阵的每一行是一个样本&#xff0c;每一行都是一个样本的特征向量 3-d可以表示RGB图片&#xff0c;RGB图像是一个三维数组&#xff…

MarkText如何实现图床-解决md上传到csdn图片不显示的问题

安装picgo-core-这样做无法自动上传截图 npm install picgo -g配置-此处以github为例 picgo set uploader github生成token settings>Developer settings>Personal access tokens>Token(classic) 配置MarkText 点击左下角的设置在弹出的窗口后选择左边的Image在右…

学习Bootstrap 5的第十三天

目录 提示框 如何创建提示框 实例 指定提示框的位置 实例 弹出框 如何创建弹出框 实例 指定弹出框的位置 实例 关闭弹出框 实例 提示框 提示框是一个小小的弹窗&#xff0c;在鼠标移动到元素上显示&#xff0c;鼠标移到元素外就消失。 如何创建提示框 Bootstrap…

VIRTIO-SCSI代码分析(2)VIRTIO 驱动分析

QEMU模拟出VIRTIO SCSI设备后&#xff0c;在虚拟机中呈现SCSI设备和PCIE设备。而在虚拟机中&#xff0c;PCIE设备与VIRTIO PCI驱动匹配触发virtio_pci_probe()注册生成virtio设备&#xff0c;而virtio设备与虚拟机中的virtio驱动匹配触发对应probe函数最终注册对应的驱动。 这里…

T5 和 mT5

T5Architecture&#xff1a;The Best One1. Main Body2. Embedding3. Pertrain and Finetune4. Multi-Task Pertrain and Finetune5. T5总结 mT5 T5&#xff1a;https://arxiv.org/pdf/1910.10683.pdf T5 blog: https://ai.googleblog.com/2020/02/exploring-transfer-learning…

无涯教程-JavaScript - AGGREGATE函数

描述 返回列表或数据库中的聚合。 AGGREGATE函数可以将不同的聚合函数应用于列表或数据库,并且可以选择忽略隐藏的行和错误值。 AGGREGATE函数具有两种不同的格式- 参考格式数组格式 参考格式 语法 AGGREGATE (function_num, options, ref1, [ref2] …)争论 Argument描述…

Linux驱动中断与时间篇——中断下半部的三种方法

文章目录 什么是中断下半部softirq软中断实例 tasklettasklet使用tasklet实例 work queue 什么是中断下半部 当产生一个中断时&#xff0c;会进入中断处理程序。 但中断处理程序必须快速、异步、简单的对硬件做出迅速响应并完成那些时间要求很严格的操作。 因此&#xff0c;对…

课程学习成绩评分F2计算器

前言&#xff1a; 由于大二的时候计算成绩太麻烦了&#xff0c;特别是综测评定小组还需要验证其他同学的是否正确&#xff0c;对于这种重复性高的工作&#xff0c;首先要想到的就是用计算机来实现&#xff0c;想起来上学期学了一点Java&#xff0c;就想简单的写一个程序。 C …

【PowerQuery】PowerBI Pro账户的自动刷新

在数据和模型通过发布或者上传方式上传到PowerBI Pro中,如何来进行数据刷新呢?数据源依然在本地,而数据模型已经发布到PowerBI Pro云端服务中。如果数据源更新,我们的模型如何进行自动刷新呢? PowerBI Pro如果需要基于本地数据源更新进行模型更新需要部署相应的数据网关服…