├── .zshrc ├── 000219 └── oeasy │ ├── WEB-INF │ ├── .web.xml.swp │ ├── classes │ │ ├── HelloWorldExample.class │ │ ├── HelloWorldExample.java │ │ ├── InsertServlet.class │ │ ├── InsertServlet.java │ │ ├── OeasyServlet.class │ │ ├── OeasyServlet.java │ │ ├── jdbc.class │ │ └── jdbc.java │ ├── lib │ │ └── postgresql-42.2.23.jar │ └── web.xml │ └── oeasy.html ├── LICENSE ├── Oeasy教您玩转linux.docx ├── README.md ├── md ├── 001-45529-什么是内核_uname.sy.md ├── 002-575454-自由软件运动_free_software_unix.sy.md ├── 002-575454-自由软件运动与开源运动.sy.md ├── 003-45530-什么是发行版_distro.sy.md ├── 003-802604-开源运动_opensource_linux.sy.md ├── 004-45530-什么是发行版_distro_debian_ubuntu_canonical.sy.md ├── 004-45531-我在哪_pwd.sy.md ├── 005-45532-灵魂之问_whatis.sy.md ├── 005-802605-红帽_red_hat_centos_rhel_fedora.sy.md ├── 006-45531-我在哪_pwd.sy.md ├── 006-45533-详查手册_man.sy.md ├── 007-45532-灵魂之问_whatis.sy.md ├── 007-45534-这儿都有啥_ls.sy.md ├── 008-45533-详查手册_man.sy.md ├── 008-45535-那啥在哪_whereis.sy.md ├── 009-45534-这儿都有啥_ls.sy.md ├── 009-45536-到底哪个_which.sy.md ├── 010-45535-那啥在哪_whereis.sy.md ├── 010-45537-清屏_clear.sy.md ├── 011-45536-到底哪个_which.sy.md ├── 011-48362-命令_command_总结.sy.md ├── 012-45537-清屏_clear.sy.md ├── 012-575455-自由软件运动和开源运动.sy.md ├── 013-45538-持续输出_yes.sy.md ├── 013-48362-命令_command_总结.sy.md ├── 014-45538-持续输出_yes.sy.md ├── 014-562131-包管理_dpkg.sy.md ├── 014-575455-[趣味拓展]自由软件运动_free_software_stallman.sy.md ├── 015-45538-持续输出_yes.sy.md ├── 015-45541-高级软件包工具_apt.sy.md ├── 015-562131-包管理_dpkg.sy.md ├── 016-45541-高级软件包工具_apt.sy.md ├── 016-562048-编译_compile_安装_install.sy.md ├── 016-562131-包管理_dpkg.sy.md ├── 017-45541-高级软件包工具_apt.sy.md ├── 017-45542-标志_linuxlogo.sy.md ├── 017-562048-编译_compile_安装_install.sy.md ├── 018-45542-标志_linuxlogo.sy.md ├── 018-45568-字符画_figlet.sy.md ├── 018-562048-编译_compile_安装_install.sy.md ├── 019-45542-标志_linuxlogo.sy.md ├── 019-45568-字符画_figlet.sy.md ├── 019-45569-风格文字_toilet.sy.md ├── 020-45568-字符画_figlet.sy.md ├── 020-45569-风格文字_toilet.sy.md ├── 020-45571-蒸汽机车_sl.sy.md ├── 021-45569-风格文字_toilet.sy.md ├── 021-45571-蒸汽机车_sl.sy.md ├── 021-45574-黑客帝国_cmatrix.sy.md ├── 022-45571-蒸汽机车_sl.sy.md ├── 022-45572-满屏乱码_bb.sy.md ├── 022-45574-黑客帝国_cmatrix.sy.md ├── 023-45570-更新源_apt_update_hollywood.sy.md ├── 023-45572-满屏乱码_bb.sy.md ├── 023-45574-黑客帝国_cmatrix.sy.md ├── 024-45570-更新源_apt_update_hollywood.sy.md ├── 024-45572-满屏乱码_bb.sy.md ├── 024-45581-应用管理_aptitude.sy.md ├── 025-45570-更新源_apt_update_hollywood.sy.md ├── 025-45575-牛说_cowsay.sy.md ├── 025-45581-应用管理_aptitude.sy.md ├── 026-45575-牛说_cowsay.sy.md ├── 026-45578-管道_pipe.sy.md ├── 026-45581-应用管理_aptitude.sy.md ├── 027-45575-牛说_cowsay.sy.md ├── 027-45576-中文输入_fcitx.sy.md ├── 027-45578-管道_pipe.sy.md ├── 028-45576-中文输入_fcitx.sy.md ├── 028-45578-管道_pipe_boxes.sy.md ├── 028-48588-自制字符图_asciiview.sy.md ├── 029-45576-中文输入_fcitx.sy.md ├── 029-48588-自制字符图_asciiview.sy.md ├── 029-48590-随机笑话_fortune.sy.md ├── 030-45580-中文诗词_fortune-zh.sy.md ├── 030-48588-自制字符图_asciiview.sy.md ├── 030-48590-随机笑话_fortune.sy.md ├── 031-209842-分屏工具_tmux_会话_session.sy.md ├── 031-45580-中文诗词_fortune-zh.sy.md ├── 031-48590-随机笑话_fortune.sy.md ├── 032-209842-分屏工具_tmux_会话_session.sy.md ├── 032-45580-中文诗词_fortune-zh.sy.md ├── 032-562349-分屏工具_tmux_窗口_window.sy.md ├── 033-209842-分屏工具_tmux_会话_session.sy.md ├── 033-562349-分屏工具_tmux_窗口_window.sy.md ├── 033-562394-分屏工具_tmux_窗格_pane.sy.md ├── 034-45583-桌面宠物_pet.sy.md ├── 034-562349-分屏工具_tmux_窗口_window.sy.md ├── 034-562394-分屏工具_tmux_窗格_pane.sy.md ├── 035-45586-火狐_firefox.sy.md ├── 035-562394-分屏工具_tmux_窗格_pane.sy.md ├── 035-733260-终端浏览器_w3m.sy.md ├── 036-45583-桌面宠物_pet.sy.md ├── 036-45587-文件管理器_nautilus.sy.md ├── 036-733260-终端浏览器_w3m.sy.md ├── 037-45579-桌面环境_xfce.sy.md ├── 037-45583-桌面宠物_pet.sy.md ├── 037-45586-火狐_firefox.sy.md ├── 038-45566-总结.sy.md ├── 038-45586-火狐_firefox.sy.md ├── 038-45587-文件管理器_nautilus.sy.md ├── 039-45579-桌面环境_xfce.sy.md ├── 039-45587-文件管理器_nautilus.sy.md ├── 039-565216-新建文件夹_mkdir.sy.md ├── 040-45566-总结.sy.md ├── 040-45579-桌面环境_xfce.sy.md ├── 040-565221-绝对路径和相对路径_cd.sy.md ├── 041-45566-总结.sy.md ├── 041-565216-新建文件夹_mkdir.sy.md ├── 041-566031-路径_dirs_堆栈.sy.md ├── 042-565216-新建文件夹_mkdir.sy.md ├── 042-565221-绝对路径和相对路径_cd.sy.md ├── 042-565244-复制_copy.sy.md ├── 043-565221-绝对路径和相对路径_cd.sy.md ├── 043-565252-软连接_link.sy.md ├── 043-802603-查找文件_find_输出文件的绝对路径_realpath.sy.md ├── 044-565280-查看文件信息_stat.sy.md ├── 044-566031-路径_dirs_堆栈.sy.md ├── 044-802603-查找文件_find_输出文件的绝对路径_realpath.sy.md ├── 045-565244-复制_copy.sy.md ├── 045-565281-别名_alias.sy.md ├── 045-566031-路径_dirs_堆栈.sy.md ├── 046-565244-复制_copy.sy.md ├── 046-565252-软链接_link_硬链接_读取链接_readlink.sy.md ├── 046-566138-删除文件夹_rmdir.sy.md ├── 047-565252-软链接_link_硬链接_读取链接_readlink.sy.md ├── 047-566139-移动_mv.sy.md ├── 047-732316-拷贝粘贴文件内容_pbcopy_pbpaste.sy.md ├── 048-565280-查看文件信息_stat.sy.md ├── 048-566166-时间日期_date.sy.md ├── 048-732316-拷贝粘贴文件内容_pbcopy_pbpaste.sy.md ├── 049-565280-查看文件信息_stat.sy.md ├── 049-565281-别名_alias.sy.md ├── 049-566237-日历_cal.sy.md ├── 050-565281-别名_alias.sy.md ├── 050-566138-删除文件夹_rmdir.sy.md ├── 050-566238-阴历_lunar.sy.md ├── 051-566138-删除文件夹_rmdir.sy.md ├── 051-566139-移动_mv.sy.md ├── 051-566239-树形结构_tree.sy.md ├── 052-566139-移动_mv.sy.md ├── 052-566166-时间日期_date.sy.md ├── 052-566697-文件夹总结.sy.md ├── 053-566166-时间日期_date.sy.md ├── 053-566237-日历_cal.sy.md ├── 053-567189-我是谁_who.sy.md ├── 054-566237-日历_cal.sy.md ├── 054-566238-阴历_lunar.sy.md ├── 054-567656-列出用户信息_id.sy.md ├── 055-566238-阴历_lunar.sy.md ├── 055-566239-树形结构_tree.sy.md ├── 055-569355-添加用户_adduser.sy.md ├── 056-566239-树形结构_tree.sy.md ├── 056-566697-文件夹总结.sy.md ├── 056-569368-修改密码_passwd.sy.md ├── 057-250350-脚本解释器_zsh.sy.md ├── 057-566697-文件夹总结.sy.md ├── 057-567189-我是谁_who.sy.md ├── 058-567189-我是谁_who.sy.md ├── 058-567656-列出用户信息_id.sy.md ├── 058-569386-个性化颜色方案_Oh-My-Zsh.sy.md ├── 059-210191-远程登录_ssh.sy.md ├── 059-567656-列出用户信息_id.sy.md ├── 059-569355-添加用户_adduser.sy.md ├── 060-210190-远程拷贝_scp.sy.md ├── 060-569355-添加用户_adduser.sy.md ├── 060-569368-修改密码_passwd.sy.md ├── 061-250350-脚本解释器_zsh.sy.md ├── 061-569368-修改密码_passwd.sy.md ├── 061-569446-提权_sudo.sy.md ├── 062-250350-脚本解释器_zsh.sy.md ├── 062-569386-个性化颜色方案_Oh-My-Zsh.sy.md ├── 062-578030-用户组_group.sy.md ├── 063-210191-远程登录_ssh.sy.md ├── 063-569386-个性化颜色方案_Oh-My-Zsh.sy.md ├── 063-578057-给用户组发信息_wall.sy.md ├── 064-210190-远程拷贝_scp.sy.md ├── 064-210191-远程登录_ssh.sy.md ├── 064-578060-用户和用户组总结.sy.md ├── 065-210190-远程拷贝_scp.sy.md ├── 065-569446-提权_sudo.sy.md ├── 065-578028-修改文件权限模式_chmod.sy.md ├── 066-569446-提权_sudo.sy.md ├── 066-578030-用户组_group.sy.md ├── 066-578722-修改所属组_chgrp_修改执行权限_chmod_execute.sy.md ├── 067-578030-用户组_group.sy.md ├── 067-578057-给用户组发信息_wall.sy.md ├── 067-580756-修改所有者_chown_递归修改_查看细节.sy.md ├── 068-578057-给用户组发信息_wall.sy.md ├── 068-578058-临时拥有文件所有者用户身份_suid.sy.md ├── 068-578060-用户和用户组总结.sy.md ├── 069-578028-修改文件权限模式_chmod.sy.md ├── 069-578059-临时拥有文件所有组身份_sgid.sy.md ├── 069-578060-用户和用户组总结.sy.md ├── 070-578028-修改文件权限模式_chmod.sy.md ├── 070-578722-修改所属组_chgrp_修改执行权限_chmod_execute.sy.md ├── 070-582912-设置粘滞位_sticky.sy.md ├── 071-578722-修改所属组_chgrp_修改执行权限_chmod_execute.sy.md ├── 071-580756-修改所有者_chown_递归修改_查看细节.sy.md ├── 071-582918-批量添加用户和文件夹.sy.md ├── 072-199464-数据库_postgresql.sy.md ├── 072-578058-临时拥有文件所有者用户身份_suid.sy.md ├── 072-580756-修改所有者_chown_递归修改_查看细节.sy.md ├── 073-192426-nginx.sy.md ├── 073-578058-临时拥有文件所有者用户身份_suid.sy.md ├── 073-578059-临时拥有文件所有组身份_sgid.sy.md ├── 074-260422-apache.sy.md ├── 074-578059-临时拥有文件所有组身份_sgid.sy.md ├── 074-582912-设置粘滞位_sticky.sy.md ├── 075-199465-tomcat源起.sy.md ├── 075-582912-设置粘滞位_sticky.sy.md ├── 075-582918-批量添加用户和文件夹.sy.md ├── 076-199464-数据库_postgresql.sy.md ├── 076-260421-tomcat结构.sy.md ├── 076-582918-批量添加用户和文件夹.sy.md ├── 077-192426-nginx.sy.md ├── 077-199464-数据库_postgresql.sy.md ├── 077-526680-徒手建立应用.sy.md ├── 078-192426-nginx.sy.md ├── 078-260422-apache.sy.md ├── 078-260423-搭建开发环境.sy.md ├── 079-199465-tomcat源起.sy.md ├── 079-260422-apache.sy.md ├── 079-265117-调试模式_debug_mode_log日志.sy.md ├── 080-199465-tomcat源起.sy.md ├── 080-260421-tomcat结构.sy.md ├── 080-261125-前端和后端.sy.md ├── 081-260421-tomcat结构.sy.md ├── 081-485593-双层架构(2-tier).sy.md ├── 081-526680-徒手建立应用.sy.md ├── 082-260423-搭建开发环境.sy.md ├── 082-485612-请求和响应.sy.md ├── 082-526680-徒手建立应用.sy.md ├── 083-260423-搭建开发环境.sy.md ├── 083-265117-调试模式_debug_mode_log日志.sy.md ├── 083-495450-请求参数.sy.md ├── 084-261125-前端和后端.sy.md ├── 084-265117-调试模式_debug_mode_log日志.sy.md ├── 084-498649-处理异常.sy.md ├── 085-200308-连接postgresql数据库引擎.sy.md ├── 085-261125-前端和后端.sy.md ├── 085-485593-双层架构(2-tier).sy.md ├── 086-485593-双层架构(2-tier).sy.md ├── 086-485612-请求和响应.sy.md ├── 086-527010-通过驱动访问postgres数据库引擎.sy.md ├── 087-485612-请求和响应.sy.md ├── 087-495450-请求参数.sy.md ├── 087-527011-JDBC理解.sy.md ├── 088-263205-通过动态页面访问postgres数据库引擎.sy.md ├── 088-495450-请求参数.sy.md ├── 088-498649-处理异常.sy.md ├── 089-200308-连接postgresql数据库引擎.sy.md ├── 089-263206-自动加载更新的class_tomcat无需重启.sy.md ├── 089-498649-处理异常.sy.md ├── 090-200308-连接postgresql数据库引擎.sy.md ├── 090-263207-修改表结构.sy.md ├── 090-527010-通过驱动访问postgres数据库引擎.sy.md ├── 091-265977-管理约束条件CONSTRAINT.sy.md ├── 091-527010-通过驱动访问postgres数据库引擎.sy.md ├── 091-527011-JDBC理解.sy.md ├── 092-263205-通过动态页面访问postgres数据库引擎.sy.md ├── 092-527011-JDBC理解.sy.md ├── 092-527013-使用jdbc向数据库插入数据.sy.md ├── 093-263205-通过动态页面访问postgres数据库引擎.sy.md ├── 093-263206-自动加载更新的class_tomcat无需重启.sy.md ├── 093-527012-使用servlet向数据库插入数据.sy.md ├── 094-263206-自动加载更新的class_tomcat无需重启.sy.md ├── 094-263207-修改表结构.sy.md ├── 094-527130-响应重定向.sy.md ├── 095-263207-修改表结构.sy.md ├── 095-264932-使用网页提交数据_文本框post提交表单.sy.md ├── 095-265977-管理约束条件CONSTRAINT.sy.md ├── 096-265977-管理约束条件CONSTRAINT.sy.md ├── 096-266982-使用网页插入数据库.sy.md ├── 096-527013-使用jdbc向数据库插入数据.sy.md ├── 097-263308-先查再插入.sy.md ├── 097-527012-使用servlet向数据库插入数据.sy.md ├── 097-527013-使用jdbc向数据库插入数据.sy.md ├── 098-271131-文本框前端验证.sy.md ├── 098-527012-使用servlet向数据库插入数据.sy.md ├── 098-527130-响应重定向.sy.md ├── 099-263208-密码二次输入验证复杂性.sy.md ├── 099-264932-使用网页提交数据_文本框post提交表单.sy.md ├── 099-527130-响应重定向.sy.md ├── 100-264932-使用网页提交数据_文本框post提交表单.sy.md ├── 100-266982-使用网页插入数据库.sy.md ├── 100-483456-封装数据库连接.sy.md ├── 101-263308-先查再插入.sy.md ├── 101-266982-使用网页插入数据库.sy.md ├── 101-483477-PrepareStatement准备语句.sy.md ├── 102-263308-先查再插入.sy.md ├── 102-271131-文本框前端验证.sy.md ├── 102-484450-JNDI.sy.md ├── 103-263208-密码二次输入验证复杂性.sy.md ├── 103-271131-文本框前端验证.sy.md ├── 103-485586-JDBC数据库连接池.sy.md ├── 104-263208-密码二次输入验证复杂性.sy.md ├── 104-483456-封装数据库连接.sy.md ├── 104-497989-准备删除.sy.md ├── 105-483456-封装数据库连接.sy.md ├── 105-483477-PrepareStatement准备语句.sy.md ├── 106-483477-PrepareStatement准备语句.sy.md ├── 106-484450-JNDI.sy.md ├── 107-484450-JNDI.sy.md ├── 107-485586-JDBC数据库连接池.sy.md ├── 108-485586-JDBC数据库连接池.sy.md ├── 108-497989-准备删除.sy.md ├── 109-497989-准备删除.sy.md └── README.md ├── md2html.sh ├── oeasy ├── META-INF │ └── context.xml ├── WEB-INF │ ├── .web.xml.swp │ ├── classes │ │ ├── .ErrorServlet.java.swp │ │ ├── .PostgresJdbc.java.swo │ │ ├── .PostgresJdbc.java.swp │ │ ├── AddServlet.class │ │ ├── AddServlet.java │ │ ├── ConnectionPool.class │ │ ├── DBConUtil.class │ │ ├── DBConUtil.java │ │ ├── ErrorServlet.class │ │ ├── ErrorServlet.java │ │ ├── HelloWorld.class │ │ ├── HelloWorldExample.class │ │ ├── HelloWorldExample.java │ │ ├── InsertServlet.class │ │ ├── InsertServlet.java │ │ ├── JNDIServlet.class │ │ ├── JNDIServlet.java │ │ ├── OeasyServlet.class │ │ ├── OeasyServlet.java │ │ ├── PostgresJdbc.class │ │ ├── PostgresJdbc.java │ │ ├── RequestHeader.class │ │ ├── RequestHeader.java │ │ ├── SelectServlet.class │ │ ├── SelectServlet.java │ │ ├── TestServlet.class │ │ ├── TestServlet.java │ │ └── UserManager.class │ └── web.xml ├── oeasy ├── oeasy.html ├── prepareAdd.html └── prepareInsert.html ├── test.txt └── test2.csv /000219/oeasy/WEB-INF/.web.xml.swp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overmind1980/oeasy-linux-tutorial/e7d7bfc1e34fd26a6b6509e4725c5fc9befc5700/000219/oeasy/WEB-INF/.web.xml.swp -------------------------------------------------------------------------------- /000219/oeasy/WEB-INF/classes/HelloWorldExample.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overmind1980/oeasy-linux-tutorial/e7d7bfc1e34fd26a6b6509e4725c5fc9befc5700/000219/oeasy/WEB-INF/classes/HelloWorldExample.class -------------------------------------------------------------------------------- /000219/oeasy/WEB-INF/classes/HelloWorldExample.java: -------------------------------------------------------------------------------- 1 | import java.io.IOException; 2 | import java.io.PrintWriter; 3 | import javax.servlet.ServletException; 4 | import javax.servlet.http.HttpServlet; 5 | import javax.servlet.http.HttpServletRequest; 6 | import javax.servlet.http.HttpServletResponse; 7 | public class HelloWorldExample extends HttpServlet { 8 | @Override 9 | public void doGet(HttpServletRequest request, 10 | HttpServletResponse response) 11 | throws IOException, ServletException{ 12 | response.setContentType("text/html"); 13 | response.setCharacterEncoding("UTF-8"); 14 | PrintWriter out = response.getWriter(); 15 | out.print("你好,Tomcat!"); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /000219/oeasy/WEB-INF/classes/InsertServlet.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overmind1980/oeasy-linux-tutorial/e7d7bfc1e34fd26a6b6509e4725c5fc9befc5700/000219/oeasy/WEB-INF/classes/InsertServlet.class -------------------------------------------------------------------------------- /000219/oeasy/WEB-INF/classes/InsertServlet.java: -------------------------------------------------------------------------------- 1 | import java.io.IOException; 2 | import java.io.PrintWriter; 3 | import javax.servlet.ServletException; 4 | import javax.servlet.http.HttpServlet; 5 | import javax.servlet.http.HttpServletRequest; 6 | import javax.servlet.http.HttpServletResponse; 7 | import java.sql.Connection; 8 | import java.sql.DriverManager; 9 | import java.sql.Statement; 10 | import java.sql.ResultSet; 11 | public class InsertServlet extends HttpServlet { 12 | @Override 13 | public void doPost(HttpServletRequest request, 14 | HttpServletResponse response) 15 | throws IOException, ServletException{ 16 | String topic = request.getParameter("topic"); 17 | String url = request.getParameter("url"); 18 | Connection c = null; 19 | response.setContentType("text/html"); 20 | response.setCharacterEncoding("UTF-8"); 21 | PrintWriter out = response.getWriter(); 22 | try { 23 | Class.forName("org.postgresql.Driver"); 24 | c = DriverManager 25 | .getConnection("jdbc:postgresql://localhost:5432/oeasy", 26 | "postgres", "oeasy@linux"); 27 | Statement stmt = c.createStatement(); 28 | String sql = "insert into urls(topic,url) values('"+topic+"','"+url+"')"; 29 | stmt.executeUpdate(sql); 30 | System.out.println("======"+sql); 31 | stmt.close(); 32 | c.close(); 33 | } catch (Exception e) { 34 | e.printStackTrace(); 35 | System.err.println(e.getClass().getName()+": "+e.getMessage()); 36 | System.exit(0); 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /000219/oeasy/WEB-INF/classes/OeasyServlet.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overmind1980/oeasy-linux-tutorial/e7d7bfc1e34fd26a6b6509e4725c5fc9befc5700/000219/oeasy/WEB-INF/classes/OeasyServlet.class -------------------------------------------------------------------------------- /000219/oeasy/WEB-INF/classes/OeasyServlet.java: -------------------------------------------------------------------------------- 1 | import java.io.IOException; 2 | import java.io.PrintWriter; 3 | import javax.servlet.ServletException; 4 | import javax.servlet.http.HttpServlet; 5 | import javax.servlet.http.HttpServletRequest; 6 | import javax.servlet.http.HttpServletResponse; 7 | import java.sql.Connection; 8 | import java.sql.DriverManager; 9 | import java.sql.Statement; 10 | import java.sql.ResultSet; 11 | public class OeasyServlet extends HttpServlet { 12 | @Override 13 | public void doGet(HttpServletRequest request, 14 | HttpServletResponse response) 15 | throws IOException, ServletException{ 16 | Connection c = null; 17 | response.setContentType("text/html"); 18 | response.setCharacterEncoding("UTF-8"); 19 | PrintWriter out = response.getWriter(); 20 | try { 21 | Class.forName("org.postgresql.Driver"); 22 | c = DriverManager 23 | .getConnection("jdbc:postgresql://localhost:5432/oeasy", 24 | "postgres", "oeasy@linux"); 25 | c.setAutoCommit(false); 26 | Statement stmt = c.createStatement(); 27 | ResultSet rs = stmt.executeQuery("select * from urls"); 28 | while(rs.next()){ 29 | String topic = rs.getString("topic"); 30 | String url = rs.getString("url"); 31 | out.print(topic + ":" + url); 32 | } 33 | rs.close(); 34 | stmt.close(); 35 | c.close(); 36 | } catch (Exception e) { 37 | e.printStackTrace(); 38 | System.err.println(e.getClass().getName()+": "+e.getMessage()); 39 | System.exit(0); 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /000219/oeasy/WEB-INF/classes/jdbc.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overmind1980/oeasy-linux-tutorial/e7d7bfc1e34fd26a6b6509e4725c5fc9befc5700/000219/oeasy/WEB-INF/classes/jdbc.class -------------------------------------------------------------------------------- /000219/oeasy/WEB-INF/classes/jdbc.java: -------------------------------------------------------------------------------- 1 | import java.sql.Connection; 2 | import java.sql.DriverManager; 3 | import java.sql.Statement; 4 | import java.sql.ResultSet; 5 | public class jdbc{ 6 | public static void main(String args[]) { 7 | Connection c = null; 8 | try { 9 | Class.forName("org.postgresql.Driver"); 10 | c = DriverManager 11 | .getConnection("jdbc:postgresql://localhost:5432/oeasy", 12 | "postgres", "oeasy@linux"); 13 | c.setAutoCommit(false); 14 | Statement stmt = c.createStatement(); 15 | ResultSet rs = stmt.executeQuery("select * from urls"); 16 | while(rs.next()){ 17 | String topic = rs.getString("topic"); 18 | String url = rs.getString("url"); 19 | System.out.println(topic + ":" + url + "\n"); 20 | } 21 | rs.close(); 22 | stmt.close(); 23 | c.close(); 24 | } catch (Exception e) { 25 | e.printStackTrace(); 26 | System.err.println(e.getClass().getName()+": "+e.getMessage()); 27 | System.exit(0); 28 | } 29 | } 30 | } 31 | 32 | -------------------------------------------------------------------------------- /000219/oeasy/WEB-INF/lib/postgresql-42.2.23.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overmind1980/oeasy-linux-tutorial/e7d7bfc1e34fd26a6b6509e4725c5fc9befc5700/000219/oeasy/WEB-INF/lib/postgresql-42.2.23.jar -------------------------------------------------------------------------------- /000219/oeasy/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | 23 | 24 | Hello, World Application 25 | 26 | This is a simple web application with a source code organization 27 | based on the recommendations of the Application Developer's Guide. 28 | 29 | 30 | 31 | HelloWorldExample 32 | HelloWorldExample 33 | 34 | 35 | HelloWorldExample 36 | /hello 37 | 38 | 39 | 40 | InsertServlet 41 | InsertServlet 42 | 43 | 44 | InsertServlet 45 | /insert 46 | 47 | 48 | 49 | OeasyServlet 50 | OeasyServlet 51 | 52 | 53 | 54 | OeasyServlet 55 | /oeasy 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /000219/oeasy/oeasy.html: -------------------------------------------------------------------------------- 1 |
2 | topic: 3 |
4 | url: 5 | 6 |
7 | -------------------------------------------------------------------------------- /Oeasy教您玩转linux.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overmind1980/oeasy-linux-tutorial/e7d7bfc1e34fd26a6b6509e4725c5fc9befc5700/Oeasy教您玩转linux.docx -------------------------------------------------------------------------------- /md/010-45537-清屏_clear.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 清屏 8 | 9 | ## 回忆上次内容 😌 10 | 11 | - 有了这三个命令 12 | - whatis 13 | - whereis 14 | - which 15 | - 也就是灵魂三问 16 | - 我们就可以了解任何命令的基本信息了! 17 | - 我们再去问问什么命令呢?🤔 18 | 19 | ## 清屏 20 | 21 | - 我们这次的命令 22 | - `clear` 23 | - 很简单 24 | 25 | - `clear` 作用是清屏 26 | - 下面我们对他提出灵魂三问: 27 | 28 | ```shell 29 | whatis clear 30 | whereis clear 31 | which clear 32 | ``` 33 | 34 | - 这样我们就可以对 clear 有个基本了解 35 | - 如果想更深入了解 36 | - 可以查询手册。 37 | - man📕 38 | - 另外我们也可以使用ctrl+l快捷键来清屏 39 | 40 | ### 特殊情况 41 | 42 | - 有些文件问不出具体位置,比如: 43 | - cd 44 | - pwd 45 | 46 | - 他们是 `shell built-in command` 47 | - 那么这些命令在哪?🤔 48 | 49 | ### 内建命令 50 | 51 | - 这些内建命令 52 | - 是在这个 shell 里面的 53 | - shell 启动的时候 54 | - 就在内存中了 55 | - 所以叫 shell built-in command 56 | - 没有具体的硬盘对应的命令文件 57 | - 和ls、python不同 58 | - ls 一开始没在内存中 59 | - 调用的时候才从硬盘加载到内存中运行的 60 | 61 | - 那么shell `啥时候`启动的呢? 62 | 63 | ### 加载过程 64 | - 终端 terminal 启动时候 65 | - 把硬盘上的 shell 代码 66 | - 如 zsh、bash 67 | - 加载到内存里 68 | - 如果要找相应的源代码 69 | - 就需要去 shell 的源代码里面找 70 | 71 | ### 尝试找源码 72 | 73 | - 更新源 74 | 75 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220901-1661993945667) 76 | 77 | - 尝试下载 78 | 79 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220901-1661993974118) 80 | 81 | - 尝试下载但失败 82 | - 给了个提示 83 | 84 | ### github 85 | 86 | - 到github上面可以找到相应的源码 87 | 88 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220901-1661994028618) 89 | 90 | - 可以找到一个位置 91 | 92 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220901-1661994043256) 93 | 94 | - 真的可以找到pwd的源码 95 | - cd也可以找到吗? 96 | 97 | ### cd源码 98 | - 同一个文件中 99 | 100 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220901-1661994138716) 101 | 102 | - cd也可以找到 103 | - 我们去总结一下 104 | 105 | ### 总结 106 | 107 | - 这次我们的命令 108 | - clear 非常简单 109 | - 就是清屏 110 | - 还可以用ctrl+l快捷键来清屏 111 | - 练习灵魂三问 112 | - whatis clear 113 | - whereis clear 114 | - which clear 115 | - 有些内建(builtin)命令(command)找不到硬盘位置 116 | - 比如pwd、cd 117 | - 可以在zsh的源码中找到相应的位置 118 | - 基本的命令了解了不少 119 | - 是时候总结一下了 120 | - 下次总结!👋 121 | -------------------------------------------------------------------------------- /md/011-48362-命令_command_总结.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 我们来回顾一下 😌 10 | 11 | - 我们都讲了什么?🤔 12 | - Linux 的历史 ⌨️ 13 | - 各种发行版的生生灭灭 14 | - 系统运作的过程 🖥 15 | - 程序运行的过程 16 | - 各种命令 ⌨️ 17 | - 都有什么命令呢 18 | 19 | ### 命令 Command🧐 20 | 21 | - 命令分两种 22 | - 一种是在硬盘上的 23 | - 可以用apt 找到源码和帮助 24 | - 比如 25 | - uname 26 | - ls 27 | - cat 28 | - pwd 29 | - 灵魂三问 30 | - whatis 31 | - whereis 32 | - which 33 | - man 34 | - clear 35 | 36 | - 另一种是在系统内置(builtin)的 37 | - 可以在shell的源代码中找到实现过程 38 | - 比如 39 | - cd 40 | - pwd 41 | ‘ 42 | - 还有一个比较特殊 43 | - 特别有权限的`sudo` 44 | 45 | - 命令行还有什么技巧? 💡 46 | 47 | ### 命令行快捷方式 💡 48 | 49 | - 记忆命令 50 | - ⬆️ 上一条命令 51 | - ⬇️️ 下一条命令 52 | - ctrl+r 搜索历史命令 53 | - 快速移动 54 | - ⬅️ 向左一格 55 | - ➡️️ 向右一格 56 | - ctrl+⬅️ 向左一个单词 57 | - ctrl+ 向右一个单词 58 | - ctrl+a 直接到头ahead 59 | - ctrl+e 直接到尾end 60 | - 快捷键清屏 61 | - ctrl+l清屏 62 | - 快速删除 63 | - ctrl+c 忽略当前行 64 | - ctrl+u 从光标位置开始,删除左方所有的字符,直到该行开始的位置 65 | - ctrl+k 从光标位置开始,删除右方所有的字符,直到该行结束的位置 66 | - 登出系统 67 | - ctrl+d 快快退出终端 68 | - ctrl+w 向前删除到词头 69 | - 急急如律令 70 | - 可以打印到一个鼠标垫上 71 | 72 | ### 总结 73 | 74 | - 这就是我们最开始接触到的 75 | - Linux 76 | 77 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220901-1661996457116) 78 | 79 | - 严格的说 80 | - 应该是基于linux内核的 81 | - gnu的shell环境和各种命令 82 | - 很有趣 83 | - 准备进入更好玩的游乐场吧!! 84 | - 🎡 85 | 86 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220901-1661996596490) 87 | -------------------------------------------------------------------------------- /md/012-45537-清屏_clear.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 清屏 8 | 9 | ## 回忆上次内容 😌 10 | 11 | - 有了这三个命令 12 | - whatis 13 | - whereis 14 | - which 15 | - 也就是灵魂三问 16 | - 我们就可以了解任何命令的基本信息了! 17 | - 我们再去问问什么命令呢?🤔 18 | 19 | ## 清屏 20 | 21 | - 我们这次的命令 22 | - `clear` 23 | - 很简单 24 | 25 | - `clear` 作用是清屏 26 | - 下面我们对他提出灵魂三问: 27 | 28 | ```shell 29 | whatis clear 30 | whereis clear 31 | which clear 32 | ``` 33 | 34 | - 这样我们就可以对 clear 有个基本了解 35 | - 如果想更深入了解 36 | - 可以查询手册。 37 | - man📕 38 | - 另外我们也可以使用ctrl+l快捷键来清屏 39 | 40 | ### 特殊情况 41 | 42 | - 有些文件问不出具体位置,比如: 43 | - cd 44 | - pwd 45 | 46 | - 他们是 `shell built-in command` 47 | - 那么这些命令在哪?🤔 48 | 49 | ### 内建命令 50 | 51 | - 这些内建命令 52 | - 是在这个 shell 里面的 53 | - shell 启动的时候 54 | - 就在内存中了 55 | - 所以叫 shell built-in command 56 | - 没有具体的硬盘对应的命令文件 57 | - 和ls、python不同 58 | - ls 一开始没在内存中 59 | - 调用的时候才从硬盘加载到内存中运行的 60 | 61 | - 那么shell `啥时候`启动的呢? 62 | 63 | ### 加载过程 64 | - 终端 terminal 启动时候 65 | - 把硬盘上的 shell 代码 66 | - 如 zsh、bash 67 | - 加载到内存里 68 | - 如果要找相应的源代码 69 | - 就需要去 shell 的源代码里面找 70 | 71 | ### 尝试找源码 72 | 73 | - 更新源 74 | 75 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220901-1661993945667/wm) 76 | 77 | - 尝试下载 78 | 79 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220901-1661993974118/wm) 80 | 81 | - 尝试下载但失败 82 | - 给了个提示 83 | 84 | ### github 85 | 86 | - 到github上面可以找到相应的源码 87 | 88 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220901-1661994028618/wm) 89 | 90 | - 可以找到一个位置 91 | 92 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220901-1661994043256/wm) 93 | 94 | - 真的可以找到pwd的源码 95 | - cd也可以找到吗? 96 | 97 | ### cd源码 98 | - 同一个文件中 99 | 100 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220901-1661994138716/wm) 101 | 102 | - cd也可以找到 103 | - 我们去总结一下 104 | 105 | ### 总结 106 | 107 | - 这次我们的命令 108 | - clear 非常简单 109 | - 就是清屏 110 | - 还可以用ctrl+l快捷键来清屏 111 | - 练习灵魂三问 112 | - whatis clear 113 | - whereis clear 114 | - which clear 115 | - 有些内建(builtin)命令(command)找不到硬盘位置 116 | - 比如pwd、cd 117 | - 可以在zsh的源码中找到相应的位置 118 | - 基本的命令了解了不少 119 | - 是时候总结一下了 120 | - 下次总结!👋 121 | -------------------------------------------------------------------------------- /md/013-45538-持续输出_yes.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 我们来回顾一下 😌 10 | 11 | - 上一部分我们都讲了什么? 12 | - 历史 13 | - 命令 14 | - 终端快捷键 15 | 16 | - 接下来 17 | - 我们怎么玩呢 18 | - 快跟我一起去看看那个 19 | - yes~ 20 | 21 | ## yes 🤔 22 | 23 | - 没错 24 | - 这次我们来看看这个 yes 25 | - yes 是什么呢? 26 | - 让我们来试试吧!👊 27 | 28 | ```shell 29 | yes 30 | ``` 31 | 32 | - 我们发现只能看见屏幕上闪动的 y 33 | - 没错 34 | - 这个命令就是要持续输出 y! 35 | - 还有这么变态的命令吗? 36 | - 😱 是的!🤪 37 | 38 | - 那怎么让他停下来?😫 39 | - 我们可以这样做: 40 | - ctrl+c 41 | - 就可以让他取消 (cancel) 42 | - 赶紧去拷问他的灵魂!!! 43 | 44 | 45 | ### 灵魂三问 😇 46 | 47 | ```shell 48 | whatis yes 49 | whereis yes 50 | which yes 51 | ``` 52 | 53 | 54 | - 下面我们来解析一下: 55 | 56 | - yes 就是持续输出 57 | - 想查看源文件? 58 | - dpkg -S /usr/bin/yes 59 | - 这个也属于 coreutils 60 | - 可以找到源代码看看 61 | - 方法可见 whereis 那个实验 62 | 63 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220901-1661997164199) 64 | 65 | - 更新源之后 66 | - 下载源 67 | 68 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220901-1661997277113) 69 | 70 | - 需要找到源文件 71 | 72 | ### 找到位置 73 | 74 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220901-1661997379713) 75 | 76 | - 打开yes.c 77 | 78 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220901-1661997415459) 79 | 80 | - 134行代码 81 | - yes具体还能干什么呢? 82 | 83 | ### 手册 84 | 85 | - 想了解 yes 命令更多?😉 86 | - 首选肯定是查手册啊!📕 87 | 88 | ```shell 89 | man yes 90 | ``` 91 | 92 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210910-1631244793877) 93 | 94 | ### yes 可以带两个选项 🎛 95 | 96 | - --help 97 | - --version 98 | 99 | - 比如: 100 | 101 | ```shell 102 | yes --help 103 | ``` 104 | 105 | 106 | - 我们可以得出结论: 107 | 108 | - `手册 man` 📕 最详尽 👍 109 | - `yes --help` 稍显简略 110 | - `whatis yes` 一句话最简略 111 | 112 | ### 可以带一个字符串参数 113 | 114 | ```shell 115 | yes oeasy 116 | yes "oeasy o2z" 117 | ``` 118 | ![yeso1zo2z](https://labfile.oss.aliyuncs.com/courses/2712/yeso1zo2z.jpg) 119 | 120 | - `oeasy o2z` 是作为一个字符串一起被输出的 121 | 122 | ### 总结 123 | - 这yes有什么意义么? 124 | - 写个c语言程序不是很容易么? 125 | - 别着急 126 | - 我们先往下看?😉 127 | 128 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220901-1661998915312) 129 | - 下次再说!👋 130 | -------------------------------------------------------------------------------- /md/013-48362-命令_command_总结.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 我们来回顾一下 😌 10 | 11 | - 我们都讲了什么?🤔 12 | - Linux 的历史 ⌨️ 13 | - 各种发行版的生生灭灭 14 | - 系统运作的过程 🖥 15 | - 程序运行的过程 16 | - 各种命令 ⌨️ 17 | - 都有什么命令呢 18 | 19 | ### 命令 Command🧐 20 | 21 | - 命令分两种 22 | - 一种是在硬盘上的 23 | - 可以用apt 找到源码和帮助 24 | - 比如 25 | - uname 26 | - ls 27 | - cat 28 | - pwd 29 | - 灵魂三问 30 | - whatis 31 | - whereis 32 | - which 33 | - man 34 | - clear 35 | 36 | - 另一种是在系统内置(builtin)的 37 | - 可以在shell的源代码中找到实现过程 38 | - 比如 39 | - cd 40 | - pwd 41 | ‘ 42 | - 还有一个比较特殊 43 | - 特别有权限的`sudo` 44 | 45 | - 命令行还有什么技巧? 💡 46 | 47 | ### 命令行快捷方式 💡 48 | 49 | - 记忆命令 50 | - ⬆️ 上一条命令 51 | - ⬇️️ 下一条命令 52 | - ctrl+r 搜索历史命令 53 | - 快速移动 54 | - ⬅️ 向左一格 55 | - ➡️️ 向右一格 56 | - ctrl+⬅️ 向左一个单词 57 | - ctrl+ 向右一个单词 58 | - ctrl+a 直接到头ahead 59 | - ctrl+e 直接到尾end 60 | - 快捷键清屏 61 | - ctrl+l清屏 62 | - 快速删除 63 | - ctrl+c 忽略当前行 64 | - ctrl+u 从光标位置开始,删除左方所有的字符,直到该行开始的位置 65 | - ctrl+k 从光标位置开始,删除右方所有的字符,直到该行结束的位置 66 | - 登出系统 67 | - ctrl+d 快快退出终端 68 | - ctrl+w 向前删除到词头 69 | - 急急如律令 70 | - 可以打印到一个鼠标垫上 71 | 72 | ### 总结 73 | 74 | - 这就是我们最开始接触到的 75 | - Linux 76 | 77 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220901-1661996457116/wm) 78 | 79 | - 严格的说 80 | - 应该是基于linux内核的 81 | - gnu的shell环境和各种命令 82 | - 很有趣 83 | - 准备进入更好玩的游乐场吧!! 84 | - 🎡 85 | 86 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220901-1661996596490/wm) 87 | -------------------------------------------------------------------------------- /md/014-45538-持续输出_yes.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 我们来回顾一下 😌 10 | 11 | - 上一部分我们都讲了什么? 12 | - 历史 13 | - 命令 14 | - 终端快捷键 15 | 16 | - 接下来 17 | - 我们怎么玩呢 18 | - 快跟我一起去看看那个 19 | - yes~ 20 | 21 | ## yes 🤔 22 | 23 | - 没错 24 | - 这次我们来看看这个 yes 25 | - yes 是什么呢? 26 | - 让我们来试试吧!👊 27 | 28 | ```shell 29 | yes 30 | ``` 31 | 32 | - 我们发现只能看见屏幕上闪动的 y 33 | - 没错 34 | - 这个命令就是要持续输出 y! 35 | - 还有这么变态的命令吗? 36 | - 😱 是的!🤪 37 | 38 | - 那怎么让他停下来?😫 39 | - 我们可以这样做: 40 | - ctrl+c 41 | - 就可以让他取消 (cancel) 42 | - 赶紧去拷问他的灵魂!!! 43 | 44 | 45 | ### 灵魂三问 😇 46 | 47 | ```shell 48 | whatis yes 49 | whereis yes 50 | which yes 51 | ``` 52 | 53 | 54 | - 下面我们来解析一下: 55 | 56 | - yes 就是持续输出 57 | - 想查看源文件? 58 | - dpkg -S /usr/bin/yes 59 | - 这个也属于 coreutils 60 | - 可以找到源代码看看 61 | - 方法可见 whereis 那个实验 62 | 63 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220901-1661997164199) 64 | 65 | - 更新源之后 66 | - 下载源 67 | 68 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220901-1661997277113) 69 | 70 | - 需要找到源文件 71 | 72 | ### 找到位置 73 | 74 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220901-1661997379713) 75 | 76 | - 打开yes.c 77 | 78 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220901-1661997415459) 79 | 80 | - 134行代码 81 | - yes具体还能干什么呢? 82 | 83 | ### 手册 84 | 85 | - 想了解 yes 命令更多?😉 86 | - 首选肯定是查手册啊!📕 87 | 88 | ```shell 89 | man yes 90 | ``` 91 | 92 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210910-1631244793877) 93 | 94 | ### yes 可以带两个选项 🎛 95 | 96 | - --help 97 | - --version 98 | 99 | - 比如: 100 | 101 | ```shell 102 | yes --help 103 | ``` 104 | 105 | 106 | - 我们可以得出结论: 107 | 108 | - `手册 man` 📕 最详尽 👍 109 | - `yes --help` 稍显简略 110 | - `whatis yes` 一句话最简略 111 | 112 | ### 可以带一个字符串参数 113 | 114 | ```shell 115 | yes oeasy 116 | yes "oeasy o2z" 117 | ``` 118 | ![yeso1zo2z](https://labfile.oss.aliyuncs.com/courses/2712/yeso1zo2z.jpg) 119 | 120 | - `oeasy o2z` 是作为一个字符串一起被输出的 121 | 122 | ### 总结 123 | - 这yes有什么意义么? 124 | - 写个c语言程序不是很容易么? 125 | - 别着急 126 | - 我们先往下看?😉 127 | 128 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220901-1661998915312) 129 | - 下次再说!👋 130 | -------------------------------------------------------------------------------- /md/015-45538-持续输出_yes.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 我们来回顾一下 😌 10 | 11 | - 上一部分我们都讲了什么? 12 | - 历史 13 | - 命令 14 | - 终端快捷键 15 | 16 | - 接下来 17 | - 我们怎么玩呢 18 | - 快跟我一起去看看那个 19 | - yes~ 20 | 21 | ## yes 🤔 22 | 23 | - 没错 24 | - 这次我们来看看这个 yes 25 | - yes 是什么呢? 26 | - 让我们来试试吧!👊 27 | 28 | ```shell 29 | yes 30 | ``` 31 | 32 | - 我们发现只能看见屏幕上闪动的 y 33 | - 没错 34 | - 这个命令就是要持续输出 y! 35 | - 还有这么变态的命令吗? 36 | - 😱 是的!🤪 37 | 38 | - 那怎么让他停下来?😫 39 | - 我们可以这样做: 40 | - ctrl+c 41 | - 就可以让他取消 (cancel) 42 | - 赶紧去拷问他的灵魂!!! 43 | 44 | 45 | ### 灵魂三问 😇 46 | 47 | ```shell 48 | whatis yes 49 | whereis yes 50 | which yes 51 | ``` 52 | 53 | 54 | - 下面我们来解析一下: 55 | 56 | - yes 就是持续输出 57 | - 想查看源文件? 58 | - dpkg -S /usr/bin/yes 59 | - 这个也属于 coreutils 60 | - 可以找到源代码看看 61 | - 方法可见 whereis 那个实验 62 | 63 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220901-1661997164199) 64 | 65 | - 更新源之后 66 | - 下载源 67 | 68 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220901-1661997277113) 69 | 70 | - 需要找到源文件 71 | 72 | ### 找到位置 73 | 74 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220901-1661997379713) 75 | 76 | - 打开yes.c 77 | 78 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220901-1661997415459) 79 | 80 | - 134行代码 81 | - yes具体还能干什么呢? 82 | 83 | ### 手册 84 | 85 | - 想了解 yes 命令更多?😉 86 | - 首选肯定是查手册啊!📕 87 | 88 | ```shell 89 | man yes 90 | ``` 91 | 92 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210910-1631244793877) 93 | 94 | ### yes 可以带两个选项 🎛 95 | 96 | - --help 97 | - --version 98 | 99 | - 比如: 100 | 101 | ```shell 102 | yes --help 103 | ``` 104 | 105 | 106 | - 我们可以得出结论: 107 | 108 | - `手册 man` 📕 最详尽 👍 109 | - `yes --help` 稍显简略 110 | - `whatis yes` 一句话最简略 111 | 112 | ### 可以带一个字符串参数 113 | 114 | ```shell 115 | yes oeasy 116 | yes "oeasy o2z" 117 | ``` 118 | ![yeso1zo2z](https://labfile.oss.aliyuncs.com/courses/2712/yeso1zo2z.jpg) 119 | 120 | - `oeasy o2z` 是作为一个字符串一起被输出的 121 | 122 | ### 总结 123 | - 这yes有什么意义么? 124 | - 写个c语言程序不是很容易么? 125 | - 别着急 126 | - 我们先往下看?😉 127 | 128 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220901-1661998915312) 129 | - 下次再说!👋 130 | -------------------------------------------------------------------------------- /md/020-45571-蒸汽机车_sl.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 我们来回顾一下 😌 10 | 11 | **上一部分我们都讲了什么?**🤔 12 | 13 | - 两种字符画 14 | - 从 figlet 开始 🅰️ 15 | - 到 toilet 16 | - 字符画选项 17 | - 变彩色 🤡 18 | - 字体风格 19 | 20 | ```shell 21 | figlet oeasy 22 | toilet oeasy 23 | ``` 24 | 25 | - 突然好奇 26 | - 这里面还有什么好玩的游戏吗?🤨 27 | 28 | ## 动力机车 sl 29 | 30 | - 我们可以这样写: 31 | 32 | ```shell 33 | sudo apt install sl 34 | sl 35 | ``` 36 | 37 | - 一回车 38 | - 我们竟然看到一列火车隆隆驶过!😱 39 | - 赶快查询一下手册 40 | 41 | ### 手册 42 | 43 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662081439805) 44 | 45 | ### 参数含义 46 | - `SL` 代表 `Steam Locomotive` 47 | - 这个命令和 ls 很像 48 | - 这个命令就是在 ls 打错的情况下提提神:😓 49 | - 试试选项 50 | - `-a` 出现了事故,车里人在叫 51 | - `-l` 会出现一个小火车 52 | - `-F` 会让火车越飞越高,要注意是大写F 53 | - `-e` 允许中途被 ctrl+c 打断 54 | 55 | ### 总结 56 | 57 | - 开车挺有意思 58 | - 蒸汽机车 sl 🚂 59 | - 变身小机车-l 🚂 60 | - 变身飞天机车-F 🚂 61 | - 让我们再开一次车 🚂 62 | - 不过不够酷啊 63 | 64 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662081680515) 65 | 66 | - 有没有像黑客帝国那么酷的呢?🤪 67 | - 下次再说!👋 68 | 69 | 70 | -------------------------------------------------------------------------------- /md/021-45571-蒸汽机车_sl.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 我们来回顾一下 😌 10 | 11 | **上一部分我们都讲了什么?**🤔 12 | 13 | - 两种字符画 14 | - 从 figlet 开始 🅰️ 15 | - 到 toilet 16 | - 字符画选项 17 | - 变彩色 🤡 18 | - 字体风格 19 | 20 | ```shell 21 | figlet oeasy 22 | toilet oeasy 23 | ``` 24 | 25 | - 突然好奇 26 | - 这里面还有什么好玩的游戏吗?🤨 27 | 28 | ## 动力机车 sl 29 | 30 | - 我们可以这样写: 31 | 32 | ```shell 33 | sudo apt install sl 34 | sl 35 | ``` 36 | 37 | - 一回车 38 | - 我们竟然看到一列火车隆隆驶过!😱 39 | - 赶快查询一下手册 40 | 41 | ### 手册 42 | 43 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662081439805/wm) 44 | 45 | ### 参数含义 46 | - `SL` 代表 `Steam Locomotive` 47 | - 这个命令和 ls 很像 48 | - 这个命令就是在 ls 打错的情况下提提神:😓 49 | - 试试选项 50 | - `-a` 出现了事故,车里人在叫 51 | - `-l` 会出现一个小火车 52 | - `-F` 会让火车越飞越高,要注意是大写F 53 | - `-e` 允许中途被 ctrl+c 打断 54 | 55 | ### 总结 56 | 57 | - 开车挺有意思 58 | - 蒸汽机车 sl 🚂 59 | - 变身小机车-l 🚂 60 | - 变身飞天机车-F 🚂 61 | - 让我们再开一次车 🚂 62 | - 不过不够酷啊 63 | 64 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662081680515/wm) 65 | 66 | - 有没有像黑客帝国那么酷的呢?🤪 67 | - 下次再说!👋 68 | 69 | 70 | -------------------------------------------------------------------------------- /md/021-45574-黑客帝国_cmatrix.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ### 我们来回顾一下 😌 10 | 11 | - 开车挺有意思 12 | - 蒸汽机车 sl 🚂 13 | - 变身小机车-l 🚂 14 | - 变身飞天机车-F 🚂 15 | - 让我们再开一次车 🚂 16 | - 不过不够酷啊 17 | 18 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662081680515) 19 | 20 | - 有没有像黑客帝国那么酷的呢?🤪 21 | 22 | ## 黑客帝国 Matrix 📟 23 | 24 | ```shell 25 | apt search cmatrix 26 | apt show cmatrix 27 | ``` 28 | 29 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662081923740) 30 | 31 | - 我们发现一个叫做 cmatrix 的软件包 32 | - 下载需要 2M 33 | - 好像可以玩 34 | - 走起来! 35 | 36 | ### 安装 37 | 38 | ```shell 39 | apt install cmatrix 40 | ``` 41 | 42 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662082000035) 43 | 44 | - yes 45 | 46 | ### 运行 47 | 48 | ```shell 49 | cmatrix 50 | ``` 51 | 52 | - 运行起来 53 | 54 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662082056077) 55 | 56 | - 好看~!!! 57 | 58 | ### 细节 59 | 60 | - 那么我们可以看看手册里的选项细节吗? 61 | 62 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662082108135) 63 | 64 | ### 矩阵细节 📟 65 | 66 | - `-b`: 部分加粗头部变色 bold 67 | - `-B`: 全部加粗头部变色 Bold 68 | - `-o`: 老式的 old school 69 | - `-s`: 屏保模式 Screensaver 70 | - `-u`: 我们可以设置中间 0-9 的间隔时间 ⏲ 71 | - 0 为无间隔非常快 72 | - 9 为比较慢 73 | - `-C` 后面加上想要的颜色 (Color) 模式 74 | - 目前支持红绿蓝青品黄黑白 75 | 76 | - 举个栗子🌰 77 | 78 | ```shell 79 | #  加粗头部 80 | cmatrix -b 81 | # 间隔极慢 82 | cmatrix -u 9 83 | # 蓝色黑客帝国 84 | cmatrix -C blue 85 | ``` 86 | 87 | ### 还有什么?🤨 88 | 89 | - 黑客帝国矩阵确实很酷 90 | - 但是还想更酷 91 | - 让人感觉电脑直接炸裂那种😱 92 | - 我们得去找找 93 | - 下次再说!👋 94 | -------------------------------------------------------------------------------- /md/022-45571-蒸汽机车_sl.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 我们来回顾一下 😌 10 | 11 | **上一部分我们都讲了什么?**🤔 12 | 13 | - 两种字符画 14 | - 从 figlet 开始 🅰️ 15 | - 到 toilet 16 | - 字符画选项 17 | - 变彩色 🤡 18 | - 字体风格 19 | 20 | ```shell 21 | figlet oeasy 22 | toilet oeasy 23 | ``` 24 | 25 | - 突然好奇 26 | - 这里面还有什么好玩的游戏吗?🤨 27 | 28 | ## 动力机车 sl 29 | 30 | - 我们可以这样写: 31 | 32 | ```shell 33 | sudo apt install sl 34 | sl 35 | ``` 36 | 37 | - 一回车 38 | - 我们竟然看到一列火车隆隆驶过!😱 39 | - 赶快查询一下手册 40 | 41 | ### 手册 42 | 43 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662081439805/wm) 44 | 45 | ### 参数含义 46 | - `SL` 代表 `Steam Locomotive` 47 | - 这个命令和 ls 很像 48 | - 这个命令就是在 ls 打错的情况下提提神:😓 49 | - 试试选项 50 | - `-a` 出现了事故,车里人在叫 51 | - `-l` 会出现一个小火车 52 | - `-F` 会让火车越飞越高,要注意是大写F 53 | - `-e` 允许中途被 ctrl+c 打断 54 | 55 | ### 总结 56 | 57 | - 开车挺有意思 58 | - 蒸汽机车 sl 🚂 59 | - 变身小机车-l 🚂 60 | - 变身飞天机车-F 🚂 61 | - 让我们再开一次车 🚂 62 | - 不过不够酷啊 63 | 64 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662081680515/wm) 65 | 66 | - 有没有像黑客帝国那么酷的呢?🤪 67 | - 下次再说!👋 68 | 69 | 70 | -------------------------------------------------------------------------------- /md/022-45572-满屏乱码_bb.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 回忆 😌 10 | - 黑客帝国矩阵确实很酷 11 | - 各种速度颜色参数 12 | - 但是还想更酷 13 | - 让人感觉电脑直接炸裂那种😱 14 | - 我们得去找找 15 | 16 | ### 崩溃 17 | - 想找一个让人完全崩溃的软件包 18 | - 这不就来了 19 | - 话不多说 20 | - 先试试 21 | 22 | ```shell 23 | apt show bb 24 | apt search bb 25 | sudo apt install bb 26 | ``` 27 | 28 | ### bb 👻 29 | 30 | - 首先选一下是否带音乐 31 | - 然后选择 continue 32 | - 这个 bb 太带劲了! 33 | - 有各种波形晃眼 34 | - 还有音效 35 | - 人物简历等等 36 | - 还有屏幕紊乱的效果! 37 | 38 | ![bbloop]( https://labfile.oss.aliyuncs.com/courses/2712/bbloop.png) 39 | 40 | ### 文档 41 | 42 | - 查手册 43 | 44 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662083144873) 45 | 46 | - 看参数 47 | 48 | 49 | ```shell 50 | # -loop 永远循环 51 | bb -loop 52 | #-driver 选择输出位置 stdout 在当前窗口,有时要向上翻一下才能看见 53 | bb -driver stdout 54 | #-dim 半亮半暗 55 | bb -dim 56 | ``` 57 | 58 | ### 总结 59 | - bb是我目前看到最眼花缭乱的应用了 60 | - 这个东西吓唬人很好啊!💀 61 | - 让人以为自己的机器崩溃了!☠️ 62 | - 循环崩溃中... 63 | - 哈哈哈 64 | - 还有啥好玩的?👻 65 | - 下次再说!👋 66 | -------------------------------------------------------------------------------- /md/022-45574-黑客帝国_cmatrix.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ### 我们来回顾一下 😌 10 | 11 | - 开车挺有意思 12 | - 蒸汽机车 sl 🚂 13 | - 变身小机车-l 🚂 14 | - 变身飞天机车-F 🚂 15 | - 让我们再开一次车 🚂 16 | - 不过不够酷啊 17 | 18 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662081680515/wm) 19 | 20 | - 有没有像黑客帝国那么酷的呢?🤪 21 | 22 | ## 黑客帝国 Matrix 📟 23 | 24 | ```shell 25 | apt search cmatrix 26 | apt show cmatrix 27 | ``` 28 | 29 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662081923740/wm) 30 | 31 | - 我们发现一个叫做 cmatrix 的软件包 32 | - 下载需要 2M 33 | - 好像可以玩 34 | - 走起来! 35 | 36 | ### 安装 37 | 38 | ```shell 39 | apt install cmatrix 40 | ``` 41 | 42 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662082000035/wm) 43 | 44 | - yes 45 | 46 | ### 运行 47 | 48 | ```shell 49 | cmatrix 50 | ``` 51 | 52 | - 运行起来 53 | 54 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662082056077/wm) 55 | 56 | - 好看~!!! 57 | 58 | ### 细节 59 | 60 | - 那么我们可以看看手册里的选项细节吗? 61 | 62 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662082108135/wm) 63 | 64 | ### 矩阵细节 📟 65 | 66 | - `-b`: 部分加粗头部变色 bold 67 | - `-B`: 全部加粗头部变色 Bold 68 | - `-o`: 老式的 old school 69 | - `-s`: 屏保模式 Screensaver 70 | - `-u`: 我们可以设置中间 0-9 的间隔时间 ⏲ 71 | - 0 为无间隔非常快 72 | - 9 为比较慢 73 | - `-C` 后面加上想要的颜色 (Color) 模式 74 | - 目前支持红绿蓝青品黄黑白 75 | 76 | - 举个栗子🌰 77 | 78 | ```shell 79 | #  加粗头部 80 | cmatrix -b 81 | # 间隔极慢 82 | cmatrix -u 9 83 | # 蓝色黑客帝国 84 | cmatrix -C blue 85 | ``` 86 | 87 | ### 还有什么?🤨 88 | 89 | - 黑客帝国矩阵确实很酷 90 | - 但是还想更酷 91 | - 让人感觉电脑直接炸裂那种😱 92 | - 我们得去找找 93 | - 下次再说!👋 94 | -------------------------------------------------------------------------------- /md/023-45570-更新源_apt_update_hollywood.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 回忆 😌 10 | 11 | - 上次讲了bb 12 | - bb是我目前看到最眼花缭乱的应用了 13 | - 这个东西吓唬人很好啊!💀 14 | - 让人以为自己的机器崩溃了!☠️ 15 | - 循环崩溃中... 16 | - 哈哈哈 17 | - 还有啥好玩的?👻 18 | 19 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662083399309) 20 | 21 | ### hollywood 22 | 23 | - 我们这次装一个酷 24 | - 下个 hollywood 软件包:🎭 25 | 26 | ```shell 27 | apt search hollywood 28 | apt show hollywood 29 | ``` 30 | 31 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662083451186) 32 | 33 | ### hollywood🎭 34 | 35 | - 这软件可以模拟出好莱坞情景剧中 36 | - 黑客电脑的样子 37 | 38 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662083585233) 39 | 40 | - 安装时遇到了问题?😳 41 | 42 | ### 问题 43 | 44 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662083795353) 45 | 46 | - 按照他最后一行的提示 47 | - 可以更新源 48 | - 为什么要更新源? 49 | 50 | ### 更新源 51 | 52 | - 源服务器上的软件可能有更新 53 | - 不用改变源 `sources.list` 的配置 54 | - 源服务器地址没变 55 | - 更新源是为了把源(sources.list 上对应的 url)的最新信息同步到本地 56 | - 如果软件包有更新的话 57 | - 会发布更新到主服务器对应的发行版版本的位置 58 | - 主服务器内容六小时之内同步到镜像服务器 59 | 60 | ### 更新源 61 | 62 | ```shell 63 | sudo apt update 64 | ``` 65 | 66 | - `sudo` 是用管理员面具 👺 执行 67 | - `apt` 是高级软件包管理程序 68 | - `update` 更新的内容包括 69 | - 把最新的软件包信息从镜像同步到本地 70 | - 在本地记录软件包列表信息 71 | - 在本地分析软件包依赖关系树 72 | - 在本地读取状态信息 73 | 74 | ### 安装软件 75 | 76 | 77 | ``` 78 | sudo apt install hollywood 79 | ``` 80 | 81 | - 再安装 hollywood 🎭 82 | 83 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662083874213) 84 | 85 | - 这回安装很顺利 86 | - 然后我们去跑一下 hollywood🎭 87 | 88 | ### 执行 89 | 90 | ```shell 91 | hollywood 92 | ``` 93 | 94 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/hollywood.png) 95 | 96 | ### 总结 🤨 97 | 98 | - 这个hollywood真的很酷 99 | - 👻 退出的话用 ctrl+c 100 | - 回到原来的 shell 用命令 zsh 101 | - 下面的关于 cpu、日期等信息仍然保留 102 | - 用这个当做屏保 103 | - 无意中让 MM 看看 104 | - 哈哈! 105 | - 目前我们只会安装软件包 106 | - 如何删除软件包呢?🤔 107 | - 下次再说!👋 108 | -------------------------------------------------------------------------------- /md/023-45572-满屏乱码_bb.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 回忆 😌 10 | - 黑客帝国矩阵确实很酷 11 | - 各种速度颜色参数 12 | - 但是还想更酷 13 | - 让人感觉电脑直接炸裂那种😱 14 | - 我们得去找找 15 | 16 | ### 崩溃 17 | - 想找一个让人完全崩溃的软件包 18 | - 这不就来了 19 | - 话不多说 20 | - 先试试 21 | 22 | ```shell 23 | apt show bb 24 | apt search bb 25 | sudo apt install bb 26 | ``` 27 | 28 | ### bb 👻 29 | 30 | - 首先选一下是否带音乐 31 | - 然后选择 continue 32 | - 这个 bb 太带劲了! 33 | - 有各种波形晃眼 34 | - 还有音效 35 | - 人物简历等等 36 | - 还有屏幕紊乱的效果! 37 | 38 | ![bbloop]( https://labfile.oss.aliyuncs.com/courses/2712/bbloop.png) 39 | 40 | ### 文档 41 | 42 | - 查手册 43 | 44 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662083144873/wm) 45 | 46 | - 看参数 47 | 48 | 49 | ```shell 50 | # -loop 永远循环 51 | bb -loop 52 | #-driver 选择输出位置 stdout 在当前窗口,有时要向上翻一下才能看见 53 | bb -driver stdout 54 | #-dim 半亮半暗 55 | bb -dim 56 | ``` 57 | 58 | ### 总结 59 | - bb是我目前看到最眼花缭乱的应用了 60 | - 这个东西吓唬人很好啊!💀 61 | - 让人以为自己的机器崩溃了!☠️ 62 | - 循环崩溃中... 63 | - 哈哈哈 64 | - 还有啥好玩的?👻 65 | - 下次再说!👋 66 | -------------------------------------------------------------------------------- /md/023-45574-黑客帝国_cmatrix.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ### 我们来回顾一下 😌 10 | 11 | - 开车挺有意思 12 | - 蒸汽机车 sl 🚂 13 | - 变身小机车-l 🚂 14 | - 变身飞天机车-F 🚂 15 | - 让我们再开一次车 🚂 16 | - 不过不够酷啊 17 | 18 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662081680515/wm) 19 | 20 | - 有没有像黑客帝国那么酷的呢?🤪 21 | 22 | ## 黑客帝国 Matrix 📟 23 | 24 | ```shell 25 | apt search cmatrix 26 | apt show cmatrix 27 | ``` 28 | 29 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662081923740/wm) 30 | 31 | - 我们发现一个叫做 cmatrix 的软件包 32 | - 下载需要 2M 33 | - 好像可以玩 34 | - 走起来! 35 | 36 | ### 安装 37 | 38 | ```shell 39 | apt install cmatrix 40 | ``` 41 | 42 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662082000035/wm) 43 | 44 | - yes 45 | 46 | ### 运行 47 | 48 | ```shell 49 | cmatrix 50 | ``` 51 | 52 | - 运行起来 53 | 54 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662082056077/wm) 55 | 56 | - 好看~!!! 57 | 58 | ### 细节 59 | 60 | - 那么我们可以看看手册里的选项细节吗? 61 | 62 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662082108135/wm) 63 | 64 | ### 矩阵细节 📟 65 | 66 | - `-b`: 部分加粗头部变色 bold 67 | - `-B`: 全部加粗头部变色 Bold 68 | - `-o`: 老式的 old school 69 | - `-s`: 屏保模式 Screensaver 70 | - `-u`: 我们可以设置中间 0-9 的间隔时间 ⏲ 71 | - 0 为无间隔非常快 72 | - 9 为比较慢 73 | - `-C` 后面加上想要的颜色 (Color) 模式 74 | - 目前支持红绿蓝青品黄黑白 75 | 76 | - 举个栗子🌰 77 | 78 | ```shell 79 | #  加粗头部 80 | cmatrix -b 81 | # 间隔极慢 82 | cmatrix -u 9 83 | # 蓝色黑客帝国 84 | cmatrix -C blue 85 | ``` 86 | 87 | ### 还有什么?🤨 88 | 89 | - 黑客帝国矩阵确实很酷 90 | - 但是还想更酷 91 | - 让人感觉电脑直接炸裂那种😱 92 | - 我们得去找找 93 | - 下次再说!👋 94 | -------------------------------------------------------------------------------- /md/024-45570-更新源_apt_update_hollywood.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 回忆 😌 10 | 11 | - 上次讲了bb 12 | - bb是我目前看到最眼花缭乱的应用了 13 | - 这个东西吓唬人很好啊!💀 14 | - 让人以为自己的机器崩溃了!☠️ 15 | - 循环崩溃中... 16 | - 哈哈哈 17 | - 还有啥好玩的?👻 18 | 19 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662083399309/wm) 20 | 21 | ### hollywood 22 | 23 | - 我们这次装一个酷 24 | - 下个 hollywood 软件包:🎭 25 | 26 | ```shell 27 | apt search hollywood 28 | apt show hollywood 29 | ``` 30 | 31 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662083451186/wm) 32 | 33 | ### hollywood🎭 34 | 35 | - 这软件可以模拟出好莱坞情景剧中 36 | - 黑客电脑的样子 37 | 38 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662083585233/wm) 39 | 40 | - 安装时遇到了问题?😳 41 | 42 | ### 问题 43 | 44 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662083795353/wm) 45 | 46 | - 按照他最后一行的提示 47 | - 可以更新源 48 | - 为什么要更新源? 49 | 50 | ### 更新源 51 | 52 | - 源服务器上的软件可能有更新 53 | - 不用改变源 `sources.list` 的配置 54 | - 源服务器地址没变 55 | - 更新源是为了把源(sources.list 上对应的 url)的最新信息同步到本地 56 | - 如果软件包有更新的话 57 | - 会发布更新到主服务器对应的发行版版本的位置 58 | - 主服务器内容六小时之内同步到镜像服务器 59 | 60 | ### 更新源 61 | 62 | ```shell 63 | sudo apt update 64 | ``` 65 | 66 | - `sudo` 是用管理员面具 👺 执行 67 | - `apt` 是高级软件包管理程序 68 | - `update` 更新的内容包括 69 | - 把最新的软件包信息从镜像同步到本地 70 | - 在本地记录软件包列表信息 71 | - 在本地分析软件包依赖关系树 72 | - 在本地读取状态信息 73 | 74 | ### 安装软件 75 | 76 | 77 | ``` 78 | sudo apt install hollywood 79 | ``` 80 | 81 | - 再安装 hollywood 🎭 82 | 83 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662083874213/wm) 84 | 85 | - 这回安装很顺利 86 | - 然后我们去跑一下 hollywood🎭 87 | 88 | ### 执行 89 | 90 | ```shell 91 | hollywood 92 | ``` 93 | 94 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/hollywood.png) 95 | 96 | ### 总结 🤨 97 | 98 | - 这个hollywood真的很酷 99 | - 👻 退出的话用 ctrl+c 100 | - 回到原来的 shell 用命令 zsh 101 | - 下面的关于 cpu、日期等信息仍然保留 102 | - 用这个当做屏保 103 | - 无意中让 MM 看看 104 | - 哈哈! 105 | - 目前我们只会安装软件包 106 | - 如何删除软件包呢?🤔 107 | - 下次再说!👋 108 | -------------------------------------------------------------------------------- /md/024-45572-满屏乱码_bb.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 回忆 😌 10 | - 黑客帝国矩阵确实很酷 11 | - 各种速度颜色参数 12 | - 但是还想更酷 13 | - 让人感觉电脑直接炸裂那种😱 14 | - 我们得去找找 15 | 16 | ### 崩溃 17 | - 想找一个让人完全崩溃的软件包 18 | - 这不就来了 19 | - 话不多说 20 | - 先试试 21 | 22 | ```shell 23 | apt show bb 24 | apt search bb 25 | sudo apt install bb 26 | ``` 27 | 28 | ### bb 👻 29 | 30 | - 首先选一下是否带音乐 31 | - 然后选择 continue 32 | - 这个 bb 太带劲了! 33 | - 有各种波形晃眼 34 | - 还有音效 35 | - 人物简历等等 36 | - 还有屏幕紊乱的效果! 37 | 38 | ![bbloop]( https://labfile.oss.aliyuncs.com/courses/2712/bbloop.png) 39 | 40 | ### 文档 41 | 42 | - 查手册 43 | 44 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662083144873/wm) 45 | 46 | - 看参数 47 | 48 | 49 | ```shell 50 | # -loop 永远循环 51 | bb -loop 52 | #-driver 选择输出位置 stdout 在当前窗口,有时要向上翻一下才能看见 53 | bb -driver stdout 54 | #-dim 半亮半暗 55 | bb -dim 56 | ``` 57 | 58 | ### 总结 59 | - bb是我目前看到最眼花缭乱的应用了 60 | - 这个东西吓唬人很好啊!💀 61 | - 让人以为自己的机器崩溃了!☠️ 62 | - 循环崩溃中... 63 | - 哈哈哈 64 | - 还有啥好玩的?👻 65 | - 下次再说!👋 66 | -------------------------------------------------------------------------------- /md/025-45570-更新源_apt_update_hollywood.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 回忆 😌 10 | 11 | - 上次讲了bb 12 | - bb是我目前看到最眼花缭乱的应用了 13 | - 这个东西吓唬人很好啊!💀 14 | - 让人以为自己的机器崩溃了!☠️ 15 | - 循环崩溃中... 16 | - 哈哈哈 17 | - 还有啥好玩的?👻 18 | 19 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662083399309/wm) 20 | 21 | ### hollywood 22 | 23 | - 我们这次装一个酷 24 | - 下个 hollywood 软件包:🎭 25 | 26 | ```shell 27 | apt search hollywood 28 | apt show hollywood 29 | ``` 30 | 31 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662083451186/wm) 32 | 33 | ### hollywood🎭 34 | 35 | - 这软件可以模拟出好莱坞情景剧中 36 | - 黑客电脑的样子 37 | 38 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662083585233/wm) 39 | 40 | - 安装时遇到了问题?😳 41 | 42 | ### 问题 43 | 44 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662083795353/wm) 45 | 46 | - 按照他最后一行的提示 47 | - 可以更新源 48 | - 为什么要更新源? 49 | 50 | ### 更新源 51 | 52 | - 源服务器上的软件可能有更新 53 | - 不用改变源 `sources.list` 的配置 54 | - 源服务器地址没变 55 | - 更新源是为了把源(sources.list 上对应的 url)的最新信息同步到本地 56 | - 如果软件包有更新的话 57 | - 会发布更新到主服务器对应的发行版版本的位置 58 | - 主服务器内容六小时之内同步到镜像服务器 59 | 60 | ### 更新源 61 | 62 | ```shell 63 | sudo apt update 64 | ``` 65 | 66 | - `sudo` 是用管理员面具 👺 执行 67 | - `apt` 是高级软件包管理程序 68 | - `update` 更新的内容包括 69 | - 把最新的软件包信息从镜像同步到本地 70 | - 在本地记录软件包列表信息 71 | - 在本地分析软件包依赖关系树 72 | - 在本地读取状态信息 73 | 74 | ### 安装软件 75 | 76 | 77 | ``` 78 | sudo apt install hollywood 79 | ``` 80 | 81 | - 再安装 hollywood 🎭 82 | 83 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220902-1662083874213/wm) 84 | 85 | - 这回安装很顺利 86 | - 然后我们去跑一下 hollywood🎭 87 | 88 | ### 执行 89 | 90 | ```shell 91 | hollywood 92 | ``` 93 | 94 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/hollywood.png) 95 | 96 | ### 总结 🤨 97 | 98 | - 这个hollywood真的很酷 99 | - 👻 退出的话用 ctrl+c 100 | - 回到原来的 shell 用命令 zsh 101 | - 下面的关于 cpu、日期等信息仍然保留 102 | - 用这个当做屏保 103 | - 无意中让 MM 看看 104 | - 哈哈! 105 | - 目前我们只会安装软件包 106 | - 如何删除软件包呢?🤔 107 | - 下次再说!👋 108 | -------------------------------------------------------------------------------- /md/027-45576-中文输入_fcitx.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 回忆 😌 10 | 11 | 12 | - 管道的符号是| 13 | - 管道的作用是连接 14 | - 原来应该输出到屏幕内容 15 | - 通过管道流到了另一个命令做为参数 16 | - 是否可以让 cow 说出一些中文呢? 17 | 18 | ### 下载安装小企鹅输入法 ✏️fcitx 19 | 20 | - 系统已经安装中文输入法了 21 | - 退一步说 22 | - 如果没有安装 23 | - 应该如何安装呢? 24 | 25 | ```shell 26 | sudo apt install fcitx 27 | ``` 28 | 29 | 30 | - fcitx[ˈfaɪtɪks] 31 | - fcitx是 (Free Chinese Input Toy for X) 的英文缩写 32 | - 中文名为小企鹅输入法 33 | - 是一个以 GPL 方式发布的输入法框架 34 | - 编写它的目是为桌面环境提供一个灵活的输入方案 35 | - 彻底解决在GNU/Linux下没有一个好的中文输入法的问题 36 | 37 | 38 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210324-1616586617043) 39 | 40 | ### 下载搜狗输入法 🐶 41 | 42 | ``` 43 | #直接安装 44 | sudo apt install sogoupinyin 45 | ``` 46 | 47 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210324-1616587086455) 48 | 49 | 50 | ### 网页安装 51 | 52 | - 网页访问 [搜狗官网](https://pinyin.sogou.com/linux/) 53 | - 下载之后安装软件包 54 | 55 | ```shell 56 | #安装 debian package,XXXX指的是下载的名字。 57 | sudo dpkg -i sogoupinyin_XXXX_amd64.deb 58 | #如果存在冲突,进行修复或删除 59 | sudo apt -f install sogoupinyin 60 | ``` 61 | 62 | ## 配置输入法 ⚙️ 63 | 64 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/fcitx.jpg) 65 | 66 | 运行 sogou,在终端里面就可以输入中文了,让牛作为 dragon 说"我会中文"。 67 | 68 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/dragon.png) 69 | 70 | ### 分析牛 🐂 说 71 | 72 | - 牛说在哪? 73 | 74 | ```shell 75 | #找到牛说的位置 76 | whereis cowsay 77 | #进入牛说的素材文件夹位置 78 | cd /usr/share/cowsay/cows 79 | #查看图形素材文件 80 | cat meow.cow 81 | ``` 82 | 83 | - /usr/games/cowsay(命令的位置) 84 | - /usr/share/cowsay/cow(素材的位置) 85 | - 动物的形象的文件都在 .cow 文件中,比如 meow.cow 86 | 87 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/cat.png) 88 | 89 | ### 总结 🤨 90 | 91 | - 这次输出了中文 92 | - 并且找到了 cowsay 的图像素材的位置 💡 93 | - 我们能否把现实世界的 jpg 图片 94 | - 变成ascii形式的cow文件呢?🤔 95 | - 下次再说!👋 96 | -------------------------------------------------------------------------------- /md/028-45576-中文输入_fcitx.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 回忆 😌 10 | 11 | 12 | - 管道的符号是| 13 | - 管道的作用是连接 14 | - 原来应该输出到屏幕内容 15 | - 通过管道流到了另一个命令做为参数 16 | - 是否可以让 cow 说出一些中文呢? 17 | 18 | ### 下载安装小企鹅输入法 ✏️fcitx 19 | 20 | - 系统已经安装中文输入法了 21 | - 退一步说 22 | - 如果没有安装 23 | - 应该如何安装呢? 24 | 25 | ```shell 26 | sudo apt install fcitx 27 | ``` 28 | 29 | 30 | - fcitx[ˈfaɪtɪks] 31 | - fcitx是 (Free Chinese Input Toy for X) 的英文缩写 32 | - 中文名为小企鹅输入法 33 | - 是一个以 GPL 方式发布的输入法框架 34 | - 编写它的目是为桌面环境提供一个灵活的输入方案 35 | - 彻底解决在GNU/Linux下没有一个好的中文输入法的问题 36 | 37 | 38 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210324-1616586617043) 39 | 40 | ### 下载搜狗输入法 🐶 41 | 42 | ``` 43 | #直接安装 44 | sudo apt install sogoupinyin 45 | ``` 46 | 47 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210324-1616587086455) 48 | 49 | 50 | ### 网页安装 51 | 52 | - 网页访问 [搜狗官网](https://pinyin.sogou.com/linux/) 53 | - 下载之后安装软件包 54 | 55 | ```shell 56 | #安装 debian package,XXXX指的是下载的名字。 57 | sudo dpkg -i sogoupinyin_XXXX_amd64.deb 58 | #如果存在冲突,进行修复或删除 59 | sudo apt -f install sogoupinyin 60 | ``` 61 | 62 | ## 配置输入法 ⚙️ 63 | 64 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/fcitx.jpg) 65 | 66 | 运行 sogou,在终端里面就可以输入中文了,让牛作为 dragon 说"我会中文"。 67 | 68 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/dragon.png) 69 | 70 | ### 分析牛 🐂 说 71 | 72 | - 牛说在哪? 73 | 74 | ```shell 75 | #找到牛说的位置 76 | whereis cowsay 77 | #进入牛说的素材文件夹位置 78 | cd /usr/share/cowsay/cows 79 | #查看图形素材文件 80 | cat meow.cow 81 | ``` 82 | 83 | - /usr/games/cowsay(命令的位置) 84 | - /usr/share/cowsay/cow(素材的位置) 85 | - 动物的形象的文件都在 .cow 文件中,比如 meow.cow 86 | 87 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/cat.png) 88 | 89 | ### 总结 🤨 90 | 91 | - 这次输出了中文 92 | - 并且找到了 cowsay 的图像素材的位置 💡 93 | - 我们能否把现实世界的 jpg 图片 94 | - 变成ascii形式的cow文件呢?🤔 95 | - 下次再说!👋 96 | -------------------------------------------------------------------------------- /md/029-45576-中文输入_fcitx.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 回忆 😌 10 | 11 | 12 | - 管道的符号是| 13 | - 管道的作用是连接 14 | - 原来应该输出到屏幕内容 15 | - 通过管道流到了另一个命令做为参数 16 | - 是否可以让 cow 说出一些中文呢? 17 | 18 | ### 下载安装小企鹅输入法 ✏️fcitx 19 | 20 | - 系统已经安装中文输入法了 21 | - 退一步说 22 | - 如果没有安装 23 | - 应该如何安装呢? 24 | 25 | ```shell 26 | sudo apt install fcitx 27 | ``` 28 | 29 | 30 | - fcitx[ˈfaɪtɪks] 31 | - fcitx是 (Free Chinese Input Toy for X) 的英文缩写 32 | - 中文名为小企鹅输入法 33 | - 是一个以 GPL 方式发布的输入法框架 34 | - 编写它的目是为桌面环境提供一个灵活的输入方案 35 | - 彻底解决在GNU/Linux下没有一个好的中文输入法的问题 36 | 37 | 38 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210324-1616586617043) 39 | 40 | ### 下载搜狗输入法 🐶 41 | 42 | ``` 43 | #直接安装 44 | sudo apt install sogoupinyin 45 | ``` 46 | 47 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210324-1616587086455) 48 | 49 | 50 | ### 网页安装 51 | 52 | - 网页访问 [搜狗官网](https://pinyin.sogou.com/linux/) 53 | - 下载之后安装软件包 54 | 55 | ```shell 56 | #安装 debian package,XXXX指的是下载的名字。 57 | sudo dpkg -i sogoupinyin_XXXX_amd64.deb 58 | #如果存在冲突,进行修复或删除 59 | sudo apt -f install sogoupinyin 60 | ``` 61 | 62 | ## 配置输入法 ⚙️ 63 | 64 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/fcitx.jpg) 65 | 66 | 运行 sogou,在终端里面就可以输入中文了,让牛作为 dragon 说"我会中文"。 67 | 68 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/dragon.png) 69 | 70 | ### 分析牛 🐂 说 71 | 72 | - 牛说在哪? 73 | 74 | ```shell 75 | #找到牛说的位置 76 | whereis cowsay 77 | #进入牛说的素材文件夹位置 78 | cd /usr/share/cowsay/cows 79 | #查看图形素材文件 80 | cat meow.cow 81 | ``` 82 | 83 | - /usr/games/cowsay(命令的位置) 84 | - /usr/share/cowsay/cow(素材的位置) 85 | - 动物的形象的文件都在 .cow 文件中,比如 meow.cow 86 | 87 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/cat.png) 88 | 89 | ### 总结 🤨 90 | 91 | - 这次输出了中文 92 | - 并且找到了 cowsay 的图像素材的位置 💡 93 | - 我们能否把现实世界的 jpg 图片 94 | - 变成ascii形式的cow文件呢?🤔 95 | - 下次再说!👋 96 | -------------------------------------------------------------------------------- /md/029-48590-随机笑话_fortune.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # fortune 笑话 8 | 9 | ## 中文笑话 😌 10 | 11 | - asciiview把图像转化为了 ascii🅰️ 字符画 12 | - 并且修改了 cowsay 的图像素材 💡 13 | - 我们能让 cowsay 随机讲讲笑话吗? 14 | 15 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20211008-1633663823279) 16 | 17 | ## 我们想要让牛讲一个随机的笑话 18 | 19 | - 首先我们要有个说笑话的软件包: 20 | 21 | ```shell 22 | # 下载 fortune 23 | sudo apt install fortune 24 | #使用 fortune 25 | fortune 26 | ``` 27 | 28 | ### 深入重定向 29 | 30 | ```shell 31 | # 把本该输出到屏幕的 fortune 的结果,输出到 cowsay 32 | fortune | cowsay 33 | ``` 34 | 35 | - fortune 输出重定向到 figlet 36 | - figlet 输出重定向到 cowsay 37 | 38 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/fortune_pipe.png) 39 | 40 | ### 三重重定向 41 | ```shell 42 | fortune 43 | fortune | boxes -d cat 44 | fortune | boxes -d cat | pv -qL 10 45 | fortune | boxes -d cat | lolcat 46 | fortune | boxes -d cat | pv -qL 10 |lolcat 47 | ``` 48 | 49 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210629-1624976312502) 50 | 51 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210629-1624976590337) 52 | 53 | ### boxes的细节 54 | 55 | ```shell 56 | #查询详细帮助 57 | man boxes 58 | #列出所有图形 59 | boxes -l 60 | ``` 61 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210727-1627352147045) 62 | 63 | - 有些还挺好看的 64 | - 还有很多适合于制作注释之类的 65 | 66 | ### 内边距 67 | 68 | - 可以设置一些padding 内边距 69 | 70 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210727-1627353212523) 71 | 72 | ### 大小 73 | 74 | - 可以控制大小 75 | 76 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210727-1627353415803) 77 | 78 | ### 对齐 79 | - 还可以控制对齐方式 80 | - 垂直方向 81 | - 水平方向 82 | 83 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210727-1627353638371) 84 | 85 | - 可以居中 86 | 87 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220903-1662191057883) 88 | 89 | ## fortune 的细节 📒 90 | 91 | - 具体笑话文件在/usr/share/games/fortunes 92 | - 可以用 cat 查看相应的字典 dat📒 文件 93 | - 攻击性笑话在/usr/share/games/fortunes/off 94 | - 想删除某类的笑话,就删除相应的 dat 文件 95 | - 可以用-f 列出所有列表 96 | - 可以用百分比控制笑话来源 97 | 98 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/fortune.png) 99 | 100 | ### 总结 🤨 101 | 102 | - fortune是英文的 103 | - 如果想来点中文的笑话或者诗歌可以么? 104 | - 怎么来呢?🤔 105 | 106 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220903-1662193886249) 107 | 108 | - 下次再说!👋 109 | -------------------------------------------------------------------------------- /md/030-45580-中文诗词_fortune-zh.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 我们来回顾一下 😌 10 | 11 | **上一部分我们都讲了什么?**🤔 12 | 13 | - fortune是英文的 14 | - 如果想来点中文的笑话或者诗歌可以么? 15 | - 怎么来呢?🤔 16 | 17 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220903-1662193886249) 18 | 19 | ### 那有没有中 🀄️ 文的 fortune 呢? 20 | 21 | ```shell 22 | # 搜索一下 fortune 23 | apt search fortune chinese 24 | ``` 25 | 26 | - 简介里匹配也可以 27 | 28 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220903-1662193939927) 29 | 30 | - 搜索到了 31 | - 去下载吧~ 32 | 33 | ### 中文 fortune 34 | 35 | ```shell 36 | sudo apt install fortune-zh 37 | fortune-zh 38 | ``` 39 | 40 | - /usr/share/games/fortunes/{tang300,song100} 41 | - 这两个是中 🀄️ 文的是诗歌库 42 | - tang300 唐诗三百首 43 | - song100 一百首宋词 44 | 45 | ### pipe 46 | - 输出重定向到 cowsay 47 | 48 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/shi.png) 49 | 50 | ```shell 51 | fortune-zh tangb300 | cowsay -f beavis.zen 52 | ``` 53 | 54 | ### 彩色 🎨 的原理‼️ 55 | 56 | ```shell 57 | #进入fortunes-zh的素材文件夹 58 | cd /usr/share/games/fortunes/ 59 | #查看素材 60 | vi tang300 61 | ``` 62 | 63 | ![tang300](https://labfile.oss.aliyuncs.com/courses/2712/tang300.jpg) 64 | 65 | ### 打开唐诗 66 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/caise.png) 67 | 68 | - ^[[32m《感遇·其一》^[[m 69 | - 这里面的^[是esc转义字符 70 | - 相当于"\033" 71 | - [32m代表绿的字体 72 | - ^[[m代表回到原始字体 73 | - 下面的33m意味着橙色字体 74 | 75 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220903-1662197303288) 76 | 77 | - 30~37 都可以设置并修改颜色 🎨 78 | - 也可以建立自己的彩色俗语库 79 | 80 | ### 总结 🤨 81 | 82 | - 下载了中 🀄️ 文谚语 83 | - 输出重定向了中文谚语 84 | - 理解词典和颜色 85 | - 下次讲什么?🤔 86 | - 下次再说!👋 87 | 88 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220903-1662197273972) 89 | -------------------------------------------------------------------------------- /md/030-48590-随机笑话_fortune.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # fortune 笑话 8 | 9 | ## 中文笑话 😌 10 | 11 | - asciiview把图像转化为了 ascii🅰️ 字符画 12 | - 并且修改了 cowsay 的图像素材 💡 13 | - 我们能让 cowsay 随机讲讲笑话吗? 14 | 15 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20211008-1633663823279) 16 | 17 | ## 我们想要让牛讲一个随机的笑话 18 | 19 | - 首先我们要有个说笑话的软件包: 20 | 21 | ```shell 22 | # 下载 fortune 23 | sudo apt install fortune 24 | #使用 fortune 25 | fortune 26 | ``` 27 | 28 | ### 深入重定向 29 | 30 | ```shell 31 | # 把本该输出到屏幕的 fortune 的结果,输出到 cowsay 32 | fortune | cowsay 33 | ``` 34 | 35 | - fortune 输出重定向到 figlet 36 | - figlet 输出重定向到 cowsay 37 | 38 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/fortune_pipe.png) 39 | 40 | ### 三重重定向 41 | ```shell 42 | fortune 43 | fortune | boxes -d cat 44 | fortune | boxes -d cat | pv -qL 10 45 | fortune | boxes -d cat | lolcat 46 | fortune | boxes -d cat | pv -qL 10 |lolcat 47 | ``` 48 | 49 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210629-1624976312502) 50 | 51 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210629-1624976590337) 52 | 53 | ### boxes的细节 54 | 55 | ```shell 56 | #查询详细帮助 57 | man boxes 58 | #列出所有图形 59 | boxes -l 60 | ``` 61 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210727-1627352147045) 62 | 63 | - 有些还挺好看的 64 | - 还有很多适合于制作注释之类的 65 | 66 | ### 内边距 67 | 68 | - 可以设置一些padding 内边距 69 | 70 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210727-1627353212523) 71 | 72 | ### 大小 73 | 74 | - 可以控制大小 75 | 76 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210727-1627353415803) 77 | 78 | ### 对齐 79 | - 还可以控制对齐方式 80 | - 垂直方向 81 | - 水平方向 82 | 83 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210727-1627353638371) 84 | 85 | - 可以居中 86 | 87 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220903-1662191057883/wm) 88 | 89 | ## fortune 的细节 📒 90 | 91 | - 具体笑话文件在/usr/share/games/fortunes 92 | - 可以用 cat 查看相应的字典 dat📒 文件 93 | - 攻击性笑话在/usr/share/games/fortunes/off 94 | - 想删除某类的笑话,就删除相应的 dat 文件 95 | - 可以用-f 列出所有列表 96 | - 可以用百分比控制笑话来源 97 | 98 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/fortune.png) 99 | 100 | ### 总结 🤨 101 | 102 | - fortune是英文的 103 | - 如果想来点中文的笑话或者诗歌可以么? 104 | - 怎么来呢?🤔 105 | 106 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220903-1662193886249/wm) 107 | 108 | - 下次再说!👋 109 | -------------------------------------------------------------------------------- /md/031-45580-中文诗词_fortune-zh.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 我们来回顾一下 😌 10 | 11 | **上一部分我们都讲了什么?**🤔 12 | 13 | - fortune是英文的 14 | - 如果想来点中文的笑话或者诗歌可以么? 15 | - 怎么来呢?🤔 16 | 17 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220903-1662193886249) 18 | 19 | ### 那有没有中 🀄️ 文的 fortune 呢? 20 | 21 | ```shell 22 | # 搜索一下 fortune 23 | apt search fortune chinese 24 | ``` 25 | 26 | - 简介里匹配也可以 27 | 28 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220903-1662193939927) 29 | 30 | - 搜索到了 31 | - 去下载吧~ 32 | 33 | ### 中文 fortune 34 | 35 | ```shell 36 | sudo apt install fortune-zh 37 | fortune-zh 38 | ``` 39 | 40 | - /usr/share/games/fortunes/{tang300,song100} 41 | - 这两个是中 🀄️ 文的是诗歌库 42 | - tang300 唐诗三百首 43 | - song100 一百首宋词 44 | 45 | ### pipe 46 | - 输出重定向到 cowsay 47 | 48 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/shi.png) 49 | 50 | ```shell 51 | fortune-zh tangb300 | cowsay -f beavis.zen 52 | ``` 53 | 54 | ### 彩色 🎨 的原理‼️ 55 | 56 | ```shell 57 | #进入fortunes-zh的素材文件夹 58 | cd /usr/share/games/fortunes/ 59 | #查看素材 60 | vi tang300 61 | ``` 62 | 63 | ![tang300](https://labfile.oss.aliyuncs.com/courses/2712/tang300.jpg) 64 | 65 | ### 打开唐诗 66 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/caise.png) 67 | 68 | - ^[[32m《感遇·其一》^[[m 69 | - 这里面的^[是esc转义字符 70 | - 相当于"\033" 71 | - [32m代表绿的字体 72 | - ^[[m代表回到原始字体 73 | - 下面的33m意味着橙色字体 74 | 75 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220903-1662197303288) 76 | 77 | - 30~37 都可以设置并修改颜色 🎨 78 | - 也可以建立自己的彩色俗语库 79 | 80 | ### 总结 🤨 81 | 82 | - 下载了中 🀄️ 文谚语 83 | - 输出重定向了中文谚语 84 | - 理解词典和颜色 85 | - 下次讲什么?🤔 86 | - 下次再说!👋 87 | 88 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220903-1662197273972) 89 | -------------------------------------------------------------------------------- /md/032-45580-中文诗词_fortune-zh.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 我们来回顾一下 😌 10 | 11 | **上一部分我们都讲了什么?**🤔 12 | 13 | - fortune是英文的 14 | - 如果想来点中文的笑话或者诗歌可以么? 15 | - 怎么来呢?🤔 16 | 17 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220903-1662193886249) 18 | 19 | ### 那有没有中 🀄️ 文的 fortune 呢? 20 | 21 | ```shell 22 | # 搜索一下 fortune 23 | apt search fortune chinese 24 | ``` 25 | 26 | - 简介里匹配也可以 27 | 28 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220903-1662193939927) 29 | 30 | - 搜索到了 31 | - 去下载吧~ 32 | 33 | ### 中文 fortune 34 | 35 | ```shell 36 | sudo apt install fortune-zh 37 | fortune-zh 38 | ``` 39 | 40 | - /usr/share/games/fortunes/{tang300,song100} 41 | - 这两个是中 🀄️ 文的是诗歌库 42 | - tang300 唐诗三百首 43 | - song100 一百首宋词 44 | 45 | ### pipe 46 | - 输出重定向到 cowsay 47 | 48 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/shi.png) 49 | 50 | ```shell 51 | fortune-zh tangb300 | cowsay -f beavis.zen 52 | ``` 53 | 54 | ### 彩色 🎨 的原理‼️ 55 | 56 | ```shell 57 | #进入fortunes-zh的素材文件夹 58 | cd /usr/share/games/fortunes/ 59 | #查看素材 60 | vi tang300 61 | ``` 62 | 63 | ![tang300](https://labfile.oss.aliyuncs.com/courses/2712/tang300.jpg) 64 | 65 | ### 打开唐诗 66 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/caise.png) 67 | 68 | - ^[[32m《感遇·其一》^[[m 69 | - 这里面的^[是esc转义字符 70 | - 相当于"\033" 71 | - [32m代表绿的字体 72 | - ^[[m代表回到原始字体 73 | - 下面的33m意味着橙色字体 74 | 75 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220903-1662197303288) 76 | 77 | - 30~37 都可以设置并修改颜色 🎨 78 | - 也可以建立自己的彩色俗语库 79 | 80 | ### 总结 🤨 81 | 82 | - 下载了中 🀄️ 文谚语 83 | - 输出重定向了中文谚语 84 | - 理解词典和颜色 85 | - 下次讲什么?🤔 86 | - 下次再说!👋 87 | 88 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220903-1662197273972) 89 | -------------------------------------------------------------------------------- /md/034-45583-桌面宠物_pet.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 我们来回顾一下 😌 10 | - 我们这次使用了tmux 11 | - tmux连接不同服务器可以有不同的session 12 | - 同一个session里面可以有多个窗口window 13 | - 同一个window里面可以有多个窗格pane 14 | - 如果只连一个服务器 15 | - 没有必要用session 16 | - 只用新建和切分window就够用了 17 | - ctrl+b c新建窗口 18 | - ctrl+b %拆分窗格pane 19 | - ctrl+b 方向键选择窗格pane 20 | - ctrl+b x 关闭窗格pane 21 | - 还有什么好玩的么?🤔 22 | - 我们看看桌面的小宠物 23 | 24 | ## oneko🐱 25 | 26 | #### 我们可以下载并运行这个小应用 27 | 28 | ```shell 29 | sudo apt install oneko 30 | oneko 31 | ``` 32 | 33 | - 然后就会出现一只小猫 🐱 34 | - 小猫会跟着你的鼠标走 35 | - 走到你的鼠标 🐭 附近她还会撒娇 36 | 37 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/oneko.png) 38 | 39 | - 可以把桌宠换成狗 🐶、木之本樱?大道寺知世? 40 | - 可以控制时间间隔、移动速度 41 | - -towindow 可以让她指定停靠在某个窗口上 42 | - 可以设置前景背景色 43 | - 我们再来看另一个桌宠 44 | 45 | ## xeyes👀 46 | 47 | #### 可以下载并运行这个程序 48 | 49 | ```shell 50 | sudo apt install xeyes 51 | xeyes 52 | ``` 53 | 54 | - 出现一个眼睛 👀 55 | - 眼球追着鼠标走 56 | 57 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/xeyes.png) 58 | 59 | #### 总结 🤨 60 | 61 | - 这次下载了两个桌面宠物 62 | - 配置了参数 63 | - 其实浏览器火狐 🦊 也算是桌面应用啊! 64 | - 下次我们来看看火狐 🤔 65 | - 下次再说!👋 66 | -------------------------------------------------------------------------------- /md/035-45586-火狐_firefox.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 我们来回顾一下 😌 10 | 11 | **上一部分我们都讲了什么?**🤔 12 | 13 | - 讲了两个桌宠 14 | - oneko🐱 15 | - xeyes👀 16 | 17 | 这次我们来看看这个火狐~🦊 18 | 19 | ## 火狐 🦊 20 | 21 | 看看当前版本,看是否可以更新,如果需要更新就更新一下: 22 | 23 | ```shell 24 | firefox -v 25 | apt search firefox 26 | sudo apt upgrade 27 | ``` 28 | 29 | ### 打开火狐 🦊 30 | 31 | 直接运行程序,浏览网页: 32 | 33 | ```shell 34 | #打开oeasy.org 35 | firefox oeasy.org 36 | #在两个标签页中打开网站 37 | firefox lanqiao.cn bilibili.com 38 | ``` 39 | 40 | - 使用 ctrl+c结束进程 41 | - 如果想在桌面创建快捷方式 42 | - 首先需要明确软件包位置 43 | - 使用灵魂三问吗 44 | 45 | ### 添加桌面超链接 46 | 47 | - 创建一个桌面的快捷方式launcher 48 | 49 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20211217-1639706977426) 50 | 51 | - 然后进行设置 52 | 53 | ### 设置launcher 54 | 55 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/laucher.png) 56 | 57 | ### 总结 🤨 58 | 59 | - 这次升级了浏览器火狐 🦊 60 | - 制作了桌面上的快捷方式 61 | - gui 和 cli 之间的路径有什么关系呢? 62 | - 下次再说!👋 63 | -------------------------------------------------------------------------------- /md/035-733260-终端浏览器_w3m.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 分屏工具tmux 8 | 9 | ## 回忆 10 | - 我们上次使用了tmux 11 | - tmux连接不同服务器可以有不同的session 12 | - 同一个session里面可以有多个窗口window 13 | - 同一个window里面可以有多个窗格pane 14 | - 只用新建和切分window就够用了 15 | - ctrl+b c新建窗口 16 | - ctrl+b %"拆分窗格pane 17 | - ctrl+b 方向键选择窗格pane 18 | - ctrl+b x 关闭窗格pane 19 | - 还有什么好玩的么? 20 | 21 | ### 终端浏览器 22 | 23 | - 安装 24 | - sudo apt install w3m 25 | - sudo apt install w3m-img 26 | 27 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668869053600) 28 | 29 | - 默认颜色有点看不清楚 30 | - 可以调整终端颜色方案 31 | 32 | - 访问网页 33 | - w3m oeasy.org 34 | 35 | ### 常用方法 36 | 37 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668869202184) 38 | 39 | - 远程和本地的html都可以访问 40 | - 这个浏览器浏览有什么快捷键吗? 41 | 42 | ### 查看帮助 43 | 44 | - 在浏览状态下按H 45 | 46 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668869582653) 47 | 48 | ### 总结 🤨 49 | - 这次我们研究了终端上的浏览器 50 | - w3m 51 | - 可以浏览各种网页 52 | - 还是很好玩的😄 53 | - 还有什么好玩的吗? 54 | - 下次再说!👋 55 | 56 | -------------------------------------------------------------------------------- /md/036-45583-桌面宠物_pet.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 我们来回顾一下 😌 10 | - 我们这次使用了tmux 11 | - tmux连接不同服务器可以有不同的session 12 | - 同一个session里面可以有多个窗口window 13 | - 同一个window里面可以有多个窗格pane 14 | - 如果只连一个服务器 15 | - 没有必要用session 16 | - 只用新建和切分window就够用了 17 | - ctrl+b c新建窗口 18 | - ctrl+b %拆分窗格pane 19 | - ctrl+b 方向键选择窗格pane 20 | - ctrl+b x 关闭窗格pane 21 | - 还有什么好玩的么?🤔 22 | - 我们看看桌面的小宠物 23 | 24 | ## oneko🐱 25 | 26 | #### 我们可以下载并运行这个小应用 27 | 28 | ```shell 29 | sudo apt install oneko 30 | oneko 31 | ``` 32 | 33 | - 然后就会出现一只小猫 🐱 34 | - 小猫会跟着你的鼠标走 35 | - 走到你的鼠标 🐭 附近她还会撒娇 36 | 37 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/oneko.png) 38 | 39 | - 可以把桌宠换成狗 🐶、木之本樱?大道寺知世? 40 | - 可以控制时间间隔、移动速度 41 | - -towindow 可以让她指定停靠在某个窗口上 42 | - 可以设置前景背景色 43 | - 我们再来看另一个桌宠 44 | 45 | ## xeyes👀 46 | 47 | #### 可以下载并运行这个程序 48 | 49 | ```shell 50 | sudo apt install xeyes 51 | xeyes 52 | ``` 53 | 54 | - 出现一个眼睛 👀 55 | - 眼球追着鼠标走 56 | 57 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/xeyes.png) 58 | 59 | #### 总结 🤨 60 | 61 | - 这次下载了两个桌面宠物 62 | - 配置了参数 63 | - 其实浏览器火狐 🦊 也算是桌面应用啊! 64 | - 下次我们来看看火狐 🤔 65 | - 下次再说!👋 66 | -------------------------------------------------------------------------------- /md/036-45587-文件管理器_nautilus.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 我们来回顾一下 😌 10 | 11 | **上一部分我们都讲了什么?**🤔 12 | 13 | - 讲了火狐 🦊 14 | - 火狐的位置 15 | - 用命令行打开多个网址 16 | - 火狐 🦊 的升级 17 | - 火狐 🦊 桌面建立快捷方式 18 | 19 | 那么我们可以知道桌面快捷方式文件的名称么? 20 | 21 | ## 从文件管理器 🗂 到命令行 📟 22 | 23 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/file) 24 | 25 | 按住文件,拖动到 terminal📟 上面,这样我们就知道文件的绝对路径了。文件夹也可以拖动,我们也可以先打上命令,然后把文件作为参数拖动过来。 26 | 27 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/fileAsArguement) 28 | 29 | ## 从命令行 📟 到文件管理器 🗂 30 | 31 | 我们首先在命令行的位置输入 pwd,把路径复制到剪贴板: 32 | 33 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/filepath.png) 34 | 35 | 之后把路径粘贴到文件管理器的地址栏,这样就可以到达命令行所在的位置了。 36 | 37 | **也可以用 nautilus 命令打开文件管理器,让我们一起来看看吧~** 38 | 39 | ## nautilus 40 | 41 | ```shell 42 | sudo apt update 43 | sudo apt install nautilus 44 | nautilus . 45 | nautilus /etc 46 | ``` 47 | 48 | - `nautilus .` 打开当前路径 49 | - `nautilus /etc` 打开根下的 etc 文件夹 50 | 51 | 然后使用 ctrl+c 结束进程。 52 | 53 | ### 总结 🤨 54 | 55 | - 这次了解了 gui(图形用户界面)和 cli(命令行界面)之间关系 56 | - 可以把文件从 gui 拖到 cli 57 | - 也可以吧 cli 的路径在 gui 中打开 58 | - 了解了桌面上的快捷方式的本质是个文件 59 | - 图形用户界面还有什么可玩的呢? 60 | - 下次再说!👋 61 | -------------------------------------------------------------------------------- /md/036-733260-终端浏览器_w3m.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 分屏工具tmux 8 | 9 | ## 回忆 10 | - 我们上次使用了tmux 11 | - tmux连接不同服务器可以有不同的session 12 | - 同一个session里面可以有多个窗口window 13 | - 同一个window里面可以有多个窗格pane 14 | - 只用新建和切分window就够用了 15 | - ctrl+b c新建窗口 16 | - ctrl+b %"拆分窗格pane 17 | - ctrl+b 方向键选择窗格pane 18 | - ctrl+b x 关闭窗格pane 19 | - 还有什么好玩的么? 20 | 21 | ### 终端浏览器 22 | 23 | - 安装 24 | - sudo apt install w3m 25 | - sudo apt install w3m-img 26 | 27 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668869053600) 28 | 29 | - 默认颜色有点看不清楚 30 | - 可以调整终端颜色方案 31 | 32 | - 访问网页 33 | - w3m oeasy.org 34 | 35 | ### 常用方法 36 | 37 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668869202184) 38 | 39 | - 远程和本地的html都可以访问 40 | - 这个浏览器浏览有什么快捷键吗? 41 | 42 | ### 查看帮助 43 | 44 | - 在浏览状态下按H 45 | 46 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668869582653) 47 | 48 | ### 总结 🤨 49 | - 这次我们研究了终端上的浏览器 50 | - w3m 51 | - 可以浏览各种网页 52 | - 还是很好玩的😄 53 | - 还有什么好玩的吗? 54 | - 下次再说!👋 55 | 56 | -------------------------------------------------------------------------------- /md/037-45579-桌面环境_xfce.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 我们来回顾一下 😌 10 | 11 | **上一部分我们都讲了什么?**🤔 12 | 13 | - 讲了文件管理器和命令行终端互相交互 14 | - 用命令 nautilus 在文件管理器打开某路径 15 | 16 | **这次我们一起来看看 图形用户界面 (GUI) 的情况。** 17 | 18 | ### 图形界面和发行版的关系 19 | 20 | - 一个发行版可以使用多个图形界面 21 | - 常见的有 22 | - kde 23 | - gnome 24 | - xfce 25 | 26 | 下图是 debian 安装过程中的一步,可以多选图形用户界面,图形用户界面也是一种应用软件包。 27 | 28 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/gui4.jpg) 29 | 30 | ### KDE 31 | 32 | **KDE = K Desktop Environment** 33 | 34 | - KDE 桌面图形环境是 Linux 几大桌面里的老大 35 | - 第一个诞生出来的 linux 桌面环境 (1996 年,由德国人 Matthias Ettrich 发起的) 36 | - KDE 是为了类 unix 环境制作的 (unix、bsd 都能用) 37 | - KDE 基于 Qt 38 | 39 | 那什么是 Qt 呢? 40 | 41 | ### Qt 42 | 43 | - Qt 是一个开源的 C++ 跨平台图形界面开发库 44 | - Qt 是成形的开发用户界面开发平台 45 | - WPS 就是用 Qt 开发的 46 | - Qt 属于 Trolltech(直译为喷子科技),后被 nokia 收购,又被出售给 Digia 47 | - Qt 升级带动 KDE 升级,有一段 KDE 为了追 Qt4 新特性,重写了 KDE,稳定性降低,KDE4.2 才恢复,这段时间很多人转投 gnome。 48 | 49 | ### GNOME 50 | 51 | GNOME [ɡˈnoʊm] 两种发音 格弄姆,现在处于主流,以下发行版默认: 52 | 53 | - gui 54 | - rhel 55 | - centos 56 | - ubuntu 57 | 58 | GNOME 使用 C 语言编写,使用的库是 gtk。 59 | 60 | #### gtk 61 | 62 | - gtk+是 gnu 计划的一部分,使用 gpl 协议 63 | - 什么是gpl协议呢? 64 | - GNU 公共许可 65 | - 是一种开源协议 66 | - 如果你的软件中包含gpl的内容 67 | - 也必须开源 68 | - 那什么是gnu呢? 69 | 70 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20211216-1639648222770) 71 | 72 | ### gnu 73 | - Gnu is Not Unix 74 | - 在at&t把unix商业化之后 75 | - 由stallman发起了free software revolution 自由软件革命 76 | - 后来演化为今天的open source movement 开源运动 77 | - 希望代码有全人类共有 78 | - 对于软件做开源、免费的限定 79 | - 希望把大资本屏蔽在外面 80 | - 这一情况发生在各个领域 81 | - 东方 82 | - v家 83 | - mmd 84 | - 等等 85 | - 软件领域就是gnu 86 | - gtk 的全称是 GIMP Toolkit 87 | - GIMP 是著名开源图像制作软件 88 | - 以下软件使用 gtk: 89 | 90 | - Inkscape 91 | - firefox 92 | - chrome 93 | - gnome 94 | - xfce 95 | 96 | ### Xfce 97 | 98 | - 发音就是四个字母 99 | - "Xfce" 的名字最初是代表的是"XForms Common Environment" 100 | - Xfce 是用 GTK2 toolkit 编写基于 c 语言 101 | - 轻量,占用资源少,速度快,适合老硬件 102 | - 历史悠久,96 年就有 103 | - 可用作 u 盘系统 104 | - linus 本人觉得好用 105 | 106 | #### 升级 107 | 108 | ```shell 109 | sudo apt update 110 | sudo apt upgrade xfce4 111 | ``` 112 | 113 | ### 总结 🤨 114 | 115 | **查看当前 gui:** 116 | 117 | ```shell 118 | echo $DESKTOP_SESSION 119 | ``` 120 | 121 | - 这次了解了各种 gui(估衣)🥋 122 | - 各种图形界面五光十色 123 | - 五色令人目盲 👁 124 | - 命令行才是根本!!! 125 | - 下次再说!👋 126 | -------------------------------------------------------------------------------- /md/037-45583-桌面宠物_pet.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 我们来回顾一下 😌 10 | - 我们这次使用了tmux 11 | - tmux连接不同服务器可以有不同的session 12 | - 同一个session里面可以有多个窗口window 13 | - 同一个window里面可以有多个窗格pane 14 | - 如果只连一个服务器 15 | - 没有必要用session 16 | - 只用新建和切分window就够用了 17 | - ctrl+b c新建窗口 18 | - ctrl+b %拆分窗格pane 19 | - ctrl+b 方向键选择窗格pane 20 | - ctrl+b x 关闭窗格pane 21 | - 还有什么好玩的么?🤔 22 | - 我们看看桌面的小宠物 23 | 24 | ## oneko🐱 25 | 26 | #### 我们可以下载并运行这个小应用 27 | 28 | ```shell 29 | sudo apt install oneko 30 | oneko 31 | ``` 32 | 33 | - 然后就会出现一只小猫 🐱 34 | - 小猫会跟着你的鼠标走 35 | - 走到你的鼠标 🐭 附近她还会撒娇 36 | 37 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/oneko.png) 38 | 39 | - 可以把桌宠换成狗 🐶、木之本樱?大道寺知世? 40 | - 可以控制时间间隔、移动速度 41 | - -towindow 可以让她指定停靠在某个窗口上 42 | - 可以设置前景背景色 43 | - 我们再来看另一个桌宠 44 | 45 | ## xeyes👀 46 | 47 | #### 可以下载并运行这个程序 48 | 49 | ```shell 50 | sudo apt install xeyes 51 | xeyes 52 | ``` 53 | 54 | - 出现一个眼睛 👀 55 | - 眼球追着鼠标走 56 | 57 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/xeyes.png) 58 | 59 | #### 总结 🤨 60 | 61 | - 这次下载了两个桌面宠物 62 | - 配置了参数 63 | - 其实浏览器火狐 🦊 也算是桌面应用啊! 64 | - 下次我们来看看火狐 🤔 65 | - 下次再说!👋 66 | -------------------------------------------------------------------------------- /md/037-45586-火狐_firefox.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 我们来回顾一下 😌 10 | 11 | **上一部分我们都讲了什么?**🤔 12 | 13 | - 讲了两个桌宠 14 | - oneko🐱 15 | - xeyes👀 16 | 17 | 这次我们来看看这个火狐~🦊 18 | 19 | ## 火狐 🦊 20 | 21 | 看看当前版本,看是否可以更新,如果需要更新就更新一下: 22 | 23 | ```shell 24 | firefox -v 25 | apt search firefox 26 | sudo apt upgrade 27 | ``` 28 | 29 | ### 打开火狐 🦊 30 | 31 | 直接运行程序,浏览网页: 32 | 33 | ```shell 34 | #打开oeasy.org 35 | firefox oeasy.org 36 | #在两个标签页中打开网站 37 | firefox lanqiao.cn bilibili.com 38 | ``` 39 | 40 | - 使用 ctrl+c结束进程 41 | - 如果想在桌面创建快捷方式 42 | - 首先需要明确软件包位置 43 | - 使用灵魂三问吗 44 | 45 | ### 添加桌面超链接 46 | 47 | - 创建一个桌面的快捷方式launcher 48 | 49 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20211217-1639706977426) 50 | 51 | - 然后进行设置 52 | 53 | ### 设置launcher 54 | 55 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/laucher.png) 56 | 57 | ### 总结 🤨 58 | 59 | - 这次升级了浏览器火狐 🦊 60 | - 制作了桌面上的快捷方式 61 | - gui 和 cli 之间的路径有什么关系呢? 62 | - 下次再说!👋 63 | -------------------------------------------------------------------------------- /md/038-45566-总结.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 我们来回顾一下 😌 10 | 11 | - 这一部分我们都讲了什么? 12 | - 各种 gui 13 | - qt 和 gtk 两个开源工具跨平台开发库 14 | - 发行版和 gui 之间的关系 15 | - 平铺桌面i3wm,bspwm更高效 16 | 17 | - 我们一起来回顾一下整个学习过程 18 | - 我们从零开始 19 | - 了解了一些关于 linux 基本的东西 20 | - 一起来回顾一下~ 21 | 22 | ## 终端 23 | 24 | - linux 系统的基本逻辑 25 | - 什么是内核 26 | - uname 27 | - 什么是发行版 28 | - distro 29 | - 我在哪 30 | - pwd 31 | 32 | - 灵魂三问 33 | - 这儿都有啥 34 | - ls 35 | - 灵魂之问 36 | - whatis 37 | - 那啥在哪 38 | - whereis 39 | - 到底哪个 40 | - which 41 | - 详查手册 42 | - man 43 | - 清屏 44 | - clear 45 | 46 | ### 终端命令 47 | 48 | - 命令基本 49 | - 持续输出 50 | - yes 51 | - 软件包管理 52 | - apt 53 | - 标志 54 | - linuxlogo 55 | - 字符画 56 | - figlet 57 | - 风格文字 58 | - toilet 59 | 60 | - 动态效果 61 | - 蒸汽机车 62 | - sl 63 | - 黑客帝国 64 | - cmatrix 65 | - 满屏乱码 66 | - bb 67 | - 装酷屏幕 68 | - hollywood 69 | 70 | ### 深入理解终端 71 | 72 | - 深入软件 73 | - 应用管理 74 | - aptitude 75 | - 牛说 76 | - cowsay 77 | - 管道 78 | - pipe(很重要) 79 | - 字符图 80 | - asciiview 81 | - 随机笑话 82 | - fortune 83 | - 中文诗词 84 | - fortune-zh 85 | 86 | ## 桌面命令 87 | 88 | - 桌面宠物 89 | - pet 90 | - 火狐 91 | - firefox 92 | - 文件管理器 93 | - nautilus 94 | - 用户界面 95 | - xfce 96 | 97 | ### 总结 🤨 98 | 99 | - 我们熟悉了基本软件包的使用 100 | - 本地的dpkg 101 | - 远程的apt 102 | - 安装、卸载、搜索、查看 103 | - 了解了 gui 和 cli 的关系 104 | 105 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220913-1663059624264) 106 | 107 | - 体会到命令行才是根本!!! 108 | - 后面讲什么呢?🤔 109 | - 下一个系列再说!👋 110 | -------------------------------------------------------------------------------- /md/038-45586-火狐_firefox.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 我们来回顾一下 😌 10 | 11 | **上一部分我们都讲了什么?**🤔 12 | 13 | - 讲了两个桌宠 14 | - oneko🐱 15 | - xeyes👀 16 | 17 | 这次我们来看看这个火狐~🦊 18 | 19 | ## 火狐 🦊 20 | 21 | 看看当前版本,看是否可以更新,如果需要更新就更新一下: 22 | 23 | ```shell 24 | firefox -v 25 | apt search firefox 26 | sudo apt upgrade 27 | ``` 28 | 29 | ### 打开火狐 🦊 30 | 31 | 直接运行程序,浏览网页: 32 | 33 | ```shell 34 | #打开oeasy.org 35 | firefox oeasy.org 36 | #在两个标签页中打开网站 37 | firefox lanqiao.cn bilibili.com 38 | ``` 39 | 40 | - 使用 ctrl+c结束进程 41 | - 如果想在桌面创建快捷方式 42 | - 首先需要明确软件包位置 43 | - 使用灵魂三问吗 44 | 45 | ### 添加桌面超链接 46 | 47 | - 创建一个桌面的快捷方式launcher 48 | 49 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20211217-1639706977426) 50 | 51 | - 然后进行设置 52 | 53 | ### 设置launcher 54 | 55 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/laucher.png) 56 | 57 | ### 总结 🤨 58 | 59 | - 这次升级了浏览器火狐 🦊 60 | - 制作了桌面上的快捷方式 61 | - gui 和 cli 之间的路径有什么关系呢? 62 | - 下次再说!👋 63 | -------------------------------------------------------------------------------- /md/038-45587-文件管理器_nautilus.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 我们来回顾一下 😌 10 | 11 | **上一部分我们都讲了什么?**🤔 12 | 13 | - 讲了火狐 🦊 14 | - 火狐的位置 15 | - 用命令行打开多个网址 16 | - 火狐 🦊 的升级 17 | - 火狐 🦊 桌面建立快捷方式 18 | 19 | 那么我们可以知道桌面快捷方式文件的名称么? 20 | 21 | ## 从文件管理器 🗂 到命令行 📟 22 | 23 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/file) 24 | 25 | 按住文件,拖动到 terminal📟 上面,这样我们就知道文件的绝对路径了。文件夹也可以拖动,我们也可以先打上命令,然后把文件作为参数拖动过来。 26 | 27 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/fileAsArguement) 28 | 29 | ## 从命令行 📟 到文件管理器 🗂 30 | 31 | 我们首先在命令行的位置输入 pwd,把路径复制到剪贴板: 32 | 33 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/filepath.png) 34 | 35 | 之后把路径粘贴到文件管理器的地址栏,这样就可以到达命令行所在的位置了。 36 | 37 | **也可以用 nautilus 命令打开文件管理器,让我们一起来看看吧~** 38 | 39 | ## nautilus 40 | 41 | ```shell 42 | sudo apt update 43 | sudo apt install nautilus 44 | nautilus . 45 | nautilus /etc 46 | ``` 47 | 48 | - `nautilus .` 打开当前路径 49 | - `nautilus /etc` 打开根下的 etc 文件夹 50 | 51 | 然后使用 ctrl+c 结束进程。 52 | 53 | ### 总结 🤨 54 | 55 | - 这次了解了 gui(图形用户界面)和 cli(命令行界面)之间关系 56 | - 可以把文件从 gui 拖到 cli 57 | - 也可以吧 cli 的路径在 gui 中打开 58 | - 了解了桌面上的快捷方式的本质是个文件 59 | - 图形用户界面还有什么可玩的呢? 60 | - 下次再说!👋 61 | -------------------------------------------------------------------------------- /md/039-45579-桌面环境_xfce.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 我们来回顾一下 😌 10 | 11 | **上一部分我们都讲了什么?**🤔 12 | 13 | - 讲了文件管理器和命令行终端互相交互 14 | - 用命令 nautilus 在文件管理器打开某路径 15 | 16 | **这次我们一起来看看 图形用户界面 (GUI) 的情况。** 17 | 18 | ### 图形界面和发行版的关系 19 | 20 | - 一个发行版可以使用多个图形界面 21 | - 常见的有 22 | - kde 23 | - gnome 24 | - xfce 25 | 26 | 下图是 debian 安装过程中的一步,可以多选图形用户界面,图形用户界面也是一种应用软件包。 27 | 28 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/gui4.jpg) 29 | 30 | ### KDE 31 | 32 | **KDE = K Desktop Environment** 33 | 34 | - KDE 桌面图形环境是 Linux 几大桌面里的老大 35 | - 第一个诞生出来的 linux 桌面环境 (1996 年,由德国人 Matthias Ettrich 发起的) 36 | - KDE 是为了类 unix 环境制作的 (unix、bsd 都能用) 37 | - KDE 基于 Qt 38 | 39 | 那什么是 Qt 呢? 40 | 41 | ### Qt 42 | 43 | - Qt 是一个开源的 C++ 跨平台图形界面开发库 44 | - Qt 是成形的开发用户界面开发平台 45 | - WPS 就是用 Qt 开发的 46 | - Qt 属于 Trolltech(直译为喷子科技),后被 nokia 收购,又被出售给 Digia 47 | - Qt 升级带动 KDE 升级,有一段 KDE 为了追 Qt4 新特性,重写了 KDE,稳定性降低,KDE4.2 才恢复,这段时间很多人转投 gnome。 48 | 49 | ### GNOME 50 | 51 | GNOME [ɡˈnoʊm] 两种发音 格弄姆,现在处于主流,以下发行版默认: 52 | 53 | - gui 54 | - rhel 55 | - centos 56 | - ubuntu 57 | 58 | GNOME 使用 C 语言编写,使用的库是 gtk。 59 | 60 | #### gtk 61 | 62 | - gtk+是 gnu 计划的一部分,使用 gpl 协议 63 | - 什么是gpl协议呢? 64 | - GNU 公共许可 65 | - 是一种开源协议 66 | - 如果你的软件中包含gpl的内容 67 | - 也必须开源 68 | - 那什么是gnu呢? 69 | 70 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20211216-1639648222770) 71 | 72 | ### gnu 73 | - Gnu is Not Unix 74 | - 在at&t把unix商业化之后 75 | - 由stallman发起了free software revolution 自由软件革命 76 | - 后来演化为今天的open source movement 开源运动 77 | - 希望代码有全人类共有 78 | - 对于软件做开源、免费的限定 79 | - 希望把大资本屏蔽在外面 80 | - 这一情况发生在各个领域 81 | - 东方 82 | - v家 83 | - mmd 84 | - 等等 85 | - 软件领域就是gnu 86 | - gtk 的全称是 GIMP Toolkit 87 | - GIMP 是著名开源图像制作软件 88 | - 以下软件使用 gtk: 89 | 90 | - Inkscape 91 | - firefox 92 | - chrome 93 | - gnome 94 | - xfce 95 | 96 | ### Xfce 97 | 98 | - 发音就是四个字母 99 | - "Xfce" 的名字最初是代表的是"XForms Common Environment" 100 | - Xfce 是用 GTK2 toolkit 编写基于 c 语言 101 | - 轻量,占用资源少,速度快,适合老硬件 102 | - 历史悠久,96 年就有 103 | - 可用作 u 盘系统 104 | - linus 本人觉得好用 105 | 106 | #### 升级 107 | 108 | ```shell 109 | sudo apt update 110 | sudo apt upgrade xfce4 111 | ``` 112 | 113 | ### 总结 🤨 114 | 115 | **查看当前 gui:** 116 | 117 | ```shell 118 | echo $DESKTOP_SESSION 119 | ``` 120 | 121 | - 这次了解了各种 gui(估衣)🥋 122 | - 各种图形界面五光十色 123 | - 五色令人目盲 👁 124 | - 命令行才是根本!!! 125 | - 下次再说!👋 126 | -------------------------------------------------------------------------------- /md/039-45587-文件管理器_nautilus.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 我们来回顾一下 😌 10 | 11 | **上一部分我们都讲了什么?**🤔 12 | 13 | - 讲了火狐 🦊 14 | - 火狐的位置 15 | - 用命令行打开多个网址 16 | - 火狐 🦊 的升级 17 | - 火狐 🦊 桌面建立快捷方式 18 | 19 | 那么我们可以知道桌面快捷方式文件的名称么? 20 | 21 | ## 从文件管理器 🗂 到命令行 📟 22 | 23 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/file) 24 | 25 | 按住文件,拖动到 terminal📟 上面,这样我们就知道文件的绝对路径了。文件夹也可以拖动,我们也可以先打上命令,然后把文件作为参数拖动过来。 26 | 27 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/fileAsArguement) 28 | 29 | ## 从命令行 📟 到文件管理器 🗂 30 | 31 | 我们首先在命令行的位置输入 pwd,把路径复制到剪贴板: 32 | 33 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/filepath.png) 34 | 35 | 之后把路径粘贴到文件管理器的地址栏,这样就可以到达命令行所在的位置了。 36 | 37 | **也可以用 nautilus 命令打开文件管理器,让我们一起来看看吧~** 38 | 39 | ## nautilus 40 | 41 | ```shell 42 | sudo apt update 43 | sudo apt install nautilus 44 | nautilus . 45 | nautilus /etc 46 | ``` 47 | 48 | - `nautilus .` 打开当前路径 49 | - `nautilus /etc` 打开根下的 etc 文件夹 50 | 51 | 然后使用 ctrl+c 结束进程。 52 | 53 | ### 总结 🤨 54 | 55 | - 这次了解了 gui(图形用户界面)和 cli(命令行界面)之间关系 56 | - 可以把文件从 gui 拖到 cli 57 | - 也可以吧 cli 的路径在 gui 中打开 58 | - 了解了桌面上的快捷方式的本质是个文件 59 | - 图形用户界面还有什么可玩的呢? 60 | - 下次再说!👋 61 | -------------------------------------------------------------------------------- /md/040-45566-总结.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 我们来回顾一下 😌 10 | 11 | - 这一部分我们都讲了什么? 12 | - 各种 gui 13 | - qt 和 gtk 两个开源工具跨平台开发库 14 | - 发行版和 gui 之间的关系 15 | - 平铺桌面i3wm,bspwm更高效 16 | 17 | - 我们一起来回顾一下整个学习过程 18 | - 我们从零开始 19 | - 了解了一些关于 linux 基本的东西 20 | - 一起来回顾一下~ 21 | 22 | ## 终端 23 | 24 | - linux 系统的基本逻辑 25 | - 什么是内核 26 | - uname 27 | - 什么是发行版 28 | - distro 29 | - 我在哪 30 | - pwd 31 | 32 | - 灵魂三问 33 | - 这儿都有啥 34 | - ls 35 | - 灵魂之问 36 | - whatis 37 | - 那啥在哪 38 | - whereis 39 | - 到底哪个 40 | - which 41 | - 详查手册 42 | - man 43 | - 清屏 44 | - clear 45 | 46 | ### 终端命令 47 | 48 | - 命令基本 49 | - 持续输出 50 | - yes 51 | - 软件包管理 52 | - apt 53 | - 标志 54 | - linuxlogo 55 | - 字符画 56 | - figlet 57 | - 风格文字 58 | - toilet 59 | 60 | - 动态效果 61 | - 蒸汽机车 62 | - sl 63 | - 黑客帝国 64 | - cmatrix 65 | - 满屏乱码 66 | - bb 67 | - 装酷屏幕 68 | - hollywood 69 | 70 | ### 深入理解终端 71 | 72 | - 深入软件 73 | - 应用管理 74 | - aptitude 75 | - 牛说 76 | - cowsay 77 | - 管道 78 | - pipe(很重要) 79 | - 字符图 80 | - asciiview 81 | - 随机笑话 82 | - fortune 83 | - 中文诗词 84 | - fortune-zh 85 | 86 | ## 桌面命令 87 | 88 | - 桌面宠物 89 | - pet 90 | - 火狐 91 | - firefox 92 | - 文件管理器 93 | - nautilus 94 | - 用户界面 95 | - xfce 96 | 97 | ### 总结 🤨 98 | 99 | - 我们熟悉了基本软件包的使用 100 | - 本地的dpkg 101 | - 远程的apt 102 | - 安装、卸载、搜索、查看 103 | - 了解了 gui 和 cli 的关系 104 | 105 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220913-1663059624264/wm) 106 | 107 | - 体会到命令行才是根本!!! 108 | - 后面讲什么呢?🤔 109 | - 下一个系列再说!👋 110 | -------------------------------------------------------------------------------- /md/040-45579-桌面环境_xfce.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 我们来回顾一下 😌 10 | 11 | **上一部分我们都讲了什么?**🤔 12 | 13 | - 讲了文件管理器和命令行终端互相交互 14 | - 用命令 nautilus 在文件管理器打开某路径 15 | 16 | **这次我们一起来看看 图形用户界面 (GUI) 的情况。** 17 | 18 | ### 图形界面和发行版的关系 19 | 20 | - 一个发行版可以使用多个图形界面 21 | - 常见的有 22 | - kde 23 | - gnome 24 | - xfce 25 | 26 | 下图是 debian 安装过程中的一步,可以多选图形用户界面,图形用户界面也是一种应用软件包。 27 | 28 | ![Image text](https://labfile.oss.aliyuncs.com/courses/2712/gui4.jpg) 29 | 30 | ### KDE 31 | 32 | **KDE = K Desktop Environment** 33 | 34 | - KDE 桌面图形环境是 Linux 几大桌面里的老大 35 | - 第一个诞生出来的 linux 桌面环境 (1996 年,由德国人 Matthias Ettrich 发起的) 36 | - KDE 是为了类 unix 环境制作的 (unix、bsd 都能用) 37 | - KDE 基于 Qt 38 | 39 | 那什么是 Qt 呢? 40 | 41 | ### Qt 42 | 43 | - Qt 是一个开源的 C++ 跨平台图形界面开发库 44 | - Qt 是成形的开发用户界面开发平台 45 | - WPS 就是用 Qt 开发的 46 | - Qt 属于 Trolltech(直译为喷子科技),后被 nokia 收购,又被出售给 Digia 47 | - Qt 升级带动 KDE 升级,有一段 KDE 为了追 Qt4 新特性,重写了 KDE,稳定性降低,KDE4.2 才恢复,这段时间很多人转投 gnome。 48 | 49 | ### GNOME 50 | 51 | GNOME [ɡˈnoʊm] 两种发音 格弄姆,现在处于主流,以下发行版默认: 52 | 53 | - gui 54 | - rhel 55 | - centos 56 | - ubuntu 57 | 58 | GNOME 使用 C 语言编写,使用的库是 gtk。 59 | 60 | #### gtk 61 | 62 | - gtk+是 gnu 计划的一部分,使用 gpl 协议 63 | - 什么是gpl协议呢? 64 | - GNU 公共许可 65 | - 是一种开源协议 66 | - 如果你的软件中包含gpl的内容 67 | - 也必须开源 68 | - 那什么是gnu呢? 69 | 70 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20211216-1639648222770) 71 | 72 | ### gnu 73 | - Gnu is Not Unix 74 | - 在at&t把unix商业化之后 75 | - 由stallman发起了free software revolution 自由软件革命 76 | - 后来演化为今天的open source movement 开源运动 77 | - 希望代码有全人类共有 78 | - 对于软件做开源、免费的限定 79 | - 希望把大资本屏蔽在外面 80 | - 这一情况发生在各个领域 81 | - 东方 82 | - v家 83 | - mmd 84 | - 等等 85 | - 软件领域就是gnu 86 | - gtk 的全称是 GIMP Toolkit 87 | - GIMP 是著名开源图像制作软件 88 | - 以下软件使用 gtk: 89 | 90 | - Inkscape 91 | - firefox 92 | - chrome 93 | - gnome 94 | - xfce 95 | 96 | ### Xfce 97 | 98 | - 发音就是四个字母 99 | - "Xfce" 的名字最初是代表的是"XForms Common Environment" 100 | - Xfce 是用 GTK2 toolkit 编写基于 c 语言 101 | - 轻量,占用资源少,速度快,适合老硬件 102 | - 历史悠久,96 年就有 103 | - 可用作 u 盘系统 104 | - linus 本人觉得好用 105 | 106 | #### 升级 107 | 108 | ```shell 109 | sudo apt update 110 | sudo apt upgrade xfce4 111 | ``` 112 | 113 | ### 总结 🤨 114 | 115 | **查看当前 gui:** 116 | 117 | ```shell 118 | echo $DESKTOP_SESSION 119 | ``` 120 | 121 | - 这次了解了各种 gui(估衣)🥋 122 | - 各种图形界面五光十色 123 | - 五色令人目盲 👁 124 | - 命令行才是根本!!! 125 | - 下次再说!👋 126 | -------------------------------------------------------------------------------- /md/041-45566-总结.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 本章回顾 8 | 9 | ## 我们来回顾一下 😌 10 | 11 | - 这一部分我们都讲了什么? 12 | - 各种 gui 13 | - qt 和 gtk 两个开源工具跨平台开发库 14 | - 发行版和 gui 之间的关系 15 | - 平铺桌面i3wm,bspwm更高效 16 | 17 | - 我们一起来回顾一下整个学习过程 18 | - 我们从零开始 19 | - 了解了一些关于 linux 基本的东西 20 | - 一起来回顾一下~ 21 | 22 | ## 终端 23 | 24 | - linux 系统的基本逻辑 25 | - 什么是内核 26 | - uname 27 | - 什么是发行版 28 | - distro 29 | - 我在哪 30 | - pwd 31 | 32 | - 灵魂三问 33 | - 这儿都有啥 34 | - ls 35 | - 灵魂之问 36 | - whatis 37 | - 那啥在哪 38 | - whereis 39 | - 到底哪个 40 | - which 41 | - 详查手册 42 | - man 43 | - 清屏 44 | - clear 45 | 46 | ### 终端命令 47 | 48 | - 命令基本 49 | - 持续输出 50 | - yes 51 | - 软件包管理 52 | - apt 53 | - 标志 54 | - linuxlogo 55 | - 字符画 56 | - figlet 57 | - 风格文字 58 | - toilet 59 | 60 | - 动态效果 61 | - 蒸汽机车 62 | - sl 63 | - 黑客帝国 64 | - cmatrix 65 | - 满屏乱码 66 | - bb 67 | - 装酷屏幕 68 | - hollywood 69 | 70 | ### 深入理解终端 71 | 72 | - 深入软件 73 | - 应用管理 74 | - aptitude 75 | - 牛说 76 | - cowsay 77 | - 管道 78 | - pipe(很重要) 79 | - 字符图 80 | - asciiview 81 | - 随机笑话 82 | - fortune 83 | - 中文诗词 84 | - fortune-zh 85 | 86 | ## 桌面命令 87 | 88 | - 桌面宠物 89 | - pet 90 | - 火狐 91 | - firefox 92 | - 文件管理器 93 | - nautilus 94 | - 用户界面 95 | - xfce 96 | 97 | ### 总结 🤨 98 | 99 | - 我们熟悉了基本软件包的使用 100 | - 本地的dpkg 101 | - 远程的apt 102 | - 安装、卸载、搜索、查看 103 | - 了解了 gui 和 cli 的关系 104 | 105 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220913-1663059624264/wm) 106 | 107 | - 体会到命令行才是根本!!! 108 | - 后面讲什么呢?🤔 109 | - 下一个系列再说!👋 110 | -------------------------------------------------------------------------------- /md/041-566031-路径_dirs_堆栈.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 路径堆栈 8 | 9 | ## 回忆 10 | 11 | - 上次我们研究了cd 12 | - 也就是chdir 13 | - 可以改变当前路径(pwd) 14 | - cd 是一个内建的命令 15 | - 可以在linux内核(kernel)找到相关的实现 16 | - 我想跳转到上次的文件夹可以么? 17 | 18 | ### 用户文件夹~ 19 | 20 | - ~就是当前用户的用户文件夹 21 | - 当前用户是shiyanlou 22 | - 用户文件夹是 23 | - /home/shiyanlou 24 | 25 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663150708359) 26 | 27 | - cd ~ 28 | - 可以进入用户文件夹 29 | - ls ~ 30 | - 可以查看~下的文件和文件夹 31 | 32 | ### 上一个文件夹 - 33 | 34 | - - 就是上一个路径 35 | - 就是cd之前的路径 36 | 37 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663150830017) 38 | 39 | - 这样很容易来回跳转 40 | - 但是很久之前的路径找不到了怎么办? 41 | 42 | ### dirs 43 | 44 | - 我们可以试一下这个路径堆栈 45 | - dirs可以查询目前路径堆栈中所有的路径 46 | 47 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663151624187) 48 | 49 | - 可以支持绝对路径么? 50 | 51 | ### 绝对路径 52 | 53 | - 尝试 54 | 55 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663151694787) 56 | 57 | - 绝对路径也是支持的 58 | - 通过这个路径堆栈如何调转呢? 59 | 60 | ### 跳转 61 | 62 | - 可以用编号来跳转 63 | 64 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663151764021) 65 | 66 | - 那如何调整路径堆栈呢? 67 | 68 | ### popd弹栈 69 | 70 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663151864064) 71 | 72 | - 可以把前面的路径删除掉 73 | - 如果我想只删除某个路径呢? 74 | 75 | ### 指定路径删除 76 | 77 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663152037191) 78 | 79 | - 可以删除指定路径 80 | - 1号路径autumn 81 | 82 | ### 总结 83 | - 我们这次研究了路径堆栈 84 | - dirs 85 | - pushd 86 | - popd 87 | - 可以控制一个路径堆栈 88 | - 这样跳转的时候就可以快速进行跳转 89 | - 不用来回来打路径了 90 | - 可以文件夹和文件可以复制么?🤔 91 | - 下次再说👋 92 | -------------------------------------------------------------------------------- /md/043-802603-查找文件_find_输出文件的绝对路径_realpath.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 目录跳转 8 | 9 | ## 回忆 10 | 11 | - 上次我们研究了cd 12 | - 也就是chdir 13 | - 可以改变当前路径(pwd) 14 | - cd 是一个内建的命令 15 | - 可以在linux内核(kernel)找到相关的实现 16 | 17 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221231-1672492674731) 18 | 19 | - 相对路径有点抽象 20 | - 可以将相对路径 21 | - 转化为绝对路径吗?🤔 22 | 23 | ### realpath 24 | 25 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221231-1672493094504) 26 | 27 | - 确实可以得到文件的绝对路径 28 | - 可以将绝对路径和文件名合并吗? 29 | 30 | ### ls -ld /path/a.txt 31 | 32 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221231-1672493982252) 33 | 34 | - 好像这个 -d 参数可以 35 | 36 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221231-1672493918587) 37 | 38 | - 如果只要路径和文件名 39 | 40 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221231-1672494039032) 41 | 42 | - 不过有的时候我不知道passwd的位置怎么办呢? 43 | 44 | ### find 命令 45 | 46 | - find / -name "passwd" 47 | - 在根下(/) 48 | - 查找名为passwd的文件 49 | 50 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221231-1672494174477) 51 | 52 | - 权限不够 53 | 54 | ### sudo提权 55 | 56 | - 权限依然不够 57 | 58 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221231-1672494222538) 59 | 60 | - 我不想看到这些error信息 61 | 62 | ### 跳过error 63 | 64 | - 只输出标准输出流(1) 65 | - 将错误输出(2) 重定向到 黑洞 (/dev/null) 66 | 67 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221231-1672494279234) 68 | 69 | - 有的时候不清楚文件名 70 | - 可以用模糊查询吗? 71 | 72 | ### 模糊查询 73 | 74 | - 先建环境 75 | 76 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221231-1672494493827) 77 | 78 | - 通配符 2 种 79 | - * 80 | - 0到任意多个任意字符 81 | - ? 82 | - 1个任意字符 83 | ### 总结🤔 84 | - 这次研究了 85 | - realpath 86 | - 可以将相对路径输出为绝对路径 87 | - find 88 | - 可以根据文件名来查询文件 89 | - 通配符有两个 90 | - * 91 | - ? 92 | - 路径好多好复杂 93 | - 可以把曾经进入过的路径记录下来吗? 94 | 95 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221231-1672495036313) 96 | 97 | - 下次再说👋 98 | -------------------------------------------------------------------------------- /md/044-565280-查看文件信息_stat.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 文件存储信息(stat) 8 | 9 | ## 回忆 10 | 11 | - 上次我们研究了ln 12 | - ln指的是链接(link) 13 | - 可以建立硬链接、软链接 14 | - 硬链接 15 | - 直接指向原来文件所在的硬盘位置 16 | - 指向索引节点(inode) 17 | - 索引节点被引用数量+1 18 | - 如果源文件被删除 19 | - 硬链接仍然指向索引节点(inode) 20 | - 软链接 21 | - 指向原来的文件而不是索引节点 22 | - 所以如果源文件被删除 23 | - 软链接指向目标消失 24 | - 也就失效了 25 | - 这个索引节点究竟长什么样子?🤔 26 | - 背后又是什么原理? 27 | 28 | ### 构建环境 29 | 30 | - 先建立 31 | - 源 32 | - 软链接 33 | - 硬链接 34 | 35 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663140688595) 36 | 37 | - 用stat 观察文件 38 | 39 | 40 | ### stat 41 | 42 | - 这三个文件都不大 43 | - 可以看到source和hardlink对应同一个索引节点(inode) 44 | - symboliclink 引用到一个新的索引节点 45 | 46 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663140865162) 47 | 48 | - 索引节点上面引用数为2 49 | - 如果我们删除掉hardlink 50 | - 引用数会有变化么? 51 | 52 | ### 删除硬链接 53 | 54 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663141064312) 55 | 56 | - 删除之后引用数确实少了1 57 | - 如果再把source删掉 58 | - 应用数为0 59 | - 就可以被删掉用作别的用途了 60 | - 那究竟什么是inode呢 61 | 62 | ### inode 63 | 64 | - inode存储着文件的元数据 65 | - 元数据中包括 66 | - 大小 67 | - 硬链接数 68 | - 权限 69 | - 最近访问 70 | - 最近更改 71 | - 最近打开时间 72 | - blocks等 73 | 74 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663142659581) 75 | 76 | - blocks是硬盘上具体存储文件内容的块 77 | - 落实到物理硬盘的扇区上 78 | 79 | - 我们看看python的那个软链接 80 | 81 | ### 观察 82 | 83 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663141219752) 84 | 85 | - 这个python是一个符号链接 86 | - 链接到python2.7 87 | - python2.7文件不小 88 | - 有6816块 89 | - 我想把python链接到python3可以么? 90 | - 首先看看什么是python3 91 | 92 | ### 观察 93 | 94 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663141362350) 95 | 96 | - python3也是一个软链接 97 | - 指向python3.5 98 | - python3.5文件不小 99 | - 8712块 100 | - 比python2.7的6816块大 101 | - 我可以让python软链接指向python3.5么? 102 | 103 | ### 查文档 104 | 105 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663141669383) 106 | 107 | - -f 强制替换 108 | - 去试试 109 | 110 | ### 更新软链接 111 | 112 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663142089537) 113 | 114 | - 这样我们就把这个软链接更新了 115 | 116 | ### 总结 117 | 118 | - 我们这次研究了文件存储信息 119 | - stat 120 | - stat可以显示文件的元数据,包括 121 | - 大小 122 | - 硬链接数 123 | - 权限 124 | - 最近访问 125 | - 最近更改 126 | - 最近打开时间 127 | - blocks等 128 | - 如果一个索引节点(inode)被引用数为0 129 | - 那么这个索引节点就可以被回收了 130 | - 这个就是硬链接的基础 131 | - 除了硬链接之外我们还有什么办法定义命令吗?🤔 132 | - 下次再说👋 133 | -------------------------------------------------------------------------------- /md/044-566031-路径_dirs_堆栈.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 路径堆栈 8 | 9 | ## 回忆 10 | 11 | - 上次研究了 12 | - realpath 13 | - 可以将相对路径输出为绝对路径 14 | - find 15 | - 可以根据文件名来查询文件 16 | - 通配符有两个 17 | - * 18 | - ? 19 | - 路径好多好复杂 20 | - 可以把曾经进入过的路径记录下来吗? 21 | 22 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221231-1672495036313) 23 | 24 | ### 用户文件夹~ 25 | 26 | - ~就是当前用户的用户文件夹 27 | - 当前用户是shiyanlou 28 | - 用户文件夹是 29 | - /home/shiyanlou 30 | 31 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663150708359) 32 | 33 | - cd ~ 34 | - 可以进入用户文件夹 35 | - ls ~ 36 | - 可以查看~下的文件和文件夹 37 | 38 | ### 上一个文件夹 - 39 | 40 | - - 就是上一个路径 41 | - 就是cd之前的路径 42 | 43 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663150830017) 44 | 45 | - 这样很容易来回跳转 46 | - 但是很久之前的路径找不到了怎么办? 47 | 48 | ### dirs 49 | 50 | - 我们可以试一下这个路径堆栈 51 | - dirs可以查询目前路径堆栈中所有的路径 52 | 53 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663151624187) 54 | 55 | - 可以支持绝对路径么? 56 | 57 | ### 绝对路径 58 | 59 | - 尝试 60 | 61 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663151694787) 62 | 63 | - 绝对路径也是支持的 64 | - 通过这个路径堆栈如何调转呢? 65 | 66 | ### 跳转 67 | 68 | - 可以用编号来跳转 69 | 70 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663151764021) 71 | 72 | - 那如何调整路径堆栈呢? 73 | 74 | ### popd弹栈 75 | 76 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663151864064) 77 | 78 | - 可以把前面的路径删除掉 79 | - 如果我想只删除某个路径呢? 80 | 81 | ### 指定路径删除 82 | 83 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663152037191) 84 | 85 | - 可以删除指定路径 86 | - 1号路径autumn 87 | 88 | ### 总结 89 | - 我们这次研究了路径堆栈 90 | - dirs 91 | - pushd 92 | - popd 93 | - 可以控制一个路径堆栈 94 | - 这样跳转的时候就可以快速进行跳转 95 | - 不用来回来打路径了 96 | - 可以文件夹和文件可以复制么?🤔 97 | - 下次再说👋 98 | -------------------------------------------------------------------------------- /md/044-802603-查找文件_find_输出文件的绝对路径_realpath.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 目录跳转 8 | 9 | ## 回忆 10 | 11 | - 上次我们研究了cd 12 | - 也就是chdir 13 | - 可以改变当前路径(pwd) 14 | - cd 是一个内建的命令 15 | - 可以在linux内核(kernel)找到相关的实现 16 | 17 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221231-1672492674731) 18 | 19 | - 相对路径有点抽象 20 | - 可以将相对路径 21 | - 转化为绝对路径吗?🤔 22 | 23 | ### realpath 24 | 25 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221231-1672493094504) 26 | 27 | - 确实可以得到文件的绝对路径 28 | - 可以将绝对路径和文件名合并吗? 29 | 30 | ### ls -ld /path/a.txt 31 | 32 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221231-1672493982252) 33 | 34 | - 好像这个 -d 参数可以 35 | 36 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221231-1672493918587) 37 | 38 | - 如果只要路径和文件名 39 | 40 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221231-1672494039032) 41 | 42 | - 不过有的时候我不知道passwd的位置怎么办呢? 43 | 44 | ### find 命令 45 | 46 | - find / -name "passwd" 47 | - 在根下(/) 48 | - 查找名为passwd的文件 49 | 50 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221231-1672494174477) 51 | 52 | - 权限不够 53 | 54 | ### sudo提权 55 | 56 | - 权限依然不够 57 | 58 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221231-1672494222538) 59 | 60 | - 我不想看到这些error信息 61 | 62 | ### 跳过error 63 | 64 | - 只输出标准输出流(1) 65 | - 将错误输出(2) 重定向到 黑洞 (/dev/null) 66 | 67 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221231-1672494279234) 68 | 69 | - 有的时候不清楚文件名 70 | - 可以用模糊查询吗? 71 | 72 | ### 模糊查询 73 | 74 | - 先建环境 75 | 76 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221231-1672494493827) 77 | 78 | - 通配符 2 种 79 | - * 80 | - 0到任意多个任意字符 81 | - ? 82 | - 1个任意字符 83 | ### 总结🤔 84 | - 这次研究了 85 | - realpath 86 | - 可以将相对路径输出为绝对路径 87 | - find 88 | - 可以根据文件名来查询文件 89 | - 通配符有两个 90 | - * 91 | - ? 92 | - 路径好多好复杂 93 | - 可以把曾经进入过的路径记录下来吗? 94 | 95 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221231-1672495036313) 96 | 97 | - 下次再说👋 98 | -------------------------------------------------------------------------------- /md/045-565281-别名_alias.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 别名(alias) 8 | 9 | ## 回忆 10 | 11 | - 上次研究了文件存储信息 12 | - stat 13 | - stat可以显示文件的元数据,包括 14 | - 大小 15 | - 硬链接数 16 | - 权限 17 | - 最近访问 18 | - 最近更改 19 | - 最近打开时间 20 | - blocks等 21 | - 如果一个索引节点(inode)被引用数为0 22 | - 那么这个索引节点就可以被回收了 23 | - 这个就是硬链接的基础 24 | - 除了硬链接之外我们还有什么办法定义命令吗? 25 | 26 | ### alias 27 | 28 | - 我们看一些常用的命令 29 | 30 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663145251437) 31 | 32 | - 其实都是一些alias 33 | - 那么什么是alias呢? 34 | 35 | ### alias别名 36 | 37 | - alias 38 | - 发音 [ˈeɪliəs] 39 | - 意思是别名 40 | - 就是起绰号、外号 41 | 42 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663145388634) 43 | 44 | - 起个外号有什么用么? 45 | 46 | ### 自动加上参数 47 | 48 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663145486305) 49 | 50 | ### 简化命令 51 | 52 | ``` 53 | alias 54 | ``` 55 | 56 | - alias可以看到所有的别名 57 | 58 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663152231316) 59 | 60 | - 确实可以少打很多字 61 | - 每次都要先打alias 62 | - 然后才能用别名 63 | - 有点麻烦 64 | - 可以直接定义好吗? 65 | 66 | ### 定义 67 | 68 | - vi ~/.zshrc 69 | - 编辑这个zshell 的 run command 70 | - 系统每次初始化zsh都要运行这个文件 71 | - 把这句话加到最后一行 72 | 73 | ``` 74 | alias ls='echo "Dir Size|Perms|Link Count|Owner|Group|Size|Mod.Time|Name"; ls -Fhls --color --group-directories-first' 75 | ``` 76 | 77 | - :wq 保存并退出 78 | - 重启zsh 79 | 80 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663248785584) 81 | 82 | - ls命令有了标题行 83 | 84 | ### 别名和链接 85 | 86 | - alias和ln有什么不一样呢? 87 | - alias 88 | - 建立一个别名 89 | - 在~/.zshrc里面完成初始化 90 | - 直接就能用起来 91 | - alias改了就变化 92 | - ln 93 | - 建立一个链接 94 | - 有具体的文件 95 | - 即使是符号链接也有文件 96 | - 想要修改就要重新建立链接 97 | 98 | 99 | ### 总结 100 | 101 | - 这次我们研究了alias别名 102 | - 可以给命令起一些别名 103 | - 这些别名可以 104 | - 简化命令文本 105 | - 还可以为命令添加默认参数 106 | - 回到我们上次研究的那个一年四季 107 | - 可以删除文件和文件夹么?🤔 108 | - 下次再说👋 109 | -------------------------------------------------------------------------------- /md/045-566031-路径_dirs_堆栈.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 路径堆栈 8 | 9 | ## 回忆 10 | 11 | - 上次研究了 12 | - realpath 13 | - 可以将相对路径输出为绝对路径 14 | - find 15 | - 可以根据文件名来查询文件 16 | - 通配符有两个 17 | - * 18 | - ? 19 | - 路径好多好复杂 20 | - 可以把曾经进入过的路径记录下来吗? 21 | 22 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221231-1672495036313) 23 | 24 | ### 用户文件夹~ 25 | 26 | - ~就是当前用户的用户文件夹 27 | - 当前用户是shiyanlou 28 | - 用户文件夹是 29 | - /home/shiyanlou 30 | 31 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663150708359) 32 | 33 | - cd ~ 34 | - 可以进入用户文件夹 35 | - ls ~ 36 | - 可以查看~下的文件和文件夹 37 | 38 | ### 上一个文件夹 - 39 | 40 | - - 就是上一个路径 41 | - 就是cd之前的路径 42 | 43 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663150830017) 44 | 45 | - 这样很容易来回跳转 46 | - 但是很久之前的路径找不到了怎么办? 47 | 48 | ### dirs 49 | 50 | - 我们可以试一下这个路径堆栈 51 | - dirs可以查询目前路径堆栈中所有的路径 52 | 53 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663151624187) 54 | 55 | - 可以支持绝对路径么? 56 | 57 | ### 绝对路径 58 | 59 | - 尝试 60 | 61 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663151694787) 62 | 63 | - 绝对路径也是支持的 64 | - 通过这个路径堆栈如何调转呢? 65 | 66 | ### 跳转 67 | 68 | - 可以用编号来跳转 69 | 70 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663151764021) 71 | 72 | - 那如何调整路径堆栈呢? 73 | 74 | ### popd弹栈 75 | 76 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663151864064) 77 | 78 | - 可以把前面的路径删除掉 79 | - 如果我想只删除某个路径呢? 80 | 81 | ### 指定路径删除 82 | 83 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663152037191) 84 | 85 | - 可以删除指定路径 86 | - 1号路径autumn 87 | 88 | ### 总结 89 | - 我们这次研究了路径堆栈 90 | - dirs 91 | - pushd 92 | - popd 93 | - 可以控制一个路径堆栈 94 | - 这样跳转的时候就可以快速进行跳转 95 | - 不用来回来打路径了 96 | - 可以文件夹和文件可以复制么?🤔 97 | - 下次再说👋 98 | -------------------------------------------------------------------------------- /md/047-732316-拷贝粘贴文件内容_pbcopy_pbpaste.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 拷贝粘贴文件内容_pbcopy_pbpaste 8 | 9 | ## 回忆 10 | 11 | - 上次我们研究了ln 12 | - ln指的是链接(link) 13 | - 可以建立硬链接、软链接 14 | - 硬链接 15 | - 直接指向原来文件所在的硬盘位置 16 | - 指向索引节点(inode) 17 | - 索引节点被引用数量+1 18 | - 如果源文件被删除 19 | - 硬链接仍然指向索引节点(inode) 20 | - 软链接 21 | - 指向原来的文件而不是索引节点 22 | - 所以如果源文件被删除 23 | - 软链接指向目标消失 24 | - 也就失效了 25 | - cp -l 拷贝的是一个硬链接 26 | - 如果我只想拷贝文件中的内容 27 | - 而不关心文件的各种信息 28 | - 有什么好方法吗? 29 | 30 | ### 准备环境 31 | 32 | - 首先制作一个oeasy.txt 33 | 34 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668822114721) 35 | 36 | - 有什么方法 37 | - 可以把这个文件的内容 38 | - 复制到剪贴板吗? 39 | 40 | ### 安装xclip 41 | 42 | - 首先是安装xclip 43 | 44 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668864441724) 45 | 46 | - 安装之后尝试使用 47 | 48 | ### 使用xclip 49 | 50 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668864585050) 51 | 52 | - 可是这样就真的输出到哪里了呢? 53 | - man xclip 54 | 55 | ### xclip文档 56 | 57 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668864658983) 58 | 59 | - 确实xclip将cat oeasy.txt的结果 60 | - 复制进入进入了xclip内部 61 | - 然后需要用-o 进行输出 62 | 63 | ### xclip 输出 64 | 65 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668864771921) 66 | 67 | - 确实可以进行输出 68 | 69 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668864786616) 70 | 71 | - 甚至可以进行输出重定向 72 | - 但是进入系统剪贴板了么? 73 | 74 | ### 尝试输出 75 | 76 | - 鼠标右键 77 | 78 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668864832712) 79 | 80 | - 这个内容没有进入系统剪贴板 81 | - 如何进入呢? 82 | 83 | ### 搜索帮助 84 | 85 | - 在帮助文件中搜索clipboard 86 | 87 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668864985558) 88 | 89 | - 找到方法 90 | 91 | ### 剪贴板 92 | 93 | - cat oeasy.txt | xclip -selection clipboard 94 | 95 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668865097383) 96 | 97 | - 就可以用了 98 | 99 | ### 总结 100 | - 这次研究了xclip 101 | - xclip 可以将文件内容输出到剪贴板 102 | - cat oeasy.txt | xclip -selection clipboard 103 | - 然后再粘贴到合适的地方 104 | - 纯键盘操作还是很方便的 105 | - 文件内容就这样被提取到了内存 106 | 107 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668865319023) 108 | 109 | - 文件内容之外 110 | - 文件还包括什么呢? 111 | - 文件本质是一个索引节点 112 | - 这个索引节点究竟长什么样子?🤔 113 | - 背后又是什么原理?🤔 114 | - 下次再说👋 115 | -------------------------------------------------------------------------------- /md/048-565280-查看文件信息_stat.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 文件存储信息(stat) 8 | 9 | ## 回忆 10 | 11 | - 上次研究了xclip 12 | - xclip 可以将文件内容输出到剪贴板 13 | - cat oeasy.txt | xclip -selection clipboard 14 | - 然后再粘贴到合适的地方 15 | - 纯键盘操作还是很方便的 16 | - 文件内容就这样被提取到了内存 17 | 18 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668865319023) 19 | 20 | - 文件内容之外 21 | - 文件还包括什么呢? 22 | - 文件本质是一个索引节点 23 | - 这个索引节点究竟长什么样子?🤔 24 | - 背后又是什么原理?🤔 25 | 26 | ### 构建环境 27 | 28 | - 先建立 29 | - 源 30 | - 软链接 31 | - 硬链接 32 | 33 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663140688595) 34 | 35 | - 用stat 观察文件 36 | 37 | 38 | ### stat 39 | 40 | - 这三个文件都不大 41 | - 可以看到source和hardlink对应同一个索引节点(inode) 42 | - symboliclink 引用到一个新的索引节点 43 | 44 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663140865162) 45 | 46 | - 索引节点上面引用数为2 47 | - 如果我们删除掉hardlink 48 | - 引用数会有变化么? 49 | 50 | ### 删除硬链接 51 | 52 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663141064312) 53 | 54 | - 删除之后引用数确实少了1 55 | - 如果再把source删掉 56 | - 应用数为0 57 | - 就可以被删掉用作别的用途了 58 | - 那究竟什么是inode呢 59 | 60 | ### inode 61 | 62 | - inode存储着文件的元数据 63 | - 元数据中包括 64 | - 大小 65 | - 硬链接数 66 | - 权限 67 | - 最近访问 68 | - 最近更改 69 | - 最近打开时间 70 | - blocks等 71 | 72 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663142659581) 73 | 74 | - blocks是硬盘上具体存储文件内容的块 75 | - 落实到物理硬盘的扇区上 76 | 77 | - 我们看看python的那个软链接 78 | 79 | ### 观察 80 | 81 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663141219752) 82 | 83 | - 这个python是一个符号链接 84 | - 链接到python2.7 85 | - python2.7文件不小 86 | - 有6816块 87 | - 我想把python链接到python3可以么? 88 | - 首先看看什么是python3 89 | 90 | ### 观察 91 | 92 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663141362350) 93 | 94 | - python3也是一个软链接 95 | - 指向python3.5 96 | - python3.5文件不小 97 | - 8712块 98 | - 比python2.7的6816块大 99 | - 我可以让python软链接指向python3.5么? 100 | 101 | ### 查文档 102 | 103 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663141669383) 104 | 105 | - -f 强制替换 106 | - 去试试 107 | 108 | ### 更新软链接 109 | 110 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663142089537) 111 | 112 | - 这样我们就把这个软链接更新了 113 | 114 | ### 总结 115 | 116 | - 我们这次研究了文件存储信息 117 | - stat 118 | - stat可以显示文件的元数据,包括 119 | - 大小 120 | - 硬链接数 121 | - 权限 122 | - 最近访问 123 | - 最近更改 124 | - 最近打开时间 125 | - blocks等 126 | - 如果一个索引节点(inode)被引用数为0 127 | - 那么这个索引节点就可以被回收了 128 | - 这个就是硬链接的基础 129 | - 除了硬链接之外我们还有什么办法定义命令吗?🤔 130 | - 下次再说👋 131 | -------------------------------------------------------------------------------- /md/048-732316-拷贝粘贴文件内容_pbcopy_pbpaste.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 拷贝粘贴文件内容_pbcopy_pbpaste 8 | 9 | ## 回忆 10 | 11 | - 上次我们研究了ln 12 | - ln指的是链接(link) 13 | - 可以建立硬链接、软链接 14 | - 硬链接 15 | - 直接指向原来文件所在的硬盘位置 16 | - 指向索引节点(inode) 17 | - 索引节点被引用数量+1 18 | - 如果源文件被删除 19 | - 硬链接仍然指向索引节点(inode) 20 | - 软链接 21 | - 指向原来的文件而不是索引节点 22 | - 所以如果源文件被删除 23 | - 软链接指向目标消失 24 | - 也就失效了 25 | - cp -l 拷贝的是一个硬链接 26 | - 如果我只想拷贝文件中的内容 27 | - 而不关心文件的各种信息 28 | - 有什么好方法吗? 29 | 30 | ### 准备环境 31 | 32 | - 首先制作一个oeasy.txt 33 | 34 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668822114721) 35 | 36 | - 有什么方法 37 | - 可以把这个文件的内容 38 | - 复制到剪贴板吗? 39 | 40 | ### 安装xclip 41 | 42 | - 首先是安装xclip 43 | 44 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668864441724) 45 | 46 | - 安装之后尝试使用 47 | 48 | ### 使用xclip 49 | 50 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668864585050) 51 | 52 | - 可是这样就真的输出到哪里了呢? 53 | - man xclip 54 | 55 | ### xclip文档 56 | 57 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668864658983) 58 | 59 | - 确实xclip将cat oeasy.txt的结果 60 | - 复制进入进入了xclip内部 61 | - 然后需要用-o 进行输出 62 | 63 | ### xclip 输出 64 | 65 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668864771921) 66 | 67 | - 确实可以进行输出 68 | 69 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668864786616) 70 | 71 | - 甚至可以进行输出重定向 72 | - 但是进入系统剪贴板了么? 73 | 74 | ### 尝试输出 75 | 76 | - 鼠标右键 77 | 78 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668864832712) 79 | 80 | - 这个内容没有进入系统剪贴板 81 | - 如何进入呢? 82 | 83 | ### 搜索帮助 84 | 85 | - 在帮助文件中搜索clipboard 86 | 87 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668864985558) 88 | 89 | - 找到方法 90 | 91 | ### 剪贴板 92 | 93 | - cat oeasy.txt | xclip -selection clipboard 94 | 95 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668865097383) 96 | 97 | - 就可以用了 98 | 99 | ### 总结 100 | - 这次研究了xclip 101 | - xclip 可以将文件内容输出到剪贴板 102 | - cat oeasy.txt | xclip -selection clipboard 103 | - 然后再粘贴到合适的地方 104 | - 纯键盘操作还是很方便的 105 | - 文件内容就这样被提取到了内存 106 | 107 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668865319023) 108 | 109 | - 文件内容之外 110 | - 文件还包括什么呢? 111 | - 文件本质是一个索引节点 112 | - 这个索引节点究竟长什么样子?🤔 113 | - 背后又是什么原理?🤔 114 | - 下次再说👋 115 | -------------------------------------------------------------------------------- /md/049-565280-查看文件信息_stat.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 文件存储信息(stat) 8 | 9 | ## 回忆 10 | 11 | - 上次研究了xclip 12 | - xclip 可以将文件内容输出到剪贴板 13 | - cat oeasy.txt | xclip -selection clipboard 14 | - 然后再粘贴到合适的地方 15 | - 纯键盘操作还是很方便的 16 | - 文件内容就这样被提取到了内存 17 | 18 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668865319023) 19 | 20 | - 文件内容之外 21 | - 文件还包括什么呢? 22 | - 文件本质是一个索引节点 23 | - 这个索引节点究竟长什么样子?🤔 24 | - 背后又是什么原理?🤔 25 | 26 | ### 构建环境 27 | 28 | - 先建立 29 | - 源 30 | - 软链接 31 | - 硬链接 32 | 33 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663140688595) 34 | 35 | - 用stat 观察文件 36 | 37 | 38 | ### stat 39 | 40 | - 这三个文件都不大 41 | - 可以看到source和hardlink对应同一个索引节点(inode) 42 | - symboliclink 引用到一个新的索引节点 43 | 44 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663140865162) 45 | 46 | - 索引节点上面引用数为2 47 | - 如果我们删除掉hardlink 48 | - 引用数会有变化么? 49 | 50 | ### 删除硬链接 51 | 52 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663141064312) 53 | 54 | - 删除之后引用数确实少了1 55 | - 如果再把source删掉 56 | - 应用数为0 57 | - 就可以被删掉用作别的用途了 58 | - 那究竟什么是inode呢 59 | 60 | ### inode 61 | 62 | - inode存储着文件的元数据 63 | - 元数据中包括 64 | - 大小 65 | - 硬链接数 66 | - 权限 67 | - 最近访问 68 | - 最近更改 69 | - 最近打开时间 70 | - blocks等 71 | 72 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663142659581) 73 | 74 | - blocks是硬盘上具体存储文件内容的块 75 | - 落实到物理硬盘的扇区上 76 | 77 | - 我们看看python的那个软链接 78 | 79 | ### 观察 80 | 81 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663141219752) 82 | 83 | - 这个python是一个符号链接 84 | - 链接到python2.7 85 | - python2.7文件不小 86 | - 有6816块 87 | - 我想把python链接到python3可以么? 88 | - 首先看看什么是python3 89 | 90 | ### 观察 91 | 92 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663141362350) 93 | 94 | - python3也是一个软链接 95 | - 指向python3.5 96 | - python3.5文件不小 97 | - 8712块 98 | - 比python2.7的6816块大 99 | - 我可以让python软链接指向python3.5么? 100 | 101 | ### 查文档 102 | 103 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663141669383) 104 | 105 | - -f 强制替换 106 | - 去试试 107 | 108 | ### 更新软链接 109 | 110 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663142089537) 111 | 112 | - 这样我们就把这个软链接更新了 113 | 114 | ### 总结 115 | 116 | - 我们这次研究了文件存储信息 117 | - stat 118 | - stat可以显示文件的元数据,包括 119 | - 大小 120 | - 硬链接数 121 | - 权限 122 | - 最近访问 123 | - 最近更改 124 | - 最近打开时间 125 | - blocks等 126 | - 如果一个索引节点(inode)被引用数为0 127 | - 那么这个索引节点就可以被回收了 128 | - 这个就是硬链接的基础 129 | - 除了硬链接之外我们还有什么办法定义命令吗?🤔 130 | - 下次再说👋 131 | -------------------------------------------------------------------------------- /md/049-565281-别名_alias.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 别名(alias) 8 | 9 | ## 回忆 10 | 11 | - 上次研究了文件存储信息 12 | - stat 13 | - stat可以显示文件的元数据,包括 14 | - 大小 15 | - 硬链接数 16 | - 权限 17 | - 最近访问 18 | - 最近更改 19 | - 最近打开时间 20 | - blocks等 21 | - 如果一个索引节点(inode)被引用数为0 22 | - 那么这个索引节点就可以被回收了 23 | - 这个就是硬链接的基础 24 | - 除了硬链接之外我们还有什么办法定义命令吗? 25 | 26 | ### alias 27 | 28 | - 我们看一些常用的命令 29 | 30 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663145251437) 31 | 32 | - 其实都是一些alias 33 | - 那么什么是alias呢? 34 | 35 | ### alias别名 36 | 37 | - alias 38 | - 发音 [ˈeɪliəs] 39 | - 意思是别名 40 | - 就是起绰号、外号 41 | 42 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663145388634) 43 | 44 | - 起个外号有什么用么? 45 | 46 | ### 自动加上参数 47 | 48 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663145486305) 49 | 50 | ### 简化命令 51 | 52 | ``` 53 | alias 54 | ``` 55 | 56 | - alias可以看到所有的别名 57 | 58 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663152231316) 59 | 60 | - 确实可以少打很多字 61 | - 每次都要先打alias 62 | - 然后才能用别名 63 | - 有点麻烦 64 | - 可以直接定义好吗? 65 | 66 | ### 定义 67 | 68 | - vi ~/.zshrc 69 | - 编辑这个zshell 的 run command 70 | - 系统每次初始化zsh都要运行这个文件 71 | - 把这句话加到最后一行 72 | 73 | ``` 74 | alias ls='echo "Dir Size|Perms|Link Count|Owner|Group|Size|Mod.Time|Name"; ls -Fhls --color --group-directories-first' 75 | ``` 76 | 77 | - :wq 保存并退出 78 | - 重启zsh 79 | 80 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663248785584) 81 | 82 | - ls命令就有了标题行 83 | - 还有什么实用的别名吗? 84 | 85 | ### pbcopy 86 | 87 | - pbcopy是mac上面很好用的命令 88 | 89 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668865498364) 90 | 91 | 92 | - 作用是 93 | - 把输出到标准输出流的内容 94 | - 复制到剪贴板 95 | - 很像xclip 96 | 97 | ### 建立别名 98 | 99 | ``` 100 | alias pbcopy='xclip -selection clipboard' 101 | alias pbpaste='xclip -selection clipboard -o' 102 | ``` 103 | 104 | - 验证可用 105 | 106 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668865668885) 107 | 108 | 109 | - alias和ln有什么不一样呢? 110 | 111 | ### 别名和链接 112 | 113 | - alias 114 | - 建立一个别名 115 | - 在~/.zshrc里面完成初始化 116 | - 直接就能用起来 117 | - alias改了就变化 118 | - ln 119 | - 建立一个链接 120 | - 有具体的文件 121 | - 即使是符号链接也有文件 122 | - 想要修改就要重新建立链接 123 | 124 | 125 | 126 | 127 | ### 总结 128 | 129 | - 这次我们研究了alias别名 130 | - 可以给命令起一些别名 131 | - 这些别名可以 132 | - 简化命令文本 133 | - 还可以为命令添加默认参数 134 | - 回到我们上次研究的那个一年四季 135 | - 可以删除文件和文件夹么?🤔 136 | - 下次再说👋 137 | -------------------------------------------------------------------------------- /md/049-566237-日历_cal.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 日期时间(date) 8 | 9 | ## 回忆 10 | 11 | - 上次研究了date日期 12 | - 用各种方式显示日期时间 13 | - 可以用现成的套路 14 | - date -R 15 | - 也可以自定义 16 | - date "+%D-%T %z" 17 | - 每个文件都有三个时间元数据 18 | - access 上次读取时间 19 | - change 上次状态变化时间 20 | - modify 上次写文件时间 21 | - 我们这次都研究时间日期 22 | - 可以有个日历来看看吗? 23 | 24 | ### cal 25 | 26 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663224730133) 27 | 28 | - 这个程序看起来来自于bsd 29 | 30 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663224767113) 31 | 32 | ### 显示年历 33 | 34 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663224845978) 35 | 36 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663224956838) 37 | 38 | ### 显示某年 39 | 40 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663225117273) 41 | 42 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663225127239) 43 | 44 | ### 以某天为核心 45 | 46 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663225199253) 47 | 48 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663225289467) 49 | 50 | ### 前后月份 51 | 52 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663225420268) 53 | 54 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663225474668) 55 | 56 | ### 竖版日历 57 | 58 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663225665477) 59 | 60 | ### 日历历史 61 | 62 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663225703264) 63 | 64 | - cal程序来自于unix 65 | - ncal来自于freebsd 66 | - linux版本每一位都一点不差 67 | - 因为输出结果还需要交给别的程序 68 | - 即使只有7行数据 69 | - 也要输出8行 70 | - 多出的一行从solaris 8开始就成为惯例 71 | - 看到了3个过去的传奇系统 72 | - unix 73 | - bsd 74 | - solaris 75 | 76 | ### 总结 77 | - 这次我们研究了日历 78 | - 这个日历 79 | - 可以显示一个月的 80 | - 也可以显示前后几个月的 81 | - 还可以显示某一年的 82 | - 日历来自于unix 83 | - 不过这里面没有阴历 84 | - 就是初一十五那种东西 85 | - 我们可以在终端里面显示阴历么?🤔 86 | - 下次再说👋 87 | -------------------------------------------------------------------------------- /md/050-565281-别名_alias.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 别名(alias) 8 | 9 | ## 回忆 10 | 11 | - 上次研究了文件存储信息 12 | - stat 13 | - stat可以显示文件的元数据,包括 14 | - 大小 15 | - 硬链接数 16 | - 权限 17 | - 最近访问 18 | - 最近更改 19 | - 最近打开时间 20 | - blocks等 21 | - 如果一个索引节点(inode)被引用数为0 22 | - 那么这个索引节点就可以被回收了 23 | - 这个就是硬链接的基础 24 | - 除了硬链接之外我们还有什么办法定义命令吗? 25 | 26 | ### alias 27 | 28 | - 我们看一些常用的命令 29 | 30 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663145251437) 31 | 32 | - 其实都是一些alias 33 | - 那么什么是alias呢? 34 | 35 | ### alias别名 36 | 37 | - alias 38 | - 发音 [ˈeɪliəs] 39 | - 意思是别名 40 | - 就是起绰号、外号 41 | 42 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663145388634) 43 | 44 | - 起个外号有什么用么? 45 | 46 | ### 自动加上参数 47 | 48 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663145486305) 49 | 50 | ### 简化命令 51 | 52 | ``` 53 | alias 54 | ``` 55 | 56 | - alias可以看到所有的别名 57 | 58 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220914-1663152231316) 59 | 60 | - 确实可以少打很多字 61 | - 每次都要先打alias 62 | - 然后才能用别名 63 | - 有点麻烦 64 | - 可以直接定义好吗? 65 | 66 | ### 定义 67 | 68 | - vi ~/.zshrc 69 | - 编辑这个zshell 的 run command 70 | - 系统每次初始化zsh都要运行这个文件 71 | - 把这句话加到最后一行 72 | 73 | ``` 74 | alias ls='echo "Dir Size|Perms|Link Count|Owner|Group|Size|Mod.Time|Name"; ls -Fhls --color --group-directories-first' 75 | ``` 76 | 77 | - :wq 保存并退出 78 | - 重启zsh 79 | 80 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663248785584) 81 | 82 | - ls命令就有了标题行 83 | - 还有什么实用的别名吗? 84 | 85 | ### pbcopy 86 | 87 | - pbcopy是mac上面很好用的命令 88 | 89 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668865498364) 90 | 91 | 92 | - 作用是 93 | - 把输出到标准输出流的内容 94 | - 复制到剪贴板 95 | - 很像xclip 96 | 97 | ### 建立别名 98 | 99 | ``` 100 | alias pbcopy='xclip -selection clipboard' 101 | alias pbpaste='xclip -selection clipboard -o' 102 | ``` 103 | 104 | - 验证可用 105 | 106 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221119-1668865668885) 107 | 108 | 109 | - alias和ln有什么不一样呢? 110 | 111 | ### 别名和链接 112 | 113 | - alias 114 | - 建立一个别名 115 | - 在~/.zshrc里面完成初始化 116 | - 直接就能用起来 117 | - alias改了就变化 118 | - ln 119 | - 建立一个链接 120 | - 有具体的文件 121 | - 即使是符号链接也有文件 122 | - 想要修改就要重新建立链接 123 | 124 | 125 | 126 | 127 | ### 总结 128 | 129 | - 这次我们研究了alias别名 130 | - 可以给命令起一些别名 131 | - 这些别名可以 132 | - 简化命令文本 133 | - 还可以为命令添加默认参数 134 | - 回到我们上次研究的那个一年四季 135 | - 可以删除文件和文件夹么?🤔 136 | - 下次再说👋 137 | -------------------------------------------------------------------------------- /md/050-566238-阴历_lunar.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 阴历(lunar) 8 | 9 | ## 回忆 10 | 11 | - 上次我们研究了日历 12 | - 这个日历 13 | - 可以显示一个月的 14 | - 也可以显示前后几个月的 15 | - 还可以显示某一年的 16 | - 日历来自于unix 17 | - 不过这里面没有阴历 18 | - 就是初一十五那种东西 19 | - 我们可以在终端里面显示阴历么? 20 | 21 | ### 搜索 22 | 23 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663226911779) 24 | 25 | - 找到两个 26 | - 先装第一个 27 | 28 | ### 29 | 30 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663226949461) 31 | 32 | - 第一个卡在这里不能运行 33 | - 往后走 34 | - lunar 35 | - 月亮的历法 36 | - 阴历 37 | 38 | ``` 39 | sudo apt install lunar 40 | ``` 41 | 42 | ### 灵魂三问 43 | 44 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663227304172) 45 | 46 | - 怎么用呢? 47 | 48 | ### 八字 49 | 50 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663227342066) 51 | 52 | - 得到当前时辰的四柱八字 53 | 54 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663227454352) 55 | 56 | - 每一柱都有天干和地支 57 | - 年月日时总共四柱 58 | - 得到八字 59 | - 可以得到你的生辰八字么? 60 | 61 | ### 转化 62 | 63 | - 需要从阳历日期转化为阴历 64 | - 查文档 65 | 66 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663227684135) 67 | 68 | - 照要求转化 69 | 70 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663227767371) 71 | 72 | - 可以找到自己的阴历生日 73 | - 可以看到由于没有过春节 74 | - 这个日期并不属猴 75 | - 而是数羊 76 | - 也就是午马未羊的羊 77 | - 年份属于己未年 78 | - 时间用的也是东八区 79 | - 赶紧拍照分享一下这熟悉的感觉 80 | 81 | ### 输出大字 82 | 83 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663230672664) 84 | 85 | - 可以通过阴历求阳历么? 86 | 87 | ### 通过阴历求阳历 88 | 89 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663230832549) 90 | 91 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663230768606) 92 | 93 | - 这程序谁写的呢? 94 | 95 | ### 作者 96 | 97 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663230940766) 98 | 99 | - 作者好像曾经在波士顿 100 | - 92年写了一版 101 | - 01年更新了 102 | - 感谢 103 | - Fung F. Lee 104 | - Ricky Yeung 105 | - 2049之后期待有人可以更新这个程序 106 | 107 | ### 总结 108 | - 这次我们研究的是阴历 109 | - 主要是把阳历日期转化为阴历 110 | - 不是阴历日历 111 | - 我们可以把我们的year给补全一下么? 112 | - 每个月里面都有合适的文件名?🤔 113 | - 下次再说👋 114 | -------------------------------------------------------------------------------- /md/053-566237-日历_cal.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 日期时间(date) 8 | 9 | ## 回忆 10 | 11 | - 上次研究了date日期 12 | - 用各种方式显示日期时间 13 | - 可以用现成的套路 14 | - date -R 15 | - 也可以自定义 16 | - date "+%D-%T %z" 17 | - 每个文件都有三个时间元数据 18 | - access 上次读取时间 19 | - change 上次状态变化时间 20 | - modify 上次写文件时间 21 | - 我们这次都研究时间日期 22 | - 可以有个日历来看看吗? 23 | 24 | ### cal 25 | 26 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663224730133/wm) 27 | 28 | - 这个程序看起来来自于bsd 29 | 30 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663224767113/wm) 31 | 32 | ### 显示年历 33 | 34 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663224845978/wm) 35 | 36 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663224956838/wm) 37 | 38 | ### 显示某年 39 | 40 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663225117273/wm) 41 | 42 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663225127239/wm) 43 | 44 | ### 以某天为核心 45 | 46 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663225199253/wm) 47 | 48 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663225289467/wm) 49 | 50 | ### 前后月份 51 | 52 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663225420268/wm) 53 | 54 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663225474668/wm) 55 | 56 | ### 竖版日历 57 | 58 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663225665477/wm) 59 | 60 | ### 日历历史 61 | 62 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663225703264/wm) 63 | 64 | - cal程序来自于unix 65 | - ncal来自于freebsd 66 | - linux版本每一位都一点不差 67 | - 因为输出结果还需要交给别的程序 68 | - 即使只有7行数据 69 | - 也要输出8行 70 | - 多出的一行从solaris 8开始就成为惯例 71 | - 看到了3个过去的传奇系统 72 | - unix 73 | - bsd 74 | - solaris 75 | 76 | ### 总结 77 | - 这次我们研究了日历 78 | - 这个日历 79 | - 可以显示一个月的 80 | - 也可以显示前后几个月的 81 | - 还可以显示某一年的 82 | - 日历来自于unix 83 | - 不过这里面没有阴历 84 | - 就是初一十五那种东西 85 | - 我们可以在终端里面显示阴历么?🤔 86 | - 下次再说👋 87 | -------------------------------------------------------------------------------- /md/053-567189-我是谁_who.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 阴历(lunar) 8 | 9 | ## 回忆 10 | 11 | - 上次我们可以操作文件和文件夹了 12 | - 复制 cp 13 | - 新建 mkdir 14 | - 删除 rm 15 | - 改名移动 mv 16 | - 我们还可以查询文件和文件夹 17 | - 列表 ls 18 | - 递归查询文件夹 tree 19 | - 详细信息 stat 20 | 21 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663246208006) 22 | 23 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663246222331) 24 | 25 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663246234059) 26 | 27 | - 这里值为shiyanlou的uid到底是什么呢? 28 | 29 | ### 我是谁(whoami) 30 | 31 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663247582855) 32 | 33 | - 我是shiyanlou 34 | - shiyanlou是当前系统的userid 35 | - whoami 是一个coreutils的程序 36 | 37 | ### 帮助细节 38 | 39 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663247953852) 40 | 41 | - 这可以说就是没有细节了 42 | - 看看手册去 43 | 44 | ### 更多帮助手册 45 | 46 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663247944584) 47 | 48 | - 看不出什么新东西了 49 | 50 | ### 都有谁(who) 51 | 52 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663247324886) 53 | 54 | - 目前开了两个终端 55 | - 所以有两个用户通过shell在连接着系统 56 | - 还可以看到细节么? 57 | 58 | ### 标题 59 | 60 | - -H 61 | - 标题 62 | 63 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663249148490) 64 | 65 | - -q 66 | - 统计 67 | 68 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663249200544) 69 | 70 | - 能用的参数好像就这么多 71 | - 怎么办? 72 | 73 | ### 新命令w 74 | 75 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663249539324) 76 | 77 | - 这次可以看到更多信息 78 | - 目前在前台运行着什么进程 79 | 80 | ### 总结 🤔 81 | - 这次了解了三个命令 82 | - whoami 83 | - who 84 | - w 85 | - 最短的最好用 86 | - 可以查看都有谁目前登录到系统中 87 | - whoami就是查看我是谁 88 | - 对应哪个userid 89 | - 可以把所有的用户id列出来么? 90 | - 下次再说👋 -------------------------------------------------------------------------------- /md/054-566237-日历_cal.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 日期时间(date) 8 | 9 | ## 回忆 10 | 11 | - 上次研究了date日期 12 | - 用各种方式显示日期时间 13 | - 可以用现成的套路 14 | - date -R 15 | - 也可以自定义 16 | - date "+%D-%T %z" 17 | - 每个文件都有三个时间元数据 18 | - access 上次读取时间 19 | - change 上次状态变化时间 20 | - modify 上次写文件时间 21 | - 我们这次都研究时间日期 22 | - 可以有个日历来看看吗? 23 | 24 | ### cal 25 | 26 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663224730133/wm) 27 | 28 | - 这个程序看起来来自于bsd 29 | 30 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663224767113/wm) 31 | 32 | ### 显示年历 33 | 34 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663224845978/wm) 35 | 36 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663224956838/wm) 37 | 38 | ### 显示某年 39 | 40 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663225117273/wm) 41 | 42 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663225127239/wm) 43 | 44 | ### 以某天为核心 45 | 46 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663225199253/wm) 47 | 48 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663225289467/wm) 49 | 50 | ### 前后月份 51 | 52 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663225420268/wm) 53 | 54 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663225474668/wm) 55 | 56 | ### 竖版日历 57 | 58 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663225665477/wm) 59 | 60 | ### 日历历史 61 | 62 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663225703264/wm) 63 | 64 | - cal程序来自于unix 65 | - ncal来自于freebsd 66 | - linux版本每一位都一点不差 67 | - 因为输出结果还需要交给别的程序 68 | - 即使只有7行数据 69 | - 也要输出8行 70 | - 多出的一行从solaris 8开始就成为惯例 71 | - 看到了3个过去的传奇系统 72 | - unix 73 | - bsd 74 | - solaris 75 | 76 | ### 总结 77 | - 这次我们研究了日历 78 | - 这个日历 79 | - 可以显示一个月的 80 | - 也可以显示前后几个月的 81 | - 还可以显示某一年的 82 | - 日历来自于unix 83 | - 不过这里面没有阴历 84 | - 就是初一十五那种东西 85 | - 我们可以在终端里面显示阴历么?🤔 86 | - 下次再说👋 87 | -------------------------------------------------------------------------------- /md/054-566238-阴历_lunar.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 阴历(lunar) 8 | 9 | ## 回忆 10 | 11 | - 上次我们研究了日历 12 | - 这个日历 13 | - 可以显示一个月的 14 | - 也可以显示前后几个月的 15 | - 还可以显示某一年的 16 | - 日历来自于unix 17 | - 不过这里面没有阴历 18 | - 就是初一十五那种东西 19 | - 我们可以在终端里面显示阴历么? 20 | 21 | ### 搜索 22 | 23 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663226911779) 24 | 25 | - 找到两个 26 | - 先装第一个 27 | 28 | ### 29 | 30 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663226949461) 31 | 32 | - 第一个卡在这里不能运行 33 | - 往后走 34 | - lunar 35 | - 月亮的历法 36 | - 阴历 37 | 38 | ``` 39 | sudo apt install lunar 40 | ``` 41 | 42 | ### 灵魂三问 43 | 44 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663227304172) 45 | 46 | - 怎么用呢? 47 | 48 | ### 八字 49 | 50 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663227342066) 51 | 52 | - 得到当前时辰的四柱八字 53 | 54 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663227454352) 55 | 56 | - 每一柱都有天干和地支 57 | - 年月日时总共四柱 58 | - 得到八字 59 | - 可以得到你的生辰八字么? 60 | 61 | ### 转化 62 | 63 | - 需要从阳历日期转化为阴历 64 | - 查文档 65 | 66 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663227684135) 67 | 68 | - 照要求转化 69 | 70 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663227767371) 71 | 72 | - 可以找到自己的阴历生日 73 | - 可以看到由于没有过春节 74 | - 这个日期并不属猴 75 | - 而是数羊 76 | - 也就是午马未羊的羊 77 | - 年份属于己未年 78 | - 时间用的也是东八区 79 | - 赶紧拍照分享一下这熟悉的感觉 80 | 81 | ### 输出大字 82 | 83 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663230672664) 84 | 85 | - 可以通过阴历求阳历么? 86 | 87 | ### 通过阴历求阳历 88 | 89 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663230832549) 90 | 91 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663230768606) 92 | 93 | - 这程序谁写的呢? 94 | 95 | ### 作者 96 | 97 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663230940766) 98 | 99 | - 作者好像曾经在波士顿 100 | - 92年写了一版 101 | - 01年更新了 102 | - 感谢 103 | - Fung F. Lee 104 | - Ricky Yeung 105 | - 2049之后期待有人可以更新这个程序 106 | 107 | ### 总结 108 | - 这次我们研究的是阴历 109 | - 主要是把阳历日期转化为阴历 110 | - 不是阴历日历 111 | - 我们可以把我们的year给补全一下么? 112 | - 每个月里面都有合适的文件名?🤔 113 | - 下次再说👋 114 | -------------------------------------------------------------------------------- /md/054-567656-列出用户信息_id.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 阴历(lunar) 8 | 9 | ## 回忆 10 | 11 | - 上次了解了三个命令 12 | - whoami 13 | - who 14 | - w 15 | - 最短的最好用 16 | - 可以查看都有谁目前登录到系统中 17 | - whoami就是查看我是谁 18 | - 对应哪个userid 19 | - 可以把所有的用户id列出来么? 20 | 21 | ### id 22 | 23 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220917-1663418898698) 24 | 25 | - id 命令 26 | - 可以 查看试验楼用户的账号信息 27 | - shiyanlou 28 | - uid - 用户id 29 | - gid - 用户组id 30 | - 5000(shiyanlou) - 这个userid 31 | - 属于三个组(group) 32 | - 5000(shiyanlou) 33 | - 27(sudo) 34 | - 5002(public) 35 | - 如何理解id呢? 36 | 37 | ### 灵魂三问 38 | 39 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220917-1663419957917) 40 | 41 | - id是输出用户和组的id的命令 42 | - 我们来查看一下id的帮助手册 43 | 44 | ### 细节 45 | 46 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220917-1663419015481) 47 | 48 | | 参数 | 信息 | 49 | | ---- | ---- | 50 | | -g或--group | 显示用户所属群组的ID | 51 | | -G或--groups|  显示用户所属附加群组的ID | 52 | | -n或--name  | 显示用户,所属群组或附加群组的名称 | 53 | | -r或--real  | 显示实际ID | 54 | | -u或--user  | 显示用户ID | 55 | | -help  |显示帮助 | 56 | | -version  |显示版本信息 | 57 | 58 | - 如何查看到更多用户呢? 59 | 60 | ### id 61 | 62 | - id 之后 按下 Tab 63 | 64 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220917-1663421352171) 65 | 66 | - 可以看到更多的用户id 67 | - 可以查看某个id的详细信息 68 | 69 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220917-1663421420068) 70 | 71 | - 在哪里可以查询用户更详细的信息呢? 72 | 73 | ### /etc/passwd 74 | 75 | ``` 76 | cat /etc/passwd 77 | vi /etc/passwd 78 | ``` 79 | 80 | - 可以看到更多的userid 81 | 82 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220917-1663421467055) 83 | 84 | - 应该如何理解这些用:分割的字段呢? 85 | 86 | ### 区分 87 | 88 | ``` 89 | cat /etc/passwd | grep shiyanlou 90 | ``` 91 | 92 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220917-1663422514779) 93 | 94 | - 这就是更详细的用户信息 95 | 96 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220917-1663423241735) 97 | 98 | - 各种用户很多 99 | - 但是这七列的结构是一致的 100 | 101 | ### 总结 102 | 103 | - 这次我们研究了一个新的命令id 104 | - 可以显示出用户id的一些信息 105 | - 我们目前的用户id就是shiyanlou 106 | 107 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220917-1663418898698) 108 | 109 | - /etc/passwd中有更详细的用户信息 110 | 111 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220917-1663422514779) 112 | 113 | - 这些信息被:分割为7列 114 | - 我可以自己创造一个用户id吗?🤔 115 | - 下次再说👋 -------------------------------------------------------------------------------- /md/055-566238-阴历_lunar.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 阴历(lunar) 8 | 9 | ## 回忆 10 | 11 | - 上次我们研究了日历 12 | - 这个日历 13 | - 可以显示一个月的 14 | - 也可以显示前后几个月的 15 | - 还可以显示某一年的 16 | - 日历来自于unix 17 | - 不过这里面没有阴历 18 | - 就是初一十五那种东西 19 | - 我们可以在终端里面显示阴历么? 20 | 21 | ### 搜索 22 | 23 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663226911779) 24 | 25 | - 找到两个 26 | - 先装第一个 27 | 28 | ### 29 | 30 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663226949461) 31 | 32 | - 第一个卡在这里不能运行 33 | - 往后走 34 | - lunar 35 | - 月亮的历法 36 | - 阴历 37 | 38 | ``` 39 | sudo apt install lunar 40 | ``` 41 | 42 | ### 灵魂三问 43 | 44 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663227304172) 45 | 46 | - 怎么用呢? 47 | 48 | ### 八字 49 | 50 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663227342066) 51 | 52 | - 得到当前时辰的四柱八字 53 | 54 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663227454352) 55 | 56 | - 每一柱都有天干和地支 57 | - 年月日时总共四柱 58 | - 得到八字 59 | - 可以得到你的生辰八字么? 60 | 61 | ### 转化 62 | 63 | - 需要从阳历日期转化为阴历 64 | - 查文档 65 | 66 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663227684135) 67 | 68 | - 照要求转化 69 | 70 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663227767371) 71 | 72 | - 可以找到自己的阴历生日 73 | - 可以看到由于没有过春节 74 | - 这个日期并不属猴 75 | - 而是数羊 76 | - 也就是午马未羊的羊 77 | - 年份属于己未年 78 | - 时间用的也是东八区 79 | - 赶紧拍照分享一下这熟悉的感觉 80 | 81 | ### 输出大字 82 | 83 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663230672664) 84 | 85 | - 可以通过阴历求阳历么? 86 | 87 | ### 通过阴历求阳历 88 | 89 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663230832549) 90 | 91 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663230768606) 92 | 93 | - 这程序谁写的呢? 94 | 95 | ### 作者 96 | 97 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663230940766) 98 | 99 | - 作者好像曾经在波士顿 100 | - 92年写了一版 101 | - 01年更新了 102 | - 感谢 103 | - Fung F. Lee 104 | - Ricky Yeung 105 | - 2049之后期待有人可以更新这个程序 106 | 107 | ### 总结 108 | - 这次我们研究的是阴历 109 | - 主要是把阳历日期转化为阴历 110 | - 不是阴历日历 111 | - 我们可以把我们的year给补全一下么? 112 | - 每个月里面都有合适的文件名?🤔 113 | - 下次再说👋 114 | -------------------------------------------------------------------------------- /md/056-569368-修改密码_passwd.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 阴历(lunar) 8 | 9 | ## 回忆 10 | 11 | - 上次了解到有两个命令可以添加用户 12 | - adduser 13 | - useradd 14 | - useradd 15 | - 很底层 16 | - 可以找到源代码 17 | - adduser 18 | - 更前端一些 19 | - 更交互一些 20 | - 可以直接新建用户 21 | - 可以新建普通用户 22 | - 也可以新建系统用户 23 | - 但是新建的用户不能登录这个可怎么办? 24 | 25 | ### 先回忆过程 26 | 27 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220921-1663750964847) 28 | 29 | - 确实新建了o2z的用户 30 | - 将新用户添加到组nogroup 31 | - 创建了o2z的用户文件夹 32 | - 但是登录失败了 33 | - 怎么办呢? 34 | 35 | ### 搜索 36 | 37 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220921-1663752434638) 38 | 39 | - 修改用户名的命令是passwd 40 | - 这个名字好像有点眼熟 41 | 42 | ### 源文件 43 | 44 | - useradd 不是属于 passwd 这个包的么? 45 | 46 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220921-1663752555555) 47 | 48 | - 好像也可以找到源文件 49 | 50 | ### 源文件 51 | 52 | - 打开源文件 53 | 54 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220921-1663752637208) 55 | 56 | - 也是经历4代 57 | - 1168行代码 58 | - 具体怎么用呢? 59 | 60 | ### 具体用法 61 | 62 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220921-1663752672374) 63 | 64 | - 看起来好像不难 65 | - 可以修改密码 66 | - 还可以修改用户宿主文件夹 67 | - 修改锁定状态之类的 68 | 69 | ### 使用passwd 70 | 71 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220921-1663752764314) 72 | 73 | - 确实可以修改密码 74 | - 但是修改密码后无法登陆 75 | - 这是为什么呢? 76 | 77 | ### 修改登录shell 78 | 79 | ``` 80 | sudo vi /etc/passwd 81 | ``` 82 | 83 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665052783517) 84 | 85 | - 红框位置就是 86 | - oeasy用户的默认脚本zsh 87 | 88 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665052884385) 89 | 90 | - 修改为zsh 91 | 92 | ### 尝试登录 93 | 94 | - su o2z 95 | 96 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665052954605) 97 | 98 | - 找不到~/.zshrc 99 | - 也就是/home/o2z/没有这个.zshrc 100 | 101 | ### 查看文件夹 102 | 103 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665053087402) 104 | 105 | - 要把/home/shiyanlou/.zshrc 106 | - 拷贝到/home/o2z/.zshrc 107 | 108 | ### 复制配置文件 109 | 110 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665053195337) 111 | 112 | - 以后登录就是zsh了 113 | 114 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665053230515) 115 | 116 | ### 总结 117 | - 这次我们了解了命令passwd 118 | - /usr/bin/passwd 119 | - 可以设置用户的密码 120 | - 用户的信息在 121 | - /etc/passwd中 122 | - 这两个虽然名字都是passwd 123 | - 但是用途不同 124 | - 可以设置用户默认的脚本解释器 125 | - 设置之后还应该把配置文件复制到新用户的宿主文件夹 126 | - 我们用的是zsh 127 | - 究竟zsh是什么? 128 | - 和bash有什么区别呢?🤔 129 | - 下次再说👋 -------------------------------------------------------------------------------- /md/057-567189-我是谁_who.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 阴历(lunar) 8 | 9 | ## 回忆 10 | 11 | - 上次我们可以操作文件和文件夹了 12 | - 复制 cp 13 | - 新建 mkdir 14 | - 删除 rm 15 | - 改名移动 mv 16 | - 我们还可以查询文件和文件夹 17 | - 列表 ls 18 | - 递归查询文件夹 tree 19 | - 详细信息 stat 20 | 21 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663246208006) 22 | 23 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663246222331) 24 | 25 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663246234059) 26 | 27 | - 这里值为shiyanlou的uid到底是什么呢? 28 | 29 | ### 我是谁(whoami) 30 | 31 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663247582855) 32 | 33 | - 我是shiyanlou 34 | - shiyanlou是当前系统的userid 35 | - whoami 是一个coreutils的程序 36 | 37 | ### 帮助细节 38 | 39 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663247953852) 40 | 41 | - 这可以说就是没有细节了 42 | - 看看手册去 43 | 44 | ### 更多帮助手册 45 | 46 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663247944584) 47 | 48 | - 看不出什么新东西了 49 | 50 | ### 都有谁(who) 51 | 52 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663247324886) 53 | 54 | - 目前开了两个终端 55 | - 所以有两个用户通过shell在连接着系统 56 | - 还可以看到细节么? 57 | 58 | ### 标题 59 | 60 | - -H 61 | - 标题 62 | 63 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663249148490) 64 | 65 | - -q 66 | - 统计 67 | 68 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663249200544) 69 | 70 | - 能用的参数好像就这么多 71 | - 怎么办? 72 | 73 | ### 新命令w 74 | 75 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663249539324) 76 | 77 | - 这次可以看到更多信息 78 | - 目前在前台运行着什么进程 79 | 80 | ### 总结 🤔 81 | - 这次了解了三个命令 82 | - whoami 83 | - who 84 | - w 85 | - 最短的最好用 86 | - 可以查看都有谁目前登录到系统中 87 | - whoami就是查看我是谁 88 | - 对应哪个userid 89 | - 可以把所有的用户id列出来么? 90 | - 下次再说👋 -------------------------------------------------------------------------------- /md/058-567189-我是谁_who.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 阴历(lunar) 8 | 9 | ## 回忆 10 | 11 | - 上次我们可以操作文件和文件夹了 12 | - 复制 cp 13 | - 新建 mkdir 14 | - 删除 rm 15 | - 改名移动 mv 16 | - 我们还可以查询文件和文件夹 17 | - 列表 ls 18 | - 递归查询文件夹 tree 19 | - 详细信息 stat 20 | 21 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663246208006) 22 | 23 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663246222331) 24 | 25 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663246234059) 26 | 27 | - 这里值为shiyanlou的uid到底是什么呢? 28 | 29 | ### 我是谁(whoami) 30 | 31 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663247582855) 32 | 33 | - 我是shiyanlou 34 | - shiyanlou是当前系统的userid 35 | - whoami 是一个coreutils的程序 36 | 37 | ### 帮助细节 38 | 39 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663247953852) 40 | 41 | - 这可以说就是没有细节了 42 | - 看看手册去 43 | 44 | ### 更多帮助手册 45 | 46 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663247944584) 47 | 48 | - 看不出什么新东西了 49 | 50 | ### 都有谁(who) 51 | 52 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663247324886) 53 | 54 | - 目前开了两个终端 55 | - 所以有两个用户通过shell在连接着系统 56 | - 还可以看到细节么? 57 | 58 | ### 标题 59 | 60 | - -H 61 | - 标题 62 | 63 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663249148490) 64 | 65 | - -q 66 | - 统计 67 | 68 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663249200544) 69 | 70 | - 能用的参数好像就这么多 71 | - 怎么办? 72 | 73 | ### 新命令w 74 | 75 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220915-1663249539324) 76 | 77 | - 这次可以看到更多信息 78 | - 目前在前台运行着什么进程 79 | 80 | ### 总结 🤔 81 | - 这次了解了三个命令 82 | - whoami 83 | - who 84 | - w 85 | - 最短的最好用 86 | - 可以查看都有谁目前登录到系统中 87 | - whoami就是查看我是谁 88 | - 对应哪个userid 89 | - 可以把所有的用户id列出来么? 90 | - 下次再说👋 -------------------------------------------------------------------------------- /md/058-567656-列出用户信息_id.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 阴历(lunar) 8 | 9 | ## 回忆 10 | 11 | - 上次了解了三个命令 12 | - whoami 13 | - who 14 | - w 15 | - 最短的最好用 16 | - 可以查看都有谁目前登录到系统中 17 | - whoami就是查看我是谁 18 | - 对应哪个userid 19 | - 可以把所有的用户id列出来么? 20 | 21 | ### id 22 | 23 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220917-1663418898698) 24 | 25 | - id 命令 26 | - 可以 查看试验楼用户的账号信息 27 | - shiyanlou 28 | - uid - 用户id 29 | - gid - 用户组id 30 | - 5000(shiyanlou) - 这个userid 31 | - 属于三个组(group) 32 | - 5000(shiyanlou) 33 | - 27(sudo) 34 | - 5002(public) 35 | - 如何理解id呢? 36 | 37 | ### 灵魂三问 38 | 39 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220917-1663419957917) 40 | 41 | - id是输出用户和组的id的命令 42 | - 我们来查看一下id的帮助手册 43 | 44 | ### 细节 45 | 46 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220917-1663419015481) 47 | 48 | | 参数 | 信息 | 49 | | ---- | ---- | 50 | | -g或--group | 显示用户所属群组的ID | 51 | | -G或--groups|  显示用户所属附加群组的ID | 52 | | -n或--name  | 显示用户,所属群组或附加群组的名称 | 53 | | -r或--real  | 显示实际ID | 54 | | -u或--user  | 显示用户ID | 55 | | -help  |显示帮助 | 56 | | -version  |显示版本信息 | 57 | 58 | - 如何查看到更多用户呢? 59 | 60 | ### id 61 | 62 | - id 之后 按下 Tab 63 | 64 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220917-1663421352171) 65 | 66 | - 可以看到更多的用户id 67 | - 可以查看某个id的详细信息 68 | 69 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220917-1663421420068) 70 | 71 | - 在哪里可以查询用户更详细的信息呢? 72 | 73 | ### /etc/passwd 74 | 75 | ``` 76 | cat /etc/passwd 77 | vi /etc/passwd 78 | ``` 79 | 80 | - 可以看到更多的userid 81 | 82 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220917-1663421467055) 83 | 84 | - 应该如何理解这些用:分割的字段呢? 85 | 86 | ### 区分 87 | 88 | ``` 89 | cat /etc/passwd | grep shiyanlou 90 | ``` 91 | 92 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220917-1663422514779) 93 | 94 | - 这就是更详细的用户信息 95 | 96 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220917-1663423241735) 97 | 98 | - 各种用户很多 99 | - 但是这七列的结构是一致的 100 | 101 | ### 总结 102 | 103 | - 这次我们研究了一个新的命令id 104 | - 可以显示出用户id的一些信息 105 | - 我们目前的用户id就是shiyanlou 106 | 107 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220917-1663418898698) 108 | 109 | - /etc/passwd中有更详细的用户信息 110 | 111 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220917-1663422514779) 112 | 113 | - 这些信息被:分割为7列 114 | - 我可以自己创造一个用户id吗?🤔 115 | - 下次再说👋 -------------------------------------------------------------------------------- /md/058-569386-个性化颜色方案_Oh-My-Zsh.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # Oh-My-Zsh 8 | 9 | ## 回忆 10 | 11 | - 上次我们研究了zsh 12 | - 从源码开始编译安装 13 | - 真的成功了 14 | 15 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663819822325) 16 | 17 | - 不过现在经常用的是Oh-My-Zsh 18 | - 这个Oh-My-Zsh和zsh是什么关系呢? 19 | 20 | ### 搜索 21 | 22 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663822832491) 23 | 24 | - https://ohmyz.sh/ 25 | 26 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663822839952) 27 | 28 | ### 安装命令 29 | 30 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663822849617) 31 | 32 | - 复制这个命令 33 | - 然后粘贴到shell中进行安装 34 | 35 | ### 安装过程 36 | 37 | - 安装过程中 38 | - 有报错 39 | 40 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663822978270) 41 | 42 | ### 删除原来的 43 | 44 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663822991324) 45 | 46 | - 清空之后 47 | - 就可以重新安装oh-my-zsh 48 | 49 | ### 编辑主题 50 | 51 | ``` 52 | sudo vi ~/.zshrc 53 | ``` 54 | 55 | - 目前Theme是robbyrussel 56 | 57 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663823144456) 58 | 59 | - 效果如下图 60 | 61 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663823168680) 62 | 63 | ### 更多主题 64 | 65 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663823622241) 66 | 67 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663823634165) 68 | 69 | - 好像缺少字体 70 | 71 | ### 字体问题 72 | 73 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663823902123) 74 | 75 | - 需要安装vim-powerline 76 | 77 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663823966516) 78 | 79 | ### 安装字体 80 | 81 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663824046395) 82 | 83 | - 安装字体之后 84 | 85 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663824062295) 86 | 87 | - 文件夹字体前景颜色黑色和背景颜色蓝色太容易混淆了 88 | 89 | ### 找到位置 90 | 91 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663824411245) 92 | 93 | - 打开文件 94 | 95 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663845747196) 96 | 97 | - 找到字体相关位置 98 | 99 | ### 修改 100 | 101 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663845760627) 102 | 103 | - 修改结果 104 | 105 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663845787505) 106 | 107 | ### 总结 108 | - 这次我们研究的是oh-my-zsh 109 | - 是zsh上面的一款皮肤 110 | - 效果还不错 111 | - 可以设置字体和字体颜色 112 | - 这就是终端下的美化了 113 | - 如果是远程登录进来的o2z也会有zsh的效果么?🤔 114 | - 下次再说👋 115 | 116 | -------------------------------------------------------------------------------- /md/059-210191-远程登录_ssh.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # ssh 8 | 9 | ## 回忆 10 | 11 | - 上次我们研究的是oh-my-zsh 12 | - 是zsh上面的一款皮肤 13 | - 效果还不错 14 | - 可以设置字体和字体颜色 15 | - 这就是终端下的美化了 16 | - 如果是远程登录进来的o2z也会有zsh的效果么? 17 | 18 | ### 远程连接 19 | 20 | - 首先查看蓝桥云的ip地址 21 | 22 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663843575329) 23 | 24 | - 确实是可以远程登录上去的 25 | 26 | ### 登录结果 27 | 28 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663844651119) 29 | 30 | - ssh远程登录的终端 31 | - 和本地直接登录的终端效果是一样的 32 | - 权限就是o2z得权限 33 | - 也可以退出当前这个ssh登录 34 | 35 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663844695181) 36 | 37 | - 如果ssh没有安装怎么办呢? 38 | 39 | ### 从零安装 40 | 41 | - 从零开始安装openssh-server 42 | 43 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663847116469) 44 | 45 | - 然后启动ssh服务 46 | - 如果是自己买的云的话 47 | - 检查一下防火墙的22端口是否开启 48 | 49 | ### 修改端口 50 | 51 | ``` 52 | sudo vi /etc/ssh/sshd_config 53 | ``` 54 | 55 | - 尝试修改ssh 56 | 57 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663847261853) 58 | 59 | - 将端口修改为22000 60 | - 保存后退出 61 | 62 | ### 重启并连接 63 | 64 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663847413118) 65 | 66 | - 尝试连接默认的22端口 67 | - 失败了 68 | - 因为现在的端口为22000 69 | 70 | ### 指定端口 71 | 72 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663847502325) 73 | 74 | - 指定这个22000端口作为默认 75 | 76 | ### 查看配置 77 | 78 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663848002021) 79 | 80 | - ssh登陆之后 81 | - 确实使用的是 82 | - /home/o2z 作为宿主文件夹 83 | - /usr/bin/zsh 作为默认shell 84 | - 可以读取文件吗? 85 | 86 | ### 读取文件 87 | 88 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663848158250) 89 | 90 | - 读取文件确实是可以的 91 | - 先去总结一下 92 | 93 | 94 | ### 总结 95 | 96 | - 我们可以使用ssh 97 | - 远程登录这台ubuntu 98 | 99 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663848429952) 100 | 101 | - 首先要安装ssh 102 | - 然后要启动ssh 服务 103 | - 可以设置ssh的登陆端口 104 | - 登陆之后用户可以使用自己的宿主文件夹和shell 105 | - 可以获得用户应有的一切权限 106 | - 既然这个文件可以读写 107 | - 我可以把这个文件从云上拷贝到本地么?🤔 108 | - 下次再说👋 109 | 110 | -------------------------------------------------------------------------------- /md/059-567656-列出用户信息_id.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 阴历(lunar) 8 | 9 | ## 回忆 10 | 11 | - 上次了解了三个命令 12 | - whoami 13 | - who 14 | - w 15 | - 最短的最好用 16 | - 可以查看都有谁目前登录到系统中 17 | - whoami就是查看我是谁 18 | - 对应哪个userid 19 | - 可以把所有的用户id列出来么? 20 | 21 | ### id 22 | 23 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220917-1663418898698) 24 | 25 | - id 命令 26 | - 可以 查看试验楼用户的账号信息 27 | - shiyanlou 28 | - uid - 用户id 29 | - gid - 用户组id 30 | - 5000(shiyanlou) - 这个userid 31 | - 属于三个组(group) 32 | - 5000(shiyanlou) 33 | - 27(sudo) 34 | - 5002(public) 35 | - 如何理解id呢? 36 | 37 | ### 灵魂三问 38 | 39 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220917-1663419957917) 40 | 41 | - id是输出用户和组的id的命令 42 | - 我们来查看一下id的帮助手册 43 | 44 | ### 细节 45 | 46 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220917-1663419015481) 47 | 48 | | 参数 | 信息 | 49 | | ---- | ---- | 50 | | -g或--group | 显示用户所属群组的ID | 51 | | -G或--groups|  显示用户所属附加群组的ID | 52 | | -n或--name  | 显示用户,所属群组或附加群组的名称 | 53 | | -r或--real  | 显示实际ID | 54 | | -u或--user  | 显示用户ID | 55 | | -help  |显示帮助 | 56 | | -version  |显示版本信息 | 57 | 58 | - 如何查看到更多用户呢? 59 | 60 | ### id 61 | 62 | - id 之后 按下 Tab 63 | 64 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220917-1663421352171) 65 | 66 | - 可以看到更多的用户id 67 | - 可以查看某个id的详细信息 68 | 69 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220917-1663421420068) 70 | 71 | - 在哪里可以查询用户更详细的信息呢? 72 | 73 | ### /etc/passwd 74 | 75 | ``` 76 | cat /etc/passwd 77 | vi /etc/passwd 78 | ``` 79 | 80 | - 可以看到更多的userid 81 | 82 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220917-1663421467055) 83 | 84 | - 应该如何理解这些用:分割的字段呢? 85 | 86 | ### 区分 87 | 88 | ``` 89 | cat /etc/passwd | grep shiyanlou 90 | ``` 91 | 92 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220917-1663422514779) 93 | 94 | - 这就是更详细的用户信息 95 | 96 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220917-1663423241735) 97 | 98 | - 各种用户很多 99 | - 但是这七列的结构是一致的 100 | 101 | ### 总结 102 | 103 | - 这次我们研究了一个新的命令id 104 | - 可以显示出用户id的一些信息 105 | - 我们目前的用户id就是shiyanlou 106 | 107 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220917-1663418898698) 108 | 109 | - /etc/passwd中有更详细的用户信息 110 | 111 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220917-1663422514779) 112 | 113 | - 这些信息被:分割为7列 114 | - 我可以自己创造一个用户id吗?🤔 115 | - 下次再说👋 -------------------------------------------------------------------------------- /md/060-569368-修改密码_passwd.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 阴历(lunar) 8 | 9 | ## 回忆 10 | 11 | - 上次了解到有两个命令可以添加用户 12 | - adduser 13 | - useradd 14 | - useradd 15 | - 很底层 16 | - 可以找到源代码 17 | - adduser 18 | - 更前端一些 19 | - 更交互一些 20 | - 可以直接新建用户 21 | - 可以新建普通用户 22 | - 也可以新建系统用户 23 | - 但是新建的用户不能登录这个可怎么办? 24 | 25 | ### 先回忆过程 26 | 27 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220921-1663750964847) 28 | 29 | - 确实新建了o2z的用户 30 | - 将新用户添加到组nogroup 31 | - 创建了o2z的用户文件夹 32 | - 但是登录失败了 33 | - 怎么办呢? 34 | 35 | ### 搜索 36 | 37 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220921-1663752434638) 38 | 39 | - 修改用户名的命令是passwd 40 | - 这个名字好像有点眼熟 41 | 42 | ### 源文件 43 | 44 | - useradd 不是属于 passwd 这个包的么? 45 | 46 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220921-1663752555555) 47 | 48 | - 好像也可以找到源文件 49 | 50 | ### 源文件 51 | 52 | - 打开源文件 53 | 54 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220921-1663752637208) 55 | 56 | - 也是经历4代 57 | - 1168行代码 58 | - 具体怎么用呢? 59 | 60 | ### 具体用法 61 | 62 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220921-1663752672374) 63 | 64 | - 看起来好像不难 65 | - 可以修改密码 66 | - 还可以修改用户宿主文件夹 67 | - 修改锁定状态之类的 68 | 69 | ### 使用passwd 70 | 71 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220921-1663752764314) 72 | 73 | - 确实可以修改密码 74 | - 但是修改密码后无法登陆 75 | - 这是为什么呢? 76 | 77 | ### 修改登录shell 78 | 79 | ``` 80 | sudo vi /etc/passwd 81 | ``` 82 | 83 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665052783517) 84 | 85 | - 红框位置就是 86 | - oeasy用户的默认脚本zsh 87 | 88 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665052884385) 89 | 90 | - 修改为zsh 91 | 92 | ### 尝试登录 93 | 94 | - su o2z 95 | 96 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665052954605) 97 | 98 | - 找不到~/.zshrc 99 | - 也就是/home/o2z/没有这个.zshrc 100 | 101 | ### 查看文件夹 102 | 103 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665053087402) 104 | 105 | - 要把/home/shiyanlou/.zshrc 106 | - 拷贝到/home/o2z/.zshrc 107 | 108 | ### 复制配置文件 109 | 110 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665053195337) 111 | 112 | - 以后登录就是zsh了 113 | 114 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665053230515) 115 | 116 | ### 总结 117 | - 这次我们了解了命令passwd 118 | - /usr/bin/passwd 119 | - 可以设置用户的密码 120 | - 用户的信息在 121 | - /etc/passwd中 122 | - 这两个虽然名字都是passwd 123 | - 但是用途不同 124 | - 可以设置用户默认的脚本解释器 125 | - 设置之后还应该把配置文件复制到新用户的宿主文件夹 126 | - 我们用的是zsh 127 | - 究竟zsh是什么? 128 | - 和bash有什么区别呢?🤔 129 | - 下次再说👋 -------------------------------------------------------------------------------- /md/061-569368-修改密码_passwd.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 阴历(lunar) 8 | 9 | ## 回忆 10 | 11 | - 上次了解到有两个命令可以添加用户 12 | - adduser 13 | - useradd 14 | - useradd 15 | - 很底层 16 | - 可以找到源代码 17 | - adduser 18 | - 更前端一些 19 | - 更交互一些 20 | - 可以直接新建用户 21 | - 可以新建普通用户 22 | - 也可以新建系统用户 23 | - 但是新建的用户不能登录这个可怎么办? 24 | 25 | ### 先回忆过程 26 | 27 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220921-1663750964847) 28 | 29 | - 确实新建了o2z的用户 30 | - 将新用户添加到组nogroup 31 | - 创建了o2z的用户文件夹 32 | - 但是登录失败了 33 | - 怎么办呢? 34 | 35 | ### 搜索 36 | 37 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220921-1663752434638) 38 | 39 | - 修改用户名的命令是passwd 40 | - 这个名字好像有点眼熟 41 | 42 | ### 源文件 43 | 44 | - useradd 不是属于 passwd 这个包的么? 45 | 46 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220921-1663752555555) 47 | 48 | - 好像也可以找到源文件 49 | 50 | ### 源文件 51 | 52 | - 打开源文件 53 | 54 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220921-1663752637208) 55 | 56 | - 也是经历4代 57 | - 1168行代码 58 | - 具体怎么用呢? 59 | 60 | ### 具体用法 61 | 62 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220921-1663752672374) 63 | 64 | - 看起来好像不难 65 | - 可以修改密码 66 | - 还可以修改用户宿主文件夹 67 | - 修改锁定状态之类的 68 | 69 | ### 使用passwd 70 | 71 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220921-1663752764314) 72 | 73 | - 确实可以修改密码 74 | - 但是修改密码后无法登陆 75 | - 这是为什么呢? 76 | 77 | ### 修改登录shell 78 | 79 | ``` 80 | sudo vi /etc/passwd 81 | ``` 82 | 83 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665052783517) 84 | 85 | - 红框位置就是 86 | - oeasy用户的默认脚本zsh 87 | 88 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665052884385) 89 | 90 | - 修改为zsh 91 | 92 | ### 尝试登录 93 | 94 | - su o2z 95 | 96 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665052954605) 97 | 98 | - 找不到~/.zshrc 99 | - 也就是/home/o2z/没有这个.zshrc 100 | 101 | ### 查看文件夹 102 | 103 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665053087402) 104 | 105 | - 要把/home/shiyanlou/.zshrc 106 | - 拷贝到/home/o2z/.zshrc 107 | 108 | ### 复制配置文件 109 | 110 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665053195337) 111 | 112 | - 以后登录就是zsh了 113 | 114 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665053230515) 115 | 116 | ### 总结 117 | - 这次我们了解了命令passwd 118 | - /usr/bin/passwd 119 | - 可以设置用户的密码 120 | - 用户的信息在 121 | - /etc/passwd中 122 | - 这两个虽然名字都是passwd 123 | - 但是用途不同 124 | - 可以设置用户默认的脚本解释器 125 | - 设置之后还应该把配置文件复制到新用户的宿主文件夹 126 | - 我们用的是zsh 127 | - 究竟zsh是什么? 128 | - 和bash有什么区别呢?🤔 129 | - 下次再说👋 -------------------------------------------------------------------------------- /md/062-578030-用户组_group.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 远程拷贝scp 8 | 9 | ## 回忆 10 | 11 | - 上次研究了如何让用户可以以管理员身份运行程序 12 | - 将用户加入sudo(27)这个组里面就可以 13 | - 如何避免每次都要输入密码呢? 14 | - 在/etc/sudoers.d里面添加用户名对应的文件 15 | - 设置此用户不用输入密码就可以执行sudo命令 16 | 17 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221002-1664704856863) 18 | 19 | - 为什么sudo拥有超级管理员的权限呢? 20 | - 因为sudo的权限是s 21 | - 代表sudo会以root的权限运行 22 | - 从视觉上看到是红色的 23 | - 还有一些程序(wall)是黄色的 24 | 25 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221002-1664712865622) 26 | 27 | - 这是什么意思呢? 28 | 29 | ### 权限观察 30 | 31 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221002-1664718034115) 32 | 33 | - 什么是组呢? 34 | - 我可以新建一个组吗? 35 | 36 | ### 新建组 37 | 38 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221002-1664718665426) 39 | 40 | - 和新建用户差不多 41 | - 新建了组之后 42 | - 可以把用户放进组里面吗? 43 | 44 | ### 查询手册 45 | 46 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665048473212) 47 | 48 | ### 将用户加入新组 49 | 50 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665048776824) 51 | 52 | ### 添加结果 53 | 54 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665048837448) 55 | 56 | - oeasy不但属于默认的oeasy组 57 | - 还属于新的ogroup 58 | - 再接再厉再来一个用户 59 | 60 | ### 添加o2z 61 | 62 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665049127865) 63 | 64 | - 目前ogroup里面两个用户了 65 | - oeasy 66 | - o2z 67 | - 可以用wall给他们发信息吗? 68 | - 先总结一下本单元 69 | 70 | ### 总结 🤨 71 | 72 | - 我们这次新建了组(group) 73 | - addgroup 74 | - 有addgroup就有delgroup 75 | 76 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665049368263) 77 | 78 | - 可以将用户放到用户组中 79 | - add oeasy ogroup 80 | - 我们可以用wall 81 | - 给oeasy、o2z发消息吗?🤔 82 | - 下次再说!👋 -------------------------------------------------------------------------------- /md/063-210191-远程登录_ssh.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # ssh 8 | 9 | ## 回忆 10 | 11 | - 上次我们研究的是oh-my-zsh 12 | - 是zsh上面的一款皮肤 13 | - 效果还不错 14 | - 可以设置字体和字体颜色 15 | - 这就是终端下的美化了 16 | - 如果是远程登录进来的o2z也会有zsh的效果么? 17 | 18 | ### 远程连接 19 | 20 | - 首先查看蓝桥云的ip地址 21 | 22 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663843575329) 23 | 24 | - 确实是可以远程登录上去的 25 | 26 | ### 登录结果 27 | 28 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663844651119) 29 | 30 | - ssh远程登录的终端 31 | - 和本地直接登录的终端效果是一样的 32 | - 权限就是o2z得权限 33 | - 也可以退出当前这个ssh登录 34 | 35 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663844695181) 36 | 37 | - 如果ssh没有安装怎么办呢? 38 | 39 | ### 从零安装 40 | 41 | - 从零开始安装openssh-server 42 | 43 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663847116469) 44 | 45 | - 然后启动ssh服务 46 | - 如果是自己买的云的话 47 | - 检查一下防火墙的22端口是否开启 48 | 49 | ### 修改端口 50 | 51 | ``` 52 | sudo vi /etc/ssh/sshd_config 53 | ``` 54 | 55 | - 尝试修改ssh 56 | 57 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663847261853) 58 | 59 | - 将端口修改为22000 60 | - 保存后退出 61 | 62 | ### 重启并连接 63 | 64 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663847413118) 65 | 66 | - 尝试连接默认的22端口 67 | - 失败了 68 | - 因为现在的端口为22000 69 | 70 | ### 指定端口 71 | 72 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663847502325) 73 | 74 | - 指定这个22000端口作为默认 75 | 76 | ### 查看配置 77 | 78 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663848002021) 79 | 80 | - ssh登陆之后 81 | - 确实使用的是 82 | - /home/o2z 作为宿主文件夹 83 | - /usr/bin/zsh 作为默认shell 84 | - 可以读取文件吗? 85 | 86 | ### 读取文件 87 | 88 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663848158250) 89 | 90 | - 读取文件确实是可以的 91 | - 先去总结一下 92 | 93 | 94 | ### 总结 95 | 96 | - 我们可以使用ssh 97 | - 远程登录这台ubuntu 98 | 99 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663848429952) 100 | 101 | - 首先要安装ssh 102 | - 然后要启动ssh 服务 103 | - 可以设置ssh的登陆端口 104 | - 登陆之后用户可以使用自己的宿主文件夹和shell 105 | - 可以获得用户应有的一切权限 106 | - 既然这个文件可以读写 107 | - 我可以把这个文件从云上拷贝到本地么?🤔 108 | - 下次再说👋 109 | 110 | -------------------------------------------------------------------------------- /md/063-578057-给用户组发信息_wall.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 给用户组发消息(wall) 8 | 9 | ## 回忆 10 | 11 | - 我们上次新建了组(group) 12 | - addgroup 13 | - 有addgroup就有delgroup 14 | 15 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665049368263) 16 | 17 | - 可以将用户放到用户组中 18 | - add oeasy ogroup 19 | - 我们可以用wall 20 | - 给oeasy、o2z发消息吗? 21 | 22 | ### 查看ip 23 | 24 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665049718552) 25 | 26 | ### 登录用户 27 | 28 | - 开两个终端 29 | - 用oeasy远程登录本机ip 30 | 31 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665050000234) 32 | 33 | - 用o2z远程登录本机ip 34 | 35 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665050024850) 36 | 37 | ### 查看谁登陆 38 | 39 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665050122647) 40 | 41 | - 我们可以看到两个登录的用户 42 | - 现在给他们发消息 43 | 44 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665050174885) 45 | 46 | ### wall 47 | 48 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665050275443) 49 | 50 | - 我们可以给这个组的两个用户都发送消息 51 | - 可以只给oeasy发消息吗? 52 | 53 | ### 只给用户发消息 54 | 55 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665050435166) 56 | 57 | - 我们可以给oeasy这个组发消息 58 | - 这样只有oeasy能收到消息了 59 | - 如果想给所有的用户都发消息呢? 60 | 61 | ### 所有的用户 62 | 63 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665050551273) 64 | 65 | - 不加group 66 | - 就是给所有的用户都发消息了 67 | 68 | ### wall 69 | 70 | - 这也是wall名字的由来 71 | 72 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665063638344) 73 | 74 | - 给所有人写消息 75 | 76 | ### 总结 🤨 77 | 78 | - 这次我们研究了 wall 这个命令 79 | - 这个命令可以给当前登录本服务的用户发消息 80 | - 给指定某个组发消息 81 | - 给指定的用户发消息 82 | - 给所有用户发消息 83 | - who可以查询到有哪些用户在线 84 | - 为什么要有用户和用户组呢? 85 | - 都用一个账号登录不是更简单吗? 86 | - 这背后有什么样的考虑呢?🤔 87 | - 先总结一下用户和用户组去 88 | - 下次再说!👋 -------------------------------------------------------------------------------- /md/064-210191-远程登录_ssh.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # ssh 8 | 9 | ## 回忆 10 | 11 | - 上次我们研究的是oh-my-zsh 12 | - 是zsh上面的一款皮肤 13 | - 效果还不错 14 | - 可以设置字体和字体颜色 15 | - 这就是终端下的美化了 16 | - 如果是远程登录进来的o2z也会有zsh的效果么? 17 | 18 | ### 远程连接 19 | 20 | - 首先查看蓝桥云的ip地址 21 | 22 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663843575329) 23 | 24 | - 确实是可以远程登录上去的 25 | 26 | ### 登录结果 27 | 28 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663844651119) 29 | 30 | - ssh远程登录的终端 31 | - 和本地直接登录的终端效果是一样的 32 | - 权限就是o2z得权限 33 | - 也可以退出当前这个ssh登录 34 | 35 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663844695181) 36 | 37 | - 如果ssh没有安装怎么办呢? 38 | 39 | ### 从零安装 40 | 41 | - 从零开始安装openssh-server 42 | 43 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663847116469) 44 | 45 | - 然后启动ssh服务 46 | - 如果是自己买的云的话 47 | - 检查一下防火墙的22端口是否开启 48 | 49 | ### 修改端口 50 | 51 | ``` 52 | sudo vi /etc/ssh/sshd_config 53 | ``` 54 | 55 | - 尝试修改ssh 56 | 57 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663847261853) 58 | 59 | - 将端口修改为22000 60 | - 保存后退出 61 | 62 | ### 重启并连接 63 | 64 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663847413118) 65 | 66 | - 尝试连接默认的22端口 67 | - 失败了 68 | - 因为现在的端口为22000 69 | 70 | ### 指定端口 71 | 72 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663847502325) 73 | 74 | - 指定这个22000端口作为默认 75 | 76 | ### 查看配置 77 | 78 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663848002021) 79 | 80 | - ssh登陆之后 81 | - 确实使用的是 82 | - /home/o2z 作为宿主文件夹 83 | - /usr/bin/zsh 作为默认shell 84 | - 可以读取文件吗? 85 | 86 | ### 读取文件 87 | 88 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663848158250) 89 | 90 | - 读取文件确实是可以的 91 | - 先去总结一下 92 | 93 | 94 | ### 总结 95 | 96 | - 我们可以使用ssh 97 | - 远程登录这台ubuntu 98 | 99 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220922-1663848429952) 100 | 101 | - 首先要安装ssh 102 | - 然后要启动ssh 服务 103 | - 可以设置ssh的登陆端口 104 | - 登陆之后用户可以使用自己的宿主文件夹和shell 105 | - 可以获得用户应有的一切权限 106 | - 既然这个文件可以读写 107 | - 我可以把这个文件从云上拷贝到本地么?🤔 108 | - 下次再说👋 109 | 110 | -------------------------------------------------------------------------------- /md/066-578030-用户组_group.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 远程拷贝scp 8 | 9 | ## 回忆 10 | 11 | - 上次研究了如何让用户可以以管理员身份运行程序 12 | - 将用户加入sudo(27)这个组里面就可以 13 | - 如何避免每次都要输入密码呢? 14 | - 在/etc/sudoers.d里面添加用户名对应的文件 15 | - 设置此用户不用输入密码就可以执行sudo命令 16 | 17 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221002-1664704856863) 18 | 19 | - 为什么sudo拥有超级管理员的权限呢? 20 | - 因为sudo的权限是s 21 | - 代表sudo会以root的权限运行 22 | - 从视觉上看到是红色的 23 | - 还有一些程序(wall)是黄色的 24 | 25 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221002-1664712865622) 26 | 27 | - 这是什么意思呢? 28 | 29 | ### 权限观察 30 | 31 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221002-1664718034115) 32 | 33 | - 什么是组呢? 34 | - 我可以新建一个组吗? 35 | 36 | ### 新建组 37 | 38 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221002-1664718665426) 39 | 40 | - 和新建用户差不多 41 | - 新建了组之后 42 | - 可以把用户放进组里面吗? 43 | 44 | ### 查询手册 45 | 46 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665048473212) 47 | 48 | ### 将用户加入新组 49 | 50 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665048776824) 51 | 52 | ### 添加结果 53 | 54 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665048837448) 55 | 56 | - oeasy不但属于默认的oeasy组 57 | - 还属于新的ogroup 58 | - 再接再厉再来一个用户 59 | 60 | ### 添加o2z 61 | 62 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665049127865) 63 | 64 | - 目前ogroup里面两个用户了 65 | - oeasy 66 | - o2z 67 | - 可以用wall给他们发信息吗? 68 | - 先总结一下本单元 69 | 70 | ### 总结 🤨 71 | 72 | - 我们这次新建了组(group) 73 | - addgroup 74 | - 有addgroup就有delgroup 75 | 76 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665049368263) 77 | 78 | - 可以将用户放到用户组中 79 | - add oeasy ogroup 80 | - 我们可以用wall 81 | - 给oeasy、o2z发消息吗?🤔 82 | - 下次再说!👋 -------------------------------------------------------------------------------- /md/067-578030-用户组_group.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 远程拷贝scp 8 | 9 | ## 回忆 10 | 11 | - 上次研究了如何让用户可以以管理员身份运行程序 12 | - 将用户加入sudo(27)这个组里面就可以 13 | - 如何避免每次都要输入密码呢? 14 | - 在/etc/sudoers.d里面添加用户名对应的文件 15 | - 设置此用户不用输入密码就可以执行sudo命令 16 | 17 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221002-1664704856863) 18 | 19 | - 为什么sudo拥有超级管理员的权限呢? 20 | - 因为sudo的权限是s 21 | - 代表sudo会以root的权限运行 22 | - 从视觉上看到是红色的 23 | - 还有一些程序(wall)是黄色的 24 | 25 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221002-1664712865622) 26 | 27 | - 这是什么意思呢? 28 | 29 | ### 权限观察 30 | 31 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221002-1664718034115) 32 | 33 | - 什么是组呢? 34 | - 我可以新建一个组吗? 35 | 36 | ### 新建组 37 | 38 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221002-1664718665426) 39 | 40 | - 和新建用户差不多 41 | - 新建了组之后 42 | - 可以把用户放进组里面吗? 43 | 44 | ### 查询手册 45 | 46 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665048473212) 47 | 48 | ### 将用户加入新组 49 | 50 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665048776824) 51 | 52 | ### 添加结果 53 | 54 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665048837448) 55 | 56 | - oeasy不但属于默认的oeasy组 57 | - 还属于新的ogroup 58 | - 再接再厉再来一个用户 59 | 60 | ### 添加o2z 61 | 62 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665049127865) 63 | 64 | - 目前ogroup里面两个用户了 65 | - oeasy 66 | - o2z 67 | - 可以用wall给他们发信息吗? 68 | - 先总结一下本单元 69 | 70 | ### 总结 🤨 71 | 72 | - 我们这次新建了组(group) 73 | - addgroup 74 | - 有addgroup就有delgroup 75 | 76 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665049368263) 77 | 78 | - 可以将用户放到用户组中 79 | - add oeasy ogroup 80 | - 我们可以用wall 81 | - 给oeasy、o2z发消息吗?🤔 82 | - 下次再说!👋 -------------------------------------------------------------------------------- /md/067-578057-给用户组发信息_wall.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 给用户组发消息(wall) 8 | 9 | ## 回忆 10 | 11 | - 我们上次新建了组(group) 12 | - addgroup 13 | - 有addgroup就有delgroup 14 | 15 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665049368263) 16 | 17 | - 可以将用户放到用户组中 18 | - add oeasy ogroup 19 | - 我们可以用wall 20 | - 给oeasy、o2z发消息吗? 21 | 22 | ### 查看ip 23 | 24 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665049718552) 25 | 26 | ### 登录用户 27 | 28 | - 开两个终端 29 | - 用oeasy远程登录本机ip 30 | 31 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665050000234) 32 | 33 | - 用o2z远程登录本机ip 34 | 35 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665050024850) 36 | 37 | ### 查看谁登陆 38 | 39 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665050122647) 40 | 41 | - 我们可以看到两个登录的用户 42 | - 现在给他们发消息 43 | 44 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665050174885) 45 | 46 | ### wall 47 | 48 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665050275443) 49 | 50 | - 我们可以给这个组的两个用户都发送消息 51 | - 可以只给oeasy发消息吗? 52 | 53 | ### 只给用户发消息 54 | 55 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665050435166) 56 | 57 | - 我们可以给oeasy这个组发消息 58 | - 这样只有oeasy能收到消息了 59 | - 如果想给所有的用户都发消息呢? 60 | 61 | ### 所有的用户 62 | 63 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665050551273) 64 | 65 | - 不加group 66 | - 就是给所有的用户都发消息了 67 | 68 | ### wall 69 | 70 | - 这也是wall名字的由来 71 | 72 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665063638344/wm) 73 | 74 | - 给所有人写消息 75 | 76 | ### 总结 🤨 77 | 78 | - 这次我们研究了 wall 这个命令 79 | - 这个命令可以给当前登录本服务的用户发消息 80 | - 给指定某个组发消息 81 | - 给指定的用户发消息 82 | - 给所有用户发消息 83 | - who可以查询到有哪些用户在线 84 | - 为什么要有用户和用户组呢? 85 | - 都用一个账号登录不是更简单吗? 86 | - 这背后有什么样的考虑呢?🤔 87 | - 先总结一下用户和用户组去 88 | - 下次再说!👋 -------------------------------------------------------------------------------- /md/067-580756-修改所有者_chown_递归修改_查看细节.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 修改文件权限(chmod) 8 | 9 | ## 回忆 10 | 11 | - 上次研究的是修改所属组 12 | - chgrp 13 | - 通过修改文件的所属组 14 | - 可以控制文件的权限 15 | - 角色依然分为 16 | - u 文件拥有者 17 | - g 文件拥有者同组其他用户 18 | - o 文件拥有者所属组之外的用户 19 | - a 所有用户 20 | - 权限分为 21 | - r 读 22 | - w 写 23 | - x 执行 24 | - 那我可以修改文件的所有者吗? 25 | 26 | ### 修改所有者 27 | 28 | - chown 可以修改所有者 29 | 30 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221012-1665581026939) 31 | 32 | - 意思是change owner 33 | 34 | ### 查看帮助手册 35 | 36 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221012-1665581252744) 37 | 38 | - 这个命令好像 39 | - 既可以修改owner 40 | - 又可以修改group 41 | 42 | ### 直接修改所有者 43 | 44 | - sudo chown oeasy test.sh 45 | 46 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221012-1665581656196) 47 | 48 | - 可以既 49 | - 修改owner 50 | - 又修改group吗? 51 | 52 | ### 查看手册 53 | 54 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221012-1665581894152) 55 | 56 | - 确实可以两个都修改 57 | 58 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221012-1665581913166) 59 | 60 | - 如果冒号后面没有东西呢? 61 | 62 | ### 默认登录组 63 | 64 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221012-1665581977513) 65 | 66 | - 查看帮助 67 | 68 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221012-1665582049014) 69 | 70 | - 冒号后面缺省的是用户的默认登录组 71 | - 如果冒号前面缺省呢? 72 | 73 | ### 缺省用户名 74 | 75 | - 如果冒号前面缺省的话 76 | 77 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221012-1665582147185) 78 | 79 | - 作用相当于chgrp 80 | 81 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221012-1665582186117) 82 | 83 | - 可以设置文件夹的权限、所有者和所属组吗? 84 | 85 | ### 文件夹权限 86 | 87 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221013-1665623967058) 88 | 89 | - 修改成功 90 | - 文件夹内部呢? 91 | 92 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221013-1665624002914) 93 | 94 | - 文件夹中的文件不受影响 95 | - 如果我想同时修改文件夹内部的文件夹和文件呢? 96 | 97 | ### 查看文档 98 | 99 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221012-1665581230933) 100 | 101 | - -R可以递归修改文件夹 102 | - -v可以输出修改细节 103 | 104 | ### 递归修改 105 | 106 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221013-1665624505259) 107 | 108 | ### 总结 🤨 109 | - 我们这次了解了命令chown 110 | - 可以修改文件的所有者 111 | - 也可以修改文件的所属组 112 | - 而且 113 | - 还可以对于文件夹设置所有者 114 | - 甚至设置递归地设置文件夹的所有者 115 | - 这两个可以配合 116 | - 通过chown设置所有者和组 117 | - 通过chmod设置权限 118 | - 但是也发现一些问题 119 | 120 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221013-1665625223620) 121 | 122 | - sudo命令的可执行权限是s 123 | - 这应该如何理解呢?🤔 124 | - 下次再说👋 -------------------------------------------------------------------------------- /md/068-578057-给用户组发信息_wall.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 给用户组发消息(wall) 8 | 9 | ## 回忆 10 | 11 | - 我们上次新建了组(group) 12 | - addgroup 13 | - 有addgroup就有delgroup 14 | 15 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665049368263) 16 | 17 | - 可以将用户放到用户组中 18 | - add oeasy ogroup 19 | - 我们可以用wall 20 | - 给oeasy、o2z发消息吗? 21 | 22 | ### 查看ip 23 | 24 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665049718552) 25 | 26 | ### 登录用户 27 | 28 | - 开两个终端 29 | - 用oeasy远程登录本机ip 30 | 31 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665050000234) 32 | 33 | - 用o2z远程登录本机ip 34 | 35 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665050024850) 36 | 37 | ### 查看谁登陆 38 | 39 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665050122647) 40 | 41 | - 我们可以看到两个登录的用户 42 | - 现在给他们发消息 43 | 44 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665050174885) 45 | 46 | ### wall 47 | 48 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665050275443) 49 | 50 | - 我们可以给这个组的两个用户都发送消息 51 | - 可以只给oeasy发消息吗? 52 | 53 | ### 只给用户发消息 54 | 55 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665050435166) 56 | 57 | - 我们可以给oeasy这个组发消息 58 | - 这样只有oeasy能收到消息了 59 | - 如果想给所有的用户都发消息呢? 60 | 61 | ### 所有的用户 62 | 63 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665050551273) 64 | 65 | - 不加group 66 | - 就是给所有的用户都发消息了 67 | 68 | ### wall 69 | 70 | - 这也是wall名字的由来 71 | 72 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221006-1665063638344/wm) 73 | 74 | - 给所有人写消息 75 | 76 | ### 总结 🤨 77 | 78 | - 这次我们研究了 wall 这个命令 79 | - 这个命令可以给当前登录本服务的用户发消息 80 | - 给指定某个组发消息 81 | - 给指定的用户发消息 82 | - 给所有用户发消息 83 | - who可以查询到有哪些用户在线 84 | - 为什么要有用户和用户组呢? 85 | - 都用一个账号登录不是更简单吗? 86 | - 这背后有什么样的考虑呢?🤔 87 | - 先总结一下用户和用户组去 88 | - 下次再说!👋 -------------------------------------------------------------------------------- /md/069-578059-临时拥有文件所有组身份_sgid.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 修改文件权限(chmod) 8 | 9 | ## 回忆 10 | 11 | - 上次研究了suid 12 | - 这种权限在文件所有者的执行权限上显示为s 13 | - 意味着执行的时候可以使用文件所有者的权限 14 | - 可是为什么要设置这样一种权限呢? 15 | 16 | ### 原因 17 | 18 | - 我们如果要修改当前用户的密码 19 | - 需要调用passwd命令 20 | - 这个命令再去修改/etc/shadow 21 | - 而/etc/shadow的所有者是root 22 | - 只有所有者有写权限 23 | - 这就导致了想要修改密码必须使用root账号 24 | - 那么一般账号就无法修改自己的密码了 25 | 26 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221013-1665640084754) 27 | 28 | - 我们使用uid的权限 29 | - 就可以让当前用户在执行passwd时 30 | - 拥有root权限 31 | - 从而可以修改/etc/shadow 32 | - 从而完成修改密码的操作 33 | - 可以设置g+s权限吗? 34 | 35 | ### g+s 36 | 37 | - 用oeasy登录 38 | - 并为oeasy宿主文件夹设置 39 | - 777权限 40 | - g+s权限 41 | 42 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221013-1665640963272) 43 | 44 | - 其他用户可以在里面添加文件和文件夹吗? 45 | - 用o2z去试试 46 | 47 | ### o2z 48 | 49 | - 可以新建文件和文件夹 50 | 51 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221013-1665641119742) 52 | 53 | - 新建文件和文件夹的所属主还是oeasy而不是o2z 54 | - 新建文件夹的执行组权限还是s 55 | - 这目录将sgid继承了 56 | - 而且在下面再建文件和文件夹属组也是oeasy 57 | - sgid具体来说有什么用呢? 58 | 59 | ### gsid 60 | 61 | - 先准备好 62 | 63 | - 两个用户 64 | - oeasy 65 | - o2z 66 | - 一个组 67 | - ogroup 68 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221013-1665642414196) 69 | 70 | - 并把oeasy和o2z的默认远程登录组设置为ogroup 71 | 72 | ### 拥有sgid的文件 73 | 74 | - /usr/bin下面找到wall文件 75 | - 这个文件sgid为s 76 | 77 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221013-1665642573189) 78 | 79 | - 用ssh远程登录上oeasy和o2z 80 | - 这个时候 81 | - oeasy发消息可以发到o2z 82 | - 因为他是以wall的tty组的权限来发的 83 | - 而不是以oeasy组的权限来发的 84 | - 所有tty登录的终端都会收到这些信息 85 | - 我们来总结一下各种标志位 86 | 87 | ### 标志位总结 88 | 89 | | mode | 说明 | 90 | | ---- | ---- | 91 | | S_IRWXU | 用户(所有者)读、写、执行 | 92 | | S_IRUSR | 用户(所有者)读 | 93 | | S_IRWUSR | 用户(所有者)写 | 94 | | S_IRXUSR | 用户(所有者)执行 | 95 | | S_IRWXG | 用户组读、写、执行 | 96 | | S_IRGRP | 用户组读 | 97 | | S_IWGRP | 用户组写 | 98 | | S_IXGRP | 用户组执行 | 99 | | S_IRWXO | 其他读、写、执行 | 100 | | S_IROTH | 其他读 | 101 | | S_IROTH | 其他写 | 102 | | S_IROTH | 其他执行 | 103 | | S_ISUID | 执行时设置用户id | 104 | | S_ISGID | 执行时设置用户组id | 105 | 106 | ### 总结 🤨 107 | - 我们现在可以 108 | - 让进程获得文件所有者的权限suid 109 | - 让进程获得文件所属组的权限sgid 110 | - 文件夹的sgid具有继承性 111 | - 理论上其他组(o)应该也有个临时设置的特殊位 112 | - 这个真的有吗?🤔 113 | - 下次再说👋 -------------------------------------------------------------------------------- /md/071-580756-修改所有者_chown_递归修改_查看细节.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 修改文件权限(chmod) 8 | 9 | ## 回忆 10 | 11 | - 上次研究的是修改所属组 12 | - chgrp 13 | - 通过修改文件的所属组 14 | - 可以控制文件的权限 15 | - 角色依然分为 16 | - u 文件拥有者 17 | - g 文件拥有者同组其他用户 18 | - o 文件拥有者所属组之外的用户 19 | - a 所有用户 20 | - 权限分为 21 | - r 读 22 | - w 写 23 | - x 执行 24 | - 那我可以修改文件的所有者吗? 25 | 26 | ### 修改所有者 27 | 28 | - chown 可以修改所有者 29 | 30 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221012-1665581026939) 31 | 32 | - 意思是change owner 33 | 34 | ### 查看帮助手册 35 | 36 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221012-1665581252744) 37 | 38 | - 这个命令好像 39 | - 既可以修改owner 40 | - 又可以修改group 41 | 42 | ### 直接修改所有者 43 | 44 | - sudo chown oeasy test.sh 45 | 46 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221012-1665581656196) 47 | 48 | - 可以既 49 | - 修改owner 50 | - 又修改group吗? 51 | 52 | ### 查看手册 53 | 54 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221012-1665581894152) 55 | 56 | - 确实可以两个都修改 57 | 58 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221012-1665581913166) 59 | 60 | - 如果冒号后面没有东西呢? 61 | 62 | ### 默认登录组 63 | 64 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221012-1665581977513) 65 | 66 | - 查看帮助 67 | 68 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221012-1665582049014) 69 | 70 | - 冒号后面缺省的是用户的默认登录组 71 | - 如果冒号前面缺省呢? 72 | 73 | ### 缺省用户名 74 | 75 | - 如果冒号前面缺省的话 76 | 77 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221012-1665582147185) 78 | 79 | - 作用相当于chgrp 80 | 81 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221012-1665582186117) 82 | 83 | - 可以设置文件夹的权限、所有者和所属组吗? 84 | 85 | ### 文件夹权限 86 | 87 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221013-1665623967058) 88 | 89 | - 修改成功 90 | - 文件夹内部呢? 91 | 92 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221013-1665624002914) 93 | 94 | - 文件夹中的文件不受影响 95 | - 如果我想同时修改文件夹内部的文件夹和文件呢? 96 | 97 | ### 查看文档 98 | 99 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221012-1665581230933) 100 | 101 | - -R可以递归修改文件夹 102 | - -v可以输出修改细节 103 | 104 | ### 递归修改 105 | 106 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221013-1665624505259) 107 | 108 | ### 总结 🤨 109 | - 我们这次了解了命令chown 110 | - 可以修改文件的所有者 111 | - 也可以修改文件的所属组 112 | - 而且 113 | - 还可以对于文件夹设置所有者 114 | - 甚至设置递归地设置文件夹的所有者 115 | - 这两个可以配合 116 | - 通过chown设置所有者和组 117 | - 通过chmod设置权限 118 | - 但是也发现一些问题 119 | 120 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221013-1665625223620) 121 | 122 | - sudo命令的可执行权限是s 123 | - 这应该如何理解呢?🤔 124 | - 下次再说👋 -------------------------------------------------------------------------------- /md/072-199464-数据库_postgresql.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 数据库 postgres 8 | 9 | ## 数据库 10 | 11 | - 我们这次进入一个全新的领域 😌 12 | - 数据库 13 | - 哪个数据库好呢? 14 | - 这是2021年的排行榜 15 | 16 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20211119-1637308540991) 17 | 18 | - 开源的有两个 19 | - mysql自称是最流行的数据库 20 | - postgres自称是最先进的数据库 21 | - 我们选择postgres来学习 22 | 23 | 24 | ### 入库 25 | - 更新系统安装postgres 26 | - 启动postgres 27 | - 并以postgres登录 28 | 29 | ``` 30 | sudo apt update 31 | sudo apt install postgresql 32 | sudo /etc/init.d/postgresql start 33 | sudo -u postgres psql 34 | ``` 35 | 36 | - 查看所有数据库database 37 | 38 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210903-1630664944685) 39 | 40 | ### 查看数据库 41 | ``` 42 | \l 43 | ``` 44 | 45 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210903-1630665003642) 46 | 47 | - 建立数据库oeasy 48 | - 并进入 49 | 50 | ``` 51 | create database oeasy; 52 | \l 53 | ``` 54 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210903-1630665050881) 55 | 56 | ### 建表并导入数据 57 | ``` 58 | \c oeasy 59 | \dt 60 | ``` 61 | 62 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210903-1630665134696) 63 | 64 | - 建表 65 | 66 | ``` 67 | create table urls(topic varchar, url varchar); 68 | \dt 69 | ``` 70 | 71 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210903-1630665232801) 72 | 73 | ### 下载数据 74 | 75 | - git clone http://gitee.com/overmind1980/oeasyorg.git 76 | - 找到其中的urls.csv 77 | 78 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210910-1631280041502) 79 | 80 | ### 导入数据 81 | 82 | ``` 83 | \copy urls from '/home/shiyanlou/oeasyorg/urls.csv' delimiter ',' csv ; 84 | ``` 85 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210903-1630665741698) 86 | 87 | ### 查询数据 88 | 89 | ``` 90 | select * from urls where topic like '%e%'; 91 | select * from urls where length(topic) > '5'; 92 | ``` 93 | 94 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210903-1630665711812) 95 | 96 | ### 总结 🤨 97 | - 我们这次搭建了postgres数据库 98 | - 并且导入了数据 99 | - 查询了数据 100 | - 可以把这个数据放在网页里查看么? 101 | - 下次再说!👋 102 | 103 | 104 | -------------------------------------------------------------------------------- /md/072-580756-修改所有者_chown_递归修改_查看细节.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 修改文件权限(chmod) 8 | 9 | ## 回忆 10 | 11 | - 上次研究的是修改所属组 12 | - chgrp 13 | - 通过修改文件的所属组 14 | - 可以控制文件的权限 15 | - 角色依然分为 16 | - u 文件拥有者 17 | - g 文件拥有者同组其他用户 18 | - o 文件拥有者所属组之外的用户 19 | - a 所有用户 20 | - 权限分为 21 | - r 读 22 | - w 写 23 | - x 执行 24 | - 那我可以修改文件的所有者吗? 25 | 26 | ### 修改所有者 27 | 28 | - chown 可以修改所有者 29 | 30 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221012-1665581026939) 31 | 32 | - 意思是change owner 33 | 34 | ### 查看帮助手册 35 | 36 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221012-1665581252744) 37 | 38 | - 这个命令好像 39 | - 既可以修改owner 40 | - 又可以修改group 41 | 42 | ### 直接修改所有者 43 | 44 | - sudo chown oeasy test.sh 45 | 46 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221012-1665581656196) 47 | 48 | - 可以既 49 | - 修改owner 50 | - 又修改group吗? 51 | 52 | ### 查看手册 53 | 54 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221012-1665581894152) 55 | 56 | - 确实可以两个都修改 57 | 58 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221012-1665581913166) 59 | 60 | - 如果冒号后面没有东西呢? 61 | 62 | ### 默认登录组 63 | 64 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221012-1665581977513) 65 | 66 | - 查看帮助 67 | 68 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221012-1665582049014) 69 | 70 | - 冒号后面缺省的是用户的默认登录组 71 | - 如果冒号前面缺省呢? 72 | 73 | ### 缺省用户名 74 | 75 | - 如果冒号前面缺省的话 76 | 77 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221012-1665582147185) 78 | 79 | - 作用相当于chgrp 80 | 81 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221012-1665582186117) 82 | 83 | - 可以设置文件夹的权限、所有者和所属组吗? 84 | 85 | ### 文件夹权限 86 | 87 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221013-1665623967058) 88 | 89 | - 修改成功 90 | - 文件夹内部呢? 91 | 92 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221013-1665624002914) 93 | 94 | - 文件夹中的文件不受影响 95 | - 如果我想同时修改文件夹内部的文件夹和文件呢? 96 | 97 | ### 查看文档 98 | 99 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221012-1665581230933) 100 | 101 | - -R可以递归修改文件夹 102 | - -v可以输出修改细节 103 | 104 | ### 递归修改 105 | 106 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221013-1665624505259) 107 | 108 | ### 总结 🤨 109 | - 我们这次了解了命令chown 110 | - 可以修改文件的所有者 111 | - 也可以修改文件的所属组 112 | - 而且 113 | - 还可以对于文件夹设置所有者 114 | - 甚至设置递归地设置文件夹的所有者 115 | - 这两个可以配合 116 | - 通过chown设置所有者和组 117 | - 通过chmod设置权限 118 | - 但是也发现一些问题 119 | 120 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221013-1665625223620) 121 | 122 | - sudo命令的可执行权限是s 123 | - 这应该如何理解呢?🤔 124 | - 下次再说👋 -------------------------------------------------------------------------------- /md/073-578059-临时拥有文件所有组身份_sgid.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 修改文件权限(chmod) 8 | 9 | ## 回忆 10 | 11 | - 上次研究了suid 12 | - 这种权限在文件所有者的执行权限上显示为s 13 | - 意味着执行的时候可以使用文件所有者的权限 14 | - 可是为什么要设置这样一种权限呢? 15 | 16 | ### 原因 17 | 18 | - 我们如果要修改当前用户的密码 19 | - 需要调用passwd命令 20 | - 这个命令再去修改/etc/shadow 21 | - 而/etc/shadow的所有者是root 22 | - 只有所有者有写权限 23 | - 这就导致了想要修改密码必须使用root账号 24 | - 那么一般账号就无法修改自己的密码了 25 | 26 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221013-1665640084754) 27 | 28 | - 我们使用uid的权限 29 | - 就可以让当前用户在执行passwd时 30 | - 拥有root权限 31 | - 从而可以修改/etc/shadow 32 | - 从而完成修改密码的操作 33 | - 可以设置g+s权限吗? 34 | 35 | ### g+s 36 | 37 | - 用oeasy登录 38 | - 并为oeasy宿主文件夹设置 39 | - 777权限 40 | - g+s权限 41 | 42 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221013-1665640963272) 43 | 44 | - 其他用户可以在里面添加文件和文件夹吗? 45 | - 用o2z去试试 46 | 47 | ### o2z 48 | 49 | - 可以新建文件和文件夹 50 | 51 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221013-1665641119742) 52 | 53 | - 新建文件和文件夹的所属主还是oeasy而不是o2z 54 | - 新建文件夹的执行组权限还是s 55 | - 这目录将sgid继承了 56 | - 而且在下面再建文件和文件夹属组也是oeasy 57 | - sgid具体来说有什么用呢? 58 | 59 | ### gsid 60 | 61 | - 先准备好 62 | 63 | - 两个用户 64 | - oeasy 65 | - o2z 66 | - 一个组 67 | - ogroup 68 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221013-1665642414196) 69 | 70 | - 并把oeasy和o2z的默认远程登录组设置为ogroup 71 | 72 | ### 拥有sgid的文件 73 | 74 | - /usr/bin下面找到wall文件 75 | - 这个文件sgid为s 76 | 77 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221013-1665642573189) 78 | 79 | - 用ssh远程登录上oeasy和o2z 80 | - 这个时候 81 | - oeasy发消息可以发到o2z 82 | - 因为他是以wall的tty组的权限来发的 83 | - 而不是以oeasy组的权限来发的 84 | - 所有tty登录的终端都会收到这些信息 85 | - 我们来总结一下各种标志位 86 | 87 | ### 标志位总结 88 | 89 | | mode | 说明 | 90 | | ---- | ---- | 91 | | S_IRWXU | 用户(所有者)读、写、执行 | 92 | | S_IRUSR | 用户(所有者)读 | 93 | | S_IRWUSR | 用户(所有者)写 | 94 | | S_IRXUSR | 用户(所有者)执行 | 95 | | S_IRWXG | 用户组读、写、执行 | 96 | | S_IRGRP | 用户组读 | 97 | | S_IWGRP | 用户组写 | 98 | | S_IXGRP | 用户组执行 | 99 | | S_IRWXO | 其他读、写、执行 | 100 | | S_IROTH | 其他读 | 101 | | S_IROTH | 其他写 | 102 | | S_IROTH | 其他执行 | 103 | | S_ISUID | 执行时设置用户id | 104 | | S_ISGID | 执行时设置用户组id | 105 | 106 | ### 总结 🤨 107 | - 我们现在可以 108 | - 让进程获得文件所有者的权限suid 109 | - 让进程获得文件所属组的权限sgid 110 | - 文件夹的sgid具有继承性 111 | - 理论上其他组(o)应该也有个临时设置的特殊位 112 | - 这个真的有吗?🤔 113 | - 下次再说👋 -------------------------------------------------------------------------------- /md/074-578059-临时拥有文件所有组身份_sgid.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 修改文件权限(chmod) 8 | 9 | ## 回忆 10 | 11 | - 上次研究了suid 12 | - 这种权限在文件所有者的执行权限上显示为s 13 | - 意味着执行的时候可以使用文件所有者的权限 14 | - 可是为什么要设置这样一种权限呢? 15 | 16 | ### 原因 17 | 18 | - 我们如果要修改当前用户的密码 19 | - 需要调用passwd命令 20 | - 这个命令再去修改/etc/shadow 21 | - 而/etc/shadow的所有者是root 22 | - 只有所有者有写权限 23 | - 这就导致了想要修改密码必须使用root账号 24 | - 那么一般账号就无法修改自己的密码了 25 | 26 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221013-1665640084754) 27 | 28 | - 我们使用uid的权限 29 | - 就可以让当前用户在执行passwd时 30 | - 拥有root权限 31 | - 从而可以修改/etc/shadow 32 | - 从而完成修改密码的操作 33 | - 可以设置g+s权限吗? 34 | 35 | ### g+s 36 | 37 | - 用oeasy登录 38 | - 并为oeasy宿主文件夹设置 39 | - 777权限 40 | - g+s权限 41 | 42 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221013-1665640963272) 43 | 44 | - 其他用户可以在里面添加文件和文件夹吗? 45 | - 用o2z去试试 46 | 47 | ### o2z 48 | 49 | - 可以新建文件和文件夹 50 | 51 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221013-1665641119742) 52 | 53 | - 新建文件和文件夹的所属主还是oeasy而不是o2z 54 | - 新建文件夹的执行组权限还是s 55 | - 这目录将sgid继承了 56 | - 而且在下面再建文件和文件夹属组也是oeasy 57 | - sgid具体来说有什么用呢? 58 | 59 | ### gsid 60 | 61 | - 先准备好 62 | 63 | - 两个用户 64 | - oeasy 65 | - o2z 66 | - 一个组 67 | - ogroup 68 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221013-1665642414196) 69 | 70 | - 并把oeasy和o2z的默认远程登录组设置为ogroup 71 | 72 | ### 拥有sgid的文件 73 | 74 | - /usr/bin下面找到wall文件 75 | - 这个文件sgid为s 76 | 77 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221013-1665642573189) 78 | 79 | - 用ssh远程登录上oeasy和o2z 80 | - 这个时候 81 | - oeasy发消息可以发到o2z 82 | - 因为他是以wall的tty组的权限来发的 83 | - 而不是以oeasy组的权限来发的 84 | - 所有tty登录的终端都会收到这些信息 85 | - 我们来总结一下各种标志位 86 | 87 | ### 标志位总结 88 | 89 | | mode | 说明 | 90 | | ---- | ---- | 91 | | S_IRWXU | 用户(所有者)读、写、执行 | 92 | | S_IRUSR | 用户(所有者)读 | 93 | | S_IRWUSR | 用户(所有者)写 | 94 | | S_IRXUSR | 用户(所有者)执行 | 95 | | S_IRWXG | 用户组读、写、执行 | 96 | | S_IRGRP | 用户组读 | 97 | | S_IWGRP | 用户组写 | 98 | | S_IXGRP | 用户组执行 | 99 | | S_IRWXO | 其他读、写、执行 | 100 | | S_IROTH | 其他读 | 101 | | S_IWOTH | 其他写 | 102 | | S_IXOTH | 其他执行 | 103 | | S_ISUID | 执行时设置用户id | 104 | | S_ISGID | 执行时设置用户组id | 105 | 106 | ### 总结 🤨 107 | - 我们现在可以 108 | - 让进程获得文件所有者的权限suid 109 | - 让进程获得文件所属组的权限sgid 110 | - 文件夹的sgid具有继承性 111 | - 理论上其他组(o)应该也有个临时设置的特殊位 112 | - 这个真的有吗?🤔 113 | - 下次再说👋 -------------------------------------------------------------------------------- /md/076-199464-数据库_postgresql.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 数据库 postgres 8 | 9 | ## 数据库 10 | 11 | - 我们这次进入一个全新的领域 😌 12 | - 数据库 13 | - 哪个数据库好呢? 14 | - 这是2021年的排行榜 15 | 16 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20211119-1637308540991) 17 | 18 | - 开源的有两个 19 | - mysql自称是最流行的数据库 20 | - postgres自称是最先进的数据库 21 | - 我们选择postgres来学习 22 | 23 | 24 | ### 入库 25 | - 更新系统安装postgres 26 | - 启动postgres 27 | - 并以postgres登录 28 | 29 | ``` 30 | sudo apt update 31 | sudo apt install postgresql 32 | sudo /etc/init.d/postgresql start 33 | sudo -u postgres psql 34 | ``` 35 | 36 | - 查看所有数据库database 37 | 38 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210903-1630664944685) 39 | 40 | ### 查看数据库 41 | ``` 42 | \l 43 | ``` 44 | 45 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210903-1630665003642) 46 | 47 | - 建立数据库oeasy 48 | - 并进入 49 | 50 | ``` 51 | create database oeasy; 52 | \l 53 | ``` 54 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210903-1630665050881) 55 | 56 | ### 建表并导入数据 57 | ``` 58 | \c oeasy 59 | \dt 60 | ``` 61 | 62 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210903-1630665134696) 63 | 64 | - 建表 65 | 66 | ``` 67 | create table urls(topic varchar, url varchar); 68 | \dt 69 | ``` 70 | 71 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210903-1630665232801) 72 | 73 | ### 下载数据 74 | 75 | - git clone http://gitee.com/overmind1980/oeasyorg.git 76 | - 找到其中的urls.csv 77 | 78 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210910-1631280041502) 79 | 80 | ### 导入数据 81 | 82 | ``` 83 | \copy urls from '/home/shiyanlou/oeasyorg/urls.csv' delimiter ',' csv ; 84 | ``` 85 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210903-1630665741698) 86 | 87 | ### 查询数据 88 | 89 | ``` 90 | select * from urls where topic like '%e%'; 91 | select * from urls where length(topic) > '5'; 92 | ``` 93 | 94 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210903-1630665711812) 95 | 96 | ### 总结 🤨 97 | - 我们这次搭建了postgres数据库 98 | - 并且导入了数据 99 | - 查询了数据 100 | - 可以把这个数据放在网页里查看么? 101 | - 下次再说!👋 102 | 103 | 104 | -------------------------------------------------------------------------------- /md/077-199464-数据库_postgresql.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 数据库 postgres 8 | 9 | ## 数据库 10 | 11 | - 我们这次进入一个全新的领域 😌 12 | - 数据库 13 | - 哪个数据库好呢? 14 | - 这是2021年的排行榜 15 | 16 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20211119-1637308540991) 17 | 18 | - 开源的有两个 19 | - mysql自称是最流行的数据库 20 | - postgres自称是最先进的数据库 21 | - 我们选择postgres来学习 22 | 23 | 24 | ### 入库 25 | - 更新系统安装postgres 26 | - 启动postgres 27 | - 并以postgres登录 28 | 29 | ``` 30 | sudo apt update 31 | sudo apt install postgresql 32 | sudo /etc/init.d/postgresql start 33 | sudo -u postgres psql 34 | ``` 35 | 36 | - 查看所有数据库database 37 | 38 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210903-1630664944685) 39 | 40 | ### 查看数据库 41 | ``` 42 | \l 43 | ``` 44 | 45 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210903-1630665003642) 46 | 47 | - 建立数据库oeasy 48 | - 并进入 49 | 50 | ``` 51 | create database oeasy; 52 | \l 53 | ``` 54 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210903-1630665050881) 55 | 56 | ### 建表并导入数据 57 | ``` 58 | \c oeasy 59 | \dt 60 | ``` 61 | 62 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210903-1630665134696) 63 | 64 | - 建表 65 | 66 | ``` 67 | create table urls(topic varchar, url varchar); 68 | \dt 69 | ``` 70 | 71 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210903-1630665232801) 72 | 73 | ### 下载数据 74 | 75 | - git clone http://gitee.com/overmind1980/oeasyorg.git 76 | - 找到其中的urls.csv 77 | 78 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210910-1631280041502) 79 | 80 | ### 导入数据 81 | 82 | ``` 83 | \copy urls from '/home/shiyanlou/oeasyorg/urls.csv' delimiter ',' csv ; 84 | ``` 85 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210903-1630665741698) 86 | 87 | ### 查询数据 88 | 89 | ``` 90 | select * from urls where topic like '%e%'; 91 | select * from urls where length(topic) > '5'; 92 | ``` 93 | 94 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20210903-1630665711812) 95 | 96 | ### 总结 🤨 97 | - 我们这次搭建了postgres数据库 98 | - 并且导入了数据 99 | - 查询了数据 100 | - 可以把这个数据放在网页里查看么? 101 | - 下次再说!👋 102 | 103 | 104 | -------------------------------------------------------------------------------- /md/104-497989-准备删除.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 封装数据库连接 8 | 9 | ## 回忆 10 | 11 | - jdbc connection pool 12 | - jdbc 数据库连接池 13 | - 首先是一种池子 14 | - 通过指定的四步 15 | 1. 配置jdbc数据库连接池的jar包 16 | 2. 资源配置(context.xml中设置关于pg的Resource) 17 | 3. 在本应用的web.xml中使用相应的资源引用 18 | 4. 在程序中使用jndi调用数据库连接资源 19 | - 经过这四步我们就构建了一个可用的数据库连接池 20 | - 我们用这个数据库连接池可以做怎样的操作呢 21 | - 比如删除?🤔 22 | 23 | ### 起手 24 | 25 | - 复制代码 26 | 27 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652708310631) 28 | 29 | - 修改类名 30 | 31 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652708415801) 32 | 33 | - 保存并编译 34 | - 成功! 35 | 36 | ### 细化代码 37 | 38 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652709465449) 39 | 40 | - 给每个用户记录后面添加了一个按钮 41 | - 用来删除用户记录 42 | 43 | ### 配置路由 44 | 45 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652708950824) 46 | 47 | - 配置很顺利 48 | - 我们已经对于配置路由越来越熟练了 49 | 50 | ### 浏览器访问 51 | 52 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652709515335) 53 | 54 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652709523477) 55 | 56 | - 但是点击之后没有效果 57 | 58 | ### 搜索 59 | 60 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652709692587) 61 | 62 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652709700200) 63 | 64 | ### 修改 65 | 66 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652710036579) 67 | 68 | ### 再访问 69 | 70 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652710093589) 71 | 72 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652710100867) 73 | 74 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652710110603) 75 | 76 | - 点击按钮是可以完成跳转的 77 | - 后面就是添加删除的处理函数和路由 78 | 79 | ## 总结 80 | 81 | - 我们这次应用数据库连接池 82 | - 制作了一个管理页面 83 | - 这个页面可以查询所有的用户记录 84 | - 并且每个用户后面有一个删除按钮 85 | - 删除应该如何完成呢 86 | - 能否直接就写处理函数 87 | - 让路由在编译class的时候自动生成呢?🤔 88 | - 下次再说!👋 -------------------------------------------------------------------------------- /md/108-497989-准备删除.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 封装数据库连接 8 | 9 | ## 回忆 10 | 11 | - jdbc connection pool 12 | - jdbc 数据库连接池 13 | - 首先是一种池子 14 | - 通过指定的四步 15 | 1. 配置jdbc数据库连接池的jar包 16 | 2. 资源配置(context.xml中设置关于pg的Resource) 17 | 3. 在本应用的web.xml中使用相应的资源引用 18 | 4. 在程序中使用jndi调用数据库连接资源 19 | - 经过这四步我们就构建了一个可用的数据库连接池 20 | - 我们用这个数据库连接池可以做怎样的操作呢 21 | - 比如删除?🤔 22 | 23 | ### 起手 24 | 25 | - 复制代码 26 | 27 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652708310631) 28 | 29 | - 修改类名 30 | 31 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652708415801) 32 | 33 | - 保存并编译 34 | - 成功! 35 | 36 | ### 细化代码 37 | 38 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652709465449) 39 | 40 | - 给每个用户记录后面添加了一个按钮 41 | - 用来删除用户记录 42 | 43 | ### 配置路由 44 | 45 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652708950824) 46 | 47 | - 配置很顺利 48 | - 我们已经对于配置路由越来越熟练了 49 | 50 | ### 浏览器访问 51 | 52 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652709515335) 53 | 54 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652709523477) 55 | 56 | - 但是点击之后没有效果 57 | 58 | ### 搜索 59 | 60 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652709692587) 61 | 62 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652709700200) 63 | 64 | ### 修改 65 | 66 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652710036579) 67 | 68 | ### 再访问 69 | 70 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652710093589) 71 | 72 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652710100867) 73 | 74 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652710110603) 75 | 76 | - 点击按钮是可以完成跳转的 77 | - 后面就是添加删除的处理函数和路由 78 | 79 | ## 总结 80 | 81 | - 我们这次应用数据库连接池 82 | - 制作了一个管理页面 83 | - 这个页面可以查询所有的用户记录 84 | - 并且每个用户后面有一个删除按钮 85 | - 删除应该如何完成呢 86 | - 能否直接就写处理函数 87 | - 让路由在编译class的时候自动生成呢?🤔 88 | - 下次再说!👋 -------------------------------------------------------------------------------- /md/109-497989-准备删除.sy.md: -------------------------------------------------------------------------------- 1 | --- 2 | show: step 3 | version: 1.0 4 | enable_checker: true 5 | --- 6 | 7 | # 封装数据库连接 8 | 9 | ## 回忆 10 | 11 | - jdbc connection pool 12 | - jdbc 数据库连接池 13 | - 首先是一种池子 14 | - 通过指定的四步 15 | 1. 配置jdbc数据库连接池的jar包 16 | 2. 资源配置(context.xml中设置关于pg的Resource) 17 | 3. 在本应用的web.xml中使用相应的资源引用 18 | 4. 在程序中使用jndi调用数据库连接资源 19 | - 经过这四步我们就构建了一个可用的数据库连接池 20 | - 我们用这个数据库连接池可以做怎样的操作呢 21 | - 比如删除?🤔 22 | 23 | ### 起手 24 | 25 | - 复制代码 26 | 27 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652708310631) 28 | 29 | - 修改类名 30 | 31 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652708415801) 32 | 33 | - 保存并编译 34 | - 成功! 35 | 36 | ### 细化代码 37 | 38 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652709465449) 39 | 40 | - 给每个用户记录后面添加了一个按钮 41 | - 用来删除用户记录 42 | 43 | ### 配置路由 44 | 45 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652708950824) 46 | 47 | - 配置很顺利 48 | - 我们已经对于配置路由越来越熟练了 49 | 50 | ### 浏览器访问 51 | 52 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652709515335) 53 | 54 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652709523477) 55 | 56 | - 但是点击之后没有效果 57 | 58 | ### 搜索 59 | 60 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652709692587) 61 | 62 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652709700200) 63 | 64 | ### 修改 65 | 66 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652710036579) 67 | 68 | ### 再访问 69 | 70 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652710093589) 71 | 72 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652710100867) 73 | 74 | ![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20220516-1652710110603) 75 | 76 | - 点击按钮是可以完成跳转的 77 | - 后面就是添加删除的处理函数和路由 78 | 79 | ## 总结 80 | 81 | - 我们这次应用数据库连接池 82 | - 制作了一个管理页面 83 | - 这个页面可以查询所有的用户记录 84 | - 并且每个用户后面有一个删除按钮 85 | - 删除应该如何完成呢 86 | - 能否直接就写处理函数 87 | - 让路由在编译class的时候自动生成呢?🤔 88 | - 下次再说!👋 -------------------------------------------------------------------------------- /md/README.md: -------------------------------------------------------------------------------- 1 | # oeasy 带你学 linux 之零基础快速上手 2 | 3 | 本课面向的零基础 Linux 新手入门,从最简单的地方出发,通过一系列有趣的 Linux 常用命令,一起完成 Linux 入门。本实验课包括图形界面与终端及应用的管理两大部分,每个实验只需要简单的几个步骤,就能让你看到操作 Linux 命令 Shell 的神奇效果。本课程从 Linux 基础的包安装开始,带你玩转各种好玩的 Shell 应用。 4 | 本教程同步到https://github.com/overmind1980/oeasy-linux-tutorial,欢迎关注与参与。 5 | 6 | - 作者: [oeasy](https://www.lanqiao.cn/users/1190679/) 7 | - 链接: https://www.lanqiao.cn/courses/2712 8 | 9 | ![](https://doc.shiyanlou.com/courses/byscript-20220113-1642071750665) -------------------------------------------------------------------------------- /md2html.sh: -------------------------------------------------------------------------------- 1 | rm -rf html 2 | cp -r md html 3 | cd html 4 | find . -type f -name "*.md" | sed "s/\(\.\/\)\(.*\)\(.sy.md\)/\2/g" | xargs mkdir 5 | find . -type f -name "*.md" | sed "s/\(\.\/\)\(.*\)\(.sy.md\)/mv \1\2\3 \2/g" > go.sh 6 | chmod u+x go.sh 7 | -------------------------------------------------------------------------------- /oeasy/META-INF/context.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | WEB-INF/web.xml 4 | ${catalina.base}/conf/web.xml 5 | 6 | 7 | -------------------------------------------------------------------------------- /oeasy/WEB-INF/.web.xml.swp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overmind1980/oeasy-linux-tutorial/e7d7bfc1e34fd26a6b6509e4725c5fc9befc5700/oeasy/WEB-INF/.web.xml.swp -------------------------------------------------------------------------------- /oeasy/WEB-INF/classes/.ErrorServlet.java.swp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overmind1980/oeasy-linux-tutorial/e7d7bfc1e34fd26a6b6509e4725c5fc9befc5700/oeasy/WEB-INF/classes/.ErrorServlet.java.swp -------------------------------------------------------------------------------- /oeasy/WEB-INF/classes/.PostgresJdbc.java.swo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overmind1980/oeasy-linux-tutorial/e7d7bfc1e34fd26a6b6509e4725c5fc9befc5700/oeasy/WEB-INF/classes/.PostgresJdbc.java.swo -------------------------------------------------------------------------------- /oeasy/WEB-INF/classes/.PostgresJdbc.java.swp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overmind1980/oeasy-linux-tutorial/e7d7bfc1e34fd26a6b6509e4725c5fc9befc5700/oeasy/WEB-INF/classes/.PostgresJdbc.java.swp -------------------------------------------------------------------------------- /oeasy/WEB-INF/classes/AddServlet.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overmind1980/oeasy-linux-tutorial/e7d7bfc1e34fd26a6b6509e4725c5fc9befc5700/oeasy/WEB-INF/classes/AddServlet.class -------------------------------------------------------------------------------- /oeasy/WEB-INF/classes/AddServlet.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | import java.util.*; 3 | import jakarta.servlet.*; 4 | import jakarta.servlet.http.*; 5 | 6 | public class AddServlet extends HttpServlet { 7 | 8 | public void doGet(HttpServletRequest request, HttpServletResponse response) 9 | throws IOException, ServletException 10 | { 11 | response.setContentType("text/html"); 12 | PrintWriter out = response.getWriter(); 13 | int addend1 = Integer.parseInt(request.getParameter("addend1")); 14 | int addend2 = Integer.parseInt(request.getParameter("addend2")); 15 | 16 | out.print(addend1+addend2); 17 | } 18 | 19 | public void doPost(HttpServletRequest request, HttpServletResponse res) 20 | throws IOException, ServletException 21 | { 22 | doGet(request, res); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /oeasy/WEB-INF/classes/ConnectionPool.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overmind1980/oeasy-linux-tutorial/e7d7bfc1e34fd26a6b6509e4725c5fc9befc5700/oeasy/WEB-INF/classes/ConnectionPool.class -------------------------------------------------------------------------------- /oeasy/WEB-INF/classes/DBConUtil.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overmind1980/oeasy-linux-tutorial/e7d7bfc1e34fd26a6b6509e4725c5fc9befc5700/oeasy/WEB-INF/classes/DBConUtil.class -------------------------------------------------------------------------------- /oeasy/WEB-INF/classes/DBConUtil.java: -------------------------------------------------------------------------------- 1 | import java.sql.Connection; 2 | import java.sql.DriverManager; 3 | import java.sql.PreparedStatement; 4 | import java.sql.ResultSet; 5 | import java.sql.SQLException; 6 | import java.sql.Statement; 7 | 8 | public class DBConUtil { 9 | private static final String URL = "jdbc:postgresql://localhost:5432/oeasy"; 10 | private static final String USER = "postgres"; 11 | private static final String PASSWORD = "oeasy@pg"; 12 | private static final String DRIVERPATH = "org.postgresql.Driver"; 13 | private static Connection conn = null; 14 | static { 15 | try { 16 | Class.forName(DRIVERPATH); 17 | } catch (ClassNotFoundException e) { 18 | e.printStackTrace(); 19 | } 20 | } 21 | 22 | public static Connection getConn() { 23 | // 处理线程安全问题 24 | synchronized (DBConUtil.class) { 25 | try { 26 | // 如果conn为null或者conn已关闭得时候,需要重新创建conn对象 27 | if (null == conn || conn.isClosed()) { 28 | synchronized (DBConUtil.class) { 29 | conn = DriverManager.getConnection(URL, USER, PASSWORD); 30 | } 31 | } 32 | } catch (Exception e) { 33 | e.printStackTrace(); 34 | } 35 | } 36 | 37 | return conn; 38 | } 39 | 40 | public static void close(Connection conn, PreparedStatement pstm, Statement stmt, ResultSet rs) { 41 | if (null != rs) { 42 | try { 43 | rs.close(); 44 | } catch (SQLException e) { 45 | e.printStackTrace(); 46 | } finally { 47 | if (null != stmt) { 48 | try { 49 | stmt.close(); 50 | } catch (SQLException e) { 51 | e.printStackTrace(); 52 | } finally { 53 | if (null != pstm) { 54 | try { 55 | pstm.close(); 56 | } catch (SQLException e) { 57 | e.printStackTrace(); 58 | } finally { 59 | if (null != conn) { 60 | try { 61 | conn.close(); 62 | } catch (SQLException e) { 63 | e.printStackTrace(); 64 | } 65 | } 66 | } 67 | } 68 | } 69 | } 70 | } 71 | } 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /oeasy/WEB-INF/classes/ErrorServlet.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overmind1980/oeasy-linux-tutorial/e7d7bfc1e34fd26a6b6509e4725c5fc9befc5700/oeasy/WEB-INF/classes/ErrorServlet.class -------------------------------------------------------------------------------- /oeasy/WEB-INF/classes/ErrorServlet.java: -------------------------------------------------------------------------------- 1 | import java.io.IOException; 2 | import java.io.PrintWriter; 3 | import jakarta.servlet.ServletException; 4 | import jakarta.servlet.http.HttpServlet; 5 | import jakarta.servlet.http.HttpServletRequest; 6 | import jakarta.servlet.http.HttpServletResponse; 7 | public class ErrorServlet extends HttpServlet { 8 | private static final long serialVersionUID = 1L; 9 | public void doGet(HttpServletRequest request, 10 | HttpServletResponse response) 11 | throws IOException, ServletException{ 12 | request.setCharacterEncoding("utf-8"); 13 | response.setContentType("text/html"); 14 | response.setCharacterEncoding("utf-8"); 15 | PrintWriter out = response.getWriter(); 16 | out.println(""); 17 | String ErrorMessage = request.getParameter("msg"); 18 | System.out.print("==="+ErrorMessage+"=="); 19 | if(null==ErrorMessage){ 20 | out.print("出错了"); 21 | } 22 | else if(ErrorMessage.equals("usernameExists")){ 23 | out.print("这个用户名已经存在,请重新选择!"); 24 | } 25 | else if(ErrorMessage.equals("usernameTooLong")){ 26 | out.print("用户名太长了,不能超过十个字符"); 27 | } 28 | else if(ErrorMessage.equals("err")){ 29 | out.print("出错了"); 30 | } 31 | out.print("返回注册页面"); 32 | out.println(""); 33 | } 34 | } 35 | 36 | -------------------------------------------------------------------------------- /oeasy/WEB-INF/classes/HelloWorld.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overmind1980/oeasy-linux-tutorial/e7d7bfc1e34fd26a6b6509e4725c5fc9befc5700/oeasy/WEB-INF/classes/HelloWorld.class -------------------------------------------------------------------------------- /oeasy/WEB-INF/classes/HelloWorldExample.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overmind1980/oeasy-linux-tutorial/e7d7bfc1e34fd26a6b6509e4725c5fc9befc5700/oeasy/WEB-INF/classes/HelloWorldExample.class -------------------------------------------------------------------------------- /oeasy/WEB-INF/classes/HelloWorldExample.java: -------------------------------------------------------------------------------- 1 | import java.io.IOException; 2 | import java.io.PrintWriter; 3 | import java.util.ResourceBundle; 4 | import jakarta.servlet.ServletException; 5 | import jakarta.servlet.http.HttpServlet; 6 | import jakarta.servlet.http.HttpServletRequest; 7 | import jakarta.servlet.http.HttpServletResponse; 8 | public class HelloWorldExample extends HttpServlet { 9 | 10 | private static final long serialVersionUID = 1L; 11 | 12 | @Override 13 | public void doGet(HttpServletRequest request, 14 | HttpServletResponse response) 15 | throws IOException, ServletException 16 | { 17 | response.setContentType("text/html"); 18 | response.setCharacterEncoding("UTF-8"); 19 | PrintWriter out = response.getWriter(); 20 | out.println("你好,tomcat!"); 21 | } 22 | } 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /oeasy/WEB-INF/classes/InsertServlet.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overmind1980/oeasy-linux-tutorial/e7d7bfc1e34fd26a6b6509e4725c5fc9befc5700/oeasy/WEB-INF/classes/InsertServlet.class -------------------------------------------------------------------------------- /oeasy/WEB-INF/classes/InsertServlet.java: -------------------------------------------------------------------------------- 1 | import java.sql.Connection; 2 | import java.sql.DriverManager; 3 | import java.sql.ResultSet; 4 | import java.sql.Statement; 5 | import java.io.IOException; 6 | import java.io.PrintWriter; 7 | import jakarta.servlet.ServletException; 8 | import jakarta.servlet.http.HttpServlet; 9 | import jakarta.servlet.http.HttpServletRequest; 10 | import jakarta.servlet.http.HttpServletResponse; 11 | public class InsertServlet extends HttpServlet { 12 | private static final long serialVersionUID = 1L; 13 | @Override 14 | public void doPost(HttpServletRequest request, 15 | HttpServletResponse response) 16 | throws IOException, ServletException{ 17 | request.setCharacterEncoding("utf-8"); 18 | response.setContentType("text/html"); 19 | response.setCharacterEncoding("UTF-8"); 20 | PrintWriter out = response.getWriter(); 21 | Connection c = null; 22 | Statement stmt = null; 23 | try { 24 | c = DBConUtil.getConn(); 25 | c.setAutoCommit(false); 26 | out.println("db connection is ok!!
"); 27 | stmt = c.createStatement(); 28 | String Username = request.getParameter("username"); 29 | String Password = request.getParameter("password"); 30 | if(Username!=null&&Username.length()>10){ 31 | System.out.println("=====yes username too loog"); 32 | DBConUtil.close(c,null,stmt,null); 33 | response.sendRedirect("http://localhost:8080/oeasy/error?msg=usernameTooLong"); 34 | } 35 | else{ 36 | ResultSet rs = stmt.executeQuery("select * from login where Username='"+Username+"'"); 37 | if(rs.next()){ 38 | DBConUtil.close(c,null,stmt,rs); 39 | response.sendRedirect("http://localhost:8080/oeasy/error?msg=usernameExists"); 40 | } 41 | else{ 42 | String sql = "insert into login(username,password) values('"+Username+"','"+Password+"');"; 43 | System.out.print("sql======================" + sql); 44 | stmt.executeUpdate(sql); 45 | DBConUtil.close(c,null,stmt,rs); 46 | response.sendRedirect("http://localhost:8080/oeasy/select"); 47 | } 48 | 49 | } 50 | } catch (Exception e) { 51 | e.printStackTrace(); 52 | System.err.println(e.getClass().getName() + ": " + e.getMessage()); 53 | response.sendRedirect("http://localhost:8080/oeasy/error?msg=err"); 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /oeasy/WEB-INF/classes/JNDIServlet.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overmind1980/oeasy-linux-tutorial/e7d7bfc1e34fd26a6b6509e4725c5fc9befc5700/oeasy/WEB-INF/classes/JNDIServlet.class -------------------------------------------------------------------------------- /oeasy/WEB-INF/classes/JNDIServlet.java: -------------------------------------------------------------------------------- 1 | import java.io.IOException; 2 | import java.io.PrintWriter; 3 | import java.util.ResourceBundle; 4 | import jakarta.servlet.ServletException; 5 | import jakarta.servlet.http.HttpServlet; 6 | import jakarta.servlet.http.HttpServletRequest; 7 | import jakarta.servlet.http.HttpServletResponse; 8 | import javax.naming.*; 9 | import com.mycompany.MyBean; 10 | public class JNDIServlet extends HttpServlet { 11 | 12 | private static final long serialVersionUID = 1L; 13 | 14 | @Override 15 | public void doGet(HttpServletRequest request, 16 | HttpServletResponse response) 17 | throws IOException, ServletException 18 | { 19 | System.out.println("OeasyServlet begin===="); 20 | response.setContentType("text/html"); 21 | response.setCharacterEncoding("UTF-8"); 22 | PrintWriter out = response.getWriter(); 23 | try{ 24 | Context initCtx = new InitialContext(); 25 | Context envCtx = (Context) initCtx.lookup("java:comp/env"); 26 | MyBean bean = (MyBean) envCtx.lookup("bean/MyBeanFactory"); 27 | 28 | out.println("foo = " + bean.getFoo() + ", bar = " + 29 | bean.getBar()); 30 | 31 | } 32 | catch(Exception e){ 33 | e.printStackTrace(); 34 | } 35 | System.out.println("OeasyServlet end===="); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /oeasy/WEB-INF/classes/OeasyServlet.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overmind1980/oeasy-linux-tutorial/e7d7bfc1e34fd26a6b6509e4725c5fc9befc5700/oeasy/WEB-INF/classes/OeasyServlet.class -------------------------------------------------------------------------------- /oeasy/WEB-INF/classes/OeasyServlet.java: -------------------------------------------------------------------------------- 1 | import java.io.IOException; 2 | import java.io.PrintWriter; 3 | import java.util.ResourceBundle; 4 | import jakarta.servlet.ServletException; 5 | import jakarta.servlet.http.HttpServlet; 6 | import jakarta.servlet.http.HttpServletRequest; 7 | import jakarta.servlet.http.HttpServletResponse; 8 | public class OeasyServlet extends HttpServlet { 9 | 10 | private static final long serialVersionUID = 1L; 11 | 12 | @Override 13 | public void doGet(HttpServletRequest request, 14 | HttpServletResponse response) 15 | throws IOException, ServletException 16 | { 17 | response.setContentType("text/html"); 18 | response.setCharacterEncoding("UTF-8"); 19 | PrintWriter out = response.getWriter(); 20 | out.println("你好,tomcat!"); 21 | } 22 | } 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /oeasy/WEB-INF/classes/PostgresJdbc.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overmind1980/oeasy-linux-tutorial/e7d7bfc1e34fd26a6b6509e4725c5fc9befc5700/oeasy/WEB-INF/classes/PostgresJdbc.class -------------------------------------------------------------------------------- /oeasy/WEB-INF/classes/PostgresJdbc.java: -------------------------------------------------------------------------------- 1 | import java.sql.Connection; 2 | import java.sql.DriverManager; 3 | import java.sql.ResultSet; 4 | import java.sql.Statement; 5 | 6 | public class PostgresJdbc { 7 | public static void main(String args[]) { 8 | Connection c = null; 9 | Statement stmt = null; 10 | try { 11 | Class.forName("org.postgresql.Driver"); 12 | c = DriverManager.getConnection( 13 | "jdbc:postgresql://localhost:5432/oeasy", "postgres", 14 | "oeasy@pg"); 15 | c.setAutoCommit(false); 16 | 17 | System.out.println("Pq Connection success!"); 18 | stmt = c.createStatement(); 19 | 20 | ResultSet rs = stmt.executeQuery("select * from urls"); 21 | while(rs.next()){ 22 | String topic = rs.getString("topic"); 23 | String url = rs.getString("url"); 24 | System.out.print(topic+":"+url+"\n"); 25 | } 26 | rs.close(); 27 | stmt.close(); 28 | c.close(); 29 | 30 | } catch (Exception e) { 31 | e.printStackTrace(); 32 | System.err.println(e.getClass().getName() + ": " + e.getMessage()); 33 | } 34 | System.out.println("Pq select query success!"); 35 | } 36 | } 37 | 38 | -------------------------------------------------------------------------------- /oeasy/WEB-INF/classes/RequestHeader.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overmind1980/oeasy-linux-tutorial/e7d7bfc1e34fd26a6b6509e4725c5fc9befc5700/oeasy/WEB-INF/classes/RequestHeader.class -------------------------------------------------------------------------------- /oeasy/WEB-INF/classes/RequestHeader.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | import java.util.*; 3 | import jakarta.servlet.*; 4 | import jakarta.servlet.http.*; 5 | 6 | public class RequestHeader extends HttpServlet { 7 | 8 | public void doGet(HttpServletRequest request, HttpServletResponse response) 9 | throws IOException, ServletException 10 | { 11 | response.setContentType("text/html"); 12 | PrintWriter out = response.getWriter(); 13 | Enumeration e = request.getHeaderNames(); 14 | while (e.hasMoreElements()) { 15 | String name = (String)e.nextElement(); 16 | String value = request.getHeader(name); 17 | out.println(name + " = " + value + "
"); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /oeasy/WEB-INF/classes/SelectServlet.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overmind1980/oeasy-linux-tutorial/e7d7bfc1e34fd26a6b6509e4725c5fc9befc5700/oeasy/WEB-INF/classes/SelectServlet.class -------------------------------------------------------------------------------- /oeasy/WEB-INF/classes/SelectServlet.java: -------------------------------------------------------------------------------- 1 | import java.sql.Connection; 2 | import java.sql.DriverManager; 3 | import java.sql.ResultSet; 4 | import java.sql.Statement; 5 | import java.sql.PreparedStatement; 6 | import java.io.IOException; 7 | import java.io.PrintWriter; 8 | import jakarta.servlet.ServletException; 9 | import jakarta.servlet.http.HttpServlet; 10 | import jakarta.servlet.http.HttpServletRequest; 11 | import jakarta.servlet.http.HttpServletResponse; 12 | public class SelectServlet extends HttpServlet { 13 | private static final long serialVersionUID = 1L; 14 | @Override 15 | public void doGet(HttpServletRequest request, 16 | HttpServletResponse response) 17 | throws IOException, ServletException 18 | { 19 | response.setContentType("text/html"); 20 | response.setCharacterEncoding("UTF-8"); 21 | PrintWriter out = response.getWriter(); 22 | out.println(""); 23 | Connection c = null; 24 | try { 25 | c = DBConUtil.getConn(); 26 | c.setAutoCommit(false); 27 | String SearchName = ""; 28 | String sql2 = "select * from login where username like ?"; 29 | PreparedStatement pstmt = c.prepareStatement(sql2); 30 | pstmt.setString(1,"%"+SearchName+"%"); 31 | ResultSet rs = pstmt.executeQuery(); 32 | while(rs.next()){ 33 | String username = rs.getString("username"); 34 | String password = rs.getString("password"); 35 | out.print(username+":"+password+"
"); 36 | } 37 | DBConUtil.close(c,pstmt,null,rs); 38 | } catch (Exception e) { 39 | e.printStackTrace(); 40 | System.err.println(e.getClass().getName() + ": " + e.getMessage()); 41 | } 42 | out.println("select query is ok!
"); 43 | out.println(""); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /oeasy/WEB-INF/classes/TestServlet.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overmind1980/oeasy-linux-tutorial/e7d7bfc1e34fd26a6b6509e4725c5fc9befc5700/oeasy/WEB-INF/classes/TestServlet.class -------------------------------------------------------------------------------- /oeasy/WEB-INF/classes/TestServlet.java: -------------------------------------------------------------------------------- 1 | import java.io.IOException; 2 | import java.io.PrintWriter; 3 | import jakarta.servlet.ServletException; 4 | import jakarta.servlet.http.HttpServlet; 5 | import jakarta.servlet.http.HttpServletRequest; 6 | import jakarta.servlet.http.HttpServletResponse; 7 | public class TestServlet extends HttpServlet { 8 | private static final long serialVersionUID = 1L; 9 | public void doPost(HttpServletRequest request, 10 | HttpServletResponse response) 11 | throws IOException, ServletException 12 | { 13 | response.setContentType("text/html"); 14 | request.setCharacterEncoding("utf-8"); 15 | PrintWriter out = response.getWriter(); 16 | out.println(""); 17 | String Username = request.getParameter("username"); 18 | String Password = request.getParameter("password"); 19 | out.print("用户名:"+Username); 20 | System.out.print("用户名:"+Username); 21 | out.print("密码"+Password); 22 | out.println(""); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /oeasy/WEB-INF/classes/UserManager.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overmind1980/oeasy-linux-tutorial/e7d7bfc1e34fd26a6b6509e4725c5fc9befc5700/oeasy/WEB-INF/classes/UserManager.class -------------------------------------------------------------------------------- /oeasy/oeasy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/overmind1980/oeasy-linux-tutorial/e7d7bfc1e34fd26a6b6509e4725c5fc9befc5700/oeasy/oeasy -------------------------------------------------------------------------------- /oeasy/oeasy.html: -------------------------------------------------------------------------------- 1 | oeasy 2 | -------------------------------------------------------------------------------- /oeasy/prepareAdd.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 请求参数示例 5 | 6 | 7 |
8 | addend1 9 | 10 |
11 | addend2 12 | 13 |
14 | 15 |
16 | 17 | 18 | -------------------------------------------------------------------------------- /oeasy/prepareInsert.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Login 6 | 12 | 13 | 14 |

login

15 |
16 | username 17 |
18 | password 19 |
20 | password2 21 |
22 | 23 | 24 |
25 | 26 | 27 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /test.txt: -------------------------------------------------------------------------------- 1 | test 2 | -------------------------------------------------------------------------------- /test2.csv: -------------------------------------------------------------------------------- 1 | 01-45529-000101 什么是内核 uname.sy.md 2 | 02-45530-000102 什么是发行版 distro.sy.md 3 | 03-45531-000103 我在哪 pwd.sy.md 4 | 04-45532-000104 灵魂之问 whatis.sy.md 5 | 05-45533-000105 详查手册 man.sy.md 6 | 06-45534-000106 这儿都有啥 ls.sy.md 7 | 07-45535-000107 那啥在哪 whereis.sy.md 8 | 08-45536-000108 到底哪个 which.sy.md 9 | 09-45537-000109 清屏 clear.sy.md 10 | 10-48362-000110 命令行总结 summary.sy.md 11 | 11-45538-000201 持续输出 yes.sy.md 12 | 12-45541-000202 软件包管理 apt.sy.md 13 | 13-45542-000203 标志 linuxlogo.sy.md 14 | 14-45568-000204 字符画 figlet.sy.md 15 | 15-45569-000205 风格文字 toilet.sy.md 16 | 16-45571-000206 蒸汽机车 sl.sy.md 17 | 17-45574-000207 黑客帝国 cmatrix.sy.md 18 | 18-45572-000208 满屏乱码 bb.sy.md 19 | 19-45570-000209 装酷屏幕 hollywood.sy.md 20 | 20-45581-000210 应用管理 aptitude.sy.md 21 | 21-45575-000211 牛说 cowsay.sy.md 22 | 22-45578-000212 管道 pipe.sy.md 23 | 23-45576-000213 中文输入 fcitx.sy.md 24 | 24-48588-000214 字符图 asciiview.sy.md 25 | 25-48590-000215 随机笑话 fortune.sy.md 26 | 26-45580-000216 中文诗词 fortune-zh.sy.md 27 | 27-209842-000217 分屏工具 tmux.sy.md 28 | 28-45583-000301 桌面宠物 pet.sy.md 29 | 29-45586-000302 火狐 firefox.sy.md 30 | 30-45587-000303 文件管理器 nautilus.sy.md 31 | 31-45579-000304 用户界面 xfce.sy.md 32 | 32-45566-000305 总结 Summary.sy.md 33 | 33-199464-000218_数据库_postgres.sy.md 34 | 34-192426-nginx.sy.md 35 | 35-260422-apache.sy.md 36 | 36-199465-tomcat源起.sy.md 37 | 37-260421-tomcat结构.sy.md 38 | 38-526680-徒手建立应用.sy.md 39 | 39-260423-搭建开发环境.sy.md 40 | 40-265117-调试模式_debug_mode_log日志.sy.md 41 | 41-261125-前端和后端.sy.md 42 | 42-485593-双层架构(2-tier).sy.md 43 | 43-485612-请求和响应.sy.md 44 | 44-495450-请求参数.sy.md 45 | 45-498649-处理异常.sy.md 46 | 46-200308-连接postgresql数据库引擎.sy.md 47 | 47-527010-通过驱动访问postgres数据库引擎.sy.md 48 | 48-527011-JDBC理解.sy.md 49 | 49-263205-通过动态页面访问postgres数据库引擎.sy.md 50 | 50-263206-自动加载更新的class(tomcat无需重启).sy.md 51 | 51-263207-修改表结构.sy.md 52 | 52-265977-管理约束条件CONSTRAINT.sy.md 53 | 53-527013-使用jdbc向数据库插入数据.sy.md 54 | 54-527012-使用servlet向数据库插入数据.sy.md 55 | 55-527130-响应重定向.sy.md 56 | 56-264932-使用网页提交数据_文本框post提交表单.sy.md 57 | 57-266982-使用网页插入数据库.sy.md 58 | 58-263308-先查再插入.sy.md 59 | 59-271131-文本框前端验证.sy.md 60 | 60-263208-密码二次输入验证复杂性.sy.md 61 | 61-483456-封装数据库连接.sy.md 62 | 62-483477-PrepareStatement准备语句.sy.md 63 | 63-484450-JNDI.sy.md 64 | 64-485586-JDBC数据库连接池.sy.md 65 | 65-497989-准备删除.sy.md 66 | README.md 67 | --------------------------------------------------------------------------------