在这里插入图片描述


🎬 个人主页MSTcheng · CSDN
🌱 代码仓库MSTcheng · Gitee

🔥 精选专栏: 《C语言
数据结构
《算法学习》
C++由浅入深

《Linux操作系统》

💬座右铭路虽远行则将至,事虽难做则必成!

前言:在上一篇文章中我们向大家介绍了Linux的历史以及其生态,本篇文章就来着重介绍一下Linux基础指令!

一、我们为什么要学指令?

  • Linux 是命令行操作系统,和 Windows 的"鼠标点一点"不同,Linux 主要靠 输入指令(命令) 来操作文件、管理系统。
  • “先来快速认识 6 ~ 8 个指令”,先把命令用起来,然后再去逐条细化每个指令的细节。
  • 指令不是背出来的,是用出来的——跟着敲一遍,比盯着看十遍更有效。

Linux 和 Windows 的区别? "一个常见答案角度就是:Linux 以命令行为核心、一切皆文件、多用户多任务、开源免费而 Windows 以图形界面为核心。 在后面的文章中会用"路径、文件"继续印证这个差异。

二、快速认识 6 ~ 8 个基本指令

1. pwd —— 我在哪个路径下?

  • 作用:显示当前所在路径(当前工作目录)
  • “我当前在哪个路径下。”
  • 演示:
      mstcheng@mstcheng-VMware-Virtual-Platform:~$ pwd
      /home/mstcheng
      
      root@ubuntu-dev:~# pwd
      /root
    
    
  • 注意命令提示符:root 登录显示 #,普通用户 mstcheng 登录显示 $
  • 单词含义:pwd = print working directory(打印工作目录)

2. whoami —— 谁在访问 Linux?

  • 作用:显示当前登录用户是谁
  • “谁在访问 Linux 系统。”
  • 演示:
    root@ubuntu-dev:~# whoami
    root
    
    
    mstcheng@ubuntu-dev:~$ whoami
    mstcheng
    
    
  • 小技巧💡:提示符里其实已经能看到用户名,whoami 更常用在脚本或排错时确认"当前以哪个身份执行"。

3. ls —— 罗列当前目录

  • 作用:罗列(列出)当前目录下的文件和文件夹
  • “罗列当前目录。”
  • 常⽤选项:
  • -a 列出⽬录下的所有文件,包括以 . 开头的隐含文件。
  • -d 将⽬录像⽂件⼀样显示而不是显示其下的文件。 如:ls ‒d 指定目录
  • -i 输出⽂件的 i 节点的索引信息。 如 ls ‒ai 指定⽂件
  • -k 以 k 字节的形式表示文件的大小。ls ‒alk 指定⽂件
  • -l 列出文件的详细信息
  • -n ⽤数字的 UID,GID 代替名称。 (介绍 UID, GID)
  • -F 在每个文件名后附上⼀个字符以说明该⽂件的类型,*表示可执行的普通文件;/表示目录;@表示符号链接;|表示FIFOs;=表示套接字(sockets)。(目录类型识别)
  • -r 对⽬录反向排序
  • -t 以时间排序
  • -s 在l⽂件名后输出该文件的大小。(大小排序,如何找到⽬录下最⼤的⽂件)
  • -R 列出所有子目录下的文件。(递归)
  • -1 一行只输出⼀个文件。
  • 演示:
mstcheng@ubuntu-dev:~/117/code$ ls

cgdbtest  linux-code  list  makefile  procbar  testCode

mstcheng@ubuntu-dev:~/117/code$ ls -a -l

total 32
drwxrwxr-x  7 mstcheng mstcheng 4096 Nov 23  2025 .
drwxrwxr-x  4 mstcheng mstcheng 4096 Feb 11  2026 ..
drwxrwxr-x  2 mstcheng mstcheng 4096 Oct 28  2025 cgdbtest
drwxrwxr-x 18 mstcheng mstcheng 4096 Jul 18 15:22 linux-code
drwxrwxr-x  2 mstcheng mstcheng 4096 Oct 28  2025 list
-rw-rw-r--  1 mstcheng mstcheng  533 Oct 17  2025 makefile
drwxrwxr-x  2 mstcheng mstcheng 4096 Oct 21  2025 procbar
drwxrwxr-x  2 mstcheng mstcheng 4096 Nov 23  2025 testCode

mstcheng@ubuntu-dev:~/117/code$ ls -alfn
total 32
drwxrwxr-x  7 1000 1000 4096 Nov 23  2025 .
drwxrwxr-x  4 1000 1000 4096 Feb 11  2026 ..
drwxrwxr-x  2 1000 1000 4096 Oct 28  2025 list
drwxrwxr-x  2 1000 1000 4096 Oct 28  2025 cgdbtest
drwxrwxr-x 18 1000 1000 4096 Jul 18 15:22 linux-code
-rw-rw-r--  1 1000 1000  533 Oct 17  2025 makefile
drwxrwxr-x  2 1000 1000 4096 Nov 23  2025 testCode
drwxrwxr-x  2 1000 1000 4096 Oct 21  2025 procbar

4. cd —— 更改路径

  • 作用:切换到(进入)某一个目录
  • “更改路径。”
  • 演示:
mstcheng@ubuntu-dev:~/117/code$ cd linux-code/
mstcheng@ubuntu-dev:~/117/code/linux-code$ 

(提示符中的路径跟着变化,说明 cd 生效了)

1. cd 绝对路径:切到目标路径下

  • “cd 绝对路径:切换到目标路径下。”
  • 演示:
mstcheng@ubuntu-dev:~$ cd ~/117/code/linux-code/
mstcheng@ubuntu-dev:~/117/code/linux-code$ 

2. cd -:回退到上次所处的路径

  • “回退到上次所处的路径。”
  • 在"上次路径"和"当前路径"之间来回跳,非常适合在两个深目录间快速切换。

3. cd ~(不带参数直接 cd):回到当前用户家目录

  • “当前用户的家目录。” (在根目录/下有一个用户名的目录,那个目录就是你的家目录!)
    在这里插入图片描述

  • 演示:

//直接cd不带参数 那么进入的就是家目录!
mstcheng@ubuntu-dev:~/117/code/linux-code$ cd
mstcheng@ubuntu-dev:~$ pwd
/home/mstcheng
  • “root 账号的家目录”/root,普通用户(如 mstcheng)的家目录是 /home/mstcheng
  • 易错点家目录是 /root/home/用户名不是 /root 之外的东西;而根目录是 /cdcd ~ 等价,都是回家;cd / 是到根目录,别混淆。

5. mkdir —— 新建一个目录/文件夹

  • 作用:在当前目录下新建一个目录(文件夹)
  • “在当前目录下,新建一个目录 / 文件夹。”
    -演示:
mstcheng@ubuntu-dev:~/117/code$ ls
cgdbtest  linux-code  list  makefile  procbar  testCode

mstcheng@ubuntu-dev:~/117/code$ mkdir test

mstcheng@ubuntu-dev:~/117/code$ ls -a -l
total 36
drwxrwxr-x  8 mstcheng mstcheng 4096 Aug 23 17:25 .
drwxrwxr-x  4 mstcheng mstcheng 4096 Feb 11  2026 ..
drwxrwxr-x  2 mstcheng mstcheng 4096 Oct 28  2025 cgdbtest
drwxrwxr-x 18 mstcheng mstcheng 4096 Jul 18 15:22 linux-code
drwxrwxr-x  2 mstcheng mstcheng 4096 Oct 28  2025 list
-rw-rw-r--  1 mstcheng mstcheng  533 Oct 17  2025 makefile
drwxrwxr-x  2 mstcheng mstcheng 4096 Oct 21  2025 procbar
drwxrwxr-x  2 mstcheng mstcheng 4096 Aug 23 17:25 test
drwxrwxr-x  2 mstcheng mstcheng 4096 Nov 23  2025 testCode

6. touch —— 新建一个普通文件

  • 作用:新建一个普通文件

  • 演示:

mstcheng@ubuntu-dev:~/117/code$ touch code.c
mstcheng@ubuntu-dev:~/117/code$ ls -a -l
total 36
drwxrwxr-x  8 mstcheng mstcheng 4096 Aug 23 17:50 .
drwxrwxr-x  4 mstcheng mstcheng 4096 Feb 11  2026 ..
drwxrwxr-x  2 mstcheng mstcheng 4096 Oct 28  2025 cgdbtest
-rw-rw-r--  1 mstcheng mstcheng    0 Aug 23 17:50 code.c
drwxrwxr-x 18 mstcheng mstcheng 4096 Jul 18 15:22 linux-code
drwxrwxr-x  2 mstcheng mstcheng 4096 Oct 28  2025 list
-rw-rw-r--  1 mstcheng mstcheng  533 Oct 17  2025 makefile
drwxrwxr-x  2 mstcheng mstcheng 4096 Oct 21  2025 procbar
drwxrwxr-x  2 mstcheng mstcheng 4096 Aug 23 17:25 test
drwxrwxr-x  2 mstcheng mstcheng 4096 Nov 23  2025 testCode

  • 易错点mkdir 建"文件夹/目录"即我们刚刚创建的test目录!,touch 建"普通文件"即我们创建的code.c( 具体的文件),两者对象完全不同,面试现场常让口头区分。

7. clear —— 清屏

  • 作用:把屏幕上之前的内容清掉,让界面干净,方便继续操作。
  • “clear:清屏操作。”
  • 快捷方式:Ctrl + L

上面我们谈到了诸如文件夹目录这样的概念,下面就来解释一下:

三、核心观念:文件夹 == 目录

  • 文件夹 == 目录。” 文件夹就是一个目录
  • 也就是说:Windows 里我们叫 “文件夹”,在 Linux 里叫"目录",它们是同一个东西
  • 后面遇到"目录"这个词,就把它翻译成 Windows 的"文件夹"来理解,能省很多困惑。
  • 同理,Linux 里的"文件"也不只是文本,目录本身也是一种文件(后面"文件类型"一节会讲)。

在上面我们还谈到了路径问题,下面我们就来看看路径问题:

四、路径:Windows 与 Linux 的对比

1. 登录后都有一个"默认路径"

  • 在windows系统中标识文件的唯一性,是通过路径标识的!
    意思:同一个文件名可能出现在很多文件夹里,但 “哪个盘哪个文件夹下的哪个文件”(完整路径)是唯一的。

  • “无论 Windows 还是 Linux,我们登录成功,都会默认处在一个默认的路径下。”
    Windows:登录后默认在某个盘符的目录(如 C:\Users\用户名)。
    Linux:登录后默认在家目录(root 是 /root,普通用户是 /home/用户名)。

  • 这就是为什么一打开终端,pwd 就能打出一个路径——系统已经把我们"放"在某个地方了

  • Windows 用反斜杠 \ 作为路径分隔符,Linux 用正斜杠 / 作为路径分隔符。
    在这里插入图片描述
    在这里插入图片描述

注意:
Windows 和 Linux 路径写法有什么区别? —— Windows 用 \(反杠),Linux 用 /(正斜杠);Windows 有盘符(C:D:),Linux
统一的根 /

五、文件 = 内容 + 属性

  • 一个经典问题:“如在 Windows 新建一个空的文件,这个文件要不要占据磁盘空间?”
    • 直觉答案:“空文件没内容,应该不占空间吧?”
    • 真实情况:空文件也要占据磁盘空间!
  • “文件的属性是不是数据??是的!!但 文件 ≠ 文件内容。”
  • 重点公式:

    文件 = 文件的内容 + 文件的属性

  • 解释:
    • 文件内容:文件里存的真正数据(比如文本、代码、图片像素、视频音频数据)。
    • 文件属性(元数据):文件名、大小、权限、属主、修改时间……这些不是内容,但也是数据,也要占用磁盘空间存储。
    • 所以即使是 0 字节的空文件,它的"属性"信息也要写进磁盘,必然占用空间

所以:ls -l:可以显示更多文件属性

mstcheng@ubuntu-dev:~/117/code$ ls -l
total 28
drwxrwxr-x  2 mstcheng mstcheng 4096 Oct 28  2025 cgdbtest
-rw-rw-r--  1 mstcheng mstcheng    0 Aug 23 17:50 code.c
drwxrwxr-x 18 mstcheng mstcheng 4096 Jul 18 15:22 linux-code
drwxrwxr-x  2 mstcheng mstcheng 4096 Oct 28  2025 list
-rw-rw-r--  1 mstcheng mstcheng  533 Oct 17  2025 makefile
drwxrwxr-x  2 mstcheng mstcheng 4096 Oct 21  2025 procbar
drwxrwxr-x  2 mstcheng mstcheng 4096 Aug 23 17:25 test
drwxrwxr-x  2 mstcheng mstcheng 4096 Nov 23  2025 testCode
  • ls -l 输出一行的含义(从前往后):

    1. 文件类型 + 权限:如 -rwxr-xr-x(第 1 位是类型,后面 9 位是权限)。如果是d开头就是目录文件,如果是-开头就是普通文件
    2. 链接数/子目录数普通文件通常是 1,目录是里面子目录数量 + 2(为什么+2后面会说)。
    3. 属主(owner):如 mstcheng
    4. 所属组(group):如 mstcheng
    5. 大小(字节):如 4096
    6. 最后修改时间:如 Aug23 17:25
    7. 文件名:如 code.c
  • ls -a:显示隐藏文件
    “显示当前路径下的隐藏文件或者文件夹。”
    演示:

mstcheng@ubuntu-dev:~/117/code$ ls -a
.  ..  cgdbtest  code.c  linux-code  list  makefile  procbar  test  testCode

  • -a(all)会把. 开头的隐藏文件也显示出来,其中必然包括 .(当前目录)和 ..(上级目录)。

说到隐藏文件以及... 下面就来介绍一下:

六、隐藏文件与 . / .. 的秘密

1. 隐藏文件

“Linux 系统中,可以存在隐藏文件,隐藏文件往往以 . 开头。”

  • 例:.bashrc.gitignore.. 就是典型的以点开头的"隐藏文件/目录"。
  • 隐藏只是"默认不显示"并不是真的加密或不存在,用 ls -a 就能看到。

2. . 表示当前路径

  • “Linux 系统中, 一个 .,通常表示当前路径。”
  • 例:./code.c 就是指"当前目录下的 code.c"。

3. .. 表示上级路径

  • “两个 ..,通常表示上级路径。”
  • 例:../hello.txt 就是指 “上一级目录里的 hello.txt”。

4. 任何目录下都隐藏存在 ...

  • “任何目录下,都要隐藏存在 ...(上级目录)。”
  • 因为 ...目录结构自带的"指针". 指向自己,.. 指向父目录,这是后面理解"树形目录"的关键。 🔺这也是为什么前面说 链接数/子目录数+2 的原因!(+2加的就是.当前目录和..上级目录)🔺

5.cd .cd .. 进入当前目录进入上级目录

mstcheng@ubuntu-dev:~/117/code$ pwd
/home/mstcheng/117/code

mstcheng@ubuntu-dev:~/117/code$ cd .

mstcheng@ubuntu-dev:~/117/code$ pwd
/home/mstcheng/117/code

mstcheng@ubuntu-dev:~/117/code$ cd ..

mstcheng@ubuntu-dev:~/117$ pwd
/home/mstcheng/117

上面谈到当前目录.和上级目录..以及前面所谈到的根目录和家目录,下面就来聊聊Linux的目录结构!

九、Linux 的目录结构:树状结构(多叉树)⭐本章最核心

1. 树形目录结构

  • “Linux 目录本质是树形目录结构的基础!”Linux 的整个文件结构,是树状结构!
  • “就像是一颗多叉树”
  • 理解:把整个 Linux 文件系统想象成一棵倒着长的树,最顶端是/,往下不断分叉出目录,最后挂上文件。
    在这里插入图片描述
    在这里插入图片描述

2. 任何一个节点,都只有一个父节点

  • “任何一个节点,都只有一个父节点。”
  • 除根 / 外,每个文件/目录都只有一个"爹"(父目录),不可能同时属于两个上级目录(不考虑硬链接等特殊情况,基础阶段记住这一条)。
  • 这也直接解释了后面"路径唯一性"。

3. 到根目录就不能再退了

  • “推到根目录,就不能再退了!”
  • / 下执行 cd .. 还是 /,因为 / 已经是最顶层,没有上级了。

4. 两个重要结论

  • 结论 1“这棵多叉树的叶子节点,一定是普通文件或者空的文件夹。”
    • 叶子节点 = 没有"孩子"的节点。它要么是普通文件(没有子目录),要么是空目录
  • 结论 2“路上节点(非叶子)节点,本质就是文件夹或者目录!”
    • 非叶子节点 = 还有子目录的节点,它们本质上都是目录/文件夹

5. 路径为什么具有唯一性?⭐

  • “标识文件唯一性,通过路径标识。路径为什么具有唯一性??”
  • / 目标文件定位的时候,路径就是唯一的!
  • 逻辑链条:
    1. 文件系统是一棵树;
    2. 每个节点只有一个父节点;
    3. 那么从根 / 出发,到某个文件的"走法"是唯一的
    4. 这条唯一的"走法"写出来,就是唯一的一条绝对路径
  • 举例:/usr/bin/hello.txt 是唯一的! 世界上只有这一个"根目录下 usr 目录下 bin 目录下的 hello.txt"。

有了上面对于Linux目录结构的认识,以及路径唯一性的认识,下面我们顺水推舟来聊聊绝对路径和相对路径!

十、绝对路径 vs 相对路径 ⭐

1. 定义

  • 绝对路径从根 / 开始写的完整路径。
    • 示例:/usr/bin/hello.txt,标注:“绝对路径:是从 / 作为起点进行唯一的路径标识。”
  • 相对路径从当前所处目录为参照点写出的路径。
    • 示例:../bin/hello.txt,标注:相对路径:从当前目录作为参照点。
    • ../ 表示"上一级目录",所以 ../bin/hello.txt 意思是"上一级目录下的 bin 目录里的 hello.txt"

2. 绝对路径一定能唯一标识文件,那相对路径呢?

  • “相对路径能不能唯一标识?”“对于一个确定的相对路径,相对路径能不能保证唯一性?”
  • 答案:绝对路径唯一,相对路径不保证唯一!
  • “相对路径,是从我自己当前所处的目录为参照点的!一旦我自己所处的目录发生变化,相对路径可能就会失效!(找不到了/指向另一个文件)。”

通俗理解同一条相对路径 ../bin/hello.txt,在 /root 下和在 /tmp
下,指向的根本不是同一个文件

3. 最佳实践⭐⭐

最佳实践:
1. 配置文件,要配置各种路径,建议绝对路径;
2. 否则,常规操作统一使用相对路径。

  • 理由:
    • 配置文件(比如各种服务、软件的配置)里的路径,一旦写错文件就找不到,而且配置文件不随用户位置变化,必须稳定,用绝对路径
    • 日常操作(敲命令)时,人正站在某个目录里,用相对路径更短更直观

十一、执行程序:./ 的意义

1. 演示

  • 可执行程序 code.exe,然后在当前目录 /home/mstcheng/117/code 下:
    # 方式一:用 . 表示当前路径,./code.exe 执行
    mstcheng@ubuntu-dev:~/117/code$ ./code.exe 
    hello Linux
    
    
    # 方式二:用完整绝对路径执行
    mstcheng@ubuntu-dev:~/117/code$ /home/mstcheng/117/code/code.exe 
    hello Linux
    
    
    # 方式三:直接敲文件名 → 报错!
    mstcheng@ubuntu-dev:~/117/code$ code.exe
    code.exe:未找到命令
    
    
  • “执行当前路径,. 意义是什么??”
  • “你要执行一个程序的前提,就是先通过路径找到它!”

2. 解释

  • ./code.exe. 是"当前路径",./code.exe 明确告诉系统"在当前目录下找code.exe 这个程序"。
  • /home/mstcheng/117/code/code.exe:用绝对路径,同样能找到
  • code.exe(不带路径):系统只在 PATH 环境变量 指定的目录(如 /bin/usr/bin 等)里找,当前目录默认不在 PATH 里,所以报 command not found
    • 注意:command not found 表示"没找到这个命令/文件",不是说文件不存在——文件明明就在眼前,只是系统按 PATH 去找没找到。

3. 为什么要有 . ?⭐⭐⭐

  • 因为 Linux 出于安全考虑,默认不把"当前目录"放进搜索路径,防止恶意脚本假装成系统命令在当前位置被执行。
  • 所以执行当前目录下的程序,必须显式写成 ./程序名

十二、总结

本篇文章围绕 Linux 基础指令与文件系统展开,核心内容如下:

  • 基本指令:认识了 pwdwhoamilscdmkdirtouchclear 等常用命令,并强调"指令是用出来的,不是背出来的"。
  • 核心观念:文件夹 == 目录;文件 = 内容 + 属性,空文件也要占据磁盘空间。
  • 路径体系:Linux 用正斜杠 /,Windows 用反斜杠 \;登录后默认处于家目录。
  • 隐藏文件:以 . 开头的文件默认不显示,用 ls -a 可见;. 表示当前目录,.. 表示上级目录。
  • 目录结构:Linux 文件系统是一棵多叉树,根为 /,每个节点只有一个父节点,因此从根出发的绝对路径具有唯一性。
  • 路径类型:绝对路径从 / 开始、稳定唯一;相对路径以当前目录为参照、不保证唯一。配置文件建议用绝对路径,日常操作用相对路径。
  • 执行程序:执行当前目录下的程序需写成 ./程序名,因为当前目录默认不在 PATH 中。

一句话总结:掌握基础指令,理解"一切皆文件"与树形目录结构,就能在 Linux 中自由穿行。

本章我们只讲解了最基础的指令然后过渡到对于Linux文件,目录,路径的理解,下期继续介绍后续的一些指令,今天的内容就到这里,觉得对你有益的话不妨给个三联支持!感谢!

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐