??Linux是一套免费使用的类Unix操作系统,是一个基于POSIX(Portable Operating System Interface,是IEEE为要在各种UNIX操作系统上运行软件,而定义API的一系列互相关联的标准的总称)和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。
??Linux支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
??Linux内核主要负责的功能:系统内存管理、软件程序管理、硬件设备管理、文件系统管理。
??Linux和Unix的区别:
Linux | Unix | |
---|---|---|
开源性 | 一款开源操作系统,不需要付费,即可使用 | 一款对源码实行知识产权保护的传统商业软件,使用需要付费授权使用 |
跨平台性 | 具有良好的跨平台性能,可运行在多种硬件平台上 | 跨平台性能较弱,大多需与硬件配套使用 |
可视化界面 | 除了进行命令行操作,还有窗体管理系统 | 只是命令行下的系统 |
硬件环境 | 对硬件的要求较低,安装方法更易掌握 | 对硬件要求比较苛刻,安装难度较大 |
用户群体 | 用户群体很广泛,个人和企业均可使用 | 用户群体比较窄,多是安全性要求高的大型企业使用,如银行、电信部门等,或者Unix硬件厂商使用,如Sun等 |
??从大的方面讲,Linux 体系结构可以分为两块:
??用户空间(User Space) :用户空间又包括用户的应用程序(User Applications)、C 库(C Library) 。
??内核空间(Kernel Space) :内核空间又包括系统调用接口(System Call Interface)、内核(Kernel)、平台架构相关的代码(Architecture-Dependent Kernel Code) 。
??用户空间和内核空间是程序执行的两种不同的状态,我们可以通过两种方式完成 用户空间到内核空间的转移:1)系统调用;2)硬件中断。
??操作系统的内核是操作系统的核心部分。它负责系统的内存管理,硬件设备的管理,文件系统的管理以及应用程序的管理。
??Linux内核本身并不是操作系统,它是一个完整操作系统的组成部分
。Linux发行商都采用Linux内核,然后加入更多的工具、库和应用程序来构建一个完整的操作系统。
??Linux内核的常见功能:
??Linux的体系架构:分为用户态与内核态。用户态与内核态与内核态是操作系统对执行权限进行分级后的不同的运行模式。
??在cpu的所有指令中,有些指令是非常危险的,如果使用不当,将会造成系统崩溃等后果。为了避免这种情况发生,cpu将指令划分为特权级(内核态)指令和非特权级(用户态)指令。对于那些危险的指令只允许内核及其相关模块调用,对于那些不会造成危险的指令,就允许用户应用程序调用。
??内核态(核心态,特权态):内核态是操作系统内核运行的模式。内核态控制计算机的硬件资源,如硬件设备,文件系统等等,并为上层应用程序提供执行环境。
??用户态: 用户态是用户应用程序运行的状态。应用程序必须依托于内核态运行,因此用户态的态的操作权限比内核态是要低的,如磁盘,文件等,访问操作都是受限的。
??系统调用: 系统调用是操作系统为应用程序提供能够访问到内核态的资源的接口。
??物理内存RAM(Random Access Memory 随机存储器):物理内存是计算机的实际内存大小,它直接与CPU交换数据,也被称为主存。
??虚拟内存是操作系统为了更高效率使用物理内存的一种概念,它是对物理内存的抽象。Linux上的swap交换空间都是虚拟内存的一种实现技术。
??swap space是磁盘上的一块区域,可以是一个分区,也可以是一个文件,或者是他们的组合。简单点说,当系统物理内存吃紧时,Linux会将内存中不常访问的数据保存到swap上,这样系统就有更多的物理内存为各个进程服务。当系统需要访问swap上存储的内容时,再将swap上的数据加载到内存中,这就是我们常说的swap out和swap in。
??简单理解: 当某个应用程序所需的内存空间不够了,那么系统会判断当前物理内存是否还有足够的空闲可以分配给应用程序。如果有,则应用程序直接进入内存运行;如果没有,系统就根据某种算法(如:LRU)挂起一个进程,将挂起的进程交换到虚拟内存Swap中等待,并将应用程序调入内存执行。虚拟内存是被虚拟出来的,可以使用硬盘(不仅仅是硬盘)来作为虚拟内存。这就是为什么当我们运行一个所需内存比我们计算机内存还大的程序时,仍然可以正常运行,并感受不到内存的限制的原因。
运行级别0 | 系统停机状态,系统默认运行级别不能设为0,否则不能正常启动 |
---|---|
运行级别1 | 单用户工作状态,root权限,用于系统维护,禁止远程登陆 |
运行级别2 | 多用户状态(没有NFS) |
运行级别3 | 完全的多用户状态(有NFS),登陆后进入控制台命令行模式 |
运行级别4 | 系统未使用,保留 |
运行级别5 | X11控制台,登陆后进入图形GUI模式 |
运行级别6 | 系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动 |
??注:NFS是Network File System的缩写,即网络文件系统。
??NFS的基本原则是“容许不同的客户端及服务端通过一组RPC(远程过程调用)分享相同的文件系统”,它是独立于操作系统,容许不同硬件及操作系统的系统共同进行文件的分享。
??在Linux操作系统中,所有被操作系统管理的资源
,例如网络接口卡、磁盘驱动器、打印机、输入输出设备、普通文件或是目录都被看作是一个文件
。
??在Linux系统中,有一个重要的概念:一切都是文件。其实这是Unix哲学的一个体现,而Linux是重写Unix而来,所以这个概念也就传承了下来。在Unix系统中,把一切资源都看作是文件,包括硬件设备。UNIX系统把每个硬件都看成是一个文件,通常称为设备文件,这样用户就可以用读写文件的方式实现对硬件的访问。
??Linux支持5种文件类型,如下图所示:
??Linux文件系统的结构层次鲜明,就像一棵倒立的树,最顶层是其根目录:
存放所有用户文件的根目录
,是用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示;存放用于系统引导时使用的各种文件
;??在Linux系统中,一个文件所在的目录有绝对路径和相对路径两种表示方式。
??绝对路径:描述了在虚拟目录结构中该目录的确切位置,以虚拟目录根目录开始,相当于目录全名。以正斜线开始,比如:/usr/local
。
??相对路径:允许用户执行一个基于当前目录位置的文件路径。
??在相对路径中:
单点符(.):表示当前目录;
双点符(…):表示当前目录的父目录。
??当前目录和上层目录: ./ ../
。
??主目录: ~/
。
??切换目录: cd
。
??常见的日志文件:
该文件记录系统在开机时内核检测过程中所产生的各项信息
。由于centos默认将开机时内核的硬件检测过程取消显示,因此额外将数据记录在此文件中。该文件几乎记录了系统发生的所有错误信息(或者是重要的信息)
,所以这个文件相当重要;如果系统发生莫名的错误时,这个文件是必查的日志文件之一。??文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。
??操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个sector组成一个 block。
??文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。
??每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。
??使用 stat 命令可以查看文件的inode信息。每个inode都有一个号码,
Linux/Unix操作系统不使用文件名来区分文件,而是使用inode号码区分不同的文件。
inode也需要消耗硬盘空间,所以在格式化硬盘的时候,操作系统会将硬盘分为2个区域,一个区域存放文件数据,另一个区域存放inode所包含的信息,
存放inode的区域被称为inode table。
??建立软链接和硬链接的语法:
# 软链接
ln -s 源文件 目标文件
# 硬链接
ln 源文件 目标文件
??软链接可以理解成快捷方式。它和windows下的快捷方式的作用是一样的;硬链接等于cp -p加同步更新
。
??软链接文件的大小和创建时间和源文件不同。软链接文件只是维持了从软链接到源文件的指向关系。
??硬链接文件和源文件的大小和创建时间一样。硬链接文件的内容和源文件的内容一模一样,相当于copy了一份。
??示例1:
if [ condition ]
then
if [ condition ]
then
commands1
else
commands2
fi
fi
??示例2:
if [ condition ]
then
if [ condition ]
then
commands1
else
commands2
fi
else
commands3
fi
??在if-then中使用测试命令( -gt 等)来比较两个数字。示例:
#!/bin/bash
x=10
y=20
if [ $x -gt $y ]
then
echo “x is greater than y”
else
echo “y is greater than x”
fi
??示例:
case 变量 in
值1 )
执行动作1
;;
值2 )
执行动作2
;;
值3 )
执行动作3
;;
....
* )
如果变量的值都不是以上的值,则执行此程序
;;
esac
??示例2:
case "找工作条件" in
给的钱多)
给你工作...
;;
给股份)
给你工作...
;;
有发展前景)
可以试试...
;;
*)
bye bye !!
esac
??示例:
for 变量 in 循环列表
do
命令1
命令2
….
最后命令
done
??或:
for 变量 in 串行
do
执行命令
done
??更详细的for语法可以参考:Shell中for循环的几个常用写法。
??如同 for 循环,while 循环只要条件成立就重复它的命令块。示例:
while [ 条件 ]
do
命令…
done
??do-while 语句的基本格式示例:
do
{
命令
} while (条件)
??函数定义示例:
# func_name 函数名
function func_name(){
#函数体内容
}
或
# func_name 函数名
func_name(){
#函数体内容
}
??函数调用示例:
func_name parm
??函数体中,可以通过$1 $2 …$9接受函数调用中的变量;函数可以通过return 返回函数执行的结果。
sh sleep.sh
./sleep.sh
&
在命令结尾来让程序自动运行(命令后可以不追加空格)。示例:./sleep.sh &
??bash shell的内置命令let
可以进行整型数的数学运算。示例:
#! /bin/bash
…
…
let c=a+b