如何删除子树中的所有空目录?我用过类似的东西
find . -type d -exec rmdir {} 2>/dev/null \;
Run Code Online (Sandbox Code Playgroud)
但我需要多次运行才能删除仅包含空目录的目录。此外,它很慢,尤其是在 cygwin 下。
不知何故,我碰巧换掉了 14 GB 的内存。杀了罪魁祸首后,我又有了大量的空闲内存,所以我想我可以再把重要的数据带进来。因此,使用了 32 GB 中的 5 GB 和使用了 14 GB 的交换空间,我跑了swapoff -a…… 4 小时后,大约一半的工作完成了。
这意味着少于 1 MB/s,而我可以轻松复制 200 MB/s。我的交换是加密的,但所有普通分区也是如此,使用aes-ni它不会导致明显的 CPU 负载(填充交换空间只需要几分钟)。我看到优化没有特殊原因swapoff,但是我想知道它怎么会变慢?
只需添加更多数据:我的主内存是 32 GB,我在 4 个硬盘中的每一个上都有 32 GB 的交换空间(当然是矫枉过正,但谁在乎?)。整个交换空间可以在不到 5 分钟的时间内被(解密和)读取:
time -p sudo sh -c 'for i in /dev/mapper/cryptswap?; do md5sum $i & done; wait'
014a2b7ef300e11094134785e1d882af /dev/mapper/cryptswap1
a6d8ef09203c1d8d459109ff93b6627c /dev/mapper/cryptswap4
05aff81f8d276ddf07cf26619726a405 /dev/mapper/cryptswap3
e7f606449327b9a016e88d46049c0c9a /dev/mapper/cryptswap2
real 264.27
Run Code Online (Sandbox Code Playgroud)
读取分区的一部分不会比读取全部更慢。然而,阅读大约 1/10 的时间需要大约 100 倍的时间。
我观察到,在swapoffCPU 大部分时间都处于空闲状态(可能是一个内核的 10%),磁盘也是如此(由 LED“测量”)。我还看到交换空间一个接一个关闭。
在 Windows 上有一个很好的文件搜索引擎,叫做Everything,它(不像find)非常快并且(不像locate)总是返回最新的结果。AFAIK 它通过从 NTFS 日志填充数据库来工作(它不适用于其他文件系统)。
我想知道 Linux(ext3 或 ext4)是否有类似的东西(我不关心 GUI;我的观点是速度和最新的保证);我用谷歌搜索但一无所获。可以做这样的事情,或者甚至有人在做吗?
我刚刚尝试将一棵大树从一个磁盘移动到另一个磁盘,但它太小了。现在,我留下了一些我无法真正理解的东西——看起来有些文件确实从源树中移开了,而其他文件只是被复制了。这很可能不是真的,我只是忽略了一些东西,就像我检查目标磁盘上的空闲位置时所做的那样。:D
该命令很简单mv source-dir destination-dir,其中两个目录驻留在不同的磁盘上。我正在使用mv (GNU coreutils) 7.4. 在手册页中我找不到以下问题的答案:
在脚本中,我进入了它$0的可能相对路径。为了将其转换为绝对值,我发现了这个我不明白的解决方案:
abspath=$(cd ${0%/*} && echo $PWD/${0##*/})
Run Code Online (Sandbox Code Playgroud)
我的问题是${0%/*}and里面的魔法${0##*/}。看起来前者提取目录名,后者提取文件名,我只是不明白如何。
我想将 SSD 上现有的根(也是唯一)分区镜像到另一个磁盘。它应该是一种 RAID-1,只是不对称*。我知道有选项mdadm --write-behind,应该这样做。
但我不知道是否可以保留现有分区的上下文。我想像
但我可能太乐观了,不是吗?
* 所有读取都应该访问第一个磁盘,并且在写入第一个磁盘时应该认为写入完成。
我想知道将有关文件的信息存储在inode 中而不是直接存储在目录中是否值得额外的开销。可能我高估了开销或忽略了一些重要的事情,但这就是我问的原因。
我看到硬链接需要像“inode”这样的东西,但如果开销真的和我想象的一样大,我想知道是否有任何理由证明它是合理的:
bunzip2并且bcat可以忽略不计我并不是说 inodes/hardlinks 不好或没用,但它能否证明额外间接的成本是合理的(缓存肯定有很大帮助,但它不是灵丹妙药)?
在一个新的虚拟机上,top 显示我的一个进程消耗了 100 GB 的虚拟内存。我读过这是可能的,因为 overcommit,但是,这有点太多了。我从未见过这样的事情,尤其是在只有 6 GB 实内存、2 GB 交换和单个 40 GB 高清分区的 VM 中。
具有 101 GB VIRT 的有趣过程是 Eclipse IDE(几分钟前开始),还有另一个是具有 98 GB VIRT 的 WebKitWebProcess。所有其他进程都具有大约 1-2 GB 的合理 VIRT 值。所有三个工具似乎都同意这一点:top,htop和ps。
详细信息:
Linux 4.15.0-38-generic x86_64 GNU/Linux,Linux Mint 19 Tara
Java HotSpot(TM) 64 位服务器 VM(构建 25.191-b12,混合模式)
版本:2018-09 (4.9.0) 构建 ID : 20180917-1800
/proc//maps 的内容以
00400000-00401000 r-xp 00000000 08:01 132092 /usr/lib/jvm/java-8-oracle/jre/bin/java
00600000-00601000 r--p 00000000 08:01 132092 /usr/lib/jvm/java-8-oracle/jre/bin/java
00601000-00602000 …Run Code Online (Sandbox Code Playgroud) 我刚读如何启用使用Ctrl + Alt + Backspace键查杀X.org和我真的很高兴,这control- alt-backspace不再是杀死我的X服务器。但是,我想有办法杀死它。它应该比我每天不小心输入十次更复杂。
有没有办法为 kill 命令定义自定义绑定?
我想使用control- alt- meta- shift-backspace或类似的方式
Option "XkbOptions" "terminate:ctrl_alt_bksp"
Run Code Online (Sandbox Code Playgroud)
如何做到这一点并不明显(除非它"terminate:ctrl_alt_meta_shift_bksp"似乎不起作用)。
我正在使用这个简单的 git 别名
rmdel = "!git rm $(git ls-files -d)"
Run Code Online (Sandbox Code Playgroud)
意思是“删除已删除”,即从暂存区删除从文件系统中删除的所有文件。它工作正常,除非有任何包含空格的文件。显然,列表也会被拆分,从而导致不存在文件的文件名。
我认为应该可以使用 IFS 来解决它,但是 IFS 似乎在 cygwin 中不起作用,我怀疑类似
rmdel = "!IFS=' ' git rm $(git ls-files -d)"`
Run Code Online (Sandbox Code Playgroud)
可以工作。有什么更好的主意吗?