Linux 压缩传输、进程查看与权限管理

文章目录

    • [1. 打包与压缩](#1. 打包与压缩)
      • [1.1 独立练习目录](#1.1 独立练习目录)
      • [1.2 ZIP 打包](#1.2 ZIP 打包)
      • [1.3 `tar` 压缩与 gzip 压缩](#1.3 tar 压缩与 gzip 压缩)
    • [2. 本地与服务器之间的文件传输](#2. 本地与服务器之间的文件传输)
      • [2.1 `sz` 与 `rz`](#2.1 sz 与 rz)
      • [2.2 `scp` 的基本用法](#2.2 scp 的基本用法)
    • [3. 进程查看](#3. 进程查看)
      • [3.1 `ps ajx` 查看进程快照](#3.1 ps ajx 查看进程快照)
      • [3.2 `top` 动态查看](#3.2 top 动态查看)
    • [4. 用户身份与命令授权](#4. 用户身份与命令授权)
      • [4.1 `su` 切换用户会话](#4.1 su 切换用户会话)
      • [4.2 `sudo` 按授权执行命令](#4.2 sudo 按授权执行命令)
    • [5. 文件权限的表示与判断](#5. 文件权限的表示与判断)
      • [5.1 类型、三类访问者与九位权限](#5.1 类型、三类访问者与九位权限)
      • [5.2 普通文件的 `r/w/x`](#5.2 普通文件的 r/w/x)
      • [5.3 八进制权限](#5.3 八进制权限)
    • [6. 权限与归属修改](#6. 权限与归属修改)
      • [6.1 `chmod` 的两种常用写法](#6.1 chmod 的两种常用写法)
      • [6.2 读取脚本与直接执行](#6.2 读取脚本与直接执行)
      • [6.3 `chown` 与 `chgrp`](#6.3 chown 与 chgrp)
    • [7. 目录权限与操作条件](#7. 目录权限与操作条件)
      • [7.1 文件内容与目录项](#7.1 文件内容与目录项)
      • [7.2 只读名称与按名称访问](#7.2 只读名称与按名称访问)
      • [7.3 文件可写与文件可删除](#7.3 文件可写与文件可删除)
    • [8. 默认权限与共享目录](#8. 默认权限与共享目录)
      • [8.1 `umask` 屏蔽创建权限](#8.1 umask 屏蔽创建权限)
      • [8.2 粘滞位与共享目录](#8.2 粘滞位与共享目录)
    • [9. 总结](#9. 总结)

上一篇已经介绍路径、文件整理、文本查看与管道。本篇沿用这些基础,重点放在归档传输和权限判断,就不再逐个重复基础命令了。

1. 打包与压缩

当我们需要把一个目录传给别人时,里面可能包含子目录、普通文件和隐藏文件。逐个传输既繁琐,也容易漏掉;所以,我们需要把它们组织成一个归档文件,可以保留相对位置,而压缩则进一步尝试减少占用空间。

打包解决"组织成一个文件",压缩解决"减少数据体积"。 两者常配合使用。

压缩已经压缩过的图片、视频或归档包,未必还能显著变小。

1.1 独立练习目录

本篇将在普通用户家目录下新创建linux-permission-lab目录进行相关的示例与练习。

以下命令创建两份短文本和一个隐藏文件:

bash 复制代码
mkdir -p ~/linux-permission-lab/packet/docs
cd ~/linux-permission-lab
echo 'Linux permission practice' > packet/notes.txt
echo 'archive and restore' > packet/docs/readme.txt
echo 'hidden entry' > packet/.meta

后面的相对路径都将以这个练习目录为起点。

1.2 ZIP 打包

zip 常用于制作 ZIP 文件,unzip 则用于查看和解压。文件名参数在前,操作对象在后:

bash 复制代码
zip -r packet.zip packet
unzip -l packet.zip
mkdir restored-zip
unzip packet.zip -d restored-zip
cat restored-zip/packet/docs/readme.txt

此时目录结构为:

这里只需要掌握三个选项:

  • zip -r 递归处理目录;
  • unzip -l 查看文档内的条目;
  • unzip -d 指定解压目录。

打包目录时,直接传入 packet,让工具遍历其中内容。

若改成 packet/*,Shell 默认展开的 * 并不包括隐藏名称,容易漏掉文件;

没有递归选项还可能漏掉子目录内容。

1.3 tar 压缩与 gzip 压缩

Linux 中也经常可以看到 .tar、.tar.gz 或 .tgz。可以先记住两种形式:

bash 复制代码
tar -cf packet.tar packet
tar -czf packet.tar.gz packet

第一条命令只打包;第二条命令在打包时使用 gzip 压缩。

选项 当前需要掌握的作用
-c 打包
-t 列出打包内容
-x 解包
-z 使用 gzip 压缩或解压
-f 后面跟打包文件名
-C 切换到指定目录进行后续处理,这里用于指定解包位置

创建、查看、解包是不同操作,通常在 -c/-t/-x 中选择一种。以 tar -czf packet.tar.gz packet 为例,packet.tar.gz 是 -f 的参数,最后的 packet 才是源目录。

下面的指令先查看内容,再解开到单独目录:

bash 复制代码
tar -tzf packet.tar.gz
mkdir restored-tar
tar -xzf packet.tar.gz -C restored-tar
cat restored-tar/packet/notes.txt

输出结果为 Linux permission practice。需要注意的是,restored-tar 必须事先存在;-C 并不替你创建目录。

zip 打包默认不保留 Linux 文件权限,和 tar 不一样;如果需要保留权限,优先用 tar。

如果提示命令不存在,按发行版选择安装方式即可:

bash 复制代码
#Centos(已有 sudo 授权时执行)
sudo yum install zip unzip lrzsz -y  # 普通用户
yum install zip unzip lrzsz -y  # root用户

# Ubuntu / Debian(已有 sudo 授权时执行)
sudo apt install zip unzip lrzsz  # 普通用户
apt install zip unzip lrzsz  # root用户

2. 本地与服务器之间的文件传输


2.1 sz 与 rz

传输文件前需要先分清两个位置:本地电脑负责接收或提供文件,命令是在远端 Linux 中输入的。

sz/rz 通常由 lrzsz 提供,使用 ZMODEM 协议,需要客户端软件支持。

Xshell 等支持该协议的终端可以配合使用

bash 复制代码
# 在远端 Linux 中执行,当前位于本文练习目录
sz packet.zip

sz 从服务器发送文件,本地客户端通常弹出接收或保存界面。反过来:

bash 复制代码
# 在远端 Linux 中执行
rz

rz 在服务器端接收,本地客户端选择要上传的文件。接收结果通常放入运行 rz 时的当前目录。

2.2 scp 的基本用法

客户端不支持 ZMODEM 时,可以用 OpenSSH 的 scp。它不要求图形传输窗口,下面两条命令均在本地 Windows PowerShell执行,并替换用户名和地址。

powershell 复制代码
# 下载:假设远端当前用户的家目录中有本文练习目录
scp 用户名@服务器公网IP:linux-permission-lab/packet.zip . 

# 上传:本地当前目录已经有 packet.zip,远端接收目录已经存在
scp .\packet.zip 用户名@服务器公网IP:linux-permission-lab/

3. 进程查看

文件里的程序尚未运行时是静态内容;进程则是程序运行时的实例。同一程序可以运行多次,形成不同进程。

3.1 ps ajx 查看进程快照

bash 复制代码
ps ajx

常见表头如下:

text 复制代码
PPID  PID  PGID  SID  TTY  TPGID  STAT  UID  TIME  COMMAND

当前重点看:

字段 含义
PID 进程编号,用于在当前系统中标识进程
PPID 父进程编号
UID 运行身份对应的用户 ID
STAT 状态及附加标记;如 R 表示运行或可运行,S 表示可中断睡眠
TIME 累计使用的 CPU 时间(不是程序启动到现在的实际时间)
COMMAND 命令及参数,可能因显示宽度而截断

可以开两个终端观察一个容易识别的进程。在终端 A 输入:

bash 复制代码
sleep 120

sleep 在指定秒数内等待,所以终端暂时不返回提示符。再在同一服务器的终端 B 输入:

bash 复制代码
ps ajx | grep 'sleep 120'

通常能够找到 sleep 120,状态常见为 S。

3.2 top 动态查看

bash 复制代码
top

top 会持续更新进程和资源信息,按 q 退出。常见的 %CPU、%MEM 分别反映 CPU、内存占用。

ps 适合保存、筛选某一次快照,top 则适合连续观察。

4. 用户身份与命令授权


对文件进行操作时会受到执行身份的影响:同一条 cat,不同用户执行可能得到不同结果。可以先查看自己是谁、属于哪些组:

bash 复制代码
whoami
id

id 常显示 uid、主组 gid 和附加组 groups。用户名和组名是便于阅读的名称,系统也用数字 ID 记录身份。

4.1 su 切换用户会话

bash 复制代码
su - by2099
whoami
exit

su - 用户名 是启动该用户的登录式 Shell,通常也切换到其家目录、调整环境。相比之下,su 用户名 通常保留更多当前环境,也通常不改变工作目录。

普通用户切换时常需输入目标用户的密码,具体受系统认证配置影响;root 切换到其他用户通常不要求目标密码。

su - 省略用户名时默认以 root 为目标,但一些云镜像锁定了 root 密码,不能据此保证普通用户可以用它切到 root。退出切换后的 Shell 使用 exit,返回上一层,不需要为了"切回来"反复套用 su。

4.2 sudo 按授权执行命令

bash 复制代码
sudo whoami
whoami

在默认目标为 root 且当前用户获得相应授权时,第一条输出 root,第二条仍显示当前普通用户。普通形式的 sudo 命令 以指定身份运行这一条命令,不会把当前 Shell 永久变为 root。

sudo 常要求当前调用者的密码,也可能允许免密;它默认目标通常为 root,也可用 sudo -u 用户名 命令 指定其他用户,前提仍是策略允许。

临时提权是常见用途,更准确的含义是按授权以目标身份执行命令。

5. 文件权限的表示与判断


5.1 类型、三类访问者与九位权限

text 复制代码
-rw-r----- 1 by2099 by2099 ... notes.txt

开头的 - 表示普通文件,不属于后面的九位权限。其后九位的权限分成三组:

text 复制代码
rw-    r--    ---
 u      g      o
所有者  所属组  其他用户

u 对应文件所有者,g 对应文件所属组中的用户,o 对应前两类之外的用户。文件所属组是一个属性,不保证永远与所有者当前的主组一致。 一个用户也可以属于多个组。

普通权限判断可以按这个顺序理解:执行身份是所有者,就看 u;否则,属于文件的组就看 g;然后看 o。

例如,所有者对应 ---,其他用户对应 r--,所有者不会因为自己"也算其他人之一"而补上读权限。权限组由身份关系决定,不是挑一组最宽松的权限使用。

5.2 普通文件的 r/w/x

权限 对普通文件的含义
r,read 读取内容,例如 cat 文件
w,write 修改内容,例如向已有文件写入、清空或追加
x,execute 允许把文件作为程序直接执行,仍需内容格式等条件满足
- 该位置没有对应权限

文件可写,不意味着一定能删除;有 x,也不意味着任意文本立刻变成有效程序。

5.3 八进制权限

每组用 r=4(100)、w=2(010)、x=1(001) 的和表示。可以把它们各自看作三个独立的二进制位。

权限组 数值 权限组 数值
--- 0 r-- 4
--x 1 r-x 5
-w- 2 rw- 6
-wx 3 rwx 7

三个数字按 u/g/o 排列:640 就是 rw-r-----,644 就是 rw-r--r--,755 就是 rwxr-xr-x。

6. 权限与归属修改


6.1 chmod 的两种常用写法

回到练习目录,用单独文件观察权限的变化:

bash 复制代码
cd ~/linux-permission-lab
echo 'permission example' > access.txt
chmod 640 access.txt
ls -l access.txt

此时access.txt对应的权限为为 -rw-r-----

bash 复制代码
chmod u+x access.txt
chmod g+w access.txt
chmod o= access.txt
ls -l access.txt

更改后的结果为 -rwxrw----。+ 增加指定权限,- 移除指定权限,= 把指定类别设置成给定权限;例如 chmod u-x access.txt 只去掉所有者的执行位,chmod g=r access.txt 把组权限设为只读。a 表示三类全部,如 chmod a-r access.txt。

通常文件所有者可以修改其权限;其他普通用户即使具有文件写权限,也不因此自动拥有 chmod 的权力。chmod 更改权限时,不改变其所有者或所属组。

6.2 读取脚本与直接执行

这里使用一个只有一条输出语句的 Shell 脚本来观察执行位权限。

printf 在这里把 \n 按换行输出;首行 #!/bin/sh 指明直接执行时使用的解释器。

bash 复制代码
printf '#!/bin/sh\necho "permission demo"\n' > demo.sh
chmod 644 demo.sh
sh demo.sh
./demo.sh

sh demo.sh 输出 permission demo,./demo.sh 报出 Permission denied。原因是前者是执行已有的 sh 程序,让它读取脚本文本;后者要求直接执行 demo.sh,但此时脚本并没有 x可执行权限。

bash 复制代码
chmod u+x demo.sh
./demo.sh

增加可执行权限x后输出 permission demo。

6.3 chown 与 chgrp

权限回答"可以做什么",归属回答"谁适用哪组权限"。改变归属可能会改变后续的权限匹配结果。

bash 复制代码
sudo chown root access.txt
sudo chown root:root access.txt
chgrp root access.txt

chown 用户 文件 修改所有者,chown 用户:组 文件 同时修改所有者与所属组,chgrp 组 文件 只改所属组。

Linux 下的普通用户通常不能把文件所有权交给其他用户;修改所属组时通常要求自己是文件所有者,且属于目标组,其他情况需要管理授权。

7. 目录权限与操作条件


7.1 文件内容与目录项

权限 对目录的含义
r 读取其中的名称列表
w 修改目录项,例如创建、删除、重命名;实际操作通常还需要 x
x 搜索、穿过目录,访问已知名称;cd 进入目录也需要它

访问 a/b/file.txt 时,沿途目录通常都要允许搜索,最后还要判断对 file.txt 的具体操作权限。不是只看最末尾文件的哪一行权限就能确定结果。

目录的 x 不是"允许在目录里执行任何命令",目录的 r 也不是"允许读取里面所有文件内容"。

7.2 只读名称与按名称访问

使用普通用户执行,不添加 sudo:

bash 复制代码
mkdir gate
echo 'known content' > gate/item.txt
chmod 644 gate/item.txt
chmod 400 gate
ls -a gate
cat gate/item.txt
cd gate

此时文件所有者对 gate 只有 r。普通的 ls -a gate 可以列出名称,但是没有 x 权限 ,无法拿到文件的 inode 信息,所以无法展示文件详情。cat gate/item.txt 和 cd gate 则被拒绝。

再把目录改成只有 x:

bash 复制代码
chmod 100 gate
cat gate/item.txt
ls -a gate
  • cat 输出 known content,因为已知具体名称,目录允许搜索,文件自身也可读;
  • ls -a 列表则应失败,因为目录没有 r。

7.3 文件可写与文件可删除

再准备一份自己拥有的文件,把文件本身设为可读写、目录设为只读且可搜索:

bash 复制代码
chmod 600 gate/item.txt
chmod 500 gate
echo 'changed content' > gate/item.txt
rm -i gate/item.txt

写入文件成功;删除时出现确认提示,输入 y 后失败,因为目录缺少 w。

这里 > 打开的是一个已经存在的文件,所以可以依据文件的写权限修改内容;如果目标不存在,创建新目录项则需要目录的 w+x权限。

反过来,把目录恢复为可修改,文件只留读权限:

bash 复制代码
chmod 700 gate
chmod 400 gate/item.txt
rm -i gate/item.txt

确认输入 y 后,成功删除(无提示)。当前用户拥有这个普通目录,没有粘滞位等额外限制,因此能修改目录项,并不要求同时具有该文件的 w。

文件写权限控制内容修改,父目录的写与搜索权限控制常见的创建、删除和重命名。

8. 默认权限与共享目录


8.1 umask 屏蔽创建权限

新文件和目录的权限为什么常见 644、755?因为在通常情况下,程序创建对象时先提出权限请求,再由当前进程的 umask 屏蔽相应位。

普通文本文件常按 666 请求创建,即三类用户都可读写,不请求执行权限;目录常按 777 请求。666/777 是这里的常见创建请求,不是最终权限,也不是所有程序不可改变的规定。

text 复制代码
最终基本权限 = 请求权限 & ~umask

umask 对应位为 1,表示屏蔽该权限;它不会添加请求中本来没有的权限。用 022 为例:

对象 常见请求 屏蔽 结果
普通文件 666 组与其他用户的写权限 644
目录 777 组与其他用户的写权限 755

8.2 粘滞位与共享目录

一个供多人写入的目录,如果只考虑目录 w + x,不同用户就可能删除彼此拥有的文件。而粘滞位为这类目录增加了删除与重命名限制。

bash 复制代码
mkdir shared-demo
chmod 1777 shared-demo
ls -ld shared-demo

此时权限显示为 drwxrwxrwt。这里 1777 的前导 1 设置粘滞位,后三位仍然表示 u/g/o 的基本权限。

t 占用其他用户执行位的显示位置,表示粘滞位与该执行位同时存在;粘滞位已设置而该执行位不存在时显示 T。

在通常模型下,拥有必要目录权限后,带粘滞位的目录进一步限制:文件所有者、目录所有者,或具备相应管理能力的进程,才可删除或重命名其中条目。它不负责阻止读取或修改文件内容,内容访问仍由文件权限等条件决定。

在实际相关场景中,/tmp 就常常使用这种安排,适合多人临时放文件,用户只能删除 / 改名自己拥有的文件(root、目录所有者也可以删)。

⚠️ 注意:不能阻止别人读、修改文件内容,文件内容能不能改,看文件本身权限,粘滞位只管【删除、重命名】。

9. 总结


  • 打包压缩:tar 侧重打包,可搭配 gzip/bzip2 压缩;zip、unzip 是独立压缩工具,适合跨平台传输。
  • 文件传输:scp 基于 ssh 远程拷贝,rz/sz 适合简单上传下载,适合服务器和本地互传文件。
  • 进程查看:ps 查看进程快照,top 实时监控。
  • 基础权限:r 读、w 写、x 执行;目录的 x 权限是进入目录的必要条件,仅有 r 权限无法访问内部文件。
  • 粘滞位:目录设置 1777 后,所有用户可写入目录,但仅文件所有者、root、目录所有者能删除、重命名文件,不限制文件内容读写。
相关推荐
2601_962885722 小时前
Tushare 前复权回测对不上/不可复现?前复权陷阱与正确做法
1024程序员节
无足鸟ICT3 小时前
【RHCA+】reboot命令(重启)
linux·运维·服务器·1024程序员节
ixiaoyang83 小时前
ioDraw v3.7.0 发布:AI 助手完成会话化改造,图表生成一次升级
ai·流程图·甘特图·思维导图·绘图软件·1024程序员节·mermaid
hhb_6183 小时前
构建企业主数据统一底座
1024程序员节
DYWorker0013 小时前
第1课:基于正点原子RK3568开发板读懂Linux内核
linux·运维·网络
2301_767113984 小时前
Codex、Claude Code 怎么系统学?四门官方课程与学习顺序
人工智能·学习方法·codex·1024程序员节·claude code
普通人64 小时前
uniapp模版JS
开发语言·javascript·小程序·uni-app·1024程序员节
Android系统攻城狮4 小时前
Linux FFmpeg深度解析之avformat_open_input调用流程与实战(一)
linux·运维·ffmpeg·车载音视频·ffmpeg音视频·音视频进阶手册
nike0good4 小时前
min-max 容斥
1024程序员节