場景:通常命令的輸出都會顯示在終端中,有些時候須要將一些命令的執行結果想要保存到文件中進行後續的分析/統計,則這時候須要使用到的輸出重定向技術。redis
>:覆蓋輸出,會覆蓋掉原先的文件內容vim
>>:追加輸出,不會覆蓋原始文件內容,會在原始內容末尾繼續添加windows
2>:錯誤輸出,會覆蓋掉原先的文件內容網絡
2>>:錯誤追加輸出,會覆蓋掉原始文件內容,會在原始內容末尾繼續添加運維
&>:將標準輸出與錯誤輸出共同寫入到文件中。覆蓋原有內容elasticsearch
&>>:將標準輸出與錯誤輸出共同寫入到文件中(追加到原有內容的後面)函數
標準輸入重定向(STDIN,文件描述符爲0):默認從鍵盤輸入,也可從其餘文件或命令中輸入。this
標準輸出重定向(STDOUT,文件描述符爲1):默認輸出到屏幕。spa
錯誤輸出重定向(STDERR,文件描述符爲2):默認輸出到屏幕。操作系統
案例1:使用覆蓋輸出(覆蓋原文內容)
[root@ken ~]# vim test [root@ken ~]# cat test this is ken [root@ken ~]# echo "this is oscar" > test [root@ken ~]# cat test this is oscar
案例2:使用追加輸出(原文中追加)
[root@ken ~]# cat test this is oscar [root@ken ~]# echo "this is ken" >> test [root@ken ~]# cat test this is oscar this is ken
案例3:使用錯誤輸出重定向
默認錯誤輸出會輸出倒終端之上
[root@ken ~]# cat klkl > test #使用輸出重定向沒法使錯誤輸出導入到文本中 cat: klkl: No such file or directory [root@ken ~]# cat klkl 2> test #須要使用2>錯誤輸出重定向 [root@ken ~]# cat test cat: klkl: No such file or directory
案例4:將標準輸出與錯誤輸出共同寫入到文件中
[root@ken ~]# cat klkl &> test [root@ken ~]# cat test cat: klkl: No such file or directory
工做中用到的比較少,瞭解便可,輸入重定向的做用是把文件直接導入到命令中。
案例:統計文本行數
[root@ken ~]# wc -l < /etc/passwd 28
管道命令符(|)的做用是把前一個命令本來要輸出到屏幕的標準正常數據看成是後一個命令的標準輸入。
例如咱們須要統計passwd文件包含root的行數
[root@ken ~]# cat /etc/passwd | grep "root" | wc -l 2
把搜索命令的輸出值傳遞給統計命令,即把本來要輸出到屏幕的用戶信息列表再交給wc命令做進一步的加工,所以只須要把管道符放到兩條命令之間便可
爲Linux運維人員,咱們有時候也會遇到明明一個文件的名稱就在嘴邊但就是想不起來的狀況。若是就記得一個文件的開頭幾個字母,想遍歷查找出全部以這個關鍵詞開頭的文件,該怎麼操做呢?
通配符就是通用的匹配信息的符號,好比
案例1:查看dev目錄下全部以sda開頭的文件
[root@ken ~]# ls /dev/sda* /dev/sda /dev/sda1 /dev/sda2
案例2:查看dev目錄下以sda開頭,後面有一個字符的文件
[root@ken ~]# ls /dev/sda? /dev/sda1 /dev/sda2
加上問號以後/dev/sda就匹配不到了
案例3:查看dev下以sda開頭,後面跟上數字的文件
匹配不到sda
[root@ken ~]# ls /dev/sda[0-9] /dev/sda1 /dev/sda2
案例4:查看dev下以sda開頭,後面跟上字母的文件
[root@ken ~]# ls /dev/sda[a-z] ls: cannot access /dev/sda[a-z]: No such file or directory
匹配不到任何文件,也匹配不到/dev/sda,後面跟上字符必須存在才能匹配到。
案例1:單引號,不解釋變量即所見即所得
[root@ken ~]# age=10 [root@ken ~]# echo 'my age is $age' my age is $age
案例2:雙引號,解釋變量
[root@ken ~]# age=10 [root@ken ~]# echo "my age is $age" my age is 10
案例3:反引號,用來執行命令
[root@ken ~]# name=`ls /root` [root@ken ~]# echo $name 10.txt 11.txt 12.txt 13.txt 14.txt 1.txt 2.txt 3.txt 4.txt 5 =5 5.txt 6.txt 7.txt 8.txt 9.txt anaconda-ks.cfg elasticsearch-6.4.0.tar.gz elasticsearch-6.4.0.tar.gz.1 ken kenken nohup.out redis-manager-1.1 redis-manager-1.1-release.tar.gz test test1.sh test.sh
軟鏈接:就是至關於windows下面的快捷方式
【軟連接至關於快捷方式,硬連接至關於複製粘貼】
建立完成後,源文件、軟連接和硬連接都可以查看到文件內容。
編輯源文件,軟、硬連接跟着動。
刪除源文件,軟連接失效,硬連接無影響。再從新建一個與源文件同名的文件,軟連接就直接連接到新的文件,而硬連接不變。由於軟連接是按着名稱進行連接。
ln -s
-s:指定源文件是誰 後面接 鏈接目標文件
[root@ken ~]# ln -s ken kenken [root@ken ~]# ls elasticsearch-6.4.0.tar.gz ken nohup.out redis-manager-1.1-release.tar.gz elasticsearch-6.4.0.tar.gz.1 kenken redis-manager-1.1
往鏈接文件添加一些內容
[root@ken ~]# echo "this is ken" > kenken [root@ken ~]# cat kenken this is ken [root@ken ~]# cat ken this is ken
發現源文件內容同步
刪除鏈接文件
[root@ken ~]# rm -rf kenken [root@ken ~]# cat ken this is ken
源文件不變
刪除源文件
[root@ken ~]# rm -rf ken [root@ken ~]# cat kenken cat: kenken: No such file or directory
鏈接文件失效
再次建立源文件
[root@ken ~]# touch ken [root@ken ~]# cat kenken [root@ken ~]# cat ken
再從新建一個與源文件同名的文件,軟連接就直接連接到新的文件。由於軟連接是按着名稱進行連接
總結:
軟鏈接
ln - s 原路徑 目標路徑
特色:
一、就是至關於win中的快捷方式
二、刪除連接文件,源文件無影響
三、刪除源文件,連接文件失效
四、修改源文件\連接文件,內容都發生改變
ln 源文件 目標文件
[root@ken ~]# ln ken ken1 [root@ken ~]# ls elasticsearch-6.4.0.tar.gz ken kenken redis-manager-1.1 elasticsearch-6.4.0.tar.gz.1 ken1 nohup.out redis-manager-1.1-release.tar.gz
總結:
一、刪除連接文件,源文件無影響
二、刪除源文件,連接文件無影響
三、修改源文件\連接文件,內容都發生改變
在Linux系統中,目錄、字符設備、塊設備、套接字等都被抽象成了文件,Linux系統中一切都是文件。既然平時咱們打交道的都是文件,那麼又應該如何找到它們呢?在Windows操做系統中,想要找到一個文件,咱們要依次進入該文件所在的磁盤分區(假設這裏是D盤),而後在進入該分區下的具體目錄,最終找到這個文件。可是在Linux系統中並不存在C/D/E/F等盤符,Linux系統中的一切文件都是從「根(/)」目錄開始的,並按照文件系統層次化標準(FHS)採用樹形結構來存放文件,以及定義了常見目錄的用途。另外,Linux系統中的文件和目錄名稱是嚴格區分大小寫的。例如,root、rOOt、Root、rooT均表明不一樣的目錄,而且文件名稱中不得包含斜槓(/)。Linux系統中的
文件存儲結構如圖6-1所示。
FHS是根據以往無數Linux系統用戶和開發者的經驗而總結出來的,是用戶在Linux系統中存儲文件時須要遵照的規則,用於指導咱們應該把文件保存到什麼位置,以及告
訴用戶應該在何處找到所需的文件。可是,FHS對於用戶來說只能算是一種道德上的約束,有些用戶就是懶得遵照,依然會把文件處處亂放,有些甚至歷來沒有據說過它。
Linux系統中常見的目錄名稱以及相應內容
目錄名稱 |
應放置文件的內容 |
/boot |
開機所需文件—內核、開機菜單以及所需配置文件等 |
/dev |
以文件形式存聽任何設備與接口 |
/etc |
配置文件 |
/home |
用戶主目錄 |
/bin |
存放單用戶模式下還能夠操做的命令 |
/lib |
開機時用到的函數庫,以及/bin與/sbin下面的命令要調用的函數 |
/sbin |
開機過程當中須要的命令 |
/media |
用於掛載設備文件的目錄 |
/opt |
放置第三方的軟件 |
/root |
系統管理員的家目錄 |
/srv |
一些網絡服務的數據文件目錄 |
/tmp |
任何人都可使用的「共享」臨時目錄 |
/proc |
虛擬文件系統,例如系統內核、進程、外部設備及網絡狀態等 |
/usr/local |
用戶自行安裝的軟件 |
/usr/sbin |
Linux系統開機時不會使用到的軟件/命令/腳本 |
/usr/share |
幫助與說明文件,也可放置共享文件 |
/var |
主要存放常常變化的文件,如日誌 |
/lost+found | 當文件系統發生錯誤時,將一些丟失的文件片斷存放在這裏 |
在Linux系統中另外還有一個重要的概念—路徑。
路徑指的是如何定位到某個文件,分爲絕對路徑與相對路徑。
絕對路徑指的是從根目錄(/)開始寫起的文件或目錄名稱
相對路徑則指的是相對於當前路徑的寫法。