【应用】02.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系统编程
结合操作系统学习
1、Linux相关编程工具
shell与基本命令
14.什么是Shell?
Shell是一个计算机程序,它是在操作系统上运行的命令行解释器。它是用户和操作系统之间的接口,允许用户与操作系统交互。用户可以使用Shell来输入命令,然后Shell将这些命令解释并传递给操作系统执行。Shell还可以读取环境变量和配置文件,并在用户输入命令后提供命令历史记录和自动补全功能。
在Unix/Linux操作系统中,常用的Shell包括Bash(Bourne-Again SHell)、Korn Shell(ksh)、C Shell(csh)、T Shell(tcsh)等。每个Shell都有自己的特性和语法,但它们都提供了基本的命令行接口,以便用户可以与操作系统交互。Shell还可以用来编写脚本,以便执行自动化任务和批处理操作。
15.什么是BASH
BASH(Bourne-Again SHell)是一种 Unix shell,是 Bourne shell 的增强版本,也是 Linux 和 macOS 等操作系统默认的 shell。它是一个命令解释器,它提供了一个命令行界面来与操作系统进行交互。BASH支持用户在命令行中输入命令、执行程序、管理文件和目录,以及进行脚本编程等。BASH还支持变量、环境变量、别名、函数、管道、重定向和控制结构等功能,可以让用户更加方便和高效地使用命令行进行操作。
16.Shell编程
17.常考的 21 条Linux 命令
Linux管理文件和目录的命令
pwd | 显示当前目录 | ls | 查看目录下的内容 |
cd | 改变所在目录 | cat | 显示文件的内容 |
grep | 在文件中查找某字符 | cp | 复制文件 |
touch | 创建文件 | mv | 移动文件 |
rm | 删除文件 | rmdir | 删除目录 |
vi | 编辑文件 | mkdir | |
find | 文件搜索 |
有关磁盘空间的命令
mount | 挂载文件系统 |
umount | 卸载已挂载上的文件系统 |
df | 检查各个硬盘分区和已挂上来的文件系统的磁盘空间 |
du | 显示文件目录和大小 |
fsck | 主要是检查和修复Linux文件系统 |
文件备份和压缩命令
在Linux中,常用的文件压缩工具有gzip、bzip2、zip。bzip2是最理想的压缩工具,它提供了最大限度的压缩。zip兼容性好,Windows也支持。
bzip2/bunzip2 | 扩展名为bz2的压缩/解压缩工具 |
gzip/gunzip | 扩展名为gz的压缩/解压缩工具 |
zip/unzip | 扩展名为zip的压缩/解压缩工具 |
tar | 创建备份和归档 |
有关关机和查看系统信息的命令
shutdown | 正常关机 |
reboot | 重启计算机 |
ps | 查看目前程序执行的情况 |
top | 查看目前程序执行的情景和内存使用的情况 |
kill | 终止一个进程 |
date | 更改或查看目前日期 |
cal | 显示月历及年历 |
管理使用者和设立权限的命令
chmod | 用来改变权限 | useradd | 用来增加用户 |
su | 用来修改用户 | chown | 改变文件的所有者 |
chgrp | 改变文件所属用户组 |
线上查询的命令
man | 查询和解释一个命令的使用方法,以及这个命令的说明事项 |
locate | 定位文件和目录 |
whatis | 寻找某个命令的含义 |
文件阅读的命令
head | 查看文件的开头部分 |
tail | 查看文件结尾的10行 |
less | less是一个分页工具,它允许一页一页地(或一个屏幕一个屏幕地)查看信息 |
more | more是一个分页工具,它允许一页一页地(或一个屏幕一个屏幕地)查看信息 |
网络操作命令
ftp | 传送文件 | telnet | 远端登陆 |
bye | 结束连线并结束程序 | rlogin | 远端登入 |
ping | 检测主机 | netstat | 显示网络状态 |
其他命令
echo | 显示一字串 | passwd | 修改密码 |
clear | 清除显示器 | lpr | 打印 |
lpq | 查看在打印队列中等待的作业 | lprm | 取消打印队列中的作业 |
18.Linux下查看内存使用情况的命令?
在 Linux 下查看内存使用情况的命令主要有以下几个:
- ps:可以查看进程的内存使用情况和其他信息。常用的命令选项有 -o(自定义输出格式)、-e(显示所有进程信息)等。ps -aux
- top:可以动态地查看系统资源使用情况,包括内存、CPU、进程等。在 top 命令中,按下“Shift + M”可以按内存使用量排序。
- free:可以查看系统内存使用情况,包括内存总量、空闲内存、已使用内存、缓存区内存、交换分区等。常用的命令选项有 -m(以 MB 为单位显示)、-g(以 GB 为单位显示)等。
- htop:是 top 命令的升级版,可以更直观地查看系统资源使用情况。在 htop 中,按下“F6”可以按内存使用量排序。
- vmstat:可以实时地查看系统内存使用情况和进程活动情况。常用的命令选项有 -s(以人类可读的格式显示内存使用情况)、-a(显示所有活动的进程信息)等。
- cat /proc/meminfo 显示一些关于系统内存使用情况的详细信息。
19.ps跟top有什么区别?
- ps只是查看的是命令执行瞬间的进程信息;
- 而top可以实时地持续监视,如CPU负载、内存消耗,不断更新进程状态。top还可以操作进程,如改变优先级(命令r)和关闭进程(命令k)。
20.Linux下查看磁盘的命令?
- df -hl:查看磁盘剩余空间
- df -h:查看每个根路径的分区大小
- du -sh [目录名]:返回该目录的大小
- du -sm [文件夹]:返回该文件夹总M数
- du -h [目录名]:查看指定文件夹下的所有文件大小(包含子文件夹)
21.Linux系统中,从后台启动进程,应在命令的结尾加上&。:orange:
如何让进程后台运行
是的,这是在默认的Linux系统中启动后台进程的方法之一。在Linux系统中,当我们执行一个命令时,它会占用当前的终端并且直到该命令执行完毕后才会返回控制权。如果需要在后台运行该命令,可以在命令的末尾加上一个“&”符号。这样就可以让命令在后台运行,并立即返回控制权。
例如,如果我们要在后台运行一个脚本文件my_script.sh
,则可以使用以下命令:
$ ./my_script.sh &
这将使my_script.sh
在后台运行,并立即返回终端的控制权。如果我们希望查看该进程的输出信息,则可以使用ps
命令查看进程ID,然后使用tail
命令查看输出信息,例如:
$ ps aux | grep my_script.sh
$ tail -f my_script.log
请注意,在后台运行进程时,我们需要注意进程是否产生了输出信息,以及如何监视该输出信息。如果我们不关心进程的输出信息,则可以将其输出重定向到一个文件中,例如:
$ ./my_script.sh > my_script.log &
这将把my_script.sh
的输出信息重定向到my_script.log
文件中,以便我们稍后查看。
22.Linux关机、重启的命令有哪些?
关机命令:halt、shutdown -h 时间、init0、poweroff。
重启命令:reboot、shutdown -r 时间、init6。
注意:shutdown可以安全地关闭或重启Linux系统,它在系统关闭之前给系统上所有登录用户提示一条警告信息,还允许用户设置一个缓冲时间。
23.请写出下列常用命令?
Linux设置文件目录权限 | chmod |
uboot查看环境变量 | printenv |
创建文件 | touch |
创建目录 | mkdir |
24.如何查看正在使用的有哪些中断号?
cat /proc/interrupt
25.如何用命令打开终端?
CTRL + ALT + T或在菜单搜索栏中提供终端来启动终端。
VIM
26.VIM安装与配置
安装
$ sudo apt-get install vim ctags cscope
$ cd ~/linux-4.9.140 //进入源码目录
$ ctags -R //生成符号关联
$ cscope -Rbkq //生成索引库
配置
vim ~/.vimrc 添加vim 的配置文件
27.VIM三大模式和最常用命令
- 命令模式
//切换到输入模式
i //进入插入状态(按下i ,并不会输入一个字符,而被当作一个命令insert)
//再输入字符,会插入在光标前
a //进入追加状态(再输入字符,会追加在光标后)
o //进入新一行输入状态(再输入字符,会在新一行输入)
//移动光标
k 上
h 前 l 后
j 下
r //取代光标处的字符
x //删除当前光标所在处的字符。
//打开默认的模式
ctrl + f //下翻页
ctrl + b //上翻页
gg //跳到第一行
shift + g //跳到最后一行
yy //复制一行
v + h/j/k/l //选取字符串
y //复制
p //粘贴
dd //删除一整行
ndd //3dd: 删除3行
u //撤销,复原前一个动作
Ctrl+r //反撤销,回退到修改前状态
i //命令模式切换到编辑模式,直接按键盘上的i,出现INSERT
: //命令模式切换到底行模式(即可在最底一行输入命令)
-
编辑模式
编辑模式我们可以在这个模式上输入一些文本。
Esc //切换到命令模式
- 底行模式
:w //写入
:q //退出
:wq //写入并退出
:q! //不保存退出
/word //搜索字符串 word
// n: 查找下一个 shift + n: 查找上一个
:set nu //显示行号
:set nu! //隐藏行号
:30 //光标跳到第30行
Backspace //取消底行字符后,自动切换到命令模式
28.VIM常用命令
移复删撤查,停替存比
vim 编辑器移动光标
命令模式下
K //向上移动
J //向下移动
H //向左移动
L //向右移动
Ctrl+F(PageDown)//下翻一屏
Ctrl+B(PageUp) //上翻一屏
gg //将光标定位到第一行
G //将光标定位到最后一行
ngg //将光标定位到第 n 行
vim 编辑器的文本的复制和粘贴
先将光标放在我们要复制内容的行首,使用上下左右按键来选择文字,选择好之后按键盘上的 Y,接 着按 esc 键回到一般模式,把光标移动到我们要粘贴的地方,然后按键盘上的 p
v + h/j/k/l //选取字符串
y //复制
p //粘贴
yy //复制一行
nyy //复制当前行下的 n 行
vim 编辑器的删除
方法一:直接进到编辑模式,使用 delete 来删除
方法二:使用 dd 命令
dd //删除光标所在行
ndd //删除 n 行
n1,n2d //删除指定范围的行。需要在命令行模式下操作。
vim 编辑器的撤销
撤销是在一般模式下,而且我们关闭过的文本文件就不能在这做撤销动作了
u //撤销
ctrl+r //反撤销
vim 编辑器的查找
在命令行模式下输入 “/” 或者 “?” 来查找的。
向下查找就是点击键盘上的“n”,他会向下查找了,按 ESC 回到一般模式,然后输入“?”,然后再 输入 da,敲下回车,然后按 n,他就会向上查找,所以说我们想要向上查找的话,我们使用“?”进到命 令行模式。
/xxx n //向下查找xxx,shift + n: 查找上一个
?xxx n //向上查找xxx
vim 编辑器的暂停和返回
Ctrl+Z //暂停当前Vim回到Linux页面
fg+enter //回到中断的程序页面
vim 编辑器的替换
命令行模式
%s /old/new/g
vim编辑器的保存
:q! //强行退出
:wq //保存退出
:q //退出没有编辑过的文本
vim 编辑器文件的对比
vimdiff file1 file2 file3
29.vim + cscope + ctags常用命令
Ctrl + ] //调到定义处
Ctrl + o //返回上一次位置
//Ctrl + i 再返回
g f //跳到光标停留的include的头文件里
d w //删除个字符串
u //可无限撤销
:cs f f driver.c //搜索 driver.c 文件
g d //选中当前光标处的字符串
//再 n 查找下一个
ctrl shift - s //查找光标处的字符串
// j:下一条 k:上一条 f:下一页 b:上一页 shift+g: 到末尾
:cs f s attach //全局 搜索字符串 attach【比Source Insight快】
Ctrl+w v // 垂直分割窗口
// Ctrl+w w 可在窗口间切换
// :q退出光标所在窗口
ctrl + //变大字体
:e . //编辑当前目录
GCC
30.gcc编译4步骤
-
预处理:在这一步,gcc会处理源代码文件中的宏定义、条件编译指令等预处理指令,并将它们替换成实际的代码。
gcc -E source_file.c -o preprocessed_file.i
这个命令会将source_file.c文件进行预处理,并将结果保存到preprocessed_file.i文件中。
-
编译:在这一步,gcc会将预处理后的源代码翻译成汇编语言。
gcc -S preprocessed_file.i -o assembly_file.s
这个命令会将preprocessed_file.i文件进行编译,并将结果保存到assembly_file.s文件中。
-
汇编:在这一步,gcc会将汇编代码翻译成机器码。
gcc -c assembly_file.s -o object_file.o
这个命令会将assembly_file.s文件进行汇编,并将结果保存到object_file.o文件中。
-
链接:在这一步,gcc会将目标文件(object_file.o)与必要的库文件链接在一起,生成最终的可执行文件。
gcc object_file.o -o executable_file
这个命令会将object_file.o文件进行链接,并将结果保存到executable_file文件中。
31.gcc编译常用参数
gcc -I ./hellodir hello.c -o hello
- 当头文件和源码不在一个目录下时,需要指定头文件
- 其中-I参数指定头文件所在位置,位置可以在编译文件前,
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
查阅整理上千份嵌入式面经,将相关资料汇集于此,主要包括: 0.简历面试 1.语言篇 2.计算机基础 3.硬件篇 4.嵌入式Linux【本专栏】 (建议PC端查看)