1. Shell命令基础概述
在计算机操作系统中,Shell作为用户与内核之间的命令行接口,其重要性不言而喻。无论是Linux系统管理员、开发人员还是普通用户,掌握Shell命令都是必备技能。Shell不仅能够执行简单的文件操作,还能通过脚本实现复杂的自动化任务。
Shell环境有多种类型,最常见的是Bash(Bourne Again Shell),它兼容sh(Bourne Shell)并提供了更多实用功能。其他流行的Shell还包括zsh、ksh等,它们各有特点但基本命令语法相似。
提示:在开始学习具体命令前,建议先了解当前使用的Shell类型。可以通过
echo $SHELL命令查看,使用ps -p $$命令确认当前会话使用的Shell。
2. 文件系统操作命令
2.1 基本文件操作
文件操作是Shell中最基础也是最常用的功能。ls命令用于列出目录内容,配合不同参数可以实现丰富的功能:
ls -l # 长格式显示文件详细信息 ls -a # 显示所有文件(包括隐藏文件) ls -lh # 人性化显示文件大小cp命令用于复制文件或目录,使用时需注意:
cp file1 file2 # 复制文件 cp -r dir1 dir2 # 递归复制目录 cp -i file1 file2 # 覆盖前提示确认mv命令兼具移动和重命名功能:
mv oldname newname # 重命名文件 mv file dir/ # 移动文件到目录rm命令删除文件需谨慎,特别是使用-r递归删除目录时:
rm file # 删除文件 rm -r dir # 递归删除目录 rm -i file # 删除前确认2.2 文件内容查看与处理
查看文件内容有多种命令可选,各具特点:
cat file # 显示整个文件内容 less file # 分页查看(可上下滚动) head -n 5 file # 显示前5行 tail -n 5 file # 显示后5行 tail -f log # 实时追踪日志文件变化文件查找是日常高频操作,find命令功能强大但语法较复杂:
find /path -name "*.txt" # 按名称查找 find . -type f -size +1M # 查找大于1MB的文件 find /tmp -mtime +7 -delete # 删除7天前的临时文件grep是文本搜索利器,支持正则表达式:
grep "pattern" file # 基本搜索 grep -r "error" /var/log # 递归搜索目录 grep -i "warning" file # 忽略大小写 grep -v "debug" file # 反向匹配(显示不包含的行)3. 系统管理与进程控制
3.1 系统信息查询
了解系统状态是管理的基础,常用命令包括:
uname -a # 显示系统信息 df -h # 磁盘空间使用情况(人类可读格式) du -sh * # 查看当前目录各文件/目录大小 free -h # 内存使用情况 uptime # 系统运行时间和负载 top/htop # 动态查看进程信息(htop更友好)3.2 进程管理
进程管理是系统运维的核心技能:
ps aux # 查看所有进程详细信息 ps -ef | grep nginx # 查找特定进程 kill -9 PID # 强制终止进程 killall process_name # 终止所有同名进程 pkill -f "pattern" # 按模式终止进程后台作业控制也很重要:
command & # 后台运行 jobs # 查看后台作业 fg %1 # 将作业1调到前台 bg %2 # 继续后台运行作业2 nohup command & # 退出终端后继续运行3.3 用户与权限
Linux权限系统基于用户、组和其他三类权限:
chmod 755 file # 设置文件权限(rwxr-xr-x) chown user:group file # 更改文件所有者和组 sudo command # 以超级用户权限执行 passwd # 修改当前用户密码特殊权限位需要特别注意:
chmod +s file # 设置SUID位 chmod +t dir # 设置粘滞位(常用于/tmp)4. 网络相关命令
4.1 网络配置与诊断
网络问题是常见故障点,诊断命令包括:
ifconfig/ip addr # 查看网络接口信息 ping host # 测试网络连通性 traceroute host # 追踪路由路径 netstat -tulnp # 查看网络连接和监听端口 ss -tulnp # netstat的现代替代品下载工具在脚本中很实用:
wget url # 下载文件 curl -O url # 类似wget的功能 curl -I url # 仅获取HTTP头信息4.2 远程连接管理
安全远程访问是运维基础:
ssh user@host # 基本SSH连接 ssh -p 2222 user@host # 指定非标准端口 scp file user@host:path # 安全复制文件 rsync -avz src dest # 高效同步工具5. Shell脚本编程基础
5.1 脚本基础结构
Shell脚本第一行通常是指定解释器:
#!/bin/bash # 这是注释 echo "Hello World"脚本需要可执行权限:
chmod +x script.sh ./script.sh5.2 变量与参数
变量使用是脚本编程基础:
name="value" # 变量赋值 echo $name # 变量引用 echo ${name}_suffix # 避免歧义的引用方式脚本参数处理:
$0 # 脚本名 $1, $2, ..., $9 # 位置参数 $# # 参数个数 $@ # 所有参数(保持独立) $* # 所有参数(合并为一个字符串)5.3 流程控制
条件判断是脚本逻辑的核心:
if [ condition ]; then commands elif [ condition ]; then commands else commands fi常见测试条件:
[ -f file ] # 文件存在且为普通文件 [ -d dir ] # 目录存在 [ -z "$var" ] # 变量为空 [ "$a" = "$b" ] # 字符串相等 [ $n -gt 10 ] # 数值大于10循环结构:
for var in list; do commands done while [ condition ]; do commands done until [ condition ]; do commands done5.4 函数与错误处理
函数提高代码复用性:
function_name() { local var="value" # 局部变量 commands return value }错误处理机制:
command || exit 1 # 命令失败时退出 set -e # 任何命令失败立即退出脚本 trap "cleanup" EXIT # 设置退出时执行的清理函数6. 实用技巧与高级特性
6.1 命令组合与管道
管道是Shell强大特性的核心:
command1 | command2 # 将command1输出作为command2输入命令替换:
$(command) # 执行命令并用输出替换 `command` # 旧式命令替换(建议使用$())进程替换:
diff <(cmd1) <(cmd2) # 比较两个命令的输出6.2 正则表达式与文本处理
sed流编辑器:
sed 's/old/new/g' file # 替换文本 sed -i.bak 's/old/new/' file # 直接修改文件(保留备份) sed '/pattern/d' file # 删除匹配行awk强大的文本处理:
awk '{print $1}' file # 打印每行第一个字段 awk -F: '{print $1}' /etc/passwd # 指定冒号为分隔符 awk '$3 > 100 {print $0}' file # 条件处理6.3 实用小技巧
命令行效率技巧:
!! # 上一条命令 !$ # 上条命令的最后一个参数 ^old^new # 替换上条命令中的字符串 ctrl+r # 反向搜索命令历史 ctrl+a/ctrl+e # 移动光标到行首/行尾 alt+. # 插入上条命令的最后一个参数环境变量配置:
export PATH=$PATH:/new/path # 临时添加PATH echo 'export VAR=value' >> ~/.bashrc # 永久设置 source ~/.bashrc # 重新加载配置7. 常见问题排查
7.1 命令找不到问题
当遇到"command not found"错误时:
- 检查命令拼写是否正确
- 使用
which command查看命令位置 - 检查PATH环境变量是否包含命令所在目录
- 确认软件包是否已安装(
rpm -q或dpkg -l)
7.2 权限问题排查
权限拒绝错误的处理步骤:
- 使用
ls -l查看文件权限 - 确认执行用户是否有足够权限
- 检查SELinux/AppArmor安全上下文
- 查看系统日志(
/var/log/messages或journalctl)
7.3 脚本调试技巧
调试Shell脚本的方法:
bash -x script.sh # 打印每条执行的命令 set -x # 在脚本中开启调试 trap 'echo $LINENO' DEBUG # 显示执行行号8. 安全最佳实践
8.1 安全注意事项
Shell使用中的安全准则:
- 避免使用root用户执行日常操作
- 谨慎处理通配符(如
rm *) - 不信任的用户输入必须严格过滤
- 敏感信息不要硬编码在脚本中
- 定期检查cron作业和启动项
8.2 安全相关命令
安全检查工具:
chkrootkit # 检查rootkit rkhunter # 更全面的安全检查 lynis audit system # 系统安全审计SSH安全加固:
ssh-keygen # 生成密钥对 ssh-copy-id user@host # 部署公钥 vim /etc/ssh/sshd_config # 修改SSH配置