shell命令、BASH

一、shell常用命令

  1. ls 列出目录内容
    用法:ls [选项] [目录]
    示例:ls -l /home(长格式列出home目录)

  2. cd 切换目录
    用法:cd [目录]
    示例:cd ../documents(进入上级的documents目录)

  3. pwd 显示当前路径
    用法:pwd
    示例:pwd(输出:/home/user)

  4. mkdir 创建目录
    用法:mkdir [选项] 目录名
    示例:mkdir -p project/{src,test}(创建多级嵌套目录)

  5. rm 删除文件/目录
    用法:rm [选项] 文件
    示例:rm -rf old_dir(强制删除目录)

  6. cp 复制文件
    用法:cp [选项] 源文件 目标
    示例:cp -r dir1 dir2(递归复制目录)

  7. mv 移动/重命名
    用法:mv [选项] 源 目标
    示例:mv file.txt ../backup/(移动文件)

  8. cat 显示文件内容
    用法:cat [文件]
    示例:cat *.log | grep "error"(合并日志并过滤)

  9. grep 文本搜索
    用法:grep [模式] [文件]
    示例:grep -ri "warning" /var/log(递归忽略大小写搜索)

  10. find 文件查找
    用法:find [路径] [条件]
    示例:find . -name "*.jpg" -mtime -7(查找7天内修改的jpg)

  11. chmod 修改权限
    用法:chmod [权限] 文件
    示例:chmod 755 script.sh(设置可执行权限)

  12. ps 查看进程
    用法:ps [选项]
    示例:ps aux | grep nginx(显示所有进程并过滤)

  13. kill 终止进程
    用法:kill [信号] PID
    示例:kill -9 1234(强制终止PID为1234的进程)

  14. tar 打包压缩
    用法:tar [选项] 文件
    示例:tar -czvf archive.tar.gz dir/(创建gzip压缩包)

  15. curl 网络请求
    用法:curl [选项] URL
    示例:curl -o data.json https://api.example.com/data

  16. touch 创建空文件/更新时间戳

用法:touch 文件名
示例:touch newfile.txt

17.echo 输出文本
用法:echo [选项] 字符串
示例:echo "Hello" >> file.txt(追加到文件)

18.head 显示文件开头
用法:head -n 行数 文件
示例:head -20 server.log(显示前20行)

19.tail 显示文件结尾
用法:tail -n 行数 文件
示例:tail -f /var/log/syslog(实时跟踪日志)

20.wc 统计文本
用法:wc [选项] 文件
示例:wc -l access.log(统计行数)


文本处理

  1. sed 流编辑器

用法:sed '表达式' 文件
示例:sed 's/foo/bar/g' file.txt(全局替换)

22.awk 文本分析工具
用法:awk '模式 {动作}' 文件
示例:awk '{print $1}' data.csv(输出第一列)

23.sort 排序
用法:sort [选项] 文件
示例:sort -nr file.txt(数字逆序排序)

24.uniq 去重
用法:uniq [选项] 文件
示例:sort file.txt | uniq -c(统计重复次数)

25.diff 文件对比
用法:diff 文件1 文件2
示例:diff -u old.c new.c(生成差异补丁)


系统管理

  1. df 磁盘空间

用法:df -h
示例:df -h /dev/sda1(查看指定分区)

27.du 目录大小
用法:du -sh 目录
示例:du -sh * | sort -hr(按大小排序当前目录)

28.top 动态进程监控
用法:top
示例:top -u mysql(监控MySQL用户进程)

29.free 内存信息
用法:free -m
示例:free -m | awk '/Mem/{print $3 "MB used"}'

30.uname 系统信息
用法:uname -a
示例:uname -r(显示内核版本)


网络相关

  1. ssh 远程连接

用法:ssh 用户@主机
示例:ssh -p 2222 admin@192.168.1.100

32.scp 安全拷贝
用法:scp 源文件 目标路径
示例:scp -r ~/project user@remote:/backup/

33.wget 下载文件
用法:wget [选项] URL
示例:wget -c http://example.com/bigfile.zip(断点续传)

34.netstat 网络状态
用法:netstat -tulnp
示例:netstat -an | grep ESTABLISHED

35.ping 网络连通性
用法:ping 主机
示例:ping -c 4 google.com(发送4个包)


进阶工具

  1. cron 定时任务

用法:crontab -e
示例:0 3 * * * /backup.sh(每天3点执行)

37.rsync 高效同步
用法:rsync -av 源 目标
示例:rsync -avz --delete /data/ user@remote:/backup/

38.ln 创建链接
用法:ln -s 目标 链接名
示例:ln -s /var/log/ logs(创建软链接)

39.history 命令历史
用法:history
示例:!123(执行历史记录中第123条命令)

40.alias 命令别名
用法:alias 别名='原命令'
示例:alias ll='ls -alh'


文件权限

  1. chown 修改所有者

用法:chown 用户:组 文件
示例:chown www-data:www-data /var/www/

42.umask 默认权限
用法:umask 022
示例:umask(显示当前设置)

43.su 切换用户
用法:su - 用户名
示例:su - root

44.sudo 超级权限
用法:sudo 命令
示例:sudo apt update


压缩/解压

  1. gzip

用法:gzip 文件
示例:gzip -9 file.txt(最大压缩率)

46.zip
用法:zip 压缩包名 文件
示例:zip -r site.zip public_html/

47.unzip
用法:unzip 压缩包
示例:unzip -l archive.zip(查看内容)


其他关键命令

  1. which 查找命令路径

用法:which 命令
示例:which python

49.xargs 参数传递
用法:命令 | xargs 目标命令
示例:find . -name "*.tmp" | xargs rm

50.tee 双重输出
用法:命令 | tee 文件
示例:ls -l | tee dirlist.txt

二、bash脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Bash 脚本编程指南

## 目录
1. [基础语法](#1-基础语法)
2. [变量操作](#2-变量操作)
3. [输入输出](#3-输入输出)
4. [条件判断](#4-条件判断)
5. [循环结构](#5-循环结构)
6. [函数](#6-函数)
7. [调试技巧](#7-调试技巧)
8. [实用示例](#8-实用示例)

---

## 1. 基础语法

### 1.1 脚本结构
```bash
#!/bin/bash # Shebang 声明解释器
# 这是注释 # 单行注释
echo "Hello World" # 打印输出

1.2 执行脚本

1
2
3
chmod +x script.sh   # 添加执行权限
./script.sh # 直接执行
bash script.sh # 指定解释器执行

2. 变量操作

2.1 变量声明

1
2
3
name="Alice"         # 定义变量(等号两边不能有空格)
echo $name # 使用变量
echo ${name} # 推荐使用花括号形式

2.2 环境变量

1
2
export PATH=$PATH:/new/path   # 设置环境变量
env # 查看所有环境变量

2.3 特殊变量

1
2
3
4
5
6
7
$0    脚本名称
$1-$9 位置参数
$# 参数数量
$@ 所有参数(数组)
$* 所有参数(字符串)
$? 上条命令的退出码
$$ 当前进程PID

3. 输入输出

3.1 输入读取

1
read -p "Enter name: " username

3.2 格式化输出

1
printf "Name: %s\nAge: %d\n" "Bob" 25

3.3 文件重定向

1
2
3
echo "内容" > file.txt    # 覆盖写入
echo "追加" >> file.txt # 追加写入
command < input.txt # 输入重定向

4. 条件判断

4.1 基本语法

1
2
3
4
5
6
7
if [ condition ]; then
commands
elif [ condition ]; then
commands
else
commands
fi

4.2 常用测试运算符

1
2
3
4
5
6
7
8
9
10
11
12
# 字符串比较
[ -z "$str" ] # 空字符串
[ "$a" == "$b" ] # 相等

# 数值比较
[ $a -eq $b ] # 等于
[ $a -gt $b ] # 大于

# 文件测试
[ -f file ] # 是普通文件
[ -d dir ] # 是目录
[ -x file ] # 可执行

5. 循环结构

5.1 for循环

1
2
3
4
5
6
7
for i in {1..5}; do
echo $i
done

for file in *.txt; do
echo "Processing $file"
done

5.2 while循环

1
2
3
4
5
count=1
while [ $count -le 5 ]; do
echo $count
((count++))
done

5.3 until循环

1
2
3
4
5
count=1
until [ $count -gt 5 ]; do
echo $count
((count++))
done

6. 函数

6.1 定义函数

1
2
3
4
function greet() {
local name=$1 # 局部变量
echo "Hello, $name"
}

6.2 调用函数

1
greet "Alice"

6.3 返回值

1
2
3
4
5
function add() {
return $(($1 + $2))
}
add 3 5
echo $? # 输出8

7. 调试技巧

1
2
3
4
bash -x script.sh      # 显示执行过程
set -x # 开启调试模式
set +x # 关闭调试模式
trap 'echo ERROR' ERR # 错误捕获

8. 实用示例

8.1 备份脚本

1
2
3
#!/bin/bash
backup_dir="/backup"
tar -czf $backup_dir/$(date +%Y%m%d).tar.gz /data

8.2 批量重命名

1
2
3
for file in *.jpg; do
mv "$file" "photo_${file}"
done

8.3 服务监控

1
2
3
if ! pgrep -x "nginx" >/dev/null; then
systemctl start nginx
fi

注意事项

  1. 变量赋值等号两边不能有空格
  2. 字符串比较使用双引号包裹变量
  3. 使用 [[ ]] 代替 [ ] 支持更多特性
  4. 算术运算使用 $(( ))
  5. 脚本开头建议添加 set -euo pipefail 增强健壮性

shell命令、BASH
https://bote798.top/2025/05/15/shell命令/
作者
bote798
发布于
2025年5月15日
许可协议