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 [email protected]:/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 [email protected]:/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使用)

猜你喜欢

转载自www.cnblogs.com/eddie1127/p/11335307.html