学习目标
- 理解本节涉及的核心主题:Linux 基本命令、文件与目录操作、
cp- 复制文件或目录、mv- 移动或重命名文件。 - 掌握重点命令或工具:
cp、mv、chmod、chown、chgrp、cat。 - 能够结合示例完成常见操作,并理解关键参数、使用场景与结果差异。
- 能够识别本节相关的常见风险、易错点或排查思路。
学习重点
- 主题范围:Linux 基本命令、文件与目录操作、
cp- 复制文件或目录、mv- 移动或重命名文件、文件权限与访问控制、文件权限基础 - 重点命令:
cp、mv、chmod、chown、chgrp、cat - 学习重点:命令用途、关键参数、典型场景、与相近命令的区别
- 复习方式:先理解场景,再动手练习,最后对照结果检查
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.py 为 main_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--。其结构如下:
- 第一个字符:表示文件类型(如
-表示普通文件,d表示目录,l表示符号链接等)。 - 接下来的九个字符
:分为三组,每组三个字符,分别表示所有者、所属组和其他用户的权限。- 第一组(
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)
作用:
- 对于文件:当设置了 SGID 的可执行文件被执行时,进程的有效组ID将被设置为文件所属组的组ID。
- 对于目录:新创建的文件或子目录将继承该目录的组,而不是创建者的主组。
表示方式:在所属组执行权限位上添加 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 提供了多种命令来满足不同的查看需求,如 cat、less、more、head 和 tail 等。为了更直观地理解这些命令的使用,假设我们有一个名为 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- 移动或重命名文件、文件权限与访问控制 展开。 - 需要重点掌握的命令或工具包括:
cp、mv、chmod、chown、chgrp、cat。 - 学习时应优先抓住「命令解决什么问题、在什么场景下使用、执行后会产生什么结果」。
- 对涉及权限、覆盖、网络、系统服务、删除或安全配置的操作,建议先在测试环境练习。
复习建议
- 先用自己的话复述本节每个主题或命令的作用,避免只记参数不懂用途。
- 按原文示例至少手敲一遍典型命令,并观察输出变化。
- 对高风险操作先确认路径、权限和目标对象,再执行实际命令。
- 可优先复习这些高频命令:
cp、mv、chmod、chown、chgrp、cat。