一、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编译过的文件不再编译
正在上传…重新上传取消
三、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