1. 程式人生 > >sort命令、linux計劃任務

sort命令、linux計劃任務

一、sort的工作原理
sort將檔案的每一行作為一個單位,相互比較,比較原則是從首字元向後,依次按ASCII碼值進行比較,最後將他們按升序輸出。
引數 作用
-n 數值排序
-r 降序
-t 欄位分隔符
-k 以哪個欄位為關鍵字進行排序
-u 排序後相同的行只顯示一次
-f 排序時忽略字元大小寫
1.sort -u 選項(輸出行中去除重複行)
cat a.txt
在這裡插入圖片描述
sort -u a.txt
在這裡插入圖片描述
pig的重複行被去除了
cat a.txt
在這裡插入圖片描述
再檢視檔案會發現重複行還在,說明-u引數不會對檔案本身做修改
2.sort -r (降序)
因為sort預設的排序方式是升序,想執行降序操作用-r
在這裡插入圖片描述


在這裡插入圖片描述
在sort 命令中排序程式將這些數字按字元來排序了,排序程式會先比較1和3,顯然1小,所以就將10放在3前面
在這裡插入圖片描述
-r引數將他們降序排列
3.sort -n (按數值排序)
為了解決將數值當字元處理,就使用-n 引數,告訴sort要以數值排序
在這裡插入圖片描述
在這裡插入圖片描述
sort-nr 表示以數值降序
4.sort -o 引數
由於sort預設是把結果輸出到標準輸出,所以需要用重定向才能將結果寫入檔案,形如sort filename > newfile。
但是,如果想把排序結果輸出到原檔案中,用重定向可就不行了。
在這裡插入圖片描述
用重定向會把num清除
這時候sort-o 引數就派上用場了
在這裡插入圖片描述
5. sort的-t選項和-k選項
-t後跟間隔符
-k 是以列排序
(1) 以第二列排序
在這裡插入圖片描述

因為有第二列相同的,sort預設按第一列的字元排序
(2)注意:sort 設定域的優先順序,先以第二個域進行排序,如果相同按照第三個域進行排序
在這裡插入圖片描述
(3 ) 從第一行的第二個字母開始進行排序
在這裡插入圖片描述
-k1.2 表示第一個域的第二個字元到 到本域的最後一個字元為止的字串進行排序。-k1.2,1.2表示用第一個域的第二個字母排序 。如果-k1,2省略了後面的2則就變成了第一個域到最後一個域進行排序
如果第一個域第二個字母相同,預設第二個域升序排列
6.sort -k -u 選項
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
當以第二個域進行數值排序時,然後加-u後,dog和pig就被刪除了!原來-u只識別用-k設定的域,發現相同,就將後續相同的行都刪除。
在這裡插入圖片描述

去除第一個域相同的行
在這裡插入圖片描述
去除第一個域的第一個字母相同的行
在這裡插入圖片描述
這裡設定了兩層排序優先順序的情況下,使用-u就沒有刪除任何行。原來-u是會權衡所有-k選項,將都相同的才會刪除,只要其中有一級不同都不會輕易刪除的
二、linux計劃任務
1.crond 是linux用來定期執行程式的命令。當安裝完成作業系統之後,預設便會啟動此任務排程命令。crond命令每分鍾會定期檢查是否有要執行的工作,如果有要執行的工作便會自動執行該工作。可以用以下的方法啟動、關閉這個服務:

/sbin/service crond start //啟動服務

/sbin/service crond stop //關閉服務

/sbin/service crond restart //重啟服務

/sbin/service crond reload //重新載入配置

2.crontab命令
引數 描述
-u user 用來設定某個使用者的crontab服務
-l 顯示某個使用者的crontab檔案內容,如果不指定使用者,則表示顯示當前使用者的crontab檔案內容
-e 編輯某個使用者的crontab檔案內容。如果不指定使用者,則表示編輯當前使用者的crontab檔案
-i 在刪除使用者的crontab檔案時給確認提示
-r 從/var/spool/cron目錄中刪除某個使用者的crontab檔案,如果不指定使用者,則預設刪除當前使用者的crontab檔案
在這裡插入圖片描述
第一個 * 代表分鐘 可以是從0到59之間的任何整數。
第二個 * 代表小時 可以是從0到23之間的任何整數
第三個* 代表日 可以是從1到31之間的任何整數。
第四個* 代表月 可以是從1到12之間的任何整數。
第五個代表星期 可以是從0到7之間的任何整數,這裡的0或7代表星期日
command:要執行的命令,可以是系統命令,也可以是自己編寫的指令碼檔案。

星號(*):代表所有可能的值,例如month欄位如果是星號,則表示在滿足其它欄位的制約條件後每月都執行該命令操作。

逗號(,):可以用逗號隔開的值指定一個列表範圍,例如,“1,2,5,7,8,9”

中槓(-):可以用整數之間的中槓表示一個整數範圍,例如“2-6”表示“2,3,4,5,6”

正斜線(/):可以用正斜線指定時間的間隔頻率,例如“0-23/2”表示每兩小時執行一次。同時正斜線可以和星號一起使用,例如*/10,如果用在minute欄位,表示每十分鐘執行一次。
練習

  1. 每4小時執行一次對/etc目錄的備份,備份至/backup目錄中,儲存檔名格式為bak_etc_2018-01-01
    touch t1.sh
    vi t1.sh
    #!/bin/bash
    tar -czf /baupup/bak_-date +%F /etc
    crontab -e
    **/4 * * * sh t1.sh
    ll /backup/
    在這裡插入圖片描述
    在這裡插入圖片描述
    在這裡插入圖片描述
  2. 每週2,4,6備份/var/log/messages檔案至/backup/messages_logs/目錄中,儲存檔名格式為
    bak_msg_2018-01-01
    在這裡插入圖片描述
    在這裡插入圖片描述
    在這裡插入圖片描述
  3. 每兩小時取當前系統/proc/meminfo檔案中的所有以S開頭的資訊至/backup/memory檔案中
    在這裡插入圖片描述
    在這裡插入圖片描述
    在這裡插入圖片描述
  4. 工作日的時間內,每兩小時執行一次echo “hello work”
    在這裡插入圖片描述
    在這裡插入圖片描述