linux的用户,用户组,文件,文件夹以及其所有权机制

1. 用户 (Users)

  • 概念: 用户是 Linux 系统中访问和使用资源的实体。每个用户都有一个唯一的用户名和用户 ID (UID)。
  • 类型:
    • 超级用户 (root): 拥有系统最高权限,可以执行任何操作。UID 通常为 0。
    • 普通用户: 权限受限,只能访问和修改自己拥有的文件和目录,以及系统管理员授权的资源。
    • 系统用户: 用于运行系统服务,通常没有登录权限。
  • 用户信息存储:
    • /etc/passwd:存储用户的基本信息,如用户名、UID、GID (组 ID)、家目录、登录 Shell 等。
    • /etc/shadow:存储用户的加密密码。只有 root 用户才能读取此文件。
  • 常用命令:
    • whoami:显示当前登录的用户名。
    • id:显示用户的 UID、GID 和所属组。
    • useradd <username>:创建新用户 (需要 root 权限)。
    • passwd <username>:设置或更改用户密码 (需要 root 权限或用户自己的密码)。
    • userdel <username>:删除用户 (需要 root 权限)。

2. 用户组 (Groups)

  • 概念: 用户组是将多个用户组织在一起的机制。每个用户组都有一个唯一的组名和组 ID (GID)。
  • 作用: 方便管理权限,允许一组用户共享对某些文件和目录的访问权限。
  • 用户与用户组的关系:
    • 每个用户都属于一个主组 (primary group),在 /etc/passwd 中指定。
    • 用户可以同时属于多个辅助组 (secondary groups)。
  • 组信息存储:
    • /etc/group:存储用户组的基本信息,如组名、GID、组成员列表等。
    • /etc/gshadow:存储用户组的加密密码 (通常为空)。只有 root 用户才能读取此文件。
  • 常用命令:
    • groups:显示当前用户所属的所有组。
    • groupadd <groupname>:创建新用户组 (需要 root 权限)。
    • groupdel <groupname>:删除用户组 (需要 root 权限)。
    • usermod -aG <groupname> <username>:将用户添加到辅助组 (需要 root 权限)。
    • groupmod -n <newgroupname> <oldgroupname>:修改组名 (需要 root 权限)。

3. 文件和文件夹 (Files and Directories)

  • 概念: 文件是存储数据的基本单元,文件夹 (目录) 用于组织和管理文件。
  • 文件类型:
    • 普通文件 (regular file):包含文本、程序、图像等数据。
    • 目录 (directory):包含其他文件和目录。
    • 符号链接 (symbolic link):指向另一个文件或目录的快捷方式。
    • 字符设备文件 (character device file):代表字符设备,如终端。
    • 块设备文件 (block device file):代表块设备,如硬盘。
    • 命名管道 (named pipe):用于进程间通信。
    • 套接字 (socket):用于网络通信。
  • 文件系统: Linux 使用树状结构的文件系统,根目录为 /

4. 所有权机制 (Ownership)

  • 概念: 每个文件和目录都有一个所有者 (owner) 和一个所属组 (group)。
  • 作用: 控制用户和用户组对文件和目录的访问权限。
  • 所有者 (Owner): 通常是创建文件的用户。
  • 所属组 (Group): 可以是一组用户,允许他们共享对文件的访问权限。
  • 权限 (Permissions):
    • 读 ®: 允许读取文件内容或列出目录内容。
    • 写 (w): 允许修改文件内容或在目录中创建、删除文件。
    • 执行 (x): 允许执行文件 (如果是可执行文件) 或进入目录 (如果是目录)。
  • 权限表示:
    • 符号表示: 使用 rwx 表示权限,- 表示没有权限。例如,rwxr-xr-- 表示所有者有读、写和执行权限,所属组有读和执行权限,其他用户只有读权限。
    • 数字表示: 使用八进制数字表示权限,r 为 4,w 为 2,x 为 1。例如,754 表示所有者有读、写和执行权限 (4+2+1=7),所属组有读和执行权限 (4+1=5),其他用户只有读权限 (4)。
  • 查看文件权限: 使用 ls -l 命令可以查看文件的详细信息,包括文件类型、权限、所有者、所属组、大小、修改时间等。
  • 修改文件权限:
    • chown <user>:<group> <file>:更改文件或目录的所有者和所属组 (需要 root 权限)。
    • chmod <permissions> <file>:更改文件或目录的权限 (需要 root 权限或文件所有者)。

权限的详细解释:

权限文件目录
r允许读取文件内容允许列出目录中的文件和子目录
w允许修改文件内容允许在目录中创建、删除、重命名文件和子目录
x允许执行文件 (如果是可执行文件)允许进入目录

示例:

假设有一个文件 test.txt,其权限为 rwxr-xr--,所有者为 alice,所属组为 developers

  • alice (所有者) 可以读取、写入和执行 test.txt (尽管执行对于文本文件没有意义)。
  • developers 组的成员可以读取和执行 test.txt
  • 其他用户只能读取 test.txt

总结:

Linux 的用户、用户组和所有权机制提供了一种灵活而强大的方式来管理文件和目录的访问权限。理解这些概念对于维护系统的安全性和稳定性至关重要。通过 chownchmod 命令,系统管理员可以精确地控制用户和用户组对系统资源的访问权限。

希望这个更详细的解释能够帮助你更好地理解 Linux 的用户、用户组和所有权机制。 如果你有任何其他问题,请随时提出。

一个问题:

> sudo chmod 775 ./unitree_robotics
> ll
total 72K
drwxrwxr-x 5 root     root     4.0K 1225 11:13 baidunetdisk
drwxr-xr-x 3 root     root     4.0K 28 09:26 bytedance
drwx--x--x 4 root     root     4.0K 1219  2024 containerd
drwxr-xr-x 3 root     root     4.0K 522  2024 google
drwxr-xr-x 3 root     root     4.0K 119  2024 kingsoft
drwxr-xr-x 3 root     root     4.0K 115  2024 microsoft
drwxr-xr-x 4 root     root     4.0K 523  2024 nvidia
drwxrwxr-x 4 root     root     4.0K 328 19:28 Obsidian
drwxr-xr-x 4 root     root     4.0K 619 22:05 QQ
drwxr-xr-x 4 root     root     4.0K 928  2024 RayLink
drwxr-xr-x 3 root     root     4.0K 425 14:21 ros
drwxr-xr-x 3 root     root     4.0K 71  2024 sogoupinyin
drwxr-xr-x 5 root     root     4.0K 525  2024 todesk
drwxrwxr-x 2 root     root     4.0K 620 13:41 unitree_robotics
drwxrwxr-x 7 root     root     4.0K 412 08:59 vofa+
drwxr-xr-x 8 root     root     4.0K 219 22:18 wemeet
drwxr-xr-x 4 root     root     4.0K 1111  2024 Xmind
drwxrwxr-x 7 tipriest tipriest 4.0K 616 15:45 zotero
> cd ./unitree_robotics
> git clone https://github.com/unitreerobotics/unitree_sdk2.git
fatal: could not create work tree dir 'unitree_sdk2': Permission denied

这里为什么还是不行呢?

解释

问题在于你尝试在 unitree_robotics 目录下克隆 unitree_sdk2,但你当前的用户 (tipriest) 对 unitree_robotics 目录没有足够的权限来创建新的子目录。

虽然你使用 sudo chmod 775 ./unitree_robotics 修改了权限,但这个命令只修改了 unitree_robotics 目录本身的权限,而没有修改其所有者。 unitree_robotics 目录的所有者仍然是 root,而你当前的用户是 tipriest

解决方案:

  1. 更改 unitree_robotics 目录的所有者:

    使用 chown 命令将 unitree_robotics 目录的所有者更改为你的用户:

    sudo chown -R tipriest:tipriest ./unitree_robotics
    
    • sudo: 以 root 权限执行命令。
    • chown: 更改文件或目录的所有者。
    • -R: 递归地更改目录及其所有子文件和子目录的所有者。
    • tipriest:tipriest: 将所有者和组都更改为 tipriest。 如果你的用户组不是 tipriest,请替换为正确的组名。
    • ./unitree_robotics: 要更改所有者的目录。
  2. 再次尝试克隆:

    在执行 chown 命令后,再次尝试克隆仓库:

    cd ./unitree_robotics
    git clone https://github.com/unitreerobotics/unitree_sdk2.git
    

解释:

  • chmod 775 ./unitree_robotics 允许所有者 (root) 读、写和执行,允许组用户读和执行,允许其他用户读和执行。 虽然组用户有写权限,但由于目录的所有者是 root,而你当前的用户 tipriest 不属于 root 组,所以你仍然无法在其中创建新的目录。
  • chown tipriest:tipriest ./unitree_roboticsunitree_robotics 目录的所有者更改为 tipriest,这样你就可以在该目录下创建新的文件和目录。

总结:

权限问题通常涉及文件/目录的所有者、所属组和权限位。 chmod 用于修改权限位,而 chown 用于修改所有者和所属组。 确保你的用户对要操作的目录具有足够的权限,才能避免 “Permission denied” 错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值