馬哥教育網絡班20期+第二周課程練習

linux 中一切皆文件,我們所做的一切都是和文件打交道。

 

文件分為兩部分:元數據和數據

 

        元數據: 即真實數據的屬性??捎?strong> stat  命令查看 

           

                 stat   [option]…   FILE…

             

                  [root@black ~]# stat /etc/passwd
                  File: ‘/etc/passwd’
                  Size: 2302       Blocks: 8          IO Block: 4096   regular file
                  Device: 803h/2051d Inode: 10244448    Links: 1
                  Access: (0644/-rw-r–r–)  Uid: (    0/    root)   Gid: (    0/    root)
                  Context: system_u:object_r:passwd_file_t:s0
                  Access: 2016-06-18 19:52:01.243237019 -0400
                  Modify: 2016-04-23 09:47:20.643714195 -0400
                  Change: 2016-04-23 09:47:20.650714195 -0400
                   Birth: –

            以上信息包括了文件大小,所占的塊數 ,所占塊大小, 文件類型, 權限, 所屬屬主,屬組,context值

            文件訪問時間,文件內容修改時間,文件改變的時間。

 

            其中access,modify, change 為文件的時間戳,可以用touch 命令來修改

 

             touch  -a  FILE     只是修改文件的atime

             touch  -m  FILE     只是修改文件的mtime

 

            注: 當atime或mtime 其中之一任意改變,ctime都會改變。             

 

 

touch 命令同時還可以創建文件

 

            用法:touch  FILE  

 

            如果名字后面想跟上創建文件時的時間,可以引用date命令來實現。

 

            e.g.    在/tmp目錄下創建已tfile開頭,后面接當前日期的文件,格式如tfile-2015-5-27-09-22-33

                

touch  tfile-$(date +%F-%H-%M-%S)

        

 

            當我們每次需要創建該類型的文件時,都得輸入這么長的命令,為了方便,我們可以把上面那條命令定義一個別名,以后可以直接輸入別名就可以達到該效果。

  

                定義命令別名 tfile

                當前shell生效 :

alias tfile=‘touch tfile-$(date +%F-%H-%M-%S)’

                如果對所有用戶生效,可以編輯/etc/bashrc  ,在最后一行加上如上命令。

 

 

當我們管理文件時,首先要知道自己所處的位置,然后開始工作

 

pwd  : 顯示當前的在哪個目錄下,默認登錄進系統,都處于登錄用戶的家目錄下。

mkdir: 創建目錄,目錄也是文件。

                用法 mkdir [option]…   FILE

rmdir:   只能刪除空目錄。一般刪除目錄和文件用rm命令。

 

           例子:

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

                

                     解:

touch  /tmp/{a,b}_{c,d}

 

                2.  創建/tmp/mylinux目錄下的各級目錄:

                        

                        mylinux/

                            ├── bin

                            ├── boot

                            │          └── grub

                            ├── dev

                            ├── etc

                            │         ├── rc.d

                            │         │         └── init.d

                            │         └── sysconfig

                            │                      └── network-scripts

                            ├── lib

                            │         └── modules

                            ├── lib64

                            ├── proc

                            ├── sbin

                            ├── sys

                            ├── tmp

                            ├── usr

                            │         └── local

                            │                     ├── bin

                            │                     └── sbin

                            └── var

                                        ├── lock

                                        ├── log

                                        └── run

 

 

                        解: 

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

 

 

當我們執行完命令后,我們可以查看命令執行狀態返回值來查看命令是否成功。

 

echo $?

 

當值是0時,表示命令執行成功,

當值是1-255時,表示命令執行失敗。

 

通配符與正則表達式

 

當我們需要查看目錄中某些特定需求的文件時,此時就需要通過glob(通配符)或者正則表達式的幫助來完成。

我們可以通過幾個列子來總結下。

 

 例子:

1、顯示/var目錄下所有以1開頭,以一個小寫字母結尾,且中間至少出現一位數字(可以有其它字符)的文件或目錄。

 

        解:

ls -R /var | grep "^1.*[0-9].*[a-z]$"

        

 

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

 

        解:

ls -R /etc  | grep "^[[:digit:]].*[^[:digit:]]$"

 

3、顯示/etc目錄下,以非字母開頭,后面跟了一個字母以及其它任意長度任意字符的文件或目錄。

 

        解:

ls -R /etc/ | grep "^[^[:alpha:]][[:alpha:]].*" | grep -v "^\ /.*"

 

 

一般來說,如果是在一個目錄下面查找特定需求的文件,只要用到通配符就好,但是上面題目中所要求要查找出所有的文件和目錄,這里只能是用到正則表達式了,也許是有別的方法,以后再研究,這里總結下通配符和正則表達式。

 

        通配符:即shell中為了實現文件名的匹配,查找類似的文件,即打牌中的賴子。

 

                *   : 匹配任意長度的任意字符。

                ?   : 匹配任意一個字符。

                []    : 匹配指定范圍的一個字符。

                [^]   : 匹配范圍外的字符。

 

            專用的字符合集:

                [:alnum:] : 數字或字母

                [:alpha:]  : 字母

                [:digit:]    :  數字

                [:lower:]   : 小寫字母

                [:graph:]   : 除了空格和控制字符外的所有字符

                [:punct:]    : 標點符號

                [:upper:]   :  大寫字母

        

 

        正則表達式主要是對文本的匹配,像上面的幾道題都是先顯示出來目錄下的所有文件,相當于把結果放到了一個文本中,再通過正則表達式來匹配結果。

 

                字符匹配:表示任意單個字符  ;  []   [^]   字符合集與通配符一樣。

                次數匹配:

                                      *   匹配前面的字符任意次數   .*  表示任意長度的任意字符

                                      \?  匹配前面字符0次或1次

                                      \+  匹配前面字符至少1次

                                      \{m\}   匹配前面字符m次

                                      \{m,n\} 匹配前面字符至少m次,至多n次。

 

                位置匹配:

                                    ^  :表示以什么開頭

                                    $ : 表示以什么結尾
                                   \<   :匹配單詞詞首                         

                                    \> : 匹配單詞詞尾。

 

文件的復制移動刪除

 

cp  復制文件和文件夾

 

語法 : cp  [option]…    SOURCE       DEST    (復制單個源到目標)

                cp  [option]…     SOURCE    DEST    (復制多個源到目標)

 

注: …  表示可以存在多個

 

            例子:

 

           1.  復制/etc目錄下所有以p開頭,以非數字結尾的文件或目錄到/tmp/mytest1目錄中。

                  

                解:此時就需要通過通配符來完成該操作了。

mkdir /tmp/mytest{1,2,3}
cp  -r  /etc/p*[^[:digit:]]   /tmp/mytest1

          2 .  復制/etc目錄下所有以.d結尾的文件或目錄至/tmp/mytest2目錄中。

                

                解:

cp -r  /etc/*.d    /tmp/mytest2

          3.   復制/etc/目錄下所有以l或m或n開頭,以.conf結尾的文件至/tmp/mytest3目錄中。

             

                 解: 

cp  -r   /etc/[l,m,n]*.conf    /tmp/mytest3

 

    cp的常用選項

            -r   ,-R: 遞歸復制,復制目錄下所有目錄和文件

            -i            :  交互式

            -a           : 歸檔,保留元數據屬性,相當于-dR -preserv=all

 

            -d            : 不復制真實的文件,還是保持該文件為鏈接文件

            -L            : 復制文件真實內容,文件不存為鏈接文件

            -p            :  保留 屬主,屬組,時間戳

 

mv    移動文件夾(用于改文件名)

 

語法 : mv  [option]…    SOURCE       DEST    (移動單個源到目標)

               mv  [option]…     SOURCE    DEST    (移動多個源到目標)

 

 

rm      刪除文件或文件夾

 

語法: rm   [option]…    FILE

 

原創文章,作者:Cache,如若轉載,請注明出處:http://www.www58058.com/18781

(0)
CacheCache
上一篇 2016-06-23 10:59
下一篇 2016-06-23 10:59

相關推薦

  • Vim

    vim編輯器         vim,可謂文本編輯界的大哥,功能強大無比,是進階版的vi, vim 不但可以用不同顏色顯示文字內容,還能夠進行諸如 shell script, C program等程序編輯功能。 vim是一種模式化的編輯器  (vim自帶教程,命令行中輸…

    Linux干貨 2016-08-09
  • 0805linux基礎小記(正則匹配)

    cat -ns file   //-s,壓縮重復的空行 cat -T f1  //看到tab鍵 cat f1|tr '\t' '\r' > f2 cat -v f2 //看到^M   tac file //倒的顯示 rev file //反向顯示每一行 echo {1..10} &g…

    Linux干貨 2016-08-07
  • 馬哥教育網絡班20期+第5周課程練習

    1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行; grep "^[[:space:]]\+.*" /boot/grub/grub.conf   2、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行; grep&nb…

    Linux干貨 2016-07-12
  • 磁盤分區知識總結

    Linux中df命令的功能是用來檢查linux服務器的文件系統的磁盤空間占用情況??梢岳迷撁顏慝@取硬盤被占用了多少空間,目前還剩下多少空間等信息。 1.命令格式: df [選項] [文件] 2.命令功能: 顯示指定磁盤文件的可用空間。如果沒有文件名被指定,則所有當前被掛載的文件系統的可用空間將被顯示。默認情況下,磁盤空間將以&nbsp…

    Linux干貨 2017-08-19
  • 馬哥教育20期面授2班第一周課程練習1

    計算機基礎   1,計算機系統           硬件系統            主機部分:中央處理器CPU(運算器ALU、控制器CU);  &nb…

    Linux干貨 2016-07-29
  • N25期—第一周作業

    1、描述計算機的組成及其功能 計算機五大組成部件:運算器、控制器、存儲器、輸入設備和輸出設備。 運算器和控制器統稱中央處理器(CPU)。  存儲器分成內存儲器和外存儲器兩大類。  外存儲器、輸入設備和輸出設備統稱為外部設備。  中央處理器(CPU)  計算機的中央處理器又稱為CPU,它是計算機的核心部分。主要由運算器和…

    Linux干貨 2016-12-04

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-06-23 14:03

    寫的很棒,但是是不是沒寫完啊?在多關注一些排版方面的技巧

欧美性久久久久