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)。
- 每个用户都属于一个主组 (primary group),在
- 组信息存储:
/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 的用户、用户组和所有权机制提供了一种灵活而强大的方式来管理文件和目录的访问权限。理解这些概念对于维护系统的安全性和稳定性至关重要。通过 chown
和 chmod
命令,系统管理员可以精确地控制用户和用户组对系统资源的访问权限。
希望这个更详细的解释能够帮助你更好地理解 Linux 的用户、用户组和所有权机制。 如果你有任何其他问题,请随时提出。
一个问题:
> sudo chmod 775 ./unitree_robotics
> ll
total 72K
drwxrwxr-x 5 root root 4.0K 12月 25 11:13 baidunetdisk
drwxr-xr-x 3 root root 4.0K 2月 8 09:26 bytedance
drwx--x--x 4 root root 4.0K 12月 19 2024 containerd
drwxr-xr-x 3 root root 4.0K 5月 22 2024 google
drwxr-xr-x 3 root root 4.0K 11月 9 2024 kingsoft
drwxr-xr-x 3 root root 4.0K 11月 5 2024 microsoft
drwxr-xr-x 4 root root 4.0K 5月 23 2024 nvidia
drwxrwxr-x 4 root root 4.0K 3月 28 19:28 Obsidian
drwxr-xr-x 4 root root 4.0K 6月 19 22:05 QQ
drwxr-xr-x 4 root root 4.0K 9月 28 2024 RayLink
drwxr-xr-x 3 root root 4.0K 4月 25 14:21 ros
drwxr-xr-x 3 root root 4.0K 7月 1 2024 sogoupinyin
drwxr-xr-x 5 root root 4.0K 5月 25 2024 todesk
drwxrwxr-x 2 root root 4.0K 6月 20 13:41 unitree_robotics
drwxrwxr-x 7 root root 4.0K 4月 12 08:59 vofa+
drwxr-xr-x 8 root root 4.0K 2月 19 22:18 wemeet
drwxr-xr-x 4 root root 4.0K 11月 11 2024 Xmind
drwxrwxr-x 7 tipriest tipriest 4.0K 6月 16 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
。
解决方案:
-
更改
unitree_robotics
目录的所有者:使用
chown
命令将unitree_robotics
目录的所有者更改为你的用户:sudo chown -R tipriest:tipriest ./unitree_robotics
sudo
: 以 root 权限执行命令。chown
: 更改文件或目录的所有者。-R
: 递归地更改目录及其所有子文件和子目录的所有者。tipriest:tipriest
: 将所有者和组都更改为tipriest
。 如果你的用户组不是tipriest
,请替换为正确的组名。./unitree_robotics
: 要更改所有者的目录。
-
再次尝试克隆:
在执行
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_robotics
将unitree_robotics
目录的所有者更改为tipriest
,这样你就可以在该目录下创建新的文件和目录。
总结:
权限问题通常涉及文件/目录的所有者、所属组和权限位。 chmod
用于修改权限位,而 chown
用于修改所有者和所属组。 确保你的用户对要操作的目录具有足够的权限,才能避免 “Permission denied” 错误。