diff --git "a/21 \346\217\255\351\230\263\344\270\275/20240522 \344\275\234\344\270\232.md" "b/21 \346\217\255\351\230\263\344\270\275/20240522 \344\275\234\344\270\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..5ea5e8112356337eaaddd2bf70bea05f994a9c46 --- /dev/null +++ "b/21 \346\217\255\351\230\263\344\270\275/20240522 \344\275\234\344\270\232.md" @@ -0,0 +1,92 @@ +假设您刚刚登录到一个Linux系统,并位于您的家目录(`~`)下。您需要完成以下一系列复杂的操作来组织和清理您的文件和目录。请按照顺序执行,并给出相应的命令。 + +1. **创建测试文件**:在家目录下创建三个文本文件,分别命名为`.hidden.txt`(隐藏文件)、`visible1.txt`和`visible2.txt`。 +2. **列出文件和目录**:列出家目录(`~`)下的所有文件和目录,包括隐藏文件,并查看其详细权限和属性。 +3. **创建工作区**:创建一个新的目录`work_area`,并在其中创建三个子目录:`project_a`、`project_b`和`docs`。 +4. **移动文本文件**:将家目录下的所有`.txt`文件移动到`work_area/docs`目录中,并确保这些文件在移动后仍然是隐藏的(如果它们是隐藏的)。 +5. **创建新文件**:在`work_area/project_a`目录下创建一个新的文本文件`notes.txt`,并添加一些内容(例如:`echo "Initial notes for project A" > work_area/project_a/notes.txt`)。 +6. **复制目录**:递归地复制`work_area/project_a`目录到`work_area/project_b`,并命名为`project_a_backup`。 +7. **列出文件并按大小排序**:列出`work_area/docs`目录下的所有文件,并按文件大小降序排列。 +8. **删除所有文件**:删除`work_area/docs`目录下所有文件。 +9. **删除目录**:假设您不再需要`work_area/project_b`目录及其所有内容,请递归地强制删除它。 +10. **清理空目录**:清理`work_area`目录,删除其中所有的空目录(注意:不要删除非空的目录)。 +11. **创建别名**:回到您的家目录,并创建一个别名`llh`,该别名能够列出当前目录下文件和目录的长格式列表,并以人类可读的格式显示文件大小(类似于`ls -lh`命令)。 + +### 代码 + +```js +yangyang@hecs-66115:~$ ls -la +total 32 +drwxr-xr-x 4 yangyang yangyang 4096 May 23 12:21 . +drwxr-xr-x 3 root root 4096 May 21 23:55 .. +-rw------- 1 yangyang yangyang 2606 May 23 12:19 .bash_history +-rw-r--r-- 1 yangyang yangyang 220 May 21 23:55 .bash_logout +-rw-r--r-- 1 yangyang yangyang 3526 May 21 23:55 .bashrc +drwx------ 3 yangyang yangyang 4096 May 23 12:21 .config +-rw-r--r-- 1 yangyang yangyang 0 May 23 12:21 .hidden.txt +-rw-r--r-- 1 yangyang yangyang 807 May 21 23:55 .profile +-rw-r--r-- 1 yangyang yangyang 0 May 23 12:21 Visible1.txt +-rw-r--r-- 1 yangyang yangyang 0 May 23 12:21 Visible2.txt +drwxr-xr-x 3 yangyang yangyang 4096 May 22 00:00 学习资料 +yangyang@hecs-66115:~$ mkdir work_area && cd work_area && mkdir project_a && mkdir project_b && mkdir docs +yangyang@hecs-66115:~/work_area$ pwd +/home/yangyang/work_area +yangyang@hecs-66115:~/work_area$ ^C +yangyang@hecs-66115:~/work_area$ mv /home/yangyang/.hidden.txt /home/yangyang/work_area/docs +yangyang@hecs-66115:~/work_area$ mv /home/yangyang/Visible1.txt /home/yangyang/work_area/docs +yangyang@hecs-66115:~/work_area$ mv /home/yangyang/Visible2.txt /home/yangyang/work_area/docs +yangyang@hecs-66115:~/work_area$ touch notes.txt && echo "88888888888" > work_area/project_a/notes.txt +-bash: work_area/project_a/notes.txt: No such file or directory +yangyang@hecs-66115:~/work_area$ ls +docs notes.txt project_a project_b +yangyang@hecs-66115:~/work_area$ cd project_a +yangyang@hecs-66115:~/work_area/project_a$ touch notes.txt && echo "88888888888" > work_area/project_a/notes.txt +-bash: work_area/project_a/notes.txt: No such file or directory +yangyang@hecs-66115:~/work_area/project_a$ touch notes.txt && echo "88888888888" > work_area/project_a/notes.txt +-bash: work_area/project_a/notes.txt: No such file or directory +yangyang@hecs-66115:~/work_area/project_a$ touch notes.txt && echo "88888888888" +88888888888 +yangyang@hecs-66115:~/work_area/project_a$ cd ../ +yangyang@hecs-66115:~/work_area$ cp project_a /home/yangyang/work_area/project_b -r && cd project_b && mv project_a project_a_backup +yangyang@hecs-66115:~/work_area/project_b$ cd ../ +yangyang@hecs-66115:~/work_area$ cd /home/yangyang/work_area/bocs +-bash: cd: /home/yangyang/work_area/bocs: No such file or directory +yangyang@hecs-66115:~/work_area$ ls -la +total 20 +drwxr-xr-x 5 yangyang yangyang 4096 May 23 12:36 . +drwxr-xr-x 5 yangyang yangyang 4096 May 23 12:32 .. +drwxr-xr-x 2 yangyang yangyang 4096 May 23 12:32 docs +-rw-r--r-- 1 yangyang yangyang 0 May 23 12:36 notes.txt +drwxr-xr-x 2 yangyang yangyang 4096 May 23 12:36 project_a +drwxr-xr-x 3 yangyang yangyang 4096 May 23 12:42 project_b +yangyang@hecs-66115:~/work_area$ ls -laS +total 20 +drwxr-xr-x 5 yangyang yangyang 4096 May 23 12:36 . +drwxr-xr-x 5 yangyang yangyang 4096 May 23 12:32 .. +drwxr-xr-x 2 yangyang yangyang 4096 May 23 12:32 docs +drwxr-xr-x 2 yangyang yangyang 4096 May 23 12:36 project_a +drwxr-xr-x 3 yangyang yangyang 4096 May 23 12:42 project_b +-rw-r--r-- 1 yangyang yangyang 0 May 23 12:36 notes.txt +yangyang@hecs-66115:~/work_area$ rm -f* +rm: invalid option -- '*' +Try 'rm --help' for more information. +yangyang@hecs-66115:~/work_area$ rm -r project_b +yangyang@hecs-66115:~/work_area$ rm -d work_area/ +rm: cannot remove 'work_area/': No such file or directory +yangyang@hecs-66115:~/work_area$ cd ../ +yangyang@hecs-66115:~$ rm -d work_area/ +rm: cannot remove 'work_area/': Directory not empty +yangyang@hecs-66115:~$ cd home +-bash: cd: home: No such file or directory +yangyang@hecs-66115:~$ ls +work_area 学习资料 +yangyang@hecs-66115:~$ cd ../ +yangyang@hecs-66115:/home$ vim .bashrc + +[1]+ Stopped vim .bashrc +yangyang@hecs-66115:/home$ alias llh='ls -lh' +yangyang@hecs-66115:/home$ ^C +yangyang@hecs-66115:/home$ + +``` + diff --git "a/21 \346\217\255\351\230\263\344\270\275/20240522 \347\254\224\350\256\260.md" "b/21 \346\217\255\351\230\263\344\270\275/20240522 \347\254\224\350\256\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..8c62ab6da82e9c4cfa74f29460a830be03ef409e --- /dev/null +++ "b/21 \346\217\255\351\230\263\344\270\275/20240522 \347\254\224\350\256\260.md" @@ -0,0 +1,271 @@ +在Linux系统中,你可以使用以下命令对文件夹和文件进行管理: + +1. **ls**:列出目录内容。 + + ```bash + ls #列出当前目录下的文件和目录 + ls /home/user #列出指定目录下的文件和目录 + ls -d 文件夹A # 列出文件夹A本身的信息,而不是其它下面的目录和内容 + ls -a # all 列出当前目录下的所有文件和目录,包括隐藏文件/目录 + ls -l #以长格式列出当前目录下的文件和目录,包括权限、所有者、组、大小、创建日期等信息 + ls -h # 以易读的方式列出当前目录下的文件和目录,将文件大小以KB、MB\GB等单位表示 + ls -t # t->time 根据修改时间排序列出当前目录下的文件和目录 + ls -r # r -> reverse 反向排序列出当前目录下的文件和目录 + ls -S # S -> Size 根据文件大小排序列出当前目录下的文件和目录 + ls -R # 递归列出当前目录及其子目录下的所有文件和目录 + ls --color # --color(英文全拼:colorize 给着色 ) + # 以不同颜色区分不同类型的文件,例如蓝色表示目录、绿色表示可执行文件等。 + + ## 扩展如何修改环境变量 家目录下的自己的文件下,使用ls -a 显示所有文件,即可看到.bashrc这个环境变量的配置文件。将# alias ll='ls -l' 前的#号删除,并保存文件。最后要生效,就要退出帐号一次,再登录,即可使用ll来代替ls -l + alias la='ls -a' + alias l='ls -CF' + + ``` + +​ + +2. **cd**:改变当前目录。 + + - 进入某个目录:`cd 目录名` + - 返回上一级目录:`cd ..` + - 返回家目录:`cd ~` 或者 `cd ` (啥也不跟): /home/用户名 + - 返回上次所在目录:`cd -` + +3. **pwd**:显示当前工作目录的绝对路径。 + + ```bash + pwd # 显示当前工作目录的绝对路径 + dir1 = $(pwd) # 将当前工作目录路径保存到变量中(在Shell脚本中常用) + echo $dir1 + ``` + + + +4. **mkdir**:创建新目录。 + + - 示例:`mkdir 目录名` + + ```bash + #场景:在当前位置创建一个新的目录 + mkdir 目录名 # 创建一个新目录 + + mkdir 路径/目录名 # 在指定路径下创建目录 + + #场景:在创建目录的同时,如果父目录不存在,则一并创建父目录。 + mkdir -p 父目录/新目录 # 创建多个目录,包括父目录(如果不存在) + # 通常在写脚本的时候,为避免已存在,或不存在某目录后续命令无法继续执行,在mkdir的时候,会加-p选项 + + #场景:创建一个具有特定权限的目录,可以用于设置目录的读写执行权限。 + mkdir -m 权限模式 目录名 # 创建具有特定权限的目录 + # mkdir -m 777 mydir + #场景:需要一个文件夹 + mkdir -p /tmp/新目录 # 创建临时目录,不长期保留,与用户文件隔离,避免暴露用户 + ``` + + + +5. **rmdir**:删除空目录。 + + - 示例:`rmdir 目录名` ,只能删除空的目录 + +6. **rm**:删除文件或目录。 + + ```bash + # ------------------- 删除文件 ------------------- + rm -i 文件名 # 删除指定的文件,删除前会询问是否删除(y 确认,n 取消)。 + rm -f 文件名 # 强制删除指定的文件,不会进行询问。 + rm -f a.txt b.txt # 同时删除多个文件:可以在命令中添加多个文件名,用空格分隔,如 。 + rm -f a* # 删除所有以 a 开头的文件 ;删除以特定字符或模式开头的文件:使用通配符* 。 + rm -f .* # 删除隐藏文件:使用 .*,如 (但请注意,这可能会删除当前目录下的所有隐藏文件,包括 . 和 ..,所以请谨慎使用)。 + ## 扩展 + mv example.txt .example.txt # 隐藏文件 + mv mydir .mydir # 隐藏目录 + # ------------------- 删除目录 ------------------- + rmdir 目录名 # 仅删除空的目录。 + rm -r 目录名 # 递归地删除目录及其子目录和文件,删除前会询问是否删除。 + rm -rf 目录名 # 递归地强制删除目录及其子目录和文件,不会进行询问。 + rm -rfv 目录名 # 除了递归强制删除外,还会显示删除的详细步骤。 + 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文件夹和文件管理相关操作命令,通过它们你可以进行各种文件和目录的管理 \ No newline at end of file