常用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只建议内网测试环境使用。