一、Linux 基础知识全面讲解
1、Linux 是什么?
Linux 是一个开源、免费的操作系统内核。我们通常所说的 “Linux” 实际上指的是基于 Linux 内核的完整操作系统,更准确的叫法是 “GNU/Linux 发行版”。常见的发行版有:Ubuntu, CentOS, Debian, Fedora, Arch 等。
2、核心概念
-
终端 (Terminal) / 控制台 (Console):用户与系统进行文本交互的界面。
-
Shell:一个命令解释器,是用户使用系统的桥梁。它接收用户输入的命令,并将其转换成系统指令执行。最常见的 Shell 是 Bash (Bourne-Again Shell)。
-
根目录 (
/): 文件系统的最顶层,所有文件和目录都从这里开始。 -
家目录 (
~): 当前登录用户的个人文件夹,路径通常是/home/用户名。你有完全权限在这里操作。 -
超级用户 (root): 系统管理员,拥有最高权限。执行特权命令需要在命令前加
sudo。
3、Linux 目录结构(必须了解)
Linux 的文件系统采用层级式的树状结构。了解主要目录的用途非常重要。
| 路径 | 用途说明 |
|---|---|
/ | 根目录,万物起源。 |
/bin | 二进制可执行文件,存放所有用户都可用的基本命令(如 ls, cp)。 |
/etc | 配置文件,存放系统和应用程序的配置文件。 |
/home | 用户家目录,普通用户的个人文件存放于此。 |
/root | root 用户的家目录。 |
/tmp | 临时文件,所有用户都可读写,重启后文件通常会被清除。 |
/usr | 用户程序,存放用户安装的应用程序和文件(/usr/bin, /usr/lib)。 |
/opt | 可选软件包,通常用于安装第三方大型软件。 |
/var | 可变数据,存放经常变化的文件,如日志 (/var/log)、缓存、数据库文件。 |
/boot | 启动文件,存放系统启动所需的文件,如内核、引导程序。 |
/dev | 设备文件,将硬件设备(如磁盘、USB)抽象为文件进行管理 |
/lib | 库文件,存放系统最基本的共享库和内核模块。 |
/mnt | 挂载点,用于临时挂载文件系统(如挂载光盘、USB)。 |
/media | 可移动媒体挂载点,系统会自动将 U 盘、光盘挂载到这里。 |
/proc | 虚拟文件系统,映射内存中的进程和系统信息(不是真实文件)。 |
/sbin | 系统二进制文件,存放供 root 用户使用的系统管理命令(如 fdisk, reboot)。 |
4、绝对路径 vs. 相对路径
-
绝对路径:从根目录
/开始的完整路径。-
例如:
/home/ubuntu/Documents/report.txt
-
-
相对路径:从当前工作目录开始的路径。
-
.代表当前目录(例如./script.sh) -
..代表上一级目录(例如cd ..) -
例如:当前在
/home/ubuntu,Documents/report.txt就是一个相对路径。
-
5、基础命令大全(带示例)
| 命令 | 功能描述 | 常用选项 / 语法 | 示例 |
|---|---|---|---|
| 一、文件与目录操作 | |||
ls | 列出目录内容 | -l (详细信息)-a (显示隐藏文件)-h (人性化文件大小)-t (按时间排序) | ls -lahls /tmp |
pwd | 显示当前工作目录 | pwd | |
cd | 切换目录 | ~ 家目录.. 上级目录- 上一个目录 | cd /var/logcd ~cd .. |
mkdir | 创建新目录 | -p (创建多级目录) | mkdir new_foldermkdir -p project/{src,bin,doc} |
rmdir | 删除空目录 | rmdir empty_dir | |
rm | 删除文件或目录 | -r (递归删除目录)-f (强制删除,不提示)-i (交互式删除) 慎用! | rm file.txtrm -rf temp_dir/ (危险!) |
cp | 复制文件或目录 | -r (复制目录)-i (覆盖前提示)-v (显示过程) | cp file1.txt file2.txtcp -r dir1/ dir2/ |
mv | 移动或重命名文件/目录 | -i (覆盖前提示)-v (显示过程) | mv old_name new_name (重命名)mv file.txt /backup/ (移动) |
touch | 创建空文件或更新文件时间戳 | touch new_file.txt | |
cat | 连接文件并打印到标准输出(查看全部内容) | -n (显示行号) | cat file.txtcat -n /etc/os-release |
more | 分页显示文件内容(只能向下翻页) | more long_file.log (空格向下,q退出) | |
less | 分页显示文件内容(可上下翻页,推荐) | less large_file.log (上下箭头,/搜索,q退出) | |
head | 显示文件开头部分 | -n <行数> | head -n 20 file.log (显示前20行) |
tail | 显示文件末尾部分 | -n <行数>-f (实时追踪文件变化,看日志神器) | tail -n 50 file.logtail -f /var/log/syslog |
find | 在目录树中查找文件 | -name (按文件名)-type (按类型 f文件/d目录)-size (按大小)-exec (对找到的文件执行命令) | find /home -name "*.jpg"find . -type f -size +10M |
grep | 在文件中搜索文本模式 | -i (忽略大小写)-n (显示行号)-r (递归搜索目录)-v (反向选择,不匹配的) | grep "error" app.loggrep -rn "main" ./src/ |
wc | 统计文件的行数、单词数、字节数 | -l (行数)-w (单词数)-c (字节数) | wc -l file.txt |
tar | 打包和解压文件 | -c (创建打包文件)-x (解压)-z (通过gzip过滤)-v (显示过程)-f (指定文件名) | tar -czvf archive.tar.gz dir/ (打包压缩)tar -xzvf archive.tar.gz (解压) |
diff | 比较两个文件的差异 | diff file1.txt file2.txt | |
ln | 创建文件链接 | -s (创建软链接,类似快捷方式) | ln -s /path/to/file link_name |
| 二、系统管理与进程 | |||
ps | 显示当前进程的快照 | aux (查看所有用户所有进程的详细信息) | ps aux`ps aux |
top | 动态实时显示进程和系统资源占用 | top (按 q 退出,M 按内存排序) | |
htop | top 的增强版(交互性更好,需安装) | htop | |
kill | 向进程发送信号(用于终止进程) | -9 (SIGKILL,强制终止) | kill 1234 (优雅终止)kill -9 1234 (强制杀死) |
pkill | 通过进程名来结束进程 | pkill firefox | |
killall | 通过进程名来结束所有同名进程 | killall java | |
sudo | 以超级用户(root) 权限执行命令 | sudo apt update | |
su | 切换用户身份 | - (同时切换环境变量) | su - root (切换到root用户) |
passwd | 修改用户密码 | passwd (修改当前用户密码) | |
df | 报告文件系统磁盘空间使用情况 | -h (以易读格式显示,如 G, M) | df -h |
du | 估算文件/目录的磁盘使用空间 | -sh (汇总显示总大小,易读格式) | du -sh /home/usernamedu -h --max-depth=1 /var/log |
free | 显示内存使用情况 | -h (易读格式) | free -h |
uname | 打印系统信息 | -a (所有信息) | uname -a (显示内核版本、主机名等) |
uptime | 显示系统运行时间、负载 | uptime | |
shutdown | 关机或重启 | -h now (立即关机)-r now (立即重启)+10 (10分钟后关机) | sudo shutdown -r nowsudo shutdown -h +5 "系统将于5分钟后关机" |
reboot | 重启系统 | sudo reboot | |
alias | 创建命令别名 | alias ll='ls -alF' (临时生效,永久需写入 ~/.bashrc) | |
history | 显示命令历史记录 | history!55 (执行历史记录中第55条命令) | |
which | 显示命令的完整路径 | which java | |
| 三、网络相关 | |||
ping | 测试与另一台主机的网络连通性 | -c <次数> (指定ping的次数) | ping google.comping -c 4 8.8.8.8 |
curl | 利用URL规则在命令行下工作的文件传输工具 | -O (下载文件并保留远程文件名)-I (仅显示HTTP头部信息) | curl -O http://example.com/file.zipcurl -I http://example.com |
wget | 非交互式的网络下载器 | -c (断点续传) | wget http://example.com/largefile.iso |
ifconfig | 查看和配置网络接口(旧命令) | ifconfig (可能需安装 net-tools) | |
ip | ifconfig 的现代替代品,功能更强 | addr (查看IP地址)link (查看网络接口) | ip addr showip link show |
netstat | 显示网络状态信息(连接、路由表、接口统计) | -tunlp (查看所有监听中的TCP/UDP端口及进程) | sudo netstat -tunlp |
ss | netstat 的现代替代品,更快 | -tunlp | sudo ss -tunlp |
ssh | 安全外壳协议,用于远程登录管理 | -p <端口> (指定端口) | ssh user@remote_server_ipssh -p 2222 user@host |
scp | 安全地跨主机复制文件(基于ssh) | -r (递归复制目录)-P <端口> | scp file.txt user@remote:/path/ (上传)scp -r user@remote:/home/backup ./ (下载目录) |
| 四、权限与用户 | |||
chmod | 修改文件或目录的权限 | 字母法: u/g/o/a +/- r/w/x数字法: 755 (rwxr-xr-x) | chmod +x script.shchmod 644 file.txt |
chown | 修改文件或目录的所有者和所属组 | sudo chown user:group file.txtsudo chown user file.txt | |
chgrp | 修改文件或目录的所属组 | sudo chgrp group file.txt | |
useradd | 添加新用户 | -m (创建家目录) | sudo useradd -m newuser |
usermod | 修改用户属性 | -aG (将用户追加到附属组) | sudo usermod -aG sudo newuser (赋予sudo权限) |
userdel | 删除用户 | -r (同时删除家目录和邮件池) | sudo userdel -r olduser |
groupadd | 添加新用户组 | sudo groupadd newgroup | |
id | 显示用户身份信息 | id (显示当前用户的UID, GID, 所属组) | |
使用技巧:
-
查看命令帮助:
命令 --help或man 命令(例如man ls),按q退出手册。 -
命令补全:按
Tab键可自动补全命令、文件名或目录名。 -
清屏:
clear或Ctrl + L。 -
终止命令:
Ctrl + C。 -
冻结/暂停终端输出:
Ctrl + S(暂停) ,Ctrl + Q(恢复)。
二、Java 环境搭建 (以 Ubuntu/Debian 为例)
在 Linux 上搭建 Java 环境,主要有三种主流方式:
-
使用 apt 包管理器安装 (最简单,推荐新手)
-
手动下载安装包配置 (最灵活,推荐开发者)
-
使用 SDKMAN! 工具安装 (多版本管理神器)
方法一:使用 apt 包管理器安装 (推荐新手)
这是最简单的方法,适合快速搭建标准环境。Ubuntu 官方仓库提供的是 OpenJDK,它是 Java 平台的开源实现,与 Oracle JDK 功能基本一致。
步骤 1:更新包索引
首先,打开终端 (Ctrl+Alt+T),确保你的软件包列表是最新的。
sudo apt update
步骤 2:安装 OpenJDK
你可以选择安装不同的版本。推荐安装 Java 17 或 Java 21 (最新的 LTS 长期支持版本)。
安装最新版本的 OpenJDK (通常是最新的 LTS)
sudo apt install default-jdk
安装特定版本的 OpenJDK (例如 Java 17, 21, 11)
# 安装 OpenJDK 21
sudo apt install openjdk-21-jdk
# 安装 OpenJDK 17
sudo apt install openjdk-17-jdk
# 安装 OpenJDK 11 (一些旧项目可能需要)
sudo apt install openjdk-11-jdk
# 如果只需要运行环境(JRE)而不是开发工具(JDK),可以安装 -jre 包
# sudo apt install openjdk-21-jre
-jdk 与 -jre 的区别:
-
-jdk(Java Development Kit): 包含开发工具,如编译器javac,用于开发Java程序。 -
-jre(Java Runtime Environment): 只包含运行环境,用于运行已有的Java程序。作为开发者,请安装 JDK。
步骤 3:验证安装
安装完成后,通过检查版本来验证。
java -version
javac -version
如果安装成功,你会看到类似这样的输出:
openjdk version "21.0.3" 2024-04-16
OpenJDK Runtime Environment (build 21.0.3+9-Ubuntu-1ubuntu1)
OpenJDK 64-Bit Server VM (build 21.0.3+9-Ubuntu-1ubuntu1, mixed mode, sharing)
恭喜!你的 Java 环境已经可以使用了。
方法二:手动安装 (推荐开发者)
这种方法让你能安装任意版本(如 Oracle JDK 或特定构建的 OpenJDK),并且可以灵活控制安装位置。
步骤 1:下载 JDK 压缩包
访问以下官方站点,下载 Linux x64 架构的 .tar.gz 压缩包:
-
Oracle JDK: Oracle Java SE Downloads (需要注册账户,商业用途注意许可证)
-
OpenJDK (推荐):
-
Eclipse Temurin (Adoptium) (行业标准,开源免费)
-
Azul Zulu Builds of OpenJDK (开源免费)
-
IBM Semeru Runtimes (开源免费)
-
例如,使用 wget 下载 Temurin JDK 21:
# 从 Eclipse Temurin 复制 Linux x64 .tar.gz 包的下载链接(右键复制链接地址)
# 然后用 wget 下载,链接地址可能会变,请以官网为准
wget https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.3%2B9/OpenJDK21U-jdk_x64_linux_hotspot_21.0.3_9.tar.gz
步骤 2:解压到目标目录
通常我们将 Java 解压到 /usr/lib/jvm 或 /opt 目录,这里以 /opt 为例。
# 创建解压目录 (如果不存在)
sudo mkdir -p /opt
# 解压下载的压缩包到 /opt 目录
# 请将文件名替换为你实际下载的文件名
sudo tar -xzf OpenJDK21U-jdk_x64_linux_hotspot_21.0.3_9.tar.gz -C /opt
# 查看解压后的目录名
ls /opt/
# 你应该会看到一个类似 'jdk-21.0.3+9' 的目录
步骤 3:配置环境变量
需要告诉系统你的 Java 安装在哪里。
编辑 Shell 配置文件(例如 ~/.bashrc 针对当前用户):
nano ~/.bashrc
在文件的末尾添加以下内容(请务必根据你解压的实际路径修改 JAVA_HOME 的值!):
# Java Environment Setup
export JAVA_HOME=/opt/jdk-21.0.3+9 # 这里替换成你的JDK目录路径!
export PATH=$JAVA_HOME/bin:$PATH
使配置立即生效:
source ~/.bashrc
步骤 4:验证安装
再次检查版本,确认系统现在使用的是你手动安装的 Java。
java -version
javac -version
echo $JAVA_HOME # 检查 JAVA_HOME 变量是否设置正确
输出应该指向你刚刚安装的版本。
方法三:使用 SDKMAN! (多版本管理神器)
SDKMAN! 是一个专门用于管理多个软件开发工具包(如 Java, Groovy, Scala, Maven)版本的工具,非常强大和方便。
步骤 1:安装 SDKMAN!
# 一行命令安装
curl -s "https://get.sdkman.io" | bash
# 按照提示,执行以下命令完成安装
source "$HOME/.sdkman/bin/sdkman-init.sh"
步骤 2:使用 SDKMAN! 安装 Java
# 列出所有可安装的 Java 版本(包括各种供应商的版本)
sdk list java
# 安装一个特定版本的 Java (例如 Temurin 21.0.3)
# 使用 list 命令中显示的 Identifier 来选择版本
sdk install java 21.0.3-tem
# 或者直接安装默认的最新版本
sdk install java
步骤 3:切换版本 (这才是精髓)
如果你安装了多个版本,可以轻松切换。
# 列出本地已安装的所有版本
sdk list java | grep "installed"
# 切换当前 Shell 使用的 Java 版本
sdk use java 11.0.22-zulu
# 设置某个版本为系统默认版本
sdk default java 21.0.3-tem
SDKMAN! 会自动为你处理所有环境变量的配置。
测试你的 Java 环境
无论用哪种方法安装,最后都创建一个简单的 HelloWorld 程序来测试。
1、创建文件 HelloWorld.java
nano HelloWorld.java
2、输入代码:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World from Java in Linux!");
}
}
按 Ctrl+O 保存,按 Ctrl+X 退出。
3、编译和运行:
javac HelloWorld.java # 编译,生成 HelloWorld.class 字节码文件
java HelloWorld # 运行
如果输出 Hello, World from Java in Linux!,说明你的 Java 开发环境已经完全配置成功!
总结对比
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| apt 安装 | 极其简单,自动管理依赖和更新 | 版本可能不是最新,选择较少 | 新手、需要快速搭建标准环境 |
| 手动安装 | 最灵活,可安装任意版本和供应商 | 步骤繁琐,需要手动配置和更新 | 开发者、需要特定版本(如 Oracle JDK) |
| SDKMAN! | 多版本管理无敌,一键安装切换 | 需要额外安装一个工具 | 专业开发者、需要在多个项目间切换不同 Java |
对于大多数初学者,建议从 方法一 (apt 安装) 开始。随着深入学习,你会逐渐体会到 方法三 (SDKMAN!) 或 方法二 (手动安装) 的便利和强大。
OVER!!!

941

被折叠的 条评论
为什么被折叠?



