我正在将数据从本地计算机复制到计算引擎实例:
gcloud compute copy-files /Users/me/project/data.csv instance-name:~/project
该命令运行并完成:
data.csv 100% 74KB 73.9KB/s 00:00
但是,我在计算引擎实例的任何地方都找不到它。它在~/project
文件夹中不可见。是静默失败还是我在错误的地方寻找?
答案 0 :(得分:2)
最有可能的是,您正在查找错误的$HOME
。确保你正在寻找
在您要复制的同一用户的主目录中(它将是
如果以前不存在,则在远程主机上创建。
如果您在调用copy-files
时未指定任何远程用户,则gcloud
将尝试确定要登录的用户。如果,你可以看到这个
你看一下gcloud
源代码:
# $CLOUD_SDK_ROOT/lib/surface/compute/copy_files.py
# [...]
user_host, file_path = arg.split(':', 1)
user_host_parts = user_host.split('@', 1)
if len(user_host_parts) == 1:
user = ssh_utils.GetDefaultSshUsername(warn_on_account_user=True)
instance = user_host_parts[0]
else:
user, instance = user_host_parts
# [...]
在您的情况下,由于您没有指定任何用户,GetDefaultSshUsername()
将被调用,其任务是找到一个有效的SSH用户名
使用。为此,它将选择符合以下条件的第一个选项
顺序:
$USER
,如果它在GCE特定的约束下有效,即,
ASCII字符不包含空格。gcloud
帐户中提取用户名
in(您可以通过运行gcloud auth list
)源代码再次告诉我们最终的事实:
# $CLOUD_SDK_ROOT/lib/googlecloudsdk/api_lib/compute/ssh_utils.py
def GetDefaultSshUsername(warn_on_account_user=False):
# [...]
user = getpass.getuser()
if not _IsValidSshUsername(user):
full_account = properties.VALUES.core.account.Get(required=True)
account_user = gaia_utils.MapGaiaEmailToDefaultAccountName(full_account)
if warn_on_account_user:
log.warn('Invalid characters in local username [{0}]. '
'Using username corresponding to active account: [{1}]'.format(user, account_user))
user = account_user
return user
所以,现在我们知道如何大致选择远程用户名的过程
我的有根据的猜测是,您使用了一个复制了data.csv
文件
与稍后检查远程实例的用户不同的用户
如果文件在那里,因为默认情况下他们会降落在他们的文件上
各自和不同的$HOME
目录。