鳥哥的Linux基礎篇整理---3

1、壓縮相關整理。
      壓縮技術:計算機一般都是用byte進行存儲的,而很多時候某一個字符佔不滿一個byte,比如1在一個字節
表示的時候只會使用最後一位,然後就利用一些複雜的計算方式, 將這些沒有使用到的空丟出來,以讓文件佔
用的空間變小。
     另外一種壓縮技術也很有趣,他是將重複的數據進行統計記錄的,然後讓大家共用重複的!
     任何壓縮過後的文件無法被操作系統直接使用,所以需要解壓縮。
     壓縮文件的擴展名很多:*.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2, *.xz,注意文件的具體屬性(權限等)和這些後綴
其實沒什麼關係,這些後綴只是用來標示使用的何種技術進行的文件壓縮。這樣的話我們就知道應該用什麼技
術進行解壓縮。
     Linux 上常見的壓縮指令就是 gzip, bzip2 以及最新的 xz ,至於 compress 已經退流行了。爲了支持windows 常見的 zip,其實 Linux 也早就有 zip 指令了! gzip 是由 GNU 計劃所開發出來的壓縮指令,該指令已經取代了 compress 。後來 GNU 又開發出 bzip2 及 xz 這幾個壓縮比更好的壓縮指令!不過,這些指令通常僅能針對一個文件來壓縮與解壓縮,如此一來, 每次壓縮與解壓縮都要一大堆文件,豈不煩人?此時,那個所謂的打包軟件指令tar就顯的很重要啦!tar 可以將很多文件打包成爲一個文件。
      1)、gzip:目前 gzip 可以解開 compress, zip 與 gzip 等軟件所壓縮的文件,後綴*.gz
            格式:命令  參數 文件名
  1. 常用參數:
  2. -d :解壓壓縮的時候使用
  3. -v :可以顯示出原文件/壓縮文件案的壓縮比等信息;
  4. -# :# 爲數字的意思,代表壓縮等級,-1 最快,但是壓縮比最差、-9 最慢,但是壓縮比最好!預設是 -6
  1. cnbjlx24729:~/Downloads$ gzip -v Java編程思想第四版完整中文高清版\(免費\).pdf
  2. Java編程思想第四版完整中文高清版(免費).pdf: 16.1% -- replaced with Java編程思想第四
  3. 版完整中文高清版(免費).pdf.gz
  4. cnbjlx24729:~/Downloads$ ls -l
  5. -rw-r--r-- 1 xp022430 domain_users 1947236 May 23 09:29 Java編程思想第四版完整中文
  6. 高清版(免費).pdf.gz
          可以看到壓縮完畢以後原文件就不存在了,還有好像不能對目錄使用!
          解壓縮:
  1. cnbjlx24729:~/Downloads$ gzip -d Java編程思想第四版完整中文高清版\(免費\).pdf.gz
  2. cnbjlx24729:~/Downloads$ ls -l
  3. -rw-r--r-- 1 xp022430 domain_users 2320410 May 23 09:29 Java編程思想第四版完整中
  4. 文高清版(免費).pdf
       2)、bzip2、xz:壓縮比更好,但只能對單獨文件使用,所以需要先tar。
             bzip2 則是爲了取代 gzip 並提供更佳的壓縮比而來的,基本用法和gzip相同,後綴*.bz2
  1. 常用參數:
  2. -d :解壓縮的參數
  3. -z :壓縮的參數 (默認值,可以不加)
  4. -v :可以顯示出原文件/壓縮文件案的壓縮比等信息;
  5. -# :與 gzip 同樣的,都是在計算壓縮比的參數, -9 最佳, -1 最快!
  1. xp022430@cnbjlx24729:~/Downloads$ bzip2 -vz Java編程思想第四版完整中文高清版\(免費\).pdf
  2. Java編程思想第四版完整中文高清版(免費).pdf: 1.196:1, 6.691 bits/byte, 16.36% saved, 23204
  3. 10 in, 1940764 out.
  4. xp022430@cnbjlx24729:~/Downloads$ ls -l
  5. -rw-r--r-- 1 xp022430 domain_users 1940764 May 23 09:29 Java編程思想第四版完整中文高清
  6. 版(免費).pdf.bz2
            xz這個軟件的用法也跟 gzip/bzip2 幾乎一模一樣,壓縮比更高,但是時間比較久。
  1. 常用參數
  2. -d :就是解壓縮啊!
  3. -k :保留原本的文件不刪除~
  4. -# :同樣的,也有較佳的壓縮比的意思!
         綜合比較上面幾個考慮到時間成本gzip較合適。且我測試的上面默認是不可以對目錄進行壓縮的如:
  1. xp022430@cnbjlx24729:~/Downloads$ xz LOgs/
  2. xz: LOgs/: Is a directory, skipping
         zip:兼容windows常見的壓縮包
         compress:已棄用。
      3)、打包命令tar。
            tar:打包指令,可以將多個目錄或文 件打包成一個大文件。打包完畢後以透過 gzip/bzip2/xz 的支持,將
該文件同時進行壓縮,並且Windows的WinRAR 也支持 .tar.gz 檔名的解壓縮
  1. 常用參數:
  2. -c :建立打包文件,可搭配 -v 來察看過程中被打包的檔名(filename)---壓縮的時候的參數
  3. -t :察看打包文件的內容含有哪些檔名,重點在察看檔名就是了;---查看文件內容時候的參數
  4. -x :解打包或解壓縮的功能,可以搭配 -C (大寫) 在特定目錄解開---解壓縮式加入的參數
  5. 特別留意的是, -c, -t, -x 不可同時出現在一串指令列中,並且注意你執行的什麼操作
  6. -z :透過 gzip的支持進行壓縮/解壓縮:此時檔名最好爲 *.tar.gz
  7. -j :透過 bzip2 的支持進行壓縮/解壓縮:此時檔名最好爲 *.tar.bz2
  8. -J :透過 xz的支持進行壓縮/解壓縮:此時檔名最好爲 *.tar.xz
  9. 特別留意, -z, -j, -J 不可以同時出現在一串指令列中
  10. -v:在壓縮/解壓縮的過程中,將正在處理的文件名顯示出來!
  11. -f filename:-f 後面要立刻接要被處理的檔名!建議 -f 單獨寫一個選項囉!(比較不會忘記)
  12. -C 目錄:這個選項用在解壓縮,若要在特定目錄解壓縮,可以使用這個選項。
          注意:tar 並不會主動的產生建立的檔名,所以我們要根據參數選擇好對應的文檔後綴,如果zjJ參數都沒
選的話,最好用後綴*.tar
  1. 例子:
  2. 縮:tar -zcv -f filename.tar.gz 要被壓縮的文件或目錄名稱
  3. 詢:tar -ztv -f filename.tar.gz (就是查看打包了那些文件)
  4. 解壓縮:tar -zxv -f filename.tar.gz -C 欲解壓縮的目錄
         一定要注意參數的選擇:-z建議的後綴是*.tar.gz,-c:壓縮的時候用;-x解壓縮的時候;-t查看的時候。還有很
多的具體的用法如壓縮某個目錄但不包含某個文件,解壓某個tar但不包含某個等等,到時候百度吧。

2、系統備份和還原的命令。
      系統備份:xfsdump
      系統還原:xfsrestore

3、Vim的一些不知道的知識點。
      在指令模式下:
             搜索:向光標之下尋找一個字符串名稱爲 word 的字符串。
                        例如:要在文件內搜尋 vbird 這個字符串,就輸入 /vbird 即可! (常用)
                        向光標之上尋找一個字符串名稱爲 word 的字符串。
                        例如:要在文件內搜尋 vbird 這個字符串,就輸入 ?vbird 即可! (常用)
                        配合如下兩個鍵:
                                n 代表重複前一個搜尋的動作
                                N 與 n 剛好相反,爲反向進行前一個搜尋動作
             跳行:直接輸入 nG 如:10G移動到第10行,不用冒號(:)。
      兩個重要的文件:
             1)、歷史記錄文件 :~/.viminfo當前用戶的home目錄下。
                   viminfo 會主動的將你曾經做過的行爲登錄下來,好讓你下次可以輕鬆作業。
             2)、vim的配置選項文件。
                 整體vim 的設定值一般是放置在 /etc/vimrc這個文件(ubuntu在/etc/vim這),不過不建議你修改它 
             以修改 ~/.vimrc 這個文件會覆蓋(預設不存在,請你自行手動建立)
              常用配置:
  1. 1)、調用命令臨時設定:
  2. 設定與取消行號 :set nu/:set nonu
  3. hlsearch 就是 high light search(高亮度搜尋) :set hlsearch/:set nohlsearch
  4. 顯示目前所有的環境參數設定值 :set all
  5. 是否依據程序相關語法顯示不同顏色? :syntax on/:syntax off
  6. 可用以顯示不同的顏色色調,預設是light :set bg=dark/:set bg=light
  7. 2)、配置文件可以永久設定
  8. 編輯配置文件:vim ~/.vimrc 。下面舉幾個例子:
  9. set hlsearch "高亮度反白
  10. set nu "可以在每一列的最前面顯示行號啦!
  11. set bg=dark "顯示不同的底色色調
  12. syntax on "進行語法檢驗,顏色顯示。

4、Shell認識。Bourne Again SHell (簡稱 bash)
       shell是用戶和Linux操作系統之間的接口,是一種具備特殊功能的程序。Linux中有多種shell,其中缺省使用
的是Bash。linux將 shell 獨立於核心程序之外,使得它就如同一般的應用程序,可以在不影響操作系統本身的
情況下進行修改、更新版本或是添加新的功能。
      從操作系統的概念來說,對計算機下命令得透過命令(command)或是程序(program),程序有編譯器(comp
iler)將程序轉爲二進制代碼,可是命令呢?其實shell 也是一支程序,它由輸入設備讀取命令,再將其轉爲計算
機可以瞭解的機械碼,然後執行它。所以每個操作系統都有自己的shell。
     shell的基本工作流程:
            shell首先檢查命令是否是內部命令,若不是再檢查是否是一個應用程序(這裏的應用程序可以是Linux本         身的實用程序,如ls和rm,也可以是購買的商業程序,如xv,或者是自由軟件,如emacs(反正都是shell腳
      本語言寫的))。然後shell在搜索路徑裏尋找這些應用程序(搜索路徑就是一個能找到可執行程序的目錄列
      表)。如果鍵入的命令不是一個內部命令並且在路徑裏沒有找到這個可執行文件,將會顯示一條錯誤信息。
      如果能夠成功找到命令,該內部命令或應用程序將被分解爲系統調用並傳給Linux內核。正是shell進程提供
     了命令行提示符。對普通用戶用“$”作提示符,對超級用戶(root)用“#”作提示符。 一旦出現了shell提示符,
      就可以鍵入命令名稱及命令所需要的參數
            注意:上面說到的應用程序是指,指令寫成的應用程序。
     素有系統可用的shells在/etc/shells下面如下:
  1. root@Joey:/home/joey/Desktop# cat /etc/shells
  2. # /etc/shells: valid login shells
  3. /bin/sh
  4. /bin/dash
  5. /bin/bash
  6. /bin/rbash
         Shell的功能---history:
                bash 的功能裏頭,能記憶使用過的指令。通過上下按鍵即可調出來。存放在 ~/.bash_history 。注意
        記錄的是前一次登入以前所執行過的指令, 而至於這一次登入所執行的指令都被暫存在內存中,當你成功的
         註銷系統後,該指令記憶纔會記錄到 .bash_history 當中。
               歷史記錄的命令:history,配合grep簡直不要太好用!
  1. 常用參數:
  2. n :數字,意思是要列出最近的 n 筆命令行表.
  3. -c :將目前的 shell 中的所有 history 內容全部消除
  4. -a :將目前新增的 history 指令新增入 histfiles 中,若沒有加 histfiles ,
  5. 則預設寫入 ~/.bash_history
  6. -r :將 histfiles 的內容讀到目前這個 shell history 記憶中;
  7. -w :將目前的 history 記憶內容寫入 histfiles 中!   
               history配合如下命令實現快捷輸入
  1. !number:執行第幾筆指令的意思;
  2. !command :由最近的指令向前搜尋『指令串開頭爲 command』的那個指令,並執行;
  3. !!:就是執行上一個指令(相當於按↑按鍵後,按 Enter)
  1. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2/packages/apps/Nfc$ history 15
  2. 2179 alias h='history | grep'
  3. 2180 h
  4. 2181 h "read"
  5. 2182 h read
  6. 2183 history --help
  7. 2184 type history
  8. 2185 history 3
  9. 2186 read -p "please input Hello :" -t 5
  10. 2187 2159
  11. 2188 history -10
  12. 2189 history 10
  13. 2190 2159
  14. 2191 history
  15. 2192 history -20
  16. 2193 history 15
  17. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2/packages/apps/Nfc$ !2186
  18. read -p "please input Hello :" -t 5
  19. please input Hello :aksjkad
  20. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2/packages/apps/Nfc$ !!
  21. read -p "please input Hello :" -t 5
  22. please input Hello :sdasd
  23. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2/packages/apps/Nfc$ history 15
  24. 2181 h "read"
  25. 2182 h read
  26. 2183 history --help
  27. 2184 type history
  28. 2185 history 3
  29. 2186 read -p "please input Hello :" -t 5
  30. 2187 2159
  31. 2188 history -10
  32. 2189 history 10
  33. 2190 2159
  34. 2191 history
  35. 2192 history -20
  36. 2193 history 15
  37. 2194 read -p "please input Hello :" -t 5
  38. 2195 history 15
  39. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2/packages/apps/Nfc$ !type
  40. type history
  41. history is a shell builtin
                同一賬號同時多次登入的 history 寫入問題:就是好幾個賬戶同時登陸,然後寫入,因爲等到註銷時
         纔會更新記錄文件,其它的被後來的最後一個 bash 所覆蓋更新了
         Shell的功能---命令與文件補全功能(Tab)
               就是按Tab鍵會自動補全。
         Shell的功能---命令別名設定功能: (alias)
                在命令行輸入alias,就可以看出那些命令有別名了
  1. xp022430@cnbjlx24729:~$ alias
  2. alias egrep='egrep --color=auto'
  3. alias fgrep='fgrep --color=auto'
  4. alias grep='grep --color=auto'
  5. alias l='ls -CF'
  6. alias la='ls -A'
  7. alias ll='ls -alF'
  8. alias ls='ls --color=auto'
                設置別名:(注意用引號括起來)
  1. xp022430@cnbjlx24729:~$ alias lm="ls -la"
  2. xp022430@cnbjlx24729:~$ alias
  3. ...
  4. alias lm='ls -la'
              unalias lm 移除別名.
                    需要注意的是,通過這樣設置的別名,只是暫時在當前的shell端口起作用,一旦關閉就不起作用
              了,想要持久生效就需要你在相應的配置文件中修改,下面說到環境配置時一塊。
          Shell的功能---程序化腳本: (shell scripts)
                 可以將你平時管理系統常需要下達的連續指令寫成一個文件,到時候可以一鍵執行方便很多。
          Shell的功能---通配符: (Wildcard)
                  除了完整的字符串之外, bash 還支持許多的通配符來幫助用戶查詢與指令下達,就是類似*代表所有
          這一類的如下圖:

            man bash :shell的說明文檔,十分的詳細。
            還有一個知識點如何知道當前命令是否屬於bash的內建命令那?
  1. xp022430@cnbjlx24729:~$ type ls
  2. ls is aliased to `ls --color=auto'
  3. xp022430@cnbjlx24729:~$ type cd
  4. cd is a shell builtin
  5. 也可以查出,不是內建的時候的路徑,
  6. xp022430@cnbjlx24729:~$ type -a ls
  7. ls is aliased to `ls --color=auto'
  8. ls is /bin/ls

5、輸入過長命令的方法。
        命令太長想要再啓一行進行輸入的時候, \+enter 。(直接enter就直接執行了嘛!其實就是轉義)
  1. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$ ad\
  2. > b devices
  3. List of devices attached
          就是相當於輸入了adb devices.

6、變量。
        變量:就是讓某一個特定字符串代表不固定的內容。
         echo 這個指令來取用變量, 但是,變量在被取用時,前面必須要加上錢字號$才行,舉例來說,要知道 PATH 的
爲了區別與自定義變量的不同,環境變量通常以大寫字符來表示。
  1. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$ echo $PATH
  2. /home/CORPUSERS/xp022430/.semctools/sdk/f78d252ac3d664f64f3a88ac3e634466/sdk
  3. /latest/tools:/home/CORPUSERS/xp022430/bin:/usr/local/sbin:/usr/local/bin:/usr
  4. /sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
        下面這種格式也可以。
  1. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$ echo ${HOME}
  2. /home/CORPUSERS/xp022430
         設定變量:直接變量=值,注意是有格式要求的
  1. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$ myname=zhaoyuan
  2. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$ echo ${myname}
  3. zhaoyuan
         取消變量的設定:unset 變量名.
  1. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$ unset myname
  2. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$ echo ${myname}
  3. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$
          注意Linux的bash中變量不存在的時候顯示爲空的但是有的shell可能報錯。
         格式注意:
  1. 1). 變量與變量內容以一個等號=來連結,如下所示:
  2. myname=VBird
  3. 2). 等號兩邊不能直接接空格符,如下所示爲錯誤:
  4. myname = VBirdmyname=VBird Tsai
  5. 3). 變量名稱只能是英文字母與數字,但是開頭字符不能是數字,如下爲錯誤:
  6. 2myname=VBird
  7. 4). 變量內容若有空格符可使用雙引號"或單引號'將變量內容結合起來,但
  8. 雙引號內的特殊字符如 $ 等,可以保有原本的特性,如下所示:
  9. var="lang is $LANG"echo $var可得lang is zh_TW.UTF-8
  10. 單引號內的特殊字符則僅爲一般字符 (純文本),如下所示:
  11. var='lang is $LANG'echo $var可得lang is $LANG
  12. 5). 可用跳脫字符 \ 將特殊符號(如 [Enter], $, \, 空格符, '等)變成一般字符,如:
  13. myname=VBird\ Tsai
  14. 6). 在一串指令的執行中,還需要藉由其他額外的指令所提供的信息時,可以使用反單引號`指令`或 $(指令)。
  15. 例如想要取得核心版本的設定:(反引號裏面的內容會優先執行)
  16. version=$(uname -r)再echo $version可得3.10.0-229.el7.x86_64
  17. 7). 若該變量爲擴增變量內容時,則可用 "$變量名稱" ${變量} 累加內容,如下所示:
  18. PATH="$PATH":/home/binPATH=${PATH}:/home/bin
  19. 8). 若該變量需要在其他子程序執行,則需要以 export 來使變量變成環境變量:
  20. export PATH
  21. 9). 通常大寫字符爲系統默認變量,自行設定變量可以使用小寫字符,方便判斷 (純粹依照使用者興趣與嗜好) ;
  22. 10). 取消變量的方法爲使用 unset :
  23. unset 變量名稱例如取消 myname 的設定:
  24. unset myname
           查看當前的所有的環境變量 env 是 environment的簡寫。
  1. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$ env
  2. XDG_VTNR=7
  3. XDG_SESSION_ID=c2
  4. XDG_GREETER_DATA_DIR=/var/lib/lightdm-data/xp022430
  5. SELINUX_INIT=YES
  6. CLUTTER_IM_MODULE=xim
  7. SESSION=ubuntu
  8. GPG_AGENT_INFO=/run/user/2060587593/keyring-fvTg27/gpg:0:1
  9. TERM=xterm
  10. VTE_VERSION=3409
  11. XDG_MENU_PREFIX=gnome-
  12. ......
          常見的環境變量:
  1. HOME
  2. 代表用戶的家目錄。還記得我們可以使用 cd ~ 去到自己的家目錄嗎?或者利用 cd 就可以直接回到用戶家
  3. 目錄了。那就是取用這個變量啦~ 有很多程序都可能會取用到這個變量的值!
  4. SHELL
  5. 告知我們,目前這個環境使用的 SHELL 是哪支程序? Linux 預設使用 /bin/bash 的啦!
  6. PATH
  7. 就是執行文件搜尋的路徑啦~目錄與目錄中間以冒號(:)分隔, 由於文件的搜尋是依序由 PATH 的變量內的
  8. 目錄來查詢,所以,目錄的順序也是重要的喔。
  9. RANDOM
  10. 這個玩意兒就是『隨機隨機數』的變量啦!目前大多數的 distributions 都會有隨機數生成器,那就是
  11. /dev/random 這個文件。 我們可以透過這個隨機數文件相關的變量 ($RANDOM) 來隨機取得隨機數值喔。
  12. BASH 的環境下,這個 RANDOM 變量的內容,介於 0~32767 之間,所以,你只要 echo $RANDOM 時,
  13. 系統就會主動的隨機取出一個介於 0~32767 的數值。
         set 命令可以查看所有的變量,包括環境變量和普通的變量。
         子程序:我們在原本的 bash 底下執行另一個 bash ,結果操作的環境接口會跑到第二個 bash 去(就是子程
序), 那原本的 bash 就會在暫停的情況 (睡着了,就是 sleep)。子程序僅會繼承父程序的環境變量, 子程序不會繼
承父程序的自定義變量啦所以你在原本 bash 的自定義變量在進入了子程序後就會消失不見,一直到你離開子程
序並回到原本的父程序後,這個變量纔會又出現。
          export 變量名稱 讓自定義變量變成環境變量
           read指令:讀取來自鍵盤輸入的變量
  1. 選項與參數:
  2. -p :後面可以接提示字符!
  3. -t :後面可以接等待的秒數!多少秒後自動跳轉!
          下面你輸入完read以後都會等着你輸入文字!按下回車輸出,也就是繼續執行。
  1. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$ read
  2. Hello Linux! Hello Android!
          前面會自動加上提示字符。
  1. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$ read -p "please input Hello :"
  2. please input Hello :hello
          declare聲明變量的類型。
  1. 選項與參數:
  2. -a :將後面名爲 variable 的變量定義成爲數組 (array) 類型
  3. -i :將後面名爲 variable 的變量定義成爲整數數字 (integer) 類型
  4. -x :用法與 export 一樣,就是將後面的 variable 變成環境變量;
  5. -r :將變量設定成爲 readonly 類型,該變量不可被更改內容,也不能 unset

7、Shell的小補充。
      可以分爲兩種Shell。
       login shell:取得 bash時需要完整的登入流程的,就稱爲 login shell。就是說輸入賬號密碼了!
       non-login shell:取得 bash 接口的方法不需要重複登入的舉動,就稱爲non-login shell 。就是說沒有輸入密
                                 碼,複製過來的等!它們兩個讀取bash配置文件的地方不相同。
        login shell讀取:
               1)、 /etc/profile:這是系統整體的設定,你最好不要修改這個文件;,bash 的 login shell 情況下所讀取的整
                        體環境配置文件其實只有 /etc/profile,但是/etc/profile 還會呼叫出其他的配置文件
                2)、~/.bash_profile 或 ~/.bash_login 或 ~/.profile:屬於使用者個人設定,你要改自己的數據,就寫
                       a. ~/.bash_profile
                       b. ~/.bash_login
                       c. ~/.profile
                 其實 bash 的 login shell 設定只會讀取上面三個文件的其中一個, 而讀取的順序則是依照上面的順序.
       一旦讀到一個就不會讀另外的了!
                    圖:

               source :讀入環境配置文件的指令如:source ~/.bashrc
        non-login shell讀取:
           non-login shell 時,該 bash 配置文件僅會讀取 ~/.bashrc 而已.比如你想永久修改alias就在這個文件中加入.
打開文件看和編輯就行。

8、單引號和雙引號的一個小區別:
      ' ' 單引號,不具有變量置換的功能 ($ 變爲純文本)
      " " 具有變量置換的功能! ($ 可保留相關功能)
 
9、數據流重導向。
      數據流重導向 (redirect) 就是將某個指令執行後應該要出現在屏幕上的數據, 給他傳輸到其他的地方,例如文
件或者是裝置 (例如打印機之類的).
       符號: 簡單的記憶方法,對輸出肯定是很熟悉 >,那麼輸入就是和它相反 < ,那麼錯誤的輸出就是2>.
            1). 標準輸入 (stdin) :代碼爲 0 ,使用 < 或 << ;
            2). 標準輸出 (stdout):代碼爲 1 ,使用 > 或 >> ; (默認1>或1>>)
            3). 標準錯誤輸出(stderr):代碼爲 2 ,使用 2> 或 2>> ;
標準輸出:
  1. xp022430@cnbjlx24729:~$ ls -l > ~/Desktop/standout.txt
  2. xp022430@cnbjlx24729:~$ ls -l >~/Desktop/standout.txt
  3. xp022430@cnbjlx24729:~$ ls -l>~/Desktop/standout.txt
       雖然上面三個都可以,但是爲了直觀,重導向的符號的兩邊最好都加上空格,需要注意的是文件不存在的
時候會自動新建,重複執行的時候會覆蓋上一次的執行結果。
         如果想要繼續往內容中加入需要使用 >> 這個重導向符號:cnbjlx24729:~$ ls -l >> ~/Desktop/standout.txt
這種覆蓋和不覆蓋的特性同樣適用於標準錯誤輸出。
        當你用 >> 來輸出錯誤信息到文件的時候此時就不會成功,屏幕上依然有錯誤信息,但是正確的信息已經
到文件中了。
  1. 不重導向的時候:
  2. xp022430@cnbjlx24729:~$ find /home -name .bashrc
  3. find: `/home/clientadm': Permission denied
  4. find: `/home/CORPUSERS/xp022430/.cache/dconf': Permission denied
  5. /home/CORPUSERS/xp022430/.bashrc
  6. 重導向的時候:
  7. xp022430@cnbjlx24729:~$ find /home -name .bashrc >> correct.txt
  8. find: `/home/clientadm': Permission denied
  9. find: `/home/CORPUSERS/xp022430/.cache/dconf': Permission denied
         此時就需要用2>來把錯誤信息輸出到另一個文件中。
  1. cnbjlx24729:~$ find /home -name .bashrc >> ~/Desktop/correct.txt 2>> ~/Desktop/error
  2. cnbjlx24729:~$
         當想把信息輸出到同一個文件的時候注意格式:
         以下這種格式會導致信息混亂:
  1. cnbjlx24729:~$ find /home -name .bashrc > ~/Desktop/all.txt 2> ~/Desktop/all.
         第一種正確方式,注意:2>&1 應該連在一塊。
  1. cnbjlx24729:~$ find /home -name .bashrc > ~/Desktop/all.txt 2> &1
  2. bash: syntax error near unexpected token `&'
  3. cnbjlx24729:~$ find /home -name .bashrc > ~/Desktop/all.txt 2>&1
        第二種正確的方式:
  1. cnbjlx24729:~$ find /home -name .bashrc &> ~/Desktop/all.tx
         一個特殊的文件:/dev/null。可以吃掉任何導向這個裝置的信息.不顯示也不進行存儲。
標準輸入: >和>>將原本需要由鍵盤輸入的數據,改由文件內容來取代。
           << 這個連續兩個小於的符號了代表的是結束的輸入字符的意思!舉例來講:我要用 cat 直接將輸入的訊息
輸出到 catfile 中, 且當由鍵盤輸入 eof 時,該次輸入就結束發現直接用文件名做開頭不識別。必須:用cat先讀取
文件然後把結果輸入到某個文件當中。
  1. cat > catfile < ~/.bashrc
  2. cat > catfile << "eof" :就代表你在輸入的時候加入輸入eof就結束了!
  3. 2>&1 1>&2 :就是把錯誤輸出變成正確的和把正確輸出變成錯誤的。

10、多條命令同時執行。
       1)、在指令與指令中間利用分號 (;) 來隔開,這樣一來,分號前的指令執行完後就會立刻接着執行後面的指令
             了。
  1. xp022430@cnbjlx24729:~/Desktop$ ls -l;find . -name roate.txt
  2. ...
  3. -rw-r--r-- 1 xp022430 domain_users 1 May 27 09:26 20170527
  4. -rw-r--r-- 1 xp022430 domain_users 141 Jun 2 09:50 all.txt
  5. -rw-r--r-- 1 xp022430 domain_users 4382 Apr 25 11:15 C函數初認
  6. -rwx------ 1 xp022430 domain_users 371 May 8 09:48 Flash_Gordon_4.desktop
  7. ...
  8. ./roate.txt
         2)、當前一個指令是否成功的執行與後一個指令是否要執行有關,那就得配合&&或||來執行了。
  1. 格式:
  2. cmd1 && cmd2
  3. 1). cmd1 執行完畢且正確執行($?=0),則開始執行 cmd2
  4. 2). cmd1 執行完畢且爲錯誤 ($?≠0),則 cmd2 不執行。
  5. cmd1 || cmd2
  6. 1). cmd1 執行完畢且正確執行($?=0),則 cmd2 不執行。
  7. 2). cmd1 執行完畢且爲錯誤 ($?≠0),則開始執行 cmd2
        下面這個蠻有趣:
          ls /tmp/vbirding || echo "not exist" && echo "exist",這樣當不存在的時候就會顯示:
         not exist和exist
        分析如果 /tmp/vbirding 不存在時,他會進行如下動作:
                a. 若 ls /tmp/vbirding 不存在,因此回傳一個非爲 0 的數值;
                b. 接下來經過 || 的判斷,發現前一個指令回傳非爲 0 的數值,因此,程序開始執行 echo "not exist" ,而
                    echo "not exist" 程序肯定可以執行成功,因此會回傳一個 0 值給後面的指令;
                c. 經過 && 的判斷,咦!是 0 啊!所以就開始執行 echo "exist" 。
        3)、還有一種執行多個命令的就是寫腳本了!

11、管道命令相關。
        管線命令|僅能處理經由前面一個指令傳來的正確信息,也就是 standard output 的信息,對於stdandard error 
並沒有直接處理的能力。每個管線後面接的第一個數據必定是指令,並且這個命令需要有可以接受stdin的數據
的能力。
  1. xp022430@cnbjlx24729:~/Desktop$ ls -l | find . -name roate.txt
  2. ./roate.txt
  3. xp022430@cnbjlx24729:~/Desktop$ ls -l|find . -name roate.txt
  4. ./roate.txt
  5. xp022430@cnbjlx24729:~/Desktop$ ls -l| find . -name roate.txt
  6. ./roate.txt
  7. xp022430@cnbjlx24729:~/Desktop$ ls -l |find . -name roate.txt
  8. ./roate.txt
        可以看到帶不帶空格都可以,但是建議還是兩邊都加上空格。
        1)、cut命令:主要的用途在於將同一行裏面的數據進行分解,最常使用在分析一些數據或文字數據的時
                               候。
  1. 選項與參數:
  2. -d :後面接分隔字符。與 -f 一起使用;
  3. -f :依據 -d 的分隔字符將一段訊息分區成爲數段,用 -f 取出第幾段的意思;
  4. -c :以字符 (characters) 的單位取出固定字符區間;
  1. cnbjlx24729:~/Desktop$ echo ${PATH}
  2. /home/CORPUSERS/xp022430/.semctools/sdk/f78d252ac3d664f64f3a88ac3e634466/sdk/latest/to
  3. ols:/home/CORPUSERS/xp022430/.semctools/sdk/f78d252ac3d664f64f3a88ac3e634466/sdk/late
  4. st/tools:/home/CORPUSERS/xp022430/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/b
  5. in:/sbin:/bin:/usr/games:/usr/local/games
  6. cnbjlx24729:~/Desktop$ echo ${PATH} | cut -d ":" -f 3
  7. /home/CORPUSERS/xp022430/bin
  8. xp022430@cnbjlx24729:~/Desktop$ echo ${PATH} | cut -d ":" -f 3,5
  9. /home/CORPUSERS/xp022430/bin:/usr/local/bin
          2)、grep命令:分析一行訊息, 若當中有我們所需要的信息則進行提取。
          3)、split分區命令: split [-bl] file PREFIX
                它可以幫你將一個大文件,依據文件大小或行數來分區,就可以將大文件分區成爲小文件了
  1. 選項與參數:
  2. -b :後面可接欲分區成的文件大小,可加單位,例如 b, k, m 等;
  3. -l :以行數來進行分區。
  4. PREFIX :代表前導符的意思,可作爲分區文件的前導文字。
  1. cnbjlx24729:~/Desktop$ split -b 600k NfcNci.apk nfcnci
  2. cnbjlx24729:~/Desktop$ ls -l
  3. ...
  4. -rw-r--r-- 1 xp022430 domain_users 614400 Jun 2 11:09 nfcnciaa
  5. -rw-r--r-- 1 xp022430 domain_users 614400 Jun 2 11:09 nfcnciab
  6. -rw-r--r-- 1 xp022430 domain_users 91035 Jun 2 11:09 nfcnciac
  7. -rw-r--r-- 1 xp022430 domain_users 1319835 May 27 14:28 NfcNci.apk
  1. 當你想要合成一個文件的時候
  2. xp022430@cnbjlx24729:~/Desktop$ cat nfcnci* >> NfcNfcall.apk
  3. xp022430@cnbjlx24729:~/Desktop$ ls -l
  4. ...
  5. -rw-r--r-- 1 xp022430 domain_users 614400 Jun 2 11:09 nfcnciaa
  6. -rw-r--r-- 1 xp022430 domain_users 614400 Jun 2 11:09 nfcnciab
  7. -rw-r--r-- 1 xp022430 domain_users 91035 Jun 2 11:09 nfcnciac
  8. -rw-r--r-- 1 xp022430 domain_users 1319835 May 27 14:28 NfcNci.apk
  9. -rw-r--r-- 1 xp022430 domain_users 1319835 Jun 2 11:14 NfcNfcall.apk

12、閒雜
       1)、$? 亦爲變量,是前一個指令執行完畢後的回傳值。在 Linux 回傳值爲 0 代表執行成功
        2)、你輸入一串指令之後,發現前面寫的一長串數據是錯的,你想要刪除遊標所在處到最前面的指令串內容,
                應該如何處理?
         答:按下 [crtl]+u 組合鍵即可!
        3)、如何得知目前的所有變量與環境變量的設定值?
               環境變量用 env 或 export 而所有變量用 set 即可顯示
         4)、試說明 ', ", 與 ` 這些符號在變量定義中的用途?
                " 可以具有變量的上下文屬性,' 則僅有一般字符,至於 ` 之內則是可先被執行的指令。
發佈了84 篇原創文章 · 獲贊 40 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章