马哥Linux SysAdmin学习笔记(一)

Linux入门
Linux系统管理:
磁盘管理,文件系统管理
RAID基础原理,LVM2
网络管理:TCP/IP协议,Linux网络属性配置
程序包管理:rpm,yum
进程管理:htop,glance,tsar等
sed和awk
Linux系统开机流程
内核管理基础知识:编译内核,模块
Linux系统裁剪
kernel+busybox
课外作业:LFS
回顾:find,特殊权限,if语句
Linux磁盘管理:
I/O Ports:I/O设备地址
一切皆文件:
open(),read(),write(),close()
块设备:block,存取单位"块",磁盘
字符设备:char,存取单位"字符",键盘
设备文件:关联至一个设备驱动程序,进而能够跟与之对应的硬件设备进行通信
设备号码:
主设备号:major number,标识设备类型
次设备号:minor number,标识同一类型下的不同设备
硬盘接口类型:
并行
IDE:133MB/s
SCSI:640MB/s
串口
SATA:6Gbps
SAS:6Gbps
USB:480MB/s
rpm:rotations per minute
/dev/DEV_FILE
磁盘设备的设备文件命名:
IDE:/dev/hd
SCSI,STAT,SAS,USB:/dev/sd
不同设备:a-z
/dev/sda,/dev/sdb...
同一设备上的不同分区:1,2,3...
/dev/sda1,/dev/sda2
机械式硬盘:
track:磁道
cylinder:柱面
secotr:扇区
512bytes
如何分区:
按柱面
0磁道0扇区:512bytes
MBR:Master Boot Record
446bytes:boot loader
64bytes:分区表
16bytes:标识一个分区
2bytes:55AA
4个主分区:
3主分区+1扩展(N个逻辑分区)
问题:UEFI,GPT
分区管理工具:fdisk,parted,sfdisk
fidsk:对于一块硬盘来讲,最多只能管理15个分区
fdisk -l [-u] [device...]
fdisk device
子命令:管理功能
p:print,显示已有分区
n:new,创建
d:delete,删除
w:write,写入磁盘并退出
q:quit,放弃更新并退出
m:获取帮助
l:列表所分区id
t:调整分区id
查看内核是否已经识别新分区:
cat /proc/partations
通知内核重新读取硬盘分区表:
partx -a /dev/DEVICE
-n M:N
M
:N
kpartx -a /dev/DEVICE
-f: force
CentOS 5:使用partprobe
partprobe [/dev/DEVICE]
Linux文件系统管理:
Linux文件系统:ext2,ext3,ext4,xfs,btrfs,reiserfs,jfs,swap
swap:交换分区
光盘:ISO9660
Windows:fat32,ntfs
Unix:FFS,UFS,JFS2
网络文件系统:NFS,CIFS
集群文件系统:GFS2,OCFS2
分布式文件系统:ceph,
moosefs,mogilefs,glusterfs,lustre
根据其是否支持'journal'功能:
日志型文件系统:ext3,ext4,xfs...
非日志型文件系统:ext2,vfat
文件系统的组成部分:
内核中的模块:ext4,xfs,vfat
用户空间的管理工具:mkfs.ext4,mkfs.xfs,mkfs.vfat
Linux的虚拟文件系统:VFS
创建文件系统:
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
-i #:为数据空间中每多少个字节创建一个inode,此大小不应该小于block的大小
-N #:为数据空间创建多少个iNode
-m #:为管理人员预留的空间占据的百分比,默认5%
-O FEATURE[,...]:启用指定特性
-O ^FEATURE:关闭指定特性
mkswap:创建交换分区
mkswap [options] device
-L 'LABEL'
前提:调整其分区的ID为82
其他常用工具:
blkid:块设备属性信息查看
blkid [OPTION]... [DEVICE]
-U UUID:根据指定的UUID来查找对应的设备
-L LABEL:根据指定的LABEL来查找对应的设备
e2label:管理ext系列文件系统的label信息
e2label DEVICE [LABEL]
tune2fs:重新设定ext系列文件系统可调整参数的值
-l:查看指定文件系统超级块信息:super block
-L 'LABEL':修改卷标
-m #:修改预留给管理员的空间百分比
-j:将ext2升级为ext3
-O:文件系统属性启用或禁用
-o:调整文件系统的默认挂载选项
-U UUID:修改UUID号
dumpe2fs:
-h:查看超级块信息
文件系统检测:
fsck:file system check
fsck.FS_TYPE
fsck -t FS_TYPE
-a:自动修复错误
-r:交互式修复错误
注意:FS_TYPE一定要与分区上已有文件类型相同
e2fsck:ext系列文件专用的检测修复工具
-y:自动回答为yes
-f:强制修复
回顾:
磁盘接口类型,磁盘分区,fdisk,mkfs,mke2fs,tune2fs,blkid,dumpe2fs,e2label
vfs:xfs,ext{2|3|4},btrfs
文件系统管理:
将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录作为其他文件访问入口的行为,称之为挂载.
解除此关联关系的过程称之为卸载
设备挂载点: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'
4.伪文件系统名称:proc,sysfs,devtmpfs,configfs
dir:挂载点
事先存在:建议使用空目录
进程正在使用中的设备无法被卸载
常用选项:
-t vsftype:指定要挂载的设备上的文件系统类型
-r:readonly,只读挂载
-w:read and write,读写挂载
-n:不更新/etc/mtab
-a:自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有自动挂载功能)
-L 'LABEL':以卷标指定挂载设备
-U 'UUID':以UUID指定挂载设备
-B,--bind:绑定目录到另一个目录上
注意:查看内核追踪到的已挂载的所有设备:cat /proc/mounts
-o options:(挂载文件系统的选项)
async:异步模式
sync:同步模式
atime/noatime:包含目录和文件
diratime/nodiratime:目录的访问时间戳
auto/noauto:是否支持自动挂载
exec/noexec:是否支持将文件系统上的应用程序运行为进程
dev/nodev:是否支持在此文件系统上使用设备文件
suid/nosuid:
remount:重新挂载
ro:
rw:
user/nouser:是否允许普通用户挂载此设备
acl:启用此文件系统上的acl功能
注意:上述选项可多个同时使用,彼此使用逗号分隔
默认挂载选项:defaults
rw, suid, dev, exec, auto, nouser, async, and relatime
卸载命令:
umount DEVICE
umount MOUNT_POINT
查看正在访问指定文件系统的进程
fuser -v MOUNT_POINT
终止所有正在访问指定文件系统的进程:
fuser -km MOUNT_POINT
挂载交换分区:
启用:swapon
swapon [OPTION]... [DEVICE]
-a:激活所有的交换分区
-p PRIORITY:指定优先级
禁用:swapoff [OPTION]... [DEVICE]
内存空间使用状态:
free [OPTION]
-m:以MB为单位
-g:以GB为单位
文件系统空间占用等信息的查看工具:
df:
-h:human-readable
-i:inodes instead of blocks
-P,--portability:以posix兼容的格式输出
查看某目录总体空间占用状态:
du:
du [OPTIONS]... DIR
-h:human-readable
-s:summary
命令总结:mount,umount,free,df,du,swapon,swapoff,fuser
文件挂载的配置文件:/etc/fstab
每行定义一个要挂载的文件系统:
要挂载的设备或伪文件系统    挂载点 文件系统类型 挂载选项 转储频率 自检次序
要挂载的设备或伪文件系统:
设备文件,LABEL(LABEL=""),UUID(UUID=""),伪文件系统名称(proc,sysfs)
挂载选项:
defaults
转储频率:
0:不做备份
1:每天转储
2:每隔一天转储
自检次序:
0:不自检
1:首先自检,一般只有rootfs才用1
...
文件系统上的其他概念:
iNode:index node,索引节点
地址指针:
直接指针:
间接指针:
三级指针:
inode bitmap:对位标识每个inode空闲与否的状态信息
链接文件:
硬链接:
不能够对目录进行
不能跨分区进行
指向同一个inode的多个不同路径,创建文件的硬链接,即为为inode创建新的引用路径,因此会增加其引用计数
符号链接:
可以对目录进行
而且可以跨分区
指向的是另一个文件的路径,其大小为指向的路径字符串长度,不增加或减少模板文件inode的引用计数
ln [-sv] SRC DEST
-s:symbolic link
-v:verbose,显示过程
文件管理操作对文件的影响:
文件删除:
文件复制:
文件移动:
练习:
1.创建一个20G的文件系统,块大小为2048,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/testing目录,且默认有acl挂载选项
1.创建20G分区
2.格式化
mke2fs -t ext4 -b 2048 -L 'TEST' /dev/DEVICE
3.编辑/etc/fstab
LABEL='TEST' /testing ext4 defaults,acl 0 0
2.创建一个5G的文件系统,卷标HUGE,要求此分区开机自动挂载至/mogdata目录,文件系统类型为ext3
3.写一个脚本,完成如下功能:
1.列出当前系统识别到的所有磁盘设备
2.如果磁盘数量为1,则显示其空间使用信息,否则,则显示最后一个磁盘设备的空间使用信息
bash脚本编程之用户交互:
read [option]... [name ...]
-p 'PROMPT'
-t TIMEOUT
bash -n /path/to/some_scripts
检查脚本中的语法错误
bash -x /path/to/some_scripts
#!/bin/bash
read -p "Enter a special file:" diskfile
[ -z "$diskfile" ] && echo "Fool" && exit 1
if fdisk -l | grep "^Disk $diskfile" &> /dev/null;then
   fdisk -l $diskfile
else
   echo "No such file."
   exit 2
fi
RAID:
redundant arrays of inexpensive disks
independent
Berkeley:A case for redundant arrays of inexpensive disks RAID
提高IO能力:
磁盘并行读写
提高耐用性:
磁盘冗余来实现
级别:多块磁盘组织在一起的工作方式有所不同
RAID实现的方式:
外接式磁盘阵列:通过扩展卡提供适配能力
内接式RAID:主板集成RAID控制器
Software RAID:
级别:level
RAID-0:0,条带卷,strip;
RAID-1:1,镜像卷,mirror;
RAID-2
..
RAID-5:
RAID-6:
RAID10:
RAID01:
RAID-0:
读写性能提升
可用空间:N*min(S1,S2..)
无容错能力
最小磁盘数:2
RAID-1:
读性能提升,写性能下降
可用空间:1*min(S1,S2..)
有冗余能力
最少磁盘数:2
RAID-4:
RAID-5:
读写性能提升
可用空间:(N-1)*min(S1,S2...)
有容错能力:1块磁盘
最少磁盘数:3
RAID-6:
读写性能提升
可用空间(N-2)*min(S1,S2...)
有容错能力:2
最少磁盘数:4
混合类型:
RAID10:
读写性能提升
可用空间:N*min(S1,S2...)/2
有容错能力:每组镜像最多只能坏1块
最少磁盘数:4
RAID01:
RAID50,RAID-7:
JBOD:just a bunch of disks
功能:将多块磁盘的空间合并一个大的连续空间使用
可用空间:sum(S1,S2..)
常用级别:RAID0,RAID1,RAID5,RAID10,RAID50,JBOD
实现方式:
硬件实现方式
软件实现方式
CentOS 6上的软件RAID的实现:
结合内核中的md(multi devices)
mdadm:模式化的工具
命令的语法格式:mdadm [mode] <raiddevice> [OPTIONS] <component-device>
支持的raid级别,linear,0,1,4,5,6,10
模式:
创建:-C
装配:-A
监控:-F
管理:-f,-r,-a
<raiddevice>:/dev/md#
<component-devices>:任意块设备
-C:创建模式
-n #:使用#个块设备来创建RAID
-l #:指明要创建的raid级别
-a {yes|no}:自动创建目标raid设备的设备文件
-c CHUNK_SIZE:指明块大小
-x #:指明空闲盘的个数
例如,创建一个10G可用空间的RAID5:
-D:显示raid详细信息
mdadm -D /dev/md#
管理模式:
-f:标记指定磁盘为损坏
-a:添加磁盘
-r:移除磁盘
观察md的状态:
cat /proc/mdstat
停止md设备:
mdadm -S /dev/md#
watch命令:
-n #:刷新间隔,单位是秒
watch -n# 'COMMAND'
LVM2:
LVM:logical volume manager,version 2
dm:device mapper,将一个或多个底层块设备组织成一个逻辑设备的模块
/dev/mapper/VG_NAME-LV_NAME
/dev/mapper/vol0-root <-- /dev/VG_NAME/LV_NAME (/dev/vol0/root)
pv管理工具:
pvs:简要pv信息显示
pvdisplay:显示pv的详细信息
pvcreate /dev/DEVICE :创建pv
vg管理工具:
vgs
vgdisplay
vgcreate  [-s#[kKmMgGtTpPeE]] VolumeGroupName  PhysicalDevicePath  [PhysicalDevicePath...]
vgextend  VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]]
vgreduce  VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]]
先做pvmove
vgremove
lv管理工具:
lvs
lvdisplay
lvcreate -L #[mMgGtT] -n NAME  VolumeGroup
lvremove /dev/VG_NAME/LV_NAME
扩展逻辑卷:
lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
resize2fs /dev/VG_NAME/LV_NAME
缩减逻辑卷:
umount /dev/VG_NAME/LV_NAME
e2fsck -F /dev/VG_NAME/LV_NAME
resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]
lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME
mount
快照:snapshot
lvcreate -L #[mMgGtT] -p r -s -n snapshot_lv_name original_lv_name
文件系统挂载使用:
挂载光盘设备:
光盘设备文件:
IDE:/dev/dhc
SATA:/dev/sr0
符号链接文件:
/dev/cdrom
/dev/cdrw
/dev/dvd
/dev/dvdrw
mount -r /dev/cdrom /media/cdrom
umount /dev/cdrom
dd命令:covert and copy a file
用法:
dd if=/PATH/FROM/SRC of=/PATH/TO/DEST
bs=#:block size,复制单元大小
count=#:复制多少个bs
磁盘拷贝:
dd if=/dev/sda of=/dev/sdb
备份MBR:
dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
破坏MBR中的bootloader:
dd if=/dev/zero of=/dev/sda bs=256 count =1 
两个特殊设备:
/dev/null:数据黑洞
/dev/zero:吐零机
btrfs文件系统:
技术预览版
Btrfs (B-tree,Buffer FS,Better FS),GPL,Oracle,2007,CoW
核心特性:
多物理卷支持:btrfs可由多个底层物理卷组成,支持RAID,以联机,移除,修改.
写时复制更新机制(CoW):复制,更新及替换指针,而非就地更新
数据及元数据校验码:checksum
子卷:sub_volume
快照:支持快照的快照
透明压缩
文件系统创建:
mkfs.btrfs
-L 'LABEL'
-d <type>:raid0 raid1 raid5 raid6 raid10 single
-m <profile>:raid0 raid1 raid5 raid6 raid10 single dup
-O <feature>
-O list-all:列出支持的所有feature
属性查看:
btrfs filesystem show
挂载文件系统:
mount -t btrfs /dev/sdb MOUNT_POINT
透明压缩机制:
mount -o compress={lzo|zlib} DEVICE MOUNT_POINT
子命令:filesystem,device,balance,subvolume
压缩,解压缩及归档工具:
compress/uncompress:.Z
gzip/gunzip:.gz
bzip2/bunzip2:.bz2
xz/unxz:.xz
zip/unzip:.zip
tar,cpio
1.gzip/gunzip:
gzip [OPTION]... FILE...
-d:解压缩,相当于gunzip
-c:将结果输出至标准输出
-#:1-9,指定压缩比
zcat:不显示展开的前提下查看文本文件内容
2.bzip2/bunzip2/bzcat
bzip2 [OPTION]... FILE...
-k:keep,保留原文件
-d:解压缩
-#:1-9,压缩比,默认6
bzcat:不显示展开的前提下查看文本文件内容
3.xz/unxz/xzcat:
xz [OPTION]... FILE...
-k:
-d:
-#:
xzcat:不显示展开的前提下查看文本文件内容
4.tar
tar [OPTION]... 
1.创建归档:
tar -c -f /PATH/TO/SOMEFILE.tar FILE...
2.查看归档文件中的文件列表:
tar -t -f /PATH/TO/SOMEFILE.tar
3.展开归档
tar -xf /PATH/TO/SOMEFILE.tar
tar -xf /PATH/TO/SOMEFILE.tar -C /PATH/TO/DIR
-j:bzip2,
-z:gzip
-J:xz
bash脚本编程:
if语句,bash -n,bash -x
循环:for,while,until
循环体:要执行的代码,可能要执行N遍
进入条件
退出条件
for循环:
for 变量名 in 列表;do
循环体
done
执行机制:
依次将列表中的元素赋值给"变量名";每次复制后既执行一次循环体;直到列表中的元素耗尽,循环结束
列表生成方式:
1.直接给出字符串列表
2.整数列表
1.{start..end}
2.$(seq [start [step]] end)
3.返回列表的命令:
$(COMMAND)
4.glob
5.变量引用
$@,$*
Linux程序包管理:
API:application programming interface
POSIX:Protab OS
程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接
静态编译:
共享编译:.so
ABI:application binary interface
Windows与Linux不兼容:
库级别的虚拟化:
Linux:WINE
Windows:cywin
系统级开发:
C
C++
应用级开发:
Java
Python
PHP
二进制应用程序的组成部分:
二进制文件,库文件,配置文件,帮助文件
程序包管理器:
Debian:deb,dpt
Redhat:
rpm:Redhat package manager
RPM is package manager
Gentoo:
Archlinux:
源代码:name-VERSION.tar.gz
VERSION:major.minor.release
rpm包命名方式:
name-VERSION-ARCH.rpm
VERSION:major.minor.release
release.arch:
release:release.OS
常见的arch:
x86:i386,i486,i586,i686
x86_64:x64,x86_64,amd64
powerrpc:ppc
跟平台无关:noarch
testaoo:拆包
testapp-VERSION-ARCH.rpm 主包
testapp-devel-VERSION-ARCH.rpm 支包
testapp-testing-VERSION-ARCH.rpm 
包之间:存在依赖关系
yum:rpm包管理器的前端工具
apt-get:deb包管理器前端工具
zypper:suse上的rpm前端管理工具
dnf:Fedora 22+ rpm包管理器前端管理工具
查看二进制程序所依赖的库文件:
ldd /PATH/TO/BINARY_FILE
管理及查看本机装载的库文件:
ldconfig
/sbin/ldconfig -p:显示本机已经缓存的所有可用库文件名及文件路径映射关系
配置文件为:/etc/ld.so.conf /etc/ld.so.conf.d/*.conf
缓存文件:/etc/ld.so.cache
程序包管理:
功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷的实现程序包的安装,卸载,查询,升级和校验等管理操作
1.程序的组成清单(每个包独有)
文件清单
安装或卸载时运行的脚本
2.数据库(公共)
程序包名称及版本
依赖关系
功能说明
安装生成的个文件文件路径及校验码信息
管理程序包的方式:
使用包管理器:rpm
使用前端工具:yum,dnf
获取程序包的途径:
1.系统发行版的光盘或官方服务器
CentOS镜像:
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
2.项目官方站点
3.第三方组织
Fedora-EPEL
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
4.自己制作
建议:检查其合法性
来源合法性
程序包的完整性
CentOS系统上rpm命令管理程序包:
安装,卸载,升级,查询,校验,数据维护
安装:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
-v:verbose
-vv:
-h:以#显示程序包管理执行进度:每个#表示%2的进度
rpm -ivh PACKAGE_FILE ...
[install-option]
--test:测试安装,但不执行真正安装过程,dry run模式
--nodeps:忽略依赖关系
--replacepkgs:重新安装
--nosignature:不检查来源合法性
--nodigest:不检查包完整性
--noscripts:不执行程序包脚本片断
%pre:安装前脚本 --nopre
%post:安装后 --nopost
%preun:卸载前 --nopreun
%postun:卸载后 --nopostun
升级:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
upgrade:安装有旧版程序包,则升级,如果不存在旧版程序包,则安装
freeshen:安装有旧版程序包,则升级,如果不存在,则不执行升级操作
rpm -Uvh PACKAGE_FILE...
rpm -Fvh PACKAGE_FILE...
--oldpackage:降级
--force:强制升级
注意:
1.不要对内核执行升级操作:Linux支持多内核版本并存,因此,对直接安装新版本内核
2.如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件并不会直接覆盖老版本配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留
查询:
rpm {-q|--query} [select-options] [query-options]
[select-options]
-a:所有包
-f:查询指定的文件由哪个程序包安装生成
-p /PATH/TO/PACKAGE_FILE:针对尚未安装的程序包文件做查询操作
--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供
--whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖
[query-options]
--changelog:查询rpm包的changlog
-c:查询程序的配置文件
-d:查询程序的帮助手册
-i:information
-l:查看指定程序包安装后生成的所有文件
--scripts:程序包自带的脚本片断
-R:查询指定的程序包所依赖的CAPABILITY
--provices:列出指定程序包所提供的CAPABILITY
用法:
-qi PACKAGE,-qf FILE,-qc PACKAGE,-ql PACKAGE,-qd PACKAGE
-qpi PACKAGE_FILE,-qpl PACKAGE_FILE
-qa
卸载:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
           [--notriggers] [--test] PACKAGE_NAME ...
    校验:
    rpm {-V|--verify} [select-options] [verify-options]
S file Size differs
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum) differs
D Device major/minor number mismatch
L readLink(2) path mismatch 
U User ownership differs
G Group ownership differs
T mTime differs
P caPabilities differ
包来源合法性验证及完整性验证:
完整性验证:SHA256
来源合法性验证:RSA
公钥加密:
对称加密:加密,解密使用同一密钥
非对称加密:密钥是成对的
public key:公钥
secret key:私钥
导入所需的公钥:
rpm --import /PATH/FORM/GPG-PUBKEY-FILE
CentOS 7 发行版光盘提供的密钥文件:RPM-GPG-KEY-CentOS-7
数据库重建:
rpm {--initdb|--rebuilddb}
initdb:初始化
如果不存在数据库,则新建
rebuilddb:重建
无论是否存在,直接重新创建数据库
程序包管理2:
CentOS:yum,dnf
YUM:yellow dog,yellowdog update modifier
yum repository:yum repo
存储了众多rpm包,以及包的相关元数据文件(放置于特定目录:repodata)
文件服务器:
ftp://
http://
nfs://
file:///
yum客户端:
配置文件:
/etc/yum.conf:为所有仓库提供公共配置
/etc/yum.repos.d/*.repo:为仓库的指向提供配置信息
仓库指向的定义
[repositoryid]
name=Some name for this repository
baseurl=url://server1/path/to/repository/
url://server2/path/to/repository/
url://server3/path/to/repository/
enabled={1|0}
gpgcheck={1|0}
gpgkey=URL
enablegroups={1|0}
failovermethod={roundrobin|priority}
默认为roundrobin,随机挑选
cost=
默认1000
yum命令的用法:
yum [options] [command] [package ...]
* install package1 [package2] [...]
* update [package1] [package2] [...]
* update-to [package1] [package2] [...]
* update-minimal [package1] [package2] [...]
* check-update
* upgrade [package1] [package2] [...]
* upgrade-to [package1] [package2] [...]
* distribution-synchronization [package1] [package2] [...]
* remove | erase package1 [package2] [...]
* autoremove [package1] [...]
* list [...]
* info [...]
* provides | whatprovides feature1 [feature2] [...]
* clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
* makecache [fast]
* groups [...]
* search string1 [string2] [...]
* shell [filename]
* resolvedep dep1 [dep2] [...]
(maintained for legacy reasons only - use repoquery or yum provides)
* localinstall rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use install)
* localupdate rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use update)
* reinstall package1 [package2] [...]
* downgrade package1 [package2] [...]
* deplist package1 [package2] [...]
* repolist [all|enabled|disabled]
* repoinfo [all|enabled|disabled]
* repository-packages <enabled-repoid> <install|remove|remove-or-reinstall|remove-or-distribution-synchronization> [package2] [...]
* version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]
* history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
* load-transaction [txfile]
* updateinfo [summary | list | info | remove-pkgs-ts | exclude-updates | exclude-all | check-running-kernel]
* fssnapshot [summary | list | have-space | create | delete]
* fs [filters | refilter | refilter-cleanup | du]
* check
* help [command]
显示仓库列表:
repolist [all|enabled|disabled]
显示程序包:
list
yum list [all|glob_exp1] [glob_exp2] [...]
yum list {available|installed|updates} [glob_exp1] [...]
安装程序包:
install pkg1 [pkg2] [...]
reinstall package1 [package2] [...]  重新安装
升级程序包:
update [pkg1] [pkg2] [...]
downgrade package1 [package2] [...] 降级
检查可用升级:
check-update
卸载程序包:
remove | erase pkg1 [pkg2] [...]
查看程序包information:
info [...]
查看指定特性(可以是某文件)是由哪个程序包所提供:
provides | whatprovides feature1 [feature2] [...]
清理本地缓存:
clean [packages | metadata | expire-cache | rpmdb | plugins | all]
构建缓存:
makecache
搜索:
search string1 [string2] [...]
搜索程序包名及summary信息
查看指定包所依赖的capabilities
deplist package1 [package2] [...]
查看yum事务历史:
history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
安装及升级本地程序包:
localinstall rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use install)
localupdate rpmfile1 [rpmfile2] [...]
包管理的相关命令:
groupinstall group1 [group2] [...]
groupupdate group1 [group2] [...]
grouplist [hidden] [groupwildcard] [...]
groupremove group1 [group2] [...]
groupinfo group1 [...]
如何使用光盘作为本地yum仓库:
1.挂载光盘至某目录,例如/media/cdrom
mount -r -t iso9660 /dev/cdrom /media/cdrom
2.创建配置文件
[base]
name=CentOS 7 Release 7.2.1511
baseurl=file:///mnt
enabled=1
gpgcheck=0
yum的命令行选项:
--nogpgcheck:禁止进行gpg check
-y:自动回答为yes
-q:静默模式
--disablerepo=repoidglob:临时禁用此处指定的repo
--enablerepo=repoidglob:临时启用此处指定的repo
--noplugins:禁用所有插件
yum的repo配置文件中可用的变量:
$releaserver:当前OS发行版的主版本号
$arch:平台
$basearch:基础平台
$YUM0-$YUM9
http://mirrors.magedu.com/centos/$releaserver/$basearch/os
创建yum仓库:
createrepo [options] <directory>
程序包编译安装:
testapp-VERSION-release.src.rpm --> 安装后使用rpmbuild命令制作成二进制格式的rpm包,而后再安装
源代码 --> 预处理 --> 编译(gcc) --> 汇编 --> 链接 --> 执行
源代码组织格式:
多文件:文件中的代码之间,很可能存在跨文件依赖关系
C,C++: make (configure --> Makefile.in --> makefile)
java:maven
编译安装:
./configure
1.通过选项传递参数,指定启用特性,安装路径等.执行时会参考用户的指定以及Makefile.in文件生成makefile
2.检查依赖到的外部环境
make
根据makefile文件,构建应用程序
make install
开发工具:
autoconf:生成configure脚本
automake:生成Makefile.in
建议:安装前查看INSTALL,README
开源程序源代码的获取:
官方自建站点:
apache.org(ASF)
mariadb.org
代码托管:
SourceForge
Github.com
code.google.com
c/c++:gcc (GNU C Complier)
编译C源代码:
前提:提供开发工具及开发环境
开发工具:make,gcc等
开发环境:开发库,头文件
glibc:标准库
通过"包组"提供开发组件
1.configure脚本
选项:指定安装位置,指定启用的特性
--help:获取其支持使用的选项
选项分类:
安装路径设定:
--prefix=/PATH/TO/SOMEWHERE:指定默认安装位置
--sysconfdir=/PATH/TO/SOMEWHERE:配置文件安装路径
system types:
optional features:可选特性
--disable-FEATURE
--enable-FEATURE[=ARG]
optional packages:可选包
--with-PACKAGE[=ARG]
--without-PACKAGE
2.make
3.make install
安装后的配置:
1.导出二进制程序目录至PATH环境变量
编辑文件/etc/profile.d/name.sh
export PATH=/PATH/TO/BIN:$PATH
2.导出库文件路径
编辑/etc/ld.so.conf.d/NAME.conf
添加新的库文件所在目录至此文件中
让系统重新生成缓存:
ldconfig [-v]
3.导出头文件
基于链接的方式实现:
ln -sv 
4.导出帮助手册:
编辑/etc/man.config文件
添加一个MANPATH
练习:
1.yum的配置和使用,包括yum repositroy的创建
2.编译安装apache 2.2;启动此服务
博客作业:程序包管理 rpm/yum/编译
posted @ 2017-07-10 14:31  Redheat  阅读(1382)  评论(0编辑  收藏  举报