Linux 基础实验:从终端操作到 C 语言编译

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 权限报错

解决方法:

  1. 先切换到 root 超级管理员登录;
  2. 给该用户添加 sudo 权限:
bash 复制代码
# -aG:追加附属组,将用户 student 添加到 wheel 管理员组
# 注意:不能省略 -a,否则会覆盖原有用户组
usermod -aG wheel student
  1. 退出 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 -rrm -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 操作流程:

  1. 打开 vim 后,按下 i 键进入插入模式 (INSERT),此时左下角显示 -- INSERT --
  2. 输入以下 C 语言代码;
  3. 按下 Esc 键退出插入模式,回到命令模式
  4. 输入 :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. rmdirrm -r 删除目录的核心差异?

命令 能力 限制
rmdir 仅能删除完全为空的目录 目录内有文件或子目录会直接报错
rm -r 递归删除,无论目录是否为空 会删除目录及内部全部文件和子目录

5. 如何创建 Linux 隐藏文件?如何一次性查看所有隐藏文件?

  • 创建 :文件名以 . 开头即为隐藏文件。
bash 复制代码
touch .myhide.txt
  • 查看 :使用 -a 选项列出所有文件(含隐藏文件)。
bash 复制代码
ls -a

6. 终端提示 Permission denied(权限不足)的两种常用解决方法?

  1. 使用 sudo 提权:以管理员 root 身份执行该命令。
bash 复制代码
sudo 命令
  1. 使用 chmod 修改权限:为目标文件/目录增加读、写或执行权限。
bash 复制代码
chmod u+w 文件/目录名   # 给属主添加写权限
chmod a+x 文件/目录名   # 给所有人添加执行权限
相关推荐
邪修king1 小时前
Re:Linux 系统篇(二十九):动静态库Chapter2:动态库深度辨析 —— 核心本质、制作流程、双阶段查找模型与排错指南
android·java·linux·开发语言
智能运维指南1 小时前
持续集成平台怎么选?从Jenkins迁移、信创适配到质量门禁的全维评估
运维·devops·嘉为蓝鲸
云泽8083 小时前
从零搭建 WSL2 + Ubuntu C/C++ 开发环境:原理、实践与底层架构解析
linux·c++·windows·ubuntu·wsl2
bosins10 小时前
彻底解决 WSL 2.7+ 空闲自动关闭/内存回收导致 Docker 中断的问题
linux·docker·wsl·dashboard
LongRunning10 小时前
【Linux】H3网络(二)
linux
xx~t11 小时前
嵌入式学习——ARM1
linux·arm开发·嵌入式硬件·arm
xx~t11 小时前
嵌入式——ARM1(详细篇)
linux·arm开发·嵌入式硬件·arm
我要见SA姐112 小时前
告别 Copilot?Codex 本地化部署指南
运维·数据库·机器学习·oracle·回归
Elastic 中国社区官方博客13 小时前
列式存储并不等同于列式数据库。Columnar 模式为 Elasticsearch 带来了什么
大数据·运维·数据库·elasticsearch·搜索引擎