cli-for-beginners

#完全新手的命令行 對於完全新手的命令行使用介紹 電腦很棒,因為使用滑鼠或觸控設備,我們可以做很多工作,鍵盤只需用來打字電子郵件、部落格文章或報告。 很久以前,這種情況並不存在。電腦只能通過鍵盤訪問,輸入奇怪和神秘的指令,稱為命令,這是真實存在的尤其是當電腦體積如整個房間般巨大時,但也適用於第一批價格合理的個人電腦,當你啟動時會跳出一個BASIC命令提示符。 如今,電腦界已將這種方式藏得好好的,消費者根本不會用到。 我們可以使用終端來實現這一點。 macOS自帶一個名為終端的應用程序。 微軟提供了一個名為Windows終端的應用程序。 而Linux用戶對其終端非常熟悉。 終端並不僅僅適用於程序員,對於每個專業電腦用戶來說也是必不可少的,因為它能為你提供無法在GUI(圖形用戶界面)中實現的功能。 哦,我提到了GUI。終端的首字母縮寫是CLI(命令行界面)。 并非只有一個終端。這是你的心願。相反,我們有很多不同的終端界面,稱為shell。 我們有Bash,ZSH,Fish Shell,CSH等等。但最流行的是Bash和ZSH。 Bash通常是默認的終端,直到最近才被更改為ZSH。 老實說,我最喜歡的shell是Fish Shell。我真的很喜歡它,因為它簡單、直接,帶有很好的默認設置,還有一個基於Web的配置。我沒有時間手動配置我的shell提示符和顏色,當某些東西安裝好可以直接用的時候,我會用上它。 終端也是你訪問服務器的方式。你可以在Amazon或DigitalOcean等地創建一個VPS服務器,然後使用SSH(連接到遠程shell的安全協議)來訪問它。 你在本地使用終端,但事實上你可能連接到地球的另一邊的服務器,這真是太酷了。除了一點延遲,如果連接有點滯後。 這是我的macOS終端: 通過輸入ls並按下回車,我可以列出我的主文件夾中的所有文件: 我可以使用cd命令將當前工作目錄更改為其他文件夾: 每次我不知道如何使用一個命令時,我都會輸入man <command>以獲取說明文檔: 這是一個說明文檔。盡管我認為說明文檔包含了太多的信息,比如ls命令的說明就佔用了14屏幕。 大多數時候,我需要時使用了這個網站,叫做tldr頁面:https://tldr.sh/。這是一個你可以安裝的命令,然後像這樣運行它:tldr <command> 它只給了我一些有用的選項和示例。 無論如何,我有點離題了。在輸入命令時,你可以使用左右箭頭來移動光標。 一些系統也允許你使用鼠標移動到行中的特定位置。例如,在macOS上,我可以使用選項-click在我想要的任何位置放置光標。 按上箭頭將顯示你上次輸入過的命令。當你打錯字時,你不需要重新輸入整個命令,這很方便。 如果輸入了一個找不到的命令,shell會告訴你: 我做了一些關於使用shell的教程: 如何使用macOS終端 Bash shell Unix Shells教程 Bash Shell腳本編程入門 如果你想了解更多,那裡有很多閱讀材料!

Go CLI 教程:Fortune 克隆

我之前写了两篇 CLI 应用的教程,分别是构建 gololcat 和 gocowsay。在这两篇教程中,我都使用了 fortune 作为输入生成器。 在本文中,我将用 Go 完成这个“管道三部曲”的最后一部分 - gofortune。 首先,什么是 fortune?参考 维基百科的定义,Fortune 是一款简单的程序,从一个引述数据库中随机显示一条信息。 说简单点,它是一个随机引述生成器。 它的历史可以追溯到 Unix Version 7 (1979)。至今仍然广泛应用。许多 Linux 发行版都默认安装了它,而在 MacOS 上,可以通过 brew install fortune 命令进行安装。 在某些系统上,它还会在使用 shell 时作为欢迎语或告别语。 维基百科上还提到: 许多人选择将 fortune 输入到 cowsay 命令中,以增添对话的幽默感。 而对于我来说,我会使用我的 gocowsay 命令。 好了,先到这里,让我们用 Go 构建一个 Fortune 的克隆版本。 下面是程序的功能概述。 fortunes 文件夹的位置与系统和发行版有关,可以使用构建标志硬编码它,或者使用环境变量。但为了锻炼,我要做一件“肮脏”的事情,直接询问 fortune,通过执行 fortune -f 命令,并得到如下输出: 输出的第一行包含 fortunes 文件夹的路径。 package main import ( "fmt" "os/exec" ) func main() { out, err := exec....

npm 全局或本地安裝套件

套件最適合全局安裝的時機是什麼?為什麼? 本地套件和全局套件的主要區別如下: 本地套件 安裝在執行 npm install <package-name> 的目錄中,並且放置在該目錄下的 node_modules 文件夾中 全局套件 則放置在系統的一個統一場所(具體位置取決於你的配置),不論你在何處運行 npm install -g <package-name> 在你的代碼中,它們的引用方式是一樣的: require('package-name') 那麼什麼時候應該選擇哪種安裝方式呢? 一般而言,所有套件都應該本地安裝。 這樣確保你的電腦中可以有數十個應用程序,每個應用程序都可以運行其所需的不同版本的每個套件。 如果更新一個全局套件,則會使所有專案都使用新的版本,在維護方面可能會帶來一些麻煩,因為某些套件可能與其他依賴關係不相容等等。 每個專案都有自己的本地版套件,即使看起來可能會浪費資源,但與可能產生的負面後果相比,這是微不足道的。 當一個套件提供一個可從 shell(CLI)執行的可執行命令且在多個專案中重複使用時,應該全局安裝該套件。 你也可以本地安裝可執行命令並使用 npx 執行它們,但有些套件最好還是全局安裝。 一些你可能已經全局安裝的流行套件示例包括: npm create-react-app vue-cli grunt-cli mocha react-native-cli gatsby-cli forever nodemon 你可能已經在你的系統上全局安裝了一些套件。你可以在命令行中運行以下命令來查看它們: npm list -g --depth 0

使用 Go 可視化您的本地 Git 貢獻

使用 Go 撰寫 Git 統計分析 CLI 工具的教程 幾年前,我使用 Electron + Meteor.js + gitlog 桌面應用程式掃描了我的本地 Git 存儲庫,並為我提供了一個漂亮的貢獻圖,就像 GitHub.com 上顯示的那樣: 那是在每個應用程序都使用 Electron 之前,由於生成的應用程序大小,我非常不喜歡這種方法,如果與基於 WebKit 的 MacGap 相比較,它的大小要大 50 倍。不管怎樣,它看起來像這樣,具有類似 GitHub 的用戶界面: 我發現它很有用,因為不是所有的項目都在 GitHub 上,一些項目位於 BitBucket 或 GitLab 上,但我所工作的所有代碼都在我的筆記本電腦上,所以這便是“事實的單一來源”。 該應用程序仍在運行,但尚未釋放給大眾使用。 今天我決定將其作為 Go 控制台命令進行移植,因為我仍認為這個概念很好。 本文中要建立的內容 🎉 一個類似下圖的CLI命令,生成類似的圖表 在哪裡可以找到這段程式碼 該程式碼在此 Gist 鏈接上: https://gist.github.com/flaviocopes/bf2f982ee8f2ae3f455b06c7b2b03695 首先的步驟 我將任務分為兩部分: 1.獲取要掃描的文件夾列表 2.生成統計信息 我將使用 Go 命令行標記解析 來讓一個單一命令執行這兩個任務。當傳遞 -add 標記時,該命令將添加新的文件夾到列表中。在沒有標記的情況下執行該命令將生成圖表。為了避免一次性為用戶輸出過多數據,我將限制數據集的時間範圍在過去的 6 個月內。 讓我們為此分層概念撰寫一個簡單的外殼: package main import ( "flag" ) // scan given a path crawls it and its subfolders // searching for Git repositories func scan(path string) { print("scan") } // stats generates a nice graph of your Git contributions func stats(email string) { print("stats") } func main() { var folder string var email string flag....

使用命令行操作 Docker 容器

Docker Desktop 应用程序非常方便地通过图形界面操作容器。 您并不需要使用它,您也可以使用命令行工具操作。 docker ps 命令可以列出当前正在运行的容器: 这与运行 docker container ls 命令相同。 在这个例子中,容器名称为 node-app,ID 为 739037a911e0,由镜像 examplenode 创建,创建时间为 4分钟前,启动时间为 4分钟,并且主机机器的端口80映射到容器端口3000,使用的是TCP协议。 当您知道容器的 ID 时,可以通过运行以下命令停止容器: docker container stop <ID> 容器停止后,可以使用 docker container ls -a 命令查看它: 您可以使用 docker container rm 命令删除它: docker container rm <ID> 您可以使用 docker inspect 命令查看容器的所有详细信息: 另一个非常有用的命令是 docker info,它可以提供有关当前 Docker 安装状态的大量信息,包括容器和镜像的数量。

在Node中从命令行接受输入

如何使用内置的readline Node模块使Node.js CLI程序具有交互性 如何使Node.js CLI程序具有交互性? Node自版本7开始提供了readline模块,可以实现从可读流(比如process.stdin流,它在Node程序执行期间是终端输入)逐行获取输入。 const readline = require('readline').createInterface({ input: process.stdin, output: process.stdout }) readline.question(`What's your name?`, (name) => { console.log(`Hi ${name}!`) readline.close() }) 这段代码会询问用户名,一旦文本被输入,并且用户按下回车键,我们会发送一条问候语。 question()方法会展示第一个参数(一个问题),并且等待用户输入。一旦按下回车键,它会调用回调函数。 在这个回调函数中,我们关闭了readline接口。 readline还提供了其他几个方法,我会让你自己在我上面提供的包文档中去查阅。 如果你需要输入密码,最好不要将其回显,而是显示为*符号。 最简单的方法是使用readline-sync包,它在API方面与上述方法非常相似,并且直接处理了这个问题。 一个更完整和抽象的解决方案则是由Inquirer.js包提供。 你可以使用npm install inquirer进行安装,然后你可以像这样重现上面的代码: const inquirer = require('inquirer') var questions = [{ type: 'input', name: 'name', message: "What's your name?", }] inquirer.prompt(questions).then(answers => { console.log(`Hi ${answers['name']}!`) }) Inquirer.js可以让你做很多事情,比如提问多个选择、使用单选按钮、确认等等。 值得知道所有的选择,尤其是Node提供的内置选择,但如果你计划将CLI输入推向一个新的层次,Inquirer.js是一个优秀的选择。

程式設計入門

這篇文章是一個完整的程式設計入門課程。 一般的程式設計。 在開始學習特定的程式語言之前,有一些基本概念你需要熟悉。這些概念並不依賴於特定的程式語言,但對每個開發者來說都是必要的。 如果你是程式設計的新手,這篇文章的目標是幫助你準備並提供基本的概念。 具體來說,你將學習以下內容: 什麼是電腦 什麼是程式 什麼是程式語言 作為一個程式設計師的工作 作為一個程式設計師不需要做的事情 不同的程式設計範式 可以使用的不同程式設計語言,以及應該選擇哪一個 什麼是錯誤 以及更多! 為什麼你應該成為一個程式設計師? 我教學程式設計,每天收到很多電子郵件。我和很多程式設計師和想成為程式設計師的人都有很好的交流。 我對於如何讓人們學習程式設計有一個很好的理解。 人們想要建立自己夢寐以求的應用程式。他們想要將這個項目變成現實,想要實現他們的夢想。在您的電腦或手機上運行的應用程式,創建您和朋友夢想中的遊戲! 人們想以興趣的形式學習這個技能。我與70和80歲的人交談過,他們正在學習編程。出於娛樂。享受新的挑戰。為他們的朋友創建一個應用程式。 人們想在技術方面開始一個新職業。這並不奇怪 - 程式設計作為一份工作非常有吸引力:需求量很大,工作在室內,平均工資也不錯。當然,這取決於地點和水平。你也可以遠程工作,這是我認為的一個巨大的優勢。 當然,這只是其中的3個例子。你可能有不同的需求,但無論需求是什麼,學習程式設計絕對是一個你將來希望擁有的技能。 成為一個程式設計師所需要的 你不需要成為一個計算機科學家或學習工程學,也不需要成為數學天才才能學習程式設計。 這是一個你可以隨時學習的技能,無論年齡如何,而且 - 讓我說 - 它是一個非常棒的技能。 從零開始成為一個程式設計師只需要四件事: 耐心 專注力 時間 一致性 這就是你所需要的一切。 耐心,因為每次學到一些新知識時,你需要耐心,一步一步地學習,直到能夠把知識點連接起來。 專注力,因為它絕對不是一個容易掌握的技能。 時間,因為學習需要時間。在編程方面,你有時候會卡在某些問題上,需要一些時間進行研究。一個優秀的程式設計師在思考問題的時間和編程的時間上花費的時間是相等的。 一致性,因為如果你每天都能花一點時間,比如1或2小時,學習編程,你將在短時間內成為一個優秀的程式設計師。 哦,你可能也需要一台電腦。任何適度新的電腦都足夠好,你並不需要一台高級的MacBook Pro。別把這個當作藉口:) 一台電腦如何工作?概覽 當我說電腦時,我指的是每一個可以編程的電子設備:筆記本電腦和桌上型電腦,智能手機,智能手錶,您的汽車,洗碗機,相機,甚至像狗的GPS裝置這樣的小東西。許多事物,對吧?我們周圍都是電腦。 計算機是由程序驅動的電子設備。從20世紀中葉以來,程序員一直在努力使計算機速度更快,並且更容易和更可靠地編程。 機器是愚蠢的。它們只能遵循您的指示。它們真的無法思考或做決定。它們只能遵循您的指示,所以作為一個程式設計師,您就成為了一個非常強大的人。 我們稱計算機的電子部分為硬體,程序部分稱為軟體。 當您編寫一個程式給計算機時,您提供的指令會被轉換成位元,這是電子設備可以理解的唯一內容。位元只能具有兩個值:0和1。 當您查看電腦或智能手機時,您會看到一個漂亮的界面。這是多年演變的結果。在其後,每秒執行數百萬次指令,為您提供附近最佳餐廳列表。它通過與網絡溝通實現,這是我們人類建造的最大的人工生態系統。 涵蓋計算機如何工作(以及計算機網絡)將需要很多時間。在這個簡要的概述之後,我將重點放在軟體部分上。 關於程式 現在讓我們來看看什麼是程式。你的瀏覽器(Chrome,Firefox或你使用的那個)就是一個程式。 這個網站是應用程式生成的一個程式使它成為可能。我提供內容,程式生成HTML頁面。 你的手機由一個名為iOS或Android的大型程式控制。這是一個巨大的程式,當然將其稱為程式是不公平的–它是一個集合,一個程式生態系統。我們給它取了一個名字。 你電腦上的應用程式就是程式。您手機上的應用程式也是如此。 你的汽車是由程式控制的。 程式是一組指令,程式設計師組合這些指令以使機器執行特定的操作。 通常,在執行程式之前,程式將由程式設計師進行編譯。有時候程序會由另外一個程序解譯。 比如JavaScript,它在瀏覽器中運行。在此准確的時刻,您使用的瀏覽器正在執行我撰寫的某些JavaScript代碼。 所以,這是程式的第一個主要區分:編譯和解譯。不同的程式語言將允許其中之一。 最終,程式是您用來執行特定操作的東西。它可能是幫助簡化企業管理的方式,或者通過創建最終玩家遊戲來解決的問題,比如無聊的問題。 現在我們已經定義了程式是什麼,讓我們深入了解什麼是程式設計。 什麼是程式設計 通常情況下,我們通常使用程式語言中的編碼結構指示來創建一個工作的程式。 然而,我想向這個概念引入更深的內容。 對我而言,程式設計是解決問題。因此,程式設計比您拿起鍵盤並在計算機上鍵入指令的時間要早得多。 程式設計從思考問題開始。或者這個應用程式。 當您收集需求時,與涉及到的所有人,客戶,分析所需做的所有不同事物進行對話時,程式設計開始。 程式設計是定義應用程式不需要做的事情。 在開始工作之前,程式設計是確定您的應用程式是否不可能或代價過高的地方。...