我读过将输出重定向到固定名称文件/tmp
可能存在安全风险,因为如果攻击者(或不满者)注意到/tmp/tmpfileformyscript.tmp
我运行脚本时创建了一个文件(即使他没有对我的脚本的读取访问权限)脚本),例如,他可以创建一个符号链接ln -s ~wildcard/.bashrc /tmp/tmpfileformyscript.tmp
,.bashrc
当我运行我的脚本时,它会导致我破坏我的文件。
因此,我可以使用类似filename="tmpfile.tmp.$RANDOM" ; echo outputtext > "$filename"
.
但是,有时我想使用 tmp 文件进行缓存,在这种情况下,我想知道“tmpfile.tmp.*”是否与其中的任何内容匹配/tmp
,如果匹配,请使用该文件而不是创建一个新文件。不幸的是test
,[ -f filename ]
据我所知,等价物不支持文件通配。
因此,我的问题是双重的:
"predictablename.$RANDOM"
可接受的做法还是有更好(更安全、更简单)的方法?predictablename
?我正在运行一个实验,在该实验中我对使用和不使用缓存的读写速度进行了基准测试。在 Linux 上,使用 'conv=fsync' 作为操作数可确保在 'dd' 退出之前完全物理写入输出文件(以获得更准确的时间)。
MacOS 没有 'conv' 的这个选项。当我寻找准确的基准时,这是我应该关注的事情吗?如果是这样,我该怎么办?
谢谢你的时间。
我正在使用 bcache 和大约 1 TByte 的 SSD 缓存来处理大约 40 TByte 的数据。回写并为 bcache 配置 10%,大约 100 GByte 的脏数据仅存在于缓存设备上。
我喜欢 bcache 继续使用缓存的配置百分比进行延迟写入,但我更喜欢 bcache 随着时间的推移清除它。换句话说,突然的写突发应该去SSD,并且这个堆积的“债务”应该在接下来的几秒/分钟/小时内被清除。
这可能吗?
相关的,写回策略究竟是什么样的?是否会发生旧数据永远保存在 SSD 上,而只有年轻数据被写回的情况?
问一个更准确的问题:
似乎我可以使用需要密码短语的密钥完成rsync
-over- ssh
,而无需输入密码短语。例如,我可以从命令行运行rsync
:
rsync -qavz -e ssh -i /home/keshlam/.ssh/password_id_dsa.pub a.a password_id@192.168.122.47:/home/password_id/a.a
Run Code Online (Sandbox Code Playgroud)
并看到该a.a
文件出现在远程机器上,而不会提示输入密码。
我最好的猜测是这是一个 ssh 缓存效果——我昨天输入了密码,两台机器仍然相互信任。
这个分析有意义吗?如果是这样,刷新缓存以进行测试的最简单可靠的方法是什么 - 重新启动?
例如,当我归档一些文件(使用 tar)时,Linux 使用了相当多的磁盘缓存(和一些交换),但在操作完成后从不清理它。结果,因为没有可用内存,Linux 会尝试从内存中换出一些东西,这反过来又会给 CPU 带来额外的负载。
当然,我可以通过运行来清理缓存,echo 1 > /proc/sys/vm/drop_caches
但我必须这样做是不是很愚蠢?
更糟糕的是交换,没有命令来清理未使用的交换,我必须完全禁用/启用它,我认为这根本不是一件安全的事情。
更新:
我进行了一些测试并发现了一些事情:
在归档命令期间换出的内存页面与归档文件无关,这似乎只是一个普通的换出过程,这是由于可用内存减少(因为磁盘缓存把它全部吃光了)根据swappiness
运行swapoff -a
实际上是安全的,这意味着交换的页面将移回内存
我当前的解决方案是通过 cgroups 限制归档命令内存使用(我运行带有-m
标志的docker 容器)。如果您不使用 docker,有一个项目https://github.com/Feh/nocache可能会有所帮助。
剩下的问题是Linux 什么时候会清理磁盘缓存,会不会呢?如果没有,手动清理磁盘缓存 ( echo 1 > /proc/sys/vm/drop_caches
)是一个好习惯吗?