Linux Shell常用命令總結

來源:互聯網
上載者:User

1.   find
       find pathname -options [-print -exec -ok]
       讓我們來看看該命令的參數:
       pathname find命令所尋找的目錄路徑。例如用.來表示目前的目錄,用/來表示系統根目錄。
       -print find命令將匹配的檔案輸出到標準輸出。
       -exec find命令對匹配的檔案執行該參數所給出的shell命令。相應命令的形式為'command' {} \;,注意{}和\;之間的空格,同時兩個{}之間沒有空格,
       注意一定有分號結尾。
       0) -ok 和-exec的作用相同,只不過以一種更為安全的模式來執行該參數所給出的shell命令,在執行每一個命令之前,都會給出提示,讓使用者來確定是否執行
       find . -name "datafile" -ctime -1 -exec ls -l {} \; 找到檔案名稱為datafile*, 同時建立實際為1天之內的檔案, 然後顯示他們的明細.
       find . -name "datafile" -ctime -1 -exec rm -f {} \; 找到檔案名稱為datafile*, 同時建立實際為1天之內的檔案, 然後刪除他們.

       find . -name "datafile" -ctime -1 -ok ls -l {} \; 這兩個例子和上面的唯一區別就是-ok會在每個檔案被執行命令時提示使用者, 更加安全.
       find . -name "datafile" -ctime -1 -ok rm -f {} \;

       1) find . -name   基於檔案名稱尋找,但是檔案名稱的大小寫敏感.   
       find . -name "datafile*"
   
       2) find . -iname  基於檔案名稱尋找,但是檔案名稱的大小寫不敏感.
       find . -iname "datafile*"
   
       3) find . -maxdepth 2 -name fred 找出檔案名稱為fred,其中find搜尋的目錄深度為2(距目前的目錄), 其中目前的目錄被視為第一層.
       
       4) find . -perm 644 -maxdepth 3 -name "datafile*"  (表示許可權為644的, 搜尋的目錄深度為3, 名字為datafile*的檔案)
   
       5) find . -path "./rw" -prune -o -name "datafile*" 列出所有不在./rw及其子目錄下檔案名稱為datafile*的檔案。
       find . -path "./dir*" 列出所有符合dir*的目錄及其目錄的檔案.
       find . \( -path "./d1" -o -path "./d2" \) -prune -o -name "datafile*" 列出所有不在./d1和d2及其子目錄下檔案名稱為datafile*的檔案。
   
       6) find . -user ydev 找出所有屬主使用者為ydev的檔案。
       find . ! -user ydev 找出所有屬主使用者不為ydev的檔案, 注意!和-user之間的空格。
   
       7) find . -nouser    找出所有沒有屬主使用者的檔案,換句話就是,主使用者可能已經被刪除。
   
       8) find . -group ydev 找出所有屬主使用者組為ydev的檔案。
   
       9) find . -nogroup    找出所有沒有屬主使用者組的檔案,換句話就是,主使用者組可能已經被刪除。
   
       10) find . -mtime -3[+3] 找出修改資料時間在3日之內[之外]的檔案。
       find . -mmin  -3[+3] 找出修改資料時間在3分鐘之內[之外]的檔案。
       find . -atime -3[+3] 找出訪問時間在3日之內[之外]的檔案。
       find . -amin  -3[+3] 找出訪問時間在3分鐘之內[之外]的檔案。
       find . -ctime -3[+3] 找出修改狀態時間在3日之內[之外]的檔案。
       find . -cmin  -3[+3] 找出修改狀態時間在3分鐘之內[之外]的檔案。
   
       11) find . -newer eldest_file ! -newer newest_file 找出檔案的更改時間 between eldest_file and newest_file。
       find . -newer file     找出所有比file的更改時間更新的檔案
       find . ! -newer file 找出所有比file的更改時間更老的檔案
       
       12) find . -type d    找出檔案類型為目錄的檔案。
       find . ! -type d  找出檔案類型為非目錄的檔案。
       b - 塊裝置檔案。
       d - 目錄。
       c - 字元裝置檔案。
       p - 管道檔案。
       l - 符號連結檔案。
       f - 普通檔案。
       
       13) find . -size [+/-]100[c/k/M/G] 表示檔案的長度為等於[大於/小於]100塊[位元組/k/M/G]的檔案。
   
       14) find . -empty 尋找所有的空檔案或者空目錄.
   
       15) find . -type f | xargs grep "ABC"
       使用xargs和-exec的區別是, -exec可能會為每個搜尋出的file,啟動一個新的進程執行-exec的操作, 而xargs都是在一個進程內完成, 效率更高.
   
2.   crontab:
       檔案格式如下(每個列之間是使用空格分開的):
       第1列分鐘1~59
       第2列小時1~23(0表示子夜)
       第3列日1~31
       第4列月1~12
       第5列星期0~6(0表示星期天)
       第6列要啟動並執行命令
   
       分 時 日 月 星期 要啟動並執行命令
   
       30 21* * * /apps/bin/cleanup.sh
       上面的例子表示每晚的21:30運行/apps/bin目錄下的cleanup.sh。
       45 4 1,10,22 * * /apps/bin/backup.sh
       上面的例子表示每月1、10、22日的4:45運行/apps/bin目錄下的backup.sh。
       10 1 * * 6,0 /bin/find -name "core" -exec rm {} \;
       上面的例子表示每周六、周日的1:10運行一個find命令。
       0,30 18-23 * * * /apps/bin/dbcheck.sh
       上面的例子表示在每天18:00至23:00之間每隔30分鐘運行/apps/bin目錄下的dbcheck.sh。
       0 23 * * 6 /apps/bin/qtrend.sh
       上面的例子表示每星期六的11:00pm運行/apps/bin目錄下的qtrend.sh。
   
       -u 使用者名稱。
       -e 編輯crontab檔案。
       -l 列出crontab檔案中的內容。
       -r 刪除crontab檔案。
       系統將在/var/spool/cron/目錄下自動儲存名為<username>的cron執行指令碼.
       cron是定時完成的任務, 在任務啟動時,一般來講都是重新啟動一個新的SHELL, 因此當需要使用登入設定檔的資訊,特別是環境變數時,是非常麻煩的.
       一般這種問題的使用方法如下:
       0 2 * * * ( su - USERNAME -c "export LANG=en_US; /home/oracle/yb2.5.1/apps/admin/1.sh"; ) > /tmp/1.log 2>&1
       如果打算執行多條語句, 他們之間應使用分號進行分割. 注: 以上語句必須在root的帳戶下執行.
   
3.   nohup:
       nohup command &
       如果你正在運行一個進程,而且你覺得在退出帳戶時該進程還不會結束,那麼可以使用nohup命令。該命令可以在你退出帳戶之後繼續運行相應的進程。
       Nohup就是不掛起的意思(no hang up)。
   
4.   cut:
       1) cut一般格式為:cut [options] file1 file2
       -c list 指定剪下字元數。
       -f field 指定剪下域數。
       -d 指定與空格和tab鍵不同的域分隔字元。
       -c 用來指定剪下範圍,如下所示:
       -c1,5-7 剪下第1個字元,然後是第5到第7個字元。
       -c2- 剪下第2個到最後一個字元
       -c-5 剪下最開始的到第5個字元
       -c1-50 剪下前50個字元。
       -f 格式與-c相同。
       -f1,5 剪下第1域,第5域。
       -f1,10-12 剪下第1域,第10域到第12域。
       2) 使用方式:
       cut -d: -f3 cut_test.txt (基於":"作為分隔字元,同時返回field 3中的資料) *field從0開始計算。
       cut -d: -f1,3 cut_test.txt (基於":"作為分隔字元,同時返回field 1和3中的資料)
       cut -d: -c1,5-10 cut_test.txt(返回第1個和第5-10個字元)
   
5.   sort:    
       1) 對檔案內容進行排序,預設分割符為空白格,如果自訂需要使用-t選擇,如-t:
       2) 使用分隔字元分割後,第一個field為0,awk中為1
       3) 具體用法如下:
       sort -t: sort_test.txt(預設基於第一個field進行排序,field之間的分隔字元為":")
       sort -t: -r sort_test.txt(預設基於第一個field進行倒序排序,field之間的分隔字元為":")
       sort -t: +1 sort_test.txt(基於第二個field進行排序,field之間的分隔字元為":")
       sort +3n sort_test.txt(基於第三個field進行排序,其中n選項提示是進行"數值型"排序)
       sort -u  sort_test.txt(去除檔案中重複的行,同時基於整行進行排序)
       sort -o output_file -t: +1.2[n] sort_text.txt(基於第二個field,同時從該field的第二個字元開始,這裡n的作用也是"數值型"排序,並將結果輸出到output_file中)
       sort -t: -m +0 filename1 filename2(合并兩個檔案之後在基於第一個field排序)

6.   pgrep和pkill:

       尋找和殺死指定的進程, 他們的選項和參數完全相同, 這裡只是介紹pgrep
       /> sleep 100&
       1000
       /> sleep 100&
       1001
   
       /> pgrep sleep
       1000
       1001
       /> pgrep -d: sleep    # -d定義多個進程之間的分隔字元, 如果不定義則使用newline
       1000:1001
       /> pgrep -n sleep    # -n表示如果該程式有多個進程,尋找最新的.
       1001
       /> pgrep -o  sleep    # -o表示如果該程式有多個進程,尋找最老的.
       1000   
       /> pgrep -G root,oracle sleep # -G 表示進程的group id在-G後面的組列表中的進程會被考慮
       1000
       1001
       /> pgrep -u root,oracle sleep # -u 表示進程的effetive user id在-u後面的組列表中的進程會被考慮
       1000
       1001
       /> pgrep -U root,oracle sleep # -U 表示進程的real user id在-u後面的組列表中的進程會被考慮
       1000
       1001
       /> pgrep -x sleep # -x 表示進程的名字必須完全符合, 以上的例子均可以部分匹配
       1000
       1001
       /> pgrep -x sle
   
       /> pgrep -l sleep # -l 將不僅列印pid,也列印進程名
       1000 sleep
       1001 sleep
       /> pgrep -lf sleep # -f 一般與-l合用, 將列印進程的參數
       1000 sleep 100
       1001 sleep 100
   
       /> pgrep -f sleep -d, | xargs ps -fp
       UID        PID  PPID  C STIME TTY          TIME CMD
       root      1000  2138  0 06:11 pts/5    00:00:00 sleep 1000
       root      1001  2138  0 06:11 pts/5    00:00:00 sleep 1000

7.   fuser:
       fuser -m /dev    # 列出所有和/dev裝置有染的進程pid.
       fuser testfile    # 列出和testfile有染的進程pid
       fuser -u testfile # 列出和testfile有染的進程pid和userid
       fuser -k testfile # 殺死和testfile有染的進程pid

8.   mount:

   如何在unix下面mount一個windows下面的共用目錄
       mount -t smbfs -o username=USERNAME,password=PASSWORD //windowsIp/pub_directory  /mountpoint  
       /> mkdir -p /mnt/win32
       /> mount -o username=administrator,password=1234 //10.1.4.103/Mine /mnt/win32
       /> umount /mnt/win32        # 卸載該mount.

9.   netstat:

   -a 表示顯示所有的狀態
   -l 則只是顯示listen狀態的,預設只是顯示connected
   -p 顯示應用程式的名字
   -n 顯示ip、port和user等資訊
   -t 只顯示TCP的串連
   /> netstat -apnt
   /> netstat -lpnt      #如果只是顯示監聽連接埠的狀態,可以使用該命令

10. tune2fs:

   調整ext2/ext3檔案系統特性的工具

   -l 查看檔案系統資訊
   /> tune2fs -l /dev/sda1  #將會列出所有和該磁碟分割相關的資料資訊,如Inode等。
   /> tune2fs -l /dev/sda1 | grep -i "block size"      #查看當前檔案系統的塊兒尺寸
   /> tune2fs -l /dev/sdb1 |grep -i "mount count"   #查看 mount count 掛載次數

11.  開啟或關閉Linux(iptables)防火牆
      重啟後永久性生效:
      /> chkconfig iptables on         #開啟
      /> chkconfig iptables off         #關閉
    
      即時生效,重啟後還原:
      /> service iptables start        #開啟
      /> service iptables stop         #關閉  


12.  tar 分卷壓縮和合并
      以每卷500M為例
      />tar cvzpf - somedir | split -d -b 500m    #tar分卷壓縮
      />cat x* > mytarfile.tar.gz                      #tar多卷合并


13.  把man或info的資訊存為文字檔
      /> man tcsh | col -b > tcsh.txt
      /> info tcsh -o tcsh.txt -s

14.  查看正在執行進程的線程數
      />ps -eo "args nlwp pid pcpu" 

 

15.  使用md5sum計算檔案的md5
      /> md5sum test.c
      07af691360175a6808567e2b08a11724  test.c

      /> md5sum test.c > hashfile
      /> md5sum –c hashfile     # 驗證hashfile中包含的md5值和對應的檔案,在執行該命令時是否仍然匹配, 如果此時test.c被修改了,該命令將返回不匹配的警告.

 

16.  在ps命令中顯示進程的完整的命令列參數
      />ps auwwx

17. chkconfig:

    1). 編輯chkconfig操作的Shell檔案頭。
    #!/bin/bash
    #
    # chkconfig: 2345 20 80
    # description: Starts and stops the Redis Server
    這個注釋頭非常重要,否則chkconfig命令無法識別。其中2345表示init啟動的層級,即在2、3、4、5這四個層級中均啟動該服務。20表示該指令碼啟動的優先順序,80表示停止的優先順序。這些可以在chkconfig的manpage中找到更為詳細的說明。
    
    2). 編譯Shell檔案的內容:
    case "$1" in
    start)
        #TODO: 執行服務程式的啟動邏輯。
        ;;
    stop)
        #TODO: 執行服務程式的停止邏輯。
        ;;
    restart)
        ;;
    reload)
        ;;
    condrestart)
        ;;
    status)
        ;;
    上面列出的case條件必不可少,如果確實沒有就當做預留位置放在那裡即可,如上例。
    
    3). 添加和刪除服務程式:
    #--add選項表示添加新的服務程式。
    /> chkconfig --add redis_6379
    #查看是否刪除或添加成功
    /> chkconfig | grep redis_6379
    redis_6379      0:off   1:off   2:on    3:on    4:on    5:on    6:off
    #--del選項表示刪除已有的服務程式。
    /> chkconfig --del redis_6379

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.