3_Linux 文件管理三部曲:操作、结构与权限控制

news/2025/10/12 19:03:41/文章来源:https://www.cnblogs.com/SLchuck/p/19137034

Linux 文件管理三部曲:操作、结构与权限控制

对 Linux 新手来说,“管好文件” 是入门的核心 —— 既要会复制、查找文件,也要懂文件存放在哪,更要清楚 “谁能操作文件”。今天这篇文章,带你打通 “文件管理基础→文件系统原理→权限安全控制” 的全流程,从 “会操作” 到 “懂原理” 再到 “保安全”,逐步掌握 Linux 文件管理的核心能力。

第一部分:文件管理基础 —— 复制、查找与查看的实用操作

日常用 Linux,80% 的文件操作离不开 “复制 / 移动 / 删除”“查找内容”“查看文件” 这三类需求。掌握对应的命令和实战技巧,能大幅提升效率。

一、核心命令:覆盖 “操作→查找→查看”

1. 复制 / 移动 / 删除:cp、mv、rm(基础但关键)

这三个命令是文件操作的 “基石”,但新手容易因参数用错导致误操作,重点记清常用场景和参数:

命令 核心作用 常用参数 实战例子
cp 复制文件 / 文件夹 -r(复制文件夹)、-i(覆盖提示) 1. 复制单个文件:cp /var/log/syslog ~/backup/(把系统日志复制到备份目录)2. 复制文件夹:cp -r ~/Work /mnt/(把 Work 文件夹复制到 /mnt 分区)
mv 移动 / 重命名 -i(覆盖提示) 1. 移动文件:mv ~/backup/syslog ~/old_log/(把备份的日志移到旧日志目录)2. 重命名:mv report.txt 202410_report.txt(给文档改名为带日期的格式)
rm 删除文件 / 文件夹 -r(删文件夹)、-i(删除提示) 1. 删文件:rm -i old.txt(删除前提示确认)2. 删文件夹:rm -r -i old_dir(删文件夹前提示,避免误删)

2. 查找文件 / 内容:find、grep(定位信息的利器)

  • find:按 “文件属性” 查找(比如文件名、修改时间、大小)

    核心参数:-name(按文件名)、-mtime(按修改时间)、-size(按大小)

    实战场景:查找近 7 天修改过的日志文件(比如 /var/log 下所有.log 文件)

    命令:find /var/log -name "*.log" -mtime -7

    解释:/var/log是查找路径,"*.log"是匹配所有后缀为 log 的文件,-mtime -7是 “近 7 天内修改过”(-7代表 7 天内,+7是 7 天前)。

  • grep:按 “文件内容” 查找(比如在日志里找 “error” 关键词)

    核心参数:-n(显示行号)、-i(忽略大小写)、-r(递归查找文件夹内文件)

    实战场景:在 /var/log/syslog 里找包含 “error” 的内容,并显示行号

    命令:grep -n "error" /var/log/syslog

    进阶:查找所有日志文件里的 “warning”:grep -r -i "warning" /var/log

3. 查看文件内容:cat、less(小文件快查,大文件不卡)

新手常犯的错:用cat打开几十 MB 的大日志,导致终端卡顿 —— 要根据文件大小选工具:

工具 适用场景 操作技巧 避坑提示
cat 小文件(<1MB) 直接查看:cat note.txt;显示行号:cat -n note.txt 绝对不要用cat打开几十 MB 以上的大文件!
less 大文件(>1MB) 打开:less /var/log/syslog;操作:PgUp/PgDn翻页、/关键词搜索、q退出 打开后不会加载全部内容,只加载当前页,避免卡顿

二、避坑指南:避免 “手滑” 操作

  1. cp 覆盖文件的提示设置:防止误覆盖

    默认cp覆盖文件时不提示,比如cp a.txt b.txt,如果 b.txt 已存在,会直接覆盖。

    解决方案:设置cp别名,让它每次覆盖前提示 ——

    临时生效:终端输入alias cp='cp -i'-i是 “交互式”,覆盖前问 “是否覆盖”);

    永久生效:输入echo "alias cp='cp -i'" >> ~/.bashrc,再输source ~/.bashrc(更新配置)。

  2. 误删文件的基础恢复:用 Trash-CLI 做 “终端回收站”

    rm删除的文件默认无法恢复,新手推荐用Trash-CLI(终端回收站工具),删除的文件能找回:

  • 安装(Ubuntu 系统):sudo apt install trash-cli

  • 用法:

    ① 删除文件:trash-put old.txt(代替rm old.txt,文件进回收站);

    ② 查看回收站:trash-list(显示删除的文件、时间和路径);

    ③ 恢复文件:trash-restore(按提示输入文件编号,回车恢复)。

第二部分:Linux 文件系统揭秘 —— 为什么没有 “C 盘”?

用 Windows 时,我们习惯 “C 盘装系统、D 盘存文件”,但 Linux 里没有 “C 盘 / D 盘”,而是一个以/(根目录)为核心的树形结构 —— 这背后是FHS(Filesystem Hierarchy Standard,文件系统层次标准) 的规定,所有 Linux 发行版(Ubuntu、RHEL 等)都遵循这个标准,确保文件存放位置统一。

一、核心目录解析:记住 3 个高频目录

FHS 定义了十几个目录,新手先重点掌握 3 个最常用的:

目录路径 核心作用 常见文件 / 场景 注意事项
/etc 系统配置文件目录 ① 网络配置:/etc/network/interfaces(Ubuntu)② 服务配置:/etc/nginx/nginx.conf(Nginx 配置)③ 用户密码:/etc/passwd(用户列表) 绝对不要随意删除这里的文件,改配置前先备份(比如cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
/var 动态数据目录(日志、缓存) ① 系统日志:/var/log/syslog(Ubuntu)、/var/log/messages(RHEL)② 服务日志:/var/log/nginx/access.log(Nginx 访问日志)③ 缓存文件:/var/cache/apt/(APT 缓存) /var/log日志会不断变大,定期清理或配置日志轮转(logrotate)
/tmp 临时文件目录 程序运行时产生的临时文件,比如/tmp/tmpfile.txt 系统重启后/tmp会自动清空,不要在这里存重要文件

二、实战:硬链接 vs 软链接 ——Linux 的 “快捷方式”

Windows 里有 “快捷方式”,Linux 里有 “链接”,分硬链接和软链接,用ln命令创建,两者区别很大,用tree命令能直观看到差异。

1. 先搞懂区别:硬链接是 “副本”,软链接是 “指针”

类型 创建命令 核心特点 删除原文件后效果
硬链接 ln 原文件 链接名 ① 和原文件是 “同一个文件”(inode 号相同)② 不能跨分区创建 链接文件还能正常使用
软链接 ln -s 原文件 链接名 ① 是原文件的 “快捷方式”(inode 号不同)② 可以跨分区创建 链接文件失效(显示红色,提示 “没有那个文件或目录”)

2. 用 tree 可视化演示(步骤)

  1. 先创建测试目录和文件:

    mkdir ~/link_test && cd ~/link_test(新建目录并进入)

    echo "test content" > file.txt(创建原文件 file.txt,写入内容);

  2. 创建硬链接和软链接:

    ln file.txt hard_link.txt(硬链接)

    ln -s file.txt soft_link.txt(软链接);

  3. 用 tree 查看结构:

    输入tree,显示如下(软链接会标->指向原文件):

.├── file.txt├── hard\_link.txt└── soft\_link.txt -> file.txt0 directories, 3 files
  1. 测试删除原文件的效果:

    rm file.txt(删除原文件)

    再用cat查看链接文件:

  • 硬链接:cat hard_link.txt → 显示 “test content”(正常);

  • 软链接:cat soft_link.txt → 提示 “cat: soft_link.txt: No such file or directory”(失效)。

三、案例:找回误删的配置文件

比如误删了/etc/nginx/nginx.conf(Nginx 配置文件),怎么找回?分 3 种情况:

  1. 如果用 Trash-CLI 删除的:直接用trash-restore,选对应的文件编号恢复;

  2. 如果有备份的:比如之前改配置前备份过cp nginx.conf nginx.conf.bak,直接复制回去:cp /etc/nginx/nginx.conf.bak /etc/nginx/nginx.conf

  3. 如果没备份但服务没重启:Nginx 运行时会加载配置文件到内存,可通过pscat /proc查看内存中的内容:

    ① 找 Nginx 进程 PID:ps aux | grep nginx(比如 PID 是 1234);

    ② 查看内存中的配置:cat /proc/1234/fd/25(fd 后数字是配置文件的文件描述符,需根据实际情况调整),然后把内容复制到/etc/nginx/nginx.conf

第三部分:权限管理 —— 谁在 “操控” 你的 Linux 文件?

Linux 是多用户系统,比如服务器上有管理员(root)、普通用户(testuser)、开发用户(dev),不同用户对文件的操作权限不同 —— 这就是 “权限管理” 的核心:控制 “谁能读、谁能写、谁能执行” 文件。

一、基础:rwx 权限模型 ——3 类权限,3 类对象

ls -l查看文件时,最左边的字符串就是权限,比如-rw-r--r--,拆解如下:

1. 权限字符串解析(以-rw-r--r--为例)

  • 第 1 位:文件类型(-是普通文件,d是目录,l是链接);

  • 第 2-4 位:所有者(owner) 权限(比如rw-,代表所有者能读、能写、不能执行);

  • 第 5-7 位:所属组(group) 权限(比如r--,代表组内用户能读、不能写、不能执行);

  • 第 8-10 位:其他用户(others) 权限(比如r--,代表其他用户只能读)。

2. rwx 权限的实际含义(文件 vs 目录)

权限 对文件的作用 对目录的作用
r 能读取文件内容(比如cat 能列出目录内文件(比如ls
w 能修改文件内容(比如vim 能在目录内增删文件(比如touch/rm
x 能执行文件(比如脚本、程序) 能进入目录(比如cd

3. 用户 / 组管理:创建与修改

  • 创建用户useradd testuser(创建普通用户 testuser);

    设密码:passwd testuser(按提示输入密码);

  • 修改用户组usermod -G sudo testuser(把 testuser 加入 sudo 组,获得管理员权限);

  • 查看用户信息id testuser(显示用户 ID、组 ID、所属组)。

二、进阶:sudo 配置与 PAM 认证 —— 普通用户的 “管理员权限”

默认只有 root 能执行sudo(临时获取管理员权限),普通用户要想用sudo,需要配置/etc/sudoers文件 —— 这个文件语法严格,必须用visudo编辑(避免语法错误导致无法使用 sudo)。

1. 配置 sudo:给普通用户授权

比如让 testuser 能执行nginx相关命令:

  1. 输入visudo(打开 sudo 配置文件);

  2. 在文件末尾添加一行:

    testuser ALL=(ALL) /usr/sbin/nginx

    解释:testuser是用户名,ALL=(ALL)代表在所有主机上以所有用户身份执行,/usr/sbin/nginx是允许执行的命令(绝对路径,用which nginx查看路径);

  3. 保存退出(visudo 是 vim 编辑器,按Esc,输:wq回车);

  4. 测试:切换到 testuser,su - testuser,输sudo nginx -t(验证 Nginx 配置),会提示输入 testuser 的密码,验证通过后执行命令。

2. PAM 认证机制:sudo 的 “安全守门人”

PAM(Pluggable Authentication Modules,可插拔认证模块)是 Linux 的认证框架,sudo 的密码验证、权限控制都靠 PAM 实现。

  • sudo 的 PAM 配置文件:/etc/pam.d/sudo,默认配置已足够安全,新手不要随意修改;

  • 核心作用:比如限制 sudo 密码输入错误次数(默认 5 次后锁定)、验证用户是否在 sudo 组内,确保只有授权用户能使用 sudo。

三、实战:禁止普通用户访问敏感目录(以/var/log/secure为例)

/var/log/secure是 Linux 安全日志,记录用户登录、sudo 操作等敏感信息,需要禁止普通用户查看。

操作步骤:

  1. 先查看当前权限:ls -l /var/log/secure,默认可能是-rw-r-----(所有者 root,组 root,其他用户无权限);

  2. 修改权限(确保其他用户无任何权限):sudo chmod 600 /var/log/secure

    解释:600是权限的数字表示(r=4w=2x=16=4+2,代表所有者有 rw 权限,组和其他用户无权限);

  3. 修改所有者和组(确保是 root:root):sudo chown root:root /var/log/secure

  4. 验证:切换到普通用户su - testuser,尝试查看cat /var/log/secure,会提示 “Permission denied”(权限不足),说明配置成功。

总结:Linux 文件管理的 “3 个核心”

  1. 操作核心:用cp/mv/rm管文件,find/grep找内容,less看大文件,搭配aliasTrash-CLI避坑;

  2. 结构核心:记住/etc(配置)、/var(日志)、/tmp(临时文件),理解 FHS 标准,用链接简化文件访问;

  3. 安全核心:看懂 rwx 权限,用useradd/usermod管用户,sudo控制管理员权限,保护敏感文件 / 目录。

掌握这三部分内容,你就能从 “只会点图形界面” 的新手,变成 “能通过终端高效管理文件” 的 Linux 使用者。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/935602.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2_终端入门:从 “不敢点” 到 “离不开” 的 5 个核心命令(附高频命令补充)

终端入门:从 “不敢点” 到 “离不开” 的 5 个核心命令(附高频命令补充) 很多新手看到 Linux 终端的 “黑窗口” 就发怵 —— 担心输错命令搞坏系统,害怕记不住复杂语法。但其实终端是 Linux 的 “效率神器”:学…

1_从 0 到 1 入门 Linux:认知、选型、安装

从 0 到 1 入门 Linux:认知、选型、安装 不少新手刚听说 Linux 时,总觉得它是 “程序员专属工具”—— 满屏命令行、操作复杂、离日常使用很远。但 2024 年 Linux 桌面份额已突破 5%,从办公电脑到云服务器,它早已融…

02020509 EF Core高级09-生成静态表达式树、动态创建表达式树、简化表达式树

02020509 EF Core高级09-生成静态表达式树、动态创建表达式树、简化表达式树 1. 更简单的创建表达式树(视频3-44) 1.1 动态创建表达式树 1、通过代码来动态构造表达式树要求开发者精通表达式树的结构,甚至还需要了解…

决胜职场:以准备为刃,破局而出

决胜职场:以准备为刃,破局而出 在当代职场的激烈角逐中,"准备"二字,实乃破局之钥,决胜之要。它不仅是方法论,更是一种生存哲学——当他人还在迷雾中摸索时,准备充分者早已拨云见日,稳操胜券。 一、准…

python的流程控制

一、判断语句 1.1 if语句 if语句是最常用的流程控制语句,通常由条件加子句(代码块)组成,条件求值为True时执行子句,如果条件为False时跳过。 if语句包含以下部分:点击查看代码 if 关键字 条件(表达式) 冒号: …

卖萌求 AccessKey

总之是将 luogu 的 uid 和 luogu.me 的 AccessKey luogu 私信发给我。 绘制冬日绘版用。本文来自博客园,作者:xrlong,转载请注明原文链接:https://www.cnblogs.com/xrlong/p/19137022 版权声明:本作品采用 「署名…

详细介绍:【Linux】线程控制

详细介绍:【Linux】线程控制pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

初识pytorch:关于数据展示的组件tensorboard

目录tensorboardtensorboard的介绍tensorboard的使用流程tensorboard的使用技巧关于tensorboard的总结 tensorboard tensorboard的介绍 tensorboard的作用就是让训练的过程可视化,例如大家伙在写代码的时候会在每一轮…

win11家庭版升级到专业版教程,专业版改为家庭版教程

win11家庭版升级到专业版教程 写这篇文章的原因 因为工作原因,一直在外地出差用的是公司办公电脑,节后放假后就开始公司远程办公了,倒也没什么问题,突然有一天下班在家里,21点后叫我加班(程序都懂的,加班是常态…

计网思维导图总结

计网思维导图总结 内容较多,浏览器建议使用大纲查看。 processon

如何下载不同版本的像素地牢

根据实际需要,像素地牢的制作者们在开发时,会基于不同的破碎像素地牢(SPD)版本进行开发。 本文主要目的在于记录:“如何GITHUB上找到不同版本的破碎像素地牢” 1、在GITHUB上搜索shattered-pixel-dungeon 2、进入…

一生一芯学习:多道程序 yield-os.c

一生一芯学习:多道程序 yield-os.c随着处理器主频的越来越高,每次读写一次磁盘要耗费很多个时钟周期来等待磁盘操作的完成,与其傻傻等待,在这等待的过程中我们可以做更多有意义的事情,如当第一个程序需要等待输入…

速通ACM省铜第十六天 赋源码(Sigma Cubes和Find Permutation 2和Rotate and Sum Query) - 教程

速通ACM省铜第十六天 赋源码(Sigma Cubes和Find Permutation 2和Rotate and Sum Query) - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !i…

Linux操作系统扫盲汇总

linux 基本概念概括VFS 树链接:虚拟文件系统就是一个树,树的根部就是 / , 树上不同的节点,都会指向不同的物理地址(文件系统的目录树的不同节点其实是来自不同的分区),可以是具体的文件系统,或者网络节点,或者…

ABC round 427

ABC round 427T3注意到 \(n\) 非常小,那么枚举染色方式然后判断二分图即可。 #include <bits/stdc++.h> #define int long long #define rep(i, a, b) for(int i = a; i <= b; ++i) #define rep_(i, a, b) f…

卸载驱动模块,内核崩溃排查调试记录

问题 在学习串口子系统,在卸载串口模块的时候,引起内核崩溃。具体的崩溃日志如下: /mnt/uartdeep # rmmod virtual_uart.ko [ 23.208560] /home/book/bsp/mcu/uartdeep/virtual_uart_ok/virtual_uart.c virtual_u…

详细介绍:游戏引擎以及游戏开发

详细介绍:游戏引擎以及游戏开发pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&qu…

springboot大学校园旧物捐赠网站(代码+数据库+LW) - 详解

springboot大学校园旧物捐赠网站(代码+数据库+LW) - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consol…

DropLoRA 论文浅读:通过动态子空间学习突破 LoRA 的性能瓶颈

DropLoRA是一项简单而深刻的工作。它通过一个极其轻量的动态剪枝模块,巧妙地解决了传统LoRA的静态子空间瓶颈问题。DropLoRA 论文浅读:通过动态子空间学习突破 LoRA 的性能瓶颈 一、研究背景 随着大规模语言模型(LL…

实用指南:PCB 半固化片:多层板制造的技术基石,猎板的场景化适配与质控逻辑

实用指南:PCB 半固化片:多层板制造的技术基石,猎板的场景化适配与质控逻辑pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-fam…