shell命令、BASH
一、shell常用命令
ls 列出目录内容
用法:ls [选项] [目录]
示例:ls -l /home
(长格式列出home目录)cd 切换目录
用法:cd [目录]
示例:cd ../documents
(进入上级的documents目录)pwd 显示当前路径
用法:pwd
示例:pwd
(输出:/home/user)mkdir 创建目录
用法:mkdir [选项] 目录名
示例:mkdir -p project/{src,test}
(创建多级嵌套目录)rm 删除文件/目录
用法:rm [选项] 文件
示例:rm -rf old_dir
(强制删除目录)cp 复制文件
用法:cp [选项] 源文件 目标
示例:cp -r dir1 dir2
(递归复制目录)mv 移动/重命名
用法:mv [选项] 源 目标
示例:mv file.txt ../backup/
(移动文件)cat 显示文件内容
用法:cat [文件]
示例:cat *.log | grep "error"
(合并日志并过滤)grep 文本搜索
用法:grep [模式] [文件]
示例:grep -ri "warning" /var/log
(递归忽略大小写搜索)find 文件查找
用法:find [路径] [条件]
示例:find . -name "*.jpg" -mtime -7
(查找7天内修改的jpg)chmod 修改权限
用法:chmod [权限] 文件
示例:chmod 755 script.sh
(设置可执行权限)ps 查看进程
用法:ps [选项]
示例:ps aux | grep nginx
(显示所有进程并过滤)kill 终止进程
用法:kill [信号] PID
示例:kill -9 1234
(强制终止PID为1234的进程)tar 打包压缩
用法:tar [选项] 文件
示例:tar -czvf archive.tar.gz dir/
(创建gzip压缩包)curl 网络请求
用法:curl [选项] URL
示例:curl -o data.json https://api.example.com/data
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
(统计行数)
文本处理
- 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
(生成差异补丁)
系统管理
- 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
(显示内核版本)
网络相关
- 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个包)
进阶工具
- 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'
文件权限
- 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
压缩/解压
- gzip
用法:gzip 文件
示例:gzip -9 file.txt
(最大压缩率)
46.zip
用法:zip 压缩包名 文件
示例:zip -r site.zip public_html/
47.unzip
用法:unzip 压缩包
示例:unzip -l archive.zip
(查看内容)
其他关键命令
- which 查找命令路径
用法:which 命令
示例:which python
49.xargs 参数传递
用法:命令 | xargs 目标命令
示例:find . -name "*.tmp" | xargs rm
50.tee 双重输出
用法:命令 | tee 文件
示例:ls -l | tee dirlist.txt
二、bash脚本
1 |
|
1.2 执行脚本
1 |
|
2. 变量操作
2.1 变量声明
1 |
|
2.2 环境变量
1 |
|
2.3 特殊变量
1 |
|
3. 输入输出
3.1 输入读取
1 |
|
3.2 格式化输出
1 |
|
3.3 文件重定向
1 |
|
4. 条件判断
4.1 基本语法
1 |
|
4.2 常用测试运算符
1 |
|
5. 循环结构
5.1 for循环
1 |
|
5.2 while循环
1 |
|
5.3 until循环
1 |
|
6. 函数
6.1 定义函数
1 |
|
6.2 调用函数
1 |
|
6.3 返回值
1 |
|
7. 调试技巧
1 |
|
8. 实用示例
8.1 备份脚本
1 |
|
8.2 批量重命名
1 |
|
8.3 服务监控
1 |
|
注意事项
- 变量赋值等号两边不能有空格
- 字符串比较使用双引号包裹变量
- 使用
[[ ]]
代替[ ]
支持更多特性 - 算术运算使用
$(( ))
- 脚本开头建议添加
set -euo pipefail
增强健壮性