·總結的經驗:
一、學會總結時學好運維的重要前提。
二、經過案列或例子來總結一個技術點或者命令。
三、畫一張邏輯圖,形象的卡通記憶這個知識技術點。
四、經過管道過濾數據時,最好先輸出結果,而後回退再使用管道看着結果過濾。正則表達式
1、如何過濾出已知當前目錄下oldboy中的全部一級目錄(提示:不包含oldboy目錄下面目錄的子目錄及隱藏目錄,即只能是以及目錄)?bash
分析過程:要完成此題,咱們首先要想如何區分目錄和文件?
1 根據顏色區分
2 ls -l 輸出結果中以d(directory)開頭的就是目錄
3 ls -l 輸出結果中第二列數字大於1的就是目錄(文件沒有硬連接的狀況下是對的)
4 經過給目錄加標識,而後經過濾標識就過濾出目錄
(ls -F給不一樣文件加不一樣符號 或ls -p 只給目錄加斜線)
5 經過find直接查找指定類型的文件(-d就是目錄)運維
建立環境:
[root@localhost oldboy]# mkdir ext/oldboy 1 2 3 4 a b c d -p
[root@localhost oldboy]# tree
.
├── 1
├── 123.log
├── 2
├── 3
├── 4
├── a
├── b
├── c
├── d
├── ext
│ └── oldboy
└── oldboyspa
11 directories, 1 file
[root@localhost oldboy]# ls -l
total 696
drwxr-xr-x 2 root root 6 Jun 1 02:39 1
-rw-r--r-- 1 root root 712614 Apr 1 00:16 123.log
drwxr-xr-x 2 root root 6 Jun 1 02:39 2
drwxr-xr-x 2 root root 6 Jun 1 02:39 3
drwxr-xr-x 2 root root 6 Jun 1 02:39 4
drwxr-xr-x 2 root root 6 Jun 1 02:39 a
drwxr-xr-x 2 root root 6 Jun 1 02:39 b
drwxr-xr-x 2 root root 6 Jun 1 02:39 c
drwxr-xr-x 2 root root 6 Jun 1 02:39 d
drwxr-xr-x 3 root root 20 Jun 1 02:41 ext
drwxr-xr-x 2 root root 6 Jun 1 02:39 oldboy
[root@localhost oldboy]# ls -F (給目錄加標識,-F 給不一樣文件加不一樣符號)
1/ 123.log 2/ 3/ 4/ a/ b/ c/ d/ ext/ oldboy/
[root@localhost oldboy]# ls -p (給目錄加標識,-p 只給目錄加斜線)
1/ 123.log 2/ 3/ 4/ a/ b/ c/ d/ ext/ oldboy/awk
方法一:
[root@localhost oldboy]# ls -l|grep "^d"
drwxr-xr-x 2 root root 6 Jun 1 02:39 1
drwxr-xr-x 2 root root 6 Jun 1 02:39 2
drwxr-xr-x 2 root root 6 Jun 1 02:39 3
drwxr-xr-x 2 root root 6 Jun 1 02:39 4
drwxr-xr-x 2 root root 6 Jun 1 02:39 a
drwxr-xr-x 2 root root 6 Jun 1 02:39 b
drwxr-xr-x 2 root root 6 Jun 1 02:39 c
drwxr-xr-x 2 root root 6 Jun 1 02:39 d
drwxr-xr-x 3 root root 20 Jun 1 02:41 ext
drwxr-xr-x 2 root root 6 Jun 1 02:39 oldboysed
方法二:
[root@localhost oldboy]# ls -F
1/ 123.log 2/ 3/ 4/ a/ b/ c/ d/ ext/ oldboy/
[root@localhost oldboy]# ls -F|grep "/$" (/$:以/爲結尾的)
1/
2/
3/
4/
a/
b/
c/
d/
ext/
oldboy/file
方法三:
[root@localhost oldboy]# find ./ -maxdepth 1 -type d (-maxdepth 1表示查找命令的深度)
./ (./*比./多個*:表示只找./目錄下的不包括./目錄自己,這裏就有./自己)
./1
./2
./3
./4
./a
./b
./c
./d
./oldboy
./ext
[root@localhost oldboy]# find ./* -maxdepth 1 -type d (./*比./多個*:表示只找./目錄下的不包括./目錄自己)
./1
./2
./3
./4
./a
./b
./c
./d
./ext
./ext/oldboy (怎麼去掉這個子目錄?-type d後面加 ! -name ".")
./oldboy
[root@localhost oldboy]# find . -maxdepth 1 -type d ! -name "."
./1
./2
./3
./4
./a
./b
./c
./d
./oldboy
./extgrep
方法四:(第二列數字大於1的就是目錄)
[root@localhost oldboy]# ls -l
total 696
drwxr-xr-x 2 root root 6 Jun 1 02:39 1
-rw-r--r-- 1 root root 712614 Apr 1 00:16 123.log
drwxr-xr-x 2 root root 6 Jun 1 02:39 2
drwxr-xr-x 2 root root 6 Jun 1 02:39 3
drwxr-xr-x 2 root root 6 Jun 1 02:39 4
drwxr-xr-x 2 root root 6 Jun 1 02:39 a
drwxr-xr-x 2 root root 6 Jun 1 02:39 b
drwxr-xr-x 2 root root 6 Jun 1 02:39 c
drwxr-xr-x 2 root root 6 Jun 1 02:39 d
drwxr-xr-x 3 root root 20 Jun 1 02:41 ext
drwxr-xr-x 2 root root 6 Jun 1 02:39 oldboy
[root@localhost oldboy]# ls -l|awk '{if($2>1) print $0}' ($2>1,第二列大於1。$0輸入整行)
total 696
drwxr-xr-x 2 root root 6 Jun 1 02:39 1
drwxr-xr-x 2 root root 6 Jun 1 02:39 2
drwxr-xr-x 2 root root 6 Jun 1 02:39 3
drwxr-xr-x 2 root root 6 Jun 1 02:39 4
drwxr-xr-x 2 root root 6 Jun 1 02:39 a
drwxr-xr-x 2 root root 6 Jun 1 02:39 b
drwxr-xr-x 2 root root 6 Jun 1 02:39 c
drwxr-xr-x 2 root root 6 Jun 1 02:39 d
drwxr-xr-x 3 root root 20 Jun 1 02:41 ext
drwxr-xr-x 2 root root 6 Jun 1 02:39 oldboy方法
方法五:
[root@localhost oldboy]# ls -dl */ (這個不經常使用)
drwxr-xr-x 2 root root 6 Jun 1 02:39 1/
drwxr-xr-x 2 root root 6 Jun 1 02:39 2/
drwxr-xr-x 2 root root 6 Jun 1 02:39 3/
drwxr-xr-x 2 root root 6 Jun 1 02:39 4/
drwxr-xr-x 2 root root 6 Jun 1 02:39 a/
drwxr-xr-x 2 root root 6 Jun 1 02:39 b/
drwxr-xr-x 2 root root 6 Jun 1 02:39 c/
drwxr-xr-x 2 root root 6 Jun 1 02:39 d/
drwxr-xr-x 3 root root 20 Jun 1 02:41 ext/
drwxr-xr-x 2 root root 6 Jun 1 02:39 oldboy/技術
方法六:
[root@localhost oldboy]# ls -l|sed -n '/^d/p' (sed命令過濾功能記一下,^d表示以d開頭)
drwxr-xr-x 2 root root 6 Jun 1 02:39 1
drwxr-xr-x 2 root root 6 Jun 1 02:39 2
drwxr-xr-x 2 root root 6 Jun 1 02:39 3
drwxr-xr-x 2 root root 6 Jun 1 02:39 4
drwxr-xr-x 2 root root 6 Jun 1 02:39 a
drwxr-xr-x 2 root root 6 Jun 1 02:39 b
drwxr-xr-x 2 root root 6 Jun 1 02:39 c
drwxr-xr-x 2 root root 6 Jun 1 02:39 d
drwxr-xr-x 3 root root 20 Jun 1 02:41 ext
drwxr-xr-x 2 root root 6 Jun 1 02:39 oldboy
[root@localhost oldboy]# ls -F|sed -n '/\/$/p' (也能夠過濾以/結尾的)
1/
2/
3/
4/
a/
b/
c/
d/
ext/
oldboy/
方法七:
[root@localhost oldboy]# ls -l|awk '/^d/' (awk命令過濾功能記一下,^d表示以d開頭)
drwxr-xr-x 2 root root 6 Jun 1 02:39 1
drwxr-xr-x 2 root root 6 Jun 1 02:39 2
drwxr-xr-x 2 root root 6 Jun 1 02:39 3
drwxr-xr-x 2 root root 6 Jun 1 02:39 4
drwxr-xr-x 2 root root 6 Jun 1 02:39 a
drwxr-xr-x 2 root root 6 Jun 1 02:39 b
drwxr-xr-x 2 root root 6 Jun 1 02:39 c
drwxr-xr-x 2 root root 6 Jun 1 02:39 d
drwxr-xr-x 3 root root 20 Jun 1 02:41 ext
drwxr-xr-x 2 root root 6 Jun 1 02:39 oldboy
[root@localhost oldboy]# ls -F|awk '/\/$/' (也能夠過濾以/結尾的)
1/
2/
3/
4/
a/
b/
c/
d/
ext/
oldboy/
上述方法總結:
1、ls -l|grep "^d"
#以d開頭的
2、ls -l|awk '{if($2>1) print $0}'
#第二列數字大於1的
3、ls -F|grep "/$"
#給目錄加標識,-F 給不一樣文件加不一樣符號
ls -p|grep "/$"
#給目錄加標識,-p 只給目錄加斜線
4、find . -maxdepth 1 -type d ! -name "."
#find加深度-maxdepth,類型d,而後取反,不包含名字爲.的當前目錄。
5、[root@localhost oldboy]# ls -dl */ (這個不經常使用)
6、[root@localhost oldboy]# ls -l|sed -n '/^d/p' (sed命令過濾功能記一下,^d表示以d開頭)
[root@localhost oldboy]# ls -F|sed -n '/\/$/p' (也能夠過濾以/結尾的)
7、[root@localhost oldboy]# ls -l|awk '/^d/' (awk命令過濾功能記一下,^d表示以d開頭)
[root@localhost oldboy]# ls -F|awk '/\/$/' (也能夠過濾以/結尾的)
awk命令:
·awk #(三劍客老大)過濾,輸出內容,自成一門語言。 NR:行號
$1,2... 第一,二...列以此類推。但$0:標識一行。
-F 指定分隔符(-F ":"以:爲分隔。$NF是最後一列。$1,$4,$NF逗號讓結果間有空格)
[root@localhost oldboy]# tail -1 /etc/passwd
oldboy:x:1001:1001::/home/oldboy:/bin/bash
[root@localhost oldboy]# awk -F ":" 'NR==1 {print $6}' /etc/passwd
/root
[root@localhost oldboy]# awk -F ":" 'NR==1 {print $NF}' /etc/passwd
/bin/bash
[root@localhost oldboy]# awk -F ":" 'NR==1 {print $1,$4,$NF}' /etc/passwd
root 0 /bin/bash
Linux三劍客(只適合grep,sed,awk)正則表達式,對普通命令不適合(通配符)1 ^ #以...開頭,^d,意思是以d開頭2 $ #以...結尾,/$,意思是以/結尾3 \ #讓本來有意義的字符脫掉馬甲,還原它自己的含義4 . #表明任意單個字符5 * #表明全部