当前位置: 首页 > article >正文

Linux进阶系列(三)——重定向、tee、rsync、xargs

目录

  • 1. 重定向
    • 1.1 文件描述符
    • 1.1 标准输入输出与文件之间的重定向
  • 2. tee命令
    • 2.1 tee命令的使用
    • 2.2 tee命令的常用选项
    • 2.3 tee命令的实际应用
  • 3. rsync命令
    • 3.1 rsync的基本用法
    • 3.2 常用选项解释
    • 3.3 rsync的高级用法
    • 3.4 rsync与crontab的结合
  • 4. xargs命令
    • 4.1 xargs的基本用法
    • 4.2 xargs的常用选项
    • 4.3 xargs的实际应用
    • 4.4 xargs与并行处理
  • Ref

1. 重定向

1.1 文件描述符

在 Unix 和类 Unix 系统的 shell 中,文件描述符(File Descriptors,简称 FD)是一个非常重要的概念。它们是一个非负整数,用于标识一个打开的文件、管道或网络连接。以下是最常见的几个文件描述符:

  • 0:标准输入(Standard Input, stdin):这是程序读取输入的默认源。在大多数情况下,它从键盘读取输入,但也可以通过管道或文件重定向来改变。

  • 1:标准输出(Standard Output, stdout):这是程序写入输出的默认目的地。通常,这意味着输出到终端窗口,但也可以通过重定向输出到文件或其他程序。

  • 2:标准错误(Standard Error, stderr):这用于输出错误或诊断信息。它默认也是输出到终端窗口,但可以独立于标准输出进行重定向。

1.1 标准输入输出与文件之间的重定向

将标准输出重定向至文件:

command1 1> filename  # 覆盖模式
command1 1>> filename  # 追加模式

此时 command1 的输出会写入到文件中,不会再显示到终端上。

2. tee命令

command1 的输出写入到文件 filename 中通常会选择

command1 > filename  # 覆盖模式
command1 >> filename  # 追加模式

但该做法的弊端是,command1 的输出不会显示在终端。有时候我们希望 command1 的输出既显示在终端又能输出到文件中,这时候就要用到 tee 命令了。

2.1 tee命令的使用

tee 命令读取标准输入的数据,并将其内容输出到标准输出,同时保存成文件。其基本语法为:

command1 | tee filename

这条命令的作用是将 command1 的输出通过管道传递给 teetee 再将内容同时输出到终端和文件 filename 中。

示例:

ls -l | tee output.txt

这将列出当前目录的详细信息,同时将结果保存到 output.txt 文件中。

2.2 tee命令的常用选项

  • -a:以追加模式写入文件,而不是覆盖。
  • -i:忽略中断信号。

示例:

ls -l | tee -a output.txt

这将把新的输出追加到 output.txt 文件末尾,而不是覆盖。

2.3 tee命令的实际应用

监控系统日志并保存

tail -f /var/log/syslog | tee -a syslog_backup.log

这将实时监控系统日志,并将新的日志内容追加保存到 syslog_backup.log 文件中。

同时将命令输出传递给另一个命令

command1 | tee >(command2) | command3

这允许将 command1 的输出同时传递给 command2command3,实现复杂的数据流处理。

3. rsync命令

rsync 是一个用于文件同步和传输的强大工具,支持本地和远程的文件复制、同步,具有高效的增量传输特性。

3.1 rsync的基本用法

基本语法:

rsync [OPTION]... SRC [SRC]... DEST
  • SRC:源文件或目录
  • DEST:目标文件或目录

示例:

rsync -av /home/user/documents /backup/user/

这将把 /home/user/documents 目录同步到 /backup/user/

3.2 常用选项解释

  • -a:归档模式,等同于 -rlptgoD,会递归复制并保持文件的权限、时间戳等信息。
  • -v:详细模式,显示传输的文件列表。
  • -z:在传输过程中压缩文件,提高传输效率。
  • -e:指定远程 shell,例如 ssh

示例:

rsync -avz -e ssh /local/dir/ user@remote:/remote/dir/

这将通过 SSH 将本地目录同步到远程服务器。

3.3 rsync的高级用法

排除特定文件或目录

rsync -av --exclude='*.tmp' /source/ /destination/

这将同步时排除所有 .tmp 文件。

使用 --delete 参数

rsync -av --delete /source/ /destination/

这将删除目标目录中源目录不存在的文件,使两个目录完全一致。

3.4 rsync与crontab的结合

可以将 rsync 命令加入到 crontab 中,实现定时备份。

编辑 crontab

crontab -e

添加定时任务

0 2 * * * rsync -av --delete /source/ /destination/

这将在每天凌晨 2 点执行同步。

4. xargs命令

xargs 用于将标准输入的数据转换为命令行参数,从而对批量数据执行操作。

4.1 xargs的基本用法

示例:

cat file_list.txt | xargs -I {} cp {} /backup/

这将把 file_list.txt 中的每个文件复制到 /backup/ 目录。

4.2 xargs的常用选项

  • -I {}:指定替换字符串,将 {} 替换为从输入读取的内容。
  • -n:指定每次传递给命令的参数个数。
  • -0:与 find -print0 一起使用,处理文件名中包含空格的情况。

示例:

find . -name "*.txt" -print0 | xargs -0 -I {} mv {} /backup/

4.3 xargs的实际应用

删除大量文件

ls | grep 'pattern' | xargs rm

批量压缩文件

ls *.log | xargs -n1 gzip

这将逐个压缩当前目录下的 .log 文件。

4.4 xargs与并行处理

利用 xargs-P 选项,可以实现并行处理。

示例:

cat urls.txt | xargs -n1 -P4 wget

这将同时开启 4 个进程来下载 urls.txt 中的链接,提高下载效率。


Ref

[1] https://linuxcommand.org/
[2] https://download.samba.org/pub/rsync/rsync.html


http://www.kler.cn/news/309097.html

相关文章:

  • Android注册广播
  • 开源免费的NAS系统-TrueNAS CORE搭建和使用(保姆级教程)
  • 基于C++实现(MFC)职工工作量统计系统
  • 机器学习--逻辑回归
  • JavaScript如何判断输入的是空格
  • 常见的反爬虫和应对方法
  • 【SQL】数据库详解-标准SQL语句
  • 协同过滤算法商品推荐系统设计与实现
  • 解决ruoyi-vue-pro-master框架引入报错,启动报错问题
  • 毕设开源 基于python的搜索引擎设计与实现
  • 智能 Uber 发票 PDF 合并工具
  • 【乐企-业务篇】乐企开票具体代码实现
  • Java和西门子S7-1200通讯调试记录
  • GC的算法
  • 从基础到高级:模块化RAG技术全览
  • 【云原生监控】Prometheus之Alertmanager报警
  • 线性基速通
  • 哪款宠物空气净化器是除浮毛王者?希喂、范罗士、霍尼韦尔宠物空气净化器实测
  • 爬坑--docker构建容器ssh连接容器环境变量会发生变化
  • Redis的IO模型
  • 计算机网络分层结构解析:OSI与TCP/IP模型
  • Blender渲染太慢怎么办?blender云渲染已开启
  • 在设计开发中,如何提高网站的用户体验?
  • Qt开发技巧(四)“tr“使用,时间类使用,Qt容器取值,类对象的删除,QPainter画家类,QString的转换,用好 QVariant类型
  • Vite项目中eslint的简单配置
  • Amazon 正式官宣取消居家上班(WFH)
  • Ubuntu apt 命令全面讲解
  • 行业机遇!程序员:如何选择适合自己的就业方向?
  • linux--防火墙
  • 【Android】处理线程中未捕获的异常