find:查找命令
由於Linux系統大部分都是應用於服務器上,所以查詢數據的時候並沒有圖形化界面查找數據的便捷性。
語法:
find [path] [選項] 參數
選項:
-name
按文件名查詢
-perm
按文件權限查詢
-size
按文件的大小查找
-user
按用戶(屬主)查詢
-group
按用戶組查詢
-type
按文件的類型查詢
b - 塊設備文件。
d - 目錄。
c - 字符設備文件。
p - 管道文件。
l - 符號鏈接文件。 (這是個小寫的L)
f - 普通文件。
案例:
查找jdk安裝的目錄。
bash
find / -name java
查找當前系統中所有的.log後綴名的文件
bash
find / -name “*.log”
查找系統中/home目錄下的非普通文件
bash
find /home ! -type f
查找當前用戶/home目錄下權限爲700的文件
#bash
find /home -perm 700
查找/dev目錄下的塊設備文件
#bash
find /dev -type b
sed:
介紹:
sed本身是一個逐行處理工具,會逐行處理到文件的結束。默認情況下不修改源文件,因爲sed是將源文件內容逐行copy到一個臨時緩衝區(模式空間),對其進行編輯,行處理結束後,將其輸出到屏幕上,也可以通過數據重定向將結果導入到新的文件中去。
sed本身提供修改源文件的選項。但是如果修改源文件時,結果內容並不會發送到屏幕上。
語法:
sed [option] “[action]” [filename]
選項:
-e
允許對輸入數據應用多條sed命令進行編輯。
-i
表示直接操作源文件
動作:
s:
字符串匹配/查找
i:
插入
a:
追加
d:
刪除
c:
替換
項目 A 注意:選項和動作的字母i不是同樣的功能。
案例:
源文件內容(demo):
hello teduhadoop
hello hadoop
hello hdfs ,hi sed
1、將全文的h替換爲H。
bash
sed “s/h/H/g” demo
2、修改全文的h/H,第一個l/L
bash
sed -e “s/h/H/g” -e “s/l/L/1” demo
or
多條指令的另外一種寫法:
sed “s/h/H/g;s/l/L/1” demo
3、修改全文的第一個和第二個h/H
bash
sed “s/h/H/1;s/h/H/1” demo
4、部分文件中,由於不知道是第幾行,且文件中存在多個相同的字符串時,如何修改。
eth0文件內容:
DEVICE=eth0
HWADDR=00:0c:29:37:f6:95
TYPE=Ethernet
UUID=5c4fcaf0-7f4f-4ab1-8dee-a96aecb23823
ONBOOT=no
NM_CONTROLLED=yes
BOOTPROTO=dhcp
DNS2=8.8.8.8
DNS1=114.114.114.114
IPV6INIT=no
USERCTL=no
PEERDNS=yes
將文件中的ONBOOT=no修改爲ONBOOT=yes
bash
sed -i “s/ONBOOT=no/ONBOOT=yes/g” eth0
5、在文件中進行插入新的內容:
源文件內容:
hello teduhadoop
hello hadoop
hello hdfs ,hi sed
5.1、在第一行插入內容"hello bigdata"
bash
sed “1 i hello bigdata” demo
5.2、在第一行追加內容"hello 小強"
bash
sed “1 a hello 小強” demo
6、刪除匹配的行
bash
sed “/hdfs/d” demo
表示將匹配的到hdfs的整行刪除,如果匹配的內容是h的話,當前文件的內容會被全部刪除。
grep:
這是一款強大文本搜索工具選項:
-number
同時顯示匹配行上下的n行
-b,–byte-offset
印匹配行前面打印該行所在的塊號碼。
-c,–count
只打印匹配的行數,不顯示匹配的內容。
-i,–ignore-case
忽略大小寫差別。
-q,–quiet
取消顯示,只返回退出狀態。0則表示找到了匹配的行。
–color
將匹配內容上色區分
-n,–line-number
在匹配的行前面打印行號。
-v,–revert-match
反檢索,只顯示不匹配的行。
#bash
cd /root
ls |grep -2 log #匹配上下兩行
ls |grep -n log #匹配行號
ls | grep log --color
tail:
文本監控,通常情況下用於監視文件的增長。
場景:
大數據環境中,很多軟件在啓動時,不會將真正的啓動/過程日誌打印在屏幕上,因爲內容繁多,會影響程序員觀察啓動過程中,哪個進程沒有啓動。像此種場景,我們就可以利用tail工具用來監視該軟件啓動日誌文件的實際內容。
語法:
tail [選項] fileName
選項:
-f
用於監控文件的增長!!!
-n
從指定的行中進行監控文件的內容
cut:
cut命令在文件中負責剪切數據用的
選項:
-b
字節
-c
字符
-f
提取第幾列
-d
按指定分隔符分割列
案例:
源文件內容:
192.168.1.1
192.168.1.3
192.168.1.5
192.168.1.4
截取第11個字節:
bash
cut -b 11 demo
截取第7-9的字節
bash
cut -b 7-9 demo
截取最後一個字節進行排序:
bash
cut -b 11 demo | sort
以點爲分隔符 獲取第二個字段
bash
cut -d . -f 2 demo
歷史命令:
history
該命令可以用來查看Linux系統中曾經執行過的命令(默認1000條)。
用法:
!!
運行上一條命令
!88
運行第88條命令
!88 /test
運行第88條命令並在命令後面加上/test (可以用ls舉例)
!ls
運行上一個ls命令
!ls:s/CF/l
運行上一個ls命令,其中把CF替換成l
if判斷
條件判斷語句:
語法:
if語法
#!/bin/bash
a=10
b=10
if [ $a -eq $b ];then
echo “兩個數相等”
fi
if else語法
#!/bin/bash
string=“hello”
string1=“HELLO”
if test $string = $string1
then
echo “兩個字符串一樣”
else
echo “兩個字符串不一樣”
fi
if else-if else語法
以下實例判斷兩個變量是否相等:
a=10
b=20
if [ $a == $b ]
then
echo “a 等於 b”
elif [ $a -gt $b ]
then
echo “a 大於 b”
elif [ $a -lt $b ]
then
echo “a 小於 b”
else
echo “沒有符合的條件”
fi
test判斷
test判斷:
Shell中的 test 命令用於檢查某個條件是否成立,它可以進行數值、字符和文件三個方面的測試。
數值測試
參數
說明
-eq
等於則爲真
-ne
不等於則爲真
-gt
大於則爲真
-ge
大於等於則爲真
-lt
小於則爲真
-le
小於等於則爲真
實例演示:
#!/bin/bash
num1=100
num2=100
if test $[num1] -eq $[num2]
then
echo ‘兩個數相等!’
else
echo ‘兩個數不相等!’
fi
字符串測試
參數
說明
=
等於則爲真
!=
不相等則爲真
-z 字符串
字符串的長度爲零則爲真
-n 字符串
字符串的長度不爲零則爲真
實例演示:
#!/bin/bash
num1=“piaolaoshi”
num2=“PIAOLAOSHI”
if test $num1 = $num2
then
echo ‘兩個字符串相等!’
else
echo ‘兩個字符串不相等!’
fi
文件測試
參數
說明
-e 文件名
如果文件存在則爲真
-r 文件名
如果文件存在且可讀則爲真
-w 文件名
如果文件存在且可寫則爲真
-x 文件名
如果文件存在且可執行則爲真
-s 文件名
如果文件存在且至少有一個字符則爲真
-d 文件名
如果文件存在且爲目錄則爲真
-f 文件名
如果文件存在且爲普通文件則爲真
-c 文件名
如果文件存在且爲字符型特殊文件則爲真
-b 文件名
如果文件存在且爲塊特殊文件則爲真
實例演示:
#!/bin/bash
cd /bin
if test -e ./bash
then
echo ‘文件已存在!’
else
echo ‘文件不存在!’
fi
另外,Shell還提供了與( -a )、或( -o )、非( ! )三個邏輯操作符用於將測試條件連接起來,其優先級爲:"!“最高,”-a"次之,"-o"最低。例如:
#!/bin/bash
cd /bin
if test -e ./notFile -o -e ./bash
then
echo ‘至少有一個文件存在!’
else
echo ‘兩個文件都不存在’
fi