Linux Script 笔记
# 将 dos 下的换行符替换成 linux 的换行符
sed -i 's/\r//' filename
# 打印第一列字符串长度为 7 的行号
awk -F '|' '{if(length($1) == 7) print NR}'
# 显示在文件中匹配到 print 字符串的个数,并递归查找 . 文件夹
# 可以用于确认日志中的某一个字符串出没出现过。
grep -c "print" -r .
# 查看是否存在僵尸进程 -o 用户指定格式 stat, ppid 显示进程的状态和它的父进程进程 id
kill -9 `ps -A -ostat,ppid | grep -e '^[Zz]' | awk '{print $2}'`
# 逐行读入文件 common 中的行,并进行处理
#! /bin/bash
cat common | while read -r line
do
echo $line
done
# 只列出目录
ls -ltrhd */
# 以长格式只列出文件
ls -l | grep ^-
# 列出新安装的程序,最新安装的是最底部的 item
ls -lrt /usr/bin
# python3 开启 SimpleHttpServer
python3 -m http.server
# 可是化的空间分析程序 非系统自带
ncdu
# 资源监控 非系统自带
glances
# multitail 多重日志 非系统自带
multitail
# 笔记记录 非系统自带
cheat
# 图形文本编辑器 非系统自带
mc
# 计算器
echo "scale=2;[p#1 参数名 ]" | bc
# 打包
tar -czvf [p#1 参数名].tar.gz [p#2 参数名]
# 逐行输出文本文件并显示行号
nl [p#1 参数名]
# 显示当前登录用户的信息及他们所运行的进程
w
系统信息查询
# 查看 ip 地址
hostname -I
# 获取所有 MAC 地址
ip link show
# 获取你所来自的主机 IP
echo $SSH_CLIENT | cut -f 1 -d ' '
# 显示默认网关
route -n | grep "^0\." | awk '{print "Gateway to the World: "$2", via "$NF""}'
# 显示环境变量
echo $PATH | tr : \\n
# 获取内存信息
cat /proc/meminfo
# 查看可用内存
free -m | awk '{if(NR==2) print "freememory: " $3 " MB"}'
# 获取网关 ip 地址
netstat -nr | awk 'BEGIN {while ($3!="0.0.0.0") getline; print $2}'
# 查看 10 个吃内存的进程
ps -eo pmem,pid,comm --no-headers | sort -k1 -rn | head -10
# 排序使用最多的命令
history | awk '{print $2,$3}' | sed s/sudo// | awk '{print $1}' | awk 'BEGIN {FS="|"}{print $1}' | sort | uniq -c | sort -n | tail | sort -nr
# eth0 流量详情
ethtool -S eth0
# 删除所有 .DS_Store
find . -name .DS_Store -exec rm {}
# 寻找 10 大浪费资源的用户
du -sm /home/* | sort -nr | head -n 10
# 列出目录里的前 10 大文件
du -hs */ | sort -hr | head
目录浏览工具
tree
broot
nnn
系统测试命令
# 测试网络连接
ping 8.8.8.8
# 测试 IO 能力
dd if=/dev/zero of=test bs=64k count=16k conv=fdatasync
# 查看网络吞吐量
sudo tcpdump -w - | pv -bert >/dev/null
# 内存和处理器的带宽
dd if=/dev/zero of=/dev/null bs=1M count=32768
Profiler 工具
perf
strace
htop
stress
time
du #显示文件空间使用情况
ncdu #可交互的disk usage
df #显示文件系统磁盘使用情况
fdisk -l
nload
mkfs.vfat /dev/sda1 #格式化设备
mount /dev/sd1 ./dir #挂载设备
# bash 中使用数组
#!/bin/bash
lst=("DWA_V_M_CUS_ALL_ZCTMF2" "bcd" "efes" "aa")
for x in ${lst[@]};do echo "./dsdgen -scale 300 -table $x -dir ~/table/" ;done
# 查看 user 的登录 shell
#!/bin/bash
line="root:x:0:0:root:/root:/bin/bash"
oldIFS=$IFS
IFS=":"
count=0
for item in $line;
do
[ $count -eq 0 ] && user=$item;
[ $count -eq 6 ] && shell=$item;
((count++))
done;
IFS=$oldIFS
echo "$user's shell is $shell";
#!/bin/bash
# bash 分支语句语法
number1=10
number2=20
if [ $number1 -gt 0 -a $number2 -lt 30 ];then
echo "branch1 true";
fi
fpath='/etc/passwd'
if [ -e $fpath ];then
echo "File exists"
else
echo "Does not exist"
fi
str1="Not empty"
str2=""
if [[ -n $str1 ]] && [[ -z $str2 ]];
then
echo "str1 is nonempty and str2 is empty string."
fi
testvar=10
if [ $testvar -eq 10 ];then
echo "equal 10"
else
echo "not equal 10"
fi
testvar=0
if test $testvar -eq 0;then
echo "equal 0"
else
echo "not equal 0"
fi
andvar1="andvar1"
andvar2="andvar2"
orvar1="orvar1"
orvar2="orvar2"
if [[ $andvar1 != $andvar2 ]] || [[ $orvar1 == $orvar2 ]];then
echo "true";
elif [[ -n $andvar1 ]] && [[ -n $andvar2 ]];then
echo "false";
else
echo "else";
fi
# 分离文件名和其扩展名
#! /bin/bash
# 当父脚本退出时杀掉其打开的所有进程
trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT
# set -x 在执行命令是先打印该命令,set +x 取消打印
# set -e 当执行命令失败,立刻结束
# set -u 如果脚本试图使用一个未定义的变量,脚本将立即退出
# set -o pipefail 整个管道命令的退出状态将由管道中第一个失败的命令决定
set -euxo pipefail
file_jpg="Sample.jpg"
echo ${#file_jpg} # ${#var} 求字符串串长
name=${file_jpg%.*}
echo "File name is : $name"
extension=${file_jpg#*.}
echo "extension is : $extension"
#timeout 0.1s echo "abc" #对命令设置超时时间
#${VAR%.*} 删除%右侧的通配符所所匹配到的字符串,从右向左遍历,非贪婪. $$贪婪
#${VAR#*.} 删除#右侧的通配符所匹配到的字符串,从左向右遍历非贪婪. ##贪婪
# 遍历指定目录 $dir 下所有的 .sh 文件,并在 for 循环中对每个 .sh 文件进行操作
#!/bin/bash
dir="/path/to/directory" # 指定目录路径
for file in $(ls $dir | grep .sh)
do
echo "Processing $file"
# 在这里可以添加对每个.sh文件的操作
done
#!/bin/bash
# bash 的 switch case
abc="abcd aaa bbb ccc eee temspa"
for i in $abc
do
case $i in
"abcd")
echo 1
;;
"aaa")
echo 2
;;
"bbb")
echo 3
;;
"ccc")
echo 4
;;
"eee")
echo 5
;;
"temspa")
echo 6
;;
*)
echo -1
;;
esac
done
# test.sh
echo "param number:$#"
echo "scname:$0"
echo "first:$1"
echo "second:$2"
echo "argume:$@"
echo "show parm list str:$*"
echo "show process id:$$"
# 上一个命令执行后的退出码
echo "show procomm stat:$?"
# 执行 ./test.sh a b c 后的结果如下所示
# param number:3
# scname:./test.sh
# first:a
# second:b
# argume:a b c
# show parm list str:a b c
# show process id:1665311
# show procomm stat:0