当前位置: 首页 > news >正文

嵌入式学习day12(LinuxC高级)

由于C高级部分比较零碎,各部分之间没有联系,所以学起来比较累,多练习就好了

一丶Linux起源

寻·科普|第二期:聊聊Linux的前世今生

UNIX和linux的区别:

        (1)linux是开发源代码的自由软件.而unix是对源代码实行知识产权保护的传统商业软件。
        (2)UNIX系统大多是与硬件配套的,而Linux则可运行在多种硬件平台上.

了解不同操作系统的内核:
        windows - NT        ubuntu - linux          Android - linux           macOs ios - unix

二丶Linux分层结构

应用层:程序、命令

内核层:五大功能:进程管理、设备管理、内存管理、网络管理、文件系统管理
驱动:字符设备驱动、块设备驱动、网络设备驱动
硬件:鼠标、键盘(字符设备驱动)、硬盘、U盘(块设备驱动)等

三丶Linux命令

1.基本命令

(1).查看ubuntu版本:
          sudo lsb_release -a 或 cat /etc/issue

(2).查看内核版本
         uname -r 或 cat /proc/version

(3).系统关机重启命令
sudo shutdown -h now: 立即关机
sudo shutdown -r now: 立即重启
sudo reboot now: 立即重启
sudo shutdown -h 时间 "提示语句": 定义关机
sudo shutdown -r 时间 "提示语句": 定义重启
通过 shutdown -c: 可以取消定时操作

(4).历史记录

history: 查看历史命令,默认显示的命令行数根据HISTSIZE来决定

echo $HISTSIZE: 将变量的值打印到终端,echo命令作用是打印内容到终端
HISTSIZE=10: 临时修改变量的值(只在当前终端有效)


在家目录下的隐藏文件,通过vi打开:
.bash_history:默认存放2000条历史记录命令的文件
.bashrc :定义HISTSIZE(使用history时默认显示的记录个数)和HISTFILESIZE(.bash_history文件可以存放命令的个数)变量的脚本文件

修改.bashrc文件中HISTSIZE的值,将终端退出:可以永久修改

(5).起别名命令
                 alias: 查看系统中起别名的命令
                 alias 新名='原来的命令': 起别名
                 unalias 新名: 取消别名

2.系统维护命令

(1).man
           man man: 查看man手册

          1 Executable programs or shell commands 可执行程序或shell命令
          2 System calls (functions provided by the kernel) 系统调用
          3 Library calls (functions within program libraries) 库函数

(2).su

          su root: 切换到超级用户
          sudo su 用户名: 切换用户
          退出:exit(或者 ctrl d 快捷键)

(3).df命令
         df -Th: 查看磁盘使用情况

(4).mount
         作用: 文件系统的挂载
         sudo mount -t 设备类型 设备名称 挂载点: 挂载设备
         sudo umount 挂载点: 卸载设备
         注意:卸载时不要在挂载点卸载
补充:
         1.  挂载优盘时,出现u盘识别不出的现象,解决办法:

                     1)虚拟机->设置->usb控制器->兼容usb3.0
                     2)虚拟机->可移动设备->找到自己的u盘->连接
         2.  如果出现u盘类型不匹配的问题

                     sudo apt-get install exfat-fuse exfat-utils

3.用户管理命令

       sudo adduser 用户名: 添加用户

sudo deluser --remove-home 用户名: 删除用户同时删除工作目录

4.进程管理命令

(1).ps
      什么是进程? 就是程序的一次执行过程,是动态的。
      ps -aux: 显示当前系统中运行的进程(包含进程的状态)


      ps -ef: 显示当前系统中运行的进程(包含进程的父进程号PPID)

表头

含义

USER

该进程是由哪个用户产生的。

PID

进程的 ID。

%CPU

该进程占用 CPU 资源的百分比,占用的百分比越高,进程越耗费资源。

%MEM

该进程占用物理内存的百分比,占用的百分比越高,进程越耗费资源。

VSZ

该进程占用虚拟内存的大小,单位为 KB。

RSS

该进程占用实际物理内存的大小,单位为 KB。

TTY

该进程是在哪个终端运行的。其中,tty1 ~ tty7 代表本地控制台终端(可以通过 Alt+F1 ~ F7 快捷键切换不同的终端),tty1~tty6 是本地的字符界面终端,tty7 是图形终端。pts/0 ~ 255 代表虚拟终端,一般是远程连接的终端,第一个远程连接占用 pts/0,第二个远程连接占用 pts/1,依次増长。?是守护进程,也就是一开始启动时系统在后台运行的进程。(后面IO会讲)

STAT

1.  D uninterruptible sleep (usually IO) 不可中断的睡眠态

2.  R running or runnable (on run queue) 运行态

3.  S interruptible sleep (waiting for an event to complete) 可中断的睡眠态

4.  T stopped by job control signal 暂停态

5.  t stopped by debugger during the tracing 因为调试而暂停

6.  X dead (should never be seen) 死亡态

7.  Z defunct ("zombie") process, terminated but not reaped by its parent 僵尸态

8.  < high-priority (not nice to other users) 高优先级

9.  N low-priority (nice to other users) 低优先级

10.  L has pages locked into memory (for real-time and custom IO) 锁在内存中

11.  s is a session leader 会话组组长

12.  l is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)多线程

13.  + is in the foreground process group 前台进程

14.  没有+时,默认是后台进程

15.  I 空闲状态进程

START

该进程的启动时间。

TIME

该进程占用 CPU 的运算时间,注意不是系统时间。

COMMAND

产生此进程的命令名。

(2).top

          动态查看系统中运行的进程

          shift >: 向下翻页   shift <: 向上翻页         q: 退出

(3).修改优先级
        PR = NI + 20
       
NI值范围:-20~19, NI值越小优先级越高
       sudo renice NI值 PID: 改变正在运行进程的优先级

sudo nice -n NI值 启动进程的命令: 以指定的优先级启动进程, 例如:执行 sudo nice -n -20 top

四丶Linux安装工具

1.软件包安装

 (1).软件包管理机制
        debian: deb软件包管理机制
        redhat: rpm软件包管理机制(Red Hat Package Manager)

(2).软件包分类
         二进制软件包:xx.deb           源码包:xx.dsc

(3).软件包管理工具
        dpkg和apt-get
区别:dpkg:离线安装,安装本地包,不能检查软件包的依赖关系,不关系仓库内的软件。
             apt:在线安装,通过仓库获取软件包资源,解决依赖关系,不能安装本地包。A -> B

仓库:托管可安装软件包的公共服务器,用户从服务器获取软件并将其安装至用户计算机。类似于应用商店。

2.dpkg工具

软件包命名:

特点:安装时需要软件包存在,不需要从镜像站点获取软件包, 不需要网络,不能检查软件之间的依赖关系。

dpkg命令:
          sudo dpkg -i 软件包的完整名称:安装软件
          sudo dpkg -r 软件名 :卸载软件
          sudo dpkg -s 软件名 :查看软件的安装状态
          sudo dpkg -P 软件名 :完全卸载
          sudo dpkg -L 软件名 :列出软件目录信息

3.apt工具

特点:安装时不需要软件包存在,需要从镜像站点获取软件包,需要网络,能检查软件之间的依赖关系
apt-get:
           sudo apt-get install 软件名:下载并安装软件
           sudo apt-get remove 软件名:卸载软件
           sudo apt-get --purge remove 软件名:完全卸载
           /var/cache/apt/archives --》 下载的软件的安装包默认的存放路径
           sudo apt-get clean:清除下载的软件包
          sudo apt-get update :更新源
          sudo apt-get upgrade :(升级)更新安装软件
          sudo apt-get download 软件名:下载软件包
          sudo apt-get source 软件名:下载源码包
apt-cache:
          sudo apt-cache show 软件名:获取二进制包的描述信息
          sudo apt-cache policy 软件名:查看软件安装状态
          sudo apt-cache depends 软件名:查看依赖的软件
          sudo apt-cache rdepends 软件名:查看谁依赖我
ping 网址 或 ip地址 ---> 查看虚拟机是否可以上网

4.ubuntu网络配置

1.桥接模式:
              (1) 编辑->虚拟网络编辑器->更改设置->选择vmnet0->桥接模式->桥接的网络适配器(根据主机的网络连接进行选择,当然选择自动也可以)->确定,如果自动不行也可以找到对应的网络适配器。

2)虚拟机->设置->网络适配器->选择桥接模式

nat模式
          (1)编辑->虚拟网络编辑器->更改设置->选择vmnet8->nat模式->确定。

          (2)虚拟机->设置->网络适配器->选择nat模式

五丶shell

1.概念

shell: 命令行解释器
        shell是贝壳的意思,起到保护作用。那linux的shell可以保护内核。
        作用: 负责把应用程序的输入命令信息解释给操作系统,讲操作系统指令处理后的结果再回馈给应用程序。

2.命令执行的过程

         用户在命令行下命令,开始与Shell进行交互。接着,Shell将用户的命令或按键转化成内核所能够理解的指令控制操作系统做出响应,直到控制相关硬件设备。然后,Shell将输出结果提交给用户。

3.shell 命令格式

         命令名称 选项 参数
         命令名称:必须得有
         选项和参数:可有可无,选项有-符号

4.shell中的特殊字符

(1).通配符

             当用户需要用命令处理一组文件,例如 file1.txt、file2.txt、file3.txt、file4.txt ……,用户不必输入所有文件名。可以使用shell通配符。

通配符

含义

*

匹配任意长度的字符

?

匹配一个长度的字符

[]

匹配其中指定的一个字符

[-]

匹配指定一个字符范围

[^]

除了其中指定的字符均可以

● 用 file_*.txt,匹配到file_aa.txt、file_bb.txt、file_abcd.txt 能匹配到的,file1_cc.txt则匹配不到(命令后面单独使用 * 表示全部,如:rm *:表示删除全部文件)

● 使用file_?.txt,匹配file_1.txt、file_2.txt、file_3.txt是可以匹配到的,file_11.txt测匹配不到

● 使用file_[abc].txt 只能匹配file_a.txt、file_b.txt、file_c.txt
● 使用 file_[a-c].txt 能匹配到file_a.txt、file_b.txt 直到 file_c.txt

● 使用 file_[^abc].txt 除了file_a.txt、file_b.txt、file_c.txt的其他文件

(2).管道 |

            格式: 命令1 | 命令2
            作用:将前一个命令的输出作为下一个命令的输入

cat xxx.c | wc -l --> 将cat输出到终端的内容作为wc -l的输入,计算行数

补充:wc -l 文件名:文件行数

          wc -c 文件夹名:文件字符个数
          wc -m 文件名:计算文件字节大小
          wc -w 文件名:文件单词个数

(3).输入输出重定向

           >文件名:输出重定向,新建模式

           >>文件名:输出重定向,追加模式


           2> 或者&>文件名: 将有命令产生的错误信息输出到文件中


           <文件名:输入重定向

(4).命令置换符 ``

           在英文状态下,在esc按键下面的 ~ 按键, 将一个命令的输出作为另一个命令参数
           格式: 命令1 `命令2`

5.echo 命令

           向终端输出指定内容
           echo 字符串: 向终端输出指定内容
           -n: 不换行输出
           echo "字符串": 原样输出

相关文章:

嵌入式学习day12(LinuxC高级)

由于C高级部分比较零碎&#xff0c;各部分之间没有联系&#xff0c;所以学起来比较累&#xff0c;多练习就好了 一丶Linux起源 寻科普|第二期:聊聊Linux的前世今生 UNIX和linux的区别&#xff1a; &#xff08;1&#xff09;linux是开发源代码的自由软件&#xff0e;而unix是…...

pytorch中的hook机制register_forward_hook

上篇文章主要介绍了hook钩子函数的大致使用流程&#xff0c;本篇文章主要介绍pytorch中的hook机制register_forward_hook&#xff0c;手动在forward之前注册hook&#xff0c;hook在forward执行以后被自动执行。 1、hook背景 Hook被成为钩子机制&#xff0c;pytorch中包含forwa…...

使用Gin框架返回JSON、XML和HTML数据

简介 Gin是一个高性能的Go语言Web框架&#xff0c;它不仅提供了简洁的API&#xff0c;还支持快速的路由和中间件处理。在Web开发中&#xff0c;返回JSON、XML和HTML数据是非常常见的需求。本文将介绍如何使用Gin框架来返回这三种类型的数据。 环境准备 在开始之前&#xff0…...

网工内推 | 国企运维工程师,华为认证优先,最高年薪20w

01 上海陆家嘴物业管理有限公司 &#x1f537;招聘岗位&#xff1a;IT运维工程师 &#x1f537;岗位职责&#xff1a; 1、负责对公司软、硬件系统、周边设备、桌面系统、服务器、网络基础环境运行维护、故障排除。 2、负责对各部门软件操作、网络安全进行检查、指导。 3、负责…...

c# 使用异步函数实现线程的功能

c#程序执行时 想要拖动窗口 需要使用线程,但是使用线程 对操作前端窗体很不友好. 所以写了一个异步函数,网上搜了一下,貌似异步函数比线程 更加友好,更加现代 做这个功能的原因是 主要是想等程序执行完 走一个提示.用线程很难做到 using System; using System.Threading; usi…...

MySQL之MySQL server has gone away复现测试

测试MySQL server has gone away复现条件 环境情形一报错信息复现测试 情形二报错信息复现测试 环境 Python: 3.8/3.9 MySQL: 5.x 情形一 报错信息 File "/usr/local/lib/python3.6/dist-packages/MySQLdb/cursors.py", line 319, in _querydb.query(q)File "/…...

编程深水区之并发④:Web多线程

Node的灵感来源于Chrome&#xff0c;更是移植了V8引擎。在Node中能够实现的多线程&#xff0c;在Web环境中自然也可以。 一、浏览器是多进程和多线程的复杂应用 在本系列的第二章节&#xff0c;有提到现代浏览器是一个多进程和多线程的复杂应用。浏览器主进程统管全局&#xf…...

【实战指南】从提升AI知识库效果,从PDF转Markdown开始

经常有人抱怨AI知识库精确度不够、答非所问。我有时候想想&#xff0c;会觉得其实AI也挺冤的&#xff0c;因为很有可能不是它能力不行&#xff0c;而是你一开始给的文档就有问题&#xff0c;导致它提取文本有错误、不完整&#xff0c;那后边一连串的检索、生成怎么可能好呢&…...

Android 删除telephony的features

比如删除android.hardware.telephony.subscription 找到这个文件&#xff1a;frameworks/native/data/etc/android.hardware.telephony.subscription.xml <!-- This is the standard set of features for devices to support Telephony Subscription API. --> -<perm…...

Linux驱动开发—编写第一个最简单的驱动模块

文章目录 开发驱动准备工作1.正常运行的Linux系统的开发板2.内核源码树3.nfs挂载的rootfs4.得心趁手的IDE 第一个Hello world 驱动程序常见模块的操作命令模块的初始化和清理模块的版本信息模块中的各种宏 示例Hello World代码printk函数解析 使用MakeFile编译驱动模块使用insm…...

科普文:微服务之Spring Cloud 组件API网关Gateway

API网关是一个服务器&#xff0c;是系统的唯一入口。从面向对象设计的角度看&#xff0c;它与外观模式类似。API网关封装了系统内部架构&#xff0c;为每个客户端提供一个定制的API。它可能还具有其它职责&#xff0c;如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响…...

Kubernetes中的CRI、CNI与CSI:深入理解云原生存储、网络与容器运行时

引言 随着云原生技术的飞速发展&#xff0c;Kubernetes&#xff08;简称K8s&#xff09;作为云原生应用的核心调度平台&#xff0c;其重要性日益凸显。K8s通过开放一系列接口&#xff0c;实现了高度的可扩展性和灵活性&#xff0c;其中CRI&#xff08;Container Runtime Inter…...

【数据结构】二叉搜索树(Java + 链表实现)

Hi~&#xff01;这里是奋斗的明志&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f331;&#x1f331;个人主页&#xff1a;奋斗的明志 &#x1f331;&#x1f331;所属专栏&#xff1a;数据结构、LeetCode专栏 &#x1f4da;本系…...

java Brotli压缩算法实现压缩、解压缩

在Java中实现Brotli压缩和解压缩&#xff0c;你可以使用org.brotlienc和org.brotlidec包中的类。以下是压缩和解压缩的基本步骤和示例代码&#xff1a; 压缩文件 创建FileInputStream以读取原始文件。创建BrotliOutputStream以写入压缩数据。读取原始文件并写入压缩流。关闭流…...

centos7.9 安装java相关组件

10.23.15.71 - 78 账户 admin IMES1 改为root再操作 $ sudo su root ($ su root) 下载包 /home/admin/download $ mkdir download $ chown -R admin:admin /home/admin/download 安装包 /data/local $ tar -sxvf jdk-11.0.23_linux-x64_bin.tar.gz -C /data/local $ mv jdk…...

在IntelliJ IDEA中,快速找到控制类(Controller类)中所有的方法,可以通过以下几种方式实现:

在IntelliJ IDEA中&#xff0c;快速找到控制类&#xff08;Controller类&#xff09;中所有的方法&#xff0c;可以通过以下几种方式实现&#xff1a; 1. 使用快捷键 Alt 7 操作说明&#xff1a;在IDEA中&#xff0c;按下Alt 7可以快速打开“Structure”窗口&#xff08;在…...

ChatGPT的强大之处:探究及与国内产品的对比

论文题目&#xff1a;ChatGPT的强大之处&#xff1a;探究及与国内产品的对比 摘要 ChatGPT作为一种广泛应用的人工智能语言模型&#xff0c;自发布以来迅速走红全球。本文旨在探讨ChatGPT是否真如其流行程度所示那般强大&#xff0c;并对比其与国内类似产品的优劣&#xff0c;深…...

MySql审计平台

安装方式&#xff1a; cookieY/Yearning: &#x1f433; A most popular sql audit platform for mysql (github.com) 对数据库的一系列后台操作 AI助手 - AI助手提供SQL优化建议&#xff0c;帮助用户优化SQL语句&#xff0c;以获得更好的性能。同时AI助手还提供文本到SQL的…...

深度学习6--深度神经网络

1.VGG网络 在图像分 类这个领域中&#xff0c;深度卷积网络一般由卷积模块和全连接模块组成。 (1)卷积模块包含卷积层、池化层、Dropout 层、激活函数等。普遍认为&#xff0c;卷积模块是对 图像特征的提取&#xff0c;并不是对图像进行分类。 (2)全连接模块跟在卷积模块之后&…...

有了Power BI还需要深入学习Excel图表制作吗?

Power BI和Excel都是微软公司的产品&#xff0c;但它们在数据分析和可视化方面有着不同的定位和功能。 Power BI是一个强大的商业分析工具&#xff0c;它提供了数据集成、数据建模、报告和仪表板的创建等功能。Power BI 特别适合处理大量数据&#xff0c;并且可以连接到多种数…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...

MyBatis中关于缓存的理解

MyBatis缓存 MyBatis系统当中默认定义两级缓存&#xff1a;一级缓存、二级缓存 默认情况下&#xff0c;只有一级缓存开启&#xff08;sqlSession级别的缓存&#xff09;二级缓存需要手动开启配置&#xff0c;需要局域namespace级别的缓存 一级缓存&#xff08;本地缓存&#…...

02.运算符

目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&&#xff1a;逻辑与 ||&#xff1a;逻辑或 &#xff01;&#xff1a;逻辑非 短路求值 位运算符 按位与&&#xff1a; 按位或 | 按位取反~ …...

PLC入门【4】基本指令2(SET RST)

04 基本指令2 PLC编程第四课基本指令(2) 1、运用上接课所学的基本指令完成个简单的实例编程。 2、学习SET--置位指令 3、RST--复位指令 打开软件(FX-TRN-BEG-C)&#xff0c;从 文件 - 主画面&#xff0c;“B: 让我们学习基本的”- “B-3.控制优先程序”。 点击“梯形图编辑”…...