diff --git "a/\350\216\253\346\265\267\345\251\214/20240522\346\226\207\344\273\266\345\217\212\346\226\207\344\273\266\347\256\241\347\220\206.md" "b/\350\216\253\346\265\267\345\251\214/20240522\346\226\207\344\273\266\345\217\212\346\226\207\344\273\266\347\256\241\347\220\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..e1de6db7e82b6a9b9fba642114c46446ca469731 --- /dev/null +++ "b/\350\216\253\346\265\267\345\251\214/20240522\346\226\207\344\273\266\345\217\212\346\226\207\344\273\266\347\256\241\347\220\206.md" @@ -0,0 +1,73 @@ +## 文件及文件管理 + +### 1、ls:列出目录下的文件和内容 + +​ 1、-l (long format):以长格式显示文件和目录的详细信息,包括权限、链 接数、所有者、所属组、大小、最后修改日期和时间以及文件名。 + +​ 2、-a (all):显示包括以点(`.`)开头的隐藏文件在内的所有文件和目录。 + +​ 3、-h (human-readable):与 `-l` 结合使用时,以易读的格式(如 KB, MB)显示文件大小。 + +​ 4、-R (recursive):递归列出目录内容,显示指定目录及其所有子目录的 文件和目录。 + +​ 5、-t (time):按修改时间排序显示文件和目录,最新的排在前面。 + +​ 6、-S*(size):按文件大小排序,大的文件排在前面,默认是降序。 + +​ 7、-r (reverse):反转排序顺序,通常与其他排序选项(如 `-t` 或 `-S`)一 起使用。 + +​ 8、-d (directory):当指定的项是目录时,仅显示目录名称本身,而不是其 内容。 + +​ 9、-X:按扩展名排序。 + +### 2、cd + +​ 1、进入某个目录:cd 目录名 + +​ 2、返回上一级目录:cd .. + +​ 3、返回家目录:cd ~ 或者cd + +​ 4、返回上一次所在目录:cd - + +### 3、pwd + +​ 1、pwd 显示当前目录所在路径 + +​ 2、dir1=$(pwd) + +​ echo $dir1 + +​ 将当前工作目录路径保存到变量中 + +### 4、mkdir + +​ 1、-p:递归创建目录,如果没有指定的上级目录,会一并创建。 + +​ 2、-m :设置新创建目录的权限。MODE是一个八进制数,用于指定目录 的权限位。 + +​ 3、-v:在创建每个目录时显示信息,这有助于确认哪些目录被成功创建。 + +​ 4、mkdir /tmp/新目录 :创建临时文件 + +### 5、rmkdir 目录名:只能删除空目录 + +### 6、rm + +​ 1、-f:强制删除文件或目录,不提示确认,即使文件设为只读也会删除, 且不显示不存在文件的错误信息。 + +​ 2、-i:在删除每一个文件或目录前提示用户确认,以避免误删。 + +​ 3、-r, -R:递归删除目录及其包含的所有内容,适用于删除非空目录。 + +​ 4、-v:显示正在删除的文件或目录的信息,提供详细的删除过程反馈。 + +​ 5、-f a*:删除所有以a开头的文件 + +​ 6、-f .*:删除隐藏文件 + +​ 7、-rf:递归地强制删除 + +​ 8、rm -d 目录名:只删除空目录 + +​ 9、rm -f a.txt b.txt:同时删除多个文件 \ No newline at end of file diff --git "a/\350\216\253\346\265\267\345\251\214/20240523 \344\275\234\344\270\232.md" "b/\350\216\253\346\265\267\345\251\214/20240523 \344\275\234\344\270\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..3bed4481d8485a33e22f6f24df58cb4e4b9673b9 --- /dev/null +++ "b/\350\216\253\346\265\267\345\251\214/20240523 \344\275\234\344\270\232.md" @@ -0,0 +1,180 @@ +相关和目录可自行创建后再操作 + +1. 在家目录下建立文件exam.c,将文件exam.c拷贝到/tmp这个目录下,并改名为 shiyan.c + + ``` + wx@hecs-169992:~$ touch exam.c + wx@hecs-169992:~$ cp exam.c /tmp/shiyan.c + ``` + +2. 在任何目录下回到用户主目录? + + ``` + cd ~ + ``` + + + +3. 用长格式列出/tmp/test目录下所有的文件包括隐藏文件? + + ``` + wx@hecs-169992:/tmp$ ls -la + + ``` + + + +4. /tmp/test2目录下,创建5个文件分别是 1.txt 2.txt 3.txt 4.txt 5.txt,压缩这5个文件,压缩包的名字是hailiang.tar + + ``` + wx@hecs-169992:/tmp/test2$ touch 1.txt 2.txt 3.txt 4.txt 5.txt + wx@hecs-169992:/tmp/test2$ tar -cvf hailiang.tar *.txt + + ``` + + + +5. 当前目录,建立文件 file1.txt 并更名为 file2.txt? + + ``` + wx@hecs-169992:/tmp/test2$ mv file1.txt file2.txt + ``` + + + +6. 当前目录,用vim建立文件bbbb.txt 并将用户名的加入其中保存退出? + + ``` + vim bbbb.txt + 按i进入编辑模式,将用户名输入,输入完成后,按esc退出插入模式,输入wq! + ``` + + + +7. 将家目录中扩展名为txt、doc和bak的文件全部复制到/tmp/test目录中? + + ``` + wx@hecs-169992:~$ cp *.txt *.doc *.bak /tmp/test + ``` + + + +8. 将文件file1.txt从当前目录移动到家目录的/docs中 + + ``` + wx@hecs-169992:/tmp$ mv file1.txt /home/wx/docs + ``` + + + +9. 复制文件file2.txt从当前目录到家目录/backup中。 + + ``` + wx@hecs-169992:/tmp$ cp file2.txt /home/wx/backup + ``` + + + +10. 将家目录/docs中的所有文件和子目录移动到家目录/archive中。 + + ``` + wx@hecs-169992:~$ mv docs/* archive + ``` + + + +11. 复制家目录/photos及其所有内容到家目录/backup中。 + + ``` + wx@hecs-169992:~$ cp -r photos/ backup/ + ``` + + + +12. 将文件家目录/docs/report.doc移动到家目录/papers中,并将其重命名为final_report.doc。 + + ``` + wx@hecs-169992:~/docs$ mv report.doc ../papers/final_report.doc + ``` + + + +13. 在家目录/docs中创建一个名为notes.txt的空文件,并将其复制到目录家目录/backup中。 + + ``` + wx@hecs-169992:~/docs$ cp notes.txt ../backup/ + ``` + + + +14. 复制家目录/images中所有以.jpg结尾的文件到家目录/photos中。 + + ``` + wx@hecs-169992:~$ cp images/*.jpg photos/ + ``` + + + +15. 将文件家目录/docs/file1.txt和家目录/docs/file2.txt复制到家目录/backup中。 + + ``` + wx@hecs-169992:~/docs$ cp file* ../backup + ``` + + + +16. 将家目录/docs中的所有.txt文件复制到家目录/text_files中。 + + ``` + wx@hecs-169992:~$ cp docs/*.txt text_files/ + ``` + + + +17. 将家目录/docs中的所有文件移动到家目录/temp中,并且如果文件已存在,则覆盖它们。 + + ``` + wx@hecs-169992:~$ cp docs/* temp/ + ``` + + + +18. 将家目录/docs中的所有文件移动到家目录/archive中,并且在移动时显示详细的移动信息。 + + ``` + wx@hecs-169992:~$ mv docs/* archive/ -v + + ``` + + + +19. 复制家目录/docs中的所有子目录及其内容到家目录/backup中。 + + ``` + wx@hecs-169992:~$ cp -r docs/* backup/ + ``` + + + +20. 将家目录/docs中的所有文件和子目录移动到家目录/backup中,但排除文件名以"temp_"开头的文件。 + + ``` + wx@hecs-169992:~$ find ~/docs/* -type f,d ! -name 'temp*' -print0 | xargs -0 mv -t ~/backup/ + ``` + + + +21. 将目录/docs/report.txt移动到家目录/archive中,但如果目标目录中已存在同名文件,则不直接覆盖,先备份同名文件为report.txt_bak。 + + ``` + mv -bS _bak archive/report backup + ``` + + + +22. 将家目录/docs中所有以.pdf结尾的文件复制到家目录/pdf_files中,并且如果目标目录中已存在同名文件,则忽略它们。 + +``` +wx@hecs-169992:~$ cp docs/*.pdf pdf_files/ +``` + diff --git "a/\350\216\253\346\265\267\345\251\214/20240523cp\345\222\214mv.md" "b/\350\216\253\346\265\267\345\251\214/20240523cp\345\222\214mv.md" new file mode 100644 index 0000000000000000000000000000000000000000..fc1169c540d714610f660e6169225d453a970b9b --- /dev/null +++ "b/\350\216\253\346\265\267\345\251\214/20240523cp\345\222\214mv.md" @@ -0,0 +1,55 @@ +### cp:用于复制文件和目录 + + - 复制文件:`cp 源文件 目标文件` + - 复制文件到目录: cp 源文件 目标目录 + - 复制目录:`cp -r 源目录 目标目录` :没-r复制不了目录 + +##### 一些常用选项 + +``` +1. -r 或 -R (递归): 用于复制目录及其内容,包括子目录和文件。 +2. -i (交互式): 在覆盖已存在的文件之前提示用户确认,避免不小心覆盖重要文件。 +3. -f (强制): 强制覆盖已存在的文件,不会提示用户。 +4. -u (更新): 只有当源文件比目标文件新或者目标文件不存在时才复制,适用于增量备份。 +5. -v (详细): 显示复制操作的过程,包括被复制的文件名,有助于监控复制进度。 +6. -p (保留): 保留源文件的属性,如权限、所有权、时间戳等。 +7. -a (归档): 类似于 `-pdr` 的组合,递归复制目录并保留文件属性,但不复制特殊文件如软链接。 +``` + + + +### mv:用于移动文件或目录,或者对它们进行重命名 + + - 移动文件或目录:`mv 源目录/文件 目标目录` + - 重命名文件或目录:`mv 原文件名 新文件名` + +原则: + + 目标不存在,一定重命名 + +1. 当是移动时,只能是文件移到目录 +2. 如何分辩是移动还是重命名 + 1. 源文件 - 目标文件 + 1. 目标已经存在:源文件替换了目标文件 + 2. 目标不存在:直接将源文件改名为目标文件 + 2. 源文件 -目标目录 + 1. 目标存在:将源文件移到目标目录里 + 2. 目标不存在:将源文件改为目标名 + 3. 源目录 - 目标目录 + 1. 目标已存在:将源移到目标里 + 2. 已经不存在:源目录改为目标目录名 + +##### 一些常用的选项 + +``` +-i: 在覆盖已存在的文件或目录之前提示用户确认,以避免意外覆盖。 +-f: 强制移动操作,如果目标文件已存在,则不提示直接覆盖。 +-u: 只有当源文件比目标文件新或者目标文件不存在时才移动或重命名。 +-v: 显示详细的操作过程,包括移动的文件名,便于追踪操作进度。 +-b: 在覆盖文件前,为已存在的文件创建一个备份。默认情况下,备份文件的名称会加上一个波浪线(如 file.txt~)。 +-s: 指定备份文件使用的后缀,代替默认的波浪线。 +-t: 指定目标目录,适用于移动多个文件到同一目录下。 +``` + + + diff --git "a/\350\216\253\346\265\267\345\251\214/20240525\347\233\270\345\257\271\350\267\257\345\276\204\345\222\214\347\273\235\345\257\271\350\267\257\345\276\204.md" "b/\350\216\253\346\265\267\345\251\214/20240525\347\233\270\345\257\271\350\267\257\345\276\204\345\222\214\347\273\235\345\257\271\350\267\257\345\276\204.md" new file mode 100644 index 0000000000000000000000000000000000000000..6a9d2ba49fcfe3f9453bac8dbc72bda5dae0e52d --- /dev/null +++ "b/\350\216\253\346\265\267\345\251\214/20240525\347\233\270\345\257\271\350\267\257\345\276\204\345\222\214\347\273\235\345\257\271\350\267\257\345\276\204.md" @@ -0,0 +1,35 @@ +在计算机文件系统中,路径是用来定位文件或目录位置的字符串。根据路径的参照点不同,可以分为两种类型:相对路径和绝对路径。 + +- #### 1. 绝对路径 + + **定义**:从根目录 `/` 开始的完整路径,用于唯一确定文件或目录的位置。 + + **特点**: + + - 以 `/` 开头 + - 与当前工作目录无关 + + **示例**: + + - `/home/user/documents/file.txt` + - `/usr/local/bin` + + #### 2. 相对路径 + + **定义**:相对于当前工作目录的路径,用于在当前目录的基础上指向文件或目录。 + + **特点**: + + - 不以 `/` 开头 + - 依赖于当前工作目录 + + **特殊符号**: + + - `.` 表示当前目录 ./ + - `..` 表示上一级目录../ + +**示例:** + +如果当前目录是`/home/user`,那么: + +- 相对路径 `documents/file.txt` 实际上指向的是 `/home/user/documents/file.txt`。 \ No newline at end of file diff --git "a/\350\216\253\346\265\267\345\251\214/20240527\346\237\245\350\257\242\345\221\275\344\273\244\347\233\270\345\205\263\347\232\204\347\273\203\344\271\240.md" "b/\350\216\253\346\265\267\345\251\214/20240527\346\237\245\350\257\242\345\221\275\344\273\244\347\233\270\345\205\263\347\232\204\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..c520dab922c97f8a4765eabb6dd2750abcc472df --- /dev/null +++ "b/\350\216\253\346\265\267\345\251\214/20240527\346\237\245\350\257\242\345\221\275\344\273\244\347\233\270\345\205\263\347\232\204\347\273\203\344\271\240.md" @@ -0,0 +1,317 @@ +### 操作题 + +1. **查找当前目录及其子目录中所有扩展名为 `.log` 的文件**: + + ```bash + find . -name '*.log' + ``` + +2. **在 `/var/logs` 目录及其子目录中查找所有包含关键字 `error` 的文件,并显示匹配的行**: + + ```bash + dabian2ban@class2:~$ grep -r 'error' /var/logs + ``` + +3. **在 `/home/user/docs` 目录中查找文件名包含 `report` 的所有文件**: + + ```bash + dabian2ban@class2:~/docs$ find . -type f -name '*report*' + ``` + +4. **查找 `/etc` 目录中最近7天内修改过的文件**: + + ```bash + dabian2ban@class2:~$ find /etc -type f -mtime -7 + ``` + +5. **显示 `/usr/bin` 目录中名为 `python` 的可执行文件的路径**: + + ```bash + dabian2ban@class2:~$ ls -l bin/python* + ``` + +6. **查找系统中名为 `ls` 的命令及其手册页位置**: + + ```bash + dabian2ban@class2:~$ whereis ls + ``` + +7. **查找当前目录中包含关键字 `TODO` 的所有文件,并显示匹配的行和文件名**: + + ```bash + grep -rn "TODO" . + ``` + +8. **在 `/home/user/projects` 目录中查找所有包含关键字 `function` 的 `.js` 文件**: + + ```bash + grep -l 'function' projects/*.js + ``` + +9. **查找并显示当前目录及其子目录中所有空文件**: + + ```bash + dabian2ban@class2:~$ find . -type f -empty + ``` + +10. **在 `/var/www` 目录中查找包含关键字 `database` 的所有文件,并只显示文件名**: + + ```bash + find /var/www/ -type f -exec grep -l 'database' {} \; | xargs -n1 basename + ``` + +### 综合操作题 + +**综合操作题:** + +假设你在一个名为 `/home/user/workspace` 的目录中工作。你需要完成以下任务: + +1. 查找该目录中所有扩展名为 `.conf` 的文件。 +2. 在这些 `.conf` 文件中查找包含关键字 `server` 的行。 +3. 将包含关键字 `server` 的文件名和匹配的行保存到一个名为 `server_lines.txt` 的文件中。 + +**预期命令步骤:** + +1. 查找所有扩展名为 `.conf` 的文件: + + ```bash + dabian2ban@class2:~$ find workspace/ -type f -name '*.conf' + ``` + +2. 在这些 `.conf` 文件中查找包含关键字 `server` 的行: + + ```bash + dabian2ban@class2:~$ find workspace/ -type f -name '*.conf' -exec grep 'server' -r {} \; + ``` + +3. 将结果保存到 `server_lines.txt` 文件中: + + ```bash + find workspace/ -type f -name '*.conf' -exec grep 'server' -r {} \; > workspace/server_lines.txt + ``` + +通过这套操作题和综合操作题,你可以全面地了解和应用Linux系统中与文件和内容查询相关的常用命令。 + +# 笔记 + +### 查找的命令 + +### 1、find 命令 + +用于查找文件和命令,实时更新 + +##### 按名称查找 + +```bash +find /path -name 'filename' +``` + + + +##### 按名称查找目录 + +```bash +find /path -type d -name 'filename' +``` + + + +##### 查找所有.txt文件 + +```bash +find /path -type d -name '*.txt' +``` + + + +##### 查找大于1MB的文件 + +```bash +find /path -type f -size +1MB +``` + + + +##### 查找最近7天内修改过的文件 + +```bash +find /path -f -mtime -7 +``` + + + +##### 查找文件并对其执行命令 + +```bash +find /path f -exec command {} \; +``` + + + +### 2、location 命令 + +通过预建的数据库,快速查找文件的目录。速度比find快,但是需要实时更新数据库。 + +1. ##### 查找文件名中包含"filename" 的所有文件 + + ```bash + location filename + ``` + + + +2. ##### 查找所有.txt文件 + + ```bash + location "*.txt" + ``` + + + +### 3、which命令 + +用于查找可执行文件的位置,它在用户的PATH环境变量走搜索命令 + +用于一下几种场景: + +1. 查找命令的完整路径 +2. 验证命令是否存在 + +### 4、whereis 命令 + +查找可执行文件,源代码和手册页的位置 + +基本用法:whereis command + +例如 + +查找ls 命令的可执行文件、源代码文件和手册页的位置 + +``` bash +whereis ls +``` + + + +### 5、type 命令 + +显示文件的类型,例如是否是内置命令、别名或者可执行的文件 + +例如: + +type ls 显示ls命令的类型 + +-type f 文件类型为文件 + +-type d 文件类型为目录 + +### 6、grep 命令 + +用于在文件内容中搜索匹配的字符串 + +用法: + +##### 在文件中搜索字符串 + +```bash +grep "关键字" 文件名 +``` + + + +##### 忽略大小写查找 + +```bash +grep -i "关键字" /path +``` + + + +##### 显示不包含关键字的行 + +```bash +grep -v "关键字" 文件名 +``` + + + +##### 显示包含关键字的文件名 + +```bash +grep -l "关键字" 文件名 +``` + + + +##### 技术匹配的行数 + +```bash +grep -c "关键字" 文件名 +``` + + + +##### 显示匹配行的行号 + +```bash +grep -n "关键字" 文件名 +``` + + + +##### 仅显示匹配部分 + +```bash +grep -o "关键字" 文件名 +``` + + + +##### 显示匹配行及后面的2行 + +```bash +grep -A "关键字" 文件名 +``` + + + +##### 显示匹配行及前面2行 + +```bash +grep -B "关键字" 文件名 +``` + + + +##### 显示匹配行及前后2行 + +```bash +grep -C "关键字" 文件名 +``` + + + +### 7、find和grep结合使用 + +可以灵活地查找文件及其内容 + +##### 查找包含特定字符串pattern的所有.txt文件 + +```bash +find /path -type f -naem "*.txt" -exec grep "pattern" {} +; +``` + + + +### 8、star 命令 + +用于显示文件或者文件系统的详细信息、大小、权限、修改时间等 + +基本用法 + +##### 显示文件的详细信息 + +```bash +stat filnamem +``` +