如何使用 SFTP 安全地传输文件(2)

在目前发布的 Ubuntu 系统(至少是 14.04-15.10 )上运行的 OpenSSH 版本有一个 BUG ,执行以上命令会报错。使用有BUG 的 OpenSSH 时,在执行上述命令传输文件到服务器上时,会报这样的错:Couldn't canonicalise: No such file or directory

要解决这个问题,可以输入mkdir local_directory_name在远程系统上先新建目标目录。这样之后,执行上面的命令应该就不会报错了。

在我们下载和上传文件时使用到一个大家熟知而且很有用的工具——“ df ”命令,和其他命令行里工作方式相同。通过它,你可以检查是否有足够的空间来完成你想要传输的文件:

df -h

Size Used Avail (root) %Capacity 19.9GB 1016MB 17.9GB 18.9GB 4%

请注意!这个命令没有对应的 ldf ,但我们可以使用“ ! ”这个命令达到相同目的。(说到这里,想起 LinuxStory 有一篇文章《 Linux 命令行下” ! ”的十个神奇用法》,很不错,推荐给没看到的小伙伴,点击这里获取。)

这个“ ! ”(半角叹号)命令把我们带回到本地 Shell ,在这里可以运行所有在我们本地系统可用的命令。通过输入下面命令来检查我们的硬盘使用情况:

!
df -h

Filesystem Size Used Avail Capacity Mounted on /dev/disk0s2 595Gi 52Gi 544Gi 9% / devfs 181Ki 181Ki 0Bi 100% /dev map -hosts 0Bi 0Bi 0Bi 100% /net map auto_home 0Bi 0Bi 0Bi 100% /home

像这样,任何其他的本地命令都会如你期望的那样有效。返回 SFTP 会话,输入:

exit

现在,你应该就能看到 SFTP 提示符又回来了

其实还可以不退出 SFTP Shell 执行本地主机命令,如果你在 VIM 里面执行过 Shell 指令,我想你应该明白什么意思。

使用 SFTP 进行简单的文件操作

SFTP 允许你执行基本的文件维护类型,在有文件系统的时候很有用。

例如,你可以使用下面命令更改远程系统上的文件所有者:

chown userID file

请注意,和系统“ chmod ”命令不同,这个 SFTP 命令不接受用户名,取而代之的是用户的 UID 。不幸的是,没有简便的方法通过 SFTP 接口得到相应的 UID 。

这个棘手的问题可以使用这个命令解决:

get /etc/passwd !less passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh . . .

请注意,是“ ! ”而不是“ l ”,这和之前的“ l ”前缀不一样,使用它我们可以像在 VIM 里面一样的方式执行本地 Shell 指令。之前就已经在本地“ df ”命令上使用过。

UID 会出现在文件中的第三列,通过冒号界定。

同样,我们可以更改文件属组:

chgrp groupID file

再次提醒,想要得到远程系统的 GID 也不是那么简单的。我们可以用同样的方式来解决:

get /etc/group !less group root:x:0: daemon:x:1: bin:x:2: sys:x:3: adm:x:4: tty:x:5: disk:x:6: lp:x:7: . . .

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/58723f9e3e239fde8d0efebeb5178aa9.html