第1章 初识Linux shell

本章将带你逐步了解什么是Linux,并介绍命令行和shell在Linux整体架构中的位置。

1.1 什么是Linux
  Linux可划分为四个部分:Linux内核、GNU工具、图形化桌面环境、应用软件。尽管通常将Linux内核和GNU工具的结合体称为Linux,但Linux纯粹主义者将其称为GNU/Linux系统。
  GNU工具是用来执行一些标准功能的工具。GNU/Linux shell是一种特殊的交互式工具。为用户提供了启动程序、管理文件、管理进程的途径(shell中包含了一组内部命令)。

1.1.1 深入探究Linux内核
  内核主要负责以下四种共能:
  (1)系统内存管理:以页面(page)最为内存单元;物理内存、虚拟内存、交换空间、内存的换入换出。

  (2)软件程序管理:进程管理;第一个进程为Init进程(pid=1)。

  (3)硬件设备管理:任何Linux系统需要与之通信的设备,都需要在内核代码中加入其驱动程序代码。驱动程序代码相当于应用程序和硬件设备的中间人,允许内核与设备之间交换数据。在Linux内核中有两种方法用于插入设备驱动代码:
   ①编译进内核的设备驱动代码:在之前的Linux系统,每次给系统添加新设备都需要重新编译一遍内核代码,较为低效。
   ②可插入内核的设备驱动模块:提出内核模块的概念。允许将驱动代码从正在运行中的内核中插入或移走,而无需重新编译内核。

   Linux系统将硬件设备当成是特殊的文件,称为设备文件。设备文件分为三类:
   ①字符型设备文件:每次只能处理一个字符的设备。大多数类型的调制解调器和终端都是作为字符型设备文件创建的。
   ②块设备文件:每次能处理大块数据的设备,比如硬盘。
   ③网络设备文件:采用数据包发送和接收数据的设备,包括各种网卡和一个特殊的回环设备。这个回环设备允许Linux系统使用常见的网络编程协议同自身通信。

   Linux为系统上的每一个设备都创建一种称为节点的特殊文件。与设备的所有通信都是通过设备节点完成。每个节点都有一个唯一的数值对供Linux内核标识它。数值对包括一个主设备号和一个次设备号。类似的设备被划分到同样的主设备号下。次设备号用于标识主设备组下的某个特定设备。

  (4)文件系统管理
   ①不同于其他一些操作系统,Linux内核支持不同类型的文件系统从硬盘中读写数据。除了自有的诸多文件系统外,Linux还支持从其他操作系统(比如Microsoft Windows)采用的文件系统中读写数据。内核必须在编译时就加入对所有可能用到的文件系统的支持。
   ②Linux采用虚拟文件系统(Virtual File System, VFS)作为和每个文件系统交互的接口。这为Linux内核同任何类型文件系统通信提供了一个标准接口。当每个文件系统都被挂载和使用时,VFS将信息都缓存在内存中。
   ③本书第六页列出了Linux系统用来读写数据的标准文件系统。Linux服务器所访问的所有硬盘都必须格式化成该表所列文件系统类型中的一种。

1.1.2 GNU工具
  除了由内核控制硬件设备外,操作系统还需要工具来执行一些标准功能,比如控制文件和程序。GUN组织(GNU是GNU'S Not Unix的缩写)开发了一套完整的Unix工具。将Linux内核和GNU操作系统工具整合起来,就产生了一款完整的、功能丰富的免费操作系统。尽管将Linux内核和GNU工具的结合体称为Linux,但Linux纯粹主义者将其称为GNU/Linux系统。
  (1)核心GNU工具
   GNU项目的主旨在于为Unix系统管理员设计一套类似于Unix的环境。这个目标促使该项目移植了很多常见的Unix系统命令行工具。供Linux系统使用的这组核心工具被称为coreutils(core utilities)软件包。GNU coreutils软件包由三部分组成:
   ①用以处理文件的工具
   ②用以操作文本的工具
   ③用以管理进程的工具
   这三组主要工具中的每一组都包含一些对Linux系统管理员和程序员至关重要的工具。本书将详细介绍GNU coreutils软件包中包含的所有工具。

  (2)shell
   GNU/Linux shell是一种特殊的交互式工具。它为用户提供了启动程序、管理文件系统中的文件以及运行在Linux系统上的进程的途径。
   ①shell的核心是命令行提示符。命令行提示符是shell负责交互的部分。它允许你输入文本命令,然后解释命令,明在内核中执行。
   ②shell包含了一组内部命令,用这些命令可以完成一些标准操作。shell也允许你在命令行提示符中输入程序的名称(即外部命令),它会将程序名传递给内核以启动它。
   ③可以将多个shell命令放入文件中作为程序执行。这些文件被称作shell脚本。在命令行中执行的任何命令都可以放进一个shell脚本中作为一组命令去执行。

   在大多数Linux发行版中,通常有好几种Linux shell可用,但通常都是选择bash shell作为默认shell。
   ①bash:bash shell是由GNU项目开发,被当作标准Unix shell(Bourne shell,以创作者名字命名)的替代品。所有的Linux发行版默认的shell都是bash shell。bash shell全称是一个文字游戏:Bourne again shell。
   ②ash:一种运行在内存受限环境中简单的轻量级shell,但与bash shell完全兼容。
   ③korn:一种与Bourne shell兼容的编程shell,但支持如关联数组和浮点运算等一些高级编程特性。
   ④tcsh:一种将C语言中的一些元素引入到shell脚本中的shell。
   ⑤zsh:一种结合了bash、tcsh和korn的特性,同时提供给高级编程特性,共享历史文件和主题化提示符的高级shell。

  补充:Linux和GNU的关系
   ①Unix系统被发明之后,后来开始收费和商业闭源了。于是一个叫RMS的大叔发起GNU计划,模仿Unix的界面和使用方式,从头做一个开源的版本。然后他自己做了编辑器Emacs和编译器GCC。GNU是一个计划或者叫运动。在这个旗帜下成立了FSF,起草了GPL等。接下来大家纷纷在GNU计划下做了很多的工作和项目,基本实现了当初的计划。包括核心的gcc和glibc。
   ②但是GNU系统缺少操作系统内核。原定的内核叫HURD,一直完不成。同时BSD(一种UNIX发行版)陷入版权纠纷,x86 平台开发暂停。然后一个叫 Linus 的同学为了在PC上运行Unix,在Minix的启发下,开发了Linux。注意,Linux 只是一个系统内核,系统启动之后使用的仍然是gcc和bash等软件。Linus 在发布 Linux 的时候选择了GPL,因此符合GNU的宗旨。
   ③最后,大家突然发现,这玩意不正好是GNU计划缺的么。于是合在一起打包发布叫GNU/Linux。然后大家念着念着省掉了前面部分,变成了Linux系统。实际上Debian,RedHat等Linux发行版中内核只占了很小一部分容量。

1.1.3 Linux桌面环境
  在Linux早期(20世纪90年代初期),能用的只有一个简单的Linux操作系统文本界面。随着Microsoft Windows的普及,电脑用户对图形化的桌面环境需求增加,推动了OSS社区的更所开发活动,Linux图形化桌面环境应运而生。
  (1)Linux一些比较流行的桌面:X windows系统、KDE桌面、GNOME桌面、Unity桌面。

  (2)图形化桌面环境的弊端在于它们要占用相当一部分系统管理资源来保证正常运行。运行KED或GNOME桌面要占用的内存资源和微软最新桌面环境旗鼓相当。下面介绍一些可在配置较低的PC和笔记本上运行的轻量级Linux图形化桌面环境。
   ①Fluxbox:一个没有面板的轻型桌面,仅有一个可用来启动程序的弹出式菜单。
   ②Xfce:和KDE很像的一个桌面,但少了很多图像以适应内存环境。
   ③JWM:Joe的窗口管理器(Joe's Window Manager),非常适用于低内存低硬盘空间环境的超轻型桌面。
   ④Fvwm:支持如虚拟桌面和面板等高级桌面功能,但能够在低内存环境中运行。
   ⑤fvwm95:从fvwm衍生而来,但是看起来更像是Windows 95桌面。

1.2 Linux发行版
  将完整的Linux系统包称为发行版。不同的Linux发行版通常归为3类:完整的核心Linux发行版、特定用途的发行版、LiveCD测试发行版。

  (1)核心Linux发行版
   核心Linux发行版含有内核、一个或多个图形化桌面环境以及预编译好的几乎所有能见到的Linux应用。它提供了一站式的完整的Linux安装。为了照顾到Linux用户的所有使用场景,单个发行版必须包含很多应用软件。从高端的Internet数据库服务器到常见的游戏,可谓应有尽有。一个完整的发行版通常至少需要4张CD。常见的核心Linux发行版:
   ①Slackware:最早的Linux发行版中的一员,在Linux极客中比较流行。
   ②Red Hat:主要用于Internet服务器的商业发行版。
   ③Fedora:从Red Hat分离出的家用发行版。
   ④Gentoo:为高级Linux用户设计的发行版,仅包含Linux源代码。
   ⑤openSUSE:用于商用和家用的发行版。
   ⑥Debian:在Linux专用和商用Linux产品中流行的发行版。
   尽管发行版中的大量可选配置对Linux极客来说是件好事,但对新手来说简直是一场噩梦。多数发行版会在安装过程中询问一系列问题,以决定哪些应用要默认加载、PC上连接了哪些硬件以及怎样配置硬件设备。

  (2)特定用途的Linux发行版
   通常基于某个主流发行版,但仅包含主流发行版中一小部分用于某种特定用途的应用程序。除了提供特定软件外(比如仅为商业用户提供的办公应用),定制化发行版尝试通过自动检测和自动配置常见硬件来帮助新手安装Linux。这使得Linux安装过程变得简单许多。特定用途的Linux发行版:
   ①CentOS:一款基于Red Hat企业版Linux源代码构建的免费发行版。
   ②Ubuntu:一款用于学校和家庭的免费发行版。
   ③PCLinuxOS:一款用于家庭和办公的免费发行版。
   ④Mint:一款用于家庭娱乐的免费发行版。
   ⑤dyne:bolic :一款用于音频和MID应用的免费发行版。
   ⑥Puppy Linux:一款适用于老旧PC的小型免费发行版。
   许多特定用途的Linux发行版都是基于Debian Linux。它们使用和Debian一样的安装文件,但仅打包了完整Debian系统中的一小部分。

  (3)Linux LiveCD
   多数现代PC都能从CD启动,而不是必须从标准硬盘启动。基于这点,一些Linux发行版创建了含有Linux样本系统(称为Linux LiveCD)的可引导CD。它无需安装就可以看到Linux系统是什么样的,这是一个不弄乱PC就体验各种Linux发行版的绝妙办法。一些可用的流行Linux LiveCD:
   ①Knoppix:来自德国的一款Linux发行版,也是最早的LiveCD Linux。
   ②PCLinuxOS:一款成熟的LiveCD形式的Linux发行版。
   ③Ubuntu:为多种语言设计的世界级Linux项目。
   ④Slax:基于Slackware Linux的一款LiveCD Linux。
   ⑤Puppy Linux:为老旧PC设计的一款全功能Linux。

   由于要从CD上访问所有东西,应用程序会运行得更慢,而如果再搭配上陈旧缓慢的PC和光驱,那更是慢上加慢。还有,由于无法向CD写入数据,对Linux系统作的任何修改都会在重启后消失。不过,有一些Linux LiveCD的改进帮助解决了上述一些问题。这些改动包括:
   ①能够将CD上的Linux系统文件复制到内存中。
   ②能够将CD上的Linux系统文件复制到硬盘上。
   ③能在U盘上存储系统设置。
   ④能在U盘上存储用户设置。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值