命令alias、gerp、find及基礎Shell腳本

来源:https://www.cnblogs.com/gx22/archive/2018/12/02/10053037.html
-Advertisement-
Play Games

一、 alias 命令:系統設置命令別名 用法:alias [-p] [name[=value] ... ] 註意‘=’和字元串之間不能包含空格 顯示當前設置的別名:alias 或 alias –p 1 [root@localhost ~]# alias 2 3 alias cp='cp -i' 4 ...


一、 alias 命令:系統設置命令別名

用法:alias [-p] [name[=value] ... ]    註意‘=’和字元串之間不能包含空格

 

顯示當前設置的別名:alias 或 alias –p

 1 [root@localhost ~]# alias
 2 
 3 alias cp='cp -i'
 4 
 5 alias egrep='egrep --color=auto'
 6 
 7 alias fgrep='fgrep --color=auto'
 8 
 9 alias grep='grep --color=auto'
10 
11 alias l.='ls -d .* --color=auto'
12 
13 alias ll='ls -l --color=auto'
14 
15 alias ls='ls --color=auto'
16 
17 alias mv='mv -i'
18 
19 alias rm='rm -i'
20 
21 alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
22 
23 [root@localhost ~]# alias -p
24 
25 alias cp='cp -i'
26 
27 alias egrep='egrep --color=auto'
28 
29 alias fgrep='fgrep --color=auto'
30 
31 alias grep='grep --color=auto'
32 
33 alias l.='ls -d .* --color=auto'
34 
35 alias ll='ls -l --color=auto'
36 
37 alias ls='ls --color=auto'
38 
39 alias mv='mv -i'
40 
41 alias rm='rm -i'
42 
43 alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

 

 

 

若只想顯示某個別名代表的含義可輸入alias name,比如:

1 [root@localhost ~]# alias ls
2 
3 alias ls='ls --color=auto'

 

 

若想為某個命令設置別名可輸入 alias 新命令='原命令 選項/參數',比如:

[root@localhost ~]# alias lftps='lftp 172.168.0.1/pub'

[root@localhost ~]# alias lftps

alias lftps='lftp 172.168.0.1/pub'

 

 

別名永久化:
alias的作用僅在該次登入的操作,即輸入一次alias後,這個修改只在當前的Shell生效。如果重新開啟一個 Shell,或者重新登錄,則這些alias將無法使用。好在linux中提供alias永久化的方法:
<1>.若要每次登入就自動生效別名,則把別名加在/etc/profile或~/.bashrc中。然後# source ~/.bashrc

[root@localhost ~]# cat .bashrc

# .bashrc

 

# User specific aliases and functions

 

alias rm='rm -i'

alias cp='cp -i'

alias mv='mv -i'

alias lftps='172.168.0.1/pub'

 

# Source global definitions

if [ -f /etc/bashrc ]; then

      . /etc/bashrc

fi

[root@localhost ~]# source ~/.bashrc

[root@localhost ~]# lftps

-bash: 172.168.0.1/pub: No such file or directory

 


<2>.若要讓每一位用戶都生效別名,則把別名加在/etc/bashrc最後面,然後# source /etc/bashrc

 

若想取消某個別名可輸入unalias name,比如

unalias  lftps

 

 

 

二、文本處理工具grep:

    Linux上文本處理三劍客:

        grep, egrep, fgrep:文本過濾工具(模式:pattern)工具;

            grep:基本正則表達式,-E,-F

            egrep:擴展正則表達式, -G,-F

            fgrep:不支持正則表達式,

        sed:stream editor, 流編輯器;文本編輯工具;

        awk:Linux上的實現為gawk,文本報告生成器(格式化文本);

       

概念:正則表達式(Regual Expression, REGEXP):由一類特殊字元及文本字元所編寫的模式,其中有些字元不表示其字面意義,而是用於表示控制或通配的功能;

分類:正則表達式分兩類:

基本正則表達式:BRE     

擴展正則表達式:ERE

元字元:\(hello[[:space:]]\+\)\+

           

grep(Global search REgular expression and Print out the line):.

        作用:文本搜索工具,根據用戶指定的“模式(過濾條件)”對目標文本逐行進行匹配檢查;列印匹配到的行;    

        模式:由正則表達式的元字元及文本字元所編寫出的過濾條件;

       

正則表達式引擎;

        用法1:grep  [OPTIONS]  PATTERN  [FILE...]

實例:

[root@localhost ~]# grep "UID" /etc/fstab

UUID=86f402f4-53d3-44d5-be0f-7b83897744d9 /                       ext4    defaults        1 1

UUID=50ad8124-e08c-4e0f-8788-6529804755f4 /boot                   ext4    defaults        1 2

 

        用法2:grep  [OPTIONS]  [-e PATTERN | -f FILE]  [FILE...]

        參數OPTIONS:

                --color=auto:對匹配到的文本著色後高亮顯示;

                -i:ignorecase,忽略字元的大小寫;

                -o:僅顯示匹配到的字元串本身;

                -v, --invert-match:顯示不能被模式匹配到的行;

                -E:支持使用擴展的正則表達式元字元;

                -q, --quiet, --silent:靜默模式,即不輸出任何信息;

               

                -A #:after, 後#行

                -B #:before,前#行

                -C #:context,前後各#行

               

        基本正則表達式元字元:

                字元匹配:

                   . :匹配任意單個字元;

                   []:匹配指定範圍內的任意單個字元;

                   [^]:匹配指定範圍外的任意單個字元;

                       [:digit:]:所有數字 [0-9]

[:lower:]:所有小寫字母 [a-z]

[:upper:]:所有大寫字母 [A-Z]

[:alpha:]:所有字母 [a-zA-Z]

[:alnum:]:所有字母和數字 [0-9a-zA-Z]

[:punct:]:所有標點符號

[:space:]:所有空白字元 空格後tab

 

                      

                匹配次數:用在要指定其出現的次數的字元的後面,用於限制其前面字元出現的次數;預設工作於貪婪模式;

                   *:匹配其前面的字元任意次;0,1,多次;

                   .*:匹配任意長度的任意字元

                   \?:匹配其前面的字元0次或1次;即其前面的字元是可有可無的;

                   \+:匹配其前面的字元1次或多次;即其面的字元要出現至少1次;

                   \{m\}:匹配其前面的字元m次;

                   \{m,n\}:匹配其前面的字元至少m次,至多n次;

                       \{0,n\}:至多n次

                       \{m,\}:至少m次

                   

                位置錨定:

                   ^:行首錨定;用於模式的最左側;

                   $:行尾錨定;用於模式的最右側;

                   ^PATTERN$:用於PATTERN來匹配整行;

                       ^$:空白行;

                       ^[[:space:]]*$:空行或包含空白字元的行;

 

 

                  

                   單詞:非特殊字元組成的連續字元(字元串)都稱為單詞;

                  

                   \< 或 \b:詞首錨定,用於單詞模式的左側;

                   \> 或 \b:詞尾錨定,用於單詞模式的右側;

                   \<PATTERN\>:匹配完整單詞;

               

分組及引用

                   \(\):將一個或多個字元捆綁在一起,當作一個整體進行處理;

                       \(xy\)*ab

                      

                   Note:分組括弧中的模式匹配 到的內容會被正則表達式引擎自動記錄於內部的變數中,這些變數為:

                       \1:模式從左側起,第一個左括弧以及與之匹配的右括弧之間的模式所匹配到的字元;

                       \2:模式從左側起,第二個左括弧以及與之匹配的右括弧之間的模式所匹配到的字元;

                       \3

                  

後向引用:引用前面的分組括弧中的模式所匹配到的字元;

 

           

    egrep:

       

        支持擴展的正則表達式實現類似於grep文本過濾功能;grep -E

       

        egrep [OPTIONS] PATTERN [FILE...]

            選項:

                -i, -o, -v, -q, -A, -B, -C

                -G:支持基本正則表達式

                 

            擴展正則表達式的元字元:

                字元匹配:

                   .:任意單個字元

                   []:指定範圍內的任意單個字元

                   [^]:指定範圍外的任意單個字元

                      

                次數匹配:

                   *:任意次,0,1或多次;

                   ?:0次或1次,其前的字元是可有可無的;

                   +:其前字元至少1次;

                   {m}:其前的字元m次;

                   {m,n}:至少m次,至多n次;

                       {0,n}

                       {m,}

                位置錨定

                   ^:行首錨定;

                   $:行尾錨定;

                   \<, \b:詞首錨定;

                   \>, \b:詞尾錨定;

                分組及引用:

                   ():分組;括弧內的模式匹配到的字元會被記錄於正則表達式引擎的內部變數中;

                   後向引用:\1, \2, ...

                或:

                   a|b:a或者b;

                       C|cat:C或cat

                       (c|C)at:cat或Cat

                      

       

    fgrep:不支持正則表達式元字元;

        當無需要用到元字元去編寫模式時,使用fgrep必能更好;

       

作業題;

顯示/etc/passwd文件中不以/bin/bash結尾的行;

 [root@localhost ~]# grep -v "/bin/bash$" /etc/passwd

               

找出/etc/passwd文件中的兩位數或三位數;

[root@localhost ~]# grep "\<[0-9]\{2,3\}\>" /etc/passwd      

                  

找出/proc/meminfo文件中,所有以大寫或小寫S開頭的行;至少有三種實現方式;

[root@localhost ~]# grep -i "^s" /proc/meminfo

[root@localhost ~]# grep "^[sS]" /proc/meminfo

[root@localhost ~]# grep -E "^(s|S)" /proc/meminfo

                                  

使用echo命令輸出一絕對路徑,使用egrep取出其路徑名,類似執行dirname /etc/passwd的結果

[root@localhost ~]# echo /etc/sysconfig/ | grep -E -o "[^/]+/?$"                                   

                               

找出ifconfig中的IP地址,要求結果只顯示IP地址

[root@localhost ~]# ifconfig |egrep -o "(([0-9]|[1-9]|[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9]|[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"

 

Vim定製自動縮進四個字元

步驟:1、打開/etc/vimrc文件

2.在末尾加入 set ts=4

 

三、編寫shell腳本,實現自動添加三個用戶,並計算這三個用戶的uid之和

[root@localhost ~]# vim userAdd.sh

 

#!/biin/bash

#date      2018/12/2

#author    gongxu

#miaoshu   添加三個用戶,並計算這三個用戶的uid之和

 

if [ $# -lt 3 ];then

   echo "at less input three username"

   exit 5

fi

 

if grep "^$1\>" /etc/passwd &> /dev/null;then

   echo "$1 exist"

exit 1

else

   useradd $1

   echo $1 | passwd --stdin $1 &> /dev/null

   echo "$1 add finished"

fi

 

 

if grep "^$2\>" /etc/passwd &> /dev/null;then

   echo "$2 exist"

exit 2

else

   useradd $2

   echo $2 | passwd --stdin $2 &> /dev/null

   echo "$2 add finished"

fi

 

if grep "^$3\>" /etc/passwd &> /dev/null;then

   echo "$3 exist"  

exit 3

else

   useradd $3

   echo $3 | passwd --stdin $3 &> /dev/null

   echo "$3 add finished"

fi

 

id1=$(grep "^$1" /etc/passwd | cut -d : -f 3)

id2=$(grep "^$2" /etc/passwd | cut -d : -f 3)

id3=$(grep "^$3" /etc/passwd | cut -d : -f 3)

id4=$[id1+id2+id3]

echo "user: $1,$2,$3 uid sum=$id4"

 

 

四、find用法及其常用的實例演示

find命令作用:實時查找工具,通過遍歷指定起始路徑下文件系統層級結構完成文件查找;

find命令的工作特性:

            查找速度略慢;

            精確查找;

            實時查找;

用法:find [OPTIONS]  [查找起始路徑]  [查找條件]  [處理動作]

查找起始路徑:指定具體搜索目標起始路徑;預設為當前目錄;

查找條件:指定的查找標準,可以根據文件名、大小、類型、從屬關係、許可權等等標準進行;預設為找出指定路徑下的所有文件;

處理動作:對符合查找條件的文件做出的操作,例如刪除等操作;預設為輸出至標準輸出;

        查找條件:表達式:選項和測試

測試:結果通常為布爾型("true", "false")

                  

根據文件名查找:

                       -name  "pattern"

                       -iname "pattern"

                           支持glob風格的通配符;

                               *, ?, [], [^]

                              

                       -regex pattern:基於正則表達式模式查找文件,匹配是整個路徑,而非其名;

                      

                   根據文件從屬關係查找:

                       -user USERNAME:查找屬主指定用戶的所有文件;

                       -group GRPNAME:查找屬組指定組的所有文件;

                      

                       -uid UID:查找屬主指定的UID的所有文件;

                       -gid GID:查找屬組指定的GID的所有文件;

                      

                       -nouser:查找沒有屬主的文件;

                       -nogroup:查找沒有屬組的文件;

                      

                   根據文件的類型查找:

例:find /etc -size +1M -type f –ls    #-type 後表示文件類型的不需要在加 -,只有是find的參數才加 -

                       -type TYPE:

                           f: 普通文件

                           d: 目錄文件

                           l:符號鏈接文件

                           b:塊設備 文件

                           c:字元設備文件

                           p:管道文件

                           s:套接字文件

                          

                   組合測試:

                       與:-a, 預設組合邏輯;

                       或:-o

                       非:-not, !

                      

實例:

1、 找出/tmp目錄下屬主為非root的所有文件;

[root@localhost ~]# find /tmp -not -user root -ls

2、 找出/tmp目錄下文件名中不包含fstab字元串的文件;

[root@localhost ~]# find /tmp -not -name "*fstab*" -ls

 3、找出/tmp目錄下屬主為非root,而且文件名不包含fstab字元串的文件;                      

[root@localhost ~]# find /tmp -not -user root -a -not -iname "*fstab*" -ls

或保留一個 -not,使用括弧:

[root@localhost ~]# find /tmp -not \( -user root -o -not -iname "*fstab*" \) –ls

                   根據文件的大小查找:

                       -size [+|-]#UNIT

                           Unit的常用單位:k, M, G

                          

                           #UNIT:(#-1, #]

                           -#UNIT:[0,#-1]

                           +#UNIT:(#, oo)

                          

                   根據時間戳查找:

                       以“天”為單位:

                           -atime  [+|-]#

                               #:[#, #-1)

                               -#:(#, 0]

                               +#:(oo, #-1]

                           -mtime

                           -ctime

                          

                       以“分鐘”為單位:

                           -amin

                           -mmin

                           -cmin

                          

                   根據許可權查找:

                       -perm  [/|-]mode

                           mode:精確許可權匹配;  例:find /tmp –perm 664

                           /mode:任何一類用戶(u,g,o)的許可權中的任何一位(r,w,x)符合條件即滿足;

                               9位許可權之間存在“或”關係;  例:find /tmp –perm /222 –ls

                           -mode:每一類用戶(u,g,o)的許可權中的每一位(r,w,x)同時符合條件即滿足;

                               9位許可權之間存在“與”關係;

                              

            處理動作:

                -print:輸出至標準輸出;預設的動作;

                -ls:類似於對查找到的文件執行“ls -l”命令,輸出文件的詳細信息;

                -delete:刪除查找到的文件;

                -fls /PATH/TO/SOMEFILE:把查找到的所有文件的長格式信息保存至指定文件中;

                -ok COMMAND {} \;   :對查找到的每個文件執行由COMMAND表示的命令;每次操作都由用戶進行確認;

                  例:find /tmp –nouser –nogroup –ok chown root:root {} \;  #修改沒有用戶和用戶組的文件,然後加上root用戶。

                      註意:{}為查找到的文件名的集合,\; 為固定格式

                -exec COMMAND {} \;  :對查找到的每個文件執行由COMMAND表示的命令;

                   例:find /tmp –perm /002 –exec mv {} {}.danger \;    #修改其他用戶有寫許可權的文件,將其文件名後面加上danger

               

                註意:find傳遞查找到的文件路徑至後面的命令時,是先查找出所有符合條件的文件路徑,並一次性傳遞給後面的命令;

                   但是有些命令不能接受過長的參數,此時命令執行會失敗;另一種方式可規避此問題:

                       find | xargs COMMAND

                                  

實例:

 1、查找/var目錄下屬主為root,且屬組為mail的所有文件或目錄;     

[root@localhost ~]# find /var -user root -a -group mail –ls                

 

2、查找/usr目錄下不屬於root, bin或hadoop的所有文件或目錄;用兩種方法;                   

[root@localhost ~]# find /usr -not -user root -a -not -user bin -a -not -user hadoop
[root@localhost ~]# find /usr -not \( -user root -o -user bin -o -user hadoop \) -ls

         

3、查找/etc目錄下最近一周內其內容修改過,且屬主不是root用戶也不是hadoop用戶的文件或目錄;       

[root@localhost ~]# find /etc -mtime -7 -a -not \( -user root -o -user hadoop \) -ls
[root@localhost ~]# find /etc -mtime -7 -a -not -user root -a -not -user hadoop -ls                

              

4、查找當前系統上沒有屬或屬組,且最近一周內曾被訪問過的文件或目錄;

[root@localhost ~]# find  /  \( -nouser -o -nogroup \)  -atime  -7  -ls

               

5、查找/etc目錄下大於1M且類型為普通文件的所有文件;

[root@localhost ~]# find /etc -size +1M -type f -exec ls -lh {} \;

           

6、查找/etc目錄下所有用戶都沒有寫許可權的文件;       

[root@localhost ~]# find /etc -not -perm /222 -type f -ls  

 

 7、查找/etc目錄至少有一類用戶沒有執行許可權的文件;    

[root@localhost ~]# find /etc -not -perm -111 -type f -ls

                 

8、查找/etc/init.d/目錄下,所有用戶都有執行許可權,且其它用戶有寫許可權的所有文件;         

[root@localhost ~]# find /etc -perm -113 -type f –ls
[root@localhost ~]# find /etc/init.d/ -perm -111 -a -perm /002 -type f -ls 

 

                          

               

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 曾有做過一個產品,有一個功能是視頻監控模塊,視頻監控首先想到的是視頻多畫面切換功能,由於前端是用WPF開發的,所以當時就做了一個多畫面切換組件,效果如下: 功能設計前提: 由於要使用海康大華天地偉業等視頻廠家的視頻,對接的方式是通過各個廠家提供的SDK(官網下載),由於播放視頻的時候需要傳遞控 ...
  • .NET 術語 1. AOT 預編譯器。與 JIT 類似,此編譯器還可將 IL 轉換為機器代碼。 與 JIT 編譯相比,AOT 編譯在應用程式執行前進行並且通常在不同電腦上執行。 由於在運行時 AOT 工具鏈不編譯,因此它們不需要最大程度地減少編譯所花費的時間。 這意味著它們可花更多的時間進行優化 ...
  • 1 .gz 1)壓縮 2)解壓縮: 註意:不能壓縮目錄!支持批量壓縮,源文件被替換成.gz結尾的文件。 2 .bz2 1)壓縮 2)解壓縮: 3)強制壓縮: 註意:不能壓縮目錄!支持批量壓縮,源文件被替換成.bz2結尾的文件。 3 .zip 1)壓縮 2)解壓縮 註意:可以壓縮目錄!支持批量壓縮,源 ...
  • VMware 安裝提示缺少MicrosoftRuntime DLL 問題解決辦法 剛剛安裝VMware失敗了試了好多辦法,在這總結一下。 下麵是程式的截圖 這是報錯信息 網上的解決方法: 當出現安裝失敗的提示時,不要將界面關閉,然後在運行視窗輸入 %temp% 然後會進如文件夾, 在文件夾里找到類似 ...
  • 1. 主機規劃 主機名稱 IP地址 操作系統 部署軟體 運行進程 備註 mini01 172.16.1.11【內網】 10.0.0.11 【外網】 CentOS 7.5 Jdk-8、zookeeper-3.4.5、Hadoop2.7.6、hbase-2.0.2、kafka_2.11-2.0.0、sp ...
  • "參考1 https://computing.llnl.gov/tutorials/pthreads/" "參考2 http://man7.org/linux/man pages/man7/pthreads.7.html" join 阻塞調用線程,直至指定pthread_t線程終止 在同一個線程中重 ...
  • CPU上下文頻繁切換會導致系統性能下降,切換分為進程切換、線程切換及中斷切換,進程切換的開銷較大,除了需要保存寄存器和程式計數器中的值還需保存全局變數、棧等到記憶體中,以便下次運行恢復,而同一進程中的線程切換開銷會小很多,只需更新寄存器和線程獨有的棧,共用資源如打開的文件、全局變數等無需切換,當硬體中... ...
  • [root@lamp02 yum.repos.d]# yum install nfs-utils rpcbind -y Loaded plugins: fastestmirror, securityExisting lock /var/run/yum.pid: another copy is run ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...