小编Tom*_*ica的帖子

我可以将 pgrep 与 kill 链接起来吗?

我注意到它|用于将第一个命令的结果发送给另一个。我想杀死所有与名称匹配的进程。
这是 pgrep 通常所做的:

$ pgrep name
5089
5105
Run Code Online (Sandbox Code Playgroud)

并且多个参数似乎适用于kill

sudo kill 5089 5105
Run Code Online (Sandbox Code Playgroud)

但这是错误的:

pgrep name | kill
Run Code Online (Sandbox Code Playgroud)

那么如何正确操作呢?

shell pipe arguments

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

使用 gparted 将驱动器末端的可用空间移动到第一个分区

我处于令人沮丧的情况 - 无论我如何尝试,gparted 都不会让我将空白空间分配给第一个分区:

图片说明

中间分区阻止我扩展/dev/sda1。我需要将分区移动/dev/sda2到驱动器的末尾,就像这样(制作的图像):

图片说明

然后我将能够扩展第一个分区:

图片说明

怎么做?我假设/dev/sda2必须将数据从物理上复制到驱动器的末尾。

partition gparted disk

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

检查所有列出的软件包是否都安装在 bash 中

我的二进制文件依赖于这些 boost 库和相应的包:

NAME                                  |          PACKAGE:
--------------------------------------+-----------------------------------
libboost_serialization.so.1.55.0      |  libboost-serialization1.55.0
libboost_thread.so.1.55.0             |  ibboost-thread1.55.0
libboost_date_time.so.1.55.0          |  libboost-date-time1.55.0
libboost_signals.so.1.55.0            |  libboost-signals1.55.0
Run Code Online (Sandbox Code Playgroud)

所以我想定义一个包列表:

boostlibnames="libboost-serialization1.55.0 libboost-thread1.55.0 libboost-date-time1.55.0 libboost-signals1.55.0"
Run Code Online (Sandbox Code Playgroud)

现在我想检查它们是否都已安装,然后才运行实际的apt-get install. 我知道 apt 会自动检查软件包是否已经安装,但我想在安装之前提示用户是否要安装缺少的库。

那么有没有一种很好的方法来检查是否安装了所有列出的库(在上面的变量中)?

shell dpkg apt

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

在 Raspbian 中列出用户和用户组

让我惊讶的是,没有任何搜索让我想到这样一个简单的问题。我想要的只是获取用户和用户组的列表(无论第二件事实际上是什么)。

我发现了许多有关创建或删除用户帐户的资源,但听起来每个人都牢记系统上的所有帐户。我想不是那样的。

那么我如何列出他们,他们的权限以及如何列出组?

users debian

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

将命令结果放入 makefile 目标中的变量中

我正在尝试在 tomcat webapp 中安装一些东西。这是我的install目标的开始:

tomcat=`locate --regex "^(/var/lib/tomcat[0-9]{1,2}/webapps/[^/]+/)AppName\.html$" -l 1 | tr -d "\n"`
echo "Tomcat: $tomcat"
# If the string is empty (no path matched) or the path does not exists (that should never really happen)
# terminate
if [ -z "$tomcat" ] || [ ! -f "$tomcat" ]; then 
  echo "Application not found on filesystem."
  exit 404
fi
Run Code Online (Sandbox Code Playgroud)

然而,这是输出:

tomcat=`locate --regex "^(/var/lib/tomcat[0-9]{1,2}/webapps/[^/]+/)AppName\.html -l 1 | tr -d "\n"`
/bin/sh: 1: Syntax error: Unterminated quoted string
makefile:77: recipe …
Run Code Online (Sandbox Code Playgroud)

bash make

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

当消耗一定数量的内存时重置正在运行的进程

我在树莓派上运行Hydra。该程序存在一些问题,但除此之外,程序中存在隐藏的内存泄漏。源码挺大的,实在找不到问题所在。不幸的是,在达到内存限制时,程序不会崩溃——而是返回一堆错误消息。当我说一堆时,我的意思是数百。 在此处输入图片说明

所以我想如果我不能在程序中取消分配内存,我可能需要重置整个过程。所以我需要:

  1. 守护进程资源使用
  2. 优雅地停止进程(类似于Ctrl+ C,然后程序说“收到信号 2 ”)
  3. 重新开始这个过程

我必须这样做,直到修复程序因错误而死亡 - 或者首先不生成它们。


如果您了解 hydra 并且对我在代码中发现的错误感到好奇:

[错误] fork for children 失败:无法分配内存
[错误] socketpair 创建失败:打开的文件太多

错误的第二部分来自perrorC 系统函数。这是最后一个错误。

debian raspberry-pi raspbian hydra

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

E: 尝试在 64 位系统上下载 32 位 OpenSSL 时无法找到软件包 libssl-dev

我正在尝试以正确的(意味着可重现的)方式编译多架构项目,所以我决定通过apt-get. 但是自从系统注意到我在做什么之后,它就变得充满敌意。虽然很多人声称您可以通过以下命令安装 32 位 OpenSSL:

apt-get install libssl-dev:i386
Run Code Online (Sandbox Code Playgroud)

我最终得到了这个结果:

E: Unable to locate package libssl-dev
Run Code Online (Sandbox Code Playgroud)

我做了apt-get update,我的操作系统版本是Debian GNU/Linux 8( Jessie )。难道我做错了什么?

我试图检查哪些i386库实际上可用:

XXXXX@debianvirtualbox:~$ aptitude search i386
p   debian-installer-8-netboot-i386    - Debian-installer network boot images for i386                                
v   debian-installer-netboot-i386      -                  
p   installation-guide-i386            - Debian installation guide for i386                                          
p   installation-guide-kfreebsd-i386   - Debian installation guide for kFreeBSD i386                                  
i   libc6-dev-i386                     - GNU C Library: 32-bit development libraries for AMD64                       
i A libc6-i386                         - GNU C …
Run Code Online (Sandbox Code Playgroud)

apt openssl multiarch

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

如何修复拒绝在 VirtualBox 中连接到 Internet 的 Debian?

Linux 的设计方式,一旦你失去互联网连接,你就完蛋了。因为没有互联网,你不能安装程序,你可能只需要一些程序来设置互联网。

带有 xfce 的 Debian 没有内置的 gui 来确保这个问题更加危险。我不确定我到底做错了什么,但是我的虚拟机中的 Debian 在克隆虚拟网卡后停止与虚拟网卡通信,我认为这与 mac 地址更改有关。我尝试在更改虚拟盒卡设置时重新启动它,但没有任何反应。

Windows 的替代品ipconfig似乎是ip,我得到了这个ip a

1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default 
    链接/环回 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 范围主机 lo
       valid_lft 永远首选_lft 永远
    inet6 ::1/128 范围主机 
       valid_lft 永远首选_lft 永远
2: eth0 : <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    链接/以太 08:00:27:98:5a:42 brd ff:ff:ff:ff:ff:ff

好像界面被关闭了。这本身就很奇怪,硬件连接在virtualbox端。mac 地址与 virtualbox 设置匹配,因此必须从硬件加载地址。

有没有办法像我在 Windows 中那样配置网络连接?比如看硬件是否找到,是否与dhcp通信等等?

debian network-interface

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

从 bash 中的 7z 命令获取百分比信息

对于包含 30 多个文件的档案,提取的文件列表很快就不再有趣了。我正在制作一个将.war存档提取到 tomcat 应用程序文件夹中的脚本:

图片说明

在查看7z命令帮助时,我注意到这一行:

  -bd:禁用百分比指示器

好吧,我真的很想启用百分比指示器并使用它而不是疯狂的文件列表。我该怎么做?就像是:

图片说明

但坦率地说,像波纹管这样的一行百分比指标就足够了:

Progress: 30%
Run Code Online (Sandbox Code Playgroud)

bash 7z

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

有适用于 Windows 的 apt-get 吗?

如果是没有互联网连接的 Windows 机器,我会做的是在另一台计算机上下载安装程序/程序,将它们放在便携式媒体上,将它们复制到无连接的机器上并安装它们。不幸的是,Linux 并没有那么简单地工作——尽管我希望你能在这一点上证明我是错的。

在 linux (debian) 上,我从来没有喜欢通过以下方式安装任何东西:

sudo apt-get install package_name(s)
Run Code Online (Sandbox Code Playgroud)

没有连接到互联网的事情是不可能的。不幸的是,要下载哪些文件以及从何处下载也很不清楚。通常 apt 会下载数十个文件,这是我讨厌手动执行的操作。

那么,是否有一个程序可以在我的 Windows PC 上下载文件,而无需做任何事情,只需告诉它包名?

aptitude debian

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

这是什么魔法?能力搜索“?提供(java运行时)”

我正在寻找如何在 Debian 上正确安装 java。来到 Debian wiki(这是我在 Debian 上真正欣赏的一件事,这个 wiki 很棒),这是我在那里得到的提示:

只需在您的系统上运行aptitude search "?provides(java-runtime)"即可列出可用的软件包)。

所以我认为这?provides是描述中的一些查询,但是看哪:

i A default-jre                 - Standard Java or Java compatible Runtime                                                         
p   default-jre:i386            - Standard Java or Java compatible Runtime                                                         
i A default-jre-headless        - Standard Java or Java compatible Runtime (headless)                                              
p   default-jre-headless:i386   - Standard Java or Java compatible Runtime (headless)                                              
p   gcj-4.8-jre                 - Java runtime environment using GIJ/Classpath                                                     
p   gcj-4.8-jre:i386            - Java runtime environment using GIJ/Classpath                                                     
p   gcj-4.8-jre-headless        - Java runtime environment …
Run Code Online (Sandbox Code Playgroud)

aptitude

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

从文件名中删除特定(已知)扩展名(如果存在)

我什至不确定是否grep打算用于单行数据中的正则表达式。谷歌搜索让我找到了这个前瞻表达式,它与 一起grep匹配任何.ext文件并返回裸名称:

XX@XX:/$ echo name.ext | grep -oP [^\.]+(?=.ext)
name
Run Code Online (Sandbox Code Playgroud)

这很好,但现在我提示用户保存文件,我不确定他是否会输入带有扩展名的名称。我尝试使前瞻有条件,确保所有名称都匹配,但这会返回一些我不明白的东西:

XX@XX:/$ echo name.ext | grep -oP "[^\.]+(?=.ext)?"
name
ext
Run Code Online (Sandbox Code Playgroud)

如果我省略扩展名,它会起作用:

XX@XX:/$ echo name | grep -oP "[^\.]+(?=.ext)?"
name
Run Code Online (Sandbox Code Playgroud)

那么这是一个grep问题还是regex问题?也许我需要以某种方式使前瞻非捕获?

grep string filenames regular-expression

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