Linux压缩及归档
压缩格式:gz、bz2,xz,zip,Z
1、gzip:
gzip: .gz
gzip /PATH/TO/SOMEFILE:压缩完成后会删除原文件(只能压缩文件,不能压缩目录)
例:[root@Ourlab ~]# gzip ./compresstest
-d:相当于gunzip解压缩文件
例:[root@Ourlab ~]# gzip -d ./compresstest.gz
-#:指定压缩比,#取值1-9,默认是6
例:[root@Ourlab ~]# gzip -9 ./compresstest
gunzip:
gunzip /PATH/TO/SOMEFILE.gz :解压缩完成后会删除原文件
例:[root@Ourlab ~]# gunzip ./compresstest.gz
zcat:在不解压缩情况下查看压缩文件
zcat /PATH/TO/SOMEFILE.gz
例:[root@Ourlab ~]# zcat ./compresstest.gz
2、bzip2
bzip2: .bz2
比gzip 有着更大压缩比的压缩工具,使用格式近似
bizp2 /PATH/TO/SOMEFILE
-d:解压缩完成后会删除原文件
-#:指定压缩比,#取值1-9,默认是6
-k:压缩时保留原文件,与-d 配合使用解压缩时保留原文件
bunzip2
bunzip2 /PATH/TO/SOMEFILE
bzcat:在不解压缩情况下查看压缩文件
3、xz
xz : .xz
xz /PATH/TO/SOMEFILE
-d:解压缩完成后会删除原文件
-#:指定压缩比,#取值1-9,默认是6
-k:压缩时保留原文件,与-d 配合使用解压缩时保留原文件
unxz:解压缩完成后会删除原文件
unxz /PATH/TO/SOMEFILE
xzcat:在不解压缩情况下查看压缩文件
4、zip:既归档又压缩的工具,具备压缩目录文件
zip FILENAME.zip FILE1 FILE2.....:压缩后不删除原文件
unzip:解压缩完成后保留原文件
5、tar:归档工具不压缩
-c:创建归档文件
-f FILE.tar:操作的归档文件(与其他功能项配合使用)
例:[root@Ourlab ~]# tar -cf test.tar test*.txt
-x:展开归档
例:[root@Ourlab ~]# tar -xf test.tar
--xattrs:归档时,保留文件的扩展属性信息
-t:不展开归档,直接查看归档了哪些文件
例:[root@Ourlab ~]# tar -tf test.tar
-zcf:归档并调用gzip压缩
-zxf:调用gzip解压缩并展开归档,-z选项可省略
-jcf:归档并调用bzip2压缩
-jxf:调用bzip2解压缩并展开归档
-Jcf:归档并调用xz压缩
-Jxf:调用xz解压缩并展开归档
6、cpio:归档工具
7、read:同时多个赋值
例:[root@Ourlab ~]# read NAME AGE
XIAOXIAO 24
[root@Ourlab ~]# echo $NAME
XIAOXIAO
[root@Ourlab ~]# echo $AGE
24
-p "PROMPT":给出提示
例:[root@Ourlab ~]# read -p "duogefuzhi:" NAME AGE
duogefuzhi:XIAOXIAO 18
[root@Ourlab ~]# echo $NAME
XIAOXIAO
[root@Ourlab ~]# echo $AGE
18
例:写一个脚本SUM.sh,实现输入两个数值,实现求和:
#!/bin/bash
#
read -p "IInput two intergers:" A B
echo "$A plus $B is:$[$A+$B]"
-t:指定超时时间
例:写一个脚本SUM2.sh,实现输入 A、B两个数值且规定超时时长为5秒钟,超时则退出,
若A为空则将A赋值为100,若B为空则将B赋值为1000,并实现求和:
#!/bin/bash
#
read -t 5 -p "Input two integers:" A B
[ -z $A ] && A=100
[ -z $B ] && B=1000
echo "$A plus $B is:$[$A+$B]"
8、while循环:适用于循环次数未知的场景
语法:
while CONDITION; do
statement
.....
done
例:计算100以内所有正整数的和;
while.sh脚本
#!/bin/bash
#
declare -i I=1
declare -i SUM=0
while [ $I -le 100 ]; do
let SUM+=$I
let I++
done
echo $SUM
例:写一个脚本translate.sh,从键盘输入一段文字,脚本能够自动将小写字母转换为大写字母;
#!/bin/bash
#
read -p "Input someting :" STRING
while [ $STRING != 'quit' ]; do
echo $STRING | tr 'a-z' 'A-Z'
read -p "Input someting:" STRING
done
9、echo:
-e:允许后面的输出进行转义,可以使输出文本警示作用
例:输出文本,使Hello加粗显示
[root@Ourlab ~]# echo -e "\033[1mHello\033[0m,world."
或
[root@Ourlab ~]# echo -e "\033[1;1mHello\033[0m,world."
例:输出文本,使Hello红色字体显示
[root@Ourlab ~]# echo -e "\033[31mHello\033[0m,world."
例:输出文本,使Hello绿色字体显示
[root@Ourlab ~]# echo -e "\033[32mHello\033[0m,world."
例:输出文本,使Hello黄色字体显示
[root@Ourlab ~]# echo -e "\033[33mHello\033[0m,world."
例:输出文本,使Hello蓝色字体显示
[root@Ourlab ~]# echo -e "\033[34mHello\033[0m,world."
例:输出文本,使Hello紫色字体显示
[root@Ourlab ~]# echo -e "\033[35mHello\033[0m,world."
例:输出文本,使Hello青色字体显示
[root@Ourlab ~]# echo -e "\033[36mHello\033[0m,world."
例:输出文本,使Hello灰色字体显示
[root@Ourlab ~]# echo -e "\033[37mHello\033[0m,world."
例:输出文本,使Hello红色背景显示
[root@Ourlab ~]# echo -e "\033[41mHello\033[0m,world."
例:输出文本,使Hello红色背景,绿色字体显示
[root@Ourlab ~]# echo -e "\033[32;41mHello\033[0m,world."
例:输出文本,使Hello红色背景,绿色字体并加粗显示
[root@Ourlab ~]# echo -e "\033[1;32;41mHello\033[0m,world."
练习1:写一个脚本,从键盘让用户输入几个文件,脚本能够将此几个文件归档压缩成一个文件;
#!/bin/bash
#
read -p "Three files:" FILE1 FILE2 FILE3
read -p "Destination:" DEST
read -p "Compress[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 -Jcf ${DEST}.tar.xz $FILE1 $FILE2 $FILE3
;;
*)
echo "Unknown."
exit 9
;;
esac
练习2:每隔5秒查看hadoop用户是否登录,如果登录,显示其登录并退出;否则,显示当前时间,并说明hadoop尚未登录:
#!/bin/bash
#
who | grep "hadoop" &> /dev/null
RETVAL=$?
while [ $RETVAL -ne 0 ]; do
echo "`date`,hadoop is not loged."
sleep 5
who | grep "hadoop" &> /dev/null
RETVAL=$?
done
echo "hadoop is logged in."
练习3:写一个脚本:showdisk1.sh
1) 显示一个菜单给用户:
d|D) show disk usages.
m|M) show memory usages.
s|S) show swap usages.
*) quit.
2) 当用户给定选项后显示相应的内容;
#!/bin/bash
#
cat << EOF
d|D) show disk usages.
m|M) show memory usages.
s|S) show swap usages.
*) quit.
EOF
read -p "Your choice:" CHOICE
case $CHOICE in
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."
exit 9;;
esac
扩展:写一个脚本showdisk2.sh
当用户选择完成,显示相应信息后,不退出;而让用户再一次选择,再次显示相应内容;除了用户使用quit;
#!/bin/bash
#
cat << EOF
d|D) show disk usages.
m|M) show memory usages.
s|S) show swap usages.
*) quit.
EOF
read -p "Your choice:" CHOICE
while [ $CHOICE != 'quit' ]; do
case $CHOICE in
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
阅读(1016) | 评论(0) | 转发(0) |