问题列表 - 第5504页

从 ps 输出中排除 ps 本身

我想获取系统中ps进程本身之外的所有进程的信息。

也就是说,类似:

ps --no-headers --pid 1111 -N
Run Code Online (Sandbox Code Playgroud)

其中是当前正在运行的命令1111的进程 ID 。ps

我尝试过类似的东西

ps --no-headers --ppid $$ -N
Run Code Online (Sandbox Code Playgroud)

但是,当在“子进程”中运行时,这不起作用,例如ps

ps --no-headers --pid 1111 -N
Run Code Online (Sandbox Code Playgroud)

最后一个命令尝试获取“最近”使用最多 CPU 的进程的 CPU 使用百分比和进程 ID 以及名称。

IFS=' ' read pctd proc <<<$(/bin/ps --no-headers -eo pcpu,pid,comm --sort=+pcpu | tail -1)
Run Code Online (Sandbox Code Playgroud)

直到最近都工作正常。然而,更新到 Ubuntu 23.04(或内核 6.x)后,有时ps会开始将自己列为使用 100% CPU


目前,以下似乎是一种解决方法(但并不安全):

IFS=' ' read pctd proc <<<$(/bin/ps --no-headers -eo pcpu,pid,comm --sort=+pcpu | grep -v \ ps …
Run Code Online (Sandbox Code Playgroud)

bash debian ps

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

下载文件并通过管道解压缩并不像预期的那么快

我需要在资源有限且对延迟非常敏感的环境中尽快下载并解压缩文件(具有 1 个 cpu、2 个内核、128MB RAM 的虚拟机)

当然,我尝试将下载过程通过管道传输到解压缩过程,并假设我可以在下载的同时解压缩。我知道管道被最慢的进程阻塞。为了克服这个问题,我在下载和解压缩过程之间使用了一个缓冲区。

我的 shell 脚本看起来像这样:

curl -s $CACHE_URL | buffer -S 100M | lz4 -d > /tmp/myfile
Run Code Online (Sandbox Code Playgroud)

如果我首先下载压缩文件,然后在不使用管道的情况下解压缩,则下载大约需要 250 毫秒,如果按顺序执行,解压缩大约需要 250 毫秒。

因此,我的假设是管道方法将花费大约 250-275 毫秒,因为中间没有额外的磁盘读取,并且下载不像解压缩那样受 CPU 限制,因此不会影响那么多。

但事实并非如此。正如我的日志所示,它的速度稍快一些:

Start download  
35211K,      81131K/s
Download & decompressed done in 447ms

Starting individual download & decompress
Download done in 234ms
Decompressed : 61 MiB  
                                                                               
/tmp/myfile        : decoded 75691880 bytes 
Decompress done in 230ms
Run Code Online (Sandbox Code Playgroud)

我这里是不是想错了?还有其他方法可以加快这个速度吗?

download pipe compression shell-script curl

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

有什么方法可以查看我的旧密码吗?

我忘记了 Ubuntu 系统上以前的密码,因此我找到了有关如何使用 GRUB 菜单重置密码的指南。但现在我确实需要以前的密码来做其他事情。

有什么办法可以查出我以前的密码是什么?

password

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

删除 GNUSparseFile.0 目录安全吗?

在查看一些文件系统以了解哪些文件系统消耗了磁盘空间时,我发现了一个名为GNUSparseFile.0. 我无法轻易查明其内容是否被使用。它可能是解压后暂时剩下的东西吗?操作系统是 FreeBSD,因此可能已使用 BSD 解压tar

freebsd tar bsd gnu-tar

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

如何将 bash &lt;&lt;&lt; 运算符与 diff 一起使用?

请注意:

$ diff <(echo a) <<<b
diff: missing operand after '/dev/fd/63'
diff: Try 'diff --help' for more information.
Run Code Online (Sandbox Code Playgroud)

我知道<(...)效果很好:

$ diff <(echo a) <(echo b)
1c1
< a
---
> b
Run Code Online (Sandbox Code Playgroud)

我也知道<<<一般情况下效果很好:

$ cat <<<a
a
Run Code Online (Sandbox Code Playgroud)

那么正确的调用方法是什么diff

bash here-string

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

使用dd将sda的分区复制到sdb上的文件

如何将(windows 保留、window7)dd的前 2 个分区复制/dev/sda到 上的文件/Dev/sdb

我想我可以cd/media/sam/1TB-NTFS/{我创建的文件夹}并dd从那里运行:

dd if=/dev/sda of={the folder created}/filename` 
Run Code Online (Sandbox Code Playgroud)

但我无法确定要从 sda 复制多少字节,因此当我恢复它时,我不会踩到 sda3。

............ fdisk 的结果............

am@Homebuilt:~$ sudo fdisk -l
[sudo] password for sam:      
Disk /dev/sda: 465.76 GiB, 500107862016 bytes, 976773168 sectors
Disk model: WDC WD5000AZLX-0
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: …
Run Code Online (Sandbox Code Playgroud)

dd command

3
推荐指数
1
解决办法
785
查看次数

从 maven:3.5.2-jdk-8 构建 dockerfile 时,apt-get update 无法获取 debian amd64 软件包

Dockerfile:

\n
FROM maven:3.5.2-jdk-8\n\nRUN apt-get update && \\\n    apt-get install -y python-dev python-pip\nRUN pip install awscli --upgrade\n
Run Code Online (Sandbox Code Playgroud)\n

构建日志:

\n
Preparing build context archive\xe2\x80\xa6\n[==================================================>]3380/3380 files\nDone\n\nSending build context to Docker daemon\xe2\x80\xa6\n[==================================================>] 23.19MB\nDone\n\nStep 1/17 : FROM maven:3.5.2-jdk-8\n ---> d07bef19f01a\nStep 2/17 : RUN apt-get update &&     apt-get install -y python-dev python-pip\n ---> Running in ebed1b8ce61e\nIgn:1 http://security.debian.org stretch/updates InRelease\nIgn:2 http://deb.debian.org/debian stretch InRelease\nIgn:3 http://security.debian.org stretch/updates Release\nIgn:4 http://deb.debian.org/debian stretch-updates InRelease\nIgn:5 http://deb.debian.org/debian stretch Release\nIgn:6 http://deb.debian.org/debian stretch-updates Release\nIgn:7 http://deb.debian.org/debian stretch/main arm64 Packages\nIgn:8 http://deb.debian.org/debian stretch/main all Packages\nIgn:9 http://deb.debian.org/debian stretch-updates/main …
Run Code Online (Sandbox Code Playgroud)

debian apt docker maven

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

同时运行子目录中的命令

我知道如何在与这样的模式匹配的所有子目录中运行命令(假设我想运行gh repo sync):

for d in ./*/ ; do (cd "$d" && gh repo sync) ; done
Run Code Online (Sandbox Code Playgroud)

并在每个目录的子shell中串行运行命令。

我想要的是并行运行所有命令,但在主脚本中等待它们全部完成。

我使用的是 Ubuntu 22.04。那可能吗?

ubuntu shell-script

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

仅将全大写行转换为小写

举个例子,假设我有:

One, Two.
OnE, Two.
ONE, TWO.
Run Code Online (Sandbox Code Playgroud)

我只想将全部大写的行替换为小写,这样我就得到:

One, Two.
OnE, Two.
one, two.
Run Code Online (Sandbox Code Playgroud)

我在尝试:

gsed '/[a-z]/!c\L&'
Run Code Online (Sandbox Code Playgroud)

它正确匹配行,但将其替换为:L&

One, Two.
OnE, Two.
L&
Run Code Online (Sandbox Code Playgroud)

如何将其转换为小写?

我在 L 之前尝试了 2 或 3 个反斜杠,但它只是将它们放入输出中。

如果有更好的选择,我将使用 awk 或 tr 或其他一些实用程序。

另外,如果版本很重要:

gsed --version
gsed (GNU sed) 4.9
Run Code Online (Sandbox Code Playgroud)

sed text-processing

10
推荐指数
3
解决办法
1363
查看次数

当别名作为参数传递时防止别名扩展

我有两个别名:

alias rm='python my/rm/script.py '
alias docker='sudo docker '
Run Code Online (Sandbox Code Playgroud)

问题是,当运行该语句时,$ docker rm ARGS关键字rm被扩展为别名,并且 docker 抱怨'python' is not a docker command.

我寻找了几个解决方案。一种解决方案是使用command关键字。另一种是用于shopt切换别名扩展。我无法充分利用它们。

这两个都不适合我:

alias docker='shopt -u expand_aliases; sudo docker '
alias docker='command sudo docker '
Run Code Online (Sandbox Code Playgroud)

Unalias 的工作原理:

alias docker='unalias rm; sudo docker '
Run Code Online (Sandbox Code Playgroud)

unalias 的问题是,过了一段时间,我会忘记我的 rm 别名不再存在于正在运行的 shell 环境中,无论我的 docker 命令已被执行。因此,我rm在文件上使用时会立即删除它,而我的 python 脚本则充当安全网并将要删除的文件移动到垃圾箱中。我想避免陷入这种情况,即我错误地最终使用了 GNU rm 命令而不是我的 rm 别名,这就是我不想使用 unalias 的原因。

另一个解决方案是放弃 docker 别名。缺点是我必须sudo为我想要执行的每个有用的 docker 命令编写关键字。这是一件苦差事,我避免使用 docker 的别名。

另一种解决方案是转义 …

alias

3
推荐指数
1
解决办法
181
查看次数