Linux~之四

程序包管理

程序的编译过    
    程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接 
         静态编译:
         共享编译:.so
    二进制应用程序的组成部分:
        二进制文件、库文件、配置文件、帮助文件

    管理及查看本机装载的库文件:
        ldconfig 
            /sbin/ldconfig -p: 显示本机已经缓存的所有可用库文件名及文件路径映射关系;

            配置文件为:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
            缓存文件:/etc/ld.so.cache

    /usr/bin  普通用户执行文件
    /usr/sbin 服务器执行程序文件和管理程序文件
    /dev     块设备文件
    /mnt     临时挂载点
    /tmp     临时文件存放路径
    /usr/src 源代码存放路径
    /usr/share/doc/   帮助文档

    i386   32位系统
    x86-64  64位系统

    rpm -qa  xxx      查看系统中已安装的所有rpm软件包
    rpm -qi  xxx      查看指定软件包的详细信息
    rpm -ql  xxx      查看安装这个软件包的时候生成的那些文件,Windows默认安装不可以
1、Linux系统中每个配置文件的作用?
    普通执行程序文件                        /usr/bin 
    服务器执行程序文件和管理程序文件        /usr/sbin 
    应用程序配置文件                        /etc 
    日志文件                                /var/log 
    块设备文件                           /dev
    临时挂载点                           /mnt
2、常见的软件包封装类型?
    rpm软件包      扩展名为“.rpm” 
    deb软件包     扩展名为“.deb”  
   源代码软件包     一般为“.tar.gz”、“.tar.bz2”等格式的压缩包,包含程序的原始代码
   
3、bash-4.1.2-15.el6_4.x86_64.rpm
      bash:   软件名称
      4.1.2   版本号
      15      次版本号
      64      64位系统
      
4、查看系统中已安装的所有RPM软件包列表
      rpm -qa  
      
5、查询指定软件包所安装的目录、文件列表
      rpm  -ql   软件名
      
6、查询文件或目录属于哪个 RPM 软件
      rpm  - qf  文件或目录名

7、查询未安装的 RPM 包文件
      rpm  - qp[子选项]  RPM包文件

8、查看.rpm安装包内所包含的目录、文件列表
      rpm  -qpl 
      
9、安装rpm软件包
      rpm  -ivh  软件包
      i:  intall安装
      v:  显示安装过程中的详细信息
          h:  以#显示安装进度

 yum

定义:
   解决软件包的依赖性,可在多个仓库中定位软件包,yum有服务器和客户端,yum服务器里存放着安装软件的包以及
   相关软件的元数据(软件的版本号、说明、依赖性等等),客户端想访问服务器获取软件包,得在本地配置一个指向
   文件,说明这个服务器在哪里啊等等信息。
yum客户端配置文件:
    /etc/yum.conf: 为所有仓库提供公共配置
    /etc/yum.repos.d/*.repo: 自己设置仓库的指向提供配置
    仓库指向的定义:如我们创建了一个名为dvd.repo的仓库配置文件
        用vim打开这个文件,格式如下
            
[base]#表示仓库的名字,中括号里面随便定义名字
name=base #填写名称,描述信息。
baseurl=file:///media/ #它支持多种路径格式,http://、https://、ftp://、file://,(它可以写多个路径
                       多个路径的时候可以用‘mirrorlist=’后面跟上存放多个路径的文件地址)
gpgcheck=0 #它的作用是检查包的完整性,0表示不检查,默认是1检查
gpgkey=file:///media/RPM-GPG-KEY-CentOS-7 #表示公钥的路径
  查看仓库:获取元数据
      yum repolist
            enabled 仅显示激活的仓库,默认
            all 显示所有的仓库
            disabled 仅显示禁用的仓库
  清除缓存: 
      yum clean all
      var/cache/yum/  #缓存的路径
      备注:在我们创建好客户端配置文件后,执行yum repolist获取信息,有时不会更新,还是原来的数据,这时
            我们要清除下缓存,
  构架缓存:makecache

  用yum安装软件:
      yum install 跟软件名
      如 yum install gcc -y #-y是自动回答yes
        yum reinstall gcc 重新安装包

  用yum卸载包:
     yum remove gcc

  查看仓库都有那些包:
     yum list #查看所有仓库里面的包,从缓存中读取
           yum list *ftp*
           yum list installed 安装好的包
            
  临时禁用仓库:
     enabled=0 #默认是1 开启
 
   yum日志:
     ll /var/log/yum.log #列出yum.log文件信息
     cat /var/log/yum.log #查看yum.log文件
 
   升级程序包:
      yum update ..  升级
      yum downgrade..降级 
  检查可升级的包:
 
  
  yum check-update

卸载程序包:yum remove .. 

查看程序包:yum info ..

搜索:yum search string1 [string2] [...]
    已指定的关键字搜索程序包名及相关信息

查找磁盘上某个文件是由那个包提供的:
    yum provides pkgname    #yum provides *bin/bash

查询指定的包依赖哪些能力及提供的包:
    yum deplist pkgname  #yum deplist tree

查询yum历史:
    yum history
       这时出现历史列表,记录了安装与卸载历史,
        yum history list 2 #查看编号2这条历史记录信息
                    info
        在我们卸载包的时候它的依赖包是不会一起卸载掉的,这时候我们找到它的安装记录,执行一个命令就可以了
    yum history undo 2 #2是编号 

包组管理相关命令:
    grouplist 查看包组
    groupinfo 包组名
    yum groupinstall "Development Tools" 安装开发包组
    groupremove "Development Tools" 卸载开发包组
    yum install --downloadonly --downloaddir=/app httpd-manual 仅下载不安装
  
yum的命令行选项:
        --nogpgcheck:禁止进行gpg check;
        -y: 自动回答为“yes”;
        -q:静默模式;
        --disablerepo=repoidglob:临时禁用此处指定的repo;
        --enablerepo=repoidglob:临时启用此处指定的repo;
        --noplugins:禁用所有插件;

如何使用光盘当作本地yum仓库:
        (1) 挂载光盘至某目录,例如/media/cdrom
            # mount -r -t iso9660 /dev/cdrom /media/cdrom
        (2) 创建配置文件
        [CentOS7]
        name=
        baseurl=
        gpgcheck=
        enabled=
创建yum仓库:       
           createrepo [options]            createrepo /app/rpm/

实验
    一、创建centos6 yum源仓库服务器
        1) 准备两台cetos系统,一个服务器端一个客户端
        2) 在服务器端安装好http包并启动服务、关闭防火墙
             yum install httpd #安装httpd包
             systemctl start httpd.service #启动服务
             iptables -vnL #查看防火墙
             systemctl stop firewalld #关闭防火墙
             systemctl disable firewalld #下次开机不用启动
        3)我们现在cd /var/www/html/目录下创建一个文件
            echo welcome to beijing > index.html
        4)在heml目录下创建目录 centos/{6,7}/os/x86_64/
            mkdir -p  centos/{6,7}/os/x86_64/ 
        5)将centos6的源包复制或挂载到x86_64/下
            mount /dev/sr0 centos/6/os/x86_64/ #这是挂载
           (注:如果此系统的光盘源是centos7,则新加个CD/DVD,df查看下没有更新,这时候敲下
               echo '- - -' > /sys/class/scsi_host/host0/scan ,来通知内核,下面再挂载光盘源
               mount /dev/sr1 centos/6/so/x86_64/)
        6)访问服务器地址获取源

    二、在centos7上编译安装 httpd 2.4
        1)下载源码包
           一般把下载的文件放在/usr/local/src/下
            ftpget ftp://172.18.0.1/pub/Sources/sources/httpd/httpd-2.4.25.tar.bz2

        2)安装Development Tools(开发工具)
            yum -y groupinstall "Development Tools"
        3)解压
            tar xvf httpd-2.4.25.tar.bz2
            并查看README和INSTALL以及./configure --help
        4)配置
            ./configure --prefix=/app/apache24 --sysconfdir=/etc/apache24
            dnf -y install apr-devel apr-util-devel pcre-devel #这是依赖性
        5)make
    
        6)make install

        #### 4,5,6步是编译C源代码

        7)将执行命令和帮助文档的路径写入PATH
         vim /etc/profile.d/env.sh
             export PATH=/app/apache24/bin/:$PATH
         source /etc/profile.d/env.sh
         vim /etc/man_db.conf
             MANDATORY_MANPATH                       /app/apache24/man

    8)启动服务 并 关闭防火墙
            apachectl start
            iptables -F


磁盘管理

一切皆文件:open()打开    read()读    write()写    close()关闭
           块设备 block,单位"块",磁盘   
           字符设备 char,单位"字符",键盘
磁盘的三维:磁头,柱面,扇区
            c:2^10=1024 
            h:2^8=256
            s:2^6=64
            h:磁头  c柱面  s扇区
            一个扇区大小512byte
            256*64*1024*512/1024/1024/1024=8GB
分区:
    MBR,GPT两种分区方式
        MBR使用32位表示扇区数,分区不超过2T
    
    0磁道0扇区:512bytes
        MBR: Master Boot Record
            446bytes: boot loader
                      lilo   linux loader
                      grub    
                      grub2  
            64bytes:分区表
            16bytes: 标识一个分区
             2bytes: 55AA
              4个主分区;
              3主分区+1扩展(N个逻辑分区)

         MBR结构示意图

            Linux~之四_第1张图片

    GPT分区
       支持128个分区,使用64位,支持8Z 

 列出可用的磁盘设备:
    图形化界面:点击“应用程序-系统工具-磁盘”
    命令行:gnome-disks

lsblk:列出块设备

分区管理命令:fdisk,parted,gdisk
    fdisk:支持msdos,在centos7中也支持gpt(不建议使用)对于一块硬盘来说,最多只能管理15分区
     fdisk -l 查看所有硬盘的分区信息
     fdisk -l /dev/sda 查看指定分区的信息
     fdisk /dev/sdb
           o 设置msdos分区表
           n 创建分区
           d 删除分区
           g 设置gpt分区表(不建议使用)
           m 帮助
               p 主分区
               e 扩展分区(把所有空间分给扩展)
                   起始的扇区数 一般直接回车,取可用的最小扇区
                   结束的扇区数 一般用+XX K/M/G 来指定具体分多少大小的分区
           q 退出不保存
           w 退出并保存    
           t 设置分区的类型
           L 查看分区的类型所对应的代码表示方式
           d 删除指定分区
           a 设置该分区为启动分区,或设置为非启动
           p 显示分区表
           u 更新显示分区起止的单位,在扇区和柱面之间切换 

    gdisk  只能划分gpt分区
      gdisk -l 列出所有硬盘分区表
      gdisk -l /dev/sdb 列出指定硬盘的分区表
      gdisk /dev/sdb 对分区进行划分 
            o 创建gpt分区表
            m 帮助
            n 创建分区
                起始的扇区数 一般直接回车,取可用的最小扇区
                结束的扇区数 一般用+XX K/M/G 来指定具体分多少大小的分区
            q 退出不保存
            w 退出并保存    
            t 设置分区的类型
            L 查看分区的类型所对应的代码表示方式
            d 删除指定分区
            p 显示分区表

      parted 支持msdos和gpt
            交互和非交互
            parted /dev/sda
            parted -l 列出所有硬盘的分区信息
            parted /dev/sda print 列出指定硬盘的分区
            parted /dev/sdb mklabel msdos 设置硬盘的分区类型
                                    或gpt
            parted /dev/sdb mklabel msdos -s 自动回答yes
            parted /dev/sdb mkpart primary 1 2G
            parted /dev/sdb mkpart primary 2G 4G
            parted /dev/sdb mkpart primary 4G 6.5G
            parted /dev/sdb mkpart extended 6.5G 21.5G
            parted /dev/sdb mkpart logical 6.5G 7G

    对于非系统所在硬盘,内核自动更新分区表,而对于系统所在硬盘,不能直接列新,要使用以下命令
        通知内核读取分区表
        cenots5\centos7: partprobe (centos6不可用)
        centos6:partx -a /dev/sda  添加
            partx -d --nr /dev/sda7 删除

文件系统类型

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,mke2fs...
    mkfs命令
        (1) # mkfs.FS_TYPE /dev/DEVICE
                ext4
                xfs
                btrfs
                vfat
        (2) # mkfs -t FS_TYPE /dev/DEVICE

            -L 'LABEL': 设定卷标
       例子:mkfs.ext4 /dev/sdb1    #把sdb1设备设置成了ext4类型的文件系统

    mke2fs:ext系列文件系统专用管理工具
        -t {ext2|ext3|ext4}
        -b {1024|2048|4096}  指定block大小
        -L 'LABEL'
        -j: 相当于 -t ext3
           mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
        -i #: 为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小
        -N #:指定分区中创建多少个inode
        -I 一个inode记录占用的磁盘空间大小,128---4096
        -m #: 默认5%,为管理人员预留空间占总空间的百分比
        -O FEATURE[,...]:启用指定特性
        -O ^FEATURE:关闭指定特性

    tune2fs:重新设定ext系列文件系统可调整参数的值
        -l:查看指定文件系统超级块信息;super block
        -L 'LABEL':修改卷标
        -m #:修预留给管理员的空间百分比
        -j: 将ext2升级为ext3
        -O: 文件系统属性启用或禁用, –O ^has_journal
        -o: 调整文件系统的默认挂载选项,–o ^acl    ***
        -U UUID: 修改UUID号

mount挂载

    解除此关联关系的过程称之为卸载;

    把设备关联挂载点:Mount Point
        mount

    卸载时:可使用设备,也可以使用挂载点
        umount

    注意:挂载点下原有文件在挂载完成后会被临时隐藏;

    mount:通过查看/etc/mtab文件显示当前已挂载的所有设备  
            device:指明要挂载的设备;
        (1) 设备文件:例如/dev/sda5
        (2) 卷标:-L 'LABEL', 例如 -L 'MYDATA'
        (3) UUID, -U 'UUID':例如 -U '0c50523c-43f1-45e7-85c0-a126711d406e'
        (4) 伪文件系统名称:proc, sysfs, devtmpfs, configfs
        dir:挂载点
            事先存在;建议使用空目录
            进程正在使用中的设备无法被卸载
            -t vsftype:指定要挂载的设备上的文件系统类型
                -r: readonly,只读挂载
                -w: read and write, 读写挂载
                -n: 不更新/etc/mtab,mount不可见  
                    cat /proc/mounts 可以看到用-n所隐藏的挂载信息
                -a:自动挂载定义在了/etc/fstab文件中尚未挂载的文件系统,且挂载选项中有auto功能)
                    也可以用mount 后仅跟一个参数,从而去/etc/fstab中找另一个参数。
                -L 'LABEL': 以卷标指定挂载设备
                -U 'UUID': 以UUID指定要挂载的设备
                -B, --bind: 绑定目录到另一个目录上
                查看内核追踪到的已挂载的所有设备
                    cat /proc/mounts
            -o
                ro 只读
                rw 读写 默认
                async|sync 异步传输
                atime|noatime 
                diratime/nodiratime
                auto|noauto 是否可以使用mount -a 自动挂载
                exex|noexec 禁止执行任何权限,无论是否有x权限
                dev|nodev 是否可以在该文件系统上使用dev设备
                suid|nosuid 是否suid权限生效
                remount 重新挂载,要在后面具体指挂载选项,如不指定,重新挂载为默认权限 
                nouser|user 是否允许写入/etc/fstab中的挂载项目让普通用户执行以进行挂载及卸载,如              
                                                                         mount /dev/sda8
                acl 是否在挂载时指定acl
                loop
                    dd if=/dev/zero of=test.iso  bs=1M count=100
                    mkfs.ext4 test.iso
                    mount -o loop  test.iso /app/data2
                    losetup -a 可列出loop挂载的设备
                defaults:相当于rw, suid, dev, exec, auto, nouser, async
            
        
     卸载命令:
        # umount DEVICE
        # umount MOUNT_POINT

        查看正在访问指定文件系统的进程:
            # fuser -v MOUNT_POINT

        终止所有在正访问指定的文件系统的进程:
            # fuser -km MOUNT_POINT


    挂载交换分区:
        启用:swapon
            swapon [OPTION]... [DEVICE]
                -a:激活所有的交换分区;
                -p PRIORITY:指定优先级;
        禁用:swapoff [OPTION]... [DEVICE]        
             swapoff /dev/sdb1 禁用swap分区  
   
    swap的优先级
        swapon -p xx /dev/sdaX
      也可以写入/etc/fstab使永久生效
      UUID=5a1ff0b5-5c19-42e3-8b6a-65e7d332ee0c swap                    swap    defaults,pri=20        0 0
      UUID=8a5c6dbe-1025-462b-ad32-53ded1918d63 swap                    swap    defaults,pri=15        0 0
      /app/swap.img                             swap                    swap    defaults,pri=10        0 0
                        

文件挂载的配置文件/etc/fstab

   

    每行定义一个要挂载的文件系统;

        要挂载的设备或伪文件系统     挂载点     文件系统类型      挂载选项     转储频率      自检次序

            要挂载的设备或伪文件系统:
                设备文件、LABEL(LABEL="")、UUID(UUID="")、伪文件系统名称(proc, sysfs)

            挂载选项:
                defaults

            转储频率:
                0:不做备份
                1:每天转储
                2:每隔一天转储

            自检次序:
                0:不自检
                1:首先自检;一般只有rootfs才用1;


df、du、dd命令

 
  
 df [OPTION]... [FILE]...
        -H 以1000为单位
        -T 文件系统类型
        -h: human-readable   ***
        -i:inodes instead of blocks
        -P: 以Posix兼容的格式输出 

    du [OPTION]... DIR
        -h: human-readable
        -s: 合计
   # du -sh 查看文件合计大小,在我们复制大文件的时候可以,再开个终端去目标目的,用这个命令可以判断是否是在工作
 # df -hT 可以查看已挂载的文件系统格式 
  dd命令:convert and copy a file
     用法:
        dd if=/PATH/FROM/SRC of=/PATH/TO/DEST
        bs=#:block size, 复制单元大小
        count=#:复制多少个bs
            of=file     写到所命名的文件而不是到标准输出
            if=file     从所命名文件读取而不是从标准输入
            bs=size     指定块大小(既是是ibs也是obs)
            ibs=size       一次读size个byte
            obs=size       一次写size个byte
            cbs=size       一次转化size个byte
            skip=blocks   从开头忽略blocks个ibs大小的块
            seek=blocks  从开头忽略blocks个obs大小的块
            count=n       只拷贝n个记录      free内存空间使用状态:
            free [OPTION]
                -m: 以MB为单位
                -g: 以GB为单位


问题与练习

yum问题
   一般yum出问题就在两个地方,yum的缓存和yum的yum的本地指向文件配置出错。
   比如我把yum源服务仓库地址换了,这时候我们本地yum缓存存的还是没更新之前的地址,这时候就需要清除下缓存,从新获取。

1) 查询命令java来自于哪个rpm包
    rpm -qa |grep java
2) 使用本地光盘做为yum源
    1.mount /dev/cdrom /media/
    2.vim /etc/yum.repos.d/dvd.repo
    [base]
    name=magedu centos $releasever dvd
    baseurl=file:///media
    enabled=1
    gpgcheck=1
    gpgkey=file:///media/RPM-GPG-KEY-CentOS-7

mount

    
 对于有进程访问目录而无法卸载的情况 
  方法一:
    [root@localhost_v6 ~]# lsof /app/data1/
    COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    sleep   4137 root  cwd    DIR    8,8  2802688    2 /app/data1
    [root@localhost_v6 ~]# kill 4137


 方法二:
    fuser -vm /app/data1
    fuser -km /app/data1

练习:通过/etc/fstab ,指定挂载点,可以查出对应的分区名

方法一: dir=/;findfs `cat /etc/fstab |grep -w $dir |cut -d" " -f1`
方法二: dir=/;findfs $(cat /etc/fstab |grep "[[:space:]]$dir[[:space:]]" | cut -d" " -f1)
方法三: dir=/app;findfs $(cat /etc/fstab |grep "$dir[[:blank:]]"|sed -r "s@(.*)[[:blank:]]+$dir.*@\1@")
    
 关于本地仓库自动挂载
        autofs(yum安装软件包)
        systemctl start autofs (开启服务)
        systemctl enable autofs

扩展swap

 1、 基于分区的Swap
      第一步 创建分区
        fdisk /dev/sda 
      第二步 签名与激活
            mkswap /dev/sda9
            swapon /dev/sda9
      第三步 开机自动激活,写入/etc/fstab
            vim /etc/fstab
            UUID=8a5c6dbe-1025-462b-ad32-53ded1918d63 swap              swap    defaults      0 0   
    
2、 基于文件的swap
    dd if=/dev/zero of=swap.img bs=1M count=1024
    mkswap swap.img
    swapon /app/swap.img
    开机自动激活,写入/etc/fstab
    /app/swap.img                             swap              swap      defaults    0 0



      第四步 swapon -s 查看生效
              free -h

     

linux上访问ntfs文件系统

 方法一:重新编译内核,使ntfs模块被编译
    read only
 方法二:ntfs-3g  epel

 
 

你可能感兴趣的:(Linux,基础命令,yum,rpm,磁盘文件系统)