Linux Script 笔记

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

posted on   LambdaQ  阅读(40)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示