《Linux基础知识-1》
《Linux基础知识-1》
1. 什么是 Linux?
1.1 Linux 的定义与历史
定义
Linux 是一个类 Unix 操作系统内核,由芬兰计算机科学家林纳斯·托瓦兹(Linus Torvalds)于 1991 年首次发布。作为一个开源项目,Linux 内核可以自由使用、修改和分发。通常,Linux 内核与 GNU 工具集、图形用户界面(如 GNOME、KDE)以及其他开源软件组合在一起,形成完整的操作系统,这些组合被称为 Linux 发行版(如 Ubuntu、Fedora、Debian 等)。
关键特点:
- 开源:任何人都可以查看、修改和分发源代码。
- 多用户、多任务:支持多个用户同时操作,能够同时运行多个任务。
- 稳定性与安全性:以其高稳定性和强大的安全性著称,广泛应用于服务器和嵌入式系统。
历史
- 1991 年:林纳斯·托瓦兹在赫尔辛基大学开始开发 Linux 内核,并在 Usenet 上发布了第一版(0.01 版本)的内核代码。当时,Linux 主要用于个人学习和研究。
- 1992 年:Linux 内核采用 GNU 通用公共许可证(GPL),允许自由修改和分发。这一举措吸引了大量开发者的参与,加速了 Linux 的发展。
- 1994 年:发布 Linux 1.0 版本,标志着 Linux 内核具备了基础的文件系统、网络支持和设备驱动功能。
- 1998 年:Red Hat 发布 Red Hat Linux,这是第一个商业化的 Linux 发行版之一,推动了 Linux 在企业中的应用。
- 2000 年代初期:Linux 在服务器市场取得重大突破,成为许多大型数据中心和互联网公司的首选操作系统。
- 2010 年代至今:Linux 广泛应用于云计算、物联网(IoT)、超级计算机、移动设备(Android 基于 Linux 内核)等领域,成为现代计算的基石之一。
历史小故事:
- 命名由来:最初,林纳斯将项目命名为 “Freax”(“Free”和“Unix”的结合),但最终因其朋友为其注册域名时选择了 “Linux”(Linus + Unix),这个名字被广泛接受。
- Linux 与 GNU:尽管 Linux 内核由林纳斯开发,但它通常与 GNU 项目的工具集结合使用,完整的操作系统应称为 “GNU/Linux”。GNU 提供了许多基础工具,如编译器、文本编辑器等,补充了 Linux 内核的功能。
1.2 Linux 的特点与优势
1. 开源与自由
Linux 完全开源,遵循 GNU 通用公共许可证(GPL),允许用户自由使用、修改和分发。用户可以根据需求定制操作系统,甚至嵌入到专用设备中。
实例:
- 定制嵌入式系统:许多嵌入式设备(如路由器、智能家居设备)使用定制化的 Linux 发行版,以满足特定的功能需求。
- 企业定制解决方案:大型企业如 IBM、Google 基于 Linux 开发专属的解决方案,优化性能和安全性。
2. 高度的可定制性
Linux 的模块化设计允许用户根据需要选择和配置系统组件,从而构建最适合特定用途的操作系统。
实例:
- Arch Linux:提供一个轻量化、从头开始构建的系统,用户可以选择所需的软件包,完全控制系统配置。
- Ubuntu:提供一个用户友好的桌面体验,预装了许多常用软件,适合一般用户使用。
3. 稳定性与高性能
Linux 以其卓越的稳定性和性能被广泛应用于服务器和高性能计算领域,能够长时间不间断运行而不会崩溃。
实例:
- 超级计算机:世界上排名前列的超级计算机大多运行 Linux,例如日本的 Fugaku 超级计算机。
- 互联网服务器:大多数互联网基础设施(如 Google、Facebook 的服务器)都使用 Linux,确保高可用性和快速响应。
4. 安全性
Linux 拥有强大的安全机制,包括用户权限管理、SELinux(安全增强型 Linux)、AppArmor 等,能够有效防止恶意攻击和未经授权的访问。
实例:
-
权限管理:通过
chmod
、chown
等命令精细控制文件和目录的访问权限,确保系统资源的安全。chmod 755 /path/to/file # 设置文件权限为所有者可读、写、执行,组和其他用户可读、执行 chown user:group file.txt # 更改文件所有者和所属组
-
安全工具:工具如
fail2ban
可以监控日志文件,自动阻止可疑的登录尝试,防止暴力破解攻击。
5. 广泛的硬件支持
Linux 支持各种硬件平台,从个人电脑到大型服务器、移动设备和嵌入式系统,几乎涵盖了所有类型的硬件。
实例:
- 多架构支持:支持 x86、ARM、PowerPC、MIPS 等多种处理器架构,适用于不同的设备和应用场景。
- 设备驱动丰富:Linux 内核包含了大量的设备驱动,确保各种硬件设备的兼容性和性能。
6. 社区支持与文档
Linux 拥有庞大的开源社区,全球开发者和用户共同维护和改进系统,提供了丰富的资源和支持。
实例:
- 在线论坛与问答平台:如 Stack Overflow、Ubuntu Forums、Reddit 的 r/linux 社区,用户可以在这些平台上寻求帮助和交流经验。
- 详尽的文档:许多 Linux 发行版提供了详细的官方文档,如 Arch Wiki、Ubuntu Documentation,帮助用户快速上手和解决问题。
1.3 Linux 与其他操作系统的比较
1. 与 Windows 的比较
特性 | Linux | Windows |
---|---|---|
源代码 | 开源,用户可自由修改和分发 | 闭源,用户无法访问源代码 |
成本 | 多数发行版免费 | 需要购买授权许可 |
定制性 | 高度可定制,适合各种用途 | 定制性较低,主要面向桌面用户 |
安全性 | 较高,病毒和恶意软件较少 | 较低,常成为恶意软件的目标 |
硬件支持 | 支持多种硬件平台,驱动丰富 | 主要支持 x86/x64 架构,驱动依赖厂商提供 |
用户界面 | 多种桌面环境(如 GNOME、KDE),灵活多样 | 统一的用户界面,易于使用但定制性有限 |
软件生态 | 丰富的开源软件,但部分商业软件支持不足 | 广泛的商业软件支持,特别是在办公和游戏领域 |
具体例子:
- 服务器应用:大多数企业服务器使用 Linux,如 Apache、Nginx 等网络服务器软件主要在 Linux 上运行,而 Windows 则主要在企业桌面和服务器环境中使用。
- 开发环境:许多开发者偏爱 Linux,因为其强大的命令行工具和开发环境,如 Git、Docker 等在 Linux 上运行更为高效。
2. 与 macOS 的比较
特性 | Linux | macOS |
---|---|---|
内核 | Linux 内核 | 基于 Unix 的 Darwin 内核 |
源代码 | 开源,用户可自由修改和分发 | 部分开源(Darwin),但大部分系统是闭源的 |
硬件支持 | 支持广泛的硬件平台 | 仅支持苹果自家的硬件设备 |
用户界面 | 多样化的桌面环境 | 统一且精美的用户界面 |
软件生态 | 丰富的开源软件,部分商业软件支持不足 | 广泛的商业软件支持,特别是在创意和设计领域 |
成本 | 多数发行版免费 | 需要购买苹果硬件和授权许可 |
定制性 | 高度可定制,适合各种用途 | 定制性较低,主要面向桌面用户 |
具体例子:
- 开发工具:虽然 macOS 也提供强大的开发工具(如 Xcode),但许多开源工具和框架在 Linux 上具有更好的兼容性和性能。
- 设计与创意:macOS 在图形设计、视频编辑和音乐制作领域拥有强大的软件支持,如 Adobe Creative Suite、Final Cut Pro 等,而这些软件在 Linux 上的支持较为有限。
1.4 开源社区与贡献
开源的力量
Linux 的成功离不开其背后的开源社区。开源社区由全球成千上万的开发者、用户和组织组成,他们共同维护、改进和推广 Linux 系统。开源的协作模式促进了创新和快速迭代,使 Linux 能够不断适应新的技术需求和应用场景。
关键优势:
- 协作开发:全球开发者可以同时参与项目,快速修复漏洞、添加新功能。
- 透明性:所有代码公开,确保了系统的透明性和可审计性,增强了安全性。
- 多样性:不同的开发团队和个人可以根据自己的需求创建各种不同的发行版,满足不同用户的需求。
实例:
- Debian 项目:由全球志愿者维护,强调自由软件和稳定性,是许多其他发行版(如 Ubuntu)的基础。
- Fedora 项目:由红帽赞助,注重最新技术和创新,推动了许多开源技术的发展。
如何参与开源社区?
1. 贡献代码
-
提交补丁:修复 bug 或添加新功能,将补丁提交到项目的代码库。
git clone https://github.com/torvalds/linux.git # 修改代码 git commit -m "Fix issue #123: 修复了..." git push origin your-branch
-
参与开发:加入开发团队,参与内核或其他开源项目的开发工作。
2. 报告与修复 Bug
-
提交 Bug 报告:在项目的 Bug 跟踪系统中提交详细的 Bug 报告,帮助开发者定位问题。
示例:
- 在 GitHub 上的 Issue 页面提交 Bug 报告,描述问题的重现步骤、系统环境等信息。
-
修复 Bug:找到 Bug 的根源并提交修复补丁,提高系统的稳定性和安全性。
3. 文档编写与翻译
-
撰写文档:编写或改进项目的用户手册、开发文档,帮助用户更好地理解和使用系统。
示例:
- 在 Arch Wiki 上撰写详细的安装指南或故障排除步骤。
-
翻译文档:将文档翻译成其他语言,扩大项目的国际影响力。
示例:
- 将 Ubuntu 的官方文档翻译成中文,帮助更多中文用户使用 Linux。
4. 提供支持与帮助
-
在线社区:在论坛、邮件列表、聊天室中回答新手的问题,分享经验和技巧。
示例:
- 在 Stack Overflow 上回答有关 Linux 的问题,或者在 IRC 频道中提供实时帮助。
-
组织活动:举办本地的 Linux 用户组(LUG)会议、黑客马拉松、培训班等,促进社区交流和知识分享。
示例:
- 组织一个“Linux 入门工作坊”,帮助新手学习基本命令和系统管理技巧。
成功的社区贡献案例
- Linus Torvalds:作为 Linux 内核的创始人,Linus 通过持续的开发和社区管理,使 Linux 内核不断进步和适应新的需求。
- Richard Stallman 和 GNU 项目:虽然 GNU 项目本身与 Linux 内核是分开的,但它提供了许多关键的工具和库,促进了 Linux 生态系统的发展。
- Mark Shuttleworth 和 Ubuntu:通过创建 Ubuntu,Mark Shuttleworth 将 Linux 推向更广泛的桌面用户,提供了一个用户友好的发行版,极大地提升了 Linux 的普及度。
如何开始贡献
- 选择项目:根据自己的兴趣和技能选择一个开源项目,如 Linux 内核、某个桌面环境、应用程序等。
- 了解项目:阅读项目的文档、贡献指南,熟悉代码库和开发流程。
- 参与讨论:加入项目的邮件列表、论坛或聊天频道,了解当前的开发动态和需求。
- 开始小规模贡献:从修复小 Bug、改进文档或回答社区问题开始,逐步提升贡献的深度和广度。
- 持续参与:与其他贡献者合作,参与更复杂的开发任务,成为项目的活跃成员。
2. Linux 基本命令
当然可以!为了更好地理解各个命令的使用,我们将假设一个具体的文件目录结构,并在此基础上展示每个命令的多种用法及其效果。以下是详细的 2.1 文件与目录操作 章节,包括多个命令的详细说明和丰富的示例。
2.1 文件与目录操作
假设我们的当前工作目录为 /home/user
,其目录结构如下:
/home/user
├── Documents
│ ├── report.docx
│ └── data.csv
├── Downloads
│ ├── movie.mkv
│ └── song.mp3
├── Projects
│ ├── project1
│ │ ├── main.py
│ │ └── README.md
│ └── project2
│ ├── index.html
│ └── styles.css
├── .hidden_file
└── notes.txt
2.1.1 ls
- 列出目录内容
ls
命令用于列出指定目录中的文件和子目录。以下是多个使用示例:
示例 1:列出当前目录的所有文件和目录
ls
输出:
Documents Downloads Projects notes.txt .hidden_file
示例 2:以长格式列出文件,显示详细信息
ls -l
输出:
total 20
drwxr-xr-x 2 user user 4096 Apr 10 10:00 Documents
drwxr-xr-x 2 user user 4096 Apr 10 10:05 Downloads
drwxr-xr-x 4 user user 4096 Apr 10 10:10 Projects
-rw-r--r-- 1 user user 45 Apr 10 10:15 notes.txt
-rw-r--r-- 1 user user 0 Apr 10 10:20 .hidden_file
示例 3:列出所有文件,包括隐藏文件
ls -a
输出:
. .. Documents Downloads Projects notes.txt .hidden_file
示例 4:以人类可读的格式显示文件大小
ls -lh
输出:
total 20K
drwxr-xr-x 2 user user 4.0K Apr 10 10:00 Documents
drwxr-xr-x 2 user user 4.0K Apr 10 10:05 Downloads
drwxr-xr-x 4 user user 4.0K Apr 10 10:10 Projects
-rw-r--r-- 1 user user 45 Apr 10 10:15 notes.txt
-rw-r--r-- 1 user user 0 Apr 10 10:20 .hidden_file
示例 5:递归列出所有子目录的内容
ls -R
输出:
.:
Documents Downloads Projects notes.txt .hidden_file./Documents:
report.docx data.csv./Downloads:
movie.mkv song.mp3./Projects:
project1 project2./Projects/project1:
main.py README.md./Projects/project2:
index.html styles.css
示例 6:按修改时间排序,最近修改的文件在前
ls -lt
输出:
total 20
-rw-r--r-- 1 user user 0 Apr 10 10:20 .hidden_file
-rw-r--r-- 1 user user 45 Apr 10 10:15 notes.txt
drwxr-xr-x 4 user user 4096 Apr 10 10:10 Projects
drwxr-xr-x 2 user user 4096 Apr 10 10:05 Downloads
drwxr-xr-x 2 user user 4096 Apr 10 10:00 Documents
示例 7:结合多个选项使用
ls -alh
输出:
total 20K
drwxr-xr-x 5 user user 4.0K Apr 10 10:10 .
drwxr-xr-x 3 root root 4.0K Apr 9 09:00 ..
drwxr-xr-x 2 user user 4.0K Apr 10 10:00 Documents
drwxr-xr-x 2 user user 4.0K Apr 10 10:05 Downloads
drwxr-xr-x 4 user user 4.0K Apr 10 10:10 Projects
-rw-r--r-- 1 user user 45 Apr 10 10:15 notes.txt
-rw-r--r-- 1 user user 0 Apr 10 10:20 .hidden_file
2.1.2 cd
- 切换目录
cd
命令用于在文件系统中切换当前工作目录。以下是多个使用示例:
示例 1:切换到 Documents
目录
cd Documents
说明: 当前工作目录切换到 /home/user/Documents
示例 2:切换到上一级目录
cd ..
说明: 当前工作目录切换回 /home/user
示例 3:切换到用户的主目录
cd ~
或
cd
说明: 将当前工作目录切换到 /home/user
示例 4:切换到上一次所在的目录
cd -
说明: 如果之前在 /home/user/Documents
,则切换回该目录并显示路径。
示例 5:使用相对路径切换目录
cd Projects/project1
说明: 当前工作目录切换到 /home/user/Projects/project1
示例 6:切换到绝对路径目录
cd /home/user/Downloads
说明: 当前工作目录切换到 /home/user/Downloads
常见问题与解决方法
-
目标目录不存在
cd /home/user/nonexistent
错误信息:
bash: cd: /home/user/nonexistent: No such file or directory
解决方法: 确认目录路径是否正确,使用
ls
命令检查目录是否存在。 -
权限不足
cd /root
错误信息:
bash: cd: /root: Permission denied
解决方法: 确保你有权限访问该目录,可能需要使用
sudo
或联系系统管理员。
2.1.3 pwd
- 显示当前路径
pwd
命令用于显示当前工作目录的绝对路径。以下是多个使用示例:
示例 1:显示当前工作目录
pwd
输出:
/home/user/Projects/project1
示例 2:在脚本中使用 pwd
#!/bin/bash
CURRENT_DIR=$(pwd)
echo "当前工作目录是:$CURRENT_DIR"
执行脚本 show_dir.sh
的输出:
当前工作目录是:/home/user/Projects/project1
示例 3:结合其他命令使用
echo "你现在位于 $(pwd)"
输出:
你现在位于 /home/user/Projects/project1
2.1.4 mkdir
- 创建目录
mkdir
命令用于创建新的目录。以下是多个使用示例:
示例 1:创建单级目录
mkdir new_folder
说明: 在当前目录 /home/user/Projects/project1
下创建一个名为 new_folder
的目录。
示例 2:递归创建多级目录
mkdir -p ../project3/src/utils
说明: 从当前目录 /home/user/Projects/project1
,创建 project3/src/utils
目录。如果 project3
或 src
目录不存在,将一并创建。
示例 3:显示详细的创建过程
mkdir -v example_dir
输出:
mkdir: created directory 'example_dir'
示例 4:设置新目录的权限模式
mkdir -m 755 secure_folder
说明: 创建 secure_folder
目录,并设置其权限为 755
(所有者具有读、写、执行权限,组和其他用户具有读、执行权限)。
示例 5:结合多个选项使用
mkdir -pv ../project4/{bin,lib,include}
说明: 使用 -p
选项递归创建 project4
目录及其子目录 bin
, lib
, include
,并使用 -v
显示详细创建过程。
输出:
mkdir: created directory '../project4'
mkdir: created directory '../project4/bin'
mkdir: created directory '../project4/lib'
mkdir: created directory '../project4/include'
错误处理示例
-
目录已存在
mkdir existing_directory
错误信息:
mkdir: cannot create directory ‘existing_directory’: File exists
解决方法: 使用
-p
选项避免错误提示,或者确认是否需要覆盖现有目录。mkdir -p existing_directory
2.1.5 rm
- 删除文件或目录
rm
命令用于删除文件或目录。以下是多个使用示例:
示例 1:删除单个文件
rm notes.txt
说明: 删除当前目录 /home/user/Projects/project1
下的 notes.txt
文件。
示例 2:删除多个文件
rm main.py README.md
说明: 删除当前目录下的 main.py
和 README.md
文件。
示例 3:递归删除目录及其内容
rm -r project2
说明: 删除 project2
目录及其所有子目录和文件。
示例 4:强制删除文件,不提示确认
rm -f .hidden_file
说明: 强制删除 .hidden_file
文件,即使文件是只读的,也不会提示确认。
示例 5:交互式删除,逐个提示确认
rm -i report.docx
说明: 在删除 report.docx
文件前,会提示用户确认。
输出:
rm: remove regular empty file 'report.docx'? y
示例 6:结合多个选项使用
rm -rf ../backup/project1_backup
说明: 递归且强制删除指定目录 project1_backup
及其所有内容,不会提示任何确认。
示例 7:显示删除过程
rm -rv project1/new_folder
输出:
removed 'project1/new_folder/file1.txt'
removed 'project1/new_folder/file2.txt'
removed directory 'project1/new_folder'
注意事项与安全建议
-
慎用
rm -rf
命令:该命令会递归且强制删除指定目录及其所有内容,误用可能导致重要数据丢失。rm -rf /home/user/important_directory
-
使用
-i
选项进行交互式删除,尤其是在删除多个文件或目录时,减少误删的风险。rm -ri project1/old_versions
-
备份重要数据,以防误删后需要恢复。
2.1.6 cp
- 复制文件或目录
cp
命令用于复制文件或目录。以下是多个使用示例:
示例 1:复制单个文件
cp data.csv data_backup.csv
说明: 将 data.csv
文件复制为 data_backup.csv
。
示例 2:复制文件到另一个目录
cp report.docx ../Documents/
说明: 将 report.docx
文件复制到 /home/user/Documents/
目录中。
示例 3:递归复制整个目录
cp -r project1 /home/user/Projects_backup/
说明: 递归复制 project1
目录及其所有子目录和文件到 /home/user/Projects_backup/
。
示例 4:保持文件属性进行复制
cp -p main.py main_backup.py
说明: 复制 main.py
为 main_backup.py
,同时保持文件的权限、所有者和时间戳。
示例 5:交互式复制,覆盖前提示确认
cp -i styles.css ../Documents/
说明: 如果目标目录 /home/user/Documents/
中已存在 styles.css
,会提示用户确认是否覆盖。
输出:
cp: overwrite '../Documents/styles.css'? y
示例 6:仅在源文件较新或目标文件不存在时复制
cp -u ../Documents/report.docx .
说明: 仅当源文件 ../Documents/report.docx
比当前目录中的 report.docx
新,或者当前目录中不存在该文件时,才进行复制。
示例 7:显示复制过程
cp -v movie.mkv /home/user/Videos/
输出:
‘movie.mkv’ -> ‘/home/user/Videos/movie.mkv’
示例 8:结合多个选项使用
cp -avr project1 /home/user/Projects_backup/
说明: 递归复制 project1
目录及其内容,保持文件属性,并显示详细的复制过程。
输出:
‘project1/main.py’ -> ‘/home/user/Projects_backup/project1/main.py’
‘project1/README.md’ -> ‘/home/user/Projects_backup/project1/README.md’
高级应用
-
复制并保持符号链接
cp -a /home/user/Projects/project1 /home/user/Projects_backup/
说明: 使用
-a
选项(等同于-dR --preserve=all
),递归复制目录并保持所有文件属性和符号链接。 -
复制多个文件到一个目录
cp *.txt ../Documents/
说明: 将当前目录下所有以
.txt
结尾的文件复制到/home/user/Documents/
目录中。
注意事项
-
覆盖文件时的风险:在没有使用
-i
选项的情况下,cp
命令会直接覆盖目标文件,可能导致数据丢失。建议在不确定时使用-i
选项。cp -i project1/main.py /home/user/Projects_backup/
-
权限问题:确保有足够的权限读取源文件和写入目标目录。
2.1.7 mv
- 移动或重命名文件
mv
命令用于移动文件或目录,或重命名文件或目录。以下是多个使用示例:
示例 1:移动文件到另一个目录
mv main.py /home/user/Documents/
说明: 将 main.py
文件从 /home/user/Projects/project1
移动到 /home/user/Documents/
目录中。
示例 2:重命名文件
mv README.md README_old.md
说明: 将 README.md
文件重命名为 README_old.md
。
示例 3:移动并重命名目录
mv project1 project_alpha
说明: 将 project1
目录重命名为 project_alpha
。
示例 4:交互式移动,覆盖前提示确认
mv -i styles.css /home/user/Documents/
说明: 如果目标目录 /home/user/Documents/
中已存在 styles.css
,会提示用户确认是否覆盖。
输出:
mv: overwrite '/home/user/Documents/styles.css'? y
示例 5:显示移动过程
mv -v song.mp3 /home/user/Music/
输出:
‘song.mp3’ -> ‘/home/user/Music/song.mp3’
示例 6:不覆盖现有文件,避免数据丢失
mv -n report.docx /home/user/Documents/
说明: 如果目标目录中已存在 report.docx
,则不会进行移动操作。
示例 7:批量移动文件
mv *.csv ../Documents/data_files/
说明: 将当前目录下所有以 .csv
结尾的文件移动到 /home/user/Documents/data_files/
目录中。
示例 8:结合多个选项使用
mv -v project_alpha /home/user/Archives/
说明: 将 project_alpha
目录移动到 /home/user/Archives/
目录中,并显示详细的移动过程。
输出:
‘project_alpha’ -> ‘/home/user/Archives/project_alpha’
高级应用
-
移动并保留文件属性
mv -p old_file.txt new_file.txt
说明: 将
old_file.txt
文件移动并重命名为new_file.txt
,同时保留文件的权限和时间戳。
注意事项
-
覆盖文件时的风险:在没有使用
-i
或-n
选项的情况下,mv
命令会直接覆盖目标文件,可能导致数据丢失。建议在不确定时使用-i
或-n
选项。mv -i project_alpha /home/user/Archives/
-
权限问题:确保有足够的权限读取源文件和写入目标目录。
2.2 文件权限与访问控制
在多用户操作系统中,文件权限与访问控制机制至关重要,它们确保了系统的安全性和稳定性。通过合理配置文件权限,系统管理员可以控制用户对文件和目录的访问权限,防止未授权的操作。以下将详细介绍文件权限的基础知识及相关命令的使用。
2.2.1 文件权限基础
权限类型(读、写、执行)
在Unix/Linux系统中,文件权限主要分为三种类型:
- 读(Read, r):允许查看文件内容或列出目录内容。
- 写(Write, w):允许修改文件内容或在目录中添加、删除文件。
- 执行(Execute, x):允许执行文件(如果是可执行程序)或进入目录。
权限的表示方式(如 rwxr-xr--
)
文件权限通常以十个字符的形式显示,例如 -rwxr-xr--
。其结构如下:
-
第一个字符:表示文件类型(如
-
表示普通文件,d
表示目录,l
表示符号链接等)。 -
接下来的九个字符
:分为三组,每组三个字符,分别表示所有者、所属组和其他用户的权限。
- 第一组(
rwx
):所有者的权限。 - 第二组(
r-x
):所属组的权限。 - 第三组(
r--
):其他用户的权限。
- 第一组(
例如,-rwxr-xr--
表示:
- 所有者有读、写、执行权限。
- 所属组有读、执行权限。
- 其他用户只有读权限。
所有者、组、其他用户的概念
- 所有者(Owner):文件或目录的创建者,通常具有最高权限。
- 所属组(Group):文件或目录所属的用户组,组内成员共享相同的权限。
- 其他用户(Others):系统中除所有者和所属组成员以外的所有用户。
2.2.2 chmod
- 改变文件权限
chmod
命令用于修改文件或目录的权限。
基本用法
chmod [选项] 权限 文件/目录
例如,给予文件 example.sh
所有者读、写、执行权限,所属组和其他用户读、执行权限:
chmod rwxr-xr-x example.sh
数字模式与符号模式
chmod
支持两种模式:数字模式和符号模式。
数字模式使用三位八进制数,每位代表所有者、所属组和其他用户的权限。
数字 | 权限 |
---|---|
4 | 读 ® |
2 | 写 (w) |
1 | 执行 (x) |
0 | 无权限 |
权限值通过将相应数字相加得到。例如,rwx
= 4+2+1 = 7,r-x
= 4+0+1 = 5,r--
= 4+0+0 = 4。
示例:
chmod 755 example.sh
这等同于 rwxr-xr-x
。
符号模式使用字符来添加、移除或设置权限。
u
:所有者g
:所属组o
:其他用户a
:所有用户(u、g、o)
操作符:
+
:添加权限-
:移除权限=
:设置权限
示例:
chmod u+x example.sh # 为所有者添加执行权限
chmod go-r example.sh # 移除所属组和其他用户的读权限
chmod a=r example.sh # 设置所有用户仅有读权限
递归修改权限(-R
选项)
-R
选项用于递归地修改目录及其子目录和文件的权限。
示例:
chmod -R 755 /path/to/directory
此命令将 /path/to/directory
及其所有子目录和文件的权限设置为 755
。
2.2.3 chown
- 改变文件所有者
chown
命令用于更改文件或目录的所有者和所属组。
基本用法
chown [选项