❝Linux實際上是先後端都必會的技能,前端目前不少童鞋都再走大前端路線,後端就更不用說了,小編給你們盤了上萬字(因爲字數限制本文已刪減)關於Linux的實戰基礎命令,能夠說這些都是必須掌握的,固然這些也是不夠的,後面小編還會繼續更新,你們能夠關注個人動態,盤起來,這波能夠收藏起來了。html
❞
最高使用頻率的命令之一。前端
命令格式: ls [OPTION]... [FILE]... 單純的輸入:mysql
[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 複製代碼
[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 複製代碼
[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 複製代碼
[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/ 複製代碼
[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 複製代碼
[root@iz2ze76ybn73dvwmdij06zz test]# ls -R
.: data ./data: img ./data/img: car product user ./data/img/car: ./data/img/product: ./data/img/user: 複製代碼
[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 複製代碼
[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 複製代碼
[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 複製代碼
[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 複製代碼
[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 複製代碼
[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 [選項]... [文件]...linux
[root@iz2ze76ybn73dvwmdij06zz linuxdemo]# cat -n a
1 this is a txt 2 hello every body 3 hello world 4 hahaha 複製代碼
[root@iz2ze76ybn73dvwmdij06zz linuxdemo]# cat >b <<EOF
> EOF [root@iz2ze76ybn73dvwmdij06zz linuxdemo]# ls a b 複製代碼
[root@iz2ze76ybn73dvwmdij06zz linuxdemo]# cat >a<<EOF
> EOF [root@iz2ze76ybn73dvwmdij06zz linuxdemo]# cat a 複製代碼
[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 複製代碼
[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 複製代碼
[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的帳號,你們都是知道刪除跑路的故事,所以有一些操做權限是要交給一些專人管理的。爲了系統的學習,我以爲有必要了解一下它的基本知識。nginx
超級用戶:root (user id --UID) 0 最高的管理權限。web
普通用戶:面試
系統用戶 UID:1-999(rhel7 centos7) 1-499(rhel6) 本地用戶 UID:1000+(rhel7 centos7) 500+(rhel6) 複製代碼
UID:用戶身份標示,惟一標示。sql
組:shell
組分類:數據庫
根據帳號的功能分類: 超級用戶組: root GID:0 普通用戶組 : 系統用戶組: GID 1---999 本地用戶組: GID 1000+ 複製代碼
一個用戶屬於一個組,也能夠屬於多個組,多個用戶能夠在一個組,能夠在多個組。
1./etc/passwd:用戶 and 屬性信息。
2./etc/group: 組 and 屬性信息。
3./etc/shadow: 用戶密碼 and 屬性信息。
4./etc/gshadow:組密碼 and 屬性信息。
5./etc/default/useradd: 設置添加用戶規則文件。
6./etc/login.defs:設置用戶帳號限制。
用戶管理中最重要的一個文件,這個文件是對全部用戶開放的,每一行存一個用戶的信息,每一個屬性之間用冒號分割。
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)
該文件只有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.保留參數
用戶組的組信息存放在這,一行存一個組記錄,屬性用冒號分割。
➜ ~ 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爲例比較多。
yum
zypper
rpm
yum
rpm
全稱: Redhat Package Manager
下載網址: http://rpmfind.net
先來看下包的命名格式,以 rpm-5.4.10-10.i586.rpm 爲例。
rpm : 軟件包名
5 : 主版本號
4 : 次版本號
10 : 修訂號
i586 : cpu架構平臺
rpm : 包後綴
解決軟件包安裝的依賴關係問題,自動下載軟件包,基於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 參數
經常使用參數:
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 進程的領導者(在它之下有子進程) 複製代碼複製代碼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] 複製代碼
與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 [-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 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 參數
經常使用參數:
-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 參數 查詢目標
經常使用命令: 通常不加參數使用
--all, -a 顯示全部的匹配路徑
複製代碼
操做:
➜ ~ which pwd
/usr/bin/pwd 複製代碼
命令: 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和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 參數 目標值 文件
經常使用參數:
-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 路徑 參數 輸出
經常使用參數:
路徑: 例如用 . 來表示當前目錄,用 / 來表示系統根目錄。
-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 時間
經常使用參數:
-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 -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 #每個月一、十、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 複製代碼
不少時候咱們和linux的操做交互須要人工干預,有時候咱們可能須要一種工具能夠不須要人工干預的和linux交互,這裏引入了一個工具expect,本小結咱們主要來說如何使用expect。
TCL(tool command language)是一種相似shell腳本的語言,你可使用他來完成許多操做,expect是在它的基礎上發展而來的,expect還提供了一些tcl沒有的命令。 若是你要寫一個自動處理輸入輸出的腳本,我建議選擇expect。
yum install -y 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,交互完成會自動退出。
複製代碼
操做腳本
➜ 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的冰上一角,小編還在路上,持續更新。。。⛽️
❞
本文使用 mdnice 排版