zoukankan      html  css  js  c++  java
  • Linux文本处理sed、软件包管理、磁盘存储、文件系统和挂载

    Linux文本处理工具sed、软件包管理、磁盘存储及文件系统

    文本处理工具sed巧妙用法

    1、通过sed获取文件路径的基名和目录名

    思路:采用正则表达式将文本字符串分组,取对应的分组后向引用即可。

    获取基名

    [root@centos7 ~]#echo /etc/sysconfig/network-scripts/ |sed -r 's@(^/.*/)([^/]+)/?$@2@'
    network-scripts
    

    获取目录名

    [root@centos7 ~]#echo /etc/sysconfig/network-scripts/ |sed -r 's@(^/.*/)([^/]+)/?$@1@'
    /etc/sysconfig/
    

    2、使用sed命令修改Centos7网卡名称为传统eth0默认网卡,方便统一管理

    [root@centos7 ~]#sed -ri '/^[[:space:]]+linux16/s@(.*)@& net.infnames=0@' /boot/grub2/grub.cfg 
    
    [root@centos7 ~]#sed -ri '/GRUB_CMDLINE_LINUX=/s@"$@ net.ifnames=0"@' /etc/default/grub
    

    3、使用sed命令获取本机IPv4地址

    思路:使用sed取行,结合正则表达式及分组,后向引用打印输出需要获取的分组内容即可。

    [root@centos7 ~]#ifconfig eth0 | sed -rn '2s/^[^0-9]+([0-9.]+).*/1/p'
    

    软件包管理 RPM及YUM

    1、rpm命令常见用法

    CentOS系统上使用rpm命令管理程序包:
    安装、卸载、升级、查询、校验、数据库维护

    安装:
    rpm {-i|--install} [install-options] PACKAGE_FILE…
    -v: verbose
    -vv:
    -h: 以#显示程序包管理执行进度
    rpm -ivh PACKAGE_FILE ...
    
    升级:
    rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
    rpm {-F|--freshen} [install-options] PACKAGE_FILE...
    upgrade:安装有旧版程序包,则“升级”
    如果不存在旧版程序包,则“安装”
    freshen:安装有旧版程序包,则“升级”
    如果不存在旧版程序包,则不执行升级操作
    rpm -Uvh PACKAGE_FILE ...
    rpm -Fvh PACKAGE_FILE ...
    --oldpackage:降级
    --force: 强制安装
    
    包查询:
    rpm {-q|--query} [select-options] [query-options]
    
    [select-options]
    -a:所有包
    -f:查看指定的文件由哪个程序包安装生成
    -p rpmfile:针对尚未安装的程序包文件做查询操作
    --whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供
    --whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖
    rpm2cpio 包文件|cpio –itv 预览包内文件
    rpm2cpio 包文件|cpio –id “*.conf” 释放包内文件
    
    [query-options]
    --changelog:查询rpm包的changelog
    -c:查询程序的配置文件
    -d:查询程序的文档
    -i:information
    -l:查看指定的程序包安装后生成的所有文件
    --scripts:程序包自带的脚本
    --provides:列出指定程序包所提供的CAPABILITY
    -R:查询指定的程序包所依赖的CAPABILITY
    

    2、本地yum客户端配置

    设置本地yum源为光盘CDROM

    [base]
    name=cdrom base
    baseurl=file:///misc/cd   # /misc/cd 路径需要系统启用autofs自动挂载服务
    gpgcheck=1
    gpgkey=file:///misc/cd/RPM-GPG-KEY-CentOS-7 #验证秘钥文件
    

    设置阿里与EPEL源

    [epel]
    name=aliyun epel
    baseurl=https://mirrors.aliyun.com/epel/$releasever/$basearch/
    gpgcheck=0    #不启用gpg验证检查
    enabled=1     #禁用epel改为0
    

    3、设置系统使用阿里云yum源

    [root@centos7 ~]#cd /etc/yum.repos.d/   
    [root@centos7 yum.repos.d]#mkdir bak          #在当前目录建立bak备份目录
    [root@centos7 yum.repos.d]#mv *.repo ./bak/   #将系统默认repo文件移动到bak目录备份
    [root@centos7 yum.repos.d]#wget http://mirrors.aliyun.com/repo/Centos-7.repo                     #下载阿里云centos7系统对应的repo文件
    

    4、自己定制配置yum仓库

    [root@centos7 data]#mkdir dnf
    [root@centos7 data]#cd dnf/
    上传rpm包文件到yum仓库目录
    [root@centos7 dnf]#rz -E
    rz waiting to receive.
    [root@centos7 dnf]#ll
    total 808
    -rw-r--r-- 1 root root 213696 Jun  4  2018 dnf-0.6.4-2.sdl7.noarch.rpm
    -rw-r--r-- 1 root root  62404 Jun  4  2018 dnf-conf-0.6.4-2.sdl7.noarch.rpm
    -rw-r--r-- 1 root root  75472 Jun  4  2018 libcomps-0.1.8-3.el7.x86_64.rpm
    -rw-r--r-- 1 root root  46792 Jun  4  2018 python2-libcomps-0.1.8-3.el7.x86_64.rpm
    -rw-r--r-- 1 root root 416988 Jun  4  2018 python-dnf-0.6.4-2.sdl7.noarch.rpm
    自动生成repodata
    [root@centos7 dnf]#createrepo .
    Spawning worker 0 with 3 pkgs
    Spawning worker 1 with 2 pkgs
    Workers Finished
    Saving Primary metadata
    Saving file lists metadata
    Saving other metadata
    Generating sqlite DBs
    Sqlite DBs complete
    配置yum客户端repo文件
    [root@centos7 yum.repos.d]#cat dnf.repo 
    [dnf]
    name=dnf
    baseurl=file:///data/dnf
    gpgcheck=0
    查看是否成功
    [root@centos7 yum.repos.d]#yum repolist 
    

    磁盘存储、分区、文件系统及挂载

    1、MBR分区方式与GPT分区方式主要区别

    MBR分区方式:
    按32位表示扇区数,按柱面划分分区,最多管理2TB空间。最多支持4个主分区,或3个主分区一个扩展分区,扩展分区中可以有多个逻辑分区。
    
    分区信息存放位于:0磁道0扇区
    0磁道0扇区:512bytes
    446bytes: boot loader #启动主引导程序
    64bytes:分区表,其中每16bytes标识一个分区
    2bytes: 55AA #结束标记位字符
    
    GPT分区方式:
    使用64位表示扇区,最多128个分区,支持8Z( 512Byte/block )或64Z ( 4096Byte/block)空间,使用128位UUID表示磁盘和分区,GPT分区表自动备份在头和尾两份,并有CRC校验位
    GPT方式的分区安装操作系统,需要使用UEFI来引导操作系统启动
    

    2、Linux常用磁盘分区工具命令

    分区工具parted:

    parted的操作都是实时生效的,小心使用
    用法:parted [选项]... [设备 [命令 [参数]...]...]
    parted /dev/sdb mklabel gpt|msdos
    parted /dev/sdb print
    parted /dev/sdb mkpart primary 1 200 (默认M)
    parted /dev/sdb rm 1
    parted  /dev/sdb –l 列出分区信息
    

    分区工具fdisk和gdisk:

    gdisk /dev/sdb 类fdisk 的GPT分区工具
    fdisk -l [-u] [device...] 查看分区
    fdisk /dev/sdb 管理分区
    子命令:
    p 分区列表
    t 更改分区类型
    n 创建新分区
    d 删除分区
    v 校验分区
    u 转换单位
    w 保存并退出
    q 不保存并退出
    

    3、同步分区表

    查看内核是否已经识别新的分区
    cat /proc/partations
    centos6通知内核重新读取硬盘分区表
    
    新增分区用
    partx -a /dev/DEVICE
    kpartx -a /dev/DEVICE -f: force
    
    删除分区用
    partx -d --nr M-N /dev/DEVICE
    
    CentOS 5与centos7使用partprobe
    partprobe [/dev/DEVICE]
    

    4、备份和还原MBR分区表

    查看MBR分区表前512个字节
    [root@centos7 data]#hexdump -C /dev/sda -n 512
    把分区表的64个字节拷贝出来,skip是跳过原文件的446个字节。
    [root@centos7 data]#dd if=/dev/sda of=/data/mbr bs=1 count=64 skip=446
    64+0 records in
    64+0 records out
    64 bytes (64 B) copied, 0.000585693 s, 109 kB/s
    把备份数据拷贝到其他服务器上
    [root@centos7 data]#scp mbr root@172.18.20.6:/data
    破坏原来的分区表,seek是跳过目标的446个字节。服务器无法启动。
    [root@centos7 data]#dd if=/dev/zero of=/dev/sda bs=1 count=64 seek=446
    重启进入救援模式。临时配一个IP地址
    [root@centos7 ~]#ifconfig ens33 172.18.20.7
    把备份的拷回来
    [root@centos7 ~]#scp root@172.18.7.7:/data/mbr .
    [root@centos7 data]#dd if=mar_db of=/dev/sda bs=1 count=64 skip=446
    exit #退出救援模式并让系统重启
    

    5、linux常见的几种文件系统及区别

    EXT3 
    (1)最多只能支持32TB的文件系统和2TB的文件,实际只能容纳2TB的文件系统和16GB的文件
    (2)Ext3目前只支持32000个子目录
    (3)Ext3文件系统使用32位空间记录块数量和i-节点数量
    (4)当数据写入到Ext3文件系统中时,Ext3的数据块分配器每次只能分配一个4KB的块
    
    EXT4 
    EXT4是Linux系统下的日志文件系统,是EXT3文件系统的后继版本。
    (1)Ext4的文件系统容量达到1EB,而文件容量则达到16TB 
    (2)理论上支持无限数量的子目录
    (3)Ext4文件系统使用64位空间记录块数量和i-节点数量
    (4)Ext4的多块分配器支持一次调用分配多个数据块
    
    XFS 
    (1)根据所记录的日志在很短的时间内迅速恢复磁盘文件内容
    (2)采用优化算法,日志记录对整体文件操作影响非常小
    (3) 是一个全64-bit的文件系统,它可以支持上百万T字节的存储空间
    (4)能以接近裸设备I/O的性能存储数据
    

    6、文件系统的检查和修复

    文件系统夹故障常发生于死机或者非正常关机之后,挂载为文件系统标记为“no clean”
    注意:一定不要在挂载状态下执行下面命令修复

    fsck: File System Check
    fsck.FS_TYPE
    fsck -t FS_TYPE
    注意:FS_TYPE 一定要与分区上已经文件类型相同
    -a 自动修复
    -r 交互式修复错误
    
    e2fsck:ext系列文件专用的检测修复工具
    -y 自动回答为yes
    -f 强制修复
    -p 自动进行安全的修复文件系统问题
    
    xfs_repair:xfs文件系统专用检测修复工具
    -f 修复文件,而设备
    -n 只检查
    -d 允许修复只读的挂载设备,在单用户下修复 / 时使用,然后立即reboot
    

    7、文件系统挂载

    文件系统挂载命令mount用法

    挂载方法: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':例如-U '0c50523c-43f1-45e7-85c0-a126711d406e'
    (4) 伪文件系统名称:proc, sysfs, devtmpfs, configfs  dir:挂载点
    事先存在,建议使用空目录
    

    mount命令常用选项

    -t vsftype 指定要挂载的设备上的文件系统类型
    -r readonly,只读挂载
    -w read and write, 读写挂载
    -n 不更新/etc/mtab,mount不可见
    -a 自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能)
    -L 'LABEL' 以卷标指定挂载设备
    -U 'UUID' 以UUID指定要挂载的设备
    -B, --bind 绑定目录到另一个目录上
    查看内核追踪到的已挂载的所有设备
    cat /proc/mounts
    
    -o options:(挂载文件系统的选项),多个选项使用逗号分隔
    async 异步模式 sync 同步模式,内存更改时,同时写磁盘
    atime/noatime 包含目录和文件
    diratime/nodiratime 目录的访问时间戳
    auto/noauto 是否支持自动挂载,是否支持-a选项
    exec/noexec 是否支持将文件系统上运行应用程序
    dev/nodev 是否支持在此文件系统上使用设备文件
    suid/nosuid 是否支持suid和sgid权限
    remount 重新挂载
    ro 只读 rw 读写
    user/nouser 是否允许普通用户挂载此设备,/etc/fstab使用
    acl 启用此文件系统上的acl功能
    loop 使用loop设备
    
    defaults:相当于rw, suid, dev, exec, auto, nouser, async
    

    卸载命令umount

    注意:进程正在使用中的设备无法被卸载
    
    查看挂载情况
    findmnt MOUNT_POINT|device
    
    查看正在访问指定文件系统的进程
    lsof MOUNT_POINT
    fuser -v MOUNT_POINT
    
    终止所有在正访问指定的文件系统的进程
    fuser -km MOUNT_POINT
    
    卸载
    umount DEVICE
    umount MOUNT_POINT
    

    文件挂载配置文件/etc/fstab详解

    /etc/fstab每行定义一个要挂载的文件系统,一共6列,对应的列如下:

    第1列:要挂载的设备或伪文件系统设备文件,如
    LABEL:LABEL=""
    UUID:UUID=""
    伪文件系统名称:proc, sysfs
    
    第2列:挂载点
    
    第3列:文件系统类型:ext4,xfs,iso9660,nfs,none
    
    第4列:挂载选项,如defaults ,acl,bind
    
    第5列:转储频率:0:不做备份 1:每天转储 2:每隔一天转储
    
    第6列:fsck检查的文件系统的顺序:允许的数字是0 1 2
    (0:不自检)(1:首先自检;一般只有rootfs才用)(2:非rootfs使用)
    
  • 相关阅读:
    编程学习杂烩
    设计模式
    redis
    H5
    Java
    db工具
    python + pip
    mysql
    Spring Security
    Spring Cloud Gateway
  • 原文地址:https://www.cnblogs.com/eddie1127/p/11335307.html
Copyright © 2011-2022 走看看