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

相关推荐
猪猪侠|ZZXia2 小时前
# Openssl关键知识
linux·网络
徐子元竟然被占了!!2 小时前
docker-dockerfile练习
运维·docker·容器
机 _ 长2 小时前
NVIDIA 显卡驱动安装指南 (CentOS Stream 9 / RTX 5090)
linux·运维·centos
赛博云推-Twitter热门霸屏工具2 小时前
推特自动化营销软件推荐:赛博云推实现Twitter热门霸屏与精准获客
运维·自动化·媒体·twitter
网云工程师手记3 小时前
企业多出口负载与故障切换实战:4 种调度模式 + 主备线路高可用
运维·服务器·网络·安全·网络安全
深圳市恒讯科技3 小时前
大带宽服务器和CDN加速如何配合使用?
运维·服务器
济6173 小时前
ARM Linux 驱动开发篇--- Linux 并发与竞争实验(互斥体实现 LED 设备互斥访问)--- Ubuntu20.04互斥体实验
linux·stm32·嵌入式linux驱动开发
16Miku3 小时前
OpenClaw-Linux+飞书官方Plugin安装指南
linux·ai·飞书·agent·openclaw·feishu
the sun343 小时前
打通嵌入式与 Linux:USB 转串口通信实战
linux·运维·服务器