sh_config.sh 15 KB

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