1. 程式人生 > 實用技巧 >超級乾貨:Linux常用命令 & 實用命令萬字總結!

超級乾貨: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/