我希望我的 bash 脚本执行下面给出的随机命令。例如
[mysterious command] ("command1", "command2", "command3")
Run Code Online (Sandbox Code Playgroud) 在我的系统上,有/var/lib/systemd/random-seed. 在启动时,它将它加载到熵池中并替换为一个新的。在关闭时,熵被保存到它。我没有发现任何改变它之间的东西。
如果有一台计算机仅在断电时关闭,那么它收集的熵将不会写入磁盘。因此,从断电中恢复时需要时间来收集熵。
为什么在正常操作期间不将熵保存到磁盘,例如每天一次?
假设我有一个文件名目录:
获取每个文件并将其随机重命名为目录中的任何其他名称而不存在任何重复的最简单方法是什么,以便在检查时目录看起来相同但内容已重新排列?
这应该是直截了当的,但我无法弄清楚。如果我想使用 sed 用 C 替换 A 或 B,代码可能是:
$ echo AAXXAAYYBB | sed 's/[AB]/C/g'
CCXXCCYYCC
Run Code Online (Sandbox Code Playgroud)
这导致所有 A 和 B 都转换为 C。
我想要做的是用两个(或可能更多)变量之一替换“A”:
输入:
AAXXAAYYBB
Run Code Online (Sandbox Code Playgroud)
代码:
sed 's/A/[BC]/g'
Run Code Online (Sandbox Code Playgroud)
输出(其中 B 或 C 的替换是随机的):
BCXXCBYYBB
Run Code Online (Sandbox Code Playgroud)
但是此代码只会将 A 更改为...
$ echo AAXXAAYYBB | sed 's/A/[BC]/g'
[BC][BC]XX[BC][BC]YYBB
Run Code Online (Sandbox Code Playgroud)
如果可能的话,我尽量避免在这里使用 PERL。有谁知道如何解决这个问题?
随着水珠预选赛中的zsh一个可以在文件名以各种方式通配符模式匹配的结果进行排序。例如,该模式*(om)将匹配当前目录中的所有非隐藏名称,按修改时间戳排序。
但是,我有时希望有一种随机排序的方法(例如,获取文件的随机抽样)。据我所知,没有限定符可以直接执行此操作。
问题:如何从zsh文件名通配模式中获取随机的路径名列表?
这个问题是关于在一个范围内生成随机数,这很好,但不适合我的情况。
\n我将用 SQL 术语进行解释,因为在我看来,这更容易理解,尽管问题是关于bash. 我的想法是用代码的结果bash构建一个SQL脚本。
我有两张 MySQL 表,一张是people,一张是places。每条记录都有一个唯一的整数 ID,范围为 1 到 139(地点)和 1 到 1519(人)。它们通过外键相互联系,意思是:一个地方可以有很多人,但一个人只能有一个地方。
\n# 1-139 # 1-1519\nplace1 \xe2\x86\x92 person1\n \xe2\x86\x92 person2\n \xe2\x86\x92 person3\n ... and so on\nRun Code Online (Sandbox Code Playgroud)\n我现在掌握的数据是,在一个地方所有的人都有联系,而其他地方没有任何联系。
\n名额有139个,人数有1519人,所以我有1个名额,有1519人。
\n我的目标是将人员随机分配到各个地方,并且每个地方至少有一个人。
\n到目前为止我的代码是这样的:
\n$ c=1519\n$ while [[ $c -ne 0 ]]; do \n x=$((shuf -i 1-139 -n 1))\n [[ $x -gt 139 ]] && continue\n echo $x\n (( c-- ))\n done\nRun Code Online (Sandbox Code Playgroud)\n此代码生成 1-139 之间的 …
我需要一个命令行脚本,它会生成一个 1 到 6 之间的随机整数。我使用 Ubuntu 和 bash。
几个月前我正在使用“bc”来解决这个问题,但从来没有让它完全工作。从那以后我就忘记我去了哪里。
我正在使用它来更改 crontab 脚本,以便它不会总是每 15 分钟运行一次,而是随机运行一次(15+-3 分钟)。IE。将 crontab 更改为每 12 分钟一次,然后在运行脚本之前在脚本中休眠 1-6 分钟(这基本上是一个用于检查网页状态的 wget)。
是否有任何实用程序可以在命令行上从流中过滤样本,例如
更新:到目前为止我发现:
sed -n '0~100p'如果我不在其他上下文中使用变量,则打印$RANDOM变量会给出相同的结果。zsh这就像 shell 有一个命令输出或变量值的缓存,所以我无法获得新值。我正在运行这个:
zsh $ printf \\$(printf "%o" $(( $RANDOM % 123)))\\$(printf "%o" $(( $RANDOM % 123)))
Run Code Online (Sandbox Code Playgroud)
这是相同结果的两次$RANDOM,并且在不同的连续运行中,我仍然得到与第一次运行相同的结果。
仍然得到完全相同的行为printf \\$(printf "%o" $(( $(echo $RANDOM) % 123)))\\$(printf "%o" $(( $(echo $RANDOM) % 123)))
我需要使用加密强度高(认证要求)、高质量(通过行业标准随机性测试)且性能合理(见下文)的 PRNG。
最初,我认为它会在最新的 Ubuntu LTS 上运行,并计划从中读取/dev/urandom,因为根据我的信息,从内核版本 5.18 开始,它似乎满足了所有条件。
性能方面,{ timeout --foreground 1s cat /dev/urandom; } | wc -c在 M1 Mac(仅供参考)上运行实现了约 450MB/s 的吞吐量,并且我从 x86-64 Ubuntu 22.04.2 LTS VM 中获得了类似的结果。
读取 40kB 块的 C++ 程序实现了更高的约 1GB/秒吞吐量,但我无法在其上运行编译和运行可执行文件(尽管我假设 shell 命令和可执行文件之间的比率相似)。
然而,事实证明它将部署在虚拟机中运行的 Amazon Linux 2(内核版本 5.10)上,这意味着RNG 的算法和性能改进将无法使用。
我的问题是:
/dev/urandom仍然满足原始要求,即:提供加密的强伪随机数,并且还通过行业标准随机性测试,吞吐量至少为 1MB/秒?我无法访问有问题的环境,但尝试使用早期内核版本的几个在线 shell 产生了不一致的结果:在几个系统(kernel 5.4和kernel 5.15/dev/random )上,我从和获得了相同的吞吐量/dev/urandom,根据我的理解意味着相同的质量,但在另一个系统(也是内核 5.4)上,/dev/random被阻止并给出 0-200B/s 之间的结果(即bytes,没有前缀),表明 的/dev/urandom质量已下降(除非我误解了某些内容)。
然而,根据 …
random ×10
bash ×4
linux ×2
zsh ×2
amazon-linux ×1
command-line ×1
filenames ×1
filter ×1
numeric-data ×1
rename ×1
sed ×1
stdin ×1
streaming ×1
wildcards ×1