小编cha*_*aos的帖子

如何在unix中查找空目录

我想显示我家目录下的所有空目录,用shell脚本,能帮我找到代码吗?(不使用find's -empty

directory find

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

一切都是文件?

在 Linux 中,每个实体都被视为文件。如果我这样做vim <cd-Name>vim会将目录内容打开到它的编辑器中,因为它不区分文件和目录。

但是今天在工作的时候,遇到了一件事,很想知道。

我计划从嵌套目录中打开一个文件

vim a/b/c/d/file
Run Code Online (Sandbox Code Playgroud)

但是vim,我输入了

 cd a/b/c/d/
Run Code Online (Sandbox Code Playgroud)

并点击TAB两次,但命令仅显示“d”目录的可用目录而不是文件。

难道cd命令不尊重“一切都是文件”吗?或者我错过了什么?

linux cd-command linux-kernel

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

如何理解 modinfo 输出?

我只是想了解modinfo描述内核模块的输出。例如,在 module 的情况下i915,输出如下所示:

$ modinfo i915
filename:       /lib/modules/4.2.0-1-amd64/kernel/drivers/gpu/drm/i915/i915.ko
license:        GPL and additional rights
description:    Intel Graphics
author:         Intel Corporation
[...]
firmware:       i915/skl_dmc_ver1.bin
alias:          pci:v00008086d00005A84sv*sd*bc03sc*i*
[...]
depends:        drm_kms_helper,drm,video,button,i2c-algo-bit
intree:         Y
vermagic:       4.2.0-1-amd64 SMP mod_unload modversions
parm:           modeset:Use kernel modesetting [KMS] (0=DRM_I915_KMS from .config, 1=on, -1=force vga console preference [default]) (int)
[...]
Run Code Online (Sandbox Code Playgroud)

我能够理解一些领域,但我不知道以下是什么意思:

  • firmware
  • alias
  • intree
  • vermagic

有谁知道如何解释它们?

linux kernel kernel-modules linux-kernel

11
推荐指数
1
解决办法
7381
查看次数

打印以特定字符串开头的列

我有一个看起来像这样的文件:

ID101     G    T     freq=.5     nonetype     ANC=.1     addinfor
ID102     A    T     freq=.3     ANC=.01    addinfor
ID102     A    T     freq=.01     type=1     ALT=0.022    ANC=.02    addinfor
Run Code Online (Sandbox Code Playgroud)

如您所见,每行的列数略有不同。我特别想要第 1 列、第 2 列、第 3 列、第 4 列和以ANC=

期望的输出:

ID101     G    T     freq=.5     ANC=.1
ID102     A    T     freq=.3     ANC=.01
ID102     A    T     freq=.01    ANC=.02
Run Code Online (Sandbox Code Playgroud)

我一般使用 awk 命令来解析文件:

awk 'BEGIN {OFS = "\t"} {print $1, $2, $3, $4}'
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法可以更改此命令以适用于此类情况?

我认为这样的事情可能会奏效:

awk '{for(j=1;j<=NF;j++){if($j~/^ANC=/){print $j}}}'
Run Code Online (Sandbox Code Playgroud)

但是,如何编辑它以打印第一列?

sed awk text-processing

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

有选择地使用 chmod 命令

我想对特定目录下的所有文件和子目录设置 755 权限,但我只想对那些没有 755 权限的组件执行 chmod 755。

find /main_directory/ -exec chmod 755 {} \;
Run Code Online (Sandbox Code Playgroud)

如果该find命令返回一长串列表,这将花费大量时间。我知道我可以使用 stat 命令来检查每个组件的八进制文件级别权限,然后使用 if-else 来切换文件权限,但是是否有任何单行方法使用findxargs首先检查文件/目录具有什么权限,然后使用chmod将其更改为 755(如果设置为其他内容)。

command-line find chmod

11
推荐指数
1
解决办法
1947
查看次数

`EINTR`:它背后有什么理由吗?

作为背景的闲聊

EINTR是所谓的可中断系统调用可能返回的错误。如果在系统调用运行时发生信号,则不会忽略该信号,并且为它定义了SA_RESTART未设置的信号处理程序并且该处理程序处理该信号,则系统调用将返回EINTR错误代码。

作为旁注,我经常ncurses在 Python 中使用这个错误。

问题

POSIX 标准指定的这种行为背后是否有基本原理?可以理解可能无法恢复(取决于内核设计),但是,不在内核级别自动重新启动它的理由是什么?这是出于传统原因还是技术原因?如果这是出于技术原因,这些原因现在仍然有效吗?如果这是出于遗留原因,那么历史是什么?

process signals system-calls posix

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

在 Linux 中将 SIGKILL 发送到 Zombie Process 时会发生什么?

在 Linux 中,当一个子进程终止并且它的父进程还没有等待它时,它就变成了一个僵尸进程。孩子的退出代码存储在 pid 描述符中。

如果将 aSIGKILL发送给孩子,则不应该有任何效果。

这是否意味着退出代码不会被 修改,SIGKILL或者退出代码是否会被修改以指示子进程退出是因为它收到了SIGKILL?

linux process signals zombie-process

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

使用 awk 处理 3 个文件

考虑以下文件:

file1

boo,8,1024
foo,7,2048
Run Code Online (Sandbox Code Playgroud)

file2

foo,0,24,154
noo,0,10,561
Run Code Online (Sandbox Code Playgroud)

file3

24,154,7,1024,0
Run Code Online (Sandbox Code Playgroud)

我需要的是去File1并检查是否$2==7;如果为真,取$1,$2$3来自File1 ; 现在我必须比较$1来自File1 是否等于$1来自File2;如果为真,我必须从File1中不存在的File2$3和,然后我必须转到File3并检查from File3是否等于from File2,以及from File3等于from File2;如果是,那么我必须检查是否来自File1$4$1$3$2$4$2等于$3from File3,那么如果这个条件为真,我必须比较$3from File1$4from File3,如果$3from File1大于$4from File3

我尝试了以下脚本: …

awk text-processing gawk

9
推荐指数
1
解决办法
591
查看次数

命令重定向到多个文件:command &gt;file1 &gt;file2

我有这个命令:

cat somefile >file1 >file2
Run Code Online (Sandbox Code Playgroud)

执行此命令后,我无法弄清楚为什么其中file1没有任何内容。它应该具有第一个文件 ( somefile)的输出,但其中没有任何内容。

你能向我解释为什么它不从 复制或写入我的输出somefile吗?(file2包含我的输出,但不file1包含任何内容)

command-line shell io-redirection

9
推荐指数
2
解决办法
5834
查看次数

如何将文件中的行分成两行?

我有一个这样的文本文件:

a
b
c
d
e
f
g
Run Code Online (Sandbox Code Playgroud)

如何对这些行进行分组以获得如下输出:

a-b
b-c
c-d
d-e
e-f
f-g
Run Code Online (Sandbox Code Playgroud)

我必须在 shell(sh、csh、bash)中执行此操作。

我发现了这个:

cat file | xargs -n2
Run Code Online (Sandbox Code Playgroud)

但是第一组的最后一个元素没有成为第二组的第一个。

shell text-processing

9
推荐指数
3
解决办法
1977
查看次数