+ 0 || 1 = 1
|| 0 = 0
1 = 0 そして、:
最初のものは 0、結果は 0 である必要があります。
最初のものは 1、2 つ目は操作に参加する必要があります。
最初のものは 1 、結果は 1 です。 1 でなければなりません;
最初のものは 0、2 番目のものは操作に参加する必要があります
Linux 上のテキスト処理の三銃士
grep: テキスト フィルタリング (モード) : パターン) ツール;
grep、egrep、fgrep
sed: ストリーム エディター、テキスト編集ツール: グローバル検索正規表現と行の出力
機能: テキスト検索ツール。ユーザーが指定した「パターン」に従ってターゲットテキストを 1 行ずつチェックし、一致した行を出力します。正規表現文字とテキスト文字で記述されたフィルター条件。
REGEXP: 特殊文字とテキスト文字の種類で記述されたパターン。その一部は文字の文字通りの意味を表さず、制御またはワイルドカード関数を表します。
は 2 つのカテゴリに分類されます:
基本正規表現: BRE
拡張正規表現: ERE
grep -E、egrep
正規表現エンジン grep [OPTIONS] PATTERN [FILE...]
オプション:
--color=auto: 一致したテキストに色を付けます。
-v: 一致する行を表示しません。パターン;
-i: 大文字と小文字を無視します。 -o: 一致した文字列のみを表示します。
-A #: 後、 # 行後
-B #: 前、# 行前
-C #: コンテキスト、# 行前後
-E: ERE を使用します。正規表現メタ文字:
文字の一致:
.: 任意の 1 文字と一致します。
[]: 指定された範囲内の任意の 1 文字と一致します [^]: 範囲外の任意の 1 文字と一致します指定範囲
[:digit:], [: lower:], [:upper:], [:alpha:], [:alnum:], [: punct:], [:space:]
一致回数: 指定する文字の後に何度も使用され、前の文字が出現する回数を指定するために使用されます。
*: 前の文字と一致する回数。
例: grep "x*y"
abxy
xay
xxxxxxy
貪欲モード
.*: 任意の長さの任意の文字 ;
?: 前の文字と 0 回または 1 回一致します。つまり、前の文字はオプションです。
+: 前の文字と少なくとも 1 回一致します。{m}: 前の文字と m 回一致します。
{m,n}: 前の文字と少なくとも m 回、最大で n 回一致します。前の文字
{m,}: 前の文字と少なくとも m 回一致します:
^: 行の先頭に使用されます。パターンの末尾アンカー;
$: 行全体のパターン一致に使用されます。 line;
^[ [:space:]]*$
< or b: 単語パターンの左側に使用されます。 : 単語パターンに使用される単語末尾のアンカー;
(): 1 つ以上の文字を束ねるそれらを全体として処理します。
(xy)*ab
注: グループ化括弧内のパターンと一致する内容は、正規表現エンジンによってこれらの変数の名前が記録されます。は: 1、2、3、...
1: 左から順に、最初の左括弧と一致する右括弧の間のパターンと一致する文字
(ab+(xy)*) :
1: ab+(xy)*
2: xy
後方参照: 前のグループ化括弧内のパターンと一致する文字を参照します (パターン自体ではありません)
ユーザー root が存在し、そのデフォルトのシェル プログラムが表示される場合;
# id root &> /dev/null && grep "^root>"
/etc/passwd の 2 桁または 3 桁を調べます
# grep "<[0-9]{2,3}>/etc/passwd
show /etc /rc .d/rc.sysinit ファイルでは、少なくとも 1 つの空白文字で始まり、空白以外の文字が続く行は
# grep "^[[:space:]]+[^[:space: ]]" /etc/grub2.cfg
「netstat -tan」コマンドの結果で、「LISTEN」で終わり、その後に 0、1 つ以上の空白文字が続く行を見つけます;
# netstat -tan | grep "LISTEN[[:space:]]*$"
ユーザー bash、testbash、basher および nologin を追加し、/ でユーザー名を見つけます。同じシェル名行の etc/passwd ファイル
grep "^([[:alnum:]]+>).*1$" /etc/passwd
実装するスクリプトを作成します。次の関数
If user1 が存在する場合はその存在が表示され、そうでない場合は追加されます。
#!/bin/ bash
iduser1 && gt /&& "estistes
egrep [オプション] パターン [ファイル...]
拡張正規表現のメタ文字:
文字の一致:
.
[]
[^]一致数:
*?:+:1回以上;
{m,n} : 少なくとも m、最大 n 回。
アンカー:
^
$
<, b
>, b
グループ:
()
戻る参照: 1、2、...
または:
a|b
C|cat: C または cat
1. 現在のシステムのルート、centos、またはuser1 ユーザーのデフォルトのシェルと UID;
# grep -E '^(root|centos|user1)>' /etc/passwd: -f1,3,7
2 、 /etc/rc.d/init.d/functions ファイル (centos6) 内で、単語の後に括弧が続く行を見つけます。
# grep -E -o "^[_[:alpha: ]] +()" /etc/rc.d/init.d/functions
3. echo を使用して絶対パスを出力し、egrep を使用してそのベース名を抽出します。
# echo " /mnt/sdc" | grep -E -o "[^/]+/?$" |cut -d"/" -f1
さらに: egrep を使用してパスのディレクトリ名を取得します。 dirname コマンドの結果に、
4. ifconfig コマンドの結果で 1 ~ 255 の値を見つけます。
5.
fgrep: 正規表現をサポートしません 式検索
bash の基本機能 (4)
変数の型:
データの保存形式、保存スペースのサイズ、参加演算の種類
文字型
数値型
整数型
浮動小数点型
Strong 型: 変数を定義するときに型を指定する必要があります。参加する操作は型の要件を満たしている必要があります。宣言されていない変数を呼び出すとエラーが発生します。型を指定する必要はありません。デフォルトは文字型変換です。操作; 変数は事前に定義せずに直接呼び出すことができます
bash の変数の種類:
変数の有効範囲などの標準に準拠:
変数: 有効なスコープは現在のシェル プロセスです。現在のシェル以外の他のシェル プロセス (現在のシェルのサブシェル プロセスを含む) は無効です。プロセス;
ローカル変数: 有効スコープは、現在のシェル プロセス内の特定のコード フラグメント (通常は関数) です。
位置変数: $1、$2、... は、スクリプトにスクリプトコードのコマンドラインを通じて渡されるパラメータ
特殊変数: $?、$0、$*、$@、$#
ローカル変数:
変数の割り当て: 名前='value'
参照を使用できます:
value:
(1) 直接文字列にすることができます。 name="username "
(2) 変数参照: name= "$username"
(3) コマンド参照: name=`COMMAND`, name=$(COMMAND)
変数参照: ${name} , $name
"": 弱い参照、変数参照は変数値に置き換えられます。
'': 強い参照。変数参照は変数値に置き換えられませんが、元の文字は維持されます。
定義された変数をすべて表示します。
set
変数の破棄:
名前の設定解除
環境変数:
varvariable宣言と割り当て:export name =value
declare-x name =value
variableリファレンス:$ name、$ {name}
displayすべての環境変数:
export
env
printenv
destroy:
unset name
bashには多くの組み込み機能があります環境変数:PATH、SHELL、UID、HISTSIZE、HOME 、PWD、OLD、HISTFILE、PS1
変数の命名規則:
1. if、for などの予約語は使用できません。2.アンダースコアを付け、数字で始めることはできません。
読み取り専用変数:
readonly name
declare -r name
位置変数:
スクリプト コードのコマンド ラインを通じてスクリプトに渡されるパラメーターを呼び出します。
$1、$2、...: 1 番目、2 番目、およびその他のパラメーターの呼び出しに対応します。
shift [ n]
$0: コマンド自体;
$@: スクリプトに渡されるすべてのパラメータ。
$#: スクリプトに渡されるパラメーターの数
例: 指定されたファイル内の行数を決定します
#!/bin/bash
linecount="$( wc -l $1|cut -d' ' -f1)"
echo "$1 には $linecount 行があります。"
bash 設定ファイル:
スコープには 2 つのカテゴリがあります:
グローバル設定:
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
個人設定:
~/.bash_profile
~/.bashrc
Profile クラス: 対話型ログイン シェルの構成を提供します
グローバル: /etc/profile、/etc/profile.d/*.sh
個人: ~/.bash_profile
関数:
(1) 環境変数を定義するために使用されます。 2) コマンドまたはスクリプトを実行します。
bashrc クラス: 非対話型ログイン シェルの構成を提供します
グローバル: /etc/bashrc
パーソナル: ~/.bashrc
機能:
(1) コマンドエイリアスを定義します。
(2) ローカル変数を定義します。
対話型ログイン:
ターミナルから直接ログインするアカウントのパスワードを入力してください
「su - UserName」または「su -l UserName」を使用してユーザーを切り替えます
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile - -> ~/.bashrc --> /etc/bashrc
非対話型ログイン:
グラフィカルの下で開かれたターミナルインターフェース
スクリプトを実行
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh (1) シェルプロセスを再起動します。
(2) ソースまたは コマンドプロセスを使用します。
質問:
1. すべてのユーザーに有効なエイリアスを定義しますか?
2. ユーザーの PATH 環境変数の値に、/usr/local/apache2/bin
Administrator などのパスを 1 つ追加しますか?
全部?
bash での算術演算
+, -, *, /, %, **
算術演算を実装します:
(1) let算術表現
(2) var=$[算術式]
(3) var=$((算術式))
(4) var=$(expr arg1 arg2 arg3 ... )
一部のシナリオでは乗算記号をエスケープする必要があります。
bash には乱数ジェネレーターが組み込まれています: $RANDOM
拡張割り当て:
+=、-=、 *=、/=、%=
let varOPERvalue
例: count+=1
をインクリメントおよびデクリメントします:
let var+=1
させてくださいvar++
let var-=1
let var--
/etc/passwd ファイル内の 10 番目のユーザーと 20 番目のユーザーの ID を計算し、
#!/bin/bash
userid1=$(head -n 10 /etc/passwd | tail -n 1 | Cut -d: -f3)
userid2=$ (head -n 20 / etc/passwd | tail -n 1 |cut -f3)
useridsum=$[$userid1+$userid2]
echo "uid sum: $useridsum " 2 つのファイル パスをパラメータとしてスクリプトに渡し、2 つのファイル内のすべての空白行の合計を計算します
#!/bin/bash
spaceline1=$ (grep "^[[ :space:]]*$" $1 |
wc -l)
spaceline2=$(grep "^[[:space:]]*$" $2 |
wc -l )
echo "スペース行の合計: $[$spaceline1+$spaceline2]"
/etc、/var、/usr ディレクトリーにある第 1 レベルのサブディレクトリーとファイルの数に関する統計。
条件テスト:
特定の要件が満たされているかどうかを判断するには、テストメカニズムによって実装する必要があります
注: 特別なテスト式を完了するには、テストコマンドを支援する必要があります。テストプロセス;
テストコマンド:
test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]
注: EXPRESSION は前後に置く必要があります。
bash テストの種類:
数値テスト:
-ge: 以上であるかどうか。
-eq: に等しいかどうか;
-ne: に等しいかどうか;
-le: に等しいかどうか以下;
文字列テスト:
==:
と等しいかどうか。
>: より大きいかどうか;
<: より小さいかどうか;
=~: 上の文字列かどうか左は右の PATTERN と一致します ;
注: この式は通常 [[ ]] で使用されます。空でない場合は true、空でない場合は false;
-n "STRING": 文字列が空でない場合は true、空の場合は false。 ;
注: 文字列を比較するときに使用するすべてのオペランドは引用符を使用する必要があります
bash カスタム終了ステータス コード
exit [n]:カスタム出口ステータス コード;
注: スクリプト内で終了コマンドが検出されると、スクリプトは直ちに終了します。終了ステータスは、終了コマンドの後の番号によって異なります。コードがスクリプトに指定されている場合、スクリプト全体の終了ステータス コードは、スクリプト内で実行された最後のコマンドのステータス コードによって異なります。
数値がパラメータとしてファイル パスを受け入れます。パラメーターの数が 1 未満の場合、ユーザーは「少なくとも 1 つのパラメーターを指定する必要があります」というメッセージが表示され、すぐに終了します
パラメーターの数が 1 より小さくない場合は、ファイル内の空白行の数を表示します。最初のパラメータが指す
egrep、拡張正規表現、変数、設定ファイル、算術演算、条件付きテスト、終了ステータス コード
ERE:
文字の一致: .、[] 、 [^]
一致数: *、?、+、{m,n}
位置アンカー: ^、$、<、>、b
グループ化: ()、 1、2、..
または: a|b
変数:
ローカル変数
環境変数
位置変数
特殊変数
は予約語を使用できません
コマンド: unset、export、declare -x、set、env、printenv、readonly
profile:
プロフィール、bashrc
arithmetic操作:
let、$ []、$(())、expr
+=、 - =、 *=、 /=
++、--
条件テスト:
test、[]、[[]]
の3種類:
値: -lt、-le、- gt、-ge、-ne、-eq
文字列: ==、!=、>、<、=~、-z、-n
File
Custom終了コード:
exit [n]
[ $# -lt 1 ] && echo "少なくとも 1 つの引数。" && exit 1
vim エディタ
はじめに
vi: ビジュアルインターフェイス、テキストエディタ
テキスト: ASCII、Unicode
テキスト編集タイプ:
ラインエディタ: sed
エディタ: ナノ、vi
VIM - Vi 改善
vimを使用: モーダル編集
基本モード:
編集モード、コマンドモード
入力モード
最終行モード:
内蔵コマンドラインインターフェース
ファイルを開く:
# vim [オプション] .. FILE...
+#: ファイルを開いた後、カーソルを行 # の先頭に直接置きます
+/PATTERN: ファイルを開いた後、カーソルを最初の行に直接置きます
モード変換:
入力モード
i: カーソル位置に挿入します。 a: 追加、カーソル位置の後に入力します。
o: 現在のカーソル位置の下に新しい行を開きます。
A: 現在のカーソル位置の先頭に入力します。現在のカーソル位置の下に新しい行を入力します。
O: 現在のカーソルがある行の上に新しい行を開きます。モード --> 編集モード ESC
:q 終了
:q! 保存して終了
:x保存と終了
:w /path + j、k、lh:left
l:right
j:bottom
k:トップ
#COMMAND: #; で指定された文字数にジャンプします
単語間をジャンプします:
w: 次の単語の先頭
e: 単語の終わり現在または次の単語
b: 現在または前の単語の先頭
#COMMAND: 一度にジャンプする単語の数は #
Jump で指定されます。行の先頭と末尾:
^: 行の先頭の空白以外の文字にジャンプします。
0: 行の先頭にジャンプします。行の終わり;
行間を移動:
#G: # で指定された行にジャンプします。
1G、gg:最初の行;
文間の移動:
)
(
段落間の移動:
}
{
ヴィム編集コマンド:
文字編集:
x: カーソル位置の文字を削除;
# x: 最初の # 文字を削除します。カーソルの位置の文字とその後ろの文字の位置を入れ替えます
置換コマンド (r、replace)
r: カーソル位置の文字を置換します。
削除コマンド:
d: カーソルと組み合わせて文字をジャンプして範囲を削除できます。
d $:
d^:
d0:
dw
de
db
#COMMAND
dd: を削除しますカーソルがある行;
#dd: 複数行の削除;
Paste コマンド (p、put、paste):
p: バッファーに行全体が保存されている場合は、現在のカーソルがある行の最後、そうでない場合は、現在のカーソル位置の後ろに貼り付けます。
P: バッファに行全体が格納されている場合は、現在のカーソルがある行の上に貼り付けます。現在のカーソル位置の前に移動します。
Copy コマンド (y, yank):
y: コピー、動作は d コマンドと似ています。 y0
y^
ye
yw
yb
#COMMAND
yy: 行をコピー
#yy:複数の行をコピーします。
Change コマンド (c , change)
c:
入力モードを変更します
c^ #コマンド #コマンド #コマンド
cc: 削除して新規入力
#cc:
その他の編集操作
視覚化モード:
v: 文字で選択
V: 行で選択
注: 多くの場合、編集と組み合わせられますコマンド
d, c, y
以前の編集を元に戻す:
u(undo): 以前の操作を元に戻す
#u: 指定された回数の操作を元に戻す;前を元に戻す元に戻す:
Ctrl+r
前の編集操作を繰り返す:
.
スクロール操作:
Ctrl +f: ファイルの最後までスクロールします;
Ctrl+b: ファイルの先頭まで 1 画面回転します。
Ctrl+u: 画面の半分をファイルの最後まで回転します。画面からファイルの先頭まで;
vim モードの最後の行:
組み込みコマンドラインインターフェース
(1) アドレス区切り
:start_pos, end_pos
#: 特定の行 #、たとえば、2 は行 2 を意味します。
#,#: 左から # は行の先頭を表し、右へ # は行の末尾を表します。
#,+#: 左から # は行を表し、右の # は行数を表します。
.: 現在の行
$: 最後の行
.,$-1
%: フルテキスト、1,$
/pat1/,/pat2/:
pat1 パターンに一致した最初の行から pat2 に一致した最初の行まで開始 一致した行終了;
#,/pat/
/pat/,$
使用法:
の後に編集コマンド
d
よ
w /PATH/TO/SOMEWHERE: 範囲内の行を指定したファイルに保存します。
r /PATH/FROM/SOMEFILE: 指定したファイルのすべての内容を指定した場所に挿入します。
(2) 検索
/PATTERN: 現在のカーソル位置からファイルの末尾まで検索します。
?PATTERN: 現在のカーソル位置からファイルの先頭まで検索します。 : コマンドと同じです。 方向
N: コマンドの逆方向。
s/検索対象/置換先/修飾子
検索対象: パターンを使用できます
置換先: パターンは使用できませんが、1、2、... などの後方参照記号は使用できます。また、「&」を使用して、前の検索で見つかったコンテンツ全体を参照することもできます。行が置き換えられます 出現箇所
置換内の区切り文字を見つけます/
s@@@
s###
1 など、/etc /grub2.cfg を /tmp/ ディレクトリにコピーし、検索と置換コマンドを使用して /tmp/grub2.cfg ファイル内の行の先頭にある空白文字を削除します。 [[:space:]]+//g
2. /etc/rc.d/init.d/functions ファイルを /tmp ディレクトリにコピーし、検索と置換コマンドを使用して# 空白文字で始まる /tmp/functions の各行の先頭にあります。モード:
vim FILE1 FILE2 FILE3...
:next 次の
:prev 前
:first first
:last last
:壁すべて保存
:qall すべて終了
ウィンドウ分割モード:
vim -o|-O FILE1 FILE2 ...
-o: 水平分割
-O : 垂直分割
ウィンドウの切り替え: Ctrl+w、矢印
単一ファイルウィンドウの分割:
Ctrl+w、s: 分割、水平分割
Ctrl+w、 v: 垂直、垂直分割
カスタマイズされた vim 動作機能:
設定ファイル: 永続的に有効
グローバル: /etc/vimrc
個人: ~/.vimrc
最後の行: 現在の vim プロセスは有効です
(1) 行番号
表示: setnumber、set nu と省略されます
表示のキャンセル: set nonumber、set nonu と省略されます
(2) ブラケット マッチング
マッチング: set showmatch、set sm
と省略されます。cancel: set nosm
(3) 自動インデント
有効: set ai
無効: set noai
(4) ハイライト検索
有効: set hlsearch
無効化: nohlsearch を設定します
(5) 構文の強調表示
有効: 構文オン
無効: 構文オフ
(6) 文字の大文字と小文字を無視する
有効: set ic
しないでください無視: noic を設定
ヘルプを取得:
:help
:help subject
bash 条件テスト:
テスト方法:
テストEXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]
テスト式のカテゴリ:
数値比較
文字列テスト
ファイルテスト:
存在テスト
-a FILE
-e FILE: ファイルの存在テスト、存在する場合は true、存在しない場合は false
存在とカテゴリのテスト
- b FILE; : 存在し、ブロックデバイスファイルであるかどうか。
-c FILE: 存在し、キャラクターデバイスファイルであるかどうか。
-d FILE: 存在し、ディレクトリファイルであるかどうか。
-f FILE: 存在し、通常のファイルであるかどうか。
-h FILE または -L FILE: 存在し、シンボリックリンクファイルであるかどうか。名前付きパイプファイル;
-S FILE: 存在し、ソケットファイルであるかどうか
ファイル権限テスト:
-r FILE: 存在し、読み取り可能かどうか: 存在し、書き込み可能かどうか
-x FILE: 存在し、実行可能かどうか
ファイルの特別な権限テスト:
-g FILE: 存在し、sgid 権限があるかどうか。 -u FILE: 存在し、suid 権限があるかどうか。
-k FILE: 存在し、スティッキー権限があるかどうか。
ファイルサイズテスト:
-s FILE: 存在するかどうか。 empty;
ファイルが開いているかどうか:
-t fd: fd はファイル記述子が開かれているかどうか、端末に関連しているかどうかを意味します
-N FILE: ファイルが開いているかどうか最後に読み取られてから変更されているかどうか。
-O FILE: 現在の実効ユーザーがファイル所有者であるかどうか。 両眼テスト:
FILE1 -ef FILE2: FILE1 と FILE2 が同じデバイス i ノード上の同じファイルを指しているかどうか
FILE1 -nt FILE2: FILE1 が FILE2 より新しいかどうか
FILE1 -ot FILE2: FILE1 が FILE2 より古いかどうか
結合テスト条件:
論理演算:
最初の方法:
COMMAND1 && COMMAND2
コマンド1 || コマンド2
! コマンド
[ -e FILE ] && [ -r FILE ]
2 番目の方法:
EXPRESSION1 -a EXPRESSION2
EXPRESSION1 -o EXPRESSION2
! EXPRESSION
# [ -z "$ホスト名" -o " $hostName "=="localhost.localdomain" ] && ホスト名 www.madu.com
# [ -f /bin/cat -a -x /bin/cat ] && cat /etc/fstab
vim:
編集モード、入力モード、最終行モード、視覚化モード
ジャンプ: h,j,k,l,w,b,e,),(,}, {, G 、^、0、$
編集: x、r、c、d、y、p、u、ctrl+r
検索: /、?、n、N
検索置換: s
s///
g:
i:
最終行区切り文字:
#
m,n
m、+#
.
$
/pat1/
/pat1/,/pat2/
%
ファイルテスト:
単眼: -e、- f、-d、-b、-c、-L、-P、-S、-r、-w、-x、-s
バイナリ: -nt、-ot
組み合わせテスト: -a、-o、!
ファイル検索:
ファイル システム上の条件付きファイルを検索します。
ファイル検索: 検索、検索
非リアルタイムsearch (データベース検索):locate
リアルタイム検索:find
locate:
インデックスの構築は、システムが相対的に安定しているときに自動的に実行されます。アイドル (定期的なタスク); データベースを手動で更新します (updatedb)。
高速検索、
非リアルタイム検索
fi nd:
リアルタイム検索ツール、指定されたパスをたどることで、ファイル システムがファイル検索を完了します。
検索速度が若干遅い
リアルタイム検索。
文法:
find [オプション] .. [検索パス] [検索条件] [処理アクション]
検索パス: 特定のターゲット パスを指定します。デフォルトは現在のディレクトリです。
検索条件: 指定された検索条件 (ファイル名、サイズ、タイプ、権限、その他の標準)。デフォルトでは、指定されたパスにあるすべてのファイルが検索されます。
処理アクション: 一致するファイルをどう処理するか。条件; デフォルトの出力は画面に表示されます。
検索条件:
ファイル名に基づいて検索:
-name "ファイル名": glob
の使用をサポートします。 *、?、[]、[^]
-iname "ファイル名": 文字は大文字と小文字が区別されません
-regex "PATTERN": ファイル パス文字列全体と一致させるには PATTERN を使用します。ファイル名のみ
所有者とグループに基づいて検索:
-user USERNAME: 指定されたユーザーが所有者であるファイルを検索します。
group GRPNAME: 指定されたグループがグループであるファイルを検索します。
-uid UserID: owner は指定されたグループ ファイルです。
-gid GroupID: グループが指定された GID 番号を持つファイルを検索します。
-nogroup: 所有者のないファイルを検索します。グループファイル;
ファイルタイプに基づいて検索:
f: 通常のファイル
d: ディレクトリファイル
l: シンボリックリンクファイル
S: パッティングファイル B: ブロックデバイスファイル
c: キャラクターデバイスファイル
P: パイプファイル
組み合わせ条件:
と: -a
または: -o
非: -not、!
!A -a !B = !(A -o B)
!A -o !B = !( A -a B)
/tmp ディレクトリ内で、所有者が root ではなく、ファイル名が fstab ではないファイルを検索します。
find /tmp ( -not -user root -a -not -name 'fstab ' ) -ls
find /tmp -not ( -user root -o -name 'fstab' ) -ls
ファイルサイズに基づいて検索:
-size [+| -] #UNIT
共通単位: k、M、G
#UNIT: (#-1, #]
-#UNIT: [0,#-1]
+ #UNIT: (#,oo)
タイムスタンプによると:
in "日";
-atime [+|-]#,
#: [#, #+1)
+#: [#+1,oo]
-#: [0,#)
-mtime
-ctime
」分":
-amin
-mmin
-cmin
権限に基づいて検索:
-perm [/|-]MODE
モード:正確な権限の一致
/MODE: (u、g、o) オブジェクトの任意のタイプの権限の 1 つが一致する限り、
-MODE: オブジェクトの各タイプが同時に一致する必要があります。 time パーミッション標準が指定されています。
処理アクション:
-print: 画面に表示されるデフォルトの処理アクション。
: found file -l" コマンド;
-delete: 見つかったファイルを削除します;
-fls /path/to/somefile: 見つかったすべてのファイルの長い形式の情報を指定したファイルに保存します;
-ok COMMAND {} ; 見つかったファイルごとに COMMAND で指定されたコマンドを実行します。
コマンドを実行する前に、ユーザーは対話的に確認を求められます。見つかった各ファイルは、COMMAND で指定されたコマンドを実行します。 : 見つかったファイル名自体を参照するために使用されます。
注: find は、見つかったファイルを後で指定されたコマンドに渡します。条件を満たして後続のコマンドにすぐに渡します
一部のコマンドはパラメータが多すぎるため、コマンドの実行が失敗する可能性があります。この問題を回避する別の方法は次のとおりです。
ルートに属しているすべてのファイルまたはディレクトリを検索します。 # find /var -user root -group mail
2. root、bin、hadoop ファイルまたはディレクトリに属さないすべてのファイルを /usr ディレクトリで検索します
# find /usr -not -user root -a -not -user bin -a -not -user hadoop
# find /usr -not ( -user root -o -user bin -o -user hadoop )
3. /etc ディレクトリ内で、所有者が root ではなく、Hadoop ファイルまたはディレクトリでもないファイルまたはディレクトリを検索します。
# find / etc -mtime -7 -a - not -user root -a -not -user hadoop
# find /etc/ -mtime -7 -a -not ( -user root -o -user hadoop )
4. ファイルまたはディレクトリを検索します。現在のシステムに所有者もグループもなく、先週アクセスされたもの
# find / -nouser -a -nogroup -a -atime -7
5. 1M を超え、通常のファイルタイプの /etc ディレクトリ。
# find /etc -size +1M -type f
6. ディレクトリ内のすべてのユーザーが /etc を検索します。ファイルへの書き込み権限がありません。
# find /etc -not -perm /222
7. ユーザーが実行権限を持たないファイルの種類を少なくとも 1 つ見つけます。
# find /etc -not -perm -111
8. すべてのユーザーが実行権限を持ち、他のユーザーが書き込み権限を持っているファイルを /etc/init.d ディレクトリで検索します。 # find /etc/init.d -perm -113
Linux ファイル システムに対する特別なアクセス許可
SUID、SGID、Sticky
1 アクセス許可
r、w、x
ユーザー、グループ、その他
2 セキュリティコンテキスト
前提: プロセスには所有者とグループがあり、ファイルには所有者とグループがあります。 ) 実行可能プログラム ファイルをプロセスとして開始できるかどうかは、イニシエーターがそのプログラム ファイルに対する実行権限を持っているかどうかによって決まります。
(2) プロセスとして開始された後は、プロセスの所有者がイニシエーターになります。プロセスのイニシエーターです イニシエーターが属するグループ
(3) ファイルにアクセスするときのプロセスの権限は、プロセスのイニシエーターによって異なります:
(a) プロセスのイニシエーターファイルの所有者と同じです: ファイル所有者の権限が適用されます ;
(b) プロセスの開始者はファイルのグループに属します;その後、ファイルのグループの権限を適用します;
(c)ファイルの "その他" 権限;
3 SUID
(1) 実行可能プログラム ファイルをプロセスとして開始できるかどうか: イニシエーターがプログラム ファイルに対する実行権限を持っているかどうかによって異なります。 (2) プロセスとして開始された後、プロセスの所有者は元のプログラム ファイルの所有者になります。
chmod u-s FILE...
4 SGID
デフォルトでは、ユーザーがファイルを作成すると、そのファイルが属するグループがそのユーザーが属する基本グループになります。ディレクトリには SGID が設定され、このディレクトリへの書き込み権限を持つユーザーによってこのディレクトリに作成されたファイルが属するグループは、このディレクトリが属するグループです。 権限設定:
chmod g +s DIR...
chmod g-s DIR...
5 Sticky
複数のユーザーが書き込み可能なディレクトリの場合、sticky が設定されている場合、各ユーザーは自分のファイルのみを削除できます
chmod o+t DIR...
chmod o-t DIR...
SUID SGID STICKY
000 0
001 1
010 2 1 3
100 4
101 5
110 6
111 7
chmod 4777 /tmp/a.txt
いくつかの許可ビットマッピング:
SUID: user 、所有者の実行を占有します許可ビット;
s: 所有者は x 許可を持っています
S: 所有者は x 許可を持っていません
SGID: グループ、グループの実行許可ビットを占有します
s: グループが持っていますx 権限
S: グループには x 権限がありません
Sticky: その他、その他の実行権限ビットを占有します
t: 他には x 権限があります
T: その他 いいえx 権限
bash スクリプト:
手続き型プログラミング言語:
順次実行
選択された実行
ループ実行
実行することを選択してください:
if 判定条件
then
条件が真となる分岐コード
fi
if 条件が真となる分岐コード
else
条件が偽の分岐コード
fi