0、大纲
0.1、Linux
软件安装,用户管理,进程管理,shell 命令,硬链接和软连接,解压和压缩,功能性语句,结构性语句,分文件,make工具,shell脚本
0.2、C高级
函数指针,指针函数,函数指针数组,c语言补充(枚举,共用体,存储类型,递归函数)
0.3、课程介绍
0.3.1嵌入式系统
把软件嵌入到硬件里面
嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。
0.3.2、Linux起源
寻·科普|第二期:聊聊Linux的前世今生
1965 麻省理工 贝尔实验室 奇异公司
multics -->满足同时登录300个用户
失败--》资金
1969 汤姆森.肯 (太空旅行游戏) 4个周 unics
2个人同时登录使用,汇编语言
1970 unix
丹尼斯·里奇-->c语言之父
贝尔实验室,unics的基础进行二次开发,c语言写,命名为unix
推广--》大学推广
两个分支:
伯克利分校(TCP/IP) systemV
1983 斯托曼 GNU(自由软件组织) libc gcc make bash解析器
GPL 协议--》开源协议 *****
1991 林纳斯--》linux开源不收费
1、UNIX和Linux的区别
1)Linux是开发源代码的自由软件,而UNIX是对源代码实行知识产权保护的传统商业软件
2)UNIX系统大多与硬件配套,而Linux则可运行在多种硬件平台上
2、了解不同操作系统的内核
Windows —— NT
ubuntu —— Linux
Android —— Linux
macOs ios —— UNIX
1、系统命令
1.1、查看系统版本
查看操作系统版本
lsb_release -a 或者 -r
cat /etc/issue -->查看文件内容
查看内核版本
uname -a 或者 -r
cat /prod/version --> 文件中查看
1.2、内核系统架构
应用层:app、shell命令
内核层:(五大功能)
内存管理、文件管理、设备管理、网络管理、进程管理
硬件层:鼠标、键盘、lcd
1.3、系统关机或重启
关机:
sudo shutdown -h now :立即关机
sudo shutdown -h +时间 “提示语句” : 定时关机
// 时间前面的“+”必须有,时间单位是min
sudo shutdown -h 时间:定时关机
// 时间前面没有“+”,时间单位是几点几点,按照Ubunatu的时间
重启:
sudo shutdown -r now:立即重启
sudo shutdown -r +时间:定时重启
sudo shutdown -r 时间:定时重启
sudo reboot now:立即重启
1.4、网络配置
1.4.1、虚拟机提供的网络类型
1)桥接模式:主机和虚拟机分别拥有不同的ip地址,可以实现和外界设备通信
2)NAT模式:也可以联网,但是和主机共用同一个ip地址,外界无法识别虚拟机和主机发送的信息
3)仅主机模式:不能联网,只能和主机通信
1.4.2、如何查看虚拟机是否联网
ping www.baidu.com
1.4.3、配置桥接网络
1)保证虚拟机提供了桥接模式
2)保证虚拟机可以设置桥接网络
菜单栏----->编辑------>虚拟网络编辑器
更改设置(如没有桥接模式)----->添加网络(添加桥接网络)
1.4.4、问题:无法添加桥接网络
1)尝试还原默认设置后,再重新添加桥接网络
2)如果1没有用,找到VMware的软件安装包,双击安装包修改该软件
3)如果1和2都没有用,安装更高版本的VMware
桥接到主机网卡
如果自动失败,手动找到主机的网卡
1)找到网络---->属性
3)找到主机网卡后,不选自动直接桥接到主机具体的网卡
以上解决之后没有
可以尝试以下命令
sudo nmcli network off
sudo nmcli network on
1.5、Linux下的软件安装
1.5.1、软件包管理机制
debian linux:deb 软件包:ubuntu用
1)二进制软件包(deb):.deb —— 安装软件的软件包
2)源码包(deb-src): .dsc ——
redhat linux:rpm 软件包
1.5.2、软件包命令
1.5.3、软件包的管理工具
1、dpkg:离线安装
特点:安装时需要软件包存在,不需要从镜像站点获取软件包,不需要联网,不能检查软件的依赖关系
dpkg 命令:
sudo dpkg -i 软件包完整名称 // 安装软件
sudo dpkg -r 软件名 // 卸载软件
sudo dpkg -P 软件名 // 完全卸载
sudo dpkg -s 软件名 // 查看软件安装状态
sudo dpkg -L 软件名 // 列出软件目录信息
2、apt:在线安装
特点:安装时不需要软件包存在,需要从镜像站点获取软件包,需要网络,能检查软件之间的依赖关系
apt-get命令
sudo apt-get install 软件名 // 下载并安装软件
sudo apt-get remove 软件名 // 卸载软件
sudo apt-get remove --purge 软件名 // 完全卸载
/var/cache/apt/archives // 软件安装包默认存放的路径
sudo apt-get clean //清除下载的软件包
sudo apt-get download 软件名 //下载软件包,但是不安装
会出提示:只下载,不安装
sudo apt-get upgrade 软件名 // 更新软件
sudo apt-get update // 更新源,镜像站点源
3、更新软件源
更新ubuntu下载软件的来源
因为Ubuntu默认是国外的软件源,更新成国内的软件源
清华源:ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
阿里原:ubuntu镜像_ubuntu下载地址_ubuntu安装教程-阿里巴巴开源镜像站
163源,中科大源
需要修改/ect/apt/sources.list文件(该文件是Ubuntu下载软件时默认查找的网址)
1、将原来的软件源保存一份,sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
2、sudo vi /etc/apt/source.list文件,把从网页中拷贝的清华源的内容,复制到sources.list中
wq!强制保存退出
3、sudo apt-get update
2、shell命令
需要被shell(命令解析器)解析的命令
用户、shell、内核、硬件的关系
2.1、解析器的分类
Bourne Shell(简称sh):Bourne Shell由AT&T贝尔实验室的S.R.Bourne开发,也因开发者的姓名而得名。它是Unix的第一个Shell程序,早已成为工业标准。目前几乎所有的Linux系统都支持它。不过Bourne Shell的作业控制功能薄弱,且不支持别名与历史记录等功能。目前大多操作系统是将其作为应急Shell使用。
C Shell(简称csh):C Shell由加利福尼亚大学伯克利分校开发。最初开发的目的是改进Bourne Shell的一些缺点,并使Shell脚本的编程风格类似于C语言,因而受到广大C程序员的拥护。不过C Shell的健壮性不如Bourne Shell。
Korn Shell(简称ksh):Korn Shell由David Korn开发,解决了Bourne Shell的用户交互问题,并克服了C Shell的脚本编程怪癖的缺点。Korn Shell的缺点是需要许可证,这导致它应用范围不如Bourne Shell广泛。
Bourne Again Shell(简称bash):Bourne Again Shell由AT&T贝尔实验室开发,是Bourne Shell的增强版。随着几年的不断完善,已经成为最流行的Shell。它包括了早期的Bourne Shell和Korn Shell的原始功能,以及某些C Shell脚本语言的特性。此外,它还具有以下特点:能够提供环境变量以配置用户Shell环境,支持历史记录,内置算术功能,支持通配符表达式,将常用命令内置简化。
2.2、shell命令格式
命令三要素:命令名称,选项,参数
命令名称必须,选项和参数根据实际情况填写
Command [-Options] Argument1 Argument1 ……
Command shell命令名称,严格区分大小写 Options shell 命令选项,每一个参数都需要添加‘-’进行引导 Argument1 shell命令参数,一条命令的参数大于等于0个,且多个参数的情况需要用空格隔开
书写细节:
1、一条命令的三要素之间用空格隔开
2、若一行书写多个命令,需要用‘;’隔开
3、如果一条命令不能在一行内写完,需要在行尾使用‘\’然后回车,表示该命令没有结束
2.3、history - 历史记录查询
直接执行history显示HISTSIZE条
history 20 //只显示20条历史记录
echo $HISTSIZE // 在终端显示环境变量HISTSIZE的值
.bash_history // 保存历史记录
// 家目录下的隐藏文件
// 保存 HISTFILESIZE 条(默认是2000)
// 虚拟机关机之后,在这个终端输入过的命令才会保存到文件中
环境变量的值可以被更改
1)临时更改 // 只在当前终端有效
export HISRSIZE=10 // = 两边不要有空格
2)永久修改
家目录下文件:.bashrc 中修改,就是永久修改 // 从新打开的终端生效,当前终端无效
2.4、shell中的特殊字符
2.4.1、通配符
当用户需要用命令处理一组文件,例如 file1.txt、file2.txt、file3.txt、file4.txt ……,用户不必输入所有文件名。可以使用shell通配符。
通配符 | 含义 |
* | 匹配任意长度的字符 单独使用是,表示全部 |
? | 匹配一个长度的字符 |
[…] | 匹配其中指定的一个字符 |
[-] | 匹配指定一个字符范围 |
{ .. } | 匹配指定范围的字符 |
[^…] | 除了其中指定字符都可以 |
[[:lower:]] | 匹配所有小写字母 |
[[:upper:]] | 匹配所有大写字母 |
示例:
1、用file_*.txt,匹配file_aa.txt、file_bbbb.txt能匹配到的, file3_11.txt 则匹配不到
单独使用 * 表示全部,rm * :表示删除所有文件
2.4.2、管道符:|
将前一个命令的输出作为后一个命令的输入
cat xxx.c // 将文件内容放到终端
wc -l xxx.c // 计算文件内容的行数
cat xx.x | wc -l // 将cat输出到终端的内容作为wc -l的输入,计算行数
补充:
wc -l 文件名:文件行数
wc -c 文件夹名:文件字符个数
wc -m 文件名:计算文件字节大小
wc -w 文件名:文件单词个数
2.4.3、输入输出重定向
输出重定向
命令 > 文件名 // 将文件作为输出源,文件不存在则创建文件
命令 >> 文件名 // 如果文件不存在,则创建文件// 如果文件中存在内容则会追加
命令 &> 文件名 或者 命令 2> 文件名 //将命令产生的错误输出到文件里
命令 &>> 文件名 或者 命令 2>> 文件名 //命令产生的错误内容追加到文件内容后面