diff --git "a/\346\270\251\350\264\265\351\233\257/20240522-linu\346\226\207\344\273\266\345\221\275\344\273\244.md" "b/\346\270\251\350\264\265\351\233\257/20240522-linu\346\226\207\344\273\266\345\221\275\344\273\244.md" new file mode 100644 index 0000000000000000000000000000000000000000..3e70719a7d9261acbba099c2d43be271f0e12793 --- /dev/null +++ "b/\346\270\251\350\264\265\351\233\257/20240522-linu\346\226\207\344\273\266\345\221\275\344\273\244.md" @@ -0,0 +1,174 @@ +# 文件管理 + +## MV 移动命令,重命名 + +```js +//移动文件命令 +[root@linuxcool ~]#mv 你的文件 /etc //将你的文件移动/etc +[root@linuxcool ~]#mv Dir1 /etc/Dir2//将你的文件移动 /etc 并重新命名为 dir2![1716127569888] +``` + +## ls命令 – 显示目录中文件及其属性信息 + +```js +[root@linuxcool ~]#ls // 显示当前模式下所有的文件 +l[root@linuxcool ~]#s /etc //显示 /etc 下所有的文件![1716127587206] +``` + +## cp命令 – 复制文件或目录 + +```js +cp File1.cfg File2.cfg //复制指定的源文件,并定义新文件的名称 +cp -r Dir1 Dir2 //复制指定的源目录,并定义新目录的名称 + +``` + +## mkdir命令 – 创建目录文件 + +```js +[root@linuxcool ~]#mkdir Dir1 //创建一个目录 +[root@linuxcool ~]#[root@linuxcool ~]#mkdir Dir3 Dir4 Dir5 //创建多个目录 +[root@linuxcool ~]#mkdir -p /Dir1/Dir2/Dir3/Dir4/Dir5//在系统根目录中,一次性创建多个有嵌套关系的目录文件! +``` + +## pwd命令 – 显示当前工作目录的路径 + +```js +[root@linuxcool ~]#pwd //查看当前工作目录路径: +``` + +## tar命令 – 压缩和解压缩文件 + +```js +[root@linuxcool ~]#tar -cvf File.tar /etc //将/etc压缩为File.tar +[root@linuxcool ~]#tar -xvf 中国.tar //解压中国.tar +``` + +## 显示目录命令 + +### 使用 `tree` 命令 + +`tree` 命令以树状结构显示目录内容,但默认情况下可能没有安装。可以使用以下命令安装 `tree`: + +```js +[root@linuxcool ~]#sudo apt update +[root@linuxcool ~]#sudo apt install tree +``` + +#### 使用 `tree` 显示目录内容 + +```js +[root@linuxcool ~]#tree +``` + +#### 显示特定目录的内容 + +```js +[root@linuxcool ~]#tree /path/to/directory +``` + +#### 显示包含所有文件和文件夹的完整路径 + +```js +[root@linuxcool ~]#tree -f +``` + +### 使用 `find` 命令 + +`find` 命令可以递归地搜索目录中的所有文件和文件夹。 + +#### 列出当前目录及其子目录中的所有文件和文件夹 + +```js +[root@linuxcool ~]#find . +``` + +#### 列出特定目录中的所有文件和文件夹 + +```js +[root@linuxcool ~]#find /path/to/directory +``` + +### 使用 `du` 命令 + +`du` 命令主要用于查看目录的磁盘使用情况,但也可以用来显示目录结构。 + +#### 列出当前目录及其子目录的内容 + +```js +[root@linuxcool ~]#du -a +``` + +#### 列出特定目录及其子目录的内容 + +```js +[root@linuxcool ~]#du -a /path/to/directory +``` + +### 示例 + +假设你想查看 `/home/user/documents` 目录中的所有文件和文件夹,可以使用以下命令: + +1. **使用 ls 命令**: + + ```js + [root@linuxcool ~]#ls -la /home/user/documents + ``` + +2. **使用 tree 命令**: + + ```js + [root@linuxcool ~]#tree /home/user/documents + ``` + +3. **使用 find 命令**: + + ```js + [root@linuxcool ~]#find /home/user/documents + ``` + +4. **使用 du 命令**: + + ```js + [root@linuxcool ~]#du -a /home/user/documents + ``` + +## chmod命令 – 改变文件或目录权限 + +```jade +[root@linuxcool ~]# chmod 775 File.cfg //设定某个文件的权限为775: +[root@linuxcool ~]# chmod a+r File.cfg //设定某个文件让任何人都可以读取 +``` + +## cd命令 – 切换目录 + +```jade +[root@linuxcool ~]# cd /Dir //切换到指定目录 +[root@linuxcool Dir]# cd ~ //切换至当前用户的家目录 +[root@linuxcool ~]# cd ..//进入到上一级所在目录 +[root@linuxcool /]# cd -//返回到上一次所在目录 +``` + +## rm-删除文件或目录 + +```js +rm -i 文件名 // 删除指定的文件,删除前会询问是否删除(y 确认,n 取消)。 +rm -f 文件名 //强制删除指定的文件,不会进行询问。 +rm -f a.txt b.txt // 同时删除多个文件:可以在命令中添加多个文件名,用空格分隔,如 。 +rm -f a* // 删除所有以 a 开头的文件 ;删除以特定字符或模式开头的文件:使用通配符* 。 +rm -f .* //删除隐藏文件:使用 .*,如 (但请注意,这可能会删除当前目录下的所有隐藏文件,包括 . 和 ..,所以请谨慎使用)。 +rmdir 目录名 //仅删除空的目录。 +rm -r 目录名 //递归地删除目录及其子目录和文件,删除前会询问是否删除。 +rm -rf 目录名 // 递归地强制删除目录及其子目录和文件,不会进行询问。 +rm -rfv 目录名 // 除了递归强制删除外,还会显示删除的详细步骤。 +rm -d 目录名 // 只删除空目录(与 rmdir 命令类似)。 +``` + +## 修改别名 + +```js +ls -alh +列出目录后找到 .bashrc + +vim .bashrc //修改.bashrc文件 +``` diff --git "a/\346\270\251\350\264\265\351\233\257/20240523-\346\226\207\344\273\266\345\221\275\344\273\2442.md" "b/\346\270\251\350\264\265\351\233\257/20240523-\346\226\207\344\273\266\345\221\275\344\273\2442.md" new file mode 100644 index 0000000000000000000000000000000000000000..499a84b02d950d389c8ce1950bc65c8fbecd8079 --- /dev/null +++ "b/\346\270\251\350\264\265\351\233\257/20240523-\346\226\207\344\273\266\345\221\275\344\273\2442.md" @@ -0,0 +1,43 @@ +# 文件管理命令 + +## CP:复制命令&文件夹 + +#### 代码格式:cp [源文件] 目标文件 + +|前缀|含义| +|-|-| +|-a:|此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于 dpR 参数组合。| +|-d:|复制时保留链接。这里所说的链接相当于 Windows 系统中的快捷方式。| +|-r 或 --recursive:|用于复制目录及其所有的子目录和文件,如果要复制目录,需要使用该选项。| +|-i 或 --interactive:|在复制前提示确认,如果目标文件已存在,则会询问是否覆盖,回答 y 时目标文件将被覆盖。。| +|-u 或 --update:|仅复制源文件中更新时间较新的文件。| +|-v 或 --verbose:|显示详细的复制过程。| +|-p 或 --preserve:|保留源文件的权限、所有者和时间戳信息。| +|-f 或 --force:|强制复制,即使目标文件已存在也会覆盖,而且不给出提示。| +|-l:不复制文件,|只是生成链接文件。| + +##### 备份 + +##### 指定备份文件尾标并备份 + +```bash + 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 文件复制到目标目录。这可以有效地防止文件被覆盖,确保数据的安全性 + + +``` + +## MV:改名&&移动 + +#### 代码格式:mv [源文件] 目标文件 //移动 + +#### 代码格式:mv [源文件1] 源文件2 //改名 + +|前缀|含义| +|-|-| +|-b: |当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份。| +|-i: |如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件,输入 y 表示直接覆盖,输入 n 表示取消该操作。| +|-f: |如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件。| +|-n: |不要覆盖任何已存在的文件或目录。| +|-u:|当源文件比目标文件新或者目标文件不存在时,才执行移动操作。| diff --git "a/\346\270\251\350\264\265\351\233\257/20240525-\347\233\270\345\257\271\350\267\257\345\276\204\347\273\235\345\257\271\350\267\257\345\276\204.md" "b/\346\270\251\350\264\265\351\233\257/20240525-\347\233\270\345\257\271\350\267\257\345\276\204\347\273\235\345\257\271\350\267\257\345\276\204.md" new file mode 100644 index 0000000000000000000000000000000000000000..4298b52cfe95c4ff8e53ba833814129222a5670c --- /dev/null +++ "b/\346\270\251\350\264\265\351\233\257/20240525-\347\233\270\345\257\271\350\267\257\345\276\204\347\273\235\345\257\271\350\267\257\345\276\204.md" @@ -0,0 +1,54 @@ +# 相对路径&&绝对路径 + +## 相对路径 + +#### 相对路径是相对于当前工作目录的路径描述。它告诉系统如何从当前位置找到目标文件或目录 + +### “.”:表示当前目录。例如,./file.txt表示当前目录中的文件 + +### “..”:表示上一级目录。例如,../parent_directory/file.txt表示上一级目录中的文件 + +### 目录名:表示当前目录中的子目录。例如,subdir/file.txt表示当前目录下的子目录中的文件 + +#### 相对路径的优点在于它们相对简洁,但它们依赖于当前工作目录,因此可能在不同位置使用时产生不同的效果 + +## 绝对路径 + +#### 绝对路径是从根目录(root)开始的完整路径描述。它提供了文件或目录在文件系统中确切位置的详细信息,不受当前工作目录的影响。绝对路径通常以斜杠“/”开头,从根目录一直到目标文件或目录 + +#### 例如 + +```js +/home/user/documents/file.txt +//是一个绝对路径,它明确指定了文件file.txt的位置 +``` + +#### 绝对路径的优点在于它们始终指向相同的位置,不受当前工作目录的变化影响。这使得它们在脚本和配置文件中非常有用,因为它们的行为是可预测的 + +## 何时使用相对路径和绝对路径 + +#### 相对路径:通常在当前工作目录不会改变的情况下使用相对路径。手动浏览文件系统或在脚本中执行相对路径的命令时,相对路径是有用的 + +#### 绝对路径:在需要确保文件或目录位置始终一致的情况下使用绝对路径。这对于脚本、配置文件和需要完全确定位置的任务非常重要 + +### 例如 + +##### 使用相对路径查看当前目录下的文件 + +```js +cd /home/user/documents +cat ./file.txt + +``` + +##### 使用绝对路径查看相同文件 + +```js +cat /home/user/documents/file.txt + + +``` + +## 总结 + +#### 相对路径和绝对路径是在Linux中指定文件和目录位置的两种方式。相对路径基于当前工作目录,而绝对路径从根目录开始 diff --git "a/\346\270\251\350\264\265\351\233\257/20240527-\346\237\245\350\257\242\345\221\275\344\273\244.md" "b/\346\270\251\350\264\265\351\233\257/20240527-\346\237\245\350\257\242\345\221\275\344\273\244.md" new file mode 100644 index 0000000000000000000000000000000000000000..04514ca27ef3de32be10ba35a97377ec59d3f399 --- /dev/null +++ "b/\346\270\251\350\264\265\351\233\257/20240527-\346\237\245\350\257\242\345\221\275\344\273\244.md" @@ -0,0 +1,116 @@ +# 查询命令 + +## find + +#### find 命令用于在文件系统中查找文件和目录 + +### 基本用法 + +```sh +find [路径] [条件] [操作] +``` + +- 路径:指定要搜索的目录。可以是当前目录(.)、根目录(/)或其他特定目录。 +- 条件:指定查找文件的条件,如文件类型、名称、大小等。 +- 操作:指定对找到的文件执行的操作,如显示路径、删除文件、执行其他命令等。 + +- name:按名称查找文件。 + +```sh +find . -name "filename" +``` + +- type:按类型查找文件或目录 + +##### f:普通文件 + +##### d:目录 + +```sh +find . -type f & d +``` + +- size:按大小查找文件。 + +```sh +find . -size +100M # 查找大于100MB的文件 +``` + +- mtime:按修改时间查找文件。 + +```sh +find . -mtime -7 # 查找最近7天内修改的文件 +``` + +- empty:查找空文件或空目录 + +```sh +find . -empty +``` + +- executable:查找可执行文件。 + +```sh +find /usr/bin -type f -name "python" -executable +``` + +## 与其他命令的结合 + +### find 和 grep:查找文件内容包含特定关键字的文件 + +```sh +find . -type f -exec grep -H "keyword" {} + +``` + +## which : 查找可执行文件的位置。它在用户的 `PATH` 环境变量中搜索命令 + +```sh +which ls # 查找 ls 命令的路径 +``` + +## whereis :查找可执行文件、源代码文件和手册页的位置 + +```sh +whereis ls # 查找 ls 命令的路径 +``` + +## type :显示命令的类型,例如是否是内置命令、别名或可执行文件 + +```sh +type ls # 显示 ls 命令的类型 +``` + +## grep :用于在文件内容中搜索匹配的字符串。虽然它通常用于搜索文件内容,但也可以结合其他命令一起使用来查找文件 + +```sh +grep "pattern" filename # 在文件中搜索字符串 +grep -r "pattern" /path # 递归地在目录中搜索字符串 +# 示例: +grep "error" /var/log/syslog # 在 /var/log/syslog 文件中搜索包含 "error" 的行 +grep -r "TODO" /home/user/projects # 在 /home/user/projects 目录及其子目录中搜索包含 "TODO" 的文件 + +``` + +|后缀|解释| +|-|-| +|-i:|忽略大小写。| +|-v:|显示不匹配的行。| +|-c:|只输出匹配行的计数。| +|-l:|只输出匹配的文件名。| +|-n:|在输出中显示行号。| +|-r或-R:|递归搜索填充文件。| +|-E:|启用扩展的正则表达式语法(支持更多正则表达式元字符)。| +|-w:|仅匹配整个单词。| +|-A :|在匹配行后显示行的文本。| +|-B :|在匹配行前显示行的文本。| +|-C :|在匹配行前后各显示行的文本(相当于-A 和-B |的结合)。| +|-f :|从内存读取模式,每行一个模式。| +|-e :|指定要搜索的模式,可以使用多个-e选项进行多模式搜索。| + +## stat:显示文件或文件系统的详细信息,包括大小、权限、修改时间等 + +```sh +stat filename # 显示文件的详细信息 +# 示例: +stat document.txt # 显示 document.txt 文件的详细信息 +``` diff --git "a/\346\270\251\350\264\265\351\233\257/20240529-\346\237\245\347\234\213\345\206\205\345\256\271\345\221\275\344\273\244.md" "b/\346\270\251\350\264\265\351\233\257/20240529-\346\237\245\347\234\213\345\206\205\345\256\271\345\221\275\344\273\244.md" new file mode 100644 index 0000000000000000000000000000000000000000..cd961f79d03238c606ca162db3c1adaac32f7fac --- /dev/null +++ "b/\346\270\251\350\264\265\351\233\257/20240529-\346\237\245\347\234\213\345\206\205\345\256\271\345\221\275\344\273\244.md" @@ -0,0 +1,116 @@ +# 查看文件内容 + +## cat:从文件头部显示文件内容(大文件不推荐) + +```sh +cat 文件 + # 作用:显示文件内容,也可以将多个文件内容连接在一起输出。 +``` + +- 显示文件内容:`cat file.txt` +- 连接多个文件内容:`cat file1.txt file2.txt` +- 使用`-n`选项显示行号:`cat -n file.txt` + +## tac:从文件尾部显示文件内容 + +```sh +tac 文件 + # 作用:与cat相反,从文件尾部开始显示内容到文件开头。命令单词也是反过来的 +``` + +- 从尾部开始,显示文件内容:`tac /var/log/dpkg.log` +- 从尾部开始,显示多个文件内容:`tac file1.txt file2.txt` + +## more(大文件不适用) + +```sh + more [选项] 文件 + # 作用:分页显示文件内容,每次显示一屏。即按页显示文件内容 +``` + +- 分页显示文件内容:`more file.txt` +- 使用空格键向下翻页,回车键显示下一行,`q`键退出 + +## less + +```sh +less [选项] 文件 +# 作用:与more类似,但提供了更多的导航和搜索功能,如上下滚动、搜索等。 +``` + +- 类似`more`的分页显示:`less file.txt +- 使用上下键、Page Up/Page Down键进行滚动,`/`搜索,`n`下一个匹配,`N`上一个匹配,`q`退出。 + +#### 后缀 + +- 无选项 + - 直接使用 `less 文件名` 来查看文件内容。 +- N 或 --line-numbers: + - 显示行号。 +- M 或 --long-prompt: + - 显示长提示符,包括文件名和行号,百分比。 +- MN 内容中显示行号,底部显示文件名,行号和百分比 + - 两者可以组合使用 +- -m 或 -i + - 搜索时忽略大小写 +- +行数: + - 打开文件后立即跳转到指定的行数。 + +## head(查看文件前几行) + +```sh +head [选项] 文件 ... +# 作用:显示文件开头的内容(默认10行)。 +``` + +- 显示文件开头的10行:`head file.txt` + +- 显示多个文件开头的10行:`head file1.txt file2.txt` + +- 使用`-n`选项指定行数:`head -n 20 file.txt`(显示前20行) + +- 使用`-q`不显示文件名。当使用多个文件作为输入时,该选项可以省略文件名前的标题 + + `head -q file1.txt file2.txt` + +## tail查看末尾内容 + +```sh +tail [选项] 文件... +# 作用:显示文件结尾的内容(默认10行)。 + +``` + +- 显示文件结尾的10行:`tail file.txt` +- 显示多个文件结尾的10行:`tail file1.txt file2.txt` 加-q不显示文件名 +- 使用`-n`选项指定行数:`tail -n 20 file.txt`(显示最后20行) + +### 实时查看文件增长(如日志文件)"-f":`tail -f logfile.txt` + +### 实用选项 + +- -n [行数]:显示文件的最后指定行数。如果不指定行数,则默认为显示最后10行。 + +- -f:实时追踪文件的变化并输出新增的内容。通常用于监视日志文件的增长。 + +- -q:不显示文件名。当使用多个文件作为输入时,该选项可以省略文件名前的标题。 + +## nl 添加行号 + +```sh +nl [选项] 文件... + # 作用: 显示文件内容,并添加行号(空行不加)。 +``` + +- 为文件内容添加行号:`nl file.txt` +- 使用`-s`选项指定分隔符:`nl -s: file.txt`(使用冒号作为行号分隔符) + +## od使用八进制、十进制、十六进制转义文件内容 + +```sh + od -An -t x1 example.txt #转为十六进制 +``` + +- 显示文件内容的八进制表示:`od -An -t o file.txt` +- 显示文件内容的十六进制表示:`od -An -t x1 file.txt` +- 使用`-c`选项显示字符:`od -c file.txt` diff --git "a/\346\270\251\350\264\265\351\233\257/20240530-\345\270\270\347\224\250\345\221\275\344\273\244.md" "b/\346\270\251\350\264\265\351\233\257/20240530-\345\270\270\347\224\250\345\221\275\344\273\244.md" new file mode 100644 index 0000000000000000000000000000000000000000..bf413ed9a04a99320373b2146e0c5259a970a51d --- /dev/null +++ "b/\346\270\251\350\264\265\351\233\257/20240530-\345\270\270\347\224\250\345\221\275\344\273\244.md" @@ -0,0 +1,78 @@ +# 常见命令Linux命令 + +## sed:利用脚本来处理文本文件 + +### 语法 + +```sh +sed -[选项] "命令/#/#/" 源文件 + +``` + +#### 选项 + +|后缀|解释| +|-|-| +|a :新增,| a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)| +|c :取代,| c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行| +|d :删除,|所以 d 后面通常不接任何东西;| +|i :插入,| i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);| +|p :|打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~| +|s :|取代,可以直接进行取代的工作,通常 s 的动作可以搭配正则表达式:例如 1,20s/old/new/g | + +## awk:模式扫描和数据的提取 + +```sh +awk options '模式 { 命令 }'源文件 + +``` + +### options选项 + +|后缀|解释| +|-|-| +|-F <分隔符> 或 --field-separator=<分隔符>: |指定输入字段的分隔符,默认是空格。使用这个选项可以指定不同于默认分隔符的字段分隔符。| +|-v <变量名>=<值>:| 设置 awk 内部的变量值。可以使用该选项将外部值传递给 awk 脚本中的变量。| +|-f <脚本文件>:| 指定一个包含 awk 脚本的文件。这样可以在文件中编写较大的 awk 脚本,然后通过 -f 选项将其加载。| +|-v 或 --version:| 显示 awk 的版本信息。| +|-h 或 --help:| 显示 awk 的帮助信息,包括选项和用法示例。| + +## cut:输出从参数1到2的文字 + +```sh +awk '-模式 { 命令 }' 源文件 +``` + +### 参数 + +|后缀|解释| +|-|-| +|-b :|以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。| +|-c :|以字符为单位进行分割。| +|-d :|自定义分隔符,默认为制表符。| +|-f :|与-d一起使用,指定显示哪个区域。| +|-n :|取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的范围之内,该字符将被写出;否则,该字符将被排除| + +## join:将不同文件中相同的字段值进行行拼接,找出两个文件中,指定栏位内容相同的行,并加以合并,再输出到标准输出设备 + +```sh +1、join 1.txt 2.txt # 直接将1和2进行拼接 + +2、join [-i][-a<1或2>][-e<字符串>][-o<格式>][-t<字符>][-v<1或2>][-1<栏位>][-2<栏位>][--help][--version][文件1][文件2] + +``` + +### 参数 + +|后缀|解释| +|-|-| +|-a<1或2> |除了显示原来的输出内容之外,还显示指令文件中没有相同栏位的行。| +|-e<字符串> |若[文件1]与[文件2]中找不到指定的栏位,则在输出中填入选项中的字符串。| +|-i或--igore-case| 比较栏位内容时,忽略大小写的差异。| +|-o<格式> |按照指定的格式来显示结果。| +|-t<字符> |使用栏位的分隔字符。| +|-v<1或2>| 跟-a相同,但是只显示文件中没有相同栏位的行。| +|-1<栏位> |连接[文件1]指定的栏位。| +|-2<栏位> |连接[文件2]指定的栏位。| +|--help |显示帮助。| +|--version |显示版本信息。| diff --git "a/\346\270\251\350\264\265\351\233\257/20240601-sed\347\232\204\346\223\215\344\275\234.md" "b/\346\270\251\350\264\265\351\233\257/20240601-sed\347\232\204\346\223\215\344\275\234.md" new file mode 100644 index 0000000000000000000000000000000000000000..0ee540fa1ab4d4b2563d71a7a568c7d69c5966f8 --- /dev/null +++ "b/\346\270\251\350\264\265\351\233\257/20240601-sed\347\232\204\346\223\215\344\275\234.md" @@ -0,0 +1,124 @@ +# Sed的操作 + +#### sed:sed(stream editor)是一个强大的文本处理工具,用于对文件或输入流进行逐行处理。它可以执行各种编辑操作,如插入、删除、替换、打印等 + +### 基本语法 + +```js +sed [options] 'command' file +``` + +- options:sed 的选项。 +- command:要执行的命令。 +- file:要处理的文件。 + +### 常用选项 + +- n:禁止自动打印模式空间的内容。 +- e:允许在同一 sed 程序中使用多个编辑命令。 +- f:从文件中读取 sed 命令。 +- i:直接编辑文件内容(就地编辑)。 + +### 常用命令 + +- p:打印行。 +- d:删除行。 +- s:替换命令。 +- a:在当前行后追加文本。 +- i:在当前行前插入文本。 +- c:替换行。 +- q:退出 sed。 + +### 地址指定 + +- number:指定行号。 +- /pattern/:指定模式匹配的行。 +- first~step:从 first 行开始,每隔 step 行匹配一次。 +- start,end:指定从 start 行到 end 行的范围。 + +## 示例 + +### 1. 打印文件的内容 + +#### 打印文件 example.txt 的所有内容 + +```js +sed '' example.txt +或显式使用 p 命令(需要 -n 选项来关闭默认输出): + +sed -n 'p' example.txt +``` + +2. 打印特定行 +打印文件 example.txt 的第 3 行: + +```js +sed -n '3p' example.txt +``` + +3. 删除特定行 + +```js +删除文件 example.txt 的第 2 行: + +sed '2d' example.txt +``` + +4. 替换文本 + +```js +将文件 example.txt 中的所有 foo 替换为 bar: + +sed 's/foo/bar/g' example.txt +``` + +5. 插入和追加文本 + +```js +在文件 example.txt 的第 1 行前插入 "Header": + +sed '1i Header' example.txt +在文件 example.txt 的第 1 行后追加 "Footer": + +sed '1a Footer' example.txt +``` + +6. 替换特定行的内容 + +```js +将文件 example.txt 的第 3 行替换为 "New Content": + +sed '3c New Content' example.txt +``` + +7. 处理范围内的行 + +```js +删除文件 example.txt 中从第 2 行到第 4 行的内容: + +sed '2,4d' example.txt +替换从第 1 行到第 3 行的 foo 为 bar: + +sed '1,3s/foo/bar/g' example.txt +``` + +8. 使用脚本文件 + +```js +创建一个 sed 脚本文件 script.sed,内容如下: + +s/foo/bar/g2d + +然后运行 sed 命令: + +sed -f script.sed example.txt +``` + +9. 就地编辑文件 + +```js +直接在文件 example.txt 中替换 foo 为 bar: + +sed -i 's/foo/bar/g' example.txt + +``` diff --git "a/\346\270\251\350\264\265\351\233\257/20240603-awk\347\224\250\346\263\225.md" "b/\346\270\251\350\264\265\351\233\257/20240603-awk\347\224\250\346\263\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..1cd48bdc0690562ba2da13119e069e7157eefa84 --- /dev/null +++ "b/\346\270\251\350\264\265\351\233\257/20240603-awk\347\224\250\346\263\225.md" @@ -0,0 +1,118 @@ +# AWK用法 + +#### awk 是一个强大的文本处理工具,适用于在 Linux 和类 Unix 系统上处理结构化文本数据。它特别适合处理按列组织的文本文件 + +### 基本语法 + +```JS +awk 'pattern { action }' file +``` + +- pattern:可选,指定文本行的匹配模式。 +- action:对匹配的文本行执行的操作。 +- file:要处理的文件。 + +## 选项 + +- F:指定输入字段分隔符。 +- v:定义变量。 +- f:从脚本文件读取 awk 程序 + +### 内置变量 + +- sNF:当前记录的字段数。 +- sNR:当前记录的行号。 +- sFS:输入字段分隔符。 +- sOFS:输出字段分隔符。 +- sRS:输入记录分隔符。 +- sORS:输出记录分隔符。 +- s$0:当前记录(整行)。 +- s$n:当前记录的第 n 个字段。 + +### 打印文件内容 + +```js +awk '{ print }' example.txt +``` + +### 打印特定字段 + +##### 假设 example.txt 内容如下 + +```sh +Alice 30 +Bob 25 +Charlie 35 + +``` + +打印第一列(名字): + +```js +awk '{ print $1 }' example.txt +``` + +### 条件匹配 + +##### 打印年龄大于 30 的行 + +```sh +awk '$2 > 30 { print }' example.txt +``` + +##### 打印名字为 "Bob" 的行 + +```js +awk '$1 == "Bob" { print }' example.tx +``` + +### 使用字段分隔符 + +```sh +awk -F, '{ print $1, $2 }' data.csv +``` + +##### 打印每行的字段数和内容 + +```sh +awk '{ print NF, $0 }' example.txt +``` + +## 使用操作符 + +- +:加 +- -:减 +- *:乘 +- /:除 +- %:取模 +- ^:幂 + +##### 计算每行第二列的平方 + +```JS +awk '{ print $2^2 }' example.txt +``` + +## 开始语句包和结束语句包 + +### 开始语句(BEGIN) + +##### BEGIN 语句块在 awk 开始处理输入文件之前执行。它通常用于初始化变量、设置字段分隔符和其他预处理任务 + +```js +awk 'BEGIN { actions }' file +``` + +### 结束语句块(END) + +##### END 语句块在 awk 完成对所有输入文件的处理后执行。它通常用于打印总结信息或执行清理工作 + +```js +awk '{ actions } END { actions }' file +``` + +#### 开始语句、中间、结束语句 + +```js +awk 'BEGIN {print "姓名"} {sum += $3} {print} END {print "思政成绩", sum}' fenshu.txt +``` diff --git "a/\346\270\251\350\264\265\351\233\257/20240605-vim\347\274\226\350\276\221.md" "b/\346\270\251\350\264\265\351\233\257/20240605-vim\347\274\226\350\276\221.md" new file mode 100644 index 0000000000000000000000000000000000000000..a5e521c7ce5090174f65e40d461b9960a59fc688 --- /dev/null +++ "b/\346\270\251\350\264\265\351\233\257/20240605-vim\347\274\226\350\276\221.md" @@ -0,0 +1,40 @@ +# Vim编辑 + +### 命令模式 + +- i -- 切换到输入模式,在光标当前位置开始输入文本。 +- x -- 删除当前光标所在处的字符。 +- : -- 切换到底线命令模式,以在最底一行输入命令。 +- a -- 进入插入模式,在光标下一个位置开始输入文本。 +- o:在当前行的下方插入一个新行,并进入插入模式。 +- O -- 在当前行的上方插入一个新行,并进入插入模式。 +- dd -- 剪切当前行。 +- yy -- 复制当前行。 +- p(小写) -- 粘贴剪贴板内容到光标下方。 +- P(大写)-- 粘贴剪贴板内容到光标上方。 +- u -- 撤销上一次操作。 +- Ctrl + r -- 重做上一次撤销的操作。 +- :w -- 保存文件。 +- :q -- 退出 Vim 编辑器。 +- :q! -- 强制退出Vim 编辑器,不保存修改。 + +### 输入模式 + +- 字符按键以及Shift组合,输入字符 +- ENTER,回车键,换行 +- BACK SPACE,退格键,删除光标前一个字符 +- DEL,删除键,删除光标后一个字符 +- 方向键,在文本中移动光标 +- HOME/END,移动光标到行首/行尾 +- Page Up/Page Down,上/下翻页 +- Insert,切换光标为输入/替换模式,光标将变成竖线/下划线 +- ESC,退出输入模式,切换到命令模式 + +### 底线命令模式 + +##### 在命令模式下按下(SHIFT+:) :(英文冒号)就进入了底线命令模式 + +- :w:保存文件。 +- :q:退出 Vim 编辑器。 +- :wq:保存文件并退出 Vim 编辑器。 +- :q!:强制退出Vim编辑器,不保存修改。 diff --git "a/\346\270\251\350\264\265\351\233\257/20240606-vim\345\260\217\346\270\270\346\210\217\345\217\212https\345\215\217\350\256\256\347\273\221\345\256\232.md" "b/\346\270\251\350\264\265\351\233\257/20240606-vim\345\260\217\346\270\270\346\210\217\345\217\212https\345\215\217\350\256\256\347\273\221\345\256\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..bbac9ddc1dd60826c36216f4b3cbfa17a4022e89 --- /dev/null +++ "b/\346\270\251\350\264\265\351\233\257/20240606-vim\345\260\217\346\270\270\346\210\217\345\217\212https\345\215\217\350\256\256\347\273\221\345\256\232.md" @@ -0,0 +1,151 @@ +# 怎么用小游戏锻炼vim + +## PacVim:一个学习 vim 命令的命令行游戏 + +### 1、安装Ncurses 库 + +```js +sudo apt 安装 libncurses5-dev libncursesw5-dev +``` + +### 2、安装开发工具及git远程工具 + +```js +apt update //更新 + +apt install build-essential //下载 + +apt install git //下载git 工具 + +``` + +### 安装 PacVim + +```js +git clone https://github.com/jmoon018/PacVim.git\ //远程克隆文件 + +cd PacVim // + +sudo make install +``` + +### 运行 + +```js +pacvim [LEVEL_NUMER] [MODE] //[LEVEL_NUMER]等级,[MODE]模式 + +``` + +|按键|解释| +|-|-| +|q |退出游戏| +|h |向左移动| +|j |向下移动| +|k |向上移动| +|l |向右移动| +|w |向前移动到下一个 word 开始| +|W |向前移动到下一个 WORD 开始| +|e |向前移动到下一个 word 结束| +|E |向前移动到下一个 WORD 结束| +|b |向后移动到下一个 word 开始| +|B |向后移动到下一个 WORD 开始| +|$ |移动到行的末尾| +|0 |移动到行的开始| +|gg/1G |移动到第一行的开始| +|数字加 G |移动到由数字给出的行的开始| +|G |移到最后一行的开头| +|^ |移到当前行的第一个 word| +|& |1337 cheatz(打赢当前关)| + +# 给自己的网站设置“https”协议 + +## 什么是https? + +###### 超文本传输安全协议(英语:HyperText Transfer Protocol Secure,缩写:HTTPS;常称为HTTP over TLS、HTTP over SSL或HTTP Secure)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换资料的隐私与完整性。这个协议由网景公司(Netscape)在1994年首次提出,随后扩展到互联网上 + +## 准备工作 + +### SSH工具、申请一张ssl证书、一台已经部署好网站的服务器 + +## 1、安装Certbot工具 + +##### 什么是Certbot?:Certbot是Let's Encrypt提供的官方客户端工具,用于自动化地获取、安装和更新HTTPS证书。 它支持多种服务器类型和操作系统,并提供了简化的命令行接口,使得证书的部署过程变得简单明了 + +```js +//确保你的系统包是最新的: +sudo apt update +sudo apt upgrade + +//安装 Certbot 和 Nginx 插件 +sudo apt install certbot python3-certbot-nginx +``` + +#### 2上传证书及密钥 + +##### 以华为云为例;搜索框搜索“SSL证书管理 SCM” 点击购买 在证书类型里选择 “DV (Basic)” 证书品牌选择 “DigCert” 即可申请免费证书 ,申请完后验证域名完成后等待审批,注意验证域名需要重新到域名解析中重新解析一个出来,按它给出的要求修改即可。一切完成后即可下载证书,点击下载会下载一个压缩包,压缩包里有众多不同程序的证书,我们选择后缀为“_Nginx”就好,解压出后会有两个文件“.crt、.key ”(一个证书、一个密钥) 证书下载完成后一切准备工作就已经完成了 + +##### 进入SSH工具登录服务器 + +```js +//进入nginx文件夹并新建一个名为“ssl”的文件夹 +cd /etc/nginx +mkdir ssl + +//将已经下载好的的密钥和证书上传到ssl文件夹中 + + +``` + +## 配置Nginx + +### 还记得之前用debian快速搭建一个静态网站中有一步是新建的一个名为“conf.d”的文件夹里面有一个以“.conf” 结尾的配置文件接下来我们就要修改它 + +```js +// 以为自己的域名“91c13.top”为例 +vim /etc/nginx/conf.d //修改配置文件 + +server { + listen 80; + server_name 91c13.top www.91c13.top; + + + location / { + root /var/www/91c13.top; + index index.html; + } +} +//上面是之前写入的千万不要动它 + + +//新增以下几行 +server { + listen 443 ssl http2; + server_name 91c13.top www.91c13.top; + + ssl_certificate /etc/nginx/ssl/91c13.top.crt; //证书目录 + ssl_certificate_key /etc/nginx/ssl/91c13.top.key; //密钥目录 + + # 如果有中间证书,添加以下行若没有即可删除 + ssl_trusted_certificate /etc/nginx/ssl/ca-bundle.crt; + + root /var/www/91c13.top; # 修改为你的网站根目录 + index index.html index.htm; + + location / { + try_files $uri $uri/ =404; + } +} + +//重新加载 Nginx 配置确认无误 +nginx -t//显示‘is successful’即为成功 + +//重新加载 Nginx 服务: + +systemctl reload nginx //重启nginx服务 +``` + +## 大功告成接下来使用“https://+域名”即可成功访问服务器,访问成功后可以看见域名前有一把小锁的标志,即https协议配置成功 + +```sh +https://91c13.top/ +``` diff --git "a/\346\270\251\350\264\265\351\233\257/20240612-Linux\350\256\276\347\275\256https.md" "b/\346\270\251\350\264\265\351\233\257/20240612-Linux\350\256\276\347\275\256https.md" new file mode 100644 index 0000000000000000000000000000000000000000..56ff386c0a2ff1875b5fc34de618f08dd733a6a5 --- /dev/null +++ "b/\346\270\251\350\264\265\351\233\257/20240612-Linux\350\256\276\347\275\256https.md" @@ -0,0 +1,93 @@ + +# 给自己的网站设置“https”协议 + +## 什么是https? + +###### 超文本传输安全协议(英语:HyperText Transfer Protocol Secure,缩写:HTTPS;常称为HTTP over TLS、HTTP over SSL或HTTP Secure)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换资料的隐私与完整性。这个协议由网景公司(Netscape)在1994年首次提出,随后扩展到互联网上 + +## 准备工作 + +### SSH工具、申请一张ssl证书、一台已经部署好网站的服务器 + +## 1、安装Certbot工具 + +##### 什么是Certbot?:Certbot是Let's Encrypt提供的官方客户端工具,用于自动化地获取、安装和更新HTTPS证书。 它支持多种服务器类型和操作系统,并提供了简化的命令行接口,使得证书的部署过程变得简单明了 + +```js +//确保你的系统包是最新的: +sudo apt update +sudo apt upgrade + +//安装 Certbot 和 Nginx 插件 +sudo apt install certbot python3-certbot-nginx +``` + +#### 2上传证书及密钥 + +##### 以华为云为例;搜索框搜索“SSL证书管理 SCM” 点击购买 在证书类型里选择 “DV (Basic)” 证书品牌选择 “DigCert” 即可申请免费证书 ,申请完后验证域名完成后等待审批,注意验证域名需要重新到域名解析中重新解析一个出来,按它给出的要求修改即可。一切完成后即可下载证书,点击下载会下载一个压缩包,压缩包里有众多不同程序的证书,我们选择后缀为“_Nginx”就好,解压出后会有两个文件“.crt、.key ”(一个证书、一个密钥) 证书下载完成后一切准备工作就已经完成了 + +##### 进入SSH工具登录服务器 + +```js +//进入nginx文件夹并新建一个名为“ssl”的文件夹 +cd /etc/nginx +mkdir ssl + +//将已经下载好的的密钥和证书上传到ssl文件夹中 + + +``` + +## 配置Nginx + +### 还记得之前用debian快速搭建一个静态网站中有一步是新建的一个名为“conf.d”的文件夹里面有一个以“.conf” 结尾的配置文件接下来我们就要修改它 + +```js +// 以为自己的域名“91c13.top”为例 +vim /etc/nginx/conf.d //修改配置文件 + +server { + listen 80; + server_name 91c13.top www.91c13.top; + + + location / { + root /var/www/91c13.top; + index index.html; + } +} +//上面是之前写入的千万不要动它 + + +//新增以下几行 +server { + listen 443 ssl http2; + server_name 91c13.top www.91c13.top; + + ssl_certificate /etc/nginx/ssl/91c13.top.crt; //证书目录 + ssl_certificate_key /etc/nginx/ssl/91c13.top.key; //密钥目录 + + # 如果有中间证书,添加以下行若没有即可删除 + ssl_trusted_certificate /etc/nginx/ssl/ca-bundle.crt; + + root /var/www/91c13.top; # 修改为你的网站根目录 + index index.html index.htm; + + location / { + try_files $uri $uri/ =404; + } +} + +//重新加载 Nginx 配置确认无误 +nginx -t//显示‘is successful’即为成功 + +//重新加载 Nginx 服务: + +systemctl reload nginx //重启nginx服务 +``` + +## 大功告成接下来使用“https://+域名”即可成功访问服务器,访问成功后可以看见域名前有一把小锁的标志,即https协议配置成功 + +```sh +https://91c13.top/ +``` diff --git "a/\346\270\251\350\264\265\351\233\257/20240613-\347\256\241\351\201\223\347\254\246\345\217\212\351\207\215\345\256\232\345\220\221.md" "b/\346\270\251\350\264\265\351\233\257/20240613-\347\256\241\351\201\223\347\254\246\345\217\212\351\207\215\345\256\232\345\220\221.md" new file mode 100644 index 0000000000000000000000000000000000000000..35e5fee19b4e5b570853955eecaf4b833739eab8 --- /dev/null +++ "b/\346\270\251\350\264\265\351\233\257/20240613-\347\256\241\351\201\223\347\254\246\345\217\212\351\207\215\345\256\232\345\220\221.md" @@ -0,0 +1,99 @@ +# 管道符及重定向 + +## 重定向:重定向符号用于控制命令的输入和输出 + +### 输出重定向 + +|符号|解释| +|-|-| +|>:|将命令的标准输出重定向到指定文件中,如果文件不存在则创建,如果文件已存在则覆盖原有内容。| +|>>:|将命令的标准输出追加到指定文件的末尾,如果文件不存在则创建。| +|<:|从指定文件中读取内容,作为命令的标准输入。| +|<<:|将命令的标准输入设置为指定的文本块。| +|2>:|将命令的标准错误输出重定向到指定文件中,如果文件不存在则创建,如果文件已存在则覆盖原有内容。| +|2>>:|将命令的标准错误输出追加到指定文件的末尾,如果文件不存在则创建。| +|>& 或 &>|将标准输出和标准错误输出都重定向到同一个文件。| +|“管道符”|将一个命令的输出作为另一个命令的输入,称为管道。| + +### 重定向的应用 + +- 保存输出:将命令的输出结果保存到文件中,便于后续查看或分析。 +- 追加内容:将新的输出内容追加到现有文件的末尾,而不是覆盖原有内容。 +- 错误捕获:将命令执行过程中产生的错误信息重定向到单独的文件中,便于调试和记录。 +- 合并输出:将标准输出和标准错误输出合并到同一个文件中,便于统一处理。 +- 管道处理:通过管道将一个命令的输出作为另一个命令的输入,构建复杂的命令流程。 + +## 输出重定向 + +### 标准输出重定向 (>): 将命令的标准输出重定向到一个文件。如果文件存在,它将被覆盖 + +```js +echo "Hello, World!" > output.txt +//这个命令会将 "Hello, World!" 写入 output.txt 文件。如果 output.txt 已存在,原内容将被覆盖 +``` + +### 追加输出重定向 (>>):将命令的标准输出追加到一个文件的末尾。如果文件不存在,它将被创建 + +```js +echo "Hello, again!" >> output.txt +//这个命令会将 "Hello, again!" 追加到 output.txt 文件的末尾。 +``` + +### 输入重定向(<):将一个文件的内容作为命令的标准输入 + +```js +wc -l < input.txt +//这个命令会计算 input.txt 文件中的行数。 +``` + +## 错误重定向 + +### 标准错误重定向 (2>): 将命令的标准错误输出重定向到一个文件。如果文件存在,它将被覆盖 + +```js +ls non_existent_file 2> error.log +//这个命令会将 ls 命令的错误信息写入 error.log 文件。 +``` + +### 追加错误重定向 (2>>): 将命令的标准错误输出追加到一个文件的末尾。如果文件不存在,它将被创建 + +```js + +ls another_non_existent_file 2>> error.log +// 这个命令会将 ls 命令的错误信息追加到 error.log 文件的末尾。 +``` + +## 综合重定向 + +### 标准输出和标准错误都重定向 (>&):将命令的标准输出和标准错误都重定向到一个文件 + +```js +command > output_and_error.log 2>&1 +``` + +### 标准输出和标准错误分别重定向 + +```js +command > output.log 2> error.log +//这个命令会将 command 的标准输出写入 output.log 文件,而将标准错误写入 error.log 文件。 +``` + +## ere Document 重定向 + +### Here Document (<<): 用于将多行字符串作为输入传递给命令 + +```js +cat <