實驗報告
日期: 2015年9月15日
一、實驗的目的與要求
熟練地使用 Linux,本實驗介紹 Linux 基本操作,shell 環境下的常用命令。
二、主要內容
1.Linux 基礎入門& 2.基本概念及操作
認真看過這篇linux系統簡介文章,對於這樣一個免費、高效的操作系統有了一個初步的認識。希望能在本學期對於linux操作系統有很好的認識和操作,使用。 同時,對於新認識的一些歷史中開發和修復各個操作系統的前輩表示深深地敬佩。
2.
基本概念及操作主要過程:
(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)查看用戶
who [options] [files]
參數 | 說明 |
---|---|
-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壓縮打包命令
- 壓縮打包:
zip -r -【(1~9)壓縮級別,1為快速打包,包體積大,9耗時長,體積小】-q -o 壓縮包名 目錄路徑
-r:地鬼打包子目錄全部內容
-q:安靜模式
-o:輸出文件,其后緊跟打包輸出文件名 - 查看打包后文件大小 du -h 文件名du -h -d 0 *.zip ~ | sort分別查看多個.zip
-h --human readable
-d --max-depth - 創建加密zip包 zip -r -e -o 壓縮包名 路徑
- windows采用CR+LF換行,LINUX采用LF換行,為了使在LINUx壓縮的包在windows上兼容,壓縮時采用:
zip -r -l -o 壓縮包名 路徑
-l將LF轉換為CR+LF
(3)解壓zip包
- 使用unzip命令:unzip XX.zip
- 將文件解壓到指定目錄: unzip -q xx.zip
-d 目錄名 - 不解壓僅僅查看: unzip -l xx.zip
- windows中文采用GBK編碼,LINUX相愛用UTF-8,解決解壓的兼容問題,解壓是指定采用編碼類型:
unzip -O GBK 中文壓縮文件.zip
(4)rar打包壓縮命令
- rar壓縮命令: rar命令沒有參數-
參數a:rar a xx.rar 添加一個目錄~到xx.rar
參數d:rar d xx.rar 文件名 從xx.rar刪除文件
l:rar l xx.rar 查看不解壓 - 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,去重為一個l
$ echo '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...
-s 不合並到一行,每個文件為一行
操作舉例:
$ echo hello > file1
$ echo shiyanlou > file2
$ echo www.shiyanlou.com > file3
$ paste -d ':' file1 file2 file3
$ paste -s file1 file2 file3
e.作業
1、#從dos 到unix文本格式轉換
$ cat -A [dos] | tr -d '^M' | cat -A [dos]
-
2、sudo apt-get install ninvaders
10、數據流重定向
(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的重定向(后面將告訴你怎么做)
$ ls
$ exit
$ cat somefile
(6).創建輸出文件描述符
-默認在 Shell 中可以有9個打開的文件描述符,上面我們使用了也是它默認提供的0,1,2號文件描述符
使用exec命令可以創建新的文件描述符:
$ zsh
$ exec 3>somefile
# 先進入目錄,再查看,否則你可能不能得到正確的結果,然后再回到上一次的目錄
$ cd /dev/fd/;ls -Al;cd -
# 注意下面的命令>與&之間不應該有空格,如果有空格則會出錯
$ echo "this is test" >&3
$ cat somefile
$ exit
(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的重定向(后面將告訴你怎么做)
$ 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
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
三、調試
把Linux 下軟件安裝放在這一部分,作為操作實踐的部分。
四、心得體會
雖然是最后時間做的很倉促的實驗,但還是感覺收獲了很多。學會了shell的一些操作指令,了解了linux系統的文件以及一些不同於的windows的特性。更多的學習內容還要繼續,加油努力吧!!!
五、附件