123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622 |
- #!/bin/bash
- # path去重
- export PATH=$(echo $PATH | tr ':' '\n' | cat -n | sort -k2,2 -k1,1n | uniq -f1 | sort -k1,1n | cut -f2- | tr '\n' ':')
- function targz() {
- tar -zcvf "${1}".tgz "$1"
- ll -h ${1}.tgz
- }
- function untar() {
- tar -zxvf "$1"
- }
- function sync_config_file() {
- mkdir -p ~/.config/my_config
- 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
- }
- # 快捷命令
- ## 未分类
- alias ll='ls -alh --time-style="+%Y-%m-%d %H:%I:%S"'
- #du -sh * 2>/dev/null | sort -hr
- alias du-sh='du -sh * 2>/dev/null | sort -hr'
- alias du-sh10='du -sh * 2>/dev/null | sort -hr | head -n 10'
- alias df-h='df -h | grep -v tmpfs | grep -v overlay' # 显示挂载的磁盘
- alias sourcevenv='source venv/bin/activate'
- alias weather='curl wttr.in/beijing'
- alias dust1='dust -d 1'
- function gittagpush() {
- if [ $# -ne 2 ]; then
- echo "需要两个参数: <变量1> <变量2>"
- return 1
- fi
- git tag -a $1 -m "$2"
- git push origin $1
- }
- alias gittags='git --no-pager tag -l -n'
- function reloadrc() {
- if [ -n "$ZSH_VERSION" ]; then
- echo "正在使用zsh"
- source ~/.zshrc
- elif [ -n "$BASH_VERSION" ]; then
- echo "正在使用bash"
- source ~/.bashrc
- else
- echo "无法确定当前 Shell 类型"
- fi
- }
- function install_mcfly() {
- # 用户目录是否存在 mcfly 文件
- if [ ! -f ~/mcfly ]; then
- wget https://tianyunperfect1.oss-cn-beijing.aliyuncs.com/file/2024/12/mcfly-v0.9.2-x86_64-unknown-linux-musl.tar.gz
- tar -zxvf mcfly-v0.9.2-x86_64-unknown-linux-musl.tar.gz
- rm -rf mcfly-v0.9.2-x86_64-unknown-linux-musl.tar.gz
- if [ -n "$ZSH_VERSION" ]; then
- echo "正在使用zsh"
- echo 'eval "$(mcfly init zsh)"' >>~/.zshrc
- elif [ -n "$BASH_VERSION" ]; then
- echo "正在使用bash"
- echo 'eval "$(mcfly init bash)"' >>~/.bashrc
- else
- echo "无法确定当前 Shell 类型"
- fi
- fi
- }
- # 安装监控用户命令
- function install_monitor_user_command() {
- if [ -n "$ZSH_VERSION" ]; then
- curl -SL https://git.tianyunperfect.cn/tianyunperfect/note_pub/raw/master/install_monitor_user_command_zsh.sh | sh
- elif [ -n "$BASH_VERSION" ]; then
- curl -SL https://git.tianyunperfect.cn/tianyunperfect/note_pub/raw/master/install_monitor_user_command_bash.sh | sh
- else
- echo "无法确定当前 Shell 类型"
- fi
- }
- function install_vimrc() {
- wget -O ~/.vimrc https://git.tianyunperfect.cn/tianyunperfect/note_pub/raw/master/.vimrc
- }
- function k8s-get-all-namespace() {
- kubectl get namespace
- }
- ## k8s
- function k8s-get-default-namespace() {
- kubectl config view | grep namespace
- }
- function k8s-set-default-namespace() {
- kubectl config set-context --current --namespace="$1"
- }
- function k8s-getpod() {
- k8s-get-default-namespace
- # 如果有参数,则过滤
- if [ ! -z "$1" ]; then
- kubectl get pods -o wide | grep "$1"
- else
- kubectl get pods -o wide
- fi
- }
- alias k8s-descpods='kubectl describe pods'
- function k8s-getlog() {
- k8s-get-default-namespace
- podName=$(kubectl get pods -o wide | grep "${1}" | awk '{print $1}')
- kubectl logs --tail=300 -f "${podName}"
- }
- function k8s-getlogbase() {
- k8s-get-default-namespace
- podName=$(kubectl get pods -o wide | grep "${1}" | awk '{print $1}')
- kubectl logs -c base-jre --tail=300 -f "${podName}"
- }
- function k8s-delpod() {
- kubectl delete pod "$1" --force
- }
- function k8s-inpod() {
- k8s-get-default-namespace
- podName=$(kubectl get pods -o wide | grep "${1}" | awk '{print $1}')
- kubectl exec -it "${podName}" -- /bin/bash
- }
- alias k8s-topnodes='kubectl top node'
- alias k8s-toppods='kubectl top pod'
- alias k8s-getsvc='kubectl get svc'
- alias k8s-descsvc='kubectl describe svc'
- alias k8s-deldeployment='kubectl delete deployment'
- alias k8s-getdeployment='kubectl get deployment'
- alias k8s-descdeployment='kubectl describe deployment'
- alias k8s-getdeploymentgrep='kubectl get deployment | grep'
- alias k8s-getingress='kubectl get ingress'
- alias k8s-descingress='kubectl describe ingress'
- alias k8s-getingressgrep='kubectl get ingress | grep'
- ## docker
- alias docker-rm-all-image='docker rmi $(docker images -q)'
- alias docker-rm-all-docker='docker rm $(docker ps -a -q)'
- alias docker-show-image-prune='docker image ls -f dangling=true'
- alias docker-image-prune='docker image prune -a'
- alias dkstats='docker stats'
- alias dkps='docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}"'
- alias dkpsa='docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}"'
- alias dkrm='docker rm -f'
- alias dkrmi='docker rmi -f'
- alias dkimage='docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}\t{{.Size}}"'
- alias dkip='docker inspect --format="{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" $(docker ps -aq)'
- function dkin() {
- docker exec -it "$1" bash
- }
- function dkinsh() {
- docker exec -it "$1" sh
- }
- function dklog() {
- docker logs -n 300 -f "$1"
- }
- function dkinspect() {
- docker inspect "$1"
- }
- alias dkstart_all_exit='docker start $(docker ps -a -q -f status=exited)'
- ## go
- # 定义 gobuildwinexe 函数
- function gobuildwinexe() {
- if [ $# -ne 2 ]; then
- echo "用法: gobuildwinexe <源文件> <输出文件名>"
- return 1
- fi
- GOOS=windows GOARCH=amd64 go build -o "${2}.exe" "$1.go"
- }
- function gobuildlinuxexe() {
- if [ $# -ne 2 ]; then
- echo "用法: gobuildlinuxexe <源文件> <输出文件名>"
- return 1
- fi
- GOOS=linux GOARCH=amd64 go build -o "$2" "$1.go"
- }
- function gobuildmacexe() {
- if [ $# -ne 2 ]; then
- echo "用法: gobuildmacexe <源文件> <输出文件名>"
- return 1
- fi
- GOOS=darwin GOARCH=amd64 go build -o "$2" "$1.go"
- }
- ## version
- alias pythonversion='python --version'
- alias javaversion='java -version'
- alias nodeversion='node -v'
- alias centosversion='cat /etc/os-release'
- alias ubuntuversion='cat /etc/lsb-release'
- alias goversion='go version'
- ## ip查看
- alias ipremote='curl cip.cc'
- function iplocal() {
- # 如果是mac 过滤 en0,如果是linux 过滤 eth0
- if [[ "$OSTYPE" == "darwin"* ]]; then
- ifconfig en0 | grep inet | grep -v inet6
- else
- ifconfig eth0 | grep inet | grep -v inet6
- fi
- }
- ## 进程相关
- alias psgrep='ps aux | grep -v grep | grep'
- # 根据pod获取pid,示例: ss -tunlp | grep :8080
- function getpid-bypod() {
- if [ -z "$1" ]; then
- echo "请提供端口号作为参数"
- return 1
- fi
- ss -tunlp | grep ":$1"
- }
- function killport() {
- if [ -z "$1" ]; then
- echo "需要一个端口号作为参数"
- return 1
- fi
- kill -9 $(lsof -t -i:"$1")
- }
- function ps-mem-top6() {
- ps aux --sort=-%mem | awk '{print $2, $11, $4, $6/1024 "MB"}' | head -n 6
- }
- # node
- alias npminstall='npm install -g --registry=https://registry.npmmirror.com '
- # python
- # 定义 pipinstall 函数
- function pipinstall() {
- if [ -z "$1" ]; then
- echo "需要一个包名作为参数"
- return 1
- fi
- pip install "$1" -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
- }
- # 文件查找相关
- function findByName() {
- local pattern=$1
- find . -name "*$pattern*"
- }
- function findByContent() {
- local pattern=$1
- find . -type f -exec grep -l "$pattern" {} +
- }
- # 备份
- function tar_back() {
- time=$(date "+%Y-%m-%d_%H_%M_%S")
- tar -zcvf "${1}".${time}.tgz "$1"
- ll -h ${1}.${time}.tgz
- }
- pid-cmd-centos() {
- sudo ls -l /proc/$1/cwd | awk '{print $11}'
- sudo cat /proc/$1/cmdline
- echo ''
- }
- pid-cmd-ubuntu() {
- ls -l /proc/"$1"/cwd | awk '{print $11}'
- tr '\0' ' ' </proc/"$1"/cmdline
- echo ""
- }
- function install-arthas() {
- # 判断是否存在 ~/arthas-boot.jar,如果不存在则下载
- if [ ! -f ~/arthas-boot.jar ]; then
- (cd ~ && curl -O https://arthas.aliyun.com/arthas-boot.jar)
- fi
- # 判断是否在k8s里面
- if [[ ! -z "$KUBERNETES_SERVICE_HOST" && ! -z "$KUBERNETES_SERVICE_PORT" ]]; then
- echo "Running in Kubernetes environment"
- java -jar ~/arthas-boot.jar 1 --options json-format=true
- else
- echo "Not running in Kubernetes environment"
- java -jar ~/arthas-boot.jar --options json-format=true
- fi
- }
- alias cparthas='echo-arthas-install | pbcopy'
- function curl-form() {
- curl -d "$2" "$1"
- }
- function watch-cpudiskmemory() {
- watch -n 1 '
- echo "===CPU占用摘要:"
- top -bn 1 -i -c | grep Cpu
- echo "
- ===内存占用摘要:"
- free -h
- echo "
- ===磁盘占用摘要:"
- df -h /'
- }
- #123
- function vimrc() {
- if [[ "$SHELL" =~ "zsh" ]]; then
- code ~/.zshrc
- else
- code ~/.bashrc
- fi
- }
- merge_video_audio() {
- if [ "$#" -ne 3 ]; then
- echo "错误:参数数量不正确!"
- echo "用法:merge_video_audio video.mp4 audio.mp3 output.mp4"
- return 1
- fi
- ffmpeg -i "$1" -i "$2" -c:v copy -c:a copy "$3"
- }
- rm-all() {
- find . -name $1 | xargs -I {} rm -rf {}
- }
- ### mysql
- function echo-mysql-tables() {
- echo 'SELECT table_name, table_comment FROM information_schema.tables WHERE table_schema = DATABASE();'
- }
- function echo-mysql-table-size() {
- 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;'
- }
- function echo-mysql-db-size() {
- 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;'
- }
- function echo-npm() {
- echo '
- npm i webpack # 在module文件中安装
- npm i webpack -S # --save 常用,添加到package
- npm i webpack -D # --save-dev
- npm i webpack -g --registry=https://registry.npmmirror.com # 全局
- npm un webpack -g
- yarn add react
- yarn remove react
- yarn global add umi
- '
- }
- concat_params() {
- # 获取传入的参数个数
- num_params=$#
- # 判断参数个数是否大于等于1
- if [ $num_params -ge 1 ]; then
- # 使用循环遍历参数,并拼接在一起
- concat_str="$1"
- for ((i = 2; i <= $num_params; i++)); do
- concat_str+="%20${!i}"
- done
- # 打印拼接后的字符串
- echo "$concat_str"
- else
- echo "没有传入参数"
- fi
- }
- function url_encode() {
- echo "$1" | sed 's/ /%20/g'
- }
- function bing() {
- ## 如果是windows系统,则使用start,否则使用open,后面的参数可以有多个空格
- if [[ "$OSTYPE" == "msys"* ]]; then
- search_query=$(concat_params "$@")
- start "https://www.bing.com/search?q=$search_query"
- else
- search_query=""
- for query in "$@"; do
- search_query+=" $query"
- done
- search_query=$(url_encode "$search_query")
- open "https://www.bing.com/search?q=${search_query}"
- fi
- }
- function mvn_clean_package() {
- mvn clean package -Dmaven.test.skip=true
- }
- ## ska快捷
- function ska_push_dev() {
- skaffold run -p dev --tail
- }
- function mvn_push_dev() {
- mvn_clean_package
- ska_push_dev
- }
- function mvn_push_test() {
- mvn_clean_package
- skaffold build -p test -n aimptest
- }
- function mvn_clean_deploy() {
- mvn clean deploy -Dmaven.test.skip=true
- }
- function show_all_local_ip() {
- arp -a
- }
- alias nodels='fnm ls'
- alias nodeuse='fnm use'
- alias nodedefault='fnm default'
- alias nodeinstall='fnm install'
- alias nodelsremote='fnm ls-remote'
- alias nodeuninstall='fnm uninstall'
- alias catnodeversion='node --version > .node-version'
- alias yarnglobaladd='yarn global add'
- alias yarnglobalremove='yarn global remove'
- alias yarnadd='yarn add'
- alias yarnremove='yarn remove'
- alias yarninstall='yarn install'
- function echosync() {
- echo '
- source <(curl -s https://git.tianyunperfect.cn/tianyunperfect/sync/raw/master/sh_config.sh)
- '
- }
- alias settitle='wezterm cli set-tab-title '
- function btm_linux() {
- if [ ! -f "$HOME/btm" ]; then
- wget https://tianyunperfect1.oss-cn-beijing.aliyuncs.com/20/2024/btm/btm -O ~/btm
- chmod +x ~/btm
- fi
- ~/btm --process_memory_as_value
- }
- # watch 优化
- alias watch_alias='watch '
- # 函数,每隔2秒执行一次参数命令
- function watch_func() {
- while true; do
- clear
- "$@"
- sleep 2
- done
- }
- alias gpu_nvidia='nvidia-smi'
- alias gpu_amd='rocm-smi --showpids -u -P'
- alias iptables_show_all='iptables -t nat -L -n'
- # docker-compose up ,如果有参数,则使用-f 文件
- function docker_compose_up() {
- if [ $# -eq 0 ]; then
- docker-compose up -d
- return
- fi
- docker-compose -f "$1" up -d
- }
- # 同理 docker-compose down
- function docker_compose_down() {
- if [ $# -eq 0 ]; then
- docker-compose down
- return
- fi
- docker-compose -f "$1" down
- }
- # Ubuntu/Debian: sudo apt-get install moreutils
- # CentOS/RHEL: sudo yum install moreutils
- # macOS: brew install moreutils
- # 用法 tail -f abc.log | pt
- alias pt="ts '[%Y-%m-%d %H:%M:%S]'"
- alias myrsync='rsync -avhP --delete --no-owner --no-group'
- # 函数:生成指定大小的文件 generate_file 2 M "logfile.log"
- generate_file() {
- local size=$1
- local unit=$2
- local filename=${3:-"generated_file.bin"} # 默认文件名为generated_file.bin
- # 检查单位是否正确
- case $unit in
- "B" | "b")
- bs=1
- ;;
- "K" | "k")
- bs=1K
- ;;
- "M" | "m")
- bs=1M
- ;;
- "G" | "g")
- bs=1G
- ;;
- *)
- echo "错误:不支持的单位。请使用 B, K, M, 或 G。"
- return 1
- ;;
- esac
- # 使用dd命令生成文件
- dd if=/dev/urandom of="$filename" bs=$bs count=$size status=none
- }
- # 函数:显示当前网速
- function band_linux() {
- # 检查 bandwhich 是否已经下载
- if [ ! -f "$HOME/bandwhich" ]; then
- cd ~
- # 检查 glibc 版本
- GLIBC_VERSION=$(ldd --version | head -n 1 | awk '{print $NF}')
- REQUIRED_VERSION="2.29"
- # 比较版本号
- if printf '%s\n%s' "$REQUIRED_VERSION" "$GLIBC_VERSION" | sort -V | head -n 1 | grep -qx "$REQUIRED_VERSION"; then
- echo "Glibc version $GLIBC_VERSION meets requirements, downloading GNU version..."
- wget https://tianyunperfect1.oss-cn-beijing.aliyuncs.com/file/2024/11/bandwhich-v0.23.1-x86_64-unknown-linux-gnu.tar.gz
- tar -zxvf bandwhich-v0.23.1-x86_64-unknown-linux-gnu.tar.gz
- rm -rf {bandwhich-v0.23.1-x86_64-unknown-linux-gnu.tar.gz,assets}
- else
- echo "Glibc version $GLIBC_VERSION does not meet requirements, downloading musl version..."
- wget https://tianyunperfect1.oss-cn-beijing.aliyuncs.com/file/2024/11/bandwhich-v0.23.1-x86_64-unknown-linux-musl.tar.gz
- tar -zxvf bandwhich-v0.23.1-x86_64-unknown-linux-musl.tar.gz
- rm -rf {bandwhich-v0.23.1-x86_64-unknown-linux-musl.tar.gz,assets}
- fi
- cd -
- fi
- # 运行 bandwhich
- sudo ~/bandwhich
- }
- alias reload_docker_config='sudo systemctl daemon-reload && sudo systemctl restart docker'
- # 函数 vim 替代终端
- function vim_micro_linux() {
- if [ ! -f "$HOME/micro" ]; then
- cd ~
- wget https://tianyunperfect1.oss-cn-beijing.aliyuncs.com/file/2024/11/micro-2.0.14-linux64-static.tgz
- tar -zxvf micro-2.0.14-linux64-static.tgz
- mv micro-2.0.14/micro ~
- chmod +x ~/micro
- rm -rf {micro-2.0.14,micro-2.0.14-linux64-static.tgz}
- echo "vim_micro_linux 安装完成, 开始写入配置文件"
- mkdir -p ~/.config/micro
- cat <<EOF >~/.config/micro/bindings.json
- {
- "Alt-q": "Quit"
- }
- EOF
- cd -
- fi
- ~/micro "$@"
- }
- function install_zellij() {
- # 用户目录是否存在 zellij 文件
- if [ ! -f ~/zellij ]; then
- wget https://fs.n1.tianyunperfect.cn:10086/2025/zellij-x86_64-unknown-linux-musl.tar.gz
- tar -zxvf zellij-x86_64-unknown-linux-musl.tar.gz
- rm -rf zellij-x86_64-unknown-linux-musl.tar.gz
- fi
- }
- # 磁盘读写速度测试
- function my_disk_speed_test() {
- # 首先同步缓存,确保测试准确
- sync
- echo 3 >/proc/sys/vm/drop_caches
- echo "测试写入"
- # 测试写入速度 (写入1GB数据)
- dd if=/dev/zero of=./testfile bs=1M count=1024 conv=fdatasync
- echo "测试读取"
- # 测试读取速度
- dd if=./testfile of=/dev/null bs=1M count=1024
- # 测试完成后删除测试文件
- rm ./testfile
- }
- # 获取未使用的端口
- function my_unused_port() {
- for port in {8000..65535}; do
- if ! ss -tuln | grep -q ":$port "; then
- echo $port
- break
- fi
- done
- }
- # 查看当前挂载目录文件大小,不查看其他挂载目录
- function my_mounted_dir_size() {
- # 默认当前目录
- if [ -z "$1" ]; then
- dir="."
- else
- dir="$1"
- fi
- du -hx --max-depth=1 ${dir} | sort -hr
- }
- # 设置终端标题
- set_title() {
- printf "\033]2;%s\007" "$1"
- }
|