/boot:引導文件存放目錄,內核文件(vmlinuz)、引導加載器(bootloader,grub)都存放於此目錄linux
/bin:供全部用戶使用的基本命令;不能關聯至獨立分區,OS啓動即會用到的程序git
/sbin:管理類的基本命令;不能關聯至獨立分區,OS啓動機會用到的程序正則表達式
/lib:啓動時程序依賴的基本共享庫文件以及內核模塊文件(/lib/modules)shell
/lib64:專用於x86_64系統上的輔助共享庫文件存放位置express
/etc:配置文件目錄vim
/home/USERNAME:普通用戶家目錄centos
/root:管理員的家目錄緩存
/media:便攜式移動設備掛載點安全
/mnt:臨時文件系統掛載點app
/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 相關的安全策略等信息的存儲位置
注意點:linux所謂的大小寫敏感是由於文件系統的緣由,而並不是linux系統自己的緣由;Windows對文件後綴是有嚴格規定的而linux是不關心後綴的,只有在壓縮打
包那一塊是關心後綴的;
定義文件顏色須要訪問:cat /etc/DIR_COLORS這個文件
顯示當前shell的絕對路徑
參數:
-L:顯示鏈接路徑(默認)
-P:顯示真實物理路徑
ls -a 包含隱藏文件
ctime:元數據修改,會致使時間的改變,ll須要加上--time=ctime;
mtime:修改文件內容,會致使改變,ll默認顯示mtime;
atime:訪問一次會更新時間,記錄最後一次讀,--time=atime
relatime
centos6以後引入了一種機制relatime,是爲了每次讀一次,不會頻繁的去更新時間,這樣會帶來不少磁盤的I/O,由於系統寫一次的時間比讀要慢的多,而access就
是要寫入,因此爲了不性能的損失,relatime設置爲一天之後纔會去寫入;還有就是mtime的時間與atime同樣或者比atime新時會更新;
*:匹配0個或多個;
?:任何單個字符(包括漢字也算一個字符);
~:家目錄
~wang:去wang的家,root能夠任意去別人家,普通用戶不能去root家;
~-:上一個目錄,用於用ls這類命令去直接打開上一次目錄的;
~+:同.
^:非
[0-9]:匹配數字範圍的其中一個(只能是正序的;)
不連續就挨個寫,好比135[135];
注:[a-b]與[ab]是有區別的;
[a-b]他是aAb這樣的排序下去的,因此[a-c]:就是有aAbBc這些,一樣的[A-B]就是爲AbB(小大小大),而[ab]就是指單單的a與b;
因此以上的方法顯示純小寫字母,大寫字母是不可能了的那麼怎麼顯示呢?用[:lower:]<-->a-z;[:upper:]<-->A-Z;最外面的[]的意思是中間的內容選一個的意思;
[[:lower:]]:就是顯示某個小寫的字母;固然也能夠與數字連用[[:lower:]123]
[[:upper:]]:任意大寫字母;
[[:alpha:]]:任意大小寫字母;
[[:digit:]]:任意數字至關於0-9;
[[:alnum:]]:任意數字或字母;
[[:space:]]:水平或垂直空白字符;
[[:punct:]]:標點符號;
做用:
一、建立新文件;
二、改變時間戳;(並且刷新的是3個時間)
建立新文件目前知道3種了:
一、touch,比較安全,就算文件存在,最多也就更改時間戳
二、>比較危險,可能會清空文件;
三、dd if=/dev/zero of=/PATH/TO/SOMEWHERE bs=1024 count=100,建立一個100M的空文件
參數:
-t:修改atime和mtime的時間戳(年月日時分秒);
-c:文件不存在也不建立,僅僅是刷新已經存在的時間戳;
-a:僅改變atime和ctime;
-m:僅改變mtime和ctime;
ctime是元數據相關的,通常內容改變了大小會變因此mtime改變會影響ctime,訪問時間的改變也會影響ctime的改變;
一個源文件:
不存在:建立並將內容填充;
文件:覆蓋加更名;
目錄:目錄中有同名,填充文件;沒有同名,就建立同名文件,內容填充至新文件;
多個源文件:
不存在:提示錯誤
文件:提示錯誤
目錄:新建同名文件,內容填充於此;
目錄(需使用-r):
不存在:複製SRC目錄下全部文件至新建同名目錄;
文件:提示錯誤
目錄:新建同名目錄,遞歸複製於此
參數:
-f:--force
這裏的強制是指,好比你在/root下建立的文件他的全部者和屬組都是root,那麼若是你用普通用戶去覆蓋他,就須要用-f去強制執行,其原裏是,刪除原來文件去新建,全部者和屬組的文件;
-r/R:遞歸;
-i:覆蓋前提示;
-n:若是目標存在不覆蓋,注意二者順序;
-d:--preserv=links不復制源文件,只複製連接名;(默認cp是複製軟鏈接真實指向的內容;)
-preserv=all + -dR<-->-a:
-v:顯示過程
-u:--update只複製源比目標新的的文件或目標不存在的文件;
可用於配置文件;
--backup=numbered:文件名存在的時候,覆蓋會作一次配備分,名字爲原來的名字加上.~#~
注:cp只能複製通常的文件,好比複製/dev/zero這個文件加上-a參數還能夠,若是不加參數,他會不斷輸入0去填充你的目標文件,最終將你的磁盤的佔滿,因此這裏有專門複製設備文件,mknod /app/zero c 1 5(爲字符設備,主設備號爲1,次設備號爲5;)
rename [options] expression replacement file...
例:rename '.log' '.log.bak' f*
參數:
-d:只顯示目錄;
-L level:指定顯示的層數;
-P pattern:顯示由正則表達式匹配的;
-p:遞歸建立;
-v:過程;
-m MODE:建立目錄時直接指定權限;
-p:從內往外分析是不是空目錄往外刪;
-v:過程;
lsof|grep deleted,能夠看到文件已經被刪除了,可是沒有被釋放的,好比你vim還在編輯此文件,在這裏能夠查看的到;在這裏能看到的都是已經刪了,可是尚未釋放的文件;
對於大文件的刪除:
> /boot/bigfile:這樣清空內容是最好的辦法,速度也是最快的;接下來若是不須要了再rm刪除;這樣能立刻釋放文件,若是用rm直接刪的話,有時候若是在使用的話,那麼其實刪了內存也沒釋放;
watch -n 1 :1秒去執行一次,適合去監控;
程序:指令+數據;
單單使用一些指令沒有數據是沒有意義的,那麼咱們的內存是斷電易失的設備,並且容量有限,因此須要配合磁盤來使用,那麼就須要用到I/O;
打開的文件都有一個fd:file description(文件描述符),是數字;
例子:當咱們用一個shell用vim去編輯一個文件的時候,經過ps aux|grep vim;能夠看到在正在使用的進程編號;而後在進入到/proc/進程編號/fd,能夠看到文件描述符(高亮顯示的數字4),也能夠看到正在打開/root/.f1.swp;
vim的工做特性:
你打開vim的時候,他不是真正在用vim,而是臨時的先開了/root/.f1.swp,只有你修改完存盤他纔會真正的去使用vim;這個文件在運行時,能夠在/root下看到,而關閉vim的時候,就看不到了;
STDIN(0):
默認是鍵盤的輸入;
STDOUT(1):
默認是當前終端窗口輸出;
STDERR(2):
默認是當前終端窗口輸出;
重定向的意義是改變默認I/O位置;
>(STDOUT):
ls > /dev/pts1;能夠將輸出內容到其餘終端下;
set -C:禁止覆蓋已有文件,但可追加;
>| file:強制覆蓋;
set +C:容許覆蓋;
若是要多條命令追加的話,用()來括起來;
(ls;pwd;hostname) > /app/all.log;
/dev/null;
用於之後寫腳本時候,你不想要的在屏幕上顯示的數據;
例子:
(echo error 1>&2) >/dev/null
在屏幕上仍是會顯示,1>&2,就是把正確的跟錯誤的同樣輸出(1>&2,前面跟後同樣),因此當錯誤的輸出,因此不會去黑洞,而是在屏幕顯示;
(errcmd;hostname) 2>&1 > /app/aaa;
系統是這樣分析的,錯誤的結果,正確的結果 2>&1 >/app/aaa;第一層()的效果僅僅是執行的結果;而後錯誤的仍然照常輸出,正確的通過2>&1判斷下因爲正確的被放到/app/aaa裏去了,因此屏幕上只顯示第一項
((errcmf;hostname) 2>&1) > /app/aaa;
(錯;對 2>&1) >/app/aaa;錯變對以後是(對;對)>/app/aaa因此內容都進文件了,屏幕上無輸出;
1>&2:對變錯;2>&1:錯的變對的;
處理輸入信息的(轉換和刪除字符串的,後換前);
默認是鍵盤輸入,因此你輸入tr,跟cat同理,都是等待鍵盤的輸入的;因此tr和cat也可能利用<(輸入重定向來)來接收文件的信息;
參數:
-t:截斷;
tr -t 123 ab;後面只有2個因此會截斷到前面2個,3不作替換;
-d:指定刪
tr -d 'a-z' < /etc/fstab;
把全部小寫的都刪了;
tr -dc 'a'
會除了a都算,連按的回車也算,因此結束輸入須要用ctrl+d;’a\n‘這樣是保留a和回車;
-s:把連續出現的自動內容壓縮成一個;
tr -s " " :
壓縮了以後再用:代替空格;
這種方法在往後的操做中很是多用,當有不少分割符的時候能夠用tr來改爲一個來處理;
-c:取反;
tr -sc 'a';
就是除了a都去重;
在屏幕上顯示又輸出到文件;
至關於有多了一條路,如T字路,多一條屏幕輸出的路,又可對其進行操做了;功能更強大了;
-a:這個命令不加-a參數是覆蓋的,-a是追加;
指定文件描述符:exec 8<> f1 指定f1文件的fd爲8; ll /proc/$$/fd(他至關因而軟鏈接指向f1); $$是當前進程;這樣能夠看到剛剛指定的f1的fd爲8; 取消指定的符號描述符: exec 8>&-