当前位置: 首页 > news >正文

《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 等,能够有效防止恶意攻击和未经授权的访问。

实例:

  • 权限管理:通过 chmodchown 等命令精细控制文件和目录的访问权限,确保系统资源的安全。

    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 的普及度。
如何开始贡献
  1. 选择项目:根据自己的兴趣和技能选择一个开源项目,如 Linux 内核、某个桌面环境、应用程序等。
  2. 了解项目:阅读项目的文档、贡献指南,熟悉代码库和开发流程。
  3. 参与讨论:加入项目的邮件列表、论坛或聊天频道,了解当前的开发动态和需求。
  4. 开始小规模贡献:从修复小 Bug、改进文档或回答社区问题开始,逐步提升贡献的深度和广度。
  5. 持续参与:与其他贡献者合作,参与更复杂的开发任务,成为项目的活跃成员。

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 目录。如果 project3src 目录不存在,将一并创建。

示例 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.pyREADME.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.pymain_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--。其结构如下:

  1. 第一个字符:表示文件类型(如 - 表示普通文件,d 表示目录,l 表示符号链接等)。

  2. 接下来的九个字符

    :分为三组,每组三个字符,分别表示所有者、所属组和其他用户的权限。

    • 第一组(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 [选项
http://www.dtcms.com/a/328442.html

相关文章:

  • docker-compose搭建 redis 集群
  • 阿里巴巴开源多模态大模型-Qwen-VL系列论文精读(一)
  • VBS 时间函数
  • 基于 libwebsockets 库实现的 WebSocket 服务器类
  • Shader warning in ‘Universal Render Pipeline/Particles/Simple Lit‘
  • provide()函数和inject()函数
  • 【UEFI系列】Super IO
  • VUE+SPRINGBOOT从0-1打造前后端-前后台系统-语音评测
  • 嵌入式学习(day25)文件IO:open read/write close
  • VGG改进(2):基于Local Attention的模型优化
  • 书籍数组中未出现的最小正整数(8)0812
  • 《飞算JavaAI:新一代智能编码引擎,革新Java研发范式》
  • 跑腿平台开发实战:同城O2O系统源码的模块化与可扩展性方案
  • 每日一练:将一个数字表示成幂的和的方案数;动态规划、深度优先搜索
  • 【Altium designer】快速建立原理图工程的步骤
  • 2025开放计算技术大会|开源开放推动系统创新 加速AIDC全球协作
  • 过拟合、欠拟合与方差/偏差的关系
  • Langchain结合deepseek:框架+模型的AI测试实践
  • 小白学习pid环控制-实现篇
  • 杰里平台7083G 如何支持4M flash
  • 【oracle闪回查询】记录字段短时间被修改的记录
  • MyBatis-Plus核心内容
  • AAC音频编码器技术详解:原理、应用与发展
  • Java数组排序
  • 嵌入式系统分层开发:架构模式与工程实践(四)(状态机的应用和面向对象的编程)
  • redis认识缓存击穿
  • 特征工程--机器学习
  • [ 数据结构 ] 时间和空间复杂度
  • Linux中Apache与Web之虚拟主机配置指南
  • 栈和队列:数据结构中的基础与应用​