嵌入式经典面试题之操作系统(一)
文章目录
- 1 请你说说常用的Linux命令有哪些?
- 2 在linux中如何创建一个新的目录?
- 3 Linux中查看进程运行状态的指令、tar解压文件的参数。
- 4 在linux中,文件权限如何修改?
- 5 怎样以root权限运行某个程序?
- 6 在linux里如何查看一个进程?
- 7 在Linux里如何看带关键字日志文件?
- 8 在Linux中修改主机名的命令是什么?
- 9 简述GDB常见的调试命令?什么是条件断点?多进程下如何调试?
1 请你说说常用的Linux命令有哪些?
ls:列出目录内容
ls -l
ls -a
cd:切换目录
cd /path/to/directory
pwd:显示当前工作目录
pwd
mkdir:创建目录
mkdir new_directory
rm:删除文件或目录
rm file.txt
cp:复制文件或目录
cp source.txt destination.txt
mv:移动或重命名文件
mv oldname.txt newname.txt
find:查找文件
find /path -name "filename"
cat:查看文件内容
cat file.txt
chmod:修改文件权限
chmod 777 file.sh
chown:更改文件所有者ps:显示当前进程
ps aux
top:动态显示系统任务kill:终止进程
kill PID
jobs:显示后台任务bg和fg:后台和前台控制whoami:显示当前用户who:显示登录用户useradd/userdel:添加和删除用户passwd:更改密码uptime:查看系统运行时间uname:查看系统信息reboot/shutdown:重启和关机tar:打包和解包
tar -czvf archive.tar.gz file.txt
tar -xzvf archive.tar.gz
zip和unzip:压缩和解压缩
zip archive.zip file.txt
unzip archive.zip
2 在linux中如何创建一个新的目录?
语法如下:
mkdir 新目录名
例子:比如我们要创建一个创建一个名为 game 的新目录:
mkdir game
比如你想一次创建多个目录:
mkdir game1 game2 game3
比如你想创建一个嵌套目录(创建父目录及其子目录),那我们可以使用 -p 选项:
mkdir -p parent/child/grandchild
这个命令会创建 parent 目录,里面有 child 目录,而 child 目录下会有 grandchild 目录。如果父目录不存在,-p 会自动创建它们。
3 Linux中查看进程运行状态的指令、tar解压文件的参数。
在Linux中,可以使用以下指令查看进程的运行状态:
top命令
用于实时监视系统的进程活动和系统资源使用情况。在终端中运行top命令,可以查看进程的CPU占用、内存占用、运行时间等信息。
ps 命令
ps 是查看当前进程的基本命令。常用的参数有:
ps aux:显示所有进程,包括其他用户的进程。ps -ef:显示系统中的所有进程,类似ps aux。
对于tar解压文件,可以使用以下参数:
- x:表示解压文件。
- v:可选参数,表示显示详细的解压过程。
- f:后面接需要解压的文件名。
- z:可选参数,用于解压gzip格式的文件。
- j:可选参数,用于解压bzip2格式的文件。
- C:指定解压目录,后面接目标目录。
例如,使用以下命令解压一个tar文件:tar -xvf file.tar
如果需要解压一个gzip格式的tar文件,可以使用以下命令:tar -xzvf file.tar.gz
4 在linux中,文件权限如何修改?
在说明文件权限修改之前我们简单先说说这些代表什么意思, chmod 是一个命令,用来修改文件和目录的权限。 读 ®、写 (w) 和 执行 (x)分别代表文件权限,而这些权限分别赋予 用户 (user)、用户组 (group) 和 其他用户 (others)。
查看权限:使用 ls -l 命令查看文件和目录的权限:
ls -l file.txt
输出类似:
-rwxr-xr-- 1 user group size date file.txt
权限字段中的每个字符表示不同的用户权限。
修改权限:数字 4 表示读(r),2 表示写(w),1 表示执行(x)。将数字相加表示不同的权限组合。常见权限组合:
r-- | 4 | 只读 |
|---|---|---|
rw- | 6 | 读写 |
rwx | 7 | 读写执行 |
例子:
- 赋予用户可读写,用户组和其他人只读
- 赋予所有人读写执行权限
- 用户读写执行,用户组读执行,其他用户只读
递归修改目录权限:使用 -R 参数可以递归修改目录及其所有子目录和文件的权限:
chmod -R 755 /path/to/directory
5 怎样以root权限运行某个程序?
使用 sudo 运行程序:sudo允许授权用户以超级用户权限执行命令。
用法:
sudo chown root app(文件名)
或
sudo chmod u+s app(文件名)
使用 su 切换到 root 用户:su命令可以切换到另一个用户,通常用于切换到 root 用户,执行完命令后,返回普通用户模式。
用法:
su -
(注意,- 表示切换到 root 用户并加载 root 用户的环境变量)
启用 root 用户:有些 Linux 发行版(如 Ubuntu)默认禁用 root 用户,使用 sudo 来进行权限管理。如果需要启用 root 用户,可以运行:
sudo passwd root
然后输入新密码来启用 root 用户。
6 在linux里如何查看一个进程?
ps aux | grep process_name:查找并显示特定进程。top:实时显示进程,适合动态查看。htop:增强版top,有图形化界面,便于操作。pgrep process_name:查找进程的 PID。pidof process_name:查看指定进程的 PID。lsof -i :port:查看占用特定端口的进程。pstree:查看进程的树状结构,显示父子进程关系。
7 在Linux里如何看带关键字日志文件?
grep "关键字" /path/to/logfile:基本查找。grep -n "关键字" /path/to/logfile:显示行号。grep -i "关键字" /path/to/logfile:忽略大小写。grep -A N "关键字" /path/to/logfile:显示匹配行之后 N 行。grep -B N "关键字" /path/to/logfile:显示匹配行之前 N 行。grep -r "关键字" /path/to/directory:递归搜索目录中的日志文件。
接下来我们在对grep命令的一些补充,grep 是 Linux 和类 Unix 系统中一个非常强大的命令行工具,用于在文件中搜索文本,尤其擅长使用正则表达式来进行复杂的模式匹配。
用法:
grep [选项] '模式' 文件
模式:表示你要查找的文本或正则表达式。文件:你要搜索的文件,支持多个文件。
例子:查找文件 file.txt 中所有包含 “game” 的行:
grep "game" file.txt
常用选项grep 提供了许多选项来增强其功能,以下是一些最常用的选项:
-i:忽略大小写
- 默认情况下,grep是区分大小写的。如果希望忽略大小写,可以使用 -i 选项。
grep -i "game" file.txt
-n:显示行号
- 使用
-n可以显示匹配行的行号,帮助快速定位。
grep -n "game" file.txt
-v:反向匹配
- -v选项表示显示不匹配的行,即排除掉匹配指定模式的行。
grep -v "game" file.txt
-l:只显示文件名
- -l选项让 grep 只显示包含匹配模式的文件名,而不显示匹配的内容。
grep -l "game" *.txt
-r 或 -R:递归查找
- -r 或 -R 选项让 grep 在目录中递归地搜索所有文件。
grep -r "game" /path/to/directory
-c:只显示匹配行的计数
- -c 选项可以统计匹配模式的行数,而不是显示匹配的行内容。
grep -c "game" file.txt
-w:匹配整个单词
- -w 选项可以确保匹配的模式是整个单词,而不是模式的一部分。
grep -w "game" file.txt
-A N:显示匹配行及其之后的 N 行
- -A 选项显示匹配行后面 N 行内容,常用于查看上下文。
grep -A 2 "game" file.txt
-B N:显示匹配行及其之前的 N 行
- -B 选项显示匹配行前面 N 行内容。
grep -B 2 "game" file.txt
-C N:显示匹配行及其前后各 N 行
- -C 选项显示匹配行前后各 N 行内容,便于查看上下文。
grep -C 2 "game" file.txt
--color:高亮显示匹配结果
- 使用 --color 选项可以高亮显示匹配的关键字,便于阅读。
grep --color "game" file.txt
正则表达式支持:
.:匹配任意单个字符。\*:匹配零个或多个字符。^:匹配行的开始。$:匹配行的结束。[]:匹配字符集中的任何一个字符。|:表示“或”,用于选择多个模式。():分组,用于组合多个模式。
例子:
- 查找以 “game” 开头的行:
- 查找以 “apple” 或 “banana” 开头的行:
- 查找包含数字的行:
8 在Linux中修改主机名的命令是什么?
(1)使用 hostnamectl 命令
修改主机名:
sudo hostnamectl set-hostname 新主机名
例子:
sudo hostnamectl set-hostname mynewhostname
这将更改系统的主机名,并且通常不需要重启。请注意,在某些系统上,修改主机名后可能需要重启系统才能使更改生效。
查看当前主机名:
hostnamectl
这个命令会输出类似以下内容:
Static hostname: mynewhostnameIcon name: computer-vmChassis: vmMachine ID: xxxxxxxxBoot ID: xxxxxxxxOperating System: Ubuntu 20.04 LTSKernel: Linux 5.4.0-80-genericArchitecture: x86-64
(2)修改 /etc/hostname 文件
例子:
- 使用编辑器打开 /etc/hostname 文件:
- 修改文件中的主机名为新的主机名,保存并退出。
- 为了让主机名生效,还需要修改 /etc/hosts 文件。在文件中,找到以下行并将主机名更新为新的名称:修改为:
- 重启系统或使用以下命令让主机名更改生效:
(3)使用 hostname 命令
hostname 命令也可以用来临时更改主机名,但这种更改在重启后会丢失。
临时修改主机名:
sudo hostname 新主机名
例子:
sudo hostname mynewhostname
9 简述GDB常见的调试命令?什么是条件断点?多进程下如何调试?
启动GDB
- 启动
gdb并加载指定的程序。例如:
gdb ./myprogram
设置断点
- 断点是程序执行到某一特定位置时会停止执行,允许你检查程序状态(例如变量值、内存等)。
break或b:设置断点。可以在指定函数名或行号处设置断点。
break main # 在 main 函数处设置断点
break 50 # 在第 50 行设置断点
删除断点
delete或d:删除所有或指定的断点。
delete # 删除所有断点
delete 1 # 删除编号为 1 的断点
启动程序
run或r:开始运行程序,直到程序遇到断点或完成。
单步调试
next或n:执行当前行,跳过当前行中调用的函数,进入下一行代码。step或s:逐过程执行,进入函数内部,逐行调试函数内部的代码。finish:在当前函数执行完毕后,返回到调用该函数的地方。
继续执行程序
continue或c:继续程序的执行,直到遇到下一个断点或程序结束。
查看当前堆栈信息
backtrace或bt:查看当前的函数调用堆栈(栈回溯),有助于定位程序错误位置。backtrace N:显示最近的 N 层堆栈信息。
查看和修改变量值
print或p:查看变量的值。
print x # 查看变量 x 的值
print myfunc() # 查看函数调用的返回值
set:修改变量的值。
set variable x = 10 # 将 x 的值设置为 10
查看源代码
list或l:显示当前执行位置附近的源代码。list结合行号或函数名:查看特定函数或行附近的代码。
查看和修改内存
x:查看内存内容,按指定格式输出内存。
查看程序运行状态
info:查看程序状态、变量值、寄存器值等。 info locals:显示当前函数的局部变量。info registers:显示当前寄存器的值。info threads:查看当前程序中的线程信息。
设置和显示条件断点
watch:设置条件断点,观察某个变量的变化。info watchpoints:查看所有设置的 watchpoints。
查看内存泄漏
malloc和free:用来查看内存分配和释放的情况(如果启用了相应的调试选项)。
退出 GDB
quit或q:退出 GDB。
条件断点
- 条件断点是指断点只有在特定条件满足时才会触发。
break设置条件断点 通过在设置断点时添加条件,可以只在特定条件为真时停止程序。
例子:
break myfunc if x > 10
这表示只有当 x > 10 时,程序会在 myfunc 函数入口处暂停。
- 多条件断点: 你可以结合多个条件,使用
&&或||来设置复杂的条件断点。
例子:
break myfunc if (x > 10 && y < 5)
这个断点会在 myfunc 函数入口处,且 x > 10 且 y < 5 时生效。
多进程下的调试
- 在调试涉及多个进程(如多线程程序、父子进程或多进程应用)时,GDB 提供了一些特别的功能来帮助调试这些进程。
调试多进程应用
当程序创建多个子进程时,可以使用 GDB 进行进程间的调试。每个进程都会有一个唯一的进程 ID(PID)。
info inferiors:显示所有的子进程。inferior:切换到指定的进程进行调试。attach:将 GDB 附加到已经存在的进程。detach:从当前进程中分离(不再调试当前进程)。
调试多线程程序
- 在多线程程序中,GDB 允许你调试特定的线程。
info threads:列出所有线程的信息,包括线程号和状态。
info threads
thread:切换到指定线程进行调试。例如,切换到线程5:
thread 5
break设置线程特定断点:你可以设置仅在特定线程上触发的断点。
break myfunc if pthread_self() == 5
使用 set follow-fork-mode 调试父子进程
- set follow-fork-mode parent:当 fork() 被调用时,GDB 会继续调试父进程。
- set follow-fork-mode child:当 fork() 被调用时,GDB 会继续调试子进程。
相关文章:
嵌入式经典面试题之操作系统(一)
文章目录 1 请你说说常用的Linux命令有哪些?2 在linux中如何创建一个新的目录?3 Linux中查看进程运行状态的指令、tar解压文件的参数。4 在linux中,文件权限如何修改?5 怎样以root权限运行某个程序?6 在linux里如何查看…...
讯飞绘镜(ai生成视频)技术浅析(四):图像生成
1. 技术架构概述 讯飞绘镜的图像生成技术可以分为以下几个核心模块: 文本理解与视觉元素提取:解析脚本中的场景描述,提取关键视觉元素(如人物、场景、物体等)。 视觉元素生成:根据文本描述生成具体的视觉元素(如人物、场景、物体等)。 分镜画面生成:将视觉元素组合成…...
搜索引擎快速收录:关键词布局的艺术
本文来自:百万收录网 原文链接:https://www.baiwanshoulu.com/21.html 搜索引擎快速收录中的关键词布局,是一项既精细又富有策略性的工作。以下是对关键词布局艺术的详细阐述: 一、关键词布局的重要性 关键词布局影响着后期页面…...
[Effective C++]条款53-55 杂项讨论
本文初发于 “天目中云的小站”,同步转载于此。’ 学到这里, Effective C至此也算是告一段落了, 还剩下一些杂七杂八的讨论, 我们将在本文逐一列举. 条款53 : 不要忽视编译器的警告 我们应严肃对待编译器发出的警告信息, 努力在你的编译器最高警告级别下争取无警告…...
FreeRTOS从入门到精通 第十五章(事件标志组)
参考教程:【正点原子】手把手教你学FreeRTOS实时系统_哔哩哔哩_bilibili 一、事件标志组简介 1、概述 (1)事件标志位是一个“位”,用来表示事件是否发生。 (2)事件标志组是一组事件标志位的集合&#x…...
5 长度和距离计算模块(length.rs)
这段代码定义了一个泛型结构体 Length<T, Unit>,用于表示一维长度,其中 T 表示长度的数值类型,而 Unit 是一个编译时检查单位一致性的占位符类型,不会用于运行时表示长度的值。这个设计允许开发者在编译阶段确保不同单位之间…...
使用Pygame制作“俄罗斯方块”游戏
1. 前言 俄罗斯方块(Tetris) 是一款由方块下落、行消除等核心规则构成的经典益智游戏: 每次从屏幕顶部出现一个随机的方块(由若干小方格组成),玩家可以左右移动或旋转该方块,让它合适地堆叠在…...
deepseek大模型本机部署
2024年1月20日晚,中国DeepSeek发布了最新推理模型DeepSeek-R1,引发广泛关注。这款模型不仅在性能上与OpenAI的GPT-4相媲美,更以开源和创新训练方法,为AI发展带来了新的可能性。 本文讲解如何在本地部署deepseek r1模型。deepseek官…...
常见“栈“相关题目
找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏: 优选算法专题 目录 1047.删除字符串中的所有相邻重复项 844.比较含退格的字符串 227.基本计算器 II 394.字符串解码 946.验证栈序列 104…...
QT实现有限元软件操作界面
本系列文章致力于实现“手搓有限元,干翻Ansys的目标”,基本框架为前端显示使用QT实现交互,后端计算采用Visual Studio C。 本篇将二维矩形截面梁单元(Rect_Beam2D2Node)组成的钢结构桥作为案例来展示软件功能。 也可以…...
软件工程经济学-日常作业+大作业
目录 一、作业1 作业内容 解答 二、作业2 作业内容 解答 三、作业3 作业内容 解答 四、大作业 作业内容 解答 1.建立层次结构模型 (1)目标层 (2)准则层 (3)方案层 2.构造判断矩阵 (1)准则层判断矩阵 (2)方案层判断矩阵 3.层次单排序及其一致性检验 代码 …...
深度学习篇---深度学习框架
文章目录 前言第一部分:框架简介1. PyTorch简介特点动态计算图易于上手强大的社区支持与Python的集成度高 核心组件 2. TensorFlow简介特点静态计算图跨平台强大的生态系统Keras集成 核心组件 3. PaddlePaddle简介特点易于使用高性能工业级应用丰富的预训练模型 核心…...
Go学习:Go语言中if、switch、for语句与其他编程语言中相应语句的格式区别
Go语言中的流程控制语句逻辑结构与其他编程语言类似,格式有些不同。Go语言的流程控制中,包括if、switch、for、range、goto等语句,没有while循环。 目录 1. if 语句 2. switch语句 3. for语句 4. range语句 5. goto语句(不常用…...
Java中初步使用websocket(springBoot版本)
一、什么是websocket WebSocket是一种在Web应用程序中实现实时双向通信的协议。它为浏览器和服务器之间提供了一种持久连接,在一个连接上可以双向传输数据。相比传统的HTTP协议,WebSocket具有更低的延迟和更高的效率。 WebSocket使用了类似于握手的方式来…...
Day50:字典的合并
在 Python 中,字典是一个可变的数据类型,经常需要将多个字典合并成一个字典。合并字典的方式有多种,今天我们将学习几种常见的方法。 1. 使用 update() 方法合并字典 update() 方法可以用来将一个字典中的键值对添加到另一个字典中。如果目…...
14-8C++STL的queue容器
一、queue容器 (1)queue容器的简介 queue为队列容器,“先进先出”的容器 (2)queue对象的构造 queue<T>q; queue<int>que Int;//存放一个int的queue容器 queue<string>queString;//存放一个string的queue容器 (3)queue容器的push()与pop()方…...
C++范围for和auto关键字
这里写目录标题 一.范围for的介绍与使用模版:⽰例:打印数组2. 方法如下⽰例:打印数组二.auto 关键字一.范围for的介绍与使用 模版: for ( 类型 变量名 : 数组名 )语句 //多条语句需要加⼤括号 ⽰例:打印数组 #include <iostream> using namespace std; int main()…...
【B站保姆级视频教程:Jetson配置YOLOv11环境(四)cuda cudnn tensorrt配置】
Jetson配置YOLOv11环境(4)cuda cudnn tensorrt配置 文章目录 0. 简介1. cuda配置:添加cuda环境变量2. cudnn配置3. TensorRT Python环境配置3.1 系统自带Python环境中的TensorRT配置3.2 Conda 虚拟Python环境中的TensorRT配置 0. 简介 官方镜…...
信号模块--simulink操作
位置simulink/sourses 常用的模块 功能:常数模块,提供一个常数 数据设置可以是一维或多维 一维数据设置 多维数据设置(例三维数据设置) 方波脉冲模块 模块用于按固定间隔生成方波脉冲信号 振幅就是方波的幅度,0到…...
强化学习笔记(3)——基于值函数的方法和策略梯度方法
分为两大类方法: 基于值函数的方法(Temporal Difference Methods, TD Methods) 策略梯度方法(Policy Gradient Methods)。 二者不同之处: 通过值函数来间接表达隐式的策略,一个是直接迭代优化策…...
新年新挑战:如何用LabVIEW开发跨平台应用
新的一年往往伴随着各种新的项目需求,而跨平台应用开发无疑是当前备受瞩目的发展趋势。在众多开发工具中,LabVIEW 以其独特的图形化编程方式和强大的功能,为开发跨平台应用提供了有效的途径。本文将深入探讨如何运用 LabVIEW 开发能够在不同操…...
事务04之死锁,锁底层和隔离机制原理
死锁和事务底层原理 文章目录 死锁和事务底层原理一:MySQL中的死锁现象1:何为死锁1.1:死锁的概念1.2:死锁产生的四个必要条件: 2:MySQL的死锁2.1:死锁的触发2.2:MySQL的死锁如何解决…...
第05章 17 Contour 过滤器介绍与例子
vtkContourFilter 是 VTK(Visualization Toolkit)中的一个关键类,用于从输入数据生成等值线或等值面。它是基于阈值的过滤器,可以从标量字段中提取等值线或等值面。vtkContourFilter 的核心功能是根据用户指定的值生成等值线或等值…...
Golang 并发机制-2:Golang Goroutine 和竞争条件
在今天的软件开发中,我们正在使用并发的概念,它允许一次执行多个任务。在Go编程中,理解Go例程是至关重要的。本文试图详细解释什么是例程,它们有多轻,通过简单地使用“go”关键字创建它们,以及可能出现的竞…...
【4Day创客实践入门教程】Day0 创想启程——课程与项目预览
Day0 创想启程——课程与项目预览 目录 Day0 创想启程——课程与项目预览前言学习内容基本的单片机开发技能简单的焊接技能简单的MicroPython程序 后记 Day1 工具箱构建——开发环境的构建Day2 探秘微控制器——单片机与MicroPython初步Day3 实战演练——桌面迷你番茄钟Day4 迈…...
洛谷P3372 【模板】线段树 1以及分块
【模板】线段树 1 题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某区间每一个数加上 k k k。求出某区间每一个数的和。 输入格式 第一行包含两个整数 n , m n, m n,m,分别表示该数列数字的个数和操作的总个数。 …...
(动态规划基础 打家劫舍)leetcode 198
已知h2和h1,用已知推出未知 推是求答案,回溯是给答案 这里图片给出dfs暴力,再进行记录答案完成记忆化搜索,再转为dp数组 #include<iostream> #include<vector> #include<algorithm> //nums:2,1,1,2 //dp:2,2,…...
Python 梯度下降法(四):Adadelta Optimize
文章目录 Python 梯度下降法(四):Adadelta Optimize一、数学原理1.1 介绍1.2 实现流程 二、代码实现2.1 函数代码2.2 总代码 三、优缺点3.1 优点3.2 缺点 四、相关链接 Python 梯度下降法(四):Adadelta Opt…...
旅行的意义:“诗与远方”和在旅途中找寻真我
原文链接:旅行的意义:“诗与远方”和在旅途中找寻真我 困在格子间,心向远方 清晨,闹钟催促,打工人挣扎起床出门。地铁拥挤,工作繁忙,加班成常态,下班时夜幕已深,满心疲惫…...
leetcode——将有序数组转化为二叉搜索树(java)
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。 示例 1: 输入:nums [-10,-3,0,5,9] 输出:[0,-3,9,-10,null,5] 解释:[0,-10,5,null,-3,null,9] 也将被视为正确答…...
