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
下一篇 2016-12-11

相關推薦

  • linux 啟動管理

    1、Linux系統啟動流程:POST 加電自檢 — BIOS(Boot Sequence)–>MBR(bootloader,446)(加載前512字節后的驅動程序,進入/boot目錄,加載內核)–>Kernel–>initrd–>(系統根路徑 /)(ROOTFS)/sbin/…

    Linux干貨 2017-09-03
  • CA,DNS,LAMP實現wordpress

    拓撲圖見編譯實現LAMP,bind,CA.jpg test3配置:     yum -y install bind     修改named.conf配置文件:     //      listen-on por…

    2017-04-23
  • SELinux在httpd服務端中的使用

    一、啟用SELinux策略并安裝httpd服務,改變網站的默認主目錄為/website,添加SELinux文件標簽規則,使網站可訪問(以CentOS7系統操作) 1、首先查看本系統是否已經安裝httpd服務 2、查看httpd的配置文件所在路徑 3、創建主目錄為/website與網頁文件"index.html",并更改httpd服務為該路…

    Linux干貨 2016-09-16
  • Linux的文件系統和目錄

    Linux的文件系統和目錄 Linux目錄和Windows目錄有著很大的不同,Linux目錄類似一個樹,最頂層是其根目錄,如下圖: 文件系統和目錄:   詳細用法如下 / bin     存放用戶使用的基本命令(可執行程序,二進制文件),它是不能單獨分區的 boot    跟內核…

    2017-03-26
  • Jmeter性能測試 入門

    Jmeter是一款優秀的開源測試工具, 是每個資深測試工程師,必須掌握的測試工具,熟練使用Jmeter能大大提高工作效率。 熟練使用Jmeter后, 能用Jmeter搞定的事情,你就不會使用LoadRunner了。 【小坦克Jmeter教程】,將會覆蓋Jmeter的各個功能,并且會通過豐富的實例,讓讀者快速掌握Jmeter的各種用法 。 本文將通過一個實際的…

    Linux干貨 2015-03-06
  • Centos系統 本地自動安裝

    §·Centos系統光盤安裝的流程 大概的了解下Centos的光盤系統安裝流程: 1.插入光盤,出現菜單選擇界面;通常情況下我們選擇第一項: 第一項 : Install  or upgrade an existing system   2.默認進入圖形界面安裝并且進行一些必要的環境設置(安裝前的配置階段) 需要我們手工設置的項目…

    Linux干貨 2016-09-15

評論列表(1條)

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

    贊,總結的不錯~加油~

欧美性久久久久