Linux下进程管道和重定向

进程是计算机中正在运行的程序的实例。它是操作系统进行任务调度和资源分配的基本单位。

在操作系统中,每个进程都有自己的内存空间、代码、数据和执行状态。进程可以是一个应用程序、一个服务、一个后台任务或系统内部的其他组件。每个进程都由操作系统分配一个唯一的标识符,称为进程ID(Process ID,PID),用于标识和管理进程。

进程的主要特征包括:

  • 独立性:每个进程运行在自己的独立内存空间中,彼此之间相互隔离,不会直接干扰其他进程的执行。
  • 并发性:多个进程可以同时运行,操作系统通过任务调度算法决定每个进程的执行顺序和时间片分配。
  • 协作性:进程可以通过进程间通信(Inter-Process Communication,IPC)机制来进行数据交换和协作,例如管道、套接字、共享内存等。
  • 生命周期:进程可以被创建、运行、暂停、恢复、终止等。进程的生命周期由操作系统管理。

进程的创建通常是由操作系统启动一个新的程序实例或通过现有进程创建子进程。进程可以执行各种操作,包括读写文件、网络通信、计算、图形界面显示等。

进程管理是操作系统的核心功能之一,它负责分配和管理系统资源,包括内存、CPU 时间、文件句柄等,以确保进程能够正常运行并与其他进程共享资源。

PS

ps 命令是用于显示当前系统中正在运行的进程的命令,它提供了许多参数来控制输出的格式和内容。以下是 ps 命令的一些常用参数:

  • a:显示所有进程,包括其他用户的进程。
  • x:显示没有控制终端的进程。
  • u:以用户为基础的格式显示进程信息,包括进程的用户、CPU 占用率、内存占用等。
  • e:显示所有进程,包括没有终端的进程。
  • f:以完整的格式显示进程信息,包括进程的详细信息(如进程的用户、进程 ID、父进程 ID、CPU 占用率等)。
  • l:以长格式显示进程信息,包括更多的属性(如进程状态、启动时间、命令行等)。
  • c:仅显示进程的命令名称,而不显示完整的命令行。
  • r:显示实时优先级。
  • n:以数字形式显示用户和组的标识符,而不是名称。
  • --sort=<列名>:按指定的列名对进程进行排序,例如 --sort=-%cpu 表示按 CPU 占用率降序排序。
  • --forest:以树状结构显示进程之间的父子关系。
  • --headers:显示列标题。
  • --no-headers:不显示列标题。
  • --pid=<进程ID>:仅显示指定进程ID的信息。
  • --ppid=<父进程ID>:仅显示指定父进程ID的子进程信息。

TOP

top 命令是一个常用的系统监视工具,用于实时显示系统中运行的进程的状态和资源使用情况。下面是一些常用的 top 命令参数及其详细解释:

  • -d <秒数>:指定刷新间隔,即 top 命令每隔指定的秒数更新一次显示,默认为 3 秒。
  • -n <次数>:指定显示的次数,即 top 命令刷新并显示指定次数后自动退出。
  • -p <进程ID>:只显示指定进程ID的信息,多个进程ID可以用逗号分隔。
  • -u <用户名>:只显示指定用户名的进程信息。
  • -U <用户列表>:只显示指定用户列表中的进程信息,多个用户可以用逗号分隔。
  • -s <排序字段>:根据指定的字段对进程进行排序,常用的字段有 %CPU(CPU 使用率)、%MEM(内存使用率)、TIME+(累计 CPU 时间)等。
  • -o <字段列表>:自定义显示的字段列表,用逗号分隔,可以选择显示的信息,例如 PID(进程ID)、USER(用户名)、%CPU(CPU 使用率)、%MEM(内存使用率)等。
  • -b:以批处理模式运行 top 命令,将结果输出到文件而不是终端。
  • -c:显示完整的命令行参数,而不截断显示。
  • -H:显示每个进程的线程信息。
  • -i:忽略闲置和僵尸进程,只显示活跃的进程。
  • -d:显示每个进程的磁盘 I/O 统计信息。
  • -e:显示所有进程,包括其他用户的进程。
  • -s:累计模式,将多个进程的资源使用情况累计显示。

KILL

kill 命令用于向进程发送信号,以控制进程的行为。下面是一些常用的 kill 命令的参数:

  • kill <进程ID>:向指定进程ID发送默认的终止信号(SIGTERM),用于正常终止进程。
  • kill -<信号编号> <进程ID>:向指定进程ID发送指定的信号,可以使用信号编号或信号名称。例如,kill -9 1234kill -KILL 1234 将发送强制终止信号(SIGKILL)给进程ID为 1234 的进程。
  • killall <进程名称>:向所有具有指定进程名称的进程发送默认的终止信号。例如,killall firefox 将向所有名为 "firefox" 的进程发送终止信号。
  • killall -<信号编号> <进程名称>:向所有具有指定进程名称的进程发送指定的信号。
  • kill -l:列出系统支持的信号列表及其对应的编号和名称。

重定向

重定向 :
把标准输出写入到指定的文件

重定向是一种将命令的输入或输出流从默认位置更改为其他位置的方法。在命令行中,可以使用以下符号来进行重定向:

  • >:将命令的输出重定向到文件,并覆盖文件中的内容。
  • >>:将命令的输出追加到文件的末尾。
  • <:将文件的内容作为命令的输入。
  • 2>:将命令的错误输出重定向到文件。
  • 2>>:将命令的错误输出追加到文件的末尾。
  • &>&>>:将命令的输出和错误输出都重定向到文件。

下面是一些重定向的用法示例:

  1. 将命令的输出重定向到文件:

    command > file.txt
    
  2. 将命令的输出追加到文件的末尾:

    command >> file.txt
    
  3. 将文件的内容作为命令的输入:

    command < file.txt
    
  4. 将命令的错误输出重定向到文件:

    command 2> error.txt
    
  5. 将命令的错误输出追加到文件的末尾:

    command 2>> error.txt
    
  6. 将命令的输出和错误输出都重定向到文件:

    command &> output.txt
    
  7. 将命令的输出和错误输出都追加到文件的末尾:

    command &>> output.txt
    

管道用法

管道(Pipe)是一种将一个命令的输出作为另一个命令的输入的方法。通过管道,可以将多个命令串联起来,实现数据的传递和处理。在命令行中,使用竖线符号 | 表示管道操作符。

下面是一些管道的用法示例:

  1. 将一个命令的输出作为另一个命令的输入:

    command1 | command2
    

    例如,ls | grep "example" 将列出当前目录下的文件和目录,并将结果传递给 grep 命令进行匹配过滤。

  2. 将多个命令串联起来:

    command1 | command2 | command3
    

    例如,cat file.txt | grep "keyword" | wc -l 将读取文件 file.txt 的内容,然后将包含关键字 "keyword" 的行传递给 wc -l 命令进行行数统计。

  3. 使用管道和重定向结合:

    command1 | command2 > file.txt
    

    例如,ls | grep "example" > file.txt 将列出当前目录下的文件和目录,并将包含关键字 "example" 的行输出到文件 file.txt

tr

tr 命令用于对文本进行字符转换或删除操作。它可以在输入中替换、删除或压缩字符,并将结果输出到标准输出或指定的文件中。

下面是一些常用的 tr 命令用法示例:

  1. 替换字符:

    echo "Hello" | tr 'o' 'a'
    

    该命令将字符串 "Hello" 中的字符 'o' 替换为 'a',输出结果为 "Hella"。

  2. 删除字符:

    echo "Hello" | tr -d 'l'
    

    该命令将字符串 "Hello" 中的字符 'l' 删除,输出结果为 "Heo"。

  3. 字符集转换:

    echo "Hello" | tr '[:lower:]' '[:upper:]'
    

    该命令将字符串 "Hello" 中的小写字母转换为大写字母,输出结果为 "HELLO"。

  4. 压缩字符:

    echo "Hello" | tr -s 'l'
    

    该命令将字符串 "Hello" 中连续出现的字符 'l' 压缩为一个字符,输出结果为 "Helo"。

  5. 删除字符集:

    echo "Hello" | tr -cd '[:alnum:]'
    

    该命令将字符串 "Hello" 中的非字母和非数字字符删除,输出结果为 "Hello"。

SROT

sort 命令用于对文本文件的行进行排序,默认按照字典顺序进行排序。sort 命令可以根据不同的选项进行排序,并将结果输出到标准输出或指定的文件中。

下面是一些常用的 sort 命令用法示例:

  1. 对文件进行排序并输出到标准输出:

    sort file.txt
    

    该命令将按照字典顺序对文件 file.txt 的行进行排序,并将结果输出到标准输出。

  2. 对文件进行排序并将结果保存到新文件:

    sort file.txt > sorted.txt
    

    该命令将按照字典顺序对文件 file.txt 的行进行排序,并将排序后的结果保存到文件 sorted.txt

  3. 对文件进行逆序排序:

    sort -r file.txt
    

    该命令将按照字典顺序对文件 file.txt 的行进行逆序排序(降序)。

  4. 忽略字母的大小写进行排序:

    sort -f file.txt
    

    该命令将按照字典顺序对文件 file.txt 的行进行排序,忽略字母的大小写。

  5. 按照数值进行排序:

    sort -n file.txt
    

    该命令将按照数值大小对文件 file.txt 的行进行排序。

  6. 按照指定的字段进行排序:

    sort -k <field> file.txt
    

    该命令将按照指定字段 <field> 对文件 file.txt 的行进行排序。字段可以使用数字表示,例如 -k 2 表示按照第二个字段进行排序;也可以使用 -k <start>,<end> 表示按照从 <start><end> 的字段范围进行排序。

awk

awk 是一种强大的文本处理工具,用于从文本文件中提取和处理数据。它按行读取输入文件,并根据指定的规则执行相应的操作。下面是 awk 命令的一般语法:

awk '<规则> { <操作> }' <文件名>

其中,<规则> 用于选择要处理的行,<操作> 用于指定对选定行执行的操作,<文件名> 是要处理的文件名。

awk 命令的常用参数如下:

  • -F <分隔符>:指定输入文件的字段分隔符。默认情况下,分隔符是空格或制表符。
  • -v <变量名>=<值>:定义一个 awk 变量,并为其赋值。
  • -f <脚本文件>:从指定的脚本文件中读取 awk 命令。
  • -i <扩展名>:指定在原始文件上进行原地修改,并将修改后的结果保存到指定的扩展名文件中。
  • -W <关键字>:启用指定的兼容模式。

除了这些常用参数,awk 还具有许多内置变量和函数,可以在 awk 脚本中使用。以下是一些常用的内置变量:

  • NR:当前记录(行)号。
  • NF:当前记录的字段数。
  • $0:当前记录的完整文本内容。
  • $1, $2, ...:当前记录的第一个、第二个字段,以此类推。

以下是一些常用的 awk 内置函数:

  • print:打印指定的文本或变量。
  • printf:按指定格式打印文本或变量。
  • length:返回指定字符串的长度。
  • substr:返回指定字符串的子字符串。
  • split:将指定字符串拆分为数组。
  • tolower:将指定字符串转换为小写。
  • toupper:将指定字符串转换为大写。
  • getline:从输入文件中读取下一行。