unameはどこで情報を入手できますか?

unameはどこで情報を入手できますか?

unameは実際にどこから情報を取得しますか?

私はこれが簡単な問題だと思います。残念ながら、この情報を含む本が見つかりませんでした。

unameuname -s 誰か/のデフォルト出力を別のものに変更したいとしましょうLinux(本質的にカーネルの名前を変更する)。

彼/彼女はどのように正しい方法で作業を行います(ソースの変更など)。

ベストアンサー1

データはinit/version.cに保存されます。

struct uts_namespace init_uts_ns = {
        .kref = {
                .refcount       = ATOMIC_INIT(2),
        },
        .name = {
                .sysname        = UTS_SYSNAME,
                .nodename       = UTS_NODENAME,
                .release        = UTS_RELEASE,
                .version        = UTS_VERSION,
                .machine        = UTS_MACHINE,
                .domainname     = UTS_DOMAINNAME,
        },
        .user_ns = &init_user_ns,
        .proc_inum = PROC_UTS_INIT_INO,
};
EXPORT_SYMBOL_GPL(init_uts_ns);

文字列自体はinclude/generated/compile.hにあります。

#define UTS_MACHINE "x86_64"
#define UTS_VERSION "#30 SMP Fri Apr 11 00:24:23 BST 2014"

そしてinclude/generated/utsrelease.hから:

#define UTS_RELEASE "3.14.0-v2-v"

UTS_SYSNAMEはinclude/linux/uts.hで定義できます。

#ifndef UTS_SYSNAME
#define UTS_SYSNAME "Linux"
#endif

またはmakefileの#defineとして

最後に、ホスト名とドメイン名は/proc/sys/kernel/{hostname,domainname}で制御できます。 UTSによる名前は次のとおりです。

# hostname
hell
# unshare --uts /bin/bash
# echo test > /proc/sys/kernel/hostname 
# hostname
test
# exit
# hostname
hell

おすすめ記事