diff --git "a/\350\214\203\347\220\263\346\226\271/20240516Linux\347\232\204\347\233\256\345\275\225\347\273\223\346\236\204.md" "b/\350\214\203\347\220\263\346\226\271/20240516Linux\347\232\204\347\233\256\345\275\225\347\273\223\346\236\204.md" new file mode 100644 index 0000000000000000000000000000000000000000..fcf6948c2080a25aaf112cc068a9706ef1abee2a --- /dev/null +++ "b/\350\214\203\347\220\263\346\226\271/20240516Linux\347\232\204\347\233\256\345\275\225\347\273\223\346\236\204.md" @@ -0,0 +1,49 @@ +## 文件系统的最顶层是由根目录开始的,系统使用“/”来表示根目录,目录名或文件名都是区分大小写的 +1. /bin/ + + 存放系统命令,普通用户和 root 都可以执行。 +2. /boot/ + + 系统启动目录,保存与系统启动相关的文件,如内核文件和启动引导程序(grub)文件等 +3. /dev/ + + 设备文件保存位置 +4. /etc/ + + 配置文件保存位置。系统内所有采用默认安装方式的服务配置文件全部保存在此目录中,如用户信息、服务的启动脚本、常用服务的配置文件等 +5. /home/ + + 普通用户的主目录(也称为家目录)。在创建用户时,每个用户要有一个默认登录和保存自己数据的位置,就是用户的主目录,所有普通用户的主目录是在 /home/ 下建立一个和用户名相同的目录。 +6. /lib/ + + 系统调用的函数库保存位置 +7. /media/ + + 挂载目录。系统建议用来挂载媒体设备,如软盘和光盘 +8. /mnt/ + 挂载目录。早期 Linux 中只有这一个挂载目录,并没有细分。系统建议这个目录用来挂载额外的设备,如 U 盘、移动硬盘和其他操作系统的分区 +9. /misc/ + + 挂载目录。系统建议用来挂载 NFS 服务的共享目录。虽然系统准备了三个默认挂载目录 /media/、/mnt/、/misc/,但是到底在哪个目录中挂载什么设备可以由管理员自己决定。 +10. /opt/ + 第三方安装的软件保存位置。这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录中。 +11. /root/ + + root 的主目录。普通用户主目录在 /home/ 下,root 主目录直接在“/”下 +12. /sbin/ + 保存与系统环境设置相关的命令,只有 root 可以使用这些命令进行系统环境设置,但也有些命令可以允许普通用户查看 +13. /srv/ + + 服务数据目录。一些系统服务启动之后,可以在这个目录中保存所需要的数据 +14. /tmp/ + 临时目录。系统存放临时文件的目录,在该目录下,所有用户都可以访问和写入。建议此目录中不能保存重要数据,最好每次开机都把该目录清空 +15. /lost+found/ + + 当系统意外崩溃或意外关机时,产生的一些文件碎片会存放在这里。在系统启动的过程中,fsck 工具会检查这里,并修复已经损坏的文件系统。这个目录只在每个分区中出现,例如,/lost+found 就是根分区的备份恢复目录,/boot/lost+found 就是 /boot 分区的备份恢复目录 +16. /proc/ + + 虚拟文件系统。目录中的数据并不保存在硬盘上,保存到内存中。主要保存系统的内核、进程、外部设备状态和网络状态等。如 /proc/cpuinfo 是保存 CPU 信息的,/proc/devices 是保存设备驱动的列表的,/proc/net 是保存网络协议信息的 +17. /sys/ + + 虚拟文件系统。目录中的数据都保存在内存中,主要保存与内核相关的信息 +#### Local 目录是 Linux 系统中的一个隐藏目录,用于存放应用程序数据 \ No newline at end of file diff --git "a/\350\214\203\347\220\263\346\226\271/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\214\203\347\220\263\346\226\271/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..3e932dea9dcd9bd489920822ad92ca971f6bb57d --- /dev/null +++ "b/\350\214\203\347\220\263\346\226\271/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,35 @@ +## ls :列出目录下文件,文件内容 ++ -l(long format):以长格式显示文件和目录的详细信息,包括权限、链 接数、所有者、所属组、大小、最后修改日期和时间以及文件名。 ++ -a (all):显示包括以点(.)开头的隐藏文件在内的所有文件和目录。 ++ -h (human-readable):与 -l 结合使用时,以易读的格式(如 KB, MB)显示文件大小 ++ -R (recursive):递归列出目录内容,显示指定目录及其所有子目录的 文件和目录。 ++ -t (time):按修改时间排序显示文件和目录,最新的排在前面。 ++ -S*(size):按文件大小排序,大的文件排在前面,默认是降序 ++ -r (reverse):反转排序顺序,通常与其他排序选项(如 -t 或 -S)一 起使用。 ++ -d (directory):当指定的项是目录时,仅显示目录名称本身,而不是其 内容。 ++ -X:按扩展名排序。 +## cd +1、进入某个目录:cd 目录名 + +​2、返回上一级目录:cd .. + +​3、返回家目录:cd ~ 或者cd + +​4、返回上一次所在目录:cd - +## pwd 显示当前路径 +## mkdir ++ -p:递归创建目录,如果没有指定的上级目录,会一并创建。 ++ -m :设置新创建目录的权限。MODE是一个八进制数,用于指定目录 的权限位。 ++ -v:在创建每个目录时显示信息,这有助于确认哪些目录被成功创建。 ++ mkdir /tmp/新目录 :创建临时文件 ++ rmkdir 目录名:只能删除空目录 +### rm ++ -f:强制删除文件或目录,不提示确认,即使文件设为只读也会删除, 且不显示不存在文件的错误信息。 ++ -i:在删除每一个文件或目录前提示用户确认,以避免误删 ++ -r, -R:递归删除目录及其包含的所有内容,适用于删除非空目录 ++ -v:显示正在删除的文件或目录的信息,提供详细的删除过程反馈。 ++ -f a*:删除所有以a开头的文件 ++ -f .*:删除隐藏文件 ++ -rf:递归地强制删除 ++ rm -d 目录名:只删除空目录 ++ rm -f a.txt b.txt:同时删除多个文件 \ No newline at end of file diff --git "a/\350\214\203\347\220\263\346\226\271/20240523cp\345\222\214rm.md" "b/\350\214\203\347\220\263\346\226\271/20240523cp\345\222\214rm.md" new file mode 100644 index 0000000000000000000000000000000000000000..8e68d166607b8e141e811c65fa67f4bd5843eebf --- /dev/null +++ "b/\350\214\203\347\220\263\346\226\271/20240523cp\345\222\214rm.md" @@ -0,0 +1,36 @@ +## cp 复制文件与目录 +- 复制文件:cp 源文件 目标文件 +- 复制文件到目录: cp 源文件 目标目录 +- 复制目录:cp -r 源目录 目标目录 +### cp 常用选项 +1. -r 或 -R (递归): 用于复制目录及其内容,包括子目录和文件。 +2. -i (交互式): 在覆盖已存在的文件之前提示用户确认,避免不小心覆盖重要文件。 +3. -f (强制): 强制覆盖已存在的文件,不会提示用户。 +4. -u (更新): 只有当源文件比目标文件新或者目标文件不存在时才复制,适用于增量备份。 +5. -v (详细): 显示复制操作的过程,包括被复制的文件名,有助于监控复制进度。 +6. -p (保留): 保留源文件的属性,如权限、所有权、时间戳等。 +7. -a (归档): 类似于 `-pdr` 的组合,递归复制目录并保留文件属性,但不复制特殊文件如软链接。 +## mv:用于移动,重命名文件或目录。 +- 移动文件或目录:mv 源目录/文件 目标目录 +- 重命名文件或目录:mv 原文件名 新文件名 +### 原则 +1. 目标不存在,一定重命名 +2. 当是移动时,只能是文件移到目录 +### 区分cp 是移动还是重命名 +- 源文件 - 目标文件 + + 目标已经存在:源文件替换了目标文件 + + 目标不存在:直接将源文件改名为目标文件 +- 源文件 -目标目录 + + 目标存在:将源文件移到目标目录里 + + 目标不存在:将源文件改为目标名 +- 源目录 - 目标目录 + + 目标已存在:将源移到目标里 + + 已经不存在:源目录改为目标目录名 +### 常用选项 + -i: 在覆盖已存在的文件或目录之前提示用户确认,以避免意外覆盖。 + -f: 强制移动操作,如果目标文件已存在,则不提示直接覆盖。 + -u: 只有当源文件比目标文件新或者目标文件不存在时才移动或重命名。 + -v: 显示详细的操作过程,包括移动的文件名,便于追踪操作进度。 + -b: 在覆盖文件前,为已存在的文件创建一个备份。默认情况下,备份文件的名称会加上一个波浪线(如 file.txt~)。 + -s: 指定备份文件使用的后缀,代替默认的波浪线。 + -t: 指定目标目录,适用于移动多个文件到同一目录下。 \ No newline at end of file diff --git "a/\350\214\203\347\220\263\346\226\271/20240525\347\273\235\345\257\271\347\233\270\345\257\271\350\267\257\345\276\204.md" "b/\350\214\203\347\220\263\346\226\271/20240525\347\273\235\345\257\271\347\233\270\345\257\271\350\267\257\345\276\204.md" new file mode 100644 index 0000000000000000000000000000000000000000..624177ceaf8407d90e7dd5f2194214c4e1d6f656 --- /dev/null +++ "b/\350\214\203\347\220\263\346\226\271/20240525\347\273\235\345\257\271\347\233\270\345\257\271\350\267\257\345\276\204.md" @@ -0,0 +1,9 @@ +## 绝对路径 +- 定义: 从根目录 / 开始的完整路径,用于唯一确定文件或目录的位置。 + + /home /用户/目录 + + ~/用户/目录 +## 相对路径 +- 定义 : 相对于当前工作目录的路径,用于在当前目录的基础上指向文件或目录。 +- ./ 代表当前目录 +- ../ 返回上一级 +## 练习:用绝对路径和相对路径写23号的练习与作业。 \ No newline at end of file diff --git "a/\350\214\203\347\220\263\346\226\271/20240527\346\237\245\350\257\242\345\221\275\344\273\244.md" "b/\350\214\203\347\220\263\346\226\271/20240527\346\237\245\350\257\242\345\221\275\344\273\244.md" new file mode 100644 index 0000000000000000000000000000000000000000..ff98aecd6c32063b14dcd14b6b147356c89b254a --- /dev/null +++ "b/\350\214\203\347\220\263\346\226\271/20240527\346\237\245\350\257\242\345\221\275\344\273\244.md" @@ -0,0 +1,73 @@ +## find: 用于查找文件和命令,实时更新 +- find 路径 匹配条件 +- -name "" 按文件名查找 , 支持通配符 * 和 ? +- -type f(文件) 、d(目录) 、l () 按文件类型查找 +- -size +- c (字节)、w(字数)、b(块数)、k(KB)、M(MB)或 G(GB) 按文件大小查找 +- -empty:查找空文件,即文件大小为0的文件。 +- mtime +-days 按时间查找, + 表示天数内,- 表示天数外。 + + 按修改日期查询: -mtime +1. 按名称查找 + find /path -name 'filename' +2. 按名称查找目录 + find /path -type d -name 'filename' +3. 查找所有.txt文件 + find /path -type d -name '*.txt' +4. 查找大于1MB的文件 + find /path -type f -size +1MB +5. 查找最近7天内修改过的文件 + find /path -f -mtime -7 +### 高级查询 +- find 路径 查找方式 -exec shell 命令 {} \; +- + 可以显示文件名 。 +## find 和grep 结合使用:可以灵活地查找文件及其内容 +1. 查找包含特定字符串pattern的所有.txt文件 + find /path -type f -naem "*.txt" -exec grep "pattern" {} +; +## grep:用于在文件内容中搜索匹配的字符串 +- grep 参数 "内容" 查找目录或文件 +- 是linux 中的一个文本搜索工具, 可以用于在文件中查找特定的关键字。 +- 参数 ++ -r 若是目录, 则可以递归查询 ++ -i 忽略大小写进行查询 +1. 在文件中搜索字符串 + grep "关键字" 文件名 +2. 忽略大小写查找 + grep -i "关键字" /path +3. 显示不包含关键字的行 + grep -v "关键字" 文件名 +4. 显示包含关键字的文件名 + grep -l "关键字" 文件名 +5. 技术匹配的行数 + grep -c "关键字" 文件名 +6. 显示匹配行的行号 + grep -n "关键字" 文件名 +7. 仅显示匹配部分 + grep -o "关键字" 文件名 +8. 显示匹配行及后面的2行 + grep -A "关键字" 文件名 +9. 显示匹配行及前面2行 + grep -B "关键字" 文件名 +10. 显示匹配行及前后2行 + grep -C "关键字" 文件名 +## which:用于查找可执行文件的位置,它在用户的PATH环境变量走搜索命令 +- which 要查询的命令 + + 查询可执行程序的路径。 + + 查询命令是否存在 +## whereis:查找可执行文件,源代码和手册页的位置 +- which 要查询的命令 +1. 查找ls 命令的可执行文件、源代码文件和手册页的位置 + whereis ls +## location :通过预建的数据库,快速查找文件的目录。速度比find快,但是需要实时更新数据库。 +1. 查找文件名中包含"filename" 的所有文件 + location filename +2. 查找所有.txt文件 + location "*.txt" +## type:显示文件的类型,例如是否是内置命令、别名或者可执行的文件 +- -type ls 显示ls命令的类型 +- -type f 文件类型为文件 +- -type d 文件类型为目录 +## start :用于显示文件或者文件系统的详细信息、大小、权限、修改时间等 +1. 显示文件的详细信息 + stat filnamem +## 把搜索的结果 保存在 ... 当中 , 可以使用 命令 重定向。 +> (如果... 已经存在, ... 会被覆盖掉) +>> (另外创建一个..., 原来的... 不会被覆盖。) diff --git "a/\350\214\203\347\220\263\346\226\271/20240529\346\237\245\347\234\213\346\226\207\344\273\266\345\206\205\345\256\271.md" "b/\350\214\203\347\220\263\346\226\271/20240529\346\237\245\347\234\213\346\226\207\344\273\266\345\206\205\345\256\271.md" new file mode 100644 index 0000000000000000000000000000000000000000..12b5881a678300177c73112dd7a6a8db44f362fb --- /dev/null +++ "b/\350\214\203\347\220\263\346\226\271/20240529\346\237\245\347\234\213\346\226\207\344\273\266\345\206\205\345\256\271.md" @@ -0,0 +1,71 @@ +## cat : 正向显示整个文件的内容,适用于小文件 +- 用法: + + cat [选项] 文件名 ... +- 例如: + + cat file1name.txt +- 选项: + + -n:显示行号 +- 可以连接多个文件例如: + + cat file1.txt file2.txt +## tac:反向显示整个文件的内容,适用于小文件 +- 用法: + + tac [选项] 文件名 ... +- 例如: + + tac file1name.txt +## More: 先加载整个文件,再分页显示,适用两页以上的大文件查看 +- 用法: + + more [选项] 文件名 ... +- 例如: + + more file1name.txt +- 功能: + + 空格键向下翻页,回车显示下一行,q键退出 +## less:加载一页,就显示一页,边加载边显示,可以导航、搜索或者上下翻滚等适用两页以上的大文件查看 +- 用法: + + less [选项] 文件名 ... +- 例如: + + less file1name.txt +- 功能: + + 上下键进行翻滚,/搜索,n下一个匹配项,N上一个匹配项,q退出 + +- 选项: + + -N:显示行号 + -M:显示长提示符、文件名、行号、百分比 + -MN:内容中显示行号,底部显示文件名、行号和百分比 + -m、i:忽略大小写 + +:可以跳转到指定行数 +## head:查看文件内容头部前10行 +- 用法: + + head [选项] 文件名 ... +- 例如: + + head file1name.txt +- 选项: + + -n:指定行数,-n后面跟着数字,比如-n 20,表示前面20行 + -q:不显示文件名 + -f:实时查看文件增长 +## tail:跟head相反,查看文件内容尾部后10行 +- 用法: + + tail [选项] 文件名 ... +- 例如: + + tail file1name.txt +- 选项: + + -n:指定行数,-n后面跟着数字,比如-n 20,表示前面20行 +- nl:给文件内容加行号,并显示全部内容 diff --git "a/\350\214\203\347\220\263\346\226\271/20240530cut\345\221\275\344\273\244.md" "b/\350\214\203\347\220\263\346\226\271/20240530cut\345\221\275\344\273\244.md" new file mode 100644 index 0000000000000000000000000000000000000000..5d20d0d2ad8aec36897ae38e4e585e61cc0633bf --- /dev/null +++ "b/\350\214\203\347\220\263\346\226\271/20240530cut\345\221\275\344\273\244.md" @@ -0,0 +1,131 @@ +## sed +- -e 需要执行的sed命令 +- -i 直接修改文件内容(sed 不是直接修改文件) +1. 替换文件内容 + + sed 选项 命令 文件 +2. 替换文件内容,s 表示替换 + + sed "s/旧内容/新内容" 文件 + +3. 将替换好的内容存放在另一个文件 + + sed "s/旧内容/新内容" 需要替换内容的文件 > 存放的文件 +4. 使用通配符替换 +- * 任意字符串,将1 中间任意字符串 1替换成111 + + sed "s/1*1/111" 文件 +- ^指定字符串 开头为指定字符串替换为222 + + sed "s/^1/222" 文件 +## cut +- 从每行中删除部分字段并输出剩余部分 +- -f 指定要提取的字段 +- -d 指定字段分隔符 +- cut 选项 文件名 +1. 提取文件内容 + + cut -f 指定行数(,指定行数) 文件 +2. 指定分隔符提取文件分隔符前的内容 + + cut -d ',' -f 指定位置分隔符(数字代表位置,按列提取) 文件 +## join +- -t 指定字段分隔符 +- -1 指定第一个文件的连接字段 +- -2 指定第二个文件的连接字段 +1. 将指定字段合并两个文件的行 + + join 选项 文件1 文件2 + +2. 根据共同字段进行连接 + + join 文件1 文件2 +3. 使用制表符作为字段分隔符连接文件 + + join -t ':' -1 指定字段 -2 指定字段 文件1 文件2 + 连接结果 + 张三:19岁:180cm:1班:80分 + 李四:20岁:170cm:2班:90分 +4. -t $'\t' 指定空格 +## sort +- 排序文件内容(正向) + + sort 文件 + +- 反向排序整理文件 + + sort -r 文件 +## paste +- 合并文件的行,每行由指定的分隔符分割 +- -d 指定各行之间的分隔符 +- paste 选项 文件1 文件2 +1. 合并文件 + + paste 文件1 文件2 +2. 用逗号作为分隔符合并文件 + + paste -d ',' 文件1 文件2 +## fmt +- 简化文本格式 +- -w 指定行宽度 +- fmt 选项 文件名 +1. 格式化指定字符宽度 + fmt -w 指定字符宽度 文件 +## column +- 输入文本格式化为多列输出 +- -t 使用表格格式输出 + column 选项 文件名 +## tr +- 可以回车使用echo写入文件 +- echo '内容' > 文件 +- ctrl + d 退出 +## uniq +- 除去文件的连续重复行,显示文件中的唯一行 +- -c 显示每行重复次数 +- -d 仅显示重复行 +- -u 仅显示不重复行 +- uniq 选项 文件 +1. 去除文件的重复行 + + uniq 文件 + +2. 显示文件中不重复行及其出现次数 + + uniq -c 文件 +## split +- 大文件分割成小文件 +- -l 指定每个输出文件的行数 +- -b 指定每个输出文件的字节数 +- split 选项 输入文件 输出文件前缀 +1. 将文件按指定行数分割文件 + + split -l 指定行数 文件 + +2. 将文件按指定大小分割文件 + + split -b 指定文件大小 文件 +## wc +- 计算文件中的字节数、字数和行数 +- -c 计算字节数 +- -w 计算字数 +- -l 计算行数 +- wc 选项 文件 +1. 统计文件 + + wc 文件 +2. 仅统计文件 + + wc -l 文件 +## ps +- 查看系统中运行的进程以及它们的状态和资源占用情况 +- aux 显示所有进程的详细 +- -e 显示所有进程 +- -f 显示完整格式 +- ps 选项 +## pidof +- 根据进程名查找对应的进程id + + pidof 进程名 + kill +1. 向指定的进程发送信号,终止进程 + kill 进程id \ No newline at end of file diff --git "a/\350\214\203\347\220\263\346\226\271/20240601sed.md" "b/\350\214\203\347\220\263\346\226\271/20240601sed.md" new file mode 100644 index 0000000000000000000000000000000000000000..6d5c3d577ca4820b3df46dee670d952122d46490 --- /dev/null +++ "b/\350\214\203\347\220\263\346\226\271/20240601sed.md" @@ -0,0 +1,111 @@ +## sed命令 +- 语法: + + sed [选项] '命令' 文件 +- 常用选项 + + -e:直接在命令行模式中执行多个sed命令 + + -f:从指定的文件中读取sed命令 + + -i:直接编辑文件内容 + + -n:禁止自动打印模式空间内容 +### 1.txt内容 + + i like a + he like b or b + she like g b + we like f a aaa +### 替换 +1. 第一种替换 +- 替换第2行 + + sed 's/旧/新/' 1.txt + +- 替换第三行 + + sed 's/旧/新/' 1.txt + +- 如果全部替换第二行的b + + sed 's/b/香蕉/g' 1.txt + +#### g结尾:替换所有,没有g:只替换行的第一个 +2. 第二种:通过关键字替换 + + sed '/关键字/s/旧/新/' 文件名 + +### 例如: + +- 通过关键字aaa,将a替换成苹果 + + sed '/aaa/s/a/苹果/' 1.txt +- 通过关键字he,将所有的b全部替换成香蕉 + sed '/^he/s/b/香蕉/g' 1.txt +- 通过关键字he,将第二个的b替换成香蕉 + + sed '/^he/s/b/香蕉/2' 1.txt +- 将第三行的b替换成香蕉 + sed '3s/b/香蕉/' 1.txt +#### 正则用法 ^ 字符串或行的开头 $ 字符串或行的结尾 + +### 删除:d + sed 'd' 1.txt 删除所有行 + sed '2d' 1.txt 删除第二行 + sed '/关键字/d' 通过关键字删除关键字所在的行 + sed '/aaa/d' 1.txt通过关键字aaa删除所在的行 +### 打印:p +- 打印关键字所有匹配的行 + sed -n '/关键字/p' +#### 例如:打印关键字aaa所有匹配的行 + sed -n '/aaa/p' 1.txt +### 插入行 + i\内容:在指定位置前面插入一行 + sed 'i\内容' 文件名 +- 例如:在第二行前面插入 + sed '2i\we dot like b' 1.txt + sed '/关键字/i\内容' 文件名 +- 例如:在关键字aaa前面加入一行 + sed '/aaa/i\she very happy' 1.txt + /^$/内容:表示在空行前加入一行 +- 例如: + sed '/^$/i\she like it' 1.txt + a\内容:在指定位置后面插入一行 + + sed 'a\内容' 文件名 //在所有行后面插入一行 +- 例如:在第二行后面插入 + sed '2a\we dot like b' 1.txt + sed '/关键字/a\内容' 文件名 +- 例如:在关键字aaa前面加入一行 + sed '/aaa/a\she very happy' 1.txt +#### /^$/内容:表示在空行前加入一行 +- 例如: + sed '/^$/a\she like it' 1.txt +- c\内容:在指定位置这一行替换一整行 + + sed 'c\she like it' 1.txt //将所有行都替换成新内容 + sed '2c\she like it' 1.txt //将第二行替换成新内容 +- -i:将执行结果保存回原文件 +- -f:读取脚本 +#### 将sed命令保存到一个文件中,再用-f读取 + +- 例如: + +1. 创建一个2.txt文件,在里面编辑文件,比如编辑: + + /aaa/d //删除包含aaa所匹配行 +2. 执行2.txt这个脚本 + + sed -f 2.txt 1.txt //使用2.txt中的命令对1.txt进行处理 +3. 执行多个sed命令 + -e:每个命令前加-e + +- 例如:通过关键字aaa所在行的a替换成苹果,将he所在行的b替换成香蕉 + + sed -e '/aaa/s/a/苹果/' -e '/^he/s/b/香蕉/' 1.txt + ;号:命令1;命令2;命令3; + +- 例如: + + sed '/aaa/s/a/苹果/' 1.txt; sed '/^he/s/b/香蕉/' 1.txt \ No newline at end of file diff --git "a/\350\214\203\347\220\263\346\226\271/20240603awk\345\221\275\344\273\244.md" "b/\350\214\203\347\220\263\346\226\271/20240603awk\345\221\275\344\273\244.md" index 1b2790d88600885375ea1de9e735534f702aa717..04b493ddbbb0c561cf5ffef2e5da8a92ad603499 100644 --- "a/\350\214\203\347\220\263\346\226\271/20240603awk\345\221\275\344\273\244.md" +++ "b/\350\214\203\347\220\263\346\226\271/20240603awk\345\221\275\344\273\244.md" @@ -1,15 +1,18 @@ -## 语法 +## awk: +- wk 是一个强大的文本分析工具,它在 Linux/Unix 环境中被广泛使用来处理文本文件。 +- awk 通过逐行读取文件,根据用户提供的模式对每一行执行相应的操作,如打印某些列、计算总和、搜索特定模式等。 +1. 语法 - awk [选项] '脚本' 文件 - + '模式pattern 动作{actions}' + + 脚本:'模式pattern 动作{actions}' + pattern 可以是正则表达式,关系表达式,特定条件。。。 + action 描述匹配模式上的执行语句。 + 包括层序执行的开始时,逐行处理时,程序执行的结束时。awk 'BEGIN { print "开始" } pattern { commands } END { print "结束" }' file - $数字 指定匹配模式的列。 -## 常用选项 +2. 常用选项 - -F '。。。' 指定字段分割符。。。 不指定默认空格\t 做分隔符。 - FS="..." 分隔符。 - OFS="..." 修改分割符 -## 常用模式 +3. 常用模式 - 正则表达式: + /。。。/ 匹配包含指定模式的行 + $2 (!)~ /pattern/ :匹配第2列(不包含)包含关键字pattern的行。 @@ -24,9 +27,77 @@ + && 逻辑and + || 逻辑or + ! 逻辑not -## 常用格式说明符 +4. 常用格式说明符 - %s:字符串 - %f:浮点数 -## 带有宽度和对齐写法 +5. 带有宽度和对齐写法 - %8.2f :字段总宽度为 8,其中小数点后有 2 位的浮点数 +## 基本用法示例 +- 打印所有行 + 1awk '{ print }' file.txt +- 打印指定列 假设文件有若干列,打印第一列和第三列: + + 1awk '{ print $1, $3 }' file.txt +- 基于条件打印 只打印第二列值大于10的行的全部内容: + + 1awk '$2 > 10' file.txt +- 计算总和与平均值 计算某列的总和与平均值(以第一列为例): + + 1awk '{ sum += $1 } END { print "Sum:", sum, "Average:", sum/NR }' file.txt //-其中 NR 是行号变量。 + +- 搜索并打印匹配行 打印包含特定字符串(例如 "error")的行: + + 1awk '/error/ { print }' log.txt +- 替换字段值 将某列中的某个值替换为另一个值(将第三列的 "old_value" 替换为 "new_value"): + + 1awk '{ if ($3 == "old_value") $3 = "new_value"; print }' file.txt +- 使用变量和自定义分隔符 假设文件是以逗号分隔的CSV文件,设置FS(字段分隔符)为逗号,并进行操作: + + 1awk -F ',' '{ print $1 }' csv_file.csv +### 更高级的用法 +- 多条件判断:可以使用逻辑运算符 &&(与)、||(或)进行多条件判断。 +- 函数调用:awk 支持内置函数(如 length()、sqrt())和自定义函数。 +- 循环与条件语句:可以使用 for、while 循环以及 if...else 条件语句。 +- 读写文件:可以直接在 awk 脚本中读取其他文件或输出到新文件。 +- awk 的功能远不止这些,通过组合使用各种功能,可以实现非常复杂的文本处理任务。掌握 awk 可以极大地提高处理文本数据的效率。 +## 假设已有student_scores.csv 文件(后面的演示都基于这个文件),内容如下 +姓名,数学,语文,科学,班级 +张伟,85,92,88,1班 +李娜,78.5,81,79.5,2班 +王强,95,89,94.5,3班 +赵敏,90,72.5,70,2班 +刘洋,88,94,90,1班 +陈刚,74,85,80,1班 +杨梅,91,87,89,3班 +黄磊,55.5,90,86,3班 +周红,76,78,80,2班 +王彬,90,93.5,92,1班 +大王,85,86,45.5,2班 +小王,74,56,88,3 +### 编辑内容 + echo "内容 + > ... + > ... " > 文件名 +### 打印全文: + awk '{print}' student_scores.csv +### 首尾各加一行 + awk 'BEGIN {print "..."} pattern {commands} END {print "... "}' 文本文件 +### 打印包含。。。的一行 + awk '/。。。/ {print $0}' 文本文件 +### 计算平均总成绩 + debain2ban@hecs-338035:~/docs$ cat a.txt + 姓名,数学,语文,科学,班级 + 张伟,85,92,88,1班 + 李娜,78.5,81,79.5,2班 + debain2ban@hecs-338035:~/docs$ awk -F ',' '/张伟/ && NR>1 {print "平均成绩:" ($2+$3+$4)/3}' a.txt + 平均成绩:88.3333 +### 格式化 + debain2ban@hecs-338035:~/docs$ awk 'BEGIN {FS=","} {print $1,$2,$3,$4,$5}' a.txt + 姓名 数学 语文 科学 班级 + 张伟 85 92 88 1班 + 李娜 78.5 81 79.5 2班 + debain2ban@hecs-338035:~/docs$ awk 'BEGIN {FS=",";OFS="\t"} {print $1,$2,$3,$4,$5}' a.txt + 姓名 数学 语文 科学 班级 + 张伟 85 92 88 1班 + 李娜 78.5 81 79.5 2班 diff --git "a/\350\214\203\347\220\263\346\226\271/20240603awk\347\244\272\344\276\213\347\273\203\344\271\240.md" "b/\350\214\203\347\220\263\346\226\271/20240603awk\347\244\272\344\276\213\347\273\203\344\271\240.md" deleted file mode 100644 index 2f8a76b28db53ce91d964e919e5336c1fd65ff78..0000000000000000000000000000000000000000 --- "a/\350\214\203\347\220\263\346\226\271/20240603awk\347\244\272\344\276\213\347\273\203\344\271\240.md" +++ /dev/null @@ -1,40 +0,0 @@ -## 假设已有student_scores.csv 文件(后面的演示都基于这个文件),内容如下 -姓名,数学,语文,科学,班级 -张伟,85,92,88,1班 -李娜,78.5,81,79.5,2班 -王强,95,89,94.5,3班 -赵敏,90,72.5,70,2班 -刘洋,88,94,90,1班 -陈刚,74,85,80,1班 -杨梅,91,87,89,3班 -黄磊,55.5,90,86,3班 -周红,76,78,80,2班 -王彬,90,93.5,92,1班 -大王,85,86,45.5,2班 -小王,74,56,88,3 -### 编辑内容 - echo "内容 - > ... - > ... " > 文件名 -### 打印全文: - awk '{print}' student_scores.csv -### 首尾各加一行 - awk 'BEGIN {print "..."} pattern {commands} END {print "... "}' 文本文件 -### 打印包含。。。的一行 - awk '/。。。/ {print $0}' 文本文件 -### 计算平均总成绩 - debain2ban@hecs-338035:~/docs$ cat a.txt - 姓名,数学,语文,科学,班级 - 张伟,85,92,88,1班 - 李娜,78.5,81,79.5,2班 - debain2ban@hecs-338035:~/docs$ awk -F ',' '/张伟/ && NR>1 {print "平均成绩:" ($2+$3+$4)/3}' a.txt - 平均成绩:88.3333 -### 格式化 - debain2ban@hecs-338035:~/docs$ awk 'BEGIN {FS=","} {print $1,$2,$3,$4,$5}' a.txt - 姓名 数学 语文 科学 班级 - 张伟 85 92 88 1班 - 李娜 78.5 81 79.5 2班 - debain2ban@hecs-338035:~/docs$ awk 'BEGIN {FS=",";OFS="\t"} {print $1,$2,$3,$4,$5}' a.txt - 姓名 数学 语文 科学 班级 - 张伟 85 92 88 1班 - 李娜 78.5 81 79.5 2班 diff --git "a/\350\214\203\347\220\263\346\226\271/20240605vim \347\274\226\350\276\221\345\231\250.md" "b/\350\214\203\347\220\263\346\226\271/20240605vim \347\274\226\350\276\221\345\231\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..12df4fc2325705fbf3062de906ca5f6e5f21c702 --- /dev/null +++ "b/\350\214\203\347\220\263\346\226\271/20240605vim \347\274\226\350\276\221\345\231\250.md" @@ -0,0 +1,33 @@ +## vim命令 +### 在Vim的普通模式(Normal mode)下,你可以进行文件浏览、光标移动、文本操作(如复制、粘贴、删除)等操作。 +1. 光标移动 +- h:向左移动一个字符。 +- l(小写的L):向右移动一个字符。 +- j:向下移动一行。 +- k:向上移动一行。 +- 0(数字零):跳到行首。 +- $:跳到行尾。 +- ^:跳到行内第一个非空白字符。 +- gg:跳到文件开头。 +- G:跳到文件末尾。 +- nG 或 :n:跳到第n行,如20G跳到第20行。 +2. 文本操作 +- x:删除光标下的字符。 +- dd:删除(剪切)当前行。 +- dw:删除(剪切)到单词结尾。 +- daw:删除(剪切)整个单词。 +- p:在光标后粘贴已删除/复制的文本。 +- y 加移动命令:复制文本,如yw复制到单词结尾,yy复制整行。 +- u:撤销上一次操作。 +- Ctrl + r:重做(撤销撤销)。 +### 选择文本(可视模式) +- v:进入字符选择模式,移动光标可以选择文本。 +- V:进入行选择模式。 +- Ctrl + v:进入块选择模式。 +### 查找与替换 +- /pattern:从当前光标位置开始向下查找pattern。 +- ?pattern:从当前光标位置开始向上查找pattern。 +- n:在查找后,跳到下一个匹配处。 +- N:跳到上一个匹配处。 +- :%s/old/new/g:在全部文件中替换所有old为new(需要在命令行模式下执行,替换前确认可用:confirm,即:%, confirm s/old/new/g)。 +## PacVim 游戏 \ No newline at end of file diff --git "a/\350\214\203\347\220\263\346\226\271/20240606ssh\350\257\201\344\271\246\344\273\245\345\217\212https\345\215\217\350\256\256.md" "b/\350\214\203\347\220\263\346\226\271/20240606ssh\350\257\201\344\271\246\344\273\245\345\217\212https\345\215\217\350\256\256.md" new file mode 100644 index 0000000000000000000000000000000000000000..015c9ca2de035bfa0489c779c7d45e9317529e04 --- /dev/null +++ "b/\350\214\203\347\220\263\346\226\271/20240606ssh\350\257\201\344\271\246\344\273\245\345\217\212https\345\215\217\350\256\256.md" @@ -0,0 +1,36 @@ +1. 申请SSL证书 + + 要从证书颁发机构(CA)获取SSL证书和相应的私钥文件。 + + 证书文件(.crt或.pem) + + 私钥文件(.key) + + 可能还包括中间证书或链证书(如果有,通常为.crt) +2. 上传证书文件至服务器 + 使用FTP、SCP或其他方式,将上述文件上传到服务器。推荐存放在/etc/nginx/cert/目录下,例如: + + mkdir /etc/nginx/cert // cert 新建用来存放 ssl + + 上传后缀为.crt文件、后缀为.key文件到ssl目录下 +3. 修改Nginx配置 +编辑Nginx的配置文件,/etc/nginx/nginx.conf.d或/etc/nginx/sites-available/default,或特定站点的配置文件,添加SSL配置。如果已有listen 80;配置段,您需要在新的server块中添加SSL监听: +server { + listen 80; + 。。。 + rewrite ^(.*)$ https://$host$1; // 重定向为https +} +server { + listen 443 ssl;//监听443端口 + server_name your_domain.com;绑定域名 + ssl_certificate /etc/nginx/cert/your_cert.crt;//证书文件 + ssl_certificate_key /etc/nginx/cert/your_key.key;//私钥文件 + root /var/www/oprototype.top; // 网页路径 + index index.html; +} +4. 重启Nginx服务 +保存配置文件后,重启Nginx服务以应用更改: + + systemctl restart nginx +5. 测试SSL配置 +通过访问https://your_domain.com来测试SSL证书是否安装成功。 diff --git "a/\350\214\203\347\220\263\346\226\271/20240606\347\275\221\347\253\231https\345\215\217\350\256\256\345\221\275\344\273\244.md" "b/\350\214\203\347\220\263\346\226\271/20240606\347\275\221\347\253\231https\345\215\217\350\256\256\345\221\275\344\273\244.md" new file mode 100644 index 0000000000000000000000000000000000000000..12d0946bd2736ca2cd729187698a44e25dfe8e31 --- /dev/null +++ "b/\350\214\203\347\220\263\346\226\271/20240606\347\275\221\347\253\231https\345\215\217\350\256\256\345\221\275\344\273\244.md" @@ -0,0 +1,56 @@ +# 常见的Linux 命令 +## Linux关于时间和日期 +- time 查看命令执行时间 + - real 从进程(命令) 开始执行到完成所耗费的 CPU 总时间 + - user 进程 (命令) 执行用户态代码所耗费的 CPU 时间 + - sys 进程 (命令) 在内核态运行所耗费的 CPU 时间 + + time ls +- date :显示或设置系统日期和时间。 + + date "+%Y-%m-%d %H:%M:%S"/ 2024-06-10 15:30:00 +- timedatectl 查看和设置系统时间和日期。 + - 有时区和 NTP(网络时间协议)设置 + - 与date命令不同,设置过的日期时间信息将被写入系统,立即且长期有效,不会随系统重启而失效配置文件 + + NTP:网络时间协议,用于同步时间 + + RTC:实时时钟 +## Linux 关机或重启 +- shutdown:关机或重启 + + -r 指定时间重启计算机 + + -h 指定时间关闭计算机 + + shutdown -h 12:00 系统将在12时准时关机。 + + shutdown -h now 立刻关机。 + + shutdown -r now 立刻重启系统。 + + shutdown -h +10 系统将在10分钟后关机。 + + -p 关闭操作系统, 并调用poweroff 关闭电源 + + -k 向系统中的登录者发送警告信息,并不真正执行关机操作。 + + -c 取消目前正在执行的关机程序。这个选项没有时间参数,但是可以输入一个用来解释的讯息,而这信息将会送到每位系统登录者。 +- halt: 关闭正在运行的Linux 操作系统 + + -n 关机时不执行sync操作,相关操作不写入日志文件‘/var/log/wtmp’中。 + + -w 不真正的关机,仅在日志文件‘/var/log/wtmp’中添加相应的记录。 + + -d 关机,相关操作不写入日志文件‘/var/log/wtmp’中。 + + -f 强制关机,不调用shutdown操作。 + + -i 关机前关掉所有的网络接口。 + + -p 关机后切断系统电源 +- reboot : 重启正在运行的linux操作系统 + + -n 重启时不执行sync操作,相关操作不写入日志文件‘/var/log/wtmp’中。 + + -w 不真正的重启,仅在日志文件‘/var/log/wtmp’中添加相应的记录。 + + -d 重启,相关操作不写入日志文件‘/var/log/wtmp’中。 + + -f 强制重启,不调用shutdown操作。 + + -i重启前关掉所有的网络接口。 +- poweroff: 关闭正在运行的linux操作系统并切断系统电源 + + -n 关机时不执行sync操作,相关操作不写入日志文件‘/var/log/wtmp’中。 + + -w不真正的关机,仅在日志文件‘/var/log/wtmp’中添加相应的记录。 + + -d 关机,相关操作不写入日志文件‘/var/log/wtmp’中。 + + -f 强制关机,不调用shutdown操作。 + + -i 关机前关掉所有的网络接口 +## Linux 操作系统启动运行方式 +- init 0 表示关机。 +- init 6 表示重启。 +- init 1 表示单用户命令行模式。 +- init 2 表示没有网络的多用户命令行模式。 +- init 3 表示多用户命令行模式(推荐使用这个模式)。 +- init 4 表示预留的未使用。 +- init 5 表示图形界面模式(安装有图形界面的系统的默认启动级别)。 +## Linux 下载文件,获取发送数据 +- wget +- curl +## LIU=N \ No newline at end of file diff --git "a/\350\214\203\347\220\263\346\226\271/20240613\351\207\215\345\256\232\345\220\221\344\273\245\345\217\212\347\256\241\351\201\223.md" "b/\350\214\203\347\220\263\346\226\271/20240613\351\207\215\345\256\232\345\220\221\344\273\245\345\217\212\347\256\241\351\201\223.md" new file mode 100644 index 0000000000000000000000000000000000000000..581d229cb326ba4938570acf181e6b62d7c02c0c --- /dev/null +++ "b/\350\214\203\347\220\263\346\226\271/20240613\351\207\215\345\256\232\345\220\221\344\273\245\345\217\212\347\256\241\351\201\223.md" @@ -0,0 +1,55 @@ +## 重定向 + + - 标准输入:由0表示,默认接受来自键盘的输入 + + - 标准输出:由1表示,默认输出到终端窗口 // 一般省略不写 + + - 标准错误:由2表示,默认输出到终端窗口 + +1. 语法: + - command (以下内容) file + - (>):标准输出,重定向到文件,文件内容会被覆盖 + - (>>):重定向到文件,在原有基础上追加内容 + - 2>:错误输出,重定向到文件,进行覆盖 + - 2>>:重定向到文件,追加内容 + - &>:将标准输出和错误输出重定向到文件 + - &>>:将标准输出和错误输出重定向到文件,追加内容 +2. 将标准输出和错误输出重定向到文件写法: + - 覆盖:command &> file 或 command > file 2>&1 + - 追加:command &>> file 或 command >> file 2>&1 +3. 特殊重定向 + - 空设备文件:使用/dev/null丢弃输出。 + + 1command > /dev/null # 丢弃标准输出 + + 2command 2> /dev/null # 丢弃错误输出 + + 3command &> /dev/null # 同时丢弃标准输出和错误输出 +## 输入重定向 + 从文件读取:命令从指定文件而非标准输入(通常是键盘)读取数据 + command < file +### 管道 +- 作用:它允许用户将一个命令的输出直接作为另一个命令的输入,从而实现多个命令的串联,完成复杂的任务处理,操作符是一个竖线字符 | + +- 基本语法: + + 命令的格式为:command1 | command2 + +command1 的标准输出(stdout)被连接到 command2 的标准输入(stdin)。 +这意味着 command1 执行产生的输出数据,不是打印到屏幕上,而是直接“流入”到 command2 中作为处理的输入。 + +示例: + +ps aux | grep nginx \\查找特定进程:查找并显示所有名为 nginx 的进程信息。 +### tee +它从标准输入读取数据,并同时将这些数据复制到标准输出(通常是屏幕)以及一个或多个文件中 + +- 基本用法 + + command | tee file +- 常用选项 + + -a, --append:追加数据到文件末尾,而不是覆盖现有内容。 + +- command | tee -a file + +示例: + + echo "Hello, World!" | tee file1.txt file2.txt \\将 “Hello, World!” 输出到 file1.txt 和 file2.txt 两个文件中,同时也会显示在屏幕上。 \ No newline at end of file diff --git "a/\350\214\203\347\220\263\346\226\271/20240615\347\224\250\346\210\267\344\270\216\346\226\207\344\273\266\346\235\203\351\231\220\347\232\204\347\256\241\347\220\206.md" "b/\350\214\203\347\220\263\346\226\271/20240615\347\224\250\346\210\267\344\270\216\346\226\207\344\273\266\346\235\203\351\231\220\347\232\204\347\256\241\347\220\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..ad3fcdbef1ed2dd12e02b680a4397521e786d7e0 --- /dev/null +++ "b/\350\214\203\347\220\263\346\226\271/20240615\347\224\250\346\210\267\344\270\216\346\226\207\344\273\266\346\235\203\351\231\220\347\232\204\347\256\241\347\220\206.md" @@ -0,0 +1,92 @@ +1. 用户管理 + 1. 分类 + - 超级用户 root ,最高权限,不受一般权限的限制,编号0 ,提示符是 # + - 内置用户 :由系统自动创建 ,编号1-999 + - 普通用户 :我们用root权限手动创建用户,受权限控制 ,编号从1000依次递增 + - 创建普通用户test会自动创建他的编号u ,他原生组g(和用户名同名test),附加组 G (test),初始化的时候一定是u 1000(test), 1000(test),1000(test) + - 普通不能创建普通用户,只有root + - 提示符是 $ + - u user 用户 uid + - group 组 gid + - Group + 2. 用户 + 1. 添加 + - useradd -m -d /home/YYY -s /bin/bash XXX + - adduser + 2. 删除 + - userdel XXX + - userdel -r xxx 删除用户和相关的目录 + 3. 修改 + - usermod -G 组号|组名 XXX : usermod -G stu u15 覆盖原来的附加组(扩展组) + - usermod -aG 组号|组名 XXX : usermod -aG stu u15 保留原有附加组前提下,追加新的附加组 + - usermod -s /bin/aaa u15 + 4. 密码 + - passwd 用户名 root修改指定用户的密码 + - passwd 修改当前登录用户的密码,即自己的密码 + 5. 查询 + - id 用户名 指定用户 + - /etc/passwd + 6. 切换 + - su 仅仅切换了身份,不切换目录和shell等环境 + - su - 完全切换,连环境变量和目录一起切换 + 3. 用户组:编号也是从1000开始 + 1. 添加 + - groupadd student 添加一个组,编号自动的 + - groupadd -g 8888 student2 添加一个组,编号自动的 + 2. 删除 groupdel 组号|名 + 3. 修改 groupmod + 4. 查询 + - /etc/group +2. 文件管理 + - 文件属性:10个字符,连接数或子目录数,文件拥有者,文件所属的用户组,文件大小,修改时间,文件|目录名 + - 10个字符: + - 第1位 文件类型 + - d 目录 + - -普通文件 + - l 连接文件 + - b c s p 等其它文件 + - 后9位分别代表了:三种角色的权限,每3位一组 + - 2-4 拥有者权限 + - 5-7 用户组的权限 + - 8-10 其它人的权限 + - 基本权限 + - 读 r (read) : 打开并显示文件内容,查看目录基本信息 + - 写 w (write) : 文件,可以写入,修改,删除内容,目录:创建,修改,删除文件|目录 + - 执行 x (execute) :文件如果是二进制或脚本文件就可以执行,目录表示可以进入 + - 特殊权限 + - SUID + - GUID + - 隐藏权限 + - lsattr 列出隐藏权限 + - chattr 修改隐藏权限 + - +i 增加,不得任意更动文件或目录的效果 + - -i 消除 + - + - 权限表示 + - 字符 + - 数字 + - r == 4 + - w == 2 + - x == 1 + - 身份表示 + - u 拥有者 (user) + - g 用户组(group) + - o 其它人 (other) + - a 所有人 (all) + - 修改权限 :root可以改任何文件,而拥有者可以改自己拥有文件 + - chmod 要的权限 文件|目录 + - chmod u+w,g-r,o=rw 1.txt + - chmod 755 1.txt + - 修改拥有者 + - chown 用户名 文件名 + - 修改文件所属的用户组 + - chgrp 组名|号 文件|目录 + - sudo + - 修改 /etc/sudoers 文件 + - 将 用户追加到sudo组 :sudo usermod -aG sudo u15 +3. Linux执行命令的过程 + 1. 如果这个命令是绝对路径,就直接执行 + 2. 如果不是, + 1. 查一下是不是别名,是执行对应的命令 + 2. 从环境变量中找这个命令 $PATH中的路径依次查找这个命令 + 3. 本地也没有,就报错了。 diff --git "a/\350\214\203\347\220\263\346\226\271/20240617\345\221\250\346\234\237\344\273\273\345\212\241\347\256\241\347\220\206.md" "b/\350\214\203\347\220\263\346\226\271/20240617\345\221\250\346\234\237\344\273\273\345\212\241\347\256\241\347\220\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..6be658705d35919cf38cf3b1cd13d4d95fd2637f --- /dev/null +++ "b/\350\214\203\347\220\263\346\226\271/20240617\345\221\250\346\234\237\344\273\273\345\212\241\347\256\241\347\220\206.md" @@ -0,0 +1,50 @@ +## Cron工具 +- 用于Debian的周期任务管理 +- 按照用户定义的时间表运行指定的脚本或命令 +## Cron的配置文件 +1. 用户级Cron任务:每个用户都有自己的Cron任务配置文件,位于`/var/spool/cron/crontabs/username`。 +2. 系统级Cron任务:系统级的Cron任务配置文件位于`/etc/crontab`和`/etc/cron.d/`目录下 +## 周期性人物目录 +- `/etc/cron.hourly/` +- `/etc/cron.daily/` +- `/etc/cron.weekly/` +- `/etc/cron.monthly/` +## 编辑Cron任务 +- 编辑Cron任务: + + ```sh + crontab -e # edit + ``` + + 这将打开用户的Cron配置文件进行编辑。 + +- **查看Cron任务**: + + ```sh + crontab -l # list + ``` + + 这将列出用户当前的Cron任务。 + +- **删除Cron任务**: + + ```sh + crontab -r # remove + ``` + + 这将删除用户的所有Cron任务。 +### 语法格式: + + * * * * * command_to_execute # command_to_execute 可以是命令也可以是包含命令的文件 + - - - - - + | | | | | + | | | | +----- 星期几 (0 - 7) (星期天 = 0 或 7) + | | | +------- 月份 (1 - 12) + | | +--------- 日期 (1 - 31) + | +----------- 小时 (0 - 23) + +------------- 分钟 (0 - 59) +1. * : 每一 +2. ,:列出所有 +3. -:开始到结尾 +4. / 间隔 +5. L 最后 diff --git "a/\350\214\203\347\220\263\346\226\271/20240622\347\256\241\347\220\206.md" "b/\350\214\203\347\220\263\346\226\271/20240622\347\256\241\347\220\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git "a/\350\214\203\347\220\263\346\226\271/\344\275\234\344\270\232/20240520\344\275\234\344\270\232.md" "b/\350\214\203\347\220\263\346\226\271/\344\275\234\344\270\232/20240520\344\275\234\344\270\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..4d14213a730dcdfc80c9906b187ab4bd095c82b5 --- /dev/null +++ "b/\350\214\203\347\220\263\346\226\271/\344\275\234\344\270\232/20240520\344\275\234\344\270\232.md" @@ -0,0 +1,80 @@ +### 综合练习题:大学生生活场景中的文件夹和文件管理 + +假设你是一名大学生,现在面临着整理学习资料和课程作业的任务。请按照以下要求完成相关的文件夹和文件管理操作: + +1. 在你的个人文档目录下创建一个名为`学习资料`的文件夹,并进入该文件夹。 +### 个人目录就是/home + +2. 在`学习资料`文件夹中创建一个名为`计算机科学`的文件夹。 + root@hecs-338035:/home# mkdir -p 学习资料/计算机科学 + root@hecs-338035:/home# ls + 学习资料 + +3. 在`计算机科学`文件夹中创建两个子文件夹,分别命名为`课程资料`和`编程项目`。 + root@hecs-338035:/home/学习资料/计算机科学# mkdir 课程资料 && mkdir 编程项目 + root@hecs-338035:/home/学习资料/计算机科学# ls + 编程项目 课程资料 +4. 将你最近的一门计算机科学课程的课件文件(假设文件名为`CS101_第一讲.pdf`)放入`课程资料`文件夹。 + root@hecs-338035:/home/学习资料/计算机科学# cd 课程资料 + root@hecs-338035:/home/学习资料/计算机科学/课程资料# touch CS101_第一讲.pdf + root@hecs-338035:/home/学习资料/计算机科学/课程资料# ls + CS101_第一讲.pdf +5. 在`编程项目`文件夹中创建一个名为`Java项目`的文件夹。 + root@hecs-338035:/home/学习资料/计算机科学/编程项目# mkdir Java + root@hecs-338035:/home/学习资料/计算机科学/编程项目# ls + Java + +6. 在`Java项目`文件夹中创建两个空文件,分别命名为`主程序.java`和`工具类.java`。 + root@hecs-338035:/home/学习资料/计算机科学/编程项目/Java# touch 主程序.java && touch 工具类.java + root@hecs-338035:/home/学习资料/计算机科学/编程项目/Java# ls + 主程序.java 工具类.java + +7. 复制`主程序.java`并命名为`备份_主程序.java`。 + root@hecs-338035:/home/学习资料/计算机科学/编程项目/Java# cp 主程序.java 备份_主程序.java + root@hecs-338035:/home/学习资料/计算机科学/编程项目/Java# ls + 主程序.java 备份_主程序.java 工具类.java + +8. 创建一个名为`Python项目`的文件夹,并将`工具类.java`移动到`Python项目`文件夹中。 + root@hecs-338035:/home/学习资料/计算机科学# mkdir Python项目 + root@hecs-338035:/home/学习资料/计算机科学# ls + Python项目 编程项目 课程资料 + + root@hecs-338035:/home/学习资料/计算机科学/编程项目/Java# mv 工具类.java 编程项目 + + root@hecs-338035:/home/学习资料/计算机科学/编程项目/Java# mv 工具类.java ../../Python项目/ + + root@hecs-338035:/home/学习资料/计算机科学/Python项目# ls + 工具类.java + +9. 列出`计算机科学`文件夹中所有文件和文件夹的内容。 + root@hecs-338035:/home/学习资料/计算机科学# ls -R +.: +Python项目 编程项目 课程资料 + +./Python项目: +工具类.java + +./编程项目: +Java + +./编程项目/Java: +主程序.java 备份_主程序.java + +./课程资料: +CS101_第一讲.pdf + +10. 删除`编程项目`文件夹及其包含的所有内容。 + root@hecs-338035:/home/学习资料/计算机科学# rm -rf 编程项目/ + + root@hecs-338035:/home/学习资料/计算机科学# ls + Python项目 课程资料 + +11. 重命名`Python项目`为`数据分析项目`。 + root@hecs-338035:/home/学习资料/计算机科学# mv Python项目 数据分析项目 + + root@hecs-338035:/home/学习资料/计算机科学# ls + 数据分析项目 课程资料 +12. 最后,列出当前所在目录的路径。 + root@hecs-338035:/home/学习资料/计算机科学# pwd + /home/学习资料/计算机科学 + root@hecs-338035:/home/学习资料/计算机科学# \ No newline at end of file diff --git "a/\350\214\203\347\220\263\346\226\271/\344\275\234\344\270\232/20240523\344\275\234\344\270\232.md" "b/\350\214\203\347\220\263\346\226\271/\344\275\234\344\270\232/20240523\344\275\234\344\270\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..d527ccfa891a28b8ee5847349af8ff37479458a5 --- /dev/null +++ "b/\350\214\203\347\220\263\346\226\271/\344\275\234\344\270\232/20240523\344\275\234\344\270\232.md" @@ -0,0 +1,103 @@ +## 相关和目录可自行创建后再操作 + +1. 在家目录下建立文件exam.c,将文件exam.c拷贝到/tmp这个目录下,并改名为 shiyan.c + + + debain2ban@hecs-338035:~$ cp exam.c tmp/shiyan.c + +2. 在任何目录下回到用户主目录? + + cd - 或者 cd 或者 cd ~。 +3. 用长格式列出/tmp/test目录下所有的文件包括隐藏文件? + + ls -la tmp/test +## 4. /tmp/test2目录下,创建5个文件分别是 1.txt 2.txt 3.txt 4.txt 5.txt,压缩这5个文件,压缩包的名字是hailiang.tar + + debain2ban@hecs-338035:~/tmp/test2$ touch 1.txt 2.txt 3.txt 4.txt 5.txt + debain2ban@hecs-338035:~/tmp/test2$ tar -cvf hailiang.tar *. + 1.txt + 2.txt + 3.txt + 4.txt + 5.txt +5. 当前目录,建立文件 file1.txt 并更名为 file2.txt? + + debain2ban@hecs-338035:~/tmp/test2$ mv file1.txt file2.txt +6. 当前目录,用vim建立文件bbbb.txt 并将用户名的加入其中保存退出? + debain2ban@hecs-338035:~/tmp/test2$ vim bbbb.txt + debain2ban@hecs-338035:~/tmp/test2$ cat bbbb.txt + 123 + +7. 将家目录中扩展名为txt、doc和bak的文件全部复制到/tmp/test目录中? + + debain2ban@hecs-338035:~$ cp *.txt *.doc *.bak tmp/test + +8. 将文件file1.txt从当前目录移动到家目录的/docs中。 + + debain2ban@hecs-338035:~/tmp$ tree + . + ├── shiyan.c + ├── test + │   ├── 1.bak + │   ├── 1.doc + │   ├── 1.txt + │   ├── 2.bak + │   ├── 2.doc + │   └── 2.txt + └── test2 + ├── 1.txt + ├── 2.txt + ├── 3.txt + ├── 4.txt + ├── 5.txt + ├── bbbb.txt + ├── file2.txt + └── hailiang.tar + + 3 directories, 14 files + debain2ban@hecs-338035:~/tmp/test2$ mv file1.txt ../../docs + +9. 复制文件file2.txt从当前目录到家目录/backup中。 + + debain2ban@hecs-338035:~/tmp/test2$ cp file2.txt ../../backup + +10. 将家目录/docs中的所有文件和子目录移动到家目录/archive中。 + + mv docs/* archive +11. 复制家目录/photos及其所有内容到家目录/backup中。 + + cp -r photos/ backup/ +12. 将文件家目录/docs/report.doc移动到家目录/papers中,并将其重命名为final_report.doc。 + + mv report.doc ../papers/final_report.doc +13. 在家目录/docs中创建一个名为notes.txt的空文件,并将其复制到目录家目录/backup中。 + + debain2ban@hecs-338035:~/docs$ touch notes.txt && cp notes.txt ../backup +14. 复制家目录/images中所有以.jpg结尾的文件到家目录/photos中。 + + cp images/*jpg photos/ +15. 将文件家目录/docs/file1.txt和家目录/docs/file2.txt复制到家目录/backup中。 + + debain2ban@hecs-338035:~/docs$ cp file* ../backup + +16. 将家目录/docs中的所有.txt文件复制到家目录/text_files中。 + + cp docs/*.txt text_files/ +17. 将家目录/docs中的所有文件移动到家目录/temp中,并且如果文件已存在,则覆盖它们。 + + cp docs/* temp/ +18. 将家目录/docs中的所有文件移动到家目录/archive中,并且在移动时显示详细的移动信息。 + + debain2ban@hecs-338035:~/docs$ mv -v * ../archive +19. 复制家目录/docs中的所有子目录及其内容到家目录/backup中。 + + cp -r docs/* backup/ +20. 将家目录/docs中的所有文件和子目录移动到家目录/backup中,但排除文件名以"temp_"开头的文件。 + +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中,并且如果目标目录中已存在同名文件,则忽略它们。 + + cp docs/*.pdf pdf_files/ \ No newline at end of file diff --git "a/\350\214\203\347\220\263\346\226\271/\344\275\234\344\270\232/20240523\347\273\203\344\271\240.md" "b/\350\214\203\347\220\263\346\226\271/\344\275\234\344\270\232/20240523\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..0935d445bd30acf01d1c26ebc0487943d2e2f0db --- /dev/null +++ "b/\350\214\203\347\220\263\346\226\271/\344\275\234\344\270\232/20240523\347\273\203\344\271\240.md" @@ -0,0 +1,66 @@ +### 练习题 1:复制文件 + +假设你有两个目录:`/home/user/docs` 和 `/home/user/backup`。 + +1. 将`/home/user/docs`目录下的`file1.txt`复制到`/home/user/backup`目录下。 +2. 复制`/home/user/docs`目录下的所有`.txt`文件到`/home/user/backup`目录下。 + +debain2ban@hecs-338035:~/docs$ mv *.txt ../backup + + +### 练习题 2:复制文件夹及其内容 + +1. 假设`/home/user/photos`是一个包含多个图片文件夹的目录,请复制整个`/home/user/photos`目录及其所有内容到`/home/user/archive`目录下。 + +debain2ban@hecs-338035:~$ cp -r photos archive + + +### 练习题 3:移动文件 + +1. 将`/home/user/docs`目录下的`file2.docx`移动到`/home/user/papers`目录下。 + + + debain2ban@hecs-338035:~$ mv docs/fifel2.docs papers +2. 如果`/home/user/papers`目录下已经有一个名为`file2.docx`的文件,请确保移动操作会询问你是否要覆盖它。 + + debain2ban@hecs-338035:~$ cp -i docs/fifel2.docs papers +### 练习题 4:重命名文件 + +1. 将`/home/user/docs`目录下的`oldname.pdf`重命名为`newname.pdf`。 + +debain2ban@hecs-338035:~/docs$ mv oldname.pdf newname.pdf + +### 练习题 5:结合使用 + +1. 复制`/home/user/docs`目录下的`report.md`到`/home/user/temp`,然后将复制过去的文件重命名为`temp_report.md`。 + + debain2ban@hecs-338035:~$ mv docs/report.md temp/temp_report.md +2. 将`/home/user/docs`目录下所有以`.doc`结尾的文件移动到`/home/user/processed`,并且如果这些文件在目标目录中已经存在,则不覆盖它们。 + +// 覆盖了 +debain2ban@hecs-338035:~$ cp docs/*.doc processed/ + +debain2ban@hecs-338035:~$ cp -n docs/*.doc processed/ + + + +### 练习题 6:使用通配符 + +1. 复制`/home/user/docs`目录下所有以`.jpg`或`.png`结尾的图片文件到`/home/user/images`目录。 + +debain2ban@hecs-338035:~/docs$ cp *.jpg *.png ../images + + +### 练习题 7:详细输出 + +1. 使用`cp`命令复制文件时,显示详细的复制信息。 + +debain2ban@hecs-338035:~/docs$ cp -v *.jpg *png ../images/ + +2. 使用`mv`命令移动文件时,显示详细的移动信息。 + +debain2ban@hecs-338035:~/images$ mv -v *.jpg *png + +### 练习题 8:更新文件 + +1. 如果`/home/user/backup`目录中已经有一个与`/home/user/docs`目录下的`file1.txt`同名的文件,并且`/home/user/docs/file1.txt`的内容是更新的,请使用`cp`命令将更新的文件复制到备份目录,并覆盖旧文件(假设你知道旧文件可以被安全地覆盖)。 diff --git "a/\350\214\203\347\220\263\346\226\271/\344\275\234\344\270\232/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\214\203\347\220\263\346\226\271/\344\275\234\344\270\232/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..937b58336aacb845e97f1e83db74667abb6ee778 --- /dev/null +++ "b/\350\214\203\347\220\263\346\226\271/\344\275\234\344\270\232/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,149 @@ +### 操作题 + +1. **查找当前目录及其子目录中所有扩展名为 `.log` 的文件**: + ```bash + find ./ -type f -name ".log" + ``` + +2. **在 `/var/logs` 目录及其子目录中查找所有包含关键字 `error` 的文件,并显示匹配的行**: + ```bash + grep -r -n "error" /var/logs + ``` + +3. **在 `/home/user/docs` 目录中查找文件名包含 `report` 的所有文件**: + ```bash + find /home/user/docs -type f -name "*report" + ``` +4. **查找 `/etc` 目录中最近7天内修改过的文件**: + ```bash + find /etc -type f -mtime -7 + ``` + +5. **显示 `/usr/bin` 目录中名为 `python` 的可执行文件的路径**: + ```bash + which python + ``` + +6. **查找系统中名为 `ls` 的命令及其手册页位置**: + ```bash + whereis ls + ``` + +7. **查找当前目录中包含关键字 `TODO` 的所有文件,并显示匹配的行和文件名**: + ```bash + find ./ -type f -exec grep -n "*TODD" {} +; + ``` + +8. **在 `/home/user/projects` 目录中查找所有包含关键字 `function` 的 `.js` 文件**: + ```bash + find /home/user/projects -type f "*.js" -exec grep "function" {} \; + ``` + +9. **查找并显示当前目录及其子目录中所有空文件**: + ```bash + find ./ -type f -size +0c + ``` + +10. **在 `/var/www` 目录中查找包含关键字 `database` 的所有文件,并只显示文件名**: + ```bash + find /var/www -type -f -exec grep "database" {} +; + ``` + +### 综合操作题 + +**综合操作题:** + +假设你在一个名为 `/home/user/workspace` 的目录中工作。你需要完成以下任务: + +1. 查找该目录中所有扩展名为 `.conf` 的文件。 +2. 在这些 `.conf` 文件中查找包含关键字 `server` 的行。 +3. 将包含关键字 `server` 的文件名和匹配的行保存到一个名为 `server_lines.txt` 的文件中。 + +**预期命令步骤:** + +1. 查找所有扩展名为 `.conf` 的文件: + ```bash + find -type f -name "*.conf" + debain2ban@hecs-338035:~$ find -type f -name "*.conf" + ./workspace/2.conf + ./workspace/dosc/5.conf + ./workspace/dosc/4.conf + ./workspace/3.conf + ./workspace/1.conf + + ``` + +2. 在这些 `.conf` 文件中查找包含关键字 `server` 的行: + ```bash + // 要加路径, 不然找不到。 + debain2ban@hecs-338035:~$ find ./ -type f -name "*.conf" -exec grep -r -n "server" {} \; + 1:server2 + 1:server001 + debain2ban@hecs-338035:~$ find ./ -type f -name "*.conf" -exec grep -r -n "server" {} +; + ./workspace/dosc/5.conf:1:server2 + ./workspace/3.conf:1:server001 + + ``` + +3. 将结果保存到 `server_lines.txt` 文件中: + ```bash + debain2ban@hecs-338035:~$ find ./ -type f -name "*.conf" -exec grep -r -n "server" {} + > server_lines.txt; + debain2ban@hecs-338035:~$ ls + server_lines.txt workspace + debain2ban@hecs-338035:~$ cat server_lines.txt + ./workspace/dosc/5.conf:1:server2 + ./workspace/3.conf:1:server001 + + ``` + +通过这套操作题和综合操作题,你可以全面地了解和应用Linux系统中与文件和内容查询相关的常用命令。 + // 1.conf 2.conf 1.doc 2.jpg 4.conf 空文件。3.conf (server001) 5.conf (server2) 6.conf (bug) 3.png (server3) + debain2ban@hecs-338035:~$ mkdir workspace + debain2ban@hecs-338035:~$ cd workspace/ + debain2ban@hecs-338035:~/workspace$ touch 1.conf 2.conf + + debain2ban@hecs-338035:~/workspace$ echo server001 > 3.conf + debain2ban@hecs-338035:~/workspace$ cat 3.conf + server001 + + debain2ban@hecs-338035:~/workspace$ ls + 1.conf 2.conf 3.conf + + debain2ban@hecs-338035:~/workspace/dosc$ ls + 1.doc 2.jpg 4.conf 5.conf + + debain2ban@hecs-338035:~/workspace/dosc$ cat 5.conf + server2 + + debain2ban@hecs-338035:~/workspace/dosc$ echo bug >6.conf + debain2ban@hecs-338035:~/workspace/dosc$ cat 6.conf + bug + debain2ban@hecs-338035:~/workspace/dosc$ echo server3 >3.png + debain2ban@hecs-338035:~/workspace/dosc$ cat 3.png + server3 + + debain2ban@hecs-338035:~/workspace/dosc$ ls + 1.doc 2.jpg 3.png 4.conf 5.conf 6.conf + debain2ban@hecs-338035:~/workspace/dosc$ tree ~ + /home/debain2ban + └── workspace + ├── 1.conf + ├── 2.conf + ├── 3.conf + └── dosc + ├── 1.doc + ├── 2.jpg + ├── 3.png + ├── 4.conf + ├── 5.conf + └── 6.conf + + 2 directories, 9 files + + + + + + + + diff --git "a/\350\214\203\347\220\263\346\226\271/\344\275\234\344\270\232/20240601sed \346\223\215\344\275\234\344\275\234\344\270\232.md" "b/\350\214\203\347\220\263\346\226\271/\344\275\234\344\270\232/20240601sed \346\223\215\344\275\234\344\275\234\344\270\232.md" index d0b04a085910a9fe0cce5a2f7e6a89845f356834..c7083bbcf0d986d96ab4aa879e0747e3fd16a905 100644 --- "a/\350\214\203\347\220\263\346\226\271/\344\275\234\344\270\232/20240601sed \346\223\215\344\275\234\344\275\234\344\270\232.md" +++ "b/\350\214\203\347\220\263\346\226\271/\344\275\234\344\270\232/20240601sed \346\223\215\344\275\234\344\275\234\344\270\232.md" @@ -65,7 +65,7 @@ We will use sed to manipulate this file. 1. 使用 `sed` 在文件 `exam.txt` 的每一行末尾追加内容 " - 2024-05-31",并将结果输出到标准输出。 ``` - + sed 's/$/-2024-05-31' exam.txt ``` #### 整行替换操作 diff --git "a/\350\214\203\347\220\263\346\226\271/\344\275\234\344\270\232/20240606vim\347\274\226\350\276\221\345\231\250\344\270\223\351\241\271\347\273\203\344\271\240.md" "b/\350\214\203\347\220\263\346\226\271/\344\275\234\344\270\232/20240606vim\347\274\226\350\276\221\345\231\250\344\270\223\351\241\271\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..523e69669f8f8ccf0d4da27723e3905b07284809 --- /dev/null +++ "b/\350\214\203\347\220\263\346\226\271/\344\275\234\344\270\232/20240606vim\347\274\226\350\276\221\345\231\250\344\270\223\351\241\271\347\273\203\344\271\240.md" @@ -0,0 +1,158 @@ +1. vi 编辑器有几种模式? + + 1. 指令模式: ESC + 2. 编辑模式 :i + 3. 命令模式: : / ? + +2. 如何进入 vi 编辑器的插入模式 + + 1. i 、a当前字符前、后插入 + 2. I、A当前行首、尾插入 + 3. o、O当前行的下、上一行插入 + +3. 如何进入 vi 编辑器的可视化模式 + 1. v 字符模式 + 2. V行模式 + 3. Ctrl+v 块模式 +4. 在 vi 编辑器中如何复制一行 + + 1. 在光标位置按yy 复制整行到粘贴板 + +5. 在 vi 编辑器中如何进行粘贴 + + 1. P、p 在当前位置上下一行粘贴 + +6. 如何删除从 3 行到 15 行的所有数据 + + :3,15d +7. vim练习: + + - 光标移动练习,命令模式下: + + - 单位级 h j k l + - 单词级 w e b + - 块级 gg G 0 ^ $ H M L ngg nj nk + + i 当前字符前插入 + + I 当前行首插入 + + a 当前字符后插入 + + A 当前行尾插入 + + o 在下一行插入 + + O 在上一行插入 + + x 删除当前字符 + + X 删除前一个字符 + + d 删除指定内容并保存到 Vim 剪贴板 + + dd 删除当前行,并将删除的内容保存到 Vim 剪贴板 + + cc 删除当前行并保存到 Vim 剪贴板,同时进入 INSERT 模式 + + c 删除指定内容并保存到 Vim 剪贴板,同时进入 INSERT 模式 + + y 复制指定字符串到粘贴板 + + yy 复制整行到粘贴板 + + p 在当前位置后粘贴 + + P 在当前位置前粘贴 + + J 合并当前行和下一行 + + r 将当前字符替换为 X + + gu 将指定的文本转换为小写 + + gU 将指定的文本转换为大写 + + :%s/// 查找 search 内容并替换为 replace 内容(常用) + + >> 向右缩进当前行 + + << 向左缩进当前行 + + u 撤销 + + Ctrl-r 重做 + + . 重复上一个动作,3.重复上次动作3次 + + :w 保存当前文件 + + :wa 保存全部文件 + + :wq or ZZ 保存并退出 + + :q! or ZQ 强制退出,不保存 + + :saveas 文件另存为 + + :w 文件另存一份名为 的副本并继续编辑原文件 + + 把下列句子按照第一句的正确顺序修改好并把多余的空行删除 + + ``` + this is a simple easy vim tutorial + + tutorial simple a easy this vim is + is this tutorial vim simple a easy + + + tutorial vim this is a easy simple + tutorial easy vim simple a this is + simple a vim easy tutorial is this + + tutorial is easy vim a simple this + + + vim simple this tutorial a easy is + a vim tutorial simple easy is this + + + easy a simple vim is tutorial this + vim tutorial is a easy simple this + a this vim tutorial is easy simple + this tutorial simple easy a is vim + + + easy tutorial this simple a is vim + a tutorial easy is this simple vim + + a tutorial vim is easy this simple + simple this easy is vim tutorial a + + this tutorial is a easy simple vim + vim is tutorial simple this easy a + + vim is simple this tutorial easy a + easy a simple is vim this tutorial + vim is tutorial simple a easy this + this vim is tutorial simple easy a + ``` + + 删除空行: + + :g/^$/d + + 先敲出以下代码,然后修正以下代码中的错误单词、重复单词、错误格式、多余行,修改函数名为 typing 并为定时器添加 300 毫秒延迟 + + ``` + const bbb = () => { + // this is is a description + // + // another descriptttion + const timer = setTimeout(( ) => { + console.log(that) alert('cool!') + // awosome man ! + }) + } + ``` + + 尝试在下面的文本中进行复制粘贴练习 + + ``` + 删除这一行 + 粘贴到这一行下面 + 剪切 ABC 并把它粘贴到 XYZ 前面,使这部分内容看起来像 + 剪切 并把它粘贴到 ABC XYZ 前面。 + ``` + + 尝试修改下列文本的大小写 + + ``` + Change this line to UPPERCASE, THEN TO lowercase. + ``` + + 按下面的说明进行操作 + + ``` + 按 dd 删除本行 + 按 . 重复删除操作 + 2. 再删除两行 + 这行也没了 + p 把刚才删掉的粘回来 + 3. 又多出 6 行 + ``` + + 左缩进、右缩进练习 + + ``` + 在这一行上依次按 3>>,<< 和 { + // this is is a description + // + // another descriptttion + const timer = setTimeout(( ) => { + console.log(that) alert('cool!') + // awosome man ! + }) + } + ``` + + 尝试在下面的文本中进行复制粘贴练习 + + ``` + 删除这一行 + 粘贴到这一行下面 + 剪切 ABC 并把它粘贴到 XYZ 前面,使这部分内容看起来像 + 剪切 并把它粘贴到 ABC XYZ 前面。 + ``` + + 尝试修改下列文本的大小写 + + ``` + Change this line to UPPERCASE, THEN TO lowercase. + ``` + + 按下面的说明进行操作 + + ``` + 按 dd 删除本行 + 按 . 重复删除操作 + 2. 再删除两行 + 这行也没了 + p 把刚才删掉的粘回来 + 3. 又多出 6 行 + ``` + + 左缩进、右缩进练习 + + ``` + 在这一行上依次按 3>>,<< 和