1.Shell
Shell 是一种用于用户与操作系统交互的一种高级命令行环境。它允许用户通过输入命令来执行操作,如文件管理、目录遍历、文本处理、网络操作等。
Shell 的意思是“外壳”,在 Linux 中它是一个程序,它负责接收用户的输入,根据用户的输入找到其他程序并运行。一输入一个命令为例,shell负责接受字符并显示,执行后解析并寻找相应的程序(通过环境变量path),执行程序
在我们输入命令后,shell解析后会在环境变量path中寻找相关指令,若未找到一是无该指令,二是环境变量path没有配置,可以使用绝对路径来执行该指令。
Bash 是最常用的 Shell,支持脚本编写和高级功能,如管道、重定向、函数等。
2.配置环境变量
以在PATH中添加/home/book目录为例:
1.对所有用户有效
sudo gedit /stc/environment
2.只对当前用户有效
gedit ~/.bashrc
在尾行加入export PATH=$PATH:/home/book
3.对当前终端有效(关闭该终端再打开就无效了)
export PATH=$PATH:/home/book
3.Linux 命令的格式
Linux 命令一般由三部分组成:
① command 命令;② options 选项;③ parameter 参数;
[]为非必须参数;<>为必须参数 例如命令“ls -l”ls是命令,-l是选项
4.目录/文件操作命令
1.pwd(print working directory):作用为查看当前目录(“/$”代表根目录,“~$”=代表当前用户目录)
2.cd(change directory):改变路径,例:cd/home/book;上一级目录“cd ..”;
“cd ~”进入家目录;“cd /”进入根目录;“cd -”切换到上一个目录;“./”表示当前目录里的相对路径;“../”表示上级目录以及当前目录内的相对路径。
3.mkdir(make directory):创建目录
4.rmdir(remove directory):删除目录
5.rm(删除目录及文件):一般使用rm -rf <目标路径> 进行删除(递归强制删除)
6.ls(list):列举文件内容,一般使用ls -l查看详细内容,-a为隐藏内容
7.cp(copy):复制
8.cat:查看文件内容cat+文件名
9.touch:修改文件时间,touch+文件名
10.mv(move):移动文件或修改名称
5.权限与属性命令
使用ls -l指令,开头为“-”指的是一般文件,“d”开头为目录的意思
rwx的意思为可读可写可执行,第一个位置rwx代表当前用户(拥有者)可进行读写执行,第二个位置代表同组其他用户可进行的操作,第三个位置代表其他用户。
5.1 chmod命令
chmod命令用于改变文件的权限,例如rwx全有时为:111,即十进制的7;r-x为101,即5;rw-则为110,即的6,如第一个目录即为775。
chmod +x 文件名 可以让所用用户拥有执行权,-x则让所有用户不能执行
5.2chown命令
Chown命令用于改变文件的所有者,一般为root权限可以使用,常规使用时加上sudo即可。
使用方式:chown [-R] 账号名:组名 文件或目录
6.默认不能使用 root 用户登录
在开发过程中很少用 root 用户,要使用 root 权限时可以在命令前加上
“sudo”,比如“sudo ps -a”。相当于将用户权限临时提升为root,默认不使用root的原因为因为root权限过大,操作不慎容易破坏文件。
7.查找
7.1 find命令
find 命令格式为:find 目录名 选项 查找条件,例如:
$ find /home/book/dira/ -name " test1.txt "可以在查找文件名加入通配符*,例如
" *test1.txt* ",只有中间含有" test1.txt "都是被查找出来。
7.2 grep命令
grep 命令的作用是查找文件中符合条件的字符串,例如查找文件中含有“abc”的文件。格式如下:grep [选项] [查找模式] [文件名]。
选项:字符串,即“abc”
文件名:要查找的目标文件,如果是*则表示查找当前目录下的所有文件和目录。
查找模式:-r递归查找 -w整次查找,只查找选项内的内容 -n显示所在的行号
8.压缩/解压命令
tar 常用选项:
⚫ -c(create):表示创建用来生成文件包 。
⚫ -x:表示提取,从文件包中提取文件。
⚫ -z:使用 gzip 方式进行处理,它与”c“结合就表示压缩,与”x“结合就表示解压缩。
⚫ -j:使用 bzip2 方式进行处理,它与”c“结合就表示压缩,与”x“结合就表示解压缩。
⚫ -f(file):表示文件,后面接着一个文件名。 -C <指定目录> 解压到指定目录。
压缩:tar cjf abc.tar.bz2 abc(c代表压缩,j代表bz2格式)
解压:tar xjf abc.tar.bz2 -C ...(x代表解压,-c后跟解压的目录)
9.网络命令
查看当前网络状态:Ifconfig(Windows为itconfig)
10.常用命令
10.1Gedit
进行文本编辑是非常常用的操作,在 windows 系统为我们默认提供了记事本让我们可以进行文本编辑,Ubuntu 系统下也为我们提供一些文本编辑工具来让我们使用,如 gedit、vi/vim。
gedit 是一个窗口式的编辑器,只能在 Ubuntu 桌面环境下使用。
在终端里,可以直接运行 gedit 命令打开编辑器,也可以运行“gedit 文件名”打开指定文件。对于一些权限不够的文件,使用sudo gedit ..来打开。
10.2vi编译器
在 Linux 系统中对文件做些简单修改时,使用 vi 命令的效率非常高。并且在很多时候,比如现场调试时,并没有 GUI 形式的编辑工具,vi 是唯一选择。
vi 编辑器有三种模式,各个模式侧重点不一样:
a)一般模式(光标移动、复制、粘贴、删除)
b)编辑模式(编辑文本)
c)命令行模式(查找和替换)
vi 编辑器的三种模式间切换如下图所示:
1.打开文件、新建文件、保存文件
vi 文件名
如果文件存在,输入结束后,:wq保存并退出文件
如果文件不存在,输入结束后,:wq就可以新建并保存文件
在编辑完成时,返回一般模式,
1)输入:w则保存文件,如果已经保存文件,输入:q则退出文件
2)直接输入:wq保存并退出
3)如果不想保存被修改的内容,则:q!强制退出。
2.进入编辑模式
i(在光标前开始插入文本)
a在光标后开始插入文本
o(在当前行之下新开一行,并到行首)
3.光标移动
在一般模式下,hjkl这四个按键就可以移动光标
h(左)
j(下)
k(上)
l(右)
快速的定位到某一行:
文件头、文件尾、指定某一行
ngg光标移至第n行的行首(n为数字),
如1gg就跳到第一行的行首,就是文件头
如2gg就跳到第二行的行首
G转至文件结尾
注意:ngg和G是在一般模式
或者输入:+行号,例如:100。
内容 | 命令/作用 | ||||
打开文件 | vi文件名 | vi 文件名 +行号 | |||
退出/保存文件 | :w 保存文件 | :wq 保存文件并退出vi | |||
:q!强制退出vi,即使该文件被修改,也不保存该文件 | |||||
进入编辑模式 | i在光标前开始插入文本 | a在光标后开始插入文本 | |||
o在当前行之下新开一行,并到行首 | O在当前行之上新开一行 | ||||
光标移动 | 多 行 间 切 换 | Ctrl +f向后滚动一整屏 | Ctrl +b向前滚动一整屏 | ||
gg转至文件开头 | G转至文件结尾 | ||||
ngg/nG光标移至第n行的行首 (n为数字) | :n光标移至第n行的行首 (n为数字) | ||||
n+光标向下移动n行(n为数字) | n-光标向上移动n行(n为数字) | ||||
j/nj光标向下移动1行/n行(n为数字) | k/nk光标向上移动1行/n行(n为数字) | ||||
单 行 列 切 换 | 0(数字零)光标移至当前行行首 | $光标移至当前行行末 | |||
h/nh光标向左移动1列/n列 (n为数字) | k/nk光标向右移动1列/n列 (n为数字) | ||||
w光标移动到下一个字的开头 | b光标移动到上一个字的开头 | ||||
fx搜索当前行中下一个出现字母x的地方 | Fx搜索当前行中上一个出现字母x的地方 | ||||
文本复制命令 | yy复制当前行 | nyy复制当前行及其后的n-1行 | |||
文本删除命令 | x删除光标后的一个字符 | X删除光标前的一个字符 | |||
nx删除光标后的n个字符 | nX删除光标前的n个字符 | ||||
dw从光标处删至当前词尾 | db从光标处删至当前词首 | ||||
d0从光标处删至行首 | d$/D 从光标处删至行尾 | ||||
dd 删除光标所在行 | ndd 删除当前行及其后的n-1行 | ||||
文本粘贴命令 | 使用P键, 如复制当前行,先用yy复制当前行,切换到目的行的上一行后,用p来粘贴所复制的行。 如剪切当前行,先用dd复制当前行,切换到目的行的上一行后,用p来粘贴所剪切的行。 | ||||
撤销命令 | 按u键来撤销上一步操作 | ||||
查找及 替换命令 | /pattern 从光标开始处向 文件尾搜索pattern(在/pattern之前先跳到第一行则进行全文件搜索),后按下n或N | 注: n在同一个方向重复上一次搜索命令 N在反方向重复上一次搜索命令 | |||
?pattern 从光标开始处向文件首部搜索pattern ,后按下n或N | |||||
:s/p1/p2/g将当前行中所有的p1均用p2替换,:s/p1/p2/gc替换时需要确认 | |||||
:n1,n2s/p1/p2/g将n1至n2行中所有的p1均用p2替换,:n1,n2s/p1/p2/gc替换时需要确认 | |||||
:%s/p1/p2/g将文件中所有的p1均用p2替换,:%s/p1/p2/gc替换时需要确认 |
11.NFS(Network File System,网络文件系统)
NFS 是一种允许客户端从远程服务器访问和管理文件的一种协议。它通过网络提供文件共享功能,使得用户可以像在本地存储设备上一样方便地访问和处理位于其他设备上的文件。
在挂载网络共享文件时用到nfs
特点:
跨平台支持:NFS允许不同操作系统(如Windows、Linux、macOS等)之间共享文件,无需物理移动数据。
易用性:用户可以像访问本地存储一样,通过网络访问远程服务器上的文件,这大大提高了工作效率。
管理权限:NFS支持细粒度的权限管理,确保只有授权用户能够访问特定的文件或目录。
数据一致性:提供两种读写模式:异步和同步。
异步:客户端可以立即开始处理数据,不需要等待完整传输。
同步:确保数据在传输过程中保持完整性,适用于对数据一致性要求较高的场景。
可靠性:依赖于服务器的稳定性,一旦服务器出现故障,所有连接到该服务器的用户都会受到影响,因此需要额外措施确保系统的高可用性。
12.BSP
BSP是板级支持包,(board support package)是介于主板硬件和操作系统之间的一层,应该说是属于操作系统,它提供了硬件板级别上的支持功能,使得目标操作系统能够在特定硬件上正常运行。
嵌入式BSP的功能包括:
设备初始化和配置:BSP负责初始化硬件设备,并进行必要的配置,使操作系统能够正确地与硬件交互。
驱动程序支持:BSP提供与硬件设备交互的驱动程序,使操作系统能够访问和控制硬件功能。
硬件抽象层:BSP提供对硬件的抽象,隐藏了底层硬件细节,使开发人员可以使用统一的接口编写应用程序,而不需要了解底层硬件的具体实现。
系统配置:BSP提供系统级配置选项,如中断处理、内存管理和电源管理等。
调试支持:BSP包含调试工具和接口,用于开发人员进行调试和故障排除。
使用嵌入式BSP,开发人员可以更高效地进行嵌入式系统开发。它提供了一个统一的接口层,简化了硬件和软件之间的交互。此外,BSP还提供了预先编写的驱动程序和功能库,加速开发过程并提高系统的可靠性。
13.交叉编译
交叉编译是指在本地计算机上使用本地编译器,将源代码(通常是C语言、C++等)编译成目标平台所需的二进制格式。这种方法特别适用于需要在不同操作系统或处理器上的应用程序运行时,避免了为每个目标平台单独配置开发环境。
在Ubuntu所编译的c文件是具有x86的二进制文件,将其在开发板上是无法运行的,因为开发板是基于arm架构的,所以需要用到交叉编译,下载相应的交叉编译工具链,使其可以在Linux上编译开发板所对应的文件,让开发板可以正确运行。
14.为什么编译驱动程序之前要先编译内核?
1.驱动程序要用到内核文件:比如驱动程序中这样包含头文件:#include <asm/io.h>,其中的 asm 是一个链接文件,指向 asm-arm 或 asm-mips,这需要先配置、编译内核才会生成asm 这个链接文件。
2.编译驱动时用的内核、开发板上运行到内核,要一致:开发板上运行到内核是出厂时烧录的,你编译驱动时用的内核是你自己编译的,这两个内核不一致时会导致一些问题。所以我们编译驱动程序前,要把自己编译出来到内核放到板子上去,替代原来的内核。
3.更换板子上的内核后,板子上的其他驱动也要更换:板子使用新编译出来的内核时,板子上原来的其他驱动也要更换为新编译出来的。所以在编译我们自己的第 1 个驱动程序之前,要先编译内核、模块,并且放到板子上去。