专业编程基础技术教程

网站首页 > 基础教程 正文

Linux命令行之命令组合(linux多个命令一起执行)

ccvgpt 2024-07-24 11:03:01 基础教程 10 ℃

对于 Windows、macOS 等操作系统,用户完成一项工作一般依赖于一些独立的应用程序,如Office、邮箱等等,大多数应用程序都是自给自足的,不依赖其他应用程序。虽然可能会在应用程序之间复制和粘贴,但在大多数情况下这些程序是各自独立的。

Linux 命令行不同,Linux没有提供具有大量功能的大型应用程序,而是提供了数千个功能很少的小命令。例如,cat在屏幕上打印文件,ls列出目录中的文件,mv移动文件。每个命令都有一个简单、相当明确定义的目的。

Linux命令行之命令组合(linux多个命令一起执行)

在Linux上如果需要做更复杂的事情怎么办?Linux 使用命令组合的方式,使得不同命令可以协同工作以达成目的。这种设计产生了一种非常不同的思维方式:我应该组合哪些命令来完成功能?而不是我应该使用哪个程序来完成我的功能。

输入、输出和管道

Linux命令使用管道来组合命令,管道可将一个命令的输出连接到另一个命令的输入。大多数 Linux 命令从键盘读取输入,将输出写入屏幕,或两者兼而有之。输入和输出在Linux有专门的术语:

stdin(standard input或 standard in) 标准输入。例如在Shell提示符输入命令,就是向stdin提供输入数据。

stdout(standard output或standard out)标准输出。Linux 写到显示设备的输出流。运行 ls 命令打印文件名时,结果将显示在标准输出上。

很酷的地方在于,我们可以将一个命令的 stdout 连接到另一个命令的 stdin。例如 ls -l 以行格式列出文件,例如:

$ ls -l /bin
total 12104
-rwxr-xr-x 1 root root 1113504 Jun 6 2019 bash
-rwxr-xr-x 1 root root 170456 Sep 21 2019 bsd-csh
-rwxr-xr-x 1 root root 34888 Jul 4 2019 bunzip2
-rwxr-xr-x 1 root root 2062296 Sep 18 2020 busybox
-rwxr-xr-x 1 root root 34888 Jul 4 2019 bzcat
?
-rwxr-xr-x 1 root root 5047 Apr 27 2017 znew

目录下包含的文件已经超出终端可以显示的行,因此输出会滚动到终端外。ls无法一次打印一个屏幕的信息,但是另一个 Linux 命令 less 可以一次显示一个屏幕的文件:

$ less myfile

因为 ls 写到标准输出,而 less 命令可以从标准输出读取,因此可以使用管道将ls的输出发送到less的输入:

$ ls -l /bin | less

该组合命令一次显示一个屏幕的目录内容。命令之间的竖线(|)是 Linux 管道符号。它将第一个命令的标准输出连接到下一个命令的标准输出。

命令通常不知道它们是管道的一部分。ls以为它正在写到标准输出,而实际上它的输出已被重定向到 less。当less读取ls的输出时,less以为它是从键盘读取的。

命令有三种表现形式:

单个程序:可执行程序(如 ls)或shell内置命令(如 cd)

一个简单命令:程序(或内置的 shell内置命令)后跟参数(可选),例如 ls -l /bin

组合命令:几个简单的命令组合为一个处理单元,例如 ls -l /bin | less

最近发表
标签列表