取前缀后缀
- 给个例子, 自己体会吧:
file_name=name_prefix.1.2.3.4
echo "=================="
echo "${file_name}"
echo "${file_name%%.*}"
echo "${file_name%.*}"
echo "${file_name#*.}"
echo "${file_name##*.}"
basename $file_name .4
basename $file_name .3.4
- 输出:
==================
name_prefix.1.2.3.4
name_prefix
name_prefix.1.2.3
1.2.3.4
4
name_prefix.1.2.3
name_prefix.1.2
set
set -e
: 当脚本中任何一个命令执行返回的状态码不为0时就退出整个脚本;(默认脚本运行中某行报错会继续往下执行)。set -u
: 当脚本在执行过程中尝试使用未定义过的变量时,报错并退出运行整个脚本(默认会把该变量的值当作空来处理)。这个选项非常重要,想象一下rm -rf ${var1}/
set -x
: 显示脚本执行过程并将脚本内的变量的值暴露出来;set -o pipefail
: 管道命令参与debug断点模式,shell默认会认为管道命令是一个整体,是与 | 的关系,set -o pipefail 更改为与或||,也就是管道命令参与。
du
- 常用命令:
du -sh . # -s选项,是 --summarize 的缩写形式,其作用是对 du 的每一个给定参数计算其磁盘使用量
# 而-c选项,是 --total 的缩写形式,它表示的是针对输出的各个对象来计算其磁盘使用量的总和
du -ah --exclude="*/.*" . # 排除隐藏文件
du -ah --max-depth=1 | sort -rh
# sort -n选项,按数值进行比较,只会傻傻地比较数字,它会认为 98 K大于 2G。
# -h选项,会更加聪明,先优先比较单位(G>M>K),然后再对数值进行比较。
lsof
- 有时会出现这样的情况,磁盘空间(df -Th)显示已经被占满,但是在查看磁盘的具体文件占用情况(du -h --max-depth=1)时,发现磁盘仍然有很大的空余空间。
- 这是因为虽然文件已被删除,但是一些进程仍然打开这些文件,因此其占用的磁盘空间并没有被释放. 执行lsof 命令显示打开已删除的文件:
lsof | grep deleted
CPU
-
逻辑CPU个数:
cat /proc/cpuinfo | grep 'processor' | wc -l
-
物理CPU个数:
cat /proc/cpuinfo | grep 'physical id' | sort | uniq | wc -l
-
每个物理CPU中Core的个数:
cat /proc/cpuinfo | grep 'cpu cores' | wc -l
find
find / -path /proc -prune -o -path /var -prune -o -path /etc -prune -o -iname AA* -print
: 查找 “AA” 开头的文件,并排除 /proc、/var、/etc 目录(不在这3个目录下搜索)
grep
grep -r "str" ./
:在当前目录所有文件中下查找 str 字符串
locate
- 模糊查找:
locate -r abc*.log
;-r 代表正则匹配
printf
printf "%d" 0x4B59
:16进制转10进制
邮件
mail
:查看邮件列表(没安装会提示 command not found)file
:查看一共多少封邮件,键入数字可直接查看对应邮件q
:从邮件阅读模式退出
cat /proc/net/tcp
#!/bin/bash
port_hex=`printf "%x\n" $1`
cat /proc/net/tcp | grep -i $port_hex
inode_num=`cat /proc/net/tcp | grep -i $port_hex| awk '{print $10}'`
arr=`ps -e| grep java | awk '{print $1}'`
for this_pid in ${arr[@]};do
ls -l /proc/$this_pid/fd/ 2>/dev/null | grep inode_num
if [ $? -eq 0 ]; then
echo $this_pid
break
fi
done
ss
ss -lnp
:- l : Display listening sockets;
- n:Do now try to resolve service names
- p:Show process using socket
好用的例子
ps -aux | sort -rnk 4 | head -20
: 找出当前系统内存使用量较高的进程, 输出的第4列(sort 对第4列排序)就是内存的使用百分比;ps -aux | sort -rnk 3 | head -20
: 找出当前系统CPU使用量较高的进程, 输出的第3列(sort 对第3列排序)为 CPU 的使用百分比;multitail
: 同时查看多个日志或数据文件(需要安装);netstat -anlp|grep 8888|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20
: 查找8888端口请求数最高的前20个IP,awk -F:
- 指定分隔符为:
冒号