sh_config.sh 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580
  1. # path去重
  2. export PATH=$(echo $PATH | tr ':' '\n' | cat -n | sort -k2,2 -k1,1n | uniq -f1 | sort -k1,1n | cut -f2- | tr '\n' ':')
  3. function targz() {
  4. tar -zcvf "${1}".tgz "$1"
  5. ll -h ${1}.tgz
  6. }
  7. function untar() {
  8. tar -zxvf "$1"
  9. }
  10. function sync_config_file() {
  11. mkdir -p ~/.config/my_config
  12. wget https://git.tianyunperfect.cn/tianyunperfect/sync/raw/master/sh_config.sh -O ~/.config/my_config/sh_config.sh && source ~/.config/my_config/sh_config.sh
  13. }
  14. # 快捷命令
  15. ## 未分类
  16. alias ll='ls -alh --time-style="+%Y-%m-%d %H:%I:%S"'
  17. #du -sh * 2>/dev/null | sort -hr
  18. alias du-sh='du -sh * 2>/dev/null | sort -hr'
  19. alias du-sh10='du -sh * 2>/dev/null | sort -hr | head -n 10'
  20. alias df-h='df -h | grep -v tmpfs | grep -v overlay' # 显示挂载的磁盘
  21. alias sourcevenv='source venv/bin/activate'
  22. alias weather='curl wttr.in/beijing'
  23. alias dust1='dust -d 1'
  24. function gittagpush() {
  25. if [ $# -ne 2 ]; then
  26. echo "需要两个参数: <变量1> <变量2>"
  27. return 1
  28. fi
  29. git tag -a $1 -m "$2"
  30. git push origin $1
  31. }
  32. alias gittags='git --no-pager tag -l -n'
  33. function reloadrc() {
  34. if [ -n "$ZSH_VERSION" ]; then
  35. echo "正在使用zsh"
  36. source ~/.zshrc
  37. elif [ -n "$BASH_VERSION" ]; then
  38. echo "正在使用bash"
  39. source ~/.bashrc
  40. else
  41. echo "无法确定当前 Shell 类型"
  42. fi
  43. }
  44. function install_mcfly() {
  45. # 用户目录是否存在 mcfly 文件
  46. if [ ! -f ~/mcfly ]; then
  47. wget https://tianyunperfect1.oss-cn-beijing.aliyuncs.com/file/2024/12/mcfly-v0.9.2-x86_64-unknown-linux-musl.tar.gz
  48. tar -zxvf mcfly-v0.9.2-x86_64-unknown-linux-musl.tar.gz
  49. rm -rf mcfly-v0.9.2-x86_64-unknown-linux-musl.tar.gz
  50. if [ -n "$ZSH_VERSION" ]; then
  51. echo "正在使用zsh"
  52. echo 'eval "$(mcfly init zsh)"' >>~/.zshrc
  53. elif [ -n "$BASH_VERSION" ]; then
  54. echo "正在使用bash"
  55. echo 'eval "$(mcfly init bash)"' >>~/.bashrc
  56. else
  57. echo "无法确定当前 Shell 类型"
  58. fi
  59. fi
  60. }
  61. # 安装监控用户命令
  62. function install_monitor_user_command() {
  63. if [ -n "$ZSH_VERSION" ]; then
  64. curl -SL https://git.tianyunperfect.cn/tianyunperfect/note_pub/raw/master/install_monitor_user_command_zsh.sh | sh
  65. elif [ -n "$BASH_VERSION" ]; then
  66. curl -SL https://git.tianyunperfect.cn/tianyunperfect/note_pub/raw/master/install_monitor_user_command_bash.sh | sh
  67. else
  68. echo "无法确定当前 Shell 类型"
  69. fi
  70. }
  71. function install_vimrc() {
  72. wget -O ~/.vimrc https://git.tianyunperfect.cn/tianyunperfect/note_pub/raw/master/.vimrc
  73. }
  74. function k8s-get-all-namespace() {
  75. kubectl get namespace
  76. }
  77. ## k8s
  78. function k8s-get-default-namespace() {
  79. kubectl config view | grep namespace
  80. }
  81. function k8s-set-default-namespace() {
  82. kubectl config set-context --current --namespace="$1"
  83. }
  84. function k8s-getpod() {
  85. k8s-get-default-namespace
  86. # 如果有参数,则过滤
  87. if [ ! -z "$1" ]; then
  88. kubectl get pods -o wide | grep "$1"
  89. else
  90. kubectl get pods -o wide
  91. fi
  92. }
  93. alias k8s-descpods='kubectl describe pods'
  94. function k8s-getlog() {
  95. k8s-get-default-namespace
  96. podName=$(kubectl get pods -o wide | grep "${1}" | awk '{print $1}')
  97. kubectl logs --tail=300 -f "${podName}"
  98. }
  99. function k8s-getlogbase() {
  100. k8s-get-default-namespace
  101. podName=$(kubectl get pods -o wide | grep "${1}" | awk '{print $1}')
  102. kubectl logs -c base-jre --tail=300 -f "${podName}"
  103. }
  104. function k8s-delpod() {
  105. kubectl delete pod "$1" --force
  106. }
  107. function k8s-inpod() {
  108. k8s-get-default-namespace
  109. podName=$(kubectl get pods -o wide | grep "${1}" | awk '{print $1}')
  110. kubectl exec -it "${podName}" -- /bin/bash
  111. }
  112. alias k8s-topnodes='kubectl top node'
  113. alias k8s-toppods='kubectl top pod'
  114. alias k8s-getsvc='kubectl get svc'
  115. alias k8s-descsvc='kubectl describe svc'
  116. alias k8s-deldeployment='kubectl delete deployment'
  117. alias k8s-getdeployment='kubectl get deployment'
  118. alias k8s-descdeployment='kubectl describe deployment'
  119. alias k8s-getdeploymentgrep='kubectl get deployment | grep'
  120. alias k8s-getingress='kubectl get ingress'
  121. alias k8s-descingress='kubectl describe ingress'
  122. alias k8s-getingressgrep='kubectl get ingress | grep'
  123. ## docker
  124. alias docker-rm-all-image='docker rmi $(docker images -q)'
  125. alias docker-rm-all-docker='docker rm $(docker ps -a -q)'
  126. alias docker-show-image-prune='docker image ls -f dangling=true'
  127. alias docker-image-prune='docker image prune -a'
  128. alias dkstats='docker stats'
  129. alias dkps='docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}"'
  130. alias dkpsa='docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}"'
  131. alias dkrm='docker rm -f'
  132. alias dkrmi='docker rmi -f'
  133. alias dkimage='docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}\t{{.Size}}"'
  134. alias dkip='docker inspect --format="{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" $(docker ps -aq)'
  135. function dkin() {
  136. docker exec -it "$1" bash
  137. }
  138. function dkinsh() {
  139. docker exec -it "$1" sh
  140. }
  141. function dklog() {
  142. docker logs -n 300 -f "$1"
  143. }
  144. function dkinspect() {
  145. docker inspect "$1"
  146. }
  147. alias dkstart_all_exit='docker start $(docker ps -a -q -f status=exited)'
  148. ## go
  149. # 定义 gobuildwinexe 函数
  150. function gobuildwinexe() {
  151. if [ $# -ne 2 ]; then
  152. echo "用法: gobuildwinexe <源文件> <输出文件名>"
  153. return 1
  154. fi
  155. GOOS=windows GOARCH=amd64 go build -o "${2}.exe" "$1.go"
  156. }
  157. function gobuildlinuxexe() {
  158. if [ $# -ne 2 ]; then
  159. echo "用法: gobuildlinuxexe <源文件> <输出文件名>"
  160. return 1
  161. fi
  162. GOOS=linux GOARCH=amd64 go build -o "$2" "$1.go"
  163. }
  164. function gobuildmacexe() {
  165. if [ $# -ne 2 ]; then
  166. echo "用法: gobuildmacexe <源文件> <输出文件名>"
  167. return 1
  168. fi
  169. GOOS=darwin GOARCH=amd64 go build -o "$2" "$1.go"
  170. }
  171. ## version
  172. alias pythonversion='python --version'
  173. alias javaversion='java -version'
  174. alias nodeversion='node -v'
  175. alias centosversion='cat /etc/os-release'
  176. alias ubuntuversion='cat /etc/lsb-release'
  177. alias goversion='go version'
  178. ## ip查看
  179. alias ipremote='curl cip.cc'
  180. function iplocal() {
  181. # 如果是mac 过滤 en0,如果是linux 过滤 eth0
  182. if [[ "$OSTYPE" == "darwin"* ]]; then
  183. ifconfig en0 | grep inet | grep -v inet6
  184. else
  185. ifconfig eth0 | grep inet | grep -v inet6
  186. fi
  187. }
  188. ## 进程相关
  189. alias psgrep='ps aux | grep -v grep | grep'
  190. function killport() {
  191. if [ -z "$1" ]; then
  192. echo "需要一个端口号作为参数"
  193. return 1
  194. fi
  195. kill -9 $(lsof -t -i:"$1")
  196. }
  197. function ps-mem-top6() {
  198. ps aux --sort=-%mem | awk '{print $2, $11, $4, $6/1024 "MB"}' | head -n 6
  199. }
  200. # node
  201. alias npminstall='npm install -g --registry=https://registry.npmmirror.com '
  202. # python
  203. # 定义 pipinstall 函数
  204. function pipinstall() {
  205. if [ -z "$1" ]; then
  206. echo "需要一个包名作为参数"
  207. return 1
  208. fi
  209. pip install "$1" -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
  210. }
  211. # 文件查找相关
  212. function findByName() {
  213. local pattern=$1
  214. find . -name "*$pattern*"
  215. }
  216. function findByContent() {
  217. local pattern=$1
  218. find . -type f -exec grep -l "$pattern" {} +
  219. }
  220. # 备份
  221. function tar_back() {
  222. time=$(date "+%Y-%m-%d_%H_%M_%S")
  223. tar -zcvf "${1}".${time}.tgz "$1"
  224. ll -h ${1}.${time}.tgz
  225. }
  226. pid-cmd-centos() {
  227. sudo ls -l /proc/$1/cwd | awk '{print $11}'
  228. sudo cat /proc/$1/cmdline
  229. echo ''
  230. }
  231. pid-cmd-ubuntu() {
  232. ls -l /proc/"$1"/cwd | awk '{print $11}'
  233. tr '\0' ' ' </proc/"$1"/cmdline
  234. echo ""
  235. }
  236. function echo-arthas-install() {
  237. echo '
  238. # 判断是否存在 ~/arthas-boot.jar,如果不存在则下载
  239. if [ ! -f ~/arthas-boot.jar ]; then
  240. ( cd ~ && curl -O https://arthas.aliyun.com/arthas-boot.jar )
  241. fi
  242. # 判断是否在k8s里面
  243. if [[ ! -z "$KUBERNETES_SERVICE_HOST" && ! -z "$KUBERNETES_SERVICE_PORT" ]]; then
  244. echo "Running in Kubernetes environment"
  245. java -jar ~/arthas-boot.jar 1 --options json-format=true
  246. else
  247. echo "Not running in Kubernetes environment"
  248. java -jar ~/arthas-boot.jar --options json-format=true
  249. fi
  250. '
  251. }
  252. alias cparthas='echo-arthas-install | pbcopy'
  253. function curl-form() {
  254. curl -d "$2" "$1"
  255. }
  256. function watch-cpudiskmemory() {
  257. watch -n 1 '
  258. echo "===CPU占用摘要:"
  259. top -bn 1 -i -c | grep Cpu
  260. echo "
  261. ===内存占用摘要:"
  262. free -h
  263. echo "
  264. ===磁盘占用摘要:"
  265. df -h /'
  266. }
  267. #123
  268. function vimrc() {
  269. if [[ "$SHELL" =~ "zsh" ]]; then
  270. code ~/.zshrc
  271. else
  272. code ~/.bashrc
  273. fi
  274. }
  275. merge_video_audio() {
  276. if [ "$#" -ne 3 ]; then
  277. echo "错误:参数数量不正确!"
  278. echo "用法:merge_video_audio video.mp4 audio.mp3 output.mp4"
  279. return 1
  280. fi
  281. ffmpeg -i "$1" -i "$2" -c:v copy -c:a copy "$3"
  282. }
  283. rm-all() {
  284. find . -name $1 | xargs -I {} rm -rf {}
  285. }
  286. ### mysql
  287. function echo-mysql-tables() {
  288. echo 'SELECT table_name, table_comment FROM information_schema.tables WHERE table_schema = DATABASE();'
  289. }
  290. function echo-mysql-table-size() {
  291. echo 'select table_name,concat(round(sum(DATA_LENGTH/1024/1024),2),"MB") as data from information_schema.TABLES where table_schema =(SELECT DATABASE()) group by table_name;'
  292. }
  293. function echo-mysql-db-size() {
  294. echo 'select table_schema,concat(round(sum(DATA_LENGTH/1024/1024),2),"MB") as data from information_schema.TABLES where table_schema not in ("information_schema","mysql","performance_schema","sys") group by table_schema;'
  295. }
  296. function echo-npm() {
  297. echo '
  298. npm i webpack # 在module文件中安装
  299. npm i webpack -S # --save 常用,添加到package
  300. npm i webpack -D # --save-dev
  301. npm i webpack -g --registry=https://registry.npmmirror.com # 全局
  302. npm un webpack -g
  303. yarn add react
  304. yarn remove react
  305. yarn global add umi
  306. '
  307. }
  308. concat_params() {
  309. # 获取传入的参数个数
  310. num_params=$#
  311. # 判断参数个数是否大于等于1
  312. if [ $num_params -ge 1 ]; then
  313. # 使用循环遍历参数,并拼接在一起
  314. concat_str="$1"
  315. for ((i = 2; i <= $num_params; i++)); do
  316. concat_str+="%20${!i}"
  317. done
  318. # 打印拼接后的字符串
  319. echo "$concat_str"
  320. else
  321. echo "没有传入参数"
  322. fi
  323. }
  324. function url_encode() {
  325. echo "$1" | sed 's/ /%20/g'
  326. }
  327. function bing() {
  328. ## 如果是windows系统,则使用start,否则使用open,后面的参数可以有多个空格
  329. if [[ "$OSTYPE" == "msys"* ]]; then
  330. search_query=$(concat_params "$@")
  331. start "https://www.bing.com/search?q=$search_query"
  332. else
  333. search_query=""
  334. for query in "$@"; do
  335. search_query+=" $query"
  336. done
  337. search_query=$(url_encode "$search_query")
  338. open "https://www.bing.com/search?q=${search_query}"
  339. fi
  340. }
  341. function mvn_clean_package() {
  342. mvn clean package -Dmaven.test.skip=true
  343. }
  344. ## ska快捷
  345. function ska_push_dev() {
  346. skaffold run -p dev --tail
  347. }
  348. function mvn_push_dev() {
  349. mvn_clean_package
  350. ska_push_dev
  351. }
  352. function mvn_push_test() {
  353. mvn_clean_package
  354. skaffold build -p test -n aimptest
  355. }
  356. function mvn_clean_deploy() {
  357. mvn clean deploy -Dmaven.test.skip=true
  358. }
  359. function show_all_local_ip() {
  360. arp -a
  361. }
  362. alias nodels='fnm ls'
  363. alias nodeuse='fnm use'
  364. alias nodedefault='fnm default'
  365. alias nodeinstall='fnm install'
  366. alias nodelsremote='fnm ls-remote'
  367. alias nodeuninstall='fnm uninstall'
  368. alias catnodeversion='node --version > .node-version'
  369. alias yarnglobaladd='yarn global add'
  370. alias yarnglobalremove='yarn global remove'
  371. alias yarnadd='yarn add'
  372. alias yarnremove='yarn remove'
  373. alias yarninstall='yarn install'
  374. function echosync() {
  375. echo '
  376. source <(curl -s https://git.tianyunperfect.cn/tianyunperfect/sync/raw/master/sh_config.sh)
  377. '
  378. }
  379. alias settitle='wezterm cli set-tab-title '
  380. function btm_linux() {
  381. if [ ! -f "$HOME/btm" ]; then
  382. wget https://tianyunperfect1.oss-cn-beijing.aliyuncs.com/20/2024/btm/btm -O ~/btm
  383. chmod +x ~/btm
  384. fi
  385. ~/btm --process_memory_as_value
  386. }
  387. # watch 优化
  388. alias watch_alias='watch '
  389. # 函数,每隔2秒执行一次参数命令
  390. function watch_func() {
  391. while true; do
  392. clear
  393. "$@"
  394. sleep 2
  395. done
  396. }
  397. alias gpu_nvidia='nvidia-smi'
  398. alias gpu_amd='rocm-smi --showpids -u -P'
  399. alias iptables_show_all='iptables -t nat -L -n'
  400. # docker-compose up ,如果有参数,则使用-f 文件
  401. function docker_compose_up() {
  402. if [ $# -eq 0 ]; then
  403. docker-compose up -d
  404. return
  405. fi
  406. docker-compose -f "$1" up -d
  407. }
  408. # 同理 docker-compose down
  409. function docker_compose_down() {
  410. if [ $# -eq 0 ]; then
  411. docker-compose down
  412. return
  413. fi
  414. docker-compose -f "$1" down
  415. }
  416. # Ubuntu/Debian: sudo apt-get install moreutils
  417. # CentOS/RHEL: sudo yum install moreutils
  418. # macOS: brew install moreutils
  419. # 用法 tail -f abc.log | pt
  420. alias pt="ts '[%Y-%m-%d %H:%M:%S]'"
  421. alias rcp='rsync -a --delete '
  422. # 函数:生成指定大小的文件 generate_file 2 M "logfile.log"
  423. generate_file() {
  424. local size=$1
  425. local unit=$2
  426. local filename=${3:-"generated_file.bin"} # 默认文件名为generated_file.bin
  427. # 检查单位是否正确
  428. case $unit in
  429. "B" | "b")
  430. bs=1
  431. ;;
  432. "K" | "k")
  433. bs=1K
  434. ;;
  435. "M" | "m")
  436. bs=1M
  437. ;;
  438. "G" | "g")
  439. bs=1G
  440. ;;
  441. *)
  442. echo "错误:不支持的单位。请使用 B, K, M, 或 G。"
  443. return 1
  444. ;;
  445. esac
  446. # 使用dd命令生成文件
  447. dd if=/dev/urandom of="$filename" bs=$bs count=$size status=none
  448. }
  449. # 函数:显示当前网速
  450. function band_linux() {
  451. # 检查 bandwhich 是否已经下载
  452. if [ ! -f "$HOME/bandwhich" ]; then
  453. cd ~
  454. # 检查 glibc 版本
  455. GLIBC_VERSION=$(ldd --version | head -n 1 | awk '{print $NF}')
  456. REQUIRED_VERSION="2.29"
  457. # 比较版本号
  458. if printf '%s\n%s' "$REQUIRED_VERSION" "$GLIBC_VERSION" | sort -V | head -n 1 | grep -qx "$REQUIRED_VERSION"; then
  459. echo "Glibc version $GLIBC_VERSION meets requirements, downloading GNU version..."
  460. wget https://tianyunperfect1.oss-cn-beijing.aliyuncs.com/file/2024/11/bandwhich-v0.23.1-x86_64-unknown-linux-gnu.tar.gz
  461. tar -zxvf bandwhich-v0.23.1-x86_64-unknown-linux-gnu.tar.gz
  462. rm -rf {bandwhich-v0.23.1-x86_64-unknown-linux-gnu.tar.gz,assets}
  463. else
  464. echo "Glibc version $GLIBC_VERSION does not meet requirements, downloading musl version..."
  465. wget https://tianyunperfect1.oss-cn-beijing.aliyuncs.com/file/2024/11/bandwhich-v0.23.1-x86_64-unknown-linux-musl.tar.gz
  466. tar -zxvf bandwhich-v0.23.1-x86_64-unknown-linux-musl.tar.gz
  467. rm -rf {bandwhich-v0.23.1-x86_64-unknown-linux-musl.tar.gz,assets}
  468. fi
  469. cd -
  470. fi
  471. # 运行 bandwhich
  472. sudo ~/bandwhich
  473. }
  474. alias reload_docker_config='sudo systemctl daemon-reload && sudo systemctl restart docker'
  475. # 函数 vim 替代终端
  476. function vim_micro_linux() {
  477. if [ ! -f "$HOME/micro" ]; then
  478. cd ~
  479. wget https://tianyunperfect1.oss-cn-beijing.aliyuncs.com/file/2024/11/micro-2.0.14-linux64-static.tgz
  480. tar -zxvf micro-2.0.14-linux64-static.tgz
  481. mv micro-2.0.14/micro ~
  482. chmod +x ~/micro
  483. rm -rf {micro-2.0.14,micro-2.0.14-linux64-static.tgz}
  484. echo "vim_micro_linux 安装完成, 开始写入配置文件"
  485. mkdir -p ~/.config/micro
  486. cat <<EOF >~/.config/micro/bindings.json
  487. {
  488. "Alt-q": "Quit"
  489. }
  490. EOF
  491. cd -
  492. fi
  493. ~/micro "$@"
  494. }
  495. # 磁盘读写速度测试
  496. function disk_speed_test() {
  497. # 首先同步缓存,确保测试准确
  498. sync
  499. echo 3 >/proc/sys/vm/drop_caches
  500. echo "测试写入"
  501. # 测试写入速度 (写入1GB数据)
  502. dd if=/dev/zero of=./testfile bs=1M count=1024 conv=fdatasync
  503. echo "测试读取"
  504. # 测试读取速度
  505. dd if=./testfile of=/dev/null bs=1M count=1024
  506. # 测试完成后删除测试文件
  507. rm ./testfile
  508. }