文件管理

The Root Filesystem(簡單介紹)

  /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這個文件

pwd(printing working directory)

  顯示當前shell的絕對路徑

  參數:

    -L:顯示鏈接路徑(默認)

    -P:顯示真實物理路徑

ls(列出目錄內容)

  ls -a 包含隱藏文件

  ls -l 顯示額外的信息
 
  ls -R 目錄遞歸經過
  ls -r:倒序(按首字符順序來排;數字比字母優先級高)
  ls -ld 目錄和符號連接信息
  ls -1 文件分行顯示(豎着顯示)
  ls –S 按從大到小排序
  ls –t 按mtime排序
  ls –u 配合-t選項,顯示並按atime重新到舊排序
  ls –U 按目錄存放順序顯示
  ls –X 按文件後綴排序

 

stat(查看文件狀態)

  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:]]:標點符號;  

  [:print:]:可打印字符
  [:cntrl:]:控制(非打印)字符
  [:graph:]:圖形字符
  [:xdigit:]:十六進制字符

 

touch命令:

  做用:

    一、建立新文件;
    二、改變時間戳;(並且刷新的是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的改變;

cp  

  一個源文件:
    不存在:建立並將內容填充;
    文件:覆蓋加更名;
    目錄:目錄中有同名,填充文件;沒有同名,就建立同名文件,內容填充至新文件;
  多個源文件:
    不存在:提示錯誤
    文件:提示錯誤
    目錄:新建同名文件,內容填充於此;
  目錄(需使用-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:更名(作批量備份)

  rename [options] expression replacement file...
  例:rename '.log' '.log.bak' f*


tree:

  參數:
    -d:只顯示目錄;
    -L level:指定顯示的層數;
    -P pattern:顯示由正則表達式匹配的;

mkdir:

  -p:遞歸建立;
  -v:過程;
  -m MODE:建立目錄時直接指定權限;

rmdir:只能刪空目錄

  -p:從內往外分析是不是空目錄往外刪;
  -v:過程;

lsof:查看進程打開的文件

  lsof|grep deleted,能夠看到文件已經被刪除了,可是沒有被釋放的,好比你vim還在編輯此文件,在這裏能夠查看的到;在這裏能看到的都是已經刪了,可是尚未釋放的文件;

對於大文件的刪除:
> /boot/bigfile:這樣清空內容是最好的辦法,速度也是最快的;接下來若是不須要了再rm刪除;這樣能立刻釋放文件,若是用rm直接刪的話,有時候若是在使用的話,那麼其實刪了內存也沒釋放;

watch -n 1 :1秒去執行一次,適合去監控;

I/O:

  程序:指令+數據;
  單單使用一些指令沒有數據是沒有意義的,那麼咱們的內存是斷電易失的設備,並且容量有限,因此須要配合磁盤來使用,那麼就須要用到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:   

  處理輸入信息的(轉換和刪除字符串的,後換前);
  默認是鍵盤輸入,因此你輸入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都去重;

tee:

  在屏幕上顯示又輸出到文件;
    至關於有多了一條路,如T字路,多一條屏幕輸出的路,又可對其進行操做了;功能更強大了;
  -a:這個命令不加-a參數是覆蓋的,-a是追加;

  指定文件描述符:exec 8<> f1     指定f1文件的fd爲8;     ll /proc/$$/fd(他至關因而軟鏈接指向f1);       $$是當前進程;這樣能夠看到剛剛指定的f1的fd爲8;   取消指定的符號描述符:     exec 8>&-

相關文章
相關標籤/搜索