Unix 与远程隐藏文件的并排区别
Unix side-by-side difference with a remote hidden file
我正在研究在 2 Unix 虚拟机 运行 KSH 上执行的一系列自动测试。这些 VM 是独立的,它们具有几乎相同的 .profile 文件。我想通过启动来研究它们的差异:
tkdiff /usr/system/.profile system@{external_IP}:/usr/system/.profile
在第一个 VM 上,但它不起作用。
我想直接访问隐藏文件是不可能的。我的问题有解决方案吗?或者有替代方案吗?
您正在为 tkdiff
.
的第二个参数使用文件名约定“user@host:/path/to/file”
这种命名约定不是 Ksh 固有的,而是被一些程序理解,例如 scp
和其他程序(可以是交互式的,例如,要求远程系统或其他身份验证相关的密码问题)。
但是在 tkdiff
手册页中,它没有提到 built-in 支持该文件命名约定 userid@host:/path/to/file ,ksh
.
中也没有内置此类支持
因此您可能需要使用两个步骤,首先使用 scp
或类似的方法在本地复制远程文件,然后使用 tkdiff
,其中一个参数是本地文件,另一个是 file-just-copied,或在本地安排其他 VM 文件系统的 mount
部分,然后使用 tkdiff
和适当的参数。
显然,这两个文件都需要您的用户 ID 或 userid@host 上指定的用户可读:/path/to/file 才能正常工作。
您可以直接进行远程 ssh 比较,运行 在 cat 命令行的帮助下进行远程显示,使用此 :
tkdiff <(ssh system@{external_IP}1 'cat /usr/system/.profile') <(ssh system@{external_IP}2 'cat /usr/system/.profile')
在您的情况下,为了能够与本地 .profile 文件进行比较:
tkdiff /usr/system/.profile <(ssh system@{external_IP} 'cat /usr/system/.profile')
您是否刚刚尝试使用简单的 diff 命令行(使用 -b -B 选项删除空行和 space 比较):
diff -b -B /usr/system/.profile <(ssh system@{external_IP} 'cat /usr/system/.profile')
如果你想比较两台远程机器上的不同文件,我建议采用以下步骤:
1.比较校验和:
首先比较校验和。使用 sum
、md5sum
或 sha256sum
计算文件的哈希值。如果hash相同,那么拥有相同文件的probability就非常高了!您甚至可以通过使用 wc
.
检查文件中字符、行和单词的总数来增加该概率
$ file="/usr/system/.profile"
$ md5sum "$file" && wc "$file"
$ ssh user@host "md5sum '$file' && wc '$file'"
2。 运行 一个简单的差异
运行 使用经典命令行工具的简单差异。他们理解 POSIX 标准使用 -
作为 /dev/stdin
。这样你就可以做到:
$ ssh user@host "cat -- '$file'" | diff "$file" -
注意: 使用旧版本 tkdiff
或新版本 svn/git,由于 tkdiff 中的错误,这里可能会很棘手。如果其中一个文件可能处于版本控制之下或者您最终位于版本控制之下的目录中,它将快速抛出 svn [XXXX] file .... is not a working copy
或 file xxxx is not part of a revision control system
形式的错误。坚持 diff!
我正在研究在 2 Unix 虚拟机 运行 KSH 上执行的一系列自动测试。这些 VM 是独立的,它们具有几乎相同的 .profile 文件。我想通过启动来研究它们的差异:
tkdiff /usr/system/.profile system@{external_IP}:/usr/system/.profile
在第一个 VM 上,但它不起作用。
我想直接访问隐藏文件是不可能的。我的问题有解决方案吗?或者有替代方案吗?
您正在为 tkdiff
.
这种命名约定不是 Ksh 固有的,而是被一些程序理解,例如 scp
和其他程序(可以是交互式的,例如,要求远程系统或其他身份验证相关的密码问题)。
但是在 tkdiff
手册页中,它没有提到 built-in 支持该文件命名约定 userid@host:/path/to/file ,ksh
.
因此您可能需要使用两个步骤,首先使用 scp
或类似的方法在本地复制远程文件,然后使用 tkdiff
,其中一个参数是本地文件,另一个是 file-just-copied,或在本地安排其他 VM 文件系统的 mount
部分,然后使用 tkdiff
和适当的参数。
显然,这两个文件都需要您的用户 ID 或 userid@host 上指定的用户可读:/path/to/file 才能正常工作。
您可以直接进行远程 ssh 比较,运行 在 cat 命令行的帮助下进行远程显示,使用此 :
tkdiff <(ssh system@{external_IP}1 'cat /usr/system/.profile') <(ssh system@{external_IP}2 'cat /usr/system/.profile')
在您的情况下,为了能够与本地 .profile 文件进行比较:
tkdiff /usr/system/.profile <(ssh system@{external_IP} 'cat /usr/system/.profile')
您是否刚刚尝试使用简单的 diff 命令行(使用 -b -B 选项删除空行和 space 比较):
diff -b -B /usr/system/.profile <(ssh system@{external_IP} 'cat /usr/system/.profile')
如果你想比较两台远程机器上的不同文件,我建议采用以下步骤:
1.比较校验和:
首先比较校验和。使用 sum
、md5sum
或 sha256sum
计算文件的哈希值。如果hash相同,那么拥有相同文件的probability就非常高了!您甚至可以通过使用 wc
.
$ file="/usr/system/.profile"
$ md5sum "$file" && wc "$file"
$ ssh user@host "md5sum '$file' && wc '$file'"
2。 运行 一个简单的差异
运行 使用经典命令行工具的简单差异。他们理解 POSIX 标准使用 -
作为 /dev/stdin
。这样你就可以做到:
$ ssh user@host "cat -- '$file'" | diff "$file" -
注意: 使用旧版本 tkdiff
或新版本 svn/git,由于 tkdiff 中的错误,这里可能会很棘手。如果其中一个文件可能处于版本控制之下或者您最终位于版本控制之下的目录中,它将快速抛出 svn [XXXX] file .... is not a working copy
或 file xxxx is not part of a revision control system
形式的错误。坚持 diff!