mycpen

Mycpen

记录学习历程与受益知识
github
telegram
bilibili

04_Linux基礎-.&..-cat-tac-リダイレクト-EOF-基本コマンド

一。振り返り#

振り返り
//		/home/ディレクトリ内のすべてのファイルとフォルダを/jindafuディレクトリにコピーする
		cp  /home/*  .  -r
#注:フォルダをコピーするには -r を付ける		再帰的にコピー(フォルダに言及されているため)
#注:すべて	ワイルドカード*
//		/etc/hostsファイルをjindafuにコピーし、上書きの警告を表示しない
		cpの絶対パスを使用
			which  cp	でcpのパスを取得
			/usr/bin/cp  /etc/hosts  .
#注:警告を表示しない cpコマンドの絶対パスを入力する		cpコマンドはエイリアスであるため、警告が表示される
//		xienaディレクトリの名前をxienanaに変更する
		mv  xiena/  xienana
//		singerディレクトリ内のすべてのファイルをhejiongディレクトリにコピーする
		cp  haiquan/singer/*  hejiong/
#注:すべて	ワイルドカード*
#注:ファイルをコピーするには -r を付けない
//		すべてのxienanaディレクトリを削除する
		findコマンドまたはtreeでxienanaの場所を確認し、rm  -rf  パスを指定
		find  /hunantv/  -name  “xienana”  -exec  rm  -rf  {} \;
//		ディレクトリ構造を確認する tree  タイプを確認する file
//		echo  $PS1  $PS2 でPS1 PS2を確認する
//		hostname  ホスト名を確認する
//		echo  $SHELL  デフォルトのシェルを確認する  (bashである)
//		cat  /ect/shells  マシンにどのシェルがあるかを確認する
		sh  bash  exit
#/etc	設定ファイルを格納
//		d  ディレクトリ
		-  通常のファイル
		l  リンクファイル
		c  キャラクタデバイスファイル(表示)
		b  ブロックデバイスファイル (ディスク)
//		reboot  マシンを再起動する
//		clear  画面をクリアする
//		エイリアス alias , unalias , vim  /root/.bashrc
//		env  環境変数  set  すべての変数


二. . .. 削除できない#

//		rm  -rf  隠しファイルは削除されない
		rm  -rf  .lixh  隠しファイルを削除する
		.と..は削除できない

三. cat#

//		ls  フォルダ内の内容を確認する
        cat 1.ファイル内の内容を確認する
        	2.複数のファイルを結合して出力することができる
        -n, --number  出力行に番号を付ける
        用途2: cat  tangliangfei.txt  wangtc.txt (結合機能)
        まずtangliangfei.txtの内容を出力し、その後wangtc.txtの内容を出力する

tac と cat#

//		tac 逆順に表示し、最後の行から最初の行まで
			-nは付けられない
		cat 正順に表示し、最初の行から最後の行まで(-nオプションあり)

四。リダイレクト#

//		>  出力リダイレクト、元の内容を上書きし、ファイルが存在しない場合は自動的に新規作成される
			リダイレクト:画面に出力される内容の出力方向を変更し、ファイルに出力すること
		>>  追加出力リダイレクト、元の内容を上書きせず、末尾に追加され、ファイルが存在しない場合は自動的に新規作成される
		>は元の内容を上書きし、>>は上書きせず、末尾に追加する
		# cat  tangliangfei.txt  wangtc.txt  >tang_wang.txt
		# echo 123456789  >>tang_wang.txt 
		(catと>>>の組み合わせを学ぶ)

五. here document#

//		指定された内容のファイルを生成する --》here document  --》主にスクリプトを書く際に指定された内容を生成するために使用される
		//  <<EOF 定義された終了文字列
			EOFを入力すると終了する  end of file 
# cat   >chenpeng.txt  <<EOF  (注1:後ろは必ずEOFである必要はないが、意味のあるものでなければならない)
> chen peng					(注2:1つの>記号で、元の内容が上書きされる)
> jiangsu
> xinhua
> nongda
> linux
> cali
> EOF (注3:Enterを押す)

# cat >>cali.txt <<end(注1:2つの>記号で、内容が追加され、上書きされない)
> sanchuang
> nongda
> changsha

六. Shell スクリプト#

//		shellスクリプト: 実際にはファイルであり、その中に多くのlinuxコマンドが含まれており、このファイルは実行可能で、実行されるとファイル内のすべてのコマンドが実行される
# vim  first_shell.sh
#!/bin/bash(注1:このスクリプトが使用するインタプリタはbashであることを宣言)

mkdir  -p  /test(注2:存在しない場合は新規作成し、存在する場合はエラーを出さない)

cd /test

mkdir sc{1..100}

touch pengyf{1..100}.txt

cp /etc/hosts  /test

cat >sanchuang.txt  <<EOF(注3:Enterを押した後に直接入力し、テキストファイル内にプロンプト>は表示されない)
sanchuang   hunan  changsha  furongqu hunannongda
feng de yong
linux
EOF(注4:終了)

echo "####################################"
cat  -n  sanchuang.txt 
echo "####################################"
スクリプトは完成しました↑↑↑
# bash  first_shell.sh   スクリプトを実行する(注:内容は以下の通り)
####################################
     1	sanchuang   hunan  changsha  furongqu hunannongda
     2	feng de yong
     3	linux
####################################
//		スクリプトが実行されると、最初のコマンドから上から下に実行され、途中でコマンドが失敗しても後のコマンドは実行される(Pythonでは途中でエラーが発生すると、例外処理がない限り実行されない)

七. more#

// moreコマンド  ページ表示 (注1:-nオプションはない、catには-nオプションがある)
		用途:全画面でファイル内容をページ表示する
インタラクティブ操作方法:
     Enterキーを押して1行ずつスクロール
     スペースキーを押して1ページ下にスクロール、bキーを押して1ページ上にスクロール   back
     qキーを押して終了 (注2:表示が終わると自動的に終了し、lessとの違い)
# more  messages 

八. ps aux#

//		# ps aux  現在実行中のLinuxプロセスの情報を確認する--》タスクマネージャー(ps  -auxも可能)
        # ps -aux|more
        # cat messages |more と more messages は同じ
        # cat -n messages |more 行番号を表示

九. less#

// lessコマンド
	用途:moreコマンドと同様だが、拡張機能が多い
	インタラクティブ操作方法:
 	moreコマンドと基本的に似ているが、一部の操作に違いがある
	【page down】【page up】上に下にページをめくる(注1:moreはサポートしていない)
	表示が終わっても終了せず、qを押して終了 (注2:moreとの違い)
	(注3:スペース、b、Enterもサポートされており、moreがサポートしているものはlessもサポートしている)
# less messages 
# cat messages |less

十. head#

// headコマンド(注1:デフォルトで最初の10行を取得し、連続した数行)
        用途:ファイルの先頭の一部の内容を確認する(デフォルトは10行)
        フォーマット:head -n number ファイル名
        フォーマット:head -数字  ファイル名
        cat  -n  passwd  |head  最初の10行を表示(番号付き)
        head  passwd  最初の10行を表示(番号なし)
        head  -5  passwd  最初の5行を表示(番号なし)
        head  -n  5  passwd  最初の5行を表示(番号なし、前のコマンドと同じ効果)

十一. tail#

// tailコマンド
        用途:ファイルの末尾の少しの内容を確認する(デフォルトで10行)
        フォーマット:tail  -n  number ファイル名
        フォーマット:tail  -数字   ファイル名
           tail  -f  ファイル名  = tailf		# 注:tailfの使い方は不明
			#注:tail  -f  ファイルの末尾の変化を動的に監視する
tail  passwd  最後の10行を取得(番号なし)
cat  -n  passwd  |tail  最後の10行を取得(番号付き)
cat  -n  passwd  |tail  -5  最後の5行を取得(番号付き)
cat  -n  passwd  |tail  -1  最後の1行を取得(番号付き)
cat  -n  passwd  |tail  -n  3  最後の3行を取得(番号付き)

tail  -n  2  passwd  最後の2行を表示
tail  -n  -2  passwd  上記と同じ効果
tail  -n  +2  passwd  2行目から末尾まで表示  (注1:行数をカウントする際に、最初の行を表示したくない場合、ディスクのマウントをカウントする際にタイトル行を表示したくない場合)
    (注2:df  -Th  Linuxのディスクパーティションの使用状況を表示)
    df  -Th|tail  -n  +2  タイトル行を表示せずにディスクマウントをカウント
    df  -Th|tail  -n  +2|wc  -l  行数をカウント

# tail -f feng.txt   ファイルの末尾の変化を動的に監視する
(注4:ログファイルの変化を確認するためによく使用され、ログの記録に基づいてエラーを排除する)
(注2:ウィンドウを再度開いて右側でファイル内容を変更し、左側でファイルの末尾の変化を動的に監視し、新しい内容が表示されると表示される)(注3:Ctrl+Cで強制終了)
tail  -f 拡張 
	特にログファイルの監視に適している
        /var  動的に変化するファイルを格納  variable  変数、変化する、可変の
        log  ログ:プログラムが発生した事象を記録する
# cd  /var/log		(注1:/var/logには多くのログファイルが格納されている)
# tail  -f  secure   secureログファイルを確認する (注2:secureは安全)
(注3:別のウィンドウで操作を行い、ログファイルの末尾が動的に更新される)

十二. sed#

    1. passwdの第3行を取得する
    # cat -n /etc/passwd|head -3|tail -1 (注1:最初に3行を取得し、最後の1行を取得する、|パイプを使用)
    # cat  /etc/passwd|head -3|tail -1 (注2:上記のコマンドと比較して、番号は表示されない)
	2. passwdファイルの第5行から10行を取得する
	#注:この場合、末尾を確認するためにheadを使用する、行数は前から後ろに計算される
    # cat -n /etc/passwd|head |tail -6 (注3:最初にheadでデフォルトの最初の10行を取得し、その後6行を取得)
									   (注4:第5行から10行まで、tail  -6ではなく-5)
	# cat -n messages |head -200|tail -101  (100行目から200行目まで)
	3. 第3行、第5行、第10行を取得する
	# sed  -n  '1p;3p;5p'  passwd (注5:-nはオプションで、条件に合う行を表示し、行番号を表示するわけではない)

	練習3拡張
	// sed
		-n の効果:条件に合う行のみを表示する(注9:条件に合わない行は表示されない)
            1p;3p;5p
            1p 1行目を表示する  p はprintコマンド
			; コマンド接続記号
        # cat  -n  passwd  |sed  -n  ‘1p;3p;5p’ (注6:1、3、5行を表示し、番号付き)
        # sed  -n  '1p;3p;5p'  passwd (注7:番号なし)
								      (注10:ダブルクォーテーション””でも可能)
        # cat -n passwd |sed -n  '3p;5p;10p'  不連続の3,5,10行の内容を表示	(このように書くと行番号が表示される)
        # cat -n passwd |sed -n  '3,10p'  3行目から10行目の内容を表示し、中間は連続している

        # cat -n passwd |sed  '3,10p'(注8:sedの後に-nを付けないと、すべての行が表示される[条件に合わない行も含む]、ただし3から10行は2回出力されるため、必ず-nを付ける必要がある)

まとめ:sed  1.連続した行を表示する  2.不連続の行を表示する

十三. grep#

//		grep テキストフィルタリング (フィルタリングするのはファイルであり、フォルダディレクトリではない)
        grep  “root”  /etc/passwd rootを含む行
        grep  “^liang”  /etc/passwd liangで始まる行
        grep  “bash$  /etc/passwd bashで終わる行
        Ctrl + c  終了
//		テキスト処理の三剣客 sed  grep  awk

十四. which#

which  実行可能ファイルを検索し、その位置を表示する
		検索範囲はPATH環境変数によって指定される
    # which  mkdir
    /usr/bin/mkdir
    # cd /usr/bin/
    # ll mkdir
    -rwxr-xr-x. 1 root root 195192 4月  10 02:53 mkdir

    rwxr-xr-x 権限
    r  読み取り  read   --》cat  vim
    w  書き込み  write  --》 vim   >>
    x  実行 execute   ---》実行

    # ll first_shell.sh
    -rw-r--r--. 1 root root…… (注1:スクリプトには実行権限がない)
    # bash  first_shell.sh  (注2:bashを使って実行する)
    # chmod  +x  first_shell.sh  (注3:実行権限を与える)
    -rwxr-xr-x.  root root……  (注4:実行権限が付与された)
    # ./first_shell.sh  (注5:直接実行し、現在のターミナルで実行する、現在のbashで実行)
    # /lianxi/first_shell.sh  (注6:絶対パスで、ファイルを指定して直接実行)
    # chmod  -x  first_shell.sh  (注7:実行権限を取り消す)
    # /lianxi/first_shell.sh 
    -bash: /lianxi/first_shell.sh: 権限が不足しています  (実行権限を取り消した後は直接実行できない)

whereis#

//		whereis コマンドがどこにあるかを検索する(注1:whichに似ている)(注2:あまり重要ではない、manマニュアルがどこにあるかはあまり重要ではない)
		# whereis  mkdir
		mkdir:  /usr/bin/mkdir  /usr/share/man/man1/mkdir.1.gz
								(注2:圧縮ファイルはそのドキュメント)
        1.コマンドの配置パスを確認する
        2.そのコマンドのmanマニュアルのパス(manを実行する際に見る内容の保存パス)
	//whereisとwhichの違い
        whichはmanマニュアルのパスを表示せず、whereisはmanマニュアルのパスを表示する
        # whereis  mkdir
        mkdir:  /usr/bin/mkdir  /usr/share/man/man1/mkdir.1.gz
        # which  mkidr
        /usr/bin/mkdir
	//whereisとwhichはどちらもPATH変数内を検索する(共通点)

十五. PATH#

//PATHはパス
whichコマンドがコマンドを検索する際、PATH変数で指定されたパスを検索する
# which fengdeyong
/usr/bin/which: no fengdeyong in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
(注1:赤い部分がパス  注2:複数のフォルダは:コロンで区切られる)
# echo $PATH  (注3:$PATHはPATH変数を参照する)
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
検索の順序は左から右に行われ、最初のフォルダで見つかった場合はそれ以降は検索されない

PATH 変数の役割を深く理解する#

  1. schello.c というファイルを作成する
# vim schello.c (注1:以下のスクリプトを作成)
#include<stdio.h>
int main(){
	printf("hello,world\n"); (注2:\n 改行)
	printf("i am cali\n");
	return 0;
}
# file schello.c 
schello.c: C source, ASCII text (注3:C言語ファイル、テキストファイル、マシンは認識できない)
  1. バイナリプログラムファイルにコンパイルする

gcc は Linux のコンパイラで、C ソースファイルをバイナリファイルにコンパイルする

image-20220313140253260

gcc は Linux のコンパイラで、C ソースファイルをバイナリファイルにコンパイルする

# yum  install  gcc -y
# gcc  -o  schello  schello.c  (注1:-o  バイナリファイルを出力)(注2:schello.cをコンパイルするコマンド)
# ls		(↑↑注3:schelloが生成されたファイル、schello.cは元のファイル)
schello  schello.c (注2:緑色の実行権限のあるファイルschelloが生成された)
# ll
総用量 20
-rwxr-xr-x. 1 root root 12744 9月  18 15:12 schello
-rw-r--r--. 1 root root    93 9月  18 15:08 schello.c
# ./schello        (注4:./で実行)
# /lianxi/sc/schello  (注5:絶対パスで実行、./相対パスまたは絶対パスでも実行可能)
# schello  実行できない (注6:Linuxはschelloがどこにあるかを知らず、PATH変数内を探すだけである)
-bash: schello:コマンドが見つかりません (注7:PATH変数に現在のパスが含まれていないため、/lianxi/scが含まれていない)
(以下のように解決する)

Linux システムに私たちのコマンドがどこにあるかを知らせるには?#

1.PATH変数に適応させ、私たちのコマンドをPATH変数に既に存在するパスにコピーする
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
# cp  schello  /usr/local/bin/
# schello (注1:成功して実行される)
hello,world
i am cali
# which schello
/usr/local/bin/schello (注2:PATH変数のパスにコピーした後、bashはschelloを見つけることができる)
2.PATH変数を変更し、私たちのコマンドがあるパスを追加する
①一時的にPATH変数を変更する
# PATH=/lianxi/sc:$PATH   一時的にPATH変数を変更する
(注3:最初にPATH変数の値を参照し、/lianxi/sc:という文字列と結合して再度PATH変数に代入する)
(注3:$PATH——>/lianxi/sc:+$PATHを再構成——>PATH変数に代入  右から左に)
# echo $PATH
(注4:新しいPATH変数、前に/lianxi/sc:が追加された)
[root@sanchuang-linux sc]# which schello(注5:whichで見つけられる)
/lianxi/sc/schello
# schello (注6:bashで実行可能)
hello,world
②永続的に有効にする
ファイルを変更し、PATH変数を追加して永続的に有効にする
# vim  /root/.bashrc  
	.bashrcファイルはLinuxシステムが起動する際やユーザーがログインする際に実行されるため、永続的に有効である
PATH=/lianxi/sc:$PATH (注1:最後の行に追加する)
//		mkdirをCで書く

//		# yum  install  python3  -y   python3ソフトウェアをインストール
        # python3 (注1:Python3インタプリタに入る)
        >>> a = 10 (注2:プロンプト>>>
        >>> b = 20 (注4:Pythonはコンパイルを必要とせず、Pythonコードは直接実行され、Pythonインタプリタによって解釈される)
        >>> sg = "tangliangfei"
        >>> c = a  + b
        >>> c
        30
        >>> print(sg) (注3:出力)
        tangliangfei
        >>> exit() (注5:exit()で終了、exit()はexit関数)
//拡張
.pyで終わるファイルはPythonプログラムファイル
.shで終わるファイルはシェルスクリプト
.cで終わるファイルはC言語
# vim  sc_py_hello.py
#!/usr/bin/python3 (注1:which python3——>/usr/bin/python3)
				   (注2:このスクリプトはPythonスクリプトであり、内部のコマンドはPython3インタプリタによって解釈される)
username = input("please input your name:")(注3:引用符内はプロンプトで、何を入力するかを示す)
				   (注4:input()関数は入力を受け取り、usernameに代入する)
age = input("please input your age:")

print(f"your name is {username} ,your age is {age}")(注5:print(f )  構文)
				   (注6:{username}{age} 変数の値を参照)

# ls
schello  schello.c  sc_py_hello.py
# python3  sc_py_hello.py (注7:直接Python3を実行、bash  a.shに似ている)
please input your name:cali
please input your age:18
your name is cali ,your age is 18
[root@sanchuang-linux sc]# cat sc_py_hello.py 
 
# /lianxi/sc/sc_py_hello.py (注1:直接実行できない、以下のように権限が不足している、pwdでパスを確認)
-bash: /lianxi/sc/sc_py_hello.py: 権限が不足しています
# chmod +x sc_py_hello.py (注2:実行権限を与える)
# /lianxi/sc/sc_py_hello.py (注3:直接実行できるようになった)
please input your name:wangtc
please input your age:18
your name is wangtc ,your age is 18

//どのようにしてsc_py_hello.pyをPATH変数で実行するか
    # which  sc_py_hello.py (注1:実行可能、以前にPATH変数にこのパスを追加したため(/lianxi/sc))
    # sc_py_hello.py (注2:実行可能、以前にPATH変数にこのパスを追加したため(/lianxi/sc))
    # echo  $PATH
    /lianxi/sc:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
  まとめ:使用する言語に関係なく
		1.それをPATH変数のあるパスに置き、2.実行権限を与えれば直接実行できる
    # chmod  -x  sc_py_hello.py (注3:実行権限を取り消す)
    # sc_py_hello.py  (注4:実行権限がない場合、PATH変数のあるパスに置いても直接実行できない)
	-bash:  /lianxi/sc/sc_py_hello.py: 権限が不足しています
  まとめ:Pythonプログラムを書く際は、必ず1.実行権限を与え、2.それをPATH変数のあるパスに置かなければならない、さもなくば実行できない
    //拡張  (注2:まとめ:ファイル名が長く、短いコマンドを入力したい場合、エイリアスを考慮する [ショートカット])
    # alias sc_py_hello=sc_py_hello.py   エイリアスを定義し、コマンドの長さを短縮できる
    # sc_py_hello(注1:長いコマンドを入力したくない場合、エイリアスを使用できる、エイリアスは怠けるために使用できる)
    please input your name:feng (正常に実行され、条件はPATH変数のパスにあり、実行権限があること)
    please input your age:19
    your name is feng ,your age is 19
    # which sc_py_hello
    alias sc_py_hello='sc_py_hello.py'
		/lianxi/sc/sc_py_hello.py

十六. bash#

	//bashはLinuxの非常に優れたシェルインタプリタである (注1:2つのことを行う必要がある)
		1.コマンドを検索する --》PATH変数のパス内
		2.カーネルにコマンドを起動するように指示する(このコマンドを実行する)

十七. /usr#

// /usr  Linuxプログラムを格納するディレクトリ   unix  system  resource 
    /usr/bin  バイナリプログラムを格納し、すべてのユーザーが使用できる  binary
    /usr/sbin   バイナリプログラムを格納し、比較的高い権限(root)のユーザーが実行するプログラム  super user binary
        # which  useradd(注1:useraddコマンドのパスを検索)
        /usr/sbin/useradd (注2:sbinディレクトリに格納されている)
        # su  -  xulilin (注3:通常ユーザーに切り替える)
        $ which  useradd
        $ /usr/sbin/useradd
        $ useradd  xu123 (注4:通常ユーザーはsbin/下の高権限コマンドを実行できない)
        ……エラーuseradd:Permission denied (注5:権限が拒否された)

十八. locate#

//		locate 知識点(注4:インストールが必要)(注5:頻繁に更新する必要がある # updatedb)
# yum provides locate -y  locateがどのソフトウェアパッケージによって提供されているかを確認する(注1:新しい知識点)
mlocate-0.26-20.el8.x86_64 : An utility for finding files by name
(注3:yum  provides …… -y どのコマンドがどのソフトウェアパッケージによって提供されているかを確認する)
(注2:結果からmlocateがlocateコマンドを提供していることがわかる)
# yum install  mlocate -y mlocateソフトウェアをインストール
locateコマンド
フォーマット:locate ファイル名
(注5:locateは自分のデータベースを検索し、具体的に/以下を検索し、必ず自分のデータベースを更新する必要がある)
毎日更新されるデータベース(/var/lib/mlocate)を基に検索し、速度が速い
	/var/lib/mlocate/mlocate.db
	database  データベース(注6:dbの説明)
データベースの内容は/ディレクトリ内の内容に基づいて生成される
データベースは毎日自動的に更新される	/var/lib/mlocate/mlocate.db
手動でデータベースを更新するにはupdatedbを使用
# updatedb   データベースmlocate.dbを生成および更新する (注1:手動で更新)
# cd /var/lib/mlocate/
# ls
mlocate.db
# locate mkdir(注2:Linuxシステム内でファイル名にmkdirを含むファイルをすべて見つける)
/usr/bin/mkdir
/usr/lib/python3.6/site-packages/pip/_vendor/lockfile/mkdirlockfile.py
/usr/lib/python3.6/site-packages/pip/_vendor/lockfile/__pycache__/mkdirlockfile.cpython-36.opt-1.pyc
/usr/lib/python3.6/site-packages/pip/_vendor/lockfile/__pycache__/mkdirlockfile.cpython-36.pyc
/usr/share/man/man1/mkdir.1.gz
# which mkdir(注3:ただ/usr下のmkdirを見つける、他の場所のmkdirは見つからない)
/usr/bin/mkdir
locateの検索範囲:
	/--》mlocate.db内を検索する(注2:自分のデータベースmlocate.db内を検索する)
	方法:あいまい検索、ファイル名に含まれていればよい
	欠点:新しいファイルは、データベースが更新されていない場合、見つからないことがある --》updatedb(注3:手動でデータベースを更新)
	任意のファイルを検索できる(注4:新しいファイル、# updatedbで手動更新しないと見つからない)
	whichは検索範囲:
		精密検索(注1:ファイル名は完全に一致する必要がある)
		コマンドのみを検索できる

which、whereis、locate、find#

//		which、whereis、locate、find コマンドの検索類
        Which、whereis  コマンドのみを検索できる
        locate  どんなファイルも検索できる、任意のファイルを検索できる

十九. find#

//* find コマンド

​ フォーマット:find [検索範囲] [検索条件] [アクション]

​ find は 1. コマンド、2. ファイルを検索できる(すなわち任意のファイル)

​ (注 1:which、whereis、locate のすべての機能を統合している)

​ find コマンド

​ 用途:ファイルまたはディレクトリを検索する

​ フォーマット:find [検索範囲] [検索条件] [アクション]

​ 一般的な検索条件

​ ==-name==:ファイル名で検索

​ ==-iname==:ファイル名で検索、大文字と小文字を区別しない

​ ==-size==:ファイルサイズで検索

​ -user:ファイルの所有者で検索

​ ==-type==:ファイルタイプで検索

​ -perm :ファイル権限で検索

​ ==-mtime== :ファイルの変更時間で検索

​ -newer:特定のファイルより新しいファイルを検索

-nameと-iname
    # find /lianxi  -name "lixh.txt"(注1:正確に検索、-nameはファイル名に基づく)
    /lianxi/lixh.txt
    # find  / -name  "schello"(注2:正確に検索、/下で検索可能)
    /lianxi/sc/schello
    # find  / -name  "schello*"(注3:*あいまい検索、/下で検索可能)
    /lianxi/sc/schello.c
    /lianxi/sc/schello
    # find  / -name  "li*.txt"(注4:*あいまい検索)
    # find  / -iname  "lixh.txt" (注5:-inameはファイル名を大文字と小文字を区別せずに検索)
    /lianxi/lixh.txt
    /lianxi/LIXH.TXT
-size (サイズ)
    # ll  -h  フォルダ内の各ファイルのサイズを確認
    # du  -a フォルダ内の各ファイルのサイズを確認(単位KB)
     du  -ah  フォルダ内の各ファイルのサイズを確認 (単位K、M、G)
    # find  /boot  -size  +1M(注1:+1M 1Mより大きいものをすべて見つける)(注2:-1M、1M:1Mより小さい、1Mと等しい)
    /boot/grub2/fonts/unicode.pf2  (注3:検索結果はあまり正確ではない)
    /boot/initramfs-4.18.0-193.el8.x86_64kdump.img
    /boot/initramfs-4.18.0-193.el8.x86_64.img
-type (タイプ)
    # find  .  -type  d (注1:ディレクトリを検索)
    # find  .  -type  f (注2:通常のファイルを検索)
    # find  .  -type  l (注3:リンクファイルを検索)
    # find  .  -type  c (注4:キャラクタデバイスファイルを検索)
    # find  .  -type  b (注5:ブロックデバイスファイルを検索)
    # find  .  -type  p (注6:パイプファイルを検索)
    # find  .  -type  s (注7:ソケットファイルを検索)(プロセス間通信のファイル)
-mtime (24時間単位で) ファイルの変更時間で検索
-mmin  (分単位)
    # find  .  -time  +1  1日前
    # find  .  -time  -1  1日以内
    # find  .  -mmin  -30  30分以内
    # find  .  -mmin  +30  30分以上前
-user (どのユーザーが作成したファイル)(あまり役に立たない)
    # find  .  -user  root
    # find  /  -user  cali
-newer (特定のファイルより新しいファイルを検索)
	# find  .  -newer  feng.txt
//	特殊検索条件
-o :論理和、与えられた条件のいずれかが満たされれば、検索条件は満たされる or
-not :論理否定、コマンド内では“!”で表される。この演算子は、与えられた条件を満たさないファイルを検索することを示す
-a:論理積、システムはデフォルトで論理積を使用するため、付けなくてもよい、与えられた条件がすべて満たされる場合にのみ、検索条件が満たされる
  find  /boot -size +1024k  -a -name “vmlinuz*”(注1:論理積 -aは省略可能、システムはデフォルトで論理積を使用する)
  find  /boot -size +1024k  -o -name “vmlinuz*
  find  .  -user nie  -type f   -size  +1k  -o  -name  "vmlinuz*" 
  find  .  -user nie  -type f  \( -size +1k -o -name "vmlinuz*" \)  (注3:()は優先順位を変更し、\は以下で説明する)(注5:\(  \)()  優先順位を変更する)
  デフォルトでは-aの優先順位が高く、論理積(-a)が最初に実行され、次に論理和(-o)が実行される
# find  / -iname "*.conf"  -size +1k  -type f  -user root -o -size +10M
(注4:前の条件を組み合わせて、-oの前の条件を満たすか、-oの後の条件を満たすかのいずれかを満たす)
//	拡張、上記のコマンドに -exec -okを追加
	  # find  /lianxi  -name  "li*.txt"  -exec  rm -rf  {}  \;(注1:前は検索、-execは実行するアクションを示す)関連説明は以下
    -exec  後ろのコマンドを実行する
    rm -rf  具体的な削除コマンド
    {}  前のfindで見つかった内容を表し、前のfindで見つかった内容を格納するコンテナとして理解する
    \; findコマンドの終了記号を示す
    # find /lianxi -name "*.txt"  -size +1k  -type f  -exec cp {} /fengdeyong \;
    (注2:.txtで終わるファイル、サイズが1kを超えるファイルをfengdeyongにコピーする)
    (注3:findは/lianxiの各レベルを検索する)
    -ok
    -okは確認を求めてから実行する
    # find . -name "*wang*" -ok rm -rf {} \;
    < rm ... ./wangtc.txt > ? y
    < rm ... ./tang_wang.txt > ? y

まとめ:-execはコマンドを実行し、確認なし(スクリプトを書くときによく使用され、便利)
	 -okはコマンドを実行する前に確認を求める
-maxdepth  ファイルを検索する際のディレクトリの深さ
    # find  .  -name  bb
    ./aa/bb
    ./aa/bb/bb
    ./bb
    # find  .  -maxdepth  1  -name  bb(注2:1レベルのみを検索)
    ./bb
    # find  .  -maxdepth  2  -name  bb(注3:2レベルのみを検索)
    ./aa/bb
    ./bb
    # find  .  -maxdepth  3  -name  bb(注4:3レベルのみを検索)
    ./aa/bb
    ./aa/bb/bb
    ./bb
    (注1:-maxdepthを付けない場合、すべてのレベルを検索する)
    # find /lianxi  -name  "*.txt"
    (注6:-maxdepthを付けない場合、アイテムが多すぎて深すぎる)
    /lianxi/tangliangfei.txt
    /lianxi/chenpeng.txt
    /lianxi/cali.txt
    /lianxi/feng.txt
    /lianxi/aa/bb/feng.txt
    /lianxi/aa/feng.txt
    # find /lianxi -maxdepth 1 -name  "*.txt"
    (注5:この場合が多い、1レベルだけを検索し、/lianxiの下のサブフォルダやサブサブフォルダは検索しない)
    /lianxi/tangliangfei.txt(注7:以下のように表示される)
    /lianxi/chenpeng.txt
    /lianxi/cali.txt
    /lianxi/feng.txt
//		!否定の使用、上記のコマンドに接続(注1:lianxiの下で*.txtでないもの)
    # find  /lianxi  -maxdepth  1  !  -name  "*.txt"(後ろの条件を否定するだけ)
    /lianxi
    /lianxi/passwd
    /lianxi/first_shell.sh
    /lianxi/messages
    /lianxi/sc
    /lianxi/LIXH.TXT
    /lianxi/aa
    /lianxi/bb
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。