我试图安装已安装bsd-mailx软件包的实用程序,但是我想知道错误。
这是我得到的错误:
Preconfiguring packages ...
dpkg: warning: 'ldconfig' not found in PATH or not executable.
dpkg: warning: 'start-stop-daemon' not found in PATH or not executable.
dpkg: error: 2 expected programs not found in PATH or not executable.
Note: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin.
E: Sub-process /usr/bin/dpkg returned an error code (2)
Run Code Online (Sandbox Code Playgroud) 我研究 Linux 内核行为已经有一段时间了,我一直很清楚:
当一个进程终止时,它的所有子进程都会返回给该
init进程(PID 1),直到它们最终终止。
然而,最近,一个比我在内核方面更有经验的人告诉我:
当一个进程退出时,它的所有子进程也会死亡(除非你
NOHUP在这种情况下使用它们返回到init)。
现在,即使我不相信这一点,我仍然编写了一个简单的程序来确保它。我知道我不应该依赖时间 ( sleep) 进行测试,因为它完全取决于进程调度,但对于这个简单的情况,我认为这已经足够了。
int main(void){
printf("Father process spawned (%d).\n", getpid());
sleep(5);
if(fork() == 0){
printf("Child process spawned (%d => %d).\n", getppid(), getpid());
sleep(15);
printf("Child process exiting (%d => %d).\n", getppid(), getpid());
exit(0);
}
sleep(5);
printf(stdout, "Father process exiting (%d).\n", getpid());
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
这是程序的输出,ps每次printf通话时都有相关的结果:
$ ./test &
Father process spawned (435).
$ ps -ef | grep test
myuser 435 392 tty1 …Run Code Online (Sandbox Code Playgroud) 我有一个名为 links.txt 的文本文件,它看起来像这样
link1
link2
link3
Run Code Online (Sandbox Code Playgroud)
我想逐行遍历这个文件并对每一行执行一个操作。我知道我可以使用 while 循环来做到这一点,但由于我正在学习,我想使用 for 循环。我实际上使用了这样的命令替换
a=$(cat links.txt)
Run Code Online (Sandbox Code Playgroud)
然后像这样使用循环
for i in $a; do ###something###;done
Run Code Online (Sandbox Code Playgroud)
我也可以做这样的事情
for i in $(cat links.txt); do ###something###; done
Run Code Online (Sandbox Code Playgroud)
现在我的问题是当我在变量 a 中替换 cat 命令输出时,link1 link2 和 link3 之间的换行符被删除并被空格替换
echo $a
Run Code Online (Sandbox Code Playgroud)
产出
链接1 链接2 链接3
然后我使用了 for 循环。当我们执行命令替换时,是否总是用空格替换新行?
问候
我刚收到一个新的 USB 闪存驱动器,并在其上设置了 2 个加密分区。我使用 dm-crypt(LUKS 模式)到cryptsetup. 使用额外的非加密分区,驱动器具有以下结构:
/dev/sdb1,加密,隐藏标有“分区 1”的 ext4 文件系统。/dev/sdb2,加密,隐藏另一个 ext4 文件系统,标记为“分区 2”。/dev/sdb3,清晰可见的 ext4 文件系统,标记为“分区 3”。因为标签附加到 ext4 文件系统,所以只要分区没有被解密,前两个就完全不可见。这意味着,与此同时,LUKS 容器没有标签。这在使用 GNOME(自动挂载)时特别烦人,在这种情况下,分区显示为“ x GB 加密”和“ y GB 加密”,直到我决定解锁它们。
这不是一个真正的阻塞问题,但它很烦人,因为我真的很喜欢我的标签,并且很想看到它们出现,即使我的分区仍然加密。
因此,有没有办法将标签附加到 dm-crypt+LUKS 容器,就像我们将标签附加到 ext4 文件系统一样?dm-crypt+LUKS 标头是否有空间,如果有,我该如何设置标签?
请注意,我不想在解密之前暴露我的 ext4 标签,这很愚蠢。我想向容器添加其他标签,这些标签可能会在 ext4 标签隐藏时出现。
我刚刚遇到一个ld我无法解释的小问题。假设我在我的主目录中编译了一个库并将其全部安装在~/root. 共享库文件可以在以下位置找到~/root/usr/local/lib/libmylib.so。
因为~/root/usr/local/lib不在链接器的搜索路径中,所以我LD_LIBRARY_PATH像往常一样设置:
LD_LIBRARY_PATH="$HOME/root/usr/local/lib"
export LD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)
并检查该库是否可用:
$ ls $LD_LIBRARY_PATH/libmylib.so
/home/me/root/usr/local/lib/libmylib.so
Run Code Online (Sandbox Code Playgroud)
现在,如果我运行:
$ ld -lmylib --verbose
Run Code Online (Sandbox Code Playgroud)
最后几行应包含以下内容:
attempt to open /home/me/root/usr/local/lib/libmylib.so succeeded
-lmylib (/home/me/root/usr/local/lib/libmylib.so)
Run Code Online (Sandbox Code Playgroud)
除了我的情况外,他们没有。ld根本不执行任何查找/home/me/root。的内容LD_LIBRARY_PATH根本不会出现在输出中,这表明ld无耻地忽略了该变量(实际上,我的目录从未出现在SEARCH_DIR输出的前面)。
但是,如果我运行:
$ ld -L $LD_LIBRARY_PATH -lmylib --verbose
Run Code Online (Sandbox Code Playgroud)
我确实得到了上述几行,一切都很顺利,这意味着库或安装路径没有任何问题。
有没有什么情况可以ld忽略LD_LIBRARY_PATH?我已经检查过env,但找不到任何其他与链接器相关的变量(RPATH、LIBRARY_PATH、LD_RUN_PATH,都经过测试)。除了注册一些(其他)目录之外,下面的配置/etc/ld.so.*似乎没有做任何事情。该机器运行 Scientific Linux 7.4、gcc 6.4 和 ld 2.25.1。有问题的图书馆是libxml++-3.0.
我正在开发一个小型守护程序,当用户登录系统时需要运行一些指令(包括各种登录)。为此,我希望每当发生此登录事件时都唤醒我的程序。但是,我不希望它定期检查新用户是否到达,这意味着它不能:
/var/log/auth.log定期读取日志文件等。除了我必须实际解析文件这一事实之外,我还可能经常这样做(因为我的系统上登录的次数很少)。ps, whoorw并在内部跟踪用户。使用这种方法,程序可能会错过一些登录,以防有人在我的程序对输出运行检查之前登录和注销。因为我不想让我的程序浪费时间,所以我想过使用 I/O 事件,但是......我不太明白在哪里挂钩。我试过监视/var/run/utmp(使用inotify),但它似乎没有正确反应:当终端打开/关闭时,我的程序会收到很多事件,但当有人实际登录时(如果有的话)很少。此外,这些事件几乎无法识别,并且会从一次登录尝试变为另一次登录尝试。作为记录,这是我在运行时能够捕捉到的一些内容su user:
IN_OPEN文件被打开),IN_CLOSE_NOWRITE(不可写文件关闭),有时IN_ACCESS(文件被访问,使用时su -l)。su开始(密码提示):一些没有标识符 ( event.mask = 0) 的事件。还有另一种方法可以将程序挂接到“用户登录”上吗?是否有一个文件反映了我可以使用inotify手表的用户登录信息(就像我可以使用手表/proc来检测进程创建一样)?我又看了看/proc内容,但似乎没有什么是我需要的。
旁注:我考虑在 Stack Overflow 上发布它,因为它与编程相关,但除了实现之外,我对 Linux 系统在用户登录时的“可见”反应更感兴趣(“可见”,我的意思是反应)我们可以以编程方式观察/检测/注意,而不会浪费时间)。
几周前,我决定清理键盘,结果在将几个键重新装回板上时弄乱了它们。结果,某些字符变得非常难以输入......显然我在密码中使用了其中的一些字符。
当然,我计划更换我的键盘,但与此同时,每天必须在我的 ttys 上进行 4-5 次登录尝试开始让我感到不安(我不使用桌面管理器)。
我已经通过在配置pwfeedback中进行设置来稍微缓解这个问题sudo。这使我能够在键盘跳过字符时“看到”。但是我找不到agetty和login组合的类似选项。
有没有办法激活 tty 登录提示的密码反馈?
我有一台 Ubuntu 机器。我远程连接到它并收到以下错误:
mkdir: cannot create directory `/testFolder': Read-only file system
Run Code Online (Sandbox Code Playgroud)
像WINDOWS一样,重新启动机器解决了这个错误。
有人可以向我解释这种行为吗。我有点惊讶。
我的代码正在分叉一个进程并打印每个进程的 PID 和 PPID。我期待孩子的 PPID 与父母的 PID 相同,但事实并非如此。
我正在使用 Ubuntu 14.04。
#include <stdio.h>
#include <sys/wait.h>
int main(){
int pid;
pid = fork();
if(pid==0){
printf("\nI am the child and my parent id is %d and my id %d\n", getppid(), getpid());
}
else
printf("\nI am the parent and my pid is %d and my parent id is %d\n", getpid(), getppid());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是我得到的输出:
I am the parent and my pid is 29229 and my parent id is 27087
I am the …Run Code Online (Sandbox Code Playgroud) ubuntu ×3
fork ×2
login ×2
agetty ×1
apt ×1
automounting ×1
cryptsetup ×1
dm-crypt ×1
dpkg ×1
exit ×1
filesystems ×1
gnome ×1
init ×1
inotify ×1
keyboard ×1
ld ×1
linux ×1
luks ×1
mailx ×1
mount ×1
newlines ×1
partition ×1
password ×1
process ×1
readonly ×1
shell ×1
system-calls ×1
systemd ×1
users ×1