我在网易工作的时候,曾经有段时间负责大数据平台的开发和维护,每天使用shell操作Linux服务器,也就是在那段时间,我深入了解了一下shell。后来,心血来潮,我写了几篇关于shell的小故事,大家看了感觉很有意思,所以我就增加内容,形成了一本小册子。
毕竟shell的内容并不多,可以挖掘的地方不太多,所以在《趣谈Shell》里面有十分出彩的内容,也有十分牵强的内容,大家不要抱有太高的期望,那怕学到一两个命令,也算是值了。
下面这个问题来自于知乎的菜鸟误解:
最近想学学 Linux 下的 shell,基础知识都看完了,想做点东西,但是绞尽脑汁还是没想起来做点什么,最后我也查了一下 shell 的作用,到现在还没有一个很好的答案,都说 shell 可以直接与计算机交互,但是我想其他语言不也能方便的与计算机进行交互吗?shell 实现的功能,其他语言也能实现,可能会稍微复杂一些,难道 shell 就这点优势吗?望解惑!感激不尽。
下面是高赞答案:
从这个问题就能看出来,题主对shell的定位没有理解。题主不应该拿shell跟其他语言来对比,更不应该有这样的质疑:shell 实现的功能,其他语言也能实现,可能会稍微复杂一些,难道 shell 就这点优势吗?
关于shell的定位,应该从它的名字说起,操作系统分为内核(kernel)和外壳(shell)。也就是说shell的定位属于操作系统。题主拿操作系统的东西去跟编程语言去对比,明显不对等,门不当户不对啊。
操作系统的作用是什么呢?是管理计算机硬件与软件资源的计算机程序。那么shell的作用也是如此,即是管理计算机硬件与软件资源。
正如题主所说,“最近想学学 Linux 下的 shell,基础知识都看完了,想做点东西,但是绞尽脑汁还是没想起来做点什么”。因为我们平时很少会去管理计算机硬件和软件的,所以题主找不到shell的用武之地,这很正常。
shell是用来管理计算机硬件与软件资源的,所以shell就像一个胶水,能粘合其他的各种语言,实现软件资源的配合和协作。
这是一个非常经典且现实的问题。我的结论很明确:非常有必要,而且在大模型时代,Shell(尤其是Bash)的重要性不降反升,它是你驾驭AI的“方向盘”,而不是可以被取代的“打字机”。
如果你把大模型当作“大脑”,那么Shell就是你的“双手”。大脑想出再精妙的计划,没有双手去执行,也只是空谈。大模型本身是一个静态的权重文件,它无法直接操作文件、安装软件、调用API或管理服务器。所有让大模型“动起来”的动作,最终都要翻译成Shell命令。
大模型训练和推理极度依赖Linux服务器(几乎100%)。无论你用的是PyTorch、DeepSpeed还是vLLM,官方文档里的调试命令、分布式启动(torchrun)、环境变量设置(export CUDA_VISIBLE_DEVICES),全是Shell。
如果你不会Shell,在云端租用GPU服务器时,连看报错日志(tail -f)都费劲,更别提排查OOM(显存溢出)问题了。在这个领域,Shell就是“工地上的安全帽”——不戴也能进,但寸步难行。
你不需要成为Shell编程专家(像运维工程师那样写几千行的 configure 脚本),但你需要掌握 “20% 的核心高频命令”:
你的学习策略可以是这样:
不需要死记硬背。你需要做的只是看懂基本命令。当遇到复杂任务时,直接对AI说:“我想在Linux下找出所有大于100M的日志文件,并删除7天前的,请给我Shell命令,并加注释。” AI会给出命令,而你因为懂基础语法,能看懂注释并确认安全,然后执行。这就是大模型时代学习Shell的最佳姿势:作为命令的“审核官”而非“打字员”。
下面我把 “20%核心高频命令” 整理成一份速查表发给大家,方便大家随时查阅,这样遇到问题时可以快速对照。需要说明的是,这份速查表我按使用场景来组织,而不是按字母顺序。你不需要背下来,收藏这篇文章,遇到任务时回来对照着看就行。
| 命令 | 作用 | 常用示例 |
|---|---|---|
pwd | 显示当前所在路径 | pwd → /home/user/project |
ls | 列出目录内容 | ls -la(显示所有文件+详细信息) |
cd | 切换目录 | cd ..(上级目录),cd ~(用户主目录) |
mkdir | 创建目录 | mkdir -p a/b/c(一次性创建多级目录) |
touch | 创建空文件 / 更新文件时间戳 | touch main.py |
cp | 复制文件或目录 | cp -r source/ dest/(递归复制目录) |
mv | 移动 / 重命名 | mv old.txt new.txt(重命名) |
rm | 删除(危险!) | rm -rf folder/(强制递归删除,慎用!) |
| 命令 | 作用 | 常用示例 |
|---|---|---|
cat | 查看整个文件内容 | cat log.txt |
less | 分页查看(大文件用这个) | less huge.log(按 q 退出) |
head | 查看文件开头N行 | head -100 log.txt(前100行) |
tail | 查看文件末尾N行(看日志常用) | tail -f log.txt(实时追踪新增内容) |
grep | 搜索文本(核心技能) | grep "ERROR" app.log(查找包含ERROR的行)grep -r "TODO" ./(递归搜索当前目录下所有文件) |
find | 按条件找文件 | find . -name "*.py"(所有Python文件)find . -size +100M(大于100MB的文件) |
| 命令 | 作用 | 常用示例 |
|---|---|---|
|(管道) | 把前一个命令的输出传给后一个命令 | cat log.txt | grep "ERROR" | head -10 |
> | 重定向输出到文件(覆盖) | echo "hello" > file.txt |
>> | 重定向输出到文件(追加) | echo "world" >> file.txt |
sed | 替换/删除文本(流编辑器) | sed 's/旧/新/g' file.txt(全局替换) |
awk | 提取列 / 格式化 | awk '{print $1, $3}' data.txt(打印第1和第3列) |
| 命令 | 作用 | 常用示例 |
|---|---|---|
ps | 查看当前运行的进程 | ps aux(所有进程)ps aux | grep python(找Python进程) |
kill | 终止进程 | kill -9 PID(强制终止,-9是核弹级) |
top / htop | 实时查看系统资源占用 | htop(更直观,需要安装) |
netstat / ss | 查看端口占用() | netstat -tlnp(Linux查看监听端口)netstat -ano | findstr :8585(Windows) |
df | 查看磁盘剩余空间 | df -h(人类可读格式) |
du | 查看文件/文件夹大小 | du -sh *(当前目录下每个文件的大小) |
| 命令 | 作用 | 常用示例 |
|---|---|---|
chmod | 修改文件权限 | chmod +x script.sh(添加可执行权限) |
chown | 修改文件所有者 | chown user:group file.txt |
sudo | 以管理员身份执行 | sudo apt install python3(Linux安装软件) |
| 命令 | 作用 | 常用示例 |
|---|---|---|
curl | 发送HTTP请求 / 下载 | curl -O https://example.com/file.zip(下载文件) |
wget | 下载文件 | wget https://example.com/model.bin |
ping | 测试网络连通性 | ping baidu.com |
ssh | 远程连接服务器 | ssh user@192.168.1.100 |
| 命令 | 作用 | 常用示例 |
|---|---|---|
tar | 打包/解包(Linux最常用) | tar -czvf archive.tar.gz folder/(打包+压缩)tar -xzvf archive.tar.gz(解压) |
zip / unzip | Windows风格压缩 | unzip file.zip -d target/ |
| 快捷键/技巧 | 作用 |
|---|---|
Ctrl + C | 终止当前正在运行的命令 |
Ctrl + Z | 挂起当前命令(后台运行) |
Ctrl + R | 搜索历史命令(强烈推荐) |
!! | 重复上一条命令 |
!$ | 上一条命令的最后一个参数 |
Tab | 自动补全路径(多用!) |
评论专区
评论加载中...登录后即可发表评论