日期

  1. $(date -d '1 day ago' '+%Y-%m-%d')

常用方法

mac查看远程端口是否打开

  1. nc -vz -w 2 www.baidu.com 80
  2. -v 详细信息
  3. -z 不发送包给对方
  4. -w 后面是数字,秒,表示多少时间结束,不等太长时间。
  5. -u udp 协议,默认是tcp。上图可以看到。如果是dns端口检测,用u

参数处理

  1. if [[ $# == 0 ]];then
  2. echo "参数不能为空"
  3. exit 0
  4. fi
  5. arg1=1
  6. arg2=arg-2-$(echo "${arg1}")
  7. arg3='all "arg is " arg1='${arg1}''
  8. echo $arg1 $arg2 $arg3
  9. #判断文件夹是否存在
  10. if [ ! -d "文件目录地址" ]; then
  11. mkdir "文件目录地址"
  12. fi
  13. #判断文件是否存在
  14. if [ ! -f "文件地址" ]; then
  15. mkdir "文件地址"
  16. fi

数字格式化

  1. part=`printf "%03d" $i` # 左补0

删除旧文件

  1. # 找出5天前修改的文件名以.tar结尾的文件进行删除
  2. find /www/backup -mtime +5 -name "*.tar" |xargs rm
  3. find . -name "*.jpg" -exec rm -fr {} \;

image.png

nginx访问日志统计

  1. # 按小时统计
  2. cat access.log |awk '{print $4}' | awk -F ':' '{print $1,$2}'|uniq -c | awk '{print $2" "$3" "$1}'

for循环

  1. for ((i=0;i<10;i++))
  2. do
  3. _date=$(date +%Y-%m-%d -d "${i} day")
  4. echo $_date
  5. done
  6. #
  7. for i in {1..10}
  8. do
  9. echo $i
  10. done

用户交互Yes/No

  1. while true;do
  2. #输入超时指定默认值
  3. stty -icanon min 0 time 200
  4. echo "操作提示吗?(y/n)"
  5. read Arg
  6. case $Arg in
  7. Y|y|YES|yes)
  8. echo "YES处理"
  9. break;;
  10. N|n|NO|no)
  11. exit;;
  12. "") #Autocontinue
  13. break;;
  14. esac
  15. done

文件合并

find ./ -name "item*" | xargs sed 'a\' > all.txt
find ./ -name "item*" | xargs cat > all.txt


:s/old/new           #替换当前行的第一个old为new
:s/old/new/g         #替换当前行的所有的old为new
:.,$s/old/new        #替换当前行到最后行的第一个old为new
:.,$s/old/new/g      #替换当前行到最后行的所有old为new
:N,Ms/old/new        #替换第N行到第M行的第一个old为new
:N,Ms/old/new/g      #替换第N行到第M行的所有old为new
:N,Ms/old/new/gc     #替换第N行到第M行的所有old为new,且逐一询问是否删除
:%s/old/new          #替换所有行的第一个old为new
:%s/old/new/g        #替换所有行的所有old为new

文件排序、交集、并集、差集

#排序
sort a.txt |uniq -c
#一、交集
sort a.txt b.txt | uniq -d
#二、并集
sort a.txt b.txt | uniq
#三、差集 a.txt-b.txt:
sort a.txt b.txt b.txt | uniq -u
# 差集 b.txt - a.txt:
sort b.txt a.txt a.txt | uniq -u

删除重复行

sort -k2n all.txt | uniq > real.out

sort -k2n all.txt | awk '{if ($0!=line) print;line=$0}'

sort -k2n all.txt | sed '$!N; /^\(.*\)\n\1$/!P; D'

删除空格

cat all.txt |sed s/[[:space:]]//g

awk 去重

awk '!($1 in a){a[$1];print $1}'
#或
sort $1 | uniq 
# awk结果使用逗号间隔拼接
awk -F ',' '{print $1}' | xargs | tr ' ' ','

压缩&解压

# -z, -j, -J, --lzma  Compress archive with gzip/bzip2/xz/lzma
tar -czvf file.tar.gz file/
tar -zxvf file.tar.gz
#高级压缩-比较慢
tar -Jcf file.tar.xz file/

场景

history记录到文件

# 在~/.bash_logout添加登出记录日志到文件
vim ~/.bash_logout
history >> /opt/.ops
# 在/etc/profile末尾添加设置操作日志格式
vim /etc/profile
export HISTTIMEFORMAT=" [%Y-%m-%d %H:%M:%S] [`who am i 2>/dev/null\
| awk '{print $NF}'|sed -e 's/[()]//g'`] [`who -u am i |awk '{print $1}'`] "

export HISTSIZE=10000
export HISTTIMEFORMAT=" %Y-%m-%d %H:%M:%S - `who am i 2>/dev/null | awk '{print $NF}'|sed -e 's/[()]//g'` - `who -u am i |awk '{print $1}'` "
export PROMPT_COMMAND="history 1 >> /var/log/.myhistory" #将命令记录输出到文本中

touch /var/log/.myhistory
chmod  /var/log/.myhistory

常用状态查看

# 按CPU和内存倒序前n个进程
ps -aux --sort -pcpu,+pmem | head -n 5
# 按进程名查看
ps -f -C java

文件同步rsync

rsync -zvrtopgl --progress --delete /fromDist/ root@s1:/toDist/
rsync -avur --progress
rsync -vartopg –size-only –blocking-io  –progress –delete

TCP链接状态统计

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

TCP连接状态详解

LISTEN: 侦听来自远方的TCP端口的连接请求
SYN-SENT: 再发送连接请求后等待匹配的连接请求
SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认
ESTABLISHED: 代表一个打开的连接
FIN-WAIT-1: 等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2: 从远程TCP等待连接中断请求
CLOSE-WAIT: 等待从本地用户发来的连接中断请求
CLOSING: 等待远程TCP对连接中断的确认
LAST-ACK: 等待原来的发向远程TCP的连接中断请求的确认
TIME-WAIT: 等待足够的时间以确保远程TCP接收到连接中断请求的确认
CLOSED: 没有任何连接状态

CPU/内存/系统信息查看

# cpu
grep "model name" /proc/cpuinfo 
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
cat /proc/cpuinfo | grep physical | uniq -c
# cpu位数
echo $HOSTTYPE
# 内存
grep MemTotal /proc/meminfo 
# linux 版本
cat /etc/redhat-release
# linux 内核版本
uname -a 或uname -r

挂载新硬盘

# 查看数据盘
fdisk -l

# 进行分区
fdisk -u /dev/vdd
1. 输入p查看数据盘的分区情况。
2. 输入n创建一个新分区。
3. 输入p选择分区类型为主分区。
4. 输入分区编号,按回车键。仅创建一个分区,直接按回车键,采用默认值1。
5. 输入第一个可用的扇区编号,按回车键,直接按回车键,采用默认值2048。
6. 输入最后一个扇区编号,按回车键,仅创建一个分区,直接按回车键,采用默认值。
7. 输入p查看该数据盘的规划分区情况。
8. 输入w开始分区,并在完成分区后退出

# 查看新分区信息
fdisk -lu /dev/vdd

# 创建一个ext4文件系统
mkfs -t ext4 /dev/vdd1

# 在/etc/fstab中写入新分区信息,启动开机自动挂载分区
cp /etc/fstab /etc/fstab.bak
echo `blkid /dev/vdd1 | awk '{print $2}' | sed 's/\"//g'` /mnt/gitData ext4 defaults 0 0 >> /etc/fstab

# 挂载分区
mount /dev/vdd1 /mnt/gitData

# 检查挂载结果
df -h

# 卸载
umount [数据盘分区],例如:umount /dev/vdb1

工具

监控工具

# 网络监控
iftop
# IO监控
iotop
# 负载监控
htop或top

进程监控

pidstat -p 843 1 3 -u -t
/*
-u:代表对 CPU 使用率的监控
参数 1 3 代表每秒采样一次,一共三次
-t:将监控级别细化到线程
*/

ssh相关

# 秘钥生成
ssh-keygen -t rsa -b 4096 -C "your_hostname"
# 免密登录
cat ~/.ssh/id_rsa.pub | ssh  root@ip "cat >> .ssh/authorized_keys"

firewalld防火墙使用

# 禁止ping
firewall-cmd --permanent --add-rich-rule='rule protocol value=icmp drop'
firewall-cmd --zone=public --permanent --add-service=ssh
firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent --add-service=https



# 将80端口的流量转发至8080
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
# 将80端口的流量转发至
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1 --permanent
# 将80端口的流量转发至192.168.0.1的8080端口
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1:toport=8080 --permanent

# 允许192.168.122.0/24主机所有连接
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.122.0" accept'
# 允许192.168.0.200主机访问80端口
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.200" port protocol="tcp" port="80" accept"
# 禁止某IP访问
firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address='123.56.247.76/24' reject"
# 解除IP禁止
firewall-cmd --permanent --zone=public --remove-rich-rule="rule family=ipv4 source address='123.56.247.76/24' reject"

# 开放端口
firewall-cmd --zone=public --permanent --add-port=8080/tcp
firewall-cmd --zone=public --permanent --add-port=8100-8110/tcp
firewall-cmd --reload

vim /etc/firewalld/firewalld.conf
搜索:AllowZoneDrifiting  , 把对应的值 yes  改为 no

文件统计

ls -g |awk 'BEGIN{sum=0}{sum+=$4}END{print sum/(1024*1024*1024)}'