<<linux命令行与shell脚本编程大全>>学习笔记(1)

一章初识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脚本编程大全》

时间: 2024-08-02 11:03:03

<<linux命令行与shell脚本编程大全>>学习笔记(1)的相关文章

Java性能调优笔记

Java性能调优笔记 调优步骤:衡量系统现状.设定调优目标.寻找性能瓶颈.性能调优.衡量是否到达目标(如果未到达目标,需重新寻找性能瓶颈).性能调优结束. 寻找性能瓶颈 性能瓶颈的表象:资源消耗过多.外部处理系统的性能不足.资源消耗不多但程序的响应速度却仍达不到要求. 资源消耗:CPU.文件IO.网络IO.内存. 外部处理系统的性能不足:所调用的其他系统提供的功能或数据库操作的响应速度不够. 资源消耗不多但程序的响应速度却仍达不到要求:程序代码运行效率不够高.未充分使用资源.程序结构不合理. C

JAVA性能调优-在循环条件中不要使用表达式

1.JAVA性能调优-在循环条件中不要使用表达式 我们在学习JAVA性能调优的时候,经常能看到这一的一段话:在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. import java.util.vector; class cel { void method(vector vector) { for (int i= 0; i < vector.size (); i++)  //violation ; //... } } 更正:

java 性能调优工具

1.jstack 用法jstack [option] pid -l long listings,会打印出额外的锁信息,在发生死锁时可以用jstack -l pid来观察锁持有情况 -m mixed mode,不仅会输出Java堆栈信息,还会输出C/C++堆栈信息(比如Native方法) 找出进程内最耗费CPU的线程,可以使用ps -Lfp pid或者ps -mp pid -o THREAD, tid, time或者top -Hp pid printf "%x\n" pid 得到pid的

java 性能调优和GC

JAVA 性能调优和GC http://blog.csdn.net/gzh0222/article/details/7663181 JAVA GC调优手记 http://blog.csdn.net/firecoder/article/details/7225654 JAVA GC 日志详解 http://blog.csdn.net/alivetime/article/details/6895537 JAVA 内存参数设置 http://heipark.iteye.com/blog/1356113

Java性能调优_深入Java程序性能调优(并行开发、JVM调优)

深入Java程序性能调优(阿姆达尔定律.缓存组件.并行开发.线程池.JVM调优)课程讲师:special课程分类:Java核心适合人群:初级课时数量:33课时更新程度:完成用到技术:阿姆达尔定律.缓存组件.并行开发.线程池.JVM调优涉及项目:模式在实际开发中运用深入Java程序性能调优下载: http://pan.baidu.com/s/1ntn0ZTB 密码: ijluJava性能调优:国内关于Java性能调优的课程非常少,如此全面深入介绍Java性能调优,北风算是独家,Special讲师,

JAVA性能调优- try/catch块和循环

1.JAVA性能调优-将try/catch块移出循环 据说把try/catch块放入循环体内,会极大的影响性能.因为使用了try/catch模块的使用,会让JAVA虚拟机做很多额外的工作.就好比对每个人说,"嗨,哥们,路上可能有蛇.于是听到的人只好手拿木棍,小心翼翼的往前走". 把try/catch块放到循环外面,就好比对一大群人说,"嗨,兄弟们,路上可能有蛇.于是听到的人安排部分人员拿木棍往前走,其他人基本不受影响" 这个理论蛮不错的,测试下对性能的实际影响 2.

推荐书籍:《Java性能调优指南》

本书作者是Java性能和Java HotSpot 虚拟机领域的佼佼者,帮助你利用现代软工实践提高性实战生涯中总结能,避免常见错误,从技巧和窍门. 利用G1克服并行.串行和CMS垃圾收集器的局限性了解G1  GC收集的各个阶段,包括年轻代和老年代在G1的引擎下微调您的应用程序确定潜在优化方案,解释实验结果,并付诸行动探索的HotSpot虚拟机内部使用热点VM服务代理分析.分流,并解决不同的热点 <Java性能调优指南>主要展示了如何在当今先进的多核硬件和复杂的操作系统环境下,系统且主动地提高Ja

java性能调优——技客时间

一.java性能调优的标准 cpu:有的应用需要大量计算,他们会长时间.不间断地占用 CPU 资源,导致其他资源无法争夺到 CPU 而响应缓慢,从而带来系统性能问题.例如,代码递归导致的无限循环,正则表达式引起的回溯,JVM 频繁的 FULL GC,以及多线程编程造成的大量上下文切换等,这些都有可能导致 CPU 资源繁忙. 内存:Java 程序一般通过 JVM 对内存进行分配管理,主要是用 JVM 中的堆内存来存储 Java 创建的对象.系统堆内存的读写速度非常快,所以基本不存在读写性能瓶颈.但

《Java性能调优》学习笔记(1)

性能的参考指标 执行时间 -- 从代码开始运行到结束的时间 CPU时间 -- 函数或者线程占用CPU的时间 内存分配 -- 程序在运行时占用内存的情况 磁盘吞吐量 -- 描述IO的使用情况 网络吞吐量 -- 描述网络的使用情况 响应时间 -- 系统对某用户行为或者时间做出的响应时间 性能的瓶颈资源可能有: 磁盘IO 网络操作 CPU 异常 -- 对Java应用来说,异常的补货和处理是非常消耗资源的,如果程序高频率的对异常处理会对整体性能有影响 数据库 锁竞争 -- 增加上下文切换的开销 内存 性

成为Java GC专家(5)—Java性能调优原则

这是"成为Java GC专家"系列的第五篇文章.在第一篇深入浅出Java垃圾回收机制中,我们已经学习了不同的GC算法流程.GC的工作原理.新生代(Young Generation)和老年代(Old Generation)的概念.你应该了解了JDK7中5种GC类型以及各种类型对应用程序的影响. 在第二篇如何监控Java的垃圾回收中,阐述了JVM是怎样实际执行垃圾回收的,我们怎样去监控GC以及哪些工具能让这个过程更高效. 第三篇如何如何优化Java垃圾回收机制中展示了一些基于真实案例的最佳