0%

tags: #linux #scp

linux复制文件和文件夹可以使用 scp命令来进行操作。

其实也可以使用[[lszrz]]来进行传输文件,但是需要进行安装。考虑自带的[[openssh]]来进行传输文件。

用法

1
2
3
4
5
6
scp 参数  源文件 目标文件

➜ /tmp scp
usage: scp [-346BCpqrTv] [-c cipher] [-F ssh_config] [-i identity_file]
[-J destination] [-l limit] [-o ssh_option] [-P port]
[-S program] source ... target

常用参数:

1
2
3
4
-r 递归操作 (支持目录) 


-C 压缩

本地到远程

1
2
3
4
5
6
7
scp local_file remote_username@remote_ip:remote_folder 
或者
scp local_file remote_username@remote_ip:remote_file
或者
scp local_file remote_ip:remote_folder
或者
scp local_file remote_ip:remote_file

实例:
![[Pasted image 20220414154531.png]]

远程到本地

1
2
3
4
5
6
7
scp remote_username@remote_ip:remote_folder local_file
或者
scp remote_username@remote_ip:remote_file local_file
或者
scp remote_ip:remote_folder local_file
或者
scp remote_ip:remote_file local_file

![[Pasted image 20220414155020.png]]

1
2
3
4
5
6
7
8
➜  scp_test tree                        
.
├── dir
│?? └── test.txt
├── test.txt
└── xxxtmp.log

1 directory, 3 files

今天看了下源码才发现自己根本就没想到里面对于null empty的处理。 也没有想到当只有一个元素的时候是join是如何处理的。

源码见:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public static String join(final Iterator<?> iterator, final String separator) {

// handle null, zero and one elements before building a buffer
if (iterator == null) {
return null;
}
if (!iterator.hasNext()) {
return EMPTY;
}
final Object first = iterator.next();
if (!iterator.hasNext()) {
return Objects.toString(first, "");
}

// two or more elements
final StringBuilder buf = new StringBuilder(STRING_BUILDER_SIZE); // Java default is 16, probably too small
if (first != null) {
buf.append(first);
}

while (iterator.hasNext()) {
if (separator != null) {
buf.append(separator);
}
final Object obj = iterator.next();
if (obj != null) {
buf.append(obj);
}
}
return buf.toString();
}

可以看到 对于null empty,和单元素的Iterator迭代器都是有特殊处理的,直接返回null,返回空字符串,直接toString单元素。 考虑的场景其实是极为周全的。但是有个场景没有过滤处理 那就是空字符 也会进行拼接。

1
2
3
4
5
6
7
8
9
10
11
    public static void main(String[] args) {
ArrayList<String> strings = Lists.newArrayList(" ");
strings.add(" ");
strings.add(" ");
strings.add(" ");
System.out.println(org.apache.commons.lang3.StringUtils.join(strings, ","));
}

输出:

, , ,

运维给我们服务部署的时候,https证书安错了,导致浏览器可以通过访问(强制忽略https验证)
但是通过curl wget 无法访问,直接报错,对应的证书出错

又比较急调用接口,这个怎么办呢??

可以通过参数忽略校验https

Read more »

Mybatis属于半自动ORM,在使用这个框架中,工作量最大的就是书写Mapping的映射文件,由于手动书写很容易出错,我们可以利用Mybatis-Generator来帮我们自动生成文件。

Read more »

在自己128M的小内存VPS上安装了锐速和SSR,可能内存比较小的问题吧,老是用用shadowsocks的然后进程就挂了,导致无法使用,郁闷。

然后就到网上找了一些资料,通过crontab定时任务刷新的情况,使shadowsocks停止服务之后自动重启服务,避免无法使用的尴尬局面出现。

Read more »

《Thinking in java》这本书一直以来都有Java圣经的称号,可以看出这边书在Java工作者当中的心目中的地位,阅读之后必要有笔记,不然随着时间的流逝,一定会忘得一干二净。

开始分章节进行学习,实在是怕内容太多打击自己信息。

下面是第二章的笔记,第一章的笔记后面补吧,没有记已经忘得差不多了,回头重读一遍。
第二章的主要内容只有一个-一切皆对象。

Read more »

git可以说越来越流行了,GitHub上面有很多开源项目可供参考学习,如果git都不会用,就比较尴尬了。

git的学习其实很简单的。

下面这个伯乐在线的博文零基础教你如何使用git,希望对你的使用有帮助。

推荐!手把手教你使用Git

这个正常来讲,你跟着这个教程手动操作一遍,基本上对于简单的git操作就会了,但是git操作的精髓就在于使用命令行进行操作。

git的命令行有很多,我这边引用了阮一峰的博文日志,常用 Git 命令清单。有兴趣可以看下。

Read more »