超級乾貨:Linux常用命令 & 實用命令萬字總結!
Linux其實是前後端都必會的技能,前端目前很多童鞋都再走大前端路線,後端就更不用說了,給大家盤了上萬字(由於字數限制本文已刪減)關於Linux的實戰基礎命令,可以說這些都是必須掌握的,當然這些也是不夠的,基礎非常重喲!後面還會繼續更新,盤起來,這波可以收藏起來了。
ls
最高使用頻率的命令之一。命令格式: ls [OPTION]... [FILE]... 單純的輸入:
[root@iz2ze76ybn73dvwmdij06zz/]#ls
bindevhomelib64mediaoptprocrunsrvtmpvar
bootetcliblost+foundmntpatchrootsbinsysusrwww
加 option -l 它展示了許可權,屬主,屬組,大小,時間,檔名稱
[root@iz2ze76ybn73dvwmdij06zz/]#ls-l
總用量68
lrwxrwxrwx1rootroot78月2622:36bin->usr/bin
dr-xr-xr-x.5rootroot40968月2622:39boot
drwxr-xr-x19rootroot29604月1112:59dev
drwxr-xr-x.81rootroot40969月517:09etc
drwxr-xr-x.2rootroot40964月1112:59home
lrwxrwxrwx1rootroot78月2622:36lib->usr/lib
lrwxrwxrwx1rootroot98月2622:36lib64->usr/lib64
drwx------.2rootroot1638410月152017lost+found
drwxr-xr-x.2rootroot40964月1112:59media
drwxr-xr-x.2rootroot40964月1112:59mnt
drwxr-xr-x.3rootroot40968月2622:40opt
drwxr-xr-x2rootroot40968月2623:00patch
dr-xr-xr-x110rootroot04月1112:59proc
dr-xr-x---.12rootroot40969月1120:59root
drwxr-xr-x26rootroot7609月721:50run
lrwxrwxrwx1rootroot88月2622:36sbin->usr/sbin
drwxr-xr-x.2rootroot40964月1112:59srv
dr-xr-xr-x13rootroot04月1112:59sys
drwxrwxrwt.9rootroot40969月1503:19tmp
drwxr-xr-x.13rootroot40968月2622:36usr
drwxr-xr-x.19rootroot40968月2622:55var
drwxr-xr-x6rootroot40968月2622:39www
ls -a (all) linux '.'(點)開頭的檔案預設是隱藏的,-a可以查詢所有的檔案。
[root@iz2ze76ybn73dvwmdij06zz/]#ls-a
.binetclib64mnt.pearrcrunsysusr
..boothomelost+foundoptprocsbin.testvar
.autorelabeldevlibmediapatchrootsrvtmpwww
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
wwwusrsyssbinrootpatchmntlost+foundlibetcboot
vartmpsrvrunprocoptmedialib64homedevbin
ls -R ()遞迴展示子目錄
[root@iz2ze76ybn73dvwmdij06zztest]#ls-R
.:
data
./data:
img
./data/img:
carproductuser
./data/img/car:
./data/img/product:
./data/img/user:
ls -lS 按照檔案大小降序顯示
[root@iz2ze76ybn73dvwmdij06zz/]#ls-lS
總用量72
drwx------.2rootroot1638410月152017lost+found
dr-xr-xr-x.5rootroot40968月2622:39boot
drwxr-xr-x.81rootroot40969月517:09etc
drwxr-xr-x.2rootroot40964月1112:59home
drwxr-xr-x.2rootroot40964月1112:59media
drwxr-xr-x.2rootroot40964月1112:59mnt
drwxr-xr-x.3rootroot40968月2622:40opt
drwxr-xr-x2rootroot40968月2623:00patch
dr-xr-x---.12rootroot40969月1522:03root
drwxr-xr-x.2rootroot40964月1112:59srv
drwxr-xr-x3rootroot40969月1522:10test
drwxrwxrwt.9rootroot40969月1503:19tmp
drwxr-xr-x.13rootroot40968月2622:36usr
drwxr-xr-x.19rootroot40968月2622:55var
drwxr-xr-x6rootroot40968月2622:39www
drwxr-xr-x19rootroot29604月1112:59dev
drwxr-xr-x26rootroot7609月721:50run
lrwxrwxrwx1rootroot98月2622:36lib64->usr/lib64
lrwxrwxrwx1rootroot88月2622:36sbin->usr/sbin
lrwxrwxrwx1rootroot78月2622:36bin->usr/bin
lrwxrwxrwx1rootroot78月2622:36lib->usr/lib
dr-xr-xr-x110rootroot04月1112:59proc
dr-xr-xr-x13rootroot04月1112:59sys
ls -g 不輸出所有者(屬主)資訊
[root@iz2ze76ybn73dvwmdij06zz/]#ls-g
總用量72
lrwxrwxrwx1root78月2622:36bin->usr/bin
dr-xr-xr-x.5root40968月2622:39boot
-rw-r--r--1root09月1522:20c
drwxr-xr-x19root29604月1112:59dev
drwxr-xr-x.81root40969月517:09etc
drwxr-xr-x.2root40964月1112:59home
lrwxrwxrwx1root78月2622:36lib->usr/lib
lrwxrwxrwx1root98月2622:36lib64->usr/lib64
drwx------.2root1638410月152017lost+found
drwxr-xr-x.2root40964月1112:59media
drwxr-xr-x.2root40964月1112:59mnt
drwxr-xr-x.3root40968月2622:40opt
drwxr-xr-x2root40968月2623:00patch
dr-xr-xr-x110root04月1112:59proc
dr-xr-x---.12root40969月1522:18root
drwxr-xr-x26root7609月721:50run
lrwxrwxrwx1root88月2622:36sbin->usr/sbin
drwxr-xr-x.2root40964月1112:59srv
dr-xr-xr-x13root04月1112:59sys
drwxr-xr-x3root40969月1522:18test
drwxrwxrwt.9root40969月1503:19tmp
drwxr-xr-x.13root40968月2622:36usr
drwxr-xr-x.19root40968月2622:55var
drwxr-xr-x6root40968月2622:39www
ls -lG 隱藏所有組(屬組)資訊
[root@iz2ze76ybn73dvwmdij06zz/]#ls-lG
總用量72
lrwxrwxrwx1root78月2622:36bin->usr/bin
dr-xr-xr-x.5root40968月2622:39boot
-rw-r--r--1root09月1522:20c
drwxr-xr-x19root29604月1112:59dev
drwxr-xr-x.81root40969月517:09etc
drwxr-xr-x.2root40964月1112:59home
lrwxrwxrwx1root78月2622:36lib->usr/lib
lrwxrwxrwx1root98月2622:36lib64->usr/lib64
drwx------.2root1638410月152017lost+found
drwxr-xr-x.2root40964月1112:59media
drwxr-xr-x.2root40964月1112:59mnt
drwxr-xr-x.3root40968月2622:40opt
drwxr-xr-x2root40968月2623:00patch
dr-xr-xr-x110root04月1112:59proc
dr-xr-x---.12root40969月1522:18root
drwxr-xr-x26root7609月721:50run
lrwxrwxrwx1root88月2622:36sbin->usr/sbin
drwxr-xr-x.2root40964月1112:59srv
dr-xr-xr-x13root04月1112:59sys
drwxr-xr-x3root40969月1522:18test
drwxrwxrwt.9root40969月1503:19tmp
drwxr-xr-x.13root40968月2622:36usr
drwxr-xr-x.19root40968月2622:55var
drwxr-xr-x6root40968月2622:39www
10.ls-li顯示檔案的索引號
[root@iz2ze76ybn73dvwmdij06zz/]#ls-li
ls -li 顯示檔案的索引號
[root@iz2ze76ybn73dvwmdij06zz/]#ls-li
總用量72
7628lrwxrwxrwx1rootroot78月2622:36bin->usr/bin
1179650dr-xr-xr-x.5rootroot40968月2622:39boot
4923-rw-r--r--1rootroot09月1522:20c
1026drwxr-xr-x19rootroot29604月1112:59dev
917505drwxr-xr-x.81rootroot40969月517:09etc
655362drwxr-xr-x.2rootroot40964月1112:59home
17lrwxrwxrwx1rootroot78月2622:36lib->usr/lib
13lrwxrwxrwx1rootroot98月2622:36lib64->usr/lib64
11drwx------.2rootroot1638410月152017lost+found
786434drwxr-xr-x.2rootroot40964月1112:59media
131074drwxr-xr-x.2rootroot40964月1112:59mnt
393219drwxr-xr-x.3rootroot40968月2622:40opt
1966081drwxr-xr-x2rootroot40968月2623:00patch
1dr-xr-xr-x110rootroot04月1112:59proc
131073dr-xr-x---.12rootroot40969月1522:18root
218drwxr-xr-x26rootroot7609月721:50run
15lrwxrwxrwx1rootroot88月2622:36sbin->usr/sbin
393220drwxr-xr-x.2rootroot40964月1112:59srv
1dr-xr-xr-x13rootroot04月1112:59sys
2097153drwxr-xr-x3rootroot40969月1522:18test
393217drwxrwxrwt.9rootroot40969月1503:19tmp
1048578drwxr-xr-x.13rootroot40968月2622:36usr
262145drwxr-xr-x.19rootroot40968月2622:55var
1441793drwxr-xr-x6rootroot40968月2622:39www
ls -lt 按照修改時間排序(倒序)依次建立檔案 a b
[root@iz2ze76ybn73dvwmdij06zztest]#ls-lt
總用量0
-rw-r--r--1rootroot09月1522:18b
-rw-r--r--1rootroot09月1522:18a
ls -version
[root@iz2ze76ybn73dvwmdij06zztest]#ls--version
ls(GNUcoreutils)8.22
Copyright(C)2013FreeSoftwareFoundation,Inc.
許可證:GPLv3+:GNU 通用公共許可證第3 版或更新版本<http://gnu.org/licenses/gpl.html>。
本軟體是自由軟體:您可以自由修改和重新發布它。
在法律範圍內沒有其他保證。
由Richard M. Stallman 和David MacKenzie 編寫。
cat
cat,又是一個相對高頻率的命令。比較官方的說法是命令用於連結檔案並列印到標準輸出裝置上。這個文字輸出命令可以用來檢視檔案內容,建立內容等,下面我們介紹幾個比較實用的用法。命令格式 : cat [選項]... [檔案]...
cat -n 檢視並顯示行號
[root@iz2ze76ybn73dvwmdij06zzlinuxdemo]#cat-na
1thisisatxt
2helloeverybody
3helloworld
4hahaha
cat 建立一個空檔案 b
[root@iz2ze76ybn73dvwmdij06zzlinuxdemo]#cat>b<<EOF
>EOF
[root@iz2ze76ybn73dvwmdij06zzlinuxdemo]#ls
ab
cat 清空檔案內容
[root@iz2ze76ybn73dvwmdij06zzlinuxdemo]#cat>a<<EOF
>EOF
[root@iz2ze76ybn73dvwmdij06zzlinuxdemo]#cata
cat 寫入內容(如果原來有內容將被覆蓋)
[root@iz2ze76ybn73dvwmdij06zzlinuxdemo]#cat>a<<EOF
>todayisagoodday
>becauseoffwork
>hahaha
>EOF
[root@iz2ze76ybn73dvwmdij06zzlinuxdemo]#cata
todayisagoodday
becauseoffwork
hahaha
cat 同時顯示多個檔案內容( b中寫出happy)
[root@iz2ze76ybn73dvwmdij06zzlinuxdemo]#cata>b
[root@iz2ze76ybn73dvwmdij06zzlinuxdemo]#catb
todayisagoodday
becauseoffwork
hahaha
追加內容 可以看到用了連個>以後內容是追加的
[root@iz2ze76ybn73dvwmdij06zzlinuxdemo]#cata>>b
[root@iz2ze76ybn73dvwmdij06zzlinuxdemo]#catb
todayisagoodday
becauseoffwork
hahaha
todayisagoodday
becauseoffwork
hahaha
cat --help (如想學習更多,可以自己動手嘗試)
[root@iz2ze76ybn73dvwmdij06zzlinuxdemo]#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 將標準輸入的內容複製到標準輸出。
GNUcoreutilsonlinehelp:<http://www.gnu.org/software/coreutils/>
請向<http://translationproject.org/team/zh_CN.html>報告cat的翻譯錯誤
要獲取完整文件,請執行:info coreutils 'catinvocation'
使用者許可權
大家都知道linux是一個多工,多使用者的作業系統。多個使用者可以在同一時間作業系統執行不同的任務,一個使用者也可以多個人登陸操作。一般來說root的許可權最大,我們經常使用的資料庫一般會用一個mysql的使用者,網頁相關的我們可能用一個www的賬號,大家都是知道刪除跑路的故事,因此有一些操作許可權是要交給一些專人管理的。為了系統的學習,我覺得有必要了解一下它的基本知識。
linux角色分類
超級使用者:root (user id --UID) 0 最高的管理許可權。普通使用者:
系統使用者UID:1-999(rhel7centos7)1-499(rhel6)
本地使用者UID:1000+(rhel7centos7)500+(rhel6)
UID:使用者身份標示,唯一標示。
linux組分類
組:組分類:
根據賬號的功能分類:
超級使用者組:root GID:0
普通使用者組:
系統使用者組:GID1---999
本地使用者組:GID1000+
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/zsh1.登陸使用者名稱:root2.使用者密碼佔位符:x3.使用者UID:04.使用者組GID:05.對使用者賬戶的描述:root6.使用者家目錄位置:/root7.使用者預設的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.登入使用者名稱: bin2.加密的密碼: * 號代表密碼被鎖定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.組名:root2.組密碼佔位符: x3.組GID: 0
安裝包管理基礎
相信大部分人應該和我一樣,最開始都是用 windows上手的,那在windows平臺的安裝包就再熟悉不過了,比如.exe,是不是太常見了,一般在windows安裝過mysql的,相信.msi也是見過的。大多數的伺服器都是linux的,因此我們來學習一下linux的安裝包基礎知識。不同發行版的系統用的工具也是不相同的。目前大多數的公司伺服器是基於centos,因此後續會以centos為例比較多。
基於redhat
yumzypperrpm
基於centos
yumrpm
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。程序連結的終端。程序佔用資源情況。
父子程序的關係
父子程序的關係,父親管理兒子。其一,父程序終止時子程序終止,而子程序終止時父程序不一定終止。其二,被init接管成為孤兒程序。
程序管理工具
ps:檢視程序。
top:可以檢視程序的動態資訊。
kill:殺程序。
pstree:檢視程序樹。
pgrep:搜程序。
lsof:檢視程序開啟的檔案。
程序管理實踐
ps靜態的顯示當前程序的資訊 。命令: ps語法: ps 引數常用引數:
a顯示所有使用者的程序
r顯示執行中的程序
l長格式輸出
u按使用者名稱和啟動時間的順序來顯示程序
f用樹形格式來顯示程序
x顯示沒有控制終端的程序
操作: BSD格式來顯示程序
➜~psaux
USERPID%CPU%MEMVSZRSSTTYSTATSTARTTIMECOMMAND
root10.00.0433643596?Ss11月030:01/usr/lib/syst
root20.00.000?S11月030:00[kthreadd]
root30.00.000?S11月030:00[ksoftirqd/0]
root50.00.000?S<11月030:00[kworker/0:0H
root70.00.000?S11月030:00[migration/0]
root80.00.000?S11月030:00[rcu_bh]
root90.00.000?S11月030:05[rcu_sched]
root100.00.000?S11月030:00[watchdog/0]
root110.00.000?S11月030:00[watchdog/1]
root120.00.000?S11月030:00[migration/1]
root130.00.000?S11月030:00[ksoftirqd/1]
root150.00.000?S<11月030:00[kworker/1:0H
標準格式顯示程序unix風格
~ps-ef
UIDPIDPPIDCSTIMETTYTIMECMD
root10011月03?00:00:01/usr/lib/systemd/systemd--syste
root20011月03?00:00:00[kthreadd]
root32011月03?00:00:00[ksoftirqd/0]
root52011月03?00:00:00[kworker/0:0H]
root72011月03?00:00:00[migration/0]
root82011月03?00:00:00[rcu_bh]
root92011月03?00:00:05[rcu_sched]
root102011月03?00:00:00[watchdog/0]
root112011月03?00:00:00[watchdog/1]
root122011月03?00:00:00[migration/1]
root132011月03?00:00:00[ksoftirqd/1]
root152011月03?00:00:00[kworker/1:0H]
root172011月03?00:00:00[kdevtmpfs]
root182011月03?00:00:00[netns]
root192011月03?00:00:00[khungtaskd]
root202011月03?00:00:00[writeback]
root212011月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從小到大排序。
➜~psaux--sort%cpu
USERPID%CPU%MEMVSZRSSTTYSTATSTARTTIMECOMMAND
root10.00.0433643596?Ss11月030:01/usr/lib/syst
root20.00.000?S11月030:00[kthreadd]
root30.00.000?S11月030:00[ksoftirqd/0]
root50.00.000?S<11月030:00[kworker/0:0H
root70.00.000?S11月030:00[migration/0]
root80.00.000?S11月030:00[rcu_bh]
root90.00.000?S11月030:05[rcu_sched]
root100.00.000?S11月030:00[watchdog/0]
root110.00.000?S11月030:00[watchdog/1]
按照cpu從大到小排序。
➜~psaux--sort-%cpu
USERPID%CPU%MEMVSZRSSTTYSTATSTARTTIMECOMMAND
root213420.30.413718417112?Ssl03:241:16/usr/local/aegi
root10.00.0433643596?Ss11月030:01/usr/lib/syst
root20.00.000?S11月030:00[kthreadd]
root30.00.000?S11月030:00[ksoftirqd/0]
root50.00.000?S<11月030:00[kworker/0:0H
root70.00.000?S11月030:00[migration/0]
root80.00.000?S11月030:00[rcu_bh]
root90.00.000?S11月030:05[rcu_sched]
root100.00.000?S11月030:00[watchdog/0]
root110.00.000?S11月030:00[watchdog/1]
root120.00.000?S11月030:00[migration/1]
root130.00.000?S11月030:00[ksoftirqd/1]
top
與ps相反的是top命令可以檢視程序的動態資訊。命令: top語法: top 引數常用引數:操作:
➜~top
top-11:38:42up13:15,2users,loadaverage:0.01,0.03,0.05
Tasks:98total,1running,97sleeping,0stopped,0zombie
%Cpu(s):0.2us,0.0sy,0.0ni,99.8id,0.0wa,0.0hi,0.0si,0.0st
KiBMem:3881688total,229264free,543932used,3108492buff/cache
KiBSwap:1049596total,1049596free,0used.3026944availMem
PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND
1root2004336435962340S0.00.10:01.79systemd
2root200000S0.00.00:00.00kthreadd
3root200000S0.00.00:00.14ksoftirqd/0
5root0-20000S0.00.00:00.00kworker/0:+
7rootrt0000S0.00.00:00.33migration/0
8root200000S0.00.00:00.00rcu_bh
9root200000S0.00.00:05.73rcu_sched
屬性解釋:
前五行是資料的整理統計資訊。第一行:
11:38:42當前時間
up13:15系統執行時間,格式為時:分
2user當前登陸使用者數量
loadaverage:0.01,0.03,0.05系統負載,任務佇列平均長度1分鐘,5分鐘,15分鐘前到現在的平均值。
第二三行:
98total程序總數量
1running正在執行的程序數量
97sleeping睡眠的程序數量
0stopped停止的程序數量
0zombie殭屍程序數量
%Cpu(s):
0.2us系統使用者程序使用cpu百分比
0.0sy核心程序佔用cpu百分比
0.0ni使用者程序空間內改變過優先順序的程序佔用cpu百分比
99.8id空閒cpu百分比
0.0wa等待輸入輸出的cpu時間百分比
0.0hi硬體cpu中斷佔用百分比
0.0si軟中斷佔用百分比
0.0st虛擬機器佔用百分比
第四五行:Mem : (單位K)
3881688total實體記憶體總量
229264free空閒記憶體總量
543932used使用的實體記憶體總量
3108492buff/cache核心快取的記憶體量
Swap: (單位K)
1049596total交換區總量
1049596free空閒交換區總量
0used使用的交換區總量
3026944availMem可利用的記憶體量
標題行:PID: 程序idUSER: 程序所有者使用者名稱PR: 優先順序NI: 程序優先順序,nice值,負值 -> 高優先順序,正值 -> 低優先順序VIRT: 虛擬記憶體總量 virt=swap + resRES: 實際使用記憶體大小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
HUPINTQUITILLTRAPABRTBUSFPEKILLUSR1SEGVUSR2PIPEALRMTERMSTKFLTCHLDCONTSTOPTSTPTTINTTOUURGXCPUXFSZVTALRMPROFWINCHPOLLPWRSYS
強制終止
➜~kill-923423
終止
➜~kill-1522323
殺死指定使用者的所有程序
➜~kill-usuperh
proc目錄
這個目錄中有核心,程序執行狀態的資訊。
➜/procls
121320216282403927diskstatsloadavgswaps
10213422197624242722dmalockssys
103532146521977243447561drivermdstatsysrq-trigger
1050921613219782444428execdomainsmeminfosysvipc
107216142224945803fbmisctimer_list
112161522026468179filesystemsmodulestimer_stats
1101021616222852614668307fsmountstty
1110221617222872624678327interruptsmtrruptime
1221618223612674699iomemnetversion
132161922363268476acpiioportspagetypeinfovmallocinfo
1446121620223963477buddyinfoirqpartitionsvmstat
15216212246731485buskallsymssched_debugzoneinfo
172162222531985cgroupskcoreschedstat
182162322932505cmdlinekeysscsi
19216242333506consoleskey-usersself
221625238843365217cpuinfokmsgslabinfo
202162623885345515cryptokpagecountsoftirqs
21216272435765deviceskpageflagsstat
上面的每個標號即是用我們當前程序的pid所命名的目錄名。
free
檢視系統使用和空閒的記憶體情況。命令: free語法: free 引數常用引數:
-b, --bytes byte為單位展示
-k, --kilo k為單位展示
-m, --mega m為單位展示
-g, --giga g為單位展示
操作:
➜~free-m
totalusedfreesharedbuff/cacheavailable
Mem:3790536210230432950
Swap:102401024
單位為g顯示。
➜~free-h
totalusedfreesharedbuff/cacheavailable
Mem:3.7G538M207M2.4M3.0G2.9G
Swap:1.0G0B1.0G
檔案查詢
在做運維相關的事情時,我們少不了要查這樣那樣的檔案,一般來說我們可能會查比如帶xxx.conf名字的檔案在哪呢,查日誌啊,某個可執行檔案的位置啊。
概覽
which :檢視執行檔案的位置。
whereis :檢視可執行檔案位置和相關檔案。
locate :配合資料庫快取,快速檢視檔案的位置。
grep :過濾匹配,他是一個檔案搜尋工具。
find :可以根據條件檢視檔案。
which
命令:which語法: which 引數 查詢目標常用命令: 一般不加引數使用
--all,-a顯示所有的匹配路徑
操作
➜~whichpwd
/usr/bin/pwd
whereis
命令: whereis語法: whereis 引數 查詢目標常用命令:
一般不加引數使用
-b 只搜尋二進位制檔案
-B <目錄> 定義二進位制檔案查詢路徑
-m 只搜尋 man 手冊
-M <目錄> 定義 man 手冊查詢路徑
-s 只搜尋原始碼
-S <目錄> 定義原始碼查詢路徑
操作:
➜~whereisls
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
舉例:
➜~touchshafa
➜~locateshafa
➜~updatedb
➜~locateshafa
/root/shafa
注:如果我們當天新建的檔案查詢,需要手動updatedb。
grep
命令:grep語法:grep 引數 目標值 檔案常用引數:、
-v取反
-i忽略大小寫
-n輸出的同時列印行號
^*以*開頭
*$以*結尾
^$空行
操作:查 /etc/passwd有root的行
➜~greproot/etc/passwd
root:x:0:0:root:/root:/bin/zsh
operator:x:11:0:operator:/root:/sbin/nologin
查 /etc/passwd 沒有root的行(內容較多,禁展示幾行)
➜~grep-vroot/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-nwww/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查詢其更多屬性
➜testfind.-name"*.txt"-execls-l{}\;
-rw-r--r--1rootroot011月414:56./xq1.txt
-rw-r--r--1rootroot011月414:56./xq.txt
-rw-r--r--1rootroot011月414:56./xq2.txt
查詢.txt結尾的檔案並變成.bak結尾的檔案
➜testfind.-name"*.txt"-execmv{}{}.bak\;
➜testls
xq1.txt.bakxq2.txt.bakxq.txt.bak
邏輯查詢:
-a並且
-o或者
+高於
-低於
操作:檢視 .sh或者.q結尾的檔案。
➜testfind.-name"*.sh"-o-name"*.q"
./book.q
./stop.sh
./start.sh
檢視.sh結尾並且s開頭的檔案。
➜testfind.-name"*.sh"-a-name"s*"
./stop.sh
./start.sh
在檔案中插入內容後檢視。
➜testll
總用量12K
-rw-r--r--1rootroot911月415:10book.q
-rw-r--r--1rootroot1311月415:10start.sh
-rw-r--r--1rootroot411月415:10stop.sh
-rw-r--r--1rootroot011月414:56xq1.txt.bak
-rw-r--r--1rootroot011月414:56xq2.txt.bak
-rw-r--r--1rootroot011月414:56xq.txt.bak
檢視/etc 大於40k小於50k的檔案
➜testfind/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~]#systemctlstatusatd
●atd.service-Jobspoolingtools
Loaded:loaded(/usr/lib/systemd/system/atd.service;enabled;vendorpreset:enabled)
Active:active(running)since二2018-11-1311:50:47CST;1day9hago
MainPID:491(atd)
CGroup:/system.slice/atd.service
└─491/usr/sbin/atd-f
11月1311:50:47iz2ze0ajic0vbv28hcdctpzsystemd[1]:StartedJobspoolingtools.
11月1311:50:47iz2ze0ajic0vbv28hcdctpzsystemd[1]:StartingJobspoolingtools...
幾種設定任務的方法: 建立一個任務(預設是今天,如果時間大於當前時間會建立在下一天 )
[root@iz2ze0ajic0vbv28hcdctpz~]#ls
soft
[root@iz2ze0ajic0vbv28hcdctpz~]#at21:17
at>mkdirsk
at><EOT>
job6atWedNov1421:17:002018
指定時間建立:
[root@iz2ze0ajic0vbv28hcdctpz~]#at20:002018-11-19
at>mkdirhappy
at><EOT>
job7atMonNov1920:00:002018
從現在開始加時間:
[root@iz2ze0ajic0vbv28hcdctpz~]#atnow+3min
at>mkdirhello
at><EOT>
job8atWedNov1421:41:002018
明天11:11 執行
[root@iz2ze0ajic0vbv28hcdctpz~]#at11:11tomorrow
at>mkdirworld
at><EOT>
job9atThuNov1511:11:002018
2天后的下午3.24執行
[root@iz2ze0ajic0vbv28hcdctpz~]#at3:24pm+2days
at>mkdirnew
at><EOT>
job11atFriNov1615:24:002018
檢視任務列表(顯示還未執行的任務 )
[root@iz2ze0ajic0vbv28hcdctpz~]#atq
5ThuNov1521:11:002018aroot
檢視一個單個的任務資訊:(由於內容較多去掉部分資訊)
[root@iz2ze0ajic0vbv28hcdctpz/]#at-c7
#!/bin/sh
#atrunuid=0gid=0
#mailroot0
umask22
XDG_SESSION_ID=243;exportXDG_SESSION_ID
HOSTNAME=iz2ze0ajic0vbv28hcdctpz;exportHOSTNAME
SHELL=/bin/bash;exportSHELL
HISTSIZE=1000;exportHISTSIZE
SSH_CLIENT=113.46.167.195\17211\22;exportSSH_CLIENT
SSH_TTY=/dev/pts/0;exportSSH_TTY
USER=root;exportUSER
MAVEN_HOME=/usr/local/apache-maven-3.6.0;exportMAVEN_HOME
MAIL=/var/spool/mail/root;exportMAIL
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;exportPATH
PWD=/root;exportPWD
JAVA_HOME=/usr/local/jdk1.8.0_191;exportJAVA_HOME
LANG=zh_CN.UTF-8;exportLANG
HISTCONTROL=ignoredups;exportHISTCONTROL
SHLVL=1;exportSHLVL
HOME=/root;exportHOME
LOGNAME=root;exportLOGNAME
CLASSPATH=.:/lib/dt.jar:/lib/tools.jar;exportCLASSPATH
SSH_CONNECTION=113.46.167.195\17211\172.17.187.244\22;exportSSH_CONNECTION
LC_CTYPE=zh_CN.UTF-8;exportLC_CTYPE
LESSOPEN=\|\|/usr/bin/lesspipe.sh\%s;exportLESSOPEN
XDG_RUNTIME_DIR=/run/user/0;exportXDG_RUNTIME_DIR
cd/root||{
echo'Executiondirectoryinaccessible'>&2
exit1
}
${SHELL:-/bin/sh}<<'marcinDELIMITER550b4fbb'
mkdirhappy
marcinDELIMITER550b4fbb
引數解釋:5 : 任務編號Thu Nov 15 21:11:00 2018 : 時間a : 佇列root : 執行使用者刪除任務:先來檢視一下有哪些任務
[root@iz2ze0ajic0vbv28hcdctpz/]#atq
7MonNov1920:00:002018aroot
5ThuNov1521:11:002018aroot
11FriNov1615:24:002018aroot
9ThuNov1511:11:002018aroot
12WedNov1422:11:002018aroot
刪除任務編號為12的任務
[root@iz2ze0ajic0vbv28hcdctpz/]#atrm12
[root@iz2ze0ajic0vbv28hcdctpz/]#atq
7MonNov1920:00:002018aroot
5ThuNov1521:11:002018aroot
11FriNov1615:24:002018aroot
9ThuNov1511:11:002018aroot
定時任務處理
cron是linux的一個定時任務執行工具,而crondtab是週期性執行命令,crond則是定時任務的守護程序。
服務啟動
檢視服務是否啟動
[root@iz2ze0ajic0vbv28hcdctpz~]#systemctlstatuscrond
●crond.service-CommandScheduler
Loaded:loaded(/usr/lib/systemd/system/crond.service;enabled;vendorpreset:enabled)
Active:active(running)since二2018-11-1311:50:47CST;1day10hago
MainPID:489(crond)
CGroup:/system.slice/crond.service
└─489/usr/sbin/crond-n
11月1311:50:47iz2ze0ajic0vbv28hcdctpzsystemd[1]:StartedCommandScheduler.
11月1311:50:47iz2ze0ajic0vbv28hcdctpzsystemd[1]:StartingCommandScheduler...
11月1311:50:47iz2ze0ajic0vbv28hcdctpzcrond[489]:(CRON)INFO(RANDOM_DELAYwillbescaledwithfactor7...ed.)
11月1311:50:47iz2ze0ajic0vbv28hcdctpzcrond[489]:(CRON)INFO(runningwithinotifysupport)
Hint:Somelineswereellipsized,use-ltoshowinfull.
如果沒有啟動,執行
systemctlstartcrond
systemctlenablecrond
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:installingnewcrontab
檢視當前使用者下任務內容
[root@iz2ze0ajic0vbv28hcdctpz~]#crontab-l
222222**mkdir/linux/test
刪除任務
[root@iz2ze0ajic0vbv28hcdctpz~]#crontab-r
[root@iz2ze0ajic0vbv28hcdctpz~]#crontab-l
nocrontabforroot
檢視qa這個使用者下的任務內容
[root@iz2ze0ajic0vbv28hcdctpz~]#crontab-uqa-l
222222**mkdir/linux/test
刪除qa這個使用者下的定時任務
[root@iz2ze0ajic0vbv28hcdctpz~]#crontab-uqa-r
[root@iz2ze0ajic0vbv28hcdctpz~]#crontab-uqa-l
nocrontabforqa
系統任務
系統的任務排程配置檔案在/etc/crontab下
[root@iz2ze0ajic0vbv28hcdctpz~]#ll/etc/crontab
-rw-r--r--1rootroot451Nov1507:49/etc/crontab
可以直接在/etc/crontab下新增系統任務(不建議)
[root@iz2ze0ajic0vbv28hcdctpz~]#cat/etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
#Fordetailsseeman4crontabs
#Exampleofjobdefinition:
#.----------------minute(0-59)
#|.-------------hour(0-23)
#||.----------dayofmonth(1-31)
#|||.-------month(1-12)ORjan,feb,mar,apr...
#||||.----dayofweek(0-6)(Sunday=0or7)ORsun,mon,tue,wed,thu,fri,sat
#|||||
#*****user-namecommandtobeexecuted
定時任務相關的目錄
[root@iz2ze0ajic0vbv28hcdctpzetc]#llcr
cron.d/cron.denycron.monthly/cron.weekly/
cron.daily/cron.hourly/crontabcrypttab
目錄作用解釋:
cron.d/是系統自動定期需要做的任務(不是按照時,分,秒等時間週期執行的)
cron.deny在該檔案內的使用者無法做計劃任務
其他檔案為不同週期的執行指令碼。
定時任務規則
首先來看下任務的格式(如圖):時間的一些特殊符號:下面我們來舉一些例子:
#每晚的20:30重載入nginx
3020***/usr/local/nginx/sbin/nginx-sreload
#每月1、10、15日的5:30重載入nginx
3051,10,15**/usr/local/nginx/sbin/nginx-sreload
#每天20:00至22:00之間每隔30分鐘重載入nginx
0,3020-22***/usr/local/nginx/sbin/nginx-sreload
每星期六的10:00pm重載入nginx
022**6/usr/local/nginx/sbin/nginx-sreload
#每一小時重載入一次nginx
0*/1***/usr/local/nginx/sbin/nginx-sreload
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為永不超時。
settimeout2
3.殼子
spawn需要在expect環境下執行,用來傳遞互動指令。
4.expect命令
判斷輸出結果是否包含某字串,沒有立即返回,否則就等一段時間後返回,用timeout設定等待時間。
5.send
執行互動動作,將互動要執行的動作進行輸入給互動指令。命令字串結尾要加上"\r",如果出現異常等待的狀態可以進行核查。
6.exp_continue
繼續執行接下來的互動操作。
7.interact
執行後保持互動狀態,把控制權交給控制檯,如不加interact,互動完成會自動退出。
免密碼通過ssh登陸伺服器
操作指令碼
➜batchcatsf
#!/usr/bin/expect-f
spawnsshroot@ip
expect{
"yes/no"{send"yes\r";exp_continue}
"*password:"{send"passwordstr\r"}
}
interact
執行檢視結果,登陸成功
➜batch./35
spawnsshroot@ip
root@ip'spassword:
Lastlogin:SatJan510:15:562019from113.46.187.213
WelcometoAlibabaCloudElasticComputeService!
就先到這裡吧,這波乾貨必須收藏,大家一起慢慢消化吧~
原文來自:http://6tt.co/rDGf作者:JAVA小咖秀Linux命令大全:https://www.linuxcool.com/