引言
在上一篇文章中,我们一起认识了 Linux 的基础文件操作命令。今天,我们将继续深入,学习更多实用指令,尤其是 Linux 中至关重要的文件操作和权限管理。
进阶思维:如果说基础命令是 Linux 的'单词',那么今天的命令就是'语法',而权限系统则是整个语言的'规则体系'。
Linux 系统管理中文件操作、权限控制、压缩打包及进程监控是核心技能。本文详解 cp、mv、diff、ln 等高级文件命令,深入解析 rwx 权限体系、chmod/chown 用法及特殊权限位。涵盖 tar、zip 等压缩工具实战,以及 top、ps、kill 等进程管理指令。提供备份脚本示例与安全最佳实践,帮助开发者掌握 Linux 命令行高效管理与运维能力。

在上一篇文章中,我们一起认识了 Linux 的基础文件操作命令。今天,我们将继续深入,学习更多实用指令,尤其是 Linux 中至关重要的文件操作和权限管理。
进阶思维:如果说基础命令是 Linux 的'单词',那么今天的命令就是'语法',而权限系统则是整个语言的'规则体系'。
还记得这些命令吗?
ls -la # 查看详细信息
cd ~ # 回家
mkdir -p a/b/c # 创建多层目录
rm -rf danger # 危险!慎用!
很好!现在让我们进入今天的主菜。
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
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
对比理解:
原始文件:我是一份重要文档
硬链接:我也是那份文档(同一个实体)
软链接:我指向那份文档(只是一个路径)
当你执行 ls -l 时,看到的那些神秘字母是什么意思?
-rwxr-xr-- 1 user group 4096 Jan 1 12:00 myfile
↑ ↑↑↑↑↑↑↑↑ │ └── 权限部分
└── 文件类型
-:普通文件(文本、图片、二进制等)d:目录l:符号链接b:块设备(硬盘、U 盘等)c:字符设备(终端、打印机等)s:套接字文件p:管道文件权限分为三组,每组三个字符:
rwx r-x r--
↑↑↑ ↑↑↑ ↑↑↑
||| ||| ||
└── 其他人:无执行权限
||| ||| |
└── 其他人:无写权限
||| ||| └── 其他人:有读权限
||| ||└── 所属组:无执行权限
||| |└── 所属组:有写权限
||| └── 所属组:有读权限
||└── 所有者:无执行权限
|└── 所有者:有写权限
└── 所有者:有读权限
每个权限都有对应的数字:
组合计算:
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 命令大全chmod 755 script.sh # rwxr-xr-x
chmod 644 config.txt # rw-r--r--
chmod 600 private.key # rw-------
chmod 777 test_dir # 完全开放(慎用!)
# 添加权限
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
chmod -R 755 web_root/ # 递归修改整个目录树
chmod -R u+w project/ # 给所有者递归添加写权限
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/
chgrp:改变文件所属组sudo chgrp developers source_code/
sudo chgrp -R www-data web_content/
chmod u+s file 或 chmod 4755 file/usr/bin/passwdchmod g+s directory 或 chmod 2755 directorychmod +t directory 或 chmod 1777 directory/tmp 目录# 设置/tmp的典型权限
sudo chmod 1777 /tmp
# 查看特殊权限
ls -ld /tmp
# 显示:drwxrwxrwt ... /tmp
# 注意最后的 t,表示粘滞位
umaskumask 决定新建文件的默认权限:
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(磁带归档)的缩写,现在是最常用的打包工具。
# 打包(不压缩)
tar -cvf archive.tar file1 file2 dir1/
# 解包
tar -xvf archive.tar
# 解包到指定目录
tar -xvf archive.tar -C /target/path/
# 使用 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
tar -tzvf archive.tar.gz # 查看 gzip 压缩包内容
tar -tjvf archive.tar.bz2 # 查看 bzip2 压缩包内容
tar -tJvf archive.tar.xz # 查看 xz 压缩包内容
# 只解压特定文件
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:实时系统监控top:经典的系统监控工具top
在 top 界面中:
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
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
# 运行命令并放到后台
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 的替代品
#!/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"
#!/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 天前的日志"
tail -f /var/log/syslog 或相应应用日志ps aux | grep process_namenetstat -tuln | grep port_numberls -la /path/to/filedf -h 和 du -sh恭喜!你已经掌握了 Linux 系统管理的核心技能。让我们总结一下:
✅ 高级文件操作:cp, mv, diff, ln
✅ 权限管理:chmod, chown, chgrp, 特殊权限位
✅ 压缩打包:tar, zip, 各种压缩格式
✅ 系统监控:top, htop, ps, 进程控制
✅ 信息查询:uname, df, du, free
Linux 哲学:一个工具只做好一件事,通过管道组合完成复杂任务。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online