隨筆-314  評論-209  文章-0  trackbacks-0

          這段時間學習shell整理的筆記

          第1章 文件安全與權限
           顯示文件
              ls -l

          d   目錄。
          l   符號鏈接(指向另一個文件
          s   套接字文件。
          b   塊設備文件。
          c   字符設備文件。
          p   命名管道文件。

            創建一個文件:
               touch myfile

            更改文件權限:
               chmod [who] operator [permission] filenam
                who: u g o a
                operator:+ - =
                operator: r(4) w(2) x(1)

               chown -R owner file
               chgrp groupname file

               id 自己信息
               umask 002
               ln [-s] source_path target_path
                 ln -s /usr/opt/monitor/regstar/reg.log /var/adm/logs/monitor.log

             $ H O M E中查找文件名符合* . t x t的文件
                 $ find ~ -name "*.txt" -print
             $ H O M E中查找文件名以一個大寫字母開頭的文件
                 $ find . -name "[A-Z]*" -print
             /etc目錄中查找文件名以host開頭的文件
                 $ find /etc -name "host*" -print
             查找文件權限位為 7 5 5的文件
                 $ find . -perm 755 -print
             在/apps目錄下查找文件,但不希望在/ a p p s / b i n目錄下查找
                 $ find /apps -name "/apps/bin" -prune -o -print
             在 $ H O M E目錄中查找文件屬主為d a v e的文件
                 $ find ~ -user dave -print
             在/apps目錄下查找屬于a c c t s用戶組的文件
                 $ find /apps -group accts -print
             查找沒有有效所屬用戶組的所有文件
                 $ fine/-nogroup-print
             查找屬主帳戶已經被刪除的文件(在/ e t c / p a s s w d文件中沒有有效帳戶的文件)
                 $ find /home -nouser -print
             查找更改時間在5日以內的文件
                 $ find / -mtime -5 -print
             在/var/ a d m目錄下查找更改時間在3日以前的文件
                 $ find /var/adm -mtime +3 -print
             假設現在的時間是2 3 : 4 0,希望查找更改時間在兩個小時以內的文件
                 $ touch -t 03111750 file
                 $ ls -l file
                 $ find . -newer file -print
             為了在/ e t c目錄下查找所有的符號鏈接文件
                 $ find /etc -type l -print
             為了在當前目錄下查找除目錄以外的所有類型的文件
                 $ find . ! -type d -print
             查找文件長度大于1 M字節的文件
                 $ find . -size +1000000c -print
             查找文件長度恰好為1 0 0字節的文件
                 $ find /home/apache -size 100c -print
             查找長度超過1 0塊的文件(一塊等于5 1 2字節)
                 $ find . -size +10 -print
             在當前的文件系統中查找文件(不進入其他文件系統)
                 $ find . -name "*.XC" -mount -print
             首先匹配所有的文件然后再進入子目錄中查找
                 $ find / -name "CON.FILE" -depth -print

            crontab 舉例:  *(分鐘) *(小時) *(每月的幾日) *(月) *(每周星期幾)

          第1列 分鐘1~5 9
          第2列 小時1~2 3(0表示子夜)
          第3列 日1~3 1
          第4列 月1~1 2
          第5列 星期0~6(0表示星期天)
          第6列 要運行的命令

          -u   用戶名。
          -e   編輯c r o n t a b文件。
          -l   列出c r o n t a b文件中的內容。
          -r   刪除c r o n t a b文件。

               表示每晚的2 1 : 3 0運行/ a p p s / b i n目錄下的c l e a n u p . s h
                  30 21* * * /apps/bin/cleanup.sh
               每月1、1 0、2 2日的4 : 4 5運行/ a p p s / b i n目錄下的b a c k u p . s h
                  45 4 1,10,22 * * /apps/bin/backup.sh
               在每天1 8 : 0 0至2 3 : 0 0之間每隔3 0分鐘運行/ a p p s / b i n目錄下的d b c h e c k . sh
                  0,30 18-23 * * * /apps/bin/dbcheck.sh
               表示每星期六的11 : 0 0 p m運行/ a p p s / b i n目錄下的q t r e n d . s h
                  0 23 * * 6 /apps/bin/qtrend.sh

               linux系統重起cron服務的方法為:/sbin/service crond  restart
               aix系統重起cron服務的方法為:kill -9 pid(cron服務),cron服務后自動重起。

           創建一個新的crontab文件:
               在 $ H O M E目錄下的. p r o f i l e文件
                  加入  EDITOR=vi; export EDITOR
                  vi davecron                    建一個新的crontab文件    
           $ crontab davecron             提交crontab

           如果你正在運行一個進程,而且你覺得在退出帳戶時該進程還不會結束,那么可以使用n o h u p命令
                nohup command &

           echo string

           定義變量:
              read name
                輸入hello
              echo $name
           
          輸入文件—標準輸入 0
          輸出文件—標準輸出 1
          錯誤輸出文件—標準錯誤 2

          command > filename 把把標準輸出重定向到一個新文件中
          command > filename 2>&1 把把標準輸出和標準錯誤一起重定向到一個文件中
          command 2 > filename 把把標準錯誤重定向到一個文件中
          command >> filename 2>&1 把把標準輸出和標準錯誤一起重定向到一個文件中 (追加)

          &&左邊的命令(命令1)返回真(即返回0,成功被執行后,&&右邊的命令(命令2)才能夠被執行
             mv who.ini awho.ini && echo "it's success

          sort file.txt 對文件排序
          --------------------------------------------------

          正則表達式介紹:
          ^ 只只匹配行首
          $ 只只匹配行尾
          * 只一個單字符后緊跟*,匹配0個或多個此單字符
          [ ] 只匹配[ ]內字符。可以是一個單字符,也可以是字符序列。可以使用 -
          表示[ ]內字符序列范圍,如用[ 1 - 5 ]代替[ 1 2 3 4 5 ]
          \ 只用來屏蔽一個元字符的特殊含義。因為有時在 s h e l l中一些元字符有
          特殊含義。\可以使其失去應有意義
          . 只匹配任意單字符
          pattern \ { n \ } 只用來匹配前面pattern出現次數。n為次數
          pattern \ { n,\ } m 只含義同上,但次數最少為n
          pattern \ { n,m \ } 只含義同上,但pattern出現次數在n與m之間

           匹配以單詞t r o u b l e結尾的所有行
              t r o u b l e $
           要匹配所有空行
              ^ $   
              ^ . $
           使用\屏蔽一個特殊字符的含義
           下列字符可以認為是特殊字符
               $ . ' " * [ ] ^ | () \ + ?

           注意^符號的使用,當直接用在第一個括號里,意指否定或不匹配括號里內容
              [ ^ 0 - 9 ]   匹配任一非數字型字符

           匹配字母A出現兩次,并以B結尾
              A \ { 2 \ } B
           匹配A至少4次  
              A \ { 4 , \ } B
           A出現2次到4次之間
              A \ { 2 , 4 \ } B

           grep 查匹配的字符

          -c   只輸出匹配行的計數。
          -i   不區分大小寫(只適用于單字符)。
          -h   查詢多文件時不顯示文件名。
          -l   查詢多文件時只輸出包含匹配字符的文件名。
          -n   顯示匹配行及行號。
          -s   不顯示不存在或無匹配文本的錯誤信息。
          -v   顯示不包含匹配文本的所有行。

           所有. d o c文件中查找字符串“s o r t”
               $ grep "sort" *.doc
           精確匹配
               $ grep "sort<tab>" *.doc
           抽取包含S e p t的所有月份,不管其大小寫,并且此行包含字符串 4 8 3
               $ grep "[Ss]ept' data.f | grep 483
           對一個字符串使用grep
               str="hello every one"
               echo $str | grep "one"

           測試是否已設置或初始化變量。如果未設置或初始化,就可以使用另一值:
               $ { v a r i a b l e : - v a l u e }

          $ cu='chen'
          $ echo "the ask is ${cu:-hi} today" (如果未設置或初始化,就可以使用hi)

          readonly 變量  變量設置為只讀

          設置環境變量:
             VARIABLE-NAME = v a l u e
             Export VARIABLE-NAME
          pg 分頁顯示
             變量 ARIABLE-NAME ='chen' 輸出'chen'
             變量 ARIABLE-NAME ="chen" 輸出 chen

          打印當前系統上用戶數目:
             echo "ther are 'who | wc -l' users on the system "


          test測試:
          - d 目錄             - s 文件長度大于0、非空
          - f 正規文件         - w 可寫
          - L 符號連接         - u 文件有s u i d位設置
          - r 可讀             - x 可執行

          test -r tt.txt
          echo $?   (正確顯示0,錯誤顯示1)


          確定當前的運行級別:
           $ who -r
           $ runlevel
          查看doc_part文件是否被打開,有哪些進程在使用:
           $ fuser -m /root/doc_part
          該命令可以顯示當前所使用的登錄用戶名
            $ logname
          可以使用tty來報告所連接的設備或終端
            $tty
          記錄當前會話
            $script. 文件名
            exit
          意味著系統在10秒鐘之內不進行任何操作
            $sleep 10 
          可以看二進制文件中所包含的文本
            $strings 文件名
          whereis命令能夠給出系統命令的二進制文件及其在線手冊的路徑
            $whereis  命令
          tr用法(字符轉換)
            # tr -s "[a-z]" < a.txt >b.txt   a.txt的字符有重復的小寫轉為b.txt文件
            # cat da|tr -s "[a-z]"

            # tr -s "[\012]" < a.txt  去掉空行
            # tr -s "[\n]" < a.txt
            # tr -s "[\015\032]" "[\012*]"  < input_file  一般的dos到unix轉換命令
            # echo "may May"|tr "[a-z]" "[A-Z]"    小寫轉大小
            # cat a.txt|tr "[a-z]" "[A-Z]" >b.txt
            # cat a.txt|tr "[A-Z]" "[a-z]" > b.txt 大小轉小寫
            # tr -cs "[a-z][A-Z]" "[\012*]" < a.txt  只保留大小字母,并分行

            sort分類:
            # sort a.txt > b.txt
            # uniq a.txt > b.txt 消除重復的行(只在行連續重復時才有效)
              # uniq -u a.txt   只顯示不重復行
              # uniq -d a.txt   只顯示有重復數據行
            join(將來自兩個分類文本文件的行連在一起)
            # join a.txt b.txt
            # join -a1 a.txt b.txt      當有不匹配時,只顯示a.txt
            # join -a1 -a2 a.txt b.txt  當有不匹配時,都顯示出來
            split用來將大文件分割成小文件(將文件按每個最多1000行分割)
            # split 文件
            # split -100 文件  指定每個文件100行分割
            paste按行將不同文件行信息放在一行
            # ls | paste -d ""  以一列格式顯示輸出
            # paste a.txt b.txt
            cut用來從標準輸入或文本文件中剪切列或
            # cut -c 1-3 c.txt          顯示每行從開頭算起1到3的字母
            # cut -c 1-2,5-10 c.txt     顯示從1到2,還有5到10的字母
            # cut -f 1,3 c.txt          顯示1和3欄的字符(使用tab分隔)

            sed用法:文本編輯器(強大的文本過濾工具)
            刪除:d命令
               $ sed '2d' example-----刪除example文件的第二行。
               $ sed '2,$d' example-----刪除example文件的第二行到末尾所有行。
               $ sed '$d' example-----刪除example文件的最后一行。
               $ sed '/test/'d example-----刪除example文件所有包含test的行。
            替換:s命令
               $ sed 's/test/mytest/g' example-----在整行范圍內把test替換為mytest。如果沒有g標記,則只有每行第一個匹配的test被替換成mytest
               $ sed 's/^192.168.0.1/&localhost/' example-----&符號表示替換換字符串中被找到的部份。所有以192.168.0.1開頭的行都會被替換成它自已加 localhost,變成192.168.0.1localhost
           寫入文件:w命令
               $ sed -n '/test/w file' example  在example中所有包含test的行都被寫入file里
               # sed '/^kai/a\\  this is a example' b.txt   " this is a example"被插入到以kai開頭后面的新一行
               # sed '/^kai/i\\  this is a example' b.txt   " this is a example"被插入到以kai開頭后面的前一行

          posted on 2010-09-17 15:43 xzc 閱讀(225) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 沙河市| 都兰县| 兰西县| 南江县| 福泉市| 德清县| 康乐县| 呼伦贝尔市| 道真| 磐安县| 株洲市| 通州区| 濉溪县| 资阳市| 石柱| 保德县| 元谋县| 威宁| 临桂县| 井研县| 崇明县| 肃南| 泾源县| 苍南县| 马边| 元阳县| 浑源县| 横山县| 万源市| 台州市| 新巴尔虎右旗| 济阳县| 特克斯县| 平昌县| 临潭县| 延寿县| 江孜县| 正宁县| 洪泽县| 菏泽市| 双流县|