Linux 基礎入門(新版)」實驗報告一~十二

實驗報告

日期: 2015年9月15日javascript

1、實驗的目的與要求css

      熟練地使用 Linux,本實驗介紹 Linux 基本操做,shell 環境下的經常使用命令。java

2、主要內容linux

1.Linux 基礎入門& 2.基本概念及操做

      認真看過這篇linux系統簡介文章,對於這樣一個免費、高效的操做系統有了一個初步的認識。但願能在本學期對於linux操做系統有很好的認識和操做,使用。 同時,對於新認識的一些歷史中開發和修復各個操做系統的前輩表示深深地敬佩。nginx

 

 

2.sql

基本概念及操做

主要過程:shell

       (1)實驗樓環境介紹

       (2)經常使用 Shell 命令及快捷鍵

              

按鍵 做用
Ctrl+d 鍵盤輸入結束或退出終端
Ctrl+s 暫定當前程序,暫停後按下任意鍵恢復運行
Ctrl+z 將當前程序放到後臺運行,恢復到前臺爲命令fg
Ctrl+a 將光標移至輸入行頭,至關於Home
Ctrl+e 將光標移至輸入行末,至關於End
Ctrl+k 刪除從光標所在位置到行末
Alt+Backspace 向前刪除一個單詞
Shift+PgUp 將終端顯示向上滾動
Shift+PgDn 將終端顯示向下滾動

                                     Shell 經常使用通配符:數據庫

字符 含義
* 匹配 0 或多個字符
? 匹配任意一個字符
[list] 匹配 list 中的任意單一字符
[!list] 匹配 除list 中的任意單一字符之外的字符
[c1-c2] 匹配 c1-c2 中的任意單一字符 如:[0-9] [a-z]
{string1,string2,...} 匹配 sring1 或 string2 (或更多)其一字符串
{c2..c2} 匹配 c1-c2 中所有字符 如{1..10}

       (3)Linux 使用小技巧

man 手冊區段 說明
1 通常命令
2 系統調用
3 庫函數,涵蓋了C標準函數庫
4 特殊文件(一般是/dev中的設備)和驅動程序
5 文件格式和約定
6 遊戲和屏保
7 雜項
8 系統管理命令和守護進程

       (4)使用如下代碼輸出圖形字符

  • $ sudo apt-get update;sudo apt-get install sysvbanner toilet figlet
  • $ banner feels good
  • $ toilet feels good
  • $ figlet feels good

3.用戶及文件權限管理

(1)查看用戶apache

        who [options] [files]vim

參數 說明
-a 打印能打印的所有
-d 打印死掉的進程
-m am i,mom likes
-q 打印當前登陸用戶數及用戶名
-u 打印當前登陸用戶登陸信息
-r 打印運行等級

(2)建立用戶

sudo adduser 【name】

指令:adduser = add user

         add :添加

         user:用戶

(3)用戶組

方法一:使用groups命令

例子:groups shiyanlou

方法二:查看/etc/group文件

例子:cat /etc/group | sort

注:如須要命令過濾則 cat /etc/group | grep -E "shiyanlou|sudo"

etc/group 文件格式說明

(4)將其它用戶加入 sudo 用戶組

例子:sudo usermod -G sudo lilei

指令: usermod = user mod

          user : 用戶

           mod : 模型

(5)刪除用戶

例子:sudo deluser lilei --remove-home

指令: deluser = del user、 remove

         del user :刪除用戶

         remove:刪除

(6)查看文件權限

  • 顯示全部文件大小,並以普通人類能看懂的方式呈現:$ ls -AsSh
  • 查看某一個目錄的完整屬性,而不是顯示目錄裏面的文件屬性:$ ls -dl <目錄名>

(7)修改文件權限:

  • 方式一:二進制數字表示
  • 加減賦值操做。

做業:

4.Linux 目錄結構及文件基本操做

(1)Linux 目錄結構

Linux 是以樹形目錄結構的形式來構建整個系統的,能夠理解爲一個用戶可操做系統的骨架。雖然本質上不管是目錄結構仍是操做系統內核都是存儲在磁盤上的,但從邏輯上來講 Linux 的磁盤是「掛在」(掛載在)目錄上的,每個目錄不只能使用本地磁盤分區的文件系統,也可使用網絡上的文件系統。 

1.FHS 標準(英文:Filesystem Hierarchy Standard 中文:文件系統層次結構標準)

FHS 定義了系統中每一個區域的用途、所須要的最小構成的文件和目錄同時還給出了例外處理與矛盾處理。

FHS 定義了兩層規範,第一層是, / 下面的各個目錄應該要放什麼文件數據,例如 /etc 應該要放置設置文件,/bin 與 /sbin 則應該要放置可執行文件等等。

第二層則是針對 /usr 及 /var 這兩個目錄的子目錄來定義。例如 /var/log 放置系統登陸文件、/usr/share 放置共享數據等等。

2.目錄路徑

路徑

使用 cd 命令能夠切換目錄,在 Linux 裏面使用 . 表示當前目錄,.. 表示上一級目錄, - 表示上一次所在目錄,~ 一般表示當前用戶的"home"目錄。使用 pwd 命令能夠獲取當前所在路徑(絕對路徑)。

(注意,以 . 開頭的文件都是隱藏文件,因此這兩個目錄必然也是隱藏的,你可使用 ls -a 命令查看隱藏文件)

絕對路徑:以根"/"目錄爲起點的完整路徑,以你所要到的目錄爲終點,表現形式如: /usr/local/bin

相對路徑:相對路徑,也就是相對於你當前的目錄的路徑,相對路徑是以當前目錄 . 爲起點,以你所要到的目錄爲終點,表現形式如: usr/local/bin (這裏假設你當前目錄爲根目錄)。

提示:在進行目錄切換的過程當中請多使用 Tab 鍵自動補全,可避免輸入錯誤,連續按兩次Tab能夠顯示所有候選結果

(二)Linux 文件的基本操做

1.新建空白文件

使用 touch 命令建立空白文件,關於 touch 命令,其主要是來更改已有文件的時間戳的,但其在不加任何參數的狀況下,只指定一個文件名,則能夠建立一個爲指定文件名的空白文件。

例子:touch test

新建目錄

使用 mkdir(make directories)命令能夠建立一個空目錄,也可同時指定建立目錄的權限屬性。

使用 -p 參數,同時建立父目錄(若是不存在該父目錄),以下咱們同時建立一個多級目錄(這在有時候安裝軟件,配置安裝路徑時很是有用):mkdir -p father/son/grandson

2.複製文件

使用cp(copy)命令複製一個文件或目錄到指定目錄。

如:cp test father/son/grandson

複製目錄

若是直接使用cp命令,複製一個目錄的話,會出現以下錯誤:

圖片描述

要成功複製目錄須要加上-r或者-R參數

如:cp -r father family

3.刪除文件

使用rm(remove files or directories)命令,刪除一個文件或目錄;

如:rm test

有時候你會遇到想要刪除一些爲只讀權限的文件,直接使用rm刪除會顯示一個提示,就須要用上參數 -f ;

如:rm -f test

刪除目錄

跟複製目錄同樣,要刪除一個目錄,也須要加上-r或-R參

如:rm -r family

4.移動文件與文件重命名

使用mv(move or rename files)命令,移動文件(剪切)。

格式:mv 源目錄文件 目的目錄

如:mv file1 Documents

重命名文件

格式:mv 舊的文件名 新的文件名

如:mv file1 myfile

5.查看文件

標準輸入輸出:當咱們執行一個 shell 命令行時一般會自動打開三個標準文件,即標準輸入文件(stdin),默認對應終端的鍵盤; 標準輸出文件(stdout)和標準錯誤輸出文件(stderr),這兩個文件都對應被重定向到終端的屏幕,以便咱們能直接看到輸出內容。進程將從標準輸入文件中獲得輸入數據,將正常輸出數據輸出到標準輸出文件,而將錯誤信息送到標準錯誤文件中。

6.查看文件類型

如:file /bin/ls

7.編輯文件

Linux和Windows都用vim+gcc

5.環境變量與文件查找

(1)變量定義

#定義變量 declare $變量名 #或者直接賦值也自動定義變量,注意變量以前不帶"$" 變量名=值 #打印變量的值,"$"表明引用變量的值 echo $變量名 

在全部的 UNIX 和類 UNIX 系統中,每一個進程都有其各自的環境變量設置,且默認狀況下,當一個進程被建立時,處理建立過程當中明確指定的話,它將繼承其父進程的絕大部分環境設置。

一般咱們會涉及到的環境變量有三種:

  • 當前 Shell 進程私有用戶自定義變量,如上面咱們建立的 temp 變量,只在當前 Shell 中有效。
  • Shell 自己內建的變量。
  • 從自定義變量導出的環境變量。
  • 輸出環境變量set| 顯示當前 Shell 全部環境變量,包括其內建環境變量(與 Shell 外觀等相關),用戶自定義變量及導出的環境變量
  • env| 顯示與當前用戶相關的環境變量,還可讓命令在指定環境中運行
  • export| 顯示從 Shell 中導出成環境變量的變量,也能經過它將自定義變量導出爲環境變量
#將普通變量輸出爲環境變量,能被子進程繼承 export 變量名 
#比較文件的命令 vimdiff 1.txt 2.txt 3.txt .... 

(2)命令的查找路徑與順序

PATH環境變量設置命令搜索路徑

#輸出當前命令搜索路徑的設置 echo $PATH #./程序名 表示執行當前目錄下的指定程序 

PATH中臨時添加自定義路徑,用冒號鏈接路徑

PATH=$PATH:/home/shiyanlou/Code 

若是永久添加須要修改配置文件 zsh是.zshrc bash是.bashrc 本次修改用戶目錄下的文件

$ echo "PATH=$PATH:/home/shiyanlou/mybin" >> .zshrc 

(3)變量修改

變量的修改有如下幾種方式:

變量設置方式 說明
{變量名#匹配字串} 從頭向後開始匹配,刪除符合匹配字串的最短數據
{變量名##匹配字串} 從頭向後開始匹配,刪除符合匹配字串的最長數據
{變量名%匹配字串} 從尾向前開始匹配,刪除符合匹配字串的最短數據
{變量名%%匹配字串} 從尾向前開始匹配,刪除符合匹配字串的最長數據
{變量名/舊的字串/新的字串} 將符合舊字串的第一個字串替換爲新的字串
{變量名//舊的字串/新的字串} 將符合舊字串的所有字串替換爲新的字串

(4)變量刪除

可使用unset命令刪除一個環境變量:

unset temp 

(5)讓環境變量當即生效

source .zshrc 

或者

 . ./.zshrc 

注意第二種方式必須指定完整的絕對或相對路徑

(6)搜索文件

與搜索相關的命令經常使用的有以下幾個whereis,which,find,locate

  • whereis搜索很快,由於它並無從硬盤中依次查找,而是直接從數據庫中查詢。whereis只能搜索二進制文件(-b),man幫助文件(-m)和源代碼文件(-s)。
  • locate,經過"/var/lib/mlocate/mlocate.db"數據庫查找,系統會使用定時任務天天自動執行updatedb命令更新一次該數據庫,有時須要手動執行一次updatedb命令將新的文件數據添加進數據庫,它能夠用來查找指定目錄下的不一樣文件類型,能夠遞歸子目錄進行查找,如查找 /etc 下全部以 sh 開頭的文件:
$ locate /etc/sh $ locate /home/shiyanlou/Code/\*.txt 

經測試好像locate 後面要跟絕對路徑,另外""必須用\來轉義

-c 是僅統計數目 -i 是不區分大小寫

 which它只從PATH環境變量指定的路徑中去搜索命令

which man
#查找系統中全部文件名中含D且在第三位的.txt文件 find / -name \?\?D\*.txt #顯示結果含有權限不夠的信息,能夠以下屏蔽 find / -name \?\?D\*.txt 2>/dev/null #還能夠加sudo執行 #另外,文件名加引號,能夠直接用?或*,不用轉義 
#查找大小在10k-20k之間的*.txt find / -name '*.txt' -size +10k -size -20k
#查找空目錄和空文件
find . -empty #查找實驗樓組的文件 find . -group shiyanlou #在/tmp目錄中查找大於100000000字節而且在48小時內修改的某個文件 find /tmp -size +10000000c -and -mtime +2 #在/tmp目錄中查找全部不屬於panda的文件 find /tmp ! -user panda #查找屬於shiyanlou用戶的文件並顯示文件信息 find . -user shiyanlou -ls #刪除找到的*.txt find . -name '*.txt' -exec rm {} \; #以上 \; 是爲了轉義;字符

6.文件打包與解壓縮

(1)經常使用壓縮包文件格式

  • *.zip zip程序打包壓縮的文件
  • *.rar rar程序壓縮的文件
  • *.7z 7zip程序壓縮的文件
  • *.tar tar程序打包,未壓縮的文件
  • *.gz gzip程序(GNU zip)壓縮的文件
  • *.xz xz程序壓縮的文件

*.bz2 bzip2程序壓縮的文件

  • *.tar.gz tar打包,gzip程序壓縮的文件
  • *.tar.xz tar打包,xz程序壓縮的文件
  • *tar.bz2 tar打包,bzip2程序壓縮的文件
  • *.tar.7z tar打包,7z程序壓縮的文件

(2)zip壓縮打包命令

  1. 壓縮打包:
    zip -r -【(1~9)壓縮級別,1爲快速打包,包體積大,9耗時長,體積小】-q -o 壓縮包名 目錄路徑
    -r:地鬼打包子目錄所有內容
    -q:安靜模式
    -o:輸出文件,其後緊跟打包輸出文件名
  2. 查看打包後文件大小 du -h 文件名du -h -d 0 *.zip ~ | sort分別查看多個.zip
    -h --human readable
    -d --max-depth
  3. 建立加密zip包 zip -r -e -o 壓縮包名 路徑
  4. windows採用CR+LF換行,LINUX採用LF換行,爲了使在LINUx壓縮的包在windows上兼容,壓縮時採用:
    zip -r -l -o 壓縮包名 路徑
    -l將LF轉換爲CR+LF

(3)解壓zip包

  1. 使用unzip命令:unzip XX.zip
  2. 將文件解壓到指定目錄: unzip -q xx.zip
    -d 目錄名
  3. 不解壓僅僅查看: unzip -l xx.zip
  4. windows中文采用GBK編碼,LINUX相愛用UTF-8,解決解壓的兼容問題,解壓是指定採用編碼類型:
    unzip -O GBK 中文壓縮文件.zip

(4)rar打包壓縮命令

  1. rar壓縮命令: rar命令沒有參數-
    參數a:rar a xx.rar 添加一個目錄~到xx.rar
    參數d:rar d xx.rar 文件名 從xx.rar刪除文件
    l:rar l xx.rar 查看不解壓
  2. unrar解壓命令 x:unrar x xx.rar 全路徑解壓
    e:unrar e xx.rar 目錄 解壓到指定目錄

(5)tar打包工具

-c:建立一個tar包文件
-f:指定建立的文件名
-v:非安靜模式
tar -cf shiyanlou.tar ~
-x:解壓一個tar
-C:解壓到指定路徑的已存在目錄
tar -xf xx.tar -C 目錄
-t:只查看不解包
tar -tf xx.rar
-p:保存文件屬性
-h保存設備鏈接指向的源文件
tar -cphf xx.tar 要壓縮目錄
-z:.tar.gz
-J:tar.xz
-j:tar.bz2

(6)做業

install libaa-bin

install aafire

aafire

7.Linux 目錄結構及文件基本操做

(1)目錄

$ cd .. #進入上一級目錄 $ cd ~ #進入home目錄 $ pwd #查看當前目錄 $ cd /usr/local/bin #絕對目錄 $ cd ../../usr/local/bin #相對目錄 

(2)新建

$ touch test #新建一個test空白文件 $ mkdir mydir #新建一個mydir空目錄 $ mkdir -p father/son/grandson #使用-p同時建立一個多級目錄 

(3)複製

$ cp test father/son/grandson #將test文件複製到/home/shiyanlou/father/son/grandson目錄中 $ mkdir family $ cp -r father family #將father目錄裏的全部包含子目錄,複製到family 

(4)刪除

$ rm test #刪除test文件 $ rm -f test #強制刪除test文件 $ rm -r family #刪除family目錄 

(5)移動文件

mv 源目錄文件 目的目錄文件

$ mkdir Documents $ touch file1 $ mv file1 Documents #將file1移動到Documents目錄 

重命名 mv 舊的文件名 新文件名

$ mv file1 myfile #將file1重命名爲myfile 
$ touch file{1..5}.txt #使用通配符建立五個文件 $ rename 's/\.txt/\.c/' *.txt #將五個後綴 .txt 重命名 .c 爲後綴 $ rename 'y/a-z/A-Z/' *.c #批量將五個文件的文件名大寫 

(6)查看文件

使用cat(正序) 、tac(倒序) 、nl命令查看文件,

$ cp /etc/passwd .                       #從etc目錄下拷貝passwd文件
$ cat -n passwd                           #打印passwd內容,-n顯示行號

$ head /etc/passwd                    #head顯示頭十行
$ tail /etc/passwd                       #tail 顯示尾十行
$ head -n 1 /etc/passwd             #只顯示第一行
$ tail -n 1 etc/passwd                 #只顯示最後一行

(7)查看文件類型

$ file /bin/ls

8.命令執行順序控制與管道

(1)命令執行順序的控制

a.順序執行多條命令

順序執行多個任務用 ; 號

-例如$ touch test;echo "hehe" >> test;cat test

b.有選擇的執行命令

  • 從$?環境變量獲取上一次命令的返回結果$ echo $?
  • $ [order1] && [oder2] #當[order1]的返回值==0,執行[order2]
  • $ [order1] || [orser2] #當[order1]的返回值!=0,執行[order2]

(2)管道

a.試用

例如將'$ ls -al /etc'的輸出輸出到less中查看

  • '$ ls -al /etc | less'

b.cut 命令,打印每一行的某一字段

打印/etc/passwd文件中以:爲分隔符的第1個字段和第6個字段分別表示用戶名和其家目錄:

  • $ cut /etc/passwd -d ':' -f 1,6

    打印/etc/passwd文件中每一行的前N個字符:

    # 前五個(包含第五個) $ cut /etc/passwd -c -5# 前五個以後的(包含第五個) $ cut /etc/passwd -c 5-# 第五個 $ cut /etc/passwd -c 5# 2到5之間的(包含第五個) $ cut /etc/passwd -c 2-5

c.grep 命令,在文本中或 stdin 中查找匹配字符串

grep命令的通常形式爲:

grep [命令選項]... 用於匹配的表達式 [文件]...

例子

  • 1:搜索/home/shiyanlou目錄下全部包含"shiyanlou"的全部文本文件,並顯示出如今文本中的行號:grep -rnI "shiyanlou" ~-r 參數表示遞歸搜索子目錄中的文件,-n表示打印匹配項行號,-I表示忽略二進制文件。
  • 2: 查看環境變量中以"yanlou"結尾的字符串export | grep ".*yanlou$"其中$就表示一行的末尾。

d. wc 命令,簡單小巧的計數工具

wc 命令用於統計並輸出一個文件中行、單詞和字節的數目,好比輸出/etc/passwd文件的統計信息:

  • $ wc /etc/passwd
  • 分別只輸出行數、單詞數、字節數、字符數和輸入文本中最長一行的字節數:# 行數 $ wc -l /etc/passwd# 單詞數 $ wc -w /etc/passwd# 字節數 $ wc -c /etc/passwd# 字符數 $ wc -m /etc/passwd# 最長行字節數 $ wc -L /etc/passwd

e.sort 排序命令

-將輸入按照必定方式排序,而後再輸出
  • 默認爲字典排序:$ cat /etc/passswd | sort
  • 反轉排序:$ cat /etc/passwd | sort -r
  • 按特定字段排序:$ cat /etc/passwd | sort -t':' -k 3上面的-t參數用於指定字段的分隔符,這裏是以":"做爲分隔符;-k 字段號用於指定對哪個字段進行排序

f. uniq 去重命令

history | cut -c 8- | cut -d ' ' -f 1 | sort | uniq #由於uniq命令只能去連續重複的行,不是全文去重因此加上sort效果更佳

 

9.簡單的文本處理

(1)文本處理命令

a.tr 命令

  • tr 命令能夠用來刪除一段文本信息中的某些文字。或者將其進行轉換。

    使用方式:

    tr [option]...SET1 [SET2]

    經常使用的選項有:

  • 選項 說明
    -d 刪除和set1匹配的字符,注意不是全詞匹配也不是按字符順序匹配
    -s 去除set1指定的在輸入文本中連續並重復的字符

    操做舉例:

  • 刪除 "hello shiyanlou" 中全部的'o','l','h'echo 'hello shiyanlou' | tr -d 'olh'
  • 將"hello" 中的ll,去重爲一個lecho 'hello' | tr -s 'l'
  • 將輸入文本,所有轉換爲大寫或小寫輸出 `$ cat /etc/passwd | tr '[:lower:]' '[:upper:]

    '[:lower:]' '[:upper:]'你也能夠簡單的寫做'[a-z]' '[A-Z]',固然反過來將大寫變小寫也是能夠的`

b.col 命令

  • col 命令能夠將Tab換成對等數量的空格建,或反轉這個操做。

    使用方式:

    col [option]

    經常使用的選項有:

    -選項 說明
    -x 將Tab轉換爲空格
    -h 將空格轉換爲Tab(默認選項)

    操做舉例:

  • 查看 /etc/protocols 中的不可見字符,能夠看到不少 ^I ,這其實就是 Tab 轉義成可見字符的符號$ cat -A /etc/protocols
  • 使用 col -x 將 /etc/protocols 中的 Tab 轉換爲空格,而後再使用 cat 查看,你發現 ^I 不見了$ cat /etc/protocols | col -x | cat -A

c.join命令

  • 將兩個文件中包含相同內容的那一行合併在一塊兒

    使用方式:

    join [option]... file1 file2

    經常使用的選項有:

    -選項 說明
    -t 指定分隔符,默認爲空格
    -i 忽略大小寫的差別
    -1 指明第一個文件要用哪一個字段來對比,,默認對比第一個字段
    -2 指明第二個文件要用哪一個字段來對比,,默認對比第一個字段

d.paste命令

paste這個命令與join 命令相似,它是在不對比數據的狀況下,簡單地將多個文件合併一塊兒,以Tab隔開。

使用方式:

paste [option] file...

經常使用的選項有:-選項 說明 -d 指定合併的分隔符,默認爲Tab
-s 不合併到一行,每一個文件爲一行

操做舉例:

echo hello > file1echo shiyanlou > file2echo www.shiyanlou.com > file3$ paste -d ':' file1 file2 file3$ paste -s file1 file2 file3

e.做業

一、#從dos 到unix文本格式轉換$ cat -A [dos] | tr -d '^M' | cat -A [dos]-

二、sudo apt-get install ninvaders

 

十、數據流重定向

(1).簡單的重定向

Linux 默認提供了三個特殊設備,用於終端的顯示和輸出,分別爲

  • stdin(標準輸入,對應於你在終端的輸入)

  • stdout(標準輸出,對應於終端的輸出)

  • stderr(標準錯誤輸出,對應於終端的輸出)

    PS管道默認是鏈接前一個命令的輸出到下一個命令的輸入,而重定向一般是須要一個文件來創建兩個命令的鏈接

(2).標準錯誤重定向

-標準輸出和標準錯誤都被指向僞終端的屏幕顯示,因此咱們常常看到的一個命令的輸出一般是同時包含了標準輸出和標準錯誤的結果的。

隱藏某些錯誤或者警告

# 將標準錯誤重定向到標準輸出,再將標準輸出重定向到文件,注意要將重定向到文件寫到前面$ cat Documents/test.c\~ hello.c >somefile 2>&1# 或者只用bash提供的特殊的重定向符號"&"將標準錯誤和標準輸出同時重定向到文件$ cat Documents/test.c\~ hello.c &>somefilehell

(4).使用tee命令同時重定向到多個文件

-除了將須要將輸出重定向到文件以外也須要將信息打印在終端echo 'hello shiyanlou' | tee hello

(5).永久重定向

-使用exec命令實現「永久」重定向# 先開啓一個子 Shell$ zsh# 使用exec替換當前進程的重定向,將標準輸出重定向到一個文件exec 1>somefile# 後面你執行的命令的輸出都將被重定向到文件中,直到你退出當前子shell,或取消exec的重定向(後面將告訴你怎麼作)$ lsexit$ cat somefile

(6).建立輸出文件描述符

-默認在 Shell 中能夠有9個打開的文件描述符,上面咱們使用了也是它默認提供的0,1,2號文件描述符

使用exec命令能夠建立新的文件描述符:

$ zshexec 3>somefile# 先進入目錄,再查看,不然你可能不能獲得正確的結果,而後再回到上一次的目錄cd /dev/fd/;ls -Al;cd -# 注意下面的命令>與&之間不該該有空格,若是有空格則會出錯echo "this is test" >&3$ cat somefileexit

(7).關閉文件描述符

-如上面咱們打開的3號文件描述符,可使用以下操做將它關閉:exec 3>&-cd /dev/fd;ls -Al;cd -

(8).徹底屏蔽命令的輸出

-在 Linux 中有一個被成爲「黑洞」的設備文件,因此導入它的數據都將被「吞噬」。/dev/null,或稱空設備,是一個特殊的設備文件,它一般被用於丟棄不須要的輸出流,或做爲用於輸入流的空文件,這些操做一般由重定向完成。讀取它則會當即獲得一個EOF。

咱們能夠利用設個/dev/null屏蔽命令的輸出:

$ cat Documents/test.c\~ nefile 1>/dev/null 2>&1

(9).使用 xargs 分割參數列表

-xargs 是一條 UNIX 和類 UNIX 操做系統的經常使用命令。它的做用是將參數列表轉換成小塊分段傳遞給其餘命令,以免參數列表過長的問題。 這個命令在有些時候十分有用,特別是當用來處理產生大量輸出結果的命令如 find,locate 和 grep 的結果,詳細用法請參看 man 文檔。$ cut -d: -f1 < /etc/passwd | sort | xargs echo

(10).做業

$ sudo apt-get install caca-utils$ cacaview <pic_file>$ cacademo$ cacafire

 

11.數據流重定向

(1)簡單的重定向

Linux 默認提供了三個特殊設備,用於終端的顯示和輸出,分別爲

  • stdin(標準輸入,對應於你在終端的輸入)

  • stdout(標準輸出,對應於終端的輸出)

  • stderr(標準錯誤輸出,對應於終端的輸出)

    PS管道默認是鏈接前一個命令的輸出到下一個命令的輸入,而重定向一般是須要一個文件來創建兩個命令的鏈接

(2)標準錯誤重定向

-標準輸出和標準錯誤都被指向僞終端的屏幕顯示,因此咱們常常看到的一個命令的輸出一般是同時包含了標準輸出和標準錯誤的結果的。

隱藏某些錯誤或者警告

# 將標準錯誤重定向到標準輸出,再將標準輸出重定向到文件,注意要將重定向到文件寫到前面$ cat Documents/test.c\~ hello.c >somefile 2>&1# 或者只用bash提供的特殊的重定向符號"&"將標準錯誤和標準輸出同時重定向到文件$ cat Documents/test.c\~ hello.c &>somefilehell

(3)使用tee命令同時重定向到多個文件

-除了將須要將輸出重定向到文件以外也須要將信息打印在終端echo 'hello shiyanlou' | tee hello

(4)永久重定向

-使用exec命令實現「永久」重定向(效果見附圖)# 先開啓一個子 Shell$ zsh# 使用exec替換當前進程的重定向,將標準輸出重定向到一個文件exec 1>somefile# 後面你執行的命令的輸出都將被重定向到文件中,直到你退出當前子shell,或取消exec的重定向(後面將告訴你怎麼作)$ lsexit$ cat somefile

(5)建立輸出文件描述符

-默認在 Shell 中能夠有9個打開的文件描述符,上面咱們使用了也是它默認提供的0,1,2號文件描述符

使用exec命令能夠建立新的文件描述符:

$ zshexec 3>somefile# 先進入目錄,再查看,不然你可能不能獲得正確的結果,而後再回到上一次的目錄cd /dev/fd/;ls -Al;cd -# 注意下面的命令>與&之間不該該有空格,若是有空格則會出錯echo "this is test" >&3$ cat somefileexit

(6)關閉文件描述符

-如上面咱們打開的3號文件描述符,可使用以下操做將它關閉:exec 3>&-cd /dev/fd;ls -Al;cd -

(7)徹底屏蔽命令的輸出

-在 Linux 中有一個被成爲「黑洞」的設備文件,因此導入它的數據都將被「吞噬」。/dev/null,或稱空設備,是一個特殊的設備文件,它一般被用於丟棄不須要的輸出流,或做爲用於輸入流的空文件,這些操做一般由重定向完成。讀取它則會當即獲得一個EOF。

咱們能夠利用設個/dev/null屏蔽命令的輸出:

$ cat Documents/test.c\~ nefile 1>/dev/null 2>&1

(8)使用 xargs 分割參數列表

-xargs 是一條 UNIX 和類 UNIX 操做系統的經常使用命令。它的做用是將參數列表轉換成小塊分段傳遞給其餘命令,以免參數列表過長的問題。 這個命令在有些時候十分有用,特別是當用來處理產生大量輸出結果的命令如 find,locate 和 grep 的結果,詳細用法請參看 man 文檔。$ cut -d: -f1 < /etc/passwd | sort | xargs echo

(9)做業

$ sudo apt-get install caca-utils$ cacaview <pic_file>$ cacademo$ cacafire

12.數據流重定向

(1)簡單的重定向

Linux 默認提供了三個特殊設備,用於終端的顯示和輸出,分別爲

  • stdin(標準輸入,對應於你在終端的輸入)

  • stdout(標準輸出,對應於終端的輸出)

  • stderr(標準錯誤輸出,對應於終端的輸出)

    PS管道默認是鏈接前一個命令的輸出到下一個命令的輸入,而重定向一般是須要一個文件來創建兩個命令的鏈接

(2)標準錯誤重定向

-標準輸出和標準錯誤都被指向僞終端的屏幕顯示,因此咱們常常看到的一個命令的輸出一般是同時包含了標準輸出和標準錯誤的結果的。

隱藏某些錯誤或者警告

# 將標準錯誤重定向到標準輸出,再將標準輸出重定向到文件,注意要將重定向到文件寫到前面$ cat Documents/test.c\~ hello.c >somefile 2>&1# 或者只用bash提供的特殊的重定向符號"&"將標準錯誤和標準輸出同時重定向到文件$ cat Documents/test.c\~ hello.c &>somefilehell

(3)使用tee命令同時重定向到多個文件

-除了將須要將輸出重定向到文件以外也須要將信息打印在終端$ echo 'hello shiyanlou' | tee hello

(4)永久重定向

-使用exec命令實現「永久」重定向(效果見附圖)# 先開啓一個子 Shell$ zsh# 使用exec替換當前進程的重定向,將標準輸出重定向到一個文件$ exec 1>somefile# 後面你執行的命令的輸出都將被重定向到文件中,直到你退出當前子shell,或取消exec的重定向(後面將告訴你怎麼作)$ ls$ exit$ cat somefile

(5)建立輸出文件描述符

-默認在 Shell 中能夠有9個打開的文件描述符,上面咱們使用了也是它默認提供的0,1,2號文件描述符

使用exec命令能夠建立新的文件描述符:

$ zsh$ exec 3>somefile# 先進入目錄,再查看,不然你可能不能獲得正確的結果,而後再回到上一次的目錄

$ cd /dev/fd/;ls -Al;cd -# 注意下面的命令>與&之間不該該有空格,若是有空格則會出錯

$ echo "this is test" >&3$ cat somefile$ exit

(6)關閉文件描述符

-如上面咱們打開的3號文件描述符,可使用以下操做將它關閉:$ exec 3>&-$ cd /dev/fd;ls -Al;cd -

(7)徹底屏蔽命令的輸出

-在 Linux 中有一個被成爲「黑洞」的設備文件,因此導入它的數據都將被「吞噬」。/dev/null,或稱空設備,是一個特殊的設備文件,它一般被用於丟棄不須要的輸出流,或做爲用於輸入流的空文件,這些操做一般由重定向完成。讀取它則會當即獲得一個EOF。

咱們能夠利用設個/dev/null屏蔽命令的輸出:

$ cat Documents/test.c\~ nefile 1>/dev/null 2>&1

(8)使用 xargs 分割參數列表

-xargs 是一條 UNIX 和類 UNIX 操做系統的經常使用命令。它的做用是將參數列表轉換成小塊分段傳遞給其餘命令,以免參數列表過長的問題。 這個命令在有些時候十分有用,特別是當用來處理產生大量輸出結果的命令如 find,locate 和 grep 的結果,詳細用法請參看 man 文檔。$ cut -d: -f1 < /etc/passwd | sort | xargs echo

(9)做業

$ sudo apt-get install caca-utils

$ cacaview <pic_file>

$ cacademo$ cacafire

3、調試

把Linux 下軟件安裝放在這一部分,做爲操做實踐的部分。

4、心得體會

雖然是最後時間作的很倉促的實驗,但仍是感受收穫了不少。學會了shell的一些操做指令,瞭解了linux系統的文件以及一些不一樣於的windows的特性。更多的學習內容還要繼續,加油努力吧!!!

5、附件

相關文章
相關標籤/搜索