当前位置: 首页 > news >正文

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即可保存退出

相关文章:

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

安装软件、GCC编译器、Linux 操作系统基础 学习任务: 安装 Vmware虚拟机、掌握Ubuntu 系统的使用认识 Ubuntu 操作系统的终端和 Shell掌握软件安装、文件系统、掌握磁盘管理与解压缩掌握 VIM 编辑器、Makefile 基本语法熟悉 Linux 常见指令操作 安装好开发软件&…...

[CTF夺旗赛] CTFshow Web13-14 详细过程保姆级教程~

前言 ​ CTFShow通常是指网络安全领域中的“Capture The Flag”(夺旗赛)展示工具或平台。这是一种用于分享、学习和展示信息安全竞赛中获取的信息、漏洞利用技巧以及解题思路的在线社区或软件。参与者会在比赛中收集“flag”,通常是隐藏在网络环境中的数据或密码形…...

【Matlab】Matlab 导入数据.csv或者.xlsx文件,然后使用这些数据来绘制图表

Matlab 导入数据.csv或者.xlsx文件,然后使用这些数据来绘制图表 初始数据 filename C:\Users\jia\Desktop\yadian\data\1Hz 2024_09_12 17_10_06.csv; 代码: clc;clear close all; % 读取Excel文件 filename C:\Users\jia\Desktop\yadian\data\1Hz …...

Awaken Likho恶意组织利用高级网络工具对俄罗斯政府发起“猛攻”

近日,俄罗斯政府机构和工业实体遭遇了一场名为“ Awaken Likho ”的网络活动攻击活动。 卡巴斯基表示,攻击者现在更倾向于使用合法MeshCentral平台的代理,而不是他们之前用来获得系统远程访问权限的UltraVNC模块。这家俄罗斯网络安全公司详细…...

【洛谷】P10938 Vani和Cl2捉迷藏 的题解

【洛谷】P10938 Vani和Cl2捉迷藏 的题解 洛谷传送门 题解 噢噢噢噢哦哦哦,神奇网络流,有点像 Floyd 在图上选取若干条互不相交的路径,并让这些路径不重不漏覆盖到每一个点。符合上述要求且总数最小的方案就叫做原图的最小路径点覆盖&…...

三角形面积 python

题目: 计算三角形面积 代码: a int(input("请输入三角形的第一个边长:")) b int(input("请输入三角形的第二个边长:")) c int(input("请输入三角形的第三个边长:")) s (abc) / 2 #…...

【C++第十七章】二叉搜索树

【C第十七章】二叉搜索树 二叉搜索树的介绍🧐 二叉搜索树又称二叉排序树,它可能是空树,也可能是具有以下性质的二叉树: 若它的左子树不为空,则左子树上的所有节点的值小于根节点的值若它的右子树不为空,则…...

Springboot 文件上传

文件上传,是指将本地图片、视频、音频等文件上传到服务器,供其他用户浏览或下载的过程。 文件上传前端需要完成的准备: 需要提交一个form表单,表单必须包含以下三点(上传文件页面三要素) …...

简单认识redis-5 jdbc 与 jedis 使用的区别

概念与功能定位 JDBC (Java Database Connectivity) JDBC 是 Java 语言用于连接数据库(如 MySQL、Oracle 等关系型数据库)的标准 API。它提供了一套统一的接口,让 Java 程序能够与各种数据库进行交互,执行 SQL 语句(如…...

Unity3d动画插件DoTween使用指南

1、DoTween是什么? DoTween是一款对象动画类插件,它是一款针对Unity 3D编辑器的、快速高效的、安全的、面向对象的补间动画引擎,并且对C#语言开发做出了很多的优化。另外,它使得开发者无需通过Unity内置的Animator或Coroutines即可…...

学习函数知识

学习函数是编程中的重要基础,以下是关于函数的详细知识点: 1. 函数的定义 函数是一组执行特定任务的代码块,可以重复使用。在 JavaScript 中,可以通过以下方式定义函数: 函数声明: function functionNam…...

案例-表白墙简单实现

文章目录 效果展示初始画面提交内容后画面&#xff08;按键按下&#xff09; 代码区 效果展示 初始画面 提交内容后画面&#xff08;按键按下&#xff09; 代码区 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">…...

和鲸科技创始人范向伟:拐点即将来临,AI产业当前的三个瓶颈

在科技迅猛发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;无疑已经成为引领新一轮产业革命的核心动力之一。全球企业纷纷拥抱AI技术&#xff0c;试图借助其变革力量在竞争中突围&#xff0c;然而业界对AI产业化的拐点何时来临却众说纷纭。毕竟AI技术从实验室到商业…...

基于函数计算FC 部署 ComfyUI实现AI生图 的优势

基于函数计算FC 部署 ComfyUI实现AI生图 的优势 部署ComfyUI实现AI生图使用函数计算FC 一键部署ComfyUI 绘画平台的优势有哪些&#xff1f; 在文章开始之前&#xff0c;先来看一下基于函数计算FC 部署 ComfyUI实现AI生图 的大概步骤&#xff0c;整个基础部署操作比较简单。即便…...

瑞萨IDE:CS+ for CC编译过程中执行脚本文件

最近发现使用CS for CC IDE发现一个很有意思的功能。编译工程过程中&#xff0c;IDE自动执行Python脚本和批处理脚本&#xff0c;极大地提高开发效率。 编写好脚本文件后&#xff0c;在IDE中选择CC-RH&#xff08;Build Tool&#xff09;->Common Options->Others。 Co…...

在 CentOS 上安装 Docker 的步骤

在 CentOS 上安装 Docker 的步骤如下&#xff1a; 步骤 1&#xff1a;更新系统包 sudo yum update -y步骤 2&#xff1a;安装依赖包 确保安装了 yum-utils、device-mapper-persistent-data 和 lvm2&#xff0c;这些是 Docker 运行所需的依赖项&#xff1a; sudo yum instal…...

【C#生态园】探索地理信息系统软件套件与库:功能、API和应用

探索地理信息系统&#xff1a;软件套件与库详解 前言 地理信息系统&#xff08;GIS&#xff09;是当今世界上广泛使用的技术之一&#xff0c;它以空间数据为基础&#xff0c;能够提供丰富的地理信息分析和可视化功能。在GIS领域&#xff0c;有许多优秀的软件套件和库&#xf…...

Jupyter的使用分享

文章目录 碎碎念安装方法1.安装Anaconda方法2.通过库的安装方式 启动使用教程1.指定目录打开2.启动后的简单使用 小结 碎碎念 前情提示 之前与许多小伙伴交流的时候&#xff0c;发现大家对于pycharm更容易上手&#xff08;可能是比较好设置中文的原因&#xff09;&#xff0c;在…...

24龙信比赛复现

案情简介&#xff1a; 近期&#xff0c;某公安机关接到受害人报案&#xff1a;通过微信添加认识一位相亲中介客服&#xff0c;客服邀约其与“相亲”对象进行选妃&#xff0c;受害人上钩后&#xff0c;整个过程被涉案团伙录音录像&#xff0c;同时&#xff0c;该客服以有更多的…...

PHP反射机制

HP反射机制是PHP语言中的一个强大特性&#xff0c;它允许程序在运行时检查、获取和操作类、方法、属性等元素的信息。这一机制极大地提高了PHP代码的灵活性和可维护性&#xff0c;使得开发者能够在不修改原有代码结构的情况下&#xff0c;动态地了解并操作代码。以下是对PHP反射…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

jdbc查询mysql数据库时,出现id顺序错误的情况

我在repository中的查询语句如下所示&#xff0c;即传入一个List<intager>的数据&#xff0c;返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致&#xff0c;会导致返回的id是从小到大排列的&#xff0c;但我不希望这样。 Query("SELECT NEW com…...

node.js的初步学习

那什么是node.js呢&#xff1f; 和JavaScript又是什么关系呢&#xff1f; node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说&#xff0c; 需要在node.js的环境上进行当JavaScript作为前端开发语言来说&#xff0c;需要在浏览器的环境上进行 Node.js 可…...

云原生安全实战:API网关Envoy的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口&#xff0c;负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...

EasyRTC音视频实时通话功能在WebRTC与智能硬件整合中的应用与优势

一、WebRTC与智能硬件整合趋势​ 随着物联网和实时通信需求的爆发式增长&#xff0c;WebRTC作为开源实时通信技术&#xff0c;为浏览器与移动应用提供免插件的音视频通信能力&#xff0c;在智能硬件领域的融合应用已成必然趋势。智能硬件不再局限于单一功能&#xff0c;对实时…...

C++中vector类型的介绍和使用

文章目录 一、vector 类型的简介1.1 基本介绍1.2 常见用法示例1.3 常见成员函数简表 二、vector 数据的插入2.1 push_back() —— 在尾部插入一个元素2.2 emplace_back() —— 在尾部“就地”构造对象2.3 insert() —— 在任意位置插入一个或多个元素2.4 emplace() —— 在任意…...