我看到类似command 1> out或 with2>&1来重定向 stderr 的东西,但有时我也看到&>自己,等等。
最好的理解&方式是什么?它究竟意味着什么?
所以我正在努力学习如何将标准输出和标准错误传递到各个领域。
假设我有一个here.txt单独的文件夹。
所以如果我这样做
ls here.txt not-here.txt 1>out 2>&1
Run Code Online (Sandbox Code Playgroud)
由于here.txt存在,我将有一些输出指向文件,out但由于not-here.txt不存在,错误将通过标准错误发送,我将其重定向到标准输出2>&1。
但是,为什么这不起作用:
ls here.txt not-here.txt 2>&1 1>out
Run Code Online (Sandbox Code Playgroud)
如果我在标准输出指令之后进行重定向,它似乎才有效?为什么?
据我所知printenv显示环境变量,但为什么我看不到其他变量,例如PS1自定义 shell 提示?
究竟是什么printenv输出,为什么不回升PS1?是否有更全面的输出命令比printenv?
我看到很多资源,rm -r但几乎没有,rm -d即使d标志显然是关于删除目录。
两者之间究竟有什么区别?是rm -d一样的rmdir吗?它比“更安全”rm -r吗?
如果您为具有执行权限的文件权限添加 setuid 位,它会将 更改为 an x,s这意味着如果您执行该文件,它将作为该文件的所有者而不是实际执行该文件的人执行。
但我还注意到,如果您添加s权限但删除权限,它会在权限列表中x更改为。S不知何故,这意味着它无法执行,但如果可以执行,它会同时作为所有者执行?是对的吗?
我是否误解了这个权限?它是干什么用的?这是什么意思?
我意识到我已经以一种方式命名了一堆文件,所以我想将任何以“1”开头的文件重命名为相同的东西,除了以 2 开头。
例如mv 1.4.5.txt 2.4.5.txt或mv 1-chart.jpg 2-chart.jpg等。
我试过了,mv 1* 2*但这不被接受,因为它解释2*为一个目录。
我正在尝试 grep 第一个字符是 A、B 或 C 的行。
我正在尝试这个:
grep -i "^[a-c]*" data.txt
我希望它只关心第一个字符,我不关心的其余部分。
我正在看一些关于如何导航文件系统的教程,但无论我看哪个教程,都有一件事似乎没有人回答。
我知道这.是当前目录。我知道这/要么是根目录,要么只是表示当前目录的结尾。
那么如果我想在当前目录中运行一个程序我必须怎么做./ProgramName呢?这仅仅是因为ProgramName可能在$PATH,我必须指定我想在当前目录中运行该版本吗?如果 中没有等效项,为什么Ubuntu 不会自动运行当前目录的版本$PATH?
如果是这样,为什么./我在遍历目录时允许省略?例如,我可以cd DropBox从我的主目录中进行。我也可以做cd ./DropBox,它似乎可以工作,但为什么不是./必需的?