56 插入一節流的概念 要多複習看筆記

2021-08-17 20:16:29 字數 2836 閱讀 2776

檔案用於資料的儲存,相當於乙個個儲存資料的房子。我們之前說,所謂的資料是0或者1的序列,但嚴格來說,linux以位元組(byte)來作為資料的單位,也就是說這個序列每八位(bit)為乙個單位(八位二進位制對應的十進位制範圍為0到255)。使用ascii編碼,可以將這樣乙個位元組轉換成為字元。所以,在linux中,我們所說的資料,完全可以用字元表達出來,也就是說文字(text)的形式。

實際上,如果以bit為單位處理字元的話,機器會更容易讀懂和傳輸,效率會更高。但為什麼linux依然以位元組為單位進行處理呢?原因在於,相對於以bit為單位處理資料,以byte為單位可以更容易將資料轉化為字元。相對於枯燥的0和1,字元更容易被人讀懂 (human readable)。然而,並不是所有的資料都是設計來讓人讀懂的,比如可執行檔案包含的各種字元對於人來說並沒有什麼意義 (因為可執行檔案是為了讓機器讀懂的)。但linux依然以位元組為單位處理所有檔案,這是為了讓所有檔案能夠共用一套介面 (virtual file system),從而減少linux設計的複雜度。

("everything is a file"是通常所流傳的unix設計的哲學之一,但linus對此作出糾正,改為"everything is a stream of bytes"。)

然而,資料不是在找到了自己的房子(file)之後就永遠的定居下來。它往往要被讀入到記憶體 (就像是到辦公室上班),或者被傳送到外部裝置(好像去酒店休假),或者搬到別的房子中。在這樣的搬遷過程中,資料像是乙個個排著隊走路的**,我們叫它文字流(text stream,或者byte stream)。然而,計算機不同裝置之間的連線方法差異很大,從記憶體到檔案的連線像是爬山,從記憶體到外設像是游過一條河。為此,linux還定義了流 (stream),以此作為修建連線各處的公路的標準。stream的好處在於,無論你是從記憶體到外設,還是從記憶體到檔案,所有的公路都是相同的 (至於公路下面是石頭還是土地,都可以不用操心)。

我們再回味一下「everything is a stream of bytes」這句話。資訊包含在文字流中,不斷在計算機的各個元件之間流動,不斷地接受計算機的加工,最終成為使用者所需要的某種服務。

(說句題外話,如果看過駭客帝國的話,一定會對文字流印象深刻。)

1. 流,是指可使用的資料元素乙個序列。

2. 流,可以想象為是傳送帶上等待加工處理的物品,也可以想象為工廠流水線上的物品。

3. 流,可以是無限的資料。

4. 有一種功能,處理這乙個流同時產生著另乙個流。這種功能被成為 過濾 ( filter )。使用管道 ( pipelie ) 將這些功能進行連線。

1. 管道連線著處理元素,乙個處理元素的輸出是下乙個處理處理元素的輸入。

2. 管道能加快資料處理速度。

2. unix 下的管道圖示如下。

舉個例子,列出當前目錄下的所有檔案( ls -l ),只保留帶有字串 key 的檔名( grep key ),並且在滾屏中檢視( less )

ls -l | grep key | less
1. 是指用於處理流的程式。儘管 filter 可以單獨使用,但是他們常常通過管道,組合起來使用。

2. 預設從標準輸入( standard input )獲取資料,寫到標準輸出( standard output )。可以通過輸入操作符 < 改變資料來源,通過輸出操作符 > 改變寫入目標,通過追加操作符 >> 追加資料。

3. 通過管道符 | ,鏈結多個 filter。

4. 例子。從 /etc/passwd 獲取資料,將得到的每一行根據 ":" 進行分割並獲取第一字字段( cut -d : -f 1 /etc/passwd ),提起包含 foo 字串的行輸出( grep foo )

cut -d : -f 1 /etc/passwd | grep foo
5. 常見的 filter 程式有:

grep :  從文字資料集中,搜尋匹配到的正規表示式的行,一行為單位。

$ cat

fruitlist.txt

banana

pear

peach

orange

$ grep

cat : 讀取多個檔案,並依次寫入標準輸出。

cat [options] [file_names] > newfile.txt

cut : 提取每乙個行的一部分內容作為輸出。較少用,例子略

head : 顯示文字檔案內容,或者管道資料中的開頭部分。

head -n 20 filename
tail : 顯示文字檔案內容,或者管道資料中的結尾部分。

tail -n 20 filename
sort : 對文字檔案內容,或者管道資料進行排序,並輸出。可指定排序列

$ cat

zipcode

adam

12345

bob

34567

joe

56789

sam

45678

wendy

23456

$ sort -k 2n zipcode

adam

12345

wendy

23456

bob

34567

sam

45678

joe

56789

參考資料

stream (computing), wikipedia

pipeline (unix), wikipedia

bubble (computing), wikipedia

filter, wikipedia 

第一節 PDM的概念

第一節 pdm的概念 如果說60年代製造業企業戰略目標追求的是生產規模的擴大,70年代是生產成本的降低,80年代是產品質量的提高,90年代的目標追求的則是市場響應速度,即縮短交貨期。根據顧客的需求,迅速提供相應的產品成為企業競爭力最重要的構成因素。產品資料管理 pdm 一經問世,便迅速得到製造業企業...

第一節 原始碼安裝mysql 5 6

建立mysql使用者和mysql組 groupadd mysql useradd g mysql mysql 設定使用者資源限制,在 etc security limits.conf檔案後增加以下內容 vi etc security limits mysql soft nproc 2047 mysq...

第一節 物件導向基本概念

高階語言分類 第一代 對數學表示式有很強的處理能力,面向過程 第二代 結構化程式設計,能有效表達演算法 第三代 抽象資料型別的語言 可能基於物件,但沒有繼承 opp 面向過程的程式資料和演算法分開,物件導向把資料和演算法組合起來成為類 類是建立物件的模板 從要解決的問題中識別出有意義的物件以及物件的...