{"id":13476758,"url":"https://github.com/you-dont-need/You-Dont-Need-GUI","last_synced_at":"2025-03-27T04:30:55.307Z","repository":{"id":37431199,"uuid":"68442509","full_name":"you-dont-need/You-Dont-Need-GUI","owner":"you-dont-need","description":"Stop relying on GUI; CLI **ROCKS**","archived":false,"fork":false,"pushed_at":"2023-12-05T19:59:55.000Z","size":304,"stargazers_count":5481,"open_issues_count":10,"forks_count":235,"subscribers_count":59,"default_branch":"master","last_synced_at":"2024-10-29T15:34:30.575Z","etag":null,"topics":["cli","command","command-line","command-line-tool","commandline","commands","gui","hacktoberfest","linux","lists","mac","macos","resources"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/you-dont-need.png","metadata":{"files":{"readme":"readme-zh_CN.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2016-09-17T09:06:53.000Z","updated_at":"2024-10-27T10:23:24.000Z","dependencies_parsed_at":"2023-02-18T03:46:23.162Z","dependency_job_id":"da8c88c4-7676-40e3-927a-9132bfdfe0d6","html_url":"https://github.com/you-dont-need/You-Dont-Need-GUI","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/you-dont-need%2FYou-Dont-Need-GUI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/you-dont-need%2FYou-Dont-Need-GUI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/you-dont-need%2FYou-Dont-Need-GUI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/you-dont-need%2FYou-Dont-Need-GUI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/you-dont-need","download_url":"https://codeload.github.com/you-dont-need/You-Dont-Need-GUI/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245784795,"owners_count":20671619,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","command","command-line","command-line-tool","commandline","commands","gui","hacktoberfest","linux","lists","mac","macos","resources"],"created_at":"2024-07-31T16:01:34.229Z","updated_at":"2025-03-27T04:30:54.856Z","avatar_url":"https://github.com/you-dont-need.png","language":null,"funding_links":[],"categories":["Others","Command Line","工具选择","cli"],"sub_categories":["You-Dont-Need"],"readme":"# 有了 CLI，还要什么 GUI\n\n[![加入Spectrum社群（英文）](https://withspectrum.github.io/badge/badge.svg)](https://spectrum.chat/you-dont-need/GUI)\n\n\u003cdetails\u003e\n给新手用的命令行常用工具介绍 :)\n\u003c/details\u003e\n\u003cbr/\u003e\n\n图形用户操作界面（Graphical User Interfaces, GUI）对用户很友好，易于上手，没有命令行操作界面（Command-Line Interfaces, CLI）这么陡峭的学习曲线。\n\n![Xerox Star 8010 工作站](./Xerox_Star_8010_workstations.jpg)\n\n但事实上，他们通常会消耗更多的计算资源，并且在自动化处理方面不如 CLI 那么容易且强大。\n\n作为计算机专家，我们希望工作做得又快又好。当然我们也知道各种“黑话”一样的命令行可能不那么容易发现或者记住，所以我们试着在这儿列举一些常见的 GUI 操作是如何在 CLI 实现的。\n\n\u003ch2\u003e 快速跳转 \u003c/h2\u003e\n\n- [拷贝一个文件](#拷贝一个文件)\n- [创建文件副本](#创建文件副本)\n- [拷贝一个目录](#拷贝一个目录)\n- [创建目录副本](#创建目录副本)\n- [移动一个文件](#移动一个文件)\n- [重命名文件](#重命名文件)\n- [移动一个目录](#移动一个目录)\n- [重命名目录](#重命名目录)\n- [合并目录文件](#合并目录文件)\n- [创建新文件](#创建新文件)\n- [创建新目录](#创建新目录)\n- [显示文件或目录大小](#显示文件或目录大小)\n- [显示文件或目录其他信息](#显示文件或目录其他信息)\n- [用默认程序打开文件](#用默认程序打开文件)\n- [压缩整个目录](#压缩整个目录)\n- [解压目录的压缩包](#解压目录的压缩包)\n- [速览压缩包中文件](#速览压缩包中文件)\n- [删除一个文件](#删除一个文件)\n- [删除一个目录](#删除一个目录)\n- [显示目录中文件](#显示目录中文件)\n- [显示目录下所有文件和子目录的文件树](#显示目录下所有文件和子目录的文件树)\n- [找出陈旧文件](#找出陈旧文件)\n- [显示日历](#显示日历)\n- [计算未来日期](#计算未来日期)\n- [使用计算器](#使用计算器)\n- [强制退出应用程序](#强制退出应用程序)\n- [查看服务器响应](#查看服务器响应)\n- [查看文件内容](#查看文件内容)\n- [检索文本内容](#检索文本内容)\n- [查看一张图片](#查看一张图片)\n- [查看磁盘大小](#查看磁盘大小)\n- [查看CPU使用率及进程内存等](#查看CPU使用率及进程内存等)\n- [检查域名或地址某端口是否能连接上](#检查域名或地址某端口是否能连接上)\n- [查看域名的DNS配置](#查看域名的DNS配置)\n- [查看域名所有人和注册信息](#查看域名所有人和注册信息)\n- [技巧小贴士](#技巧小贴士)\n- [热键](#热键)\n- [我记不住这些神秘指令怎么办呢？](#我记不住这些神秘指令怎么办呢)\n\n## 拷贝一个文件\n\n**别再用拖拽或者 `CMD`/`CTRL` + `C`, `CMD`/`CTRL` + `V` 来复制文件了！** :-1:\n\n将 `readme.txt` 拷贝到 `documents` 目录下\n\n```shell\n$ cp readme.txt documents/\n```\n\n## 创建文件副本\n\n**不要再用`右键`来创建副本了！** :-1:\n\n```shell\n$ cp readme.txt readme.bak.txt\n```\n\n更高级的写法：\n\n```shell\n$ cp readme{,.bak}.txt\n# 注: 注意这里的 {} 起什么作用，可以试试 touch foo{1,2,3}.txt 然后看看结果如何\n```\n\n## 拷贝一个目录\n\n**也别拖拽目录了，也不要 `CMD`/`CTRL` + `C`, `CMD`/`CTRL` + `V` 来拷贝目录了！** :-1:\n\n把 `myMusic` 整个目录拷贝到 `myMedia` 目录下面\n\n```shell\n$ cp -a myMusic myMedia/\n# 或者你也可以写成\n$ cp -a myMusic/ myMedia/myMusic/\n```\n\n## 创建目录副本\n\n**也别用`右键`来创建目录副本了** :-1:\n\n```shell\n$ cp -a myMusic/ myMedia/\n# 如果 `myMedia` 文件夹不存在的话\n$ cp -a myMusic myMedia/\n```\n\n## 移动一个文件\n\n**没有什么拖拽文件，也没有 `CMD`/`CTRL` + `X`, `CMD`/`CTRL` + `V` 来剪切** :-1:\n\n```shell\n$ mv readme.txt documents/\n```\n\n**一定** 要在移动文件时在目标目录的最后加上斜杠`/`。（[不然的话](http://unix.stackexchange.com/a/50533)，简言之会被当作[这样](#重命名文件)）\n\n## 重命名文件\n\n**别用`右键`-`重命名`了！** :-1:\n\n```shell\n$ mv readme.txt README.md\n```\n\n## 移动一个目录\n\n**没有了拖拽文件夹，也没有 `CMD`/`CTRL` + `X`, `CMD`/`CTRL` + `V`** :-1:\n\n```shell\n$ mv myMedia myMusic/\n# 或者也可以写成\n$ mv myMedia/ myMusic/myMedia\n```\n\n## 重命名目录\n\n**也别`右键`文件夹然后`重命名`了** :-1:\n\n```shell\n$ mv myMedia/ myMusic/\n```\n\n## 合并目录文件\n\n**别再用拖拽来合并目录了！** :-1:\n\n```shell\n$ rsync -a /images/ /images2/   # 注: 当心！！同名的文件会被覆盖掉!\n```\n\n## 创建新文件\n\n**别再用`右键`来新建文件了！** :-1:\n\n```shell\n$ touch 'new file'    # 如果文件已经存在，会更新它的权限和修改日期\n# 或者也可以用\n$ \u003e 'new file'        # 注: 如果文件已经存在，会清空里面内容\n```\n\n## 创建新目录\n\n**也别用`右键`来新建目录了！** :-1:\n\n```shell\n$ mkdir 'untitled folder'\n# 或者可以用下面这样的写法新建一连串文件夹\n$ mkdir -p 'path/may/not/exist/untitled\\ folder'\n```\n\n## 显示文件或目录大小\n\n**别再用`右键`点开来看属性了！** :-1:\n\n```shell\n$ du -sh node_modules/\n```\n\n## 显示文件或目录其他信息\n\n**真的别用`右键`了！** :-1:\n\n```shell\n$ stat -x readme.md   # macOS 系统\n$ stat readme.md      # Linux 系统\n```\n\n## 用默认程序打开文件\n\n**没有双击，没有双击，没有双击** :-1:\n\n```shell\n$ xdg-open file   # Linux 系统\n$ open file       # MacOS 系统\n```\n\n## 压缩整个目录\n\n**别再用`右键`-`压缩`了！** :-1:\n\n```shell\n$ zip -r archive_name.zip folder_to_compress\n```\n\n## 解压目录的压缩包\n\n**也别用`右键`-`解压`了！** :-1:\n\n```shell\n$ unzip archive_name.zip\n```\n\n## 速览压缩包中文件\n\n**我们不要`WinRAR`** :-1:\n\n```shell\n$ zipinfo archive_name.zip\n# 或者也可以用\n$ unzip -l archive_name.zip\n```\n\n## 删除一个文件\n\n**别再`右键`然后永久删除文件了！** :-1:\n\n```shell\n$ rm my_useless_file\n```\n\n非常重要：`rm` 指令会把 `my_useless_file` 永久删除，和把它移到回收站后再点 `清空回收站` 一样的效果！\n\n## 删除一个目录\n\n**也别再`右键`然后永久删除目录了！** :-1:\n\n```shell\n$ rm -r my_useless_folder\n```\n\n## 显示目录中文件\n\n**别打开你的`访达`或者`文件浏览器`** :-1:\n\n```shell\n$ ls my_folder        # 简简单单\n$ ls -la my_folder    # -l: 以列表格式显示. -a: 显示包括隐藏文件的所有文件. -la 结合以上两个选项.\n$ ls -alrth my_folder # -r: 倒序显示. -t: 按修改时间排序. -h: 以易读的格式显示大小.\n```\n\n## 显示目录下所有文件和子目录的文件树\n\n**别打开你的`访达`或者`文件浏览器`** :-1:\n\n```shell\n$ tree                                                        # Linux 系统\n$ find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'      # MacOS 系统\n# 注: 安装 homebrew (https://brew.sh) 后能让你在 MacOS 上也能用（部分） Linux 的功能（比如 tree）. 安装方法见下\n# brew install tree\n```\n\n## 找出陈旧文件\n\n**别用你的文件浏览器！** :-1:\n\n找出所有最近一次修改在 5 天之前的文件\n\n```shell\n$ find my_folder -mtime +5\n```\n\n## 显示日历\n\n**别用日历小部件来看几月几号是星期几了！** :-1:\n\n显示一个文本风格的日历\n\n```shell\n$ cal\n```\n\n显示特定月份和年份的日历\n\n```shell\n$ cal 11 2018\n```\n\n## 计算未来日期\n\n**别用在线日期计算器来干这活了！** :-1:\n\n查看今天的日期\n\n```shell\n$ date +%m/%d/%Y\n```\n\n查看一周后的日期\n\n```shell\n$ date -d \"+7 days\"    # Linux 系统\n$ date -j -v+7d        # MacOS 系统\n```\n\n## 使用计算器\n\n**真的，抛开那些计算器小部件吧** :-1:\n\n```shell\n$ bc\n```\n\n## 强制退出应用程序\n\n**别用 `CTRL` + `ALT` + `DELETE` 再选要终止的程序那一套了！** :-1:\n\n```shell\n$ killall program_name\n```\n\n## 查看服务器响应\n\n**而不用开浏览器！** :-1:\n\n```shell\ncurl -i umair.surge.sh\n# curl 指令的 -i (--include) 选项会在让它输出中包含 HTTP 的响应头.\n```\n\n## 查看文件内容\n\n**不需要双击** :-1:\n\n```shell\n$ cat apps/settings.py\n# 如果文件太大，一页显示不下的话，你可以使用一个\"翻页软件\" (less) 来一次查看一页内容\n$ less apps/settings.py\n```\n\n## 检索文本内容\n\n**别用 `CMD`/`CTRL` + `F` 哦** :-1:\n\n```shell\n$ grep -i \"Query\" file.txt\n```\n\n![grep](./grep.jpg)\n\n说明：`grep`能在文件中检索特定内容，图中是一些常见的配套命令行参数\n\n- `-i`：大小写敏感\n- `-A`/`-B`/`-C` `\u003cN\u003e`：顺带显示前后文，`-A`表示后面 N 行，`-B`表示前面 N 行，`-C`表示前后各 N 行\n- `-E`：使用正则表达式来匹配\n- `-v`：反选（输出不匹配的行）\n- `-l`：只输出能匹配到内容的**文件名**\n- `-F`：不要将检索内容视为正则表达式\n- `-r`：递归匹配目录下所有文件的内容\n- `-o`：只输出匹配上了的部分（而不是整行）\n- `-a`：也对二进制文件进行检索，而不是忽略它们！\n\n你也可以用别的一些指令来替代`grep`，比如`ack`，`ag`和`ripgrep`（更适合检索代码文本）\n\n## 查看一张图片\n\n**停止你的打开文件预览的行为！** :-1:\n\n```shell\n$ imgcat image.png\n# 注: 需要 iTerm2 终端程序（仅MacOS）.\n```\n\n## 查看磁盘大小\n\n**别`右键`点磁盘图标，也别开什么磁盘工具，想都别想！** :-1:\n\n```shell\n$ df -h\n```\n\n## 查看CPU使用率及进程内存等\n\n**别开你的`活动监视器`和什么`任务管理器`！** :-1:\n\n```shell\n$ top\n```\n如果你想要更详细的内容:\n```shell\n$ htop\n```\n\n## 检查域名或地址某端口是否能连接上\n\n**别再使用`网络实用工具`了**\n\n```shell\n$ nc -vz www.google.com 443\n$ nc -vz 1.1.1.1 53\n```\n\n## 查看域名的DNS配置\n\n**别再使用`网络实用工具`了**\n\n```shell\n$ dig www.google.com\n```\n\n## 查看域名所有人和注册信息\n\n**别再使用`网络实用工具`和那些域名注册商的网站了**\n\n```shell\n$ whois www.google.com\n```\n\n## 技巧小贴士\n\n![CLI tips](./cli_tips.jpg)\n\n给 macOS 用户准备的，但是`bash`命令行环境应该也会有别的\n\n```shell\n$ !!                            # 再一次执行上一条指令\n$ sudo !!                       # 以管理员身份执行上一条指令\n$ !\u003cword\u003e                       # 加上特定命令行前缀再执行上一条指令\n$ !\u003cword\u003e:p                     # 显示上一条指令加上前缀，但不要执行\n$ \u003cspace\u003ecommand                # 执行指令，但不要存到历史记录中\n$ echo \"ls -l\" | at midnight    # 在特定时间执行指令\n$ caffeinate -u -t 3600         # 接下来一小时内阻止你的mac休眠\n$ ls -lhs                       # 将目录中文件按大小排序显示\n$ qlmanage -p \u003cfile\u003e            # 从命令行调用\"速览\"\n$ top -o vsize                  # 查看是什么拖慢了你的mac\n```\n\n## 热键\n\n```\nCtrl + A  跳转到你当前编辑的命令行行首\nCtrl + E  跳转到你当前编辑的命令行行尾\nCtrl + L  清屏，和 clear 指令类似\nCtrl + U  清除行中光标之前的内容（在行尾时即清除整行）\nCtrl + H  和退格一样\nCtrl + R  能让你搜索之前使用过的命令行记录\nCtrl + C  强制停止当前的程序\nCtrl + D  退出当前 shell （壳层/命令行界面）\nCtrl + Z  将当下运行的程序挂起，使用 fg 来恢复运行\nCtrl + W  删除光标前的一个词\nCtrl + K  清除行中光标之后的内容\nCtrl + T  交换光标前两个字符\nEsc + T   交换光标前两个词\nAlt + F   将光标移至行内下一个词处\nAlt + B   将光标移至行内上一个词处\nTab       自动补全文件/目录的名称\n```\n\n## 我记不住这些神秘指令怎么办呢？\n\n善用谷歌或者 `man` 指令来查看你不熟悉的那些指令。或者你也可以尝试 [`tldr`](https://github.com/tldr-pages/tldr)，这是一个由社区提供支持的简化后的 `man` 帮助页面合集。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyou-dont-need%2FYou-Dont-Need-GUI","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyou-dont-need%2FYou-Dont-Need-GUI","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyou-dont-need%2FYou-Dont-Need-GUI/lists"}