1613 lines
49 KiB
Markdown
1613 lines
49 KiB
Markdown
|
||
```sh
|
||
iptables -t nat -A LIBVIRT_PRT -p tcp -m tcp --dport 7190 -d 172.17.0.2 -j DNAT --to-destination 172.17.0.2:7190
|
||
```
|
||
# 一、小技巧
|
||
## 存储管理
|
||
### 搭建nfs存储
|
||
```sh
|
||
# 基于debian12.8
|
||
#安装nfs包
|
||
sudo apt install nfs-kernel-server rpcbind -y
|
||
|
||
# 创建共享目录及权限
|
||
sudo mkdir -p /srv/nfs/share
|
||
sudo chown nobody:nogroup /srv/nfs/share
|
||
sudo chmod 777 /srv/nfs/share # 根据实际需求调整权限
|
||
|
||
# 设置nfs导出规则,编辑/etc/exports文件,在末尾添加
|
||
/srv/nfs/share *(rw,sync,no_subtree_check,no_root_squash)
|
||
#- `*(rw,...)`:允许所有 IP 地址 (`*`) 以读写权限 (`rw`) 访问。
|
||
#- `sync`:确保数据同步到磁盘后再返回确认信息。
|
||
#- `no_subtree_check`:禁用子树检查,提高性能。
|
||
#- `no_root_squash`:允许远程客户端上的 root 用户具有根权限(谨慎使用)。
|
||
|
||
# 应用新的导出规则,并启动nfs服务
|
||
sudo exportfs -a #或sudo exportfs -rv重新加载配置
|
||
sudo systemctl restart nfs-kernel-server
|
||
|
||
# 查看nfs导出列表
|
||
sudo showmount -e localhost
|
||
```
|
||
### 挂载nfs存储
|
||
```sh
|
||
mount -t nfs <NFS服务器IP>:/共享路径 /mnt/nfs_share
|
||
```
|
||
### 搭建smb共享
|
||
```sh
|
||
# 基于debian-12.8
|
||
sudo apt install samba smbclient -y
|
||
|
||
# 创建共享目录,设置权限
|
||
sudo mkdir -p /var/samba/share
|
||
sudo chown nobody:nogroup /var/samba/share
|
||
sudo chmod 2775 /var/samba/share
|
||
|
||
# 配置samba,默认配置文件在/etc/samba/smb.conf
|
||
# 在配置文件末尾添加以下内容
|
||
[share]
|
||
path=/var/samba/share #共享文件夹路径
|
||
browsable=yes
|
||
read only=no
|
||
guest ok=yes #允许访客访问
|
||
valid users=@sambashare #设置用户认证
|
||
|
||
# 创建samba用户
|
||
sudo groupadd sambashare #添加用户组
|
||
sudo useradd -G sambashare -M -d /var/samba/share -s /usr/sbin/nologin samuser #添加账号
|
||
sudo smbpasswd -a samuser #设置用户密码
|
||
|
||
# 测试配置文件
|
||
testparm
|
||
|
||
# 启动samba服务
|
||
sudo systemctl enable smbd #开机自启
|
||
sudo systemctl start smbd #启动smb服务
|
||
|
||
#设置防火墙允许
|
||
sudo ufw allow 'Samba'
|
||
|
||
```
|
||
### 挂载smb存储
|
||
```sh
|
||
mount -t cifs -o username=share,password='Nas2025**',vers=3.0,seal "//192.168.140.200/toor 共享给我/share" /mnt/smb
|
||
```
|
||
## 系统管理
|
||
### 会话工具
|
||
```sh
|
||
#可以在终端退出时保持程序或命令运行
|
||
# 安装软件
|
||
dnf install screen
|
||
|
||
# 创建指定名称的会话
|
||
screen -S 会话名称
|
||
# 要在终端退出后继续运行的命令
|
||
nohup hexo server &
|
||
# 按ctrl+a,然后按d,返回原来会话
|
||
|
||
# 列出当前会话列表
|
||
screen -list
|
||
|
||
# 切换到指定会话
|
||
screen -r 会话名称
|
||
|
||
|
||
```
|
||
## 用户管理
|
||
|
||
### 0.受限制的shell
|
||
```sh
|
||
# rbash用法
|
||
# 修改用户目录下.bash_profile文件
|
||
PATH=$HOME/.bin
|
||
# 把可以使用的命令通过ln链接到.bin目录
|
||
mkdir /home/user/.bin
|
||
ln -s /usr/local/bin/su /home/user/.bin/su
|
||
|
||
# 或者设置用户shell为rbash
|
||
usermod -s /bin/rbash username
|
||
|
||
# 常用配置/etc/profile
|
||
alias rmpod=/usr/local/bin/rmpod.sh
|
||
alias reboot='docker ps -a -q |xargs docker stop && reboot'
|
||
alias poweroff='docker ps -a -q |xargs docker stop && poweroff'
|
||
alias vi=vim
|
||
alias ps='ps -aux'
|
||
alias dpa='docker ps -a'
|
||
export HISTTIMEFORMAT="%F %T `who -u am i 2>/dev/null |awk '{print $NF}' |sed \-e 's/[()]//g'` `whoami` -> "
|
||
export HISTCONTROL=ignoreboth
|
||
export HISTIGNORE="su*:cd*:ps*:history*:ls*:tail*:head*:more*:cat*"
|
||
shopt -s histappend
|
||
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r"
|
||
|
||
# opencloudos设置受限用户
|
||
# 将需要的命令使用ln -s连接到用户.bin目录下
|
||
PATH=$HOME/.bin
|
||
export PATH
|
||
export HISTIGNORE="su*:Open*:ta*"
|
||
export CLEARS=$(history -a && cat /home/toor/.bash_history >> /home/toor/.history_log && echo '' > /home/toor/.bash_history && history -c)
|
||
alias cd="echo '想切换目录吗?经过我同意了么!'"
|
||
alias test="echo '你想测试啥?'"
|
||
alias if="echo '判断你不是有病?'"
|
||
alias for="echo '想用循环干嘛?'"
|
||
alias while="echo 'for都不给你用,你觉得while能给你用?'"
|
||
alias until="echo 'until你也别想!'"
|
||
alias case="echo 'case更是不用想了,气死你~'"
|
||
alias sudo="echo '想用超级管理员没门'"
|
||
alias ls="echo '想查看目录啊?'"
|
||
alias ll="echo 'ls都不给你用,你还想用ll,吃屁去吧'"
|
||
alias pwd="echo '就是在家目录,不用看了'"
|
||
alias cat="echo '想看文件内容么?'"
|
||
alias history="echo '欢迎登录~' > /dev/null 2>&1"
|
||
alias unalias="echo '菜鸟在学个10年再来'"
|
||
alias alias="echo '啥也不是'"
|
||
```
|
||
```
|
||
### 1.禁止密码登录
|
||
```sh
|
||
# 修改ssh配置文件/etc/ssh/sshd_config
|
||
PasswordAuthentication no #禁止密码
|
||
RSAAuthentication yes # rsa认证
|
||
PubkeyAuthentication yes #公钥认证
|
||
|
||
#禁止root远程登录
|
||
PermitRootLogin no
|
||
|
||
# 禁止指定用户远程登录
|
||
DenyUsers username
|
||
|
||
#重启ssh服务
|
||
systemctl restart sshd
|
||
```
|
||
### 2.使用秘钥登录
|
||
```sh
|
||
ssh-keygen -t rsa #创建密钥
|
||
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys #添加公钥到服务器
|
||
chmod 600 ~/.ssh/authorized_keys
|
||
chmod 700 ~/.ssh
|
||
# 确保远程服务器开启了秘钥登录
|
||
# 使用私钥id_rsa登录,适用于秘钥没有密码
|
||
ssh -i id_rsa user@host
|
||
```
|
||
### 3.免密登录
|
||
```sh
|
||
#生成秘钥
|
||
ssh-keygen -t rsa
|
||
#上传公钥到远程服务器
|
||
ssh-copy-id -i rsa.pub user@host
|
||
#使用本机秘钥免密登录
|
||
ssh user@host
|
||
|
||
```
|
||
### 4.ssh代理端口
|
||
![[7f43c7a66d1f9c7bf6da3fdd397e626.png]]
|
||
![[1e2b546cf0f0cc7bf0ab8deb3bc497d.png]]
|
||
![[86fe399af1ae6cf79e58de1a0f65700.png]]
|
||
![[a42981ce40d246383d3a057c7a596b8.png]]
|
||
![[057f7b06b15b7a2661348ae82ac1cea.png]]
|
||
|
||
### 用户添加组后立即生效
|
||
```sh
|
||
newgrp group-name
|
||
```
|
||
### 查看用户登录记录
|
||
|
||
```sh
|
||
# 查看所有用户最后一次登录记录
|
||
lastlog
|
||
# 查看在线用户
|
||
w
|
||
```
|
||
### 踢出在线用户
|
||
```sh
|
||
fuser -k /dev/pts/0
|
||
```
|
||
### vim设置table为4个空格
|
||
```sh
|
||
# 修改配置文件/etc/vimrc
|
||
set ts=4
|
||
set softtabstop=4
|
||
set shiftwidth=4
|
||
set expandtab
|
||
set autoindent
|
||
# 显示行号
|
||
set nu
|
||
```
|
||
## 网络管理
|
||
### openvpn配置
|
||
```bash
|
||
# 通过包管理工具安装openvpn和证书管理工具
|
||
yum install -y easy-rsa openvpn
|
||
|
||
# opencloudos编译安装openvpn
|
||
yum install -y libnl3-devel libcap-ng-devel openssl-devel lz4-devel lzo-devel libpam-devel pam-devel
|
||
./configure
|
||
make && make install
|
||
|
||
# 创建证书目录
|
||
mkdir -p /etc/openvpn/easy-rsa && cd /etc/openvpn/easy-rsa
|
||
cp -r /usr/share/easy-rsa/3.*/* ./
|
||
|
||
# 创建证书
|
||
./easyrsa init-pki #初始化目录
|
||
./easyrsa build-ca #创建根证书ca,并设置密码,用于服务端和客户端证书签名
|
||
./easyrsa gen-req server nopass #创建服务端证书,不加密
|
||
./easyrsa sign server server #给服务端证书签名,输入yes和ca密码
|
||
./easyrsa gen-dh #创建秘钥交换时diffie-hellman算法
|
||
./easyrsa gen-req client nopass #创建客户端证书,不加密
|
||
./easyrsa sign client client #给客户端证书签名,输入yes和ca密码
|
||
openvpn --genkey secret pki/ta.key
|
||
|
||
# 服务端配置
|
||
port 8080 #端口
|
||
proto udp4 #配置连接模式,tcp or udp
|
||
dev tun #配置路由模式
|
||
ca /etc/openvpn/easy-rsa/pki/ca.crt
|
||
cert /etc/openvpn/easy-rsa/pki/issued/server.crt
|
||
key /etc/openvpn/easy-rsa/pki/private/server.key
|
||
dh /etc/openvpn/easy-rsa/pki/dh.pem
|
||
tls-auth /etc/openvpn/easy-rsa/pki/ta.key
|
||
server 10.8.0.0 255.255.255.0 # 配置客户端地址池
|
||
topology subnet
|
||
persist-key #通过keepalive检测超时后重新启动vpn
|
||
persist-tun #检测超时后重新启动vpn
|
||
#client-to-client #允许客户端互相通信
|
||
status openvpn-status.log # 记录openvpn状态
|
||
# log /var/log/openvpn.log #日志位置
|
||
verb 3 #日志级别
|
||
keepalive 30 60 #30秒ping一次,超过120秒视为断线,
|
||
|
||
push "dhcp-option DNS 1.1.1.1"
|
||
push "dhcp-option DNS 8.8.8.8"
|
||
push "redirect-gateway def1 bypass-dhcp" #允许客户访问互联网
|
||
push "route 10.3.0.0 255.255.252.0"
|
||
duplicate-cn #客户端秘钥是否可以重复
|
||
comp-lzo #启用lzo数据压缩
|
||
|
||
# 客户端配置
|
||
client
|
||
dev tun
|
||
proto udp4
|
||
remote 43.134.183.235 8080
|
||
resolv-retry infinite
|
||
nobind
|
||
persist-key
|
||
persist-tun
|
||
dhcp-option DNS 1.1.1.1
|
||
dhcp-option DNS 8.8.8.8
|
||
verb 3
|
||
comp-lzo
|
||
<ca>ca证书</ca>
|
||
<cert>客户端证书</cert>
|
||
<key>客户端秘钥</key>
|
||
<tls-auth>ta.key秘钥</tls-auth>
|
||
|
||
# iptables配置,假设出口网卡为eth0,vpn网卡为tun0
|
||
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
|
||
iptables -A FORWARD -i tun0 -j ACCEPT
|
||
iptables -A FORWARD -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
|
||
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
|
||
iptables -A FORWARD -d 10.8.0.0/24 -m state --state RELATED,ESTABLISHED -j ACCEPT
|
||
|
||
```
|
||
### ubuntu连接cloudflare warp
|
||
```sh
|
||
# Add cloudflare gpg key
|
||
curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
|
||
|
||
|
||
# Add this repo to your apt repositories
|
||
echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list
|
||
|
||
|
||
# Install
|
||
sudo apt-get update && sudo apt-get install cloudflare-warp
|
||
|
||
# 注册客户端
|
||
warp-cli registration new
|
||
# 连接网络
|
||
warp-cli connect
|
||
# 断开网络
|
||
warp-cli disconnect
|
||
# 测试连接
|
||
curl https://www.cloudflare.com/cdn-cgi/trace/warp=on
|
||
```
|
||
### tcpdump抓包
|
||
```sh
|
||
tcpdump 协议 源或目的 主机或端口
|
||
# 示例
|
||
tcpdump -i eth01 src 8080 dst 443 -w tcplink.cap -nvv
|
||
-i指定网卡接口
|
||
src指定源端口或ip
|
||
dst指定目的端口或ip
|
||
-w输出到文件
|
||
-nvv显示详细信息
|
||
```
|
||
|
||
## history命令历史记录
|
||
|
||
```sh
|
||
# 在命令前加空格不会记录到历史记录
|
||
|
||
# 在历史命令中添加日期时间
|
||
export HISTTIMEFORMAT="%F %T -> "
|
||
# 设置不进入历史列表的命令
|
||
export HISTIGNORE="cd*:pwd:history*:ls*"
|
||
|
||
# 在历史命令中添加日期时间,ip,用户
|
||
export HISTTIMEFORMAT="%F %T `who -u am i 2>/dev/null |awk '{print $NF}' |sed \-e 's/[()]//g'` `whoami` -> "
|
||
|
||
# 设置不进入历史列表的命令
|
||
export HISTIGNORE="cd*:pwd:history*:ls*"
|
||
# 清除连续重复命令
|
||
export HISTCONTROL=ignoreboth
|
||
# ignorespace:忽略空格开头的命令
|
||
# ignoredups:忽略连续重复命令
|
||
# ignoreboth:以上两个参数都设置
|
||
# erasedups:删除整个历史重复命令
|
||
|
||
# 同步所有终端历史命令
|
||
shopt -s histappend
|
||
#PROMPT_COMMAND="history -a"
|
||
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r"
|
||
|
||
# 缓冲区最大历史记录数
|
||
export HISTSIZE=1000
|
||
# 历史记录文件最大记录数
|
||
export HISTFILESIZE=10000
|
||
# 显示最近n条记录;
|
||
history -n
|
||
# 清除缓冲区记录;
|
||
history -c
|
||
# 删除指定n条记录
|
||
history -d
|
||
# 在命令前加!可以重复最近使用的命令,可以使用?通配符
|
||
!ls
|
||
!?ount
|
||
# 打印最近执行的命令
|
||
!ls:p
|
||
# 重复执行上一条命令
|
||
!!
|
||
|
||
```
|
||
|
||
## 数据传输进度条
|
||
|
||
```sh
|
||
pv file > /dev/null
|
||
```
|
||
|
||
|
||
## 关机提示语
|
||
|
||
```sh
|
||
|
||
shutdown -k +10 'mes' # 提示用户10分钟后关机,并不会真正关机
|
||
|
||
shutdown -h +10'mes' # 提示用户10分钟后关机,
|
||
|
||
# 关机时间低于5分钟时,系统会禁止用户登录
|
||
```
|
||
|
||
## 设置登录欢迎词
|
||
|
||
```sh
|
||
# 登录前提示语
|
||
# 本地登录前配置文件/etc/issue
|
||
# 远程登录前配置文件/etc/issue.net(需在sshd_config文件中启用Banner /etc/issue.net)
|
||
|
||
# 登录后提示语
|
||
# 配置文件在/etc/motd
|
||
|
||
# 在终端发送广播消息
|
||
wall "系统即将关机~"
|
||
|
||
# 关闭当前终端显示wall消息
|
||
mesg n
|
||
|
||
# 接受wall消息
|
||
mesg y
|
||
```
|
||
|
||
## rsync文件同步
|
||
```sh
|
||
# 目录增量同步/更新/复制
|
||
rsync -avtP localPATH name@host:path
|
||
```
|
||
|
||
## 计算文件哈希值
|
||
|
||
```sh
|
||
# 计算MD5值
|
||
md5sum 文件名
|
||
#计算sha1值
|
||
sha1sum 文件名
|
||
#计算sha256值
|
||
sha256sum 文件名
|
||
```
|
||
|
||
## 在终端显示图片
|
||
```sh
|
||
# 软件主页https://www.nongnu.org/fbi-improved/
|
||
sudo apt-get install fim
|
||
|
||
# 在终端显示像素图片
|
||
# 软件主页https://github.com/atanunq/viu可在项目主页下载二进制文件或源码
|
||
|
||
# 查看图片详细信息
|
||
sudo apt-get install imagemagick
|
||
identify imgname.jpg
|
||
```
|
||
|
||
## 查看cpu信息
|
||
```sh
|
||
cat /proc/cpuinfo | grep "cpu cores" | uniq
|
||
```
|
||
|
||
## 设置时区
|
||
|
||
```shell
|
||
sudo timedatectl set-timezone 'Asia/Shanghai' #设置为亚洲/上海
|
||
|
||
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
|
||
|
||
# 手动选择
|
||
tzselect
|
||
```
|
||
|
||
## 安装android-sdk
|
||
```sh
|
||
wget [https://dl.google.com/android/android-sdk_r24.2-linux.tgz](https://dl.google.com/android/android-sdk_r24.2-linux.tgz)
|
||
tar -xvzf android-sdk_r24.2-linux.tgz
|
||
sudo mv android-sdk-linux /usr/local/Android-SDK
|
||
sudo vim /etc/profile
|
||
export ANDROID_HOME=/usr/local/Android-SDK
|
||
export PATH=${ANDROID_HOME}/:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools:$PATH
|
||
source /etc/profile
|
||
```
|
||
# 软件用法通用
|
||
## frp内网穿透
|
||
|
||
|
||
## podman
|
||
### 设置容器开机自启
|
||
```sh
|
||
docker generate systemd --name ms10 --files --new
|
||
sudo mv ./container-ms10.service /etc/systemd/system/
|
||
sudo systemctl daemon-reload
|
||
sudo systemctl enable --now container-ms10.service
|
||
```
|
||
### 设置镜像加速
|
||
```sh
|
||
# 编辑文件
|
||
sudo vim /etc/containers/registries.conf
|
||
|
||
unqualified-search-registries = ["docker.io"]
|
||
[[registry]]
|
||
prefix = "docker.io"
|
||
insecure = false
|
||
blocked = false
|
||
location = "docker.io"
|
||
[[registry.mirror]]
|
||
location = "hub-mirror.c.163.com"
|
||
[[registry.mirror]]
|
||
location = "registry.docker-cn.com"
|
||
```
|
||
## docker
|
||
|
||
### 容器启动失败解决办法
|
||
```sh
|
||
# 查看容器错误日志
|
||
docker logs 容器id
|
||
|
||
# 拷贝配置文件
|
||
docker cp /tmp/conf 容器id:/etc/conf
|
||
```
|
||
### 容器网络管理
|
||
```sh
|
||
# 容器添加网络
|
||
docker network connect 网络名称 容器名称
|
||
|
||
# 删除容器网络
|
||
docker network disconnect 网络名称 容器名称
|
||
|
||
# 指定ip创建容器,需要ip未被占用
|
||
docker --network bridge --ip 172.18.0.2
|
||
|
||
# 查看容器ip
|
||
docker inspect 容器id或name |grep IPAddress
|
||
```
|
||
|
||
### docker以特权用户运行容器
|
||
```sh
|
||
#RedHat/Centos系统改为/usr/sbin/init,Debian/Ubuntu系统改为/sbin/init
|
||
docker run -itd --privileged=true centos:latest /usr/sbin/init
|
||
|
||
docker run -itd --tmpfs /tmp --tmpfs /run -v /sys/fs/cgroup:/sys/fs/cgroup:ro centos:7
|
||
```
|
||
### 创建MySQL容器[[MySQL笔记#^a6aefb]]
|
||
### 搭建私有仓库
|
||
```sh
|
||
# 下载harbor
|
||
wget https://github.com/goharbor/harbor/releases/download/v2.8.2/harbor-offline-installer-v2.8.2.tgz
|
||
tar -zxf harbor-offline-installer-v2.8.2.tgz
|
||
# 创建证书
|
||
openssl genrsa -out ca.key 3072
|
||
openssl req -new -x509 -days 3650 -key ca.key -out ca.pem
|
||
openssl genrsa -out harbor.key 3072
|
||
openssl req -new -key harbor.key -out harbor.csr
|
||
openssl x509 -req -in harbor.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out harbor.pem -days 3650
|
||
# 加载镜像文件
|
||
docker load -i harbor.v2.8.2.tar.gz
|
||
# 修改模板配置文件harbor.yml.tmpl
|
||
# 修改主机ip和证书文件路径证书是harbor.pem和harbor.key
|
||
# 开始安装
|
||
apt install docker-compose -y
|
||
./install.sh
|
||
|
||
# 添加容器访问,在docker配置文件添加
|
||
"insecure-registries":["主机ip","主机名"]
|
||
sudo systemctl daemon-reload
|
||
sudo systemctl restart docker
|
||
# 在安装目录执行启动harbor
|
||
docker-compose start
|
||
# 在浏览器输入主机ip打开harbor,默认账号密码admin/Harbor12345,创建项目database
|
||
# 推送镜像
|
||
docker tag "镜像标签或ID" 192.168.1.100/database/"镜像标签"
|
||
docker push 192.168.1.100/database/"镜像标签"
|
||
```
|
||
### 导入导出镜像
|
||
```sh
|
||
# 提交镜像
|
||
docker commit -a "作者" -m "镜像说明" -p 容器id 新镜像标签
|
||
# 保存镜像到文件
|
||
docker save -o image.tar 镜像名称
|
||
# 将容器文件系统导出
|
||
docker export -o image.tar 容器id
|
||
# 导入镜像文件(导入save保存的镜像)
|
||
docker load -i 文件名称
|
||
# 从归档文件创建镜像(export命令导出的文档)
|
||
docker import -c 文档名称 镜像标签
|
||
```
|
||
### 创建容器网络
|
||
```sh
|
||
# 创建一个名为vlan100的网络,网络类型为bridge
|
||
docker network create -d bridge vlan100
|
||
```
|
||
### docker的run参数示例
|
||
```sh
|
||
# 创建alist网盘
|
||
docker run -d --restart=always -v /var/alist:/opt/alist/data -v -p 8080:5244 -e PUID=0 -e PGID=0 -e UMASK=022 --name="alist" -h alist --network vlan100 xhofe/alist:latest
|
||
# --restart=always 开机自启
|
||
# -v 映射本地目录到容器,前面是本地目录后面是容器目录,可添加多个
|
||
# -p 映射本地端口到容器,前面是本地端口,后面是容器端口,可添加多个
|
||
# -e 创建容器执行的命令
|
||
# --name 容器的名称
|
||
# -h 容器主机的名称
|
||
# --network 添加指定网络,用于容器互相通信,可添加多个
|
||
```
|
||
|
||
### 镜像加速
|
||
```sh
|
||
sudo mkdir -p /etc/docker
|
||
sudo tee /etc/docker/daemon.json <<-'EOF'
|
||
{
|
||
"registry-mirrors": ["https://8jl29epx.mirror.aliyuncs.com"]
|
||
}
|
||
EOF
|
||
sudo systemctl daemon-reload
|
||
sudo systemctl restart docker
|
||
```
|
||
### 容器自启动开关
|
||
```sh
|
||
# 开启容器自启动
|
||
docker update --restart=always 容器id或name
|
||
# 关闭容器自启动
|
||
docker update --restart=no 容器id或name
|
||
```
|
||
## croc文件传输工具
|
||
```sh
|
||
|
||
```
|
||
|
||
## sudo权限管理
|
||
```sh
|
||
# 使用户可以使用sudo命令,使用管理员权限运行
|
||
visudo
|
||
|
||
username ALL=(ALL) ALL # 允许用户使用sudo命令
|
||
username ALL=(ALL) NOPASSWD:ALL # 允许用户不用输入密码使用sudo
|
||
username ALL=(ALL) !/usr/bin/sudo #禁止用户使用sudo命令
|
||
|
||
```
|
||
|
||
## iptables防火墙配置
|
||
```shell
|
||
modprobe ip_tables #启动iptables
|
||
|
||
#关闭iptables
|
||
iptalbes -F#清除所有规则
|
||
iptables -X#清除表中使用者自定义规则
|
||
iptables -Z
|
||
|
||
#抛弃所有不符合三种规则的数据包
|
||
iptables -P INPUT ACCEPT
|
||
iptables -P OUTPUT ACCEPT
|
||
iptables -P FORWARD ACCEPT
|
||
modprobe -r ip_tables #停止
|
||
|
||
#查看iptables所有规则,加--line-numbers显示行号
|
||
iptables -Ln
|
||
|
||
INPUT/OUTPUT/FORWARD代表链
|
||
-A #代表附加某项规则到指定的链,参数:链 规则
|
||
-C #检查指定链是否有该规则 参数:链 规则
|
||
-D #删除指定链中,某行的规则,参数:链 行号 或 链 规则
|
||
-I #在指定链中插入新的规则,参数:链 行号 规则
|
||
-L #列出所有链中的规则
|
||
-R #替换指定链中的规则,参数:链 行号 规则
|
||
-F #删除所有链中的规则
|
||
-Z #链中计数器归零
|
||
-N #创建新的用户自定义的链
|
||
-X #删除用户自定义的链
|
||
-P #将链上的规则更改目标
|
||
-E #重命名链,参数:旧名称 新名称
|
||
|
||
规则参数
|
||
-p #指定协议或名称
|
||
-s #指定源IP地址
|
||
-d #目标地址
|
||
-i #网卡或接口名称
|
||
-j #规则的目标
|
||
-g #跳转到指定链
|
||
-n #地址和端口的数字输出,可与-L一起使用
|
||
--line-numbers #输出行号,可以-L,-n一起使用
|
||
-o #输出接口或网卡名称
|
||
-m #扩展匹配
|
||
|
||
#设置 本地进程 lo 的 INPUT 和 OUTPUT 链接,eth0 的 INPUT 链
|
||
iptables -A INPUT -i lo -j ACCEPT
|
||
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
|
||
iptables -A INPUT -i eth0 -m state --state NEW,INVALID -j LOG
|
||
iptables -A OUTPUT -o lo -j ACCEPT
|
||
|
||
#添加开放ssh的22号端口
|
||
iptables -A INPUT -p tcp -i eth0 --dport ssh -j ACCEPT
|
||
|
||
#删除20号端口
|
||
iptables -D INPUT -p tcp --dport 20 -j ACCEPT
|
||
|
||
#删除指定链的行号的规则
|
||
iptables -D INPUT/FORWARD/OUTPUT 行号
|
||
|
||
#在指定链中插入新的规则,位置为指定的行号,第一行为1
|
||
iptables -i INPUT/FORWARD/OUTPUT 行号 开放或关闭的端口 -j ACCEPT
|
||
|
||
#允许loopback(不然会导致DNS无法正常关闭等问题)
|
||
IPTABLES -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP)
|
||
IPTABLES -A OUTPUT -o lo -p all -j ACCEPT (如果是OUTPUT DROP)
|
||
|
||
#保存iptables规则
|
||
iptables-save > /etc/network/iptables.up.rules
|
||
|
||
#开机自启动iptables
|
||
#修改 /etc/network/interfaces ,添加下面末尾2行脚本
|
||
auto eth0
|
||
iface eth0 inet dhcp
|
||
pre-up iptables-restore < /etc/network/iptables.up.rules#读取文件中的配置
|
||
post-down iptables-save > /etc/network/iptables.up.rules#将配置保存到文件
|
||
|
||
#重载iptables配置
|
||
sudo iptables-apply
|
||
|
||
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
|
||
-A INPUT :表明我们要将此规则追加到某个链的最后,由于我们要操作INPUT链接,所以这么写。
|
||
-m conntrack :iptables除了自己的核心功能外还只有一些实用的扩展和模块,这个参数表明添加conntrack模块提供的能力。(conntrack模块可以根据先前的连接来确定数据包之间的关系)
|
||
–ctstate :该参数是conntrack模块提供的,它可以确定如何用现在的数据包去匹配先前获得的数据包。ESTABLISHED值将自动允许现有连接的数据包,RELATED值将允许已建立连接的相关数据包。(这样就与SSH会话特性相匹配上了)
|
||
-j ACCEPT :这个参数用于指定匹配的数据包的目标。用在这里表示接受和允许符合上述标准的数据包通过。
|
||
|
||
|
||
# 计算机上的服务都会发送网络数据包以保持彼此之间的通信。而这种通信会利用到一个名叫loopback的伪网卡将流量引导回自己。因此,我们还需要为loopback网卡添加一条允许规则。
|
||
sudo iptables -I INPUT 1 -i lo -j ACCEPT
|
||
-I INPUT 1 :与“-A”不同,它可以指定要将规则添加到该链的位置。
|
||
|
||
#下载保存iptables配置的脚本
|
||
sudo apt-get update
|
||
sudo apt-get install iptables-persistent
|
||
|
||
```
|
||
|
||
|
||
## 网络配置
|
||
```sh
|
||
ifconfig 网卡名称 显示该网卡配置
|
||
ifconfig 网卡名称 192.168.1.1 netmask 255.255.255.0 给该网卡配置ip
|
||
ifup 网卡名称 启用该设备
|
||
ifdown 网卡名称 禁用该设备
|
||
iwconfig 网卡名称 显示无线网卡配置
|
||
iwlist scan 显示无线网络
|
||
ip addr show 显示网卡的ip地址
|
||
```
|
||
|
||
|
||
## 修改主机名
|
||
```sh
|
||
hostnamectl set-hostname 名称
|
||
```
|
||
|
||
## 后台任务管理
|
||
|
||
```sh
|
||
# 查看当前有多少在后台运行的命令
|
||
jobs
|
||
|
||
# 将后台中的命令调至前台继续运行.如果后台中有多个命令,可以用fg %jobnumber(是命令编号,不是进程号)将选中的命令调出。
|
||
fg
|
||
|
||
# 将一个在后台暂停的命令,变成在后台继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出。
|
||
bg
|
||
|
||
# 可以将一个正在前台执行的命令放到后台,并且处于暂停状态。
|
||
ctrl + z
|
||
|
||
# 加在一个命令的最后,可以把这个命令放到后台执行
|
||
&
|
||
# 例如: 每10s在后台执行一次test.sh脚本
|
||
watch -n 10 sh test.sh &
|
||
|
||
# 结束进程或任务
|
||
kill pid
|
||
# 通过jobs命令查看job号(假设为2),然后执行kill %2
|
||
|
||
# 前台进程的终止:
|
||
Ctrl + c
|
||
```
|
||
|
||
|
||
|
||
## systemctl用法
|
||
|
||
```sh
|
||
# 启动一个服务:
|
||
systemctl start firewalld.service
|
||
|
||
# 关闭一个服务:
|
||
systemctl stop firewalld.service
|
||
|
||
# 重启一个服务:
|
||
systemctl restart firewalld.service
|
||
|
||
# 显示一个服务的状态:
|
||
systemctl status firewalld.service
|
||
|
||
# 在开机时启用一个服务:
|
||
systemctl enable firewalld.service
|
||
|
||
# 在开机时禁用一个服务:
|
||
systemctl disable firewalld.service
|
||
|
||
# 查看服务是否开机启动:
|
||
systemctl is-enabled firewalld.service
|
||
|
||
# 查看已启动的服务列表:
|
||
systemctl list-unit-files|grep enabled
|
||
|
||
# 查看启动失败的服务列表:
|
||
systemctl --failed
|
||
```
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
## openssh参数
|
||
|
||
```sh
|
||
# 将公钥添加到服务端实现免密登陆
|
||
ssh-copy-id -i 公钥文件 name@host
|
||
#生成秘钥
|
||
ssh-keygen
|
||
# 删除指定ip的秘钥
|
||
ssh-keygen -f "/home/wzd/.ssh/known_hosts" -R "IP地址"
|
||
参数:
|
||
-t指定生成的秘钥类型,缺少情况下默认生成rsa秘钥(秘钥类型rsa,dsa,ecdsa,ed25519)
|
||
-b指定秘钥位数,rsa最小为1024位,默认为3072;dsa指定为1024位;ecdsa为256,384,521位;ed25519位数固定
|
||
-C指定注释,需加引号
|
||
-c更改注释
|
||
-E指定显示指纹时使用的哈希算法,md5和sha256,默认为sha256
|
||
-e读取公钥或私钥,以-m参数指定的格式打印到stdout公钥,提供给其他程序使用
|
||
-F在known_hosts文件中搜索指定的主机名可带端口号,
|
||
-f指定秘钥文件的文件名
|
||
-h签名秘钥时,创建的是主机证书,而不是用户证书
|
||
-L签署公钥时指定秘钥身份
|
||
-i以指定的格式读取未加密的公钥或私钥文件,并打印到stdout
|
||
-l显示指定公钥文件的指纹
|
||
-m指定生成秘钥的格式,-i(导入),-e(导出),-p(更改密码),格式有(RFC4716/ssh2公钥或私钥/PEM PKCS8公钥/PEM公钥)
|
||
-N提供新的密码
|
||
-n签署密钥时,指定在证书中包含一个或多个主体(用户名或主机名);指定多个主体时,用逗号分隔
|
||
-p请求更改死私钥文件的密码,不创建新私钥
|
||
-R从known_hosts文件中删除属于指定主机名的所有秘钥
|
||
-s使用指定的CA秘钥盐城签名公钥
|
||
-V指定签署证书有效期,例:'+52w'从现在到52周,'20190605:20200604'19年6越6号到20年6月4号;'-1m:forever'从1分钟前有效,永不过期
|
||
```
|
||
|
||
## 重定向用法
|
||
|
||
```shell
|
||
command > filename #把标准输出重定向到一个文件中
|
||
command >> filename #把标准输出重定向到一个文件中(追加)
|
||
command 1 > fielname #把标准输出重定向到一个文件中
|
||
command > filename 2>&1 #把标准输出和标准错误一起重定向到一个文件
|
||
command 2 > filename #把标准错误重定向到一个文件中
|
||
command 2 >> filename #把标准错误重定向到一个文件中(追加)
|
||
command >> filename 2>&1 #把标准输出和标准错误一起重定向到一个文件中(追加)
|
||
command < filename1 > filename2 #command命令以filename1文件作为标准输入,以filename2文件作为标准输出
|
||
command < filename #command命令以filename文件作为标准输入
|
||
command << delimiter #从标准输入中读入,直至遇到delimiter分界符
|
||
command < &m #将文件描述符m作为标准输入
|
||
command > &m #将标准输出重定向到文件描述符m中
|
||
command < &- #关闭标准输入
|
||
```
|
||
## github使用
|
||
|
||
```shell
|
||
先在本地生成sshkey
|
||
ssh-keygen -t rsa -C 'github的邮箱账号'
|
||
在github的设置里,找到ssh秘钥,添加新的秘钥
|
||
名字自定义,秘钥为本地用户目录下.ssh/id_rsa.pub的内容
|
||
ssh -T git@github.com#出现欢迎即添加成功
|
||
#配置用户名和邮箱
|
||
git config --global user.name'用户名'
|
||
git config --global user.email 邮箱
|
||
|
||
git add命令将快照内容写入缓冲区
|
||
git commit命令将缓冲区内容添加到仓库
|
||
git commit -a命令可以跳过将更改提交到缓冲区,直接添加到仓库
|
||
git status -s命令显示上次提交更新后的更改或写入缓存的改动
|
||
git reset HEAD命令用于取消已缓存的内容
|
||
git rm -f 文件名 #强制将某个文件从跟踪清单中移除,并删除本地文件
|
||
git rm --cached 文件名 #将某个文件从跟踪清单移除,仍在当前目录保留该文件
|
||
git branch 分支名 #创建新分支
|
||
git checkout 分支名 #切换分支
|
||
git log #输出历史提交记录的日志
|
||
git log --oneline --graph #简洁的输出历史记录--graph查看历史中什么时候出现了分支,合并
|
||
git --reverse #反向输出历史记录
|
||
git log --author=用户名 #查看指定用户的历史记录
|
||
git log --before={3.weeks.ago} --after={2019-04-18}#查看三周前,且在2019年4月18号以后的提交
|
||
git tag -a v1.0 #给v1.0版本打标签,并添加注释
|
||
git tag -a 版本号 字符码 #补打标签
|
||
git tag -a 标签名 -m '内容' #指定标签信息
|
||
|
||
|
||
git init fname#在当前目录初始化一个目录为fname的git仓库并包含.git目录
|
||
git remote add 库名 URL #创建本地分支仓库
|
||
git add . #添加当前目录下所有文件到本地仓库
|
||
git remote add 别名 URL #在本地添加远程仓库连接
|
||
git remote -v #查看远程仓库的url
|
||
git remote rm 别名 #删除本地连接的远程仓库
|
||
#在.git/config文件,找到对应的分支名可以修改远程连接的url
|
||
|
||
git commit -m "First commit"#提交本地暂存库中的文件,-m输出消息
|
||
git push 库名(origin) 分支(master) #推送到远程库
|
||
|
||
git fetch fname #从远程仓库下载数据到本地命名为fname
|
||
git merge fname/newf #将git fetch命令获取到的数据合并到本地的newf分支
|
||
|
||
git clone 库名 目录名(可选) #从远程仓库克隆项目到指定目录
|
||
```
|
||
# ubuntu/debian系统
|
||
### 图形化界面安装/卸载
|
||
```sh
|
||
# 安装默认图形化界面,lightdm轻量级显示管理器,默认是gdm3
|
||
sudo apt install ubuntu-desktop lightdm -y
|
||
# 启动gui界面
|
||
sudo service lightdm start
|
||
# 关闭gui界面
|
||
sudo service lightdm
|
||
# 切换显示管理,需重启
|
||
sudo dpkg-reconfigure lightdm
|
||
# 删除gui
|
||
sudo apt remove ubuntu-desktop lightdm -y
|
||
sudo apt autoremove -y
|
||
|
||
# 其他轻量级gui
|
||
sudo apt install ubuntu-mate-core # 轻量完全开源
|
||
sudo apt install lubuntu-core # 适合旧电脑,资源有限的
|
||
sudo apt install xubuntu-core # 轻量,可定制
|
||
```
|
||
### ubuntu安装ukui(openkylin桌面)
|
||
```sh
|
||
$ sudo apt install ukui-desktop-environment
|
||
|
||
Or you can get the latest version by:
|
||
$ sudo add-apt-repository ppa:ubuntukylin-members/ukui
|
||
$ sudo apt upgrade
|
||
|
||
# 安装完重启系统
|
||
```
|
||
### ubuntu安装deepin桌面
|
||
```sh
|
||
sudo vi /etc/apt/sources.list.d/deepin-git.list
|
||
# 文件内容如下
|
||
deb [trusted=yes arch=amd64] https://deepin-community.github.io/debian-sid-dde-deps-repo sid main
|
||
deb [trusted=yes arch=amd64] https://deepin-community.github.io/debian-sid-dde-repo sid main
|
||
|
||
sudo apt update
|
||
sudo apt install startdde
|
||
sudo apt install deepin-desktop-environment-core
|
||
sudo systemctl enable lightdm
|
||
# 重启即可进入deepin桌面
|
||
```
|
||
## ufw防火墙设置
|
||
```sh
|
||
sudo ufw enable #自启动
|
||
|
||
sudo ufw allow 1000/tcp #允许tcp1000端口
|
||
|
||
sudo ufw allow ssh #允许ssh服务端口
|
||
|
||
sudo service ufw status #查看ufw状态
|
||
|
||
sudo ufw app list #列出服务器可用应用程序配置文件
|
||
|
||
sudo ufw deny from ip #拒绝通过
|
||
|
||
sudo ufw status numbered #查看ufw放行端口
|
||
|
||
sudo ufw delete 2 #删除对应编号的规则
|
||
|
||
sudo ufw delete allow 333 #删除333端口
|
||
|
||
```
|
||
|
||
|
||
## 安装编译器
|
||
```sh
|
||
sudo apt-get install build-essential
|
||
```
|
||
## 安装oracle-jdk
|
||
```sh
|
||
sudo add-apt-repository ppa:webupd8team/java
|
||
sudo apt-get update
|
||
sudo apt-get install oracle-java8-installer
|
||
```
|
||
|
||
## 安装open-jdk
|
||
```sh
|
||
sudo apt-get update
|
||
sudo apt-get install openjdk-8-jdk
|
||
```
|
||
## ubuntu设置屏幕共享
|
||
```sh
|
||
sudo apt-get install xrdp
|
||
sudo apt-get install vnc4server tightvncserver
|
||
|
||
# 在设置中->共享->打开屏幕共享,设置密码,按照给定的链接使用vnc客户端连接
|
||
```
|
||
|
||
## 20.04升级到22.04
|
||
```sh
|
||
sudo do-release-upgrade
|
||
```
|
||
## 安装脚本
|
||
```sh
|
||
# 清华镜像https://mirrors.tuna.tsinghua.edu.cn/ubuntu/
|
||
sudo apt install ubuntu-desktop language-pack-zh-hans net-tools -y
|
||
wget "https://dl.oray.com/hsk/linux/phddns_5.2.0_amd64.deb" -O phddns_5.2.0_amd64.deb
|
||
wget https://newdl.todesk.com/linux/todesk-v4.3.1.0-amd64.deb
|
||
scp root@124.71.39.185:~/frp_0.44.0_linux_amd64.tar.gz ./
|
||
sudo vi /etc/default/grub
|
||
#GRUB_TIMEOUT_STYLE=hidden
|
||
# 设置延迟启动时间
|
||
GRUB_TIMEOUT=3
|
||
GRUB_RECORDFAIL_TIMEOUT=3
|
||
# 保存后更新grub文件
|
||
sudo update-grub
|
||
|
||
# frpc配置文件
|
||
[common]
|
||
server_addr = 123.249.104.217
|
||
server_port = 8000
|
||
token = a4}7{b3]f2[985\6a=17-02
|
||
|
||
#[web-alist]
|
||
#type = http
|
||
#local_ip = 127.0.0.1
|
||
#local_port = 8080
|
||
#custom_domains = pay.myosotis.xin
|
||
|
||
#[web-wikijs]
|
||
#type = http
|
||
#local_ip = 127.0.0.1
|
||
#local_port = 3000
|
||
#custom_domains = free.myosotis.xin
|
||
[Remote-Desktop]
|
||
type = tcp
|
||
local_ip = 127.0.0.1
|
||
local_port = 3389
|
||
remote_port= 8889
|
||
|
||
[ssh-16th]
|
||
type = tcp
|
||
local_ip = 127.0.0.1
|
||
local_port = 22
|
||
remote_port= 8022
|
||
|
||
[MariaDB-chemex]
|
||
type = tcp
|
||
local_ip = 127.0.0.1
|
||
local_port = 3306
|
||
remote_port= 3306
|
||
|
||
[web-alist]
|
||
type = tcp
|
||
local_ip = 127.0.0.1
|
||
local_port = 8080
|
||
remote_port= 8080
|
||
|
||
[web-wikijs]
|
||
type = tcp
|
||
local_ip = 127.0.0.1
|
||
local_port = 3000
|
||
remote_port= 3000
|
||
|
||
sudo vim /lib/systemd/system/frpc.service
|
||
[Unit]
|
||
Description=My Frp Client Service - %i
|
||
After=network.target syslog.target
|
||
Wants=network.target
|
||
|
||
[Service]
|
||
Type=simple
|
||
Restart=on-failure
|
||
RestartSec=5s
|
||
ExecStart=/bin/bash -c '/var/local/frp/frpc -c /var/local/frp/frpc.ini'
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
```
|
||
## 安装docker
|
||
```bash
|
||
# 删除原来的docker
|
||
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done
|
||
# 安装依赖
|
||
sudo apt-get update
|
||
sudo apt-get install ca-certificates curl gnupg
|
||
# 添加gpg秘钥
|
||
sudo install -m 0755 -d /etc/apt/keyrings
|
||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
||
sudo chmod a+r /etc/apt/keyrings/docker.gpg
|
||
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
|
||
# 安装docker
|
||
sudo apt-get update
|
||
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
||
```
|
||
## ubuntu设置dns
|
||
```sh
|
||
# 编辑/etc/resolv.conf,在最后面写入,一行一个
|
||
nameserver 223.5.5.5
|
||
nameserver 8.8.8.8
|
||
|
||
```
|
||
## ubuntu安装kvm教程
|
||
### kvm安装
|
||
```sh
|
||
# 检查主机是否支持虚拟化
|
||
LC_ALL=C lscpu | grep Virtualization
|
||
grep -Eoc '(vmx|svm)' /proc/cpuinfo
|
||
# 检查是否支持硬件加速
|
||
sudo apt install cpu-checker
|
||
kvm-ok
|
||
# 安装软件包及依赖
|
||
sudo apt install qemu qemu-kvm libvirt-daemon-system libvirt-clients virt-manager virtinst bridge-utils
|
||
# qemu-kvm :为KVM管理程序提供硬件仿真的软件。
|
||
# libvirt:管理虚拟机和其他虚拟化功能(比如存储管理,网络管理)的软件集合。它包括一个API库,一个守护程序(libvirtd)和一个命令行工具(virsh)。它为受支持的虚拟机监控程序实现的常用功能提供通用的API。libvirt的主要目标是为各种虚拟化工具提供一套统一可靠的API,让上层可以用一种单一的方式来管理多种不同的虚拟化技术,它可以操作包括 KVM,vmware,XEN,Hyper-v, LXC 等 Hypervisor。需要通过安装libvirt-daemon-system包来将libvirt守护程序作为系统服务运行的配置文件。
|
||
# libvirt-clients :用于管理虚拟化平台的软件,一般情况下,在安装libvirt-daemon-system时会自动安装此包。
|
||
# virt-manager :基于 libvirt 的 GUI 工具 (图形用户界面)。
|
||
# virtinst :一组用于创建虚拟机的命令行工具,一般情况下,在安装virt-manager时会自动安装此包。
|
||
# bridge-utils :用于配置以太网桥的命令行工具。
|
||
# 查看虚拟机管理运行状态
|
||
sudo systemctl status libvirtd
|
||
# 给其他用户添加运行权限
|
||
sudo chmod 777 /var/run/libvirt/libvirt-sock
|
||
```
|
||
|
||
### kvm创建网桥
|
||
```sh
|
||
# 使用netplan设置网桥,创建/etc/netplan/br0.yaml文件
|
||
```
|
||
```yaml
|
||
# 使用dhcp
|
||
network:
|
||
version:2
|
||
ethernets:
|
||
enp1: #主网卡名称
|
||
dhcp4:false
|
||
dhcp6:false
|
||
bridges:
|
||
br0:
|
||
interfaces:[enp1]
|
||
dhcp4:true
|
||
parameters:
|
||
stp:false
|
||
dhcp6:false
|
||
# 使用静态ip
|
||
network:
|
||
version:2
|
||
ethernets:
|
||
enp1: #主网卡名称
|
||
dhcp4:false
|
||
dhcp6:false
|
||
bridges:
|
||
br0:
|
||
interfaces:[enp1]
|
||
dhcp4:false
|
||
address:[192.168.100.100/24]
|
||
routes:
|
||
- to:default
|
||
via: 192.168.100.1
|
||
nameservers:
|
||
addresses:[114.114.114.114]
|
||
parameters:
|
||
stp:false
|
||
dhcp6:false
|
||
```
|
||
```sh
|
||
# 配置生效
|
||
sudo netplan apply
|
||
```
|
||
### kvm创建虚拟机
|
||
```sh
|
||
# 导入qcow2虚拟机,使用nat网络
|
||
virt-intall --name vm01 --vcpus 2 --memory 4096 --import --disk path=/data/vm01.qcow2,bus-virtio --network type=default,source_mode=NAT,model=virtio --force --autostart --os-type=windows --os-varian win10
|
||
# 使用桥接网络
|
||
virt-intall --name vm01 --vcpus 2 --memory 4096 --import --disk path=/data/vm01.qcow2 --network birdge=br0 --force --autostart --os-type=linux --os-varian ubuntu
|
||
# 连接虚拟机
|
||
virsh console --domain vm01 --force
|
||
|
||
```
|
||
### kvm命令行操作
|
||
```sh
|
||
# 列出所有虚拟机
|
||
virsh list --all
|
||
# 启动虚拟机
|
||
virsh start vm01
|
||
# 强制关闭虚拟机
|
||
virsh destroy vm01
|
||
# 开机自动启动虚拟机
|
||
virsh autostart vm01
|
||
# 编辑虚拟机配置文件
|
||
virsh edit vm01
|
||
# 获取虚拟机ip
|
||
virsh domifadder vm01
|
||
virsh net-list
|
||
```
|
||
|
||
## ubuntu配置telnet
|
||
```sh
|
||
# 安装openbsd-inetd
|
||
sudo apt-get install openbsd-inetd -y
|
||
# 安装telnetd
|
||
sudo apt-get install telnetd -y
|
||
# 重启openbsd-inetd
|
||
sudo /etc/init.d/openbsd-inetd restart
|
||
# 查看telnet运行状态
|
||
sudo netstat -a | grep telnet
|
||
```
|
||
|
||
# centos/redhat系统
|
||
|
||
## 挂载exfat磁盘
|
||
```shell
|
||
# 下载工具
|
||
wget https://forensics.cert.org/centos/cert/9/x86_64/exfat-utils-1.4.0-1.el9.x86_64.rpm
|
||
wget https://download1.rpmfusion.org/free/el/updates/8/x86_64/f/fuse-exfat-1.3.0-3.el8.x86_64.rpm
|
||
# 安装工具
|
||
rpm -ivh exfat-utils-1.4.0-1.el9.x86_64.rpm
|
||
rpm -ivh fuse-exfat-1.3.0-3.el8.x86_64.rpm
|
||
# 创建挂载目录及挂载磁盘
|
||
mkdir /mnt/disk && mount -t exfat /dev/sda1 /mnt/disk
|
||
```
|
||
|
||
## 安装中文简体语言包
|
||
|
||
```sh
|
||
# 没有中文语言包显示乱码
|
||
echo "export LANG=C.UTF-8" >> /etc/profile && source /etc/profile
|
||
|
||
# ubuntu安装中文语言包
|
||
sudo apt install language-pack-zh-hans -y
|
||
echo 'LANG="zh_CN.UTF-8"' > /etc/default/locale
|
||
# 以下命令也可以
|
||
localectl set-locale LANG=zh_CN.UTF8
|
||
|
||
# centos安装中文语言包
|
||
yum list |grep zh_CN |awk '{print $1}' |xargs yum install -y && localectl set-locale LANG=zh_CN.UTF8
|
||
```
|
||
## yum常用命令
|
||
```sh
|
||
# 清楚原有yum缓存
|
||
yum clear all
|
||
# 生成新缓存
|
||
yum makecache
|
||
# 查看yum源列表
|
||
yum repolist
|
||
# 更新指定rpm包
|
||
yum update 软件名
|
||
# 删除rpm包
|
||
yum remove 包名
|
||
# 列出当前系统中安装的所有包
|
||
yum list
|
||
```
|
||
|
||
## centos切换GUI和命令行界面
|
||
```sh
|
||
# 命令行转化图形
|
||
systemctl set-default graphical.target
|
||
|
||
# 图形转命令
|
||
systemctl set-default multi-user.target
|
||
|
||
# 重启后生效
|
||
```
|
||
|
||
## centos安装图形界面
|
||
```sh
|
||
# 安装GNOME图形包
|
||
yum -y groupinstall "GNOME Desktop" "Graphical Administration Tools"
|
||
# 更新系统运行级别
|
||
ln -sf /lib/systemd/system/runlevel5.target /etc/systemd/system/default.target
|
||
|
||
# 重启系统
|
||
reboot
|
||
```
|
||
|
||
|
||
# 四、命令大全
|
||
## 1、文件处理命令
|
||
```sh
|
||
updatedb#更新文件目录在数据库的索引(与locate命令关联)
|
||
apropos#搜索关键字
|
||
script#记录linux会话信息
|
||
ls#显示目录下的文件
|
||
stat#显示文件详细信息
|
||
chattr#改变文件属性
|
||
lsattr#显示文件属性
|
||
tree#以树状图显示目录结构
|
||
cat#显示文件的内容
|
||
more#查看文件内容
|
||
less#分屏显示文件
|
||
read#从标准输入设备读取输入/文件中的一行数据
|
||
wc#输出文件的行数,单词数,字节数
|
||
od#以八进制输出文件内容
|
||
tee#从标准输入读取后输出或保存为文件
|
||
fmt#对文本文件重新排版
|
||
join#将两个文件中指定位置相同的行连接起来
|
||
comm#比较排序文件
|
||
awk#模式匹配
|
||
umask#建立文件时预设文件权限掩码
|
||
fold#限定文件列宽并输出
|
||
col#过滤控制字符
|
||
colrm#删除指定列的内容
|
||
tr#字符转换
|
||
strings#显示文件可打印的字符
|
||
xargs#从标准输入读取参数
|
||
expr#求表达式变量的值
|
||
mkdir#创建目录
|
||
touch#创建文件
|
||
rm#删除文件/目录
|
||
rmdir#删除目录
|
||
tmpreaper#删除临时文件
|
||
cp#复制文件
|
||
mv#移动或重命名文件
|
||
ln#链接文件或目录
|
||
lndir#链接目录内容
|
||
grep#查找字符串
|
||
head#显示文件头部内容
|
||
tail#显示文件尾部内容
|
||
diff#比较两个文件
|
||
diffstat#读取diff的结果统计
|
||
cmp#比较文件差异
|
||
ispell#拼写检查
|
||
split#分割文件大小
|
||
find#在文件系统查找目录或文件
|
||
findfs#通过列表或用户ID查找文件系统
|
||
locate#在索引数据库搜索文件
|
||
whereis#查找二进制、源码、man手册文件
|
||
sort#按顺序显示文件内容
|
||
uniq#忽略文件中的重复行
|
||
file#测试文件内容类型
|
||
chmod#设置文件权限
|
||
chown#设置文件所有者
|
||
chgrp#设置文件所属组
|
||
md5sum#计算文件md5值
|
||
sha256sum#计算文件sha256值
|
||
cksum#文件CRC校验
|
||
sum#计算文件的校验和
|
||
```
|
||
## 2、磁盘管理命令
|
||
```sh
|
||
lsblk #查看磁盘分区
|
||
df #显示文件系统使用情况及类型
|
||
du#显示文件或目录所占的磁盘空间
|
||
dd#磁盘操作
|
||
fdisk#磁盘分区
|
||
mount#挂载文件系统
|
||
umount#卸载文件系统
|
||
mkfs#建立各种文件系统
|
||
mkfs.ext3建立一个ext3文件系统
|
||
mkbootdisk#建立启动盘
|
||
fsck#检查文件系统
|
||
hdparm#设置磁盘参数
|
||
mkswap#建立交换分区
|
||
dump#备份文件系统
|
||
restore#还原文件
|
||
sync#写入磁盘
|
||
e2label#设置卷标
|
||
badblock#检查磁盘
|
||
quota#显示磁盘已使用的空间与限制
|
||
quotacheck#检查磁盘使用空间与限制
|
||
quotaoff#关闭磁盘空间限制
|
||
quotaon#开启磁盘空间限制
|
||
quotastats#显示磁盘空间限制
|
||
repquota#检查磁盘空间限制的状态
|
||
mdadm#RAID设置工具
|
||
tune2fs#文件系统调整
|
||
mkisofs#建立ISO 9660映像文件
|
||
cfdisk#磁盘分区
|
||
sfdisk#硬盘分区工具程序
|
||
parted#磁盘分区工具
|
||
```
|
||
|
||
## 3、LVM命令集
|
||
```sh
|
||
1.物理卷PV管理命令
|
||
pvcreate
|
||
pvdisplay
|
||
pvchange
|
||
pvmove
|
||
pvck
|
||
2.卷组VG管理命令
|
||
vgcreate
|
||
vgdisplay
|
||
vgchange
|
||
vgextend
|
||
vgscan
|
||
vgsync
|
||
vgeduce
|
||
vgremove
|
||
vgxport
|
||
vgcfgrestore
|
||
vgimport
|
||
vgcfgbackup
|
||
vgck
|
||
3.逻辑卷LV管理命令
|
||
lvcreate
|
||
lvdisplay
|
||
lvchange
|
||
lvextend
|
||
lvreduce
|
||
lvremove
|
||
lvrename
|
||
```
|
||
## 4、文件查看命令(通用)
|
||
|
||
```shell
|
||
ls 显示当前路径下的目录和文件
|
||
参数:
|
||
-a 显示所有目录和文件
|
||
-l 显示目录和文件的详细信息
|
||
pwd显示当前路径
|
||
mkdir dir 创建目录
|
||
mkdir dir1 dir 2 同时创建两个目录
|
||
mkdir -p /tmp/dir/dir2 创建目录树
|
||
mv dir1 dir2 移动或重命名一个目录
|
||
cp file1 file2 复制file1为file2
|
||
cp -a dir1 dir2 复制一个目录
|
||
cp -a /dir1 . 复制一个目录到当前目录
|
||
rm dir 删除目录或文件
|
||
参数
|
||
-f 不提示直接删除
|
||
-r 递归删除
|
||
head dir 查看文件头部内容(默认显示前十行内容)
|
||
tail dir 查看文件尾部内容(默认显示后十行内容)
|
||
参数
|
||
-n 显示多少行内容
|
||
grep 查找文件内容(可以使用正则表达式)
|
||
grep lcc /tmp/ls 在ls文件中查找lcc
|
||
grep ^lcc /tmp/ls 在ls文件中查找以lcc开始的行
|
||
grep [0-9] /tmp/ls 在ls文件中查找所有包含数字的行
|
||
diff file1 file2 找出两个文件的不同之处
|
||
find / -name file 在根目录查找名为file的文件和目录
|
||
find / -user user1 查找属于用户user1的文件和目录
|
||
find /tmp -name *.conf 在/tmp目录查找以.conf结尾的文件
|
||
find /tmp -type f -atime +10 查找在过去10天内未被使用的执行文件
|
||
find /tmp -type f -mtime -10 查找在10天内被创建或者修改过的文件
|
||
find -name '*.[ch]' | xargs grep -E 'exe' 在当前目录及其子目录所有.c和.h文件中查找'exe'
|
||
find -type f -print0 | xargs -r0 grep -F 'exe' 在当前目录及其子目录的常规文件中查找'exe'
|
||
find -maxdepth 1 -type f | xargs grep -F 'exe' 在当前目录中查找'exe'
|
||
bzip2 file1 压缩file1
|
||
unzip2 file1.bz2 解压file.bz2
|
||
gzip file 压缩file
|
||
gzip -9 file 最大程度压缩file
|
||
gunzip file.gz 解压file.gz
|
||
zip file.zip file 创建zip格式的压缩包
|
||
zip -r file.zip file dir 把文件和目录压缩成file.zip
|
||
unzip file.zip 解压file.zip到当前目录
|
||
unzip file.zip -d /tmp/ 解压file.zip到/tmp目录下
|
||
tar 备份文件
|
||
参数
|
||
-c 创建新档案文件
|
||
-r 把要存档的文件追加到以有档案文件的末尾
|
||
-t 列出档案文件内容
|
||
-u 更新文件
|
||
-x 从档案文件中释放文件
|
||
-f 使用档案文件或设备(必选项)
|
||
-j 代表用bzip2进行压缩
|
||
-z 代表用gzip压缩/解压
|
||
-C dir 转到指定目录
|
||
```
|
||
|
||
# 五、故障排除
|
||
## ubuntu22.04解决centos容器无法使用systemctl
|
||
|
||
^bf399f
|
||
|
||
```sh
|
||
# 原因是centos需要用cgroup v1,ubuntu22.04默认的cgroup是v2,可以用一下命令检查,如果有输出说明是v2版本,无输出是v1
|
||
cat /sys/fs/cgroup/cgroup.controllers
|
||
# 修改引导文件
|
||
vi /etc/default/grub
|
||
#在GRUB_CMDLINE_LINUX中添加
|
||
systemd.unified_cgroup_hierarchy=0
|
||
# 更新grub引导
|
||
sudo update-grub
|
||
sudo reboot
|
||
```
|
||
## ubuntu延迟引导设置
|
||
```sh
|
||
# 修改grub文件
|
||
sudo vi /etc/default/grub
|
||
# 将GRUB_TIMEOUT_STYLE=hidden注释掉
|
||
GRUB_DEFAULT=0
|
||
#GRUB_TIMEOUT_STYLE=hidden
|
||
# 设置延迟启动时间
|
||
GRUB_TIMEOUT=3
|
||
GRUB_RECORDFAIL_TIMEOUT=3
|
||
# 保存后更新grub文件
|
||
sudo update-grub
|
||
```
|
||
---
|
||
## teleport堡垒机在ubuntu无法启动
|
||
```
|
||
# ubuntu20.04以上版本,下载libffi6
|
||
wget http://mirrors.kernel.org/ubuntu/pool/main/libf/libffi/libffi6_3.2.1-8_amd64.deb
|
||
sudo apt install libffi6_3.2.1-8_amd64.deb
|
||
/etc/init.d/teleport restart
|
||
```
|
||
## ubuntu虚拟卷扩充
|
||
```sh
|
||
vgdisplay #查看虚拟卷信息
|
||
df / #查看虚拟卷路径
|
||
lvextend -L +20G /dev/mapper/ubuntu--vg-ubuntu--lv #为虚拟卷增加20G容量
|
||
lvresize -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
|
||
# 按百分比增加虚拟卷容量
|
||
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv #增加容量后,进行扩容
|
||
```
|
||
|
||
## ubuntu软件安装中断恢复或无法获得锁解决办法
|
||
```sh
|
||
# 1、恢复中断继续
|
||
sudo apt --fix-broken install
|
||
# 或
|
||
sudo apt --fix-broken upgrade
|
||
|
||
# 2、删除锁文件
|
||
sudo rm /var/cache/apt/archives/lock
|
||
sudo rm /var/lib/dpkg/lock
|
||
|
||
# 3、结束相关进程
|
||
ps -aux | grep apt-get
|
||
kill pid
|
||
```
|
||
|
||
## 网络命令无法使用
|
||
```sh
|
||
# 安装网络工具
|
||
# ubuntu系统
|
||
sudo apt install net-tools
|
||
|
||
# centos系统
|
||
yum install net-tools
|
||
```
|
||
|
||
|
||
|
||
## android pip安装出现(段错误,核心已转储)错误
|
||
```sh
|
||
# 解决方法
|
||
ulimit -s 102400
|
||
# 在pip命令前添加sudo
|
||
```
|
||
|
||
## OpenSSH最常见问题:
|
||
```
|
||
1。确保openshd服务在本地系统(system)帐户下运行。它是唯一有足够权限成为任何用户的帐户,登录ssh服务器需要这些权限。如果它被改变了,把它放回去。
|
||
|
||
2。如果要从服务器系统登录到服务器系统(用于测试等),请不要将帐户的主目录设置为“/”,因为此特定设置存在奇怪的错误。使用/bin或其他东西。
|
||
|
||
三。在passwd的第二个字段中,任何帐户都不应具有加密的password。NT身份验证由服务器使用,因此请确保该字段为空或设置为mkpasswd的默认使用。
|
||
|
||
4。如果你得到一个“你不存在,走开!”尝试登录时,请检查passwd文件的格式是否正确,并确保文件中包含用户名。如果只安装了客户机,请查找etc/passwd并将其删除。
|
||
|
||
5。如果登录时出现setgid错误,请检查组文件中与passwd中为该用户列出的groupid匹配的行。另外,如果对组文件进行了更改,请确保重新启动了服务。
|
||
|
||
6。请注意,此包是完整cygwin包的一部分,它不是设计为与cygwin一起运行的。如果安装了cygwin,服务器或cygwin都将无法工作,很可能两者都不工作。如果需要cygwin,请删除openssh服务器并安装cygwin的版本。
|
||
|
||
7。dll错误消息(无效的过程点等)可能是由旧版本的cygwin dll引起的。许多Unix实用程序使用cygwin移植并使用dll。搜索cygwin1.dll并重命名或删除服务器上它所查找的任何其他副本。
|
||
|
||
8。奇怪的断开可能是由于用户在其用户帐户下的注册表中定义了cygwin装载。当用户登录时,最好删除hkey_current_user下的“cygnus solutions”项。请注意,运行服务器需要在hkey_local_machine下的“cygnus solutions”项。不要删除。
|
||
|
||
9。确保所有sshd和cygrunsrv进程在服务停止和启动时都被终止。可以使用资源工具包中的kill、SysInternals中的pskill或Windows任务管理器。
|
||
|
||
10。测试密钥身份验证时,请使用两个单独的系统。如果客户端和服务器在同一台计算机上运行,则密钥身份验证将不起作用。1。确保计划程序服务已启动。(net start schedule或net start“task scheduler”应该启动它)
|
||
|
||
2。启动在系统帐户下运行的命令提示符:
|
||
|
||
at(返回时间+1分钟)/interactive c:\winnt\system32\cmd.exe
|
||
|
||
如果您使用的是WindowsXP,请将“Winnt”替换为“Windows”
|
||
|
||
三。在指定的时间,将出现一个新的命令窗口。此窗口将具有系统的所有权限。
|
||
|
||
4。检查Quickedit模式是否已打开(在WindowsXP上默认为关闭)。通过单击控件小部件或右键单击标题栏进入属性。QuickEdit设置在“选项”选项卡下。
|
||
|
||
5。使用该命令窗口,进入安装路径的bin子目录。
|
||
|
||
6。将cygwin设置为“binmode ntsec tty”:
|
||
|
||
设置cygwin=binmode ntsec tty
|
||
|
||
7。dll错误消息(无效的过程点等)可能是由旧版本的cygwin dll引起的。许多Unix实用程序使用cygwin移植并使用dll。搜索cygwin1.dll并重命名或删除服务器上它所查找的任何其他副本。
|
||
|
||
8。奇怪的断开可能是由于用户在其用户帐户下的注册表中定义了cygwin装载。当用户登录时,最好删除hkey_current_user下的“cygnus solutions”项。请注意,运行服务器需要在hkey_local_machine下的“cygnus solutions”项。不要删除。
|
||
|
||
9。确保所有sshd和cygrunsrv进程在服务停止和启动时都被终止。可以使用资源工具包中的kill、SysInternals中的pskill或Windows任务管理器。
|
||
|
||
10。测试密钥验证时,请使用两个单独的系统。如果客户端和服务器在同一台计算机上运行,则密钥身份验证将不起作用。1。确保计划程序服务已启动。(net start schedule或netstart“task scheduler”应该启动它)
|
||
|
||
2。启动在系统帐户下运行的命令提示符:
|
||
|
||
at(投降时间+1分钟)/interactive c:\winnt\system32\cmd.exe
|
||
|
||
如果您使用的是WindowsXP,请将“Winnt”替换为“Windows”
|
||
|
||
三。在指定的时间,将出现一个新的命令窗口。此窗口将具有系统的所有权限。
|
||
|
||
4。检查Quickedit模式是否已打开(在WindowsXP上默认为关闭)。通过单击控件小部件或右键单击标题栏进入属性。QuickEdit设置在选项选项卡下。
|
||
|
||
5。使用该命令窗口,进入安装路径的bin子目录。
|
||
|
||
6。将cygwin设置为“binmode ntsec tty”:
|
||
|
||
设置cygwin=binmode ntsec tty
|
||
|
||
7。以最高调试模式运行sshd服务器:
|
||
|
||
..\usr\sbin\sshd-d-d-d
|
||
|
||
这将以调试模式运行服务器。如果服务器没有崩溃,请尝试从客户机连接到它。捕获任何输出,即使它崩溃(使用Quickedit模式,用鼠标突出显示文本,然后按Enter键复制文本)。然后可以将调试信息粘贴到消息或记事本中。
|
||
```
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|