文章内容概要:
scp使用;
lsof使用;
(包括相关的参数和个人运行截图展示以及结果的分析)
scp命令:
Linux下远程拷贝文件,和cp命令有些类似(cp是在本机下进行拷贝)。也不会导致磁盘的IO非常高,所以,还是推荐使用。
重要: scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。linux的scp命令可以在linux服务器之间复制文件和目录。所以,Linux和Windows之间传输文件的时候,就得使用ftp工具咯~
重要参数:
-r:递归的复制整个目录;
scp 参数 源端 目标端 ;//将源端内容拷贝到目标端
如果源端或者目标端不是当前主机,需要加上 这样写:用户名@IP:路径(用户名可以省),这样执行完这条命令之后需要验证用户密码,如果前边没有写用户名的时候,执行完命令的时候需要输入用户名和密码 。
1.本地文件拷贝到远程:
scp 本地文件的路径 远程用户名@IP:路径
2.远程文件拷贝到本地:
scp 远程用户名@IP:路径 本地的存放路径
由于此时此刻进行命令学习的我只有一个centos主机,所以就使用scp命令自己给自己拷贝呗(cp命令可以解决,但是今天为了学习scp才这么做的),之后scp使用的情况将会是可以互相ping通的主机之间通信(互发文件等)。
将~/code目录拷贝到~/test目录下:
红色方框中是我centos的IP地址,执行之后需要输入密码,运行OK,但是如果是拷贝到别的主机,还需要问你是否要连接的问题。
执行之后的结果:
当然 scp的参数不止有-r,还有别的参数 。
-4:只使用IPv4寻址;
-6:只使用Ipv6寻址;
-l limit ;限定用户传输时的带宽;
-p:保留原文件的atime,ctime,mtime。
上述没有加-p参数之后的执行结果:我们随便打开 code下的一个文件,执行stat hello.cpp
这里可以看到,3个时间都是刚刚执行scp的时间(系统时间不准了~~)
关于3个时间 的解释,前边的文章已经分享过了,这里总结:
只要读取文件atime就会改变;
修改文件的内容会导致mtime的改变,但是mtime的改变会导致ctime的改变(文件的size等等信息已经发生改变了);
修改文件的权限或者所有者的信息等等会改变ctime;
-P port:指定数据传输使用到的端口号;
-c cipher:以cipher将数据进行加密,提高了传输速度:
直接执行这个命令可能会报错,提示:不认识这个arcfour,此时解决办法:
/etc/ssh/sshd_config中加这条语句:
Ciphers 3des-cbc,blowfish-cbc,cast128-cbc,arcfour,arcfour128,arcfour256,aes128-cbc,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com
-C:数据压缩进行传输;
其他的参数,可能目前我还是很少用到吧,后续用到再补充吧~
lsof命令:
列出系统当前打开的文件,由于Linux下一切皆文件,所以,这个命令不仅可以查看当前真正打开的文件,还可以访问网络连接和硬件(因为TCP或者UDP协议系统都在后台为应用程序分配了一个fd,该fd是应用程序与操作系统进行 通信的接口);
使用:lsof 参数 文件
文件可以是:普通文件;目录文件;字符设备或者块设备文件;管道(命名管道和匿名管道);链接库;等其他类型的文件;
执行lsof:
由于直接执行,显示的内容过于多,所以使用管道 和 head命令 取到前10行,这样也可以看到每列的属性信息;
输出信息的含义:
COMMAND:进程名称;
PID:进程的ID;
USER:进程的所有者;
FD:文件描述符;(一直以为文件描述符fd就是非负的小整数,0,1,2分别表示标准输入标准输出和标准错误,原来他还可以有那么多信息)
cwd:程序的当前工作目录;
txt:该类型的文件是程序代码,如应用程序二进制文件本身;
rtd:root 目录;
mmap:内存映射设备;
TYPE:文件的类型;
DIR:目录;
CHR:字符类型;
BLK:块类型;
UNIX:UNIX 套接字;
FIFO:队列;
IPv4:网络协议套接字;
DEVICE:指定磁盘的名称;
SIZE:文件的大小;
NODE:索引节点(文件在磁盘上的标识);
NAME:打开文件的确切名称;
参数:
-a:列出打开文件存在的进程;
-c:列出指定进程名所打开的文件;
-i 《条件》:符合条件的进程(4、6、协议、:端口等)
IPv4或者Ipv6协议打开的文件:
-p PID 列出指定进程号所打开的文件;
1号进程所打开的文件:
-d fd 列出指定fd所打开的文件;
列出文件描述符为2的文件:
+d 目录:列出指定目录下打开的文件
列出当前目录下被打开的文件:
-u 用户名:列出某个用户打开的文件:
列出root用户打开的文件:
+D:递归列出指定目录下打开的文件: