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

【Linux】 入门必会:基础指令、目录结构与权限管理一篇搞懂

【Linux】基础指令全攻略:从目录树、文件操作到权限管理,一篇打通命令行底层逻辑

🔥本文定位:面向刚接触 Linux 的同学,从“为什么要使用命令行”讲起,系统梳理目录与路径、文件操作、文本检索、压缩归档、重定向与管道、权限管理等核心知识。
💡学习目标:不仅会敲命令,还能理解命令背后的目录树、标准流和权限模型,建立后续学习 Linux 系统编程的底层认知。


文章目录

  • 前言
  • 一、Linux 与 Shell:先搞懂命令是怎么执行的
  • 二、Linux 目录树与路径
  • 三、文件与目录操作:从查看到删除
  • 四、文本查看与搜索:日志排查必备
  • 五、压缩归档与系统辅助命令
  • 六、重定向与管道:让命令组合起来
  • 七、Linux 权限管理:真正理解 rwx
  • 八、综合实战:搭建一个安全的日志分析目录
  • 九、核心知识点与避坑指南
  • 总结

前言

刚接触 Linux 时,很多人会陷入一个误区:把lscdmkdirgrep当成英语单词一样死记。

但真正决定你能否学好 Linux 的,并不是记住了多少命令,而是有没有建立三条主线:

  1. 目录树解决“文件在哪里”;
  2. 标准输入输出解决“数据从哪里来、到哪里去”;
  3. 权限模型解决“谁能对文件做什么”。

当这三条主线打通后,新的 Linux 命令只是完成不同任务的工具,而不再是一堆零散知识点。

本文所有示例建议在普通用户的测试目录中执行:

mkdir-p~/linux-command-labcd~/linux-command-labpwd

⚠️安全提醒:不要在根目录、系统配置目录或重要业务目录中练习删除、覆盖和权限修改命令。尤其是rm -rf、输出重定向>和递归chmod -R,执行前一定确认目标路径。


一、Linux 与 Shell:先搞懂命令是怎么执行的

1.1 Linux 到底是什么?

严格来说,Linux 指的是操作系统内核。日常所说的 Linux 系统,通常由下面几部分组成:

  • Linux 内核;
  • GNU 基础工具;
  • Shell 命令解释器;
  • 软件包管理器;
  • 用户态程序与服务。

Ubuntu、Debian、RHEL、CentOS Stream、Fedora 等都是 Linux 发行版。它们共享相近的内核与命令行思想,但软件包管理、默认配置和发布节奏有所区别。

1.2 为什么服务器更偏爱命令行?

图形界面直观,但服务器管理更看重可重复、可远程、可自动化:

  • 命令可以直接写入脚本;
  • SSH 只需传输文本,远程操作开销小;
  • 同一条命令可以批量处理成千上万个文件;
  • 操作过程便于记录、复现和审计;
  • 即使没有桌面环境,也能完成系统管理。

1.3 Shell 扮演什么角色?

Shell 是用户与操作系统之间的命令解释器。一个命令从输入到执行,大致经历:

用户输入命令 ↓ Shell 解析命令名、参数、通配符与重定向 ↓ 查找内建命令,或在 PATH 中寻找外部程序 ↓ 创建进程并执行程序 ↓ 等待结果,显示退出状态与输出

图解说明:cdalias等内建命令由 Shell 自己执行;lsgrep等外部命令通常需要先在PATH中定位,再通过新进程启动。

常见终端提示符:

[alice@server ~]$command[root@server ~]# command
  • $通常表示普通用户;
  • #通常表示 root 用户;
  • ~表示当前用户的家目录。

1.4 使用 SSH 远程登录

sshusername@192.168.1.100

如果 SSH 服务使用非默认端口:

ssh-p2222username@192.168.1.100

💡终端快捷键Ctrl+C通常向前台进程发送中断信号,并不是复制。很多终端使用Ctrl+Shift+C/Ctrl+Shift+V,XShell 等客户端也可能使用Ctrl+Insert/Shift+Insert

核心设计解读

Shell 并不是“命令本身”。例如ls通常是独立程序,cd则必须由 Shell 自己实现,因为切换目录需要改变 Shell 进程本身的工作目录。这也是“内建命令”和“外部命令”存在差异的根本原因。


二、Linux 目录树与路径

2.1 Linux 只有一棵目录树

Windows 常用C:D:等盘符划分存储空间;Linux 从唯一的根目录/开始,把不同磁盘、分区和设备挂载到同一棵目录树中。

/ ├── bin ├── boot ├── dev ├── etc ├── home │ └── alice ├── proc ├── tmp ├── usr └── var

记忆时不要孤立背目录名,可以按“程序、配置、用户、运行时、可变数据”五类建立整体认识。

普通文件通常位于目录树叶子位置,目录则可能继续包含子目录和文件。

2.2 常见目录的职责

目录主要用途初学者理解
/bin/usr/bin常用命令和用户程序lscp等程序所在区域
/boot内核和启动相关文件系统启动所需内容
/dev设备文件磁盘、终端等设备的抽象
/etc系统与服务配置“配置中心”
/home普通用户家目录每个用户的个人空间
/rootroot 用户家目录不是根目录/
/proc进程与内核信息基于内存的虚拟文件系统
/tmp临时文件通常会定期清理
/usr用户程序、库和共享数据大量软件资源
/var日志、缓存等可变数据经常增长或变化的内容

⚠️/root是 root 用户家目录,/才是整棵目录树的根,两者不要混淆。

2.3 绝对路径与相对路径

绝对路径/开始,不依赖当前位置:

/home/alice/project/main.c

相对路径以当前工作目录作为起点:

./main.c../project/main.c

特殊路径:

写法含义
.当前目录
..上级目录
~当前用户家目录
-上一次所在目录,仅用于部分命令语境,如cd -

2.4 pwd 与 cd

pwd# 显示当前工作目录cd/home/alice# 使用绝对路径cd../project# 使用相对路径cd~# 返回家目录cd-# 在最近两个目录间切换
核心设计解读

进程维护自己的当前工作目录。命令中出现相对路径时,内核会以该目录为基准解析。因此“文件创建到哪里”由进程当前工作目录决定,而不是由源代码或可执行文件存放位置决定。


三、文件与目录操作:从查看到删除

3.1 ls:不只是查看文件名

基本用法:

lsls/etclsfile.txt

高频选项:

选项作用
-a显示包含点开头隐藏项的全部内容
-l显示详细属性
-h-l配合,以易读单位显示大小
-d显示目录自身,而不是目录内容
-i显示 inode 编号
-t按修改时间排序
-r反向排序
-R递归列出子目录
-F在名称后附加类型标记

组合使用:

ls-alhls-ltls-ld/etcls-ifile.txt

一条典型的ls -l输出:

-rw-r--r-- 1 alice dev 4096 Aug 12 10:30 app.log

它依次包含文件类型和权限、硬链接数、所有者、所属组、大小、修改时间与文件名。

3.2 touch:创建文件还是更新时间?

touchdemo.txtstatdemo.txt

如果文件不存在,touch会创建空文件;如果已经存在,则默认更新访问时间和修改时间。

stat可以查看更完整的元数据:

statdemo.txt

3.3 mkdir 与 rmdir

mkdirlogsmkdir-pproject/include/detailrmdirlogs

mkdir -p会自动创建缺失的父目录;rmdir只能删除空目录。

3.4 cp:复制文件和目录

cpsource.txt backup.txtcpsource.txt backup/cp-rsrc/ backup/cp-isource.txt target.txtcp-aproject/ project-backup/

常用选择:

  • -i:覆盖前询问;
  • -r:递归复制目录;
  • -a:归档模式,尽量保留属性、链接和目录结构。

3.5 mv:移动与重命名是同一个命令

mvold.txt new.txtmvreport.txt documents/mv-isource.txt target.txt

当第二个参数是新的路径名时,mv完成重命名;当它是已存在的目录时,源文件被移动到该目录。

同一文件系统内的重命名通常只需修改目录项,不必搬运文件内容,因此往往很快。

3.6 rm:最危险也最常用

rmfile.txtrm-ifile.txtrm-rdirectory/

rm -rf同时代表递归与强制,通常不会再次确认:

# 仅展示危险写法,不要在重要目录执行(这是命令行注释)rm-rfdirectory/

🚨删除前四步检查

  1. pwd确认当前位置;
  2. ls -ld target确认目标本身;
  3. 确认变量不为空、通配符没有扩大范围;
  4. 优先使用-i,重要数据先备份。

3.7 Shell 通配符

通配符作用示例
*匹配任意长度字符串*.c
?匹配任意一个字符test?.txt
[0-9]匹配一个数字log[0-9].txt
[abc]匹配集合中的一个字符file[abc]
ls*.ccp*.txt backup/lsfile[0-9].log

通配符通常由 Shell 在执行命令前展开。程序收到的往往已经是展开后的文件名列表。


四、文本查看与搜索:日志排查必备

4.1 cat:适合短文件

catconfig.txtcat-nconfig.txt# 所有行编号cat-bconfig.txt# 仅非空行编号cat-sconfig.txt# 连续空行压缩为一行

不要用cat直接刷超大文件,终端输出会非常混乱。大文件更适合less

4.2 more 与 less

morelarge.logless-Nlarge.log

less常用交互:

按键作用
Space/PageDown向后翻页
PageUp向前翻页
/keyword向后搜索
n/N下一个 / 上一个匹配
g/G文件开头 / 结尾
q退出

4.3 head 与 tail

head-n20app.logtail-n20app.logtail-fapp.log

tail -f会持续观察文件末尾新增内容,常用于跟踪服务日志。

4.4 grep:从文本中筛选内容

grep"ERROR"app.loggrep-n"ERROR"app.log# 显示行号grep-i"error"app.log# 忽略大小写grep-v"DEBUG"app.log# 反向选择grep-R"listen"./src# 递归搜索目录grep-E"ERROR|WARN"app.log# 扩展正则

4.5 find:从目录树中定位文件

find.-name"*.c"find.-typed-name"build"find/var/log-typef-size+100Mfind.-typef-mtime-7
  • -name:按名称;
  • -type f/d:普通文件/目录;
  • -size:按大小;
  • -mtime:按修改天数。

⚠️ 将find与删除动作组合前,先只打印结果并逐项确认,不要一开始就执行批量删除。

4.6 which、whereis 与 man

whichgccwhereisgccmanlsman2openman3printfman7signal
  • which:根据PATH查找将执行的命令;
  • whereis:查找程序、源码和手册的典型位置;
  • man:阅读命令、系统调用、库函数和协议说明。
核心设计解读

grep解决“内容里有什么”,find解决“目录树上文件在哪里”,which解决“Shell 会执行哪个程序”。三者检索对象不同,不能相互替代。


五、压缩归档与系统辅助命令

5.1 tar:归档与压缩

创建 gzip 归档:

tar-czvfproject.tar.gz project/

解包:

tar-xzvfproject.tar.gz

常用参数记忆:

选项含义
-c创建归档
-x解开归档
-t查看归档内容
-z使用 gzip
-j使用 bzip2
-v显示过程
-f指定归档文件名

tar的核心职责是把多个文件归档为一个文件;gzip、bzip2 等算法负责压缩。日常命令经常把两步组合起来。

5.2 zip 与 unzip

zip-rproject.zip project/unzipproject.zipunzipproject.zip-doutput/

5.3 date、cal 与 uname

datedate"+%F %T"caluname-auname-r

5.4 whoami、id 与 alias

whoamiidaliasll='ls -alF'

别名只影响当前 Shell 会话,若希望长期生效,需要写入对应 Shell 的配置文件并重新加载。


六、重定向与管道:让命令组合起来

6.1 三个标准流

程序启动时通常已经打开三个标准流:

fd名称默认对象
0标准输入 stdin键盘
1标准输出 stdout终端
2标准错误 stderr终端

命令通常只管从标准输入读取、向标准输出或错误写入。至于这些描述符实际指向终端、文件还是管道,由 Shell 在程序启动前安排。

6.2 输出重定向

echo"first line">output.txtecho"second line">>output.txt
  • >:覆盖写入,目标存在时会截断原内容;
  • >>:追加写入。

6.3 输入与错误重定向

wc-l<output.txtcommand>normal.log2>error.logcommand>all.log2>&1

第二条合并命令的顺序很关键:

  1. fd 1 先指向all.log
  2. fd 2 再复制 fd 1 当前的指向。

6.4 管道

管道|把左侧命令的标准输出连接到右侧命令的标准输入:

ps-ef|grepnginxfind.-name"*.log"|wc-lgrep"ERROR"app.log|tail-n20

6.5 一个实用日志分析流水线

grep-E"ERROR|WARN"app.log\|tail-n100\|sort\|uniq-c\|sort-nr

执行逻辑:

  1. grep筛选错误和警告;
  2. tail保留最近 100 条;
  3. 第一次sort让相同内容相邻;
  4. uniq -c统计重复次数;
  5. 第二次sort -nr按次数降序排列。

核心设计解读

Unix 工具倾向于“只做好一件事”。grep不必内置统计、排序和分页,只要它能够正确读取标准输入、写出标准输出,就能通过管道与其他工具组合成复杂工作流。


七、Linux 权限管理:真正理解 rwx

7.1 谁在访问文件?

Linux 权限判断围绕三类身份:

  1. 文件所有者 user;
  2. 文件所属组 group;
  3. 其他用户 other。
ls-lapp -rwxr-xr--1alice dev4096Aug1210:30 app

拆开:

- | rwx | r-x | r-- 类型 user group other

7.2 文件类型

ls -l第一位常见含义:

字符类型
-普通文件
d目录
l符号链接
c字符设备
b块设备
p管道
s套接字

使用file进一步识别:

fileappfilearchive.tar.gz

7.3 rwx 的数值表示

权限数值
r4
w2
x1

754的含义:

7 = 4 + 2 + 1 = rwx 5 = 4 + 0 + 1 = r-x 4 = 4 + 0 + 0 = r--

7.4 chmod:修改访问权限

符号方式:

chmodu+x script.shchmodg-w report.txtchmodo=r public.txtchmoda+r README.md

数字方式:

chmod754script.shchmod640config.ini
  • u/g/o/a:所有者/所属组/其他/全部;
  • +/-/=:增加/移除/精确设置。

⚠️ 不要为了省事随意使用chmod 777。它把文件写权限开放给所有用户,容易造成篡改、植入或误删。正确做法是遵循最小权限原则。

7.5 chown 与 chgrp

chownalice file.txtchownalice:dev file.txtchgrpdev file.txt

修改所有者通常需要 root 或相应能力;文件所有者一般可以在自己所属的组范围内按系统规则修改所属组。

7.6 目录权限为什么最容易出错?

同一个权限,对普通文件和目录含义不同:

权限普通文件目录
r读取内容列出目录项名称
w修改内容创建、删除、重命名目录项
x执行文件进入/穿越目录并访问对象

最关键的结论:

删除文件修改的是父目录里的目录项。因此用户能否删除文件,核心看父目录的w + x权限,而不是只看文件自身有没有w

7.7 umask:默认权限从哪里来?

新建普通文件的基础权限通常按0666计算,目录按0777计算,再屏蔽umask中设置的位:

实际权限 = 基础权限 & (~umask)

查看:

umask

umask0022

普通文件:0666 & ~0022 = 0644 目录: 0777 & ~0022 = 0755

普通文件默认不带执行权限,是为了避免任意新文件直接成为可执行程序。

7.8 粘滞位:共享目录中的删除保护

ls-ld/tmp drwxrwxrwt... /tmp

末尾的t是粘滞位。即使多人都有目录写权限,通常也只有文件所有者、目录所有者或 root 能删除对应文件。

设置:

chmod+t shared/

八、综合实战:搭建一个安全的日志分析目录

下面把目录、文件、权限、重定向与管道串起来。

这套流程体现了 Linux 命令行最重要的组合思想:每个命令只负责一个小步骤,使用管道和重定向把它们连接成可重复执行的工作流。

8.1 创建实验目录

mkdir-p~/linux-command-lab/{logs,backup,reports}cd~/linux-command-lab tree

如果没有tree

find.-maxdepth2-print

8.2 生成模拟日志

cat>logs/app.log<<'LOG' 2026-08-12 09:00:01 INFO server started 2026-08-12 09:01:12 WARN cache miss 2026-08-12 09:02:33 ERROR database timeout 2026-08-12 09:03:08 INFO retry success 2026-08-12 09:05:45 ERROR database timeout LOG

8.3 分析错误并生成报告

grep-n"ERROR"logs/app.log>reports/errors.txtwc-lreports/errors.txtcatreports/errors.txt

统计错误类型:

grep"ERROR"logs/app.log\|cut-d' '-f4-\|sort\|uniq-c\|sort-nr\>reports/error-summary.txt

8.4 打包备份

tar-czvfbackup/logs-$(date+%F).tar.gz logs/ reports/tar-tzvfbackup/logs-$(date+%F).tar.gz

8.5 设置合理权限

chmod750~/linux-command-labchmod750logs backup reportschmod640logs/app.logchmod640reports/*.txt

验证:

ls-ld~/linux-command-lab logs backup reportsls-llogs reports

实战设计解读

  • 目录750:所有者完全控制,所属组可进入并读取,其他用户无权访问;
  • 文件640:所有者可读写,所属组只读,其他用户无权访问;
  • 报告通过管道生成,过程可重复执行;
  • 归档文件加入日期,避免每天直接覆盖同一份备份。

九、核心知识点与避坑指南

9.1 为什么执行当前目录程序必须写 ./app?

Shell 只会在PATH指定目录中搜索外部程序,当前目录通常不在其中:

echo"$PATH"whichlsls-l./app ./app

不建议随意把.放到PATH最前面,否则当前目录中的同名程序可能抢先于系统命令执行。

9.2 为什么目录有 r 权限却进不去?

因为目录的r只允许读取目录项名称,进入和穿越目录需要x

  • rx:可能看到名称,却无法正常访问对象;
  • xr:知道准确名称时可能访问,但不能正常列出目录;
  • 创建和删除目录项通常还需要w + x

9.3 > 为什么会让文件内容消失?

>使用覆盖/截断语义。Shell 在启动命令前就可能已经打开并清空目标文件,因此下面这种写法会先把文件截断:

# 错误示例:不要这样原地过滤(这是命令行注释)grep"ERROR"app.log>app.log

正确做法是先写临时文件,验证后再替换:

grep"ERROR"app.log>app.log.tmpmvapp.log.tmp app.log

9.4 为什么 rm 删除后通常很难恢复?

rm删除的是文件名与 inode 的关联,不会放进桌面回收站。后续磁盘写入可能覆盖原数据块。重要数据应依靠权限、备份、版本控制和快照保护,而不是依赖事后恢复。

9.5 find 和通配符有什么区别?

ls*.logfind.-name"*.log"
  • *.log由 Shell 在当前路径层级展开;
  • find主动遍历目录树,可组合类型、大小、时间等条件;
  • find -name中给模式加引号,可以防止 Shell 提前展开。

9.6 sudo 不是“让所有命令都能执行”的开关

sudo根据配置以其他身份执行被授权命令。它不是权限问题的万能修复方式。执行前应理解目标、影响范围和命令本身,尤其不要给来源不明的脚本直接加sudo

9.7 man 手册章节怎么选?

章节典型内容
1普通用户命令
2系统调用
3C 库函数
5配置文件格式
7协议、约定和概念
8系统管理命令
man1printfman3printf

同名命令和库函数可以位于不同章节,指定章节能避免查错对象。


总结

这篇文章真正需要记住的不是几十条命令,而是 Linux 命令行背后的四层逻辑:

目录树:使用路径定位对象 ↓ 命令工具:查看、创建、复制、移动、检索对象 ↓ 标准流:使用重定向与管道组合数据处理流程 ↓ 权限模型:决定不同身份可以进行哪些操作

当你能解释下面几个问题时,说明 Linux 基础已经真正入门:

  • 为什么相对路径依赖当前工作目录?
  • 为什么cd必须是 Shell 内建命令?
  • 为什么grepfind不能互相替代?
  • 为什么管道能把多个简单命令组合成复杂任务?
  • 为什么删除文件主要取决于父目录权限?
  • 为什么普通文件默认通常没有执行权限?

写在最后

🌱 Linux 学习最有效的方式不是“看完”,而是边看边在测试目录中验证。

如果这篇文章帮助你打通了 Linux 基础指令:

  • 收藏:需要查命令和权限时可以快速回来;
  • ❤️点赞:让更多正在入门 Linux 的同学看到;
  • 💬评论:留下你遇到过最难理解的 Linux 命令或权限问题;
  • 👀关注:后续继续深入进程、文件 I/O、文件系统与网络编程。

技术成长没有捷径,但每一次在终端里亲手验证,都会让抽象概念变得更清晰。

http://www.jsqmd.com/news/1392143/

相关文章:

  • 【研发避坑】别死磕传感器
  • 从人体工学椅到密码管理器:我的高效生活与消费决策复盘
  • 2026合肥黄金回收趋势预测:价格波动加剧,锁定实时金价是关键 - 朝夕热点速报
  • 30分钟用maxGraph从零搭一个能拖拽的流程图编辑器
  • 2026中锑合金厂家怎么选?甄别靠谱厂家方法汇总 - 商业新知
  • 网盘直链下载助手使用指南:三步绕过客户端限制,免客户端直链解析一键下载
  • Node.js入门教程(十九):模块系统
  • 南京宠物 B 超 X 光实操培训班 转行宠物医疗助理去哪里学 报名条件 - 湖北找学校
  • 告别无效忙碌:用Tai这款Windows时间统计工具,看清软件和网站的时间去向
  • 交付一个可拖拽的流程图编辑器要多久?我用maxGraph搭建交互式图表库的实测记录
  • 告别打印驱动地狱:foo2zjs 让 100+ 款激光打印机在 Linux 下免费复活
  • 2026年丹东租车行业梳理:BZBOSS等品牌内容及避坑要点整理 - 小范同学a
  • 资料员 vs 材料员核心区别:建筑投标入行必看的岗位指南
  • 【C语言】第三章:内存与指针(指针上篇)
  • 如何避坑?深入解读网站建设合同规范及避坑指南
  • 如何在浏览器里零成本搭建光学实验室?5分钟上手 Ray Optics Simulation 光学模拟器
  • Node.js入门教程(二十):模块导入
  • 东莞大型网站建设公司如何选择?揭秘高品质建站背后的逻辑与避坑指南
  • 基于YOLOv8的AI自瞄完整实战指南:从环境搭建到参数调优
  • 武汉中职 / 中专想学宠物医疗与护理专业推荐学校 —— 武汉市城铁技工学校 - 升学择校早知道
  • Needle 2:14MB 工具调用模型的工程极限与真实边界
  • 沈阳中街附近民宿预算300到500怎么住哪家好?2026夏季实测靠谱关东住宿推荐 - 阿木小鸟
  • Snipe-IT 开源资产管理:10 步 Docker 部署实战,半小时搭好企业 IT 资产台账
  • 技术解析:办公自动化(OA)系统有哪些?按企业规模匹配选型
  • LangChain 和 LangGraph 到底啥关系?一篇讲清怎么选
  • 非人灵长类Th1/Th2及炎症免疫应答的多因子检测:从亚群分化到模型应用
  • 2026合肥哪个单招辅导班比较靠谱?合肥共达校内单招辅导班,保底录取! - 小张zc
  • 2026年湖北电大中专怎么报名?联系方式多少? - 最新资讯
  • 站长之家工具生态 vs SpeedCE:Ping/测速/Whois 分工
  • 2026郑州全屋定制靠谱门店推荐 - 甄选测评馆