tar 的目标文件和源文件均在磁盘上

本文深入分析了使用tar命令压缩文件时,在不同存储位置下遇到的磁盘文件存在性判断异常问题,以及磁盘缓存机制对其的影响。通过实验对比,揭示了将目标文件置于内存中能有效避免该问题的现象,并解释了tar命令如何利用磁盘缓存进行文件操作。

 碰到一个问题,不是必现,偶然会出现,但是一旦出现,经常会出现,一旦不出现,长时间不出现。

     tar 的目标文件和源文件均在flash中,当执行 tar  czf  test.tgz  /f/brd/test_*.xml.gz; 然后调用 access("/f/brd/test.tgz", F_OK ) 函数判断磁盘上该文件是否存在,经常会返回该文件不存在;当把 tar 的目标文件改为在内存中,这个问题就不经常出现;对磁盘中文件进行读写操作,会先进行cache;当把页高速缓存写满后,会把脏页回写到磁盘。tar 也是如此吗?

<think>嗯,用户现在需要一些Linux命令的操作代码,涉及find、tar、gzip等。首先,我得仔细看看用户的具体要求。他们提到了五个部分:find命令定位所有者为student的文件tar压缩文件,保存/etc目录到/tmp,列出文件大小,以及使用gzip压缩。我需要确保每个部分都有对应的代码示例,并且要准确。 首先,关于find命令,用户想查找所有者是student的文件。我记得find命令的-user选项可以指定用户,所以应该是find / -user student这样的结构。不过可能还需要考虑权限问题,可能需要加上2>/dev/null来忽略错误输出。同时,用户可能需要不同类型的文件,比如普通文件,所以加上-type f会更准确。 接下来是tar压缩文件。用户提到保存/etc目录到/tmp,所以需要将/etc打包成一个tar文件tar的基本命令是tar -cvf,然后指定目标文件源目录。例如,tar -cvf /tmp/etc_backup.tar /etc。不过用户可能还想用gzip压缩,这时候可以用-z选项,生成.tar.gz文件,比如tar -czvf /tmp/etc_backup.tar.gz /etc。这里要注意路径是否正确,以及是否有足够的权限写入/tmp目录。 保存目录到/tmp应该就是上面的tar命令,但用户可能还需要确认如何验证备份是否成功。可能需要列出tar文件的内容,用tar -tvf命令。另外,用户可能想知道如何解压,所以提供一个解压的示例也会有帮助,比如tar -xzvf。 列出文件大小的话,常用的命令是ls -lh,但用户可能需要更详细的信息,比如按大小排序,或者只显示特定目录下的文件大小。du命令也是个好选择,比如du -sh /etc可以显示/etc目录的总大小,而du -ah --max-depth=1 /etc则可以列出每个子目录的大小。可能还需要结合sort来排序,比如du -ah /etc | sort -rh | head -n 10,显示最大的10个文件或目录。 使用gzip压缩文档,除了在tar中使用-z选项外,单独使用gzip的话,比如gzip filename会生成filename.gz,但这样会删除原文件。如果用户想保留原文件,可能需要使用-c选项重定向,比如gzip -c file.txt > file.txt.gz。另外,可能需要解压的示例,比如gzip -d file.txt.gz。 在参考之前的引用时,用户提到了zip压缩,但这次需求是gzip,所以不需要涉及zip。不过之前的引用中关于路径的部分(引用[2])可能需要提醒用户注意绝对路径相对路径的使用,尤其是在find命令中指定搜索路径时。比如,如果用户在当前目录下查找,可以使用相对路径,否则用绝对路径。 用户可能还有一些潜在的需求,比如如何排除某些文件或目录,或者在查找文件时结合其他条件,比如按修改时间过滤。不过根据当前的问题,可能不需要涉及这些,但如果有余力的话,可以提供一些扩展示例,比如使用-mtime选项。例如,引用[4]提到文件修改时间的处理,可以举例如何查找最近修改过的文件,比如find / -user student -mtime -7,查找7天内修改过的文件。 此外,用户可能需要了解如何验证命令执行后的结果,比如检查压缩文件是否生成,或者查看文件权限是否正确。例如,在保存/etc到/tmp后,用ls -l /tmp/etc_backup.tar来确认文件的存在大小。 最后,要确保提供的命令正确无误,并且有注释说明每个参数的作用,这样用户能更好地理解。比如,在tar命令中,-c是创建,-v是显示过程,-f是指定文件名,-z是使用gzip压缩。这些解释能帮助用户记忆正确使用选项。</think>### Linux命令操作代码示例 #### **1. 使用`find`命令定位所有者为`student`的文件** ```bash # 查找所有者是student的文件(基础版) find / -user student 2>/dev/null # 查找所有者是student的普通文件(排除目录、设备文件等) find / -type f -user student 2>/dev/null # 查找并列出文件详细信息(权限、大小、路径) find / -user student -exec ls -lh {} \; 2>/dev/null ``` --- #### **2. 使用`tar`压缩`/etc`目录到`/tmp`** ```bash # 将/etc目录打包为tar文件(不压缩) tar -cvf /tmp/etc_backup.tar /etc # 使用gzip压缩(生成.tar.gz文件tar -czvf /tmp/etc_backup.tar.gz /etc # 解压命令(备用参考) tar -xzvf /tmp/etc_backup.tar.gz -C /目标路径 ``` --- #### **3. 列出文件大小** ```bash # 查看/etc目录总大小 du -sh /etc # 列出/etc下每个子目录的大小 du -ah --max-depth=1 /etc | sort -rh # 列出所有者为student的文件大小(结合find) find / -user student -exec du -sh {} \; 2>/dev/null ``` --- #### **4. 使用`gzip`压缩单个文件** ```bash # 压缩文件(生成.gz文件,原文件会被删除) gzip file.txt # 保留原文件并压缩(需配合输出重定向) gzip -c file.txt > file.txt.gz # 解压.gz文件 gzip -d file.txt.gz ``` --- #### **5. 综合操作:查找文件并压缩** ```bash # 查找所有者为student的文件,打包并压缩到/tmp find / -user student -exec tar -czvf /tmp/student_files.tar.gz {} + ``` --- ### **关键参数说明** | 命令/参数 | 功能说明 | |---------------------|------------------------------------------------------------------------| | `find -user` | 按文件所有者过滤,需结合路径(如`/`表示全盘搜索)[^2] | | `tar -czvf` | `c`=创建压缩包,`z`=gzip压缩,`v`=显示过程,`f`=指定文件名[^1] | | `du -sh` | `-s`=汇总大小,`-h`=人类可读格式(如KB/MB) | | `gzip -c` | 压缩后输出到标准输出,需配合`>`重定向保留原文件[^1] | --- ### **注意事项** 1. **权限问题**: - 若当前用户非`root`,`find`搜索系统目录时可能因权限不足报错,使用`sudo`提升权限[^2]。 - 压缩系统目录(如`/etc`)需确保对目标路径(如`/tmp`)有写入权限。 2. **路径规范**: - 使用绝对路径(如`/etc`)避免歧义[^2],相对路径需注意当前工作目录。 3. **存储管理**: - 大文件压缩前建议检查磁盘空间(`df -h /tmp`)。 --- ### **相关问题** 1. 如何通过`find`命令按修改时间筛选文件(如最近7天)[^4]? 2. `tar`与`gzip`的区别是什么?何时选择`.tar.gz`或`.zip`[^1]? 3. 如何限制`du`命令输出的深度或排除特定目录?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值