Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX(Portable Operating System Interface,是IEEE为要在各种UNIX操作系统上运行软件,而定义API的一系列互相关联的标准的总称)和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。
Linux支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
Linux内核主要负责的功能:系统内存管理、软件程序管理、硬件设备管理、文件系统管理。
Linux是一款开源操作系统,不需要付费
,即可使用;Linux操作系统具有良好的跨平台性能,可运行在多种硬件平台上
;Linux除了进行命令行操作,还有窗体管理系统
;Linux操作系统对硬件的要求较低
,安装方法更易掌握;UNIX系统大多是与硬件配套的,也就是说,大多数UNIX系统如AIX、HP-UX等是无法安装在x86服务器和个人计算机上的,而Linux则可以运行在多种硬件平台上。
Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。
Linux内核本身并不是操作系统,它是一个完整操作系统的组成部分
。Linux发行商都采用Linux内核,然后加入更多的工具、库和应用程序来构建一个完整的操作系统。
Linux内核的常见功能:
先说Shell,Shell是用户和Linux(或者更准确的说,是用户和Linux内核)之间的接口程序。你在提示符下输入的每个命令都由shell先解释然后传给Linux内核。Shell 是一个命令语言解释器。拥有自己内建的Shell命令集
。
Bourne Again shell(bash),是Bourne shell的扩展。bash与Bourne shell完全向后兼容,并且在Bourne shell的基础上增加和增强了很多特性。bash也包含了很多C和Korn shell里的优点。bash有很灵活和强大的编程接口,同时又有很友好的用户界面。
BASH是运行Linux的大多数系统的默认Shell。
BASH和DOS控制台之间的主要区别在于3个方面:
BASH命令区分大小写,而DOS命令则不区分
。/
是目录分隔符,\
作为转义字符;在DOS下,/
用作命令参数分隔符,\
是目录分隔符。1) 检测硬件
2) 解压缩自己并安装必要驱动
3) 初始化与文件系统相关的虚拟设备,LVM或RAID
4) 装载根文件系统,挂在根目录下面
5) 完成之后,linux在进程空间里面加载init程序,下面轮到init干活
至此,linux启动完成。
运行级别0 | 系统停机状态,系统默认运行级别不能设为0,否则不能正常启动 |
---|---|
运行级别1 | 单用户工作状态,root权限,用于系统维护,禁止远程登陆 |
运行级别2 | 多用户状态(没有NFS) |
运行级别3 | 完全的多用户状态(有NFS),登陆后进入控制台命令行模式 |
运行级别4 | 系统未使用,保留 |
运行级别5 | X11控制台,登陆后进入图形GUI模式 |
运行级别6 | 系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动 |
注:NFS是Network File System的缩写,即网络文件系统。
NFS的基本原则是“容许不同的客户端及服务端通过一组RPC(远程过程调用)分享相同的文件系统”,它是独立于操作系统,容许不同硬件及操作系统的系统共同进行文件的分享。
Linux下进程通信的八种方法:
常见的几个:
该文件记录系统在开机时内核检测过程中所产生的各项信息
。由于centos默认将开机时内核的硬件检测过程取消显示,因此额外将数据记录在此文件中。该文件几乎记录了系统发生的所有错误信息(或者是重要的信息)
,所以这个文件相当重要;如果系统发生莫名的错误时,这个文件是必查的日志文件之一。swap space是磁盘上的一块区域,可以是一个分区,也可以是一个文件,或者是他们的组合。简单点说,当系统物理内存吃紧时,Linux会将内存中不常访问的数据保存到swap上,这样系统就有更多的物理内存为各个进程服务。当系统需要访问swap上存储的内容时,再将swap上的数据加载到内存中,这就是我们常说的swap out和swap in。
root存在于UNIX系统和类UNIX系统(如Ubuntu等版本的Linux系统以及Android系统)中,超级用户一般命名为root
,相当于Windows系统中的system用户。
root是系统中唯一的超级用户,具有系统中所有的权限,如启动或停止一个进程,删除或增加用户,增加或者禁用硬件等等。
root用户是系统中唯一的超级管理员,它具有等同于操作系统的权限
。一些需要root权限的应用,譬如广告阻挡,是需要root权限的。可问题在于root比windows的系统管理员的能力更大,足以把整个系统的大部分文件删掉,导致系统完全毁坏,不能再次使用。所以,用root进行不当的操作是相当危险的,轻微的可以死机,严重的甚至不能开机。所以,在Unix、Linux及Android中,除非确实需要,一般情况下都不推荐使用root。最好单独建立一个普通的用户,作为日常之用。
LILO是Linux的引导加载程序。它主要用于将Linux操作系统加载到主内存中,以便它可以开始运行。
命令行界面(command-line interface,CLI)是在图形用户界面得到普及之前使用最为广泛的用户界面,它通常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后,予以执行。也有人称之为字符用户界面(CUI)。
通常认为,命令行界面(CLI)没有图形用户界面(GUI)那么方便用户操作。因为,命令行界面的软件通常需要用户记忆操作的命令,但是,由于其本身的特点,命令行界面要较图形用户界面节约计算机系统的资源。在熟记命令的前提下,使用命令行界面往往要较使用图形用户界面的操作速度要快。所以,图形用户界面的操作系统中,都保留着可选的命令行界面。
图形用户界面(Graphical User Interface,简称GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。
图形用户界面是一种人与计算机通信的界面显示格式,允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,以选择命令、调用文件、启动程序或执行其它一些日常任务。与通过键盘输入文本或字符命令来完成例行任务的字符界面相比,图形用户界面有许多优点。
绝对路径:描述了在虚拟目录结构中该目录的确切位置,以虚拟目录根目录开始,相当于目录全名。以正斜线开始,比如:/usr/local
。
相对路径:允许用户执行一个基于当前目录位置的文件路径。
在相对路径中:
单点符(.):表示当前目录;
双点符(…):表示当前目录的父目录。
当前目录和上层目录: ./ ../
。
主目录: ~/
。
切换目录: cd
。
bash shell用一个叫做环境变量的特性用来存储有关shell回话和工作环境的信息。这项特性允许你在内存中存储数据,以便程序或shell中运行的脚本能够轻松访问到它们。这也是存储持久数据的一种简便方法。
在bash shell中,环境变量分为两类:
全局变量:对于shell回话和所有生成的子shell都是可见的。
局部变量:只对创建他们的shell可见。
查看所有命令:env。
查看某个,如 home: env $HOME。
lsof -i:端口号。
cat /proc/cpuinfo。
在Linux操作系统中,所有被操作系统管理的资源
,例如网络接口卡、磁盘驱动器、打印机、输入输出设备、普通文件或是目录都被看作是一个文件
。
在Linux系统中,有一个重要的概念:一切都是文件。其实这是Unix哲学的一个体现,而Linux是重写Unix而来,所以这个概念也就传承了下来。在Unix系统中,把一切资源都看作是文件,包括硬件设备。UNIX系统把每个硬件都看成是一个文件,通常称为设备文件,这样用户就可以用读写文件的方式实现对硬件的访问。
Linux支持5种文件类型,如下图所示:
Linux文件系统的结构层次鲜明,就像一棵倒立的树,最顶层是其根目录:
存放所有用户文件的根目录
,是用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示;存放用于系统引导时使用的各种文件
; 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。
操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个sector组成一个 block。
文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。
每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。
建立软链接和硬链接的语法:
# 软链接
ln -s 源文件 目标文件
# 硬链接
ln 源文件 目标文件
软链接可以理解成快捷方式。它和windows下的快捷方式的作用是一样的;硬链接等于cp -p加同步更新
。
软链接文件的大小和创建时间和源文件不同。软链接文件只是维持了从软链接到源文件的指向关系。
硬链接文件和源文件的大小和创建时间一样。硬链接文件的内容和源文件的内容一模一样,相当于copy了一份。
/etc/password文件用来存储一些和用户有关的信息,包括:
登录用户名;
用户密码;
用户账户的UID(数字形式);
用户账户的组ID(GID)(数字形式);
用户账户的文本描述(称为备注字段);
用户HOME目录的位置;
用户的默认shell。
数据字典是属于SYS
用户的,用户SYS
和SYSEM
是由系统默认自动创建的。
一个Shell脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell 脚本)来完成这些日常工作任务。
Shell是操作系统的最外层,Shell可以合并编程语言以控制进程和文件,以及启动和控制其他程序。简单来说:Shell就是一个用户跟操作系统之间交互的命令解释器
。
## chsh <用户名> -s <新shell>
## chsh ThinkWon -s /bin/sh
#!/bin/bash
## This is a command
echo "I am logged in as $USER"
示例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
使用Llinux命令disown -r
可以将所有正在运行的进程移除。
job -l
。
把后台任务调到前台执行:fg
。
把停下的后台任务在后台执行起来:bg
。