磁盘管理
文件系统管理
重新创建文件系统会损坏原有文件
cat/proc/partitions 查看文件分区
cat /proc/filesystems 查看内核支持文件系统类型
partprobe 重新探测分区
mkfs: make filesystem 创建文件系统
-t FSTYPE 文件系统类型
mkfs -t ext2 /dev/sda5
mkfs -t ext3 /dev/sda7
mkfs -t ext2 =mkfs.ext2
mkfs -t ext3 =mkfs.ext3
专门管理ext系列文件:
mke2fs
-j:创建ext3类型文件系统
-b BLOCK_SIZE: 指定块大小,默认为4096;可用取值为1024、2048或4096;
-L LABEL:指定分区卷标;
-m #: 指定预留给超级用户的块数百分比 mke2fs -m 3 /dev/sda5
-I #: 用于指定为多少字节的空间创建一个inode,默认为8192;这里给出的数值应该为块大小的2^n倍;8192一个inode
mke2fs-i 4096 /dev/sda5
-N #: 指定inode个数;
-F:强制创建文件系统;
-E:用户指定额外文件系统属性;
blkid:
查询或查看磁盘设备的相关属性
UUID
TYPE
LABEL
e2label:
用于查看或定义卷标e2label设备文件 卷标: 设定卷标
tune2fs:
调整文件系统的相关属性 快大小不可以修改
-j:不损害原有数据,将ext2升级为ext3;
-L LABEL: 设定或修改卷标;
-m #: 调整预留百分比;
-r #: 指定预留块数;
-o:设定默认;挂载选项
acl挂载选项
-c #:指定挂载次数达到#次之后进行自检,0或-1表关闭此功能;
-I #: 每挂载使用多少天后进行自检;0或-1表示关闭此功能;
-l: 显示超级块中的信息;
dumpe2fs:
显示文件属性信息
-h:只显示超级块中的信息
fsck:
检查并修复Linux文件系统
-tFSTYPE: 指定文件系统类型
-a:自动修复 不询问
e2fsck:
专用于修复ext2/ext3文件系统
-f:强制检查;
-p:自动修复;
mount:
挂载将新的文件系统关联至当前根文件系统
mount 设备 挂载点
设备:
设备文件:/dev/sda5
卷标:LABEL=“”
UUID: UUID=“”
挂载点:目录
要求:
1、此目录没有被其它进程使用;
2、目录得事先存在;
3、目录中的原有的文件将会暂时隐藏;
cd 进挂载的目录可以看到lost+find 证明挂载成功
mount: 显示当前系统已经挂载的设备及挂载点
mount [options][-o options] DEVICEMOUNT_POINT
-a:表示挂载/etc/fstab文件中定义的所有文件系统
-n:默认情况下,mount命令每挂载一个设备,都会把挂载的设备信息保存至/etc/mtab文件;使用—n选项意味着挂载设备时,不把信息写入此文件;
-t FSTYPE: 指定正在挂载设备上的文件系统的类型;不使用此选项时,mount会调用blkid命令获取对应文件系统的类型;
-r:只读挂载,挂载光盘时常用此选项
-w:读写挂载
-o:指定额外的挂载选项,也即指定文件系统启用的属性;
remount:重新挂载当前文件系统
ro:挂载为只读
rw:读写挂载
挂载完成后,要通过挂载点访问对应文件系统上的文件;
umount:
卸载某文件系统,将某文件系统与当前根文件系统的关联关系预以移除;
umount设备
umount挂载点
卸载注意事项:
挂载的设备没有进程使用;
练习:
1、创建一个2G的分区,文件系统为ext2,卷标为DATA,块大小为1024,预留管理空间为磁盘分区的8%;挂载至/backup目录,要求使用卷标进行挂载,且在挂载时启动此文件系统上的acl功能;
# mke2fs -L DATA-b 1024 -m 8 /dev/sda7
# mount -o aclLABEL=DATA /backup
# tune2fs -o acl/dev/sda7
# mount LABEL=DATA/backup
2、将此文件系统的超级块中的信息中包含了block和inode的行保存至/tmp/partition.txt中;
# tune2fs -l |egrep -i "block|inode" >>/tmp/partition.txt
# dumpe2fs -h |
3、复制/etc目录中的所有文件至此文件系统;而后调整此文件系统类型为ext3,要求不能损坏已经复制而来的文件;
# cp -r/etc/* /backup
#tune2 -j/dev/sda7
4、调整其预留百分比为3%;
# tune2fs -m 3 -LDATA /dev/sda7
5、以重新挂载的方式挂载此文件系统为不更新访问时间戳,并验正其效果;
# stat/backup/inittab
# cat/backup/inittab
# stat
# mount -oremount,noatime /backup
# cat
# stat
6、对此文件系统强行做一次检测;
e2fsck -f/dev/sda7
7、删除复制而来的所有文件,并将此文件系统重新挂载为同步(sync);而后再次复制/etc目录中的所有文件至此挂载点,体验其性能变化;
# rm -rf /backup/*
# mount -oremount,sync /backup
# cp -r /etc/*/backup
swap分区:
free
-m
fdisk命令中,调整分区类型为82;swap
创建交换分区:
mkswap /dev/sda8
-LLABEL
挂载交换分区
swapon /dev/sda8
-a:启用所有的定义在/etc/fstab文件中的交换设备
swapoff /dev/sda8
回环设备
loopback, 使用软件来模拟实现硬件
创建一个镜像文件,120G
dd命令:
复制文件直接复制文件的01代码
if=数据来源inputfile
of=数据存储目标outputfile
bs=1一次复制的大小
count=2复制多少块
seek=#:创建数据文件时,跳过的空间大小;
dd if=/dev/sdaof=/mnt/usb/mbr.backupbs=512 count=1 从硬盘最开始处(MDR ) 备份MDR
ddif=/mnt/usb/mbr.backup of=/dev/sdabs=512 count=1
dd if=/dev/zeroof=/var/swapfile bs=1Mcount=1024 从泡泡设备复制0 1G
cat /dev/cdrom> /root/rhe15.iso
dd if=/dev/zeroof=/var/swapfile2 seek=1023bs=1M count=1 创建1G文件跳过1023M
ls 是假的大小
du 可以看到 du -sh/var/swapfile2
/dev/null
mount命令,可以挂载iso镜像;
mount DEVICEMOUNT_POINT
-o loop: 挂载本地回环设备
wgetftp://172.16.0.1/pub/isos/rhci-5.8-1.iso
mount /dev/sda5 /mnt/test
df 查看挂载设备
文件系统的配置文件/etc/fstab
OS在初始时,会自动挂载此文件中定义的每个文件系统
要挂载的设备 挂载点 文件系统类型 挂载选项 转储频率(每多少天做一次完全备份) 文件系统检测次序(只有根可以为1)
/dev/sda5 /mnt/test ext3 defaults 00
mount -a:挂载/etc/fstab文件中定义的所有文件系统
fuser: 验正进程正在使用的文件或套接字文件
-v:查看某文件上正在运行的进程
-k:kill文件
-m: 挂载点
fuser-km MOUNT_POINT:终止正在访问此挂载点的所有进程
练习:
1、创建一个5G的分区,文件系统为ext3,卷标为MYDATA,块大小为1024,预留管理空间为磁盘分区的3%,要求开机后可以自动挂载至/data目录,并且自动挂载的设备要使用卷标进行引用;
2、创建一个本地回环文件/var/swaptemp/swapfile来用于swap,要求大小为512MB,卷标为SWAP-FILE,且开机自动启用此交换设备;
# mkdir/var/swaptemp
# dd if=/dev/zeroof=/var/swaptemp/swapfilebs=1M count=512
# mkswapLABLE=SWAP-FILE/var/swaptemp/swapfile
/etc/fstab
/var/swaptemp/swapfile swap swap defaults 00
3、上述第一问,如何让其自动挂载的同时启用ACL功能;
/etc/fstab
LABEL='MYDATA' /data ext3 defaults,acl 0 0
压缩、解压缩命令
压缩格式:gz, bz2, xz, zip, Z
压缩算法:算法不同,压缩比也会不同;
compress:FILENAME.Z
uncompress
gzip: .gz
gzip/PATH/TO/SOMEFILE:压缩完成后会删除原文件
-d: gunzip
-#:1-9,指定压缩比,默认是6;
gunzip:
gunzip/PATH/TO/SOMEFILE.gz: 解压完成后会删除原文件
zcat/PATH/TO/SOMEFILE.gz: 不解压的情况,查看文本文件的内容
bzip2: .bz2
比gzip有着更大压缩比的压缩工具,使用格式近似
bzip2/PATH/TO/SOMEFILE
-d解压缩
-#:1-9,默认是6
-k:压缩时保留原文件
bunzip2/PATH/TO/SOMEFILE.bz2
bzcat
cd/etc/yum.repos.d/
server.repo确保这个文件存在否则下载
wgetftp://172.16.0.1/pub/gls/server.repo
主机名改
xz: .xz
xz/PATH/TO/SOMEFILE
-d
-#:1-9, 默认是6
-k:压缩时保留原文件
unxz解压
xzdec解压
xzcat不解压查看
zip: 既归档又压缩的工具
zipFILENAME.zip FILE1 FILE2 ...: 压缩后不删除原文件
unzipFILENAME.zip
archive: 归档,归档本身并不意味着压缩 多个文件压缩成一个
xz, bz2, gz
tar:
归档工具, .tar test.tartest*.txt
-c:创建归档文件
-fFILE.tar: 操作的归档文件
-x:展开归档
--xattrs:归档时,保留文件的扩展属性信息
-t:不展开归档,直接查看归档了哪些文件
-zcf:归档并调用gzip压缩
-zxf:调用gzip解压缩并展开归档,-z选项可省略
-jcf:bzip2归档并调用gzip压缩
-jxf:
-Jcf:xz
-Jxf:
cpio: 归档工具
练习:写一个脚本
从键盘让用户输入几个文件,脚本能够将此几个文件归档压缩成一个文件;
read:
-p“PROMPT": 给出提示
#!/bin/bash
read-p "There file :" FILE1 FILE2 FILE3
read-p "Destition:" " DEST
read-p "CPMPRESS[gzip|bzip2|xz]:" COMP
case$COMP in
gzip)
tar-zcf $(DEST).tar.gz $FILE1 $FILE2 $FILE3;;
bzip2)
tar-jcf $DEST.tar.bz2 $FILE1 $FILE2 $FILE3;;
xz)
tar-cf $DEST.tar $FILE1 $FILE2 $FILE3
xz$DEST.tar;;
*)
echo"Unknow"
exit9;;
脚本编程:
循环结构
for
while
until
while循环:
适用于循环次数未知的场景,要有退出条件语法:
while CONDITION; do
statement
...
done
#!/bin/bash
#
read -p"Input something:" STRING
while[ $STRING !='quit' ]; do
echo $STRING | tr'a-z' 'A-Z'
read -p"Input something:" STRING
done
#!/bin/bash
#
who | grep"hadoop"&>/dev/null
REVAL=$?
while [ $REVAL -ne0 ]; do
sleep 5
who | grep"hadoop"&>/dev/null
REVAL=$?
done
echo "hadoopis logged in."
计算100以内所有正整数的和
#!/bin/bash
declare -i I=1
declare -i SUM=0
while [ $I -le 100]; do
let SUM+=$I
let I++
done
echo $SUM
练习:转换用户输入的字符为大写,除了quit:
#!/bin/bash
#
read -p"Input something: "STRING
while [ $STRING !='quit' ]; do
echo $STRING| tr 'a-z' 'A-Z'
read -p"Input something: " STRING
done
练习:每隔5秒查看hadoop用户是否登录,如果登录,显示其登录并退出;否则,显示当前时间,并说明hadoop尚未登录:
#!/bin/bash
#
who | grep"hadoop" &>/dev/null
RETVAL=$?
while [ $RETVAL-ne 0 ]; do
echo"`date`, hadoop is not log."
sleep 5
who| grep"hadoop" &> /dev/null
RETVAL=$?
done
echo "hadoopis logged in."
写一个脚本:
1) 显示一个菜单给用户:
d|D) show diskusages.
m|M) show memoryusages.
s|S) show swapusages.
*) quit.
2) 当用户给定选项后显示相应的内容;
扩展:
当用户选择完成,显示相应信息后,不退出;而让用户再一次选择,再次显示相应内容;除了用户使用quit;
#!/bin/bash
#
cat << EOF
d|D) show diskusages.
m|M) show memoryusages.
s|S) show swapusages.
*) quit.
EOF
read -p "Yourchoice: " CHOICE
while [ $CHOICE !='quit' ];do
case $CHOICEin
d|D)
echo"Disk usage: "
df-Ph ;;
m|M)
echo"Memory usage: "
free-m | grep "Mem" ;;
s|S)
echo"Swap usage: "
free-m | grep "Swap" ;;
*)
echo"Unknown.." ;;
esac
read -p"Again, your choice: "CHOICE
done
ext2: 文件系统块组组成:
超级块、GDT、block bitmap、inode bitmap、data blocks
文件系统挂载时的注意事项:
1、挂载点事先存在;
2、目录是否已经被其它进程使用;
3、目录中的原有文件会被暂时隐藏;
mount DEVICEMOUNT_POINT
1、设备文件;
2、LABEL
3、UUID
/etc/fstab文件格式:
设备 挂载点 文件系统类型 挂载选项 转储频率 检测次序
tune2fs
-l
-L
-o
dumpe2fs -h
安装RHEL6.3 x86_64的方法(前提:请确保你的CPU支持硬件虚拟化技术):
1、创建虚拟机;
2、下载isos目录中的rhci-rhel-6.3-1.iso,并导入虚拟机的虚拟光驱;
3、在boot提示符输入:linuxip=172.16.x.1 netmask=255.255.0.0gateway=172.16.0.1 dns=172.16.0.1ks=http://172.16.0.1/rhel6.cfg
64, 32
/lib
/lib64