目前被称为纯种的Unix指的是System V以及BSD这两套软件。
要实现多任务的环境,除了硬件(主要是CPU)需要能够具有多任务的特性外,操作系统也需要支持这个功能。
如果网络有问题时,去/var/log目录查日志。
各个组件或设备在Linux下面都是一个文件。
Linux中,几乎所有的硬件设备文件都在/dev这个目录内。
正常的物理机器大概使用的都是/dev/sd[a-p]的磁盘文件名,至于虚拟机环境中,为了急速,可能就会使用/dev/vd[a-p]这种设备的文件名。
通常磁盘可能有多个磁盘盘,所有磁盘盘的同一个磁道我们称为磁柱 (Cylinder), 通常那是文件系统的最小单位,也就是分区槽的最小单位啦!
近来有 GPT 这个可达到 64bit 纪录功能的分区表, 现在我们甚至可以使用扇区 (sector)号码来作为分区单位哩!
早期, Linux 系统为了兼容于 Windows 的磁盘,因此使用的是支持 Windows 的 MBR(Master Boot Record, 主要开机纪录区) 的方式来处理开机管理程序与分区表!
启动引导程序记录区与分区表则通通放在磁盘的第一个扇区, 这个扇区通常是512bytes 的大小 (旧的磁盘扇区都是 512bytes),所以说,第一个扇区 512bytes 会有这两个数据:
由于分区表所在区块仅有 64 bytes 容量,因此最多仅能有四组记录区,每组记录区记录了该区段的启始与结束的柱面号码。
这四个分区的记录被称为主要(Primary)或扩展(Extended)分区。重要信息:
扩展分区的目的是使用额外的扇区来记录分区信息,扩展分区本身并不能被拿来格式化。
扩展分区可以切出来逻辑分区,其中逻辑分区的/dev/sda1 - 4,前四个号码都是保留给主要分区或扩展分区使用的,所以逻辑分区的设备名称号码就是从5开始。
MBR主要分区、扩展分区与逻辑分区的特性如下:
分区是以柱面为单位的连续磁盘空间。
如果扩展分区被破坏了,所有逻辑分区将会被删除。
MBR的问题:
现在 GPT 分区预设可以提供多达 128 笔纪录,而在 Linux 本身的核心装置纪录中,针对单一磁盘来说,虽然过去最多只能到达 15 个分区槽,不过由于 Linux kernel 透过 udev 等方式的处理,现在Linux 也已经没有这个限制在了。
此外, GPT 分区已经没有所谓的主、延伸、逻辑分区的概念,既然每笔纪录都可以独立存在, 当然每个都可以视为是主分区!每一个分区都可以拿来格式化使用喔!
新的机制的关系中, 分区槽已经可以突破核心限制的状况。为了查询正确性,网络上有朋友实际拿一颗磁盘分区出 130 个以上的分区槽, 结果他发现 120 个以前的分区槽均可以格式化使用,但是 130 之后的似乎不太能够使用了!或许跟默认的 GPT 共 128 个号码有关!
是否能够读写 GPT 格式与开机的检测程序有关,开机的检测程序又分成 BIOS 与 UEFI 。
目前的主机系统在加载硬件驱动方面的程序,主要有早期的 BIOS 与新的 UEFI 两种机制。
BIOS 就是在开机的时候,计算机系统会主动执行的第一个程序。
启动过程:
如果你的分区表为 GPT 格式的话,那么 BIOS 也能够从 LBA0 的 MBR 兼容区块读取第一阶段的开机管理程序代码, 如果你的开机管理程序能够认识 GPT 的话,那么使用 BIOS同样可以读取到正确的操作系统内核。
Boot loader是操作系统安装在MBR上面的一个软件。由于MBR只有446字节,因此这个启动引导程序是非常小而高效。Boot loader的任务有:
多重引导总结:
UEFI可以直接获取GPT的分区表。
EFI 主要是想要取代 BIOS ,因此我们也称 UEFI 为 UEFI BIOS 就是了。
(1)新添购计算机硬件配备时,需要考虑的角度有『游戏机/工作机』、『效能/价格比』、『效能/消耗瓦数』、『支持度』等;
(2)旧的硬件配备可能由于保存的问题或者是电子零件老化的问题,导致计算机系统非常容易在运作过程中出现不明的当机情况
(3)Red Hat 的硬件支持: https://hardware.redhat.com/?pagename=hcl
(4)在 Linux 系统中,每个装置都被当成一个文件来对待,每个装置都会有装置文件名。
(5)磁盘装置文件名通常分为两种,实际 SATA/USB 装置文件名为/dev/sd[a-p],而虚拟机的装置可能为/dev/vd[a-p]
(6)磁盘的第一个扇区主要记录了两个重要的信息,分别是: (a)主要启动记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有 446 bytes (b)分区表(partition table):记录整颗硬盘分区的状态,有 64 bytes;
(7) 磁盘的 MBR 分区方式中,主要与延伸分区最多可以有四个,逻辑分区的装置文件名号码,一定由 5 号开始;
(8)如果磁盘容量大于 2TB 以上时,系统会自动使用 GPT 分区方式来处理磁盘分区。
(9)GPT 分区已经没有延伸与逻辑分区槽的概念,你可以想象成所有的分区都是主分区!
(10)某些操作系统要使用 GPT 分区时,必须要搭配 UEFI 的新型 BIOS 格式才可安装使用。
(11)开机的流程由: BIOS–>MBR–>-->boot loader–>核心文件;
(12)boot loader 的功能主要有:提供选单、加载核心、转交控制权给其他 loader
(13)boot loader 可以安装的地点有两个,分别是 MBR 与 boot sector
(14)Linux 操作系统的文件使用目录树系统,与磁盘的对应需要有『挂载』的动作才行;
(15)新手的简单分区,建议只要有/及 swap 两个分区槽即可
分区:/boot、/、/home、/swap;
GRUB2一般指GRUB。 GNU GRUB(GRand Unified Bootloader简称“GRUB”)是一个来自GNU项目的多操作系统启动程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。
记住:XFS、LVM
服务器要挂一个UPS,以防断电。
在Linux中,默认root的提示字符是#,而一般身份用户的提示字符是$。
命令行:无论空几个空格,shell都视为一格。当命令太长,可以使用反斜杠(\)来转义回车。
如果命令的输入信息相当长,可以使用shift+PageUp/PageDown,来上下翻页。
locale:显示目前所支持的语系
Linux 的默认壳程序就是 bash。
某个命令忘记怎么用了,可以 --help
如果要看目前有谁在在线,可以下达『who』这个指令
如果要看网络的联机状态,可以下达『netstat -a 』这个指令
如果要看后台执行的程序可以执行『ps -aux 』这个指令
使用这些指令可以让你稍微了解主机目前的使用状态。
正确关机方式:sync;sync;sync;reboot
Linux中,所有账号信息存储在/etc/passwd文件内,密码存储在/etc/shadow文件内,所有组名存储在/etc/group中。
d:目录
-:文件
l:链接文件
b:设备文件里面的可供存储的周边设备
c:设备文件里面的串行端口设备,例如键盘、鼠标
对于文件夹的权限,如果权限是[r--],由于没有x权限,因为没办法进入该目录。
chgrp:修改文件所属用户组
chown:修改文件拥有者
chmod:修改文件的权限,SUID/SGID/SBIT等的特性
-R是递归修改
例子:
chgrp users aaa.conf 修改文件所属组为users
chown xyw aaa.conf 修改文件的所有者是xyw
chmod 777 aaa.conf 用数字类型的方式修改文件权限
chmod u=rwx,go=rwx aaa.conf 用符号类型方式修改文件权限
符号类型中,各个符号的含义如下:
u代表user,g代表group,o代表other,a代表所有身份。
如果不知道原先的文件属性,而只想要增加aaa.conf 这个文件的每个人均可写入的权限, 那么可以使用:chmod a+w aaa.conf
在Linux中,文件是否能被执行,是由是否具有[X]这个权限来决定的,根文件名没关系。
当具有w权限时,可以具有写入、编辑、新增、修改文件内容的权限,但没有删除该文件的权限。
r:表示具有读取目录结构的权限,所以当你具有读取一个目录的权限时,表示你可以查询该目录下的文件名数据,所以你就可以利用ls这个命令将该目录的内容列表显示出来。
w:表示具有改动该目录结构列表的权限,包括:
x:代表的是用户能否进入该目录称为工作目录的用途。
总结,一般来说,rwx主要是针对文件的内容来设计权限,对目录来说,rwx则是针对目录内的文件名列表来设计权限。
通常要放开的目录,一般至少要具备r和x权限。
.代表磁层目录
..代表上一层目录
-代表前一个工作目录
~代表家目录
~account代表account这个使用者的家目录
cp:默认的条件中,cp的源文件与目标文件的权限时不同的,目标文件的拥有者通常回事命令操作者本身。
如果想拷贝文件所有特性,加上参数 -a
cat由第一行开始显示文件内容,一次性显示所有
tac由最后一行开始显示,一次性显示所有
nl显示的时候,同事输出行号,一次性显示所有
more一页一页的显示内容
less与more类似,less还可以往前翻页
head只显示前几行
tail只显示后几行
od以二进制的方式读取文件内容
修改时间:当文件的内容数据变更时,就会更新这个时间。内容数据值的是文件的内容,而不是文件的属性或权限。
状态时间:当该文件的状态改变时,就会更新这个时间。例如权限与属性被更改了,就会更新这个时间。
读取时间:当该文件的内容被读取时,就会更新这个时间。例如用cat读取时,就会更新该时间。
默认情况下:
若用户建立文件,则默认没有可执行(x)权限,也就是最大是666,-rw-rw-rw-
若用户建立文件夹,则默认威所有权军开放,即777,drwxrwxrwx
umask,umask的数字指的是该默认值需要减掉的权限。例如:umask 022
SUID
SGID对文件来说,由如下功能:
SGID对文件夹来说,具有如下功能:
SBIT目前只针对目录有效,功能如下:
which:是根据path这个环境变量所规范的路径,去查找执行文件的文件名,重点是找出执行文件而已,而且which后面接的是完整的文件名。
where:只找系统某些特定目录下的文件。
locate:它是根据已经建立的数据库来查找,所以需要更新数据库。
find:全盘查找。
find能否进行额外的操作,例如:find /usr/bin /usr/sbin -perm /7000 -exec ls -l {} \;
超级区块:记录此文件系统的整体信息,包括inode与数据区块的总量、使用量、剩余量,以及文件系统的格式与相关信息等。
inode:记录文件的权限(rwx)和属性(拥有者、用户组、时间参数等),一个文件占用一个inode,同时记录此文件的数据所在的区块号码;
数据区块:世纪记录文件内容,若文件太大时,会占用多个区块。
新建文件夹时:
当我们在Linux下的文件系统建立一个目录时,文件系统会分配一个inode与至少一块区块给该目录。其中,inode记录该目录的相关权限与属性,并可记录分配到的那块block号码;而bolck则是记录在这个目录下的文件名与改文件名所占用的inode号码数据。
注意1:目录并不只会占用一个 block 而已,当在目录底下的文件数如果太多而导致一个 block 无法容纳的下所有的档名与 inode 对照表时, Linux 会给予该目录多一个 block来继续记录相关的数据;
注意2:新增、删除、更改文件名都与目录的w权限有关,是因为文件名是记录在目录的block当中的。因为我们要去读某个文件时,就务必会经过目录的inode与block,然后才能找到那个待读取的文件的inode号码,最终才会读取到正确的文件的block内的数据。
新建文件时:
文件名的记录是在目录的block当中。
因为超级区块、inode对照表以及区块对照表的数据经常变动,每次新增、删除、编辑时都有可能会影响到这三个部门的数据,因此才被称为元数据。
预备:当系统要写入一个文件时,先会在日志记录区块中记录某个文件准备要写入的信息;
实际写入:开始写入文件的权限与数据;开始更新matedata的数据;
结束:完成数据与metadata的更新后,在日志记录区块当中完成该文件的记录。
系统会将常用的文件数据放置到内存的缓冲区,以加速文件系统的读写操作;
承上,因此Linux物理内存最后被会被用光,这是正常的情况,可加速系统的性能;
你可以使用sync来强制内存中的Dirty的文件会写到磁盘中;
若正常关机时,关机命令会主动调用sync来讲内存中的数据会写磁盘内;
若不正常关机,由于数据尚未回写到磁盘内,因此重新启动后可能会花很多时间在进行磁盘校验,甚至可能导致文件系统的损坏(非磁盘损坏)。
我们可以通过判断inode号码来确认不同文件名是否为相同的文件。
重点是: 挂载点一定是目录,该目录为进入该文件系统的入口。
基本上 xfs 就是一个日志式文件系统,这个 xfs 就是被开发来用于高容量磁盘以及高性能文件系统之用。
xfs文件系统在数据的分布上,主要规划为三个部分,一个数据区、一个文件系统活动登陆区以及一个实时运行区。
xfs 的这个数据区的储存区群组 (allocation groups, AG),你就将它想成是 ext家族的 block 群组 (block groups) 就对了!该数据区也是分为多个储存区群组(allocation groups) 来分别放置文件系统所需要的数据。每个储存区群组都包含了:
此外, inode 与 block 都是系统需要用到时, 这才动态配置产生,所以格式化动作超级快!
这个区域主要被用来记录文件系统的变化,其实有点像日志区。
因为系统所有动作的时候都会在这个区块做个纪录,因此这个区块的磁盘活动是相当频繁的!xfs设计有点有趣,在这个区域中,你可以指定外部的磁盘来作为 xfs 文件系统的日志区块喔!例如,可以将 SSD磁盘作为 xfs 的登录区,这样当系统需要进行任何活动时, 就可以更快速的进行工作!
当有文件要被建立时,xfs 会在这个区段里面找一个到数个的 extent 区块,将文件放置在这个区块内,等到分配完毕后,再写入到 data section 的 inode 与 block 去! 这个 extent 区块的大小得要在格式化的时候就先指定,最小值是 4K 最大可到 1G。一般非磁盘阵列的磁盘默认为 64K容量,而具有类似磁盘阵列的 stripe 情况下,则建议 extent 设定为与 stripe 一样大较佳。这个extent 最好不要乱动,因为可能会影响到实体磁盘的效能。
XFS 文件系统的描述数据观察:xfs_info 例如:xfs_info /dev/sda1
整个 Linux 的系统都是透过一个名为 Virtual Filesystem Switch 的核心功能去读取 filesystem 的。
df:列出文件系统的整体磁盘使用量;由于 df 主要读取的数据几乎都是针对一整个文件系统,因此读取的范围主要是在Superblock 内的信息, 所以这个指令显示结果的速度非常的快速!
du:查看文件系统的磁盘使用量
例如:du -sm /* 查看根目录下每个目录所占用的容量
符号链接:类似于Windows的快捷方式功能的文件,可以让你快速地链接到目标文件;
硬链接:通过文件系统的inode链接来产生新文件名,而不是产生新文件。
也就是说,文件名至于目录有关,文件内容则有inode有关。有没有可能多个文件名对应到同一个inode号码?有的,这就是硬链接。硬链接只是在某个目录下新增一条文件名链接到某个inode号码的关联记录而已。
如果将任何一个硬链接文件名删除,inode与区块都还是存在的。
硬链接只是在某个目录下的区块多写一个关联数据而已,既不会增加inode也不会消耗区块数量。
硬链接不能跨文件系统,也不能链接目录。
符号链接是建立一个独立的文件,而这个文件会让数据的读取指向它链接的那个文件的文件名。
当源文件被删除之后,符号链接的文件会“打不开了”。
由符号链接所连击的文件位一个独立的新文件,会占用inode与区块。
ln 【-s】 源文件 目标文件
不加任何参数,就是硬链接。
lsblk :列出系统上所有磁盘列表
blkid:列出设备的UUID等参数
parted:列出磁盘的分区表类型与分区信息
MBR分区表请使用fdisk分区
GPT分区表请使用gdisk分区
分区步骤:
Partition Table:msdos表示该硬盘基于MBR格式进行的分区
磁盘格式化就是创建文件系统。
命令:make fileysytem,mkfs
如果文件系统发生了错乱,就需要检验。被检查的硬盘分区务必不可挂载到系统上,需要在卸载的状态。
xfs_repair处理XFS文件系统
fsck.ext4处理ext4文件系统
注意:
单一文件系统不应该被重复挂载在不同的挂载点(目录)中;
单一目录不应该重复挂载多个文件系统;
要作为挂载点的目录,理论上应该都是空目录才行;
挂载时,最好用设备的UUID。
开机挂载,必须要修改/etc/fstab。
系统挂载的限制:
直接到/etc/fstab里面修改,就可以实现启动自动挂载。
常见压缩文件扩展名:
*.Z
*.zip
*.gz
*.bz2
*.xz
*.tar
*.tar.gz
*.tar.bz2
*.tar.xz
当使用gzip进行压缩时,在默认的状态下原本的文件会被压缩成.gz后缀的文件,源文件就不再存在了。
压缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称
查询:tar -jtv -f filename.tar.bz2
解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录
-p:保留备份数据的原本权限与属性,常用语备份重要的配置文件。
-P:在使用命令时,不要加-P这个属性。它会保留文件的根目录,将来解压缩文件时,会自动负载对应目录的文件。
用:xfsdump,使用xfsdump时,注意以下限制:
xfsdump默认仅支持文件系统的备份。
dd:它是直接读取扇区,就算没有用到的扇区也会被写入备份文件。
cpio:一般与find命令一起用。
vi有三种模式:一般命令模式、编辑模式、命令行模式。
0:移动到本行最前面
$:移动到本行最后面
gg:移动到文件第一行
G:移动到文件最后一行
dd:删除光标所的那一行
yy:复制光标所在的那一行
u:恢复上一个操作
虽然有六个选项,但日常中通常有2种处理方式:
R:就是Recover,加载xx.swapde文件的内容,然后自己手动删除.swap文件。
D:就是Delete it,删除掉这个缓存文件,会加载原本的文件。
v:字符选择,会将光标经过的地方反白选择
V:行选择,会将广播啊经过的行反白选择
Ctrl + v :可视区块,可以用矩形的方式选择数据
y:将反白的地方复制起来
d:将反白的地方删除
p:将刚刚复制的区块,在光标所在处粘贴
我们必须通过Shell将我们输入的命令与内核沟通,好让内核可以控制硬件来正确无误地工作。
应用程序其实是在最外层,就如同鸡蛋的外壳一样,因此这个东西叫壳程序。
壳程序的功能只是提供用户操作系统的一个界面,因此这个壳程序需要可以调用其他软件才行。
/bin/bash 是Linux默认的Shell。
父进程的自定义变量无法在子进程内使用,但是可以通过export将变量编程环境变量后,就能够在子进程中使用了。
login shell:取得bash时需要完整的登录流程,就成为login shell。例如通过输入账号密码取得bash就称为login shell。
non-login shell:取得bash的方法不需要重复登录的操作,例如,(1)通过x window 登录Linux,再以X图形化接口启动终端,此时这个终端并没有需要再次输入账号密码,该bash环境就称为non-login shell。(2)在原本bash环境下再次执行bash命令,同样也没输入账号密码,那么第二个bash也是non-login shell。
一般login shell只会读取两个文件:
bash的login shell 情况下,所取得的整体环境配置文件其实只有/etc/pfofile,但/etc/pfofile会调用出其他的配置文件。
source:读入环境变量文件的命令
Ctrl + S:暂停屏幕的输出
Ctrl + Q:恢复屏幕的输出
标准输出指的是命令还行所返回的正确信息
标准错误输出可以理解为命令执行失败后,所返回的错误信息。
标准输入:代码为0,使用<或<<
标准输出:代码为1,使用>或>>
标准错误输出:代码为2,使用2> 或 2>>
1>:以覆盖的方法将正确的数据输出到指定的文件或设备上;
1>>:以累加的方法将正确的数据输出到指定的文件或设备上;
2>:以覆盖的方法将错误的数据输出到指定的文件或设备上;
2>>:以累加的方法将错误的数据输出到指定的文件或设备上;
把正确数据和错误数据都写入到文件时,可能会有错乱的现象,这个时候需要这样写:
find /home -name .bashrc > list 2>&1
find /home -name .bashrc &> list
如果不想要错误信息则可以: 2> /dev/null
grep在数据中查询一个字符串时,是以“整行”为单位来进行数据的选取。例如一个文件内有10行,其中有2行具有我们所查询的字符串,则将那两行显示在屏幕上,其他的就丢弃了。
例如:last -n 5 | awk '{print $1 "\t" $3}'
awk的括号内,每一行的每个字段都是有变量名称,那就是$1,$2等。
awk是以行为一次处理的单位,而以字段为最小的处理单位。
脚本的第一行是:#!/bin/bash
shell脚本跟踪
sh -x aaa.sh
-x:将使用到的脚本内容显示到屏幕上,这是很有用的。
每个登录的用户至少都会获取2个ID,UID、GID。
这个文件的构造是这样的:每一行都代表一个帐号,有几行就代表有几个帐号在 你的系统中! 不过需要特别留意的是,里头很多帐号本来就是系统正常运行所必须要 的,我们可以简称他为系统帐号, 例如 bin, daemon, adm, nobody 等等,这些帐号请不要 随意的杀掉他呢!这个文件的内容有点像这样:
内容解释:
1. 帐号名称: 就是帐号啦!用来提供给对数字不太敏感的人类使用来登陆系统的!需要用来对应 UID 喔。例如 root 的 UID 对应就是 0 (第三字段);
2. 密码:早期 Unix 系统的密码就是放在这字段上!但是因为这个文件的特性是所有的程序 都能够读取,这样一来很容易造成密码数据被窃取, 因此后来就将这个字段的密 码数据给他改放到 /etc/shadow 中了。所以这里你会看到一个“ x ”,呵呵!
3.UID:用户标识符。通常 Linux 对于 UID 有几个限制需要说给您了解一下:
4. GID:这个与 /etc/group 有关!其实 /etc/group 的观念与 /etc/passwd 差不多,只是他是用 来规范群组名称与 GID 的对应而已!
5. 使用者信息说明栏: 这个字段基本上并没有什么重要用途,只是用来解释这个帐号的意义而已!不过, 如果您提供使用 finger 的功能时, 这个字段可以提供很多的讯息呢!本章后面的 chfn 指令会来解释这里的说明。
6. 主文件夹:这是使用者的主文件夹,以上面为例, root 的主文件夹在 /root ,所以当 root 登陆 之后,就会立刻跑到 /root 目录里头啦!呵呵! 如果你有个帐号的使用空间特别的 大,你想要将该帐号的主文件夹移动到其他的硬盘去该怎么作? 没有错!可以在 这个字段进行修改呦!默认的使用者主文件夹在 /home/yourIDname
7. Shell:我们在第十章 BASH 提到很多次,当使用者登陆系统后就会取得一个 Shell 来与系 统的核心沟通以进行使用者的操作任务。那为何默认 shell 会使用 bash 呢?就是在 这个字段指定的啰! 这里比较需要注意的是,有一个 shell 可以用来替代成让帐号 无法取得 shell 环境的登陆动作!那就是 /sbin/nologin 这个东西!这也可以用来制作 纯 pop 邮件帐号者的数据呢!
专门管理密码相关数据。同样以:作为分隔符,如果数一数,会发现共有九个字段。
内容解释:
账号名称:由于密码也需要与账号对应啊~因此,这个文件的第一栏就是账号,必须要与 /etc/passwd 相同才行!
密码:这个字段内的数据才是真正的密码,而且是经过编码的密码(加密)啦! 你只会看到有一些特殊符号的字母就是了!需要特别留意的是,虽然这些加密过的密码很难被解出来, 但是“很难“不等于”不会“,所以,这个文件的预设权限是[-r------] 或者是[-------],亦即只有 root 才可以读写就是了! 你得随时注意,不要不小心更动了这个文件的权限呢!
另外,由于各种密码编码的技术不一样,因此不同的编码系统会造成这个字段的长度不相同。 举例来说,旧式的 DES.MD5 编码系统产生的密码长度就与目前惯用的 SHA 不同(注 2)! SHA 密码长度明显的比较长些。由于固定的编码系统产生的密码长度必须一致,因此”当你让这个字段的长度改变后,该密码就会失效(算不出来)“。很多软件透过这个功能,在此字段前加上 !或 * 改变密码字段长度,就会让密码”暂时失效“了。
最近更动密码的日期:这个字段记录了”更动密码那一天“的日期。
密码不可被更动的天数:(与第 3 字段相比)第四个字段记录了: 这个账号的密码在最近一次被更改后需要经过几天才可以再被变更。如果是 0 的话,表示密码随时可以更动的意思。这的限制是为了怕密码被某些人一改再改而设计的。如果设定为 20 天的话,那么当你设定了密码之后,20 天之内都无法改变这个密码呦。
密码需要重新变更的天数:(与第 3字段相比)经常变更密码是个好习惯。为了强制要求用户变更密码,这个字段可以指定在最近一次更改密码后, 在多少天数内需要再次的变更密码才行。你必须要在这个天数内重新设定你的密码,否则这个账号的密码将会[变为过期特性]。 而如果像上面的 99999(计算为 273 年)的话,那就表示,呵呵,密码的变更没有强制性之意。
密码需要变更期限前的警告天数:(与第 5字段相比)当账号的密码有效期限快要到的时候(第 5 字段),系统会依据这个字段的设定,发出[警告]言论给这个账号,提醒他[再过天你的密码就要过期了,请尽快重新设定你的密码呦,如上面的例子,则是密码到期之前的 7 天之内,系统会警告该用户。
密码过期后的账号宽限时间(密码失效日):(与第 5 字段相比)密码有效日期为[更新日期(第 3 字段)] +[重新变更日期(第 5 字段)],过了该期限后用户依旧没有更新密码,那该密码就算过期了。 虽然密码过期但是该账号还是可以用来进行其他工作的,包括登入系统取得bash 。不过如果密码过期了, 那当你登入系统时,系统会强制要求你必须要重新设定密码才能登入继续使用喔,这就是密码过期特性。那这个字段的功能是什么呢?是在密码过期几天后,如果使用者还是没有登入更改密码,那么这个账号的密码将会了失效, 亦即该账号再也无法使用该密码登入了。要注意密码过期与密码失效并不相同。
账号失效日期:这个日期跟第三个字段一样,都是使用 1970 年以来的总日数设定。这个字段表示: 这个账号在此字段规定的日期之后,将无法再使用。 就是所谓的了账号失效,此时不论你的密码是否有过期,这个账号都不能再被使用!这个字段会被使用通常应该是在[收费服务]的系统中,你可以规定一个日期让该账号不能再使用啦!
保留:最后一个字段是保留的,看以后有没有新功能加入。
这个文件就是在记录GID与组名的对应关系。
这个文件每一行代表一个群组,也是以冒号 : 作为字段的分隔符,共分为四栏,每一字段的意义是:
组名:就是组名啦!同样用来给人类使用的,基本上需要与第三字段的 GID 对应。
群组密码:通常不需要设定,这个设定通常是给[群组管理员] 使用的,目前很少有这个机会设定群组管理员啦! 同样的,密码已经移动到 /etc/gshadow 去,因此这个字段只会存在一个 x 而已。
GID:就是群组的 ID 啊。我们 etc/passwd 第四个字段使用的 GID 对应的群组名,就是由这里对应出来的!
此群组支持的账号名称:我们知道一个账号可以加入多个群组,那某个账号想要加入此群组时,将该账号填入这个字段即可。 举例来说,如果我想要让 dmtsai 与 aex 也加入 root 这个群组,那么在第一行的最后面加上 [dmtsai.alex]注意不要有空格,使成为” root:x:0:dmtsai.alex “就可以了。
谈完了etc/passwd,/etc/shadow,/etc/group 之后,我们可以使用一个简单的图示来了解一下UID/GID 与密码之间的关系, 图示如下。其实重点是 /etc/passwd ,其他相关的数据都是根据这个文件的字段去找寻出来的。下图中, root 的 UID 是 0,而 GID 也是 0 ,去找 /etc/group 可以知道 GID 为 0 时的组名就是 root 。至于密码的寻找中,会找到 etc/shadow 与 /etc/passwd 内同账号名称的那一行,就是密码相关数据了。
至于在 /etc/group 比较重要的特色在于第四栏啦,因为每个使用者都可以拥有多个支持的群组,这就好比在学校念书的时候, 我们可以加入多个社团一样!
知道所有支持的群组。
这个命令,可以查询用户同时属于哪几个群组,而且,第一个输出的群组即为有效群组 (effective group) 了。如果用户dmtsai的有效群组为 dmtsai ,此时,如果以 touch 去建立一个新档,例如: touch test ,那么这个文件的拥有者为 dmtsai,而且群组也是 dmtsai 。
有效群组的切换。不过使用 newgrp 是有限制的,那就是你想要切换的群组必须是你已经有支持的群组。这个指令可以变更目前用户的有效群组, 而且是另外以一个 shell 来提供这个功能的,所以,使用者会是以另一个 shell 登入的,而且新的 shell 给予用户有效 GID为新组了。如图:
虽然用户的环境设定(例如环境变量等等其他数据)不会有影响,但是使用者的[群组权限] 将会重新被计算。但是需要注意,由于是新取得一个 shell ,因此如果你想要回到原本的环境中,请输入 exit回到原本的 shell 喔!
gshadow 最大的功能就是建立群组管理员。由于目前有类似 sudo 之类的工具, 所以这个群组管理员的功能已经很少使用了。
四个字段的意义为:
[root@study ~]# useradd [-u UID] [-g 初始群组] [-G 次要群组] [-mM]\ > [-c 说明栏] [-d 主文件夹绝对路径] [-s shell] 使用者帐号名 选项与参数: -u :后面接的是 UID ,是一组数字。直接指定一个特定的 UID 给这个帐号; -g :后面接的那个群组名称就是我们上面提到的 initial group 啦~ 该群组的 GID 会被放置到 /etc/passwd 的第四个字段内。 -G :后面接的群组名称则是这个帐号还可以加入的群组。 这个选项与参数会修改 /etc/group 内的相关数据喔! -M :强制!不要创建使用者主文件夹!(系统帐号默认值) -m :强制!要创建使用者主文件夹!(一般帐号默认值) -c :这个就是 /etc/passwd 的第五栏的说明内容啦~可以随便我们设置的啦~ -d :指定某个目录成为主文件夹,而不要使用默认值。务必使用绝对路径! -r :创建一个系统的帐号,这个帐号的 UID 会有限制 (参考 /etc/login.defs) -s :后面接一个 shell ,若没有指定则默认是 /bin/bash 的啦~ -e :后面接一个日期,格式为“YYYY-MM-DD”此项目可写入 shadow 第八字段, 亦即帐号失效日的设置项目啰; -f :后面接 shadow 的第七字段项目,指定密码是否会失效。0为立刻失效, -1 为永远不失效(密码只会过期而强制于登陆时重新设置而已。) 范例一:完全参考默认值创建一个使用者,名称为 vbird1 [root@study ~]# useradd vbird1 [root@study ~]# ll -d /home/vbird1 drwx------. 3 vbird1 vbird1 74 Jul 20 21:50 /home/vbird1 # 默认会创建使用者主文件夹,且权限为 700 !这是重点! [root@study ~]# grep vbird1 /etc/passwd /etc/shadow /etc/group /etc/passwd:vbird1:x:1003:1004::/home/vbird1:/bin/bash /etc/shadow:vbird1:!!:16636:0:99999:7::: /etc/group:vbird1:x:1004: <==默认会创建一个与帐号一模一样的群组名 |
CentOS 这些默认值主要会帮我们处理几个项目:
我们在谈到 UID 的时候曾经说过一般账号应该是 1000 号以后,那用户自己建立的系统账号则一般是小于 1000 号以下的。 所以在这里我们加上 -r 这个选项以后,系统就会主动将账号与账号同名群组的 UID/GID 都指定小于 1000 以下, 在本案例中则是使用 699(UID) 与699(GID)。
(1)/etc/default/useradd
useradd的默认数据都是参考的这个文件。但是Centos有自己的机制,默认值略有不同。useradd 的默认值可以使用下面的方法调用出来:
这个数据其实是由 /etc/default/useradd 调用出来的!你可以自行用 vim 去观察该 文件的内容。搭配上头刚刚谈过的范例一的运行结果,上面这些设置项目所造成的行为 分别是: GROUP=100:新建帐号的初始群组使用 GID 为 100 者 系统上面 GID 为 100 者即是 users 这个群组,此设置项目指的就是让新设使 用者帐号的初始群组为 users 这一个的意思。 但是我们知道 CentOS 上面并不是这 样的,在 CentOS 上面默认的群组为与帐号名相同的群组。 举例来说, vbird1 的初 始群组为 vbird1 。怎么会这样啊?这是因为针对群组的角度有两种不同的机制所 致, 这两种机制分别是: 私有群组机制:系统会创建一个与帐号一样的群组给使用者作为初始群组。 这种群组的 设置机制会比较有保密性,这是因为使用者都有自己的群组,而且主文件夹权 限将会设置为 700 (仅有自己可进入自己的主文件夹) 之故。使用这种机制将 不会参考 GROUP=100 这个设置值。代表性的 distributions 有 RHEL, Fedora, CentOS 等; 公共群组机制:就是以 GROUP=100 这个设置值作为新建帐号的初始群组,因此每个帐号 都属于 users 这个群组, 且默认主文件夹通常的权限会是“ drwxr-xr-x ... username users ... ”,由于每个帐号都属于 users 群组,因此大家都可以互相分享主文件夹 内的数据之故。代表 distributions 如 SuSE等。 由于我们的 CentOS 使用私有群组机制,因此这个设置项目是不会生效的! 不要太紧张啊! HOME=/home:使用者主文件夹的基准目录(basedir) 使用者的主文件夹通常是与帐号同名的目录,这个目录将会放置在此设置值的目录后。所以 vbird1 的主文件夹就会在 /home/vbird1/ 了!很容易理解吧! INACTIVE=-1:密码过期后是否会失效的设置值 我们在 shadow 文件结构当中谈过,第七个字段的设置值将会影响到密码过 期后, 在多久时间内还可使用旧密码登陆。这个项目就是在指定该日数啦!如果 是 0 代表密码过期立刻失效, 如果是 -1 则是代表密码永远不会失效,如果是数 字,如 30 ,则代表过期 30 天后才失效。 EXPIRE=:帐号失效的日期 就是 shadow 内的第八字段,你可以直接设置帐号在哪个日期后就直接失 效,而不理会密码的问题。 通常不会设置此项目,但如果是付费的会员制系统, 或许这个字段可以设置喔! SHELL=/bin/bash:默认使用的 shell 程序文件名 SKEL=/etc/skel:使用者主文件夹参考基准目录 这个咚咚就是指定使用者主文件夹的参考基准目录啰~举我们的范例一为 例, vbird1 主文件夹 /home/vbird1 内的各项数据,都是由 /etc/skel 所复制过去的~ 所以呢,未来如果我想要让新增使用者时,该使用者的环境变量 ~/.bashrc 就设置 妥当的话,您可以到 /etc/skel/.bashrc 去编辑一下,也可以创建 /etc/skel/www 这个 目录,那么未来新增使用者后,在他的主文件夹下就会有 www 那个目录了!这样 瞭呼? CREATE_MAIL_SPOOL=yes:创建使用者的 mailbox 你可以使用“ ll /var/spool/mail/vbird1 ”看一下,会发现有这个文件的存在 喔!这就是使用者的邮件信箱! |
(2)/etc/login.defs
这个文件规范的数据则是如下所示: mailbox 所在目录: 使用者的默认 mailbox 文件放置的目录在 /var/spool/mail,所以 vbird1 的 mailbox 就是在 /var/spool/mail/vbird1 啰! shadow 密码第 4, 5, 6 字段内容: 通过 PASS_MAX_DAYS 等设置值来指定。所以你知道为何默认的 /etc/shadow 内每一行都会有“ 0:99999:7 ”的存在了吗?^_^!不过要注意的是,由于目前我们登 陆时改用 PAM 模块来进行密码检验,所以那个 PASS_MIN_LEN 是失效的! UID/GID 指定数值: 虽然 Linux 核心支持的帐号可高达 232 这么多个,不过一部主机要作出这么多帐号,在管理上也是很麻烦的! 所以在这里就针对 UID/GID 的范围进行规范。上表中的 UID_MIN 指的就是可登陆系统的一般帐号的最小 UID ,至于UID_MAX则是最大UID之意。 要注意的是,系统给予一个帐号 UID 时,他是 (1)先参考 UID_MIN 设置值取得最小数值; (2)由 /etc/passwd 搜寻最大的 UID 数值, 将 (1) 与 (2) 相比, 找出最大的那个再加一就是新帐号的 UID 了。我们上面已经作出 UID 为 1500 的 vbird2 , 如果再使用“ useradd vbird4 ”时,你猜 vbird4 的 UID 会是多少?答案是: 1501 。 所以中间的 1004~1499 的号码就空下来啦! 而如果我是想要创建系统用的帐号,所以使用 useradd -r sysaccount 这个 -r 的选项 时,就会找“比 201 大但比 1000 小的最大的 UID ”就是了。 ^_^ 用户家目录设置值: 为何我们系统默认会帮使用者创建主文件夹?就是这个“CREATE_HOME = yes”的设置值。这个设置值会让你在使用 useradd 时, 主动加入“ -m ”这个产生主文件夹的选项。如果不想要创建使用者主文件夹,就只能强制加上“ -M ”的选项在 useradd 指令执行时啦!至于创建主文件夹的权限设置呢?就通过 umask 这个设置 值啊!因为是 077 的默认设置,因此使用者主文件夹默认权限才会是“ drwx------ ”哩! 使用者删除与密码设置值:使用“USERGROUPS_ENAB yes”这个设置值的功能是: 如果使用 userdel 去删除一 个帐号时,且该帐号所属的初始群组已经没有人隶属于该群组了, 那么就删除掉 该群组,举例来说,我们刚刚有创建 vbird4 这个帐号,他会主动创建 vbird4 这个 群组。 若 vbird4 这个群组并没有其他帐号将他加入支持的情况下,若使用 userdel vbird4 时,该群组也会被删除的意思。 至于“ENCRYPT_METHOD SHA512”则表示 使用 SHA512 来加密密码明文,而不使用旧式的 MD5。 |
现在你知道啦,使用 useradd 这支程序在创建 Linux 上的帐号时,至少会参考:
/etc/default/useradd, /etc/login.defs, /etc/skel/*这些文件,不过,最重要的其实是创建 /etc/passwd, /etc/shadow, /etc/group, /etc/gshadow 还有使用者主文件夹就是了~所以,如果你了解整个系统运行的状态,也是可以手动直接修改这几个文件就是了。
要帮一般账号建立密码需要使用『passwd 账号 』的格式,使用『passwd 』表示修改自己的密码!
usermod命令修改系统帐户及账户相关的各项属性。如果用户的数字用户ID、用户名或用户的主目录发生更改,则必须确保在执行此命令时,命名用户未执行任何进程。usermod在Linux上对此进行检查,但仅检查用户是否根据其他架构上的utmp登录。您必须手动更改任何crontab文件或at作业的所有者。必须在NIS服务器上进行涉及NIS的任何更改。usermod命令的操作修改的是/etc/passwd和/etc/shadow这两个文件中的内容。
通常我们要移除一个账号的时候,也可以手动的将 /etc/passwd 与/etc/shadow 里头的该账号取消即可!
一般而言,如果该账号只是『暂时不启用』的话,那么将/etc/shadow 里头账号失效日期 (第八字段) 设定为 0 就可以让该账号无法使用,但是所有跟该账号相关的数据都会留下来!
查询某人或自己相关的UID/GID;id 这个指令则可以查询某人或自己的相关 UID/GID 等等的信息。
finger 类似指纹的功能,他会将使用者的相关属性列出来!其实他列出来的几乎都是 /etc/passwd 文件里面的东西。
除非是你的主机有很多的用户,否则倒真是用不着这个程序。
列出目前系统上面可用的 shell ,其实就是 /etc/shells 的内容。设置修改自己的 Shell。
不论是 chfn 与 chsh ,都是能够让一般使用者修改 /etc/passwd 这个系统文件的! 所以你猜猜,这两个文件的权限是什么? 一定是 SUID 的功能啦!
有时候,除了本机的帐号之外,我们可能还会使用到其他外部的身份验证服务器 所提供的验证身份的功能!举例来说, windows 下面有个很有名的身份验证系统,称为 Active Directory (AD)的东西,还有 Linux 为了提供不同主机使用同一组帐号密码, 也会使用到 LDAP, NIS 等服务器提供的身份验证等等!如果你的 Linux 主机要使用到上面提到的这些外部身份验证系统时,可能就得要 额外的设置一些数据了! 为了简化使用者的操作流程,所以 CentOS 提供一只名为 authconfig-tui 的指令给我们参考。
ACL 可以针对单一使用者,单一文件或目录来进行 r,w,x 的权限规范,对于需要特殊权限的使用状况非常有帮助。ACL 主要可以针对哪些方面来控制权限呢?他主要可以针对几个项目:
也就是说,如果你有一个目录,需要给一堆人使用,每个人或每个群组所需要的 权限并不相同时,在过去,传统的 Linux 三种身份的三种权限是无法达到的, 因为基本 上,传统的 Linux 权限只能针对一个用户、一个群组及非此群组的其他人设置权限而 已,无法针对单一用户或个人来设计权限。 而 ACL 就是为了要改变这个问题.
取得某个文件/目录的 ACL 设置项目;
设置某个目录/文件的 ACL 规范。利用“ u:使用者:权限 ”的方式来设置
针对单一用户设置:
setfacl -m u:vbird1:rx acl_test1
setfacl -m u::rwx acl_test1 # 设置值中的 u 后面无使用者列表,代表设置该文件拥有者。
针对特定的单一群组设置:
setfacl -m g:mygroup1:rx acl_test1
针对有效权限设置:“ m:权限 ”
mask指使用者或群组所设置的权限必须要存在于 mask 的 权限设置范围内才会生效,此即“有效权限 (effective permission)”。
选项 | 功能 |
---|---|
-m 参数 | 设定 ACL 权限。如果是给予用户 ACL 权限,参数则使用 "u:用户名:权限" 的格式,例如 setfacl -m u:st:rx /project 表示设定 st 用户对 project 目录具有 rx 权限;如果是给予组 ACL 权限,参数则使用 "g:组名:权限" 格式,例如 setfacl -m g:tgroup:rx /project 表示设定群组 tgroup 对 project 目录具有 rx 权限。 |
-x 参数 | 删除指定用户(参数使用 u:用户名)或群组(参数使用 g:群组名)的 ACL 权限,例如 setfacl -x u:st /project 表示删除 st 用户对 project 目录的 ACL 权限。 |
-b | 删除所有的 ACL 权限,例如 setfacl -b /project 表示删除有关 project 目录的所有 ACL 权限。 |
-d | 设定默认 ACL 权限,命令格式为 "setfacl -m d:u:用户名:权限 文件名"(如果是群组,则使用 d:g:群组名:权限),只对目录生效,指目录中新建立的文件拥有此默认权限,例如 setfacl -m d:u:st:rx /project 表示 st 用户对 project 目录中新建立的文件拥有 rx 权限。默认 ACL 权限只对目录生效。 |
-R | 递归设定 ACL 权限,指设定的 ACL 权限会对目录下的所有子文件生效,命令格式为 "setfacl -m u:用户名:权限 -R 文件名"(群组使用 g:群组名:权限),例如 setfacl -m u:st:rx -R /project 表示 st 用户对已存在于 project 目录中的子文件和子目录拥有 rx 权限。 |
-k | 删除默认 ACL 权限。 |
以“ su - ”直接将身份变成 root 即可,但是这个指令却需要 root 的密码,也就是说, 如果你要以 su 变成 root 的话,你的一般使用者就必须要有 root 的密码才行;
以“ sudo 指令 ”执行 root 的指令串,由于 sudo 需要事先设置妥当,且 sudo 需要输 入使用者自己的密码, 因此多人共管同一部主机时, sudo 要比 su 来的好喔!至少 root 密码不会流出去!
切换root一定要: su -
切换其他用户就是:su -l 用户名
若要完整的切换到新使用者的环境,必须要使用“ su - username ”或“ su -l username”, 才会连同 PATH/USER/MAIL 等变量都转成新使用者的环境;
如果仅想要执行一次 root 的指令,可以利用“ su - -c "指令串" ”的方式来处理;
使用 root 切换成为任何使用者时,并不需要输入新使用者的密码。
并非 所有人都能够执行 sudo , 而是仅有规范到 /etc/sudoers 内的用户才能够执行 sudo。
sudo 的执行是这样的流程:
当使用者执行 sudo 时,系统于 /etc/sudoers 文件中搜寻该使用者是否有执行 sudo 的 权限;
若使用者具有可执行 sudo 的权限后,便让使用者“输入使用者自己的密码”来确 认;
若密码输入成功,便开始进行 sudo 后续接的指令(但 root 执行 sudo 时,不需要输 入密码);
若欲切换的身份与执行者身份相同,那也不需要输入密码。
能否使用 sudo 必须要看 /etc/sudoers 的设置值, 而可使用 sudo 者是通过输入使用者自己的密码来执行后续的指令串。查看/etc/sudoers文件需要使用visudo命令。
PAM 可以说是一套应用程序接口 (Application Programming Interface, API),他 提供了一连串的验证机制,只要使用者将验证阶段的需求告知 PAM 后, PAM 就能够回 报使用者验证的结果 (成功或失败)。
我 们同样以 passwd 这个指令的调用 PAM 来说明好了。 当你执行 passwd 后,这支程序调 用 PAM 的流程是:
使用者开始执行 /usr/bin/passwd 这支程序,并输入密码;
passwd调用PAM模块进行验证;
PAM模块会到/etc/pam.d/找寻与程序(passwd)同名的配置文件;
依据 /etc/pam.d/passwd 内的设置,引用相关的 PAM 模块逐步进行验证分析;
将验证结果(成功、失败以及其他讯息)回传给passwd这支程序;
passwd这支程序会根据PAM回传的结果决定下一个动作(重新输入新密码或者通过验证!)
如果你想要知道目前已登陆在系统上面的使用者呢?可以通过 w 或 who 来查询。
针对网络服务的设计,比较常实用的几个情况是:
针对 Linux 系统主机上面的设置那么使 用的方向有下面这一些:
基本上,针对 quota 限制的项目主要有三项,如下所示:
主要命令:xfs_quota
RAID-0 (等量模式, stripe):性能最佳
这种模式的 RAID 会将磁盘先切出等量的区块 (名为chunk,一般可设置 4K~1M 之间), 然后当一 个文件要写入 RAID 时,该文件会依据 chunk 的大小切割好,之后再依序放到各个磁盘 里面去。由于每个磁盘会交错的存放数据, 因此当你的数据要写入 RAID 时,数据会被 等量的放置在各个磁盘上面。越多颗磁盘组成的 RAID-0 性能会越好,因为每颗负责的数据量就更低了!RAID-0 只要有任何一颗磁盘损毁,在 RAID 上面的所有数据都 会遗失而无法读取。
RAID-1 (映射模式, mirror):完整备份
这种模式也是需要相同的磁盘容量的,最好是一模一样的磁盘啦!如果是不同容 量的磁盘组成 RAID-1 时,那么总容量将以最小的那一颗磁盘为主!这种模式主要是“让 同一份数据,完整的保存在两颗磁盘上头”。因此,整体 RAID 的容量几乎少了 50%。虽然 RAID-1 的写入性能不佳,不过读取的性能则还可以啦!
RAID 1+0,RAID 0+1
所谓的 RAID 1+0 就是: (1)先让两颗磁盘组成 RAID 1,并且这样的设置共有两组; (2) 将这两组 RAID 1 再组成一组 RAID 0。这就是 RAID 1+0 啰!反过来说,RAID 0+1 就是 先组成 RAID-0 再组成 RAID-1 的意思。
RAID 5:性能与数据备份的均衡考虑
RAID-5 至少需要三颗以上的磁盘才能够组成这种类型的磁盘阵列。这种磁盘阵 列的数据写入有点类似 RAID-0 , 不过每个循环的写入过程中 (striping),在每颗磁 盘还加入一个同位检查数据 (Parity) ,这个数据会记录其他磁盘的备份数据, 用于当 有磁盘损毁时的救援。RAID 5 的总容量会是整体磁盘数量减一颗。
RAID 6
RAID 6 则使用两颗磁盘的容量作为 parity 的储存,因此整体的 磁盘容量就会少两颗,但是允许出错的磁盘数量就可以达到两颗了! 也就是在 RAID 6 的情况下,同时两颗磁盘损毁时,数据还是可以救回来!
硬件磁盘阵列:磁盘阵列卡
软件磁盘阵列: mdadm软件
硬件磁盘阵列在 Linux 下面看起来就是一颗实际的大磁盘,因此硬件磁盘阵列的设备文件名为 /dev/sd[a-p] ,因为使用到 SCSI 的模块之故。至于软件磁盘阵列则是系统仿真的,因此使用的设备文件名是系统的设备文件, 文件名 为 /dev/md0, /dev/md1...,两者的设备文件名并不相同!
LVM 的重点在于“可以弹性的调整 filesystem 的容量!
LVM 可以整合多个实体 partition 在一起, 让这些 partitions 看起来就像是一个磁盘一样!而 且,还可以在未来新增或移除其他的实体 partition 到这个 LVM 管理的磁盘当中。
Physical Volume, PV, 实体卷轴
我们实际的 partition (或 Disk) 需要调整系统识别码 (system ID) 成为 8e (LVM 的识别码),然后再经过 pvcreate 的指令将他转成 LVM 最底层的实体卷轴 (PV) ,之后才能够将这些 PV 加以利用! 调整 system ID 的方是就是通过 gdisk 啦!
Volume Group, VG, 卷轴群组
所谓的 LVM 大磁盘就是将许多 PV 整合成这个 VG 的东西就是啦!所以 VG 就是 LVM 组合起来的大磁盘!这么想就好了。 那么这个大磁盘最大可以到多少容 量呢?这与下面要说明的 PE 以及 LVM 的格式版本有关喔~在默认的情况下, 使 用 32位的 Linux 系统时,基本上 LV 最大仅能支持到 65534 个 PE 而已,若使用默 认的 PE 为 4MB 的情况下, 最大容量则仅能达到约 256GB 而已~不过,这个问题 在 64位的 Linux 系统上面已经不存在了!LV 几乎没有啥容量限制了!
Physical Extent, PE, 实体范围区块
LVM 默认使用 4MB 的 PE 区块,而 LVM 的 LV 在 32 位系统上最多仅能含有 65534 个 PE (lvm1 的格式),因此默认的 LVM 的 LV 会有 4M*65534/ (1024M/G)=256G。这个 PE 很有趣喔!他是整个 LVM 最小的储存区块,也就是 说,其实我们的文件数据都是借由写入 PE 来处理的。简单的说,这个 PE 就有点 像文件系统里面的 block 大小啦。 这样说应该就比较好理解了吧?所以调整 PE 会 影响到 LVM 的最大容量喔!不过,在 CentOS 6.x 以后,由于直接使用 lvm2 的各项 格式功能,以及系统转为 64 位,因此这个限制已经不存在了。
Logical Volume, LV, 逻辑卷轴
最终的 VG 还会被切成 LV,这个 LV 就是最后可以被格式化使用的类似分区 的咚咚了!那么 LV 是否可以随意指定大小呢? 当然不可以!既然 PE 是整个 LVM
的最小储存单位,那么LV的大小就与在此LV内的PE总数有关。为了方便使用者 利用 LVM 来管理其系统,因此 LV 的设备文件名通常指定为“ /dev/vgname/lvname ”的样式!
此外,我们刚刚有谈到 LVM 可弹性的变更 filesystem 的容量,那是如何办到 的?其实他就是通过“交换 PE ”来进行数据转换, 将原本 LV 内的 PE 移转到其他设 备中以降低 LV 容量,或将其他设备的 PE 加到此 LV 中以加大容量! VG、LV 与 PE 的关系有点像下图:
LVM 必需要核心有支持且需要安装 lvm2 这个软件, CentOS 与其他较新的Linux发行版已经默认将 lvm 的支持与软件都安装妥当了!
PV阶段 -> VG阶段 -> LV阶段
需要下面这些流程的:
LVM Thin Volume可以实现实际用多少才分配多少容量给LV。
LVM Thin Volume概念是:先创建一个可 以实支实付、用多少容量才分配实际写入多少容量的磁盘容量储存池 (thin pool), 然 后再由这个 thin pool 去产生一个“指定要固定容量大小的 LV 设备”,这个 LV 就有趣了! 虽然你会看到“宣告上,他的容量可能有 10GB ,但实际上, 该设备用到多少容量时, 才会从 thin pool 去实际取得所需要的容量”!
at :at 是个可以处理仅执行一次就结束调度的指令,不过要执行 at 时, 必须要有 atd 这个服务 (第十七章) 的支持才行。在某些新版的 distributions 中,atd 可能默 认并没有启动,那么 at 这个指令就会失效呢!不过我们的 CentOS 默认是启动的!
crontab :crontab 这个指令所设置的工作将会循环的一直进行下去! 可循环的时间 为分钟、小时、每周、每月或每年等。crontab 除了可以使用指令执行外,亦可编 辑 /etc/crontab 来支持。 至于让 crontab 可以生效的服务则是 crond 这个服务喔!
首先,确保atd启动。
[root@study ~]# systemctl restart atd # 重新启动 atd 这个服务
[root@study ~]# systemctl enable atd # 让这个服务开机就自动启动
[root@study ~]# systemctl status atd # 查阅一下 atd 目前的状态
然后,使用 at 这个指令来产生所要运行的工作,并将这个工作以文本文件的方式写入/var/spool/at/ 目录内,该工作便能等待 atd 这个服务的使用与执行了。
为了安全考虑,at 的工作情况其实是这样的:
at 的执行与终端机环境无关,而所有 standard output/standard error output 都会传送到执行者的 mailbox 去。
循环执行的例行性工作调度则是由 cron (crond) 这个系统服务来控制的。
控制计划任务的命令是:crontab
为了安全考虑,crontab的工作情况其实是这样的:
当使用者使用 crontab 这个指令来创建工作调度之后,该项工作就会被纪录到 /var/spool/cron/ 里面去了,而且是以帐号来作为判别的喔!举例来说, dmtsai 使用 crontab 后, 他的工作会被纪录到 /var/spool/cron/dmtsai 里头去!但请注意,不要使用 vi 直接编辑该文件, 因为可能由于输入语法错误,会导致无法执行 cron 喔!另外, cron 执行的每一项工作都会被纪录到 /var/log/cron 这个登录文件中,所以啰,如果你的 Linux 不知道有否被植入木马时,也可以搜寻一下 /var/log/cron 这个登录文件呢!
crontab -e 这个 crontab 其实是 /usr/bin/crontab 这个可执行文件。
/etc/crontab 可是一 个“纯文本文件”,我们可以编辑这个文件。
cron 这个服务的最低侦测限制是“分钟”,所以“ cron 会每分钟去读取一 次 /etc/crontab 与 /var/spool/cron 里面的数据内容 ”,因此,只要你编辑完 /etc/crontab 这 个文件,并且将他储存之后,那么 cron 的设置就自动的会来执行了!
总结:
系统关机了,任务没有被执行怎么办?anacron可以解决。
anacron 存在的目的就在于我们上头提到 的,在处理非 24 小时一直启动的 Linux 系统的 crontab 的执行! 以及因为某些原因导致 的超过时间而没有被执行的调度工作。anacron 也是每个小时被 crond 执行一次,然后 anacron 再去检测相关的调度 任务有没有被执行,如果有超过期限的工作在, 就执行该调度任务,执行完毕或无须 执行任何调度时,anacron 就停止了。
最后,我们来总结一下本章谈到的许多配置文件与目录的关系吧!这样我们才能 了解 crond 与 anacron 的关系:
在 Linux 系统当中:“触发任何一个事件时,系统都会将他定义成为一个程 序,并且给予这个程序一个 ID ,称为 PID,同时依据启发这个程序的使用者与相关属 性关系,给予这个 PID 一组有效的权限设置。”
程序 (program):通常为 binary program ,放置在储存媒体中 (如硬盘、光盘、软盘、磁带等), 为实体文件的型态存在;
进程 (process):程序被触发后,执行者的权限与属性、程序的程序码与所需数据等都会被载入内存中, 操作系统并给予这个内存内的单元一个识别码 (PID),可以说,进程就是一个正在运行中的程序。
有的进程有父进程,PPID。
进行工作管理的行为中, 其实每个工作都是目前 bash 的子程序,亦即彼此之间是有相关性的。 我们无法以 job control 的方式由 tty1 的环境去管理 tty2 的 bash !
最简单的方法就是利用“ & ” ,例如:cp file1 file2 &
在这一串指令中,重点在那个 & 的功能,他表示将 file1 这个文件复制为 file2 ,且放置于背景中执行, 也就是说执行这一个命令之后,在这一个终端接口仍然可以做其他的工作!而当这一个指令 (cp file1 file2) 执行完毕之后,系统将会在你的终端接口显示完成的消息!
最大的好处是: 不怕被 [ctrl]+c 中断。
例如:在 vim 的一般模式下,按下 [ctrl] 及 z 这两个按键,屏幕上会出现 [1] ,表示这是第一个任务, 而那个 + 代表最近一个被丢进后台的任务,且目前在后台默认会被使用的那个任务 (与 fg 这个指令有关 )!而那个 Stopped 则代表目前这个工作的状态。在默认的情况下,使用 [ctrl]-z 丢到后台当中的工作都是“暂停”的状态!
+ 代表最近被放到后台的工作号码, - 代表最近最后第二个被放置到后台中 的工作号码。
fg %jobnumbner
bg %jobnumbner
kill -9 或 kill -15
-9 这个信号通常是用在“强制删除一个不正常的工作”时所使 用的, -15 则是以正常步骤结束一项工作(15也是默认值)。
在这样的情况下,如果你是以远端连线 方式连接到你的 Linux 主机,并且将工作以 & 的方式放到背景去, 请问,在工作尚未 结束的情况下你离线了,该工作还会继续进行吗?答案是“否”!不会继续进行,而是会 被中断掉。
可以尝试使用 nohup 这个指 令来处理。
例如: nohup ./sleep500.sh &
一个是只能查阅 自己 bash 程序的“ ps -l ”
一个则是可以查阅所有系统运行的程序“ ps aux ”
如果你发现在某个程序的 CMD 后面还接上
top前几行的解释:
第一行(top...):这一行显示的信息分别为:
目前的时间,亦即是 00:53:59 那个项目; 开机到目前为止所经过的时间,亦即是 up 6:07, 那个项目; 已经登陆系统的使用者人数,亦即是 3 users, 项目;
系统在 1, 5, 15 分钟的平均工作负载。我们在第十五章谈到的 batch 工作方式为 负载小于 0.8 就是这个负载啰!代表的是 1, 5, 15 分钟,系统平均要负责运行 几个程序(工作)的意思。 越小代表系统越闲置,若高于 1 得要注意你的系 统程序是否太过繁复了!
第二行(Tasks...):显示的是目前程序的总量与个别程序在什么状态(running, sleeping, stopped, zombie)。 比较需要注意的是最后的 zombie 那个数值,如果不是 0 !好好看看到底是那个 process 变成僵尸了吧?
第三行(%Cpus...):显示的是 CPU 的整体负载,每个项目可使用 ? 查阅。需要特 别注意的是 wa 项目,那个项目代表的是 I/O wait, 通常你的系统会变慢都是 I/O 产生的问题比较大!因此这里得要注意这个项目耗用 CPU 的资源喔! 另外,如果 是多核心的设备,可以按下数字键“1”来切换成不同 CPU 的负载率。
第四行与第五行:表示目前的实体内存与虚拟内存 (Mem/Swap) 的使用情况。 再次重申,要注意的是 swap 的使用量要尽量的少!如果 swap 被用的很大量,表 示系统的实体内存实在不足!
第六行:这个是当在 top 程序当中输入指令时,显示状态的地方。
展示进程之间的相关性。
PRI 值越低代表越优先的意思。不 过这个 PRI 值是由核心动态调整的, 使用者无法直接调整 PRI 值的。
PRI(new) = PRI(old) + nice
当 nice 值为负值时,那么该程序就会降低 PRI 值,亦即会变的较优先被处理。
nice 值可调整的范围为 -20 ~ 19 ;
root 可随意调整自己或他人程序的 Nice 值,且范围为 -20 ~ 19 ;
一般使用者仅可调整自己程序的 Nice 值,且范围仅为 0 ~ 19 (避免一般用户抢占 系统资源);
一般使用者仅可将 nice 值越调越高,例如本来 nice 为 5 ,则未来仅能调整到大于 5;
这也就是说,要调整某个程序的优先执行序,就是“调整该程序的 nice 值”啦!那 么如何给予某个程序 nice 值呢?有两种方式,分别是:
一开始执行程序就立即给予一个特定的 nice 值:用 nice 指令;
调整某个已经存在的 PID 的 nice 值:用 renice 指令。
free:查看内存,如果swap用量超过20%,最好家物理内存。
uname:查看系统与内核
uptime:查看系统启动时间与任务负载
netstat:追踪网络。例如:netstat -tulnp
dmesg:分析内核产生的信息
vmstat:检测系统资源变化
如何查询整个系统的 SUID/SGID 的文件呢? 应该是还不会忘记吧?使用 find 即可啊!
find / -perm /6000
我们之前提到的所谓的程序都是在内存当中嘛!而内存当中的数据又都是 写入到 /proc/* 这个目录下的。
fuser:借由文件(或文件系统)找出正在使用该文件的程序
lsof:列出被进程所使用的文件名称
pidof:找出某个正在执行的进程的PID
系统为了某些功能必须要提供一些服务 (不论是系统本身还是网络 方面),这个服务就称为 service 。 但是 service 的提供总是需要程序的运行吧!否则如 何执行呢?所以达成这个 service 的程序我们就称呼他为 daemon 啰! 举例来说,达成 循环型例行性工作调度服务 (service) 的程序为 crond 这个 daemon 啦!
daemon 既然是一只程序执行后的程序,那么 daemon 所处的那个原本的程序 通常是如何命名的呢 (daemon 程序的命名方式)。 每一个服务的开发者,当初在开发他们的服务时,都有特别的故事啦!不过,无论如何,这些服务的名称被创建之后,被挂上 Linux 使用时,通常在服务的名称之后会加上一个 d ,例如例行性命令的创建的 at, 与 cron 这两个服务, 他的程序文件名会被取为 atd 与 crond,这个 d 代表的就是 daemon 的意思。
systemctl的限制:
systemd 将过去所谓的 daemon 执行脚本通通称为一个服务单位 (unit),而每种服务单位依据功能来区分时,就分类为不同的类型 (type)。 基本的 类型有包括系统服务、数据监听与交换的插槽档服务 (socket)、储存系统状态的快照 类型、提供不同类似执行等级分类的操作环境 (target) 等等。 哇!这么多类型,那设 置时会不会很麻烦呢?其实还好,因为配置文件都放置在下面的目录中:
到底系统开机会不会执行某些服务其实是看 /etc/systemd/system/ 下面 的设置,所以该目录下面就是一大堆链接文件。而实际执行的 systemd 启动脚本配置文 件, 其实都是放置在 /usr/lib/systemd/system/ 下面的喔!因此如果你想要修改某个服务 启动的设置,应该要去 /usr/lib/systemd/system/ 下面修改才对! /etc/systemd/system/ 仅是 链接到正确的执行脚本配置文件而已。所以想要看执行脚本设置,应该就得要到 /usr/lib/systemd/system/ 下面去查阅才对!
/usr/lib/systemd/system/ 以下的数据如何区分上述所谓的不同的类型 (type) 呢?很简单!看扩展名!
除了 running 跟 dead 之外,还有其他几种状态:
daemon的默认状态有如下几种:
直接执行:systemctl
graphical.target:就是文字加上图形界面,这个项目已经包含了下面的 multi- user.target 项目!
multi-user.target:纯文本模式!
基本上,我们最常使用的当然就是 multi-user 以及 graphical。
查看当前模式:systemctl get-default
切换模式:systemctl isolate multi-user.target
什么是暂停与休眠模式
suspend:挂起、暂停模式会将系统的状态数据保存到内存中,然后关闭掉大部分的系统硬 件,当然,并没有实际关机喔! 当使用者按下唤醒机器的按钮,系统数据会重内 存中回复,然后重新驱动被大部分关闭的硬件,就开始正常运行!唤醒的速度较 快。
hibernate:休眠模式则是将系统状态保存到硬盘当中,保存完毕后,将计算机关 机。当使用者尝试唤醒系统时,系统会开始正常运行, 然后将保存在硬盘中的系 统状态恢复回来。因为数据是由硬盘读出,因此唤醒的性能与你的硬盘速度有关。
systemd 的配置文件大部分放置于 /usr/lib/systemd/system/ 目录内。该目录的文件主要是原本 软件所提供的设置,建议不要修改!而要修改的位置应该放置于 /etc/systemd/system/ 目录内。举例来说,如果你想要额外修改 vsftpd.service 的话, 他们建议要放置到哪些地方呢?
systemctl daemon-reload
想要使用 systemd 的 timer 功能,你必须要有几个要件:
例如:
firewalld:(系统/网络)就是防火墙!以前有 iptables 与 ip6tables 等防 火墙机制,新的 firewalld 搭配 firewall-cmd 指令,可以快速的 创建好你的防火墙系统喔!因此,从 CentOS 7.1 以后, iptables 服务的启动脚本已经被忽略了! 请使用 firewalld 来取 代 iptables 服务喔!
ModemManager network Net workManager*:(系统/网络)主要就是调制解调器、网络设置等服务!进入 CentOS 7 之后,系统似乎不太希望我们使用 network 服务了, 比较建议的是使用 NetworkManager 搭配 nmcli 指令来处理网 络设置~所以,反而是 NetworkManager 要开,而 network 不 用开哩!
rc-local:(系统)相容于 /etc/rc.d/rc.local 的调用方式!只是,你必须 要让 /etc/rc.d/rc.local 具有 x 的权限后, 这个服务才能真的运 行!否则,你写入 /etc/rc.d/rc.local 的脚本还是不会运行的 喔!
CentOS 提供 rsyslog.service 这个服务来统一管理登录文件。
logrotate (日志文件轮询) 来自动化处理登录文件容量与更新的问题。logrotate 基本上,就是将旧的登录文件更改名称,然后创建一个空的登录 文件。
针对日志文件所需的功能,我们需要的服务与程序有:
CentOS 7.x 使用 systemd 提供的 journalctl 日志管理。
配置文件:/etc/rsyslog.conf
文件规定了“(1)什么服务 (2)的什么等级信息 (3)需要被 记录在哪里(设备或文件)” 这三个东西。
我们要使用的是 a 这个属性! 你的登录文件如果设置了这个属性的话,那么 他将只能被增加,而不能被删除!
chattr +a /var/log/admin.log
配置文件
logwatch
目前各大主流LInux发行版的启动引导程序都是grub2。
简单来说,系统开机的经过可以汇整成下面的流程的:
boot loader就是启动引导程序。它就在开机设备的第一个扇区 (sector) 内,也就是我们一直谈到的 MBR (Master Boot Record, 主要开机记录区)。它的功能如下:
它是第一个程序。
CentOS 7.x 的 systemd 开机流程大约是这样:
如果希望系统额外执行某些程序,可将程序命令或脚本绝对路径写入/etc/rc.d/rc.local文件。
CentOS 7 开始对于网卡的编号则有另一套规则:
想要知道你有多少网卡,直接下达“ ifconfig -a ”全部 列出来即可!
CentOS 7 也希望我们不要手动修改配置文件, 直接使用所谓的 nmcli 这个指令来设置网络参数。
修改主机名:hostnamectl set-hostname www.centos.vbird
命令:timedatectl
命令:localectl
dmidecode
Linux 有提供几个简单的指 令来将核心所侦测到的硬件叫出来的~ 常见的指令有下面这些:
smartctl
具有备份意义的文件通常可以粗分为两大类,一类是系统基本设置信息、一类则是类似网络 服务的内容数据。
操作系统本身需要备份的文件:
网络服务的数据库方面:
最终推荐备份的目录:
不需要备份的目录:
完整备份常用的工具有 dd, cpio, xfsdump/xfsrestore 等等。
dd 可以直接读取磁盘的扇区 (sector) 而不理会文件系统,是相 当良好的备份工具!不过缺点就是慢很多! cpio 是能够备份所有文件名,不过,得要 配合 find 或其他找文件名的指令才能够处理妥当。以上两个都能够进行完整备份, 但 累积备份就得要额外使用脚本程序来处理。可以直接进行累积备份的就是 xfsdump 这个 指令。
tar 的 -N 选项也可以做差异备份。
也可以通过 rsync 来进行镜像备份喔! 这个 rsync 可以对两个目录进行 镜像 (mirror) ,算是一个非常快速的备份工具。
我的备份策略是这样的:
1. 主机硬件:使用一个独立的filesystem来储存备份数据,此filesystem挂载到 /backup 当中;
2. 每日进行:目前仅备份MySQL数据库;
3. 每周进行:包括 /home, /var, /etc, /boot, /usr/local 等目录与特殊服务的目录;
4. 自动处理:这方面利用 /etc/crontab 来自动提供备份的进行;
5. 异地备援:每月定期的将数据分别(a)烧录到光盘上面(b)使用网络传输到另一部机器上面。
当执行 make 时,make 会在当时的目录下搜寻 Makefile (or makefile) 这个文本 文件,而 Makefile 里面则记录了源代码如何编译的详细信息! make 会自动的判别源代 码是否经过变动了,而自动更新可执行文件,是软件工程师相当好用的一个辅助工具 呢!
make 是一支程序,会去找 Makefile ,那 Makefile 怎么写? 通常软件开发商 都会写一支侦测程序来侦测使用者的作业环境, 以及该作业环境是否有软件开发商所 需要的其他功能,该侦测程序侦测完毕后,就会主动的创建这个 Makefile 的规则文件 啦!通常这支侦测程序的文件名为 configure 或者是 config 。
make 与 configure 运行流程的相关性,要进行的任务其实只有两个,一个是执行 configure 来创建 Makefile , 这个步骤一定要成功!成功之后再以 make 来调用所需要的数据来编译即可!
所谓的 Tarball 文件,其实就是将软件的所有源代码文件先以 tar 打包,然后再以 压缩技术来压缩,通常最常见的就是以 gzip 来压缩了。因为利用了 tar 与 gzip 的功能, 所以 tarball 文件一般的扩展名就会写成 *.tar.gz 或者是简写为 *.tgz 啰!不过,近来由于 bzip2 与 xz 的压缩率较佳,所以 Tarball 渐渐的以 bzip2 及 xz 的压缩技术来取代 gzip 啰!因此文件名也会变成 *.tar.bz2, *.tar.xz 之类的哩。所以说, Tarball 是一个软件包, 你将他解压缩之后,里面的文件通常就会有:
makefile 里面就具有至少两个标的,分别是 main 与 clean ,如 果我们想要创建 main 的话,输入“make main”,如果想要清除有的没的,输入“make clean”即可啊!而如果想要先清除目标文件再编译 main 这个程序的话,就可以这样输 入:“make clean main”。
1. ./configure
这个步骤就是在创建 Makefile 这个文件啰!通常程序开发者会写一支 scripts 来检 查你的 Linux 系统、相关的软件属性等等,这个步骤相当的重要, 因为未来你的安
装信息都是这一步骤内完成的!另外,这个步骤的相关信息应该要参考一下该目录 下的 README 或 INSTALL 相关的文件!
2. make clean
make 会读取 Makefile 中关于 clean 的工作。这个步骤不一定会有,但是希望执行一 下,因为他可以去除目标文件!因为谁也不确定源代码里面到底有没有包含上次编 译过的目标文件 (*.o) 存在,所以当然还是清除一下比较妥当的。 至少等一下新 编译出来的可执行文件我们可以确定是使用自己的机器所编译完成的嘛!
3. make
make 会依据 Makefile 当中的默认工作进行编译的行为!编译的工作主要是进行 gcc 来将源代码编译成为可以被执行的 object files ,但是这些 object files 通常还需要一 些函数库之类的 link 后,才能产生一个完整的可执行文件!使用 make 就是要将源 代码编译成为可以被执行的可可执行文件,而这个可可执行文件会放置在目前所在 的目录之下, 尚未被安装到预定安装的目录中;
4. make install
通常这就是最后的安装步骤了,make 会依据 Makefile 这个文件里面关于 install 的 项目,将上一个步骤所编译完成的数据给他安装到预定的目录中,就完成安装啦!
1. 最好将 tarball 的原始数据解压缩到 /usr/local/src 当中;
2. 安装时,最好安装到 /usr/local 这个默认路径下;
3. 考虑未来的反安装步骤,最好可以将每个软件单独的安装在 /usr/local 下面;
4. 为安装到单独目录的软件之 man page 加入 man path 搜寻:
目前在 Linux 界软件安装方式最常见的有两种,分别是:
dpkg:
这个机制最早是由 Debian Linux 社群所开发出来的,通过 dpkg 的机制, Debian 提 供的软件就能够简单的安装起来,同时还能提供安装后的软件信息,实在非常不 错。 只要是衍生于 Debian 的其他 Linux distributions 大多使用 dpkg 这个机制来管理 软件的, 包括 B2D, Ubuntu 等等。
RPM:
这个机制最早是由 Red Hat 这家公司开发出来的,后来实在很好用,因此很多 distributions 就使用这个机制来作为软件安装的管理方式。包括 Fedora, CentOS, SuSE 等等知名的开发商都是用这咚咚。
rpm优点:
通常不同的 LInux发行版 所释出的 RPM 文件,并不能用在其他的 LInux发行版 上。例如 CentOS 6.x 的 RPM 文件就无法直接套用在 CentOS 7.x !因此,这样可以发现这些软件管理机制的问 题是:
解决这个问题需要SRPM。SRPM 是什么呢?顾名思义,他是 Source RPM 的意思,也就是这个 RPM 文件里面含有源代码哩!特别注意的是,这个 SRPM 所 提供的软件内容“并没有经过编译”, 它提供的是源代码喔!SRPM 的扩展名是以 ***.src.rpm 这种格式来命名的。
rp-pppoe-3.11-5.el7.x86_64.rpm 这的文件的意义为:
基本上 rpm 这个指令真的就只剩下查询与检验的功能啰! 所以,查询与检验还是要学的,至于安装,通过 yum 就好了!
rpm的安装命令,鸟哥建议直接加-ivh即可。例如:
rpm -ivh /mnt/Packages/rp-pppoe-3.11-5.el7.x86_64.rpm
以 -Uvh 或 -Fvh 来升级即可。
yum [list|info|search|provides|whatprovides] 参数
yum [install|update] 软件
yum [remove] 软件
vim /etc/yum.repos.d/CentOS-Base.repo
文件说明:
第二十三章 x window设置介绍
略。
第二十四章 Linux内核编译与管理
略。