小编lor*_*age的帖子

如何“正确”从 shell 启动应用程序

我发现很难准确地表达这个问题,但我会尽力而为。我dwm用作我的默认窗口管理器和dmenu作为我的应用程序启动器。除了浏览器,我几乎不使用 GUI 应用程序。我的大部分工作都是直接从命令行完成的。此外,我非常喜欢操作系统、应用程序等方面的极简主义。我从未摆脱过的工具之一是应用程序启动器。主要是因为我对应用程序启动器的工作方式/它们的作用缺乏准确的了解。即使是广泛的互联网搜索也只能得到模糊的解释。我想要做的是摆脱我的应用程序启动器,因为除了实际生成应用程序之外,我完全没有用它。为了做到这一点,我真的很想知道如何从外壳“正确”启动应用程序。因此,“正确地”的含义可以近似为“就像应用程序启动器会做的那样”。

我知道以下从 shell 生成进程的方法:

  1. exec /path/to/Program 用指定的命令替换 shell 而不创建新进程
  2. sh -c /path/to/Program 启动 shell 依赖进程
  3. /path/to/Program 启动 shell 依赖进程
  4. /path/to/Program 2>&1 & 启动外壳独立进程
  5. nohup /path/to/Program & 启动独立于 shell 的进程并将输出重定向到 nohup.out

更新 1:我可以说明例如在不同条件下dmenu从重复调用中重建它的内容ps -efl。它生成一个新的 shell/bin/bash并且作为这个 shell 的子应用程序/path/to/Program。只要孩子在身边,贝壳就会在身边。(它如何管理这超出了我的能力......)相反,如果你nohup /path/to/Program &从一个 shell发出,/bin/bash那么程序将成为这个 shell 的子进程,但是如果你退出这个 shell,程序的父进程将是最上层的进程。因此,如果第一个进程是 eg/sbin/init verbose并且它有,PPID 1那么它将是程序的父进程。这里就是我试图用一个图表来解释:chromium推出通过dmenufirefox使用推出exec firefox & exit

systemd-+-acpid
        |-bash---chromium-+-chrome-sandbox---chromium-+-chrome-sandbox---nacl_helper …
Run Code Online (Sandbox Code Playgroud)

shell exec

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

如何使用 systemd 创建用户 cgroup

lxcArch Linux. 以下是基本系统信息:

[chb@conventiont ~]$ uname -a
Linux conventiont 3.17.4-Chb #1 SMP PREEMPT Fri Nov 28 12:39:54 UTC 2014 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

这是一个自定义/编译内核,具有user namespace enabled

[chb@conventiont ~]$ lxc-checkconfig 
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled
Multiple /dev/pts instances: enabled

--- Control groups ---
Cgroup: enabled
Cgroup clone_children flag: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: …
Run Code Online (Sandbox Code Playgroud)

systemd container cgroups virtualization lxc

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

如何 sed -e 's///' 除特定模式之外的所有内容?

如何用 sed 替换字符串中的所有内容,除了 % 和直接接在它之后的任何数字?意思是,除字符串外的所有内容,例如:

%1 %1000 %55 等等。

给定这种形式的字符串:

    1: [18x14] [history 1/2000, 268 bytes] %3
    2: [18x14] [history 1/2000, 268 bytes] %4 (active)
Run Code Online (Sandbox Code Playgroud)

我只想得到%3%4零件。数字可以达到999

sed

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

如何从命令行使用cups打印受密码保护的pdf?

我有一个*.pdf受密码保护的文件。我有密码,我可以用 .pdf 查看 pdf mupdf。但是,使用CUPSvia打印lpr -P PRINTERNAME *.pdf不起作用。我所有的打印都是通过命令行和 cupslpr命令完成的,我不想改变它。有没有办法CUPS打印受密码保护的pdf?

printing cups pdf

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

当用户切换到新密钥时该怎么办?

我的 GnuPG 密钥环中有多个用户的一些公钥。其中一个用户已切换到新的公钥。我仍然拥有用户的旧密钥,该密钥的分配信任为ultimate. 我刚刚为他的新密钥分配了相同的信任。

他不再使用旧钥匙了。旧钥匙该怎么办?我应该撤回信任,还是撤销信任?在这种情况下,正确的程序是什么?

gpg pgp

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

为什么我的根文件系统的挂载点会改变?

当我查看lsblk它的输出时,通常会显示:

lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 298.1G  0 disk
??sda1   8:1    0  1023M  0 part /boot
??sda2   8:2    0 297.1G  0 part /
sr0     11:0    1  1024M  0 rom
Run Code Online (Sandbox Code Playgroud)

/是我的根文件系统的挂载点。但是,如果我开始,sudo systemctl start docker我会得到以下输出:

lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 298.1G  0 disk
??sda1   8:1    0  1023M  0 part /boot
??sda2   8:2    0 297.1G  0 part /var/lib/docker/btrfs
sr0     11:0    1  1024M  0 rom
Run Code Online (Sandbox Code Playgroud)

现在我的根文件系统的挂载点已根据 …

filesystems btrfs docker

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

如何使用标准 *nix 工具通过 bash 脚本获取每个内核的 CPU 使用率

我正在编写一个 bash 脚本,dwm使用xsetroot. 一切都按预期工作。我目前缺少的是一种简单的方法,它只使用标准*nix工具为我提供系统上每个内核的当前负载(我有 4 个内核。)。我不知道如何做到这一点,例如使用top. 到目前为止,我在本网站上找到的所有其他帖子都只涉及平均负载。以前有人这样做过吗?

我希望每个内核都使用它的主要原因是有一个廉价而粗略的工具来检查程序是否正在运行我并行编写的某些代码(例如每个循环)。

bash x11 shell-script dwm

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

绑定 Shift-Enter 以插入换行符而不评估当前表达式

我尝试绑定Shift-Enter以插入换行符而不评估终端和 repl 模式中的当前表达式。通过阅读ArchWiki,我想在我的设置这个~/.Xmodmap文件并重新装载~/.Xmodmapxmodmap ~/.Xmodmap。然而,这不起作用。这是我的详细设置:

内容:

    ~/.Xmodmap:
    keysym Return = Return Linefeed
Run Code Online (Sandbox Code Playgroud)

~/.Xmodmap 通过设置登录时自动获取资源:

    if [ -s ~/.Xmodmap ]; then
        xmodmap ~/.Xmodmap

    fi
Run Code Online (Sandbox Code Playgroud)

在我的~/.xinitrc.

其他相关信息:

(1) 我在我~/.bashrc和我的~/.inputrc. 然而,当去掉这些选项时,结果并没有什么不同。

(2)这里keysym Return = Return Linefeed建议使用。* 其他方法也不起作用。

(3) 我$TERM的设置为xterm-256color

谢谢你的帮助!


*更新:此页面上建议的解决方案(如果仍未找到)无法在此处讨论的特定情况下工作,因为编程语言正在使用其自己的 repl 实现。所以这与手头的案件没有任何关系。

bash xterm vi xmodmap

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

启动 LXC 容器时主机系统键盘布局发生变化

我使用 lxc 在 archlinux 主机上成功创建了一个 archlinux 容器。但是,每当我通过以下方式启动容器时

    lxc-start -n GUESTNAME
Run Code Online (Sandbox Code Playgroud)

键盘布局更改为主机和容器中的默认 us-layout。但我希望它是 de-latin1。令人惊讶的是,尽管事实上在

    /etc/vconsole.conf
Run Code Online (Sandbox Code Playgroud)

在主机和容器中我已经设置了选项

    KEYMAP=de-latin1
Run Code Online (Sandbox Code Playgroud)

这个问题的原因似乎是负责设置 vconsole 选项的 systemd 服务没有在容器内运行:

            systemctl status systemd-vconsole-setup
     ? systemd-vconsole-setup.service - Setup Virtual Console
       Loaded: loaded (/usr/lib/systemd/system/systemd-vconsole-setup.service; static)
       Active: inactive (dead)
               start condition failed at Mon 2014-06-02 20:53:10 UTC; 27s ago
               ConditionPathExists=/dev/tty0 was not met
         Docs: man:systemd-vconsole-setup.service(8)
               man:vconsole.conf(5)
Run Code Online (Sandbox Code Playgroud)

不知何故,它指出

    /dev/tty0 was not met
Run Code Online (Sandbox Code Playgroud)

但我不确定它想告诉我什么。archlinux linux 容器页面(https://wiki.archlinux.org/index.php/Linux_Containers#Terminal_settings)对我没有帮助。有人可以解释错误以及如何解决吗?


更新:

(1) 当我直接从控制台启动容器时,键盘布局不会改变(例如,通过启动 tmuxtmux new -s stoic然后运行sudo lxc-start -n stoic,然后通过 与 tmux …

linux keyboard-layout lxc

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

我如何告诉 gpg 我不希望特定程序的密码缓存?

我在用着gnupg 2.1.2gnupg通常在缓存我的密码时它非常方便。但对于一些敏感程序,我希望gnupg不使用gpg-agent. 我在互联网上搜索了很长时间,但没有找到很多有用的信息。如何知道我gnupg不希望缓存特定程序的密码?

这是一个例子。我使用Mutt作为我的 MUA,并将所有帐户的密码加密在~/.mutt/.passwd.gpg. 在我的~/.muttrc我设置

source "/usr/bin/gpg -d --quiet  ~/.mutt/.passwd.gpg |"
Run Code Online (Sandbox Code Playgroud)

当我Mutt第一次启动时,我会被要求输入我的私钥密码gpg。当我输入该密码后,该密码将被缓存一段时间gpg。因此,当我Mutt在此间隔内再次开始时,系统不会再提示我输入私钥密码。这意味着在此期间访问我的计算机的任何人都可以阅读我的邮件甚至发送邮件。我如何知道gpg(例如,通过传递一个选项,gpg尽管-page 不显示任何相关标志)在每次启动(或任何其他特定程序)man时提示输入我的私钥密码?Mutt我意识到这甚至可能不可能,因为gpg可能不知道哪个程序试图访问加密文件。但我希望我们伟大的社区能够证实这一点。

gpg gpg-agent

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