如何在 Linux 中使用输入输出和错误重定向 ?

哦,说到 Linux 重定向,这是一个常见的主题。
我们来谈谈这个吧。
这是 Linux 的瑰宝,特别是在处理命令行工具和脚本时。
我在问答论坛上呆了很多年,见过很多在这个问题上遇到困难的朋友。

标准输入,这是基础中的基础;我们先来谈谈输出和错误。
标准输入(stdin)就是我们平时在键盘上输入的内容,文件描述符为0。
标准输出(stdout)就是命令执行的结果。
默认为终端窗口,文件描述为 1 标准错误 (stderr) 是有关命令执行错误的信息。
默认为终端窗口,文件描述符为2
例如使用cat命令读取/proc/cpuinfo文件并将其内容输出到command.txt文件中,然后使用cat /proc/cpuinfo > command.txt。

再例如,使用 wc -l 命令来统计 command.txt 文件中的行数。
该命令需要读取command.txt中的内容;所以用 wc -l <​​command.txt
说到错误重定向,例如;如果使用ls命令列出/usr/bin目录下的文件;如果您不小心输入了错误的路径,将会出现错误消息。
此时,如果要将这些错误消息记录到commands-error.txt文件中,则必须使用ls /usr/bin 2 >commands-error.txt。

有时,我不希望错误消息显示在终端中,但我想保留它们。
在这种情况下,我们可以使用 2 >&1 将标准错误重定向到标准输出,例如 ls /usr/bin > command.txt 2 >&1
还有一个有趣的重定向,可以将标准输出和标准错误同时重定向到同一个文件,例如 ls /usr/bin &> command.txt。

将输出添加到文件中也非常实用。
例如,如果你想记录系统负载,你可以使用uptime >> sysload.txt;因此,每次执行命令时,都会将其附加到 sysload.txt 文件的末尾。

如果要清除文件的内容,请使用>运算符,例如command.txt,它将清除command.txt文件的内容。

有时,我们不想看到输出。
例如,如果我们执行一个产生多个输出的命令;您可以使用 > /dev/null 取消输出。

总结一下,重定向操作符有几个常用的符号; > 覆盖文件内容; >> 追加到文件末尾; < 从文件读取输入; 2 > 是重定向标准错误; 2 >&1 是将标准错误重定向到标准输出 &>是将标准/时间重定向到输出 丢弃输出。

如果你用好这个东西,你的业绩可以提高很多,但说实话,仅此而已我刚开始学的时候也不懂。
我不得不慢慢探索。

Linux输出文本echo命令应用

echo 在 Linux 中...是用来打印东西的...就像“Hello, World!”...直接输入...
有时候需要取出变量...比如 NAME="张三"...然后 echo "Hello, ${NAME}!"...可以打印张三...
转义字符也很重要...比如$1 000...用反斜杠\转义...echo "我的工资\$1 000"...就不行了要么。
将其视为变量...
如果你想要换行符...制表符...那种东西...你必须使用 -e 选项... echo -e "第一行\n 第二行"...你可以分两行打印...
不同的 shell...如 Bash、Zsh、Dash...以不同方式解释转义序列...Bash 默认情况下不解释它们...Zsh 也不解释它们...Dash 默认情况下解释它们...
所以在编写脚本时...为了安全side...最好明确地使用它。
-e... 或者干脆用 printf... printf "%s\n" "Hello" "World"... 行为比较标准...
文件操作也很方便... 例如 echo "配置项 A=value 1 " > my_config.conf... 可以创建文件或者覆盖它们... 如果要追加... 就用 >>...
动态创建配置文件也可以... 例如 echo "export PATH=$PATH:/opt/my_tool/bin" >> ~/.bashrc... 然后 source ~/.bashrc... 会立即生效...
管道操作也可以... 例如 echo -e "apple\nbanana\norange" | ~/.bashrc... grep "a"... 将过滤掉包含 "a" 的行...
调试脚本时...添加 echo... 打印变量或执行步骤的值...例如,echo "DEBUG: 尝试创建文件 /tmp/test_file.txt"...然后触摸 /tmp/test_file.txt...
日志记录也很简单... echo "INFO: 文件 /tmp/test_file.txt 已成功创建。
" >> /var/log/my_script.log...
创建 HTML 文件也可以... echo "" > Index.... 然后 echo "" >> Index.... 然后 echo "<body>

Hello!

</body></>" >> Index....
动态修改配置也可以...例如判断 ~/.bashrc 中是否有别名...如果没有...就 echo "alias ll='ls -alF'" >> ~/.bashrc...
总之,echo有很多功能...结合变量、转义序列、重定向、管道...可以实现很多功能...了解不同shell之间的区别...掌握高级用法...可以提高效率...