返回
Featured image of post Linux常用指令

Linux常用指令

介绍一些通用的linux指令和技巧,此外也包含部分在arch/manjaro或者ubuntu上遇到的指令

常见指令

在此主要记录一下常用到的指令

  • vim 强制保存 w !sudo tee %
  • 所有权限 chmod 777 文件名

ubuntu

正好最近手里突然冒出了一台 ubuntu 云服务器,纯天然,无污染,正好趁此机会好好写写搭建过程

云服务器初始配置

# 创建新的用户

首先进入云服务器,如果是普通用户登录,直接切换成 root 权限,我们要开始操作了

sudo su
adduser 用户名

再输入密码,一路回车就好了,现在该用户名还不具备 sudo 权限,我们需要将其添加至 sudo 组

usermod -aG sudo 用户名

之后检查该用户名所在组:

groups 用户名

显示 sudo,大功告成

# ssh 连接

现在我是在云平台上直接访问的服务器,不过这样一来是不够快速便捷,二来安全性不佳,所以最好使用 rsa 密钥对进行 ssh 连接访问

切换到我们自己的用户来生成密钥对,开始操作

su 用户名
ssh-keygen -t rsa -C '用户邮箱'

使用默认存放路径,当询问Enter passphrase (empty for no passphrase):时可以设置一个输入密码,由于之后的连接足够安全,我图快不设置密码,这里可以直接回车

如果后续报错,显示权限不够,我们可以设置用户读写权限

chmod 600 ~/.ssh/id_rsa

id_rsa.pub中获取我们的公钥

cat ~/.ssh/id_rsa.pub

直接复制就好了,可以添加到 github 中,便于 ssh 直接访问自己的仓库

具体操作如下,在 github 中找到 Settings/SSH and GPG keys 点击New ssh key新增我们复制下来的公钥,key type我们选择Authentication,然后复制粘贴id_rsa.pub下的内容至其中

测试连接,输入以下命令

ssh -T git@github.com

云服务器上顺带设置一下 git 客户端的用户名和邮箱(邮箱没有双引号)

git config --global user.name "username"
git config --global user.email useremail@qq.com

通过git config -l检查是否配置成功

当然,为了便于我们本地主机访问该服务器,我们需要在~/.ssh新建authorized_keys文件

将我们本地主机id_rsa.pub下的内容粘贴到 authorized_keys 中,如果主机中没有id_rsa.pub,我们也可以按照上述相同的方法生成密钥对

# vscode 优化

我还是比较喜欢使用 vscode 进行 ssh 进行连接访问的,但苦于这种轻量型的服务器内存小,cpu 容易占满,经常卡死,这当然是不可以接受的

这里通过划分 Swap 盘来进行优化访问

  1. 创建一个 Swap 文件

使用 fallocate 或 dd 命令创建一个 swap 文件。例如,要创建一个 4GB 的 swap 文件,可以使用:

sudo fallocate -l 4G /swapfile

如果 fallocate 不可用或有问题,还可以使用 dd:

sudo dd if=/dev/zero of=/swapfile bs=1M count=4096
  1. 设置正确的权限:

为了确保 swap 文件只能被 root 用户读写,设置适当的权限:

sudo chmod 600 /swapfile
  1. 格式化为 Swap:

将新创建的文件格式化为 swap 文件格式:

sudo mkswap /swapfile
  1. 启用 Swap:

使用以下命令启用 swap:

sudo swapon /swapfile
  1. 使 Swap 在重启后持久化:

要确保每次启动时都启用 swap,需要将其添加到/etc/fstab 文件中:

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
  1. 调整 Swappiness 值(可选):

Swappiness 是一个范围为 0-100 的值,决定了系统应该如何积极地使用 swap。值越高,系统越倾向于使用 swap。默认值通常是 60。你可以使用以下命令查看当前的 swappiness 值:

cat /proc/sys/vm/swappiness

如果需要,你可以临时更改它:

sudo sysctl vm.swappiness=10

对于长期更改,将以下行添加到/etc/sysctl.conf 中:

vm.swappiness=100

配置完 Swap 之后,你可以使用free -h命令来查看 RAM 和 Swap 的使用情况。

# 安装 miniconda

我个人比较喜欢对不同项目创建不同的虚拟环境进行管理,这里可以安装miniconda 包管理器进行使用

使用如下代码进行安装:

mkdir -p ~/miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
rm -rf ~/miniconda3/miniconda.sh
  • ~/.bashrc中添加环境变量
export PATH=~/miniconda3/bin:$PATH
  • 刷新环境变量
source ~/.bashrc

发现前面就会有一个(base),代表激活了 base(最基础)环境,安装完成

解决方法(前面有一个(base)):

# 退出conda虚拟环境
conda deactivate

# conda 设置不自动进入base(最基础)环境
conda config --set auto_activate_base false
  • 卸载 miniconda

找到 miniconda3 的文件夹,使用 rm 命令将它删除

用 vim 命令进入.bashrc 文件,将 conda 的语句用#注释掉

重新激活一下 source ~/.bashrc 就可以了

  • conda 常用命令
  1. 获取版本号
conda --version
conda -V
  1. 更新 conda
conda update conda
  1. 环境管理
# 查看虚拟环境列表
conda env list
conda info -e

# 创建虚拟环境
conda create -n <env_name> [python_version] [package_name]
conda create -n pyenv python=3.6 requests
conda create -n pyenv

# 复制虚拟环境
conda create --name <new_env_name> --clone <old_env_name>

# 删除虚拟环境
conda remove -n <env_name> --all

# 激活虚拟环境
conda activate <env_name>

# 退出虚拟环境(进入环境状态下才可使用)
conda deactivate
  1. 包管理

我个人其实更倾向于使用 pip install 进行安装的,很多包conda install下不了

# 查看所有包
conda list -n <env_name>  # 若不指定-n,默认在当前的环境

# 搜索某个包信息
conda search <package_name>  # 查询包的版本

# 安装
conda install -n <env_name> -c 镜像地址 <package_name>  # 若不指定-n,默认在当前的虚拟环境
conda install <package_name>
conda install <package_name>=1.5.0  # 指定版本

# 更新
# 更新当前环境所有包
conda update --all
# 更新指定包
conda update -n <env_name> <package_name>  # 若不指定-n,默认在当前的虚拟环境
conda update <package_name>

# 删除
conda remove -n <env_name> <package_name>  # 若不指定-n,默认在当前的虚拟环境
conda remove <package_name>

# 安装 docker

docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化

  • 国内 docker 无法使用的解决方案

  • 从更新仓库索引开始:

sudo apt update
  • 现在,你可以使用以下命令在 Ubuntu 中安装 Docker 以及 Docker Compose:
sudo apt install docker.io docker-compose

📋 Docker 包被命名为 docker.io,因为在 Docker 出现之前就已经存在一个名为 docker(用于 Dockerlet 应用)的过渡包。因此,Docker 包必须被命名为其他名称。

  • 安装完成后,你可以使用以下命令检查安装的版本:
docker -v

docker 需要在 root 环境下执行

  • 拉取镜像
docker pull hello-world
  • 创建新容器,以qmsgnt为例
sudo docker run --restart=always -d --name qmsgnt -e ACCOUNT=$ACCOUNT -p $WEBUI_PORT:6099 -v ${PWD}/QQ:/root/.config/QQ -v ${PWD}/config:/usr/src/app/QmsgNtClient-NapCatQQ/config -v ${PWD}/logs:/usr/src/app/QmsgNtClient-NapCatQQ/logs qmsgnt
  • 查看容器
sudo docker images
sudo docker image ls
  • 启动容器
sudo docker start qmsgnt
  • 停止容器
sudo docker stop qmsgnt
  • 删除容器
sudo docker rm qmsgnt
  • 删除镜像
sudo docker rmi qmsgnt

# python 小细节

这个 python 是服务器自带的 python,有时候我个人偷懒,更快捷的来运行脚本时会用到

  • 软链接

想使用 python 却不得不打 python3,很烦!

sudo ln -s /usr/bin/python3 /usr/bin/python
  • 国内换源

如果服务器在国内的话,可以尝试换源,我的腾讯云服务器,本来看在是腾讯的面子上换个腾讯源的,结果 emmmm,有的版本太低…

我的评价是,还得是清华源

# 清华源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

# 阿里源
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/

# 腾讯源
pip config set global.index-url http://mirrors.cloud.tencent.com/pypi/simple

# 豆瓣源
pip config set global.index-url http://pypi.douban.com/simple/

# 换回默认源pip config unset global.index-url

# 实验室服务器使用指南

实验室服务器常用指南

arch/manjaro

有问题来官方论坛:

arch
arch官网
https://archlinux.org/
manjaro
manjaro官方社区
https://forum.manjaro.org/

# 一些安装指令

# google chrome

yay -S google-chrome

# qq

安装官方平台qq ,下载对应版本,我们这里使用的是 x64/pacman

sudo pacman -U linuxqq_2.0.0-b2-1089_x86_64.pkg.tar

或者

flatpak install com.qq.QQ

# 微信

yay -S wechat-universal-bwrap

# 远程控制

安装方式:

  1. 安装 xrdp 核心包

yay -S xrdp

  1. 安装 Xorg 后端(根据自己的设备在以下之中三选一即可):
  • Inter 与 AMD 核显 (支持硬件加速)
yay -S xorgxrdp-glamor
  • 不使用 GPU (CPU 占用率会高)
yay -S xorgxrdp
  • NVidia 独显
yay -S xorgxrdp-nvidia
  1. 安装 Xorg-xinit
pacman -S xorg-xinit
  1. 修改 Xwrapper.config 文件

/etc/X11/Xwrapper.config中加入以下内容:

allowed_users=anybody
needs_root_rights=no

如果没有这个文件则手动创建

  1. ~/.xinitrc中写入以下内容:

找到如下的dbus_args

get_session(){
    local dbus_args=(--sh-syntax --exit-with-session)
    case $1 in

将其修改为:

get_session(){
    local dbus_args=(--sh-syntax)
    case $1 in
  1. 赋予~/.xinitrc执行权限
chmod +x ~/.xinitrc
  1. 启用服务
sudo systemctl enable xrdp.service
sudo systemctl enable xrdp-sesman.service
  1. 重启
sudo reboot
  1. 减少/解决画面卡顿优化

调整 Xrdp 配置参数

编辑 /etc/xrdp/xrdp.ini

tcp_send_buffer_bytes=4194304
tcp_recv_buffer_bytes=6291456

tcp_send_buffer_bytes, tcp_recv_buffer_bytes 两个参数默认被注释了,注释默认值(32768),根据实际情况进行调整。

调整系统参数

将以下内容写入配置文件 /etc/sysctl.conf

net.core.rmem_max = 12582912
net.core.wmem_max = 8388608

然后执行

sudo sysctl -p

重启 xrdp 服务生效

sudo systemctl restart xrdp

# pacman 失效问题

之前遇到了非常恶心的 bug

错误:无法从 mirrors.bfsu.edu.cn : The requested URL returned error: 404 获取文件 'pacman-6.0.2-14-x86_64.pkg.tar.zst'
错误:无法从 mirrors.bfsu.edu.cn : The requested URL returned error: 404 获取文件 'pacman-6.0.2-14-x86_64.pkg.tar.zst'
错误:无法从 mirrors.tuna.tsinghua.edu.cn : The requested URL returned error: 404 获取文件 'pacman-6.0.2-14-x86_64.pkg.tar.zst'
错误:无法从 mirrors.sjtug.sjtu.edu.cn : The requested URL returned error: 404 获取文件 'pacman-6.0.2-14-x86_64.pkg.tar.zst'
警告:无法获取某些文件
错误:无法提交处理 (无法获取某些文件)
发生错误,没有软件包被更新。

我一开始以为是换源的问题

sudo pacman-mirrors -id

尝试还原换源,无果,之后找到正确解决方法,更新 arch 组件:

sudo pacman-mirrors --continent && sudo pacman -Syyu

成功解决!

# vscode 终端乱码问题

在 vscode 终端里我由 bash 转 zsh 后发现,现有字体对于特定的图标无法显示:

乱码显示

Ctrl+,打开设置,在设置中的editor.fontFamily改为MesloLGS NF即可正常显示:

字体改为MesloLGS NF后正常显示

# vscode 基本设置

~/.config/Code/User中打开settings.json 我的自定义设置如下(后续会持续更新):

{
    "workbench.colorTheme": "One Dark Pro",
    "files.autoSave": "onFocusChange",
    "workbench.iconTheme": "material-icon-theme",
    "terminal.integrated.defaultProfile.linux": "zsh",
    "window.titleBarStyle": "custom",
    "editor.fontFamily": "MesloLGS NF",
    "explorer.confirmDelete": false
}

WSL2

本文文章内容太长了,相关内容见WSL2

Built with Hugo | 主题 StackJimmy 设计