# 1、删除手机系统自带的鸡肋软件(万能)
## 通过ADB删除
(1)、电脑上安装ADB,环境配置
[安卓手机使用ADB工具卸载预装软件教程(入门)(无需root)](https://mp.weixin.qq.com/s/eDeiRxOq0idKjRyG3SsOUw)
(2)、卸载方法参考这篇文章
[删掉手机上的鸡肋系统软件,用这个办法就够了。](https://mp.weixin.qq.com/s/Uwv7Cyb5mB30bsV2OWnG7w)
主要时通过一个木函获取软件包名
# 2、ubuntu20.04安装Pycharm破解版
## 方法一:(该方法隔一段时间需重新激活)
1、官网下载
2、获取激活码
[intellij idea注册码,idea激活码,idea破解,idea破解插件,idea注册码在线生成](http://idea.javatiku.cn/)
## 方法二:(仍在探索)
## Pycharm卸载方法
1、删除解压缩目录
2、删除隐藏目录
```bash
sudo rm -r ~/.Pycharm
```
3、删除快捷方式
```bash
cd /usr/share/applications
sudo rm -r pycharm.desktop
```
# 3、Ubuntu20.04空间清理
1、日志文件清理
[ubuntu提示根目录存储空间不足的解决办法_ubuntu根目录空间不足_飞鸭传书的博客-CSDN博客](https://blog.csdn.net/jppipai/article/details/122174918)
[Can I remove files in /var/log/journal and /var/cache/abrt-di/usr?](https://unix.stackexchange.com/questions/130786/can-i-remove-files-in-var-log-journal-and-var-cache-abrt-di-usr)
2、vscode workspace清理
```bash
rm -rf .config/Code/User/workspaceStorage/*
```
# 4、ubuntu20.04中查看opencv版本号命令
### 查看opencv 3以及以下版本:
### pkg-config --modversion opencv
### 查看opencv4版本:
### pkg-config --modversion opencv4
在opencv编译时用一下命令开启pkgconfig选项
```plain
cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=YES ..
```
# 5、查看系统内核版本号及系统名称
### uname -a
# 6、ubuntu20.04软件卸载
## Step1:dpkg -l |[grep](https://so.csdn.net/so/search?q=grep&spm=1001.2101.3001.7020) -i "软件包名",查找已经安装的软件包名
## Step2
### (1)、对于终端里直接使用apt-get安装的软件,用
### sudo apt-get remove --purge 软件名
### (2)、对于下载的.deb包进行安装的软件,用
### sudo dpkg -r --purge *.deb
## Step3
清理卸载残留
```bash
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P
```
# 7、ubuntu 20.04 sudo apt-get update报错解决方案
## (1)、错误:7 v2raya InRelease
### 解决方案
```bash
//删除原秘钥
sudo apt-key del 8CF9045B2F84DF776654C97B354E516D494EF95F
//根据安装文档添加公钥
wget -qO - https://apt.v2raya.org/key/public-key.asc | sudo tee /etc/apt/trusted.gpg.d/v2raya.asc
```
### 附件:[v2ray安装文档](https://v2raya.org/docs/prologue/installation/debian/)
## (2)、忽略:[http://ppa.launchpad.net/jonathonf/ffmpeg-4/ubuntu](http://ppa.launchpad.net/jonathonf/ffmpeg-4/ubuntu) focal InRelease,就类似于忽略·······的问题
### 解决方案:进入软件和更新,将对应的名称去掉

## (3)、换源方法
ubuntu自带:
```plain
#deb cdrom:[Ubuntu 20.04.6 LTS _Focal Fossa_ - Release amd64 (20230316)]/ focal main restricted
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://cn.archive.ubuntu.com/ubuntu/ focal main restricted
# deb-src http://cn.archive.ubuntu.com/ubuntu/ focal main restricted
## Major bug fix updates produced after the final release of the
## distribution.
deb http://cn.archive.ubuntu.com/ubuntu/ focal-updates main restricted
# deb-src http://cn.archive.ubuntu.com/ubuntu/ focal-updates main restricted
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://cn.archive.ubuntu.com/ubuntu/ focal universe
# deb-src http://cn.archive.ubuntu.com/ubuntu/ focal universe
deb http://cn.archive.ubuntu.com/ubuntu/ focal-updates universe
# deb-src http://cn.archive.ubuntu.com/ubuntu/ focal-updates universe
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://cn.archive.ubuntu.com/ubuntu/ focal multiverse
# deb-src http://cn.archive.ubuntu.com/ubuntu/ focal multiverse
deb http://cn.archive.ubuntu.com/ubuntu/ focal-updates multiverse
# deb-src http://cn.archive.ubuntu.com/ubuntu/ focal-updates multiverse
## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://cn.archive.ubuntu.com/ubuntu/ focal-backports main restricted universe multiverse
# deb-src http://cn.archive.ubuntu.com/ubuntu/ focal-backports main restricted universe multiverse
## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu focal partner
# deb-src http://archive.canonical.com/ubuntu focal partner
deb http://security.ubuntu.com/ubuntu focal-security main restricted
# deb-src http://security.ubuntu.com/ubuntu focal-security main restricted
deb http://security.ubuntu.com/ubuntu focal-security universe
# deb-src http://security.ubuntu.com/ubuntu focal-security universe
deb http://security.ubuntu.com/ubuntu focal-security multiverse
# deb-src http://security.ubuntu.com/ubuntu focal-security multiverse
# This system was installed using small removable media
# (e.g. netinst, live or single CD). The matching "deb cdrom"
# entries were disabled at the end of the installation process.
# For information about how to configure apt package sources,
# see the sources.list(5) manual.
```
### 常用的开源镜像站:[阿里源](https://developer.aliyun.com/mirror/ubuntu?spm=a2c6h.13651102.0.0.3e221b11hDdNQj)、[清华源](https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/)、[各种源汇总](https://www.cnblogs.com/Hi-blog/p/5954230.html)
```bash
sudo gedit /etc/apt/sources.list
复制、粘贴
```
## 软件包依赖
[Linux依赖管理详解_/lib/apt/list的东西可以删除吗-CSDN博客](https://blog.csdn.net/songchuwang1868/article/details/104339602)
# 8、查询内存使用情况
## 命令:free -m
### 功能说明:显示内存状态
语 法: free [-bkmotV][-s ]
补充说明:free指令会显示内存的使用情况,包括实体内存,虚拟的交换文档内存,共享内存区段,连同系统核心使用的缓冲区等。
参 数:
-b 以Byte为单位显示内存使用情况。
-k 以KB为单位显示内存使用情况。
-m 以MB为单位显示内存使用情况。
-o 不显示缓冲区调节列。
-s 持续观察内存使用状况。
-t 显示内存总和列。
-V 显示版本信息。
# 9、[查看磁盘空间](https://blog.csdn.net/FIELDOFFIER/article/details/50467618)
# 10、ubuntu上安装QQ、微信、wine
## (1)、QQ、微信安装
#### 方法一
[GitHub - wszqkzqk/deepin-wine-ubuntu: Deepin Wine for Ubuntu/Debian](https://github.com/wszqkzqk/deepin-wine-ubuntu)
#### 参见文中步骤安装,安装完后进行更新软件,参见文章
[Ubuntu下对deepin-wine的使用详解](https://zhuanlan.zhihu.com/p/141107518)
#### 方法二
[GitHub - zq1997/deepin-wine: 【deepin源移植】Debian/Ubuntu上最快的QQ/微信安装方式](https://github.com/zq1997/deepin-wine#%E5%8D%B8%E8%BD%BD%E6%B8%85%E7%90%86)
### 其中QQ、微信字体无法显示等问题可以通过移植windows下字体解决
1. **从 ****windows**** 中系统盘所在的位置 ****c:\windows\Fonts**** 中拷贝全部的字体;**
2. **将拷贝的字体数据放在 ****ubuntu**** 系统中 ****/usr/share/deepin-wine/wine/fonts**** 中;**
3. **重新登录微信, QQ等应用即可解决所有字体变方框问题。**
## (2)、源码安装wine
[使用源码安装wine_寻水的漁的博客-CSDN博客_wine源码安装](https://blog.csdn.net/u013350783/article/details/90742468)
# 11、wine常用命令
### wine——命令
### (1)、wine安装软件的三种方式
### wine xxx.exe
### ./ xxx.exe
### (2)、wine常用命令
### winecfg (wine的设置~)
### wine taskmgr (任务管理器)
### wine uninstaller (卸载软件)
### wine regedit (注册表)
### wine notepad (记事本)
### wineboot ( 重启wine)
# 12、[安装TopIcons-plus](https://blog.csdn.net/weixin_40108745/article/details/118343670)
# 13、解决翻墙也打不开github的问题
检查Hosts文件
```plain
sudo gedit /etc/hosts
```
将原始Hosts内容替换上去
```plain
127.0.0.1 localhost
127.0.1.1 Alien
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
```
完成
:::info
PS:刷新dns命令:`**sudo /etc/init.d/network-manager restart**`
:::
# 14、ROS安装
## ubuntu20.04安装ros
步骤参考:
[详细介绍如何在ubuntu20.04中安装ROS系统,超快完成安装(最新版教程)_慕羽★的博客-CSDN博客_ros安装](https://blog.csdn.net/qq_44339029/article/details/120579608)
到rosdep初始化那步,用[rosdepc](https://mp.weixin.qq.com/s/VGs8oWdhHH6XsHcx21lN4Q):
用如下命令:
```bash
sudo pip install rosdepc
```
如果显示没有pip可以试试pip3。
```bash
sudo pip3 install rosdepc
```
如果pip3还没有
```bash
sudo apt-get install python3-pip
sudo pip install rosdepc
```
使用
```bash
sudo rosdepc init
rosdepc update
```
## Ubuntu22.04安装ROS1
```bash
echo "deb [trusted=yes arch=amd64] http://deb.repo.autolabor.com.cn jammy main" | sudo tee /etc/apt/sources.list.d/autolabor.list
sudo apt update
sudo apt install ros-noetic-autolabor
```
## Ubuntu22.04安装ROS2
官方安装教程:
[Ubuntu (deb packages) — ROS 2 Documentation: Humble documentation](https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debs.html)
其中curl命令用proxychains curl命令代替
ros1和ros2切换:
```bash
# >>> type in ros to choose which to initialize >>>
ros(){
echo "ros: noetic(1) humble(2)?"
read choose
case $choose in
1) source /opt/ros/noetic/setup.bash
(according to needs to add) ;;
2) source /opt/ros/humble/setup.bash
(according to needs to add) ;;
esac
}
# <<< type in ros/ros2 to initialize <<<
```
# 15、解决ubuntu20.04报错“Pending update of "snap-store" snap - Close the app to avoid disruptions "
```bash
sudo snap refresh//若没有报错或通知,则完成,若还是有报错,则继续进行下一步
sudo refresh --time
date
sudo refresh --list
sudo killall snap-store
sudo snap refresh//等待下载
sudo snap refresh//查看有无报错或通知,基本解决
```
# 16、Ubuntu20.04查询进程
[ubuntu查看进程和结束进程-阿里云开发者社区](https://developer.aliyun.com/article/889750)
# 17、Realsense SDK 安装v2.53.1版本
[realsense-viewer 不识别 T265——Realsense SDK 在 v2.54.1 版本以后不再支持T265相机的解决办法_realsense t265_看我放个大招的博客-CSDN博客](https://blog.csdn.net/tugepaopaoo/article/details/131095933)
## 官方文档
Realsense SDK安装:
[librealsense/doc/distribution_linux.md at master · IntelRealSense/librealsense](https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md)
Realsense-ros安装:
[GitHub - IntelRealSense/realsense-ros at ros1-legacy](https://github.com/IntelRealSense/realsense-ros/tree/ros1-legacy)
# 18、ssh key查找
主目录下找到.ssh文件夹,id_rsa为私钥,id_rsa.pub是公钥
# 19、增加虚拟内存
```bash
#count的大小就是增加的swap空间的大小,1M是块大小,所以空间大小是bs*count=8192MB
sudo dd if=/dev/zero of=/swapfile bs=1M count=8192 #count后的数可以自己定义
#把刚才空间格式化成swap格式
sudo mkswap /swapfile
chmod 0600 /swapfile
#使用刚才创建的swap空间
sudo swapon /swapfile
#用top查看Mib swap
top
#释放空间
sudo swapoff -a
```
# 20、Ubuntu20.04卸载重装
## 卸载
[教你彻底卸载Ubuntu双系统,去污不残留-CSDN博客](https://blog.csdn.net/qq_42257666/article/details/120721561)
## 安装
### 注意事项
1. 安装时可以选择最小安装,没必要完整安装,好多东西都用不上
若最小安装,则不能勾选联网更新,否则安装会出错
2. 分区
1. 交换分区:设置为跟内存一样大—>主分区—>空间起始位置—>用于交换空间
2. boot:设置为1G—>逻辑分区—>空间起始位置—>ext4—> /boot
3. 根目录:根据自己需要设置大小(本次设置为100G)—>主分区—>空间起始位置—>ext4—> /
4. home:根据自己需要设置大小(本次设置为200G,也就是剩下的所有空间)—>逻辑分区—>空间起始位置—>ext4—> /home
## nvidia驱动安装
1、查看显卡类型
```bash
lspci | grep -i nvidia
```
2、禁用nouveau
```bash
sudo vim /etc/modprobe.d/blacklist-nouveau.conf
# 添加以下内容
blacklist nouveau
options nouveau modeset=0
```
3、更新系统,重启
```bash
sudo update-initramfs -u #更新系统
sudo reboot
```
4、验证是否禁用nouveau,没有输出则成功禁用
```bash
lsmod | grep nouveau
```
5、之前若安装了驱动,进行卸载
```bash
sudo apt autoremove --purge nvidia*
reboot
# 5. 查看当前的nvidia驱动
ls /usr/src | grep nvidia
```
6、推荐通过apt安装驱动
```bash
ubuntu-drivers devices
```
选择带recommended标签的
```bash
sudo apt install nvidia-driver-<版本号>
```
若上面的驱动安装后出现`no devices were found`,则卸载驱动重新安装开源(带 open 标签)的
```bash
sudo apt install nvidia-driver-<版本号>-open
```
# 21、locate命令定位到不存在的文件
原因:数据库文件没有更新
解决方法:sudo updatedb
# 22、.bashrc文件内容
```bash
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth
# append to the history file, don't overwrite it
shopt -s histappend
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar
# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi
# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color|*-256color) color_prompt=yes;;
esac
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
else
color_prompt=
fi
fi
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
;;
*)
;;
esac
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi
# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
# Add an "alert" alias for long running commands. Use like so:
# sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
alias python=python3
source /opt/ros/noetic/setup.bash
source /home/mickey/APP/realsense_ros_catkin_ws/devel/setup.bash
source /home/mickey/APP/PX4-Autopilot/Tools/simulation/gazebo-classic/setup_gazebo.bash /home/mickey/APP/PX4-Autopilot /home/mickey/APP/PX4-Autopilot/build/px4_sitl_default
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/home/mickey/APP/PX4-Autopilot
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/home/mickey/APP/PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic
```
# 23、Ubuntu美化步骤
1. 浏览器中安装gnome-shell扩展
```plain
//安装 gnome-software
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install gnome-software
//安装Gnome-tweak-tool
sudo apt install gnome-tweaks
sudo apt-get install chrome-gnome-shell
sudo apt install gnome-shell-extensions gnome-shell-extension-manager
```
ubuntu22.04下安装的gnome-tweaks没有扩展管理选项,需要单独安装gnome-shell-extension-manager,但是gnome-shell-extension-manager无法使用Browse功能下载扩展。
Ubuntu20.04下可以安装gnome-tweak-tool,有扩展管理功能,无需安装gnome-shell-extension-manager。
2. 在下面网站中安装插件:
1. dash to dock
2. user themes
3. lockscreen background
4. brightness control using ddcutil
```bash
# 安装该插件之前要先安装ddcutil
sudo apt install ddcutil
# 运行检测
ddcutil environment
# 根据检测提示运行命令即可,映像中只加了组,其他的设置都没改过
```
[https://extensions.gnome.org/](https://extensions.gnome.org/)
3. 在下面网站中寻找主题
[Browse Latest | https://www.gnome-look.org/browse/](https://www.gnome-look.org/browse/)
用到的主题:Curors——Bibata Modern Ice
Full Icon Themes——Candy Icons
Grub Themes——Vimix
GTK Themes——Orchis
4. 常用操作
1. Alt+f2:重启gnome,若提示wayland下无法重启,则修改/etc/gdm/custom.conf 中**WaylandEnable=false**,可能你做某些设置会让这行代码被注释掉,这才会出现上述问题,所以将此行代码注释去除重启系统,应该就正常了。
2. gnome扩展文件夹:~/.local/share/gnome-shell/extensions/
参考:
1. 移除grub主题操作
[Ubuntu修改GRUB 主题_ubuntu grub主题-CSDN博客](https://blog.csdn.net/Shuimuxiaochao/article/details/129185418)
2. 登录界面壁纸设置
[ubuntu-gdm-set-background](https://github.com/PRATAP-KUMAR/ubuntu-gdm-set-background/?tab=readme-ov-file)
在设置登录界面壁纸出错后可以尝试如下解决方法:
Changes will be effective after a Reboot (CTRL+ALT+F1 may show the changes immediately)
If something went wrong, log on to tty and run the below command
$ sudo update-alternatives --quiet --set gdm-theme.gresource /usr/share/gnome-shell/theme/Yaru/gnome-shell-theme.gresource
# 24、windows10中vscode环境配置
1、g++ : 无法将“g++”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次
解决办法:
[Visual Studio Code 第一次运行C/C++的环境配置过程](https://zhuanlan.zhihu.com/p/335707213)
# 25、Ubuntu20.04.6问题
## 1、开机遇到Bluetooth hci0: Timeout waiting for suspend events
解决办法:
1. 运行以下命令,找到蓝牙模块的id,找Driver = btusb,可以看到ID为8087:0026
```bash
lsusb -vt
|__ Port 14: Dev 6, If 0, Class=Wireless, Driver=btusb, 12M
ID 8087:0026 Intel Corp.
|__ Port 14: Dev 6, If 1, Class=Wireless, Driver=btusb, 12M
ID 8087:0026 Intel Corp.
```
2. 创建udev规则禁用模块
```bash
sudo vim /etc/udev/rules.d/50-usb_power_save.rules
# 添加以下内容
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="8087", ATTR{idProduct}=="0026", ATTR{power/autosuspend}="-1"
```
3. 最后运行
```bash
sudo update-grub
```
## 2、win10和ubuntu时间同步
[解决Ubuntu(20.04)和Windows10双系统时间不同步问题_universal time 不对-CSDN博客](https://blog.csdn.net/X_T_S/article/details/110142773)
# 26、ubuntu python版本切换
[Ubuntu中查看安装的Python版本以及不同版本之间切换_ubuntu查看python版本-CSDN博客](https://blog.csdn.net/wokaowokaowokao12345/article/details/127095052)
# 27、d435i关闭红外激光
```bash
/camera/stereo_module/emitter_enabled: 0 #0为关闭,1为开启
```
# 28、ubuntu20.04.6安装px4、mavros、QGC
## px4安装
**一定要从源码安装**
```bash
# 克隆源码
git clone https://github.com/PX4/PX4-Autopilot.git --recursive
# 可以添加 -b 选项指定版本分支,即:
git clone -b v1.14.0 https://github.com/PX4/PX4-Autopilot.git --recursive
# 进入PX4-Autopilot文件夹,继续下载未下载完的组件
cd PX4-Autopilot/
git submodule update --init --recursive
# 执行ubuntu.sh脚本
sudo bash ./PX4-Autopilot/Tools/setup/ubuntu.sh
# 中间出错的话执行指令
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade Pillow
# 如果过程中有安装失败的地方,可以再用
sudo bash ./PX4-Autopilot/Tools/setup/ubuntu.sh --fix-missing
```
完成后重启系统,测试
```bash
cd cd PX4-Autopilot/
make px4_sitl_default gazebo
# 在同一个终端中输入
commander takeoff # 无人机起飞
commander land # 无人机降落
```
添加环境变量(记得更换成自己的路径)
```bash
source ~/PX4-Autopilot/Tools/simulation/gazebo-classic/setup_gazebo.bash ~/PX4-Autopilot ~/PX4-Autopilot/build/px4_sitl_default
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/PX4-Autopilot
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic
```
## mavros安装
```bash
sudo apt-get install ros-noetic-mavros ros-noetic-mavros-extras
```
运行以下命令进行测试
```bash
roslaunch mavros px4.launch
```
若出现报错:

运行
```bash
sudo /opt/ros/noetic/lib/mavros/install_geographiclib_datasets.sh
```
若还出现其他报错,则上网搜
如果有已经使用pip3 install 安装完的软件还提示找不到,则用pip3 install --user再装一遍
若出现FCU: DeviceError:serial:open: No such file or directory,是正常现象,已安装完成,可以忽略不管
### Mavros使用注意事项
在启动mavros时,一定要关闭QGC,否则会报错端口被占用,如下图:

## QGC安装
[QGC安装](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/getting_started/download_and_install.html)
# 29、删除多余内核
[Ubuntu删除多余内核](https://www.jianshu.com/p/f284bc90944f)
# 30、Alist
```bash
Alist 安装成功!
访问地址:http://YOUR_IP:5244/
配置文件路径:/opt/alist/data/config.json
---------如何获取密码?--------
先cd到alist所在目录:
cd /opt/alist
随机设置新密码:
./alist admin random
或者手动设置新密码:
./alist admin set NEW_PASSWORD
----------------------------
启动服务中
查看状态:systemctl status alist
启动服务:systemctl start alist
重启服务:systemctl restart alist
停止服务:systemctl stop alist
```
## 报错解决
1. INFO[2024-07-29 10:00:46] reading config file: C:\Users\HHX\AppData\Roaming\ci.nn.alist\config.json
FATA[2024-07-29 10:00:46] load config error: readObjectStart: expect { or n, but found , error found in #0 byte of ...||..., bigger context ...||...
[AD] Command finished with code 1 and signal null
解决方法:删除config文件即可
# 31、从终端启动应用并隐藏终端
[Linux/Ubuntu/Debian从控制台启动程序隐藏终端窗口_ubuntu隐藏终端命令行窗口-CSDN博客](https://blog.csdn.net/bestxx2009/article/details/136765845)
简单来说,使用nohup命令,结尾加个与号(&)
```bash
nohup &
```
# 32、typora
## 破解教程
ubuntu:[GitHub - Hit-Mickey/Yporaject: ubuntu typora破解](https://github.com/Hit-Mickey/Yporaject)
windows:
```bash
#自动配置相关文件
.\node_inject.exe
#序列号生成
.\license-gen.exe
```
## 配置文件
[typora偏好设置](https://preview-speedtest.mingqian.online/scattered_preview/typora_settings.html)
# 33、解决source多个工作空间覆盖的问题
[解决source多个ROS工作空间时的覆盖问题 | 所念皆星河](https://immortalqx.github.io/2021/07/17/ros-notes-3/)
参考上文中的方法二
# 34、chrome无法同步问题解决
1、本次遇到的问题时windows下chrome同步ubuntu下的chrome数据,但ubuntu下不能同步windows下的数据
在windows下的chrome中打开chrome://sync-internals,发现有数据不能同步,有error报错,解决方法:删除login data,之后再同步即可。

注:以上红色圈出来的部分不能同步是正常的。
# 35、UltraISO破解版下载
[【UltraISO】中文破解版-CSDN博客](https://blog.csdn.net/Asher117/article/details/93618082)
# 36、安装windows自带软件方法
[在Windows 11上安装新版本的Notepad(记事本) – 喜欢记有趣](https://www.01booknote.xyz/%E5%9C%A8windows-11%E4%B8%8A%E5%AE%89%E8%A3%85%E6%96%B0%E7%89%88%E6%9C%AC%E7%9A%84notepad%E8%AE%B0%E4%BA%8B%E6%9C%AC%EF%BC%89.html)
# 37、Ubuntu22.04卸载snap应用商店(24.04同样适用)
[Ubuntu禁用(彻底移除)Snap.html](https://openlist.speedtest.mingqian.online/@s/xIc4DRmK/Ubuntu22.04%E8%AE%BE%E7%BD%AE%E4%B8%8EWindows%E5%85%B1%E4%BA%AB%E6%96%87%E4%BB%B6%E5%A4%B9.html)
# 38、ubuntu查看线程数的命令
```bash
nproc
```
# 39、终端忽略大小写
## Ubuntu
```bash
echo 'set completion-ignore-case on' >> /etc/inputrc
```
## Mac
```bash
autoload -Uz compinit && compinit
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
```
# 40、ubuntu设置系统中英文
```bash
locale # check for UTF-8
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
locale # verify settings
```
中文只需要把上面的en_US替换为zh_CN
# 41、ubuntu下vscode ssh连接容器无法编辑文件
```bash
sudo chmod -R 777 <文件路径>
```
# 42、ubuntu设置登录界面在主屏幕上显示
```bash
sudo cp ~/.config/monitors.xml /var/lib/gdm3/.config
```
# 43、ubuntu22.04下压缩包中文乱码解决
安装unar
```bash
sudo apt install unar
```
# 44、终端走代理
## Ubuntu
```bash
利用proxychains在终端使用socks5代理
补充:
如果代理服务器需要登陆,这时可以直接把用户名和密码写进去
http_proxy=http://userName:password@proxyAddress:port
配置proxychains
编辑/etc/proxychains.conf,最下面有一行socks4 127.0.0.1 9050,把这一行注释掉,添加一行socks5 127.0.0.1 7897
测试
proxychains curl www.google.com
如果能看到一堆输出,说明设置成功,如果一直等待或者无法访问则代表设置失败。
使用
用命令行启动软件,在前面加上proxychains,如:
proxychains firefox
使用shadowsocks+proxychains代理打开新的firefox实现浏览器翻墙。
也可以通过输入proxychains bash建立一个新的shell,基于这个shell运行的所有命令都将使用代理。
```
## Windows
[proxychains for windows](https://github.com/shunf4/proxychains-windows)
安装步骤:
* 当我运行 sudo modprobe brcm 时,它说在 lib/modules 中找不到该模块下载压缩包,重命名其中的文件为proxychains
* 添加Path变量,值为解压后文件夹的路径
* 添加系统变量```PROXYCHAINS_CONF_FILE```,值为proxychains.conf文件路径
## Mac
```bash
brew install proxychains-ng
# 配置
cd /usr/local/etc
sudo vim proxychains.conf
# 完全关闭sip
# 重启mac,按住option,进入恢复模式
# 打开终端,输入命令
csrutil disable
# 检验是否关闭
csrutil status
# 输出System Integrity Protection status:disabled,则说明关闭成功
```
# 45、Azure-Kinect-DK安装
## ubuntu20.04
从百度网盘中下载Kinect.zip文件,里面已经包含了所需要的包,安装即可,安装完后从官方源码下载99-k4a.rules,运行以下命令:
```bash
sudo cp 99-k4a.rules /etc/udev/rules.d/
```
运行k4aviewer检验是否成功。
从官方源码下载Kinect_Ros,下载完后修改
```bash
sudo vim /usr/lib/cmake/k4abt/k4abtConfig.cmake
# 将1.3改为1.3.0,如下:
include(CMakeFindDependencyMacro)
find_dependency(k4a 1.3.0 REQUIRED)
# Add the targets file
include("${CMAKE_CURRENT_LIST_DIR}/k4abtTargets.cmake")
```
之后catkin_make编译即可,有未安装的包sudo apt install <包名>安装即可。
## Ubuntu22.04
[Index of /ubuntu/18.04/prod/pool/main/k/k4a-tools/](https://packages.microsoft.com/ubuntu/18.04/prod/pool/main/k/k4a-tools/)
从上面链接中下载k4a-tools1.4.2,安装。
[Index of /ubuntu/18.04/prod/pool/main/libk/](https://packages.microsoft.com/ubuntu/18.04/prod/pool/main/libk/)
从上面链接中下载libk4a1.4,libk4a1.4-dev,安装完后参考上方步骤将移动99-k4a.rules。
从官方源码下载Kinect_Ros Humble分支
```bash
rosdep install --from-paths src --ignore-src -r -y
colcon build
source install/setup.bash
ros2 launch Azure_Kinect_ROS_Driver driver.launch.py
```
## 官方网站
[GitHub - microsoft/Azure-Kinect-Sensor-SDK: A cross platform (Linux and Windows) user mode SDK to read data from your Azure Kinect device.](https://github.com/microsoft/Azure-Kinect-Sensor-SDK)
[GitHub - microsoft/Azure_Kinect_ROS_Driver at humble](https://github.com/microsoft/Azure_Kinect_ROS_Driver/tree/humble)
# 46、cmake编译问题重定义
## 解决方案
## 1、在头文件中添加下列代码
```cpp
#pragma once
```
## 2、可能是因为在头文件中定义了全局变量,应将全局变量移至head.cpp中,并在main.cpp中使用extern告诉编译器去其他文件中寻找全局变量,例
```cpp
//设定全局变量
int flag = 0;
int getoff = 1;
std::mutex mtx;
cv::Mat image;
hitcrt::camera::TimePoint RobotDemo::startTime;
hitcrt::camera::TimePoint RobotDemo::onGetTime;
```
```cpp
//声明全局变量在其他文件中寻找(即在head.cpp中寻找)
extern int flag;
extern int getoff;
extern std::mutex mtx;
extern cv::Mat image;
```
# 47、新开的线程不运行
(1)、可能是没写循环,新线程进去就直接结束
(2)、可能是上锁的位置不对,具体上锁的位置视情况而定
# 48、使用锁时遇到的问题:
**解决方案:只需在每次编译时用gcc的-l选项将pthread库链接一下就行了。**
```bash
g++ test.cpp -o test -lpthread
./test
```
# 49、ubuntu20.04中用cmake调用opencv和PCL
```plain
cmake_minimum_required(VERSION 3.16)
project(week7)
set (CMAKE_BUILD_TYPE "Debug")
find_package(OpenCV REQUIRED)
find_package(PCL 1.3 REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS} ${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
message(${OpenCV_INCLUDE_DIRS})
add_executable(main main.cpp)
target_link_libraries(main ${OpenCV_LIBS} dw ${PCL_LIBRARIES})
```
参考:[cmake调用opencv](https://blog.csdn.net/wphkadn/article/details/83064623)
# 50、ubuntu 20.04 vscode调试方法
## (1)、利用[backward-cpp](https://zhuanlan.zhihu.com/p/397148839)
## (2)、利用[gdb1](https://maifile.cn/dec/a81081274782@doc)
[LinuxGDB.pdf](https://www.yuque.com/attachments/yuque/0/2022/pdf/29754277/1666235580788-dec6638e-6b41-4649-8f3e-da5805dae5f5.pdf)
[gdb安装方法](https://blog.csdn.net/chengsi101/article/details/79424083)
[报错解决方案](https://stackoverflow.com/questions/70380547/gmp-is-missing-while-configuring-building-gdb-from-source)
## 若无法调试,可参考的launch.json配置文件
```plain
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/test",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
```
# 51、cmake编译pcl,boost顺序
```cmake
if (NOT PCL_FOUND)
find_package(PCL REQUIRED)
endif ()
# if (NOT Boost_FOUND)
find_package(Boost REQUIRED COMPONENTS system thread)
# endif ()
```
**先编译PCL,然后直接找Boost**
# 52、Ubuntu20.04开机自启脚本
[ubuntu开机自动打开终端并执行程序_ubuntu开机自启动程序_weijifen000的博客-CSDN博客](https://blog.csdn.net/weijifen000/article/details/88370085#:~:text=ubuntu%E5%BC%80%E6%9C%BA%E8%87%AA%E5%8A%A8%E6%89%93%E5%BC%80%E7%BB%88%E7%AB%AF%E5%B9%B6%E6%89%A7%E8%A1%8C%E7%A8%8B%E5%BA%8F%201%20Ctrl%2BAlt%2BT%20%E6%89%93%E5%BC%80%E5%91%BD%E4%BB%A4%E8%A1%8C%EF%BC%8C%E8%BE%93%E5%85%A5%20gedit%20~%2F.bashrc%20%EF%BC%88%E6%88%96%E8%80%85%E7%94%A8vi%E7%AD%89%E6%89%93%E5%BC%80%E4%B9%9F%E5%8F%AF%E4%BB%A5%EF%BC%89%EF%BC%8C%E6%89%93%E5%BC%80%20.bashrc,%EF%BC%8C%E7%82%B9%E5%87%BB%E2%80%9C%E6%B7%BB%E5%8A%A0%E2%80%9D%E3%80%82%206%20%E6%9C%80%E5%90%8E%EF%BC%8C%E5%A6%82%E6%9E%9C%E5%BC%80%E6%9C%BA%E4%B8%8D%E6%96%B9%E4%BE%BF%E8%BE%93%E5%85%A5%E5%AF%86%E7%A0%81%EF%BC%8C%E6%AF%94%E5%A6%82%E4%BD%BF%E7%94%A8%E5%B7%A5%E6%8E%A7%E6%9C%BA%E6%97%B6%EF%BC%8C%E5%8F%AF%E4%BB%A5%E8%AE%BE%E7%BD%AE%E4%B8%BA%E7%94%A8%E6%88%B7%E8%87%AA%E5%8A%A8%E7%99%BB%E5%BD%95%E3%80%82%20%E7%82%B9%E5%87%BBUbuntu%E6%9C%80%E5%8F%B3%E4%B8%8A%E8%A7%92%E7%9A%84%E8%AE%BE%E7%BD%AE%E6%8C%89%E9%92%AE%EF%BC%8C%E7%82%B9%E5%87%BB%20%E7%B3%BB%E7%BB%9F%E8%AE%BE%E7%BD%AE...%20...%207%20%E9%87%8D%E5%90%AF%E5%8D%B3%E5%8F%AF%E3%80%82)
[linux下用脚本实现:监控一个进程,不存在则将其启动。_rosekin的博客-CSDN博客](https://blog.csdn.net/rosekin/article/details/15341835?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3-15341835-blog-100101420.pc_relevant_aa2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3-15341835-blog-100101420.pc_relevant_aa2&utm_relevant_index=4)
# 53、系统重装
## windows
1. 制作无人值守应答文件,制作完后使用ultra iso软件将应答文件加入镜像
[GitHub - Hit-Mickey/unattend-generator: win系统应答文件制作](https://github.com/Hit-Mickey/unattend-generator)
2. 安装localsend,clash-verge-rev,挂梯子,安装软件
1. 单文件软件:百度网盘中的portable app
2. 7zip,everything,IDM,mocreak,mathtype,matlab,pot,QQ拼音,Texity,VLC,Zotero,百度云盘,万兴,微信,alist,QQ
3. 下载图片,设置桌面和锁屏背景
3. windows系统激活方法:
* [方法一](https://github.com/TGSAN/CMWTAT_Digital_Edition/issues/81):
右键单击开始按钮,然后选择 PowerShell 或终端(不是 CMD)。复制并粘贴下面的命令,然后按 Enter
```
irm https://massgrave.dev/get | iex
```
如果需要管理员权限,请允许
您将看到激活选项。按照屏幕上的说明进行操作。
* [win11专业版激活](https://www.orcy.net.cn/1802.html):
```basic
slmgr -ipk W269N-WFGWX-YVC9B-4J6C9-T83GX
slmgr -skms kms.0t.net.cn
slmgr -ato
```
## Ubuntu
### 卸载
[教你彻底卸载Ubuntu双系统,去污不残留-CSDN博客](https://blog.csdn.net/qq_42257666/article/details/120721561)
### 安装
**注意事项**
1. 安装时可以选择最小安装,没必要完整安装,好多东西都用不上
若最小安装,则不能勾选联网更新,否则安装会出错
2. 分区
1. 交换分区:设置为跟内存一样大—>主分区—>空间起始位置—>用于交换空间
2. boot:设置为1G—>逻辑分区—>空间起始位置—>ext4—> /boot
3. 根目录:根据自己需要设置大小(本次设置为100G)—>主分区—>空间起始位置—>ext4—> /
4. home:根据自己需要设置大小(本次设置为200G,也就是剩下的所有空间)—>逻辑分区—>空间起始位置—>ext4—> /home
3. 安装localsend,clash-verge-rev,挂梯子,安装软件
# 54、docker
## 前言
Unbuntu上最好安装docker.io,不要安装docker-desktop,不然会出一堆问题,
## 安装
1、apt方式(推荐)
添加 Docker 官方 apt 软件源
```bash
# 添加 Docker 官方 GPG 密钥:
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
-o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 将 Docker 软件源添加到 Apt 源列表:
sudo tee /etc/apt/sources.list.d/docker.sources < **注意**
>
> 安装完成后,验证 Docker 服务是否正在运行:
```bash
sudo systemctl status docker
```
如果 Docker 服务未运行,可以手动启动:
```bash
sudo systemctl start docker
```
3、验证 Docker 是否安装成功
运行 `hello-world` 测试镜像:
```bash
sudo docker run hello-world
```
该命令会:
1. 下载 Docker 测试镜像;
2. 使用该镜像创建并运行一个容器;
3. 输出 Docker 安装成功提示信息;
4. 容器运行结束后自动退出。
至此,Docker Engine 已成功安装并启动。
2、一键脚本
```bash
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
```
## 1、公钥
EB8AEEB597833377AA3AA3E9E7959D1C38CC11CD
## 2、中文教程
[前言 - Docker — 从入门到实践](https://yeasy.gitbook.io/docker_practice/)
## 3、完整删除docker步骤
```bash
# 查找docker的所有包
dpkg -l | grep docker
sudo apt-get purge --remove $docker的所有包
# 删除docker的相关配置及目录
sudo rm -rf /etc/systemd/system/docker.service.d
sudo rm -rf /var/lib/docker # 删除这个文件夹时可能会出错,现在文件管理器中找到这个文件再删除
sudo rm -rf .docker
# 确认docker是否删除
docker --version
```
## 4、docker配置
[docker源检测](https://github.com/docker-practice/docker-registry-cn-mirror-test/actions/workflows/ci.yaml)
```plain
sudo vim /etc/docker/daemon.json
```
添加如下内容:
```plain
{
"registry-mirrors": [
"https://dockerproxy.net"
],
"max-concurrent-downloads": 2,
"ipv6": true,
"fixed-cidr-v6": "fd00::/80",
"ip6tables": true,
"experimental": true
}
```
docker配置代理:
**创建或编辑 systemd 配置目录**
```
sudo mkdir -p /etc/systemd/system/docker.service.d
```
**创建代理配置文件**
```
sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf
```
写入以下内容(根据你的代理地址修改):
```
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:1080"
Environment="HTTPS_PROXY=http://127.0.0.1:1080"
Environment="NO_PROXY=localhost,127.0.0.1,.mydomain.com"
```
* `HTTP_PROXY`:HTTP 代理
* `HTTPS_PROXY`:HTTPS 代理
* `NO_PROXY`:不使用代理的地址或域名
添加完后,运行如下命令:
```plain
sudo systemctl daemon-reload
sudo systemctl restart docker*
```
## 5、docker命令
```bash
systemctl | grep docker # 列出所有docker的服务
sudo systemctl start docker # 启动docker
sudo systemctl restart docker # 重启docker
sudo usermod -aG docker ${USER} # docker添加用户
cat /etc/group #检查创建是否有效
# 建立容器
docker run -it --name (自定义容器名字) --network host (镜像名称) /bin/bash
run命令参数:
--device=/dev/tty* #添加串口
# 进入容器
1、docker attach ${容器名或容器id前4位} 或 (用exit退出容器时会停止容器运行)
2、docker exec -it ${容器名或者容器id前4位} bash (用exit退出容器室不会停止容器运行)
```
## 6、docker拉取指定镜像
[如何使用 docker pull 拉取指定架构的容器镜像_docker pull 指定镜像源-CSDN博客](https://blog.csdn.net/weixin_43403660/article/details/125974212)
## 7、docker导出本地镜像,容器
[Docker - 实现本地镜像的导出、导入(export、import、save、load)](https://www.hangge.com/blog/cache/detail_2411.html)
## 8、docker中创建ubuntu项目环境
从百度网盘中下载my_ubuntu.tar,使用以下命令构建
```bash
docker load < my_ubuntu.tar
docker run -it --gpus all -e XMODIFIRES -e NVIDIA_DRIVER_CAPABILITIES=all -e DISPLAY=$DISPLAY -e QT_X11_NO_MITSHM=1 -v /mnt/hogehoge:/mnt/hogehoge -v /tmp/.X11-unix:/tmp/.X11-unix --device=/dev/bus/usb --add-host hostname:127.0.0.1 --hostname hostname -u nvidia -w /home/nvidia --privileged --net host --name /bin/bash
```
其中注意在添加串口设备时要将设备连接在电脑上,否则添加了docker也不会访问。
参考:
[https://hub.docker.com/r/taichimojamoja/ubuntu_ros_opencv](https://hub.docker.com/r/taichimojamoja/ubuntu_ros_opencv)
其中opencv版本为4.2.0,eigen版本为3.3.7。
## 9、不同容器间网络通信
1. 创建网络:```docker network create -d bridge mynet```
2. 配置docker-compose.yml
```yam
# docker-compose1.yml
version: "3"
services:
redis:
image: redis:5.0.3
container_name: redis
networks:
- default
- mynet
mysql:
image: mysql:5.7
container_name: mysql
networks:
- default
- mynet
networks:
mynet:
external: true
# 末尾要空出一行
# docker-compose2.yml
version: "3"
services:
php:
image: php:7.1
container_name: php
networks:
- default
- mynet
external_links:
- redis
- mysql
networks:
mynet:
external: true
# 末尾要空出一行
```
## docker报错解决
### (1)docker中运行vins-fusion
[在docker中运行vins-fusion-CSDN博客](https://blog.csdn.net/weixin_42990464/article/details/136202638)
1. docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].
情况一:用nvidia-smi查看,如果没有,则安装对应的包即可
情况二:未安装nvidia-container-toolkit,用如下命令安装:
```bash
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get udpate
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
```
2. qt.qpa.screen: QXcbConnection: Could not connect to display unix:0 Could not connect to any X display.
```bash
xhost +local:docker
```
### (2)docker每次重启后都会提示dial unix /var/run/docker.sock: connect: permission denied
```bash
sudo usermod -a -G docker $USER
# 修改docker.socket配置
sudo vim /usr/lib/systemd/system/docker.socket
```
可以看到以下内容:

将其中的SocketMode改为0666,之后
```bash
sudo systemctl daemon-reload
sudo systemctl restart docker*
```
### (3)docker中不支持中文编码的问题,报错:UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters
编写Dockerfile文件,重新构建一个镜像,Dockerfile内容如下:
```plain
FROM
RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak
# 使用root权限
USER root
RUN apt update
RUN apt-get install -y locales
RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
#结束root权限
USER nobody
```
其中不能用zh_CN.UTF-8,不然docker编译的过程会报错,具体原因也不太清楚
### (4)docker run 报错:cannot execute binary file
[docker使用遇到的问题_docker cannot execute binary file-CSDN博客](https://blog.csdn.net/jq656021898/article/details/109074651)
# 55、word技巧
## 1、word中latex和mathtype公式互化
输入$公式$,然后用快捷键Alt+\转化
## 2、公式居中,标号居右
1. 在这台电脑上,19.33字符居中,38.75字符居右
2. 选中需要设置的行,右键单击—>选择段落—>选择制表符,进行设置

3. 最后用tab键排版
## 3、公式和标号不在同一行
右键段落—>中文版式—>文本对齐方式:居中
## 4、word中添加目录
1. 手动设置标题
选中需要设置标题的行—>右键段落—>大纲级别:根据需要设置
2. 顶部彩蛋—>引用—>目录—>自动目录
## 5、word删除空白页
1. 当上一页中有插入分页符或分节符时,通常就会多出一个空白空白页且删不掉。
word上方工具栏选择开始—>段落—>显示编辑标记,把隐藏的分页符或分节符显示出来。
如果是分节符,将鼠标光标定位于分节符前,按Delete键好可删掉空白页就没了;
如果是分页符,在空白页顶部按Backspace键(一次不行就按两次),空白页就没了。

2. 当上一页中表格、文本框、图形、图片等对象占了一整页时,通常就会多出一行空白段落(空白页)且删不掉。
将鼠标光标定位到空白页中,右键-段落,设置"行距"为"固定值",并将"值"设置为"1磅",点击"确定"后,就会发现多余的空白页自动消失啦。
## 6、参考文献交叉引用
[【Word】小技巧14:还在纠结参考文献的引用吗](https://zhuanlan.zhihu.com/p/31954914)
对于参考文献连续饮用的,如[1-3],修改域代码,然后更新
```bash
编辑代码,分别加入字符【 \#"[0"】和【\#"0]"】
[1] 的域代码变为【{REF _Ref444874357 \r \h\#"[0"}】
[3] 的域代码变为【{REF _Ref444874357 \r \h\#"0]"}】
```
# 56、git
一次性添加多个文件
```bash
git add . #添加被修改和新建的文件,不包括被删除的文件
git add -u #添加所有被修改和被删除的文件,不包括新建的文件
git add -A #添加所有文件
git add --all #添加所有文件
```
报错解决:
1、error: invalid object 100644 13da9eeff5a9150cf2135aaed4d2e337f97b8114 for 'spec/routing/splits_routing_spec.rb'
error: Error building trees
解决方法:git hash-object -w spec/routing/splits_routing_spec.rb
注意替换为自己的文件
2、解决windows和ubuntu跨系统协作时符号问题
| **配置值** | **目的和策略** | **推荐使用系统** | **命令** |
| :---------: | ------------------------------------------------------------ | :---------------: | :---------------------------------------- |
| **`true`** | **双向转换**:检出时转换为 CRLF (Windows 风格),提交时转换为 LF (Unix 风格)。 | **Windows** | `git config --global core.autocrlf true` |
| **`input`** | **单向转换**:提交时将 CRLF 转换为 LF,但检出时不进行转换,保留 LF。 | **Linux / macOS** | `git config --global core.autocrlf input` |
| false | 为了让 Git 正确处理中文路径。 | 所有系统 | git config --global core.quotepath false |
# 57、jupyter
推荐使用miniforge3创建虚拟环境使用jupyter lab
## 1、miniforge3使用
常用命令:
```bash
conda init
conda init --reverse --all
conda config --set auto_activate_base false #设置终端开启没有(base)
conda create -n <虚拟环境名字> <安装的依赖>
conda activate <虚环环境名字> #启动虚拟环境
conda deactivate #退出虚拟环境
conda list #查看安装的依赖
conda remove -n <虚拟环境名字> --all #移除环境
conda config --set auto_activate_base false
```
配置jupyter内核:
```bash
pip install ipykernel
python -m ipykernel install --user --name <当前虚拟环境名字> --display-name
```
启动jupyter lab,选择相应的内核即可。
jupyter删除内核:
```bash
jupyter kernelspec list #查看内核
jupyter kernelspec remove
```
jupyter中查看python版本:
```python
import sys
print(sys.version)
print(sys.executable)
```
conda环境打包:
```bash
pip freeze > requirements.txt
pip install -r requirements.txt
conda list -e > requirements.txt
conda install --yes --file requirements.txt
conda env export > environment.yml
conda env create -f environment.yml
conda pack -n myenv -o myenv.tar.gz
mkdir -p ~/environments/myenv
tar -xzf myenv.tar.gz -C ~/environments/myenv
source ~/environments/myenv/bin/activate
```
[conda终端命令补全](https://github.com/tartansandal/conda-bash-completion):
```bash
conda install -c conda-forge conda-bash-completion
在~/.bashrc中添加以下内容:
CONDA_ROOT=~/anaconda3 # <- set to your Anaconda/Miniconda installation directory
if [[ -r $CONDA_ROOT/etc/profile.d/bash_completion.sh ]]; then
source $CONDA_ROOT/etc/profile.d/bash_completion.sh
else
echo "WARNING: could not find conda-bash-completion setup script"
fi
source ~/.bashrc
```
## 2、ubuntu20.04中安装jupyter notebook扩展
使用以下两行代码:
`pip3 install jupyter_contrib_nbextensions`
`jupyter-contrib-nbextension install --user`
安装完后视图:

## 3、JupyterNotebook安装c++内核
通过miniconda安装
step1:安装miniconda([官网](https://docs.conda.io/en/latest/miniconda.html))
下载好后使用命令`bash (文件名).sh`安装
参考:miniconda常用命令:
[Miniconda 安装及使用 - 掘金](https://juejin.cn/post/7078965942968909854)
step2:安装xues-cling
`conda install -c conda-forge xeus-cling`
step3:注册内核
```bash
jupyter-kernelspec install --user xcpp11
jupyter-kernelspec install --user xcpp14
jupyter-kernelspec install --user xcpp17
```
完成安装
---
在jupyter notebook中使用c++效果不是很好,因为c++不是解释性语言,需要联系上下文程序,有些时候无法运行
## 4、安装jupyter lsp
```bash
pip install jupyterlab-lsp==5.1.0
pip install 'python-lsp-server[all]'
```
jupyter lab中进行配置:
1. 在高级设置中添加```{"continuousHinting": true}```

2. 修改下图选项为```true```

* jupyter lsp卸载
```bash
pip uninstall jupyterlab-lsp
pip uninstall jupyter-lsp
pip uninstall 'python-lsp-server[all]'
```
# 59、chrome限制的端口号
1: // tcpmux 7: // echo 9: // discard 11: // systat 13: // daytime 15: // netstat 17: // qotd 19: // chargen
20: // ftp data 21: // ftp access 22: // ssh 23: // telnet 25: // smtp 37: // time 42: // name 43: // nicname
53: // domain 77: // priv-rjs 79: // finger 87: // ttylink 95: // supdup 101: // hostriame 102: // iso-tsap
103: // gppitnp 104: // acr-nema 109: // pop2 110: // pop3 111: // sunrpc 113: // auth 115: // sftp
117: // uucp-path 119: // nntp 123: // NTP 135: // loc-srv /epmap 139: // netbios 143: // imap2 179: // BGP
389: // ldap 465: // smtp+ssl 512: // print / exec 513: // login 514: // shell 515: // printer 526: // tempo
530: // courier 531: // chat 532: // netnews 540: // uucp 556: // remotefs 563: // nntp+ssl 587: // stmp? 601: // ??
636: // ldap+ssl 993: // ldap+ssl 995: // pop3+ssl 2049: // nfs 3659: // apple-sasl / PasswordServer 4045: // lockd
6000: // X11 6665: // Alternate IRC [Apple addition] 6666: // Alternate IRC [Apple addition] 6667: // Standard IRC [Apple addition]
6668: // Alternate IRC [Apple addition] 6669: // Alternate IRC [Apple addition
# 60、pip命令补全
```bash
pip completion --bash >> ~/.bash_profile
然后将.bash_profile中的内容复制粘贴到~/.bashrc中,并删除.bash_profile文件,否则ssh登录环境会报错
```
# 61、Ubuntu固定ip地址
1. ```ip a```查询本机ip地址
本机输出如图:

应该很好判断本机网卡和ip地址
2. 进入/etc/netplan位置,查看电脑上的网络配置文件,把本机网络配置文件复制一份备用,然后```sudo gedit /etc/netplan/01-network-manager-all.yaml```编辑,记得后面的文件名更换成本机电脑上的网络配置文件,编辑内容如下:
````
# Let NetworkManager manage all devices on this system
network:
ethernets:
enp2s0:
addresses: [192.168.30.249/24] #ip地址加掩码
dhcp4: no
optional: true
routes:
- to: default
via: 192.168.30.1 #网关
nameservers:
addresses: [192.168.30.1] #跟网关一样
version: 2
````
查看本机网关和dns地址的方法:
```bash
traceroute www.baidu.com 100
# 第一行就是自己的网关
# 查看dns
nslookup www.baidu.com
```
3. 修改NetworkManager.conf
```bash
sudo gedit /etc/NetworkManager/NetworkManager.conf
将magaged=false改为managed=true
```
实测需要修改这一项,ip地址会永远固定下来,不改的话ip地址过一段时间又会变
4. 重启本机网络服务
```bash
sudo netplan apply
sudo systemctl restart systemd-networkd
sudo systemctl restart NetworkManager
```
**报错解决**
* WARNING **: 10:14:11.814: Permissions for /etc/netplan/00-installer-config.yaml are too open. Netplan configuration should NOT be accessible by others.
```sudo chmod 600 /etc/netplan/01-network-manager-all.yaml```
# 62、解决pip开启代理后无法使用
1. pip换源设置方法
```pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple```
2. 在系统的代理服务器里面添加:

以清华源为例,添加pypi.tuna.tsinghua.edu.cn,用```;```作为分隔
# 63、git diff提示filemode发生改变
```git config --global core.filemode false```
[参考文档](https://blog.csdn.net/lxw1844912514/article/details/103418431)
# 64、pip清除缓存命令
```bash
pip cache info #查看缓存信息
pip cache list #查看缓存路径
pip cache dir #查看缓存路径
pip cache purge #清除缓存
```
# 66、开机自启
## windows
1. 使用bat脚本批量自启的优点在于可以设置启动顺序
```bat
:: @echo off可以关闭pwd路径与指令显示
@echo off
chcp 65001 >nul
:: 恢复桌面布局
:: timeout /t 1
start /b "" "C:\APP\Portable_App\ReIcon\恢复(R) - 谦谦的大桌面"
echo 恢复桌面布局启动完成 .
:: 启动Everything
timeout /t 1
C:\APP\Portable_App\nircmd-x64\nircmd.exe exec hide C:\APP\Everything\Everything.exe
echo Everything启动完成 .
:: 启动dopus
timeout /t 1
start /b "" "C:\APP\Portable_App\Directory Opus\Directory Opus (启动).lnk"
echo dopus启动完成 .
:: 拨号连接
timeout /t 1
rasdial Net_in 24B904015 200184LMQ
echo 网络连接完成 .
timeout /t 10
:: 启动ddns-go
:: timeout /t 1
:: start /b "" "C:\APP\ddns-go_6.8.1_windows_x86_64\ddns-go.exe"
:: echo ddns-go服务启动
:: 启动clash
timeout /t 1
start /b "" "C:\APP\Clash Verge\clash-verge.exe"
echo clash启动完成 .
:: 重启easytier服务
timeout /t 1
nssm restart easytier
echo easytier 服务重启完成。
:: 启动TranslucentTB
timeout /t 1
start /b "" "C:\APP\Portable_App\TranslucentTB\TranslucentTB.exe"
echo TranslucentTB启动完成 .
:: 启动AutoHide
timeout /t 1
start /b "" "C:\APP\Portable_App\AutoHideDesktopIcons.exe"
echo AutoHide启动完成 .
:: 启动twinkle-tray
timeout /t 1
start /b "" "C:\Users\Mickey\AppData\Local\Programs\twinkle-tray\Twinkle Tray.exe"
echo twinkle-tray启动完成 .
:: 启动coretemp
timeout /t 1
start /b "" "C:\APP\Core Temp\Core Temp.exe"
echo coretemp启动完成 .
:: 启动Snipaste
:: timeout /t 1
:: start /b "" "C:\APP\Portable_App\Snipaste\Snipaste.exe"
:: echo Snipaste启动完成 .
:: 启动Pixpin
timeout /t 1
start /b "" "C:\APP\Portable_App\PixPin\PixPin.exe"
echo Pixpin启动完成
:: 启动zerotier
:: timeout /t 1
:: start /b "" "C:\Program Files (x86)\ZeroTier\One\zerotier_desktop_ui.exe"
:: echo Zerotier启动完成 .
:: 启动Resilio Sync
timeout /t 1
C:\APP\Portable_App\nircmd-x64\nircmd.exe exec hide C:\Users\Mickey\AppData\Roaming\Resilio Sync\Resilio Sync.exe
echo Resilio Sync启动完成 .
:: 启动Rustdesk
timeout /t 1
C:\APP\Portable_App\nircmd-x64\nircmd.exe exec hide C:\APP\RustDesk\rustdesk.exe
echo Rustdesk 完成。
:: 启动mountaindock
:: timeout /t 5
:: C:\APP\Portable_App\nircmd-x64\nircmd.exe exec hide C:\Program Files\WindowsApps\io.mountainduck_5.0.4.28064_x64__nx15cxr8682sp\Mountain Duck.exe
:: echo mountain dock启动完成
:: 启动watch_clash_config
:: timeout /t 30
:: powershell -File "C:\APP\Portable_App\watch_clash_config.ps1"
:: echo watch_clash_config启动完成 .
:: 启动Alist
:: cd "C:\APP\Portable_App\Alist"
:: alist.exe server
:: echo Alist启动完成
:: 启动RaiDrive
:: timeout /t 1
:: start /b "" "C:\APP\RaiDrive\RaiDrive.exe"
:: echo RaiDrive启动完成
:: 自动挂杂sftp
:: timeout /t 1
:: C:\APP\Portable_App\nircmd-x64\nircmd.exe exec hide C:\APP\Portable_App\rclone-v1.72.0\mount_nas.bat
:: 自动加载autohotkey脚本
timeout /t 1
start /b "" "C:\APP\Portable_App\number.exe"
exit
```
* /b参数:让脚本执行时不用打开多个窗口
* "":双引号作用是允许脚本可以执行空格和中文路径
* /min参数:最小化启动程序,最好是在程序自身有静默启动的功能时使用,否则最小化后程序界面可能打不开,例如resilio sync
* 为了让终端窗口中文不出现乱码,将bat文件另存为ANSI编码格式
**2025.4.17更新:使用Nircmd可以更方便地设置程序启动时是否隐藏窗口**
Nircmd官方下载链接:
nircmd是一个功能很丰富的命令行工具,其`exec`子命令可调用其它程序,并可指定以最大窗口、最小窗口、隐藏窗口的方式运行。例如:
```powershell
# 运行 E:\app\rdesk\rdesk.exe 并隐藏窗口,
# 同时为rdesk指定了选项-c和参数config.json
.\nircmd.exe exec hide E:\app\rdesk\rdesk.exe -c E:\app\rdesk\config.json
# 最小窗口运行程序
# .\nircmd.exec exec min E:\app\rdesk\rdesk.exe -c E:\app\rdesk\config.json
# 最大窗口运行程序
# .\nircmd.exec exec max E:\app\rdesk\rdesk.exe -c E:\app\rdesk\config.json
```
如果要运行的程序需要以管理员权限运行,则使用如下方式:
```powershell
.\nircmd.exe elevatecmd exec hide YOUR-CMD
```
更改后的自启动脚本(部分示例):
```bat
:: 启动Resilio Sync
timeout /t 1
C:\APP\Portable_App\nircmd-x64\nircmd.exe exec hide C:\Users\Mickey\AppData\Roaming\Resilio Sync\Resilio Sync.exe
echo Resilio Sync启动完成 .
```
参考链接:[windows隐藏程序运行窗口.html](https://openlist.speedtest.mingqian.online/@s/xIc4DRmK/windows%E9%9A%90%E8%97%8F%E7%A8%8B%E5%BA%8F%E8%BF%90%E8%A1%8C%E7%AA%97%E5%8F%A3.html)
1. 使用vbs脚本静默执行bat脚本
```vbs
Dim ws
Set ws=WScript.CreateObject("WScript.Shell")
ws.Run "C:\APP\Portable_App\startup.bat /start",0
Wscript.quit
```
记得将bat脚本路径进行替换
win+r,输入shell:startup打开,将vbs脚本移动到该文件夹
这种实现开机自启的好处在于可以自定义启动顺序,并且方便进行开机启动项的管理。
[参考文档](https://blog.csdn.net/NineWaited/article/details/128758263)
## Mac
1. **使用自带的automator(自动操作)软件完成**
2. **打开“自动操作”软件**

3. **创建“应用程序”**

4. **选择“运行Shell脚本”**
路径:资源库->实用工具->运行Shell脚本;
设置开机执行命令:

5. **点击“运行”查看运行结果**
首次“运行”命令成功

6. **保存程序**
如上图标注,一定不要点叉,直接保存就行
通过快捷键:command+s 保存为程序,保存到应用程序
7. **打开系统设置,搜索登录项,添加应用程序即可**

# 67、nodejs安装
1. nvm安装
```bash
# installs nvm (Node Version Manager)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
## 终端输出
=> nvm source string already in /home/mickey/.bashrc
=> bash_completion source string already in /home/mickey/.bashrc
=> Close and reopen your terminal to start using nvm or run the following to use it now:
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
# download and install Node.js (you may need to restart the terminal)
## 终端输出
nvm install 22
# verifies the right Node.js version is in the environment
node -v # should print `v22.12.0`
# verifies the right npm version is in the environment
npm -v # should print `10.9.0`
```
# 68、chrome停止更新
* windows
* 关闭右上角更新提示
在Google Chrome浏览器的快捷方式,右键选择“属性”,在目标一栏中追加代码```--disable-background-networking```(注意“--”前如果没有空格则留一个空格,如果有则忽略),点击确定保存,再打开就不会弹出提示。
更多设置参考[禁止Chrome弹出无法更新的提示窗.html](https://openlist.speedtest.mingqian.online/@s/xIc4DRmK/%E7%A6%81%E6%AD%A2Chrome%E5%BC%B9%E5%87%BA%E6%97%A0%E6%B3%95%E6%9B%B4%E6%96%B0%E7%9A%84%E6%8F%90%E7%A4%BA%E7%AA%97.html)
* 利用BC uninstaller停止google chrome更新服务

* Ubuntu
使用```wget https://mirror.cs.uchicago.edu/google-chrome/pool/main/g/google-chrome-stable/google-chrome-stable_120.0.6099.224-1_amd64.deb```下载安装包,该安装包可以禁用HTTPS Upgrade,同时可以使用搜狗输入法
1. 删除软件源列表里的chrome更新源,具体在```/etc/apt/sources.list.d```中
2. 使用以下命令在APT源中禁止chrome更新
```sudo apt-mark hold google-chrome-stable```
3. 第 1 步:停用 Chrome 浏览器更新
如要阻止 Chrome 浏览器自动更新,请执行下列操作之一:
* 在安装 Chrome 浏览器之前先创建一个空白存储区:
`$ sudo touch /etc/default/google-chrome`
* 将以下代码行添加到 **/etc/default/google-chrome**:
`repo_add_once=false`
第 2 步:停用 Chrome 浏览器组件更新(可选)
*仅适用于 Chrome 浏览器组件*
即使您停用 Chrome 浏览器的自动更新功能,浏览器组件也不会停止自动更新。这些组件包括 Widevine DRM(适用于加密媒体)和 Chrome 更新程序恢复组件。如要阻止这些组件更新,请停用 Chrome [ComponentUpdatesEnabled](https://cloud.google.com/docs/chrome-enterprise/policies/?policy=ComponentUpdatesEnabled) 政策。
使用您的首选 JSON 文件编辑器:
1. 在 **/etc/opt/chrome/policies/managed** 文件夹中创建一个 JSON 文件,并将其命名为 **component_update.json**。
2. 在 JSON 文件中添加以下设置以停用组件更新:
```json
{
"ComponentUpdatesEnabled": "false"
}
3. 为用户部署更新。
完成以上步骤后,会停止chrome的自动更新,并且浏览器中不会出现更新提示。
# 69、远程桌面控制
## sunshine+moonlight
通过zerotier组网后,连接仍不稳定,作为备用方案
## rustdesk
各端口作用:
21114 (TCP): 用于网页控制台,仅在 Pro 版本中可用
Pro版本功能,略过
#### 21115 (TCP): 用于 NAT 类型测试
RustDesk 客户端要想做到**P2P直连**,必须知道自己是否能被外网访问。如果两边都是对称 NAT,直连基本没戏,只能走中继 (hbbr)。所以连接前要测试 NAT 类型。
RustDesk 客户端在启动时,会尝试通过 hbbs 的 21115/TCP 端口:
1. **探测公网可见 IP 和端口** 客户端向 hbbs 发送请求,hbbs 看到的来源 IP/端口可能和客户端自己认为的不一样。这样能识别 NAT 是否改写了端口。
2. **区分 NAT 类型**
* **开放 / Full Cone NAT** → 直连成功率很高。
* **受限锥形 (Restricted Cone NAT)** → 大部分情况下能打洞成功。
* **端口受限 (Port-Restricted Cone NAT)** → 打洞更难。
* **对称 NAT (Symmetric NAT)** → 几乎无法 P2P,只能走中继 (21117)。
3. **决定连接策略**
* 如果 NAT 类型“友好”,RustDesk 就会优先尝试 P2P。
* 如果 NAT 类型“不友好”,RustDesk 会直接转向中继 (21117)。
21115 端口的作用就是让 hbbs 充当一个“探测点”,帮客户端确认自己处于哪种 NAT 类型,从而决定能否直连还是必须用中继。
#### 21116/UDP 用于 ID 注册和心跳服务
ID 注册:
* 当客户端启动时,它会随机生成一个`ID`。
* 客户端通过`21116/UDP`把自己的信息(ID、公网 IP、端口、NAT 类型等)注册到hbbs(ID server)。
* hbbs 维护一个`ID → 节点地址表`,用来让其他客户端能够找到当前的客户端。
心跳服务:
* 客户端会定期通过UDP包向 hbbs 发“心跳”。
* hbbs依靠心跳来:
* 确认客户端是否在线。
* 刷新客户端的公网地址和端口(因为NAT映射可能过期)。
* 保持NAT映射存活(UDP打洞需要映射一直有效)。
#### 21116/TCP 用于 TCP 打洞和连接服务
* 当双方 NAT 情况允许时,执行TCP 打洞
* 如果 UDP 不可达,尝试建立 TCP 通道
* 在必要时,作为连接控制和数据传输的备用通道
#### 21117/TCP:中继服务(Relay)
* 当客户端之间"无法直接 P2P 连接"(例如双方都在对称 NAT 或防火墙阻挡 UDP/TCP 打洞)时,RustDesk 会使用 中继服务器 (hbbr)转发流量。
* ```
21117/TCP
```
就是中继服务监听的端口,负责:
* 接收客户端发来的数据。
* 将数据转发给目标客户端。
可以理解为:当直连失败时,所有流量都会通过`21117/TCP`“绕道”
#### 21118/TCP & 21119/TCP:支持网页客户端
* hbbs - 21118/TCP
* hbbr - 21119/TCP
RustDesk 除了桌面客户端外,还有网页端:
* 提供 **HTTP/HTTPS 或 WebSocket 通道**,让网页客户端能连接到 RustDesk 服务。
* 转发控制命令和远程桌面数据,类似桌面客户端的功能。
在实验室ubuntu电脑上部署rustdesk server,通过zerotier组网后连接较稳定,可通过该方法远程连接。
### 安装方法
根据需要自行将命令切换为root
下载编译好的文件
[https://github.com/rustdesk/rustdesk-server/releasesgithub.com/rustdesk/rustdesk-server/releases](https://github.com/rustdesk/rustdesk-server/releases)
链接:
解压缩
```text
unzip rustdesk-server-linux-amd64.zip
```
移动文件
```text
mv rustdesk-server-linux-amd64/amd64 /home/
mv amd64/ rustdesk_server/
```
赋予可执行权限
```text
chmod +x hbbs
chmod +x hbbr
```
配置Service服务
```text
vim /etc/systemd/system/hbbs.service
```
内容如下
```text
[Unit]
Description=Rust Desk Service
After=network.target
[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
WorkingDirectory=/home/rustdesk_server
#-r用于指定网卡IP(适用多网卡),-k参数用于强制校验客户端公钥,用于避免未授权的使用
ExecStart=/home/rustdesk_server/hbbs -r 0.0.0.0 -p 21116 -k _
[Install]
WantedBy=multi-user.target
```
```text
vim /etc/systemd/system/hbbr.service
```
内容如下
```text
[Unit]
Description=Rust Desk Service
After=network.target
[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
WorkingDirectory=/home/rustdesk_server
#-k参数用于强制校验客户端公钥,用于避免未授权的使用
ExecStart=/home/rustdesk_server/hbbr -p 21117 -k _
[Install]
WantedBy=multi-user.target
```
重载并启动服务
```text
systemctl reload
systemctl start hbbs
systemctl start hbbr
```
查看服务状态
```text
systemctl status hbbs
systemctl status hbbr
```

key就是/home/rustdesk_server文件夹运行后出现的id_ed25519.pub里的内容
```text
cat id_ed25519.pub
```
获取
ID服务器和中继服务器只需填写IP,端口RustDesk会自动推导(如果没有特别设定)
注:中继服务器按官方文档的说法也无需填写,但在我的使用中,如果不填写,安卓无法远控PC,提示是无法找到中继服务器

其中的hbbr服务和hbbs服务配置好后通过以下命令设置为开机自启:
```bash
sudo systemctl enable hbbr.service
sudo systemctl enable hbbs.service
# 防火墙端口放行
# 可以放行的最小端口:21115:21117/tcp,21116/udp
sudo ufw allow 21114:21119/tcp
sudo ufw allow 21116/udp
```
## 客户端配置
在 **ID Server** 输入框中输入 `hbbs` 主机或 IP 地址(本地端 + 远程端)。另外两个地址可以留空,RustDesk 会自动推断(如无特殊设置),Relay Server 指的是 `hbbr` (端口 21117)。
现有的rustdesk服务配置:
* ip:rustdesk.speedtest.mingqian.online
key:9awg+DT4hXiyoTSmzLhOOnnGpmSmEsuoWr7XRVhTTZ4=
---
* ip:10.2.1.1
key:tSim+bSGkzpLeLFtabgpygGY5jFN229UlZBIVKI2cCA=
* ip:mingqian.space
key:CxE3+lVugrcuuvGpyEI2LN7hoyuYvcEZ6Zpu2ZUbej4=
* ip:172.25.0.3
key:VZfESgD4oDdJpJoJfrZVmlXmpJFPfcp71+5UwjTpmjQ=
* ip:10.1.1.2
key:fWpUAPIymD9GNh6svhyKoSu2xpsU99Fy86bL3IxIr88=
* ip:10.1.1.1
* tSim+bSGkzpLeLFtabgpygGY5jFN229UlZBIVKI2cCA=
*由于实验室电脑没有ipv6,所以用zerotier组网的ip地址访问更流畅*
## 发现了新大陆
无意中发现的,可以在rustdesk 安全选项中开启允许ip直接访问,如下图,然后设置相应的端口好号,就可以通过ip直连访问,速度快到飞起,延迟在1ms左右

没办法,rustdesk自己的打洞服务太差劲,使用zerotier打洞成功后,通过zerotier的虚拟ip地址直连访问速度快到飞起,美中不足的是会显示非加密直连,有个红色的叉叉图标,有点丑,同时不会显示服务器的在线状态,不过问题不大,可以通过中继服务器连接的选项来查看,如下图,绿色表示在线,橙色表示离线,但实际是在线的。

各设备ip地址:
mickey-server:10.2.1.2:8002
dell:10.2.1.3:8003
实验室ubuntu:10.2.1.4:8004
实验室4080服务器:10.2.1.5:8005
---
各设备id:
mickey-mingfan:1 250 692 094
dell:mickey-dell
实验室ubuntu:1638658645
4080服务器:374264127
密码统一为:lmq666CQM,YSZGAYRty@rustdesk
rustdesk客户端在ubuntu上安装好后默认是开机自启的,系统已经把服务配好
# 70、Ubuntu ufw防火墙
```bash
sudo ufw enable/disable
sudo ufw allow 端口
sudo ufw delete allow 端口
sudo ufw allow from
```
参考资料:
# 71、Windows防火墙规则添加
参考:
# 72、Window设置笔记本合盖后不发热
**不一定有用,只能说试试**
win本合盖发热问题解决方法
一,先拔掉充电器,再合盖
先拔充电器,再合盖!!
这一步是最简单最方便的,而且可以解决大多数问题。
二,将电脑调整为休眠模式
注意!!
在某些电脑当中,休眠模式是禁用的,虽然可以通过命令提示符强行打开休眠模式,但是不建议这样做。因为强行打开休眠模式会占用非常多的硬盘空间,同时也可能会带来一些兼容性的问题。
按win+R键,输入cmd,然后按回车,打开命令提示符。
通过powercfg /a 命令可以查询你的电脑支持的睡眠状态
假如你的电脑是允许休眠模式的,那就这样做:
1,打开电源选项
在Windows任务栏的搜索框中输入“电源选项”,然后点击选择电源按钮的功能。
2,修改电源按钮设置
在定义电源按钮和开启密码保护页面,点击更改当前不可用的设置。
滚动到下方的关闭电源按钮的设置,然后勾选休眠选项(如果休眠模式已经启用)。
3,保存更改
确认更改后,点击保存更改。
如果休眠模式没有显示,则可以通过以下步骤启用:
按 win+x 或右键单击“开始”按钮,选择“终端 (管理员)”或“命令提示符 (管理员)”——注意,一定得是管理员模式,常规用win+R然后输入cmd的方法不行。
输入以下命令并按回车:powercfg /hibernate on
重新启动计算机,确保休眠模式被启用。
三,手动关闭某些外设的唤醒功能
禁用设备的唤醒功能
注意!!
在关闭了以下唤醒功能后,你的电脑就无法通过按鼠标或者按键盘直接唤醒了,必须点击电源键,这可能会带来一些使用上的繁琐。此外,并不是所有的设备都需要关闭,大家可以酌情选择,比如只关闭鼠标或者键盘的。
总之方法都在下面。
另:在我们的实际测试当中,USB设备的唤醒功能并不影响电脑发热问题,所以这里就没有提。
1,打开设备管理器
在任务栏搜索框中输入“设备管理器”,点击设备管理器。
2,查找相关外设
在设备管理器中,找到你怀疑会唤醒电源的外设。常见的外设包括:
鼠标和键盘:展开**“鼠标和其他指针设备”**,找到你使用的鼠标设备。
网络适配器:展开**“网络适配器”**,找到你使用的网络适配器(尤其是Wi-Fi适配器)。
3,禁用唤醒功能
右键点击目标设备,选择属性。
切换到电源管理标签。
在电源管理选项卡下,找到允许此设备唤醒计算机,并取消勾选该选项。
4,保存更改
点击确定保存更改。
5,重复此步骤对所有可能唤醒计算机的设备(如鼠标、键盘、网络适配器等)进行设置。
此外,有时候电源选项中的一些设置也可能导致外设唤醒计算机。你可以调整这些设置以确保外设不会影响休眠状态。
调整电源选项设置:
1,打开电源选项
在任务栏搜索框中输入“电源选项”,并点击电源和睡眠设置。
2,更改计划设置
点击更改计划设置,然后点击更改高级电源设置。
3,禁用唤醒设置
在弹出的窗口中,展开睡眠,然后找到允许唤醒计时器,将其设置为禁用。
4,保存更改
点击应用,然后点击确定。
# 73、配置ddns服务
现在的路由器都无法对ipv6地址进行ddns服务,于是用ddns-go进行配置服务。
域名为:mingqian.space,托管在dnspod上
腾讯云API秘钥:
SecretId:AKIDoSs3ziCRRCj26uTntlOmvpUxBAuQimbB
SecretKey:OXR6XjgPs78vTntjNmwrX1GG1XoqdBVa
DNSPod Token:
ID:554733
Token:f5d9d4a3ec72ab7d29441a1275a4a1d1
cloudflare Token:
zdmcke1OO5pXayGYv1TNvBl2c8e6zuRlHJGzJF_l
global API key:885303f6600457b0607d993cd1c6afa0dfa11

ddns-go
监听端口:9876
server酱配置链接:
其中sendkey:SCT269225T0yUrmFtxOaN4QwOrKLjpNyEp
# 74、git push报错
ssh: connect to host github.com port 22: Connection timed out fatal: Could not read from remote repository.
解决方法:在.ssh目录下新建config文件,添加以内容:
```
Host github.com
Hostname ssh.github.com
Port 443
```
# 75、不同播放器对HDR和杜比视界的支持
| 播放器 | HDR | 杜比视界 |
| :-------: | :--: | :------: |
| vlc | √ | × |
| mpv | √ | √ |
| mpc-be | √ | √ |
| potplayer | √ | √ |
真的是时过境迁啊,记得我一开始用的就是potplayer,但是potplayer并不支持HDR,所以后来就开始用上了vlc和mpv,因为mpv太过简洁,什么都需要自己配置,于是就把vlc当作主要播放器使用了,后面又遇到了vlc不能播放杜比视界,网上一查,mpv可以,但是需要配置,于是下了mpv.net进行配置,mpv.conf文件配置如下:
```
vo=gpu-next
gpu-context=win
```
mpv-android播放杜比视界配置:
v选择gpu-next,解码方式选择软件解码
配置完后mpv即可正常播放杜比视界,mpc-be则是无需任何配置也能播放HDR和杜比视界,但是界面太丑,最令我惊喜的就是potplayer,居然支持HDR和杜比视界了,而且不用额外配置,强!!!!
# 76、解决chrome将http变为https
使用URL Rule插件
# 77、Mac使用快捷键
1. 查看Mac所有文件:```shift+command+c```
2. 关闭视窗:```command+w```
关闭应用程序:```command+q```
3. 复制文件:```command+c```
粘贴文件:```command+v```
剪切文件:```command+option+v```
4. 显示隐藏文件:```command+shift+.```
在finder中打开前往文件夹的窗口:```command+shift+G```
强制退出程序:```Option + Command + Esc```
# 78、Mac删除自带输入法ABC
## 1. 关闭系统完整性保护 SIP
* 重启系统,按住 `Command + R` 进入恢复模式。
* 点击顶部菜单栏 `实用工具` 中的 `终端` 。
* 输入以下命令来禁用 `SIP` 保护机制。
```text
csrutil disable
```
* 执行后输出以下信息表示禁用成功。
```text
Successfully disabled System Integrity Protection. Please restart the machine for the changes to take effect.
```
* 然后再次重启系统即可。
## 2.找到 com.apple.HIToolbox.plist 文件
* **sudo open ~/Library/Preferences/** 找到 **com.apple.HIToolbox.plist** 文件
* 使用 xcode 或者 PlistEdit Pro 也可以

* 依次点开 `Root` - `AppleEnabledInputSources` ,会看到一列 `item` ,找到其中 `KeyboardLayout Name` 为 `ABC` 的那一列,将整列 `item` 删掉,然后 `command + S` 保存
* 重点来了,这个时候如果你只是保存的话,马上就回被系统改回来。右键点击 com.apple.HIToolbox.plist 文件,显示简介 - 勾选已锁定

# 79、Mac开盖自启和断电自启
```bash
# 如果不需要打开盖子或连接电源自己开机
sudo nvram BootPreference=%00
# 如果不需要打开盖子自己开机
sudo nvram BootPreference=%01
# 如果不需要连接电源时自己开机
sudo nvram BootPreference=%02
# 恢复打开盖子或连接电源时自启动
sudo nvram -d BootPreference
```
# 80、验机
以下步骤均需全程录像,中间不能间断
## 手机
1、检查快递盒,确认快递盒无破损,未开封后在拆开
2、检查手机盒有无挤压变形,塑封是否完整流畅,无明显污渍划痕
3、核对手机盒上的信息是否与购买信息一致,包括型号、颜色、存储规格
4、根据IMEI码和序列号到官网查询产品信息和激活状态。**若为已激活,直接退**
| 品牌 | 查询类型 | 查询网址 |
| ------------ | --------------------------- | ------------------------------------------------------------ |
| 华为 | 服务支持 - 保修期及权益查询 | [https://consumer.huawei.com/cn/support/warranty-query/](https://consumer.huawei.com/cn/support/warranty-query/) |
| 苹果 | 技术支持 - 查看保修服务 | [https://checkcoverage.apple.com/](https://checkcoverage.apple.com/) |
| OPPO / 一加 | 服务 - 真伪鉴别 | [https://support.oppo.com/cn/check/](https://support.oppo.com/cn/check/) |
| 小米 / REDMI | 服务中心 - 真伪查询 | [https://www.mi.com/service/imei](https://www.mi.com/service/imei) |
| vivo / iQOO | 服务 - 真伪查询 | [https://support.vivo.com.cn/service/authenticityCheck](https://support.vivo.com.cn/service/authenticityCheck) |
| 魅族 | 服务 - 保修及真伪查询 | [https://service.meizu.com/authenticity.html](https://service.meizu.com/authenticity.html) |
| 三星 | 售后服务 - 激活日期查询 | [https://support-cn.samsung.com.cn/supportcn/imei/default.aspx](https://support-cn.samsung.com.cn/supportcn/imei/default.aspx) |
| 荣耀 | 服务支持 - 保修期及权益查询 | [https://www.honor.com/cn/support/warranty-query/](https://www.honor.com/cn/support/warranty-query/) |
| 真我 | 服务 - 真伪和保修查询 | [https://www.realme.com/cn/support/phonecheck](https://www.realme.com/cn/support/phonecheck) |
5、开箱验机,戴手套(或者包着纸),仔细查看屏幕背板边框是否有指纹,玻璃背板有没有瑕疵点,边框和摄像模组是否有掉漆和划痕,前后摄像头是否有灰尘,摄像头是否对正,按键是否有清脆的声音,回弹是否正常
6、开机,不要插卡和联网激活,进入拨号界面,输入*#06#,查看IMEI码, 手机背面和手机盒上的IMEI码是否一致
7、打开手机自检功能,重点注意屏幕边缘触控是否正常,有无坏点,检测结束后可以看下屏幕显色是否均匀,边缘是否漏光,可以拖动图标在屏幕所有区域滑动,看是否有断触的情况。打开相机,切换不同焦距对着白纸拍几张,查看有没有黑点。
| 品牌 | 自检功能所在位置 |
| ------------------ | -------------------------------------------- |
| vivo / iQOO | i管家 - 实用工具 - 手机优化 - 手机检测 |
| OPPO / 一加 / 真我 | 手机管家 - 右上角三个点 - 常规检测 |
| 小米 / REDMI | 小米商城 - 服务 - 手机自检 |
| 华为 | 我的华为 - 服务 - 快捷服务 - 更多 - 智能检测 |
| 荣耀 | 我的荣耀 - 服务 - 设备检测 |
## 电脑
1、检查包装箱配置是否为购买的配置,包装箱是否损坏,封口是否被撕开过,各种配件有无遗漏
2、打开包装箱,检查电脑外观
* 检查外壳是否干净,特别是屏幕表面是否有脏污
* 检查电脑插口是否有重度使用的痕迹
* 检查螺丝是否有划痕
* 检查脚垫是否有灰尘
3、插电开机,跳过联网步骤,使用图吧工具箱检测
* 硬件信息栏查看电脑配置
* 屏幕工具一栏,选择坏点与漏光测试,最好在暗一点的环境下看,鼠标左键点击切换,ESC退出
* 屏幕工具一栏,选择显示器色域检测,主要看sRGB
* 磁盘工具一栏,选择ASSSDBench mark,1G即可,左边全部打勾,需要注意硬盘的pcie是3.0还是4.0,具体什么盘可以询问客服或者查看商品详情页面,测完速后查看跟实际是否一致
* 磁盘工具一栏,CrystalDiskinfo检查硬盘,主要看通电时间,通电时间<100小时正常
* 外设工具一栏,选择Keyboard,检查键盘有没有按键坏的,每个键都按一遍
* 烤鸡工具一栏,选择FurMark,左下角settings设置,只勾选第一个和第三个,ok,然后点GPU stress test,不要关闭,打开AIDA64,在页面上方选择工具一栏,“系统稳定性测试”,只勾选第2个,左下角start开始测试。在AIDA64页面,左边点击计算机—>传感器,可以看到温度和功耗,笔记本电脑小于100℃,台式电脑小于80℃差不多,功耗和购买的不符可以直接退,双烤烤25~30min没有黑屏或者死机就ok了
# 81、ubuntu显卡开启持久模式(即on状态)
1. **单次执行命令**
执行持久模式启动命令`sudo nvidia-smi -pm 1`
执行 `nvidia-smi` 命令,若Persistence-M属性变为On,证明配置生效:

2. **开机自动生效**
新建驱动持久化服务文件:
```bash
sudo vim /etc/systemd/system/nvidia-persistenced.service
```
填写以下内容:
```
[Unit]
Description=NVIDIA Persistence Daemon
Wants=network.target
[Service]
Type=forking
ExecStart=/usr/bin/nvidia-persistenced --persistence-mode
ExecStopPost=rm -rf /var/run/nvidia-persistenced
[Install]
WantedBy=multi-user.target
1234567891011AI写代码
```
设置服务开机自启
```
systemctl daemon-reload
systemctl start nvidia-persistenced.service
systemctl enable nvidia-persistenced.service
123
```
查看服务运行状态
```bash
systemctl status nvidia-persistenced.service
```
# 82、ubuntu20.04无法打开设置
ubuntu设置无法打开,使用终端执行:
```bash
gnome-control-center
```
会提示:
```bash
mazhuang@mz-Ubuntu:~$ gnome-control-center
can't load /usr/lib/x86_64-linux-gnu/spa/support/libspa-support.so: /usr/lib/x86_64-linux-gnu/spa/support/libspa-support.so: cannot open shared object file: No such file or directory
Segmentation fault (core dumped)
```
**解决方式:**
终端执行:
```bash
sudo apt install pipewire
```
成功解决
# 83、vscode取消Enter键自动补全
**取消**
* 第一步
打开左下角的设置,再点键盘快捷方式

* 第二步
搜索框中输入suggestion

* 第三步
找到acceptSelectSuggestion,默认情况下一条绑定Tab键,一条绑定Enter键,选中Enter的那条右键删除键绑定。修改后如图所示,只剩Tab一条。修改完毕!
**恢复**
取消了之后不能像我们取消时的操作那样,用添加键绑定加回去。
这时需按下ctrl+shift+p,调出命令面板,然后输入keyboard,选择这一个:

进去以后在json文件中加入这段代码:
```python
{
"key": "enter",
"command": "acceptSelectedSuggestion",
"when": "acceptSuggestionOnEnter && suggestWidgetVisible && suggestionMakesTextEdit && textInputFocus"
}
12345
```
如果这段代码已经存在,则只需将"-acceptSelectedSuggestion"前的 - 删掉即可
# 84、vscode设置只读快捷键
1. ctrl+shift+p,输入keyboard,打开键盘快捷方式
2. 搜索:在会话中切换活动编辑器只读
3. 将键盘快捷键设置为您想要切换为只读的键。我更喜欢在 Windows 中使用“ctrl+shift+R”
4. 现在右键单击刚刚设置的键绑定,选择“更改何时表达式”,然后输入“editorTextFocus”或“editorFocus”,然后按回车键。

修改完后如下图所示:
现在您可以按下该键盘快捷键并在(只读 = True)和(只读 = False)之间切换。
# 85、解决windows下开启代理后微软无法访问的问题
解决办法:开启UWP环回代理
具体:在clash verge中找到uwp工具

进入后,先点击Exempt All,然后点击Save Changes

可能会出现报错```Failed to set IsolationExempt AppContainers; call returned 0x57```,这个时候需要关闭一些已经打开的应用,比如这次关闭snipaste之后就可以,网上收集到的还有关闭onedrive,sandibox
# 86、字幕简繁转换
使用opencc工具,目前是通过在ubuntu下源码编译项目后,可以使用opencc-dict工具将自定义的词库转换为ocd文件,命令为:
```bas
opencc_dict -i custom_t2scharacter.txt -o custom_t2s.ocd2 -f text -t ocd2
```
其中custom_t2scharacter.txt文件是自己添加后的词库文件,custom_t2s.ocd2是生成的文件
* 注意在ubuntu下添加词库时需要将原来的行内容进行复制粘贴再进行修改,否则格式会不对,无法生成ocd2文件
而后在windows下conda的opencc环境中,找到对应的位置在里面添加custom_t2s.json文件(也可以直接everything搜索),然后就能通过代码正常调用。
# 87、小米手机查看电池健康度
1. 拨号界面输入\*\#\*\#284\#\*\#\*获取系统日志报告
2. 将报告发送到电脑(用手机打开很卡)
3. 解压,如下图所示


4. 最好用vscode打开文件,次之可以用wps打开,用记事本打开会卡死,搜索battery capacity,如图所示

如果Estimated battery capacity显示个位数,则下一行为当前手机电池容量
# 88、Mac安装Homebrew并换源
* 安装
```bash
# 先在终端中临时开启代理安装Homebrew
export http_proxy=http://127.0.0.1:7897
export https_proxy=http://127.0.0.1:7897
```
[homebrew安装链接地址](https://brew.sh/)
* 换源
```bash
echo 'export HOMEBREW_API_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles/api"' >> ~/.zprofile
echo 'export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles"' >> ~/.zprofile
```
* 删除多余的仓库
```bash
brew untap homebrew/core
brew untap homebrew/cask
```
* 卸载
```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
```
# 89、Mac文件图标排列
```bash
control+command+0键 取消自动排列的快捷键
control+command+1键 按名称排列
control+command+2键 按种类排列
control+command+3键 按上次打开日期排列
control+command+4键 按添加的日期排列
control+command+5键 按修改的日期排列
control+command+6键 按大小排列
control+command+7键 按标记排列
```
# 90、windows中使用nssm安装服务
```
NSSM: The non-sucking service manager
Version 2.24 64-bit, 2014-08-31
Usage: nssm