从零开始,成为Linux世界公民 🐧


一、开篇:为何我们的数字生活离不开 Linux

你可能没亲手用过 Linux,但你每天都在和它打交道:你刷短视频的云服务器、家里的 WiFi 路由器、手里的安卓手机、玩的网游服务器、训练 AI 的超算集群,甚至高铁的调度系统、空间站的核心控制单元,跑的全是 Linux。

学 Linux 不是让你成为黑客,而是让你从数字世界的 “乘客”,变成能自己握方向盘的 “司机”。它不是遥不可及的天书,而是一套简单、透明、稳定的数字世界运行规则,学会它,你能真正掌控自己的设备,解锁服务器、开发、树莓派等无限可能。


二、三分钟构建 Linux 世界观

在动手之前,我们先用 3 句话搞懂 Linux 的核心架构,就像先看懂地图再出发:

  • 内核:Linux 的核心,是直接和电脑硬件对话的 “地基”,管着 CPU、内存、硬盘所有资源,所有程序都要通过它和硬件打交道。
  • 发行版:基于 Linux 内核打包好的完整系统,就像装修好的房子,带了桌面、软件、工具,不用你自己从零搭建。我们常说的 Ubuntu、Debian、CentOS、树莓派系统,都是发行版。
  • Shell:你和内核对话的 “翻译官”。你输入的命令,由 Shell 翻译给内核执行,再把结果返回给你。
  • 终端:就是你眼前的这个 “黑框框”,是你输入命令、看到结果的 “窗口”—— 很多新手会把终端和 Shell 搞混,简单说:终端是外壳,Shell 是里面真正干活的翻译官。

新手第一关:看懂终端提示符

打开终端后,我们会看到一行类似这样的文字,这就是提示符

ubuntu@my-pc:~$ 

拆解:

  • ubuntu:当前登录的用户名
  • my-pc:电脑的主机名
  • ~:当前所在的目录(~ 是当前用户家目录的简写,绝对路径是 /home/ubuntu)
  • $:核心标识!$ 代表当前是普通用户,# 代表当前是 root 超级管理员用户(日常不要用 # 提示符操作)

记住:所有命令,都要在 $ 符号的后面输入,输完按回车执行

立刻动手 1:看看你的翻译官是谁

在提示符后输入下面的命令,按回车:

echo $SHELL  # 打印当前你正在使用的Shell程序

预期输出:大概率是/bin/bash 或者/bin/zsh 。这表示我们当前的命令翻译官是 Bash 或者 Zsh,它们是最主流的两款 Shell。

立刻动手 2:认识你的发行版

接着输入这条命令,看看目前正在用的系统信息:

cat /etc/os-release  # 读取并打印系统发行版的配置文件

预期输出:会显示我们的系统名称(比如 Ubuntu)、版本号、ID 等信息。

立刻动手 3:Tab 补全

这是 Linux 的快捷便利操作,能帮我们避免绝大多数的拼写错误。现在输入cat /etc/os-re,不要输完,直接按Tab 键,你会发现系统自动帮我们补全了/etc/os-release的完整文件名。

记住这个习惯:任何命令、文件名、路径,输入前几个字母,按 Tab 键,系统会自动补全;按两次 Tab,会列出所有匹配的选项,减少一个字母一个字母敲,提高效率的同时避免敲错。


三、七大核心概念深度教学

接下来的七个概念,是 Linux 世界的底层逻辑。

概念 1:倒置的树 ——Linux 文件系统

核心比喻

Windows 的文件系统是好几片独立的小树林(C 盘、D 盘、E 盘),而 Linux 的文件系统,是一棵倒置的大树。所有的文件、文件夹、设备,都是这棵树的枝杈,而唯一的树根,就是/ (我们叫它 “根目录”),所有内容都从这里生长出来。

Linux 最核心的设计哲学:一切皆文件。不管是普通文档、文件夹、键盘鼠标、甚至正在运行的程序、网络接口,都被抽象成了文件,你可以用同一套读、写、管理的逻辑去操作它们,这就是 Linux 简洁、强大的核心原因。

这是这棵大树的核心主干,我们需要记牢,每一个目录都有它固定的用途,绝对不能乱改:

/ (根目录,整个大树的起点)
├── home  # 用户的家,每个普通用户都有一个以自己用户名命名的文件夹,比如/home/ubuntu,只有自己能操作
├── etc   # 系统和软件的配置文件所在地,所有系统级的设置都存在这里
├── var   # 动态变化的文件,比如系统日志、网站数据、数据库文件
├── tmp   # 临时文件,系统重启后会自动清空,不要放重要文件
├── usr   # 系统软件、用户安装的软件都在这里,相当于Windows的Program Files
├── dev   # 设备文件,你的硬盘、键盘、鼠标都在这里,比如/dev/sda就是你的第一块硬盘
├── proc  # 虚拟文件系统,存放当前系统运行的进程、内核信息,都是实时生成的,关机就消失
└── sys   # 虚拟文件系统,和硬件设备直接相关的内核信息,同样是实时生成的
核心命令组
1. 我在哪?—— pwd
pwd  # 打印当前工作目录的绝对路径

预期输出:比如/home/ubuntu ,这就是你当前的位置,默认打开终端,你都会在自己的家目录里。

2. 这里有什么?—— ls

ls 是 Linux 里最常用的命令,相当于你打开文件夹,看看里面有什么东西,我们用多个变体演示它的用法:

ls /  # 查看根目录的内容
ls -l  # 以列表形式,显示文件/文件夹的详细信息(权限、所有者、大小、修改时间)
ls -a  # 显示所有文件,包括以.开头的隐藏文件(Linux里,文件名开头加.就是隐藏文件)
ls -lh  # -h参数把文件大小转换成人类可读的格式(KB/MB/GB),不用看一大串数字
ls -lhtr  # 组合参数:按修改时间倒序排列,最新的文件在最下面,找日志、新文件超好用
3. 移动位置 —— cd

cd 就是 Change Directory,相当于你在大树的枝杈之间移动,从一个文件夹进入另一个。这里我们讲解下绝对路径和相对路径

  • 绝对路径:从根目录 / 开始的完整路径,比如/home/ubuntu,不管你当前在哪,用绝对路径都能精准到达
  • 相对路径:基于你当前所在目录的路径,比如你在 /home 目录,输入cd ubuntu就能进入 /home/ubuntu,不用写完整路径

绝对路径 VS 相对路径

cd /home   # 用绝对路径,进入根目录下的home文件夹
cd ubuntu  # 用相对路径,进入当前目录下的ubuntu文件夹
cd ~       # 一键回到你的家目录,~就是家目录的简写
cd ..      # 回到上一级目录,..就代表上一级文件夹,.代表当前目录
cd -       # 回到你上一次所在的目录,相当于“返回上一页”,切换两个目录超方便

💡 冷知识:Linux 的 cd 命令,是少数不会输出任何内容的命令 —— 没有消息就是好消息,只要没报错,就说明你移动成功了,记得用 pwd 随时验证你的位置。

4. 这是什么文件?—— file

Linux 不靠后缀名判断文件类型,哪怕你把一张图片改成.txt 后缀,它还是一张图片。file 命令能告诉你一个文件的真实身份,不会被后缀名骗到:

file /etc/os-release  # 查看这个文件的真实类型

预期输出:会告诉你这是一个 ASCII 文本文件,而不是靠后缀名判断。

5. 通配符

通配符是 Linux 命令行的效率神器,能帮你批量匹配文件,最常用的有两个:

  • *:匹配任意多个字符(包括 0 个)
  • ?:匹配单个字符
ls *.txt    # 列出当前目录下所有.txt结尾的文件
ls test?.*  # 列出test开头、后面跟1个字符的所有文件,比如test1.txt、test2.jpg
6. “一切皆文件” 实操验证
# 1. 向空设备/dev/null写入内容,它会直接丢弃所有写入的数据,相当于系统的“垃圾桶”
echo "测试内容" > /dev/null  # 不会有任何输出,内容被直接丢弃
# 2. 从随机数设备/dev/urandom读取随机数据,生成10个随机字符
head -c 10 /dev/urandom | base64

你看键盘、硬盘、随机数生成器,都被抽象成了文件,用同一套读写逻辑就能操作,这就是 Linux 的强大之处。


概念 2:对话的艺术 —— 终端日常命令与组合技

核心比喻

终端就是我们和系统的对话窗口,命令就是我们所说的句子,命令的标准结构是:命令 + 选项 + 参数,选项就是句子里的修饰语,参数就是我们要操作的对象。比如 ls是 “给我看看这里的东西”,ls -l /home 就是 “给我看看 /home 目录里,所有东西的详细清单”。

这一节,我们将学习日常多数场景都会用到的命令。

核心命令组
1. 前置须知:自助求生命令
# man:查看命令的官方手册,man是manual的缩写,最全、最权威,正所谓“有问题找那个男人 → man”
man ls       # 查看ls命令的完整手册,按q退出,/关键词搜索内容
man 7 chmod  # 查看chmod的详细原理文档,数字权限的完整说明
# --help:几乎所有命令都自带的帮助参数,快速查看常用参数,不用翻完整手册
ls --help
# whatis:快速查看一个命令是干什么的,一句话说明,不用看长篇大论
whatis grep
whatis find
2. 文件与文件夹操作
# mkdir:创建文件夹,-p参数递归创建多层目录,不会因为中间目录不存在而报错
mkdir test.txt
mkdir -p project/src/utils  # 一次性创建project,以及里面的src、utils文件夹
# touch:创建空文件,或者修改已有文件的修改时间
touch README.md  # 创建一个空的README.md文件
# cp:复制文件/文件夹,复制文件夹必须加-r(递归),保留文件属性加-a
cp README.md README_backup.md  # 复制文件,做备份
cp -r project project_backup  # 复制整个文件夹,包括里面的所有内容
cp -a project project_backup  # 归档复制,保留文件的权限、所有者、修改时间,备份首选
# mv:移动文件/文件夹,也可以用来重命名(Linux没有专门的重命名命令,mv就是标准用法)
mv README.md project/  # 把README.md移动到project文件夹里
mv old_name.txt new_name.txt  # 给文件重命名
# ln:创建链接,分为软链接和硬链接
# 软链接(-s):相当于Windows的快捷方式,指向原文件,原文件删了,软链接就失效了
ln -s /home/ubuntu/project/README.md ~/README快捷方式  # 创建软链接到桌面
# 硬链接:给原文件创建一个新的入口,相当于同一个文件有多个名字,原文件删了,硬链接依然能访问
ln README.md README_hardlink  # 创建硬链接

⚠️ 警示‼️:rm 命令是 Linux 里最危险的命令,没有之一!!!Linux 没有回收站,用 rm 删除的文件,几乎找不回来,没有后悔药。

# rm:删除文件/文件夹
rm -i test.txt  # -i参数,删除前会让你确认(y/n),新手一定要养成加-i的习惯
rm -r project  # -r参数,递归删除文件夹以及里面的所有内容
rm -ir project  # 递归删除文件夹,每个文件都要确认
# 绝对禁止执行:sudo rm -rf / !!!这条命令会删除你硬盘上的所有文件,系统直接报废
# 新手避坑:永远不要在不确定路径的时候执行sudo rm -rf,尤其是路径里带/的

💡 冷知识:前期新手可以安装 trash-cli 工具,用 trash 命令替代 rm,它会把文件放到系统回收站,删错了还能恢复,安装命令:sudo apt install trash-cli,用法:trash test.txt,恢复用restore-trash

3. 查看文件内容
# cat:读取并打印文件的全部内容,适合小文件,大文件会直接刷屏
cat README.md
cat -n README.md  # -n参数,显示行号
# less:分页查看大文件,不会一次性把整个文件加载到内存,打开GB级的日志也不卡
less /var/log/syslog  # 查看系统日志文件
# less核心操作:上下箭头翻行,空格翻页,b往回翻页,/关键词 搜索内容,n跳转到下一个匹配项,q退出
# head:查看文件的前N行,默认10行,用-n指定行数
head /var/log/syslog
head -n 20 /var/log/syslog  # 查看前20行
# tail:查看文件的最后N行,默认10行,最常用的是-f参数,实时监控文件的新增内容
tail /var/log/syslog
tail -n 20 /var/log/syslog  # 查看最后20行
tail -f /var/log/syslog  # 实时刷新文件的新内容,按Ctrl+C退出,看日志、调试程序神器
4. 查找与过滤
# find:查找文件/文件夹,功能极其强大,按名称、类型、大小、时间查找
find ~ -name "*.md"  # 在家目录里,查找所有后缀是.md的文件,-name区分大小写,-iname不区分
find project -type d  # 在project文件夹里,只查找目录(文件夹),-type f只查找普通文件
find ~ -type f -size +100M  # 在家目录里,查找大于100M的文件,-100M就是小于100M
find ~ -type f -mtime -7  # 在家目录里,查找7天内修改过的文件
# grep:在文件里搜索指定的文本内容,Linux里最常用的文本过滤工具
grep "Linux" README.md  # 在README.md里搜索包含"Linux"的行
grep -i "linux" README.md  # -i忽略大小写,Linux/linux都能搜到
grep -r "test" project/  # -r递归搜索,在project文件夹的所有文件里搜索"test"
grep -n "Linux" README.md  # -n显示匹配行的行号
grep -v "注释" README.md  # -v反向匹配,只显示不包含"注释"的行
5. 思维进阶:管道与重定向

这是 Linux 最核心的设计之一,学会后可不再局限于单个命令的简单功能,能自由拼接组合各类命令实现复杂操作、完成批量自动化任务:

  • 管道 |:把前一个命令的标准输出,当成后一个命令的标准输入,就像工厂的流水线,一步一步处理数据,前一步的结果,直接给后一步加工。
  • 重定向 > / >>:把命令的输出,写入到文件里,而不是打印在屏幕上。> 是覆盖写入(会清空文件原来的内容),>> 是追加写入(不会清空原来的内容,而是在末尾添加)。

组合示例:

# 管道:把ls -l的输出,传给grep,只筛选出.txt结尾的文件
ls -l | grep "\.txt$"  # \.txt$是正则表达式,只匹配文件名结尾的.txt,不会匹配到其他位置的txt

# 管道:查看你最近执行的10条命令
history | tail -10

# 管道:统计家目录里有多少个.md文件
find ~ -name "*.md" | wc -l

# 重定向:把"Hello Linux"写入test.txt文件,文件不存在就创建,存在就覆盖
echo "Hello Linux" > test.txt

# 重定向:把"第二行内容"追加到test.txt的末尾,不会覆盖原来的内容
echo "第二行内容" >> test.txt

# 终极组合:查找家目录里所有的.md文件,筛选出包含"Linux"的行,统计行数,写入结果文件
find ~ -name "*.md" -type f | xargs grep -i "linux" | wc -l > linux_note_count.txt
6. 必备快捷键
快捷键 核心功能
Ctrl+C 中断当前终端正在运行的命令
Ctrl+L 清屏,相当于 clear 命令,屏幕满了一键清空,光标回到顶部
Ctrl+A 跳到当前命令行的开头,输错了不用一直按左箭头
Ctrl+E 跳到当前命令行的结尾
Ctrl+U 清空光标前面的所有内容,一键重输命令
上箭头 / 下箭头 调用之前执行过的历史命令,不用重复敲
!! 重复执行上一条命令,比如上一条命令忘加 sudo,直接输入 sudo !! 就能补全

概念 3:你家和我家 —— 用户、组与权限

核心比喻

Linux 是一个多人合租的公寓,每个用户都有自己的独立房间(家目录),有自己的钥匙,不能随便进别人的房间;公共区域有严格的门禁规则,不是谁都能改。这套规则,就是 Linux 的权限系统,也是它比 Windows 更安全的核心原因。

这里有三个核心角色,我们必须记牢,绝不能搞混:

  • 普通用户:就是你,只能操作自己家目录里的文件、公共区域的可读文件,不能修改系统配置,不能动其他用户的东西,安全系数拉满,日常只用这个用户。
  • root 用户:公寓的超级管理员,有全公寓所有房间的钥匙,能修改任何文件、执行任何操作,权力无限,风险也无限。
  • sudo:临时借管理员的钥匙用一次,执行完命令就归还。只有被系统加入 sudo 组的用户,才能使用 sudo,日常需要管理员权限的操作,就可用它。

⚠️ 注意:日常使用绝对不要登录 root 用户!99% 的操作,普通用户都能完成,必须要管理员权限的时候,用 sudo 就够了。手滑在 root 下执行错误命令,很可能直接毁掉整个系统,没有挽回的余地。

核心命令组
1. 我是谁?—— whoami /id
whoami  # 打印当前登录的用户名,忘记自己是谁的时候敲它
id  # 打印你的用户ID(UID)、组ID(GID),以及你所属的所有用户组

核心知识点:UID=0 的用户就是 root,普通用户的 UID 一般从 1000 开始,系统用户的 UID 在 1000 以内。

2. 权限到底是什么?—— ls -l 详解

我们之前用过 ls -l,现在我们把它的每一列拆解开:

先执行命令,拿到典型输出:

ls -l /etc/os-release

典型输出

lrwxr--r-- 1 root root 1318 5月 13 10:08 /etc/os-release

我们从左到右,一列一列讲:

列序号 内容示例 核心含义
第 1 位 l 文件类型:- = 普通文件,d = 目录,l = 软链接(快捷方式),c = 字符设备,b = 块设备
第 2-10 位 rwxr–r– 9 个权限位,3 个一组,分为「所有者、用户组、其他人」三部分,每一组都是 rwx 三个权限的组合
第 2 列 1 文件的硬链接数
第 3 列 root 文件的所有者(谁建的这个文件)
第 4 列 root 文件的所属用户组(哪个组的用户能拥有对应权限)
第 5 列 1318 文件大小(默认字节,加 - h 会转成人类可读格式)
第 6-8 列 5 月 13 10:08 文件最后修改的时间
第 9 列 /etc/os-release 文件名

必懂关键点:rwx 对文件和目录的含义,完全不一样,我们用表格分别讲解:

权限 对普通文件的含义 对目录(文件夹)的含义
r(读) 可以读取文件的内容 可以列出目录里的文件列表(ls)
w(写) 可以修改、删除文件的内容 可以在目录里创建、删除、重命名文件
x(执行) 可以把文件当成程序执行(脚本、软件) 可以 cd 进入这个目录(这是核心!没有 x 权限,永远进不去这个目录)
3. 修改权限 —— chmod

chmod 就是修改文件的权限,有两种用法:符号法和数字法。

符号法

u代表所有者(user)、g 代表用户组(group)、o代表其他人(other)、a 代表所有人;用+添加权限,-移除权限,=直接覆盖设置权限。

chmod u+x test.sh  # 给文件的所有者,添加执行(x)权限
chmod g-w test.txt  # 给文件的所属组,去掉写(w)权限
chmod o=r test.txt  # 给其他用户,设置只读(r)权限,其他权限全部去掉
chmod a+r test.txt  # 给所有人,添加读(r)权限
数字法

核心规则:r=4,w=2,x=1,没有权限 = 0,每一组权限,就是三个数字的和。

  • 7 = 4+2+1 = rwx(可读可写可执行)
  • 6 = 4+2 = rw-(可读可写)
  • 5 = 4+1 = r-x(可读可执行)
  • 4 = r–(只读)
  • 0 = —(无任何权限)

三个数字,从左到右,分别对应所有者、用户组、其他人的权限,下面列举些常用的标准权限:

chmod 755 test.sh   # 所有者rwx,组和其他人r-x,最常用的脚本/可执行文件权限
chmod 644 test.txt  # 所有者rw-,组和其他人r--,最常用的普通文件权限
chmod 600 test.txt  # 只有所有者能读写rw-,其他人完全不能碰---,适合私密文件、密钥文件
chmod 700 ~/        # 家目录标准权限,只有你自己能进入、读写,其他人完全无法访问

权限管理

4. 临时管理员权限 —— sudo

sudo 是super user do的简称,中文翻译为「超级用户执行」,它用于临时提升权限,执行完命令,权限就归还了。

cat /etc/shadow  # 普通用户直接执行,权限拒绝
sudo cat /etc/shadow  # 使用 sudo 临时提升权限,执行成功
# 1. 普通用户直接向系统保护目录写入文件:权限拒绝
echo "测试内容" >> /usr/local/sudo_demo.txt

# 2. (踩坑点)错误写法:加了 sudo 依然权限拒绝
# 核心原因:>> 重定向由普通用户 shell 执行,不受 sudo 提权影响
sudo echo "测试内容" >> /usr/local/sudo_demo.txt

# 3. 正确写法一:管道 + tee -a 追加写入
echo "测试内容" | sudo tee -a /usr/local/sudo_demo.txt

# 4. 正确写法二:sudo 拉起新 Shell,整句命令包含重定向一起提权执行
sudo sh -c 'echo "测试内容2" >> /usr/local/sudo_demo.txt'

# 5. 查看文件内容,验证是否写入成功
sudo cat /usr/local/sudo_demo.txt

第一次用 sudo,会提示你输入当前用户的密码,输入的时候屏幕不会显示任何内容,这是 Linux 的安全设计,完回车就行。

⚠️ 注意:永远不要用 sudo 执行你不了解的命令,避免使用 sudo su 或 sudo -i 长时间保持 root 会话,不要随意修改 /etc/ 目录下的系统配置文件,除非你明确知道后果。

5. 用户-全生命周期管理

Linux 所有用户信息存在 /etc/passwd,用户密码哈希存在 /etc/shadow创建、删除、修改用户都需要管理员权限,使用sudo

# 1. 创建新用户 adduser / useradd
# adduser 创建用户(全自动一步到位)
sudo adduser user1

执行后会出现交互式提示(按需求填写):

[sudo] password for xxx:    输入你当前用户的密码
Enter new UNIX password:    输入 user1 的密码(输入时屏幕不会显示)
Retype new UNIX password:   确认密码
Full name []:               直接回车(按需不填,不填直接回车)
Room number []:             直接回车
Work phone []:              直接回车
Home phone []:              直接回车
Other [ ]:                  直接回车
Is the information correct? [Y/n] 输入 Y 回车
# useradd 创建用户(需手动配置)
# -m:自动创建家目录 /home/用户名;-s:指定默认shell为bash;-G:加入附加组
sudo useradd -m -s /bin/bash testuser

# 查看添加的新用户
cat /etc/passwd
# 2. 设置/修改用户密码 passwd
sudo passwd testuser  # 给testuser设置密码,交互式输入,屏幕不显示
# 普通用户修改自己的密码(不用sudo,只能改自己的)
passwd
# 3. 修改用户属性(usermod = user modify)
# -d:指定新家目录   -m:移动原有家目录文件(两个参数配套用)
sudo usermod -d /home/new_user -m testuser  # 迁移家目录到/home/new_user并移动文件

# -l:修改登录用户名(把 testuser 改名为 newuser1)
sudo usermod -l newuser1 testuser        

# -s:修改用户默认Shell(改为zsh,默认是/bin/bash)
sudo usermod -s /bin/zsh newuser1        
# 4. 删除用户(userdel = user delete)
# 仅删除用户,保留家目录和文件(安全)
sudo userdel newuser1               

# -r:递归删除(彻底删除,谨慎使用)= 删除用户 + 家目录 + 所有相关文件
sudo userdel -r newuser1
6. 用户组-全生命周期管理

多个用户加入同一个组,可实现批量授权,比如开发组共用项目文件夹权限;组信息存放在 /etc/group

# 1. 创建用户组
sudo groupadd dev  # 创建 dev 开发组
# 查看添加的新用户组
cat /etc/group

# 2. 修改组名 groupmod
# -n = new name(新组名) 格式:sudo groupmod -n 新名字 旧名字
sudo groupmod -n developer dev  # 把组名dev改为developer

# 3. 删除用户组 groupdel
# 仅能删除【空组】(组里没有用户时才能删)
sudo groupdel developer

# --- 重新创建组,演示用户加入/退出 ---
sudo groupadd dev

# 4. 将用户加入组(两种方法)
# 方法1:usermod 追加用户到组
# -a = append(追加,必加!不加会清空用户原有所有组)
# -G = 附加组(次要组)
sudo usermod -aG dev user1

# 方法2:gpasswd(专门管理组成员,更简单直观)
# -a = add(添加用户到组)
sudo gpasswd -a user1 dev
# -d = delete(从组中删除用户)
sudo gpasswd -d user1 dev

# 5. 查看用户所属的所有组(最常用)
groups user1
# 查看用户完整UID/GID信息(更详细)
id user1
7. 用户切换、登录与退出操作

日常多用户环境下,频繁切换账号执行操作,分为普通切换完整环境切换两种用法,需要区分。

# 1. 普通切换用户
# 命令:su 用户名
# 作用:仅切换用户身份,不切换目录、不加载完整环境
# 场景:几乎不用,容易导致权限/环境错乱
su user1

# 2. 完整环境切换
# 命令:su - 用户名
# 作用:【完整模拟重新登录】
# - 自动进入目标用户的家目录(/home/xxx)
# - 加载该用户全部环境变量、权限、配置
# - 完全独立的运行环境
# 场景:测试sudo权限、切换用户办公、配置账户环境
su - user1

# 3. 退出当前用户,回到上一级用户
exit       # 通用退出命令,所有终端都支持(最常用)
logout     # 等效退出,仅登录式shell可用(su - 切换后可用)
# 重要规则:
# 切换了几层用户,就执行几次 exit,逐层退回,直到关闭终端

# 五、查看系统当前【所有在线登录用户】
who        # 简洁版:只显示 用户名、终端、登录时间/地址
w          # 详细版:显示用户 + 负载 + 正在执行的命令

实操要点:

  1. 从普通用户切其他普通用户 /root,都需要输入目标用户密码
  2. root 用户切换任意普通用户,无需输入密码,权限无限制;
  3. 切换用户后所有操作权限跟随当前登录账号,退出即恢复原本账号权限。
8. 给普通用户开放 sudo 管理员权限

Ubuntu 默认sudo组拥有管理员权限,CentOS 是wheel组,把用户加入对应组即可:

# Ubuntu/Debian:加入sudo组
sudo usermod -aG sudo user1
# CentOS/RHEL:加入wheel组
sudo usermod -aG wheel user1

# 验证:切换用户后测试sudo
su - user1
sudo ls /root

⚠️ 生效条件:用户必须重新登录(注销重登 / 新开终端),权限才会加载。

9. 修改文件归属 —— chown / chgrp

chown 就是 change owner,修改文件的所有者和所属组,修改归属必须用 sudo 权限,因为这涉及到系统级的用户管理:

# 格式:sudo chown 所有者:所属组 文件名
sudo chown ubuntu:ubuntu test.txt  # 把test.txt的所有者和所属组都改成ubuntu
sudo chown -R ubuntu:ubuntu project/  # -r递归修改,把project文件夹里所有内容的归属都改掉

chgrp 就是 change group,只修改所属组,比 chown 更直观,专门用来修改组:

# 修改文件的所属组为group1
sudo chgrp group1 test.txt

# 递归修改
sudo chgrp -R group1 project/

概念 4:应用商店与快递员 —— 软件包管理

核心比喻

Linux 的软件管理,你不用去网上找安装包、不用担心下到病毒、不需要手动点下一步安装,软件源就是官方认证的应用商店,里面有打包好的软件;包管理器就是快递员 ,帮你一键找软件、下载、安装、升级,还会自动帮你解决依赖(装这个软件必须先装的其他组件),全程仅靠命令搞定。

/etc/apt/sources.list 是你的软件源地址列表,相当于你用哪个应用商店,国内使用可以换成清华、阿里的镜像源,下载速度更快,不用修改也能正常用,但你要知道它的存在。下列讲解我们以 Debian/Ubuntu 系列的 apt 包管理器为例(CentOS系列则是 yum 包管理器)。

核心命令组
# 第一步:刷新应用商店的商品列表,安装/升级软件前必须先做!不然安装的是旧版本软件
sudo apt update

# 第二步:升级所有已安装的软件,到最新的稳定版本
sudo apt upgrade -y  # -y参数自动确认,不用手动输y

# 搜索软件:找你想装的软件,不知道完整包名的时候用
apt search neofetch  # 搜索名字里带neofetch的软件

# 查看软件详情:看软件的介绍、版本、依赖、大小,安装前先了解
apt show neofetch

# 安装软件:一键安装,自动解决所有依赖
sudo apt install neofetch -y
# 同时安装多个软件,空格隔开就行
sudo apt install neofetch cmatrix htop -y

# 卸载软件:只删除软件,保留配置文件,以后重装还能沿用配置
sudo apt remove neofetch

# 彻底卸载:删除软件+所有配置文件,完全清理干净
sudo apt purge neofetch

# 清理无用的软件包、安装缓存,释放硬盘空间
sudo apt autoremove -y  # 删除不再需要的依赖包
sudo apt clean  # 清空下载的安装包缓存
成就感实操:一键安装炫酷工具

我们来装两个有趣的工具,让你立刻感受到 Linux 的乐趣,瞬间有那味了:

  1. neofetch:一键显示你的系统信息 + 发行版 logo,截图、晒配置神器
sudo apt update && sudo apt install neofetch -y
neofetch

执行后,你就能看到炫酷的系统信息面板,包含系统版本、内核、CPU、内存、主题等所有信息。

  1. cmatrix:黑客帝国的代码雨效果,装 X 用的
sudo apt install cmatrix -y
cmatrix

执行后,终端就会出现滚动的绿色代码雨,按 q 退出,加-b参数可以显示加粗的字符。

💡 冷知识:apt 包管理器的全称是 Advanced Package Tool,诞生于 1998 年,比 Windows 的应用商店早了整整 14 年,这也是 Linux 用户从来不用 “找安装包、关捆绑软件” 的核心原因。


概念 5:文件快递员 —— 打包与压缩

核心比喻

打包压缩就像把一堆零散的文件,装进一个快递箱里,再用胶带封好、压缩体积,方便传输和备份。Linux 里最常用的工具是tar,它既能打包,也能配合不同的压缩算法进行压缩,就像一个万能的快递打包机。

Linux 里常见的压缩格式有三种,压缩率和速度各有不同:

  • .tar.gz:最常用的格式,压缩速度快,压缩率中等,兼容性最好
  • .tar.bz2:压缩率比 gz 高,速度慢一点
  • .tar.xz:压缩率最高,速度最慢,适合大文件压缩
  • .zip:和 Windows 系统兼容的格式,方便跨系统传输
核心命令组

tar 命令的参数看起来多,但其实非常有规律,记住以下几个核心参数,基本就能搞定绝大多数打包压缩场景:

  • c:create,创建新的打包文件
  • x:extract,解压打包文件
  • v:verbose,显示详细过程,能看到正在打包 / 解压哪些文件
  • f:file,指定打包 / 解压的文件名,这个参数必须放在最后,后面紧跟文件名
  • z:使用 gzip 压缩算法(.tar.gz)
  • j:使用 bzip2 压缩算法(.tar.bz2)
  • J:使用 xz 压缩算法(.tar.xz)
  • C:指定解压到哪个目录

打包 & 压缩

1. 打包压缩
# 1. 最常用:打包并压缩成.tar.gz格式
tar -zcvf 输出文件名.tar.gz 要打包的文件/文件夹
# 示例:把test.txt文件打包成test.txt.tar.gz
tar -zcvf test.txt.tar.gz test.txt
# 2. 更高压缩率:打包成.tar.bz2格式
tar -jcvf test.txt.tar.bz2 test.txt
# 3. 最高压缩率:打包成.tar.xz格式
tar -Jcvf test.txt.tar.xz test.txt
# 4. 只打包不压缩:生成.tar文件
tar -cvf test.txt.tar test.txt
# 5. 打包多个文件/文件夹,空格隔开
tar -zcvf backup.tar.gz project/ test.txt
2. 解压文件

不管是什么格式的 tar 压缩包,用下面这条命令都能解压,不用记不同的参数:

tar -xvf 压缩包文件名
# 示例:解压test.txt.tar.gz
tar -xvf test.txt.tar.gz

# 同样适用于.tar.bz2、.tar.xz、.tar格式
tar -xvf my_note.tar.bz2
tar -xvf my_note.tar.xz
tar -xvf my_note.tar
3. 解压到指定目录

默认解压到当前目录,用-C参数可以指定解压到其他目录:

# 把test.txt.tar.gz解压到/tmp目录下
tar -xvf my_note.tar.gz -C /tmp/
4. 查看压缩包内容(不解压)

想看看压缩包里有什么文件,不用解压,直接用-t参数:

tar -tvf my_note.tar.gz
5. zip 格式(和 Windows 兼容)

如果需要和 Windows 用户传输文件,用 zip 格式最方便:

# 安装zip/unzip工具
sudo apt install zip unzip -y

# 压缩成zip格式
zip -r project.zip project/  # -r递归压缩文件夹

# 解压zip文件
unzip project.zip

# 解压到指定目录
unzip project.zip -d /tmp/

# 查看zip包内容
unzip -l project.zip

⚠️ 注意:tar 命令默认会保留文件的权限、所有者、修改时间等所有属性,这是它比 zip 更适合 Linux 系统备份的核心原因。zip 格式会丢失 Linux 的权限信息,只适合跨系统传输普通文件。

💡 冷知识:tar 命令的全称是 Tape Archive(磁带归档),最早是用来把文件备份到磁带上的,现在已经成为了 Linux 世界的标准打包工具,沿用了几十年。


概念 6:编写一个配置文件 —— 文本编辑

核心比喻

Linux 里,几乎所有软件、系统的设置,都存在纯文本的配置文件里。配置文件就像软件的 “喜好设置清单”,学会编辑文本文件,你就拿到了系统的定制权,不用再点图形界面的各种按钮,也能远程修改服务器的配置。

我们先学习简单易操作的 nano 编辑器,它没有复杂的模式,打开就能编辑,底部还有所有快捷键提示。同时,我们也要学习你 vim 的基本操作,因为绝大多数服务器只有 vim 编辑器。

核心操作教学
1. nano 编辑器
# 打开/创建一个文件,文件不存在就会自动创建
nano my_first_config.conf

打开后,我们就可以直接编辑内容了,底部的^ 就是 Ctrl 键,以下是核心快捷键:

快捷键 核心功能
Ctrl+O 保存文件(Write Out),按回车确认文件名
Ctrl+X 退出编辑器,没保存会提示你是否保存
Ctrl+K 剪切当前整行
Ctrl+U 粘贴刚才剪切的内容
Ctrl+W 搜索内容
Ctrl+\ 查找并替换

亲手完成任务

  1. 执行nano ~/.myapprc ,打开你的第一个配置文件(. 开头的是隐藏配置文件,放在家目录里)
  2. 写入两行配置:
# 我的第一个Linux配置文件
name=Linux001
version=1.0
enable=yes
  1. Ctrl+O,回车确认保存,再按Ctrl+X退出
  2. 执行cat ~/.myapprc ,查看你写的配置文件,这就是 Linux 系统的核心操作 —— 编辑配置文件,后续修改任何软件的配置,都是这个逻辑。
2. vim 编辑器
# 打开/创建文件
vim test.txt

vim 有两种核心模式:

  • 命令模式:打开 vim 默认进入的模式,不能打字编辑,只能执行命令、保存、退出
  • 插入模式:可以正常打字编辑内容的模式

生存级 4 步操作,基本步骤逻辑

  1. 打开 vim 后,按i键,进入插入模式,底部会显示-- INSERT -- ,这时你就可以正常打字编辑了。
  2. 编辑完后,按Esc键,回到命令模式,底部的-- INSERT -- 会消失。
  3. 在命令模式下,输入:wq,按回车,就是保存并退出(w=write 写入,q=quit 退出)。
  4. 如果编辑错了,不想保存,输入:q! ,按回车,就是强制不保存退出,不会修改原文件。

退出 / 保存命令(命令行模式,先按 :):

命令 作用
:q 正常退出(文件没改动才能退)
:q! 强制退出,不保存(改了内容也直接放弃)
:w 只保存,不退出
:wq 保存并退出(最常用)
:x 保存并退出,和 wq 一样

常用功能按键:

按键 功能 详细说明
x 删除光标所在单个字符 按一次删一个,相当于删除键
dd 删除光标所在整行 最常用,删一整行
ndd 向下删除 n 行 例:3dd 删除当前行 + 下面 2 行,共 3 行
yy 复制光标所在整行 复制一整行到剪贴板
nyy 向下复制 n 行 例:2yy 复制当前行 + 下一行
p 粘贴到光标下一行 小写 p,最常用
P 粘贴到光标上一行 大写 P

后续想深入学习,终端输入vimtutor ,就能打开官方的 vim 教程,你可以跟着学习使用 vim 的进阶功能。


概念 7:看门狗与任务管理器 —— 进程初识

核心比喻

每个运行的程序,都是一个进程,就像你安排的一个个工作任务。每个进程都有唯一的身份证号 ——PID,系统靠 PID 管理所有进程,哪怕两个程序名字一模一样,PID 也是唯一的。top 就是实时监控所有进程的看板,能看到谁占了太多 CPU 和内存,谁在休息,谁卡死了。

核心命令组
# ps aux:列出系统当前所有运行的进程,最常用的进程查看命令,工业界标准用法
ps aux
# 核心列说明:USER=运行进程的用户,PID=进程号,%CPU=CPU占用率,%MEM=内存占用率,COMMAND=进程名
# 常用组合:ps aux | grep 进程名,筛选你要找的进程
ps aux | grep neofetch
# top:实时监控进程的资源占用,相当于Linux的任务管理器
top
# 核心操作:按M按内存占用排序,按P按CPU占用排序,按1显示所有CPU核心的占用情况,按q退出
# 更友好的替代是htop,界面更直观,支持鼠标操作,安装命令:sudo apt install htop -y
# kill:结束进程,先温柔结束,不行再强制结束,绝对不要一上来就用-9
kill 1234  # 结束PID为1234的进程,温柔终止,会让程序保存数据、清理资源后再退出
kill -9 1234  # 强制结束进程,相当于直接拔电源,只有程序卡死、温柔终止无效的时候才用
# 按进程名结束进程,不用记PID
pkill sleep  # 结束所有名字里带sleep的进程
killall sleep  # 结束所有名为sleep的进程
# 前台与后台操作,新手必懂的免死金牌
Ctrl+C  # 中断当前终端正在运行的命令,不管什么情况,按这个都能停掉

sleep 100 &  # &符号,让命令在后台运行,不占用你的终端,你可以继续输入其他命令
jobs  # 查看当前终端后台运行的所有任务,会显示任务号(比如[1])、运行状态、命令
kill %1  # 结束任务号为1的后台进程,不用记PID,%+任务号就能操作
fg %1  # 把后台任务号为1的进程,拉回前台运行
bg %1  # 把前台暂停的进程,放到后台继续运行

亲手演示一遍,彻底搞懂前后台

# 1. 让系统后台休眠100秒
sleep 100 &
# 2. 查看后台任务,会显示[1]+ 运行中 sleep 100 &
jobs
# 3. 结束这个后台任务
kill %1
# 4. 再查看,任务已经结束了,会显示[1]+ 已终止 sleep 100
jobs

四、你的独立冒险 —— 综合任务挑战

恭喜你,已经学完了 Linux 的全部核心概念。现在,我们用一个 10 步的连贯任务,把所有知识融合起来,完成你的第一次独立 Linux 冒险。

任务目标:在家目录搭建一个完整的个人笔记项目,完成目录创建、内容编写、权限设置、日志监控、内容检索、打包备份全流程,把你学到的所有命令都用一遍。

步骤 操作命令(带注释) 预期结果与验证方法
1 pwd 确认当前在家目录,输出/home/你的用户名,如果不在,执行cd ~回到家目录
2 mkdir -p my_note/{src,docs,log,config,backup} 一次性创建 my_note 文件夹,以及 5 个子文件夹,用ls my_note验证,能看到 5 个子文件夹
3 cd my_note && ls 进入项目目录,确认 5 个子文件夹都存在,没有报错,用pwd验证当前路径是/home/你的用户名/my_note
4 nano docs/first_note.md 打开编辑器,写入你的 Linux 学习笔记,比如 “今天我学会了 Linux 的文件系统、权限、管道命令”,Ctrl+O 保存,Ctrl+X 退出
5 ls -l docs/first_note.md 查看笔记文件的详细信息,确认所有者是你,权限默认是 664
6 touch log/run.log && tail -f log/run.log 创建日志文件,实时监控日志内容;新开一个终端,输入echo "xxxx-xx-xx 笔记创建完成" >> ~/my_note/log/run.log ,就能看到原终端实时刷新内容,按 Ctrl+C 退出
7 grep -i "linux" docs/first_note.md 搜索笔记里所有包含 Linux 的行,验证你的内容,能看到你写的笔记内容
8 chmod 600 docs/first_note.md 给笔记设置私密权限,只有你能读写,用 ls -l docs/first_note.md 验证,权限变成-rw-------
9 neofetch > README.md && cat README.md 把系统信息写入项目 README 文件,查看内容是否正确,能看到完整的系统信息
10 tar -zcvf backup/my_note_backup.tar.gz ./* 把整个项目打包压缩,放到 backup 文件夹,完成备份;用ls backup/验证,能看到压缩包文件

五、求生指南 —— 高频错误与解救

1. 命令未找到:command not found

原因:① 命令拼写错了(Linux 大小写敏感,Ls 和 ls 是两个完全不同的命令);② 这个软件没安装;③ 命令所在的路径不在系统的环境变量 PATH 里。

解决方法

  • 先检查拼写,善用 Tab 键补全命令,不要一个字母一个字母的敲;
  • 如果是第三方命令,用apt search 命令名 搜索对应的软件包,安装后再用;
  • echo $PATH 查看系统的命令路径,确认你的命令所在的目录在 PATH 里,临时添加用export PATH=$PATH:/你的命令路径

2. 权限拒绝:Permission denied

错误做法:一看到权限拒绝,就直接加 sudo,这是新手最容易踩的坑,会留下巨大的安全隐患!

正确解决方法

  • 先执行ls -l 文件名 ,看清楚权限:是你没有读 / 写 / 执行权限,还是文件的所有者不是你;
  • 如果是执行脚本提示拒绝,先给文件加执行权限chmod u+x 文件名 ,而不是直接 sudo;
  • 如果是文件所有者不对,用 sudo chown 修改归属,而不是直接 sudo;
  • 只有修改系统文件、安装软件这种必须管理员权限的操作,才用 sudo。

3. 没有这个文件或目录:No such file or directory

原因:① 文件名 / 路径拼写错了;② 你当前所在的目录不对,用了相对路径;③ 你要操作的文件真的不存在。

解决方法

  • 敲命令前,先pwd确认自己在哪,再ls 看当前目录里有没有你要操作的文件;
  • 善用 Tab 键补全路径,输入文件名的前几个字母,按 Tab,系统会自动帮你补全,不会打错;
  • 不确定路径的时候,用绝对路径(从 / 开头的完整路径)。

4. 不小心删错了文件

核心前提:Linux 默认没有回收站,rm 删除的文件,几乎无法恢复,没有后悔药。

预防与解决

  • 养成用rm -i 的习惯,每次删除前都会让你确认,避免手滑;
  • 绝对不要用sudo rm -rf 加任何不确定的路径,尤其是带/的路径;
  • 新手建议用 trash-cli 替代 rm,把文件放到回收站,删错了能恢复;
  • 重要文件一定要先备份,再操作,这是 Linux 用户的生存法则。

5. 在错误的目录执行了危险命令

典型场景:你想删项目里的 tmp 文件夹,结果在根目录执行了rm -rf tmp ,直接删掉了系统的临时目录,系统出问题。

解决方法

  • 敲任何带rmmvchmod -R 的危险命令前,先敲pwd 确认自己在哪,再ls 看一下要操作的文件 / 目录对不对;
  • 养成 “先看路径,再敲命令” 的习惯,不要复制网上的命令直接执行,先看懂每一个参数的含义;
  • 绝对不要在根目录 / 下执行任何递归删除、递归修改权限的命令。

6. 被困在 vim 里,不知道怎么退出

新手高频噩梦:不小心打开了 vim,怎么打字都没反应,也不知道怎么退出,只能关掉终端。

解决方法

  • Esc键,确保回到命令模式;
  • 输入:q! ,按回车,强制不保存退出,就能出来;
  • 如果想保存退出,输入:wq ,按回车。

7. 终端卡死了,输入什么都没反应

原因:可能不小心按了 Ctrl+S,触发了终端的流量控制,锁定了屏幕输出,不是真的卡死了。

解决方法:按Ctrl+Q ,就能解锁终端,恢复正常,不用关掉终端重开。

8. 命令执行了一半,想停下来,不知道怎么办

两大免死金牌

  1. 不管什么时候,慌了、不知道当前命令在干嘛、程序卡死了,按Ctrl+C ,中断当前所有操作;
  2. 遇到不会的命令,先man 命令名或者命令 --help ,查看官方文档。

六、你已经是一名 Linux 新手冒险家了

跟着教程,亲手敲试所用命令,从认识 Linux 的世界观开始,我们学会了文件系统的树形结构,看懂了权限规则,能操作文件、编辑配置、安装软件、管理进程,更重要的是,建立起 Linux 的核心心智模型,学会了用管道和重定向组合命令,学会了自己查文档解决问题。走到这里,你就已经掌握了 Linux 日常的基本操作,自此入门圆满,以此为基石,便可从容应对后续更深层次的 Linux 学习与实战探索。

下一步进阶路径

  1. 交互式闯关学习:OverTheWire Bandit 游戏

    专门为新手设计的 SSH 闯关游戏,用你学到的 Linux 命令一关一关破解密码,边玩边学,完全免费。第一关直接在终端输入 ssh bandit0@bandit.labs.overthewire.org -p 2220 ,密码是bandit0 ,就能开始你的冒险。

  2. 学习资源:

  3. 深入学习:Shell 脚本编程

    当你熟练掌握基础命令后,可以学习 Shell 脚本,把重复的操作写成脚本,一键执行,实现自动化运维,这是 Linux 进阶的必经之路。

最后寄语:命令行从来不是冰冷的黑箱,而是你与机器之间,最直接、最真诚的对话方式。 愿你我在 Linux 的世界里,永远保持好奇,永远敢于探索。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐