乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      聽說你入行好幾年還只會cd和ls,麻省理工開了這門課……

       Lilyjiang 2022-05-24 發(fā)布于廣東

      作者 | 梁唐

      出品 | 公眾號:Coder梁(ID:Coder_LT

      大家好,日拱一卒,我是梁唐。

      不知道大家有沒有這樣一種體驗,在實際寫代碼或者是工作、做項目的過程當(dāng)中經(jīng)常被一些簡單的問題難住。比如vim的一些命令不熟悉,或者是git的一些操作不知道怎么弄,命令行除了ls cd之外一無所知??傆X得書到用時方恨少。

      別說是還沒畢業(yè)的學(xué)生了,即使是一些畢業(yè)多年的程序員老鳥也難免會查查谷歌或者Stack Overflow。我每次遇到這樣問題的時候總會忍不住想, 要是上學(xué)的時候?qū)W校里能專門開一門課程講一講這些基本工具的使用,給學(xué)生做一個深度的科普,該有多好。

      也許是聽到了眾多程序員的心聲,2020年的時候,MIT開設(shè)了一門公開課。它的標題很有意思,叫做《missing smester》,消失的學(xué)期。課程當(dāng)中收錄的正是這些大部分學(xué)校課程當(dāng)中不會專門涉及,但是又至關(guān)重要的基礎(chǔ)知識。

      課程量不算大,算上最后的答疑部分,一共也只有十一節(jié)課。但這十一節(jié)課當(dāng)中包含了命令行、git、vim等許多非常重要的知識和技能,非常非常值得一看。

      雖然課程里講的內(nèi)容非?;A(chǔ),但溫故知新,我也收獲了非常多。因此強烈推薦給大家。

      這門課在B站上也有搬運,鏈接:https://www.bilibili.com/video/BV1x7411H7wa?spm_id_from=333.337.search-card.all.click

      這門課的notes寫得非常好,這個系列是這門課notes的一個翻譯和整理。如果想看英文原文,可以點擊最下方【閱讀原文】。

      動機

      作為計算機科學(xué)家,我們知道計算機非常擅長處理高重復(fù)性的任務(wù)。

      然而我們嘗嘗忽略,我們使用計算機的過程其實和計算機處理程序時類似,也一樣充滿了重復(fù)。我們在處理計算機相關(guān)的問題上擁有大量的工具可以使用,只需要動動手指輸入命令或程序,就可以完成一些高度復(fù)雜的任務(wù)。

      然而,我們當(dāng)中的很多人,只使用了這些工具的很小一部分。有時候僅僅是死記硬背了一些命令,或者是在遇到困難的時候,盲目地從網(wǎng)上復(fù)制粘貼命令。

      這門課視圖解決這個問題,我們希望教會你如何最大限度地使用這些工具,給你展示一些新的工具豐富你的技能樹,給你更多的鼓舞和興趣,讓你勇敢地探索。這就是我們對計算機科學(xué)領(lǐng)域中消失的學(xué)期的定義。

      課程結(jié)構(gòu)

      這門課包含了11個長度約1小時的課程,每一節(jié)課都有一個特定的主題。

      每節(jié)課之間都是高度獨立的,但在課程進行的過程當(dāng)中,我們還是會假設(shè)你已經(jīng)學(xué)會了之前的內(nèi)容。我們會把課程的筆記公開在網(wǎng)上,但也有很多課上的內(nèi)容是筆記里沒有的。上課的視頻也同樣會放在網(wǎng)上。

      我們嘗試著在11小時的課程當(dāng)中盡可能多地包含基礎(chǔ)知識,所以課程的內(nèi)容會比較密集。為了保證你們能順利地跟上節(jié)奏,每節(jié)課后都會有針對要點的一系列練習(xí)。

      由于時間的限制,所以沒辦法對所有的工具都進行深入的探討。可能的話,我們會試著提供繼續(xù)鉆研和學(xué)習(xí)的資源。

      Topic 1: The Shell

      什么是 shell?

      現(xiàn)代的計算機擁有大量的方式和用戶進行交互,美觀的用戶界面、聲音甚至是AR或者是VR都已經(jīng)逐漸普及。

      對于80%的用戶來說,這已經(jīng)足夠了,但這也意味著很多基本功能的限制。因為你沒辦法進行圖形界面中沒有的操作,也沒辦法聲控一個沒有開發(fā)的功能。為了充分應(yīng)用計算機的功能,解除圖形界面的限制,我們需要回到上古時期,使用文本界面來控制計算機,這個就是shell。

      幾乎所有的平臺都有shell,只不過它們的形式可能不同。盡管細節(jié)上有所區(qū)別,但核心都是一樣的:允許你運行程序,輸入指令,顯示結(jié)果。

      在這節(jié)課當(dāng)中,我們將聚焦在Bourne Again Shell上,簡稱bash。這也是使用最廣泛的shell,它的語法和其他的shell也非常接近。為了打開shell界面,你需要一個terminal(終端)。一般來說,計算機當(dāng)中都會自帶,你也可以自己安裝一個。

      使用shell

      當(dāng)你打開terminal,你會看到一個光標,大概長這樣:

      圖片

      這個是shell的主要文本界面,它告訴你,你當(dāng)前的工作路徑是機器上missing,并且你當(dāng)前所在的地方是~,這是home的簡稱。

      $符號說明你不是一個超級用戶(root user),我們將會詳細解釋root user。你可以在光標處輸入指令,它會被shell解讀并運行。最基礎(chǔ)的命令是運行一個程序:

      圖片

      現(xiàn)在我們運行了date程序,它會打印當(dāng)前的日期和時間。之后shell會繼續(xù)讓我們輸入指令,我們可以輸入一個帶參數(shù)的指令:

      圖片

      在這個例子當(dāng)中,我們告訴shell運行一個叫做echo的程序,參數(shù)是hello。

      echo程序會把參數(shù)進行輸出,shell會按照空格對命令進行拆分。以第一個單詞作為程序名進行運行,將剩余的單詞作為參數(shù)。如果你想要傳遞一個帶有空格或者其他特殊字符的參數(shù),需要使用引號(如'My Photos')或者是取義符(My\ Photos)。

      但shell是怎么知道去哪里尋找dateecho程序的呢?

      其實shell只是一個編程環(huán)境,就像是Python和Ruby一樣,所以它也有變量、條件、循環(huán)和函數(shù)。當(dāng)你在shell中運行命令的時候,你其實是編寫了一個簡易的代碼交給了shell來解釋運行。

      當(dāng)shell被要求運行一個不是shell中的關(guān)鍵字的命令時,它會去環(huán)境變量$PATH中進行查找。$PATH中包含了一系列文件夾路徑以:分隔,shell會在這些路徑當(dāng)中找到名稱匹配的程序進行運行。

      圖片

      當(dāng)我們運行echo命令時,shell發(fā)現(xiàn)它不在shell的關(guān)鍵字中之后,會先在$PATH路徑當(dāng)中進行查找。

      當(dāng)找到之后,就會進行運行(假設(shè)有權(quán)限運行,權(quán)限這部分之后講解)。我們可以使用命令which找到我們運行的程序所在的路徑。我們也可以自己給定我們要運行的程序的路徑來繞過path機制。

      shell中的指引

      shell中的path是一系列文件夾組成的list,在Linux和macOS當(dāng)中以/分隔,在Windows當(dāng)中以\分隔。

      在Linux和macOS當(dāng)中,/路徑表示系統(tǒng)的根目錄,是所有文件和路徑的根節(jié)點。而Windows當(dāng)中磁盤的根目錄會有多個分區(qū),比如C:\。我們會假設(shè)你在這門課程中使用的是Linux文件系統(tǒng)。

      /開頭的路徑被稱為絕對路徑,其他的路徑都是相對路徑。相對路徑是相對于當(dāng)前路徑而言的路徑,我們可以通過命令pwd來查看當(dāng)前路徑,通過cd命令來修改當(dāng)前路徑。.代表當(dāng)前路徑,..代表當(dāng)前路徑的父路徑。

      圖片

      注意,圖中的shell提示了我們當(dāng)前所在的路徑,這是可以配置的。你可以修改你的終端的配置,顯示所有你需要的信息,這也會在之后的課程當(dāng)中提及。

      總的來說,當(dāng)我們運行一個程序時,除非指定,它會在當(dāng)前目錄運行。

      查看當(dāng)前路徑中的內(nèi)容,可以使用ls命令:

      圖片

      除非我們在第一個參數(shù)中輸入一個路徑,否則它會列出當(dāng)前路徑下的內(nèi)容。

      大多數(shù)命令都會有flags和options,通過-接收參數(shù)來指定行為。通常運行程序時加上-h--help flag可以得到一些幫助信息告訴我們每個flag和options如何使用。

      比如ls --help告訴我們:

      圖片

      加上參數(shù)-l之后會得到關(guān)于文件的更多的信息。我們看一下輸出結(jié)果:

      圖片

      開頭的d表示missing是一個文件夾,然后緊跟著一系列字符(rwx),這些表明了這個文件/文件夾的權(quán)限。權(quán)限一共有9個字母,分成三組。

      第一組rwx表示表示文件owner的權(quán)限,r表示可讀,w表示可寫,x表示可運行。

      第二組r-x表示所屬群組(users)的權(quán)限,每個字母表示的含義和owner相同,-表示沒有這一項權(quán)限。比如r-x表示可讀可運行,但不可寫。

      第三組r-x表示其它用戶的權(quán)限。所以只有owner擁有修改missing文件夾的權(quán)限,包括添加、刪除文件夾內(nèi)的文件的權(quán)限。

      要進入一個路徑,用戶必須擁有這個文件夾以及它所有父路徑的search(運行)權(quán)限,要列出文件夾中的內(nèi)容,用戶需要有文件夾的讀權(quán)限。

      需要注意/bin路徑下幾乎所有文件對其它用戶都只有運行權(quán)限,這樣保證了所有的用戶都可以運行這些程序。

      其他一些很有用的命令還有mv(重命名、移動文件),cp(拷貝文件),mkdir(創(chuàng)建文件夾)。

      如果你想要知道一個程序參數(shù)、輸入、輸出的更多信息,你可以使用man程序。它接收另外一個程序名作為參數(shù),然后展示它的使用菜單,輸入q進行退出。

      圖片

      Connecting programs

      在shell當(dāng)中,程序擁有兩個流,即輸入流和輸出流。當(dāng)程序試著讀入數(shù)據(jù)時,它是從輸入流獲取的。當(dāng)它試著輸出時,也是向輸出流進行傳輸。

      一般來說,程序的輸入和輸出設(shè)備都是你的終端,也就是以我們的鍵盤作為輸入,以屏幕作為輸出。然而,我們可以修改這些流。

      最簡單的方式就是重定向流,比如< file> file,表示我們以一個文件作為輸入,或者是以一個文件作為輸出:

      圖片

      像是上面例子所演示的,cat程序可以輸出文件中的內(nèi)容。當(dāng)我們給定一個文件作為參數(shù),它會輸出文件中的內(nèi)容到它的輸出流上。當(dāng)cat沒有任何參數(shù)的時候,它會將輸入流中的內(nèi)容輸出到輸出流中(上面第三個樣例)。

      你也可以使用>>代替>,它們的區(qū)別是>>不會替換文件中的內(nèi)容,而是添加在文件末尾。這些特性結(jié)合管道一起使用的時候會非常有用,|命令可以讓我們在程序之間構(gòu)建管道。讓一個程序的輸出作為另外一個的輸入:

      圖片

      在本節(jié)課中,不會太過深入管道的細節(jié),以及它的優(yōu)勢,這部分放在之后的課程中。

      多功能且強大的工具

      在大多數(shù)類Unix系統(tǒng)當(dāng)中,有一種用戶是特殊的,它就是root。

      root用戶超越了所有權(quán)限的限制,它可以創(chuàng)建、讀入、更新、刪除系統(tǒng)中的任何文件。然而,你不能一直使用root,因為這會非常危險,可能破壞你的系統(tǒng)或者是導(dǎo)致不可逆?zhèn)Α?/p>

      你可以使用sudo命令代替,就像是它的名稱暗示的一樣,它允許你像root一樣執(zhí)行某些操作。有時候你會獲得permission denied錯誤,這表示你沒有權(quán)限。你可以使用sudo來強行執(zhí)行,不過在執(zhí)行之前,一定要確保你的命令是正確的。

      有一件你必須要是root才可以做的事情:修改系統(tǒng)文件。

      系統(tǒng)文件通常掛載在/sys路徑下,當(dāng)中將一些內(nèi)核參數(shù)以文件的形式存儲。所以你可以很輕易地修改一些內(nèi)核參數(shù)。需要注意的是,/sys文件在windows和macOS中沒有。

      比如,你可以通過修改一個名叫brightness的文件來調(diào)整你筆記本屏幕的亮度:

      圖片

      通過往文件中寫入一個特定的值,你可以修改屏幕的亮度。

      你的整個執(zhí)行過程可能是這樣的(你可能需要先通過find命令找到對應(yīng)的文件):

      $ sudo find -L /sys/class/backlight -maxdepth 2 -name '*brightness*'
      /sys/class/backlight/thinkpad_screen/brightness
      cd /sys/class/backlight/thinkpad_screen
      $ sudo echo 3 > brightness
      An error occurred while redirecting file 'brightness'
      open: Permission denied

      出乎我們意料的是,雖然我們使用了sudo命令,但仍然報錯了。

      這是shell中一個我們需要了解非常重要的信息,像是|這樣的管道命令,或者是>, <分隔的命令,并不是一個單獨的程序。echo并不知道|命令的存在,它僅僅是讀入和輸出。

      在上面的例子中,shell在echo 3時以root執(zhí)行,而打開brightness文件時沒有,仍然是普通用戶。所以被拒絕了,如果我們想要以root執(zhí)行寫入,我們可以這樣改寫命令:

      echo 3 | sudo tee brightness

      tee程序可以同時寫入/sys文件,并且以root身份運行,所以不會受到權(quán)限限制。

      你可以控制/sys下的一些文件來娛樂或?qū)崿F(xiàn)一些功能。比如說開啟一些LED指示燈,下列代碼會開啟scrolllock指示燈。

      echo 1 | sudo tee /sys/class/leds/input6::scrolllock/brightness

      Next steps

      現(xiàn)在你已經(jīng)了解了shell的一些基本應(yīng)用,可以來完成一些基礎(chǔ)功能了。

      你應(yīng)該可以跳轉(zhuǎn)到任何你感興趣的路徑下,并且能夠使用基礎(chǔ)命令的絕大多數(shù)功能了。在下節(jié)課當(dāng)中,我們將會接觸到更多有趣的命令,并且使用shell來實現(xiàn)更加復(fù)雜的一些任務(wù)。

      Exercises

      這門課每節(jié)課后都會附帶一些練習(xí),有一些是給定了指定的任務(wù)去完成,也有一些是開放式的任務(wù),比如說嘗試使用X或Y程序。我們強烈推薦你能親自嘗試。

      1. 這門課我們需要使用Unix shell,比如Bash或者Zsh。如果你使用Linux或者是macOS,那你并不需要為此煩惱。如果你使用的是Windows,你需要確保你運行的不是cmd.exe或者PowerShell。你可以使用Windows Subsystem for Linux或者使用Linux虛擬機來使用Unix風(fēng)格的命令行。為了確保你使用了正確的shell,你可以嘗試運行命令echo $SHELL,如果顯示的結(jié)果是/bin/bash或者/usr/bin/zsh,那么久說明你處在了正確的環(huán)境
      2. /tmp路徑下創(chuàng)建missing文件夾
      3. 使用man程序來調(diào)研touch程序
      4. 使用touchmissing下創(chuàng)建semester文件
      5. 在文件當(dāng)中寫入以下兩行,一次寫入一行:
      #!/bin/sh
      curl --head --silent https://missing.csail.

      第一行是Bash中的注釋,Bash中以#開啟注釋。!即使在雙引號當(dāng)中也有特殊含義。在Bash當(dāng)中,單引號和雙引號是有區(qū)別的,你可以調(diào)研一下它們的區(qū)別

      1. 嘗試運行這個文件,你可以使用./semester來運行。使用ls命令來探究不能運行的原因
      2. 使用sh命令,將semester作為參數(shù)傳入運行程序,如sh semester,為什么這樣可以運行,為什么./semester不行?
      3. 調(diào)研chmod程序,使用man chmod
      4. 使用chmod來讓./semester可行。你的shell怎么會知道這個文件應(yīng)該用sh運行呢?了解一下shebang獲得更多信息
      5. 使用|>semester輸出結(jié)果中 'last modified' 日期寫入到你home下的last-modified.txt
      6. 編寫命令讀取/sys中你筆記本電源的電量或者筆記本CPU的溫度,如果你是macOS用戶,你的操作系統(tǒng)可能沒有/sys文件,你可以跳過本題

      答案

      前六題的命令為:

      cd /tmp
      mkdir missing
      touch semester
      echo '#!/bin/sh' > semester
      echo 'curl --head --silent https://missing.csail.' >> semester
      ./semester
      圖片
      img

      直接運行會報錯,因為沒有運行權(quán)限。

      圖片
      img

      使用命令給semester添加運行權(quán)限:

      chmod +x semester

      shell能知道這個文件使用什么程序執(zhí)行是因為我們在第一行加上了特殊的注釋:#!/bin/sh,這是指定了該文件執(zhí)行的程序。

      最后,將篩選數(shù)據(jù)寫入文件:

      ./semester | grep 'last-modified' > ~/last-modified.txt


      喜歡本文的話不要忘記三連~

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多