`

《Linux命令行与shell脚本编程大全》 第一、二章 学习笔记

 
阅读更多

第一章:初识Linux shell

Linux内核负责以下4个主要功能:

1.系统内存管理

2.软件程序管理

3.硬件设备管理

4.文件系统管理

 

 

1.系统内存管理

内核不仅管理服务器上的可用物理内存,还可以创建和管理虚拟内存

内核通过硬盘上的存储空间来实现虚拟内存,这块区域称为交换空间(swap space)

 

内核不断的在交换空间和实际物理内存之间反复交换虚拟内存存储单元的内容 (这使得系统以为它拥有比物理内存更多的可用内存)

下面是书中的图片(实际上和书中有点出入,为了省事),让我有些不解

关于上面的图让我有些迷惑,所以我就把虚拟内存和交换空间作为关键词查了一下

中文wiki上的解释:虚拟内存 (查看:Linux操作系统下虚拟内存实现)

也就是说,交换空间实现了虚拟内存。虚拟内存存在于交换空间之上,我的理解是这样的

 

 

内存存储单元会被按组分成很多块,这些块称为页面(page)

内核会将每个内存页面放在物理内存或者交换空间。内核会维护一个内存页面表,指明那些页面位于物理内存,哪些页面位于交换空间

 

 

内核会记录哪些页面正在使用,并自动把一段时间未访问的内存页面复制到交换空间区域(称之为换出,swapping out),即使还有可用内存

当程序要访问一个已被唤出的内存页面时,内核必须从物理内存唤出另外一个内存页面让出空间,然后从交换空间换入请求的页面(swapping in)。 这个过程使得运行中的进程变慢

 

 

 

查看/proc/meminfo文件可以看到虚拟内存的当前状态

cat /proc/meminfo

MemTotal:        3954168 kB

MemFree:          454136 kB

Buffers:           78916 kB

Cached:          1120528 kB

SwapCached:        17144 kB

Active:          1879656 kB

Inactive:        1367204 kB

Active(anon):    1569708 kB

Inactive(anon):   681008 kB

Active(file):     309948 kB

Inactive(file):   686196 kB

Unevictable:          52 kB

Mlocked:              52 kB

SwapTotal:       2899696 kB

SwapFree:        2844256 kB

……

 

 

MemTotal总内存

MemFree空闲内存

SwapTotal虚拟内存

 

 

 

默认情况下,运行在Linux系统上的每个进程都有各自的内存页面,进程不能访问其他进程正在使用的内存页面

用户进程不能访问内核进程使用的内存

 

 

 

为了方便共享数据,可以创建一些共享内存页面,多个进程可在同一块共用内存区域进行读取和写入操作

内核负责维护和管理这块共用内存区域并控制每个进程访问这块共享区域

 

ipcs

作用:查看系统上的当前内存共享页面

$ ipcs -m

------ Shared Memory Segments --------

key        shmid      owner      perms      bytes      nattch     status      

0x00000000 65536      su1216 600        393216     2          dest         

0x00000000 98305      su1216 600        393216     2          dest         

0x00000000 131074     su1216 600        393216     2          dest         

0x00000000 163843     su1216 600        393216     2          dest         

0x00000000 196612     su1216 600        393216     2          dest         

0x00000000 229381     su1216 600        393216     2          dest         

……

 

每个共享内存段都有个所有者,是创建它的用户

每个段也都有标准的Linux权限设置来设定其他用户是否可以访问该段

 

 

 

 

2.软件程序管理

一些Linux发行版使用一个表来管理在系统开机时要启动的进程。

在Linux上这个表通常位于/etc/inittab (见#1

另一些系统(如Ubuntu发行版)则采用/etc/init.d目录 (见#2 ),将开机时启动或停止某个应用的脚本放到此目录下

这些脚本通过/etc/rcX.d目录下的入口启动(其中X表示运行级别,run level) (见#1 )。这些入口实际是到/etc/init.d的符号链接(见软链接,soft link #3

 

 

3.硬件设备管理

Linux中两种方法用来插入设备驱动代码

1.编译进内核的设备驱动代码

2.可插入内核的设备驱动模块

 

Linux系统将硬件设备当成特殊文件,称为设备文件 (见#4 ,这里只提到了下面的前两种)

设备文件有3种

字符型设备文件

块设备文件

网络设备文件

 

网络设备是指采用数据包发送和接收数据的设备,包括各种网卡和一个特殊的回环设备。这个回环设备允许Linux系统使用通用的网络编程协议同自己通信

 

 

 

Linux为每个设备都创建一种特殊的文件称为“节点”。与设备的所有通信都是通过设备节点完成的。每个节点都有一个唯一的数值对作为标识

数值对包括一个主设备号和一个次设备号

类似的设备具有同样的主设备号,次设备号用于标识同一主设备号下的某个特殊设备

 

$ cd /dev; ls -al sda* ttyS*

brw-rw---- 1 root disk    8,  0 2012-11-22 09:33 sda

brw-rw---- 1 root disk    8,  1 2012-11-22 09:33 sda1

brw-rw---- 1 root disk    8,  2 2012-11-22 09:33 sda2

brw-rw---- 1 root disk    8,  5 2012-11-22 09:33 sda5

brw-rw---- 1 root disk    8,  6 2012-11-22 09:33 sda6

brw-rw---- 1 root disk    8,  7 2012-11-22 09:33 sda7

crw-rw---- 1 root dialout 4, 64 2012-11-22 09:33 ttyS0

crw-rw---- 1 root dialout 4, 65 2012-11-22 09:33 ttyS1

crw-rw---- 1 root dialout 4, 66 2012-11-22 09:33 ttyS2

crw-rw---- 1 root dialout 4, 67 2012-11-22 09:33 ttyS3

(见#5

(其中第5列是主设备号,第6列是次设备号)

 

 

 

4.文件系统管理

Linux支持多种文件系统(自身的和其他操作系统的)来从硬盘中读取或写入数据

 

Linux系统用来读写数据的标准文件系统

文件系统 描述
ext Linux扩展文件系统,最早的Linux文件系统
ext2 第二扩展文件系统,在ext的基础上提供了更多功能
ext3 第三扩展文件系统,支持日志功能
ext4 第四扩展文件系统,支持高级日志功能
hpfs OS/2高性能文件系统
jfs IBM日志文件系统
iso9660 ISO 9660文件系统(CD-ROM)
minix MINIX文件系统
msdos 微软的FAT16
ncp Netware文件系统
nfs 网络文件系统
ntfs 支持Microsoft NT文件系统
proc 访问系统信息
ReiserFS 高级Linux文件系统,能提供更好的性能和硬盘恢复功能
smb 支持网络访问的Samba SMB文件系统
sysv 较早期的Unix文件系统
ufs BSD文件系统
umsdos 贮存在msdos上的类Unix文件系统
vfat Window 95文件系统(FAT32)
XFS 高性能64位日志文件系统

任何供Linux服务器访问的硬盘都必须格式化成上面文件系统类型的一种

 

 

Linux内核采用虚拟文件系统(Virtual File System,VFS)作为和每个文件系统交互的接口

这为Linux内核同任何文件系统通信提供了标准接口。当每个文件系统被挂载和使用时,VFS将信息都缓存到内存中

 

 

 

Linux发行版

Linux发行版通常可以归类为以下3种

完整的核心Linux发行版

专业发行版

LiveCD测试发行版

 

 

 

核心Linux发行版

核心Linux发行版含有内核、一个或多个图形化桌面环境以及预编译好的几乎所有能见到的Linux应用,它提供了一站式的完整Linux安装

下面是一些较流行的核心Linux发行版

发行版 描述
Slackware 最早的Linux发行版中的一员,在Linux极客中比较流行
Red Hat 一个主要用于Internet服务器的商业发行版
Fedora 从Red Hat分离出的家用发行版
Gentoo 为高级Linux用户设计的发行版,仅包含Linux源代码
Mandriva 主要是家用(之前叫Mandrake)
openSuSE 用于商用和家用的发行版
Debian 在Linux专家和商用Linux产品中流行的发行版

 

 

 

专业Linux发行版

除了提供专业软件之外,专业发行版还尝试通过自动检测和自动配置来帮助新手安装Linux

下面是一小部分专业Linux发行版以及他们的专长

发行版 描述
Xandros 一个为新手配置的商业Linux发行版
SimplyMEPIS 一个免费的家用Linux发行版
Ubuntu 一个免费的学校和家庭用的Linux发行版
PCLinuxOS 一个免费的家庭和办公用的Linux发行版
Mint 一个免费的家庭娱乐用的Linux发行版
dyne:bolic 一个免费的包含音频和MIDI应用程序的Linux发行版
Puppy Linux 一个免费的使用于早期PC的小型Linux发行版

 

 

 


Linux LiveCD

可引导启动的Linux发行版,通过CD启动PC而无需在硬盘上安装任何东西

缺点:

运行速度慢

无法将数据写入cd

对Linux的更改在重启之后全部失效

发行版 描述
Knoppix 一个德语Linux发行版,最早的LiveCD Linux
SimplyMEPIS 为家庭用户设计的Linux发行版
PCLinuxOS 成熟的LiveCD上的Linux发行版
Ubuntu 为多种语言设计的世界级项目
Slax 基于Slackware Linux的LiveCD Linux
Puppy Linux 为早期PC设计的全功能Linux

 

 

 

 

 

 

 

第二章:走进shell

 

哑终端(dumb terminal):通常是由通信电缆连接到Unix系统上的显示器和键盘(后来出现鼠标)。这个简单的组合提供了向Unix系统输入文本数据和显示文本结果的一条捷径

 

 

字符集

字符集是一组二进制命令

 

下面列举一些常见字符集,具体介绍请点击其中的链接(大部分为英文wiki,中文wiki不给力啊)

ASCII :美国信息交换标准码

ISO-8859-1 (Latin-1):ASCII字符集的一个扩展,ISO字符集,采用8位码来支持标准ASCII字符,以及大多数西欧语言中的特殊外语字符

ISO-8859-2 :ISO字符集,支持东欧语言字符

ISO-8859-6 :ISO字符集,支持阿拉伯语字符

ISO-8859-7 :ISO字符集,支持希腊语字符

ISO-8859-8 :ISO字符集,支持希伯来语字符

ISO-10646Unicode ):ISO双字节字符集,包含大部分英语和非英语语言的代码。这个字符集包含所有ISO-8869-x系列字符集中定义的所有字符。

英语国家最常用的字符集为Latin-1

 

 

 

控制码

控制码是未在字符集中使用的特殊代码,它会发出信号给终端来执行特殊的非打印操作 (回车、换行、方向键、翻页键……)

控制码也可以用来控制哑终端的通信功能 (代码XON为开启终端数据传输,XOFF为停止到终端的数据传输)

 

 

 

块模式图形

DEC VT100终端是第一个支持完整ANSI字符集的终端

ANSI字符集包含的代码不但允许显示器显示文本,而且允许显示基本的图形符号,比如:框、线和块

 

 

 

矢量图形

矢量图形是基于DEC的块模式设计的,它将所有的屏幕图像(包括字符)变成一系列的线段(矢量)(这里应该是向量吧?)

由于矢量图不用点创建线,它能用相比其他基于点的图形终端更高的精度来绘制几何形状

 

 

 

 

显示缓冲

滚动区域(scroll region):在主显示窗口中翻屏时缓冲数据(该数据称为历史)。滚动区域是终端拥有的内存数量,它使得终端能在翻屏时“记住”数据

替代屏幕(alternative screen):控制码用来发送信号给终端,向替代屏幕而不是当前显示屏幕写数据,那部分数据会保留在内存中。另一个控制码会发信号给终端,几乎立即在普通屏幕数据和替代屏幕数据之间切换显示器显示

 

 

 

键盘

中断(Break):给主机发送一串0,通常用来中断shell中当前正在执行的程序

滚动锁定(Scroll Lock):也叫禁止滚动(No Scroll)。它会停止显示上的输出

重复(Repeat):按下此键和其他键时,它会让终端反复地向主机发送另一个键的键值

(其他见P24)

 

 

 

terminfo

P25,不打算细读,参看之前的简略笔记(#1

 

 

 

一些终端介绍,这里就不细记录了,需要的时候翻阅书本吧

xterm终端(P29)

Konsole终端(P36)

GNOME Terminal(P43)

 

 

 

 

 

 

下面为笔记中#number的链接列表

1.《Unix & Linux 大学教程》 - 第五、六章 学习笔记  GUI:图形用户界面 & Unix工作环境

2.《Unix & Linux 大学教程》 - 第二十六章(二) 学习笔记  进程和作业控制

3.《Unix & Linux 大学教程》 - 第二十五章 学习笔记  文件操作

4.《Unix & Linux 大学教程》 - 第二十四章 学习笔记  目录操作

5.《Unix & Linux 大学教程》 - 第二十三章 学习笔记  Unix文件系统

6.《Unix & Linux 大学教程》 - 第七章 Unix键盘使用

 

分享到:
评论

相关推荐

    linux运维学习笔记:Shell脚本调试.pdf

    本文档是一份针对Shell脚本调试的学习笔记,详细介绍了几种常见的调试方法和工具,帮助运维人员快速定位并修复脚本中的问题。 首先,需要了解的是Linux与Windows在文本文件行结束标志上的差异。在Linux系统中,文本...

    Linux服务器Shell编程学习笔记linux操作系统 电脑资料.docx

    Shell脚本编程允许用户创建自定义的命令行工具,实现自动化任务处理,提高工作效率。在这个学习笔记中,我们将深入探讨如何编写和理解Shell脚本。 首先,Shell是Linux操作系统中的一个用户界面,它作为用户与操作...

    unix shell编程第三版笔记

    "Unix Shell编程第三版笔记"是铁道出版社出版的一本教材,它深入浅出地讲解了Unix Shell编程的基础和高级技巧。这份笔记涵盖了从基本的命令行操作到复杂的脚本编写,帮助学习者掌握这一强大的自动化工具。 Unix ...

    Linux_shell编程学习笔记

    Linux Shell编程是Linux系统管理与自动化任务中的重要一环,主要通过编写脚本来实现对操作系统进行交互和控制。本文将详细解析Linux Shell编程中的几个关键概念:正则表达式、find命令、grep命令以及sed命令。 1. *...

    Linux Shell从入门到精通学习笔记

    3. **第一个Shell脚本**:创建一个简单的Shell脚本,例如`#!/bin/bash`开头声明解释器,接着编写命令,保存为`.sh`文件,通过`chmod +x scriptname.sh`赋予执行权限,然后`./scriptname.sh`执行脚本。 4. **Shell...

    韩顺平linux学习笔记,很不错的.pdf

    学习Linux的推荐书籍有《鸟哥的Linux私房菜》、《Linux命令行与shell脚本编程大全》、《Linux系统管理技术手册》等,这些书籍可以帮助读者深入理解Linux系统,并提供丰富的实践指导。 6. Linux视频教程第1讲:基础...

    学习笔记-基础Shell编程

    ### 学习笔记-基础Shell编程 #### 一、Shell编程概述 Shell编程是指利用Shell命令语言编写脚本来实现特定功能的过程。Shell不仅是Linux操作系统下的命令行解释器,还是一种强大的脚本语言,广泛应用于自动化任务...

    Linux学习笔记PDF文档.pdf

    笔记还将介绍shell脚本编程,这是一种自动化任务的有力工具。读者将学习如何编写简单的bash脚本,包括变量、条件语句、循环和函数。通过编写脚本,用户可以提高工作效率,自动化日常任务。 此外,权限和用户管理是...

    Shell 学习笔记 word ppt

    Shell学习笔记主要涵盖的是在Unix/Linux环境中使用Shell脚本来进行自动化任务处理和系统管理的知识。Shell作为操作系统与用户交互的接口,提供了强大的命令行工具和脚本编程能力,是IT行业中不可或缺的基础技能之一...

    shell脚本笔记

    4. 参数传递:脚本执行时,可以通过位置参数访问传入的值,如`$1`、`$2`分别代表第一个和第二个参数。 三、流程控制与错误处理 1. `break`和`continue`:跳出循环或跳过当前迭代。 2. `set -e`:开启脚本的错误...

    总结搜集的shell脚本学习笔记(完结篇).pdf

    ### Shell脚本编程知识点概述 #### 一、预备知识与基本概念 在开始Shell脚本文档的学习之前,首先需要理解Shell脚本的基本概念及其在Linux/Unix环境中的作用。Shell是一种命令行解释器,用于执行用户输入的命令,...

    Linux学习笔记.docx

    Linux 学习笔记是 Linux 学习的详细笔记整理,分九章,涵盖了 vim 和 vi 编辑器、实用指令、组管理和权限管理、crond 任务调度、Linux 磁盘分区挂载、网络配置、进程管理、服务管理、shell 编程等内容。 1. vi 和 ...

    尚观linux 学习笔记 1

    1. "第三章、Linux的安装和编译.doc" - 这一部分主要讲解Linux系统的安装过程,包括常见的发行版如Ubuntu、CentOS等的选择,以及如何进行硬盘分区、网络安装、图形化安装和命令行安装等。同时,它可能还会涵盖源代码...

    Linux unixShellsprograming学习笔记.doc

    - 用户登录时,Shell会解析命令行,检查第一个单词是否为内置命令或可执行程序。 - 如果适用,进行历史替换,更新命令历史。 - 解析引号,处理别名和函数定义。 - 设置重定向、后台进程和管道。 了解这些基础知识后...

    Shell从入门到工作几百页笔记.pdf

    《Shell从入门到精通》这份笔记详尽地介绍了Shell脚本语言的基础知识和实战应用,旨在帮助读者快速掌握Shell编程,提升日常运维工作的效率。Shell是Linux系统中的一个命令解释器,同时也是一种强大的脚本语言,它...

    Linux学习笔记.pdf,linux详解,LINUX

    八、shell脚本编程 编写shell脚本可以自动化重复任务,例如: - 变量、运算符和条件判断。 - 函数定义。 - 循环结构。 - 输入输出重定向。 九、系统管理 - sysctl:调整系统内核参数。 - logrotate:日志文件轮换。...

    Redhat Enterprise linux5学习笔记

    ### Redhat Enterprise Linux 5 学习笔记知识点总结 #### 一、Linux系统介绍与安装 **1. Linux的历史背景与发展** - **UNIX系统的诞生**:1970年,贝尔实验室的两位科学家发明了UNIX系统,这标志着现代操作系统的...

    yzy第一次学习笔记作业

    * Linux 的 Shell 编程:Shell 是 Linux 的命令行接口,提供了交互式的命令行环境 三、Linux 文件系统 * 文件类型:普通文件、目录文件、链接文件、设备文件等 * 文件权限:所有者、群组、其他用户的读写执行权限 ...

    linux知识学习笔记

    ### Linux知识学习笔记 #### 一、Linux操作系统概述 Linux是一种开源、免费的类Unix操作系统,自1991年由芬兰学生Linus Torvalds创建以来,迅速在全球范围内获得了广泛的关注和支持。它不仅具备强大的稳定性,还...

Global site tag (gtag.js) - Google Analytics