请解释一下这个Linux命令

cat '>>' '~/.ssh/authorized_keys2' < ~/.ssh/id_rsa.pub
请帮忙具体解释下上面的命令。
谢谢!!

你好。

首先,你这条命令是错误的。会报错:“cat: >>: No such file or directory”

正常的命令应该是:

cat >> '~/.ssh/authorized_keys2' < ~/.ssh/id_rsa.pub

也就是说,把 >>的单引号去掉才对。当然,前提是你系统中存在 ~/.ssh/authorized_keys2 和 ~/.ssh/id_rsa.pub 文件。


现在来回答你的问题:

这条命令的作用是:
将 ~/.ssh/id_rsa.pub 的内容,追加到 ~/.ssh/authorized_keys2' 文件中。


帮你扩展一下:

cat >> 是 cat命令比较经典的用法,一般用于免交互的向文本中写入多行内容。

最常见的用法,除了你列的这条指令外,还有就是这样:

cat >> /etc/yum.repos.d/test.repo << EOF
[test]
name=vip6repo
baseurl=http://test.vip.com/testrepo_6
gpgcheck=0
enabled=1
priority=20
EOF

还有这样:

(
cat <<EOF
#! /bin/bash
# ......
所有内容
EOF
) >/tmp/b

谢谢

将'~/.ssh/authorized_keys2' 的结果输出结果重定向到~/.ssh/id_rsa.pub

这应该是一个错误命令

实际作用是打印出两个文件的内容:
文件1:'>>'
文件2:~/.ssh/authorized_key2

大胆的猜测下,这条命令应该是

cat  ~/.ssh/id_rsa.pub  >>   ~/.ssh/authorized_keys2

也就是将 ~/.ssh/id_rsa.pub 这个文件的内容,追加到~/.ssh/authorized_keys2文件的末尾
因为~/.ssh/id_rsa.pub记录的是你电脑的ssh公钥,而通常authorized_keys文件是ssh用来进行key识别的,不过不知道为啥要自己识别自己...

这个命令也可以写成

cat  >>  ~/.ssh/authorized_keys2  < ~/.ssh/id_rsa.pub

注意没有单引号,在没有单引号的情况下,>><作为重定向符,cat命令会打印标准输入或者文件的内容到标准输出,所以上面的命令意思是cat将他的标准输入的内容(~/.ssh/id_rsa.pub)打印到标准输出(重定向到~/.ssh/authorized_keys2文件末尾)

[root@localhost test]# cat 123.txt
123

[root@localhost test]# cat 456.txt
456

[root@localhost test]#
[root@localhost test]# cat '>>' '123.txt' < 456.txt
cat: >>: No such file or directory
123

[root@localhost zte]#
亲测。

首先'>>'的单引号要去掉,变成cat >> '~/.ssh/authorized_keys2' < ~/.ssh/id_rsa.pub
这个命令等同于cat ~/.ssh/id_rsa.pub >> '~/.ssh/authorized_keys2'
就是把文件~/.ssh/id_rsa.pub的内容append(附加)到文件'~/.ssh/authorized_keys2'的尾部