马哥Linux SysAdmin学习笔记(一)
阅读原文时间:2023年07月10日阅读:3

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] [OPTIONS]

支持的raid级别,linear,0,1,4,5,6,10

模式:

创建:-C

装配:-A

监控:-F

管理:-f,-r,-a

:/dev/md#

:任意块设备

-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 :raid0 raid1 raid5 raid6 raid10 single

-m :raid0 raid1 raid5 raid6 raid10 single dup

-O

-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 [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]

程序包编译安装:

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/编译