Linux基礎之文件目錄

1 系統目錄結構

1.1 系統目錄介紹

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

1.2 Linux的目錄結構

  • /bin: 用戶命令存放的位置至關於Windows中的C:\Windows\system32
  • /sbin:系統管理使用的工具程序;

    注意:在Centos 7中/bin和/sbin兩個目錄是/usr/bin和/usr/sbin目錄的軟連接(Windows中的快捷方式)安全

  • /boot: 引導加載器必須用到的各類靜態文件,主要有Kernel,initramfs(initrd),grub等;
  • /dev: 存儲特殊文件或設備文件,設備有字符設備(線性設備)和 塊設備(隨機設備)兩種類型;bash

    系統的磁盤文件存放在/dev目錄下,好比/dev/sda3:網絡

    • sd: 磁盤類型,特殊磁盤類型vd(KVM)
    • a: 磁盤排序,第一塊磁盤爲a,第二塊磁盤爲b,以此類推
    • 3: 表明一塊磁盤的分區編號架構

      • 1-4: 表示主分區或擴展分區(前四個分區是並行存在,也就是說編號爲1的分區 後能夠爲編號爲3的分區)
      • 5- : 表示邏輯分區(邏輯分區的編號必須按照排序號進行)
  • /etc: 系統程序的配置文件,只能爲靜態文件;
  • /home: 普通用戶的家目錄集中位置。通常每一個普通用戶的家目錄是此目錄下與用戶同名額子目錄;
  • /root: 管理員的家目錄;
  • /lib: 爲系統啓動或根文件系統上的應用程序(/bin,/sbin等)提供共享庫,以及爲內核提供內核模塊;less

    • libc.so.*: 動態連接的C庫
    • ld*: 運行時連接器/加載器
    • modules: 用於存儲內核模塊的目錄
  • /lib64: 64位系統特有的存放64位共享庫的路徑;

    注意:在Centos 7中/lib和/lib64兩個目錄是/usr/lib和/usr/lib64目錄的軟連接curl

  • /media: 便攜式設備掛載點,通常cdrom、floppy、u盤等都是掛載在該目錄下;
  • /mnt:其餘文件系統的臨時掛載點;
  • /opt:附加應用程序的安裝位置,可選路徑;
  • /srv: 當前主機爲服務提供的數據,主機特有的;
  • /tmp:爲那些會產生臨時文件的程序提供的用於存儲臨時文件的目錄,可提供全部用戶執行寫入操做,有特有權限;
  • /usr: 全局共享只讀文件目錄,重要性僅次於根目錄;ide

    • ./bin, ./sbin, ./lib, ./lib64
    • ./include: C程序頭文件
    • ./share: 命令手冊頁和自帶文檔等架構特有的文件存儲位置
    • ./local: 另外一個層級目錄,讓系統管理員安裝本地應用程序,也一般用於安裝第三方程 序
    • ./XllR64: X-Windows程序安裝位置
    • ./src: 程序源碼文件的存儲位置
  • /var: 存儲常發生變化的數據文件;
  • /proc:基於內存的虛擬文件系統,用於實現爲內核及進程存儲其餘相關信息,它們多爲內核參數,例如net.ipv4.ip_forward,虛擬爲net/ipv4/ip_forward,存儲在/proc/sys/目錄下,所以其完整路徑爲/proc/sys/net/ipv4/ip_forward
  • /sys:sysfs文件系統的掛載點,爲虛擬文件系統提供了一種比proc更爲理想的訪問內核數據的途徑,主要做用於爲管理Linux設備提供一種統一模型的接口。

2 文件路徑定位

Linux系統的文件目錄是以目錄樹的形式存儲的,那麼在Linux系統中咱們如何可以找到一個文件所在的位置?聯想現實生活中,咱們要去某個地方去找某我的,首先必須先知道那我的在什麼地方,而後依照路線去找到那我的。一樣在Linux系統中要找到一個文件,首先要知道該文件大概在哪一個目錄下,而後經過路徑去找到該文件。因而就有了相對路徑和絕對路徑:工具

2.1 相對路徑

相對路徑:根據當前環境

相對路徑,關鍵點在於當前在什麼路徑下。假設當前目錄在/usr/local下,那麼它的上層目錄(/usr目錄);

2.2 絕對路徑

絕對路徑:惟一的路徑

Linux系統採用了目錄樹的文件組織結構,在Linux下每一個目錄或文件均可以從根目錄處開始尋找。好比/usr/bin目錄,這種從根目錄開始的全路徑被稱爲"絕對路徑",絕對路徑必定是以"/"開頭的,如何確認當前所在的目錄,可使用pwd命令查看:

[root@localhost ~]# pwd
/root

3 目錄管理命令

對於目錄的管理主要有,建立和刪除目錄,以及目錄的移動或者重命名。這節主要看在Linux下如何建立和刪除目錄,下節結合文件的管理對目錄的移動和重命名進行說明。在介紹建立和刪除目錄以前,先看一下兩個命令:

3.1 ls命令

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--

    • 第一個橫杆表明文件的類型:
    • -: 表明普通文件
    • d: 表明目錄
    • l: 表示連接文件
    • b: 表示塊設備文件
    • c: 表示字符設備文件
    • s: 管道文件
    • rw-表明文件所屬者的權限:

      • r: 寫權限
      • w: 讀權限
      • x: 執行權限
    • r--表明文件所屬組的權限
    • r--表明文件其餘用戶的權限
  • 第二列:引用計數。文件的引用激素表明該文件的硬連接個數,而目錄的引用計數表明該目錄有多少個一級子目錄。
  • 第三列:文件全部者 ,也就是這個文件屬於哪一個用戶。默認全部者是問價的創建者。
  • 第四列:所屬組。默認所屬組是文件創建用戶的有效組,通常狀況下就是創建用戶的所在組。
  • 第五列:文件大小。默認單位是字節。
  • 第六列:文件修改時間。文件狀態修改時間或文件數據修改時間都會更改這個時間,注意這個時間不是文件的建立時間。
  • 第七列:文件名。

3.2 cd命令

change directorcd命令用於切換目錄,也就是讓當前用戶切換到指定的目錄下。

基本用法:

[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 ..      # 切換至當前目錄的上級目錄

3.3 mkdir命令

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} # 這塊使用了命令行展開,以後說明

3.4 rmdir命令

rmdir - remove empty directories,刪除空目錄

基本用法:

[root@localhost ~]# rmdir -v a

若是該目錄下有文件或者目錄,rmdir命令就不能將該目錄刪除。

4 文件管理命令

Linux一切皆爲文件,在對Linux進行配置時,很大程度上就是處理文件的過程,因此掌握文件的相關操做是很是有必要的文件的通常操做有:建立、複製、刪除、移動、重命名、以及查看文件相關的信息。

4.1 touch命令

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}

4.2 stat命令

stat - display file or file system statusstat命令能夠查看一個文件或者一個文件系統的相關的信息。

基本用法:

[root@localhost ~]# stat filename

4.3 cp命令

cp - copy files and directoriescp命令用來對文件或目錄進行復制。

基本用法:

cp 源文件/目錄 目標文件/目錄

cp命令在複製文件或者目錄的過程當中,牽涉到用戶所要複製的文件或者目錄時一個仍是多個,目標文件或者目錄是否存在,存在以及不存在會是什麼樣的狀況,下面分別來看下cp命令中的單源複製和多源複製時注意事項:

單源複製:

cp [OPTION]… [-T] SOURCE DEST
  • 狀況1:若是目標不存在,則事先建立此文件,並複製源文件的內容至目標文件中;
  • 狀況2:若是目標存在,而且是非目錄文件,則覆蓋目標文件;
  • 狀況3:若是目標存在,而且是目錄文件,則先在目標目錄下建立一個與源文件同名的文件,並複製源文件的內容。

多源複製:

cp [OPTION]… SOURCE… DIRECTORY
cp [OPTION]… -t DIRECTORY SOURCE…
  • 狀況1:若是目標不存在,報錯;
  • 狀況2:若是目標存在,而且是非目錄,錯誤;
  • 狀況3:若是目標存在,而且是目錄,分別複製每一個文件夾至目標目錄中,並保持原名。

經常使用選項:

-i: 交互式複製,若是目標文件存在,提醒用戶是否覆蓋;
-f: 強制覆蓋目標文件;
-r –R: 遞歸複製目錄;
-d: 複製符號連接文件自己,而非其指向的源文件;
-a: -dR --preserve=all, archive,用於實現歸檔;
--preserve =
    mode: 權限
    ownership: 屬主和屬組
    timestamps: 時間戳
    context: 安全標籤
    xattr: 擴展屬性
    links: 符號連接
    all: 上述全部屬性

4.4 rm命令

rm - remove files or directoriesrm命令用來刪除指定的文件或目錄。

基本用法:

rm [OPTION]… FILE...

經常使用選項:

-r: 遞歸刪除(通常在刪除目錄時使用)
-f: 強制性刪除,不提醒用戶
-v: 刪除時顯示詳細過程

4.5 mv命令

mv - move (rename) filesmv用來移動(重命名)文件或目錄。

基本用法:

mv [OPTION]... [-T] SOURCE DEST

mv命令也牽扯到單源移動和多源移動:

單源移動:對於單源移動,分爲目標是否爲目錄,以及目標文件是否存在。

  • 狀況1:目標爲目錄, 此時會將源文件移動到指定的目錄下
  • 狀況2:目標爲文件並該文件存在, 此時會提醒用戶是否覆蓋目標文件,使用-f選項能夠強制移動;
  • 狀況3:目標爲文件而且該文件不存在,此時,若是目標不存在,就會建立相應的目標文件,而後將源文件移動至目標文件,至關於對源文件進行重命名;

多源移動:對於多源移動,目標必須爲目錄,不然會報錯。

4.6 練習

## 在用戶家目錄下建立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* ./

5 文件查看命令

Linux中有許多用來查看文件內容的命令,這些命令用在查看文件時的不一樣需求下,包括cat、more、less、head、tail命令,其中more和less命令屬於分頁顯示文件的命令。

5.1 cat命令

cat - concatenate files and print on the standard outputcat命令用來讀取文件的內容,一次性將文件讀取到內存中,以後顯示的終端屏上。只適用於讀取小文件。該命令還有像文件中寫入內容的功能。

基本用法:

cat [OPTION]... [FILE]...

經常使用選項:

-n: 顯示行號
-A: 顯示文件中的全部字符,包括回車符和TAB符

特殊用法:

## 使用cat命令向指定的文件中寫入內容:
[root@localhost ~]# cat >> a.txt <<EOF

5.2 more命令

more - file perusal filter for crt viewingmore命令用來分頁顯示文件內容,適用於讀取大文件的內容。

基本用法:

[root@localhost ~]# more anaconda-ks.cfg

翻頁翻行功能:

空格鍵翻頁;回車鍵一次滾動一行

more命令的缺點在於,對於文件的內容只能向後查看。相對於more命令,less命令更加靈活。

5.3 less命令

less - opposite of moreless命令用來查看文件內容,相對於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

5.4 head命令

有時候用戶只須要查看文件的首部幾行或者尾部幾行,那麼head和tail命令就能派上用場。

head - output the first part of files,顯示指定文件的指定幾行,默認顯示文件的頭10行。

基本用法:

[root@localhost ~]# head /etc/passwd

經常使用選項:

-n: 指定顯示文件頭n行
[root@localhost ~]# head -n 3 /etc/passwd

5.5 tail命令

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

6 文件下載命令

wget //文件下載
    -O //指定下載地址。更更名稱
    -T //超時時間
    -q //安靜下載(不顯示wget輸出)
    --spider //網絡爬蟲
    
curl //文件下載
curl –o http://www.baidu.com

yum install lrzsz
rz //文件上傳
sz //文件下載
sz filename

7 命令查找命令

對於系統管理員來講,有時候須要在系統中查找一個文件,或者是查找一個命令以及該命令手冊所在的位置,這樣就能方便管理員的管理,那麼在文件和命令的查找所用的命令有locate, which, whereis, find(後面詳解),下面分別介紹這些命令的用法:

7.1 locate命令

locate - find files by namelocate命令經過文件名來查找文件。

基本用法:

[root@localhost ~]# locate /etc/p

locate命令會查找指定目錄下包含給出字符串開頭的全部文件。locate /etc/p就會查找/etc目錄下以p開頭的全部文件。

經常使用選項:

-i: 查找時忽略大小寫

該命令的優勢在於查找速度快,由於其存在一個數據庫,每次查找命令在這個數據庫中查找。可是,該命令查找不是實時查找,若是有一個新文件,可是數據庫沒有更新,那麼經過locate命令就查找不到,這也是其缺點所在,經過updatedb命令更新locate數據庫。find命令能夠實時查詢文件,可是在查找的效率上比不上locate命令。

7.2 which命令

which - shows the full path of (shell) commandswhich命令會顯示當前shell下命令二進制文件所存的路徑。只能查找系統PATH變量中所包含的目錄下的命令(絕對路徑)。

基本用法:

[root@localhost ~]# which locate

7.3 whereis命令

whereis - locate the binary, source, and manual page files for a commandwhereis命令顯示定位某個命令的二進制文件、源碼以及該命令手冊文件的路徑。非PATH變量查找,因此查找的範圍比which要廣。

基本用法:

[root@localhost ~]# whereis ls

經常使用選項:

-b   僅查找二進制文件
-m   僅查找命令手冊文件
-s   僅查找源文件

8 字符處理命令

​ 對文本文件進行處理時,有時候須要對文件中的一些字符進行處理,好比說按照某個字段對文件中內容進行排序、或者是統計文件中內容重複的行數等操做,那麼和這些操做相關的命令就是字符處理命令。

8.1 sort命令

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
  • 對sort.txt文件進行排序
[root@localhost ~]# sort sort.txt  ## sort默認從小到大排序。
a:4
b:3
c:2
d:1
e:5
f:11
  • 按照數字對sort.txt文件中的行進行排序
[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

8.2 uniq命令

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

8.3 cut命令

cut - remove sections from each line of filescut命令用來截取文件中每一行的指定字段。

經常使用選項:

-d: 指定分隔符
-f: 數字,取第幾列,好比-f3,6 取第三列和第六列
-c: 按字符取(空格也算)

cut命令使用案例:

## 過濾出文件裏server以及552408925。
[root@localhost ~]# cut -d" " -f2,6 server.com
相關文章
相關標籤/搜索