diff --git "a/\350\265\226\345\277\203\345\246\215/20240515 \345\256\211\350\243\205\347\263\273\347\273\237\345\222\214ssh.md" "b/\350\265\226\345\277\203\345\246\215/20240515 \345\256\211\350\243\205\347\263\273\347\273\237\345\222\214ssh.md" new file mode 100644 index 0000000000000000000000000000000000000000..69846da93bf794caf9dd735c57ce5819da941f9f --- /dev/null +++ "b/\350\265\226\345\277\203\345\246\215/20240515 \345\256\211\350\243\205\347\263\273\347\273\237\345\222\214ssh.md" @@ -0,0 +1,136 @@ +## LINUX + +### 安装系统 + +![e83743dec6c9223165c899201d6cd8b](assets/1.png) + +![7f50e82bac17a0d53108daebe86a45a](assets/2.png) + +![3](assets/3.png) + +![26a5cb13fc486fc0de9115e83cefe3d](assets/4.png) + +![5](20240515 Liunx.assets/5.png) + +![a71f874a9e0802836a946ca25895d2b](assets/6.png) + +![b77ae25e02ce25aa6151f94ec6147a3](assets/7.png) + +![5a96670c5ef35aa11238b4ac9f618db](assets/8.png) + +![a26515f7fde320cb2fb336bf72da473](assets/9.png) + +![9b522ecd6eea0697c423b37c87cb6f7](assets/10.png) + +![a490df1308c1e7ab83f0ca152656a55](assets/11.png) + +![09ff586e070075f5b0ba805a1afcb35](assets/12.png) + +![e2d3559dc29f474572bdbf4688c26c5](assets/14.png) + +### 安装ssh + +```js +//显示ip信息 +ip addr show + +//更新软件库,将软件数据同步 +apt-get update + +//安装ssh +apt-get install ssh / -y ssh + +//ssh登录连接方式 +ssh -l 用户名 ip +ssh 用户名@ip +``` + +可以用两种账号登录,一个是root超级管理员,一个是user普通用户 + +普通用户权限受限,需要用到的时候需要借用root权限 + +root账号默认静止ssh登录 + +### 允许使用root登录ssh + +```js +//查询ssh文件 +whereis ssh + +//进入这个文件 +cd /etc/ssh + +//查看当前目录的文件 +ls +``` + +```js +//进入文件,vi编辑器 +vi 文件 + +vim编辑器比较好用 + +//按i进入编辑模式 + +//修改一下内容,文件为sshd_confi,注释也要记得删除 +Port 22 // 开启端口22 +PermitRootLogin yes // 允许root登录 +PasswordAuthentication yes // 使用密码验证的模式 +PermitEmptyPasswords no // 禁用空密码 + +//按esc退出编辑模式 +按:进入命令模式 +强制保存并退出 +输入wq! +``` + +### 安装vim编辑器 + +``` +apt-get install vim -y +``` + +### 配置完ssh要重启才能让ssh生效 + +![ae9ed91f1027be1ef15db54c07b0c00](assets/15.png) + +enabled 代表开启 + +```js +//查看ssh状态 +systemctl status ssh + +//关闭ssh +systemctl stop ssh + +//开启ssh +systemctl start ssh + +//重启ssh +systemctl restart ssh + +//linux 执行的服务的命令 +systemctl 指令 服务名 +/etc/init.d/服务器 指令 +``` + +连接的称为客户端,被连接的称为服务端 + +没有SSH服务无法远程连接 + +它本身也可以当客户端连接它人 + +```js +//查看文件 +cat 文件 + +//查看ip(需要安装ifconfig),if是interface的缩写 +ifconfig +``` + +### 下载ifconfig + +``` +apt-get install net-tools +``` + diff --git "a/\350\265\226\345\277\203\345\246\215/20240516 \347\233\256\345\275\225\347\273\223\346\236\204\345\222\214\345\237\272\347\241\200\345\221\275\344\273\244.md" "b/\350\265\226\345\277\203\345\246\215/20240516 \347\233\256\345\275\225\347\273\223\346\236\204\345\222\214\345\237\272\347\241\200\345\221\275\344\273\244.md" new file mode 100644 index 0000000000000000000000000000000000000000..29c51b4241665f9448104925cb333688ba1fcba3 --- /dev/null +++ "b/\350\265\226\345\277\203\345\246\215/20240516 \347\233\256\345\275\225\347\273\223\346\236\204\345\222\214\345\237\272\347\241\200\345\221\275\344\273\244.md" @@ -0,0 +1,122 @@ +## 目录结构 + +```js +// 普通用户文件存放的位置 +bin + +// 管理员文件存放的位置 +sbin + +// 加载程序存放的位置 +boot + +// 设备 +dev + +// 存放系统配置文件 +etc + +// 普通用户的家目录 +home + +// root用户的家目录 +root + +// 系统库文件 +lib + +// 自动可接入设备(u盘登) +media + +// 手动可接入设备 +mnt + +// 软件安装包 +opt + +// 大部分用户安装的程序和文件 +usr + +// 运行时临时文件目录 +run + +// 临时文件目录 +tmp +``` + +linux里任何东西都是文件 + +```js +// 根目录 +/ +``` + +## Shell + +## Bash + +**shell 和 bash 是包含与被包含的关系** + +参数 + +大部分参数前有“ - ” + +选项 + +## 基础命令 + +```js +// 显示文件 +-l 长格式别表 +-a 所有文件包括隐藏文件 +-A 所有文件不包括隐藏文件 + +ls -al 文件路径 + +// 更改用户密码 +passwd 用户名 + +// 查询命令 +man 命令 +``` + +``` +空格键:向下滚一页 + +Enter键:向下滚一行 + +b键:向上滚一页 + +f 或 空格键:返回上一步 + +q键:退出手册页 +/:搜素手册中的文本 --> 输入要搜索的文本再按enter,用n匹配下一项,用N匹配上一项 +``` + +## 安装sudo + +```js +// 安装sudo +apt-get install sudo + +//查询sudo文件位置 +whereis sudoers + +//用vim编辑器用修改sudo文件信息 +vim /etc/sudoers + +//在root ALL=(ALL:ALL) ALL下添加 +user ALL=(ALL:ALL) ALL +``` + +普通用户需要使用root权限要加上sudo + +```js +//例如查看ip +sudo ifconfig +``` + +生效sudo权限需要普通用户退出再登录一次 + +注意字母大小写 + diff --git "a/\350\265\226\345\277\203\345\246\215/20240520 Linux\345\237\272\347\241\200\345\221\275\344\273\244.md" "b/\350\265\226\345\277\203\345\246\215/20240520 Linux\345\237\272\347\241\200\345\221\275\344\273\244.md" new file mode 100644 index 0000000000000000000000000000000000000000..15c383b8b1789ad17ed60debb6fdc959364e7198 --- /dev/null +++ "b/\350\265\226\345\277\203\345\246\215/20240520 Linux\345\237\272\347\241\200\345\221\275\344\273\244.md" @@ -0,0 +1,235 @@ +## Linux基础命令 + +新建完一个用户时只会出现$,并且输入不了其他东西,可以使用这个代码 + +```bash +(sudo) chsh -s /bin/bash 用户名 +``` + +创建用户 + +```js +// 交互式,方便可以一次性设置好 +adduser 用户名 + +// 全部都要自己设置 +useradd 用户名 +``` + +切换root账号 + +```js +// 权限最高 +su - + +su root + +su +``` + +删除用户 + +```js +// 手动删除 +userdel + +// 安全的都删除 +deluser +``` + +退出 + +```js +exit + +logout +``` + +```js +// 进入主目录 +cd ~ + +// 创建目录 +mkdir -p 路径 +// -p 当相关目录不存在时,就创建,存在则跳过 + +// 创建文件 +touch 文件名(.扩展名) + +// 清屏快捷键 +Ctrl+L + +// 按i 进入编辑模式 +// 按esc 退回普通模式 +// 按shift+: 进入命令模式 +// wq! 保存并强制退出 +// w 写入(write) +// q 退出(quit) +// ! 强制 + +// 直接打开编辑器 +// :w 新文件名 保存文件名 +``` + +另一种编辑器 + +nano + +nano 所见即所得 用法都写在上面 + +```js +// 查询命令 +man 命令 + +命令 --help +``` + +```js +// 打包,不带压缩 +// v 过程 +// c 一定要在开头 +// f 一定要紧跟着文件名 +tar -cvf 打包后的文件名.tar 被打包的目录或文件名 + +// 打包压缩 +tar -czvf 打包后的文件名.tar.gz 被打包的目录或文件名 + +// 解包不解压缩 +// -C 指定解包在哪目录 +tar -xvf 打包后的文件名.tar -C 需要存放的目录 + +// 解包解压缩 +tar -xzvf 打包后的文件名.tar +``` + +```js +// && 并and,可以将代码一起使用,依次执行多个文件 +``` + +```js +// 通过echo将内容写入文件 +echo "内容" > 文件名 + +// 查看文件内容 +cat 文件名 +``` + +```js +// gzip 只负责压缩和解压缩,所用通常和tar一起使用,gzip作为tar一个 -g 参数存在 +// 压缩不保留原文件 +gzip 文件名 + +// 保留原文件压缩 +// -k 保留原文件 +gzip -k 文件名 +``` + +```js +// 都在客户端执行 +// 下载客户端文件到服务器 +scp 客户端本机主机路径 服务器主机名@ip:服务器路径 + +// 上传服务器文件到客户端 +scp 服务器主机名@ip:服务器路径 客户端本地主机路径 + +// 可以登上客户端,再进行上传与下载 +sftp 服务器主机名@ip + +// 下载,找到文件位置(用sftp登上之后),将文件下载到本地 +get 文件名 服务器路径 + +// 上传,找到文件位置(用sftp登上之后),将文件上传到服务器 +put 文件名 to 服务器路径 +``` + +```js +// 没有权限 +Permission denied +``` + +## 作业 + +1. ### 综合练习题:大学生生活场景中的文件夹和文件管理 + + 假设你是一名大学生,现在面临着整理学习资料和课程作业的任务。请按照以下要求完成相关的文件夹和文件管理操作: + + 1. 在你的个人文档目录下创建一个名为`学习资料`的文件夹,并进入该文件夹。 + + ```js + mkdir 学习资料 ; cd 学习资料 + + // ; 表示并且 + ``` + + 2. 在`学习资料`文件夹中创建一个名为`计算机科学`的文件夹。 + + ```bash + cd 学习资料 && mkdir 计算机科学 + ``` + + 3. 在`计算机科学`文件夹中创建两个子文件夹,分别命名为`课程资料`和`编程项目`。 + + ```bash + cd 计算机科学 && mkdir {课程资料,编程项目} + ``` + + 4. 将你最近的一门计算机科学课程的课件文件(假设文件名为`CS101_第一讲.pdf`)放入`课程资料`文件夹。 + + ```bash + scp 本机需要上传的文件路径 liunx用户名@ip:/需要放置的文件路径 + ``` + + 5. 在`编程项目`文件夹中创建一个名为`Java项目`的文件夹。 + + ```bash + cd 编程项目 && mkdir Java + ``` + + 6. 在`Java项目`文件夹中创建两个空文件,分别命名为`主程序.java`和`工具类.java`。 + + ```bash + touch {主程序,工具类}.java + ``` + + 7. 复制`主程序.java`并命名为`备份_主程序.java`。 + + ```bash + cp 复制的文件 粘贴的文件名 + ``` + + 8. 创建一个名为`Python项目`的文件夹,并将`工具类.java`移动到`Python项目`文件夹中。 + + ```js + mv 工具类.java ./python + + // + mv 文件 指定移动的路径 + ``` + + 9. 列出`计算机科学`文件夹中所有文件和文件夹的内容。 + + ```js + ls -aR + + // + -a 所有文件包括隐藏文件 + -R 所有内容 + ``` + + 10. 删除`编程项目`文件夹及其包含的所有内容。 + + ```bash + rm -rf 目录名 + ``` + + 11. 重命名`Python项目`为`数据分析项目`。 + + ```bash + mv 旧名字 新名字 + ``` + + 12. 最后,列出当前所在目录的路径。 + + ```bash + pwd + ``` \ No newline at end of file diff --git "a/\350\265\226\345\277\203\345\246\215/20240522 \346\226\207\344\273\266\345\244\271\345\217\212\346\226\207\344\273\266\347\256\241\347\220\206.md" "b/\350\265\226\345\277\203\345\246\215/20240522 \346\226\207\344\273\266\345\244\271\345\217\212\346\226\207\344\273\266\347\256\241\347\220\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..6314161a2788866a4b35ed570cdd971c2634b1e5 --- /dev/null +++ "b/\350\265\226\345\277\203\345\246\215/20240522 \346\226\207\344\273\266\345\244\271\345\217\212\346\226\207\344\273\266\347\256\241\347\220\206.md" @@ -0,0 +1,263 @@ +## 文件夹及文件管理会用到的命令 + +### ls:列出目录内容 + +```bash +#列出当前目录下的文件和目录 +ls + +#列出该路径下的文件和目录 +ls 路径 + +#列出目录本身信息而不是其下目录以及文件信息 +ls -d 路径 + +#列出详细信息 +-l + +#以下以-l为前提 +#以易读的方式显示详细信息 +-h + +#列出所有文件包括隐藏文件 +-a + +#根据修改时间排序 +-t + +#反向排序列出 +-r + +#根据大小排序 +-S + +#递归列出 +-R + +#显示颜色 +--color + +#添加适当指示符 +-CF +``` + +```bash +#/bin/ls 运用绝对路径的ls没有bash支撑 需要自己增加参数 + +#/bin/ls ls的绝对路径位置 +``` + +### tree + +```bash +#apt-get升级版apt +#下载tree +sudo apt install tree +``` + +没有 tree 有低配版 ls -R 替代 + +### 别名 alias + +```bash +#设置别名需要先进入系统文件 .bashrc +vim .bashrc + +#找到有很多 alias 的那里可以把它们打开也可以添加别名 +alias ll='ls -l' +#之后输入ll就相当于输入 ls -l 了 +#需要重新登录才可以生效 +``` + +### cd:改变当前目录 + +```bash +#进入该目录 +cd 目录名 + +#返回上一级 +cd .. + +#进入家目录 +cd ~ / cd + +#返回上次所在的目录,还会显示当前所在目录 +cd - +``` + +### pwd:显示绝对路径 + +```bash +#显示当前目录路径 +pwd + +#先pwd显示当前路径后将路径保存为变量 +ssl_dir=$(pwd) + +#再打印出路径的变量,显示路径 +echo "目录$ssl_dir" +``` + +### mkdir:创建新目录 + +```bash +#创建该目录 +mkdir 目录名 + +#连同子目录一起创建,以及跳过已存在的目录 +mkdir -p 父目录/子目录 + +#一起设置权限 +mkdir -m 权限模式 目录名 + +#在临时目录创建目录 +mkdir -p /tmp/目录名 +``` + +权限最大是 7 + +tmp 临时文件夹 + +### rmdir :删除空目录 + +```bash +#只能删除空目录 +rmdir 目录名 +``` + +### echo + +```bash +#可以将内容写进文件里 +echo 内容 > 文件名 +``` + +### rm + +```bash +#删除文件 +rm 文件名 + +#删除多个文件 +rm 文件名 文件名 + +#删除文件时不会询问 +-f + +#交互式(询问是否删除) +-i + +#通配符*,删除以a开头的文件 +rm a* +#删除这个路径的所有txt文件 +rm ./*.txt + +#递归删除(将目录里的文件也一并删除) +-r +#不递归直接删除最外层文件无法删除 + +#显示删除过程 +-v + +#只删除空目录 +-d +``` + +/ 根目录 + +### . 隐藏文件 + +```bash +#. 表示隐藏文件 +#可以创建可以修改可以删除 +touch .文件 +mv 文件 .文件 +rm .文件 +``` + +## 作业 + +假设您刚刚登录到一个Linux系统,并位于您的家目录(`~`)下。您需要完成以下一系列复杂的操作来组织和清理您的文件和目录。请按照顺序执行,并给出相应的命令。 + +1. **创建测试文件**:在家目录下创建三个文本文件,分别命名为`.hidden.txt`(隐藏文件)、`visible1.txt`和`visible2.txt`。 + + ```js + touch .hidden.txt && touch {visible1,visible2}.txt + + // 创建隐藏文件 + touch .文件名 + ``` + +2. **列出文件和目录**:列出家目录(`~`)下的所有文件和目录,包括隐藏文件,并查看其详细权限和属性。 + + ```js + ls -al ~ + + // -a 显示所有文件包括隐藏文件 + // -l 显示详细权限和属性 + // ~ 表示家目录,cd ~也可以使用 + ``` + +3. **创建工作区**:创建一个新的目录`work_area`,并在其中创建三个子目录:`project_a`、`project_b`和`docs`。 + + ``` + mkdir work_area && mkdir ./work_area/{project_a,project_b,docs} + ``` + +4. **移动文本文件**:将家目录下的所有`.txt`文件移动到`work_area/docs`目录中,并确保这些文件在移动后仍然是隐藏的(如果它们是隐藏的)。 + + ```js + mv 路径/* 路径 + + // * 所有文件 + ``` + +5. **创建新文件**:在`work_area/project_a`目录下创建一个新的文本文件`notes.txt`,并添加一些内容(例如:`echo "Initial notes for project A" > work_area/project_a/notes.txt`)。 + + ``` + touch 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`。 + + ``` + cp -r work_area/project_a work_area/project_b/project_a_backup + ``` + +7. **列出文件并按大小排序**:列出`work_area/docs`目录下的所有文件,并按文件大小降序排列。 + + ```js + ls -Sl + + // -S 大小降序排列 + // -l 以长列表格式显示文件 + ``` + +8. **删除所有文件**:删除`work_area/docs`目录下所有文件。 + + ``` + rm -rf work_area/docs/* + ``` + +9. **删除目录**:假设您不再需要`work_area/project_b`目录及其所有内容,请递归地强制删除它。 + + ``` + rm -rf work_area/project_b + ``` + +10. **清理空目录**:清理`work_area`目录,删除其中所有的空目录(注意:不要删除非空的目录)。 + + ``` + rmdir work_area/ + ``` + +11. **创建别名**:回到您的家目录,并创建一个别名`llh`,该别名能够列出当前目录下文件和目录的长格式列表,并以人类可读的格式显示文件大小(类似于`ls -lh`命令)。 + + ```js + vim .bashrc + + // 在编辑器中添加这一行,在alias大部队里 + alias llh='ls -lh' + ``` + + \ No newline at end of file diff --git "a/\350\265\226\345\277\203\345\246\215/20240523 \346\226\207\344\273\266\345\244\271\345\217\212\346\226\207\344\273\266\347\256\241\347\220\206.md" "b/\350\265\226\345\277\203\345\246\215/20240523 \346\226\207\344\273\266\345\244\271\345\217\212\346\226\207\344\273\266\347\256\241\347\220\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..c18445b73b9bcbb7a62b183681d34ff73c54cbfe --- /dev/null +++ "b/\350\265\226\345\277\203\345\246\215/20240523 \346\226\207\344\273\266\345\244\271\345\217\212\346\226\207\344\273\266\347\256\241\347\220\206.md" @@ -0,0 +1,277 @@ +## 作业 + +相关和目录可自行创建后再操作 + +### 练习题 1:复制文件 + +假设你有两个目录:`/home/user/docs` 和 `/home/user/backup`。 + +1. 将`/home/user/docs`目录下的`file1.txt`复制到`/home/user/backup`目录下。 + + ```bash + cp file1.txt /home/user/backup/ + ``` + +2. 复制`/home/user/docs`目录下的所有`.txt`文件到`/home/user/backup`目录下。 + + ```js + cp *.txt /home/user/backup/ + + // * 表示所有文件 + // .txt 表示后缀是txt的文件 + ``` + +### 练习题 2:复制文件夹及其内容 + +1. 假设`/home/user/photos`是一个包含多个图片文件夹的目录,请复制整个`/home/user/photos`目录及其所有内容到`/home/user/archive`目录下。 + + ```js + cp -r /home/user/photos /home/user/archive/ + + // -r 表示递归复制 + ``` + +### 练习题 3:移动文件 + +1. 将`/home/user/docs`目录下的`file2.docx`移动到`/home/user/papers`目录下。 + + ```bash + mv /home/user/docs/file2.docx /home/user/papers/ + ``` + +2. 如果`/home/user/papers`目录下已经有一个名为`file2.docx`的文件,请确保移动操作会询问你是否要覆盖它。 + + ```js + mv -i /home/user/docs/file2.docx /home/user/papers/ + + // -i 交互式 + ``` + +### 练习题 4:重命名文件 + +1. 将`/home/user/docs`目录下的`oldname.pdf`重命名为`newname.pdf`。 + + ```bash + mv /home/user/docs/oldname.pdf /home/user/docs/newname.pdf + ``` + +### 练习题 5:结合使用 + +1. 复制`/home/user/docs`目录下的`report.md`到`/home/user/temp`,然后将复制过去的文件重命名为`temp_report.md`。 + + ```bash + cp /home/user/docs/report.md /home/user/temp/temp_report.md + ``` + +2. 将`/home/user/docs`目录下所有以`.doc`结尾的文件移动到`/home/user/processed`,并且如果这些文件在目标目录中已经存在,则不覆盖它们。 + + ```js + mv -n /home/user/docs/*.doc /home/user/processed + + // -n 不覆盖已存在文件 + ``` + +### 练习题 6:使用通配符 + +1. 复制`/home/user/docs`目录下所有以`.jpg`或`.png`结尾的图片文件到`/home/user/images`目录。 + + ```js + cp /home/user/docs/*.jpg /home/user/images/ | cp /home/user/docs/*.png /home/user/images/ + + // | 表示不覆盖已存在文件 + ``` + +### 练习题 7:详细输出 + +1. 使用`cp`命令复制文件时,显示详细的复制信息。 + + ```js + cp -v newname.pdf oldname.pdf + + // -v 表示显示详细信息 + ``` + +2. 使用`mv`命令移动文件时,显示详细的移动信息。 + + ```js + mv -v report.md /home/user/papers/ + + // -v 表示显示详细信息 + ``` + +### 练习题 8:更新文件 + +1. 如果`/home/user/backup`目录中已经有一个与`/home/user/docs`目录下的`file1.txt`同名的文件,并且`/home/user/docs/file1.txt`的内容是更新的,请使用`cp`命令将更新的文件复制到备份目录,并覆盖旧文件(假设你知道旧文件可以被安全地覆盖)。 + + ```js + cp -u /home/user/docs/file1.txt /home/user/backup + + // -u 表示当源文件更新时间比目标文件新时会覆盖目标文件 + ``` + + +相关和目录可自行创建后再操作 + +1. 在家目录下建立文件exam.c,将文件exam.c拷贝到/tmp这个目录下,并改名为 shiyan.c + + ```bash + cp exam.c ./tmp/shiyan.c + ``` + +2. 在任何目录下回到用户主目录? + + ```js + cd ~ + cd + cd /home + + // ~ 表示主目录 + ``` + +3. 用长格式列出/tmp/test目录下所有的文件包括隐藏文件? + + ```js + ls test -al + + // -a 表示显示所有文件包括隐藏文件 + // -l 表示以长格式列表显示文件 + ``` + +4. /tmp/test2目录下,创建5个文件分别是 1.txt 2.txt 3.txt 4.txt 5.txt,压缩这5个文件,压缩包的名字是hailiang.tar + + ```js + touch {1,2,3,4,5}.txt + tar -cvf hailiang.tar {1,2,3,4,5}.txt + + // -c 压缩 + // -v + // -f + ``` + +5. 当前目录,建立文件 file1.txt 并更名为 file2.txt? + + ```bash + mv file1.txt file2.txt + ``` + +6. 当前目录,用vim建立文件bbbb.txt 并将用户名的加入其中保存退出? + + ```js + vim bbbb.txt + + // + // + // + // + // + ``` + +7. 将家目录中扩展名为txt、doc和bak的文件全部复制到/tmp/test目录中 + + ```bash + mv *.txt *.doc *.bak /home/user/yina/tmp/test + ``` + +8. 将文件file1.txt从当前目录移动到家目录的/docs中。 + + ```bash + mv /home/user/yina/file1.txt /home/user/yina/tmp/docs/ + ``` + +9. 复制文件file2.txt从当前目录到家目录/backup中。 + + ```bash + mv /home/user/yina/tmp/test/file2.txt /home/user/yina/bachup/ + ``` + +10. 将家目录/docs中的所有文件和子目录移动到家目录/archive中。 + + ```bash + mv ./tmp/docs/* ./archive/ + ``` + +11. 复制家目录/photos及其所有内容到家目录/backup中。 + + ```bash + cp ./photos/* ./bachup/ + ``` + +12. 将文件家目录/docs/report.doc移动到家目录/papers中,并将其重命名为final_report.doc。 + + ```bash + mv /home/user/yina/tmp/docs/report.doc /home/user/yina/papers/final_report.doc + ``` + +13. 在家目录/docs中创建一个名为notes.txt的空文件,并将其复制到目录家目录/backup中。 + + ```bash + cp /home/user/yina/tmp/docs/notes.txt /home/user/yina/bachup/ + ``` + +14. 复制家目录/images中所有以.jpg结尾的文件到家目录/photos中。 + + ```bash + cp *.jpg /home/user/yina/photos/ + ``` + +15. 将文件家目录/docs/file1.txt和家目录/docs/file2.txt复制到家目录/backup中。 + + ```js + cp archive/file1.txt bachup/ + cp -n bachup/file2.txt bachup/ + + // + ``` + +16. 将家目录/docs中的所有.txt文件复制到家目录/text_files中。 + + ```bash + cp ./tmp/docs/*.txt text_files/ + ``` + +17. 将家目录/docs中的所有文件移动到家目录/temp中,并且如果文件已存在,则覆盖它们。 + + ```js + mv -n notes.txt /home/user/yina/text_files/ + + // + ``` + +18. 将家目录/docs中的所有文件移动到家目录/archive中,并且在移动时显示详细的移动信息。 + + ```js + mv -v ./docs/* ./archive/ + + // + ``` + +19. 复制家目录/docs中的所有子目录及其内容到家目录/backup中。 + + ```js + cp -r ./docs/ ./bachup/ + + // + ``` + +20. 将家目录/docs中的所有文件和子目录移动到家目录/backup中,但排除文件名以"temp_"开头的文件。 + + ``` + + ``` + +21. 将目录/docs/report.txt移动到家目录/archive中,但如果目标目录中已存在同名文件,则不直接覆盖,先备份同名文件为report.txt_bak。 + + ```js + mv -b ./docs/report.txt ./archive + + // + ``` + +22. 将家目录/docs中所有以.pdf结尾的文件复制到家目录/pdf_files中,并且如果目标目录中已存在同名文件,则忽略它们。 + + ```js + mv -n ./docs/*.pdf ./pdf_files + ``` + + + diff --git "a/\350\265\226\345\277\203\345\246\215/20240525 \347\273\235\345\257\271\350\267\257\345\276\204\345\222\214\347\233\270\345\257\271\350\267\257\345\276\204.md" "b/\350\265\226\345\277\203\345\246\215/20240525 \347\273\235\345\257\271\350\267\257\345\276\204\345\222\214\347\233\270\345\257\271\350\267\257\345\276\204.md" new file mode 100644 index 0000000000000000000000000000000000000000..e087ccf940617525667b55a5dc24cd8c4baeb4d2 --- /dev/null +++ "b/\350\265\226\345\277\203\345\246\215/20240525 \347\273\235\345\257\271\350\267\257\345\276\204\345\222\214\347\233\270\345\257\271\350\267\257\345\276\204.md" @@ -0,0 +1,275 @@ +### 教学课:理解和使用绝对路径与相对路径 + +#### 目标 + +- 了解什么是绝对路径和相对路径 +- 学习在命令行中如何使用绝对路径和相对路径 +- 掌握不同场景下如何选择使用绝对路径或相对路径 + +### 一、概念讲解 + +#### 1. 绝对路径 + +**定义**:从根目录 `/` 开始的完整路径,用于唯一确定文件或目录的位置。 + +**特点**: + +- 以 `/` 开头 +- 与当前工作目录无关 + +**示例**: + +- `/home/user/documents/file.txt` +- `/usr/local/bin` + +#### 2. 相对路径 + +**定义**:相对于当前工作目录的路径,用于在当前目录的基础上指向文件或目录。 + +**特点**: + +- 不以 `/` 开头 +- 依赖于当前工作目录 + +**特殊符号**: + +- `.` 表示当前目录 ./ +- `..` 表示上一级目录../ + +**示例**: + +- `documents/file.txt` (假设当前目录是 `/home/user`) +- `../user/file.txt` (假设当前目录是 `/home/user/documents`) + +### 二、实际操作示例 + +#### 1. 绝对路径操作示例 + +**示例 1**:列出 `/var/log` 目录中的所有文件。 + +```bash +ls /var/log +``` + +**示例 2**:复制 `/etc/passwd` 文件到 `/home/user/backup` 目录。 + +```bash +cp /etc/passwd /home/user/backup/ +``` + +#### 2. 相对路径操作示例 + +**示例 1**:假设你在 `/home/user/projects` 目录下,列出当前目录中的所有文件和目录。 + +```bash +ls ../ +``` + +**示例 2**:假设你在 `/home/user/projects/scripts` 目录下,显示 `../data` 目录中的所有文件和目录。 + +```bash +ls ../data +``` + +### 三、练习题目 + +#### 绝对路径和相对路径题目 + +**题目 1**:在 `/home/user` 目录下创建一个名为 `newdir` 的目录。 + +- **绝对路径**: + + ```bash + mkdir /home/user/newdir + ``` + +- **相对路径**(假设当前目录是 `/home/user`): + + ```bash + mkdir newdir + ``` + +**题目 2**:将 `/usr/share/doc` 目录中的所有内容复制到 `/home/user/doc_backup` 目录中。 + +- **绝对路径**: + + ```bash + cp -r /usr/share/doc /home/user/doc_backup + ``` + +- **相对路径**(假设当前目录是 `/home/user`): + + ```bash + cp -r /usr/share/doc doc_backup + ``` + +**题目 3**:查找 `/etc` 目录下包含 `network` 关键字的所有文件。 + +- **绝对路径**: + + ```bash + grep -r "network" /etc + ``` + +- **相对路径**(假设当前目录是 `/etc`): + + ```bash + grep -r "network" . + ``` + +**题目 4**:假设你在 `/home/user` 目录下,将 `projects/report.txt` 文件复制到 `backup/` 目录中。 + +- **绝对路径**: + + ```bash + cp /home/user/projects/report.txt /home/user/backup/ + ``` + +- **相对路径**: + + ```bash + cp projects/report.txt backup/ + ``` + +**题目 5**:假设你在 `/home/user/projects` 目录下,移动 `../data/data.csv` 到当前目录。 + +- **绝对路径**: + + ```bash + mv /home/user/data/data.csv /home/user/projects/ + ``` + +- **相对路径**: + + ```bash + mv ../data/data.csv . + ``` + +**题目 6**:假设你在 `/home/user/projects` 目录下,查找 `../logs` 目录中包含 `error` 关键字的所有文件。 + +- **绝对路径**: + + ```bash + grep -r "error" /home/user/logs + ``` + +- **相对路径**: + + ```bash + grep -r "error" ../logs + ``` + +### 四、总结 + +- **绝对路径**始终从根目录开始,适合在需要唯一标识文件或目录位置时使用。 +- **相对路径**从当前工作目录出发,适合在命令行交互和项目内部文件操作时使用。 +- 了解两者的使用场景,有助于在实际工作中灵活运用,提高工作效率。 + +### 练习题 1:复制文件 + +假设你有两个目录:`/home/user/docs` 和 `/home/user/backup`。 + +1. 将`/home/user/docs`目录下的`file1.txt`复制到`/home/user/backup`目录下。 + + ```bash + cp file1.txt /home/user/backup/ + ``` + +2. 复制`/home/user/docs`目录下的所有`.txt`文件到`/home/user/backup`目录下。 + + ```js + cp *.txt /home/user/backup/ + + // * 表示所有文件 + // .txt 表示后缀是txt的文件 + ``` + +### 练习题 2:复制文件夹及其内容 + +1. 假设`/home/user/photos`是一个包含多个图片文件夹的目录,请复制整个`/home/user/photos`目录及其所有内容到`/home/user/archive`目录下。 + + ```js + cp -r /home/user/photos /home/user/archive/ + + // -r 表示递归复制 + ``` + +### 练习题 3:移动文件 + +1. 将`/home/user/docs`目录下的`file2.docx`移动到`/home/user/papers`目录下。 + + ```bash + mv /home/user/docs/file2.docx /home/user/papers/ + ``` + +2. 如果`/home/user/papers`目录下已经有一个名为`file2.docx`的文件,请确保移动操作会询问你是否要覆盖它。 + + ```js + mv -i /home/user/docs/file2.docx /home/user/papers/ + + // -i 交互式 + ``` + +### 练习题 4:重命名文件 + +1. 将`/home/user/docs`目录下的`oldname.pdf`重命名为`newname.pdf`。 + + ```bash + mv /home/user/docs/oldname.pdf /home/user/docs/newname.pdf + ``` + +### 练习题 5:结合使用 + +1. 复制`/home/user/docs`目录下的`report.md`到`/home/user/temp`,然后将复制过去的文件重命名为`temp_report.md`。 + + ```bash + cp /home/user/docs/report.md /home/user/temp/temp_report.md + ``` + +2. 将`/home/user/docs`目录下所有以`.doc`结尾的文件移动到`/home/user/processed`,并且如果这些文件在目标目录中已经存在,则不覆盖它们。 + + ```js + mv -n /home/user/docs/*.doc /home/user/processed + + // -n 不覆盖已存在文件 + ``` + +### 练习题 6:使用通配符 + +1. 复制`/home/user/docs`目录下所有以`.jpg`或`.png`结尾的图片文件到`/home/user/images`目录。 + + ```js + cp /home/user/docs/*.jpg /home/user/images/ | cp /home/user/docs/*.png /home/user/images/ + + // | 表示不覆盖已存在文件 + ``` + +### 练习题 7:详细输出 + +1. 使用`cp`命令复制文件时,显示详细的复制信息。 + + ```js + cp -v newname.pdf oldname.pdf + + // -v 表示显示详细信息 + ``` + +2. 使用`mv`命令移动文件时,显示详细的移动信息。 + + ```js + mv -v report.md /home/user/papers/ + + // -v 表示显示详细信息 + ``` + +### 练习题 8:更新文件 + +1. 如果`/home/user/backup`目录中已经有一个与`/home/user/docs`目录下的`file1.txt`同名的文件,并且`/home/user/docs/file1.txt`的内容是更新的,请使用`cp`命令将更新的文件复制到备份目录,并覆盖旧文件(假设你知道旧文件可以被安全地覆盖)。 + + ```js + cp -u /home/user/docs/file1.txt /home/user/backup + + // -u 表示当源文件更新时间比目标文件新时会覆盖目标文件 + ``` + + \ No newline at end of file diff --git "a/\350\265\226\345\277\203\345\246\215/20240527 find\344\270\216grep.md" "b/\350\265\226\345\277\203\345\246\215/20240527 find\344\270\216grep.md" new file mode 100644 index 0000000000000000000000000000000000000000..858ee2eea24f7aac093011cdb8d7e77129ad4c94 --- /dev/null +++ "b/\350\265\226\345\277\203\345\246\215/20240527 find\344\270\216grep.md" @@ -0,0 +1,88 @@ +### 操作题 + +1. **查找当前目录及其子目录中所有扩展名为 `.log` 的文件**: + + ```bash + find ./ -type f -name "*.log" + ``` + +2. **在 `/var/logs` 目录及其子目录中查找所有包含关键字 `error` 的文件,并显示匹配的行**: + + ```bash + grep -r --color=auto -cn "error" ./ + ``` + +3. **在 `/home/user/docs` 目录中查找文件名包含 `report` 的所有文件** + + ```bash + find /home/user/yina/docs/ -type f -name "*report*" + ``` + +4. **查找 `/etc` 目录中最近7天内修改过的文件**: + ```bash + find /home/user/yina/etc/ -type f -mtime -7 + ``` + +5. **显示 `/usr/bin` 目录中名为 `python` 的可执行文件的路径**: + + ```bash + find /home/user/yina/etc/ -type f -mtime -7 + ``` + +6. **查找系统中名为 `ls` 的命令及其手册页位置**: + ```bash + whereis ls + ``` + +7. **查找当前目录中包含关键字 `TODO` 的所有文件,并显示匹配的行和文件名**: + + ```bash + grep -rn "TODO" /home/user/yina + ``` + +8. **在 `/home/user/projects` 目录中查找所有包含关键字 `function` 的 `.js` 文件**: + ```bash + find ./projects -type f -name "*.js" -exec grep "function" {} + + ``` + +9. **查找并显示当前目录及其子目录中所有空文件**: + + ```bash + find . -type f -empty + ``` + +10. **在 `/var/www` 目录中查找包含关键字 `database` 的所有文件,并只显示文件名**: + + ```bash + grep -r "database" /home/user/yina/var/www/ + ``` + +### 综合操作题 + +**综合操作题:** + +假设你在一个名为 `/home/user/workspace` 的目录中工作。你需要完成以下任务: + +1. 查找该目录中所有扩展名为 `.conf` 的文件。 +2. 在这些 `.conf` 文件中查找包含关键字 `server` 的行。 +3. 将包含关键字 `server` 的文件名和匹配的行保存到一个名为 `server_lines.txt` 的文件中。 + +**预期命令步骤:** + +1. 查找所有扩展名为 `.conf` 的文件: + + ```bash + find ./workspace -type f -name "*.conf" + ``` + +2. 在这些 `.conf` 文件中查找包含关键字 `server` 的行: + ```bash + find ./workspace -type f -name "*.conf" -exec grep -n "server" ./workspace {} + + ``` + +3. 将结果保存到 `server_lines.txt` 文件中: + ```bash + find ./workspace -type f -name "*.conf" -exec grep -rn "server" ./workspace {} + > server_lines.txt + ``` + +通过这套操作题和综合操作题,你可以全面地了解和应用Linux系统中与文件和内容查询相关的常用命令。 \ No newline at end of file diff --git "a/\350\265\226\345\277\203\345\246\215/assets/1.png" "b/\350\265\226\345\277\203\345\246\215/assets/1.png" new file mode 100644 index 0000000000000000000000000000000000000000..824f37d26f80e2c0f7b18dab748224f362105124 Binary files /dev/null and "b/\350\265\226\345\277\203\345\246\215/assets/1.png" differ diff --git "a/\350\265\226\345\277\203\345\246\215/assets/10.png" "b/\350\265\226\345\277\203\345\246\215/assets/10.png" new file mode 100644 index 0000000000000000000000000000000000000000..36e70de399001fbb77622648e6d30d294cf247ea Binary files /dev/null and "b/\350\265\226\345\277\203\345\246\215/assets/10.png" differ diff --git "a/\350\265\226\345\277\203\345\246\215/assets/11.png" "b/\350\265\226\345\277\203\345\246\215/assets/11.png" new file mode 100644 index 0000000000000000000000000000000000000000..d9cc08cde0336613fb639e83828d07e6bb403972 Binary files /dev/null and "b/\350\265\226\345\277\203\345\246\215/assets/11.png" differ diff --git "a/\350\265\226\345\277\203\345\246\215/assets/12.png" "b/\350\265\226\345\277\203\345\246\215/assets/12.png" new file mode 100644 index 0000000000000000000000000000000000000000..f0f994b693456d80105cee1cd450ba917f6cbac2 Binary files /dev/null and "b/\350\265\226\345\277\203\345\246\215/assets/12.png" differ diff --git "a/\350\265\226\345\277\203\345\246\215/assets/13.png" "b/\350\265\226\345\277\203\345\246\215/assets/13.png" new file mode 100644 index 0000000000000000000000000000000000000000..1eec10802f6409129ff305317b41a3fb730ac2ac Binary files /dev/null and "b/\350\265\226\345\277\203\345\246\215/assets/13.png" differ diff --git "a/\350\265\226\345\277\203\345\246\215/assets/14.png" "b/\350\265\226\345\277\203\345\246\215/assets/14.png" new file mode 100644 index 0000000000000000000000000000000000000000..7036c745924291cb081eaca8e7beff676051d0d7 Binary files /dev/null and "b/\350\265\226\345\277\203\345\246\215/assets/14.png" differ diff --git "a/\350\265\226\345\277\203\345\246\215/assets/15.png" "b/\350\265\226\345\277\203\345\246\215/assets/15.png" new file mode 100644 index 0000000000000000000000000000000000000000..0cb633c410e4d1dca0dd723cdbdc21a5177c51e4 Binary files /dev/null and "b/\350\265\226\345\277\203\345\246\215/assets/15.png" differ diff --git "a/\350\265\226\345\277\203\345\246\215/assets/2.png" "b/\350\265\226\345\277\203\345\246\215/assets/2.png" new file mode 100644 index 0000000000000000000000000000000000000000..4c162872c3148f49b160f2fb1f36d03b6d1d7bc3 Binary files /dev/null and "b/\350\265\226\345\277\203\345\246\215/assets/2.png" differ diff --git "a/\350\265\226\345\277\203\345\246\215/assets/3.png" "b/\350\265\226\345\277\203\345\246\215/assets/3.png" new file mode 100644 index 0000000000000000000000000000000000000000..35a0b73aa10b906f226a7752dda2c6a8bc4f5445 Binary files /dev/null and "b/\350\265\226\345\277\203\345\246\215/assets/3.png" differ diff --git "a/\350\265\226\345\277\203\345\246\215/assets/4.png" "b/\350\265\226\345\277\203\345\246\215/assets/4.png" new file mode 100644 index 0000000000000000000000000000000000000000..87597887ac52b528d57959e4947f1a79cfa18de2 Binary files /dev/null and "b/\350\265\226\345\277\203\345\246\215/assets/4.png" differ diff --git "a/\350\265\226\345\277\203\345\246\215/assets/5.png" "b/\350\265\226\345\277\203\345\246\215/assets/5.png" new file mode 100644 index 0000000000000000000000000000000000000000..740f07dbf177f5dfa52573fe844ce3947c49955e Binary files /dev/null and "b/\350\265\226\345\277\203\345\246\215/assets/5.png" differ diff --git "a/\350\265\226\345\277\203\345\246\215/assets/6.png" "b/\350\265\226\345\277\203\345\246\215/assets/6.png" new file mode 100644 index 0000000000000000000000000000000000000000..bce042a0afe24c6809036f806a8b0543d4f5c067 Binary files /dev/null and "b/\350\265\226\345\277\203\345\246\215/assets/6.png" differ diff --git "a/\350\265\226\345\277\203\345\246\215/assets/7.png" "b/\350\265\226\345\277\203\345\246\215/assets/7.png" new file mode 100644 index 0000000000000000000000000000000000000000..b185f0ce443ae89cc32fab0abfde13ee245abede Binary files /dev/null and "b/\350\265\226\345\277\203\345\246\215/assets/7.png" differ diff --git "a/\350\265\226\345\277\203\345\246\215/assets/8.png" "b/\350\265\226\345\277\203\345\246\215/assets/8.png" new file mode 100644 index 0000000000000000000000000000000000000000..ca56ba86ca3c46fc9e30a782bf25357796affbc4 Binary files /dev/null and "b/\350\265\226\345\277\203\345\246\215/assets/8.png" differ diff --git "a/\350\265\226\345\277\203\345\246\215/assets/9.png" "b/\350\265\226\345\277\203\345\246\215/assets/9.png" new file mode 100644 index 0000000000000000000000000000000000000000..bf0899c0e9a207d8a72b7f9153a80615b4a40a0b Binary files /dev/null and "b/\350\265\226\345\277\203\345\246\215/assets/9.png" differ