首页 > 编程知识 正文

怎样理解充分条件的真值,对于空值理解错误的是

时间:2023-05-03 15:34:28 阅读:46319 作者:1203

当我以为我对在Linux系统上修改hostname很了解的时候,今天我遇到了一些问题。 这些问题经常给我上课。 很多知识点,fkdhy认为你已经掌握了的时候,其实你知道的还只是皮毛。 技术活着,千万不要小看它!

----------------4通过四种方式更改主机名称

假设您将hostname更改为TEST

1 .永久更改:在vim /etc/sysconfig/network下的主机名称后,将主机名称的值更改为TEST。 更改完成后,reboot必须重新启动服务以永久启用。

2 .临时更改echotest/proc/sys/kernel/hostname

3 .临时更改sysctl kernel.hostname=d B- server

临时更改主机名称测试

注意:如果在/etc/sysconfig/network中将主机名称设置为localhost或localhost.localdomain,则表示由接口/etc/hosts文件组成的本机IP地址这是由/etc/rc.d/rc.sysinit作出的逻辑判断决定的。

------------- -请参阅

实验环境

33558 www.Sina.com/redhatenterpriselinuxserverrelease 5.7 (ti kanga )可能与其他版本的Linux不同。 请以实际环境为基准。

其实我修改过好几次hostname。 通常,只需在/etc/hosts和/etc/sysconfig/network两个文件中修改相关配置即可。 但是今天我遇到了两个问题:

为什么/etc/sysconfig/network配置文件中的HOSTNAME是localhost.localdomain,但显示的HOSTNAME是po 132345806--

如何在更改33558www.Sina.com/Hostname后立即启用操作系统,而无需重新启动。

有几种方法可以修改33558www.Sina.com/Hostname吗?

问题1:hostname是否与在/etc/hosts上的配置有关?

问题2:如何查看hostname的值,以此为准?

为了让大家不相信这个现象,图中有真相。 我第一次遇到这种特殊情况的时候,也很纳闷。 谷歌只有在加上一些资料和自己的实践后才明白

问题3:

33558www.Sina.com/hostname的值原以为位于/etc/sysconfig/network中,但在此文件中hostname的位置为何,hostname的值为何? 但是为什么会出现上面的情况呢? /etc/sysconfig/network是否有其他配置式,而不是主机名称配置式? 因此,我们通过实验修改了/etc/sysconfig/network文件中的HOSTNAME为DB-Server,发现HOSTNAME的值保持不变,然后重新启动了计算机

重新启动后,原来主机名称是DB-Server。 也就是说,您修改了配置文件/etc/sysconfig/network下的主机名称以启用它。 也就是说应该有人修改了kernel.hostname。 请看下面的实验

注意:实际上/etc/init.d/network restart没有任何帮助。 只是,当时觉得必须重新启动网络服务。

在SecureCRT中创建新克隆的会话中,发现主机已从DB-Server更改为Test,但/etc/sysconfig/network的值为d B- server.local domode

但是,如果重新启动系统后hostname成为DB-Server,谷歌将阅读英文文档,hostname是Linux系统的内核参数,/proc/sys/kernel/hostname

主机系统

tname is a kernel parameter which stores hostname of the system. Its location is"/proc/sys/kernel/hostname"

       The value for this parameter is loaded to kernel by rc.sysinit file during the boot process.

      而/etc/rc.d/rc.sysinit中HOSTNAME的取值来自与/etc/sysconfig/network下的HOSTNAME,代码如下所示,至此,我们可以彻底明白了。     

HOSTNAME=`/ajdxs/hostname`    HOSTTYPE=`uname -m`   unamer=`uname -r` set -m if [ -f /etc/sysconfig/network ]; then . /etc/sysconfig/network fi if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" ]; then    HOSTNAME=localhost fi

结论

       /etc/sysconfig/network 确实是hostname的配置文件,hostname的值跟该配置文件中的HOSTNAME有一定的关联关系,但是没有必然关系,hostname的值来自内核参数/proc/sys/kernel/hostname,如果我通过命令sysctl kernel.hostname=Test修改了内核参数,那么hostname就变为了Test了。

问题2: 修改了hostname后,如何使其立即生效而不用重启操作系统。

    方法1:修改了/etc/sysconfig/network下的HOSTNAME后,然后使用echo  servername > /proc/sys/kernel/hostname。

         [root@DB-Server ~]# echo Test >/proc/sys/kernel/hostname

    方法2:修改了/etc/sysconfig/network下的HOSTNAME后,然后使用sysctl kernel.hostname命令使其立即生效

        [root@DB-Server ~]# sysctl kernel.hostname=Test2

        kernel.hostname = Test2

    方法3:修改了/etc/sysconfig/network下的HOSTNAME后,然后使用hostname命令使其生效

        [root@Test ~]# hostname DB-Server

    其实呢,这几种方式只是结合永久性修改和临时性修改hostname,使其不必重启Linux服务器,哈哈,不知道你明白没。

问题3: 修改hostname有几种方式?

    1:  hostname DB-Server                    --运行后立即生效,但是在系统重启后会丢失所做的修改

    2:  echo DB-Server  > /proc/sys/kernel/hostname       --运行后立即生效,但是在系统重启后会丢失所做的修改

    3: sysctl kernel.hostname=DB-Server                   --运行后立即生效,但是在系统重启后会丢失所做的修改

    4: 修改/etc/sysconfig/network下的HOSTNAME变量           --需要重启生效,永久性修改。

问题4: hostname跟/etc/hosts 下配置有关系吗?

      如果从我上面的实验来看,其实hostname跟/etc/hosts下的配置是没有关系的。hostname的修改、变更完全不依赖hosts文件。 其实hosts文件的作用相当如DNS,提供IP地址到hostname的对应。早期的互联网计算机数量少,单机hosts文件里足够存放所有联网计算机。不过随着互联网的发展,这就远远不够了。于是就出现了分布式的DNS系统。由DNS服务器来提供类似的IP地址到域名的对应。具体可以man hosts查看相关信息。

     Linux系统在向DNS服务器发出域名解析请求之前会查询/etc/hosts文件,如果里面有相应的记录,就会使用hosts里面的记录。/etc/hosts文件通常里面包含这一条记录

     127.0.0.1 localhost.localdomain localhost

     hosts文件格式是一行一条记录,分别是IP地址 、hostname、 aliases,三者用空白字符分隔,aliases可选。

     127.0.0.1到localhost这一条建议不要修改,因为很多应用程序会用到这个,比如sendmail,修改之后这些程序可能就无法正常运行。

     但是呢,其实hostname也不是说跟/etc/hosts一点关系都没有。在/etc/rc.d/rc.sysinit中,有如下逻辑判断,当hostname为localhost或者localhost.localdomain时,将会使用接口IP地址对应的hostname来重新设置系统的hostname。       

# In theory there should be no more than one network interface active        # this early in the boot process -- the one we're booting from.        # Use the network address to set the hostname of the client. This        # must be done even if we have local storage.        if [ "$HOSTNAME" = "localhost" -o "$HOSTNAME" = "localhost.localdomain" ] then ipaddr=$(ip addr show to 0/0 scope global | awk '/[[:space:]]inet / { print gensub("/.*","","g",$2) }')                if [ -n "$ipaddr" ]; then                        eval $(ipcalc -h $ipaddr 2>/dev/null)                        hostname ${HOSTNAME}                fi        fi

     我们来实验一下吧,修改hosts、network文件,修改后的值如下所示:

[root@localhost ~]# more /etc/hosts# Do not remove the following line, or various programs# that require network functionality will fail.::1 localhost.localdomain localhost127.0.0.1 localhost.localdomain localhost192.168.244.128 DB-Server.localdomain DB-Server[root@localhost  ~]# more /etc/sysconfig/networkNETWORKING=yesNETWORKING_IPV6=yesHOSTNAME=localhost.localdomain

     重启系统后,我们再截图看看情况:

    所以这也是有时候人们以为hostname的值跟hosts文件有关系的缘故。

   问题5: 如何查看hostname的值,以那个为准?

[root@DB-Server ~]# hostnameDB-Server[root@DB-Server ~]# more /proc/sys/kernel/hostnameDB-Server[root@DB-Server ~]# more /etc/sysconfig/networkNETWORKING=yesNETWORKING_IPV6=yesHOSTNAME=localhost.localdomain

   以那个为准呢,如果你理解了前面4个问题,那么理解这个问题就很简单了。

   

 转载自:

 https://blog.csdn.net/skybig1988/article/details/81909894

参考资料:

http://jblevins.org/log/hostname

http://www.ducea.com/2006/08/07/how-to-change-the-hostname-of-a-linux-system/

https://www.kernel.org/doc/Documentation/sysctl/kernel.txt

http://soft.chinabyte.com/os/281/11563281.shtml

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。