可以把一系列 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,它由大量标准应用程序组成 。这些应用程序主要有下面六种
- 文件和目录操作命令
- 过滤器
- 文本程序
- 系统管理
- 程序开发工具,例如编辑器和编译器
- 其他
我们在上面的例子中已经见过了几个 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 的内核结构
文章插图
内核直接坐落在硬件上,内核的主要作用就是 I/O 交互、内存管理和控制 CPU 访问 。上图中还包括了 中断 和 调度器,中断是与设备交互的主要方式 。中断出现时调度器就会发挥作用 。这里的低级代码停止正在运行的进程,将其状态保存在内核进程结构中,并启动驱动程序 。进程调度也会发生在内核完成一些操作并且启动用户进程的时候 。图中的调度器是 dispatcher 。
注意这里的调度器是 dispatcher 而不是 scheduler,这两者是有区别的然后,我们把内核系统分为三部分 。
scheduler 和 dispatcher 都是和进程调度相关的概念,不同的是 scheduler 会从几个进程中随意选取一个进程;而 dispatcher 会给 scheduler 选择的进程分配 CPU 。
- I/O 部分负责与设备进行交互以及执行网络和存储 I/O 操作的所有内核部分 。
推荐阅读
- .so Linux下动态库和静态库(.a) 的区别
- Linux中/etc/passwd配置文件详解
- linux后台开发中避免僵尸进程的方法总结
- 用 testdisk 恢复 Linux 上已删除的文件
- 使用 GNU bc 在 Linux Shell 中进行数学运算
- 谈谈如何学习Linux
- Redis源码剖析之SDS
- 如何获取Linux或者macOS系统版本相关信息
- linux异步IO编程实例分析
- Linux和Windows两种风格的操作系统,创建线程的方式有何不同?