個人整理的-系統運維日常指令

一、常用指令說明
#打印test1.txt文件內容,一屏輸出,如果內容上千行,開頭的行看不了
cat test1.txt

#查看系統版本號
cat /etc/redhat-release

#查看系統內核版本號
uname -r

#查看系統磁盤使用情況
df -h

#查看系統內存使用情況
free -m

#切換用戶
su - cudo

#以超級用戶權限執行
sudo ls /root/

#刪除文件或目錄
rm /tmp/test1.log

#創建文件
touch /tmp/test1.txt

#創建目錄
mkdir -p /tmp/test1/{a,b,c}

#輸出追加重定向
echo “123” >> /tmp/test1.txt

#輸入追加重定向
cat >> /tmp/test <<EOF

123
456
EOF

#查看服務進程
ps -ef

#查看系統服務進程使用情況
top

#查看系統登錄的賬號信息
w

#打印文件內容前5行
head -n5 test1.txt

#打印文件內容後5行
tail -n5 test1.txt

#實時顯示文件內容信息
tail -f test1.txt

#過濾關鍵字“root”
grep “root” passwd

#過濾關鍵字“2017-1[0-2]”,日期以2017年10~12月的行
grep "2017-1[0-2]" test
2017-10-10
2017-12-10
2017-11-19
2017-12-20

#過濾關鍵字“10|12”,10或者12的行
grep -E "10|12" test
2017-10-09
2017-12-23
2017-12-10

#過濾註釋的行和空行
grep -v "^#" test |grep -v "^$"

#過濾”28/Dec/2017“關鍵字,並將結果輸出給後面的命令統計行數
grep "28/Dec/2017" yeah100_wechat_web_prd.access_28.log |wc -l

#替換文件內容,將”2017-00-09“替換爲”2017-00-10“
sed -i "s#2017-00-09#2017-00-10#g" test

#以”-“爲分隔符,打印第一段數據
awk -F '-' '{print $1}' test

#以”-“爲分隔符,打印最後一段數據
awk -F '-' '{print $NF}' test

#訪問日誌過濾,以”28/Dec/2017“關鍵字,取第二段IP地址,統計 IP地址訪問量
grep "28/Dec/2017" yeah100_wechat_web_prd.access_28.log |awk -F'|' '{print $2}' |sort -nr|uniq -c|sort -r
877 112.124.127.64
557 121.43.105.176

#查看一個月前大小爲100M以上的文件,名爲”test.
find / -name “test.
” -type f -mtime +30 +size +100M

#批量替換文件內容
sed -i "s#333#111#g" grep "333" -rl /tmp/123/

#centos6 啓動服務
service crond start

#centos7啓動服務
systemctl start crond

二、指令詳細說明
1、yum命令-用於安裝軟件包,解決依賴包關係
yum( Yellow dog Updater, Modified)是一個在Fedora和RedHat以及SUSE中的Shell前端軟件包管理器。
基於RPM包管理,能夠從指定的服務器自動下載RPM包並且安裝,可以自動處理依賴性關係,並且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝。
yum提供了查找、安裝、刪除某一個、一組甚至全部軟件包的命令,而且命令簡潔而又好記。

yum語法格式:
yum [options] [command] [package ...]
●options:可選,選項包括-h(幫助),-y(當安裝過程提示選擇全部爲“yes”—),-q(不顯示安裝的過程)等等。
●command:要進行的操作。
●package:操作的對象。

yum常用命令
●1.列出所有可更新的軟件清單命令:yum check-update
●2.更新所有軟件命令:yum update
●3.僅安裝指定的軟件命令:yum install <package_name>
●4.僅更新指定的軟件命令:yum update <package_name>
●5.列出所有可安裝的軟件清單命令:yum list
●6.刪除軟件包命令:yum remove <package_name>
●7.查找軟件包 命令:yum search <keyword>
●8.清除緩存命令:
○yum clean packages: 清除緩存目錄下的軟件包
○yum clean headers: 清除緩存目錄下的 headers
○yum clean oldheaders: 清除緩存目錄下舊的 headers
○yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除緩存目錄下的軟件包及舊的headers
實例1:安裝git

yum install -y git

2、man命令-用於命令的幫助
實例1:查看yum命令的幫助文檔

man yum #查看yum命令的幫助文檔

yum(8) yum(8)

NAME
yum - Yellowdog Updater Modified

SYNOPSIS
yum [options] [command] [package ...]

3、ls命令-用於顯示指定工作目錄之內容(列出目前工作目錄所含之文件及子目錄)
ls語法格式:
ls [-alrtAFR] [name...]
參數說明:
-a:顯示所有文件及目錄,包含隱藏文件及目錄
-l:列出文件權限、擁有者、文件大小、日期等詳細信息
-r:將文件以相反次序顯示(原定依英文字母次序)
-t:將文件依建立時間之後次序列出

實例1:

ls -lrta

-rw-------. 1 root root 0 Dec 4 02:57 yum.log
drwxr-xr-x 3 root root 4096 Dec 18 06:34 123
dr-xr-xr-x. 24 root root 4096 Dec 25 01:35 ..
drwxrwxrwt. 5 root root 4096 Dec 27 09:11 .

4、cat命令-用於連接文件並打印到標準輸出設備上
cat語法格式:
cat [-AbeEnstTuv] [--help] [--version] fileName
參數說明:
-b 或 --number:由1開始對所有輸出的行數編號
-n 或 --number-nonblank:和-n相似,只不過對空白行不編號

實例1:

cat -n test1

 1  dfkljdlfjldjfldjlkjl
 2  dfkljdljfl
 3

實例2:

cat -b test1

 1  dfkljdlfjldjfldjlkjl
 2  dfkljdljfl

5、touch命令-用於修改文件或目錄的時間屬性,包括存取時間和更改時間。若文件不存在,系統會建立一個新的文件
touch語法格式:
touch [-acfm][-d<日期時間>][-r<參考文件或目錄>] [-t<日期時間>][--help][--version][文件或目錄…]
參數說明:
-a:更改文件的讀取時間記錄
-c:假如目的文件不存在,不會建立新的文件。與--no-create的效果一樣
-m:更改文件的修改時間記錄

實例1:

touch testfile

6、mkdir命令-用於創建目錄之子目錄
mkdir語法格式:
mkdir [-p] dirName
參數說明:
-p:目錄不存在 ,遞歸創建目錄及子目錄

實例1:

mkdir -p /test1/{a,b,c} #創建test1目錄及a,b,c子目錄

/test1/
├── a
├── b
└── c

7、file命令-用於辨識文件類型
file語法格式:
file [-bcLvz][-f <名稱文件>][-m <魔法數字文件>...][文件或目錄...]
參數說明:
-b:列出辨識結果時,不顯示文件名稱
-v:顯示版本信息

實例1:

file /tmp

/tmp: sticky directory

8、chattr命令-用於改變文件屬性
這項指令可以改變存放在ext2文件系統上的文件或目錄屬性民,這些屬性共有以下8種模式:
a:讓文件或目錄僅花附加用途
b:不更新文件或目錄 的最後存取時間
c:將文件或目錄壓縮後存放
d:將文件或目錄排除在傾倒操作之外
i:不得任意更改文件或目錄
s:保密性刪除文件或目錄
S:即時更新文件或目錄
u:預防意外刪除

chattr語法格式:
chattr [-RV][-v<版本編號>][+/-/=<屬性>][文件或目錄...]
參數說明:
-R:遞歸處理,將指定目錄下的所有文件及子目錄一併處理
-v<版本編號>:設置文件或目錄版本
-V:顯示指令執行過程
+<屬性>:開啓文件或目錄的該項屬性
-<屬性>:關閉文件或目錄的該項屬性
=<屬性>:指定文件或目錄的該項屬性

實例1:

lsattr /test1/resolv.conf

-------------e- /test1/resolv.conf

chattr +i /test1/resolv.conf #防止系統中某個關鍵文件被修改或刪除

lsattr /test1/resolv.conf

----i--------e- /test1/resolv.conf

rm -f /test1/resolv.conf

rm: cannot remove `/test1/resolv.conf': Operation not permitted

9、diff命令-用於比較文件的差異
diff語法格式:
diff [-C <行數>][文件或目錄1][文件或目錄2]
參數說明:
-c:顯示全部內容,並標出不同之處

實例1:

diff testfile1 testfile2

10、more命令-用於查看文件內容,類似於cat,不過會以一頁一頁的形式顯示,更方便使用逐頁閱讀,而最基本的指令就是按空白鍵(space)就往下一頁顯示,按b鍵就往回(back)一頁顯示,而且還有搜尋字串的功能(與vi相似),使用中的說明文件,請按h
more語法格式:
more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..]
參數說明:
-s:當遇到有連續現行以上的空白行,就代換爲一行的空白行

實例1:

more -s testfile

11、less命令-與more類似,但使用less可以隨意瀏覽文件,而more僅能向前移動,卻不能向後移動,而且less在查看之前不會加載整個文件
less語法格式:
less [參數] 文件
參數說明:
-i:忽略搜索時的大小寫
-m:顯示類似more命令的百分比
-N:顯示每行的行號
-s:顯示連續空行爲一行
/字符串:向下搜索“字符串”的功能
?字符串:向上搜索“字符串”的功能
n:重複前一個搜索(與/或?有關)
N:反向重複前一個搜索(與/或?有關)
b:向後翻一頁
d:向後翻半頁
h:顯示幫助界面
Q:退出less命令
空格鍵:滾動一行
回車鍵:滾動一頁

實例1:

less testfile1

附加備註
1.全屏導航
●ctrl + F - 向前移動一屏
●ctrl + B - 向後移動一屏
●ctrl + D - 向前移動半屏
●ctrl + U - 向後移動半屏
2.單行導航
●j - 向前移動一行
●k - 向後移動一行
3.其它導航
●G - 移動到最後一行
●g - 移動到第一行
●q / ZZ - 退出 less 命令
4.其它有用的命令
●v - 使用配置的編輯器編輯當前文件
●h - 顯示 less 的幫助文檔
●&pattern - 僅顯示匹配模式的行,而不是整個文件
5.標記導航
當使用 less 查看大文件時,可以在任何一個位置作標記,可以通過命令導航到標有特定標記的文本位置:
●ma - 使用 a 標記文本的當前位置
●'a - 導航到標記 a 處

12、chgrp命令-用於文件或目錄的所屬組
chgrp語法格式:
chgrp [-cfhRv][文件或目錄...]
參數說明:
-v或--verbose:顯示指令執行過程
-R或--recursive:遞歸處理,將指定目錄下的所有文件及子目錄一併處理

實例1:

chgrp -v cudo testfile1 #改變文件的屬組

實例2:

chgrp -R cudo dirName1 #遞歸改變目錄下所有的文件及子目錄的屬組

13、chmod命令-用於文件或目錄的擁有者、屬組、其他
chmod語法格式:
chmod [-cfvR] mode file...
參數說明:
mode:權限設定字串,格式如下:
[ugoa…] [[+-=][rwxX]...][,...]
其中:
u:表示該 文件的擁有者,g表示與該文件的擁有者屬於同一個組(group),o表示其他以外的人,a表示所有(ugo)
+:表示增加權限,-表示取消權限,=表示唯一設定權限
r:表示可讀取,w表示可寫入,x表示可執行,X表示人有當該文件是個子目錄或者該文件已經被設定過爲可執行
其他參數說明:
-v:顯示權限變更的詳細信息
-R:對目前目錄下的所有文件與子目錄進行相同的權限變更

實例1:

chmod ugo+r testfile1.txt #testfile1.txt文件擁有者、屬組、其他人增加可讀取權限

實例2:

chmod u+x,o-w testfile2.txt #testfile2.txt文件擁有者增加可執行權限,其他人取消可讀取權限

14、chown命令-用於將文件的擁有者改爲指定的用戶或組,用戶可以是用戶名或者用戶ID,組可以是組名或者組ID,文件是以空格分開的要改變權限的文件列表,支持通配符
chown語法格式:
chown [-cfhvR] user[:group] file...
參數說明:
-v:顯示擁有者變更的詳細資料
-R:對目前目錄下的所有文件與子目錄進行相同的擁有者變更
user:新的文件擁有者的使用者ID或用戶名
group:新的文件擁有者的使用者組ID或組名

實例1:
chown -R user1:group1 *

15、find命令-用於在指定目錄下查找文件
find語法格式:
find path -option [ -print ] [ -exec -ok command ] {} ;
參數說明:
find 根據下列規則判斷 path 和 expression,在命令列上第一個 - ( ) , ! 之前的部份爲 path,之後的是 expression。如果 path 是空字串則使用目前路徑,如果 expression 是空字串則使用 -print 爲預設 expression。
expression 中可使用的選項有二三十個之多,在此只介紹最常用的部份。
-mount, -xdev : 只檢查和指定目錄在同一個文件系統下的文件,避免列出其它文件系統中的文件
-amin n : 在過去 n 分鐘內被讀取過
-anewer file : 比文件 file 更晚被讀取過的文件
-atime n : 在過去 n 天過讀取過的文件
-cmin n : 在過去 n 分鐘內被修改過
-cnewer file :比文件 file 更新的文件
-ctime n : 在過去 n 天過修改過的文件
-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名稱是 name
-ipath p, -path p : 路徑名稱符合 p 的文件,ipath 會忽略大小寫
-name name, -iname name : 文件名稱符合 name 的文件。iname 會忽略大小寫
-size n : 文件大小 是 n 單位,b 代表 512 位元組的區塊,c 表示字元數,k 表示 kilo bytes,w 是二個位元組。-type c : 文件類型是 c 的文件。
d: 目錄
c: 字型裝置文件
b: 區塊裝置文件
p: 具名貯列
f: 一般文件
l: 符號連結
s: socket
-pid n : process id 是 n 的文件
你可以使用 ( ) 將運算式分隔,並使用下列運算。
exp1 -and exp2
! expr
-not expr
exp1 -or exp2
exp1, exp2

實例1:

find . -name “*.c” #查找當前目錄及其子目錄下所有文件名後綴爲c的文件列出來

實例2:

find . -type f #查找當前目錄及其子目錄下所有文件

實例3:

find . -mtime +30 #查找當前目錄及其子目錄下一個月前的目錄和文件

實例4:

find /var/logs -type f -mtime +7 -ok rm {} \; #查找/var/logs目錄中更改時間在7日以前的普通文件,並在刪除之前詢問它們

實例5:

find . -type f -perm 644 -exec ls -l {} \; #查找當前目錄及其子目錄文件屬主具有讀、寫權限,並且文件所性組的用戶和其他用戶具有讀取權限的文件

16、cut命令-用於顯示每行從開頭算起 num1 到 num2 的文字
cut語法格式:
cut [-bn] [file]
cut [-c] [file]
cut [-df] [file]
參數說明:
-b:以字節爲單位進行分割。這些字節位置將忽略多字節符邊界,除非也指定了-n標誌
-n:取消分割多字節字符。僅和-b標誌一起使用
-c:以字符爲單位進行分割
-d:自定義分隔符,默認爲製表符
-f:與-d標誌一起使用,指定顯示哪個區域

實例1:

who |cut -b 3 #提取每一行的第3個字節

17、ln命令-用於鏈接文件或目錄(link),類似於windows的快捷方式
ln語法格式:
ln [參數][源文件或目錄][目標文件或目錄]
參數說明:
-s:軟鏈接(符號鏈接)
-v:顯示詳細的處理過程

命令功能:
Linux文件系統中,有所謂的鏈接(link),而鏈接又可分爲兩種:硬鏈接(hard link)與軟鏈接(symbolic link),硬鏈接的意思是一個檔案可以有多個名稱,而軟鏈接的方式則是產生一個特殊的檔案,該檔案的內容是指向另一個檔案的位置。硬鏈接是存在同一個文件系統中,而軟鏈接卻可以跨不同的文件系統。
不論是硬鏈接或者是軟鏈接都不會將原本的檔案複製一份,只會佔用非常少量的磁盤空間。
軟鏈接:
●軟鏈接,以路徑的形式存在,類似於windows操作系統中的快捷方式
●軟鏈接可以跨文件系統,硬鏈接不可以
●軟鏈接可以對一個不存在的文件進行鏈接
●軟鏈接可以對目錄進行鏈接
硬鏈接:
●硬鏈接,以文件副本的形式存在 ,但不佔用實際磁盤空間
●不允許給目錄創建硬鏈接
●硬鏈接只有在同一個文件系統中才能創建

注意:當創建了軟鏈接目錄時,要刪除軟鏈接目錄需要注意
ln -sv dirname1/ hard_dirname1
rm -rf hard_dirname1 #直接刪除硬鏈接,不刪除硬鏈接內容
rm -rf hard_dirname1/ #刪除硬鏈接內容,不刪除硬鏈接

實例1:

ln -sv file1 link1 #爲file1文件創建軟鏈接link1,如果file1丟失,link1將失效

18、mv命令-用於文件或目錄重命名、或將文件或目錄移動到其它位置
mv語法格式:
mv [options] source dest
mv [options] source... directory
參數說明:
-i:指定目錄已有同名文件,則先詢問是否覆蓋舊文件
-f:在mv操作要覆蓋某已有的目標文件時不給任何提示

mv參數設置與運行結果
命令格式 運行結果
mv 文件名 文件名 將源文件名改爲目標文件名
mv 文件名 目錄名 將文件移動到目標目錄
mv 目錄名 目錄名 目標目錄已存在,將源目錄
移動到目標目錄;目標
目錄不存在則改名
mv 目錄名 文件名 出錯

實例1:

mv aaa bbb #將文件aaa重命名爲bbb

19、rm命令-用於刪除一個文件或目錄
rm語法格式:
rm [options] name...
參數說明:
-i:刪除前詢問確認
-f:直接刪除,不提示
-r:將目錄及以下所有文件及子目錄全部刪除

實例1:

rm test.txt

實例2:

rm -r /test1

20、split命令-用於將一個文件分割成數個
split語法格式:
split [-<行數>][-b <字節>][-C <字節>][-l <行數>][要切割的文件][輸出文件名]
參數說明:
-b<字節>:指定每多少字節切成一個小文件
-C<字節>:與參數”-b“相似,但是在切割時儘量維持每行的完整性
[輸出文件名]:設置切割後文件的前置文件名,split會自動在前置文件名後再加上編號

實例1:

split -6 test1 test1_split #將test1文件每6行進行切割一個文件,切割後的文件名前置爲test1_splitxx

21、cp命令-用於複製文件或目錄
cp語法格式:
cp [options] source dest
參數說明:
-a:複製目錄時使用,它保留鏈接、文件屬性、並複製目錄下的所有內容
-d:複製時保留鏈接
-f:覆蓋已經存在的目標文件而不給出提示
-i:與-f相反
-p:除複製文件的內容外,兩袖清風把修改時間和訪問權限也複製到新文件中
-r:若給出的源文件是一個目錄文件,此時將複製該目錄下所有的子目錄和文件

實例1:

cp -rp dirname1/ newname1 #將當前目錄”dirname1“下的所有文件複製到新目錄”newname1”下

22、which命令-用於查找命令的絕對路徑
which語法格式:
which [文件...]

實例1:

which touch

/bin/touch

23、tree命令-用於以樹狀圖形列出目錄的內容
tree語法格式:
tree [-aACdDfFgilnNpqstux][目錄...]
參數說明:
-a:顯示所有文件和目錄

實例1:

tree -a /test1/

/test1/
├── a
│ ├── resolv.conf
│ ├── splitaa
│ └── splitab
├── b
│ └── resolv.conf
├── c
└── resolv.conf

24、scp命令-用於基於ssh登錄進行遠程拷貝文件或目錄(secure copy)
scp語法格式:
scp [可選參數] file_source file_target
參數說明:
-r:遞歸複製整個目錄
-p:保留原文件的修改時間,訪問時間和訪問權限
-P port:注意是大寫的P,port是指定數據傳輸用到的端口號

實例1:
scp -rp dir_source dir_target

實例2:
scp -P 22 file_source file_target

25、cd命令-用於切換目錄
cd語法格式:
cd [dirName]

實例1:
cd /tmp

26、grep命令-用於查找文件裏符合條件的字符串
grep語法格式:
grep [-abcEFGhHilLnqrsvVwxy][-A<顯示列數>][-B<顯示列數>][-C<顯示列數>][-d<進行動作>][-e<範本樣式>][文件或目錄...]
參數說明:
-A<顯示列數>:符合條件後,顯示該列之後的內容
-B<顯示列數>:符合條件後,顯示該列之前的內容
-C<顯示列數>:符合條件後,顯示該列之前、之後的內容
-i:忽略大小寫
-E或--extended-regexp:將範本樣式爲延伸的普通表示法來使用
-r:遞歸查找文件內容
-l:列出文件內容符合指定的範本樣式的文件名稱

實例1:

grep -r dirname1

實例2:

ps -ef |grep 22 # “|”管道過濾,將前面的結果輸出給後面的命令

27、sort命令-用於將文本文件內容加以排序
sort語法格式:
sort [-bcdfimMnr][-o<輸出文件>][-t<分隔字符>][文件]
參數說明:
-n:依照數值的大小排序
-r:以相反的順序來排序

實例1:

sort -nr testfile #反向排序

28、uniq命令-用於檢查及刪除文本文件中重複出現的行列
uniq語法格式:
uniq [-cdu][-f<欄位>][-s<字符位置>][-w<字符位置>][輸入文件][輸出文件]
參數說明:
-c:在每列旁邊顯示該行重複出現的次數
-u:僅顯示出一次的行列

實例1:

sort -nr test.txt |uniq -c #uniq命令要結合sort排序命令一起使用

29、wc命令-用於計算字數
wc語法格式:
wc [-clw] [文件...]
參數說明:
-c:只顯示Bytes數
-l:只顯示行數
-w:只顯示字數

實例1:

wc -wcl testfile1

30、df命令-用於查看顯示當前在Linux系統上的文件系統的磁盤使用情況統計
df語法格式:
df [選項]... [FILE]...
參數說明:
-i:列出inode,不列出已使用的block
-h:以k、m、g單位顯示
-T:顯示文件系統類型

實例1:

df -h

Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_ever225pythontest-lv_root
50G 11G 37G 23% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
/dev/sda1 477M 40M 412M 9% /boot
/dev/mapper/vg_ever225pythontest-lv_home
45G 52M 43G 1% /home

31、du命令-用於顯示目錄或文件的大小
du語法格式:
du [-abcDhHklmsSx][-L <符號連接>][-X <文件>][--block-size][--exclude=<目錄或文件>][--max-depth=<目錄層數>][目錄或文件]
-s:僅顯示總計
-h:以K、M、G爲單位

實例1:

du -sh /tmp

32、pwd命令-用於打印當前路徑
實例1:

pwd

33、mount命令-用於掛載Linux系統外的文件
mount語法格式:
mount [-hV]
mount -a [-fFnrsvw] [-t vfstype]
mount [-fnrsvw] [-o options [,...]] device | dir
mount [-fnrsvw] [-t vfstype] [-o options] device dir
參數說明:
-a:將/etc/fstab中定義的所有檔案系統掛載上
-t:指定檔案系統文件類型,通常不必指定,mount會自動選擇正確的文件類型

實例1:

mount /dev/sda1 /mnt

34、umount命令-用於卸載Linux目錄中的文件系統
umount語法格式:
umount [-ahnrvV][-t <文件系統類型>][文件系統]
參數說明:
-a:卸載/etc/fstab中記錄的所有文件系統
-t<文件系統類型>:僅卸載選項中所指定的文件系統

實例1:
umount /mnt

35、stat命令-用於顯示inode內容
stat語法格式:
stat [文件或目錄]

實例1:

stat test.txt

File: `test.txt'
Size: 19 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 917515 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-12-28 15:53:38.738836486 +0800
Modify: 2017-12-28 15:53:36.347837130 +0800
Change: 2017-12-28 15:53:36.348837183 +080

36、tar命令-用於備份文件
tar語法格式:
tar [參數] [壓縮文件] [文件或目錄]
參數說明:
-z或--gzip或--ungzip:通過gzip指令處理備份文件
-j:通過bzip2指令處理備份文件
-c或--create:建立新的備份文件
-x或--extract或--get:從備份文件中還原文件
-v或--verbose:顯示指令執行過程
-f<備份文件>或--file=<備份文件>:指定備份文件

實例1:

tar -zcvf test.tar.gz test #壓縮文件

實例2:

tar -zxvf test.tar.gz #解壓文件

37、useradd命令-用於建立用戶賬號
UID分配方法:
0:root用戶ID
1~499:大多是系統服務或軟件廠商自定義的ID
500開始往後爲普通用戶ID

useradd語法格式:
useradd [-mMnr][-c <備註>][-d <登入目錄>][-e <有效期限>][-f <緩衝天數>][-g <羣組>][-G <羣組>][-s <shell>][-u <uid>][用戶帳號]
參數說明:
-c<備註>:加上備註文字。備註文字會保存在passwd的備註欄位中
-d<登錄目錄>:指定用戶登入時的啓始目錄
-D:變更預設值
-e<有效期限>:指定賬號的有效期限
-f<緩衝天數>:指定在密碼過期後多少天即關閉該賬號
-g<羣組>:指定用戶所屬的羣組
-G<羣組>:指定用戶所屬的附加羣組
-m:自動建立用戶的登入目錄
-M:不要自動建立用戶的登入目錄
-n:取消建立以用戶名稱爲名的羣組
-r:建立系統賬號
-s<shell>:指定用戶登入後使用的shell
-u<uid>:指定用戶UID

實例1:

useradd tt #添加普通用戶

實例2:

useradd caojh -u 500 #建立用戶並指定ID號

38、userdel命令-用於刪除用戶賬號
userdel語法格式:
userdel [-r][用戶帳號]
參數說明:
-r:刪除用戶登入目錄以及目錄中所有文件

實例1:

userdel haha

39、usermod命令-用於修改用戶賬號
usermod語法格式:
usermod [-LU][-c <備註>][-d <登入目錄>][-e <有效期限>][-f <緩衝天數>][-g <羣組>][-G <羣組>][-l <帳號名稱>][-s <shell>][-u <uid>][用戶帳號]
參數說明:
-c<備註>:修改用戶賬號的備註文字
-d<登入目錄>:修改用戶登入時的目錄
-e<有效期限>:修改賬號的有效期限
-f<緩衝天數>:修改在密碼過期後多少天即關閉該賬號
-g<羣組>:修改用戶所屬的羣組
-G<羣組>:修改用戶所屬的附加羣組
-l<賬號名稱>:修改用戶賬號名稱
-L:鎖定用戶密碼,使密碼無效
-s<shell>:修改用戶登入後所使用的shell
-u<uid>:修改用戶UID
-U:解除密碼鎖定

實例1:

usermod -d /home/haha root

40、dd命令-用於讀取、轉換並輸出數據
參數說明:
if=文件名:輸入文件名,缺省爲標準輸入。即指定源文件
of=文件名:輸出文件名,缺省爲標準輸出。即指定目的文件
bs=bytes:同時設置讀入/輸出的塊大小爲bytes個字節

實例1:

dd if=boot.img of=/dev/fd0 bs=1440k #在Linux下製作啓動盤

41、ps命令-用於顯示當前進程(process)的狀態
ps語法格式:
ps [options] [--help]
參數說明:

●ps 的參數非常多, 在此僅列出幾個常用的參數並大略介紹含義
●-A 列出所有的行程
●-w 顯示加寬可以顯示較多的資訊
●-au 顯示較詳細的資訊
●-aux 顯示所有包含其他使用者的行程
●au(x) 輸出格式 :
●USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
●USER: 行程擁有者
●PID: pid
●%CPU: 佔用的 CPU 使用率
●%MEM: 佔用的記憶體使用率
●VSZ: 佔用的虛擬記憶體大小
●RSS: 佔用的記憶體大小
●TTY: 終端的次要裝置號碼 (minor device number of tty)
●STAT: 該行程的狀態:
●D: 不可中斷的靜止 (通悸□□縝b進行 I/O 動作)
●R: 正在執行中
●S: 靜止狀態
●T: 暫停執行
●Z: 不存在但暫時無法消除
●W: 沒有足夠的記憶體分頁可分配
●<: 高優先序的行程
●N: 低優先序的行程
●L: 有記憶體分頁分配並鎖在記憶體內 (實時系統或捱A I/O)
●START: 行程開始時間
●TIME: 執行的時間
●COMMAND:所執行的指令
實例1:

ps -A #顯示進程信息

實例2:

ps -ef #顯示所有命令,連帶命令行

42、top命令-用於實時顯示進程(process)的狀態
top語法格式:

top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]
參數說明:
●d : 改變顯示的更新速度,或是在交談式指令列( interactive command)按 s
●q : 沒有任何延遲的顯示速度,如果使用者是有 superuser 的權限,則 top 將會以最高的優先序執行
●c : 切換顯示模式,共有兩種模式,一是隻顯示執行檔的名稱,另一種是顯示完整的路徑與名稱S : 累積模式,會將己完成或消失的子行程 ( dead child process ) 的 CPU time 累積起來
●s : 安全模式,將交談式指令取消, 避免潛在的危機
●i : 不顯示任何閒置 (idle) 或無用 (zombie) 的行程
●n : 更新的次數,完成後將會退出 top
●b : 批次檔模式,搭配 "n" 參數一起使用,可以用來將 top 的結果輸出到檔案內

實例1:

top #實時顯示進程信息

實例2:

top -n 1 #設備信息更新次數

43、awk命令-是一種處理文本文件的語言,是一個強大的文本分析工具
awk語法格式:
awk [選項參數] 'script' var=value file(s)

awk [選項參數] -f scriptfile var=value file(s)

●-F fs or --field-separator fs
●指定輸入文件折分隔符,fs是一個字符串或者是一個正則表達式,如-F:。
●-v var=value or --asign var=value
●賦值一個用戶定義變量。
●-f scripfile or --file scriptfile
●從腳本文件中讀取awk命令。
●-mf nnn and -mr nnn
●對nnn值設置內在限制,-mf選項限制分配給nnn的最大塊數目;-mr選項限制記錄的最大數目。這兩個功能是Bell實驗室版awk的擴展功能,在標準awk中不適用。
●-W compact or --compat, -W traditional or --traditional
●在兼容模式下運行awk。所以gawk的行爲和標準的awk完全一樣,所有的awk擴展都被忽略。
●-W copyleft or --copyleft, -W copyright or --copyright
●打印簡短的版權信息。
●-W help or --help, -W usage or --usage
●打印全部awk選項和每個選項的簡短說明。
●-W lint or --lint
●打印不能向傳統unix平臺移植的結構的警告。
●-W lint-old or --lint-old
●打印關於不能向傳統unix平臺移植的結構的警告。
●-W posix
●打開兼容模式。但有以下限制,不識別:/x、函數關鍵字、func、換碼序列以及當fs是一個空格時,將新行作爲一個域分隔符;操作符=不能代替^和^=;fflush無效。
●-W re-interval or --re-inerval
●允許間隔正則表達式的使用,參考(grep中的Posix字符類),如括號表達式[[:alpha:]]。
●-W source program-text or --source program-text
●使用program-text作爲源代碼,可與-f命令混用。
●-W version or --version
●打印bug報告信息的版本。
基本用法
log.txt文本內容如下:
2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo
用法一:
awk '{[pattern] action}' {filenames} # 行匹配語句 awk '' 只能用單引號
實例:

每行按空格或TAB分割,輸出文本中的1、4項

$ awk '{print $1,$4}' log.txt

2 a
3 like
This's
10 orange,apple,mongo

格式化輸出

$ awk '{printf "%-8s %-10s\n",$1,$4}' log.txt

2 a
3 like
This's
10 orange,apple,mongo

用法二:
awk -F #-F相當於內置變量FS, 指定分割字符
實例:

使用","分割

$ awk -F, '{print $1,$2}' log.txt

2 this is a test
3 Are you like awk
This's a test
10 There are orange apple

或者使用內建變量

$ awk 'BEGIN{FS=","} {print $1,$2}' log.txt

2 this is a test
3 Are you like awk
This's a test
10 There are orange apple

使用多個分隔符.先使用空格分割,然後對分割結果再使用","分割

$ awk -F '[ ,]' '{print $1,$2,$5}' log.txt

2 this test
3 Are awk
This's a
10 There apple
用法三:
awk -v # 設置變量
實例:
$ awk -va=1 '{print $1,$1+a}' log.txt

2 3
3 4
This's 1
10 11
$ awk -va=1 -vb=s '{print $1,$1+a,$1b}' log.txt

2 3 2s
3 4 3s
This's 1 This'ss
10 11 10s
用法四:
awk -f {awk腳本} {文件名}
實例:
$ awk -f cal.awk log.txt

運算符
運算符 描述
= += -= *= /= %= ^= **= 賦值
?: C條件表達式
|| 邏輯或
&& 邏輯與
~ ~! 匹配正則表達式和不匹配正則表達式
< <= > >= != == 關係運算符
空格 連接

    • 加,減
  • / % 乘,除與求餘
    • ! 一元加,減和邏輯非
      ^ *** 求冪
      ++ -- 增加或減少,作爲前綴或後綴
      $ 字段引用
      in 數組成員
      過濾第一列大於2的行
      $ awk '$1>2' log.txt #命令
      #輸出
      3 Are you like awk
      This's a test
      10 There are orange,apple,mongo
      過濾第一列等於2的行
      $ awk '$1==2 {print $1,$3}' log.txt #命令
      #輸出
      2 is
      過濾第一列大於2並且第二列等於'Are'的行
      $ awk '$1>2 && $2=="Are" {print $1,$2,$3}' log.txt #命令
      #輸出
      3 Are you

內建變量
變量 描述
\$n 當前記錄的第n個字段,字段間由FS分隔
\$0 完整的輸入記錄
ARGC 命令行參數的數目
ARGIND 命令行中當前文件的位置(從0開始算)
ARGV 包含命令行參數的數組
CONVFMT 數字轉換格式(默認值爲%.6g)ENVIRON環境變量關聯數組
ERRNO 最後一個系統錯誤的描述
FIELDWIDTHS 字段寬度列表(用空格鍵分隔)
FILENAME 當前文件名
FNR 各文件分別計數的行號
FS 字段分隔符(默認是任何空格)
IGNORECASE 如果爲真,則進行忽略大小寫的匹配
NF 輸入字段分割符
NR 已經讀出的記錄數,就是行號,從1開始
OFMT 數字的輸出格式(默認值是%.6g)
OFS 輸出記錄分隔符(輸出換行符),輸出時用指定的符號代替換行符
ORS 輸出記錄分隔符(默認值是一個換行符)
RLENGTH 由match函數所匹配的字符串的長度
RS 記錄分隔符(默認是一個換行符)
RSTART 由match函數所匹配的字符串的第一個位置
SUBSEP 數組下標分隔符(默認值是/034)
$ awk 'BEGIN{printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n","FILENAME","ARGC","FNR","FS","NF","NR","OFS","ORS","RS";printf "---------------------------------------------\n"} {printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n",FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS}' log.txt
FILENAME ARGC FNR FS NF NR OFS ORS RS

log.txt 2 1 5 1
log.txt 2 2 5 2
log.txt 2 3 3 3
log.txt 2 4 4 4
$ awk -F\' 'BEGIN{printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n","FILENAME","ARGC","FNR","FS","NF","NR","OFS","ORS","RS";printf "---------------------------------------------\n"} {printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n",FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS}' log.txt
FILENAME ARGC FNR FS NF NR OFS ORS RS

log.txt 2 1 ' 1 1
log.txt 2 2 ' 1 2
log.txt 2 3 ' 2 3
log.txt 2 4 ' 1 4

輸出順序號 NR, 匹配文本行號

$ awk '{print NR,FNR,$1,$2,$3}' log.txt

1 1 2 this is
2 2 3 Are you
3 3 This's a test
4 4 10 There are

指定輸出分割符

$ awk '{print $1,$2,$5}' OFS=" $ " log.txt

2 $ this $ test
3 $ Are $ awk
This's $ a $
10 $ There $

使用正則,字符串匹配

輸出第二列包含 "th",並打印第二列與第四列

$ awk '$2 ~ /th/ {print $2,$4}' log.txt

this a
~ 表示模式開始。// 中是模式。

輸出包含"re" 的行

$ awk '/re/ ' log.txt

3 Are you like awk
10 There are orange,apple,mongo

忽略大小寫
$ awk 'BEGIN{IGNORECASE=1} /this/' log.txt

2 this is a test
This's a test

模式取反
$ awk '$2 !~ /th/ {print $2,$4}' log.txt

Are like
a
There orange,apple,mongo
$ awk '!/th/ {print $2,$4}' log.txt

Are like
a
There orange,apple,mongo

awk腳本
關於awk腳本,我們需要注意兩個關鍵詞BEGIN和END。
●BEGIN{ 這裏面放的是執行前的語句 }
●END {這裏面放的是處理完所有的行後要執行的語句 }
●{這裏面放的是處理每一行時要執行的語句}
假設有這麼一個文件(學生成績表):
$ cat score.txt
Marry 2143 78 84 77
Jack 2321 66 78 45
Tom 2122 48 77 71
Mike 2537 87 97 95
Bob 2415 40 57 62
我們的awk腳本如下:
$ cat cal.awk
#!/bin/awk -f
#運行前
BEGIN {
math = 0
english = 0
computer = 0

printf "NAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL\n"
printf "---------------------------------------------\n"

}
#運行中
{
math+=$3
english+=$4
computer+=$5
printf "%-6s %-6s %4d %8d %8d %8d\n", $1, $2, $3,$4,$5, $3+$4+$5
}
#運行後
END {
printf "---------------------------------------------\n"
printf " TOTAL:%10d %8d %8d \n", math, english, computer
printf "AVERAGE:%10.2f %8.2f %8.2f\n", math/NR, english/NR, computer/NR
}
我們來看一下執行結果:
$ awk -f cal.awk score.txt
NAME NO. MATH ENGLISH COMPUTER TOTAL

Marry 2143 78 84 77 239
Jack 2321 66 78 45 189
Tom 2122 48 77 71 196
Mike 2537 87 97 95 279
Bob 2415 40 57 62 159

TOTAL: 319 393 350
AVERAGE: 63.80 78.60 70.00

另外一些實例
AWK的hello world程序爲:
BEGIN { print "Hello, world!" }
計算文件大小
$ ls -l *.txt | awk '{sum+=$6} END {print sum}'

666581
從文件中找出長度大於80的行
awk 'length>80' log.txt
打印九九乘法表
seq 9 | sed 'H;g' | awk -v RS='' '{for(i=1;i<=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"\n":"\t")}'
更多詳細內容可以查看 AWK 官方手冊:http://www.gnu.org/software/gawk/manual/gawk.html

44、sed命令-利用script來處理文本文件,編輯文本文件
sed語法格式:
sed [-hnV][-e<script>][-f<script文件>][文本文件]
參數說明:
●-e<script>或--expression=<script> 以選項中指定的script來處理輸入的文本文件。
●-f<script文件>或--file=<script文件> 以選項中指定的script文件來處理輸入的文本文件。
●-h或--help 顯示幫助。
●-n或--quiet或--silent 僅顯示script處理後的結果。
●-V或--version 顯示版本信息。
動作說明 :
●a :新增, a 的後面可以接字串,而這些字串會在新的一行出現(目前的下一行)~
●c :取代, c 的後面可以接字串,這些字串可以取代 n1,n2 之間的行!
●d :刪除,因爲是刪除啊,所以 d 後面通常不接任何咚咚;
●i :插入, i 的後面可以接字串,而這些字串會在新的一行出現(目前的上一行);
●p :列印,亦即將某個選擇的數據印出。通常 p 會與參數 sed -n 一起運行~
●s :取代,可以直接進行取代的工作哩!通常這個 s 的動作可以搭配正規表示法!例如 1,20s/old/new/g 就是啦!
實例
在testfile文件的第四行後添加一行,並將結果輸出到標準輸出,在命令行提示符下輸入如下命令:
sed -e 4a\newLine testfile
首先查看testfile中的內容如下:
$ cat testfile #查看testfile 中的內容
HELLO LINUX!
Linux is a free unix-type opterating system.
This is a linux testfile!
Linux test
使用sed命令後,輸出結果如下:
$ sed -e 4a\newline testfile #使用sed 在第四行後添加新字符串
HELLO LINUX! #testfile文件原有的內容
Linux is a free unix-type opterating system.
This is a linux testfile!
Linux test
newline
以行爲單位的新增/刪除
將 /etc/passwd 的內容列出並且列印行號,同時,請將第 2~5 行刪除!
[root@www ~]# nl /etc/passwd | sed '2,5d'
1 root:x:0:0:root:/root:/bin/bash
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
.....(後面省略).....
sed 的動作爲 '2,5d' ,那個 d 就是刪除!因爲 2-5 行給他刪除了,所以顯示的數據就沒有 2-5 行羅~ 另外,注意一下,原本應該是要下達 sed -e 纔對,沒有 -e 也行啦!同時也要注意的是, sed 後面接的動作,請務必以 '' 兩個單引號括住喔!
只要刪除第 2 行
nl /etc/passwd | sed '2d'
要刪除第 3 到最後一行
nl /etc/passwd | sed '3,$d'
在第二行後(亦即是加在第三行)加上『drink tea?』字樣!
[root@www ~]# nl /etc/passwd | sed '2a drink tea'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
drink tea
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
.....(後面省略).....
那如果是要在第二行前
nl /etc/passwd | sed '2i drink tea'
如果是要增加兩行以上,在第二行後面加入兩行字,例如『Drink tea or .....』與『drink beer?』
[root@www ~]# nl /etc/passwd | sed '2a Drink tea or ......\

drink beer ?'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
Drink tea or ......
drink beer ?
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
.....(後面省略).....
每一行之間都必須要以反斜槓『 \ 』來進行新行的添加喔!所以,上面的例子中,我們可以發現在第一行的最後面就有 \ 存在。
以行爲單位的替換與顯示
將第2-5行的內容取代成爲『No 2-5 number』呢?
[root@www ~]# nl /etc/passwd | sed '2,5c No 2-5 number'
1 root:x:0:0:root:/root:/bin/bash
No 2-5 number
6 sync:x:5:0:sync:/sbin:/bin/sync
.....(後面省略).....
透過這個方法我們就能夠將數據整行取代了!
僅列出 /etc/passwd 文件內的第 5-7 行
[root@www ~]# nl /etc/passwd | sed -n '5,7p'
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
</p><p>
可以透過這個 sed 的以行爲單位的顯示功能, 就能夠將某一個文件內的某些行號選擇出來顯示。
</p>
<h3>數據的搜尋並顯示</h3>
<p>搜索 /etc/passwd有root關鍵字的行</p>
<pre>
nl /etc/passwd | sed '/root/p'
1 root:x:0:0:root:/root:/bin/bash
1 root:x:0:0:root:/root:/bin/bash
2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh
3 bin:x:2:2:bin:/bin:/bin/sh
4 sys:x:3:3:sys:/dev:/bin/sh
5 sync:x:4:65534:sync:/bin:/bin/sync
....下面忽略
如果root找到,除了輸出所有行,還會輸出匹配行。
使用-n的時候將只打印包含模板的行。
nl /etc/passwd | sed -n '/root/p'
1 root:x:0:0:root:/root:/bin/bash
數據的搜尋並刪除
刪除/etc/passwd所有包含root的行,其他行輸出
nl /etc/passwd | sed '/root/d'
2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh
3 bin:x:2:2:bin:/bin:/bin/sh
....下面忽略
#第一行的匹配root已經刪除了
數據的搜尋並執行命令
搜索/etc/passwd,找到root對應的行,執行後面花括號中的一組命令,每個命令之間用分號分隔,這裏把bash替換爲blueshell,再輸出這行:
nl /etc/passwd | sed -n '/bash/{s/bash/blueshell/;p;q}'
1 root:x:0:0:root:/root:/bin/blueshell
最後的q是退出。
數據的搜尋並替換
除了整行的處理模式之外, sed 還可以用行爲單位進行部分數據的搜尋並取代。基本上 sed 的搜尋與替代的與 vi 相當的類似!他有點像這樣:
sed 's/要被取代的字串/新的字串/g'
先觀察原始信息,利用 /sbin/ifconfig 查詢 IP
[root@www ~]# /sbin/ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:90:CC:A6:34:84
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::290:ccff:fea6:3484/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
.....(以下省略).....
本機的ip是192.168.1.100。
將 IP 前面的部分予以刪除
[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.addr://g'
192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
接下來則是刪除後續的部分,亦即: 192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
將 IP 後面的部分予以刪除
[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.
addr://g' | sed 's/Bcast.*$//g'
192.168.1.100
多點編輯
一條sed命令,刪除/etc/passwd第三行到末尾的數據,並把bash替換爲blueshell
nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'
1 root:x:0:0:root:/root:/bin/blueshell
2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh
-e表示多點編輯,第一個編輯命令刪除/etc/passwd第三行到末尾的數據,第二條命令搜索bash替換爲blueshell。
直接修改文件內容(危險動作)
sed 可以直接修改文件的內容,不必使用管道命令或數據流重導向! 不過,由於這個動作會直接修改到原始的文件,所以請你千萬不要隨便拿系統配置來測試! 我們還是使用下載的 regular_express.txt 文件來測試看看吧!
利用 sed 將 regular_express.txt 內每一行結尾若爲 . 則換成 !
[root@www ~]# sed -i 's/.$/!/g' regular_express.txt
利用 sed 直接在 regular_express.txt 最後一行加入『# This is a test』
[root@www ~]# sed -i '$a # This is a test' regular_express.txt

45、head命令-用於打印文件內容開頭的行
head語法格式:
head [參數] [文件...]
參數說明:
-n<行數>:顯示行數

實例1:
head -n1 testfile1

46、tail命令-用於打印文件內容結尾的行
tail語法格式:
tail [參數] [文件...]
參數說明:
-n<行數>:顯示行數
-f:實時動態顯示

實例1:
tail -n1 testfile1

實例2:
tail -f testfile1

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