1. 文件类
1.1. 查看文件大小
# 加 h 查看可读性的文件大小
ll -h
# 查看文件夹大小
# --max-depth=1 表示查看文件夹的一层
du -h --max-depth=1 /usr
1.2. 压缩
ZIP
-r
递归处理,将指定目录下的所有文件和子目录一并处理。-y
直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。-v
显示指令执行过程或显示版本信息。-j
只保存文件名称及其内容,而不存放任何目录名称。-b
添加注释-u
更新文件
# 压缩
# target.zip 是压缩后的文件名
# source-dir 要压缩的文件夹名
zip -r target.zip source-dir
# 压缩保留软链, 只对类 unix 系统有效
# -y 保留软链
zip -ry target.zip source-dir
# 压缩带注释
zip -ryb target.zip source-dir
# 解压
unzip target.zip
# 查看压缩文件, 不压缩
unzip -v target.zip
unzip -l test.zip # 可以看到压缩包中的文件名,日期等信息
# 解压到指定文件夹 -d 指定文件夹
unzip target.zip -d target-dir/
# 自定义压缩率(1~9) 越高越耗时
zip -r8 target.zip target-dir/
# 向压缩包里更新文件
zip -u target.zip update/
# 压缩, 不带多余的目录
zip -rj target.zip target/
tar
-c
创建压缩文档-x
解压压缩文档-z
是否需要用gzip压缩-v
压缩的过程中显示档案-C
解压到指定的目录-f
指定压缩文件
# 创建压缩文件
tar -zcvf target.tar.gz source/
# 解压缩文件
tar -zxvf target.tar.gz
# 解压到指定文件夹
tar -zxvf target.tar.gz -C /usr/local/src/target
# 万能压缩
tar -xvf target.tar.gz
# 预览压缩(不解压)
tar -tvf target.tar.gz
# 压缩,排除其它文件
# 打包test目录下所有文件,排除以.log结尾的文件
# --exclude选项,支持通配符和正则表达式,因此也非常强大。
tar -zcvf target.tar.gz test/ --exclude=test/*.log
# 忽略.git文件
tar -zcvf target.tar.gz test/ --exclude=*.git
2. RPM
2.1. 安装
rpm -ivh rpm软件包
2.2. 搜索
rpm -qa 搜索的名称
2.3. 卸载
rpm -e rpm包名(搜索后的结果名称)
3. 文本处理
3.1. grep
3.1.1. 或的关系
cat 1.txt |grep a |grep b
3.1.2. 并集的关系
cat 1.txt |grep -E "a" |grep -E "b"
3.1.3. 搜索多个文件内容
# 普通搜索
grep "搜索内容" *.conf
# 显示行号
grep -n "搜索内容" *.conf
# 显示上下文及行号
grep -n -C 10 "搜索内容" *.conf
3.2. awk
提出内存大小
- awk ‘{print $1}’ 提出第1列的数据
- sed -n ‘2p’ 提出第二行的数据
free -m |awk '{print $3}' |sed -n '2p'
4. 传输
4.1. scp
scp [参数] [原路径] [目标路径]
# 1. 从本地复制到远程目录
scp /opt/soft/demo.tar root@10.6.159.147:/opt/soft/scptest
# 2. 从本地递归复制整个目录到远程目录
scp -r /opt/soft/test root@10.6.159.147:/opt/soft/scptest
# 3. 从远程复制文件到本地
scp root@10.6.159.147:/opt/soft/demo.tar /opt/soft/
# 4. 从远程复制文件到本地 递归复制整个目录
scp -r root@10.6.159.147:/opt/soft/demo.tar /opt/soft/
4.2. rsync
yum -y install rsync
# 复制包含 src 目录本身及所有子目录
rsync -avPW /opt/src /opt/dst
# 复制不包含 src 目录本身,只复制src下的所有子目录
rsync -avPW /opt/src/ /opt/dst
# 后台运行
nohup rsync -avPW /opt/src /opt/dst >> output.log 2>&1 &
# 远程迁移
rsync -avPW --progress /path/to/local/directory user@remote_host:/path/to/remote/directory
rsync -avPW --progress -p 10022 /path/to/local/directory user@remote_host:/path/to/remote/directory
# 免密交互
sshpass -p 'your_password' rsync -avz --progress -e "ssh -p 10022" /opt/ user@remote_host:/data/
nohup sshpass -p 'your_password' rsync -avz --progress -e "ssh -p 10022" /opt/ user@remote_host:/data/ >> output.log 2>&1 &
4.3. curl
POST JSON请求
curl -H "Content-type:application/json" -X POST -d '{"name":"king"}' http://localhost/test
5. 调试
5.1. gdb
5.2. pstack
5.3. strace
6. 查看进程及端口
6.1. netstat
# 查看 tcp 所有的进程
netstat -nplt
6.2. lsof
列出谁在使用某个端口
lsof -i :80
查找某个文件相关进程
lsof /bin/bash
列出某个用户打开的文件信息
lsof -u root
列出某个程序进程所打开的文件信息
lsof -c mysql
列出某个用户以及某个进程所打开的文件信息
lsof -u root -c mysql
通过某个进程显示该进程打开的文件
lsof -p 11201
列出所有网络连接
lsof -i
# 列出tcp
lsof -i tcp
- 通过端口获取当前进程ID
lsof -t -i:3306
杀死进程
kill -9 $(lsof -t -i :3306)
7. 监控&优化
7.1. 工具合集
- sysstat
- iostat
- mpstat
- pidstat
- tapestat
- cifsiostat
- sadf
# Linux 性能监视工具合集
yum -y install sysstat
7.2. free
查看内容情况
free -m # 显示以 km 为单位
free -g # 显示以 kg 为单位
释放缓冲内容
echo 3 > /proc/sys/vm/drop_caches
7.3. ldd
查看程序依赖库
# 查看 nginx 执行命令 依赖库
ldd /usr/sbin/nginx
8. 权限管理
# 创建用户组
groupadd work
# 创建用户并加入用户组
useradd work -g work # -g 加入用户组
# 创建不登陆的用户
useradd -s /sbin/nologin bear
# 修改用户组权限
usermod -s /bin/bash bear
9. 脚本
9.1. 获取当前文件名
CUR_DIR="$PWD"
SCRIPTPATH="${CUR_DIR}/${0#*/}"
# OR
SCRIPTPATH="${PWD}/${0#*/}"
9.2. 获取当前目录名
SCRIPTPATH=$(cd `dirname -- $0` && pwd)
9.3. 定时删除日志
#!/bin/sh
set -x
day=7
find /data/logs/ -mtime +${day} -exec rm -rf {} \;
高级级,支持多个目录。
#!/bin/bash
###################
# 功能:定时删除日志文件
# 作者:百里
# 时间:2021/03/25
###################
# 保留多少天
day=$1
shell_name=$(basename $0)
if [ -z $day ];then
day=31
echo "默认删除${day}天的日志,可以自定义过期天数.${shell_name} 7"
fi
# 日志列表,支持多个目录
logs_list=(
"/data/logs/"
)
# 删除方法
function rm_file() {
dir_path=$1 # 删除的目录
expired=$2 # 过期时间(天)
# 判断目录是否存在
if [ ! -d $dir_path ];then
echo "${dir_path},目录不存在"
return 10
fi
if [ -z $expired ];then
echo "过期时间不能为空"
return 11
fi
logs=$(find $dir_path -mtime +${expired} -name "*.log")
for log in ${logs[@]};do
now=$(date +%F_%T)
if test ! -f $log;then
echo "${log} 文件不存在"
continue
fi
echo "${log} 已删除 in ${now}"
rm -f $log
done
return 0
}
# 执行
for item in ${logs_list[@]};do
rm_file $item $day
if [ $? -ne 0 ];then
exit 0
fi
done
echo "successful!"
exit 0
10. 其它
10.1. 时间
#!/bin/bash
echo $(date +%F)
时间格式列表:
date +%c | locale’s date time | Sat May 9 11:49:47 2020 |
---|---|---|
date +%x | locale’s date | 05/09/20 |
date +%X | locale’s time | 11:49:47 |
date +%A | locale’s full weekday name | Saturday |
date +%B | locale’s full month name | May |
date +%m-%d-%Y | MM-DD-YYYY date format | 05-09-2020 |
date +%D | MM/DD/YY date format | 05/09/20 |
date +%F | YYYY-MM-DD date format | 2020-05-09 |
date +%T | HH:MM:SS time format | 11:44:15 |
date +%u | Day of Week | 6 |
date +%U | Week of Year with Sunday as first day of week | 18 |
date +%V | ISO Week of Year with Monday as first day of week | 19 |
date +%j | Day of Year | 130 |
date +%Z | Timezone | PDT |
date +%m | Month of year (MM) | 05 |
date +%d | Day of Month (DD) | 09 |
date +%Y | Year (YY) | 2020 |
date +%H | Hour (HH) | 11 |
date +%H | Hour (HH) in 24-hour clock format | 11 |
date +%I | Hour in 12-hour clock format | 11 |
date +%p | locale’s equivalent of AM or PM | AM |
date +%P | same as %p but in lower case | am |