马哥Linux SysAdmin学习笔记(一)

时间:2021-11-29 21:51:21
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/编译