Linux从入门到精通(入土)
c) 格式2:
struct
{
数据类型 成员变量1;
数据类型 成员变量2;
……
数据类型 成员变量n;
};
定义类型的同时定义变量,一般在嵌套结构体类型中。
结合typedef使用。
d) 结构体指针
定义格式:
Struct 结构体名 *指针变量名;
访问结构体成员:
a)(*指针变量)成员变量名:先取整个结构体变量的值,然后用.降级访问成员。
b)指针变量->成员变量名:直接指针指向成员访问成员的值。
e) 结构体数组
定义格式:
Struct 结构体名 数组名[下标]。
2.结构体变量所占空间大小
一个结构体变量所占空间大小为所有成员对应类型开辟空间大小的总和。
但是,有对齐法则,以所有成员数据类型占用空间最大对齐开辟内存空间。32位操作系统最大以4byte对齐,64位操作系统,最大以8byte对齐。
共用体(联合体)
a) 概念:所有的成员公用一个内存空间,公用体开辟的内存。
空间大小是以占用空间最大的成员开辟。
b) 格式
Union 共用体名
{
数据类型 成员变量名1;
数据类型 成员变量名2;
……
数据类型 成员变量名n;
};
注意:
共用体使用时同一时间使用一个成员的值。即初始化自己要使用的成员即可
共用体的定义格式和结构体类似,访问成员内容也用.降级访问。
由于公共体公用一个内存空间,不是很安全。即用共用体的使用相对与比较少。主要用共用体来测试pc大小端。
枚举
Enum (基本变量类型)
Stm32 linux驱动 QT中
#define MON 1
#define TUES 2
……
#define SUN 7
使用枚举类型表示一些常量
a) 格式
Enum 枚举名字
{
枚举成员1,
枚举成员2,
……
枚举成员n,
};//分号不可以省略
一般用枚举表示一些固定的值,比如,一周固定只用七天。
注意:
枚举类型一旦定义,枚举中的成员值确定,枚举中的成员只能表示一个整数,默认第一个成员代表整数0,后边的成员依次累加1。
枚举中的成员使用逗号隔开。
可以给枚举中的某个成员指定一个初始值,某个成员后边的成员,在初始值的基础上加1。
当枚举类型定义成功后,枚举成员的值就已经确定,接下来使用时不能更改。
一般常用于和switch结合让代码更加直观清晰。
Linux和unix的区别
a) 两大区别
Linux是开发源代码的自由软件,而unix是对源代码实行知识产权保护的传统商业软件。
Unix系统大多是与硬件配套的,而Linux则可以运行在多种硬件平台上。
b) redhat和ubuntu的区别
redhat多用于服务器,更新不频繁,稳定。
ubuntu人道主义,界面优化比较好,跟新快,体验感好。
Linux体系架构
a)应用层:app shell
b)内核层:五大功能
文件管理
设备管理
网络管理
内存管理
进程管理
c) 硬件层:鼠标、键盘等。
C库:提供的一套标准的用于输入输出的函数接口,在不同的操作系统上都可以使用。间接的进行了系统调用
系统调用:内核向上提供输入输出函数接口,基于内核,函数接口只能在这个操作系统上使用。不同的操作系统提供的系统调用接口不同。
查看操作系统版本和内核版本
查看linux内核版本:unname -r/-a
查看ubunt的版本:lsb_release -a
关机或重启:shutdown
关机
a) 立即关机:sudo shutdown -h now
b) 定时关机:sudo shutdown -h +时间
重启
a) 立即重启1:sudo shutdown -r now
b) 立即重启2:reboot now
c) 定时重启:sudo shutdown -r +时间
环境变量
查看环境变量的命令:printenv或env
PATH:保存的是命令的默认查找路径,路径用:隔开。
若将自己写的可执行程序当命令使用:
a) 将可执行程序移动到PATH变量保存的路径中。
b) 将可执行程序存在的路径保存到PATH环境变量中。
Linux软件安装
了解不同系统安装软件的软件包类型:
系统 安装包类型
Windows .exe
Android .apk
Ubunt .deb
Redhead .rpm
linux流行的软件包管理机制
a) debian Linux提出:deb软件包
b) redhead Linux提出:rpm软件包
deb软件包的分类
a) 二进制软件包:.deb
b) 源码包:.dsc
软件包的管理工具:dpkg apt
Dpkg
特点:安装软件需要安装软件的安装包存在,不能检测软件之间的依赖关系,不能从镜像站点获取软件包,安装不需要网络。
软件
仓库1(地址) 仓库2(网) 仓库3 仓库4
百度(源) 镜像站点 火狐 谷歌
命令:
a) sudo dpkg -i完整的软件名 :安装软件
b) sudo dpkg -r 软件名 :卸载软件
c) sudo dpkg -s 软件名 :查看软件的安装状态
d) sudo dpkg -p 软件名 :完全卸载
e) sudo dpkg -l 软件名 :列出软件的文件清单
软件包管理工具apt
格式:apt-一组命令:apt-get、apt-cache
特点:安装软件不需要软件的安装包存在,能检测软件之间的依赖关系,能从镜像站点获取软件包,安装需要网络。
apt-get 命令:安装、卸载
a) sudo apt-get install软件名:下载安装软件
b) sudo apt-get remove 软件名:卸载软件
c) sudo apt-get download 软件名:下载软件包
d) sudo apt-get source 软件名:下载源码包
e) sudo apt-get updata:更新软件源
f) sudo apt-get upgrade:更新所有软件
g) sudo apt-get clean:清楚下载的软件包
h) sudo apt-get check:检查系统中依赖关系的完整性。
apt-cache命令:查看安装状态、依赖关系
a) sudo apt-cache show 软件名:获取二进制软件包的详细描述信息
b) sudo apt-cache policy 软件名:查看安装状态
c) sudo apt-cache depends 软件名:我依赖的软件
d) sudo apt-cache rdepends 软件名:哪个软件依赖我
IP的分类
IPV4 32位 用点分十进制表示
192.168.50.14 C类IPV4 一个点前的数据是一个8bit(我们日常用IPV4 C 类就完全够用)
IPV4分类:五类
a) A类:一个字节网络号,三个字节的主机号。首位固定为0.
网段取值范围:0000 0000——0111 1111
一个网段能连接的主机台数:2^24-2
b) B类:2个字节网络号,2个字节的主机号。首位固定位10.
网段取值范围:1000 0000 0000 0000 -1011 1111 1111 1111
一个网段能连接的主机台数:2^16-2
c) C类:3个字节网络号,1个字节主机号。首位固定位110.
一个网段能连接的主机台数:2^8-1
d) 组播地址,首位固定位1110
e) 保留待用,首位固定为1111.
认识shell
命令行解析器
Shell解析器版本:sh、csh、ksh、bash
Shell、内核、硬件、用户之间的关系:
a) 用户从命令行提示终端输入命令或者按键,提交给shell
b) Shell将命令转换位内核可以识别的指令
c) 内核驱动硬件设备实现对应指令功能,将执行结果提交给shell。
d) Shell将反馈的结果解释提交给用户识别。
shell基本命令
a) 历史记录查询:history
b) 命令起别名:alias
Shell的特殊字符
通配符
a) a)*:匹配任意长度字符
b) b)?:匹配任意一个字符
c) c)[ - ]:匹配区间范围内的任意一个字符
d) d)[……]:匹配指定的任意一个字符
e) e)[^……]:匹配除指定字符的任意一个字符。
管道|
将一个命令作为另一个命令的输入。
wc命令
a) wc-l文件名:查看文件的行数
b) wc-w文件名:文件单词个数
c) wc-c 文件名:文件字符个数
d) wc-m文件名:文件大小
grep:查询文件中的字符串
grep “字符串” 文件名
输入输出重定向
a) a)>file:将file重定向为输出源,新建模式
b) b)>>file:将file重定向为输出源,追加模式
c) c)<file:将file重定向为输入源。
d) d)2>或&>file:将file文件重定向为错误信息输出源。
命令置换符:在Esc键下面
将一个命令的输出作为另一个命令的参数。
Shell基本系统命令
man:man man:查看man手册功能
sudo passwd 用户名:修改用户密码
su:切换用户
a) su:默认切换到root
b) sudo su 用户名:切换到指定用户
c) exit:退出切换的用户
data 查看系统的日期
a) sudo data -s 年/月/日
b) sudo data -s 时:分:秒
clear清屏
df-Th显示磁盘空间的使用情况
mount:挂载
挂载优盘方法
a) 将优盘插入电脑并在虚拟机中识别
b) 通过df-Th查看优盘的设备名称及文件类型
c) 执行sudo mount -t 文件类型 设备名称 挂载点
d) 卸载方法“sudo umount 挂载点
TFTP、nfs、samba服务器
安装TFTP文件传输服务器:
检测电脑是否安装
Sudo dpkg -s tftpd -hpa
安装
Sudo apt-get install tftp-hpa
需要正确配置TFTP的配置文件来确保正常使用
Sudo vi/etc/default/tftp-hpa
创建tftpboot目录
Sudo mkdir /hmoe/tftp
Sudo chmod 777 /home/tftp
启动tftp服务
Sudo service tftpd-hpa restart
测试客户端程序
Tftp localhost或tftp127.0.0.1(本机的ip地址)/对方的IP地址
输入命令:
Put a.c//上传文件
Get a.c//下载文件
q//退出
安装nfs服务:
检测电脑是否安装
Sudo dpkg -s nfs-kernel-server
安装
Sudo apt-get install nfs-kernel-server
需要修改nfs的配置文件
Sudo vi/etc/exports文件
修改内容为:/home/hq/nfs
重启服务:sudo service nfs-kernel-server restart
将/home/hq/nfs目录挂载到mnt下(192.168.1.107时虚拟机的ip)
Sudo mount-t nfs 192.168.1.107:/home/hq/nfs/mnt
卸载:sudo umount/mnt
安装samba服务器:
检测电脑是否安装
Sudo dpkg -s samba
安装
Sudo apt-get install samba
需要修改nfs的配置文件
Sudo vi/etc/f
用户管理命令
adduser创建用户
sudo adduser 用户名
usermod修改或添加用户
a) 修改:sudo usermod -l 新用户名 用户名
b) 添加:sudo usermod -aG 用户 组
删除用户
Sudo deluser 用户名
删除组
Sudo delgroup 组名
进程相关命令
进程:进程就是程序的一次执行过程。
程序:在磁盘空间上存放的可执行的二进制文件。
文件系统命令
文件系统类型
a) 磁盘文件系统:硬盘、U盘
b) 网络文件系统:nfs服务、samba
c) 虚拟文件系统:tmpfs
文件系统的格式有:ext、ext2、ext3、ext4、vfat、fat32
file文件名:查看文件的类型
a) a).elf 可执行文件类型
b) b).c
c) c).txt
rm-f:强制删除,文件不存在都会删除。
cat 文件名:将文件内容输出到终端。
Cat-n 文件名:将文件内容及行号输出到终端。
head 文件名:默认输出文件内容前10行
head-num 文件名:将文件前num行内容输出到终端。
tail 文件名:默认输出文件内容最后的10行
tail-num 文件名:将文件后num行内容输出到终端。
硬链接和软链接
硬链接:通过文件的inode号创建的链接。硬链接文件不能跨越文件系统。
命令:in 文件名 链接文件名
软连接:通过绝对路径创建的链接,只要在这个路径下能找到对应的文件,链接就有效,相当于创建超链接。
命令:in -s 文件名 链接文件名
特点:
如果时修改硬链接的目标文件名,链接依然有效。
如果修改软链接的目标文件名,则连接断开。
对于一个已存在的连接文件执行移动或删除操作,有可能导致链接的断开。假如删除目标文件后,重新创建一个同名文件,软链接将恢复,硬链接不再有效,因为文件的inode已经改变。
解压和压缩
gzip和gunzip
a) 特点:
只能对单个普通文件进行压缩或解压。
不能进行归档,压缩后或解压后源文件都不存在。
压缩后生产压缩格式为.gz格式。
b) 压缩:gzip 文件名
c) 解压:gunzip 文件名.gz
Bzip2和bunzip2(特点和gzip相似)
a) 压缩格式为:.bz2
b) 压缩:bzip2 文件名
c) 解压:bunzip2 文件名 .bz2
zip和unzip
a) zip功能:zip命令用于将一个文件或多个文件压缩成单一的压缩文件
b) zip格式:zip 压缩文件名 要压缩的文件列表
c) unzip功能:unzip命令用于将zip压缩文件进行解压
d) unzip格式:unzip 要解压的压缩文件。
注意:
a) 具有归档功能,并进行压缩
b) 可以压缩文件夹,后缀为.zip。压缩文件夹需要加 -r。
c) 压缩或者解压后源文件依然存在
xz和unxz(特点和gzip相似)
a) 压缩格式为:.xz形式
b) 压缩:xz 文件名.xz
c) 解压:unxz 文件名.xz
Tar
选项:
a) -x:释放归档文件
b) -c:创建一个新的归档文件
c) -v:显示归档和释放的过程信息
d) -f:用户指定归档文件的文件名,否则使用默认名称,后跟文件名。
e) -j:由tar生成归档,然后由bzip2压缩
f) -z:由tar生成归档,然后由gzip
g) -J由tar生成归档,然后由xz压缩
注意:
a) 具有归档功能,并通过参数可以进行压缩或解压
b) 压缩或解压后源文件存在
c) 需要写全压缩或解压的文件名
格式:tar 选项 压缩(解压) 文件名 [要压缩的文件列表]
组合:
a) -cjf:以bz2的格式压缩文件
b) -czf:以gz的格式压缩文件
c) -cJF:以xz的格式压缩文件
注意:
jz 在f前:压缩后源文件依然存在
d)-xvf:解压一个压缩包:解压后压缩包依然存在。
Shell脚本
本质及特点
a) shell脚本的本质就是命令的有序集合。
b) shell脚本编程属于解释型语言,不需要编译。
c) shell脚本编程,就是将命令通过一定的逻辑顺序实现某些功能。
d) shell脚本文件的后缀时.sh
写一个脚本文件的步骤
a) 创建一个脚本文件:touch xxx.sh
b) 将脚本文件权限修改为可执行
Chmod 777 xxx.sh
c) 编辑脚本内容:vi xxx.sh
d) 执行脚本文件:./xxx.sh或bash xxx.sh
Shell变量
允许用户建立变量存储数据,但不支持数据类型
格式:变量名=值(注意:等号左右两侧不能有空格)
变量的分类
a) 用户自定义变量
b) 位置变量或命令行参数
$0 执行的脚本
$1-$9
${10} - ${N}
$#计算除执行脚本文件命令行参数个数
$@ $*遍历除脚本文件的所有命令行内容
c) 预定义变量
$?前一句命令执行的结果 0:真 ;非0:假。
$$ 进程pid
d) 环境变量
Shell中的语句
说明性语句
a) 以#开始到该行结束,不被解释执行
b) #!/bin/bash告诉操作系统使用哪种类型的shell执行此脚本文件。
功能性语句:任意的shell命令、用户程序或其他cx
结构性语句:条件测试语句、多路分支语句、循环语句、循环控制语句。
功能性语句
read(类似C语言的scanf-从终端输入)
格式:read var1 var2 var3
把读入行的第一个单词赋给var1,第二个赋给var2,以此类推。
Read-p “字符串” 变量列表:可以打印出字符串,并从终端输入。
expr算数运算命令expr主要用于进行简单的整数运算,包括:加、减、乘、整除和求模
注意:
a) 运算符左右两侧必须有空格
b) *和()必须加转义字符,*、()
c) Expr语句可以直接输出运算结果
let赋值运算
a) 在运算中不能有空格
b) 运算结果需要赋给一个变量
c) 变量参与运算的过程不用加$取值
Test语句:test语句可以测试三种对象:字符串、整数、文件属性
字符串的测试
a) s1=s2 测试两个字符串的内容是否完全一样
b) s1!=s2 测试两个字符串的内容是否有差异
c) -z s1 测试s1字符串的长度是否为0
d) -n s1 测试s1字符串的长度是否不为0
整数的测试
a) a -eq b 测试a与b是否相等
b) a -ne b 测试a与b是否不相等
c) a -gt b 测试a是否大于b
d) a -ge b 测试a是否大于等于b
e) a -lt b 测试a是否小于b
f) a -le b 测试a是否小于等于b
文件属性的测试
a) -d name 测试name是否为一个目录
b) -f name 测试name是否为普通文件
c) -e name 测试文件是否存在
Shell中的结构性语句
if……then……fi语句
a) 基本结构:
If 表达式
Then
命令表
Fi
b) 分层结构:
If 表达式
Then
命令表1
Else
命令表2
Fi
c) 嵌套结构:
If 表达式
Then
命令表1
Else
If 表达式
Then
命令表
Fi
Fi
d) elif
if表达式1
then
命令表1
Elif 表达式2
Then
命令表2
Elif 表达式3
Then
命令表3
……
Else
命令表n
Fi
注意:如果表达式为真,则执行命令表中的命令;否则退出if语句,即执行fi后面的语句。
if和fi是条件语句的语句括号,必须成对使用;命令表中的命令可以是一条,也可以是若干条。
case语句
格式:
Case 字符串变量 in
模式1)
命令表1
;;
模式2)
命令表2
;;
……
模式n)
命令表n
;;
Esac
注意:
a) case语句只能检测字符串变量
b) 命令表以单独的双引号行结束,退出case语句
c) 模式n常写为字符*表示所有其他模式
d) Case匹配项中可以存在多个模式,每种模式之间用|隔开。
For……do……done循环格式:
For 变量名 in 单词表
Do
命令表
Done
注意:
变量依次取单词表中的各个单词,每取一次单词,就执行一次。
循环体中的命令,循环次数由单词表中的单词数确定。
命令表中的命令可以是一条,也可以是由分号或换行符分开的多条。
For语句的几种书写格式
for I in 1 2 3 4 do……done:变量i从单词表中取值
for I do……done 变量i从命令行取值,可以省略in单词表
for I in{1…10} do……done:变量i从1-10个数中取值
for((i=0;i<10;i++)) do……done 书写格式类似C语言
While循环
格式:
While 命令或表达式
Do
命令表
Done
注意:while语句首先测试其后的命令或表达式的值,如果为真,就执行一次循环体中的命令,然后再测试该命令或表达式的值,执行循环体,直到该命令或表达式为假时退出循环。
Until循环
格式:
Until 命令或表达式
Do
命令表
Done
注意:until循环与while循环的功能相似,不同的是只有当测试的命令或表达式的值是假时,才执行循环体中的命令表,否则退出循环,这一点与while命令正好相反。
循环控制语句:break与continue
Break:结束本次循环
Break n:跳出n曾循环
Continue:结束本次循环继续下次循环
Continue n:转到最近n曾循环语句的下一轮循环上。
Shell数组
数组的定义及初始化
a) arr=(v1 v2 v3 v4)
b) arr=($1 $2 $3 4 ) c ) r e a d a b c a r r = ( 4) c) read a b c arr=( 4)c)readabcarr=(a $b $c)
d) read -a 数组名
访问数组
a) 取数组的某个元素: 数 组 名 [ 下 标 ] 0 b ) 对 数 组 元 素 的 值 进 行 修 改 : 数 组 名 [ 下 标 ] = 值 c ) 遍 历 数 组 : {数组名[下标]} 0 b) 对数组元素的值进行修改:数组名[下标]=值 c) 遍历数组: 数组名[下标]0b)对数组元素的值进行修改:数组名[下标]=值c)遍历数组:{数组名[@]}
d) 获取数组元素个数:${#数组名[@]}
本文发布于:2024-01-28 22:12:51,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170645117610649.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |