inLinux其实命令的使用并不难。例如mkdir、touch和find也可以分别简单概括为“新建目录”、“更新文件”和“在目录树中查找文件”,仅此而已。但是如果你想了解命令串mkdirtest_dir2>/dev/null||touchimages.txt&&find.-iname"*jpg">backup/dir/images.txt&的用途,以及为什么要这样写,它不是那么简单。键是命令之间的连接符号。掌握这些符号的用法,不仅能让你更好地理解整体的工作原理,还能让你知道如何有效组合不同的命令,提高工作效率。在本文和后续文章中,我将介绍如何在不同的场景中使用“&”和管道符号(|)。幕后花絮我举一个简单的例子,看看如何使用&符号把下面的命令放到后台:cp-Roriginal/dir/backup/dir/这个命令的目的是递归复制original/的内容dir/到backup/dir/。虽然看起来很简单,但是如果原目录下的文件太大,在执行的过程中会一直卡在终端。因此,可以在命令末尾添加一个&符号,将此任务放入后台执行:cp-Riginal/dir/backup/dir/&任务放入后台执行后,可以立即继续在同一个终端上是有效的,即使关闭终端也不影响这个任务的正常执行。需要注意的是,如果任务需要输出内容到标准输出(如echo或ls),即使使用了&,它也会在前台等待这些输出任务运??行完毕。当使用&将一个进程置于后台时,Bash会提示该进程的进程ID。Linux系统中运行的每一个进程都有一个唯一的进程ID,可以使用进程ID来挂起、恢复或终止相应的进程,因此进程ID非常重要。这时,只要停留在启动进程的终端,就可以使用以下命令来管理后台进程:jobs命令可以显示终端当前运行的进程,包括前台运行的进程和后台运行的进程。它为每一个正在执行的流程任务分配一个序号(这个序号不是进程ID),这些序号可以用来指代每一个流程任务。$jobs[1]-Runningcp-i-Roriginal/dir/*backup/dir/&[2]+Runningfind.-iname"*jpg">backup/dir/images.txt&fg命令可以把进程任务运行在background到前台运行,这样可以更方便的进行交互。根据jobs命令提供的进程任务序号,然后在前面加上%符号,就可以将对应的进程任务放到前台运行。$fg%1#把上面序列号为1的cp任务放到前台运行cp-i-Roriginal/dir/*backup/dir/如果这个进程任务被挂起,fg命令会启动它。使用ctrl+z组合键可以暂停在前台运行的任务,只是暂停,而不是终止任务。当使用fg或bg命令重新启动任务时,任务将从暂停的地方恢复执行。但是sleep[4]命令是个特例,sleep任务挂起的时间会算在sleep时间内。因为sleep命令是以系统时钟的时间为准,而不是实际运行的时间。也就是说,如果你运行sleep30,然后暂停任务超过30秒,任务将在恢复执行时立即终止并退出。?bg命令会将任务置于后台执行,如果任务处于暂停状态,也会启动。$bg%1[1]+cp-i-Roriginal/dir/*backup/dir/&如前所述,以上命令只能在同一个终端下使用。如果启动流程任务的终端关闭或切换到其他终端,则无法使用上述命令。如果你想从另一个终端管理后台进程,你需要其他工具。例如,您可以使用kill[5]命令从另一个终端终止进程:kill-sSTOP
