【Linux】Linux 初探:历史溯源与常用指令速览

前言

Linux 的诞生与发展,是 "技术、商业、开源" 交织的缩影 ------ 从军事驱动的起源,到硅谷模式的商业化,再到如今生态化的开源逆袭,它早已成为操作系统领域的核心力量之一。

本篇会从历史脉络、基础认知到实用指令 逐步展开:先梳理 Linux 的发展历程,帮你建立对系统的宏观认知;再拆解操作系统、用户管理、文件路径等基础知识,筑牢入门根基;最后聚焦ls/pwd/cd等高频指令,通过实操式讲解让你快速上手日常操作。

无论是想了解 Linux 的 "来龙去脉",还是想掌握实用技能,这篇内容都能帮你从 "陌生" 到 "入门"。


目录

一、相关历史介绍

[☆ 起源篇・军事驱动](#☆ 起源篇・军事驱动)

[☆ 商业篇・硅谷模式](#☆ 商业篇・硅谷模式)

[☆ 硬件分支・生态分化](#☆ 硬件分支・生态分化)

[☆ 开源篇・Linux 逆袭](#☆ 开源篇・Linux 逆袭)

二、前置知识

1、操作系统(OS)是什么

2、如何登录账号

3、如何创建和删除普通用户

4、xshell相关快捷键

5、文件

6、路径

[7、' . ' 和 ' .. '](#7、' . ' 和 ' .. ')

[8、* 通配符](#8、* 通配符)

9、管道

────────核心命令解析────────

[☊. 目录相关指令](#☊. 目录相关指令)

1、ls指令(查看目录/文件)

2、pwd指令(查看当前路径)

3、cd指令(切换目录)

4、家目录(用户默认路径)

5、mkdir指令(创建目录)

6、rmdir指令(删除空目录)

7、tree指令(以树形显示目录结构)

[☋. 文件相关指令](#☋. 文件相关指令)

1、touch指令(常见空文件)

2、rm指令(删除文件/目录)

3、cp指令(复制文件/目录)

4、mv指令(移动/重命名文件)

5、nano指令(文件编辑工具)

[▷. 系统/工具指令](#▷. 系统/工具指令)

1、whoami指令

2、which指令

3、alias指令

4、man指令

5、重新认识指令


一、相关历史介绍

☆ 起源篇・军事驱动

核心线: 军事需求 → 硬件突破 → 技术溢出
1946/2/14:埃尼阿克(ENIAC)诞生,为计算导弹轨迹而生(军事用途)

↘️ 触发:美苏冷战军备竞赛 → 推动计算机小型化(从庞然大物到可用系统)

↘️ 关联:摩尔定律(芯片性能迭代)成为隐形动力


☆ 商业篇・硅谷模式

核心线: 政府 / 军方投入 → 资本介入 → 产品民用化
起源逻辑:政府 + 军方出钱→高校 / 研究机构搞技术→商人(钱・华尔街)推动商业化变现

↘️ 孵化产物:计算机 + 操作系统(从军工品变成老百姓能用的商品)

↘️ 爆发结果:产品卖向全球→诞生大量公司(IBM、苹果、微软...)


☆ 硬件分支・生态分化

核心线: 不同定位的硬件 + OS 组合
高端闭环:苹果(硬件 + 软件 OS)→ 质量高、价格贵,"很多人都会买"

企业 / 科研:IBM(thinkpad 等)+UNIX → 面向企业、高校,稳定但小众

性价比路线:微软(软件 OS)+ 英特尔(硬件)→ 成本低,主打 "老百姓用得起"


☆ 开源篇・Linux 逆袭

核心线: UNIX 启发 → 个人开发者破局 → 开源生态
1991 年:林纳斯・托瓦兹(21 岁,赫尔辛基大学)→ 用了 UNIX 系统后想 "自己做一个"

↘️ 行动:做了 Linux 内核 demo → 源代码免费公开

↘️ 扩散:吸引工程师 / 爱好者参与→Linux 生态壮大(安卓基于 Linux、谷歌等公司采用)


二、前置知识

1、操作系统(OS)是什么

操作系统 是一款做软硬件管理的软件,而 Linux 是操作系统的重要分支(类 Unix 系统),CentOS 作为基于 Linux 开发的发行版,自然继承了这一核心能力 ------ 它能对服务器等设备的硬件资源(如 CPU、内存、存储等)和软件程序进行高效管理与调度,为各类应用运行提供稳定环境。

操作系统作用:

通过对下管理好软硬件资源(手段),达到对上提供良好的(稳定、快速、安全)操作/使用环境

我们所有的软件行为,全部都要自顶向下贯穿计算机的软硬件结构。

2、如何登录账号

以下操作基于已准备好的 CentOS 服务器(如本地虚拟机、实验室 / 公司提供的服务器等),默认已获取服务器的 IP 地址、登录用户名及密码,直接讲解通过命令行登录服务器的核心步骤

首先输出**ssh 用户名@公网IP** ,跳出SSH用户身份验证输入密码即可。SSH(Secure Shell,安全外壳)是一种网络协议,通过加密和认证机制实现安全访问和文件传输等业务。

3、如何创建和删除普通用户

添加普通账号的步骤:

创建账号: adduser 用户名

设置密码:passwd 用户名(输入密码时,是不显示密码的)

具体操作:

在 CentOS 系统中,使用***adduser ljh*** 命令创建用户 ljh ,接着用**passwd ljh** 命令为该用户设置密码时,系统提示 "BAD PASSWORD: The password contains the user name in some form ",即密码包含了用户名相关形式,存在安全风险,但最终密码仍成功更新(显示 passwd: all authentication tokens updated successfully.)。

删除普通账号的步骤:

仅删除用户账号 (保留用户家目录等文件):userdel 用户名

彻底删除用户 (包括其家目录及相关文件):userdel -r 用户名

【具体操作】:

**问题:**仅删除用户账号后,还能使用该用户的家目录吗?

能,但需注意:

***1、**原用户无法用:*账号已删除,原用户不能再通过该账号访问目录;

***2、**root 可以直接用:*超级用户(root)拥有最高权限,可直接访问 / 操作这个目录;

3、目录归属显示为数字 UID: 因账号被删,目录的拥有者会显示原用户的 UID 数字(需通过chown等命令可重新指定归属)。

4、xshell相关快捷键

Alt + 回车】: 全屏

Ctrl + D】: 退出当前 Shell 会话 / 交互式程序

【ctrl+insert】: 复制(如果不行,打开Fn配合使用)

【shift+insert】: 粘贴

这里不支持ctrl + cctrl + v 快捷键

5、文件

当在电脑上进行操作时,实际上是通过操作系统来控制文件和文件夹 。操作系统提供了图形用户界面(GUI)和命令行界面(CLI),让你可以方便地浏览、创建、删除、移动和修改文件和文件夹。比如我们的桌面实际上是一个文件夹,存储了在桌面上看到的所有文件和快捷方式。

文件的组成:

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

文件属性指的是文件上次修改的日期以及文件类型、文件名称等

我圈的红色的就属于文件属性,然后我们可以观察到文件的大小为0KB,但是实际上他只是指文件内容的大小为0KB代表是一个空文件,文件属性实际也会占内存的

6、路径

绝对路径:从系统的根目录(如 Linux 中的 / 、Windows 中的 C:\ 等)开始,到目标文件或目录的完整路径,具有唯一性,能明确且唯一地定位到文件或目录。

相对路径:以当前所在的目录为起始参考位置,来描述目标文件或目录的路径,它的指向会随着当前所在目录的变化而变化。

以下这些都称为路径:

bash 复制代码
//Linux下:
[root@VM-8-14-centos div]# pwd
/root/div

    
//Windows下:
E:\C++开发代码\MetaFrame++

**问题1:**路径分隔符是啥?

路径分隔符就是用来区分文件路径里不同文件夹、文件的符号:

Linux、macOS:用 /,比如要找 test 文件夹里的 a.txt,路径是 /home/test/a.txt

Windows:一般用 \,比如 C:\Users\test\a.txt,不过也能识别 /

**问题2:**为啥要有路径?

因为电脑里文件、文件夹太多,分层存着。有了路径,不管是电脑系统还是我们,都能精准找到要的文件或文件夹在哪,不然就没法在一堆文件里定位到目标啦。

在Linux的整个文件目录结构是一个多叉树,属于树状结构:

7、' . ' 和 ' .. '

隐藏文件:在Linux中以 . 开头的文件叫隐藏文件

windows下的隐藏文件:

Linux下的隐藏文件:

. 代表 "当前目录",是隐藏的特殊目录,./file.txt 表示 "当前目录下的 file.txt";

.. 代表 "上级目录",也是隐藏的特殊目录,**../file.txt**表示 "上级目录下的 file.txt";

8、* 通配符

在 Linux 等系统中,* 通配符 代表匹配任意字符序列(包括空字符序列 ),常用于文件查找、命令参数匹配等,比如 ls *.txt 能列出当前目录下所有扩展名为 .txt 的文件。

【常见用法】:

1、匹配同一目录下的所有文件ls * 会列出当前目录中所有非隐藏文件(不包含以**.** 开头的文件)

2、匹配特定后缀的文件ls *.txt 会列出当前目录中所有以**.txt** 结尾的文件(如a.txt、file.txt 等)

3、匹配前缀相同的文件ls doc* 会列出所有以 doc 开头的文件(如doc1.pdf、document.txt等)

4、结合路径使用ls /home/user/*.sh 会列出**/home/user** 目录中所有以 .sh 结尾的脚本文件


注意:
* 不会匹配以 . 开头的隐藏文件(如 .bashrc) ,如果要匹配隐藏文件,可使用 .* (但需谨慎,可能匹配到**.** 和**..**这两个特殊目录)

9、管道

在 Linux 系统中,管道 (用 | 符号表示)是一种非常实用的工具,它能让一个命令的输出 直接成为另一个命令的输入 ,就像 "数据的传送带"。

比如 ,我们想在当前目录下找到所有以 .txt 结尾的文件,还想统计这些文件的数量。可以用 ls *.txt | wc -l 这个命令组合。ls *.txt 会列出所有 .txt 文件,然后通过管道,把列出的结果传给 wc -lwc -l 就会统计出这些文件的数量。

管道传递的是数据的拷贝,不是原始文件本身,而且数据是流式传递、即时处理的,处理完就销毁,不需要临时文件来存储,能让我们在 Linux 运维、服务器管理等工作中,更高效地对数据进行连续操作。

上述基础内容会在后续讲解中用到,要是现在不太明白,可以先继续往下看~

────────核心命令解析────────

☊. 目录相关指令

1、ls指令(查看目录/文件)

语法: ls [选项] [目录或文件]

**功能:**列出指定目录中的文件和子目录。

常用选项:

**-a:**列出所有文件,包括隐藏文件(以 . 开头的文件)。

**-l:**详细列出文件的权限、拥有者、大小、修改时间等信息。

-F 在文件名后附加文件类型的标志,如*表示可执行文件,/表示目录等。(目录类型识别)

其他选项:

-a:列出目录下的所有文件,包括以 . 开头的隐含文件。

**-d:**将目录像文件一样显示,而不是显示其下的文件。如:ls -d 指定目录

-i 输出文件的 i 节点的索引信息。如 ls -ai 指定文件

-k 以 k 字节的形式表示文件的大小。ls -alk 指定文件

**-l:**列出文件的详细信息。

**-n:**用数字的 UID,GID 代替名称。(介绍 UID,GID)

-F 在每个文件名后附上一个字符以说明该文件的类型,*表示可执行的普通文件;/表示目录;@表示符号链接;|表示 FIFOs;=表示套接字 (sockets)。(目录类型识别)

-r: 对目录反向排序。

**-t:**以时间排序。

**-s:**在文件名后输出该文件的大小。(大小排序,如何找到目录下最大的文件)

**-R:**列出所有子目录下的文件。(递归)

**-1:**一行只输出一个文件。
ls指令演示

2、pwd指令(查看当前路径)

语法: pwd

**功能:**显示用户当前所在的目录

**常用选项:**无
pwd指令演示

3、cd指令(切换目录)

语法: cd [目录]

**功能 :**改变工作目录。将当前工作目录改变到指定的目录下。

常用选项:

cd .. 返回上级目录

cd /home/litao/linux/ 绝对路径

cd ../day02/ 相对路径

cd ~ 进入用户家目录

**cd -:**返回最近访问目录
cd指令演示

4、家目录(用户默认路径)

家目录(Home Directory)是操作系统为每个用户分配的一个专用目录,用于存储该用户的个人文件、配置文件和数据

【windows中的用户默认的家目录】

C:\Users\用户名

【Linux下指定用户的家目录】

对于root账号: 默认的家目录__ /root--->超级管理员账号

对于普通用户: 默认的家目录__ /home/新建的用户名

任何一个用户,首次登录所处的路径都是自己的家目录,关于这点可以使用whoami指令查看当前正在使用Linux系统的用户名

5、mkdir指令(创建目录)

语法:mkdir [选项] dirname

**功能:**在当前目录下创建一个名为 "dirname" 的目录。

常用选项:

-p, --parents 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录。

递归创建多个目录示例:mkdir -p /home/user/newdir

6、rmdir指令(删除空目录)

与 mkdir 的对应关系:mkdir 用于建立目录,rmdir 则是删除目录的命令。

语法:rmdir [-p] [dirName]

**功能:**删除空目录。

常用选项:

-p 当子目录被删除后,如果父目录也变成空目录,就连带父目录一起删除。

7、tree指令(以树形显示目录结构)

功能: tree命令用于以树状图形式显示文件和目录的层次结构

安装:

判断是否安装:若执行 tree 时出现 command not found(命令未找到)的报错,通常是未安装该工具

安装步骤

  1. 执行 sudo yum install tree 命令(适用于使用 yum 包管理器的 Linux 系统);
  2. 当系统提示 Is this ok [y/d/N]: 时,输入 y 并回车,确认安装;

安装结果解读

  • 若输出 Package tree-1.6.0-10.el7.x86_64 already installed and latest version,说明 tree 已是最新版本且已安装;

  • 出现 Nothing to do 表示无需进行安装操作(因已安装最新版本)。

使用:

安装完成后,直接在命令行输入 tree [目录路径] 即可查看指定目录的树状结构(不指定路径则默认显示当前目录)。
tree指令演示

☋. 文件相关指令

1、touch指令(常见空文件)

语法:touch [选项] 文件

功能:touch 命令可更改文档或目录的日期时间(包括存取时间和更改时间),或者新建一个不存在的文件。

常用选项:

-a--time=atime--time=access--time=use 只更改存取时间。

-c--no-create 不建立任何文档。

**-d:**使用指定的日期时间,而非现在的时间。

**-f:**此参数将忽略不予处理,仅负责解决 BSD 版本 touch 指令的兼容性问题。

**-m--time=mtime--time=modify:**只更改变动时间。

**-r:**把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。

**-t:**使用指定的日期时间,而非现在的时间。

2、rm指令(删除文件/目录)

语法:rm [] [dirName/dir]

**功能:**删除文件或目录(默认不写选项的情况下是删除文件)。

常用选项:

**-f:**即使文件属性为只读(即写保护),也直接删除。

-i 删除前逐一询问确认。

-r 删除目录及其下所有文件。

3、cp指令(复制文件/目录)

当前我们先聚焦于单个文件和单个目录的复制操作 ,后续会补充多个文件复制到同一目录的用法(例如 cp file1 file2 file3 directory/ 这种场景)。

语法:cp [选项] 源文件或目录 目标文件或目录

**功能:**复制文件或目录,也可在复制过程中对文件进行重命名(若目标指定为新文件名,则复制后文件使用新名称)。

常见选项:

-r 递归复制整个目录。

**-i:**复制前进行确认,如果目标文件已存在,询问是否覆盖。

**-f:**强制复制,不会询问覆盖确认。
cp -r 选项演示 cp -i 选项演示 cp -f 选项演示

按道理来讲我用了-f选项不应该不会询问是否覆盖了吗?为啥这依旧询问了,原因如下:

也就是说cp实际上是***'cp -i'*** ,所以依旧会询问是否覆盖,这里大家可能会有一个问题同时使用-i -f选项,会不会询问是否覆盖

从图中可以看出,询问是否覆盖了,也就是说***-i -f同时存在时,会询问是否覆盖的***

4、mv指令(移动/重命名文件)

语法:mv [选项] 源文件/目录 目标文件/目录

**功能:**移动(剪切)或重命名文件或目录。

常用选项:

**-i:**在目标文件已存在时,询问是否覆盖。

**-f:**强制执行,不进行任何提示。

【场景1:剪切】

【场景2:重命名】

【场景3:剪切+重命名】

5、nano指令(文件编辑工具)

语法:nano [选项] 文件名

**功能:**文本编辑器,用于编辑文本文件(如配置文件、脚本、普通文档等),操作简单直观,适合初学者。

常用操作(核心快捷键):

保存与退出Ctrl + X(退出),按 Y 确认保存,回车确认文件名。

不保存退出Ctrl + X 后按 N

光标移动:方向键(↑↓←→)直接移动。

删除字符:Backspace(删光标前)、Del(删光标处)。

撤销 / 重做Ctrl + U(撤销)、Ctrl + Y(重做)。

搜索内容Ctrl + W,输入关键词后回车。

替换内容Ctrl + \,依次输入查找内容和替换内容。
nano指令演示 nano编辑界面

▷. 系统/工具指令

1、whoami指令

功能:whoami指令用于查看当前正在使用Linux的用户名
whoami指令演示

2、which指令

功能:which指令查看可执行指令所在路径
which指令演示

后面的 color 是颜色配置,这部分我们不用管。第二行对应的是 ls 命令的路径,至于 alias 指令,下面会详细讲到

3、alias指令

**作用:**是给其他命令起一个别名。

alias相关事项:

1、直接用alias命令临时设置的别名,退出当前 Shell 会话(比如退出登录、关闭终端)后就会失效,属于 "临时别名"。

2、如果想让别名永久生效,需要把alias命令写入 Shell 的配置文件(比如~/.bashrc~/.bash_profile),之后每次登录都会自动加载这些别名

3、目前不建议大家使用该指令为其他指令取别名,由于目前指令接触不多,很容易导致混乱。

第一张图是查看 "ll" 指令的信息,我们能发现 "ll" 指令其实对应的就是 "ls -l";第二张图是实际测试的结果,可以看到这两个指令的输出内容完全一致

4、man指令

语法:man [选项] 命令

功能:man 命令用于查看 Linux 命令的联机帮助手册,当记不清命令参数或想了解命令详细用法时,可通过它获取帮助

常用选项:

**-k:**根据关键字搜索联机帮助。

**num:**只在第 num 章节查找。

**-a:**默认 man 命令找到第一个存在的章节手册页就显示且只显示这一个;而 -a 会显示所有存在的章节手册页,按章节顺序依次展示。

手册章节:

1、普通命令。

2、系统调用(如 openwrite 等,可方便查询调用函数所需头文件)。

3、库函数(如 printffread)。

4、特殊文件(即 /dev 下的各种设备文件)。

5、文件格式(如 passwd,会说明文件中各字段含义)。

6、为游戏预留,由各游戏自行定义。

7、附件及一些变量(如 environ 这类全局变量)。

8、系统管理用的命令(只能由 root 使用,如 ifconfig)。

安装完成后,执行 man --version 可查看 man 自身版本


man指令演示

在查看手册的交互界面中按 q 会退出手册

5、重新认识指令

目前阶段来说指令的本质都是程序 。指令、程序、可执行程序都是一回事,并且也是文件。

【安装和卸载】

安装和卸载就是把可执行程序拷贝/删除到系统路径下

gcc test.c就是将test.c文件进行编译,并生成名为a.out的可执行程序

相关推荐
0思必得02 小时前
[Web自动化] Web安全基础
运维·前端·javascript·python·自动化·html·web自动化
I · T · LUCKYBOOM2 小时前
2.1编译安装--单台服务器托管多网站
linux·运维·服务器·网络
youxiao_902 小时前
Docker 容器(四)
运维·docker·容器
深耕AI2 小时前
【深析】 Docker Desktop 中的容器文件系统:OverlayFS vs Containerd Snapshots
运维·docker·容器
Howrun7772 小时前
Linux进程通信---3---System V 共享内存
linux·服务器
大聪明-PLUS2 小时前
Linux 下的 C 语言编程:创建命令行 shell:第二部分
linux·嵌入式·arm·smarc
无限大.2 小时前
为什么“容器化“技术很重要?——从虚拟机到 Docker
运维·docker·容器
眠りたいです2 小时前
Docker:Docker Network容器之间及容器与外部世界的通信桥梁
运维·docker·容器·docker网络
幺零九零零2 小时前
Docker底层-OverlayFS
运维·docker·容器