Linux 文件管理、查看、編輯、查找命令及BASH特性

1、文件管理類命令總結

 1cp命令:copy 

                  源文件 :目標文件          

單源復制 :cp [OPTION]… [-T] SOURCE DEST  (源文件只有一個,可以是文件也可以目錄)

多源復制 :cp [OPTION]… SOURCE… DIRECTORY

                     cp [OPTION]… -t DIRECTORY SOURCE…(是上一種方式的另一種形式,把目標目錄放到 前邊)

 

單源復制 :cp [OPTION]… [-T] SOURCE DEST 

如果DEST不存在,則事先創建此文件 ,并復制源文件 的數據流至DEST中。

如果DEST是非目錄文件 :則覆蓋目標文件

如果DEST是目錄文件 :則先在DEST目錄下創建一個與源文件同名的文件 ,并復制其數據流至目標文件 。

 

~]# cp test1  test

 

多源復制 :cp [OPTION]… SOURCE… DIRECTORY

如果DEST不存在:錯誤

如果DEST是目錄文件 :分別復制每個文件至目錄中。

-i: 交互式復制:即覆蓋之前提醒用戶確認。

-f:強制覆蓋目標文件:

-r:遞歸復制目錄;

-d:復制符號鏈接文件本身,而非其指向的源文件

-a:-dR –preserve=all ,archive,用于實現歸檔 ,可以理解為備份。

–preserve

mode:權限                   

ownership:屬主和屬組

timestamps:時間戳

context:安全標簽

xattr:擴展屬性

links:符號鏈接

 all:上述所有屬性

~]# cp -r myfile test(復制目錄)

~]# cp test1 test2 test  (復制文件)

~]# cp -a test2 myfile  (復制時保留元數據,用于歸檔)

 

2mv命令:move  

mv [OPTION]… [-T] SOURCE DEST

mv [OPTION]… SOURCE… DIRECTORY

mv [OPTION]… -t DIRECTORY SOURCE…           

-i: 交互式:即覆蓋之前提醒用戶確認。

-f:強制覆蓋目標文件:

cp唯一的區別是多了一個刪除的操作。

在同一個目錄下mv的結果是重命名。

 

3)rm [OPTION]… FILE…

常用選項:

-i:interactive

-fforce

-rrecursive

刪除目錄:rm -rf /home/ls/lssdf        

危險操作:rm -rf /*

注意:所有不用的文件建議不要直接刪除,而是移動至某個專用目錄:(模擬回收站)。

4)install命令:

install – copy files and set attributes

 

單源復制:

install [OPTION]… [-T] SOURCE DEST

多源復制:

install [OPTION]… SOURCE… DIRECTORY

install [OPTION]… -t DIRECTORY SOURCE…

創建目錄:

install [OPTION]… -d DIRECTORY…

常用選項:

-o, –owner=OWNER:設定目標文件屬主;

-g, –group=GROUP:設定目標文件屬組;

 

例:   ~]# install -o liuwei -d t4 t5

 ~]# ll -d t4

         drwxr-xr-x. 2 liuwei root 6 10月  9 21:24 t4

 

 

5)mktemp命令:

mktemp – create a temporary file or directory

mktemp [OPTION]… [TEMPLATE]

常用選項:

-d:創建臨時目錄

 

例:~]# mktemp -d /tmp/wei.XXXX

/tmp/wei.da0t

 

注意:mktemp會將創建的臨時文件名直接返回,因此,可直接通過命令引用保存起來;

例:~]# mktemp -d /tmp/wei.XXXX > test1

          6)目錄管理類的命令:

mkdir :創建目錄

 -p :自動按需創建父目錄

 -vverbose,顯示創建過程

-mmode :直接給定權限

注意:路徑基名方為命令的作用對象:基名之前的路徑名必須得存在。

例: mkdir -pv /tmp/x/{y1/{a,b},y2}

 

 rmdir  刪除空目錄

 -p:刪除某目錄后,如果其父目錄為空,則一并刪除之;

 -v:顯示過程;

2、Bash特性總結:     

  1. 命令補全

shell 程序在接收到用戶執行命令的請求,分析完成之后,最左側的字符串會被 當作命令:

命令查找機制:

  1. 查找內部命令

  2. 根據PATH環境變量中設定的目錄, 自左而右逐個搜索目錄下文件名:

    1. 給定的打頭字符串如果能惟一標識某命令程序文件,則直接補全;

    2. 不能唯一標識某命令程序文件 ,再擊tab鍵一次,會給出列表。

  1. 路徑補全:

在給定的起始路徑下,以對應路徑下打頭字串來逐一匹配起始路徑下的每個文件

tab

如果能惟一標識:則直接補全:

否則 :再一次tab,給出列表

  1. 命令行展開

~:自動展開為用戶的家目錄,或指定的用戶的家目錄:~]# cd ~liuwei

{}:可承載一個以逗號分隔的路徑列表,并能夠將其展開為多個路徑;

例:/tmp/{a,b} 相當于 tmp/a /tmp/b

例:mkdir -pv /tmp/x/{y1/{a,b},y2}相當于創建

       

[root@ACA802E7 x]# tree

.

├── y1

│   ├── a

│   └── b

└── y2

 

例:創建/tmp下的a_c,a_d,b_c,b_d

 ~]# mkdir -v /tmp/{a,b}_{c,d}

mkdir: 已創建目錄 "/tmp/a_c"

mkdir: 已創建目錄 "/tmp/a_d"

mkdir: 已創建目錄 "/tmp/b_c"

mkdir: 已創建目錄 "/tmp/b_d"

例:創建/tmp目錄下的mylinux/

mylinux]# tree

.

├── bin

├── boot

│   └── grub

├── dev

├── etc

│   ├── rc.d

│   │   └── init.d

│   └── sysconfig

│       └── network-scripts

├── lib

│   └── modules

├── lib64

├── proc

├── sbin

├── sys

├── tmp

├── usr

│   └── local

│       ├── bin

│       └── sbin

└── var

    ├── lock

    ├── log

    └── rum

 

tmp]# mkdir -pv /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var/{lock,log,rum}}

mkdir: 已創建目錄 "/tmp/mylinux"

mkdir: 已創建目錄 "/tmp/mylinux/bin"

mkdir: 已創建目錄 "/tmp/mylinux/boot"

mkdir: 已創建目錄 "/tmp/mylinux/boot/grub"

mkdir: 已創建目錄 "/tmp/mylinux/dev"

mkdir: 已創建目錄 "/tmp/mylinux/etc"

mkdir: 已創建目錄 "/tmp/mylinux/etc/rc.d"

mkdir: 已創建目錄 "/tmp/mylinux/etc/rc.d/init.d"

mkdir: 已創建目錄 "/tmp/mylinux/etc/sysconfig"

mkdir: 已創建目錄 "/tmp/mylinux/etc/sysconfig/network-scripts"

mkdir: 已創建目錄 "/tmp/mylinux/lib"

mkdir: 已創建目錄 "/tmp/mylinux/lib/modules"

mkdir: 已創建目錄 "/tmp/mylinux/lib64"

mkdir: 已創建目錄 "/tmp/mylinux/proc"

mkdir: 已創建目錄 "/tmp/mylinux/sbin"

mkdir: 已創建目錄 "/tmp/mylinux/sys"

mkdir: 已創建目錄 "/tmp/mylinux/tmp"

mkdir: 已創建目錄 "/tmp/mylinux/usr"

mkdir: 已創建目錄 "/tmp/mylinux/usr/local"

mkdir: 已創建目錄 "/tmp/mylinux/usr/local/bin"

mkdir: 已創建目錄 "/tmp/mylinux/usr/local/sbin"

mkdir: 已創建目錄 "/tmp/mylinux/var"

mkdir: 已創建目錄 "/tmp/mylinux/var/lock"

mkdir: 已創建目錄 "/tmp/mylinux/var/log"

mkdir: 已創建目錄 "/tmp/mylinux/var/rum"

 

注:tree命令需要安裝:用來展示目錄樹

        tree [options] [directory]

                -L level: 指定要顯示的層級

  1. 命令的執行狀態結果

    1. bash通過狀態返回值來輸出此結果 。     

成功:0

失?。?/span>1-255

命令執行完成之后 ,其狀態返回值保存于bash的特殊變量$?中。

  ~]# lss

 ~]# echo $?

127

~]# ls

~]# echo $?

0

  1. 命令正常執行時,有的還會有命令返回值 。

根據命令及其功能不同,結果各不相同:

引用命令的執行結果:

$(COMMAND)

'COMMAND'  反引號(在~那個按鍵上面)

   ~]# echo `ls`    echo $(ls)

  1. 引用

強引用 :‘’直接引用  

~]# echo '$SHELL'

$SHELL

弱引用 :“” 將變量替換成變量所存儲的值

~]# echo "$SHELL"

/bin/bash

命令引用 ` ` 反引號

~]# echo `ls`

fstab liuwe.vVvb myfile t1 t2 t3 t4 t5 test test1 test2 wei.da0t

 

  1. 快捷鍵

ctrl+a: 跳轉至命令行行首

ctrl+e :跳轉至命令行行尾。

ctrl+u:刪除行首至光標所在處之間的所有字符

ctrl+k:刪除光標所在處至行尾的所有字符。    

ctrl+l:清屏  ,相當于clear命令

 

 

  1. 命令歷史 shell進程會在在其會話中保存此前用戶提交執行過的命令。

#history

定制hisotry的功能,可通過環境變量實現:

HISTSIZE:   shell進程可保留的命令歷史的條數:

HISTFILE:持久保存命令歷史的文件

                        .bash_history

HISTFILESIZE:命令歷史文件的大小

 

命令用法

history [-c] [-d 偏移量][n]

history -anrw [文件名]

history  -ps 參數  [參數…]

-c :清空命令歷史

-d offset:刪除指定命令歷史

-r : 從文件讀取命令歷史至歷史列表中,    ~]# history -r .bash_history

-w:把歷史列表中的命令追加至歷史文件中

 history #:顯示最近的#條命令

~]# history 3

 2187  locate -r  ".*liuwei"

 2188  locate -r  ".*liuwei$"

 2189  history 3

     

調用命令歷史列表中的命令:

!#:再一次執行

??!:再一次執行上一條命令

!STRING:再一次執行命令歷史列表中最近一個以STRING開關的命令

注意:命令的重復執行有時候需要依賴于冪等性。

                  

調用上一條命令的最后一個參數:

快捷鍵:      ESC  +(松開) .

字符串:!$

/]# cd ..

[root@ACA802E7 /]# !$

..

控制命令歷史記錄的方式:

環境變量:HISTCONTROL

  值:ignoredups:忽略重復的命令

ignorespace:忽略以空白字符開頭的

ignoreboth:以上兩者同時生效

修改變量的值

NAME='VALUE'

(8) 多命令執行

~]# COMMAND1; COMMAND2; COMMAND3; …

邏輯運算:

運算數:真(true, yes, on, 1)

    假(false, no, off, 0)

 

與:

1 && 1 = 1

1 && 0 = 0

0 && 1 = 0

0 && 0 = 0

或:

1 || 1 = 1

1 || 0 = 1

0 || 1 = 1

0 || 0 = 0

非:

! 1 = 0

! 0 = 1

 

短路法則:

~]# COMMAND1 && COMMAND2

COMMAND1為“假”,則COMMAND2不會再執行;

否則,COMMAND1為“真”,則COMMAND2必須執行;

 

~]# COMMAND1 || COMMAND2

COMMAND1為“真”,則COMMAND2不會再執行;

否則,COMMAND1為“假”,則COMMAND2必須執行;

 

示例:~]# id $username || useradd $username

(9) 命令hash

緩存此前命令的查找結果:key-value

key:搜索鍵

value:值

 

hash命令:

hash:列出

hash -d COMMAND:刪除

hash -r:清空

(10) 變量

程序:指令+數據

指令:由程序文件提供;

數據:IO設備、文件、管道、變量

程序:算法+數據結構

變量名=指向的內存空間

變量賦值:name=value

變量類型:存儲格式、表示數據范圍、參與的運算

編程語言:

強類型變量

弱類型變量:

bash把所有變量統統視作字符型;(不支持符點 類型,除非借助外界工具)

bash中的變量無需事先聲明;相當于,把聲明和賦值過程同時實現;

聲明:類型,變量名

 

變量替換:把變量名出現的位置替換為其所指向的內存空間中數據;

變量引用:${var_name}, $var_name

變量名:變量名只能包含數字、字母和下劃線,而且不能以數字開頭;

變量名:見名知義,命名機制遵循某種法則;不能夠使用程序的保留字,例如if, else, then, while等等;

 

bash變量類型:

        普通:zsh,2b:bash,文藝青年:fi sh

本地變量:作用域僅為當前shell進程;

環境變量:作用域為當前shell進程及其子進程;

局部變量:作用域僅為某代碼片斷(函數上下文);

 

位置參數變量:當執行腳本的shell進程傳遞的參數;

特殊變量:shell內置的有特殊功用的變量;

 

$?:

0:成功

1-255:失敗

 

本地變量:

變量賦值:name=value

變量引用:${name}, $name

"":變量名會替換為其值;

'':變量名不會替換為其值;

查看變量:set

撤銷變量:unset name

注意:此處非變量引用;

 

環境變量:

變量賦值:

(1) export name=value

(2) name=value

    export name

(3) declare -x name=value

(4) name=value

declare -x name

變量引用:${name}, $name

 

注意:bash內嵌了許多環境變量(通常為全大寫字符),用于定義bash的工作環境

PATH, HISTFILE, HISTSIZE, HISTFILESIZE, HISTCONTROL, SHELL, HOME, UID, PWD, OLDPWD

 

查看環境變量:export, declare -x, printenv, env

撤銷環境變量:unset name

 

只讀變量:

(1) declare -r name

(2) readonly name

 

只讀變量無法重新賦值,并且不支持撤銷;存活時間為當前shell進程的生命周期,隨shell進程終止而終止;

(11) 命令別名:alias

            查看別名:~]#alias

定義別名:

~]#alias  NAME="COMMAND"

注意:僅對當前shell進程有效

撤銷別名: unalias

~]#unalias  NAME

 

(12) globbing文件名通配(整體文件匹配,而非部分)

匹配模式:元字符

 *:匹配任意長度的任意字符

 pa* ,*pa*,*pa,*p*a*

 pa,paa,passwd

 ?:匹配任意單個字符

pa? ,??aa,p?a,p?a?

paa

[]:匹配指定范圍內的任意單個字符

有幾種特殊格式:

[a-z],[a-z],[0-9] ,[a-z0-9]

[[:upper:]]:所有 大寫字母

[[:lower:]]:所有小寫字母

[[:alpha:]]:所有字母 .

[[:digit:]]:所有數字

[[:alnum:]]:所有的字母和數字

[[:space:]]:所有空白字符

[[:punct:]]:所有標點符號             

[ ^]:匹配指定范圍外的任意單個字符

[^[:upper:]]

[^0-9]

[^[:alnum:]]

例:顯示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間至少出現一位數字(可以有其它字符)的文件目錄。

        var]# ls -d l*[[:digit:]]*[[:lower:]]

例:顯示/etc目錄下,以任意一個數字開頭,且以非數字結尾的文件或目錄

 ~]# ls  -d /etc/[[:digit:]]*[^[:digit:]]

例:顯示/etc目錄下,以非字母開頭,后面跟了一個字母以及其它任意長度任意字符的文件或目錄。

~]# ls -d /etc/[^[:alpha:]][[:alpha:]]*

例:在/tmp目錄下創建以tfile開頭,后跟當前日期和時間的文件,文件名形如:tfile-2016-05-27-09-32-22

tmp]# touch tfile-`date +%Y`-`date +%m`-`date +%d`-`date +%H`-`date +%M`-`date +%S`

例:復制/etc目錄下所有以p開頭,以非數字結尾的文件或目錄到/tmp/mytest1目錄中。

tmp]# cp -r /etc/p*[^[:digit:]] /tmp/mytest1

例:復制/etc/目錄下所有以.d結尾的文件或目錄至/tmp/mytest2目錄中。

~]# cp -r /etc/*.d /tmp/mytest2

例:復制/etc/目錄下所有以lmn開頭,以.conf結尾的文件至/tmp/mytest3目錄中。

~]# cp /etc/[lmn]*.conf /tmp/mytest3

(13)IO重定向及管道

程序:指令+數據

程序:IO,在不指定輸入輸出時,有默認的輸入輸出,如后臺服務。

可用于輸入的設備:文件

鍵盤設備、文件系統上的常規文件、網卡等;

可用于輸出的設備:文件

顯示器、文件系統上的常規文件、網卡等;

程序的數據流有三種:

輸入的數據流;<– 標準輸入(stdin),鍵盤;

輸出的數據流:–> 標準輸出(stdout),顯示器;

錯誤輸出流:  –> 錯誤輸出(stderr),顯示器;

fd: file descriptor,文件描述符

標準輸入:0

標準輸出:1

錯誤輸出:2

 

1)IO重定向:

輸出重定向:>

特性:覆蓋輸出  (慎用)

輸出重定向:>>

特性:追加輸出

~]# set -C 僅對當前的shell進程有效。

禁止覆蓋輸出重定向至已存在的文件;

此時可使用強制覆蓋輸出:>|

~]# set +C

關閉上述特性

錯誤輸出流重定向:2>, 2>>

合并正常輸出流和錯誤輸出流:

(1) &>, &>>

(2) COMMAND > /path/to/somefile 2>&1

    COMMAND >> /path/to/somefile 2>&1

特殊設備:/dev/null

輸入重定向:<

tr命令:

tr [OPTION]… SET1 [SET2]

把輸入的數據當中的字符,凡是在SET1定義范圍內出現的,通通對位轉換為SET2出現的字符

刪除鍵:按住ctrl鍵再按后退鍵。

                                             用法1:

tr SET1 SET2 < /PATH/FROM/SOMEFILE

用法2:

tr -d SET1 < /PATH/FROM/SOMEFILE

注意:不修改原文件

                                        Here Document:<<

cat << EOF

cat > /PATH/TO/SOMEFILE << EOF

2)管道:連接程序,實現將前一個命令的輸出直接定向后一個程序當作輸入數據流

COMMAND1 | COMMAND2 | COMMAND3 | …

tee命令:

COMMAND | tee /PATH/TO/SOMEFILE

練習1:把/etc/passwd文件的前6行的信息轉換為大寫字符后輸出;

head -n 6 /etc/passwd | tr 'a-z' 'A-Z'

3、文本文件查看及編輯類命令總結

cat , tac ,  head , tail  , more , less  |   wc, cut, sort, uniq, diff, patch

   

分屏查看命令:more  less

more命令:more FILE:

特點:  翻屏至文件尾部后自動退出

less 命令:less FILE            

 

head  命令:查看文件 n 行:

head [options] file

-n  #

-#

tail 命令:查看文件 n行:

 tail [options] FILE

-n #

-#

 -f  :查看文件尾部內容結束后不退出 ,跟隨顯示新增 的行。

stat 命令: 查看文件的元數據,即文件的屬性

stat  FILE 

文件:兩類數據

元數據 metadata  :相當于一本書的目錄頁,屬性內容

數據 data   :一本書的內容

時間戳:

access time :最近訪問:2016-09-07 19:46:04.027932162 +0800

modify time 最近更改:2016-09-07 19:46:04.026932162 +0800

change time  :最近改動:2016-09-07 19:46:04.026932162 +0800

最近更改是指數據發生改變。

最近改動是指元數據改變 。       

使用stat 看到的文件數據為元數據 ,使用cat等看到的文件內容為數據

~]# stat test1

  文件:"test1"

  大小:65                塊:8          IO 塊:4096   普通文件

設備:fd00h/64768d        Inode:206368246   硬鏈接:1

權限:(0644/-rw-r–r–)  Uid:(    0/    root)   Gid:(    0/    root)

環境:unconfined_u:object_r:admin_home_t:s0

最近訪問:2016-10-09 22:20:51.919309719 +0800

最近更改:2016-10-09 22:20:47.805240953 +0800

最近改動:2016-10-09 22:20:47.805240953 +0800

創建時間:-

 

touch命令:用于更改 atime ,mtime 時間戳信息

touch [OPTION]… FILE…

-c:指定的文件路徑不存在時不予創建

-a:僅修改access time

-m:僅修改modify time             

-t:

use [[CC]YY]MMDDhhmm[.ss] instead of current time

 cat命令:查看文件內容

 cat [OPTION]… [FILE]…

-n   :給顯示 的所有行統一編號

-E: 顯示行結束符$

 tac命令:逆序顯示文件內容

tac [OPTION]… [FILE]…

-n   :給顯示 的所有行統一編號

-E: 顯示行結束符$

file命令:  查看文件內容類型

file [FILE] ….

echo:回顯

echo [SHORT-OPTION]… [STRING]…

-n  :不進行換行

-e:讓轉義符生效

\t 制表符

\b 退格鍵

\n 回車

可以實現顏色控制

STRING:可以使用引號,單引號和雙引號均可用:

單引號:強引用,變量引用不執行替換

]#echo '$SHELL'

雙引號:弱 引用 ,變量引用會被替換

~]# echo "$SHELL"

 

文本查看及處理工具

wc, cut, sort, uniq, diff, patch

 

wc:word count字數統計

wc  [OPTION]…  [FILE]…

-l: lines

-w:words

-c: bytes

 

cut:剪切出需要的列

cut OPTION… [FILE]…

OPTION:

-d CHAR:以指定的字符為分隔符;

-f FIELDS:挑選出的字段;

#:指定的單個字段;

#-#:連續的多個字段;

#,#:離散的多個字段;

 

sort:對內容進行排序

sort  [OPTION]…  [FILE]…

-n:基于數值大小而非字符進行排序;

-t CHAR:指定分隔符;

-k #:用于排序比較的字段;

-r:逆序排序;

-f:忽略字符大小寫

-u:重復的行只保留一份;

重復行:連續且相同;

 

uniq:報告或移除重復的行

uniq [OPTION]… [INPUT [OUTPUT]]

-c:顯示每行的重復次數;

-u:僅顯示未曾重復過的行;

-d:僅顯示重復過的的行;

 

diff:compare files line by line  :比較兩個文件的不同點

diff [OPTION]… FILES

diff  /PATH/TO/OLDFILE  /PATH/TO/NEWFILE > /PATH/TO/PATCH_FILE

-u:使用unfied機制,即顯示要修改的行的上下文,默認為3行;

 

patch:向文件打補丁

patch [OPTIONS] -i /PATH/TO/PATCH_FILE /PATH/TO/OLDFILE

patch /PATH/TO/OLDFILE < /PATH/TO/PATCH_FILE

 

4、文件查找命令

 

在文件系統上查找符合條件的文件;

 

實現工具:locate, find

 

locate:

依賴于事先構建好的索引庫;

系統自動實現(周期性任務);

手動更新數據庫(updatedb);

工作特性:

查找速度快;

模糊查找;

非實時查找;

locate  [OPTION]…  PATTERN…

-b:只匹配路徑中的基名;

-c:統計出共有多少個符合條件的文件;

-r:BRE

注意:索引構建過程需要遍歷整個根文件系統,極消耗資源;

 

find:

實時查找工具,通過遍歷指定起始路徑下文件系統層級結構完成文件查找;

工作特性:

查找速度略慢;

精確查找;

實時查找;

用法:

find [OPTIONS]  [查找起始路徑]  [查找條件]  [處理動作]

查找起始路徑:指定具體搜索目標起始路徑;默認為當前目錄;

查找條件:指定的查找標準,可以根據文件名、大小、類型、從屬關系、權限等等標準進行;默認為找出指定路徑下的所有文件;

處理動作:對符合查找條件的文件做出的操作,例如刪除等操作;默認為輸出至標準輸出;

查找條件:也即查找標準,或表達式

表達式:選項和測試

測試:結果通常為布爾型("true", "false")

根據文件名查找:

-name  "pattern"

-iname "pattern"

支持glob風格的通配符;

*, ?, [], [^]

-regex pattern:基于正則表達式模式查找文件,匹配是整個路徑,而非其名;(不常用)

 

根據文件從屬關系查找:

-user USERNAME:查找屬主指定用戶的所有文件;

-group GRPNAME:查找屬組指定組的所有文件;

-uid UID:查找屬主指定的UID的所有文件;

-gid GID:查找屬組指定的GID的所有文件;

-nouser:查找沒有屬主的文件;

-nogroup:查找沒有屬組的文件;

根據文件的類型查找:

-type TYPE:

f: 普通文件

d: 目錄文件

l:符號鏈接文件

b:塊設備 文件

c:字符設備文件

p:管道文件

s:套接字文件

 

組合測試:

與:-a, 默認組合邏輯;

或:-o

非:-not, !

練習:

1、找出/tmp目錄下屬主為非root的所有文件;

2、找出/tmp目錄下文件名中不包含fstab字符串的文件;

3、找出/tmp目錄下屬主為非root,而且文件名不包含fstab字符串的文件;

!A -a !B = !(A -o B)

!A -o !B = !(A -a B)

根據文件的大小查找:

-size [+|-]#UNIT

常用單位:k, M, G

 

#UNIT:(#-1, #]

-#UNIT:[0,#-1]

+#UNIT:(#, oo)

根據時間戳查找:

以“天”為單位:

-atime  [+|-]#

#:[#, #-1)

-#:(#, 0]

+#:(oo, #-1]

-mtime

-ctime

以“分鐘”為單位:

-amin

-mmin

-cmin

根據權限查找:

-perm  [/|-]mode

mode:精確權限匹配;

/mode:任何一類用戶(u,g,o)的權限中的任何一位(r,w,x)符合條件即滿足;

9位權限之間存在“或”關系;

-mode:每一類用戶(u,g,o)的權限中的每一位(r,w,x)同時符合條件即滿足;

9位權限之間存在“與”關系;

處理動作:

-print:輸出至標準輸出;默認的動作;

-ls:類似于對查找到的文件執行“ls -l”命令,輸出文件的詳細信息;

-delete:刪除查找到的文件;

-fls /PATH/TO/SOMEFILE:把查找到的所有文件的長格式信息保存至指定文件中;

-ok COMMAND {} \;   :對查找到的每個文件執行由COMMAND表示的命令;每次操作都由用戶進行確認;

-exec COMMAND {} \;  :對查找到的每個文件執行由COMMAND表示的命令;

 

注意:find傳遞查找到的文件路徑至后面的命令時,是先查找出所有符合條件的文件路徑,并一次性傳遞給后面的命令;但是有些命令不能接受過長的參數,此時命令執行會失??;另一種方式可規避此問題:

find | xargs COMMAND

例:

             1、查找/var目錄下屬主為root,且屬組為mail的所有文件或目錄;

~]# find /var -user root -a -group mail -ls

 

             2、查找/usr目錄下不屬于root,      bin或hadoop的所有文件或目錄;用兩種方法;

~]# 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目錄下最近一周內其內容修改過,且屬主不是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、查找當前系統上沒有屬或屬組,且最近一周內曾被訪問過的文件或目錄;

~]# find  /  \( -nouser -o -nogroup \)  -atime  -7  -ls

 

             5、查找/etc目錄下大于1M且類型為普通文件的所有文件;

~]# find /etc -size +1M -type f -exec ls -lh {} \;

 

             6、查找/etc目錄下所有用戶都沒有寫權限的文件;

~]# find /etc -not -perm /222 -type f -ls                                        

 

             7、查找/etc目錄至少有一類用戶沒有執行權限的文件;

~]# find /etc -not -perm -111 -type f -ls

 

             8、查找/etc/init.d/目錄下,所有用戶都有執行權限,且其它用戶有寫權限的所有文件;

~]# find /etc -perm -113 -type f -ls

原創文章,作者:北京凱振飛,如若轉載,請注明出處:http://www.www58058.com/50519

(0)
北京凱振飛北京凱振飛
上一篇 2016-10-17
下一篇 2016-10-17

相關推薦

  • 馬哥教育網絡班21期+第六周課程練習

    1、描述計算機的組成及其功能 答: (1)計算機組成: 輸入(鍵盤)、輸出(顯示器),存儲器(硬盤),運算器,控制器(CPU) (2)實現功能:    1)文件系統    2)內存管理    3)網絡功能    4)進程管理    5)驅動程序 2、按系列羅列…

    Linux干貨 2016-08-15
  • 文本處理-三劍客-grep

    文本過濾
    grep [OPTIONS] PATTERN [FILE…]

    2018-03-16
  • CentOS7下利用rsyslog+loganalyzer配置日志服務器及Linux和windows客戶端配置

    隨著機房內的服務器和網絡設備增加,日志管理和查詢就成了讓系統管理員頭疼的事。 系統管理員遇到的常見問題如下: 1、日常維護過程中不可能登錄到每一臺服務器和設備上去查看日志; 2、網絡設備上的存儲空間有限,不可能存儲日期太長的日志,而系統出現問題又有可能是很久以前發生的某些操作造成的; 3、在某些非法入侵的情況下,入侵者一般都會清除本地日志…

    2017-03-15
  • CentOS系統啟動流程

    概述:系統啟動流程是Linux一個重要的內容,深入了解啟動流程會對我們學習Linux起到一個順水推舟的作用。因為CentOS 7改動較大,所以下面的內容只是針對CentOS 5和6來說的。下面進入正題。 啟動流程:  第一步:POST加電自檢    此過程的就是為了檢測一下外界的硬件設備是否能夠正常運行,如CPU,內存設備,硬盤…

    Linux干貨 2016-09-13
  • ansible

    運維自動化發展歷程,ansible 命令使用

    2018-01-13
  • N22-冥界之王-第7周作業

    1、創建一個10G分區,并格式為ext4文件系統;   (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;       在虛擬機里新添加一塊磁盤20G,/dev/sdb     &…

    Linux干貨 2016-09-26
欧美性久久久久