假设一个程序cook
接受一个参数:包含要烹饪的食物配方的文本文件的路径名。假设我想从bash
脚本中调用这个程序,还假设我已经在一个字符串变量中拥有了配方:
#!/bin/bash
the_recipe="$(cat << EOF
wash cucumbers
wash knife
slice cucumbers
EOF
)"
cook ... # What should I do here? It expects a file, but I only have a string.
Run Code Online (Sandbox Code Playgroud)
当需要文件名参数时,如何将配方传递给命令?
我想创建一个临时文件只是为了传递文件,但我想知道是否有其他方法可以解决这个问题。
我知道我可以使用find
:找到文件find . -type f -name 'sunrise'
。结果示例:
./sunrise
./events/sunrise
./astronomy/sunrise
./schedule/sunrise
Run Code Online (Sandbox Code Playgroud)
我也知道我可以确定文件的文件类型:file sunrise
. 结果示例:
sunrise: PEM RSA private key
Run Code Online (Sandbox Code Playgroud)
但是如何按文件类型查找文件?
例如my-find . -type f -name 'sunrise' -filetype=bash-script
:
./astronomy/sunrise
./schedule/sunrise
Run Code Online (Sandbox Code Playgroud) 在使用 GPG 加密之前压缩 tar 存档是否多余?据我了解,GPG 会压缩它加密的文件。是不是更适合做tar -> gpg
而不是tar -> gzip -> gpg
?
我有一个名为 .bash 的 bash 脚本reader
。它读取用户输入:
#!/bin/bash
read -p "What is your name?" username
echo "Hello, ${username}"
Run Code Online (Sandbox Code Playgroud)
通过source reader
(编辑:从 zsh shell)运行脚本,我收到错误reader:read:2: -p: no coprocess
. 当我将它作为./reader
.
其他read
选项不会产生此错误。例如,我可以这样做:
#/bin/bash
echo -n "What is your name?"
read username
echo "Hello, ${username}"
Run Code Online (Sandbox Code Playgroud)
无协处理错误从何而来?这是什么意思?我该怎么办?
检查大文件的 SHA256 校验和时如何显示进度?当我sha256sum -c SHA256SUMS
在文件SHA256SUMS
包含大文件的校验和的地方执行操作时,没有指示该命令何时可能完成。有没有办法在做的时候显示进度sha256sum -c ...
?
假设我有一个名为app
. 用法示例:app -t 'first tab' -t 'second tab'
在该程序中打开两个“标签”。
问题是:如果参数数量可以变化,我如何app
从bash
脚本中执行命令(即)?
考虑一下:
#!/bin/bash
tabs=(
'first tab'
'second tab'
)
# Open the app (starting with some tabs).
app # ... How to get `app -t 'first tab' -t 'second tab'`?
Run Code Online (Sandbox Code Playgroud)
我希望上述脚本具有等效于app -t 'first tab' -t 'second tab'
. 这样的bash脚本怎么写?
编辑:请注意,问题是询问有关使用参数数组动态组合命令行参数的问题。
无论hier(7)
和file-hierarchy(7)
手册页声称描述传统文件系统层次结构。但是,它们之间存在一些差异。例如,hier(7)
描述/opt
和/var/crash
,但file-hierarchy(7)
不描述。这两种描述有什么区别。真正的 Linux 系统使用哪一种?
如何限制 SSH 连接的速度?例如,当我进行端口转发 ( ssh -L ...
)、反向隧道 ( ssh -R ...
) 或 SOCKS5 动态端口转发 ( ssh -D ...
) 时,我可能想要限制隧道的带宽。
如何测量与远程计算机的特定 SSH 连接的带宽?例如,如果我有一个 SSH 隧道进行端口转发,我想知道有多少数据通过该隧道。特别是,我想知道两个方向的传输速度以及传输的总数据量(两个方向分别)。我怎样才能做到这一点?
操作系统:Debian 11 和 Ubuntu 20.04。
我运行ls
并找到了一个+
设置了位的目录:
$ ls -ld /var/log/journal
drwxr-sr-x+ 3 root systemd-journal 4096 Oct 1 01:23 /var/log/journal
Run Code Online (Sandbox Code Playgroud)
我明白drwxr-sr-x
,但什么是+
?这叫什么?它有什么作用?
我曾经diff
制作过补丁文件。diff old.txt new.txt
:
1c1
< Lorem ipsum dolor sit amet, consectetur adipiscing
---
> The quick brown fox jumps over the lazy dog.
Run Code Online (Sandbox Code Playgroud)
输出采用默认的“正常差异”格式。
我可以在这个补丁文件中写注释吗?如果是这样,补丁文件是否可以合理移植?
这就是我建立从本地计算机到远程计算机的 SSH 隧道(使用 SOCKS 的动态端口转发)的方法:
ssh -C -N -D 12345 user@192.168.1.2
Run Code Online (Sandbox Code Playgroud)
我使用压缩 ( -C
),因为我的带宽昂贵且有限。
有没有办法进一步提高压缩级别?SSH 协议的版本 1 有CompressionLevel
配置选项,但版本 2 中没有等效选项。我愿意使用其他开源工具来实现更高的压缩级别。
操作系统:Ubuntu 20.04。
bash ×3
ssh ×3
bandwidth ×2
shell-script ×2
compression ×1
debian ×1
diff ×1
file-command ×1
file-types ×1
files ×1
filesystems ×1
find ×1
gpg ×1
gzip ×1
hashsum ×1
linux ×1
ls ×1
man ×1
patch ×1
permissions ×1
read ×1