学习目标

  • 理解本节涉及的核心主题:Linux 基本命令、文件与目录操作、cp - 复制文件或目录、mv - 移动或重命名文件。
  • 掌握重点命令或工具:cpmvchmodchownchgrpcat
  • 能够结合示例完成常见操作,并理解关键参数、使用场景与结果差异。
  • 能够识别本节相关的常见风险、易错点或排查思路。

学习重点

  • 主题范围:Linux 基本命令、文件与目录操作、cp - 复制文件或目录、mv - 移动或重命名文件、文件权限与访问控制、文件权限基础
  • 重点命令:cpmvchmodchownchgrpcat
  • 学习重点:命令用途、关键参数、典型场景、与相近命令的区别
  • 复习方式:先理解场景,再动手练习,最后对照结果检查

Linux 基本命令

文件与目录操作

cp - 复制文件或目录

cp 命令用于复制文件或目录。以下是多个使用示例:

示例:复制单个文件
cp data.csv data_backup.csv

说明:data.csv 文件复制为 data_backup.csv

示例:复制文件到另一个目录
cp report.docx ../Documents/

说明:report.docx 文件复制到 /home/user/Documents/ 目录中。

示例:递归复制整个目录
cp -r project1 /home/user/Projects_backup/

说明: 递归复制 project1 目录及其所有子目录和文件到 /home/user/Projects_backup/

示例:保持文件属性进行复制
cp -p main.py main_backup.py

说明: 复制 main.pymain_backup.py,同时保持文件的权限、所有者和时间戳。

示例:交互式复制,覆盖前提示确认
cp -i styles.css ../Documents/

说明: 如果目标目录 /home/user/Documents/ 中已存在 styles.css,会提示用户确认是否覆盖。

输出:

cp: overwrite '../Documents/styles.css'? y
示例:仅在源文件较新或目标文件不存在时复制
cp -u ../Documents/report.docx .

说明: 仅当源文件 ../Documents/report.docx 比当前目录中的 report.docx 新,或者当前目录中不存在该文件时,才进行复制。

示例:显示复制过程
cp -v movie.mkv /home/user/Videos/

输出:

‘movie.mkv’ -> ‘/home/user/Videos/movie.mkv’
示例:结合多个选项使用
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/
    
  • 权限问题:确保有足够的权限读取源文件和写入目标目录。

mv - 移动或重命名文件

mv 命令用于移动文件或目录,或重命名文件或目录。以下是多个使用示例:

示例:移动文件到另一个目录
mv main.py /home/user/Documents/

说明:main.py 文件从 /home/user/Projects/project1 移动到 /home/user/Documents/ 目录中。

示例:重命名文件
mv README.md README_old.md

说明:README.md 文件重命名为 README_old.md

示例:移动并重命名目录
mv project1 project_alpha

说明:project1 目录重命名为 project_alpha

示例:交互式移动,覆盖前提示确认
mv -i styles.css /home/user/Documents/

说明: 如果目标目录 /home/user/Documents/ 中已存在 styles.css,会提示用户确认是否覆盖。

输出:

mv: overwrite '/home/user/Documents/styles.css'? y
示例:显示移动过程
mv -v song.mp3 /home/user/Music/

输出:

‘song.mp3’ -> ‘/home/user/Music/song.mp3’
示例:不覆盖现有文件,避免数据丢失
mv -n report.docx /home/user/Documents/

说明: 如果目标目录中已存在 report.docx,则不会进行移动操作。

示例:批量移动文件
mv *.csv ../Documents/data_files/

说明: 将当前目录下所有以 .csv 结尾的文件移动到 /home/user/Documents/data_files/ 目录中。

示例:结合多个选项使用
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/
    
  • 权限问题:确保有足够的权限读取源文件和写入目标目录。

文件权限与访问控制

在多用户操作系统中,文件权限与访问控制机制至关重要,它们确保了系统的安全性和稳定性。通过合理配置文件权限,系统管理员可以控制用户对文件和目录的访问权限,防止未授权的操作。以下将详细介绍文件权限的基础知识及相关命令的使用。

文件权限基础

权限类型(读、写、执行)

在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):系统中除所有者和所属组成员以外的所有用户。

chmod - 改变文件权限

chmod 命令用于修改文件或目录的权限。

基本用法
chmod [选项] 权限 文件/目录

例如,给予文件 example.sh 所有者读、写、执行权限,所属组和其他用户读、执行权限:

chmod rwxr-xr-x example.sh
数字模式与符号模式

chmod 支持两种模式:数字模式和符号模式。

数字模式使用三位八进制数,每位代表所有者、所属组和其他用户的权限。

数字 权限
4 读 (r)
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

chown - 改变文件所有者

chown 命令用于更改文件或目录的所有者和所属组。

基本用法
chown [选项] 新所有者 文件/目录

示例:

chown alice example.txt

example.txt 的所有者更改为 alice

改变所有者与所属组

可以同时更改所有者和所属组,使用 :. 分隔。

示例:

chown alice:developers example.txt

example.txt 的所有者更改为 alice,所属组更改为 developers

递归修改所有者(-R 选项)
chown -R bob /path/to/directory

此命令将 /path/to/directory 及其所有子目录和文件的所有者更改为 bob

chgrp - 改变文件所属组

chgrp 命令专门用于更改文件或目录的所属组。

基本用法
chgrp [选项] 新组 文件/目录

示例:

chgrp developers example.txt

example.txt 的所属组更改为 developers

递归修改所属组(-R 选项)
chgrp -R developers /path/to/directory

此命令将 /path/to/directory 及其所有子目录和文件的所属组更改为 developers

特殊权限

特殊权限在文件权限中添加了额外的功能,用于特定场景,增强系统安全性和功能性。

SUID(Set User ID)

作用:当设置了 SUID 权限的可执行文件被执行时,进程的有效用户ID将被设置为文件所有者的用户ID,而不是执行者的用户ID。这通常用于需要临时提升权限的程序。

表示方式:在所有者执行权限位上添加 s,如 rwsr-xr-x

示例:

chmod u+s /usr/bin/passwd

passwd 程序需要修改 /etc/shadow 文件,因此需要以 root 权限运行。设置 SUID 后,普通用户执行 passwd 时可以临时拥有修改权限。

SGID(Set Group ID)

作用

  1. 对于文件:当设置了 SGID 的可执行文件被执行时,进程的有效组ID将被设置为文件所属组的组ID。
  2. 对于目录:新创建的文件或子目录将继承该目录的组,而不是创建者的主组。

表示方式:在所属组执行权限位上添加 s,如 rwxr-sr-x

示例:

chmod g+s /path/to/directory

/path/to/directory 中创建的所有新文件和子目录将自动属于该目录的组,方便团队协作。

Sticky Bit

作用:主要用于目录,防止用户删除或重命名目录中其他用户的文件。即使用户拥有写权限,也只能删除或重命名自己创建的文件。

表示方式:在其他用户执行权限位上添加 t,如 rwxr-xr-t

示例:

chmod +t /tmp

/tmp 目录通常是公共临时文件夹,设置 Sticky Bit 后,用户只能删除自己创建的临时文件,提升安全性。

设置与撤销特殊权限

设置特殊权限

  • 使用符号模式:

    chmod u+s file          # 设置 SUID
    chmod g+s directory     # 设置 SGID
    chmod +t directory      # 设置 Sticky Bit
    
  • 使用数字模式:
    特殊权限的数字值为:

    • SUID: 4
    • SGID: 2
    • Sticky Bit: 1 例如,设置 SUID 和 SGID:
    chmod 6755 file
    

撤销特殊权限

  • 使用符号模式:
    chmod u-s file          # 撤销 SUID
    chmod g-s directory     # 撤销 SGID
    chmod -t directory      # 撤销 Sticky Bit
    
  • 使用数字模式:
    移除特殊权限,只需不包含相应的数字。例如,从 6755 撤销 SUID 和 SGID:
    chmod 0755 file
    
应用场景与注意事项
  • SUID
    • 应用场景:需要临时提升权限的程序,如 passwd
    • 注意事项:不当使用可能导致安全漏洞,攻击者可能利用具有 SUID 的程序获取高权限。
  • SGID
    • 应用场景:团队协作的共享目录,确保所有文件属于统一的组。
    • 注意事项:确保目录所属组的成员权限设置合理,避免权限泄露。
  • Sticky Bit
    • 应用场景:公共目录如 /tmp,防止用户删除他人文件。
    • 注意事项:仅适用于需要共享访问的目录,避免在不必要的目录设置 Sticky Bit。

文件内容查看

在日常的文件管理和系统维护中,查看文件内容是一个常见且重要的操作。Unix/Linux 提供了多种命令来满足不同的查看需求,如 catlessmoreheadtail 等。为了更直观地理解这些命令的使用,假设我们有一个名为 example.txt 的文件,其内容如下:

example.txt 内容示例

Line 1: This is the first line of the example file.
Line 2: Error: Failed to connect to the database.
Line 3: User 'alice' logged in.
Line 4: Warning: Disk space running low.
Line 5: User 'bob' logged out.
Line 6: Error: Unable to open file.
Line 7: System update completed successfully.
Line 8: User 'charlie' uploaded a file.
Line 9: Error: Null pointer exception.
Line 10: User 'dave' changed password.

以下将详细介绍如何使用各个命令查看和操作 example.txt 文件的内容。

cat - 连接并显示文件内容

cat(concatenate 的缩写)是最常用的文件内容查看和合并工具之一。它可以显示文件内容、连接多个文件以及创建新文件。

基本用法

命令:

cat example.txt

输出:

Line 1: This is the first line of the example file.
Line 2: Error: Failed to connect to the database.
Line 3: User 'alice' logged in.
Line 4: Warning: Disk space running low.
Line 5: User 'bob' logged out.
Line 6: Error: Unable to open file.
Line 7: System update completed successfully.
Line 8: User 'charlie' uploaded a file.
Line 9: Error: Null pointer exception.
Line 10: User 'dave' changed password.
连接多个文件

假设有另一个文件 additional.txt 内容如下:

Line 11: User 'eve' attempted unauthorized access.
Line 12: Error: Timeout while waiting for response.

命令:

cat example.txt additional.txt

输出:

Line 1: This is the first line of the example file.
Line 2: Error: Failed to connect to the database.
Line 3: User 'alice' logged in.
Line 4: Warning: Disk space running low.
Line 5: User 'bob' logged out.
Line 6: Error: Unable to open file.
Line 7: System update completed successfully.
Line 8: User 'charlie' uploaded a file.
Line 9: Error: Null pointer exception.
Line 10: User 'dave' changed password.
Line 11: User 'eve' attempted unauthorized access.
Line 12: Error: Timeout while waiting for response.
创建与合并文件

创建新文件:

cat > newfile.txt

输入内容并保存:

This is a newly created file.
Press Ctrl+D to save and exit.

结果:

newfile.txt 内容:

This is a newly created file.

合并文件:

cat example.txt additional.txt > merged.txt

merged.txt 内容:

Line 1: This is the first line of the example file.
Line 2: Error: Failed to connect to the database.
Line 3: User 'alice' logged in.
Line 4: Warning: Disk space running low.
Line 5: User 'bob' logged out.
Line 6: Error: Unable to open file.
Line 7: System update completed successfully.
Line 8: User 'charlie' uploaded a file.
Line 9: Error: Null pointer exception.
Line 10: User 'dave' changed password.
Line 11: User 'eve' attempted unauthorized access.
Line 12: Error: Timeout while waiting for response.

本节总结

  • 本节主要围绕 Linux 基本命令、文件与目录操作、cp - 复制文件或目录、mv - 移动或重命名文件、文件权限与访问控制 展开。
  • 需要重点掌握的命令或工具包括:cpmvchmodchownchgrpcat
  • 学习时应优先抓住「命令解决什么问题、在什么场景下使用、执行后会产生什么结果」。
  • 对涉及权限、覆盖、网络、系统服务、删除或安全配置的操作,建议先在测试环境练习。

复习建议

  • 先用自己的话复述本节每个主题或命令的作用,避免只记参数不懂用途。
  • 按原文示例至少手敲一遍典型命令,并观察输出变化。
  • 对高风险操作先确认路径、权限和目标对象,再执行实际命令。
  • 可优先复习这些高频命令:cpmvchmodchownchgrpcat