鸟哥的linux私房菜学习笔记

文章目录


flag:从2019.8.27起每天(后面章节一天可能不够)看一章并记录,预计用时25天(9.20结束(真的是预计- -))。

一、 计算机概论

2019.8.27

1. 计算机硬件的五大单元

输入单元、 输出单元、CPU 内部的控制单元、算数逻辑单元与内存五大部分
在这里插入图片描述

上面图示中的“系统单元”其实指的就是电脑机箱内的主要元件,而重点在于 CPU 与内存。 特别要看的是实线部分的传输方向,基本上数据都是流经过内存再转出去的! 至于数据会流进/流出内存则是 CPU 所发布的控制命令!而 CPU 实际要处理的数据则完全来自于内存 (不管是程序还是一般文件数据)!这是个很重要的概念喔! 这也是为什么当你的内存不足时,系统的性能就很糟糕!也是为什么现在人们买智能手机时,对于可用内存的要求都很高的原因!

2. 个人电脑架构与相关设备元件

在这里插入图片描述

二、磁盘分区

2019.8.28

1. 磁盘分区

1.1 MBR(Master Boot Record)与GPT(GUID partition table)格式

  • 一句话总结:MBR是把整个磁盘信息放在第1个512Byte扇区,GPT是把整个信息放在前34个和后33个逻辑区块位址。

早期磁盘第一个扇区里面含有的重要信息我们称为MBR (Master Boot Record) 格式,但是由于近年来磁盘的容量不断扩大,造成读写上的一些困扰, 甚至有些大于 2TB 以上的磁盘分区已经让某些操作系统无法存取。因此后来又多了一个新的磁盘分区格式,称为 GPT (GUID partition table)! 这两种分区格式与限制不太相同啦!

  • MSDOS (MBR) 分区表格式与限制

开机管理程序纪录区与分区表则通通放在磁盘的第一个扇区, 这个扇区通常是 512Bytes 的大小 (旧的磁盘扇区都是 512Bytes 喔!),所以说,第一个扇区 512Bytes 会有这两个数据:

  • 主要开机记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有446Bytes

  • 分区表(partition table):记录整颗硬盘分区的状态,有64 Bytes
    在这里插入图片描述
    有 延伸分区:
    在这里插入图片描述
    MBR 主要分区、延伸分区与逻辑分区的特性我们作个简单的定义啰:

    • 主要分区与延伸分区最多可以有四笔(硬盘的限制);
    • 延伸分区最多只能有一个(操作系统的限制);
    • 逻辑分区是由延伸分区持续切割出来的分区;
    • 能够被格式化后,作为数据存取的分区为主要分区与逻辑分区。延伸分区无法格式化;
    • 逻辑分区的数量依操作系统而不同,在Linux系统中SATA硬盘已经可以突破63个以上的分区限制;
  • GUID partition table, GPT 磁盘分区表

与 MBR 仅使用第一个 512Bytes 区块来纪录不同, GPT 使用了 34 个 LBA 区块(逻辑区块位址(Logical Block Address, LBA))来纪录分区信息!同时与过去 MBR 仅有一的区块,被干掉就死光光的情况不同, GPT 除了前面 34 个LBA 之外,整个磁盘的最后 33 个 LBA 也拿来作为另一个备份!
在这里插入图片描述
GPT 分区已经没有所谓的主、延伸、逻辑分区的概念,既然每笔纪录都可以独立存在, 当然每个都可以视为是主分区!每一个分区都可以拿来格式化使用喔!

1.2 开机流程中的 BIOS 与 UEFI 开机检测程序

引入:问题是,你有没有发现,既然操作系统也是软件,那么我的计算机又是如何认识这个操作系统软件并且执行他的? 明明开机时我的计算机还没有任何软件系统,那他要如何读取硬盘内的操作系统文件啊?嘿嘿!这就得要牵涉到计算机的开机程序了! 下面就让我们来谈一谈这个开机程序吧!
基本上,目前的主机系统在载入硬件驱动方面的程序,主要有早期的 BIOS 与新的 UEFI 两种机制,我们分别来谈谈啰!

  • BOIS搭配MBR/GPT的开机流程

BIOS则是一个写入到主板上的一个固件(再次说明, 固件就是写入到硬件上的一个软件程序)。这个BIOS就是在开机的时候,计算机系统会主动执行的第一个程序了!

简单的说,整个开机流程到操作系统之前的动作应该是这样的:

  • BIOS:开机主动执行的固件,会认识第一个可开机的设备;
  • MBR:第一个可开机设备的第一个扇区内的主要开机记录区块,内含开机管理程序;
  • 开机管理程序(boot loader):一支可读取核心文件来执行的软件;
  • 核心文件:开始操作系统的功能…

多重开机(双系统)工作流程:
在这里插入图片描述
总结:

  • 每个分区都拥有自己的开机扇区(boot sector)
  • 图中的系统盘为第一及第二分区,
  • 实际可开机的核心文件是放置到各分区内的!
  • loader只会认识自己的系统盘内的可开机核心文件,以及其他loader而已;
  • loader可直接指向或者是间接将管理权转交给另一个管理程序。

为什么人家常常说:“如果要安装多重开机, 最好先安装Windows再安装
Linux”呢?这是因为:

  • Linux在安装的时候,你可以选择将开机管理程序安装在MBR或各别分区的开机扇区, 而且Linux的loader可以手动设置菜单(就是上图的M1, M2…),所以你可以在Linux的boot loader里面加入Windows开机的选项;

  • Windows在安装的时候,他的安装程序会主动的覆盖掉MBR以及自己所在分区的开机扇区,你没有选择的机会, 而且他没有让我们自己选择菜单的功能。

  • UEFI BIOS搭配GPT的开机流程

我们现在知道 GPT 可以提供到 64bit 的寻址,然后也能够使用较大的区块来处理开机管理程序。但是 BIOS 其实不懂 GPT 耶!还得要通过 GPT 提供相容模式才能够读写这个磁盘设备~而且 BIOS 仅为 16 位的程序,在与现阶段新的操作系统接轨方面有点弱掉了! 为了解决这
个问题,因此就有了 UEFI (Unified Extensible Firmware Interface) 这个统一可延伸固件界面的产生。

UEFI 主要是想要取代 BIOS 这个固件界面,因此我们也称 UEFI 为 UEFI BIOS 就是了。UEFI 使用 C 程序语言,比起使用组合语言的传统 BIOS 要更容易开发!也因为使用 C 语言来撰写,因此如果开发者够厉害,甚至可以在 UEFI 开机阶段就让该系统了解 TCP/IP 而直接上网! 根本不需要进入操作系统耶!这让小型系统的开发充满各式各样的可能性!
在这里插入图片描述

1.3 Linux安装模式下,磁盘分区的选择(极重要)

  • 目录树结构
    在这里插入图片描述
  • 挂载
  • 关于光驱数据的读取
    光驱数据的挂载
  • A:初次接触Linux:只要分区“ / ”及“swap”即可:

通常初次安装Linux系统的朋友们,我们都会建议他直接以一个最大的分区“ / ”来安装系统。 这样作有个好处,就是不怕分区错误造成无法安装的困境!例如/usr是Linux的可执行程序及相关的文件摆放的目录, 所以他的容量需求蛮大的,万一你分区了一块分区给/usr,但是却给的不够大,那么就伤脑筋了! 因为会造成无法将数据完全写入的问题,就有可能会无法安装啦!因此如果你是初次安装的话, 那么可以仅分区成两个分区“ / 与 Swap ”即可。

  • B:建议分区的方法:预留一个备用的剩余磁盘容量!

在想要学习Linux的朋友中,最麻烦的可能就是得要常常处理分区的问题,因为分区是系统管理员很重要的一个任务。 但如果你将整个硬盘的容量都用光了,那么你要如何练习分区呢?。所以鸟哥在后续的练习中也会这样做, 就是请你特别预留一块不分区的磁盘容量,作为后续练习时可以用来分区之用!

此外,预留的分区也可以拿来做为备份之用。因为我们在实际操作Linux系统的过程中, 可能会发现某些script或者是重要的文件很值得备份时,就可以使用这个剩余的容量分区出新的分区, 并使用来备份重要的配置文件或者是script。这有个最大的好处, 就是当我的Linux重新安装的时候,我的一些软件或工具程序马上就可以直接在硬盘当中找到!呵呵!重新安装比较便利啦。 为什么要重新安装?因为没有安装过Linux十次以上,不要说你学会了Linux了啦!慢慢体会这句话吧!

三/四、 安装linux的基本操作

3.1 线上求助

  • date --help

基本上,如果是指令,那么通过这个简单的 --help 就可以很快速的取得你所需要的选项、参数的说明了!这很重要!我们说过,在 linux 下面你需要学习“任务达成”的方式, 不用硬背指令参数。不过常用的指令你还是得要记忆一下,而选项就通过 --help 来快速查询即可。

虽然 --help 已经相当好用,不过,通常 --help 用在协助你查询“你曾经用过的指令所具备的选项与参数”而已, 如果你要使用的是从来没有用过得指令,或者是你要查询的根本就不是指令,而是文件的“格式”时,那就得要通过 man page 啰!!

  • man date

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

3.2 超简单文本编辑器:nano

在这里插入图片描述

五、 Linux 的文件权限与目录配置

5.1 使用者与群组

1. 文件拥有者

只有文件拥有者可以看和修改这个文件的内容。

2. 群组

群组下的成员可以看到群组的资源和群组下其他成员的资源,但成员也可以设置权限不让其他成员查看和修改。

3. 其他人

其他群组来说,可以理解为其他人。

  • Linux 使用者身份与群组记录的文件

在我们Linux系统当中,默认的情况下,所有的系统上的帐号与一般身份使用者,还有那个root的相关信息, 都是记录在/etc/passwd这个文件内的。至于个人的密码则是记录
在/etc/shadow这个文件下。 此外,Linux所有的群组名称都纪录在/etc/group内!这三个文件可以说是Linux系统里面帐号、密码、群组信息的集中地啰! 不要随便删除这三个文件啊!

5.2 Linux 文件权限概念

5.2.1 Linux文件属性

ls -al

在这里插入图片描述
要注意的是, 我们还是不建议你直接使用 root 登陆系统,建议使用 su - 这个指令来切换身份喔!离开 su - 则使用 exit 回到 dmtsai 的身份即可!

ls是“list”的意思,重点在显示文件的文件名与相关属性。而选项“-al”则表示列出所有的文件详细的权限与属性 (包含隐藏文件,就是文件名第一个字符为“ . ”的文件)。

在这里插入图片描述

  • 第一栏代表这个文件的类型与权限(permission)
    在这里插入图片描述
    在这里插入图片描述
  • 第二栏表示有多少文件名链接到此节点(i-node):

每个文件都会将他的权限与属性记录到文件系统的i-node中,不过,我们使用的目录树却是使用文件名来记录, 因此每个文件名就会链接到一个i-node啰!这个属性记录的,就是有多少不同的文件名链接到相同的一个i-node号码去就是了。 关于i-node的相关数据我们会在第七章谈到文件系统时再加强介绍的。

  • 第三栏表示这个文件(或目录)的“拥有者帐号”

  • 第四栏表示这个文件的所属群组

  • 第五栏为这个文件的容量大小,默认单位为Bytes

  • 第六栏为这个文件的创建日期或者是最近的修改日期

如果想要显示完整的时间格式,可以利用ls的选项,亦即:“ls -l --full-time”就能够显示出完整的时间格式了!包括年、月、日、时间喔。 另外,如果你当初是以繁体中文安装你的Linux系统,那么日期字段将会以中文来显示。 可惜的是,中文并没有办法在纯文本的终端机模式中正确的显示,所以此栏会变成乱码。 那你就得要使用export LC_ALL=en_US.utf8来修改语系喔!

  • 第七栏为这个文件的文件名

这个字段就是文件名了。比较特殊的是:如果文件名之前多一个“ . ”,则代表这个文件为“隐藏文件”,例如上表中的.config那一行,该文件就是隐藏文件。 你可以使用“ls”及“ls -a”这两个指令去感受一下什么是隐藏文件啰!

5.2.2 如何改变文件属性与权限

  • chgrp :改变文件所属群组

  • chown :改变文件拥有者

  • chmod :改变文件的权限, SUID, SGID, SBIT等等的特性

  • 改变所属群组, chgrp

假设你已经知道在/etc/group里面已经存在一个名为users的群组, 但是testing这个群组名字就不存在/etc/group当中了,此时改变群组成为users与testing分别会有什么现象发生呢?

在这里插入图片描述

  • 改变文件拥有者, chown

要注意的是, 使用者必须是已经存在系统中的帐号,也就是在/etc/passwd 这个文件中有纪录的使用者名称才能改变。

在这里插入图片描述
Tips 事实上,chown也可以使用“chown user.group file”,亦即在拥有者与群组间加上小数点“ . ”也行! 不过很多朋友设置帐号时,喜欢在帐号当中加入小数点(例如vbird.tsai这样的帐号格式),这就会造成系统的误判了! 所以我们比较建议使用冒号“:”来隔开拥有者与群组啦!此外,chown也能单纯的修改所属群组呢! 例如“chown .sshd initial-setup-ks.cfg”就是修改群组~看到了吗?就是那个小数点的用途!

P.S.cp resouce-files destination-files 复制文件时,改变文件的群组和拥有者较为常见。

  • 改变权限, chmod

文件权限的改变使用的是chmod这个指令,但是,权限的设置方法有两种, 分别可以使用数字或者是符号来进行权限的变更。我们就来谈一谈:

  • 数字类型改变文件权限

> r:4 > w:2 > x:1
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: [-rwxrwx—] 分数则是:
> owner = rwx = 4+2+1 = 7 > group = rwx = 4+2+1 = 7 > others= — = 0+0+0 = 0
所以等一下我们设置权限的变更时,该文件的权限数字就是770啦!变更权限的指令
chmod的语法是这样的:

[root@study ~]# chmod [-R] xyz 文件或目录
选项与参数:
xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
-R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件都会变更

举例来说,如果要将.bashrc这个文件所有的权限都设置启用,那么就下达:

[root@study ~]# ls -al .bashrc
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
[root@study ~]# chmod 777 .bashrc
[root@study ~]# ls -al .bashrc
-rwxrwxrwx. 1 root root 176 Dec 29 2013 .bashrc
  • 符号类型改变文件权限

还有一个改变权限的方法呦!从之前的介绍中我们可以发现,基本上就九个权限分别是(1)user (2)group (3)others三种身份啦!那么我们就可以借由u, g, o来代表三种身份的权限!此外, a 则代表 all 亦即全部的身份!那么读写的权限就可以写成r, w, x。

| chmod | u g o a | +(加入) -(除去) =(设置) | r w x | 文件或目录 |

直接赋给权限:

[root@study ~]# chmod u=rwx,go=rx .bashrc
# 注意喔!那个 u=rwx,go=rx 是连在一起的,中间并没有任何空白字符!
[root@study ~]# ls -al .bashrc
-rwxr-xr-x. 1 root root 176 Dec 29 2013 .bashrc

加上权限:

[root@study ~]# ls -al .bashrc
-rwxr-xr-x. 1 root root 176 Dec 29 2013 .bashrc
[root@study ~]# chmod a+w .bashrc
[root@study ~]# ls -al .bashrc
-rwxrwxrwx. 1 root root 176 Dec 29 2013 .bashrc

减去权限:

[root@study ~]# chmod a-x .bashrc
[root@study ~]# ls -al .bashrc
-rw-rw-rw-. 1 root root 176 Dec 29 2013 .bashrc
[root@study ~]# chmod 644 .bashrc # 测试完毕得要改回来喔!

5.2.3 目录与文件之权限意义

  • 权限对文件的重要性
    • r (read):可读取此一文件的实际内容,如读取文本文件的文字内容等;
    • w (write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件);
    • x (eXecute):该文件具有可以被系统执行的权限。

因为在Windows下面一个文件是否具有执行的能力是借由“ 扩展名 ”来判断的, 例如:.exe, .bat, .com 等等,但是在Linux下面,我们的文件是否能被执行,则是借由是否具有“x”这个权限来决定的!跟文件名是没有绝对的关系的!

至于最后一个w这个权限呢?当你对一个文件具有w权限时,你可以具有写入/编辑/新增/修改文件的内容的权限, 但并不具备有删除该文件本身的权限!对于文件的rwx来说, 主要都是针对“文件的内容”而言,与文件文件名的存在与否没有关系喔!因为文件记录的是实际的数据嘛!

  • 权限对目录的重要性
    • r (read contents in directory):
      表示具有读取目录结构清单的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据。 所以你就可以利用 ls 这个指令将该目录的内容列表显示出来!
    • w (modify contents of directory):
      这个可写入的权限对目录来说,是很了不起的! 因为他表示你具有异动该目录结构清单的权限,也就是下面这些权限:
      • 创建新的文件与目录;
      • 删除已经存在的文件与目录(不论该文件的权限为何!)
      • 将已存在的文件或目录进行更名;
      • 搬移该目录内的文件、目录位置。 总之,目录的w权限就与该目录下面的文件名异动有关就对了啦!
    • x (access directory):
      咦!目录的执行权限有啥用途啊?目录只是记录文件名而已,总不能拿来执行吧?没错!目录不可以被执行,目录的x代表的是使用者能否进入该目录成为工作目录的用途!所谓的工作目录(work directory)就是你目前所在的目录啦!举例来说,当你登陆Linux时, 你所在的主文件夹就是你当下的工作目录。而变换目录的指令是“cd”(change directory)啰!
      在这里插入图片描述
      在这里插入图片描述

5.3 Linux目录配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 绝对路径与相对路径
  • 绝对路径:由根目录(/)开始写起的文件名或目录名称, 例如 /home/dmtsai/.bashrc;
  • 相对路径:相对于目前路径的文件名写法。 例如 ./home/dmtsai 或 …/…/home/dmtsai/ 等等。反正开头不是 / 就属于相对路径的写法;

六、 Linux 的文件与目录管理

6.1 目录与路径

在这里插入图片描述

  • cd:变换目录
    在这里插入图片描述
  • pwd:显示目前的目录
    在这里插入图片描述
  • mkdir:创建一个新的目录
    在这里插入图片描述
  • rmdir:删除一个空的目录
    在这里插入图片描述
  • 关于可执行文件路径的变量: $PATH
  1. 认知:
    在这里插入图片描述
  2. 将/root加入PATH当中
[root@study ~]# PATH="${PATH}:/root"

6.2 文件与目录管理

6.2.1 ls

在这里插入图片描述

6.2.2 cp, rm, mv

  • cp (复制文件或目录)

在这里插入图片描述

  • rm (移除文件或目录)

在这里插入图片描述

  • mv (移动文件与目录,或更名)

在这里插入图片描述
更名方面:在Linux 才有的指令当中,有个 rename , 可以用来更改大量文件的文件名,你可以利用 man rename 来查阅一下,也是挺有趣的指令喔!

6.2.3 取得路径的文件名称与目录名称

在这里插入图片描述

6.3 文件内容查阅

  • cat 由第一行开始显示文件内容
  • tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
  • nl 显示的时候,顺道输出行号!
  • more 一页一页的显示文件内容
  • less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
  • head 只看头几行
  • tail 只看尾巴几行
  • od 以二进制的方式读取文件内容!
  1. cat 由第一行开始显示文件内容
    在这里插入图片描述
  2. tac(反向列示)
    其实就是由最后一行到第一行反向在屏幕上显示出来。(与cat相反)
    在这里插入图片描述
  3. nl(添加行号打印)
    nl 可以将输出的文件内容自动的加上行号!其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等等的功能呢。
    在这里插入图片描述
  4. more(一页一页翻动)
    在这里插入图片描述
    在这里插入图片描述
  5. less(一页一页翻动)
    在这里插入图片描述
    在这里插入图片描述
  6. head (取出前面几行)
    在这里插入图片描述
  7. tail (取出后面几行)
    在这里插入图片描述
  8. 修改文件时间或创建新文件: touch
    linux不同时间的含义:
    在这里插入图片描述
    创建文件:
    在这里插入图片描述
    修改时间:
    在这里插入图片描述
    在这里插入图片描述

6.4 文件与目录的默认权限与隐藏权限

6.4.1 文件默认权限:umask

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.4.2 文件隐藏属性

6.4.3 文件特殊权限: SUID, SGID, SBIT

6.4.4 观察文件类型:file

在这里插入图片描述

6.5 指令与文件的搜寻

6.5.1 指令文件名的搜寻

在这里插入图片描述

6.5.2 文件文件名的搜寻

  • whereis
    在这里插入图片描述
  • locate / updatedb
    在这里插入图片描述
  • find

不过由于 find 在寻找数据的时后相当的操硬盘!所以没事情不要使用find 啦!有更棒的指令可以取代呦!那就是上面提到的 whereis 与 locate 啰!

七、 Linux 磁盘与文件系统管理

八、 文件与文件系统的压缩,打包与备份

在这里插入图片描述
在这里插入图片描述

九、 vim 程序编辑器

9.1 vi 与 vim

  • vi的重要性
    • 所有的 Unix Like 系统都会内置 vi 文书编辑器,其他的文书编辑器则不一定会存在;
    • 很多个别软件的编辑接口都会主动调用 vi (例如未来会谈到的 crontab, visudo, edquota等指令);
    • vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计;
    • 因为程序简单,编辑速度相当快速。

9.2 vi 的使用

9.2.1 简易执行范例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9.2.2 按键说明

第一部份:一般指令模式可用的按钮说明,光标移动、复制贴上、搜寻取代等
在这里插入图片描述
在这里插入图片描述
第二部份:一般指令模式切换到编辑模式的可用的按钮说明

在这里插入图片描述
第三部份:一般指令模式切换到命令行界面的可用按钮说明

在这里插入图片描述

9.3 vim 的额外功能

9.3.1 区块选择(Visual Block)

在这里插入图片描述

9.3.2 多文件编辑

在这里插入图片描述

9.3.3 多窗口功能

在这里插入图片描述

9.3.4 vim 的挑字补全功能

在这里插入图片描述

9.3.5 vim 环境设置与记录: ~/.vimrc, ~/.viminfo

在这里插入图片描述
在这里插入图片描述

9.3.6 vim 常用指令示意图

在这里插入图片描述

十、 认识与学习BASH

10.1 认识 BASH 这个 Shell

  • 命令编修能力 (history)
  • 命令与文件补全功能: ([tab] 按键的好处)
  • 万用字符: (Wildcard)
    在这里插入图片描述
  • 查询指令是否为 Bash shell 的内置命令: type
  • 指令的下达与快速编辑按钮
    在这里插入图片描述

10.2 Shell 的变量功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thomas_Cai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值