有没有一种方法来定义主机别名(如在/etc/hosts )在每个用户的基础上,即在一个文件/ /home/user/.hosts / user /etc/hosts ?
我的主要目标是通过我的小局域网中的机器之间的rsync轻松共享主机别名。 由于没有可靠的机器总是连接,DNS服务器不是一个选项(对吗?)。
谢谢。
更好的解决scheme是安装Avahi和libnss-mdns,然后使用HOSTNAME.local地址。
这些名字不是每个用户,但是可以解决你所说的在局域网内为所有机器设置通用名称的目的。
Linux的glibc实现不能这样做。
但是你可以用一个nss库来扩展它。 这很容易写,因为你可以把libc的相关部分放在nss_files目录中
http://ftp.gnu.org/gnu/glibc/glibc-2.5.tar.bz2
例如
然而,这将是一个相当奇怪的非标准的事情。
请参阅https://github.com/figiel/hosts ,了解如何完成您的要求。
这是一个小型库,通过LD_PRELOAD加载,并重写gethostbyname()和程序用于DNSparsing的几个相关函数。 它适合我。 我发现唯一的警告是,Chrome浏览器不使用本机DNSparsing,而是实现自己的DNS客户端。 要解决这个问题,你需要禁用Chrome的DNS客户端 。
如果你有两台机器,大部分时间你可以站起来BIND在他们每一个,使他们的DNS服务器..或得到其中之一( http://www.marvell.com/products/embedded_processors/开发人员/ kirkwood / sheevaplug.jsp )。
使用BIND来提供您始终在DNS上。
正如本页面上的其他答案所描述的那样,有些方法可以实现类似的function,但是:
不,不像“ /etc/hosts ”这样的“per-user”文件,或者其他任何方式来覆盖GNU / Linux中的非特权用户的默认名称parsing。
编写一个脚本来确定哪些主机已经启动,然后为以下rsync命令设置主机名似乎更容易。 像这样的东西
#!的/ usr / bin / sh的
HOST = “无”
TESTFILE = / TMP / testfile的。$$
触摸$ TESTFILE
因为我在hosta hostb奥利维亚
做
scp $ TESTFILE $ i:/ tmp
如果[$? -eq 0]
然后
HOST = $ I
科幻
DONE
RM $ TESTFILE
如果[$ HOST!=“none”]
然后
echo $ HOST已启动
rsync -av --rsh = ssh文件$ HOST:/ dest
其他
回声“找不到主机”
出口1
科幻
这是未经testing的,并有假设,所以你将不得不修改它以适应。