这个问题可能听起来有点愚蠢,但我真的看不出重定向和管道之间的区别。
重定向用于重定向 stdout/stdin/stderr,例如ls > log.txt
.
管道用于将命令的输出作为另一个命令的输入,例如ls | grep file.txt
.
但是为什么同一件事有两个运营商呢?
为什么不直接写ls > grep
来传递输出,这不也是一种重定向吗?我缺少什么?
我觉得我应该肯定知道的一些事情:如果我ls <something>
,会rm <something>
删除ls
显示的完全相同的文件吗?是否有任何情况rm
可以删除ls
未显示的文件?(这是在 18.04 bash 中)
编辑:感谢所有回答的人。我认为完整的答案是所有答案的组合,所以我接受了最高票的答案作为“答案”。
在此过程中我学到了意想不到的事情:
ls
在处理参数时并不像你想象的那么简单ls
我有一个软件需要/bin/sh
Bash,但对于 Ubuntu,默认是 Dash,我想保持默认;我不想将其永久更改为 Bash。
有没有办法只为正在运行的终端会话更改它?所以在这个终端中运行的程序会看到/bin/sh
链接到 bash 但系统的其余部分仍然会看到 Dash?或者我可以欺骗软件将/bin/sh
其视为 Bash,即使它不是?
这个软件不是我写的,用它来/bin/bash
代替/bin/sh
并不是一个真正的选择。
在“学习 UNIX 操作系统”一书中,有一节:“3.1.8 列出文件”,描述了该ls
命令。
在ls -l
它的段落中描述了此命令的输出列。
ls -l
命令的第二列包含一个数字。这个数字在书中描述为“链接到这个文件和目录的数量”。(链接到与相关编号在同一行的最后一列中命名的文件或目录。)
我尝试了这个命令,并将输出与当前目录中文件和目录的实际数量进行了比较。
ls -l
drwxr-xr-x 6 azbc staff 192 Sep 7 16:09 test
Run Code Online (Sandbox Code Playgroud)
在目录中test
,我有 2 个子目录和 1 个文件,以及 1 个隐藏文件和当前目录的列表,加上父目录的列表,因此共有 6 个文件和目录。
ls -a -F
./ .hidden_file.txt dir_2/
../ dir_1/ file_1.sh
Run Code Online (Sandbox Code Playgroud)
将所有文件和目录(包括隐藏文件和目录)标识为链接到当前目录对我来说似乎是合乎逻辑的。将父目录标识为链接到当前目录似乎也是合乎逻辑的。
但是为什么当前目录被标识为链接到自身?
ls -la
test 目录的命令提供以下输出。( -F 选项/
在目录名称后面显示目录的情况下,在可执行文件的情况下显示 *)
ls -la -F
total 0
drwxr-xr-x 6 azbc staff 192 Sep 7 16:09 ./
drwxr-xr-x+ ?? azbc staff ?? Sep 7 16:06 ../
-rw-r--r-- …
Run Code Online (Sandbox Code Playgroud) 当尝试命令时
me@me:~$ ls -hl | head -5
total 60M
-rw-r--r-- 1 me me 250 Jan 16 11:43 $tty
-rw-r--r-- 1 me me 0 Jan 16 11:41 1
drwxr-xr-x 2 me me 4.0K Jan 16 15:28 Desktop
drwxr-xr-x 7 me me 4.0K Jan 13 14:33 Documents
Run Code Online (Sandbox Code Playgroud)
发现该Documents
目录有7个硬链接,如此冗余的原因是什么?
我对 tar 的使用相当陌生,过去曾使用过 zip 文件。
我只想创建 tar 文件而不包含目录。
我去了这里,但发现它有点令人困惑。
https://www.baeldung.com/linux/tar-archive-without-directory-struct
# Backup crontab
crontab -l > /home/andy/bin/crontab_backup.txt
tar -cvf /home/andy/bin/crontab_backup.tar /home/andy/bin/crontab_backup.txt
Run Code Online (Sandbox Code Playgroud) command-line ×4
bash ×2
18.04 ×1
20.04 ×1
files ×1
filesystem ×1
hidden-files ×1
inode ×1
ls ×1
navigation ×1
pipe ×1
redirect ×1
rm ×1
sh ×1
tar ×1
ubuntu-mate ×1