Linux 之 安装软件、GCC编译器、Linux 操作系统基础

安装软件、GCC编译器、Linux 操作系统基础

学习任务:

  1. 安装 Vmware虚拟机、掌握Ubuntu 系统的使用
  2. 认识 Ubuntu 操作系统的终端和 Shell
  3. 掌握软件安装、文件系统、掌握磁盘管理与解压缩
  4. 掌握 VIM 编辑器、Makefile 基本语法
  5. 熟悉 Linux 常见指令操作

安装好开发软件,并进行一些实验
能快速写出常见的Linux指令操作
能背出GCC编译的具体流程
熟悉利用GCC进行多文件编译


学习环境:VM安装的ubuntu18.04
在这里插入图片描述

文章目录

  • 软件安装:
  • 文件系统:
  • 磁盘管理:
  • 解压缩:
  • 常用命令:
  • 编译单个c文件
  • 多个C文件编译以及Makefile:

软件安装:

1、apt工具安装
apt-get instal update
apt-get install xxx
sudo apt-get install xxx

2、deb
下载软件安装包1.deb
sudo dpkg -i xxx.deb

3、Ubuntu自带软件app

文件系统:

Linux下 “ / ” 就是根目录,所有的目录都是由根目录衍生出来的

/bin 	存放二进制可执行文件,这些命令在单用户模式下也能够使用。可以被root和一般的账号使用。
/boot	Ubuntu内核和启动文件,比如vmlinuz-xxx。gurb引导装载程序。
/dev	设备驱动文件
/etc	存放一些系统配置文件,比如用户账号和密码文件,各种服务的起始地址。
/home	系统默认的用户主文件夹,一般创建用户账户的时候,默认的用户主文件夹都会放到此目录下。
/lib	存放库文件
/media	此目录下放置可插拔设备,比如SD卡,或者U盘就是挂载到这个目录中。
/mnt	用户可使用的挂载点,如果要挂载一些额外的设备,那么就可以挂载到此处。
/opt	可选的文件和程序存放目录,给第三方软件放置的目录。
/root	root用户目录,也就是系统管理员目录。
/sbin	和/bin类似,也是存放一些二进制可执行文件。sbin下面的一般是系统开机过程中所需要的命令。
/srv	服务相关目录。比如网络服务。
/sys	记录内核信息,虚拟文件系统。
/tmp	临时目录
/var	存放一些变化的文件,比如日志文件
/usr	usr不是user的缩写,而是UNIX Software Resource的缩写,存放于系统用户有关的文件,会占用很大的存储空间!
/proc	虚拟文件系统,数据放置到内存中,存放系统运行信息

绝对路径:从根目录“/”算起的路径。

相对路径:相对于目前路径的文件名写法,比如./home/zzk。不是以“ / ”开头的就行

“. ”代表当前路径,也可以 用“./ ”表示

“… ”代表上一层目录,也可以用“…/ ”表示

磁盘管理:

Ubuntu磁盘文件

/dev/sd* 文件,此类文件是磁盘设备文件,并不能直接访问磁盘,必须要将磁盘挂载到某一个目录下才可以访问

/dev/sdb 和 /dev/sdb1 是U盘的设备文件

/dev/sdb 表示U盘,/dev/sdb1 表示U盘的第一个分区

磁盘和目录的容量查询命令

df:列出文件系统的整体磁盘使用量。主要查看个文件系统的使用量

du:评估文件系统的磁盘使用量,主要查看单个文件的大小

磁盘挂载与卸载,分区和格式化

磁盘的挂载和卸载
mount和umount命令

磁盘分区
fdisk命令

磁盘格式化
磁盘分区创建好以后就可以格式化磁盘,使用命令mkfs
如:mkfs -t vfat /dev/sdx

解压缩:

1、Linux下常用的压缩格式
Linux下常用的压缩扩展名有:.tar、.tar.bz2、.tar.gz2、Windows下 `7ZIP` 软件的安装
因为Linux下很多文件是.bz2,.gz结尾的压缩文件,因此需要在windows下安装7ZIP软件3、gzip压缩工具 
.gzip工具负责压缩和解压缩.gz格式的压缩包
gzip xxx			//压缩
gzip -d xxx.gz	//解压缩gzip对文件夹进行压缩
gzip -r xxx		//对文件夹进行压缩
gzip -rd xxx.gz	//对文件夹进行解压缩gzip虽然可以对文件夹进行压缩,但是并不能提供打包的服务,只是对文件夹中的所有文件进行了单独的压缩4、bzip2压缩工具
和gzip类似,只是bzip2工具负责压缩和解压缩.bz2格式的压缩包。
bzip2 -z xxx			//压缩
bzip2 -d xxx.gz	//解压缩5、tar 打包工具
tar工具参数:
-f,使用归档文件或 ARCHIVE 设备
-c:创建新归档,创建压缩文件
-x:从图档中解出文件,解压缩
-j:使用bzip2压缩格式
-z:使用gzip压缩格式
-v:打印出命令执行过程tar工具提供打包服务,就是将多个文件打包,比如
tar -vcf test.tar test	//将test打包成test.tar
tar -vxf test.tar		//解包上面的tar命令只提供了打包和解包的功能,tar在提供打包和解包的同时使用gzip/bzip2进行压缩,实现类似windwos下winRAR软件的命令对 `.tar.bz2` 进行压缩和解压缩tar -vxjf xxx.tar.bz2	解压缩tar -vcjf xxx.tar.bz2 xxx 压缩对 `.tar.gz` 进行压缩和解压缩`tar -vxzf	xxx.tar.gz`		//解压缩`tar -vczf xxx.tar.gz xxx` 	//压缩一般认为 .tgz 文件就等同于 .tar.gz 文件, 因此它们的压缩方式是相同的6、其他格式的压缩和解压缩`.rar格式`需要先安装rar:sudo apt-get install rarrar x xxx.rar		//解压缩rar a xxx.rar xxx	//压缩`.zip格式 `(可能需要先安装)
zip格式压缩使用“zip“命令:
zip -rv xxx.zip xxx	zip格式解压缩使用“unzip”命令:
unzip -v xxx.zip

常用命令:

Shell命令
1、目录信息查看命令ls ls -a 显示目录所有文件及文件夹,包括隐藏文件,比如以.开头的2、目录切换命令cd 3、当前路径显示命令pwd4、系统信息查看命令uname5、清理屏幕命令clear6、显示文件内容命令cat7、切换用户身份命令sudo8、文件拷贝命令cp9、切换用户命令su10、移动文件命令mv11、创建文件夹命令mkdir12、创建文件命令touch13、删除命令rm14、目录删除命令rmdir15、显示网络配置信息命令ifconfig16、重启命令reboot17、关机命令poweroff18、系统帮助命令man19、数据同步写入磁盘命令sync20、查找文件命令find21、查找内容命令grep22、文件夹大小查看命令du23、磁盘空间检查命令df24、使用gedit打开某个文件命令gedit25、当前的系统进程查看命令ps26、进程实时运行状态查看命令top27、文件类型查看命令file

编译单个c文件

GCC 编译器对程序的编译下图所示,分为 4 个阶段:预处理(预编译)、编译和优化、汇编和链接。GCC 的编译器可以将这 4 个步骤合并成一个。 先介绍一个每个步骤都分别做了写什么事儿:

预处理:
在这个阶段主要做了三件事: 展开头文件 、宏替换 、去掉注释行
这个阶段需要GCC调用预处理器来完成, 最终得到的还是源文件, 文本格式

编译:
这个阶段需要GCC调用编译器对文件进行编译, 最终得到一个汇编文件

汇编:
这个阶段需要GCC调用汇编器对文件进行汇编, 最终得到一个二进制文件

链接:
这个阶段需要GCC调用链接器对程序需要调用的库进行链接, 最终得到一个可执行的二进制文件

.c 源文件
.i 预处理后的 C 文件
.s 编译之后得到的汇编语言的源文件
.o 汇编后得到的二进制文件
在这里插入图片描述

gcc xxx.c

执行 ./输出文件名

.c源代码文件需要经过预处理、编译、汇编和链接四个阶段,才能生成可执行文件;
默认a.out ,自定义则gcc xxx.c -o 自定义名gcc hello.c -o hello
"gcc hello.c -o hello"就直接实现了上述四个阶段,生成了最终的hello可执行文件
在这里插入图片描述

多个C文件编译以及Makefile:

在这里插入图片描述
gcc后面接一串.c

但这种情况当文件好多的时候该怎么处理?
修改一个文件但所有文件都要编译,浪费时间
所以可以先逐个编译 .c ,然后见生成的.o文件链接成一个文件,当某个 c 文件修改后,只需要对该文件进行编译,然后链接回去
在这里插入图片描述
但是,这样也存在很多重复劳动
如果修改的文件一多, 自己可能都不记得哪个文件修改过了,
然后忘记编译,然后寄,为此我们需要这样一个工具:
1、如果工程没有编译过,那么工程中的所有 .c 文件都要被编译并且链接成可执行程序。
2、如果工程中只有个别C文件被修改了,那么只编译这些被修改的 .c 文件即可。
3、如果工程的头文件被修改了,那么我们需要编译所有引用这个头文件的C文件,并且链接成可执行文件。

rm *.o
rm main

删除刚才生成的,试一下makefile
main可执行文件与main.o、input.o、calcu.o等目标文件
gcc -o将多个目标文件链接生成可执行文件main
在这里插入图片描述
执行make则会运行编译
执行make clean则会删除上一次编译生成的.o等

如图,运行make,开始编译
当我在之后进入input.c文件,修改了打印内容,这时候再次运行make
在这里插入图片描述
发现只执行了input.c的编译,不会去重复编译其他未修改文件,貌似是根据文件修改时间来判断的

PS:
编译过程中,时间戳关系主要是指源文件和目标文件的修改时间之间的比较。

当使用 Make 等工具进行编译时,它会记录每个源文件和对应的目标文件的最后修改时间。如果源文件的修改时间比目标文件的修改时间新,这意味着源文件在目标文件生成后被修改过。在这种情况下,Make 工具会判断该源文件需要重新编译,以确保生成的目标文件是基于最新的源文件内容。

例如,假设你有一个源文件 input.c 和对应的目标文件 input.o。如果 input.c 在某个时间点被修改了,那么它的修改时间就会更新为新的时间。当再次运行 Make 时,Make 会检查 input.c 和 input.o 的时间戳。如果 input.c 的时间戳比 input.o 的时间戳新,就会重新编译 input.c 生成新的 input.o。 这种基于时间戳的判断机制可以避免不必要的重复编译,提高编译效率,尤其是在大型项目中,当只有部分文件发生变化时,无需重新编译所有文件。

问题记录
sudo vi /etc/vim/vimrc
改设置
set ts=4
set nu
但左右移动光标输入的内容就会变化 ----- 重装vim
在这里插入图片描述
错误:发现交换文件/etc/vim/.vimrc.swp -- 删了就行

:wq无法退出? --先ctrl+c停止,再:wq即可保存退出

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

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

相关文章

电源管理芯片PMIC

一、简介 电源管理芯片(Power Management Integrated Circuits,简称PMIC)是一种集成电路,它的主要功能是在电子设备系统中对电能进行管理和控制,包括但不限于以下几点: 电压转换:将电源电压转换…

IndexTree、AC自动机

一、引言。 IndexTree和线段树有一些联系,这里我们再重新解释一下线段树用来解决什么样的一个问题,线段树解决的是一个区间查询和区间更新的一个问题,比如说我有一个数组在 L....R 上统一加上V,或者在L.....R上,统一所…

硬件设计-利用环路设计优化PLL的输出性能

目录 前言 问题描述 问题分析步骤 杂散源头排查 245.76M 参考相噪: 30.72M VCXO的相噪性能测试如下: 解决方案 前言 LMK04832是TI 新发布的低抖动双环去抖模拟时钟, 其最高输出频率可以到达3250MHz, 输出抖动极低,3200MHz…

Sentinel学习

系列文章目录 JavaSE基础知识、数据类型学习万年历项目代码逻辑训练习题代码逻辑训练习题方法、数组学习图书管理系统项目面向对象编程:封装、继承、多态学习封装继承多态习题常用类、包装类、异常处理机制学习集合学习IO流、多线程学习仓库管理系统JavaSE项目员工…

Linux基本命令及vim应用实训练习

Linux基本命令及vim应用实训练习 1. 2. 3. 4. 5. 使用man cp找出

序列化与反序列化基础及反序列化漏洞(附案例)

参考文章: [web安全原理]PHP反序列化漏洞 - 笑花大王 - 博客园 (cnblogs.com) 一、概念 为了能有效的存储数据而不丢失数据的类型和内容,经常需要通过序列化对数据进行处理,将数据进行序列化后,会生成一个字符串,字符…

linux安装minianconda

文章目录 我的配置从清华镜像源里下载minianaconda安装自定义安装位置是否关闭打开终端默认进入anaconda的设置?🌕配置清华镜像源 我的配置 ubuntu 22.04LTS 从清华镜像源里下载minianaconda https://mirrors.tuna.tsinghua.edu.cn/anaconda/minicond…

带你深入浅出设计模式:七、代理模式:设计模式中的中间人

此为设计模式第七谈! 用总-分-总的结构和生活化的例子给你讲解设计模式! 码农不易,各位学者学到东西请点赞收藏支持支持! 开始部分: 总:代理模式为其他对象提供一个代理来控制这个对象的访问&#xff0c…

openpnp - 坐标文件中的元件0角度如果和编带规定的角度不一样,需要调整贴片任务中的元件旋转角度

文章目录 openpnp - 坐标文件中的元件0角度如果和编带规定的角度不一样,需要调整贴片任务中的元件旋转角度笔记查看自己图纸中的封装的0角度方法贴片任务的角度值范围编带规定的0角度根据编带规定的元件0角度来调整贴片的元件旋转角度如果是托盘飞达备注备注END ope…

Python并发编程(3)——Python多线程详解介绍

左手编程,右手年华。大家好,我是一点,关注我,带你走入编程的世界。 公众号:一点sir,关注领取python编程资料 Python 的多线程入门是非常简单的,直接导入threading模块就可以开始多线程之旅了。模…

弧形导轨驱动器高效使用技巧!

弧形导轨驱动器是一种用于驱动滑座沿着导轨做弧线运动的设备,其用方法因具体型号和应用场景的不同而有所差异,通常可以归纳为以下几个步骤: 1、安装前要明确弧形导轨的使用需求,根据需求选择合适的弧形导轨驱动器,准备…

深度学习基础—目标检测算法

目录 1.滑动窗口算法 2.滑动窗口的卷积实现 (1)1*1卷积的作用 (2)全连接层转化为卷积层 (3)在卷积层上实现滑动窗口 3.Bounding Box预测(YOLO算法) 1.滑动窗口算法 假如要构建一…

【AI知识点】泊松分布(Poisson Distribution)

泊松分布(Poisson Distribution) 是统计学和概率论中的一种离散概率分布,通常用于描述在固定时间或空间内,某个事件发生的次数。该分布适用于稀有事件的建模,特别是当事件发生是独立的、随机的,且发生的平均…

PCL 点云体素滤波

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 体素滤波实现 2.1.2 可视化函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接: PCL点云算法与项目实战案例汇总(长期更新&#xf…

【RISCV指令集手册】向量扩展v1.0

概述 从rvv 0.9说起 此前写过向量扩展0.9的阅读记录,三年已过,本以为不再参与RVV的相关开发,奈何造化弄人,旧业重操,真就世事难料呀。 总的来说1.0版本相比0.9版本的扩充了较多内容,但大部分为指令功能的…

YOLOv8改进线性注意力模块 ICCV2023 FLatten Transformer

1,原理部分 论文地址:2308.00442 (arxiv.org) 在将 Transformer 模型应用于视觉任务时,自我注意的二次计算复杂性一直是一个持续的挑战。另一方面,线性注意力通过精心设计的映射函数近似 Softmax 操作,通过其线性复杂性提供了一种更有效的替代方案。然而,当前的线性注意…

使用LlamaIndex构建RAG

使用LlamaIndex构建RAG 一、什么是LlamaIndex二、环境准备2.1虚拟环境创建及基础安装2.2安装llamaIndex相关2.3下载词向量模型2.4下载NLTK资源2.5准备LLM模型2.6不使用RAG情况下的问答效果2.7使用llama-index的效果2.7.1安装llama-index词嵌入依赖2.7.2获取知识库2.7.3准备代码…

信号检测理论(Signal Detection Theory, SDT)

信号检测理论(Signal Detection Theory, SDT)模拟是一种实验设计,用于研究和理解在存在噪声或不确定性的情况下如何做出决策。在心理学、认知科学、工程学和许多其他领域,信号检测理论都非常重要。 一、基础概念: 在信…

TIBCO Jaspersoft Studio 创建数据源并进行测试

1、连接数据源: 右键Data Adapters ,然后新建 根自己的情况,进行创建,这里测试用的是excel表格。 2、新建Jasper Report,然后我们选择刚刚创建的数据源 这样report就建好了,然后我们进行测试。 3、先把不…

【源码+文档】基于SpringBoot+Vue的酒店管理系统

🚩如何选题? 如何选题、让题目的难度在可控范围,以及如何在选题过程以及整个毕设过程中如何与老师沟通,这些问题是需要大家在选题前需要考虑的,具体的方法我会在文末详细为你解答。 🚭如何快速熟悉一个项目…