首页 > 系统相关 >Linux笔试题目记录(1)

Linux笔试题目记录(1)

时间:2024-11-02 16:18:06浏览次数:7  
标签:题目 笔试 嵌入式 awk 内核 Linux 断点 调试

文章目录


一、Linux文本三剑客—grep、sed、awk

  awk、grep、sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一。三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂。grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。

  1. grep——Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来(匹配到的标红)。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
    命令格式 :

    grep [option] pattern file
    

    常用参数:

     -A<显示行数>:除了显示符合范本样式的那一列之外,并显示该行之后的内容。
     -B<显示行数>:除了显示符合样式的那一行之外,并显示该行之前的内容。
     -C<显示行数>:除了显示符合样式的那一行之外,并显示该行之前后的内容。
     -c:统计匹配的行数
     -e :实现多个选项间的逻辑or 关系
     -E:扩展的正则表达式
     -f FILE:从FILE获取PATTERN匹配
     -F :相当于fgrep
     -i --ignore-case #忽略字符大小写的差别。
     -n:显示匹配的行号
     -o:仅显示匹配到的字符串
     -q: 静默模式,不输出任何信息
     -s:不显示错误信息。
     -v:显示不被pattern 匹配到的行,相当于[^] 反向匹配
     -w :匹配 整个单词
    
  2. sed 是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(patternspace ),接着用sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如‘D’ 的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出或-i。
    命令格式:

    sed [options] '[地址定界] command' file(s)
    

    常用选项:

     -n:不输出模式空间内容到屏幕,即不自动打印,只打印匹配到的行
     -e:多点编辑,对每行处理时,可以有多个Script
     -f:把Script写到文件当中,在执行sed时-f 指定文件路径,如果是多个Script,换行写
     -r:支持扩展的正则表达式
     -i:直接将处理的结果写入文件
     -i.bak:在将处理的结果写入文件之前备份一份
    
  3. awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。
    命令格式 :

    awk [options] 'program' var=value file…
    awk [options] -f programfile var=value file…
    awk [options] 'BEGIN{ action;… } pattern{ action;… } END{ action;… }' file ...
    

    常用选项:

     -F fs:fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:
     -v var=value:赋值一个用户定义变量,将外部变量传递给awk
     -f scripfile:从脚本文件中读取awk命令
    

二、Linux内核模块相关命令

  1. dmesg —— 查看Linux内核日志
  2. lsmod —— 列出已经加载的内核模块;
  3. modinfo ——查看模块信息;
  4. modprobe —— 挂载新模块以及新模块相依赖的模块
  5. rmmod —— 移除已挂载模块;
  6. depmod —— 创建模块依赖关系的列表
  7. insmod —— 挂载模块;

三、Linux内核日志级别

    emerg: System is unusable.
    alert: Action must be taken immediately.
    crit: Critical conditions.
    err: Error conditions.
    warn: Warning conditions.
    notice: Normal but significant condition.
    info: Informational.
    debug: Debug-level messages.

Linux内核日志查看之dmesg命令简介:Linux内核日志查看之dmesg命令简介

四、Linux内存管理之kmalloc kzalloc vmalloc malloc 和get_free_page()的区别

  1. kmalloc申请的是较小的连续的物理内存,虚拟地址上也是连续的。kmalloc和get_free_page最终调用实现是相同的,只不过在调用最终函数时所传的flag不同而已。除非被阻塞否则他执行的速度非常快,而且不对获得空间清零。

  2. get_free_page()申请的内存是一整物理页,一页的大小一般是128K。
    区别:

    kmalloc() 分配连续的物理地址,用于小内存分配。
    __get_free_page() 分配连续的物理地址,用于整页分配。
    
  3. kzalloc 先是用 kmalloc() 申请空间 , 然后用 memset() 清零来初始化 ,所有申请的元素都被初始化为 0.

  4. vmalloc用于申请较大的内存空间,虚拟内存是连续,但是在物理上它们不要求连续

  5. malloc 用于用户空间申请内存。除非被阻塞否则他执行的速度非常快,而且不对获得空间清零。

五、Linux的调度策略

linux内核的三种主要调度策略:

  1. SCHED_OTHER :分时调度策略,
  2. SCHED_FIFO : 实时调度策略,先到先服务
  3. SCHED_RR :实时调度策略,时间片轮转

六 、(多选)下列哪些是linux驱动开发中常用的调试技术()

A、使用printk输出信息
B、使用Valgrind检查内存泄漏
C、使用Kprobes进行动态服踪
D、使用ltrace监视系统调用2
E、使用GDB调试内核代码
答:A,C,D,E是linux驱动开发中常用的调试技术。答案选择为ACDE
解析:
选项A:使用printk输出信息:
1. printk是Linux内核中用于输出信息的函数,可以将信息打印到系统日志中,是Linux驱动开发中非常常用的调试方法,用于输出关键信息以帮助开发者了解程序的执行情况和状态,因此是常用
的调试技术。
选项B:使用Valgrind检查内存泄漏:
2. Valgrind是一个内存调试工具,主要用于用户空间程序的内存泄漏检查,而不是专门用于内核空间的调试,因此在驱动开发中并不常用。
选项C:使用Kprobes进行动态跟踪:
3. Kprobes是Linux内核提供的动态跟踪机制,可以在代码执行过程中插入探针(probes)来监控
和调试程序,是驱动开发中常用的调试技术。
选项D:使用Itrace监视系统调用:
4. Itrace用于跟踪和记录系统调用,帮助开发者分析和解决问题,是Linux驱动开发中常用的调试
技术。
选项E:使用GDB调试内核代码
5. GDB(GNU调试器)可以用于调试内核代码,通过它可以进行断点设置、单步执行等操作,是驱
动开发中常用的调试工具。
综合以上分析,选项A、C、D、E均为Linux驱动开发中常用的调试技术,而选项B则不常用。

七、简述GDB常见的调试命令,什么是条件断点,多进程下如何调试。

GDB(GNU Debugger)是一个强大的命令行调试工具,用于对程序进行调试和分析。下面是 GDB 的常见调试命令以及关于条件断点和多进程调试的简要说明:

常见调试命令:
1. break(或 b):设置断点,断点可以在指定的源代码行位置暂停程序的执行。
2. run(或 r):启动程序的执行,如果有断点,则执行到第一个断点处暂停。
3. continue(或 c):继续执行程序,直到遇到下一个断点或程序结束。
4. next(或 n):执行下一条语句,但是不会进入函数。
5. step(或 s):执行下一条语句,并进入函数。
6. print(或 p):打印变量的值。backtrace(或 bt):打印函数调用堆栈。
7. quit(或 q):退出 GDB。

条件断点:
条件断点是根据给定的条件在程序执行过程中暂停的断点。可以使用 break 命令并在源代码行位置后添加条件表达式来设置条件断点。例如:其中 line_number 是要设置断点的源代码行号,condition 是表示条件的表达式。只有当条件表达式为真时,断点才会触发。

多进程调试:
在 GDB 中,可以调试多进程程序。使用 attach 命令可以连接到正在运行的进程,让 GDB 托管该进程进行调试。例如:其中 pid 是要调试的进程的进程 ID。连接成功后,就可以使用调试命令对该进程进行调试。还可以使用 info inferiors 命令查看当前连接的进程列表。另外,GDB 还提供了一些特殊的命令用于处理多进程调试,如 inferior 命令用于切换当前活动进程,detach 命令用于从进程中分离 GDB。

八、linux常见填空题

  1. Linu下的一个进程在内存里包括三部分的数据,它们是()
    答:代码段,数据段,堆栈段
  2. 目前使用的嵌入式操作系统主要有
    答:Linux,Windows CE,uc/OS,Android(其他:VxWorks,PalmOS,QNX,Symbian等)
  3. 如果按用途划分,嵌入式微处理器可分为哪几类?
    答:嵌入式微控制器(MCU),又称为单片机;嵌入式微处理器(EMPU);嵌入式DSP处理器;嵌入式片上系统(SOC)
  4. ARM核有两个指令集,分别是:()和()
    答:ARM指令集,Thmb指令集
  5. Makefle里主要包括的语法规则有哪些:
    答:显式规则,隐跨规则,变量定义,文件指示,注释
  6. 大多数Bootlouder都包含两种不同的操作模式,分别是(),()
    答:启动加载模式,下载模式
  7. Linux内核的配置系统由三部分组成,它它们分别是:
    答:Makefile,配置文件(config),配置工具

九、开发常见专业缩写名词

  1. RISC : reduced instruction set computer,精简“指令集计算机”
  2. MCU : MicroControllerUnit,微控制单元
  3. DSP : Digital Signal Processor,数字信号处理器
  4. ROM : read-only memory,只读存储器
  5. SWI : Softare InterruptPC : 程序计数器
  6. IRQ : 外部中断请求
  7. NFS :Network File System网络文件系统
  8. SOC : System On Chip,片上系统
  9. CPSR : 当前程序状态寄存器
  10. ICE : In Circuit Emulator,实时在线仿真器
  11. MMU :Memory Management Unit,内存管理单元
  12. FIQ : 快速中断请求
  13. VFS :虚拟文件系统
  14. IPC : Inter-Process Communication , 内部进程间通信
  15. IR : 指令寄存器

十、问答题

  1. 嵌入式开发环境主要包括哪些组件?
    答:嵌入式系统开发需要交又编译在线调试的开发环境,主要包括宿主机目标机(评估电路板)基于JTAG的ICD仿真器、或调试监控软件、或在线仿真器ICE运行于宿主机的交叉编译器和链接器、以及开发工具链或软件开发环境。

  2. 什么是嵌入式系统,嵌入式系统同PC系统相比具有哪些特点?
    答:根据电气工程师协会的定义,嵌入式系统(Embedded System)是用来控制或者监视机器、装置、工厂等大规模系统的设备。一般认为嵌入式系统是以应用为中心,以计算机技术为基础,其软/硬件可裁减,可满足应用系统对功能、可靠性、成本、体积、功耗的严格要求的专用计算机系统。
    (1)嵌入式系统功耗低、体积小、专用性强。嵌入式系统与PC系统的最大不同就是嵌入式CPU大多工作在为特定用户群设计的系统中,能够把PC系统中许多由板卡完成的任务集成在芯片内部,从而使系统设计超于小型化。
    (2)嵌入式系统中的软件一般都固化在存储器芯片或单片机芯片中,以提高执行速度和系统可靠性
    (3)嵌入式系统的硬件和软件都经过精心设计,系统精简,其操作系统一般和应用软件集成在一起。
    (4)软件代码质量要求高。
    (5)嵌入式系统开发需要专门的开发工具和开发环境。

  3. BoottLoader在嵌入式系统中主要起什么作用?完成哪些主要的工作?
    答 : BootLoader是在操作系统运行之前执行的一段程序,通过这段程序,初始化硬件设备,建立内存空间的映射表,从而建立适当的系统软硬件环境,为最终调用操作系统内核做好准备。

    BootLoader的stage1(第一阶段)通常包括以下工作:
    (1)硬件设备初始化
    (2)加载Bootloader的stage2准备ARM空间
    (3)接贝Bootloader的stage2到RAM空间中
    (4)设置堆栈
    (5)跳转到stage2的C入口点

    BootLoader的stage2通常包括以下工作
    (1)初始化本阶段要使用到的硬件设备
    (2)检测系统内存映射
    (3)将内核映像和根文件系统映像从fash设备上复制到RAM空间中
    (4)设置内核启动参数
    (5)调用启动内核


参考链接

Linux文本三剑客超详细教程—grep、sed、awk
linux内核模块加载命令
Linux内存管理
Linux内核vmalloc原理与实现
Linux下的调试工具strace与ltrace

标签:题目,笔试,嵌入式,awk,内核,Linux,断点,调试
From: https://blog.csdn.net/weixin_61101052/article/details/143431186

相关文章