N25-第二周總結

linux bassic The second week of blogging

一、linux中的文件,及文件操作管理命令

1. 文件概念

存儲空間存儲的一段流式數據,對數據可以做到按名存取。

  • linux中的文件具有的特點是:可通過操作系統或者程序對外提供信息,也能對內輸入信息,可以被創建,刪除。linux中,文件有特別重要的意義,他們為操作系統和設備提供了一個簡單而統一的接口。在linux中,幾乎一切都可以看做是文件 。這就意味著,普通程序完全可以像使用文件(普通定義)那樣使用磁盤文件、串行口、打印機和其他設備。

    例如:可以把cdrom驅動器掛載為一個文件

     ~]# mount /dev/cdrom  /media/cdrom/   掛載光盤文件
    ~]# cd /media/cdrom/
    [root@localhost cdrom]# ls
    CentOS_BuildTag  isolinux                  RPM-GPG-KEY-CentOS-Debug-6
    EFI              Packages                  RPM-GPG-KEY-CentOS-Security-6
    EULA             RELEASE-NOTES-en-US.html  RPM-GPG-KEY-CentOS-Testing-6
    GPL              repodata                  TRANS.TBL
    images           RPM-GPG-KEY-CentOS-6

    注:上面這個例子證明硬件設備在linux中也被表示為文件

2、對文件的操作

  • 操作一般意義上的文件一樣,linux中對文件的操作只需要五個基本的函數:open(), read(), write(), close(), delete(), create();通過調用這幾個函數就能對linux中的文件進行讀、寫等操作。不過,這種操作又分為系統調用和庫函數調用。簡單的說,系統調用是最直接的方式,庫函數調用最終也是通過系統調用實現的??烧J為庫函數調用是對系統調出于效率考慮而做出的優化;我們用很少的函數就可以對文件和設備進行訪問和控制。這些函數就是所謂的系統調用,由操作系統直接提供,他們是通向操作系統本身的接口。

    操作系統的核心部分,既內核,其實就是一組設備驅動程序。這是一些對硬件進行控制的接口。

3、文件操作相關命令

  • cat命令      文件文本查看工具;

    cat:concatenate files and print on the standard output   連接文件并在標準輸出上打印     
    ~]# cat /etc/fstab 
    .....
    cat [OPTION]... [FILE]...
    	-n:給顯示的文本行編號;
    	-E: 顯示行結束符$;
    
    ~]# cat -n /etc/passwd
         1	root:x:0:0:root:/root:/bin/bash
         2	bin:x:1:1:bin:/bin:/sbin/nologin
         3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
         4	adm:x:3:4:adm:/var/adm:/sbin/nologin
         5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    ~]# cat -E /etc/issue
    CentOS release 6.6 (Final)$
    Kernel \r on an \m$
    $	
  • tac命令 文件文本查看工具;逆序顯示

    tac [OPTION]... [FILE]...
      	-n:給顯示的文本行編號;
      	-E: 顯示行結束符$;
  • head命令 查看文件的前n行;默認10行

    head  [options]  FILE 
      	 -n #     可以-3,也可 -n 3 默認不加選項 顯示10行
      	 -#
      ~]# head -n 3 /etc/fstab 
    
      #
      # /etc/fstab
  • tail命令 查看文件的后n行;默認10行

     tail [options] FILE
      	-n #
      	-#
      	-f:查看文件尾部內容結束后不退出,跟隨顯示新增的行;
      ~]# tail -1 /etc/fstab 
      proc                    /proc                   proc    defaults        0 0
    
      ~]# echo "second line" >> /tmp/functions 
      ~]# tail  -f /tmp/functions 
      		fi
      	    fi
      	fi
          done < /etc/crypttab
          return $ret
      }
    
      # A sed expression to filter out the files that is_ignored_file recognizes
      __sed_discard_ignored_files='/\(~\|\.bak\|\.orig\|\.rpmnew\|\.rpmorig\|\.rpmsave\)$/d'
      new line
      second line   
      注意:-f 選項 后期監控日志增長的時候非常有用;

4.文件管理類命令

  • 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
    	     cp [OPTION]... -t DIRECTORY SOURCE...
        如果DEST不存在:錯誤;目標必須是目錄;
    	    如果DEST存在:
    	    如果DEST是非目錄文件:錯誤;
    	    如果DEST是目錄文件:分別復制每個文件至目標目錄中,并保持原名;
    	    
    -i:交互式復制,即覆蓋之前提醒用戶確認;
    -f:強制覆蓋目標文件;如果目標文件不能被打開,則移除并覆蓋之
    -r, -R:遞歸復制目錄;遞歸復制目錄及目錄中的內容;
    -d:復制符號鏈接文件本身,而非其指向的源文件;
    -a:-dR --preserve=all, archive,用于實現歸檔;理解為做備份
    --preserv=
    	mode:權限
    	ownership:屬主和屬組
    	timestamps: 時間戳
    	context:安全標簽
    	xattr:擴展屬性
    	links:符號鏈接
        all:上述所有屬性
    -i 選項:
    ~]# alias
    alias cp='cp -i'  管理員root系統自動給定義了別名,而普通用戶沒有;
    
    ~]# cp /etc/fstab /tmp/
    cp: overwrite `/tmp/fstab'?  交互式確認
    -r,-R選項:
    ~]# cp -r /var/log /tmp/    目標目錄存在會在其下創建一個與原目錄同名的目錄到該目錄下且該目錄內容全部復制過去;
    ~]# ls /tmp/
    fstab  functions  hello  log  moosefs  mytest  passwd.out  skel
    -d選項:
    ~]# cp /etc/system-release /tmp/     把這個符號鏈接指向的源文件真實數據給復制了
    ~]# ls /tmp/
    fstab  functions  hello    skel  system-release
    ~]# cat /tmp/system-release 
    CentOS release 6.6 (Final)
    不想讓他把數據給復制過去,就使用-d選項;
    ~]# cp -d /etc/system-release /tmp/system.rel
    ~]# ls -l /tmp/
    lrwxrwxrwx 1 root    root       14 Dec  8 00:53 system.rel -> centos-release
    -rw-r--r-- 1 root    root       27 Dec  8 00:49 system-release
  • mv命令 move

     move (rename) files 移動或者重命名  源有多個,目標只能為目錄
      mv [OPTION]... [-T] SOURCE DEST
      mv [OPTION]... SOURCE... DIRECTORY
      mv [OPTION]... -t DIRECTORY SOURCE..	 
      -i :交互式覆蓋
      -f : 強制覆蓋
      tmp]# mv hello hello.txt 源文件與目標文件在同一個目錄下,就改名
      tmp]# ls
      fstab      hello.txt  moosefs  passwd.out  system.rel
      functions  log        mytest   skel        system-release
       tmp]# mv x tom 無需選項
       tmp]# ll
      drwxr-xr-x 2 root    root     4096 Dec  8 01:02 tom
  • rm命令remove

     rm [OPTION]... FILE...
      常用選項:
      	-i:interactive 交互式
      	-f:force 強制
      	-r: recursive 遞歸
       刪除目錄:rm -rf /PATH/TO/DIR
       危險操作:rm -rf /*
       紅帽系統是ext系列的文件系統,反刪除能力非常薄弱;
      注意:所有不用的文件建議不要直接刪除,而是移動至某個專用目錄;(模擬回收站)
      對于管理員來說,定義了別名,而普通用戶沒有;
      tmp]# rm hello.txt 
      rm: remove regular empty file `hello.txt'? 
       y,刪除,n,或者不跟任何字符都不刪除;
      tmp]# rm -r /tmp/log/
      rm: descend into directory `/tmp/log'? y
      rm: remove regular file `/tmp/log/dmesg.old'? y
      rm: descend into directory `/tmp/log/sa'
      當然使用# rm -fr /tmp/log

二、bash的工作特性之命令執行狀態返回值和命令行展開

  • 命令執行狀態返回值

    bash中一條命令的執行,會產生兩種返回結果:命令結果及命令執行狀態結果。一條命令成功執行,其執行狀態返回值為0。如果未能成功執行,其返回值為1-255。
    ~]# ls
    anaconda-ks.cfg  A-Z    install.log         tee   test.txt  tree
    a-z              fstab  install.log.syslog  test  tr
    [root@localhost ~]# echo $?
    0
    ~]# llls
    -bash: llls: command not found
    [root@localhost ~]# echo $?
    127
  • 命令行展開

    ~:自動展開為用戶的家目錄,或指定的用戶的家目錄;
    	~]# cd ~ 進入當前登錄賬號的家目錄, 默認 "cd" 命令就可以實現
    	~]# cd ~loginname 進入指定用于的家目錄
    {}:可承載一個以逗號分隔的路徑列表,并能夠將其展開為多個路徑;
    	例如:/tmp/{a,b} 相當于 /tmp/a /tmp/b
    問題1:如何創建/tmp/x/y1, /tmp/x/y2, /tmp/x/y1/a, /tmp/x/y1/b?
    	~]# mkdir -pv /tmp/x/{y1/{a,b},y2}
    問題2:如何創建a_c, a_d, b_c, b_d;
    	~]# mkdir -v {a,b}_{c,d}
    問題3:創建如下目錄結構:
    /tmp/mysysroot/
    	|-- bin
    	|-- etc
    	|   `-- sysconfig
    	|       `-- network-scripts
    	|-- sbin
    	|-- usr
    	|   |-- bin
    	|   |-- lib
    	|   |-- lib64
    	|   |-- local
    	|   |   |-- bin
    	|   |   |-- etc
    	|   |   |-- lib
    	|   |   `-- sbin
    	|   `-- sbin
    	`-- var
    	 	|-- cache
    	 	|-- log
    		`-- run
    ~]# mkdir -pv /tmp/mysysroot/{bin,sbin,etc/sysconfig/network-scripts,usr/{bin,sbin,local/{bin,sbin,etc,lib},lib,lib64},var/{cache,log,run}}

三、文件的元數據狀態查看,修改時間戳等操作

  • 文件:每一個文件都有兩類數據

    元數據:metadata 快速檢索內容的目錄。理解為描述數據的屬性
           包括:大小,塊數,類型,設備號;inode 號(索引節點號), 鏈接次數,硬鏈接;創建時間
    數據: data 正文部分
    數據一改變,元數據就會立即更新他的時間戳,意味著改動時間也立即跟新	
  • stat命令 顯示文件的狀態

    stat - display file or file system status  顯示文件的狀態    
      stat FILE...
      ~]# stat /tmp/functions 
        File: '/tmp/functions'
        Size: 13966     	Blocks: 32         IO Block: 4096   regular file
      Device: 803h/2051d	Inode: 201326722   Links: 1
      Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
      Context: unconfined_u:object_r:user_tmp_t:s0
      時間戳:
      最近訪問:Access: 2016-11-14 14:19:50.622408377 +0800   讀取文件內容;數據流
      最近更改:Modify: 2016-11-14 14:18:14.173408906 +0800   新增一行,數據改變
      最近改動:Change: 2016-11-14 14:18:14.173408906 +0800   元數據改變
  • touch命令:修改文件時間戳

    change file timestamps   更改文件時間戳
      -c:指定的文件路徑不存在時后,不予創建;
      -a: 僅修改access time; 直接修改當下命令執行時的時間;
      -m:僅修改modify time;
      注意:change time 不能手動指定更改
      -t STAMP (指定要改為哪一刻時間)
      	[[CC]YY]MMDDhhmm[.ss] 年月日 小時 分鐘 秒
      ~]# touch /tmp/functions      如果不跟指定時間,該文件立即跟新為當下系統時間,命令執行的時間
      ~]# stat /tmp/functions 
        File: `/tmp/functions'
        Size: 19316     	Blocks: 40         IO Block: 4096   regular file
      Device: 803h/2051d	Inode: 272424      Links: 1
      Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
      Access: 2016-12-07 23:57:47.679988222 +0800
      Modify: 2016-12-07 23:42:06.003985658 +0800
      Change: 2016-12-07 23:57:47.679988222 +0800
      ~]# touch /tmp/hello 摸一個不存在的文件,就會創建一個文件 
       ~]# ls /tmp/
      functions  hello
      ~]# file /tmp/hello  看到這個是個空文件
      /tmp/hello: empty
      ~]# touch  -c /tmp/lessssss   不存在該路徑不予創建
       ~]# ls /tmp
      functions  moosefs 
    
      ~]# touch -m -t 0212010303.03 /tmp/functions 
       ~]# stat /tmp/functions 
        File: `/tmp/functions'
        Size: 19316     	Blocks: 40         IO Block: 4096   regular file
      Device: 803h/2051d	Inode: 272424      Links: 1
      Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
      Access: 2016-12-07 23:57:47.679988222 +0800
      Modify: 2002-12-01 03:03:03.000000000 +0800
      Change: 2016-12-08 00:13:13.438986294 +0800
      數據一改變,元數據就會立即更新他的時間戳,意味著改動時間也立即跟新	

四、別名的作用,以及如何在命令中引用其它命令的執行結果

  • alias命令用來設置指令的別名。我們可以使用該命令可以將一些較長的命令進行簡化。使用alias時,用戶必須使用單引號''將原來的命令引起來,防止特殊字符導致錯誤。

  • alias命令的作用只局限于該次登入的操作。若要每次登入都能夠使用這些命令別名,則可將相應的alias命令存放到bash的初始化文件/etc/bashrc或者/home/.bashrc(/root/.bashrc)中。

    change file timestamps   更改文件時間戳
      -c:指定的文件路徑不存在時后,不予創建;
      -a: 僅修改access time; 直接修改當下命令執行時的時間;
      -m:僅修改modify time;
      注意:change time 不能手動指定更改
      -t STAMP (指定要改為哪一刻時間)
      	[[CC]YY]MMDDhhmm[.ss] 年月日 小時 分鐘 秒
      ~]# touch /tmp/functions      如果不跟指定時間,該文件立即跟新為當下系統時間,命令執行的時間
      ~]# stat /tmp/functions 
        File: `/tmp/functions'
        Size: 19316     	Blocks: 40         IO Block: 4096   regular file
      Device: 803h/2051d	Inode: 272424      Links: 1
      Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
      Access: 2016-12-07 23:57:47.679988222 +0800
      Modify: 2016-12-07 23:42:06.003985658 +0800
      Change: 2016-12-07 23:57:47.679988222 +0800
      ~]# touch /tmp/hello 摸一個不存在的文件,就會創建一個文件 
       ~]# ls /tmp/
      functions  hello
      ~]# file /tmp/hello  看到這個是個空文件
      /tmp/hello: empty
      ~]# touch  -c /tmp/lessssss   不存在該路徑不予創建
       ~]# ls /tmp
      functions  moosefs 
    
      ~]# touch -m -t 0212010303.03 /tmp/functions 
       ~]# stat /tmp/functions 
        File: `/tmp/functions'
        Size: 19316     	Blocks: 40         IO Block: 4096   regular file
      Device: 803h/2051d	Inode: 272424      Links: 1
      Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
      Access: 2016-12-07 23:57:47.679988222 +0800
      Modify: 2002-12-01 03:03:03.000000000 +0800
      Change: 2016-12-08 00:13:13.438986294 +0800
      數據一改變,元數據就會立即更新他的時間戳,意味著改動時間也立即跟新	
  • 引用命令的執行結果:命令引用是引用命令的執行結果,狀態結果靠$?

    $(COMMAND)
    或`COMMAND`
    ~]# date +%H-%M-%S
    09-18-13
    ~]# mkdir $(date +%H-%M-%S) 把$后的內容當做參數來引用;
     ~]# ls
    09-19-39         a-z  fstab 
    
    bash的基于特性:引用
    	強引用:'' 內部任何字串直接顯示,不做替換
    	弱引用:"" 會替換,變量中所存儲的值;
    	~]# A=1
     ~]# echo $A
    1
     ~]# echo '$A'
    $A
    ~]# echo "$A"
    1
    	命令引用:``

五、其它練習題目

 1、顯示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間出現一位任意字符的文件或目錄;
  ~]# ls -d /var/l?[[:lower:]]
  /var/lib  /var/log

2、顯示/etc目錄下,以任意一位數字開頭,且以非數字結尾的文件或目錄;
 ~]# ls -d /etc/[0-9]*[^0-9]

3、顯示/etc目錄下,以非字母開頭,后面跟一個字母及其它任意長度任意字符的文件或目錄;
 ~]# ls -d /etc/[^a-z][a-z]*

4、在/tmp目錄下創建以tfile開頭,后跟當前日期和時間的文件,文件名型如:tfile-2016-05-27-09-32-22.

 ~]# touch /tmp/tfile-$(date +%F-%H-%M-%S)
 ~]# ls /tmp/
 fstab      hello.txt  moosefs  passwd.out  system.rel      tfile-2016-12-08-10-24-52
 
5、復制/etc目錄下所有已p開頭,以非數字結尾的文件或目錄至/tmp/mytest1目錄;

 ~]cp -r /etc/p*[^0-9] /tmp/mytest1/
 ~]# cp -r /etc/p*[^0-9] /tmp/mytest1
 cp: overwrite `/tmp/mytest1/passwd'? y
 cp: overwrite `/tmp/mytest1/passwd-'? y
 ~]# ls /tmp/mytest1
 pam.d    pinforc
 
6、復制/etc/目錄下所有以.d結尾的文件或目錄至/tmp/mytest2中。

 ~]# cp -r /etc/*.d /tmp/mytest2
 ~]# ls /tmp/mytest2
 bash_completion.d  init.d        modprobe.d      rc1.d  rc.d         xinetd.d
 chkconfig.d        latrace.d     pam.d           rc2.d  rsyslog.d    yum.repos.d
 cron.d             ld.so.conf.d  popt.d          rc3.d  rwtab.d
 
7、復制/etc目錄下所有已l或m或n開頭,已.cont結尾的文件至/tmp/mytest3目錄中。

 ~]# cp  -r /etc/[lmn]*.conf /tmp/mytest3
 ~]# ls /tmp/mytest3
 latrace.conf  libaudit.conf  logrotate.conf  mke2fs.conf  nsswitch.conf
 ld.so.conf    libuser.conf   ltrace.conf     mtools.conf  ntp.conf

原創文章,作者:讓優秀稱為一種習慣,如若轉載,請注明出處:http://www.www58058.com/63257

(0)
讓優秀稱為一種習慣讓優秀稱為一種習慣
上一篇 2016-12-11 19:10
下一篇 2016-12-11 22:17

相關推薦

  • Linux shell之bash特性大全詳解(持續更新ing)

    一、shell是什么?     Shell本身是一個用C語言編寫的程序,它是用戶使用Unix/Linux的橋梁,用戶的大部分工作都是通過Shell完成的。Shell既是一種命令語言,又是一種程序設計語言。作為命令語言,它交互式地解釋和執行用戶輸入的命令;作為程序設計語言,它定義了各種變量和參數,并提供了許多在高級語言中…

    Linux干貨 2016-03-09
  • NFS實現共享wordpress

    實驗環境 192.168.68.134 wordpress站點 nfs-server 192.168.68.144 nfs-client   實驗要求 nfs server共享/var/www/html目錄 nfs clinet掛載nfs-server共享的目錄,部署wordpress   nfs server端 先部署wordpress…

    Linux干貨 2017-10-21
  • 進程和計劃任務

    一、知識整理 1、網絡客戶端工具:lftp,ftp,lftget,wget 子命令:get,mget,ls,help等 wget [opt] …[url] -q 靜默模式 -c 斷點續傳 -O 保存位置 –limit-rates=  指定傳輸速率 登錄ftp之后:lcd 在本機切換目錄;get下載單個文件 !ls 查看本機文…

    Linux干貨 2016-09-13
  • Shell腳本編程初步

        shell是指一種應用程序,這個應用程序提供了一個界面,用戶通過這個界面訪問操作系統內核的服務。shell腳本(shell script),是一種為shell編寫的腳本程序。業界所說的shell通常都是指shell腳本,但shell和shell script是兩個不同的概念。shell編程跟java、php編程…

    Linux干貨 2016-08-24
  • Redis 代理服務Twemproxy

    1、twemproxy explore       當我們有大量 Redis 或 Memcached 的時候,通常只能通過客戶端的一些數據分配算法(比如一致性哈希),來實現集群存儲的特性。雖然Redis 2.6版本已經發布Redis Cluster,但還不是很成熟適用正式生產環境。 Redis 的 Clust…

    Linux干貨 2015-04-04
  • 8.5-文本處理工具(作業篇)

     1、統計當前連接本機的每個遠程主機IP的連接數,并按從大到小排序 [root@localhost ~]# netstat -nt Active Internet connections (w/o servers) Proto Recv-Q Send-Q&nb…

    Linux干貨 2016-08-07

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-12-16 17:07

    贊,總結的不錯~加油~

欧美性久久久久