萬字長文總結的Linux從入門到精通的必會知識!

你知道的越多,不知道的就越多,業餘的像一棵小草!

你來,我們一起精進!你不來,我和你的競爭對手一起精進!

編輯:業餘草

來源:juejin.im/post/5ee444ea6fb9a047ca10f796

推薦:https://www.xttblog.com/?p=5035

❝❝

Linux其實是前後端都必會的技能,前端目前很多童鞋都再走大前端路線,後端就更不用說了,小編給大家盤了上萬字(由於字數限制本文已刪減)關於Linux的實戰基礎命令,可以說這些都是必須掌握的,當然這些也是不夠的,後面小編還會繼續更新,大家可以關注我的動態,盤起來,這波可以收藏起來了。

❞❞


ls

最高使用頻率的命令之一。

命令格式:  ls [OPTION]... [FILE]... 單純的輸入:

[root@iz2ze76ybn73dvwmdij06zz /]# ls
bin   dev  home  lib64       media  opt    proc  run   srv  tmp  var
boot  etc  lib   lost+found  mnt    patch  root  sbin  sys  usr  www
加 option -l 它展示了權限,屬主,屬組,大小,時間,文件名稱
[root@iz2ze76ybn73dvwmdij06zz /]# ls -l
總用量 68
lrwxrwxrwx    1 root root     7 8月  26 22:36 bin -> usr/bin
dr-xr-xr-x.   5 root root  4096 8月  26 22:39 boot
drwxr-xr-x   19 root root  2960 4月  11 12:59 dev
drwxr-xr-x.  81 root root  4096 9月   5 17:09 etc
drwxr-xr-x.   2 root root  4096 4月  11 12:59 home
lrwxrwxrwx    1 root root     7 8月  26 22:36 lib -> usr/lib
lrwxrwxrwx    1 root root     9 8月  26 22:36 lib64 -> usr/lib64
drwx------.   2 root root 16384 10月 15 2017 lost+found
drwxr-xr-x.   2 root root  4096 4月  11 12:59 media
drwxr-xr-x.   2 root root  4096 4月  11 12:59 mnt
drwxr-xr-x.   3 root root  4096 8月  26 22:40 opt
drwxr-xr-x    2 root root  4096 8月  26 23:00 patch
dr-xr-xr-x  110 root root     0 4月  11 12:59 proc
dr-xr-x---.  12 root root  4096 9月  11 20:59 root
drwxr-xr-x   26 root root   760 9月   7 21:50 run
lrwxrwxrwx    1 root root     8 8月  26 22:36 sbin -> usr/sbin
drwxr-xr-x.   2 root root  4096 4月  11 12:59 srv
dr-xr-xr-x   13 root root     0 4月  11 12:59 sys
drwxrwxrwt.   9 root root  4096 9月  15 03:19 tmp
drwxr-xr-x.  13 root root  4096 8月  26 22:36 usr
drwxr-xr-x.  19 root root  4096 8月  26 22:55 var
drwxr-xr-x    6 root root  4096 8月  26 22:39 www
ls -a (all)   linux  '.'(點)開頭的文件默認是隱藏的,-a可以查詢所有的文件。
[root@iz2ze76ybn73dvwmdij06zz /]# ls -a
.             bin   etc   lib64       mnt    .pearrc  run   sys    usr
..            boot  home  lost+found  opt    proc     sbin  .test  var
.autorelabel  dev   lib   media       patch  root     srv   tmp    www
ls -F 以"/"結尾的方式展示文件夾。
[root@iz2ze76ybn73dvwmdij06zz /]# ls -F
bin@   dev/  home/  lib64@       media/  opt/    proc/  run/   srv/  tmp/  var/
boot/  etc/  lib@   lost+found/  mnt/    patch/  root/  sbin@  sys/  usr/  www/
ls -r 倒敘展示,默認的順序是(a,b,c,d)正序這樣展示
[root@iz2ze76ybn73dvwmdij06zz /]# ls -r
www  usr  sys  sbin  root  patch  mnt    lost+found  lib   etc  boot
var  tmp  srv  run   proc  opt    media  lib64       home  dev  bin
ls -R ()遞歸展示子目錄
[root@iz2ze76ybn73dvwmdij06zz test]# ls -R
.:
data

./data:
img

./data/img:
car  product  user

./data/img/car:

./data/img/product:

./data/img/user:
ls -lS 按照文件大小降序顯示
[root@iz2ze76ybn73dvwmdij06zz /]# ls -lS
總用量 72
drwx------.   2 root root 16384 10月 15 2017 lost+found
dr-xr-xr-x.   5 root root  4096 8月  26 22:39 boot
drwxr-xr-x.  81 root root  4096 9月   5 17:09 etc
drwxr-xr-x.   2 root root  4096 4月  11 12:59 home
drwxr-xr-x.   2 root root  4096 4月  11 12:59 media
drwxr-xr-x.   2 root root  4096 4月  11 12:59 mnt
drwxr-xr-x.   3 root root  4096 8月  26 22:40 opt
drwxr-xr-x    2 root root  4096 8月  26 23:00 patch
dr-xr-x---.  12 root root  4096 9月  15 22:03 root
drwxr-xr-x.   2 root root  4096 4月  11 12:59 srv
drwxr-xr-x    3 root root  4096 9月  15 22:10 test
drwxrwxrwt.   9 root root  4096 9月  15 03:19 tmp
drwxr-xr-x.  13 root root  4096 8月  26 22:36 usr
drwxr-xr-x.  19 root root  4096 8月  26 22:55 var
drwxr-xr-x    6 root root  4096 8月  26 22:39 www
drwxr-xr-x   19 root root  2960 4月  11 12:59 dev
drwxr-xr-x   26 root root   760 9月   7 21:50 run
lrwxrwxrwx    1 root root     9 8月  26 22:36 lib64 -> usr/lib64
lrwxrwxrwx    1 root root     8 8月  26 22:36 sbin -> usr/sbin
lrwxrwxrwx    1 root root     7 8月  26 22:36 bin -> usr/bin
lrwxrwxrwx    1 root root     7 8月  26 22:36 lib -> usr/lib
dr-xr-xr-x  110 root root     0 4月  11 12:59 proc
dr-xr-xr-x   13 root root     0 4月  11 12:59 sys
ls -g 不輸出所有者(屬主)信息
[root@iz2ze76ybn73dvwmdij06zz /]# ls -g
總用量 72
lrwxrwxrwx    1 root     7 8月  26 22:36 bin -> usr/bin
dr-xr-xr-x.   5 root  4096 8月  26 22:39 boot
-rw-r--r--    1 root     0 9月  15 22:20 c
drwxr-xr-x   19 root  2960 4月  11 12:59 dev
drwxr-xr-x.  81 root  4096 9月   5 17:09 etc
drwxr-xr-x.   2 root  4096 4月  11 12:59 home
lrwxrwxrwx    1 root     7 8月  26 22:36 lib -> usr/lib
lrwxrwxrwx    1 root     9 8月  26 22:36 lib64 -> usr/lib64
drwx------.   2 root 16384 10月 15 2017 lost+found
drwxr-xr-x.   2 root  4096 4月  11 12:59 media
drwxr-xr-x.   2 root  4096 4月  11 12:59 mnt
drwxr-xr-x.   3 root  4096 8月  26 22:40 opt
drwxr-xr-x    2 root  4096 8月  26 23:00 patch
dr-xr-xr-x  110 root     0 4月  11 12:59 proc
dr-xr-x---.  12 root  4096 9月  15 22:18 root
drwxr-xr-x   26 root   760 9月   7 21:50 run
lrwxrwxrwx    1 root     8 8月  26 22:36 sbin -> usr/sbin
drwxr-xr-x.   2 root  4096 4月  11 12:59 srv
dr-xr-xr-x   13 root     0 4月  11 12:59 sys
drwxr-xr-x    3 root  4096 9月  15 22:18 test
drwxrwxrwt.   9 root  4096 9月  15 03:19 tmp
drwxr-xr-x.  13 root  4096 8月  26 22:36 usr
drwxr-xr-x.  19 root  4096 8月  26 22:55 var
drwxr-xr-x    6 root  4096 8月  26 22:39 www
ls -lG 隱藏所有組(屬組)信息
[root@iz2ze76ybn73dvwmdij06zz /]# ls -lG
總用量 72
lrwxrwxrwx    1 root     7 8月  26 22:36 bin -> usr/bin
dr-xr-xr-x.   5 root  4096 8月  26 22:39 boot
-rw-r--r--    1 root     0 9月  15 22:20 c
drwxr-xr-x   19 root  2960 4月  11 12:59 dev
drwxr-xr-x.  81 root  4096 9月   5 17:09 etc
drwxr-xr-x.   2 root  4096 4月  11 12:59 home
lrwxrwxrwx    1 root     7 8月  26 22:36 lib -> usr/lib
lrwxrwxrwx    1 root     9 8月  26 22:36 lib64 -> usr/lib64
drwx------.   2 root 16384 10月 15 2017 lost+found
drwxr-xr-x.   2 root  4096 4月  11 12:59 media
drwxr-xr-x.   2 root  4096 4月  11 12:59 mnt
drwxr-xr-x.   3 root  4096 8月  26 22:40 opt
drwxr-xr-x    2 root  4096 8月  26 23:00 patch
dr-xr-xr-x  110 root     0 4月  11 12:59 proc
dr-xr-x---.  12 root  4096 9月  15 22:18 root
drwxr-xr-x   26 root   760 9月   7 21:50 run
lrwxrwxrwx    1 root     8 8月  26 22:36 sbin -> usr/sbin
drwxr-xr-x.   2 root  4096 4月  11 12:59 srv
dr-xr-xr-x   13 root     0 4月  11 12:59 sys
drwxr-xr-x    3 root  4096 9月  15 22:18 test
drwxrwxrwt.   9 root  4096 9月  15 03:19 tmp
drwxr-xr-x.  13 root  4096 8月  26 22:36 usr
drwxr-xr-x.  19 root  4096 8月  26 22:55 var
drwxr-xr-x    6 root  4096 8月  26 22:39 www
10.ls -li 顯示文件的索引號
[root@iz2ze76ybn73dvwmdij06zz /]# ls -li
ls -li 顯示文件的索引號
[root@iz2ze76ybn73dvwmdij06zz /]# ls -li

總用量 72
  7628 lrwxrwxrwx    1 root root     7 8月  26 22:36 bin -> usr/bin
1179650 dr-xr-xr-x.   5 root root  4096 8月  26 22:39 boot
  4923 -rw-r--r--    1 root root     0 9月  15 22:20 c
  1026 drwxr-xr-x   19 root root  2960 4月  11 12:59 dev
917505 drwxr-xr-x.  81 root root  4096 9月   5 17:09 etc
655362 drwxr-xr-x.   2 root root  4096 4月  11 12:59 home
    17 lrwxrwxrwx    1 root root     7 8月  26 22:36 lib -> usr/lib
    13 lrwxrwxrwx    1 root root     9 8月  26 22:36 lib64 -> usr/lib64
    11 drwx------.   2 root root 16384 10月 15 2017 lost+found
786434 drwxr-xr-x.   2 root root  4096 4月  11 12:59 media
131074 drwxr-xr-x.   2 root root  4096 4月  11 12:59 mnt
393219 drwxr-xr-x.   3 root root  4096 8月  26 22:40 opt
1966081 drwxr-xr-x    2 root root  4096 8月  26 23:00 patch
     1 dr-xr-xr-x  110 root root     0 4月  11 12:59 proc
131073 dr-xr-x---.  12 root root  4096 9月  15 22:18 root
   218 drwxr-xr-x   26 root root   760 9月   7 21:50 run
    15 lrwxrwxrwx    1 root root     8 8月  26 22:36 sbin -> usr/sbin
393220 drwxr-xr-x.   2 root root  4096 4月  11 12:59 srv
     1 dr-xr-xr-x   13 root root     0 4月  11 12:59 sys
2097153 drwxr-xr-x    3 root root  4096 9月  15 22:18 test
393217 drwxrwxrwt.   9 root root  4096 9月  15 03:19 tmp
1048578 drwxr-xr-x.  13 root root  4096 8月  26 22:36 usr
262145 drwxr-xr-x.  19 root root  4096 8月  26 22:55 var
1441793 drwxr-xr-x    6 root root  4096 8月  26 22:39 www
ls -lt 按照修改時間排序(倒序)依次創建文件 a b
[root@iz2ze76ybn73dvwmdij06zz test]# ls -lt
總用量 0
-rw-r--r-- 1 root root 0 9月  15 22:18 b
-rw-r--r-- 1 root root 0 9月  15 22:18 a
ls -version
[root@iz2ze76ybn73dvwmdij06zz test]# ls --version
ls (GNU coreutils) 8.22
Copyright (C) 2013 Free Software Foundation, Inc.
許可證:GPLv3+:GNU 通用公共許可證第3 版或更新版本<http://gnu.org/licenses/gpl.html>。
本軟件是自由軟件:您可以自由修改和重新發布它。
在法律範圍內沒有其他保證。

由Richard M. Stallman 和David MacKenzie 編寫。

cat

cat,又是一個相對高頻率的命令。比較官方的說法是命令用於鏈接文件並打印到標準輸出設備上。這個文本輸出命令可以用來查看文件內容,創建內容等,下面我們介紹幾個比較實用的用法。命令格式 : cat [選項]... [文件]...

cat -n 查看並顯示行號
[root@iz2ze76ybn73dvwmdij06zz linuxdemo]# cat -n a
    1  this is a txt
    2  hello every body
    3  hello world
    4  hahaha
cat 創建一個空文件 b
[root@iz2ze76ybn73dvwmdij06zz linuxdemo]# cat >b <<EOF
> EOF
[root@iz2ze76ybn73dvwmdij06zz linuxdemo]# ls
a  b
cat 清空文件內容
[root@iz2ze76ybn73dvwmdij06zz linuxdemo]# cat >a<<EOF
> EOF
[root@iz2ze76ybn73dvwmdij06zz linuxdemo]# cat a
cat 寫入內容(如果原來有內容將被覆蓋)
[root@iz2ze76ybn73dvwmdij06zz linuxdemo]# cat >a<<EOF
> today is a good day
> because off work
> hahaha
> EOF
[root@iz2ze76ybn73dvwmdij06zz linuxdemo]# cat a
today is a good day
because off work
hahaha
cat 同時顯示多個文件內容( b中寫出happy)
[root@iz2ze76ybn73dvwmdij06zz linuxdemo]# cat a > b
[root@iz2ze76ybn73dvwmdij06zz linuxdemo]# cat b
today is a good day
because off work
hahaha
追加內容 可以看到用了連個>以後內容是追加的
[root@iz2ze76ybn73dvwmdij06zz linuxdemo]# cat a >> b
[root@iz2ze76ybn73dvwmdij06zz linuxdemo]# cat b
today is a good day
because off work
hahaha
today is a good day
because off work
hahaha
cat --help (如想學習更多,可以自己動手嘗試)
[root@iz2ze76ybn73dvwmdij06zz linuxdemo]# cat --help
用法:cat [選項]... [文件]...
將[文件]或標準輸入組合輸出到標準輸出。

 -A, --show-all           等於-vET
 -b, --number-nonblank    對非空輸出行編號
 -e                       等於-vE
 -E, --show-ends          在每行結束處顯示"$"
 -n, --number             對輸出的所有行編號
 -s, --squeeze-blank      不輸出多行空行
 -t                       與-vT 等價
 -T, --show-tabs          將跳格字符顯示爲^I
 -u                       (被忽略)
 -v, --show-nonprinting   使用^ 和M- 引用,除了LFD和 TAB 之外
     --help    顯示此幫助信息並退出
     --version    顯示版本信息並退出

如果沒有指定文件,或者文件爲"-",則從標準輸入讀取。

示例:
 cat f - g  先輸出f 的內容,然後輸出標準輸入的內容,最後輸出g 的內容。
 cat        將標準輸入的內容複製到標準輸出。

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
請向<http://translationproject.org/team/zh_CN.html> 報告cat 的翻譯錯誤
要獲取完整文檔,請運行:info coreutils 'cat invocation'


用戶權限

大家都知道linux是一個多任務,多用戶的操作系統。多個用戶可以在同一時間操作系統執行不同的任務,一個用戶也可以多個人登陸操作。一般來說root的權限最大,我們經常使用的數據庫一般會用一個mysql的用戶,網頁相關的我們可能用一個www的賬號,大家都是知道刪除跑路的故事,因此有一些操作權限是要交給一些專人管理的。爲了系統的學習,我覺得有必要了解一下它的基本知識。

linux角色分類

超級用戶:root (user id --UID) 0 最高的管理權限。

普通用戶:

    系統用戶 UID:1-999(rhel7  centos7) 1-499(rhel6)
    
    本地用戶 UID:1000+(rhel7 centos7)  500+(rhel6)

UID:用戶身份標示,唯一標示。

linux組分類

組:

組分類:

根據賬號的功能分類:

           超級用戶組:root GID:0
           普通用戶組 :
                               系統用戶組: GID 1---999
                                本地用戶組: GID 1000+
linux用戶和組的關係

一個用戶屬於一個組,也可以屬於多個組,多個用戶可以在一個組,可以在多個組。

linux用戶和組的相關配置文件

1./etc/passwd:用戶 and 屬性信息。

2./etc/group: 組 and 屬性信息。

3./etc/shadow: 用戶密碼 and 屬性信息。

4./etc/gshadow:組密碼 and 屬性信息。

5./etc/default/useradd: 設置添加用戶規則文件。

6./etc/login.defs:設置用戶賬號限制。

linux用戶信息文件

用戶管理中最重要的一個文件,這個文件是對所有用戶開放的,每一行存一個用戶的信息,每個屬性之間用冒號分割。

cat /etc/passwd
root:x:0:0:root:/root:/bin/zsh
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

舉例: root:x:0:0:root:/root:/bin/zsh

1.登陸用戶名:root

2.用戶密碼佔位符:x

3.用戶UID:0

4.用戶組GID:0

5.對用戶賬戶的描述:root

6.用戶家目錄位置:/root

7.用戶默認的shell:/bin/zsh (默認是/bin/bash)

linux密碼信息文件

該文件只有root用戶有讀權限,每一行存一個用戶的記錄,每個屬性用冒號分割。

cat /etc/shadow
root:$6$LxE7qiaZ$ZZXf/aCO1Zqs1oOS9WDutUk9rFOq4MOoSG9IeXq2f5sduGrgfYvzOWHZmJZFGC.0Of1DjCna0M.oQZTY8r00/.:17769:0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::

舉例: bin:*:17110:0:99999:7::: 1.登錄用戶名: bin

2.加密的密碼:  * 號代表密碼被鎖定

3.最近更改密碼的日期: 17110代表到1970-1-1密碼不可改的天數

4.密碼修改期限:99999 代表永遠不用改,如果是其他數字則表示從1970-1-1內的多少天必須修改密碼。

5.更改密碼最大有效天數:  代表密碼保持有效的最大天數。

6.密碼過期警告:密碼到正式失效前有多少天(-1,永遠不提示)

7.密碼過期後多少天禁用用戶:可登陸,單不能操作。

8.用戶被禁用日期:多少天后賬號過期,不能登陸。

9.保留參數

linux組信息文件

用戶組的組信息存放在這,一行存一個組記錄,屬性用冒號分割。

➜  ~ cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:

舉例: root:x:0:

1.組名:root

2.組密碼佔位符: x

3.組GID: 0


安裝包管理基礎

相信大部分人應該和我一樣,最開始都是用 windows上手的,那在windows平臺的安裝包就再熟悉不過了,比如.exe,是不是太常見了,一般在windows安裝過mysql的,相信.msi也是見過的。大多數的服務器都是linux的,因此我們來學習一下linux的安裝包基礎知識。不同發行版的系統用的工具也是不相同的。目前大多數的公司服務器是基於centos,因此後續會以centos爲例比較多。

基於redhat

yum

zypper

rpm

基於centos

yum

rpm

rpm

全稱: Redhat Package Manager

下載網址: http://rpmfind.net

先來看下包的命名格式,以  rpm-5.4.10-10.i586.rpm 爲例。

rpm : 軟件包名

5 : 主版本號

4 : 次版本號

10 : 修訂號

i586 : cpu架構平臺

rpm : 包後綴

yum

解決軟件包安裝的依賴關係問題,自動下載軟件包,基於c/s架構。repo文件是yum源的配置文件,改文件定義軟件倉庫的信息。爲什麼說它是c/s架構,原來rpm軟件的頭(header)裏會記錄改軟件的依賴信息,因此可以對頭內容進行分析,就可以知道其相關的依賴,並將這些信息記錄下來。那麼服務端是提供這些rpm的軟件包,然後分析包的依賴關係,將記錄存在服務器某目錄上。客戶端在安裝軟件時下載其記錄依賴關係文件並分析,最後一次性下載。


進程管理基礎

一般來說程序分爲兩類,一種是系統程序,一種是應用程序。一個運行了程序,就可以說是一個進程了,進程是佔用內存空間的,而當你殺掉進城時,資源也會隨之釋放。

進程的類型

用戶進程:用戶自己的程序,用戶可以控制他的開啓和關閉。

交互進程:   與用戶進行交互操作的進程。

批處理進程:是一個進程集合,按順序啓動其他進程。

守護進程:一直運行的進程.crond。

進程的屬性

進程ID : (pid) 唯一的數字標示,區分不同的進程。

進程有父進程和子進程。

啓動進程的用戶ID(uid)和用戶的屬組。

進程的三種狀態:

  • 運行 -- R

  • 休眠 -- S

  • 殭屍 -- Z

進程的優先級: 取值範圍(-20,19) ,數值越小優先級越大,默認爲0。

進程鏈接的終端。

進程佔用資源情況。

父子進程的關係

父子進程的關係,父親管理兒子。父進程終止時子進程一定終止,而子進程終止時父進程不一定終止。

進程管理工具
    ps:   查看進程。
    top:  可以查看進程的動態信息。
    kill:  殺進程。
    pstree:  查看進程樹。
    pgrep:  搜進程。
    lsof:  查看進程打開的文件。


進程管理實踐

ps

靜態的顯示當前進程的信息 。

命令:  ps

語法:  ps 參數

常用參數:

               a      顯示所有用戶的進程
               r       顯示運行中的進程
               l        長格式輸出
               u        按用戶名和啓動時間的順序來顯示進程
               f         用樹形格式來顯示進程
               x        顯示沒有控制終端的進程

操作: BSD格式來顯示進程

➜  ~ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  43364  3596 ?        Ss   11月03   0:01 /usr/lib/syst
root         2  0.0  0.0      0     0 ?        S    11月03   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    11月03   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   11月03   0:00 [kworker/0:0H
root         7  0.0  0.0      0     0 ?        S    11月03   0:00 [migration/0]
root         8  0.0  0.0      0     0 ?        S    11月03   0:00 [rcu_bh]
root         9  0.0  0.0      0     0 ?        S    11月03   0:05 [rcu_sched]
root        10  0.0  0.0      0     0 ?        S    11月03   0:00 [watchdog/0]
root        11  0.0  0.0      0     0 ?        S    11月03   0:00 [watchdog/1]
root        12  0.0  0.0      0     0 ?        S    11月03   0:00 [migration/1]
root        13  0.0  0.0      0     0 ?        S    11月03   0:00 [ksoftirqd/1]
root        15  0.0  0.0      0     0 ?        S<   11月03   0:00 [kworker/1:0H

標準格式顯示進程unix風格

 ~ ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 11月03 ?      00:00:01 /usr/lib/systemd/systemd --syste
root         2     0  0 11月03 ?      00:00:00 [kthreadd]
root         3     2  0 11月03 ?      00:00:00 [ksoftirqd/0]
root         5     2  0 11月03 ?      00:00:00 [kworker/0:0H]
root         7     2  0 11月03 ?      00:00:00 [migration/0]
root         8     2  0 11月03 ?      00:00:00 [rcu_bh]
root         9     2  0 11月03 ?      00:00:05 [rcu_sched]
root        10     2  0 11月03 ?      00:00:00 [watchdog/0]
root        11     2  0 11月03 ?      00:00:00 [watchdog/1]
root        12     2  0 11月03 ?      00:00:00 [migration/1]
root        13     2  0 11月03 ?      00:00:00 [ksoftirqd/1]
root        15     2  0 11月03 ?      00:00:00 [kworker/1:0H]
root        17     2  0 11月03 ?      00:00:00 [kdevtmpfs]
root        18     2  0 11月03 ?      00:00:00 [netns]
root        19     2  0 11月03 ?      00:00:00 [khungtaskd]
root        20     2  0 11月03 ?      00:00:00 [writeback]
root        21     2  0 11月03 ?      00:00:00 [kintegrityd]
屬性詳解:

USER:    進程的屬主

PID:    進程的ID

%CPU:   進程佔cpu百分比

%MEM:   進程佔內存的百分比

VSZ:    進程佔用虛擬內存大小

RSS:    固定內存使用數量

STAT     進程狀態

       R    正在運行可中在隊列中可過行的;
 S    處於休眠狀態;
   
   T    停止或被追蹤;
   
   Z    殭屍進程;
   
   N    優先級較低的進程
   
   L    有些頁被鎖進內存;
   
   s    進程的領導者(在它之下有子進程)

START   啓動進程的時間;

TIME  進程消耗CPU的時間;

COMMAND 命令的名稱和參數;

按照指定屬性排序:

按照cpu從小到大排序。

➜  ~ ps aux --sort %cpu
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  43364  3596 ?        Ss   11月03   0:01 /usr/lib/syst
root         2  0.0  0.0      0     0 ?        S    11月03   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    11月03   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   11月03   0:00 [kworker/0:0H
root         7  0.0  0.0      0     0 ?        S    11月03   0:00 [migration/0]
root         8  0.0  0.0      0     0 ?        S    11月03   0:00 [rcu_bh]
root         9  0.0  0.0      0     0 ?        S    11月03   0:05 [rcu_sched]
root        10  0.0  0.0      0     0 ?        S    11月03   0:00 [watchdog/0]
root        11  0.0  0.0      0     0 ?        S    11月03   0:00 [watchdog/1]

按照cpu從大到小排序。

➜  ~ ps aux --sort -%cpu
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     21342  0.3  0.4 137184 17112 ?        Ssl  03:24   1:16 /usr/local/aegi
root         1  0.0  0.0  43364  3596 ?        Ss   11月03   0:01 /usr/lib/syst
root         2  0.0  0.0      0     0 ?        S    11月03   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    11月03   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   11月03   0:00 [kworker/0:0H
root         7  0.0  0.0      0     0 ?        S    11月03   0:00 [migration/0]
root         8  0.0  0.0      0     0 ?        S    11月03   0:00 [rcu_bh]
root         9  0.0  0.0      0     0 ?        S    11月03   0:05 [rcu_sched]
root        10  0.0  0.0      0     0 ?        S    11月03   0:00 [watchdog/0]
root        11  0.0  0.0      0     0 ?        S    11月03   0:00 [watchdog/1]
root        12  0.0  0.0      0     0 ?        S    11月03   0:00 [migration/1]
root        13  0.0  0.0      0     0 ?        S    11月03   0:00 [ksoftirqd/1]
top

與ps相反的是top命令可以查看進程的動態信息。

命令:  top

語法:   top 參數

常用參數:

操作:

➜  ~ top
top - 11:38:42 up 13:15,  2 users,  load average: 0.01, 0.03, 0.05
Tasks:  98 total,   1 running,  97 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.2 us,  0.0 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3881688 total,   229264 free,   543932 used,  3108492 buff/cache
KiB Swap:  1049596 total,  1049596 free,        0 used.  3026944 avail Mem

 PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
   1 root      20   0   43364   3596   2340 S   0.0  0.1   0:01.79 systemd
   2 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kthreadd
   3 root      20   0       0      0      0 S   0.0  0.0   0:00.14 ksoftirqd/0
   5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:+
   7 root      rt   0       0      0      0 S   0.0  0.0   0:00.33 migration/0
   8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh
   9 root      20   0       0      0      0 S   0.0  0.0   0:05.73 rcu_sched
屬性解釋:

前五行是數據的整理統計信息。

第一行:

     11:38:42     當前時間
     
      up 13:15     系統運行時間,格式爲時:分
      
      2 user         當前登陸用戶數量
      
      load average: 0.01, 0.03, 0.05  系統負載,任務隊列平均長度 1分鐘,5分鐘,15分鐘前到現在的平均值。

第二三行:

98 total  進程總數量
 1 running 正在運行的進程數量
 97 sleeping 睡眠的進程數量
 0 stopped  停止的進程數量
 0 zombie   殭屍進程數量
 %Cpu(s):
 0.2 us 系統用戶進程使用cpu百分比
 0.0 sy 內核進程佔用cpu百分比
 0.0 ni 用戶進程空間內改變過優先級的進程佔用cpu百分比
     99.8 id 空閒cpu百分比
       0.0 wa 等待輸入輸出的cpu時間百分比
       0.0 hi   硬件cpu中斷佔用百分比
       0.0  si   軟中斷佔用百分比
       0.0  st  虛擬機佔用百分比

第四五行:

Mem :  (單位K)

3881688 total  物理內存總量
229264 free    空閒內存總量
543932 used    使用的物理內存總量
3108492 buff/cache 內核緩存的內存量

Swap: (單位K)

 1049596 total      交換區總量
 1049596 free       空閒交換區總量
 0 used             使用的交換區總量
 3026944 avail Mem  可利用的內存量

標題行:

PID:  進程id

USER: 進程所有者用戶名

PR:   優先級

NI:   進程優先級,nice值,負值 -> 高優先級,正值 -> 低優先級

VIRT: 虛擬內存總量 virt=swap + res

RES:  實際使用內存大小

SHR:  共享內存大小

S:    進程狀態

   d: 不可中斷的睡眠狀態
   r: 運行
   s: 睡眠
   t: 跟蹤
   z: 殭屍進程

%CPU: 上次更新到現在cpu時間佔用百分比

%MEM: 進程使用物理內存百分比

TIME+: 進程使用cpu的時間總計,單位 1/100秒

COMMAND: 命令行

kill

命令: kill

語法:

      kill [-s signal|-p] [-q sigval] [-a] [--] pid...
      kill -l [signal]

常用參數:

     -l 列出所有信號名稱
     -s 指定發送信號(默認)
     -u 指定用戶

操作: 列出所有信號名稱

➜  ~ kill -l
HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS

強制終止

➜  ~ kill -9 23423
終止
➜  ~ kill -15 22323

殺死指定用戶的所有進程

➜  ~ kill -u superh
proc目錄

這個目錄中有內核,進程運行狀態的信息。

➜  /proc ls
1      21320  21628  240   392   7          diskstats    loadavg       swaps
10     21342  21976  242   42    722        dma          locks         sys
10353  21465  21977  243   44    7561       driver       mdstat        sysrq-trigger
10509  21613  21978  244   442   8          execdomains  meminfo       sysvipc
107    21614  22     249   45    803        fb           misc          timer_list
11     21615  220    26    46    8179       filesystems  modules       timer_stats
11010  21616  22285  261   466   8307       fs           mounts        tty
11102  21617  22287  262   467   8327       interrupts   mtrr          uptime
12     21618  22361  267   469   9          iomem        net           version
13     21619  22363  268   476   acpi       ioports      pagetypeinfo  vmallocinfo
14461  21620  22396  3     477   buddyinfo  irq          partitions    vmstat
15     21621  22467  31    485   bus        kallsyms     sched_debug   zoneinfo
17     21622  225    3198  5     cgroups    kcore        schedstat
18     21623  229    32    505   cmdline    keys         scsi
19     21624  23     33    506   consoles   key-users    self
2      21625  23884  336   5217  cpuinfo    kmsg         slabinfo
20     21626  23885  34    5515  crypto     kpagecount   softirqs
21     21627  24     357   65    devices    kpageflags   stat

上面的每個標號即是用我們當前進程的pid所命名的目錄名。

free

查看系統使用和空閒的內存情況。

命令:  free

語法:  free 參數

常用參數:

 -b, --bytes        byte爲單位展示
 -k, --kilo            k爲單位展示
 -m, --mega       m爲單位展示
 -g, --giga           g爲單位展示

操作:

➜  ~ free -m
             total        used        free      shared  buff/cache   available
Mem:           3790         536         210           2        3043        2950
Swap:          1024           0        1024

單位爲g顯示。

➜  ~ free -h
            total        used        free      shared  buff/cache   available
Mem:           3.7G        538M        207M        2.4M        3.0G        2.9G
Swap:          1.0G          0B        1.0G

文件查找

在做運維相關的事情時,我們少不了要查這樣那樣的文件,一般來說我們可能會查比如帶xxx.conf名字的文件在哪呢,查日誌啊,某個可執行文件的位置啊。

概覽
which : 查看執行文件的位置。

whereis : 查看可執行文件位置和相關文件。

locate : 配合數據庫緩存,快速查看文件的位置。

grep : 過濾匹配,他是一個文件搜索工具。

find  :  可以根據條件查看文件。
which

命令:which

語法:    which 參數  查詢目標

常用命令: 一般不加參數使用

          --all, -a      顯示所有的匹配路徑

操作:

➜  ~ which pwd
/usr/bin/pwd


whereis

命令:   whereis

語法:   whereis 參數 查詢目標

常用命令:

           一般不加參數使用
         -b         只搜索二進制文件
         -B <目錄>  定義二進制文件查找路徑
         -m         只搜索 man 手冊
         -M <目錄>  定義 man 手冊查找路徑
         -s         只搜索源代碼
         -S <目錄>  定義源代碼查找路徑

操作:

➜  ~ whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
locate

命令:   locate

語法:   locate  文件名

常用參數: 無

操作: locate和find命令功能差不多,但是搜索效率更高,因爲locate查的是數據庫而find查找的是目錄文件。

數據庫:

➜  ~ ls /var/lib/mlocate/mlocate.db
/var/lib/mlocate/mlocate.db

相關配置文件:

➜  ~ ls /etc/updatedb.conf
/etc/updatedb.conf

相關定時任務:

➜  ~ ls /etc/cron.daily/mlocate
/etc/cron.daily/mlocate

舉例:

➜  ~ touch shafa
➜  ~ locate shafa
➜  ~ updatedb
➜  ~ locate shafa
/root/shafa

注:如果我們當天新建的文件查找,需要手動updatedb。

grep

命令:grep

語法:grep 參數  目標值  文件

常用參數:

            -v       取反
            -i        忽略大小寫
            -n        輸出的同時打印行號
            ^*        以*開頭
            *$         以*結尾
            ^$         空行

操作:

查 /etc/passwd有root的行

➜  ~ grep root /etc/passwd
root:x:0:0:root:/root:/bin/zsh
operator:x:11:0:operator:/root:/sbin/nologin

查 /etc/passwd 沒有root的行(內容較多,禁展示幾行)

➜  ~ grep -v root /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync

查 /etc/passwd 有www的行並顯示行號

➜  ~ grep -n www /etc/passwd
23:www:x:1000:1000::/home/www:/sbin/nologin
find

命令:find

語法:find 路徑  參數 輸出

常用參數:

            路徑: 例如用 . 來表示當前目錄,用 / 來表示系統根目錄。
           -print:顯示的時候”\n”做爲定界符, 換行
          -print0:與xargs配套使用,以“\0”做爲定界符

find常用命令選項:

-name   按照文件名查找文件。“名稱”
-perm   按照文件權限來查找文件。666 777 等
-depth  在查找文件時,首先查找當前目錄中的文件,然後再在其子目錄中查找
-user   按照文件屬主來查找文件
 -atime  -ctime (單位是天)
 -mmin -cmin  -amin(單位是分鐘)
 -size n [c] 查找文件長度爲n塊的文件,帶有c時表示文件長度以字節計
 -follow  如果find命令遇到符號鏈接文件,就跟蹤至鏈接所指向的文件。

操作:

查看當前目錄下test.開頭的文件

➜  ~ find . -name "test*"
./test.txt
./autojump/tests
./test.1

查看當前目錄下test.開頭的文件,輸出結果換行顯示(默認)

➜  ~ find . -name "test*" -print
./test.txt
./autojump/tests
./test.1

查看當前目錄下test.開頭的文件,輸出結果不換行顯示

➜  ~ find . -name "test*" -print0
./test.txt./autojump/tests./test.1

對查找的內容執行相應命令

默認執行動作 : -print

常用動作:

              -exec  這個參數後可以跟自定義shell命令

操作:

查詢.txt結尾的文件並用ls查詢其更多屬性

➜  test find . -name "*.txt" -exec ls -l {} \;
-rw-r--r-- 1 root root 0 11月  4 14:56 ./xq1.txt
-rw-r--r-- 1 root root 0 11月  4 14:56 ./xq.txt
-rw-r--r-- 1 root root 0 11月  4 14:56 ./xq2.txt

查詢.txt結尾的文件並變成.bak結尾的文件

➜  test find . -name "*.txt" -exec mv {} {}.bak \;
➜  test ls
xq1.txt.bak  xq2.txt.bak  xq.txt.bak

邏輯查詢:

        -a  並且
        -o  或者
         +  高於
         -   低於

操作:查看 .sh或者.q結尾的文件。

➜  test find . -name "*.sh" -o -name "*.q"
./book.q
./stop.sh
./start.sh

查看.sh結尾並且s開頭的文件。

➜  test find . -name "*.sh" -a -name "s*"
./stop.sh
./start.sh

在文件中插入內容後查看。

➜  test ll
總用量 12K
-rw-r--r-- 1 root root  9 11月  4 15:10 book.q
-rw-r--r-- 1 root root 13 11月  4 15:10 start.sh
-rw-r--r-- 1 root root  4 11月  4 15:10 stop.sh
-rw-r--r-- 1 root root  0 11月  4 14:56 xq1.txt.bak
-rw-r--r-- 1 root root  0 11月  4 14:56 xq2.txt.bak
-rw-r--r-- 1 root root  0 11月  4 14:56 xq.txt.bak

查看/etc 大於40k小於50k的文件

➜  test find /etc/ -size +40k -a -size  -50k
/etc/selinux/targeted/active/modules/100/sysadm/hll
/etc/selinux/targeted/contexts/files/file_contexts.homedirs.bin


計劃任務

說到計劃,聯想到的是時間,說到任務,聯想到的就是做什麼。連起來就是什麼時間做什麼。每天幾點上班幾點下班。每年的國慶,元旦都在固定的時間節點發生。類似這些,我們可以稱之爲定時任務。

再比如,有的時候。快下班了,領導來個緊急任務,小王啊,加個班。明天心情好,請個假去面試。這種的屬於臨時任務。

那麼在linux中我們怎麼來做這兩件事呢。

任務類型

定時:   按照一定的週期重複持續的做某個事。

臨時:   執行一次以後任務就結束了,只一次。

任務類型對應的命令

crontab( 定時任務): 按照你 你規定的週期 循環窒息感。

at (臨時任務): 執行一次就結束的任務。

at的使用

命令:at

語法:    at 時間

常用參數:

         -l    查看任務列表
         -c   查看任務詳情

操作:查看服務是否開啓

[root@iz2ze0ajic0vbv28hcdctpz ~]# systemctl status atd
● atd.service - Job spooling tools
  Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
  Active: active (running) since 二 2018-11-13 11:50:47 CST; 1 day 9h ago
Main PID: 491 (atd)
  CGroup: /system.slice/atd.service
          └─491 /usr/sbin/atd -f

11月 13 11:50:47 iz2ze0ajic0vbv28hcdctpz systemd[1]: Started Job spooling tools.
11月 13 11:50:47 iz2ze0ajic0vbv28hcdctpz systemd[1]: Starting Job spooling tools...

幾種設定任務的方法: 創建一個任務(默認是今天,如果時間大於當前時間會創建在下一天 )

[root@iz2ze0ajic0vbv28hcdctpz ~]# ls
soft
[root@iz2ze0ajic0vbv28hcdctpz ~]# at 21:17
at> mkdir sk
at> <EOT>
job 6 at Wed Nov 14 21:17:00 2018

指定時間創建:

[root@iz2ze0ajic0vbv28hcdctpz ~]# at 20:00 2018-11-19
at> mkdir happy
at> <EOT>
job 7 at Mon Nov 19 20:00:00 2018

從現在開始加時間:

[root@iz2ze0ajic0vbv28hcdctpz ~]# at now + 3min
at> mkdir hello
at> <EOT>
job 8 at Wed Nov 14 21:41:00 2018

明天11:11 執行

[root@iz2ze0ajic0vbv28hcdctpz ~]# at 11:11 tomorrow
at> mkdir world
at> <EOT>
job 9 at Thu Nov 15 11:11:00 2018

2天后的下午3.24執行

[root@iz2ze0ajic0vbv28hcdctpz ~]# at 3:24 pm +2 days
at> mkdir new
at> <EOT>
job 11 at Fri Nov 16 15:24:00 2018

查看任務列表(顯示還未執行的任務 )

[root@iz2ze0ajic0vbv28hcdctpz ~]# atq
5  Thu Nov 15 21:11:00 2018 a root

查看一個單個的任務信息:(由於內容較多去掉部分信息)

[root@iz2ze0ajic0vbv28hcdctpz /]# at -c 7
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22
XDG_SESSION_ID=243; export XDG_SESSION_ID
HOSTNAME=iz2ze0ajic0vbv28hcdctpz; export HOSTNAME
SHELL=/bin/bash; export SHELL
HISTSIZE=1000; export HISTSIZE
SSH_CLIENT=113.46.167.195\ 17211\ 22; export SSH_CLIENT
SSH_TTY=/dev/pts/0; export SSH_TTY
USER=root; export USER
MAVEN_HOME=/usr/local/apache-maven-3.6.0; export MAVEN_HOME
MAIL=/var/spool/mail/root; export MAIL
PATH=/usr/local/apache-maven-3.6.0/bin:/usr/local/jdk1.8.0_191/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin; export PATH
PWD=/root; export PWD
JAVA_HOME=/usr/local/jdk1.8.0_191; export JAVA_HOME
LANG=zh_CN.UTF-8; export LANG
HISTCONTROL=ignoredups; export HISTCONTROL
SHLVL=1; export SHLVL
HOME=/root; export HOME
LOGNAME=root; export LOGNAME
CLASSPATH=.:/lib/dt.jar:/lib/tools.jar; export CLASSPATH
SSH_CONNECTION=113.46.167.195\ 17211\ 172.17.187.244\ 22; export SSH_CONNECTION
LC_CTYPE=zh_CN.UTF-8; export LC_CTYPE
LESSOPEN=\|\|/usr/bin/lesspipe.sh\ %s; export LESSOPEN
XDG_RUNTIME_DIR=/run/user/0; export XDG_RUNTIME_DIR
cd /root || {
  echo 'Execution directory inaccessible' >&2
  exit 1
}
${SHELL:-/bin/sh} << 'marcinDELIMITER550b4fbb'
mkdir happy

marcinDELIMITER550b4fbb

參數解釋:

5 : 任務編號

Thu Nov 15 21:11:00 2018 : 時間

a : 隊列

root : 執行用戶

刪除任務:

先來查看一下有哪些任務

[root@iz2ze0ajic0vbv28hcdctpz /]# atq
7  Mon Nov 19 20:00:00 2018 a root
5  Thu Nov 15 21:11:00 2018 a root
11  Fri Nov 16 15:24:00 2018 a root
9  Thu Nov 15 11:11:00 2018 a root
12  Wed Nov 14 22:11:00 2018 a root

刪除任務編號爲12的任務

[root@iz2ze0ajic0vbv28hcdctpz /]# atrm 12
[root@iz2ze0ajic0vbv28hcdctpz /]# atq
7  Mon Nov 19 20:00:00 2018 a root
5  Thu Nov 15 21:11:00 2018 a root
11  Fri Nov 16 15:24:00 2018 a root
9  Thu Nov 15 11:11:00 2018 a root

定時任務處理

cron是linux的一個定時任務執行工具,而crondtab是週期性執行命令,crond則是定時任務的守護進程。

服務啓動
 查看服務是否啓動
[root@iz2ze0ajic0vbv28hcdctpz ~]# systemctl status crond
● crond.service - Command Scheduler
  Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
  Active: active (running) since 二 2018-11-13 11:50:47 CST; 1 day 10h ago
Main PID: 489 (crond)
  CGroup: /system.slice/crond.service
          └─489 /usr/sbin/crond -n

11月 13 11:50:47 iz2ze0ajic0vbv28hcdctpz systemd[1]: Started Command Scheduler.
11月 13 11:50:47 iz2ze0ajic0vbv28hcdctpz systemd[1]: Starting Command Scheduler...
11月 13 11:50:47 iz2ze0ajic0vbv28hcdctpz crond[489]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 7...ed.)
11月 13 11:50:47 iz2ze0ajic0vbv28hcdctpz crond[489]: (CRON) INFO (running with inotify support)
Hint: Some lines were ellipsized, use -l to show in full.
如果沒有啓動,執行
systemctl start crond
systemctl enable crond
crontab命令

語法 :  crontab  參數

常用參數  :

        crontab -u   #指定用戶的cron信息
        crontab -l   #列出當前用戶下的cron服務的信息
        crontab -u user -l   #列出指定用戶的cron服務的信息
        crontab -r   #刪除cron服務
        crontab -e   #編輯cron服務
        crontab -r -u user   #刪除指定用戶的定時任務

操作:

編輯cron服務

[root@iz2ze0ajic0vbv28hcdctpz ~]# crontab -e
crontab: installing new crontab

查看當前用戶下任務內容

[root@iz2ze0ajic0vbv28hcdctpz ~]# crontab -l
22 22 22 * * mkdir /linux/test

刪除任務

[root@iz2ze0ajic0vbv28hcdctpz ~]# crontab -r
[root@iz2ze0ajic0vbv28hcdctpz ~]# crontab -l
no crontab for root

查看qa這個用戶下的任務內容

[root@iz2ze0ajic0vbv28hcdctpz ~]# crontab -u qa -l
22 22 22 * * mkdir /linux/test

刪除qa這個用戶下的定時任務

[root@iz2ze0ajic0vbv28hcdctpz ~]# crontab -u qa -r
[root@iz2ze0ajic0vbv28hcdctpz ~]# crontab -u qa -l
no crontab for qa
系統任務

系統的任務調度配置文件在/etc/crontab下

[root@iz2ze0ajic0vbv28hcdctpz ~]# ll /etc/crontab
-rw-r--r-- 1 root root 451 Nov 15 07:49 /etc/crontab

可以直接在/etc/crontab下添加系統任務(不建議)

[root@iz2ze0ajic0vbv28hcdctpz ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

定時任務相關的目錄

[root@iz2ze0ajic0vbv28hcdctpz etc]# ll cr
cron.d/       cron.deny     cron.monthly/ cron.weekly/
cron.daily/   cron.hourly/  crontab       crypttab

目錄作用解釋:

cron.d/       是系統自動定期需要做的任務(不是按照時,分,秒等時間週期執行的)
cron.deny   在該文件內的用戶無法做計劃任務
其他文件爲不同週期的執行腳本。
定時任務規則

首先來看下任務的格式(如圖):

時間的一些特殊符號:

下面我們來舉一些例子:

#每晚的20:30重加載nginx
30 20 * * * /usr/local/nginx/sbin/nginx -s reload

#每月1、10、15日的5:30重加載nginx
30 5 1,10,15 * * /usr/local/nginx/sbin/nginx  -s reload

#每天20: 00至22 : 00之間每隔30分鐘重加載nginx
0,30 20-22 * * * /usr/local/nginx/sbin/nginx -s reload

每星期六的10 : 00 pm 重加載nginx
0 22* * 6 /usr/local/nginx/sbin/nginx  -s reload

#每一小時重加載一次nginx
0 */1 * * * /usr/local/nginx/sbin/nginx -s reload

expect

很多時候我們和linux的操作交互需要人工干預,有時候我們可能需要一種工具可以不需要人工干預的和linux交互,這裏引入了一個工具expect,本小結我們主要來講如何使用expect。

expect介紹

TCL(tool command language)是一種類似shell腳本的語言,你可以使用他來完成許多操作,expect是在它的基礎上發展而來的,expect還提供了一些tcl沒有的命令。如果你要寫一個自動處理輸入輸出的腳本,我建議選擇expect。

expect安裝

yum install -y expect

expect使用

1.定義腳本執行使用的shell。

     #!/usr/bin/expect


2.設置超時時間,單位爲秒,timeout -1 爲永不超時。

        set timeout 2

3.殼子

       spawn需要在expect環境下運行,用來傳遞交互指令。

 4.expect命令

       判斷輸出結果是否包含某字符串,沒有立即返回,否則就等一段時間後返回,用timeout設置等待時間。

5.send

        執行交互動作,將交互要執行的動作進行輸入給交互指令。命令字符串結尾要加上"\r",如果出現異常等待的狀態可以進行覈查。

6.exp_continue

         繼續執行接下來的交互操作。

7.interact

        執行後保持交互狀態,把控制權交給控制檯,如不加interact,交互完成會自動退出。
免密碼通過ssh登陸服務器

操作腳本

➜  batch cat sf
#!/usr/bin/expect -f
spawn ssh  root@ip
expect {
"yes/no" { send "yes\r";exp_continue}
"*password:" { send "passwordstr\r" }
}
interact

執行查看結果,登陸成功

➜  batch ./35
spawn ssh root@ip
root@ip's password:
Last login: Sat Jan  5 10:15:56 2019 from 113.46.187.213

Welcome to Alibaba Cloud Elastic Compute Service !

❝❝

這些只是Linux的冰上一角,希望大家不放棄,繼續深入學習。。。⛽️


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章