1.mkdir(make directory創建目錄)
例子:mkdir /data 在根/下創建data目錄,mkdir –p創建連續目錄
2.ls(list列表) 列出目錄文件
例子:ls / 列根/目錄下目錄和文件
參數:
-l(long)長格式,查看文件的權限,屬主屬組信息
-d(directorys)查看目錄
-ld查看目錄的權限屬主屬組信息
–r(反轉排序,倒敘)
-t(按修改時間排序)
-F給每個輸出項追加文件的類型標識“*”表示具有可執行權限的普通文件,“/”表示目錄,“@”表示符號鏈接,“|”表示命令管道FIFO,“=”表示sockets套接字。當文件爲普通文件時,不輸出任何標識符。
-p 只給目錄加標識
-i查看inode節點
-h人類可讀,人類可讀就是將大小整數化,比如1024k就算成1M了。
3.cd (change directory) 改變目錄路徑列子
例子:cd /etc
cd ..返回上一級目錄
cd .當前目錄
cd – 返回上一次目錄
cd ~返回用戶家目錄
cd –演示
爲什麼cd –可以返回上一次目錄,因爲cd –調用了OLDPWD變量和PWD變量
4.相對路徑和絕對路徑
Windows絕對路徑:D:\娛樂\音樂,從頭(盤符)開始的路徑。
linux絕對路徑:cat /etc/sysconfig/network-scripts/ifcfg-eth0,從“/”開始的路徑。
相對路徑:不從根/開始,不從頭開始的路徑。
例如:cd /linzhongniao/這種進入目錄的方法就是絕對路徑,
cd linzhongniao/這種進入目錄的方法就是相對路徑。
5.重定向標準輸入輸出和錯誤輸出
特殊符號:
或1> 輸出重定向:把當前輸出的內容輸入到後邊的文件中,會清除文件原有內容。
>或1>>追加重定向:把當前輸出的內容追加到後邊的文件尾部,不會清除文件原有內容。
0<或< 輸入重定向:輸入重定向用於改變命令的輸入,後面指定輸入內容,前面跟文件名。
0<<或<<追加輸入重定向:後跟字符串用來表示“輸入結束”,也可用ctrl+d結束輸入。
例子:
cat >>./linzhongniao.txt <<EOF
> woshishei
> nimeide
> I am linzhongniao
> EOF
2> 錯誤輸出重定向:把錯誤信息輸出到後邊的文件中,會清空文件原有內容。
2>> 錯誤追加重定向:把錯誤信息追加到後邊的文件中,不會刪除文件原有內容。
說明:
(1)頭的指向就是數據的流向。
(2)標準輸入(stdin):代碼爲0,使用0<或0<<。數據流向從右向左。
(3)標準正常輸出(stdout):代碼1,使用1>或1>>。數據(正確的數據)流向從左向右。
(4)標準錯誤輸出(stderr):代碼爲2,使用2>或2>>。數據(錯誤的數據)流向從左到右。
(5)2>&1,把標準輸出和標準錯誤輸出放到一個文件裏面。正確輸出放在哪了,錯誤輸出也放在哪。例如echo linzhongniao >a.txt 2>&1將標準輸出和標準錯誤輸出都追加到a.txt文件中(推薦),定時任務使用>/dev/null 2>&1將標準輸出和標準錯誤輸出都輸出到空。
(6)&>a.log 標準輸出和標準錯誤輸出都放到a.log裏面,也可以追加&>>a.log。也可以這樣寫>a.log 2>&1
6.cat 查看文件內容
6.1編輯文件
方法一:
[root@linzhongniao local]# cat >>$(date +%Y%m%d%H%M).txt
DSFDS
DFSD
FDSFSD
DFDS《==按ctrl +d結束
查看一下
[root@linzhongniao local]# cat 201809020834.txt
DSFDS
DFSD
FDSFSD
DFDS
方法二:也可以將上面的輸入改成追加
[root@linzhongniao local]# cat >>201809020834.txt
dhjh
hjfjdd
nimeide
[root@linzhongniao local]# cat 201809020834.txt
DSFDS
DFSD
FDSFSD
DFDS
dhjh
hjfjdd
nimeide
方法三:注意EOF的運用
[root@linzhongniao ~]# cat >>ddd/20180806.txt<<EOF
> DSDSDS
> djskd
> ds
> EOF
[root@linzhongniao ~]# cat ddd/20180806.txt
DSDSDS
djskd
ds
6.2 cat查看文件內容
參數說明
(1)-n參數說明
cat –n顯示行號
[root@linzhongniao ~]# cat -n ddd/20180806.txt
1 DSDSDS
2 djskd
3 ds
4
5
6 DS
7 dfsadfdf
8
9 erwer
(2)-b參數
cat –b也是顯示行號但是不顯示空行的行號,相當於nl命令(number lines)。
[root@linzhongniao ~]# cat -b ddd/20180806.txt
1 DSDSDS
2 djskd
3 ds
4 DS
5 dfsadfdf
6 erwer
[root@linzhongniao ~]# nl ddd/20180806.txt
1 DSDSDS
2 djskd
3 ds
4 DS
5 dfsadfdf
6 erwer
(3)-E(或-e)參數說明
display $ at end of each line(在每一行的末尾顯示“$”)-E 參數在每一行的末尾顯示“$”符號
[root@linzhongniao ~]# cat -E ddd/20180806.txt
DSDSDS$
djskd$
ds$
$
$
DS$
dfsadfdf$
$
erwer$
(4)-s參數說明
suppress repeated empty output lines(抑制重複空行的輸出),合併連續的重複行例如將兩個空行合併成一個空行
[root@linzhongniao ~]# cat -s ddd/20180806.txt
DSDSDS
djskd
ds
DS
dfsadfdf
erwer
(5)-T選項
display TAB characters as ^I(顯示tab的標籤字符爲^I),顯示tab鍵標籤字符“^I”,所以文檔中間不一定是空格有可能是tab鍵標籤,在選取分隔符的時候要注意用-T參數檢測一下。
[root@linzhongniao ~]# cat -T ddd/20180806.txt
DSDSDS
djskd
sdsd^Idjkjk dsjk
ds
DS
dfsadfdf
erwer
7.cp (copy)拷貝命令:
拷貝文件和目錄
cp(copy) [-aifpru] [源文件][目標文件]
-a:相當於-pdr(-p、-d和-r)
-d: 若源文件爲連接文件(link file),則複製鏈接文件屬性而非檔案本身
-f:強制,若目標檔案已經存在且無法開啓,則移除後再嘗試
-i:若目標文件已經存在是,在覆蓋時先問詢
-p:連同檔案的屬性(所有權、時間戳)一起復制過去,而非使用默認屬性。
-r:遞歸用於複製目錄
-u:若目標文件存在,則目標文件比源文件舊時才複製。
在一個目錄或不同目錄下備份文件可以用下面的方式來提高效率
[root@linzhongniao ~]# cp /etc/yum.repos.d/CentOS-Base.repo{,.ori}
[root@linzhongniao ~]# cd /etc/yum.repos.d/
[root@linzhongniao yum.repos.d]# ls
CentOS-Base.repo CentOS-Base.repo.ori
-d參數說明
[root@linzhongniao ~]# ln -s d n
[root@linzhongniao ~]# ls -li d n
413365 -rw-r--r--. 2 root root 0 Sep 2 22:55 d
398541 lrwxrwxrwx. 1 root root 1 Sep 18 21:33 n -> d
[root@linzhongniao ~]# cp n /tmp/
[root@linzhongniao ~]# ls -l /tmp/n
-rw-r--r--. 1 root root 0 Sep 18 21:34 /tmp/n
[root@linzhongniao ~]# cp -d n /mnt/
[root@linzhongniao ~]# ls -l /mnt/n
lrwxrwxrwx. 1 root root 1 Sep 18 21:34 /mnt/n -> d
7.1 範例
已知/tmp目錄下已經存在了test.txt文件,如何執行命令才能把/mnt/test.txt拷貝到/tmp下覆蓋掉/tmp/test.txt,而讓linux系統不提示是否覆蓋。
方法一:在命令前加反斜線“\”屏蔽別名
方法二:加命令的全路徑,用which查看命令全路徑
解題思路就是屏蔽掉系統默認的對應命令別名,默認執行cp的操作是調用了別名,所以會提示覆蓋。還可以用下面的修改別名的方法
8.別名alias
cp mv rm 這些命令比較危險,所以系統會自動的爲這些命令添加別名,會自動的在命令後加-i 當執行這些命令的時候就會詢問是否執行。我們使用反斜線的作用就是屏蔽它的別名功能。查看系統別名用alias。
方法四:也可以用unalias +命令,將別名刪掉。刪除cp的別名在複製有重複文件就不會提示是否覆蓋了。瞭解原理不要操作,只是臨時的重啓服務器之後別名還會存在。
刪除別名後也可以用alias命令添加別名 alias cp=’cp -i’
也可以設置別名提示別人慎用此命令,例如rm命令
給網卡設置別名,在查網卡的時候命令很長記不住就可以設置別名
別名的作用:
(1)通過給危險命令加一些參數,防止人爲誤操作。
(2)把很多複雜的字符串或命令變成一個簡單的字符串或命令。
定義別名永久生效:
/etc/profile 全局生效
~/.bashrc 當前用戶生效
在命令行刪除別名可以用 source ~/.bashrc命令加載出來
9.mv(move)移動文件
mv [-ifu] [源文件/源目錄] [目的文件/目的目錄]
參數
-i:如果目錄已經存在,詢問是否覆蓋
-f:強制執行不再詢問。
-u:若目的文件存在,則比源文件新纔會移動
-t: 將所有元數據移動到目錄中 ,結合find使用(重要)。
find命令與xargs命令和mv –t使用可以將查找出來的內容元數據移動到別的目錄。
[root@linzhongniao ~]# find /tmp/ -type f|xargs mv -t /data/
10.rm(remove)刪除目錄和文件
參數:
-f(force)強制
-r(recursive)遞歸,用於刪除目錄。
刪除一個文件用rm 1.txt,此方法會提示確認。禁止使用“rm –rf 文件名”,可以使用“rm -f”,rm –rf一般用來強制刪除目錄不提示,非常危險。rm命令用於刪除文件,rmdir刪除空文件。刪目錄可以用rm -rf強制刪除.但是要慎用!少用最好不用可以將不需要的文件mv移動到tmp目錄下或者其他目錄中,tmp目錄相當於windows的回收站。
企業很少用rm直接刪除文件,結合find來刪除文件
11.find命令
find 在目錄結構層次中搜索文件或者目錄
參數:
-type文件類型(f文件,d目錄,c字符類型,b塊設備磁盤,s socket文件通信用的)
-mtime n n爲數字按文件的修改時間查找文件或目錄,n爲數字 ,+7代表七天以前,7代表第七天,-7代表最近7天。
-atime n n爲數字,意義在n天之前的一天內被access過的文件或目錄
-ctime n n爲數字,意義爲在n天之前的一天內被change過狀態的文件或目錄
-inum 查找inode
-perm 4755 按文件或目錄權限查找
-maxdepth 1深度爲1,最底層目錄,因爲第二層也會有目錄那麼不用這個參數有可能不準確,查找文件也是可以用的。
[root@linzhongniao linzhongniao]# find ./ -maxdepth 1 -type d ! -name "."
./ext
./wanger
./test
./zhangsan
./lisi
在腳本中刪除文件或目錄時生產場景常用的的方法爲:
(1)和xargs搭配的方法
find . -type -name "*.log" -mtime +7 |xargs rm –f 刪除7天以前的文件
find . -type -name "*.log" -mtime +7 |xargs rm –rf 刪除7天以前的文件慎用
(2)使用find的-exec
find /tmp -type f -mtime +5 -exec rm {} \; 在tmp目錄中查找更改時間爲7天以前的文件並刪除他們
範例:
(1)mv –t 和find命令以及xargs命令的使用。
[root@linzhongniao ~]# find /tmp/ -type f|xargs mv -t /data/
find命令與xargs命令和mv –t使用可以將查找出來的內容元數據移動到別的目錄。
(2)mv 和find命令以及exec命令的使用
[root@linzhongniao ~]# ls eee/
[root@linzhongniao ~]# find . -type f -name "*.txt" -exec mv {} eee/ \;
[root@linzhongniao ~]# ls eee/
20180819.txt ett.txthhh.txt new.txt sd1.txt sd3.txt sd5.txt sss.txt svnpass.txt text.txt
dddd.txt fdisk.txt id.txt nnn.txt sd2.txt sd4.txt sort.txt svnpass1.txt svn.txt
[root@linzhongniao ~]# find eee/ -type f -name "*.txt" -exec mv {} -t . \;
[root@linzhongniao ~]# ls eee/
這個地方的mv {} eee/ \;
中的“{}”中括號就是前面用find查找的內容,而“\;”就是一個格式。“;”分號是bash的特殊意義用“\”反斜槓轉義。更多find的例題請看下面的企業面試題。
12.grep命令
參數:
-v排除不需要的內容只過濾需要的內容 例子:grep –v linzhongniao text.txt
-B(before) 除了顯示匹配的一行之外,並顯示該行之前的num行
-A(after) 除了顯示匹配的一行之外,並顯示該行之後的num行
-C(Context control) 除了顯示匹配的一行之外,並顯示該行之前後各num行
命令:grep “過濾的內容” -(A|B|C) 行數 文件
--color=auto 對過濾的匹配的字符串加顏色
-n 對匹配的內容打印行號,-n “^$”顯示空格行號。
-i 不區分大小寫。
-E grep –E 可以同過濾多個字符串相當於egrep。
-o 只輸出文件中匹配到的部分,把輸出的內容在新的一行輸出
grep –w 按單詞搜索,只輸出想要的單詞或行。
-x 完全匹配輸出,按行匹配及匹配的內容佔整行只選擇與整行完全匹配的匹配項。
-c 抑制正常輸出或相反,打印匹配的輸出文件的匹配的行數
grep –E 命令演示
[root@linzhongniao ~]# egrep "3306|1521" /etc/services
mysql 3306/tcp# MySQL
mysql 3306/udp # MySQL
ncube-lm1521/tcp # nCube License Manager
ncube-lm1521/udp# nCube License Manager
[root@linzhongniao ~]# grep -E "3306|1521" /etc/services
mysql 3306/tcp# MySQL
mysql 3306/udp# MySQL
ncube-lm1521/tcp# nCube License Manager
ncube-lm1521/udp# nCube License Manager
grep –w命令演示按單詞搜索
[root@linzhongniao ~]# grep "good" linzhongniao.log
goodi
good
[root@linzhongniao ~]# grep -w "good" linzhongniao.log
good
grep –i命令演示不區分大小寫
[root@linzhongniao ~]# grep -i "linzhongniao" linzhongniao.log
my god,i am not linzhongniao,But to the birds of the FOREST!!!!
LINZHONGNIAO
grep –o命令演示,對比和grep –w的區別
[root@linzhongniao ~]# grep -o "good" linzhongniao.log
good
good
grep –x命令演示完全匹配輸出,匹配的內容獨佔一行
[root@linzhongniao ~]# grep -x "good" linzhongniao.log
good
grep –c參數演示,匹配空行的數量
[root@linzhongniao ~]# grep -c "^$" /etc/services
16
13.head命令
讀取文件的前n行默認是前10行,head -2或者head –n 2讀取文件的前兩行,也可以一次查看多個文件
[root@linzhongniao ~]# head sd2.txt sd3.txt
==> sd2.txt <==
==> sd3.txt <==
14.tail
輸出文件的後n行默認後10行,-n 數字,習慣-5,忽略n。
tail –f實時查看系統日誌 tail –f /var/log/messages
模擬更新日誌文件,用tail –f(或者tailf命令不是tail –f的縮寫和tail -F)查看。模擬更新日誌for n in seq 1000
;do echo $n >>/var/log/messages;sleep 1;done
15.企業面試題:
1.只查看ett.txt文件(100行)內第20到第30行的內容
在解決本題之前先了解一下seq命令(sequence序列),它可以從低到高打印數字的序列。例如從低到高打印數字10。橫着打印10個數字,用seq –s,-s可以指定分隔符,默認分隔符是回車\n。
從數字2到10,打印數字10
從1開始以2爲等差,打印數字10
解答:
演示測試數據:生成ett文件
[root@linzhongniao ~]# seq 100 >ett.txt
方法一:使用head和tail命令結合
先head命令取出前30行,再用tail命令取出倒數11行
方法二:
用sed命令,sed(stream editor)流編輯器linux三劍客老二,它可以實現對文件的增刪改查替換功能sed -n ' 'p 。-n取消默認輸出,p打印。
擴展:
用sed命令打印行尾 $符號是結尾的意思
方法三:三劍客老三
awk,可以過濾輸出內容,它是一門語言,NR代表行號。awk –F 指定分隔符。
awk -F對中括號裏面的內容匹配多次,匹配多個分隔符[ ]+。例如“[ :]+”指定空格和“:”冒號作爲分隔符。
awk –F “[ :]+” ‘{print }’
awk -F "[ :]+" '{print $4}' /etc/passwd
方法四:用grep命令
-B 除了顯示匹配的一行之外,並顯示該行之前的num行
-A 除了顯示匹配的一行之外,並顯示該行之後的num行
-C 除了顯示匹配的一行之外,並顯示該行之前後各num行
2.find結合sed查找替換企業案例實戰
在解答本題之前先複習sed –i命令,sed –i修改替換文件內容
先用echo成一個文件
用sed替換linzhongniao爲zhangsan。這種只是把輸出改了內容沒有改
修改內容用sed -i
案例:
把/nishishei目錄下及其子目錄下所有以擴展名.sh結尾的文件中包含nishishei的字符串全部替換爲lisi。
解答:
建立測試數據:
用find結合sed解決問題
方法一:
將所有.sh文件裏的nishishei替換成lisi,我們可以用cat查看一下里面的內容,注意不能直接加cat;因爲cat會將管道過濾的內容按數據流進行處理,查看的還是過濾之前的內容,所以要想查看裏面的內容必須加xargs。
好下面接xargs接sed命令,將所有.sh文件中的nishishei替換成lisi,可以在sed後不加-i參數,先看一下替換的內容對不對。
加-i替換
方法二:再把lisi改成linzhongniao,道理是一樣的
反引號應用命令相當於$(),先執行find再執行sed
16.查看man幫助
用man 命令—help查看命令的幫助信息
Linux內置的命令用man查不到,可以用help 查看。比如cd命令,就要用help cd 查看幫助。
下圖爲linux自帶的命令
Linux內置命令是查不到全路徑的,用which查看命令路徑
17.特殊符號講解
(1){}中括號,生成字符或者數字序列,類似seq,一般配合echo命令使用,“find /etc -type f -name ".sh"-exec 命令 {} \;” 裏的{}意思是前面find命令查找的結果。
(2)歎號
!歎號,!後接命令第一個字母,表示找出最近一次以此字母開頭的命令。
!!兩個歎號表示上一次操作的命令
!歎號後接操作歷史記錄的表示調出最近操作的第幾條命令,查看操作的歷史用history,清空歷史記錄用history –c,用history –d刪除指定行的歷史記錄。“!”歎號後面接302就是把歷史記錄的302行又執行了一遍。
(3)波浪線“~”
~波浪線,在root目錄下表示當前目錄,在其他用戶下表示當前用戶的用戶家目錄
(4)橫線“-”
在兩個目錄之間切換時,可以用cd –直接在這兩個目錄之間切換,之所以能夠切換是有$OLDPWD和$PWD兩個參數。
18.linux命令行常用快捷鍵
tab 路徑補全鍵
ctrl+c 終止當前任務或程序
ctrl+d 退出當前用戶環境,相當於exit和logout
ctrl+l (是小寫字母L)清屏clear
ctrl+a 移動到一行命令的開頭
ctrl+e 移動到一行命令的結尾
ctrl+u 將光標移動到命令中間清除前面的內容
ctrl+k 將光標移動到命令中間清除後面的內容
ctrl+w 刪除當前行。
ctrl+r 搜索之前用到的命令。
ctrl+q 如果長時間光標被鎖定,可以解除鎖定。
19.查看linux系統是32位還是64位的方法
(1)查看系統內存版本uname –m
uname –m查看系統內存版本也可以用uname –a查看系統的所有信息
方法一:
方法二:
(2)查看裝操作系統版本
(3)查看系統內核版本
用uname –r
(4)查看主機名
查看主機名用uname –n 或者hostname
[root@linzhongniao ~]# uname -n
linzhongniao
[root@linzhongniao ~]# hostname
linzhongniao
20.touch
它可以創建新文件,更新舊文件的時間戳。創建文件名,touch命令加文件名,touch更改舊文件的時間戳。
-a (change only the access time)改變訪問時間執行touch –a ddd.txt,我們發現訪問時間和改變時間發生了變化。
用touch –a只有訪問時間和change時間改變了,修改文件時間沒有變,那我們對ddd.txt文件進行編輯;再用stat命令查看文件屬性,時間戳就改變了。
用stat命令查看詳細的文件屬性,access訪問時間,modify修改操作時間對文件進行編輯時間就會改變,change發生改變的時間只要是訪問了文件時間就發生了變化。
21.連接CRT問題
客戶端連接服務器端物理鏈路有問題,檢查網卡,IP,網線,防火牆。
連接CRT先在windows端檢查網絡是否ping通,如果ping通還是連接不上CRT,用telnet命令查看linux端ssh服務是否開啓,也可以在windows端用tracert –d(路由跟蹤命令),也可以檢查路由網關是否通暢,-d是不進行反向解析。linux操作系統用traceroute –d ip地址或者域名。
不通的可能原因:
a.服務器端防火牆阻擋關閉防火牆
b.端口沒開,服務器端沒有監聽你連接的端口
netstat -lntup|grep 22
netstat -lntup|grep sshd
22.使用rz和sz注意事項
只能上傳下載文件而不能是目錄,如果是目錄需要打包成文件再上傳。
上傳的文件可以是電腦裏的任意文件,下載的文件會下載到SecureCRT配置的對應下載路徑目錄中。如圖。
執行rz命令回車後出現的的窗口下面的,一定不要勾選最下方的“以ASCLL方式上傳文件”,否則會遇到問題如圖
23.添加普通用戶
添加用戶並設置密碼
[root@linzhongniao ~]# useradd linzhongniao
[root@linzhongniao ~]# tail -1 /etc/passwd
linzhongniao:x:500:500::/home/linzhongniao:/bin/bash
交互式設計密碼:
[root@linzhongniao ~]# passwd linzhongniao
Changing password for user linzhongniao.
New password:
BAD PASSWORD: it is too simplistic/systematic
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.
非交互式設置密碼
root@linzhongniao ~]# echo "1234567"|passwd --stdin linzhongniao
Changing password for user linzhongniao.
passwd: all authentication tokens updated successfully.
切換到普通用戶,必須用su –的格式
[root@linzhongniao ~]# su – linzhongniao
查看路徑
[linzhongniao@linzhongniao ~]$ pwd
/home/linzhongniao
查看當前用戶是誰
[linzhongniao@linzhongniao ~]$ whoami
linzhongniao
ctrl +d退出普通用戶,或者su – root
[linzhongniao@linzhongniao ~]$ logout
[root@linzhongniao ~]# su - lianzhongniao
su: user lianzhongniao does not exist
[root@linzhongniao ~]# su - linzhongniao
[linzhongniao@linzhongniao ~]$ su - root
Password:
[root@linzhongniao ~]#
24.linux系統的運行級別
(1)查看運行級別/etc/inittab
[root@linzhongniao ~]# cat /etc/inittab
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
#
# For information on how to write upstart event handlers, or how
# upstart works, see init(5), init(8), and initctl(8).
#
# Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this) 《==停止
# 1 - Single user mode 《==單用戶模式
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking) 《==多用戶,沒有NFS(如果有網絡的話也就是 3)
# 3 - Full multiuser mode 《==完整的多用戶模式
# 4 – unused 《==未使用
# 5 - X11《==x11 桌面
# 6 - reboot (Do NOT set initdefault to this) 《==重啓
#
id:3:initdefault: 《==linux系統默認的運行級別,如果設置成0系統就啓動不了了,默認設置爲3,設置爲6會一直重啓。
(2)查看當前運行級別
[root@linzhongniao ~]# runlevel
N 3
(3)切換運行級別用init
切換運行級別init後面接對應的數字,最常用的運行級別是3和1.
如果要切換桌面,必須安裝桌面軟件
a.檢查一下我們已經安裝的軟件以及可以安裝的軟件,yum grouplist
b.安裝X(X Window System),命令爲yum groupinstall "X Window System" 回車, 安裝完成會出現complete安裝成功
c.安裝圖形化界面軟件,CentOS6.8需要安裝Desktop ,有的CentOS需要安裝GNOME或者(GNOME Desktop)
[root@linzhongniao ~]# yum groupinstall "Desktop" –y
切換圖形界面出現下面錯誤無法切換,原因是"messagebus”“haldaemon”這兩個服務關閉這是在系統優化時犯的錯誤
25.linux關機重啓命令
(1)關機用shutdown命令,還有halt或者init 0,poweroff
我們一般用shutdown –h 後面接時間,shutdown –h now表示現在關閉,
設置指定時間後關機,比如1分鐘後關機
(2)重啓
重啓用reboot(init 6)或者shutdown –r now,或者shutdown –r +時間
26.linux系統開機顯示的版本信息的文件
如果開機不希望顯示這些信息可以清除掉,我們也可以編寫內容
27.motd顯示用crt登錄後的信息
在/etc/motd裏面設置
28.profile
/etc/profile全局環境變量
29.顯示總行數wc
爲每個文件打印新行、字符和字節計數
參數:
-c 打印字節數
-l 打印行數
-m 打印字符數
-w 打印單詞,統計
-L 打印最長的行的長度,應用它可以知道字符串的長度
舉例:
建立測試數據:
[root@linzhongniao ~]# cat >>wc.txt<<EOF
> WERTYU
> qwedfghj
> asd
> 林中鳥
> EOF
[root@linzhongniao ~]# cat wc.txt
WERTYU
qwedfghj
asd
林中鳥
wc –l顯示文件的總行數
[root@linzhongniao ~]# wc -l wc.txt
4 wc.txt
-c參數舉例,打印字節數
[root@linzhongniao ~]# wc -c wc.txt
30 wc.txt
-m參數舉例,打印字符數
[root@linzhongniao ~]# wc -m wc.txt
24 wc.txt 《==和-c參數對比,可知一個漢字相當於兩個字節
-w參數舉例,打印單詞統計
[root@linzhongniao ~]# wc -w wc.txt
4 wc.txt
-L舉例,打印最長的行的字節數
[root@linzhongniao ~]# wc -L wc.txt
8 wc.txt
30.設置開機自啓動
chkconfig --list 查看列表顯示所有,顯示某一個直接指定就可以了不用grep
--level 接運行級別 接服務 off[on] (指定哪些運行級別受到影響)
--add 加到chkconfig管理,自己寫的程序腳本纔會用到
chkconfig原理:
它的工作原理就是將服務加入開機自啓動或者關閉自啓動之後會在/etc/rc.d/rc3.d目錄下創建一個連接文件;開機自啓動以S開頭,關閉開機自啓動以K開頭。設置啓動級別可以在啓動文件中設置例如下圖,通常在自己寫的腳本中會用到,不必對其他啓動文件做任何修改。具體操作在開機自啓動優化中。
31.grup引導菜單
[root@linzhongniao ~]# cat /etc/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/sda4
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-754.2.1.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-754.2.1.el6.x86_64 ro root=UUID=ce2ba6aa-2068-45b2-8942-5de30c7a363a rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-754.2.1.el6.x86_64.img
title CentOS 6 (2.6.32-642.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=UUID=ce2ba6aa-2068-45b2-8942-5de30c7a363a rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-642.el6.x86_64.img
裏面有linux啓動的內核,設置單用戶啓動或者雙系統就要設置grup引導。
32.linux系統開機自啓動優化
關閉不需要的服務,禁止其開機自啓動服務
[root@linzhongniao ~]# chkconfig --list|grep 3:on|egrep -v "crond|sshd|network|rsyslog|sysstat"|awk '{print "chkconfig",$1,"off"}'|bash
[root@linzhongniao ~]# chkconfig --list|grep 3:on
crond 0:off 1:off 2:on3:on4:on5:on6:off
network0:off 1:off 2:on3:on4:on5:on6:off
rsyslog 0:off 1:off 2:on3:on4:on5:on6:off
sshd 0:off 1:off 2:on3:on4:on5:on6:off
sysstat 0:off 1:on2:on3:on4:on5:on6:off
33.查看文件目錄的大小du
du 查看目錄或文件的大小
參數:
-h 人類可讀
[root@linzhongniao ~]# du ett.txt
4 ett.txt
[root@linzhongniao ~]# du -h ett.txt
4.0Kett.txt
--si 像h一樣但是使用1000而不是使用1024的冪
[root@linzhongniao ~]# du --si ett.txt
4.1kett.txt
-S 查看目錄(不包括子目錄大小)或文件的大小
[root@linzhongniao ~]# du -Sh server/
12K server/scripts
4.0Kserver/
-s 查看目錄(包括子目錄)或文件的大小
[root@linzhongniao ~]# du -sh ett.txt
4.0Kett.txt
[root@linzhongniao ~]# du -sh server/
16K server/
34.命令路徑加入的方法
臨時:
[root@linzhongniao ~]# export PATH="$PATH:/root"
[root@linzhongniao ~]# nishishei
-bash: /root/nishishei: Permission denied
[root@linzhongniao ~]# chmod +x /root/nishishei
[root@linzhongniao ~]# nishishei
I am linzhongniao!
永久:
設置環境變量用export PATH="$PATH:/root",永久生效放在/etc/profile全局配置文件裏。
35.查看二進制命令所在路徑
用which查看,從PATH變量所在的路徑查找
[root@linzhongniao ~]# which cp
alias cp='cp -i'
/bin/cp
36.搜索文件的全路徑命令
which命令
[root@linzhongniao ~]# which mv
alias mv='mv -i'
/bin/mv
whereis命令
[root@linzhongniao ~]# whereis mv
mv: /bin/mv /usr/share/man/man1p/mv.1p.gz /usr/share/man/man1/mv.1.gz
locate命令
find命令查找文件或目錄
[root@linzhongniao ~]# find . -type f -name "*.txt"
37.cut
cut 從每一行文件中刪除(切割)部分。
cut命令參數說明
(1)-b參數,按照字節切割文件
輸出第3個字節,空格也算一個字節
[root@linzhongniao ~]# cut -b 3 text.txt
a
輸出第3到4個字節,空格也算一個字節
[root@linzhongniao ~]# cut -b 3-4 text.txt
am
輸出第四個字節之前的,空格也算一個字節
[root@linzhongniao ~]# cut -b -4 text.txt
I am
輸出第四個字節以後的內容
[root@linzhongniao ~]# cut -b 4- text.txt
m linzhongniao my qq is 120989098
(2)-c參數以字符爲單位切割
英文中一個字符就等於一個字節,漢語中一個字符相當於兩個英文字符。
英文中-c參數和-b參數是一樣的。
[root@linzhongniao ~]# cut -c 4- text.txt
m linzhongniao my qq is 120989098
漢語中
[root@linzhongniao ~]# cut -c 3-5 text.txt
am
節放假
(3)-d參數指定分隔符
默認以tab鍵爲分隔符,可以提前用cat –T查看是否是以tab鍵爲分隔符,空格和tab鍵是看不出來的。自定義分隔符用-d參數指定分隔符,-f參數指定打印第幾欄的內容。
[root@linzhongniao ~]# head -1 /etc/passwd|cut -d : -f4
0
默認以tab鍵爲分隔符
[root@linzhongniao ~]# cat -T text.txt
I am linzhongniao my qq is 120340987
中秋節放假
I^Iam^Ilisi
[root@linzhongniao ~]# cut -f 3 text.txt
I am linzhongniao my qq is 120989098
中秋節放假
lisi
指定以空格爲分隔符
[root@linzhongniao ~]# cut -d " " -f 2 text.txt
am
中秋節放假
I am lisi
38.date
date –s “ ”修改時間
date +%F 輸出這樣的“2018-07-31”年月日格式
date +%Y%m%d%H%M輸出這樣的“201809020834”年月日小時分鐘的格式
[root@linzhongniao ~]# echo `date +%F`
2018-07-31
[root@linzhongniao ~]# echo $(date +%F)
2018-07-31
39.ln命令
ln無參數常見創建硬鏈接,很少用到一般就是備份文件。演示見下文創建硬鏈接和軟連接。
硬鏈接:ln 源文件 目標文件
軟連接:ln –s 源文件 目標文件(目標文件不能事先存在)
40.rename
rename重命名文件
rename from to file
rename
form 代表需要替換或要處理的字符文件的一部分,文件的擴展名
to 把前面from代表的內容替換爲to代表的內容即重命名處理後的結果
file 接要處理的文件
格式:
rename "需要重命名的內容" "重命名完了的內容" (指定要修改的文件也可以是,所有內容)
修改文件名用rename
當前目錄下有文件如下所示:
[root@linzhongniao test]# ls
stu_102999_1_finished.jpg stu_102999_2_finished.jpg stu_102999_3_finished.jpg stu_102999_4_finished.jpg stu_102999_5_finished.jpg
要求用rename命令重命名,效果爲stu_102999_1_finished.jpg==>stu_102999_1.jpg,即刪除文件名的_finished
[root@linzhongniao test]# rename "_finished" "" *
[root@linzhongniao test]# ls
stu_102999_1.jpg stu_102999_2.jpg stu_102999_3.jpg stu_102999_4.jpg stu_102999_5.jpg
41.basename(瞭解)
basename-從文件名中去掉目錄路徑和文件後綴
去掉目錄路徑
[root@linzhongniao test]# basename /root/test/stu_102999_1.JPG
stu_102999_1.JPG
去掉文件的後綴
[root@linzhongniao test]# basename stu_102999_1.jpg .jpg
stu_102999_1
42.dirname(瞭解)
dirname——從文件名中去掉文件後綴,與basename命令互補
[root@linzhongniao test]# dirname /root/test/stu_102999_1.JPG
/root/test
43.file
file – 確定文件類型,多個文件用空格分開
[root@linzhongniao ~]# file /etc/init.d/sshd
/etc/init.d/sshd: Bourne-Again shell script text executable
[root@linzhongniao ~]# file ett.txt
ett.txt: ASCII text
[root@linzhongniao ~]# file id.txt sd1.txt
id.txt: ASCII text
sd1.txt: ASCII text
44.md5sum
md5sum - compute and check MD5 message digest計算和檢查md5摘要。
參數:-c 從文件中讀取MD5值並檢查是否一樣。
計算和校驗文件的md5值,md5值是唯一的;如果兩個文件的md5值一樣那麼這兩個文件就是一個文件,如下面text.soft是text.txt的軟連接文件
[root@linzhongniao ~]# ln -s text.txt text.soft
[root@linzhongniao ~]# md5sum text.txt
d41d8cd98f00b204e9800998ecf8427e text.txt
[root@linzhongniao ~]# md5sum text.soft
d41d8cd98f00b204e9800998ecf8427e text.soft
校驗文件的MD5值,用md5sum –c命令,來檢測網絡傳輸的文件數據是否丟失,因爲受網絡波動的影響數據會有丟失或文件受損。
[root@linzhongniao ~]# md5sum text.txt >md5.log
[root@linzhongniao ~]# cat md5.log
d41d8cd98f00b204e9800998ecf8427e text.txt
[root@linzhongniao ~]# md5sum -c md5.log
text.txt: OK
往文件中插入內容,文件的md5值會發生改變,模擬網絡波動
[root@linzhongniao ~]# echo "111" >> text.txt
[root@linzhongniao ~]# md5sum -c md5.log
text.txt: FAILED
md5sum: WARNING: 1 of 1 computed checksum did NOT match
45.dumpe2fs
dumpe2fs - 顯示ext2/ext3/ext4文件系統信息。
dumpe2fs命令語法:dumpe2fs [ -bfhixV ] [ -o superblock=superblock ] [ -o blocksize=blocksize ] device
語法看起來比較複雜,看不懂的直接看下面的常用命令選項和實例。
dumpe2fs命令描述
顯示device中文件系統的超級塊和塊組信息。
查看文件系統的超級塊和組塊的信息,超級塊記錄了文件系統的管理信息,inode和block的大小,元數據。
[root@linzhongniao ~]# dumpe2fs /dev/sdb1|egrep -i "super"
dumpe2fs 1.41.12 (17-May-2010)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
Primary superblock at 1, Group descriptors at 2-2
Backup superblock at 8193, Group descriptors at 8194-8194
Backup superblock at 24577, Group descriptors at 24578-24578
Backup superblock at 40961, Group descriptors at 40962-40962
Backup superblock at 57345, Group descriptors at 57346-57346
Backup superblock at 73729, Group descriptors at 73730-73730
[root@linzhongniao ~]# dumpe2fs /dev/sdb1|egrep -i "inode count|block count"
dumpe2fs 1.41.12 (17-May-2010)
Inode count: 25896
Block count: 103424
Reserved block count: 5171
46.xargs
xargs 從標準輸入(管道或stdin)獲取數據,並將數據轉換成命令行的參數,創建和執行命令,通常和find以及“|”管道一起使用。
參數:
-n 數字,分組
[root@linzhongniao ~]# xargs -n 2 <linzhongniao.txt
1 2
3 4
5 6
7 8
-i和-I參數(瞭解)
[root@linzhongniao ~]# find . -type f -name "*.txt"|xargs -i mv {} /tmp/k/
[root@linzhongniao ~]# cd /tmp/k/
[root@linzhongniao k]# ls
2018-07-20.txt b.txt fff.txt linzhongniao.txt test1.txtuserpasswd3.txt usersm.txt
20180806.txtceshi.txt f.txtperson.txttext.txt userpasswd.txt users.txt
201808.txt ddd.txtggg.txt sdsd.txt userpasswd1.txt usersm1.txt user.txt
a.txt ett.txtkkk.txt sss.txt userpasswd2.txt usersm2.txt
[root@linzhongniao k]# find . -type f -name "*.txt"|xargs -I {} mv {} /tmp/l/
[root@linzhongniao k]# cd /tmp/l/
[root@linzhongniao l]# ls
2018-07-20.txt b.txt fff.txt linzhongniao.txt test1.txtuserpasswd3.txt usersm.txt
20180806.txtceshi.txt f.txtperson.txttext.txt userpasswd.txt users.txt
201808.txt ddd.txtggg.txt sdsd.txt userpasswd1.txt usersm1.txt user.txt
a.txt ett.txtkkk.txt sss.txt userpasswd2.txt usersm2.txt
47.tr
tr 對來自標準輸入的字符進行替換、壓縮和刪除。它可以將一組字符變成另一組字符,經常用來編寫優美的單行命令,作用很強大。
tr 選項 參數
(1)將輸入大寫字符逐個(不是整個字符)替換成小寫字符
[root@linzhongniao ~]# echo "HELLO WORLD"|tr 'A-Z' 'a-z'
hello world
'A-Z' 和 'a-z'都是集合,集合是可以自己制定的。例如:'ABD-}'、'bB.,'、'a-de-h'、'a-c0-9'都屬於集合,集合裏可以使用'\n'、'\t',可以使用其他ASCII字符。
(2)-s參數
-s,squeeze-repeats 替換重複字符的每個輸入序列
[root@linzhongniao ~]# echo "HEELLO WWORLDD"|tr -s 'A-Z' 'a-z'
helo world
(3)使用tr刪除字符
-d參數刪除所有屬於字符集的字符
[root@linzhongniao ~]# echo "hello 123 world 456"|tr -d '0-9'
hello world
(4)刪除不在補集中所有字符
-c,取代所有不屬於第一字符集的字符,例刪除除了0-9就的所有內容
[root@linzhongniao ~]# echo "hello$%^^&1 2 3/.(^&world 4 5 6"|tr -d -c '0-9 \n'
1 2 3 4 5 6
也可以結合xargs
[root@linzhongniao ~]# echo "hello$%^^&1 2 3/.(^&world 4 5 6"|tr -c '0-9' ' '|xargs
1 2 3 4 5 6
48.seq
sequence==seq序列
seq命令(sequence序列),它可以打印數字的序列從低到高。例如從低到高打印數字10。橫着打印10個數字,用seq –s參數,它可以指定分隔符,默認分隔符是回車\n。
參數:
-s 指定分隔符
-w 用前導零來平衡寬度,以01..02..03的形式打印
(1)打印1到10橫着打印或豎着打印,以1.2…..的方式
(2)-w 用前導零來平衡寬度
豎着打印1到10以01 02 …….的方式
[root@linzhongniao ~]# seq -w 10
01
02
03
04
05
06
07
08
09
10
橫着打印1到10以01 02 …….的方式,以空格爲分隔符
[root@linzhongniao ~]# seq -w -s " " 10
01 02 03 04 05 06 07 08 09 10
(3)從數字2到10,打印數字10
(4)從1開始以2爲等差,豎着打印數字10
從1開始以2位等差,橫着打印數字10
[root@linzhongniao ~]# seq -s " " 1 2 10
1 3 5 7 9
49.strace命令跟蹤排查
strace 跟蹤系統調用和信號
參數:
-tt 在每行的輸出的前面,顯示毫秒級別的時間
-T 顯示每次系統調用所花費的時間
-o 把strace的輸出單獨寫到指定的文件
-p 指定要跟蹤進程的pid,要同時跟蹤多個pid,重複多次-p選項即可
–f 跟蹤目標進程,以及目標進程創建的所有子進程。
[root@linzhongniao ~]# strace -f rm -f ddd/
strace –p(pid)跟蹤進程排查,分析任務進程佔用cpu過高的方法。殭屍進程strtace是沒有權限追蹤的。
[root@linzhongniao ~]# strace -p 1387
strace: attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted
用top或者ps命令找到可疑的id,也可以直接用top –H找出佔用線程最高的id
[root@linzhongniao ~]# ps -ef|grep sshd
root 1527 1 0 09:01 ?00:00:00 /usr/sbin/sshd
root 1641 1527 0 09:02 ?00:00:00 sshd: root@pts/0
root 2116 1645 0 09:26 pts/000:00:00 grep --color=auto sshd
[root@linzhongniao ~]# strace -p 1527
50.查看進程命令
查看進程靜態的用ps動態的用top,也可以用htop效果更佳華麗一點
50.1 ps命令查看靜態進程
ps:將某個時間點的進程情況選取下來
參數(瞭解):
-A 所有進程都顯示出來,與-e有相同的作用
a 不與terminal(終端)有關的程序
u 有效用戶相關的進程
x 通常與a參數一起使用可列出較完整信息,輸出格式規劃
-l 列表,更詳細的將pid列出
-j 列出工作的格式(jobs)
-f 做一個更爲完整的輸出
常用命令(記住):
ps aux查看系統所有的進程信息(重要)
ps –l(小寫的L)只列出與自己有關的進程(重要)
ps –lA 也能查看系統的所有進程信息
ps axjf 連同部分進程樹一起查看
(1)ps aux基礎頁面詳解
USER 該進程屬於哪個用戶
PID 進程的PID標識
%CPU 該進程使用的cpu資源百分比
%MEM 該進程所佔用的物理內存百分比
VSZ 該進程用掉的虛擬內存量
RSS 該進程佔用的固定的內存量
TTY 該進程是哪個終端機上面的,若與終端機無關則顯示?,若爲tty1-tty6是本機上面的登錄程序,若pst/0等則表示由網絡連接該主機的進程。
STAT 進程當前的狀態與ps –l的狀態相同
START 進程被觸發啓動的時間
TIME 該進程實際使用cpu運行的時間
COMMAND 該進程的實際命令
(2)ps –l基礎頁面詳解
[root@linzhongniao ~]# ps -l
F S UIDPID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1695 1691 0 82 2 - 27146 do_wai pts/000:00:00 bash
4 T 0 18825 1695 0 82 2 - 34790 do_sig pts/000:00:00 vim
4 R 0 21270 1695 0 82 2 - 27035 - pts/000:00:00 ps
F:代表進程的標誌說明這個進程的權限,常見號碼有:
若爲4表示此進程的權限爲root。
若爲1 則表示此進程僅可進行復制(fork)而無法實際執行(exec)
S:代表這個進程的狀態,主要狀態有:S R D T Z
R(running)該進程正在運行中
S(sleep)該進程目前正在睡眠狀態,但可以被喚醒
D 不可被喚醒的睡眠狀態
T 停止狀態(stop)可能是工作控制(後臺暫停)或除錯狀態
Z (Zombe)“殭屍”狀態該進程已經停止但無法被刪除至內存外
UID|PID|PPID 代表此進程被該UID擁有|進程的PID號|此進程的父進程的PID號
C 代表CPU使用率,單位爲百分比
PRI /NI Priority/Nice的縮寫,代表此進程被CPU所執行的優先級,數值越小代表該進程越快被cpu執行
50.2 top查看動態進程
參數:
-d 接數字。整個進程更新的秒數
-p 指定某個pid查看
在執行top命令中可以使用的按鍵命令
?:顯示top當中可以輸入的按鍵命令
P :以cpu使用的資源排序
M:以內存的使用資源顯示
N:以pid進行排序
T:由該進程使用的cpu時間積累(TIME+)排序
k:給予某個PID一個信號,殺死進程
r:給予某個PID重新制定一個nice值,先輸入PID值回車再輸入nice值
q:離開top軟件
top命令基礎界面詳解
[root@linzhongniao ~]# top
top - 16:30:50 up 8:38, 3 users, load average: 0.00, 0.00, 0.00
Tasks: 131 total, 1 running, 130 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.1%sy, 0.0%ni, 99.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1003008k total, 348588k used, 654420k free,82488k buffers
Swap: 1535996k total,0k used, 1535996k free,89592k cached
第一行:任務隊列信息
16:30:50 當前時間
up 8:38 系統運行時間8小時38分鐘
3 users 當前登錄幾個用戶
load average: 0.00, 0.00, 0.00 系統負載即任務隊列的平均長度,三個數值分別爲1分鐘、5分鐘、15分鐘前系統負載的平均值(重要),也可以用w命令查看或者cat /proc/loadavg
第二行:進程數信息
Tasks: 131 total 進程總數
1 running 一個正在運行的進程數
130 sleeping 130個睡眠的進程數
0 stopped 停止的進程數
0 zombie 殭屍進程數
第三行:CPU狀態
0.0%us 用戶進程佔用的百分比
0.1%sy 系統進程佔用的百分比
0.0%ni 用戶進程空間內改變過優先級的進程佔cpu的百分比
99.9%id 空閒cpu百分比
0.0%wa IO等待佔用CPU的百分比
0.0%hi 硬中斷佔用cpu的百分比
0.0%si 軟中斷佔用cpu的百分比
第四行:內存狀態
1003008k total 物理內存量
348588k used 使用的物理內存總量
654420k free 空閒內存總量
82488k buffers 用作內核緩存的內存量
第五行:swap交換狀態
1535996k total 交換區總量
0k used 使用的交換區總量
1535996k free 空閒的交換區總量
89592k cached 緩衝的交換區總量
第七行:各進程的狀態監控
PID 進程ID
user 用戶
PR 優先級
NInice值負值表示高優先級,正值表示低優先級
VIRT 使用的虛擬內存的總量
RES 進程使用的、未被換出的物理內存大小,單位kb
SHR 共享內存大小
%CPU 上次更新到現在的CPU時間佔用百分比
%MEM 進程使用的物理內存百分比
TIME+ 進程使用的CPU時間總計,單位1/100秒
COMMAND 命令名/命令行
51.vi/vim命令考察
退出保存 wq
強制退出保存 wq!
強制退出不保存 q!
光標移動到文件的最後一行 G
光標移動到文件的第一行 gg或者:0
移動到指定行 ngg比如21gg
從光標所在位置將光標移動到當前行的開頭 “^”尖括號或者home鍵
從光標所在位置將光標移動到當前行的結尾 “$”或者end鍵
取消上一次的操作 u
刪除一行 dd ndd
向下搜索 /
向上搜索 ?
向上或下繼續搜索 n
向上或下反向搜索 N
52.tac命令(瞭解)
tac反向查看與cat相反,以行爲單位反向讀取,不是每一行反向讀取,即從最後一行開始讀取
[root@linzhongniao ~]# tac ddd/20180806.txt
erwer
dfsadfdf
DS
ds
sdsddjkjk dsjk
djskd
DSDSDS
[root@linzhongniao ~]# cat ddd/20180806.txt
DSDSDS
djskd
sdsddjkjk dsjk
ds
DS
dfsadfdf
erwer
53.rev命令(瞭解)
rev也是反向讀取,行的順序不會變,一行內容的首尾相反
[root@linzhongniao ~]# echo "123456"|rev
654321
[root@linzhongniao ~]# rev ddd/20180806.txt
SDSDSD
dksjd
kjsd kjkjd dsds
sd
SD
fdfdasfd
rewre
54.more
more命令以滾動的方式查看文件,空格鍵向下一屏回車鍵向下一行,小b向上查看,按等於號顯示行號。/反斜線可以搜索。按小寫的v進入vi編輯器和vi編輯器是一樣的。vi編輯器的命令參數more同樣適用。小寫q退出。
more –“接數字”例如more -10,以10行爲單位查看
55.less命令
less命令也是分頁查看,查顯示行號用less –N
56.paste 命令
paste單詞的意思是粘貼的意思,該命令主要用來將多個文件的內容合併,與cut命令的功能正好相反。
粘貼兩個不同來源的數據時首先需將其分類,並確保兩個文件的行數相同。paste按行合併文件。默認情況下,paste連接用空格或tab鍵分隔新行中的不同文本,除非指定-d選項指定域分隔符。
paste的格式爲:
paste 參數 –file1 –file2
選項含義如下:
-d 指定不同於空格或tab鍵的域分隔符。例如用@符號分隔域,使用- d “@”。
-s 將每個文件每列按行合併而不是按行粘貼,即每個文本的每列,合併後單獨是一行。
“-” 使用標準輸出。例如ls -l |paste ,即只在一列上顯示輸出。
[root@linzhongniao ~]# paste ggg.txt fff.txt
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
10 11
11 12
12 13
13 14
14 15
15 16
16 17
17 18
18 19
19 20
20 21
要創建不同於空格或tab鍵的域分隔符,使用-d選項。下面的例子用冒號做域分隔符。
[root@linzhongniao ~]# paste -d ":" ggg.txt fff.txt
1:2
2:3
3:4
4:5
5:6
6:7
7:8
8:9
9:10
10:11
11:12
12:13
13:14
14:15
15:16
16:17
17:18
18:19
19:20
20:21
交叉合併的例子結合tr命令
[root@linzhongniao ~]# head svn.txt svnpass.txt
==> svn.txt <==
stu119594
stu25054
stu320718
stu424819
stu53033
stu62799
stu725987
stu83282
stu917554
stu1020697
==> svnpass.txt <==
be8e0041
aee8414e
5203ac06
24dbff8a
19390195
bc2c5d29
b1e4a85d
af48f59d
5360caec
38d7a4ff
[root@linzhongniao ~]# paste svn.txt svnpass.txt|tr "\t" "\n"
stu119594
be8e0041
stu25054
aee8414e
stu320718
5203ac06
stu424819
24dbff8a
stu53033
19390195
stu62799
bc2c5d29
stu725987
b1e4a85d
stu83282
af48f59d
stu917554
5360caec
stu1020697
38d7a4ff
-s參數的用法
[root@linzhongniao ~]# head new.txt newac
==> new.txt <==
1
2
3
4
5
6
==> newac <==
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:
[root@linzhongniao ~]# paste -s new.txt newac
1 2 3 4 5 6
# 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:3:initdefault:
實例:
已知SVN服務器賬號及密碼字符串如下:
提示:stu開頭的爲賬號,對應的爲密碼
[root@linzhongniao ~]# cat svnpass1.txt
stu119594
be8e0041
stu25054
aee8414e
stu320718
5203ac06
stu424819
24dbff8a
stu53033
19390195
stu62799
bc2c5d29
stu725987
b1e4a85d
stu83282
af48f59d
stu917554
5360caec
stu1020697
38d7a4ff
問題:賬號和密碼合併成一行,並用等號分離
stu119594=be8e0041
stu25054=aee8414e
stu320718=5203ac06
解答:方法一:
[root@linzhongniao ~]# paste -sd "=\n" svnpass1.txt
stu119594=be8e0041
stu25054=aee8414e
stu320718=5203ac06
stu424819=24dbff8a
stu53033=19390195
stu62799=bc2c5d29
stu725987=b1e4a85d
stu83282=af48f59d
stu917554=5360caec
stu1020697=38d7a4ff
方法二:
[root@linzhongniao ~]# paste -d "=" - - <svnpass1.txt
stu119594=be8e0041
stu25054=aee8414e
stu320718=5203ac06
stu424819=24dbff8a
stu53033=19390195
stu62799=bc2c5d29
stu725987=b1e4a85d
stu83282=af48f59d
stu917554=5360caec
stu1020697=38d7a4ff
57.chpasswd命令
chpasswd以批量處理的方式更新用戶密碼
chpasswd命令是批量更新用戶口令的工具,是把一個文件的內容重新定向添加到/etc/shadow中。
參數:
-e:輸入的密碼是加密後的密文
-h:顯示幫助信息並退出
-m:當被支持的密碼未被加密時,使用MD5加密代替DE5加密。
實例:
先創建用戶密碼對應文件,格式爲username:passwd, 如users1:users1b2b9,必須以這種格式來寫(涉及合併兩個文件可以用paste命令)並且不能空行保存成文本,然後執行chpasswd命令。列如chpasswd<usersm2.txt。
58.dd命令
dd命令用於複製文件並對源文件的內容進行轉換和格式化處理。dd命令可以用來備份裸設備,建議有需要的時候使用dd對物理磁盤操作。還可以創建文件和文件系統。
語法:dd(選項)
選項:
bs=<字節數>:將ibs(輸入)與歐巴桑(輸出)設成指定的字節數;
cbs=<字節數>:轉換時,每次只轉換指定的字節數;
conv=<關鍵字>:指定文件轉換的方式;
count=<區塊數>:僅讀取指定的區塊數;
ibs=<字節數>:每次讀取的字節數;
obs=<字節數>:每次輸出的字節數;
of=<文件>:輸出到文件;
seek=<區塊數>:一開始輸出時,跳過指定的區塊數;
skip=<區塊數>:一開始讀取時,跳過指定的區塊數;
--help:幫助;
--version:顯示版本信息。
實例:
(1)創建文件
[root@linzhongniao ~]# dd if=/dev/zero of=nnn.txt bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.00102039 s, 1.0 GB/s
[root@linzhongniao ~]# du -sh nnn.txt
1.0Mnnn.txt
if 代表輸入文件。如果不指定if,默認就會從stdin中讀取輸入。
of 代表輸出文件。如果不指定of,默認就會將stdout作爲默認輸出。
bs 代表字節爲單位的塊大小。
count 代表被複制的塊數。
/dev/zero 是一個字符設備,會不斷返回0值字節(\0)。
(2)創建文件系統
[root@linzhongniao ~]# dd if=/dev/zero of=/dev/sdc bs=10M count=100
dd: writing `/dev/sdc': No space left on device
48+0 records in
47+0 records out
498610176 bytes (499 MB) copied, 8.26442 s, 60.3 MB/s
59.查看本地網卡信息
ethtool 是一個linux下的網絡驅動程序的診斷工具,可以獲取網絡設備的相關信息包括連接狀態、驅動版本。
查看機器上網的速度:查看千兆還是百兆的用ethool eth0,操作完畢後輸出信息中“speed”這一項就指示了網卡的速度。
如果機器上安裝了兩塊網卡,怎麼確定eth0對應那快網卡呢?執行下面命令看那快的led燈亮就是那個
[root@linzhongniao ~]# ethtool -p eth0 10
將千兆網卡的速度將爲百兆
ethtool –s eth0 speed 100
60.sh命令
sh命令是shell命令語言解釋器,執行命令從標準輸入讀取或從一個文件中讀取,和內核進行溝通。
參數:
-i:實現腳本交互。
-n:進行shell腳本的語法檢查。
-x:實現shell腳本逐條語句的跟蹤。
演示:
(1)-x參數,逐條跟蹤監本的執行過程
[root@linzhongniao ~]# sh -x chuangjianrizhi.sh
++ seq 15
+ for n in '`seq 15`'
+ date -s 2018/07/1
Sun Jul 1 00:00:00 CST 2018
++ date +%F
+ touch /app/logs/access_www_2018-07-01.log
+ for n in '`seq 15`'
+ date -s 2018/07/2
Mon Jul 2 00:00:00 CST 2018
++ date +%F
+ touch /app/logs/access_www_2018-07-02.log
+ for n in '`seq 15`'
+ date -s 2018/07/3
Tue Jul 3 00:00:00 CST 2018
++ date +%F
+ touch /app/logs/access_www_2018-07-03.log
+ for n in '`seq 15`'
+ date -s 2018/07/4
Wed Jul 4 00:00:00 CST 2018
++ date +%F
+ touch /app/logs/access_www_2018-07-04.log
+ for n in '`seq 15`'
+ date -s 2018/07/5
Thu Jul 5 00:00:00 CST 2018
++ date +%F
+ touch /app/logs/access_www_2018-07-05.log
+ for n in '`seq 15`'
+ date -s 2018/07/6
Fri Jul 6 00:00:00 CST 2018
++ date +%F
+ touch /app/logs/access_www_2018-07-06.log
+ for n in '`seq 15`'
+ date -s 2018/07/7
Sat Jul 7 00:00:00 CST 2018
++ date +%F
+ touch /app/logs/access_www_2018-07-07.log
+ for n in '`seq 15`'
+ date -s 2018/07/8
Sun Jul 8 00:00:00 CST 2018
++ date +%F
+ touch /app/logs/access_www_2018-07-08.log
+ for n in '`seq 15`'
+ date -s 2018/07/9
Mon Jul 9 00:00:00 CST 2018
++ date +%F
+ touch /app/logs/access_www_2018-07-09.log
+ for n in '`seq 15`'
+ date -s 2018/07/10
Tue Jul 10 00:00:00 CST 2018
++ date +%F
+ touch /app/logs/access_www_2018-07-10.log
+ for n in '`seq 15`'
+ date -s 2018/07/11
Wed Jul 11 00:00:00 CST 2018
++ date +%F
+ touch /app/logs/access_www_2018-07-11.log
+ for n in '`seq 15`'
+ date -s 2018/07/12
Thu Jul 12 00:00:00 CST 2018
++ date +%F
+ touch /app/logs/access_www_2018-07-12.log
+ for n in '`seq 15`'
+ date -s 2018/07/13
Fri Jul 13 00:00:00 CST 2018
++ date +%F
+ touch /app/logs/access_www_2018-07-13.log
+ for n in '`seq 15`'
+ date -s 2018/07/14
Sat Jul 14 00:00:00 CST 2018
++ date +%F
+ touch /app/logs/access_www_2018-07-14.log
+ for n in '`seq 15`'
+ date -s 2018/07/15
Sun Jul 15 00:00:00 CST 2018
++ date +%F
+ touch /app/logs/access_www_2018-07-15.log
+ date -s 2018/07/16
Mon Jul 16 00:00:00 CST 2018
(2)-n參數,檢查是否有語法錯誤
如果有語法錯誤執行腳本就會報錯,不是很重要如果腳本有錯誤也不會執行
[root@linzhongniao ~]# sh -n chuangjianrizhi.sh
chuangjianrizhi.sh: line 3: syntax error near unexpected token `do'
chuangjianrizhi.sh: line 3: `do'
(3)-i參數,實現腳本的交互
[root@linzhongniao ~]# sh -i chuangjianrizhi.sh
Sun Jul 1 00:00:00 CST 2018
Mon Jul 2 00:00:00 CST 2018
Tue Jul 3 00:00:00 CST 2018
Wed Jul 4 00:00:00 CST 2018
Thu Jul 5 00:00:00 CST 2018
Fri Jul 6 00:00:00 CST 2018
Sat Jul 7 00:00:00 CST 2018
Sun Jul 8 00:00:00 CST 2018
Mon Jul 9 00:00:00 CST 2018
Tue Jul 10 00:00:00 CST 2018
Wed Jul 11 00:00:00 CST 2018
Thu Jul 12 00:00:00 CST 2018
Fri Jul 13 00:00:00 CST 2018
Sat Jul 14 00:00:00 CST 2018
Sun Jul 15 00:00:00 CST 2018
Mon Jul 16 00:00:00 CST 2018
61.echo命令
echo顯示一行文本
參數:
-n 不輸出後面的換行符
-e 支持對反斜槓轉義的解釋
[root@linzhongniao ~]# echo "dhfjd\ndfjsd"
dhfjd\ndfjsd
[root@linzhongniao ~]# echo -e "dhfjd\ndfjsd"
dhfjd
dfjsd
-E 禁用反斜槓轉義(默認)
[root@linzhongniao ~]# echo -E "dhfjd\ndfjsd"
dhfjd\ndfjsd
echo $RANDOM輸出隨機數通常用於爲用戶設置密碼
[root@linzhongniao ~]# echo $RANDOM
26292
62.free命令
free –m查看物理內存
第一部分Mem行:
total內存總數:979M
used 已經使用的內存數:182M
free 空閒的內存數:797M
shared 當前已經廢棄不用,總是0
buffers 緩衝區內存數:16M
cached 緩存內存數:44M
關係:total(979M)=used(182M)+free(797M)
第二部分(-/+ buffers/cache):
(-buffers/cache)used內存數:121M(指的是讀一部分Mem行中的used-buffers-cached)
(+buffers/cache)free內存數:858M(指的是讀一部分Mem行中的free+buffers+cached)
提示:
1.buffers爲寫入緩衝區,“sync;”將緩衝區數據寫入磁盤
2.cache爲讀取數據的緩存區
案例:取出剩餘的物理內存
[root@linzhongniao ~]# free -m|awk -F " " 'NR==3{ print $4}'
852
63.sync命令
同步-刷新文件系統緩衝區buffer,將緩衝區數據寫入磁盤
[root@linzhongniao ~]# sync;
64.split命令
cut命令是對文件的一行進行切割。split 的功能使把文件分成幾部分,按指定行數大小進行切割
語法:
split 選項 輸入的文件 輸出的文件_後綴
參數:
-l(小寫的L) 指定行數
-a 使用長度爲N(N爲數字)的後綴(默認2),及後綴的長度
-d - d,numeric-suffixes 使用數字後綴而不是字母
-b 指定輸出文件字節大小
每個輸出文件放置大小字節
實例:
(1) -l(L)參數
[root@linzhongniao ~]# split -l 10 /etc/inittab new
[root@linzhongniao ~]# ls n
newaa newab newac nishishei nnn.txt
[root@linzhongniao ~]# head newaa newab newac
==> newaa <==
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#
==> newab <==
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
#
# For information on how to write upstart event handlers, or how
# upstart works, see init(5), init(8), and initctl(8).
#
# Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
==> newac <==
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:
[root@linzhongniao ~]# wc -l ne*
10 newaa
10 newab
6 newac
26 total
(2)-a參數舉例說明
[root@linzhongniao ~]# split -l 10 -a 3 /etc/inittab new2
[root@linzhongniao ~]# wc -l new2*
10 new2aaa
10 new2aab
6 new2aac
26 total
(3)-d參數舉例
[root@linzhongniao ~]# split -l 10 -a 4 -d /etc/inittab inittabb
[root@linzhongniao ~]# wc -l inittabb*
10 inittabb0000
10 inittabb0001
6 inittabb0002
26 total
65.diff和vimdiff命令
(1)diff比較兩個文件的不同
[root@linzhongniao ~]# diff chuangjianrizhi.sh chuangjianrizhi.ori.sh
0a1 《==add增加的意思
> #!/bin/bash
2c3 《==change改變的意思
< for n in `seq 15`
---
> for n in `seq 20`
7d7 《==del刪除的意思
< date -s '2018/07/16'
除了比較文件的不同還可以比較目錄的不同
[root@linzhongniao ~]# diff /etc/rc3.d/ /etc/rc4.d/
Only in /etc/rc3.d/: K60nfs
Only in /etc/rc4.d/: S30nfs
(2)以編譯的方式查看多個(最多四個)文件的不同
用diff命令不顯眼。可以用vimdiff可視化工具。vimdiff相當於vim -d
66.tee多重重定向命令
從標準輸入讀取並寫入標準輸出和文件,把輸出的結果在屏幕顯示並重定向到文件中。
參數:-a 將輸出的結果追加重定向到文件中
[root@linzhongniao ~]# ls|tee /tmp/tee.txt
a
anaconda-ks.cfg
b
backup_2018-08-04-14-00.tar.gz
backup_201808042059.tar.gz
backup_201808042100.tar.gz
.....
install.log
......
sd4.txt
sd5.txt
server
soft_file
sort.txt
.......
woshishei
woshishei_hard_link
[root@linzhongniao ~]# wc -l /tmp/tee.txt
62 /tmp/tee.txt
-a參數舉例,將內容追加重定向到文件中
[root@linzhongniao ~]# ls|tee -a /tmp/tee.txt
a
anaconda-ks.cfg
b
......
,,,,,,,,
id.txt
inittab100
inittab101
inittab102
......
Pictures
Public
r
sd1.txt
sd2.txt
sd3.txt
sd4.txt
.......
text.soft
useradd
Videos
woshishei
woshishei_hard_link
[root@linzhongniao ~]# wc -l /tmp/tee.txt
124 /tmp/tee.txt
67.od命令
od命令用戶查看二進制文件
68.sort命令(重要)
sort將文件進行排序默認從小到大排序,並將排序結果標準輸出,sort命令既可以從特定的文件,也可以從stdin中獲取輸入。
語法:
sort 參數 文件
參數:
-u 壓縮相同行
-n是按照數字大小排序
-r是以相反順序排序
-k是指定需要排序的欄位
-t指定分隔符
實例:
sort將文件或者文本的每一行作爲一個單位,相互比較,比較原則是從首字母向後依次按ASCII碼值進行比較,最後將他們按升序輸出。
[root@linzhongniao ~]# cat id.txt
10.0.0.5
10.0.0.1
10.0.0.2
10.0.0.3
10.0.0.4
10.0.0.5
10.0.0.5
[root@linzhongniao ~]# sort id.txt
10.0.0.1
10.0.0.2
10.0.0.3
10.0.0.4
10.0.0.5
10.0.0.5
10.0.0.5
壓縮相同行使用-u選項或者uniq也可以壓縮相同行的數據。uniq 報告或忽略重複的相鄰行它只能壓縮相鄰行,
uniq –c命令統計相鄰相同行單詞出現的次數,可以用來計算單詞出現的次數。
[root@linzhongniao ~]# cat id.txt
10.0.0.5
10.0.0.1
10.0.0.2
10.0.0.3
10.0.0.4
10.0.0.5
10.0.0.5
sort –u和uniq對比
[root@linzhongniao ~]# sort -u id.txt
10.0.0.1
10.0.0.2
10.0.0.3
10.0.0.4
10.0.0.5
[root@linzhongniao ~]# uniq id.txt
10.0.0.5
10.0.0.1
10.0.0.2
10.0.0.3
10.0.0.4
10.0.0.5
uniq –c命令演示
[root@linzhongniao ~]# uniq -c id.txt
1 10.0.0.5
1 10.0.0.1
1 10.0.0.2
1 10.0.0.3
1 10.0.0.4
2 10.0.0.5
sort的-n、-r、-k、-t選項的使用
將第二列的數字按照從小到大的順序排列
[root@linzhongniao ~]# sort -nk 2 -t: sort.txt
aaa:10:1.1
bbb:20:2.2
ccc:30:3.3
ddd:40:4.4
eee:50:5.5
eee:50:5.5
將第三例數字從大到小排列``
[root@linzhongniao ~]# sort -nrk 3 -t: sort.txt
eee:50:5.5
eee:50:5.5
ddd:40:4.4
ccc:30:3.3
bbb:20:2.2
aaa:10:1.1
69.查詢命令講解
(1)用戶及日誌查詢
w命令 顯示誰登陸了,他們在做什麼,查看系統負載平均值信息
who命令 顯示誰登錄了
[root@linzhongniao ~]# w
09:05:58 up 11:08, 3 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 -07Aug18 389days 0.06s 0.06s -bash
root pts/1zbf666 07Aug18 0.00s 0.48s 0.00s w
root pts/2zbf666 00:029:05m 0.05s 0.01s -bash
[root@linzhongniao ~]# who
root tty1 2018-08-07 08:54
root pts/12018-08-07 10:19 (administrator)
root pts/22018-09-01 00:02 (administrator)
(2)顯示誰登錄
last ,lastb命令顯示最後登錄的用戶列表
(3)lastlog命令
lastlog 顯示最近系統用戶的登錄情況它會讀/var/log/lastlog文件
(4)finger
finger查找用戶信息
參數說明:
-l 多行顯示
-s 單行顯示
[root@linzhongniao ~]# finger -l
Login: root Name: root
Directory: /rootShell: /bin/bash
On since Tue Sep 3 05:26 (CST) on tty11 day 4 hours idle 登錄時間
On since Tue Sep 3 05:26 (CST) on pts/0 from 192.168.18.3 登錄的窗口
On since Tue Sep 3 06:07 (CST) on pts/1 from 192.168.18.3 登錄的窗口
3 hours 2 minutes idle
On since Wed Sep 4 05:07 (CST) on pts/2 from 192.168.18.3
4 hours 37 minutes idle
New mail received Tue Sep 3 07:41 2019 (CST)
Unread since Thu Jun 28 17:01 2018 (CST)
No Plan.
[root@linzhongniao ~]# finger -s
Login Name Tty Idle Login Time Office Office Phone
root root tty1 1d Sep 3 05:26
root root pts/0 Sep 3 05:26 (192.168.18.3)
root root pts/13:02 Sep 3 06:07 (192.168.18.3)
root root pts/24:37 Sep 4 05:07 (192.168.18.3)
70.企業面試題2
1.如何過濾出已知當前目錄下linzhongniao中的所有一級目錄(提示:不包含linzhongniao目錄下面目錄的子目錄及隱藏目錄,即只能是一級目錄)
創建模擬數據
[root@linzhongniao ~]# mkdir linzhongniao
[root@linzhongniao ~]# cd linzhongniao
[root@linzhongniao linzhongniao]# ls
[root@linzhongniao linzhongniao]# mkdir ext/linzhongniao test zhangsan lisi wanger -p
[root@linzhongniao linzhongniao]# touch nishishei linzhongniao wodi.gz nimei.gz
分析過程:要完成此題,要先想如何區分目錄和文件?
方法:
(1)根據顏色區分文件和目錄
(2)ls –l輸出結果中以d(全拼directory)開頭的就是目錄。
(3)通過給目錄加標識,然後過濾帶標識的,就過濾出目錄(ls –F或ls -p)-F表示不同的文件加不同的標識,-p表示只給目錄加斜線。
(4) 通過find查找指定類型的文件(-d 就是目錄)
實戰:方法一:
[root@linzhongniao linzhongniao]# ls -l
total 20
drwxr-xr-x. 3 root root 4096 Jul 3 15:29 ext
-rw-r--r--. 1 root root0 Jul 3 15:31 linzhongniao
drwxr-xr-x. 2 root root 4096 Jul 3 15:29 lisi
-rw-r--r--. 1 root root0 Jul 3 15:31 nimei.gz
-rw-r--r--. 1 root root0 Jul 3 15:31 nishishei
drwxr-xr-x. 2 root root 4096 Jul 3 15:29 test
drwxr-xr-x. 2 root root 4096 Jul 3 15:29 wanger
-rw-r--r--. 1 root root0 Jul 3 15:31 wodi.gz
drwxr-xr-x. 2 root root 4096 Jul 3 15:29 zhangsan
[root@linzhongniao linzhongniao]# ls -l|grep "^d" 《==尖括號表示以什麼開頭
drwxr-xr-x. 3 root root 4096 Jul 3 15:29 ext
drwxr-xr-x. 2 root root 4096 Jul 3 15:29 lisi
drwxr-xr-x. 2 root root 4096 Jul 3 15:29 test
drwxr-xr-x. 2 root root 4096 Jul 3 15:29 wanger
drwxr-xr-x. 2 root root 4096 Jul 3 15:29 zhangsan
方法二:
[root@linzhongniao linzhongniao]# ls -F
ext/ lisi/ nishishei wanger/ zhangsan/
linzhongniao nimei.gz test/ wodi.gz
[root@linzhongniao linzhongniao]# ls -F|grep "/$" 《== “/$”以斜槓結尾
ext/
lisi/
test/
wanger/
zhangsan/
方法三:
-maxdepth 1深度爲1,最底層目錄,因爲第二層也會有目錄那麼不用這個參數有可能不準確,查找文件也是可以用的。
[root@linzhongniao linzhongniao]# find ./ -maxdepth 1 -type d ! -name "."
./ext
./wanger
./test
./zhangsan
./lisi
方法四:awk的過濾功能
[root@linzhongniao linzhongniao]# ls -l|awk '/^d/'
drwxr-xr-x. 3 root root 4096 Jul 3 15:29 ext
drwxr-xr-x. 2 root root 4096 Jul 3 15:29 lisi
drwxr-xr-x. 2 root root 4096 Jul 3 15:29 test
drwxr-xr-x. 2 root root 4096 Jul 3 15:29 wanger
drwxr-xr-x. 2 root root 4096 Jul 3 15:29 zhangsan
方法五:
[root@linzhongniao linzhongniao]# ls -F|sed -n '/\/$/p'
ext/
lisi/
test/
wanger/
zhangsan/
2.刪除apache日誌
已知apache服務的訪問日誌文件按天記錄在服務器本地目錄/app/logs下,由於磁盤緊張,現在要求只能保留最近7天的訪問日誌。請問如何解決?
模擬數據
[root@linzhongniao ~]# cat chuangjianrizhi.sh
for n in `seq 15`
do
date -s "2018/07/$n"
touch /app/logs/access_www_$(date +%F).log
done
date -s '2018/07/16'
[root@linzhongniao ~]# ls -lrt /app/logs/
total 0
-rw-r--r--. 1 root root 0 Jul 1 00:00 access_www_2018-07-01.log
-rw-r--r--. 1 root root 0 Jul 2 00:00 access_www_2018-07-02.log
-rw-r--r--. 1 root root 0 Jul 3 00:00 access_www_2018-07-03.log
-rw-r--r--. 1 root root 0 Jul 4 00:00 access_www_2018-07-04.log
-rw-r--r--. 1 root root 0 Jul 5 00:00 access_www_2018-07-05.log
-rw-r--r--. 1 root root 0 Jul 6 00:00 access_www_2018-07-06.log
-rw-r--r--. 1 root root 0 Jul 7 00:00 access_www_2018-07-07.log
-rw-r--r--. 1 root root 0 Jul 8 00:00 access_www_2018-07-08.log
-rw-r--r--. 1 root root 0 Jul 9 00:00 access_www_2018-07-09.log
-rw-r--r--. 1 root root 0 Jul 10 00:00 access_www_2018-07-10.log
-rw-r--r--. 1 root root 0 Jul 11 00:00 access_www_2018-07-11.log
-rw-r--r--. 1 root root 0 Jul 12 00:00 access_www_2018-07-12.log
-rw-r--r--. 1 root root 0 Jul 13 00:00 access_www_2018-07-13.log
-rw-r--r--. 1 root root 0 Jul 14 00:00 access_www_2018-07-14.log
-rw-r--r--. 1 root root 0 Jul 15 00:00 access_www_2018-07-15.log
解答:刪除七天前的
先查看一下七天前的日誌文件
[root@linzhongniao ~]# find /app/logs/ -type f -mtime +7
/app/logs/access_www_2018-07-07.log
/app/logs/access_www_2018-07-05.log
/app/logs/access_www_2018-07-08.log
/app/logs/access_www_2018-07-02.log
/app/logs/access_www_2018-07-03.log
/app/logs/access_www_2018-07-01.log
/app/logs/access_www_2018-07-04.log
/app/logs/access_www_2018-07-06.log
刪除七天前的日誌文件
方法一:fine結合xargs
[root@linzhongniao ~]# find /app/logs/ -type f -mtime +7|xargs rm -f
[root@linzhongniao ~]# ls -lrt /app/logs/
total 0
-rw-r--r--. 1 root root 0 Jul 9 00:00 access_www_2018-07-09.log
-rw-r--r--. 1 root root 0 Jul 10 00:00 access_www_2018-07-10.log
-rw-r--r--. 1 root root 0 Jul 11 00:00 access_www_2018-07-11.log
-rw-r--r--. 1 root root 0 Jul 12 00:00 access_www_2018-07-12.log
-rw-r--r--. 1 root root 0 Jul 13 00:00 access_www_2018-07-13.log
-rw-r--r--. 1 root root 0 Jul 14 00:00 access_www_2018-07-14.log
-rw-r--r--. 1 root root 0 Jul 15 00:00 access_www_2018-07-15.log
方法二:find結合-exec
[root@linzhongniao ~]# find /app/logs/ -type f -mtime +7 -exec rm -f {} \;
[root@linzhongniao ~]# ls -lrt /app/logs/
total 0
-rw-r--r--. 1 root root 0 Jul 9 00:00 access_www_2018-07-09.log
-rw-r--r--. 1 root root 0 Jul 10 00:00 access_www_2018-07-10.log
-rw-r--r--. 1 root root 0 Jul 11 00:00 access_www_2018-07-11.log
-rw-r--r--. 1 root root 0 Jul 12 00:00 access_www_2018-07-12.log
-rw-r--r--. 1 root root 0 Jul 13 00:00 access_www_2018-07-13.log
-rw-r--r--. 1 root root 0 Jul 14 00:00 access_www_2018-07-14.log
-rw-r--r--. 1 root root 0 Jul 15 00:00 access_www_2018-07-15.log
方法三:先用find查找出來在用rm刪除
[root@linzhongniao ~]# rm -f `find /app/logs/ -type f -mtime +7`
[root@linzhongniao ~]# ls -lrt /app/logs/
total 0
-rw-r--r--. 1 root root 0 Jul 9 00:00 access_www_2018-07-09.log
-rw-r--r--. 1 root root 0 Jul 10 00:00 access_www_2018-07-10.log
-rw-r--r--. 1 root root 0 Jul 11 00:00 access_www_2018-07-11.log
-rw-r--r--. 1 root root 0 Jul 12 00:00 access_www_2018-07-12.log
-rw-r--r--. 1 root root 0 Jul 13 00:00 access_www_2018-07-13.log
-rw-r--r--. 1 root root 0 Jul 14 00:00 access_www_2018-07-14.log
-rw-r--r--. 1 root root 0 Jul 15 00:00 access_www_2018-07-15.log
3.裝完系統後,希望讓網絡文件NFS,僅在3級別上開機自啓動,該如何做?
第一種文件配置方法,可以把要重啓的服務器的命令放在/etc/rc.local裏。
解答:全部關掉然後開啓需要的級別的服務。
[root@linzhongniao ~]# chkconfig nfs on
[root@linzhongniao ~]# chkconfig --list nfs
nfs 0:off 1:off 2:on3:on4:on5:on6:off
[root@linzhongniao ~]# chkconfig nfs off
[root@linzhongniao ~]# chkconfig --list nfs
nfs 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@linzhongniao ~]# chkconfig --level 3 nfs on
[root@linzhongniao ~]# chkconfig --list nfs
nfs 0:off 1:off 2:off 3:on4:off 5:off 6:off
也可以將2345都開啓
[root@linzhongniao ~]# chkconfig --level 2345 nfs on
[root@linzhongniao ~]# chkconfig --list nfs
nfs 0:off 1:off 2:on3:on4:on5:on6:off