返回
Featured image of post Linux常用指令

Linux常用指令

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

常见指令

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

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):时可以设置一个输入密码,由于之后的连接足够安全,我图快不设置密码,这里可以直接回车

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下的内容至其中

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

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

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

vi ~/.ssh/authorized_keys

将我们主机id_rsa.pub下的内容粘贴到authorized_keys中

# 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
  • 刷新环境变量
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>

# 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的话,可能也会遇上某些很奇怪很恶心的问题

# wsl配置文件

我们希望在wsl2中使用windows下的代理进行链接访问,其次我也遇到恶性bug就是wsl2每次启动都会创建swap分区,不会自动删除释放,再次启动后又会创建新的swap分区,防不胜防,一下子就把我的c盘塞满了,所以必须得整改整改了

打开%USERPROFILE%\.wslconfig文件,如果没有就创建一个.wslconfig,在其写入如下内容:

[wsl2]
swap=0
nestedVirtualization=true
ipv6=true
[experimental]
autoMemoryReclaim=gradual # gradual | dropcache | disabled
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true

上述配置顺带实现了wsl2下直接使用windows的代理

# 修改Hyper-V端口号

我们使用

netsh int ip show excludedportrange protocol=tcp

对Hyper-V占用的端口号查询,发现

原端口占用情况

可能会出现占用比较常见的端口号,导致一些程序无法正常运行,比如我的hugo

所以手动调整这些占用的端口号到不经常使用的位置:

netsh int ipv4 set dynamic tcp start=60001 num=5534

之后重启,就能看到最终效果了

现端口占用情况

大功告成

Built with Hugo | 主题 StackJimmy 设计