linux命令$tar -cvf /home/ks/a/ab.tar a.c b.c 是什么意思?没看明白备份什么的。。。

作者&投稿:市亚 (若有异议请与网页底部的电邮联系)
tar -cvf - /home | tar -xvf -~

tar 是unix/linux下的打包器。
-cvf可以看做-c -v -f,-xvf则是-x -v -f。
其中-c/-x分别表示create/extract,即打包/解包。
-v 是verbose,表示显示打包/解包的详细过程。
-f 表示file,表示打包输出/解包输入文件,后面跟"-"表示使用“标准输入/输出”(stdin/stdout)作为输出/输入文件。
两个tar命令之间的"|"表示“重定向”,即第一个命令的stdout(也就是打包的输出)作为第二个命令的stdin(也就是解包的输入)。

这个命令的最终结果是,将/home目录(包括其下的各级子目录)(通过打包到stdout=>再解包stdin)复制到“当前目录”。

1、表示标准输出流。减号”-“就是代表标准输出/标准输入
2、通过ssh传送文本
cat id_rsa.pub |ssh root@172.16.1.5 'cat - >> ~/.ssh/authorized_keys'
3、实现复制的例子tar cf - access.log |tar xf - -C /opt
4、脚本中可以这样在crontab里添加一个任务
{ crontab -l; echo "* * * * * /bin/date >> /tmp/log" ; } | crontab -
5、在文件头添加一行,也可以这样玩
cat - a.txt b.txt
6、只取一列并与另一文件做diff
awk '{ print $1 }' a | diff - b
7、例子, 打包1个文件夹 /var/log/ ,并用zip压缩,
可以分步执行
#tar -cvf log.tar /var/log/
#zip -r log.tar.zip log.tar
#rm -rf log.tar
写成一条语句就是
tar -cvf log.tar /var/log/ && zip -r log.tar.zip log.tar && rm -rf log.tar
发现第一条语句的输出(log.tar) 就是第二条语句的输入
这种情况下我们可以用 “-” 来取代这个输出输入
直接执行如下语句就ok了
tar -cvf - /var/log | zip -r log.zip -
意思就是 第一条语句不再输入到1个具体文件,而输出到stdout中, 而作为第二条件的标准输入(stdin), 而stdin 和 stdout都可以用“-”来取代。
这样的话就不会有中间文件生成了~

tar 是unix/linux下的打包器。
-cvf可以看做-c -v -f
其中-c表示create,即打包。
-v 是verbose,表示显示打包的详细过程。
-f 表示file,表示打包输出/输入文件。
/home/ks/a/ab.tar 表示输出的打包文件
a.c b.c 表示输入文件,在当前目录下的两个c文件

把a.c和b.c两个文件打一个包。归档包文件的为
/home/ks/a/ab.tar

将当前目录下 a,c 和b.c 两个文件,打成tar包/home/ks/a/ab.tar