嵌入式经典面试题之操作系统(一)

文章目录

    • 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:显示后台任务
  • bgfg:后台和前台控制
  • whoami:显示当前用户
  • who:显示登录用户
  • useradd / userdel:添加和删除用户
  • passwd:更改密码
  • uptime:查看系统运行时间
  • uname:查看系统信息
  • reboot / shutdown:重启和关机
  • tar:打包和解包
tar -czvf archive.tar.gz file.txt
tar -xzvf archive.tar.gz
  • zipunzip:压缩和解压缩
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读写
rwx7读写执行

例子:

  1. 赋予用户可读写,用户组和其他人只读
  2. 赋予所有人读写执行权限
  3. 用户读写执行,用户组读执行,其他用户只读

递归修改目录权限:使用 -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 文件

例子:

  1. 使用编辑器打开 /etc/hostname 文件:
  2. 修改文件中的主机名为新的主机名,保存并退出。
  3. 为了让主机名生效,还需要修改 /etc/hosts 文件。在文件中,找到以下行并将主机名更新为新的名称:修改为:
  4. 重启系统或使用以下命令让主机名更改生效:

(3)使用 hostname 命令

hostname 命令也可以用来临时更改主机名,但这种更改在重启后会丢失。

临时修改主机名:

sudo hostname 新主机名

例子:

sudo hostname mynewhostname

9 简述GDB常见的调试命令?什么是条件断点?多进程下如何调试?

启动GDB

  • 启动 gdb 并加载指定的程序。例如:
gdb ./myprogram

设置断点

  • 断点是程序执行到某一特定位置时会停止执行,允许你检查程序状态(例如变量值、内存等)。
  • break b:设置断点。可以在指定函数名或行号处设置断点。
break main       # 在 main 函数处设置断点
break 50        # 在第 50 行设置断点

删除断点

  • deleted:删除所有或指定的断点。
delete      # 删除所有断点
delete 1    # 删除编号为 1 的断点

启动程序

  • run r:开始运行程序,直到程序遇到断点或完成。

单步调试

  • nextn:执行当前行,跳过当前行中调用的函数,进入下一行代码。
  • step s:逐过程执行,进入函数内部,逐行调试函数内部的代码。
  • finish:在当前函数执行完毕后,返回到调用该函数的地方。

继续执行程序

  • continuec:继续程序的执行,直到遇到下一个断点或程序结束。

查看当前堆栈信息

  • backtrace bt:查看当前的函数调用堆栈(栈回溯),有助于定位程序错误位置。
  • backtrace N:显示最近的 N 层堆栈信息。

查看和修改变量值

  • printp:查看变量的值。
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。

查看内存泄漏

  • mallocfree:用来查看内存分配和释放的情况(如果启用了相应的调试选项)。

退出 GDB

  • quitq:退出 GDB。

条件断点

  • 条件断点是指断点只有在特定条件满足时才会触发。
  • break 设置条件断点 通过在设置断点时添加条件,可以只在特定条件为真时停止程序。

例子:

break myfunc if x > 10

这表示只有当 x > 10 时,程序会在 myfunc 函数入口处暂停。

  • 多条件断点: 你可以结合多个条件,使用 &&|| 来设置复杂的条件断点。

例子:

break myfunc if (x > 10 && y < 5)

这个断点会在 myfunc 函数入口处,且 x > 10y < 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 会继续调试子进程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/894302.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

排查定位jar包大文件

解压 JAR 包&#xff1a; mkdir jar_contents unzip your-jar-file.jar -d jar_contents统计各文件大小&#xff1a; du -ah jar_contents | sort -rh | head -n 20这会列出 JAR 包中最大的文件或目录&#xff0c;方便你定位大文件。 方法 2&#xff1a;使用 jar 工具查看文件…

OpenCV:闭运算

目录 1. 简述 2. 用膨胀和腐蚀实现闭运算 2.1 代码示例 2.2 运行结果 3. 闭运算接口 3.1 参数详解 3.2 代码示例 3.3 运行结果 4. 闭运算的应用场景 5. 注意事项 相关阅读 OpenCV&#xff1a;图像的腐蚀与膨胀-CSDN博客 OpenCV&#xff1a;开运算-CSDN博客 1. 简述…

Python-基于PyQt5,pdf2docx,pathlib的PDF转Word工具

前言:日常生活中,我们常常会跟WPS Office打交道。作表格,写报告,写PPT......可以说,我们的生活已经离不开WPS Office了。与此同时,我们在这个过程中也会遇到各种各样的技术阻碍,例如部分软件的PDF转Word需要收取额外费用等。那么,可不可以自己开发一个小工具来实现PDF转…

C++中的类与对象(下)

上一节我们将类与对象中一个比较难的也是一个比较重要的模块学习了&#xff0c;在这节主要是一些细节上的补充。 文章目录 目录 前言 一、初始化列表 初始化列表的性质 初始化列表的总结 二、类型转换 C中的类型转换 三、static成员 static的特点 一般情况下构造函数调用顺序&a…

rust跨平台调用动态库

动态库在不同的操作系统&#xff0c;扩展名是不一样的&#xff0c;所以要做处理: static LIB: Lazy<Mutex<Option<Library>>> Lazy::new(|| Mutex::new(None));type CreateFunc unsafe extern "C" fn(*const c_char, *const c_char) -> c_int…

四、jQuery笔记

(一)jQuery概述 jQuery本身是js的一个轻量级的库,封装了一个对象jQuery,jquery的所有语法都在jQuery对象中 浏览器不认识jquery,只渲染html、css和js代码,需要先导入jQuery文件,官网下载即可 jQuery中文说明文档:https://hemin.cn/jq/ (二)jQuery要点 1、jQuery对象 …

Versal - 基础4(VD100+Versal IBERT)

1. 简介 在之前的一篇博文中&#xff0c;我分享了在 Zynq Ultrascale MPSoC 中使用 IBERT 的方法。 《Vivado - 集成眼图分析仪 Serial I/O IBERT 误码率_vivado ibert-CSDN博客》 本文进一步探讨 Versal 中使用 IBERT 的方法。 2. 硬件平台 芯片&#xff1a;XCVE2302-SF…

《HelloGitHub》第 106 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对编程感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 Python、…

英语语法 第一天

I’m a student. 我是个学生 我是个新东方的学生 I’m a student of New Oriental School 我爱你 I love you 我在心中爱你 I love you in my heart. 这是一朵花 This is a flower 这是一朵在公园里的花 This is a flower in the park.(修饰部分在修饰词后面) 主干…

Day50:字典的合并

在 Python 中&#xff0c;字典是一个可变的数据类型&#xff0c;经常需要将多个字典合并成一个字典。合并字典的方式有多种&#xff0c;今天我们将学习几种常见的方法。 1. 使用 update() 方法合并字典 update() 方法可以用来将一个字典中的键值对添加到另一个字典中。如果目…

USB鼠标的数据格式

USB鼠标的数据格式由HID&#xff08;Human Interface Device&#xff09;协议定义&#xff0c;通常包含3个字节的标准数据&#xff0c;具体格式如下&#xff1a; 字节内容描述第1字节按键状态Bit 0: 左键按下&#xff08;1&#xff09;<br>Bit 1: 右键按下&#xff08;1…

为AI聊天工具添加一个知识系统 之79 详细设计之20 正则表达式 之7

本文要点 要点 “正则表达式” 本来是计算机科学计算机科学的一个概念。本项目将它推广&#xff08;扩张&#xff09;到认知科学的“认知范畴”概念&#xff0c; 聚合&#xff08;收敛&#xff09;到 神经科学 的“神经元”概念。 做法是&#xff1a;用reg 来系统化定义认知…

Spring RESTful API 设计与实现

Spring RESTful API的设计与实现极大地提升了开发效率和系统可维护性,通过遵循RESTful设计原则,使得API结构清晰、行为一致,便于扩展和维护。它在构建微服务架构中扮演着核心角色,支持松耦合的通信,同时通过标准的HTTP协议和数据格式增强了系统的互操作性。结合Spring Sec…

“新月之智”智能战术头盔系统(CITHS)

新月人物传记&#xff1a;人物传记之新月篇-CSDN博客 相关文章链接&#xff08;更新&#xff09;&#xff1a; 星际战争模拟系统&#xff1a;新月的编程之道-CSDN博客 新月智能护甲系统CMIA--未来战场的守护者-CSDN博客 目录 一、引言 二、智能头盔控制系统概述 三、系统架…

猿人学web 19题(js逆向)

这题直接点击翻页抓包&#xff0c;然后获取seesion ID请求即可 求和代码 import requestssession requests.Session() cookies {sessionid:eao9i00r8pt4xu6uzzx2k01ttqn51yc9} urlhttps://match.yuanrenxue.cn/api/match/19?page sum0 for i in range(1,6):response sess…

c语言:编译和链接(详解)

前言 要将编译和链接&#xff0c;就不得不提及编译器是如何运作的&#xff0c;虽然这部分知识是针对于要创造编译器和创作语言的人所需要清楚的&#xff0c;但作为c语言的学习者也需要了解一下&#xff0c;修炼内功&#xff0c;尤其是对于想学习c的人而言。 编译器的运作过程…

如何解决Unit sshd.service could not be found

出现 Unit sshd.service could not be found 错误时&#xff0c;通常是因为系统中未安装 OpenSSH 服务、服务名称不匹配或系统未使用 systemd 管理服务。以下是详细的解决方案&#xff1a; 一、确认 SSH 服务是否安装 1. 检查是否已安装 OpenSSH 服务器 不同 Linux 发行版的包…

积分和微分的区别

积分&#xff1a; 积分是由微小量求大量&#xff0c;由微观的数据求得整体的状况。运算是对总量求和。 微分&#xff1a; 微分是由大量求微小量&#xff0c;反应微观的状况&#xff0c;运算是伴随着求导。 峰值检测电路: 上图检测的误差主要来自与二极管的正向导通电压降&am…

OVS-DPDK

dpdk介绍及应用 DPDK介绍 DPDK&#xff08;Data Plane Development Kit&#xff09;是一组快速处理数据包的开发平台及接口。有intel主导开发&#xff0c;主要基于Linux系统&#xff0c;用于快速数据包处理的函 数库与驱动集合&#xff0c;可以极大提高数据处理性能和吞吐量&…

【Go语言圣经】第六节:方法

第六章&#xff1a;方法 6.1 方法声明 在函数声明时&#xff0c;在其名字之前放上一个变量&#xff0c;这就是声明了变量对应类型的一个方法&#xff0c;相当于为这种类型定义了一个独占的方法。 下例为 Point 类型声明了计算两个点之间距离的方法&#xff1a; package mai…