一。回顧#
回顧
// 將/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 查看默認shell (是bash)
// cat /ect/shells 查看機器裡有哪些shell
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:點回車)
# 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:回車後直接打,文本文件裡沒有提示符>)
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
####################################
// 腳本在執行的時候,是從第1條命令,自上而下執行,如果中間有命令執行失敗,後面的命令還是會執行的(Python中間出錯,沒有異常捕獲的話,不再執行)
七. more#
// more命令 分頁顯示 (注1:沒有-n選項,cat有-n選項)
用途:全屏方式分頁顯示文件內容
交互操作方法:
按Enter鍵向下逐行滾動
按空格鍵向下翻一屏、按b鍵向上翻一屏 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:與上面命令比,沒有編號3)
2.取出passwd文件的第5行到10行
#注:這種 先看末尾 用head 因為行數是從前到後計算的
# cat -n /etc/passwd|head |tail -6 (注3:先head取默認前10行,再取後六行)
(注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行輸出兩遍,所以一定要接-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
查找的順序是從左往右找,如果在第1個裡面找到了,就不會往後面找,以此類推
深入理解 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語言文件,文本文件,機器不能識別)
2. 編譯成二進制程序文件
gcc 是 linux 裡的一個編譯器,將 c 源碼文件編譯成二進制文件
gcc 是 linux 裡的一個編譯器,將 c 源碼文件編譯成二進制文件
# yum install gcc -y # gcc -o schello schello.c (注1:-o 輸出一個二進制文件)(注2:編譯schello.c的命令) # ls (↑↑注3:schello產生的文件,schello原來文件) 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
/lianxi/sc:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
(注4:新的PATH變量,前面多了/lianxi/sc:)
[root@sanchuang-linux sc]# which schello(注5:which 可以找到)
/lianxi/sc/schello
# schello (注6:bash可以運行)
hello,world
i am cali
②永久有效
修改文件,添加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結尾,shell腳本
.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非常好的shell解析器 (注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 只能找命令
loacte 也可以查找普通文件、可以查找任何文件
十九. 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:socket文件)(進程與進程通信的文件)
-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:邏輯與,系統默認是與,可不加,表示只有當所給的條件都滿足時,尋找條件才算滿足and
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:\( \)即() 改變了優先級)
find /home !-user hello -exec ls -ld {} \;
\ 轉義字符 (注2:因為小括號()有特殊作用,接上/以後讓它表示只是小括號)
默認情況下-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