《調教命令行04》觸碰Linux的每一個角落(長文)

原創:小姐姐味道(微信公衆號ID:xjjdog),歡迎分享,轉載請保留出處。任何不保留此聲明的轉載都是抄襲。php

想要了解一我的,就先要了解他的靈魂。但是別說是靈魂了,就連一個真心的笑容,你在生活中也很難見到。更多的是菩薩手段,修羅心腸。不少人喜歡孩子的緣由,就是由於他們悲喜表於面,空白藏與心,與你進行的是靈魂的交流。mysql

因此妹子抽出手的時候,小王雖然略感失望,但尚未到影響心情的地步。這個多是真的拒絕,也多是欲說還休,處在朦朧狀態,也別有一番滋味。妹子已經不是孩子了,不可能直達靈魂,他也只能循序漸進,先了解一下對方基本喜愛,行爲舉止。linux

至於接下來,管它呢。有的人心扉一戳就開,有的卻把真實的一面直接帶進墳墓。到底遇見的是哪種,全憑運氣。nginx

小王就是這麼認爲。程序員

幸運的是,要想了解Linux的文件操做,能夠直接瞭解它的靈魂。web

想要了解linux的基本使用方法,就要了解一個基本的事實--linux系統中,一切皆文件。sql

無論是命令,仍是文檔,甚至設備,目錄,套接字,在linux上對它們的操做都是一致對待的。許多開發驅動程序的小夥伴,會發現使用的一些函數,和讀寫文件的沒什麼兩樣(open、close、read、write、ioctl)。今天咱們所說的基本操做,針對的就是普通文件和目錄,本小節將詳細解釋相關命令。shell

一、當前路徑

到如今爲止,咱們還不知道本身在系統的什麼地方。在瀏覽器上,咱們可以經過導航欄上的url,瞭解到本身在互聯網上的具體座標。類似的功能,是由pwd命令提供的,它可以輸出當前的工做目錄。數據庫

pwd命令是很是很是經常使用的命令,尤爲是在一些命令提示符設置不太友好的機器上。另外,它也常常用在shell腳本中,用來判斷當前的運行目錄是否符合需求。瀏覽器

有不少線上事故,都是因爲沒有確認當前目錄所引發的。好比rm -rf *這種危險的命令。在執行一些高危命令時,隨時確認當前目錄,是個好的習慣。

[root@localhost ~]# pwd
/root
複製代碼

咱們使用root用戶默認登錄後,就停留在/root目錄中。Linux中的目錄層次,是經過/進行劃分的。

二、文件系統用戶標準

Linux的文件系統,從一開始就有一個規範標準。它還有一個專有縮寫名詞,叫作FHS (Filesystem Hierarchy Standard)。FHS通過多年的演進,目錄結構也愈來愈清晰。除了一些標準的要求,還有一些使用者之間的約定。

接下來,咱們大致看一下linux上的默認目錄,對其有一個基本的感受。

第1層 第二層 介紹
/bin 目錄/usr/bin的軟連接
/sbin 目錄/usr/sbin的軟連接
/lib 目錄/usr/lib的軟連接
/usr /bin 存放一些經常使用的命令
/usr /sbin 存放一些管理員經常使用的命令
/usr /lib 用來存放動態庫和一些模塊文件
/sys 內核中的數據結構的可視化接口
/proc 內存映像
/run 內存映像
/boot 存放引導程序,內核相關文件
/dev 存放一些設備文件,好比光盤
/etc 用於存儲一些全局的、應用的配置文件
/var 與/var/run同樣,存放的是系統運行時須要的文件,好比mysql的pid等
/tmp 很是特殊的臨時文件夾,斷電丟失
/home /** 用戶目錄,好比個人目錄是/home/xjjdog
/root root用戶的home目錄
  • home 日常,咱們打交道最多的目錄,就集中在本身的用戶目錄,咱們能夠在裏面作任何操做,好比咱們如今root用戶的/root目錄。一些本身的資料,好比視頻、音頻、下載的文件,或者作測試用的一些數據資料,就能夠自行在這些目錄下規劃。root用戶比較特殊,普通用戶的私人目錄都是在/home下的。

  • /etc etc目錄是常常要打交道的目錄,存放了一些全局的系統配置文件和應用配置文件。好比你安裝了php,或者nginx,它們的配置文件就躺在/etc目錄下的某個文件夾裏。

  • /var var目錄存放一些運行中的數據,有必須的,也有非必須的。一些黑客入侵以後,會在這裏面的某些文件中留下痕跡,他們會着重進行清理。var目錄仍是一些應用程序的默認數據存放之地,好比mysql的數據文件。

  • /tmp 目錄是一個特殊的臨時目錄,文件在斷電之後就消失了。但這個目錄,全部的用戶,都有寫入權限,一般用來作文件交換用。

  • /proc/sys目錄,是兩個神奇的目錄。它們兩個是一種僞文件系統,能夠經過修改其中一些文件的狀態和內容,來控制程序的行爲(修改後會直接刷到內存上,太酷了)。剛開始的時候,只有proc目錄,因爲裏面內容有多又亂,後面又規劃出sys目錄,用來控制內核的一些行爲。若是你在調優一些系統參數,和這些文件打交道的時間比較多。

  • 還有幾個空的目錄,咱們沒有列在上面的表格上。好比/srv目錄,一般會把一些web服務的資料,好比nginx的,放在這裏面。可是,這並非強制要求的,因此我見過的/srv目錄,一般會一直是空的。一樣的,/opt目錄也是這樣一個存在,你就當它不存在就行。這都屬於使用者規劃的範疇,自定義性很是強。

  • 在使用Linux系統的時候,也能夠建立本身的目錄。好比,我就喜歡本身建立一個叫作/data的目錄,用來存放一些數據庫相關的內容。舉個例子,/data/mysql存放mariadb的數據,而/data/es/存放elasticsearch的索引內容。

linux上的文件類型有不少,它們大部分都分門別類的存放在相應的目錄中,好比/dev目錄下,就是一些設備文件;/bin文件下,是一些能夠執行命令。一般都好記的很。

三、查看文件列表

因此,上面的表格內容,我是怎麼看到的呢,靠記憶麼?ls命令,可以列出相關目錄的文件信息。能夠被評爲linux下最勤勞的命令標兵。

如今的終端,都可以輸出彩色的信息,很是的直觀。oh-my-zshoh-my-bash等項目,可讓你的終端更加的漂亮。把它加入到你的研究清單裏吧。

[root@localhost /]# ls /
# 注意:ls能夠接受路徑參數,你不用先跳轉,就能夠輸出相關信息
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@localhost /]# ls -l /
# 帶上 -l參數,能夠查看一些更加詳細的信息。
total 20
lrwxrwxrwx.   1 root root    7 Nov  3 20:24 bin -> usr/bin
dr-xr-xr-x.   5 root root 4096 Nov  3 20:34 boot
drwxr-xr-x.  19 root root 3080 Nov  3 21:19 dev
drwxr-xr-x.  74 root root 8192 Nov  3 20:34 etc
drwxr-xr-x.   2 root root    6 Apr 11  2018 home
lrwxrwxrwx.   1 root root    7 Nov  3 20:24 lib -> usr/lib
lrwxrwxrwx.   1 root root    9 Nov  3 20:24 lib64 -> usr/lib64
drwxr-xr-x.   2 root root    6 Apr 11  2018 media
drwxr-xr-x.   2 root root    6 Apr 11  2018 mnt
drwxr-xr-x.   2 root root    6 Apr 11  2018 opt
dr-xr-xr-x. 108 root root    0 Nov  3 21:19 proc
dr-xr-x---.   2 root root  135 Nov  4 07:53 root
drwxr-xr-x.  24 root root  740 Nov  3 21:20 run
lrwxrwxrwx.   1 root root    8 Nov  3 20:24 sbin -> usr/sbin
drwxr-xr-x.   2 root root    6 Apr 11  2018 srv
dr-xr-xr-x.  13 root root    0 Nov  3 21:19 sys
drwxrwxrwt.   9 root root 4096 Nov  4 03:40 tmp
drwxr-xr-x.  13 root root  155 Nov  3 20:24 usr
drwxr-xr-x.  19 root root  267 Nov  3 20:34 var
複製代碼

ls最經常使用的,就是加參數l或者參數a

3.一、詳細信息

加上參數l,可以看到文件的一些權限信息已經更新日期等。但咱們還看到了一些更有意思的東西。好比:

lib -> usr/lib
複製代碼

上面表示的,是軟連接信息。

就如同咱們上面表格所展現的同樣,lib目錄,是/usr/lib的快捷方式,它們之中的內容,沒有什麼兩樣。

關於ls -l展現的更加詳細的內容,能夠參照我下面的這張圖。咱們將在瞭解後面小節的內容後,再次對這張圖進行回顧。

3.2 隱藏文件

直接在你的/root目錄裏,執行ls -al,你會看到更多東西。這些額外的隱藏文件,都是以.開頭,以配置文件居多。這就是參數a的做用。

[root@localhost ~]# ls -al
total 28
dr-xr-x---.  2 root root  135 Nov  4 07:53 .
dr-xr-xr-x. 17 root root  224 Nov  3 20:28 ..
-rw-------.  1 root root 1273 Nov  3 20:28 anaconda-ks.cfg
-rw-------.  1 root root  246 Nov  4 11:41 .bash_history
-rw-r--r--.  1 root root   18 Dec 28  2013 .bash_logout
-rw-r--r--.  1 root root  176 Dec 28  2013 .bash_profile
-rw-r--r--.  1 root root  176 Dec 28  2013 .bashrc
-rw-r--r--.  1 root root  100 Dec 28  2013 .cshrc
-rw-r--r--.  1 root root  129 Dec 28  2013 .tcshrc
複製代碼

細心的同窗,應該會注意到兩個特殊的目錄。...。前者表示的是當前目錄,然後者表示的是上層目錄。

使用cd命令,將在這些目錄中,自由穿梭。

小技巧:若是你對英文日期閱讀困難,可使用ls -al --full-time查看可讀的日期。

四、切換目錄

執行cd命令,能夠將工做目錄切換到目標文件夾。爲了展現cd命令的效果。請在root用戶下,執行下面的命令,這將建立一個7層的目錄。

cd
mkdir -p a1/b2/c3/d4/e5/f6/{g7,g8,g9,g10}
複製代碼

咱們使用cd命令,切換到最後一層。而後,咱們使用..切換到上層目錄。

[root@localhost ~]# cd a1/b2/c3/d4/e5/f6/g7
[root@localhost g7]# pwd
/root/a1/b2/c3/d4/e5/f6/g7

[root@localhost g7]# cd ..
[root@localhost f6]# pwd
/root/a1/b2/c3/d4/e5/f6
複製代碼

因此,切換到上面n層目錄,只需使用多層級的../便可。有幾個特殊的變量,須要說明一下。

  • ../ 指的是上層目錄
  • ../../ 指的是上兩層目錄
  • ./ 指的是當前目錄
  • ~ 指的是當前的用戶目錄,這是一個縮寫符號
  • - 使用它,能夠在最近兩次的目錄中來回切換

咱們來使用命令把上面這些特殊變量驗證一下。

# 跳轉到用戶根目錄
[root@localhost tmp]# cd ~
[root@localhost ~]# pwd
/root

# 進入到第三層目錄
[root@localhost ~]# cd a1/b2/c3/
[root@localhost c3]# pwd
/root/a1/b2/c3

# 跳回到前三層目錄
[root@localhost c3]# cd ../../..
[root@localhost ~]# pwd
/root

# 跳到上次訪問的目錄
[root@localhost ~]# cd -
/root/a1/b2/c3
[root@localhost c3]# pwd
/root/a1/b2/c3

# 進入當前目錄:等於什麼都沒幹
[root@localhost c3]# cd ./
[root@localhost c3]# pwd
/root/a1/b2/c3
複製代碼

以上就是cd命令的經常使用用法。如今,咱們返回頭來看一下mkdir。顧名思義,就是建立目錄的意思,但通常在工做中,都會加上-p參數,這樣就能夠一次性建立多層目錄。注意mkdir後面的大括號{},能夠一次性的指定多個目錄進行建立,這一般能節省不少時間。

五、文件操做

使用命令行操做文件,是很是方便的。

  • touch 新建文件
  • cp 複製文件
  • mv 移動文件
  • rm 刪除文件

這四個風騷的命令,主宰着文件資料的去向。咱們依然使用上面建立的目錄,進行接下來的操做。

# 建立三個文件
[root@localhost ~]# touch long-long-long.txt
[root@localhost ~]# touch 996.txt
[root@localhost ~]# touch icu.txt
[root@localhost ~]# ls
996.txt  a1  anaconda-ks.cfg  icu.txt  long-long-long.txt

# 複製一個文件
[root@localhost ~]# cp 996.txt 007.txt
[root@localhost ~]# mv long-long-long.txt short.txt
[root@localhost ~]# ls
007.txt  996.txt  a1  anaconda-ks.cfg  icu.txt  short.txt

# 移動996.txt到a1目錄,icu.txt到a1/b2目錄
# 刪除short.txt
[root@localhost ~]# mv 996.txt a1/
[root@localhost ~]# mv icu.txt a1/b2/
[root@localhost ~]# rm short.txt
rm: remove regular empty file ‘short.txt’? y

# 遞歸刪除a1目錄
[root@localhost ~]# rm -rvf a1/
removed directory: ‘a1/b2/c3/d4/e5/f6/g7’
removed directory: ‘a1/b2/c3/d4/e5/f6/g8’
removed directory: ‘a1/b2/c3/d4/e5/f6/g9’
removed directory: ‘a1/b2/c3/d4/e5/f6/g10’
removed directory: ‘a1/b2/c3/d4/e5/f6’
removed directory: ‘a1/b2/c3/d4/e5’
removed directory: ‘a1/b2/c3/d4’
removed directory: ‘a1/b2/c3’
removed ‘a1/b2/icu.txt’
removed directory: ‘a1/b2’
removed ‘a1/996.txt’
removed directory: ‘a1/’

[root@localhost ~]# ls
007.txt   anaconda-ks.cfg
複製代碼

通過一番操做之後,只剩下了007了。除了上面基本的操做,接下來我要介紹一些更加劇要的功能。

能夠看到在使用rm刪除文件的時候,進行了一次提示。這是爲了不誤刪除一些東西,但有時候,你須要不顯示這種提示,就能夠加-f參數。f參數對於cp、mv等命令來講,一樣適用,它是force的意思。

rm -f file
cp -f file1 file2
mv -f file1 file2
複製代碼

另外,還有一個參數-r,這是遞歸的意思。咱們的目錄和文件,一般有多個層次,遞歸能夠把操做所有做用於上面,好比上面的遞歸刪除a1目錄。

# 警告:如下命令會形成嚴重後果
rm -rf /
複製代碼

上面的這個命令,你必定常常看到。這不是笑話,已經有不少用戶所以丟失了數據,這就是傳說中的刪根,最終你將一無全部。那參數v又是幹什麼用的呢?加上它以後,能夠看到命令詳細的執行過程。在日常的操做中,我通常都加上。

六、小結

本文介紹了linux上的一些基本操做,可以讓咱們在系統中任意漫遊。這一小節比較囉嗦,主要是照顧新接觸的同窗,後面的命令,咱們會慢慢簡化。讓咱們再回顧一下這些命令。

# 建立目錄和父目錄a,b,c,d
mkdir -p a/b/c/d

# 拷貝文件夾a到/tmp目錄
cp -rvf a/ /tmp/

# 移動文件a到/tmp目錄,並重命名爲b
mv -vf a /tmp/b

# 刪除tmp目錄的全部文件
rm -rvf /tmp/*

# 建立目錄hi,並當即刪除它。注意中間的&&
mkdir hi && rmdir hi
複製代碼

七、思考&擴展

一、我可以把cd ../../../../.. 這種繁瑣的命令縮寫麼?(提示:alias命令)

二、Linux上文件類型都有哪些?

END

計算機系統,比人擁有更少的隱藏。它的強邏輯性,使得一切都變的透明。但配合使用人員的千八百種操做,它又賦予了不一樣的意義。

對Linux來講,

有的人,把它當成吃飯的傢伙,多學一點都感受浪費生命。 有的人,把它當成一種興趣,狂熱的想要了解它的方方面面。 有的人,把它當成一個玩具,只有在無聊寂寞的時候纔想到它。 有的人,把它包裝成神通常的存在,瘋狂的收割韭菜。 有的人,把它用在項目中,讓效率如虎添翼。 而有的人,用它埋下一個炸彈,讓它和老闆原地爆裂...

對於小王來講,挑戰性不只僅是妹子是什麼樣的人,更重要的是他想變成什麼樣的人。

以銅爲鑑,能夠正衣冠;以人爲鑑,能夠明得失;以史爲鑑,能夠知興替。可愛情是個啥,卻無覺得鑑。

做者簡介:小姐姐味道 (xjjdog),一個不容許程序員走彎路的公衆號。聚焦基礎架構和Linux。十年架構,日百億流量,與你探討高併發世界,給你不同的味道。個人我的微信xjjdog0,歡迎添加好友,​進一步交流。​


6 pwd 6 ls 4 cd 4 mv 3 rm 4 cp 2 mkdir 3 touch 2 rmdir 1 . 1 ..

相關文章
相關標籤/搜索