当前位置: 首页 > news >正文

Linux基础指令(一):命令行入门

Linux基础指令(一):命令行入门

本文是 Linux 基础指令系列的第一篇,从零开始建立命令行操作的完整知识框架。后续还有(二)系统认知与效率和(三)权限系统详解。

每一行命令的执行,都是对确定性的一次祈祷。

为什么需要学 Linux 命令行

学过 C 语言的读者,大概率在 Windows 的 IDE 里写完代码,点一下运行按钮就完事了。编译器在哪?链接器做了什么?可执行文件到底放在了哪里?这些问题被图形界面温柔地藏了起来。

Linux 不藏。它把一切摊开给你看——前提是你得学会和它对话。而对话的唯一语言,就是命令行。

对于接下来要学 Linux 系统编程的读者来说,命令行不是选修课,是入场券。你将通过 shell 编译代码、调试程序、管理系统资源、理解文件 I/O 的底层行为。没有图形界面可以依赖——工作中也没有。

💡 背景补充:C 语言的标准库函数(fopenfread等)在 Linux 上直接调用系统调用(openread),理解命令行的文件操作能帮你建立对文件系统的直觉,后续学系统 I/O 时会有豁然开朗的感觉。


Linux 背景速览

UNIX 与 Linux 的发展

1969 年,贝尔实验室的 Ken Thompson 和 Dennis Ritchie 在 Multics 的基础上开发了 UNIX。此后 UNIX 分化出两个主要分支:AT&T 的 System V 和伯克利的 BSD。

1991 年,赫尔辛基大学的研究生 Linus Torvalds 在 Usenet 上宣布他写了一个"类似 UNIX 的小操作系统"——这就是 Linux 的起点。0.02 版只能运行 bash 和 gcc,但全世界的程序员开始加入开发。1994 年,1.0 版本正式发布。

开源的力量

Linux 遵循GNU 通用公共许可证(GPL),任何基于 GPL 代码开发的衍生品在发布时都必须开源。这意味着 Linux 不属于任何一家公司——它属于所有人。

企业应用现状

Linux 的统治地位在不同领域表现各异:

领域市场份额说明
服务器~75%政府、金融、电信等关键领域的主流选择
移动设备~85%(Android 基于 Linux 内核)全球最流行的智能手机操作系统
云计算/大数据~86% 的企业使用 Linux 构建已取代 Unix 成为云平台核心
桌面较小与 Windows 在易用性和软件生态上仍有差距

主流发行版

Linux 是内核,发行版(Distribution)是内核 + 用户空间工具的完整操作系统。常见的有:

  • Ubuntu:对新手最友好,社区活跃
  • Debian:以稳定著称,适合服务器
  • CentOS:红帽企业级 Linux 的免费重构版,使用 YUM 管理软件包
  • Kali Linux:面向渗透测试,集成了大量安全工具

环境准备:远程连接 Linux

生产中几乎没有机会接触 Linux 的图形桌面。我们通过XShell(一个远程终端软件)连接到 Linux 服务器。

# 查看本机 IPifconfig# 通过 SSH 远程登录ssh[IP地址]

XShell 下的复制粘贴快捷键:

操作快捷键
复制Ctrl + Insert
粘贴Shift + Insert

注意:Ctrl+CCtrl+V在 Linux 终端里不管用。Ctrl+C是用来终止程序的——别搞混了。

练习环境:WSL2

如果你用的是 Windows,不需要装虚拟机,也不需要租云服务器。WSL2(Windows Subsystem for Linux 2)是微软官方提供的 Linux 子系统,直接在 Windows 上运行完整的 Linux 内核。

WSL2 的优势:启动快、与 Windows 文件系统互通、资源占用低。几乎是在 Windows 上练习 Linux 的最佳选择。

具体安装步骤请自行搜索"WSL2 安装教程"——微软官方文档写得足够清晰,这里不赘述。


深入理解:Linux 的数据结构

在接触更多命令之前,先停下来看一个根本问题:Linux 是如何组织文件的?这不是可有可无的背景知识——理解了数据结构,你对路径、权限、硬链接这些概念会有本质的理解。

目录树:不只是"树"

前面说过文件系统是一棵目录树。但"目录"本身是什么?目录也是一个文件——一个存储了文件名到 inode 编号映射的特殊文件。

也就是说,目录的内容就是一个映射表:

文件名 → inode 编号 file.txt → 1844719 mydir/ → 1844720

inode:文件的身份证

inode(Index Node,索引节点)是 Linux 文件系统的核心数据结构。一个文件的所有元数据都存在 inode 里

存在 inode 中不存在 inode 中
文件类型(普通文件/目录/链接…)文件名
权限(rwx)文件内容本身
所有者、所属组
文件大小
三个时间戳(ACM)
指向数据块的指针

关键结论:文件名不属于文件的固有属性,它只是目录里的一行记录。这就是为什么同一个 inode 可以有多个文件名(硬链接),也是为什么mv重命名在同一个文件系统内几乎是瞬时操作——它只改了目录文件里的一条映射,不碰文件的 inode,更不碰文件的实际数据。

文件 = 属性 + 内容

从这个角度看,Linux 上的每个文件由两部分组成:

文件 ├── 属性(元数据) → 存在 inode 中:权限、时间、大小、所有者... └── 内容(数据) → 存在数据块中,由 inode 中的指针定位

stat命令读的是 inode 中的属性,cat命令顺着 inode 指针去读数据块。两者访问的是完全不同层次的存储。


路径与目录导航

文件系统的树状结构

Linux 将磁盘上的所有文件和目录组织成一棵目录树,根节点是/。普通文件一定是叶子节点;目录可能是叶子(空目录),也可能是分支节点。

理解路径的核心意义在于:树状结构的每一层都是唯一的定位方案。从根目录到任意文件的路径有且仅有一条。

  • 绝对路径:从/开始,不随当前位置变化。例如/home/whb/test/file.txt。配置文件中最常用。
  • 相对路径:相对于当前工作目录定位。例如../temp/。命令行中最常用。

pwd(print working directory)— 我在哪

# 显示当前工作目录pwd# 输出: /home/whb/test

功能最简单的命令,没有选项,但可能是你最常敲的命令之一。

cd(change directory)— 去哪

cd[目录名]

改变当前工作目录。几个高频用法:

cd..# 返回上级目录cd~# 快速回到家目录(/home/用户名)cd/# 进入根目录cd-# 返回最近一次访问的目录(反复按可以来回切换)cd/home/whb# 使用绝对路径跳转cd../temp# 使用相对路径跳转

cd -是一个容易被忽视的效率工具——它记住的是你上一次所在的位置,反复使用可以在两个目录间来回切换。

ls(list)— 目录里有什么

ls[选项][目录或文件]

列出目录下的所有子目录和文件。

常用选项组合:

选项作用
-a列出所有文件,包括.开头的隐藏文件
-l列出详细信息(权限、大小、时间等)
-t按修改时间排序
-r反向排序
-R递归列出所有子目录
-F文件名后加类型标记(/目录,*可执行,@符号链接)
-i显示文件的 inode 编号
-1一行只输出一个文件

实战示例:

# 查看当前目录下所有文件(包括隐藏文件)的详细信息ls-a-l# 按时间排序,最近修改的排在最后ls-lt# 递归查看所有子目录,带类型标记ls-lRF

ls -l输出的每一列都有意义:

drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir

从左到右依次是:文件类型与权限、硬链接数、所有者、所属组、文件大小(字节)、最后修改时间、文件名。


文件操作

touch(change file timestamps)— 创建文件(不止创建)

touch[选项]文件...

最常用的场景是创建一个空的普通文件:

touchnewFile.txt# 创建 newFile.txt

但它真正的作用是更改文件的时间戳。Linux 为每个文件维护了三个时间:

时间含义变更条件
Access Time(atime)最后访问时间读取文件内容时更新
Modify Time(mtime)最后修改时间文件内容被修改时更新
Change Time(ctime)最后状态变更时间元数据(权限、所有者等)改变时更新
# 只更新 access timetouch-anewFile.txt# 只更新 modify timetouch-mnewFile.txt# 查看文件的详细时间信息statnewFile.txt

注意:修改 access time 会导致 change time 也更新——因为 atime 本身属于文件的元数据。

mkdir(make directories)— 创建目录

mkdir[选项]目录名...

-p是必记选项:递归创建路径中所有不存在的目录。

# 一次创建多层嵌套目录mkdir-ppath1/path2/path3/path4

不用-p的话,如果path1不存在,创建会直接失败。-p让系统自动建好缺失的每一层——这在写脚本时尤其有用。

rmdir(remove directory)与rm(remove)— 删除

rmdir只删空目录:

rmdirmydir# 删除空目录rmdir-ppath1/path2/path3/path4# 递归删除空目录链

rm是真正的通用删除工具:

rmfile.txt# 删除普通文件rm-rdir# 递归删除目录及其所有内容rm-rfpath# 强制递归删除(不询问,不报错)rm-ifile.txt# 删除前逐一确认

⚠️rm -rf是 Linux 世界里最危险的命令之一。没有回收站,没有"撤销"。执行之前确认一遍路径——失控的删除比任何 bug 都更不可逆。

cp(copy)— 复制

cp[选项]源文件 目标文件cp[选项]源文件... 目标目录

核心选项:-r(递归复制目录)、-f(强制覆盖)、-i(覆盖前询问)。

# 复制文件并重命名cpmyfile.txt myfile-backup.txt# 将多个 .txt 文件复制到 dir 目录cp*.txt dir/# 递归复制整个目录cp-rftesttest-backup

第二个参数的类型决定了cp的行为:

  • 如果目标是一个不存在的路径,则复制并重命名
  • 如果目标是一个已存在的目录,则将源文件复制到该目录内

mv(move)— 移动与重命名

mv[选项]源 目标

mv在 Linux 里身兼两职——重命名移动是同一个操作。区别仅在于第二个参数:

  • 第二个参数是不存在的文件名→ 重命名
  • 第二个参数是已存在的目录→ 移动到该目录下
mvmyfile.txt yourfile.txt# 重命名mvmyfile.txt temp/# 移动到 temp 目录mv-iold.txt new.txt# 如果 new.txt 已存在,询问是否覆盖

查看文件内容

Linux 提供了从"一股脑输出"到"精细翻页"的多层次查看工具。

cat(concatenate)— 一次输出全部

cat[选项][文件]

适合短文件。三个常用选项:

选项效果
-n对所有行编号(含空行)
-b仅对非空行编号
-s将连续多行空行压缩为一行
cat-ntemp.txt# 带行号输出cat-btemp.txt# 只给有内容的行编号cat-stemp.txt# 不显示连续空行

more(file perusal filter)与less(opposite of more)— 分页查看

more只能向下翻页,less可以上下自由翻页。几乎所有场景都应该优先用less

less-Ntemp.txt# -N 显示行号

less中:

操作按键
向下搜索/搜索词
向上搜索?搜索词
下一个匹配n
上一个匹配N
退出q

less在打开文件时不会一次性加载全部内容——对于上百 MB 的日志文件,这是巨大的性能优势。

head(output first part)与tail(output last part)— 只看头尾

head-n10temp.txt# 显示前 10 行(默认就是 10 行)tail-n5temp.txt# 显示最后 5 行tail-flog.txt# 持续监控文件末尾的新增内容(查看日志的标配操作)

tail -f是服务器排查问题的第一板斧——它会一直等待并输出文件新增的行,按Ctrl+C退出。

管道组合的经典用法:取文件的某一段内容。

# 显示文件的第 180 到 200 行head-200temp.txt|tail-20

|是管道符,把前一个命令的输出作为后一个命令的输入。head -200取前 200 行,交给tail -20取最后 20 行——两者组合就得到了 [180, 200] 这个区间。


搜索与查找

grep(globally search a regular expression and print)— 文本搜索

grep[选项]搜索字符串 文件

在文件中搜索包含指定字符串的行。这是 Linux 命令行使用频率最高的命令之一。

grep"hello"temp.txt# 搜索包含 hello 的行grep-i"hello"temp.txt# 忽略大小写grep-n"hello"temp.txt# 顺带输出行号grep-v"hello"temp.txt# 反向选择:输出不含 hello 的行grep-ni"hello"temp.txt# 组合使用:忽略大小写 + 带行号grep-r"main"./src/# 递归搜索整个目录

find(search for files)— 文件查找

find路径-name文件名模式

find直接在磁盘上搜索文件,功能极其强大但选项复杂。入门先记住最常用的-name

# 在家目录下搜索名为 test.c 的文件find~-nametest.c# 在当前目录下搜索所有 .cpp 文件find.-name"*.cpp"

⚠️ 在大文件系统上跑find可能很慢。如果搜索范围超过几十 GB,考虑放到后台执行。

which(locate a command)与whereis(locate binary/source/manual)— 定位命令

whichls# 显示 ls 命令的可执行文件路径# 输出: /usr/bin/lswhereisls# 显示命令的二进制文件、源码和手册页位置# 输出: ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz

本节要点

  • Linux 文件系统是一棵树,绝对路径从/开始,相对路径从当前位置开始,两者各有适用场景
  • ls -l+cd+pwd是导航三件套,cd -能让你在两个目录间高效切换
  • rm -rf没有回收站,执行之前确认路径——Boss 不接受"不小心删了"
  • lessmore好用,支持上下翻页和双向搜索,大文件不卡顿
  • 管道|是命令行的编程接口head -200 temp.txt | tail -20这种组合值得内化
  • 文件名不是文件的固有属性,它只是目录里的一条映射。mv重命名的极快速度正源于此
  • inode 是文件的身份证,存储了权限、时间、所有者等所有元数据——文件名不在其中
  • 文件 = 属性 + 内容stat读 inode,cat读数据块,两者访问的是不同层次
  • 每个文件维护三个时间戳:atime(访问)、mtime(修改)、ctime(状态变更)
  • 不要背选项,知道命令叫什么就够了。当场man--help,把记忆力留给理解"为什么这样设计"
http://www.jsqmd.com/news/1092876/

相关文章:

  • 【小白也能轻松玩转龙虾】虾壳云一键部署办公增效,批量文件处理 OpenClaw v2.7.9 教学(附最新安装包)
  • 万能导 Wandao:知识星球项目资料一键导出,不用再一篇篇复制了
  • web应用技术第九次作业
  • 【ChatGPT结构化提示词黄金法则】:20年AI工程实战提炼的7大不可绕过的设计范式
  • OpenCore Legacy Patcher技术深度解析:老款Mac升级的系统兼容性革命
  • FSearch:Linux系统极速文件搜索工具完整指南
  • Windows 无法启动怎么办?一篇文章帮你排查到底
  • CentOS7.9 OpenSSH 7.4p1 升级 10.3p1 实操复盘文档(含报错排错全流程)
  • Nmap脚本引擎实战:5个技巧实现精准漏洞感知与安全评估
  • 【open harmony/harmonyos】ArkTS 实现 3D 透视投影:让普通组件拥有空间感
  • Hot 100 --- K 个一组翻转链表
  • 庚子夜半漏下三刻,众微机突发雪崩!余施大华胄日志天网,救大匠于九死一生
  • FPGA加速同态矩阵向量乘法的技术解析与实践
  • 别只会用Office!打工人必学的5个AI办公技巧
  • 程序员AI时代35岁出路指南
  • OPENCV——RV1126+OPENCV在视频中添加LOGO图像
  • AI 替代传统 GUI:基于 MCP 的 OBCloud 工作流(09)
  • 《北戴河之恋》:换一个角度重新听
  • 液冷板焊接的质量账:70%的失效根源在钎焊,激光焊接怎么把良率拉到99%
  • 2026论文双降终极榜单:10款降AIGC工具,智能改写快速定稿成文
  • 从零开始学Java:第31章 网络和 HTTP:让 Java 程序和外部服务通信
  • FFmpeg视频切片与AES-128加密完整实战指南
  • 从零构建 AI 客服系统:Next.js 14 + RAG + 向量检索实战
  • 【HarmonyOS/OpenHarmony】创新体验:从应用入口到页面加载理解全场景应用基础链路
  • 如何用AI写代码 ? AI编程提示词怎么写 ?AI写的代码如何调试
  • U校园自动答题工具:如何2分钟搞定网课必修题的终极指南
  • 从弗朗西斯·奇切斯特的环球航行看:技术、勇气与人类精神的现代启示
  • ClamAV病毒库自动更新与异常告警:Linux服务器安全运维实战
  • 全平台Chrome配置SSLKEYLOGFILE与Wireshark解密HTTPS流量实战指南
  • Steam成就自由掌控:告别无法完成的游戏挑战