linux各種shell特色指令碼使用

2021-09-19 07:39:03 字數 4131 閱讀 1941

目錄

1 gdb斷點資訊收集自動化

2 objdump檢視過大可執行檔案上的指定函式彙編

3 定製 linux 協議棧引數(修改 /etc/sysctl.conf)

鑑於在故障現場使用gdb跟蹤,設定斷點,列印斷點處資訊存在一定的時間差,且有造成單板重啟或影響業務等問題,採用指令碼實現自動化操作。

指令碼實現:./auto_gdb.sh 」程序號「 」斷點「   

舉例:[root@localhost auto_gdb]# ./auto_gdb.sh 3565 ros_comm_periodic_send

gdb start.

gdb end.

see theout_info.logunder the current path for results information

說明:程序號用ps -ef檢視、斷點資訊結果在當前路徑下的out_info.log檔案中

指令碼檔案:auto_gdb.sh

意見:新增風險提示

auto_gdb.sh:

#!/bin/bash

process_id=$1

breakpoint=$2

if [ "$process_id" = "" -o "$breakpoint" = "" ]; then

echo "usage:   

auto_gdb.sh process_id break_point

example: 

auto_gdb.sh 123456 test_func/test_file.c:100"

exit -1

fiecho "gdb start."

gdb=gdb

$gdb --quiet -nx -p $process_id <./out_info.log

b $breakpoint

continue

backtrace

info registers

eofecho "gdb end."

echo "see the out_info.log under the current path for results information"

使用objdump檢視指定函式的彙編**,鑑於bgw檔案過大,採用objdump -d  bgw  > temp.txt後,temp.txt的大小在230m左右,無法用文字開啟。

管道 + grep指令無法看全func的全部彙編。

指令碼實現:./objdump-function.sh 」可執行檔案「 「函式名」

舉例:[root@localhost auto_gdb]#./objdump-function.sh test*** func1

start-address: 0x0000000000df5a40, end-address: 0x0000000000df5ad0

bgw: file format elf64-x86-64

disassembly of section .text:

0000000000df5a40 <func1>:

df5a40: 55 push %rbp

.....

df5a61: e8 5a 28 00 00 callq df82c0

df5a66: 41 0f b7 d6 movzwl %r14w,%edx

.....

df5ac6: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1)

df5acd: 00 00 00

指令碼檔案:objdump-function.sh

objdump-function.sh:

#!/bin/bash

exe=$1 

func_name=$2 

if [ -z "$exe" ]; then 

echo "usage : $0 exe func_name"

exit 

fi  

startaddress=$(nm -n $exe | grep -w "$func_name" | awk '') 

endaddress=$(nm -n $exe | grep -w -a1 "$func_name" | awk '') 

if [ -z "$func_name" ]; then 

echo "dump all func_name"

objdump -d $exe 

else 

echo "start-address: $startaddress, end-address: $endaddress" 

objdump -d $exe --start-address=$startaddress --stop-address=$endaddress

fi

通過修改 sysctl.conf 可以做永久生效(網路服務重啟不丟失),通過指令sysctl -p /etc/sysctl.conf實現生效寫入檔案的協議棧引數即來看載入到對應的檔案節點。 

通過通過 sysctl -w 指令或者 echo 直接將待修改值寫入檔案節點(網路系統服務重啟後引數丟失)

update_prot_stack_para_ex.sh**如下:

#!/bin/bash

#ps:重啟網路系統配置不會丟失

sysctl_cfg_file="/etc/sysctl.conf"

para_update_flag="####new modified protocol stack parameters####"

#tc8失敗用例列表,後續增加測試失敗在此處新增即可

tc8_cases=(

tc8_tcp_retransmission_to_09="net.ipv4.tcp_syn_retries = 9"

tc8_ipv4_addressing_01="net.ipv4.icmp_echo_ignore_broadcasts = 0"

)function prots_para_update_check()

#遍歷 tc8_cases 陣列

function prots_para_update_write();i++)) do

tc8_case=$( echo $ | cut -d '=' -f 2-)

echo $tc8_case >> $sysctl_cfg_file

done;

return 0

}function prots_para_update_enable()

function prots_para_recover_check()

function prots_para_update()

function prots_para_recover()

#指令碼從此處執行

case $1 in

"update")

prots_para_update

;; "recover")

prots_para_recover

;; *)

echo "please input cmd para: update or recover"

;;esac

通過 sysctl -w 指令或者 echo 直接將待修改值寫入檔案節點:

#!/bin/bash

#ps:重啟網路系統配置丟失

#sysctl指令

#tc8_tcp_retransmission_to_09

#sysctl -w net.ipv4.tcp_syn_retries=9

#tc8_ipv4_addressing_01

#sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=0

#echo指令

echo 9 > /proc/sys/net/ipv4/tcp_syn_retries

echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

linux重啟tomcat的shell指令碼

基本思路 先檢查待重啟的tomcat的程序是否存在 存在則執行shutdown.然後再次檢查程序是否還存在,不存在則執行kill 然後刪除工作空間及10天前的日誌。最後執行啟動。bin sh tomname 1 ctompath opt tomcats echo restart tomcat sta...

linux下mysql冷備份shell指令碼

usr bin env bash 資料庫基礎資訊 db host 127.0.0.1 本機 db name 1 要備份的庫名 db user root 使用者名稱 db pass root 密碼 date date y m d h m s mysql path data mysql bak 備份路徑...

Linux Makefile與shell指令碼區別

在makefile可以呼叫shell指令碼,但是makefile和shell指令碼是不同的。本文試著歸納一下makefile和shell指令碼的不同。1 shell中所有引用以 打頭的變數其後要加 而在makefile中的變數是以 打頭的後加 例項如下 makefile path data subp...