小编Gre*_*ine的帖子

删除目录时出现`ls`错误

我打开了两个贝壳。第一个在目录 A 中。在第二个中,我删除目录 A,然后重新创建它。当我回到第一个 shell 并键入 时ls,输出为:

ls: cannot open directory .: Stale file handle
Run Code Online (Sandbox Code Playgroud)

为什么?我认为第一个 shell(在不存在的目录中保持打开状态的 shell)会在等待下一个命令时“冻结”,并且不会“意识到”该目录已被删除并重新创建。除了字符串之外,shell 是否持有对其当前工作目录的“更深层次”引用$PWD

filesystems bash open-files pwd

13
推荐指数
3
解决办法
2098
查看次数

查找命令:-size 行为

我对findLinux 中的命令有疑问。

在我在网上找到的所有文章中,它都说 属性-size -10M,例如,返回大小小于 10 MB 的文件。但是当我尝试对此进行测试时,似乎-size -10M返回大小小于或等于 9 MB 的文件。

如果我做

find . -type f -size -1M
Run Code Online (Sandbox Code Playgroud)

find命令仅返回空文件(单位无关紧要,可以是 -1G、-1k...)。

find . -type f -size -2M
Run Code Online (Sandbox Code Playgroud)

返回文件 <= 1M 大小等。

手册页说:

请记住,大小四舍五入到下一个单位。因此 -size -1M 不等于 -size -1048576c。前者只匹配空文件,后者匹配 0 到 1,048,575 字节的文件。

好的,所以我猜 -1M 被四舍五入到 0M,-2M 到 -1M 等等......?

但是之后

find . -type f -size 1M
Run Code Online (Sandbox Code Playgroud)

返回文件 <= 1M(即 100K 和 512K 文件,但不是空文件),而我希望它返回大小正好为 1M 的文件。

find . -type f -size 2M
Run Code Online (Sandbox Code Playgroud)

返回文件 …

size find

10
推荐指数
1
解决办法
539
查看次数

相当于 bash 的 PSReadLine

对于使用 Powershell 的 Windows 终端,我有插件 PSReadline,它为我提供了一些非常方便的功能。例如,当我开始打字时,我的历史记录的可导航列表视图。因此,如果我输入,cd它会显示我最近使用的 10 个命令的列表,其中包含cd,我可以在该列表中上下移动并选择一个。

PSReadline 的屏幕截图 - 可滚动历史记录

我喜欢的另一个功能是我可以键入cd并按 Tab 键来显示我可以导航到的所有子目录的列表。我还可以按上/下/左/右键在此列表中选择一个目录并跳转到该目录。

PSReadline - 目录选择的屏幕截图

是否可以为 WSL (Ubuntu) 提示符做类似的事情?顺便说一句,我在 Powershell 和 WSL 中都使用 oh-my-posh 作为提示。我怀疑 oh-my-zsh 可能有这样的东西,但我很想避免安装它,因为我花了很多时间为 oh-my-posh 设置主题。除非有办法在没有主题的情况下使用 oh-my-zsh 插件。

bash prompt zsh

8
推荐指数
1
解决办法
1827
查看次数

定义别名时使用单引号还是双引号?

我知道双引号的内容是展开的,而单引号的内容不是,这样

echo '$1'
Run Code Online (Sandbox Code Playgroud)

$1
Run Code Online (Sandbox Code Playgroud)

然而

echo "$1"
Run Code Online (Sandbox Code Playgroud)

<the argument - blank in this particular example>
Run Code Online (Sandbox Code Playgroud)

一样

echo $1
Run Code Online (Sandbox Code Playgroud)

然而,问题Bash: How to create an alias in .bashrc for awk with parameters让我想知道为什么在声明别名时使用双引号而不是单引号,因此:

alias cutf="_cutf"
Run Code Online (Sandbox Code Playgroud)

代替

alias cutf='_cutf'
Run Code Online (Sandbox Code Playgroud)

我会像后一个例子一样使用单引号。网络上的大多数示例也使用 single ,除非需要一些扩展。但是,在这种情况下,在我看来,没有明显的扩展。在这种情况下,它们是可以互换的,还是因为使用了函数定义而需要双引号?

shell bash alias quoting

7
推荐指数
2
解决办法
5399
查看次数

根据第二列值拆分 CSV 文件

我正在使用 Ubuntu,我想根据第二列(年龄)中的值将我的 csv 文件拆分为两个 csv 文件。第一个文件适用于 60 岁以下 (<60) 的患者,第二个文件适用于 60 岁以上 (>=) 的患者。例如,如果我有以下输入:

id,age
1,65
2,63
3,5
4,55
5,78
Run Code Online (Sandbox Code Playgroud)

期望的输出是:

文件下:

id,age
3,5
4,55
Run Code Online (Sandbox Code Playgroud)

文件覆盖:

id,age
1,65
2,63
5,78
Run Code Online (Sandbox Code Playgroud)

我已尝试以下代码,但它删除了标题(列名称),如何避免这种情况?

awk -F ',' '($2>=60){print}' file.csv > file_over.csv 
Run Code Online (Sandbox Code Playgroud)

输入文件大约有50k行(lines)。

text-processing csv-simple

7
推荐指数
3
解决办法
1183
查看次数

查找具有相同文件名和完全相同大小的重复文件

我有一个巨大的歌曲文件夹,结构混乱,文件重复在多个文件夹中。

我需要推荐一个工具或脚本,可以通过简单的两个匹配来查找和删除重复项:

  1. 完全相同的文件名
  2. 文件大小完全相同

在这种情况下,和song.mp3中存储的文件大小为 1234 字节。工具/脚本应仅保留一份副本。/songs/album1/songs/albumz

我在 Fedora 上尝试过czkawka,但它可以按文件名或文件大小进行搜索,但不能将两者组合在一起进行搜索。

fedora find mp3 search deduplication

6
推荐指数
2
解决办法
2934
查看次数

了解 Debian dpkg 软件包版本号

当我输入 时dpkg -l | grep xserver-xorg,我会得到已安装的软件包及其版本的列表:

ii  xserver-xorg               1:7.7+3~deb7u1
ii  xserver-xorg-core          2:1.12.4-6
ii  xserver-xorg-input-evdev   1:2.7.0-1+b1
ii  xserver-xorg-input-kbd     1:1.6.1-1+b1
ii  xserver-xorg-input-mouse   1:1.7.2-3
ii  xserver-xorg-video-radeon  1:6.14.4-8
Run Code Online (Sandbox Code Playgroud)

我想知道冒号前面的数字是什么意思,即2中的数字2:1.12.4-6

debian dpkg

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

尝试将进程添加到 cgroup v2 时 EBUSY

我正在玩(内核cgroups v2)。Fedora 355.15.5-200.fc35.x86_64

我能够测试和控制器cpu,没有任何问题。但对于,或者我有麻烦了。以下是如何为控制器重现此问题的步骤列表(所有命令均以 root 用户身份执行):cpusetpidsmemoryhugetlbiomemory

  1. 确保在根 cgroup 中启用内存控制器:

    # cat cgroup.subtree_control
    cpu io memory hugetlb pids
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建新的cgroup:

    # mkdir example
    # cd example/
    
    Run Code Online (Sandbox Code Playgroud)
  3. 启用内存控制器:

    # echo "+memory" > cgroup.subtree_control 
    
    Run Code Online (Sandbox Code Playgroud)
  4. 将进程添加到控制组:

    # echo $$ > cgroup.procs 
    bash: echo: write error: Device or resource busy
    
    Run Code Online (Sandbox Code Playgroud)

当我尝试首先将进程添加到cgroup控制器然后启用控制器时,最后一步会发生相同的错误。

我究竟做错了什么?

linux cgroups

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

qemu 警告:主机不支持请求的功能:CPUID.80000001H:ECX.svm [位 2]

我正在使用 Intel\xc2\xae Core\xe2\x84\xa2 i3-1115G4 在 Ubuntu 20.04(主机)上安装 Ubuntu 22.04(来宾)。

\n

我安装了qemuqemu-kvm并将bridge-utils我的用户添加到kvm组中。但是运行命令,

\n
qemu-system-x86_64 -boot d -cdrom ~/Downloads/ubuntu-22.04-desktop-amd64.iso -m 2048 -accel kvm\n
Run Code Online (Sandbox Code Playgroud)\n

给出一个错误

\n
qemu-system-x86_64: warning: host doesn\'t support requested feature: CPUID.80000001H:ECX.svm [bit 2]\n
Run Code Online (Sandbox Code Playgroud)\n

kvm ubuntu qemu

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

如何用 Perl 写一份工作?

我在写作方面的经验非常少。很久以前,我写了一个非常小的简单的java作业,用于tasklet在java中读写文件。现在我必须学习如何在Perl.

通常,在这种情况下,我会在 google 上搜索信息,但我没有得到任何关于如何在互联网搜索中用 perl 编写工作的信息。任何人都可以让我知道任何互联网资源或书籍,我可以从互联网上下载以学习 perl 工作。

我对 Perl 有一点了解。

perl

0
推荐指数
1
解决办法
419
查看次数