単一プログラムの編集と再コンパイル

単一プログラムの編集と再コンパイル
whereis pwd
pwd: /bin/pwd /usr/include/pwd.h /usr/share/man/man1/pwd.1.gz

バイナリフォルダのパスワード

type pwd
pwd is a shell builtin

それでは、外部パスワードに対していくつかの実験を実行することは無害ではないでしょうか?単に原則を示すために「Hello Shell!」を追加するのと同じですか?

pwdソースはどこですか?通常、ディストリビューション(私はDebianを使用しています)から入手できますか、それとも何らかの方法でインストールまたはダウンロードしますか? C言語ですか? gccを使用して他のファイルと同じようにコンパイルし、結果(適切なchmodを含む)をパスに含まれるフォルダに保存しますか?アップグレードはどうですか?ご存知のように、私はここで大きな絵を見逃しています。

(しかし、ヘッダファイルは関係がないようです。印刷/現在の作業ディレクトリではなく、パスワードとしてpwdを使用します。)

答え1

外部パスワードに対して実験を実行することは無害ではありませんか?

これは目的がない悪い賭けです/bin/pwd。セキュリティ上の理由から、シェルスクリプト、特に通常はrootで実行されるスクリプトから外部プログラムへのフルパスを提供することをお勧めします。

それでも、カスタム項目を安全に作成してpwdホームディレクトリに配置できます。パッケージを使用する場合自動化された会議通常、ホームディレクトリにインストールされるパッケージを構成するのに十分です。

$ ./configure --prefix=$HOME

--prefix=$HOME/pwd-test紛争の可能性を避けるために、こう言うことができます。

パッケージのビルドシステムが正しく設定されている限り、このように設定すると、ルートでなくてもmake install作成するすべてのファイルは、ユーザーが提供したプレフィックスの下になければならないと安全に言うことができます。

pwdソースはどこですか?

pwdの一部ですcoreutils。あなたは次のようなものを見つけるでしょうDebian パッケージ検索エンジン

普通はディストロで手に入れますか? (私はDebianを使用しています)

デプロイメントソースコードをダウンロードしていない可能性がありますが、これはDebianディストリビューションの一部と見なされます。 6つのディスクに分かれています(!)ソースDVDセット、約25GBを占めるので、ほとんどの人はダウンロードしません。

ただし、Debian ディストリビューション全体を再構築したり、派生ディストリビューションを作成しない限り、今すぐダウンロードしないでください。注文食品この段階では、ダウンロードする方が良い考えかもしれません。

何とかインストールまたはダウンロードしましたか?

apt-getはい、インストールパッケージのソースコードを使用することもできます。一つある全章存在するアパートガイドこの点について。

(文書は「古い」とマークされていますが、代替文書はありません。)

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現在のディレクトリを印刷するために使用されるスタンドアロンの実行可能ファイルです。ほとんどのシェルには、pwd次の2つの理由で組み込み機能があります。

  • これは一般的で簡単な作業です。組み込みの作業が高速です。
  • 一部のシェルは現在のディレクトリのシンボリックリンクを追跡します。考慮する:

    $ 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一部のスクリプトは、シェルが実行できるシンボリックリンクを避けるために明示的に呼び出されます。/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

また、見ることができます

ウォーレンヤングそして人主の答えは、いくつかの追加ポイントが発生します。

関連情報