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

提出内存大小

  1. awk ‘{print $1}’ 提出第1列的数据
  2. 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
  1. 通过端口获取当前进程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 +%clocale’s date timeSat May 9 11:49:47 2020
date +%xlocale’s date05/09/20
date +%Xlocale’s time11:49:47
date +%Alocale’s full weekday nameSaturday
date +%Blocale’s full month nameMay
date +%m-%d-%YMM-DD-YYYY date format05-09-2020
date +%DMM/DD/YY date format05/09/20
date +%FYYYY-MM-DD date format2020-05-09
date +%THH:MM:SS time format11:44:15
date +%uDay of Week6
date +%UWeek of Year with Sunday as first day of week18
date +%VISO Week of Year with Monday as first day of week19
date +%jDay of Year130
date +%ZTimezonePDT
date +%mMonth of year (MM)05
date +%dDay of Month (DD)09
date +%YYear (YY)2020
date +%HHour (HH)11
date +%HHour (HH) in 24-hour clock format11
date +%IHour in 12-hour clock format11
date +%plocale’s equivalent of AM or PMAM
date +%Psame as %p but in lower caseam