Linux 常见问题及解决方式
处理器架构核心概念解析
目前主流架构可分为 x86 系列(含32位/64位)和 ARM 系列(含32位/64位)。
核心架构对比与应用场景
| 架构 | 位数 | 指令集类型 | 性能特点 | 典型应用 |
|---|---|---|---|---|
| x86 | 32位 | CISC | 兼容性强,功耗较高 | 早期PC、嵌入式设备 |
| x86_64 | 64位 | CISC | 高性能,支持大内存 | 台式机、服务器、游戏主机 |
| ARM | 32位 | RISC | 低功耗,中等性能 | 智能手机、平板、物联网设备 |
| AArch64 | 64位 | RISC | 高能效比,扩展性强 | 高端手机、ARM服务器、MacBook |
常见概念辨析
AMD64与x86_64:二者完全一致,AMD64是技术源头,x86_64为通用名称。 ARM64与AArch64:ARM64是AArch64的俗称,均指ARM架构的64位版本。
兼容性问题:x86与ARM架构不兼容,软件需针对目标架构重新编译(如Windows RT仅支持ARM)。
如何判断设备架构类型
Windows系统:通过cmd命令行输入 systeminfo,在“系统类型”中查看(如“x64-based PC”表示x86_64)。
Linux系统:执行 uname -m,输出x86_64表示x86架构64位,aarch64表示ARM架构64位。
VMware 安装 Debian 踩坑记录
- 安装到 Configure the package manager 时,这里要选择 no, 不安装。否则会因为国内网络问题导致安装非常慢。
- 而后选择镜像源时,选择清华大学镜像源(mirrors.tuna.tsinghua.edu.cn),快,选 163 源也很慢。
- 选择安装的软件时(这里不安装桌面环境):
- 去掉勾选:Debian desktop environment 和 GNOME。
- 增加勾选: SSH Server 和 standard system utilities(默认已勾选)
- Install the GRUB boot loader 时,选择 /dev/sda
- 用 root 用户在本机可以登录,但是通过 SSH 出现 X Authentication rejected 错误:
- 默认在 /etc/ssh/sshd_config 配置文件中有(虽然被注释着):PermitRootLogin prohibit-password
- 在 /etc/ssh/sshd_config.d/ 目录下增加一个格式为 *.conf 的文件,比如:default.conf。
- 注意:这里是 sshd_config.d 文件夹,因为默认在 /etc/ssh/sshd_config 文件中导入了 /etc/ssh/sshd_config.d/ 目录下所有的 *.conf 文件。
- 在 default.conf 中通过 vi 命令加上一行内容:PermitRootLogin yes
- 保存后,退出。然后执行命令:systemctl restart ssh
- 此时,SSH 就可以用 root 用户登录了。
开机时网络自动打开(针对新安装的 CentOS,每次开启虚拟机,网络连接未打开,无法连接到互联网)
在虚拟机中以最小化方式安装 CentOS 7,后无法上网,因为 CentOS 7 默认网卡未激活。
bash
cd /etc/sysconfig/network-scripts/
# 进入编辑模式,将 ONBOOT=no 改为 ONBOOT=yes,就OK
vi ifcfg-enp0s3
# 保存后重启网卡:
service network restart
# 此时就可以上网了
ping www.baidu.comll: command not found
root 用户工作目录下默认有 .bashrc 隐藏文件,只需去掉这一行前面的 # 注释符:alias ll='ls $LS_OPTIONS -l'
其他用户的工作目录下默认没有这个文件,则需要新创建该文件,并且内容加上:alias ll='ls $LS_OPTIONS -l'
注:各个用户只管各个用户自己的,比如改了 root 用户下的文件,那就只有 root 用户可以使用 ll 命令,其他用户依然不能使用,想要使用就需要每个用户都更改。
shell
cd ~
vim ~/.bashrc
# 编辑内容后,保存,退出
# 生效
source ~/.bashrcAnother app is currently holding the yum lock; waiting for it to exit
shell
rm -f /var/run/yum.pidCannot find a valid baseurl for repo: base/7/x86_64
网络设置好,重启系统。
jar 应用后台运行
bash
# 不需要日志输出时推荐(比如:用 spring boot 自己的日志时)
nohup java $JVM_OPTS -jar app.jar > /dev/null 2>&1 &
# 需要日志时推荐(比如: 没有用 spring boot 来生成日志时,那么此时这种方式会得到日志)
nohup java $JVM_OPTS -jar app.jar > app.log 2>&1 &命令各部分详解
shell
nohup java $JVM_OPTS -jar app.jar > /dev/null 2>&1 &这个命令是一个典型的Java应用后台启动命令,下面我来详细解析每个部分:
1. nohup
- 作用:忽略挂起信号(Hangup Signal)
- 功能:确保即使终端关闭或用户退出登录,Java进程也不会被终止
- 原理:阻止系统向进程发送SIGHUP信号
2. java $JVM_OPTS -jar app.jar
java:Java虚拟机启动器$JVM_OPTS:环境变量,通常包含JVM参数,如:bash# 示例 JVM_OPTS 内容 export JVM_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC"-jar app.jar:指定要运行的 JAR 包
3. > /dev/null
- 作用:将标准输出重定向到空设备
- 效果:所有正常输出内容都会被丢弃,不会保存到任何文件
/dev/null:Linux中的特殊设备文件,写入它的所有数据都会被丢弃
4. 2>&1
- 作用:将标准错误重定向到标准输出
- 分解:
2:文件描述符2,代表标准错误输出&1:指向文件描述符1(标准输出)的位置
- 效果:错误信息也会被重定向到
/dev/null
5. &
- 作用:在后台运行命令
- 效果:立即返回命令行提示符,进程在后台继续运行
命令执行效果
bash
# 执行后:
[1] 12345 # 返回作业号和进程ID
# 此时:
# - Java进程在后台运行(进程ID 12345)
# - 所有输出(正常和错误)都被丢弃
# - 终端关闭后进程继续运行实际应用场景
这种配置适用于:
- 无日志需求的应用:不需要查看任何输出
- 日志已内部处理:应用自己有完善的日志框架(Logback/Log4j2)
- 资源受限环境:避免产生额外的日志文件
常用变体
1. 保存日志到文件
bash
# 保存所有输出到文件
nohup java $JVM_OPTS -jar app.jar > app.log 2>&1 &
# 分别保存标准输出和错误输出
nohup java $JVM_OPTS -jar app.jar > app.out 2> app.err &2. 追加到现有日志文件
bash
nohup java $JVM_OPTS -jar app.jar >> app.log 2>&1 &3. 只保存错误日志
bash
nohup java $JVM_OPTS -jar app.jar > /dev/null 2> error.log &检查运行状态
bash
# 查看后台作业
jobs -l
# 查看Java进程
ps aux | grep java
# 查看特定进程
ps -p 12345 -o pid,cmd,%cpu,%mem注意事项
⚠️ 重要提醒:
- 使用
> /dev/null 2>&1意味着所有日志都会丢失 - 生产环境不建议完全丢弃日志
- 如果应用崩溃,将无法通过日志排查问题
- 建议至少保留错误日志用于问题诊断
这个命令组合确保了Java应用在后台稳定运行,同时完全屏蔽了所有控制台输出。
.sh 脚本后台运行
shell
# 自定义输出文件(推荐)
nohup ./test.sh > script.log 2>&1 &
# 解释:
# > script.log :标准输出(stdout)重定向到 script.log
# 2>&1:标准错误(stderr)重定向到 stdout,最终都写入 script.log
# &:后台运行查看进程和刷新控制台日志
shell
# 显示出所有的java进程,去除掉当前的grep进程。
ps -ef|grep java|grep -v grep
# 同步刷新,查看日志最后200行
tail -fn 200 console.log