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

文章目录

    • 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,一经查实,立即删除!

相关文章

OpenCV:闭运算

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

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

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

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.(修饰部分在修饰词后面) 主干…

“新月之智”智能战术头盔系统(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的人而言。 编译器的运作过程…

积分和微分的区别

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

OVS-DPDK

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

亚博microros小车-原生ubuntu支持系列:18 Cartographer建图

Cartographer简介 Cartographer是Google开源的一个ROS系统支持的2D和3D SLAM&#xff08;simultaneous localization and mapping&#xff09;库。基于图优化&#xff08;多线程后端优化、cere构建的problem优化&#xff09;的方法建图算法。可以结合来自多个传感器&#xff0…

安卓(android)实现注册界面【Android移动开发基础案例教程(第2版)黑马程序员】

一、实验目的&#xff08;如果代码有错漏&#xff0c;可查看源码&#xff09; 1.掌握LinearLayout、RelativeLayout、FrameLayout等布局的综合使用。 2.掌握ImageView、TextView、EditText、CheckBox、Button、RadioGroup、RadioButton、ListView、RecyclerView等控件在项目中的…

爬虫基础(四)线程 和 进程 及相关知识点

目录 一、线程和进程 &#xff08;1&#xff09;进程 &#xff08;2&#xff09;线程 &#xff08;3&#xff09;区别 二、串行、并发、并行 &#xff08;1&#xff09;串行 &#xff08;2&#xff09;并行 &#xff08;3&#xff09;并发 三、爬虫中的线程和进程 &am…

自签证书的dockerfile中from命令无法拉取镜像而docker的pull命令能拉取镜像

问题现象&#xff1a; docker pull images拉取镜像正常 dockerfile中的from命令拉取镜像就会报出证书错误。报错信息如下&#xff1a; [bjxtbwj-kvm-test-jenkins-6-243 ceshi_dockerfile]$ docker build . [] Building 0.4s (3/3) FINISHED …

计算机网络 IP 网络层 2 (重置版)

IP的简介&#xff1a; IP 地址是互联网协议地址&#xff08;Internet Protocol Address&#xff09;的简称&#xff0c;是分配给连接到互联网的设备的唯一标识符&#xff0c;用于在网络中定位和通信。 IP编制的历史阶段&#xff1a; 1&#xff0c;分类的IP地址&#xff1a; …

面对企业文件交换难题,镭速跨网文件交换系统是如何解决的?

在当今这个数字化快速发展的时代&#xff0c;企业越来越依赖于数据交换来维持其业务运作。无论是内部网络之间的沟通还是与外部合作伙伴的数据共享&#xff0c;高效且安全的跨网文件交换都显得尤为重要。然而&#xff0c;在实际操作中&#xff0c;许多企业面临着各种各样的挑战…

Many Whelps! Handle It! (10 player) Many Whelps! Handle It! (25 player)

http://db.nfuwow.com/80/?achievement4403 http://db.nfuwow.com/80/?achievement4406 最少扣你50DKP! 第二阶段 当奥妮克希亚升空后&#xff0c;在10秒内引出50只奥妮克希亚雏龙&#xff0c;随后击败奥妮克希亚。 World of Warcraft [CLASSIC][80猎人][Grandel][最少扣你5…

自制虚拟机(C/C++)(一、分析语法和easyx运用,完整虚拟机实现)

网上对虚拟机的解释很多&#xff0c;其实本质就一句话 虚拟机就是机器语言解释器 我们今天要实现汇编语言解释器&#xff0c;下一次再加上ndisasm反汇编器就是真正虚拟机了 注:这里的虚拟机指的是VMware一类的&#xff0c;而不是JVM&#xff0c;python一样的高级语言解释器 …

36. printf

1. printf 格式化函数说的是 printf、 sprintf 和 scanf 这样的函数&#xff0c;分为格式化输入和格式化输出两类函数。学习 C 语言的时候常常通过 printf 函数在屏幕上显示字符串&#xff0c;通过 scanf 函数从键盘获取输入。这样就有了输入和输出了&#xff0c;实现了最基本…

实验八 JSP访问数据库

实验八 JSP访问数据库 目的&#xff1a; 1、熟悉JDBC的数据库访问模式。 2、掌握使用My SQL数据库的使用 实验要求&#xff1a; 1、通过JDBC访问mysql数据&#xff0c;实现增删改查功能的实现 2、要求提交实验报告&#xff0c;将代码和实验结果页面截图放入报告中 实验过程&a…