Linuxコマンド(source、find、compression and decompression、grep、cat、patch、history、top、chmod)

ソース

指定されたシェルプログラムファイルにシェルを読み込ませ、ファイル内のすべてのステートメントを順番に実行します。(このコマンドは通常、コマンド「。」に置き換えられます。)
使用例:

source filename 
. filename(中间有空格)

ソースファイル名:このコマンドは、新しいサブシェルを作成せずに、スクリプト内のステートメントを読み取り、現在のシェルで順番に実行するだけです。次に、スクリプト内のすべての新規および変更されたステートメントが現在のシェルに保存されます。
現在のスクリプトで構成されている変数は、スクリプトの環境としても使用されます。source(またはpoint)コマンドは通常、新しく変更された初期化ドキュメントの
を再実行するために使用されます

ログイン後に.bash_profileのEDITER変数とTERM変数を変更すると、sourceコマンドを使用し
て、ログアウトして再度ログインすることなく、.bash_profileのコマンドを再実行できます。たとえば、スクリプト
$ KKK = 111エクスポートする場合、。/ a.shを使用してスクリプトを実行すると、実行後にecho $ KKKを実行し
値が見つかりません。sourceを使用して実行し、次にechoを実行する場合、KKK = 111が見つかります。シェルを実行するための./a.shの呼び出しはサブシェルで実行されているため、実行後、構造は親シェルに反映されませんが、ソースが異なり、このシェルで実行されるため、結果を確認できます。

ソースファイル名とshファイル名および./filename実行スクリプトの違いは何ですか?

1.シェルスクリプトに実行可能権限がある場合、スクリプトの実行にshfilenameと./filenameを使用しても違いはありません。./filenameは、現在のディレクトリがPATHにないため、すべての「。」は現在のディレクトリを示すために使用されます。
2.sh filenameはサブシェルを再作成し、サブシェルのスクリプトでステートメントを実行します。サブシェルは親シェルの環境変数を継承しますが、サブシェルの新規および変更された変数は、サブシェルの新しい変数と変更された変数が親シェルに戻されない限り、エクスポートが使用されます。
3.source filename:このコマンドは、新しいサブシェルを作成せずに、スクリプト内のステートメントを読み取り、現在のシェルで順番に実行するだけです。次に、スクリプト内のすべての新規および変更されたステートメントが現在のシェルに保存されます。
別の例:
1。次の内容で新しいtest.shスクリプトを作成します:A = 12.
次に実行可能chmod + x test.sh
3. sh test.shを実行した後、echo $ Aは空として表示されます。 = 1は現在のシェルに返送されません
。4。./
test.shを実行した後、同じ効果があります。5。ソースtest.shまたは.test.shを実行し、$ Aをエコーすると、1が表示され、Aが示されます。 = 1変数は現在のシェルにあります

findコマンドは、指定されたディレクトリ内のファイルを検索するために使用されます。

文法

・パスの検索-option [-print] [-exec-okコマンド] {}
find(指定されたディレクトリ)(指定されたオプション)[再生後に実行されたアクションの検索]

パラメータの前の文字列は、検索対象のディレクトリの名前と見なされます。パラメータを設定せずにこのコマンドを使用すると、findコマンドは現在のディレクトリ内のサブディレクトリとファイルを検索します。そして、見つかったすべてのサブディレクトリとファイルが表示されます。
一般的な例:
現在のディレクトリとサブディレクトリ内のすべてのファイルとフォルダを一覧表示します

find . 

*任意の数の文字がワイルドカード化されていることを意味しますか?ワイルドカードの単一文字を表します

find /home  -name "*.t?t"  

更新日が現在の時刻から4日以内のファイルを検索します

find   /usr   -mtime  -4   

更新日が現在の時刻から5日を超えるファイルを検索します

find   /usr  -mtime  +4  

更新日が現在の時刻から4日以上5日未満のファイルを検索します

find   /usr   -mtime   4  

システム内で所有者がmhyであるファイルを検索する

find  / -user mhy        
  • ここで、-a -o -notの使用法を拡張できます。-ois
    またはmeans-
    a isおよびmeans
    -notは、これら3つの逆の意味で、さまざまなフィルタリングオプションまたはルールを自由に組み合わせることができます

txtサフィックスという名前のファイルを見つけてmhyに属します

find . -name "*.txt" -a -user mhy  

すべてのパイプラインタイプファイルを一覧表示します

find / -type p              

/ usrに10Mを超えるファイルを一覧表示します

find  / -size  +10M   

/ varディレクトリに777のファイル権限を持つファイルを一覧表示します

find /var -perm 777      

圧縮および解凍

ここに画像の説明を挿入

grepコマンドは、ファイル内の修飾された文字列を検索するために使用されます

1.現在のディレクトリで、fileの接尾辞が付いたファイルでテスト文字列を含むファイルを見つけ、文字列の行を出力します

grep test *file 

2.「test」というプレフィックスが付いたファイルと「test」という文字列を含むファイルを見つけます

$ grep test test* 

3.ファイル名がパスに変更された場合は、-rパラメーターを追加する必要があります。/etc/acpディレクトリーおよびそのサブディレクトリー内の203文字のすべてのファイルを検索するコマンド:

grep -r 203 /etc/acpi 

4。「-v」パラメータを使用して、条件を満たさない行の内容を印刷できます。

grep -v test test.c

もちろん、ファイル名をディレクトリに変更すると、コマンドは次のように変更されます。

grep -rv 203 /bin

5. -nパラメーターを使用すると、スタイルに準拠する行の前の行の行番号を表示できます。

grep -n 203  test.c

6.検索では大文字と小文字は区別されません。

$ grep –i "被查找的字符串" 文件名

7.「abc」と「test」の文字列を同時に一致させます

grep -e 'abc' -e 'dlf' test.txt

catは、ファイルを接続して標準出力デバイスに印刷するために使用されます

文法形式

cat [-AbeEnstTuv] [--help] [--version] fileName

例:
1。textfile1のドキュメントコンテンツに行番号を追加し、このドキュメントにtextfile2を入力します。

cat -n textfile1 > textfile2

2. textfile1およびtextfile2のコンテンツに行番号を追加し(空白行は追加されません)、コンテンツをtextfile3ドキュメントに追加します。

cat -b textfile1 textfile2 >> textfile3

もちろん、行番号を省略することもできます。

cat  textfile1 textfile2 >> textfile3

3./etc/test.txtファイルの内容をクリアします。

cat /dev/null > /etc/test.txt

上記の例では「>>」と「>」に違いがあることに注意しください。読者は、>>が最後に追加され、>が直接の置き換えであることを確認する必要があります。実際の条件はコンピュータで練習できます
。4 。ファイルを作成し、eofで終了します

cat >>文件名<<eof

といった:

cat  >>1.txt <<eof
>1
>2
>3
>4
>5
>eof

つまり、1.txtを作成し、ファイルの内容は1 2 3 45です。

パッチ

1.コマンドの説明
1)diffの機能は、2つのファイルの違いを比較して記録することです。これは、いわゆるdiffパッチです。
構文形式

diff 【选项】源文件(夹)目的文件(夹)

ソースファイル(フォルダ)にパッチを当ててターゲットファイル(フォルダ)になるようにすることで、「アップグレード」という用語が使われます。
最も一般的に使用される3つのオプションを紹介します。

-r 是一个递归选项,设置了这个选项,diff会将两个不同版本源代码目录中的所有对应文件全部都进行一次比较,包括子目录文件。
-N 选项确保补丁文件将正确地处理已经创建或删除文件的情况。
-u 选项以统一格式创建补丁文件,这种格式比缺省格式更紧凑些。

2)パッチは、diffによって作成されたパッチを使用して、ソースファイル(フォルダー)と宛先ファイル(フォルダー)の間の変換を実現します。これは、ソースファイル(フォルダー)->宛先ファイル(フォルダー)、または宛先ファイル(フォルダー)->ソースファイル(フォルダー)ができることを意味します。
最も一般的に使用されるオプションをいくつか紹介します。

-p0 选项要从当前目录查找目的文件(夹)
-p1 选项要忽略掉第一层目录,从当前目录开始查找。

例えば:

--- old/modules/pcitable Mon Sep 27 11:03:56 1999 
+++ new/modules/pcitable Tue Dec 19 20:05:41 2000

パラメータ-p0を使用する場合は、現在のディレクトリからoldという名前のフォルダを検索し、モジュールの下にあるpcitablファイルを検索してパッチ操作を実行することを意味します。パラメータ-p1を使用すると、第1レベルのディレクトリが無視され(つまり、古いディレクトリに関係なく)、モジュールフォルダが現在のディレクトリから検索され、その下にpcitableが見つかります。前提は、現在のディレクトリがモジュールが配置されているディレクトリである必要があるということです。diffパッチファイルのパスが指定されている限り、diffパッチファイルは任意の場所に配置できます。
 2.パッケージ化の例
 1)ファイルを
 作成してデータを書き込むために単一のファイルにパッチが適用されます。

hr@hr-virtual-machine:$ cat>>test0<<EOF
> 111111 
> 111111 
> 111111 
> EOF

次に、結果を表示します。

hr@hr-virtual-machine:$ more test0
111111 
111111 
111111

ファイルを作成してデータを書き込みます。

hr@hr-virtual-machine:$ cat>>test1<<EOF
> 222222 
> 111111 
> 222222 
> 111111 
> EOF  

次に、結果を表示します。

hr@hr-virtual-machine:$ more test1
222222 
111111 
222222 
111111  

diffを使用してパッチtest1.patchを作成します

hr@hr-virtual-machine:$ diff -uN test0 test1 > test1.patch

パッチパッチを表示します。

hr@hr-virtual-machine:$ cat test1.patch
************************************************************ 
patch文件的结构头
补丁头是分别由
---/+++开头的两行,用来表示要打补丁的文件。
---开头表示旧文件,
+++开头表示新文件。
一个补丁文件中的多个补丁一个补丁文件中可能包含以---/+++开头的很多节,每一节用来打一个补丁。
所以在一个补丁文件中可以包含好多个补丁。
块
块是补丁中要修改的地方。它通常由一部分不用修改的东西开始和结束。
他们只是用来表示要修改的位置。他们通常以@@开始,结束于另一个块的开始或者一个新的补丁头。
块的缩进
块会缩进一列,而这一列是用来表示这一行是要增加还是要删除的。块的第一列+号表示这一行是要加上的。-号表示这一行是要删除的。没有加号也没有减号表示这里只是引用的而不需要修改。
************************************************************ 
diff命令会在补丁文件中记录这两个文件的首次创建时间,如下 
--- test0 2006-08-18 09:12:01.000000000 +0800
+++ test1 2006-08-18 09:13:09.000000000 +0800 
@@ -1,3 +1,4 @@ 
+222222 
111111 
-111111 
+222222 
111111  

test0にパッチを適用します(つまり、test0を更新します)

hr@hr-virtual-machine:$ patch -p0 < test1.patch

test0を表示:

patch -RE -p0 < test1.patch cat test0
222222 
111111 
222222 
111111  

このようにして、パッチは終了します。前のパッチにロールバックする必要がある場合は、次のようにします。

hr@hr-virtual-machine:$ patch -RE -p0 < test1.patch

2)複数ファイルのパッチ操作

hr@hr-virtual-machine:$ mkdir prj0
hr@hr-virtual-machine:$ cp test0 prj0 
hr@hr-virtual-machine:$ ls   
test0

ファイルを作成する

hr@hr-virtual-machine:$  cat>>prj0name<<EOF
> -------- 
> prj0/prj0name 
> -------- 
> EOF

ファイルを作成する

hr@hr-virtual-machine:$ ls
prj0name test0 
hr@hr-virtual-machine:$ cd..
hr@hr-virtual-machine:$ mkdir prj1
hr@hr-virtual-machine:$ cp test1 prj1
hr@hr-virtual-machine:$ cd prj1
hr@hr-virtual-machine:$ cat>>prj1name<<EOF
> --------- 
> prj1/prj1name 
> --------- 
> EOF

パッチパッケージを作成する

hr@hr-virtual-machine:$ cd..
hr@hr-virtual-machine:$ diff -uNr prj0 prj1 > prj1.patch

パッチパッケージを表示する

hr@hr-virtual-machine:$ more prj1.patch
diff -uNr prj0/prj0name prj1/prj0name 
--- prj0/prj0name 
2006-08-18 09:25:11.000000000 +0800 +++ prj1/prj0name 1970-01-01 08:00:00.000000000 +0800 @@ -1,3 +0,0 @@ 
---------
-prj0/prj0name 
--------- diff -uNr prj0/prj1name prj1/prj1name 
--- prj0/prj1name 1970-01-01 08:00:00.000000000 +0800 
+++ prj1/prj1name 2006-08-18 09:26:36.000000000 +0800 
@@ -0,0 +1,3 @@ 
+--------- 
+prj1/prj1name 
+--------- 
diff -uNr prj0/test0 prj1/test0 
--- prj0/test0 2006-08-18 09:23:53.000000000 +0800 
+++ prj1/test0 1970-01-01 08:00:00.000000000 +0800 
@@ -1,3 +0,0 @@ 
-111111 
-111111 
-111111 
diff -uNr prj0/test1 prj1/test1 
--- prj0/test1 1970-01-01 08:00:00.000000000 +0800 
+++ prj1/test1 2006-08-18 09:26:00.000000000 +0800 
@@ -0,0 +1,4 @@ 
+222222 
+111111 
+222222 
+111111

カタログとパッチを入力してください

hr@hr-virtual-machine:$ cp prj1.patch ./prj0 
hr@hr-virtual-machine:$ cd prj0 
hr@hr-virtual-machine:$patch -p1 < prj1.patch
patching file prj0name 
patching file prj1name 
patching file test0 
patching file test1  
hr@hr-virtual-machine:$ ls
prj1name prj1.patch test1 

前のバージョンにロールバックします

hr@hr-virtual-machine:$ patch -R -p1 < prj1.patch
patching file prj0name 
patching file prj1name 
patching file test0 
patching file test1
hr@hr-virtual-machine:$ ls
prj0name prj1.patch test0

いくつかの重要な指示を要約します:
単一のファイル

diff –uN from-file to-file >to-file.patch 
patch –p0 < to-file.patch 
patch –RE –p0 < to-file.patch 

複数のファイル

diff –
uNr from-docu to-docu >to-docu.patch 
patch –p1 < to-docu.patch 
patch –R –p1 <to-docu.patch

historyは、履歴レコードと実行されたコマンドを表示するために使用されます

フォーマット:

history(选项)(参数)

コマンドを単独で使用すると、履歴コマンドオプションのみが表示されます

-N:履歴内の最新のNレコードを表示します。
-c:現在の履歴コマンドをクリアします。-
a:履歴コマンドバッファ内のコマンドを履歴コマンドファイルに書き込みます。-
r:履歴コマンドファイル内のコマンドを読み取ります。現在の履歴コマンドバッファ;
-w:現在の履歴コマンドバッファコマンドを履歴コマンドファイルに書き込みます;
-d:履歴レコードのオフセットコマンドを削除します
-n:指定されたファイルを読み取ります

パラメーター
n:最後のn個の履歴コマンドを出力します。

[ljs@vm ~]$ history 5  #查看历史执行记录后 5 条
[ljs@vm ~]$ history #查看历史执行记录
[ljs@vm ~]$ !10 #执行历史记录第 10 条命令
[ljs@vm ~]$ !! #执行上一条命令 

topコマンドは、プロセスのダイナミクスをリアルタイムで表示するために使用されます

文法

top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]

パラメータの説明:

  d : 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s
    q : 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行
    c : 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称S : 累积模式,会将己完成或消失的子行程 ( dead child process ) 的 CPU time 累积起来
    s : 安全模式,将交谈式指令取消, 避免潜在的危机
    i : 不显示任何闲置 (idle) 或无用 (zombie) 的行程
    n : 更新的次数,完成后将会退出 top
    b : 批次档模式,搭配 "n" 参数一起使用,可以用来将 top 的结果输出到档案内


プロセス情報の表示

 top

完全なコマンドを表示

top -c

プログラム情報をバッチモードで表示する

 top -b

累積モードでプログラム情報を表示する

top -S

chmodコマンドは、ファイルに対するユーザー権限を制御します

ファイルまたはディレクトリのアクセス許可を変更できるのは、ファイルの所有者とスーパーユーザーのみです。
形式:chmod [-cfvR] [--help] [--version] mode file...
ここに画像の説明を挿入
ファイルまたはディレクトリのアクセス許可を変更できるのは、ファイルの所有者とスーパーユーザーのみです。

たとえば、765は次のように解釈
されます。所有者の権限は数字で表されます。所有者の3つの権限ビットの数の合計です。たとえば、4 + 2 + 1であるrwxは7である必要があります。
ユーザーグループの権限は、グループに属する権限の桁数の合計である数字で表されます。たとえば、4 + 2 + 0であるrw-は6である必要があります。
他のユーザーの権限のデジタル表現:他のユーザーの権限ビット数の合計。たとえば、4 + 0 + 1であるrxは5である必要があります。

最も一般的に使用される形式:

chmod 777 file

おすすめ

転載: blog.csdn.net/weixin_42271802/article/details/109164691
おすすめ