Linux系統命令與腳本開發

系統命令

# cat EFO 
cat >> file << EOF
neirong
EOF

# 清空
>file 清空文件
[root@Poppy conf]# sed -i '/^#.*$/d' joker  刪除#開頭的行
[root@Poppy conf]# sed -i '/^$/d' joker     刪除空行,回車的空行

# 一行顯示幾個字段,空格就是分隔符,-n指定幾個
xargs -n 1 < file

# echo xx 1>a.txt 2>b.txt
b.txt裏面包含了錯誤

# echo xx 1>a.txt 2>&1
正確錯誤的輸出都保存到a.txt上
2>&1 2表示錯誤的輸出跟1的輸出同樣存入a.txt

# echo xx &>a.txt
正確錯誤的輸出都保存到a.txt上等同於上面

# \cp -rf 刪除
/usr/bin/cp -rf

# alias
終端alias查看系統的別名
/反寫線就是屏蔽別名,-i就是提示覆蓋,移動等
設置別名
alias cp='cp -i'
alias mv='mv -i'

# unalias 
unalias cp 取消設置好的別名
cp /tmp /mnt 不提示了

# seq 2 10  2-10
seq -s ' ' 10 打印1-10,空格隔開,-s指定分隔符,默認是/n
seq 2 2 10 間隔2的2-10
seq 100 >ett.txt 1-100

# sed -n '20,30'p ett.txt -n的做用取消默認輸出,若是沒有-n打印的仍是1-100
p是打印
sed -n '$'p ett.txt  最後一行,行尾

# awk '19<NR && NR<31' ett.txt
NR是行號的意思

# grep 20 -A 10 ett.txt
匹配第20行內容以後,以下
-B 除了顯示匹配的一行外,並顯示該行以前的num行
-A 除了顯示匹配的一行外,並顯示該行以後的num行
-C 除了顯示匹配的一行外,並顯示該行以前後各num行

# sed 's#old#new#g' file.txt 默認打印輸出
-i 改變文件內容
-e 容許多項編輯

# tr 替換 -d 刪除
echo "HELLO WORLD" | tr 'A-Z' 'a-z'
hello world
echo "hello 123 world 456" | tr -d '0-9'
hello  world 
# ;命令分隔符
pwd;pwd

# {} 生成一個序列
echo {1..10}
seq -s ' ' 10
echo {a..z}
mkdir /data/{22,33}/joker -p

~ 當前用戶的家目錄

- 當前目錄的上一次目錄,也就是切過來的目錄
cd - ! 取反
find /data -type f ! -name 'test.sh'
-o 或者
find /data -type f -name 'test.sh' -o -name 'a'
-a 而且
find /data -type f -name 'test.sh' -a -name 'a'

# && 而且
在shell腳本中,&&腳本中

# 單引號與雙引號
單引號裏面是什麼就是什麼
echo "date" 顯示date字符串
echo "`date`" 顯示時間
echo "$(date)" 顯示時間
echo '`date`' 顯示`date`字符串

  # {}
  echo oldboy{1,2,3}
  echo oldboy{1..5}
  echo oldboy{a..f}
  cp a.txt{,.bak}
  mkdir /data/{1,2}/data -pnode

高級命令

# find 查找文件
-type  指定文件類型 f 文件 d 目錄
-mtime 安裝文件的修改時間查找文件 +n第n天之前  -n第n天內  n第n天 
-name  按照文件的名稱查找文件

# find . -type f -name '*.txt' 能夠用通配符
# 能夠取反
find . -type f ! -name '*.txt'

# exec用法
find . -type f -name 'file.txt' -exec mv {} /tmp/ \;
{} 表明前面找出的文件,表明file.txt
\; 有一些特殊的含義,不光linux,uninx均可以這樣用,是一種格式

------------------------------------------------------
# xargs用法
find . -type f -name 'file.txt'|xargs -i mv {} /tmp/

# 其餘方法
mv 'find . -type f -name "file.txt"' /tmp/
xargs
# xargs 從標準輸入(管道或輸入重定向)獲取數據,並將數據轉化成命令行的參數

# 輸入重定向
xargs < file.txt 將多行內容轉變爲一行
-n 參數,指定每一個命令行最多的參數個數
xargs -n < file.txt
-i 參數,把前面找的文件名與{}關聯起來,若是不用-i是沒法關聯的
find . -type f -name 'file.txt'|xargs -i mv {} /tmp/
-I 參數,同-i,比-i多使用()
find . -type f -name 'file.txt'|xargs -I mv() /tmp/

-------------------------------------------------------
# date 命令
# 輸出當前時間
date +"%Y-%m-%d %H:%M:%S"      # 2018-06-08 14:05:08

-d<字符串>:顯示字符串所指的日期與時間。字符串先後必須加上雙引號;
date -d "1 day ago" +"%Y-%m-%d"   2018-06-07  ago是昨天
date -d "1 day" +"%Y-%m-%d"       2018-06-09  不加參數是明天
如下使用數字表示先後多少天的加減
date +%Y%m%d #顯示前天年月日 
date -d "+1 day" +%F   #顯示前一天的日期  %F就是%Y-%m-%d
date -d "-1 day" +%F   #顯示後一天的日期   
date -d "-1 month" +F  #顯示上一月的日期 
date -d "+1 month" +F  #顯示下一月的日期 
date -d "-1 year" +F   #顯示前一年的日期 
date -d "+1 year" +F   #顯示下一年的日期

# 設置時間
-s<字符串>:根據字符串來設置日期與時間。字符串先後必須加上雙引號; 
date -s 01:01:01 #設置具體時間,不會對日期作更改 
date -s "01:01:01 2012-05-23" #這樣能夠設置所有時間 
date -s "01:01:01 20120523"   #這樣能夠設置所有時間 
date -s "2012-05-23 01:01:01" #這樣能夠設置所有時間 
date -s "20120523 01:01:01"   #這樣能夠設置所有時間

-------------------------------------------------------
# ln 命令
ln 源文件 目標文件  建立硬連接
ln -s 源文件 目標文件 建立連接
# readlink 查看軟連接的源文件是什麼

-------------------------------------------------------
# rename 重命名
[root@Poppy joker]# touch a.txt
[root@Poppy joker]# rename "txt" "jpg" a.txt 
[root@Poppy joker]# ls
a.jpg

-------------------------------------------------------
# ls --time-style
ls -l --time-style=long-iso 時間格式化的標準
[root@Poppy joker]# ls -l --time-style=long-iso 
total 736
drwxr-xr-x 3 rsync rsync   4096 2018-06-20 15:19 gameserver1
[root@Poppy joker]# ls -lhi --time-style=long-iso 
total 736K
1703938 drwxr-xr-x 3 rsync rsync 4.0K 2018-06-20 15:19 gameserver1

-------------------------------------------------------
# basename 
只保留最後以/爲分隔符的最後一段,不管你是目錄仍是文件
[root@Poppy joker]# basename /joker/gameserver1
gameserver1
# dirname
只保留最後以/爲分隔符的第一段,不管你是目錄仍是文件
[root@Poppy joker]# dirname /joker/gameserver1
/joker

-------------------------------------------------------
# file 查看文件類型
[root@Poppy joker]# file a
a: ASCII text
[root@Poppy joker]# file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=3d705971a4c4544545cb78fd890d27bf792af6d4, stripped
[root@Poppy joker]# file /var/log/wtmp 
/var/log/wtmp: data

-------------------------------------------------------
# tree 顯示目錄結構
[root@Poppy joker]# tree -Ld 1 /joker    
/joker
├── gameserver1
├── gameserver2
├── scripts
└── tools
directories 
-L layer層數, -d目錄

-------------------------------------------------------
# stat 查看文件信息
[root@Poppy ~]# stat /etc/hosts
  File: ‘/etc/hosts’
  Size: 204             Blocks: 8          IO Block: 4096   regular file
Device: fd01h/64769d    Inode: 1183348     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-06-19 14:10:17.421425118 +0800
Modify: 2018-06-14 14:05:07.713140443 +0800
Change: 2018-06-14 14:05:07.716140534 +0800
 Birth: -
 
-------------------------------------------------------
# uname -m 
64 仍是 32

-------------------------------------------------------
# md5sum 計算和校驗文件的md5值
硬連接的md5同樣,軟鏈接不同
[root@Poppy joker]# touch a
[root@Poppy joker]# md5sum a
d41d8cd98f00b204e9800998ecf8427e  a
[root@Poppy joker]# md5sum a > md.log
[root@Poppy joker]# md5sum -c md.log 
a: OK
[root@Poppy joker]# echo "11" >> a
[root@Poppy joker]# md5sum -c md.log 
a: FAILED
md5sum: WARNING: 1 computed checksum did NOT match

-------------------------------------------------------
# split 想用數字後綴可以使用-d參數,同時可使用-a length來指定後綴的長度
split -b 10k date.file -d -a 3 split_file

# 生成文件
dd if=/dev/zero of=test bs=1M count=1000

正則表達式

處理大量的字符串而定義的一套規則和方法

alias grep='grep --color=auto' 讓匹配的內容顯示顏色

^$表示空行
grep -n / -v / -i / -o只顯示匹配到的字符

*  重複0個或多個前面的一個字符
.* 匹配全部字符 ^.*以任意多個字符開頭,.*$以任意多個字符結尾
[abc]  匹配字符集合內的任意一個字符[a-zA-Z],[0-9]
[^abc] 匹配不包含^後的任意一個字符的內容
a\{n,m\}  前一個字符a,重複n到m次
a\{n,\}   前一個字符a,重複至少n次
a\{n\}    前一個字符a,重複n次
a\{,m\}   前一額字符a,最多m次

egrep(grep -E)或sed -r過濾通常特殊字符能夠不轉義(不用\)
-E擴展
+ 表示重複「一個或一個以上」前面的字符
?表示「0個或1個」前面的字符
| 表示同時過濾多個,或
() 分組過濾,向後引用
grep
-E "g(la|oo)d" joker.log 小括號前面不須要加\轉義
獲取ip地址 [root@Poppy
~]# ifconfig eth0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.184.251 netmask 255.255.240.0 broadcast 172.17.191.255 ether 00:16:3e:10:d0:eb txqueuelen 1000 (Ethernet) RX packets 1363874 bytes 622369572 (593.5 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 663050 bytes 98323781 (93.7 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@Poppy ~]# ifconfig eth0|sed -n '2p'|sed 's#^.* ##g' 172.17.191.255 [root@Poppy ~]# ifconfig eth0|sed -n '2s#^.* ##g'p 172.17.191.255 分組過濾匹配ip [root@Poppy ~]# ifconfig eth0|sed -nr 's#^.*inet (.*) netmask.*$#\1#g'p 172.17.184.251 對調字段 [root@Poppy ~]# cat /etc/passwd root:x:0:0:root:/root:/bin/bash [root@Poppy ~]# sed -nr 's#([^:]+)(:.*:)(/.*$)#\3\2\1#g'p /etc/passwd /bin/bash:x:0:0:root:/root:root

sed,awk,grep

#myname=joker,myname="joker's",myname='"$joker"is dog',myname='joker is',myname=`cat $myname`
#ls test1 # test2 將忽視 test1 test2,ls test\*=ls test*脫意字符
#!$上一個命令最後出現的
#cut -d " 分隔符",cut -c字節 -f第幾個區塊,cut -d ":" -f1-3&1,3 | cut -c1-3&1,3
#sort -t分隔符,-n純數字排序,-r反向排序,-u去除重複.uniq -c統計重複的行 -d 顯示重複的行
#echo 123456 |tee &-a 1.txt,重定向,加a追加劇定向,不加a就是清空而且將123456寫入
#tr -d刪除某個字符 -s壓縮重複的字符並非去掉,tr '[a-z]' '[A-Z]'替換,不修改文件  cat test.txt | tr -s 'o'
#split -b 500 /etc/passwd passwd切割文檔,單位字節byte,分割後文件名字爲passwdaa,passwdab....,split -l 10 已10行來分割
#執行多條命令,加;分號。&&前面錯誤就不執行了。
#sleep 100 & 後臺運行,fg 加任務號能夠調用到前臺,ctrl+z能夠暫停,bg加任務號再次進入後臺運行,可經過jobs查看任務號
#2>錯誤重定向,2>>錯誤追加劇定向。不顯示出來 & > /dev/null 正確錯誤都不顯示
#[]中括號爲字符符合,表明中間字符任意一個,
#grep -i忽略大小寫 -v打印不符合 ,^行頭,$行尾 ^$空行, .表示任意一個字符 *表示多個字符。
#grep -v '^[a-zA-Z]' 1.txt = grep '^[^a-zA-Z]' 1.txt [^a-zA-Z] 表示非a-zA-Z
#grep  -n '^\broot\b' test.txt 鎖定單詞 ,grep  -n '\<rooot' test.txt  匹配開頭包含root的行顯示出來,\>表示結尾
#egrep 'o+'/'oo+' 1.txt,篩選一個或以上,倆個或以上。egrep 'o?' 1.txt,篩選0個,egrep 'oo?' 1.txt,篩選 一個
#egrep '111|aaa' 1.txt,篩選111或aaa的行,egrep '(oo)+'表示一個oo或者多個oo。
#sed -n '4'p 1.txt打印第4行,sed -n '1,$'p 1.txt,打印整個文件。sed -e '1'p -e '/111/'p -n 1.txt,-e多個行爲G
#sed -n '/root/'p 1.txt 打印包含root的行,sed -n '/^1/'p 1.txt ,打印出開頭1的行。^ $ . *也能夠用。
#sed '1'd 1.txt,刪除1行, sed '3,5'd 1.txt 刪除3 5 行,sed '/root/'d 1.txt 刪除帶有root的行 sed '/^$/'d a.txt 刪除空行
#sed '1,2s/ot/to/g'p 1.txt 1,2行ot替換成to,這裏/也能夠用# @來表示
#sed 's/[0-9]//g' 1.txt 刪除全部數字或者字母 [a-zA-Z0-9]
#sed 's/[a-zA-Z0-9:/]//g' 1.txt 至關於替換爲空
#sed '/匹配項/s/A/B/g' filename   sed  -n '/operator:\/rooot:/s/rooot/root/g'p 1.txt 匹配/operator:\/rooot:行,將rooot替換成root
#sed 's/\(rot\)\(.*\)\(bash\)/\3\2\1/g' 1.txt  將rot bash 調序
#sed 's/^.*$/123&/g' 1.txt 在行首添加123 .   sed 's/^.*$/&321/g' 1.txt 在行尾添加321
#head -n2 test.txt | awk -F ':' '{print $1}' 1到2行,打印第一字符段
#head -n2 test.txt |awk -F':' '{print $1"d"$2"d"$3"d"}' 1到2行,打印2 3段,而且加入自定義的內容
#awk '/root/' test.txt   匹配字符或者字符串
#awk -F ":" '$1~/root/' test.txt  匹配開頭到/root/都有的話顯示出來
#awk -F ":" '$3=="0"' test.txt  匹配第三段數值等於0
#awk -F ":" '$3>"5" && $3<"6"' test.txt  &&/||  匹配第三段大5小於7的行
#awk -F ":" '{print NF}' test.txt 一共多少段 awk -F ":" '{print $NF}' test.txt 打印最後一段  NF多少段。NR多少行
#awk -F ":" 'NR>10 && $3="0"' test.txt 
#awk -F ":" '$1="root"' test.txt  將第一段修改爲root
#head -n 2 test.txt |awk -F ":" '{$7=$3+$4; print $3,$4,$7}'  能夠在awk作一些運算
#awk -F ":" '{(tot+=$3)};END {print tot}' test.txt   計算某個字段的總和
#awk -F ":" '{if ($1=="root") print $0}' test.txt   awk與if的結合
#uid=`sed -n "$i"p /etc/passwd`  sehll腳本中sed引入變量變成雙引號就能夠了

shell腳本開發

# 一 什麼是shell script
1、什麼是shell
shell是一個在操做系統之上的軟件,linux登陸後默認就進入這個軟件
shell是一個命令的解釋器,能解析用戶所輸入的命令 (ls cp rm pwd 等等)
shell擁有本身內建的命令集

2、bash
bash(Bourne Again shell )是shell的擴展,而且徹底兼容shell(相似vim與vi的關係)

3、什麼是shell script
Shell腳本是利用 shell 的功能所寫的一個程序,將一些shell的語法與命令(含外部命令)寫在裏面, 搭配管道與數據重定向等功能,以達到咱們所想要的功能。

4、解釋型語言與編譯型語言
shell腳本是解釋型語言,執行時是逐條解釋你寫的程序來運行。(python)
而編譯型語言須要先經過編譯器進行編譯,把代碼翻譯成機器能識別的指令,而後再運行(C++# 二 第一個shell script
第一步:使用文本編輯器(vim)來建立文本文件(通常以.sh結尾)
     第一行必須包括shell聲明:#!
     #!/bin/bash       (告訴系統執行的時候要調用什麼解釋器)
     #開頭的是shell的註釋
第二步:輸入命令 echo 「hello world」
第三步:給文件添加執行權限     chmod 755 hello.sh
第四步 運行腳本
      第一種方式:指定腳本的絕對或相對路徑來運行   ./hello.sh
      第二種方式:直接運行解釋器,將腳本做爲參數運行 sh hello.sh
常見問題
    -bash: ./hello.sh: Permission denied     沒有賦予執行權限


# 三 shell變量 賦值
1、變量
變量以字母或者下劃線開頭,後面接任意長度的字母、數字和下劃線,如 var=linux 
變量的引用須要在前面加$符號 ,如echo 「$var」
若是變量的值中間有空格,須要用雙引號引發來,如var=「hello world」
單引號、雙引號的區別?

2、特殊變量
位置參數  $n ,n爲數字,$0爲命令自己,$1-$9是命令行第一到第9個參數
$*  表明全部參數
$#  表明參數的個數
$?  表明上一個命令的返回狀態

3、命令替換和賦值
    命令替換的格式: $(cmd) 或者 `cmd`  # ``爲tab上的反引號
    在執行命令的時候,會先將$(cmd) 或者 `cmd` 裏的命令先執行一遍,再將結果返回到原來的命令中
    var=$(uname -a)
    echo $var
    命令替換和管道的區別?
    命令替換是將一個命令的輸出做爲另一個命令的參數,而管道是將命令的輸出做爲下一個命令的標準輸入
    如 date +%Y|touch
       touch $(date +%Y)

4、算數運算和賦值
首先,echo 1+2,沒有輸出3。由於shell須要特殊的格式來進行算數運算
  方式一   ((i=$j+$k))
  方式二   let i=$j+$k
賦值  
var=$(($i+$j))
echo $var

5、多個命令分隔符
   分號(;)是shell的命令分隔符, 讓同一行的命令可以順序執行。如echo 1 ;echo 2
# 四 if語句和test命令
一、if 判斷
在shell中if條件判斷語句和咱們的C、python等語言不一樣,shell的if語句條件必須用[ ]括起來,另外[ ]裏外都須要用空格與周圍隔開(例如[ a == b ]),不然會報錯
 
if基本語法  
    if [ 表達式 ];then ;fi
    或
    if command;then ;fi

其中[ 表達式 ] 等同於test命令,man test

2、條件測試類型
整數測試
     -eq 測試兩個整數是否相等
     -ne 測試兩個整數是否不等
     -gt 測試一個數是否大於另外一個數
     -lt 測試一個數是否小於另外一個數
     -ge 大於或等於
     -le 小於或等於

字符串測試(兩邊要有空格)
      == 等於  
      != 不等
      >  大於
      <  小於
      -z string 測試指定字符是否爲空,空着真,非空爲假
     -n string 測試指定字符串是否爲不空,空爲假 非空爲真

文件測試
     -e FILE 測試文件是否存在
     -f file 測試文件是否爲普通文件
     -d file 測試指定路徑是否爲目錄
     -r file 測試文件對當前用戶是否可讀
     -w file 測試文件對當前用戶是否可寫
     -x file 測試文件對當前用戶是均可執行

組合測試
     -a: and
     -o: or
     !: 非


# 五 shell中&&和||的使用方法
一、&&運算符:
command1  && command2
&&左邊的命令(命令1)返回真(即返回0,成功被執行)後,&&右邊的命令(命令2)纔可以被執行;命令之間使用 && 鏈接,實現邏輯與的功能。
如test -f /var/log/messages && echo ok

二、||運算符:
command1 || command2
||則與&&相反。若是||左邊的命令未執行成功,那麼||右邊的命令就會執行
如 test -f 123 || echo error


# 六 循環語法
1、for循環
for arg in [list]
do
   command…
done
list列表能夠是空格分割的字符串,也能夠是命令替換返回的結果
如
for v in /etc/sudoers /etc/resolv.conf 
do ls -l  $v
done


2、while循環
while [condition]
do 
  command... 
done

輸入名字 打印一個隨機數字
while read -p "please input a name" name; 
do    
   echo $name $RANDOM; 
done


# 七 shell函數
格式
function name ()
{

}

shell函數能夠帶function關鍵字,也能夠不帶
shell函數內能夠加return返回值,也能夠不帶,若是不帶就以最後一條命令運行結果,做爲返回值。

例如
demoFun(){
    echo "這是個人第一個 shell 函數!"
}
echo "-----函數開始執行-----"
demoFun
echo "-----函數執行完畢-----"

  function joker (){
  echo "one shell" $1 $2
  return 1
  }
  var=joker 1 2 # echo $var 1python

# 八 數組
1、數組定義

[root@bastion-IDC ~]# a=(1 2 3 4 5 6 7 8)
[root@bastion-IDC ~]# echo $a
一對括號表示是數組,數組元素用「空格」符號分割開。

2、數組讀取與賦值
1)獲得長度:

[root@bastion-IDC ~]# echo ${#a[@]}
8
[root@bastion-IDC ~]# echo ${#a[*]}
8
用${#數組名[@或*]} 能夠獲得數組長度

2)讀取:

[root@bastion-IDC ~]# echo ${a[4]}
5
[root@bastion-IDC ~]# echo ${a[*]}
1 2 3 4 5 6 7 8
用${數組名[下標]} 下標是從0開始 下標是:*或者@ 獲得整個數組內容

3)賦值:

[root@bastion-IDC ~]# a[1]=100
[root@bastion-IDC ~]# echo ${a[*]} 
1 100 3 4 5 6 7 8
[root@bastion-IDC ~]# a[5]=140
[root@bastion-IDC ~]# echo ${a[*]} 
1 100 3 4 5 140 7 8
直接經過 數組名[下標] 就能夠對其進行引用賦值,若是下標不存在,自動添加新一個數組元素

4)刪除:

複製代碼
[root@bastion-IDC ~]# a=(1 2 3 4 5 6 7 8)
[root@bastion-IDC ~]# unset a
[root@bastion-IDC ~]# echo ${a[*]}

[root@bastion-IDC ~]# a=(1 2 3 4 5 6 7 8)
[root@bastion-IDC ~]# unset a[1]
[root@bastion-IDC ~]# echo ${a[*]}
1 3 4 5 6 7 8
[root@bastion-IDC ~]# echo ${#a[*]}
7
複製代碼
直接經過:unset 數組[下標] 能夠清除相應的元素,不帶下標,清除整個數據。

3、特殊使用
1)分片:

複製代碼
[root@bastion-IDC ~]# a=(1 2 3 4 5 6 7 8)
[root@bastion-IDC ~]# echo ${a[@]:0:3}
1 2 3
[root@bastion-IDC ~]# echo ${a[@]:1:4}
2 3 4 5
[root@bastion-IDC ~]# c=(${a[@]:1:4})
[root@bastion-IDC ~]# echo ${#c[@]}
4
[root@bastion-IDC ~]# echo ${c[*]} 
2 3 4 5
複製代碼
直接經過 ${數組名[@或*]:起始位置:長度} 切片原先數組,返回是字符串,中間用「空格」分開,所以若是加上」()」,將獲得切片數組,上面例子:c 就是一個新數據。

2)替換:

複製代碼
[root@bastion-IDC ~]# a=(1 2 3 4 5 6 7 8)
[root@bastion-IDC ~]# echo ${a[@]/3/100}
1 2 100 4 5 6 7 8
[root@bastion-IDC ~]# echo ${a[@]}
1 2 3 4 5 6 7 8
[root@bastion-IDC ~]# a=(${a[@]/3/100})
[root@bastion-IDC ~]# echo ${a[@]}
1 2 100 4 5 6 7 8
複製代碼
調用方法是:${數組名[@或*]/查找字符/替換字符} 該操做不會改變原先數組內容,若是須要修改,能夠看上面例子,從新定義數據。

# 九 顏色處理
echo -e "\033[31m 紅色字 \033[0m"  
echo -e "\033[32m 綠色字 \033[0m"  
echo -e "\033[33m 黃色字 \033[0m" 

其餘命令mysql

1. 查看誰正在使用某個文件
lsof   /filepath/file

2. 列出某個用戶打開的文件信息
lsof  -u username

3. 列出某個程序所打開的文件信息
lsof -c mysql

4. 列出多個程序多打開的文件信息
lsof -c mysql -c apache

5. 列出某個用戶以及某個程序所打開的文件信息
lsof -u test -c mysql

6. 列出除了某個用戶外的被打開的文件信息
lsof   -u ^root

7. 經過某個進程號顯示該進行打開的文件
lsof -p 1

8. 列出多個進程號對應的文件信息
lsof -p 123,456,789

9. 列出除了某個進程號,其餘進程號所打開的文件信息
lsof -p ^1

10. 列出誰在使用某個端口
lsof -i :3306


iftop
 yum install epel-release
 yum install iftop

 TX:發送流量
 RX:接收流量
 TOTAL:總流量
 Cumm:運行iftop到目前時間的總流量
 peak:流量峯值
 rates:分別表示過去 2s 10s 40s 的平均流量

curl
 -- L 跟蹤重定向
 -- I 響應頭
 -- v 詳細
curl -s www.baidu.com -XPUT -d value="hello word"

strace
 -- strace -tt -T -v -f -e trace=file -o /data/log/strace.log -s 1024 -p 23489
 
 -tt 在每行輸出的前面,顯示毫秒級別的時間

 -T 顯示每次系統調用所花費的時間

 -v 對於某些相關調用,把完整的環境變量,文件stat結構等打出來。

 -f 跟蹤目標進程,以及目標進程建立的全部子進程

 -e 控制要跟蹤的事件和跟蹤行爲,好比指定要跟蹤的系統調用名稱

 -o 把strace的輸出單獨寫到指定的文件

 -s 當系統調用的某個參數是字符串時,最多輸出指定長度的內容,默認是32個字節
 
 -p 指定要跟蹤的進程pid, 要同時跟蹤多個pid, 重複屢次-p選項便可


more
 -- 空格 下一頁
 -- b 上一頁
 -- v VIM 
 
less
 -- 空格 下一頁
 -- b 上一頁
wget -q -O xiaohani.flv http://url -P /data/aaa/
-O 文件改名
-P 放在目錄
-i 選取個文件下載
相關文章
相關標籤/搜索