Linux 基础操作
一、实验环境
| 项目 | 配置 |
|---|---|
| 操作系统 | CentOS Stream 9 |
| 运行方式 | VMware 虚拟机 |
| 操作终端 | FinalShell(SSH 远程连接) |
二、Linux 系统概述
2.1 核心特点
Linux 是开源、多用户、多任务的类 Unix 操作系统内核,常见发行版有 CentOS、Ubuntu、Debian 等。
设计哲学:一切皆文件,命令行驱动,高度可自动化。
2.2 核心目录结构
| 目录 | 说明 |
|---|---|
/ |
所有文件的入口,根目录 |
/home |
普通用户的主目录,每个用户对应一个文件夹(如 /home/user2) |
/root |
超级管理员 root 用户的主目录,拥有最高权限 |
/bin |
存放系统基础可执行命令(cd、ls、cp 等) |
/etc |
系统及所有软件的配置文件目录 |
/usr |
用户程序、软件安装、文档存放目录 |
/tmp |
临时文件目录,系统重启后文件自动清空 |
2.3 路径概念
- 绝对路径 :从根目录
/开始书写的完整路径,唯一不重复。 - 相对路径:相对于当前所在目录的路径,书写简单,无需从根目录开始。
特殊路径符号:
| 符号 | 含义 |
|---|---|
. |
当前目录 |
.. |
上一级目录 |
~ |
当前用户的主目录(家目录) |
2.4 命令通用格式
命令 [选项] [参数]
| 组成 | 说明 | 是否必须 |
|---|---|---|
| 命令 | 核心操作指令(如 ls、cd、cp) | ✅ 必须 |
| 选项 | 修饰命令功能,以 - 或 -- 开头(如 -l、-a) |
❌ 可选 |
| 参数 | 命令操作的对象(文件、目录、路径等) | ❌ 可选 |
三、终端基础操作与用户切换
3.1 常用命令速查
| 操作说明 | 命令 | 说明 |
|---|---|---|
| 查看当前登录用户 | whoami |
输出当前用户名 |
| 切换超级管理员 root | sudo su |
普通用户切换到 root,提示符从 $ 变成 # |
| 退出管理员,回到普通用户 | exit |
提示符 # 变回 $ |
3.2 操作演示
步骤一:查看当前登录用户
bash
whoami
图1:查看当前登录用户

步骤二:切换到超级管理员 root
bash
sudo su
切换成功后,命令提示符从 $ 变为 #。
图2:切换到超级管理员 root

⚠️ 注意:如果普通用户没有 sudo 权限,会提示如下错误:
图3:普通用户无 sudo 权限报错

解决方法:
- 先切换到 root 超级管理员登录;
- 给该用户添加 sudo 权限:
bash
# -aG:追加附属组,将用户 student 添加到 wheel 管理员组
# 注意:不能省略 -a,否则会覆盖原有用户组
usermod -aG wheel student
- 退出 root 后,回到普通用户下重新执行操作。
步骤三:退出超级管理员,回到普通用户
bash
exit
图4:退出超级管理员

四、目录浏览与路径切换
4.1 常用命令速查
| 操作说明 | 命令 | 说明 |
|---|---|---|
| 查看当前所在目录 | pwd |
打印当前工作目录 |
| 切换到根目录 | cd / |
进入根目录 / |
| 切换到上一级目录 | cd .. |
.. 代表上级目录 |
| 切换到自己家目录 | cd ~ 或 cd |
~ 代表用户家目录 |
| 列出目录文件 | ls |
普通列出 |
| 显示所有文件(含隐藏) | ls -a |
显示 . 开头的隐藏文件 |
| 长格式显示权限、大小、时间 | ls -l |
详细信息 |
| 组合参数:全部文件 + 详细信息 | ls -al |
最常用 |
4.2 操作演示
步骤一:查看当前所在目录
bash
pwd
图5:查看当前所在目录

步骤二:目录切换
bash
cd / # 切换到根目录
cd .. # 切换到上一级目录
cd ~ # 切换到自己家目录
图6:目录切换操作演示

步骤三:列出文件夹内容
bash
ls # 普通列出
ls -a # 显示隐藏文件
ls -l # 长格式显示详细信息
ls -al # 全部文件 + 详细信息(最常用)
图7:列出目录文件

4.3 权限操作
| 操作说明 | 命令 | 说明 |
|---|---|---|
| 给 run.sh 增加所有人执行权限 | chmod a+x run.sh |
a=all 所有人,+x 增加执行权限 |
| 给属主增加写权限 | chmod u+w test.txt |
u=user 属主,+w 增加写权限 |
| 数字权限设置 644 | chmod 644 test.txt |
属主读写,组和其他只读 |
权限数字含义: r=4、w=2、x=1;6=4+2(读写),4 只读。
4.4 chmod 符号权限模式详解
角色(谁)
| 符号 | 含义 |
|---|---|
u |
user:属主 / 文件所有者 |
g |
group:属组,文件所属用户组 |
o |
other:其他人,既不是属主也不在属组内 |
a |
all:所有人(u+g+o) |
权限类型(什么权限)
| 符号 | 含义 |
|---|---|
r |
read:读权限 |
w |
write:写权限 |
x |
execute:执行权限(文件可运行;目录可进入) |
操作符(怎么改)
| 操作符 | 含义 |
|---|---|
+ |
增加权限,原有权限保留 |
- |
移除权限 |
= |
直接设置权限,覆盖原有权限 |
操作示例:
bash
# 给 test 文件夹的所有人(a)添加写(w)权限
chmod a+w test
图8:给 test 目录添加写权限

五、目录的创建、移动、复制、删除
5.1 常用命令速查
| 操作说明 | 命令 | 说明 |
|---|---|---|
| 创建单层目录 test | mkdir test |
创建 test 文件夹 |
| 递归创建多级目录 test1/test2/test3 | mkdir -p test1/test2/test3 |
-p 自动创建父目录 |
| 重命名 test → mytest | mv test mytest |
同目录 mv = 重命名 |
| 把 mytest 移动到 /tmp | mv mytest /tmp/ |
跨目录 mv = 移动 |
复制目录(必须带 -r) |
cp -r /tmp/mytest / |
-r 递归复制目录及所有内容 |
| 删除空目录 | rmdir 空目录名 |
只能删空文件夹,有文件会报错 |
| 删除目录(会提示确认) | rm -r 目录名 |
删除目录,交互式询问 |
| 强制递归删除(⚠️ 高危慎用) | rm -rf 目录名 |
不提示直接删除 |
⚠️ 警告 :
rm -rf极度危险,实验时不要随意对/操作!
5.2 操作演示
步骤一:创建目录
bash
mkdir test # 创建单层目录
mkdir -p test1/test2/test3 # -p 递归创建多级目录,自动创建父目录
图9:创建单层目录与多级目录

步骤二:重命名与移动
bash
mv test mytest # 同目录下 mv = 重命名:将 test 改名为 mytest
mv mytest /tmp/ # 跨目录 mv = 移动:将 mytest 移动到 /tmp 目录下
图10:重命名与移动目录

步骤三:复制目录
bash
# -r 递归复制目录及其内部所有子目录和文件
cp -r test1 copy
图11:复制目录

步骤四:删除空目录
bash
rmdir 空目录名
图12:删除空目录

删除非空目录请使用
rm -r或rm -rf,详见上方命令速查表。
六、文件的创建、编辑与查看
6.1 常用命令速查
| 操作说明 | 命令 | 说明 |
|---|---|---|
| 创建空文件 | touch test.txt |
新建空白文本文件 |
| 一次性输出全部内容 | cat test.txt |
打印全部文件内容 |
| 分页浏览大文件 | more test.txt |
回车翻行,空格翻页,q 退出 |
| 高级分页查看 | less test.txt |
上下键滚动,q 退出 |
| 看文件前 5 行 | head -n 5 test.txt |
读取头部 5 行 |
| 看文件末尾 | tail test.txt |
读取文件尾部(默认最后 10 行) |
| 覆盖写入内容 | echo "Hello Linux!" > test.txt |
> 覆盖,会清空原有内容 |
| 追加写入内容 | echo "第二行内容" >> test.txt |
>> 追加,保留原有内容 |
6.2 操作演示
步骤一:创建空文件
bash
touch test.txt
图13:创建空文件

步骤二:查看文件内容
bash
cat test.txt # 一次输出全部内容
more test.txt # 分页浏览
less test.txt # 高级分页,上下滚动
head -n 5 test.txt # 查看前 5 行
tail test.txt # 查看末尾内容
图14:不同方式查看文件内容(此处为刚创建的空文件,暂无内容显示)

步骤三:写入与追加内容
bash
# > 覆盖写入:会清空文件原有内容,然后写入新内容
echo "Hello Linux!" > test.txt
# >> 追加写入:在文件末尾追加内容,保留原有内容
echo "第二行内容" >> test.txt
图15:写入与追加文件内容

注意 :
>与>>的核心区别:
>:覆盖重定向,清空原有内容后写入;>>:追加重定向,在末尾添加新内容。
步骤四:使用 cat 验证写入结果
bash
cat test.txt
七、系统基础信息查看
7.1 常用命令速查
| 操作说明 | 命令 | 说明 |
|---|---|---|
| 查看 CentOS 系统版本 | cat /etc/os-release |
输出系统发行版本信息 |
| 查看系统当前时间 | date |
显示日期、时区时间 |
| 查看敲过的历史命令 | history |
列出执行过的全部历史指令 |
| 查看命令所在程序路径 | which ls / which cat |
查找命令的二进制文件位置 |
| 查看当前工作目录 | pwd |
打印当前工作目录 |
7.2 操作演示
步骤一:查看系统版本
bash
cat /etc/os-release
图16:查看 CentOS 系统版本

步骤二:查看系统当前时间
bash
date
图17:查看系统当前时间

步骤三:查看历史命令
bash
history
图18:查看历史命令记录

步骤四:查看命令所在程序路径
bash
which ls # 查找 ls 命令的二进制文件路径
which cat # 查找 cat 命令的二进制文件路径
图19:查看命令所在程序路径

步骤五:查看当前工作目录
bash
pwd
图20:查看当前工作目录

八、挂载与卸载
实验说明 :本实验没有物理 U 盘,使用
dd命令创建虚拟镜像文件来模拟磁盘设备,完成 mount 与 umount 实验。整套操作在虚拟机内部完成,不需要外接 U 盘。
8.1 查看磁盘挂载状态
bash
df -h
# df:查看已经挂载的设备
# -h:以人性化单位(KB/MB/GB)显示
图21:查看磁盘分区挂载状态

8.2 创建虚拟镜像并挂载
步骤一:创建 100M 虚拟磁盘镜像文件
bash
dd if=/dev/zero of=disk.img bs=1M count=100
# if=/dev/zero:输入源为 /dev/zero(无限零字节的设备文件)
# of=disk.img:输出目标为 disk.img 文件
# bs=1M:每次读写块大小为 1MB
# count=100:共读写 100 个块,生成 100MB 文件
步骤二:格式化虚拟镜像为 ext4 文件系统
bash
mkfs.ext4 disk.img
# 将 disk.img 格式化为 ext4 文件系统,模拟磁盘格式化过程
步骤三:创建挂载点目录
bash
mkdir /mnt/mydisk
# 挂载点必须是一个存在的空目录
步骤四:挂载虚拟镜像(loop 回环挂载)
bash
mount -o loop disk.img /mnt/mydisk
# -o loop:使用回环设备,将普通文件当作块设备来挂载
# disk.img:要挂载的镜像文件
# /mnt/mydisk:挂载点目录
步骤五:验证挂载结果
bash
df -h
图22:挂载成功效果展示(红框处显示 disk.img 已挂载到 /mnt/mydisk)

8.3 卸载设备
bash
umount /mnt/mydisk
# 使用挂载点路径卸载
或者:
bash
umount disk.img
# 使用镜像文件名卸载(二者等效)
图23:卸载设备

九、C 语言编写与编译(vim + gcc)
前置条件:确认虚拟机已安装 gcc 编译器。如果未安装:
bash
sudo dnf install gcc -y
# dnf:CentOS Stream 9 的包管理器
# install gcc:安装 gcc 编译器
# -y:自动确认,无需交互
9.1 使用 vim 创建并编辑 C 代码文件
bash
vim test.c
图24:vim 编辑器初始界面

vim 操作流程:
- 打开 vim 后,按下
i键进入插入模式 (INSERT),此时左下角显示-- INSERT --; - 输入以下 C 语言代码;
- 按下
Esc键退出插入模式,回到命令模式; - 输入
:wq并回车 ------ 保存文件并退出 vim。
C 语言代码:
c
#include <stdio.h> // 引入标准输入输出头文件,提供 printf 函数声明
int main() {
// printf:向终端输出字符串
// \n:换行转义字符,输出后光标移至下一行
printf("Hello C Linux!\n");
// return 0:程序正常结束,返回状态码 0 给操作系统
// 非 0 返回值通常表示程序异常退出
return 0;
}
9.2 编译与运行
| 操作说明 | 命令 | 说明 |
|---|---|---|
| gcc 编译源代码 | gcc test.c -o testprog |
-o 指定输出的可执行文件名 |
| 运行编译出的程序 | ./testprog |
./ 表示执行当前目录下的程序 |
bash
# 编译:将源码 test.c 编译为可执行文件 testprog
gcc test.c -o testprog
# -o testprog:指定生成的可执行文件名为 testprog
# 如果编译无报错,则生成名为 testprog 的可执行文件
# 运行:执行当前目录下的可执行文件
./testprog
# ./ 表示当前目录,Linux 执行程序必须指定路径
图25:编译与运行 C 程序

十、快捷键操作技巧
以下快捷键无需输入命令,直接使用键盘操作:
| 操作说明 | 按键 | 效果 |
|---|---|---|
| Tab 自动补全 | 输入部分字符,按 Tab |
补全文件名、命令名;按两次 Tab 列出所有候选 |
| 清空屏幕 | Ctrl + L |
清屏,历史记录仍在,只是视觉上清空 |
| 终止卡住的程序 | Ctrl + C |
中断当前前台运行的程序,回到命令提示符 |
| 调取历史命令 | ↑ / ↓ 方向键 |
上下翻看已输入过的历史命令 |
十一、常见问题与解决
| 问题现象 | 报错信息 | 原因 | 解决方法 |
|---|---|---|---|
执行 sudo su 失败 |
student 未出现在 sudoers 文件中 |
普通用户 student 不在 sudo 授权列表(sudoers)中,没有 sudo 提权权限 | root 执行 usermod -aG wheel student,将用户加入 wheel 管理员组,重新登录终端生效 |
十二、思考与总结
1. 绝对路径与相对路径的区别及应用场景?
- 绝对路径 :从根目录
/开始书写,完整唯一,不会因当前目录变化而改变。 - 相对路径:以当前目录为基准,书写简短,随当前目录变化而变化。
- 应用场景 :
- 脚本、配置文件中的固定路径应使用绝对路径,确保任何环境下都能正确找到目标;
- 交互式命令行中临时切换目录使用相对路径,操作更高效。
2. 为什么复制目录必须加 -r 参数,而复制普通文件不需要?
cp默认只复制普通文件。- 目录内部包含子目录和大量文件,
-r(recursive,递归)代表递归遍历目录内部的所有内容并一起复制。 - 普通文件没有子内容,无需
-r。
3. > 与 >> 的本质区别及使用选择?
| 符号 | 类型 | 行为 | 适用场景 |
|---|---|---|---|
> |
覆盖重定向 | 清空目标文件原有全部内容后写入 | 全新生成文件、重置内容 |
>> |
追加重定向 | 在文件末尾追加内容,保留原有内容 | 日志写入、持续追加数据 |
4. rmdir 与 rm -r 删除目录的核心差异?
| 命令 | 能力 | 限制 |
|---|---|---|
rmdir |
仅能删除完全为空的目录 | 目录内有文件或子目录会直接报错 |
rm -r |
递归删除,无论目录是否为空 | 会删除目录及内部全部文件和子目录 |
5. 如何创建 Linux 隐藏文件?如何一次性查看所有隐藏文件?
- 创建 :文件名以
.开头即为隐藏文件。
bash
touch .myhide.txt
- 查看 :使用
-a选项列出所有文件(含隐藏文件)。
bash
ls -a
6. 终端提示 Permission denied(权限不足)的两种常用解决方法?
- 使用 sudo 提权:以管理员 root 身份执行该命令。
bash
sudo 命令
- 使用 chmod 修改权限:为目标文件/目录增加读、写或执行权限。
bash
chmod u+w 文件/目录名 # 给属主添加写权限
chmod a+x 文件/目录名 # 给所有人添加执行权限