小编maa*_*nus的帖子

如何删除子树中的所有空目录?

如何删除子树中的所有空目录?我用过类似的东西

find . -type d -exec rmdir {} 2>/dev/null \;
Run Code Online (Sandbox Code Playgroud)

但我需要多次运行才能删除仅包含空目录的目录。此外,它很慢,尤其是在 cygwin 下。

directory find rm

186
推荐指数
4
解决办法
10万
查看次数

swapoff 怎么会这么慢?

不知何故,我碰巧换掉了 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“测量”)。我还看到交换空间一个接一个关闭。

swap

98
推荐指数
4
解决办法
4万
查看次数

Linux 中是否有像“Everything”这样的文件搜索引擎?

在 Windows 上有一个很好的文件搜索引擎,叫做Everything,它(不像find)非常快并且(不像locate)总是返回最新的结果。AFAIK 它通过从 NTFS 日志填充数据库来工作(它不适用于其他文件系统)。

我想知道 Linux(ext3 或 ext4)是否有类似的东西(我不关心 GUI;我的观点是速度和最新的保证);我用谷歌搜索但一无所获。可以做这样的事情,或者甚至有人在做吗?

filesystems search journaling

59
推荐指数
5
解决办法
4万
查看次数

如果出现错误, mv 会做什么?

我刚刚尝试将一棵大树从一个磁盘移动到另一个磁盘,但它太小了。现在,我留下了一些我无法真正理解的东西——看起来有些文件确实从源树中移开了,而其他文件只是被复制了。这很可能不是真的,我只是忽略了一些东西,就像我检查目标磁盘上的空闲位置时所做的那样。:D

该命令很简单mv source-dir destination-dir,其中两个目录驻留在不同的磁盘上。我正在使用mv (GNU coreutils) 7.4. 在手册页中我找不到以下问题的答案:

  • 可能会创建截断的文件吗?
  • 如果出现错误,源树中的任何内容都会被删除吗?
  • 如何恢复(以简单快捷的方式)?

hard-disk rename

20
推荐指数
2
解决办法
3929
查看次数

从脚本中查找绝对路径

在脚本中,我进入了它$0的可能相对路径。为了将其转换为绝对值,我发现了这个我不明白的解决方案:

abspath=$(cd ${0%/*} && echo $PWD/${0##*/})
Run Code Online (Sandbox Code Playgroud)

我的问题是${0%/*}and里面的魔法${0##*/}。看起来前者提取目录名,后者提取文件名,我只是不明白如何。

bash path

10
推荐指数
2
解决办法
2万
查看次数

如何突袭镜像现有的根分区?

我想将 SSD 上现有的根(也是唯一)分区镜像到另一个磁盘。它应该是一种 RAID-1,只是不对称*。我知道有选项mdadm --write-behind,应该这样做。

但我不知道是否可以保留现有分区的上下文。我想像

  • 创建“从”分区
  • 设置 RAID 告诉它从属分区未初始化
  • 让它通过克隆主分区来初始化它

但我可能太乐观了,不是吗?


* 所有读取都应该访问第一个磁盘,并且在写入第一个磁盘时应该认为写入完成。

software-raid

7
推荐指数
1
解决办法
8571
查看次数

inode 有什么用?

我想知道将有关文件的信息存储在inode 中而不是直接存储在目录中是否值得额外的开销。可能我高估了开销或忽略了一些重要的事情,但这就是我问的原因。

我看到硬链接需要像“inode”这样的东西,但如果开销真的和我想象的一样大,我想知道是否有任何理由证明它合理的:

  • 使用硬链接进行备份很聪明,但与正常操作的效率相比,备份的效率还不够重要
  • 硬链接既没有速度也没有大小损失真的很重要,因为这种优势仅适用于使用硬链接的少数文件,而对所有文件的访问会受到开销
  • 为几个同名的二进制文件节省一些空间,例如bunzip2并且bcat可以忽略不计

我并不是说 inodes/hardlinks 不好或没用,但它能否证明额外间接的成本是合理的(缓存肯定有很大帮助,但它不是灵丹妙药)?

filesystems hard-link inode files

6
推荐指数
1
解决办法
6629
查看次数

顶部显示数百 GB 的虚拟内存使用情况

在一个新的虚拟机上,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,htopps

  • 进程请求那么多虚拟内存有什么好的理由吗?
  • 这种行为不是对系统有害吗?
  • 当前对总虚拟内存的限制是多少?

更新

详细信息:
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)

memory top htop

6
推荐指数
1
解决办法
4300
查看次数

使用自定义组合键启用杀死 X.org

我刚读如何启用使用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"似乎不起作用)。

kill settings xorg keyboard-shortcuts

5
推荐指数
1
解决办法
612
查看次数

Git - 删除已删除的文件

我正在使用这个简单的 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)

可以工作。有什么更好的主意吗?

shell cygwin git alias

5
推荐指数
1
解决办法
928
查看次数