(嵌入式八股)第5章 操作系统(二)

5.11 常用的 Linux 命令及其功能说明

1. man 命令

  • 功能:显示命令的手册页。它可以帮助用户了解如何使用特定的命令及其各种选项。

2. ls 命令

  • 功能:列出当前目录中的文件和子目录。

3. cd 命令

  • 功能:切换当前工作目录。

4. pwd 命令

  • 功能:显示当前工作目录的路径。

5. mkdir 命令

  • 功能:创建新的目录。

6. rm 命令

  • 功能:删除文件或目录。

7. rmdir 命令

  • 功能:删除空目录。

8. mv 命令

  • 功能:移动文件或目录,或重命名文件。

9. cp 命令

  • 功能:复制文件或目录。

10. cat 命令

  • 功能:查看文件内容,或将多个文件合并输出。

11. grep 命令

  • 功能:用于搜索文件中包含某个模式的行,通常与管道命令一起使用。

file.txt 文件中查找包含字符串 "hello" 的行。

12. kill 命令

  • 功能:向进程发送信号,通常用于终止进程。

向进程 ID 为 34842的进程发送信号,通常用于终止该进程。

总结

这些命令是 Linux 系统中最常用的命令之一,涵盖了文件管理、进程管理、系统资源查看等多个方面。掌握这些命令,可以帮助用户更高效地使用 Linux 系统进行文件操作、进程管理以及系统监控。

5.12 tar命令

tar 命令在 Linux 系统中用于归档和解压文件,它可以处理多种文件格式,如 .tar.tar.gz.tar.bz2 等。常用的 tar 解压参数组合如下:

常用参数说明

  1. x:表示解压文件。
  2. v:表示显示详细的解压过程,通常会列出解压过程中处理的文件。
  3. f:指定需要解压的文件名。必须紧跟文件名。
  4. z:用于解压 .tar.gz.tgz 格式的文件,它会通过 gzip 解压文件。
  5. j:用于解压 .tar.bz2 格式的文件,它会通过 bzip2 解压文件。
  6. C:指定解压的目标目录,后面需要跟目标目录的路径。
  • 使用 tar 解压文件时,根据文件的格式选择适当的解压参数(如 z 用于 .tar.gz 文件,j 用于 .tar.bz2 文件)。
  • v 参数帮助显示解压过程中的详细信息,而 C 参数让你指定目标解压目录。
  • 5.13 查看进程

    在 Linux 系统中,您可以使用多个命令来查看当前正在运行的进程以及相关的进程信息。最常用的命令是 ps,它用于显示进程快照。以下是几种常见的用法:

    1. 查看所有进程

    使用 ps aux 命令可以查看系统上所有正在运行的进程。该命令会列出进程的详细信息,包括进程 ID(PID)、父进程 ID(PPID)、CPU 使用率、内存使用率、命令等。

  • a:显示所有用户的进程。
  • u:以用户为中心显示进程信息(显示用户信息)。
  • x:包括没有控制终端的进程。
  • 2. 查看特定用户的进程

    如果您只关心某个特定用户的进程,可以使用以下命令:

    • -u:指定用户,列出该用户的所有进程。

    例如,要查看用户 xiaolinji 的所有进程:

    3. 查找特定进程

    如果您想查找特定的进程,可以使用 ps -ef | grep 进程名 命令。这样可以过滤出包含特定名称的进程。

    • -e-f:列出所有进程及其详细信息。
    • grep:过滤输出,查找包含进程名的行。

    例如,要查找名为 nginx 的进程:

    该命令将列出所有与 nginx 相关的进程信息。

    4. 查看进程树

    您还可以使用 ps 命令查看进程的层级关系,即进程树。使用以下命令:

    • -j:显示每个进程的 PID 和 PPID。
    • -H:以树形结构显示进程。

    5. 实时查看进程(使用 top 命令)

    如果您需要实时监视系统上的进程,可以使用 top 命令。它会动态显示正在运行的进程,并提供系统的实时性能数据。

    可以在 top 命令中按下不同的快捷键来排序或过滤进程。

    总结

    • 使用 ps aux 查看所有进程。
    • 使用 ps -u 用户名 查看特定用户的进程。
    • 使用 ps -ef | grep 进程名 查找特定进程。
    • 使用 top 命令实时监控进程和系统性能。

    5.14 Linux系统中调试崩溃问题的流程

    1. 收集崩溃信息:收集核心转储文件和系统日志。
    2. 分析核心转储文件:使用 GDB 分析核心转储文件,查看崩溃位置和堆栈回溯。
    3. 查看系统日志:检查日志文件,查找与崩溃相关的错误信息。
    4. 重现崩溃:如果可能,重现崩溃,以便进行更详细的调试。
    5. 使用调试器:使用 GDB 或其他调试工具附加到崩溃进程,或直接调试程序。
    6. 跟踪代码执行流:通过单步调试、查看变量值和堆栈跟踪,分析程序执行的细节,找出崩溃原因。

    5.15 Linux下的文件类型

    在 Linux 系统中,文件是非常重要的概念,不同类型的文件具有不同的功能。以下是 Linux 中的 7 种文件类型 的详细解释:

    1. 普通文件(Regular Files)

    • 定义:普通文件是最常见的文件类型,用来存储用户的数据、程序代码、配置文件等。
    • 特点:可以是文本文件、二进制文件、程序文件等,通常通过编辑器或程序进行读取和写入。
    • 常见示例/home/user/document.txt/etc/passwd

    2. 目录文件(Directory Files)

    • 定义:目录本身也是一种特殊的文件类型,用来存储文件和其他目录的名称(文件名与文件路径的映射关系)。
    • 特点:目录文件包含了对其他文件和子目录的引用。它并不直接存储文件数据,而是保存指向其他文件或目录的引用。
    • 常见示例/home/user/etc

    3. 字符设备文件(Character Device Files)

    • 定义:字符设备文件是表示字符设备的特殊文件,通常用来与硬件设备进行交互。字符设备按字符顺序处理数据。
    • 特点:例如,键盘、鼠标、串行端口等设备通常通过字符设备文件进行访问。它们是一次一个字符地进行数据传输的。
    • 常见示例/dev/ttyS0(串口设备),/dev/zero(提供零字节的虚拟设备)。

    4. 块设备文件(Block Device Files)

    • 定义:块设备文件代表硬件设备(如硬盘、SSD等),通过它们可以以块为单位进行数据读写。
    • 特点:块设备文件可以支持随机访问,因此它们通常用来访问磁盘设备、硬盘驱动器、USB 存储设备等。
    • 常见示例/dev/sda(硬盘),/dev/sdb(第二块硬盘)。

    5. 符号链接文件(Symbolic Links)

    • 定义:符号链接文件是指向其他文件或目录的引用文件,相当于 Windows 中的快捷方式。
    • 特点:符号链接文件本身不存储数据,而是存储目标文件的路径。使用符号链接可以方便地访问常用文件或目录,或者在不同位置访问同一个文件。
    • 常见示例/usr/bin/python -> /usr/local/bin/python3(指向 Python3 的符号链接)。

    6. 管道文件(FIFO or Pipe Files)

    • 定义:管道文件用于进程间的通信,它允许一个进程将输出数据传递给另一个进程。数据在管道中按顺序流动,常用于串联多个命令。
    • 特点:管道是一个内存缓冲区,用于将数据从一个进程传递给另一个进程,通常在进程之间进行通信,具有先进先出(FIFO)的特性。
    • 常见示例:通过 mkfifo 创建的管道文件,如 /tmp/myfifo

    7. 套接字文件(Socket Files)

    • 定义:套接字文件用于在不同计算机之间或同一计算机上不同进程之间进行网络通信。它允许进程之间通过网络进行数据交换。
    • 特点:套接字文件主要用于网络通信,可以进行双向数据传输,支持不同的通信协议(如 TCP/IP)。
    • 常见示例/var/run/docker.sock(Docker 套接字文件)。

    总结

    • 普通文件:常见的文件类型,存储数据和程序。
    • 目录文件:存储文件和子目录的引用。
    • 字符设备文件:与硬件设备进行字符级通信。
    • 块设备文件:与硬件设备进行块级通信,支持随机访问。
    • 符号链接文件:指向其他文件或目录的快捷方式。
    • 管道文件:用于进程间通信,支持 FIFO(先进先出)数据流。
    • 套接字文件:用于网络通信或进程间的网络数据传输。

    5.16 什么是文件系统

    文件系统(File System)是操作系统用来管理、存储和组织数据的一种机制和结构。它将物理存储设备(如硬盘、固态硬盘、USB 驱动器等)上的原始数据组织成文件和目录,并为用户和应用程序提供访问这些数据的接口。文件系统不仅仅是一个存储介质的抽象层,它也为数据提供了管理、检索、访问控制等功能。

    文件系统的作用

    文件系统在操作系统中的作用主要包括以下几个方面:

    1. 存储管理

    • 文件系统负责管理计算机的存储设备,将数据存储在这些设备上并有效地分配和回收存储空间。
    • 它使用数据块(block)作为基本的存储单位,并通过块分配索引机制来确保文件的存储和访问的高效性。文件系统保证数据能够被快速定位和访问。

    2. 文件组织

    • 文件系统定义了文件和目录的结构。它通过层次化的目录结构(类似树形结构)来组织文件,并提供便于用户和应用程序访问的接口。
    • 文件系统支持对文件和目录的创建、删除、重命名、移动等操作,帮助用户和程序有效地管理和组织文件。
    • 目录结构使得用户能够更方便地查找和分类文件,如将文件按项目、类型或日期等进行分组。

    3. 文件访问控制

    • 文件系统提供了访问控制机制,确保文件的安全性和机密性。通过权限管理,文件系统允许不同的用户或程序对文件进行不同类型的操作,例如读取写入执行
    • 文件的访问权限可以根据用户角色(如管理员、普通用户)进行设置,这样可以防止未经授权的访问和文件修改。
    • 典型的访问控制

    剩余60%内容,订阅专栏后可继续查看/也可单篇购买

    作者简介:仅用几个月时间0基础天坑急转嵌入式开发,逆袭成功拿下华为、vivo、小米等15个offer,面试经验100+,收藏20+面经,分享求职历程与学习心得。 专栏内容:这是一份覆盖嵌入式求职过程中99%问题指南,详细讲解了嵌入式开发的学习路径、项目经验分享、简历优化技巧、面试心得及实习经验,从技术面,HR面,AI面,主管面,谈薪一站式服务,助你突破技术瓶颈、打破信息差,争取更多大厂offer。

    全部评论
    顺序锁和Seq锁实际上是同一种锁,只是名称不同。它们都指的是Seqlock(Sequence Lock),是一种用于多线程编程的同步机制,特别适合读多写少的场景。顺序锁的核心思想是通过版本号来协调读写操作,允许读操作在写操作进行时并发执行,但可能需要重试。
    点赞 回复 分享
    发布于 03-20 19:18 四川

    相关推荐

    拿到了秋招第一个offer,简单记录一下,供牛友们参考bg:双c9,非科班,硕士研究方向为机器人控制相关,1篇EI,一篇SCI二作,一段小厂日常实习,机器人强化学习相关时间线:4月底投递,5月份陆续约了三面,面完6月初发了座谈会,到今天(6.10)收到offer一面拷打简历介绍实习工作内容,自己负责哪部分VMC原理?为什么要用VMC训练过程sim2real的gap怎么处理?ppo算法怎么改进的,效果如何?然后是学校项目课题,介绍项目背景,研究创新点,实现过程遥操作时延怎么优化?项目量化指标无八股无手撕二面二面面试官猜测是做嵌入式相关的,对简历上很多项目不太了解机器人部署过程通信实现,spi原理,sdk编写同样是介绍学校课题内容创新点这些,提了一些简单问题常用编程语言?(答:python)于是问会cpp吗(答:会一点,但不多,可以学)cpp和python的区别?反问环节(说实话二面体验相当不好了,有种双方都没get到对方意思的感觉,一些问题答的也不好,面完以为没后续了)三面三面给我的感觉是专业面+综合素质面,整体过程比较轻松愉快同样是介绍实习和课题内容,遇到的问题,怎么解决等等(专业问题和一面的时候大差不差)简单问了下爱好,运动习惯这些反问环节由于面试时间太久了很多细节记不太清了,想到哪里写到哪里了,希望可以给大家提供有用的信息整体tp面下来体验还算不错,可以说全程无八股和手撕,流程推进速度中规中矩,而且算是自己秋招拿到的第一个offer,还是挺满意的
    查看11道真题和解析
    点赞 评论 收藏
    分享
    6月下旬了,朋友圈都充斥着毕业的氛围,大家都在向着美好的未来进发,回望着自己过去的半年,感觉是如此的记忆深刻与魔幻。本人毕业于南方的一家中九,受着大一时转专业成功的激励(由海洋专业转到计科),想着只要自己全力以赴,就肯定可以完成目标,所以考研目标直接选了上海某华五。但结果却不尽人意,最后自己竟然连复试都没进。当考研结果已经板上钉钉后,我知道再伤心也不会有任何改变的可能,因此只能马不停蹄的准备春招。由于前期all in考研,自己无实习无项目且只会c++这一门语言,而找工作时间只剩下三个月了,真是天崩开局,但是时间不容我自怨自艾。我先是找秋招的同学帮忙修改了一下简历,然后便开始了海投,每天早上一睁眼就去牛客看看有哪些岗位新开了,然后对合适的岗位投递简历,剩下的时间就去刷一刷力扣的hot100、准备一下自己的毕业论文(因为我把自己的毕业论文作为了自己简历上的第一个项目),以及看一看网上的八股。虽然春招岗位没秋招多,但是还是有不少笔面机会的。3月是我最忙碌的时候,几乎每天都有一到两场笔试或者面试,前期的面试都是积累经验用的,所以不用担心自己的表现不好,勇敢去面就好了(这是我认为找工作和考研最大的不同,考研就只能有那一次机会,找工作这一家不行就下一个家),而且你会发现随着面试的次数越来越多,有很多问题都是会重复问的,所以做好每次的面试复盘很重要,且因为自己有考研的底子,很多八股自己之前就已经看过了,也算是有了基础。三月底,我成功拿下了广州一家互联网公司的offer,虽然不是大厂,但薪资也让我十分满意了(25k*14~18,包吃,零食无限供应),且现在也已经进去实习了快2月了(实习400一天),后续虽然也陆陆续续有其他一些offer,但是都没有目前这个好,所以便一直还在实习。现在回想起来,我依然会说人生没有白吃的苦,虽然我拼尽全力考研最后失败了,但是我考研的付出其实也帮了我找工作很大的忙,我觉得大家不必太过焦虑,安心干好自己当下的事,人生的容错率远比你想的高很多!
    宵夜a:加油,虽然我现在还是个苦苦寻找暑期实习的大三牛犊,但是坚持总能有收获
    校招过来人的经验分享
    点赞 评论 收藏
    分享
    评论
    6
    8
    分享

    创作者周榜

    更多
    牛客网
    牛客网在线编程
    牛客网题解
    牛客企业服务