云计算百科
云计算领域专业知识百科平台

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. 数字模式(最常用)

chmod 755 script.sh # rwxr-xr-x
chmod 644 config.txt # rw-r–r–
chmod 600 private.key # rw——-
chmod 777 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/ # 移除其他人的读和执行权限

# 设置精确权限
chmod u=rwx,g=rx,o= file.txt
chmod a=rwx open_for_all.sh

3. 递归修改目录权限

chmod -R 755 web_root/ # 递归修改整个目录树
chmod -R u+w project/ # 给所有者递归添加写权限

四、修改所有者和组

1. chown:改变文件所有者

# 基本用法
sudo chown newowner file.txt
sudo chown newowner:newgroup file.txt

# 递归修改
sudo chown -R www-data:www-data /var/www/html/

# 只改组
sudo chown :developers project/

2. chgrp:改变文件所属组

sudo chgrp developers source_code/
sudo chgrp -R www-data web_content/

五、特殊权限位

1. SUID(Set User ID)
  • 作用:普通用户以文件所有者的权限执行
  • 设置:chmod u+s file 或 chmod 4755 file
  • 典型应用:/usr/bin/passwd
2. SGID(Set Group ID)
  • 作用:在目录中新建的文件继承目录的组
  • 设置:chmod g+s directory 或 chmod 2755 directory
  • 典型应用:团队协作目录
3. Sticky Bit(粘滞位)
  • 作用:只有文件所有者、目录所有者或root能删除
  • 设置:chmod +t directory 或 chmod 1777 directory
  • 典型应用:/tmp目录

# 设置/tmp的典型权限
sudo chmod 1777 /tmp

# 查看特殊权限
ls -ld /tmp
# 显示:drwxrwxrwt … /tmp
# 注意最后的t,表示粘滞位

六、默认权限与umask

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

umask # 查看当前umask
umask 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/

二、zip和unzip:跨平台选择

# 压缩
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


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

一、top和htop:实时系统监控

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

top

在top界面中:

  • 按1:显示每个CPU核心的使用情况
  • 按M:按内存使用排序
  • 按P:按CPU使用排序
  • 按k:杀死进程(输入PID)
  • 按q:退出
2. htop:top的增强版(需要安装)

sudo apt install htop # Ubuntu/Debian
sudo yum install htop # CentOS/RHEL
htop

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=30

find "$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 天前的日志"

二、安全最佳实践

  • 最小权限原则:只给必要的权限
  • 定期备份:重要数据永远要有备份
  • 使用sudo:避免直接使用root账户
  • 检查脚本:运行未知脚本前先查看内容
  • 日志监控:定期检查系统日志
  • 三、故障排查流程

  • 查看日志:tail -f /var/log/syslog 或相应应用日志
  • 检查进程:ps aux | grep process_name
  • 检查端口:netstat -tuln | grep port_number
  • 检查权限:ls -la /path/to/file
  • 检查磁盘:df -h 和 du -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的世界里探索愉快!🐧🚀


    我们下篇见!

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Linux进阶:玩转文件与权限管理
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!