linux操作系统笔记——shell命令解释器的基本知识(代码片段)

晚风(●•σ) 晚风(●•σ)     2023-02-03     554

关键词:

目录

一、Shell的概念

Shell是Linux操作系统中的一个命令解释器,是一个为用户提供操作页面的程序,它提供了用户与内核交互操作的接口,它有自己的编程语言,即它也是一种程序设计语言

二、命令类型

Shell命令可以识别用户输入一条命令或多条命令的组合从而完成一项/多项功能操作,它有以下几种类型来执行命令。

(一)单条命令

  • 单条命令,即在命令行中输入的命令只包括一条命令。

如下通过ls命令使用长格式显示文件内容,包括文件的属性、权限等数据:

[yyx@yyx12 ~]$ ls -l

在Linux终端输入命令:

(二)串行命令

  • 串行命令是在命令行中由“;”分号隔开多条命令,Shell执行串行命令时是从左至右执行的,其中各命令互不干扰,它们之间没有逻辑关系,这种方法可以一次执行多个命令操作,执行完后每条命令的输出结果依次显示。

如下分别依次执行ls列出当前目录和文件、pwd显示当前工作目录,然后再通过cd命令将当前工作目录切换至/etc:

[yyx@yyx12 ~]$ ls;pwd;cd /etc

在Linux终端输入命令:

例如,date命令用于显示当前时间,who命令用于显示系统中的用户(使用者)信息,通过分号隔开,依次执行这两条命令:

[yyx@yyx12 ~]$ date;who

在Linux终端输入命令:

(三)命令组

  • 串行命令中各命令之间是没有逻辑关系的,而命令组(复合命令),它可以使多条具有一定逻辑关系的命令结合在一起执行,从而形成一个相对独立的整体。

1、使用圆括号的命令组

通过圆括号“()”将多条命令包括起来,从而可将括号内的多条命令可看作一个整体。
例如,我们首先在/home目录下创建一个空文件newfile,通过cat命令显示“Centos系统版本信息”文件内容以及date命令显示当前时间,将这两个命令的结果作为一个整体通过”>“标准输出重定向符,将其赋给/home/newfile,此时newfile文件内容就是这两个命令所显示的内容:

[yyx@yyx12 ~]$ su root
...
[root@yyx12 yyx]# touch /home/newfile
[root@yyx12 yyx]# (cat /etc/centos-release;date)>/home/newfile
[root@yyx12 yyx]# cat /home/newfile

在Linux终端输入命令:

关于标准输入/输出重定向符的知识点之后会讲到。

2、使用管道的命令组

管道命令,“|”像一个管子一样连接多条命令,将前一条命令的标准输出重定向到后一条命令作为其标准输入,例如两条命令通过”|“连接,第一条命令的执行结果作为执行的参数传到第二条命令,显示的是第二条命令以第一条命令为参数的结果。
例如,将cat命令和grep命令通过管道“|”命令连接,使用cat命令显示/etc/filesystems的内容,将其作为grep命令的输入,grep命令后跟要查找的名称,使grep查找符合的内容:

[yyx329@192 ~]$ cat /etc/filesystems|grep xfs
[yyx329@192 ~]$ cat /etc/filesystems|grep ext

在Linux终端输入命令:

例如管道中一个简单的应用,我们知道who命令用于查看当前系统的用户信息,例如我们想通过命令查找名为yyx的用户是否登陆系统,就可以通过who命令和grep命令之间通过管道连接,将who输出的信息传给grep从而进行查询:

[yyx@yyx12 ~]$ who|grep yyx

在Linux终端输入命令:

(四)前台命令与后台命令

  • 放在后台执行的程序(命令)称为后台命令,可以在命令的后面加上“&”符号从而让Shell识别这是一个后台命令,后台命令不用等待该命令执行完成,就可立即接收新的命令,另外后台进程执行完后会返回一个进程号(PID);相对应的,若Shell执行一条命令并等待该命令结束后才接受新的命令,且该命令运行时默认的输入/输出都在当前终端上,则这个命令称为前台命令

例如,通过ls 命令列出当前目录信息,将这些信息保存到/home/newfile文件中,由于后面加了“&”,所以不必等待ls命令执行完,也就是这是一个后台命令,最后再通过cat命令打开该文件:

[yyx@yyx12 ~]$ su root
...
[root@yyx12 yyx]# ls -l > /home/newfile &
...
[root@yyx12 yyx]# cat /home/newfile

在Linux终端输入命令:

再将得到的进程号(PID),即PID=9665,通过ps命令通过PID查询进程信息,如下:

[root@yyx12 yyx]# ps -ef | grep 9665

在Linux终端输入命令:

三、标准输入/输出重定向

(一)标准输入/输出的定义

标准输入/输出,也就是将一条或多条命令(程序)的输入/输出可以传送至其他程序或文件中,当执行一条命令(程序)时,系统会自动为该命令(程序)打开三个文件,分别是标准输入标准输出标准错误输出,其文件描述符(也就是每个文件所分配的编号)分别对应为012,其中0连接到键盘上,1和2连接到终端屏幕上。

文件描述符含义
0标准输入
1标准输出
2标准错误输出
  • 默认情况下,一个程序的运行时,它从标准输入,也就是键盘上读入数据,然后将运行结果送到标准输出,即屏幕上;若出现错误,则将错误信息送到标准错误输出,即屏幕上。

(二)标准输入重定向

标准输入重定向是系统从标准输入(键盘)接收命令,可以通过命令格式文件描述符格式将输入重定向至目标文件,它的文件描述符为0。
1、以命令格式输入重定向至目标文件,如下:

command < filename

2、以文件描述符格式输入重定向至目标文件,如下:

file descriptor < filename

例如以下通过一个邮件的发送为例【以命令格式】,我们要向用户名为yyx的用户发送邮件,通过mail命令,在该命令运行时标准输入重定向到/etc/newfile文件(原本是键盘),即将/etc/newfile文件的内容传送到yyx用户,如下命令:
/etc/newfile文件的内容如下:

[root@yyx12 yyx]# cat /etc/newfile
abcdefhijklmn
1234567890

运行mail命令时,标准输入重定向到/etc/newfile文件,如下:

[root@yyx12 yyx]# mail yyx < /etc/newfile

在Linux终端输入命令,执行后过一会终端会收到邮件提醒如下图:

通过ls列出该邮件的信息:

通过所给路径查看邮件内容,邮件的内容也就是重定向输入的内容(/etc/newfile):

(三)标准输出重定向

标准输出重定向的文件描述符为1,它分为两种形式如下,分别是覆盖形式“>”和追加形式“>>”:

标准输出重定向 > 覆盖形式 >> 追加形式

其对比如下:

名称符号表示若文件存在若文件不存在
覆盖形式>覆盖文件原有内容新建文件然后送入该文件中
追加形式>>追加到文件原有内容的尾部新建文件然后送入该文件中

例如,我们将/etc/filesystems文件的内容通过追加形式写到/etc/newfile文件的末尾(该文件原本有内容),然后再通过cat命令查看/etc/newfile文件内容:
/etc/filesystems文件和/etc/newfile文件的内容如下:

[yyx@yyx12 ~]$ cat /etc/filesystems
...
[yyx@yyx12 ~]$ cat /etc/newfile
...

在Linux终端输入命令:

将/etc/filesystems文件的内容通过追加形式写到/etc/newfile文件的末尾,由于是追加形式,所以要使用符号“>>”:

[root@yyx12 yyx]# cat /etc/filesystems >> /etc/newfile
[root@yyx12 yyx]# cat /etc/newfile

在Linux终端输入命令,可见/etc/filesystems文件的内容被追加到原本/etc/newfile文件内容的后面:

标准输入/输出重定向符号其实可以通过多个命令或多个文件一起执行,例如下面我们通过cat命令将/tmp目录下的文件file1的内容作为标准输入重定向,通过标准输出重定向的追加形式到同目录下的file2:
file1、file2文件中的内容如下:

/tmp/file1:
123456
/tmp/file2:
abcdef

执行以下命令:

[yyx@yyx12 ~]$ cat < /tmp/file1 >> /tmp/file2

在Linux终端输入命令,可以看到/tmp/file1的内容被添加到/tmp/file2的末尾:

(四)标准错误输出重定向

标准错误输出重定向的文件描述符为2,比如一个命令(程序)有错误,可以通过“2>”的形式,后跟文件名称,将错误信息保存在一个文件中,从而方便查看。

linux命令行笔记-00综述(代码片段)

....1.1根据系统中作用来分类1.1.2根据对象来分类2Linux命令行解释器2.1命令行解释器shell2.1.1核心程序2.1.2公用程序shell2.1.3用户的默认shell2.1.4shell如何工作2.2Shell发展历史2.3shell版本的差异2.3.1Cshell2.3.2Bourneshell2.3.3Kornshell2.3.4bash2.3.5tcsh3L... 查看详情

超实用linux常用命令

...Shell是一种特殊的程序是内核与用户的一种接口Shell命令解释器Shell一种解释性的语言(内部命令/外部命令)内 查看详情

linux常用命令详解

...或程序命令本质就是程序命令的执行必须依赖于shell命令解释器程序(例如:/bin/bash)shell解释器,是Linux系统中运行的一种特殊程序,就是作为翻译官,横跨在用户和内核之间,将用户输入的命令解释为内核能识别的语言只要是... 查看详情

shell脚本之笔记一

...#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell运行shell (chmod+xfile 加上执行权限,否则会提示无执行权限)    一定要写成 ./test.sh,而不是 test.sh运行其它二进制的程... 查看详情

linux常用命令精华讲解上部(下部下回分解)不要催很忙的

Linux常用命令讲解1、Linux命令基础2、Linux命令帮助3、目录与文件的基操  1、Shell是系统中运行的一种特殊程序在用户和内核之间充当“翻译官”的角色,登录linux时,自动加载一个shell程序。Bash是linux系统中默认使用的shell... 查看详情

shell笔记1

shell是操作系统的外壳,是用户使用操作系统的命令接口,是一个介于用户和操作系统内核之间的桥梁。shell俗称,壳。是指“提供使用者使用界面”的软件(命令解析器)。作为命令语言,它交互式解释和执行用户输入的命令,或... 查看详情

linux操作基础——shell(代码片段)

...l接收用户输入的命令并把它送入内核执行,在用户与操作系统之间进行交互。shell在Linux系统中具有极其重要的地位。2.shell的功能命令解释器是shell最重要的功能。Linux系统 查看详情

linuxbashshell简介

...令翻译成计算机的机器指令交由计算机执行。在Linux或UNIX操作系统上,这个命令解释器就叫shell。5.1、shell的工作原理其实当一个用户以命令行方式登录Linux或UNIX操作系统之后即进入了shell应用程序。使用xshell连接Linux系统登录系... 查看详情

如何在shell脚本中,判断一个基本命令执行是不是成功

...net并没有连接成功。注意事项附件:LINUX系统外壳原理作为操作系统的外壳,Linux系统的外壳为用户提供了使用操作系统的接口。它是命令语言、命令解释器和编程语言的统称。shell是用户和Linux内核之间的接口。如果您将Linux内核... 查看详情

linux下的shell命令,命令行,终端运行概念的解释???

...令提示符):命令行一般指命令提示符。命令提示符是在操作系统中,提示进行命令输入的一种工作提示符。在不同的操作系统环境下,命令提示符各不相同。终端:终端Terminal通常是指那些与集中式主机系统相连的“哑”用户... 查看详情

shell操作相关的快捷键--linux

...h(GNUBourne-AgainShell)是许多Linux发行版的默认shell。二、命令解释器的作用解释用户输入的命令,执行对应的操作。用户在虚拟终端输入命令,shell解析命令,搜索环境变量,找到输入的命令运行这个程序,终端下才会有对应的输出。... 查看详情

linux操作系统笔记——shell程序设计(代码片段)

目录一、Shell脚本的概念二、一个Shell脚本的基本步骤三、赋予Shell脚本执行权限(一)Shell调用脚本(二)chmod命令赋予脚本执行权限四、Shell功能性语句(一)read命令读入(二)tput命令(三... 查看详情

linux命令解析器(代码片段)

...先我们要知道:什么是命令解析器?shell就是命令解释器shell解释器是一个程序。是的,就是一个程序, 查看详情

linux命令解析器(代码片段)

...先我们要知道:什么是命令解析器?shell就是命令解释器shell解释器是一个程序。是的,就是一个程序, 查看详情

linux基础命令,目录文件操作,vi编辑器详解(代码片段)

...shell实际上是在linux系统中运行的一种特殊程序,它位于操作系统内核与用户之间,负责接收用户输入的命令并进行解释,将需要执行的操作传递给系统内核执行,shell在用户和内核之间充当了一个“翻译官”的角色。当用户登录... 查看详情

linux目录和文件管理

内部命令:指的是集成于shell解释器程序内部的一些特殊指令,也称为内建指令(built-in)。2.外部指令:指的是linux系统中能够完成特定功能的脚本文件或二进制程序,每个外部命令对应着系统中的一个文件,是属于shell解释器... 查看详情

linux关于权限的理解

...双击D盘盘符.或者运行起来一个应用程序).shell就相当于操作系统的外壳,用户先输入指令到shell外壳,外壳在进行过滤,将命令传给操作系统,反馈结果在通过内核运行出结果,通过shell解析给用户。用户直接和操作系统直接交... 查看详情

linux常用命令手册(代码片段)

...面,提供了用户与内核进行交互操作的一种接口(命令解释器)Shell可以执行:内部命令应用程序shell脚 查看详情