linux中什么是重定向

嘿,说到Linux重定向,这是一个常见的话题。
我在问答论坛上呆了这么多年,我看到很多新手对此感到困惑。
说实话,用得好的话,重定向确实很有效。
如果使用不当,可能会引起头痛。

我记得有一次,一个没有经验的朋友写了一个脚本,但是当他运行它时,消息开始在终端上飞来飞去,让他头晕。
我当时就告诉他,事情很简单,换个路线就可以解决?听到这句话,他的眼睛瞪大了,仿佛发现了新世界。

首先你需要明白,重定向的本质是改变命令的默认输出方式。
例如,命令执行的结果默认显示在终端上。
但是,重定向允许您将结果保存到文件或直接丢弃它们,以避免终端信息混乱。

让我举个例子。
例如,如果使用 ls -l 命令列出目录中的文件,并且不强调重定向,则信息将直接显示在终端上。
但是,如果添加重定向字符 > 后跟文件名,例如例如filelist.txt,该信息存储在filelist.txt文件中。
这样您就可以随时查看文件内容,而不必担心终端信息过多。

还有另一种情况。
例如,当后台程序运行时,它可能会输出一些不相关的信息。
在这种情况下,您可以使用黑洞设备/dev/null来阻止此信息。
示例: nohup command > /dev/null 2 >&1 & 使程序运行时不显示任何输出信息。

另一个例子是日志管理,这是重定向的一个重要应用。
您可以将标准输出(正确信息)和标准错误(错误信息)重定向到不同的文件,以便在故障排除时可以清楚地看到它们。

底层机制其实很简单,就是文件描述符。
每个进程都有三个文件描述符:标准输入、标准输出和标准错误。
默认情况下,标准输出是终端,但您可以通过重定向来更改它。

有几种重定向符号:>表示覆盖写入,>>表示追加写入,2 >表示重定向错误输出,&>或2 >&1 表示将标准输出和错误输出合并到同一个文件中。

定时任务日志、编译时静默执行、管道组合等典型应用场景都是重定向的常见用途。

简而言之,重定向是灵活且强大的。
一旦掌握了它,对于提高Linux命令行操作效率是非常有帮助的。
不过这个东西也很容易让人头疼,所以得慢慢摸索。
我当时也有同样的感觉,我是一步一步走过来的。

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

Linux重定向非常方便。

> 覆盖写入。
例如,cat list.txt > output.txt 将覆盖output.txt。

>> 添加字体。
例如,uptime >> sysload.txt 会将 uptime 结果添加到 sysload.txt。

< 从文件中读取。
例如, wc -l <​​ input.txt 会将 input.txt 的内容提供给 wc 进行计数。

2 > 错误单独存储。
例如,ls /nonexistent 2 >errors.log 将在errors.log 中存储错误信息。

2 >&1 错误已分配给输出。
例如,find / -name "secret" 2 >&1 > results.log 会将所有信息(包括错误)保存在results.log 中。

&>> 也打印错误。
例如make &>> build.log 会将编译过程和错误添加到build.log中。

/dev/零垃圾空间。
例如, grep "bad" file > /dev/null 将丢弃结果。

>删除文件。
只需使用 > 文件名,例如 > temp.txt。

自己掂量一下。

网络里面、linux里面、网站里面重定向、重定位什么意思??

嘿嘿,这个问题让我想起了一次在论坛上回答新手问题的情景。
那时我非常热情。
好吧,我们言归正传吧。

我们先来说第一个问题,关于>>test命令。
书本可以稍微简化一下解释,但实际上,&这里的功能是指定一个文件描述符。
在类 Unix 系统中,标准输出(stdout)通常指文件描述符 1 ,标准错误(stderr)指文件描述符 2 因此 >>test 命令实际上将所有输出重定向到文件 test,包括 stdout 和 stderr。
由于&没有指定具体的文件描述符,所以默认值为1 和2
我们来说第二个问题,echo "hi" >&2 & 这里也指定了文件描述符,但是它的功能有点不同。
这里&2 指的是标准错误描述符,即2 因此,该命令的含义是将echo "hi"的输出重定向到标准错误流,即stderr。

至于这里的 & 是具体代表 1 、2 还是所有输出文件描述符,这实际上取决于上下文。
如果&之前没有指定文件描述符,则默认为1 (stdout)。
但如果你指定,比如 &2 那么它只代表 2 (stderr)。

所以 > 中的 test & 指向所有输出文件描述符,而 echo "hi" >&2 中的 & 指向标准错误描述符 2 我希望这可以帮助您解决问题,就像我在论坛上所做的那样!