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的第一步。

相关推荐
尤老师FPGA8 小时前
petalinux修改设备树添加vdma生成linux系统
android·linux·运维
yxy___8 小时前
达梦分布式集群DPC_重做副本-操作指南(DEM)_yxy
运维·分布式
月山知了8 小时前
linux kernel component子系统:基于rk3588 Android 14 kernel-6.1 display-subsystem代码分析
android·linux·运维
_Emma_8 小时前
【QCOM】 Linux下qcom venus 编解码驱动框架分析
linux·驱动开发·视频编解码
星辰徐哥9 小时前
大模型工程化部署:Docker Compose批量部署
运维·docker·容器
SEO-狼术9 小时前
Support Network Diagnostics in .NET
运维·服务器·网络
AI周红伟9 小时前
AI自动盯盘与定时行情分析:OpenClaw股票辅助Agent集成完整使用指南-周红伟
运维·服务器·人工智能·音视频·火山引擎
不才小强9 小时前
Linux系统常用命令
linux·运维·网络
SPC的存折10 小时前
8、Ansible之Playbook---Roles
linux·服务器·ansible
Kira Skyler10 小时前
BPF KPROBE编程中的ctx是什么?
linux