tartarus's bolg tartarus's bolg
  • Linux and Unix Guide
  • CMake
  • gcc
  • gdb
  • bash
  • GNU Make
  • DDCA-ETH
  • CS106L
  • CS144
  • NJU PA
  • NJU OS(jyy)
  • C
  • C++
  • Python
  • reveal-md
  • LaTex
  • Paper Reading
  • TBD
  • Linux and Unix Guide
  • CMake
  • gcc
  • gdb
  • bash
  • GNU Make
  • DDCA-ETH
  • CS106L
  • CS144
  • NJU PA
  • NJU OS(jyy)
  • C
  • C++
  • Python
  • reveal-md
  • LaTex
  • Paper Reading
  • TBD
  • pdb

  • make

  • cmake

  • Linux and Unix

    • Linux Tool介绍
    • Useful Linux Tool
      • cat
      • ssh
      • rsync vs scp
    • regular-expression
    • Basic-Shell-Script
    • Using-Structured-Commands
    • More-Structured-Commands
    • Handling-User-Input
    • Presenting-Data
    • Script-Control
  • Basic_Software
  • Linux and Unix
tartarus
2023-04-09
目录

Useful Linux Tool

# cat

cat 很简单,这里给出一个表即可:
cat

# ssh

基础功能:
使用 ssh 连接到服务器

高级功能:
本地端口转发 (Local Port Forwarding) 和远程端口转发 (Remote Port Forwarding):

  • 本地端口转发意味着客户端开始监听一个新的端口号 (如下图所示):

    • 在下图中意味着客服端 (Client) 除了监听端口 (8080) 外,还监听服务器 (图中的 Server) 的 80 端口。

    • 图中箭头的朝向指的是客户端请求 8080 端口时,请求的流向,请求最终会到达 Server 的 80 端口。

local forwarding
  • 远程端口转发意味着服务器端开始监听一个新的端口号 (如下图所示):

    • 在下图中意味着服务器 (图中的 gateway) 除了监听端口 (8080) 外,还监听的 client 的 80 端口。

    • 图中箭头的朝向指的是服务器端请求 8080 端口时,请求的流向,请求最终会到达 Client 的 80 端口。

    • 注意在服务器端的 /etc/sshd/sshd_config 文件中,需要设置 GatewayPorts yes 使得服务器能够监听客服端的端口。

remote forwarding

何时使用本地端口转发? 何时使用远程端口转发?

看 web server 在哪一端:

  • 如果在本地端,那么就应该使用远程端口转发,使得远程能够获取到本地的服务。
  • 如果在远程端,那么就应该使用本地端口转发,使得本地能够获取到远程的服务。(也可以通过 vscode ssh 连接到 remote, 然后在远程启动 web server 时,vscode 会自动询问是否需要进行端口转发)

使用场景举例:
场景一 (远程端口转发): 比如我的博客 vdoing (opens new window) 在书写时,使用 yarn dev 命令进行预览,VuePress dev server 会预览动态部署到 localhost 的 8080 端口,此时,如果我需要在另一个服务器 (tartarus) 上通过浏览器上查看进行预览,就可以使用远程端口转发,因为此时相当于远程需要监听本地的 8080 端口:

# address为远程端的ip地址, -p9900是因为只有一个公网IP,使用了软路由的端口转发功能,转发到tartarus的22端口(ssh的端口)
ssh -R 8350:localhost:8080 tartarus@address -p 9900
1
2

然后在远程端的浏览器上使用 http://0.0.0.0:8350 即可访问到博客预览。

场景二 (本地端口转发): 将在远程端运行的 reveal-md 的浏览器预览,在客户端的浏览器上使用。
使用本地端口转发,相当于本地端除了需要监听 8080 端口外,还监听了远程端的 1948 端口。

# 第一个localhost可省略
ssh -L localhost:9756:localhost:1948 tartarus@address -p 9900
1
2

然后在本地浏览器上使用 http://localhost:9756

# rsync vs scp

参考资料:stackoverflow: rsync vs scp (opens new window)

  • 性能对比

    • scp : 读取源文件并将其写入目标文件,它执行一个简单的复制,常用于网络复制。(也可以进行本地复制,但是本地复制 cp 更常用)

    • rsync : 读取源文件并将其写入目标文件,使用增量传输算法,复制速度快。

  • 复制途中的中断处理

    • scp : 如果文件复制过程中因为网络原因发生中断,无法进行恢复。

    • rsync : 如果文件复制过程中因为网络原因发生中断,可以进行恢复 (需要使用命令选项 -P )

  • 使用举例:

    • scp : (如果使用 ssh 连接到服务器的 22 端口,则不需要 - P 选项。)
    # 将sever的~/file文件复制到本地当前目录下的file文件
    scp -P port_number remote_user_name@ip_address:~file ./file
    
    # 将本地的file文件复制到server的~/file文件
    scp -P port_number ./file remote_user_name@ip_address:~/file 
    
    1
    2
    3
    4
    5
    • rsync : 使用 ssh 作为管道进行传输,举例如下:
    # 将sever的~/file文件复制到本地当前目录下的file文件
    rsync -aP --rsh='ssh -P port_number' remote_user_name@ip_address:~/file ./file
    
    # 将本地的file文件复制到server的~/file文件
    rsync -aP --rsh='ssh -P port_number' ./file remote_user_name@ip_address:~/file
    
    1
    2
    3
    4
    5

    复制一个 55MB 的文件消耗时间的对比: scp 需要大约 2s, rsync 需要大约 1s.

    $ time rsync -aP --rsh='ssh -p 9900'  tartarus@114.214.175.230:/home/tartarus/record.zip .
    record.zip
       57896417 100%  409.00MB/s    0:00:00 (xfer#1, to-check=0/1)
    
    sent 53308 bytes  received 30535 bytes  55895.33 bytes/sec
    total size is 57896417  speedup is 690.53
    rsync -aP --rsh='ssh -p 9900'  .  0.25s user 0.03s system 26% cpu 1.052 total
    
    $ time scp -P 9900   tartarus@114.214.175.230:/home/tartarus/record.zip .
    record.zip                                                                                                               100%   55MB  38.5MB/s   00:01    
    scp -P 9900 tartarus@114.214.175.230:/home/tartarus/record.zip .  0.23s user 0.30s system 25% cpu 2.035 total
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

提示

  • 使用 rsync 进行复制时建议带上 -a 参数 (-a 等价于 -rlptgoD),这样除了可以复制文件夹外,还保留了权限,修改时间,文件 / 文件夹所属 group/user 等信息。
  • 使用 rsync -a 代替 cp
上次更新: 12/27/2023, 8:55:47 AM
Linux Tool介绍
regular-expression

← Linux Tool介绍 regular-expression→

Theme by Vdoing | Copyright © 2023-2023 tartarus | CC BY-NC-SA 4.0
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式