初始文档
This commit is contained in:
151
Linux/Ansible自动化.md
Normal file
151
Linux/Ansible自动化.md
Normal file
@@ -0,0 +1,151 @@
|
||||
# ansible配置文件
|
||||
```sh
|
||||
# ansible的默认库存文件是/etc/ansible/hosts文件,如果运行时不指定-i 库存文件则会使用默认文件,解决方法:在当前目录创建ansible.cfg文件,添加以下内容
|
||||
[defaults]
|
||||
inventory = ./inventory.yml #库存文件路径
|
||||
```
|
||||
# 库存清单管理
|
||||
## 库存配置示例
|
||||
```yml
|
||||
# yaml文件清单配置示例
|
||||
all:
|
||||
children:
|
||||
web: #主机组
|
||||
hosts:
|
||||
192.168.1.10: #主机
|
||||
ansible_user: root #主机变量
|
||||
web.example.com:
|
||||
vars:
|
||||
anisble_user: root #主机组变量
|
||||
ansible_port: 22
|
||||
db:
|
||||
hosts:
|
||||
db[01:10].example.com: #批量定义10台主机
|
||||
192.168.2.[100:200]: #批量定义100台主机
|
||||
```
|
||||
## 测试库存
|
||||
```sh
|
||||
# 以json格式显示清单
|
||||
ansible-inventory -i inventory.yml --list
|
||||
# 以树状显示清单
|
||||
ansible-inventory -i inventory.yml --graph
|
||||
# 对web组主机进行ping测试
|
||||
ansible web -i inventory.yml -m ping
|
||||
```
|
||||
## 检查库存配置文件
|
||||
```sh
|
||||
ansible-playbook --check -i inventory.yml
|
||||
```
|
||||
# playbook
|
||||
## 执行特定任务
|
||||
### 1.使用tags标签
|
||||
```yaml
|
||||
# 示例任务定义
|
||||
- name: 任务A
|
||||
command: /bin/true
|
||||
tags:
|
||||
- task_a
|
||||
|
||||
- name: 任务B
|
||||
command: /bin/true
|
||||
tags:
|
||||
- task_b
|
||||
|
||||
- name: 任务C
|
||||
command: /bin/true
|
||||
tags:
|
||||
- task_c
|
||||
```
|
||||
```bash
|
||||
# 只执行带task_a标签的任务
|
||||
ansible-playbook playbook.yml --tags "task_a"
|
||||
|
||||
# 执行除task_b外的所有任务
|
||||
ansible-playbook playbook.yml --skip-tags "task_b"
|
||||
|
||||
# 执行多个标签的任务
|
||||
ansible-playbook playbook.yml --tags "task_a,task_c"
|
||||
```
|
||||
### 2.使用when条件控制
|
||||
```yaml
|
||||
- name: 可选执行的任务
|
||||
command: /bin/echo "这是可选任务"
|
||||
when: execute_optional_task is defined and execute_optional_task
|
||||
```
|
||||
```bash
|
||||
# 执行该任务(传递变量)
|
||||
ansible-playbook playbook.yml -e "execute_optional_task=true"
|
||||
|
||||
# 不执行该任务(不传递变量或设为false)
|
||||
ansible-playbook playbook.yml
|
||||
```
|
||||
### 3.使用--start-at-task参数
|
||||
```bash
|
||||
# 从"任务B"开始执行(跳过之前的所有任务)
|
||||
ansible-playbook playbook.yml --start-at-task "任务B"
|
||||
```
|
||||
## 创建包含加密内容的playbook
|
||||
```yaml
|
||||
# playbook.yml
|
||||
- hosts: all
|
||||
vars_files:
|
||||
- secrets.yml # 直接引用加密文件
|
||||
tasks:
|
||||
- name: 打印加密变量(仅示例,实际不要打印敏感信息)
|
||||
debug:
|
||||
msg: "Redhat用户: {{ rh_subscription_user }}"
|
||||
```
|
||||
|
||||
# ansible-vault加解密
|
||||
## 交互式秘钥加解密(临时)
|
||||
```sh
|
||||
# 加密文件,后续加解密时会提示输入密码
|
||||
ansible-vault encrypt 文件名
|
||||
# 加密字符串,并命名
|
||||
ansible-vault encrypt_string "my_redhat_password" --name "rh_subscription_pass"
|
||||
```
|
||||
## 秘钥文件加解密(推荐)
|
||||
```sh
|
||||
# 创建秘钥文件
|
||||
echo "my_secure_vault_pass" > vault_pass.txt
|
||||
# 限制文件权限
|
||||
chmod 600 vault_pass.txt
|
||||
|
||||
# 使用密钥文件加密字符串
|
||||
ansible-vault encrypt_string "my_redhat_password" --name "rh_subscription_pass" --vault-password-file vault_pass.txt
|
||||
# 使用秘钥文件加密文件
|
||||
ansible-vault encrypt secrets.yml --vault-password-file vault_pass.txt
|
||||
```
|
||||
|
||||
## 修改vault秘钥
|
||||
```sh
|
||||
# 交互式更换密钥(先输入旧密码,再输入新密码)
|
||||
ansible-vault rekey secrets.yml
|
||||
|
||||
# 使用旧密钥文件更换为新密钥文件
|
||||
ansible-vault rekey secrets.yml --vault-password-file old_vault_pass.txt --new-vault-password-file new_vault_pass.txt
|
||||
```
|
||||
|
||||
## 查看或编辑加密文件
|
||||
```sh
|
||||
# 查看加密文件内容(解密查看)
|
||||
ansible-vault view secrets.yml --vault-password-file vault_pass.txt
|
||||
|
||||
# 编辑加密文件(会自动重新加密保存)
|
||||
ansible-vault edit secrets.yml --vault-password-file vault_pass.txt
|
||||
```
|
||||
## 执行包含加密内容的palybook
|
||||
```sh
|
||||
# 执行时会提示输入Vault密码
|
||||
ansible-playbook playbook.yml --ask-vault-pass
|
||||
# 通过密钥文件提供密钥
|
||||
ansible-playbook playbook.yml --vault-password-file vault_pass.txt
|
||||
|
||||
```ini
|
||||
# 在ansible.cfg中配置默认秘钥文件路径
|
||||
[defaults]
|
||||
vault_password_file = ./vault_pass.txt # 相对或绝对路径
|
||||
```
|
||||
```sh
|
||||
ansible-playbook playbook.yml # 自动读取配置的密钥文件
|
||||
```
|
||||
81
Linux/ESXi常见问题.md
Normal file
81
Linux/ESXi常见问题.md
Normal file
@@ -0,0 +1,81 @@
|
||||
## img文件转化为vmdk文件
|
||||
|
||||
以openwrt镜像为例:https://downloads.openwrt.org/releases/22.03.0-rc6/targets/x86/64/openwrt-22.03.0-rc6-x86-64-generic-squashfs-combined-efi.img.gz
|
||||
|
||||
```sh
|
||||
qemu-img convert -f raw openwrt-22.03.0-rc6-x86-64-generic-squashfs-combined-efi.img -O vmdk openwrt.vmdk
|
||||
```
|
||||
openwrt.vmdk文件可直接在vmware work中使用
|
||||
|
||||
在esxi中使用需要进行格式转换,进入esxi主机的shell
|
||||
```sh
|
||||
vmkfstools -i
|
||||
openwrt.vmdk -d eagerzeroedthick openwrt-esxi.vmdk
|
||||
```
|
||||
|
||||
## esxi镜像封装驱动环境搭建
|
||||
[esxi-customizer-ps脚本链接](https://github.com/VFrontDe-Org/ESXi-Customizer-PS)
|
||||
1. 先安装python3.7.9版本及相关包
|
||||
```sh
|
||||
pip install six psutil lxml pyopenssl -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
|
||||
```
|
||||
2. 在以管理员运行powershell
|
||||
```powershell
|
||||
Install-Module -Name VMware.PowerCLI
|
||||
|
||||
# 验证安装,输出welcome to VMware PowerCLI即安装成功
|
||||
Import-Module -Name VMware.PowerCLI
|
||||
|
||||
# 进入esxi的zip镜像所在目录
|
||||
# 设置安全策略(unrestricted可以运行任意脚本且不警告)
|
||||
Set-ExecutionPolicy Unrestricted
|
||||
|
||||
```
|
||||
|
||||
### esxi7.0以下封装驱动
|
||||
[7.0以下驱动下载](https://vibsdepot.v-front.de/wiki/index.php/List_of_currently_available_ESXi_packages)
|
||||
```powershell
|
||||
# 把脚本和esxi的zip文件都放到同一目录下,在当前目录下新建一个目录放vib驱动文件
|
||||
# 运行脚本打包镜像(.\pkg\为vib驱动文件所在的目录),打包成功后会在当前目录下生成iso镜像
|
||||
.\ESXi-Customizer-PS.ps1 -izip .\ESXi670-201912001.zip -pkgDir .\pkg\
|
||||
```
|
||||
### esxi7.0以上封装驱动
|
||||
[7.0以上驱动下载](https://www.diy-nas.cn/?golink=aHR0cHM6Ly9mbGluZ3Mudm13YXJlLmNvbS9mbGluZ3M/cHJvZHVjdD1FU1hp)
|
||||
```powershell
|
||||
# 驱动和zip镜像都放到统一目录下,设置安全策略
|
||||
|
||||
# 导入所需要的包
|
||||
Add-EsxSoftwareDepot .\ESXi800-VMKUSB-NIC-FLING-61054763-component-20826251.zip
|
||||
Add-EsxSoftwareDepot .\Net-Community-Driver_1.2.7.0-1vmw.700.1.0.15843807_19480755.zip
|
||||
Add-EsxSoftwareDepot .\nvme-community-driver_1.0.1.0-3vmw.700.1.0.15843807-component-18902434.zip
|
||||
Add-EsxSoftwareDepot .\VMware-ESXi-8.0b-21203435-depot.zip
|
||||
|
||||
# 获取官方配置文件
|
||||
Get-EsxImageProfile
|
||||
|
||||
# 克隆一份到本地,ESXi-8.0b-21203435-standard是上一步获取的,name参数随意,这里设为esxi-8.0,vendor是版权声明
|
||||
New-EsxImageProfile -CloneProfile ESXi-8.0b-21203435-standard -Name esxi-8.0 -Vendor cvms.cn
|
||||
|
||||
# 如果使用了第三方包需要修改安全级别为社区
|
||||
Set-EsxImageProfile -ImageProfile esxi-8.0 -AcceptanceLevel CommunitySupported
|
||||
|
||||
# 导入驱动文件,vmkusb-nic-fling名称是驱动压缩文件内的vib20目录下的目录名称
|
||||
Add-EsxSoftwarePackage -ImageProfile esxi-8.0 -SoftwarePackage vmkusb-nic-fling
|
||||
Add-EsxSoftwarePackage -ImageProfile esxi-8.0 -SoftwarePackage net-community
|
||||
Add-EsxSoftwarePackage -ImageProfile esxi-8.0 -SoftwarePackage nvme-community
|
||||
|
||||
# 导出镜像在当前目录
|
||||
Export-EsxImageProfile -ImageProfile esxi-8.0 -ExportToIso -FilePath VMware-ESXi-8.0b-21203435.iso
|
||||
```
|
||||
|
||||
## esxi格式化硬盘
|
||||
> fdisk格式的分区esxi无法识别
|
||||
```sh
|
||||
# 获取磁盘分区
|
||||
partedUtil getptbl /dev/disks/磁盘文件名称
|
||||
|
||||
# 删除原有分区
|
||||
partedUtil delete /dev/disks/磁盘文件名称 1
|
||||
|
||||
# 删除所有分区后可以在esxi控制台新建存储了
|
||||
```
|
||||
430
Linux/Linux开源软件配置.md
Normal file
430
Linux/Linux开源软件配置.md
Normal file
@@ -0,0 +1,430 @@
|
||||
# frp配置
|
||||
## 1.配置systemd服务
|
||||
```sh
|
||||
sudo vim /etc/systemd/system/frps.service
|
||||
# 配置文件内容
|
||||
[Unit]
|
||||
# 服务名称,可自定义
|
||||
Description = frp server
|
||||
After = network.target syslog.target
|
||||
Wants = network.target
|
||||
|
||||
[Service]
|
||||
Type = simple
|
||||
# 启动frps的命令,需修改为您的frps的安装路径
|
||||
ExecStart = /path/to/frps -c /path/to/frps.toml
|
||||
|
||||
[Install]
|
||||
WantedBy = multi-user.target
|
||||
```
|
||||
## 2.tls双向认证加密
|
||||
### a.创建加密证书
|
||||
```sh
|
||||
# 创建目录存放证书
|
||||
mkdir frp_certs && cd frp_certs
|
||||
# 拷贝openssl默认配置文件到当前目录
|
||||
cp /etc/ssl/openssl.cnf ./
|
||||
# 生成CA秘钥
|
||||
openssl genrsa -out frp_ca.key 2048
|
||||
# 生成CA证书
|
||||
openssl req -x509 -new -nodes -key frp_ca.key -subj "/CN=frp-ca" -days 3650 -out frp_ca.crt
|
||||
# 创建客户端证书专用配置文件,按实际修改客户端ip地址
|
||||
cat > frpc.cnf << EOF
|
||||
[ req ]
|
||||
distinguished_name = req_distinguished_name
|
||||
req_extensions = v3_req
|
||||
prompt = no
|
||||
|
||||
[ req_distinguished_name ]
|
||||
C = CN
|
||||
ST = Beijing
|
||||
L = Beijing
|
||||
O = Frp
|
||||
CN = frp-client
|
||||
|
||||
[ v3_req ]
|
||||
subjectAltName = @alt_names
|
||||
|
||||
[ alt_names ]
|
||||
IP.1 = 192.168.140.122
|
||||
EOF
|
||||
# 创建服务端专用配置文件,按实际修改服务器ip地址
|
||||
cat > frps.cnf << EOF
|
||||
[ req ]
|
||||
distinguished_name = req_distinguished_name
|
||||
req_extensions = v3_req
|
||||
prompt = no
|
||||
|
||||
[ req_distinguished_name ]
|
||||
C = CN
|
||||
ST = Beijing
|
||||
L = Beijing
|
||||
O = Frp
|
||||
CN = frp-server
|
||||
|
||||
[ v3_req ]
|
||||
subjectAltName = @alt_names
|
||||
|
||||
[ alt_names ]
|
||||
IP.1 = 47.106.206.100
|
||||
EOF
|
||||
# 生成服务端私钥
|
||||
openssl genrsa -out frps.key 2048
|
||||
# 生成服务端CSR(强制包含 IP SAN)
|
||||
openssl req -new -sha256 -key frps.key -subj "/C=CN/ST=Beijing/L=Beijing/O=Frp/CN=frp-server" -config frps.cnf -extensions v3_req -out frps.csr
|
||||
# 生成服务端证书
|
||||
openssl x509 -req -days 3650 -sha256 -in frps.csr -CA frp_ca.crt -CAkey frp_ca.key -CAcreateserial -extfile frps.cnf -extensions v3_req -out frps.crt
|
||||
# 生成客户端私钥
|
||||
openssl genrsa -out frpc.key 2048
|
||||
# 生成客户端CSR(强制包含 IP SAN)
|
||||
openssl req -new -sha256 -key frpc.key -subj "/C=CN/ST=Beijing/L=Beijing/O=Frp/CN=frp-client" -config frpc.cnf -extensions v3_req -out frpc.csr
|
||||
# 生成客户端证书
|
||||
openssl x509 -req -days 3650 -sha256 -in frpc.csr -CA frp_ca.crt -CAkey frp_ca.key -CAcreateserial -extfile frpc.cnf -extensions v3_req -out frpc.crt
|
||||
# 验证服务端证书是否包含服务器IP,输出结果需显示服务器IP
|
||||
openssl x509 -in frps.crt -text -noout | grep -A 2 "Subject Alternative Name"
|
||||
# 验证客户端证书是否包含客户端IP,输出结果需显示客户端IP
|
||||
openssl x509 -in frpc.crt -text -noout | grep -A 2 "Subject Alternative Name"
|
||||
|
||||
```
|
||||
### b.以toml格式配置文件
|
||||
```sh
|
||||
# 设置token身份认证
|
||||
auth.method = "token"
|
||||
auth.token = "frptoken"
|
||||
# 在服务端添加以下配置,改为实际的证书路径
|
||||
transport.tls.force = true # 强制启用双向验证
|
||||
transport.tls.certFile = "/etc/frp/ssl/frps.crt"
|
||||
transport.tls.keyFile = "/etc/frp/ssl/frps.key"
|
||||
transport.tls.trustedCaFile = "/etc/frp/ssl/frp_ca.crt"
|
||||
# 在客户端添加以下配置,改为实际的证书路径
|
||||
transport.tls.enable = true
|
||||
transport.tls.certFile = "/etc/frp/ssl/frpc.crt"
|
||||
transport.tls.keyFile = "/etc/frp/ssl/frpc.key"
|
||||
transport.tls.trustedCaFile = "/etc/frp/ssl/frp_ca.crt"
|
||||
|
||||
```
|
||||
## 3.创建tcp代理
|
||||
```sh
|
||||
# 代理本机
|
||||
[[proxies]]
|
||||
name = "ssh-local"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 22
|
||||
remotePort = 12322
|
||||
# 代理其他主机端口
|
||||
[[proxies]]
|
||||
name = "dev-ssh"
|
||||
type = "tcp"
|
||||
localIP = "192.168.140.121"
|
||||
localPort = 22
|
||||
remotePort = 12323
|
||||
```
|
||||
## 4.配置负载均衡及健康检查
|
||||
```sh
|
||||
# 支持的代理类型包括:tcp, http, tcpmux
|
||||
|
||||
# frpc.toml
|
||||
[[proxies]]
|
||||
name = "test1"
|
||||
type = "tcp"
|
||||
localPort = 8080
|
||||
remotePort = 80
|
||||
loadBalancer.group = "web"
|
||||
loadBalancer.groupKey = "123"
|
||||
|
||||
[[proxies]]
|
||||
name = "test2"
|
||||
type = "tcp"
|
||||
localPort = 8081
|
||||
remotePort = 80
|
||||
loadBalancer.group = "web"
|
||||
loadBalancer.groupKey = "123"
|
||||
|
||||
# tcp健康检查
|
||||
[[proxies]]
|
||||
name = "test1"
|
||||
type = "tcp"
|
||||
localPort = 22
|
||||
remotePort = 6000
|
||||
# 启用健康检查,类型为 tcp
|
||||
healthCheck.type = "tcp"
|
||||
# 建立连接超时时间为 3 秒
|
||||
healthCheck.timeoutSeconds = 3
|
||||
# 连续 3 次检查失败,此 proxy 会被摘除
|
||||
healthCheck.maxFailed = 3
|
||||
# 每隔 10 秒进行一次健康检查
|
||||
healthCheck.intervalSeconds = 10
|
||||
|
||||
# http健康检查
|
||||
[[proxies]]
|
||||
name = "web"
|
||||
type = "http"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 80
|
||||
customDomains = ["test.yourdomain.com"]
|
||||
# 启用健康检查,类型为 http
|
||||
healthCheck.type = "http"
|
||||
# 健康检查发送 http 请求的 path,后端服务需要返回 2xx 的 http 状态码
|
||||
healthCheck.path = "/status"
|
||||
healthCheck.timeoutSeconds = 3
|
||||
healthCheck.maxFailed = 3
|
||||
healthCheck.intervalSeconds = 10
|
||||
|
||||
```
|
||||
## 5.获取用户真实IP
|
||||
```sh
|
||||
#目前只有 http 类型的代理或者启用了 https2http 或 https2https 插件的代理支持这一功能。可以通过 HTTP 请求 header 中的 X-Forwarded-For 来获取用户真实 IP,默认启用.只要实现proxy协议的tcp后端也可以获取到
|
||||
|
||||
# 在客户端配置文件frpc.toml添加
|
||||
transport.proxyProtocolVersion = "v2"
|
||||
```
|
||||
## 6.代理限速
|
||||
```sh
|
||||
# 在客户端配置文件frpc.toml添加
|
||||
transport.bandwidthLimit = "1MB" #单位支持MB和KB
|
||||
# 在服务端限速
|
||||
transport.bandwidthLimitMode = "server"
|
||||
```
|
||||
## 7.虚拟网络(类似组网)
|
||||
- 服务端配置
|
||||
```sh
|
||||
# 服务端配置frps.toml
|
||||
featureGates = { VirtualNet = true }
|
||||
|
||||
serverAddr = "x.x.x.x"
|
||||
serverPort = 7000
|
||||
featureGates = { VirtualNet = true }
|
||||
|
||||
# 配置虚拟网络接口
|
||||
virtualNet.address = "100.86.0.1/24"
|
||||
|
||||
[[proxies]]
|
||||
name = "vnet-server"
|
||||
type = "stcp"
|
||||
secretKey = "your-secret-key"
|
||||
[proxies.plugin]
|
||||
type = "virtual_net"
|
||||
```
|
||||
- 客户端配置
|
||||
```sh
|
||||
# frpc.toml (客户端)
|
||||
serverAddr = "x.x.x.x"
|
||||
serverPort = 7000
|
||||
featureGates = { VirtualNet = true }
|
||||
|
||||
# 配置虚拟网络接口
|
||||
virtualNet.address = "100.86.0.2/24"
|
||||
|
||||
[[visitors]]
|
||||
name = "vnet-visitor"
|
||||
type = "stcp"
|
||||
serverName = "vnet-server"
|
||||
secretKey = "your-secret-key"
|
||||
bindPort = -1
|
||||
[visitors.plugin]
|
||||
type = "virtual_net"
|
||||
destinationIP = "100.86.0.1" # 目标虚拟 IP 地址
|
||||
```
|
||||
## 8.安全代理STCP
|
||||
`使用 stcp(secret tcp) 类型的代理可以让您安全地将内网服务暴露给经过授权的用户,这需要访问者也部署 frpc 客户端`
|
||||
- 被访问客户端配置
|
||||
```sh
|
||||
serverAddr = "x.x.x.x"
|
||||
serverPort = 7000
|
||||
|
||||
[[proxies]]
|
||||
name = "secret_ssh"
|
||||
type = "stcp"
|
||||
# 只有与此处设置的 secretKey 一致的用户才能访问此服务
|
||||
secretKey = "abcdefg"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 22
|
||||
|
||||
```
|
||||
- 访问者客户端配置
|
||||
```sh
|
||||
serverAddr = "x.x.x.x"
|
||||
serverPort = 7000
|
||||
|
||||
[[visitors]]
|
||||
name = "secret_ssh_visitor"
|
||||
type = "stcp"
|
||||
# 要访问的 stcp 代理的名字
|
||||
serverName = "secret_ssh"
|
||||
secretKey = "abcdefg"
|
||||
# 绑定本地端口以访问 SSH 服务
|
||||
bindAddr = "127.0.0.1"
|
||||
bindPort = 6000
|
||||
|
||||
```
|
||||
- 访问示例
|
||||
```sh
|
||||
ssh -o Port=6000 test@127.0.0.1
|
||||
```
|
||||
## 9.点对点透传(P2P)
|
||||
- 被访问客户端配置
|
||||
```sh
|
||||
serverAddr = "x.x.x.x"
|
||||
serverPort = 7000
|
||||
# 如果默认的 STUN 服务器不可用,可以配置一个新的 STUN 服务器
|
||||
# natHoleStunServer = "xxx"
|
||||
|
||||
[[proxies]]
|
||||
name = "p2p_ssh"
|
||||
type = "xtcp"
|
||||
# 只有共享密钥 (secretKey) 与服务器端一致的用户才能访问该服务
|
||||
secretKey = "abcdefg"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 22
|
||||
|
||||
```
|
||||
- 访问者客户端配置
|
||||
```sh
|
||||
serverAddr = "x.x.x.x"
|
||||
serverPort = 7000
|
||||
# 如果默认的 STUN 服务器不可用,可以配置一个新的 STUN 服务器
|
||||
# natHoleStunServer = "xxx"
|
||||
|
||||
[[visitors]]
|
||||
name = "p2p_ssh_visitor"
|
||||
type = "xtcp"
|
||||
# 要访问的 P2P 代理的名称
|
||||
serverName = "p2p_ssh"
|
||||
secretKey = "abcdefg"
|
||||
# 绑定本地端口以访问 SSH 服务
|
||||
bindAddr = "127.0.0.1"
|
||||
bindPort = 6000
|
||||
# 如果需要自动保持隧道打开,将其设置为 true
|
||||
# keepTunnelOpen = false
|
||||
|
||||
```
|
||||
- 配置回滚,如果打洞失败改为stcp
|
||||
```sh
|
||||
[[visitors]]
|
||||
name = "stcp-visitor"
|
||||
type = "stcp"
|
||||
serverName = "stcp-test"
|
||||
secretKey = "abc"
|
||||
bindPort = -1
|
||||
|
||||
[[visitors]]
|
||||
name = "xtcp-visitor"
|
||||
type = "xtcp"
|
||||
serverName = "xtcp-test"
|
||||
secretKey = "abc"
|
||||
bindAddr = "127.0.0.1"
|
||||
bindPort = 9002
|
||||
fallbackTo = "stcp-visitor"
|
||||
fallbackTimeoutMs = 2000 #超时时间,单位:毫秒
|
||||
|
||||
```
|
||||
|
||||
# kvm虚拟化
|
||||
## KVM存储池管理
|
||||
### 删除存储池
|
||||
```sh
|
||||
# 列出所有存储池
|
||||
sudo virsh pool-list --all
|
||||
# 停用存储池
|
||||
sudo virsh pool-destroy <存储池名称>
|
||||
# 取消存储池自动启动
|
||||
sudo virsh pool-autostart --disable <存储池名称>
|
||||
# 删除存储池文件
|
||||
sudo virsh pool-delete <存储池名称>
|
||||
# 取消存储池定义
|
||||
sudo virsh pool-undefine <存储池名称>
|
||||
```
|
||||
### 创建存储池
|
||||
```sh
|
||||
# 存储池类型:本地文件系统,网络文件系统,物理磁盘设备,lvm卷组,iSCSI,预格式化的块设备
|
||||
# 创建目录/data/vmfs,定义并构建一个基于本地目录的存储池,
|
||||
virsh pool-define-as vmdisk --type dir --target /data/vmfs
|
||||
virsh pool-build vmdisk
|
||||
# 激活并设置开机自启
|
||||
virsh pool-start vmdisk
|
||||
virsh pool-autostart vmdisk
|
||||
|
||||
# 在存储池中创建磁盘卷
|
||||
virsh vol-create-as vmdisk myvm-disk.qcow2 20G --format qcow2
|
||||
# 使用qemu-img直接创建磁盘文件
|
||||
qemu-img create -f qcow2 /var/lib/libvirt/images/myvm-disk.qcow2 20G
|
||||
```
|
||||
## KVM磁盘管理
|
||||
```sh
|
||||
# 扩容虚拟机磁盘
|
||||
qemu-img resize /var/lib/libvirt/images/vm_name.qcow2 +100G
|
||||
|
||||
```
|
||||
## KVM状态管理
|
||||
```sh
|
||||
# 列出虚拟机
|
||||
virsh list --all #查看所有虚拟机(包括已关闭的)
|
||||
|
||||
# 启动虚拟机
|
||||
virsh start <虚拟机名称> #启动指定虚拟机
|
||||
|
||||
# 正常关机
|
||||
virsh shutdown <虚拟机名称> #向虚拟机发送关机信号,推荐使用
|
||||
|
||||
# 强制关机
|
||||
virsh destroy <虚拟机名称> #相当于直接断电,用于虚拟机无响应时
|
||||
|
||||
# 重启虚拟机
|
||||
virsh reboot <虚拟机名称> #重启虚拟机
|
||||
|
||||
# 挂起/恢复
|
||||
virsh suspend <虚拟机名称>/ virsh resume <虚拟机名称> #暂停或恢复虚拟机运行
|
||||
|
||||
# 设置开机自启
|
||||
virsh autostart <虚拟机名称> #宿主机启动时,该虚拟机自动启动
|
||||
|
||||
# 连接控制台
|
||||
virsh console <虚拟机名称> #连接到虚拟机的文本控制台
|
||||
```
|
||||
## KVM快照管理
|
||||
```sh
|
||||
# 创建快照
|
||||
virsh snapshot-create-as --domain <虚拟机名称> --name <快照名称> #为指定虚拟机创建快照
|
||||
|
||||
# 查看快照列表
|
||||
virsh snapshot-list <虚拟机名称> #查看虚拟机的所有快照
|
||||
|
||||
# 恢复快照
|
||||
virsh snapshot-revert --domain <虚拟机名称> --snapshotname <快照名称> #将虚拟机状态恢复到创建快照时的状态
|
||||
|
||||
# 删除快照
|
||||
virsh snapshot-delete --domain <虚拟机名称> --snapshotname <快照名称>
|
||||
```
|
||||
## KVM网络管理
|
||||
```sh
|
||||
|
||||
```
|
||||
## KVM配置管理
|
||||
```sh
|
||||
# 查看虚拟机详细信息
|
||||
virsh dominfo <虚拟机名称>
|
||||
|
||||
# 导出虚拟机xml配置
|
||||
virsh dumpxml <虚拟机名称> > vm-config.xml #可用于备份或复制虚拟机配置
|
||||
|
||||
# 编辑虚拟机配置
|
||||
virsh edit <虚拟机名称> #这是最安全的修改配置方式,它会检查XML语法
|
||||
```
|
||||
# caddy服务
|
||||
```json
|
||||
# caddyfile配置文件
|
||||
|
||||
# 配置重定向
|
||||
cvms.cn {
|
||||
redir https://www.cvms.cn{uri} permanent
|
||||
}
|
||||
# 配置反向代理
|
||||
www.cvms.cn {
|
||||
reverse_proxy http://124.71.69.197:4000
|
||||
}
|
||||
# 使用http协议反向代理
|
||||
http://api.cvms.cn {
|
||||
reverse_proxy http://localhost:45000
|
||||
}
|
||||
```
|
||||
1612
Linux/Linux笔记.md
Normal file
1612
Linux/Linux笔记.md
Normal file
File diff suppressed because it is too large
Load Diff
305
Linux/Linux通用文档.md
Normal file
305
Linux/Linux通用文档.md
Normal file
@@ -0,0 +1,305 @@
|
||||
|
||||
# 文件管理
|
||||
## ACL访问控制
|
||||
|
||||
|
||||
# 网络管理
|
||||
## nmcli命令管理网络配置
|
||||
### 1.管理网络连接与状态
|
||||
```sh
|
||||
# 显示所有连接(包括名称、UUID、类型、设备)
|
||||
nmcli connection show
|
||||
|
||||
#仅显示活动连接
|
||||
nmcli connection show --active
|
||||
|
||||
# 查看所有网络设备及其状态(如连接状态、类型):
|
||||
nmcli device status
|
||||
|
||||
# 查看指定设备的详细信息(如 IP、MAC 地址
|
||||
nmcli device show eth0
|
||||
|
||||
# 删除网卡
|
||||
nmcli conn delete eth0
|
||||
|
||||
# 添加物理网卡
|
||||
nmcli connection add type ethernet ifname ens38 con-name my-ens38
|
||||
# 添加网桥从接口网卡
|
||||
nmcli conn add type bridge-slave ifname enp1s0 con-name enp1s0 master bridge0
|
||||
|
||||
# 激活(启用)指定连接
|
||||
nmcli connection up "Wired connection 1"
|
||||
|
||||
# 停用指定连接
|
||||
nmcli connection down "Wired connection 1"
|
||||
|
||||
# 启用所有网络管理
|
||||
nmcli networking on
|
||||
|
||||
# 禁用所有网络管理
|
||||
nmcli networking off
|
||||
|
||||
# 禁用再启用设备(相当于重启某个网卡
|
||||
nmcli device disconnect eth0 && nmcli device connect eth0
|
||||
|
||||
# 重新加载连接配置(修改配置文件后
|
||||
nmcli connection reload
|
||||
|
||||
# 检查网络连通性
|
||||
nmcli networking connectivity
|
||||
|
||||
# 监控网络状态变化
|
||||
nmcli monitor
|
||||
|
||||
# 重载配置
|
||||
nmcli conn reload
|
||||
|
||||
# 修改设备名称
|
||||
sudo nmcli connection modify "旧连接名" connection.id "新连接名"
|
||||
```
|
||||
### 2.wifi管理
|
||||
```sh
|
||||
# 列出所有可用的 Wi-Fi 网络
|
||||
nmcli device wifi list
|
||||
# 连接到有密码保护的 Wi-Fi 网络
|
||||
nmcli device wifi connect "SSID名称" password "你的密码"
|
||||
# 连接到隐藏的 Wi-Fi 网络
|
||||
nmcli device wifi connect "SSID名称" password "你的密码" hidden yes
|
||||
# 断开当前 Wi-Fi 连接
|
||||
nmcli device disconnect wlan0 # wlan0 为你的无线设备名
|
||||
# 打开 Wi-Fi
|
||||
nmcli radio wifi on
|
||||
# 关闭 Wi-Fi
|
||||
nmcli radio wifi off
|
||||
# 扫描wifi
|
||||
nmcli device wifi rescan
|
||||
```
|
||||
### 3.有线网络管理
|
||||
```sh
|
||||
# 配置静态 IP 地址
|
||||
nmcli connection modify "eth0" ipv4.method manual \
|
||||
ipv4.addresses 192.168.1.100/24 \
|
||||
ipv4.gateway 192.168.1.1 \
|
||||
ipv4.dns 8.8.8.8
|
||||
# 激活配置使其生效
|
||||
nmcli connection up "eth0"
|
||||
|
||||
# 配置动态 IP(DHCP)
|
||||
# 将 IPv4 方法设置为自动以通过 DHCP 获取 IP
|
||||
nmcli connection modify "eth0" ipv4.method auto
|
||||
nmcli connection up "eth0"
|
||||
|
||||
# 添加多个 IP 地址
|
||||
# 为连接 eth0 添加一个辅助 IP 地址
|
||||
nmcli connection modify "eth0" +ipv4.addresses "192.168.1.101/24"
|
||||
nmcli connection up "eth0"
|
||||
|
||||
|
||||
```
|
||||
# 磁盘管理
|
||||
### LVM虚拟磁盘
|
||||
#### LVM功能介绍
|
||||
**LVM**(Logical Volume Manager,逻辑卷管理)是Linux系统中一种强大的**磁盘管理机制**,它在物理磁盘和文件系统之间增加了一个抽象层,使管理员能够**灵活地管理存储空间**。LVM通过将物理存储资源虚拟化,允许动态调整磁盘容量而无需重新分区或中断系统运行,极大提高了存储管理的便捷性和效率。
|
||||
LVM的核心组件包括**物理卷(PV)**、**卷组(VG)**和**逻辑卷(LV)**。物理卷是LVM的基本存储单元,可以是整个物理磁盘或磁盘分区,卷组由一个或多个物理卷组成,形成一个存储池,用于统一管理物理存储资源
|
||||
逻辑卷是从卷组中划分出的虚拟磁盘分区,可以在其上创建文件系统并挂载使用,LVM的最小存储单元是**物理扩展块(PE)**,默认大小为4MB,物理卷被划分为多个PE,逻辑卷则由多个逻辑扩展块(LE)组成,LE与PE一一对应。
|
||||
LVM的**工作原理**是通过抽象层屏蔽下层物理磁盘的布局,提供统一的存储视图。管理员可以动态调整逻辑卷的大小,添加或移除物理卷,而无需关心数据的物理存储位置,这种机制使得存储管理更加灵活,特别适用于需要频繁调整存储空间的场景。
|
||||
|
||||
_表:LVM核心组件及其功能
|
||||
|
||||
|**组件**|**全称**|**功能描述**|
|
||||
|---|---|---|
|
||||
|**PV (Physical Volume)**|物理卷|LVM的基本存储单元,可以是物理磁盘或分区,被划分为多个PE|
|
||||
|**VG (Volume Group)**|卷组|由一个或多个PV组成的存储池,用于集中管理物理存储资源|
|
||||
|**LV (Logical Volume)**|逻辑卷|从VG中划分出的虚拟磁盘分区,可格式化为文件系统并挂载使用|
|
||||
|**PE (Physical Extent)**|物理扩展块|PV中可分配的最小存储单元,默认大小为4MB|
|
||||
|**LE (Logical Extent)**|逻辑扩展块|LV中可分配的最小存储单元,与PE大小相同且一一对应|
|
||||
##### LVM分区与传统分区对比
|
||||
|
||||
|特性|传统分区|LVM (逻辑卷管理)|
|
||||
|---|---|---|
|
||||
|**灵活性**|分区大小固定,调整困难且风险高|**可动态调整**逻辑卷大小,无需重启|
|
||||
|**存储池**|每个分区独立,无法合并使用|将**多个物理磁盘/分区**整合为单一存储池(卷组)|
|
||||
|**扩展性**|新增硬盘需手动迁移数据|可轻松将新硬盘加入现有存储池,**无缝扩展**容量|
|
||||
|**高级功能**|不支持|支持**快照**(用于备份)、**条带化、镜像**等|
|
||||
|**管理复杂度**|简单直观|需要学习额外概念和命令|
|
||||
|**性能**|无额外开销|有**轻微性能开销**|
|
||||
|**数据恢复**|相对简单|略复杂,需专用工具|
|
||||
|
||||
**✅ 推荐使用 LVM 的场景:**
|
||||
- **服务器环境**:需要灵活调整分区大小,避免因某个分区空间耗尽而停机维护
|
||||
- **多磁盘系统**:希望轻松整合多个物理磁盘的容量,并能够从存储池中按需分配空间
|
||||
- **需要高级功能**:如使用快照功能进行在线备份
|
||||
- **不确定未来存储需求时**:LVM 提供了未来调整的余地,无需在初始分区时就精确设定不可更改的大小
|
||||
**❌ 可能无需 LVM 的场景:**
|
||||
- **简单的桌面系统**:磁盘分区结构固定,没有调整需求
|
||||
- **嵌入式设备或小型系统**:对存储需求非常固定,且资源有限
|
||||
- **对 I/O 性能极其敏感的应用**:希望避免 LVM 可能带来的轻微性能开销
|
||||
|
||||
|
||||
#### 物理卷PV操作
|
||||
```sh
|
||||
# pvcreate将物理设备初始化为物理卷
|
||||
pvcreate /dev/sdb1 #将分区/dev/sdb1初始化为物理卷
|
||||
|
||||
# pvdisplay显示物理卷的详细信息
|
||||
pvdisplay /dev/sdb1 #显示指定物理卷的详细信息
|
||||
|
||||
# pvscan扫描系统中所有的物理卷
|
||||
pvscan #列出系统中所有物理卷
|
||||
|
||||
# pvs以简洁格式显示物理卷信息
|
||||
pvs #提供物理卷的概要信息
|
||||
|
||||
# pvremove移除物理卷上的LVM元数据
|
||||
pvremove /dev/sdb1 #移除/dev/sdb1上的LVM标识,使其不再为物理卷
|
||||
|
||||
# pvmove在卷组中移动物理卷上的数据
|
||||
pvmove /dev/sdb1 #将数据从/dev/sdb1移动到卷组中的其他物理卷
|
||||
|
||||
# pvchange更改物理卷的属性
|
||||
pvchange -x n /dev/sdb1 #禁止从物理卷/dev/sdb1分配PE
|
||||
```
|
||||
#### 卷组VG操作
|
||||
```sh
|
||||
#vgcreate创建卷组
|
||||
vgcreate my_vg /dev/sdb1 /dev/sdb2 #使用两个物理卷创建名为 my_vg的卷组
|
||||
|
||||
# vgdisplay显示卷组的详细信息
|
||||
vgdisplay my_vg #显示指定卷组的详细信息
|
||||
|
||||
# vgscan扫描系统中所有的卷组
|
||||
vgscan #检测并列出系统中所有卷组
|
||||
|
||||
# vgs以简洁格式显示卷组信息
|
||||
vgs #提供卷组的概要信息
|
||||
|
||||
# vgextend扩展卷组容量(添加物理卷)
|
||||
vgextend my_vg /dev/sdc1 #将物理卷/dev/sdc1添加到卷组my_vg中
|
||||
|
||||
# vgreduce缩减卷组容量(移除物理卷)
|
||||
vgreduce my_vg /dev/sdb1 #从卷组my_vg中移除物理卷/dev/sdb1
|
||||
|
||||
# vgremove删除卷组
|
||||
vgremove my_vg #删除名为 my_vg的卷组
|
||||
|
||||
# vgchange更改卷组属性(如激活/停用)
|
||||
vgchange -a n my_vg #停用卷组 my_vg
|
||||
|
||||
# vgexport导出卷组
|
||||
vgexport my_vg #将卷组 my_vg从系统中导出(常用于系统间移动卷组)
|
||||
|
||||
# vgimport导入卷组
|
||||
vgimport my_vg #将卷组 my_vg导入系统
|
||||
```
|
||||
#### 逻辑卷LV操作
|
||||
```sh
|
||||
# lvcreate创建逻辑卷,大写L指定容量,小写l使用百分比
|
||||
lvcreate -L 10G -n my_lv my_vg #在卷组 my_vg中创建大小为10G、名为 my_lv的逻辑卷
|
||||
lvcreate -l 100%FREE -n lv_name vg_name #将卷组所有空间划分给逻辑卷
|
||||
|
||||
# lvdisplay显示逻辑卷的详细信息
|
||||
lvdisplay /dev/my_vg/my_lv #显示指定逻辑卷的详细信息
|
||||
|
||||
# lvscan扫描系统中所有的逻辑卷
|
||||
lvscan # 检测并列出系统中所有逻辑卷
|
||||
|
||||
# lvs以简洁格式显示逻辑卷信息
|
||||
lvs #提供逻辑卷的概要信息
|
||||
|
||||
# lvextend扩展逻辑卷容量
|
||||
lvextend -L +5G /dev/my_vg/my_lv #将逻辑卷 my_lv扩展5G
|
||||
|
||||
# lvreduce缩减逻辑卷容量 (需谨慎操作)
|
||||
lvreduce -L -2G /dev/my_vg/my_lv #将逻辑卷 my_lv缩减2G (务必先备份数据并卸载文件系统)
|
||||
|
||||
# lvremove删除逻辑卷
|
||||
lvremove /dev/my_vg/my_lv #删除逻辑卷 my_lv
|
||||
|
||||
# lvresize调整逻辑卷大小(扩展或缩减)
|
||||
lvresize -L 15G /dev/my_vg/my_lv #将逻辑卷 my_lv大小调整为15G
|
||||
|
||||
# lvrename重命名逻辑卷
|
||||
lvrename my_vg old_lv_name new_lv_name #将逻辑卷重命名
|
||||
|
||||
```
|
||||
#### 创建新卷组和逻辑卷
|
||||
```sh
|
||||
# 1.使用lsblk命令查看磁盘设备树
|
||||
# 2.将新磁盘初始化为lvm
|
||||
sudo pvcreate /dev/sdb1
|
||||
# 3.将一个或多个物理卷加入卷组
|
||||
sudo vgcreate vg_name /dev/sdb1 /dev/sdc1
|
||||
# 4.创建一个逻辑卷
|
||||
sudo lvcreate -L 20G -n lv_name vg_name
|
||||
# 5.格式化新创建的逻辑卷为ext4
|
||||
sudo mkfs.ext4 /dev/vg_name/lv_name
|
||||
# 挂载格式化后的逻辑卷
|
||||
sudo mkdir /mnt/data && mount /dev/vg_name/lv_name /mnt/data
|
||||
```
|
||||
#### 逻辑卷扩容
|
||||
```sh
|
||||
# 1.使用lsblk命令查看磁盘设备树
|
||||
# 2.将新磁盘初始化为lvm
|
||||
sudo pvcreate /dev/sdb1
|
||||
# 3.将新的物理卷加入卷组
|
||||
sudo vgextend vg_name /dev/sdb1
|
||||
# 4.扩展已有的lv逻辑卷
|
||||
sudo lvextend -L +10G /dev/my_vg/my_lv
|
||||
# 扩展逻辑卷后需要更新文件系统,新创建的不需要,否则df命令看不到空间扩容
|
||||
# 针对ext4格式
|
||||
resize2fs /dev/vg_data/lv_data
|
||||
# 针对xfs格式
|
||||
xfs_growfs /dev/vg_data/lv_data
|
||||
# xfs系统不支持缩容,ext4缩容风险较高,注意备份
|
||||
|
||||
```
|
||||
#### 移除LVM磁盘步骤
|
||||
```sh
|
||||
# 1.确认物理磁盘使用情况
|
||||
pvs -o+pv_used
|
||||
# 2.检查其他卷组是否有空间进行数据迁移
|
||||
vgs
|
||||
# 均匀迁移sdb1的数据到其他卷组
|
||||
sudo pvmove /dev/sdb1
|
||||
# 迁移sdb1的数据到指定卷组
|
||||
sudo pvmove /dev/sdc1
|
||||
# 使用pvs -o+used确认卷组清空,然后移除卷组
|
||||
sudo vgreduce vg_name /dev/sdb1
|
||||
# 移除物理卷元数据
|
||||
sudo pvremove /dev/sdb1
|
||||
|
||||
```
|
||||
## 挂载外置存储
|
||||
```sh
|
||||
# 挂载nfs存储
|
||||
showmount -e 服务器地址 # 显示目标服务器的可挂载路径
|
||||
sudo mkdir /mnt/nfs #创建挂载目录
|
||||
sudo mount -t nfs 服务器地址:/path/name /mnt/nfs
|
||||
|
||||
# 挂载本地iso文件
|
||||
sudo mkdir /mnt/iso
|
||||
mount -o loop /path/file.iso /mnt/iso
|
||||
|
||||
|
||||
```
|
||||
|
||||
|
||||
# 安全管理
|
||||
|
||||
# 系统管理
|
||||
|
||||
# 用户管理
|
||||
|
||||
# 软件源管理
|
||||
## 添加软件源
|
||||
```sh
|
||||
# 查看所有软件源
|
||||
dnf repolist all
|
||||
# 安装epel源
|
||||
rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-10.noarch.rpm
|
||||
# 启用epel源
|
||||
subscription-manager repos --enable epel
|
||||
```
|
||||
|
||||
|
||||
|
||||
87
Linux/RedHat系文档.md
Normal file
87
Linux/RedHat系文档.md
Normal file
@@ -0,0 +1,87 @@
|
||||
# 软件安装
|
||||
### 安装pip
|
||||
```sh
|
||||
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
|
||||
python3 get-pip.py --user
|
||||
```
|
||||
## 安装ansible
|
||||
```sh
|
||||
# 为当前用户正常安装
|
||||
python3 -m pip install --user ansible
|
||||
# 为当前用户最小安装
|
||||
python3 -m pip install --user ansible-core
|
||||
# 升级ansible
|
||||
python3 -m pip install --upgrade --user ansible
|
||||
|
||||
|
||||
# 隔离环境安装ansible
|
||||
pip install --user pipx
|
||||
pipx install --include-deps ansible
|
||||
pipx upgrade --include-injected ansible
|
||||
```
|
||||
# 激活订阅管理
|
||||
## 命令行取消激活
|
||||
```sh
|
||||
# 取消注册
|
||||
subscription-manager unregister
|
||||
# 清理文件
|
||||
subscription-manager clean
|
||||
```
|
||||
## 命令行激活订阅
|
||||
```sh
|
||||
注册订阅
|
||||
subscription-manager register --username adhsite@qq.com --password n5HIvS9C3mGb#Esz
|
||||
```
|
||||
# firewalld防火墙基本用法
|
||||
```sh
|
||||
# 启动:
|
||||
systemctl start firewalld
|
||||
|
||||
#查看状态:
|
||||
systemctl status firewalld
|
||||
|
||||
#停止:
|
||||
systemctl disable firewalld
|
||||
|
||||
# 禁用:
|
||||
systemctl stop firewalld
|
||||
|
||||
# 放通80端口(--permanent永久生效,没有此参数重启后失效)
|
||||
firewall-cmd --zone=public --add-port=80/tcp --permanent
|
||||
|
||||
# 关闭80端口
|
||||
firewall-cmd --zone=public --remove-port=80/tcp --permanent
|
||||
|
||||
# 更新防火墙规则:
|
||||
firewall-cmd --reload
|
||||
|
||||
# 查看所有打开的端口:
|
||||
firewall-cmd --zone=public --list-ports
|
||||
|
||||
# 查看版本:
|
||||
firewall-cmd --version
|
||||
|
||||
# 查看帮助:
|
||||
firewall-cmd --help
|
||||
|
||||
# 显示状态:
|
||||
firewall-cmd --state
|
||||
|
||||
# 查看区域信息:
|
||||
firewall-cmd --get-active-zones
|
||||
|
||||
# 查看指定接口所属区域:
|
||||
firewall-cmd --get-zone-of-interface=eth0
|
||||
|
||||
# 拒绝所有包:
|
||||
firewall-cmd --panic-on
|
||||
|
||||
# 取消拒绝状态:
|
||||
firewall-cmd --panic-off
|
||||
|
||||
# 查看是否拒绝:
|
||||
firewall-cmd --query-panic
|
||||
|
||||
# 查看80端口
|
||||
firewall-cmd --zone=public --query-port=80/tcp
|
||||
```
|
||||
70
Linux/个性账号名.md
Normal file
70
Linux/个性账号名.md
Normal file
@@ -0,0 +1,70 @@
|
||||
|
||||
|
||||
以下是为您精心设计的 **Linux 账号名方案**,分门别类方便选择:
|
||||
|
||||
---
|
||||
|
||||
### 🌟 **极简科技风**
|
||||
| 用户名 | 灵感来源 | 记忆点 |
|
||||
|-----------|--------------------------|-------------------------------|
|
||||
| **nova** | 超新星爆发(天文现象) | 简短有力,象征新生力量✨ |
|
||||
| **zephyr**| 西风之神(希腊神话) | 轻盈灵动,开发者偏爱名🌀 |
|
||||
| **axon** | 神经元突触(生物学) | 科技感 + 易键入(x 键位特殊)🔬|
|
||||
| **vortex**| 数据漩涡🌀 | 适合做数据分析的机器 |
|
||||
|
||||
---
|
||||
|
||||
### 🎨 **文艺个性派**
|
||||
| 用户名 | 隐藏含义 | 适合场景 |
|
||||
|-------------|---------------------------|-----------------------------|
|
||||
| **solstice**| 冬至/夏至(节气转折点) | 纪念重要日期的服务器📅 |
|
||||
| **halcyon** | 宁静祥和(翡翠鸟传说) | 个人开发机首选,寓意平和🕊️ |
|
||||
| **eclipse** | 日蚀月蚀的天文奇观 | 适合做备份服务器的名字🌑 |
|
||||
| **obelisk** | 方尖碑(神秘符号) | 极客范儿,适合加密设备🗿 |
|
||||
|
||||
---
|
||||
|
||||
### 🛠️ **实用主义组**
|
||||
| 用户名 | 设计思路 | 优势分析 |
|
||||
|--------------|--------------------------|---------------------------|
|
||||
| **ctrlalt_** | 经典快捷键致敬⌨️ | 巧妙空格提示用 `_` 收尾 |
|
||||
| **5h311** | "Shell" 的 leet 写法(5=h, 3=e, 1=l) | 黑客文化彩蛋💻 |
|
||||
| **dotfile** | 配置文件的灵魂所在⚙️ | 直击 Linux 用户痛点 |
|
||||
| **0x1a** | 十六进制的 26(ASCII 换页符) | 极简数字流,适合服务器🔢 |
|
||||
|
||||
---
|
||||
|
||||
### 🌿 **自然元素系**
|
||||
| 用户名 | 意象 | 适用设备 |
|
||||
|-------------|-------------------------|--------------------------|
|
||||
| **fern** | 蕨类植物(古老而顽强)🌿 | 长期运行的服务器 |
|
||||
| **stratus** | 层云(云计算双关)☁️ | 云服务器/VPS 专用 |
|
||||
| **basalt** | 玄武岩(坚固稳定)🗻 | 防火墙或网关设备 |
|
||||
| **tundra** | 冻原(纯净极简)❄️ | 做开发测试环境 |
|
||||
|
||||
---
|
||||
|
||||
### 💡 **命名技巧**
|
||||
1. **混合创作法**:`姓氏缩写 + 出生年份后两位` → **lj24** (李杰2024)
|
||||
2. **反向拼写法**:`宠物名倒写` → 猫咪"Milo" → **oliM**
|
||||
3. **领域术语**:`专业词汇变形` → 程序员可用 **bool_**
|
||||
4. **键盘美学**:`相邻键位组合` → **ujm** (YUHJNM 键区三角)
|
||||
|
||||
---
|
||||
|
||||
### ✅ 最终检查清单
|
||||
- 在终端测试是否存在冲突:
|
||||
```bash
|
||||
getent passwd 拟用用户名 # 返回为空则表示可用
|
||||
```
|
||||
- 避免使用 `root`/`admin` 等高风险名称
|
||||
- 长度控制在 **3-8个字符** 最佳
|
||||
- 首字母推荐小写(遵循 Linux 传统)
|
||||
|
||||
示例命令创建用户:
|
||||
```bash
|
||||
sudo useradd -m -s /bin/bash nova # 创建名为 nova 的用户
|
||||
passwd nova # 设置密码
|
||||
```
|
||||
|
||||
让您的用户名成为系统上的独特印记吧! 🐧
|
||||
Reference in New Issue
Block a user