全方位剖析 Linux 操作系统,太全了( 三 )


可以把一系列 shell 命令放在一个文件中,然后将此文件作为输入来运行 。shell 会按照顺序对他们进行处理,就像在键盘上键入命令一样 。包含 shell 命令的文件被称为 shell 脚本(shell scripts) 。

推荐一个 shell 命令的学习网站:https://www.shellscript.sh/
shell 脚本其实也是一段程序,shell 脚本中可以对变量进行赋值,也包含循环控制语句比如 if、for、while 等,shell 的设计目标是让其看起来和 C 相似(There is no doubt that C is father) 。由于 shell 也是一个用户程序,所以用户可以选择不同的 shell 。
Linux 应用程序Linux 的命令行也就是 shell,它由大量标准应用程序组成 。这些应用程序主要有下面六种
  • 文件和目录操作命令
  • 过滤器
  • 文本程序
  • 系统管理
  • 程序开发工具,例如编辑器和编译器
  • 其他
除了这些标准应用程序外,还有其他应用程序比如 Web 浏览器、多媒体播放器、图片浏览器、办公软件和游戏程序等 。
我们在上面的例子中已经见过了几个 Linux 的应用程序,比如 sort、cp、ls、head,下面我们再来认识一下其他 Linux 的应用程序 。
我们先从几个例子开始讲起,比如
cp a b是将 a 复制一个副本为 b,而
mv a b是将 a 移动到 b,但是删除原文件 。
上面这两个命令有一些区别,cp 是将文件进行复制,复制完成后会有两个文件 a 和 b;而 mv 相当于是文件的移动,移动完成后就不再有 a 文件 。cat 命令可以把多个文件内容进行连接 。使用 rm 可以删除文件;使用 chmod 可以允许所有者改变访问权限;文件目录的的创建和删除可以使用 mkdir 和 rmdir 命令;使用 ls 可以查看目录文件,ls 可以显示很多属性,比如大小、用户、创建日期等;sort 决定文件的显示顺序
Linux 应用程序还包括过滤器 grep,grep 从标准输入或者一个或多个输入文件中提取特定模式的行;sort 将输入进行排序并输出到标准输出;head 提取输入的前几行;tail 提取输入的后面几行;除此之外的过滤器还有 cut 和 paste,允许对文本行的剪切和复制;od 将输入转换为 ASCII ;tr 实现字符大小写转换;pr 为格式化打印输出等 。
程序编译工具使用 gcc;
make 命令用于自动编译,这是一个很强大的命令,它用于维护一个大的程序,往往这类程序的源码由许多文件构成 。典型的,有一些是 header files 头文件,源文件通常使用 include 指令包含这些文件,make 的作用就是跟踪哪些文件属于头文件,然后安排自动编译的过程 。
下面列出了 POSIX 的标准应用程序
程序应用ls列出目录cp复制文件head显示文件的前几行make编译文件生成二进制文件cd切换目录mkdir创建目录chmod修改文件访问权限ps列出文件进程pr格式化打印rm删除一个文件rmdir删除文件目录tail提取文件最后几行tr字符集转换grep分组cat将多个文件连续标准输出od以八进制显示文件cut从文件中剪切paste从文件中粘贴
Linux 内核结构在上面我们看到了 Linux 的整体结构,下面我们从整体的角度来看一下 Linux 的内核结构
全方位剖析 Linux 操作系统,太全了

文章插图
 
内核直接坐落在硬件上,内核的主要作用就是 I/O 交互、内存管理和控制 CPU 访问 。上图中还包括了 中断 和 调度器,中断是与设备交互的主要方式 。中断出现时调度器就会发挥作用 。这里的低级代码停止正在运行的进程,将其状态保存在内核进程结构中,并启动驱动程序 。进程调度也会发生在内核完成一些操作并且启动用户进程的时候 。图中的调度器是 dispatcher 。
注意这里的调度器是 dispatcher 而不是 scheduler,这两者是有区别的
scheduler 和 dispatcher 都是和进程调度相关的概念,不同的是 scheduler 会从几个进程中随意选取一个进程;而 dispatcher 会给 scheduler 选择的进程分配 CPU 。
然后,我们把内核系统分为三部分 。
  • I/O 部分负责与设备进行交互以及执行网络和存储 I/O 操作的所有内核部分 。
从图中可以看出 I/O 层次的关系,最高层是一个虚拟文件系统,也就是说不管文件是来自内存还是磁盘中,都是经过虚拟文件系统中的 。从底层看,所有的驱动都是字符驱动或者块设备驱动 。二者的主要区别就是是否允许随机访问 。网络驱动设备并不是一种独立的驱动设备,它实际上是一种字符设备,不过网络设备的处理方式和字符设备不同 。


推荐阅读