Ubuntu作为最流行的Linux发行版之一,以易用性和稳定性著称。以下从文件系统结构、核心配置文件、常用命令(按场景分类)、实战技巧四个维度展开,覆盖日常运维、开发部署全场景需求。
Ubuntu遵循FHS(Filesystem Hierarchy Standard)文件系统标准,目录功能清晰,核心目录如下:
配置文件优先存放在 /etc,避免修改 /bin//sbin 下的系统命令;
个人文件放在 /home/用户名,避免直接在 / 或 /root 下存放文件;
日志文件统一在 /var/log 查看,无需手动创建;
临时文件放在 /tmp,无需手动清理(系统自动管理)。
/etc/profile 与 ~/.bashrc(环境变量配置)/etc/profile:系统级环境变量配置,对所有用户生效,登录时加载;
常用操作:添加全局环境变量(如 export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64);
~/.bashrc:用户级环境变量配置,仅对当前用户生效,每次打开终端加载;
常用操作:添加别名(如 alias ll='ls -l')、用户专属环境变量;
生效命令:source ~/.bashrc(立即生效)或重启终端。
/etc/passwd 与 /etc/shadow(用户配置)/etc/passwd:用户信息文件(所有用户可读);
格式:用户名:密码占位符:UID:GID:用户描述:家目录:默认shell;
示例:ubuntu:x:1000:1000:Ubuntu User:/home/ubuntu:/bin/bash;
/etc/shadow:用户密码文件(仅root可读,加密存储);
格式:用户名:加密密码:密码过期时间:最小密码长度:警告时间:禁用时间:失效时间;
注意:禁止直接修改,需通过 passwd 用户名 命令修改密码。
/etc/group(用户组配置)存储用户组信息,格式:组名:组密码占位符:GID:组内用户;
常用命令:groupadd 组名(创建组)、usermod -aG 组名 用户名(添加用户到组)。
/etc/network/interfaces(传统网络配置)配置静态IP、网卡信息(Ubuntu 18.04+默认用Netplan,需手动启用);
示例(静态IP配置):
auto ens33 # 开机自动激活网卡
iface ens33 inet static
address 192.168.1.100 # IP地址
netmask 255.255.255.0 # 子网掩码
gateway 192.168.1.1 # 网关
dns-nameservers 8.8.8.8 114.114.114.114 # DNS生效命令:sudo systemctl restart networking。
/etc/netplan/00-installer-config.yaml(Ubuntu 18.04+默认网络配置)YAML格式,配置动态/静态IP,示例(静态IP):
network:
ethernets:
ens33:
addresses: [192.168.1.100/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 114.114.114.114]
version: 2生效命令:sudo netplan apply(立即生效)或 sudo netplan try(测试配置,错误自动回滚)。
/etc/resolv.conf(DNS配置)存储DNS服务器地址,示例:nameserver 8.8.8.8;
注意:Ubuntu 18.04+ 中,该文件由Netplan自动生成,直接修改会被覆盖,需通过Netplan配置。
systemd 管理)Ubuntu 16.04+ 采用 systemd 作为服务管理工具,核心配置文件在 /etc/systemd/system/(自定义服务)和 /lib/systemd/system/(系统默认服务)。
jsherp.service)[Unit]
Description=jshERP Backend Service # 服务描述
After=mysql.service redis-server.service # 依赖服务(先启动依赖再启动当前服务)
[Service]
User=root # 运行用户
WorkingDirectory=/opt/erp/erp-admin/jshERP/lib # 工作目录
ExecStart=/usr/bin/java -jar jshERP.jar # 启动命令
Restart=always # 崩溃自动重启
RestartSec=5 # 重启间隔5秒
LimitNOFILE=65535 # 提高文件句柄限制
[Install]
WantedBy=multi-user.target # 开机自启目标(多用户模式)核心操作:sudo systemctl daemon-reload(重新加载配置)、sudo systemctl enable/start/stop/restart 服务名。
/etc/apt/sources.list)存储Ubuntu软件包下载源地址,决定软件安装速度和版本;
常用操作:
备份默认源:sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak;
替换为国内源(如阿里云、清华源),示例(阿里云源,Ubuntu 20.04):
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse生效命令:sudo apt update(更新源缓存)。
Ubuntu默认使用APT(Advanced Package Tool)管理软件包,无需手动下载依赖,核心命令如下:
systemd 命令)Ubuntu 16.04+ 统一用 systemctl 管理服务,替代传统的 service 命令,核心操作如下:
Ubuntu日志统一存放在 /var/log,常用日志文件及查看命令:
/etc/fstab)编辑 /etc/fstab,添加分区信息(UUID方式,避免设备名变动导致挂载失败):
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /mnt/data ext4 defaults 0 2字段说明:UUID(磁盘唯一标识)、挂载点、文件系统类型、挂载参数、dump备份标记、fsck检查顺序;
生效命令:sudo mount -a(测试配置是否正确,无报错则永久生效)。
Ubuntu默认支持 .tar、.tar.gz、.zip 等格式,核心命令:
选项说明:x(解压到指定目录)、v(显示详细过程)、f(指定文件)、c(压缩)、z(gzip压缩)、j(bzip2压缩)。
crontab)用于周期性执行命令(如备份、日志清理),核心命令:
* * * * * 命令
分 时 日 月 周 (取值范围:分0-59、时0-23、日1-31、月1-12、周0-7,0/7=周日)特殊符号:*(所有值)、/(步长,如 */5 表示每5个单位)、-(范围,如 1-5 表示1到5)、,(多个值,如 1,3,5 表示1、3、5);
示例:
0 3 * * * /opt/erp/backup.sh(每天凌晨3点执行备份脚本);
*/5 * * * * /opt/erp/monitor_services.sh(每5分钟执行服务监控脚本);
0 0 * * 0 /opt/erp/clean_log.sh(每周日0点执行日志清理脚本)。
普通用户无法执行某些命令:在命令前加 sudo(需用户在sudo组);
无法写入文件:用 chmod 调整权限(如 chmod 644 test.txt)或 chown 更改所有者;
执行脚本提示“权限不够”:先给脚本添加执行权限(chmod +x script.sh),再执行(./script.sh)。
测试网络连通性:ping 8.8.8.8(通则网络正常,不通则检查网关/网卡);
检查IP配置:ip addr(确认IP、子网掩码是否正确);
检查DNS:nslookup baidu.com(解析失败则修改 /etc/resolv.conf 或Netplan配置);
检查防火墙:sudo ufw status(如需开放端口,执行 sudo ufw allow 端口号)。
查看服务状态:sudo systemctl status 服务名(看报错信息);
查看详细日志:journalctl -u 服务名 -n 100(定位失败原因);
常见原因:端口占用(sudo ss -tulpn | grep 端口号 查找并 kill -9 PID 终止)、配置文件错误(检查 /etc/服务名 下的配置)、依赖服务未启动(先启动依赖,如MySQL/Redis)。
启用SSH登录(远程管理):sudo apt install openssh-server,配置 /etc/ssh/sshd_config(如禁止root登录、修改端口),重启服务:sudo systemctl restart sshd;
关闭无用服务:sudo systemctl disable 服务名(如 cups 打印机服务、avahi-daemon 零配置服务,根据需求关闭);
定期更新系统:sudo apt update && sudo apt upgrade -y(每月执行一次,修复安全漏洞);
日志轮转:配置 logrotate(Ubuntu默认已启用,可在 /etc/logrotate.d/ 下调整日志保留时间)。
终端快捷键:Ctrl+C(终止当前命令)、Ctrl+D(退出终端)、Ctrl+L(清屏)、Tab(命令/文件名补全);
系统快捷键:Ctrl+Alt+T(打开终端)、Ctrl+Alt+Del(注销/重启)、Win键(打开应用列表)。
Ubuntu文件系统核心是“目录功能分区明确、配置文件集中管理”,重点掌握 /etc(配置)、/var/log(日志)、/home(个人文件)的使用;常用命令围绕“目录文件操作、服务管理、网络配置、日志排查”展开,无需死记硬背,结合实战场景多练习即可熟练。
对于开发部署(如之前的jshERP系统),核心流程是:环境依赖安装(apt install)→ 配置文件修改(/etc)→ 服务注册(systemd)→ 日志监控(tail/journalctl)→ 定时任务(crontab),按此流程可解决大部分部署需求。
如果需要针对特定场景(如Web服务器配置、数据库部署、容器化环境)展开更详细的命令和配置,可随时告知,我会补充专项内容。
核心结论:日常操作以 firewalld 命令为主,涵盖「查看状态、开放端口、重载生效、删除规则」四大核心场景,简单直接好记。
查看防火墙运行状态(关键,先确认是否启动):
sudo systemctl status firewalld启动防火墙:
sudo systemctl start firewalld停止防火墙(临时关闭,重启后恢复):
sudo systemctl stop firewalld设置开机自启防火墙:
sudo systemctl enable firewalld禁止开机自启防火墙:
sudo systemctl disable firewalld# 格式:sudo firewall-cmd --add-port=端口号/协议(tcp/udp)
sudo firewall-cmd --add-port=80/tcp # 临时开放80(HTTP)
sudo firewall-cmd --add-port=443/tcp # 临时开放443(HTTPS)
sudo firewall-cmd --add-port=7000/tcp # 临时开放frps连接端口
sudo firewall-cmd --add-port=20081/tcp # 临时开放TCP穿透端口# 格式:sudo firewall-cmd --add-port=端口号/协议 --permanent
sudo firewall-cmd --add-port=80/tcp --permanent
sudo firewall-cmd --add-port=443/tcp --permanent
sudo firewall-cmd --add-port=7000/tcp --permanent
sudo firewall-cmd --add-port=20081/tcp --permanent# 格式:sudo firewall-cmd --remove-port=端口号/协议 --permanent
sudo firewall-cmd --remove-port=20081/tcp --permanent # 删除20081端口sudo firewall-cmd --reload注意:所有带 --permanent 的命令,必须执行重载才能生效。
查看当前生效的开放端口(临时+永久重载后):
sudo firewall-cmd --list-ports查看永久配置的开放端口(未重载的也会显示):
sudo firewall-cmd --list-ports --permanent查看所有防火墙配置(含端口、服务、规则):
sudo firewall-cmd --list-all永久开放80/443/7000/20081端口 + 重载生效:
sudo firewall-cmd --add-port=80/tcp --permanent
sudo firewall-cmd --add-port=443/tcp --permanent
sudo firewall-cmd --add-port=7000/tcp --permanent
sudo firewall-cmd --add-port=20081/tcp --permanent
sudo firewall-cmd --reload验证端口是否开放成功:
sudo firewall-cmd --list-ports输出含 80/tcp 443/tcp 7000/tcp 20081/tcp 即成功。
要不要我帮你生成一份「防火墙配置快速参考表」,打印出来方便日常查阅?
按功能分类整理,涵盖所有涉及的命令,方便日常直接复制使用:
# 更新系统包
apt update && apt upgrade -y
# 安装JDK 8
apt install -y openjdk-8-jdk
java -version # 验证JDK版本
# 安装MySQL
apt install -y mysql-server
systemctl enable mysql && systemctl start mysql # 开机自启+启动
# 安装Redis
apt install -y redis-server
systemctl enable redis && systemctl start redis # 开机自启+启动
# 安装OpenResty
wget -qO - https://openresty.org/package/pubkey.gpg | apt-key add -
apt-add-repository -y "deb http://openresty.org/package/ubuntu $(lsb_release -sc) main"
apt update && apt install -y openresty
systemctl enable openresty && systemctl start openresty # 开机自启+启动# 登录MySQL(首次无密码直接回车)
mysql -u root -p
# MySQL内部命令(创建数据库/用户/授权)
CREATE DATABASE jsh_erp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'jshuser'@'localhost' IDENTIFIED BY 'jsh123456';
GRANT ALL PRIVILEGES ON jsh_erp.* TO 'jshuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
# 导入SQL脚本(假设脚本路径为/opt/erp/init.sql)
mysql -u jshuser -p'jsh123456' jsh_erp < /opt/erp/init.sql
# MySQL服务管理
systemctl start/stop/restart/status mysql # 启动/停止/重启/查看状态# 设置Redis密码(临时生效,需配置文件持久化)
redis-cli CONFIG SET requirepass 123456
# Redis密码认证
redis-cli -h localhost -p 6379 AUTH 123456
# Redis服务管理
systemctl start/stop/restart/status redis # 启动/停止/重启/查看状态
# 验证Redis连接
redis-cli -h localhost -p 6379 AUTH 123456 # 输出OK则正常# 进入后端目录(核心前提)
cd /opt/erp/erp-admin/jshERP/lib
# 手动启动(带日志持久化)
nohup java -jar jshERP.jar > jsherp.log 2>&1 &
# 终止后端进程(按PID)
sudo kill -9 [PID] # 替换[PID]为实际进程ID
# 终止后端进程(按进程名)
sudo pkill -f jshERP.jar
# 系统服务管理(推荐)
sudo systemctl start jsherp # 启动
sudo systemctl stop jsherp # 停止
sudo systemctl restart jsherp # 重启
sudo systemctl status jsherp # 查看状态
sudo systemctl enable jsherp # 开机自启
sudo systemctl daemon-reload # 重新加载服务配置
# 查看后端进程
ps aux | grep jshERP.jar
# 查看后端系统日志
journalctl -u jsherp -f # 实时跟踪
journalctl -u jsherp -n 100 # 查看最近100行# 进入后端目录(核心前提)
cd /opt/erp/erp-admin/jshERP/lib
# 实时跟踪日志
tail -f jsherp.log
# 查看最近N行日志(替换100为任意数字)
tail -n 100 jsherp.log
# 搜索日志中的错误信息
grep "ERROR" jsherp.log
# 搜索错误并显示行号
grep -n "ERROR" jsherp.log
# 实时跟踪特定关键词日志(如“登录”)
tail -f jsherp.log | grep "登录"
# 查看完整日志(大文件推荐搭配less)
cat jsherp.log
cat jsherp.log | less # 按q退出# 查看指定端口占用(后端9999端口)
sudo netstat -tulpn | grep 9999
# 查看所有端口占用
sudo netstat -tulpn
# 查找进程(按进程名)
ps aux | grep [进程名] # 如 grep java、grep jshERP.jar
# 强制终止进程(按PID)
sudo kill -9 [PID]
# 强制终止进程(按进程名)
sudo pkill -f [进程名] # 如 pkill -f java# 服务管理
systemctl start/stop/restart/status openresty # 启动/停止/重启/查看状态
# 验证配置文件
/usr/local/openresty/nginx/sbin/nginx -t
# 重启OpenResty(配置修改后)
/usr/local/openresty/nginx/sbin/nginx -s reload
# 查看OpenResty日志(自定义日志目录)
tail -f /var/log/jsherp/error.log # 错误日志
tail -f /var/log/jsherp/access.log # 访问日志# 编辑定时任务
crontab -e
# 查看当前用户定时任务
crontab -l
# 添加定时任务(示例:每5分钟执行监控脚本)
(crontab -l 2>/dev/null; echo "*/5 * * * * /path/to/monitor_services.sh") | crontab -
# 添加MySQL备份定时任务(每天凌晨3点)
(crontab -l 2>/dev/null; echo "0 3 * * * /opt/erp/backup.sh") | crontab -
# 删除所有定时任务(谨慎使用)
crontab -r# 创建目录
mkdir -p /opt/erp/backend /opt/erp/dist /opt/erp/backup /var/log/jsherp
# 设置目录/文件权限(读写执行)
chmod -R 755 /opt/erp
chmod +x /opt/erp/backup.sh # 给脚本添加执行权限
chmod -R 777 /var/log/jsherp # 日志目录全权限
# 创建文件(如服务配置文件、脚本文件)
sudo vi /etc/systemd/system/jsherp.service
sudo vi /opt/erp/monitor_services.sh
# 查看目录下文件
ls
ls | grep jsherp.service # 过滤特定文件
# 清空日志文件(需进入对应目录)
rm jsherp.log && touch jsherp.log# 查看系统内存使用
free -h
# 查看系统CPU使用
top
# 查看磁盘使用情况
df -h
# 查看指定目录磁盘占用
du -sh /opt/erp
# 搜索系统日志
grep -i "jshERP.jar" /var/log/syslog# 查看Java安装路径
which java
# 系统重启(谨慎使用)
sudo reboot
# 系统关机(谨慎使用)
sudo shutdown -h now
# 查看系统时间
date提示:如遇链接失效,请在评论区留言反馈