檔案和目錄被組織成一個單根倒置樹結構
檔案系統從根目錄下開始,用“/”表示
根檔案系統(rootfs):root filesystem
對于特定的檔案系統,名稱大小寫敏感
以.開頭的檔案為隐藏檔案
路徑分隔符/
檔案有兩類資料:中繼資料(metadata)資料(data)
檔案系統分層結構:LSB Linux Standard Base
FHS: (Filesystem Hierarchy Standard)
包括路徑在内檔案名稱最長4095個位元組,用/分隔的路徑不能超過255個位元組。
除了斜杠和NUL,所有字元都有效.但使用特殊字元的目錄名和檔案不推薦使用,有些字元需要用引号來引用它們。
标準Linux檔案系統(如ext4),檔案名稱大小寫敏感。例如:MAIL,Mail,mail, mAiL
/boot:引導檔案存放目錄,核心檔案(vmlinuz)、引導加載器(bootloader, grub)都存放于此目錄
/bin:供所有使用者使用的基本指令;不能關聯至獨立分區,系統啟動即會用到的程式
/sbin:管理類的基本指令;不能關聯至獨立分區,系統啟動即會用到的程式
/lib:啟動時程式依賴的基本共享庫檔案以及核心子產品檔案(/lib/modules)
/lib64:專用于x86_64系統上的輔助共享庫檔案存放位置
/etc:配置檔案目錄
/home/USERNAME:普通使用者家目錄
/root:管理者的家目錄
/media:便攜式移動裝置挂載點
/mnt:臨時檔案系統挂載點
/dev:裝置檔案及特殊檔案存儲位置
b: block device,随機通路
c: character device,線性通路
/opt:第三方應用程式的安裝位置
/srv:系統上運作的服務用到的資料
/tmp:臨時檔案存儲位置
/usr: universal shared, read-only data
bin: 保證系統擁有完整功能而提供的應用程式
sbin:
lib:32位使用
lib64:隻存在64位系統
include: C程式的頭檔案(header files)
share:結構化獨立的資料,例如doc, man等
local:第三方應用程式的安裝位置
bin, sbin, lib, lib64, etc, share
/var: variable data files
cache: 應用程式緩存資料目錄
lib: 應用程式狀态資訊資料
local:專用于為/usr/local下的應用程式存儲可變資料;
lock: 鎖檔案
log: 日志目錄及檔案
opt: 專用于為/opt下的應用程式存儲可變資料;
run: 運作中的程序相關資料;通常用于存儲程序pid檔案
spool: 應用程式資料池
tmp: 儲存系統兩次重新開機之間産生的臨時資料
/proc: 用于輸出核心與程序資訊相關的虛拟檔案系統
/sys:用于輸出目前系統上硬體裝置相關資訊虛拟檔案系統
/selinux: security enhanced Linux,selinux相關的安全政策等資訊的存儲位置
CentOS-7的新特性
/bin-->/usr/bin
/sbin-->/usr/sbin
/lib-->/usr/lib
/lib64-->/usr/lib64
二進制程式:/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin
庫檔案:/lib, /lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64
配置檔案:/etc, /etc/DIRECTORY, /usr/local/etc
幫助檔案:/usr/share/man, /usr/share/doc, /usr/local/share/man, /usr/local/share/doc

檔案類型
-:普通檔案(二進制檔案、文本檔案、資料格式檔案)
d: 目錄檔案
b: 塊裝置(随機通路的實體裝置,有緩存)
c: 字元裝置(線性通路的邏輯裝置,無緩存)
l: 符号連結檔案(軟連接配接檔案)
p: 管道檔案pipe
s: 套接字檔案socket(IP+PORT)
每個shell和系統程序都有一個目前的工作目錄
CWD:current work directory
顯示目前shell CWD的絕對路徑
pwd: printing working directory
相關的環境變量:
PWD:儲存了目前目錄路徑
OLDPWD:上一次所在目錄路徑
絕對路徑
以正斜線開始
完整的檔案的位置路徑
可用于任何想指定一個檔案名的時候
相對路徑
不以斜線開始
指定相對于目前工作目錄或某目錄的位置
可以作為一個簡短的形式指定一個檔案名
cd 改變目錄
到上一級目錄:
cd ..
回到使用者家目錄:
cd 或cd ~
到某個使用者的家目錄:
cd ~username
到以前的工作目錄:
cd -
ls (list)列出目前目錄的内容或指定目錄
ls [options] [files_or_dirs]
options:
-a顯示所有檔案(包括隐藏檔案)
-A顯示除.和..之外的所有檔案
-l顯示額外的資訊(權限、屬主屬組、檔案大小、修改時間等)
-R目錄遞歸顯示
-d顯示目錄自身的資訊而不是目錄下的檔案
-1檔案分行顯示,
-i顯示inode号碼
–S按從大到小排序
–u配合-t選項,顯示并按atime從新到舊排序
–U不排序按目錄存放順序顯示
--color=auto
藍色-->目錄
綠色-->可執行檔案
紅色-->壓縮檔案
紅色閃爍-->連結檔案已損壞
淺藍色-->連結檔案
灰色-->其他檔案
glob bash通配符
* 比對零個或多個字元
? 比對任何單個字元
~ 目前使用者家目錄
~username 使用者家目錄
~+ 目前工作目錄
~- 前一個工作目錄
[0-9]:比對一個數字範圍
[a-z]:a-z之間的字母
[A-Z]:A-Z之間的字母
[wxc]:比對清單中的任何的一個字元
[^wxc]:比對清單中的所有字元以外的字元
字母的排列順序 a A b B c C ……x X y Y z Z
預定義的字元類:#man 7 glob
[:digit:]:任意數字,相當于0-9
[:lower:]:任意小寫字母
[:upper:]: 任意大寫字母
[:alpha:]: 任意大小寫字母
[:alnum:]:任意數字或字母
[:space:]:空格
[:punct:]:标點符号
1、顯示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間出現至少一位數字的檔案或目錄
ls -d /var/l *[0-9]*[[:lower:]]
2、顯示/etc目錄下以任意一位數字開頭,且以非數字結尾的檔案或目錄
ls -d /etc/[0-9]*[^0-9]
3、顯示/etc/目錄下以非字母開頭,後面跟了一個字母及其它任意長度任意字元的檔案或目錄
ls -d /etc/[^[:alpha:]][[:alpha:]]*
4、顯示/etc目錄下所有以m開頭以非數字結尾的檔案或目錄
ls /etc/m*[^0-9]
5、顯示/etc目錄下,所有以.d結尾的檔案或目錄
ls -d /etc/*.d
6、顯示/etc目錄下,所有.conf結尾,且以m,n,r,p開頭的檔案或目錄
ls -d /etc/[mnrp]*.conf
touch指令:
touch [OPTION]... FILE...
-a: 僅改變atime
-m: 僅改變mtime
-t:指定時間修改時間戳 [[CC]YY]MMDDhhmm[.ss]
-c: 如果檔案不存在,則不予建立
-d:以描述時間修改時間戳 touch -d '-3 day' FILE
stat 檢視檔案的中繼資料
三個時間戳:
access time:通路時間,讀取檔案内容
modify time: 修改時間, 修改檔案内容
change time: 改變時間, 中繼資料發生改變
(通路一個距atime的記錄時間超過24小時,或atime早于mtime的檔案時atime才會重新整理)
cp[OPTION]... [-T] SOURCE DEST
cp[OPTION]... SOURCE... DIRECTORY
cp[OPTION]... -t DIRECTORY SOURCE...
cpSRC DEST
SRC是檔案:
如果目标不存在:建立DEST,并将SRC中内容填充至DEST中
如果目标存在:
如果DEST是檔案:将SRC中的内容覆寫至DEST中
基于安全,建議為cp指令使用-i選項;
如果DEST是目錄:在DEST下建立與原檔案同名的檔案,并将SRC中内容填充至新檔案中
cpSRC... DEST。
SRC...:多個檔案
DEST必須存在,且為目錄,其它情形均會出錯;
SRC是目錄:此時使用選項:-r
如果DEST不存在:則建立指定目錄,複制SRC目錄中所有檔案至DEST中;
如果DEST存在:
如果DEST是檔案:報錯;
如果DEST是目錄:将SRC及其内部檔案複制至DEST中。
-i:互動式
-r, -R: 遞歸複制目錄及内部的所有内容;
-a: 歸檔,相當于-dR--preserv=all
-d:僅複制軟連接配接檔案,不複制軟連接配接所指向的檔案
mode: 權限
ownership: 屬主屬組
timestamp:時間戳
links:連接配接
xattr:隐藏屬性
context:安全上下文
all
-p: 保持原有檔案的屬性資訊
-v: --verbose
-f: --force當檔案存在且沒有權限編輯是,将其删除再重新複制
練習
1、使用别名指令,将/etc/目錄下所有檔案,備份到/testdir/下獨立的新目錄下,并要求新目錄格式為backupYYYY-mm-dd,備份過程可見
cp -Rv /etc/ /testdir/backup`date +%F`
2、先建立/testdir/rootdir目錄,再複制/root所有下檔案到該目錄内,并要求保留原有權限
cp -Rp /root/ /testdir/rootdir
顯示目前shell程序所有可用的指令别名
alias
定義别名NAME,其相當于執行指令VALUE;
alias NAME='VALUE'
當别名中沒有空格時,可以不用加引号。單雙引号均可,預設使用單引号。
在指令行中定義的别名,僅對目前shell程序有效
如果想永久有效,要定義在配置檔案中
僅對目前使用者:~/.bashrc
對所有使用者有效:/etc/bashrc
編輯配置給出的新配置不會立即生效;
bash程序重新讀取配置檔案:
source /path/to/config_file或. /path/to/config_file
撤消别名:unalias
unalias [name ...]
-a 撤銷所有别名
如果别名同原指令同名,如果要執行原指令,可使用
“\COMMAND”
’COMMAND’
/PATH/COMMAND:外部指令
mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
常用選項:
-i: 互動式
-f: 強制
rm [OPTION]... FILE...
-f: 強制删除
-r: 遞歸
--no-preserve-root
例:#rm- rf /
tree 顯示目錄樹
-d: 隻顯示目錄
-L level:指定顯示的層級數目
-P pattern: 隻顯示由指定pattern比對到的路徑
mkdir建立目錄
-p: 存在于不報錯,且可自動建立所需的各目錄;
-v: 顯示詳細資訊
-m MODE: 建立目錄時直接指定權限;
rmdir删除空目錄
-p: 遞歸删除父空目錄
-r: 遞歸删除目錄樹
(1) 如何建立/testdir/dir1/x, /testdir/dir1/y, /testdir/dir1/x/a, /testdir/dir1/x/b, /testdir/dir1/y/a, /testdir/dir1/y/b
mkdir -p /testdir/dir1/{x,y}/{a,b}
(2) 如何建立/testdir/dir2/x,/testdir/dir2/y,/testdir/dir2/x/a,/testdir/dir2/x/b
mkdir -p /testdir/dir2/{x/{a,b},y}
(3) 如何建立/testdir/dir3, /testdir/dir4, /testdir/dir5, /testdir/dir5/dir3, /testdir/dir5/dir4
mkdir -p /testdir/dir{3,4,5/dir{3,4}}
隻顯示指定目錄下的隐藏檔案
ls -d /path/.* 或 ls -d /path/.[^.]*
隻顯示指定目錄下的目錄(不看其子目錄下的檔案)
ls -d /path/*/ (當指定目錄下沒有目錄時會出現提示資訊)