2021-05-12 14:32:11
玩轉Linux之目錄和檔案管理(一)
等安裝完Linux後,你一定想知道怎麼使用這個作業系統吧!如果你安裝了圖形介面,那麼複製、貼上、刪除等操作,沿用Windows的思維 Ctrl+C 、Ctrl+V 當然是可行的。但是我要告訴你,這並不是在玩Linux,而是依然用的 Windows 的思想,在玩 Linux 的桌面。桌面對於Linux來說是可有可無的,因為它只是作為 Linux 上的一個軟體而存在,不像 Windows 的桌面是寫入到核心的。
那麼,就讓我們看看 Linux 的複製、貼上、刪除是怎麼一回事吧!
1
對 Linux 的操作並不是在圖形桌面上完成的,我們需要開啟一個終端,在終端上完成。Linux 的終端類似於 Windows 的 CMD 一樣,但是命令和功能比CMD 強大的太多了。Linux有六個終端,切換方式的 Alt+F1 到 Alt+F6,還有一個 Alt+F7 就可以切換回我們的圖形終端啦,之後我們輸入使用者名稱和密碼就可以登陸進去了。
下圖為我在某一個終端,以 root使用者的身份登陸進了系統。
2
等正常登入系統後會出現個以你的 使用者名稱@主機名 開頭的提示符。如果你是以普通使用者身份登陸的,在最末尾應該是 $ ,如果你像我一樣用 root 使用者登陸,那麼最末尾會是 #。敲幾下鍵盤我們發現可以輸入進去字元,你會不會感覺無從下手呢?應該輸入哪些字元才正確呢?脫離了桌面一時好不適應啊。但是對於Linux 來說一般用於伺服器,伺服器是不會安裝桌面的,因為安裝了桌面甚至會使伺服器變得不安全,大都會選擇遠端終端連線的方式操縱伺服器。所以大家要慢慢熟悉 Linux 終端下的操作,等熟悉了,你會發現在終端下工作的效率甚至比桌面還要高。
下圖為我遠端連線了一台 Linux 後演示使用者切換後 $ 與 # 的變化
3
我們先了解下Linux命令的格式:
命令 選項 引數
命令一般都是我們要完成的工作的簡稱,比如列出當前目錄中的檔案及目錄的命令 " ls ",就是 " list " 的簡寫。
其中選項分短選項與長選項,短選項前面要新增一個" - ",長選項前面要新增一個" -- "。如果存在多個選項可以組合起來,比如: " -a -b = -ab "。
短選項的意義是只有一個字母或數位的選項,長選項可以是幾個字母或者一個單詞。比如以長格式列出當前目錄下的檔案和目錄:「 ls -l「 ,以長格式列出當前目錄下的所有檔案(包括以" . "開頭的隱藏檔案)和目錄:" ls -l -a " 或者" ls -la "。其中選項的位置並不是固定的,比如:" ls -al "和 " ls -la "的效果是相同的。
引數就是命令的作用物件了。有些命令不需要引數就可以不寫,比如「 ls 」這個命令,如果加了引數,比如:「 ls -l linux 「,命令就會在當前目錄下尋找有沒有一個名字叫 " linux " 的檔案或目錄,然後列出它的詳細資訊。如果沒有那個檔案或目錄,就會提醒你沒有找到那個檔案或目錄。
下圖為 ls 命令的演示
4
接下來我們就好好看看 " ls " 這個命令一些常用引數的意義吧:
ls
-l:長格式(也就是列出更詳細的資訊)
-h:做單位轉換(一般要與 -l 一起用,檔案的大小會以合適的形式輸出。)
-a: 顯示以.開頭的隱藏檔案(Linux上把檔案改名為" .XXX " 的就可以隱藏了,比如:" .linux ")
-r: 逆序顯示(預設排序是 a - z)
-R: 遞回顯示(如果存在子目錄,會把子目錄的檔案和目錄都列出來)
5
我們不可能一直在當前目錄轉悠吧,當我們登陸系統時,預設會呆在自己的家目錄。每一個使用者都可以有自己的家目錄,當然這個不是必須的。看看下一個命令 " cd " 。有使用過CMD命令提示字元經驗的應該都知道這個命令的作用了吧,沒錯 就是切換目錄的命令。這個命令使用很簡單,直接給它一個存在的相對路徑或絕對路徑,它就很聽話的給你切換進去了。現在我們先了解一下 Linux系統是怎麼管理硬碟上的檔案的。6
大家都知道Windows系統會對硬碟分割區的顯示為 "C:" , "D:" , "E:" 等,就是所謂的C槽,D槽,E槽 嘍。檔案被組織到檔案系統中,Linux不同的是不會區分這麼多盤,它的檔案管理是一個樹狀結構,Linux只有一個根目錄 " / ", 也就是樹狀結構的最頂端。之後下面有其他檔案和目錄,目錄中再分目錄就形成了樹的結構。當我們要在目錄樹中尋找一個檔案時,從樹的頂端 " / " 開始尋找,比如定位到" /usr/local/file1 " ,這個路徑就是絕對路徑。如果我們剛好站到了 " /usr/local "這個資料夾中,我們尋找 file1 還需要從根找嗎?眼前的就是。我們用 " . " 表示當前目錄," .. " 表示父目錄,也就是上一級目錄。用相對路徑怎麼表示file1呢?那就是 " ./file1 "。如果file1在 " /usr/file1 "這個位置,相對路徑就是 " ../file1 "。總結下,絕對路徑就是從 " / "開始尋找檔案的路徑,相對路徑就是從當前目錄尋找檔案的路徑。對了,一個需要注意的地方是在Linux中是使用 "/" 正斜槓來分隔目錄的,不同於Windows的 " " 反斜槓。
7
我了 我們接著 cd 這個命令的話題。很簡單,給它一個目錄的路徑就切換過去了。不如我們去目錄樹的頂端 " / " 中去看看。執行命令:" cd / ",然後再 " ls "一下看看吧,是不是情景大換樣了呢
8
我們發現目錄是用藍色表示的,檔案用黑色。我們還可以 " ls /bin ",直接看看bin這個目錄中的檔案,我們發現竟然大多都是綠色的檔案。咦?仔細觀看竟然發現了一個叫 "ls" 的檔案。其實我們執行的命令都是Linux上的小程式,這些小程式都統一放到了一些目錄中,bin目錄只是其中的一個。Linux上可執行程式都要有可執行的許可權(關於許可權之類的以後會講)。有可執行許可權的都用綠色表示,就算是普通檔案,如果賦予了可執行許可權也會變成綠色的哦。那麼這些顏色都是怎麼來的呢?其實這是因為 ls 命令的一個長選項 " --color ",它會自動給不同的檔案新增不同的顏色,目錄也是一種特別的檔案哦。我們在執行 " ls " 這個命令的時候其實系統預設就新增了" --color=auto "這個長選項,單純的 " ls " 命令是沒有顏色的。alias這條命令以後也會講到。
二圖用 " alias "命令檢視我們輸入 " ls " 命令的實際操作和用 " unalias "取消 " ls "的" --color=auto "之後的對比
9
我們看到了在根目錄下有很多的資料夾,那麼這些資料夾都有什麼作用呢?/boot: 系統啟動相關的檔案,如核心、initrd,以及grub(bootloader)/dev: 裝置檔案(Linux上一切皆檔案的原則,你的硬碟就是用 /dev/sda 這個檔案表示了,這個檔案也是你操作硬碟的介面,比如格式化硬碟就是對這個檔案的操作)/etc:組態檔(系統和軟體的一些組態檔)/home:使用者的家目錄,每一個使用者的家目錄通常預設為/home/USERNAME/root:管理員的家目錄;/lib:庫檔案靜態庫, ?.a動態庫, .dll, .so (shared object)/lib/modules:核心模組檔案/me10
對了 剛才的那個 cd 命令存放在哪裡呢?Linux 提供了一個專門用來查詢其他命令的命令 " which "。我們想知道其他命令的位置,那麼就which一下。
# which ls
alias ls='ls --color=auto'
/bin/ls
不僅把路徑給我們了,把 ls 的別名也告訴我們了
# which cd
/usr/bin/which: no cd in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
它告我們沒有在以下哪些目錄中找到cd,開頭順便把自己的路徑(/usr/bin/which)也告訴我們了
那麼我們輸入的cd命令怎麼會找不到呢?因為cd屬於Linux的內建命令。
11
在Linux中的命令還區分內建命令和外部命令,內部命令是由 shell,也就是我們解析命令用的一個程式提供的,這個shell其實就是一種外部程式。我們登陸到系統後看到的命令提示字元其實就是因為系統為我們開啟了一個 shell 程式。
我們與核心的互動其實就是通過這個 shell程式,shell負責接收使用者輸入的命令進行解析,然後將需要的操作傳遞給核心執行。Linux 上擁有著很多的 shell程式,比如 sh 、bash、csh、zsh等等。而我們系統預設使用的是bash這個免費又強大的shell程式。我們可以檢視下這個bash在何處,發現也在/bin下。
在/bin下我們又找到了三個提供的shell:bash, dash, sh。要切換這些shell也很簡單,直接命令列輸入要切換的shell名稱就行了。
首先試了下dash,只顯示了一個 # ,果然好醜啊,exit命令退出當前shell,接著又試了試 sh 這個shell,好吧。。。也好看不到哪裡去,繼續退回我們的bash。那麼還能不能繼續進入一個 bash?當然可以,不過進入了幾個 bash,就要用幾個 exit 退出。那麼如果只有當前的一個bash,再輸入exit會怎麼樣?
你會發現你退出登入了,又回到了輸入使用者名稱的介面,我就不測試了,呵呵( ̄▽ ̄)"。
用 type 命令可以檢視其他命令型別是不是內建命令,用法和which差不多。
我們看看這個exit
# type exit
pwd is a shell builtin
# which exit
/usr/bin/which: no exit in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
我們發現exit也沒有路徑。
12
接下來我們再看看其他的命令吧!
如果我們 cd 了一個目錄,又 cd 了一個目錄,完了 像我這笨腦子已經迷失在Linux 的目錄樹中了,不可能 cd 到根去重新找吧。系統提供了一個 " pwd " 命令來顯示當前目錄的絕對路徑
但並不是所有內建命令都沒有路徑,比如pwd也是個內建命令,但它有自己的檔案路徑。不信你可以 which 和 type 看看。
13
給大家介紹一個檢視其他命令用法的命令:" man "。這個命令可以說之是Linux 系統命令的說明書。用法也很簡單,比如我們看下 " ls " 命令的說明書:
# man ls
接著終端就會開啟一個 ls 的說明書了,現在是全螢幕的,空格鍵下翻一頁,b 鍵上翻一頁,上下鍵為上翻一行和下翻行。
我們也可以 " man man "看下自己的說明書,哈哈。
這個說明書會記錄命令的詳細選項和用法,以後遇到記得不太熟的選項或命令記得交給" man "這個Linux系統的真男人幫忙哦~~o(^▽^)o
看完後摁 q 鍵退出
14
如果不想看man這個重量級的說明書,大多數的程式都提供了" --help " 這個長選項來說明自己的使用方法。
我們用" date --help "這個命令來看看顯示系統時間的命令"date"的用法吧
單輸date它會列出系統的當前年月日小時分鐘秒,我們也可以自己格式化輸出這些時間,比如:以" / "分隔年月日,以" : "分隔小時分鐘,他們之間再用空格分開
# date +%Y/%m/%d" "%H:%M
2015/01/25 20:13
是不是我們所想要的樣子呢?
我們也可以用data修改時間的哦,用法是直接跟月日小時分鐘年,記得年要放後面,來 我們穿越到2016年吧!
# date 012520182016
Mon Jan 25 20:18:00 EST 2016
再用自己的格式輸出一下
# date +%Y/%m/%d" "%H:%M
2016/01/25 20:18
是不是變成2016年了呢 哈哈
15
Linux的命令實在太多了,我們有時候沒記住一個命令,比如"date",我只記住了一個"da",剩下的部分死活都記不住了,這該怎麼辦呢?Linux也提供了一個非常好用的方法 Tab 鍵自動補全!比如你命令只輸入了一半,但是這一半已經能定位到這個命令了,也就是說前半部分沒有和這個命令衝突的其他命令了,那麼摁上下 Tab 鍵Linux就會自動對這個命令補全了,比如我輸入dat,然後摁了下Tab,是不是date立馬出現了呢。如果我們輸入了da,摁Tab鍵發現沒反應,那是因為不止一個前部分是da的其他命令,我們可以摁兩次Tab,系統就會把所有匹配到的命令都列出來,看看 是不是前面說過的dash這個shell也被列印出來了呢。不僅命令可以補全,就連路徑也可以補全的,不過命令是會被優先補全的。比如你在根目錄下,輸入一個h,Tab 兩下會把 h 開頭的命令都列出來,
根目錄下不是有個叫 home 的資料夾嗎?怎麼沒有出現呢?不過你輸入 hom 試試,當沒有命令被匹配到時它才開始匹配資料夾或檔案了,看看 是不是被匹配到了呢。
16
還有些Linux命令列的輔助操作:反斜槓 " " :如果一行命令內容太長了,輸入到末尾系統會自動斷行,這樣很影響美觀和閱讀性,我們可以使用反斜槓強制斷行,輸入反斜槓後直接回車繼續輸入剩下的命令就可以了。快捷鍵 Ctrl+U:快速刪除當前游標處之前的所有內容快捷鍵 Ctrl+K:快速刪除當前游標處之後的所有內容快捷鍵 Ctrl+L:清除當前螢幕所有內容,相當於命令 "clear"快捷鍵 Ctrl+C:取消當前命令的編輯,也可以用來終止當前執行的程式或指令碼17
如果我們想把命令的幫助手冊儲存成一個檔案,然後自己寫一本Linux命令說明大全,哈哈 會不會有什麼辦法呢?當然有了,那就是重定向輸出。這個重定向輸出是什麼意思呢?意思就是原本命令執行完的結果是列印到螢幕上的,然們把這些結果重定向到一個檔案,也就是不列印到螢幕啦,儲存成一個檔案得了。
輸出重定向:" > " 還有一個 " >> "
" > "和" >> "唯一不同的是 若都重定向到一個已經有內容的檔案 前者會清空這個檔案,然後儲存自己的內容,後者不會清空,而是疊加上去
我們先把 ls 的輸出儲存成一個檔案,然後用date的輸出也覆蓋上去,看看兩種重定向符號的不同
# ls > ls.txt
我們用cat命令可以檢視文字檔案的內容,cat 命令相當於Linux上的文字閱讀器,用法也很簡單,直接 cat filename 即可,使用 " -n "選項還可以輸出行號
# cat ls.txt
哈哈 是不是 ls 命令的輸出沒有出現在螢幕上呢?當前目錄也發現了一個新的檔案 " ls.txt ",開啟一看的確是當前目錄下的內容,甚至連自己也包含進來了。
18
接下來我們就試試date的幫助資訊也重定向上去把,首先我們先實驗" >> "吧
# date --help >> ls.txt
# cat ls.txt
是不是如圖一所示都疊加起來了呢,接下來再試試" > "
# date --help > ls.txt
# cat ls.txt
是不是如圖二那樣,只有date的幫助了呢
所以" > "我們可以叫做覆蓋重定向," >> " 叫做疊加重定向
19
原來我們輸入的命令還能找到嗎?當遇到一條命令要輸好多次,怎麼免去重新手打的痛苦呢?當然可以找到啦!我們試試摁下方向上鍵,是不是上一條命令出現了呢,繼續上,哇還有,然後再上,是不是以前輸入的都找出來了呢。方向鍵下就可以往下翻嘍。預設可以儲存1000條命令的,而且重新啟動系統後還能找出來。其實這些命令是儲存在當前登入使用者的家目錄中,root的家目錄就是在 /root 嘍,還有一個簡單進入家目錄的方法 " cd ~ " ,然後pwd下看看,是不是回家了呢?哈哈 如果在 " ~ " 之後加其他使用者的使用者名稱還可以去其他使用者的家哦,不過這是上帝般的使用者root的特權,其他使用者怎麼可能讓他們隨便瞎晃呢?好好呆在他們自己的家目錄就行了。預設輸入的命令都被儲存到了家目錄中" .bash_history "這個檔案裡,我們cat一下,是不是輸過的命令都看到了呢。作為系統管理員,這個檔案很敏感的,如果有駭客入侵了你的主機,你就可以檢視駭客到底幹了些什麼,如果你是這名駭客,走的時候記得把這個檔案清空哦,清空的方法很簡單,直接覆蓋重定向上去就行了。作為管理員的你也要記得時常清空這個檔案,免得駭客看到你幹了些什麼。
20
再介紹些其他很實用的命令:
uname -a 檢視系統資訊,包括是什麼系統,主機名,系統核心版本等
也可以 uname --help 檢視更多選項哦
cat /proc/cpuinfo 用cat命令檢視cpu資訊,忘記/proc這個資料夾的作用了嗎?
cat /proc/meminfo 檢視記憶體使用情況
當然也可以使用" free -m " 這個命令以Mb的形式顯示記憶體使用情況
hostname 檢視主機名,可以直接hostname後加新主機名來臨時修改主機名哦,再開啟個bash看看效果吧!不過重新啟動後會消失的,以後會講怎麼永久修改主機名的
halt 或者 poweroff 或者 shutdown -h now 用來關機的命令,只有root能用哦
reboot 或者 shutdown -r now 用來重新啟動,一樣只有root使用者能用
是不是發現 shutdown 出現的頻率好高,其實這是個很強大的命令,不僅可以關機、重新啟動,還可以定時或者延時關機和重新啟動,只用把後面的 now 改成其他就行了,具體請問" man "這個真男人吧,甚至可以假關機,用來惡作劇。哈哈 是不是很強大呢
21
du 統計目錄及檔案的空間使用情況
-a 統計所有檔案包括目錄的占用情況,子目錄也會統計
-h 以人性化的方式顯示統計結果,和 ls 的 -h 異曲同工哦
-s 只統計引數的占用大小,不會統計子目錄
注意個選項的搭配使用哦,一定要靈活
22
mkdir 建立目錄,後面直接跟目錄名即可
# mkdir dir1
# mkdir dir1/dir2
如果abc不存在的話想在abc中建立123,預設是不允許的,可以使用 -p 選項,一次性全部建立
# mkdir -p abc/123
也可以加 -v 選項檢視建立過程
# mkdir -pv apache/httpd
23
# touch filename 建立一個空檔案,本來touch是用來修改檔案的時間標記的,但生產環境中用來建立空檔案了。
我們可以用du命令來統計下這個檔案的大小
# du -sh filename
是不是一個空檔案呢
24
ln -s 原始檔或目錄 目標檔案或目錄
ln命令是用來建立連結的,就像是Windows的快捷方式一樣。但建立的連結有兩種,軟連結和硬連結,不加 -s 選項就是硬連結。他們的區別是軟連結的原始檔被刪除,連結檔案就不可用了,幾乎就是Windows的快捷方式。而硬連結不同,即使原始檔被刪除,只要硬連結在就不會真的被刪除,因為硬連結直接指向的是硬碟上儲存檔案的那塊空間,這塊空間可以由兩個甚至多個路徑去存取,就好像你知道去我家的路,他也知道去我家的路,只要你倆都沒掛,去我家的路的方法就還流傳在世間。不過硬連結不能作用於目錄,也不能跨分割區使用。
他們總體效果都差不多,應用更多的還是軟連結,記得加上 -s 選項哦
我們試試把bash這個命令直譯器連結到當前目錄來,沒忘記用 " . "來指定當前目錄吧
# ln -s /bin/bash .
然後 ls 看一下,是不是有一個天藍色的檔案呢,連結檔案以天藍色來區分
25
cp 選項 原始檔或目錄 目標檔案或目錄
copy的意思嘛,當然是用於複製了
-f 強行複製過去,就算對面有相同檔名的檔案也不提醒
-r 複製目錄必須使用這個選項,表示遞回復制包括子資料夾中的所有檔案
複製檔案或目錄時需要注意的是,目標檔案或目錄都是自己寫的,我們也可以選擇複製過來的同時給它換個名字,比如把/etc下的passwd檔案複製到家目錄
# cp /etc/passwd /root
# cp /etc/passwd /root/pd
第一條複製到/root中後檔名還是passwd,而第二條相當於你告訴它複製過來後 要把名字改成pd。如果正好目標資料夾有個重名的檔案,他就會問你是否覆蓋,輸入 y 表示確定,你可以加 -f 選項,無論如何也要強制覆蓋。第一條也相當與 cp /etc/passwd /root/passwd。接下來複製個資料夾試試,記得要新增 -r 選項,當然同理也可以給複製的資料夾重新命名。
# cp -r /bin /root/
# cp -r /bin /root/binary
如果 -rf 連用去複製,豈不是天下無敵的趨勢(●ˇ?ˇ●),對了,複製的原始檔可以有多個哦,但是不能給檔案重新命名了,比如:
# cp -rf /etc/passwd /bin /root
它只取最後一個引數做目標,而且必須是個路徑
26
rm 選項 檔案或目錄
-f 強行刪除
-r 刪除目錄必須使用這個選項,表示遞回刪除包括子資料夾中的所有檔案
rm -rf 是個很危險的組合啊,如果你不小心作用於根上 " rm -rf / ",那麼節哀順變吧,你的系統已經掛了。所以刪除檔案的時候一定要三思啊。同樣,rm 也是可以一次刪除多個的
# rm -rf /root/bin /root/pd /root/binary /root/passwd
27
mv 選項 原始檔或路徑 目標檔案或路徑
mv 便是移動命令了,它有個 -f 選項比較常用,也是代表無論如何都要移動過去,也可以一次移動多個檔案或目錄。這個命令還有一個作用就是給檔案或目錄重新命名哦,也就是移動過去改下名嗎,如果原始檔和目標檔案都在同一目錄下,不就是重新命名了嗎
# mv oldfile newfile
看看是否重新命名成功了呢
28
如果檔案多了想要根據某個特徵,快速查詢某個檔案該怎麼做呢
find 查詢範圍 匹配標準
-name filename 按名稱查詢
-size { + | - }number{ k | M | G } 按檔案尺寸查詢,+ 或 - 代表大於或小於k M G代表查詢的單位
-user root 按屬主查詢,查詢屬於root使用者的檔案
-type { f | d | c | d } 按型別查詢,f 代表檔案,d 代表目錄
查詢範圍是一個目錄,也是你要在哪裡查詢的地方,find命令可以說是非常強大的,具體使用請慢慢閱讀說明書,這裡只講幾個簡單常用的
在 /etc 目錄下,查詢名字為 passwd 的檔案
# find /etc -name passwd
在 /bin 下查詢 大於100k的檔案
# find /bin -size +100k
查詢 /usr 目錄中的其他目錄
# find /usr -type d
查詢檔案或目錄它會把子目錄中符合要求的檔案或目錄都遞回的列印出來
29
現在把本章出現的命令總結一些吧ls ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 列出檔案或目錄cd ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?切換到其他目錄which ? ? ? ? ? ? ? ? ? ? ? ? ?查詢其他命令路徑bash ? ? ? ? ? ? ? ? ? ? ? ? ? ?我們預設啟動的shell程式type ? ? ? ? ? ? ? ? ? ? ? ? ? ? 檢視其他命令型別pwd ? ? ? ? ? ? ? ? ? ? ? ? ? ? 列印當前目錄的絕對路徑man ? ? ? ? ? ? ? ? ? ? ? ? ? ? 檢視其他命令的說明書dat30
好了 這章就先介紹到這吧,敬請觀看下一篇:玩轉Linux之目錄和檔案管理(二)注意!!一大批命令正在接近!相關文章