1. 程式人生 > >linux文件層級、目錄、文件基本操作介紹

linux文件層級、目錄、文件基本操作介紹

文件、目錄基本操作

1、文件層級FHS介紹:

Filesystem Hierarchy Standard(文件系統層次化標準)的縮寫,多數Linux版本采用這種文件組織形式,類似於Windows操作系統中c盤的文件目錄,FHS采用樹形結構組織文件。

FHS定義了系統中每個區域的用途、所需要的最小構成的文件和目錄,同時還給出了例外處理與矛盾處理。


/:linux文件系統根目錄

/bin:供所有用戶使用的基本命令文件

/sbin:供系統管理員使用的工具程序文件

/lib:供/bin和/sbin程序調用的庫文件程序,及系統啟動時需要的庫文件

/lib64:供64為系統使用的庫文件,及系統啟動時需要的庫文件

/boot:系統啟動引導的靜態文件(kernel、initranfs、grub等)

/dev:存儲設備文件和特殊文件。

/etc:主機特有配置文件,只能為靜態文件,一般是文本文件。 etc也是層級目錄結構。

/etc/opt,/etc/x11,/etc/xml,

/home:用戶家目錄,可選目錄

/media:便攜設備掛載點,如光盤、u盤等

/mnt:其他文件的臨時掛載點

/opt:附加應用程序的安裝位置(第三方應用程序),可選路徑。

/root:管理員的家目錄

/srv:當前主機為服務提供數據的目錄

/tmp:臨時文件,為那些產生臨時文件的程序提供的用於存儲臨時文件的目錄,可供所有用戶執行寫操作。

/usr:全局共享只讀數據路徑,它也是一個層級文件系統。

/var:存儲經常變化的數據目錄,它也是一個層級文件系統。

/proc:用來為內核及進程存儲相關信息,多位內核參數。

/sys:提供比/proc更理想的訪問linux內核參數的方法途徑,其主要作用於為管理linux設備提供一種統一模型的接口。



2、linux文件類型:

Linux文件的類型可以通過命令:ls -l 來查看,一般有如下幾種

-:普通文件

d:目錄文件

b:塊設備文件,塊設備文件以“block”為單位,對數據可以進行隨機訪問。

c:字符設備文件,字符設備文件以“字符”為單位,對數據只能進行線性訪問。

l:符號鏈接文件,相當於windows中的快捷方式

p:命令管道文件

s:套接字文件


3、linux目錄、文件操作常用命令:

3.1、創建目錄:mkdir,刪除目錄rmdir

3.2、文件內容查看常用命令:cat、tac、首尾部分查看(tail、head)、分屏查看(more、less)

3.3、文件復制、移動、刪除命令:cp、mv、rm


mkdir:創建目錄

格式:

mkdir [OPTION]... DIRECTORY...

[OPTION]:

-p:如果父目錄不存在,則自動創建父目錄,

-m:創建目錄時,設定目錄權限

-v:顯示命令執行的詳細信息

如:

[[email protected] ~]# mkdir /tmp/x/y/z

mkdir: cannot create directory ‘/tmp/x/y/z’: No such file or directory

[[email protected] ~]# mkdir -p /tmp/x/y/z

[[email protected] ~]#


rmdir:刪除空目錄

格式:

rmdir [OPTION]... DIRECTORY...

[OPTION]:

-p:刪除子目錄後,如果父目錄為空,則一並刪除

-v:顯示命令執行的詳細信息


cat:把文件和標準輸出連接起來,即查看文件內容,它會直接顯示到文件尾部一行,

格式: cat [OPTION]... [FILE]...

[OPTION]

E:顯示文件每一行尾的$

n:顯示文件每一行號

如:


tac:和cat類似,只是它是從文件尾部進行查看,不做翻屏處理


tail:輸出文件最後一部分內容,默認為文件尾部10行,

格式:tail [OPTION]... [FILE]...

[OPTION]

-c:輸出文件尾部多少K字節內容;

-f:輸出文件最後不退出,並顯示追加的內容,

-n 數字:顯示從文件尾部指定多少行開始顯示,默認10行

-n +數字: 顯示從第幾行開始顯示到行尾



head:輸出文件的開始部分,默認為10行;

格式: head [OPTION]... [FILE]...

[OPTION]:

-n:指定前多少行


more:分屏查看文件內容,最後直接退出

格式:more [options] file [...]


less:分屏查看文件內容,最後不直接退出,需敲入q退出,man命令調用的less命令;

/pattern:從上往下搜索內容,n方向一致,N方向相反搜索

?pattern:從下往上搜索內容,n方向一致,N方向相反搜索

#G:跳轉指定行

GG:跳轉文件尾部

空格:向尾部翻一屏

b鍵:向首部翻一屏


cp:文件復制命令 : 復制源文件到目的文件或目錄,復制多個源文件到目錄

格式:

單源復制:cp [OPTION]... [-T] SOURCE DEST

多源復制:cp [OPTION]... SOURCE... DIRECTORY

多源復制:cp [OPTION]... -t DIRECTORY SOURCE...


單源復制:cp [OPTION]... [-T] SOURCE DEST

如果DEST不存在,則事先創建此文件,並復制源文件的數據流至DEST中

如果DEST存在,

如果DEST是非目錄文件,則復制源文件數據流覆蓋目標文件;

如果DEST是目錄文件,則先在DEST目錄下創建一個與源文件同名的文件,並復制源文件


多源復制:cp [OPTION]... SOURCE... DIRECTORY

如果DEST不存在,會報錯

如果DEST存在,

如果DEST是非目錄文件,會報錯

如果DEST是目錄文件,分別復制每個文件至目錄文件中,並保持原名。

[OPTION]:

-i:交換式復制,即覆蓋前提醒用戶確認

-f:強制覆蓋目標文件

-r:遞歸復制目錄文件

-d:復制符號鏈接文件本身,而非其指向的源文件

-a:用於實現歸檔,保持源文件的所有讀寫執行和屬主屬組權限。

如:

[[email protected] ~]$ cp /etc/issue /tmp //DEST目標文件不存在,

[[email protected] ~]$ ls /tmp

anaconda.log

hsperfdata_root

hsperfdata_user

ifcfg.log

issue


[[email protected] user]# cp /etc/issue /etc/fstab /tmp/abc //復制issue、fstab文件到目錄abc

cp: target ‘/tmp/abc’ is not a directory

[[email protected] user]# mkdir /tmp/abc

[[email protected] user]# !cp

cp /etc/issue /etc/fstab /tmp/abc

[[email protected] user]# ls /tmp/abc

fstab issue

[[email protected] user]#


[[email protected] ~]# mkdir /tmp/bcd

[[email protected] ~]# cp -rv /var/log/ /tmp/bcd //復制目錄,DEST需事先存在


註意:復制後的文件/目錄權限和屬主屬組發生了變化。可以用-a選項保持這些參數

[[email protected] ~]# cp /var/log/tomcat/ /tmp/

cp: omitting directory ‘/var/log/tomcat/’

[[email protected] ~]# cp -rv /var/log/tomcat/ /tmp/

‘/var/log/tomcat/’ -> ‘/tmp/tomcat’

‘/var/log/tomcat/catalina.out’ -> ‘/tmp/tomcat/catalina.out’

[[email protected] ~]# ll /var/log/tomcat/ /tmp/tomcat/

/tmp/tomcat/:

total 4

-rw-r-----. 1 root root 28 Sep 17 18:16 catalina.out


/var/log/tomcat/:

total 4

-rw-rw----. 1 tomcat tomcat 28 Nov 6 2016 catalina.out

[[email protected] ~]# cp -a /var/log/firewalld /tmp/

[[email protected] ~]# ll /var/log/firewalld /tmp/firewalld

-rw-r--r--. 1 root root 0 Aug 29 20:22 /tmp/firewalld

-rw-r--r--. 1 root root 0 Aug 29 20:22 /var/log/firewalld



mv:移動文件或重命名文件

格式: mv [OPTION]... [-T] SOURCE DEST

mv [OPTION]... SOURCE... DIRECTORY

mv [OPTION]... -t DIRECTORY SOURCE...



rm:刪除文件或目錄

格式: rm [OPTION]... FILE...

[OPTION]:

-i:交互式命令

-r:遞歸操作,刪除目錄時會有用。

-f:強化操作

[[email protected] ~]# rm /tmp/bcd/

rm: cannot remove ‘/tmp/bcd/’: Is a directory

[[email protected] ~]# rm -r /tmp/bcd/

rm: remove directory ‘/tmp/bcd/’? y

[[email protected] ~]# ls /tmp/bcd

ls: cannot access /tmp/bcd: No such file or directory

[[email protected] ~]#



4、bash的基礎特性介紹:

4.1、命令歷史:history

shell進程會在其會話中保存此前用戶提交的執行過的命令。

命令格式:history 【option】

history的環境變量有:

HISTSIZE:shell進程可保留的命令歷史的條數

HISTFILE:持久保存命令歷史的文件,一般每個用戶下都會有,如家目錄下的.bash_history

HISTFILESIZE:定義歷史文件的大小。


option選項有:

-c:清空歷史命令列表

-d:偏移量,刪除指定命令歷史

-r:從命令歷史文件中讀取命令至命令歷史中(內存)

-w:把歷史列表中命令追加至歷史文件中。


調用命令歷史列表中的命令: !

!#:再一次執行命令歷史列表中的第#條命令

!!:再一次執行上一次操作的命令

!sting:再一次執行最近一次可以匹配命令歷史列表中的以sting開頭的命令。


調用上一條命令中最後一個參數:

快捷鍵:esc + . :按esc鍵後松開,再按點號(.)

字符組合:!$. :嘆號和$號一起按


控制命令歷史記錄的方式:

環境變量:HISTCONTROL (修改僅對當前shell有效)

HISTCONTROL=ignoredups:忽略重復的命令

HISTCONTROL=ignorespace:忽略以空白字符開頭的命令

HISTCONTROL=ignoreboth:以上兩者同時忽略


4.2、命令補全、路徑補全(按tab鍵)

shell程序在接收到用戶執行的命令請求時,分析完成後,最左側的字符串會被當作命令執行。


命令處理機制:

查找內部命令

根據PATH環境變量中設定的目錄,從左向右逐個按目錄查找


命令補全機制:

給定的打頭字符串如果唯一標識某命令文件,則tab鍵直接補全

給定的打頭字符串如果不能唯一標識某命令程序文件,則再按一次tab鍵,會給出命令列表。


路徑補全機制:

根據給定的起始路徑補全,即以對應路徑下的打頭字符串來逐一匹配起始路徑下的每個文件。

如果能唯一標識某路徑,則補全,否則,再按一次tab,給出列表。



4.3、命令行展開: ~、{ }

~ :自動展開為用戶的家目錄( # cd ~),或指定用戶的家目錄(# cd ~ user)

{ }: 可承載一個以“,”(逗號)分隔的路徑列表,並能夠將其展開為多個路徑。如:/tmp/{a,b}相當於/tmp/a和/tmp/b


如:

創建/tmp目錄下的:a_c,a_d,b_c,b_d,

[[email protected] ~]# mkdir /tmp/{a,b}_{b,d}

[[email protected] ~]# ls /tmp/

a_b

a_d

b_b

b_d


創建/tmp/mylinux目錄下的目錄結構:

[[email protected] ~]# tree /tmp/mylinux/

/tmp/mylinux/

├── bin

├── boot

│ └── grup

├── dev

├── etc

│ ├── rc.d

│ │ └── init.d

│ └── sysconfig

│ └── network-scripts

├── lib

│ └── modules

├── lib64

├── proc

├── sbin

├── sys

├── tmp

├── usr

│ ├── local

│ ├── bin

│ └── sbin

└── var

├── lock

├── log

└── run


26 directories, 0 files

[[email protected] ~]#

[[email protected] ~]# mkdir -p /tmp/mylinux/{bin,boot/grup,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var/{lock,log,run}}


4.4、命令的執行狀態結果

bash通過狀態返回值來查看命令的執行結果,狀態返回值保存於bash的特殊變量“$?"中。

註意:$? 只能獲得最近命令執行的狀態結果。

通過:#echo $? 執行結果來查看命令執行狀態結果。

如果命令成功執行:輸出數字“0”

如果命令未成功執行:輸出數字“1-255”中的一個數字,

如:

[[email protected] ~]# ls /

1 boot etc lib media opt root sbin sys usr

bin dev home lib64 mnt proc run srv tmp var

[[email protected] ~]# echo $?

0

[[email protected] ~]#

[[email protected] ~]# lsls /

bash: lsls: command not found...

[[email protected] ~]# !echo

echo $?

127

[[email protected] ~]#




4.5、引用命令的執行結果: $(命令) 或 `命令` 註意 ` 為反引號。

如:#mkdir $(date +%H-%M-%S) //引用時分秒為創建目錄的名字。


4.6、變量的引用:

‘ 變量 ’ :單引號表示強引用,引用變量本身;

”變量“ :雙引號表示弱引用,引用變量的執行結果

$(命令) :命令執行結果引用


4.7、bash快捷鍵:

ctrl+a:跳轉至命令行首部

ctrl+e:跳轉至命令行尾部

ctrl+u:刪除行首至光標所在處之間的所有字符

ctrl+k:刪除光標所在處至行尾之間的所有字符

ctrl+l:清屏,相當於clear命令


4.8、glob通配符(文件名通配符)

linux的哲學思想之一就是一切皆文件,眾多文件組織在一起,可以通過glob通配符去匹配需要的文件名。

註意:glob匹配的是整個文件名,而非部分文件名。

glob通過“元字符”去匹配信息。

元字符介紹:

* : *表示匹配任意長度任意字符

?: ?表示匹配任意單個字符

[ ] : [ ]表示匹配指定範圍內的任意單個字符

[a-z]: 表示匹配a-z A-Z中的任意一個字母,不區分大小寫;即匹配所有字母

[A-Z]:表示匹配a-z A-Z中的任意一個字母,不區分大小寫;即匹配所有字母

[0-9]:表示匹配所有數字中的一個數字,即匹配所有數字

[a-z0-9]:表示匹配所有的字母和數字

[abcde]:表示匹配abcde中的任意一個字符

特定格式:

[[:upper:]] :表示匹配所有大寫字母中的一個

[[:lower:]] :表示匹配所有小寫字母中的一個

[[:alpher:]] :表示匹配所有字母(大小寫)中的一個

[[:digit:]] :表示匹配所有數字

[[:alnum:]] :表示匹配所有字母和數字中的一個

[[:space:]] :表示匹配所有空白字符

[[:punct:]] :表示匹配所有標點符號

[^ ] : [^ ]表示匹配指定範圍外的任意單個字符

[^[:upper:]] : 表示匹配所有大寫字母以外的單個字符

[^abcde] : 表示匹配abcde外的任意一個字符

如:

顯示/var/log目錄下所有以l開頭,以一個小寫字母結尾,且中間出現一位數字的文件或目錄

[[email protected] ~]# ls -d /var/log/l[0-9][[:lower:]]

顯示/etc目錄下,以任意一位數字開頭,且以非數字結尾的文件或目錄

[[email protected] ~]# ls -d /etc/[0-9]*[^0-9]

復制/etc/目錄下,所有以.conf結尾,且以mnrp開頭的文件或目錄至/tmp/conf.d目錄下

[[email protected] ~]# mkdir /tmp/conf.d

[[email protected] ~]# cp -r /etc/[mnrp]*.conf /tmp/conf.d



5、常用命令:alias,unalias,stat,touch

[[email protected] ~]# alias cls=clear

[[email protected] ~]# alias

alias cls=‘clear‘

[[email protected] ~]# unalias cls


stat命令:查看文件元數據信息

每個文件都有兩類數據:

元數據:metadata //不是文件的組成部分,描述文件屬性的信息,類似winodws文件的屬性常規信息

數據:data //文件本身內容數據


如:

[[email protected] ~]# stat /tmp/yum.log.old

File: ‘/tmp/yum.log.old’

Size: 52 Blocks: 8 IO Block: 4096 regular file

Device: fd00h/64768d Inode: 11797030 Links: 1

Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)

Context: unconfined_u:object_r:user_tmp_t:s0

Access: 2017-09-17 18:04:23.207995463 +0800

Modify: 2017-09-17 18:04:23.207995463 +0800

Change: 2017-09-17 18:37:48.960974954 +0800

Birth: -

[[email protected] ~]#


註意:元數據有三個重要的時間參數:只能修改訪問時間和修改時間,不能修改改動時間,改動時間會因訪問時間和修改時間改變而變化。

Access: 2017-09-17 18:04:23.207995463 +0800 //actime:訪問時間

Modify: 2017-09-17 18:04:23.207995463 +0800 //mtime:修改時間

Change: 2017-09-17 18:37:48.960974954 +0800 //ctime:改動時間


touch:修改文件時間戳;如果文件不存在,則用來創建文件

格式:touch [OPTION]... FILE...

[OPTION]

-a:僅修改accestine

-m:僅修改modifytime

-c:指定文件不存在時,不創建文件

-t:use [[CC]YY]MMDDhhmm[.ss] instead of current time //用指定時間代替當前時間。


如:

[[email protected] ~]# touch -t 201709171219 /tmp/yum.log.old

[[email protected] ~]# stat /tmp/yum.log.old

File: ‘/tmp/yum.log.old’

Size: 52 Blocks: 8 IO Block: 4096 regular file

Device: fd00h/64768d Inode: 11797030 Links: 1

Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)

Context: unconfined_u:object_r:user_tmp_t:s0

Access: 2017-09-17 12:19:00.000000000 +0800

Modify: 2017-09-17 12:19:00.000000000 +0800

Change: 2017-09-17 20:22:43.883910589 +0800

Birth: -

[[email protected] ~]#


linux文件層級、目錄、文件基本操作介紹