一章初识linux shell
一.什么是linux
1.linux系统可大致划分为四部分:
l Linux内核
l GNU工具组件
l 图形化桌面环境
l 应用软件
在linux系统里,这四部分中的每一部分都扮演着一个特别的角色,但如果将他们分开,每一部分都没太大的作用。
1)探究linux内核
Linux系统的核心是内核,内核控制着计算机系统上的所有硬件和软件,必要时分配硬件,有时需要执行软件。
内核基本负责以下四项主要功能:
l 系统内存管理
l 软件程序管理
l 硬件设备管理
l 文件系统管理
① 系统内存管理
操作系统内核的基本功能之一是内存管理。内核不仅管理服务器上的可用物理内存,还可以创建和 管理虚拟内存(即并不实际存在的内存)。
内核通过硬盘上的存储空间来实现虚拟内存,这块区域称为交换空间。内核不断的在交换空间和实际的物理内存之间反复交换虚拟内存存储单元中的内容。这使得系统一位它拥有比物理内存更多的可用内存。
内存存储单元会被按组分成很多块,这些块称做为页面(page)。内核会将每个内存页面放在物理内存或交换空间。然后内核会维护一个内存页面表。来指明哪些页面位于物理内存内,哪些页面被换到磁盘上。
内核会记录那些内存页面正在使用中,并自动把一段时间未访问的内存页面复制到交换空间区域(称之为换出,swapping out)即使还有可用内存,当程序要访问一个已被换出的内存页面时,内核必须从屋里内存换出另外一个内存页面来给它让春哥空间,然后从交换空间换入请求的内存页面,显然,这个过程要花费时间,并使得运行中进程变慢,只要linux系统在运行,为运行中的程序换出内存页面的过程就不会停歇。
默认情况下,运行在linux系统上的每个进程都有各自的内存页面。进程不能访问其它进程正在使用的内存页面。内核维护着它自己的内存区域。出于安全考虑,用户进程不能访问内核进程使用的内存。
为了方便共享数据,你可以创建一些共享内存页面。多个进程可在同一块共用内存区域进行读取和写入操作。内核负责维护和管理这块共用内存区域并控制每个进程访问这块共享区域。
ipcs命令专门用来查看系统上的当前共享内存页面。
以下是ipcs命令的输出:
每个共享内存段都有个所有者,也就是创建它的用户。每个段也都有标准的linux权限设置来设定其他用户是否可以访问该段。这个键值用来限定其它用户是否可以访问共享内存段。
② 软件程序管理
Linux操作系统称运行中的程序为进程,进程可以在前台运行,将输出显示在屏幕上,也可以在后台运行,隐藏到幕后。内核控制着linux系统如何管理运行在系统上的所有进程。
内核创建了第一个进程(称为init进程)来启动系统上所有其他进程。当内核启动时,他会将init进程加载到虚拟内存中。内核在启动任何其他进程时,都会在虚拟内存中给新进程分配一块专有区域来存储该进程用到的数据和代码。
一些linux发行版使用一个表来管理在系统开机时要自动启动的进程,在linux系统上,这个通常位于专门文件/etc/inittab中
另外一些系统(比如现在流行的ubuntu linux发行版)则采用/etc/init.d目录,将开机时启动或停止某个脚本放在这个目录下,这些脚本通过/etc/rcX.d目录的入口(这些入口实际上就是到/etc/init.d)启动目录中定义好的某些特定类型的进程。
Linu操作系统有7个启动运行级。
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS)
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
③ 硬件设备管理
内核的另一职责是管理硬件设备。任何linux系统需要与之通信的设备,都需要在内核代码中加入其驱动程序代码(driver code)。驱动程序代码相当于应用程序和硬件设备的中间人,允许内核同设备之间交换数据。在linux内核中有两种方法用来插入设备驱动代码:
l 编译进内核的设备驱动代码
l 可插入内核的设备驱动模块
以前,插入设备驱动代码的唯一途径是重新编译内核。每次给系统添加新设备时,你都要重新编译一遍内核代码。随着linux内核越来越多的硬件设备,这个过程也变得越来越低效,最终开发人员提出了内核模块的概念。它允许将驱动代码插入到运行中的内核而无需重新编译内核。同时,当设备不再使用时也可以将模块从内核中移走。这种方式极大简化和推动了硬件设备在linux上的使用。
Linux系统将硬件设备当成特殊的文件,称为设备文件。设备文件有3种不同的分类:
l 字符设备文件:处理数据时每次只能处理一个字符的设备。大多数类型的调制解调器和终端都是作为字符型设备文件创建的。
l 块设备文件:处理数据时每次能处理大块数据的设备,如硬盘
l 网络设备文件:是指采用数据包发送和接收数据的设备,包括各种网卡和一个特殊的回环设备。这个回环设备允许linux系统使用通用的网络编程协议通自己通信。
Linux为系统上的每个设备都创建一种特殊的文件,称为“节点”。与设备的所有通信都是通过设备的节点完成的,每个节点都有一个唯一的数值对,供linux内核标识它。数值对包括一个主设备号和一个次设备号。类似的设备被划分到同样的主设备号下,次设备号用于标识同一主设备号下的某个特殊设备。以下是linux服务器上的一些设备文件的例子:
不同的linux发行版在处理设备时采用不同的设备名。在这个发行版上,sda设备是第一个硬盘,ttyS设备时标准的IBM PC COM端口。这个清单显示了示例linux系统上创建的所有sda设备。虽然并不都在实际中使用,但他们都被创建出来了以备系统管理员不时之需。
第五列是主设备节点号。注意,所有sda设备都拥有统一主设备号8;而所有的ttyS设备都使用4;第六列是次设备节点号。同一个主设备节点号下的每个设备都拥有自己唯一的次设备节点号。
第一列显示了该设备文件的权限。权限的第一个字符表示的是设备文件的类型。注意,硬盘文件都被标记为b(block device,块设备),而COM端口设备文件则呗标记为c(character device字符型设备)
④ 文件系统管理
不同于其他操作系统,linux内核支持多种不同类型的文件系统来从硬盘中读取或写入数据。除了自有的诸多文件系统外,linux还支持从其它操作系统(如windows)所采用的文件系统中读取或写入数据。内核必须在编译时就加入对所有可能用到的文件系统的支持。
Linux系统用来读写数据的标准文件系统:
文件系统 |
描述 |
Ext |
Linux扩展文件系统,最早的linux文件系统 |
Ext2 |
第二扩展文件系统,在ext的基础上提供了更多功能 |
Ext3 |
第三扩展文件系统,支持日志功能 |
Ext4 |
第四扩展文件系统,支持高级日志功能 |
hpfs |
OS/2高性能文件系统 |
jfs |
IBM日志文件系统 |
iso9660 |
ISO9660文件系统(CD-ROM) |
minix |
MINIX文件系统 |
msdos |
微软的FAT16 |
ncp |
Netware文件系统 |
nfs |
网络文件系统 |
ntfs |
支持microsoftNT文件系统 |
proc |
访问系统信息 |
reiseFS |
高级linux文件系统,能提供更好的性能和硬盘恢复功能 |
smb |
支持网络访问的samba SMB文件系统 |
sysv |
较早的unix文件系统 |
ufs |
BSD文件系统 |
umsdos |
贮存在msdos上类unix文件系统 |
vfat |
Windows95文件系统(FAT32) |
XFS |
高性能64位日志文件系统 |
任何供linux服务器访问的硬盘都必须格式化成上表文件系统类型的一种。Linux内核采用虚拟文件系统(virtual file system,VFS)作为和每个文件系统的接口。这为linux内核同任何类型文件系统通信提供了一个标准接口。当每个文件系统被挂载和使用时,VFS将信息都缓存在内存中。
2)GNU工具链
除了由内核来控制硬件设备外,操作系统还需要工具链来执行一些标准功能,比如控制文件和程序。当linus创建linux系统内核时,是没有系统工具链运行其上的。然而他很幸运就在他开发linux内核的同时,有一组人正在互联网上共同努力,模仿unix操作系统开发一系列标准的系统工具。
GNU(GNU代表GNU’S NOT UNIX)开发了一套完整的unix工具链,但没有可以运行它们的内核系统。这些工具链是在开源软件(open source software,OSS)的软件开发理念下开发的。
尽管通常我们将linux内核和GNU工具链的结合体称为linux,你也会在互联网上看到一些linux纯粹主义者将其称为GNU/linux系统来表彰GNU组织为此所作出的贡献。
① 核心GNU工具链
GNU项目一开始主要是为unix系统管理员设计的,用以提供一个类unix环境。这个目标导致这个项目移植了很多unix系统通用的命令行工具。为linux系统提供的一组核心工具被称为coreutils(core utilities)软件包。
GNU coreutils软件包由三部分构成
l 用以处理文件的工具
l 用以操作文本的工具
l 用以管理进程的工具
② Shell
在linux系统上,通常有好几种linux shell可用,不同的shell有不同的特性,有些更利于创建脚本,有些更利于管理进程。所有linux发行版默认的shell基本都是bash shell。Bash shell作为标准unix shell――bourne shell(沿用创建者的名字)的替代,由GNU项目开发的。
GNU/linux shell是个交互式工具。它为用户提供了启动程序,管理文件系统上的文件以及管理运行在linux系统上的进程的途径。Shell的核心是命令行提示符。命令行提示符是shell的交互部分。它允许你输入文本命令,之后解释命令并在内核中执行。
Shell包含了一组内置命令,你可以用这些命令来完成一些操作,如复制和移动文件,显示和终止系统上正运行的程序。Shell也允许你在命令行提示符中输入程序的名称,它会将程序的名称传递给内核以启动它。
Linux shell
shell |
描述 |
Ash |
运行在内存受限制环境中简单的,轻量级shell,但与bash shell完全兼容 |
Korn |
与bourne shell兼容的编程shell,但支持一些高级的编程特性,比如关联数组和浮点运算。 |
Tcsh |
将C语言中的一些元素引入到shell脚本中的shell |
Zsh |
将bash,tcsh和korn的特性引入,同时提供高级编程特性,共享历史文件和主体化提示符的高级shell |
3)linux桌面环境
Linux比较流行的桌面
① X windows系统
有两项基本组件能决定你的视频环境:显卡和显示器。要在电脑上显示绚丽的画面,linux软件就得知道如何来连接它们。Xwindows软件是图形显示的核心元素。Xwindows软件是直接和PC上的显卡以及显示器一起工作的底层软件。它控制着linux程序如何在电脑上显示出绚丽的窗口和画面。
② KDE桌面
KDE(K desktop environment,K桌面环境),它会生成一个类似于windows的图形化桌面环境。KDE桌面允许你吧应用程序图标和文件图标放置在桌面的特定位置上。
GNOME桌面
GNOME(the GNU network object model environment,GNU网络对象模型环境)是另一个流行的linux桌面环境。尽管GNOME决定不再沿用microsoft windows的标准外观,但它还是集成了许多windows用户习惯的功能。
二.Linux发行版
Linux发行版通常分为三种:
l 完整的核心linux发行版
l 专业发行版
l liveCD测试发行版
① 核心linux发行版
核心linux发行版包含有内核,一个或多个图形化桌面环境以及预编译好的几乎所有能见到的linux应用。它提供一站式完整linux安装
发行版 |
描述 |
Slackware |
最早的linux发行版中的一员,在linux极客中比较流行 |
Red hat |
一个主要用于internet服务器的商业发行版 |
Fedora |
从redhat分离出的家用发行版 |
Gentoo |
为高级linux用户设计的发行版,仅包含linux源代码 |
Mandriva |
主要是家用(之前叫mandrake) |
Opensuse |
用于商用和家用的发行版 |
Debian |
在linux专家和商用linux产品中流行的发行版 |
② 专业linux发行版
它们通常基于某个主流发行版,但仅包含主流发行版中一小部分用于某种特定用途的程序。除了提供专业软件外(如仅为商业用户提供的办公应用),专业版还尝试通过自动检测和自动配置来帮助新手安装linux,让安装linux变得供容易。
专业linux发行版
发行版 |
描述 |
Xandros |
一个为新手配置的商业linux发行版 |
SimplyMEPIS |
一个免费的家用linux发行版 |
Ubuntu |
一个免费的学校和家庭用的linux发行版 |
PClinuxOS |
一个免费的家庭和办公用的linux发行版 |
Mint |
一个免费的家庭娱乐用的linux发行版 |
Dyne:bolic |
一个免费的包含音频和MID应用程序的linux发型版 |
Puppy linux |
一个免费的使用与早期PC的小型linux发行版 |
个人学习笔记《linux命令行与shell脚本编程大全》