grepベースコマンド練習およびFindコマンド詳細

8165 ワード

lftp='lftp 172.168.0.1/pubなど、すべてのユーザーに有効なコマンド別名を定義します。


 /etc/bashrcファイルの下部にalias lftp='lftp 172.168.0.1/pubを1行追加

/etc/passwdファイルの/bin/bashで終わらない行を表示

egrep -v "/bin/bash$" /etc/passwd

/etc/passwdファイルの2桁または3桁の行を見つけます。

grep -E "\" /etc/passwd
grep "\" /etc/passwd

/proc/meminfoファイルの大文字または小文字Sで始まる行を表示します。3つの方法で実現する

grep -i "^s" /proc/meminfo
grep "^[Ss]" /proc/meminfo
grep -E "^(S|s)" /proc/meminfo

echoを使用して絶対パスを出力し、egrepを使用してパス名を取り出します。dirname/etc/passwdを実行した結果と同様です。

echo "/var/log/messages" | egrep -o  "^/[[:alpha:]]+?"

ifconfigのipアドレスを見つけます。要求結果IPアドレスのみ表示

ifconfig | grep "inet " | grep -E "\" |cut -d" " -f10

vimカスタム自動インデント4文字


 修正/etc/vimrcファイル、ファイル下部に次の2行追加
set autoindent
set tabstop=4

スクリプトを作成して3人のユーザーを自動的に追加し、3人のユーザーのuidの和を計算します。

#!/bin/bash
#
id user1 &> /dev/null || useradd user1
echo "user1 id: $(id -u user1)"
id user2 &> /dev/null || useradd user2
echo "user2 id: $(id -u user2)"
id user3 &> /dev/null || useradd user3
echo "user3 id: $(id -u user3)"

user1_id=$(id -u user1)
user2_id=$(id -u user2)
user3_id=$(id -u user3)

id_sum=$[$user1_id+$user2_id+$user3_id]

echo "User id sum: $id_sum"

findコマンド詳細


findはリアルタイム検索ツールで、指定した開始パスの下でファイルシステムの階層構造を遍歴することによってファイル検索
     
        find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
        find [OPTION] [ ] [ ] [ ]
  • 検索パス:特定の検索ターゲットの開始パスを指定します.デフォルトは現在のディレクトリ
  • です.
  • 検索条件:指定された検索基準は、ファイル名、サイズ、タイプ、依存関係、権限などの基準に基づいて行うことができ、デフォルトでは指定されたパスの下にあるすべてのファイル
  • を見つけることができる.
  • 処理動作:検索条件に合致するファイルに対する操作、例えば削除などの操作;デフォルトは標準出力に出力されます.
  • 検索条件とは、検索レベル(デフォルトは再帰検索)-maxdepth levelの最大検索ディレクトリ深度を指し、ディレクトリが第1レベル
    eg:find /etc/ -maxdepth 1 -type f   /etc 
     ( ) iNode 
  • であることを指定します.
  • 精確一致:find-name filename精確filenameファイル
  • ファジイマッチング:find-name「file」ファジイマッチングfileを含むファイル(二重引用符を無視できない)はglobal:*、?をサポートします.[],[^] -iname「ファイル名」大文字と小文字を区別せず -inum#iNode番号で -samefile nameと同じinodeのファイルを検索する
  • ハードリンクを検索するファイル -links nリンク数nのファイル -regex「pattern」は、ファイル名
    eg:find /etc -regex ".*\.conf$"  conf 
  • だけでなく、pattern全体のファイルパス文字列を一致させる.
  • 所有者が指定したユーザであるファイル -group GROUPNAMEを検索する:指定したグループであるファイル -uid userIDを検索する:所有者が指定したUIDであるファイル -gid groupを検索する:指定したGIDであるファイル -nouser usernameを検索する:所有者が指定したUIDでないファイル -gid groupidを検索する所有者なし-nogroup:グループに属していないファイルを検索グループに追加すると、所属するグループは削除され、グループに属していない
    eg:
    find /home -user nike -ls ( )
    find /home -user nike -name "*.sh" -ls ( )
    find /home -nouser -o nogroup (-o )
  • になります.
  • ファイルタイプに基づいて検索: -type TYPE f:一般ファイル d:ディレクトリファイル l:シンボルリンクファイル s:ソケットファイル b:ブロックデバイスファイル c:文字デバイスファイル p:パイプファイル -empty空のファイルまたはディレクトリ
  • find /home -type d -maxdepth 1 ( d  )
    find /home -type d -empty  home ( )
  • 組合せ条件:-aまたは:-o非:-not,!
  • ドイツ.モルガンの法則:(!A)|(!B)=!(A&b)(!A)&(!B)=!(A|B)例:!A -a !B =!(a|B)!A -o !B = !(A&B)
    find /data -empty -not -type f  
    find /data ! -empty -type f  
  • 除外ディレクトリ:
     :
     /etc  , /etc/network .conf 
    find /etc -path "/etc/network" -a -prune -o -name "*.conf"
     /etc  , /etc/network /etc/etc/fonts .conf 
    find /etc \(-path '/etc/network' -a -path '/etc/fonts' \) -a -prune -o -name "*.conf"
  • ファイルサイズに基づいて -size[-|+]#unit共通単位:k、M、G、c(byte)
  • を検索
    find /etc -size 1024c  (1023c,1024c] 
    find /etc -size 1k  (0,1k) 
    -#UNIT:[0,#-1]
     :-6k  [0,5k]
     :
    find /data -size -1024c  [0,1023c]
    find /data -size -1023c  [0,1022c]
    find /data -size -1k  
    +#UNIT:(#,∞)
     :+6k  (6k,∞)
     :
    find /data -size +1024c  (1024c,∞)
    find /data -size +1023c  (1023c,∞)
    find /data -size +1k  (1k,∞)
  • タイムスタンプによると、「日」単位; -atime [+|-]#, #: [#,#+1)

  •  +#: [#+1,∞]
     -#: [0,#) -mtime -ctime
  • 「分」単位: -amin -mmin -cmin
     :
    find /data -atime 4  4 5 ( ) 
    find /data -atime +4  5 
    find /data -atime -4  4 
  • アクセス権に基づいて検索: -perm[/|-]MODE MODE:正確なアクセス権マッチング /MODE:いずれかのクラス(u,g,o)オブジェクトのアクセス権のうち、1人で一致すればよい、または関係、+centos 7から -MODEを淘汰する:各オブジェクトには指定されたアクセス権が同時に持たなければならない.find-perm+222は、誰もが書く権限を持っている場合にのみ一致します.find-perm-222は、他の人(other)が書く権限を持っている場合にのみ一致します.find-perm-002は
  • に一致します.
  • 処理動作 -print:デフォルトの処理動作、画面 -lsに表示:検索したファイルに対して「ls-l」を実行するのと同様コマンド find-perm+222-ls検索したファイル情報 -delete:検索したファイル find-perm+222-deleteを削除検索したコンテンツを直接削除するプロンプト -fls file:検索したすべてのファイルのロングフォーマット情報を指定したファイルに保存する
    find -perm +222 -ls > /root/find.log
    find -perm +222 -fls /root/find2.log
    以上の2つの方法で、検索したファイルのロングフォーマットコンテンツをファイルにリダイレクトできます
  •  -ok COMMAND {}\; 検索された各ファイルに対してCOMMANDで指定されたコマンドを実行し、各ファイルに対してコマンドを実行する前に、ユーザーに確認をインタラクティブに要求します.
    削除するときにヒントが必要です
    find -name "*f*" -ok rm {} \;

    直接一括削除プロンプトなし
    find -name "*f*" -exec rm {} \;

    検索した内容を/mnt/にカット
    find -name "*f*" -exec mv {} /mnt/ \;

    「一括」コマンド
    find -name "*f*" -exec mv {} {}.bak \;

     -exec COMMAND {}\; 検索した各ファイルに対してCOMMANDで指定されたコマンドを実行し、{}:検索したファイル名自身findを参照して検索したファイルを後で指定したコマンドに渡す場合、条件に合致するすべてのファイルを検索して一括して後のコマンドに渡す
    find練習とプレゼンテーション:1、検索/varディレクトリの部下はrootであり、グループはmailのすべてのファイルまたはディレクトリである.
    find /var -user root -a -group mail -ls

    2、検索/usrディレクトリの下でroot、binまたはhadoopに属していないすべてのファイルまたはディレクトリを検索します.2つの方法で;
    find /usr -not -user root -a -not -user bin -a -not -user hadoop
    find /usr -not \( -user root -o -user bin -o -user hadoop \) -ls

    3、検索/etcディレクトリは次の1週間以内に内容が変更され、所有者はrootユーザーでもhadoopユーザーでもないファイルまたはディレクトリである.
    find /etc -mtime -7 -a -not \( -user root -o -user hadoop \) -ls
    find /etc -mtime -7 -a -not -user root -a -not -user hadoop -ls

    4、現在のシステム上にグループに属していないか、グループに属していないか、最近1週間以内にアクセスされたファイルまたはディレクトリを検索する.
    find  /  \( -nouser -o -nogroup \)  -atime  -7  -ls

    5、検索/etcディレクトリの下で1 Mより大きく、タイプが普通のファイルのすべてのファイルを検索する.
    find /etc -size +1M -type f -exec ls -lh {} \;

    6、検索/etcディレクトリの下のすべてのユーザーが書く権限のないファイルを検索する.
    find /etc -not -perm /222 -type f -ls                    

    7、検索/etcディレクトリには少なくとも1種類のユーザーが実行権限のないファイルがある.
    find /etc -not -perm -111 -type f -ls

    8、検索/etc/init.d/ディレクトリの下で、すべてのユーザーに実行権限があり、他のユーザーには書き込み権限のあるすべてのファイルがあります.
    find /etc -perm -113 -type f -ls

    9、正確な一致/etcディレクトリの下でvimrcというファイル
    find /etc -name(-iname  ) vimrc

    10.logファイル名を含むファイルを検索する
     find /var -name "*log"

    11.所有者がJonであり、所属グループがNikeであるファイルを検索する
     find -user Jon -group Nike

    12.所有者がJonであり、グループがJonでないファイルを検索する
    find -user jon -not -group jon 

    13、所有者がJonでもNikeでもないファイルを探す
     find -not \(-user jon -o -user nike \)

    14.所有者がJonまたはUIDが5002であるファイルの検索
    find -user Jon -o -gid 5002

    15、/tmpディレクトリの部下がrootではなく、ファイル名がfで始まるファイルを探し出す
    find /tmp -not \( -user root -o -name "f*" \) -ls

    16.プロファイルをバックアップし、追加する.origという拡張子
    find -name “*.conf” -exec cp {} {}.orig \;

    17、存在時間が3日以上のjoeの一時ファイルの削除を求める
    find /tmp -ctime +3 -user joe -ok rm {} \;

    18.ホームディレクトリにおいて他のユーザによって書き込み可能なファイルを探す
    find ~ -perm -002 -exec chmod o-w {} \;

    19、検索/dataの下の権限は644、接尾辞はshの普通のファイルで、実行権限を増加する
    find /data –type f -perm 644 -name “*.sh” –exec chmod 755 {} \;

    20、/homeの目次を見る
    find /home –type d -ls