Skip to content

linux

配置环境变量

配置root用户的环境

sh
vim /root/.bashrc

命令起别名和配置环境变量

sh
# 起别名的格式===》 alias 别名=命令
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
alias dis='docker images'
alias fk='fuck'
alias sysr='systemctl reload'
alias syssu='systemctl status'
alias syssta='systemctl start'
# 启动所有项目相关的docker镜像
alias apd='docker stop nacos mysql seata && docker start nacos mysql seata'

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

eval "$(thefuck --alias)"
# 在这里配置环境变量,变量之间用:分隔
export PATH="/usr/test:$PATH"

使命令生效

sh
source /root/.bashrc

查看环境变量

sh
echo $PATH

配置系统环境

以配置nginx命令为例

sh
# 编辑环境变量
vim /etc/profile
# 新增如下语句后保存并退出
export PATH=$PATH:/usr/local/nginx/sbin
# 使其生效
source /etc/profile

网络配置

sh
# 进入网卡所在目录
cd /etc/sysconfig/network-scripts/
# 编辑网卡配置
vim ifcfg-ens33 (←对应的网卡)
# 重启网卡
service network restart
text
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=46b54acf-ab0d-4f09-857d-b2012e796c1a
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.111.128
PREFIX=24
GATEWAY=192.168.111.2
DNS1=192.168.111.2

防火墙操作

shell
# 开启/关闭
# 查看防火墙状态
systemctl status firewalld

# 开启防火墙
systemctl start firewalld
service firewalld start

# 查询已开放的端口(已开放的端口号集合)
firewall-cmd --zone=public --list-ports

# 查询防火墙中指定的端口是否开放
firewall-cmd --query-port=9001/tcp

# 开放一个指定的端口
firewall-cmd --permanent --add-port=9002/tcp

# 批量添加开发端口
firewall-cmd --permanent --add-port=9001-9003/tcp

# 移除一个指定的端口
firewall-cmd --permanent --remove-port=9003/tcp

# 重新加载
firewall-cmd --reload

# 注意:
# --permanent表示设置为持久
# --add-port表示添加指定端口
# --remove-port表示移除指定端口

软件安装

yum

yum( Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。

yum可以在配置的仓库中搜素并安装软件

yum换源

备份仓库源文件

sh
sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak

将需要设置的源复写到之前的源文件中

sh
# 阿里云源
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

# 清华大学源
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.tuna.tsinghua.edu.cn/repo/Centos-7.repo

# 网易源
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo

# 中科大源
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.ustc.edu.cn/centos/7/os/x86_64/

清理 YUM 缓存

sh
sudo yum clean all
sudo yum makecache

验证新源是否可用

sudo yum repolist

dnf

DNF 是 YUM 的下一个即将推出的主要版本,YUM 是基于 RPM 的 Linux 的包管理器 分布。它大致保持了 CLI 与 YUM 的兼容性,并为 扩展和插件。

DNF官方文档

安装dnf

如果没有设置过yum的源的话,可能需要先执行这一步

sh
yum install epel-release

直接安装

sh
yum install dnf

知识点

su加-和不加-的区别

su omm:只切换用户身份,不加载 omm 用户的环境变量,不切换到 omm 用户的主目录。
su - omm:切换用户身份,同时加载 omm 用户的环境变量,并切换到 omm 用户的主目录。

极端上网方式

环境

没有网线,但是有手机的上网方式

dhclient

将手机插到电脑上,然后打开usb共享网络(支持将手机连到的wifi共享出来)

参数介绍

找到当前手机的网卡,一般是最后一个,判断不了就拔插手机并用这条命令测试

sh
ip a

通过指定网卡发起DHCP请求

sh
dhclient + 网卡名

释放系统中已获取的网卡参数

sh
dhclient -r

向指定的服务器请求获取网卡参数

sh
dhclient -s 192.168.111.128(服务器地址)

手动停止执行dhclient服务进程

sh
dhclient -x

代理共享模式

环境

服务器无法上网,但是局域网有可上网的代理设备

注意

http无法代理udp,需要socks才能代理udp,如果需要让手机使用,请自己使用手机创建一个socks的配置(参考上面的视频连接)

配置代理软件(此处为clash)

在可以上网的电脑上开启代理,并在代理中开启局域网链接

设置系统代理

注意

我的测试系统的代理为10.2.7.118:10809 下面例子中需要替换的字符:10.2.7.118:10809 例如替换为你的代理ip:代理的端口 下面的临时和永久二选一即可

临时设置代理

sh
export http_proxy="http://10.2.7.118:10809"
export https_proxy="http://10.2.7.118:10809"
export all_proxy="socks5://10.2.7.118:10809"
export no_proxy="localhost,127.0.0.1"

临时清除

sh
unset http_proxy
unset https_proxy
unset all_proxy
unset no_proxy

永久设置

sh
echo 'export http_proxy="http://10.2.7.118:10809"' >> /etc/profile
echo 'export https_proxy="http://10.2.7.118:10809"' >> /etc/profile
echo 'export all_proxy="socks5://10.2.7.118:10809"' >> /etc/profile
echo 'export no_proxy=localhost,127.0.0.1' >> /etc/profile
source /etc/profile

永久清除(编辑 /etc/profile 删除相关行)

sh
vim /etc/profile
# 删除上面的那几行后保存
source /etc/profile

查看代理

sh
env | grep -i proxy

单独查看各代理变量

sh
echo $http_proxy
echo $https_proxy
echo $all_proxy
echo $no_proxy

测试代理是否生效

sh
curl -v baidu.com
sh
curl -v google.com

针对yum代理

有时候配置完系统代理之后,yum可能还是无法使用,请使用下面这个方式为yum加上代理

sh
vim /etc/yum.conf
text
proxy=http://10.2.7.118:10809/

针对docker的代理

Daemon proxy configuration | Docker Docs

方法一(该方法优先级最高)
sh
vim /etc/docker/daemon.json
json
{
  "proxies": {
        "http-proxy": "http://10.2.7.118:10809",
        "https-proxy": "http://10.2.7.118:10809",
        "no-proxy": "localhost,127.0.0.1"
    }
}
sh
systemctl restart docker
方法二(手动设置 Docker 守护进程的环境变量)

/etc/systemd/system/docker.service.d/http-proxy.conf

sh
sudo mkdir -p /etc/systemd/system/docker.service.d
vim http-proxy.conf
text
[Service]
Environment=HTTP_PROXY=http://10.2.7.118:10809
Environment=HTTPS_PROXY=http://10.2.7.118:10809
Environment=NO_PROXY=localhost,127.0.0.1
sh
systemctl daemon-reload
systemctl restart docker

也可以在执行的时候使用环境变量使用代理

sh
docker run -e HTTP_PROXY=http://10.2.7.118:10809 -e HTTPS_PROXY=http://10.2.7.118:10809 -e NO_PROXY=localhost,127.0.0.1 镜像名称
方法三(不推荐)

Proxy configuration | Docker Docs

sh
vim ~/.docker/config.json
json
{
 "proxies": {
   "default": {
     "httpProxy": "http://proxy.example.com:3128",
     "httpsProxy": "https://proxy.example.com:3129",
     "noProxy": "*.test.example.com,.example.org,127.0.0.0/8"
   }
 }
}

保存文件后,配置将变为活动状态,您无需 重启 Docker。但是,该配置仅适用于新容器和 构建,并且不会影响现有容器。

网关共享模式

开启ip转发

sh
sysctl -w net.ipv4.ip_forward=1

clash安装服务模式并启用tun模式

将需要上网的设备的网关改为代理端的ip地址

快速换源脚本

LinuxMirrors

sh
bash <(curl -sSL https://linuxmirrors.cn/main.sh)

一些命令

查看参数

动态查看命令结果可以使用watch,例如下面的例子中watch -n 5标识5秒执行一次后面的free -h命令

动态查看内存变化

sh
watch -n 5 free -h

cpu参数

sh
lscpu

查看显卡

sh
lspci | grep -i nvidia

查看docker位置

sh
which docker

首先查找大文件

sh
sudo du -h / --max-depth=1 | sort -rh

查看系统默认启动目标

sh
systemctl get-default

想查看所有可用的启动目标

sh
systemctl list-units --type=target

查看可用的shell列表

sh
cat /etc/shells

tabby

如何让sftp自动读取当前所在目录

按照如下方法在对应的编辑器中添加对应的语句即可,官方文档

bash

sh
vim ~/.bash_profile
sh
export PS1="$PS1\[\e]1337;CurrentDir="'$(pwd)\a\]'

zsh

sh
vim ~/.zshrc
sh
precmd () { echo -n "\x1b]1337;CurrentDir=$(pwd)\x07" }

fish

sh
vim ~/.config/fish/config.fish
sh
function __tabby_working_directory_reporting --on-event fish_prompt
    echo -en "\e]1337;CurrentDir=$PWD\x7"
end

解决上传文件断开链接的问题

关闭图中的两个加密方法

切换默认shell

为什么我要切换shell

在使用tabby的mcp时,由于zsh有命令保护,会导致mcp执行命令失败,因此得切换为bash再使用

永久切换(需要重新登陆)

切换为bash(root用户不用写用户名)

sh
sudo chsh -s /bin/bash 用户名

切换为zsh(root用户不用写用户名)

sh
sudo chsh -s /bin/zsh 用户名

临时切换(直接生效)

方法一

sh
bash

方法二

sh
exec -l bash

查看当前使用的shell

方法一

sh
echo "$SHELL"

输出

txt
/usr/bin/zsh

解释

txt
打印环境变量 SHELL,它表示“登录时的默认 shell 的路径”(如 /bin/bash、/bin/zsh),不一定等于你当前子进程里使用的那个 shell。

方法二

sh
ps -p $$ -o comm=

解释

txt
ps: 查看进程。
-p $$: 只看进程号为 $$ 的进程;$$ 是“当前 shell 进程的 PID”。
-o comm=: 只输出进程的“可执行名”(command name),并把列标题去掉(等号表示不显示表头)。
结果会是 bash、zsh 等,最准确反映你“当前正在用”的 shell

方法三

sh
getent passwd "$USER"

解释

txt
getent:查询系统的“名称服务开关”(NSS) 数据库的通用工具。数据源既可能是本机文件(如 /etc/passwd、/etc/group),也可能是 LDAP、NIS 等集中目录,按 /etc/nsswitch.conf 的顺序查询。
passwd:指定要查的数据库是“账户数据库”(等价于传统的 /etc/passwd)。

显示模式

查看已安装的桌面环境

sh
ls /usr/share/xsessions/

切换回文本模式

sh
sudo systemctl set-default multi-user.target
sudo reboot

查看默认的显示管理器

sh
ls -l /etc/systemd/system/display-manager.service

服务器相关操作

跨服务器深度拷贝(假设10.2.7.56拷贝到10.2.7.113)(root表示目标服务器用root账号登录)

sh
scp -r 需要拷贝的目录 root@10.2.7.113:拷贝到的位置

用cat写入文件

sh
cat << EOF > hello.yaml
# 配置内容
EOF
  • cat: 用于读取或创建文件的命令
  • <<: 这是一个重定向操作符,表示后面跟着的是一个"here document"
  • EOF: 是一个标记,表示文档的开始和结束。你也可以使用其他标记,如 END
  • : 重定向操作符,将输出写入文件

  • hello.yaml: 目标文件名

清理文件

查找并删除重复文件或旧文件(查找大于100MB的文件)

sh
sudo find / -type f -size +100M -exec ls -lh {} \;

检查用户目录空间占用

sh
du -h /home/* --max-depth=1 | sort -rh

查看日志占用的磁盘空间

sh
sudo journalctl --disk-usage

如果您想要更改日志的最大限制,可以编辑配置文件

sh
sudo vi /etc/systemd/journald.conf
  • SystemMaxUse=: 限制日志总大小
  • SystemKeepFree=: 保持可用空间
  • MaxRetentionSec=: 日志保留时间 修改配置后需要重启journald服务
sh
sudo systemctl restart systemd-journald

查看系统中所有进程

sh
ps aux

常用组合

sh
# 查看特定进程
ps aux | grep nginx

# 按 CPU 使用率排序
ps aux --sort=-%cpu

# 按内存使用率排序
ps aux --sort=-%mem

# 只看当前用户的进程
ps ux

调整设置

设置主机名

sh
hostnamectl set-hostname 新主机名

启动项位置

sh
cd /etc/xdg/autostart

使用 nvidia-xconfig 生成基础显示配置

sh
nvidia-xconfig --allow-empty-initial-configuration

openeular

安装nvidia驱动

注意

以730显卡为例

禁用 Nouveau

创建黑名单文件来禁用 Nouveau

sh
sudo bash -c 'cat > /etc/modprobe.d/blacklist-nouveau.conf << EOF
blacklist nouveau
options nouveau modeset=0
EOF'

重新生成 initramfs

sh
# 对于 openEuler 系统
sudo dracut --force

确认 nouveau 配置已经被添加

sh
cat /etc/modprobe.d/blacklist-nouveau.conf

重启系统

sh
sudo reboot

系统重启后,确认 Nouveau 已被禁用

sh
lsmod | grep nouveau

安装必要的编译工具和内核头文件

sh
sudo yum groupinstall "Development Tools"

sudo yum install -y kernel-devel kernel-headers gcc make dkms

安装对应的内核开发包

sh
sudo yum install -y kernel-devel-$(uname -r) kernel-headers-$(uname -r)

安装其他必要的开发工具

sh
sudo yum groupinstall "Development Tools"
sudo yum install -y gcc make dkms

验证内核开发包是否正确安装

sh
ls -l /usr/src/kernels/$(uname -r)

开始安装驱动

找到驱动对应的版本 Unix Drivers | NVIDIA

执行下述命令安装即可

sh
# 进入下载目录
cd /home/NVIDIA

# 删除旧的驱动文件
sudo rm -f NVIDIA-Linux-x86_64-*.run

# 下载最新的 470.xx 系列驱动
wget https://us.download.nvidia.com/XFree86/Linux-x86_64/470.256.02/NVIDIA-Linux-x86_64-470.256.02.run

# 添加执行权限
sudo chmod +x NVIDIA-Linux-x86_64-470.256.02.run

# 安装驱动
sudo ./NVIDIA-Linux-x86_64-470.256.02.run --no-cc-version-check

选项如下 DKMS 会自动在内核更新时重新编译 NVIDIA 驱动模块 如果您使用的是服务器环境,主要用于 Docker 和 GPU 计算,不运行需要 32 位支持的应用程序,不需要运行 32 位的游戏或图形应用,就选 等待直至安装完成 对于服务器环境,特别是用于 Docker 和 GPU 计算的环境,不需要配置 X 服务器,选 重启并验证是否安装成功

sh
# 重启系统
sudo reboot
sh
# 验证驱动安装
nvidia-smi

看到这样的界面,即为安装成功

安装 NVIDIA Container Toolkit

sh
# 添加 NVIDIA 容器工具包仓库
curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
  sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo

# 安装 NVIDIA Container Toolkit
sudo yum clean all
sudo yum install -y nvidia-container-toolkit nvidia-container-runtime

配置 Docker 运行时

sh
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

测试 GPU 在 Docker 中是否正常工作

sh
# 运行一个测试容器
docker run --rm --gpus all nvidia/cuda:11.4.0-base nvidia-smi

安装桌面

GNOME

安装 GDM

sh
# 安装 GDM
dnf install gdm -y

# 禁用 lightdm
systemctl disable lightdm

# 启用 GDM
systemctl enable gdm

创建一个最小化的 X 配置

sh
cat > /etc/X11/xorg.conf << EOF
Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
EndSection

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    DefaultDepth    24
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection
EOF

确保 NVIDIA 驱动正确加载

sh
# 检查 NVIDIA 模块是否加载
lsmod | grep nvidia

# 如果没有加载,加载模块
modprobe nvidia

# 检查 NVIDIA 驱动状态
nvidia-smi

使用GNOME桌面

sh
# 停止当前的 UKUI 会话
sudo systemctl stop lightdm

# 禁用 UKUI
sudo systemctl disable lightdm

# 启用并启动 GNOME 的显示管理器
sudo systemctl enable gdm
sudo systemctl start gdm

ukui

安装ukui

sh
sudo dnf update
sudo dnf install ukui
systemctl set-default graphical.target
reboot

如果不行,完全移除 X 配置,让系统自动检测

sh
rm /etc/X11/xorg.conf

使用ukui桌面

sh
# 停止当前的 GNOME 会话
sudo systemctl stop gdm

# 禁用 GDM
sudo systemctl disable gdm

# 启用并启动 UKUI 的显示管理器
sudo systemctl enable lightdm
sudo systemctl start lightdm

卸载lightdm

sh
# 首先停止并禁用 lightdm 服务
systemctl stop lightdm
systemctl disable lightdm

# 删除 lightdm 包及其依赖
dnf remove lightdm lightdm-gtk-greeter lightdm-gtk3-greeter

# 删除配置文件
rm -rf /etc/lightdm
rm -f /etc/systemd/system/display-manager.service.wants/lightdm.service
rm -f /etc/systemd/system/display-manager.service.requires/lightdm.service

# 清理可能残留的配置文件
rm -f /usr/share/xgreeters/lightdm-gtk-greeter.desktop

# 重新加载 systemd 配置
systemctl daemon-reload

# 确认 gdm 是默认的显示管理器
systemctl status gdm

执行完这些命令后,系统应该只保留 GDM 作为显示管理器。你可以用以下命令验证清理结果

sh
# 检查是否还有 lightdm 相关的包
rpm -qa | grep lightdm

# 检查当前的显示管理器
ls -l /etc/systemd/system/display-manager.service

加快由于图形化显示导致的开机缓慢问题(减少了几秒)

查看启动时间

sh
systemd-analyze
systemd-analyze blame

编辑 GRUB 配置

sh
vim /etc/default/grub

删除GRUB_CMDLINE_LINUX中的这几个内容

text
rhgb quiet

更新 GRUB 配置

sh
grub2-mkconfig -o /boot/grub2/grub.cfg

重启

sh
reboot

远程连接

nomachine

linux

sh
cd /tmp
# 下载
wget https://download.nomachine.com/download/8.16/Linux/nomachine_8.16.1_1_x86_64.rpm

# 安装
dnf install ./nomachine_8.16.1_1_x86_64.rpm

手动配置(因为 openEuler 是基于 RHEL 的)

sh
/usr/NX/scripts/setup/nxserver --install redhat

放开防火墙4000端口

sh
firewall-cmd --permanent --add-port=4000/tcp
firewall-cmd --reload

启动服务

sh
# 启动服务
systemctl start nxserver
# 设置开机自启
systemctl enable nxserver
# 再次检查状态
systemctl status nxserver

windows

点击"添加"新连接
协议:NX
主机:10.2.7.56
端口:4000

使用你的 Linux 用户名和密码登录

xrdp

linux(10.2.7.56)

sh
# 安装 XRDP
dnf install xrdp

# 启动 XRDP 服务并设置开机自启
systemctl enable xrdp
systemctl start xrdp

# 检查 XRDP 状态
systemctl status xrdp

# 开放防火墙端口
firewall-cmd --permanent --add-port=3389/tcp
firewall-cmd --reload

windows(10.2.7.118)

  • 按 Win + R 打开运行
  • 输入 mstsc 打开远程桌面连接
  • 在连接地址中输入:10.2.7.56
  • 输入 Linux 系统的用户名和密码

切换桌面

查看已安装的桌面

sh
ls /usr/share/xsessions/

这里我安装了2个桌面(GNOMEUKUI

text
gnome-custom-session.desktop  gnome.desktop  gnome-xorg.desktop  ukui.desktop