目录
[1.1 Shell的概念](#1.1 Shell的概念)
[1.2 命令的执行过程](#1.2 命令的执行过程)
[1.3 命令提示符的含义](#1.3 命令提示符的含义)
[3.1 什么是PATH?](#3.1 什么是PATH?)
[3.2 为什么有时会"command not found"?](#3.2 为什么有时会“command not found”?)
[4.1 临时设置(仅对当前终端有效)](#4.1 临时设置(仅对当前终端有效))
[4.2 永久设置(只对当前用户有效)](#4.2 永久设置(只对当前用户有效))
[4.3 永久设置(对所有用户有效)](#4.3 永久设置(对所有用户有效))
[4.4 小测试:为什么修改.bashrc后还是找不到?](#4.4 小测试:为什么修改.bashrc后还是找不到?)
[5.1 编写C程序](#5.1 编写C程序)
[5.2 编译程序](#5.2 编译程序)
[5.3 运行程序](#5.3 运行程序)
[5.4 通过添加PATH直接运行](#5.4 通过添加PATH直接运行)
在嵌入式Linux开发中,绝大多数操作都是通过命令行完成的。掌握命令行的使用,是通往嵌入式Linux世界的第一步。本节课我们将深入理解Shell 是什么,学会查看和设置PATH环境变量 ,并通过一个简单的Hello程序演示如何让自己的程序像系统命令一样在任意位置运行。
一、Shell是什么?
1.1 Shell的概念
Shell 中文意为"外壳",它是Linux系统中一个特殊的应用程序,负责接收用户输入的命令,然后找到对应的程序并执行。常见的Shell实现有/bin/sh、/bin/bash等,我们使用的Ubuntu默认Shell是bash。
你可以把Shell想象成一个"翻译官":
-
你通过键盘输入命令(比如
ls -l) -
Shell解析这些字符串
-
找到对应的程序(比如
/bin/ls)并运行它 -
把结果返回给你
1.2 命令的执行过程
当我们输入ls -l并按下回车时,Shell做了以下几件事:
-
接收键盘输入并回显:每按一个字母,Shell就会在屏幕上显示出来。
-
解析字符串:按下回车后,Shell将输入的字符串按空格分割成若干部分:
-
第一部分是命令名 (程序名),例如
ls -
其余部分是参数 ,例如
-l
-
-
寻找程序 :Shell会去PATH环境变量 指定的目录中查找名为
ls的程序。如果找到了,就运行它并传入参数;如果找不到,会提示"command not found"。 -
执行程序:运行程序,并将结果显示在终端。
1.3 命令提示符的含义
打开终端后,你会看到类似这样的提示符:
提示符包含了重要信息:
-
用户名 :当前登录的用户(例如
book) -
主机名 :计算机的名称(例如
100ask) -
当前目录 :
~表示家目录(/home/book) -
权限标识 :
$表示普通用户,#表示root管理员
二、Linux命令的基本格式
在深入学习之前,我们先了解Linux命令的标准格式:
bash
command [options] [parameter]
-
command :命令名,例如
ls、cp、fdisk -
options :选项,通常以
-或--开头,用来修改命令的行为(可选) -
parameter:参数,命令操作的对象,如文件名、目录名等(可选)
各部分之间用空格 分隔,多个空格等同于一个空格。输入完成后,按回车执行。
三、PATH环境变量:Shell去哪儿找命令?
3.1 什么是PATH?
当你输入一个命令(比如hello)时,Shell怎么知道这个程序在哪?它并不是在全盘搜索,而是去一个预先定义好的目录列表中查找------这个列表就是PATH环境变量。
查看当前的PATH:
bash
book@100ask:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

查看PATH环境变量
输出结果是一串由冒号分隔的目录路径。Shell会从左到右依次在这些目录中寻找你输入的命令。
3.2 为什么有时会"command not found"?
假设你自己写了一个程序hello,放在/home/book目录下。如果你直接在终端输入hello,Shell会报错:
bash
book@100ask:~$ hello
Command 'hello' not found, but can be installed with:
apt install hello
apt install hello-traditional
Ask your administrator to install one of them.

命令未找到
这是因为/home/book不在PATH中,Shell找不到它。你有两种解决办法:
-
指定路径运行 :输入
./hello(当前目录)或/home/book/hello -
将程序所在目录添加到PATH中
四、如何设置PATH?
4.1 临时设置(仅对当前终端有效)
使用export命令可以直接修改当前Shell的PATH,但关闭终端后失效。
bash
book@100ask:~$ export PATH=$PATH:/home/book
book@100ask:~$ hello
Hello, world!

临时添加目录后成功运行
解释 :$PATH代表原来的值,后面加上:/home/book,意思是在原有PATH末尾追加新目录。
4.2 永久设置(只对当前用户有效)
如果想每次登录都自动生效,可以修改用户目录下的配置文件~/.bashrc。
-
用文本编辑器打开
~/.bashrc:bashbook@100ask:~$ gedit ~/.bashrc
-
在文件末尾添加一行:
bashexport PATH=$PATH:/home/book
在.bashrc中设置PATH -
保存文件并退出。然后重新登录或执行以下命令使修改立即生效:
bashbook@100ask:~$ source ~/.bashrc

之后即使打开新的终端,也可以直接运行hello命令。
4.3 永久设置(对所有用户有效)
如果需要让系统所有用户都能使用某个目录下的程序,可以修改系统配置文件/etc/environment。需要root权限:
bash
book@100ask:~$ sudo gedit /etc/environment
在文件中找到PATH="..."这一行,在末尾添加:/home/book,保存后重启系统。
4.4 小测试:为什么修改.bashrc后还是找不到?
有时候修改完.bashrc并保存,但新终端仍然找不到命令。这可能是因为:
-
没有执行
source ~/.bashrc或重新登录 -
新终端启动时加载的配置文件顺序问题
-
或者你修改的文件有语法错误
可以手动执行export PATH=$PATH:/home/book测试,如果生效说明配置没错,只是没重新加载。
五、动手实践:编写并运行第一个Hello程序
5.1 编写C程序
在桌面创建一个文件hello.c,输入以下代码:
cs
c
#include <stdio.h>
/* 执行命令:./hello weidongshan
* argc = 2
* argv[0] = ./hello
* argv[1] = weidongshan
*/
int main(int argc, char **argv)
{
if (argc >= 2)
printf("Hello, %s!\n", argv[1]);
else
printf("Hello, world!\n");
return 0;
}
hello.c源代码
5.2 编译程序
使用gcc编译:
bash
book@100ask:~/Desktop$ gcc hello.c -o hello
这会在当前目录生成一个可执行文件hello。
5.3 运行程序
直接输入hello会失败,因为当前目录不在PATH中。我们可以:
-
用相对路径运行:
./hello -
用绝对路径运行:
/home/book/Desktop/hello -
或者将
hello复制到PATH中的某个目录,例如/usr/local/bin(需要sudo:123456):
bash
book@100ask:~/Desktop$ sudo cp hello /usr/local/bin/hello2
[sudo] password for book:
book@100ask:~/Desktop$ hello2
Hello, world!
*将hello复制到/usr/local/bin并重命名为hello2*
5.4 通过添加PATH直接运行
如果你不想把程序复制到系统目录,可以临时添加/home/book/Desktop到PATH:
bash
book@100ask:~/Desktop$ export PATH=$PATH:/home/book/Desktop
book@100ask:~/Desktop$ hello
Hello, world!
或者更通用的做法是将程序移动到你的家目录(/home/book),然后添加该目录到PATH。
bash
book@100ask:~/Desktop$ cp hello /home/book/
book@100ask:~/Desktop$ export PATH=$PATH:/home/book
book@100ask:~/Desktop$ hello
Hello, world!
将hello复制到/home/book并设置PATH后运行
六、总结
通过本节课,我们掌握了:
-
Shell是用户与Linux内核之间的桥梁,它解析命令、查找程序并执行。
-
命令提示符包含了用户、主机、目录和权限信息。
-
PATH环境变量决定了Shell去哪里查找可执行程序。
-
设置PATH的方法:
-
临时设置:
export PATH=$PATH:/新目录 -
永久设置(当前用户):修改
~/.bashrc并source -
永久设置(所有用户):修改
/etc/environment
-
-
编写并运行自己的程序,体验了PATH的作用。
在后续的嵌入式开发中,你会频繁使用交叉编译工具链,这些工具通常安装在特定目录(如/usr/local/arm),你需要将它们添加到PATH中才能直接使用。理解PATH的机制,是迈向熟练使用Linux的第一步。