1. Shell基础入门:从零开始的命令行之旅
第一次接触Shell时,我被那个闪烁的光标和漆黑的界面吓到了——这玩意儿怎么用?但当我真正开始学习后才发现,Shell才是程序员最忠实的朋友。它不像图形界面那样花哨,却能在关键时刻帮你解决各种棘手问题。今天我就把自己这些年积累的Shell基础用法整理出来,希望能帮你少走些弯路。
Shell本质上是一个命令行解释器,它接收你输入的命令,翻译给操作系统执行。想象一下,你是一位将军,Shell就是你的传令官,把你的指令准确无误地传达给各个部队(系统资源)。在Linux和macOS上,最常用的是Bash(Bourne Again Shell),这也是我们今天要重点讲解的对象。
提示:虽然现在有很多更现代的Shell如Zsh、Fish等,但Bash仍然是大多数系统的默认选择,学会它意味着你可以在几乎任何Linux服务器上工作。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Shell环境与基础命令
2.1 启动你的第一个Shell会话
在Linux或macOS上,打开终端应用就能进入Shell环境。你会看到类似这样的提示符:
bash复制user@hostname:~$
这个提示符包含了几部分信息:
user:当前登录的用户名hostname:计算机的主机名~:表示当前所在目录(这里是家目录)$:普通用户提示符(root用户会是#)
2.2 必须掌握的20个基础命令
这些是我每天都会用到的命令,建议你先熟练掌握它们:
-
目录操作
bash复制pwd # 显示当前目录路径 ls # 列出目录内容 cd # 切换目录 mkdir # 创建目录 rmdir # 删除空目录 -
文件操作
bash复制touch # 创建空文件或更新文件时间戳 cp # 复制文件 mv # 移动/重命名文件 rm # 删除文件 cat # 查看文件内容 -
系统信息
bash复制date # 显示系统日期时间 whoami # 显示当前用户名 uname # 显示系统信息 top # 显示进程信息 ps # 查看进程状态 -
其他实用命令
bash复制man # 查看命令手册 clear # 清屏 history # 查看命令历史 exit # 退出Shell
注意:
rm命令删除的文件通常无法恢复,特别是使用-f(强制)和-r(递归)选项时要格外小心。我曾经不小心删除了整个项目目录,那感觉...你懂的。
2.3 命令选项和参数
大多数Shell命令都支持选项(options)和参数(arguments)。选项通常以-或--开头:
bash复制ls -l # -l是选项,表示长格式显示
ls -la # 多个单字母选项可以合并
ls --all # 双横线后面是完整选项名
参数则是命令操作的对象:
bash复制cp file1 file2 # file1和file2都是参数
3. Shell进阶技巧
3.1 通配符:让命令更高效
Shell的通配符可以帮你快速匹配多个文件:
bash复制ls *.txt # 列出所有.txt文件
ls project? # 列出project1, project2等
ls [abc]* # 列出以a、b或c开头的文件
ls {file1,file2} # 同时匹配file1和file2
我曾经用rm *~删除了所有备份文件,省去了一个个查找的麻烦。但记住:通配符扩展是由Shell完成的,不是由各个命令处理的。
3.2 输入输出重定向
Shell最强大的特性之一就是可以重定向输入输出:
bash复制command > file # 将输出重定向到文件(覆盖)
command >> file # 将输出追加到文件
command < file # 从文件读取输入
管道(|)可以将一个命令的输出作为另一个命令的输入:
bash复制ls -l | grep "Aug" # 找出8月份修改过的文件
3.3 环境变量与配置
Shell使用环境变量来存储各种设置:
bash复制echo $PATH # 查看PATH变量
export VAR=value # 设置环境变量
你的个人Shell配置通常存储在~/.bashrc文件中。我习惯在这里添加一些别名(alias)来简化常用命令:
bash复制alias ll='ls -alF'
alias grep='grep --color=auto'
4. Shell脚本编程基础
4.1 创建你的第一个Shell脚本
Shell脚本其实就是一系列命令的集合。创建一个新文件hello.sh:
bash复制#!/bin/bash
# 这是一个注释
echo "Hello, World!"
然后给它执行权限并运行:
bash复制chmod +x hello.sh
./hello.sh
注意:脚本第一行的
#!/bin/bash称为shebang,它告诉系统用哪个解释器来执行这个脚本。
4.2 变量与参数
在脚本中使用变量:
bash复制name="John"
echo "Hello, $name" # 输出:Hello, John
脚本可以接收参数:
bash复制#!/bin/bash
echo "第一个参数: $1"
echo "所有参数: $@"
4.3 条件判断与循环
基本的if语句:
bash复制if [ -f "$file" ]; then
echo "$file 存在"
else
echo "$file 不存在"
fi
for循环:
bash复制for file in *.txt; do
echo "处理文件: $file"
done
while循环:
bash复制count=1
while [ $count -le 5 ]; do
echo "计数: $count"
((count++))
done
5. 实用技巧与常见问题
5.1 提高效率的小技巧
-
命令历史:
- 按↑↓键浏览历史命令
!$表示上一个命令的最后一个参数!!重复上一条命令
-
Tab补全:
- 输入部分命令或文件名后按Tab键自动补全
- 按两次Tab显示所有可能的补全选项
-
作业控制:
command &:在后台运行命令jobs:查看后台作业fg %1:将作业1调到前台
5.2 常见错误与解决方法
-
权限被拒绝:
bash复制chmod +x script.sh # 给脚本添加执行权限 -
命令未找到:
- 检查命令是否拼写错误
- 检查
$PATH是否包含命令所在目录
-
脚本在Windows编辑后无法运行:
bash复制dos2unix script.sh # 转换行尾格式 -
变量未展开:
- 确保使用双引号
"$var"而不是单引号'$var'
- 确保使用双引号
5.3 安全注意事项
- 不要以root身份运行不明脚本
- 小心处理
rm -rf命令 - 下载的脚本先检查再运行
- 敏感信息不要硬编码在脚本中
6. 推荐学习资源
-
在线教程:
- Bash官方文档
- LinuxCommand.org
-
书籍:
- 《Linux命令行与Shell脚本编程大全》
- 《Bash Cookbook》
-
练习平台:
- OverTheWire Bandit游戏
- LeetCode Shell题库
最后分享一个我常用的命令组合,用来查找并删除所有.tmp文件:
bash复制find . -name "*.tmp" -type f -delete
记住,Shell就像一门语言,需要不断练习才能流利使用。开始时可能会觉得不顺手,但坚持下去,你会发现它将成为你最高效的工具之一。
