当前位置: 首页 > 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;并且可以连接到多种数…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天&#xff0c;深度学习与大模型技术已成为推动行业变革的核心驱动力&#xff0c;而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心&#xff0c;系统性地呈现了两部深度技术著作的精华&#xff1a;…...

图解JavaScript原型:原型链及其分析 | JavaScript图解

​​ 忽略该图的细节&#xff08;如内存地址值没有用二进制&#xff09; 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么&#xff1a;保存在堆中一块区域&#xff0c;同时在栈中有一块区域保存其在堆中的地址&#xff08;也就是我们通常说的该变量指向谁&…...

【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅!

【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅! 🌱 前言:一棵树的浪漫,从数组开始说起 程序员的世界里,数组是最常见的基本结构之一,几乎每种语言、每种算法都少不了它。可你有没有想过,一组看似“线性排列”的有序数组,竟然可以**“长”成一棵平衡的二…...