相关疑难解决方法(0)

将标准输出重定向到您没有写权限的文件

当您尝试在没有写入权限的情况下修改文件时,您会收到错误消息:

> touch /tmp/foo && sudo chown root /tmp/foo
> echo test > /tmp/foo
zsh: permission denied: /tmp/foo
Run Code Online (Sandbox Code Playgroud)

Sudoing 没有帮助,因为它以 root 身份运行命令,但 shell 处理重定向 stdout 并以您的方式打开文件:

> sudo echo test > /tmp/foo
zsh: permission denied: /tmp/foo
Run Code Online (Sandbox Code Playgroud)

除了以root身份打开shell并以这种方式操作文件之外,是否有一种简单的方法可以将stdout重定向到您无权写入的文件?

> sudo su
# echo test > /tmp/foo
Run Code Online (Sandbox Code Playgroud)

shell permissions io sudo io-redirection

125
推荐指数
4
解决办法
2万
查看次数

你什么时候会使用额外的文件描述符?

我知道您可以创建一个文件描述符并将输出重定向到它。例如

exec 3<> /tmp/foo # open fd 3.
echo a >&3 # write to it
exec 3>&- # close fd 3.
Run Code Online (Sandbox Code Playgroud)

但是你可以在没有文件描述符的情况下做同样的事情:

FILE=/tmp/foo
echo a > "$FILE"
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个很好的例子,说明何时必须使用额外的文件描述符。

shell bash io-redirection file-descriptors

93
推荐指数
5
解决办法
6万
查看次数

有没有办法重定向程序的输出并仍然让它转到标准输出?

好的。如果我想将程序的输出重定向到文件,我会做这样的事情

prog > file
Run Code Online (Sandbox Code Playgroud)

如果我想将 stdout 和 stderr 都重定向到该文件,那么我会这样做

prog > file 2>&1
Run Code Online (Sandbox Code Playgroud)

如果您希望输出转到文件,这一切都很好。但是,如果您希望输出转到文件但仍然转到 stdout/stderr 怎么办?因此,输出保存在文件中,但您仍然可以在程序运行时在控制台上看到它。有没有办法做到这一点?如果是这样,如何?

shell io-redirection

25
推荐指数
1
解决办法
4960
查看次数

在哪里查看已完成的 tar 归档命令的错误日志?

我运行以下命令:

tar cvf ~/data.tar /home/user/data/
Run Code Online (Sandbox Code Playgroud)

它在屏幕上显示了很多文件名,10 分钟后我看到:

tar:由于先前的错误而以失败状态退出

我在哪里可以看到 tar 的错误日志(是否在 下/var/log)。我可以看到 tarred 版本和原始版本之间有 100 Mb 的差异。我想知道新创建的存档中丢失文件的名称。

du -sh data.tar /home/user/data
5.7G     data.tar
5.8G      /home/user/data
Run Code Online (Sandbox Code Playgroud)

使用 GNU tar 1.27.1

logs tar

5
推荐指数
2
解决办法
1万
查看次数

如何将 gcc 警告消息放入文本文件中?

我想知道是否有人知道如何将 GCC 的编译警告放在文本文件中?

例如 :

我(心甘情愿地)写了一个未定义的函数foo()。所以 gcc 告诉我:

warning: implicit declaration of function 'foo [Wimplicit-function-declaration]
Run Code Online (Sandbox Code Playgroud)

我怎样才能把这一行写在一个文本文件中?我在 gcc 的手册页中搜索一个选项:

https://linux.die.net/man/1/gcc

但没有找到任何相关信息。我尝试的命令echo,并tee要做到这一点,但这些命令只赶上编译行(如:... gcc -o test test.o main.o ...

linux gcc echo gdb tee

3
推荐指数
1
解决办法
1554
查看次数

标签 统计

io-redirection ×3

shell ×3

bash ×1

echo ×1

file-descriptors ×1

gcc ×1

gdb ×1

io ×1

linux ×1

logs ×1

permissions ×1

sudo ×1

tar ×1

tee ×1