歡迎您光臨本站 註冊首頁

linux主機常用管理命令

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

1.殺掉MYSQL SHELL
ps aux|grep mysql|grep -v grep|awk '{print $2}'|xargs kill -9

2.刪除當前目錄下0位元組的文件
find -type f -size 0 -exec rm -rf {} ;


3.匹配當data里包含"donald",輸出第4列
awk '/donald/ {print $4}' data
擴展1:
awk '/donald|chin/ {print $1, $2}' data
擴展2:
awk '/a[rl]/ {print $1, $2}' data

使用"n"而不是空格做為分隔符
awk 'FS="n" {print $1}' data

4.截取對應的列數
awk -F":" '{ print $1 $7 }' /etc/passwd


5.對域名進行添加www.的shell
awk '{print"www."$1}' yuming.txt >yuming2.txt

6.清理maillog日誌
find . -name maillog | xargs echo " " >maillog

7.1.txt文件前面添加序號
awk '{print NR,$0}' 1.txt


8.1.txt匹配test開頭的行后,將欄位2和欄位3相加后輸出結果
awk '$1 ~/test/{count = $2 $3;print count}' 1.txt


9.用grep命令在當前目錄下的所有普通文件中搜索hostnames這個詞
find . -name * -type f -print |xargs grep "hostname"
注意,在上面的例子中, 用來取消find命令中的*在shell中的特殊含義

10.文件刪除清理
find . -name "*.conf" -mtime 5 -ok rm { } ;
< rm ... ./conf/httpd.conf > ? n
按y鍵刪除文件,按n鍵不刪除


11.在/var/log下拷貝小於100K的文件到/tmp下,如果有失敗的發送郵件到635273926@qq.com,用shell/perl/python來實現.
#!/bin/bash
SDIR=/var/log/
DDIR=/tmp/
TMPFILE=/tmp/test.txt
find $SDIR -size -100k -type f > $TMPFILE
while read F_NAME
do
cp -r $F_NAME $DDIR
if [ $? -eq 0 ]
then


echo "ok" > /dev/null 2>&1
else
echo "cp is failed " | mail -s "Note:cp is failed ! " 635273926@qq.com
fi
done < $TMPFILE

12. 根據下面的信息提取每個人的總分 輸出到/home/total.txt
oldboy 15 98
kqzj 23 87
wodi 16 89

awk '{print $1,$2 $3}' infor >/home/tital.txt


13.在不影響MYSQL正常服務的情況下,如何導出MYSQL數據
mysqldump -all-databases >allbackupfile.sql 備份資料庫
mysql -hhostname -uusername -ppassword databasename < backupfile.sql 還原資料庫

mysqldump -hhostname -uusername -ppassword databasename |gzip > backupfile.sql.gz 壓縮備份資料庫


gunzip < bckupfile.sql.gz |mysql -uusername -ppassword databasename 還原壓縮的文件包

mysqldump -hhostname -uusername -ppassword databasename specific_table1 specific_table2 >backupfile.sql 備份單個資料庫表


mysqldump -hhostname -uusername -ppassword -databases databasename1 atabasename2 databasename3 >multibackupfile.sql 備份多個資料庫


mysqldump -no-data -databases databasename1 databasename2 databasename3>structurbackupfile.sql 備份資料庫結構

14.在一個文件夾下建立類似如下規律性的文件夾:
11 12 13 14 15 21 22 23 24 25 31 32 33 34 35 41 42 43 44 45 51 52 53 54 55

#!/bin/sh

for i in `echo {1..5}{1..5}`;do
mkdir -p ./$i
done


#!/bin/bash
#for i in `seq 11 55`;
for i in $(seq 11 55)
do
echo $i;
mkdir -p ./$i;
done


15.統計末年某月的天數
cal 09 2008 | xargs | awk '{print $NF}'
cal 09 2008 |sed -n '3,$p' |awk 'BEGIN{sum=0}{sum =NF}END{print sum}'

16.統計文件大小的shell
ls -l $* | awk '
BEGIN { print "BYTES", "t", "FILE" }
{ sum = $5
filenum
print $5, "t", $9
}
END { print "Total: ", sum, "bytes (" filenum " files)" }'

17.awk(基礎)
====================================================
1.抽取域
awk -F: '{print $1}' /etc/passwd

2.保存輸出
awk -F: '{print $1}' /etc/passwd | tee user 使用tee命令,在輸出文件的同時,輸出到屏幕

使用標準輸出
awk -F: '{print $1}' /etc/passwd >user3

4.列印所有記錄
awk -F: '{print $0}' /etc/passwd

5.列印單獨記錄
awk -F: '{print $1,$4}' /etc/passwd

6.列印報告頭
awk -F: 'BEGIN {print "NAMEn"} {print $1}' /etc/passwd

7.列印結尾
awk -F: '{print $1} END {print "this is all users"}' /etc/passwd


條件操作符
1.匹配
awk -F: '{if($1~/root/) print }' /etc/passwd //{if($1~/root/) print}表示如果field1包含root,列印它

2.精確匹配
使用等號 ==
awk -F: '{if($3=="0") print }' /etc/passwd

3.不匹配
!~
awk -F: '{if($1!~/linuxtone/) print }' /etc/passwd

!=
精確不匹配
awk -F: '{if($1!="linuxtone") print }' /etc/passwd

4.小於
<
5.小於等於
<=
6.大於
>
.........
7.設置大小寫
awk '/[Rr]oot/' /etc/passwd

8.任意字元
awk -F: '{if($1~/^...t/) print}' /etc/passwd //^...t表示第四個字幕是t

9.或關係匹配
awk -F: '{if ($1~/(squid|nagios)/) print}' /etc/passwd

10.行首
awk '/^root/' /etc/passwd // ^root(行首包含root)

11.AND &&
awk -F: '{if($1=="root" && $3=="0") print}' /etc/passwd

12.OR ||

內置變數:
ARCC 命令行參數個數
ARGV 命令行參數排列
ENVIRON 支持隊列中系統環境變數的使用
FNR 瀏覽文件的記錄數
FS 置頂分隔符,等價於-F
NF 瀏覽記錄的域的個數
NR 已讀的記錄數
OFS 輸出域分隔符
ORS 輸出記錄分隔符
RS 控制記錄分隔符

列印有多少行記錄
awk 'END {print NR}' /etc/passwd

設置輸入域到變數名
awk -F: '{name=$1; path=$7; if(name~/root/) print name "tpath is:" path}' /etc/passwd

域值比較操作
awk '{if($6<$7) print $0}' input-file

修改文本域只顯示修改改記錄
awk -F: '{if($1=="nagios") {$1="nagios server" ; print }}' /etc/passwd

文件長度相加
ls -l|awk '/^[^d]/ {print $9"t" $5} {tot =$5} END {print "total kb:"tot}'

內置的字元竄函數
gsub(r,s) 在整個$0中用s替代r
gsub(r,s,t) 在整個t中用s替代r
index(s,t) 返回s中字元串t的第一位置
length(s) 返回s長度
match(s,r) 測試s中是否包含匹配r的字元串


split(s,a,fs) 在fs上將s分成序列a
sub(s, ) 用$0中最左邊也是最長的字元串替代
subtr(s,p) 返回字元串s中從p開始的後綴部分
substr(s,p,n) 返回字元串s中從p開始長度為n的後綴部分

1.gsub
awk 'gsub(/^root/,"netseek") {print}' /etc/passwd 將與root開頭的root替換為netseek

awk 'gsub(/0/,2) {print}' /etc/fstab

awk '{print gsub(/0/,2) $0}' /etc/fstab

2.index
awk 'BEGIN {print index("root","o")}' 查詢字元串root中o出現的第一位置

awk -F: '$1=="root" {print index($1,"o")" "$1}' /etc/passwd

awk -F: '{print index($1,"o") $1}' /etc/passwd

3.length
awk -F: '{print length($1)'} /etc/passwd

awk -F: '$1=="root" {print length($1)}' /etc/passwd

4.match (在ANCD中查找C的位置)
awk 'BEGIN {print match("ANCD",/C/)}'

5.split
返回字元串數組元素個數
awk 'BEGIN {print split("123#456#789", myarray, "#")}'

6.sub 只能替換指定域的第一個0
awk 'sub(/0/,2) {print }' /etc/fstab

7.substr
按照起始位置及長度返回字元串的一部分
awk 'BEGIN {print substr("www.linuxtone.org",5,9)}' //第5個字元開始,取9個字元.

awk 'BEGIN {print substr("www.linuxtone.org",5)}' //第5個位置開始,取後面的所有.

字元串屏蔽序列
b 退格鍵
f 走紙換頁
n 新行
r 回車
t tab


c 任意其他特殊字元
ddd 八進位

很簡單的例子
awk -F: '{print $1,"b"$2,"t"$3}' /etc/passwd 輸出函數printf(注意是printf不是print,兩者效果不同的)
printf函數擁有幾種不同的格式化輸出功能

printf修飾符
- 左對齊
Width 域的步長0表示0步長
.prec 最大字元串長度,或小數點右邊的位數


awk printf格式
%c ASCII字元
%d 整數
%e 浮點數,科學計數法
%f 浮點數
%g awk決定使用哪種浮點數轉換,e或者f
%o 八進位數
%s 字元串
%x 十六進位數

1.字元串轉換
echo "65" | awk '{printf"%cn",$0}'

awk 'BEGIN {printf "%cn",65}'

awk 'BEGIN {printf "%fn",999}'

2.格式化輸出
awk -F: '{printf "%-15s %sn",$1,$3}' /etc/passwd

awk -F: 'BEGIN {printf"USERttUIDn"} {printf "%-15s %sn",$1,$3}' /etc/passwd

3.向一行awk命令傳值
who | awk '{if ($1 == user) print $1 " you are connected to:" $2}' user=$LOGNAME

4.awk腳本文件 (在文件名字後面加後綴.awk方便區分)
#!/bin/awk -f
BEGIN{
FS=":"
print "UserttUID"
print"____________________________"
}

{printf "%-15s %sn",$1,$3}

END{
print "END"

}
===============================================================================================================================================


18.從a.log文件中提取包含"WARNING"或"FATAL",同時不包含"IGNOR"的行,然後提取以":"分割的第 5個欄位
grep -E 'WARNING|FATAL' a.log|grep -v ignor |awk -F ":" '{print $5}'

不斷更新中.....

本文出自 「會飛的魚」 博客,謝絕轉載!


[火星人 ] linux主機常用管理命令已經有538次圍觀

http://coctec.com/docs/linux/show-post-49873.html