我正在运行 Ubuntu 12.04 桌面系统。到目前为止,我只安装了一些程序(我有 sudo 权限)。
当我查看系统上的用户列表时,我看到一个很长的列表,比如超过 20 个用户——这些用户是什么时候创建的(例如 daemon、sys、sync、games、pulse 等)?这些与正在安装的新程序有什么关系?
如果我在我的系统上运行一个程序,它应该使用我的 UID 运行。但是在执行ps 时,我看到许多其他程序以不同的 UID 运行(如 root、daemon、avahi、syslog、colord 等)——这些程序是如何以不同的 UID 启动的?
如果我使用 gcc 编译一个程序,并尝试从 bash shell 执行它,那么 bash 执行它所遵循的确切步骤顺序是什么?
我知道fork()
,execve()
,loader
,dynamic linker
(和其他东西)都参与,但也有人给的步骤的确切顺序和一些适合阅读的参考?
编辑:
从答案来看,这个问题似乎意味着很多可能性。我想缩小到一个简单的案例:
(test.c 只打印 hello world)
$ gcc test.c -o test
$ ./test
Run Code Online (Sandbox Code Playgroud)
上述案例(./test
)中的步骤是什么,具体涉及一些子进程中的bash启动程序,进行加载,链接等?
我正在尝试使用 zsh shell 在 UNIX 中运行设置 UID 根程序。但我不断收到此消息
\n\n$ ./progExe\nzsh: trace trap ./progExe\n
Run Code Online (Sandbox Code Playgroud)\n\n谁能告诉我 \xe2\x80\x9czsh: 跟踪陷阱\xe2\x80\x9d 是什么意思?
\n我知道 mount 用于将目录层次结构添加到挂载点(目录)。
在 clone 的手册页中,在 CLONE_NEWNS 部分下,它们将挂载称为进程所看到的文件层次结构。
我的问题是,术语“挂载”是否用于指进程看到的目录层次结构中的各个目录,“挂载点”是否用于指代可以挂载文件系统的目录?
我正在阅读这篇关于在 bash shell 变量中使用函数的文章。我观察到要使用 shell 函数,必须导出它们并在子 shell 中执行它们,如下所示:
$ export foo='() { echo "Inside function"; }'
$ bash -c 'foo'
Inside function
Run Code Online (Sandbox Code Playgroud)
我想问一下是否可以在 bash shell 变量中定义函数,以便它们可以在当前 shell 中执行而不使用 export & running new shell?
我正在运行 Ubuntu Linux 机器。当我运行 Chrome 和 Firefox 等不同供应商编写的应用程序时,我注意到它们都使用我的 uid 运行。但如果是这样,他们在文件系统上创建的任何文件也将具有相同的 uid。那么在 linux 中,两个互不信任的应用程序如何使它们的文件彼此安全?
init 进程作为 linux 系统上所有进程的祖先存在。这个过程是否有任何类型的 IPC 入口点?其他进程是否曾经出于任何原因使用 init 执行 IPC?
我有一个关于 Linux PID 命名空间中进程的 PID 数量的问题。
假设:(NS = 命名空间)
P1 (PID NS1) -> 克隆 -> P2 (PID NS2) -> 克隆 -> P3 (PID NS3)
P3 有多少个 PID?
我认为以下内容,但我不确定是否正确:
谢谢。
我知道以下是进程在 Linux 中启动的方式
是否有可能在 Linux 上启动一个进程,并且它不属于上述类别?例如,是否可以在用户不知情的情况下启动进程?
我正在努力为上述问题找到正确的原因。我的理解是:
sudo
需要读取/etc/sudoers
只有root才能读取的文件,这就是为什么它需要设置-UID rootsu
将要创建一个具有不同真实有效 UID 的新 shell,并且需要检查密码。要检查密码,它需要读取/etc/shadow
,这就是为什么它需要设置-UID root。检查密码后,它需要调用setuid()
分叉进程,并且要使用任意UID参数,其父进程必须具有root作为有效UID,因此这也是另一个原因。以上理由是否正确?