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
的输出通过管道传递给 tee
,tee
再将内容同时输出到终端和文件 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
的输出同时传递给 command2
和 command3
,实现复杂的数据流处理。
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