我正在尝试在 Debian 上的主目录中复制一个命令 ( istioctl
),以便我可以随时使用它,因为它会自动添加到我的 PATH 变量中。
我尝试过(“link1”是指向包含 istioctl 的硬盘驱动器的符号链接):
TestUser@ComputerName:~$ cp ~/link1/istio-1.12.2/bin/istioctl ~/cmd
和
TestUser@ComputerName:~$ cp ~/link1/istio-1.12.2/bin/istioctl ~/bin
在此之前这两个目录都不存在~
。至少ll
并ls
没有向他们展示。
但这就是我得到的:
TestUser@ComputerName:~$ ll ~
total 171856
-rwxr-xr-x 1 TestUser users 87990272 Jan 24 19:47 bin
-rwxr-xr-x 1 TestUser users 87990272 Jan 24 19:50 cmd
lrwxrwxrwx 1 TestUser users 38 Jan 13 18:16 link1 -> /some/path1
lrwxrwxrwx 1 TestUser users 39 Jan 13 18:10 link2 -> /some/path2
lrwxrwxrwx 1 TestUser users 38 Jan 13 18:17 link3 -> /some/path3
lrwxrwxrwx 1 TestUser users 38 Jan 13 18:15 link4 -> /some/path4
lrwxrwxrwx 1 TestUser users 38 Jan 13 18:15 link5 -> /some/path5
TestUser@ComputerName:~$
TestUser@ComputerName:~$ ll ~/bin
-rwxr-xr-x 1 TestUser users 87990272 Jan 24 19:47 /home/TestUser/bin
TestUser@ComputerName:~$
TestUser@ComputerName:~$ ll ~/cmd
-rwxr-xr-x 1 TestUser users 87990272 Jan 24 19:50 /home/TestUser/cmd
我不明白为什么cmd
和bin
文件夹会这样,以及为什么它们不包含该文件。
还尝试过root
:
root@ComputerName:~# cp ~/link1/istio-1.12.2/bin/istioctl /home/TestUser/bin
一样。
答案1
您错误地认为该cp
命令会在目标位置创建一个目录,然后将源文件放入该目录中。它不是这样工作的——要将源文件放入目标目录,该目录必须已经存在;否则,cp
只会创建一个目的地文件那个名字的。
man cp
这种行为在(和其他地方)中有描述cp 的 POSIX 标准:
cp [-Pfip] source_file target_file
cp [-Pfip] source_file... target
第一种概要形式由两个操作数表示,这两个操作数都不是目录类型的现有文件。 cp 实用程序应将 source_file ... 的内容复制到 target_file 指定的目标路径。
第二种概要形式由两个或多个操作数表示,其中未指定 -R 选项并且第一种概要形式不适用。如果任何 source_file 是目录类型的文件,如果 target 不存在,或者如果 target 未命名目录,则应为错误。 cp 实用程序应将每个 source_file ... 的内容复制到由 target 串联命名的目标路径,如果 target 不以 结尾,则为单个字符,以及 source_file 的最后一个组成部分。
本质上,您需要cp source-file destination-file
或cp source-file pre-existing-directory
。
为了达到你想要的目的,mkdir ~/bin
或者mkdir ~/cmd
和然后 cp ~/link1/istio-1.12.2/bin/istioctl ~/bin
。听起来您可能已将 $HOME 目录添加到您的 PATH 中。这是合法的,但不太常见。更常见的是将~/bin
或~/cmd
目录添加到您的 PATH 中。确保您已添加那目录到您的 PATH 才能成功。