- kubectl命令设置别名
- rinetd配置端口转发
- 统计系统当前打开的文件数
- dmesg命令输出的时间戳转换为utc时间
- 删除磁盘设备的文件系统
- linux逻辑卷分配vg的所有空闲容量
- PyCharm 2019.3.3激活码
- nc命令使用
- grep
- 修改历史命令格式
- 查看centos是虚拟还是物理机
- 添加静态路由
- 查看服务器产品型号
- sftp命令使用
- markdown字体设置
- 修改网页内容
- 修改编码方式为zh_CN.UTF-8
- 服务器初始化必备工具安装
- 设置acl权限
- 查看cpu相关信息
- 查看rpc及nfs所用端口
- tcpdump抓包
- 修改系统时间
- iptables将80端口的流量转发至443端口
- 查看系统可用内核
- 服务器出口IP查询
- 使CPU使用率接近百分百
- yum下载某个服务所需的包文件并安装
- 查看某个目录下容量占用最多的前10个文件或目录
- 查找占用内存资源最多的前10个进程
- 查找占用CPU资源最多的前10个进程
- awk
- getopts
- getopts使用
- fgrep命令
- pkill
- 脚本执行,获取脚本所在路径
- echo输出颜色
- 解析srv记录
- tr分隔符
- 查看timewait的连接数
- 获取系统当前时间
- 获取系统时间
- 获取本机的内网IP
- 显示目录结构各级的权限
kubectl命令设置别名
pexec() {
echo $1
kubectl exec -it $1 -n tce -- /bin/bash
}
alias pe=pexec
alias ke=pexec
pexec2() {
kubectl -n tce get pod $1 -o yaml | grep image:
}
alias pi=pexec2
alias k='kubectl -n tce '
alias kd='kubectl delete pod -n'
alias ke='pexec'
alias kg='kubectl get pod --all-namespaces -o wide |grep '
alias kgs='kubectl get svc --all-namespaces -o wide |grep '
alias kgtce='kubectl get pod -n tce -o wide |grep '
alias kp='kubectl -n tce get po | grep '
alias ks='kubectl -n tce get svc | grep '
alias na='kubectl get node -o wide'
alias nd='kubectl describe node'
alias nlab='kubectl get node --show-labels'
alias pa='kubectl get pod --all-namespaces -o wide'
alias pag='kubectl get pod --all-namespaces -o wide |grep '
alias pagw='kubectl get pod --all-namespaces -o wide -w |grep'
alias paw='kubectl get pod --all-namespaces -o wide -w '
alias pd='kubectl -n tce describe pod'
alias pl='kubectl -n tce logs'
alias sa='kubectl get svc --all-namespaces -o wide'
alias sag='kubectl get svc --all-namespaces -o wide |grep '
alias sagw='kubectl get svc --all-namespaces -o wide -w |grep'
alias saw='kubectl get svc --all-namespaces -o wide -w '
alias sd='kubectl -n tce describe svc'
rinetd配置端口转发
rinetd用于将 TCP 连接从一个 IP 地址和端口重定向到另一个。rinetd 是一个单进程服务器,它处理与文件中指定的地址/端口对的任意数量的连接/etc/rinetd.conf。由于 rinetd 使用非阻塞 I/O 作为单个进程运行,因此它能够重定向大量连接而不会对机器造成严重影响。这使得在 IP 伪装防火墙内的机器上运行 TCP 服务变得切实可行。rinetd不会重定向 FTP,因为 FTP 需要多个套接字。
参考:
# 配置yum源
cat > /etc/yum.repos.d/nux-misc.repo << EOF
[nux-misc]
name=Nux Misc
baseurl=http://li.nux.ro/download/nux/misc/el6/x86_64/
enabled=0
gpgcheck=1
gpgkey=http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
EOF
# 安装
yum -y --enablerepo=nux-misc install rinetd
# 配置将本机80端口的流量转发到192.168.20.2的8081端口
cat >> /etc/rinetd.conf << EOF
0.0.0.0 80 192.168.20.2 8081
EOF
# 启动服务并设置为开机自启
systemctl start rinetd
/sbin/chkconfig rinetd on
# 确认端口已监听
ss -lnpt | grep -w 80
LISTEN 0 5 *:80 *:* users:(("rinetd",pid=8181,fd=4))
# 访问测试
$ curl http://192.168.20.2:8081
it's ok
$ curl http://127.0.0.1
it's ok
统计系统当前打开的文件数
不要使用lsof | wc -l
统计打开的文件数,lsof 的功能是列出打开的文件,在 man 手册的 lsof 描述中,它有一段解释:
An open file may be a regular file, a directory, a block special file, a character special file, an executing text reference, a library, a stream or a network file (Internet socket, NFS file or UNIX domain socket.)
它解释道:“一个打开的文件可以是一个普通文件、一个目录、一个块状文件、一个字符文件、一个执行中的文本引用、一个库、一个流或一个网络文件(网络套接字、NFS 文件或 UNIX 域套接字”
问题在于, lsof 列出所有打开的文件,包括不使用文件描述符的文件,所以使用 lsof |wc -l 统计出来的数目,会大于 FD 的 file-max,从而没法确定真正大量使用 FD 的进程。
这个坑,是跟着自己的片面理解和搜索引擎上的“引导”,两脚踩了进去……
正确的命令如下:
$ cd /proc
$ find -maxdepth 1 -type d -name '[0-9]*' | xargs -I {} ls {}/fd | wc -l
dmesg命令输出的时间戳转换为utc时间
# 将下面的 1303636.649363 替换为你dmesg命令输出的第一列中的时间戳
$ date -d "1970-01-01 UTC `echo "$(date +%s)-$(cat /proc/uptime|cut -f 1 -d' ')+1303636.649363"|bc ` seconds"
删除磁盘设备的文件系统
$ wipefs -af /dev/vdb
linux逻辑卷分配vg的所有空闲容量
# data_vg是卷组名称,lv是要创建的逻辑卷名称
$ lvcreate -l 100%FREE -n lv data_vg
PyCharm 2019.3.3激活码
JQE11SV0BR-eyJsaWNlbnNlSWQiOiJKUUUxMVNWMEJSIiwibGljZW5zZWVOYW1lIjoicGlnNiIsImFzc2lnbmVlTmFtZSI6IiIsImFzc2lnbmVlRW1haWwiOiIiLCJsaWNlbnNlUmVzdHJpY3Rpb24iOiIiLCJjaGVja0NvbmN1cnJlbnRVc2UiOmZhbHNlLCJwcm9kdWN0cyI6W3siY29kZSI6IklJIiwiZmFsbGJhY2tEYXRlIjoiMjA4OS0wNy0wNyIsInBhaWRVcFRvIjoiMjA4OS0wNy0wNyJ9LHsiY29kZSI6IkFDIiwiZmFsbGJhY2tEYXRlIjoiMjA4OS0wNy0wNyIsInBhaWRVcFRvIjoiMjA4OS0wNy0wNyJ9LHsiY29kZSI6IkRQTiIsImZhbGxiYWNrRGF0ZSI6IjIwODktMDctMDciLCJwYWlkVXBUbyI6IjIwODktMDctMDcifSx7ImNvZGUiOiJQUyIsImZhbGxiYWNrRGF0ZSI6IjIwODktMDctMDciLCJwYWlkVXBUbyI6IjIwODktMDctMDcifSx7ImNvZGUiOiJHTyIsImZhbGxiYWNrRGF0ZSI6IjIwODktMDctMDciLCJwYWlkVXBUbyI6IjIwODktMDctMDcifSx7ImNvZGUiOiJETSIsImZhbGxiYWNrRGF0ZSI6IjIwODktMDctMDciLCJwYWlkVXBUbyI6IjIwODktMDctMDcifSx7ImNvZGUiOiJDTCIsImZhbGxiYWNrRGF0ZSI6IjIwODktMDctMDciLCJwYWlkVXBUbyI6IjIwODktMDctMDcifSx7ImNvZGUiOiJSUzAiLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiUkMiLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiUkQiLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiUEMiLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiUk0iLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiV1MiLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiREIiLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiREMiLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiUlNVIiwiZmFsbGJhY2tEYXRlIjoiMjA4OS0wNy0wNyIsInBhaWRVcFRvIjoiMjA4OS0wNy0wNyJ9XSwiaGFzaCI6IjEyNzk2ODc3LzAiLCJncmFjZVBlcmlvZERheXMiOjcsImF1dG9Qcm9sb25nYXRlZCI6ZmFsc2UsImlzQXV0b1Byb2xvbmdhdGVkIjpmYWxzZX0=-khgsQrnDiglknF0m+yyoYGJXX4vFE3IIVaoMd0bkpfAlMiYM4FUK1JM7uMnVSN0NBC7qtZjYlNzPscEyKE8634uGuY/uToFQnIOCtyUfBxB6j0wF/DcCjhKMNDbnJ1RKZ2VaALuC9B6d6lhtEKm9+urXWTBq7h2VfIBv5wk1Ul9T/m9Dwkz/LccTqnxO0PP288fF13ZbmcLI1/D0dqp/QxYshW6CLR+2Tvk6QCPoaOTKDU/eL1AssD7/mO1g2ZJA+k//8qfRMLgdLmLrMdyiaIhrsM/jJk2qDfTaMcCNylkWXLgKwSvEQG95IhitLN9+GQ4pBW3gOTNl82Gem7jEkA==-MIIElTCCAn2gAwIBAgIBCTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTE4MTEwMTEyMjk0NloXDTIwMTEwMjEyMjk0NlowaDELMAkGA1UEBhMCQ1oxDjAMBgNVBAgMBU51c2xlMQ8wDQYDVQQHDAZQcmFndWUxGTAXBgNVBAoMEEpldEJyYWlucyBzLnIuby4xHTAbBgNVBAMMFHByb2QzeS1mcm9tLTIwMTgxMTAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5ndaik1GD0nyTdqkZgURQZGW+RGxCdBITPXIwpjhhaD0SXGa4XSZBEBoiPdY6XV6pOfUJeyfi9dXsY4MmT0D+sKoST3rSw96xaf9FXPvOjn4prMTdj3Ji3CyQrGWeQU2nzYqFrp1QYNLAbaViHRKuJrYHI6GCvqCbJe0LQ8qqUiVMA9wG/PQwScpNmTF9Kp2Iej+Z5OUxF33zzm+vg/nYV31HLF7fJUAplI/1nM+ZG8K+AXWgYKChtknl3sW9PCQa3a3imPL9GVToUNxc0wcuTil8mqveWcSQCHYxsIaUajWLpFzoO2AhK4mfYBSStAqEjoXRTuj17mo8Q6M2SHOcwIDAQABo4GZMIGWMAkGA1UdEwQCMAAwHQYDVR0OBBYEFGEpG9oZGcfLMGNBkY7SgHiMGgTcMEgGA1UdIwRBMD+AFKOetkhnQhI2Qb1t4Lm0oFKLl/GzoRykGjAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBggkA0myxg7KDeeEwEwYDVR0lBAwwCgYIKwYBBQUHAwEwCwYDVR0PBAQDAgWgMA0GCSqGSIb3DQEBCwUAA4ICAQBonMu8oa3vmNAa4RQP8gPGlX3SQaA3WCRUAj6Zrlk8AesKV1YSkh5D2l+yUk6njysgzfr1bIR5xF8eup5xXc4/G7NtVYRSMvrd6rfQcHOyK5UFJLm+8utmyMIDrZOzLQuTsT8NxFpbCVCfV5wNRu4rChrCuArYVGaKbmp9ymkw1PU6+HoO5i2wU3ikTmRv8IRjrlSStyNzXpnPTwt7bja19ousk56r40SmlmC04GdDHErr0ei2UbjUua5kw71Qn9g02tL9fERI2sSRjQrvPbn9INwRWl5+k05mlKekbtbu2ev2woJFZK4WEXAd/GaAdeZZdumv8T2idDFL7cAirJwcrbfpawPeXr52oKTPnXfi0l5+g9Gnt/wfiXCrPElX6ycTR6iL3GC2VR4jTz6YatT4Ntz59/THOT7NJQhr6AyLkhhJCdkzE2cob/KouVp4ivV7Q3Fc6HX7eepHAAF/DpxwgOrg9smX6coXLgfp0b1RU2u/tUNID04rpNxTMueTtrT8WSskqvaJd3RH8r7cnRj6Y2hltkja82HlpDURDxDTRvv+krbwMr26SB/40BjpMUrDRCeKuiBahC0DCoU/4+ze1l94wVUhdkCfL0GpJrMSCDEK+XEurU18Hb7WT+ThXbkdl6VpFdHsRvqAnhR2g4b+Qzgidmuky5NUZVfEaZqV/g==
nc命令使用
使用nc传文件
主机A(192.168.20.2)要把文件(b.zip)传给主机B(192.168.20.3),命令如下:
# 主机B:
$ nc -l 1234 > b.zip
# 主机A:
$ nc 192.168.20.3 1234 < b.zip
# 主机B确认收到文件
$ ll b.zip # 文件已存在
-rw-r--r-- 1 root root 131246 6月 19 22:42 b.zip
测试UDP端口连通性
$ nc -vuz 192.168.20.2 5162 # 返回如下表示连接成功
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.20.2:5162.
Ncat: UDP packet sent successfully
Ncat: 1 bytes sent, 0 bytes received in 2.01 seconds.
grep
过滤IP地址
# 匹配数字0-9和. 连续出现三次以上
$ awk '{print $1}' access.log | egrep "([0-9]{1,3}\.)"{3}
修改历史命令格式
$ tail -1 /etc/profile
export HISTTIMEFORMAT="%F %T `whoami` "
查看centos是虚拟还是物理机
>>> dmidecode -s system-product-name
OpenStack Nova
添加静态路由
# 配置临时静态路由(重启机器或network服务后,路由失效)
$ route add -net 192.30.0.0/16 gw 192.168.20.1 dev eth0
# 使静态路由永久生效
$ echo "any net 192.30.0.0/16 gw 192.168.20.1 dev eth0" >> /etc/sysconfig/static-routes
# /etc/sysconfig/static-routes 文件可能没有,没关系,新建即可
查看服务器产品型号
$ dmidecode -s system-product-name
PowerEdge R730
sftp命令使用
# sftp指定端口号登录
$ sftp -P 32222 sftp_username@1.1.1.1
markdown字体设置
<font face="微软雅黑" color=red size=4>4号红色微软雅黑字体</font>
# face :定义字体,如宋体、微软雅黑、黑体、华文彩云等。
# color:定义字体颜色,如red、yellow、gree等。
# size :定义字体大小,最大值为72.
修改网页内容
此技巧不是用来装13的,而是…. 你有没有遇到过那种不能复制的网页?对,没错,你可以这样操作,然而会发现还是不能复制,不过….可以剪切,哈哈。
document.body.contentEditable='true';
修改编码方式为zh_CN.UTF-8
locale
export LANG=zh_CN.UTF-8
localectl set-locale LANG=zh_CN.UTF8
服务器初始化必备工具安装
yum -y install wget
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all && yum makecache
yum -y install lrzsz git iproute vim traceroute tree zip unzip iftop nload net-tools nmap tcpdump gcc
设置acl权限
$ setfacl -Rm u:llyxpt:rwx apache-flume-1.9.0-bin
# getfacl : 查看acl权限
查看cpu相关信息
# 查看物理cpu个数
$ grep 'physical id' /proc/cpuinfo| sort | uniq | wc -l
# 查看单个cpu的核心数
$ grep 'cpu cores' /proc/cpuinfo | uniq
# 查看逻辑cpu个数
$ grep 'processor' /proc/cpuinfo| wc -l
查看rpc及nfs所用端口
rpc服务所用端口不固定(通过ss或netstash有些端口查不到是对应的哪个服务),有时候我们需要统计系统是否有非正常的端口,可以使用此指令来确定rpc及nfs所用端口。
$ rpcinfo -p
tcpdump抓包
抓取69.89通过80请求的数据包并保存为文件。
$ tcpdump -i eth0 host 218.206.69.89 and port 80 -s 0 -w /tmp/218.206.69.89.cap -vvv
修改系统时间
用于机房环境中没有ntp及无法出外网时手动修改系统时间。
$ hwclock --set --date "2020-09-22 19:04:00" # 修改硬件时间
$ hwclock --hctosys # 同步系统时间和硬件时间
$ clock -w # 保存
# 查看硬件时间和系统时间是否同步
$ hwclock --show
$ date
iptables将80端口的流量转发至443端口
$ iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 443
$ iptables-save
查看系统可用内核
$ awk -F \' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux (4.4.223-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core)
2 : CentOS Linux (0-rescue-caa6eb0d160246d39e7c615ab7f61304) 7 (Core)
服务器出口IP查询
# 方法1
[5::root@lv::~]# >>>curl myip.ipip.net
当前 IP:218.xxx.xxx.xxx 来自于:中国 北京 北京 移动
# 方法2
[6::root@lv::~]# >>>curl cip.cc
IP : 218.xxx.xxx.xxx
地址 : 中国 北京
运营商 : 移动
数据二 : 北京市 | 移动
数据三 :
URL : http://www.cip.cc/218.205.209.238
# 方法3
[8::root@lv::~]# >>>curl ipinfo.io
{
"ip": "218.xxx.xxx.xxx",
"city": "Beijing",
"region": "Beijing",
"country": "CN",
"loc": "39.9075,116.3972",
"org": "AS56048 China Mobile Communicaitons Corporation",
"timezone": "Asia/Shanghai",
"readme": "https://ipinfo.io/missingauth"
}
使CPU使用率接近百分百
for i in `seq 1 $(cat /proc/cpuinfo |grep "physical id" |wc -l)`; do dd if=/dev/zero of=/dev/null & done
yum下载某个服务所需的包文件并安装
此功能用于服务器不能和外网通信,安装某个服务时需要先在能上外网的主机上下载rpm包,然后进行安装。
# 在本机未安装此服务时使用以下指令:
$ yum install --downloadonly --downloaddir=/tmp/httpd/ httpd
# 仅下载httpd服务所需的rpm包,而不安装
# --downloaddir:指定下载的rpm包存放路径
# 若本机已安装此服务,则使用reinstall选项即可
$ yum reinstall --downloadonly --downloaddir=/tmp/httpd/ httpd
# 当rpm包下载后打包到其他主机上,可以使用以下指令安装
$ yum -y localinstall /tmp/httpd/*
查看某个目录下容量占用最多的前10个文件或目录
$ du -sh /var/log/* 2> /dev/null | sort -nr | head -10
查找占用内存资源最多的前10个进程
$ ps -auxf | sort -nr -k 4 | head -10
# sort指令中的“-k”选项是以空格为间隔,要依据第几列进行排序
查找占用CPU资源最多的前10个进程
$ ps -auxf | sort -nr -k 3 | head -10
awk
[root@mysql nginx]# awk 'substr($9,1,3)>200' access.log
#查看访问日志中,过滤非200状态码的日志请求
# substr($4,20) :表示从第四个字段里的第20个字符开始,一直到设定的分隔符 结束
# substr($4,1,3) :表示从第四个字段里的第1个字符开始,截取3个字符结束
# substr($4,3,6) : 表示从第四个字段里的第3个字符开始,截取6个字符结束
[root@nginx ~]# awk -F \' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core)
1 : CentOS Linux (0-rescue-caa6eb0d160246d39e7c615ab7f61304) 7 (Core)
# \':对单引号进行转义,表示以单引号进行分隔。
# $1=="menuentry:表示如果位置1变量的值是menuentry。
# {print i++ " : " $2}:则打印$2的值,i++表示在输出的信息开头增加序列号
# 如果$9 等于 403,则打印整条记录
$ awk '{if ($9 == 403) print $0}' access.log
awk查找特定时间段的日志
# 日志格式如下
10.252.201.136 - - [27/Apr/2020:00:00:01 +0800] "POST /api-stkp/callback HTTP/1.1" 200 221 "-" "Java/1.8.0_77"
# 过滤2020年4月29日的7:00到10:30的日志
cat access.log | awk '$4 >= "[29/Apr/2020:07:00:00" && $4 <= "[29/Apr/2020:10:30:35"' > nginx.log
使用awk统计nginx日志中每个独立ip的访问次数
$ awk '{print $1}' access.log | sort | uniq -c | sort -rn
getopts
getopts指定参数,获取值。同样还有一个作用类似的选项getopt,可以自行百度查看其区别。
getopts使用
[root@mysql nginx]# vim test.sh #脚本内容如下
#!/usr/bin/env bash
while getopts ":h:p:" optname;do
case "$optname" in
"h")
host_ip=$OPTARG
;;
"p")
host_port=$OPTARG
;;
"?" )
echo "不知道此选项"
;;
esac
done
echo "IP是${host_ip},端口是${host_port}"
#执行效果如下
[root@mysql nginx]# sh test.sh -h 192.168.20.2 -p 3306
IP是192.168.20.2,端口是3306
[root@mysql nginx]# sh test.sh -p 22 -h 192.168.20.3
IP是192.168.20.3,端口是22
在上面的脚本中,while后面的getopts关键字是必须的,引号中的h、p是可选自定义的,对应的是命令行-h、-p等指定的选项,optname也是自定义的,只要和case语句后引用的变量名称对应即可。在case语句下,需要给哪些选项赋值,则写多少就行,一般和getopts后面指定的选项对应。
fgrep命令
[root@mysql ~]# fgrep -c "hello" test.txt #显示hello字符在test.txt文件中匹配行的数目
[root@mysql ~]# fgrep -l "hello" test.txt #显示匹配hello的文件名
pkill
[root@mysql ~]# pkill -kill -t pts/1 #断掉连接当前终端的用户
脚本执行,获取脚本所在路径
大多数时候都是在脚本所在的目录下执行脚本,在脚本中使用pwd指令就可以获得所在路径,下面的语法是当没有在脚本所在路径执行脚本时,获取脚本所在路径的语法。
cur_dir=$(cd $(dirname ${BASH_SOURCE[0]}); pwd)
echo输出颜色
# 字背景颜色范围:30—–37
echo -e "\033[30m 黑色字 \033[0m"
echo -e "\033[31m 红色字 \033[0m"
echo -e "\033[32m 绿色字 \033[0m"
echo -e "\033[33m 黄色字 \033[0m"
echo -e "\033[34m 蓝色字 \033[0m"
echo -e "\033[35m 紫色字 \033[0m"
echo -e "\033[36m 天蓝字 \033[0m"
echo -e "\033[37m 白色字 \033[0m"
# 字背景颜色范围:40—–47
echo -e "\033[40;37m 黑底白字 \033[0m"
echo -e "\033[41;37m 红底白字 \033[0m"
echo -e "\033[42;37m 绿底白字 \033[0m"
echo -e "\033[43;37m 黄底白字 \033[0m"
echo -e "\033[44;37m 蓝底白字 \033[0m"
echo -e "\033[45;37m 紫底白字 \033[0m"
echo -e "\033[46;37m 天蓝底白字 \033[0m"
echo -e "\033[47;30m 白底黑字 \033[0m"
# 最后控制选项
\33[0m 关闭所有属性
\33[1m 设置高亮度
\33[4m 下划线
\33[5m 闪烁
\33[7m 反显
\33[8m 消隐
\33[30m — \33[37m 设置前景色
\33[40m — \33[47m 设置背景色
\33[nA 光标上移n行
\33[nB 光标下移n行
\33[nC 光标右移n行
\33[nD 光标左移n行
\33[y;xH设置光标位置
\33[2J 清屏
\33[K 清除从光标到行尾的内容
\33[s 保存光标位置
\33[u 恢复光标位置
\33[?25l 隐藏光标
\33[?25h 显示光标
解析srv记录
# 使用nslookup
$ nslookup
> set q=srv
> api.qichacha.com
# 使用dig命令
$ dig api.qichacha.com -t srv
tr分隔符
testinfo="python,java,php"
for i in $testinfo;do
echo $testinfo | tr ',' '\n' #将逗号隔开,\n换行
done
#结果输出:
python
java
php
# 使用-拼接
testinfo="python,java,php";for i in $testinfo;do echo $testinfo | tr ',' '-'; done
python-java-php
查看timewait的连接数
ss -tan state time-wait | wc -l
获取系统当前时间
[root@mysql ~]# date +%Y.%m.%d-%H:%M:%S
2020.01.03-22:47:46
[root@mysql ~]# date '+%F %T'
2020-01-03 22:47:50
获取系统时间
[root@mysql ~]# date -d '-30 minutes' "+%F %T" #获取三十分钟前的时间
2020-01-03 22:20:56
[root@mysql ~]# date -d yesterday "+%F %T" #获取前一天的时间
2020-01-02 22:51:45
获取本机的内网IP
ip addr | grep inet | egrep -v '(127.0.0.1|inet6|docker)' | awk '{print $2}' | tr -d "addr:" | head -n 1 | cut -d / -f1
显示目录结构各级的权限
namei -om /var/log/messages