linux学习总结

该博客是Linux学习总结,涵盖嵌入式Linux操作系统、系统使用、用户管理、shell编程等内容。介绍了操作系统分类、应用领域,讲解了shell命令、文件操作、网络配置等使用方法,还涉及结构体、内存管理、头文件使用、函数指针等编程知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

linux学习总结

day1

一、嵌入式linux操作系统

  • 1、什么是嵌入式操作系统

    • 操作系统是管理和控制计算机硬件与软件资源的计算机程序,它是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行
  • 2、操作系统的分类

    • 1、批处理操作系统

    • 2、分时操作系统

    • 3、实时操作系统

    • 4、嵌入式操作系统

      • 概念:以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于对功能、可靠
        性、成本、体积、功耗有严格要求的专用计算机系统。

      • 组成:微控制器、晶振、内存(SRAM,SDRAM等)、存储器(ROM,FLASH,SD等)、其他外围设备接口、输入输出接口

      • 分类

        • Linux
        • μC/OS
        • windows CE
        • Vxworks
        • QNX
    • 5、个人计算机操作系统

    • 6、网络操作系统

    • 7、分布式操作系统

  • 应用领域

    • 1、工业控制

      • 机械手臂、集装箱起重机、工业机器人、电机驱动器、智能测量仪、智能控制器、智能数控机床等
    • 2、智能家居领域

      • 智能扫地机器人、空调、冰箱、洗衣机、投影仪、智能门锁、智能门禁、可视对讲门铃、微波炉、电视机、遥控器、水电表、扫地机器人等
    • 3、安防领域

      • 人脸识别、监控设备、指纹识别、视网膜识别等
    • 4、汽车电子领域

      • 行车记录仪、自动驾驶系统、车辆导航系统等
    • 5、交通物流领域

      • 蜂巢快递柜、共享单车、智能分拣等
    • 6、健康医疗领域

      • 生化分析仪、血液分析仪、CT等各类智能检测仪器、智能血压计、智能手环等
    • 7、通信领域

      • 机顶盒、路由器、通信基站设备、交换机等
    • 8、金融领域

      • 刷卡机、智能ATM终端等
    • 9、消费电子领域

      • 手机、平板电脑、可穿戴设备、游戏机、数码相机、广告机、遥控玩具、音频视频播放器、自动售货机
    • 10、军事航空领域

      • 卫星系统、无线传输系统、定位系统、无人机、雷达系统、火炮、导弹和智能炸弹制导引爆等控制装置、各种智能坦克、舰艇、轰炸机等

二、嵌入式linux

  • 历史

  • unix起源

    • 1969年,由kenThompson在AT&T贝尔实验室实现的。使用的是汇编语言。
    • 1973年,Kenthompson和DennisRitchie使用C语言对整个系统进行了再加工和编写,使得Unix能够很容易的移植到其他硬件的计算机上。
    • 1977年BSD的诞生(在unix发表之后,柏克莱大学Berkeley的教授对于这个操作系统相当的有兴趣,经过几经修改之后,在1977年发表了第一代BSD Berkeley Software Distribution,伯克利软件套件 (SUN)添加了TCP/IP协议,有了以后的网络编程)
  • Linux发展

    • 1984年Richard Matthew Stallman(自由软件之父) 在 1984 年启动了 GNU 项目。(模仿unix但不是unix)
    • 1991年Linus Torvalds 在芬兰赫尔辛基为了能在家里的PC机上使用与学校一样的操作系统,开始了Linux 内核开发,类Unix他是为他的硬件 - Intel 30386 CPU 编写的程序。他也使用 Minix 和 GNU C 编
      译器。
  • Linux的发行版本

三、Linux操作系统的使用

  • shell命令

    • 什么是shell命令

      • shell:命令行解释器,用户和内核之间的桥梁
      • shell也是一个程序,提供给了我们一个界面,(终端)
    • shell的版本

      • Bourne Shell: 最早的Shell
      • C Shell
      • Ksh
      • Z Shell
      • Bourne-again shell(bash)
    • 格式

      • 三要素:命令名称 [选项] [参数]

      • 注意:

        • <1>.一条命令三要素之间必须要有空格隔开
        • <2>.若多个命令在一行书写,用分号(;)将各命令隔开
        • <3>.如果一条命令不能在一行写完,在行尾使用反斜杠()标明该条命令未结束

day2

操作系统的使用

  • 命令

    • 用户系统相关命令

      • 1、用户切换命令(su)

      • 2、系统管理员命令

        • ps:显示当前系统中由该用户运行的进程列表

          • ps:显示当前系统中由该用户运行的进程列表
          • ps -ef:查看所有进程及其pid(进程号),系统时间、命令详细目录,执行者
          • ps aux:除可显示-ef所有内容之外,还可显示CPU及内存占用率,进程状态
          • ps -w加宽以显示较多的信息
        • top:动态显示系统中运行的程序 (一般为每隔几秒刷新一次)

        • pstree 以树形格式显示进程

        • kill 输出特定的信号给指定PID(进程号)的进程

          • kill -l列出所有可用的信号名称

        • clear:清除屏幕上的信息

        • uptime:显示系统已经运行了多长时间

        • 关机

          • shutdown -h now现在立刻关机
          • shutdown -h +30 30分钟之后关机
        • 重启

          • reboot
          • shutdown -r now
      • 3、磁盘相关命令

        • free:查看当前系统内存的使用情况

        • df:查看文件系统的磁盘空间占用情况

        • du:统计目录(或文件)所占磁盘空间的大小

          • du -sh:显示该文件夹所占的大小
          • du -sh ./:显示当前目录下所占磁盘空间的大小
        • fdisk:查看磁盘分区情况及对磁盘进行分区管理

          • fdisk -l:显示文件系统的分区情况

          • 注意:

            • <1>使用fdisk必须拥有root权限
            • <2>IDE磁盘hda,hdb…SCSI磁盘是对应sda,sdb…hda1,第一个硬盘分区
    • 文件、目录相关命令

      • 1、vim编辑器

        • vi

          • 查找(命令模式下)

            • /<要查找的字符> 向下查找要查找的字符
            • ?<要查找的字符> 向上查找要查找的字符
          • 替换(低行模式下)

      • 2、chmod改变文件的访问权限

          - 第一个字符表示文件的属性(在Linux中一共有7种文件)
        
          	- d 是文件夹
          	- - 普通文件
          	- l 链接文件 (类似于windows快捷方式)
          	- p 管道文件
          	- s 套接字(socket)文件
          	- c 字符设备文件
          	- b 块设备文件
        
          - rwx:权限
        
          	- 
        
        • 更改权限的方法

          • 方法一

            • a —>all 所有人
            • u —>user 文件所有者
            • g —>group 同组用户
            • o —>other 其他人
          • 方法二(用三位二进制,一个八进制)

            • x—1
            • w—2
            • r—4
      • 3、chown:修改文件的所有者和组别

        • sudo chown linux 1.c #必须使用root权限 修改文件所有者
        • sudo chown :linux 1.c #修改文件组别
      • 4、chgrp:改变文件的组所有权

      • 5、cat:查看比较短的文档

      • 6、more:适合查看比较长的文档

        • 按空格(space)向下走一页
        • 按回车(Enter)向下走一行
        • 按B向上走一页
        • 按q退出
      • 7、less:more的增强版

        • 按空格(space)向下走一页
        • 按回车(Enter)向下走一行
        • 按B向上走一页
        • 按q退出
        • 支持上下箭头
      • 8.grep: 在指定文件中搜索特定的内容,并将含有这些内容的行标准输出

        • 示例:grep -n scores arr.c #在arr.c这个文件中查找scores这个字符串

        • 一般会和(|)管道配合起来使用

          • (|)关联两个命令,将前一个命令的输出作为后一个命令输入
        • ls --help | more

        • ls /dev | grep video #快速的找到我们的摄像头

      • 9、常用的特殊符号

        • <1>.重定向符号 > 文件不存在,则新建,文件存在,覆盖原文件中的内容

        • <2>.追加重定向符号 >> 文件不存在则新建,文件存在,则追加在文件的末尾

        • <3>.反引号 ``

          • echo today is date #将date当成命令来执行
        • <4>通配符

      • 10、ln(创建链接文件)—>类似于windows快捷方式

        • 硬链接

        • 软连接

        • 注意:

          • <1>.ln命令会保持每一处链接文件的同步性,也就是说,你不论改动哪一处,其他的文件也都会发生相同的变化,
          • <2>.软链接它只会在选定的位置上生成一个文件的镜像,不会重复占用磁盘空间,硬链接它会在选定的位置上生成一个和源文件大小相同的文件。
      • 11、find在指定目录下搜索文件,他的使用权限是所有用户

        • find [路径] [选项] [描述]
    • 压缩打包命令

      • 压缩

        • 1、gzip

          • gzip arr.c #压缩arr.c文件之后生成arr.c.gz
          • gunzip scores.c.gz #解压
        • 2、bzip2

          • bzip2 scores.c #压缩scores.c文件之后生成scores.c.bz2
          • bunzip2 scores.c.bz2 #解压
        • 3、tar :对文件目录进行打包和解包

          • -c, --create # create a new archive (创建包文件)
          • -f #指名包文件名
          • -x #解包
          • -v #显示打包的过程
          • -z #自动调用gzip,gunzip
          • -j #自动调用bzip2
        • 4、

          • 1、打包+压缩

            • tar -cvzf mynew.tar.gz day1 day3 1.txt
          • 2、解压+解包

            • tar -xvzf mynew.tar.gz
    • 文件比较命令

      • diff a.c c.c
  • Linux环境变量

    • env # 显示所有环境变量的值

      • 1.临时修改变量的值 PATH

        • echo $PATH
        • /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
        • export
        • PATH=$PATH:/home/linux/23072/LinuxC/day3
      • 2.永久修改变量的值 PATH

        • sudo vim /etc/profile
        • 添加export PATH=$PATA:(地址)
        • reboot #重启计算机
  • 网络配置管理

    • 1.测试虚拟机是否有网 (ping)

    • 2.如何设置虚拟机的网络

    • 3.查看ip地址

      • ifconfig
  • 网络基础知识

    • IP地址

      • IP地址:在网络中,IP地址是主机的唯一标识,由网络地址+主机地址

      • 32位的二进制 ------->点分十进制(“192.168.12.78”)

      • 分类:

        • 1.A类:1字节网络地址+3个字节主机地址(网络地址最高位必须为0)

        • 2.B类:2字节网络地址+2个字节主机地址(网络地址最高位10)

        • 3.C类:3字节网络地址+1个字节主机地址
          (网络地址最高位为110)

        • 4.D类:主要用于组播(网络地址最高位为1110)

        • 5.E类:(网络地址最高为11110)

      • 子网掩码

        • 什么是子网掩码

          • 网络地址部分全为1,主机地址部分全为0 (c类子网掩码 255.255.255.0)
        • 子网掩码的作用

          • 判别主机发送的数据包是向外网发送,还是向内网发送
  • 软件安装

    • 离线安装

      • sudo dpkg -i sl_3.03-17build2_amd64.deb
    • 在线安装

      • apt高级软件包管理工具

        • sudo apt-get install vim #安装
        • sudo apt-get update #下载更新软件包列表
        • apt-get remove openssh-server

day3

用户管理

  • 用户属性

    • 用户名 口令 用户ID 用户主目录 用户shell(bash)
  • 用户和组

    • 用户组是具有相同特征的用户的集合体,通过用户组可以让多个用户具有相同的权限
  • 相关配置文件

    • <1>./etc/passwd 系统能够识别的用户清单
    • <2>. /etc/shadow 加密的用户清单, (打开时必须使用root权限)
    • <3>./etc/group 该文件包含Unix组的名称和每个组中的成员列表,每一行代表一组
  • 管理命令(必须使用root权限)

    • 1.创建用户 adduser

    • 2.修改密码 passwd

    • 3.添加组 groupadd

    • 4.修改用户的属性 usermod

    • 5.删除用户 (deluser)

    • 6.删除组 (groupdel)

shell编程

  • 什么是shell编程

    • 一堆shell命令集合
  • shell执行过程

    • 1、创建一个.sh文件 #touch 1.sh
    • 2、修改文件权限 #chmod +x 1.sh
    • 3、执行 #./1.sh
  • 注释 :#!/bin/bash 这句话必须放在程序的首航,作用是告诉计算机使用指定的shell版本

  • 变量

    • 用户自定义变量

      • 1、命名规范

        • <1>.由数字,字母,下划线组成,首字母不能为数字
        • <2>.不能为关键字和保留字
        • <3>.尽量见名知意,尽量大写
      • 2、访问shell变量

        • #变量赋值时=左右两边不能出现空格
        • #shell中访问变量中的值$+变量名
    • 位置参数即命令行参数

      • 由系统提供的参数为位置参数
    • 预定义变量

      • $# 包含命令行参数的个数
      • $@ 包含所有命令行参数:“$1 $2 …$9”
      • $* 包含所有命令行参数:“$1,$2…$9”
      • $$: 包含正在执行进程的ID号
      • $? 包含前一个命令退出的状态
    • 环境变量

  • shell程序和语句

    • 1、说明性语句

    • 2、功能性语句

      • 1、键盘读入变量值 #read

      • 2、算数运算命令#expr

        • 注意:1、expr和变量之间,以及变量和符号之间必须夹空格
        • 2、将expr的结果给ADD必须使用``(反引号)
        • 3、表示通配符*表示本身
      • test命令

        • 1、测试字符串

          • s1 = s2 测试两个字符串的内容是否完全一样
          • s1!= s2 测试两个字符串的内容是否有差异
          • -z s1 测试s1字符串的长度是否为0
          • -n s1 测试s1字符串的长度是否不为0
        • 2、测试整数

          • a -eq b 测试a与b相等 (equal)
          • a -ne b 测试a与b不相等
          • a -gt b 测试a是否大于b (great)
          • a -ge b 测试a是否大于等于b
          • a -lt b 测试a是否小于b
          • a -le b 测试a是否小于等于b
        • 3、文件属性

          • -d name 测试name是否为一个目录
          • -f name 测试name是否为普通文件
          • -L name 测试name是否为符号链接
          • -r name 测试name是否存在且可读
          • -w name 测试name是否存在且可写
          • -x name 测试name是否存在且为可执行
          • -s name 测试name是否存在,且长度不为0
          • f1 -nt f2 测试文件f1是否比文件f2更新
          • f1 -ot f2 测试文件f1是否比文件f2更旧
    • 3、结构性语句

      • 1、顺序

        • 1、read输入

        • 2、echo输出

      • 2、选择

        • 1、单分支

        • 2、双分支

        • 3、多分支

          • if

          • case

      • 3、循环

        • 1、for

          • <1>.带列表的for

          • 2、不带列表的for

          • 3、类似C的for

        • 2、which

        • 3、break跳出循环

          • break跳出一层循环
          • break2跳出两次循环
        • 4、continue:结束本次循环,继续下一次循环

  • 函数

    • 1、函数的定义

      • 方式一:

      • 方式二:

    • 函数的调用

      • 方式一:

      • 方式二:

day4

1、结构体

  • 1、如何创建结构体数据类型

  • 2、如何创建结构体变量

    • struct sutdent s1={“tuomiao”, 183, {11,55,20}}
  • 3、如何访问变量的值

    • 1、s1.name
    • 2、ps->name
  • 4、如何操作结构体的指针

    • 定义一个指向结构体的指针 #struct student *ps=NULL;

2、内存管理

3、在堆区分配空间和释放空间

  • 1、分配空间

    • void *malloc(size_t size)
  • 2、释放空间

    • void free(void *prt)

4、结构体和堆区空间关联起来

  • 1、在堆区创建5个存结构体的空间

    • ps=(Stu *) malloc(sizeof(struct student)*5)
  • 2.编写一子函数,对ps指向的空间进行输入和输出

day5

1、自定义头文件

  • 1、引入库头文件
  • 2、宏定义
  • 3、结构体类型的定义
  • 4、枚举类型的定义
  • 5、函数声明

2、如何引入头文件

  • #include “stu.h”

  • ""和<>的区别

    • “”: 编译器从用户的工作路径开始搜索头文件
    • <>: 编译器从标准库路径开始搜索头文件

3、条件编译

  • 作用:避免头文件被重复引入

  • 语法

4、gcc工作原理

  • vim -p *.c #同时打开多个.c文件

  • 1、分阶段执行

    • 1、预处理 #gcc -E main.c -o main.i

    • 2、编译 #gcc -S main.i -o main.s

    • 3.汇编 #gcc -c main.s -o main.o

    • 4、链接 #gcc main.o -o main

      • 在连接阶段将输入的机器代码文件*.o(与其它的机器代码文件和库文件)汇集成一个可执行的二进制代码文件
  • 将四部合为一 #gcc stu.c -o stu

5、Make工程管理器(多文件编译)

  • 1、make工作原理

    • 默认在当前路径下查找一个Makefile/makefile的文件
  • 2、Makefile

  • 3、Makefile中假目标

    • 执行假目标

      • make clean#并没有生成clean(目标),只是执行了rm *.o
    • 假目标出现的问题

      • 问题:

        • 假设在当前文件夹由一个文件和伪目标的名称相同,就会显示伪目标是最新的
      • 解决:

        • 在伪命题的前面加.PHONY:clean

  • 4、Makefile变量

    • 1、自动变量

      • <1>.$@ 目标文件
      • <2>.$^ 所有的依赖文件
      • <3>.$< 第一个依赖文件
    • 2、预定义变量(Makefile预定义变量包含了常见编译器,汇编器的名称及其编译选项)

      • <1>.CC C编译器的名称,默认为cc
      • <2>.CFLAGS C编译的选项,无默认值
      • <3>.RM 文件删除程序的名称,默认值为rm -f
    • 3、自定义变量

      • 示例:OBJS:=main.o calp.o stuio.o sort.o
  • 5、Makefile中变量的展开方式

    • 1、递归展示方式

    • 2、简单展开方式

day6

1、函数指针

  • 1、定义函数指针

  • 2.定义一个长度为4的数组,该数组中的每个元素是个函数的指针

    • int ( *pfunArr[4] ) (int,int )={add,sub,mul,div};
  • 3.函数参数可以是函数指针

    • int pfunaction(int (*pfun)(int,int),int num1,int num2)
  • 4.函数指针也可以取别名 (typedef )

2、存储类型

  • 1.register 寄存器

  • 2.auto (默认)

    • 存储类型 类型名 变量名
  • 3.extern 外部的

    • 1.变量

      • 局部变量 :定义在函数体内部的变量,称为叫局部变量

        • 作用域:自定义开始到最近}结束,函数作用域 ,块作用域
        • 生命周期:函数调用分配,函数结束释放
      • 全局变量:定义在函数体外部的变量,称为叫全局变量

        • 作用域:自定义开始到文件 文件作用域
    • 2.extern修饰全局变量

    • 3.extern修饰函数

    • 4.static 静态的

      • 1.static修饰全局变量 (隐藏)
      • 2.static修饰函数 (隐藏)
      • 3.static局部变量:延长变量的生命周期

3.共用体

  • 大小端

    • 大端序

      • 低字节存在低地址处,高字节存在高地址处

    • 小端序

      • 低字节存在高地址处,高字节存在低地址处

4、枚举:(语义化)定义常量的一种方式

  • 定义一个枚举的数据类型

  • 定义枚举的变量

5、字节对齐:分配空间的时候一次性分配多少个字节

  • 1、基本类型:自然对齐方式
  • 2.结构体的对齐方式:成员当中最大的那个

6、位域

7、递归

  • 一个数的阶乘

  • 斐波那契数列

特别注意:

原文链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值