1) 解答: mkdir /datamysql
擴展:mkdir後面能夠加參數-p,表示遞歸建立,也能夠加參數-v,表示能夠顯示出建立的過程。linux
解答:爲文件增長內容目前有三種方法:nginx
1) 用echo的方式追加內容:echo "I am studyinglinux"> /data/oldboy.txtweb
2) 用vi編輯器追加內容:vi /data/oldboy.txt ##進入vi後輸入i,進入編輯模式,輸入要追加的內容,而後按esc鍵退出。sql
3) 用cat和eof配合輸出 數據庫
cat >>/data/oldboy.txt <<eofexpress
> I am studying enhlish apache
> eofbash
test服務器
liyao
oldboy
請給出輸出test.txt文件內容時,不包含oldboy字符串的命令。
解答:此題有幾種解法
1) 利用head取文件的前兩行便可
2) 用grep過濾排除 ,-v參數表示反轉過濾。
grep -v"oldboy" test.txt
解答:
1) 利用head和tail結合取
head -30 ett.txt |tail -11
2) 利用sed命令
sed -n"20,30p" ett.txt
3) 利用awk命令
awk"NR>=20&&NR<=30" ett.txt
解答:
方法一:find /root -type f -name "*.sh"|xargs sed -i 's#./hostlists.txt#../idctest_iplist #g'
find用於查找文件,後面加參數-type 後面加文件類型,後面加要查詢的文件名,-name;sed和xargs聯合,加上sed –i‘s#替換前的內容#替換後的內容#g’
方法二:利用變量函數
第一步:建立測試環境
[root@mao oldboy]# cat 5.sh
I am studying Linux
I am a goog boy
[root@mao oldboy]# cd.
-bash: cd.: command not found
[root@mao oldboy]# cd ..
[root@mao ~]# pwd
/root
第二步:先用find找到文件find /root/oldboy -type f-name '*.sh'
[root@mao ~]# sed 's#am#123456#g' $(find /root/oldboy -type f -name '*.sh')
466
I 123456 studying Linux
I 123456 a goog boy
466
第三步:利用sed與‘s#替換前#替換後#g’先查看一下要別替換後的結果,$()的意思引用find的執行結果
[root@mao ~]# sed 's#am#123456#g' $(find /root/oldboy -name '*.sh' -type f )
466
I 123456 studying Linux
I 123456 a goog boy
466
第四步:sed後面加上參數 -i ,實現最後替換。
[root@mao ~]# sed 's#am#123456#g' -i $(find/root/oldboy -name '*.sh' -type f )
[root@mao ~]# cat /root/oldboy/5.sh
I 123456 studying Linux
I 123456 a goog boy
[root@mao ~]#
解答:
第一種:
[root@oldboyedu oldboy]# cat -n/etc/services |tail -1
10774 iqobject 48619/udp # iqobject
[root@oldboyedu oldboy]# ##全部能夠查看行號的命令 + tail -1
第二種:
[root@oldboyedu oldboy]# wc -l/etc/services
10774 /etc/services
生產場景中常常會經過wc -l計算服務進程個數等。而後經過腳本判斷進程個數來檢測服務是否正常,如進程數大於一個,說明進程還存在,服務通常就正常。
解答:
[root@mao data]# tree -Ld 1
.
├── niu
├── old
└── yu
3 directories
[root@mao data]#
注:tree命令是以樹的結構顯示目錄結構,參數‘-L’ ,主要用於顯示目錄結構的層數;參數‘-d’ 用於顯示目錄的。
[root@mao data]# ls -l |grep '^d'
drwxr-xr-x 2 root root 4096 Mar 16 03:08 niu
drwxr-xr-x 3 root root 4096 Mar 16 03:07 old
drwxr-xr-x 3 root root 4096 Mar 16 03:07 yu
[root@mao data]#
注:此題用了grep與管道過濾查詢,先用ls -l查出全部的文件,其中包括文件和目錄,而後用到了通配符^,它後面加名字,表示以名字開頭的文件。
1.7.3第三種方法
[root@mao data]#ll
total 16
-rw-r--r-- 1 root root 0 Mar 16 03:06 1
-rw-r--r-- 1 root root 0 Mar 16 03:06 2
-rw-r--r-- 1 root root 0 Mar 16 03:06 3
-rw-r--r-- 1 root root 0 Mar 16 03:06 44
-rw-r--r--. 1 root root 29 Mar 15 13:34 ett.txt
drwxr-xr-x 2 root root 4096 Mar 16 03:08 niu
drwxr-xr-x 3 root root 4096 Mar 16 03:07 old
drwxr-xr-x 3 root root 4096 Mar 16 03:07 yu
[root@mao data]# ls-l |awk '$2>1'
total 16
drwxr-xr-x 2 root root 4096 Mar 16 03:08 niu
drwxr-xr-x 3 root root 4096 Mar 16 03:07 old
drwxr-xr-x 3 root root 4096 Mar 16 03:07 yu
[root@mao data]#
注:awk能夠取列,利用變量$後面加列數能夠實現,列如$2是取第二列,$6是取第六列。
1.7.4第四種方法
[root@mao data]#find -maxdepth 1 -type d
.
./yu
./niu
./old
[root@mao data]#
注:find是查詢命令中很重要的,它和maxdepth能夠查詢目錄的最大深度數,
-type 後面跟文件的類型,通常有普通文件,用f表示,目錄文件用d表示。
-name 匹配某個名字
!-name 不匹配某個名字
find後面的參數是有順序的,通常maxdepth放前面
[root@mao data]# find -maxdepth 1 -type d !-name '.'
-bash: !-name: event not found
[root@mao data]# find -maxdepth 1 -type d !-name '.' ##注意!和後面的空格
-bash: !-name: event not found
[root@mao data]# find-maxdepth 1 -type d ! -name '.'
./yu
./niu
./old
[root@mao data]#
1.7.5第五種方法
[root@mao data]#ls -F|find -type d -name '$/'
[root@mao data]# ls -F
1 2 3 44 ett.txt niu/ old/ yu/
[root@mao data]# ls -F|grep '$/'
[root@mao data]# ls-F|grep '/$'
niu/
old/
yu/
[root@mao data]#
注:find是搜索文件的,而grep通常用於搜索字母或文字的。ls -F 用來將文件末尾加上'/'。
解答:
[root@mao~]# date
Thu Mar 16 05:28:51 CST 2017
[root@mao ~]# mkdir oldboy2
[root@mao ~]#ls -lrt
total 64
-rw-r--r--. 1 root root 5890 Mar 10 09:39 install.log.syslog
-rw-r--r--. 1 root root 21764 Mar 10 09:42install.log
-rw-------. 1 root root 1073 Mar 10 09:42 anaconda-ks.cfg
-rw-r--r--. 1 root root 201 Mar 12 20:45 oldboy.txt.bak
-rw-r--r--. 1 root root 0 Mar 12 21:07 file
-rw-r--r--. 1 root root 18 Mar 13 19:32 test.txt
drwxr-xr-x 2 root root 4096 Mar 16 00:31oldboy.txt
drwxr-xr-x 2 root root 4096 Mar 16 05:30oldboy2
drwxr-xr-x. 7 root root 4096 Mar 16 2017 oldboy
-rw-r--r--. 1 root root 10 Mar 16 2017 ett.txt
[root@mao ~]#
解答:第一步:
首先建立運行環境:
[root@mao logs]#mkdir -p /app/logs2
[root@mao app]# cd logs2/
[root@mao logs2]# ll
total 0
[root@mao logs2]#for time in {01..16};do date -s "201703$time"; touch access_www_$(date +%F).log ;done
Wed Mar 100:00:00 CST 2017
Thu Mar 200:00:00 CST 2017
Fri Mar 300:00:00 CST 2017
Sat Mar 400:00:00 CST 2017
Sun Mar 500:00:00 CST 2017
Mon Mar 600:00:00 CST 2017
Tue Mar 700:00:00 CST 2017
Wed Mar 800:00:00 CST 2017
Thu Mar 900:00:00 CST 2017
Fri Mar 10 00:00:00 CST 2017
Sat Mar 11 00:00:00 CST 2017
Sun Mar 12 00:00:00 CST 2017
Mon Mar 13 00:00:00 CST 2017
Tue Mar 14 00:00:00 CST 2017
Wed Mar 15 00:00:00 CST 2017
Thu Mar 16 00:00:00 CST 2017
[root@mao logs2]# date-s "20170316"
Thu Mar 16 00:00:00 CST 2017
第二步:先找到日誌文件
[root@mao logs2]# find-type f -name '*.log'
./access_www_2017-03-04.log
./access_www_2017-03-02.log
./access_www_2017-03-03.log
./access_www_2017-03-01.log
./access_www_2017-03-09.log
./access_www_2017-03-07.log
./access_www_2017-03-16.log
./access_www_2017-03-10.log
./access_www_2017-03-05.log
./access_www_2017-03-15.log
./access_www_2017-03-11.log
./access_www_2017-03-08.log
./access_www_2017-03-12.log
./access_www_2017-03-13.log
./access_www_2017-03-06.log
./access_www_2017-03-14.log
第三步:使用find的參數-mtime ,查找某段時間前,而後利用管道查看出來。
[root@mao logs2]# find-type f -name '*.log' -mtime +7 |xargs ls -l
-rw-r--r-- 1 root root 0 Mar 1 00:00 ./access_www_2017-03-01.log
-rw-r--r-- 1 root root 0 Mar 2 00:00 ./access_www_2017-03-02.log
-rw-r--r-- 1 root root 0 Mar 3 00:00 ./access_www_2017-03-03.log
-rw-r--r-- 1 root root 0 Mar 4 00:00 ./access_www_2017-03-04.log
-rw-r--r-- 1 root root 0 Mar 5 00:00 ./access_www_2017-03-05.log
-rw-r--r-- 1 root root 0 Mar 6 00:00 ./access_www_2017-03-06.log
-rw-r--r-- 1 root root 0 Mar 7 00:00 ./access_www_2017-03-07.log
-rw-r--r-- 1 root root 0 Mar 8 00:00 ./access_www_2017-03-08.log
[root@mao logs2]#
第四步:最後一步刪掉篩選的7天前的日誌文件。
[root@mao logs2]# find-type f -name '*.log' -mtime +7 |xargs rm -fr
[root@mao logs2]# ll
total 0
-rw-r--r-- 1 root root 0 Mar 9 00:00 access_www_2017-03-09.log
-rw-r--r-- 1 root root 0 Mar 10 00:00access_www_2017-03-10.log
-rw-r--r-- 1 root root 0 Mar 11 00:00access_www_2017-03-11.log
-rw-r--r-- 1 root root 0 Mar 12 00:00access_www_2017-03-12.log
-rw-r--r-- 1 root root 0 Mar 13 00:00access_www_2017-03-13.log
-rw-r--r-- 1 root root 0 Mar 14 00:00access_www_2017-03-14.log
-rw-r--r-- 1 root root 0 Mar 15 00:00access_www_2017-03-15.log
-rw-r--r-- 1 root root 0 Mar 16 00:00access_www_2017-03-16.log
[root@mao logs2]#
解答:
[root@oldboy /]# nlnginx.conf
1 stu1
2 stu2
3 stu3
4 stu4
5 stu5
[root@oldboy /]#
[root@oldboy /]# vi nginx.conf
1 stu1
2 stu2
3 stu3
4 stu4
5 stu5
~
:set nu
[root@oldboy /]# cat-n nginx.conf
1 stu1
2 stu2
3 stu3
4 stu4
5 stu5
[root@oldboy /]#
注:
[root@oldboy /]#awk '{print NR,$0}' nginx.conf
1 stu1
2 stu2
3 stu3
4 stu4
5 stu5
[root@oldboy /]#
注:print 表示打印,NR表示行,$0表示整行
[root@oldboy /]# grep-n '.' nginx.conf
1:stu1
2:stu2
3:stu3
4:stu4
5:stu5
[root@oldboy /]#
注:-n表示將每一行前面加行號,‘.’表示匹配全部
[root@oldboy /]# sed= nginx.conf |xargs -n2
1 stu1
2 stu2
3 stu3
4 stu4
5 stu5
[root@oldboy /]#
注:sed後面的等號先後有空格,不然搜不出,
a.請用tar打包/etc整個目錄(打包及壓縮)
b.請用tar打包/etc整個目錄(打包及壓縮,但須要排除/etc/services文件)
c.請把a點命令的壓縮包,解壓到/tmp指定目錄下(最好只用tar命令實現)
解答:
A 解答:
第一步:打包先進入要打包的目錄下。
[root@mao etc]#cd /etc/
[root@mao etc]# tarzcf /mnt/etc.tar.gz /etc/
tar: Removing leading `/' from member names
tar: Removing leading `/' from hard link targets
[root@mao etc]# ls /mnt/
8 data etc.tar.gz ett.txt oldboy test.txt
[root@mao etc]#
參數解析:tar後面的參數z表示以軟件gzip壓縮文件,c(create)建立壓縮包,f(file)指定壓縮包名字。
B
解答:
第一種方法:
[root@mao etc]#tar zcf /mnt/paichu.tar.gz /etc/ --exclude=etc/services
tar: Removing leading `/' from member names
tar: Removing leading `/' from hard link targets
[root@mao etc]# ls /mnt/
8 data etc.tar.gz ett.txt oldboy paichu.tar.gz test.txt
[root@mao etc]#
建立成功後,查看是否排除成功。
[root@mao etc]# ls /mnt/
8 data etc.tar.gz ett.txt oldboy paichu.tar.gz test.txt
[root@mao etc]#tar tf /mnt/paichu.tar.gz |grep services
etc/init/readahead-disable-services.conf
etc/etc/init/readahead-disable-services.conf
[root@mao etc]#
查看打包的包內容,能夠用tart(list)f(file) 包名字。從上面查看能夠看出來查出來的文件沒有/etc/services的文件。
--exclude=後面加上要排除打包的路徑,最好是相對路徑。
第二種方法:此方法用於排除一個或多個文件。
首先能夠先將要排除的文件寫入一個文件中,而後再排除。
[root@mao etc]# vi/mnt/paichu.txt
etc/services
etc/ssh
[root@mao etc]# tar zcf /mnt/paichu1.tar.gz /etc/--exclude-from=/mnt/paichu.txt
tar: Removing leading `/'from member names
tar: Removing leading `/'from hard link targets
[root@mao etc]# ls /mnt/
8 etc.tar.gz oldboy paichu.tar.gz test.txt
data ett.txt paichu1.tar.gz paichu.txt
[root@mao etc]# tar tf /mnt/paichu1.tar.gz |grep services
etc/init/readahead-disable-services.conf
etc/etc/init/readahead-disable-services.conf
第三種方法:利用花括號{}裏面寫上要排除打包的文件名。
[root@mao etc]#tar zcf /mnt/paichu3.tar.gz /etc/ --exclude={ntp,pm}
tar: Removing leading `/' from member names
tar: Removing leading `/' from hard link targets
[root@mao etc]# tar tf /mnt/paichu3.tar.gz |grepntp
etc/dhcp/dhclient.d/ntp.sh
etc/ntp.conf
etc/X11/fontpath.d/
etc/rc.d/rc1.d/K74ntpd
[oldboy@test ~]$echo "I am oldboy,myqq is 31333741">>oldboy.txt
[oldboy@test ~]$ catoldboy.txt
I am oldboy,myqq is31333741
如今須要從文件中過濾出「oldboy」和「31333741」字符串,請給出命令.
解答:
第一種方法:先建立測試環境
此方法是先用cut命令指定空格爲分隔符,將內容分爲5份,而後用sed將',myqq' 這個多餘的內容取出掉。
[root@mao data]# cat oldboy.txt
[root@mao data]# echo "I am oldboy,myqq is31333741">>oldboy.txt
[root@mao data]# cat oldboy.txt
I am oldboy,myqq is 31333741
[root@mao data]#cut -d ' ' -f3,5 oldboy.txt
oldboy,myqq 31333741
[root@mao data]# cut-d ' ' -f3,5 oldboy.txt |sed 's#,myqq##g'
oldboy 31333741
[root@mao data]#
注意:cut是截取列,
-d, --delimiter=DELIM 加上參數d表示指定分割符,後面跟上單引號分隔符,-f 表示fields表示指定列名。
第二種方法:此方法是先用sed命令將內容中惟一的逗號替換掉(只是不顯示出來),而後只剩下空格,這時候再用cut 命令分割。
[root@mao data]# cat oldboy.txt
I am oldboy,myqq is 31333741
[root@mao data]# sed 's#,# #g' oldboy.txt
I am oldboy myqq is 31333741
[root@mao data]# sed's#,# #g' oldboy.txt |cut -d ' ' -f3,6
oldboy 31333741
[root@mao data]#
第三種方法:此方法是用awk先搜索出第三列和第五列,而後用sed將「.myqq」替換成空。
[root@mao data]# cat oldboy.txt
I am oldboy,myqq is 31333741
[root@mao data]# awk '{print $3,$5}' oldboy.txt
oldboy,myqq 31333741
[root@mao data]# awk'{print $3,$5}' oldboy.txt |sed 's#,myqq##g'
oldboy 31333741
[root@mao data]#
awk 默認分隔符是空格,若是想指定某個分割符,能夠加上F,後面加上指定的分隔符。
第四種方法:利用awk的F參數指定分隔符
[root@mao data]# awk -F '[ ,]' -f3,6 oldboy.txt
awk: fatal: can't open source file `3,6' forreading (No such file or directory)
[root@mao data]# awk-F '[ ,]' '{print $3,$6}' oldboy.txt
oldboy 31333741
[root@mao data]#
第五種方法:使用cut的參數c來去字符,空格與逗號都算一個字符。取得列前面不用加f
[root@mao data]# cut -c 6-11,20- oldboy.txt
oldboy 31333741
[root@mao data]#
第六種方法:此種方法是用先將這兩句話換行成兩行,而後取最後一行。
[root@mao data]# awk-F '[,]' '{print $1"\n"$2}' oldboy.txt 此處的F後面的'[,]' 能夠用,代替。
I am oldboy
myqq is 31333741
[root@mao data]# awk-F, '{print $1"\n"$2}' oldboy.txt |awk '{print $NF}'
oldboy
31333741
[root@mao data]#
第七種方法:利用tr命令,它是精簡版的sed。
[root@mao data]# tr ',' "\n" <oldboy.txt
I am oldboy
myqq is 31333741
[root@mao data]# tr ',' "\n" <oldboy.txt |awk '{printNF}'
3
3
[root@mao data]# tr ',' "\n" <oldboy.txt |awk '{print$NF}'
oldboy
31333741
[root@mao data]#
注:tr 後面的‘,’表示指定逗號爲分隔符,後面的「\n」表示搜索到之後從分隔符後換行。
##使用grep過濾
[root@mao etc]# grep -E '1521|3306' services |在引號中是或者的意思,不加單引號就是管道
mysql 3306/tcp # MySQL
mysql 3306/udp # MySQL
ncube-lm 1521/tcp # nCube License Manager
ncube-lm 1521/udp # nCube License Manager
[root@mao etc]#
##使用AWK過濾
[root@demo tmp]# awk '/1521|3306/' /etc/services
mysql 3306/tcp # MySQL
mysql 3306/udp # MySQL
ncube-lm 1521/tcp # nCube License Manager
ncube-lm 1521/udp # nCubeLicense Manager
##使用sed過濾
[root@demo tmp]# sed -nr '/1521|3306/' /etc/services
sed: -e expression #1, char 11: missing command
[root@demo tmp]# sed -nr '/1521|3306/p' /etc/services
mysql 3306/tcp # MySQL
mysql 3306/udp # MySQL
ncube-lm 1521/tcp # nCube License Manager
ncube-lm 1521/udp # nCube License Manager
[root@demo tmp]#