文件管理命令――压缩解压缩及归档基本工具
压缩、解压缩命令
压缩格式:gz, bz2, xz, zip, Z
压缩算法:算法不同,压缩比也会不同;
早期
压缩:
compress(压缩比很小): FILENAME.Z ―― 压缩后的文件名
解压:
uncompress
gzip、bzip2、xz只能压缩文件,并且默认压缩完成后删除源文件,zip可以压缩目录
gzip: .gz
gzip /PATH/TO/SOMEFILE:压缩完成后会删除原文件
-d: 解压缩
-#:1-9,指定压缩比,默认是6;
gunzip: (解压缩)
gunzip /PATH/TO/SOMEFILE.gz: 解压完成后会删除原文件
zcat /PATH/TO/SOMEFILE.gz: 不解压的情况,查看文本文件的内容
bzip2: .bz2
bzip2比gzip有着更大压缩比的压缩工具,使用格式近似
bzip2 /PATH/TO/SOMEFILE
-d:解压缩
-#: 1-9,指定压缩比,默认是6;
-k: 压缩时保留原文件
bunzip2 /PATH/TO/SOMEFILE.bz2 ―― 解压缩
bzcat /PATH/TO/SOMEFILE.bz2: 不解压的情况,查看文本文件的内容
xz: .xz
xz /PATH/TO/SOMEFILE
-d:解压缩
-#: 1-9,指定压缩比,默认是6;
-k: 压缩时保留原文件
unxz
xzdec:解压
-k 保留源文件
-c 输出到屏幕上
xzcat :不解压的情况,查看文本文件的内容
zip: 既归档又压缩的工具
zip FILENAME.zip FILE1 FILE2 …: 压缩后不删除原文件
unzip FILENAME.zip 解压
archive: 归档(把多个文件整合成一个文件),归档本身并不意味着压缩
tar: 归档工具, .tar ―― 只归档不压缩
-c: 创建归档文件
-f FILE.tar: 操作的归档文件(f后面必须要有参数)
-x: 展开归档
–xattrs: 归档时,保留文件的扩展属性信息(备份)
-t: 不展开归档,直接查看归档了哪些文件
-zcf: 归档并调用gzip压缩
-zxf: 调用gzip解压缩并展开归档,-z选项可以省略
-jcf: 归档并调用bzip2压缩
-jxf: 调用bzip2解压缩并展开归档,
-Jcf: 归档并调用xz压缩 ―― (redhat6)
tar -cf xx.tar FILE 归档并调用xz压缩
xz ${DEST}.tar
-Jxf: 调用xz解压缩并展开归档,
cpio: 归档工具
file /boot/initr… .img ―― gzip
cp /boot/initr… .img /root
mv initr… .img initr…img.gz ―― 重命名
ls
gzip -d initr…img.gz ―― 解压文件
ls -lh
file initrd…img ―― cpio
练习:编写一个脚本
1. 从键盘获得两个两个值,并计算两值的和
#!/bin/bash
echo "Input two intergers:"
read A B
echo "$A + $B = $[$A+$B]"
2.从键盘让用户输入几个文件,脚本能够将此几个文件归档压缩成一个文件
#!/bin/bash
#
read -p "Input three files: " FILE1 FILE2 FILE3
read -p "Destnation : " 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 -cf ${DEST}.tar $FILE1 $FILE2 $FILE3
xz ${DEST}.tar
;;
*)
echo "Unknown"
exit 8
;;
esac
脚本编程:
顺序结构
选择结构
if
case
循环结构
for
while
until
while循环:适用于循环次数未知的场景,要有退出条件
语法:
while CONDITION; do
statement
...
done
1.计算100以内所有正整数的和
#!/bin/bash
#
declare -i I=1
declare -i T=0
while [ $I -le 100 ];do
let T+=$I
let I++
done
echo $T
2.从键盘获取字符串,小写的替换成大写的输出,直到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
3.每隔5s就检查hadoop是否登录,
如果登录,显示其登录并退出;否则,显示当前时间,并说明hadoop尚未登录
#!/bin/bash
#
who | grep "hadoop" &> /dev/null
RETVAL=$?
while [ $RETVAL -ne 0 ]; do
echo "`date`, hadoop is not login."
sleep 5
who | grep "hadoop" &> /dev/null
RETVAL=$?
done
echo "hadoop is logged in."
4.写一个脚本:
1) 显示一个菜单给用户:
d|D) show disk usages.
m|M) show memory usages.
s|S) show swap usages.
*) quit.
2) 当用户给定选项后显示相应的内容;
扩展:
当用户选择完成,显示相应信息后,不退出;
而让用户再一次选择,再次显示相应内容;除了用户使用quit;
#!/bin/bash
#
cat << EOF
d|D) show disk usages.
m|M) show memory usages.
s|S) show swap usages.
*) quit.
EOF
read -p "You choice: " CHOICE
while [ $CHOICE != ‘quit‘ ]; do
case $CHOICE in
d|D)
echo "Disk usage:"
df -h ;;
m|M)
echo "Memory usage:"
free -m | grep "Mem" ;;
s|S)
echo "Swap usage:"
free -m | grep "Swap" ;;
*)
echo "Unknown."
;;
esac
read -p "You choice,Again: " CHOICE
done
echo命令
eg1:echo -e "\033[35mHello world\033[0m."
eg2:echo -e "\033[1;36;45mHello World.\033[0m"
-e开启逃逸符 \033表示ctrl
[0m结束符
一位数字,表示字体格式
eg:1,加粗显示
eg:5,字体闪烁
eg:7,前景色与背景色调换
两位整数表示,同时控制前后景,用分号分割
3#:字体前景色
4#:字体背景色