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文件層級、目錄、文件基本操作介紹