linux的内核主要由以下模块组成:
- 进程管理
- 定时器
- 中断管理
- 内存管理
- 模块管理
- 虚拟文件系统接口
- 文件系统
- 设备驱动程序
- 进程间通信
- 网络管理
- 系统引导
总体的模型如图所示,Linux内核是计算机硬件和各种应用程序之间的媒介。
Linux是类Unix系统,所以有一套基于Unix的准则和哲学:
- 小即是美
- 让程序只做好一件事
- 可移植性比效率更重要
- 一切皆文件:使用方便;把硬件当做文件处理是安全的。
- 使用shell脚本来提高效率和可移植性。
- 避免使用可定型地下的用户界面
- 所有程序都是数据的过滤器
Linux Shell
Linux shell是用户和Linux内核之间的接口,为用户提供使用操作系统的接口,当Shell向Linux传递命令的时候,内核做出相应的反应。
- shell 是一个用户程序,或者说是一个为用户和系统交互提供的环境
- 从标准输入 设备读取命令的语言解释程序,拥有自己内建的shell命令集,当然shell可以被其他程序调用
- 打开控制台,shell就会运行
- shell不是内核一部分,但是它使用系统内核执行程序,创建文件
- 终端。Linux提供基于GUI的登陆系统。形如XTerm、Gnome、KDE
- 安全shell连接(SSH),可以通过SSH远程登录服务器或工作站访问其shell
- 控制台,基于文本的登陆系统
Shell执行命令的解析方式:
首先shell执行命令时,shell首先检查命令是否是
内部命令,若不是检查是否是一个应用程序(Linux本身程序or商业程序or自由软件),shell在搜索路径里寻找这些程序。如果都没有找到,shell将会显示一条错误信息。如果找到,该命令将被分解为系统调用并传递给Linux内核。
shell下的组合命令:(备注:自己不常用的)
- ctrl + w :删除光标位置前的单词
- ctrl + u :清空行
- ctrl + r :搜索先前使用的命令
- ctrl + c:中止当前指令
- ctrl + d:退出登录shell
- esc + t:调换光标前的两个单词
程序控制结构等。
shell种类
由此看到在Linux里面支持的shell很多。最常用的种类有
Bourne Shell(sh)、C Shell和Korn Shell。
Bourne-Again Shell(bash)是 Linux系统中最常用的Shell。它是Bourne Shell的扩展,与Bourne Shell完全向后兼容,并且在Bourne Shell的基础上增加、增强了很多特性,具有很多特色,可以提供如命令补全、命令编辑和命令历史等功能。
Korn Shell(ksh)集合了C Shell和Bourne Shell的优点,并和Bourne Shell完全兼容。Linux系统提供了ksh的扩展,它支持任务控制,可以在命令行上挂起、后台执行、唤醒或终止程序。
如此众多的shell,系统如何选择呢?
答:用户登录到Linux系统时,由/etc/passwd这个文件决定用户将要使用哪种Shell。查看当前账户shell:echo $SHELL
S hell脚本
shell脚本就是早期dos的.bat文件。让使用者可以一个操作执行多条命令。提供了数组、循环、条件以及逻辑判断等重要功能,让使用者可以直接以Shell来写程序。
Shell脚本是利用Shell的功能所写的一个程序,这个程序是
纯文本文件格式,将一些Shell的语法与指令写在里面,然后用
正则表达式、
管道命令以及
数据流重定向等功能,以实现我们所需要的功能。
Shell脚本一般由以下几部分构成:
- Shell关键字——例如if…else,for do…done。
- Shell命令——例如export,echo,exit,pwd,return。
- Linux命令——例如date,rm,mkdir。
- 文本处理功能——例如awk,cut,sed,grep。
- 函数——通过函数把一些常用的功能放在一起。例如,/etc/init.d目录中的大部分或全部系统Shell脚本所使用的函数都包含在文件/etc/init.d/functions中。
- 控制流语句——例如if…then…else或执行重复操作的Shell循环。
为什么使用Shell脚本
在Linux机器启动时,它执行/etc/rc.d目录中的Shell脚本来加载系统配置和运行服务。
- 使用简单;
- 节省时间。可以把冗长的重复的一连串命令合并成一条简单的命令;
- 可以创建你自己的自动化工具和应用程序;
- 使系统管理任务自动化;
- 因为脚本经过很好的测试,所以使用脚本做类似配置服务或系统管理任务时,发生错误的机会将大大减少。
尝试写一个脚本:
#!/bin/bash
#My first script
ls -l .*
脚本的第一行:告诉shell使用什么程序解释脚本。
本例中是
/bin/bash。其他脚本语言中(perl,Python)也使用该机制。
脚本第二行:注释。每行出现“#”符号都被bash忽视。
脚本最后一行:ls命令。
注意:默认情况下,Linux不允许文件执行。因此需要chmod命令增加“x”属性。2个方式 数字和字符模式。(755 a+x)
Shell在Linux环境的角色
Linux环境的构成部分:
- 内核——Linux操作系统的核心。
- Shell——为用户和内核提供一个交互的接口。
- 终端模拟器——它允许用户输入命令并在屏幕上回显命令的运行结果。
- Linux桌面和窗口管理器——Linux桌面是各种软件应用程序的集合。它包括文件管理器、窗口管理器、终端模拟器等等
用户登录时Bash将会使用以下初始化文件和启动脚本:
- /etc/profile——系统级的初始化文件,定义了一些环境变量,由登录Shell调用执行。
- /etc/bash.bashrc或/etc/bashrc——其文件名根据不同的Linux发行版而异,每个交互式Shell的系统级的启动脚本,定义了一些函数和别名。
- /etc/bash.logout——系统级的登录Shell清理脚本,当登录Shell退出时执行。部分Linux发行版默认是没有此文件。
- $HOME/.bash_profile、$HOME/.bash_login、$HOME/.profile——用户个人初始化脚本,由登录Shell调用执行。这三个脚本只有一个会被执行,按照此顺序查找,第一个存在的将被执行。
- $HOME/.bashrc——用户个人的每个交互式Shell的启动脚本。
- $HOME/.bash_logout——用户个人的登录Shell清理脚本,当登录Shell退出时执行。
- $HOME/.inputrc——用户个人的由readline使用的启动脚本,定义了处理某些情况下的键盘映射
具体细分的话,有两种情况:
- 当用户登录时,登录Shell会调用如下脚本:
- /etc/profile——当用户在运行级别3登录系统时首先运行。
- /etc/profile.d——当/etc/profile运行时,会调用该目录下的一些脚本。
- $HOME/.bash_profile、$HOME/.bash_login和$HOME/.profile——在/etc/profile运行后,第一个存在的被运行。
- $HOME/.bashrc——上述脚本的中一个运行后即调用此脚本。
- /etc/bashrc或/etc/bash.bashrc——由$HOME/.bashrc调用运行
- 当一个交互式的非登录Shell启动时,Bash将读取并运行如下脚本:
- $HOME/.bashrc——如果此文件存在即被运行。
- /etc/bashrc——将被$HOME/.bashrc调用运行。
- /etc/profile.d——此目录下的脚本将被/etc/bashrc或/etc/bash.bashrc调用运行。
Bash启动脚本主要设置的环境有:
- 设置环境变量PATH和PS1(我们将在2.3.1小节中介绍这两个变量);
- 通过变量EDITOR设置默认的文本编辑器;
- 设置默认的umask(文件或目录的权限属性);
- 覆盖或移除不想要的变量或别名;
- 设置别名;
- 加载函数。
------------------------------------------------------
<未完>