Linux是控制硬件资源的操作系统,特点开源免费。
软件移植:不同硬件其功能函数不同,所以同一个操作系统无法在不同硬件平台上运行。如果能参考硬件功能函数并以此修改你的操作系统程序代码,那经过修改后的操作系统就能在另一个硬件平台上运行,此过程称软件移植。
Linux提供一个操作系统中最底层的硬件控制与资源管理的完整架构,此架构继承了UNIX良好传统而来,所以相当稳定且功能强大。
Linux历史由来:1969年以前,Bell,MIT与GE的“Multics”系统。
1969年,Ken Thompson的小型file server system.
1973年,UNIX的正式诞生,Ritchie等人用C语言写出第一个正式的UNIX内核。
1977年,重要的UNIX分支——BSD的诞生
1979年,重要的SystemV架构与版权声明
1984年,Andrew S.Tanenbaum教授为了教课,开始编写Minix这个UNIX-LIKE的内核程序,并于两年后完成。
1984年,GNU计划与FSF基金会成立,计划目的在于建立一个自由开放的UNIX操作系统。
1988年,图形用户界面模式XFree86计划
1991年,芬兰大学生Linus Torvalds写出一个小小的操作系统,其内核能用在386机器上,这时的系统仅为内核,Linux名字源于Torvalds放置内核的FTP网站的管理员取名为Linux(意为Linus的UNIX)。为了让自己的Linux能够兼容于UNIX系统,Torvalds修改Linux,让Linux符合软件(能在UNIX上运行的软件)能够运行的规范。
1994年虚拟团队完成Linux的内核正式版,Version 1.0。
Linux版本
Linux分为发行版与内核版
内核版本说明
2.6.18三数字为主、次、末版本。版本三数字变化依据版本更改大小
其实就是一个操作系统最底层的内核及其提供的内核工具
发行版
Linux+各种软件就是一个相当完整的操作系统。不过完成这样的系统很困难。为了让用户能接触到Linux,很多公司和团体将Linux内核(及其工具)与可运行软件整合起来,加上自己具有创意的工具程序,这个工具程序可让用户以CD/DVD或通过网络直接安装/管理Linux系统。这个“内核+软件+工具+可完全安装程序”的东西称为Linux发行版。
列出几个主要的Linux发行版:
RedHat、SUSE、Fedora、CentOS、Debian、Ubuntu、Gentoo
(内核是基于硬件的第一层软件扩充,提供操作系统的最基本的功能,是操作系统工作的基础,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。系统内核是系统的核心部分,主要负责进程调度,消息处理等。一般内核比较小。就像公司经理不负责生长任务,但是他们负责如何调度人员,分配资源….. ,其为编码编出来的特殊程序)
Linux与Windows不同点
♦Linux严格区分大小写
♦Linux中所有内容以文件形式保存包括硬件
♦Linux不靠扩展名区分文件类型
现约定俗称的命名区分
压缩包:”.gz”,”.bz2”,”.tar.bz2”,”.gz”,”.tgz”
二进制软件包:”.rpm”
网页文件:”html”,”.php”
脚本文件:”.sh”
配置文件:”.conf”
♦Windows下的程序不能直接在Linux上安装和运行
字符界面优势:
在服务器方面比图形界面占用更少资源,更安全稳定。
各硬件设备在Linux中的文件名
| 设备 | 设备在Linux中的文件名 |
|---|---|
| SCSI、SATA、USB磁盘驱动器 | /dev/sd[a-p] |
| U盘 | /dev/sd[a-p](与SATA相同) |
| Virtio接口 | /dev/vd[a-p](用于虚拟机内) |
| 软盘驱动器 | /dev/fd[0-7] |
| 打印机 | /dev/lp0-2 /dev/usb/lp0-15 |
| 鼠标 | /dev/input/mouse0-15 /dev/psaux(PS/2接口) /dev/mouse(当前鼠标) |
| CD-ROM、DVD-ROM | /dev/scd0-1 /dev/sr[0-1](通用,CentOS较常见) /dev/cdrom(当前CD-ROM) |
| 磁带机 | /dev/ht0(IDE接口) /dev/st0(SATA/SCSI接口) /dev/tape(当前磁带) |
| IDE磁盘驱动器 | /dev/hda-d |
磁盘分区
MBR分区格式
早期Linux系统为兼容Windows的磁盘,使用的是支持Windows的MBR的方式处理启动引导程序与分区表
而其主要放在磁盘的第一个扇区,这个扇区通常是512字节大小。其中主引导记录(安装启动引导程序的地方)有446字节,分区表记录整块硬盘分区的状态,有64字节。由于分区表所在区块仅有64字节容量,因此只能有四组记录区,每组记录区记录了该区段段启始与结束的柱面号码。
◾️分区其实就是对64字节大小的分区表进行设置而已
◾️硬盘默认分区只能写入四组分区信息
◾️四组分区我们称为主要或扩展分区(扩展分区最多只能有一个,主分区加扩展分区不能超4个)
◾️分区最小单位为柱面
◾️当系统要写入磁盘时,一定会参考磁盘分区表,才能针对某个分区进行数据的处理
◾️逻辑分区是有扩展分区持续划分出来的分区
◾️能被格式化后作为数据取存的分区是主要分区和逻辑分区,扩展分区无法格式化
MBR与分区表很重要,几乎读取硬盘都会先由第一个扇区读起,因此如果第一个扇区损坏,那这个硬盘大概就没有用了。
分区对数据安全,系统性能均有好处。
GPT磁盘分区表
◾️由于MBR分区表分区表较小,可记录信息有限,所以有如下限制:
◾️操作系统无法使用2.2TB以上的磁盘容量
◾️MBR仅有一个区块,若被破坏后,经常无法或很难恢复
◾️MBR内的存放启动引导程序的区块仅有446字节,无法储存较多的程序代码
其分区表结构如下图

LBA0(MBR兼容区块)
LBA1(GPT表头记录)
LBA2-33(实际记录分区信息处)
现在GPT分区默认可以提供多达128组记录,而在Linux本身的内核设备记录中,针对单一磁盘来说,虽然过去最多只能到达15个分区,不过由于Linux内核通过udev等方式的处理,现在Linux也已经没有这个限制了。此外,GPT分区已经没有所谓的主、扩展、逻辑分区的概念,既然每组记录都可以独立存在,当然每个都可以视为是主要分区,每一个分区都可以拿来格式化使用。
挂载
所谓挂载就是利用一个目录当成进入点,将磁盘分区的数据位置放该目录下,也就是说进入该目录就可以读取该分区的意思。这个操作我们称为挂载,那个进入点点目录我们称为挂载点。
必须分区
◾️/根分区
◾️swap交换分区
推荐分区
◾️/boot(启动分区,200MB)
文件属性与权限
[root@localhost~]#
其中root 当前登录用户
localhost 主机名
~ 当前所在目录(家目录)
# 超级用户提示符,普通用户是$
Linux一般将文件可读写的身份分为三个类别,分别是拥有者(owner)、所属群组(group)、其他人(others),且三种身份各有读(read)、写(write)、执行(execute)等权限。

每个文件的属性由左边第一部分的10个字符来确定。
第一个字符代表文件类型,具体字符有:
d 目录
-普通文件
I 软链接,即链接文档(link file)
b 块设备,装置文件中可供存储的接口设备(可随机存储装置)
c 字符设备,装置文件中串行端口设备(一次性读取装置)
s 网络套接字(socket)
p 管道(piep)
Linux命令
Linux终端命令格式:命令 [选项] [参数]。 []
注意:个别命令使用不遵循此格式,当有多个选项时可以写在一起 简化选项与完整选项-a等于—all
查询目录中的内容:ls
常用选项:
-a 显示所有文件包括隐藏文件
-l 显示详细信息
-d 查看目录属性
-h 人性化显示文件大小
-i 显示inode
复制:cp(复制文件或目录)copy缩写
-a 相当于-pdr
-p 连带文件属性复制
-d 若源文件上链接文件,则复制链接属性
-r 复制目录
删除文件或目录:rm [-rf] remove缩写
-r 删除目录
-f 强制 (较危险的操作)
-i 交互模式,在删除前会询问使用者是否操作
移动文件于目录,或重命名:mv -[fiu]
-f 强制的意思,如果目标文件已存在,不会询问而直接覆盖
-i 交互模式,如果目标文件已存在,会询问而不是直接覆盖
-u 若目标文件已存在,且文件比较新才会更新
获取路径的文件名与目录名称
basename :取最后文件名
dirname:取目录名
文件内容查看
cat由第一行开始显示文件内容
tac从最后一行显示,可以看出其上cat的倒写
nl显示的时候,同时输出行号
more一页一页地显示文件内容
less与more类似,但比more更好的是,它可以往前翻页
head只看前几行
tail只看后几行
od以二进制方式读取文件内容
修改文件时间或创建新文件:touch
-a:仅自定义access time;
-c: 仅修改文件的时间,若该文件不存在则不建立新文件
-d: 后面可以接欲自定义的日期而不用目前的日期,也可以用—date=”日期或时间”
-m: 仅修改mtime
-t: 后面可以接欲自定义的时间而不用目前的时间,格式为[YYYYMMDDhhmm];
链接命令
ln -s [源文件] [目标文件] link缩写
功能:生成链接文件
选项:-s
创建软链接
硬链接特征:
1.拥有相同的i节点和储存block块,可以看做同一文件
2.可通过i节点识别
3.不能跨分区
4.不能针对目录使用
软链接特征:
1.类似windows的快捷方式
2.软链接拥有自己的I(大写i)节点和Block块,但是数据块中只保存原文件的文件名和I节点号,并没有实际的文件数据
3.Irwxrwxrwx 软链接
4.修改任意文件,另一个都改变
5.删除原文件,软链接不能用
命令与文件的查找
脚本文件的查找
which(查找【执行文件】)
-a:将所有由PATH目录中可以找到的命令均列出,而不止第一个被找到的命令名称
这个命令是根据PATH这个环境变量所规范的路径,去查找执行文件的文件名,所以,重点是找出执行文件而已,且which后面接的是完整文件名。
文件的查找
whereis(由一定的特定目录中查找文件)
-l: 可以列出whereis会去查询的几个主要目录
-b: 只找binary(二进制)格式的文件
-m: 只找在说明文件manual路径下的文件
-s: 只找source源文件
-u: 查找不在上面三个项目中的特殊文件
locate/updatedb 用法:locate [-ir] keyword
-i: 忽略大小写的差异
-c: 不输出文件名,仅计算找到的文件数量
-l: 仅输出几行的意思,例如输出五行是-1 5;
-s: 输出locate所使用的数据库文件的相关信息,包括该数据库记录的文件/目录数量等。
-r: 后面可接正则表达式的显示方式
updatedb:根据/etc/updatedb.com.conf的设置去查找系统硬盘内的文件,并更新/var/lib/mlocate内的数据文件
locate:依据/var/lib/mlocate内的数据库记录,找出用户所输入关键词的文件名
find(用时长,不常用) 用法:find [PATH] [option] [action]
与时间有关:
-mtime n:n为数字,意义为在n天之前的【一天之内】被修改过内容的文件
-mtime +n:列出n天之前(不含n天本身)被修改过内容的文件
-mtime -n:列出在n天之内(含n天本身)被修改过内容的文件
-newer file:file为一个存在的文件,列出比file还要新的文件
与使用者或用户组名称有关参数:
-uid n:n是数字,这个数字是使用者的账号ID,亦即UID,这个UID是记录在/etc/passwd里面
-gid n:n是数字,这个数字是用户组名称的ID,亦即GID,这个GID是记录在/etc/group里面
与文件权限及名称有关的参数:
-name filename:查找文件名称为filename的文件;
-size[+-]SIZE:查找比SIZE还要大(+)或小(-)的文件
-type TYPE:查找文件的类型为TYPE的,类型主要有:一般正规文件(f),设备文件(b,c),目录文件(d),链接文件(l),socket(s),及FIFO(p)等属性
-perm -mode查找文件权限【必须要全部囊括mode等权限】的文件
-perm /mode查找文件权限【包含任一mode的权限】的文件
额外可进行的操作
-exec command:command为其他命令,-exec后面可再接额外的命令来处理查找到的结果
-print :将结果打印到屏幕上,这个操作是默认操作
-inum 602307:查找节点号为602307的文件
find /etc -size +20k -a -size -50k
意为:查找/etc/目录下,大于20k小于50k的文件
-a and 逻辑与,两个条件都满足
-o or 逻辑或,两个条件满足其一即可
find /etc -size +20k -a -size -50k -exec ls -lh {} \;
意为:查找/etc/目录下大于20k小于50k的文件,并显示详细内容
搜索字符串命令grep
用法:grep [选项] 字符串 文件名
在文件当中匹配符合条件的字符串
选项:
-v排除指定字符串
-i忽略大小写
帮助命令
man 命令 获取指定命令的帮助
例:man ls 查看ls的帮助文档
man 帮助类别
| 代号 | 代表内容 |
|---|---|
| 1 | 用户在shell环境中可以操作的命令或可执行的文件 |
| 2 | 系统内核可调用的函数和工具 |
| 3 | 一些常用的函数与函数库,大部分为C的函数库 |
| 4 | 设备文件的说明,通常在/dev下的文件 |
| 5 | 配置文件或是某些文件的格式 |
| 6 | 游戏 |
| 7 | 惯例与协议等,例如Linux文件系统、网络协议、ASCII代码等的说明 |
| 8 | 系统管理员可用的管理命令 |
| 9 | 跟内核有关的文件 |
查看命令拥有级别的帮助
man -f 相当于whatis
查看命令某个级别的帮助
例:man -5 passwd
man -4 null
man -k
相当于apropos 命令 查找命令相关帮助
—help
获取命令选项的帮助
例:ls —help
help shell内部命令
获取shell内部命令帮助
例:
whereis cd 通过命令所在目录确定是否为shell内部命令
help cd 获取shell内部命令帮助
info命令
-回车: 进入子帮助页面(带*号标记)
-u: 进入上层页面
-n: 进入下一个帮助小节
-p: 进入上一个帮助小节
-q: 退出
目录与路径
目录树结构:指以根目录为主,然后向下呈现为分支状的目录结构的一种文件架构。所以整个目录树结构最重要的就是那个根目录。根目录表示方法为一条斜线“/”。
特殊的目录:
· 代表此层目录
·· 代表上一层目录
- 代表前一个工作目录
~ 代表目前使用者身份所在的家目录
~account 代表account这个使用者的家目录(account是个账号名称)
目录操作常用命令:
cd:切换目录 change directory 提示符后输入 su -表示切换成root身份 cd表示回家目录
pwd:显示当前目录 print working directory -p:显示出真正的路径,而非使用链接(link)路径。
mkdir:建立一个新目录 make directory -m:设置文件的权限。直接设置,不使用默认权限(umask)
-p:帮你直接将所需要的目录(包含上层目录)递归创建。
rmdir:删除一个空目录 remove directory -p连同上层“空的”目录也一起删除
用法:输入“cd”+”所要去目录”,例如cd ~(代表回到使用者的家目录)
绝对路径:路径的写法“一定由根目录/写起”,例如:/usr/share/doc
相对路径:路径的写法“不是由/写起”,例如由于/usr/share/doc要到/usr/share/man下面时,可以写成“cd../man”这就是相对路径的写法,相对路径意指相对于目前工作目录的路径。
执行文件路径的变量:$PATH
echo $PATH显示目前的路径
/根目录
/bin命令保存目录(普通用户就可以读取的命令)
/boot启动目录,启动相关文件
/dev设备文件保存目录
/etc配置文件保存目录
/home普通用户的家目录
/lib系统库保存目录
/mnt系统挂载目录
/media挂载目录
/root
/tmp
/sbin
/proc
/sys
/usr系统软件资源目录
/usr/bin/系统命令(普通用户)
/usr/sbin/系统命令(普通用户)
/var系统相关文档内容
