[RedHat筆記]第二課:時間表示、幫助命令、文本查看命令、實現用戶管理及權限、BASH、變量、腳本


一般來講文本文件和二進制文件應該是不同的,但是卻都顯示為普通文件
如何顯示其不同呢?

命令:file
           file FILE_NAME         file后面跟文件名
           通過這個命令,可以區別文件的不同類型,也可以判斷是否是目錄。
--------------------------           
關於系統的相關命令:
Linux有兩種時間,1種是系統時間,2是硬件時間。 (Linux剛開機的時候讀取硬件時間,然后時間自己計算,跟硬件時間可能不會同步。)

   hwclock 命令,用於設定時間
              -w : 表示我的系統時間是准確的,能夠實現把硬件時間設定為與系統時間一致。
              -s : 表示硬件時間是准確的,把系統時間設定為與硬件時間一致
    date     讀取系統時間          
    clock    讀取其硬件時間
               、(查看硬時間)
------------------------------------------------------------
時間管理命令
   date     命令,用以顯示系統的當前時間。(查看軟時間)
          date 命令,還可以設定時間 格式為:
                   date mmddHHMMyy.SS
                   date 月日時分年.秒
                   比如:
                            date 1212121212.12
                   則:時間為,2012年,12月,12日,12時,12分,12秒
          date命令還可以指定時間顯示格式:
                   date +FORMAT
                   比如:
                            date "+%H" 只顯示小時
                             +%H   顯示小時
                             +%M  顯示分鍾
                             +%S   顯示秒
                            date "+%H:%M:%S"顯示時分秒
                            +%y    顯示年
                            +%Y    顯示年的全稱 2012
                            +%m   顯示月
                            +%d    顯示天
                            +%D   顯示日期
                            +%F   直接顯示年月日
                            +%T   直接顯示時分秒
                            date "+Today is %Y-%m-%d"
                    date命令中分號內是可以加任何字符的。%X是宏命令。
           date命令在備份的時候尤其有用。     
           
           特殊時間戳:
                   date "+%s" :表示自1970年1月1號0點0分0秒 到今天,一共過了多少秒    
------------------------------------------------------------   
   cal   命令 : 用於顯示日歷 直接顯示當前月
            cal 2011  : 則顯示全年
            cal 1 2011 :則顯示2011年1月 [cal 月 年]
           
            最特殊年月
                  cal 9 1752 : 少了3-13號,這是程序員的失誤。                          
------------------------------------------------------------
命令分內部命令,外部命令。
  內部命令:你所對應的shell自身所帶的命令 (shell本身也是一個程序,為了讓自己能運行,它自身要附帶一些命令)
                  所有的內部命令,都沒有一個可執行的二進制文件
  外部命令:所有的外部命令都有一個可執行的二進制文件
  
------------------------------------------------------------
  which 命令:用於查看一個命令所對應的二進制文件在什么位置 
              which cd 
              which ls 
   
  type  命令: 直接查看是什么命令:
              type cd 
              tpye ls          
  
-----------------------------------------------------------  
  想獲得幫助信息有以下方式
  1.外部命令:
        命令 --help
  (是大部分外部命令獲得幫助信息的一種方式)
             比如 cd --help
  2.內部命令:
        help  命令
 (是大部分內部命令的幫助獲取方式)
  
  3.大部分命令都有一個更詳細的幫助信息:
        man 命令  (直接查看該命令的詳細信息,以及每一個選項的詳細說明)
        info 命令  (一種附帶有超鏈接的 命令的說明信息,跟多的是講述命令背后的故事,有時也帶有部分說明)
        
        所以info一般作為man的補充說明
   
  4. /usr/share/doc/里一般保存程序的幫助文檔
  5. 通常版本的Linux的官方網站里有各種信息
                  比如http://www.redhat.com/docs里
                        http://kbase.redhat.com  紅帽的知識庫
  6.whatis 命令:用於顯示某個命令的簡單說明
                 括號內的數字:表明了當你用man手冊進行查閱的時候,它處於第幾章節
                 whatis有可能在某些機子上無法運行:
          當你的系統安裝完不久,會有一個數據庫,Whatis是從里面找的
                 使用:makewhatis 
                 可以幫助whatis命令生成數據庫,以便於whatis方便查找
                 過程一般需要2分鍾+
                 
------------------------------------------------------------
  man COMMAND :詳解
      man 為命令提供的使用手冊都是分章節的,
              man N COMMAND  : man+章節+命令 直接看該命令在該章節的幫助信息
      
     一般章節:
            第一章節:存放大部分普通用戶的命令
            第二章節:顯示系統調用
            第三章節:庫調用 (關於庫信息的說明)
            第四章節:特殊文件(塊設備,字符設備)
            第五章節:文件格式 (配置文件的說明,對命令的配置文件的語法進行的說明)
            第六章節:游戲說明
            第七章節:雜項
            第八章節:管理類命令(跟系統相關的只有權限人才有權利執行的命令。比如useradd(添加用戶)命令)
            
      whatis COMMAND 查看COMMAND命令在哪一章節。
            手冊為了防止龐大,都用壓縮的形式進行存放:
            存放位置:usr/share/man
                  *.gz文件:gzip文件,壓縮文件
                  
      man命令 先到 地方找到命令的手冊頁,然后將其解壓縮。然后才看到了命令的man手冊
      
      man命令查看后其實是遵循一些語法規范的:
            NAME : 用以表示簡單的說明
            SYNOPSIS : 命令的簡要語法格式
            EXAMPLES : 給你命令的使用樣例。
            OPTIONS:選項
            FILES : 跟哪個配置文件相關聯。
            DESCRIPTION : 描述信息,用於詳細描述命令的功能以及詳細的選項,以及選項所對應的意義
            AUTHOR : 命令作者
            REPORTING BUGS : 如果發現BUG了,怎么辦
            COPYRIGHT : 版權
            SEE ALSO : 另外說明
            
       用man命令打開手冊頁后,如何實現上下翻頁?
            空格鍵:可以直接往下翻一屏
            B    鍵:往前翻一屏
            回車鍵:往下一次翻一行
            K    鍵:往文件頭一次翻一行
            
       如果不知道man命令怎么用:
            man man 
       man有個選項,可以顯示類似於whatis命令的顯示結果
            man -f COMMAND ,跟使用whatis的效果是一樣的。
       問題:man的-k選項,和-K選項有什么用呢?
            -k指的是keyword,關鍵詞,
            man -k COMMAND :可以提供哪些命令里面包含COMMAND (他是從whatis數據庫中找的)
            -K是從man數據庫找到所有的關鍵詞信息,數據量非常龐大。一般不用,查找速度將巨慢無比。
       
       當使用完man后,想退出的話,使用Q鍵就可以退出
       而且man支持關鍵詞搜索:
                      輸入一個斜線“/”然后加關鍵詞,所有關鍵詞會用反黑顯示(/是表示從文件首部向文件尾部查找)
                      也可以使用問號“?”跟上關鍵詞,同理 (?是從尾部向首部查找)
               搜索完關鍵詞后,光標會指到第一個關鍵詞上,
                      用 n 和 N 在 下一個 和 上一個 之間進行切換。
                        
------------------------------------------------------------                       
臨時擴展           export LANG=c  重置標准字符集,避免亂碼
mingetty :建立虛擬終端,生成tty的。在控制台上用這個可以生成6個虛擬控制台
login : 切換到登陸
finger : 查看用戶信息的 比如 finger root.
ls 的 -i 選項可以提供icode
touch -m -t 可以修改文件時間戳
    
------------------------------------------------------------
文本查看類命令:
  比如查看:/etc/inittab
  一般常用的文本查看命令:cat,more,less,tail,head,tac
  
------------------------------------------------------------
  cat 命令: cat + 文件
          concatinate, dump
       功能1,連接,cat可以將多個文件連接到一起。顯示出來。
       功能2,dump.傾倒式的查看,瞬間翻至最后一頁。
       
       但在某些場景下是很有用的,比如將某些文件顯示出來並將它重定向到某地
       比如某文件:cat /etc/sysconfig/network這個文件很小。
       cat會直接查看,查看完后直接退出查看器。
       
              -n : cat可以在顯示的時候顯示行號,行號不是文件本身的內容
              -E : 用於顯示行結束符,會加入 $ 符,是Linux中的行結束符。Windows的行結束符比Linux多1
              
       tac是反着倒……
  
  --------------------------
  more命令   :more + 文件
          more,可以分屏顯示內容,並且給出顯示的百分比
          more的向前翻騰是有問題的,用B鍵可以使用向前翻頁,所以很多教材只介紹more可以向后翻頁,不能向前翻
          more 翻到最后之后會自動退出。所以這也是為什么他不能向前翻的最重要原因
   -------------------------
  less命令  : less + 文件
          less可以向前翻,而且翻完之后不會自動退出,會顯示
                                 [END]
          實際上,man命令其實調用了less命令的查看方式,所以man支持的,less都支持。
          less命令也是將來用的最多的命令之一。
  --------------------------
  tail,head命令 :
           head 命令用於查看文件前 N行 (默認為10行)
           tail 命令用於查看文件的后 N行  (默認為10行)
              head -n 20 
              head -20  都代表看前20行
              tail -n 22 /var/log/messages
              tail -22
                  tail  -f 命令,查看文件而不退出,並且實時顯示信息。
                  不想看了,用ctrl+C,則退出。
             
             *當你寫了一個命令不想執行的話,用CTRL+C直接返回。
             */var/log/messages 是系統日志,我們經常用tail命令查看其內容
  -------------------------
  wc 命令 : 用於統計一個文件有多少行,多少單詞,多少字節
           wc /etc/rc.d/rc.sysinit
           顯示
            980   3946  27239    對應,行/單詞/字節
                 -l : 只顯示有多少行
                 -w : 只顯示有多少單詞
                 -c :顯示多少字節(字節包含空格)
                 -m : 顯示多少字符
                 -L : 顯示文件中最長的行有多長
  -------------------------
  ===================================
   如何實現用戶管理
  1.什么是用戶 User :
       是一個使用者獲取系統資源的憑證,是權限的結合,為了識別界定每一個用戶所能訪問的資源及其服務的。只是一種憑證。會有一個表示數字,計算機會首先跟這個數字相匹配。ID號。一般來講用戶名是公開的。
       還要有個一個驗證機制,來驗證用戶就是那個它所聲稱的那個人。(密碼其實是最不可靠的方法)
  2.什么是組  Group :
       一個組,可以識別是一個權限的集合,而且任何加入這個組的人都自動擁有這個組的權限。計算機靠GID(組ID)來識別.
       一個用戶組也是有密碼的。一般的用戶不能隨便加入某個組中,需要用管理員協助。密碼的作用是讓一個沒有管理權限的用戶臨時的加入某組
       
       組分成兩種組:(linux下任何一個用戶必然會屬於某一個組,即便沒有分組,系統也會給你分一個跟你同名的組)
              1.私有組:這個里面只有一個用戶,而且這個用戶名跟組名同名。也叫用戶的基本組
              2.公共組 : 也叫共有組。也叫用戶的額外組,或者附加組。
           一個用戶可以同時擁有多個組。
              
       UID,GID:其實是保存為無符號十進制數,用十六位二進制表示,0~65535
          UID, GID和UID的編號相同
            管理員的ID號,永遠為 0 (root)
            id 命令+ 用戶 ,可以查看用戶的id以及組。
            
            1-499 :屬於系統用戶,讓某個程序運行的時候能以某個用戶的身份運行。
            500-65534:普通用戶
            65535:Nobody特殊用戶(也有可能是65536則,溢出,則為-1,相當於Guest,來賓賬號)

       
       進程:進程是資源分派的單位。是一個程序的正在執行的副本。
                 程序要想執行起來要獲得CPU的號,要用到內存,如何分配相應的內存給單位呢?進程就是來划分的。
                 事實上,用戶都是發起了一個又一個的進程,才控制了計算機的工作。(其實是有人在帶你操作電腦)
                 df -l 可以查看用戶的進程
                 同一個命令,大家都可以執行,但是執行時的用戶權限都不一樣。
             
  3.什么是權限  Permission
           安全上下文:Secure Context
                 一個進程發起的時候,這個進程所具有的權限,而一個進程所具有的權限跟用戶所具有的權限是相關聯的。
                 
            -rw--r-w--    
            r w x -  t :  - 為沒有權限, r是讀,w是寫,x是執行。 t\
                 每三個是一組
                 第一組,屬主 rwx
                 第二組,屬組 rwx
                 第三組,其他人的權限 rwx
                 
             文件中包含,
                讀 r  : cat ,more,查看
                寫 w : 編輯文件
                執行 x :能讓文件運行起來的權限,默認普通文件都不具有執行權限
             目錄中
             讀 : ls,查看
             寫 :能夠刪除文件,新建文件.
             執行 : 能夠 cd進去 ls -l 來查看的權限
  
             --- : 000 0
             --x : 001 1
             -w- : 010 2
             -wx : 011 3
             r-- : 100 4
             r-x : 101 5
             rw- : 110 6
             rwx : 111 7
  
  -------------------------------------------
   改變一個文件的屬主屬組的方法
    chown 修改屬主
        格式:chown [options] USERNAME [files]
        比如:chown gentoo a.txt  則是將a.txt的屬主更改為gentoo
              一個命令可以同時修改屬主屬組
                   chown USERNAME:GRPNAME files
                   或者  
                   chown USERNAME.GRPNAME files
                   或者
                   chown :GRPNAME files 只修改組,不修改主
         當你用其改變一個目錄的屬主的時候,里面的文件的屬主不受影響
         
         如果想一起修改目錄里的文件則
              -R : 遞歸修改。
                   比如 chown -R slackware test :修改test文件夾的屬主為slackware並遞歸
             
              --reference=FILE 將某個文件/目錄的屬主和屬組改為和某人一樣
                   比如: chown --reference=a.txt b.txt 將b.txt的屬主和屬組修改為和a.txt一樣
 ------------------------------------------------                  
    chgrp 修改屬組
        格式同chown
        比如:chgrp mygrp a.txt
-------------------------------------------------
    chmod 修改權限
        格式:chmod [options] mode files...   (mode指權限)
             修改方式
                    1.使用數字的方式:chmod 777 a.txt  則是將a.txt的權限更改為 -rwdrwdrwd
                    2.使用等於號的方式進行賦值:chmod u=rw-,go=r-- a.txt  (用逗號隔開可以設置多個) 則是將a.txt的權限中屬主部分更改為rw-,屬組和其他部分改為r--。
                    3.用+/-修改某一類權限的特定位置  chmod u+x,go-x a.txt 則是將a.txt的權限中屬主的部分增加執行權限(x),將屬組和其他的部分去掉執行權限(x)
                              u = 屬主
                              g = 屬組
                              o = 其他
                              a = 全體
                              
            修改目錄的話只會修改其目錄的屬性,目錄內部是不會修改的,如果想
                 -R  : 請加大寫R 遞歸修改
            
            只有管理員才有權利改文件的屬主和屬組,其他用戶可以修改權限。
            
  -------------------------        
    練習:復制/etx/skel 目錄至/home ,並且重命名為/centos
    設定此目錄及其內部文件或子目錄的屬主屬組都為redhat用戶,redhat組
    設定此目錄及其內部文件或子目錄的權限為屬組和其他用戶沒有任何權限           
    修改redhat用戶的家目錄為/home/centos
    切換至redhat用戶,驗證其家目錄是否正常可用
  
  ============================================================
  用戶的文件        /etc/passwd 用戶ID        /etc/shadow  用戶密碼  組的文件        /etc/group  組ID        /etc/gshadow  組秒

        
----------------------------
建立賬號:
  useradd 賬號名  :
            useradd gentoo:后,則在 /etc/passwd 下增加了一行
            
    用戶信息  "gentoo:x:503:503::/home/gentoo:/bin/bash"
            用冒號分出了7段
            第一段:用戶名
            第二段:x (密碼),告訴你加密放在了另一段
            第三段:UID號
            第四段:GID(是用戶所屬的基本組的ID號,私有組)
            第五段:用戶的全名(注釋信息,COMMENT信息)可以為空
            第六段:用戶的家目錄
            第七段:用戶默認使用的Shell,默認使用Bash。在/bin下
      
    /etc/shells目錄下可以顯示出所有可以允許用戶使用的的shell
    
  用戶密碼,Linux 下默認必須有密碼,保存在、/etc/shadow
      當加入用戶之后會有一行:
            student:$1$8kkXoZno$naC13rWnhoKfcMyiZr5qy9/:15172:0:99999:7: : :
            第一段:登錄名
            第二段:加密后的密碼(經過MD5散列加密的密碼)
                         加密的方式:對稱加密
                                            公鑰加密
                                            單項加密 (主要目的在於提取數據的特征值,拿到一段數據可以提取這個數據的特征碼。)
                                                        特點有:1.單項
                                                                     2.雪崩效應(不管密碼有多長,只要初始條件有一點點改動,結果將有巨大的變化)
                                                                     3.定長輸出(無論你輸入有多長,而加密有的結果都是一樣的。)
                                                        經常用的單項加密是
                                                                     MD5(128bit定長輸出) , sha1(160bit定長輸出) 
                         用戶密碼為“!!”指沒有密碼
                        “ $1$8kkXoZno$naC13rWnhoKfcMyiZr5qy9/  ”
                         $1(代表是MD5算法)$雜質(鹽)$內容
            第三段:最近一次修改密碼的時間(天數,從1970年1月1日起,到上一次修改時間的天數。)
            第四段:密碼最短使用期限(天數,相對於上一次密碼修改后的天數)
            第五段:密碼最長使用期限,密碼過期時間(天數)
            第六段:提前多少天提示用戶密碼快要過期了(天數)
            第七段:密碼過期幾天之后賬號將被禁用(天數),如果已經即將過期,系統會強制讓用戶修改密碼,否則不能登錄
            第八段:用戶賬號使用期限(天數,絕對時間,能讓你使用到從1970年1月1日之后多少天。默認是99999)
            第八段:保留。
            
  -----------------------------
  用戶組賬號 
  /etc/group 
  內容為: 組名:組密碼:組ID:所有以這個組為附加組的用戶們
  
 ------------------------------
 用戶組密碼
 /etc/gshandow
 
 --------------------------------
 如何在創建用戶的時候給其指定信息。
 
 useradd 命令的使用詳解:
    
          -u UID : 更改ID號(ID號不能使用別人用過的,更改之后新用戶從這個號往后計數)
          -g GID : 更改用戶的基本組
          -G GROUP1,GROUP2  : 可以指定用戶的附加組,可以有多個組,多個組用逗號隔開
          -c “COMMENT”: 可以指定用戶的注釋信息
          -d /path/to/home  :指定家目錄
          -s /bin/kshell : 指定一個非默認shell
     比如:
             useradd -G mygrp slackware :則創建用戶slackware並將用戶slackware加入到附加組mygrp中
     比如:
             useradd -u 1000 oracle :則創建用戶oracle並將其UID改為1000       
     比如:
             useradd -g mygrp mysql :則創建mysql並將其加入基本組mygrp中
     比如:
             useradd -s /bin/tcsh centos: 則創建centos的shell指定為tcsh
     比如:
             useradd -d /tmp/hello suse :則創建suse並將其家目錄設為/tmp/hello
             
      可以組合使用一次指定多個條件。當指定特定組時,這個組必須事先存在
      在用戶的家目錄中查看隱藏文件,則發現里面有文件,這些都是環境變量文件。
      
------------------------------------
  添加一個組:
  groupadd 詳解:
         -g GID :指定GID
 
  useradd和groupadd都有一個共同的指令
        -r 把一個用戶添加為系統用戶或者把一個組添加為系統組。
        
------------------------------------
  如何刪除用戶/組
  userdel + 用戶名 
       -r :連同用戶及其家目錄一起刪除。
  groupdel + 組名
------------------------------------
  如何修改賬號屬性和主屬性?
  
  usermod 命令,用於修改用戶的賬戶信息。
      -u :修改 UID
      -g :修改 用戶的組
      -G : 修改附加組。(用戶原屬的附加組將會被刪除,所以一般不單獨用)
      -aG :修改附加組一般用這樣。
      -s : 修改shell
      -c : 修改注釋信息
      -d :修改家目錄。如果你想將家目錄的所有東西都移動到新地方的話,要加-M
      -l : 修改登錄名稱。
      
      還支持其他的幾個選項
      -e : 可以指定用戶的過期時間。
      -U : 表示解鎖用戶賬號
      -L : 表示鎖定用戶賬號
      
  groupmod 命令,用於修改組的信息
      -g : 修改GID
      -n : 修改組名
      
----------------------------------------
passwd 命令: 給用戶加密
      -l : 用於鎖定用戶賬號
      -u : 解鎖用戶賬號
      --stdin : (把標准輸入改為別的輸入)為用戶添加密碼的時候用非標准輸入進行創建密碼
      -x : 設定密碼最長使用期限
      -n : 設定密碼最短使用期限
     
-----------------------------------------
擴展finger 命令,用於顯示用戶的信息id 命令,用於查看用戶的id相關信息who 命令,查看當前系統上登錄的所有用戶的

====================================
如何使用BASH:
已經遇到的功能:history
                          !$ ,Alt+. , Esc+.
                          
       融合了 ksh,csh的優勢遵循GPL的shell
     1.  命令行編輯功能:
              Ctrl+a : 直接跳到命令行的行首
              Ctrl+e:直接跳到命令行的行尾
              Ctrl+u:可以刪除從光標開始一直到行首的內容
              Ctrl+k:可以刪除光標開始處到行尾的內容
              Ctrl+箭頭:可以左右一次跳一個單詞
     2.  文件名通配:
              讓你可以一次性的快速引用多個文件,通配符
              * : 任意長度的任意字符
                   比如 ls *.log 就是顯示所有.log的文件
             ? :任意單個字符,只能匹配一位字符
              [ ] : 匹配指定范圍內的任意單個字符。
                     比如 [a-z] 則匹配任意一個小寫字符
                     [abc]匹配任意其中的單個。
                     在括號里加
                              “^”表示取反
                     其他用法:[0-9]    [a-zA-Z0-9]
                                     [:keyword:] : 表示特定字符
                                        比如 [:lower:] 全是小寫字符
                                                [:alpha:] 所有字母 
                                                [:digit:]所有的數字 0-9
                                                [:alpnum:]                                            
                                                [:space:]
                                                [:punct:]
                                                [:upper:]
                                                
                                        用man grep 可以查看詳細用法
                                  用法:[[:keyword:]]
     3. 命令行補全和路徑補全
           命令補全:(當你進行命令行補全的時候,他會到某些個特定路徑下找一個最佳的跟你的user相匹配的命令並顯示出來)
                         但是到哪些目錄下去找命令呢?
                         echo $PATH
                         可以看到都有哪些路徑
               TAB鍵:敲擊可以補齊
               敲擊兩次TAB :當有多個時,可以查看都有哪些以這個開頭的,相當於CCNA里的 con ?
           路徑補全 :(它不會去PATH下去找,而去目錄下找。他會到父目錄下去找跟你有關的快速補全)
                       比如 cd /etc/a ?
     4.括號展開:
              ~ :展開為對應用戶的家目錄。比如 cd ~redhat
              { }  : 他能在命令行展開的時候展開為多個路徑。
                    創建 x/y   x/z   x/z/1   x/z/2
                    則用:mkdir -pv x/{y,z/{1,2}}
                   
                    創建 x/1 x/2  y/1 y/2 
                    則用 mkdir -pv {x,y}_{1,2} “_”多項式展開 (小學數學?)
     5.命令展開(命令擴展)               
              $( ) :把一個命令的執行結果當做參數傳遞給另一個命令
              `  `  :(ESC下的那個鍵) 跟上面意思是一樣的,都表示命令引用
              比如:創建一個月日年小時分鍾秒的文件名
                       mkdir -pv $(date "+%Y-%m-%d-%H-%M-%S")
              比如:ls -l `which passwd`
                        則引用了which passwd命令顯示之后的內容。然后將其內容進行 ls
                         
  ------------------------------------------------------------ 
   練習&擴展 :
            /etc目錄下,所有以不區分大小寫p字母開頭,后面跟了任意字符的文件
             ls /etc/[pP]*
            
            顯示/etc/目錄下,以任意小寫字母開頭,后面緊跟一個數字,而后又有任意字符的文件
            ls /etc/[[:lower:]][[:digit:]]*
                                              
            mkdir -pv myroot/{etc/{rc.d,init.d},usr/local,var/log,proc,sys,mnt,media,lib,boot/grub}          
            file `cat /etc/shells`      
            
       file 是查看文檔類型的       
       linux的重要哲學之一:組合小命令,完成復雜命令。
       
       單引號是強引用, 雙引號是弱引用,在雙引號中,$符,會被當成變量。
       
      問題: 如何創建 ./a.txt
       
------------------------------------------------------------
變量:命名的內存空間 (其實是內存中的一個存儲空間,類似於容器)


bash 支持變量,而且可以隨意聲明變量,並且可以給變量賦值
       在BASH中,變量可以不需要聲明,直接拿來用。
                         變量沒有類型。默認都是字符串型,所以默認情況下他們不能參與數學運算。(沒有比如字符型,字符串型)
       要想聲明一個變量:
                  變量名="srtings"
              或 set 變量名="strings"

               
       回收一個變量  :
                 unset 變量名
                 
       如何去取這個值?
       
          $NAME 則取了這個變量的值
      ----------------------------------------------------------------- 
       echo :  顯示 一行文本
               -n :表示不顯示換行符
               -e  :  能解釋轉義字符 (用於表示做控制符用的的叫轉義字符)
                      echo -e "How are you?\n" 則\n會被編譯成換行
               ${NAME} : NAME為變量值。一般也可以不加括號
       ----------------------------------------------------------------
       
       
       命令引用:用 ` ` 反引號。
       變量引用:用"  " 弱引用,可以進行變量替換。
                       用 '  ' 強引用,不會進行變量替換,所以echo 加'變量名'還顯示為變量名
        
       變量不會永久有效,通常只會對當前shell有效。登出之后再登入,變量就可能消失。      
       
==========================================
編程語言兩大類:
   1.腳本語言 (常用:網站)
         以源程序的方式存在,執行前不需要編譯,而是靠一個解釋器解釋執行。
              特點:維護簡便,但是執行效率差
              
         比較著名的腳本語言:   bash(太簡陋),
                                          perl(幾乎是世界上最晦澀難懂的語言[有:模糊語言大賽]),
                                          python,為了解決perl而存在的,非常簡單。面向對象的語言。語法非常嚴格,要求必須縮進,排版非常精致,語言非常完美。 
                                          ruby ,
                                          php  前三者是系統管理的最NB
                                          
   2.編譯型語言 (常用:操作系統的開發)
         編輯------------>編譯----------->連接------------>運行
                                      ↑                         ↑           
                  將源代碼轉移成目標代碼的過程 
                                                                 ↑
                                              將庫文件跟編輯起來的文件連接
              
              特點:運行速度快,執行效率高。維護比較麻煩,效率不高。
              比較著名的語言:C , C++,
                
什么叫腳本語言:
       腳本其實就是命令的堆砌,腳本里面其實放的就是命令行里一個個放的命令。
       不過腳本里提供命令控制功能
   bash腳本的行文規范:
   第一行都要寫:   #!/bin/bash     **** 他被稱為shell 的shabang[shaiba] 會讓內核拿着這個解釋器去解釋這個腳本
                                  #
   腳本1:創建一個用戶:user1  ,再創建一個用戶叫 user2 
   
-------------------------------------------------------------   
   寫一個腳本:
1、創建目錄/tmp/scripts
2、切換工作目錄至此目錄中
3、復制/etc/pam.d目錄至當前目錄,並重命令為test
4、將當前目錄中的test及其里面的文件和子目錄的屬主改為redhat
5、將test及其子目錄中的文件的其它用戶的權限改為沒有任何權限


        解答:         #!/bin/bash        #                mkdir -pv /tmp/scripts        ls -lhd /tmp/scripts        cd /tmp/scripts        cp -a /etc/pam.d /tmp/scripts/test        ls -lh `pwd`                chown -R redhat test        ls -lh `pwd`        ls -lh `pwd`/test                chmod -R o=--- test


----------------------------------------------------------
如果需要經常換目錄,則使用變量:將目錄更換為變量的值
當腳本執行結束之后,腳本會自動撤銷變量。


DIR="/tmp/scripts-`date"+%F-%H-%M-%S"`"
文件夾是時間
一般在引用的時候才需要加$符,其他時候在賦值和撤銷時不需要加$符


----------------------------------------------------------
寫一個腳本:
1、顯示當前系統日期和時間,而后創建目錄/tmp/lstest
2、切換工作目錄至/tmp/lstest
3、創建目錄a1d, b56e, 6test
4、創建空文件xy, x2y, 732
5、列出當前目錄下以a、x或者6開頭的文件或目錄;
6、列出當前目錄下以字母開頭,后跟一個任意數字,而后跟任意長度字符的文件或目錄;
        解答:
        #!/bin/bash        #        date        mkdir -pv /tmp/lstest        cd /tmp/lstest        mkdir a1d b56e 6test        touch xy x2y 732        echo "======files in order to a or x or 6====== "        ls [ax6]*        echo "======yi zi mu kaitou hougen shuzi de wenjian======"        ls [[:alpha:]][[:digit:]]*


        

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com