Linux笔记
# 系统安装
安装系统至少需要分配三个分区
| 分区 | 分区名 | 分区类型 | 文件系统 |
|---|---|---|---|
/boot | 引导分区,建议1GB | 主分区 | ext4 |
swap | 交换分区,按需分配 | 主分区 | 无 |
/ | 根目录,新手建议剩余全部 | 主分区 | ext4 |
# 系统信息查看
# 架构信息
通过uname -m命令查看系统架构信息,然后在下面的表格中找到对应的架构信息
uname -m
x86_64
| 输出 | 架构 |
|---|---|
| i386, i686 | i386 |
| x86_64 | amd64 |
| arm, arme | arm_garbage |
| armv7l, armhf | armv7 |
| aarch64, armv8l | arm64 |
| mips | mips |
| mips64 | mips64 |
# 硬件信息
CPU型号核心数
lscpu
架构: x86_64
CPU 运行模式: 32-bit, 64-bit
Address sizes: 46 bits physical, 48 bits virtual
字节序: Little Endian
CPU: 4
在线 CPU 列表: 0-3
厂商 ID: GenuineIntel
型号名称: Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz
CPU 系列: 6
型号: 79
每个核的线程数: 1
每个座的核数: 4
......
内存信息
其中manufacturer代表厂商,part number代表型号规格,speed代表频率和速度
dmidecode -t memory
# dmidecode 3.3
Getting SMBIOS data from sysfs.
SMBIOS 2.8 present.
Handle 0x1000, DMI type 16, 23 bytes
Physical Memory Array
Location: Other
Use: System Memory
Error Correction Type: Multi-bit ECC
Maximum Capacity: 4 GB
Error Information Handle: Not Provided
Number Of Devices: 1
Handle 0x1100, DMI type 17, 40 bytes
Memory Device
Array Handle: 0x1000
......
# 资源使用情况
# CPU和内存
CPU内存使用情况可以通过top命令查看,也可以使用增强版的htop命令,top命令是系统自带的,htop命令可能需要额外安装
# 执行top命令的打印
top
top - 18:02:58 up 2 days, 2:24, 1 user, load average: 0.73, 0.25, 0.14
任务: 204 total, 1 running, 203 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.5 us, 2.9 sy, 0.0 ni, 95.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 3904.5 total, 1026.5 free, 1412.3 used, 1465.7 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 2219.2 avail Mem
进程号 USER PR NI VIRT RES SHR %CPU %MEM TIME+ COMMAND
# 汉化top命令打印结果
top
top - 18:02:58 已运行 2 天, 2:24, 1 用户, 平均负载: 0.73, 0.25, 0.14
任务: 204 总数, 1 运行中, 203 睡眠中, 0 已停止, 0 僵尸进程
%Cpu(s): 1.5 用户态, 2.9 系统态, 0.0 改变过优先级, 95.6 空闲, 0.0 等待IO, 0.0 硬中断, 0.0 软中断, 0.0 虚拟机时间
MiB 内存 : 3904.5 总数, 1026.5 空闲, 1412.3 已使用, 1465.7 缓存
MiB 交换空间: 0.0 总数, 0.0 空闲, 0.0 已使用. 2219.2 可用内存
进程号 用户 优先级 改变过优先级 虚拟内存 实际内存 共享内存 CPU占用率 内存占用率 运行时间 命令
# 实时网速
查看实时网速需要使用ifstat命令,直接输入即可,如果命令不存在可以apt安装
# 安装ifstat命令
sudo apt install -y ifstat
# 直接使用ifstat就可以查看网速,但是一般建议搭配参数使用,效果更好
ifstat -S -i eth0 -t 1
-S:行内刷新,默认打印网速是一行一行打印的,很快铺满屏幕
-i:查看指定网卡网速,默认打印所有网卡的网速信息
-t:指定刷新频率/秒,默认网速是每秒钟更新一次,
# 硬盘存储
# 硬盘分区信息查看,使用参数可查看分区UUID
lsblk
-a:显示所有设备(包括未挂载的)
-f:显示UUID以及分区使用情况
-t:显示设备的拓扑关系
-p:显示文件系统
-J:以JSON格式显示
# 查看挂载点使用情况
df -h
-a:显示所有挂载点
-h:以可读的存储单位显示(KB,MB,GB)
# 查看目录/文件使用情况
du -ah --max-depth=1
-h:以可读的存储单位显示(KB,MB,GB)
-s:查看当前目录总占用大小
-a:查看文件,默认只查看目录,不可与-s同时使用
--max-depth:统计深度
--exclude:排除条件
# SSH相关配置
启用Root用户SSH远程
# 编辑配置文件
vim /etc/ssh/sshd_config
# 找到PermitRootLogin解开注释并修改为yes
略
# 重启sshd服务
systemctl restart sshd
修改SSH端口号
# 编辑配置文件
vim /etc/ssh/sshd_config
# 找到Port属性解开注释修改为合适的端口号,注意防火墙放行端口
略
# 切记先放行防火墙,然后重启sshd服务
# systemctl daemon-reload
systemctl restart ssh
SSH连接慢
# 编辑配置文件
vim /etc/ssh/sshd_config
# 将GSSAPIAuthentication 设置未no,同时添加UsePAM no 、UseDNS no这两项
GSSAPIAuthentication no
UsePAM no
UseDNS no
# 重启sshd服务
systemctl restart sshd
SSH端口转发
将本地的某个端口映射到远程服务器上
PS:XShell 用户可以在连接→SSH→隧道中添加一个**本地(拨出)**的转移规则,效果是一样的
# 将本地的7897端口映射到远程服务器的7897端口上(前面是服务器,后面是本机地址)
ssh -R 7897:127.0.0.1:7897 root@123456789
# 通常需要配合EXPORT一起使用(方便得很 嘿嘿)
export HTTP_PROXY="http://127.0.0.1:7897"
export HTTPS_PROXY="http://127.0.0.1:7897"
export ALL_PROXY="socks5://127.0.0.1:7897"
# VIM编辑器
快捷键
# gg跳转文件开头,G跳转文件结尾,10G跳转第10行
# 复制行:yy,复制5行:5yy
# 删除行:dd,删除5行:5dd
# 粘贴复制的行:p
# 回退到上一步:u
# 撤销上一步的回退:Ctrl + R
指令
# 显示/关闭行号
:set nu
:set nonu
# 开启/关闭自动缩进
:set paste
:set nopaste
# 替换内容,带%表示全文,不带%表示当前行
%s/aaa/bbb/g
# 查找内容,快捷键n为下一条,N为上一条
/aaa
# 关闭查找高亮
:nohlsearch
关闭自动缩进
有些配置写在VIM配置文件中,例如我个人不喜欢VIM的自动缩进,可以将set paste指令写入配置文件
# 编辑VIM系统配置文件,对所有用户生效
vim /etc/vim/vimrc
# 如果用户目录下有配置文件,也可以修改用户文件仅对当前用户生效
vim ~/.vimrc
解决VIM中文乱码
# 编辑VIM系统配置文件,对所有用户生效
vim /etc/vim/vimrc
# 加入下面这段内容
set termencoding=utf-8
set encoding=utf8
set fileencodings=utf8,ucs-bom,gbk,cp936,gb2312,gb18030
关闭VIM可视化鼠标事件
# 移动到该目录,然后查看该目录的文件信息
cd /usr/share/vim
ll
总计 12
drwxr-xr-x 2 root root 4096 5月 4日 10:24 addons
drwxr-xr-x 2 root root 4096 5月 4日 10:24 registry
drwxr-xr-x 18 root root 4096 8月23日 04:44 vim90
# 该目录下有个vim开头的目录,我这里是vim90,移动到该目录下
cd vim90
# 编辑defaults.vim文件
vim defaults.vim
# 在文件中找到if has('mouse')命令,注释相关代码即可
"if has('mouse')
" if &term =~ 'xterm'
" set mouse=a
" else
" set mouse=nvi
" endif
"endif
# 文件权限管理
权限顺序:所有者(Owner / u)、所属组(Group / g)、其他用户(Others / o)
权限数值:读取(Read / 4)、写入(Write / 2)、执行(Execute / 1)
权限管理
chmod u+r file.txt # 给所有者添加读权限
chmod g-w file.txt # 移除所属组的写权限
chmod o=x file.txt # 设置其他用户的权限为仅执行
chmod a+rw file.txt # 给所有用户添加读写权限
chmod 751 file.txt # 所有者全部权限,同组读取执行权限,其他用户执行权限,
chmod 755 ./java -R # 所有者全部权限,同组及其他用户读取执行权限,对该目录及所有子文件生效
文件管理
chown zhang file.txt # 所有者改为zhang
chown zhang:zhang file.txt # 所有者改为zhang,所属组更改为zhang
chown :zhang file.txt # 所属组更改为zhang
chown root:root ./java -R # 将该目录及所有子文件所属用户和所属组修改为root
# 长命令起别名
Debian系用户配置文件为~/.bashrc,全局配置文件为/etc/bash.bashrc
# 编辑配置文件
vim /etc/bash.bashrc
# 找到现有alias的位置,在结尾添加下面这段内容
alias ll='ls -lhF'
alias rm='rm -i'
alias dk='docker'
alias dkc='docker compose'
alias docker-compose='docker compose'
alias rtnet='ifstat -S -i eth0 -t 1'
# 更新配置文件
source /etc/bash.bashrc
# 常用命令
这里记录一些常用的命令,用的时候方便查阅
# 查找命令
# find 范围 选项 选项值
# 从根目录内查找名字为 1.txt 的文件
find / -name 1.txt
# 查找/opt目录下大于100MB的文件
find /opt -type f -size +100M
# locate 查找条件
# 查找 1.txt 文件
locate 1.txt
# 长时间未使用locate需要更新数据库
updatedb
# 命令不存在可以安装mlocate或者locate软件包
# 配置代理
命令行代理
# 查看代理
echo $http_proxy
echo $https_proxy
echo $ftp_proxy
echo $no_proxy
# 设置代理
export http_proxy="http://127.0.0.1:7897"
export https_proxy="http://127.0.0.1:7897"
export ftp_proxy="http://127.0.0.1:7897"
export no_proxy="localhost,127.*,192.168.*,10.*,172.16.*,172.17.*,172.18.*,172.19.*,172.20.*,172.21.*,172.22.*,172.23.*,172.24.*,172.25.*,172.26.*,172.27.*,172.28.*,172.29.*,172.30.*,172.31.*"
# 如果代理地址需要授权
export http_proxy="http://username:password@127.0.0.1:7897"
# 清空代理
unset http_proxy
unset https_proxy
unset ftp_proxy
unset no_proxy
APT 包管理器代理
编辑/etc/apt/apt.conf配置文件,用于查看、设置、删除代理
Acquire::http::Proxy "http://127.0.0.1:7897";
Acquire::https::Proxy "http://127.0.0.1:7897";
# 文件上传下载
建议自己备一份 Debian 和 RedHat 的lrzsz安装包用此命令上传后安装,防止电脑无法安装 XFTP 的情况,文件命名最好避免中文名称,防止文件上传后出现乱码现象
# 将本地文件上传至服务器
scp /路径/文件名 用户名@远程服务器:/路径/文件名
# 反之则是将服务器文件下载至本地
scp 用户名@远程服务器:/路径/文件名 路径/文件名
# 指定ua下载互联网上的文件(经测试 wget 有效,curl 无效)
wget --user-agent="pan.baidu.com" https://example.com/test.zip -O test.zip
curl -A "pan.baidu.com" -o test.zip https://example.com/test.zip
# 后台运行
# 后台运行,将正常日志打印在info.log,异常日志打印在error.log
nohup java -jar xxx.jar > info.log 2> error.log &
# 后台运行,将所有日志打印在nohup.log
nohup java -jar xxx.jar > nohup.log 2>&1 &
# 后台运行,丢弃日志信息
nohup java -jar xxx.jar > /dev/null 2>&1 &
# 结束进程
# 找到占用该端口号的程序的PID
netstat -apn | grep 端口号
# 根据进程名称查询PID
ps -ef | grep 进程名 | grep -v grep
# 根据PID结束应用程序
kill -9 程序的PID
# 常用脚本
# 百度网盘直连下载
可以将该脚本保存到服务器后,在/usr/local/bin目录下创建快捷方式方便调用
ln -s /opt/programs/pandownload.sh /usr/local/bin/pandownload
Tips:Windows 系统可直接使用 Motrix 下载,支持指定 UA 和代理地址
脚本代码
#!/bin/bash
echo "====== 百度网盘文件下载工具 ======"
# 获取URL输入
read -p "请输入URL: " url
# 验证URL是否为空
if [ -z "$url" ]; then
echo "错误:URL不能为空!"
exit 1
fi
# 从URL中提取默认文件名
url_without_params=${url%%\?*}
url_without_params=${url_without_params%%#*}
default_filename=$(basename "$url_without_params")
# 获取文件名输入
read -p "请输入文件名(留空则使用 ${default_filename}): " filename
# 如果用户没有输入文件名,使用默认文件名
if [ -z "$filename" ]; then
filename="$default_filename"
fi
# 校验当前目录下是否已存在同名文件
if [ -e "./$filename" ]; then
echo "文件 '$filename' 在当前目录下已存在,停止运行。"
exit 1
fi
# 询问是否使用代理
read -p "是否使用HTTP代理(留空则不使用): " proxy
read -p "确认开始下载?(回车开始下载,输入n取消): " confirm
if [ -z "$confirm" ] || [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
echo "开始下载..."
# 执行下载命令
if [ -z "$proxy" ]; then
wget --no-check-certificate --user-agent="pan.baidu.com" "$url" -O "$filename"
else
wget --user-agent="pan.baidu.com" \
-e use_proxy=yes \
-e http_proxy="$proxy" \
-e https_proxy="$proxy" \
"$url" -O "$filename"
fi
# 检查下载是否成功
if [ $? -eq 0 ]; then
echo "下载完成!文件保存在 $filename"
else
echo "下载失败!请检查URL和网络连接。"
exit 1
fi
else
echo "下载已取消。"
exit 0
fi
# Clash & Mihomo 管理脚本
Clash & Mihomo 管理脚本,包括启动、停止程序,以及防火墙的开放与关闭
#!/bin/bash
# --- 配置部分 ---
MIHOMO_BIN="/opt/programs/mihomo/mihomo"
MIHOMO_CONF_DIR="/opt/programs/mihomo/config"
MIHOMO_CMD="$MIHOMO_BIN -d $MIHOMO_CONF_DIR"
# 颜色定义,为了显示更直观
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 检查是否以 root 权限运行
if [ "$EUID" -ne 0 ]; then
echo -e "${RED}请使用 sudo 或 root 权限运行此脚本。${NC}"
exit 1
fi
# --- 功能函数 ---
# 1. 启动程序
start_mihomo() {
# 检查进程是否存在
if pgrep -f "$MIHOMO_CMD" > /dev/null; then
echo -e "${YELLOW}提示:Mihomo 已经在运行中,无需再次启动。${NC}"
else
# 检查文件是否存在
if [ ! -f "$MIHOMO_BIN" ]; then
echo -e "${RED}错误:找不到文件 $MIHOMO_BIN${NC}"
return
fi
echo "正在后台启动 Mihomo..."
# 使用 nohup 后台运行,并将日志重定向到 /dev/null (或者你可以指定日志文件)
nohup $MIHOMO_CMD > /dev/null 2>&1 &
sleep 1
if pgrep -f "$MIHOMO_CMD" > /dev/null; then
echo -e "${GREEN}Mihomo 已成功启动!${NC}"
else
echo -e "${RED}启动失败,请检查配置文件路径或二进制文件权限。${NC}"
fi
fi
}
# 2. 停止程序
stop_mihomo() {
if pgrep -f "$MIHOMO_CMD" > /dev/null; then
echo "正在停止 Mihomo..."
pkill -f "$MIHOMO_CMD"
echo -e "${GREEN}Mihomo 已停止。${NC}"
else
echo -e "${YELLOW}提示:Mihomo 未运行。${NC}"
fi
}
# 3. 开放指定防火墙规则
open_firewall() {
local port="$1"
local name="$2"
# 检查端口是否已经允许 (ufw status 输出格式比较复杂,这里简单匹配)
if ufw status | grep -q "$port"; then
echo -e "${YELLOW}提示:${name}端口 $port 规则已存在,无需操作。${NC}"
else
echo "正在开放${name}端口 $port ..."
ufw allow $port > /dev/null
echo -e "${GREEN}${name}端口 $port 已开放。${NC}"
fi
echo "${name}防火墙规则刷新完毕。"
}
# 4. 删除指定防火墙规则
close_firewall() {
local port="$1"
local name="$2"
if ufw status | grep -q "$port"; then
echo "正在移除${name}端口 $port 规则..."
ufw delete allow $port > /dev/null
echo -e "${GREEN}${name}端口 $port 规则已移除。${NC}"
else
echo -e "${YELLOW}提示:${name}端口 $port 规则不存在,无需操作。${NC}"
fi
echo "${name}防火墙规则清理完毕。"
}
# --- 主菜单 ---
while true; do
echo "----------------------------------------"
echo " Mihomo 管理脚本 (Ubuntu 24.04) "
echo "----------------------------------------"
echo "1. 启动 mihomo 程序"
echo "2. 停止 mihomo 程序"
echo "3. 开放 7897 网络代理端口"
echo "4. 关闭 7897 网络代理端口"
echo "5. 开放 9090 管理面板端口"
echo "6. 关闭 9090 管理面板端口"
echo "0. 退出脚本"
echo "----------------------------------------"
read -p "请输入数字序号执行对应功能: " choice
case $choice in
1)
start_mihomo
;;
2)
stop_mihomo
;;
3)
open_firewall 7897 "网络代理"
;;
4)
close_firewall 7897 "网络代理"
;;
5)
open_firewall 9090 "管理面板"
;;
6)
close_firewall 9090 "管理面板"
;;
0)
echo "退出脚本。"
exit 0
;;
*)
echo -e "${RED}无效输入,请输入 0-6 之间的数字。${NC}"
;;
esac
echo ""
read -p "按回车键继续..." temp
clear
done