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:显示过程;

2Bash特性总结:     

  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

失败: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.178linux.com/50519

(0)
北京凯振飞北京凯振飞
上一篇 2016-10-17
下一篇 2016-10-17

相关推荐

  • 用户、组及权限管理详解

    用户类别:Liunx中用户标识范围在0-65535之间; 超级用户(管理员) —— 默认为root,拥有所有权限。UID与GID值为0, 普通用户 系统用户 —— CentOS6中UID与GID值为1~499,CentOS7中UID与GID值为1~999。默认不能登录系统,存在主要是满足系统进程对文件属主的需求; 登录用户 —— CentOS6中UID与GI…

    2018-03-08
  • 马哥教育网络班21期+第4周作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@localhost ~]# cp -r /etc/skel /home/ && mv /home/skel&nbsp…

    Linux干货 2016-08-02
  • Linux的文件系统架构基础

    前言     当今计算机操作系统来说常见功能主要有:进程调度、内存管理、文件系统管理、网络协议栈支持、驱动程序管理、安全功能等。所有对于我们来讲学习Linux文件系统也是一个十分重要的知识,也是学习Linux的必备基础知识,学习好Linux的文件系统知识也是为接下来学习Linux的其他知识奠定良好的基础 关键词  &n…

    Linux干货 2015-04-16
  • 磁盘管理之LVM

    1、什么是LVM     LVM(Logical Volume Manager)逻辑卷管理,是linux环境下将一种将一个或多个硬盘的分区在逻辑上集合来呈现给上层应用,对磁盘实现动态管理的机制。相对于普通的磁盘分区有很大的灵活性,使用LVM在一定程度上就可以解决普通磁盘分区带来的问题。 2、专业术语     &nbsp…

    Linux干货 2016-09-02
  • Linux基本文本管理命令

    一.Linux上的文件管理命令都有哪些,其使用的方法及其相关演示1.cp命令:copy (文件复制功能)源文件,目标文件单源复制:cp [OPTION]…[-T] SOURCE DEST多源复制:cp [OPTION]…SOURCE…DIRECTORYcp [OPTION]… -T DIRECTORY SOURCE… 单源复制:cp [OPTION]…[-T…

    2017-09-20
  • tcp通讯的服务器和客户端解析

    服务器端编程步骤, 1.创建Socket对象,下文中的socket都表示一个socket对象 2.绑定IP地址和端口,服务器的IP和端口 3.开始监听,将在指定的端口上监听,listen() 如果对方申请连接这个IP和端口,将被听到,这个过程 4.获取用于传输数据的Socket对象 socket.accept() ->(socket object,ad…

    Linux干货 2018-01-01