![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
GNU/Linux
文章平均质量分 78
GNU和Linux相关内容
夜流冰
记录和分享可以记录和分享的一些东西
展开
-
GNU/Linux - 在U-Boot代码中调用命令
(bootd - boot default image, 就是boot命令,会从默认image启动,一般就是启动linux kernel image)3, 一个是直接运行command,一个是使用printf格式来构造一个command并运行,最后一个是多个command一起运行,通过分号分隔。大概意思,第一个是命令重复,第二个是和bootd命令相关,第三个和是environment相关的命令。2,使用run_command、run_commandf或run_command_list函数。原创 2024-07-24 09:51:10 · 151 阅读 · 0 评论 -
GNU/Linux - Bazaar版本管理工具
根据 Jelmer Vernooij 的说法,Canonical 的 Bazaar 团队的成员在 2012 年初被分配到不同的任务,他本人在7年来为该项目做出贡献后,于2012年底停止了对 Bazaar 的贡献。同样,Bugzilla项目在2014 3月从 Bazaar 改为使用 git,其中一个原因是 Bazaar 几乎已被放弃的印象:“每个月可能有 2-3 次向主干提交。并用来进行Ubuntu项目的版本控制。Bazaar 可以由一个开发本地内容的多个分支的开发人员使用,也可以由跨网络协作的团队使用。原创 2024-07-24 09:48:42 · 207 阅读 · 0 评论 -
GNU/Linux - 压缩解压文件
在 Linux 中,利用各种工具和实用程序压缩和解压文件夹或文件至少有 11 种不同的方法。每种方法都有其特定的使用情况、优点和缺点,通常基于所需的压缩率、速度和兼容性要求。在 Linux 中,压缩和解压缩文件夹或文件的方法有很多。原创 2024-07-16 08:09:10 · 345 阅读 · 0 评论 -
GNU/Linux - U-BOOT的GPIO command
gpio 读取命令只有在 CONFIG_CMD_GPIO_READ=y 时可用。Name of a single GPIO to be displayed or manipulated.要显示或操作的单个 GPIO 的名称。启动时如果设置了u-boot等待时间,在等待时间内,按任意键就会进入u-boot命令行环境。在u-boot命令行环境下,可以使用gpio命令来操作GPIO。将 GPIO 引脚切换至输出模式,并将信号设置为 1。将 GPIO 引脚切换至输出模式,并将信号设置为 0。原创 2024-07-16 08:08:13 · 569 阅读 · 0 评论 -
GNU/Linux - U-Boot中的i2c命令
I2C 地址通常为 7 位,第 8 位表示 I2C 操作是读取(0)还是写入(1)。U-Boot 希望地址只有 7 位,在一个字节内正确排列。不同的集成电路数据手册以不同的方式指定 I2C 地址。即 0bAAAAAAA0。在这种情况下,应将数据表地址右移一位,然后再将其用于 U-Boot I2C 命令。4,从I2C设备读取寄存器值 Reading from an I2C device。5,向I2C设备的寄存器写入数据 Writing to an I2C device。2,在当前的i2c bus上搜索设备。原创 2024-07-16 08:05:29 · 844 阅读 · 0 评论 -
Yocto - Bitbake Tasks - 1
某些复制文件的方法,特别是使用递归 cp 命令时,会保留原始文件的 UID 和/或 GID,这通常不是你想要的。do_image_complete 任务在 OpenEmbedded 构建系统运行 do_image这个镜像预处理任务后运行,并通过动态生成的 do_image_* 任务构建图像。do_image 任务在 OpenEmbedded 构建系统运行 do_rootfs 任务后运行,在此期间,将识别要安装到映像中的软件包,并创建根文件系统,完成后处理。任务运行时的当前工作目录设置为 ${B}。原创 2024-07-11 08:57:03 · 313 阅读 · 0 评论 -
GNU/Linux - Kconfig Language - 2
这对 Kconfig 文件编写者有一些影响。拥有定义明确的语义对于实际评估依赖关系的工具非常有用,例如,有一项工作就是用布尔抽象表达 Kconfig 的推断语义,将 Kconfig 逻辑转化为布尔公式,并在此基础上运行 SAT 求解器来查找死代码/死特征(始终处于非活动状态),使用这种方法在 Linux 中发现了 114 个死特征。为了避免向用户询问无法在用户编译内核的系统上使用的驱动程序,如果合理的话,控制驱动程序编译的配置符号应包含适当的依赖关系,将符号的可见性限制在驱动程序可使用的平台(超集)上。原创 2024-07-04 09:30:07 · 682 阅读 · 0 评论 -
GNU/Linux - Kconfig Language - 1
如果在 "select"后面加上 "if", 将根据当前菜单符号值和 的逻辑 AND 值进行选择。注意:如果 "imply" 后跟 "if", 的默认值将是当前菜单符号值和 的逻辑 AND 值。这与 "select" 类似,因为它对另一个符号强制执行下限,但 "implied"符号的值仍可通过直接依赖关系或可见提示设置为 n。当表达式的值为 "m "或 "y "时,菜单条目才会显示。原创 2024-07-04 09:26:55 · 350 阅读 · 0 评论 -
GNU/Linux - 如何编译kernel
自定义配置:make menuconfig(基于文本)、make xconfig(基于 Qt)或 make gconfig(基于 GTK)。* 运行 make 来构建内核。3,make时使用的就是.config配置文件,如果此文件发生变化,旧内容保存到.config.old,新内容保存到.config。2,make menuconfig,退出时提示是否保存,会保存到.config文件,如果没有就创建。1,执行make defconfig,会将当前默认的配置写入.config文件,如果没有就创建。原创 2024-07-04 09:24:49 · 944 阅读 · 0 评论 -
GNU/Linux - wic文件的使用
wic 文件显然只是一个带有分区表和分区的磁盘镜像,就像下载 Linux 发行版时获得的所有 .img 文件一样。这就是为什么你可以使用 dd 命令烧写 .wic 文件,就像使用 .img 文件一样。之所以使用 .wic 文件扩展名,是因为它是由 wic 工具创建的,该工具读取 .wks 文件中描述的分区布局,并生成带有相应分区的映像。Yocto/OpenEmbedded使用的磁盘镜像格式是 wic。上面结果显示加载为/dev/loop17设备。使用fdisk命令,查看加载设备的分区信息。原创 2024-07-04 09:22:38 · 326 阅读 · 0 评论 -
GNU/Linux - 什么是loopback设备
在计算机科学中,特别是在类Unix操作系统中,环回设备(loopback device)是一种虚拟设备,它将一个文件映射为块设备。这使得可以像访问物理磁盘或分区一样访问一个文件。环回设备通常用于挂载磁盘镜像、操作文件系统镜像以及执行各种类型的系统测试和开发。原创 2024-07-04 09:21:55 · 848 阅读 · 0 评论 -
GNU/Linux - 各种包管理器介绍
用于: Red Hat Enterprise Linux (RHEL), Fedora, CentOS, openSUSE。每种包管理器都与特定的包管理系统相关联,用于处理软件包的安装、更新和删除。* 用于: Debian, Ubuntu, Linux Mint。* 包管理器: emerge(Portage 系统的一部分)* 用于: 各种发行版,用于源代码包或软件分发。* 包管理器: rpm, yum, dnf。* 包管理器: dpkg, apt。* 包管理器: flatpak。原创 2024-07-04 09:18:48 · 408 阅读 · 0 评论 -
GNU/Linux - Linux Kernel Device model
Linux 设备模型是 Linux 内核中的一个框架,它提供了一种统一、一致的方式来管理和表示硬件设备。设备模型抽象了硬件的细节,使得开发和维护驱动程序和子系统变得更加容易。原创 2024-07-04 09:18:11 · 425 阅读 · 0 评论 -
Devicetree - 删除某个节点或属性
在设备树(devicetree)中,删除语法用于从现有设备树中删除属性或节点。这通常在设备树覆盖文件(DTS)或片段文件中完成。该语法使用 `/delete-property/` 和 `/delete-node/` 指令。所以,device tree文件既能方便修改覆盖节点的属性,还支持删除节点和属性,为其使用提供了极大的灵活性。要从节点中删除一个属性,需要使用 `/delete-property/` 指令,后面跟上属性名称。要删除整个节点,可使用 `/delete-node/`指令,后跟节点名称。原创 2024-06-23 17:45:11 · 368 阅读 · 0 评论 -
Shell学习 - 2.32 Shell [[]]详解:检测某个条件是否成立
test 能做到的,[[ ]] 也能做到,而且 [[ ]] 做的更好;我们的这个愿望在 [[ ]] 中实现了,[[ ]] 支持 &&、|| 和!但是 [[ ]] 对数字的比较仍然不友好,所以我建议,以后大家使用 if 判断条件时,用 (()) 来处理整型数字,用 [[ ]] 来处理字符串或者文件。注意,[[ ]] 剔除了 test 命令的-o和-a选项,你只能使用 || 和 &&。有了 [[ ]],你还有什么理由使用 test 或者 [ ],[[ ]] 完全可以替代之,而且更加方便,更加强大。原创 2024-06-13 09:17:17 · 552 阅读 · 0 评论 -
Shell学习 - 2.34 Shell while循环详解
在 while 循环中,只要判断条件成立,循环就会执行。每一次执行到 done 的时候都会重新判断 condition 是否成立,如果成立,就进入下一次循环,继续执行 do 和 done 之间的语句,如果不成立,就结束整个 while 循环,执行 done 后面的其它 Shell 代码。在终端中读取数据,可以等价为在文件中读取数据,按下 Ctrl+D 组合键表示读取到文件流的末尾,此时 read 就会读取失败,得到一个非 0 值的退出状态,从而导致判断条件不成立,结束循环。这样就完成了一次循环。原创 2024-06-12 22:03:31 · 691 阅读 · 0 评论 -
Shell学习 - 2.33 Shell case in语句详解
代表一个分支的结束,不写的话会有语法错误。《Shell if else》一节的最后给出了一个例子,就是输入一个整数,输出该整数对应的星期几的英文表示,这节我们就用 case in 语句来重写代码,如下所示。expression 既可以是一个变量、一个数字、一个字符串,还可以是一个数学计算表达式,或者是命令的执行结果,只要能够得到 expression 的值就可以。最后一个分支*)并不是什么语法规定,它只是一个正则表达式,*表示任意字符串,所以不管 expression 的值是什么,*)总能匹配成功。原创 2024-06-12 22:02:59 · 485 阅读 · 0 评论 -
Shell学习 - 2.31 Shell test命令
如果我们给 $str1 变量加上双引号,当 $str1 是空字符串时,test -z "$str1"就会被替换为test -z "",调用 func() 函数的形式就是func("-z \"\""),很显然,-z选项后面跟的是一个空字符串(\"表示转义字符),这样 func() 在分析时就不会出错了。如果 $str1 是一个空字符串,那么替换后的效果就是test -z,调用 func() 函数的形式就是func("-z "),这就比较奇怪了,因为-z选项没有和参数成对出现,func() 在分析时就会出错。原创 2024-06-12 22:02:26 · 460 阅读 · 0 评论 -
GNU/Linux - 使用字符设备来操作GPIO
GPIO 通过 /sys/class/gpio 中的导出文件进行配置和控制。在第 4 行,我们将 line_info 结构的 line_offset 属性设置为要查询的 GPIO 线路/偏移量,然后通过 GPIO_GET_LINEINFO_IOCTL 请求调用 ioctl 函数。通过 /sys/class/gpio/export 配置 GPIO 方向(输入/输出): 通过: /sys/class/gpio/gpioX/direction 配置 GPIO 方向(输入/输出。原创 2024-06-09 16:06:39 · 790 阅读 · 0 评论 -
Yocto - 变量介绍:BASE_WORKDIR、WORKDIR和D
例如,假设源代码目录的顶级文件夹名为 poky,默认编译目录为 poky/build,目标系统为 qemux86-poky-linux。在 Yocto 中,${WORKDIR} 是一个环境变量,表示特定配方在联编过程中的工作目录。默认情况下,TMPDIR 变量指向构建目录中的 tmp。该目录位于 TMPDIR 目录结构中,与正在构建的配方和构建配方的系统相关。这种情况下的一个使用示例是将 TMPDIR 设置为不使用 NFS 的本地磁盘,同时让构建目录使用 NFS。指向所有配方的工作目录根目录。原创 2024-06-09 16:02:14 · 895 阅读 · 0 评论 -
Yocto - bitbake任务中clean和cleanall的区别
clean删除指定配方或任务的临时构建文件和工件。留下可在后续构建中重复使用的共享或缓存文件。用于在不影响共享资源的情况下快速清理特定任务或配方。cleanall删除与指定配方相关的所有临时构建文件和工件。清理共享或缓存文件以及特定配方文件,确保重建环境完全干净。这对于强制从头开始全面重建非常有用,尤其是当缓存或共享资源出现问题时。原创 2024-06-01 11:24:40 · 851 阅读 · 0 评论 -
Yocto - virtual/kernel介绍
在 Yocto 项目中,"virtual/kernel "是一个虚拟目标,作为 Linux 内核的抽象层。它是一种以灵活方式指定内核依赖关系的方法,允许实际的内核配方由特定构建中使用的机器配置和层决定。,Yocto 项目提供了一种以模块化和可配置的方式处理内核依赖关系的机制,使得在不同内核版本或变种之间切换变得更加容易,而无需修改依赖配方。这样就能确保在编译配方时,相应的内核也已编译完成并可用。这一行将告诉构建系统使用。原创 2024-06-01 11:23:49 · 966 阅读 · 0 评论 -
GNU/Linux - 时区设置
DST = Daylight Saving Time = 夏令时 = 一个地区的标准时间,即在夏令时 (DST, Daylight Saving Time) 时期以外使用的当地时间。CST = China Standard Time = 北京时间/中国标准时间 = 在时区划分上,属东八区,比协调世界时早 8 小时,记为 UTC+8。使用date命令显示当前日期和时间时,将显示为系统配置的时区的时间,包括处理 DST(如果该时区适用)。输入的时间应为当地时区的时间,包括 DST(如果适用)。原创 2024-05-26 20:31:47 · 405 阅读 · 0 评论 -
GNU/Linux - date命令
Linux 中的日期命令是一个多功能的强大工具,用于显示和设置系统的日期和时间。它允许用户以各种格式检索当前日期和时间,自定义输出,甚至出于脚本、日志和系统维护等不同目的操作日期和时间值。使用 date 命令的 -u 选项,可以用格林威治标准时间(GMT)或协调世界时(UTC)显示当前时间。3、同时修改日期和时间 date -s "2012-05-18 04:53:00"1、只改系统的日期,不改时间 date -s 2012-08-02。#以系统当前的日期格式显示给定的日期和时间。原创 2024-05-26 20:30:00 · 570 阅读 · 0 评论 -
Linux编程使用的C语言标准库和system call
系统调用的例子包括打开文件的 open()、从文件读取数据的 read()、向文件写入数据的 write()、创建新进程的 fork()、执行新程序的 exec()等。5. 其他相关头文件: 除此以外,/usr/include/linux 和 /usr/include/sys 中还有许多其他头文件,它们提供了特定系统调用和相关数据结构的定义。Glibc 还包括一些配置文件和目录,如 /etc/ld.so.conf 和 /etc/ld.so.conf.d/,它们指定了运行时搜索共享库的目录。原创 2024-05-11 16:39:23 · 419 阅读 · 0 评论 -
GNU/Linux - 系统启动流程及rcS脚本介绍
2. 引导加载程序: 引导加载器,如 GRUB(Grand Unified Bootloader,统一引导加载器)或 LILO(Linux Loader,Linux 加载器),将 Linux 内核加载到内存中并开始执行,同时按需要初始化重要的硬件组件。* 通常,init 进程会生成配置文件中指定的多个脚本,这些脚本通常位于 /etc/init.d/ 或 /etc/rc.d/ 等目录中。* 初始进程会读取配置文件(如 /etc/inittab 或 /etc/init/rcS.conf),以确定要执行的脚本。原创 2024-05-10 08:54:09 · 1160 阅读 · 0 评论 -
GNU/Linux - 是否可以多次打开同一个设备文件
每个打开的文件描述符都代表与串行端口的独立连接,发送到 /dev/ttyS1 的数据将被所有打开的文件描述符接收。4. 顺序传输: 发送到 /dev/ttyS1 的数据是按顺序传输的,这意味着如果多个进程或线程同时向 /dev/ttyS1 写入数据,数据将按照驱动程序接收到的顺序发送出去。每个打开的文件描述符都代表与串行端口的独立连接,内核会确保写入 /dev/ttyS1 的数据被所有打开的文件描述符接收。2. 缓冲: 内核会为与 /dev/ttyS1 相关联的每个打开的文件描述符维护一个缓冲区。原创 2024-05-10 08:51:32 · 942 阅读 · 0 评论 -
Makefile - 常用标准变量
所有进行 C 语言编译的隐式规则都使用"$(CC) "来获取编译器的程序名,并在给编译器的参数中包含"$(CFLAGS)"。虽然 EXTRA_CXXFLAGS 并不像 CFLAGS 或 CXXFLAGS 那样是一个标准变量, 但您可以在 Makefile 中定义并使用它, 以专门为 C++ 程序提供额外的编译器标志, 就像为 C 程序提供 EXTRA_CFLAGS 一样。在用于编译软件的 Makefile 中, EXTRA_CFLAGS 通常是一个变量, 用于指定在编译过程中应包含的附加编译器标志。原创 2024-05-08 09:26:52 · 935 阅读 · 0 评论 -
GNU/Linux - 如何使用lsmod和modinfo命令
如果检查/lib/modules目录,你可以找到系统上安装的每个内核的子目录。每当你需要特定 Linux 内核模块的信息时,lsmod 和 modinfo 都是你可以依赖的命令。它的灵活性让你可以添加和删除你需要的功能,使操作系统符合你的使用情况和偏好。如果 modinfo nfnetlink 命令显示的信息过多,无法满足您的需要,您可以使用 --field 选项指定希望显示的字段。上述命令的输出只列出 6.5.0-26-generic 内核模块的信息,而不是当前运行内核的信息。原创 2024-05-06 08:38:36 · 953 阅读 · 0 评论 -
GNU/Linux - 如何确定当前安装的Linux内核版本
内核版本应该是一个类似于 5.4.0-80-generic 的字符串。在本例中,内核以 generic 结尾,这在 Ubuntu 系统中很常见,表示这是一个上游内核。如果内核以类似于 linode123 结尾,则表示使用的是 Linode 内核,且字符串与精确的 Linode 内核版本一致。hostnamectl: 输出系统详细信息的有序列表,包括内核版本。有多种方法可以确定 Linux 系统上安装的内核版本。cat /proc/version: 输出包含内核版本和发行版详细信息的字符串。原创 2024-05-06 08:37:21 · 977 阅读 · 1 评论 -
DeviceTree - Freescale的i.MX芯片的pinctrl设置
是否这样做,在某种程度上取决于单个电路板设备树文件的作者,以及该电路板使用的单个客户端设备绑定所提出的任何要求,即它们是否要求为动态引脚提供某些特定的命名状态。该列表中可存在多个条目,以便配置多个引脚控制器,或由单个引脚控制器的多个节点构建状态,每个节点都是整体配置的一部分。每个客户端设备自己的绑定决定了必须在其设备树节点中定义的状态集,以及是定义必须提供的状态 ID 集,还是定义必须提供的状态名称集。列表项 0 定义了整数状态 ID 0 的名称,列表项 1 定义了状态 ID 1 的名称,以此类推。原创 2024-05-03 09:16:23 · 922 阅读 · 0 评论 -
GNU/Linux - tty设备介绍
在 Linux 中,TTY 设备在 /dev 目录中表示为特殊文件,如 /dev/tty1, /dev/tty2 等表示虚拟终端,使用文本操作模式。"/dev/tty "及其变体("/dev/ttyS0"、"/dev/tty1 "等)代表不同类型的终端设备,每种设备都有特定的用途。在用户空间的程序,就可以通过/dev/ttyXX的设备文件,虚拟的或真实的,来进行串行通讯。这里/dev/ttyUSB0是接了一个设备,serial-to-usb的串口转USB线,这个是真实存在的一个物理串口设备。原创 2024-04-28 11:02:47 · 1203 阅读 · 0 评论 -
DeviceTree - schema介绍
在大多数情况下,DeviceTree 模式需要一个固定大小的数组,因此这些属性是根据 "items "列表的大小添加的。验证时,该工具将加载所有能找到的模式文件,然后遍历 Devicetree 的所有节点。该工具获取用户提供的模式文件和本软件仓库中的核心模式文件,删除验证中不需要的所有内容,对模式进行修正,并输出一个包含处理后模式的文件。该工具接收用户提供的 Devicetree 和模式目录或来自 dt-mk-schema 的预处理模式文件,然后根据模式验证 Devicetree。原创 2024-04-26 15:37:13 · 585 阅读 · 0 评论 -
GNU/Linux - MenuConfig of Kernel: CONFIG_GPIOLIB + CONFIG_GPIO_SYSFS
总之,CONFIG_GPIO_SYSFS 在 Linux 内核中启用了 GPIO Sysfs 接口,为用户空间应用程序提供了与 GPIO 引脚交互的便捷方式,而无需直接访问内核或特定的设备驱动程序。在 Linux 内核配置中,CONFIG_GPIO_SYSFS 是一个选项,用于支持将 GPIO 引脚导出到 Sysfs 文件系统(/sys/class/gpio/)。1. GPIO 操作: GPIO 库提供了用于设置 GPIO 引脚方向(输入或输出)、读写 GPIO 值以及控制其他 GPIO 相关功能的函数。原创 2024-04-25 08:50:51 · 779 阅读 · 0 评论 -
何时需要在嵌入式Linux Devicetree中配置GPIO
设备驱动程序或平台特定功能使用的 GPIO 通常要在设备树中配置,以确保内核正确初始化和使用。不过,用户空间应用程序直接访问的 GPIO 可能不需要在设备树中配置。1. 直接访问 GPIO: 用户空间应用程序使用 sysfs 或字符设备文件等接口直接访问的 GPIO 通常不需要在设备树中配置。2. 设备驱动程序使用的 GPIO: 如果 GPIO 被设备驱动程序用于控制硬件或与硬件通信,通常会在设备树中进行配置。是否需要在设备树中配置 GPIO 取决于系统中使用和访问 GPIO 的方式。原创 2024-04-24 12:16:08 · 477 阅读 · 0 评论 -
Shell学习 - 2.29 Shell if else语句(详解版)
在《Shell (())》一节中我们讲到,(())是一种数学计算命令,它除了可以进行最基本的加减乘除运算,还可以进行大于、小于、等于等关系运算,以及与、或、非逻辑运算。当 a 和 b 相等时,(( $a == $b ))判断条件成立,进入 if,执行 then 后边的 echo 语句。* 如果所有的 if 和 elif 判断都不成立,就进入最后的 else,执行 statementn。从运行结果可以看出,a 和 b 不相等,判断条件不成立,所以执行了 else 后边的语句。原创 2024-04-20 10:35:04 · 709 阅读 · 0 评论 -
Shell学习 - 2.28 Shell declare -i:将变量声明为整数类型
和 (())、let、$[] 不同,declare -i的功能非常有限,仅支持最基本的数学运算(加减乘除和取余),不支持逻辑运算(比较运算、与运算、或运算、非运算),所以在实际开发中很少使用。除了将 m、n 定义为整数,还必须将 ret 定义为整数,如果不这样做,在执行ret=$m+$n和ret=$n/$m时,Shell 依然会将 m、n 视为字符串。总之,除了将参与运算的变量定义为整数,还得将承载结果的变量定义为整数,而且只能用整数类型的变量来承载运算结果,不能直接使用 echo 输出。原创 2024-04-20 10:33:55 · 268 阅读 · 0 评论 -
Shell学习 - 2.27 Linux bc命令:一款数学计算器
其中,variable是 Shell 变量名,express是要计算的数学表达式(可以换行,和进入 bc 以后的书写形式一样),EOF是数学表达式的开始和结束标识(你也可以换成其它的名字,比如 aaa、bbb 等)。其实我们很少使用这么复杂的功能,大部分情况下还是把 bc 作为普通的数学计算器,求一下表达式的值而已,所以大家不必深究,了解一下即可。在第二条命令中,$x表示使用第一条 Shell 命令中定义的变量,n是在 bc 中定义的新变量,它和 Shell 脚本是没关系的。原创 2024-04-17 22:18:41 · 762 阅读 · 0 评论 -
在程序中如何判断Linux版本信息
在Kernel编译完成后的,会部署到sysroot中,Linux Kernel的构建目录里有,而且其他package构建目录也有,因为构建时需要引用这个sysroot的头文件。在编译和部署Linux Kernel时,会自动生成一个表示kernel版本的文件。如果代码里要使用,只需包含此头文件,并按需使用。原创 2024-04-17 17:12:27 · 467 阅读 · 0 评论 -
Shell学习 - 1.15 如何同时执行多个命令
例如,command1 && command2 只有在command1 成功执行的情况下才会执行command2。command2) & command3 将同时运行 command1 和 command3,但只有在1、3两个命令都执行完毕后才启动 command2。例如,command1 & command2 会同时执行 command1 和 command2。例如,command1 | command2 将把命令 1 的输出作为命令 2 的输入。不过,在执行多个操作时,一条一条地运行命令并不高效。原创 2024-04-13 23:27:45 · 1658 阅读 · 0 评论