脚本和示例

shell使用其他用户执行命令

echo "密码" | su - 用户名 -c "ls /"

更新当前目录下所有的git

#!/bin/bash
dir_list=$(ls)
current_dir=$(cd $(dirname $0); pwd)
for dir in ${dir_list[@]}; do
    if [ -d ${current_dir}/${dir} ]; then
        if [ -d ${current_dir}/${dir}/.git ]; then
            cd ${current_dir}/${dir}
            echo "正在更新目录${current_dir}/${dir}"
            git config --add core.filemode false
            git pull
        fi
    fi
done

shell expect 传参方式 远程执行命令后退出

path/脚本 koala abc123 192.168.10.10 ls

#!/usr/bin/expect
set user [lindex $argv 0]
set password [lindex $argv 1]
set host [lindex $argv 2]
set cmd [lindex $argv 3]

spawn ssh $user@$host

expect {
    "*yes/no" { send "yes\r"; exp_continue }
    "password:" { send "$password\r" }
}
expect "]*"
send "$cmd\r"
expect "]*"
send "exit\r"

shell expect 传参方式 远程执行命令后保持登录状态

#!/usr/bin/expect
set timeout -1
set user [lindex $argv 0]
set password [lindex $argv 1]
set host [lindex $argv 2]


spawn ssh $user@$host
expect {
    "*yes/no" { send "yes\r"; exp_continue }
    "password:" { send "$password\r" }
}
expect "]*"

interact

shell expect 结合 rsync 进行远程同步文件或目录

#!/usr/bin/expect
set user [lindex $argv 0]
set password [lindex $argv 1]
set host [lindex $argv 2]
set cmd [lindex $argv 3]

# 把远程的/tmp/12.txt 同步到本地的当前目录下
spawn rsync $user@$host:/tmp/12.txt ./

expect {
    "*yes/no" { send "yes\r"; exp_continue }
    "password:" { send "$password\r" }
}
expect eof

shell脚本模板

shell脚本模板

yum和apt搭建私有仓库

yum和apt搭建私有仓库

一个Java的纯shell构建启动脚本

一个Java的纯shell构建启动脚本

安装ssh服务并开启root登录

#!/bin/bash

sudo apt install -y openssh-server
sudo sed -i 's/^#Port.*/Port 22/g' /etc/ssh/sshd_config
sudo sed -i 's/^#AddressFamily.*/AddressFamily any/g' /etc/ssh/sshd_config
sudo sed -i 's/^#ListenAddress.*/ListenAddress 0.0.0.0/g' /etc/ssh/sshd_config
sudo sed -i 's/^#PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_config
sudo systemctl restart sshd.service

追加hosts配置

sudo cat >> /etc/hosts <<EOF
192.168.44.11 ubuntu1
192.168.44.12 ubuntu1
192.168.44.13 ubuntu1
EOF

清华源安装docker和cri

清华源安装docker和cri

#!/bin/bash

# https://kubernetes.io/zh-cn/docs/setup/production-environment/container-runtimes/#containerd-systemd

# 1. 在你的每个节点上,遵循安装 Docker Engine 指南为你的 Linux 发行版安装 Docker

sudo apt-get remove docker-doc docker-compose docker-compose-v2 podman-docker  ; 

sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
# 国内装docker用清华的源
curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Add the repository to Apt sources:
# 国内装docker用清华的源
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://reg-mirror.qiniu.com",
"https://registry.docker-cn.com"
],
"exec-opts": ["native.cgroupdriver=systemd"]
}

EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

# 2. 按照源代码仓库中的说明安装 cri-dockerd
# 对于 cri-dockerd,默认情况下,CRI 套接字是 /run/cri-dockerd.sock
git clone https://github.com/Mirantis/cri-dockerd.git
cd cri-dockerd
make cri-dockerd


#1. 安装cri-dockerd
sudo dpkg -i cri-dockerd_0.3.7.3-0.ubuntu-jammy_amd64.deb
#2. 调整启动参数
sudo sed -i -e 's#ExecStart=.*#ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.7#g' /lib/systemd/system/cri-docker.service

#3. 设置开机自启动和查看cri-docker状态
sudo systemctl daemon-reload
sudo systemctl enable cri-docker

sudo systemctl status cri-docker