whereis pwd
pwd: /bin/pwd /usr/include/pwd.h /usr/share/man/man1/pwd.1.gz
二进制文件夹中的 pwd 与
type pwd
pwd is a shell builtin
那么在外部 pwd 上做一些实验不是无害的吗?就像添加一个“Hello shell!” cout只是为了演示原理?
pwd的来源在哪里?您通常是通过发行版获得它(我使用的是 Debian)还是您以某种方式安装或下载它?是C语言吗?我是否像使用 gcc 的任何其他文件一样编译它,并将结果(使用合适的 chmod)放入路径包含的文件夹中?升级怎么样?如你所知,我错过了这里的大局。
(顺便说一句,头文件似乎是不相关的:pwd 作为密码,而不是 print/present 工作目录。)
答案1
在外部密码上做一些实验不是无害吗?
这是一个糟糕的赌注,没有任何用途/bin/pwd
。出于安全原因,在 shell 脚本(尤其是通常由 root 运行的脚本)中提供外部程序的完整路径是一种很好的做法。
尽管如此,您仍然可以安全地构建自定义pwd
并将其放在您的主目录中的某个位置。如果包使用自动会议,这通常足以配置要安装在主目录下的包:
$ ./configure --prefix=$HOME
你可以这样说--prefix=$HOME/pwd-test
,以避免任何冲突的可能性。
只要正确设置了包的构建系统,当您像这样配置它时,您就可以放心地说,make install
无需成为 root,因为它写入的所有文件都应该位于您给定的前缀下。
pwd的来源在哪里?
pwd
是其一部分coreutils
。你会发现这样的事情Debian 软件包搜索引擎。
你通常会通过发行版获得它吗(我使用的是 Debian)
您可能还没有下载发行版源代码,但是,它被认为是 Debian 发行版的一部分。它们被分成六个磁盘(!)源 DVD 集,约占 25 GB,这就是为什么大多数人从不下载它们的原因。
不过,除非您尝试重建整个 Debian 发行版或创建衍生发行版,否则您现在可能不应该下载它们。点菜在这个阶段,下载可能是一个更好的主意。
你以某种方式安装或下载它吗?
是的,您还可以使用apt-get
安装包的源代码。有一个整章在APT 指南关于这一点。
(该文档被标记为“已过时”,但我没有看到替代文档。)
是C语言吗?
很可能是的。
我是否像使用 gcc 的任何其他文件一样编译它,并将结果(使用合适的 chmod)放入路径包含的文件夹中?
您可能不直接运行 gcc,您可能会执行标准configure ; make ; make install
舞蹈。如果您从 Debian 软件包搜索页面下载源 tarball,您可能会在 tarball 中找到一个INSTALL
或README
文件,其中包含构建说明。
升级怎么样?
他们呢?软件包搜索引擎将帮助您找到您可能需要的任何版本的软件,并将apt-get
帮助您跟踪源代码的更改,就像跟踪二进制文件一样。
我在这里错过了大局。
你可能想看看Debian 文档, 然后。
头文件似乎不相关:密码中的 pwd,而不是打印/当前工作目录。)
是的。它是 C 程序员的实用程序标头,用于访问用户数据库。说man 3 getpwent
要了解通过该界面可以使用什么。
答案2
在 Linux 上,pwd
通常由coreutils
包裹。您可以从该网站或您的发行版的源代码存储库下载源代码(这里是 Debian)。
您可以pwd
按照通常的方式编译该包中的其他工具:解压源代码并:
./configure
make
pwd
您可以根据需要修改源代码并重新编译(它是 C 代码,在 中src/pwd.c
)。但我会不是coreutils
建议您安装您在发行版副本上自行修改的任何内容。
如果您想“玩”它,请将其安装到主目录中的某个位置,并将其添加到您的路径(或测试用户的路径)中。仅当您确切知道自己在做什么(并且知道如何撤消该操作)时,才覆盖由发行版/包管理器管理的可执行文件。
这不是特定于 的coreutils
,您可以使用您的发行版提供的所有开源软件包(甚至是它不提供的软件包)来执行此操作。但是,关于不要修改由您的发行版管理的文件的警告对于低级“系统”软件包更为重要,因为您更有可能完全搞砸系统。
答案3
为什么/bin/pwd
和内置
/bin/pwd
是一个独立的可执行文件,用于打印当前目录。大多数 shell 都有pwd
内置函数,原因有两个:
- 这是一个常见、简单的操作;内置的速度更快。
有几个 shell 会跟踪当前目录中的符号链接。考虑:
$ pwd /home/gilles $ ln -s /tmp sym # Create a symlink /home/gilles/sym -> /tmp $ cd sym $ pwd /home/gilles/sym # the directory tracked by the shell $ /bin/pwd /tmp # the "real" location of the current directory $ pwd -P # pwd -P also shows the "real" location /tmp $ cd .. $ pwd /home/gilles # The shell stripped one level off its current directory $ set -P # Turn off symlink following (in bash) $ cd sym $ pwd /tmp $ cd .. $ pwd /
某些脚本显式调用/bin/pwd
以避免 shell 可能执行的任何符号链接。覆盖/bin/pwd
做其他事情可能会破坏东西。
哪里可以找到来源
在 Debian 及其衍生版本(包括 Ubuntu 及其衍生版本)以及任何其他使用 dpkg 和 APT 操作软件包的系统上,您可以通过运行来查找文件位于哪个软件包中
dpkg -S /bin/pwd
您将看到该文件是由coreutils
包提供的。
一般来说,要找出构建该二进制包的源包,请运行dpkg -s coreutils
或apt-cache show coreutils
;aptitude show coreutils
这里,它们不显示一行Source:
,这意味着源包与二进制包具有相同的名称(情况并非总是如此,主要是当源包被拆分为多个二进制包时)。
如果你想获取源码,你甚至不需要找出源码包的名称。赶紧跑
apt-get source coreutils
这将下载并解压包的源代码coreutils
。