Linux操作系统笔记——Shell 命令解释器的基本知识

简介: Linux操作系统笔记——Shell 命令解释器的基本知识

一、Shell的概念


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


二、命令类型


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


(一)单条命令


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

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

[yyx@yyx12 ~]$ ls -l


在Linux终端输入命令:

1667192971322.jpg


(二)串行命令


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

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

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


在Linux终端输入命令:

1667192992148.jpg

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

[yyx@yyx12 ~]$ date;who


在Linux终端输入命令:

1667193007695.jpg


(三)命令组


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

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终端输入命令:

1667193030718.jpg

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


2、使用管道的命令组

管道命令,“|”像一个管子一样连接多条命令,将前一条命令的标准输出重定向到后一条命令作为其标准输入,例如两条命令通过”|“连接,第一条命令的执行结果作为执行的参数传到第二条命令,显示的是第二条命令以第一条命令为参数的结果。

例如,将cat命令和grep命令通过管道“|”命令连接,使用cat命令显示/etc/filesystems的内容,将其作为grep命令的输入,grep命令后跟要查找的名称,使grep查找符合的内容:

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


在Linux终端输入命令:

1667193050965.jpg

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

[yyx@yyx12 ~]$ who|grep yyx


在Linux终端输入命令:

1667193069071.jpg


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


放在后台执行的程序(命令)称为后台命令,可以在命令的后面加上“&”符号从而让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终端输入命令:

1667193093176.jpg

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

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


在Linux终端输入命令:

1667193112488.jpg


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


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


标准输入/输出,也就是将一条或多条命令(程序)的输入/输出可以传送至其他程序或文件中,当执行一条命令(程序)时,系统会自动为该命令(程序)打开三个文件,分别是标准输入、标准输出和标准错误输出,其文件描述符(也就是每个文件所分配的编号)分别对应为0、1和2,其中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终端输入命令,执行后过一会终端会收到邮件提醒如下图:

1667193177845.jpg

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

1667193189519.jpg

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

1667193199339.jpg


(三)标准输出重定向


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

image.png


其对比如下:

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


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

/etc/filesystems文件和/etc/newfile文件的内容如下:

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


在Linux终端输入命令:

1667193248545.jpg

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

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


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

1667193269446.jpg

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

file1、file2文件中的内容如下:

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


执行以下命令:

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


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

1667193296876.jpg


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


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


相关文章
|
3月前
|
Ubuntu 物联网 Linux
从零安装一个Linux操作系统几种方法,以Ubuntu18.04为例
一切就绪后,我们就可以安装操作系统了。当系统通过优盘引导起来之后,我们就可以看到跟虚拟机中一样的安装向导了。之后,大家按照虚拟机中的顺序安装即可。 好了,今天主要介绍了Ubuntu Server版操作系统的安装过程,关于如何使用该操作系统,及操作系统更深层的原理,还请关注本号及相关圈子。
|
9月前
|
存储 Linux API
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
在计算机系统的底层架构中,操作系统肩负着资源管理与任务调度的重任。当我们启动各类应用程序时,其背后复杂的运作机制便悄然展开。程序,作为静态的指令集合,如何在系统中实现动态执行?本文带你一探究竟!
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
|
8月前
|
存储 Linux iOS开发
【Linux】冯诺依曼体系与操作系统理解
本文深入浅出地讲解了计算机体系的两大核心概念:冯诺依曼体系结构与操作系统。冯诺依曼体系作为现代计算机的基础架构,通过中央处理器、存储器和输入输出设备协同工作,解决了硬件性能瓶颈问题。操作系统则是连接硬件与用户的桥梁,管理软硬件资源,提供运行环境。文章还详细解析了操作系统的分类、意义及管理方式,并重点阐述了系统调用的作用,为学习Linux系统编程打下坚实基础。适合希望深入了解计算机原理和技术内幕的读者。
239 1
|
3月前
|
Ubuntu Unix Linux
操作系统的最强入门科普(Unix/Linux篇)
下期文章,小枣君会重点聊聊Windows和macOS那条线。敬请关注! 如果大家觉得文章不错,还请帮忙多多转发!谢谢!
|
3月前
|
监控 Ubuntu Linux
什么Linux,Linux内核及Linux操作系统
上面只是简单的介绍了一下Linux操作系统的几个核心组件,其实Linux的整体架构要复杂的多。单纯从Linux内核的角度,它要管理CPU、内存、网卡、硬盘和输入输出等设备,因此内核本身分为进程调度,内存管理,虚拟文件系统,网络接口等4个核心子系统。
301 0
|
3月前
|
Unix 物联网 Linux
都什么年代了,你还不懂啥是Linux操作系统
至于华为鸿蒙操作系统是不是独树一帜,这个留给各位阅读本文的网友们来讨论
109 0
|
3月前
|
Web App开发 缓存 Rust
|
3月前
|
安全 Linux iOS开发
linux属于什么操作系统
Linux是一种自由和开放源代码的操作系统,具有高度的灵活性和可定制性。与常见的操作系统如Windows和macOS相比,Linux具有自由、安全和稳定等优势。Linux已广泛应用于服务器、桌面电脑、超级计算机和嵌入式设备等领域,并且在未来的发展前景广阔。由于其自由和开放源代码的特性,Linux还促进了计算机技术和社区的发展,为全球的计算机用户提供了更多的选择和可能性。
|
3月前
|
安全 Ubuntu Unix
关于Linux操作系统,你必须要知道的事
我们可以看到无论是Debian还是Buildroot都有各自的特点,为客户提供了更大的选择空间和灵活性,大家可以根据自己的需求选择合适的版本来满足终端用户的体验和功能需求。从平技术将会一直关注更多更安全、灵敏、易于开发的Linux版本,做好适配工作,不断为客户带来“简单开发、方便应用”的使用体验。
|
3月前
|
安全 Ubuntu Linux
如何安装Linux操作系统?
此时,您可以选择重新启动计算机,然后从硬盘上的Linux系统启动。以上是一个大致的安装过程。请注意,不同的Linux发行版可能会在细节上有所差异,因此在进行安装之前,请确保您阅读并理解了相应发行版的安装指南或文档。
下一篇
oss云网关配置