Skip to main content

常用shell命令

下载

使用 wget

wget 的设计初衷就是为了下载,所以默认行为非常直接。

  • 基本下载:

    wget https://example.com/file.zip
  • 指定保存的文件名 (-O):

    wget -O my_filename.zip https://example.com/file.zip

使用 curl

curl 是一个功能更强大的数据传输工具,但在下载文件时,默认会将内容打印到终端,所以你必须指定输出方式。

  • 基本下载并保持原名 (-O 大写):

    curl -O https://example.com/file.zip
  • 指定保存的文件名 (-o 小写):

    curl -o my_filename.zip https://example.com/file.zip

核心区别小贴士

功能wget 命令curl 命令
断点续传wget -c [URL]curl -C - -O [URL]
后台下载wget -b [URL]不直接支持(需配合系统命令)
下载整个网站支持(递归下载 -r不支持

温馨提示: 如果你在下载大文件时网络不稳定,建议优先使用 wget -c,它的自动重试机制通常比 curl 更省心。

文件描述符

这些符号属于 Bash 中的**文件描述符(File Descriptor, FD)**重定向操作。

在 Linux 中,系统用数字来标识打开的文件或连接:0 是标准输入(stdin),1 是标准输出(stdout),2 是标准错误(stderr)。而数字 3 及以上可以由用户自定义。

1. exec 3<> /dev/tcp/... 中的 <>

这里的 <> 表示以可读写模式打开文件或设备。

  • <:代表输入(Read)。
  • >:代表输出(Write)。
  • 3<>:意味着我们将文件描述符 3 绑定到指定的网络地址,既能从这个连接读取服务器返回的数据,也能向服务器发送指令。

2. >&3<&3 的区别

这两个符号用于将一个命令的输出或输入“嫁接”到我们自定义的描述符 3 上。

  • echo "..." >&3

    echo 本该显示在屏幕上的内容,重定向发送到描述符 3 指向的网络连接中。这里的 & 是为了告诉 Bash,后面的 3 是一个文件描述符,而不是一个名为 "3" 的普通文件。

  • cat <&3

    cat 命令从描述符 3读取数据。这通常用于接收网络连接传回的响应数据(比如下载的文件内容)。

3. exec 3<&- 是什么意思?

这表示关闭文件描述符 3

  • -:在重定向语境下代表“关闭”。
  • 3<&-:切断与目标 IP 的连接并释放描述符 3

如果不执行这一步,该连接会一直占用系统资源,直到 Shell 进程结束。在脚本编写中,这是一个良好的“清理”习惯。

总结对比

符号动作类型实际意义
3<>绑定创建一个编号为 3 的双向通信管道。
>&3写入把数据“推”进管道(发给服务器)。
<&3读取从管道里“拉”出数据(接收服务器回传)。
3<&-关闭拆除管道,释放资源。

远程服务器传输文件

1. scp(最常用,基于 SSH)

scp 适合临时传文件,语法简单,默认走 SSH 端口 22

  • 本地上传文件到远程:

    scp ./local.txt user@192.168.1.10:/home/user/
  • 远程下载文件到本地:

    scp user@192.168.1.10:/home/user/remote.txt ./
  • 上传整个目录(-r):

    scp -r ./mydir user@192.168.1.10:/home/user/
  • 指定端口(-P)和私钥(-i):

    scp -P 2222 -i ~/.ssh/id_ed25519 ./app.tar.gz user@server:/data/

2. ftp(传统方式)

ftp 可用但默认是明文传输,不建议在公网或敏感环境使用。

  • 连接服务器:

    ftp 192.168.1.10
  • 登录后常用命令:

    ls                 # 查看远程目录
    lcd /path/local # 切换本地目录
    cd /path/remote # 切换远程目录
    put local.txt # 上传单文件
    get remote.txt # 下载单文件
    mput *.log # 批量上传
    mget *.txt # 批量下载
    binary # 二进制模式(传压缩包/图片建议先执行)
    bye # 退出

3. 其他常见方法(推荐)

  • sftp(比 ftp 安全,基于 SSH):

    sftp user@192.168.1.10
    # 进入后可用 put/get/ls/cd/lcd 等命令
  • rsync(同步目录很高效,支持增量和断点续传):

    rsync -avzP ./mydir/ user@192.168.1.10:/home/user/mydir/

小结

  • 临时传文件:优先 scp
  • 长期同步目录:优先 rsync
  • 交互式文件管理:用 sftp
  • ftp 只建议内网测试环境使用。