版權聲明:show me the code ,change the worldcss
本篇博文講述系統內核、Bash解釋器的關係與做用,如何正確的執行Linux命令以及常見排錯方法。shell
經驗豐富的運維人員能夠恰當的組合命令與參數,使Linux字符命令更加的靈活且相對減小消耗系統資源。ruby
計算機硬件是由運算器、控制器、存儲器、輸入/輸出設備等設備組成的,而可以讓機箱內各類設備各司其職東西就叫作——系統內核。內核負責驅動硬件、管理活動和分配/管理硬件資源,如此說來系統內核對計算機來說可真的是過重要了,因此它不能直接讓用戶操做。bash
由於用戶不能直接控制硬件也不能直接操做內核,因而便須要基於「系統調用接口」開發出的程序/服務來知足用戶平常工做了。markdown
首先認可在紅帽RHEL7中有些諸如邏輯卷管理器(LVM)的圖形化工具很是好用,也減小了運維人員操做出錯的概率,值得稱讚,但一直以來Linux運維人員更多的傾向於用命令寫腳本程序,由於圖形化的工具不靈活並且相比來講更加消耗系統資源。網絡
其實不少圖形工具也是調用腳原本工做的,但功能卻被「閹割」了,更缺少了靈活性,因此有些運維人員甚至都不會給Linux系統安裝圖形界面,須要工做了直接遠程鏈接過去,不得不說這樣作真的挺高效的。運維
「Shell「——也可稱爲「殼」,充當的是人與內核(硬件)的翻譯官,用戶將一些命令「告訴」Shell,它就會調用相應的程序服務執行工做啦~~如今包括紅帽系統在內的許多熱門Linux系統主流默認字符Shell是Bash(Bourne-Again SHell)。工具
bash做爲大多數linux系統的默認字符解釋器,必須得學好!Bash的優點:學習
- 1.默認保存歷史命令(可用上下鍵翻看)
- 2.命令僅需輸入前幾位就能夠用tab鍵補全(RHEL7更牛的是參數補全)
- 3.強大的批處理腳本
- 4.實用的環境變量
既然有了如此好用的「翻譯官」,那麼接下來就有必要好好學習下如何更高效的和它溝通了~
要想準確的、高效的完成工做,不可以光靠命令自己,還應該根據實際狀況來組合各類命令選擇和命令參數:
命令名稱 [命令參數] [命令對象]
注意:命令名稱、命令參數、命令對象之間請用空格鍵分隔。
比較好理解的是命令對象,命令對象通常是指要處理的目標(普通文件/目錄文件/用戶等等),而命令參數對於新手來說比較麻煩,由於這個值會隨命令的不一樣和環境狀況的不一樣而異,因此在參數選擇搭配上須要長時間的經驗積累才能夠。
命令的參數能夠選用長格式(完整的選項名稱)也可選用短格式(單個字母的縮寫),分別用」—「與」–「作前綴。
長格式如:man —help 短格式如:man -h
當遇到了一個陌生命令後如何知道它有那些可用的參數?這時就能夠用man命令了。
man命令的可用幫助文檔分類有:
通常來說幫助文件都很長不少,若是你想翻看的話,就要理解幫助文檔的目錄結構與操做方法:
echo命令用於在終端顯示字符串或變量,
格式爲:echo [字符串 | 變量]
將echo命令的字符串輸出到終端:
[root@xgj~]# echo xgj xgj
用echo命令查看SHELL變量的值(前面有$符號):
[root@xgj~]# echo $SHELL /bin/bash
查看本機主機名:
[root@xgj~]# echo $HOSTNAME xgj
date命令用於顯示/設置系統的時間或日期,
格式爲:date [選項] [+指定的格式]
強大的date命令可以按照指定格式顯示系統的時間或日期,只需鍵入」+」號開頭的字符串指定其格式.
詳細格式以下:
查看當前的系統時間:
[root@xgj ~]# date Mon Aug 24 16:11:23 CST 2016
按照」年-月-日 小時:分鐘:秒」的格式:
[root@xgj ~]# date "+%Y-%m-%d %H:%M:%S" 2017-05-04 16:29:12
設置系統時間爲2017年5月1日8點半:
[root@xgj ~]# date -s "20170501 8:30:00" Mon May 1 08:30:00 CST 2015
查看本地系統時區:
[root@xgj ~]# date "+%Z" CST
查看星期幾:
[root@xgj ~]# date "+%A" Tuesday
輸入當前是上午仍是下午:
[root@xgj Desktop]# date "+%p" AM
判斷今天是一年中的第幾天:
[root@xgj ~]# date "+%j" 244
reboot命令用於重啓系統(僅root用戶可使用),格式爲:」reboot」。
重啓計算機:
[root@xgj ~]# reboot
wget命令用於使用命令行下載網絡文件,
格式爲:wget [參數] 下載地址
合格的運維人員必需具有快速查看系統狀態的能力.
ifconfig用於獲取網卡配置與網絡狀態等信息:格式爲ifconfig [網絡設備] [參數]
查看本機當前的網卡配置與網絡狀態等信息:
[root@xgj ~]# ifconfig ...... ......
uname命令用於查看系統內核版本等信息,格式爲:「uname [-a]
」。
查看系統的內核名稱、內核發行版、內核版本、節點名、硬件名稱、硬件平臺、處理器類型、操做系統等信息:
[root@xgj ~]# uname -a
順便說下,若是您想查看系統詳細版本信息就看redhat-release文件:
[root@xgj ~]# cat /etc/redhat-release
uptime命令用於查看系統的負載狀況,格式爲:「uptime」。
我也常常用」watch -n 1 uptime
「來每秒刷新一次得到當前的系統負載狀況,輸出內容分別爲系統當前時間、系統已運行時間、當前在線用戶以及平均負載值。
而平均負載分爲最近1分鐘、5分鐘、15分鐘的系統負載狀況,負載值越低越好(小於1是正常)。
獲取當前系統狀態信息:
[root@xgj ~]# uptime 22:49:55 up 10 min, 2 users, load average: 0.01, 0.19, 0.18
free命令用於顯示當前系統中內存的使用量狀況,格式爲:free [-m/-g]
以m爲單位顯示當前系統中內存的使用量狀況:
[root@xgj ~]# free -m
[root@xgj ~]# who
last命令用於查看全部系統的登入記錄,格式爲:」last [參數]」。
[root@xgj ~]# last root pts/0 :0 Mon Aug 24 17:52 still logged in root :0 :0 Mon Aug 24 17:52 still logged in (unknown :0 :0 Mon Aug 24 17:50 - 17:52 (00:02) reboot system boot 3.10.0-123.el7.x Tue Aug 25 01:49 - 18:17 (-7:-32) root pts/0 :0 Mon Aug 24 15:40 - 08:54 (7+17:14) root pts/0 :0 Fri Jul 10 10:49 - 15:37 (45+04:47)
history命令用於顯示歷史執行過的命令,格式爲:「history [-c]」。
歷史命令會被保存到用戶家目錄中的」.bash_history「文件中。Linux系統中以點(.)開頭的文件均表明隱藏文件,通常會是系統文件。
清空該用戶在本機中執行過命令的歷史記錄:
[root@xgj ~]# history -c
history默認會保存1000條執行過的命令,若要修改可直接編輯/etc/profile文件的HISTSIZE值。
sosreport命令用於收集系統系統配置並診斷信息後輸出結論文檔,格式爲:「sosreport」。
當咱們的紅帽系統出現故障須要聯繫紅帽廠商或其餘技術支持時,大多數狀況都須要提供使用到這個命令。
收集系統本地配置信息並診斷:
[root@xgj ~]# sosreport
pwd命令用於顯示當前的工做目錄,格式爲:「pwd [選項]」。
cd命令用於切換工做路徑,格式爲:「cd [目錄名稱]」
切換進/etc目錄中:
[root@xgj ~]# cd /etc
切換進/bin目錄中:
[root@xgj etc]# cd /bin
返回上級目錄(即/etc目錄):
[root@xgj bin]# cd - /etc
返回用戶本身的家目錄:
[root@xgj etc]# cd ~ [root@xgj ~]#
ls命令用於查看目錄中有那些文件,格式爲:ls [選項] [文件]
查看當前目錄下有那些文件(長格式):
查看/etc目錄中有那些文件:
[root@xgj ~]# ls /etc ………省略部分文件………
查看/etc目錄的權限與屬性:
[root@xgj ~]# ls -ld /etc drwxr-xr-x. 132 root root 8192 Jul 10 10:48 /etc
追加-h參數,以K/M/G爲單位顯示容量:
[root@xgj ~]# ls -ldh /etc drwxr-xr-x. 132 root root 8.0K Jul 10 10:48 /etc
cat命令用於查看純文本文件(較短的),格式爲:「cat [選項] [文件]」。
查看文本文件:
[root@xgj ~]# cat 文件名
more命令用於查看純文本文件(較長的),格式爲:「more [選項] 文件」。
查看文本文件:
[root@xgj ~]# more 文件名
head命令用於查看純文本文檔的前N行,格式爲:「head [選項] [文件]」。
查看文本文件前20行:
[root@xgj ~]# head -n 20 文件名
tail命令用於查看純文本文檔的後N行,格式爲:「tail [選項] [文件]」
查看文本文件後20行:
[root@xgj ~]# tail -n 20 文件名
od命令用於對查看特殊格式的文件,格式爲:「od [選項] [文件]」
tr命令用於轉換文本文件中的字符,格式爲:「tr [原始字符] [目標字符]」。
將tr.txt文件的內容轉換成大寫
| —管道命令符
[root@xgj ~]# cat tr.txt | tr [a-z] [A-Z] RED HAT CERTIFIED FREE LINUX LESSONS PROFESSIONAL GUIDANCE LINUX COURSE
wc命令用於統計指定文本的行數、字數、字節數,格式爲「wc [參數] 文本」。
統計當前系統中的用戶個數:
[root@xgj ~]# wc -l /etc/passwd 38 /etc/passwd
cut命令用於經過列來提取文本字符,格式爲:「cut [參數] 文本」。
獲取當前系統中全部用戶的名稱:
參數做用:-d以」:」來作分隔符,-f參數表明只看第一列的內容。
[root@xgj ~]# cut -d: -f1 /etc/passwd
獲取root用戶的默認SHELL解釋器:
[root@xgj ~]# grep ^root /etc/passwd | cut -d: -f 7 /bin/bash
diff命令用於比較多個文本文件的差別,格式爲:」diff [參數] 文件」。
比較兩個文件的差別:
[root@xgj ~]# diff diff_A.txt diff_B.txt 1c1,2 > Welcome to xgj.com --- > Welcome tooo xgj.com > 3c4,5 > Free Linux Lessons --- > Free Linux LeSSonS > ////////.....////////
僅顯示比較後的結果,即相同或不相同:
[root@xgj ~]# diff --brief diff_A.txt diff_B.txt Files diff_A.txt and diff_B.txt differ
使用上下文輸出的格式:
[root@xgj ~]# diff -c diff_A.txt diff_B.txt
*** diff_A.txt 2015-08-30 18:07:45.230864626 +0800 --- diff_B.txt 2015-08-30 18:08:52.203860389 +0800 *************** *** 1,5 **** ! Welcome to xgj.com Red Hat certified ! Free Linux Lessons Professional guidance Linux Course --- 1,7 ---- ! Welcome tooo xgj.com ! Red Hat certified ! Free Linux LeSSonS ! ////////.....//////// Professional guidance Linux Course
touch命令用於建立空白文件與修改文件時間,格式爲:「touch [選項] [文件]」。
咱們能夠用「touch test」輕鬆的建立出一個名字爲test的空白文檔,因此這個功能無須介紹。
對於在Linux中的文件有三種時間:
- 更改時間(mtime):內容修改時間(不包括權限的)
- 更改權限(ctime):更改權限與屬性的時間
- 讀取時間(atime):讀取文件內容的時間
若是黑客執行了touch -d 「2 days ago」 test
,便將訪問與修改時間修改成了2天前(僞造了本身沒有動過該文件的假象)。
mkdir用於建立空白的文件夾,格式爲:「mkdir [選項] 目錄」。
建立文件夾:
[root@xgj ~]# mkdir 文件夾名
建立一個名字叫xgj的目錄:
[root@xgj ~]# mkdir xgj
使用ls命令查看該目錄的權限屬性等信息:
[root@xgj ~]# ls -ld xgj/ drwxr-xr-x. 2 root root 6 Aug 24 19:25 xgj/
還記得剛剛用cd命令進入xgj目錄嗎?這裏是個小技巧,變量!$或(鍵盤按鍵)表明上一條命令的參數。
[root@xgj ~]# cd !$ cd xgj
pwd命令用於顯示當前的工做路徑。
[root@xgj xgj]# pwd /root/Desktop/xgj
一次建立5個目錄a/b/c/d/e:
[root@xgj xgj]# mkdir -p a/b/c/d/e
查看目錄的屬性,驗證是否成功:
[root@xgj xgj]# ls -ld a/b/c/d/e/ drwxr-xr-x. 2 root root 6 Aug 29 10:16 a/b/c/d/e/
cp命令用於複製文件或目錄,格式爲:「cp [選項] 源文件 目標文件」。
複製命令的三種狀況:
- 目標文件是一個目錄,會將源文件複製到該目錄中。
- 目標文件是一個文件,會將源文件覆蓋該文件。
- 目標文件不存在,將會複製源文件並修改成目標文件的名稱(重命名)
建立一個名爲install.log的文件:
[root@xgj ~]# touch install.log
將install.log複製爲x.log:
[root@xgj ~]# cp install.log x.log
查看到確實出現了文件x.log
[root@xgj ~]# ls install.log x.log
mv命令用於移動文件或更名,格式爲:「mv [選項] 文件名 [目標路徑|目標文件名]」。
將文件aaa重命名爲bbb:
[root@xgj ~]# mv aaa bbb
rm命令用於刪除文件或目錄,格式爲:「rm [選項] 文件」。
刪除普通文件並提示確認信息:「rm 文件名」
刪除普通文件或目錄文件,不提示:「rm -rf 文件或目錄名」
查看當前目錄下的文件:
[root@xgj ~]# ls install.log x.log
刪除install.log文件,輸入」y」即確認:
[root@xgj ~]# rm install.log rm: remove regular empty file ‘install.log’? y
刪除x.log文件而無需確認:
[root@xgj ~]# rm -rf x.log
Linux系統中還有一個rmdir命令,它不一樣於rm -rf命令會刪除一切,而是僅刪除空目錄,遇到目錄內有文件時則報錯。
dd命令用於指定大小的拷貝的文件或指定轉換文件,格式爲:「dd [參數]」。
將光驅設備拷貝成鏡像文件:
[root@xgj ~]# dd if=/dev/cdrom of=RHEL-server-7.0-x86_64-xgj.Com.iso 7311360+0 records in 7311360+0 records out 3743416320 bytes (3.7 GB) copied, 370.758 s, 10.1 MB/s
生成一個560m的空白文件:
[root@xgj ~]# dd if=/dev/zero of=560_file count=1 bs=560M 1+0 records in 1+0 records out 587202560 bytes (587 MB) copied, 27.1755 s, 21.6 MB/s
將硬盤的MBR信息拷貝出來:
[root@xgj ~]# dd if=/dev/sda of=sda_image count=1 bs=512K 1+0 records in 1+0 records out 524288 bytes (524 kB) copied, 0.0449481 s, 11.7 MB/s
useradd命令用於建立新的用戶,格式爲:「useradd [選項] 用戶名」。
建立名爲xgj的用戶,並定義家目錄路徑、UID以及登錄解釋器(不容許登錄):
[root@xgj ~]# useradd -d /home/linux -u 8888 -s /sbin/nologin xgj
查看xgj用戶的基本信息:
[root@xgj ~]# id xgj uid=8888(xgj) gid=8888(xgj) groups=8888(xgj)
passwd命令用於修改用戶的密碼,格式爲:「passwd [選項] [用戶名]」。
- 修改當前用戶的密碼:「passwd」
- 修改其餘用戶的密碼:「passwd 其餘用戶名」
userdel命令用於刪除用戶全部表格,格式爲:「userdel [選項] 用戶名」。
刪除用戶與其家目錄:
[root@xgj ~]# userdel -d 用戶名
usermod命令用於修改用戶的屬性,格式爲「usermod [選項] 用戶名」。
groupadd命令用於建立羣組,格式爲:」groupadd [選項] 羣組名」。
建立名稱爲xgj的用戶羣組:
[root@xgj ~]# groupadd xgj
tar命令用於對文件打包壓縮或解壓,格式爲:「tar [選項] [文件]」。
將/etc目錄內文件打包並經過gzip格式壓縮:
[root@xgj ~]# tar czvf etc.tar.gz /etc
tar: Removing leading `/' from member names /etc/ /etc/fstab /etc/crypttab /etc/mtab /etc/fonts/ /etc/fonts/conf.d/ /etc/fonts/conf.d/65-0-madan.conf /etc/fonts/conf.d/59-liberation-sans.conf /etc/fonts/conf.d/90-ttf-arphic-uming-embolden.conf /etc/fonts/conf.d/59-liberation-mono.conf /etc/fonts/conf.d/66-sil-nuosu.conf ……………………………………
將etc.tar.gz解壓到/root/etc目錄中:
[root@xgj ost ~]# mkdir /root/etc 開始解壓etc.tar.gz文件: [root@xgj ~]# tar xzvf etc.tar.gz -C /root/etc
grep命令用於對文本進行搜索,格式爲:「grep [選項] [文件]」。
搜索某個關鍵詞:「grep 關鍵詞 文本文件」
搜索在/etc/passwd中」/sbin/nologin」出現的行,找出系統中不容許登錄的用戶。
[root@xgj ~]# grep /sbin/nologin /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 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin ………………………………
找出文件「/usr/share/gedit/plugins/snippets/docbook.xml」中全部包含entry的行並輸出到/root/lines:
grep entry /usr/share/gedit/plugins/snippets/docbook.xml >> /root/lines
find命令用於查找文件,格式爲:「find [查找路徑] 尋找條件 操做」。
這裏須要注意下find命令很是靈活致使參數很是複雜,這裏不要求你們記住,用時來查便可。
對於經常使用搜索路徑有幾個小竅門:「~」表明用戶的家目錄,「.」表明當前目錄,「/」表明根目錄。
搜索整個系統中全部包含SUID的文件(因SUID的數字表示法是4,而減號表示只要包含便可)。
[root@xgj ~]# find / -perm -4000 -print /usr/bin/fusermount /usr/bin/su /usr/bin/umount /usr/bin/passwd /usr/sbin/userhelper /usr/sbin/usernetctl ………………………………
找出用戶xgj的文件並複製到/root/findresults目錄。
重點是」-exec {} \;」其中的{}表明find命令搜索出的文件,記住結尾必須是\;
[root@xgj ~]# find / -user xgj -exec cp -arf {} /root/findresults/ \;