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