zoukankan      html  css  js  c++  java
  • 马哥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/编译
  • 相关阅读:
    loj#2333 「JOI 2017 Final」准高速电车
    loj#2332 「JOI 2017 Final」焚风现象
    loj#501 「LibreOJ β Round」ZQC 的树列
    loj#500 「LibreOJ β Round」ZQC 的拼图
    p2827 蚯蚓
    p5471 [NOI2019]弹跳
    p5304 [GXOI/GZOI2019]旅行者
    p2503 [HAOI2006]均分数据
    p4899 [IOI2018] werewolf 狼人
    loj#137 最小瓶颈路 加强版
  • 原文地址:https://www.cnblogs.com/redheat/p/7145616.html
Copyright © 2011-2022 走看看