Linux下一切皆文件,在Linux中是如何對不一樣的文件進行管理的,首先在Linux中將相同類型的文件存在指定的目錄中,不一樣的發行商可能採用不一樣的標準去歸類建立不一樣的目錄,這樣就會形成不少管理上的困擾。因而就有了所謂的Filesystem Hierarchy Standard(FHS)
標準,其主要的目的是規範每一個特定的目錄下應該要存放什麼文件。這樣就能方便用戶對文件進行管理。shell
Linux中的目錄結構在邏輯上是以樹狀的形式存在的,能夠經過如下明林查看根目錄以及子目錄:數據庫
[root@localhost ~]# tree -L 1 / / ├── bin -> usr/bin ├── boot ├── dev ├── etc ├── home ├── lib -> usr/lib ├── lib64 -> usr/lib64 ├── media ├── mnt ├── opt ├── proc ├── root ├── run ├── sbin -> usr/sbin ├── srv ├── sys ├── tmp ├── usr └── var 19 directories, 0 files
C:\Windows\system32
;注意:在Centos 7中/bin和/sbin兩個目錄是/usr/bin和/usr/sbin目錄的軟連接(Windows中的快捷方式)安全
/dev: 存儲特殊文件或設備文件,設備有字符設備(線性設備)和 塊設備(隨機設備)兩種類型;bash
系統的磁盤文件存放在/dev目錄下,好比/dev/sda3:網絡
3: 表明一塊磁盤的分區編號架構
/lib: 爲系統啓動或根文件系統上的應用程序(/bin,/sbin等)提供共享庫,以及爲內核提供內核模塊;less
注意:在Centos 7中/lib和/lib64兩個目錄是/usr/lib和/usr/lib64目錄的軟連接curl
/usr: 全局共享只讀文件目錄,重要性僅次於根目錄;ide
net.ipv4.ip_forward
,虛擬爲net/ipv4/ip_forward
,存儲在/proc/sys/
目錄下,所以其完整路徑爲/proc/sys/net/ipv4/ip_forward
;Linux系統的文件目錄是以目錄樹的形式存儲的,那麼在Linux系統中咱們如何可以找到一個文件所在的位置?聯想現實生活中,咱們要去某個地方去找某我的,首先必須先知道那我的在什麼地方,而後依照路線去找到那我的。一樣在Linux系統中要找到一個文件,首先要知道該文件大概在哪一個目錄下,而後經過路徑去找到該文件。因而就有了相對路徑和絕對路徑:工具
相對路徑:根據當前環境
相對路徑,關鍵點在於當前在什麼路徑下。假設當前目錄在/usr/local
下,那麼它的上層目錄(/usr
目錄);
絕對路徑:惟一的路徑
Linux系統採用了目錄樹的文件組織結構,在Linux下每一個目錄或文件均可以從根目錄處開始尋找。好比/usr/bin
目錄,這種從根目錄開始的全路徑被稱爲"絕對路徑",絕對路徑必定是以"/"
開頭的,如何確認當前所在的目錄,可使用pwd
命令查看:
[root@localhost ~]# pwd /root
對於目錄的管理主要有,建立和刪除目錄,以及目錄的移動或者重命名。這節主要看在Linux下如何建立和刪除目錄,下節結合文件的管理對目錄的移動和重命名進行說明。在介紹建立和刪除目錄以前,先看一下兩個命令:
ls - list directory contents
列出指定目錄下的內容。
基本用法:
[root@localhost ~]# ls / bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr
經常使用選項:
-a --all 列出全部文件,包括隱藏的文件 -l 以長格式的方式列出文件信息 -d 顯示目錄自己,不顯示目錄中的內容 -h 人性化顯示,按照咱們習慣的單位顯示文件大小 -i 顯示文件的i節點號
ls
命令使用案例:
## 以長格式顯示全部文件 [root@localhost ~]# ls -al ## 顯示目錄自己的信息 [root@localhost ~]# ls -ld /etc drwxr-xr-x. 144 root root 8192 Feb 25 21:01 /etc ## -l選項以長格式顯示文件信息 [root@localhost ~]# ls -l total 8 . 1 root root 1257 Aug 28 00:13 anaconda-ks.cfg
ls -l
用來顯示文件詳細信息,那麼-l
選項顯示這7列分表表明什麼:
第一列:權限,-rw-r--r--
rw-
表明文件所屬者的權限:
r--
表明文件所屬組的權限r--
表明文件其餘用戶的權限change director
,cd
命令用於切換目錄,也就是讓當前用戶切換到指定的目錄下。
基本用法:
[root@localhost ~]# cd /etc [root@localhost etc]# pwd /etc
cd
特殊用法:
[root@localhost ~]# cd - #切換至上次所在目錄 [root@localhost ~]# cd ~ # 切換至當前用戶的家目錄 [root@localhost ~]# cd # 切換至當前用戶的家目錄 [root@localhost ~]# cd . # .表明當前目錄,通常在拷貝、移動文件等狀況下使用 [root@localhost ~]# cd .. # 切換至當前目錄的上級目錄
make directory
建立一個當前目錄下不存在的目錄
基本用法:
[root@localhost ~]# mkdir a
經常使用選項:
-p 遞歸建立目錄,若是上級要建立目錄的上級目錄不存在則建立,若是不存在不報錯 -v 顯示建立目錄詳情
示例:
## 在/tmp/viktor目錄下建立a_c、a_d、b_c、b_d目錄: [root@localhost ~]# mkdir -pv /tmp/viktor/{a,b}_{c,d} # 這塊使用了命令行展開,以後說明
rmdir - remove empty directories
,刪除空目錄
基本用法:
[root@localhost ~]# rmdir -v a
若是該目錄下有文件或者目錄,rmdir命令就不能將該目錄刪除。
Linux一切皆爲文件,在對Linux進行配置時,很大程度上就是處理文件的過程,因此掌握文件的相關操做是很是有必要的文件的通常操做有:建立、複製、刪除、移動、重命名、以及查看文件相關的信息。
touch - change file timestamps
,當文件不存在時建立文件,當文件存在時更新文件的時間戳信息。
[root@localhost ~]# touch /tmp/viktor_{1..10}.txt [root@localhost ~]# touch filename [root@localhost ~]# touch filename_1 filename_2 [root@localhost ~]# touch /home/server/file5 file5 [root@localhost ~]# touch file{1..10} [root@localhost ~]# touch file{a..z}
stat - display file or file system status
,stat
命令能夠查看一個文件或者一個文件系統的相關的信息。
基本用法:
[root@localhost ~]# stat filename
cp - copy files and directories
,cp
命令用來對文件或目錄進行復制。
基本用法:
cp 源文件/目錄 目標文件/目錄
cp命令在複製文件或者目錄的過程當中,牽涉到用戶所要複製的文件或者目錄時一個仍是多個,目標文件或者目錄是否存在,存在以及不存在會是什麼樣的狀況,下面分別來看下cp命令中的單源複製和多源複製時注意事項:
單源複製:
cp [OPTION]… [-T] SOURCE DEST
多源複製:
cp [OPTION]… SOURCE… DIRECTORY cp [OPTION]… -t DIRECTORY SOURCE…
經常使用選項:
-i: 交互式複製,若是目標文件存在,提醒用戶是否覆蓋; -f: 強制覆蓋目標文件; -r –R: 遞歸複製目錄; -d: 複製符號連接文件自己,而非其指向的源文件; -a: -dR --preserve=all, archive,用於實現歸檔; --preserve = mode: 權限 ownership: 屬主和屬組 timestamps: 時間戳 context: 安全標籤 xattr: 擴展屬性 links: 符號連接 all: 上述全部屬性
rm - remove files or directories
,rm
命令用來刪除指定的文件或目錄。
基本用法:
rm [OPTION]… FILE...
經常使用選項:
-r: 遞歸刪除(通常在刪除目錄時使用) -f: 強制性刪除,不提醒用戶 -v: 刪除時顯示詳細過程
mv - move (rename) files
,mv
用來移動(重命名)文件或目錄。
基本用法:
mv [OPTION]... [-T] SOURCE DEST
mv
命令也牽扯到單源移動和多源移動:
單源移動:對於單源移動,分爲目標是否爲目錄,以及目標文件是否存在。
多源移動:對於多源移動,目標必須爲目錄,不然會報錯。
## 在用戶家目錄下建立6個文件 song1.mp3 ~ song6.mp3 [root@localhost ~]# touch song{1,2,3,4,5,6}.mp3 ## 把上述建立的songX.mp3文件移動到/Music目錄(不存在則建立) [root@localhost ~]# mkdir /Music [root@localhost ~]# mv song* /Music/ ## 在用戶家目錄下建立三個目錄,分別爲 friends, family, work [root@localhost ~]# mkdir friends family work ## 切換到friends目錄下,把/Music目錄下的song1.mp3 ~ song6.mp3拷貝到當前目錄 [root@localhost ~]# cd friends/ [root@localhost friends]# cp /Music/song* ./ ## 切換到family目錄下,把/Music目錄下的song1.mp3 ~ song6.mp3移動到當前目錄 [root@localhost ~]# cd family/ [root@localhost family]# mv /Music/song* ./
Linux中有許多用來查看文件內容的命令,這些命令用在查看文件時的不一樣需求下,包括cat、more、less、head、tail命令,其中more和less命令屬於分頁顯示文件的命令。
cat - concatenate files and print on the standard output
,cat
命令用來讀取文件的內容,一次性將文件讀取到內存中,以後顯示的終端屏上。只適用於讀取小文件。該命令還有像文件中寫入內容的功能。
基本用法:
cat [OPTION]... [FILE]...
經常使用選項:
-n: 顯示行號 -A: 顯示文件中的全部字符,包括回車符和TAB符
特殊用法:
## 使用cat命令向指定的文件中寫入內容: [root@localhost ~]# cat >> a.txt <<EOF
more - file perusal filter for crt viewing
,more
命令用來分頁顯示文件內容,適用於讀取大文件的內容。
基本用法:
[root@localhost ~]# more anaconda-ks.cfg
翻頁翻行功能:
空格鍵翻頁;回車鍵一次滾動一行
more
命令的缺點在於,對於文件的內容只能向後查看。相對於more
命令,less
命令更加靈活。
less - opposite of more
,less
命令用來查看文件內容,相對於more
命令,因爲less
命令可以反覆的對文件內容進行查看,而被普遍利用,man手冊中就使用的less
命令來查看命令使用手冊。
基本用法:
[root@localhost ~]# less anaconda-ks.cfg
翻屏:
空格鍵: 向文件尾翻一屏; b: 向文件首部翻一屏; Ctrl+d: 向文件尾部翻半屏; Ctrl+u: 向文件首部翻半屏; 回車鍵: 向文件尾部翻一行; k: 向文件首部翻一行; G: 跳轉至最後一行; #G: 跳轉至指定行; lG: 跳轉至文件首部;
文本搜索:
/keyword: 從文件首部向文件尾部依次查找; ?keyword: 從文件尾部向文件首部依次查找; n: 與查找命令方向相同; N: 與查找命令方向相反;
退出:
q: quit
有時候用戶只須要查看文件的首部幾行或者尾部幾行,那麼head和tail命令就能派上用場。
head - output the first part of files
,顯示指定文件的指定幾行,默認顯示文件的頭10行。
基本用法:
[root@localhost ~]# head /etc/passwd
經常使用選項:
-n: 指定顯示文件頭n行
[root@localhost ~]# head -n 3 /etc/passwd
tail - output the last part of files
,顯示文件尾的任意行,默認顯示倒數10行。
基本用法:
[root@localhost ~]# tail /etc/passwd
經常使用選項:
-n: 指定顯示文件倒數n行 -f: 追蹤顯示文件末尾的內容(常用在對日誌文件的監控)
[root@localhost ~]# tail -n 3 /etc/passwd [root@localhost ~]# tail -n 3 -f /var/log/messages
wget //文件下載 -O //指定下載地址。更更名稱 -T //超時時間 -q //安靜下載(不顯示wget輸出) --spider //網絡爬蟲 curl //文件下載 curl –o http://www.baidu.com yum install lrzsz rz //文件上傳 sz //文件下載 sz filename
對於系統管理員來講,有時候須要在系統中查找一個文件,或者是查找一個命令以及該命令手冊所在的位置,這樣就能方便管理員的管理,那麼在文件和命令的查找所用的命令有locate
, which
, whereis
, find
(後面詳解),下面分別介紹這些命令的用法:
locate - find files by name
,locate
命令經過文件名來查找文件。
基本用法:
[root@localhost ~]# locate /etc/p
locate
命令會查找指定目錄下包含給出字符串開頭的全部文件。locate /etc/p
就會查找/etc
目錄下以p
開頭的全部文件。
經常使用選項:
-i: 查找時忽略大小寫
該命令的優勢在於查找速度快,由於其存在一個數據庫,每次查找命令在這個數據庫中查找。可是,該命令查找不是實時查找,若是有一個新文件,可是數據庫沒有更新,那麼經過locate
命令就查找不到,這也是其缺點所在,經過updatedb
命令更新locate
數據庫。find
命令能夠實時查詢文件,可是在查找的效率上比不上locate
命令。
which - shows the full path of (shell) commands
,which
命令會顯示當前shell下命令二進制文件所存的路徑。只能查找系統PATH
變量中所包含的目錄下的命令(絕對路徑)。
基本用法:
[root@localhost ~]# which locate
whereis - locate the binary, source, and manual page files for a command
,whereis
命令顯示定位某個命令的二進制文件、源碼以及該命令手冊文件的路徑。非PATH
變量查找,因此查找的範圍比which
要廣。
基本用法:
[root@localhost ~]# whereis ls
經常使用選項:
-b 僅查找二進制文件 -m 僅查找命令手冊文件 -s 僅查找源文件
對文本文件進行處理時,有時候須要對文件中的一些字符進行處理,好比說按照某個字段對文件中內容進行排序、或者是統計文件中內容重複的行數等操做,那麼和這些操做相關的命令就是字符處理命令。
sort - sort lines of text files
,對文本文件中的每一行進行排序。
基本用法:
[root@localhost ~]# sort /etc/passwd
不加任何選項的sort命令,默認以文件中的第一個字段以及空格爲分隔符進行排序。
經常使用選項:
-r: 倒序 -n: 按數字排序 -t: 指定分隔符(默認爲空格) -k: 指定第幾列,指定第幾列第幾個字符(指定1,1 3.1,3.3)
sort
的用法示例1:
[root@localhost ~]# cat >> sort.txt <<EOF > b:3 > c:2 > a:4 > e:5 > d:1 > f:11 > EOF
[root@localhost ~]# sort sort.txt ## sort默認從小到大排序。 a:4 b:3 c:2 d:1 e:5 f:11
[root@localhost ~]# sort -t ":" -k2 sort.txt d:1 f:11 c:2 b:3 a:4 e:5
看到輸出的內容,可能有一個疑問,爲何第二行的是11,這一行不該該是排在最後一行的嗎?上面使用的命令只會看到第一個字符,11的第一個字符是1,按照字符的排序確實比2小。若是想要按照數字的形式進行排序,須要使用-n選項。
[root@localhost ~]# sort -t ":" -n -k2 sort.txt d:1 c:2 b:3 a:4 e:5 f:11 ## 按照第二列的數字對sort.txt文件進行逆序排序。 [root@localhost ~]# sort -t: -k2nr sort.txt f:11 e:5 a:4 b:3 c:2 d:1
sort
用法示例2:
[root@localhost ~]# cat >> test.txt <<EOF > 192.168.3.1 > 192.168.3.2 > 192.168.3.3 > 192.168.2.20 > 192.168.2.21 > 192.168.2.22 > 192.168.0.151 > 192.168.0.152 > 192.168.0.153 > 192.168.1.10 > 192.168.1.11 > 192.168.1.12 > 192.168.1.1 > 192.168.2.2 > 192.168.3.3 > 192.168.2.20 > 192.168.1.21 > 192.168.2.22 > 192.168.0.151 > 192.168.1.152 > 192.168.0.153 > 192.168.3.10 > 192.168.1.11 > 192.168.3.12 > EOF
[root@localhost ~]# sort -t. -k3.1,3.1n -k4.1,4.3n test.txt 192.168.0.151 192.168.0.151 192.168.0.152 192.168.0.153 192.168.0.153 192.168.1.1 192.168.1.10 192.168.1.11 192.168.1.11 192.168.1.12 192.168.1.21 192.168.1.152 192.168.2.2 192.168.2.20 192.168.2.20 192.168.2.21 192.168.2.22 192.168.2.22 192.168.3.1 192.168.3.2 192.168.3.3 192.168.3.3 192.168.3.10 192.168.3.12
uniq - report or omit repeated lines
,若是文件中有多行徹底相同的內容,固然是但願能刪除重複的行,同時還能夠統計出徹底相同的行出現的總次數,那麼就可使用uniq
命令解決這個文件(可是必須配合sort命令使用)。
基本用法:
[root@localhost ~]# cat uniq.txt | sort | uniq
uniq
命令須要結合sort
命令一塊兒使用,先使用sort
進行排序,讓文中重複的內容連續出如今一塊兒,而後再去重。
經常使用選項:
-c: 計算重複的行出現的次數
[root@localhost ~]# cat uniq.txt | sort | uniq -c
cut - remove sections from each line of files
,cut
命令用來截取文件中每一行的指定字段。
經常使用選項:
-d: 指定分隔符 -f: 數字,取第幾列,好比-f3,6 取第三列和第六列 -c: 按字符取(空格也算)
cut
命令使用案例:
## 過濾出文件裏server以及552408925。 [root@localhost ~]# cut -d" " -f2,6 server.com