编辑和重新编译单个程序

Ema*_*erg 4 compiling

whereis pwd
pwd: /bin/pwd /usr/include/pwd.h /usr/share/man/man1/pwd.1.gz
Run Code Online (Sandbox Code Playgroud)

二进制文件夹中的密码与

type pwd
pwd is a shell builtin
Run Code Online (Sandbox Code Playgroud)

那么在外部密码上做一些实验不是无害的吗?比如,添加一个“Hello shell!” cout 只是为了演示原理?

pwd 的来源在哪里?您通常是通过发行版获得它(我在 Debian 上)还是以某种方式安装或下载它?是在 C 中吗?我是否像使用 gcc 的任何其他文件一样编译它并将结果(使用合适的 chmod)放在路径包含的文件夹中?升级呢?如你所知,我在这里错过了大局。

(顺便说一句,头文件似乎无关:密码中的 pwd,而不是打印/当前工作目录。)

War*_*ung 7

在外部密码上做一些实验不是无害的吗?

没有什么用/bin/pwd. 出于安全原因,在 shell 脚本中——尤其是那些通常由 root 运行的脚本——提供外部程序的完整路径是一种很好的做法。

不过,您可以安全地构建自定义pwd并将其放在您的主目录下的某个位置。如果包使用Autoconf,这通常足以配置要安装在主目录下的包:

$ ./configure --prefix=$HOME
Run Code Online (Sandbox Code Playgroud)

你可能会说类似的话--prefix=$HOME/pwd-test,以避免任何冲突的可能性。

只要包的构建系统设置正确,当您像这样配置它时,您可以放心地说make install而不是 root,因为它写入的所有文件都应该在您提供的前缀下。

pwd 的来源在哪里?

pwd是 的一部分coreutils。您可以使用Debian 软件包搜索引擎找到此类内容。

你通常通过发行版获得它吗(我在 Debian 上)

您可能还没有下载发行版源代码,但是是的,它被认为是 Debian 发行版的一部分。它们被分成六盘 (!)源 DVD 集,包含大约 25 GB,这就是为什么大多数人从不下载它们。

除非您尝试执行诸如重建整个 Debian 发行版或创建衍生发行版之类的事情,否则即使现在您也不应该下载它们。在这个阶段,点菜下载可能是一个更好的主意。

你以某种方式安装或下载它?

是的,您还可以apt-get用于安装包的源代码。APT HOWTO 中有一整章是关于这个的。

(该文档被标记为过时,但我没有看到替换文档。)

是在 C 中吗?

很有可能,是的。

我是否像使用 gcc 的任何其他文件一样编译它并将结果(使用合适的 chmod)放在路径包含的文件夹中?

您可能不会直接运行 gcc,您可能会configure ; make ; make install跳标准舞。如果您从 Debian 软件包搜索页面下载源 tarball,您可能会在 tarball 中找到一个INSTALLREADME文件,其中包含构建说明。

升级呢?

他们呢?包搜索引擎将帮助您找到您可能需要的任何版本的软件,并apt-get帮助您跟踪源代码的更改,就像跟踪二进制文件一样。

我在这里错过了大局。

那么您可能需要查看Debian 文档

头文件似乎无关:pwd 作为密码,而不是打印/当前工作目录。)

是的。它是 C 程序员的实用程序头文件,用于访问用户数据库。说man 3 getpwent要了解通过该界面可用的内容。


Mat*_*Mat 5

在 Linux 上,pwd通常由coreutils包提供。您可以从该网站或从您的发行版的源代码库(此处为 Debian)下载源代码。

您可以pwd按照通常的方式编译该包中的其他工具:解压源代码并:

./configure
make
Run Code Online (Sandbox Code Playgroud)

您可以根据需要修改源代码pwd并重新编译(它是 C 代码,在 中src/pwd.c)。但是我建议你安装任何你从coreutils你的发行版副本中修改过的东西。

如果您想“玩”它,请将其安装到您的主目录中的某个位置,并将其添加到您的路径(或测试用户的路径)中。如果您确切地知道自己在做什么(并且知道如何撤消),则仅覆盖由您的分发/包管理器管理的可执行文件。

这不是特定于 的coreutils,您可以使用您的发行版提供的所有开源软件包(甚至没有提供的软件包)来执行此操作。但是关于不修改由您的发行版管理的文件的警告对于低级“系统”包更为重要,因为您更有可能完全搞砸系统。