生活随记生活随记
2026-06-01

三尺天地,十年周旋

![7c8c2d4cdb3b4cd1b5b16736f5dd2a5d.png](https://yzhthinking.top/files/92f46b3019ec481b93471a53a1b4e80e.png) > *十年光阴,它围着磨盘不停奔走。* > *在日复一日的轮回里,以为练就了一身本领。* > *缰绳松落,自由降临。* > *可当脚步离开熟悉的磨坊,才发现双脚早已习惯原地盘旋。* > *云端的老鹰发出轻叹:* > *你总以为走了很远的路,* > *却不知,目光与脚步,从未离开这三尺之地。* > *它高声辩驳,诉说朝夕的辛劳与滚烫的汗水。* > *风里传来回应,清醒而残酷:* > **岁月的长度,撑不起阅历的厚度** > **在封闭的方寸之间反复演练** > **学到的,从不是突破,只是重复** > *十年辛劳,终究只活成了磨盘旁,最尽职的模样*

技术笔记技术笔记
2026-05-28

Linux系统学习

##### Linux 系统目录介绍 ```bash # Bingary的缩写,存放可执行命令(二进制程序) /bin # 存放启动Linux时使用的一些核心文件,系统内核,引导文件(不要动) /boot # Device的缩写,存放的是Linux的外部设备 /dev # 存放系统管理所需要的所有配置文件和子目录 /etc # 用户的主目录,Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的 /home # 存放着系统最基本的动态连接共享库,作用类似Windows里额DLL文件(不要动) /lib 或者 /lib64 # 一般情况下是空的,当系统非法关机后,存放一些文件(存放突然关机的一些文件) /lost+found # 用于挂载外接存储,硬盘,U盘 /media 系统自动挂载,/mnt手动临时挂载 /media 或 /mnt # 用来存放一些临时文件,系统会自动定期清理 /tmp # 非常重要的目录,用户的很多应用程序和文件放在这个目录下,类似于Windows下的program files目录 /usr # 服务数据目录,存放网站,FTP,文件服务等对外提供服务的数据 /srv # 和/bin相同,存放可执行命令(二进制程序) 管理员专用命令,普通用户无权执行 /sbin # 该目录为系统管理员,也被称为超级权限者的用户主目录 /root # 大型第三方软件(部分数据库,运维面板),独立程序放这里 /opt # 虚拟目录,用于管理硬件,内核参数,调整硬件,驱动,系统内核配置用 /sys # 该目录是一个虚拟目录,它是系统内存的映射,可以通过访问该目录来获取系统信息 /proc # 存放不断变化的数据(运行中产生的文件,日志,缓存,数据库数据),服务器故障排查高频目录 /var # 临时文件系统,存储系统启动以来的信息,系统重启后,这个目录下的文件应该被删除 /run # 存放系统预装软件,第三方程序,库,帮助文档 /usr ``` ##### Linux 命令 * 系统命令 ```bash #将数据由内存同步到硬盘中 sync # 关机指令 shutdown # 关机 shutdown -h 10 # 10分钟后关机 shutdown -h now # 立马关机 shutdown -h 10:30 # 系统在今天10:30关机 shutdown -h +10 # 十分钟后关机 shutdown -r now # 立马重启 shutdown -r +10 # 10分钟后重启 reboot # 重启 halt # 关闭系统 top # 实时查看进程,cpu,内存 (按p按cpu排序) htop # 彩色升级版top(更直观) ps aux # 列出所有进程 kill 进程PID # 正常结束进程 kill -9 进程PID # 强制杀死进程 pidof redis-server # 查看redis进程PID free -h # 查看内存,交换空间使用 df -h # 查看磁盘分区占用 du -sh 目录 # 查看单个目录总大小 du -h # 查看当前目录各文件大小 sar -u # 查看历史CPU占用 dmesg # 查看内核日志(死机,OOM报错) journalctl -xe # 查看系统服务日志 ip a # 查看网卡,IP地址 hostname -I # 快速查看本机外网IP ping 域名/IP # 测试网络连通 curl 网址 # 访问网址,测试端口连通 netstat -tulpn # 查看监听端口,占用端口的进程 ss -tulpn # 新版推荐,替代netstat ufw status # 查看防火墙状态 ufw allow 端口/tcp # 放行端口 ufw deny 端口/tcp # 禁止端口 systemctl start 服务名 # 启动服务 systemctl stop 服务名 # 停止服务 systemctl restart 服务名 # 重启服务 systemctl status 服务名 # 查看服务状态 systemctl enable 服务名 # 设置开机自启 systemctl disable 服务名 # 取消开机自启 ssh 用户名@服务器IP # 远程登录服务器 ssh -p 端口 用户名@IP # 指定端口登录 scp 本地文件 用户名@IP:目标路径 # 本地传输文件到服务器 scp 用户名@IP:服务器文件 本地路径 # 服务器文件下载到本地 clear # 清屏 history # 查看执行过的历史命令 exit # 退出终端/退出ssh ``` * 目录文件命令 ``` # 切换目录 cd /home # 切换到home目录下 cd .. # 返回上一个目录 cd ~ # 回到当前用户家目录 cd - # 回到上一次所在目录 ls # 平铺列出当前目录下的文件/文件夹 ls -a # 列出所有文件,包括隐藏文件 ls -l # 以列表形式展示,并且展示详细信息(权限,大小,时间) ls -lh # 人性化显示文件大小(以M显示文件大小,便于理解) pwd # 展示当前所在的目录路径 mkdir 文件夹名 # 创建目录 mkdir -p 文件夹名 # 可以递归创建多级目录 mkdir a/b/c/d/e rmdir # 删除目录(只能删除空目录) rmdir -p # 同理,递归删除目录 cp 源文件 目标路径 # 复制目录或文件 cp -r 源文件 目标路径 # 复制整个文件夹 rm # 删除文件或目录 rm -f # 忽略不存在的文件,不会出现警告,强制删除 rm -r # 递归删除 rm -rf # 强制删除,不询问 rm -i # 互动,删除询问是否删除 mv 源文件 目标 # 移动文件或目录 或者重命名文件 cat 文件名 # 一次性查看整个文件 less 文件名 # 分页查看(上下滚动,q退出) head 文件名 # 查看文件前10行 tail 文件名 # 查看文件后10行 tail -f 文件名 # 实时跟踪文件 nano 文件名 # 简易编辑 vim 文件名 # 高级编辑器 find / -name "文件名" # 从根目录全局查找文件 find /home -name "*.log" # 查找/home目录下所有.log日志文件 grep "关键字" 文件名 # 在文件中搜索关键词 grep -i "关键词" 文件名 # 忽略大小写搜索 grep -r "关键词" /目录 # 递归搜索整个目录下包含关键词的文件 tar -zxvf 压缩包.tar .gz 目录/文件 # 压缩 tar -zxvf 压缩包.tar .gz # 解压 # zip格式的压缩和解压 zip 压缩包名.zip 文件/目录 unzip 压缩包名.zip ``` * 用户,权限指令 ``` whoami # 查看当前登录用户 useradd 用户名 # 添加用户 passwd 用户名 # 设置/修改密码 userdel 用户名 # 删除用户 su root # 切换到root用户 sudo 命令 # 临时用管理员权限执行 # -rw-rw-r-- 1 root root 0 May 27 17:56 1.txt # 通过ls列举的文件开头10个字符代表的含义 例如dr-xr-xr-x # 开头第一个字符为d代表文件夹, # l代表链接(相当于windows中的快捷方式) # - 横杠代表文件 # 后面9个字符是权限信息,分成3组,每组三个字符,均由rwx组成 # r代表可读,w代表可写,x代表可执行,如果没有权限用-横杠标识 # 第一组代表的是当前用户的权限,第二组代表用户组的权限,第三组代表其他用户的权限 chgrp # 更改文件属于哪个用户组 chgrp [-R] 属组名 文件名 # -R 递归修改文件属组,该目录下所有文件属组都会修改 chown # 更改文件属于哪个用户 chown [-R] 属主名 文件名 chown [-R] 属主名:属组名 文件名 # 也可以同时修改文件属组 chmod [-R] xyz 文件/目录 # 更改文件属性 # 文件的权限可以用字母rwx,也可以用数字,r:4,w:2,x:1 # 例如修改文件的权限 chmod rwx 1.txt 也可以写成chmod 777 1.txt # 7代表r,w,x,三种权限的数值相加 ```

标签Linux
技术笔记技术笔记
2026-05-22

Ubuntu服务器部署

## ✍️ Ubuntu 服务器上部署个人网站 ##### 1. 首先切换到 root 超级管理员用户,输入管理员密码 ```bash su root ``` ##### 2. 创建用户,设置密码,赋予 sudo 权限,切换到这个用户 ```bash adduser username usermod -aG sudo username su - username ``` ##### 3. 更新软件包 ```bash sudo apt update && sudo apt upgrade -y ``` ##### 4. 在 home 目录下创建文件夹,用于存储项目文件 ```bash mkdir -p /app/backend mkdir -p /app/frontend ``` ##### 5. 安装环境 ```bash # 安装build-essential,curl,git,vim编辑器 sudo apt install -y build-essential curl git vim # Linux可能内置python,先查看有没有python,有则跳过这一步 sudo apt install -y python3 python3-pip python3-venv # 安装nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash # nvm变量写入系统变量,执行后使nvm命令生效 source ~/.bashrc # 安装nodejs nvm install 22.14.0 # 使用22.14.0版本的node nvm use 22.14.0 # 全局安装pm2进程管理器 npm install -g pm2 # 设置pm2自动开机启动,执行命令后会生成一条命令,然后复制生成的命令执行即可 pm2 startup ``` ##### 6. 安装和配置 MySql ```bash # 安装MySQL sudo apt install -y mysql-server # 启动并设置开机自启 sudo systemctl start mysql sudo systemctl enable mysql # 查看mysql运行状态 sudo systemctl status mysql # 1. 安全初始化 sudo mysql_secure_installation # 1) 启动密码验证强度 N # 2) 设置root密码 Y 可能没有这一步 # 3) 移除匿名用户 Y # 4) 禁止root远程登录 Y # 5) 移除test数据库 Y # 6) 重新加载权限表 Y # 2. 登录MySQL # 执行后输入刚才设置的密码 sudo mysql -u root -p # 如果上面没有设置密码,则执行sudo mysql # 然后再给root用户设置密码 # ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码'; # 刷新权限 # FLUSH PRIVILEGES; # 退出 # exit; # 3. 创建数据库 创建用户 授权该用户 刷新权限 退出 CREATE DATABASE my_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; # 创建用户(只允许本地访问,更安全)如果想远程连接数据库 localhost设置成%即可 CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY '你的强密码'; # 授权该用户拥有 my_db 全部权限 GRANT ALL PRIVILEGES ON my_db.* TO 'myapp_user'@'localhost'; # 刷新权限 FLUSH PRIVILEGES; # 退出 exit; # 4. 测试连接 mysql -u myapp_user -p -h localhost my_db # 以下配置是开放MySQL远程连接 # 1. 放行防火墙端口 3306 sudo ufw allow 3306/tcp sudo ufw reload # 2. 修改配置文件 sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf # 找到bind-address = 127.0.0.1 后面地址改为 0.0.0.0 # 3. 重启MySQL sudo systemctl restart mysql ``` ##### 7. 安装 Redis 和配置 Redis ```bash sudo apt update sudo apt install -y redis-server sudo systemctl status redis-server sudo vim /etc/redis/redis.conf # 让 systemd 管理(Ubuntu 必须) supervised systemd # 设置密码(最重要) requirepass foobared 改成 requirepass 你的Redis密码 # 保护模式(有密码可关闭,无密码必须开) protected-mode yes # 允许本地访问(安全) bind 127.0.0.1 ::1 bind 127.0.0.1 # 除非你要外网连 Redis,否则千万别改成 0.0.0.0,非常危险! # 关闭危险模式 protected-mode yes # 禁止外网访问(推荐) daemonize yes # 重启 Redis 让配置生效 sudo systemctl restart redis-server # 测试 Redis 是否正常 redis-cli # 进入后输入 auth 你的Redis密码 set test 123 get test # 能拿到 123 就说明正常 # 开机自启(服务器必开) sudo systemctl enable redis-server # 如果需要远程连接 Redis(不推荐暴露公网) sudo vim /etc/redis/redis.conf 把 bind 127.0.0.1 改成 bind 0.0.0.0 # 防火墙放行 6379 端口 sudo ufw allow 6379/tcp # 重启 sudo systemctl restart redis-server ``` ##### 8. 安装和配置 Nginx ```bash sudo apt install -y nginx # 启动并设置开机自启 sudo systemctl start nginx sudo systemctl enable nginx # 创建项目站点配置文件 sudo vim /etc/nginx/sites-available/app # 配置代码 server { listen 80; server_name xxx.com; location / { proxy_pass http://127.0.0.1:3000; # 前端端口 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } location /api/v1 { proxy_pass http://127.0.0.1:8000; # 后端端口 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } # 启用站点 sudo ln -s /etc/nginx/sites-available/app /etc/nginx/sites-enabled/ # 删除默认配置 sudo rm /etc/nginx/sites-enabled/default # 测试语法 sudo nginx -t # 如果输出 syntax is ok 则继续 # 重启Nginx sudo systemctl reload nginx # 访问网站,如果出现nginx,则说明nginx代理成功 # Nginx隐藏版本号 sudo vim /etc/nginx/nginx.conf # 修改下面内容 http { # 隐藏版本号 server_tokens off; ...原有配置不变 } # 测试 sudo nginx -t # 重启nginx sudo systemctl reload nginx ``` ##### 9. 配置 Git 拉取项目源代码(可选) ```bash ssh-keygen -t ed25519 -C "你的GitHub邮箱" # 如果提示不支持 ed25519,用这个: ssh-keygen -t rsa -b 4096 -C "你的GitHub邮箱" # 输出密钥后复制 cat ~/.ssh/id_ed25519.pub # 打开 GitHub → 右上角头像 → Settings,左侧 SSH and GPG keys # 点 New SSH key,Title 随便填(如:我的电脑),Key 类型选 Authentication key # 把刚才复制的公钥粘贴进去,点 Add SSH key # 测试连接github ssh -T git@github.com git clone git@github.com:用户名/仓库名.git # python创建虚拟环境 sudo python3 -m venv .venv # 激活虚拟环境 source .venv/bin/activate # 安装依赖 pip install -r requirements.txt ``` ##### 10. 配置 pm2 运行项目 ```bash # fastapi项目虚拟环境中执行 pm2 start "uvicorn main:app --host 0.0.0.0 --port 8000" --name "fastapi" # nextjs项目运行 # 打包 npm run build # 启动项目 pm2 start "npm start" --name "nextjs" ``` ##### 11. 配置 HTTPS  SSL证书 (免费) ```bash # 安装 Certbot apt install certbot python3-certbot-nginx # 获取 SSL 证书,自动配置 Nginx certbot --nginx -d your_domain.com # 测试自动更新功能,以确保证书定期更新 certbot renew --dry-run ```

标签Linux