2.3.1 Linux 命令行介绍:Shell、PATH与第一个Hello程序

目录

一、Shell是什么?

[1.1 Shell的概念](#1.1 Shell的概念)

[1.2 命令的执行过程](#1.2 命令的执行过程)

[1.3 命令提示符的含义](#1.3 命令提示符的含义)

二、Linux命令的基本格式

三、PATH环境变量:Shell去哪儿找命令?

[3.1 什么是PATH?](#3.1 什么是PATH?)

[3.2 为什么有时会"command not found"?](#3.2 为什么有时会“command not found”?)

四、如何设置PATH?

[4.1 临时设置(仅对当前终端有效)](#4.1 临时设置(仅对当前终端有效))

[4.2 永久设置(只对当前用户有效)](#4.2 永久设置(只对当前用户有效))

[4.3 永久设置(对所有用户有效)](#4.3 永久设置(对所有用户有效))

[4.4 小测试:为什么修改.bashrc后还是找不到?](#4.4 小测试:为什么修改.bashrc后还是找不到?)

五、动手实践:编写并运行第一个Hello程序

[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做了以下几件事:

  1. 接收键盘输入并回显:每按一个字母,Shell就会在屏幕上显示出来。

  2. 解析字符串:按下回车后,Shell将输入的字符串按空格分割成若干部分:

    • 第一部分是命令名 (程序名),例如ls

    • 其余部分是参数 ,例如-l

  3. 寻找程序 :Shell会去PATH环境变量 指定的目录中查找名为ls的程序。如果找到了,就运行它并传入参数;如果找不到,会提示"command not found"。

  4. 执行程序:运行程序,并将结果显示在终端。

1.3 命令提示符的含义

打开终端后,你会看到类似这样的提示符:

提示符包含了重要信息:

  • 用户名 :当前登录的用户(例如book

  • 主机名 :计算机的名称(例如100ask

  • 当前目录~表示家目录(/home/book

  • 权限标识$表示普通用户,#表示root管理员


二、Linux命令的基本格式

在深入学习之前,我们先了解Linux命令的标准格式:

bash 复制代码
command [options] [parameter]
  • command :命令名,例如lscpfdisk

  • 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

  1. 用文本编辑器打开~/.bashrc

    bash 复制代码
    book@100ask:~$ gedit ~/.bashrc
  2. 在文件末尾添加一行:

    bash 复制代码
    export PATH=$PATH:/home/book


    在.bashrc中设置PATH

  3. 保存文件并退出。然后重新登录或执行以下命令使修改立即生效:

    bash 复制代码
    book@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后运行


六、总结

通过本节课,我们掌握了:

  1. Shell是用户与Linux内核之间的桥梁,它解析命令、查找程序并执行。

  2. 命令提示符包含了用户、主机、目录和权限信息。

  3. PATH环境变量决定了Shell去哪里查找可执行程序。

  4. 设置PATH的方法:

    • 临时设置:export PATH=$PATH:/新目录

    • 永久设置(当前用户):修改~/.bashrcsource

    • 永久设置(所有用户):修改/etc/environment

  5. 编写并运行自己的程序,体验了PATH的作用。

在后续的嵌入式开发中,你会频繁使用交叉编译工具链,这些工具通常安装在特定目录(如/usr/local/arm),你需要将它们添加到PATH中才能直接使用。理解PATH的机制,是迈向熟练使用Linux的第一步。

相关推荐
wanhengidc3 小时前
云手机 高振畅玩不踩坑
运维·服务器·安全·web安全·智能手机
有谁看见我的剑了?3 小时前
linux 添加硬盘后系统识别不到硬盘处理
linux·运维·服务器
JoyCong19984 小时前
ToDesk远程屏幕墙技术白皮书:如何重塑全局运维视界
运维·电脑·远程工作
偶尔上线经常挺尸4 小时前
《100个“反常识”经验15:Nginx 502排查:从应用到内核》
运维·nginx·性能调优·反向代理·502错误·http排错
yc_12245 小时前
用 Visual Studio 远程调试 Linux:从零到流畅的完整指南
linux·ide·visual studio
思茂信息5 小时前
CST软件如何进行参数化扫描?
运维·开发语言·javascript·windows·ecmascript·软件工程·软件需求
计算机安禾5 小时前
【Linux从入门到精通】第31篇:防火墙漫谈——iptables与firewalld防护指南
linux·运维·php
下一页盛夏花开5 小时前
ubuntu 20中安装QT以后出现红色空心断点
linux·运维·ubuntu
金色光环6 小时前
FreeModbus释放底层的 TCP 监听端口
服务器·网络·tcp/ip
sanshanjianke6 小时前
Thunderobot 911ME 笔记本 Linux 风扇控制研究
linux