自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Rust寫的NuShell用起來真香

系統(tǒng)
數(shù)年來,shell作為我們和操作系統(tǒng)通訊的方式,本質(zhì)上是一個命令解釋器,它接收我們輸入的命令(如ls,cat等),然后調(diào)用相應(yīng)的應(yīng)用程序。

[[386553]]

 數(shù)年來,shell作為我們和操作系統(tǒng)通訊的方式,本質(zhì)上是一個命令解釋器,它接收我們輸入的命令(如ls,cat等),然后調(diào)用相應(yīng)的應(yīng)用程序。

如今你可能還在使用古老的bash和sh,或者看上去稍微不錯的zsh,ksh,csh這些shell,還是在Windows下使用的PowerShell。今天我要給大家介紹一個生產(chǎn)力工具(裝逼神器)Shell,它叫Nushell,關(guān)鍵是它用程序員最喜歡的Rust寫的,速度飛快,作為內(nèi)核的界面,用Rust重寫Shell安全性提高了,bug率降低了。

NuShell從許多熟悉的領(lǐng)域中汲取了線索:bash 等傳統(tǒng) shell,PowerShell 等高級 shell,函數(shù)式編程,系統(tǒng)編程等。但是NuShell 并沒有試圖成為所有行業(yè)的杰作,而是將精力集中在做好一些事情上:

  • 創(chuàng)建具有現(xiàn)代感的靈活的跨平臺Shell
  • 允許你將命令行應(yīng)用程序與可理解數(shù)據(jù)結(jié)構(gòu)的Shell進(jìn)行混合和匹配
  • 具有現(xiàn)代命令行應(yīng)用程序提供的用戶體驗優(yōu)化
  • 用強(qiáng)大的管道控制你的操作系統(tǒng)
  • 一切都是數(shù)據(jù),并可以像sql一樣查詢數(shù)據(jù)
  • 插件系統(tǒng),你可以擴(kuò)展Shell通過自己編寫插件的方式

當(dāng)你運行一個類似 ls 的命令時,第一個注意到的是所得到的不是一個文本塊,而是一個結(jié)構(gòu)化的表

  1. > ls *.md 
  2. ───┬────────────────────┬──────┬─────────┬──────────── 
  3.  # │ name               │ type │ size    │ modified  
  4. ───┼────────────────────┼──────┼─────────┼──────────── 
  5.  0 │ CODE_OF_CONDUCT.md │ File │  3.4 KB │ 5 days ago  
  6.  1 │ CONTRIBUTING.md    │ File │   886 B │ 5 days ago  
  7.  2 │ README.md          │ File │ 15.0 KB │ 5 days ago  
  8.  3 │ TODO.md            │ File │  1.6 KB │ 5 days ago  
  9. ───┴────────────────────┴──────┴─────────┴──────────── 

這個表不僅僅是用另一種方式顯示了當(dāng)前目錄。就像電子表格中的表一樣,可以更加交互性地處理數(shù)據(jù)。

比如,可以做的第一件事是把表格通過文件的大小來排序。

  1. > ls | sort-by size | reverse 
  2. ────┬────────────────────┬──────┬────────┬──────────── 
  3.  #  │ name               │ type │ size   │ modified 
  4. ────┼────────────────────┼──────┼────────┼──────────── 
  5.   0 │ Gemfile.lock       │ File │ 6.9 KB │ 3 days ago 
  6.   1 │ SUMMARY.md         │ File │ 3.7 KB │ 3 days ago 
  7.   2 │ Gemfile            │ File │ 1.1 KB │ 3 days ago 
  8.   3 │ LICENSE            │ File │ 1.1 KB │ 3 days ago 
  9.   4 │ CONTRIBUTING.md    │ File │  955 B │ 9 mins ago 
  10.   5 │ books.md           │ File │  687 B │ 3 days ago 
  11. ... 

可以看到我們沒有給 ls 傳遞命令行參數(shù)。作為代替,使用了Nu提供的sort-by命令來排序ls的輸出。為了讓最大的文件位于頂部,還使用了reverse。

Nu提供了許多可在表格上工作的命令。例如,可以過濾ls表格,只顯示大于1 KB的文件

  1. > ls | where size > 1kb 
  2. ───┬──────────────┬──────┬────────┬──────────── 
  3.  # │ name         │ type │ size   │ modified 
  4. ───┼──────────────┼──────┼────────┼──────────── 
  5.  0 │ Gemfile      │ File │ 1.1 KB │ 3 days ago 
  6.  1 │ Gemfile.lock │ File │ 6.9 KB │ 3 days ago 
  7.  2 │ LICENSE      │ File │ 1.1 KB │ 3 days ago 
  8.  3 │ SUMMARY.md   │ File │ 3.7 KB │ 3 days ago 
  9. ───┴──────────────┴──────┴────────┴──────────── 

就像 Unix 哲學(xué),命令是可以互相組合起來,通過管道符鏈接.

接著看下一個命令ps

  1. > ps 
  2. ─────┬───────┬──────────────────┬─────────┬─────────┬──────────┬───────── 
  3.  #   │ pid   │ name             │ status  │ cpu     │ mem      │ virtual 
  4. ─────┼───────┼──────────────────┼─────────┼─────────┼──────────┼───────── 
  5.    0 │ 33155 │ nu_plugin_core_p │ Running │  3.8496 │   1.8 MB │  4.4 GB 
  6.    1 │ 32841 │ mdworker_shared  │ Running │  0.0000 │  19.3 MB │  4.4 GB 
  7.    2 │ 32829 │ CoreServicesUIAg │ Running │  0.0000 │  16.1 MB │  4.5 GB 
  8.    3 │ 32828 │ mdworker_shared  │ Running │  0.0000 │  23.0 MB │  4.4 GB 

如果你使用過Linux,可能會對ps命令相當(dāng)熟悉。這個命令展示了系統(tǒng)所有正在運行的進(jìn)程和它們的狀態(tài)與名稱。我們同樣可以查看到它們的 CPU 占用。

如果想顯示正在使用 CPU 的進(jìn)程怎么辦?就像之前使用ls命令一樣,我們也可以使用ps命令返回的表:

  1. > ps | where cpu > 10 
  2. ───┬──────┬──────────────────┬─────────┬────────┬──────────┬───────── 
  3.  # │ pid  │ name             │ status  │ cpu    │ mem      │ virtual 
  4. ───┼──────┼──────────────────┼─────────┼────────┼──────────┼───────── 
  5.  0 │ 3971 │ Google Chrome He │ Running │ 5.1263 │  99.4 MB │  5.5 GB 
  6.  1 │  360 │ iTerm2           │ Running │ 6.6635 │ 218.6 MB │  6.0 GB 
  7. ───┴──────┴──────────────────┴─────────┴────────┴──────────┴───────── 

到目前為止,已經(jīng)看到使用ls和ps列出文件和進(jìn)程。Nu 還提供了其他可以創(chuàng)建有用信息表的命令。

接下來,讓我們繼續(xù)探索。

運行date將給出當(dāng)前日期與時間的信息:

  1. date 
  2. ──────────┬──────── 
  3.  year     │ 2021 
  4.  month    │ 3 
  5.  day      │ 8 
  6.  hour     │ 09 
  7.  minute   │ 10 
  8.  second   │ 17 
  9.  timezone │ +08:00 
  10. ──────────┴──────── 

是不是比bash輸出的要清晰好多,對比下bash的輸出, 為了格式化,還需要查格式化命令

  1. Mon Mar  8 12:38:47 CST 2021 

運行sys將給出Nu所運行的系統(tǒng)的信息:

  1. > sys 
  2. ─────────┬───────────────────────────────────────── 
  3.  host    │ [row 7 columns] 
  4.  cpu     │ [row cores current ghz max ghz min ghz] 
  5.  disks   │ [table 2 rows
  6.  mem     │ [row free swap free swap total total] 
  7.  net     │ [table 11 rows
  8.  battery │ [table 1 rows
  9. ─────────┴───────────────────────────────────────── 

和之前的表有些不一樣, sys命令給出的表在單元格內(nèi)包含了另一些結(jié)構(gòu)化的表格,也就是表格嵌套了,而非簡單的數(shù)值。為了查看到這些數(shù)據(jù),我們需要選擇要看的列:

  1. > sys | get host 
  2. ──────────┬───────────────────────────────────────────── 
  3.  name     │ Linux 
  4.  release  │ 5.3.0-1019-azure 
  5.  version  │ #20-Ubuntu SMP Fri Mar 27 23:54:23 UTC 2020 
  6.  hostname │ lifeless 
  7.  arch     │ x86_64 
  8.  uptime   │ 8:03:47:32 
  9.  sessions │ [table 2 rows
  10. ──────────┴───────────────────────────────────────────── 

get命令可以跳入表格中一列的內(nèi)容。這樣,正在觀看 host 列,它包含了關(guān)于 Nu 所運行的主機(jī)的信息、操作系統(tǒng)的名字、主機(jī)名、CPU、架構(gòu)等等。讓我們看看系統(tǒng)上的用戶名:

  1. > sys | get host.sessions 
  2. ───┬───────── 
  3.  # │ <value> 
  4. ───┼───────── 
  5.  0 │ jonathan 
  6. ───┴───────── 

目前,系統(tǒng)上只有一個用戶,名為 jonathan。你會注意到,我可以傳遞路徑( host.sessions 部分),而不僅僅是傳遞列名。Nu 將采用該路徑并轉(zhuǎn)到表中的相應(yīng)數(shù)據(jù)位置。

你可能已經(jīng)注意到其他的不同之處。這次查詢沒有一個數(shù)據(jù)表,而是只有一個元素:字符串 jonathan。Nu使用數(shù)據(jù)表和字符串。字符串是在Nu之外使用命令的重要組成部分。

讓我們看看字符串如何在Nu之外起作用。從前面的示例開始,并運行外部的 echo 命令( ^告訴nu不要使用內(nèi)置的echo命令):

  1. > sys | get host.sessions | ^echo $it 
  2. jonathan 

如果這看起來與以前的傳統(tǒng)Shell非常相似,那么就說明你擁有敏銳的眼睛!相似,但是有一個重要的區(qū)別:對前面看到的值調(diào)用了 ^echo 。這允許我們將數(shù)據(jù)從Nu傳遞到echo(或 Nu 外部的任何命令,例如 git)。

注意:Nu 的內(nèi)建命令的幫助文本可以用 help 來瀏覽:

  1. > help config 
  2. Configuration management. 
  3.  
  4. Usage: 
  5.   > config <subcommand> {flags} 
  6.  
  7. Subcommands: 
  8.   config get - Gets a value from the config 
  9.   config set - Sets a value in the config 
  10.   config set_into - Sets a value in the config 
  11.   config clear - clear the config 
  12.   config load - Loads the config from the path given 
  13.   config remove - Removes a value from the config 
  14.   config path - return the path to the config file 
  15.  
  16. Flags: 
  17.   -h, --help: Display this help message 

安裝Nu

方式1:從 crates.io 安裝

  1. cargo install nu 

方式2:使用 Homebrew,你需要安裝 openssl 和 cmake:

  1. brew install openssl cmake 
  2.  
  3. brew install nushell 

安裝完后,輸入

  1. > nu 

進(jìn)入Shell,即可嘗試

本文轉(zhuǎn)載自微信公眾號「碼小菜」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系碼小菜公眾號。

 

責(zé)任編輯:武曉燕 來源: 碼小菜
相關(guān)推薦

2021-06-30 09:20:18

NuShell工具Linux

2024-05-21 10:28:51

API設(shè)計架構(gòu)

2022-05-22 21:16:46

TypeScriptOmit 工具

2023-02-07 06:55:26

Kafka消費消息

2012-07-11 09:34:39

微軟云計算

2024-07-04 11:33:33

2020-07-06 15:13:16

安卓AirDrop無線傳輸

2020-01-06 15:00:43

Linux電腦發(fā)行版

2021-09-18 08:52:45

人工智能

2022-09-20 07:46:15

重試組件retrying

2016-03-17 09:45:17

react雙向綁定插件

2022-11-07 09:25:02

Kafka存儲架構(gòu)

2015-05-28 10:35:07

前端gulpdemo

2020-11-27 14:28:13

數(shù)據(jù)分析工具數(shù)據(jù)庫

2021-09-29 07:13:12

編程 Python Merge

2021-04-18 07:18:31

Chrome

2021-10-29 11:25:41

代碼編程語言Java

2022-12-27 17:56:40

ack機(jī)制RocketMQ

2012-12-17 09:54:08

2016-06-12 09:28:46

Ubuntu 16.0升級Linux
點贊
收藏

51CTO技術(shù)棧公眾號