一、软件包及管理器简介
包的组成:
二进制文件、库文件、配置文件、帮助文件
程序包管理器:
debian: deb文件, dpkg包管理器
redhat: rpm文件, rpm包管理器
rpm:Redhat Package Manager
包之间可能存在依赖关系,甚至循环依赖。
解决依赖包管理工具:
yum:rpm包管理器的前端工具
apt:deb包管理器前端工具
zypper:suse上的rpm前端管理工具
dnf:Fedora 18+ rpm包管理器前端管理工具
获取程序包的途径:
- 系统发版的光盘或官方的服务器
CentOS镜像:
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com - 项目官方站点
- 第三方组织:
Fedora-EPEL:
Extra Packages for Enterprise Linux
Rpmforge:RHEL推荐,包很全
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net/ - 自己制作
注:第三方包建议要检查其合法性,来源合法性,程序包的完整性
二、Yum工具
CentOS: yum, dnf(RHEL8)
YUM: Yellowdog Update Modifier,rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date的替代工具
yum repository: yum repo,存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录repodata下)
2.1 yum配置文件
/etc/yum.conf:为所有仓库提供公共配置
/etc/yum.repos.d/*.repo:为仓库的指向提供配置
仓库指向的定义:
[repositoryID] ##必填项,仓库源标识ID
name=Some name for this repository ##仓库源名称
baseurl=url://path/to/repository/ ##必填项,指定软件仓库源地址
enabled={1|0} ##1代表启用源,0代表禁用源
gpgcheck={1|0} ##1代表启用密钥检查,0代表禁用密钥检查
gpgkey=URL ##指定密钥文件的链接地址或路径
可选的文件服务器:
http://
https://
ftp://
file://
例1:使用系统光盘创建一个本地仓库源
mount /dev/cdrom /mnt ##将系统光盘挂载至/mnt
cat > /etc/yum.repos.d/local.repo
[local]
name=local
baseurl=file:///mnt
gpgcheck=0
enabled=1
验证命令:yum repolist ##查看软件仓库源列表
执行结果:
Loaded plugins: fastestmirror
Determining fastest mirrors
local | 3.6 kB 00:00:00
(1/2): local/group_gz | 165 kB 00:00:00
(2/2): local/primary_db | 3.2 MB 00:00:00
repo id repo name status
local local 4,067
repolist: 4,067
从以上的执行结果能够看到本地仓库源配置成功,共有4067个包
例2:使用系统光盘创建一个内网软件仓库源
本例通过虚拟机模拟实现,共使用2台机器,1台为仓库源服务器,1台为客户端。
服务端:
##安装apache
yum -y install httpd
##启动Web服务,作为Yum源仓库文件服务器
systemctl start httpd
##将系统光盘挂载至网站默认根目录
mount /dev/cdrom /var/www/html
客户端:
##编写Yum源配置文件,指定文件服务器为http://地址
cat > /etc/yum.repos.d/lan.repo
[lan]
name=lan
baseurl=http://172.16.77.131 ##内网Yum源仓库服务器URL
gpgcheck=0
enabled=1
##验证内网Yum仓库是否搭建成功
yum --disablerepo=local repolist
执行结果:Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id repo name status
lan lan 4,067
repolist: 4,067
三、编译安装
编译C源代码过程:
准备:提供开发工具及开发环境
开发工具:make, gcc等
开发环境:开发库,头文件
glibc:标准库
实现:通过“包组”提供开发组件
Development Tools
Server Platform Development
生产实践:(基于最小化安装的系统)
yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel vim lrzsz tree screen lsof tcpdump wget ntpdate net-tools iotop bc zip unzip nfs-utils
开源程序源代码的获取
官方自建站点:
apache.org (ASF:Apache Software Foundation)
mariadb.org
...
代码托管:
SourceForge.net
Github.com
code.google.com
C语言源代码编译安装三步骤:
- ./configure
(1) 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成Makefile
选项:指定安装位置、指定启用的特性
--help: 获取其支持使用的选项
安装路径设定:
--prefix=/PATH:指定默认安装位置,默认为/usr/local/
--sysconfdir=/PATH:配置文件安装位置
Optional Features: 可选特性
--disable-FEATURE
--enable-FEATURE[=ARG]
Optional Packages: 可选包
--with-PACKAGE[=ARG] 依赖包
--without-PACKAGE 禁用依赖关系
注:通常被编译操作依赖的程序包,需要安装此程序包的“开发”组件,其包名一般类似于name-devel-VERSION
(2) 检查依赖到的外部环境,如依赖的软件包
make 根据Makefile文件,构建应用程序
make install 复制文件到相应路径
注:安装前查看INSTALL,README说明文档,提高效率
开发工具:
autoconf: 生成configure脚本
automake:生成Makefile.in
安装后的配置:
- 二进制程序目录导入至PATH环境变量中
编辑文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
示例:编译安装httpd 2.4
通过ftp客户端工具将源码包上传至指定目录:httpd-2.4.25.tar.bz2
##解压源码包文件
tar xvf httpd-2.4.25.tar.bz2
##安装依赖开发工具包
yum -y install gcc apr-devel apr-util-devel pcre-devel
##进行编译安装
cd httpd-2.4.25
./configure --sysconfdir=/etc/httpd
执行结果:
……
configure: summary of build options:
Server Version: 2.4.25
Install prefix: /usr/local/apache2
C compiler: gcc -std=gnu99
CFLAGS: -pthread
LDFLAGS:
LIBS:
CPPFLAGS: -DLINUX -D_REENTRANT -D_GNU_SOURCE
C preprocessor: gcc -E
make
make install
##启动服务程序
/usr/local/apache2/bin/apachectl start
##验证访问可用性
通过在浏览器地址栏输入IP地址,访问页面效果如下图所示
四、管理磁盘分区
列出块设备
- lsblk
创建分区使用
- fdisk 创建MBR分区
子命令:
p 分区列表
t 更改分区类型
n 创建新分区
d 删除分区
v 校验分区
u 转换单位
w 保存并退出
q 不保存并退出 - gdisk 创建GPT分区
子命令与fdisk相似
高级分区操作
- parted
重新设置内存中的内核分区表版本
- partprobe
示例:添加一块新硬盘,为其创建标准分区
本例通过虚拟机环境进行模拟,需提前添加一块虚拟硬盘(略)
##在线扫描识别新增磁盘
echo '- - -' > /sys/class/scsi_host/host0/scan
##验证硬盘是否成功添加
命令:fdisk -l |grep sd
执行结果:
Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
/dev/sda1 * 2048 1050623 524288 83 Linux
/dev/sda2 1050624 41943039 20446208 8e Linux LVM
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
从以上执行结果可以发现sdb为新增的虚拟硬盘设备。
##执行分区操作
fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xcb4fc1fd.
Command (m for help): m ##查看帮助,列出选项菜单
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
Command (m for help): n ##添加一个新的分区
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p ##指定类型为主分区
Partition number (1-4, default 1): ##指定分区编号,直接按下回车键表示输入默认值:1
First sector (2048-41943039, default 2048): ##指定扇区起始位置,直接按下回车键表示输入默认值:2048
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +2G ##指定扇区结束位置或容量大小,输入值:+2G
Partition 1 of type Linux and of size 2 GiB is set
Command (m for help): w ##将分区表改动保存至磁盘并退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
##检查是否成功创建分区
lsblk
执行结果:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 512M 0 part /boot
└─sda2 8:2 0 19.5G 0 part
├─centos-root 253:0 0 17.5G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 2G 0 part
从以上执行结果可以发现名称sdb1且容量为2G的设备为新增分区
五、逻辑卷(LVM)管理
允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小
允许在多个物理设备间重新组织文件系统
- 将设备指定为物理卷
- 用一个或者多个物理卷来创建一个卷组
- 物理卷是用固定大小的物理区域(Physical Extent,PE)来定义的
- 在物理卷上创建的逻辑卷由物理区域(PE)组成
-
可以在逻辑卷上创建文件系统
划分逻辑卷示意图
常用命令:
显示pv信息
pvs:简要pv信息显示
pvdisplay
创建pv
pvcreate /dev/DEVICE
删除pv
pvremove /dev/DEVICE
显示卷组
vgs
vgdisplay
创建卷组
vgcreate [-s [kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
删除卷组
vgremove VolumeGroupName
顺序:先做pvmove,再做vgremove
显示逻辑卷
lvs
lvdisplay
创建逻辑卷
lvcreate -L #[mMgGtT] -n NAME VolumeGroup
删除逻辑卷
lvremove /dev/VG_NAME/LV_NAME
重设文件系统大小
resize2fs [-f] [-F] [-M] [-P] [-p] device [new_size]
xfs_growfs /mountpoint
示例:创建一个有两个PV组成的大小为20G且名称为testvg的VG,指定PE大小 为16MB, 而后在卷组中创建大小为5G的逻辑卷testlv。
##创建物理卷
pvcreate /dev/sdc /dev/sdd
##创建卷组,将2个新增的物理卷作为成员
vgcreate -s 16 testvg /dev/sdc /dev/sdd
##创建逻辑卷
lvcreate -L 5G -n testlv /dev/testvg
##验证
vgdisplay testvg
执行结果:
--- Volume group ---
VG Name testvg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size <39.97 GiB
PE Size 16.00 MiB
从以上执行结果可以发现卷组testvg已成功创建,PE大小为16MB
lvs
执行结果:
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <17.50g
swap centos -wi-ao---- 2.00g
testlv testvg -wi-a----- 5.00g
从以上执行结果可以发现逻辑卷testlv已成功创建,容量为5GB
六、文件系统管理
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。
Linux文件系统:
- ext2(Extended file system) :适用于那些分区容量不是太大,更新也不频繁的情况,例如 /boot 分区
- ext3:是 ext2 的改进版本,其支持日志功能,能够帮助系统从非正常关机导致的异常中恢复。它通常被用作通用的文件系统
- ext4:是 ext 文件系统的最新版。提供了很多新的特性,包括纳秒级时间戳、创建和使用巨型文件(16TB)、最大1EB的文件系统,以及速度的提升
- xfs:SGI,支持最大8EB的文件系统
- btrfs(Oracle), reiserfs, jfs(AIX), swap
- 光盘:iso9660
- Windows:FAT32, exFAT,NTFS
- Unix: FFS(fast), UFS(unix), JFS2
- 网络文件系统:NFS, CIFS
- 集群文件系统:GFS2, OCFS2(oracle)
- 分布式文件系统: fastdfs,ceph, moosefs, mogilefs, glusterfs, Lustre
- RAW:未经处理或者未经格式化产生的文件系统
6.1 创建文件系统
- mkfs命令:
(1) mkfs.FS_TYPE /dev/DEVICE
ext4
xfs
btrfs
vfat
(2) mkfs -t FS_TYPE /dev/DEVICE
-L 'LABEL' 设定卷标
- mke2fs:ext系列文件系统专用管理工具
-t {ext2|ext3|ext4} 指定文件系统类型
-b {1024|2048|4096} 指定块大小
-L ‘LABEL’ 设置卷标
-j 相当于 -t ext3
mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
-m # 默认5%,为管理人员预留空间占总空间的百分比
示例1:使用标准分区创建一个2G的文件系统,块大小为2048byte,预留1%可用空间,文件系统 ext4,卷标为TEST
mkfs.ext4 -b 2048 -L 'TEST' /dev/sdb1
dumpe2fs /dev/sdb1
结果:
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name: TEST
Last mounted on: <not available>
Filesystem UUID: bcb49a44-b28c-492d-8b1d-7bb5129f1057
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent 64b
it flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 131072
Block count: 1048576
Reserved block count: 52428
Free blocks: 994651
Free inodes: 131061
First block: 0
Block size: 2048
从以上结果可以发现,sdb1文件系统的块大小为2048字节
示例2:以逻辑卷作为操作对象创建一个类型为xfs的文件系统
mkfs.xfs /dev/testvg/testlv
6.2 挂载mount
挂载:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录作为其它文件访问入口的行为
卸载:为解除此关联关系的过程
将设备关联挂载点:mount Point
mount
卸载时:可使用设备,也可以使用挂载点
umount 设备名|挂载点
挂载点下原有文件在挂载完成后会被临时隐藏
挂载点目录一般为空
挂载方法:mount DEVICE MOUNT_POINT
mount命令 (不带任何选项或参数):通过查看/etc/mtab文件显示当前已挂载的所有设备
语法:mount [-fnrsvw] [-t vfstype] [-o options] device dir
device:指明要挂载的设备;
(1) 设备文件:例如/dev/sda5
(2) 卷标:-L 'LABEL', 例如 -L 'MYDATA'
(3) UUID, -U 'UUID':例如 -U '0c50523c-43f1-45e7-85c0-a126711d406e'
常用选项:
-t vsftype 指定要挂载的设备上的文件系统类型
-r readonly,只读挂载
-w read and write, 读写挂载
-n 不更新/etc/mtab,mount不可见
-a 自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能)
-L 'LABEL' 以卷标指定挂载设备
-U 'UUID' 以UUID指定要挂载的设备
-B, --bind 绑定目录到另一个目录上
-o options:(挂载文件系统的选项),多个选项使用逗号分隔
子选项:
async 异步模式 sync 同步模式,内存更改时,同时写磁盘
atime/noatime 包含目录和文件
diratime/nodiratime 目录的访问时间戳
auto/noauto 是否支持自动挂载,是否支持-a选项
exec/noexec 是否支持将文件系统上运行应用程序
dev/nodev 是否支持在此文件系统上使用设备文件
suid/nosuid 是否支持suid和sgid权限
remount 重新挂载
ro 只读 rw 读写
user/nouser 是否允许普通用户挂载此设备,/etc/fstab使用
acl 启用此文件系统上的acl功能
loop 使用loop设备
defaults:相当于rw, suid, dev, exec, auto, nouser, async
卸载相关命令:
查看挂载情况
findmnt MOUNT_POINT|device
查看正在访问指定文件系统的进程
lsof MOUNT_POINT
fuser -v MOUNT_POINT
终止所有在正访问指定的文件系统的进程
fuser -km MOUNT_POINT
卸载
umount DEVICE
umount MOUNT_POINT
示例:将逻辑卷testlv挂载至/users目录
##创建挂载点
mkdir /users
##挂载
mount /dev/testvg/testlv /users
##验证
df -hT /users
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/testvg-testlv xfs 5.0G 33M 5.0G 1% /users
6.3 文件挂载配置文件
特点:
- 符合配置文件系统体系
- 被mount、fsck和其它程序使用
- 系统重启时保留文件系统体系
- 可以在设备栏使用文件系统卷标
- 使用mount -a 命令挂载/etc/fstab中的所有文件系统
/etc/fstab每行定义一个要挂载的文件系统
1、要挂载的设备或伪文件系统
设备文件
LABEL:LABEL=""
UUID:UUID=""
伪文件系统名称:proc, sysfs
2、挂载点
3、文件系统类型:ext4,xfs,iso9660,nfs,none
4、挂载选项:defaults ,acl,bind等
5、转储频率:0:不做备份 1:每天转储 2:每隔一天转储
6、fsck检查的文件系统的顺序:允许的数字是0 1 2
0:不自检
1:首先自检;一般只有rootfs才用
2:非rootfs使用
示例:使/dev/sdb1文件系统开机后自动挂载至/test目录,且默认有acl挂载选项
mkdir /test ##创建挂载点
vi /etc/fstab ##在末尾添加如下内容
/dev/sdb1 /test ext4 defaults,acl 0 0
保存,退出
reboot ##重启验证
df -hT /test
结果:
Filesystem Type Size Used Avail Use% Mounted on
/dev/sdb1 ext4 2.0G 9.1M 1.8G 1% /test
mount
结果:
/dev/sdb1 on /test type ext4 (rw,relatime,seclabel,data=ordered)
touch /test/testfile
setfacl -m u:abc:r /test/testfile
getfacl /test/testfile
结果:
getfacl: Removing leading '/' from absolute path names
# file: test/testfile
# owner: root
# group: root
user::rw-
user:abc:r--
从以上执行结果可以发现,已实现/dev/sdb1重启后自动挂载,且默认具有acl挂载选项