Files
docs/Linux/Linux笔记.md
2026-01-14 11:27:47 +08:00

49 KiB
Raw Blame History

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存储

# 基于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存储

mount -t nfs <NFS服务器IP>:/共享路径 /mnt/nfs_share

搭建smb共享

# 基于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存储

mount -t cifs -o username=share,password='Nas2025**',vers=3.0,seal "//192.168.140.200/toor 共享给我/share" /mnt/smb

系统管理

会话工具

#可以在终端退出时保持程序或命令运行
# 安装软件
dnf install screen

# 创建指定名称的会话
screen -S 会话名称
# 要在终端退出后继续运行的命令
nohup hexo server &
# 按ctrl+a,然后按d,返回原来会话

# 列出当前会话列表
screen -list

# 切换到指定会话
screen -r 会话名称


用户管理

0.受限制的shell

# 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.使用秘钥登录

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.免密登录

#生成秘钥
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

用户添加组后立即生效

newgrp group-name

查看用户登录记录

# 查看所有用户最后一次登录记录
lastlog
# 查看在线用户
w

踢出在线用户

fuser -k /dev/pts/0

vim设置table为4个空格

# 修改配置文件/etc/vimrc
set ts=4
set softtabstop=4
set shiftwidth=4
set expandtab
set autoindent
# 显示行号
set nu

网络管理

openvpn配置

# 通过包管理工具安装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

# 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抓包

tcpdump 协议 源或目的 主机或端口
# 示例
tcpdump -i eth01 src 8080 dst 443 -w tcplink.cap -nvv
-i指定网卡接口
src指定源端口或ip
dst指定目的端口或ip
-w输出到文件
-nvv显示详细信息

history命令历史记录

# 在命令前加空格不会记录到历史记录

# 在历史命令中添加日期时间
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
# 重复执行上一条命令
!!

数据传输进度条

pv file > /dev/null

关机提示语


shutdown -k +10 'mes' # 提示用户10分钟后关机,并不会真正关机

shutdown -h +10'mes' # 提示用户10分钟后关机,

# 关机时间低于5分钟时,系统会禁止用户登录

设置登录欢迎词

# 登录前提示语
# 本地登录前配置文件/etc/issue
# 远程登录前配置文件/etc/issue.net(需在sshd_config文件中启用Banner /etc/issue.net)

# 登录后提示语
# 配置文件在/etc/motd

# 在终端发送广播消息
wall "系统即将关机~"

# 关闭当前终端显示wall消息
mesg n

# 接受wall消息
mesg y

rsync文件同步

# 目录增量同步/更新/复制
rsync -avtP localPATH name@host:path

计算文件哈希值

# 计算MD5值
md5sum 文件名 
#计算sha1值
sha1sum 文件名 
#计算sha256值
sha256sum 文件名 

在终端显示图片

# 软件主页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信息

cat /proc/cpuinfo | grep "cpu cores" | uniq

设置时区

sudo timedatectl set-timezone 'Asia/Shanghai' #设置为亚洲/上海

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 手动选择
tzselect 

安装android-sdk

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

设置容器开机自启

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

设置镜像加速

# 编辑文件
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

容器启动失败解决办法

# 查看容器错误日志
docker logs 容器id

# 拷贝配置文件
docker cp /tmp/conf 容器id:/etc/conf

容器网络管理

# 容器添加网络
docker network connect 网络名称 容器名称

# 删除容器网络
docker network disconnect 网络名称 容器名称

# 指定ip创建容器,需要ip未被占用
docker --network bridge --ip 172.18.0.2

# 查看容器ip
docker inspect 容器id或name |grep IPAddress

docker以特权用户运行容器

#RedHat/Centos系统改为/usr/sbin/initDebian/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

搭建私有仓库

# 下载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/"镜像标签"

导入导出镜像

# 提交镜像
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 文档名称 镜像标签

创建容器网络

# 创建一个名为vlan100的网络,网络类型为bridge
docker network create -d bridge vlan100

docker的run参数示例

# 创建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 添加指定网络,用于容器互相通信,可添加多个

镜像加速

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

容器自启动开关

# 开启容器自启动
docker update --restart=always 容器id或name
# 关闭容器自启动
docker update --restart=no 容器id或name

croc文件传输工具


sudo权限管理

# 使用户可以使用sudo命令,使用管理员权限运行
visudo 

username ALL=(ALL) ALL # 允许用户使用sudo命令
username ALL=(ALL) NOPASSWD:ALL # 允许用户不用输入密码使用sudo
username ALL=(ALL) !/usr/bin/sudo #禁止用户使用sudo命令

iptables防火墙配置

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

网络配置

ifconfig 网卡名称 显示该网卡配置
ifconfig 网卡名称 192.168.1.1 netmask 255.255.255.0 给该网卡配置ip
ifup 网卡名称 启用该设备
ifdown 网卡名称 禁用该设备
iwconfig 网卡名称 显示无线网卡配置
iwlist scan 显示无线网络
ip addr show 显示网卡的ip地址

修改主机名

hostnamectl set-hostname 名称 

后台任务管理

# 查看当前有多少在后台运行的命令
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用法

# 启动一个服务:
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参数

# 将公钥添加到服务端实现免密登陆
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分钟前有效,永不过期

重定向用法

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使用

先在本地生成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系统

图形化界面安装/卸载

# 安装默认图形化界面,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桌面)

$ 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桌面

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防火墙设置

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端口

安装编译器

sudo apt-get  install  build-essential

安装oracle-jdk

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

安装open-jdk

sudo apt-get update
sudo apt-get install openjdk-8-jdk

ubuntu设置屏幕共享

sudo apt-get install xrdp
sudo apt-get install vnc4server tightvncserver

# 在设置中->共享->打开屏幕共享,设置密码,按照给定的链接使用vnc客户端连接

20.04升级到22.04

sudo do-release-upgrade

安装脚本

# 清华镜像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

# 删除原来的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

# 编辑/etc/resolv.conf,在最后面写入,一行一个
nameserver 223.5.5.5
nameserver 8.8.8.8

ubuntu安装kvm教程

kvm安装

# 检查主机是否支持虚拟化
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让上层可以用一种单一的方式来管理多种不同的虚拟化技术,它可以操作包括 KVMvmwareXENHyper-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创建网桥

# 使用netplan设置网桥,创建/etc/netplan/br0.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
# 配置生效
sudo netplan apply

kvm创建虚拟机

# 导入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命令行操作

# 列出所有虚拟机
virsh list --all
# 启动虚拟机
virsh start vm01
# 强制关闭虚拟机
virsh destroy vm01
# 开机自动启动虚拟机
virsh autostart vm01
# 编辑虚拟机配置文件
virsh edit vm01
# 获取虚拟机ip
virsh domifadder vm01
virsh net-list

ubuntu配置telnet

# 安装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磁盘

# 下载工具
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

安装中文简体语言包

# 没有中文语言包显示乱码
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常用命令

# 清楚原有yum缓存
yum clear all 
# 生成新缓存
yum makecache 
# 查看yum源列表
yum repolist 
# 更新指定rpm包
yum update 软件名 
# 删除rpm包
yum remove 包名
# 列出当前系统中安装的所有包
yum list 

centos切换GUI和命令行界面

# 命令行转化图形
systemctl set-default graphical.target

# 图形转命令
systemctl set-default multi-user.target

# 重启后生效

centos安装图形界面

# 安装GNOME图形包
yum -y groupinstall "GNOME Desktop" "Graphical Administration Tools"   
# 更新系统运行级别
ln -sf /lib/systemd/system/runlevel5.target /etc/systemd/system/default.target 

# 重启系统
reboot

四、命令大全

1、文件处理命令

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、磁盘管理命令

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命令集

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、文件查看命令(通用)

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

# 原因是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延迟引导设置

# 修改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虚拟卷扩充

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软件安装中断恢复或无法获得锁解决办法

# 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

网络命令无法使用

# 安装网络工具
# ubuntu系统
sudo apt install net-tools

# centos系统
yum install net-tools

android pip安装出现(段错误,核心已转储)错误

# 解决方法
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键复制文本。然后可以将调试信息粘贴到消息或记事本中。