diff --git "a/41 \351\231\210\345\200\251\345\200\251/20240522_\346\226\207\344\273\266\347\256\241\347\220\206.md" "b/41 \351\231\210\345\200\251\345\200\251/20240522_ls&cd&pwd&mkdir&rm.md" similarity index 56% rename from "41 \351\231\210\345\200\251\345\200\251/20240522_\346\226\207\344\273\266\347\256\241\347\220\206.md" rename to "41 \351\231\210\345\200\251\345\200\251/20240522_ls&cd&pwd&mkdir&rm.md" index 7faa3529e591b3be2255b040b351305702ba61f8..5d7ac5a5c5b5032c8be7ec4be8271bbc383cfdd8 100644 --- "a/41 \351\231\210\345\200\251\345\200\251/20240522_\346\226\207\344\273\266\347\256\241\347\220\206.md" +++ "b/41 \351\231\210\345\200\251\345\200\251/20240522_ls&cd&pwd&mkdir&rm.md" @@ -89,205 +89,6 @@ rm -d 目录名 # 只删除空目录(与 rmdir 命令类似)。 ``` - - -7. **cp**:复制文件或目录。 - - - 复制文件:`cp 源文件 目标文件` - - 复制文件到目录: cp 源文件 目标目录 - - 复制目录:`cp -r 源目录 目标目录` - - `cp` 是 Linux 和 Unix 系统中用于复制文件或目录的命令。以下是 `cp` 命令的一些常见用法: - - 1. **复制单个文件**: - - - ```bash -cp source_file destination_file - ``` - - 例如,将 `example.txt` 复制到 `new_example.txt`: - - - ```bash -cp example.txt new_example.txt - ``` - - 2. **复制文件到目录**: - - - ```bash -cp source_file destination_directory/ - ``` - - 例如,将 `example.txt` 复制到 `target_dir` 目录: - - - ```bash -cp example.txt target_dir/ - ``` - - 3. **递归复制目录**: - 使用 `-r` 或 `-R` 选项可以递归地复制目录及其内容。 - - - ```bash -cp -r source_directory destination_directory/ - ``` - - 例如,将 `source_dir` 目录及其内容复制到 `target_dir`: - - - ```bash -cp -r source_dir target_dir/ - ``` - - 4. **交互式复制**: - 使用 `-i` 选项,在覆盖已存在的文件前会提示用户确认。 - - - ```bash -cp -i source_file destination_file - ``` - - 5. **保留文件属性**: - 使用 `-p` 选项可以保留原文件的属性(如时间戳、权限等)。 - - - ```bash -cp -p source_file destination_file - ``` - - 6. **显示复制进度**: - 使用 `-v` 选项可以显示详细的复制进度信息。 - - - ```bash -cp -v source_file destination_file - ``` - - 7. **仅当源文件较新时复制**: - 使用 `-u` 选项可以仅当源文件比目标文件新时才进行复制。 - - - ```bash -cp -u source_file destination_file - ``` - - 8. **强制复制**: - 使用 `-f` 或 `--force` 选项可以强制复制,即使目标文件已存在也不提示,直接覆盖。 - - - ```bash -cp -f source_file destination_file - ``` - - 9. **批量复制文件**: - 可以使用通配符(如 `*`)来批量复制文件。 - - - ```bash -cp *.txt destination_directory/ - ``` - - 这将复制当前目录下所有 `.txt` 结尾的文件到 `destination_directory` 目录。 - - 这只是 `cp` 命令的一些基本用法,实际上它还有许多其他选项和功能。你可以通过运行 `man cp` 或 `cp --help` 来查看完整的命令手册和选项列表。 - -8. **mv**:移动文件或目录,也可用于重命名文件或目录。 - - - 移动文件或目录:`mv 源目录/文件 目标目录` - - 重命名文件或目录:`mv 原文件名 新文件名` - - 在 Linux 中,`mv` 命令用于移动文件或目录,或者对它们进行重命名。以下是 `mv` 命令的一些常见用法: - - 1. **移动文件或目录**: - - - * 将文件从一个目录移动到另一个目录: - ```bash - mv source_file destination_directory/ - ``` - * 移动目录:与移动文件类似,但目录的末尾不应有斜杠(/),除非目标位置是一个已经存在的目录。 - ```bash - mv source_directory destination_directory/ - ``` - 注意:如果目标目录不存在,`mv` 命令会将其视为要重命名的文件名,这可能会导致意外的结果。 - - 2. **重命名文件或目录**: - - - * 重命名文件: - ```bash - mv old_name.txt new_name.txt - ``` - * 重命名目录: - ```bash - mv old_directory_name new_directory_name - ``` - - 3. **移动并重命名文件**: - - - * 你可以在一次操作中既移动又重命名文件。 - ```bash - mv source_directory/old_name.txt destination_directory/new_name.txt - ``` - - 4. **使用通配符移动多个文件**: - - - * 你可以使用通配符(如 `*`)来匹配多个文件,并将它们移动到目标目录。 - ```bash - mv *.txt destination_directory/ - ``` - 这将移动当前目录下所有 `.txt` 结尾的文件到 `destination_directory` 目录。 - - 5. **交互式操作**: - - - * 使用 `-i` 选项,`mv` 命令会在移动或重命名文件前进行确认,以避免意外覆盖文件。 - ```bash - mv -i source_file destination_file - ``` - 当目标位置已经存在同名文件时,系统会提示你是否要覆盖。 - - 6. **显示详细信息**: - - - * 使用 `-v` 选项,`mv` 命令会显示详细的操作信息,包括移动或重命名的文件名。 - ```bash - mv -v source_file destination_file - ``` - - 7. **覆盖文件前先备份**: - - * 使用 `-b` 选项,`mv` 命令会在覆盖文件之前对其进行备份。 - - - ```bash -mv -b source_file destination_file - ``` - - 请注意,`mv` 命令的使用可能因不同的 Linux 发行版或 shell 环境而略有差异。但上述用法在大多数情况下都是通用的。如果你需要更详细的信息或特定选项的解释,可以使用 `man mv` 命令来查看 `mv` 命令的手册页。 - -9. **touch**:创建空文件或者更改文件访问和修改时间。 - - - 示例:`touch 文件名` - -10. **chmod**:修改文件或目录权限。 - -- 示例:`chmod 权限值 文件名` - -1. **chown**:改变文件或目录的所有者。 - -- 示例:`chown 用户名 文件名` - -1. **chgrp**:改变文件或目录的所属组。 - -- 示例:`chgrp 组名 文件名` - -这些是常用的Linux文件夹和文件管理相关操作命令,通过它们你可以进行各种文件和目录的管理 ##### 作业 @@ -296,7 +97,7 @@ mv -b source_file destination_file 1. **创建测试文件**:在家目录下创建三个文本文件,分别命名为`.hidden.txt`(隐藏文件)、`visible1.txt`和`visible2.txt`。 ``` - mkdir .hidden.txt visible1.txt xisible2.txt -p + mkdir .hidden.txt visible1.txt visible2.txt -p ``` 2. **列出文件和目录**:列出家目录(`~`)下的所有文件和目录,包括隐藏文件,并查看其详细权限和属性。 @@ -361,6 +162,7 @@ mv -b source_file destination_file ``` vim .bashrc alias llh='ls -lhS' + 重启后生效 ``` \ No newline at end of file diff --git "a/41 \351\231\210\345\200\251\345\200\251/20240524_cp&mv.md" "b/41 \351\231\210\345\200\251\345\200\251/20240524_cp&mv.md" new file mode 100644 index 0000000000000000000000000000000000000000..9ecae3c63e273277b7b0d1a70132599a14465a71 --- /dev/null +++ "b/41 \351\231\210\345\200\251\345\200\251/20240524_cp&mv.md" @@ -0,0 +1,325 @@ + ## 7.**cp**:copy 复制文件或目录。 + + - 复制文件:`cp 源文件 目标文件` + - 复制文件到目录: cp 源文件 目标目录 + - 复制目录:`cp -r 源目录 目标目录` :没-r复制不了目录 + - 当cp有三个参数以上时: + - 最后一个是目标目录 + - 而且必须是目录,不是文件 + + + `cp` 是 Linux 和 Unix 系统中用于复制文件或目录的命令。以下是 `cp` 命令的一些常见用法: + + ~~~bash +# 1.复制单个文件: +cp 文件1 目录1/文件1 # 将文件1复制一份到目录1 +cp 文件1 文件2 # 将文件1复制一份为文件2 +cp 文件1 目录1/文件2 # 将文件1复制一份到目录1,并改名为文件2 + + +# 例如,将 `old.txt` 复制为 `new.txt`: +cp old.txt new.txt # 最终得到old.txt 和 new.txt + + +# 2.复制文件到目录: +cp 要复制的文件名 要复制到的文件夹路径 +# 例如,将 `成绩单.txt` 复制到 `/usr/local/各班成绩汇总` 目录: +cp 成绩单.txt /usr/local/各班成绩汇总/ # 最终在/usr/local/各班成绩汇总/也会出现成绩单.txt文件 + + +#3. 递归复制目录: +# 复制目录时使用 `-r` 或 `-R` 选项可以递归地复制目录及其内容。 +cp -r 源目录 目标目录 +# 例如,将 `22级1班成绩` 目录及其内容复制到 `22级成绩汇总`目录下: +cp -r 22级1班成绩 22级成绩汇总/ + + +#4. 交互式复制:# 会确认覆盖信息 +#使用 `-i` 选项,在覆盖已存在的文件前会提示用户确认。 +cp -i 源文件 目标文件 # 复制源文件为目标文件,如果目标文件已经存在,会底部是否覆盖 +# 例如:将c1.txt复制成c2.txt时,发现c2.txt已存在 +$ cp -i c1.txt c2.txt +cp: 是否覆盖 'c2.txt'? # 要覆盖就输入y,如果是n是取消复制 + + +#5. 保留文件属性:原封不动的复制 +# 使用 `-p` 选项可以保留原文件的属性(如时间戳、权限等)。 +cp -p 源文件 目标文件 +# 例如:将c1.txt复制成c3.txt,并保留c1.txt的文件属性 +$ cp -p c1.txt c3.txt + +#6. 显示复制进度: +# 使用 `-v` 选项可以显示详细的复制进度信息。类似的有tar rm +cp -rv 源目录 目标目录 # 会在递归复制的时候显示进度信息 + ``` +#7. 仅当源文件较新时复制**: update +# 使用 `-u` 选项可以仅当源文件比目标文件新时才进行复制。update +cp 1班成绩.txt 1班成绩.txt.bak # 直接覆盖 +cp -u 1班成绩.txt 1班成绩.txt.bak # 更新才复制 + + +#8. 强制复制:rm -f +# 使用 `-f` 或 `--force` 选项可以强制复制,即使目标文件已存在也不提示,直接覆盖。 +cp -f old_file new_file + +#9. 批量复制文件: +# 可以使用通配符(如 `*`)来批量复制文件。 +cp *.txt 笔记/ +# 这将复制当前目录下所有 `.txt` 结尾的文件到 `笔记` 目录。 + +#10 同时复制多个文件或目录到 某个目录 +cp 1.txt 2.txt 3.txt 笔记 # 一次性同时将1、2、3.txt都复制到笔记目录 +cp -R dir1 dir2 dir3 # 同时将dir1,dir2复制到dir3内,因为是复制目录,要加-R +cp -R 1.txt dir1 dir2 # 同时将文件和目录一起复制到dir2 + +#11 复制时产生备份文件,尾标~ +cp -b a.txt tmp/ # 如果/tmp目录已经有a.txt 就会将原来的a.txt备份成a.txt~ backup + +#12 指定备份文件尾标 +cp -b -S _bak a.txt /tmp # 如果/tmp目录已经有a.txt 就会将原来的a.txt备份成a.txt_bak + #使用 cp -b -S _bak a.txt /tmp 命令,当目标目录 /tmp 中已经存在 a.txt 文件时,会先将其重命名为 a.txt_bak 作为备份,然后再将新的 a.txt 文件复制到目标目录。这可以有效地防止文件被覆盖,确保数据的安全性 + ~~~ + + + + ## 8. **mv**:move 移动文件或目录,也可用于重命名文件或目录。 + + - 移动文件或目录:`mv 源目录/文件 目标目录` ,相当于剪切 + - 重命名文件或目录:`mv 原文件名 新文件名` + + 在 Linux 中,`mv` 命令用于移动文件或目录,或者对它们进行重命名。以下是 `mv` 命令的一些常见用法: + +原则: 目标不存在,一定重命名 + +1. 当是移动时,只能是文件移到目录 +2. 如何分辩是移动还是重命名 + 1. 源文件 - 目标文件 :mv a.txt b.txt + 1. 目标已经存在:源文件替换了目标文件 + 2. 目标不存在:直接将源文件改名为目标文件 + 2. 源文件 -目标目录、:mv a.txt dir1 + 1. 目标存在:将源文件移到目标目录里 + 2. 目标不存在:将源文件改为目标名 + 3. 源目录 - 目标目录 + 1. 目标已存在:将源移到目标里 + 2. 已经不存在:源目录改为目标目录名 + + 4. 8种场景 + 1. 文件到文件: + 1. 目标存在 + + 2. 目标不存在 + + 2. 文件到目录 + 1. 目标存在 + + 2. 目标不存在 + + 3. 目录到目录 + 1. 目标存在 + + 2. 目标不存在 + + 4. 目录到文件 + 1. 目标存在 + 2. 目标不存在 + + 5. **移动文件或目录**: + + +```bash +# 将文件从移动到指定目录: +mv 文件 目标目录 +# 将源目录A移动到目标目录B +mv 目录A 目录B + +#注意:如果目标目录不存在,`mv` 命令会将其视为要重命名的文件名 +``` + + 2. **重命名文件或目录**: + + +```bash +# 重命名文件: +mv 旧文件名 新文件名 + +# 重命名目录 +mv 旧目录名 新目录名 + +#注意,如果新文件名已存在,就会被覆盖,如果新目录名已经存在,就变成了移动 +``` + + 3. **移动并重命名:** + + +```bash +# 移动一个文件到新目录,并重命名这个文件。 +mv 1.txt /tmp/2.txt # 移动当前目录下的1.txt到/tmp目录,并重命名为2.txt + +# 移动了一个目录到另一个目录下,并重命名 +mv aDir /tmp/bDir # 将当前目录下的aDir目录移动到/tmp目录下,将改名为bDir +``` + +```bash +# 移动多个文件 参数大于等于3个时: +- mv # 跟了3个参数以上时,最后一个默认是目录 +``` + + +```bash +# 同时移动多个文件到指定目标 +mv 1.txt 2.txt /tmp # 将1.txt和2.txt 移动到/tmp目录下 +# 同时移动多个目录到指定目录下 +mv aaa bbb /tmp # 将aaa和bbb 移动到/tmp目录下 + +# 使用通配符(如 `*`)来匹配多个文件或目录,并将它们移动到目标目录。 +mv *.txt /tmp # 移动当前目录下所有.txt结尾的文件和目录到/tmp目录下 +mv a* /tmp # 移动当前目录下,所有a开头的文件和目录到 /tmp目录下 +mv * /tmp # 移动当前目录下的,所有文件和目录到/tmp目录下 +``` + + 5. **交互式操作**: + + +```bash +# 使用 `-i` 选项,`mv` 命令会在移动或重命名文件前进行确认,以避免意外覆盖文件。 +mv -i 1.txt 2.txt # 当2.txt文件已经存在时,系统会提示你是否要覆盖。y 确认,n 取消 +``` + + 6. **显示详细信息**: + + +```bash +# 使用 `-v` 选项,`mv` 命令会显示详细的操作信息,包括移动或重命名的文件名。 +mv -v 1.txt 2.txt # 重命名1.txt为2.txt并显示详情 +renamed '1.txt' -> '2.txt' # 显示详细 + +``` + + 7. **覆盖文件前先备份**: + + * 使用 `-b` 选项,`mv` 命令会在覆盖文件之前对其进行备份。 + + + ```bash +mv -b 1.txt 2.txt # 如果2.txt已存在,就先备份2.txt为2.txt~,再次1.txt改成为2.txt + ``` + + + +##### 练习 + +相关和目录可自行创建后再操作 + +### 练习题 1:复制文件 + +假设你有两个目录:`/home/user/docs` 和 `/home/user/backup`。 + +1. 将`/home/user/docs`目录下的`file1.txt`复制到`/home/user/backup`目录下。 + + ``` + cp docs/file1.txt backup/ + ``` + + + +2. 复制`/home/user/docs`目录下的所有`.txt`文件到`/home/user/backup`目录下。 + + ``` + cp docs/*.txt backup/ + ``` + + + +### 练习题 2:复制文件夹及其内容 + +1. 假设`/home/user/photos`是一个包含多个图片文件夹的目录,请复制整个`/home/user/photos`目录及其所有内容到`/home/user/archive`目录下。 + + ``` + cp -r photos archive/ + ``` + + + +### 练习题 3:移动文件 + +1. 将`/home/user/docs`目录下的`file2.docx`移动到`/home/user/papers`目录下。 + + ``` + mv docs/file2.docx papers + ``` + + + +2. 如果`/home/user/papers`目录下已经有一个名为`file2.docx`的文件,请确保移动操作会询问你是否要覆盖它。 + + ``` + mv -i papers/file2.docx docs/ + ``` + + + +### 练习题 4:重命名文件 + +1. 将`/home/user/docs`目录下的`oldname.pdf`重命名为`newname.pdf`。 + + ``` + mv docs/oldname.pdf docs/newname.pdf + ``` + + + +### 练习题 5:结合使用 + +1. 复制`/home/user/docs`目录下的`report.md`到`/home/user/temp`,然后将复制过去的文件重命名为`temp_report.md`。 + + ``` + cp docs/report.md temp/temp_report.md + ``` + + + +2. 将`/home/user/docs`目录下所有以`.docx`结尾的文件移动到`/home/user/processed`,并且如果这些文件在目标目录中已经存在,则不覆盖它们。 + + ``` + mv -b docs/*.docx processed + ``` + + + +### 练习题 6:使用通配符 + +1. 复制`/home/user/docs`目录下所有以`.jpg`或`.png`结尾的图片文件到`/home/user/images`目录。 + + ``` + cp docs/*.jpg docs/*.png images/ + ``` + + + +### 练习题 7:详细输出 + +1. 使用`cp`命令复制文件时,显示详细的复制信息。 + + ``` + cp -v + ``` + + + +2. 使用`mv`命令移动文件时,显示详细的移动信息。 + + ``` + mv -v + ``` + + + +### 练习题 8:更新文件 + +1. 如果`/home/user/backup`目录中已经有一个与`/home/user/docs`目录下的`file1.txt`同名的文件,并且`/home/user/docs/file1.txt`的内容是更新的,请使用`cp`命令将更新的文件复制到备份目录,并覆盖旧文件(假设你知道旧文件可以被安全地覆盖)。 + + ``` + cp -u docs/file1.txt backup/file1.txt + ``` + +