Linux是控制硬件资源的操作系统,特点开源免费。
    软件移植:不同硬件其功能函数不同,所以同一个操作系统无法在不同硬件平台上运行。如果能参考硬件功能函数并以此修改你的操作系统程序代码,那经过修改后的操作系统就能在另一个硬件平台上运行,此过程称软件移植。
    Linux提供一个操作系统中最底层的硬件控制与资源管理的完整架构,此架构继承了UNIX良好传统而来,所以相当稳定且功能强大。
    操作系统角色.png
    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字节,无法储存较多的程序代码
    其分区表结构如下图

    QQ图片20181218150159.png

    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)等权限。
    190311170042131.png19031114197948.png

    每个文件的属性由左边第一部分的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系统相关文档内容