我试图mkdir通过查看内核源代码来了解一个函数是如何工作的。这是尝试了解内核内部结构并在各种功能之间导航。我知道mkdir在sys/stat.h. 我找到了原型:
/* Create a new directory named PATH, with permission bits MODE. */
extern int mkdir (__const char *__path, __mode_t __mode)
__THROW __nonnull ((1));
Run Code Online (Sandbox Code Playgroud)
现在我需要看看这个函数是在哪个 C 文件中实现的。从源目录,我试过
ack "int mkdir"
Run Code Online (Sandbox Code Playgroud)
其中显示
security/inode.c
103:static int mkdir(struct inode *dir, struct dentry *dentry, int mode)
tools/perf/util/util.c
4:int mkdir_p(char *path, mode_t mode)
tools/perf/util/util.h
259:int mkdir_p(char *path, mode_t mode);
Run Code Online (Sandbox Code Playgroud)
但它们中没有一个与 中的定义匹配sys/stat.h。
问题
mkdir实现?注意:我正在使用内核2.6.36-rc1。
有没有办法让一个来源的shell 脚本找出自己的路径?我主要关注 bash,尽管我有一些使用 tcsh 的同事。
我猜我在这里可能没有很多运气,因为采购导致命令在当前 shell 中执行,所以$0仍然是当前 shell 的调用,而不是源脚本。我目前最好的想法是这样做source $script $script,以便第一个位置参数包含必要的信息。有人有更好的方法吗?
需要明确的是,我正在采购脚本,而不是运行它:
source foo.bash
Run Code Online (Sandbox Code Playgroud) 与 Bash 的 source可以在不设置执行位的情况下执行脚本。这是记录在案的预期行为,但这不是反对使用执行位吗?
我知道,这source不会创建子shell。
我想知道:在安装某些东西时,有一种双击安装可执行文件的简单方法,另一方面,有一种从源代码构建它的方法。
后一个,下载一个源包,真的很麻烦。
但是这两种方法之间的根本区别是什么?
uname 真正从哪里获取信息?
我认为这应该是直截了当的。不幸的是,我找不到任何仅包含该信息的标题。
假设有人想将uname/ uname -s from的基本输出更改Linux为其他内容(本质上是重命名内核)。
他/她将如何以正确的方式(即更改源)进行操作?
这个问题确实限制了我对 Linux 的享受。如果应用程序不在存储库中,或者它没有安装程序脚本,那么我真的很纠结在哪里以及如何从源代码安装应用程序。
与Windows相比,这很容易。您(几乎)需要使用在向导中完成所有工作的安装程序应用程序。使用 Linux... 没那么多。
那么,您是否对此有任何提示或说明,或者是否有任何网站明确解释了从源代码安装 Linux 程序的方式、原因和位置?
但他们给出的指令是
cd downloaded_program
./configure
make install
Run Code Online (Sandbox Code Playgroud)
这将创建所需的 ELF,可能还有一些 .so 文件。
为什么不把它们放在一个 zip 文件中进行下载,就像 Windows 应用程序一样?有什么理由需要用户编译它们吗?
我知道像Gentoo或Slackware这样的基于源代码的发行版不需要*-dev程序版本。它们包括源代码以及用于在本地编译所有内容的头文件。
但是我从未*-dev在Arch Linux 中看到过包,尽管它是基于包的。我*-dev在其他发行版中遇到了很多包。
是否有下载特定内核版本源的资源?比如我想拿到2.6.36.2的源码来和这个包对比,看看有什么变化?
Linux 和 BSD 都有像lsandcat和echoand 之类的通用程序kill。
它们来自相同的源代码,还是 Linux 和 BSD 都拥有这些程序的独特源代码?
source ×10
compiling ×3
linux ×2
linux-kernel ×2
arch-linux ×1
bash ×1
bsd ×1
conventions ×1
elf ×1
executable ×1
kernel ×1
make ×1
permissions ×1
shell ×1
system-calls ×1
version ×1