Linux高級命令進階(week1_day2)--技術流ken

 

輸出重定向

 

場景:通常命令的輸出都會顯示在終端中,有些時候須要將一些命令的執行結果想要保存到文件中進行後續的分析/統計,則這時候須要使用到的輸出重定向技術。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. 星號(*)表明匹配零個或多個字符(能夠爲0個)
  2. 問號(?)表明匹配單個字符(單個字符必須存在)
  3. 中括號內加上數字[0-9]表明匹配0~9之間的單個數字的字符,
  4. 中括號內加上字母[abc]則是表明匹配a、b、c三個字符中的任意一個字符。

案例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. 單引號(''):轉義其中全部的變量爲單純的字符串。
  2. 雙引號(""):保留其中的變量屬性,不進行轉義處理。
  3. 反引號(``):把其中的命令執行後返回結果。

 

案例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所示。

第6章 存儲結構與磁盤劃分。第6章 存儲結構與磁盤劃分。

 

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

當文件系統發生錯誤時,將一些丟失的文件片斷存放在這裏

 

絕對路徑vs相對路徑

 

在Linux系統中另外還有一個重要的概念—路徑。

路徑指的是如何定位到某個文件,分爲絕對路徑與相對路徑。

絕對路徑指的是從根目錄(/)開始寫起的文件或目錄名稱

相對路徑則指的是相對於當前路徑的寫法。

相關文章
相關標籤/搜索