【应用】01.Linux操作系统简介

【嵌入式八股】一、语言篇https://www.nowcoder.com/creation/manager/columnDetail/mwQPeM

【嵌入式八股】二、计算机基础篇https://www.nowcoder.com/creation/manager/columnDetail/Mg5Lym

【嵌入式八股】三、硬件篇https://www.nowcoder.com/creation/manager/columnDetail/MRVDlM

【嵌入式八股】四、嵌入式Linux篇(本专栏)https://www.nowcoder.com/creation/manager/columnDetail/MQ2bb0

Linux应用编程

alt

一、Linux操作系统简介

01.GNU是什么?

GNU是一个自由、开放源代码的操作系统,其名称是“GNU's Not Unix”的缩写。GNU操作系统由自由软件基金会(FSF)发起和维护,旨在提供一个完全自由、兼容Unix的操作系统。

GNU项目的目标是创建一个类Unix操作系统,但完全由自由软件组成。自由软件是指使用者拥有复制、分发、研究和改进软件的自由。GNU项目开始于1983年,是由理查德·斯托曼发起的,他也是自由软件运动的创始人之一。

GNU操作系统包含了许多基础的操作系统工具和应用程序,例如shell、编辑器、编译器、调试器、文本处理器、图像处理器、网络工具等等。此外,GNU项目还开发了许多自由软件,例如GNU Emacs、GCC、GDB等,这些软件在软件开发中得到了广泛的应用。

02.什么是Linux

Linux是一个免费、开源的操作系统内核,最初由芬兰程序员Linus Torvalds于1991年发布。Linux内核是许多自由、开源操作系统的基础,例如Ubuntu、Debian、Fedora、Red Hat Enterprise Linux等。与GNU操作系统一样,Linux也是一个类Unix的操作系统,具有良好的稳定性、安全性和可靠性。

Linux内核和GNU用户空间工具一起被称为Linux发行版(Linux distribution),包括了操作系统内核、GNU工具、GUI界面、应用程序等。Linux发行版可以免费下载、安装和使用,并且可以在各种硬件平台上运行,如个人电脑、服务器、移动设备等。

Linux的开放源代码、高度灵活性、可定制性、安全性和稳定性,使得它在服务器领域和嵌入式设备领域得到了广泛的应用。同时,也为个人用户和开发人员提供了一个高度自由的操作系统环境,可以定制和控制其软件和系统的各个方面。

03.Unix和Linux有什么区别?

Unix和Linux都是类Unix操作系统,它们在设计和实现上有很多相似之处,但它们也有一些区别,如下:

  1. 历史背景:Unix最初由AT&T贝尔实验室开发,最早发布于1971年。Linux则是由芬兰程序员Linus Torvalds于1991年开始开发的。
  2. 开源性质:Unix是一种闭源的商业操作系统,需要付费使用或获得许可。Linux则是一个免费开源的操作系统,任何人都可以自由地使用、复制和修改。
  3. 操作系统内核:Unix有多个版本的内核,例如Solaris、HP-UX、AIX等。而Linux只有一个内核,由Linus Torvalds和全球开发者共同维护。
  4. 发行版本:Unix的各种版本之间不太兼容,因此软件和驱动程序需要为每个版本单独编写。而Linux的许多版本(也称为发行版)是基于相同的内核和工具集构建的,因此软件和驱动程序通常可以跨多个发行版运行。
  5. 用户界面:Unix通常使用CDE、GNOME或KDE等桌面环境。Linux则可以选择多种桌面环境,例如GNOME、KDE、Xfce、LXDE等。
04.Windows和Linux的区别

Windows和Linux是两种不同的操作系统,它们在设计和实现上有很多相似之处,但也有很多区别,如下:

  1. 开源性质:Windows是闭源的商业操作系统,需要购买许可才能使用。Linux则是免费开源的操作系统,任何人都可以自由地使用、复制和修改。
  2. 用户界面:Windows的用户界面通常是基于图形化的桌面环境,例如Windows 10中的Windows Shell。Linux的用户界面可以选择不同的桌面环境,例如GNOME、KDE、Xfce、LXDE等。
  3. 应用程序:Windows的应用程序通常使用Windows API进行开发,这些应用程序只能在Windows上运行。Linux的应用程序通常是用开源工具和库进行开发,可以跨多个操作系统平台运行。
  4. 软件安装:Windows用户可以通过安装程序(.exe或.msi文件)安装软件。Linux用户可以通过软件包管理器安装软件,或者从源代码编译安装软件。
  5. 安全性:由于Windows的市场份额较大,因此成为了攻击者的主要目标。相比之下,Linux的市场份额较小,因此受到的攻击较少。
  6. 性能:Linux操作系统通常被认为比Windows更稳定、更快。
05.bin和elf文件的区别:orange:

ELF 文件(可重定位文件)及文件格式 ELF 文件和 BIN 文件的区别 - 流水灯 - 博客园 (cnblogs.com)

Bin文件和ELF文件都是计算机程序的可执行文件格式。它们之间的主要区别在于它们的结构和用途。

Bin文件是一种简单的二进制文件格式,通常包含原始的机器指令代码,没有调试信息和符号表等元数据。这种文件格式常常用于ROM芯片和嵌入式系统等场景。.bin文件是由.elf文件为原材料生成,制作工具是交叉工具编译链里的arm-linux-objcopy。.bin文件在.elf的基础上,去掉了相关的符号信息,CPU读取到.bin文件里的内容就可以直接运行。

ELF文件(Executable and Linkable Format)是一种用于UNIX系统的可执行文件格式。它包含可执行代码、符号表、动态链接信息等元数据,可以通过链接器将多个目标文件组合成一个可执行文件。ELF文件可以动态链接,意味着程序可以在运行时加载和链接共享库,从而节省内存空间。

符号表机制(readelf -s XXX)

编译原理之符号表_编译符号表_Welkin_qing的博客-CSDN博客

符号表保存了程序实现或使用的所有全局变量和函数,作用如下:

收集符号属性

上下文语义的合法性检查的依据

作为目标代码生成阶段地址分配的依据

06.Linux下可执行程序的分段

Linux——size命令查看二进制文件各个数据段_text data bss dec hex_HungXum的博客-CSDN博客

1.text:存放了代码,常量,字符串常量等

2.data:存放了初始化的全局/静态变量

3.bss:存放了未初始化的全局/静态变量

以上都是编译过程中就已经确定了内存空间的,栈和堆的数据都是在运行时动态分配的,所以没办法在二进制文件中显式大小。

07.Linux的基本组件有哪些

Linux系统的组成部分?

Linux 的基本组件包括:

  1. 内核(Kernel):Linux 内核是 Linux 操作系统的核心组件,它是操作系统和硬件之间的接口,负责管理系统资源和提供各种服务。
  2. Shell:Shell 是 Linux 操作系统中用户和内核之间的交互界面。它是一个命令解释器,能够解释用户输入的命令并将其转换成内核能够理解的指令。
  3. 文件系统(File System):Linux 文件系统是 Linux 操作系统中存储数据的组织方式。Linux 支持多种文件系统,例如 ext4、btrfs 等。
  4. 应用程序:Linux 操作系统中有许多应用程序,例如文本编辑器、浏览器、终端模拟器等,这些应用程序能够帮助用户完成各种任务。
  5. 用户空间工具:用户空间工具是一组命令行工具和库,用于管理系统资源、执行系统任务和编写应用程序等。
  6. 设备驱动程序:设备驱动程序是 Linux 内核中的一部分,用于管理硬件设备和提供接口,让软件能够与硬件设备进行交互。
08.环境变量是什么?

环境变量是指在操作系统中设置的一些变量,用于控制应用程序的行为和操作系统的配置。环境变量通常由操作系统或者应用程序在运行时动态设置或读取

在 Linux 或者 Unix 系统中,环境变量通常使用以下格式表示:VARNAME=value。其中 VARNAME 是环境变量的名称,value 是环境变量的值。例如,PATH=/usr/bin:/usr/local/bin 表示设置了名为 PATH 的环境变量,其值为 /usr/bin:/usr/local/bin

常用的环境变量包括:

  1. PATH:指定了系统的可执行文件的搜索路径,当用户执行命令时,系统会按照 PATH 中指定的顺序在这些路径中查找可执行文件。
  2. HOME:指定了用户的主目录,当用户打开终端时,默认会进入这个目录。
  3. LANG:指定了系统的默认语言和字符集。
  4. SHELL:指定了用户使用的默认 shell。
  5. TERM:指定了终端的类型。
  6. PWD:当前工作目录。

通过设置环境变量,我们可以控制应用程序的行为,例如更改默认搜索路径、更改语言、更改终端类型等等。在 Linux 系统中,我们可以使用 export 命令来设置环境变量,例如:export VARNAME=value

09.什么是重定向?

重定向(Redirection)是指将命令的输出或输入从标准的输入、输出设备(通常是终端)转向到其他文件、设备或进程的过程。在 Linux 和其他类 Unix 操作系统中,重定向是一种非常有用的技术,可以方便地进行文件操作、输入输出处理和程序调试等操作。

在 Linux 中,可以使用以下几种重定向符号:

  1. >:将命令的输出重定向到一个文件中,例如:ls > file.txt,将 ls 命令的输出保存到 file.txt 文件中。
  2. >>:将命令的输出附加到一个文件的末尾,例如:echo "Hello" >> file.txt,将字符串 "Hello" 追加到 file.txt 文件的末尾。
  3. <:将文件内容作为命令的输入,例如:sort < file.txt,将 file.txt 文件的内容作为 sort 命令的输入。
  4. 2>:将命令的错误输出重定向到一个文件中,例如:ls no_such_file 2> error.txt,将 ls 命令产生的错误信息保存到 error.txt 文件中。
  5. &>:将命令的标准输出和错误输出都重定向到一个文件中,例如:ls no_such_file &> output.txt,将 ls 命令的输出和错误信息都保存到 output.txt 文件中。

重定向符号可以组合使用,例如:command1 | command2 > file.txt,表示将 command1 命令的输出作为 command2 命令的输入,并将 command2 命令的输出重定向到 file.txt 文件中。

重定向还可以用于管道、进程替换和文件描述符等高级用法,这些用法在 Linux 的 shell 脚本和命令行操作中都非常常见。

10.Linux系统的挂起、待机、休眠?

体眠是一种更加省电的模式,它将内存中的数据保存于硬盘中,所有设备都停止工作。当再次使用时需按开关机键,机器将会恢复到您的执行休眠时的状态,而不用再次执行启动操作系统复杂的过程。

待机(挂起)是将当前处于运行状态的数据保存在内存中,机器只对内存供电,而硬盘、屏幕和CPU等部件则停止供电。由于数据存储在速度快的内存中,因此进入等待状态和唤醒的速度比较快。不过这些数据是保存在内存中,如果断电则会使数据丢失。

11.在用户态开发中程序跑飞,出现段错误等情况,你通过什么方式去定位?

运行态的错误怎么调试?

段错误就是指访问的内存超出了系统所给这个程序的内存空间

在用户态开发中,程序跑飞和段错误可能是由于代码中存在错误或非法操作导致的,可以通过以下几种方式进行定位和调试:

  1. 代码审查:寻找代码中的潜在问题和错误。发现代码中的逻辑错误、死锁等问题,提高代码质量。
  2. 使用调试器:使用gdb等调试器可以对程序进行单步调试、打印变量值等操作,快速定位代码错误的位置。在程序运行时出现异常时,可以使用调试器的core dump功能生成core文件,通过core文件定位程序出现问题的原因。
  3. 日志输出:在程序中加入日志输出语句,将关键的信息记录下来,便于后续分析。可以使用printf、syslog等方式输出日志,也可以使用专业的日志框架,如log4j等。
  4. 硬件调试工具:如果程序涉及硬件调用,可以使用硬件调试工具,如逻辑分析仪、示波器等,对硬件进行调试。
  5. 静态分析工具:使用静态分析工具对代码进行扫描,查找代码中的潜在问题,如空指针、内存泄漏、未初始化变量等。常用的静态分析工具包括Coverity、PVS-Studio等。
  6. 动态分析工具:使用动态分析工具对程序进行运行时监控,如检测内存泄漏、检测代码覆盖率等。常用的动态分析工具包括Valgrind、strace等。
  7. core dump文件分析:在程序发生崩溃时,可以通过core dump文件进行分析,查找出现问题的原因。可以使用gdb等调试器对core dump文件进行分析,找出导致程序崩溃的代码位置。
12.Linux怎么拷贝远程服务器的文件

要从远程服务器拷贝文件到本地系统,通常可以使用以下方法:

  1. scp命令(Secure Copy):scp是一个安全的文件传输工具,可以使用SSH协议来拷贝文件。以下是scp的基本语法:

    bash复制代码scp [options] [source] [destination]
    
    • [options]:可以包括一些选项,例如 -r 用于递归拷贝目录。
    • [source]:远程服务器上的源文件或目录路径,可以使用用户名和主机名以及文件路径,例如 user@remote_server:/path/to/remote/file
    • [destination]:本地系统上的目标路径。

    例如,从远程服务器复制文件到本地:

    bash复制代码scp user@remote_server:/path/to/remote/file /path/to/local/destination/
    
  2. rsync命令:rsync是一个强大的文件同步工具,可以通过SSH协议进行远程拷贝。它的语法如下:

    bash复制代码rsync [options] [source] [destination]
    
    • [options]:可以包括一些选项,例如 -avz 用于以递归、压缩等方式同步文件。
    • [source]:远程服务器上的源文件或目录路径,可以使用用户名和主机名以及文件路径,例如 user@remote_server:/path/to/remote/file
    • [destination]:本地系统上的目标路径。

    例如,使用rsync从远程服务器同步文件到本地:

    bash复制代码rsync -avz user@remote_server:/path/to/remote/file /path/to/local/destination/
    
  3. FTP或SFTP客户端:您还可以使用FTP或SFTP客户端来与远程服务器交互,从而拷贝文件。这通常需要安装FTP或SFTP客户端并登录到远程服务器,然后使用get命令来下载文件。

这些方法中,scp和rsync通常是最常用的,特别是在需要安全传输文件时,因为它们使用SSH协议进行传输,可以确保数据的加密和安全性。

13.Linux设置开机自启的方法

linux设置开机自启动的三种方法

一、rc.local文件中添加自启动命令

1、执行命令: 编辑"/etc/rc.local"

vi /ect/rc.local

2、然后在文件最后一行添加要执行程序的全路径。 例如,每次开机时要执行一个hello.sh,这个脚本放在/usr下面,那就可以在"/etc/rc.local"中加一行"/usr/./hello.sh",或者" cd /usr/ && ./hello.sh "

注意,你的命令应该添加在:exit 0 之前

3、添加完保存后设置rc.local可执行权限

chmod +x /etc/rc.local

二、在/etc/init.d目录下添加自启动脚本

linux在“/etc/rc.d/init.d”下有很多的文件,每个文件都是可以看到内容的,其实都是一些shell脚本或者可执行二进制文件

Linux开机的时候,会加载运行/etc/init.d目录下的程序,因此我们可以把想要自动运行的脚本放到这个目录下即可。系统服务的启动就是通过这种方式实现的。

PS:添加完后务必设置文件的可执行权限 chmod +x filename

三、制作Linux服务并设置开机自启动

1、简介

本文以nginx为例,通过制作linux服务的方式启动,并设置开机启动

2、前提条件

nginx已安装,默认安装路径为:/usr/local/nginx

3、方法步骤

1)制作服务 在/etc/systemd/system/路径下创建nginx.service文件

cd /etc/systemd/system/
vi nginx.service

写入如下内容

[Unit]
Description=nginx - high performance web server
After=nginx.service
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
Execenable=/usr/local/nginx/sbin/nginx
[Install]
WantedBy=multi-user.target

保存并退出

2)设置开机自启动

# 设置开机启动

systemctl enable nginx

# 取消开机自启动

#systemctl disable nginx

# 查看服务当前状态

systemctl status nginx

# 启动nginx服务

systemctl start nginx

# 停止nginx服务

systemctl stop nginx

# 重启nginx服务

systemctl restart nginx

#C++##嵌入式##八股##面试##笔试#
【嵌入式八股】嵌入式Linux 文章被收录于专栏

查阅整理上千份嵌入式面经,将相关资料汇集于此,主要包括: 0.简历面试 1.语言篇 2.计算机基础 3.硬件篇 4.嵌入式Linux【本专栏】 (建议PC端查看)

全部评论
a
点赞 回复 分享
发布于 2023-03-28 10:56 辽宁
b
点赞 回复 分享
发布于 2023-03-28 10:56 辽宁
q
点赞 回复 分享
发布于 2023-03-28 10:59 辽宁
w
点赞 回复 分享
发布于 2023-03-28 10:59 辽宁
e
点赞 回复 分享
发布于 2023-03-28 10:59 辽宁
r
点赞 回复 分享
发布于 2023-03-28 10:59 辽宁
t
点赞 回复 分享
发布于 2023-03-28 10:59 辽宁
y
点赞 回复 分享
发布于 2023-03-28 10:59 辽宁
u
点赞 回复 分享
发布于 2023-03-28 10:59 辽宁
i
点赞 回复 分享
发布于 2023-03-28 10:59 辽宁
o
点赞 回复 分享
发布于 2023-03-28 10:59 辽宁
p
点赞 回复 分享
发布于 2023-03-28 11:00 辽宁
a
点赞 回复 分享
发布于 2023-03-28 11:03 辽宁
s
点赞 回复 分享
发布于 2023-03-28 11:03 辽宁
d
点赞 回复 分享
发布于 2023-03-28 11:03 辽宁
f
点赞 回复 分享
发布于 2023-03-28 11:03 辽宁
1
点赞 回复 分享
发布于 2023-04-02 09:40 辽宁
2
点赞 回复 分享
发布于 2023-04-02 09:40 辽宁
3
点赞 回复 分享
发布于 2023-04-02 09:40 辽宁
4
点赞 回复 分享
发布于 2023-04-02 09:40 辽宁

相关推荐

头像
11-26 15:46
已编辑
中南大学 后端
字节国际 电商后端 24k-35k
点赞 评论 收藏
分享
评论
5
9
分享
牛客网
牛客企业服务