常用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<&- | 关闭 | 拆除管道,释放资源。 |