我在 Fedora 41 (Gnome 47)上。
我安装了 Foxit Reader 来阅读 PDF,但不喜欢它,所以卸载了它。
现在,程序Detailed Type
中Files
所有 PDF 文档的描述都是FoxitReader Document
。
我如何删除对 Foxit Reader 的引用?
我以为所有文件都是可查找的,但我正在查看处理文件不可查找情况的代码库。
为什么这是必要的?
在什么情况下文件无法查找?为什么?
请考虑以下示例:
mkdir /tmp/test2 && cd /tmp/test2
mkdir -p aa/{tmp,src}
mkdir -p bb/aa/{tmp,src}
mkdir -p {dd,ee}/bb
touch {dd,ee}/bb/aa
tree | awk '{print "# " $0}'
# .
# ├── aa
# │ ├── src
# │ └── tmp
# ├── bb
# │ └── aa
# │ ├── src
# │ └── tmp
# ├── cc
# │ └── aa
# │ ├── src
# │ └── tmp
# ├── dd
# │ └── bb
# │ └── aa
# └── ee
# └── bb
# └── aa
#
# 16 directories, 2 files
因此,我想找到所有名为的项目aa
,并以与相同的格式将它们打印出来ls -la
,这样我就可以知道它们是文件还是目录。
如果我使用典型的find
-exec
那么ls -a
目录本身就不会打印为项目,而是其内容如下:
$ find . -name aa -exec ls -la {} \;
total 0
drwxr-xr-x 1 user None 0 Feb 19 11:59 .
drwxr-xr-x 1 user None 0 Feb 19 12:00 ..
drwxr-xr-x 1 user None 0 Feb 19 11:59 src
drwxr-xr-x 1 user None 0 Feb 19 11:59 tmp
total 0
drwxr-xr-x 1 user None 0 Feb 19 11:59 .
drwxr-xr-x 1 user None 0 Feb 19 11:59 ..
drwxr-xr-x 1 user None 0 Feb 19 11:59 src
drwxr-xr-x 1 user None 0 Feb 19 11:59 tmp
total 0
drwxr-xr-x 1 user None 0 Feb 19 11:59 .
drwxr-xr-x 1 user None 0 Feb 19 11:59 ..
drwxr-xr-x 1 user None 0 Feb 19 11:59 src
drwxr-xr-x 1 user None 0 Feb 19 11:59 tmp
-rw-r--r-- 1 user None 0 Feb 19 12:00 ./dd/bb/aa
-rw-r--r-- 1 user None 0 Feb 19 12:00 ./ee/bb/aa
如果我改用,ls -lad {}/
那么我明确地只打印出目录节点,那么文件节点根本就不会打印,而是收到错误“不是目录”:
$ find . -name aa -exec ls -lad {}/ \;
drwxr-xr-x 1 user None 0 Feb 19 11:59 ./aa/
drwxr-xr-x 1 user None 0 Feb 19 11:59 ./bb/aa/
drwxr-xr-x 1 user None 0 Feb 19 11:59 ./cc/aa/
ls: cannot access './dd/bb/aa/': Not a directory
ls: cannot access './ee/bb/aa/': Not a directory
bash
如果我直接在命令行上尝试某种条件,它会失败:
# test
$ [ -d aa ] && echo dir || echo file
dir
$ find . -name aa -exec [ -d {} ] && ls -lad {}/ || ls -la {} \;
find: missing argument to `-exec'
ls: cannot access '{}': No such file or directory
ls: cannot access ';': No such file or directory
那么,我该如何使用find . -name aa
,最终我得到这个输出:
drwxr-xr-x 1 user None 0 Feb 19 11:59 ./aa/
drwxr-xr-x 1 user None 0 Feb 19 11:59 ./bb/aa/
drwxr-xr-x 1 user None 0 Feb 19 11:59 ./cc/aa/
-rw-r--r-- 1 user None 0 Feb 19 12:00 ./dd/bb/aa
-rw-r--r-- 1 user None 0 Feb 19 12:00 ./ee/bb/aa
标题是我想要实现的目标的总结,但我会举一个例子来说明我的问题是什么以及我如何尝试解决它。
假设我在 Linux 系统上有一个文件夹,其中包含以下文件:.a
,,,,,,和。.A
.b
.B
a
A
b
B
当我在我选择的文件管理器 Thunar 中打开文件夹时,文件按以下顺序显示:
.a
.A
.b
.B
a
A
b
B
这是对我有意义的输出;首先是隐藏文件(或目录),然后按字母顺序排序(考虑大小写)。最好将大写文件排在小写文件之前,但这也不算太糟。换句话说,这是我试图用 实现的输出ls
。
ls
当我想通过列出该文件夹的文件时ls
,我得到的结果如下:
$ ls -lA
total 0
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 .a
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 a
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 .A
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 A
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 .b
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 b
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 .B
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 B
这里,隐藏文件没有排到顶部,但文件整体上是按照“合理”的字母顺序排列的。
LC_ALL=C
和LC_COLLATE=C
将隐藏文件排序到顶部的几个解决方案是临时设置LC_ALL
或LC_COLLATE
为C
(我很难看出两者之间的区别,因此非常感谢您的解释):
$ LC_ALL=C ls -lA
total 0
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 .A
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 .B
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 .a
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 .b
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 A
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 B
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 a
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 b
$ LC_COLLATE=C ls -lA
total 0
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 .A
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 .B
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 .a
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 .b
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 A
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 B
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 a
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 b
如您所见,这确实解决了隐藏文件问题,但是字母排序的行为现在与 Thunar 按字母顺序对文件进行排序的方式不一致。
因此,这引出了一个问题:我如何ls
以与 Thunar 相同的方式进行排序?最好避免通过管道传输ls
到另一个命令(如)sort
,因为我想将这个新命令别名为其"ls"
自身。
如果这不可能的话,我怎样才能让 Thunar 按照对文件进行排序的方式ls
对文件进行排序(LC_ALL=C
/LC_COLLATE=C
方法对我来说似乎足够好了)?
进一步说,我想问一下按字母顺序对文件进行排序时的最佳做法是什么。我刚刚描述的行为在我看来是合理的,但也许事实并非如此?
假设我想将目录树移动(重命名)/var/lib/postgres/data
到/var/lib/postgres/data.old
:
/var/lib/postgres
└── data
├── base
│ ├── 16390
│ │ └── <...>
│ └── <...>
│ └── <...>
├── global
│ └── <...>
├── pg_wal
│ ├── <...>
│ ├── archive_status
│ └── summaries
├── <...>
└── postmaster.pid
通常,它只需一个rename()
系统调用和一个命令即可:mv data data.old
。
但是,想象一下该目录树中的某个地方有一个活动的挂载点,例如,pg_wal
是一个不同的文件系统:
$ findmnt
<...>
├─/var/lib/postgres stank/data/stratofortress/PostgreSQL zfs rw,noatime,xattr,posixacl,casesensitive
│ └─/var/lib/postgres/data/pg_wal stank/data/stratofortress/PostgreSQL/pg_wal zfs rw,noatime,xattr,posixacl,case-sensitive
<...>
或者,假设目标名称(data.old
)已经存在,并且目录树的某些分支已经创建(因为它们是挂载点,与上面的情况相同)。
~~在这两种情况下~~在后一种情况下,mv
将拒绝执行任何操作。使用类似的东西执行深度复制的成本cp -a
非常高,并且由于超出了本问题范围的原因,reflinks 不可用。
是否有一个工具可以执行最佳的“递归移动”,迭代地下降到源层次结构中无法批量重命名的每个子树的部分,直至单个文件(最终回到制作每个单独文件的副本,如果需要)?
注意:我正在寻找一种可以扩展到任意数量的子树和冲突的通用解决方案,即mv data/* -t data.old; mv data/pg_wal/* -t data.old/pg_wal
不是解决方案。换句话说,请不要从上面的示例中推断出任何约束或特殊情况。
服务在启动时读取sys/devices/virtual/dmi/id/product_serial
某个位置,通常包含一些典型的十位十六进制数字(例如01212302C5
),并带有换行符。但是有时内容无法解析为字符串 - 十六进制中的字节是字符串f8 6a 32 6d 0a
,我无法弄清楚为什么以及如何发生这种情况。最后一条0a
似乎暗示它仍然应该是文本。通常发生在 CI 中,但我不确定容器化环境是否是导致此问题的原因。
如此奇怪的行为究竟是什么原因造成的呢?
我有一个程序,每次执行某项操作时,它都会重新读取其配置文件。我想用某种虚拟文件替换该文件,该文件会调用脚本并动态生成配置数据。我无法更改文件的调用方式,否则我只能将配置数据导入。因此,每次读取我的文件“stuff.conf”时,它都应该获得运行 stuff.sh 的输出。
否则,我必须定期重写此配置,但源数据或程序读取的更改之间可能间隔数小时或数秒。因此,我必须将计时器设置得非常低,并且可能在 90% 的时间里浪费资源。
我正在 Hetzner Cloud 的 Debian 12 VPS 上设置 Netdata。预检的一部分是确保将两个文件/sys/kernel/mm/ksm/
设置为所需的值:
/sys/kernel/mm/ksm/run
应该是1
;目前是0
。/sys/kernel/mm/ksm/sleep_millisecs
应该是1000
;目前是20
。我的路线rm
-> echo
+ tee
-> chown
->chmod
在第一步就失败了,因为我无权提交rm -f
任何文件:
$ sudo rm -f /sys/kernel/mm/ksm/run
rm: cannot remove '/sys/kernel/mm/ksm/run': Operation not permitted
sed
就地使用也会失败Permission denied
。
/sys/kernel/mm/ksm/
请问对 进行持久更改的最安全/最明智的方法是什么?
因此,该shred
实用程序据称允许人们通过用随机数据反复覆盖文件来“安全地”删除文件。
显然,在写时复制文件系统上,几乎不可能完全删除曾经写入的数据。
但是,我读到过像 EXT3/4 和 XFS 这样的日志文件系统也变得shred
无效。
假设我想要一个文件系统,其主要优先级是能够尽可能安全地删除文件。哪种文件系统最适合此目的?
我知道驱动器加密,但当你解密驱动器时,我的理解是你可以在驱动器上进行文件恢复,就像它未加密一样。我希望能够保护敏感的已删除文件,即使攻击者设法绕过驱动器加密。
我有多个目录,它们的内容重叠。有时文件完全相同,有时名称相同但内容不同,有时名称相同的文件内容不同。我按如下方式合并目录:
$ rsync -aicPb --remove-source-files SOURCE-DIR/ TARGET-DIR/
此命令几乎完全符合我的要求。问题是文件扩展名未保留。即,参数-b
导致TARGET-DIR/pictureA.jpg
重命名为TARGET-DIR/pictureA.jpg~
,而SOURCE-DIR/pictureA.jpg
要复制到TARGET-DIR/
。
rsync
重命名重复文件时,有没有办法保留文件扩展名?例如,TARGET-DIR/pictureA.jpg
应重命名为TARGET-DIR/pictureA~.jpg
。