在网络隔离 OpenBSD 全新安装的默认终端上执行 SHA256d 哈希(双 SHA256)的好方法是什么?
这就是我正在做的:
echo test > testfile
cat testfile | openssl dgst -binary | openssl dgst
它给了我一个以0xe0b6
只是想知道是否有更简洁/更好的方法?
在网络隔离 OpenBSD 全新安装的默认终端上执行 SHA256d 哈希(双 SHA256)的好方法是什么?
这就是我正在做的:
echo test > testfile
cat testfile | openssl dgst -binary | openssl dgst
它给了我一个以0xe0b6
只是想知道是否有更简洁/更好的方法?
我已配置 rsyslog 将某些日志消息转发到命名管道/tmp/logger.pipe
。然后我有一个单独的进程从命名管道读取数据。相关部分来自/etc/rsyslog.conf
# Remote Logging (silly conditional rule needed for specific logging scenario)
$template RFC5424Format,"<%PRI%>1 %timegenerated:1:10:date-rfc3339%T%timegenerated:12:19:date-rfc3339%.%timegenerated:21:26:date-rfc3339%Z %HOSTNAME% - - -%msg%\n"
if ($msg contains 'remote="true"') then /tmp/logger.pipe;RFC5424Format
/tmp/logger.pipe 的权限
prwxrwxrwx 1 ftp root
我正在将此应用程序部署到两台不同的机器上。一台机器配备 rsyslog v3.xx,另一台机器配备 v5.xx
该应用程序在使用 rsyslog v5.xx 的计算机上运行良好,但是,我在使用 rsyslog v3.xx 的计算机上遇到奇怪的行为具体来说:
logger.pipe
重新启动时,rsyslogd 似乎在侦听进程恢复后停止将数据写入命名管道。解决此问题的唯一方法是手动重新启动 rsyslogd在使用命名管道时,我缺少 rsyslog 配置的一些技巧吗?我可能忽略的其他权限问题吗?我对该应用程序充满信心,因为它在 v5.xx rsyslog 版本中运行得非常稳定。不幸的是,我无法在遇到问题的机器上更新 v3.xx 版本。
有什么想法吗?
更新:我可能已经诊断出这个问题 - 这似乎是一个问题,如果没有读者,rsyslogd 会关闭到管道的写入连接。但是,读取器应用程序使用 fopen(),它会阻塞,直到出现相应的写入器为止。
由于某种原因,这在 rsyslog v5.xx 上不是问题:
但这种行为在 rsyslog v3.xx 上有所不同:
参考这个https://stackoverflow.com/a/31356602,我写了这段代码:
#!/bin/bash
# Define the two strings to compare
string1="First string with some random text."
string2="Second string with some random text and some changes."
# Create a temporary directory
temp_dir=$(mktemp -d)
# Create temporary files for the strings
file1="$temp_dir/string1.txt"
file2="$temp_dir/string2.txt"
echo -e "$string1" > "$file1"
echo -e "$string2" > "$file2"
# Use the git diff command to compare the temporary files
git diff --no-index --word-diff=color --word-diff-regex=. "$file1" "$file2"
# Delete the temporary directory
rm -rf "$temp_dir"
返回:
现在我试图将它压缩成一行:
#!/bin/bash
# Define the two strings to compare
string1="First string with some random text."
string2="Second string with some random text and some changes."
# Use the git diff command to compare the strings
git diff --no-index --word-diff=color --word-diff-regex=. <('%s\n' "$string1") <(printf '%s\n' "$string2")
但我得到:
如何在git diff
不显式创建临时文件的情况下将字符串作为文件传递?
笔记。我的目标是“直观地”比较(字符级)两个(短)字符串,获得与此类似的输出:
其中两个比较字符串之间的差异在单个字符串中突出显示。的输出git diff
是理想的,但我也愿意接受其他解决方案。
我正在运行一个脚本(在 Laravel 项目中),需要几个小时才能完成。nohup
以防止它在我的 ssh 会话断开连接时退出。
nohup php artisan do:thing 2>&1 | tee ~/tmp
它开始得很好,但一段时间后,我收到一个损坏的管道错误,它停止输出内容,并且tee
也停止 - 文档在那时停止。
我猜这是因为tee
进程被 ssh 会话丢弃杀死了?我可以阻止它吗?
我可以否认 tee 进程并阻止 ssh 终止它吗?
我正在尝试捕获/传输以下内容的输出:
arecord -f S16_LE -qd 5 文件 && sox 文件 -n stat
输出:
读取样本:8000 长度(秒):1.000000 缩放比例:2147483647.0 最大幅度:0.992188 最小幅度:-0.992188 中线幅度:0.000000 平均范数:0.093221 平均幅度:-0.015338 RMS 幅度:0.232947 最大增量: 0.617188 最小增量:0.000000 平均增量:0.001067 RMS 增量:0.009643 粗略频率:52 音量调节:1.008
我需要捕获数据以转换为 json。问题是“SOX”似乎违背了我通常用来捕获/管道标准输出的任何方法。有什么建议吗?
我感觉这个应该很简单。我有一个包含超过 1000 个 gzip 压缩文件的目录。我想将它们全部压缩并连接起来。
运行gzip -dk *.gz | cat > output.file
会产生以下错误:Too many levels of symbolic links
有想法吗?
我正在尝试将多个输入文件/流连接成一个流(使用虚构命令stream-cat
),将该流通过管道传输到ssh
远程主机并在远程主机上将其分离回单独的文件/流(stream-sep
),如本例所示,用于演示仅用于:
stream-cat <( zfs send tank/vm@snapshot ) somefile.txt | ssh user@host "stream-sep >( zfs receive tank/vm@snapshot ) somefile.txt"
示例说明:zfs send
输出大量数据,其大小事先未知(这就是tar
无法处理的原因)。该数据流与常规文件的内容连接在一起somefile.txt
。生成的流通过管道输送到ssh
,在那里再次分离。第一个流通过管道传输到zfs receive
,而第二个流写入常规文件。
这样的程序应该通过读取块中的不可搜索流并始终写入块大小后跟数据来实现,直到到达流的末尾。开销将是最小的。
这样的程序已经存在了吗?
我正在尝试将五个最大的文件从某个目录复制到我的pwd
. 使用cp specific/directory$(ls -S specific/directory | head -n) ./
复制第一个文件,然后继续cannot stat
为列表中的其余文件产生错误。
为什么管道对第一个项目有效而对其余项目无效?
我的玩具语言自定义编译器使用 Cranelift 生成目标代码,我可以将其写入文件main.o
。为了使这个目标文件成为一个可执行文件,我用gcc -o main main.o
.
但是,我想将代码直接通过管道传输到 GCC,以免将临时目标文件写入磁盘,因此我让编译器将目标代码写入标准输出。用作-
文件名不起作用,因为该-x
选项似乎没有目标文件的任何值。
使用某种 shell 重定向也不起作用:gcc -o main <(compiler)
使用/usr/bin/ld: /proc/self/fd/11: file not recognized: Illegal seek
. (请注意,这在 GCC 本身处理文件时有效,例如使用gcc -xc <(echo "int main(){}") -o main
,但在文件传递给 LD 时无效。该-pipe
选项似乎也没有什么区别。)
有什么方法可以使用 GCC 链接通过管道传输到其中的目标代码吗?
我想构建一个巨大的数据块(某种备份)并通过网络(ssh 或 rsync)将其发送到另一台主机。远程上有足够的空间存放数据,但本地主机上没有,所以我不能将它存储为本地文件。我想在数据进入管道时计算数据的校验和(然后与生成的远程文件的校验和进行比较)。所以我正在寻找一个程序,我可以把它放在管道的中间,让它计算通过的所有内容的校验和。
在我脑海中弹出的两个“MITM”程序是pv
,mbuffer
但似乎都没有这个功能。此外cat
,还有dd
不足 :-) 各种用于计算校验和的程序md5sum
,如sha1sum
等等,都会消耗它们的输入,并且不会将其传递下去。帮助?谢谢!