我试图通过使用ls带有选项的命令来获取目录(包含目录和子目录)的大小l。它似乎适用于文件 ( ls -l file name),但如果我尝试获取目录的大小(例如,ls -l /home),我只会得到 4096 字节,尽管总的来说它要大得多。
我想使用 echo 命令和重定向运算符创建一个文件,该文件应该由几行组成。
我试图通过“\n”在字符串中包含一个换行符:
echo "first line\nsecond line\nthirdline\n" > foo
Run Code Online (Sandbox Code Playgroud)
但是这样不会创建三行文件,而是创建一个只有一行和字符串的逐字内容的文件。
如何仅使用此命令创建多行文件?
如果有一个长文本文件并且我想显示给定模式出现的所有行,我会这样做:
grep -n form innsmouth.txt | cut -d : -f1
Run Code Online (Sandbox Code Playgroud)
现在,我有一个数字序列(每行一个数字)
我想用 x 轴上的出现和 y 轴上的行号进行 2D 图形表示。我怎样才能做到这一点?

为了理解另一个答案(由 glenn jackman):
find / -type d -print0 | while read -r -d '' dir; do ls -ltr "$dir" | sed '$!d'; done
Run Code Online (Sandbox Code Playgroud)
第一步骤是要了解该选项的使用-r的的read命令。
首先,我想,简单地执行就足够了
man read
Run Code Online (Sandbox Code Playgroud)
查找-r选项的含义,但我意识到手册页根本不包含任何对选项的解释,所以我搜索了它。我得到了一些read -t,read -p例子,但是没有read -r。
当我登录到 shell 时,我看到了其值存储在 PS1 中的提示。
我在使用 here-document 语法时也遇到了另一个提示(但不知道是哪个):
bc << HERE
>
Run Code Online (Sandbox Code Playgroud)
但这就是所有类型的提示。到目前为止我遇到过。什么样的情况会引起不同类型的提示?
我的问题源于我在启动 ffmpeg 时遇到的问题。我已经安装了 ffmpeg,它显示为已安装:
whereis ffmpeg
ffmpeg: /usr/bin/ffmpeg /usr/bin/X11/ffmpeg /usr/share/ffmpeg /usr/share/man/man1/ffmpeg.1.gz
Run Code Online (Sandbox Code Playgroud)
后来,我发现,有些程序依赖于安装本身没有的库,所以我用 ldd 命令检查了缺少什么:
# ldd /usr/bin/ffmpeg
linux-vdso.so.1 => (0x00007fff71fe9000)
libavfilter.so.0 => not found
libpostproc.so.51 => not found
libswscale.so.0 => not found
libavdevice.so.52 => not found
libavformat.so.52 => not found
libavcodec.so.52 => not found
libavutil.so.49 => not found
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f5f20bdf000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f5f209c0000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5f205fb000)
/lib64/ld-linux-x86-64.so.2 (0x00007f5f20f09000)
Run Code Online (Sandbox Code Playgroud)
事实证明,我的 ffmpeg 也被 7 个库切断了。我首先认为必须安装这些库中的每一个,但比我想象的要安装一些或全部,但 ffmpeg 不知道它们的位置。我读到 /etc/ld.so.conf 和 /etc/ld.so.cache 包含库的路径,但我很困惑,因为只有一行
/etc/ld.so.conf
cat /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf
Run Code Online (Sandbox Code Playgroud)
但是很长/etc/ld.so.cache …
我不确定这是否是唯一可能的方法,但我读到过,为了将单个像素放在屏幕上您选择的位置,必须将一些内容写入一个名为 framebuffer 的地方。所以我开始好奇,是否有可能进入这个地方并在其中写入一些东西,以便在屏幕上的某个地方显示单个像素。
据我所知,我可以使用 tee 命令将标准输出拆分到屏幕和其他文件上:
command -option1 -option2 argument | tee file1 file2 file3
Run Code Online (Sandbox Code Playgroud)
是否可以使用 tee 将输出重定向到命令而不是文件,以便理论上我可以创建命令链?
我知道两种命令如何相互连接:
我不知道这是否可行,所以我画了一个假设的连接类型:
怎么可能在命令之间实现循环数据流,例如在这个伪代码中,我使用变量而不是命令。:
pseudo-code:
a = 1 # start condition
repeat
{
b = tripple(a)
c = sin(b)
a = c + 1
}
Run Code Online (Sandbox Code Playgroud) command-line ×7
shell ×3
bash ×2
graphics ×2
linux ×2
pipe ×2
console ×1
disk-usage ×1
echo ×1
etc ×1
ffmpeg ×1
framebuffer ×1
libraries ×1
ls ×1
newlines ×1
prompt ×1
read ×1
scripting ×1
shell-script ×1
tee ×1