Linux操作系统使用及C高级编程

news2025/1/13 13:26:23

一、Linux介绍及环境配置

Linux介绍及环境配置

一、UNIX、LINUX和GNU简介

1、UNIX简介

2、Linux

1)操作系统内核+软件=操作系统

2)操作系统内核-能统一的管理硬件了

3)基于UNIX,UNIX不开源,对硬件要求专一,因此出现了Linux

3、GNU

Linux=linux内核+软件

二、环境介绍

三、解压文件

四、网络配置

1、桥接模式-和开发板通信首选,可以访问外网

局域网内可以、校园网或公司内网不可以

2、nat模式-访问外网首选,不能访问局域,不能和板子通信

主机虚拟出来的虚拟机

可以访问外网,但不能通过外网访问虚拟机

如果是校园网下载软件可以选择nat模式

3、仅主机模式-不能访问外网,也不能访问局域网

了解即可

4、网络配置

编辑-虚拟网络编辑器-还原默认设置(每次配置前还原)

1)先在虚拟网路编辑器设置

2)在网络适配器使用

重新配置

5、在浏览器中可以打开

如果打不开:设置DNS

默认网关一般是ip最后变成.1

二、软件包管理

一、软件包管理

(一)流行的软件包管理机制

1、APT软件包优点

1)检查和修复软件包依赖关系

2)在线获取软件包

(二)软件包的类型

1、二进制(deb)和源码包(deb-src)

2、file 文件包名-查看软件包类型

file命令-查看

3、软件包的命名

4、软件包的命名

二、在线软件包管理

(一)APT的工作原理

(二)更新软件源

1、vi 软件包:直接更改

2、图形界面更换软件源

3、更新完软件包之后要用sudo apt-get update更新(要保证网络通畅)

(三)APT相关命令

三、离线软件包管理

在安装和删除时需要sudo超级用户权限

 dpkg命令

注意删除的时候跟的是软件名不是软件包名

三、linux shell命令(文件搜索、文件处理、压缩解压)

一、查看文件相关命令

(一)查看命令

1、cat命令:从前往后读

cat+文件:显示代码

cat/cat -:输入什么输出什么

2、tac命令:从后往前读

3、more命令:显示打印了多少(只能向前,不能向后)

4、less +文件

上下键控制 q退出

5、head+文件名:默认显示前10行

(二)硬链接和软链接

1、创建链接的方式 

硬链接 :ln 文件名 硬链接名

通过硬链接可以修改文件的内容

软连接: ln -s 文件名 软连接名

inode号

2、将原来的文件移动(硬链接的优点)

3、从新移动回原文件

4、如果删除原文件,创建同名文件(软链接的优点)

二、文件搜索相关命令

(一)查找文件

1、按名查找

忽略大小写

2、按类型查找

3、符合条件

(二)查找文件内容

(三)其他相关命令

三、文件处理相关命令

1、cut命令

2、sed命令 修改

1、打印指定行 -n

2、删除指定行(不加-i,只在预览中可以看,加了-i,实际的文件会修改)

1)预览删除

2)实际删除

3、追加 a

1)在第一行追加hi

4、在当前行进行插入 i

5、替换 s(g表示的是全篇)

3、awk命令(按列操作)(默认以空格为分割)

1)打印行号个第一个字段

2)打印列数和第三个字段

3)打印最后一列

4)指定分隔符‘:’

5)第一行是linux的都打印出来

四、解压缩相关命令

(一)解压缩文件的意义

(二)解压缩相关的命令

1、移植性好,但不能归档只能压缩单个文件,不能压缩目录

分别压缩和解压,不会归档

2、

*解压全部bz2适配的压缩包

3、可以压缩目录,保留源文件;方便在Linux和windows间交换文件

4、zip保留源文件

5、tar:合并归档+压缩

四、linux shell命令(进程管理、用户管理)

一、进程管理相关命令

(一)进程的概念

1、进程的概念

 程序没有生命,进程有生命

(二)查看进程的命令

1、查看进程的命令-ps

PID是进程的唯一标识

PPID展示的是进程的父进程

2、top 实时查看进程 q退出

3、pstree-进程的子父信息以树状图的形式展开

(三)发送信号命令

二、用户管理相关命令

(一)用户管理相关文件介绍

(二)用户管理相关命令介绍

1、创建用户

在/etc/passwd中

2、修改用户密码

3、修改组名

4、修改家目录(修改路径)

既修改目录又修改用户名

-d:修改路径

-l:修改用户名

5、删除

五、linux shell脚本编程(概念、变量、语句)

一、shell脚本概述

(一)shell脚本概述

(二)shell脚本编写流程

1、先对命令进行测试

命令没有问题再写进集合中

本质上是shell命令的集合

2、第一个shell文件

3、shell脚本以.sh结尾

4、注释行#

一般shell脚本先要说明一下shell的版本

5、shell脚本是一个解释性的语言,不需要编译,边执行边检查错误

6、执行shell脚本:

1)bash+文件名

2)source+文件名

3)./shell.sh(前提是有执行权限)

二、shell脚本变量上

(一)变量的介绍

(二)变量的作用

环境变量、系统变量(bash)、自定义变量

(三)变量的命名要求

(四)变量的分类

1、定义变量的两种方式(在shell脚本下变量用大写)

注意在shell脚本下,等号的赋值前后是没有空格的

1)直接在终端定义

2)在代码中

2、删除变量unset(echo自带一个换行)

三、shell脚本变量下

(一)用户自定义变量

1、单引号和双引号

2、为变量赋另外一个变量的值的两种方式

1)反撇号(英文状态下)

2)双重$

3、数组

4、取消高亮

命令界面:noh

(二)只读变量(适用于变量或者文件名不能被修改)

1、只读变量可以被打印

2、只读变量不能被修改

3、只读变量不能被删除

4、只读变量只能强制关闭终端

(三)位置变量和预定义变量

1、$@:是依次显示每一个数据

$*:是作为一组输出

(四)环境变量

四、shell语句

(一)shell程序

(二)说明性语句-解释语句

1、

(三)功能性语句

以空格隔开

2、

``命令置换符

赋值符号=两边不加空格

加减号+/-两边要加空格

乘号比较特殊需要转译 \*

3、

1)测试字符串是否相等

相等为0

不相等为1

2)-z 测试字符串长度是否为0

3)-n 测试字符串长度是否不为0

 

4、整数测试

5、文件测试

(四)结构性语句

六、linux shell脚本编程(分支语句、循环语句)

一、shell分支语句

(一)分支语句(对标if)

1、echo $?

如果执行成功会返回0

如果执行失败会返回其他

2、分支语句if

1)test可以用[]代替(注意[]两端要用空格)

也可以打印多行

2)elfi

3)查找命令

查找用户是否存在

二、多路分支语句(对标switch case)

1、分号不能丢弃,最后是esac

三、shell循环语句

(一)for循环

1、

2、$@和$*的区别

1)$@和$*没有区别

2)”$*“将输入的作为一组,而“$@“和原来一样

3、for直接赋值

4、(())

(二)while循环

(三)循环控制语句(对标break和continue)

七、linux shell脚本编程(函数、练习)

一、函数的定义

二、函数的调用

2、传参

三、变量的作用域

1、全局

2、函数体内部

当是局部变量时

八、Linux TFFP服务搭建及使用

(一)TFTP服务器介绍

1、TFTP的介绍

1)什么是服务器

微信、qq、tb客户端

客户端-服务器转发

2)TFTP 简单传输文件 电脑-电脑 电脑-开发板 规定传输规则

端口号:每个进程和服务器都有唯一

2、TFTP文件传输的特点

3、TFTP服务器的实用场景

用命令可以直接下载所需的文件

(二)TFTP服务器搭建

1、配置介绍

1)网络通常

2)及时更新软件源

sudo apt-get update

3)安装服务器和客户端

tftpd:服务器

tftp:客户端

4)修改配置文件

创建tftpboot目录(作为服务器提供文件的目录)

将他的环境配置到服务器

-l:不依赖其他进程,直接启动

将来开发板下载的文件都在该目录下

5)修改服务器配置后更新

6)测试tftpboot如何使用

下载文件

上传文件

2、常见错误

九、Linux NFS服务搭建及使用

(一)NFS服务器介绍

1、

文件系统放在网络中,可以控制不同电脑的文件系统

开发板的文件系统在网络中,可以在服务器修改

(二)NFS服务器搭建 

1、配置介绍

1)安装软件

2)创建目录,新建文件测试nfs

3)配置nfs的路径

4)重启

5)挂载

本地挂载,挂载到/mnt

板子挂载到根目录/home/linux/nfs/rootfs

6)本地挂载和服务器可以互相共享

7)取消挂载

需要返回其他目录,关闭/mnt

使用sudo umount /mnt

2、常见错误

十、C结构体、结构体数组以及结构体指针

(一)结构体的意义

1、

2、结构体定义

注意分号

(二)结构体的概述

(三)结构体的定义和使用

(三)结构体数组

2、打印方式

(四)结构体指针

十一、结构体嵌套、大小及位域

一、结构体嵌套结构体

二、结构体的大小

(一)结构体的大小

(二)字节对齐

自动对齐,简化判断

(三)结构体大小的计算方法

自身对齐:数据类型

默认对齐:4

有效对齐:取自身和默认的最小值

地址除以有效必须是整除

最终地址,看最大有效 

三、位域

(一)位域的定义

(二)位于变量的说明

(三)位域的使用

十二、内存管理

内存管理

“专人转事”

不同数据放在不同的分区 

栈区和堆区是代码运行之后才可以,其他之前也可以

十三、动态分配内存

一、动态内存的使用

1、头文件

#include<stdlib.h>  

2、申请的空间不能多次释放

3、申请空间成功返回首地址

二、

内存泄露:申请了空间但没有来得及释放

十四、GCC编译工具

一、GCC编译工具(一)

(一)GCC简介

(二)GCC编译过程

1、预处理阶段 .i - 将#的头文件展开

头文件和宏定义

gcc -E test.c -o test.i

2、编译阶段

gcc -S gcc.i -o gcc.s

修改后编译成功

生成汇编文件

3、处理生成目标文件

 生成二进制文件

4、链接C库-生成可执行文件

5、简化

二、GCC编译工具(二)

(三)GCC常用选项

1、优化

2、指定头文件的位置

3、分文件

.h:宏定义、结构体共用体、声明函数

.c:函数原型

.c:主函数main

4、-L:指定链接库

三、条件编译

(一)条件编译的概念

1、分开编译

(二)在代码中条件编译

1、#ifdef

2、#ifdef

#else

#endif

3、#ifndef

4、#if 1

5、#define N 1

(三)GCC编译时条件编译

十五、Makefile用法及变量(自定义变量、自动变量、隐含变量)

一、Makefile的重要性

1、编译文件

2、正常编译,文件多的时候操作麻烦

3、决定能不能完成大型工程  

二、Makefile的概述

1、自动化编译-makefile

编译效率:make编译过的文件不再编译

uploading.4e448015.gif正在上传…重新上传取消

三、Makefile的基本语法

1、语法

2、使用

1)创建一个目录

2)和函数

3)和函数声明

4)减函数

5)减函数声明

6)主函数

7)普通编译

8)makefile编译

9)两步编译

此时编译,只会执行第一个目标sub.o

解决办法:将我们最后需要的test提到最前面,想要实现test需要执行下面的目标

10)修改test.c

此时只有两条命令会重新执行

生成test.o和生成test

由于sub.c和add.c没有发生变化

所以sub.o和add.o不需要重新编译生成

11)删除除了.c和可执行文件

常规:rm *.o

放到makefile中

也可以理解为:不加目标,只访问第二个目标,加了目标,会直接访问此目标

二、Makefile自定义变量

(一)Makefile创建变量的目的

1、

(二)自定义变量

(三)变量的赋值

1、=

2、?=

3、:=

4、+=追加赋值

三、Makefile自动变量

1、$+ $^ $<

2、@$ 不显示命令

3、打印

四、Makefile隐含变量

1、CC:编译器的名字

没有的编译器会报错

2、CFLAGS

3、头文件在不同目录

要指定头文件的路径 -I(绝对或相对)

4、$RM == rm -f

5、% % ==.o .c

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

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

相关文章

2023年【安全生产监管人员】考试题及安全生产监管人员考试内容

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年【安全生产监管人员】考试题及安全生产监管人员考试内容&#xff0c;包含安全生产监管人员考试题答案和解析及安全生产监管人员考试内容练习。安全生产模拟考试一点通结合国家安全生产监管人员考试最新大纲及安…

【OpenCV实现图像的算数运算,性能测试和优化,改变颜色空间】

文章目录 OpenCV功能概要图像的算数运算性能测试和优化改变颜色空间对象追踪 OpenCV功能概要 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习库&#xff0c;提供了丰富的图像处理和计算机视觉算法。它支持多种编程语言&…

【C++入门:C++世界的奇幻之旅】

1. 什么是C 2. C发展史 3. C的重要性 4. C关键字 5. 命名空间 6. C输入&输出 7. 缺省参数 8. 函数重载 9. 引用 10. 内联函数 11. auto关键字(C11) 12. 基于范围的for循环(C11) 13. 指针空值---nullptr(C11)05. 1. 什么是C C语言是结构化和模块化的语言&…

HDR图像处理软件 Photomatix Pro mac中文版新增功能

Photomatix Pro mac是一款专业的HDR合成软件&#xff0c;可以将不同曝光的多张照片合成为一张照片&#xff0c;而保留更多的细节。并且合成时可以帮助去除照片中的鬼影。Photomatix Pro提供两种类型的过程来增加动态范围&#xff0c;一个过程称为HDR色调映射&#xff0c;另一个…

【MySQL】数据库常见错误及解决

目录 2003错误&#xff1a;连接错误1251错误&#xff1a;身份验证错误1045错误&#xff1a;拒绝访问错误服务没有报告任何错误net start mysql 发生系统错误 5。 1064错误&#xff1a;语法错误1054错误&#xff1a;列名不存在1442错误&#xff1a;触发器中不能对本表增删改1303…

SAFe敏捷发布火车ART案例分析-汽车公司里面的百人级团队

“Nothing beats an Agile Team&#xff0c; except a team of Agile Teams” ---SAFe 本案例来自于某汽车公司里一个百人级团队&#xff0c;该团队所开发功能是完全面向车主的&#xff0c;追求最佳用户体验。 01—转型前面临困难 在该团队启用SAFe ART之前&#xff0c;多个1…

欧拉筛(线性筛)算法的理解

欧拉筛&#xff08;Eulers Sieve&#xff09;(又叫线性筛)是一种用于生成素数的高效算法。与传统的试除法不同&#xff0c;欧拉筛通过线性时间复杂度来筛选出一定范围内的素数。这个算法以瑞士数学家莱昂哈德欧拉&#xff08;Leonhard Euler&#xff09;的名字命名&#xff0c;…

vue3使用Element ui plus中MessageBox消息框+radio框配合使用

想要达到的效果 首先安装element ui plus 省略~~ 官网地址&#xff1a; https://element-plus.gitee.io/zh-CN/component/message-box.htmlhttps://element-plus.gitee.io/zh-CN/component/message-box.html 需要用到的 引入 import { h } from "vue"; import {E…

Mac/Linux安装使用 opengauss数据库步骤

问题背景 一般部署opengauss数据库在虚拟机中&#xff0c;Mac使用虚拟机步骤较为繁琐&#xff0c;可以使用Docker部署opengauss数据库。Linux也可以使用此方式来部署opengauss数据库。 1. 在docker官网下载Docker桌面版&#xff0c;m系列芯片选Apple Chip。如果是Linux就下载…

vue项目内嵌iframe,iframe如何自适应高度

vue项目内嵌iframe&#xff0c;iframe如何自适应高度 一、直接上代码&#xff08;google版本的&#xff09;上面代码只处理了google&#xff0c;其他几个浏览器可以自行参考一下 一、直接上代码&#xff08;google版本的&#xff09; <iframeid"iframeContainer"s…

2023 uniapp( vue3 + TS )使用canvas生成海报并保存,taro/微信小程序也适用

有段时间没写vue了&#xff0c;有点生疏了...... 1、代码有注释&#xff0c;完整代码如下 <template><view class"page"><canvas class"canvas" v-if"isShow" :style"{width:${canvasWidth}px,height:${canvasHeight}px}&…

算法学习(四)将一颗二叉搜索树转排序的双向链表

描述 输入一棵二叉搜索树&#xff0c;将该二叉搜索树转换成一个排序的双向链表。如下图所示 数据范围&#xff1a;输入二叉树的节点数 0 \le n \le 10000≤n≤1000&#xff0c;二叉树中每个节点的值 0\le val \le 10000≤val≤1000 要求&#xff1a;空间复杂度O(1)O(1)&#x…

无障碍阅读他人开源项目结构:看完本文,你将信心满满

先看看阿里是怎么约定的 我印象中&#xff0c;以前在看《阿里巴巴Java开发手册》时&#xff0c;好像有关于工程结构和应用分层相关的内容&#xff0c;于是我回翻了一下&#xff0c;果然有&#xff1a; 它这里面讲的内容大概就是&#xff1a;关于一个正常的企业项目里一种通用的…

项目中拖拽元素,可以使用html的draggable属性,当然也可以用第三方插件interact

项目中拖拽元素&#xff0c;可以使用html的draggable属性&#xff0c;当然也可以用第三方插件interact 一、安装二、引用三、使用 一、安装 npm install interactjs二、引用 import interact from interactjs三、使用 <div class"drag_box"> &…

Linux虚拟网络设备—Veth Pair

veth是Virtual Ethernet Device的缩写&#xff0c;是一种成对出现的Linux虚拟网络接口设备。它最常用的功能是用于将不同的Linux network namespaces 命名空间网络连接起来&#xff0c;让二个namespaces之间可以进行通信。我们可以简单的把veth pair理解为用一根网线&#xff0…

2023年【加氢工艺】免费试题及加氢工艺在线考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 加氢工艺免费试题考前必练&#xff01;安全生产模拟考试一点通每个月更新加氢工艺在线考试题目及答案&#xff01;多做几遍&#xff0c;其实通过加氢工艺在线考试很简单。 1、【单选题】《中华人民共和国职业病防治法…

ES6初步了解Symbol的用法

ES6中为我们新增了一个原始数据类型Symbol&#xff0c;让我为大家介绍一下吧&#xff01; Symbol它表示是独一无二的值 Symbol要如何创建 第一种创建方式&#xff1a; let sy Symbol()第二种创建方式&#xff1a; let sy Symbol.for()具体独一无二在哪呢&#xff1f;它们的地…

阻抗导纳控制理解

书籍《Modern Robotics - Mechanics , Planning, and Control》中关于阻抗控制和导纳控制的部分&#xff1a; 下面结合上边的内容谈一谈我对导纳控制的理解。 1、质量-弹簧-阻尼 首先&#xff0c;不论是阻抗控制&#xff0c;还是导纳控制&#xff0c;他们同根同源&am…

计算机网络_03_tcp/ip四层模型

文章目录 1.为什么会有tcp/ip?2.tcp/ip是什么?3.为什么会有tcp/ip四层模型?4.tcp/ip四层模型介绍 1.为什么会有tcp/ip? 早期的计算机(计算机网络没有出现之前)几乎都是各自为战, 各种操作系统厂家百花齐放, 市面上的大部分计算机使用的都是不同的操作系统, 为每个人提供定…

【rk3568-linux】 rk3568x_linux-- 编译说明

概述 一个好的安装教程能够帮助开发者完成更便捷、更快速的开发。书山有路勤为径&#xff0c;学海无涯苦作舟。我是秋知叶i、期望每一个阅读了我的文章的开发者都能够有所成长。 开发环境 开发环境&#xff1a;ubuntu18 文章目录 概述开发环境一、选择型号二、全自动编译三、…