```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 :/共享路径 /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证书 客户端证书 客户端秘钥 ta.key秘钥 # 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键复制文本)。然后可以将调试信息粘贴到消息或记事本中。 ```