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

【基础软件专项训练营】笔记

基础软件专项训练营

  • OpenEuler,Linux

  • OpenGauss,数据库 和 SQL

  • Kunpeng

openEuler:AI时代的全场景操作系统

问题:Windows系统中,开发者如何完成以下任务?

T1. 显示C语言源码,要求在行首添加行号

T2. 目录中所有的C语言源码的行数,并排序输出行数和文件名

T3. 查找最近3天修改过的C语言源码文件,并打包放到指定目录

Linux 的命令行

查找文件:find

选项功能描述
-name按文件名查找,支持使用通配符*和?
-type按文件类型查找,可以是f(普通文件)、d(目录)、1(符号链接)等
-size按文件大小查找,支持使用+或-表示大于或小于指定大小,单位可以是c(字节)、W
(字数)、b(块数)、k(KB)、M(MB)或G(GB)
-mtime按修改时间查找,支持使用+或-表示在指定天数前或后,days是一个整数表示天数
-newer按比较时间查找,如比参考文件的时间戳更新、或比指定的时间戳更新等
-print输出匹配的所有文件名,或将结果写入指定文件
exec执行外部程序,如对匹配的文件进行删除操作或其他各种处理
[ict@openEuler22 my-utils]$ find -name11*
./my-nl.c
./my-libc.c
./my-cat.c
./build/CMakeFiles/3.22.0/CompilerIdC/CMakeCCompilerId.c
./mytee.c
./my-wc.c
[ict@openEuler22 my-utils]$ find -name"*.c"-mtime -3
./my-nl.c
./my-libc.c
./build/CMakeFiles/3.22.0/CompilerIdC/CMakeCCompilerId.c
./my-wc.c

打包文件:tar

[~]$ find -name "*.c" -mtime -3 -exec tar rvf ~/latest.tar \;
./my-nl.c
./my-libc.c
./build/CMakeFiles/3.22.0/CompilerldC/CMakeCCompilerld.c
./my-wc.c
[ict@openEuler22my-utils]$filelatest.tar
latest.tar: POSIX tar archive (GNU)
find -name"*.c"-mtime-3-exec wc -I { \;|sort -nr

源自UNIX的设计哲学
UNIX重要的设计原则(设计哲学)
道格拉斯·麦克罗伊是Unix系统上管道机制,也是Unix文化的缔造者之一:
1.程序应该只关注一个目标,并尽可能把它做好
2.让程序能够互相协同工作
3.应该让程序处理文本数据流,因为这是一个通用的接口

title: 简洁至上; 一切皆文件; 提供机制而非策略; 保持一致

VI - 编辑器之神

小结
UNIX的设计思想并不过时:大道至简,使用文本,小工具协作起来
Linux的开源开放创造了软件史上的奇迹,也是学习宝库
Linux是开发者真正友好的,乐趣与效率兼得

操作系统的组成部分

系统内核和系统调用接口

系统内核(简称为内核),是操作系统的核心组成部分,负责进程管理、内存管理
文件管理和设备管理等,并通过系统调用接口向应用程序提供计算机系统的基本功能。

内核的架构主要有宏内核和微内核两种(Linux采用宏内核架构)。宏内核将全部的内
核模块作为一个单一的内核态任务运行于同一个地址空间;微内核则将内核拆分为多
个独立的模块分别运行于独立的地址空间。

内核为应用程序提供系统服务的机制是系统调用。系统调用(SystemCall)是把应
用程序的参数传给内核,请求相应的内核函数在内核里完成相应的处理,并将处理结
果返回给应用程序的过程。

应用程序

操作系统一般还提供了必要的应用程序–系统应用,如编译器、公用函数库、
编辑器、Shell等。
1.编译器
编译器是开发新应用程序的必备工具。。常见的C/C++编译器主要有GCC
(GNU Compiler Collection,GNU 编译器套件)、Microsoft Visual C++等。
2.公用函数库
公用函数库通常指的是C/C++运行库,glibc是GNU 发布的C 运行库,是
GNU/Linux操作系统中基础API。
3.编辑器
编辑器的用途是修改文本文件,在不同的操作系统中可能不同。Linux下的最
为流行的是Vi和 Emacs。

用户界面

用户界面是指操作系统为用户提供的使用接口,便于用户使用操作系统。用户界面通
常分为两类:CLI(CommandLineInterface,命令行界面)和 GUI(Graphical
User Interface,图形用户界面)。
(1)CLI指文本模式下的用户界面,主要依据用户的命令行文本来进行交互,一般
只使用键盘进行输入、使用文本信息作为输出,如UNIX类操作系统的各种Shell程
序。
(2)GUI指图形模式下的用户界面,多使用鼠标等指针设备进行输入、使用图形内
容作为输出,如Windows 操作系统的Explorer程序,macOS中的Finder应用
UNIX 类操作系统中的 GNOME、KDE、Xfce 等。

CLI实际上是由一种称为"Shell”的应用程序在操作系统内核的基础上实现的。
1977年,斯蒂芬·伯恩为V7UNIX 开发了 Bourne Shell,其凭借简洁、快速
的特点,一直沿用至今,简称为 sh。
OpenEuler 等 GNU/Linux系统中默认的 Shell是Bourne Again Shell(简称

Bash),它与 sh 完全向后兼容。
在UNIX类操作系统中,无论是CLI,还是GUI,都只是一种普通的应用程序,
只不过执行着与系统交互的特殊任务。

主流操作系统简介

根据操作系统的应用领域划分,可分为3类:
(1)桌面操作系统
(2)服务器操作系统
(3)嵌入式操作系统

服务器操作系统

服务器操作系统一般指的是安装在大型计算机(如Web服务器、应用服务器和数
据库服务器等)上的操作系统,更关注性能、安全性、可用性等。服务器操作系
统主要有下列三大类。
(1)UNIX 系列有 FreeBSD、Oracle Solaris、IBM AIX、HP-UX 等。
(2) GNU/Linux 系列有 CentOS、RHEL、Debian、Ubuntu 等。
(3)Windows Server 系列有 Windows NT、Windows Server 2003、
Windows Server 2008、Windows Server 2022 等

嵌入式操作系统

嵌入式操作系统是指用于嵌入式设备的操作系统,重点关注效率、功耗、实时性等。
嵌入式系统是指以应用为中心,以计算机技术为基础,能够根据用户需求(功能、
可靠性、成本、体积、功耗、环境等)灵活裁剪软硬件模块的专用计算机系统。
嵌入式领域常用的操作系统有μC/OS-Ⅲ、嵌入式Linux、WindowsEmbedded、
VxWorks等。

GNU/Linux 的优秀特性

Linux适用于服务器、云计算、嵌入式计算等多种不同领域,已成为应用最为广泛的
操作系统之一。
Linux的开源性质赋予开发者自由,他们可访问和修改源码,定制开发环境,并为社
区做出贡献,促进合作与创新。
由于Linux系统的高稳定性、安全性和灵活性,无论是面向个人计算机的桌面系统
面向物联网的嵌入式系统,还是面向超级计算机的服务器系统,都可以使用Linux。

秉承 UNIX 设计哲学

UNIX 以其简洁、高效、优雅的设计哲学,成为计算机科学的基石。UNIX强调简单、
可组合、可重用、透明和灵活等因素。举UNIX 设计哲学的几个主要原则:
(1)小即是美
(2)只做一件事,并做到极致
(3)连接程序,协作完成复杂功能
(4)提供机制,而非策略
(5)使用纯文本文件来存储信息
(6)一切皆文件

可移植性

可移植性是指代码从一种体系结构移植到另外一种体系结构的难易程度。
Linux拥有精心设计的内核,基于C语言开发的运行库,以及兼容POSIX的大量应
用程序,整个系统都具有良好的可移植性,可支持大多数不同体系结构的计算机
可移植性往往是与性能相予盾的,Linux在这个方面走的是中间路线。

项目背景:开源OS的挑战与机遇
·异构计算将成为企业算力应用的主流
异构计算是指在系统中使用不同体系结构的处理器的联合计算方式,如CPU、GPU、NPU、FPGA等算
力芯片各有所长,分别完成多样性的算力任务
最典型的表现就是算力中心从通用的CPU向XPU转变
·软硬件协同发展对操作系统的新要求
在底层用软硬件结合的方式解决异构计算需求,同时降低异构计算的复杂性,让软件开发者可以在一个
统一开放的操作系统之上,进行应用技术的创新
在云边端协同大趋势下,让边缘计算设备、端设备也享受到云原生的交付、迭代的性能
·在复杂多变的全球化格局和商业环境中,完全依赖于国外的开源系统存在高风险
互联网行业采用率最高的Linux发行版之一CentOS宣布即将停止服务
美国近期出台“不允许将安全漏洞共享到中国”的新规则后
自主基础软件的挑战与机遇

openEuler入门使用

本节概述和学习目标
》学习Linux的重要途径就是在CLI下使用。Linux的一个显著特点是
在CLI下交互效率高,执行适当的命令就能完成系统管理、文件处理
软件计算等各种复杂任务,给予用户丰富的选择,操作简单灵活但功
能强大。
》本小节主要介绍Shell交互实验。通过本实验的学习,要求掌握常见
的基础Shell交互命令

使用目录
目录是openEuler文件系统中的基本组成部件,用于组织若干文件和其他目
录,目录也是一种文件。
openEuler使用一种层级化的目录结构,以唯一的根目录“/”为起点,在
根目录下放置了如下子目录

使用目录
目录是openEuler文件系统中的基本组成部件,用于组织若干文件和其他目
录,目录也是一种文件。
openEuler使用一种层级化的目录结构,以唯一的根目录“/”为起点,在
根目录下放置了如下子目录

文件类型

  • 常规文件:最常见的文件,也是一般意义上的文件,用于存
    储文本或二进制数据等。

  • 目录文件:一种特殊类型的文件,用于分级组织其他文件和
    目录,主要包含存放在该目录下的其他文件或目录的名称,
    属性等信息,便于对这些文件进行统一管理。

  • 链接文件:另一种特殊类型的文件,它指向另一个文件或目
    录的引引用。


Here 文档

  • 向一条命令传递输入的一种特殊方法是使用here文档
    允许命令从脚本程序中得到输入数据

  • Here文档可以用来调用交互式的程序,比如编辑器
    并且向它提供一些事先定义好的输入。

  • 更常见的用途是在程序中输出大量的文本,而不需要
    echo输出每一行

GUI界面简介
openeuler是一个面向企业级的Linux发行版,默认以命令行界面(CLI)
为主,但支持用户手动安装多种桌面环境(DE)以适应不同需求。
主要特点:
· 模块化支持:可安装GNOME、KDE、Xfce、UKUI等主流桌面环境
· 轻量级优化:Xfce等环境适合资源受限场景,UKUI则针对国产化生态优化710。
· 兼容性:支持ARM/x86架构,适配国产芯片(如鲲鹏)

sed
sed 对输入流(或文件)进行查找替换、删除、插入等操作,
非常适合将同样的动作同时应用于大量的文件
sed的基本语法格式如下:
$ sed [options][actions][files]

①修改"intt"为"int"
$ sed “s/intt/int/” add.c
②在第1行插入"#include<stdio.h>"
$ sed -i “1 i #include <stdio.h>“add.c
③在所有文件的第1行都插入”#include<stdio.h>”
$ find.-name I*.c| xargs sed -i “1 i #include <stdio.h>”

需求:册删除文本开头的数字序号和空格各(本书中的示例代码前面
有数字序号和空格,使用时需要删除)
命令:
$ sed -i -r ‘s/(\s[0-9]\s|[0-9]+\s)//gfile_name
解释:
(1)-i:表示直接修改原文件
(2)-r:开启正则表达式
(3)s/(\s[0-9]\sl[0-9]+\s)//g’:文本开头的数字序号和空格

gawk
gawk是一个文本处理工具,可以处理结构化文本数据,执行数
据转换、报告生成和数据分析等
基本语法格式
$ gawk [options]‘BEGIN{ command1 } pattern{ command2 }
END{ command3}’ [files]
中间的命令主要包括3个部分
BEGIN块:开始语句,用来预处理或输出表头,可选
pattern块:循环读取行数据并处理
END块:结束语句,用来生成报告等,可选

文本格式化
(1) LaTeX
LaTeX是基于TeX开发的一种高效率、高质量的排版系统,
支持多种排版选项和样式,可方便地生成各种类型的文档,例
如报告、幻灯片等
(2) Pandoc
Pandoc是一款功能强大的文档格式转换工具,支持将文档
从一种格式转换为另一种格式
(3) groff
groff 是troff 的GNU版本,可生成各种格式的高质量输出
包括文本、数学公式、图表等


理解 C/C++ 程序的构建模型

使用CMake 构建my-nl
编写my-nl的描述文件CMakeLists.txt:
cmake_minimum_required(VERSION 2.9)
project(my-utils)
add_executable(my-nl my-nl.c)
INSTALL(TARGETS"my-nl" RUNTIME DESTINATION bin)
生成Makefile
$ mkdir build&&cd build
$ cmake…&&ls
CMakeCache.txtCMakeFilescmake_install.cmake
Makefile
构建
$make&& sudo make install

自动化测试
CMake支持两种自动化测试方式
①在 CMakeLists.txt 文件中添加 add_test 命令
使用独立的命令行工具ctest来执行广泛的测试

http://www.dtcms.com/a/414462.html

相关文章:

  • 地平线机器人具身导航快慢推理新探索!FSR-VLN:基于分层多模态场景图快慢推理的视觉语言导航
  • [分享] 千呼万唤始出来《WX小程序反编译教程》
  • 网站建设费用模板印象笔记同步wordpress
  • DAY 04 CSS文本,字体属性以及选择器
  • Java-136 深入浅出 MySQL Spring Boot @Transactional 使用指南:事务传播、隔离级别与异常回滚策略
  • 直接选择排序、堆排序、冒泡排序
  • 单页面网站设计网站欣赏软文是什么
  • Nginx 如何启用 HSTS 以加强网络安全 ?
  • qBittorrent下载和安装教程(附下载链接)
  • 网站建设公司的销售好做吗产品宣传推广方式有哪些
  • Whispers from the Star:Anuttacon推出的以AI智能体语音交互为核心的太空生存游戏
  • 语音识别:PyAudio、SoundDevice、Vosk、openai-whisper、Argos-Translate、FunASR(Python)
  • OpsManage项目RDS存储容量获取机制深度验证报告
  • dedecms网站栏目管理第三方做的网站不给源代码
  • 抄袭网站怎么办做淘客网站需要多大的空间
  • 设计模式-常见设计原则篇
  • 双网卡服务器校园网访问故障排查与解决​
  • 工信部备案网站南昌网站建设制作公司
  • 长度最小的子数组_优选算法(C++)滑动窗口
  • LeetCode:74.数组中的第K个最大元素
  • 学习游戏制作记录(boss的制作)
  • 快速排序(含hoare版本、挖坑版本和前后指针版本)
  • LeetCode:77.买卖股票的最佳时机
  • Apache Airflow:让复杂工作流自动化变得简单优雅
  • 精读《C++20设计模式》——创造型设计模式:原型模式
  • IDEA配置Maven教程
  • OpenLayers地图交互 -- 章节十五:鼠标滚轮缩放交互详解
  • [Python编程] Python3 错误与异常
  • 动态代理 java原生 vs Cglib
  • MQTT协议基础知识速成(智能家居项目)