linux經典 題庫(一)

1.1建立一個目錄/data

1)  解答: mkdir  /datamysql


擴展:mkdir後面能夠加參數-p,表示遞歸建立,也能夠加參數-v,表示能夠顯示出建立的過程。linux



1.2oldboy.txt增長內容爲「I am studying 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



1.3已知文件test.txt內容爲:

test服務器

liyao

oldboy

請給出輸出test.txt文件內容時,不包含oldboy字符串的命令。

解答:此題有幾種解法

1)  利用head取文件的前兩行便可


2)  用grep過濾排除  ,-v參數表示反轉過濾。

grep -v"oldboy" test.txt



1.4只查看ett.txt文件(共100行)內第20到第30行的內容

解答:

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


 

1.5/oldboy目錄及其子目錄下全部以擴展名.sh結尾的文件中包含./hostlists.txt的字符串所有替換爲../idctest_iplist

解答:

方法一find /root -type f -name "*.sh"|xargs sed -i 's#./hostlists.txt#../idctest_iplist #g'

find用於查找文件,後面加參數-type 後面加文件類型,後面加要查詢的文件名,-name;sed和xargs聯合,加上sed is#替換前的內容#替換後的內容#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 ~]#

 

1.6如何查看/etc/services文件內容有多少行?

解答:

第一種:

[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計算服務進程個數等。而後經過腳本判斷進程個數來檢測服務是否正常,如進程數大於一個,說明進程還存在,服務通常就正常。

 

1.7如何過濾出已知當前目錄下oldboy中的全部一級目錄(提示:不包含oldboy目錄下面目錄的子目錄及隱藏目錄,即只能是一級目錄)

解答:

1.7.1 第一種方法(tree -Ld 1

[root@mao data]# tree -Ld 1

.

├── niu

├── old

└── yu

3 directories

[root@mao data]#

注:tree命令是以樹的結構顯示目錄結構,參數‘-L’ ,主要用於顯示目錄結構的層數;參數‘-d’ 用於顯示目錄的。

1.7.2第二種方法

[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 用來將文件末尾加上'/'

 

 

1.8一個目錄中有不少文件(ls -l查看時好多屏),想用一條命令最快速度查看到最近更新的文件。如何看?

解答:

 [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 ~]#

 

1.9已知apache服務的訪問日誌按天記錄在服務器本地目錄/app/logs下,因爲磁盤空間緊張,如今要求只能保留最近7天的訪問日誌!請問如何解決? 請給出解決辦法或配置或處理命令。(提示:能夠從apache服務配置上着手,也能夠從生成出來的日誌上着手。)

解答:第一步:

首先建立運行環境:

[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]#

 

1.10打印輕量級web服務的配置文件nginx.conf內容的行號及內容,該如何作?

解答:

1.10.1第一種方法:nl nginx.conf

[root@oldboy /]# nlnginx.conf

     1  stu1

     2  stu2

     3  stu3

     4  stu4

     5  stu5

[root@oldboy /]#

 

1.10.2第二種方法:vi nginx.conf 後使用set nu來呈現行號,set nonu來取消行號

[root@oldboy /]# vi nginx.conf

      1 stu1

      2 stu2

      3 stu3

      4 stu4

      5 stu5

~                                                                                        

:set nu

 

1.10.3第三種方法:cat -n nginx.conf

[root@oldboy /]# cat-n nginx.conf

     1  stu1

     2  stu2

     3  stu3

     4  stu4

     5  stu5

[root@oldboy /]#

注:

 

1.10.4第四種方法:awk '{print NR,$0}' nginx.conf

[root@oldboy /]#awk '{print NR,$0}' nginx.conf

1 stu1

2 stu2

3 stu3

4 stu4

5 stu5

[root@oldboy /]#

 

注:print 表示打印,NR表示行,$0表示整行

 

1.10.5第五種方法

[root@oldboy /]# grep-n '.' nginx.conf

1:stu1

2:stu2

3:stu3

4:stu4

5:stu5

[root@oldboy /]#

注:-n表示將每一行前面加行號,‘.’表示匹配全部

 

1.10.6第六種方法

[root@oldboy /]# sed= nginx.conf |xargs -n2

1 stu1

2 stu2

3 stu3

4 stu4

5 stu5

[root@oldboy /]#

 

注:sed後面的等號先後有空格,不然搜不出,

 

1.11/etc/目錄爲linux系統的默認的配置文件及服務啓動命令的目錄

  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

 

1.12已知以下命令及結果:

[oldboy@test ~]$echo "I am oldboy,myqq is 31333741">>oldboy.txt

[oldboy@test ~]$ catoldboy.txt 

I am oldboy,myqq is31333741

如今須要從文件中過濾出oldboy31333741字符串,請給出命令.

解答:

第一種方法:先建立測試環境

此方法是先用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表示搜索到之後從分隔符後換行。

 

1.13過濾出/etc/services 文件包含33061521兩數據庫端口的行的內容。

##使用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]#

相關文章
相關標籤/搜索