通配符與特殊符號


第1章        find 按照時間查找

1.1   時間查找

     -mtime

     -ctime

     -atime

  語法格式:  經常用來處理日志(日志不重要 或者只保留7天的日志)

    find /oldboy -type f -mtime +n(n是數字 代表天的意思)

                                  +7 7天前被修改過的文件

                                   -7 7天內被修改過的文件

                               

               -mtime 1   文件的修改時間為距離當前時間1天           24-48小時的文件

               -mtime 0   文件的修改時間為距離當前時間不到1天       24小時之內的文件

               -mtime +1  文件的修改時間為距離當前時間2天           48小時以前的文件

               -mtime -1  文件的修改時間為距離當前時間小於1天的文件 24小時內的文件

 

[root@oldboyedu-lnb ~]# touch 1day.txt
[root@oldboyedu-lnb ~]# ll
total 0
-rw-r--r-- 1 root root  0 Aug  5 09:16 1day.txt
-rw-r--r-- 1 root root  0 Jul 25 00:00 oldboy.txt
drwxr-xr-x 2 root root 36 Aug  4 11:50 test
-rw-r--r-- 1 root root  0 Jul 25 00:00 test.txt
[root@oldboyedu-lnb ~]# find ./ -type f -mtime +7
./test.txt
./oldboy.txt
[root@oldboyedu-lnb ~]# find ./ -type f -mtime -7
./1day.txt
[root@oldboyedu-lnb ~]# find ./ -type f -mtime 0
./1day.txt
[root@oldboyedu-lnb ~]# find ./ -type f -mtime -1
./1day.txt

       常見面試題: 查找/var/log/data/下修改時間為7天前文件並刪除

find ./ -type f -mtime +7|xargs  rm
find ./ -type f -mtime +7|xargs -i cp {} /tmp

1.2   !在find中取反   ===  -no

[root@oldboyedu-lnb test]# find ./ ! -type f    # 查找文件 取反后查找 除文件外所有類型
find查找inode刪除
[root@oldboyedu-lnb ~]# rm -f `find ./ -inum 33575024`    

第2章      通配符

2.1  shell的內置功能

         查找文件名 而不是查看過濾文件內容

          Linux的命令都支持通配符

        $()和`` 相同

       .. #當前目錄的上一級目錄

       ! #find awk 中表示取反linux 命令行表示歷史記錄?  #任意一個字符,通配符

       # #表示注釋

       | #管道,或者(正則)

      $ #以..結尾(正則),$LANG $取變量內容

      ^ #..開頭(正則)

     ~ #當前用戶的家目錄

      ``(反引號) $() #引用命令的結果

     && 並且 同時成立

      [] #表示一個范圍,集合 [abcdefg] [a-g] (正則,通配符) {} #產生一個序列,(通配符)

     命令1|命令2 ###管道符號 傳遞的是普通的字符串,文本 來自於前一個命令

      |xargs ###管道符號 與xargs 傳遞的是把字符串變成了 文件名

     . #當前目錄,任意一個字符(正則)

     .. #當前目錄的上一級目錄

      * #任意0 個或多個字符(文本)(通配符)

      > #輸出重定向 會清空原來的內容 然后在向文件里面追加內容

      >> #追加輸出重定向 追加到文件的最后一行

    < #輸入重定向 tr xargs

    << #cat 用來給文件追加多行文本

   # #注釋 linux 會忽視他。給人看的。解釋說明。

    # root 超級用戶的 提示符

   $ shell

  $變量 ====>取變量里面的內容 

手 鞋盒子 拿出鞋 ====>取變量里面的內容awk  $取列 $數字

    /etc /bin /usr/local

   cd / && tar zcf /tmp/and.tar.gz etc bin usr/local

   ifdown eth0 && ifup eth0

   ``(反引號) 引用命令的結果 ls -l `which cat ` ------$()

   ; 分號,分隔多個命令 pwd;pwd;pwd ;hostname ;

  - cd - ; su -

  " 雙引號

  ~ 當前用戶的家目錄 老家

  ^ 正則表達式

   / 根 路徑分隔符

  \ 轉義符號 \班長 ===> 學生

  ? 通配符 正則表達式

  + 正則表達式

  2.1.1   取反(find awk) find 在linux 中bash 命令行使用

          find /oldboy /etc  ! -name  "oldboy.txt"

                 awk '!/oldboy/' filename

      2.1.2  表示強制

           vi/vim

                vi 強制退出  !+字母 調取最近以此字母開頭的命令

     2.1.3  歷史命令

              * 代表任意字符(0 個或多個)

             ls *.txt

             find -name "*.log"

            [abcd] 匹配 abcd 中任何一個字符

            表示范圍 a 到 z,-表示范圍的意思

            [a-z]  [] 匹配中括號中任意一個字符  ls file0[678] ls file0[0-9]

            {…}  表示生成序列。以逗號分隔,且不能有空格

           [!abcd] 或[^abcd] 表示非,表示不匹配括號里面的任何一個字符

2.2   環境准備

mkdir /oldboy/20200118
cd /oldboy/20200118
touch stu{00..10}.txt oldboy{00..10}.log
ll
touch oldboy.txt stu.txt
*表示任何字符串/文本(0或多個)

  2.2.1   找出以stu開頭的文件

[root@oldboyedu-lnb 20200118]# ll stu*
-rw-r--r-- 1 root root 0 Aug  5 10:04 stu00.txt

  2.2.2   找出以stu開頭並且以.txt結尾的文件

[root@oldboyedu-lnb 20200118]# touch stu{1..5}.log
[root@oldboyedu-lnb 20200118]# ll stu*.txt
-rw-r--r-- 1 root root 0 Aug  5 10:04 stu00.txt

  2.2.3    查找所有以.txt 結尾的文件

[root@oldboyedu-lnb 20200118]# ll *.txt
-rw-r--r-- 1 root root 0 Aug  5 10:04 oldboy.txt
-rw-r--r-- 1 root root 0 Aug  5 10:04 stu00.txt
[root@oldboyedu-lnb 20200118]# ll *txt
-rw-r--r-- 1 root root 0 Aug  5 10:04 oldboy.txt

  2.2.4    使用find查找.txt結尾的文件

[root@oldboyedu-lnb 20200118]# find ./ -type f -name "*.txt"
./stu00.txt
./stu01.txt
[root@oldboyedu-lnb 20200118]# find -name "*.txt"
./stu00.txt
./stu01.txt

  2.2.5    使用find查找以stu開頭的文件、查找以stu開頭並且以.log 結尾的文件

[root@oldboyedu-lnb 20200118]# find -name "stu*"
./stu00.txt
./stu01.txt
[root@oldboyedu-lnb 20200118]# find -name "stu*.log"
./stu1.log
./stu2.log

  2.2.6    找出當前目錄下面  文件名中包含(只要有就行)oldboy的文件 ---模糊

[root@oldboyedu-lnb 20200118]# ll *oldboy*
-rw-r--r-- 1 root root 0 Aug  5 10:16 awk-oldboy
-rw-r--r-- 1 root root 0 Aug  5 10:16 lidao-oldboy.txt
-rw-r--r-- 1 root root 0 Aug  5 10:04 oldboy00.log
[root@oldboyedu-lnb 20200118]# find -name "*oldboy*"
./oldboy10.log
./oldboy.txt
./awk-oldboy
./lidao-oldboy.txt

2.3   ?任何一個字符/文本/字母

  2.3.1  .匹配st后任意單個字符並以.txt結尾的文件

[root@oldboyedu-lnb 20200118]# ll st?.txt
-rw-r--r-- 1 root root 0 Aug  5 10:04 stu.txt
[root@oldboyedu-lnb 20200118]# ll st??.log
-rw-r--r-- 1 root root 0 Aug  5 10:07 stu1.log
-rw-r--r-- 1 root root 0 Aug  5 10:07 stu2.log

  2.3.2  查找單個字符的命令

[root@oldboyedu-lnb 20200118]# ll /bin/?
-rwxr-xr-x. 1 root root 41480 Apr 11  2018 /bin/[
-rwxr-xr-x. 1 root root 19904 Apr 11  2018 /bin/w
[root@oldboyedu-lnb 20200118]# ll /bin/???

2.4  wc 命令     # 重要 常用

wc命令用來計算數字, 利用wc指令我們可以計算文件的Byte數,字數或是列數,若不指定文件名稱,或是所給予的文件名為”-”,則wc指令會從標准輸入設備讀取數據.

wc 語法

wc(選項)(參數)

選項:

-c或--bytes或——chars只顯示Bytes數

-l或——lines只顯示列數

-w或——words只顯示字數

[root@oldboyedu-lnb 20200118]# cat 1.txt
12345678
123
12345
[root@oldboyedu-lnb 20200118]# cat 1.txt|wc –L(統計總共數目)
8
[root@oldboyedu-lnb 20200118]# cat 1.txt|wc -l
3

2.5   [abcd] 表示一個整體一個筐,這個筐里面有4個情況 表示

       查找文件名稱包含a的 或者包含b的 或者包含c的....

       查找當前目錄下所有包含1234的文件

  

[root@oldboyedu-lnb 20200118]# ll stu[1234].log
-rw-r--r-- 1 root root 0 Aug  5 10:07 stu1.log
-rw-r--r-- 1 root root 0 Aug  5 10:07 stu2.log
-rw-r--r-- 1 root root 0 Aug  5 10:07 stu3.log
-rw-r--r-- 1 root root 0 Aug  5 10:07 stu4.log
[root@oldboyedu-lnb 20200118]# ll stu[1-4].log
-rw-r--r-- 1 root root 0 Aug  5 10:07 stu1.log
-rw-r--r-- 1 root root 0 Aug  5 10:07 stu2.log
[root@oldboyedu-lnb 20200118]# ll stu?[0123456789].txt
-rw-r--r-- 1 root root 0 Aug  5 10:04 stu00.txt
-rw-r--r-- 1 root root 0 Aug  5 10:04 stu01.txt
[root@oldboyedu-lnb 20200118]# ll stu[01][0123456789].txt
-rw-r--r-- 1 root root 0 Aug  5 10:04 stu00.txt
-rw-r--r-- 1 root root 0 Aug  5 10:04 stu01.txt
[root@oldboyedu-lnb 20200118]# ls stu0[0-3]
ls: cannot access stu0[0-3]: No such file or directory
[root@oldboyedu-lnb 20200118]# ls stu0[0-3]*
stu00.txt  stu01.txt  stu02.txt  stu03.txt
[root@oldboyedu-lnb 20200118]# ll stu0[0-3]*
-rw-r--r-- 1 root root 0 Aug  5 10:04 stu00.txt
-rw-r--r-- 1 root root 0 Aug  5 10:04 stu01.txt
-rw-r--r-- 1 root root 0 Aug  5 10:04 stu02.txt
-rw-r--r-- 1 root root 0 Aug  5 10:04 stu03.txt

2.6  找出文件以s或o開頭。

[root@oldboyedu-lnb 20200118]# ll s*
-rw-r--r-- 1 root root 0 Aug  5 10:04 stu00.txt
[root@oldboyedu-lnb 20200118]# ll o*
-rw-r--r-- 1 root root 0 Aug  5 10:04 oldboy00.log

2.7  {}生成序列(一連串的文本)#cp A{B,C}                                                      

[root@oldboy local]# echo {0..9} 
復制所有的.tar.gz 和.txt 結尾的文件到家目錄下
[root@oldboyedu-lnb 20200118]# echo {*.tar.gz,*.txt}
all.tar.gz 1.txt lidao-oldboy.txt oldboy.txt stu00.txt stu01.txt stu02.txt stu03.txt 
stu04.txt stu05.txt stu06.txt stu07.txt stu08.txt stu09.txt stu10.txt stu.txt [root@oldboyedu-lnb 20200118]# ll ~ total 0 drwxr-xr-x 2 root root 6 Aug 5 10:48 alex drwxr-xr-x 2 root root 54 Aug 5 10:49 test [root@oldboyedu-lnb 20200118]# cp {*.tar.gz,*.txt} ~ [root@oldboyedu-lnb 20200118]# #輸出stu01..10 oldboy01..10 alex01..10 [root@oldboyedu-lnb 20200118]# echo {stu,oldboy,alex}{01..10} stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10 oldboy01 oldboy02 oldboy03 oldboy04 oldboy05 oldboy06 oldboy07 oldboy08 oldboy09
oldboy10 alex01 alex02 alex03 alex04 alex05 alex06 alex07 alex08 alex09 alex10

2.8  [!abcd] ! ^表示非

[root@oldboyedu-lnb 20200118]# ll stu0[!0-8].txt
-rw-r--r-- 1 root root 0 Aug  5 10:04 stu09.txt
[root@oldboyedu-lnb 20200118]# ll stu[1-5].txt
ls: cannot access stu[1-5].txt: No such file or directory
[root@oldboyedu-lnb 20200118]# ll stu[1-5].log
-rw-r--r-- 1 root root 0 Aug  5 10:07 stu1.log
-rw-r--r-- 1 root root 0 Aug  5 10:07 stu2.log
-rw-r--r-- 1 root root 0 Aug  5 10:07 stu3.log
-rw-r--r-- 1 root root 0 Aug  5 10:07 stu4.log
-rw-r--r-- 1 root root 0 Aug  5 10:07 stu5.log
[root@oldboyedu-lnb 20200118]# ll stu[!1-5].log
ls: cannot access stu[!1-5].log: No such file or directory
[root@oldboyedu-lnb 20200118]# ll stu[!1-4].log
-rw-r--r-- 1 root root 0 Aug  5 10:07 stu5.log

  2.8.1    對中擴號內的包含s或t或u的進行取反

[root@oldboyedu-lnb 20200118]# ll [!stu]*.txt
-rw-r--r-- 1 root root 19 Aug  5 10:27 1.txt
-rw-r--r-- 1 root root  0 Aug  5 10:16 lidao-oldboy.tx
-rw-r--r-- 1 root root  0 Aug  5 10:16 oldboy.txt
[root@oldboyedu-lnb 20200118]# touch s.txt tttt.txt
[root@oldboyedu-lnb 20200118]# ll [!stu]*.txt
-rw-r--r-- 1 root root 19 Aug  5 10:27 1.txt
 -rw-r--r-- 1 root root  0 Aug  5 10:16 lidao-oldboy.txt
-rw-r--r-- 1 root root  0 Aug  5 10:16 oldboy.txt
[root@oldboyedu-lnb 20200118]# ll stu0[^0-8].txt
-rw-r--r-- 1 root root 0 Aug  5 10:04 stu09.txt     

  2.8.2    [^^] 第一個代表取反 第二個普通字符

[root@oldboyedu-lnb 20200118]# ll stu0[^0-8].txt
-rw-r--r-- 1 root root 0 Aug  5 10:04 stu09.txt
-rw-r--r-- 1 root root 0 Aug  5 11:05 stu0^.txt
[root@oldboyedu-lnb 20200118]# ll stu0[^^0-8].txt
-rw-r--r-- 1 root root 0 Aug  5 10:04 stu09.txt

2.9  []和{}的區別

          常用的:

          ()小括號 正則中表示一個整體

          []中括號

          {}大括號(花括號)

        a) 都可以查看文件名

        b) {}可以生產序列

        c) [] 不能生產序列

使用{}序列的方式查看文件名   {} 是..表示區間序列 [] 是 - 表示區間序列

    [root@oldboyedu-lnb 20200118]# ll stu0{0..9}*

    -rw-r--r-- 1 root root 0 Aug  5 10:04 stu00.txt

    -rw-r--r-- 1 root root 0 Aug  5 10:04 stu01.txt

    -rw-r--r-- 1 root root 0 Aug  5 10:04 stu02.txt

    [root@oldboyedu-lnb 20200118]# ll stu0[0-9]*

    -rw-r--r-- 1 root root 0 Aug  5 10:04 stu00.txt

    -rw-r--r-- 1 root root 0 Aug  5 10:04 stu01.txt

           .   當前的目錄

           ..  上一級目錄

        .file 隱藏文件  點和文件中間沒有空格

        > === 1>   接收正確的輸出結果 到空 到文本中

       >> ===2 >> 追加

             2>   錯誤的輸出結果 先清空

            2>>  錯誤的輸出結果 追加

           <    tr

         <<   cat

       把結果定向到空

         >1.txt 2>&1

         >1.txt 2>1.txt

        &>1.txt

 

   [root@oldboyedu-lnb 20200118]# cat >>oldboy.txt<<EOF

    > oldboy

    > oldgirl

    > EOF

    [root@oldboyedu-lnb 20200118]# cat oldboy.txt

    oldboy

    oldgirl

2.10  $ 調用變量  大部分命令都可以直接調用變量 而不需要先echo(mkdir  /$dir)

    

[root@oldboyedu-lnb 20200118]# echo $PS1
[\u@\h \W]\$
[root@oldboyedu-lnb 20200118]# echo $LANG
en_US.UTF-8
[root@oldboyedu-lnb 20200118]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@oldboyedu-lnb 20200118]# echo test
 test
[root@oldboyedu-lnb 20200118]# dir=test
[root@oldboyedu-lnb 20200118]# touch $dir
[root@oldboyedu-lnb 20200118]# ll test
 -rw-r--r-- 1 root root 0 Aug  5 11:37 test

第3章       特殊符號的應用

 

通配符

含義

*

代表任意(0個或多個)字符。ls file*

?

代表任意1個字符。ls file0?

[abcd]

匹配中括號中任意一個字符。ls file0[678] ls file0[0-9]

[root@oldboyedu ~]# ls file0[^67]   ==>^尖角號  非,取反

file08  file09

{}

中間為命令區塊組合或內容生成序列

[root@oldboyedu local]# echo {0..9}

0 1 2 3 4 5 6 7 8 9

[root@oldboyedu local]# echo {0,9}

0 9

[root@oldboyedu local]# echo {1,2,3}

1 2 3

[root@oldboyedu local]# echo {a..z}

a b c d e f g h i j k l m n o p q r s t u v w x y z

特殊符號

含義

; 分號

連續不同命令的分隔符

[root@oldboyedu tmp]# cd /;mkdir test

[root@oldboyedu /]# ll -h test

總用量 0

#

配置文件注釋

|

管道, 將前一個命令的結果交給后一命令繼續處理

[root@oldboyedu ~]# cat test.txt |xargs -n 3

1 2 3

4 5 6

7 8 9

10 11

~

cd ~ 當前用戶的家目錄

-

cd - 用戶上一次所在的目錄,由變量OLDPWD控制

[root@oldboyedu data]# env|grep -i old

OLDPWD=/root

su - 切換用戶的系統環境

..

上一級目錄

.

當前目錄

當前目錄的三種寫法

#不加路徑===當前路徑

[root@oldboyedu data]# ls

dir2  dir3  ett.txt  file3.txt  file5.txt  hello.txt  oldboy.txt 

#

[root@oldboyedu data]# ls .

dir2  dir3  ett.txt  file3.txt  file5.txt  hello.txt  oldboy.txt 

[root@oldboyedu data]# ls ./

dir2  dir3  ett.txt  file3.txt  file5.txt  hello.txt  oldboy.txt 

[root@oldboyedu data]#

$

①變量前需要加的符號  $OLDPWD

②普通用戶的命令提示符  [oldboy@oldboyedu ~]$

/

①根

②路徑分隔符號. windows是反斜線 "\"

\

①屏蔽系統別名

②轉義 echo "$OLDPWD "  echo "\$OLDPWD "

[root@oldboyedu tmp]# echo "$OLDPWD "

/root

[root@oldboyedu tmp]# echo "\$OLDPWD "

$OLDPWD

>

輸出重定向

>>

追加輸出重定向

輸入重定向

<< 

追加輸入重定向

' '

單引號,不具有變量置換功能,輸出時所見即所得

" "

雙引號,具有變量置換功能,解析變量輸出

` `

倒引號,``中間是命令,會先執行,等價$()

!

①邏輯運算中的“非”(not)

②vi/vim 強制退出

③!+字母 調出最近一次以此字母開頭的命令

!!  使用最近一次操作的命令

!+數字 調出歷史的第幾條命令

&&

當前一個指令執行成功時,執行后一個指令

[root@oldboyedu tmp]# tou test1&& touch test2

-bash: tou: command not found

[root@oldboyedu tmp]# ls

data  oldboy  passwd  services.log

[root@oldboyedu tmp]# tou test1;touch test2  

-bash: tou: command not found

[root@oldboyedu tmp]# ls

data  oldboy  passwd  services.log  test2

||

當前一個指令執行失敗時,執行后一個指令

[root@oldboyedu tmp]# tou test1||touch test3  

-bash: tou: command not found

[root@oldboyedu tmp]# ls

data  oldboy  passwd  services.log  test2  test3

 

' ' 單引號所見即所得 不會解析變量的內容

"" 雙引號和不加引號 都會解析變量的內容

`` 反引號引用命令的結果 $() 里面必須是可執行命令

;  分號分隔多個命令,沒有邏輯聯系 只是一步一步執行  find中的分號是結尾的意思 \;     

[root@oldboyedu-lnb 20200118]# ll `which cat`
-rwxr-xr-x. 1 root root 54080 Apr 11  2018 /usr/sbin/cat
[root@oldboyedu-lnb 20200118]# ll $(which cat)
-rwxr-xr-x. 1 root root 54080 Apr 11  2018 /usr/sbin/cat
[root@oldboyedu-lnb 20200118]# time=`date +%F`
[root@oldboyedu-lnb 20200118]#
[root@oldboyedu-lnb 20200118]# echo $time
2020-08-05
[root@oldboyedu-lnb 20200118]#
[root@oldboyedu-lnb 20200118]# test="$time-alex"
[root@oldboyedu-lnb 20200118]# echo $test
 2020-08-05-alex
[root@oldboyedu-lnb 20200118]# test='$time-alex'
[root@oldboyedu-lnb 20200118]# echo $test
$time-alex
[root@oldboyedu-lnb 20200118]#  echo '$LANG $(which mkdir)  {a..z}'
$LANG $(which mkdir)  {a..z}
[root@oldboyedu-lnb 20200118]#  echo "$LANG $(which mkdir)  {a..z}"
en_US.UTF-8 /usr/bin/mkdir  {a..z}
[root@oldboyedu-lnb 20200118]#  echo $LANG $(which mkdir)  {a..z}
en_US.UTF-8 /usr/bin/mkdir a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@oldboyedu-lnb 20200118]# ll "stu*.txt"
-rw-r--r-- 1 root root 0 Aug  5 11:54 stu*.txt
PS:通配符不支持雙引號在find中支持

      

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM