Linux进阶:玩转文件与权限管理

Linux进阶:玩转文件与权限管理
头像

🔥 码途CQ:个人主页
✨ 个人专栏:《Linux》 | 《经典算法题集》《C++》《QT》
✨ 追风赶月莫停留,无芜尽处是春山!

💖 欢迎关注,一起交流学习 💖
📌 关注后可第一时间获取C++/Qt/算法干货更新

🌟

在这里插入图片描述

🚀 第一章:欢迎回到Linux命令行世界!

在上一篇文章中,我们一起认识了Linux的基础文件操作命令,是不是已经对那个黑乎乎的终端窗口有了些许亲切感?今天,我们将继续深入,学习更多实用指令,尤其是Linux中至关重要的文件操作权限管理

🎩 进阶思维:如果说基础命令是Linux的“单词”,那么今天的命令就是“语法”,而权限系统则是整个语言的“规则体系”。

一、温故知新:快速回顾

还记得这些命令吗?

ls -la # 查看详细信息cd ~ # 回家mkdir -p a/b/c # 创建多层目录rm -rf danger # 危险!慎用!

很好!现在让我们进入今天的主菜。


📁 第二章:高级文件操作

一、复制与移动的艺术

1. cp:不只是复制,更是备份的起点

基本用法

cp source.txt destination.txt # 复制文件cp -r source_dir/ destination_dir/ # 复制整个目录

高级技巧

# 备份时保留所有属性(权限、时间等)cp -p important_file.txt backup/ # 交互式复制,覆盖前询问cp -i *.txt backup/ # 只复制更新的文件cp -u source/*.log backup/ # 详细模式,显示复制过程cp -v file1 file2 file3 destination/ # 复制符号链接本身,而不是指向的文件cp -d symbolic_link backup/ 

实用场景

# 备份配置文件cp -p /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup # 批量复制图片并重命名cp photo.jpg vacation/photo_2023.jpg 
2. mv:移动、重命名、还是覆盖?

mv命令有三重身份,全看第二个参数是什么:

# 1. 重命名文件mv old_name.txt new_name.txt # 2. 移动文件mv file.txt /home/user/Documents/ # 3. 移动并重命名mv file.txt /home/user/new_name.txt # 4. 移动多个文件mv file1.txt file2.txt file3.txt destination_folder/ # 5. 交互式移动(覆盖前询问)mv -i important_file.txt maybe_existing_file.txt 
💡 小贴士mv实际上是“移动”而非“复制+删除”,所以速度极快,即使大文件也能瞬间完成。

二、文件比较:diff —— 找不同高手

# 比较两个文件diff file_v1.txt file_v2.txt # 并排显示差异diff -y file1.txt file2.txt # 统一格式,更易读diff -u old_version.c new_version.c # 比较两个目录diff -r directory1/ directory2/ 

实际应用

# 查看配置文件修改了哪些地方diff -u /etc/nginx/nginx.conf.orig /etc/nginx/nginx.conf # 生成补丁文件diff -u old_code.c new_code.c > fix_bug.patch 

三、链接文件:ln —— 文件的“快捷方式”

Linux有两种链接:

  • 硬链接:同一个文件的多个名字(像分身)
  • 软链接:真正的快捷方式(像指针)
# 创建硬链接ln original.txt hardlink.txt # 创建软链接(符号链接)ln -s /path/to/original symlink_name # 查看链接指向ls -l symlink_name readlink symlink_name 

对比理解

原始文件:我是一份重要文档 硬链接:我也是那份文档(同一个实体) 软链接:我指向那份文档(只是一个路径) 

🔐 第三章:Linux权限系统深度解析

一、理解权限:Linux的“门禁系统”

当你执行ls -l时,看到的那些神秘字母是什么意思?

-rwxr-xr-- 1 user group 4096 Jan 1 12:00 myfile ↑ ↑↑↑↑↑↑↑↑ │ └── 权限部分 └── 文件类型 
1. 文件类型标识符
  • -:普通文件(文本、图片、二进制等)
  • d:目录
  • l:符号链接
  • b:块设备(硬盘、U盘等)
  • c:字符设备(终端、打印机等)
  • s:套接字文件
  • p:管道文件
2. 权限详解

权限分为三组,每组三个字符:

rwx r-x r-- ↑↑↑ ↑↑↑ ↑↑↑ ||| ||| ||└── 其他人:无执行权限 ||| ||| |└── 其他人:无写权限 ||| ||| └── 其他人:有读权限 ||| ||└── 所属组:无执行权限 ||| |└── 所属组:有写权限 ||| └── 所属组:有读权限 ||└── 所有者:无执行权限 |└── 所有者:有写权限 └── 所有者:有读权限 

二、权限的数字表示法

每个权限都有对应的数字:

  • r (读) = 4
  • w (写) = 2
  • x (执行) = 1
    • (无权限) = 0

组合计算:

rwx = 4+2+1 = 7 r-x = 4+0+1 = 5 r-- = 4+0+0 = 4 rw-r--r-- = 644 rwxr-xr-x = 755 

三、修改权限:chmod命令大全

1. 数字模式(最常用)
chmod755 script.sh # rwxr-xr-xchmod644 config.txt # rw-r--r--chmod600 private.key # rw-------chmod777 test_dir # 完全开放(慎用!)
2. 符号模式(更直观)
# 添加权限chmod u+x myscript.sh # 给所有者添加执行权限chmod g+w shared_file # 给组添加写权限chmod o+r public.txt # 给其他人添加读权限chmod a+x everyone.sh # 给所有人添加执行权限# 移除权限chmod u-w sensitive.txt # 移除所有者的写权限chmod o-rx private_dir/ # 移除其他人的读和执行权限# 设置精确权限chmodu=rwx,g=rx,o= file.txt chmoda=rwx open_for_all.sh 
3. 递归修改目录权限
chmod -R 755 web_root/ # 递归修改整个目录树chmod -R u+w project/ # 给所有者递归添加写权限

四、修改所有者和组

1. chown:改变文件所有者
# 基本用法sudochown newowner file.txt sudochown newowner:newgroup file.txt # 递归修改sudochown -R www-data:www-data /var/www/html/ # 只改组sudochown :developers project/ 
2. chgrp:改变文件所属组
sudochgrp developers source_code/ sudochgrp -R www-data web_content/ 

五、特殊权限位

1. SUID(Set User ID)
  • 作用:普通用户以文件所有者的权限执行
  • 设置:chmod u+s filechmod 4755 file
  • 典型应用:/usr/bin/passwd
2. SGID(Set Group ID)
  • 作用:在目录中新建的文件继承目录的组
  • 设置:chmod g+s directorychmod 2755 directory
  • 典型应用:团队协作目录
3. Sticky Bit(粘滞位)
  • 作用:只有文件所有者、目录所有者或root能删除
  • 设置:chmod +t directorychmod 1777 directory
  • 典型应用:/tmp目录
# 设置/tmp的典型权限sudochmod1777 /tmp # 查看特殊权限ls -ld /tmp # 显示:drwxrwxrwt ... /tmp# 注意最后的t,表示粘滞位

六、默认权限与umask

umask决定新建文件的默认权限:

umask# 查看当前umaskumask 022 # 设置umask# 计算默认权限# 文件:666 - umask# 目录:777 - umask# 示例:umask=022# 文件:666-022=644 (rw-r--r--)# 目录:777-022=755 (rwxr-xr-x)

📦 第四章:压缩与打包

一、tar:Linux的“瑞士军刀”

tar最初是Tape ARchive(磁带归档)的缩写,现在是最常用的打包工具。

1. 打包与解包
# 打包(不压缩)tar -cvf archive.tar file1 file2 dir1/ # 解包tar -xvf archive.tar # 解包到指定目录tar -xvf archive.tar -C /target/path/ 
2. 压缩与解压
# 使用gzip压缩(.tar.gz 或 .tgz)tar -czvf archive.tar.gz files/ tar -xzvf archive.tar.gz # 使用bzip2压缩(.tar.bz2)tar -cjvf archive.tar.bz2 files/ tar -xjvf archive.tar.bz2 # 使用xz压缩(.tar.xz,压缩率最高)tar -cJvf archive.tar.xz files/ tar -xJvf archive.tar.xz 
3. 查看内容而不解压
tar -tzvf archive.tar.gz # 查看gzip压缩包内容tar -tjvf archive.tar.bz2 # 查看bzip2压缩包内容tar -tJvf archive.tar.xz # 查看xz压缩包内容
4. 高级技巧
# 只解压特定文件tar -xzvf archive.tar.gz path/to/specific/file # 追加文件到压缩包tar -rvf archive.tar new_file.txt # 排除特定文件/目录tar -czvf backup.tar.gz --exclude="*.log" --exclude="temp/" /home/user/ # 基于时间备份(只备份24小时内修改的文件)tar -czvf daily_backup.tar.gz --newer-mtime="1 day ago" /data/ 

二、zipunzip:跨平台选择

# 压缩zip -r archive.zip folder/ zip -r -9 maximum_compression.zip large_files/ # 最大压缩率zip -e encrypted.zip sensitive_data/ # 加密压缩# 解压unzip archive.zip unzip archive.zip -d target_directory/ # 解压到指定目录unzip -l archive.zip # 查看内容而不解压unzip -t archive.zip # 测试压缩包完整性

三、其他压缩工具

# gzip(通常用于单个文件)gzip large_file.log gunzip large_file.log.gz # bzip2(压缩率比gzip高)bzip2 big_file.txt bunzip2 big_file.txt.bz2 # xz(压缩率最高,但较慢) xz huge_file.data unxz huge_file.data.xz 

🖥️ 第五章:系统监控与进程管理

一、tophtop:实时系统监控

1. top:经典的系统监控工具
top

top界面中:

  • 按1:显示每个CPU核心的使用情况
  • 按M:按内存使用排序
  • 按P:按CPU使用排序
  • 按k:杀死进程(输入PID)
  • 按q:退出
2. htoptop的增强版(需要安装)
sudoaptinstallhtop# Ubuntu/Debiansudo yum installhtop# CentOS/RHELhtop

htop的特点:

  • 彩色界面,更直观
  • 鼠标支持
  • 树状视图显示进程关系
  • 更方便的进程操作

二、ps:进程快照

# 查看所有进程ps aux # 查看特定用户的进程ps -u username # 查看进程树ps auxf # 查看特定进程ps -p PID ps -C process_name # 自定义输出格式ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem |head -10 

三、进程控制

1. 发送信号
kill PID # 发送TERM信号(正常终止)kill -9 PID # 发送KILL信号(强制终止)kill -15 PID # 发送TERM信号(同kill PID)kill -STOP PID # 暂停进程kill -CONT PID # 继续被暂停的进程# 通过名称杀进程pkill process_name killall process_name 
2. 后台与前台
# 运行命令并放到后台 long_running_command &# 查看后台作业jobs# 将后台作业调到前台fg %1 # 暂停当前作业(按Ctrl+Z)# 然后可以:bg %1 # 在后台继续运行fg %1 # 回到前台运行

四、系统信息查询

# 查看系统信息uname -a # 所有系统信息 lsb_release -a # 发行版信息(需要安装lsb-release)cat /etc/os-release # 系统版本信息# 查看CPU信息 lscpu cat /proc/cpuinfo # 查看内存信息free -h cat /proc/meminfo # 查看磁盘信息df -h # 磁盘使用情况du -sh directory/ # 目录大小du -h --max-depth=1 /home # 查看/home下各目录大小# 查看网络信息ifconfig# 网络接口信息(需要安装net-tools)ip addr # 更现代的替代品netstat -tuln # 监听端口 ss -tuln # netstat的替代品

🎯 第六章:综合实战与最佳实践

一、实用脚本示例

1. 备份脚本
#!/bin/bash# backup.sh - 简单备份脚本BACKUP_DIR="/backup/$(date +%Y%m%d)"SOURCE_DIR="/home/user/important_data"mkdir -p "$BACKUP_DIR"tar -czf "$BACKUP_DIR/backup_$(date +%H%M%S).tar.gz""$SOURCE_DIR"echo"备份完成:$BACKUP_DIR"
2. 日志清理脚本
#!/bin/bash# clean_logs.sh - 清理旧日志LOG_DIR="/var/log/myapp"DAYS_TO_KEEP=30find"$LOG_DIR" -name "*.log" -mtime +$DAYS_TO_KEEP -delete find"$LOG_DIR" -name "*.log.*.gz" -mtime +$DAYS_TO_KEEP -delete echo"已清理 $LOG_DIR 中 $DAYS_TO_KEEP 天前的日志"

二、安全最佳实践

  1. 最小权限原则:只给必要的权限
  2. 定期备份:重要数据永远要有备份
  3. 使用sudo:避免直接使用root账户
  4. 检查脚本:运行未知脚本前先查看内容
  5. 日志监控:定期检查系统日志

三、故障排查流程

  1. 查看日志tail -f /var/log/syslog 或相应应用日志
  2. 检查进程ps aux | grep process_name
  3. 检查端口netstat -tuln | grep port_number
  4. 检查权限ls -la /path/to/file
  5. 检查磁盘df -hdu -sh

🌟 总结

恭喜!你已经掌握了Linux系统管理的核心技能。让我们总结一下:

高级文件操作cp, mv, diff, ln
权限管理chmod, chown, chgrp, 特殊权限位
压缩打包tar, zip, 各种压缩格式
系统监控top, htop, ps, 进程控制
信息查询uname, df, du, free

🎯 Linux哲学:一个工具只做好一件事,通过管道组合完成复杂任务。

如果觉得文章有帮助,欢迎:

  • 👍 点赞支持
  • 💾 收藏备用
  • ➕ 关注作者获取更多Linux教程
  • 💬 留言分享你的Linux学习经验

学习Linux是一场马拉松,不是短跑。每天进步一点点,你将成为真正的Linux高手!

推荐资源

  • 书籍:《鸟哥的Linux私房菜》
  • 网站:Linux中国、酷壳
  • 练习:Linux Journey、OverTheWire

祝你在Linux的世界里探索愉快!🐧🚀


我们下篇见!

Read more

在命令行中编译并运行 C++ 程序

--阅读《 C++ primer》读书笔记 很多初学者写完第一个 C++ 程序后,不知道如何在命令行中编译并运行。博主学了c++一年多了,一直都在IDE中开发,今天偶然学习到用命令行的方式,逐步编译运行代码,这也是为了马上要学习的Linux打点基础吧! 本文将以 Windows 系统 为例,介绍从创建文件到编译运行的完整流程,并简要说明 cl 和 g++ 两种编译器的用法。 1. 创建并编辑源文件 首先,打开命令行窗口(cmd 或 PowerShell),切换到目标文件夹,例如: cd C:\hello 接着,使用记事本创建并编辑一个源文件: notepad hello.cpp 执行后会弹出记事本,输入你的 C++ 代码并保存。 2. 使用 MSVC 编译器(cl)

By Ne0inhk
C++技术栈全景解析与最佳实践指南

C++技术栈全景解析与最佳实践指南

一、C++技术栈全景图 1. 语言核心层 text 就像学习驾驶汽车: - 基本语法(方向盘、油门、刹车) - 面向对象编程(车辆不同部件的分工协作) - 模板与泛型编程(通用零件适配不同车型) - 内存管理(油箱容量控制和加油策略) 2. 标准库(STL) text 就像家庭工具箱: - 容器:vector(可伸缩收纳箱)、map(带标签的文件柜) - 算法:排序、查找、操作工具 - 迭代器:工具箱的"抓手",统一访问方式 - 智能指针:带自动清理功能的工具(用后自动归位) 3. 系统与网络层

By Ne0inhk
libipc: 一款轻量级、跨平台的 C++ 进程间通信(IPC)库

libipc: 一款轻量级、跨平台的 C++ 进程间通信(IPC)库

目录 1.简介 2.安装 2.1.vcpkg 一键安装 2.2.源码编译安装 3.使用示例 4.项目的目录结构及介绍 5.适合的项目场景 1.简介 https://gitee.com/kanster/cpp-ipc         libipc 是一款轻量级、跨平台的 C++ 进程间通信(IPC)库,封装了管道、共享内存、消息队列等底层 IPC 机制,提供简洁的现代 C++ API,适配 Windows 和 Linux 系统。         设计理念: * 极简 API:所有功能封装在ipc命名空间下,无嵌套、

By Ne0inhk