linux shell笔记(易忽略部分)

echo

echo -n 不加换行符
echo -e 解释转义符 (echo -e "hello \t world")

扩展: echo 'hello' > demo.txt -- 直接覆盖 echo 'hello' >> demo.txt -- 追加文本

cat显示行号

cat -n xx

tac 倒序打印文本

tac demo.txt

rev 反向打印每一行

echo "123456" | rev

mkdir

mkdir {a..c} 连续创建目录
mkdir {install,tmp}
mkdir -p /opt/test

rename

参数1: 文件名需要替换的字符串
参数2: 将文件名中含有的原字符替换成目标字符串
参数3: 指定要改变文件名的文件列表
rename .sh .sh.bak *.sh -- 将所有sh脚本文件名.sh 替换成.sh.bak
rename .htm .html *.htm -- 将所有.htm替换成.html

dirname 去除路径的最后一个名字

dirname /data/shell_script/while_sample.sh -> /data/shell_script
dirname /data/shell_script -> /data
dirname while_sample.sh -> .

cut 选取文件的每一行

-b 选中第几个字符
-c 选中多少个字符
-d 指定分隔符分字段,默认是空格
-f 显示选中字段
echo "abc" |cut -b "2" -> b
截取 abc 字符:
echo "abcdef" |cut -c 1-3 -> abc
以冒号分隔,显示第二个字段:
echo "a:b:c" |cut -d: -f2 -> b
打印文件的前1-3个字符(可以用于列分隔)
cat startup.sh |cut -c 1-3

stat 显示文件或文件的系统状态

stat start.sh

seq

seq 10 -> 1到10
seq 1 10 -> 1到10
seq 1 2 10 ->1到10,步长为2
seq -s "" 1 10 -> 指定分隔符 12345678910

shuf

seq 1 10|shuf
shuf -i 5-10

sort

-n 根据字符串数字排序
-r 倒序
seq 10|shuf|sort -n -> 根据字符串数字排序

uniq 去重重复行

sort file|uniq 去重
sort file |uniq -c ->打印重复行数

head 输出文件头几行

head -n 打印前多少行

ss

ss -nat ->显示所有tcp
ss -nlt ->显示listen的tcp连接
ss -nat|awk '{print $1}'|sort|uniq -c

77  CLOSE-WAIT
578 ESTAB
23  LISTEN
1   State

lsof

列出所有 TCP 网络连接:

lsof -i tcp

根据文件描述符列出打开的文件:
列出进程 ID 打开的文件:

lsof -p 5373

top

wa 等待 I/O 响应 CPU 时间 0.0%;
hi 硬中断;
si 软中断;
top -> 按f展示更多指标(展示code,data)

time 执行脚本的时间

time ls

echo不换行

-e 开启转义
-n 不换行
echo -ne

vim重要快捷键

enter -> 换行
nG -> 跳转到第n行
:1,$s/echo/ECHO/g ->替换所有行中的echo-ECHO

grep

grep -E ->正则 例如: grep -E '^21:03:50' acc.log
grep -i ->忽略大小写
grep -r ->递归
grep -o -> 只打印匹配的内容
grep -v -> 打印不匹配的行

  1. pidstat
    -u 默认的参数,显示各个进程的CPU使用统计
    -r 显示各个进程的内存使用统计
    -d 显示各个进程的IO使用情况
    -p 指定进程号
    -w 显示每个进程的上下文切换情况
    -t 显示选择任务的线程的统计信息外的额外信息
    pidstat -d -p 29976 1 5 -> 每隔一秒执行一次,总共5次

  2. pstree

  3. pstack 查看进程栈、线程栈
    pstack 2731
    也可查看线程栈

  4. perf
    全局统计程序运行状态 perf stat -p
    实时显示程序性能统计信息 perf top -p
    perf record -p -g -g代表保存调用关系图
    perf report 也可用插件可以展示火焰图
    实例:
    perf record -p -g 然后 perf report展示关系

  5. pmap 查看进程内存分配
    pmap -x

  6. 综合实战(top -Hp -> pstack )

  7. 利用TOP找出CPU占比最高的进程

  8. 利用pidstat -p 1 持续观察CPU的变化情况(例如: 是否周期性出现)

  9. 利用perf record -p -g 来记录一段时间内CPU的变化情况

  10. 利用perf report 来查看CPU最高的线程

  11. pidstat -p pid -t 查看线程信息

  12. pstack 查看线程工作的情况

######################################

shell 实战

######################################

  • shell中单引号、双引号区别
    单引号 所见即所得,即输出时会将单引号内的所有内容都原样输出,或者描述为单引号里面看到的什么就输出什么,这成为强引用
  • 双引号 输出双引号的所有内容;如果内容中有命令(要反引)、变量、特殊转义,会先把变量、命令、转义字符解析出结果
for ((i=0;i<10;i++))
do
   mod=$(($i%2))
   if [ $mod -eq 0 ];then
        echo "found num: $i"        ###  found num 0
        echo 'found number is: $i'  ###  found number is: $i
   fi
done

小于、等于 lt, gt
小于或等于 le
大于或等于 ge
不相等 ne

for i in `seq 1 20`
do
  if [ $i -lt 5 ];then
     echo "<5, num is: $i"
  elif [ $i -lt 10 ];then
     echo "<10, num is: $i"
  else
     echo "other, num is: $i"
  fi
done
  1. while语法, 自增
#!/bin/bash
num=1
while ((num<100))
do
   echo "num is: $num"
   ((num=num+5))
done
  1. 中括号(属性测试)
    -e 判断是否存在
    -d 判断是否为目录
    -f 判断是否为普通文件
    -r,-w,-x 判断是否可以读写执行
    如果目录不存在: [ ! -d xx ]
file=/data/tools/jdk1.8.tar.gz
if [ -e $file ];then
   echo "$file is existed"
else
   echo "$file is empty"
fi
  1. 双中括号(字符串比较) [[]]
for i in `seq 1 30`
do
   if [[ $i%2 != 0 && $i -gt 10 ]];then
        echo "bingo: $i"
   fi
done
  1. 大小写转换
hints="Hello,World, I love my company"
echo "toUpper: "${hints^^}  ### 大写
echo "toLower: "${hints,,}  ### 小写

你可能感兴趣的:(linux shell笔记(易忽略部分))